diff --git a/.gitignore b/.gitignore index 0c34ff9fd63..cf8eba036a5 100644 --- a/.gitignore +++ b/.gitignore @@ -342,7 +342,7 @@ healthchecksdb # NodeJS node_modules handbook/node_modules -handbook/build +# handbook/build # Ignore project some folders framework/**/*.xml diff --git a/framework/Furion.Extras.Authentication.JwtBearer/Furion.Extras.Authentication.JwtBearer.csproj b/framework/Furion.Extras.Authentication.JwtBearer/Furion.Extras.Authentication.JwtBearer.csproj index 690e35cfb47..4dcd4868b47 100644 --- a/framework/Furion.Extras.Authentication.JwtBearer/Furion.Extras.Authentication.JwtBearer.csproj +++ b/framework/Furion.Extras.Authentication.JwtBearer/Furion.Extras.Authentication.JwtBearer.csproj @@ -2,7 +2,7 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 Furion Jwt 授权验证拓展插件。 enable diff --git a/framework/Furion.Extras.DatabaseAccessor.Dapper/Furion.Extras.DatabaseAccessor.Dapper.csproj b/framework/Furion.Extras.DatabaseAccessor.Dapper/Furion.Extras.DatabaseAccessor.Dapper.csproj index 0063babe860..36db83ddc8c 100644 --- a/framework/Furion.Extras.DatabaseAccessor.Dapper/Furion.Extras.DatabaseAccessor.Dapper.csproj +++ b/framework/Furion.Extras.DatabaseAccessor.Dapper/Furion.Extras.DatabaseAccessor.Dapper.csproj @@ -2,7 +2,7 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 Furion 数据库访问器 Dapper 插件。 enable diff --git a/framework/Furion.Extras.DatabaseAccessor.MongoDB/Furion.Extras.DatabaseAccessor.MongoDB.csproj b/framework/Furion.Extras.DatabaseAccessor.MongoDB/Furion.Extras.DatabaseAccessor.MongoDB.csproj index cbc7ffe3e61..2a07d8ce7c1 100644 --- a/framework/Furion.Extras.DatabaseAccessor.MongoDB/Furion.Extras.DatabaseAccessor.MongoDB.csproj +++ b/framework/Furion.Extras.DatabaseAccessor.MongoDB/Furion.Extras.DatabaseAccessor.MongoDB.csproj @@ -2,7 +2,7 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 Furion 数据库访问器 MongoDB 插件。 enable diff --git a/framework/Furion.Extras.DatabaseAccessor.SqlSugar/Furion.Extras.DatabaseAccessor.SqlSugar.csproj b/framework/Furion.Extras.DatabaseAccessor.SqlSugar/Furion.Extras.DatabaseAccessor.SqlSugar.csproj index 83d9f32da68..d56ea9f3ee9 100644 --- a/framework/Furion.Extras.DatabaseAccessor.SqlSugar/Furion.Extras.DatabaseAccessor.SqlSugar.csproj +++ b/framework/Furion.Extras.DatabaseAccessor.SqlSugar/Furion.Extras.DatabaseAccessor.SqlSugar.csproj @@ -2,7 +2,7 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 Furion 数据库访问器 SqlSugar 插件。 enable diff --git a/framework/Furion.Extras.DependencyModel.CodeAnalysis/Furion.Extras.DependencyModel.CodeAnalysis.csproj b/framework/Furion.Extras.DependencyModel.CodeAnalysis/Furion.Extras.DependencyModel.CodeAnalysis.csproj index 2ddd4a283f4..9a1d4f0bb9e 100644 --- a/framework/Furion.Extras.DependencyModel.CodeAnalysis/Furion.Extras.DependencyModel.CodeAnalysis.csproj +++ b/framework/Furion.Extras.DependencyModel.CodeAnalysis/Furion.Extras.DependencyModel.CodeAnalysis.csproj @@ -2,7 +2,7 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 Furion 程序集扫描和代码分析拓展插件。 enable diff --git a/framework/Furion.Extras.Logging.Serilog/Furion.Extras.Logging.Serilog.csproj b/framework/Furion.Extras.Logging.Serilog/Furion.Extras.Logging.Serilog.csproj index 9de1a98db72..01ca2510a8d 100644 --- a/framework/Furion.Extras.Logging.Serilog/Furion.Extras.Logging.Serilog.csproj +++ b/framework/Furion.Extras.Logging.Serilog/Furion.Extras.Logging.Serilog.csproj @@ -2,7 +2,7 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 Furion 日志记录 Serilog 插件。 enable 0618 diff --git a/framework/Furion.Extras.ObjectMapper.Mapster/Furion.Extras.ObjectMapper.Mapster.csproj b/framework/Furion.Extras.ObjectMapper.Mapster/Furion.Extras.ObjectMapper.Mapster.csproj index 5e04af5deb4..6057be4e6c8 100644 --- a/framework/Furion.Extras.ObjectMapper.Mapster/Furion.Extras.ObjectMapper.Mapster.csproj +++ b/framework/Furion.Extras.ObjectMapper.Mapster/Furion.Extras.ObjectMapper.Mapster.csproj @@ -2,7 +2,7 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 Furion 对象映射 Mapster 插件。 enable diff --git a/framework/Furion.Pure.Extras.DependencyModel.CodeAnalysis/Furion.Pure.Extras.DependencyModel.CodeAnalysis.csproj b/framework/Furion.Pure.Extras.DependencyModel.CodeAnalysis/Furion.Pure.Extras.DependencyModel.CodeAnalysis.csproj index 0051357078d..33e6b235abc 100644 --- a/framework/Furion.Pure.Extras.DependencyModel.CodeAnalysis/Furion.Pure.Extras.DependencyModel.CodeAnalysis.csproj +++ b/framework/Furion.Pure.Extras.DependencyModel.CodeAnalysis/Furion.Pure.Extras.DependencyModel.CodeAnalysis.csproj @@ -2,7 +2,7 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 Furion 程序集扫描和代码分析拓展插件。 enable diff --git a/framework/Furion.Pure.Xunit/Furion.Pure.Xunit.csproj b/framework/Furion.Pure.Xunit/Furion.Pure.Xunit.csproj index 37109df4584..d769332076b 100644 --- a/framework/Furion.Pure.Xunit/Furion.Pure.Xunit.csproj +++ b/framework/Furion.Pure.Xunit/Furion.Pure.Xunit.csproj @@ -2,13 +2,13 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 Furion 纯净版 Xunit 单元测试拓展插件。 enable - + diff --git a/framework/Furion.Pure/Furion.Pure.csproj b/framework/Furion.Pure/Furion.Pure.csproj index 4e77d597716..2a53e082d7a 100644 --- a/framework/Furion.Pure/Furion.Pure.csproj +++ b/framework/Furion.Pure/Furion.Pure.csproj @@ -2,7 +2,7 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 让 .NET 开发更简单,更通用,更流行。 true enable @@ -27,19 +27,19 @@ - + - + - + diff --git a/framework/Furion.Xunit/Furion.Xunit.csproj b/framework/Furion.Xunit/Furion.Xunit.csproj index 8a7cc6e5f05..5c7de927601 100644 --- a/framework/Furion.Xunit/Furion.Xunit.csproj +++ b/framework/Furion.Xunit/Furion.Xunit.csproj @@ -2,13 +2,13 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 Furion Xunit 单元测试拓展插件。 enable - + diff --git a/framework/Furion/Furion.csproj b/framework/Furion/Furion.csproj index 5242447bb34..88ba351407e 100644 --- a/framework/Furion/Furion.csproj +++ b/framework/Furion/Furion.csproj @@ -2,7 +2,7 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 让 .NET 开发更简单,更通用,更流行。 true enable @@ -27,19 +27,19 @@ - + - + - + diff --git a/handbook/.gitignore b/handbook/.gitignore index 50b2292ed58..63048b575e6 100644 --- a/handbook/.gitignore +++ b/handbook/.gitignore @@ -2,7 +2,7 @@ node_modules # Production -build +# build # Generated files .docusaurus diff --git a/handbook/build/.nojekyll b/handbook/build/.nojekyll new file mode 100644 index 00000000000..e69de29bb2d diff --git a/handbook/build/404.html b/handbook/build/404.html new file mode 100644 index 00000000000..da665df818f --- /dev/null +++ b/handbook/build/404.html @@ -0,0 +1,17 @@ + + + + + +Page Not Found | Furion + + + + + +
+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + + + \ No newline at end of file diff --git a/handbook/build/assets/css/styles.9067093f.css b/handbook/build/assets/css/styles.9067093f.css new file mode 100644 index 00000000000..8a6bd14a059 --- /dev/null +++ b/handbook/build/assets/css/styles.9067093f.css @@ -0,0 +1 @@ +@charset "UTF-8";.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.animate__headShake,.animate__heartBeat,.animate__pulse{animation-timing-function:ease-in-out}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.furion-log-item,.furion-who-custom,.furion-who-des,.loadingRing_RJI3 div{box-sizing:border-box}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#25c2a0;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#46cbae;--ifm-color-primary-lighter:#66d4bd;--ifm-color-primary-lightest:#92e0d0;--ifm-code-font-size:95%;--animate-duration:1s;--animate-delay:1s;--animate-repeat:1;--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:transparent}html{-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base)}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child,.system-window pre{margin-bottom:0!important}.margin-top--none,.margin-vert--none,.tabItem_LNqP{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:transparent;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul,.tabList__CuJ{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{list-style:none;padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:rgba(235,237,240,.15);--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:rgba(0,164,0,.15);--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:rgba(84,199,236,.15);--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:rgba(255,186,0,.15);--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:rgba(250,56,62,.15);--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{-webkit-text-decoration-color:var(--ifm-alert-border-color);text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after,.searchBarContainer_NW3z.searchIndexLoading_EJ1f .searchBarLoadingRing_YnHq{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area.breadcrumbs__link[href]:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:-webkit-any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:transparent;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block,.furion-contributor-item img{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.content_knG7 a,.hitFooter_E9YW a,.suggestion_fB_2.cursor_eG29 mark{text-decoration:underline}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;list-style:none;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;pointer-events:none;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.sidebar_re4s,.tableOfContents_jeP5{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor transparent;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.collapsibleContent_i85q>:last-child,.footer__items,.searchResultItem_U687>h2,.tabItem_Ymn6>:last-child{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.title_f1Hy{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{list-style:none;margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.docsWrapper_BCFX,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:-webkit-sticky;position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.furion-banner-item,.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}#nprogress,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input:-ms-input-placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-duration:.25s;transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:rgba(0,0,0,.6);right:0;transition-duration:.1s;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid transparent;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:hsla(0,0%,100%,.05);--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.docusaurus-highlight-code-line{background-color:#484d5b;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.animate__animated{animation-duration:1s;animation-duration:var(--animate-duration);animation-fill-mode:both}.animate__animated.animate__infinite{animation-iteration-count:infinite}.animate__animated.animate__repeat-1{animation-iteration-count:1;animation-iteration-count:var(--animate-repeat)}.animate__animated.animate__repeat-2{animation-iteration-count:2;animation-iteration-count:calc(var(--animate-repeat)*2)}.animate__animated.animate__repeat-3{animation-iteration-count:3;animation-iteration-count:calc(var(--animate-repeat)*3)}.animate__animated.animate__delay-1s{animation-delay:1s;animation-delay:var(--animate-delay)}.animate__animated.animate__delay-2s{animation-delay:2s;animation-delay:calc(var(--animate-delay)*2)}.animate__animated.animate__delay-3s{animation-delay:3s;animation-delay:calc(var(--animate-delay)*3)}.animate__animated.animate__delay-4s{animation-delay:4s;animation-delay:calc(var(--animate-delay)*4)}.animate__animated.animate__delay-5s{animation-delay:5s;animation-delay:calc(var(--animate-delay)*5)}.animate__animated.animate__faster{animation-duration:.5s;animation-duration:calc(var(--animate-duration)/2)}.animate__animated.animate__fast{animation-duration:.8s;animation-duration:calc(var(--animate-duration)*.8)}.animate__animated.animate__slow{animation-duration:2s;animation-duration:calc(var(--animate-duration)*2)}.animate__animated.animate__slower{animation-duration:3s;animation-duration:calc(var(--animate-duration)*3)}@keyframes a{0%,20%,53%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translateZ(0)}40%,43%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{transform:translateZ(0) scaleY(.95);transition-timing-function:cubic-bezier(.215,.61,.355,1)}90%{transform:translate3d(0,-4px,0) scaleY(1.02)}}.animate__bounce{animation-name:a;transform-origin:center bottom}@keyframes b{0%,50%,to{opacity:1}25%,75%{opacity:0}}.animate__flash{animation-name:b}@keyframes c{0%,to{transform:scaleX(1)}50%{transform:scale3d(1.05,1.05,1.05)}}.animate__pulse{animation-name:c}@keyframes d{0%,to{transform:scaleX(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}}.animate__rubberBand{animation-name:d}@keyframes e{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}.animate__shakeX{animation-name:e}@keyframes f{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(0,-10px,0)}20%,40%,60%,80%{transform:translate3d(0,10px,0)}}.animate__shakeY{animation-name:f}@keyframes g{0%,50%{transform:translateX(0)}6.5%{transform:translateX(-6px) rotateY(-9deg)}18.5%{transform:translateX(5px) rotateY(7deg)}31.5%{transform:translateX(-3px) rotateY(-5deg)}43.5%{transform:translateX(2px) rotateY(3deg)}}.animate__headShake{animation-name:g}@keyframes h{20%{transform:rotate(15deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-5deg)}to{transform:rotate(0)}}.animate__swing{animation-name:h;transform-origin:top center}@keyframes i{0%,to{transform:scaleX(1)}10%,20%{transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}}.animate__tada{animation-name:i}@keyframes j{0%,to{transform:translateZ(0)}15%{transform:translate3d(-25%,0,0) rotate(-5deg)}30%{transform:translate3d(20%,0,0) rotate(3deg)}45%{transform:translate3d(-15%,0,0) rotate(-3deg)}60%{transform:translate3d(10%,0,0) rotate(2deg)}75%{transform:translate3d(-5%,0,0) rotate(-1deg)}}.animate__wobble{animation-name:j}@keyframes k{0%,11.1%,to{transform:translateZ(0)}22.2%{transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{transform:skewX(6.25deg) skewY(6.25deg)}44.4%{transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{transform:skewX(.390625deg) skewY(.390625deg)}88.8%{transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.animate__jello{animation-name:k;transform-origin:center}@keyframes l{0%,28%,70%{transform:scale(1)}14%,42%{transform:scale(1.3)}}.animate__heartBeat{animation-duration:1.3s;animation-duration:calc(var(--animate-duration)*1.3);animation-name:l}@keyframes m{0%{opacity:.7;transform:translateY(-1200px) scale(.7)}80%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:1;transform:scale(1)}}.animate__backInDown{animation-name:m}@keyframes n{0%{opacity:.7;transform:translateX(-2000px) scale(.7)}80%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:1;transform:scale(1)}}.animate__backInLeft{animation-name:n}@keyframes o{0%{opacity:.7;transform:translateX(2000px) scale(.7)}80%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:1;transform:scale(1)}}.animate__backInRight{animation-name:o}@keyframes p{0%{opacity:.7;transform:translateY(1200px) scale(.7)}80%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:1;transform:scale(1)}}.animate__backInUp{animation-name:p}@keyframes q{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:.7;transform:translateY(700px) scale(.7)}}.animate__backOutDown{animation-name:q}@keyframes r{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:.7;transform:translateX(-2000px) scale(.7)}}.animate__backOutLeft{animation-name:r}@keyframes s{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateX(0) scale(.7)}to{opacity:.7;transform:translateX(2000px) scale(.7)}}.animate__backOutRight{animation-name:s}@keyframes t{0%{opacity:1;transform:scale(1)}20%{opacity:.7;transform:translateY(0) scale(.7)}to{opacity:.7;transform:translateY(-700px) scale(.7)}}.animate__backOutUp{animation-name:t}@keyframes u{0%,20%,40%,60%,80%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scaleX(1)}}.animate__bounceIn{animation-duration:.75s;animation-duration:calc(var(--animate-duration)*.75);animation-name:u}@keyframes v{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;transform:translate3d(0,25px,0) scaleY(.9)}75%{transform:translate3d(0,-10px,0) scaleY(.95)}90%{transform:translate3d(0,5px,0) scaleY(.985)}to{transform:translateZ(0)}}.animate__bounceInDown{animation-name:v}@keyframes w{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;transform:translate3d(25px,0,0) scaleX(1)}75%{transform:translate3d(-10px,0,0) scaleX(.98)}90%{transform:translate3d(5px,0,0) scaleX(.995)}to{transform:translateZ(0)}}.animate__bounceInLeft{animation-name:w}@keyframes x{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;transform:translate3d(-25px,0,0) scaleX(1)}75%{transform:translate3d(10px,0,0) scaleX(.98)}90%{transform:translate3d(-5px,0,0) scaleX(.995)}to{transform:translateZ(0)}}.animate__bounceInRight{animation-name:x}@keyframes y{0%,60%,75%,90%,to{animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;transform:translate3d(0,-20px,0) scaleY(.9)}75%{transform:translate3d(0,10px,0) scaleY(.95)}90%{transform:translate3d(0,-5px,0) scaleY(.985)}to{transform:translateZ(0)}}.animate__bounceInUp{animation-name:y}@keyframes z{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.animate__bounceOut{animation-duration:.75s;animation-duration:calc(var(--animate-duration)*.75);animation-name:z}@keyframes A{20%{transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;transform:translate3d(0,2000px,0) scaleY(3)}}.animate__bounceOutDown{animation-name:A}@keyframes B{20%{opacity:1;transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;transform:translate3d(-2000px,0,0) scaleX(2)}}.animate__bounceOutLeft{animation-name:B}@keyframes C{20%{opacity:1;transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;transform:translate3d(2000px,0,0) scaleX(2)}}.animate__bounceOutRight{animation-name:C}@keyframes D{20%{transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;transform:translate3d(0,-2000px,0) scaleY(3)}}.animate__bounceOutUp{animation-name:D}@keyframes E{0%{opacity:0}to{opacity:1}}.animate__fadeIn{animation-name:E}@keyframes F{0%{opacity:0;transform:translate3d(0,-100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInDown{animation-name:F}@keyframes G{0%{opacity:0;transform:translate3d(0,-2000px,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInDownBig{animation-name:G}@keyframes H{0%{opacity:0;transform:translate3d(-100%,0,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInLeft{animation-name:H}@keyframes I{0%{opacity:0;transform:translate3d(-2000px,0,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInLeftBig{animation-name:I}@keyframes J{0%{opacity:0;transform:translate3d(100%,0,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInRight{animation-name:J}@keyframes K{0%{opacity:0;transform:translate3d(2000px,0,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInRightBig{animation-name:K}@keyframes L{0%{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInUp{animation-name:L}@keyframes M{0%{opacity:0;transform:translate3d(0,2000px,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInUpBig{animation-name:M}@keyframes N{0%{opacity:0;transform:translate3d(-100%,-100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInTopLeft{animation-name:N}@keyframes O{0%{opacity:0;transform:translate3d(100%,-100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInTopRight{animation-name:O}@keyframes P{0%{opacity:0;transform:translate3d(-100%,100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInBottomLeft{animation-name:P}@keyframes Q{0%{opacity:0;transform:translate3d(100%,100%,0)}to{opacity:1;transform:translateZ(0)}}.animate__fadeInBottomRight{animation-name:Q}@keyframes R{0%{opacity:1}to{opacity:0}}.animate__fadeOut{animation-name:R}@keyframes S{0%{opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.animate__fadeOutDown{animation-name:S}@keyframes T{0%{opacity:1}to{opacity:0;transform:translate3d(0,2000px,0)}}.animate__fadeOutDownBig{animation-name:T}@keyframes U{0%{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0)}}.animate__fadeOutLeft{animation-name:U}@keyframes V{0%{opacity:1}to{opacity:0;transform:translate3d(-2000px,0,0)}}.animate__fadeOutLeftBig{animation-name:V}@keyframes W{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0)}}.animate__fadeOutRight{animation-name:W}@keyframes X{0%{opacity:1}to{opacity:0;transform:translate3d(2000px,0,0)}}.animate__fadeOutRightBig{animation-name:X}@keyframes Y{0%{opacity:1}to{opacity:0;transform:translate3d(0,-100%,0)}}.animate__fadeOutUp{animation-name:Y}@keyframes Z{0%{opacity:1}to{opacity:0;transform:translate3d(0,-2000px,0)}}.animate__fadeOutUpBig{animation-name:Z}@keyframes aa{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(-100%,-100%,0)}}.animate__fadeOutTopLeft{animation-name:aa}@keyframes ba{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(100%,-100%,0)}}.animate__fadeOutTopRight{animation-name:ba}@keyframes ca{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(100%,100%,0)}}.animate__fadeOutBottomRight{animation-name:ca}@keyframes da{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(-100%,100%,0)}}.animate__fadeOutBottomLeft{animation-name:da}@keyframes ea{0%{animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn)}40%{animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg)}50%{animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg)}80%{animation-timing-function:ease-in;transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0)}to{animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0)}}.animate__animated.animate__flip{animation-name:ea;-webkit-backface-visibility:visible;backface-visibility:visible}@keyframes fa{0%{animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateX(90deg)}40%{animation-timing-function:ease-in;transform:perspective(400px) rotateX(-20deg)}60%{opacity:1;transform:perspective(400px) rotateX(10deg)}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}.animate__flipInX{animation-name:fa;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.animate__flipInY,.animate__flipOutX{-webkit-backface-visibility:visible!important}@keyframes ga{0%{animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateY(90deg)}40%{animation-timing-function:ease-in;transform:perspective(400px) rotateY(-20deg)}60%{opacity:1;transform:perspective(400px) rotateY(10deg)}80%{transform:perspective(400px) rotateY(-5deg)}to{transform:perspective(400px)}}.animate__flipInY{animation-name:ga;backface-visibility:visible!important}@keyframes ha{0%{transform:perspective(400px)}30%{opacity:1;transform:perspective(400px) rotateX(-20deg)}to{opacity:0;transform:perspective(400px) rotateX(90deg)}}.animate__flipOutX{animation-duration:.75s;animation-duration:calc(var(--animate-duration)*.75);animation-name:ha;backface-visibility:visible!important}@keyframes ia{0%{transform:perspective(400px)}30%{opacity:1;transform:perspective(400px) rotateY(-15deg)}to{opacity:0;transform:perspective(400px) rotateY(90deg)}}.animate__flipOutY{animation-duration:.75s;animation-duration:calc(var(--animate-duration)*.75);animation-name:ia;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@keyframes ja{0%{opacity:0;transform:translate3d(100%,0,0) skewX(-30deg)}60%{opacity:1;transform:skewX(20deg)}80%{transform:skewX(-5deg)}to{transform:translateZ(0)}}.animate__lightSpeedInRight{animation-name:ja;animation-timing-function:ease-out}@keyframes ka{0%{opacity:0;transform:translate3d(-100%,0,0) skewX(30deg)}60%{opacity:1;transform:skewX(-20deg)}80%{transform:skewX(5deg)}to{transform:translateZ(0)}}.animate__lightSpeedInLeft{animation-name:ka;animation-timing-function:ease-out}@keyframes la{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) skewX(30deg)}}.animate__lightSpeedOutRight{animation-name:la;animation-timing-function:ease-in}@keyframes ma{0%{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0) skewX(-30deg)}}.animate__lightSpeedOutLeft{animation-name:ma;animation-timing-function:ease-in}@keyframes na{0%{opacity:0;transform:rotate(-200deg)}to{opacity:1;transform:translateZ(0)}}.animate__rotateIn{animation-name:na;transform-origin:center}@keyframes oa{0%{opacity:0;transform:rotate(-45deg)}to{opacity:1;transform:translateZ(0)}}.animate__rotateInDownLeft{animation-name:oa;transform-origin:left bottom}.animate__rotateInDownRight{animation-name:pa;transform-origin:right bottom}@keyframes pa{0%{opacity:0;transform:rotate(45deg)}to{opacity:1;transform:translateZ(0)}}.animate__rotateInUpLeft{animation-name:pa;transform-origin:left bottom}@keyframes qa{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:translateZ(0)}}.animate__rotateInUpRight{animation-name:qa;transform-origin:right bottom}@keyframes ra{0%{opacity:1}to{opacity:0;transform:rotate(200deg)}}.animate__rotateOut{animation-name:ra;transform-origin:center}@keyframes sa{0%{opacity:1}to{opacity:0;transform:rotate(45deg)}}.animate__rotateOutDownLeft{animation-name:sa;transform-origin:left bottom}.animate__rotateOutDownRight{animation-name:ta;transform-origin:right bottom}@keyframes ta{0%{opacity:1}to{opacity:0;transform:rotate(-45deg)}}.animate__rotateOutUpLeft{animation-name:ta;transform-origin:left bottom}@keyframes ua{0%{opacity:1}to{opacity:0;transform:rotate(90deg)}}.animate__rotateOutUpRight{animation-name:ua;transform-origin:right bottom}@keyframes va{0%{animation-timing-function:ease-in-out}20%,60%{animation-timing-function:ease-in-out;transform:rotate(80deg)}40%,80%{animation-timing-function:ease-in-out;opacity:1;transform:rotate(60deg)}to{opacity:0;transform:translate3d(0,700px,0)}}.animate__hinge{animation-duration:2s;animation-duration:calc(var(--animate-duration)*2);animation-name:va;transform-origin:top left}@keyframes wa{0%{opacity:0;transform:scale(.1) rotate(30deg);transform-origin:center bottom}50%{transform:rotate(-10deg)}70%{transform:rotate(3deg)}to{opacity:1;transform:scale(1)}}.animate__jackInTheBox{animation-name:wa}@keyframes xa{0%{opacity:0;transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;transform:translateZ(0)}}.animate__rollIn{animation-name:xa}@keyframes ya{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) rotate(120deg)}}.animate__rollOut{animation-name:ya}@keyframes za{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.animate__zoomIn{animation-name:za}@keyframes Aa{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}}.animate__zoomInDown{animation-name:Aa}@keyframes Ba{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0)}}.animate__zoomInLeft{animation-name:Ba}@keyframes Ca{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0)}}.animate__zoomInRight{animation-name:Ca}@keyframes Da{0%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0)}60%{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}}.animate__zoomInUp{animation-name:Da}@keyframes Ea{0%{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.animate__zoomOut{animation-name:Ea}@keyframes Fa{40%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}to{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0)}}.animate__zoomOutDown{animation-name:Fa;transform-origin:center bottom}@keyframes Ga{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(-2000px,0,0)}}.animate__zoomOutLeft{animation-name:Ga;transform-origin:left center}@keyframes Ha{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(2000px,0,0)}}.animate__zoomOutRight{animation-name:Ha;transform-origin:right center}@keyframes Ia{40%{animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}to{animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0)}}.animate__zoomOutUp{animation-name:Ia;transform-origin:center bottom}@keyframes Ja{0%{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translateZ(0)}}.animate__slideInDown{animation-name:Ja}@keyframes Ka{0%{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translateZ(0)}}.animate__slideInLeft{animation-name:Ka}@keyframes La{0%{transform:translate3d(100%,0,0);visibility:visible}to{transform:translateZ(0)}}.animate__slideInRight{animation-name:La}@keyframes Ma{0%{transform:translate3d(0,100%,0);visibility:visible}to{transform:translateZ(0)}}.animate__slideInUp{animation-name:Ma}@keyframes Na{0%{transform:translateZ(0)}to{transform:translate3d(0,100%,0);visibility:hidden}}.animate__slideOutDown{animation-name:Na}@keyframes Oa{0%{transform:translateZ(0)}to{transform:translate3d(-100%,0,0);visibility:hidden}}.animate__slideOutLeft{animation-name:Oa}@keyframes Pa{0%{transform:translateZ(0)}to{transform:translate3d(100%,0,0);visibility:hidden}}.animate__slideOutRight{animation-name:Pa}@keyframes Qa{0%{transform:translateZ(0)}to{transform:translate3d(0,-100%,0);visibility:hidden}}.animate__slideOutUp{animation-name:Qa}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#docusaurus-base-url-issue-banner-container,.collapseSidebarButton_PEFL,.docSidebarContainer_b6E3,.hideAction_vcyE>svg,.sidebarLogo_F_0z,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,#f5f6f7);border-radius:6px;box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64);left:auto!important;margin-top:8px;padding:var(--search-local-spacing,12px);position:relative;right:0!important;width:var(--search-local-modal-width,560px)}html[data-theme=dark] .searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,var(--ifm-background-color));box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309)}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2{align-items:center;background:var(--search-local-hit-background,#fff);border-radius:4px;box-shadow:var(--search-local-hit-shadow,0 1px 3px 0 #d4d9e1);color:var(--search-local-hit-color,#444950);cursor:pointer;display:flex;flex-direction:row;height:var(--search-local-hit-height,56px);padding:0 var(--search-local-spacing,12px);width:100%}.hitTree_kk6K,.noResults_l6Q3{align-items:center;display:flex}html[data-theme=dark] .dropdownMenu_qbY6 .suggestion_fB_2{background:var(--search-local-hit-background,var(--ifm-color-emphasis-100));box-shadow:var(--search-local-hit-shadow,none);color:var(--search-local-hit-color,var(--ifm-font-color-base))}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2:not(:last-child){margin-bottom:4px}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2.cursor_eG29{background-color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitFooter_E9YW a,.hitIcon_a7Zy,.hitPath_ieM4,.hitTree_kk6K,.noResultsIcon_EBY5{color:var(--search-local-muted-color,#969faf)}html[data-theme=dark] .hitIcon_a7Zy,html[data-theme=dark] .hitPath_ieM4,html[data-theme=dark] .hitTree_kk6K,html[data-theme=dark] .noResultsIcon_EBY5{color:var(--search-local-muted-color,var(--ifm-color-secondary-darkest))}.hitTree_kk6K>svg{height:var(--search-local-hit-height,56px);opacity:.5;width:24px}.hitIcon_a7Zy,.hitTree_kk6K>svg{stroke-width:var(--search-local-icon-stroke-width,1.4)}.hitAction_NqkB,.hitIcon_a7Zy{height:20px;width:20px}.hitWrapper_sAK8{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;margin:0 8px;overflow-x:hidden;width:80%}.hitWrapper_sAK8 mark{background:none;color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitTitle_vyVt{font-size:.9em}.hitPath_ieM4{font-size:.75em}.hitPath_ieM4,.hitTitle_vyVt{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.noResults_l6Q3{flex-direction:column;justify-content:center;padding:var(--search-local-spacing,12px) 0}.noResultsIcon_EBY5{margin-bottom:var(--search-local-spacing,12px)}.hitFooter_E9YW{font-size:.85em;margin-top:var(--search-local-spacing,12px);text-align:center}.cursor_eG29 .hideAction_vcyE>svg,.tocCollapsibleContent_vkbj a{display:block}.suggestion_fB_2.cursor_eG29,.suggestion_fB_2.cursor_eG29 .hitIcon_a7Zy,.suggestion_fB_2.cursor_eG29 .hitPath_ieM4,.suggestion_fB_2.cursor_eG29 .hitTree_kk6K,.suggestion_fB_2.cursor_eG29 mark{color:var(--search-local-hit-active-color,var(--ifm-color-white))!important}.searchBarContainer_NW3z{margin-left:16px}.searchBarContainer_NW3z .searchBarLoadingRing_YnHq{display:none;left:10px;position:absolute;top:6px}.searchBarContainer_NW3z .searchClearButton_qk4g{background:none;border:none;line-height:1rem;padding:0;position:absolute;right:.8rem;top:50%;transform:translateY(-50%)}.navbar__search{position:relative}.searchIndexLoading_EJ1f .navbar__search-input{background-image:none}.searchHintContainer_Pkmr{align-items:center;display:flex;gap:4px;height:100%;justify-content:center;pointer-events:none;position:absolute;right:10px;top:0}.searchHint_iIMx{background-color:var(--ifm-navbar-search-input-background-color);border:1px solid var(--ifm-color-emphasis-500);box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-500);color:var(--ifm-navbar-search-input-placeholder-color)}.loadingRing_RJI3{display:inline-block;height:20px;opacity:var(--search-local-loading-icon-opacity,.5);position:relative;width:20px}.loadingRing_RJI3 div{animation:1.2s cubic-bezier(.5,0,.5,1) infinite Ra;border:2px solid var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color));border-color:var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color)) transparent transparent transparent;border-radius:50%;display:block;height:16px;margin:2px;position:absolute;width:16px}.loadingRing_RJI3 div:first-child{animation-delay:-.45s}.loadingRing_RJI3 div:nth-child(2){animation-delay:-.3s}.loadingRing_RJI3 div:nth-child(3){animation-delay:-.15s}@keyframes Ra{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.footerLogoLink_DDai{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_DDai:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{flex:1 0 auto}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{position:-webkit-sticky;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size);font-weight:var(--ifm-font-weight-bold)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.searchQueryInput_CFBF{background:var(--ifm-background-color);border:var(--ifm-global-border-width) solid var(--ifm-color-content-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-font-color-base);font-size:var(--ifm-font-size-base);margin-bottom:1rem;padding:.5rem;width:100%}.searchResultItem_U687{border-bottom:1px solid #dfe3e8;padding:1rem 0}.searchResultItemPath_uIbk{color:var(--ifm-color-content-secondary);font-size:.8rem;margin:.5rem 0 0}.searchResultItemSummary_oZHr{font-style:italic;margin:.5rem 0 0}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.label_p8vM{align-items:center;border-radius:3px;color:#fff;display:inline-flex;font-size:12px;line-height:normal;margin-left:-3px;margin-right:6px;padding:4px 6px;vertical-align:middle}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.icon_knQK{margin-right:4px}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity .2s ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:-webkit-sticky;position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:.15s;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;list-style:none;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:transparent transparent transparent var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;-ms-user-select:none;user-select:none}.hash-link:before{content:"#"}.containsTaskList_mC6p{list-style:none}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.blogPostFooterDetailsFull_mRVl{flex-direction:column}.tableOfContents_jeP5{position:-webkit-sticky;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.breadcrumbHomeIcon_OVgt{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.furion-banner{align-items:center;background-color:#211b50;color:#fff;padding:4rem 2rem}.furion-banner-container{display:flex;justify-content:space-between;margin:0 auto;max-width:1140px}.furion-banner-project{font-size:1.5em;font-weight:700}.furion-banner-description{-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text;background-image:linear-gradient(81deg,#8759ff,#3fc4fe,#42ffac);font-size:2.5em;font-weight:700;line-height:1.25;margin:24px 0}.furion-banner-spec{font-family:Muli;font-size:1em;font-weight:500;line-height:1.33;opacity:.7;padding:0}.furion-banner-spec li{list-style:none;margin-bottom:1em;padding-left:1em;position:relative}.furion-banner-spec li:before{background-color:#8759ff;content:"";height:4px;left:0;position:absolute;top:.5em;width:4px}.furion-support-platform{color:#fff;font-family:Muli;font-size:.85em;font-weight:500;line-height:2;margin-top:3em;opacity:.6}.furion-support-icons{display:flex;margin-top:12px}.furion-support-icons span{margin-right:20px}.furion-get-start,.furion-try-demo{background:#8759ff;border-radius:2em;color:#fff;display:inline-block;line-height:1.5;margin-top:4em;min-width:145px;padding:8px 32px;position:relative;text-align:center;text-decoration:none;white-space:nowrap}.furion-try-demo{background-color:#21b091;margin-left:20px}.furion-get-start:hover{background:rgba(135,89,255,.9)}.furion-try-demo:hover{opacity:.9}.furion-banner-item .system-window{width:34rem}.furion-get-start:hover,.furion-try-demo:hover{color:#fff;text-decoration:none}.system-top-bar{background-image:linear-gradient(90deg,rgba(136,89,255,.2),rgba(63,196,254,.2) 90%,rgba(66,255,172,.2));padding:.25em 1em}.system-top-bar-circle{border-radius:50%;display:inline-block;filter:brightness(100%);height:.5em;margin-left:.3em;width:.5em}.system-window{--ifm-leading:0;background:#211b50;border-radius:1em;overflow:hidden;padding:0;width:95%}.system-window iframe{border-radius:unset}.blue-accent{--uni-border-color:#3fbbfe;--uni-box-shadow-color:rgba(63,187,254,.1);--ifm-menu-color-active:#3fbbfe}.preview-border{border:1px solid #3fbbfe;box-shadow:0 6px 58px 0 rgba(63,187,254,.1)}.furion-content{margin-bottom:4em;margin-top:4em;text-align:center}.furion-small-title{color:#412a94;font-family:Muli;font-size:1em;font-weight:600;letter-spacing:1px;opacity:.6}.furion-big-title.dark,.furion-contributor-item.dark a,.furion-log-number span.dark,.furion-remark-p p.dark,.furion-small-title.dark{color:#f5f6f7}.furion-big-title{color:#412a94;font-family:Poppins;font-size:2em;font-weight:700;line-height:1.31;margin-bottom:2em}.furion-gitee-log{display:flex;flex-wrap:nowrap;justify-content:center}.furion-log-item{height:173px;margin-right:65px;position:relative;width:260px}.furion-log-jiao{background:#fff;border-right:1px dashed #a795e8;border-top:1px dashed #a795e8;height:100px;position:absolute;right:-6px;top:-6px;width:100px}.furion-log-jiao.dark{background:#18191a}.furion-log-item:last-child{margin-right:0}.furion-log-number{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;position:relative;width:100%;z-index:2}.furion-log-number div{font-size:3em;font-weight:700}.furion-log-number span{color:#1c1e21;font-family:Poppins,sans-serif;font-stretch:normal;font-style:normal;letter-spacing:normal;line-height:normal}.furion-remark{display:flex;justify-content:center}.furion-remark-item{border-image-slice:1;border-image-source:linear-gradient(var(--uni-border-gradient-degrees),#8759ff,#3fc4fe 51%,#42ffac);border-style:solid;border-width:6px;height:100%;margin:2em;max-width:320px;padding:4em 2em}.furion-remark-item:first-child{--uni-border-gradient-degrees:41deg;border-right:0;border-top:0}.furion-remark-item:nth-child(2){--uni-border-gradient-degrees:100deg;border:0}.furion-remark-item:last-child{--uni-border-gradient-degrees:221deg;border-bottom:0;border-left:0}.furion-remark-p{height:150px}.furion-remark-p h1{font-size:24px}.furion-remark-p p,.furion-who-des p{font-family:Muli;font-size:1em;line-height:1.75;opacity:.8}.furion-remark-p p{color:#474747;text-align:center}.furion-whouse{align-items:center;background-color:#412a94!important;color:#fff;display:flex;padding:5rem 0}.furion-who-custom{align-items:center;background-color:#fff;color:#723cff;display:flex;flex-wrap:wrap;justify-content:flex-end;min-height:500px;padding:6rem;text-align:right;width:60%}.furion-custom-img{color:transparent;margin-left:3em;text-decoration:none}.furion-who-des{padding:0 5rem}.furion-who-des p{color:#fff;margin-bottom:.8em}.footer{background-color:#211b50!important}.furion-links{margin:4em;text-align:center}.furion-links-content a{display:inline-block;font-size:20px;font-weight:600;margin:0 1em}.furion-contributors,.furion-proccesson{margin:4em 0;text-align:center}#dotnet-china{height:100px}.furion-contributor-item{background-color:#f3f3f3;border-radius:4px;box-shadow:4px 3px 16px -3px #0009;box-sizing:border-box;color:#333;display:inline-block;height:170px;margin:10px 5px;overflow:hidden;padding:10px;position:relative;text-align:center;width:130px}.furion-contributor-extra{background-color:#412a94;border-radius:4px;color:#fff;font-size:12px;padding:2px 5px;position:absolute;right:0;text-align:left;top:-9px}.furion-contributor-item a{color:#333;display:block;font-size:10pt;font-weight:700;text-decoration:none}.furion-contributor-item div{margin-top:10px}.furion-contributor-item.dark{background:#333}.furion-get-start-btn{display:flex;position:relative}.furion-version{color:#ff0;font-size:16px;position:absolute;right:0;top:-10px;z-index:10}.furion-wzi,.furion-wzi-title b{font-family:Arial,Helvetica,sans-serif;font-size:20px}.furion-bifa{background:linear-gradient(rgba(33,27,80,.8),rgba(65,42,148,.8)) 50%/cover no-repeat,url(/assets/images/bgs-0aa29929944208ef2b47cffbea86f230.jpg) 50%/cover no-repeat;color:#fff;display:flex;flex-direction:row-reverse;justify-content:center;padding:100px 0}.furion-wzi{border-left:1px solid rgba(137,147,180,.5);height:320px;letter-spacing:10px;padding:25px;-ms-writing-mode:tb-lr;writing-mode:vertical-lr}.furion-wzi span{color:#44bcfe;font-weight:500}.furion-wzi-title{align-items:center;background:0 0/8px 8px #4472c4;background-image:linear-gradient(#5b80d4 1px,transparent 0),linear-gradient(90deg,#5b80d4 1px,transparent 0);display:flex;font-size:22px;font-weight:500;height:320px;letter-spacing:12px;margin-left:40px;width:84px;-ms-writing-mode:tb-lr;writing-mode:vertical-lr}.furion-wzi-title b{letter-spacing:2px;margin:20px 0;-ms-writing-mode:lr-tb;writing-mode:horizontal-tb}.navbar{background-color:#211b50}.navbar__brand,.navbar__items,.navbar__link{color:#fff}.navbar__link--active,.navbar__link:hover{color:#ff0}.menu__list-item .navbar__link--active,.menu__list-item .navbar__link:hover{color:#743dff}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:-webkit-sticky;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_mhZE{display:flex;flex-direction:column;height:100%;max-height:100vh;padding-top:var(--ifm-navbar-height);position:-webkit-sticky;position:sticky;top:0;transition:opacity 50ms;width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar__6UL{padding-top:0}.sidebarHidden__LRd{height:0;opacity:0;overflow:hidden;visibility:hidden}.sidebarLogo_F_0z{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_F_0z img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;max-height:100vh;position:-webkit-sticky;position:sticky;top:0;transition:background-color var(--ifm-transition-fast) ease}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media screen and (max-width:1024px){.furion-banner-container{flex-direction:column;justify-content:unset}.furion-get-start-btn{text-align:center}#dotnet-china{height:45px}.furion-banner-item .system-window{margin-top:3rem;width:100%}.furion-gitee-log{align-items:center;flex-direction:column;flex-wrap:unset;justify-content:center;padding:20px}.furion-log-item{height:173px;margin-right:0;margin-top:25px;width:100%}.furion-big-title{margin-bottom:1em}.furion-remark,.furion-whouse{flex-direction:column}.furion-whouse{padding-bottom:1em}.furion-who-des{padding-bottom:2em;padding-top:1em}.furion-remark-item{border:none;margin:0;max-width:unset;padding-bottom:0;width:100%}.furion-custom-img{margin-bottom:2em;margin-left:0}.furion-custom-img img{max-width:unset}.furion-who-custom{align-items:center;justify-content:center;text-align:center;width:100%}.furion-contributors{margin:4em 0}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_jeP5{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_hgFs{padding:0 .3rem}}@media not (max-width:996px){.searchBar_RVTs.searchBarLeft_MXDe .dropdownMenu_qbY6{left:0!important;right:auto!important}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.navbar__search-input:not(:focus){width:2rem}.searchBar_RVTs .dropdownMenu_qbY6{max-width:calc(100vw - var(--ifm-navbar-padding-horizontal)*2);width:var(--search-local-modal-width-sm,340px)}.searchBarContainer_NW3z:not(.focused_OWtg) .searchClearButton_qk4g,.searchHintContainer_Pkmr{display:none}.title_f1Hy{font-size:2rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}}@media (prefers-reduced-motion:reduce),print{.animate__animated{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}.animate__animated[class*=Out]{opacity:0}} \ No newline at end of file diff --git a/handbook/build/assets/images/bgs-0aa29929944208ef2b47cffbea86f230.jpg b/handbook/build/assets/images/bgs-0aa29929944208ef2b47cffbea86f230.jpg new file mode 100644 index 00000000000..047207736a5 Binary files /dev/null and b/handbook/build/assets/images/bgs-0aa29929944208ef2b47cffbea86f230.jpg differ diff --git a/handbook/build/assets/js/000e798f.adc34e1b.js b/handbook/build/assets/js/000e798f.adc34e1b.js new file mode 100644 index 00000000000..35fd649f632 --- /dev/null +++ b/handbook/build/assets/js/000e798f.adc34e1b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4847],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return m}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=r.createContext({}),p=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(u.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,u=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,f=d["".concat(u,".").concat(m)]||d[m]||c[m]||i;return n?r.createElement(f,a(a({ref:t},s),{},{components:n})):r.createElement(f,a({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var p=2;p.NET 6 Preview 5 SDK",id:"\u5b89\u88c5-net-6-preview-5-sdk",level:3},{value:"\u5347\u7ea7 Visual Studio 2019",id:"\u5347\u7ea7-visual-studio-2019",level:3},{value:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",level:3},{value:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",level:3}],d={toc:c};function m(e){var t=e.components,n=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"2021 \u5e74 06 \u6708 18 \u65e5\uff0c\u5fae\u8f6f\u53d1\u5e03\u4e86 ",(0,i.kt)("inlineCode",{parentName:"strong"},".NET 6 Preview 5")," \u7248\u672c\uff0c",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion")," \u5728\u5f53\u5929\u7b2c\u4e00\u65f6\u95f4\u9002\u914d\u4e86\u8be5\u7248\u672c\uff0c\u5e76\u53d1\u5e03 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion v3.0.0-preview.5.21301.9")," \u7248\u672c\u3002")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/tree/net6.0-preview5/"},"Furion .NET 6 Preview 5 \u6e90\u7801\u5730\u5740")),(0,i.kt)("h2",{id:"\u7b49\u4e0d\u53ca\u5c1d\u9c9c\u4e86"},"\u7b49\u4e0d\u53ca\u5c1d\u9c9c\u4e86"),(0,i.kt)("h3",{id:"\u5b89\u88c5-net-6-preview-5-sdk"},"\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"h3"},".NET 6 Preview 5 SDK")),(0,i.kt)("p",null,"\u5c1d\u9c9c\u4e4b\u524d\uff0c\u9996\u5148\u5148\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 5 SDK"),"\uff0c\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://dotnet.microsoft.com/download/dotnet/6.0"},"https://dotnet.microsoft.com/download/dotnet/6.0")),(0,i.kt)("p",null,"\u4e0b\u8f7d\u5bf9\u5e94\u7cfb\u7edf\u548c\u5904\u7406\u5668\u7248\u672c\u5373\u53ef\u3002"),(0,i.kt)("h3",{id:"\u5347\u7ea7-visual-studio-2019"},"\u5347\u7ea7 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Visual Studio 2019")),(0,i.kt)("p",null,"\u76ee\u524d ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 5")," \u652f\u6301\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview 16.11.0 Preview 2.0")," \u7248\u672c\uff0c",(0,i.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u662f ",(0,i.kt)("inlineCode",{parentName:"strong"},"Preview")," \u6700\u65b0\u7248\u672c"),"\u3002\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16"},"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16")),(0,i.kt)("p",null,"\u5df2\u7ecf\u5b89\u88c5\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview")," \u7248\u672c\u7684\u670b\u53cb\u76f4\u63a5\u5347\u7ea7\u5230\u6700\u65b0\u7248\u5373\u53ef\u3002"),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio Code")," \u5f00\u53d1\uff0c\u53ef\u5ffd\u7565\u6b64\u9009\u9879\u3002")),(0,i.kt)("h3",{id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"},"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion v3.0.0-preview.5.21301.9")," \u76ee\u524d\u63d0\u4f9b\u4e86\u6240\u6709\u7c7b\u578b\u7684\u811a\u624b\u67b6\uff0c\u7248\u672c\u53f7\u7edf\u4e00 ",(0,i.kt)("inlineCode",{parentName:"p"},"3.0.0-preview.5.21301.9"),"\u3002"),(0,i.kt)("p",null,"\u5b89\u88c5\u811a\u624b\u67b6\uff0c\u6253\u5f00 ",(0,i.kt)("inlineCode",{parentName:"p"},"CMD/Powershell")," \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9\n")),(0,i.kt)("p",null,"\u521b\u5efa\u9879\u76ee"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new furionapi -n FurionNET6\n")),(0,i.kt)("h3",{id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"},"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"),(0,i.kt)("p",null,"\u6253\u5f00\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u5373\u53ef\u3002"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/00cf5050.46c99e8f.js b/handbook/build/assets/js/00cf5050.46c99e8f.js new file mode 100644 index 00000000000..3cc05b28b94 --- /dev/null +++ b/handbook/build/assets/js/00cf5050.46c99e8f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8133],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return m}});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,p=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),c=s(n),m=i,k=c["".concat(p,".").concat(m)]||c[m]||d[m]||r;return n?a.createElement(k,l(l({ref:t},u),{},{components:n})):a.createElement(k,l({ref:t},u))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,l=new Array(r);l[0]=c;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:i,l[1]=o;for(var s=2;sCORS \u670d\u52a1",id:"1641-\u6dfb\u52a0-cors-\u670d\u52a1",level:3},{value:"16.4.2 \u914d\u7f6e\u5141\u8bb8\u8de8\u57df\u57df\u540d",id:"1642-\u914d\u7f6e\u5141\u8bb8\u8de8\u57df\u57df\u540d",level:3},{value:"16.5 CorsAccessorSettings \u914d\u7f6e",id:"165-corsaccessorsettings-\u914d\u7f6e",level:2},{value:"16.6 \u524d\u7aef\u4e0d\u80fd\u8bfb\u53d6\u54cd\u5e94\u5934\u6ce8\u610f\u4e8b\u9879",id:"166-\u524d\u7aef\u4e0d\u80fd\u8bfb\u53d6\u54cd\u5e94\u5934\u6ce8\u610f\u4e8b\u9879",level:2},{value:"16.7 \u4f7f\u7528 $.ajax \u524d\u7aef\u6ce8\u610f\u4e8b\u9879",id:"167-\u4f7f\u7528-ajax-\u524d\u7aef\u6ce8\u610f\u4e8b\u9879",level:2},{value:"16.8 \u7981\u7528\u8de8\u57df",id:"168-\u7981\u7528\u8de8\u57df",level:2},{value:"16.9 SignalR \u8de8\u57df\u95ee\u9898",id:"169-signalr-\u8de8\u57df\u95ee\u9898",level:2},{value:"16.10 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"1610-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],c={toc:d};function m(e){var t=e.components,n=(0,i.Z)(e,l);return(0,r.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"161-\u4ec0\u4e48\u662f\u8de8\u57df"},"16.1 \u4ec0\u4e48\u662f\u8de8\u57df"),(0,r.kt)("p",null,"\u7b80\u5355\u6765\u8bf4\uff0c\u5f53\u4e00\u4e2a\u8bf7\u6c42 ",(0,r.kt)("inlineCode",{parentName:"p"},"url")," \u7684\u534f\u8bae\u3001\u57df\u540d\u3001\u7aef\u53e3\u4e09\u8005\u4e4b\u95f4\u4efb\u610f\u4e00\u4e2a\u4e0e\u5f53\u524d\u9875\u9762 ",(0,r.kt)("inlineCode",{parentName:"p"},"url")," \u4e0d\u540c\u5373\u4e3a\u8de8\u57df\u3002\u90a3\u4e3a\u4ec0\u4e48\u4f1a\u51fa\u73b0\u8de8\u57df\u95ee\u9898\u5462\uff1f"),(0,r.kt)("p",null,"\u51fa\u4e8e\u6d4f\u89c8\u5668\u7684\u540c\u6e90\u7b56\u7565\u9650\u5236\u3002\u540c\u6e90\u7b56\u7565\uff08Sameoriginpolicy\uff09\u662f\u4e00\u79cd\u7ea6\u5b9a\uff0c\u5b83\u662f\u6d4f\u89c8\u5668\u6700\u6838\u5fc3\u4e5f\u6700\u57fa\u672c\u7684\u5b89\u5168\u529f\u80fd\uff0c\u5982\u679c\u7f3a\u5c11\u4e86\u540c\u6e90\u7b56\u7565\uff0c\u5219\u6d4f\u89c8\u5668\u7684\u6b63\u5e38\u529f\u80fd\u53ef\u80fd\u90fd\u4f1a\u53d7\u5230\u5f71\u54cd\u3002\u53ef\u4ee5\u8bf4 ",(0,r.kt)("inlineCode",{parentName:"p"},"Web")," \u662f\u6784\u5efa\u5728\u540c\u6e90\u7b56\u7565\u57fa\u7840\u4e4b\u4e0a\u7684\uff0c\u6d4f\u89c8\u5668\u53ea\u662f\u9488\u5bf9\u540c\u6e90\u7b56\u7565\u7684\u4e00\u79cd\u5b9e\u73b0\u3002\u540c\u6e90\u7b56\u7565\u4f1a\u963b\u6b62\u4e00\u4e2a\u57df\u7684 javascript \u811a\u672c\u548c\u53e6\u5916\u4e00\u4e2a\u57df\u7684\u5185\u5bb9\u8fdb\u884c\u4ea4\u4e92\u3002\u6240\u8c13\u540c\u6e90\uff08\u5373\u6307\u5728\u540c\u4e00\u4e2a\u57df\uff09\u5c31\u662f\u4e24\u4e2a\u9875\u9762\u5177\u6709\u76f8\u540c\u7684\u534f\u8bae\uff08protocol\uff09\uff0c\u4e3b\u673a\uff08host\uff09\u548c\u7aef\u53e3\u53f7\uff08port\uff09"),(0,r.kt)("h2",{id:"162-\u6709\u8de8\u57df\u884c\u4e3a\u793a\u4f8b"},"16.2 \u6709\u8de8\u57df\u884c\u4e3a\u793a\u4f8b"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"\u5f53\u524d\u9875\u9762 url"),(0,r.kt)("th",{parentName:"tr",align:null},"\u88ab\u8bf7\u6c42\u9875\u9762 url"),(0,r.kt)("th",{parentName:"tr",align:null},"\u662f\u5426\u8de8\u57df"),(0,r.kt)("th",{parentName:"tr",align:null},"\u539f\u56e0"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://www.furion.icu/"},"http://www.furion.icu/")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://www.furion.icu/index.html"},"http://www.furion.icu/index.html")),(0,r.kt)("td",{parentName:"tr",align:null},"\u5426"),(0,r.kt)("td",{parentName:"tr",align:null},"\u540c\u6e90\uff08\u534f\u8bae\u3001\u57df\u540d\u3001\u7aef\u53e3\u53f7\u76f8\u540c\uff09")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://www.furion.icu/"},"http://www.furion.icu/")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"https://www.furion.icu/index.html"},"https://www.furion.icu/index.html")),(0,r.kt)("td",{parentName:"tr",align:null},"\u8de8\u57df"),(0,r.kt)("td",{parentName:"tr",align:null},"\u534f\u8bae\u4e0d\u540c\uff08http/https\uff09")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://www.furion.icu/"},"http://www.furion.icu/")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://www.baidu.com/"},"http://www.baidu.com/")),(0,r.kt)("td",{parentName:"tr",align:null},"\u8de8\u57df"),(0,r.kt)("td",{parentName:"tr",align:null},"\u4e3b\u57df\u540d\u4e0d\u540c\uff08chinadot/baidu\uff09")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://www.furion.icu/"},"http://www.furion.icu/")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://blog.furion.icu/"},"http://blog.furion.icu/")),(0,r.kt)("td",{parentName:"tr",align:null},"\u8de8\u57df"),(0,r.kt)("td",{parentName:"tr",align:null},"\u5b50\u57df\u540d\u4e0d\u540c\uff08www/blog\uff09")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://www.furion.icu:8080/"},"http://www.furion.icu:8080/")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("a",{parentName:"td",href:"http://www.furion.icu:7001/"},"http://www.furion.icu:7001/")),(0,r.kt)("td",{parentName:"tr",align:null},"\u8de8\u57df"),(0,r.kt)("td",{parentName:"tr",align:null},"\u7aef\u53e3\u53f7\u4e0d\u540c\uff088080/7001\uff09")))),(0,r.kt)("h2",{id:"163-\u4ec0\u4e48\u662f-cors"},"16.3 \u4ec0\u4e48\u662f CORS"),(0,r.kt)("p",null,"\u8de8\u6e90\u8d44\u6e90\u5171\u4eab (",(0,r.kt)("inlineCode",{parentName:"p"},"CORS"),") \uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u662f\u4e00\u79cd ",(0,r.kt)("inlineCode",{parentName:"li"},"W3C")," \u6807\u51c6\uff0c\u53ef\u8ba9\u670d\u52a1\u5668\u653e\u5bbd\u76f8\u540c\u7684\u6e90\u7b56\u7565\u3002"),(0,r.kt)("li",{parentName:"ul"},"\u4e0d\u662f\u4e00\u9879\u5b89\u5168\u529f\u80fd\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"CORS")," \u653e\u5bbd ",(0,r.kt)("inlineCode",{parentName:"li"},"security"),"\u3002 ",(0,r.kt)("inlineCode",{parentName:"li"},"API")," \u4e0d\u80fd\u901a\u8fc7\u5141\u8bb8 ",(0,r.kt)("inlineCode",{parentName:"li"},"CORS")," \u6765\u66f4\u5b89\u5168\u3002 \u6709\u5173\u8be6\u7ec6\u4fe1\u606f\uff0c\u8bf7\u53c2\u9605 ",(0,r.kt)("a",{parentName:"li",href:"https://docs.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-5.0#how-cors"},"CORS \u5de5\u4f5c\u539f\u7406"),"\u3002"),(0,r.kt)("li",{parentName:"ul"},"\u5141\u8bb8\u670d\u52a1\u5668\u660e\u786e\u5141\u8bb8\u4e00\u4e9b\u8de8\u6e90\u8bf7\u6c42\uff0c\u540c\u65f6\u62d2\u7edd\u5176\u4ed6\u8bf7\u6c42\u3002"),(0,r.kt)("li",{parentName:"ul"},"\u6bd4\u65e9\u671f\u7684\u6280\u672f\uff08\u5982 JSONP\uff09\u66f4\u5b89\u5168\u4e14\u66f4\u7075\u6d3b\u3002")),(0,r.kt)("h2",{id:"164-\u5982\u4f55\u4f7f\u7528"},"16.4 \u5982\u4f55\u4f7f\u7528"),(0,r.kt)("h3",{id:"1641-\u6dfb\u52a0-cors-\u670d\u52a1"},"16.4.1 \u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"h3"},"CORS")," \u670d\u52a1"),(0,r.kt)("p",null,"\u542f\u7528\u8de8\u57df ",(0,r.kt)("inlineCode",{parentName:"p"},"Cors")," \u652f\u6301\u9996\u5148\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"CorsAccessor")," \u670d\u52a1\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13,22}",showLineNumbers:!0,"":!0,"{13,22}":!0},"using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace Furion.Web.Core\n{\n [AppStartup(700)]\n public sealed class FurWebCoreStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddCorsAccessor();\n\n // ...\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n //...\n\n app.UseCorsAccessor();\n\n // ...\n }\n }\n}\n")),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"services.AddCorsAccessor();")," \u9700\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"services.AddControllers()")," \u4e4b\u524d\u6ce8\u518c\u3002"),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"app.UseCorsAccessor();")," \u9700\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"app.UseRouting();")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"app.UseAuthentication();")," \u4e4b\u95f4\u6ce8\u518c\u3002")),(0,r.kt)("h3",{id:"1642-\u914d\u7f6e\u5141\u8bb8\u8de8\u57df\u57df\u540d"},"16.4.2 \u914d\u7f6e\u5141\u8bb8\u8de8\u57df\u57df\u540d"),(0,r.kt)("admonition",{title:"\u5c0f\u63d0\u9192",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u5141\u8bb8\u6240\u6709\u57df\u540d\u6765\u6e90\u8bbf\u95ee\uff0c\u4e5f\u5c31\u662f\u65e0\u9700\u914d\u7f6e\u4efb\u4f55\u6765\u6e90\u57df\u540d\uff0c\u53e6\u5916\u524d\u7aef\u4e5f\u9700\u8981\u8bbe\u7f6e\u8bf7\u6c42\u53c2\u6570\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"withCredentials:false"))),(0,r.kt)("p",null,"\u5982\u679c\u9700\u8981\u6307\u5b9a\u7279\u5b9a\u57df\u540d\uff0c\u5219\u6dfb\u52a0\u4ee5\u4e0b\u914d\u7f6e\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},'{\n "CorsAccessorSettings": {\n "PolicyName": "\u81ea\u5b9a\u4e49\u8de8\u57df\u7b56\u7565\u540d",\n "WithOrigins": ["http://localhost:4200", "https://furion.icu"]\n }\n}\n')),(0,r.kt)("h2",{id:"165-corsaccessorsettings-\u914d\u7f6e"},"16.5 ",(0,r.kt)("inlineCode",{parentName:"h2"},"CorsAccessorSettings")," \u914d\u7f6e"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CorsAccessorSettings"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"PolicyName"),"\uff1a\u8de8\u57df\u7b56\u7565\u540d\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff0c\u5fc5\u586b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"App.Cors.Policy")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"WithOrigins"),"\uff1a\u5141\u8bb8\u8de8\u57df\u7684\u57df\u540d\u5217\u8868\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string[]")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"*")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"WithHeaders"),"\uff1a\u8bf7\u6c42\u8868\u5934\uff0c\u6ca1\u6709\u914d\u7f6e\u5219\u5141\u8bb8\u6240\u6709\u8868\u5934\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string[]")," \u7c7b\u578b"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"WithExposedHeaders"),"\uff1a\u8bbe\u7f6e\u5ba2\u6237\u7aef\u53ef\u83b7\u53d6\u7684\u54cd\u5e94\u6807\u5934\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string[]")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},'["access-token", "x-access-token"]')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"WithMethods"),"\uff1a\u8bbe\u7f6e\u8de8\u57df\u5141\u8bb8\u8bf7\u6c42\u8c13\u8bcd\uff0c\u6ca1\u6709\u914d\u7f6e\u5219\u5141\u8bb8\u6240\u6709\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string[]")," \u7c7b\u578b"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AllowCredentials"),"\uff1a\u662f\u5426\u5141\u8bb8\u8de8\u57df\u8bf7\u6c42\u4e2d\u7684\u51ed\u636e\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4\u503c ",(0,r.kt)("inlineCode",{parentName:"li"},"true")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"SetPreflightMaxAge"),"\uff1a\u8bbe\u7f6e\u9884\u68c0\u8fc7\u671f\u65f6\u95f4\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"int")," \u7c7b\u578b\uff0c\u9ed8\u8ba4\u503c ",(0,r.kt)("inlineCode",{parentName:"li"},"24\u5c0f\u65f6")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"FixedClientToken"),"\uff1a\u662f\u5426\u9ed8\u8ba4\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"li"},"WithExposedHeaders"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"true")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"SignalRSupport"),"\uff1a\u662f\u5426\u542f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"SignalR")," \u8de8\u57df\u652f\u6301\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"false"))))),(0,r.kt)("h2",{id:"166-\u524d\u7aef\u4e0d\u80fd\u8bfb\u53d6\u54cd\u5e94\u5934\u6ce8\u610f\u4e8b\u9879"},"16.6 \u524d\u7aef\u4e0d\u80fd\u8bfb\u53d6\u54cd\u5e94\u5934\u6ce8\u610f\u4e8b\u9879"),(0,r.kt)("p",null,"\u6709\u65f6\u5019\uff0c\u6211\u4eec\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"ajax")," \u6216\u8005 ",(0,r.kt)("inlineCode",{parentName:"p"},"axios")," \u7b2c\u4e09\u65b9\u5e93\u65e0\u6cd5\u8bfb\u53d6\u54cd\u5e94\u5934\u81ea\u5b9a\u4e49\u4fe1\u606f\uff0c\u8fd9\u65f6\u9700\u8981\u54cd\u5e94\u62a5\u6587\u4e2d\u516c\u5f00\u7279\u5b9a ",(0,r.kt)("inlineCode",{parentName:"p"},"Header")," \u624d\u80fd\u653e\u884c\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"Access-Control-Expose-Headers: xxxxx"),"\uff0c\u6240\u4ee5\uff0c\u9700\u8981\u6dfb\u52a0\u4ee5\u4e0b\u914d\u7f6e\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers title="appsettings.json"',showLineNumbers:!0,title:'"appsettings.json"'},'{\n "CorsAccessorSettings": {\n "WithExposedHeaders": ["access-token","x-access-token"]\n }\n}\n')),(0,r.kt)("p",null,"\u9700\u8981\u83b7\u53d6\u54ea\u4e2a\u5934\uff0c\u5c31\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"WithExposedHeaders")," \u6570\u7ec4\u4e2d\u914d\u7f6e\u5373\u53ef\u3002\u5982\u679c\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"ajax")," \u53ef\u4ee5\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"xhr.getResponseHeader(key)")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"xhr.getAllResponseHeaders()")," \u83b7\u53d6\u914d\u7f6e\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"key"),"\u3002"),(0,r.kt)("p",null,"\u7279\u522b\u60c5\u51b5\u4e0b\u4e0d\u80fd\u8bf7\u6c42\uff0c\u53ef\u4ee5\u8003\u8651\u8bbe\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"withCredentials: false")," \u3002"),(0,r.kt)("h2",{id:"167-\u4f7f\u7528-ajax-\u524d\u7aef\u6ce8\u610f\u4e8b\u9879"},"16.7 \u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"h2"},"$.ajax")," \u524d\u7aef\u6ce8\u610f\u4e8b\u9879"),(0,r.kt)("p",null,"\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"Jquery")," \u524d\u7aef\u8bf7\u6c42\u53ef\u4ee5\u53c2\u8003\u4ee5\u4e0b\u914d\u7f6e\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4-7}",showLineNumbers:!0,"":!0,"{4-7}":!0},'$.ajax({\n \xa0 \xa0 \xa0 \xa0url: "https://localhost:5001/api/system/getdata",\n \xa0 \xa0 \xa0 \xa0type: "GET",\n \xa0 \xa0 \xa0 \xa0xhrFields: {\n \xa0 \xa0 \xa0 \xa0\xa0 \xa0 withCredentials: false // \u5982\u679c\u662fhttps\u8bf7\u6c42\uff0c\u53ef\u4ee5\u8bd5\u8bd5 true\n \xa0 \xa0 \xa0 \xa0},\n \xa0 \xa0 \xa0 \xa0crossDomain: true,\n \xa0 \xa0 \xa0 \xa0success: function (res) {\n \xa0 \xa0 \xa0 \xa0\xa0 \xa0 render(res);\n \xa0 \xa0 \xa0 \xa0}\n});\n')),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u5728\u672c\u5730\u5f00\u53d1\u9636\u6bb5\uff0c\u8bf7\u6c42\u5982\u679c\u51fa\u73b0 ",(0,r.kt)("inlineCode",{parentName:"p"}," Access to XMLHttpRequest...has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header...")," \u9519\u8bef\uff0c\u8bf7\u786e\u4fdd ",(0,r.kt)("inlineCode",{parentName:"p"},"ajax")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"url")," \u53c2\u6570\u662f\u6b63\u786e\u7684\uff0c\u901a\u5e38",(0,r.kt)("strong",{parentName:"p"},"\u9519\u8bef\u7684\u505a\u6cd5"),"\u662f\uff1a"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"\u4f7f\u7528\u4e86 ",(0,r.kt)("inlineCode",{parentName:"li"},"127.0.0.1")," \u800c\u4e0d\u662f ",(0,r.kt)("inlineCode",{parentName:"li"},"localhost")," \u4e3b\u673a\u5730\u5740"),(0,r.kt)("li",{parentName:"ul"},"\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"http")," \u800c\u4e0d\u662f ",(0,r.kt)("inlineCode",{parentName:"li"},"https")," \u4e3b\u673a\u534f\u8bae"),(0,r.kt)("li",{parentName:"ul"},"\u4f7f\u7528\u4e86 ",(0,r.kt)("inlineCode",{parentName:"li"},"5000")," \u800c\u4e0d\u662f ",(0,r.kt)("inlineCode",{parentName:"li"},"5001")," \u4e3b\u673a\u7aef\u53e3"))),(0,r.kt)("h2",{id:"168-\u7981\u7528\u8de8\u57df"},"16.8 \u7981\u7528\u8de8\u57df"),(0,r.kt)("p",null,"\u6709\u65f6\u5019\uff0c\u6211\u4eec\u5e0c\u671b\u67d0\u4e2a\u65b9\u6cd5\u4e0d\u68c0\u67e5\u8de8\u57df\u8bf7\u6c42\uff0c\u53ef\u4ee5\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Action")," \u4e2d\u8d34 ",(0,r.kt)("inlineCode",{parentName:"p"},"[DisableCors]")," \u7279\u6027\u5373\u53ef\u3002"),(0,r.kt)("h2",{id:"169-signalr-\u8de8\u57df\u95ee\u9898"},"16.9 ",(0,r.kt)("inlineCode",{parentName:"h2"},"SignalR")," \u8de8\u57df\u95ee\u9898"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u5b9e\u73b0\u8de8\u57df\u9700\u8981\u6ee1\u8db3\u4e0b\u9762\u51e0\u4e2a\u6761\u4ef6\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u5141\u8bb8\u7279\u5b9a\u7684\u9884\u671f\u6765\u6e90\uff0c\u5141\u8bb8\u4efb\u4f55\u6765\u6e90\u662f\u53ef\u884c\u7684\uff0c\u4f46\u4e0d\u5b89\u5168\u6216\u4e0d\u63a8\u8350\u4f7f\u7528"),(0,r.kt)("li",{parentName:"ul"},"\u5fc5\u987b\u5141\u8bb8\u4f7f\u7528 HTTP \u65b9\u6cd5 ",(0,r.kt)("inlineCode",{parentName:"li"},"GET")," \u548c ",(0,r.kt)("inlineCode",{parentName:"li"},"POST")),(0,r.kt)("li",{parentName:"ul"},"\u4e3a\u4e86\u4f7f\u57fa\u4e8e ",(0,r.kt)("inlineCode",{parentName:"li"},"cookie")," \u7684\u7c98\u6ede\u4f1a\u8bdd\u6b63\u5e38\u5de5\u4f5c\uff0c\u5fc5\u987b\u5141\u8bb8\u4f7f\u7528\u51ed\u636e\uff0c\u5373\u4f7f\u672a\u4f7f\u7528\u8eab\u4efd\u9a8c\u8bc1\uff0c\u4e5f\u5fc5\u987b\u542f\u7528\u5b83\u4eec\u3002")),(0,r.kt)("p",null,"\u5b98\u65b9\u6587\u6863\u8bf4\u660e ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/signalr/security?view=aspnetcore-6.0"},"https://docs.microsoft.com/zh-cn/aspnet/core/signalr/security?view=aspnetcore-6.0")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"strong"},"Furion 4.1.4+")," \u7248\u672c\u5df2\u4fee\u6b63 ",(0,r.kt)("inlineCode",{parentName:"strong"},"SignalR")," \u8de8\u57df\u95ee\u9898\uff0c\u53ea\u9700\u8981\u542f\u7528 ",(0,r.kt)("inlineCode",{parentName:"strong"},"SignalRSupport")," \u914d\u7f6e\u5373\u53ef"),"\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2,3}",showLineNumbers:!0,"{2,3}":!0},'{\n "CorsAccessorSettings": {\n "SignalRSupport": true\n }\n}\n')),(0,r.kt)("h2",{id:"1610-\u53cd\u9988\u4e0e\u5efa\u8bae"},"16.10 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,r.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,r.kt)("hr",null),(0,r.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u8de8\u57df\u8bf7\u6c42")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-5.0"},"ASP.NET Core - \u542f\u7528\u8de8\u57df\u8bf7\u6c42")," \u7ae0\u8282\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/00ee0bc9.c2f9d477.js b/handbook/build/assets/js/00ee0bc9.c2f9d477.js new file mode 100644 index 00000000000..fdfad346931 --- /dev/null +++ b/handbook/build/assets/js/00ee0bc9.c2f9d477.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6792],{3905:function(e,t,n){n.d(t,{Zo:function(){return d},kt:function(){return m}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},d=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},s=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),s=c(n),m=o,k=s["".concat(l,".").concat(m)]||s[m]||u[m]||i;return n?r.createElement(k,a(a({ref:t},d),{},{components:n})):r.createElement(k,a({ref:t},d))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=s;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:o,a[1]=p;for(var c=2;c.NET6 SDK",id:"2511-\u5b89\u88c5-net6-sdk",level:3},{value:"2.5.1.2 \u7f16\u8f91 .csproj \u6587\u4ef6",id:"2512-\u7f16\u8f91-csproj-\u6587\u4ef6",level:3},{value:"2.5.1.3 \u5347\u7ea7 Nuget \u5305",id:"2513-\u5347\u7ea7-nuget-\u5305",level:3},{value:"2.5.1.4 \u5220\u9664 Startup.cs \u6587\u4ef6",id:"2514-\u5220\u9664-startupcs-\u6587\u4ef6",level:3},{value:"2.5.1.5 \u7f16\u8f91 Web \u542f\u52a8\u5c42 .csproj",id:"2515-\u7f16\u8f91-web-\u542f\u52a8\u5c42-csproj",level:3},{value:"2.5.1.6 \u66ff\u6362 Program.cs \u5185\u5bb9\u4e3a\uff1a",id:"2516-\u66ff\u6362-programcs-\u5185\u5bb9\u4e3a",level:3},{value:"2.5.1.7 \u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u89e3\u51b3\u65b9\u6848",id:"2517-\u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u89e3\u51b3\u65b9\u6848",level:3}],m={toc:s};function k(e){var t=e.components,n=(0,o.Z)(e,p);return(0,i.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"251-\u5347\u7ea7\u6ce8\u610f\u4e8b\u9879"},"2.5.1 \u5347\u7ea7\u6ce8\u610f\u4e8b\u9879"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u76ee\u524d\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion")," \u6240\u6709\u7248\u672c\uff080.x-3.x\uff09\u7684\u7528\u6237\u5747\u53ef\u4ee5\u5feb\u901f\u65e0\u7f1d\u5347\u7ea7\u81f3 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion v4.x")," \u7248\u672c\uff0c\u53ea\u9700\u8981\u505a\u5c11\u91cf\u66f4\u6539\u5373\u53ef\u3002")),(0,i.kt)("h3",{id:"2511-\u5b89\u88c5-net6-sdk"},"2.5.1.1 \u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"h3"},".NET6 SDK")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://dotnet.microsoft.com/download/dotnet/6.0"},"https://dotnet.microsoft.com/download/dotnet/6.0")),(0,i.kt)("h3",{id:"2512-\u7f16\u8f91-csproj-\u6587\u4ef6"},"2.5.1.2 \u7f16\u8f91 ",(0,i.kt)("inlineCode",{parentName:"h3"},".csproj")," \u6587\u4ef6"),(0,i.kt)("p",null,"\u7f16\u8f91\u89e3\u51b3\u65b9\u6848\u6240\u6709\u9879\u76ee\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},".csproj")," \u6587\u4ef6\uff0c\u5e76\u66ff\u6362 ",(0,i.kt)("inlineCode",{parentName:"p"},"net5.0")," \u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"net6.0"),"\uff0c\u5982\uff1a"),(0,i.kt)("img",{src:(0,a.Z)("img/sjl1.png")}),(0,i.kt)("p",null,"\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Ctrl + F")," \u5168\u5c40\u66ff\u6362"),(0,i.kt)("img",{src:(0,a.Z)("img/sjl2.png")}),(0,i.kt)("h3",{id:"2513-\u5347\u7ea7-nuget-\u5305"},"2.5.1.3 \u5347\u7ea7 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Nuget")," \u5305"),(0,i.kt)("p",null,"\u5c06 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6240\u6709\u5305\u5347\u7ea7\u81f3 ",(0,i.kt)("inlineCode",{parentName:"p"},"v4.7.9")," \u7248\u672c\uff0c\u540c\u65f6 ",(0,i.kt)("inlineCode",{parentName:"p"},"Microsoft")," \u6240\u6709\u5305\u5347\u7ea7\u81f3 ",(0,i.kt)("inlineCode",{parentName:"p"},"v6.0.8")," \u7248\u672c\uff0c\u5982\uff1a"),(0,i.kt)("img",{src:(0,a.Z)("img/sjl3.png")}),(0,i.kt)("h3",{id:"2514-\u5220\u9664-startupcs-\u6587\u4ef6"},"2.5.1.4 \u5220\u9664 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Startup.cs")," \u6587\u4ef6"),(0,i.kt)("p",null,"\u5220\u9664 ",(0,i.kt)("inlineCode",{parentName:"p"},"Web \u542f\u52a8\u5c42")," \u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u6587\u4ef6\uff0c\u5982\uff1a"),(0,i.kt)("img",{src:(0,a.Z)("img/sjl4.png")}),(0,i.kt)("h3",{id:"2515-\u7f16\u8f91-web-\u542f\u52a8\u5c42-csproj"},"2.5.1.5 \u7f16\u8f91 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Web")," \u542f\u52a8\u5c42 ",(0,i.kt)("inlineCode",{parentName:"h3"},".csproj")),(0,i.kt)("p",null,"\u7f16\u8f91 ",(0,i.kt)("inlineCode",{parentName:"p"},"Web")," \u542f\u52a8\u5c42 ",(0,i.kt)("inlineCode",{parentName:"p"},".csproj")," \u6587\u4ef6\uff0c\u5e76\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"p"},"enable"),"\uff0c\u5982\uff1a"),(0,i.kt)("img",{src:(0,a.Z)("img/sjl5.png")}),(0,i.kt)("h3",{id:"2516-\u66ff\u6362-programcs-\u5185\u5bb9\u4e3a"},"2.5.1.6 \u66ff\u6362 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Program.cs")," \u5185\u5bb9\u4e3a\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var builder = WebApplication.CreateBuilder(args).Inject();\nvar app = builder.Build();\napp.Run();\n")),(0,i.kt)("admonition",{title:"v3.6.4+ \u7248\u672c",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 3.6.4+")," \u7248\u672c\uff0c\u53ef\u76f4\u63a5\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Serve.Run(RunOptions.Default);")," \u66ff\u4ee3\u4e0a\u9762\u5373\u53ef\u3002")),(0,i.kt)("admonition",{title:"\u5c0f\u63d0\u9192",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Serilog")," \u65e5\u5fd7\u7ec4\u4ef6\uff0c\u53ef\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"p"},"builder.UseSerilogDefault();")),(0,i.kt)("p",{parentName:"admonition"},"\u4e5f\u53ef\u4ee5\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Serve.Run(RunOptions.Default.ConfigureBuilder(builder => builder.UseSerilogDefault()));"),"\u3002"),(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"pgsql")," \u6570\u636e\u5e93\uff0c\u4f60\u8fd8\u53ef\u80fd\u9700\u8981\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"p"},'AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);'),"\n=> ",(0,i.kt)("a",{parentName:"p",href:"https://www.npgsql.org/doc/types/datetime.html"},"\u76f8\u5173\u8bf4\u660e\uff1a\u5728 .NET6 \u4e2d Npgsql 6.0 \u5bf9\u65f6\u95f4\u6233\u7684\u6620\u5c04\u65b9\u5f0f\u8fdb\u884c\u4e86\u4e00\u4e9b\u91cd\u8981\u7684\u66f4\u6539\u3002"))),(0,i.kt)("img",{src:(0,a.Z)("img/sjl6.png")}),(0,i.kt)("h3",{id:"2517-\u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u89e3\u51b3\u65b9\u6848"},"2.5.1.7 \u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u89e3\u51b3\u65b9\u6848"),(0,i.kt)("p",null,"\u5347\u7ea7\u5b8c\u6210\uff01\uff01\uff01"))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/01a85c17.1e2966bc.js b/handbook/build/assets/js/01a85c17.1e2966bc.js new file mode 100644 index 00000000000..58d78e9ff3b --- /dev/null +++ b/handbook/build/assets/js/01a85c17.1e2966bc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4013],{9058:function(e,t,a){a.d(t,{Z:function(){return _}});var n=a(102),r=a(7294),l=a(6010),i=a(9338),c=a(7524),s=a(9960),m=a(5999),o="sidebar_re4s",u="sidebarItemTitle_pO2u",g="sidebarItemList_Yudw",d="sidebarItem__DBe",b="sidebarItemLink_mo7H",E="sidebarItemLinkActive_I1ZP";function f(e){var t=e.sidebar;return r.createElement("aside",{className:"col col--3"},r.createElement("nav",{className:(0,l.Z)(o,"thin-scrollbar"),"aria-label":(0,m.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},r.createElement("div",{className:(0,l.Z)(u,"margin-bottom--md")},t.title),r.createElement("ul",{className:(0,l.Z)(g,"clean-list")},t.items.map((function(e){return r.createElement("li",{key:e.permalink,className:d},r.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:b,activeClassName:E},e.title))})))))}var p=a(3102);function v(e){var t=e.sidebar;return r.createElement("ul",{className:"menu__list"},t.items.map((function(e){return r.createElement("li",{key:e.permalink,className:"menu__list-item"},r.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title))})))}function h(e){return r.createElement(p.Zo,{component:v,props:e})}function k(e){var t=e.sidebar,a=(0,c.i)();return null!=t&&t.items.length?"mobile"===a?r.createElement(h,{sidebar:t}):r.createElement(f,{sidebar:t}):null}var N=["sidebar","toc","children"];function _(e){var t=e.sidebar,a=e.toc,c=e.children,s=(0,n.Z)(e,N),m=t&&t.items.length>0;return r.createElement(i.Z,s,r.createElement("div",{className:"container margin-vert--lg"},r.createElement("div",{className:"row"},r.createElement(k,{sidebar:t}),r.createElement("main",{className:(0,l.Z)("col",{"col--7":m,"col--9 col--offset-1":!m}),itemScope:!0,itemType:"http://schema.org/Blog"},c),a&&r.createElement("div",{className:"col col--2"},a))))}},1223:function(e,t,a){a.r(t),a.d(t,{default:function(){return b}});var n=a(7294),r=a(6010),l=a(5999);var i=a(1944),c=a(5281),s=a(9058),m=a(3008),o="tag_Nnez";function u(e){var t=e.letterEntry;return n.createElement("article",null,n.createElement("h2",null,t.letter),n.createElement("ul",{className:"padding--none"},t.tags.map((function(e){return n.createElement("li",{key:e.permalink,className:o},n.createElement(m.Z,e))}))),n.createElement("hr",null))}function g(e){var t=function(e){var t={};return Object.values(e).forEach((function(e){var a=function(e){return e[0].toUpperCase()}(e.label);null!=t[a]||(t[a]=[]),t[a].push(e)})),Object.entries(t).sort((function(e,t){var a=e[0],n=t[0];return a.localeCompare(n)})).map((function(e){return{letter:e[0],tags:e[1].sort((function(e,t){return e.label.localeCompare(t.label)}))}}))}(e.tags);return n.createElement("section",{className:"margin-vert--lg"},t.map((function(e){return n.createElement(u,{key:e.letter,letterEntry:e})})))}var d=a(197);function b(e){var t=e.tags,a=e.sidebar,m=(0,l.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});return n.createElement(i.FG,{className:(0,r.Z)(c.k.wrapper.blogPages,c.k.page.blogTagsListPage)},n.createElement(i.d,{title:m}),n.createElement(d.Z,{tag:"blog_tags_list"}),n.createElement(s.Z,{sidebar:a},n.createElement("h1",null,m),n.createElement(g,{tags:t})))}},3008:function(e,t,a){a.d(t,{Z:function(){return m}});var n=a(7294),r=a(6010),l=a(9960),i="tag_zVej",c="tagRegular_sFm0",s="tagWithCount_h2kH";function m(e){var t=e.permalink,a=e.label,m=e.count;return n.createElement(l.Z,{href:t,className:(0,r.Z)(i,m?s:c)},a,m&&n.createElement("span",null,m))}}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/0249e0f1.f3d2a8de.js b/handbook/build/assets/js/0249e0f1.f3d2a8de.js new file mode 100644 index 00000000000..8106e460f8e --- /dev/null +++ b/handbook/build/assets/js/0249e0f1.f3d2a8de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[590],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return f}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=r.createContext({}),p=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(u.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(n),f=o,m=d["".concat(u,".").concat(f)]||d[f]||s[f]||a;return n?r.createElement(m,l(l({ref:t},c),{},{components:n})):r.createElement(m,l({ref:t},c))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=d;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),s=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),u=s(n),c=o,k=u["".concat(l,".").concat(c)]||u[c]||m[c]||r;return n?a.createElement(k,i(i({ref:t},d),{},{components:n})):a.createElement(k,i({ref:t},d))}));function c(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=u;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:o,i[1]=p;for(var s=2;sHttpContext",id:"521-\u5173\u4e8e-httpcontext",level:2},{value:"5.2.2 \u83b7\u53d6 HttpContext",id:"522-\u83b7\u53d6-httpcontext",level:2},{value:"5.2.2.1 \u5728 ControllerBase \u6d3e\u751f\u7c7b\u4e2d",id:"5221-\u5728-controllerbase-\u6d3e\u751f\u7c7b\u4e2d",level:3},{value:"5.2.2.2 \u6ce8\u5165 IHttpContextAccessor",id:"5222-\u6ce8\u5165-ihttpcontextaccessor",level:3},{value:"5.2.2.3 \u901a\u8fc7 App.HttpContext",id:"5223-\u901a\u8fc7-apphttpcontext",level:3},{value:"5.2.3 HttpContext \u62d3\u5c55\u65b9\u6cd5",id:"523-httpcontext-\u62d3\u5c55\u65b9\u6cd5",level:2},{value:"5.2.3.1 \u83b7\u53d6\u5f53\u524d\u8bf7\u6c42\u7684\u7279\u6027 Attribute",id:"5231-\u83b7\u53d6\u5f53\u524d\u8bf7\u6c42\u7684\u7279\u6027-attribute",level:3},{value:"5.2.3.2 \u8bbe\u7f6e Swagger \u81ea\u52a8\u6388\u6743",id:"5232-\u8bbe\u7f6e-swagger-\u81ea\u52a8\u6388\u6743",level:3},{value:"5.2.3.3 \u9000\u51fa Swagger \u6388\u6743",id:"5233-\u9000\u51fa-swagger-\u6388\u6743",level:3},{value:"5.2.3.4 \u83b7\u53d6\u672c\u5730 IP \u5730\u5740",id:"5234-\u83b7\u53d6\u672c\u5730-ip-\u5730\u5740",level:3},{value:"5.2.3.5 \u83b7\u53d6\u5ba2\u6237\u7aef IP \u5730\u5740",id:"5235-\u83b7\u53d6\u5ba2\u6237\u7aef-ip-\u5730\u5740",level:3},{value:"5.2.3.6 \u8bbe\u7f6e\u54cd\u5e94\u5934 Token",id:"5236-\u8bbe\u7f6e\u54cd\u5e94\u5934-token",level:3},{value:"5.2.4 \u8bfb\u53d6 Body \u5185\u5bb9\uff08\u91cd\u590d\u8bfb\uff09",id:"524-\u8bfb\u53d6-body-\u5185\u5bb9\u91cd\u590d\u8bfb",level:2},{value:"5.2.5 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"525-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],u={toc:m};function c(e){var t=e.components,n=(0,o.Z)(e,i);return(0,r.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"521-\u5173\u4e8e-httpcontext"},"5.2.1 \u5173\u4e8e ",(0,r.kt)("inlineCode",{parentName:"h2"},"HttpContext")),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"ASP.NET")," \u7684\u65f6\u4ee3\uff0c\u6211\u4eec\u901a\u5e38\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u5168\u5c40\u9759\u6001\u7c7b\u83b7\u53d6\u8bf7\u6c42\u4e0a\u4e0b\u6587\uff0c\u4f46\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u4e2d\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u662f\u4e00\u4e2a\u975e\u9759\u6001\u7684\u62bd\u8c61\u7c7b\uff0c\u65e0\u6cd5\u624b\u52a8\u521b\u5efa\uff0c\u4e5f\u65e0\u6cd5\u901a\u8fc7\u9759\u6001\u83b7\u53d6\u3002"),(0,r.kt)("p",null,"\u867d\u7136\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u4e2d\u65e0\u6cd5\u76f4\u63a5\u83b7\u53d6 ",(0,r.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u5bf9\u8c61\u3002\u4f46\u662f\u5fae\u8f6f\u4e5f\u63d0\u4f9b\u4e86\u6ce8\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"IHttpContextAccessor")," \u65b9\u5f0f\u83b7\u53d6\u3002"),(0,r.kt)("h2",{id:"522-\u83b7\u53d6-httpcontext"},"5.2.2 \u83b7\u53d6 ",(0,r.kt)("inlineCode",{parentName:"h2"},"HttpContext")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86\u591a\u79cd\u8bbf\u95ee ",(0,r.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u7684\u65b9\u5f0f\u3002"),(0,r.kt)("h3",{id:"5221-\u5728-controllerbase-\u6d3e\u751f\u7c7b\u4e2d"},"5.2.2.1 \u5728 ",(0,r.kt)("inlineCode",{parentName:"h3"},"ControllerBase")," \u6d3e\u751f\u7c7b\u4e2d"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"ControllerBase")," \u6d3e\u751f\u7c7b\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u5c5e\u6027\u83b7\u53d6 ",(0,r.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u5bf9\u8c61\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5-6}",showLineNumbers:!0,"{5-6}":!0},"public class HomeController : Controller\n{\n public IActionResult Index()\n {\n // \u5728\u8fd9\u91ccHttpContext \u662f Controller/ControllerBase \u5bf9\u8c61\u7684\u5c5e\u6027\n var httpContext = HttpContext;\n\n return View();\n }\n}\n")),(0,r.kt)("h3",{id:"5222-\u6ce8\u5165-ihttpcontextaccessor"},"5.2.2.2 \u6ce8\u5165 ",(0,r.kt)("inlineCode",{parentName:"h3"},"IHttpContextAccessor")),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u9ed8\u8ba4\u5df2\u7ecf\u6ce8\u518c\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"IHttpContextAccessor")," \u670d\u52a1\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6784\u9020\u51fd\u6570\u6ce8\u5165\u8be5\u63a5\u53e3\u83b7\u53d6\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,5}",showLineNumbers:!0,"":!0,"{3,5}":!0},"public class AppService\n{\n public AppService(IHttpContextAccessor httpContextAccessor)\n {\n var httpContext = httpContextAccessor.HttpContext;\n }\n}\n")),(0,r.kt)("h3",{id:"5223-\u901a\u8fc7-apphttpcontext"},"5.2.2.3 \u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"h3"},"App.HttpContext")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"App")," \u9759\u6001\u7c7b\u4e5f\u63d0\u4f9b\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"App.HttpContext")," \u83b7\u53d6 ",(0,r.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u5bf9\u8c61\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var request = App.HttpContext.Request;\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u975e ",(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Web")," \u4e2d\u8bbf\u95ee"),(0,r.kt)("p",{parentName:"admonition"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Web")," \u5b8c\u6574\u7684\u751f\u547d\u5468\u671f\u5185\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"App.HttpContext")," \u90fd\u662f\u6709\u6548\u7684\uff0c\u4f46\u5728\u975e ",(0,r.kt)("inlineCode",{parentName:"p"},"Web")," \u4e2d\u8fd4\u56de ",(0,r.kt)("inlineCode",{parentName:"p"},"null"),"\uff0c\u907f\u514d\u5728\u591a\u7ebf\u7a0b\uff0c\u4e8b\u4ef6\u603b\u7ebf\uff0c\u5b9a\u65f6\u4efb\u52a1\u7b49\u4e2d\u4f7f\u7528\u3002")),(0,r.kt)("h2",{id:"523-httpcontext-\u62d3\u5c55\u65b9\u6cd5"},"5.2.3 ",(0,r.kt)("inlineCode",{parentName:"h2"},"HttpContext")," \u62d3\u5c55\u65b9\u6cd5"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u57fa\u4e8e ",(0,r.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u63d0\u4f9b\u4e86\u4e00\u4e9b\u5e38\u7528\u7684\u62d3\u5c55\u65b9\u6cd5\u3002"),(0,r.kt)("h3",{id:"5231-\u83b7\u53d6\u5f53\u524d\u8bf7\u6c42\u7684\u7279\u6027-attribute"},"5.2.3.1 \u83b7\u53d6\u5f53\u524d\u8bf7\u6c42\u7684\u7279\u6027 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Attribute")),(0,r.kt)("p",null,"\u4e0b\u5217\u4ee3\u7801\u901a\u5e38\u7528\u4e8e\u6388\u6743 ",(0,r.kt)("inlineCode",{parentName:"p"},"Handler")," \u4e2d\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var attribute = httpContext.GetMetadata();\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Middleware")," \u4e2d\u95f4\u4ef6\u83b7\u53d6\u7279\u6027\u65b9\u5f0f"),(0,r.kt)("p",{parentName:"admonition"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Middleware")," \u4e2d\u95f4\u4ef6\u4e2d\u83b7\u53d6\u6709\u6240\u533a\u522b\uff0c\u4e3b\u8981\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Features")," \u83b7\u53d6\uff0c\u5982\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var endpointFeature = httpContext.Features.Get();\nvar attribute = endpointFeature?.Endpoint?.Metadata?.GetMetadata();\n"))),(0,r.kt)("h3",{id:"5232-\u8bbe\u7f6e-swagger-\u81ea\u52a8\u6388\u6743"},"5.2.3.2 \u8bbe\u7f6e ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u81ea\u52a8\u6388\u6743"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"Swagger")," \u9ed8\u8ba4\u4e0d\u80fd\u8bb0\u4f4f\u6388\u6743\u4fe1\u606f\uff0c\u4e00\u65e6\u5237\u65b0\u6d4f\u89c8\u5668\u5c31\u81ea\u52a8\u6e05\u7a7a"),"\uff0c\u6240\u4ee5 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86\u8be5\u62d3\u5c55\uff0c\u5373\u4f7f\u5237\u65b0\u6d4f\u89c8\u5668\u4e5f\u80fd\u4fdd\u6301\u6388\u6743\u72b6\u6001\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4-5}",showLineNumbers:!0,"{4-5}":!0},'// \u68c0\u67e5\u7528\u6237\u767b\u5f55\u548c\u751f\u6210 token \u4ee3\u7801...\n// .....\n\n// \u4e4b\u540e\u8c03\u7528\u8be5\u62d3\u5c55\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5b9e\u73b0 Swagger \u5237\u65b0\u4e5f\u80fd\u8bb0\u4f4f\u767b\u5f55\u4e86\nhttpContext.SigninToSwagger("\u4f60\u7684token");\n')),(0,r.kt)("h3",{id:"5233-\u9000\u51fa-swagger-\u6388\u6743"},"5.2.3.3 \u9000\u51fa ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u6388\u6743"),(0,r.kt)("p",null,"\u901a\u8fc7\u540e\u7aef\u4ee3\u7801\u5f3a\u5236\u6027\u8ba9 ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u6388\u6743\u5b9e\u73b0\uff0c",(0,r.kt)("strong",{parentName:"p"},"\u53ea\u9488\u5bf9\u4e0b\u4e00\u6b21\u8bf7\u6c42\u6709\u6548\uff01")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"httpContext.SignoutToSwagger();\n")),(0,r.kt)("h3",{id:"5234-\u83b7\u53d6\u672c\u5730-ip-\u5730\u5740"},"5.2.3.4 \u83b7\u53d6\u672c\u5730 IP \u5730\u5740"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ipv4\nvar ipv4 = httpContext.GetLocalIpAddressToIPv4();\n\n// ipv6\nvar ipv6 = httpContext.GetLocalIpAddressToIPv6();\n")),(0,r.kt)("h3",{id:"5235-\u83b7\u53d6\u5ba2\u6237\u7aef-ip-\u5730\u5740"},"5.2.3.5 \u83b7\u53d6\u5ba2\u6237\u7aef IP \u5730\u5740"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ipv4\nvar ipv4 = httpContext.GetRemoteIpAddressToIPv4();\n\n// ipv6\nvar ipv6 = httpContext.GetRemoteIpAddressToIPv6();\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Nginx")," \u65e0\u6cd5\u83b7\u53d6\u6b63\u786e\u5ba2\u6237\u7aef ",(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"IP")," \u95ee\u9898"),(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c\u670d\u52a1\u5668\u7aef\u4f7f\u7528\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"nginx")," \u7b49\u53cd\u5411\u4ee3\u7406\u5de5\u5177\uff0c\u53ef\u6dfb\u52a0\u4ee5\u4e0b\u4ee3\u7801\u914d\u7f6e\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers title="Startup.cs" {1-4,6-7}',showLineNumbers:!0,title:'"Startup.cs"',"{1-4,6-7}":!0},"services.Configure(options =>\n{\n options.ForwardedHeaders = ForwardedHeaders.All;\n});\n\n// \u6ce8\u610f\u5728 Configure \u6700\u524d\u9762\u914d\u7f6e\napp.UseForwardedHeaders();\n"))),(0,r.kt)("h3",{id:"5236-\u8bbe\u7f6e\u54cd\u5e94\u5934-token"},"5.2.3.6 \u8bbe\u7f6e\u54cd\u5e94\u5934 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Token")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'httpContext.SetTokensOfResponseHeaders("token", "\u5237\u65b0token");\n')),(0,r.kt)("h2",{id:"524-\u8bfb\u53d6-body-\u5185\u5bb9\u91cd\u590d\u8bfb"},"5.2.4 \u8bfb\u53d6 ",(0,r.kt)("inlineCode",{parentName:"h2"},"Body")," \u5185\u5bb9\uff08\u91cd\u590d\u8bfb\uff09"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.7.9 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u4e0d\u652f\u6301\u91cd\u590d\u8bfb\u53d6 ",(0,r.kt)("inlineCode",{parentName:"p"},"Body")," \u5185\u5bb9\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u62d3\u5c55\u65b9\u6cd5\uff0c\u9700\u8981\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u64cd\u4f5c\uff1a"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"strong"},"Startup.cs")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"strong"},"Configure")," \u542f\u7528 ",(0,r.kt)("inlineCode",{parentName:"strong"},"Body")," \u91cd\u590d\u8bfb\u529f\u80fd"),"\uff1a")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".NET5")," \u7248\u672c\uff1a")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4}",showLineNumbers:!0,"{1,4}":!0},"public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n{\n // ...\n app.EnableBuffering();\n app.UseRouting();\n // ....\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},".NET6+")," \u7248\u672c\uff1a")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7}",showLineNumbers:!0,"{7}":!0},"var builder = WebApplication.CreateBuilder(args).Inject();\n// ...\nvar app = builder.Build();\n// ...\napp.UseInject();\n\napp.EnableBuffering();\napp.MapControllers();\n\napp.Run();\n")),(0,r.kt)("p",null,"\u6ce8\u610f\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"app.EnableBuffering()")," \u5fc5\u987b\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"app.UseRouting()")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"app.MapControllers()")," \u4e4b\u524d\u6ce8\u518c\u3002"),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"strong"},"HttpContext")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"strong"},"HttpRequest")," \u62d3\u5c55 ",(0,r.kt)("inlineCode",{parentName:"strong"},".ReadBodyContentAsync()")," \u5373\u53ef"),"\u3002")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},"// HttpContext \u62d3\u5c55\nvar body = await httpContext.ReadBodyContentAsync();\n\n// HttpRequest \u62d3\u5c55\nvar body = await httpContext.Request.ReadBodyContentAsync();\n")),(0,r.kt)("h2",{id:"525-\u53cd\u9988\u4e0e\u5efa\u8bae"},"5.2.5 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,r.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/03f7a176.b52946fe.js b/handbook/build/assets/js/03f7a176.b52946fe.js new file mode 100644 index 00000000000..017aa6cc13b --- /dev/null +++ b/handbook/build/assets/js/03f7a176.b52946fe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9129],{3905:function(e,n,t){t.d(n,{Zo:function(){return d},kt:function(){return s}});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var m=a.createContext({}),p=function(e){var n=a.useContext(m),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},d=function(e){var n=p(e.components);return a.createElement(m.Provider,{value:n},e.children)},k={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},N=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,m=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),N=p(t),s=r,u=N["".concat(m,".").concat(s)]||N[s]||k[s]||i;return t?a.createElement(u,l(l({ref:n},d),{},{components:t})):a.createElement(u,l({ref:n},d))}));function s(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,l=new Array(i);l[0]=N;var o={};for(var m in n)hasOwnProperty.call(n,m)&&(o[m]=n[m]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var p=2;pISpareTimeWorker \u65b9\u5f0f",id:"2635-isparetimeworker-\u65b9\u5f0f",level:3},{value:"26.4 \u95f4\u9694\u65b9\u5f0f\u4f7f\u7528",id:"264-\u95f4\u9694\u65b9\u5f0f\u4f7f\u7528",level:2},{value:"26.4.1 \u6bcf\u9694\u4e00\u6bb5\u65f6\u95f4\u6267\u884c",id:"2641-\u6bcf\u9694\u4e00\u6bb5\u65f6\u95f4\u6267\u884c",level:3},{value:"26.4.2 \u914d\u7f6e\u4efb\u52a1\u4fe1\u606f",id:"2642-\u914d\u7f6e\u4efb\u52a1\u4fe1\u606f",level:3},{value:"26.4.3 \u624b\u52a8\u542f\u52a8\u6267\u884c",id:"2643-\u624b\u52a8\u542f\u52a8\u6267\u884c",level:3},{value:"26.4.4 ISpareTimeWorker \u65b9\u5f0f",id:"2644-isparetimeworker-\u65b9\u5f0f",level:3},{value:"26.5 Cron \u8868\u8fbe\u5f0f\u4f7f\u7528",id:"265-cron-\u8868\u8fbe\u5f0f\u4f7f\u7528",level:2},{value:"26.5.1 \u4ec0\u4e48\u662f Cron \u8868\u8fbe\u5f0f",id:"2651-\u4ec0\u4e48\u662f-cron-\u8868\u8fbe\u5f0f",level:3},{value:"26.5.2 \u5e38\u89c1 Cron \u8868\u8fbe\u5f0f",id:"2652-\u5e38\u89c1-cron-\u8868\u8fbe\u5f0f",level:3},{value:"26.5.3 \u5728\u7ebf\u751f\u6210 Cron \u8868\u8fbe\u5f0f",id:"2653-\u5728\u7ebf\u751f\u6210-cron-\u8868\u8fbe\u5f0f",level:3},{value:"26.5.4 Macro \u6807\u8bc6\u7b26",id:"2654-macro-\u6807\u8bc6\u7b26",level:3},{value:"26.5.5 \u4f7f\u7528 Cron \u8868\u8fbe\u5f0f",id:"2655-\u4f7f\u7528-cron-\u8868\u8fbe\u5f0f",level:3},{value:"26.5.6 \u4f7f\u7528 Macro \u5360\u4f4d\u7b26",id:"2656-\u4f7f\u7528-macro-\u5360\u4f4d\u7b26",level:3},{value:"26.5.7 \u914d\u7f6e\u4efb\u52a1\u4fe1\u606f",id:"2657-\u914d\u7f6e\u4efb\u52a1\u4fe1\u606f",level:3},{value:"26.5.8 \u624b\u52a8\u542f\u52a8\u6267\u884c",id:"2658-\u624b\u52a8\u542f\u52a8\u6267\u884c",level:3},{value:"26.5.9 ISpareTimeWorker \u65b9\u5f0f",id:"2659-isparetimeworker-\u65b9\u5f0f",level:3},{value:"26.6 \u81ea\u5b9a\u4e49\u4e0b\u6b21\u6267\u884c\u65f6\u95f4",id:"266-\u81ea\u5b9a\u4e49\u4e0b\u6b21\u6267\u884c\u65f6\u95f4",level:2},{value:"26.6.1 \u9ad8\u7ea7\u81ea\u5b9a\u4e49\u95f4\u9694\u65b9\u5f0f",id:"2661-\u9ad8\u7ea7\u81ea\u5b9a\u4e49\u95f4\u9694\u65b9\u5f0f",level:3},{value:"26.6.2 \u9ad8\u7ea7\u81ea\u5b9a\u4e49 Cron \u8868\u8fbe\u5f0f",id:"2662-\u9ad8\u7ea7\u81ea\u5b9a\u4e49-cron-\u8868\u8fbe\u5f0f",level:3},{value:"26.7 ISpareTimeWorker \u8bf4\u660e",id:"267-isparetimeworker-\u8bf4\u660e",level:2},{value:"26.7.1 [SpareTime] \u7279\u6027",id:"2671-sparetime-\u7279\u6027",level:3},{value:"26.8 SpareTime \u9759\u6001\u7c7b",id:"268-sparetime-\u9759\u6001\u7c7b",level:2},{value:"26.8.1 \u521d\u59cb\u5316\u4efb\u52a1",id:"2681-\u521d\u59cb\u5316\u4efb\u52a1",level:3},{value:"26.8.2 \u5b9e\u73b0\u540e\u53f0\u6267\u884c",id:"2682-\u5b9e\u73b0\u540e\u53f0\u6267\u884c",level:3},{value:"26.8.3 \u5f00\u59cb\u4e00\u4e2a\u4efb\u52a1",id:"2683-\u5f00\u59cb\u4e00\u4e2a\u4efb\u52a1",level:3},{value:"26.8.4 \u6682\u505c\u4e00\u4e2a\u4efb\u52a1",id:"2684-\u6682\u505c\u4e00\u4e2a\u4efb\u52a1",level:3},{value:"26.8.5 \u53d6\u6d88\u4e00\u4e2a\u4efb\u52a1",id:"2685-\u53d6\u6d88\u4e00\u4e2a\u4efb\u52a1",level:3},{value:"26.8.6 \u9500\u6bc1\u6240\u6709\u4efb\u52a1",id:"2686-\u9500\u6bc1\u6240\u6709\u4efb\u52a1",level:3},{value:"26.8.7 \u83b7\u53d6\u6240\u6709\u4efb\u52a1",id:"2687-\u83b7\u53d6\u6240\u6709\u4efb\u52a1",level:3},{value:"26.8.8 \u83b7\u53d6\u5355\u4e2a\u4efb\u52a1",id:"2688-\u83b7\u53d6\u5355\u4e2a\u4efb\u52a1",level:3},{value:"26.8.9 \u89e3\u6790 Cron \u8868\u8fbe\u5f0f",id:"2689-\u89e3\u6790-cron-\u8868\u8fbe\u5f0f",level:3},{value:"26.9 \u5e76\u884c\u548c\u4e32\u884c\u6267\u884c\u65b9\u5f0f",id:"269-\u5e76\u884c\u548c\u4e32\u884c\u6267\u884c\u65b9\u5f0f",level:2},{value:"26.9.1 SpareTime \u9759\u6001\u65b9\u5f0f\u6307\u5b9a",id:"2691-sparetime-\u9759\u6001\u65b9\u5f0f\u6307\u5b9a",level:3},{value:"26.9.2 ISpareTimeWorker \u65b9\u5f0f",id:"2692-isparetimeworker-\u65b9\u5f0f",level:3},{value:"26.10 \u4efb\u52a1\u5f02\u5e38\u5904\u7406",id:"2610-\u4efb\u52a1\u5f02\u5e38\u5904\u7406",level:2},{value:"26.11 \u5982\u4f55\u5728\u4efb\u52a1\u4e2d\u89e3\u6790\u5bf9\u8c61",id:"2611-\u5982\u4f55\u5728\u4efb\u52a1\u4e2d\u89e3\u6790\u5bf9\u8c61",level:2},{value:"26.11.1 SpareTime \u9759\u6001\u7c7b\u4e2d",id:"26111-sparetime-\u9759\u6001\u7c7b\u4e2d",level:3},{value:"26.11.2 ISpareTimeWorker \u65b9\u5f0f",id:"26112-isparetimeworker-\u65b9\u5f0f",level:3},{value:"26.12 \u5728 BackgroundService \u4e2d\u4f7f\u7528",id:"2612-\u5728-backgroundservice-\u4e2d\u4f7f\u7528",level:2},{value:"26.12.1 \u95f4\u9694\u6267\u884c\u65b9\u5f0f",id:"26121-\u95f4\u9694\u6267\u884c\u65b9\u5f0f",level:3},{value:"26.12.2 Cron \u8868\u8fbe\u5f0f\u6267\u884c\u65b9\u5f0f",id:"26122-cron-\u8868\u8fbe\u5f0f\u6267\u884c\u65b9\u5f0f",level:3},{value:"26.13 \u5b9a\u65f6\u4efb\u52a1\u76d1\u542c\u5668",id:"2613-\u5b9a\u65f6\u4efb\u52a1\u76d1\u542c\u5668",level:2},{value:"26.13.1 SpareTimerExecuter \u5c5e\u6027\u8bf4\u660e",id:"26131-sparetimerexecuter-\u5c5e\u6027\u8bf4\u660e",level:3},{value:"26.14 IIS \u90e8\u7f72\u56de\u6536\u8bbe\u7f6e",id:"2614-iis-\u90e8\u7f72\u56de\u6536\u8bbe\u7f6e",level:2},{value:"26.15 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"2615-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],N={toc:k};function s(e){var n=e.components,t=(0,r.Z)(e,l);return(0,i.kt)("wrapper",(0,a.Z)({},N,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"4.8.0+ \u7248\u672c\u8bf4\u660e",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"\u5728 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion 4.8.0+")," \u7248\u672c\u91c7\u7528 ",(0,i.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Sundial"},"Sundial")," \u5b9a\u65f6\u4efb\u52a1\u66ff\u6362\u539f\u6709\u7684 ",(0,i.kt)("inlineCode",{parentName:"strong"},"TaskScheduler")),"\uff0c",(0,i.kt)("strong",{parentName:"p"},"\ud83d\ude36",(0,i.kt)("a",{parentName:"strong",href:"/docs/job"},"\u67e5\u770b\u65b0\u6587\u6863"))),(0,i.kt)("p",{parentName:"admonition"},"\u65e7\u7248\u672c\u5c06\u652f\u6301\u5230 ",(0,i.kt)("inlineCode",{parentName:"p"},"2022\u5e7412\u670831\u65e5"),"\uff0c\u4e4b\u540e\u65e7\u7248\u672c\u4ee3\u7801\u4ece\u6846\u67b6\u4e2d\u79fb\u9664\uff0c\u8bf7\u5c3d\u5feb\u4f7f\u7528\u65b0\u7248\u672c\u66ff\u4ee3\u3002")),(0,i.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 2.0.0 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,i.kt)("admonition",{title:"IIS \u90e8\u7f72\u8bf4\u660e",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"\u7531\u4e8e IIS \u6709\u56de\u6536\u7684\u673a\u5236\uff0c\u6240\u4ee5\u5b9a\u65f6\u4efb\u52a1\u5e94\u8be5\u91c7\u7528\u72ec\u7acb\u90e8\u7f72\uff0c\u4e0d\u7136\u7ecf\u5e38\u51fa\u73b0\u4e0d\u80fd\u89e6\u53d1\u7684\u60c5\u51b5\u3002\u67e5\u770b\u3010",(0,i.kt)("a",{parentName:"p",href:"/docs/process-service"},"Worker Service \u7ae0\u8282"),"\u3011")),(0,i.kt)("h2",{id:"261-\u5173\u4e8e\u5b9a\u65f6\u4efb\u52a1"},"26.1 \u5173\u4e8e\u5b9a\u65f6\u4efb\u52a1"),(0,i.kt)("p",null,"\u987e\u540d\u601d\u4e49\uff0c\u5b9a\u65f6\u4efb\u52a1\u5c31\u662f\u5728\u7279\u5b9a\u7684\u65f6\u95f4\u6216\u7b26\u5408\u67d0\u79cd\u65f6\u95f4\u89c4\u5f8b\u6267\u884c\u7684\u4efb\u52a1\u3002\u901a\u5e38\u5b9a\u65f6\u4efb\u52a1\u6709\u56db\u79cd\u65f6\u95f4\u8c03\u5ea6\u65b9\u5f0f\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"\u7f13\u9694\u65f6\u95f4")," \u65b9\u5f0f\uff1a\u5ef6\u8fdf\u591a\u5c11\u65f6\u95f4\u540e\u8c03\u914d\u4efb\u52a1\uff0c\u8fd9\u79cd\u65b9\u5f0f\u4efb\u52a1\u53ea\u4f1a\u88ab\u8c03\u7528\u4e00\u6b21\u3002"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"\u95f4\u9694\u65f6\u95f4")," \u65b9\u5f0f\uff1a\u6bcf\u9694\u4e00\u6bb5\u56fa\u5b9a\u65f6\u95f4\u8c03\u914d\u4efb\u52a1\uff0c\u65e0\u95f4\u65ad\u8c03\u7528\u4efb\u52a1\u3002"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Cron \u8868\u8fbe\u5f0f")," \u65b9\u6cd5\uff1a\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"li"},"Cron")," \u8868\u8fbe\u5f0f\u8ba1\u7b97\u4e0b\u4e00\u6b21\u6267\u884c\u65f6\u95f4\u8fdb\u884c\u8c03\u914d\u4efb\u52a1\uff0c\u53ef\u4ee5\u914d\u7f6e\u7279\u5b9a\u65f6\u95f4\u8303\u56f4\u5185\u6267\u884c\uff0c\u4e5f\u53ef\u4ee5\u65e0\u95f4\u65ad\u6267\u884c\u3002"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"\u81ea\u5b9a\u4e49\u4e0b\u6b21\u6267\u884c\u65f6\u95f4"),"\uff1a\u53ef\u4ee5\u901a\u8fc7\u5404\u79cd\u903b\u8f91\u8fd0\u7b97\u8fd4\u56de\u4e0b\u4e00\u6b21\u6267\u884c\u65f6\u95f4")),(0,i.kt)("h2",{id:"262-\u5982\u4f55\u5b9e\u73b0"},"26.2 \u5982\u4f55\u5b9e\u73b0"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u4e24\u79cd\u65b9\u5f0f\u5b9e\u73b0\u5b9a\u65f6\u4efb\u52a1\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SpareTime")," \u9759\u6001\u7c7b\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"SpareTime")," \u9759\u6001\u7c7b\u63d0\u4f9b ",(0,i.kt)("inlineCode",{parentName:"li"},"SpareTime.Do([options])")," \u65b9\u5f0f\u8c03\u7528\u3002"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ISpareTimeWorker")," \u4f9d\u8d56\u65b9\u5f0f\uff1a\u901a\u8fc7\u81ea\u5b9a\u4e49\u7c7b\u5b9e\u73b0 ",(0,i.kt)("inlineCode",{parentName:"li"},"ISpareTimeWorker")," \u63a5\u53e3\u5e76\u7f16\u5199\u4e00\u5b9a\u89c4\u5219\u7684\u65b9\u6cd5\u5373\u53ef\u3002",(0,i.kt)("strong",{parentName:"li"},"\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Startup.cs")," \u4e2d\u6ce8\u518c ",(0,i.kt)("inlineCode",{parentName:"strong"},"services.AddTaskScheduler()")))),(0,i.kt)("h2",{id:"263-\u7f13\u9694\u65b9\u5f0f\u4f7f\u7528"},"26.3 \u7f13\u9694\u65b9\u5f0f\u4f7f\u7528"),(0,i.kt)("h3",{id:"2631-\u7279\u5b9a\u65f6\u95f4\u540e\u6267\u884c"},"26.3.1 \u7279\u5b9a\u65f6\u95f4\u540e\u6267\u884c"),(0,i.kt)("p",null,"\u8fd9\u91cc\u6f14\u793a ",(0,i.kt)("inlineCode",{parentName:"p"},"3s")," \u540e\u6267\u884c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5}",showLineNumbers:!0,"":!0,"{5}":!0},'Console.WriteLine("\u5f53\u524d\u65f6\u95f4\uff1a" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n\n// timer \u662f\u5b9a\u65f6\u5668\u7684\u5bf9\u8c61\uff0c\u5305\u542b\u5b9a\u65f6\u5668\u76f8\u5173\u4fe1\u606f\n// count \u8868\u793a\u6267\u884c\u6b21\u6570\uff0c\u8fd9\u91cc\u53ea\u6709\u4e00\u6b21\nSpareTime.DoOnce(3000, (timer, count) => {\n Console.WriteLine("\u73b0\u5728\u65f6\u95f4\uff1a" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n});\n')),(0,i.kt)("h3",{id:"2632-\u914d\u7f6e\u4efb\u52a1\u4fe1\u606f"},"26.3.2 \u914d\u7f6e\u4efb\u52a1\u4fe1\u606f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},'SpareTime.DoOnce(3000, (timer, count) => {\n Console.WriteLine("\u73b0\u5728\u65f6\u95f4\uff1a" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n}, "jobName", "\u63cf\u8ff0\u4e00\u4e0b\u8fd9\u4e2a\u4efb\u52a1\u662f\u5e72\u4ec0\u4e48\u7684");\n')),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"jobName")," \u6807\u8bc6\u4efb\u52a1\u7684\u552f\u4e00\u6807\u8bc6\uff0c\u901a\u8fc7\u8fd9\u4e2a\u6807\u8bc6\u53ef\u4ee5\u542f\u52a8\u3001\u6682\u505c\u3001\u9500\u6bc1\u4efb\u52a1\u3002"),(0,i.kt)("h3",{id:"2633-\u624b\u52a8\u542f\u52a8\u6267\u884c"},"26.3.3 \u624b\u52a8\u542f\u52a8\u6267\u884c"),(0,i.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4efb\u52a1\u521d\u59cb\u5316\u540e\u5c31\u7acb\u5373\u542f\u52a8\uff0c\u7b49\u5f85\u7b26\u5408\u7684\u65f6\u95f4\u5c31\u6267\u884c\uff0c\u6709\u4e9b\u65f6\u5019\u6211\u4eec\u4ec5\u4ec5\u60f3\u521d\u59cb\u5316\u65f6\u95f4\uff0c\u4e0d\u5e0c\u671b\u7acb\u5373\u6267\u884c\uff0c\u53ea\u9700\u8981\u914d\u7f6e ",(0,i.kt)("inlineCode",{parentName:"p"},"startNow")," \u5373\u53ef\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,6}",showLineNumbers:!0,"":!0,"{3,6}":!0},'SpareTime.DoOnce(3000, (timer, count) => {\n Console.WriteLine("\u73b0\u5728\u65f6\u95f4\uff1a" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n},"jobName", startNow: false);\n\n// \u624b\u52a8\u542f\u52a8\u6267\u884c\nSpareTime.Start("jobName");\n')),(0,i.kt)("h3",{id:"2634-\u6a21\u62df\u540e\u53f0\u6267\u884c"},"26.3.4 \u6a21\u62df\u540e\u53f0\u6267\u884c"),(0,i.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5f00\u542f\u65b0\u7ebf\u7a0b\u53bb\u6267\u884c\u4e00\u4e2a\u4efb\u52a1\uff0c\u6bd4\u5982\u53d1\u77ed\u4fe1\uff0c\u53d1\u90ae\u4ef6\uff0c\u65e0\u9700\u914d\u7f6e\u3002"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"":!0,"{2}":!0},"// \u6b64\u65b9\u6cd5\u65e0\u9700\u4e3b\u7ebf\u7a0b\u7b49\u5f85\u5373\u53ef\u8fd4\u56de\uff0c\u53ef\u5927\u5927\u63d0\u9ad8\u6027\u80fd\nSpareTime.DoIt(() => {\n // \u8fd9\u91cc\u53d1\u9001\u77ed\u4fe1\uff0c\u53d1\u9001\u90ae\u4ef6\u6216\u8bb0\u5f55\u8bbf\u95ee\u8bb0\u5f55\n});\n")),(0,i.kt)("p",null,"\u8fd8\u53ef\u4ee5\u6307\u5b9a\u591a\u957f\u65f6\u95f4\u540e\u89e6\u53d1\uff0c\u5efa\u8bae ",(0,i.kt)("inlineCode",{parentName:"p"},"10-1000")," \u6beb\u79d2\u4e4b\u95f4\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},"SpareTime.DoIt(() => {\n // \u53d1\u9001\u77ed\u4fe1\n}, 100);\n")),(0,i.kt)("h3",{id:"2635-isparetimeworker-\u65b9\u5f0f"},"26.3.5 ",(0,i.kt)("inlineCode",{parentName:"h3"},"ISpareTimeWorker")," \u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,8}",showLineNumbers:!0,"":!0,"{1,8}":!0},'public class JobWorker : ISpareTimeWorker\n{\n /// \n /// 3s \u540e\u6267\u884c\n /// \n /// \n /// \n [SpareTime(3000, "jobName", DoOnce = true, StartNow = true)]\n public void DoSomething(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n }\n\n /// \n /// 3s \u540e\u6267\u884c\uff08\u652f\u6301\u5f02\u6b65\uff09\n /// \n /// \n /// \n [SpareTime(3000, "jobName", DoOnce = true, StartNow = true)]\n public async Task DoSomethingAsync(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n await Task.CompletedTask;\n }\n}\n')),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Startup.cs")," \u4e2d\u6ce8\u518c ",(0,i.kt)("inlineCode",{parentName:"strong"},"services.AddTaskScheduler()"))),(0,i.kt)("h2",{id:"264-\u95f4\u9694\u65b9\u5f0f\u4f7f\u7528"},"26.4 \u95f4\u9694\u65b9\u5f0f\u4f7f\u7528"),(0,i.kt)("h3",{id:"2641-\u6bcf\u9694\u4e00\u6bb5\u65f6\u95f4\u6267\u884c"},"26.4.1 \u6bcf\u9694\u4e00\u6bb5\u65f6\u95f4\u6267\u884c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"":!0,"{2}":!0},'// \u6bcf\u9694 1s \u6267\u884c\nSpareTime.Do(1000, (timer, count) => {\n Console.WriteLine("\u73b0\u5728\u65f6\u95f4\uff1a" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n});\n')),(0,i.kt)("h3",{id:"2642-\u914d\u7f6e\u4efb\u52a1\u4fe1\u606f"},"26.4.2 \u914d\u7f6e\u4efb\u52a1\u4fe1\u606f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4}",showLineNumbers:!0,"":!0,"{1,4}":!0},'SpareTime.Do(1000, (timer, count) => {\n Console.WriteLine("\u73b0\u5728\u65f6\u95f4\uff1a" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n}, "jobName", "\u8fd9\u662f\u4e00\u4e2a\u8ba1\u65f6\u5668\u4efb\u52a1");\n')),(0,i.kt)("h3",{id:"2643-\u624b\u52a8\u542f\u52a8\u6267\u884c"},"26.4.3 \u624b\u52a8\u542f\u52a8\u6267\u884c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4,6}",showLineNumbers:!0,"":!0,"{1,4,6}":!0},'SpareTime.Do(1000, (timer, count) => {\n Console.WriteLine("\u73b0\u5728\u65f6\u95f4\uff1a" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n}, "jobName", startNow:false);\n\nSpareTime.Start("jobName");\n')),(0,i.kt)("h3",{id:"2644-isparetimeworker-\u65b9\u5f0f"},"26.4.4 ",(0,i.kt)("inlineCode",{parentName:"h3"},"ISpareTimeWorker")," \u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,8}",showLineNumbers:!0,"":!0,"{1,8}":!0},'public class JobWorker : ISpareTimeWorker\n{\n /// \n /// \u6bcf\u9694 3s \u6267\u884c\n /// \n /// \n /// \n [SpareTime(3000, "jobName", StartNow = true)]\n public void DoSomething(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n }\n}\n')),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Startup.cs")," \u4e2d\u6ce8\u518c ",(0,i.kt)("inlineCode",{parentName:"strong"},"services.AddTaskScheduler()"))),(0,i.kt)("h2",{id:"265-cron-\u8868\u8fbe\u5f0f\u4f7f\u7528"},"26.5 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Cron")," \u8868\u8fbe\u5f0f\u4f7f\u7528"),(0,i.kt)("h3",{id:"2651-\u4ec0\u4e48\u662f-cron-\u8868\u8fbe\u5f0f"},"26.5.1 \u4ec0\u4e48\u662f ",(0,i.kt)("inlineCode",{parentName:"h3"},"Cron")," \u8868\u8fbe\u5f0f"),(0,i.kt)("p",null,"Cron \u8868\u8fbe\u5f0f\u662f\u4e00\u4e2a\u5b57\u7b26\u4e32\uff0c\u5b57\u7b26\u4e32\u4ee5 ",(0,i.kt)("inlineCode",{parentName:"p"},"5")," \u6216 ",(0,i.kt)("inlineCode",{parentName:"p"},"6")," \u4e2a\u7a7a\u683c\u9694\u5f00\uff0c\u5206\u4e3a 6 \u6216 7 \u4e2a\u57df\uff0c\u6bcf\u4e00\u4e2a\u57df\u4ee3\u8868\u4e00\u4e2a\u542b\u4e49\uff0cCron \u6709\u5982\u4e0b\u4e24\u79cd\u8bed\u6cd5\u683c\u5f0f\uff1a"),(0,i.kt)("p",null,"\uff081\uff09 Seconds Minutes Hours DayofMonth Month DayofWeek Year"),(0,i.kt)("p",null,"\uff082\uff09Seconds Minutes Hours DayofMonth Month DayofWeek"),(0,i.kt)("p",null,"Cron \u4ece\u5de6\u5230\u53f3\uff08\u7528\u7a7a\u683c\u9694\u5f00\uff09\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"\u79d2")," ",(0,i.kt)("inlineCode",{parentName:"p"},"\u5206")," ",(0,i.kt)("inlineCode",{parentName:"p"},"\u5c0f\u65f6")," ",(0,i.kt)("inlineCode",{parentName:"p"},"\u6708\u4efd\u4e2d\u7684\u65e5\u671f")," ",(0,i.kt)("inlineCode",{parentName:"p"},"\u6708\u4efd")," ",(0,i.kt)("inlineCode",{parentName:"p"},"\u661f\u671f\u4e2d\u7684\u65e5\u671f")," ",(0,i.kt)("inlineCode",{parentName:"p"},"\u5e74\u4efd")),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"\u5b57\u6bb5"),(0,i.kt)("th",{parentName:"tr",align:null},"\u5141\u8bb8\u503c"),(0,i.kt)("th",{parentName:"tr",align:null},"\u5141\u8bb8\u7684\u7279\u6b8a\u5b57\u7b26"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"\u79d2\uff08Seconds\uff09"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0~59")," \u7684\u6574\u6570"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},", - \\* /")," \u56db\u4e2a\u5b57\u7b26")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"\u5206\uff08Minutes\uff09"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0~59")," \u7684\u6574\u6570"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},", - \\* /")," \u56db\u4e2a\u5b57\u7b26")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"\u5c0f\u65f6\uff08Hours\uff09"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0~23")," \u7684\u6574\u6570"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},", - \\* /")," \u56db\u4e2a\u5b57\u7b26")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"\u65e5\u671f\uff08DayofMonth\uff09"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"1~31")," \u7684\u6574\u6570\uff08\u4f46\u662f\u4f60\u9700\u8981\u8003\u8651\u5e73\u95f0\u6708\u7684\u5929\u6570\uff09"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},",- \\* ? / L W C")," \u516b\u4e2a\u5b57\u7b26")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"\u6708\u4efd\uff08Month\uff09"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"1~12")," \u7684\u6574\u6570\u6216\u8005 ",(0,i.kt)("inlineCode",{parentName:"td"},"JAN-DEC")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},", - \\* /")," \u56db\u4e2a\u5b57\u7b26")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"\u661f\u671f\uff08DayofWeek\uff09"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"1~7")," \u7684\u6574\u6570\u6216\u8005 ",(0,i.kt)("inlineCode",{parentName:"td"},"SUN-SAT \uff081=SUN\uff09")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},", - \\* ? / L C #")," \u516b\u4e2a\u5b57\u7b26")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"\u5e74(\u53ef\u9009\uff0c\u7559\u7a7a)\uff08Year\uff09"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"1970~2099")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},", - \\* /")," \u56db\u4e2a\u5b57\u7b26")))),(0,i.kt)("p",null,"\u6bcf\u4e00\u4e2a\u57df\u90fd\u4f7f\u7528\u6570\u5b57\uff0c\u4f46\u8fd8\u53ef\u4ee5\u51fa\u73b0\u5982\u4e0b\u7279\u6b8a\u5b57\u7b26\uff0c\u5b83\u4eec\u7684\u542b\u4e49\u662f\uff1a"),(0,i.kt)("p",null,"\uff081\uff09",(0,i.kt)("inlineCode",{parentName:"p"},"_"),"\uff1a\u8868\u793a\u5339\u914d\u8be5\u57df\u7684\u4efb\u610f\u503c\u3002\u5047\u5982\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Minutes")," \u57df\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"\\_"),", \u5373\u8868\u793a\u6bcf\u5206\u949f\u90fd\u4f1a\u89e6\u53d1\u4e8b\u4ef6\u3002"),(0,i.kt)("p",null,"\uff082\uff09",(0,i.kt)("inlineCode",{parentName:"p"},"?"),"\uff1a\u53ea\u80fd\u7528\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"DayofMonth")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"DayofWeek")," \u4e24\u4e2a\u57df\u3002\u5b83\u4e5f\u5339\u914d\u57df\u7684\u4efb\u610f\u503c\uff0c\u4f46\u5b9e\u9645\u4e0d\u4f1a\u3002\u56e0\u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"DayofMonth")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"DayofWeek")," \u4f1a\u76f8\u4e92\u5f71\u54cd\u3002\u4f8b\u5982\u60f3\u5728\u6bcf\u6708\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"20")," \u65e5\u89e6\u53d1\u8c03\u5ea6\uff0c\u4e0d\u7ba1 ",(0,i.kt)("inlineCode",{parentName:"p"},"20")," \u65e5\u5230\u5e95\u662f\u661f\u671f\u51e0\uff0c\u5219\u53ea\u80fd\u4f7f\u7528\u5982\u4e0b\u5199\u6cd5\uff1a ",(0,i.kt)("inlineCode",{parentName:"p"},"13 13 15 20 _ ?"),", \u5176\u4e2d\u6700\u540e\u4e00\u4f4d\u53ea\u80fd\u7528",(0,i.kt)("inlineCode",{parentName:"p"},"\uff1f"),"\uff0c\u800c\u4e0d\u80fd\u4f7f\u7528","_","\uff0c\u5982\u679c\u4f7f\u7528","*","\u8868\u793a\u4e0d\u7ba1\u661f\u671f\u51e0\u90fd\u4f1a\u89e6\u53d1\uff0c\u5b9e\u9645\u4e0a\u5e76\u4e0d\u662f\u8fd9\u6837\u3002"),(0,i.kt)("p",null,"\uff083\uff09",(0,i.kt)("inlineCode",{parentName:"p"},"-"),"\uff1a\u8868\u793a\u8303\u56f4\u3002\u4f8b\u5982\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Minutes")," \u57df\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"5-20"),"\uff0c\u8868\u793a\u4ece ",(0,i.kt)("inlineCode",{parentName:"p"},"5")," \u5206\u5230 ",(0,i.kt)("inlineCode",{parentName:"p"},"20")," \u5206\u949f\u6bcf\u5206\u949f\u89e6\u53d1\u4e00\u6b21"),(0,i.kt)("p",null,"\uff084\uff09",(0,i.kt)("inlineCode",{parentName:"p"},"/"),"\uff1a\u8868\u793a\u8d77\u59cb\u65f6\u95f4\u5f00\u59cb\u89e6\u53d1\uff0c\u7136\u540e\u6bcf\u9694\u56fa\u5b9a\u65f6\u95f4\u89e6\u53d1\u4e00\u6b21\u3002\u4f8b\u5982\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Minutes")," \u57df\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"5/20"),"\uff0c\u5219\u610f\u5473\u7740 ",(0,i.kt)("inlineCode",{parentName:"p"},"5")," \u5206\u949f\u89e6\u53d1\u4e00\u6b21\uff0c\u800c ",(0,i.kt)("inlineCode",{parentName:"p"},"25\uff0c45")," \u7b49\u5206\u522b\u89e6\u53d1\u4e00\u6b21."),(0,i.kt)("p",null,"\uff085\uff09",(0,i.kt)("inlineCode",{parentName:"p"},","),"\uff1a\u8868\u793a\u5217\u51fa\u679a\u4e3e\u503c\u3002\u4f8b\u5982\uff1a\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Minutes")," \u57df\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"5,20"),"\uff0c\u5219\u610f\u5473\u7740\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"5")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"20")," \u5206\u6bcf\u5206\u949f\u89e6\u53d1\u4e00\u6b21\u3002"),(0,i.kt)("p",null,"\uff086\uff09",(0,i.kt)("inlineCode",{parentName:"p"},"L"),"\uff1a\u8868\u793a\u6700\u540e\uff0c\u53ea\u80fd\u51fa\u73b0\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"DayofWeek")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"DayofMonth")," \u57df\u3002\u5982\u679c\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"DayofWeek")," \u57df\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"5L"),",\u610f\u5473\u7740\u5728\u6700\u540e\u7684\u4e00\u4e2a\u661f\u671f\u56db\u89e6\u53d1\u3002"),(0,i.kt)("p",null,"\uff087\uff09",(0,i.kt)("inlineCode",{parentName:"p"},"W"),"\uff1a\u8868\u793a\u6709\u6548\u5de5\u4f5c\u65e5(\u5468\u4e00\u5230\u5468\u4e94) \u53ea\u80fd\u51fa\u73b0\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"DayofMonth")," \u57df\uff0c\u7cfb\u7edf\u5c06\u5728\u79bb\u6307\u5b9a\u65e5\u671f\u7684\u6700\u8fd1\u7684\u6709\u6548\u5de5\u4f5c\u65e5\u89e6\u53d1\u4e8b\u4ef6\u3002\u4f8b\u5982\uff1a\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"DayofMonth")," \u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"5W"),"\uff0c\u5982\u679c ",(0,i.kt)("inlineCode",{parentName:"p"},"5")," \u65e5\u662f\u661f\u671f\u516d\uff0c\u5219\u5c06\u5728\u6700\u8fd1\u7684\u5de5\u4f5c\u65e5\uff1a\u661f\u671f\u4e94\uff0c\u5373 ",(0,i.kt)("inlineCode",{parentName:"p"},"4")," \u65e5\u89e6\u53d1\u3002\u5982\u679c ",(0,i.kt)("inlineCode",{parentName:"p"},"5")," \u65e5\u662f\u661f\u671f\u5929\uff0c\u5219\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"6")," \u65e5(\u5468\u4e00)\u89e6\u53d1\uff1b\u5982\u679c ",(0,i.kt)("inlineCode",{parentName:"p"},"5")," \u65e5\u5728\u661f\u671f\u4e00\u5230\u661f\u671f\u4e94\u4e2d\u7684\u4e00\u5929\uff0c\u5219\u5c31\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"5")," \u65e5\u89e6\u53d1\u3002\u53e6\u5916\u4e00\u70b9\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"W")," \u7684\u6700\u8fd1\u5bfb\u627e\u4e0d\u4f1a\u8de8\u8fc7\u6708\u4efd \u3002"),(0,i.kt)("p",null,"\uff088\uff09",(0,i.kt)("inlineCode",{parentName:"p"},"LW"),"\uff1a\u8fd9\u4e24\u4e2a\u5b57\u7b26\u53ef\u4ee5\u8fde\u7528\uff0c\u8868\u793a\u5728\u67d0\u4e2a\u6708\u6700\u540e\u4e00\u4e2a\u5de5\u4f5c\u65e5\uff0c\u5373\u6700\u540e\u4e00\u4e2a\u661f\u671f\u4e94\u3002"),(0,i.kt)("p",null,"\uff089\uff09",(0,i.kt)("inlineCode",{parentName:"p"},"#"),"\uff1a\u7528\u4e8e\u786e\u5b9a\u6bcf\u4e2a\u6708\u7b2c\u51e0\u4e2a\u661f\u671f\u51e0\uff0c\u53ea\u80fd\u51fa\u73b0\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"DayofMonth")," \u57df\u3002\u4f8b\u5982\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"4#2"),"\uff0c\u8868\u793a\u67d0\u6708\u7684\u7b2c\u4e8c\u4e2a\u661f\u671f\u4e09\u3002"),(0,i.kt)("h3",{id:"2652-\u5e38\u89c1-cron-\u8868\u8fbe\u5f0f"},"26.5.2 \u5e38\u89c1 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Cron")," \u8868\u8fbe\u5f0f"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"\u8868\u8fbe\u5f0f"),(0,i.kt)("th",{parentName:"tr",align:null},"\u8868\u8fbe\u5f0f\u4ee3\u8868\u542b\u4e49"),(0,i.kt)("th",{parentName:"tr",align:null},"\u683c\u5f0f\u5316"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"* * * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5206\u949f"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"*/1 * * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5206\u949f"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0/1 * * * ?")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5206\u949f"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 * * * ?")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5c0f\u65f6"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 0/1 * * ?")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5c0f\u65f6"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 23 ? * MON-FRI")),(0,i.kt)("td",{parentName:"tr",align:null},"\u665a\u4e0a 11:00\uff0c\u5468\u4e00\u81f3\u5468\u4e94"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"* * * * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u79d2"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"*/45 * * * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf 45 \u79d2"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"*/5 * * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf 5 \u5206\u949f"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0/10 * * * ?")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf 10 \u5206\u949f"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 */5 * * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf 5 \u5206\u949f"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"30 11 * * 1-5")),(0,i.kt)("td",{parentName:"tr",align:null},"\u5468\u4e00\u81f3\u5468\u4e94\u4e0a\u5348 11:30"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"30 11 * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"11:30"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0-10 11 * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e0a\u5348 11:00 \u81f3 11:10 \u4e4b\u95f4\u7684\u6bcf\u4e00\u5206\u949f"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"* * * 3 *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5206\u949f\uff0c\u53ea\u5728 3 \u6708\u4efd"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"* * * 3,6 *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5206\u949f\uff0c\u53ea\u5728 3 \u6708\u548c 6 \u6708"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"30 14,16 * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e0b\u5348 02:30 \u5206\u548c 04:30 \u5206"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"30 6,14,16 * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u65e9\u4e0a 06:30\uff0c\u4e0b\u5348 02:30 \u548c 04:30"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"46 9 * * 1")),(0,i.kt)("td",{parentName:"tr",align:null},"\u65e9\u4e0a 09:46\uff0c\u53ea\u5728\u661f\u671f\u4e00"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"23 12 15 * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e0b\u5348 12:23\uff0c\u5728\u672c\u6708\u7684\u7b2c 15 \u5929"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"23 12 * JAN *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e0b\u5348 12:23\uff0c\u53ea\u5728 1 \u6708\u4efd"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"23 12 ? JAN *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e0b\u5348 12:23\uff0c\u53ea\u5728 1 \u6708\u4efd"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"23 12 * JAN-FEB *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e0b\u5348 12:23\uff0c1 \u6708\u81f3 2 \u6708"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"23 12 * JAN-MAR *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e0b\u5348 12:23\uff0c1 \u6708\u81f3 3 \u6708"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"23 12 * * SUN")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e0b\u5348 12:23\uff0c\u4ec5\u5728\u661f\u671f\u5929"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"*/5 15 * * MON-FRI")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf 5 \u5206\u949f\uff0c\u4e0b\u5348 0:00 \u81f3 03:59\uff0c\u5468\u4e00\u81f3\u5468\u4e94"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"* * * * MON#3")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5206\u949f\uff0c\u5728\u6708\u7684\u7b2c\u4e09\u4e2a\u661f\u671f\u4e00"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"* * * * 4L")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u4e00\u5206\u949f\uff0c\u5728\u672c\u6708\u7684\u6700\u540e\u4e00\u5929"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"*/5 * L JAN *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u6708\u4e00\u6b21\u6bcf\u6708 5 \u5206\u949f\uff0c\u53ea\u5728 1 \u6708\u4efd"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"30 02 14 * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e0b\u5348\u5728 02:02:30"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"5-10 * * * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5206\u949f\u7684 5-10 \u79d2"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"5-10 30-35 10-12 * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"10:00 \u81f3 12:00 \u4e4b\u95f4\u7684\u6bcf\u5206\u949f 5-10 \u79d2\uff0c\u6bcf\u5c0f\u65f6 30-35 \u5206\u949f"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"30 */5 * * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5206\u949f\u7684 30 \u79d2\uff0c\u6bcf\u4e94\u5206\u949f"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 30 10-13 ? * WED,FRI")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5c0f\u65f6\u7684 30 \u5206\u949f\uff0c\u4e0b\u5348 10:00 \u81f3 01:00 \u4e4b\u95f4\uff0c\u4ec5\u5728\u5468\u4e09\u548c\u5468\u4e94"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"10 0/5 * * * ?")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5206\u949f\u7684 10 \u79d2\uff0c\u6bcf 05 \u5206\u949f"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 6 1/1 * ?")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e0b\u5348 06:00"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 5 0/1 * * ?")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e00\u4e2a\u5c0f\u65f6\u7684 05 \u5206"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 L * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u6708\u6700\u540e\u4e00\u5929\u4e0a\u5348 00\uff1a00"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 L-1 * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u6708\u6700\u540e\u4e00\u5929\u7684\u51cc\u6668 00\uff1a00"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 3W * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u6708\u7b2c 3 \u4e2a\u5de5\u4f5c\u65e5\u4e0a\u5348 00\uff1a00"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 LW * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u5728\u6bcf\u6708\u7684\u6700\u540e\u4e00\u4e2a\u5de5\u4f5c\u65e5\uff0c\u4e0a\u5348 00\uff1a00"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 * * 2L")),(0,i.kt)("td",{parentName:"tr",align:null},"\u672c\u6708\u6700\u540e\u4e00\u4e2a\u661f\u671f\u4e8c\u4e0a\u5348 00\uff1a00"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 * * 6#3")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u6708\u7b2c\u4e09\u4e2a\u661f\u671f\u516d\u4e0a\u5348 00\uff1a00"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 ? 1 MON#1")),(0,i.kt)("td",{parentName:"tr",align:null},"1 \u6708\u7b2c\u4e00\u4e2a\u661f\u671f\u4e00\u4e0a\u5348 00\uff1a00"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.Standard"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 3 * * ?")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5929\u51e0\u70b9\u6267\u884c\u4e00\u6b21"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"CronFormat.IncludeSeconds"))))),(0,i.kt)("h3",{id:"2653-\u5728\u7ebf\u751f\u6210-cron-\u8868\u8fbe\u5f0f"},"26.5.3 \u5728\u7ebf\u751f\u6210 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Cron")," \u8868\u8fbe\u5f0f"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://cron.qqe2.com/"},"https://cron.qqe2.com/")),(0,i.kt)("h3",{id:"2654-macro-\u6807\u8bc6\u7b26"},"26.5.4 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Macro")," \u6807\u8bc6\u7b26"),(0,i.kt)("p",null,"\u4e3a\u4e86\u65b9\u4fbf\u5b9a\u4e49 ",(0,i.kt)("inlineCode",{parentName:"p"},"Cron")," \u8868\u8fbe\u5f0f\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e5f\u63d0\u4f9b\u4e86\u975e\u5e38\u65b9\u4fbf\u7684\u5360\u4f4d\u7b26\u5b9e\u73b0\u5e38\u7528\u7684\u65f6\u95f4\u683c\u5f0f\uff1a"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"\u5360\u4f4d\u7b26"),(0,i.kt)("th",{parentName:"tr",align:null},"\u5bf9\u5e94\u8868\u8fbe\u5f0f"),(0,i.kt)("th",{parentName:"tr",align:null},"\u5360\u4f4d\u7b26\u4ee3\u8868\u542b\u4e49"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"@every_second")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"* * * * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u4e00\u79d2\u949f\u8dd1\u4e00\u6b21")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"@every_minute")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"* * * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u5728\u5206\u949f\u5f00\u59cb\u65f6\u6bcf\u5206\u949f\u8fd0\u884c\u4e00\u6b21")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"@hourly")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 * * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u5728\u5c0f\u65f6\u5f00\u59cb\u65f6\u6bcf\u5c0f\u65f6\u8fd0\u884c\u4e00\u6b21")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"@daily")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5929\u5348\u591c\u8fd0\u884c\u4e00\u6b21")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"@midnight")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 * * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5929\u5348\u591c\u8fd0\u884c\u4e00\u6b21")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"@weekly")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 * * 0")),(0,i.kt)("td",{parentName:"tr",align:null},"\u5468\u65e5\u4e0a\u5348\u5348\u591c\u6bcf\u5468\u8fd0\u884c\u4e00\u6b21")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"@monthly")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 1 * *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u6708\u5728\u6bcf\u6708\u7b2c\u4e00\u5929\u7684\u5348\u591c\u8fd0\u884c\u4e00\u6b21")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"@yearly")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 1 1 *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5e74 1 \u6708 1 \u65e5\u5348\u591c\u8fd0\u884c\u4e00\u6b21")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"@annually")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"0 0 1 1 *")),(0,i.kt)("td",{parentName:"tr",align:null},"\u6bcf\u5e74 1 \u6708 1 \u65e5\u5348\u591c\u8fd0\u884c\u4e00\u6b21")))),(0,i.kt)("h3",{id:"2655-\u4f7f\u7528-cron-\u8868\u8fbe\u5f0f"},"26.5.5 \u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Cron")," \u8868\u8fbe\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"":!0,"{2,5}":!0},'// \u6bcf\u9694 1s \u6267\u884c\nSpareTime.Do("* * * * * *", (timer, count) => {\n Console.WriteLine("\u73b0\u5728\u65f6\u95f4\uff1a" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n}, cronFormat: CronFormat.IncludeSeconds);\n')),(0,i.kt)("admonition",{title:"\u5173\u4e8e CronFormat",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u672a\u542f\u7528\u5bf9 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u79d2")," \u7684\u652f\u6301\uff0c\u5982\u9700\u5f00\u542f\uff0c\u5219\u8bbe\u7f6e ",(0,i.kt)("inlineCode",{parentName:"p"},"cronFormat: CronFormat.IncludeSeconds")," \u5373\u53ef\u3002\u9ed8\u8ba4\u503c\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"cronFormat: CronFormat.Standard"))),(0,i.kt)("h3",{id:"2656-\u4f7f\u7528-macro-\u5360\u4f4d\u7b26"},"26.5.6 \u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Macro")," \u5360\u4f4d\u7b26"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"":!0,"{2}":!0},'// \u6bcf\u9694 1s \u6267\u884c\nSpareTime.Do("@every_second", (timer, count) => {\n Console.WriteLine("\u73b0\u5728\u65f6\u95f4\uff1a" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n});\n')),(0,i.kt)("h3",{id:"2657-\u914d\u7f6e\u4efb\u52a1\u4fe1\u606f"},"26.5.7 \u914d\u7f6e\u4efb\u52a1\u4fe1\u606f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},'SpareTime.Do("* * * * *", (timer, count) => {\n Console.WriteLine("\u73b0\u5728\u65f6\u95f4\uff1a" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n}, "cronName", "\u6bcf\u5206\u949f\u6267\u884c\u4e00\u6b21");\n')),(0,i.kt)("h3",{id:"2658-\u624b\u52a8\u542f\u52a8\u6267\u884c"},"26.5.8 \u624b\u52a8\u542f\u52a8\u6267\u884c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,6}",showLineNumbers:!0,"":!0,"{4,6}":!0},'SpareTime.Do("* * * * *", (timer, count) => {\n Console.WriteLine("\u73b0\u5728\u65f6\u95f4\uff1a" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n}, "cronName", "\u6bcf\u5206\u949f\u6267\u884c\u4e00\u6b21", startNow: false);\n\nSpareTime.Start("cronName");\n')),(0,i.kt)("h3",{id:"2659-isparetimeworker-\u65b9\u5f0f"},"26.5.9 ",(0,i.kt)("inlineCode",{parentName:"h3"},"ISpareTimeWorker")," \u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,8}",showLineNumbers:!0,"":!0,"{1,8}":!0},'public class JobWorker : ISpareTimeWorker\n{\n /// \n /// \u6bcf\u5206\u949f\u6267\u884c\n /// \n /// \n /// \n [SpareTime("* * * * *", "jobName", StartNow = true)]\n public void DoSomething(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n }\n\n /// \n /// \u6bcf\u5206\u949f\u6267\u884c\uff08\u652f\u6301\u5f02\u6b65\uff09\n /// \n /// \n /// \n [SpareTime("* * * * *", "jobName", StartNow = true)]\n public async Task DoSomethingAsync(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n await Task.CompletedTask;\n }\n}\n')),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Startup.cs")," \u4e2d\u6ce8\u518c ",(0,i.kt)("inlineCode",{parentName:"strong"},"services.AddTaskScheduler()"))),(0,i.kt)("h2",{id:"266-\u81ea\u5b9a\u4e49\u4e0b\u6b21\u6267\u884c\u65f6\u95f4"},"26.6 \u81ea\u5b9a\u4e49\u4e0b\u6b21\u6267\u884c\u65f6\u95f4"),(0,i.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\u6211\u4eec\u9700\u8981\u8fdb\u884c\u4e00\u4e9b\u4e1a\u52a1\u903b\u8f91\uff0c\u6bd4\u5982\u6570\u636e\u5e93\u67e5\u8be2\u7b49\u64cd\u4f5c\u8fd4\u56de\u4e0b\u4e00\u6b21\u6267\u884c\u65f6\u95f4\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u9ad8\u7ea7\u81ea\u5b9a\u4e49\u65b9\u5f0f\u3002"),(0,i.kt)("h3",{id:"2661-\u9ad8\u7ea7\u81ea\u5b9a\u4e49\u95f4\u9694\u65b9\u5f0f"},"26.6.1 \u9ad8\u7ea7\u81ea\u5b9a\u4e49\u95f4\u9694\u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,4-5,7}",showLineNumbers:!0,"":!0,"{2,4-5,7}":!0},'SpareTime.Do(()=>{\n // \u8fd9\u91cc\u53ef\u4ee5\u67e5\u8be2\u6570\u636e\u5e93\u6216\u8fdb\u884c\u6216\u8fdb\u884c\u4efb\u4f55\u4e1a\u52a1\u903b\u8f91\n\n if(\u7b26\u5408\u903b\u8f91){\n return 1000; // \u6bcf\u79d2\u6267\u884c\n }\n else return -1; // \u4e0d\u7b26\u5408\u903b\u8f91\u53d6\u6d88\u4efb\u52a1\n},\n(timer,count)=>{\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n});\n')),(0,i.kt)("admonition",{title:"\u914d\u7f6e\u662f\u5426\u6301\u7eed\u68c0\u67e5",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u8be5\u81ea\u5b9a\u4e49\u4f1a\u5728\u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"p"},"\u5c0f\u4e8e\u6216\u7b49\u4e8e0")," \u65f6\u7ec8\u6b62\u4efb\u52a1\u7684\u6267\u884c\u3002\u4f46\u662f\u6211\u4eec\u5e0c\u671b\u8be5\u4efb\u52a1\u4e0d\u8981\u7ec8\u6b62\uff0c\u53ea\u8981\u7b26\u5408\u6761\u4ef6\u90fd\u4e00\u76f4\u6267\u884c\uff0c\u53ea\u9700\u8981\u914d\u7f6e ",(0,i.kt)("inlineCode",{parentName:"p"},"cancelInNoneNextTime: false")," \u5373\u53ef")),(0,i.kt)("h3",{id:"2662-\u9ad8\u7ea7\u81ea\u5b9a\u4e49-cron-\u8868\u8fbe\u5f0f"},"26.6.2 \u9ad8\u7ea7\u81ea\u5b9a\u4e49 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Cron")," \u8868\u8fbe\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,4-5,7}",showLineNumbers:!0,"":!0,"{2,4-5,7}":!0},'SpareTime.Do(()=>{\n // \u8fd9\u91cc\u53ef\u4ee5\u67e5\u8be2\u6570\u636e\u5e93\u6216\u8fdb\u884c\u6216\u8fdb\u884c\u4efb\u4f55\u4e1a\u52a1\u903b\u8f91\n\n if(\u7b26\u5408\u903b\u8f91){\n return DateTimeOffset.Now.AddMinutes(10); // \u5341\u5206\u949f\u540e\u518d\u6267\u884c\n }\n else return null; // \u4e0d\u7b26\u5408\u903b\u8f91\u53d6\u6d88\u4efb\u52a1\n},\n(timer,count) => {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n});\n')),(0,i.kt)("admonition",{title:"\u914d\u7f6e\u662f\u5426\u6301\u7eed\u68c0\u67e5",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u8be5\u81ea\u5b9a\u4e49\u4f1a\u5728\u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"p"},"null")," \u65f6\u7ec8\u6b62\u4efb\u52a1\u7684\u6267\u884c\u3002\u4f46\u662f\u6211\u4eec\u5e0c\u671b\u8be5\u4efb\u52a1\u4e0d\u8981\u7ec8\u6b62\uff0c\u53ea\u8981\u7b26\u5408\u6761\u4ef6\u90fd\u4e00\u76f4\u6267\u884c\uff0c\u53ea\u9700\u8981\u914d\u7f6e ",(0,i.kt)("inlineCode",{parentName:"p"},"cancelInNoneNextTime: false")," \u5373\u53ef\uff0c\u5982\uff1a"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,4-5,7,12}",showLineNumbers:!0,"":!0,"{2,4-5,7,12}":!0},'SpareTime.Do(()=>{\n // \u8fd9\u91cc\u53ef\u4ee5\u67e5\u8be2\u6570\u636e\u5e93\u6216\u8fdb\u884c\u6216\u8fdb\u884c\u4efb\u4f55\u4e1a\u52a1\u903b\u8f91\n\n if(\u7b26\u5408\u903b\u8f91){\n return SpareTime.GetCronNextOccurrence("cron \u8868\u8fbe\u5f0f");\n }\n else return null; // \u4e0d\u7b26\u5408\u903b\u8f91\u7ee7\u7eed\u68c0\u67e5\n},\n(timer,count) => {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n}, cancelInNoneNextTime: false);\n'))),(0,i.kt)("h2",{id:"267-isparetimeworker-\u8bf4\u660e"},"26.7 ",(0,i.kt)("inlineCode",{parentName:"h2"},"ISpareTimeWorker")," \u8bf4\u660e"),(0,i.kt)("p",null,"\u9664\u4e86\u4e0a\u9762\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"SpareTime")," \u9759\u6001\u7c7b\u65b9\u5f0f\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u8fd8\u63d0\u4f9b\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"ISpareTimeWorker")," \u65b9\u5f0f\uff0c\u4f7f\u7528\u8be5\u65b9\u5f0f\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u81ea\u5b9a\u4e49\u4e00\u4e2a",(0,i.kt)("strong",{parentName:"p"},"\u516c\u5f00\u4e14\u975e\u62bd\u8c61\u975e\u9759\u6001"),"\u7c7b\u5e76\u5b9e\u73b0 ",(0,i.kt)("inlineCode",{parentName:"p"},"ISpareTimeWorker")," \u5373\u53ef\u3002"),(0,i.kt)("p",null,"\u5728\u8be5\u7c7b\u4e2d\u5b9a\u4e49\u7684\u4efb\u52a1\u65b9\u6cd5\u9700\u6ee1\u8db3\u4ee5\u4e0b\u89c4\u5219\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u5fc5\u987b\u662f",(0,i.kt)("strong",{parentName:"li"},"\u516c\u5f00\u4e14\u5b9e\u4f8b\u65b9\u6cd5")),(0,i.kt)("li",{parentName:"ul"},"\u8be5\u65b9\u6cd5\u5fc5\u987b\u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"li"},"void")," \u4e14\u63d0\u4f9b ",(0,i.kt)("inlineCode",{parentName:"li"},"SpareTimer")," \u548c ",(0,i.kt)("inlineCode",{parentName:"li"},"long")," \u4e24\u4e2a\u53c2\u6570"),(0,i.kt)("li",{parentName:"ul"},"\u5fc5\u987b\u8d34\u6709 ",(0,i.kt)("inlineCode",{parentName:"li"},"[SpareTime]")," \u7279\u6027")),(0,i.kt)("p",null,"\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4-5,12-13,20-21,28-30,37-38,45}",showLineNumbers:!0,"":!0,"{1,4-5,12-13,20-21,28-30,37-38,45}":!0},'public class JobWorker : ISpareTimeWorker\n{\n // \u6bcf\u9694\u4e00\u79d2\u6267\u884c\uff0c\u4e14\u7acb\u5373\u542f\u52a8\n [SpareTime(1000, "jobName1", StartNow = true)]\n public void DoSomething1(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n }\n\n // \u6bcf\u5206\u949f\u6267\u884c\uff0c\u4e14\u7acb\u5373\u542f\u52a8\n [SpareTime("* * * * *", "jobName2", StartNow = true)]\n public void DoSomething2(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n }\n\n // \u6bcf\u79d2\u6267\u884c\uff0c\u4e14\u7b49\u5f85\u542f\u52a8\n [SpareTime("* * * * * *", "jobName3",CronFormat = CronFormat.IncludeSeconds, StartNow = false)]\n public void DoSomething3(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n }\n\n // \u6bcf\u79d2\u6267\u884c\u4e00\u6b21\uff0c\u6bcf\u5206\u949f\u4e5f\u6267\u884c\u4e00\u6b21\n [SpareTime(1000, "jobName4", StartNow = true)]\n [SpareTime("* * * * *", "jobName5", StartNow = true)]\n public void DoSomething4(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n }\n\n // \u53ea\u6267\u884c\u4e00\u6b21\n [SpareTime(1000, "jobName5", StartNow = true, DoOnce = true)]\n public void DoSomething5(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n }\n\n // \u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\uff0c\u901a\u8fc7 #(\u914d\u7f6e\u8def\u5f84)\n [SpareTime("#(MyJob:Time)", "jobName6", StartNow = true, DoOnce = true)]\n public void DoSomething5(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n }\n\n // \u652f\u6301\u5f02\u6b65\n [SpareTime(1000, "jobName1", StartNow = true)]\n public async Task DoSomethingAsync(SpareTimer timer, long count)\n {\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n await Task.CompletedTask;\n }\n}\n')),(0,i.kt)("admonition",{title:"\u5173\u4e8e\u4f9d\u8d56\u6ce8\u5165",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"ISpareTimeWorker")," \u63a5\u53e3\u4e3b\u8981\u662f\u7528\u6765\u67e5\u627e\u5b9a\u65f6\u5668\u5bf9\u8c61\u7684\uff0c\u4e5f\u5c31\u662f\u5b83\u7684\u5b9e\u73b0\u7c7b\u5e76\u672a\u63d0\u4f9b\u4f9d\u8d56\u6ce8\u5165\u529f\u80fd\uff0c\u6240\u4ee5\u5728\u5b9e\u73b0\u7c7b\u5e76\u4e0d\u652f\u6301\u6784\u9020\u51fd\u6570\u6ce8\u5165\u4f9d\u8d56\u9879\u3002")),(0,i.kt)("h3",{id:"2671-sparetime-\u7279\u6027"},"26.7.1 ",(0,i.kt)("inlineCode",{parentName:"h3"},"[SpareTime]")," \u7279\u6027"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"[SpareTime]")," \u652f\u6301\u4ee5\u4e0b\u914d\u7f6e\u5c5e\u6027"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Interval"),"\uff1a\u95f4\u9694\u65f6\u95f4, ",(0,i.kt)("inlineCode",{parentName:"li"},"double")," \u7c7b\u578b"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"CronExpression"),"\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"Cron")," \u8868\u8fbe\u5f0f\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"WorkerName"),"\uff1a\u4efb\u52a1\u552f\u4e00\u6807\u8bc6\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"\u5fc5\u586b")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Description"),"\uff1a\u4efb\u52a1\u63cf\u8ff0\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"DoOnce"),"\uff1a\u662f\u5426\u53ea\u6267\u884c\u4e00\u6b21\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,i.kt)("inlineCode",{parentName:"li"},"false")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"StartNow"),"\uff1a\u662f\u5426\u7acb\u5373\u542f\u52a8\uff0c\u9ed8\u8ba4 ",(0,i.kt)("inlineCode",{parentName:"li"},"false")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"CronFormat"),"\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"Cron")," \u8868\u8fbe\u5f0f\u683c\u5f0f\u5316\u65b9\u5f0f\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"CronFormat")," \u679a\u4e3e\u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,i.kt)("inlineCode",{parentName:"li"},"CronFormat.Standard")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ExecuteType"),"\uff1a\u914d\u7f6e\u4efb\u52a1\u6267\u884c\u65b9\u5f0f\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"SpareTimeExecuteTypes")," \u679a\u4e3e\u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,i.kt)("inlineCode",{parentName:"li"},"SpareTimeExecuteTypes.Parallel"))),(0,i.kt)("h2",{id:"268-sparetime-\u9759\u6001\u7c7b"},"26.8 ",(0,i.kt)("inlineCode",{parentName:"h2"},"SpareTime")," \u9759\u6001\u7c7b"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"SpareTime")," \u9759\u6001\u7c7b\u63d0\u4f9b\u4e86\u4e00\u4e9b\u65b9\u6cd5\u65b9\u4fbf\u521d\u59cb\u5316\u548c\u7ba1\u7406\u4efb\u52a1"),(0,i.kt)("h3",{id:"2681-\u521d\u59cb\u5316\u4efb\u52a1"},"26.8.1 \u521d\u59cb\u5316\u4efb\u52a1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u5f00\u542f\u95f4\u9694\u4efb\u52a1\nSpareTime.Do(interval, [options]);\n\n// \u5f00\u542f Cron \u8868\u8fbe\u5f0f\u4efb\u52a1\nSpareTime.Do(expression, [options]);\n\n// \u53ea\u6267\u884c\u4e00\u6b21\u4efb\u52a1\nSpareTime.DoOnce(interval, [options]);\n\n// \u5b9e\u73b0\u81ea\u5b9a\u4e49\u4efb\u52a1\nSpareTime.Do(()=>{\n return DateTime.Now.AddMinutes(10);\n},[options]);\n")),(0,i.kt)("h3",{id:"2682-\u5b9e\u73b0\u540e\u53f0\u6267\u884c"},"26.8.2 \u5b9e\u73b0\u540e\u53f0\u6267\u884c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u5b9e\u73b0\u540e\u53f0\u6267\u884c\nSpareTime.DoIt(()=>{});\n")),(0,i.kt)("h3",{id:"2683-\u5f00\u59cb\u4e00\u4e2a\u4efb\u52a1"},"26.8.3 \u5f00\u59cb\u4e00\u4e2a\u4efb\u52a1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'SpareTime.Start("\u4efb\u52a1\u6807\u8bc6");\n')),(0,i.kt)("h3",{id:"2684-\u6682\u505c\u4e00\u4e2a\u4efb\u52a1"},"26.8.4 \u6682\u505c\u4e00\u4e2a\u4efb\u52a1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'SpareTime.Stop("\u4efb\u52a1\u6807\u8bc6");\n// \u8fd8\u53ef\u4ee5\u6807\u8bb0\u4e00\u4e2a\u4efb\u52a1\u6267\u884c\u5931\u8d25\nSpareTime.Stop("\u4efb\u52a1\u6807\u8bc6", true);\n')),(0,i.kt)("h3",{id:"2685-\u53d6\u6d88\u4e00\u4e2a\u4efb\u52a1"},"26.8.5 \u53d6\u6d88\u4e00\u4e2a\u4efb\u52a1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'SpareTime.Cancel("\u4efb\u52a1\u540d\u79f0");\n')),(0,i.kt)("h3",{id:"2686-\u9500\u6bc1\u6240\u6709\u4efb\u52a1"},"26.8.6 \u9500\u6bc1\u6240\u6709\u4efb\u52a1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"SpareTime.Dispose();\n")),(0,i.kt)("h3",{id:"2687-\u83b7\u53d6\u6240\u6709\u4efb\u52a1"},"26.8.7 \u83b7\u53d6\u6240\u6709\u4efb\u52a1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var workers = SpareTime.GetWorkers();\n")),(0,i.kt)("h3",{id:"2688-\u83b7\u53d6\u5355\u4e2a\u4efb\u52a1"},"26.8.8 \u83b7\u53d6\u5355\u4e2a\u4efb\u52a1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var worker = SpareTime.GetWorker("workerName");\n')),(0,i.kt)("h3",{id:"2689-\u89e3\u6790-cron-\u8868\u8fbe\u5f0f"},"26.8.9 \u89e3\u6790 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Cron")," \u8868\u8fbe\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var nextTime = SpareTime.GetCronNextOccurrence("* * * * *");\n')),(0,i.kt)("h2",{id:"269-\u5e76\u884c\u548c\u4e32\u884c\u6267\u884c\u65b9\u5f0f"},"26.9 ",(0,i.kt)("inlineCode",{parentName:"h2"},"\u5e76\u884c"),"\u548c",(0,i.kt)("inlineCode",{parentName:"h2"},"\u4e32\u884c"),"\u6267\u884c\u65b9\u5f0f"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u4efb\u52a1\u4e24\u79cd\u6267\u884c\u65b9\u5f0f ",(0,i.kt)("inlineCode",{parentName:"p"},"\u5e76\u884c")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"\u4e32\u884c"),"\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"\u5e76\u884c"),"\uff1a\u65e0\u9700\u7b49\u5f85\u4e0a\u4e00\u6b21\u4efb\u52a1\u5b8c\u6210\uff0c",(0,i.kt)("strong",{parentName:"li"},"\u9ed8\u8ba4\u503c")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"\u4e32\u884c"),"\uff1a\u9700\u7b49\u5f85\u4e0a\u4e00\u6b21\u4efb\u52a1\u5b8c\u6210")),(0,i.kt)("h3",{id:"2691-sparetime-\u9759\u6001\u65b9\u5f0f\u6307\u5b9a"},"26.9.1 ",(0,i.kt)("inlineCode",{parentName:"h3"},"SpareTime")," \u9759\u6001\u65b9\u5f0f\u6307\u5b9a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,5}",showLineNumbers:!0,"":!0,"{3,5}":!0},'SpareTime.Do(1000, (t, i) =>\n{\n Thread.Sleep(5000); // \u6a21\u62df\u6267\u884c\u8017\u65f6\u4efb\u52a1\n Console.WriteLine($"{t.WorkerName} -{t.Description} - {DateTime.Now:yyyy-MM-dd HH:mm:ss} - {i}");\n}, "serialName", "\u6a21\u62df\u4e32\u884c\u4efb\u52a1", executeType: SpareTimeExecuteTypes.Serial);\n')),(0,i.kt)("h3",{id:"2692-isparetimeworker-\u65b9\u5f0f"},"26.9.2 ",(0,i.kt)("inlineCode",{parentName:"h3"},"ISpareTimeWorker")," \u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},'[SpareTime(1000, "jobName1", StartNow = true, ExecuteType = SpareTimeExecuteTypes.Serial)]\npublic void DoSomething1(SpareTimer timer, long count)\n{\n Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));\n Console.WriteLine($"\u4e00\u5171\u6267\u884c\u4e86\uff1a{count} \u6b21");\n}\n')),(0,i.kt)("h2",{id:"2610-\u4efb\u52a1\u5f02\u5e38\u5904\u7406"},"26.10 \u4efb\u52a1\u5f02\u5e38\u5904\u7406"),(0,i.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\u6211\u4eec\u53ef\u80fd\u5728\u6267\u884c\u4efb\u52a1\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u5f02\u5e38\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e5f\u63d0\u4f9b\u4e86\u5c5e\u6027\u5224\u65ad\u662f\u5426\u6709\u5f02\u5e38\u548c\u5f02\u5e38\u4fe1\u606f\uff0c\u65b9\u4fbf\u8bb0\u5f55\u5230\u65e5\u5fd7\u4e2d\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4-7,11}",showLineNumbers:!0,"":!0,"{4-7,11}":!0},'SpareTime.Do(1000, (t, c) =>\n{\n // \u5224\u65ad\u662f\u5426\u6709\u5f02\u5e38\n if (t.Exception.Any())\n {\n Console.WriteLine(t.Exception.Values.LastOrDefault()?.Message);\n }\n // \u6267\u884c\u7b2c\u4e09\u6b21\u629b\u5f02\u5e38\n if (c > 2)\n {\n throw Oops.Oh("\u629b\u5f02\u5e38" + c);\n }\n else\n {\n Console.WriteLine($"{t.WorkerName} -{t.Description} - {DateTime.Now:yyyy-MM-dd HH:mm:ss} - {c}");\n }\n}, "exceptionJob");\n')),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4e00\u4e2a\u4efb\u52a1\u8fde\u7eed\u9519\u8bef\u6b21\u6570\u8fbe ",(0,i.kt)("inlineCode",{parentName:"p"},"10\u6b21")," \u5219\u4efb\u52a1\u5c06\u81ea\u52a8\u505c\u6b62\uff0c\u5e76\u6807\u8bb0\u4efb\u52a1\u72b6\u6001\u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"Failed"),"\u3002")),(0,i.kt)("h2",{id:"2611-\u5982\u4f55\u5728\u4efb\u52a1\u4e2d\u89e3\u6790\u5bf9\u8c61"},"26.11 \u5982\u4f55\u5728\u4efb\u52a1\u4e2d\u89e3\u6790\u5bf9\u8c61"),(0,i.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\u6211\u4eec\u9700\u8981\u5728\u4efb\u52a1\u4e2d\u8fdb\u884c\u6570\u636e\u5e93\u64cd\u4f5c\u6216\u89e3\u6790\u670d\u52a1\uff0c\u8fd9\u65f6\u5019\u6211\u4eec\u53ea\u9700\u8981\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u4f5c\u7528\u57df\u5373\u53ef"),(0,i.kt)("h3",{id:"26111-sparetime-\u9759\u6001\u7c7b\u4e2d"},"26.11.1 ",(0,i.kt)("inlineCode",{parentName:"h3"},"SpareTime")," \u9759\u6001\u7c7b\u4e2d"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"":!0,"{2}":!0},'SpareTime.Do(1000, (timer,count) => {\n Scoped.Create((_, scope) =>\n {\n var services = scope.ServiceProvider;\n\n // \u83b7\u53d6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\n var dbContext = Db.GetDbContext(services);\n\n // \u83b7\u53d6\u4ed3\u50a8\n var respository = Db.GetRepository(services);\n\n // \u89e3\u6790\u5176\u4ed6\u670d\u52a1\n var otherService = services.GetService();\n var otherService2 = App.GetService(services);\n });\n}, "\u4efb\u52a1\u6807\u8bc6");\n')),(0,i.kt)("h3",{id:"26112-isparetimeworker-\u65b9\u5f0f"},"26.11.2 ",(0,i.kt)("inlineCode",{parentName:"h3"},"ISpareTimeWorker")," \u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},'[SpareTime(1000, "jobName1", StartNow = true, ExecuteType = SpareTimeExecuteTypes.Serial)]\npublic void DoSomething1(SpareTimer timer, long count)\n{\n Scoped.Create((_, scope) =>\n {\n var services = scope.ServiceProvider;\n\n // \u83b7\u53d6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\n var dbContext = Db.GetDbContext(services);\n\n // \u83b7\u53d6\u4ed3\u50a8\n var respository = Db.GetRepository(services);\n\n // \u89e3\u6790\u5176\u4ed6\u670d\u52a1\n var otherService = services.GetService();\n var otherService2 = App.GetService(services);\n });\n}\n')),(0,i.kt)("admonition",{title:"\u6570\u636e\u5e93\u64cd\u4f5c\u6ce8\u610f",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f5c\u7528\u57df\u4e2d\u5bf9",(0,i.kt)("strong",{parentName:"p"},"\u6570\u636e\u5e93\u6709\u4efb\u4f55\u53d8\u66f4\u64cd\u4f5c"),"\uff0c\u9700\u624b\u52a8\u8c03\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"SaveChanges")," \u6216\u5e26 ",(0,i.kt)("inlineCode",{parentName:"p"},"Now")," \u7ed3\u5c3e\u7684\u65b9\u6cd5\u3002\u4e5f\u53ef\u4ee5\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Scoped.CreateUow(handler)")," \u4ee3\u66ff\u3002")),(0,i.kt)("h2",{id:"2612-\u5728-backgroundservice-\u4e2d\u4f7f\u7528"},"26.12 \u5728 ",(0,i.kt)("inlineCode",{parentName:"h2"},"BackgroundService")," \u4e2d\u4f7f\u7528"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"BackgroundService")," \u662f ",(0,i.kt)("inlineCode",{parentName:"p"},".NET Core 3")," \u4e4b\u540e\u63d0\u4f9b\u7684\u8f7b\u91cf\u7ea7\u540e\u53f0\u4efb\u52a1\uff0c\u540c\u65f6\u53ef\u4ee5\u53d1\u5e03\u5230 ",(0,i.kt)("inlineCode",{parentName:"p"},"Windows")," \u670d\u52a1\u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"Linux")," \u5b88\u62a4\u8fdb\u7a0b\u4e2d\u3002"),(0,i.kt)("h3",{id:"26121-\u95f4\u9694\u6267\u884c\u65b9\u5f0f"},"26.12.1 \u95f4\u9694\u6267\u884c\u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,18,20,30}",showLineNumbers:!0,"":!0,"{7,18,20,30}":!0},'namespace WorkerService;\n\npublic class Worker : BackgroundService\n{\n private readonly ILogger _logger;\n\n private const int delay = 1000;\n\n public Worker(ILogger logger)\n {\n _logger = logger;\n }\n\n protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);\n\n await taskFactory.StartNew(async () =>\n {\n // \u4f60\u7684\u4e1a\u52a1\u4ee3\u7801\u5199\u5230\u8fd9\u91cc\u9762\n\n _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);\n\n await Task.CompletedTask;\n\n }, stoppingToken);\n\n await Task.Delay(delay, stoppingToken);\n }\n }\n}\n')),(0,i.kt)("h3",{id:"26122-cron-\u8868\u8fbe\u5f0f\u6267\u884c\u65b9\u5f0f"},"26.12.2 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Cron")," \u8868\u8fbe\u5f0f\u6267\u884c\u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {9,14,21,23,32}",showLineNumbers:!0,"":!0,"{9,14,21,23,32}":!0},'using Furion.TimeCrontab;\n\nnamespace WorkerService;\n\npublic class Worker : BackgroundService\n{\n private readonly ILogger _logger;\n\n private readonly Crontab _crontab;\n\n public Worker(ILogger logger)\n {\n _logger = logger;\n _crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);\n }\n\n protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);\n\n await taskFactory.StartNew(async () =>\n {\n // \u4f60\u7684\u4e1a\u52a1\u4ee3\u7801\u5199\u5230\u8fd9\u91cc\u9762\n\n _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);\n\n await Task.CompletedTask;\n }, stoppingToken);\n\n await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.UtcNow), stoppingToken);\n }\n }\n}\n')),(0,i.kt)("h2",{id:"2613-\u5b9a\u65f6\u4efb\u52a1\u76d1\u542c\u5668"},"26.13 \u5b9a\u65f6\u4efb\u52a1\u76d1\u542c\u5668"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion v2.18+")," \u7248\u672c\u4e4b\u540e\u65b0\u589e\u4e86\u5b9a\u65f6\u4efb\u52a1\u76d1\u542c\u5668 ",(0,i.kt)("inlineCode",{parentName:"p"},"ISpareTimeListener"),"\uff0c\u901a\u8fc7\u76d1\u542c\u5668\u53ef\u4ee5\u5b9e\u73b0\u6240\u6709\u5b9a\u65f6\u4efb\u52a1\u7684\u72b6\u6001\u3002\u5982\uff0c\u521b\u5efa\u4e00\u4e2a ",(0,i.kt)("inlineCode",{parentName:"p"},"\u5355\u4f8b")," \u7684\u76d1\u542c\u5668 ",(0,i.kt)("inlineCode",{parentName:"p"},"SpareTimeListener"),"\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8,15}",showLineNumbers:!0,"":!0,"{8,15}":!0},'using Furion.DependencyInjection;\nusing Furion.TaskScheduler;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Furion.Core\n{\n public class SpareTimeListener : ISpareTimeListener, ISingleton\n {\n /// \n /// \u76d1\u542c\u6240\u6709\u4efb\u52a1\n /// \n /// \n /// \n public Task OnListener(SpareTimerExecuter executer)\n {\n switch (executer.Status)\n {\n // \u6267\u884c\u5f00\u59cb\u901a\u77e5\n case 0:\n Console.WriteLine($"{executer.Timer.WorkerName} \u4efb\u52a1\u5f00\u59cb\u901a\u77e5");\n break;\n // \u4efb\u52a1\u6267\u884c\u4e4b\u524d\u901a\u77e5\n case 1:\n Console.WriteLine($"{executer.Timer.WorkerName} \u6267\u884c\u4e4b\u524d\u901a\u77e5");\n break;\n // \u6267\u884c\u6210\u529f\u901a\u77e5\n case 2:\n Console.WriteLine($"{executer.Timer.WorkerName} \u6267\u884c\u6210\u529f\u901a\u77e5");\n break;\n // \u4efb\u52a1\u6267\u884c\u5931\u8d25\u901a\u77e5\n case 3:\n Console.WriteLine($"{executer.Timer.WorkerName} \u6267\u884c\u5931\u8d25\u901a\u77e5");\n break;\n // \u4efb\u52a1\u6267\u884c\u505c\u6b62\u901a\u77e5\n case -1:\n Console.WriteLine($"{executer.Timer.WorkerName} \u6267\u884c\u505c\u6b62\u901a\u77e5");\n break;\n // \u4efb\u52a1\u6267\u884c\u53d6\u6d88\u901a\u77e5\n case -2:\n Console.WriteLine($"{executer.Timer.WorkerName} \u6267\u884c\u53d6\u6d88\u901a\u77e5");\n break;\n default:\n break;\n }\n\n return Task.CompletedTask;\n }\n }\n}\n')),(0,i.kt)("h3",{id:"26131-sparetimerexecuter-\u5c5e\u6027\u8bf4\u660e"},"26.13.1 ",(0,i.kt)("inlineCode",{parentName:"h3"},"SpareTimerExecuter")," \u5c5e\u6027\u8bf4\u660e"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Timer"),"\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"SpareTimer")," \u5b9a\u65f6\u5668\u5bf9\u8c61"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Status"),"\uff1a\u76d1\u542c\u72b6\u6001",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"0"),"\uff1a\u4efb\u52a1\u5f00\u59cb"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"1"),"\uff1a\u6267\u884c\u4e4b\u524d"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"2"),"\uff1a\u6267\u884c\u6210\u529f"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"3"),"\uff1a\u6267\u884c\u5931\u8d25"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"-1"),"\uff1a\u4efb\u52a1\u505c\u6b62"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"-2"),"\uff1a\u4efb\u52a1\u53d6\u6d88")))),(0,i.kt)("h2",{id:"2614-iis-\u90e8\u7f72\u56de\u6536\u8bbe\u7f6e"},"26.14 IIS \u90e8\u7f72\u56de\u6536\u8bbe\u7f6e"),(0,i.kt)("p",null,"\u5982\u679c\u5728\u9879\u76ee\u4e2d\u4f7f\u7528\u4e86\u5b9a\u65f6\u4efb\u52a1\u4e14\u90e8\u7f72\u5230 ",(0,i.kt)("inlineCode",{parentName:"p"},"IIS")," \u4e2d\uff0c\u90a3\u4e48\u9700\u8981\u8bbe\u7f6e ",(0,i.kt)("inlineCode",{parentName:"p"},"IIS")," \u7981\u6b62\u56de\u6536\uff0c",(0,i.kt)("a",{parentName:"p",href:"/docs/deploy-iis#3415-iis-%E5%9B%9E%E6%94%B6%E9%97%AE%E9%A2%98%E5%92%8C%E9%85%8D%E7%BD%AE"},"\u70b9\u51fb\u67e5\u770b ",(0,i.kt)("inlineCode",{parentName:"a"},"IIS")," \u56de\u6536\u95ee\u9898\u89e3\u51b3\u65b9\u6848")),(0,i.kt)("admonition",{title:"\u90e8\u7f72\u5efa\u8bae",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"\u5efa\u8bae\u5b9a\u65f6\u4efb\u52a1\u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u72ec\u7acb\u90e8\u7f72\u65b9\u5f0f\uff0c\u4e0d\u5e94\u4f9d\u6258 ",(0,i.kt)("inlineCode",{parentName:"p"},"Web")," \u9879\u76ee\u8fdb\u7a0b\u4e2d\u3002",(0,i.kt)("a",{parentName:"p",href:"/docs/process-service"},"\u67e5\u770b\u3010 Worker Service\u3011\u7ae0\u8282"))),(0,i.kt)("h2",{id:"2615-\u53cd\u9988\u4e0e\u5efa\u8bae"},"26.15 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/0482bd9e.a61120d5.js b/handbook/build/assets/js/0482bd9e.a61120d5.js new file mode 100644 index 00000000000..190b97b8367 --- /dev/null +++ b/handbook/build/assets/js/0482bd9e.a61120d5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[3533],{3905:function(e,t,n){n.d(t,{Zo:function(){return l},kt:function(){return d}});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),m=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},l=function(e){var t=m(e.components);return r.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),c=m(n),d=a,y=c["".concat(p,".").concat(d)]||c[d]||u[d]||i;return n?r.createElement(y,o(o({ref:t},l),{},{components:n})):r.createElement(y,o({ref:t},l))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=c;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s.mdxType="string"==typeof e?e:a,o[1]=s;for(var m=2;mIEntityChangedListener \u5b9a\u4e49",id:"9254-ientitychangedlistener-\u5b9a\u4e49",level:2},{value:"9.25.5 [SuppressChangedListener] \u8df3\u8fc7\u76d1\u542c",id:"9255-suppresschangedlistener-\u8df3\u8fc7\u76d1\u542c",level:2},{value:"9.25.6 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"9256-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],c={toc:u};function d(e){var t=e.components,n=(0,a.Z)(e,o);return(0,i.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"9251-\u5b9e\u4f53\u6570\u636e\u76d1\u542c\u5668"},"9.25.1 \u5b9e\u4f53\u6570\u636e\u76d1\u542c\u5668"),(0,i.kt)("p",null,"\u5728\u6700\u65b0\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"1.1.6+")," \u7248\u672c\u4e2d\uff0c\u65b0\u589e\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"IEntityChangedListener")," \u5b9e\u4f53\u6570\u636e\u76d1\u542c\u63a5\u53e3\uff0c\u53ef\u4ee5\u76d1\u542c ",(0,i.kt)("inlineCode",{parentName:"p"},"EFCore")," \u4efb\u4f55\u5b9e\u4f53\u8868 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u589e\u5220\u6539")," \u64cd\u4f5c\u3002"),(0,i.kt)("h2",{id:"9252-\u6709\u4f55\u4f5c\u7528"},"9.25.2 \u6709\u4f55\u4f5c\u7528"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u7c7b\u4f3c\u6570\u636e\u5e93 ",(0,i.kt)("inlineCode",{parentName:"li"},"\u89e6\u53d1\u5668")," \u529f\u80fd\uff0c\u53ef\u5b9e\u73b0 ",(0,i.kt)("inlineCode",{parentName:"li"},"\u589e\u5220\u6539")," \u76d1\u542c"),(0,i.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u5b9e\u73b0\u7279\u6b8a\u64cd\u4f5c\uff0c\u6bd4\u5982\u5237\u65b0\u7f13\u5b58\uff0c\u8bb0\u5f55\u65e5\u5fd7\u7b49")),(0,i.kt)("h2",{id:"9253-\u5982\u4f55\u4f7f\u7528"},"9.25.3 \u5982\u4f55\u4f7f\u7528"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u9ed8\u8ba4\u4e0d\u542f\u7528\u5b9e\u4f53\u6570\u636e\u76d1\u542c\u5668\uff0c\u5982\u60f3\u542f\u7528\uff0c\u53ea\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u6570\u636e\u5e93\u4e0a\u4e0b\u6587")," \u6784\u9020\u51fd\u6570\u4e2d\u542f\u7528\u5373\u53ef\uff1a"),(0,i.kt)("h3",{id:"92531-\u542f\u7528\u6570\u636e\u76d1\u542c"},"9.25.3.1 \u542f\u7528\u6570\u636e\u76d1\u542c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11}",showLineNumbers:!0,"":!0,"{11}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("Sqlite3ConnectionString")]\n public class DefaultDbContext : AppDbContext\n {\n public DefaultDbContext(DbContextOptions options) : base(options)\n {\n EnabledEntityChangedListener = true;\n }\n }\n}\n')),(0,i.kt)("h3",{id:"92532-\u76d1\u542c\u7279\u5b9a\u5b9e\u4f53\u6570\u636e"},"9.25.3.2 \u76d1\u542c\u7279\u5b9a\u5b9e\u4f53\u6570\u636e"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {9,30-41}",showLineNumbers:!0,"":!0,"{9,30-41}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.Extensions.Caching.Memory;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Furion.Core\n{\n public class Post : Entity, IEntityChangedListener\n {\n /// \n /// \u6784\u9020\u51fd\u6570\n /// \n public Post()\n {\n CreatedTime = DateTimeOffset.UtcNow;\n IsDeleted = false;\n }\n\n /// \n /// \u540d\u79f0\n /// \n public string Name { get; set; }\n\n /// \n /// Person \u96c6\u5408\n /// \n public ICollection Persons { get; set; }\n\n /// \n /// \u5b9e\u4f53\u66f4\u6539\u540e\u89e6\u53d1\n /// \n /// \u65b0\u6570\u636e\n /// \u65e7\u6570\u636e\n /// \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\n /// \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\n /// \u5b9e\u4f53\u72b6\u6001\n public void OnChanged(Post entity, Post oldEntity, DbContext dbContext, Type dbContextLocator, EntityState state)\n {\n // \u5237\u65b0\u7f13\u5b58\n App.GetService().Set("Key", "Value");\n }\n }\n}\n')),(0,i.kt)("h2",{id:"9254-ientitychangedlistener-\u5b9a\u4e49"},"9.25.4 ",(0,i.kt)("inlineCode",{parentName:"h2"},"IEntityChangedListener")," \u5b9a\u4e49"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {25}",showLineNumbers:!0,"":!0,"{25}":!0},'/// \n/// \u5b9e\u4f53\u6570\u636e\u6539\u53d8\u76d1\u542c\u4f9d\u8d56\u63a5\u53e3\n/// \n/// \npublic interface IEntityChangedListener\n where TEntity : class, IPrivateEntity, new()\n{\n /// \n /// \u76d1\u542c\u6570\u636e\u6539\u53d8\u4e4b\u524d\uff08\u4ec5\u652f\u6301EFCore\u64cd\u4f5c\uff09\n /// \n /// \n /// \n /// \n /// \n void OnChanging(TEntity entity, DbContext dbContext, Type dbContextLocator, EntityState state) { }\n\n /// \n /// \u76d1\u542c\u6570\u636e\u6539\u53d8\u4e4b\u540e\uff08\u4ec5\u652f\u6301EFCore\u64cd\u4f5c\uff09\n /// \n /// \u65b0\u503c\n /// \u65e7\u503c\n /// \n /// \n /// \n void OnChanged(TEntity newEntity, TEntity oldEntity, DbContext dbContext, Type dbContextLocator, EntityState state);\n\n /// \n /// \u76d1\u542c\u6570\u636e\u6539\u53d8\u5931\u8d25\uff08\u4ec5\u652f\u6301EFCore\u64cd\u4f5c\uff09\n /// \n /// \n /// \n /// \n /// \n void OnChangeFailed(TEntity entity, DbContext dbContext, Type dbContextLocator, EntityState state) { }\n}\n')),(0,i.kt)("h2",{id:"9255-suppresschangedlistener-\u8df3\u8fc7\u76d1\u542c"},"9.25.5 ",(0,i.kt)("inlineCode",{parentName:"h2"},"[SuppressChangedListener]")," \u8df3\u8fc7\u76d1\u542c"),(0,i.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4f1a\u5bf9\u6240\u6709\u65b0\u589e\u3001\u66f4\u65b0\u3001\u7f16\u8f91\u7684\u5b9e\u4f53\u8fdb\u884c\u76d1\u542c\uff0c\u6709\u4e9b\u65f6\u5019\u6211\u4eec\u65e0\u9700\u76d1\u542c\u7279\u5b9a\u5b9e\u4f53\uff0c\u53ea\u9700\u8981\u5728\u5b9e\u4f53\u4e0a\u8d34 ",(0,i.kt)("inlineCode",{parentName:"p"},"[SuppressChangedListener]")," \u7279\u6027\u5373\u53ef\u3002"),(0,i.kt)("h2",{id:"9256-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.25.6 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/04b9380e.f6af9ef0.js b/handbook/build/assets/js/04b9380e.f6af9ef0.js new file mode 100644 index 00000000000..ec4a54022fd --- /dev/null +++ b/handbook/build/assets/js/04b9380e.f6af9ef0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[3867],{3905:function(e,n,t){t.d(n,{Zo:function(){return c},kt:function(){return d}});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=r.createContext({}),u=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},c=function(e){var n=u(e.components);return r.createElement(l.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=u(t),d=a,v=m["".concat(l,".").concat(d)]||m[d]||p[d]||o;return t?r.createElement(v,i(i({ref:n},c),{},{components:t})):r.createElement(v,i({ref:n},c))}));function d(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,i=new Array(o);i[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var u=2;uRabbitMQ \u81ea\u5b9a\u4e49\u6307\u5357",id:"2241-rabbitmq-\u81ea\u5b9a\u4e49\u6307\u5357",level:3},{value:"22.4.2 Kafka \u81ea\u5b9a\u4e49\u6307\u5357",id:"2242-kafka-\u81ea\u5b9a\u4e49\u6307\u5357",level:3},{value:"22.5 \u81ea\u5b9a\u4e49\u4e8b\u4ef6\u53d1\u5e03\u8005",id:"225-\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u53d1\u5e03\u8005",level:2},{value:"22.6 \u6dfb\u52a0\u4e8b\u4ef6\u6267\u884c\u76d1\u89c6\u5668",id:"226-\u6dfb\u52a0\u4e8b\u4ef6\u6267\u884c\u76d1\u89c6\u5668",level:2},{value:"22.7 \u6dfb\u52a0\u4e8b\u4ef6\u6267\u884c\u5668",id:"227-\u6dfb\u52a0\u4e8b\u4ef6\u6267\u884c\u5668",level:2},{value:"22.8 \u4f7f\u7528\u6709\u4f5c\u7528\u57df\u7684\u670d\u52a1",id:"228-\u4f7f\u7528\u6709\u4f5c\u7528\u57df\u7684\u670d\u52a1",level:2},{value:"22.9 \u8ba2\u9605\u6267\u884c\u4efb\u52a1\u610f\u5916\u5f02\u5e38",id:"229-\u8ba2\u9605\u6267\u884c\u4efb\u52a1\u610f\u5916\u5f02\u5e38",level:2},{value:"22.10 \u4e8b\u4ef6\u603b\u7ebf\u5de5\u5382",id:"2210-\u4e8b\u4ef6\u603b\u7ebf\u5de5\u5382",level:2},{value:"22.11 MessageCenter \u9759\u6001\u7c7b",id:"2211-messagecenter-\u9759\u6001\u7c7b",level:2},{value:"22.12 \u914d\u7f6e\u91cd\u8bd5\u5931\u8d25\u56de\u8c03",id:"2212-\u914d\u7f6e\u91cd\u8bd5\u5931\u8d25\u56de\u8c03",level:2},{value:"22.13 EventBusOptionsBuilder \u914d\u7f6e",id:"2213-eventbusoptionsbuilder-\u914d\u7f6e",level:2},{value:"22.14 \u5173\u4e8e\u9ad8\u9891\u6d88\u606f\u5904\u7406\u65b9\u5f0f",id:"2214-\u5173\u4e8e\u9ad8\u9891\u6d88\u606f\u5904\u7406\u65b9\u5f0f",level:2},{value:"22.15 IIS \u90e8\u7f72\u56de\u6536\u8bbe\u7f6e",id:"2215-iis-\u90e8\u7f72\u56de\u6536\u8bbe\u7f6e",level:2},{value:"22.16 \u4f7f\u7528\u7b2c\u4e09\u65b9\u4e8b\u4ef6\u603b\u7ebf CAP \u793a\u4f8b",id:"2216-\u4f7f\u7528\u7b2c\u4e09\u65b9\u4e8b\u4ef6\u603b\u7ebf-cap-\u793a\u4f8b",level:2},{value:"22.17 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"2217-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:m};function v(e){var n=e.components,t=(0,a.Z)(e,s);return(0,o.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{title:"v2.20 \u4ee5\u4e0b\u7248\u672c\u8bf4\u660e",type:"warning"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"\u5728 ",(0,o.kt)("inlineCode",{parentName:"strong"},"Furion v2.20+")," \u7248\u672c\u91c7\u7528 ",(0,o.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Jaina"},"Jaina")," \u4e8b\u4ef6\u603b\u7ebf\u66ff\u6362\u539f\u6709\u7684 ",(0,o.kt)("inlineCode",{parentName:"strong"},"EventBus")),"\uff0c",(0,o.kt)("a",{parentName:"p",href:"/docs/event-bus-old"},"\u67e5\u770b\u65e7\u6587\u6863"))),(0,o.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion 2.20.0 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,o.kt)("h2",{id:"221-\u5173\u4e8e\u4e8b\u4ef6\u603b\u7ebf"},"22.1 \u5173\u4e8e\u4e8b\u4ef6\u603b\u7ebf"),(0,o.kt)("p",null,"\u4e8b\u4ef6\u603b\u7ebf\u662f\u5bf9\u53d1\u5e03-\u8ba2\u9605\u6a21\u5f0f\u7684\u4e00\u79cd\u5b9e\u73b0\u3002\u5b83\u662f\u4e00\u79cd\u96c6\u4e2d\u5f0f\u4e8b\u4ef6\u5904\u7406\u673a\u5236\uff0c\u5141\u8bb8\u4e0d\u540c\u7684\u7ec4\u4ef6\u4e4b\u95f4\u8fdb\u884c\u5f7c\u6b64\u901a\u4fe1\u800c\u53c8\u4e0d\u9700\u8981\u76f8\u4e92\u4f9d\u8d56\uff0c\u8fbe\u5230\u4e00\u79cd\u89e3\u8026\u7684\u76ee\u7684\u3002"),(0,o.kt)("img",{src:(0,i.Z)("img/ebs.png")}),(0,o.kt)("h2",{id:"222-\u5feb\u901f\u5165\u95e8"},"22.2 \u5feb\u901f\u5165\u95e8"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"\u5b9a\u4e49\u4e8b\u4ef6\u8ba2\u9605\u8005 ",(0,o.kt)("inlineCode",{parentName:"li"},"ToDoEventSubscriber"),"\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,10-11,19-21,28-30,32,36-38,44-48,54-56}",showLineNumbers:!0,"":!0,"{2,10-11,19-21,28-30,32,36-38,44-48,54-56}":!0},'// \u5b9e\u73b0 IEventSubscriber \u63a5\u53e3\npublic class ToDoEventSubscriber : IEventSubscriber\n{\n private readonly ILogger _logger;\n public ToDoEventSubscriber(ILogger logger)\n {\n _logger = logger;\n }\n\n [EventSubscribe("ToDo:Create")]\n public async Task CreateToDo(EventHandlerExecutingContext context)\n {\n var todo = context.Source;\n _logger.LogInformation("\u521b\u5efa\u4e00\u4e2a ToDo\uff1a{Name}", todo.Payload);\n await Task.CompletedTask;\n }\n\n // \u652f\u6301\u591a\u4e2a\n [EventSubscribe("ToDo:Create")]\n [EventSubscribe("ToDo:Update")]\n public async Task CreateOrUpdateToDo(EventHandlerExecutingContext context)\n {\n var todo = context.Source;\n _logger.LogInformation("\u521b\u5efa\u6216\u66f4\u65b0\u4e00\u4e2a ToDo\uff1a{Name}", todo.Payload);\n await Task.CompletedTask;\n }\n\n // \u652f\u6301\u679a\u4e3e\u7c7b\u578b\uff0cv3.4.3+ \u7248\u672c\u652f\u6301\n [EventSubscribe(YourEnum.Some)]\n public async Task EnumHandler(EventHandlerExecutingContext context)\n {\n var eventEnum = context.Source.EventId.ParseToEnum(); // \u5c06\u4e8b\u4ef6 Id \u8f6c\u6362\u6210\u679a\u4e3e\u5bf9\u8c61\n await Task.CompletedTask;\n }\n\n // \u652f\u6301\u6b63\u5219\u8868\u8fbe\u5f0f\u5339\u914d\uff0c4.2.10+ \u7248\u672c\u652f\u6301\n [EventSubscribe("(^1[3456789][0-9]{9}$)|((^[0-9]{3,4}\\\\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\\\\([0-9]{3,4}\\\\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$))", FuzzyMatch = true)]\n public async Task RegexHandler(EventHandlerExecutingContext context)\n {\n var eventId = context.Source.EventId;\n await Task.CompletedTask;\n }\n\n // \u652f\u6301\u591a\u79cd\u5f02\u5e38\u91cd\u8bd5\u914d\u7f6e\uff0cFurion 4.2.10+ \u7248\u672c\u652f\u6301\n [EventSubscribe("test:error", NumRetries = 3)]\n [EventSubscribe("test:error", NumRetries = 3, RetryTimeout = 1000)] // \u91cd\u8bd5\u95f4\u9694\u65f6\u95f4\n [EventSubscribe("test:error", NumRetries = 3, ExceptionTypes = new[] { typeof(ArgumentException) })] // \u7279\u5b9a\u7c7b\u578b\u5f02\u5e38\u624d\u91cd\u8bd5\n public async Task ExceptionHandler(EventHandlerExecutingContext context)\n {\n var eventId = context.Source.EventId;\n await Task.CompletedTask;\n }\n\n // \u652f\u6301\u7b80\u5355 Order \u7f16\u6392\uff0cFurion 4.8.0+ \u7248\u672c\u652f\u6301\n [EventSubscribe("test:order", Order = 1)]\n public async Task ExceptionHandler(EventHandlerExecutingContext context)\n {\n var eventId = context.Source.EventId;\n await Task.CompletedTask;\n }\n}\n')),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"\u521b\u5efa\u63a7\u5236\u5668 ",(0,o.kt)("inlineCode",{parentName:"li"},"ToDoController"),"\uff0c\u4f9d\u8d56\u6ce8\u5165 ",(0,o.kt)("inlineCode",{parentName:"li"},"IEventPublisher")," \u670d\u52a1\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,13,16-21}",showLineNumbers:!0,"":!0,"{4,13,16-21}":!0},'public class ToDoController : ControllerBase\n{\n // \u4f9d\u8d56\u6ce8\u5165\u4e8b\u4ef6\u53d1\u5e03\u8005 IEventPublisher\n private readonly IEventPublisher _eventPublisher;\n public ToDoController(IEventPublisher eventPublisher)\n {\n _eventPublisher = eventPublisher;\n }\n\n // \u53d1\u5e03 ToDo:Create \u6d88\u606f\n public async Task CreateDoTo(string name)\n {\n await _eventPublisher.PublishAsync(new ChannelEventSource("ToDo:Create", name));\n }\n\n // v3.4.3+ \u7248\u672c\u652f\u6301\u53d1\u9001\u6d88\u606f\u7b80\u5316\n public async Task CreateDoTo(string name)\n {\n await _eventPublisher.PublishAsync("ToDo:Create", name);\n // \u4e5f\u652f\u6301\u679a\u4e3e\n await _eventPublisher.PublishAsync(YourEnum.Some);\n }\n}\n')),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"\u5728 ",(0,o.kt)("inlineCode",{parentName:"li"},"Startup.cs")," \u6ce8\u518c ",(0,o.kt)("inlineCode",{parentName:"li"},"EventBus")," \u670d\u52a1\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"":!0,"{2,5}":!0},"// \u6ce8\u518c EventBus \u670d\u52a1\nservices.AddEventBus(builder =>\n{\n // \u6ce8\u518c ToDo \u4e8b\u4ef6\u8ba2\u9605\u8005\n builder.AddSubscriber();\n\n // \u901a\u8fc7\u7c7b\u578b\u6ce8\u518c\uff0cFurion 4.2.1+ \u7248\u672c\n builder.AddSubscriber(typeof(ToDoEventSubscriber));\n\n // \u6279\u91cf\u6ce8\u518c\u4e8b\u4ef6\u8ba2\u9605\u8005\n builder.AddSubscribers(ass1, ass2, ....);\n});\n")),(0,o.kt)("admonition",{title:"\u61d2\u4eba\u63d0\u9192",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e2d\u53ef\u4ee5\u4e0d\u7528\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"builder.AddSubscriber()")," \u65b9\u5f0f\u4e00\u4e00\u6ce8\u518c\uff0c\u53ea\u9700\u8981\u5b9e\u73b0 ",(0,o.kt)("inlineCode",{parentName:"p"},"ISingleton")," \u63a5\u53e3\u5373\u53ef\uff0c\u5982\uff1a"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},"public class ToDoEventSubscriber : IEventSubscriber, ISingleton\n{\n}\n")),(0,o.kt)("p",{parentName:"admonition"},"\u8fd9\u6837\u5c31\u65e0\u9700\u5199 ",(0,o.kt)("del",{parentName:"p"},(0,o.kt)("inlineCode",{parentName:"del"},"builder.AddSubscriber();"))," \u4ee3\u7801\u4e86\uff0c\u53ea\u9700\u4fdd\u7559 ",(0,o.kt)("inlineCode",{parentName:"p"},"services.AddEventBus()")," \u670d\u52a1\u5373\u53ef\u3002")),(0,o.kt)("ol",{start:4},(0,o.kt)("li",{parentName:"ol"},"\u8fd0\u884c\u9879\u76ee\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"info: Jaina.Samples.ToDoEventSubscriber[0]\n \u521b\u5efa\u4e00\u4e2a ToDo\uff1aJaina\n")),(0,o.kt)("h2",{id:"223-\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u6e90"},"22.3 \u81ea\u5b9a\u4e49\u4e8b\u4ef6\u6e90"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"IEventSource")," \u4f5c\u4e3a\u6d88\u606f\u8f7d\u4f53\uff0c\u4efb\u4f55\u5b9e\u73b0\u8be5\u63a5\u53e3\u7684\u7c7b\u90fd\u53ef\u4ee5\u5145\u5f53\u6d88\u606f\u8f7d\u4f53\u3002"),(0,o.kt)("p",null,"\u5982\u9700\u81ea\u5b9a\u4e49\uff0c\u53ea\u9700\u5b9e\u73b0 ",(0,o.kt)("inlineCode",{parentName:"p"},"IEventSource")," \u63a5\u53e3\u5373\u53ef\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,14,19,24,29,35-37}",showLineNumbers:!0,"":!0,"{1,3,14,19,24,29,35-37}":!0},"public class ToDoEventSource : IEventSource\n{\n public ToDoEventSource()\n {\n }\n\n public ToDoEventSource(string eventId, string todoName)\n {\n EventId = eventId;\n ToDoName = todoName;\n }\n\n // \u81ea\u5b9a\u4e49\u5c5e\u6027\n public string ToDoName { get; set; }\n\n /// \n /// \u4e8b\u4ef6 Id\n /// \n public string EventId { get; set; }\n\n /// \n /// \u4e8b\u4ef6\u627f\u8f7d\uff08\u643a\u5e26\uff09\u6570\u636e\n /// \n public object Payload { get; set; }\n\n /// \n /// \u4e8b\u4ef6\u521b\u5efa\u65f6\u95f4\n /// \n public DateTime CreatedTime { get; set; } = DateTime.UtcNow;\n\n /// \n /// \u53d6\u6d88\u4efb\u52a1 Token\n /// \n /// \u7528\u4e8e\u53d6\u6d88\u672c\u6b21\u6d88\u606f\u5904\u7406\n [Newtonsoft.Json.JsonIgnore]\n [System.Text.Json.Serialization.JsonIgnore]\n public CancellationToken CancellationToken { get; set; }\n}\n")),(0,o.kt)("p",null,"\u4f7f\u7528\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await _eventPublisher.PublishAsync(new ToDoEventSource ("ToDo:Create", "\u6211\u7684 ToDo Name"));\n')),(0,o.kt)("h2",{id:"224-\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u6e90\u5b58\u50a8\u5668"},"22.4 \u81ea\u5b9a\u4e49\u4e8b\u4ef6\u6e90\u5b58\u50a8\u5668"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Fruion")," \u9ed8\u8ba4\u91c7\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"Channel")," \u4f5c\u4e3a\u4e8b\u4ef6\u6e90 ",(0,o.kt)("inlineCode",{parentName:"p"},"IEventSource")," \u5b58\u50a8\u5668\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u4f7f\u7528\u4efb\u4f55\u6d88\u606f\u961f\u5217\u7ec4\u4ef6\u8fdb\u884c\u66ff\u6362\uff0c\u5982 ",(0,o.kt)("inlineCode",{parentName:"p"},"Kafka\u3001RabbitMQ\u3001ActiveMQ")," \u7b49\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u90e8\u5206\u6570\u636e\u5e93 ",(0,o.kt)("inlineCode",{parentName:"p"},"Redis\u3001SQL Server\u3001MySql")," \u5b9e\u73b0\u3002"),(0,o.kt)("p",null,"\u5982\u9700\u81ea\u5b9a\u4e49\uff0c\u53ea\u9700\u5b9e\u73b0 ",(0,o.kt)("inlineCode",{parentName:"p"},"IEventSourceStorer")," \u63a5\u53e3\u5373\u53ef\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,11,17}",showLineNumbers:!0,"":!0,"{1,11,17}":!0},"public class RedisEventSourceStorer : IEventSourceStorer\n{\n private readonly IRedisClient _redisClient;\n\n public RedisEventSourceStorer(IRedisClient redisClient)\n {\n _redisClient = redisClient;\n }\n\n // \u5f80 Redis \u4e2d\u5199\u5165\u4e00\u6761\n public async ValueTask WriteAsync(IEventSource eventSource, CancellationToken cancellationToken)\n {\n await _redisClient.WriteAsync(...., cancellationToken);\n }\n\n // \u4ece Redis \u4e2d\u8bfb\u53d6\u4e00\u6761\n public async ValueTask ReadAsync(CancellationToken cancellationToken)\n {\n return await _redisClient.ReadAsync(...., cancellationToken);\n }\n}\n")),(0,o.kt)("p",null,"\u6700\u540e\uff0c\u5728\u6ce8\u518c ",(0,o.kt)("inlineCode",{parentName:"p"},"EventBus")," \u670d\u52a1\u4e2d\u66ff\u6362\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"p"},"IEventSourceStorer"),"\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4-8,11,13}",showLineNumbers:!0,"":!0,"{4-8,11,13}":!0},"services.AddEventBus(builder =>\n{\n // \u66ff\u6362\u4e8b\u4ef6\u6e90\u5b58\u50a8\u5668\n builder.ReplaceStorer(serviceProvider =>\n {\n var redisClient = serviceProvider.GetService();\n return new RedisEventSourceStorer(redisClient);\n });\n\n // Furion 4.7.6 \u7248\u672c\u65b0\u589e ReplaceStorerOrFallback \uff0c\u53ef\u5728\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u6e90\u5b58\u50a8\u5668\u521d\u59cb\u5931\u8d25\u65f6\u56de\u9000\u5230\u9ed8\u8ba4\u503c\n builder.ReplaceStorerOrFallback(() => new YourEventSourceStorer());\n // \u652f\u6301 IServiceProvider \u53c2\u6570\n builder.ReplaceStorerOrFallback(serviceProvider =>\n {\n return new YourEventSourceStorer();\n });\n\n});\n")),(0,o.kt)("h3",{id:"2241-rabbitmq-\u81ea\u5b9a\u4e49\u6307\u5357"},"22.4.1 ",(0,o.kt)("inlineCode",{parentName:"h3"},"RabbitMQ")," \u81ea\u5b9a\u4e49\u6307\u5357"),(0,o.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion 4.3.4 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,o.kt)("p",null,"\u7531\u4e8e\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"RabbitMQ")," \u4f5c\u4e3a\u4e8b\u4ef6\u603b\u7ebf\u5b58\u50a8\u5668\u7684\u6bd4\u8f83\u591a\uff0c\u6240\u4ee5\u8fd9\u91cc\u63d0\u4f9b\u4e86\u5b8c\u6574\u7684\u4f7f\u7528\u4f8b\u5b50\u3002"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"1. \u5b89\u88c5 ",(0,o.kt)("inlineCode",{parentName:"strong"},"RabbitMQ.Client")," \u62d3\u5c55\u5305")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"Install-Package RabbitMQ.Client -Version 6.4.0\n")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"2. \u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"strong"},"RabbitMQEventSourceStorer")," \u81ea\u5b9a\u4e49\u5b58\u50a8\u5668")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13,41,60,66-78,99-112,122-124,130-134}",showLineNumbers:!0,"{13,41,60,66-78,99-112,122-124,130-134}":!0},'using Furion.EventBus;\nusing RabbitMQ.Client;\nusing RabbitMQ.Client.Events;\nusing System;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading;\nusing System.Threading.Channels;\nusing System.Threading.Tasks;\n\nnamespace Furion.Core;\n\npublic sealed class RabbitMQEventSourceStorer : IEventSourceStorer, IDisposable\n{\n /// \n /// \u5185\u5b58\u901a\u9053\u4e8b\u4ef6\u6e90\u5b58\u50a8\u5668\n /// \n private readonly Channel _channel;\n\n /// \n /// \u901a\u9053\u5bf9\u8c61\n /// \n private readonly IModel _model;\n\n /// \n /// \u8fde\u63a5\u5bf9\u8c61\n /// \n private readonly IConnection _connection;\n\n /// \n /// \u8def\u7531\u952e\n /// \n private readonly string _routeKey;\n\n /// \n /// \u6784\u9020\u51fd\u6570\n /// \n /// \u8fde\u63a5\u5de5\u5382\n /// \u8def\u7531\u952e\n /// \u5b58\u50a8\u5668\u6700\u591a\u80fd\u591f\u5904\u7406\u591a\u5c11\u6d88\u606f\uff0c\u8d85\u8fc7\u8be5\u5bb9\u91cf\u8fdb\u5165\u7b49\u5f85\u5199\u5165\n public RabbitMQEventSourceStorer(ConnectionFactory factory, string routeKey, int capacity)\n {\n // \u914d\u7f6e\u901a\u9053\uff0c\u8bbe\u7f6e\u8d85\u51fa\u9ed8\u8ba4\u5bb9\u91cf\u540e\u8fdb\u5165\u7b49\u5f85\n var boundedChannelOptions = new BoundedChannelOptions(capacity)\n {\n FullMode = BoundedChannelFullMode.Wait\n };\n\n // \u521b\u5efa\u6709\u9650\u5bb9\u91cf\u901a\u9053\n _channel = Channel.CreateBounded(boundedChannelOptions);\n\n // \u521b\u5efa\u8fde\u63a5\n _connection = factory.CreateConnection();\n _routeKey = routeKey;\n\n // \u521b\u5efa\u901a\u9053\n _model = _connection.CreateModel();\n\n // \u58f0\u660e\u8def\u7531\u961f\u5217\n _model.QueueDeclare(routeKey, false, false, false, null);\n\n // \u521b\u5efa\u6d88\u606f\u8ba2\u9605\u8005\n var consumer = new EventingBasicConsumer(_model);\n\n // \u8ba2\u9605\u6d88\u606f\u5e76\u5199\u5165\u5185\u5b58 Channel\n consumer.Received += (ch, ea) =>\n {\n // \u8bfb\u53d6\u539f\u59cb\u6d88\u606f\n var stringEventSource = Encoding.UTF8.GetString(ea.Body.ToArray());\n\n // \u8f6c\u6362\u4e3a IEventSource\uff0c\u8fd9\u91cc\u53ef\u4ee5\u9009\u62e9\u81ea\u5df1\u559c\u6b22\u7684\u5e8f\u5217\u5316\u5de5\u5177\uff0c\u5982\u679c\u81ea\u5b9a\u4e49\u4e86 EventSource\uff0c\u6ce8\u610f\u5c5e\u6027\u662f\u53ef\u8bfb\u53ef\u5199\n var eventSource = JsonSerializer.Deserialize(stringEventSource);\n\n // \u5199\u5165\u5185\u5b58\u7ba1\u9053\u5b58\u50a8\u5668\n _channel.Writer.WriteAsync(eventSource);\n\n // \u786e\u8ba4\u8be5\u6d88\u606f\u5df2\u88ab\u6d88\u8d39\n _model.BasicAck(ea.DeliveryTag, false);\n };\n\n // \u542f\u52a8\u6d88\u8d39\u8005 \u8bbe\u7f6e\u4e3a\u624b\u52a8\u5e94\u7b54\u6d88\u606f\n _model.BasicConsume(routeKey, false, consumer);\n }\n\n /// \n /// \u5c06\u4e8b\u4ef6\u6e90\u5199\u5165\u5b58\u50a8\u5668\n /// \n /// \u4e8b\u4ef6\u6e90\u5bf9\u8c61\n /// \u53d6\u6d88\u4efb\u52a1 Token\n /// \n public async ValueTask WriteAsync(IEventSource eventSource, CancellationToken cancellationToken)\n {\n // \u7a7a\u68c0\u67e5\n if (eventSource == default)\n {\n throw new ArgumentNullException(nameof(eventSource));\n }\n\n // \u8fd9\u91cc\u5224\u65ad\u662f\u5426\u662f ChannelEventSource \u6216\u8005 \u81ea\u5b9a\u4e49\u7684 EventSource\n if (eventSource is ChannelEventSource source)\n {\n // \u5e8f\u5217\u5316\uff0c\u8fd9\u91cc\u53ef\u4ee5\u9009\u62e9\u81ea\u5df1\u559c\u6b22\u7684\u5e8f\u5217\u5316\u5de5\u5177\n var data = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(source));\n\n // \u53d1\u5e03\n _model.BasicPublish("", _routeKey, null, data);\n }\n else\n {\n // \u8fd9\u91cc\u5904\u7406\u52a8\u6001\u8ba2\u9605\u95ee\u9898\n await _channel.Writer.WriteAsync(eventSource, cancellationToken);\n }\n }\n\n /// \n /// \u4ece\u5b58\u50a8\u5668\u4e2d\u8bfb\u53d6\u4e00\u6761\u4e8b\u4ef6\u6e90\n /// \n /// \u53d6\u6d88\u4efb\u52a1 Token\n /// \u4e8b\u4ef6\u6e90\u5bf9\u8c61\n public async ValueTask ReadAsync(CancellationToken cancellationToken)\n {\n // \u8bfb\u53d6\u4e00\u6761\u4e8b\u4ef6\u6e90\n var eventSource = await _channel.Reader.ReadAsync(cancellationToken);\n return eventSource;\n }\n\n /// \n /// \u91ca\u653e\u975e\u6258\u7ba1\u8d44\u6e90\n /// \n public void Dispose()\n {\n _model.Dispose();\n _connection.Dispose();\n }\n}\n')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"3. \u66ff\u6362\u9ed8\u8ba4\u4e8b\u4ef6\u5b58\u50a8\u5668")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4-8,11,14-16}",showLineNumbers:!0,"{1,4-8,11,14-16}":!0},'services.AddEventBus(options =>\n{\n // \u521b\u5efa\u8fde\u63a5\u5de5\u5382\n var factory = new ConnectionFactory\n {\n UserName = "admin",\n Password = "q1w2e3",\n };\n\n // \u521b\u5efa\u9ed8\u8ba4\u5185\u5b58\u901a\u9053\u4e8b\u4ef6\u6e90\u5bf9\u8c61\uff0c\u53ef\u81ea\u5b9a\u4e49\u961f\u5217\u8def\u7531key\uff0c\u6bd4\u5982\u8fd9\u91cc\u662f eventbus\n var rbmqEventSourceStorer = new RabbitMQEventSourceStorer(factory, "eventbus", 3000);\n\n // \u66ff\u6362\u9ed8\u8ba4\u4e8b\u4ef6\u603b\u7ebf\u5b58\u50a8\u5668\n options.ReplaceStorer(serviceProvider =>\n {\n return rbmqEventSourceStorer;\n });\n});\n')),(0,o.kt)("img",{src:(0,i.Z)("img/evs1.png")}),(0,o.kt)("h3",{id:"2242-kafka-\u81ea\u5b9a\u4e49\u6307\u5357"},"22.4.2 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Kafka")," \u81ea\u5b9a\u4e49\u6307\u5357"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"1. \u5b89\u88c5 ",(0,o.kt)("inlineCode",{parentName:"strong"},"Confluent.Kafka")," \u62d3\u5c55\u5305")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"Install-Package Confluent.Kafka -Version 1.9.3\n")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"2. \u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"strong"},"EventConsumer")," \u8ba2\u9605\u7c7b")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {10}",showLineNumbers:!0,"{10}":!0},'using Confluent.Kafka;\n\nnamespace Furion.Core;\n\n/// \n/// Kafka \u6d88\u606f\u6269\u5c55\n/// \n/// \n/// \npublic class EventConsumer : IDisposable\n{\n private Task _consumerTask;\n private CancellationTokenSource _consumerCts;\n\n /// \n /// \u6d88\u8d39\u8005\n /// \n public IConsumer Consumer { get; }\n\n /// \n /// ConsumerBuilder\n /// \n public ConsumerBuilder Builder { get; set; }\n\n /// \n /// \u6d88\u606f\u56de\u8c03\n /// \n public event EventHandler> Received;\n\n /// \n /// \u5f02\u5e38\u56de\u8c03\n /// \n public event EventHandler OnConsumeException;\n\n /// \n /// \u6784\u9020\u51fd\u6570\n /// \n /// \n public EventConsumer(IEnumerable> config)\n {\n Builder = new ConsumerBuilder(config);\n Consumer = Builder.Build();\n }\n\n /// \n /// \u542f\u52a8\n /// \n /// \n public void Start()\n {\n if (Consumer.Subscription?.Any() != true)\n {\n throw new InvalidOperationException("Subscribe first using the Consumer.Subscribe() function");\n }\n if (_consumerTask != null)\n {\n return;\n }\n _consumerCts = new CancellationTokenSource();\n var ct = _consumerCts.Token;\n _consumerTask = Task.Factory.StartNew(() =>\n {\n while (!ct.IsCancellationRequested)\n {\n try\n {\n var cr = Consumer.Consume(TimeSpan.FromSeconds(1));\n if (cr == null) continue;\n Received?.Invoke(this, cr);\n }\n catch (ConsumeException e)\n {\n OnConsumeException?.Invoke(this, e);\n }\n }\n }, ct, TaskCreationOptions.LongRunning, System.Threading.Tasks.TaskScheduler.Default);\n }\n\n /// \n /// \u505c\u6b62\n /// \n /// \n public async Task Stop()\n {\n if (_consumerCts == null || _consumerTask == null) return;\n _consumerCts.Cancel();\n try\n {\n await _consumerTask;\n }\n finally\n {\n _consumerTask = null;\n _consumerCts = null;\n }\n }\n\n /// \n /// \u91ca\u653e\n /// \n public void Dispose()\n {\n Dispose(true);\n GC.SuppressFinalize(this);\n }\n\n /// \n /// \u91ca\u653e\n /// \n /// \n protected virtual void Dispose(bool disposing)\n {\n if (disposing)\n {\n if (_consumerTask != null)\n {\n Stop().Wait();\n }\n Consumer?.Dispose();\n }\n }\n}\n')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"3. \u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"strong"},"KafkaEventSourceStore")," \u81ea\u5b9a\u4e49\u5b58\u50a8\u5668")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11,55-63,84-99,109-110,119-120}",showLineNumbers:!0,"{11,55-63,84-99,109-110,119-120}":!0},'using Confluent.Kafka;\nusing Furion.EventBus;\nusing Newtonsoft.Json;\nusing System.Threading.Channels;\n\nnamespace Furion.Core;\n\n/// \n/// Kafka \u5b58\u50a8\u6e90\n/// \npublic class KafkaEventSourceStore : IEventSourceStorer, IDisposable\n{\n /// \n /// \u5185\u5b58\u901a\u9053\u4e8b\u4ef6\u6e90\u5b58\u50a8\u5668\n /// \n private readonly Channel _channel;\n /// \n /// \u4e3b\u9898\n /// \n private readonly string _topic;\n /// \n /// \u6d88\u8d39\u8005\n /// \n private readonly EventConsumer _eventConsumer;\n /// \n /// \u751f\u4ea7\u8005\n /// \n private readonly IProducer _producer;\n\n /// \n /// \u6784\u9020\u51fd\u6570\n /// \n /// \u6d88\u8d39\u8005\u914d\u7f6e\n /// \u751f\u4ea7\u8005\u914d\u7f6e\n /// \u4e3b\u9898\n /// \u5b58\u50a8\u5668\u6700\u591a\u80fd\u591f\u5904\u7406\u591a\u5c11\u6d88\u606f\uff0c\u8d85\u8fc7\u8be5\u5bb9\u91cf\u8fdb\u5165\u7b49\u5f85\u5199\u5165\n public KafkaEventSourceStore(ConsumerConfig consumerConf, ProducerConfig producerConf, string topic, int capacity)\n {\n // \u914d\u7f6e\u901a\u9053\uff0c\u8bbe\u7f6e\u8d85\u51fa\u9ed8\u8ba4\u5bb9\u91cf\u540e\u8fdb\u5165\u7b49\u5f85\n var boundedChannelOptions = new BoundedChannelOptions(capacity)\n {\n FullMode = BoundedChannelFullMode.Wait\n };\n\n // \u521b\u5efa\u6709\u9650\u5bb9\u91cf\u901a\u9053\n _channel = Channel.CreateBounded(boundedChannelOptions);\n\n // \u4e3b\u9898\n _topic = topic;\n\n // \u521b\u5efa\u6d88\u606f\u8ba2\u9605\u8005\n _eventConsumer = new EventConsumer(consumerConf);\n _eventConsumer.Consumer.Subscribe(new[] { topic });\n\n // \u8ba2\u9605\u6d88\u606f\u5199\u5165 Channel\n _eventConsumer.Received += (send, cr) =>\n {\n // \u53cd\u5e8f\u5217\u5316\u6d88\u606f\n var eventSource = JsonConvert.DeserializeObject(cr.Message.Value);\n\n // \u5199\u5165\u5185\u5b58\u7ba1\u9053\u5b58\u50a8\u5668\n _channel.Writer.WriteAsync(eventSource);\n };\n\n // \u542f\u52a8\u6d88\u8d39\u8005\n _eventConsumer.Start();\n\n // \u521b\u5efa\u751f\u4ea7\u8005\n _producer = new ProducerBuilder(producerConf).Build();\n }\n\n /// \n /// \u5c06\u4e8b\u4ef6\u6e90\u5199\u5165\u5b58\u50a8\u5668\n /// \n /// \u4e8b\u4ef6\u6e90\u5bf9\u8c61\n /// \u53d6\u6d88\u4efb\u52a1 Token\n /// \n public async ValueTask WriteAsync(IEventSource eventSource, CancellationToken cancellationToken)\n {\n if (eventSource == default)\n {\n throw new ArgumentNullException(nameof(eventSource));\n }\n // \u8fd9\u91cc\u5224\u65ad\u662f\u5426\u662f ChannelEventSource \u6216\u8005 \u81ea\u5b9a\u4e49\u7684 EventSource\n if (eventSource is ChannelEventSource source)\n {\n // \u5e8f\u5217\u5316\n var data = JsonConvert.SerializeObject(source);\n // \u5f02\u6b65\u53d1\u5e03\n await _producer.ProduceAsync(_topic, new Message\n {\n Value = data\n }, cancellationToken);\n }\n else\n {\n // \u8fd9\u91cc\u5904\u7406\u52a8\u6001\u8ba2\u9605\u95ee\u9898\n await _channel.Writer.WriteAsync(eventSource, cancellationToken);\n }\n }\n\n /// \n /// \u4ece\u5b58\u50a8\u5668\u4e2d\u8bfb\u53d6\u4e00\u6761\u4e8b\u4ef6\u6e90\n /// \n /// \u53d6\u6d88\u4efb\u52a1 Token\n /// \u4e8b\u4ef6\u6e90\u5bf9\u8c61\n public async ValueTask ReadAsync(CancellationToken cancellationToken)\n {\n // \u8bfb\u53d6\u4e00\u6761\u4e8b\u4ef6\u6e90\n var eventSource = await _channel.Reader.ReadAsync(cancellationToken);\n return eventSource;\n }\n\n /// \n /// \u91ca\u653e\u975e\u6258\u7ba1\u8d44\u6e90\n /// \n public async void Dispose()\n {\n await _eventConsumer.Stop();\n GC.SuppressFinalize(this);\n }\n}\n')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"4. \u66ff\u6362\u9ed8\u8ba4\u4e8b\u4ef6\u5b58\u50a8\u5668")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3-8,10-15,18,21-24}",showLineNumbers:!0,"{1,3-8,10-15,18,21-24}":!0},'services.AddEventBus(options =>\n{\n var consumerConf = new ConsumerConfig\n {\n BootstrapServers = "xxx.xxx.xxx.xxx:9092",\n GroupId = "Consumer",\n AutoOffsetReset = AutoOffsetReset.Earliest // \u4ece\u6700\u65e9\u7684\u5f00\u59cb\u6d88\u8d39\u8d77\n };\n\n var producerConf = new ProducerConfig\n {\n BootstrapServers = "xxx.xxx.xxx.xxx:9092",\n BatchSize = 16384, // \u4fee\u6539\u6279\u6b21\u5927\u5c0f\u4e3a16K\n LingerMs = 20 // \u4fee\u6539\u7b49\u5f85\u65f6\u95f4\u4e3a20ms\n };\n\n // \u521b\u5efa\u9ed8\u8ba4\u5185\u5b58\u901a\u9053\u4e8b\u4ef6\u6e90\u5bf9\u8c61\uff0c\u53ef\u81ea\u5b9a\u4e49\u961f\u5217\u8def\u7531key\uff0c\u6bd4\u5982\u8fd9\u91cc\u662f eventbus\n var kafkaEventSourceStorer = new KafkaEventSourceStore(consumerConf, producerConf, "testTopic", 30000);\n\n // \u66ff\u6362\u9ed8\u8ba4\u4e8b\u4ef6\u603b\u7ebf\u5b58\u50a8\u5668\n options.ReplaceStorer(serviceProvider =>\n {\n return kafkaEventSourceStorer;\n });\n});\n')),(0,o.kt)("h2",{id:"225-\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u53d1\u5e03\u8005"},"22.5 \u81ea\u5b9a\u4e49\u4e8b\u4ef6\u53d1\u5e03\u8005"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u9ed8\u8ba4\u5185\u7f6e\u57fa\u4e8e ",(0,o.kt)("inlineCode",{parentName:"p"},"Channel")," \u7684\u4e8b\u4ef6\u53d1\u5e03\u8005 ",(0,o.kt)("inlineCode",{parentName:"p"},"ChannelEventPublisher"),"\u3002"),(0,o.kt)("p",null,"\u5982\u9700\u81ea\u5b9a\u4e49\uff0c\u53ea\u9700\u5b9e\u73b0 ",(0,o.kt)("inlineCode",{parentName:"p"},"IEventPublisher")," \u63a5\u53e3\u5373\u53ef\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,10}",showLineNumbers:!0,"":!0,"{1,10}":!0},"public class ToDoEventPublisher : IEventPublisher\n{\n private readonly IEventSourceStorer _eventSourceStorer;\n\n public ToDoEventPublisher(IEventSourceStorer eventSourceStorer)\n {\n _eventSourceStorer = eventSourceStorer;\n }\n\n public async Task PublishAsync(IEventSource eventSource)\n {\n await _eventSourceStorer.WriteAsync(eventSource, eventSource.CancellationToken);\n }\n}\n")),(0,o.kt)("p",null,"\u6700\u540e\uff0c\u5728\u6ce8\u518c ",(0,o.kt)("inlineCode",{parentName:"p"},"EventBus")," \u670d\u52a1\u4e2d\u66ff\u6362\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"p"},"IEventPublisher"),"\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},"services.AddEventBus(builder =>\n{\n // \u66ff\u6362\u4e8b\u4ef6\u6e90\u5b58\u50a8\u5668\n builder.ReplacePublisher();\n});\n")),(0,o.kt)("h2",{id:"226-\u6dfb\u52a0\u4e8b\u4ef6\u6267\u884c\u76d1\u89c6\u5668"},"22.6 \u6dfb\u52a0\u4e8b\u4ef6\u6267\u884c\u76d1\u89c6\u5668"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"IEventHandlerMonitor")," \u76d1\u89c6\u5668\u63a5\u53e3\uff0c\u5b9e\u73b0\u8be5\u63a5\u53e3\u53ef\u4ee5\u76d1\u89c6\u6240\u6709\u8ba2\u9605\u4e8b\u4ef6\uff0c\u5305\u62ec ",(0,o.kt)("inlineCode",{parentName:"p"},"\u6267\u884c\u4e4b\u524d\u3001\u6267\u884c\u4e4b\u540e\uff0c\u6267\u884c\u5f02\u5e38\uff0c\u5171\u4eab\u4e0a\u4e0b\u6587\u6570\u636e"),"\u3002"),(0,o.kt)("p",null,"\u5982\u6dfb\u52a0 ",(0,o.kt)("inlineCode",{parentName:"p"},"ToDoEventHandlerMonitor"),"\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,9,15}",showLineNumbers:!0,"":!0,"{1,9,15}":!0},'public class ToDoEventHandlerMonitor : IEventHandlerMonitor\n{\n private readonly ILogger _logger;\n public ToDoEventHandlerMonitor(ILogger logger)\n {\n _logger = logger;\n }\n\n public Task OnExecutingAsync(EventHandlerExecutingContext context)\n {\n _logger.LogInformation("\u6267\u884c\u4e4b\u524d\uff1a{EventId}", context.Source.EventId);\n return Task.CompletedTask;\n }\n\n public Task OnExecutedAsync(EventHandlerExecutedContext context)\n {\n _logger.LogInformation("\u6267\u884c\u4e4b\u540e\uff1a{EventId}", context.Source.EventId);\n\n if (context.Exception != null)\n {\n _logger.LogError(context.Exception, "\u6267\u884c\u51fa\u9519\u5566\uff1a{EventId}", context.Source.EventId);\n }\n\n return Task.CompletedTask;\n }\n}\n')),(0,o.kt)("p",null,"\u6700\u540e\uff0c\u5728\u6ce8\u518c ",(0,o.kt)("inlineCode",{parentName:"p"},"EventBus")," \u670d\u52a1\u4e2d\u6ce8\u518c ",(0,o.kt)("inlineCode",{parentName:"p"},"ToDoEventHandlerMonitor"),"\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},"services.AddEventBus(builder =>\n{\n // \u6dfb\u52a0\u4e8b\u4ef6\u6267\u884c\u76d1\u89c6\u5668\n builder.AddMonitor();\n});\n")),(0,o.kt)("h2",{id:"227-\u6dfb\u52a0\u4e8b\u4ef6\u6267\u884c\u5668"},"22.7 \u6dfb\u52a0\u4e8b\u4ef6\u6267\u884c\u5668"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"IEventHandlerExecutor")," \u6267\u884c\u5668\u63a5\u53e3\uff0c\u53ef\u4ee5\u8ba9\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u4e8b\u4ef6\u5904\u7406\u51fd\u6570\u6267\u884c\u7b56\u7565\uff0c\u5982 ",(0,o.kt)("inlineCode",{parentName:"p"},"\u8d85\u65f6\u63a7\u5236\uff0c\u5931\u8d25\u91cd\u8bd5\u3001\u7194\u65ad\u7b49\u7b49"),"\u3002"),(0,o.kt)("p",null,"\u5982\u6dfb\u52a0 ",(0,o.kt)("inlineCode",{parentName:"p"},"RetryEventHandlerExecutor"),"\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3}",showLineNumbers:!0,"":!0,"{1,3}":!0},"public class RetryEventHandlerExecutor : IEventHandlerExecutor\n{\n public async Task ExecuteAsync(EventHandlerExecutingContext context, Func handler)\n {\n // \u5982\u679c\u6267\u884c\u5931\u8d25\uff0c\u6bcf\u9694 1s \u91cd\u8bd5\uff0c\u6700\u591a\u4e09\u6b21\n await Retry.InvokeAsync(async () => {\n await handler(context);\n }, 3, 1000);\n }\n}\n")),(0,o.kt)("p",null,"\u6700\u540e\uff0c\u5728\u6ce8\u518c ",(0,o.kt)("inlineCode",{parentName:"p"},"EventBus")," \u670d\u52a1\u4e2d\u6ce8\u518c ",(0,o.kt)("inlineCode",{parentName:"p"},"RetryEventHandlerExecutor"),"\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},"services.AddEventBus(builder =>\n{\n // \u6dfb\u52a0\u4e8b\u4ef6\u6267\u884c\u5668\n builder.AddExecutor();\n});\n")),(0,o.kt)("h2",{id:"228-\u4f7f\u7528\u6709\u4f5c\u7528\u57df\u7684\u670d\u52a1"},"22.8 \u4f7f\u7528\u6709\u4f5c\u7528\u57df\u7684\u670d\u52a1"),(0,o.kt)("p",null,"\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e2d\uff0c ",(0,o.kt)("inlineCode",{parentName:"p"},"Event Bus")," \u6240\u6709\u670d\u52a1\u5747\u6ce8\u518c\u4e3a\u5355\u4f8b\uff0c\u5982\u9700\u4f7f\u7528\u4f5c\u7528\u57df\u670d\u52a1\uff08\u5355\u4f8b\u670d\u52a1\u53ef\u76f4\u63a5\u6ce8\u5165\uff09\uff0c\u53ef\u901a\u8fc7\u4f9d\u8d56\u6ce8\u5165 ",(0,o.kt)("inlineCode",{parentName:"p"},"IServiceProvider")," \u5b9e\u4f8b\u5e76\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"CreateScope()")," \u521b\u5efa\u4e00\u4e2a\u4f5c\u7528\u57df\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8,12,17-21}",showLineNumbers:!0,"":!0,"{5,8,12,17-21}":!0},'public class ToDoEventSubscriber : IEventSubscriber\n{\n private readonly ILogger _logger;\n\n public ToDoEventSubscriber(IServiceProvider services\n , ILogger logger)\n {\n Services = services;\n _logger = logger;\n }\n\n public IServiceProvider Services { get; }\n\n [EventSubscribe("ToDo:Create")]\n public async Task CreateToDo(EventHandlerExecutingContext context)\n {\n // \u521b\u5efa\u65b0\u7684\u4f5c\u7528\u57df\n using var scope = Services.CreateScope();\n\n // \u89e3\u6790\u670d\u52a1\n var scopedProcessingService = scope.ServiceProvider.GetRequiredService();\n // ....\n }\n}\n')),(0,o.kt)("h2",{id:"229-\u8ba2\u9605\u6267\u884c\u4efb\u52a1\u610f\u5916\u5f02\u5e38"},"22.9 \u8ba2\u9605\u6267\u884c\u4efb\u52a1\u610f\u5916\u5f02\u5e38"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},"services.AddEventBus(builder =>\n{\n // \u8ba2\u9605 EventBus \u672a\u6355\u83b7\u5f02\u5e38\n builder.UnobservedTaskExceptionHandler = (obj, args) =>\n {\n // ....\n };\n});\n")),(0,o.kt)("h2",{id:"2210-\u4e8b\u4ef6\u603b\u7ebf\u5de5\u5382"},"22.10 \u4e8b\u4ef6\u603b\u7ebf\u5de5\u5382"),(0,o.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion 4.2.10 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,o.kt)("p",null,"\u5728\u8be5\u7248\u672c\u4e2d\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"IEventBusFactory")," \u5de5\u5382\u670d\u52a1\uff0c\u53ef\u5728\u8fd0\u884c\u65f6\u52a8\u6001\u65b0\u589e\u6216\u5220\u9664\u8ba2\u9605\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,14-17,24}",showLineNumbers:!0,"{4,14-17,24}":!0},'public class TestEventBus : IDynamicApiController\n{\n private readonly IEventPublisher _eventPublisher;\n private readonly IEventBusFactory _eventBusFactory;\n public TestEventBus(IEventPublisher eventPublisher, IEventBusFactory eventBusFactory)\n {\n _eventPublisher = eventPublisher;\n _eventBusFactory = eventBusFactory;\n }\n\n // \u8fd0\u884c\u65f6\u52a8\u6001\u6dfb\u52a0\u4e00\u4e2a\u8ba2\u9605\u5668\n public async Task AddSubscriber()\n {\n await _eventBusFactory.Subscribe("xxx", async (ctx) =>\n {\n Console.WriteLine("\u6211\u662f\u52a8\u6001\u7684");\n await Task.CompletedTask;\n });\n }\n\n // \u8fd0\u884c\u65f6\u52a8\u6001\u5220\u9664\u4e00\u4e2a\u8ba2\u9605\u5668\n public async Task RemoveDynamic(string eventId)\n {\n await _eventBusFactory.Unsubscribe(eventId);\n }\n}\n')),(0,o.kt)("h2",{id:"2211-messagecenter-\u9759\u6001\u7c7b"},"22.11 ",(0,o.kt)("inlineCode",{parentName:"h2"},"MessageCenter")," \u9759\u6001\u7c7b"),(0,o.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion 4.3.3 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,o.kt)("p",null,"\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion 4.3.3")," \u7248\u672c\u65b0\u589e\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"MessageCenter")," \u9759\u6001\u7c7b\uff0c\u53ef\u5728\u4efb\u4f55\u5730\u65b9\u53d1\u9001\u4e8b\u4ef6\u6d88\u606f\u6216\u8ba2\u9605\u6d88\u606f\u3002"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,11}",showLineNumbers:!0,"{2,5,11}":!0},'// \u53d1\u9001\u6d88\u606f\uff08\u542b\u8bf8\u591a\u91cd\u8f7d\uff09\nawait MessageCenter.PublishAsync("messageId", new {});\n\n// \u52a8\u6001\u8ba2\u9605\u6d88\u606f\nMessageCenter.Subscribe("messageId", async (ctx) => {\n Console.WriteLine("\u6211\u662f\u52a8\u6001\u7684");\n await Task.CompletedTask;\n});\n\n// \u53d6\u6d88\u8ba2\u9605\nMessageCenter.Unsubscribe("messageId");\n')),(0,o.kt)("h2",{id:"2212-\u914d\u7f6e\u91cd\u8bd5\u5931\u8d25\u56de\u8c03"},"22.12 \u914d\u7f6e\u91cd\u8bd5\u5931\u8d25\u56de\u8c03"),(0,o.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion 4.6.1 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"\u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"li"},"IEventFallbackPolicy")," \u5b9e\u73b0\u7c7b\u5e76\u5b9e\u73b0 ",(0,o.kt)("inlineCode",{parentName:"li"},"Callback")," \u65b9\u6cd5\uff0c\u5982 ",(0,o.kt)("inlineCode",{parentName:"li"},"EventFallbackPolicy"),"\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,9}",showLineNumbers:!0,"{1,9}":!0},'public class EventFallbackPolicy : IEventFallbackPolicy\n{\n private readonly ILogger _logger;\n public EventFallbackPolicy(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task CallbackAsync(EventHandlerExecutingContext context, Exception ex)\n {\n _logger.LogError(ex, "\u91cd\u8bd5\u4e86\u591a\u6b21\u6700\u7ec8\u8fd8\u662f\u5931\u8d25\u4e86");\n await Task.CompletedTask;\n }\n}\n')),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"\u6ce8\u518c ",(0,o.kt)("inlineCode",{parentName:"li"},"EventFallbackPolicy")," \u7c7b\u578b\u670d\u52a1")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3}",showLineNumbers:!0,"{1,3}":!0},"services.AddEventBus(options =>\n{\n options.AddFallbackPolicy();\n});\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"li"},"[EventSubscribe]")," \u7279\u6027\u914d\u7f6e ",(0,o.kt)("inlineCode",{parentName:"li"},"FallbackPolicy")," \u5c5e\u6027\u4f7f\u7528")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},'[EventSubscribe("test:error", NumRetries = 3, FallbackPolicy = typeof(EventFallbackPolicy))] // \u91cd\u8bd5\u4e09\u6b21\npublic async Task TestError(EventHandlerExecutingContext context)\n{\n Console.WriteLine("\u6211\u6267\u884c\u5566~~");\n throw new NotImplementedException();\n}\n')),(0,o.kt)("img",{src:(0,i.Z)("img/nrs.png")}),(0,o.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u53ef\u4ee5\u5b9a\u4e49\u591a\u4e2a ",(0,o.kt)("inlineCode",{parentName:"p"},"IEventFallbackPolicy")," \u5b9e\u73b0\u7c7b\uff0c\u7136\u540e\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"options.AddFallbackPolicy()")," \u6ce8\u518c\u591a\u4e2a\uff0c\u8fd9\u6837\u5b9e\u73b0\u4e0d\u540c\u7684\u4e8b\u4ef6\u8ba2\u9605\u7a0b\u5e8f\u6267\u884c\u4e0d\u540c\u7684\u7b56\u7565\u3002\u5982\uff1a"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3}",showLineNumbers:!0,"{1,3}":!0},'[EventSubscribe("test:error", NumRetries = 3, FallbackPolicy = typeof(EventFallbackPolicy))]\n\n[EventSubscribe("test:error", NumRetries = 1010, FallbackPolicy = typeof(OtherEventFallbackPolicy))]\n'))),(0,o.kt)("h2",{id:"2213-eventbusoptionsbuilder-\u914d\u7f6e"},"22.13 ",(0,o.kt)("inlineCode",{parentName:"h2"},"EventBusOptionsBuilder")," \u914d\u7f6e"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"EventBusOptionsBuilder")," \u662f ",(0,o.kt)("inlineCode",{parentName:"p"},"AddEventBus")," \u6784\u5efa\u670d\u52a1\u9009\u9879\uff0c\u8be5\u9009\u9879\u5305\u542b\u4ee5\u4e0b\u5c5e\u6027\u548c\u65b9\u6cd5\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u5c5e\u6027",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"ChannelCapacity"),"\uff1a\u9ed8\u8ba4\u5185\u5b58\u901a\u9053\u5bb9\u91cf"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"UnobservedTaskExceptionHandler"),"\uff1a\u8ba2\u9605\u6267\u884c\u4efb\u52a1\u672a\u5bdf\u89c9\u5f02\u5e38"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"UseUtcTimestamp"),"\uff1a\u662f\u5426\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"li"},"UTC")," \u4e8b\u4ef6\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"li"},"false")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"FuzzyMatch"),"\uff1a\u662f\u5426\u5f00\u542f\u5168\u5c40\u6a21\u7cca\u5339\u914d\uff08\u6b63\u5219\u8868\u8fbe\u5f0f\uff09\u4e8b\u4ef6 ",(0,o.kt)("inlineCode",{parentName:"li"},"Id"),"\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"li"},"false")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"LogEnabled"),"\uff1a\u662f\u5426\u542f\u7528\u65e5\u5fd7\u8f93\u51fa\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"li"},"true")))),(0,o.kt)("li",{parentName:"ul"},"\u65b9\u6cd5",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"AddSubscriber"),"\uff1a\u6dfb\u52a0\u8ba2\u9605\u8005"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"ReplacePublisher"),"\uff1a\u66ff\u6362\u53d1\u5e03\u8005"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"ReplaceStorer(Func)"),"\uff1a\u66ff\u6362\u5b58\u50a8\u5668"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"AddMonitor"),"\uff1a\u6dfb\u52a0\u76d1\u89c6\u5668"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"AddExecutor"),"\uff1a\u6dfb\u52a0\u6267\u884c\u5668")))),(0,o.kt)("h2",{id:"2214-\u5173\u4e8e\u9ad8\u9891\u6d88\u606f\u5904\u7406\u65b9\u5f0f"},"22.14 \u5173\u4e8e\u9ad8\u9891\u6d88\u606f\u5904\u7406\u65b9\u5f0f"),(0,o.kt)("p",null,"\u5728\u4e00\u4e9b\u9ad8\u9891\u53d1\u9001\u6d88\u606f\u7684\u573a\u666f\u5982 ",(0,o.kt)("inlineCode",{parentName:"p"},"IoT"),"\u3001\u65e5\u5fd7\u8bb0\u5f55\u3001\u6570\u636e\u91c7\u96c6\uff0c\u4e3a\u907f\u514d\u9891\u7e41\u89e3\u6790\u670d\u52a1\u548c\u521b\u5efa\u4f5c\u7528\u57df\uff0c\u53ef\u4f7f\u7528 ",(0,o.kt)("strong",{parentName:"p"},"\u7c7b\u5168\u5c40\u4f5c\u7528\u57df")," \u548c\u6240\u6709\u670d\u52a1\u90fd\u91c7\u53d6\u5355\u4f8b\u7684\u65b9\u5f0f\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4,6,9,17,24-26}",showLineNumbers:!0,"{1,4,6,9,17,24-26}":!0},'public class ToDoEventSubscriber : IEventSubscriber, IDisposable\n{\n private readonly ILogger _logger;\n private readonly IServiceScope _serviceScope;\n\n public ToDoEventSubscriber(IServiceProvider serviceProvider\n , ILogger logger)\n {\n _serviceScope = serviceProvider.CreateScope();\n _logger = logger;\n }\n\n [EventSubscribe("iot:log")]\n public async Task LogFromIoT(EventHandlerExecutingContext context)\n {\n // \u89e3\u6790\u670d\u52a1\n var scopedProcessingService = _serviceScope.ServiceProvider.GetRequiredService();\n // ....\n }\n\n /// \n /// \u91ca\u653e\u670d\u52a1\u4f5c\u7528\u57df\n /// \n public void Dispose()\n {\n _serviceScope.Dispose();\n }\n}\n')),(0,o.kt)("h2",{id:"2215-iis-\u90e8\u7f72\u56de\u6536\u8bbe\u7f6e"},"22.15 IIS \u90e8\u7f72\u56de\u6536\u8bbe\u7f6e"),(0,o.kt)("p",null,"\u5982\u679c\u5728\u9879\u76ee\u4e2d\u4f7f\u7528\u4e86\u4e8b\u4ef6\u603b\u7ebf\u4e14\u90e8\u7f72\u5230 ",(0,o.kt)("inlineCode",{parentName:"p"},"IIS")," \u4e2d\uff0c\u90a3\u4e48\u9700\u8981\u8bbe\u7f6e ",(0,o.kt)("inlineCode",{parentName:"p"},"IIS")," \u7981\u6b62\u56de\u6536\uff0c\u907f\u514d\u4e8b\u4ef6\u603b\u7ebf\u670d\u52a1\u8fdb\u5165\u4f11\u7720\uff0c",(0,o.kt)("a",{parentName:"p",href:"./deploy-iis#3415-iis-%E5%9B%9E%E6%94%B6%E9%97%AE%E9%A2%98%E5%92%8C%E9%85%8D%E7%BD%AE"},"\u70b9\u51fb\u67e5\u770b ",(0,o.kt)("inlineCode",{parentName:"a"},"IIS")," \u56de\u6536\u95ee\u9898\u89e3\u51b3\u65b9\u6848")),(0,o.kt)("h2",{id:"2216-\u4f7f\u7528\u7b2c\u4e09\u65b9\u4e8b\u4ef6\u603b\u7ebf-cap-\u793a\u4f8b"},"22.16 \u4f7f\u7528\u7b2c\u4e09\u65b9\u4e8b\u4ef6\u603b\u7ebf ",(0,o.kt)("inlineCode",{parentName:"h2"},"CAP")," \u793a\u4f8b"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5}",showLineNumbers:!0,"{1,5}":!0},"builder.Services.AddCap(options =>\n{\n options.UseInMemoryStorage();\n options.UseInMemoryMessageQueue();\n}).AddSubscriberAssembly(App.Assemblies.ToArray());\n")),(0,o.kt)("h2",{id:"2217-\u53cd\u9988\u4e0e\u5efa\u8bae"},"22.17 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,o.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}v.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/083979a2.798d94f9.js b/handbook/build/assets/js/083979a2.798d94f9.js new file mode 100644 index 00000000000..8b44886a29a --- /dev/null +++ b/handbook/build/assets/js/083979a2.798d94f9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6732],{3905:function(e,n,t){t.d(n,{Zo:function(){return s},kt:function(){return u}});var a=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var c=a.createContext({}),p=function(e){var n=a.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},s=function(e){var n=p(e.components);return a.createElement(c.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),m=p(t),u=i,k=m["".concat(c,".").concat(u)]||m[u]||d[u]||r;return t?a.createElement(k,o(o({ref:n},s),{},{components:t})):a.createElement(k,o({ref:n},s))}));function u(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var r=t.length,o=new Array(r);o[0]=m;var l={};for(var c in n)hasOwnProperty.call(n,c)&&(l[c]=n[c]);l.originalType=e,l.mdxType="string"==typeof e?e:i,o[1]=l;for(var p=2;pIDistributedCache",id:"1442-idistributedcache",level:3},{value:"14.4.3 \u5206\u5e03\u5f0f\u5185\u5b58\u7f13\u5b58",id:"1443-\u5206\u5e03\u5f0f\u5185\u5b58\u7f13\u5b58",level:3},{value:"14.4.4 \u5206\u5e03\u5f0f SQL Server \u7f13\u5b58",id:"1444-\u5206\u5e03\u5f0f-sql-server-\u7f13\u5b58",level:3},{value:"14.4.5 \u5206\u5e03\u5f0f Redis \u7f13\u5b58",id:"1445-\u5206\u5e03\u5f0f-redis-\u7f13\u5b58",level:3},{value:"14.4.6 \u5206\u5e03\u5f0f NCache \u7f13\u5b58",id:"1446-\u5206\u5e03\u5f0f-ncache-\u7f13\u5b58",level:3},{value:"14.5 \u5206\u5e03\u5f0f\u7f13\u5b58\u4f7f\u7528",id:"145-\u5206\u5e03\u5f0f\u7f13\u5b58\u4f7f\u7528",level:2},{value:"14.6 \u5206\u5e03\u5f0f\u7f13\u5b58\u5efa\u8bae",id:"146-\u5206\u5e03\u5f0f\u7f13\u5b58\u5efa\u8bae",level:2},{value:"14.7 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"147-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],m={toc:d};function u(e){var n=e.components,t=(0,i.Z)(e,o);return(0,r.kt)("wrapper",(0,a.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"141-\u4ec0\u4e48\u662f\u7f13\u5b58"},"14.1 \u4ec0\u4e48\u662f\u7f13\u5b58"),(0,r.kt)("p",null,"\u7f13\u5b58\u53ef\u4ee5\u51cf\u5c11\u751f\u6210\u5185\u5bb9\u6240\u9700\u7684\u5de5\u4f5c\uff0c\u4ece\u800c\u663e\u8457\u63d0\u9ad8\u5e94\u7528\u7a0b\u5e8f\u7684\u6027\u80fd\u548c\u53ef\u4f38\u7f29\u6027\u3002 ",(0,r.kt)("strong",{parentName:"p"},"\u7f13\u5b58\u9002\u7528\u4e8e\u4e0d\u7ecf\u5e38\u66f4\u6539\u7684\u6570\u636e\uff0c\u56e0\u4e3a\u751f\u6210\u6210\u672c\u5f88\u9ad8"),"\u3002 \u901a\u8fc7\u7f13\u5b58\uff0c\u53ef\u6bd4\u4ece\u6570\u636e\u6e90\u8fd4\u56de\u6570\u636e\u7684\u526f\u672c\u901f\u5ea6\u5feb\u5f97\u591a\u3002 \u5e94\u8be5\u5bf9\u5e94\u7528\u8fdb\u884c\u7f16\u5199\u548c\u6d4b\u8bd5\uff0c\u4f7f\u5176\u4e0d\u8981\u6c38\u8fdc\u4f9d\u8d56\u4e8e\u7f13\u5b58\u7684\u6570\u636e\u3002"),(0,r.kt)("h2",{id:"142-\u7f13\u5b58\u7c7b\u578b"},"14.2 \u7f13\u5b58\u7c7b\u578b"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u5185\u5b58\u7f13\u5b58\uff1a\u987e\u540d\u601d\u4e49\uff0c\u5c31\u662f\u7f13\u5b58\u5728\u5e94\u7528\u90e8\u7f72\u6240\u5728\u670d\u52a1\u5668\u7684\u5185\u5b58\u4e2d"),(0,r.kt)("li",{parentName:"ul"},"\u5206\u5e03\u5f0f\u7f13\u5b58\uff1a\u5206\u5e03\u5f0f\u7f13\u5b58\u662f\u7531\u591a\u4e2a\u5e94\u7528\u670d\u52a1\u5668\u5171\u4eab\u7684\u7f13\u5b58"),(0,r.kt)("li",{parentName:"ul"},"\u54cd\u5e94\u7f13\u5b58\uff1a\u7f13\u5b58\u670d\u52a1\u5668\u7aef ",(0,r.kt)("inlineCode",{parentName:"li"},"Not Modified")," \u7684\u6570\u636e")),(0,r.kt)("h2",{id:"143-\u5185\u5b58\u7f13\u5b58\u4f7f\u7528"},"14.3 \u5185\u5b58\u7f13\u5b58\u4f7f\u7528"),(0,r.kt)("p",null,"\u5185\u5b58\u7f13\u5b58\u662f\u6700\u5e38\u7528\u7684\u7f13\u5b58\u65b9\u5f0f\uff0c\u5177\u6709\u5b58\u53d6\u5feb\uff0c\u6548\u7387\u9ad8\u7279\u70b9\u3002"),(0,r.kt)("p",null,"\u5185\u5b58\u7f13\u5b58\u901a\u8fc7\u6ce8\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"IMemoryCache")," \u65b9\u5f0f\u6ce8\u5165\u5373\u53ef\u3002"),(0,r.kt)("admonition",{title:"\u5907\u6ce8",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u5185\u5b58\u7f13\u5b58\u670d\u52a1\u5df2\u7ecf\u9ed8\u8ba4\u6ce8\u518c\uff0c\u65e0\u9700\u624b\u52a8\u6ce8\u518c\u3002")),(0,r.kt)("h3",{id:"1431-\u57fa\u672c\u4f7f\u7528"},"14.3.1 \u57fa\u672c\u4f7f\u7528"),(0,r.kt)("p",null,"\u5982\uff0c\u7f13\u5b58\u5f53\u524d\u65f6\u95f4\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13,21-24}",showLineNumbers:!0,"":!0,"{13,21-24}":!0},'using Furion.DynamicApiController;\nusing Microsoft.Extensions.Caching.Memory;\nusing System;\n\nnamespace Furion.Application\n{\n public class CacheServices : IDynamicApiController\n {\n private const string _timeCacheKey = "cache_time";\n\n private readonly IMemoryCache _memoryCache;\n\n public CacheServices(IMemoryCache memoryCache)\n {\n _memoryCache = memoryCache;\n }\n\n [ApiDescriptionSettings(KeepName = true)]\n public DateTimeOffset GetOrCreate()\n {\n return _memoryCache.GetOrCreate(_timeCacheKey, entry =>\n {\n return DateTimeOffset.UtcNow;\n });\n }\n }\n}\n')),(0,r.kt)("h3",{id:"1432-\u8bbe\u7f6e\u7f13\u5b58\u9009\u9879"},"14.3.2 \u8bbe\u7f6e\u7f13\u5b58\u9009\u9879"),(0,r.kt)("p",null,"\u5185\u5b58\u7f13\u5b58\u652f\u6301\u8bbe\u7f6e\u7f13\u5b58\u65f6\u95f4\u3001\u7f13\u5b58\u5927\u5c0f\u3001\u53ca\u7edd\u5bf9\u7f13\u5b58\u8fc7\u671f\u65f6\u95f4\u7b49"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"_memoryCache.GetOrCreate(_timeCacheKey, entry =>\n{\n entry.SlidingExpiration = TimeSpan.FromSeconds(3); // \u6ed1\u52a8\u7f13\u5b58\u65f6\u95f4\n return DateTimeOffset.UtcNow;\n});\n\nawait _memoryCache.GetOrCreateAsync(_timeCacheKey, async entry =>\n{\n // \u8fd9\u91cc\u53ef\u4ee5\u4f7f\u7528\u5f02\u6b65~~\n});\n")),(0,r.kt)("admonition",{title:"\u5173\u4e8e\u7f13\u5b58\u65f6\u95f4",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"\u5177\u6709\u53ef\u8c03\u8fc7\u671f\u7684\u7f13\u5b58\u9879\u96c6\u5b58\u5728\u8fc7\u65f6\u7684\u98ce\u9669\u3002 \u5982\u679c\u8bbf\u95ee\u7684\u65f6\u95f4\u6bd4\u6ed1\u52a8\u8fc7\u671f\u65f6\u95f4\u95f4\u9694\u66f4\u9891\u7e41\uff0c\u5219\u8be5\u9879\u5c06\u6c38\u4e0d\u8fc7\u671f\u3002"),(0,r.kt)("p",{parentName:"admonition"},"\u5c06\u5f39\u6027\u8fc7\u671f\u4e0e\u7edd\u5bf9\u8fc7\u671f\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u4ee5\u4fdd\u8bc1\u9879\u76ee\u5728\u5176\u7edd\u5bf9\u8fc7\u671f\u65f6\u95f4\u901a\u8fc7\u540e\u8fc7\u671f\u3002 \u7edd\u5bf9\u8fc7\u671f\u4f1a\u5c06\u9879\u7684\u4e0a\u9650\u8bbe\u7f6e\u4e3a\u53ef\u7f13\u5b58\u9879\u7684\u65f6\u95f4\uff0c\u540c\u65f6\u4ecd\u5141\u8bb8\u9879\u5728\u53ef\u8c03\u6574\u8fc7\u671f\u65f6\u95f4\u95f4\u9694\u5185\u672a\u8bf7\u6c42\u65f6\u63d0\u524d\u8fc7\u671f\u3002"),(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c\u540c\u65f6\u6307\u5b9a\u4e86\u7edd\u5bf9\u8fc7\u671f\u548c\u53ef\u8c03\u8fc7\u671f\u65f6\u95f4\uff0c\u5219\u8fc7\u671f\u65f6\u95f4\u4ee5\u903b\u8f91\u65b9\u5f0f\u8fd0\u7b97\u3002 \u5982\u679c\u6ed1\u52a8\u8fc7\u671f\u65f6\u95f4\u95f4\u9694 \u6216 \u7edd\u5bf9\u8fc7\u671f\u65f6\u95f4\u901a\u8fc7\uff0c\u5219\u4ece\u7f13\u5b58\u4e2d\u9010\u51fa\u8be5\u9879\u3002"),(0,r.kt)("p",{parentName:"admonition"},"\u5982\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"_memoryCache.GetOrCreate(_timeCacheKey, entry =>\n{\n entry.SetSlidingExpiration(TimeSpan.FromSeconds(3));\n entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(20);\n return DateTime.Now;\n});\n")),(0,r.kt)("p",{parentName:"admonition"},"\u524d\u9762\u7684\u4ee3\u7801\u4fdd\u8bc1\u6570\u636e\u7684\u7f13\u5b58\u65f6\u95f4\u4e0d\u8d85\u8fc7\u7edd\u5bf9\u65f6\u95f4\u3002")),(0,r.kt)("h3",{id:"1433-\u624b\u52a8\u8bbe\u7f6e\u7f13\u5b58\u9009\u9879"},"14.3.3 \u624b\u52a8\u8bbe\u7f6e\u7f13\u5b58\u9009\u9879"),(0,r.kt)("p",null,"\u9664\u4e86\u4e0a\u9762\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Func")," \u65b9\u5f0f\u8bbe\u7f6e\u7f13\u5b58\u9009\u9879\uff0c\u6211\u4eec\u53ef\u4ee5\u624b\u52a8\u521b\u5efa\u5e76\u8bbe\u7f6e\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var cacheEntryOptions = new MemoryCacheEntryOptions()\n .SetSlidingExpiration(TimeSpan.FromSeconds(3));\n\n_memoryCache.Set(_timeCacheKey, DateTimeOffset.UtcNow, cacheEntryOptions);\n")),(0,r.kt)("h3",{id:"1434-\u7f13\u5b58\u4f9d\u8d56\u5173\u7cfb"},"14.3.4 \u7f13\u5b58\u4f9d\u8d56\u5173\u7cfb"),(0,r.kt)("p",null,"\u4e0b\u9762\u7684\u793a\u4f8b\u6f14\u793a\u5982\u4f55\u5728\u4f9d\u8d56\u6761\u76ee\u8fc7\u671f\u540e\u4f7f\u7f13\u5b58\u6761\u76ee\u8fc7\u671f\u3002 ",(0,r.kt)("inlineCode",{parentName:"p"},"CancellationChangeToken")," \u6dfb\u52a0\u5230\u7f13\u5b58\u7684\u9879\u3002 \u5f53 ",(0,r.kt)("inlineCode",{parentName:"p"},"Cancel")," \u5728\u4e0a\u8c03\u7528\u65f6 ",(0,r.kt)("inlineCode",{parentName:"p"},"CancellationTokenSource")," \uff0c\u5c06\u9010\u51fa\u4e24\u4e2a\u7f13\u5b58\u9879\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'public IActionResult CreateDependentEntries()\n{\n var cts = new CancellationTokenSource();\n _cache.Set(CacheKeys.DependentCTS, cts);\n\n using (var entry = _cache.CreateEntry(CacheKeys.Parent))\n {\n // expire this entry if the dependant entry expires.\n entry.Value = DateTime.Now;\n entry.RegisterPostEvictionCallback(DependentEvictionCallback, this);\n\n _cache.Set(CacheKeys.Child,\n DateTime.Now,\n new CancellationChangeToken(cts.Token));\n }\n\n return RedirectToAction("GetDependentEntries");\n}\n\npublic IActionResult GetDependentEntries()\n{\n return View("Dependent", new DependentViewModel\n {\n ParentCachedTime = _cache.Get(CacheKeys.Parent),\n ChildCachedTime = _cache.Get(CacheKeys.Child),\n Message = _cache.Get(CacheKeys.DependentMessage)\n });\n}\n\npublic IActionResult RemoveChildEntry()\n{\n _cache.Get(CacheKeys.DependentCTS).Cancel();\n return RedirectToAction("GetDependentEntries");\n}\n\nprivate static void DependentEvictionCallback(object key, object value,\n EvictionReason reason, object state)\n{\n var message = $"Parent entry was evicted. Reason: {reason}.";\n ((HomeController)state)._cache.Set(CacheKeys.DependentMessage, message);\n}\n')),(0,r.kt)("p",null,"\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"CancellationTokenSource")," \u5141\u8bb8\u5c06\u591a\u4e2a\u7f13\u5b58\u6761\u76ee\u4f5c\u4e3a\u4e00\u4e2a\u7ec4\u9010\u51fa\u3002 ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," \u5728\u4e0a\u9762\u7684\u4ee3\u7801\u4e2d\uff0c\u5728\u5757\u4e2d\u521b\u5efa\u7684\u7f13\u5b58\u6761\u76ee ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," \u5c06\u7ee7\u627f\u89e6\u53d1\u5668\u548c\u8fc7\u671f\u8bbe\u7f6e\u3002"),(0,r.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5185\u5b58\u4e2d\u7684\u7f13\u5b58")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/memory?view=aspnetcore-5.0"},"ASP.NET Core - \u5185\u5b58\u7f13\u5b58")," \u7ae0\u8282\u3002")),(0,r.kt)("h2",{id:"144-\u5206\u5e03\u5f0f\u7f13\u5b58"},"14.4 \u5206\u5e03\u5f0f\u7f13\u5b58"),(0,r.kt)("p",null,"\u5206\u5e03\u5f0f\u7f13\u5b58\u662f\u7531\u591a\u4e2a\u5e94\u7528\u670d\u52a1\u5668\u5171\u4eab\u7684\u7f13\u5b58\uff0c\u901a\u5e38\u4f5c\u4e3a\u5916\u90e8\u670d\u52a1\u5728\u8bbf\u95ee\u5b83\u7684\u5e94\u7528\u670d\u52a1\u5668\u4e0a\u7ef4\u62a4\u3002 \u5206\u5e03\u5f0f\u7f13\u5b58\u53ef\u4ee5\u63d0\u9ad8 ",(0,r.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u5e94\u7528\u7a0b\u5e8f\u7684\u6027\u80fd\u548c\u53ef\u4f38\u7f29\u6027\uff0c\u5c24\u5176\u662f\u5728\u5e94\u7528\u7a0b\u5e8f\u7531\u4e91\u670d\u52a1\u6216\u670d\u52a1\u5668\u573a\u6258\u7ba1\u65f6\u3002"),(0,r.kt)("p",null,"\u4e0e\u5176\u4ed6\u7f13\u5b58\u65b9\u6848\u76f8\u6bd4\uff0c\u5206\u5e03\u5f0f\u7f13\u5b58\u5177\u6709\u591a\u9879\u4f18\u52bf\uff0c\u5176\u4e2d\u7f13\u5b58\u7684\u6570\u636e\u5b58\u50a8\u5728\u5355\u4e2a\u5e94\u7528\u670d\u52a1\u5668\u4e0a\u3002"),(0,r.kt)("p",null,"\u5f53\u5206\u5e03\u5f0f\u7f13\u5b58\u6570\u636e\u65f6\uff0c\u6570\u636e\u5c06\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"(\u4e00\u81f4\u6027) \u8de8\u591a\u4e2a \u670d\u52a1\u5668\u7684\u8bf7\u6c42"),(0,r.kt)("li",{parentName:"ul"},"\u5b58\u6d3b\u5728\u670d\u52a1\u5668\u91cd\u542f\u548c\u5e94\u7528\u90e8\u7f72\u4e4b\u95f4"),(0,r.kt)("li",{parentName:"ul"},"\u4e0d\u4f7f\u7528\u672c\u5730\u5185\u5b58")),(0,r.kt)("p",null,"\u5206\u5e03\u5f0f\u7f13\u5b58\u914d\u7f6e\u662f\u7279\u5b9a\u4e8e\u5b9e\u73b0\u7684\u3002 \u672c\u6587\u4ecb\u7ecd\u5982\u4f55\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"SQL Server")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"Redis")," \u5206\u5e03\u5f0f\u7f13\u5b58\u3002 \u7b2c\u4e09\u65b9\u5b9e\u73b0\u4e5f\u53ef\u7528\uff0c\u4f8b\u5982 GitHub \u4e0a\u7684 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/Alachisoft/NCache"},"NCache")," (NCache) \u3002"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u65e0\u8bba\u9009\u62e9\u54ea\u79cd\u5b9e\u73b0\uff0c\u5e94\u7528\u90fd\u4f1a\u4f7f\u7528\u63a5\u53e3\u4e0e\u7f13\u5b58\u4ea4\u4e92 ",(0,r.kt)("inlineCode",{parentName:"strong"},"IDistributedCache")," \u3002")),(0,r.kt)("h3",{id:"1441-\u4f7f\u7528\u6761\u4ef6"},"14.4.1 \u4f7f\u7528\u6761\u4ef6"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u82e5\u8981\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"SQL Server")," \u5206\u5e03\u5f0f\u7f13\u5b58\uff0c\u5219\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"Microsoft.Extensions.Caching.SqlServer")," \u5305"),(0,r.kt)("li",{parentName:"ul"},"\u82e5\u8981\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"Redis")," \u5206\u5e03\u5f0f\u7f13\u5b58\uff0c\u5219\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"Microsoft.Extensions.Caching.StackExchangeRedis")," \u5305"),(0,r.kt)("li",{parentName:"ul"},"\u82e5\u8981\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"NCache")," \u5206\u5e03\u5f0f\u7f13\u5b58\uff0c\u5219\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"NCache.Microsoft.Extensions.Caching.OpenSource")," \u5305")),(0,r.kt)("h3",{id:"1442-idistributedcache"},"14.4.2 ",(0,r.kt)("inlineCode",{parentName:"h3"},"IDistributedCache")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"IDistributedCache")," \u63a5\u53e3\u63d0\u4f9b\u4ee5\u4e0b\u65b9\u6cd5\u6765\u5904\u7406\u5206\u5e03\u5f0f\u7f13\u5b58\u5b9e\u73b0\u4e2d\u7684\u9879\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Get/GetAsync"),"\uff1a\u63a5\u53d7\u5b57\u7b26\u4e32\u952e\uff0c\u5e76\u68c0\u7d22\u7f13\u5b58\u9879\u4f5c\u4e3a ",(0,r.kt)("inlineCode",{parentName:"li"},"byte[]")," \u6570\u7ec4\uff08\u5982\u679c\u5728\u7f13\u5b58\u4e2d\u627e\u5230\uff09"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Set/SetAsync"),"\uff1a\u4f7f\u7528\u5b57\u7b26\u4e32\u952e\u5c06\u9879 (\u4f5c\u4e3a ",(0,r.kt)("inlineCode",{parentName:"li"},"byte[]")," \u6570\u7ec4) \u6dfb\u52a0\u5230\u7f13\u5b58\u4e2d"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Refresh/RefreshAsync")," \uff1a\u6839\u636e\u9879\u7684\u952e\u5237\u65b0\u7f13\u5b58\u4e2d\u7684\u9879\uff0c\u91cd\u7f6e\u5176\u6ed1\u52a8\u8fc7\u671f\u8d85\u65f6\uff08\u5982\u679c\u6709\uff09"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Remove/RemoveAsync"),"\uff1a\u6839\u636e\u7f13\u5b58\u9879\u7684\u5b57\u7b26\u4e32\u952e\u5220\u9664\u7f13\u5b58\u9879")),(0,r.kt)("h3",{id:"1443-\u5206\u5e03\u5f0f\u5185\u5b58\u7f13\u5b58"},"14.4.3 \u5206\u5e03\u5f0f\u5185\u5b58\u7f13\u5b58"),(0,r.kt)("p",null,"\u5206\u5e03\u5f0f\u5185\u5b58\u7f13\u5b58\uff08",(0,r.kt)("inlineCode",{parentName:"p"},"AddDistributedMemoryCache"),"\uff09\u662f\u4e00\u4e2a\u6846\u67b6\u63d0\u4f9b\u7684\u5b9e\u73b0 ",(0,r.kt)("inlineCode",{parentName:"p"},"IDistributedCache")," \uff0c\u5b83\u5c06\u9879\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u3002 ",(0,r.kt)("strong",{parentName:"p"},"\u5206\u5e03\u5f0f\u5185\u5b58\u7f13\u5b58\u4e0d\u662f\u5b9e\u9645\u7684\u5206\u5e03\u5f0f\u7f13\u5b58\uff0c\u7f13\u5b58\u9879\u7531\u5e94\u7528\u7a0b\u5e8f\u5b9e\u4f8b\u5b58\u50a8\u5728\u8fd0\u884c\u5e94\u7528\u7a0b\u5e8f\u7684\u670d\u52a1\u5668\u4e0a\u3002")),(0,r.kt)("p",null,"\u5206\u5e03\u5f0f\u5185\u5b58\u7f13\u5b58\u4f18\u70b9\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u7528\u4e8e\u5f00\u53d1\u548c\u6d4b\u8bd5\u65b9\u6848\u3002"),(0,r.kt)("li",{parentName:"ul"},"\u5728\u751f\u4ea7\u73af\u5883\u4e2d\u4f7f\u7528\u5355\u4e00\u670d\u52a1\u5668\u5e76\u4e14\u5185\u5b58\u6d88\u8017\u4e0d\u662f\u95ee\u9898\u3002 \u5b9e\u73b0\u5206\u5e03\u5f0f\u5185\u5b58\u7f13\u5b58\u4f1a\u62bd\u8c61\u5316\u7f13\u5b58\u7684\u6570\u636e\u5b58\u50a8\u3002 \u5982\u679c\u9700\u8981\u591a\u4e2a\u8282\u70b9\u6216\u5bb9\u9519\uff0c\u53ef\u4ee5\u5728\u5c06\u6765\u5b9e\u73b0\u771f\u6b63\u7684\u5206\u5e03\u5f0f\u7f13\u5b58\u89e3\u51b3\u65b9\u6848\u3002")),(0,r.kt)("admonition",{title:"\u5907\u6ce8",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u5206\u5e03\u5f0f\u5185\u5b58\u7f13\u5b58\u670d\u52a1\u5df2\u7ecf\u9ed8\u8ba4\u6ce8\u518c\uff0c\u65e0\u9700\u624b\u52a8\u8c03\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"services.AddDistributedMemoryCache();")," \u6ce8\u518c\u3002")),(0,r.kt)("h3",{id:"1444-\u5206\u5e03\u5f0f-sql-server-\u7f13\u5b58"},"14.4.4 \u5206\u5e03\u5f0f SQL Server \u7f13\u5b58"),(0,r.kt)("p",null,"\u5206\u5e03\u5f0f ",(0,r.kt)("inlineCode",{parentName:"p"},"SQL Server")," \u7f13\u5b58\u5b9e\u73b0 (",(0,r.kt)("inlineCode",{parentName:"p"},"AddDistributedSqlServerCache"),") \u5141\u8bb8\u5206\u5e03\u5f0f\u7f13\u5b58\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"SQL Server")," \u6570\u636e\u5e93\u4f5c\u4e3a\u5176\u540e\u5907\u5b58\u50a8\u3002"),(0,r.kt)("p",null,"\u82e5\u8981\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"SQL Server")," \u5b9e\u4f8b\u4e2d\u521b\u5efa ",(0,r.kt)("inlineCode",{parentName:"p"},"SQL Server")," \u7f13\u5b58\u7684\u9879\u8868\uff0c\u53ef\u4ee5\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"sql-cache")," \u5de5\u5177\u3002 \u8be5\u5de5\u5177\u5c06\u521b\u5efa\u4e00\u4e2a\u8868\uff0c\u5176\u4e2d\u5305\u542b\u6307\u5b9a\u7684\u540d\u79f0\u548c\u67b6\u6784\u3002"),(0,r.kt)("p",null,"\u901a\u8fc7\u8fd0\u884c\u547d\u4ee4 ",(0,r.kt)("inlineCode",{parentName:"p"},"sql-cache create")," \u521b\u5efa\u4e00\u4e2a\u8868\uff0c\u63d0\u4f9b ",(0,r.kt)("inlineCode",{parentName:"p"},"SQL Server")," \u5b9e\u4f8b (Data Source) \u3001\u6570\u636e\u5e93 (Initial Catalog) \u3001\u67b6\u6784 (\u4f8b\u5982) dbo \u548c\u8868\u540d\u79f0\u3002\u4f8b\u5982 ",(0,r.kt)("inlineCode",{parentName:"p"},"TestCache"),"\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},'dotnet sql-cache create "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=DistCache;Integrated Security=True;" dbo TestCache\n')),(0,r.kt)("p",null,"\u521b\u5efa\u6210\u529f\u540e\uff0c\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u6ce8\u518c\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'services.AddDistributedSqlServerCache(options =>\n{\n options.ConnectionString =\n _config["DistCache_ConnectionString"];\n options.SchemaName = "dbo";\n options.TableName = "TestCache";\n});\n')),(0,r.kt)("h3",{id:"1445-\u5206\u5e03\u5f0f-redis-\u7f13\u5b58"},"14.4.5 \u5206\u5e03\u5f0f ",(0,r.kt)("inlineCode",{parentName:"h3"},"Redis")," \u7f13\u5b58"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Redis")," \u662f\u5185\u5b58\u4e2d\u6570\u636e\u5b58\u50a8\u7684\u5f00\u6e90\u6570\u636e\u5b58\u50a8\uff0c\u901a\u5e38\u7528\u4f5c\u5206\u5e03\u5f0f\u7f13\u5b58\u3002\u5728\u4f7f\u7528\u65f6\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"services.AddStackExchangeRedisCache()")," \u4e2d\u6ce8\u518c\u5373\u53ef\u3002"),(0,r.kt)("p",null,"\u8fd9\u91cc\u4e0d\u7ec6\u8bb2 ",(0,r.kt)("inlineCode",{parentName:"p"},"Redis")," \u76f8\u5173\u5185\u5bb9\uff0c\u540e\u7eed\u7ae0\u8282\u4f1a\u4f7f\u7528\u57fa\u672c\u4f8b\u5b50\u6f14\u793a\u3002"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Redis")," \u57fa\u672c\u914d\u7f6e\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'services.AddStackExchangeRedisCache(options =>\n{\n // \u8fde\u63a5\u5b57\u7b26\u4e32\uff0c\u8fd9\u91cc\u4e5f\u53ef\u4ee5\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\n options.Configuration = "192.168.111.134,password=aW1HAyupRKmiZn3Q";\n // \u952e\u540d\u524d\u7f00\n options.InstanceName = "furion_";\n});\n')),(0,r.kt)("h3",{id:"1446-\u5206\u5e03\u5f0f-ncache-\u7f13\u5b58"},"14.4.6 \u5206\u5e03\u5f0f ",(0,r.kt)("inlineCode",{parentName:"h3"},"NCache")," \u7f13\u5b58"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"NCache")," \u662f\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},".NET")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},".Net Core")," \u4e2d\u4ee5\u672c\u673a\u65b9\u5f0f\u5f00\u53d1\u7684\u5f00\u6e90\u5185\u5b58\u4e2d\u5206\u5e03\u5f0f\u7f13\u5b58\u3002 ",(0,r.kt)("inlineCode",{parentName:"p"},"NCache")," \u5728\u672c\u5730\u5de5\u4f5c\u5e76\u914d\u7f6e\u4e3a\u5206\u5e03\u5f0f\u7f13\u5b58\u7fa4\u96c6\uff0c\u9002\u7528\u4e8e\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Azure")," \u6216\u5176\u4ed6\u6258\u7ba1\u5e73\u53f0\u4e0a\u8fd0\u884c\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u5e94\u7528\u3002\n\u82e5\u8981\u5728\u672c\u5730\u8ba1\u7b97\u673a\u4e0a\u5b89\u88c5\u548c\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"NCache"),"\uff0c\u8bf7\u53c2\u9605 ",(0,r.kt)("a",{parentName:"p",href:"https://www.alachisoft.com/resources/docs/ncache-oss/getting-started-guide-windows/"},"\u9002\u7528\u4e8e Windows \u7684 NCache \u5165\u95e8\u6307\u5357"),"\u3002"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"NCache")," \u57fa\u672c\u914d\u7f6e\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"li"},"Alachisoft.NCache.OpenSource.SDK")," \u5305"),(0,r.kt)("li",{parentName:"ul"},"\u5728 ",(0,r.kt)("a",{parentName:"li",href:"https://www.alachisoft.com/resources/docs/ncache-oss/admin-guide/client-config.html"},"ncconf")," \u4e2d\u914d\u7f6e\u7f13\u5b58\u7fa4\u96c6"),(0,r.kt)("li",{parentName:"ul"},"\u6ce8\u518c ",(0,r.kt)("inlineCode",{parentName:"li"},"NCache")," \u670d\u52a1")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'services.AddNCacheDistributedCache(configuration =>\n{\n configuration.CacheName = "demoClusteredCache";\n configuration.EnableLogs = true;\n configuration.ExceptionsEnabled = true;\n});\n')),(0,r.kt)("h2",{id:"145-\u5206\u5e03\u5f0f\u7f13\u5b58\u4f7f\u7528"},"14.5 \u5206\u5e03\u5f0f\u7f13\u5b58\u4f7f\u7528"),(0,r.kt)("p",null,"\u82e5\u8981\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"IDistributedCache")," \u63a5\u53e3\uff0c\u8bf7 ",(0,r.kt)("inlineCode",{parentName:"p"},"IDistributedCache")," \u901a\u8fc7\u6784\u9020\u51fd\u6570\u4f9d\u8d56\u5173\u7cfb\u6ce8\u5165\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,16,30-33}",showLineNumbers:!0,"":!0,"{5,16,30-33}":!0},'public class IndexModel : PageModel\n{\n private readonly IDistributedCache _cache;\n\n public IndexModel(IDistributedCache cache)\n {\n _cache = cache;\n }\n\n public string CachedTimeUTC { get; set; }\n\n public async Task OnGetAsync()\n {\n CachedTimeUTC = "Cached Time Expired";\n // \u83b7\u53d6\u5206\u5e03\u5f0f\u7f13\u5b58\n var encodedCachedTimeUTC = await _cache.GetAsync("cachedTimeUTC");\n\n if (encodedCachedTimeUTC != null)\n {\n CachedTimeUTC = Encoding.UTF8.GetString(encodedCachedTimeUTC);\n }\n }\n\n public async Task OnPostResetCachedTime()\n {\n var currentTimeUTC = DateTime.UtcNow.ToString();\n byte[] encodedCurrentTimeUTC = Encoding.UTF8.GetBytes(currentTimeUTC);\n\n // \u8bbe\u7f6e\u5206\u5e03\u5f0f\u7f13\u5b58\n var options = new DistributedCacheEntryOptions()\n .SetSlidingExpiration(TimeSpan.FromSeconds(20));\n\n await _cache.SetAsync("cachedTimeUTC", encodedCurrentTimeUTC, options);\n\n return RedirectToPage();\n }\n}\n')),(0,r.kt)("h2",{id:"146-\u5206\u5e03\u5f0f\u7f13\u5b58\u5efa\u8bae"},"14.6 \u5206\u5e03\u5f0f\u7f13\u5b58\u5efa\u8bae"),(0,r.kt)("p",null,"\u786e\u5b9a ",(0,r.kt)("inlineCode",{parentName:"p"},"IDistributedCache")," \u6700\u9002\u5408\u4f60\u7684\u5e94\u7528\u7684\u5b9e\u73b0\u65f6\uff0c\u8bf7\u8003\u8651\u4ee5\u4e0b\u4e8b\u9879\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u73b0\u6709\u57fa\u7840\u7ed3\u6784"),(0,r.kt)("li",{parentName:"ul"},"\u6027\u80fd\u8981\u6c42"),(0,r.kt)("li",{parentName:"ul"},"\u6210\u672c"),(0,r.kt)("li",{parentName:"ul"},"\u56e2\u961f\u7ecf\u9a8c")),(0,r.kt)("p",null,"\u7f13\u5b58\u89e3\u51b3\u65b9\u6848\u901a\u5e38\u4f9d\u8d56\u4e8e\u5185\u5b58\u4e2d\u7684\u5b58\u50a8\u4ee5\u5feb\u901f\u68c0\u7d22\u7f13\u5b58\u7684\u6570\u636e\uff0c\u4f46\u662f\uff0c\u5185\u5b58\u662f\u6709\u9650\u7684\u8d44\u6e90\uff0c\u5e76\u4e14\u5f88\u6602\u8d35\u3002 \u4ec5\u5c06\u5e38\u7528\u6570\u636e\u5b58\u50a8\u5728\u7f13\u5b58\u4e2d\u3002"),(0,r.kt)("p",null,"\u901a\u5e38\uff0c",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"Redis")," \u7f13\u5b58\u63d0\u4f9b\u6bd4 ",(0,r.kt)("inlineCode",{parentName:"strong"},"SQL Server")," \u7f13\u5b58\u66f4\u9ad8\u7684\u541e\u5410\u91cf\u548c\u66f4\u4f4e\u7684\u5ef6\u8fdf\u3002")," \u4f46\u662f\uff0c\u901a\u5e38\u9700\u8981\u8fdb\u884c\u57fa\u51c6\u6d4b\u8bd5\u6765\u786e\u5b9a\u7f13\u5b58\u7b56\u7565\u7684\u6027\u80fd\u7279\u5f81\u3002"),(0,r.kt)("p",null,"\u5f53 ",(0,r.kt)("inlineCode",{parentName:"p"},"SQL Server")," \u7528\u4f5c\u5206\u5e03\u5f0f\u7f13\u5b58\u540e\u5907\u5b58\u50a8\u65f6\uff0c\u5bf9\u7f13\u5b58\u4f7f\u7528\u540c\u4e00\u6570\u636e\u5e93\uff0c\u5e76\u4e14\u5e94\u7528\u7684\u666e\u901a\u6570\u636e\u5b58\u50a8\u548c\u68c0\u7d22\u4f1a\u5bf9\u8fd9\u4e24\u79cd\u60c5\u51b5\u7684\u6027\u80fd\u4ea7\u751f\u8d1f\u9762\u5f71\u54cd\u3002 \u5efa\u8bae\u4f7f\u7528\u5206\u5e03\u5f0f\u7f13\u5b58\u540e\u5907\u5b58\u50a8\u7684\u4e13\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"SQL Server")," \u5b9e\u4f8b\u3002"),(0,r.kt)("h2",{id:"147-\u53cd\u9988\u4e0e\u5efa\u8bae"},"14.7 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,r.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,r.kt)("hr",null),(0,r.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5206\u5e03\u5f0f\u7f13\u5b58")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed?view=aspnetcore-5.0"},"ASP.NET Core - \u5206\u5e03\u5f0f\u7f13\u5b58")," \u7ae0\u8282\u3002")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/093b1cf0.ad185a6d.js b/handbook/build/assets/js/093b1cf0.ad185a6d.js new file mode 100644 index 00000000000..3b1ee247080 --- /dev/null +++ b/handbook/build/assets/js/093b1cf0.ad185a6d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[5786],{3905:function(e,n,t){t.d(n,{Zo:function(){return m},kt:function(){return d}});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=r.createContext({}),p=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},m=function(e){var n=p(e.components);return r.createElement(l.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},c=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=p(t),d=a,k=c["".concat(l,".").concat(d)]||c[d]||u[d]||o;return t?r.createElement(k,i(i({ref:n},m),{},{components:t})):r.createElement(k,i({ref:n},m))}));function d(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,i=new Array(o);i[0]=c;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var p=2;p\u4e3b\u5e93 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587",id:"92721-\u521b\u5efa-\u4e3b\u5e93-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",level:3},{value:"9.27.2.2 \u521b\u5efa \u4ece\u5e93 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587",id:"92722-\u521b\u5efa-\u4ece\u5e93-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",level:3},{value:"9.27.2.3 \u6ce8\u518c \u4e3b\u4ece\u5e93 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587",id:"92723-\u6ce8\u518c-\u4e3b\u4ece\u5e93-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",level:3},{value:"9.27.2.4 \u521b\u5efa Person \u5b9e\u4f53",id:"92724-\u521b\u5efa-person-\u5b9e\u4f53",level:3},{value:"9.27.2.5 \u5c06 Person \u8f6c\u6362\u6210\u6570\u636e\u5e93\u8868",id:"92725-\u5c06-person-\u8f6c\u6362\u6210\u6570\u636e\u5e93\u8868",level:3},{value:"9.27.2.6 \u56fa\u5b9a\u4e3b\u4ece\u5e93\u4f7f\u7528\u4f8b\u5b50",id:"92726-\u56fa\u5b9a\u4e3b\u4ece\u5e93\u4f7f\u7528\u4f8b\u5b50",level:3},{value:"9.27.2.7 \u968f\u673a\u6216 \u81ea\u5b9a\u4e49\u8fd4\u56de\u4ece\u5e93 \u2728",id:"92727-\u968f\u673a\u6216-\u81ea\u5b9a\u4e49\u8fd4\u56de\u4ece\u5e93-",level:3},{value:"9.27.3 \u4e3b\u4ece\u590d\u5236",id:"9273-\u4e3b\u4ece\u590d\u5236",level:2},{value:"9.27.4 \u4e3b\u4ece\u590d\u5236\u51e0\u79cd\u65b9\u5f0f",id:"9274-\u4e3b\u4ece\u590d\u5236\u51e0\u79cd\u65b9\u5f0f",level:2},{value:"9.27.4.1 \u540c\u6b65\u590d\u5236",id:"92741-\u540c\u6b65\u590d\u5236",level:3},{value:"9.27.4.2 \u5f02\u6b65\u590d\u5236",id:"92742-\u5f02\u6b65\u590d\u5236",level:3},{value:"9.27.4.3 \u534a\u540c\u6b65\u590d\u5236",id:"92743-\u534a\u540c\u6b65\u590d\u5236",level:3},{value:"9.27.5 SqlServer \u4e3b\u5e93\u914d\u7f6e",id:"9275-sqlserver-\u4e3b\u5e93\u914d\u7f6e",level:2},{value:"9.27.5.1 \u6dfb\u52a0 \u672c\u5730\u53d1\u5e03",id:"92751-\u6dfb\u52a0-\u672c\u5730\u53d1\u5e03",level:3},{value:"9.27.5.2 \u9009\u62e9 \u5206\u53d1\u670d\u52a1\u5668",id:"92752-\u9009\u62e9-\u5206\u53d1\u670d\u52a1\u5668",level:3},{value:"9.27.5.3 \u542f\u7528 \u4ee3\u7406",id:"92753-\u542f\u7528-\u4ee3\u7406",level:3},{value:"9.27.5.4 \u53d1\u5e03\u6570\u636e\u5e93",id:"92754-\u53d1\u5e03\u6570\u636e\u5e93",level:3},{value:"9.27.5.5 \u5feb\u7167\u53d1\u5e03",id:"92755-\u5feb\u7167\u53d1\u5e03",level:3},{value:"9.27.5.6 \u9009\u62e9\u53d1\u5e03\u9879\u76ee",id:"92756-\u9009\u62e9\u53d1\u5e03\u9879\u76ee",level:3},{value:"9.27.5.7 \u914d\u7f6e\u5206\u53d1\u8ba1\u5212",id:"92757-\u914d\u7f6e\u5206\u53d1\u8ba1\u5212",level:3},{value:"9.27.5.8 \u914d\u7f6e\u5b89\u5168\u8bbe\u7f6e",id:"92758-\u914d\u7f6e\u5b89\u5168\u8bbe\u7f6e",level:3},{value:"9.27.5.9 \u5b8c\u6210\u914d\u7f6e",id:"92759-\u5b8c\u6210\u914d\u7f6e",level:3},{value:"9.27.6 SqlServer \u4ece\u5e93\u914d\u7f6e",id:"9276-sqlserver-\u4ece\u5e93\u914d\u7f6e",level:2},{value:"9.27.6.1 \u6dfb\u52a0 \u672c\u5730\u8ba2\u9605",id:"92761-\u6dfb\u52a0-\u672c\u5730\u8ba2\u9605",level:3},{value:"9.27.6.2 \u9009\u62e9 \u5206\u53d1\u670d\u52a1\u5668",id:"92762-\u9009\u62e9-\u5206\u53d1\u670d\u52a1\u5668",level:3},{value:"9.27.6.3 \u9009\u62e9 \u5206\u53d1\u4ee3\u7406\u4f4d\u7f6e",id:"92763-\u9009\u62e9-\u5206\u53d1\u4ee3\u7406\u4f4d\u7f6e",level:3},{value:"9.27.6.4 \u9009\u62e9 \u8ba2\u9605\u6570\u636e\u5e93",id:"92764-\u9009\u62e9-\u8ba2\u9605\u6570\u636e\u5e93",level:3},{value:"9.27.6.5 \u9009\u62e9 \u5206\u53d1\u5b89\u5168\u8bbe\u7f6e",id:"92765-\u9009\u62e9-\u5206\u53d1\u5b89\u5168\u8bbe\u7f6e",level:3},{value:"9.27.6.6 \u9009\u62e9 \u540c\u6b65\u8ba1\u5212",id:"92766-\u9009\u62e9-\u540c\u6b65\u8ba1\u5212",level:3},{value:"9.27.6.7 \u5b8c\u6210\u8ba2\u9605",id:"92767-\u5b8c\u6210\u8ba2\u9605",level:3},{value:"9.27.7 \u5206\u53d1\u5b9a\u4e49\u76d1\u89c6",id:"9277-\u5206\u53d1\u5b9a\u4e49\u76d1\u89c6",level:2},{value:"9.27.8 \u67e5\u770b\u4e3b\u4ece\u590d\u5236\u7ed3\u679c",id:"9278-\u67e5\u770b\u4e3b\u4ece\u590d\u5236\u7ed3\u679c",level:2},{value:"9.27.9 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"9279-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:c};function k(e){var n=e.components,t=(0,a.Z)(e,s);return(0,o.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"9271-\u8bfb\u5199\u5206\u79bb"},"9.27.1 \u8bfb\u5199\u5206\u79bb"),(0,o.kt)("p",null,"\u5176\u5b9e\u5c31\u662f\u5c06\u6570\u636e\u5e93\u5206\u4e3a\u4e86\u4e3b\u4ece\u5e93\uff0c\u4e00\u4e2a\u4e3b\u5e93\u7528\u4e8e\u5199\u6570\u636e\uff0c\u591a\u4e2a\u4ece\u5e93\u5b8c\u6210\u8bfb\u6570\u636e\u7684\u64cd\u4f5c\uff0c\u4e3b\u4ece\u5e93\u4e4b\u95f4\u901a\u8fc7\u67d0\u79cd\u673a\u5236\u8fdb\u884c\u6570\u636e\u7684\u540c\u6b65\uff0c\u662f\u4e00\u79cd\u5e38\u89c1\u7684\u6570\u636e\u5e93\u67b6\u6784\u3002"),(0,o.kt)("img",{src:(0,i.Z)("img/readwrite.png"),style:{height:300}}),(0,o.kt)("h3",{id:"92711-\u89e3\u51b3\u4e86\u4ec0\u4e48\u95ee\u9898"},"9.27.1.1 \u89e3\u51b3\u4e86\u4ec0\u4e48\u95ee\u9898"),(0,o.kt)("p",null,"\u5927\u591a\u6570\u4e92\u8054\u7f51\u4e1a\u52a1\uff0c\u5f80\u5f80\u8bfb\u591a\u5199\u5c11\uff0c\u8fd9\u65f6\u5019\uff0c\u6570\u636e\u5e93\u7684\u8bfb\u4f1a\u9996\u5148\u6210\u4e3a\u6570\u636e\u5e93\u7684\u74f6\u9888\uff0c\u8fd9\u65f6\uff0c\u5982\u679c\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u7ebf\u6027\u7684\u63d0\u5347\u6570\u636e\u5e93\u7684\u8bfb\u6027\u80fd\uff0c\u6d88\u9664\u8bfb\u5199\u9501\u51b2\u7a81\u4ece\u800c\u63d0\u5347\u6570\u636e\u5e93\u7684\u5199\u6027\u80fd\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u4f7f\u7528\u201c\u5206\u7ec4\u67b6\u6784\u201d\uff08\u8bfb\u5199\u5206\u79bb\u67b6\u6784\uff09\u3002"),(0,o.kt)("p",null,"\u7528\u4e00\u53e5\u8bdd\u6982\u62ec\uff0c\u8bfb\u5199\u5206\u79bb\u662f\u7528\u6765\u89e3\u51b3\u6570\u636e\u5e93\u7684\u8bfb\u6027\u80fd\u74f6\u9888\u7684\u3002"),(0,o.kt)("h3",{id:"92712-\u6ce8\u610f\u4e8b\u9879"},"9.27.1.2 \u6ce8\u610f\u4e8b\u9879"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u6570\u636e\u5e93\u8fde\u63a5\u6c60\u8981\u8fdb\u884c\u533a\u5206\uff0c\u54ea\u4e9b\u662f\u8bfb\u8fde\u63a5\u6c60\uff0c\u54ea\u4e2a\u662f\u5199\u8fde\u63a5\u6c60\uff0c\u7814\u53d1\u7684\u96be\u5ea6\u4f1a\u589e\u52a0\uff1b"),(0,o.kt)("li",{parentName:"ul"},"\u4e3a\u4e86\u4fdd\u8bc1\u9ad8\u53ef\u7528\uff0c\u8bfb\u8fde\u63a5\u6c60\u8981\u80fd\u591f\u5b9e\u73b0\u6545\u969c\u81ea\u52a8\u8f6c\u79fb\uff1b"),(0,o.kt)("li",{parentName:"ul"},"\u4e3b\u4ece\u7684\u4e00\u81f4\u6027\u95ee\u9898\u9700\u8981\u8003\u8651\u3002")),(0,o.kt)("h2",{id:"9272-\u5982\u4f55\u5b9e\u73b0"},"9.27.2 \u5982\u4f55\u5b9e\u73b0"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u5728\u6570\u636e\u5e93\u6a21\u5757\u8bbe\u8ba1\u4e4b\u521d\uff0c\u5c31\u8003\u8651\u4e86\u8bfb\u5199\u5206\u79bb\u8fd9\u79cd\u60c5\u51b5\uff0c\u6240\u4ee5\u4ece\u5e95\u5c42\u5c31\u652f\u6301\u52a8\u6001\u5207\u6362\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u53ca\u8bfb\u5199\u64cd\u4f5c\u65b9\u6cd5\u7ea6\u675f\u3002"),(0,o.kt)("p",null,"\u8bfb\u5199\u5206\u79bb\u64cd\u4f5c\u4e3b\u8981\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"IMSRepository")," \u4ed3\u50a8\uff0c\u8be5\u4ed3\u50a8\u5df2\u7ecf\u4e3a\u5f00\u53d1\u8005\u63d0\u4f9b\u65b9\u4fbf\u7684\u64cd\u4f5c\u8c03\u7528\u3002\u5f53\u7136\u4e5f\u53ef\u4ee5\u4e0d\u4f7f\u7528\u8be5\u4ed3\u50a8\u3002"),(0,o.kt)("p",null,"\u4e0b\u9762\u5c31\u7ed9\u5927\u5bb6\u6f14\u793a\u5982\u4f55\u8bfb\u5199\u591a\u5e93\u8bfb\u5199\u64cd\u4f5c\u3002"),(0,o.kt)("h3",{id:"92721-\u521b\u5efa-\u4e3b\u5e93-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"9.27.2.1 \u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u4e3b\u5e93")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n /// \n /// \u4e3b\u5e93\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\n /// \n [AppDbContext("MasterConnectionString")]\n public class MasterDbContext : AppDbContext\n {\n public MasterDbContext(DbContextOptions options) : base(options)\n {\n }\n }\n}\n')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "ConnectionStrings": {\n "MasterConnectionString": "Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;"\n }\n}\n')),(0,o.kt)("h3",{id:"92722-\u521b\u5efa-\u4ece\u5e93-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"9.27.2.2 \u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u4ece\u5e93")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11}",showLineNumbers:!0,"":!0,"{11}":!0},'using Furion.Core;\nusing Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n /// \n /// \u4ece\u5e93\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\n /// \n [AppDbContext("SlaveConnectionString")]\n public class SlaveDbContext : AppDbContext\n {\n public SlaveDbContext(DbContextOptions options) : base(options)\n {\n }\n }\n}\n')),(0,o.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u591a\u6570\u636e\u5e93\u64cd\u4f5c\u9664\u4e86\u9ed8\u8ba4\u6570\u636e\u5e93\u65e0\u9700\u81ea\u5b9a\u4e49 ",(0,o.kt)("strong",{parentName:"p"},"\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668"),"\uff0c\u5176\u4ed6\u6570\u636e\u5e93\u90fd\u9700\u8981\u6709\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\u3002\u5982 ",(0,o.kt)("inlineCode",{parentName:"p"},"SlaveDbContextLocator"))),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u4ece\u5e93\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8}",showLineNumbers:!0,"":!0,"{8}":!0},"using Furion.DatabaseAccessor;\n\nnamespace Furion.Core\n{\n /// \n /// \u4ece\u5e93\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\n /// \n public class SlaveDbContextLocator : IDbContextLocator\n {\n }\n}\n")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "ConnectionStrings": {\n "SlaveConnectionString": "Server=localhost;Database=FurSlave;User=sa;Password=000000;MultipleActiveResultSets=True;"\n }\n}\n')),(0,o.kt)("h3",{id:"92723-\u6ce8\u518c-\u4e3b\u4ece\u5e93-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"9.27.2.3 \u6ce8\u518c ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u4e3b\u4ece\u5e93")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13-14}",showLineNumbers:!0,"":!0,"{13-14}":!0},"using Furion.Core;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppStartup(600)]\n public sealed class FurEntityFrameworkCoreStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddDatabaseAccessor(options =>\n {\n services.AddDbPool();\n services.AddDbPool();\n });\n }\n }\n}\n")),(0,o.kt)("h3",{id:"92724-\u521b\u5efa-person-\u5b9e\u4f53"},"9.27.2.4 \u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"h3"},"Person")," \u5b9e\u4f53"),(0,o.kt)("p",null,"\u7531\u4e8e ",(0,o.kt)("inlineCode",{parentName:"p"},"\u4e3b\u4ece\u5e93")," \u5177\u6709\u76f8\u540c\u7684\u6570\u636e\u5e93\u7ed3\u6784\uff0c\u6240\u4ee5\u5b9e\u4f53\u4e5f\u5fc5\u987b\u58f0\u660e ",(0,o.kt)("inlineCode",{parentName:"p"},"\u4e3b\u4ece\u5e93"),"\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7}",showLineNumbers:!0,"":!0,"{7}":!0},"using Furion.DatabaseAccessor;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel.DataAnnotations.Schema;\n\nnamespace Furion.Core\n{\n public class Person : IEntity\n {\n /// \n /// \u4e3b\u952eId\n /// \n [Key]\n [DatabaseGenerated(DatabaseGeneratedOption.Identity)]\n public int Id { get; set; }\n\n /// \n /// \u540d\u79f0\n /// \n public string Name { get; set; }\n\n /// \n /// \u5e74\u9f84\n /// \n public int Age { get; set; }\n }\n}\n")),(0,o.kt)("h3",{id:"92725-\u5c06-person-\u8f6c\u6362\u6210\u6570\u636e\u5e93\u8868"},"9.27.2.5 \u5c06 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Person")," \u8f6c\u6362\u6210\u6570\u636e\u5e93\u8868"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u521b\u5efa\u4e3b\u5e93\u6570\u636e\u5e93\u8868\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Add-Migration v0.0.1 -Context MasterDbContext\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Update-Database -Context MasterDbContext\n")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u521b\u5efa\u4ece\u5e93\u6570\u636e\u5e93\u8868\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Add-Migration v0.0.1 -Context SlaveDbContext\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Update-Database -Context SlaveDbContext\n")),(0,o.kt)("img",{src:(0,i.Z)("img/readwrite1.png")}),(0,o.kt)("img",{src:(0,i.Z)("img/readwrite2.png")}),(0,o.kt)("h3",{id:"92726-\u56fa\u5b9a\u4e3b\u4ece\u5e93\u4f7f\u7528\u4f8b\u5b50"},"9.27.2.6 \u56fa\u5b9a\u4e3b\u4ece\u5e93\u4f7f\u7528\u4f8b\u5b50"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13,19,31,40}",showLineNumbers:!0,"":!0,"{13,19,31,40}":!0},'using Furion.Core;\nusing Furion.DatabaseAccessor;\nusing Furion.DynamicApiController;\nusing System.Collections.Generic;\n\nnamespace Furion.Application\n{\n public class PersonService : IDynamicApiController\n {\n /// \n /// \u53ef\u8c03\u914d\u4ed3\u50a8\uff08\u8bfb\u5199\u5206\u79bb\uff09\n /// \n private readonly IMSRepository _msRepository;\n\n /// \n /// \u6784\u9020\u51fd\u6570\u521d\u59cb\u5316\n /// \n /// \n public PersonService(IMSRepository msRepository)\n {\n _msRepository = msRepository;\n }\n\n /// \n /// \u65b0\u589e\u8d70\u4e3b\u5e93\n /// \n /// \n /// \n public void Insert(Person person)\n {\n _msRepository.Master().Insert(person);\n }\n\n /// \n /// \u67e5\u8be2\u8d70\u4ece\u5e93\n /// \n /// \n public List Get()\n {\n return _msRepository.Slave1().AsEnumerable().ToList();\n }\n }\n}\n')),(0,o.kt)("h3",{id:"92727-\u968f\u673a\u6216-\u81ea\u5b9a\u4e49\u8fd4\u56de\u4ece\u5e93-"},"9.27.2.7 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u968f\u673a"),"\u6216 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u81ea\u5b9a\u4e49"),"\u8fd4\u56de\u4ece\u5e93 \u2728"),(0,o.kt)("p",null,"\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion 2.4.1 + ")," \u7248\u672c\u65b0\u589e\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"IMSRepository")," \u548c ",(0,o.kt)("inlineCode",{parentName:"p"},"IMSRepository")," \u4ed3\u50a8\u7c7b\u578b\uff0c\u53ef\u4ee5\u83b7\u53d6\u968f\u673a\u4ed3\u50a8\u6216\u81ea\u5b9a\u4e49\u4ed3\u50a8\u3002\u4f7f\u7528\u4f8b\u5b50\u5982\u4e0b\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u914d\u7f6e \u4e3b\u5e93 ",(0,o.kt)("inlineCode",{parentName:"li"},"[AppDbContext]")," \u7279\u6027\u7684 ",(0,o.kt)("inlineCode",{parentName:"li"},"SlaveDbContextLocators")," \u5c5e\u6027\uff0c\u53ef\u901a\u8fc7\u6784\u9020\u51fd\u6570\u6700\u540e\u53c2\u6570\u4f20\u5165\uff0c\u5982\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6}",showLineNumbers:!0,"":!0,"{6}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite, typeof(\u4ece\u5e93\u5b9a\u4f4d\u56681), typeof(\u4ece\u5e93\u5b9a\u4f4d\u56682), typeof(\u4ece\u5e93\u5b9a\u4f4d\u56683))]\n public class MasterDbContext : AppDbContext\n {\n public MasterDbContext(DbContextOptions options) : base(options)\n {\n }\n }\n}\n')),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"li"},"IMSRepository")," \u6216 ",(0,o.kt)("inlineCode",{parentName:"li"},"IMSRepository"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13,19,31,40,49-53}",showLineNumbers:!0,"":!0,"{13,19,31,40,49-53}":!0},'using Furion.Core;\nusing Furion.DatabaseAccessor;\nusing Furion.DynamicApiController;\nusing System.Collections.Generic;\n\nnamespace Furion.Application\n{\n public class PersonService : IDynamicApiController\n {\n /// \n /// \u53ef\u8c03\u914d\u4ed3\u50a8\uff08\u8bfb\u5199\u5206\u79bb\uff09\n /// \n private readonly IMSRepository _msRepository; // \u4e0d\u6307\u5b9a\u5b9a\u4f4d\u5668\uff0c\u9ed8\u8ba4\u662f MasterDbContextLocator\n\n /// \n /// \u6784\u9020\u51fd\u6570\u521d\u59cb\u5316\n /// \n /// \n public PersonService(IMSRepository msRepository)\n {\n _msRepository = msRepository;\n }\n\n /// \n /// \u65b0\u589e\u8d70\u4e3b\u5e93\n /// \n /// \n /// \n public void Insert(Person person)\n {\n _msRepository.Master().Insert(person);\n }\n\n /// \n /// \u968f\u673a\u4ece\u5e93\n /// \n /// \n public List Get()\n {\n return _msRepository.Slave().AsEnumerable().ToList();\n }\n\n /// \n /// \u81ea\u5b9a\u4e49\u4ece\u5e93\n /// \n /// \n public List Get()\n {\n return _msRepository.Slave(() => {\n // \u8fd9\u91cc\u5199\u4f60\u7684\u903b\u8f91\u8fd4\u56de\u4ece\u5e93\u5b9a\u4f4d\u5668\n\n return \u4f60\u7684\u4ece\u5e93\u5b9a\u4f4d\u5668;\n }).AsEnumerable().ToList();\n }\n }\n}\n')),(0,o.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"IMSRepository")," \u4e0d\u5e26\u6cdb\u578b\u9ed8\u8ba4\u6307\u7684\u662f ",(0,o.kt)("inlineCode",{parentName:"p"},"IMSRepository"),"\uff0c\u5982\u9700\u6cdb\u578b\u7248\u672c\uff0c\u5219\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"IMSRepository<\u5b9a\u4f4d\u5668>"))),(0,o.kt)("h2",{id:"9273-\u4e3b\u4ece\u590d\u5236"},"9.27.3 \u4e3b\u4ece\u590d\u5236"),(0,o.kt)("p",null,"\u4e3b\u4ece\u590d\u5236\uff1a\u662f\u4e00\u79cd\u6570\u636e\u5907\u4efd\u7684\u65b9\u6848\u3002"),(0,o.kt)("p",null,"\u7b80\u5355\u6765\u8bf4\uff0c\u662f\u4f7f\u7528\u4e24\u4e2a\u6216\u4e24\u4e2a\u4ee5\u4e0a\u76f8\u540c\u7684\u6570\u636e\u5e93\uff0c\u5c06\u4e00\u4e2a\u6570\u636e\u5e93\u5f53\u505a\u4e3b\u6570\u636e\u5e93\uff0c\u800c\u53e6\u4e00\u4e2a\u6570\u636e\u5e93\u5f53\u505a\u4ece\u6570\u636e\u5e93\u3002",(0,o.kt)("strong",{parentName:"p"},"\u5728\u4e3b\u6570\u636e\u5e93\u4e2d\u8fdb\u884c\u76f8\u5e94\u64cd\u4f5c\u65f6\uff0c\u4ece\u6570\u636e\u5e93\u8bb0\u5f55\u4e0b\u6240\u6709\u4e3b\u6570\u636e\u5e93\u7684\u64cd\u4f5c\uff0c\u4f7f\u5176\u4e8c\u8005\u4e00\u6a21\u4e00\u6837\u3002")),(0,o.kt)("h2",{id:"9274-\u4e3b\u4ece\u590d\u5236\u51e0\u79cd\u65b9\u5f0f"},"9.27.4 \u4e3b\u4ece\u590d\u5236\u51e0\u79cd\u65b9\u5f0f"),(0,o.kt)("h3",{id:"92741-\u540c\u6b65\u590d\u5236"},"9.27.4.1 \u540c\u6b65\u590d\u5236"),(0,o.kt)("p",null,"\u6240\u8c13\u7684\u540c\u6b65\u590d\u5236\uff0c\u610f\u601d\u662f ",(0,o.kt)("inlineCode",{parentName:"p"},"Master")," \u7684\u53d8\u5316\uff0c\u5fc5\u987b\u7b49\u5f85 ",(0,o.kt)("inlineCode",{parentName:"p"},"Slave-1\uff0cSlave-2\uff0c...\uff0cSlave-n")," \u5b8c\u6210\u540e\u624d\u80fd\u8fd4\u56de\u3002\n\u8fd9\u6837\uff0c\u663e\u7136\u4e0d\u53ef\u53d6\uff0c\u6bd4\u5982\uff0c\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Web")," \u524d\u7aef\u9875\u9762\u4e0a\uff0c\u7528\u6237\u589e\u52a0\u4e86\u6761\u8bb0\u5f55\uff0c\u9700\u8981\u7b49\u5f85\u5f88\u957f\u65f6\u95f4\u3002"),(0,o.kt)("h3",{id:"92742-\u5f02\u6b65\u590d\u5236"},"9.27.4.2 \u5f02\u6b65\u590d\u5236"),(0,o.kt)("p",null,"\u5982\u540c AJAX \u8bf7\u6c42\u4e00\u6837\u3002",(0,o.kt)("inlineCode",{parentName:"p"},"Master")," \u53ea\u9700\u8981\u5b8c\u6210\u81ea\u5df1\u7684\u6570\u636e\u5e93\u64cd\u4f5c\u5373\u53ef\u3002\u81f3\u4e8e ",(0,o.kt)("inlineCode",{parentName:"p"},"Slaves")," \u662f\u5426\u6536\u5230\u4e8c\u8fdb\u5236\u65e5\u5fd7\uff0c\u662f\u5426\u5b8c\u6210\u64cd\u4f5c\uff0c\u4e0d\u7528\u5173\u5fc3\u3002",(0,o.kt)("strong",{parentName:"p"},"\uff08\u63a8\u8350\u65b9\u5f0f\uff09")),(0,o.kt)("h3",{id:"92743-\u534a\u540c\u6b65\u590d\u5236"},"9.27.4.3 \u534a\u540c\u6b65\u590d\u5236"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Master")," \u53ea\u4fdd\u8bc1 ",(0,o.kt)("inlineCode",{parentName:"p"},"Slaves")," \u4e2d\u7684\u4e00\u4e2a\u64cd\u4f5c\u6210\u529f\uff0c\u5c31\u8fd4\u56de\uff0c\u5176\u4ed6 ",(0,o.kt)("inlineCode",{parentName:"p"},"Slave")," \u4e0d\u7ba1\u3002"),(0,o.kt)("p",null,"\u4e0b\u9762\u5c06\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"SqlServer")," \u7b80\u5355\u914d\u7f6e\u4e3b\u4ece\u590d\u5236\u529f\u80fd\u3002"),(0,o.kt)("h2",{id:"9275-sqlserver-\u4e3b\u5e93\u914d\u7f6e"},"9.27.5 ",(0,o.kt)("inlineCode",{parentName:"h2"},"SqlServer")," \u4e3b\u5e93\u914d\u7f6e"),(0,o.kt)("h3",{id:"92751-\u6dfb\u52a0-\u672c\u5730\u53d1\u5e03"},"9.27.5.1 \u6dfb\u52a0 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u672c\u5730\u53d1\u5e03")),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy1.png")}),(0,o.kt)("h3",{id:"92752-\u9009\u62e9-\u5206\u53d1\u670d\u52a1\u5668"},"9.27.5.2 \u9009\u62e9 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u5206\u53d1\u670d\u52a1\u5668")),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy2.png")}),(0,o.kt)("h3",{id:"92753-\u542f\u7528-\u4ee3\u7406"},"9.27.5.3 \u542f\u7528 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u4ee3\u7406")),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy3.png")}),(0,o.kt)("h3",{id:"92754-\u53d1\u5e03\u6570\u636e\u5e93"},"9.27.5.4 \u53d1\u5e03\u6570\u636e\u5e93"),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy4.png")}),(0,o.kt)("h3",{id:"92755-\u5feb\u7167\u53d1\u5e03"},"9.27.5.5 \u5feb\u7167\u53d1\u5e03"),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy5.png")}),(0,o.kt)("p",null,"\u5177\u4f53\u9009\u62e9\u4f55\u79cd\u53d1\u5e03\u7c7b\u578b\uff0c\u89c6\u5177\u4f53\u4e1a\u52a1\u573a\u666f\u800c\u5b9a\u3002"),(0,o.kt)("h3",{id:"92756-\u9009\u62e9\u53d1\u5e03\u9879\u76ee"},"9.27.5.6 \u9009\u62e9\u53d1\u5e03\u9879\u76ee"),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy6.png")}),(0,o.kt)("h3",{id:"92757-\u914d\u7f6e\u5206\u53d1\u8ba1\u5212"},"9.27.5.7 \u914d\u7f6e\u5206\u53d1\u8ba1\u5212"),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy7.png")}),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy8.png")}),(0,o.kt)("h3",{id:"92758-\u914d\u7f6e\u5b89\u5168\u8bbe\u7f6e"},"9.27.5.8 \u914d\u7f6e\u5b89\u5168\u8bbe\u7f6e"),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy9.png")}),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy10.png")}),(0,o.kt)("h3",{id:"92759-\u5b8c\u6210\u914d\u7f6e"},"9.27.5.9 \u5b8c\u6210\u914d\u7f6e"),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy11.png")}),(0,o.kt)("img",{src:(0,i.Z)("img/dbcopy12.png")}),(0,o.kt)("h2",{id:"9276-sqlserver-\u4ece\u5e93\u914d\u7f6e"},"9.27.6 ",(0,o.kt)("inlineCode",{parentName:"h2"},"SqlServer")," \u4ece\u5e93\u914d\u7f6e"),(0,o.kt)("h3",{id:"92761-\u6dfb\u52a0-\u672c\u5730\u8ba2\u9605"},"9.27.6.1 \u6dfb\u52a0 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u672c\u5730\u8ba2\u9605")),(0,o.kt)("img",{src:(0,i.Z)("img/dbrece1.png")}),(0,o.kt)("h3",{id:"92762-\u9009\u62e9-\u5206\u53d1\u670d\u52a1\u5668"},"9.27.6.2 \u9009\u62e9 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u5206\u53d1\u670d\u52a1\u5668")),(0,o.kt)("img",{src:(0,i.Z)("img/dbrece2.png")}),(0,o.kt)("h3",{id:"92763-\u9009\u62e9-\u5206\u53d1\u4ee3\u7406\u4f4d\u7f6e"},"9.27.6.3 \u9009\u62e9 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u5206\u53d1\u4ee3\u7406\u4f4d\u7f6e")),(0,o.kt)("img",{src:(0,i.Z)("img/dbrece3.png")}),(0,o.kt)("h3",{id:"92764-\u9009\u62e9-\u8ba2\u9605\u6570\u636e\u5e93"},"9.27.6.4 \u9009\u62e9 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u8ba2\u9605\u6570\u636e\u5e93")),(0,o.kt)("img",{src:(0,i.Z)("img/dbrece4.png")}),(0,o.kt)("h3",{id:"92765-\u9009\u62e9-\u5206\u53d1\u5b89\u5168\u8bbe\u7f6e"},"9.27.6.5 \u9009\u62e9 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u5206\u53d1\u5b89\u5168\u8bbe\u7f6e")),(0,o.kt)("img",{src:(0,i.Z)("img/dbrece5.png")}),(0,o.kt)("img",{src:(0,i.Z)("img/dbrece6.png")}),(0,o.kt)("h3",{id:"92766-\u9009\u62e9-\u540c\u6b65\u8ba1\u5212"},"9.27.6.6 \u9009\u62e9 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u540c\u6b65\u8ba1\u5212")),(0,o.kt)("img",{src:(0,i.Z)("img/dbrece7.png")}),(0,o.kt)("h3",{id:"92767-\u5b8c\u6210\u8ba2\u9605"},"9.27.6.7 \u5b8c\u6210\u8ba2\u9605"),(0,o.kt)("img",{src:(0,i.Z)("img/dbrece8.png")}),(0,o.kt)("h2",{id:"9277-\u5206\u53d1\u5b9a\u4e49\u76d1\u89c6"},"9.27.7 \u5206\u53d1\u5b9a\u4e49\u76d1\u89c6"),(0,o.kt)("img",{src:(0,i.Z)("img/dbrece9.png")}),(0,o.kt)("h2",{id:"9278-\u67e5\u770b\u4e3b\u4ece\u590d\u5236\u7ed3\u679c"},"9.27.8 \u67e5\u770b\u4e3b\u4ece\u590d\u5236\u7ed3\u679c"),(0,o.kt)("img",{src:(0,i.Z)("img/dbrece10.png")}),(0,o.kt)("img",{src:(0,i.Z)("img/dbrece11.png")}),(0,o.kt)("admonition",{title:"\u7279\u522b\u7279\u6027",type:"important"},(0,o.kt)("p",{parentName:"admonition"},'\u4e3b\u4ece\u590d\u5236\u6709\u4e00\u5b9a\u8fdf\u5ef6\u6027\uff0c\u6240\u4ee5\u7cfb\u7edf\u8bbe\u8ba1\u8981\u6709\u4e00\u5b9a\u201c\u5bb9\u5fcd\u6027"\u3002')),(0,o.kt)("h2",{id:"9279-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.27.9 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,o.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/09bd0aa2.19fec8d1.js b/handbook/build/assets/js/09bd0aa2.19fec8d1.js new file mode 100644 index 00000000000..3322cfc8d34 --- /dev/null +++ b/handbook/build/assets/js/09bd0aa2.19fec8d1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9013],{3905:function(e,t,n){n.d(t,{Zo:function(){return p},kt:function(){return m}});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var u=r.createContext({}),s=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(u.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,u=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=s(n),m=i,f=d["".concat(u,".").concat(m)]||d[m]||c[m]||o;return n?r.createElement(f,a(a({ref:t},p),{},{components:n})):r.createElement(f,a({ref:t},p))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=d;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l.mdxType="string"==typeof e?e:i,a[1]=l;for(var s=2;s")," \u63a5\u53e3\u5e76\u5b9e\u73b0\u5373\u53ef\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8,24}",showLineNumbers:!0,"":!0,"{8,24}":!0},"using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Metadata.Builders;\nusing System;\n\nnamespace Furion.Core\n{\n public class Person : Entity, IEntityTypeBuilder\n {\n public Person()\n {\n CreatedTime = DateTime.Now;\n IsDeleted = false;\n }\n\n public string Name { get; set; }\n\n public int Age { get; set; }\n\n public string Address { get; set; }\n\n public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)\n {\n entityBuilder.HasQueryFilter(u => !u.IsDeleted);\n }\n }\n}\n")),(0,o.kt)("h3",{id:"92322-\u5168\u5c40\u7b5b\u9009\u5668"},"9.23.2.2 \u5168\u5c40\u7b5b\u9009\u5668"),(0,o.kt)("p",null,"\u5168\u5c40\u7b5b\u9009\u5668\u53ef\u4ee5\u914d\u7f6e\u6240\u6709\u5b9e\u4f53\u5e94\u7528\u7b5b\u9009\u5668\u4e2d\uff0c\u65e0\u9700\u4e00\u4e2a\u4e00\u4e2a\u53bb\u914d\u7f6e\u3002\u4f7f\u7528\u65b9\u6cd5\u7a0d\u5fae\u6709\u4e9b\u590d\u6742\uff0c\u9700\u8981\u52a8\u6001\u6784\u5efa ",(0,o.kt)("inlineCode",{parentName:"p"},"Lambda")," \u8868\u8fbe\u5f0f\u3002"),(0,o.kt)("p",null,"\u5b9e\u73b0\u5168\u5c40\u7b5b\u9009\u5668\u4f9d\u8d56\u4e8e ",(0,o.kt)("inlineCode",{parentName:"p"},"IModelBuilderFilter")," \u63a5\u53e3\uff0c\u8be5\u63a5\u53e3\u63d0\u4f9b\u4e24\u4e2a\u65b9\u6cd5\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"OnCreating"),"\uff1a\u5b9e\u4f53\u6784\u5efa\u4e4b\u524d"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"OnCreated"),"\uff1a\u5b9e\u4f53\u6784\u5efa\u4e4b\u540e")),(0,o.kt)("p",null,"\u901a\u8fc7\u5b9e\u73b0\u8fd9\u4e24\u4e2a\u65b9\u6cd5\u5373\u53ef\u914d\u7f6e\u5168\u5c40\u8fc7\u6ee4\u5668\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {10,18-19,21,24}",showLineNumbers:!0,"":!0,"{10,18-19,21,24}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Metadata.Builders;\nusing System;\nusing System.Linq.Expressions;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("Sqlite3ConnectionString")]\n public class FurionDbContext : AppDbContext, IModelBuilderFilter\n {\n public FurionDbContext(DbContextOptions options) : base(options)\n {\n }\n\n public void OnCreating(ModelBuilder modelBuilder, EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)\n {\n // \u8bbe\u7f6e\u8f6f\u5220\u9664\u8868\u8fbe\u5f0f\n var fakeDeleteQueryFilterExpression = FakeDeleteQueryFilterExpression(entityBuilder, dbContext);\n if (fakeDeleteQueryFilterExpression == null) return;\n\n entityBuilder.HasQueryFilter(fakeDeleteQueryFilterExpression);\n }\n }\n}\n')),(0,o.kt)("admonition",{title:"\u5c0f\u5efa\u8bae",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u5982\u679c\u5bf9\u52a8\u6001\u6784\u5efa ",(0,o.kt)("inlineCode",{parentName:"p"},"LambdaExpression")," \u4e0d\u719f\u6089\u7684\u670b\u53cb\uff0c\u53ef\u4ee5\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"System.Linq.Dynamic.Core")," \u5305 ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/zzzprojects/System.Linq.Dynamic.Core"},"https://github.com/zzzprojects/System.Linq.Dynamic.Core"))),(0,o.kt)("h2",{id:"9233-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.23.3 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,o.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/0baa6b13.58f69a57.js b/handbook/build/assets/js/0baa6b13.58f69a57.js new file mode 100644 index 00000000000..7e38c00be6f --- /dev/null +++ b/handbook/build/assets/js/0baa6b13.58f69a57.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[657],{3905:function(e,n,t){t.d(n,{Zo:function(){return p},kt:function(){return m}});var i=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function l(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var c=i.createContext({}),d=function(e){var n=i.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},p=function(e){var n=d(e.components);return i.createElement(c.Provider,{value:n},e.children)},s={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},u=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),u=d(t),m=r,k=u["".concat(c,".").concat(m)]||u[m]||s[m]||a;return t?i.createElement(k,l(l({ref:n},p),{},{components:t})):i.createElement(k,l({ref:n},p))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,l=new Array(a);l[0]=u;var o={};for(var c in n)hasOwnProperty.call(n,c)&&(o[c]=n[c]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var d=2;dInject \u8bbe\u8ba1",id:"241-inject-\u8bbe\u8ba1",level:2},{value:"2.4.2 Inject \u65b9\u6cd5\u6709\u54ea\u4e9b",id:"242-inject-\u65b9\u6cd5\u6709\u54ea\u4e9b",level:2},{value:"2.4.3 \u5728 Program.cs \u4e2d\u4f7f\u7528",id:"243-\u5728-programcs-\u4e2d\u4f7f\u7528",level:2},{value:"2.4.3.1 Inject() \u65b9\u6cd5",id:"2431-inject-\u65b9\u6cd5",level:3},{value:"2.4.4 Startup.ConfigureServices \u4f7f\u7528",id:"244-startupconfigureservices-\u4f7f\u7528",level:2},{value:"2.4.4.1 AddInject() \u65b9\u6cd5",id:"2441-addinject-\u65b9\u6cd5",level:3},{value:"2.4.4.2 AddInjectBase() \u65b9\u6cd5",id:"2442-addinjectbase-\u65b9\u6cd5",level:3},{value:"2.4.4.3 AddInjectMini() \u65b9\u6cd5",id:"2443-addinjectmini-\u65b9\u6cd5",level:3},{value:"2.4.4.4 AddInjectWithUnifyResult() \u65b9\u6cd5",id:"2444-addinjectwithunifyresult-\u65b9\u6cd5",level:3},{value:"2.4.5 Startup.Configure \u4f7f\u7528",id:"245-startupconfigure-\u4f7f\u7528",level:2},{value:"2.4.5.1 UseInject() \u65b9\u6cd5",id:"2451-useinject-\u65b9\u6cd5",level:3},{value:"2.4.5.2 UseInjectBase() \u65b9\u6cd5",id:"2452-useinjectbase-\u65b9\u6cd5",level:3},{value:"2.4.6 \u914d\u7f6e Inject() \u9ed8\u8ba4\u6ce8\u518c\u670d\u52a1",id:"246-\u914d\u7f6e-inject-\u9ed8\u8ba4\u6ce8\u518c\u670d\u52a1",level:2},{value:"2.4.7 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"247-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],u={toc:s};function m(e){var n=e.components,t=(0,r.Z)(e,l);return(0,a.kt)("wrapper",(0,i.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"241-inject-\u8bbe\u8ba1"},"2.4.1 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Inject")," \u8bbe\u8ba1"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Inject [\u026an\u02c8d\u0292ekt]")," \u610f\u601d\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"\u6ce8\u5165\uff0c\u6ce8\u5c04")," \u7684\u610f\u601d\uff0c\u5728\u8fd9\u91cc\u610f\u4e3a\u4f7f\u7528\u6700\u5c0f\u7684\u4fb5\u5165\u5f0f\u5bf9\u5e94\u7528\u8fdb\u884c\u673a\u80fd\u6539\u9020\u3002"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Inject()")," \u65b9\u6cd5\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u7684\u6700\u5c0f\u4fb5\u5165\u5f0f\u7684\u65b9\u6cd5\uff0c\u53ef\u4ee5\u8ba9\u4efb\u4f55 ",(0,a.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," Web \u540e\u7aef\u9879\u76ee\u77ac\u95f4\u652f\u6301\u6240\u6709 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u7279\u6027\u3002"),(0,a.kt)("h2",{id:"242-inject-\u65b9\u6cd5\u6709\u54ea\u4e9b"},"2.4.2 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Inject")," \u65b9\u6cd5\u6709\u54ea\u4e9b"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Inject()"),"\uff1a\u5728 ",(0,a.kt)("inlineCode",{parentName:"li"},"Program.cs")," \u4e2d\u6ce8\u518c"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"AddInject()"),"\uff1a\u5728 ",(0,a.kt)("inlineCode",{parentName:"li"},"Startup.cs")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"li"},"ConfigureServices")," \u4e2d\u6ce8\u518c"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"AddInjectBase()"),"\uff1a\u5728 ",(0,a.kt)("inlineCode",{parentName:"li"},"Startup.cs")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"li"},"ConfigureServices")," \u4e2d\u6ce8\u518c"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"AddInjectWithUnifyResult()/ AddInjectWithUnifyResult()"),"\uff1a\u5728 ",(0,a.kt)("inlineCode",{parentName:"li"},"Startup.cs")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"li"},"ConfigureServices")," \u4e2d\u6ce8\u518c"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"AddInjectMini()"),"\uff1a\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"li"},"Minimal API")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"UseInject()"),"\uff1a\u5728 ",(0,a.kt)("inlineCode",{parentName:"li"},"Startup.cs")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"li"},"Configure")," \u4e2d\u6ce8\u518c"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"UseInjectBase()"),"\uff1a\u5728 ",(0,a.kt)("inlineCode",{parentName:"li"},"Startup.cs")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"li"},"Configure")," \u4e2d\u6ce8\u518c")),(0,a.kt)("h2",{id:"243-\u5728-programcs-\u4e2d\u4f7f\u7528"},"2.4.3 \u5728 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Program.cs")," \u4e2d\u4f7f\u7528"),(0,a.kt)("h3",{id:"2431-inject-\u65b9\u6cd5"},"2.4.3.1 ",(0,a.kt)("inlineCode",{parentName:"h3"},"Inject()")," \u65b9\u6cd5"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Inject()")," \u662f\u5728\u542f\u52a8\u7a0b\u5e8f ",(0,a.kt)("inlineCode",{parentName:"p"},"Program.cs")," \u4e2d\u4f7f\u7528\u7684\uff0c\u96c6\u6210 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u552f\u4e00\u65b9\u6cd5\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {6,18} title="Furion.Web.Entry\\Program.cs"',showLineNumbers:!0,"":!0,"{6,18}":!0,title:'"Furion.Web.Entry\\Program.cs"'},"using Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Hosting;\n\nnamespace Furion.Web.Entry\n{\n public class Program\n {\n public static void Main(string[] args)\n {\n CreateHostBuilder(args).Build().Run();\n }\n\n public static IHostBuilder CreateHostBuilder(string[] args)\n {\n return Host.CreateDefaultBuilder(args)\n .ConfigureWebHostDefaults(webBuilder =>\n {\n webBuilder.Inject()\n .UseStartup();\n });\n }\n }\n}\n")),(0,a.kt)("h2",{id:"244-startupconfigureservices-\u4f7f\u7528"},"2.4.4 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Startup.ConfigureServices")," \u4f7f\u7528"),(0,a.kt)("h3",{id:"2441-addinject-\u65b9\u6cd5"},"2.4.4.1 ",(0,a.kt)("inlineCode",{parentName:"h3"},"AddInject()")," \u65b9\u6cd5"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AddInject()")," \u65b9\u6cd5\u662f\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"ConfigureServices")," \u4e2d\u63d0\u4f9b\u6700\u57fa\u7840\u529f\u80fd\u7684\u6ce8\u518c\u3002"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AddInject()")," \u5305\u542b\u4ee5\u4e0b\u57fa\u7840\u529f\u80fd\u6ce8\u518c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddSpecificationDocuments([options])\n .AddDynamicApiControllers()\n .AddDataValidation()\n .AddFriendlyException();\n")),(0,a.kt)("p",null,"\u4f7f\u7528\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,5,7,10}",showLineNumbers:!0,"":!0,"{3,5,7,10}":!0},"namespace Furion.Web.Entry\n{\n public class Startup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddInject(); // \u652f\u6301\u76f4\u63a5\u6ce8\u518c\uff08\u548c\u4e0b\u9762\u4ee3\u7801\u4e8c\u9009\u4e00\uff0c\u4e0d\u80fd\u540c\u65f6\u6ce8\u518c\u4e24\u6b21\uff09\n\n services.AddControllers()\n .AddInject(); // \u652f\u6301\u94fe\u5f0f\u6ce8\u518c\uff08\u548c\u4e0a\u9762\u4ee3\u7801\u4e8c\u9009\u4e00\uff0c\u4e0d\u80fd\u540c\u65f6\u6ce8\u518c\u4e24\u6b21\uff09\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n // \u5176\u4ed6\u4ee3\u7801\n }\n }\n}\n")),(0,a.kt)("h3",{id:"2442-addinjectbase-\u65b9\u6cd5"},"2.4.4.2 ",(0,a.kt)("inlineCode",{parentName:"h3"},"AddInjectBase()")," \u65b9\u6cd5"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AddInjectBase()")," \u65b9\u6cd5\u662f\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"ConfigureServices")," \u4e2d\u63d0\u4f9b\u6700\u57fa\u7840\u529f\u80fd\u7684\u6ce8\u518c\u3002"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AddInjectBase()")," \u5305\u542b\u4ee5\u4e0b\u57fa\u7840\u529f\u80fd\u6ce8\u518c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddDataValidation()\n .AddFriendlyException();\n")),(0,a.kt)("p",null,"\u4f7f\u7528\u540c\u4e0a ",(0,a.kt)("inlineCode",{parentName:"p"},"AddInject()"),"\u3002"),(0,a.kt)("h3",{id:"2443-addinjectmini-\u65b9\u6cd5"},"2.4.4.3 ",(0,a.kt)("inlineCode",{parentName:"h3"},"AddInjectMini()")," \u65b9\u6cd5"),(0,a.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion 3.7.6 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,a.kt)("p",null,"\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"p"},".NET6")," \u6700\u65b0\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Minimal API")," \u6a21\u5f0f\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"builder.Services.AddInjectMini();\n")),(0,a.kt)("h3",{id:"2444-addinjectwithunifyresult-\u65b9\u6cd5"},"2.4.4.4 ",(0,a.kt)("inlineCode",{parentName:"h3"},"AddInjectWithUnifyResult()")," \u65b9\u6cd5"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AddInjectWithUnifyResult()")," \u65b9\u6cd5\u5b9e\u9645\u4e0a\u7b49\u540c\u4e8e\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddInject([swaggerGen])\n .AddUnifyResult();\n")),(0,a.kt)("p",null,"\u4f7f\u7528\u540c\u4e0a ",(0,a.kt)("inlineCode",{parentName:"p"},"AddInject()"),"\u3002"),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"\u6240\u6709 ",(0,a.kt)("inlineCode",{parentName:"p"},".AddInject****()")," \u65b9\u6cd5\u4e0d\u80fd\u540c\u65f6\u6ce8\u518c\uff0c\u53ea\u80fd\u53d6\u5176\u4e00\u3002")),(0,a.kt)("h2",{id:"245-startupconfigure-\u4f7f\u7528"},"2.4.5 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Startup.Configure")," \u4f7f\u7528"),(0,a.kt)("h3",{id:"2451-useinject-\u65b9\u6cd5"},"2.4.5.1 ",(0,a.kt)("inlineCode",{parentName:"h3"},"UseInject()")," \u65b9\u6cd5"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"UseInject()")," \u65b9\u6cd5\u662f\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Configure")," \u4e2d\u63d0\u4f9b\u6700\u57fa\u7840\u529f\u80fd\u7684\u6ce8\u518c\u3002"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"UseInject()")," \u5305\u542b\u4ee5\u4e0b\u57fa\u7840\u529f\u80fd\u6ce8\u518c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"app.UseSpecificationDocuments();\n")),(0,a.kt)("p",null,"\u4f7f\u7528\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,5,12}",showLineNumbers:!0,"":!0,"{3,5,12}":!0},"namespace Furion.Web.Entry\n{\n public class Startup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n // \u5176\u4ed6\u4ee3\u7801\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n app.UseInject(); // \u5305\u542b\u6700\u5c0f Swagger \u6ce8\u518c\n }\n }\n}\n")),(0,a.kt)("h3",{id:"2452-useinjectbase-\u65b9\u6cd5"},"2.4.5.2 ",(0,a.kt)("inlineCode",{parentName:"h3"},"UseInjectBase()")," \u65b9\u6cd5"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"UseInjectBase()")," \u65b9\u6cd5\u662f\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Configure")," \u4e2d\u63d0\u4f9b\u6700\u57fa\u7840\u529f\u80fd\u7684\u6ce8\u518c\u3002"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"UseInjectBase()")," \u5b9e\u9645\u4e0a\u662f\u4e2a\u7a7a\u65b9\u6cd5\uff0c\u4e3a\u4e86\u89c4\u8303\u5316\u4ee3\u7801\u7279\u610f\u5efa\u7acb\u7684\u3002"),(0,a.kt)("p",null,"\u4f7f\u7528\u540c\u4e0a ",(0,a.kt)("inlineCode",{parentName:"p"},"UseInject()"),"\u3002"),(0,a.kt)("h2",{id:"246-\u914d\u7f6e-inject-\u9ed8\u8ba4\u6ce8\u518c\u670d\u52a1"},"2.4.6 \u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"h2"},"Inject()")," \u9ed8\u8ba4\u6ce8\u518c\u670d\u52a1"),(0,a.kt)("p",null,"\u6240\u6709 ",(0,a.kt)("inlineCode",{parentName:"p"},".Inject")," \u65b9\u6cd5\u90fd\u53ef\u4ee5\u4f20\u5165\u59d4\u6258\uff0c\u901a\u8fc7\u59d4\u6258\u53ef\u4ee5\u8fdb\u4e00\u6b65\u53bb\u914d\u7f6e\u9ed8\u8ba4\u884c\u4e3a\u3002\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},".AddInject(options =>\n{\n options.ConfigureDataValidation(vail =>\n {\n vail.GlobalEnabled = false;\n });\n\n // ....\n});\n")),(0,a.kt)("h2",{id:"247-\u53cd\u9988\u4e0e\u5efa\u8bae"},"2.4.7 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/0f2c6659.ceefaffe.js b/handbook/build/assets/js/0f2c6659.ceefaffe.js new file mode 100644 index 00000000000..e7c36bdfc59 --- /dev/null +++ b/handbook/build/assets/js/0f2c6659.ceefaffe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8132],{3905:function(n,e,t){t.d(e,{Zo:function(){return u},kt:function(){return d}});var i=t(7294);function o(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function a(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(n);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),t.push.apply(t,i)}return t}function p(n){for(var e=1;e=0||(o[t]=n[t]);return o}(n,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(n);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(o[t]=n[t])}return o}var s=i.createContext({}),l=function(n){var e=i.useContext(s),t=e;return n&&(t="function"==typeof n?n(e):p(p({},e),n)),t},u=function(n){var e=l(n.components);return i.createElement(s.Provider,{value:e},n.children)},m={inlineCode:"code",wrapper:function(n){var e=n.children;return i.createElement(i.Fragment,{},e)}},c=i.forwardRef((function(n,e){var t=n.components,o=n.mdxType,a=n.originalType,s=n.parentName,u=r(n,["components","mdxType","originalType","parentName"]),c=l(t),d=o,k=c["".concat(s,".").concat(d)]||c[d]||m[d]||a;return t?i.createElement(k,p(p({ref:e},u),{},{components:t})):i.createElement(k,p({ref:e},u))}));function d(n,e){var t=arguments,o=e&&e.mdxType;if("string"==typeof n||o){var a=t.length,p=new Array(a);p[0]=c;var r={};for(var s in e)hasOwnProperty.call(e,s)&&(r[s]=e[s]);r.originalType=n,r.mdxType="string"==typeof n?n:o,p[1]=r;for(var l=2;l child <"+("string"==typeof n.type?n.type:n.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})),b=null!=k?k:f.map((function(n){var e=n.props;return{value:e.value,label:e.label,attributes:e.attributes}})),C=(0,r.l)(b,(function(n,e){return n.value===e.value}));if(C.length>0)throw new Error('Docusaurus error: Duplicate values "'+C.map((function(n){return n.value})).join(", ")+'" found in . Every value needs to be unique.');var O=null===d?d:null!=(e=null!=d?d:null==(t=f.find((function(n){return n.props.default})))?void 0:t.props.value)?e:f[0].props.value;if(null!==O&&!b.some((function(n){return n.value===O})))throw new Error('Docusaurus error: The has a defaultValue "'+O+'" but none of its children has the corresponding value. Available values are: '+b.map((function(n){return n.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");var v=(0,s.U)(),h=v.tabGroupChoices,I=v.setTabGroupChoices,A=(0,o.useState)(O),y=A[0],T=A[1],w=[],E=(0,l.o5)().blockElementScrollPositionUntilNextRender;if(null!=g){var S=h[g];null!=S&&S!==y&&b.some((function(n){return n.value===S}))&&T(S)}var V=function(n){var e=n.currentTarget,t=w.indexOf(e),i=b[t].value;i!==y&&(E(e),T(i),null!=g&&I(g,String(i)))},L=function(n){var e,t=null;switch(n.key){case"Enter":V(n);break;case"ArrowRight":var i,o=w.indexOf(n.currentTarget)+1;t=null!=(i=w[o])?i:w[0];break;case"ArrowLeft":var a,p=w.indexOf(n.currentTarget)-1;t=null!=(a=w[p])?a:w[w.length-1]}null==(e=t)||e.focus()};return o.createElement("div",{className:(0,a.Z)("tabs-container",u)},o.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,a.Z)("tabs",{"tabs--block":c},N)},b.map((function(n){var e=n.value,t=n.label,p=n.attributes;return o.createElement("li",(0,i.Z)({role:"tab",tabIndex:y===e?0:-1,"aria-selected":y===e,key:e,ref:function(n){return w.push(n)},onKeyDown:L,onClick:V},p,{className:(0,a.Z)("tabs__item",m,null==p?void 0:p.className,{"tabs__item--active":y===e})}),null!=t?t:e)}))),p?(0,o.cloneElement)(f.filter((function(n){return n.props.value===y}))[0],{className:"margin-top--md"}):o.createElement("div",{className:"margin-top--md"},f.map((function(n,e){return(0,o.cloneElement)(n,{key:e,hidden:n.props.value!==y})}))))}function d(n){var e=(0,p.Z)();return o.createElement(c,(0,i.Z)({key:String(e)},n))}},6486:function(n,e,t){t.r(e),t.d(e,{assets:function(){return c},contentTitle:function(){return u},default:function(){return g},frontMatter:function(){return l},metadata:function(){return m},toc:function(){return d}});var i=t(3117),o=t(102),a=(t(7294),t(3905)),p=(t(4996),t(5488)),r=t(5162),s=["components"],l={id:"options",title:"4.2 \u9009\u9879",sidebar_label:"4.2 \u9009\u9879"},u=void 0,m={unversionedId:"options",id:"options",title:"4.2 \u9009\u9879",description:"",source:"@site/docs/options.mdx",sourceDirName:".",slug:"/options",permalink:"/docs/options",draft:!1,editUrl:"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/docs/options.mdx",tags:[],version:"current",lastUpdatedBy:"MonkSoul",lastUpdatedAt:1664758928,formattedLastUpdatedAt:"Oct 3, 2022",frontMatter:{id:"options",title:"4.2 \u9009\u9879",sidebar_label:"4.2 \u9009\u9879"},sidebar:"docs",previous:{title:"4.1 \u914d\u7f6e",permalink:"/docs/configuration"},next:{title:"5.1 \u52a8\u6001 WebAPI",permalink:"/docs/dynamic-api-controller"}},c={},d=[{value:"4.2.1 \u4ec0\u4e48\u662f\u9009\u9879",id:"421-\u4ec0\u4e48\u662f\u9009\u9879",level:2},{value:"4.2.2 \u4e0e\u914d\u7f6e\u7684\u533a\u522b",id:"422-\u4e0e\u914d\u7f6e\u7684\u533a\u522b",level:2},{value:"4.2.3 \u9009\u9879\u7684\u4f7f\u7528",id:"423-\u9009\u9879\u7684\u4f7f\u7528",level:2},{value:"4.2.3.1 \u914d\u7f6e appsettings.json \u4fe1\u606f",id:"4231-\u914d\u7f6e-appsettingsjson-\u4fe1\u606f",level:3},{value:"4.2.3.2 \u521b\u5efa AppInfoOptions \u5f3a\u7c7b\u578b\u7c7b",id:"4232-\u521b\u5efa-appinfooptions-\u5f3a\u7c7b\u578b\u7c7b",level:3},{value:"4.2.3.3 \u6ce8\u518c AppInfoOptions \u670d\u52a1",id:"4233-\u6ce8\u518c-appinfooptions-\u670d\u52a1",level:3},{value:"4.2.3.4 \u8bfb\u53d6 AppInfoOptions \u4fe1\u606f",id:"4234-\u8bfb\u53d6-appinfooptions-\u4fe1\u606f",level:3},{value:"4.2.3.5 \u5982\u4f55\u9009\u62e9\u8bfb\u53d6\u65b9\u5f0f",id:"4235-\u5982\u4f55\u9009\u62e9\u8bfb\u53d6\u65b9\u5f0f",level:3},{value:"4.2.4 \u9009\u9879\u63a5\u53e3\u8bf4\u660e",id:"424-\u9009\u9879\u63a5\u53e3\u8bf4\u660e",level:2},{value:"4.2.5 \u9009\u9879\u81ea\u5b9a\u4e49\u914d\u7f6e",id:"425-\u9009\u9879\u81ea\u5b9a\u4e49\u914d\u7f6e",level:2},{value:"4.2.5.1 \u9009\u9879\u67e5\u627e\u952e\u6d41\u7a0b",id:"4251-\u9009\u9879\u67e5\u627e\u952e\u6d41\u7a0b",level:3},{value:"4.2.6 [OptionsSettings] \u8bf4\u660e",id:"426-optionssettings-\u8bf4\u660e",level:2},{value:"4.2.7 \u9009\u9879\u9a8c\u8bc1",id:"427-\u9009\u9879\u9a8c\u8bc1",level:2},{value:"4.2.8 \u9009\u9879\u540e\u671f\u914d\u7f6e",id:"428-\u9009\u9879\u540e\u671f\u914d\u7f6e",level:2},{value:"4.2.9 \u9009\u9879\u66f4\u6539\u901a\u77e5\uff08\u70ed\u66f4\u65b0\uff09",id:"429-\u9009\u9879\u66f4\u6539\u901a\u77e5\u70ed\u66f4\u65b0",level:2},{value:"4.2.9.1 \u5173\u4e8e\u591a\u6b21\u89e6\u53d1\u95ee\u9898",id:"4291-\u5173\u4e8e\u591a\u6b21\u89e6\u53d1\u95ee\u9898",level:3},{value:"4.2.10 \u9009\u9879\u7684\u4f18\u7f3a\u70b9",id:"4210-\u9009\u9879\u7684\u4f18\u7f3a\u70b9",level:2},{value:"4.2.11 \u81ea\u5b9a\u4e49\u5c5e\u6027 Key \u6620\u5c04",id:"4211-\u81ea\u5b9a\u4e49\u5c5e\u6027-key-\u6620\u5c04",level:2},{value:"4.2.12 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"4212-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],k={toc:d};function g(n){var e=n.components,t=(0,o.Z)(n,s);return(0,a.kt)("wrapper",(0,i.Z)({},k,t,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"421-\u4ec0\u4e48\u662f\u9009\u9879"},"4.2.1 \u4ec0\u4e48\u662f\u9009\u9879"),(0,a.kt)("p",null,"\u9009\u9879\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u63a8\u8350\u7684\u52a8\u6001\u8bfb\u53d6\u914d\u7f6e\u7684\u65b9\u5f0f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u5c06\u914d\u7f6e\u6587\u4ef6\u6570\u636e\u7528\u4e00\u4e2a",(0,a.kt)("strong",{parentName:"p"},"\u5f3a\u7c7b\u578b"),"\u6765\u6258\u7ba1\uff0c\u80fd\u591f\u5b9e\u73b0\u914d\u7f6e\u9a8c\u8bc1\u3001\u9ed8\u8ba4\u503c\u914d\u7f6e\u3001\u5b9e\u65f6\u8bfb\u53d6\u7b49\u529f\u80fd\u3002"),(0,a.kt)("h2",{id:"422-\u4e0e\u914d\u7f6e\u7684\u533a\u522b"},"4.2.2 \u4e0e\u914d\u7f6e\u7684\u533a\u522b"),(0,a.kt)("p",null,"\u9009\u9879\u5b9e\u9645\u4e0a\u4e5f\u662f\u914d\u7f6e\uff0c\u4f46\u5728\u540e\u8005\u7684\u57fa\u7840\u4e0a\u6dfb\u52a0\u4e86\u914d\u7f6e\u9a8c\u8bc1\u3001\u9ed8\u8ba4\u503c/\u540e\u671f\u914d\u7f6e\u8bbe\u5b9a\u53ca\u63d0\u4f9b\u4e86\u591a\u79cd\u63a5\u53e3\u8bfb\u53d6\u914d\u7f6e\u4fe1\u606f\uff0c\u540c\u65f6\u8fd8\u652f\u6301\u4f9b\u914d\u7f6e\u66f4\u6539\u901a\u77e5\u7b49\u5f3a\u5927\u7075\u6d3b\u529f\u80fd\u3002"),(0,a.kt)("p",null,"\u6240\u4ee5\uff0c\u9664\u4e86\u4e00\u6b21\u6027\u8bfb\u53d6\u4f7f\u7528\u7684\u914d\u7f6e\u4ee5\u5916\uff0c\u90fd\u5e94\u8be5\u9009\u7528 ",(0,a.kt)("strong",{parentName:"p"},"\u9009\u9879")," \u66ff\u6362 ",(0,a.kt)("strong",{parentName:"p"},"\u914d\u7f6e"),"\u3002"),(0,a.kt)("admonition",{title:"\u77e5\u8bc6\u5bfc\u822a",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u6709\u5173\u914d\u7f6e\u8bf4\u660e\u53ef\u67e5\u770b\u300a",(0,a.kt)("a",{parentName:"p",href:"/docs/configuration"},"4.1 \u914d\u7f6e"),"\u300b \u7ae0\u8282\u3002")),(0,a.kt)("h2",{id:"423-\u9009\u9879\u7684\u4f7f\u7528"},"4.2.3 \u9009\u9879\u7684\u4f7f\u7528"),(0,a.kt)("p",null,"\u5047\u8bbe\u6211\u4eec\u9700\u8981\u5728\u7cfb\u7edf\u8fd0\u884c\u65f6\u83b7\u53d6",(0,a.kt)("strong",{parentName:"p"},"\u7cfb\u7edf\u540d\u79f0\u3001\u7248\u672c\u53f7\u53ca\u7248\u6743\u4fe1\u606f"),"\uff0c\u8fd9\u4e9b\u4fe1\u606f\u53ef\u80fd\u968f\u65f6\u53d8\u5316\u800c\u4e14\u9700\u8981\u5728\u591a\u4e2a\u5730\u65b9\u4f7f\u7528\u3002\u8fd9\u65f6\u5c31\u9700\u8981\u5c06\u8fd9\u4e9b\u4fe1\u606f\u914d\u7f6e\u8d77\u6765\u3002\u5177\u4f53\u6b65\u9aa4\u5982\u4e0b\uff1a"),(0,a.kt)("h3",{id:"4231-\u914d\u7f6e-appsettingsjson-\u4fe1\u606f"},"4.2.3.1 \u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"h3"},"appsettings.json")," \u4fe1\u606f"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2-6}",showLineNumbers:!0,"":!0,"{2-6}":!0},'{\n "AppInfo": {\n "Name": "Furion",\n "Version": "1.0.0",\n "Company": "Baiqian"\n }\n}\n')),(0,a.kt)("h3",{id:"4232-\u521b\u5efa-appinfooptions-\u5f3a\u7c7b\u578b\u7c7b"},"4.2.3.2 \u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"h3"},"AppInfoOptions")," \u5f3a\u7c7b\u578b\u7c7b"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5}",showLineNumbers:!0,"":!0,"{1,5}":!0},"using Furion.ConfigurableOptions;\n\nnamespace Furion.Application\n{\n public class AppInfoOptions : IConfigurableOptions\n {\n public string Name { get; set; }\n public string Version { get; set; }\n public string Company { get; set; }\n }\n}\n")),(0,a.kt)("admonition",{title:"\u6e29\u99a8\u63d0\u793a",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u5efa\u8bae\u6240\u6709\u9009\u9879\u7c7b\u90fd\u5e94\u8be5\u4ee5 ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"Options"))," \u547d\u540d\u7ed3\u5c3e\u3002"),(0,a.kt)("p",{parentName:"admonition"},"\u53e6\u5916\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u7684\u6ce8\u518c\u9009\u9879\u670d\u52a1\u7684\u65b9\u6cd5\uff0c\u53ea\u9700\u8981\u7ee7\u627f ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"IConfigurableOptions"))," \u63a5\u53e3\u5373\u53ef\uff0c\u8be5\u63a5\u53e3\u4f4d\u4e8e ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"Furion.ConfigurableOptions"))," \u547d\u540d\u7a7a\u95f4\u4e0b\u3002")),(0,a.kt)("h3",{id:"4233-\u6ce8\u518c-appinfooptions-\u670d\u52a1"},"4.2.3.3 \u6ce8\u518c ",(0,a.kt)("inlineCode",{parentName:"h3"},"AppInfoOptions")," \u670d\u52a1"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u9009\u9879\u4e0d\u540c\u4e8e\u914d\u7f6e\uff0c\u9700\u5728\u5e94\u7528\u542f\u52a8\u65f6\u6ce8\u518c")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {12} title="Furion.Web.Core\\FurWebCoreStartup.cs"',showLineNumbers:!0,"":!0,"{12}":!0,title:'"Furion.Web.Core\\FurWebCoreStartup.cs"'},"using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.Web.Core\n{\n [AppStartup(800)]\n public sealed class FurWebCoreStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddConfigurableOptions();\n }\n }\n}\n")),(0,a.kt)("h3",{id:"4234-\u8bfb\u53d6-appinfooptions-\u4fe1\u606f"},"4.2.3.4 \u8bfb\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h3"},"AppInfoOptions")," \u4fe1\u606f"),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u63d0\u4f9b\u4e86\u591a\u79cd\u8bfb\u53d6\u65b9\u5f0f\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"li"},"App.GetOptions(path)")," \u8bfb\u53d6\uff08",(0,a.kt)("strong",{parentName:"li"},"\u4e0d\u63a8\u8350"),"\uff09"),(0,a.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u4f9d\u8d56\u6ce8\u5165\u4ee5\u4e0b\u5b9e\u4f8b\u8bfb\u53d6\uff1a",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IOptions")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IOptionsSnapshot")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IOptionsMonitor")))),(0,a.kt)("li",{parentName:"ul"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"li"},"App")," \u9759\u6001\u7c7b\u63d0\u4f9b\u7684\u9759\u6001\u65b9\u6cd5\u83b7\u53d6\uff1a",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"App.GetOptions()")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"App.GetOptionsMonitor()")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"App.GetOptionsSnapshot()"))))),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"\u7981\u6b62\u5728\u4e3b\u673a\u542f\u52a8\u65f6\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"App.GetOptions")," \u83b7\u53d6\u9009\u9879\uff0c\u5982\u9700\u83b7\u53d6\u914d\u7f6e\u9009\u9879\u7406\u5e94\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},'App.GetConfig("\u914d\u7f6e\u8282\u70b9", true)'),"\u3002")),(0,a.kt)(p.Z,{defaultValue:"App.GetOptions(path)",values:[{label:"App.GetOptions(path)",value:"App.GetOptions(path)"},{label:"\u4f9d\u8d56\u6ce8\u5165\u65b9\u5f0f",value:"\u4f9d\u8d56\u6ce8\u5165\u65b9\u5f0f"},{label:"App.GetOptions()",value:"App.GetOptions()"}],mdxType:"Tabs"},(0,a.kt)(r.Z,{value:"App.GetOptions(path)",mdxType:"TabItem"},(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13-16}",showLineNumbers:!0,"":!0,"{13-16}":!0},'using Furion.Application;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Web.Entry.Controllers\n{\n [Route("api/[controller]")]\n public class DefaultController : ControllerBase\n {\n [HttpGet]\n public string Get()\n {\n // \u4e0d\u63a8\u8350\u91c7\u7528\u6b64\u65b9\u5f0f\u8bfb\u53d6\uff0c\u8be5\u65b9\u5f0f\u4ec5\u5728 ConfigureServices \u542f\u52a8\u65f6\u4f7f\u7528\n var appInfo = App.GetConfig("AppInfo", true);\n return $@"\u540d\u79f0\uff1a{appInfo.Name}\uff0c\n \u7248\u672c\uff1a{appInfo.Version}\uff0c\n \u516c\u53f8\uff1a{appInfo.Company}";\n }\n }\n}\n'))),(0,a.kt)(r.Z,{value:"\u4f9d\u8d56\u6ce8\u5165\u65b9\u5f0f",mdxType:"TabItem"},(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,15-17,27-29,31-33,35-37}",showLineNumbers:!0,"":!0,"{3,15-17,27-29,31-33,35-37}":!0},'using Furion.Application;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Options;\n\nnamespace Furion.Web.Entry.Controllers\n{\n [Route("api/[controller]")]\n public class DefaultController : ControllerBase\n {\n private readonly AppInfoOptions options1;\n private readonly AppInfoOptions options2;\n private readonly AppInfoOptions options3;\n\n public DefaultController(\n IOptions options\n , IOptionsSnapshot optionsSnapshot\n , IOptionsMonitor optionsMonitor)\n {\n options1 = options.Value;\n options2 = optionsSnapshot.Value;\n options3 = optionsMonitor.CurrentValue;\n }\n\n [HttpGet]\n public string Get()\n {\n var info1 = $@"\u540d\u79f0\uff1a{options1.Name}\uff0c\n \u7248\u672c\uff1a{options1.Version}\uff0c\n \u516c\u53f8\uff1a{options1.Company}";\n\n var info2 = $@"\u540d\u79f0\uff1a{options2.Name}\uff0c\n \u7248\u672c\uff1a{options2.Version}\uff0c\n \u516c\u53f8\uff1a{options2.Company}";\n\n var info3 = $@"\u540d\u79f0\uff1a{options3.Name}\uff0c\n \u7248\u672c\uff1a{options3.Version}\uff0c\n \u516c\u53f8\uff1a{options3.Company}";\n\n return $"{info1}-{info2}-{info3}";\n }\n }\n}\n'))),(0,a.kt)(r.Z,{value:"App.GetOptions()",mdxType:"TabItem"},(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {12-15,17-20,22-25}",showLineNumbers:!0,"":!0,"{12-15,17-20,22-25}":!0},'using Furion.Application;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Web.Entry.Controllers\n{\n [Route("api/[controller]")]\n public class DefaultController : ControllerBase\n {\n [HttpGet]\n public string Get()\n {\n var options1 = App.GetOptions();\n var info1 = $@"\u540d\u79f0\uff1a{options1.Name}\uff0c\n \u7248\u672c\uff1a{options1.Version}\uff0c\n \u516c\u53f8\uff1a{options1.Company}";\n\n var options2 = App.GetOptionsSnapshot();\n var info2 = $@"\u540d\u79f0\uff1a{options2.Name}\uff0c\n \u7248\u672c\uff1a{options2.Version}\uff0c\n \u516c\u53f8\uff1a{options2.Company}";\n\n var options3 = App.GetOptionsMonitor();\n var info3 = $@"\u540d\u79f0\uff1a{options3.Name}\uff0c\n \u7248\u672c\uff1a{options3.Version}\uff0c\n \u516c\u53f8\uff1a{options3.Company}";\n\n return $"{info1}-{info2}-{info3}";\n }\n }\n}\n')))),(0,a.kt)("h3",{id:"4235-\u5982\u4f55\u9009\u62e9\u8bfb\u53d6\u65b9\u5f0f"},"4.2.3.5 \u5982\u4f55\u9009\u62e9\u8bfb\u53d6\u65b9\u5f0f"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5982\u679c\u9009\u9879\u9700\u8981\u5728\u591a\u4e2a\u5730\u65b9\u4f7f\u7528\uff0c\u5219\u65e0\u8bba\u4efb\u4f55\u65f6\u5019\u90fd\u4e0d\u63a8\u8350\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"li"},"App.GetOptions()")),(0,a.kt)("li",{parentName:"ul"},"\u5728\u53ef\u4f9d\u8d56\u6ce8\u5165\u7c7b\u4e2d\uff0c\u4f9d\u8d56\u6ce8\u5165 ",(0,a.kt)("inlineCode",{parentName:"li"},"IOptions[Snapshot|Monitor]")," \u8bfb\u53d6"),(0,a.kt)("li",{parentName:"ul"},"\u5728\u9759\u6001\u7c7b/\u975e\u4f9d\u8d56\u6ce8\u5165\u7c7b\u4e2d\uff0c\u9009\u62e9 ",(0,a.kt)("inlineCode",{parentName:"li"},"App.GetOptions[Snapshot|Monitor]()")," \u8bfb\u53d6")),(0,a.kt)("h2",{id:"424-\u9009\u9879\u63a5\u53e3\u8bf4\u660e"},"4.2.4 \u9009\u9879\u63a5\u53e3\u8bf4\u660e"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u5e94\u7528\u63d0\u4f9b\u4e86\u591a\u79cd\u8bfb\u53d6\u9009\u9879\u7684\u63a5\u53e3\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IOptions"),"\uff1a",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u4e0d\u652f\u6301\uff1a",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u5728\u5e94\u7528\u542f\u52a8\u540e\u8bfb\u53d6\u914d\u7f6e\u6570\u636e"),(0,a.kt)("li",{parentName:"ul"},"\u547d\u540d\u9009\u9879"))),(0,a.kt)("li",{parentName:"ul"},"\u6ce8\u518c\u4e3a\u5355\u4e00\u5b9e\u4f8b\u4e14\u53ef\u4ee5\u6ce8\u5165\u5230\u4efb\u4f55\u670d\u52a1\u751f\u5b58\u671f"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IOptionsSnapshot"),"\uff1a",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u5728\u6bcf\u6b21\u8bf7\u6c42\u65f6\u5e94\u91cd\u65b0\u8ba1\u7b97\u9009\u9879\u7684\u65b9\u6848\u4e2d\u6709\u7528"),(0,a.kt)("li",{parentName:"ul"},"\u6ce8\u518c\u4e3a\u8303\u56f4\u5185\uff0c\u56e0\u6b64\u65e0\u6cd5\u6ce8\u5165\u5230\u5355\u4e00\u5b9e\u4f8b\u670d\u52a1"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u547d\u540d\u9009\u9879"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IOptionsMonitor"),"\uff1a",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u7528\u4e8e\u68c0\u7d22\u9009\u9879\u5e76\u7ba1\u7406 TOptions \u5b9e\u4f8b\u7684\u9009\u9879\u901a\u77e5\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u6ce8\u518c\u4e3a\u5355\u4e00\u5b9e\u4f8b\u4e14\u53ef\u4ee5\u6ce8\u5165\u5230\u4efb\u4f55\u670d\u52a1\u751f\u5b58\u671f\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\uff1a",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u66f4\u6539\u901a\u77e5"),(0,a.kt)("li",{parentName:"ul"},"\u547d\u540d\u9009\u9879"),(0,a.kt)("li",{parentName:"ul"},"\u53ef\u91cd\u8f7d\u914d\u7f6e"),(0,a.kt)("li",{parentName:"ul"},"\u9009\u62e9\u6027\u9009\u9879\u5931\u6548 ",(0,a.kt)("inlineCode",{parentName:"li"},"(IOptionsMonitorCache)"))))))),(0,a.kt)("admonition",{title:"\u6ce8\u610f\u4e8b\u9879",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"\u5728\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"IConfigurableOptionsListener")," \u76d1\u542c\u9009\u9879\u540e\uff0c\u5982\u8981\u83b7\u53d6\u6700\u65b0\u7684\u914d\u7f6e\u4fe1\u606f\uff0c\u8bf7\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"App.GetOptionsMonitor()")," \u800c\u4e0d\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"App.GetOptions()"),"\u3002")),(0,a.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,a.kt)("inlineCode",{parentName:"p"},"\u9009\u9879\u63a5\u53e3")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,a.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/options?view=aspnetcore-5.0#options-interfaces"},"ASP.NET Core - \u9009\u9879 - \u9009\u9879\u63a5\u53e3")," \u5c0f\u8282\u3002")),(0,a.kt)("h2",{id:"425-\u9009\u9879\u81ea\u5b9a\u4e49\u914d\u7f6e"},"4.2.5 \u9009\u9879\u81ea\u5b9a\u4e49\u914d\u7f6e"),(0,a.kt)("p",null,"\u6211\u4eec\u77e5\u9053\uff0c\u9009\u9879\u5b9e\u9645\u4e0a\u9700\u8981\u548c\u914d\u7f6e\u6587\u4ef6\u7279\u5b9a\u952e\u503c\u6302\u94a9\uff0c\u90a3 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u662f\u5982\u4f55\u51c6\u786e\u7684\u627e\u5230\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u952e\u503c\u7684\u5462\uff1f"),(0,a.kt)("h3",{id:"4251-\u9009\u9879\u67e5\u627e\u952e\u6d41\u7a0b"},"4.2.5.1 \u9009\u9879\u67e5\u627e\u952e\u6d41\u7a0b"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u6ca1\u6709\u8d34 ",(0,a.kt)("inlineCode",{parentName:"strong"},"[OptionsSettings]")," \u7279\u6027"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,a.kt)("inlineCode",{parentName:"li"},"Options")," \u7ed3\u5c3e\uff0c\u5219\u53bb\u9664 ",(0,a.kt)("inlineCode",{parentName:"li"},"Options")," \u5b57\u7b26\u4e32"),(0,a.kt)("li",{parentName:"ul"},"\u5426\u5219\u8fd4\u56de ",(0,a.kt)("inlineCode",{parentName:"li"},"\u7c7b\u540d\u79f0")))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u8d34\u4e86 ",(0,a.kt)("inlineCode",{parentName:"strong"},"[OptionsSettings]")," \u7279\u6027"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u5982\u679c\u914d\u7f6e\u4e86 ",(0,a.kt)("inlineCode",{parentName:"li"},"Path")," \u5c5e\u6027\uff0c\u5219\u8fd4\u56de ",(0,a.kt)("inlineCode",{parentName:"li"},"Path")," \u7684\u503c"),(0,a.kt)("li",{parentName:"ul"},"\u5426\u5219\u8fd4\u56de ",(0,a.kt)("inlineCode",{parentName:"li"},"\u7c7b\u540d\u79f0"))))),(0,a.kt)(p.Z,{defaultValue:"non-optionsettings",values:[{label:"\u65e0[OptionsSettings]",value:"non-optionsettings"},{label:"\u6709[OptionsSettings]",value:"has-optionsettings"}],mdxType:"Tabs"},(0,a.kt)(r.Z,{value:"non-optionsettings",mdxType:"TabItem"},(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,a.kt)("inlineCode",{parentName:"li"},"Options")," \u7ed3\u5c3e\uff0c\u5219\u952e\u540d\u4e3a\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"AppInfo"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},"public class AppInfoOptions : IConfigurableOptions\n{\n public string Name { get; set; }\n public string Version { get; set; }\n public string Company { get; set; }\n}\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4e0d\u4ee5 ",(0,a.kt)("inlineCode",{parentName:"li"},"Options")," \u7ed3\u5c3e\uff0c\u5219\u952e\u540d\u4e3a\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"AppInfoSettings"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},"public class AppInfoSettings : IConfigurableOptions\n{\n public string Name { get; set; }\n public string Version { get; set; }\n public string Company { get; set; }\n}\n"))),(0,a.kt)(r.Z,{value:"has-optionsettings",mdxType:"TabItem"},(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u914d\u7f6e\u4e86 ",(0,a.kt)("inlineCode",{parentName:"li"},"Path")," \u5c5e\u6027\uff0c\u5219\u952e\u540d\u4e3a\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"AppSettings:AppInfo"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},'[OptionsSettings("AppSettings:AppInfo")]\npublic class AppInfoOptions : IConfigurableOptions\n{\n public string Name { get; set; }\n public string Version { get; set; }\n public string Company { get; set; }\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u6ca1\u6709\u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"li"},"Path")," \u5c5e\u6027\uff0c\uff0c\u5219\u952e\u540d\u4e3a\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"AppInfoSettings"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},"[OptionsSettings]\npublic class AppInfoSettings : IConfigurableOptions\n{\n public string Name { get; set; }\n public string Version { get; set; }\n public string Company { get; set; }\n}\n")))),(0,a.kt)("h2",{id:"426-optionssettings-\u8bf4\u660e"},"4.2.6 ",(0,a.kt)("inlineCode",{parentName:"h2"},"[OptionsSettings]")," \u8bf4\u660e"),(0,a.kt)("p",null,"\u9009\u9879\u7c7b\u53ef\u4ee5\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"[OptionsSettings]")," \u6765\u914d\u7f6e\u67e5\u627e\u8def\u5f84\u503c\u3002"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Path"),"\uff1a\u5bf9\u5e94\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u952e\uff0c\u652f\u6301 ",(0,a.kt)("strong",{parentName:"li"},"\u5206\u5c42\u952e")," \u5b57\u7b26\u4e32\uff0c\u53c2\u89c1\uff1a\u300a",(0,a.kt)("a",{parentName:"li",href:"configuration/#413-%E8%B7%AF%E5%BE%84%E7%AC%A6-%E6%9F%A5%E6%89%BE%E8%8A%82%E7%82%B9"},"4.1 \u914d\u7f6e - 4.1.3 \u8def\u5f84\u7b26 \u67e5\u627e\u8282\u70b9"),"\u300b"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"PostConfigureAll"),"\uff1a\u9009\u9879\u540e\u671f\u914d\u7f6e\uff0c\u9ed8\u8ba4 ",(0,a.kt)("inlineCode",{parentName:"li"},"false"),"\u3002",(0,a.kt)("a",{parentName:"li",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/options?view=aspnetcore-3.1#options-post-configuration"},"ASP.NET Core - \u9009\u9879 - \u9009\u9879\u540e\u671f\u914d\u7f6e"))),(0,a.kt)("h2",{id:"427-\u9009\u9879\u9a8c\u8bc1"},"4.2.7 \u9009\u9879\u9a8c\u8bc1"),(0,a.kt)("p",null,"\u9009\u9879\u652f\u6301\u9a8c\u8bc1\u914d\u7f6e\u6709\u6548\u6027\uff0c\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"services.AddConfigurableOptions()")," \u6ce8\u518c\u9009\u9879\u9ed8\u8ba4\u542f\u7528\u4e86\u9a8c\u8bc1\u652f\u6301\u3002"),(0,a.kt)("p",null,"\u5305\u62ec\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7279\u6027\u65b9\u5f0f ",(0,a.kt)("inlineCode",{parentName:"li"},"DataAnnotations")),(0,a.kt)("li",{parentName:"ul"},"\u81ea\u5b9a\u4e49\u590d\u6742\u9a8c\u8bc1 ",(0,a.kt)("inlineCode",{parentName:"li"},"IValidateOptions"))),(0,a.kt)(p.Z,{defaultValue:"texin",values:[{label:"\u7279\u6027\u65b9\u5f0f",value:"texin"},{label:"\u590d\u6742\u9a8c\u8bc1",value:"fuza"}],mdxType:"Tabs"},(0,a.kt)(r.Z,{value:"texin",mdxType:"TabItem"},(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,8,10,12}",showLineNumbers:!0,"":!0,"{2,8,10,12}":!0},'using Furion.ConfigurableOptions;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace Furion.Application\n{\n public class AppInfoOptions : IConfigurableOptions\n {\n [Required(ErrorMessage = "\u540d\u79f0\u4e0d\u80fd\u4e3a\u7a7a")]\n public string Name { get; set; }\n [Required, RegularExpression(@"^[0-9][0-9\\.]+[0-9]$", ErrorMessage = "\u4e0d\u662f\u6709\u6548\u7684\u7248\u672c\u53f7")]\n public string Version { get; set; }\n [Required, MaxLength(100)]\n public string Company { get; set; }\n }\n}\n'))),(0,a.kt)(r.Z,{value:"fuza",mdxType:"TabItem"},(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u81ea\u5b9a\u4e49\u9a8c\u8bc1\u7c7b ",(0,a.kt)("inlineCode",{parentName:"li"},"AppInfoValidation")," \u5e76\u7ee7\u627f ",(0,a.kt)("inlineCode",{parentName:"li"},"IValidateOptions")," \u63a5\u53e3\uff0c\u540c\u65f6\u5b9e\u73b0 ",(0,a.kt)("inlineCode",{parentName:"li"},"Validate")," \u65b9\u6cd5\u3002")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,6,8,12,15}",showLineNumbers:!0,"":!0,"{1,6,8,12,15}":!0},'using Microsoft.Extensions.Options;\nusing System.Text.RegularExpressions;\n\nnamespace Furion.Application\n{\n public class AppInfoValidation : IValidateOptions\n {\n public ValidateOptionsResult Validate(string name, AppInfoOptions options)\n {\n if (!Regex.IsMatch(options.Version, @"^[0-9][0-9\\.]+[0-9]$"))\n {\n return ValidateOptionsResult.Fail("\u4e0d\u662f\u6709\u6548\u7684\u7248\u672c\u53f7");\n }\n\n return ValidateOptionsResult.Success;\n }\n }\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u9009\u9879\u7c7b\u7ee7\u627f ",(0,a.kt)("inlineCode",{parentName:"li"},"IConfigurableOptions")," \u63a5\u53e3\uff0c\u5e76\u5b9e\u73b0\u8be5\u63a5\u53e3\u3002")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,16-18}",showLineNumbers:!0,"":!0,"{6,16-18}":!0},'using Furion.ConfigurableOptions;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace Furion.Application\n{\n public class AppInfoOptions : IConfigurableOptions\n {\n [Required(ErrorMessage = "\u540d\u79f0\u4e0d\u80fd\u4e3a\u7a7a")]\n public string Name { get; set; }\n [Required]\n public string Version { get; set; }\n [Required, MaxLength(100)]\n public string Company { get; set; }\n\n // \u9009\u9879\u540e\u671f\u914d\u7f6e\n public void PostConfigure(AppInfoOptions options, IConfiguration configuration)\n {\n }\n }\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5b8c\u6574\u4ee3\u7801\u5982\u4e0b\uff1a")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,9,19,25,27,31,34}",showLineNumbers:!0,"":!0,"{4,9,19,25,27,31,34}":!0},'using Furion.ConfigurableOptions;\nusing Microsoft.Extensions.Options;\nusing System.ComponentModel.DataAnnotations;\nusing System.Text.RegularExpressions;\n\nnamespace Furion.Application\n{\n // \u7ee7\u627f IConfigurableOptions \u63a5\u53e3\n public class AppInfoOptions : IConfigurableOptions\n {\n [Required(ErrorMessage = "\u540d\u79f0\u4e0d\u80fd\u4e3a\u7a7a")]\n public string Name { get; set; }\n [Required]\n public string Version { get; set; }\n [Required, MaxLength(100)]\n public string Company { get; set; }\n\n // \u9009\u9879\u540e\u671f\u914d\u7f6e\n public void PostConfigure(AppInfoOptions options)\n {\n }\n }\n\n // \u521b\u5efa\u81ea\u5b9a\u4e49\u9a8c\u8bc1\u7c7b\n public class AppInfoValidation : IValidateOptions\n {\n public ValidateOptionsResult Validate(string name, AppInfoOptions options)\n {\n if (!Regex.IsMatch(options.Version, @"^[0-9][0-9\\.]+[0-9]$"))\n {\n return ValidateOptionsResult.Fail("\u4e0d\u662f\u6709\u6548\u7684\u7248\u672c\u53f7");\n }\n\n return ValidateOptionsResult.Success;\n }\n }\n}\n')))),(0,a.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"IConfigurableOptions"))," \u7ee7\u627f\u81ea ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"IConfigurableOptions")),"\uff0c\u4e5f\u5c31\u662f\u81ea\u5b9a\u4e49\u590d\u6742\u9a8c\u8bc1\u9ed8\u8ba4\u5177\u6709 ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"PostConfigure(TOptions options)"))," \u9009\u9879\u540e\u671f\u914d\u7f6e\u65b9\u6cd5\u3002\u5173\u4e8e\u300a",(0,a.kt)("a",{parentName:"p",href:"#428-%E9%80%89%E9%A1%B9%E5%90%8E%E6%9C%9F%E9%85%8D%E7%BD%AE"},"4.2.8 \u9009\u9879\u540e\u671f\u914d\u7f6e"),"\u300b\u5c06\u5728\u4e0b\u4e00\u5c0f\u8282\u8bf4\u660e\u3002")),(0,a.kt)("h2",{id:"428-\u9009\u9879\u540e\u671f\u914d\u7f6e"},"4.2.8 \u9009\u9879\u540e\u671f\u914d\u7f6e"),(0,a.kt)("p",null,"\u9009\u9879\u540e\u671f\u914d\u7f6e\u901a\u4fd7\u4e00\u70b9\u6765\u8bf4\uff0c\u53ef\u4ee5\u5728\u8fd0\u884c\u65f6\u89e3\u6790\u503c\u6216\u8bbe\u5b9a\u9ed8\u8ba4\u503c/\u540e\u671f\u914d\u7f6e\u7b49\u3002"),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u914d\u7f6e\u9009\u9879\u540e\u671f\u914d\u7f6e\u5f88\u7b80\u5355\uff0c\u53ea\u9700\u8981\u7ee7\u627f ",(0,a.kt)("inlineCode",{parentName:"p"},"IConfigurableOptions")," \u63a5\u53e3\u5e76\u5b9e\u73b0 ",(0,a.kt)("inlineCode",{parentName:"p"},"PostConfigure(TOptions options)")," \u65b9\u6cd5\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,16-21}",showLineNumbers:!0,"":!0,"{7,16-21}":!0},'using Furion.ConfigurableOptions;\nusing Microsoft.Extensions.Configuration;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace Furion.Application\n{\n public class AppInfoOptions : IConfigurableOptions\n {\n [Required(ErrorMessage = "\u540d\u79f0\u4e0d\u80fd\u4e3a\u7a7a")]\n public string Name { get; set; }\n [Required]\n public string Version { get; set; }\n [Required, MaxLength(100)]\n public string Company { get; set; }\n\n public void PostConfigure(AppInfoOptions options, IConfiguration configuration)\n {\n options.Name ??= "Furion";\n options.Version ??= "1.0.0";\n options.Company ??= "Baiqian";\n }\n }\n}\n')),(0,a.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"IConfigurableOptions"))," \u7ee7\u627f\u81ea ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"IConfigurableOptions")),"\uff0c\u4e5f\u5c31\u662f\u81ea\u5b9a\u4e49\u590d\u6742\u9a8c\u8bc1\u9ed8\u8ba4\u5177\u6709 ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"PostConfigure(TOptions options, IConfiguration configuration)"))," \u9009\u9879\u540e\u671f\u914d\u7f6e\u65b9\u6cd5\u3002")),(0,a.kt)("h2",{id:"429-\u9009\u9879\u66f4\u6539\u901a\u77e5\u70ed\u66f4\u65b0"},"4.2.9 \u9009\u9879\u66f4\u6539\u901a\u77e5\uff08",(0,a.kt)("inlineCode",{parentName:"h2"},"\u70ed\u66f4\u65b0"),"\uff09"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u975e\u5e38\u7b80\u5355\u4e14\u7075\u6d3b\u7684\u65b9\u5f0f\u76d1\u542c\u9009\u9879\u66f4\u6539\uff0c\u4e5f\u5c31\u662f ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"appsettings.json")," \u6216 \u81ea\u5b9a\u4e49\u914d\u7f6e\u6587\u4ef6\u53d1\u751f\u4efb\u4f55\u66f4\u6539\u90fd\u4f1a\u89e6\u53d1\u5904\u7406\u65b9\u6cd5"),"\u3002"),(0,a.kt)("p",null,"\u4f7f\u7528\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u7ee7\u627f ",(0,a.kt)("inlineCode",{parentName:"p"},"IConfigurableOptionsListener")," \u63a5\u53e3\u5e76\u5b9e\u73b0 ",(0,a.kt)("inlineCode",{parentName:"p"},"void OnListener(TOptions options, IConfiguration configuration)")," \u65b9\u6cd5\u5373\u53ef\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,11-15}",showLineNumbers:!0,"":!0,"{5,11-15}":!0},"using Furion.ConfigurableOptions;\n\nnamespace Furion.Application\n{\n public class AppInfoOptions : IConfigurableOptionsListener\n {\n public string Name { get; set; }\n public string Version { get; set; }\n public string Company { get; set; }\n\n public void OnListener(AppInfoOptions options, IConfiguration configuration)\n {\n var name = options.Name; // \u5b9e\u65f6\u7684\u6700\u65b0\u503c\n var version = options.Version; // \u5b9e\u65f6\u7684\u6700\u65b0\u503c\n }\n\n public void PostConfigure(AppInfoOptions options, IConfiguration configuration)\n {\n }\n }\n}\n")),(0,a.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"IConfigurableOptionsListener"))," \u7ee7\u627f\u81ea ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"IConfigurableOptions")),"\u3002")),(0,a.kt)("h3",{id:"4291-\u5173\u4e8e\u591a\u6b21\u89e6\u53d1\u95ee\u9898"},"4.2.9.1 \u5173\u4e8e\u591a\u6b21\u89e6\u53d1\u95ee\u9898"),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u5e95\u5c42\u4f7f\u7528\u7684\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"ChangeToken.OnChange")," \u76d1\u542c\u6587\u4ef6\u66f4\u6539\uff0c\u4f46\u662f\u6b64\u65b9\u5f0f\u4f1a\u5bfc\u81f4 ",(0,a.kt)("inlineCode",{parentName:"p"},"OnListener")," \u89e6\u53d1\u4e24\u6b21\uff0c\u8fd9\u5e76\u975e\u662f\u6846\u67b6\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"bug"),"\uff0c\u800c\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},".NET Core")," \u672c\u8eab\u5b58\u5728\u7684\u95ee\u9898\uff0c\u8be6\u89c1\uff1a",(0,a.kt)("a",{parentName:"p",href:"https://github.com/dotnet/aspnetcore/issues/2542"},"https://github.com/dotnet/aspnetcore/issues/2542")),(0,a.kt)("p",null,"\u6240\u4ee5\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e5f\u7ed9\u51fa\u53e6\u4e00\u79cd\u89e3\u51b3\u65b9\u6848\u53ef\u66ff\u4ee3 ",(0,a.kt)("inlineCode",{parentName:"p"},"IConfigurableOptionsListener")," \u7684\u65b9\u5f0f\uff0c\u4e5f\u5c31\u662f\u901a\u8fc7\u5c40\u90e8\u6ce8\u5165 ",(0,a.kt)("inlineCode",{parentName:"p"},"IOptionsMonitor")," \u7684\u65b9\u5f0f\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,7,9,14,19}",showLineNumbers:!0,"{1,3,7,9,14,19}":!0},"public class YourService : IYourService, IDisposable\n{\n private readonly IDisposable _optionsReloadToken;\n\n private YourOptions _options;\n\n public YourService(IOptionsMonitor options)\n {\n (_optionsReloadToken, _options) = (options.OnChange(ReloadOptions), options.CurrentValue);\n }\n\n private void ReloadOptions(YourOptions options)\n {\n _options = options;\n }\n\n public void Dispose()\n {\n _optionsReloadToken?.Dispose();\n }\n}\n")),(0,a.kt)("p",null,"\u8fd9\u79cd\u65b9\u5f0f\u867d\u7136\u5570\u55e6\uff0c\u4f46\u662f\u53ef\u4ee5\u5f88\u597d\u548c\u4e1a\u52a1\u4ee3\u7801\u5951\u5408\u3002"),(0,a.kt)("h2",{id:"4210-\u9009\u9879\u7684\u4f18\u7f3a\u70b9"},"4.2.10 \u9009\u9879\u7684\u4f18\u7f3a\u70b9"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u4f18\u70b9"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u5f3a\u7c7b\u578b\u914d\u7f6e"),(0,a.kt)("li",{parentName:"ul"},"\u63d0\u4f9b\u591a\u79cd\u8bfb\u53d6\u65b9\u5f0f"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u70ed\u52a0\u8f7d"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u8bbe\u7f6e\u9ed8\u8ba4\u503c/\u540e\u671f\u914d\u7f6e"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u5728\u8fd0\u884c\u73af\u5883\u4e2d\u52a8\u6001\u914d\u7f6e"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u9a8c\u8bc1\u914d\u7f6e\u6709\u6548\u6027"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u66f4\u6539\u901a\u77e5"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u547d\u540d\u9009\u9879"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u7f3a\u70b9"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u9700\u8981\u5b9a\u4e49\u5bf9\u5e94\u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},"\u9700\u8981\u5728\u542f\u52a8\u65f6\u6ce8\u518c")))),(0,a.kt)("h2",{id:"4211-\u81ea\u5b9a\u4e49\u5c5e\u6027-key-\u6620\u5c04"},"4.2.11 \u81ea\u5b9a\u4e49\u5c5e\u6027 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Key")," \u6620\u5c04"),(0,a.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion v3.4.3+")," \u7248\u672c\u4f7f\u7528\u3002")),(0,a.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u4e2d\u914d\u7f6e\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Key")," \u548c\u9009\u9879\u5b9a\u4e49\u7684\u5c5e\u6027\u540d\u4e0d\u4e00\u6837\uff0c\u8fd9\u65f6\u5019\u5c31\u9700\u8981\u7528\u5230 ",(0,a.kt)("inlineCode",{parentName:"p"},"[MapSettings]")," \u7279\u6027\u5373\u53ef\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {4}",showLineNumbers:!0,"{4}":!0},'"AppInfo": {\n "Name": "Furion",\n "Version": "1.0.0",\n "Company_Name": "Baiqian"\n}\n')),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6-7}",showLineNumbers:!0,"{6-7}":!0},'public class AppInfoOptions : IConfigurableOptions\n{\n public string Name { get; set; }\n public string Version { get; set; }\n\n [MapSettings("Company_Name")]\n public string Company { get; set; }\n}\n')),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"[MapSettings]")," \u914d\u7f6e\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Key")," \u4f1a\u81ea\u5b9a\u5e94\u7528\u9009\u9879\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Key")," \u4f5c\u4e3a\u8d77\u59cb\u70b9\uff0c\u5982\u5b9e\u9645\u4e0a ",(0,a.kt)("inlineCode",{parentName:"p"},"Company")," \u5c5e\u6027\u5bf9\u5e94\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Key")," \u4e3a\uff1a",(0,a.kt)("inlineCode",{parentName:"p"},"AppInfo:Company_Name"),"\u3002")),(0,a.kt)("h2",{id:"4212-\u53cd\u9988\u4e0e\u5efa\u8bae"},"4.2.12 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,a.kt)("hr",null),(0,a.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,a.kt)("inlineCode",{parentName:"p"},"\u9009\u9879")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,a.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/options?view=aspnetcore-5.0"},"ASP.NET Core - \u9009\u9879")," \u7ae0\u8282\u3002")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/0ff68343.0f47e5ef.js b/handbook/build/assets/js/0ff68343.0f47e5ef.js new file mode 100644 index 00000000000..5ce2f1ce76a --- /dev/null +++ b/handbook/build/assets/js/0ff68343.0f47e5ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2019],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return c}});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=i.createContext({}),m=function(e){var t=i.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=m(e.components);return i.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),d=m(n),c=a,k=d["".concat(p,".").concat(c)]||d[c]||u[c]||r;return n?i.createElement(k,l(l({ref:t},s),{},{components:n})):i.createElement(k,l({ref:t},s))}));function c(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=d;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:a,l[1]=o;for(var m=2;m getall \u4f1a\u88ab\u590d\u5199\u4e3a `[HttpHead]`\n [ "other", "PUT" ] // => \u65b0\u589e\u4e00\u6761\u65b0\u89c4\u5219\uff0c\u6bd4\u5982\uff0c\u4e00 `[other]` \u5f00\u5934\u4f1a\u8f6c\u6362\u4e3a `[HttpPut]` \u8bf7\u6c42\n ]\n }\n')))))),(0,r.kt)("h2",{id:"53-\u914d\u7f6e\u793a\u4f8b"},"5.3 \u914d\u7f6e\u793a\u4f8b"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "DynamicApiControllerSettings": {\n "SupportedMvcController": true\n }\n}\n')))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/12829a06.3308248b.js b/handbook/build/assets/js/12829a06.3308248b.js new file mode 100644 index 00000000000..6809358b260 --- /dev/null +++ b/handbook/build/assets/js/12829a06.3308248b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8213],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return g}});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),d=p(n),g=i,m=d["".concat(l,".").concat(g)]||d[g]||c[g]||a;return n?r.createElement(m,o(o({ref:t},s),{},{components:n})):r.createElement(m,o({ref:t},s))}));function g(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=d;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u.mdxType="string"==typeof e?e:i,o[1]=u;for(var p=2;pVisual Studio \u4e2d\u914d\u7f6e\u8def\u5f84",id:"2923-\u5728-visual-studio-\u4e2d\u914d\u7f6e\u8def\u5f84",level:3},{value:"2.9.2.4 \u9009\u62e9\u6d4b\u8bd5\u7248\u5b89\u88c5\u6216\u66f4\u65b0",id:"2924-\u9009\u62e9\u6d4b\u8bd5\u7248\u5b89\u88c5\u6216\u66f4\u65b0",level:3},{value:"2.9.3 Visual Studio \u8c03\u8bd5 Nuget \u5305",id:"293-visual-studio-\u8c03\u8bd5-nuget-\u5305",level:2},{value:"2.9.4 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"294-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],g={toc:d};function m(e){var t=e.components,n=(0,i.Z)(e,u);return(0,a.kt)("wrapper",(0,r.Z)({},g,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"291-\u5173\u4e8e\u672c\u5730\u6d4b\u8bd5\u5305"},"2.9.1 \u5173\u4e8e\u672c\u5730\u6d4b\u8bd5\u5305"),(0,a.kt)("p",null,"\u6b63\u5e38\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u90fd\u662f\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"Nuget")," \u5728\u7ebf\u5e73\u53f0\uff08Visual Studio \u5185\u7f6e\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Nuget")," \u5305\u7ba1\u7406\u5668\uff09\u5b89\u88c5\u62d3\u5c55\u4f9d\u8d56\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u4f46\u6709\u65f6\u5019\u6211\u4eec\u4e0d\u5e0c\u671b\u53d1\u5e03\u5230 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Nuget")," \u5e73\u53f0\u6216\u8005\u53ea\u60f3\u5728\u672c\u5730\u4f7f\u7528\u53c8\u6216\u8005\u5148\u5728\u672c\u5730\u6d4b\u8bd5\u901a\u8fc7\u518d\u53d1\u5e03\u3002")),(0,a.kt)("p",null,"\u8fd9\u6837\u505a\u7684\u597d\u5904\u662f\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u6709\u6548\u4fdd\u62a4\u516c\u53f8\u6838\u5fc3\u4ee3\u7801"),(0,a.kt)("li",{parentName:"ul"},"\u65b9\u4fbf\u5f00\u6e90\u9879\u76ee\u6d4b\u8bd5")),(0,a.kt)("h2",{id:"292-\u5982\u4f55\u914d\u7f6e"},"2.9.2 \u5982\u4f55\u914d\u7f6e"),(0,a.kt)("h3",{id:"2921-\u6d4b\u8bd5\u5305\u547d\u540d\u89c4\u5219"},"2.9.2.1 \u6d4b\u8bd5\u5305\u547d\u540d\u89c4\u5219"),(0,a.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u4f1a\u6839\u636e ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion.\u7248\u672c\u53f7-beta.Issue\u7f16\u53f7")," \u89c4\u5219\u751f\u6210 ",(0,a.kt)("inlineCode",{parentName:"p"},".nupkg")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},".snupkg")," \u5305\uff0c\u524d\u8005\u662f\u4e0d\u5305\u542b\u8c03\u8bd5\u7684\u65e0\u7b26\u53f7 ",(0,a.kt)("inlineCode",{parentName:"p"},"Nuget")," \u5305\uff0c\u540e\u8005\u5219\u662f\u8c03\u8bd5\u7b26\u53f7\u5305\uff08\u65b9\u4fbf ",(0,a.kt)("inlineCode",{parentName:"p"},"IDE")," \u8c03\u8bd5\u7528\u7684\uff09\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-showLineNumbers",metastring:'title="D:\\Furion_Nuget_Test_Packages"',title:'"D:\\Furion_Nuget_Test_Packages"'},"Furion.4.2.3-beta-I5MM3O.nupkg\nFurion.4.2.3-beta-I5MM3O.snupkg\n")),(0,a.kt)("p",null,"\u5176\u4e2d ",(0,a.kt)("inlineCode",{parentName:"p"},"I5MM3O")," \u5bf9\u5e94\u7684\u6b63\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"Issue")," \u7684\u7f16\u53f7\uff1a",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/I5MM3O"},"https://gitee.com/dotnetchina/Furion/issues/I5MM3O")),(0,a.kt)("h3",{id:"2922-\u914d\u7f6e\u672c\u5730\u5305\u8def\u5f84"},"2.9.2.2 \u914d\u7f6e\u672c\u5730\u5305\u8def\u5f84"),(0,a.kt)("p",null,"\u6709\u4e86\u8fd9\u4e24\u4e2a\u5305\u4e4b\u540e\uff0c\u5c31\u53ef\u4ee5\u5728\u672c\u5730\u78c1\u76d8\u4e2d\u521b\u5efa\u6587\u4ef6\u5939\u5e76\u653e\u8fdb\u53bb\uff0c\u5982 ",(0,a.kt)("inlineCode",{parentName:"p"},"D:\\Furion_Nuget_Test_Packages"),"\u3002"),(0,a.kt)("img",{src:(0,o.Z)("img/ng1.png")}),(0,a.kt)("h3",{id:"2923-\u5728-visual-studio-\u4e2d\u914d\u7f6e\u8def\u5f84"},"2.9.2.3 \u5728 ",(0,a.kt)("inlineCode",{parentName:"h3"},"Visual Studio")," \u4e2d\u914d\u7f6e\u8def\u5f84"),(0,a.kt)("img",{src:(0,o.Z)("img/ng2.png")}),(0,a.kt)("img",{src:(0,o.Z)("img/ng3.png")}),(0,a.kt)("img",{src:(0,o.Z)("img/ng4.png")}),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u547d\u4ee4\u884c\u64cd\u4f5c",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4e0d\u4f7f\u7528\u53ef\u89c6\u5316 ",(0,a.kt)("inlineCode",{parentName:"p"},"IDE")," \u914d\u7f6e\uff0c\u53ef\u901a\u8fc7\u4e0b\u5217\u547d\u4ee4\u884c\u914d\u7f6e\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'dotnet restore "YourProject.Web.Entry/YourProject.Web.Entry.csproj" -s "D:\\Furion_Nuget_Test_Packages";\ndotnet restore "YourProject.Web.Entry/YourProject.Web.Entry.csproj" -s "https://api.nuget.org/v3/index.json";\n'))),(0,a.kt)("h3",{id:"2924-\u9009\u62e9\u6d4b\u8bd5\u7248\u5b89\u88c5\u6216\u66f4\u65b0"},"2.9.2.4 \u9009\u62e9\u6d4b\u8bd5\u7248\u5b89\u88c5\u6216\u66f4\u65b0"),(0,a.kt)("img",{src:(0,o.Z)("img/ng5.png")}),(0,a.kt)("img",{src:(0,o.Z)("img/ng6.png")}),(0,a.kt)("img",{src:(0,o.Z)("img/ng7.png")}),(0,a.kt)("br",null),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u6d4b\u8bd5\u901a\u8fc7\u540e\u53ef\u4ee5\u5220\u9664\u4e4b\u524d\u7684\u914d\u7f6e\u5373\u53ef"),"\uff0c\u5982\uff1a"),(0,a.kt)("img",{src:(0,o.Z)("img/ng8.png")}),(0,a.kt)("h2",{id:"293-visual-studio-\u8c03\u8bd5-nuget-\u5305"},"2.9.3 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Visual Studio")," \u8c03\u8bd5 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Nuget")," \u5305"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},".snupkg")," \u5305\uff0c\u5728\u5b89\u88c5 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u7684\u65f6\u5019\u81ea\u52a8\u4e0b\u8f7d\u5230\u672c\u5730\uff0c\u5982\u9700\u542f\u7528\u6e90\u7801\u8c03\u8bd5\uff0c\u53ea\u9700\u8981\u542f\u7528\u4ee5\u4e0b\u914d\u7f6e\u5373\u53ef\uff1a"),(0,a.kt)("img",{src:(0,o.Z)("img/vs10.png")}),(0,a.kt)("p",null,"\u542f\u7528\u4e4b\u540e\u91cd\u65b0\u7f16\u8bd1\u89e3\u51b3\u65b9\u6848\u5c31\u53ef\u4ee5\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"F12")," \u8df3\u8f6c\u5230\u6e90\u4ee3\u7801\u533a\u5e76\u8c03\u8bd5\u6e90\u4ee3\u7801\u4e86\u3002"),(0,a.kt)("h2",{id:"294-\u53cd\u9988\u4e0e\u5efa\u8bae"},"2.9.4 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/1494bf35.034efa6d.js b/handbook/build/assets/js/1494bf35.034efa6d.js new file mode 100644 index 00000000000..a68c74a357f --- /dev/null +++ b/handbook/build/assets/js/1494bf35.034efa6d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[5426],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return s}});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),d=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=d(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),m=d(n),s=i,k=m["".concat(l,".").concat(s)]||m[s]||u[s]||a;return n?r.createElement(k,o(o({ref:t},c),{},{components:n})):r.createElement(k,o({ref:t},c))}));function s(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=m;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:i,o[1]=p;for(var d=2;dWeb \u9879\u76ee",id:"21-\u521b\u5efa-web-\u9879\u76ee",level:2},{value:"2.1.1 \u521b\u5efa ASP.NET Core Web \u5e94\u7528\u7a0b\u5e8f",id:"211-\u521b\u5efa-aspnet-core-web-\u5e94\u7528\u7a0b\u5e8f",level:3},{value:"2.2 \u6dfb\u52a0 Furion \u4f9d\u8d56\u5305",id:"22-\u6dfb\u52a0-furion-\u4f9d\u8d56\u5305",level:2},{value:"2.3 Furion \u57fa\u672c\u914d\u7f6e",id:"23-furion-\u57fa\u672c\u914d\u7f6e",level:2},{value:"2.3.1 Program.cs \u6dfb\u52a0 Inject()",id:"231-programcs-\u6dfb\u52a0-inject",level:3},{value:"2.4 \u542f\u52a8\u6d4f\u89c8\u5668",id:"24-\u542f\u52a8\u6d4f\u89c8\u5668",level:2},{value:"2.5 WebApplication \u8bf4\u660e \ud83c\udf83",id:"25-webapplication-\u8bf4\u660e-",level:2}],s={toc:m};function k(e){var t=e.components,n=(0,i.Z)(e,p);return(0,a.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{title:"\u63a8\u8350\u4f7f\u7528\u811a\u624b\u67b6",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u5b98\u65b9\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u65b9\u4fbf\u7684\u811a\u624b\u67b6\uff0c\u53ef\u4ee5\u5feb\u901f\u7684\u521b\u5efa\u591a\u5c42\u67b6\u6784\u9879\u76ee\u3002"),(0,a.kt)("p",{parentName:"admonition"},"\u63a8\u8350\u4f7f\u7528 \u300a",(0,a.kt)("a",{parentName:"p",href:"/docs/template"},"2.2 \u5b98\u65b9\u811a\u624b\u67b6"),"\u300b\u4ee3\u66ff\u672c\u7ae0\u8282\u529f\u80fd\u3002")),(0,a.kt)("admonition",{title:"\u5165\u95e8\u6761\u4ef6",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u5bf9 ",(0,a.kt)("inlineCode",{parentName:"p"},".NET Core/ASP.NET Core")," \u6709\u4e00\u5b9a\u57fa\u7840\u4e86\u89e3\uff0c\u8fd8\u672a\u63a5\u89e6\u7684\u53ef\u5148\u770b ",(0,a.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/?view=aspnetcore-7.0&tabs=windows"},"\u3010ASP.NET Core \u57fa\u7840\u3011"))),(0,a.kt)("h2",{id:"21-\u521b\u5efa-web-\u9879\u76ee"},"2.1 \u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"h2"},"Web")," \u9879\u76ee"),(0,a.kt)("admonition",{title:"\u73af\u5883\u8981\u6c42",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e4b\u524d\u5148\u786e\u4fdd\u5b89\u88c5\u4e86\u6700\u65b0\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},".NET 7 SDK")," \u5e76\u5b89\u88c5 ",(0,a.kt)("inlineCode",{parentName:"p"},"Visual Studio 2022 Preview")," \u6700\u65b0\u7248\u3002")),(0,a.kt)("h3",{id:"211-\u521b\u5efa-aspnet-core-web-\u5e94\u7528\u7a0b\u5e8f"},"2.1.1 \u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"h3"},"ASP.NET Core Web \u5e94\u7528\u7a0b\u5e8f")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u6253\u5f00 ",(0,a.kt)("inlineCode",{parentName:"li"},"Visual Studio 2022 Preview")," \u5e76\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"li"},"Web")," \u9879\u76ee")),(0,a.kt)("img",{src:(0,o.Z)("img/rmn1.png")}),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u914d\u7f6e\u9879\u76ee\u540d\u79f0")),(0,a.kt)("img",{src:(0,o.Z)("img/rmn2.png")}),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u9009\u62e9 ",(0,a.kt)("inlineCode",{parentName:"li"},"WebAPI")," \u9879\u76ee")),(0,a.kt)("img",{src:(0,o.Z)("img/net71.png")}),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u5df2\u7ecf\u5185\u7f6e\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"Swagger")," \u89c4\u8303\u5316\u5e93\uff0c\u6240\u4ee5\u521b\u5efa\u65f6",(0,a.kt)("strong",{parentName:"p"},"\u65e0\u9700\u52fe\u9009")," ",(0,a.kt)("inlineCode",{parentName:"p"},"Enable OpenAPI support")," \u9009\u9879\u3002\u5426\u5219\u63d0\u793a\u7248\u672c\u4e0d\u4e00\u81f4\u4ea7\u751f\u51b2\u7a81\u3002")),(0,a.kt)("h2",{id:"22-\u6dfb\u52a0-furion-\u4f9d\u8d56\u5305"},"2.2 \u6dfb\u52a0 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Furion")," \u4f9d\u8d56\u5305"),(0,a.kt)("img",{src:(0,o.Z)("img/net72.png")}),(0,a.kt)("h2",{id:"23-furion-\u57fa\u672c\u914d\u7f6e"},"2.3 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Furion")," \u57fa\u672c\u914d\u7f6e"),(0,a.kt)("h3",{id:"231-programcs-\u6dfb\u52a0-inject"},"2.3.1 ",(0,a.kt)("inlineCode",{parentName:"h3"},"Program.cs")," \u6dfb\u52a0 ",(0,a.kt)("inlineCode",{parentName:"h3"},"Inject()")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,11}",showLineNumbers:!0,"":!0,"{1,3,11}":!0},"var builder = WebApplication.CreateBuilder(args).Inject();\n\nbuilder.Services.AddControllers().AddInject();\n\nvar app = builder.Build();\n\napp.UseHttpsRedirection();\n\napp.UseAuthorization();\n\napp.UseInject();\n\napp.MapControllers();\n\napp.Run();\n")),(0,a.kt)("admonition",{title:"\u5c0f\u63d0\u9192",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c ",(0,a.kt)("inlineCode",{parentName:"p"},"app.UseInject()")," \u4e0d\u8f93\u5165\u53c2\u6570\uff0c\u5219\u9ed8\u8ba4\u5730\u5740\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"/api"),"\uff0c\u5982\u679c\u8f93\u5165 ",(0,a.kt)("inlineCode",{parentName:"p"},"string.Empty")," \u5219\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"/")," \u76ee\u5f55\u3002\u5982\u679c\u8f93\u5165\u4efb\u610f\u5b57\u7b26\u4e32\uff0c\u5219\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"/\u4efb\u610f\u5b57\u7b26\u4e32")," \u76ee\u5f55\u3002")),(0,a.kt)("h2",{id:"24-\u542f\u52a8\u6d4f\u89c8\u5668"},"2.4 \u542f\u52a8\u6d4f\u89c8\u5668"),(0,a.kt)("p",null,"\u542f\u52a8\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u3002"),(0,a.kt)("img",{src:(0,o.Z)("img/rmn5.png")}),(0,a.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"Visual Studio 2022 Preview")," \u521b\u5efa\u7684\u9879\u76ee\u4f1a\u81ea\u52a8\u914d\u7f6e\u4e86\u542f\u52a8\u9875\uff0c\u5982\u679c\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"F5")," \u8fd0\u884c\uff0c\u53ef\u80fd\u4e0d\u4f1a\u81ea\u52a8\u6253\u5f00\u9996\u9875\uff0c\u8fd9\u65f6\u5019\u6211\u4eec\u53ea\u9700\u8981\u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"p"},"launchSettings.json")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"launchUrl")," \u5373\u53ef\uff1a"),(0,a.kt)("img",{src:(0,o.Z)("img/rmn6.png")})),(0,a.kt)("h2",{id:"25-webapplication-\u8bf4\u660e-"},"2.5 ",(0,a.kt)("inlineCode",{parentName:"h2"},"WebApplication")," \u8bf4\u660e \ud83c\udf83"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},".NET6")," \u7248\u672c\u65b0\u589e\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"WebApplication")," \u5bf9\u8c61\uff0c\u5982\u679c\u6211\u4eec\u9700\u8981\u6ce8\u518c\u670d\u52a1\uff0c\u53ea\u9700\u8981\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"builder.Services.AddXXX()")," \u5373\u53ef\u3002\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},"var builder = WebApplication.CreateBuilder(args).Inject();\n\nbuilder.Services.AddControllers().AddInject();\nbuilder.Services.AddRemoteRequest();\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/14cdac51.0088153b.js b/handbook/build/assets/js/14cdac51.0088153b.js new file mode 100644 index 00000000000..de87f1b90df --- /dev/null +++ b/handbook/build/assets/js/14cdac51.0088153b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4474],{3905:function(e,t,n){n.d(t,{Zo:function(){return p},kt:function(){return C}});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=o.createContext({}),c=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},u=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(n),C=a,d=u["".concat(s,".").concat(C)]||u[C]||m[C]||r;return n?o.createElement(d,i(i({ref:t},p),{},{components:n})):o.createElement(d,i({ref:t},p))}));function C(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;cIEntity \u793a\u8303\uff1a",id:"9322-ientity-\u793a\u8303",level:3},{value:"9.3.2.3 EntityBase \u793a\u8303\uff1a",id:"9323-entitybase-\u793a\u8303",level:3},{value:"9.3.2.4 Entity \u793a\u8303\uff1a",id:"9324-entity-\u793a\u8303",level:3},{value:"9.3.2.5 EntityNotKey \u793a\u8303\uff1a",id:"9325-entitynotkey-\u793a\u8303",level:3},{value:"9.3.3 \u81ea\u5b9a\u4e49\u516c\u5171\u5b9e\u4f53",id:"933-\u81ea\u5b9a\u4e49\u516c\u5171\u5b9e\u4f53",level:2},{value:"9.3.4 \u6570\u636e\u5e93\u5b9e\u4f53\u914d\u7f6e",id:"934-\u6570\u636e\u5e93\u5b9e\u4f53\u914d\u7f6e",level:2},{value:"9.3.4.1 \u5728\u6570\u636e\u5e93\u5b9e\u4f53\u4e2d\u914d\u7f6e",id:"9341-\u5728\u6570\u636e\u5e93\u5b9e\u4f53\u4e2d\u914d\u7f6e",level:3},{value:"9.3.4.2 \u5728\u4efb\u4f55\u5b9e\u4f8b\u7c7b\u4e2d\u914d\u7f6e",id:"9342-\u5728\u4efb\u4f55\u5b9e\u4f8b\u7c7b\u4e2d\u914d\u7f6e",level:3},{value:"9.3.5 \u6570\u636e\u5e93\u5b9e\u4f53\u914d\u7f6e\u8bf4\u660e",id:"935-\u6570\u636e\u5e93\u5b9e\u4f53\u914d\u7f6e\u8bf4\u660e",level:2},{value:"9.3.6 \u914d\u7f6e\u5217\u540d\u53ca\u5217\u7c7b\u578b",id:"936-\u914d\u7f6e\u5217\u540d\u53ca\u5217\u7c7b\u578b",level:2},{value:"9.3.7 \u914d\u7f6e\u6570\u636e\u5e93\u8868\u540d\u548c Schema",id:"937-\u914d\u7f6e\u6570\u636e\u5e93\u8868\u540d\u548c-schema",level:2},{value:"9.3.8 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"938-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],u={toc:m};function C(e){var t=e.components,n=(0,a.Z)(e,i);return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"\u7279\u522b\u63d0\u9192",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4e00\u65e6\u5b9a\u4e49\u4e86\u5b9e\u4f53\u6216\u6539\u53d8\u4e86\u5b9e\u4f53\u7ed3\u6784\u6216\u5b9e\u4f53\u914d\u7f6e\uff0c\u9700\u8981\u91cd\u65b0\u6267\u884c ",(0,r.kt)("inlineCode",{parentName:"p"},"Add-Migration")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"Update-Database")," \u547d\u4ee4\u3002")),(0,r.kt)("h2",{id:"931-\u6570\u636e\u5e93\u5b9e\u4f53"},"9.3.1 \u6570\u636e\u5e93\u5b9e\u4f53"),(0,r.kt)("p",null,"\u5728\u9762\u5411\u5bf9\u8c61\u5f00\u53d1\u601d\u60f3\u4e2d\uff0c\u6700\u91cd\u8981\u5c24\u4e3a",(0,r.kt)("strong",{parentName:"p"},"\u5bf9\u8c61"),"\u4e8c\u5b57\uff0c\u5728 .NET \u5f00\u53d1\u8fc7\u53bb\uff0c\u64cd\u4f5c\u6570\u636e\u5e93\u5f80\u5f80\u91c7\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"DataTable")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"DataSet")," \u6765\u63a5\u6536\u6570\u636e\u5e93\u8fd4\u56de\u7ed3\u679c\u96c6\uff0c\u800c\u64cd\u4f5c\u6570\u636e\u5e93\u4e5f\u79bb\u4e0d\u5f00\u624b\u5199 ",(0,r.kt)("inlineCode",{parentName:"p"},"sql")," \u8bed\u53e5\u3002"),(0,r.kt)("p",null,"\u5728\u8fc7\u53bb\u9762\u5411\u8fc7\u7a0b\u548c\u5e94\u7528\u4e0d\u53d1\u8fbe\u7684\u65f6\u4ee3\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u786e\u5b9e\u597d\u4f7f\u3002\u7136\u540e\u968f\u7740\u4e2d\u56fd\u4e92\u8054\u7f51\u7f51\u6c11\u7684\u6fc0\u589e\uff0c\u7535\u5b50\u5316\u65f6\u4ee3\u7684\u5230\u6765\uff0c\u5404\u884c\u5404\u4e1a\u5bf9\u5e94\u7528\u9700\u6c42\u4e5f\u8fbe\u5230\u4e86\u524d\u6240\u672a\u6709\u7684\u91cf\u7ea7\u3002"),(0,r.kt)("p",null,"\u6240\u4ee5\uff0c\u5728\u8fc7\u53bb\u624b\u5199 ",(0,r.kt)("inlineCode",{parentName:"p"},"sql")," \u7684\u65f6\u4ee3\u5404\u79cd\u95ee\u9898\u663e\u9732\u65e0\u7591\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u7a0b\u5e8f\u5458\u80fd\u529b\u53c2\u5dee\u4e0d\u9f50\uff0c\u5199\u51fa\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"sql")," \u6027\u80fd\u81ea\u7136\u4e5f\u5929\u5dee\u5730\u522b"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"sql")," \u5c5e\u4e8e\u5b57\u7b26\u4e32\u786c\u7f16\u7a0b\uff0c\u540e\u671f\u7ef4\u62a4\u96be\u4e0a\u52a0\u96be"),(0,r.kt)("li",{parentName:"ul"},"\u8bb8\u591a\u5355\u8868\u751a\u81f3\u591a\u8868\u7ed3\u6784\u4e00\u81f4\uff0c\u51fa\u73b0\u5927\u91cf\u91cd\u590d ",(0,r.kt)("inlineCode",{parentName:"li"},"sql")," \u4ee3\u7801"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"sql")," \u672c\u8eab\u5728\u4e0d\u540c\u7684\u6570\u636e\u5e93\u63d0\u4f9b\u5668\u4e2d\u5199\u6cd5\u6709\u5dee\uff0c\u540e\u7eed\u8fc1\u79fb\u5934\u75db\u4e0d\u5df2")),(0,r.kt)("p",null,"\u5f53\u7136\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"sql")," \u662f\u65f6\u4ee3\u7684\u4ea7\u7269\uff0c\u6211\u4eec\u4e5f\u79bb\u4e0d\u5f00 ",(0,r.kt)("inlineCode",{parentName:"p"},"sql"),"\uff0c\u4f46\u5bf9\u4e8e\u5927\u591a\u6570\u7a0b\u5e8f\u5458\u548c\u9879\u76ee\u6765\u8bf4\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"sql")," \u672a\u5fc5\u80fd\u591f\u5e26\u7ed9\u4ed6\u4eec\u591a\u5927\u7684\u6548\u76ca\u3002"),(0,r.kt)("p",null,"\u6240\u4ee5\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"ORM")," \u5c31\u8bde\u751f\u4e86\uff0c\u6240\u8c13\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"ORM")," \u5c31\u662f\u5bf9\u8c61\u5173\u7cfb\u6620\u5c04\uff0c\u82f1\u6587\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"Object Relational Mapping"),"\uff0c\u7b80\u5355\u70b9\u8bf4\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"ORM")," \u6839\u636e\u7279\u6709\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"POCO \u8d2b\u8840\u6a21\u578b")," \u89c4\u5219\u751f\u6210 ",(0,r.kt)("inlineCode",{parentName:"p"},"sql")," \u8bed\u53e5\u3002\u5927\u5927\u907f\u514d\u4e86\u91cd\u590d ",(0,r.kt)("inlineCode",{parentName:"p"},"sql")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"sql")," \u80fd\u529b\u53c2\u5dee\u4e0d\u9f50\u7b49\u95ee\u9898\u3002\uff08\u5f53\u7136 ",(0,r.kt)("inlineCode",{parentName:"p"},"ORM")," \u4f5c\u8005 ",(0,r.kt)("inlineCode",{parentName:"p"},"sql")," \u80fd\u529b\u4e5f\u4f1a\u5f71\u54cd\u6700\u7ec8\u6027\u80fd\uff09"),(0,r.kt)("p",null,"\u4e0a\u9762\u6240\u8bf4\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"POCO")," \u8d2b\u8840\u6a21\u578b\u6b63\u662f\u6211\u4eec\u672c\u7ae0\u8282\u7684 ",(0,r.kt)("strong",{parentName:"p"},"\u6570\u636e\u5e93\u5b9e\u4f53"),"\u3002"),(0,r.kt)("p",null,"\u7b80\u5355\u6765\u8bf4\uff0c\u6570\u636e\u5e93\u5b9e\u4f53\u5c31\u662f\u6570\u636e\u5e93\u8868\u7684\u7c7b\u8868\u73b0\uff0c\u901a\u8fc7\u4e00\u5b9a\u7684\u89c4\u5219\u4f7f\u8fd9\u4e2a\u7c7b\u80fd\u591f\u4e00\u4e00\u5bf9\u5e94\u8868\u7ed3\u6784\u3002\u901a\u5e38\u8fd9\u6837\u7684\u7c7b\u4e5f\u79f0\u4e3a\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"POCO")," \u8d2b\u8840\u6a21\u578b\uff0c\u4e5f\u5c31\u662f\u53ea\u6709\u5b9a\u4e49\uff0c\u6ca1\u6709\u884c\u4e3a\u3002"),(0,r.kt)("h2",{id:"932-\u5982\u4f55\u5b9a\u4e49\u5b9e\u4f53"},"9.3.2 \u5982\u4f55\u5b9a\u4e49\u5b9e\u4f53"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u591a\u79cd\u5b9a\u4e49\u5b9e\u4f53\u7684\u63a5\u53e3\u4f9d\u8d56\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"IEntity"),"\uff1a\u5b9e\u4f53\u57fa\u63a5\u53e3\uff0c\u662f\u6240\u6709\u5b9e\u4f53\u7684\u57fa\u63a5\u53e3"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"IEntityNotKey"),"\uff1a\u65e0\u952e\u5b9e\u4f53\u63a5\u53e3\uff0c\u4e5f\u5c31\u662f\u89c6\u56fe\u3001\u5b58\u50a8\u8fc7\u7a0b\u3001\u51fd\u6570\u4f9d\u8d56\u63a5\u53e3"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"EntityBase"),"\uff1a\u5b9e\u4f53\u57fa\u62bd\u8c61\u7c7b\uff0c\u5185\u7f6e\u4e86 ",(0,r.kt)("inlineCode",{parentName:"li"},"Id"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"TenantId")," \u5b57\u6bb5"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Entity"),"\uff1a\u5b9e\u4f53\u901a\u7528\u62bd\u8c61\u7c7b\uff0c\u7ee7\u627f\u81ea ",(0,r.kt)("inlineCode",{parentName:"li"},"EntityBase"),"\uff0c\u540c\u65f6\u5185\u7f6e ",(0,r.kt)("inlineCode",{parentName:"li"},"CreatedTime"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"UpdatedTime")," \u5b57\u6bb5"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"EntityNotKey"),"\uff1a\u65e0\u952e\u5b9e\u4f53\u62bd\u8c61\u7c7b\uff0c\u89c6\u56fe\u3001\u5b58\u50a8\u8fc7\u7a0b\u3001\u51fd\u6570\u4f9d\u8d56\u62bd\u8c61\u7c7b")),(0,r.kt)("admonition",{title:"\u5b9e\u4f53\u5b9a\u4e49\u4f4d\u7f6e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u6709\u7ea6\u5b9a\uff0c\u5b9e\u4f53\u7edf\u4e00\u5b9a\u4e49\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Core")," \u5c42\u3002")),(0,r.kt)("h3",{id:"9321-\u5b9e\u4f53\u7ee7\u627f\u9009\u7528\u539f\u5219"},"9.3.2.1 \u5b9e\u4f53\u7ee7\u627f\u9009\u7528\u539f\u5219"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u5982\u679c\u4f60\u4e0d\u9700\u8981 ",(0,r.kt)("inlineCode",{parentName:"li"},"Furion")," \u4e3a\u5b9e\u4f53\u6dfb\u52a0\u4efb\u4f55\u5185\u7f6e\u7279\u6027\uff0c\u9009\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"IEntity"),"\uff0c\u65e0\u952e\u5b9e\u4f53\u9009\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"IEntityNotKey")),(0,r.kt)("li",{parentName:"ul"},"\u5982\u679c\u4f60\u53ea\u9700\u8981 ",(0,r.kt)("inlineCode",{parentName:"li"},"Id")," \u5c5e\u6027\uff0c\u9009\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"EntityBase")),(0,r.kt)("li",{parentName:"ul"},"\u5982\u679c\u4f60\u9700\u8981 ",(0,r.kt)("inlineCode",{parentName:"li"},"Furion")," \u4e3a\u4f60\u81ea\u52a8\u6dfb\u52a0\u5e38\u7528\u5b57\u6bb5\uff0c\u5219\u9009\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"Entity")),(0,r.kt)("li",{parentName:"ul"},"\u5982\u679c\u4f60\u9700\u8981\u89c6\u56fe\u3001\u5b58\u50a8\u8fc7\u7a0b\u3001\u51fd\u6570\u53ef\u4ee5\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"li"},"DbSet")," \u64cd\u4f5c\uff0c\u5219\u7ee7\u627f ",(0,r.kt)("inlineCode",{parentName:"li"},"EntityNotKey"))),(0,r.kt)("h3",{id:"9322-ientity-\u793a\u8303"},"9.3.2.2 ",(0,r.kt)("inlineCode",{parentName:"h3"},"IEntity")," \u793a\u8303\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5}",showLineNumbers:!0,"":!0,"{1,5}":!0},"using Furion.DatabaseAccessor;\n\nnamespace Furion.Core\n{\n public class User : IEntity\n {\n /// \n /// \u624b\u5de5\u5b9a\u4e49 Id\n /// \n public int Id { get; set; }\n\n /// \n /// \u540d\u79f0\n /// \n public string Name { get; set; }\n }\n}\n")),(0,r.kt)("h3",{id:"9323-entitybase-\u793a\u8303"},"9.3.2.3 ",(0,r.kt)("inlineCode",{parentName:"h3"},"EntityBase")," \u793a\u8303\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5}",showLineNumbers:!0,"":!0,"{1,5}":!0},"using Furion.DatabaseAccessor;\n\nnamespace Furion.Core\n{\n public class User : EntityBase\n {\n // \u65e0\u9700\u5b9a\u4e49 Id \u5c5e\u6027\n\n /// \n /// \u540d\u79f0\n /// \n public string Name { get; set; }\n }\n}\n")),(0,r.kt)("h3",{id:"9324-entity-\u793a\u8303"},"9.3.2.4 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Entity")," \u793a\u8303\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5}",showLineNumbers:!0,"":!0,"{1,5}":!0},"using Furion.DatabaseAccessor;\n\nnamespace Furion.Core\n{\n public class User : Entity\n {\n // \u65e0\u9700\u5b9a\u4e49 Id \u5c5e\u6027\n // \u5e76\u81ea\u52a8\u6dfb\u52a0 CreatedTime\uff0cUpdatedTime \u5c5e\u6027\n\n /// \n /// \u540d\u79f0\n /// \n public string Name { get; set; }\n }\n}\n")),(0,r.kt)("h3",{id:"9325-entitynotkey-\u793a\u8303"},"9.3.2.5 ",(0,r.kt)("inlineCode",{parentName:"h3"},"EntityNotKey")," \u793a\u8303\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,7-9}",showLineNumbers:!0,"":!0,"{1,5,7-9}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Core\n{\n public class UserView : EntityNotKey\n {\n public UserView() : base("\u89c6\u56fe\u540d\u79f0")\n {\n }\n\n /// \n /// Id\n /// \n public int Id { get; set; }\n\n /// \n /// \u540d\u79f0\n /// \n public string Name { get; set; }\n }\n}\n')),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u6570\u636e\u5e93\u5b9e\u4f53\u5fc5\u987b\u76f4\u63a5\u6216\u95f4\u63a5\u7ee7\u627f ",(0,r.kt)("inlineCode",{parentName:"p"},"IEntity")," \u624d\u80fd\u8fdb\u884c\u4ed3\u50a8\u7b49\u64cd\u4f5c\u3002")),(0,r.kt)("h2",{id:"933-\u81ea\u5b9a\u4e49\u516c\u5171\u5b9e\u4f53"},"9.3.3 \u81ea\u5b9a\u4e49\u516c\u5171\u5b9e\u4f53"),(0,r.kt)("p",null,"\u5728\u5b9e\u9645\u9879\u76ee\u5f00\u53d1\u4e2d\uff0c\u6211\u4eec\u901a\u5e38\u6bcf\u4e2a\u5e94\u7528\u7684\u6570\u636e\u5e93\u8868\u90fd\u6709\u4e00\u4e9b\u516c\u5171\u7684\u7c7b\uff0c\u6bd4\u5982\u521b\u5efa\u4eba\uff0c\u521b\u5efa\u65f6\u95f4\u7b49\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u5c31\u9700\u8981\u81ea\u5b9a\u4e49\u516c\u5171\u5b9e\u4f53\u7c7b\u4e86\u3002"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u521b\u5efa\u516c\u5171\u5b9e\u4f53\u7c7b\u9700\u8981\u6ee1\u8db3\u4ee5\u4e0b\u6761\u4ef6\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u516c\u5171\u5b9e\u4f53\u7c7b",(0,r.kt)("strong",{parentName:"li"},"\u5fc5\u987b\u662f\u516c\u5f00\u4e14\u662f\u62bd\u8c61\u7c7b")),(0,r.kt)("li",{parentName:"ul"},"\u516c\u5171\u5b9e\u4f53\u7c7b\u5fc5\u987b\u542b\u6709\u65e0\u53c2\u6784\u9020\u51fd\u6570"),(0,r.kt)("li",{parentName:"ul"},"\u516c\u5171\u5b9e\u4f53\u7c7b\u5fc5\u987b\u63d0\u4f9b\u6570\u636e\u5e93\u5b9a\u4f4d\u5668\u7684\u652f\u6301")),(0,r.kt)("p",null,"\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {83-91}",showLineNumbers:!0,"":!0,"{83-91}":!0},"using System;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel.DataAnnotations.Schema;\n\nnamespace Your.Namespace\n{\n public abstract class CommonEntity : CommonEntity\n {\n }\n\n public abstract class CommonEntity : CommonEntity\n {\n }\n\n public abstract class CommonEntity : PrivateCommonEntity\n where TDbContextLocator1 : class, IDbContextLocator\n {\n }\n\n public abstract class CommonEntity : PrivateCommonEntity\n where TDbContextLocator1 : class, IDbContextLocator\n where TDbContextLocator2 : class, IDbContextLocator\n {\n }\n\n public abstract class CommonEntity : PrivateCommonEntity\n where TDbContextLocator1 : class, IDbContextLocator\n where TDbContextLocator2 : class, IDbContextLocator\n where TDbContextLocator3 : class, IDbContextLocator\n {\n }\n\n public abstract class CommonEntity : PrivateCommonEntity\n where TDbContextLocator1 : class, IDbContextLocator\n where TDbContextLocator2 : class, IDbContextLocator\n where TDbContextLocator3 : class, IDbContextLocator\n where TDbContextLocator4 : class, IDbContextLocator\n {\n }\n\n public abstract class CommonEntity : PrivateCommonEntity\n where TDbContextLocator1 : class, IDbContextLocator\n where TDbContextLocator2 : class, IDbContextLocator\n where TDbContextLocator3 : class, IDbContextLocator\n where TDbContextLocator4 : class, IDbContextLocator\n where TDbContextLocator5 : class, IDbContextLocator\n {\n }\n\n public abstract class CommonEntity : PrivateCommonEntity\n where TDbContextLocator1 : class, IDbContextLocator\n where TDbContextLocator2 : class, IDbContextLocator\n where TDbContextLocator3 : class, IDbContextLocator\n where TDbContextLocator4 : class, IDbContextLocator\n where TDbContextLocator5 : class, IDbContextLocator\n where TDbContextLocator6 : class, IDbContextLocator\n {\n }\n\n public abstract class CommonEntity : PrivateCommonEntity\n where TDbContextLocator1 : class, IDbContextLocator\n where TDbContextLocator2 : class, IDbContextLocator\n where TDbContextLocator3 : class, IDbContextLocator\n where TDbContextLocator4 : class, IDbContextLocator\n where TDbContextLocator5 : class, IDbContextLocator\n where TDbContextLocator6 : class, IDbContextLocator\n where TDbContextLocator7 : class, IDbContextLocator\n {\n }\n\n public abstract class CommonEntity : PrivateCommonEntity\n where TDbContextLocator1 : class, IDbContextLocator\n where TDbContextLocator2 : class, IDbContextLocator\n where TDbContextLocator3 : class, IDbContextLocator\n where TDbContextLocator4 : class, IDbContextLocator\n where TDbContextLocator5 : class, IDbContextLocator\n where TDbContextLocator6 : class, IDbContextLocator\n where TDbContextLocator7 : class, IDbContextLocator\n where TDbContextLocator8 : class, IDbContextLocator\n {\n }\n\n public abstract class PrivateCommonEntity : IPrivateEntity\n {\n // \u6ce8\u610f\u662f\u5728\u8fd9\u91cc\u5b9a\u4e49\u4f60\u7684\u516c\u5171\u5b9e\u4f53\n public virtual TKey Id { get; set; }\n\n public virtual DateTime CreatedTime { get; set; }\n\n // \u66f4\u591a\u5c5e\u6027\u5b9a\u4e49\n }\n}\n")),(0,r.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u901a\u8fc7\u4e0a\u9762\u7684\u683c\u5f0f\u5b9a\u4e49\u53ef\u4ee5\u5b8c\u7f8e\u7684\u652f\u6301\u591a\u6570\u636e\u5e93\u64cd\u4f5c\uff0c\u5efa\u8bae\u91c7\u7528\u8fd9\u79cd\u683c\u5f0f\uff0c\u800c\u4e14\u6240\u6709\u7684\u516c\u5171\u5c5e\u6027\u90fd\u5e94\u8be5\u5b9a\u4e49\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"PrivateXXXX")," ",(0,r.kt)("inlineCode",{parentName:"p"},"\u79c1"),"\u6709\u7c7b\u4e2d\u3002")),(0,r.kt)("h2",{id:"934-\u6570\u636e\u5e93\u5b9e\u4f53\u914d\u7f6e"},"9.3.4 \u6570\u636e\u5e93\u5b9e\u4f53\u914d\u7f6e"),(0,r.kt)("p",null,"\u5728\u8fc7\u53bb\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"EF Core")," \u9879\u76ee\u5f00\u53d1\u4e2d\uff0c\u6570\u636e\u5e93\u5b9e\u4f53\u914d\u7f6e\u9700\u8981\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"DbContext")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"OnModelCreating")," \u4e2d\u914d\u7f6e\u3002",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e3a\u4e86\u7b80\u5316\u914d\u7f6e\u548c\u63d0\u9ad8\u5f00\u53d1\u6548\u7387\uff0c\u62bd\u8c61\u51fa\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"IEntityTypeBuilder")," \u63a5\u53e3\u3002"),(0,r.kt)("p",null,"\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"IEntityTypeBuilder")," \u63a5\u53e3\uff0c\u6211\u4eec\u65e0\u9700\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"DbContext")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"OnModelCreating")," \u4e2d\u914d\u7f6e\uff0c\u53ef\u5728\u4efb\u610f\u5730\u65b9\u914d\u7f6e\u3002"),(0,r.kt)("h3",{id:"9341-\u5728\u6570\u636e\u5e93\u5b9e\u4f53\u4e2d\u914d\u7f6e"},"9.3.4.1 \u5728\u6570\u636e\u5e93\u5b9e\u4f53\u4e2d\u914d\u7f6e"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,20-25}",showLineNumbers:!0,"":!0,"{1,5,20-25}":!0},"using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Metadata.Builders;\nusing System;\n\nnamespace Furion.Core\n{\n public class User : Entity, IEntityTypeBuilder\n {\n /// \n /// \u540d\u79f0\n /// \n public string Name { get; set; }\n\n /// \n /// \u5e74\u9f84\n /// \n public int Age { get; set; }\n\n // \u914d\u7f6e\u6570\u636e\u5e93\u5b9e\u4f53\n public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)\n {\n entityBuilder.HasKey(u => u.Id);\n entityBuilder.HasIndex(u => u.Name);\n }\n }\n}\n")),(0,r.kt)("h3",{id:"9342-\u5728\u4efb\u4f55\u5b9e\u4f8b\u7c7b\u4e2d\u914d\u7f6e"},"9.3.4.2 \u5728\u4efb\u4f55\u5b9e\u4f8b\u7c7b\u4e2d\u914d\u7f6e"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,8,10-14}",showLineNumbers:!0,"":!0,"{1,8,10-14}":!0},"using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Metadata.Builders;\nusing System;\n\nnamespace Furion.Core\n{\n public class SomeClass : IEntityTypeBuilder\n {\n public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)\n {\n entityBuilder.HasKey(u => u.Id);\n entityBuilder.HasIndex(u => u.Name);\n }\n }\n}\n")),(0,r.kt)("p",null,"\u5982\u4e0a\u9762\u4f8b\u5b50\uff0c\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"SomeClass")," \u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"User")," \u6570\u636e\u5e93\u5b9e\u4f53\u3002"),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"note"},(0,r.kt)("p",{parentName:"admonition"}," ",(0,r.kt)("inlineCode",{parentName:"p"},"SomeClass"),"\u5fc5\u987b\u58f0\u660e\u4e3a",(0,r.kt)("inlineCode",{parentName:"p"},"public"),"\uff0c\u5426\u5219\u65e0\u6cd5\u81ea\u52a8\u6ce8\u518c\u3002")),(0,r.kt)("admonition",{title:"\u66f4\u591a\u77e5\u8bc6",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u5982\u9700\u4e86\u89e3\u5b9e\u4f53\u914d\u7f6e\u652f\u6301\u54ea\u4e9b\u914d\u7f6e\u53ef\u67e5\u9605 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/ef/core/modeling/"},"\u3010EFCore - \u521b\u5efa\u6a21\u578b\u3011")," \u7ae0\u8282\u3002")),(0,r.kt)("h2",{id:"935-\u6570\u636e\u5e93\u5b9e\u4f53\u914d\u7f6e\u8bf4\u660e"},"9.3.5 \u6570\u636e\u5e93\u5b9e\u4f53\u914d\u7f6e\u8bf4\u660e"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4f1a\u81ea\u52a8\u626b\u63cf\u6240\u6709\u7ee7\u627f ",(0,r.kt)("inlineCode",{parentName:"p"},"IEntity")," \u63a5\u53e3\u7684\u7c7b\u8fdb\u884c ",(0,r.kt)("inlineCode",{parentName:"p"},"DbSet")," \u6ce8\u518c\uff0c\u4e5f\u5c31\u662f\u5b9e\u73b0\u81ea\u52a8\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"DbContext")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"OnModelCreating"),"\u3002"),(0,r.kt)("p",null,"\u5982\u679c\u9700\u8981\u8df3\u8fc7\u81ea\u52a8\u6ce8\u518c\uff0c\u53ea\u9700\u8981\u8d34 ",(0,r.kt)("inlineCode",{parentName:"p"},"[Manual]")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"[SuppressSniffer]")," \u7279\u6027\u5373\u53ef\u3002\u4e00\u65e6\u8d34\u4e86\u6b64\u7279\u6027\uff0c\u90a3\u4e48\u5c31\u9700\u8981\u624b\u52a8\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"DbContext")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"OnModelCreating")),(0,r.kt)("h2",{id:"936-\u914d\u7f6e\u5217\u540d\u53ca\u5217\u7c7b\u578b"},"9.3.6 \u914d\u7f6e\u5217\u540d\u53ca\u5217\u7c7b\u578b"),(0,r.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u9700\u8981\u624b\u52a8\u8bbe\u7f6e\u5217\u540d\u6216\u5217\u7c7b\u578b\uff0c\u6bd4\u5982 ",(0,r.kt)("inlineCode",{parentName:"p"},"decimal(18,2)"),"\uff0c\u8fd9\u65f6\u5019\u53ea\u9700\u8981\u5728\u5c5e\u6027\u4e0a\u9762\u8d34 ",(0,r.kt)("inlineCode",{parentName:"p"},'[Column("\u5217\u540d", TypeName="decimal(18,2)")]')," \u5373\u53ef\u3002"),(0,r.kt)("h2",{id:"937-\u914d\u7f6e\u6570\u636e\u5e93\u8868\u540d\u548c-schema"},"9.3.7 \u914d\u7f6e\u6570\u636e\u5e93\u8868\u540d\u548c ",(0,r.kt)("inlineCode",{parentName:"h2"},"Schema")),(0,r.kt)("p",null,"\u53ef\u4ee5\u901a\u8fc7\u5728\u5b9e\u4f53\u7c7b\u578b\u8d34 ",(0,r.kt)("inlineCode",{parentName:"p"},'[Table("\u8868\u540d", "dbo")]')," \u914d\u7f6e\u3002"),(0,r.kt)("h2",{id:"938-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.3.8 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,r.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}C.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/1759a798.c530c663.js b/handbook/build/assets/js/1759a798.c530c663.js new file mode 100644 index 00000000000..6c76c4a9cea --- /dev/null +++ b/handbook/build/assets/js/1759a798.c530c663.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9973],{6115:function(e){e.exports=JSON.parse('{"label":".net6","permalink":"/blog/tags/net-6","allTagsPath":"/blog/tags","count":5}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/17896441.d648632e.js b/handbook/build/assets/js/17896441.d648632e.js new file mode 100644 index 00000000000..1f1bb32b9c4 --- /dev/null +++ b/handbook/build/assets/js/17896441.d648632e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7918],{541:function(e,t,n){n.d(t,{Z:function(){return m}});var a=n(3117),l=n(102),i=n(7294),c=n(6010),s=n(3743),r="tableOfContents_jeP5",o=n(4996),u=["className"];function m(e){var t=e.className,n=(0,l.Z)(e,u);return i.createElement("div",{className:(0,c.Z)(r,"thin-scrollbar",t)},i.createElement(h,null),i.createElement(s.Z,(0,a.Z)({},n,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}function h(){return i.createElement("a",{href:"https://gitee.com/dotnetchina",target:"_blank",style:{display:"block",position:"relative"},title:"\u4e86\u89e3 dotNET China \u7ec4\u7ec7"},i.createElement("img",{src:(0,o.Z)("img/chinadotnet.png"),style:{display:"block",width:"90%",margin:"0 auto"}}))}}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/1a4e3797.3a9dedd8.js b/handbook/build/assets/js/1a4e3797.3a9dedd8.js new file mode 100644 index 00000000000..a291fb6fc56 --- /dev/null +++ b/handbook/build/assets/js/1a4e3797.3a9dedd8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7920],{8824:function(e,t,n){n.d(t,{c:function(){return o}});var r=n(7294),a=n(2263),l=["zero","one","two","few","many","other"];function u(e){return l.filter((function(t){return e.includes(t)}))}var c={locale:"en",pluralForms:u(["one","other"]),select:function(e){return 1===e?"one":"other"}};function s(){var e=(0,a.Z)().i18n.currentLocale;return(0,r.useMemo)((function(){try{return t=e,n=new Intl.PluralRules(t),{locale:t,pluralForms:u(n.resolvedOptions().pluralCategories),select:function(e){return n.select(e)}}}catch(r){return console.error('Failed to use Intl.PluralRules for locale "'+e+'".\nDocusaurus will fallback to the default (English) implementation.\nError: '+r.message+"\n"),c}var t,n}),[e])}function o(){var e=s();return{selectMessage:function(t,n){return function(e,t,n){var r=e.split("|");if(1===r.length)return r[0];r.length>n.pluralForms.length&&console.error("For locale="+n.locale+", a maximum of "+n.pluralForms.length+" plural forms are expected ("+n.pluralForms.join(",")+"), but the message contains "+r.length+": "+e);var a=n.select(t),l=n.pluralForms.indexOf(a);return r[Math.min(l,r.length-1)]}(n,t,e)}}}},1473:function(e,t,n){n.r(t),n.d(t,{default:function(){return C}});var r=n(7872),a=n(1017),l=n(4035),u=n(7294),c=n(2263),s=n(9338),o=n(5742),i=n(9960),m=n(5999),h=n(8824),f=n(6775),p=n(412);var g=function(){var e=(0,f.k6)(),t=(0,f.TH)(),n=(0,c.Z)().siteConfig.baseUrl,r=p.Z.canUseDOM?new URLSearchParams(t.search):null,a=(null==r?void 0:r.get("q"))||"",l=(null==r?void 0:r.get("ctx"))||"",u=(null==r?void 0:r.get("version"))||"",s=function(e){var n=new URLSearchParams(t.search);return e?n.set("q",e):n.delete("q"),n};return{searchValue:a,searchContext:l,searchVersion:u,updateSearchPath:function(t){var n=s(t);e.replace({search:n.toString()})},generateSearchPageLink:function(e){var t=s(e);return n+"search?"+t.toString()}}},d=n(22),v=n(8202),E=n(2539),y=n(726),S=n(2775),w=n(311),b=n(3926),I=n(1029),P="searchQueryInput_CFBF",x="searchResultItem_U687",F="searchResultItemPath_uIbk",R="searchResultItemSummary_oZHr";function Z(){var e=(0,c.Z)().siteConfig.baseUrl,t=(0,h.c)().selectMessage,n=g(),r=n.searchValue,s=n.searchContext,i=n.searchVersion,f=n.updateSearchPath,p=(0,u.useState)(r),E=p[0],y=p[1],S=(0,u.useState)(),b=S[0],I=S[1],x=(0,u.useState)(),F=x[0],R=x[1],Z=""+e+i,C=(0,u.useMemo)((function(){return E?(0,m.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:E}):(0,m.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})}),[E]);(0,u.useEffect)((function(){f(E),b&&(E?b(E,(function(e){R(e)})):R(void 0))}),[E,b]);var _=(0,u.useCallback)((function(e){y(e.target.value)}),[]);return(0,u.useEffect)((function(){r&&r!==E&&y(r)}),[r]),(0,u.useEffect)((function(){function e(){return(e=(0,l.Z)((0,a.Z)().mark((function e(){var t,n,r;return(0,a.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,(0,d.w)(Z,s);case 2:t=e.sent,n=t.wrappedIndexes,r=t.zhDictionary,I((function(){return(0,v.v)(n,r,100)}));case 6:case"end":return e.stop()}}),e)})))).apply(this,arguments)}!function(){e.apply(this,arguments)}()}),[s,Z]),u.createElement(u.Fragment,null,u.createElement(o.Z,null,u.createElement("meta",{property:"robots",content:"noindex, follow"}),u.createElement("title",null,C)),u.createElement("div",{className:"container margin-vert--lg"},u.createElement("h1",null,C),u.createElement("input",{type:"search",name:"q",className:P,"aria-label":"Search",onChange:_,value:E,autoComplete:"off",autoFocus:!0}),!b&&E&&u.createElement("div",null,u.createElement(w.Z,null)),F&&(F.length>0?u.createElement("p",null,t(F.length,(0,m.I)({id:"theme.SearchPage.documentsFound.plurals",message:"1 document found|{count} documents found",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)'},{count:F.length}))):u.createElement("p",null,(0,m.I)({id:"theme.SearchPage.noResultsText",message:"No documents were found",description:"The paragraph for empty search result"}))),u.createElement("section",null,F&&F.map((function(e){return u.createElement(k,{key:e.document.i,searchResult:e})})))))}function k(e){var t=e.searchResult,n=t.document,a=t.type,l=t.page,c=t.tokens,s=t.metadata,o=0===a,m=2===a,h=(o?n.b:l.b).slice(),f=m?n.s:n.t;o||h.push(l.t);var p="";if(I.vc&&c.length>0){for(var g,d=new URLSearchParams,v=(0,r.Z)(c);!(g=v()).done;){var w=g.value;d.append("_highlight",w)}p="?"+d.toString()}return u.createElement("article",{className:x},u.createElement("h2",null,u.createElement(i.Z,{to:n.u+p+(n.h||""),dangerouslySetInnerHTML:{__html:m?(0,E.C)(f,c):(0,y.o)(f,(0,S.m)(s,"t"),c,100)}})),h.length>0&&u.createElement("p",{className:F},(0,b.e)(h)),m&&u.createElement("p",{className:R,dangerouslySetInnerHTML:{__html:(0,y.o)(n.t,(0,S.m)(s,"t"),c,100)}}))}var C=function(){return u.createElement(s.Z,null,u.createElement(Z,null))}}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/1be78505.9469292d.js b/handbook/build/assets/js/1be78505.9469292d.js new file mode 100644 index 00000000000..3a2e21edb8a --- /dev/null +++ b/handbook/build/assets/js/1be78505.9469292d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9514,4972],{4326:function(e,t,n){n.r(t),n.d(t,{default:function(){return Ae}});var a=n(7294),r=n(6010),l=n(1944),i=n(5281),o=n(3320),c=n(3438),s=n(4477),d=n(1116),u=n(9338),m=n(5999),p=n(2466),b=n(5936);var f="backToTopButton_sjWU",h="backToTopButtonShow_xfvO";function g(){var e=function(e){var t=e.threshold,n=(0,a.useState)(!1),r=n[0],l=n[1],i=(0,a.useRef)(!1),o=(0,p.Ct)(),c=o.startScroll,s=o.cancelScroll;return(0,p.RF)((function(e,n){var a=e.scrollY,r=null==n?void 0:n.scrollY;r&&(i.current?i.current=!1:a>=r?(s(),l(!1)):a=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=t.createContext({}),l=function(e){var n=t.useContext(p),r=n;return e&&(r="function"==typeof e?e(n):s(s({},n),e)),r},c=function(e){var n=l(e.components);return t.createElement(p.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},d=t.forwardRef((function(e,n){var r=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),d=l(r),f=o,m=d["".concat(p,".").concat(f)]||d[f]||u[f]||i;return r?t.createElement(m,s(s({ref:n},c),{},{components:r})):t.createElement(m,s({ref:n},c))}));function f(e,n){var r=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=r.length,s=new Array(i);s[0]=d;var a={};for(var p in n)hasOwnProperty.call(n,p)&&(a[p]=n[p]);a.originalType=e,a.mdxType="string"==typeof e?e:o,s[1]=a;for(var l=2;l(u => u.Id == 1);\nvar expression2 = LinqExpression.Create((u,i) => u.Id == 1 && i > 0);\n")),(0,i.kt)("h2",{id:"52-\u62fc\u63a5\u4e24\u4e2a\u8868\u8fbe\u5f0f"},"5.2 \u62fc\u63a5\u4e24\u4e2a\u8868\u8fbe\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u521b\u5efa\u4e00\u4e2a\u521d\u59cb\u5316\u7684\u8868\u8fbe\u5f0f\nvar expression = LinqExpression.And();\nvar expression2 = LinqExpression.IndexAnd();\nvar expression3 = LinqExpression.Or();\nvar expression4 = LinqExpression.IndexOr();\n\n// \u62fc\u63a5\u8868\u8fbe\u5f0f\nvar expression5 = expression.And(expression2);\nvar expression6 = expression.AndIf(age > 18, expression2);\nvar expression7 = expression.Or(expression2);\nvar expression8 = expression.OrIf(age > 18, expression2);\n\n// \u83b7\u53d6\u8868\u8fbe\u5f0f\u5c5e\u6027\u540d\nvar properyName = expression.GetExpressionPropertyName(u => u.Name); // Name\n")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/1d598296.3c6c3276.js b/handbook/build/assets/js/1d598296.3c6c3276.js new file mode 100644 index 00000000000..b68b0e41da1 --- /dev/null +++ b/handbook/build/assets/js/1d598296.3c6c3276.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[3085],{4023:function(e){e.exports=JSON.parse('{"permalink":"/blog/tags/net-5","page":1,"postsPerPage":10,"totalPages":1,"totalCount":7,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/205875c5.a0fb24b6.js b/handbook/build/assets/js/205875c5.a0fb24b6.js new file mode 100644 index 00000000000..56c77c88ff6 --- /dev/null +++ b/handbook/build/assets/js/205875c5.a0fb24b6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[326],{8853:function(o){o.exports=JSON.parse('{"permalink":"/blog/tags/upload","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/22f09a41.85366117.js b/handbook/build/assets/js/22f09a41.85366117.js new file mode 100644 index 00000000000..846cb31fb79 --- /dev/null +++ b/handbook/build/assets/js/22f09a41.85366117.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6494],{3905:function(e,n,t){t.d(n,{Zo:function(){return d},kt:function(){return m}});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},d=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},g=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),g=u(t),m=o,c=g["".concat(s,".").concat(m)]||g[m]||p[m]||a;return t?r.createElement(c,i(i({ref:n},d),{},{components:t})):r.createElement(c,i({ref:n},d))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=g;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;uId",id:"26121-\u6307\u5b9a\u4f5c\u4e1a-id",level:3},{value:"26.1.2.2 \u591a\u4e2a\u4f5c\u4e1a\u89e6\u53d1\u5668",id:"26122-\u591a\u4e2a\u4f5c\u4e1a\u89e6\u53d1\u5668",level:3},{value:"26.1.2.3 \u4e32\u884c \u6267\u884c",id:"26123-\u4e32\u884c-\u6267\u884c",level:3},{value:"26.1.2.4 \u6253\u5370\u4f5c\u4e1a\u5b8c\u6574\u4fe1\u606f",id:"26124-\u6253\u5370\u4f5c\u4e1a\u5b8c\u6574\u4fe1\u606f",level:3},{value:"26.1.2.5 \u8fd0\u884c\u65f6\uff08\u52a8\u6001\uff09\u64cd\u4f5c\u4f5c\u4e1a",id:"26125-\u8fd0\u884c\u65f6\u52a8\u6001\u64cd\u4f5c\u4f5c\u4e1a",level:3},{value:"26.1.2.6 \u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027",id:"26126-\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027",level:3},{value:"26.1.3 \u4f5c\u4e1a\u4fe1\u606f JobDetail \u53ca\u6784\u5efa\u5668",id:"2613-\u4f5c\u4e1a\u4fe1\u606f-jobdetail-\u53ca\u6784\u5efa\u5668",level:2},{value:"26.1.3.1 \u5173\u4e8e\u4f5c\u4e1a\u4fe1\u606f",id:"26131-\u5173\u4e8e\u4f5c\u4e1a\u4fe1\u606f",level:3},{value:"26.1.3.2 \u5173\u4e8e\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668",id:"26132-\u5173\u4e8e\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668",level:3},{value:"26.1.3.3 \u8bbe\u7f6e\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668",id:"26133-\u8bbe\u7f6e\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668",level:3},{value:"26.1.3.4 \u4f5c\u4e1a\u4fe1\u606f/\u6784\u5efa\u5668\u989d\u5916\u6570\u636e",id:"26134-\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668\u989d\u5916\u6570\u636e",level:3},{value:"26.1.3.5 \u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa",id:"26135-\u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa",level:3},{value:"26.1.4 \u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f IJob",id:"2614-\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f-ijob",level:2},{value:"26.1.4.1 \u5982\u4f55\u5b9a\u4e49",id:"26141-\u5982\u4f55\u5b9a\u4e49",level:3},{value:"26.1.4.2 \u4f9d\u8d56\u6ce8\u5165",id:"26142-\u4f9d\u8d56\u6ce8\u5165",level:3},{value:"26.1.4.3 JobExecutingContext \u4e0a\u4e0b\u6587",id:"26143-jobexecutingcontext-\u4e0a\u4e0b\u6587",level:3},{value:"26.1.4.4 \u4f5c\u4e1a\u88ab\u53d6\u6d88\u5904\u7406",id:"26144-\u4f5c\u4e1a\u88ab\u53d6\u6d88\u5904\u7406",level:3},{value:"26.1.5 \u4f5c\u4e1a\u89e6\u53d1\u5668 Trigger \u53ca\u6784\u5efa\u5668",id:"2615-\u4f5c\u4e1a\u89e6\u53d1\u5668-trigger-\u53ca\u6784\u5efa\u5668",level:2},{value:"26.1.5.1 \u5173\u4e8e\u4f5c\u4e1a\u89e6\u53d1\u5668",id:"26151-\u5173\u4e8e\u4f5c\u4e1a\u89e6\u53d1\u5668",level:3},{value:"26.1.5.2 \u4f5c\u4e1a\u89e6\u53d1\u5668\u72b6\u6001",id:"26152-\u4f5c\u4e1a\u89e6\u53d1\u5668\u72b6\u6001",level:3},{value:"26.1.5.3 \u5173\u4e8e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668",id:"26153-\u5173\u4e8e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668",level:3},{value:"26.1.5.4 \u5185\u7f6e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668",id:"26154-\u5185\u7f6e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668",level:3},{value:"26.1.5.5 \u81ea\u5b9a\u4e49\u4f5c\u4e1a\u89e6\u53d1\u5668",id:"26155-\u81ea\u5b9a\u4e49\u4f5c\u4e1a\u89e6\u53d1\u5668",level:3},{value:"26.1.5.6 \u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027",id:"26156-\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027",level:3},{value:"26.1.5.7 \u8bbe\u7f6e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668",id:"26157-\u8bbe\u7f6e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668",level:3},{value:"26.1.5.8 \u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa",id:"26158-\u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa",level:3},{value:"26.1.6 \u4f5c\u4e1a\u8ba1\u5212 Scheduler \u53ca\u6784\u5efa\u5668",id:"2616-\u4f5c\u4e1a\u8ba1\u5212-scheduler-\u53ca\u6784\u5efa\u5668",level:2},{value:"26.1.6.1 \u5173\u4e8e\u4f5c\u4e1a\u8ba1\u5212",id:"26161-\u5173\u4e8e\u4f5c\u4e1a\u8ba1\u5212",level:3},{value:"26.1.6.2 \u5173\u4e8e\u4f5c\u4e1a\u8ba1\u5212\u6784\u5efa\u5668",id:"26162-\u5173\u4e8e\u4f5c\u4e1a\u8ba1\u5212\u6784\u5efa\u5668",level:3},{value:"26.1.6.3 \u8bbe\u7f6e\u4f5c\u4e1a\u8ba1\u5212\u6784\u5efa\u5668",id:"26163-\u8bbe\u7f6e\u4f5c\u4e1a\u8ba1\u5212\u6784\u5efa\u5668",level:3},{value:"26.1.6.4 \u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa",id:"26164-\u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa",level:3},{value:"26.1.7 \u4f5c\u4e1a\u8c03\u5ea6\u5668 ScheduleOptionsBuilder \u914d\u7f6e\u9009\u9879",id:"2617-\u4f5c\u4e1a\u8c03\u5ea6\u5668-scheduleoptionsbuilder-\u914d\u7f6e\u9009\u9879",level:2},{value:"26.1.7.1 \u5173\u4e8e ScheduleOptionsBuilder",id:"26171-\u5173\u4e8e-scheduleoptionsbuilder",level:3},{value:"26.1.7.2 ScheduleOptionsBuilder \u5185\u7f6e\u5c5e\u6027\u548c\u65b9\u6cd5",id:"26172-scheduleoptionsbuilder-\u5185\u7f6e\u5c5e\u6027\u548c\u65b9\u6cd5",level:3},{value:"26.1.8 \u4f5c\u4e1a\u76d1\u89c6\u5668 IJobMonitor",id:"2618-\u4f5c\u4e1a\u76d1\u89c6\u5668-ijobmonitor",level:2},{value:"26.1.8.1 \u5173\u4e8e\u53c2\u6570 JobExecutionContext",id:"26181-\u5173\u4e8e\u53c2\u6570-jobexecutioncontext",level:3},{value:"26.1.9 \u4f5c\u4e1a\u6267\u884c\u5668 IJobExecutor",id:"2619-\u4f5c\u4e1a\u6267\u884c\u5668-ijobexecutor",level:2},{value:"26.1.10 \u4f5c\u4e1a\u8ba1\u5212\u5de5\u5382 ISchedulerFactory",id:"26110-\u4f5c\u4e1a\u8ba1\u5212\u5de5\u5382-ischedulerfactory",level:2},{value:"26.1.10.1 \u67e5\u627e\u6240\u6709\u4f5c\u4e1a",id:"261101-\u67e5\u627e\u6240\u6709\u4f5c\u4e1a",level:3},{value:"26.1.10.2 \u67e5\u627e\u4e0b\u4e00\u4e2a\u89e6\u53d1\u7684\u4f5c\u4e1a",id:"261102-\u67e5\u627e\u4e0b\u4e00\u4e2a\u89e6\u53d1\u7684\u4f5c\u4e1a",level:3},{value:"26.1.10.3 \u83b7\u53d6\u5355\u4e2a\u4f5c\u4e1a",id:"261103-\u83b7\u53d6\u5355\u4e2a\u4f5c\u4e1a",level:3},{value:"26.1.10.4 \u6dfb\u52a0\u4f5c\u4e1a",id:"261104-\u6dfb\u52a0\u4f5c\u4e1a",level:3},{value:"26.1.10.5 \u66f4\u65b0\u4f5c\u4e1a",id:"261105-\u66f4\u65b0\u4f5c\u4e1a",level:3},{value:"26.1.10.6 \u5220\u9664\u4f5c\u4e1a",id:"261106-\u5220\u9664\u4f5c\u4e1a",level:3},{value:"26.1.10.7 \u68c0\u67e5\u4f5c\u4e1a\u662f\u5426\u5b58\u5728",id:"261107-\u68c0\u67e5\u4f5c\u4e1a\u662f\u5426\u5b58\u5728",level:3},{value:"26.1.10.8 \u542f\u52a8\u6240\u6709\u4f5c\u4e1a",id:"261108-\u542f\u52a8\u6240\u6709\u4f5c\u4e1a",level:3},{value:"26.1.10.9 \u6682\u505c\u6240\u6709\u4f5c\u4e1a",id:"261109-\u6682\u505c\u6240\u6709\u4f5c\u4e1a",level:3},{value:"26.1.10.10 \u5220\u9664\u6240\u6709\u4f5c\u4e1a",id:"2611010-\u5220\u9664\u6240\u6709\u4f5c\u4e1a",level:3},{value:"26.1.10.11 \u5f3a\u5236\u5524\u9192\u4f5c\u4e1a\u8c03\u5ea6\u5668",id:"2611011-\u5f3a\u5236\u5524\u9192\u4f5c\u4e1a\u8c03\u5ea6\u5668",level:3},{value:"26.1.10.12 \u5f3a\u5236\u89e6\u53d1\u6240\u6709\u4f5c\u4e1a\u6301\u4e45\u5316",id:"2611012-\u5f3a\u5236\u89e6\u53d1\u6240\u6709\u4f5c\u4e1a\u6301\u4e45\u5316",level:3},{value:"26.1.11 \u4f5c\u4e1a\u8ba1\u5212 IScheduler",id:"26111-\u4f5c\u4e1a\u8ba1\u5212-ischeduler",level:2},{value:"26.1.11.1 \u83b7\u53d6 IScheduler \u5b9e\u4f8b",id:"261111-\u83b7\u53d6-ischeduler-\u5b9e\u4f8b",level:3},{value:"26.1.11.2 \u83b7\u53d6 SchedulerModel \u5b9e\u4f8b",id:"261112-\u83b7\u53d6-schedulermodel-\u5b9e\u4f8b",level:3},{value:"26.1.11.3 \u83b7\u53d6 SchedulerBuilder",id:"261113-\u83b7\u53d6-schedulerbuilder",level:3},{value:"26.1.11.4 \u83b7\u53d6 JobBuilder",id:"261114-\u83b7\u53d6-jobbuilder",level:3},{value:"26.1.11.5 \u83b7\u53d6 TriggerBuilders",id:"261115-\u83b7\u53d6-triggerbuilders",level:3},{value:"26.1.11.6 \u83b7\u53d6\u5355\u4e2a TriggerBuilder",id:"261116-\u83b7\u53d6\u5355\u4e2a-triggerbuilder",level:3},{value:"26.1.11.7 \u542f\u52a8\u5f53\u524d\u4f5c\u4e1a",id:"261117-\u542f\u52a8\u5f53\u524d\u4f5c\u4e1a",level:3},{value:"26.1.11.8 \u6682\u505c\u5f53\u524d\u4f5c\u4e1a",id:"261118-\u6682\u505c\u5f53\u524d\u4f5c\u4e1a",level:3},{value:"26.1.11.9 \u542f\u52a8\u4f5c\u4e1a\u7279\u5b9a\u89e6\u53d1\u5668",id:"261119-\u542f\u52a8\u4f5c\u4e1a\u7279\u5b9a\u89e6\u53d1\u5668",level:3},{value:"26.1.11.10 \u6682\u505c\u4f5c\u4e1a\u7279\u5b9a\u89e6\u53d1\u5668",id:"2611110-\u6682\u505c\u4f5c\u4e1a\u7279\u5b9a\u89e6\u53d1\u5668",level:3},{value:"26.1.11.11 \u66f4\u65b0\u4f5c\u4e1a\u4fe1\u606f",id:"2611111-\u66f4\u65b0\u4f5c\u4e1a\u4fe1\u606f",level:3},{value:"26.1.11.12 \u83b7\u53d6\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668",id:"2611112-\u83b7\u53d6\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668",level:3},{value:"26.1.11.13 \u6dfb\u52a0\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668",id:"2611113-\u6dfb\u52a0\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668",level:3},{value:"26.1.11.14 \u5220\u9664\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668",id:"2611114-\u5220\u9664\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668",level:3},{value:"26.1.11.15 \u5224\u65ad\u4f5c\u4e1a\u662f\u5426\u5305\u542b\u7279\u5b9a\u89e6\u53d1\u5668",id:"2611115-\u5224\u65ad\u4f5c\u4e1a\u662f\u5426\u5305\u542b\u7279\u5b9a\u89e6\u53d1\u5668",level:3},{value:"26.1.11.16 \u5220\u9664\u5f53\u524d\u4f5c\u4e1a",id:"2611116-\u5220\u9664\u5f53\u524d\u4f5c\u4e1a",level:3},{value:"26.1.11.17 \u5f3a\u5236\u89e6\u53d1\u6240\u6709\u4f5c\u4e1a\u6301\u4e45\u5316",id:"2611117-\u5f3a\u5236\u89e6\u53d1\u6240\u6709\u4f5c\u4e1a\u6301\u4e45\u5316",level:3},{value:"26.1.11.18 \u8f93\u51fa JSON \u5b57\u7b26\u4e32",id:"2611118-\u8f93\u51fa-json-\u5b57\u7b26\u4e32",level:3},{value:"26.1.12 \u4f5c\u4e1a\u6301\u4e45\u5316\u5668 IJobPersistence",id:"26112-\u4f5c\u4e1a\u6301\u4e45\u5316\u5668-ijobpersistence",level:2},{value:"26.1.13 \u4f5c\u4e1a\u96c6\u7fa4\u63a7\u5236",id:"26113-\u4f5c\u4e1a\u96c6\u7fa4\u63a7\u5236",level:2},{value:"26.1.14 \u5982\u4f55\u90e8\u7f72",id:"26114-\u5982\u4f55\u90e8\u7f72",level:2},{value:"26.1.15 \u5e38\u89c1\u95ee\u9898",id:"26115-\u5e38\u89c1\u95ee\u9898",level:2},{value:"26.1.15 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"26115-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],m={toc:g};function c(e){var n=e.components,t=(0,o.Z)(e,l);return(0,a.kt)("wrapper",(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{title:"\u5f53\u524d\u6587\u6863\u8fd8\u672a\u53d1\u5e03",type:"caution"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"\u5f53\u524d\u6587\u6863\u8fd8\u5728\u7f16\u5199\u4e2d\uff0c\u5df2\u5b8c\u6210\u4e86 95%\uff0c\u5c06\u5728 2022 \u5e74 11 \u6708 23 \u65e5\u5b8c\u6210\u3002"))),(0,a.kt)("hr",null),(0,a.kt)("admonition",{title:"4.8.0 \u4ee5\u4e0b\u7248\u672c\u8bf4\u660e",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Furion 4.8.0+")," \u7248\u672c\u91c7\u7528 ",(0,a.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Sundial"},"Sundial")," \u5b9a\u65f6\u4efb\u52a1\u66ff\u6362\u539f\u6709\u7684 ",(0,a.kt)("inlineCode",{parentName:"strong"},"TaskScheduler")),"\uff0c",(0,a.kt)("a",{parentName:"p",href:"/docs/job-old"},"\u67e5\u770b\u65e7\u6587\u6863"))),(0,a.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion 4.8.0 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,a.kt)("h2",{id:"2611-\u5173\u4e8e\u8c03\u5ea6\u4f5c\u4e1a"},"26.1.1 \u5173\u4e8e\u8c03\u5ea6\u4f5c\u4e1a"),(0,a.kt)("p",null,"\u8c03\u5ea6\u4f5c\u4e1a\u53c8\u79f0\u5b9a\u65f6\u4efb\u52a1\uff0c\u987e\u540d\u601d\u4e49\uff0c\u5b9a\u65f6\u4efb\u52a1\u5c31\u662f\u5728\u7279\u5b9a\u7684\u65f6\u95f4\u6216\u7b26\u5408\u67d0\u79cd\u65f6\u95f4\u89c4\u5f8b\u81ea\u52a8\u89e6\u53d1\u5e76\u6267\u884c\u4efb\u52a1\u3002"),(0,a.kt)("img",{src:(0,i.Z)("img/scdr.png")}),(0,a.kt)("h2",{id:"2612-\u5feb\u901f\u5165\u95e8"},"26.1.2 \u5feb\u901f\u5165\u95e8"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\u5b9a\u4e49\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f ",(0,a.kt)("inlineCode",{parentName:"li"},"MyJob"),"\uff1a")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,9}",showLineNumbers:!0,"{1,9}":!0},'public class MyJob : IJob\n{\n private readonly ILogger _logger;\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");\n await Task.CompletedTask;\n }\n}\n')),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"li"},"Startup.cs")," \u6ce8\u518c ",(0,a.kt)("inlineCode",{parentName:"li"},"Schedule")," \u670d\u52a1\uff1a")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3-4}",showLineNumbers:!0,"{1,3-4}":!0},"services.AddSchedule(options =>\n{\n // \u6ce8\u518c\u4f5c\u4e1a\uff0c\u5e76\u914d\u7f6e\u4f5c\u4e1a\u89e6\u53d1\u5668\n options.AddJob(Triggers.Secondly()); // \u8868\u793a\u6bcf\u79d2\u6267\u884c\n});\n")),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6,8,10,12}",showLineNumbers:!0,"{2,4,6,8,10,12}":!0},"info: 2022-11-17 16:23:56.0166669 +08:00 \u661f\u671f\u56db L MyJob[0] #16\n job1 job1_trigger1 2022/11/17 16:23:56 * * * * * *\ninfo: 2022-11-17 16:23:57.0125960 +08:00 \u661f\u671f\u56db L MyJob[0] #17\n job1 job1_trigger1 2022/11/17 16:23:57 * * * * * *\ninfo: 2022-11-17 16:23:58.0120379 +08:00 \u661f\u671f\u56db L MyJob[0] #16\n job1 job1_trigger1 2022/11/17 16:23:58 * * * * * *\ninfo: 2022-11-17 16:23:59.0071986 +08:00 \u661f\u671f\u56db L MyJob[0] #5\n job1 job1_trigger1 2022/11/17 16:23:59 * * * * * *\ninfo: 2022-11-17 16:24:00.0196813 +08:00 \u661f\u671f\u56db L MyJob[0] #16\n job1 job1_trigger1 2022/11/17 16:24:00 * * * * * *\ninfo: 2022-11-17 16:24:01.0305799 +08:00 \u661f\u671f\u56db L MyJob[0] #17\n job1 job1_trigger1 2022/11/17 16:24:01 * * * * * *\n")),(0,a.kt)("h3",{id:"26121-\u6307\u5b9a\u4f5c\u4e1a-id"},"26.1.2.1 \u6307\u5b9a\u4f5c\u4e1a ",(0,a.kt)("inlineCode",{parentName:"h3"},"Id")),(0,a.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e0d\u6307\u5b9a\u4f5c\u4e1a ",(0,a.kt)("inlineCode",{parentName:"p"},"Id")," \u4f1a\u81ea\u52a8\u751f\u6210 ",(0,a.kt)("inlineCode",{parentName:"p"},"job[\u7f16\u53f7]"),"\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"{3}":!0},'services.AddSchedule(options =>\n{\n options.AddJob("myjob", Triggers.Secondly());\n});\n')),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6,8,10,12}",showLineNumbers:!0,"":!0,"{2,4,6,8,10,12}":!0},"info: 2022-11-17 16:25:44.0339177 +08:00 \u661f\u671f\u56db L MyJob[0] #3\n myjob myjob_trigger1 2022/11/17 16:25:44 * * * * * *\ninfo: 2022-11-17 16:25:45.0064838 +08:00 \u661f\u671f\u56db L MyJob[0] #14\n myjob myjob_trigger1 2022/11/17 16:25:45 * * * * * *\ninfo: 2022-11-17 16:25:46.0186243 +08:00 \u661f\u671f\u56db L MyJob[0] #15\n myjob myjob_trigger1 2022/11/17 16:25:46 * * * * * *\ninfo: 2022-11-17 16:25:47.0175115 +08:00 \u661f\u671f\u56db L MyJob[0] #16\n myjob myjob_trigger1 2022/11/17 16:25:47 * * * * * *\ninfo: 2022-11-17 16:25:48.0304982 +08:00 \u661f\u671f\u56db L MyJob[0] #15\n myjob myjob_trigger1 2022/11/17 16:25:48 * * * * * *\ninfo: 2022-11-17 16:25:49.0070855 +08:00 \u661f\u671f\u56db L MyJob[0] #16\n myjob myjob_trigger1 2022/11/17 16:25:49 * * * * * *\n")),(0,a.kt)("h3",{id:"26122-\u591a\u4e2a\u4f5c\u4e1a\u89e6\u53d1\u5668"},"26.1.2.2 \u591a\u4e2a\u4f5c\u4e1a\u89e6\u53d1\u5668"),(0,a.kt)("p",null,"\u6709\u65f6\u5019\uff0c\u4e00\u4e2a\u4f5c\u4e1a\u652f\u6301\u591a\u79cd\u89e6\u53d1\u65f6\u95f4\uff0c\u6bd4\u5982 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u6bcf\u5206\u949f")," \u6267\u884c\u4e00\u6b21\uff0c\u6bcf ",(0,a.kt)("inlineCode",{parentName:"p"},"5\u79d2")," \u6267\u884c\u4e00\u6b21\uff0c\u6bcf\u5206\u949f\u7b2c ",(0,a.kt)("inlineCode",{parentName:"p"},"3/7/8\u79d2")," \u6267\u884c\u4e00\u6b21\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3-5}",showLineNumbers:!0,"{3-5}":!0},'services.AddSchedule(options =>\n{\n options.AddJob(Triggers.Minutely() // \u6bcf\u5206\u949f\u5f00\u59cb\n , Triggers.Period(5000) // \u6bcf 5 \u79d2\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528 Triggers.PeriodSeconds(5)\n , Triggers.Cron("3,7,8 * * * * ?", CronStringFormat.WithSeconds)); // \u6bcf\u5206\u949f\u7b2c 3/7/8 \u79d2\n});\n')),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,10,14,18,20}",showLineNumbers:!0,"{2,10,14,18,20}":!0},"info: 2022-11-17 16:45:40.5258191 +08:00 \u661f\u671f\u56db L MyJob[0] #14\n job1 job1_trigger2 2022/11/17 16:45:40 5000ms\ninfo: 2022-11-17 16:45:45.5281473 +08:00 \u661f\u671f\u56db L MyJob[0] #3\n job1 job1_trigger2 2022/11/17 16:45:45 5000ms\ninfo: 2022-11-17 16:45:50.5378417 +08:00 \u661f\u671f\u56db L MyJob[0] #8\n job1 job1_trigger2 2022/11/17 16:45:50 5000ms\ninfo: 2022-11-17 16:45:55.5436499 +08:00 \u661f\u671f\u56db L MyJob[0] #3\n job1 job1_trigger2 2022/11/17 16:45:55 5000ms\ninfo: 2022-11-17 16:46:00.0253985 +08:00 \u661f\u671f\u56db L MyJob[0] #14\n job1 job1_trigger1 2022/11/17 16:46:00 * * * * *\ninfo: 2022-11-17 16:46:00.5494676 +08:00 \u661f\u671f\u56db L MyJob[0] #16\n job1 job1_trigger2 2022/11/17 16:46:00 5000ms\ninfo: 2022-11-17 16:46:03.0238143 +08:00 \u661f\u671f\u56db L MyJob[0] #15\n job1 job1_trigger3 2022/11/17 16:46:03 3,7,8 * * * * ?\ninfo: 2022-11-17 16:46:05.5629293 +08:00 \u661f\u671f\u56db L MyJob[0] #14\n job1 job1_trigger2 2022/11/17 16:46:05 5000ms\ninfo: 2022-11-17 16:46:07.0169836 +08:00 \u661f\u671f\u56db L MyJob[0] #15\n job1 job1_trigger3 2022/11/17 16:46:07 3,7,8 * * * * ?\ninfo: 2022-11-17 16:46:08.0128756 +08:00 \u661f\u671f\u56db L MyJob[0] #14\n job1 job1_trigger3 2022/11/17 16:46:08 3,7,8 * * * * ?\ninfo: 2022-11-17 16:46:10.5731138 +08:00 \u661f\u671f\u56db L MyJob[0] #8\n job1 job1_trigger2 2022/11/17 16:46:10 5000ms\ninfo: 2022-11-17 16:46:15.5841547 +08:00 \u661f\u671f\u56db L MyJob[0] #15\n job1 job1_trigger2 2022/11/17 16:46:15 5000ms\ninfo: 2022-11-17 16:46:20.5866898 +08:00 \u661f\u671f\u56db L MyJob[0] #8\n job1 job1_trigger2 2022/11/17 16:46:20 5000ms\n")),(0,a.kt)("h3",{id:"26123-\u4e32\u884c-\u6267\u884c"},"26.1.2.3 ",(0,a.kt)("inlineCode",{parentName:"h3"},"\u4e32\u884c")," \u6267\u884c"),(0,a.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4f5c\u4e1a\u91c7\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u5e76\u884c")," \u6267\u884c\u65b9\u5f0f\uff0c\u4e5f\u5c31\u662f\u4e0d\u4f1a\u7b49\u5f85\u4e0a\u4e00\u6b21\u4f5c\u4e1a\u6267\u884c\u5b8c\u6210\uff0c\u53ea\u8981\u89e6\u53d1\u65f6\u95f4\u5230\u4e86\u5c31\u81ea\u52a8\u6267\u884c\uff0c\u4f46\u4e00\u4e9b\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u53ef\u80fd\u5e0c\u671b\u7b49\u5f85\u4e0a\u4e00\u6b21\u4f5c\u4e1a\u5b8c\u6210\u518d\u6267\u884c\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"{3}":!0},"services.AddSchedule(options =>\n{\n options.AddJob(concurrent: false, Triggers.Secondly()); // \u4e32\u884c\uff0c\u6bcf\u79d2\u6267\u884c\n});\n")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {12}",showLineNumbers:!0,"{12}":!0},'public class MyJob : IJob\n{\n private readonly ILogger _logger;\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");\n await Task.Delay(2000, stoppingToken); // \u8fd9\u91cc\u6a21\u62df\u8017\u65f6\u64cd\u4f5c\uff0c\u6bd4\u5982\u8017\u65f62\u79d2\n }\n}\n')),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,8,14,20}",showLineNumbers:!0,"{2,8,14,20}":!0},"info: 2022-11-17 16:57:49.0898900 +08:00 \u661f\u671f\u56db L MyJob[0] #8\n job1 job1_trigger1 2022/11/17 16:57:49 * * * * * *\nwarn: 2022-11-17 16:57:50.0322409 +08:00 \u661f\u671f\u56db L System.Logging.ScheduleService[0] #8\n 11/17/2022 16:57:50: The trigger of job failed to execute as scheduled due to blocking.\nwarn: 2022-11-17 16:57:51.0099629 +08:00 \u661f\u671f\u56db L System.Logging.ScheduleService[0] #8\n 11/17/2022 16:57:51: The trigger of job failed to execute as scheduled due to blocking.\ninfo: 2022-11-17 16:57:52.0192847 +08:00 \u661f\u671f\u56db L MyJob[0] #8\n job1 job1_trigger1 2022/11/17 16:57:52 * * * * * *\nwarn: 2022-11-17 16:57:53.0159256 +08:00 \u661f\u671f\u56db L System.Logging.ScheduleService[0] #8\n 11/17/2022 16:57:53: The trigger of job failed to execute as scheduled due to blocking.\nwarn: 2022-11-17 16:57:54.0101172 +08:00 \u661f\u671f\u56db L System.Logging.ScheduleService[0] #8\n 11/17/2022 16:57:54: The trigger of job failed to execute as scheduled due to blocking.\ninfo: 2022-11-17 16:57:55.0038536 +08:00 \u661f\u671f\u56db L MyJob[0] #13\n job1 job1_trigger1 2022/11/17 16:57:55 * * * * * *\nwarn: 2022-11-17 16:57:56.0158085 +08:00 \u661f\u671f\u56db L System.Logging.ScheduleService[0] #16\n 11/17/2022 16:57:56: The trigger of job failed to execute as scheduled due to blocking.\nwarn: 2022-11-17 16:57:57.0276842 +08:00 \u661f\u671f\u56db L System.Logging.ScheduleService[0] #16\n 11/17/2022 16:57:57: The trigger of job failed to execute as scheduled due to blocking.\ninfo: 2022-11-17 16:57:58.0100972 +08:00 \u661f\u671f\u56db L MyJob[0] #13\n job1 job1_trigger1 2022/11/17 16:57:58 * * * * * *\nwarn: 2022-11-17 16:57:59.0149137 +08:00 \u661f\u671f\u56db L System.Logging.ScheduleService[0] #13\n 11/17/2022 16:57:59: The trigger of job failed to execute as scheduled due to blocking.\n")),(0,a.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u4e32\u884c")," \u6267\u884c\u4f46\u56e0\u4e3a\u8017\u65f6\u5bfc\u81f4",(0,a.kt)("strong",{parentName:"p"},"\u89e6\u53d1\u65f6\u95f4\u5230\u4e86\u4f46\u5b9e\u9645\u672a\u80fd\u6267\u884c"),"\u4f1a\u9ed8\u8ba4\u8f93\u51fa ",(0,a.kt)("inlineCode",{parentName:"p"},"warn")," \u8b66\u544a\u65e5\u5fd7\uff0c\u5982\u9700\u5173\u95ed\u53ea\u9700\u8981\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"{3}":!0},"services.AddSchedule(options =>\n{\n options.LogEnabled = false;\n options.AddJob(concurrent: false, Triggers.Secondly()); // \u6bcf\u79d2\u6267\u884c\n});\n")),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6,8,10}",showLineNumbers:!0,"{2,4,6,8,10}":!0},"info: 2022-11-17 17:02:28.0559602 +08:00 \u661f\u671f\u56db L MyJob[0] #5\n job1 job1_trigger1 2022/11/17 17:02:28 * * * * * *\ninfo: 2022-11-17 17:02:31.0183238 +08:00 \u661f\u671f\u56db L MyJob[0] #8\n job1 job1_trigger1 2022/11/17 17:02:31 * * * * * *\ninfo: 2022-11-17 17:02:34.0130555 +08:00 \u661f\u671f\u56db L MyJob[0] #13\n job1 job1_trigger1 2022/11/17 17:02:34 * * * * * *\ninfo: 2022-11-17 17:02:37.0040306 +08:00 \u661f\u671f\u56db L MyJob[0] #15\n job1 job1_trigger1 2022/11/17 17:02:37 * * * * * *\ninfo: 2022-11-17 17:02:39.0142346 +08:00 \u661f\u671f\u56db L MyJob[0] #15\n job1 job1_trigger1 2022/11/17 17:02:39 * * * * * *\n")),(0,a.kt)("h3",{id:"26124-\u6253\u5370\u4f5c\u4e1a\u5b8c\u6574\u4fe1\u606f"},"26.1.2.4 \u6253\u5370\u4f5c\u4e1a\u5b8c\u6574\u4fe1\u606f"),(0,a.kt)("p",null,"\u6846\u67b6\u63d0\u4f9b\u4e86\u56db\u79cd\u65b9\u5f0f\u6253\u5370\u4f5c\u4e1a\u5b8c\u6574\u4fe1\u606f\u3002"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u7b2c\u4e00\u79cd\uff1a\u8f93\u51fa\u5b8c\u6574\u7684\u4f5c\u4e1a ",(0,a.kt)("inlineCode",{parentName:"strong"},"JSON")," \u4fe1\u606f\uff1a",(0,a.kt)("inlineCode",{parentName:"strong"},"context.ConvertToJSON()")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11}",showLineNumbers:!0,"{11}":!0},"public class MyJob : IJob\n{\n private readonly ILogger _logger;\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n _logger.LogInformation(context.ConvertToJSON());\n await Task.CompletedTask;\n }\n}\n")),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6253\u5370\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {3,14}",showLineNumbers:!0,"{3,14}":!0},'info: 2022-11-17 17:13:41.0480946 +08:00 \u661f\u671f\u56db L MyJob[0] #5\n {\n "jobDetail": {\n "jobId": "job1",\n "groupName": null,\n "jobType": "MyJob",\n "assemblyName": "ConsoleApp32",\n "description": null,\n "concurrent": false,\n "includeAnnotations": false,\n "properties": "{}",\n "updatedTime": "2022-11-17T17:13:41.0247430+08:00"\n },\n "trigger": {\n "triggerId": "job1_trigger1",\n "jobId": "job1",\n "triggerType": "Furion.Schedule.CronTrigger",\n "assemblyName": "Furion",\n "args": "[\\"@secondly\\",0]",\n "description": null,\n "status": 2,\n "startTime": null,\n "endTime": null,\n "lastRunTime": "2022-11-17T17:13:41.0000000",\n "nextRunTime": "2022-11-17T17:13:42.0000000",\n "numberOfRuns": 1,\n "maxNumberOfRuns": 0,\n "numberOfErrors": 0,\n "maxNumberOfErrors": 0,\n "numRetries": 0,\n "retryTimeout": 1000,\n "startNow": true,\n "runOnStart": fals,\n "updatedTime": "2022-11-17T17:13:41.0250214+08:00"\n }\n }\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u7b2c\u4e8c\u79cd\uff1a\u8f93\u51fa\u5355\u72ec\u7684\u4f5c\u4e1a ",(0,a.kt)("inlineCode",{parentName:"strong"},"JSON")," \u4fe1\u606f\uff1a",(0,a.kt)("inlineCode",{parentName:"strong"},"jobDetail.ConvertToJSON()")," \u6216 ",(0,a.kt)("inlineCode",{parentName:"strong"},"trigger.ConvertToJSON()")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11-12,14-15}",showLineNumbers:!0,"{11-12,14-15}":!0},"public class MyJob : IJob\n{\n private readonly ILogger _logger;\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n var jobDetail = context.JobDetail;\n var trigger = context.Trigger;\n\n _logger.LogInformation(jobDetail.ConvertToJSON());\n _logger.LogInformation(trigger.ConvertToJSON(NamingConventions.UnderScoreCase)); // \u652f\u6301\u4e09\u79cd\u5c5e\u6027\u540d\u8f93\u51fa\u89c4\u5219\n\n await Task.CompletedTask;\n }\n}\n")),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6253\u5370\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2-12,14-34}",showLineNumbers:!0,"{2-12,14-34}":!0},'info: 2022-11-17 17:17:15.0441407 +08:00 \u661f\u671f\u56db L MyJob[0] #3\n {\n "jobId": "job1",\n "groupName": null,\n "jobType": "MyJob",\n "assemblyName": "ConsoleApp32",\n "description": null,\n "concurrent": false,\n "includeAnnotations": false,\n "properties": "{}",\n "updatedTime": "2022-11-17T17:17:15.0103913+08:00"\n }\ninfo: 2022-11-17 17:17:15.0503546 +08:00 \u661f\u671f\u56db L MyJob[0] #3\n {\n "trigger_id": "job1_trigger1",\n "job_id": "job1",\n "trigger_type": "Furion.Schedule.CronTrigger",\n "assembly_name": "Furion",\n "args": "[\\"@secondly\\",0]",\n "description": null,\n "status": 2,\n "start_time": null,\n "end_time": null,\n "last_run_time": "2022-11-17T17:17:15.0000000",\n "next_run_time": "2022-11-17T17:17:16.0000000",\n "number_of_runs": 1,\n "max_number_of_runs": 0,\n "number_of_errors": 0,\n "max_number_of_errors": 0,\n "num_retries": 0,\n "retry_timeout": 1000,\n "start_now": true,\n "run_on_start": false,\n "updated_time": "2022-11-17T17:17:15.0109612+08:00"\n }\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u7b2c\u4e09\u79cd\uff1a\u8f93\u51fa\u5355\u72ec\u7684\u4f5c\u4e1a ",(0,a.kt)("inlineCode",{parentName:"strong"},"SQL")," \u4fe1\u606f\uff1a",(0,a.kt)("inlineCode",{parentName:"strong"},"jobDetail.ConvertToSQL()")," \u6216 ",(0,a.kt)("inlineCode",{parentName:"strong"},"trigger.ConvertToSQL()")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11-12,14-16}",showLineNumbers:!0,"{11-12,14-16}":!0},'public class MyJob : IJob\n{\n private readonly ILogger _logger;\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n var jobDetail = context.JobDetail;\n var trigger = context.Trigger;\n\n _logger.LogInformation(jobDetail.ConvertToSQL("\u4f5c\u4e1a\u4fe1\u606f\u8868\u540d", PersistenceBehavior.Appended)); // \u8f93\u51fa\u65b0\u589e\u8bed\u53e5\n _logger.LogInformation(trigger.ConvertToSQL("\u4f5c\u4e1a\u89e6\u53d1\u5668\u8868\u540d", PersistenceBehavior.Removed, NamingConventions.Pascal)); // \u8f93\u51fa\u5220\u9664\u8bed\u53e5\n _logger.LogInformation(trigger.ConvertToSQL("\u4f5c\u4e1a\u89e6\u53d1\u5668\u8868\u540d", PersistenceBehavior.Updated, NamingConventions.UnderScoreCase)); // \u8f93\u51fa\u66f4\u65b0\u8bed\u53e5\n\n await Task.CompletedTask;\n }\n}\n')),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6253\u5370\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sql",metastring:"showLineNumbers {2,25,28}",showLineNumbers:!0,"{2,25,28}":!0},"info: 2022-11-17 17:35:11.1085426 +08:00 \u661f\u671f\u56db L MyJob[0] #9\n INSERT INTO \u4f5c\u4e1a\u4fe1\u606f\u8868\u540d(\n [jobId],\n [groupName],\n [jobType],\n [assemblyName],\n [description],\n [concurrent],\n [includeAnnotations],\n [properties],\n [updatedTime]\n )\n VALUES(\n 'job1',\n NULL,\n 'MyJob',\n 'ConsoleApp32',\n NULL,\n 0,\n 0,\n '{}',\n '2022/11/17 17:35:11'\n );\ninfo: 2022-11-17 17:35:11.1150444 +08:00 \u661f\u671f\u56db L MyJob[0] #9\n DELETE FROM \u4f5c\u4e1a\u89e6\u53d1\u5668\u8868\u540d\n WHERE [TriggerId] = 'job1_trigger1' AND [JobId] = 'job1';\ninfo: 2022-11-17 17:35:11.1190961 +08:00 \u661f\u671f\u56db L MyJob[0] #9\n UPDATE \u4f5c\u4e1a\u89e6\u53d1\u5668\u8868\u540d\n SET\n [trigger_id] = 'job1_trigger1',\n [job_id] = 'job1',\n [trigger_type] = 'Furion.Schedule.CronTrigger',\n [assembly_name] = 'Furion',\n [args] = '[\"@secondly\",0]',\n [description] = NULL,\n [status] = 2,\n [start_time] = NULL,\n [end_time] = NULL,\n [last_run_time] = '2022/11/17 17:35:11',\n [next_run_time] = '2022/11/17 17:35:12',\n [number_of_runs] = 1,\n [max_number_of_runs] = 0,\n [number_of_errors] = 0,\n [max_number_of_errors] = 0,\n [num_retries] = 0,\n [retry_timeout] = 1000,\n [start_now] = 1,\n [run_on_start] = 0,\n [updated_time] = '2022/11/17 17:35:11'\n WHERE [trigger_id] = 'job1_trigger1' AND [job_id] = 'job1';\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u7b2c\u56db\u79cd\uff1a\u8f93\u51fa\u5355\u72ec\u7684\u4f5c\u4e1a ",(0,a.kt)("inlineCode",{parentName:"strong"},"Monitor")," \u4fe1\u606f\uff1a",(0,a.kt)("inlineCode",{parentName:"strong"},"jobDetail.ConvertToMonitor()")," \u6216 ",(0,a.kt)("inlineCode",{parentName:"strong"},"trigger.ConvertToMonitor()")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11-12,14-15}",showLineNumbers:!0,"{11-12,14-15}":!0},"public class MyJob : IJob\n{\n private readonly ILogger _logger;\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n var jobDetail = context.JobDetail;\n var trigger = context.Trigger;\n\n _logger.LogInformation(jobDetail.ConvertToMonitor());\n _logger.LogInformation(trigger.ConvertToMonitor());\n\n await Task.CompletedTask;\n }\n}\n")),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6253\u5370\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,16}",showLineNumbers:!0,"{2,16}":!0},'info: 2022-11-17 17:39:09.1086517 +08:00 \u661f\u671f\u56db L MyJob[0] #3\n \u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 JobDetail \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n \u2523 MyJob\n \u2523\n \u2523 JobId\uff1a job1\n \u2523 GroupName\uff1a\n \u2523 JobType\uff1a MyJob\n \u2523 AssemblyName\uff1a ConsoleApp32\n \u2523 Description\uff1a\n \u2523 Concurrent\uff1a False\n \u2523 IncludeAnnotations\uff1a False\n \u2523 Properties\uff1a {}\n \u2523 UpdatedTime\uff1a 2022/11/17 17:39:09\n \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 JobDetail \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\ninfo: 2022-11-17 17:39:09.1133162 +08:00 \u661f\u671f\u56db L MyJob[0] #3\n \u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Trigger \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n \u2523 Furion.Schedule.CronTrigger\n \u2523\n \u2523 TriggerId\uff1a job1_trigger1\n \u2523 JobId\uff1a job1\n \u2523 TriggerType\uff1a Furion.Schedule.CronTrigger\n \u2523 AssemblyName\uff1a Furion\n \u2523 Args\uff1a ["@secondly",0]\n \u2523 Description\uff1a\n \u2523 Status\uff1a Running\n \u2523 StartTime\uff1a\n \u2523 EndTime\uff1a\n \u2523 LastRunTime\uff1a 2022/11/17 17:39:09\n \u2523 NextRunTime\uff1a 2022/11/17 17:39:10\n \u2523 NumberOfRuns\uff1a 1\n \u2523 MaxNumberOfRuns\uff1a 0\n \u2523 NumberOfErrors\uff1a 0\n \u2523 MaxNumberOfErrors\uff1a 0\n \u2523 NumRetries\uff1a 0\n \u2523 RetryTimeout\uff1a 1000\n \u2523 StartNow\uff1a True\n \u2523 RunOnStart\uff1a False\n \u2523 UpdatedTime\uff1a 2022/11/17 17:39:09\n \u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Trigger \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n')),(0,a.kt)("h3",{id:"26125-\u8fd0\u884c\u65f6\u52a8\u6001\u64cd\u4f5c\u4f5c\u4e1a"},"26.1.2.5 \u8fd0\u884c\u65f6\uff08\u52a8\u6001\uff09\u64cd\u4f5c\u4f5c\u4e1a"),(0,a.kt)("p",null,"\u6709\u65f6\u5019\uff0c\u6211\u4eec\u9700\u8981\u5728\u8fd0\u884c\u65f6\u5bf9\u4f5c\u4e1a\u52a8\u6001\u7684\u589e\u52a0\uff0c\u66f4\u65b0\uff0c\u5220\u9664\u7b49\u64cd\u4f5c\uff0c\u5982\u52a8\u6001\u6dfb\u52a0\u4f5c\u4e1a\uff1a"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\u6ce8\u518c ",(0,a.kt)("inlineCode",{parentName:"li"},"services.AddSchedule()")," \u670d\u52a1")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},"// \u53ef\u4ee5\u5b8c\u5168\u52a8\u6001\u64cd\u4f5c\uff0c\u53ea\u9700\u8981\u6ce8\u518c\u670d\u52a1\u5373\u53ef\nservices.AddSchedule();\n\n// \u4e5f\u53ef\u4ee5\u90e8\u5206\u9759\u6001\uff0c\u90e8\u5206\u52a8\u6001\u6ce8\u518c\nservices.AddSchedule(options =>\n{\n options.AddJob(concurrent: false, Triggers.PeriodSeconds(5));\n});\n")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"\u6ce8\u5165 ",(0,a.kt)("inlineCode",{parentName:"li"},"ISchedulerFactory")," \u670d\u52a1")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,11}",showLineNumbers:!0,"{4,11}":!0},'public class YourService: IYourService\n{\n private readonly ISchedulerFactory _schedulerFactory;\n public YourService(ISchedulerFactory schedulerFactory)\n {\n _schedulerFactory = schedulerFactory;\n }\n\n public void AddJob()\n {\n _schedulerFactory.AddJob("\u52a8\u6001\u4f5c\u4e1a Id", Triggers.Secondly());\n }\n}\n')),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6,8,10,20}",showLineNumbers:!0,"{2,4,6,8,10,20}":!0},"warn: 2022-11-17 17:54:35.2654513 +08:00 \u661f\u671f\u56db L System.Logging.ScheduleService[0] #5\n Schedule Hosted Service cancels hibernation.\ninfo: 2022-11-17 17:54:35.2670018 +08:00 \u661f\u671f\u56db L System.Logging.ScheduleService[0] #5\n The Scheduler of <\u52a8\u6001\u4f5c\u4e1a Id> successfully added to the schedule.\ninfo: 2022-11-17 17:54:36.0834925 +08:00 \u661f\u671f\u56db L MyJob[0] #5\n job1 job1_trigger1 2022/11/17 17:54:36 5000ms\ninfo: 2022-11-17 17:54:36.0911692 +08:00 \u661f\u671f\u56db L MyJob[0] #3\n \u52a8\u6001\u4f5c\u4e1a Id \u52a8\u6001\u4f5c\u4e1a Id_trigger1 2022/11/17 17:54:36 * * * * * *\ninfo: 2022-11-17 17:54:37.0146251 +08:00 \u661f\u671f\u56db L MyJob[0] #18\n \u52a8\u6001\u4f5c\u4e1a Id \u52a8\u6001\u4f5c\u4e1a Id_trigger1 2022/11/17 17:54:37 * * * * * *\ninfo: 2022-11-17 17:54:38.0071504 +08:00 \u661f\u671f\u56db L MyJob[0] #16\n \u52a8\u6001\u4f5c\u4e1a Id \u52a8\u6001\u4f5c\u4e1a Id_trigger1 2022/11/17 17:54:38 * * * * * *\ninfo: 2022-11-17 17:54:39.0140840 +08:00 \u661f\u671f\u56db L MyJob[0] #17\n \u52a8\u6001\u4f5c\u4e1a Id \u52a8\u6001\u4f5c\u4e1a Id_trigger1 2022/11/17 17:54:39 * * * * * *\ninfo: 2022-11-17 17:54:40.0173240 +08:00 \u661f\u671f\u56db L MyJob[0] #16\n \u52a8\u6001\u4f5c\u4e1a Id \u52a8\u6001\u4f5c\u4e1a Id_trigger1 2022/11/17 17:54:40 * * * * * *\ninfo: 2022-11-17 17:54:41.0249043 +08:00 \u661f\u671f\u56db L MyJob[0] #16\n \u52a8\u6001\u4f5c\u4e1a Id \u52a8\u6001\u4f5c\u4e1a Id_trigger1 2022/11/17 17:54:41 * * * * * *\ninfo: 2022-11-17 17:54:41.0550205 +08:00 \u661f\u671f\u56db L MyJob[0] #15\n job1 job1_trigger1 2022/11/17 17:54:41 5000ms\ninfo: 2022-11-17 17:54:42.0171271 +08:00 \u661f\u671f\u56db L MyJob[0] #15\n \u52a8\u6001\u4f5c\u4e1a Id \u52a8\u6001\u4f5c\u4e1a Id_trigger1 2022/11/17 17:54:42 * * * * * *\ninfo: 2022-11-17 17:54:43.0288486 +08:00 \u661f\u671f\u56db L MyJob[0] #18\n \u52a8\u6001\u4f5c\u4e1a Id \u52a8\u6001\u4f5c\u4e1a Id_trigger1 2022/11/17 17:54:43 * * * * * *\ninfo: 2022-11-17 17:54:44.0092455 +08:00 \u661f\u671f\u56db L MyJob[0] #15\n \u52a8\u6001\u4f5c\u4e1a Id \u52a8\u6001\u4f5c\u4e1a Id_trigger1 2022/11/17 17:54:44 * * * * * *\n")),(0,a.kt)("h3",{id:"26126-\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"},"26.1.2.6 \u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),(0,a.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u6846\u67b6\u4e0d\u4f1a\u626b\u63cf ",(0,a.kt)("inlineCode",{parentName:"p"},"IJob")," \u5b9e\u73b0\u7c7b\u7684\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027\uff0c\u4f46\u53ef\u4ee5\u8bbe\u7f6e\u4f5c\u4e1a\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"IncludeAnnotations")," \u8fdb\u884c\u542f\u7528\u3002"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\u542f\u7528 ",(0,a.kt)("inlineCode",{parentName:"li"},"IncludeAnnotations")," \u626b\u63cf")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"{3}":!0},"services.AddSchedule(options =>\n{\n options.AddJob(JobBuilder.Create().SetIncludeAnnotations(true)\n , Triggers.PeriodSeconds(5)); // \u8fd9\u91cc\u53ef\u4f20\u53ef\u4e0d\u4f20\uff0c\u4f20\u4e86\u5219\u4f1a\u81ea\u52a8\u8f7d\u5165\u7279\u6027\u548c\u8fd9\u91cc\u914d\u7f6e\u7684\u4f5c\u4e1a\u89e6\u53d1\u5668\n});\n")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"li"},"MyJob")," \u4e2d\u6dfb\u52a0\u591a\u4e2a\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-2}",showLineNumbers:!0,"{1-2}":!0},'[Minutely]\n[Cron("3,7,8 * * * * ?", CronStringFormat.WithSeconds)]\npublic class MyJob : IJob\n{\n private readonly ILogger _logger;\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");\n\n await Task.CompletedTask;\n }\n}\n')),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6,8,10,12,14,16,18}",showLineNumbers:!0,"{2,4,6,8,10,12,14,16,18}":!0},"info: 2022-11-18 10:28:56.3382585 +08:00 \u661f\u671f\u4e94 L MyJob[0] #14\n job1 job1_trigger1 2022/11/18 10:28:56 5000ms\ninfo: 2022-11-18 10:29:00.0219493 +08:00 \u661f\u671f\u4e94 L MyJob[0] #5\n job1 job1_trigger2 2022/11/18 10:29:00 * * * * *\ninfo: 2022-11-18 10:29:01.3318716 +08:00 \u661f\u671f\u4e94 L MyJob[0] #14\n job1 job1_trigger1 2022/11/18 10:29:01 5000ms\ninfo: 2022-11-18 10:29:03.0127992 +08:00 \u661f\u671f\u4e94 L MyJob[0] #16\n job1 job1_trigger3 2022/11/18 10:29:03 3,7,8 * * * * ?\ninfo: 2022-11-18 10:29:06.3457728 +08:00 \u661f\u671f\u4e94 L MyJob[0] #16\n job1 job1_trigger1 2022/11/18 10:29:06 5000ms\ninfo: 2022-11-18 10:29:07.0318919 +08:00 \u661f\u671f\u4e94 L MyJob[0] #14\n job1 job1_trigger3 2022/11/18 10:29:07 3,7,8 * * * * ?\ninfo: 2022-11-18 10:29:08.0141479 +08:00 \u661f\u671f\u4e94 L MyJob[0] #8\n job1 job1_trigger3 2022/11/18 10:29:08 3,7,8 * * * * ?\ninfo: 2022-11-18 10:29:11.3468100 +08:00 \u661f\u671f\u4e94 L MyJob[0] #16\n job1 job1_trigger1 2022/11/18 10:29:11 5000ms\ninfo: 2022-11-18 10:29:16.3504029 +08:00 \u661f\u671f\u4e94 L MyJob[0] #14\n job1 job1_trigger1 2022/11/18 10:29:16 5000ms\n")),(0,a.kt)("h2",{id:"2613-\u4f5c\u4e1a\u4fe1\u606f-jobdetail-\u53ca\u6784\u5efa\u5668"},"26.1.3 \u4f5c\u4e1a\u4fe1\u606f ",(0,a.kt)("inlineCode",{parentName:"h2"},"JobDetail")," \u53ca\u6784\u5efa\u5668"),(0,a.kt)("h3",{id:"26131-\u5173\u4e8e\u4f5c\u4e1a\u4fe1\u606f"},"26.1.3.1 \u5173\u4e8e\u4f5c\u4e1a\u4fe1\u606f"),(0,a.kt)("p",null,"\u6846\u67b6\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"JobDetail")," \u7c7b\u578b\u6765\u63cf\u8ff0\u4f5c\u4e1a\u4fe1\u606f\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"JobDetail")," \u7c7b\u578b\u63d0\u4f9b\u4ee5\u4e0b",(0,a.kt)("strong",{parentName:"p"},"\u53ea\u8bfb\u5c5e\u6027"),"\uff1a"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"\u5c5e\u6027\u540d"),(0,a.kt)("th",{parentName:"tr",align:null},"\u5c5e\u6027\u7c7b\u578b"),(0,a.kt)("th",{parentName:"tr",align:null},"\u9ed8\u8ba4\u503c"),(0,a.kt)("th",{parentName:"tr",align:null},"\u8bf4\u660e"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"JobId")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a ",(0,a.kt)("inlineCode",{parentName:"td"},"Id"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"GroupName")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a\u7ec4\u540d\u79f0")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"JobType")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f\u7c7b\u578b\uff0c\u5b58\u50a8\u7684\u662f\u7c7b\u578b\u7684 ",(0,a.kt)("inlineCode",{parentName:"td"},"FullName"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"AssemblyName")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f\u7c7b\u578b\u6240\u5728\u7a0b\u5e8f\u96c6\uff0c\u5b58\u50a8\u7684\u662f\u7a0b\u5e8f\u96c6 ",(0,a.kt)("inlineCode",{parentName:"td"},"Name"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Description")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u63cf\u8ff0\u4fe1\u606f")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Concurrent")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"bool")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"true")),(0,a.kt)("td",{parentName:"tr",align:null},"\u63cf\u8ff0\u4fe1\u606f\uff0c\u5982\u679c\u8bbe\u7f6e\u4e3a ",(0,a.kt)("inlineCode",{parentName:"td"},"false"),"\uff0c\u90a3\u4e48\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"td"},"\u4e32\u884c")," \u6267\u884c")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"IncludeAnnotations")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"bool")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"false")),(0,a.kt)("td",{parentName:"tr",align:null},"\u662f\u5426\u626b\u63cf ",(0,a.kt)("inlineCode",{parentName:"td"},"IJob")," \u5b9e\u73b0\u7c7b ",(0,a.kt)("inlineCode",{parentName:"td"},"[Trigger]")," \u7279\u6027\u89e6\u53d1\u5668")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Properties")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},'"{}"')),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a\u4fe1\u606f\u989d\u5916\u6570\u636e\uff0c\u7531 ",(0,a.kt)("inlineCode",{parentName:"td"},"Dictionary")," \u5e8f\u5217\u5316\u6210\u5b57\u7b26\u4e32\u5b58\u50a8")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"UpdatedTime")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"DateTime?")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a\u66f4\u65b0\u65f6\u95f4")))),(0,a.kt)("h3",{id:"26132-\u5173\u4e8e\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668"},"26.1.3.2 \u5173\u4e8e\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668"),(0,a.kt)("p",null,"\u4f5c\u4e1a\u4fe1\u606f ",(0,a.kt)("inlineCode",{parentName:"p"},"JobDetail")," \u662f\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u63d0\u4f9b\u8fd0\u884c\u65f6\u7684",(0,a.kt)("strong",{parentName:"p"},"\u53ea\u8bfb\u7c7b\u578b"),"\uff0c\u90a3\u4e48\u6211\u4eec\u8be5\u5982\u4f55\u521b\u5efa\u6216\u53d8\u66f4 ",(0,a.kt)("inlineCode",{parentName:"p"},"JobDetail")," \u5bf9\u8c61\u5462\uff1f"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"JobBuilder")," \u662f\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u63d0\u4f9b\u53ef\u7528\u6765\u751f\u6210\u8fd0\u884c\u65f6 ",(0,a.kt)("inlineCode",{parentName:"p"},"JobDetail")," \u7684\u7c7b\u578b\uff0c\u8fd9\u6837\u505a\u7684\u597d\u5904\u53ef\u907f\u514d\u5916\u90e8\u76f4\u63a5\u4fee\u6539\u8fd0\u884c\u65f6 ",(0,a.kt)("inlineCode",{parentName:"p"},"JobDetail")," \u6570\u636e\uff0c\u8fd8\u80fd\u5b9e\u73b0\u4efb\u4f55\u4fee\u6539\u52a8\u4f5c\u76d1\u542c\uff0c\u4e5f\u80fd\u907f\u514d\u591a\u7ebf\u7a0b\u62a2\u5360\u60c5\u51b5\u3002"),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u63d0\u4f9b\u4e86\u591a\u79cd\u65b9\u5f0f\u7528\u6765\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"JobBuilder")," \u5bf9\u8c61\u3002"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Create")," \u9759\u6001\u65b9\u6cd5\u521b\u5efa"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8}",showLineNumbers:!0,"{2,5,8}":!0},'// \u6839\u636e IJob \u5b9e\u73b0\u7c7b\u7c7b\u578b\u521b\u5efa\nvar jobBuilder = JobBuilder.Create();\n\n// \u6839\u636e Type \u7c7b\u578b\u521b\u5efa\nvar jobBuilder = JobBuilder.Create(typeof(MyJob));\n\n// \u6839\u636e\u7a0b\u5e8f\u96c6\u540d\u79f0\u548c\u7c7b\u578b\u5b8c\u5168\u9650\u5b9a\u540d\uff08FullName\uff09\u521b\u5efa\nvar jobBuilder = JobBuilder.Create("YourProject", "YourProject.MyJob");\n')),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"JobDetail")," \u7c7b\u578b\u521b\u5efa"))),(0,a.kt)("p",null,"\u8fd9\u79cd\u65b9\u5f0f\u5e38\u7528\u4e8e\u5728\u8fd0\u884c\u65f6\u66f4\u65b0\u4f5c\u4e1a\u4fe1\u606f\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var jobBuilder = JobBuilder.From(jobDetail);\n")),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"JSON")," \u5b57\u7b26\u4e32\u521b\u5efa"))),(0,a.kt)("p",null,"\u8be5\u65b9\u5f0f\u975e\u5e38\u7075\u6d3b\uff0c\u53ef\u4ece\u914d\u7f6e\u6587\u4ef6\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"JSON")," \u5b57\u7b26\u4e32\uff0c\u6216\u5176\u4ed6\u80fd\u591f\u8fd4\u56de ",(0,a.kt)("inlineCode",{parentName:"p"},"JSON")," \u5b57\u7b26\u4e32\u7684\u5730\u65b9\u521b\u5efa\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2-12}",showLineNumbers:!0,"{2-12}":!0},'var jobBuilder = JobBuilder.From(@"\n{\n ""jobId"": ""job1"",\n ""groupName"": null,\n ""jobType"": ""Furion.Application.MyJob"",\n ""assemblyName"": ""Furion.Application"",\n ""description"": null,\n ""concurrent"": true,\n ""includeAnnotations"": false,\n ""properties"": ""{}"",\n ""updatedTime"": ""2022-11-17T09:25:47.0471107+08:00""\n}");\n')),(0,a.kt)("p",null,"\u5982\u679c\u4f7f\u7528\u7684\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},".NET7"),"\uff0c\u53ef\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},'"""')," \u907f\u514d\u8f6c\u4e49\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2-12}",showLineNumbers:!0,"{2-12}":!0},'var jobBuilder = JobBuilder.From("""\n{\n "jobId": "job1",\n "groupName": null,\n "jobType": "Furion.Application.MyJob",\n "assemblyName": "Furion.Application",\n "description": null,\n "concurrent": true,\n "includeAnnotations": false,\n "properties": "{}",\n "updatedTime": "2022-11-17T09:25:47.0471107+08:00"\n}\n""");\n')),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u5c5e\u6027\u540d\u5339\u914d\u89c4\u5219",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"p"},"CamelCase\uff08\u9a7c\u5cf0\u547d\u540d\u6cd5\uff09"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Pascal\uff08\u5e15\u65af\u5361\u547d\u540d\u6cd5\uff09")," \u547d\u540d\u65b9\u5f0f\u3002"),(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"\u4e0d\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"strong"},"UnderScoreCase\uff08\u4e0b\u5212\u7ebf\u547d\u540d\u6cd5\uff09"))," \uff0c\u5982 ",(0,a.kt)("inlineCode",{parentName:"p"},'"include_annotations": true'))),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8fd8\u53ef\u4ee5\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Clone")," \u9759\u6001\u65b9\u6cd5\u4ece\u4e00\u4e2a ",(0,a.kt)("inlineCode",{parentName:"strong"},"JobBuilder")," \u521b\u5efa"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var jobBuilder = JobBuilder.Clone(fromJobBuilder);\n")),(0,a.kt)("admonition",{title:"\u514b\u9686\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u514b\u9686\u64cd\u4f5c\u53ea\u4f1a\u514b\u9686 ",(0,a.kt)("inlineCode",{parentName:"p"},"AssemblyName"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"JobType"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"GroupName"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Description"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Concurrent"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"IncludeAnnotations"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Properties"),"\u3002"),(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"\u4e0d\u4f1a\u514b\u9686 ",(0,a.kt)("inlineCode",{parentName:"strong"},"JobId"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"strong"},"UpdatedTime"),"\u3002"))),(0,a.kt)("ol",{start:5},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8fd8\u53ef\u4ee5\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"LoadFrom")," \u5b9e\u4f8b\u65b9\u6cd5\u586b\u5145\u5f53\u524d\u7684 ",(0,a.kt)("inlineCode",{parentName:"strong"},"JobBuilder")))),(0,a.kt)("p",null,"\u6bd4\u5982\u53ef\u4ee5\u4f20\u9012\u533f\u540d\u7c7b\u578b\uff0c\u7c7b\u7c7b\u578b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,9,14}",showLineNumbers:!0,"{2,9,14}":!0},'// \u4f1a\u8986\u76d6\u6240\u6709\u76f8\u540c\u7684\u503c\njobBuilder.LoadFrom(new\n{\n Description = "\u6211\u662f\u63cf\u8ff0",\n Concurrent = false\n});\n\n// \u652f\u6301\u591a\u4e2a\u586b\u5145\uff0c\u8fd8\u53ef\u4ee5\u914d\u7f6e\u8df3\u8fc7 null \u503c\u8986\u76d6\njobBuilder.LoadFrom(new\n{\n Description = "\u6211\u662f\u53e6\u5916\u4e00\u4e2a\u63cf\u8ff0",\n Concurrent = false,\n IncludeAnnotations = default(object) // \u4f1a\u8df3\u8fc7\u8d4b\u503c\n}, ignoreNullValue: true);\n')),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u5c5e\u6027\u540d\u5339\u914d\u89c4\u5219",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"p"},"CamelCase\uff08\u9a7c\u5cf0\u547d\u540d\u6cd5\uff09"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Pascal\uff08\u5e15\u65af\u5361\u547d\u540d\u6cd5\uff09")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"UnderScoreCase\uff08\u4e0b\u5212\u7ebf\u547d\u540d\u6cd5\uff09")," \u547d\u540d\u65b9\u5f0f\u3002")),(0,a.kt)("h3",{id:"26133-\u8bbe\u7f6e\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668"},"26.1.3.3 \u8bbe\u7f6e\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"JobBuilder")," \u63d0\u4f9b\u4e86\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"JobDetail")," \u5b8c\u5168\u5339\u914d\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Set[\u5c5e\u6027\u540d]")," \u65b9\u6cd5\u6765\u914d\u7f6e\u4f5c\u4e1a\u4fe1\u606f\u5404\u4e2a\u5c5e\u6027\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,16}",showLineNumbers:!0,"{3,16}":!0},'services.AddSchedule(options =>\n{\n var jobBuilder = JobBuilder.Create()\n .SetJobId("job1") // \u4f5c\u4e1a Id\n .SetGroupName("group1") // \u4f5c\u4e1a\u7ec4\u540d\u79f0\n .SetJobType("Furion.Application", "Furion.Application.MyJob") // \u4f5c\u4e1a\u7c7b\u578b\uff0c\u652f\u6301\u591a\u4e2a\u91cd\u8f7d\n .SetJobType() // \u4f5c\u4e1a\u7c7b\u578b\uff0c\u652f\u6301\u591a\u4e2a\u91cd\u8f7d\n .SetJobType(typeof(MyJob)) // \u4f5c\u4e1a\u7c7b\u578b\uff0c\u652f\u6301\u591a\u4e2a\u91cd\u8f7d\n .SetDescription("\u8fd9\u662f\u4e00\u6bb5\u63cf\u8ff0") // \u4f5c\u4e1a\u63cf\u8ff0\n .SetConcurrent(false) // \u5e76\u884c\u8fd8\u662f\u4e32\u884c\u65b9\u5f0f\uff0cfalse \u4e3a \u4e32\u884c\n .SetIncludeAnnotations(true) // \u662f\u5426\u626b\u63cf IJob \u7c7b\u578b\u7684\u89e6\u53d1\u5668\u7279\u6027\uff0ctrue \u4e3a \u626b\u63cf\n .SetProperties("{}") // \u4f5c\u4e1a\u989d\u5916\u6570\u636e Dictionary \u7c7b\u578b\u5e8f\u5217\u5316\uff0c\u652f\u6301\u591a\u4e2a\u91cd\u8f7d\n .SetProperties(new Dictionary { { "name", "Furion" } }) // \u4f5c\u4e1a\u7c7b\u578b\u989d\u5916\u6570\u636e\uff0c\u652f\u6301\u591a\u4e2a\u91cd\u8f7d\uff0c\u63a8\u8350\uff01\uff01\uff01\n ;\n\n options.AddJob(jobBuilder, Triggers.PeriodSeconds(5));\n});\n')),(0,a.kt)("h3",{id:"26134-\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668\u989d\u5916\u6570\u636e"},"26.1.3.4 \u4f5c\u4e1a\u4fe1\u606f/\u6784\u5efa\u5668\u989d\u5916\u6570\u636e"),(0,a.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u9700\u8981\u5728\u4f5c\u4e1a\u8fd0\u884c\u7684\u65f6\u5019\u6dfb\u52a0\u4e00\u4e9b\u989d\u5916\u6570\u636e\uff0c\u6216\u8005\u5b9e\u73b0\u591a\u4e2a\u89e6\u53d1\u5668\u5171\u4eab\u6570\u636e\uff0c\u7ecf\u5e38\u7528\u4e8e ",(0,a.kt)("inlineCode",{parentName:"p"},"\u4e32\u884c")," \u6267\u884c\u4e2d\uff0c\u540e\u9762\u4e00\u4e2a\u89e6\u53d1\u5668\u9700\u7b49\u5f85\u524d\u4e00\u4e2a\u89e6\u53d1\u5668\u5b8c\u6210\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13-14,16}",showLineNumbers:!0,"{13-14,16}":!0},'public class MyJob : IJob\n{\n private readonly ILogger _logger;\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n var jobDetail = context.JobDetail;\n\n var count = jobDetail.GetProperty("count");\n jobDetail.AddOrUpdateProperty("count", count + 1); // \u9012\u589e count\n\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger} {count}");\n\n await Task.CompletedTask;\n }\n}\n')),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u8fd0\u884c\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6,8,10}",showLineNumbers:!0,"{2,4,6,8,10}":!0},"info: 2022-11-18 16:48:35.8308170 +08:00 \u661f\u671f\u4e94 L ConsoleApp32.MyJob[0] #5\n job1 job1_trigger1 2022/11/18 16:48:35 5000ms 0\ninfo: 2022-11-18 16:48:40.8437231 +08:00 \u661f\u671f\u4e94 L ConsoleApp32.MyJob[0] #8\n job1 job1_trigger1 2022/11/18 16:48:40 5000ms 1\ninfo: 2022-11-18 16:48:45.8471287 +08:00 \u661f\u671f\u4e94 L ConsoleApp32.MyJob[0] #15\n job1 job1_trigger1 2022/11/18 16:48:45 5000ms 2\ninfo: 2022-11-18 16:48:50.8607141 +08:00 \u661f\u671f\u4e94 L ConsoleApp32.MyJob[0] #15\n job1 job1_trigger1 2022/11/18 16:48:50 5000ms 3\ninfo: 2022-11-18 16:48:55.8645520 +08:00 \u661f\u671f\u4e94 L ConsoleApp32.MyJob[0] #14\n job1 job1_trigger1 2022/11/18 16:48:55 5000ms 4\n")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"JobDetail")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"JobBuilder")," \u63d0\u4f9b\u4e86\u591a\u4e2a\u65b9\u6cd5\u64cd\u4f5c\u989d\u5916\u6570\u636e\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8,11,14,17,20}",showLineNumbers:!0,"{2,5,8,11,14,17,20}":!0},'// \u67e5\u770b\u6240\u6709\u989d\u5916\u6570\u636e\nvar properties = jobDetail.GetProperties();\n\n// \u67e5\u770b\u5355\u4e2a\u989d\u5916\u6570\u636e\uff0c\u8fd4\u56de object\nvar value = jobBuilder.GetProperty("key");\n\n// \u67e5\u770b\u5355\u4e2a\u989d\u5916\u6570\u636e\u6cdb\u578b\nvar value = jobDetail.GetProperty("key");\n\n// \u6dfb\u52a0\u65b0\u7684\u989d\u5916\u6570\u636e\uff0c\u652f\u6301\u94fe\u5f0f\u64cd\u4f5c\uff0c\u5982\u679c\u952e\u5df2\u5b58\u5728\uff0c\u5219\u8df3\u8fc7\njobDetail.AddProperty("key", "Furion").AddProperty("key1", 2);\n\n// \u6dfb\u52a0\u6216\u66f4\u65b0\u989d\u5916\u6570\u636e\uff0c\u652f\u6301\u94fe\u5f0f\u64cd\u4f5c\uff0c\u4e0d\u5b58\u5728\u5219\u65b0\u589e\uff0c\u5b58\u5728\u5219\u66ff\u6362\uff0c\u63a8\u8350\njobDetail.AddOrUpdateProperty("key", "Furion").AddOrUpdateProperty("key1", 2);\n\n// \u5220\u9664\u67d0\u4e2a\u989d\u5916\u6570\u636e\uff0c\u652f\u6301\u94fe\u5f0f\u64cd\u4f5c\uff0c\u5982\u679c key \u4e0d\u5b58\u5728\u5219\u8df3\u8fc7\njobDetail.RemoveProperty("key").RemoveProperty("key1");\n\n// \u6e05\u7a7a\u6240\u6709\u989d\u5916\u6570\u636e\njobDetail.ClearProperties();\n')),(0,a.kt)("admonition",{title:"\u4f5c\u4e1a\u989d\u5916\u6570\u636e\u7c7b\u578b\u652f\u6301",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u4f5c\u4e1a\u989d\u5916\u6570\u636e\u6bcf\u4e00\u9879\u7684\u503c\u53ea\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"p"},"int32"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"string"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"bool"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"null")," \u6216\u5b83\u4eec\u7ec4\u6210\u7684\u6570\u7ec4\u7c7b\u578b\u3002")),(0,a.kt)("h3",{id:"26135-\u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa"},"26.1.3.5 \u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"JobDetail")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"JobBuilder")," \u90fd\u63d0\u4f9b\u4e86\u591a\u79cd\u5c06\u81ea\u8eab\u8f6c\u6362\u6210\u7279\u5b9a\u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u3002"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8f6c\u6362\u6210 ",(0,a.kt)("inlineCode",{parentName:"strong"},"JSON")," \u5b57\u7b26\u4e32"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var json = jobDetail.ConvertToJSON();\n")),(0,a.kt)("p",null,"\u5b57\u7b26\u4e32\u6253\u5370\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "jobId": "job1",\n "groupName": null,\n "jobType": "Furion.Application.MyJob",\n "assemblyName": "Furion.Application",\n "description": null,\n "concurrent": true,\n "includeAnnotations": false,\n "properties": "{}",\n "updatedTime": "2022-11-18T22:56:47.4149299+08:00"\n}\n')),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8f6c\u6362\u6210 ",(0,a.kt)("inlineCode",{parentName:"strong"},"SQL")," \u5b57\u7b26\u4e32"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,7,12}",showLineNumbers:!0,"{2,7,12}":!0},'// \u8f93\u51fa\u65b0\u589e SQL\uff0c\u4f7f\u7528 CamelCase \u5c5e\u6027\u547d\u540d\nvar insertSql = jobDetail.ConvertToSQL("tbName"\n , PersistenceBehavior.Appended\n , NamingConventions.CamelCase);\n\n// \u8f93\u51fa\u5220\u9664 SQL\uff0c\u4f7f\u7528 Pascal \u5c5e\u6027\u547d\u540d\nvar deleteSql = jobDetail.ConvertToSQL("tbName"\n , PersistenceBehavior.Removed\n , NamingConventions.Pascal);\n\n// \u8f93\u51fa\u66f4\u65b0 SQL\uff0c\u4f7f\u7528 UnderScoreCase \u5c5e\u6027\u547d\u540d\nvar updateSql = jobDetail.ConvertToSQL("tbName"\n , PersistenceBehavior.Updated\n , NamingConventions.UnderScoreCase);\n')),(0,a.kt)("p",null,"\u5b57\u7b26\u4e32\u6253\u5370\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sql",metastring:"showLineNumbers {2,26,30}",showLineNumbers:!0,"{2,26,30}":!0},"-- \u65b0\u589e\u8bed\u53e5\nINSERT INTO tbName(\n [jobId],\n [groupName],\n [jobType],\n [assemblyName],\n [description],\n [concurrent],\n [includeAnnotations],\n [properties],\n [updatedTime]\n)\nVALUES(\n 'job1',\n NULL,\n 'ConsoleApp13.MyJob',\n 'ConsoleApp13',\n NULL,\n 1,\n 0,\n '{}',\n '2022/11/18 23:16:18'\n);\n\n-- \u5220\u9664\u8bed\u53e5\nDELETE FROM tbName\nWHERE [JobId] = 'job1';\n\n-- \u66f4\u65b0\u8bed\u53e5\nUPDATE tbName\nSET\n [job_id] = 'job1',\n [group_name] = NULL,\n [job_type] = 'ConsoleApp13.MyJob',\n [assembly_name] = 'ConsoleApp13',\n [description] = NULL,\n [concurrent] = 1,\n [include_annotations] = 0,\n [properties] = '{}',\n [updated_time] = '2022/11/18 23:16:18'\nWHERE [job_id] = 'job1';\n")),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8f6c\u6362\u6210 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Monitor")," \u5b57\u7b26\u4e32"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var monitor = jobDetail.ConvertToMonitor();\n")),(0,a.kt)("p",null,"\u5b57\u7b26\u4e32\u6253\u5370\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 JobDetail \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 ConsoleApp13.MyJob\n\u2523\n\u2523 jobId\uff1a job1\n\u2523 groupName\uff1a\n\u2523 jobType\uff1a Furion.Application.MyJob\n\u2523 assemblyName\uff1a Furion.Application\n\u2523 description\uff1a\n\u2523 concurrent\uff1a True\n\u2523 includeAnnotations\uff1a False\n\u2523 properties\uff1a {}\n\u2523 updatedTime\uff1a 2022/11/18 23:26:47\n\u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 JobDetail \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n")),(0,a.kt)("h2",{id:"2614-\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f-ijob"},"26.1.4 \u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f ",(0,a.kt)("inlineCode",{parentName:"h2"},"IJob")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f\u662f\u4f5c\u4e1a\u5177\u4f53\u6267\u884c\u7684\u4e1a\u52a1\u903b\u8f91\u4ee3\u7801\uff0c\u901a\u5e38\u7531\u7a0b\u5e8f\u5458\u7f16\u5199\uff0c\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f\u5fc5\u987b\u5b9e\u73b0 ",(0,a.kt)("inlineCode",{parentName:"p"},"IJob")," \u63a5\u53e3\u3002"),(0,a.kt)("h3",{id:"26141-\u5982\u4f55\u5b9a\u4e49"},"26.1.4.1 \u5982\u4f55\u5b9a\u4e49"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,5}",showLineNumbers:!0,"{1,3,5}":!0},"public class MyJob : IJob\n{\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n // your code...\n }\n}\n")),(0,a.kt)("h3",{id:"26142-\u4f9d\u8d56\u6ce8\u5165"},"26.1.4.2 \u4f9d\u8d56\u6ce8\u5165"),(0,a.kt)("p",null,"\u5b9e\u73b0 ",(0,a.kt)("inlineCode",{parentName:"p"},"IJob")," \u7684\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f\u7c7b\u578b\u9ed8\u8ba4\u6ce8\u518c\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"\u5355\u4f8b"),"\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u90a3\u4e48\u53ea\u8981\u662f\u5355\u4f8b\u7684\u670d\u52a1\uff0c\u7686\u53ef\u4ee5\u901a\u8fc7\u6784\u9020\u51fd\u6570\u6ce8\u5165"),"\uff0c\u5982\uff1a",(0,a.kt)("inlineCode",{parentName:"p"},"ILogger<>"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"IConfiguration"),"\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3-4,6-7}",showLineNumbers:!0,"{3-4,6-7}":!0},'public class MyJob : IJob\n{\n private readonly ILogger _logger;\n private readonly IConfiguration _configuration;\n\n public MyJob(ILogger logger\n , IConfiguration configuration)\n {\n _logger = logger;\n _configuration = configuration;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger} {count}");\n\n await Task.CompletedTask;\n }\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5982\u679c\u662f\u975e\u5355\u4f8b\u7684\u63a5\u53e3\uff0c\u5982\u77ac\u65f6\u6216\u8303\u56f4\u670d\u52a1\uff0c\u53ef\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"IServiceProvder")," \u521b\u5efa"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,9,18-19}",showLineNumbers:!0,"{5,9,18-19}":!0},'public class MyJob : IJob\n{\n private readonly ILogger _logger;\n private readonly IConfiguration _configuration;\n private readonly IServiceProvider _serviceProvider;\n\n public MyJob(ILogger logger\n , IConfiguration configuration\n , IServiceProvider serviceProvider)\n {\n _logger = logger;\n _configuration = configuration;\n _serviceProvider = serviceProvider;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n using var serviceScope = _serviceProvider.CreateScope();\n var repository = serviceScope.ServiceProvider.GetService>();\n\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");\n\n await Task.CompletedTask;\n }\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u9488\u5bf9\u9ad8\u9891\u5b9a\u65f6\u4efb\u52a1\uff0c\u6bd4\u5982\u6bcf\u79d2\u6267\u884c\u4e00\u6b21\uff0c\u6216\u8005\u66f4\u9891\u7e41\u7684\u4efb\u52a1"))),(0,a.kt)("p",null,"\u4e3a\u4e86\u907f\u514d\u9891\u7e41\u521b\u5efa\u4f5c\u7528\u57df\u548c\u9500\u6bc1\u4f5c\u7528\u57df\uff0c\u53ef\u521b\u5efa\u957f\u8303\u56f4\u7684\u4f5c\u7528\u57df\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,13,18,25,27}",showLineNumbers:!0,"{1,5,13,18,25,27}":!0},'public class MyJob : IJob, IDisposable\n{\n private readonly ILogger _logger;\n private readonly IConfiguration _configuration;\n private readonly IServiceScope _serviceScope;\n\n public MyJob(ILogger logger\n , IConfiguration configuration\n , IServiceProvider serviceProvider)\n {\n _logger = logger;\n _configuration = configuration;\n _serviceScope = serviceProvider.CreateScope();\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n var repository = _serviceScope.ServiceProvider.GetService>();\n\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");\n\n await Task.CompletedTask;\n }\n\n public void Dispose()\n {\n _serviceScope?.Dispose();\n }\n}\n')),(0,a.kt)("h3",{id:"26143-jobexecutingcontext-\u4e0a\u4e0b\u6587"},"26.1.4.3 ",(0,a.kt)("inlineCode",{parentName:"h3"},"JobExecutingContext")," \u4e0a\u4e0b\u6587"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"JobExecutingContext")," \u4e0a\u4e0b\u6587\u4f5c\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"ExecuteAsync")," \u65b9\u6cd5\u7684\u7b2c\u4e00\u4e2a\u53c2\u6570\uff0c\u63d0\u4f9b\u4e86\u4ee5\u4e0b\u51e0\u4e2a\u8fd0\u884c\u65f6\u4fe1\u606f\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},(0,a.kt)("inlineCode",{parentName:"strong"},"JobExecutingContext")," \u5c5e\u6027\u5217\u8868"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"JobId"),"\uff1a\u4f5c\u4e1a ",(0,a.kt)("inlineCode",{parentName:"li"},"Id")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"TriggerId"),"\uff1a\u5f53\u524d\u89e6\u53d1\u5668 ",(0,a.kt)("inlineCode",{parentName:"li"},"Id")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"JobDetail"),"\uff1a\u4f5c\u4e1a\u4fe1\u606f"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Trigger"),"\uff1a\u4f5c\u4e1a\u89e6\u53d1\u5668"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"OccurrenceTime"),"\uff1a\u8c03\u5ea6\u5668\u68c0\u67e5\u65f6\u95f4\uff0c\u6700\u51c6\u786e\u7684\u8bb0\u5f55\u65f6\u95f4"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ExecutingTime"),"\uff1a\u5b9e\u9645\u6267\u884c\u65f6\u95f4\uff08\u53ef\u80fd\u5b58\u5728\u8bef\u5dee\uff09"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},(0,a.kt)("inlineCode",{parentName:"strong"},"JobExecutingContext")," \u65b9\u6cd5\u5217\u8868"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},".ConvertToJSON(naming)"),"\uff1a\u5c06\u4f5c\u4e1a\u8ba1\u5212\u8f6c\u6362\u6210 ",(0,a.kt)("inlineCode",{parentName:"li"},"JSON")," \u5b57\u7b26\u4e32")))),(0,a.kt)("h3",{id:"26144-\u4f5c\u4e1a\u88ab\u53d6\u6d88\u5904\u7406"},"26.1.4.4 \u4f5c\u4e1a\u88ab\u53d6\u6d88\u5904\u7406"),(0,a.kt)("p",null,"\u4e00\u4e0b\u60c5\u51b5\u4e0b\uff0c\u4f5c\u4e1a\u88ab\u4e34\u65f6\u6682\u505c\u6216\u53d6\u6d88\uff0c\u4f46\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f\u8fd8\u672a\u5904\u7406\u5b8c\u6210\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u53d6\u6d88\u8fd8\u662f\u7ee7\u7eed\u6267\u884c\uff0c\u5982\u679c\u9009\u62e9\u540c\u6b65\u53d6\u6d88\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,13,18}",showLineNumbers:!0,"{1,13,18}":!0},'public class MyJob : IJob\n{\n private readonly ILogger _logger;\n\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n // \u521b\u5efa\u4efb\u52a1\u5173\u8054\u53d6\u6d88 Token\n var cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(stoppingToken);\n\n try\n {\n // \u4f20\u9012\u7ed9\u5f02\u6b65\u670d\u52a1\n await todo.SomeMethodAsync(cancellationTokenSource.Token);\n }\n catch (Exception ex)\n {\n // ...\n }\n\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");\n }\n}\n')),(0,a.kt)("p",null,"\u8fd9\u6837\u5f53\u4f5c\u4e1a\u88ab\u53d6\u6d88\u65f6\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"SomeMethodAsync")," \u4e5f\u4f1a\u540c\u6b65\u53d6\u6d88\u3002"),(0,a.kt)("h2",{id:"2615-\u4f5c\u4e1a\u89e6\u53d1\u5668-trigger-\u53ca\u6784\u5efa\u5668"},"26.1.5 \u4f5c\u4e1a\u89e6\u53d1\u5668 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Trigger")," \u53ca\u6784\u5efa\u5668"),(0,a.kt)("h3",{id:"26151-\u5173\u4e8e\u4f5c\u4e1a\u89e6\u53d1\u5668"},"26.1.5.1 \u5173\u4e8e\u4f5c\u4e1a\u89e6\u53d1\u5668"),(0,a.kt)("p",null,"\u6846\u67b6\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"Trigger")," \u7c7b\u578b\u6765\u63cf\u8ff0\u4f5c\u4e1a\u5177\u4f53\u7684\u89e6\u53d1\u65f6\u95f4\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Trigger")," \u7c7b\u578b\u63d0\u4f9b\u4ee5\u4e0b",(0,a.kt)("strong",{parentName:"p"},"\u53ea\u8bfb\u5c5e\u6027"),"\uff1a"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"\u5c5e\u6027\u540d"),(0,a.kt)("th",{parentName:"tr",align:null},"\u5c5e\u6027\u7c7b\u578b"),(0,a.kt)("th",{parentName:"tr",align:null},"\u9ed8\u8ba4\u503c"),(0,a.kt)("th",{parentName:"tr",align:null},"\u8bf4\u660e"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"TriggerId")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a\u89e6\u53d1\u5668 ",(0,a.kt)("inlineCode",{parentName:"td"},"Id"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"JobId")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a ",(0,a.kt)("inlineCode",{parentName:"td"},"Id"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"TriggerType")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a\u89e6\u53d1\u5668\u7c7b\u578b\uff0c\u5b58\u50a8\u7684\u662f\u7c7b\u578b\u7684 ",(0,a.kt)("inlineCode",{parentName:"td"},"FullName"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"AssemblyName")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a\u89e6\u53d1\u5668\u7c7b\u578b\u6240\u5728\u7a0b\u5e8f\u96c6\uff0c\u5b58\u50a8\u7684\u662f\u7a0b\u5e8f\u96c6 ",(0,a.kt)("inlineCode",{parentName:"td"},"Name"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Args")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a\u89e6\u53d1\u5668\u53c2\u6570\uff0c\u8fd0\u884c\u65f6\u5c06\u53cd\u5e8f\u5217\u5316\u4e3a ",(0,a.kt)("inlineCode",{parentName:"td"},"object[]")," \u7c7b\u578b\u5e76\u4f5c\u4e3a\u6784\u9020\u51fd\u6570\u53c2\u6570")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Description")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"string")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u63cf\u8ff0\u4fe1\u606f")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Status")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"TriggerStatus")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Ready")),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a\u89e6\u53d1\u5668\u72b6\u6001")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"StartTime")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"DateTime?")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u8d77\u59cb\u65f6\u95f4")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"EndTime")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"DateTime?")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u7ed3\u675f\u65f6\u95f4")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"LastRunTime")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"DateTime?")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u6700\u8fd1\u8fd0\u884c\u65f6\u95f4")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"NextRunTime")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"DateTime?")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4e0b\u4e00\u6b21\u8fd0\u884c\u65f6\u95f4")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"NumberOfRuns")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"long")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"0")),(0,a.kt)("td",{parentName:"tr",align:null},"\u89e6\u53d1\u6b21\u6570")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"MaxNumberOfRuns")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"long")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"0")),(0,a.kt)("td",{parentName:"tr",align:null},"\u6700\u5927\u89e6\u53d1\u6b21\u6570\uff0c",(0,a.kt)("inlineCode",{parentName:"td"},"0"),"\uff1a\u4e0d\u9650\u5236\uff0c",(0,a.kt)("inlineCode",{parentName:"td"},"n"),"\uff1aN \u6b21")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"NumberOfErrors")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"long")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"0")),(0,a.kt)("td",{parentName:"tr",align:null},"\u51fa\u9519\u6b21\u6570")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"MaxNumberOfErrors")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"long")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"0")),(0,a.kt)("td",{parentName:"tr",align:null},"\u6700\u5927\u51fa\u9519\u6b21\u6570\uff0c",(0,a.kt)("inlineCode",{parentName:"td"},"0"),"\uff1a\u4e0d\u9650\u5236\uff0c",(0,a.kt)("inlineCode",{parentName:"td"},"n"),"\uff1aN \u6b21")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"NumRetries")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"int")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"0")),(0,a.kt)("td",{parentName:"tr",align:null},"\u91cd\u8bd5\u6b21\u6570")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"RetryTimeout")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"int")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"1000")),(0,a.kt)("td",{parentName:"tr",align:null},"\u91cd\u8bd5\u95f4\u9694\u65f6\u95f4\uff0c\u6beb\u79d2\u5355\u4f4d")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"StartNow")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"bool")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"true")),(0,a.kt)("td",{parentName:"tr",align:null},"\u662f\u5426\u7acb\u5373\u542f\u52a8")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"RunOnStart")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"bool")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"false")),(0,a.kt)("td",{parentName:"tr",align:null},"\u662f\u5426\u542f\u52a8\u65f6\u6267\u884c\u4e00\u6b21")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"UpdatedTime")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"DateTime?")),(0,a.kt)("td",{parentName:"tr",align:null}),(0,a.kt)("td",{parentName:"tr",align:null},"\u4f5c\u4e1a\u89e6\u53d1\u5668\u66f4\u65b0\u65f6\u95f4")))),(0,a.kt)("h3",{id:"26152-\u4f5c\u4e1a\u89e6\u53d1\u5668\u72b6\u6001"},"26.1.5.2 \u4f5c\u4e1a\u89e6\u53d1\u5668\u72b6\u6001"),(0,a.kt)("p",null,"\u4f5c\u4e1a\u89e6\u53d1\u5668\u72b6\u6001\u6307\u793a\u4e86\u5f53\u524d\u4f5c\u4e1a\u89e6\u53d1\u5668\u7684\u72b6\u6001\uff0c\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"TriggerStatus")," \u679a\u4e3e\u7c7b\u578b\uff08",(0,a.kt)("inlineCode",{parentName:"p"},"uint"),"\uff09\uff0c\u8be5\u7c7b\u578b\u5305\u542b\u4ee5\u4e0b\u679a\u4e3e\u6210\u5458\u3002"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"\u679a\u4e3e\u540d"),(0,a.kt)("th",{parentName:"tr",align:null},"\u679a\u4e3e\u503c"),(0,a.kt)("th",{parentName:"tr",align:null},"\u8bf4\u660e"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Backlog")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"0")),(0,a.kt)("td",{parentName:"tr",align:null},"\u79ef\u538b\uff0c\u8d77\u59cb\u65f6\u95f4\u5927\u4e8e\u5f53\u524d\u65f6\u95f4")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Ready")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"1")),(0,a.kt)("td",{parentName:"tr",align:null},"\u5c31\u7eea")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Running")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"2")),(0,a.kt)("td",{parentName:"tr",align:null},"\u6b63\u5728\u8fd0\u884c")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Pause")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"3")),(0,a.kt)("td",{parentName:"tr",align:null},"\u6682\u505c")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Blocked")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"4")),(0,a.kt)("td",{parentName:"tr",align:null},"\u963b\u585e\uff0c\u672c\u8be5\u6267\u884c\u4f46\u662f\u6ca1\u6709\u6267\u884c")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"ErrorToReady")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"5")),(0,a.kt)("td",{parentName:"tr",align:null},"\u7531\u5931\u8d25\u8fdb\u5165\u5c31\u7eea\uff0c\u8fd0\u884c\u9519\u8bef\u5f53\u5e76\u672a\u8d85\u51fa\u6700\u5927\u9519\u8bef\u6570\uff0c\u8fdb\u5165\u4e0b\u4e00\u8f6e\u5c31\u7eea")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Archived")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"6")),(0,a.kt)("td",{parentName:"tr",align:null},"\u5f52\u6863\uff0c\u7ed3\u675f\u65f6\u95f4\u5c0f\u4e8e\u5f53\u524d\u65f6\u95f4")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Panic")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"7")),(0,a.kt)("td",{parentName:"tr",align:null},"\u5d29\u6e83\uff0c\u9519\u8bef\u6b21\u6570\u8d85\u51fa\u4e86\u6700\u5927\u9519\u8bef\u6570")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Overrun")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"8")),(0,a.kt)("td",{parentName:"tr",align:null},"\u8d85\u9650\uff0c\u8fd0\u884c\u6b21\u6570\u8d85\u51fa\u4e86\u6700\u5927\u9650\u5236")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Unoccupied")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"9")),(0,a.kt)("td",{parentName:"tr",align:null},"\u65e0\u89e6\u53d1\u65f6\u95f4\uff0c\u4e0b\u4e00\u6b21\u6267\u884c\u65f6\u95f4\u4e3a ",(0,a.kt)("inlineCode",{parentName:"td"},"null"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"NotStart")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"10")),(0,a.kt)("td",{parentName:"tr",align:null},"\u672a\u542f\u52a8")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Unknown")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"11")),(0,a.kt)("td",{parentName:"tr",align:null},"\u672a\u77e5\u4f5c\u4e1a\u89e6\u53d1\u5668\uff0c\u4f5c\u4e1a\u89e6\u53d1\u5668\u8fd0\u884c\u65f6\u7c7b\u578b\u4e3a ",(0,a.kt)("inlineCode",{parentName:"td"},"null"))),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"Unhandled")),(0,a.kt)("td",{parentName:"tr",align:null},(0,a.kt)("inlineCode",{parentName:"td"},"12")),(0,a.kt)("td",{parentName:"tr",align:null},"\u672a\u77e5\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f\uff0c\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f\u7c7b\u578b\u8fd0\u884c\u65f6\u7c7b\u578b\u4e3a ",(0,a.kt)("inlineCode",{parentName:"td"},"null"))))),(0,a.kt)("h3",{id:"26153-\u5173\u4e8e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668"},"26.1.5.3 \u5173\u4e8e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668"),(0,a.kt)("p",null,"\u4f5c\u4e1a\u89e6\u53d1\u5668 ",(0,a.kt)("inlineCode",{parentName:"p"},"Trigger")," \u662f\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u63d0\u4f9b\u8fd0\u884c\u65f6\u7684",(0,a.kt)("strong",{parentName:"p"},"\u53ea\u8bfb\u7c7b\u578b"),"\uff0c\u90a3\u4e48\u6211\u4eec\u8be5\u5982\u4f55\u521b\u5efa\u6216\u53d8\u66f4 ",(0,a.kt)("inlineCode",{parentName:"p"},"Trigger")," \u5bf9\u8c61\u5462\uff1f"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"TriggerBuilder")," \u662f\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u63d0\u4f9b\u53ef\u7528\u6765\u751f\u6210\u8fd0\u884c\u65f6 ",(0,a.kt)("inlineCode",{parentName:"p"},"Trigger")," \u7684\u7c7b\u578b\uff0c\u8fd9\u6837\u505a\u7684\u597d\u5904\u53ef\u907f\u514d\u5916\u90e8\u76f4\u63a5\u4fee\u6539\u8fd0\u884c\u65f6 ",(0,a.kt)("inlineCode",{parentName:"p"},"Trigger")," \u6570\u636e\uff0c\u8fd8\u80fd\u5b9e\u73b0\u4efb\u4f55\u4fee\u6539\u52a8\u4f5c\u76d1\u542c\uff0c\u4e5f\u80fd\u907f\u514d\u591a\u7ebf\u7a0b\u62a2\u5360\u60c5\u51b5\u3002"),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u63d0\u4f9b\u4e86\u591a\u79cd\u65b9\u5f0f\u7528\u6765\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"TriggerBuilder")," \u5bf9\u8c61\u3002"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Create")," \u9759\u6001\u65b9\u6cd5\u521b\u5efa"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8}",showLineNumbers:!0,"{2,5,8}":!0},'// \u6839\u636e Trigger \u6d3e\u751f\u7c7b\u7c7b\u578b\u521b\u5efa\nvar triggerBuilder = TriggerBuilder.Create();\n\n// \u6839\u636e Type \u7c7b\u578b\u521b\u5efa\nvar triggerBuilder = TriggerBuilder.Create(typeof(PeriodTrigger));\n\n// \u6839\u636e\u7a0b\u5e8f\u96c6\u540d\u79f0\u548c\u7c7b\u578b\u5b8c\u5168\u9650\u5b9a\u540d\uff08FullName\uff09\u521b\u5efa\nvar triggerBuilder = TriggerBuilder.Create("Furion", "Furion.Schedule.PeriodTrigger");\n')),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Trigger")," \u7c7b\u578b\u521b\u5efa"))),(0,a.kt)("p",null,"\u8fd9\u79cd\u65b9\u5f0f\u5e38\u7528\u4e8e\u5728\u8fd0\u884c\u65f6\u66f4\u65b0\u4f5c\u4e1a\u89e6\u53d1\u5668\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var triggerBuilder = TriggerBuilder.From(trigger);\n")),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"JSON")," \u5b57\u7b26\u4e32\u521b\u5efa"))),(0,a.kt)("p",null,"\u8be5\u65b9\u5f0f\u975e\u5e38\u7075\u6d3b\uff0c\u53ef\u4ece\u914d\u7f6e\u6587\u4ef6\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"JSON")," \u5b57\u7b26\u4e32\uff0c\u6216\u5176\u4ed6\u80fd\u591f\u8fd4\u56de ",(0,a.kt)("inlineCode",{parentName:"p"},"JSON")," \u5b57\u7b26\u4e32\u7684\u5730\u65b9\u521b\u5efa\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2-23}",showLineNumbers:!0,"{2-23}":!0},'var triggerBuilder = TriggerBuilder.From(@"\n{\n ""triggerId"": ""job1_trigger1"",\n ""triggerType"": ""Furion.Schedule.PeriodSecondsTrigger"",\n ""assemblyName"": ""Furion"",\n ""args"": ""[5]"",\n ""description"": null,\n ""status"": 2,\n ""startTime"": null,\n ""endTime"": null,\n ""lastRunTime"": ""2022-11-20T18:31:56.6859410+08:00"",\n ""nextRunTime"": ""2022-11-20T18:32:01.7233546+08:00"",\n ""numberOfRuns"": 1,\n ""maxNumberOfRuns"": 0,\n ""numberOfErrors"": 0,\n ""maxNumberOfErrors"": 0,\n ""numRetries"": 0,\n ""retryTimeout"": 1000,\n ""startNow"": true,\n ""runOnStart"": false,\n ""updatedTime"": ""2022-11-20T18:31:56.7233630+08:00""\n}");\n')),(0,a.kt)("p",null,"\u5982\u679c\u4f7f\u7528\u7684\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},".NET7"),"\uff0c\u53ef\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},'"""')," \u907f\u514d\u8f6c\u4e49\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2-23}",showLineNumbers:!0,"{2-23}":!0},'var triggerBuilder = TriggerBuilder.From("""\n{\n "triggerId": "job1_trigger1",\n "triggerType": "Furion.Schedule.PeriodSecondsTrigger",\n "assemblyName": "Furion",\n "args": "[5]",\n "description": null,\n "status": 2,\n "startTime": null,\n "endTime": null,\n "lastRunTime": "2022-11-20T18:31:56.6859410+08:00",\n "nextRunTime": "2022-11-20T18:32:01.7233546+08:00",\n "numberOfRuns": 1,\n "maxNumberOfRuns": 0,\n "numberOfErrors": 0,\n "maxNumberOfErrors": 0,\n "numRetries": 0,\n "retryTimeout": 1000,\n "startNow": true,\n "runOnStart": false,\n "updatedTime": "2022-11-20T18:31:56.7233630+08:00"\n}\n""");\n')),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u5c5e\u6027\u540d\u5339\u914d\u89c4\u5219",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"p"},"CamelCase\uff08\u9a7c\u5cf0\u547d\u540d\u6cd5\uff09"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Pascal\uff08\u5e15\u65af\u5361\u547d\u540d\u6cd5\uff09")," \u547d\u540d\u65b9\u5f0f\u3002"),(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"\u4e0d\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"strong"},"UnderScoreCase\uff08\u4e0b\u5212\u7ebf\u547d\u540d\u6cd5\uff09"))," \uff0c\u5982 ",(0,a.kt)("inlineCode",{parentName:"p"},'"include_annotations": true'))),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8fd8\u53ef\u4ee5\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Clone")," \u9759\u6001\u65b9\u6cd5\u4ece\u4e00\u4e2a ",(0,a.kt)("inlineCode",{parentName:"strong"},"TriggerBuilder")," \u521b\u5efa"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var triggerBuilder = TriggerBuilder.Clone(fromTriggerBuilder);\n")),(0,a.kt)("admonition",{title:"\u514b\u9686\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u514b\u9686\u64cd\u4f5c\u53ea\u4f1a\u514b\u9686 ",(0,a.kt)("inlineCode",{parentName:"p"},"AssemblyName"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"TriggerType"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Args"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Description"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"StartTime"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"EndTime"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"MaxNumberOfRuns"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"MaxNumberOfErrors"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"NumRetries"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"RetryTimeout"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"StartNow"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"RunOnStart"),"\u3002"),(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"\u4e0d\u4f1a\u514b\u9686 ",(0,a.kt)("inlineCode",{parentName:"strong"},"TriggerId"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"strong"},"JobId"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"strong"},"Status"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"strong"},"LastRunTime"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"strong"},"NextRunTime"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"strong"},"NumberOfRuns"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"strong"},"NumberOfErrors"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"strong"},"UpdatedTime"),"\u3002"))),(0,a.kt)("ol",{start:5},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8fd8\u53ef\u4ee5\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"LoadFrom")," \u5b9e\u4f8b\u65b9\u6cd5\u586b\u5145\u5f53\u524d\u7684 ",(0,a.kt)("inlineCode",{parentName:"strong"},"TriggerBuilder")))),(0,a.kt)("p",null,"\u6bd4\u5982\u53ef\u4ee5\u4f20\u9012\u533f\u540d\u7c7b\u578b\uff0c\u7c7b\u7c7b\u578b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,9,14}",showLineNumbers:!0,"{2,9,14}":!0},'// \u4f1a\u8986\u76d6\u6240\u6709\u76f8\u540c\u7684\u503c\ntriggerBuilder.LoadFrom(new\n{\n Description = "\u6211\u662f\u63cf\u8ff0",\n StartTime = DateTime.Now\n});\n\n// \u652f\u6301\u591a\u4e2a\u586b\u5145\uff0c\u8fd8\u53ef\u4ee5\u914d\u7f6e\u8df3\u8fc7 null \u503c\u8986\u76d6\ntriggerBuilder.LoadFrom(new\n{\n Description = "\u6211\u662f\u53e6\u5916\u4e00\u4e2a\u63cf\u8ff0",\n StartTime = DateTime.Now,\n LastRunTime = default(DateTime?) // \u4f1a\u8df3\u8fc7\u8d4b\u503c\n}, ignoreNullValue: true);\n')),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u5c5e\u6027\u540d\u5339\u914d\u89c4\u5219",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"p"},"CamelCase\uff08\u9a7c\u5cf0\u547d\u540d\u6cd5\uff09"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Pascal\uff08\u5e15\u65af\u5361\u547d\u540d\u6cd5\uff09")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"UnderScoreCase\uff08\u4e0b\u5212\u7ebf\u547d\u540d\u6cd5\uff09")," \u547d\u540d\u65b9\u5f0f\u3002")),(0,a.kt)("h3",{id:"26154-\u5185\u7f6e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668"},"26.1.5.4 \u5185\u7f6e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668"),(0,a.kt)("p",null,"\u4e3a\u4e86\u65b9\u4fbf\u5feb\u901f\u5b9e\u73b0\u4f5c\u4e1a\u89e6\u53d1\u5668\uff0c\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u5185\u7f6e\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"Period\uff08\u95f4\u9694\uff09")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"Cron\uff08\u8868\u8fbe\u5f0f\uff09")," \u4f5c\u4e1a\u89e6\u53d1\u5668\uff0c\u53ef\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"TriggerBuilder")," \u7c7b\u578b\u6216 ",(0,a.kt)("inlineCode",{parentName:"p"},"Triggers")," \u9759\u6001\u7c7b\u521b\u5efa\u3002"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},(0,a.kt)("inlineCode",{parentName:"strong"},"TriggerBuilder")," \u65b9\u5f0f"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-c",metastring:"showLineNumbers {2,5,8}",showLineNumbers:!0,"{2,5,8}":!0},'// \u521b\u5efa\u6beb\u79d2\u5468\u671f\uff08\u95f4\u9694\uff09\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = TriggerBuilder.Period(5000);\n\n// \u521b\u5efa\u79d2\u5468\u671f\uff08\u95f4\u9694\uff09\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = TriggerBuilder.PeriodSeconds(5);\n\n// \u521b\u5efa Cron \u8868\u8fbe\u5f0f\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = TriggerBuilder.Cron("* * * * *", CronStringFormat.Default);\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},(0,a.kt)("inlineCode",{parentName:"strong"},"Triggers")," \u65b9\u5f0f\uff0c\u63a8\u8350"))),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Triggers")," \u5177\u5907 ",(0,a.kt)("inlineCode",{parentName:"p"},"TriggerBuilder")," \u6240\u6709\u7684\u9759\u6001\u65b9\u6cd5\uff0c\u53e6\u5916\u8fd8\u6dfb\u52a0\u4e86\u4e0d\u5c11\u66f4\u52a0\u4fbf\u6377\u7684\u9759\u6001\u65b9\u6cd5\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8,11,14,17,20,23,26,29}",showLineNumbers:!0,"{2,5,8,11,14,17,20,23,26,29}":!0},'// \u521b\u5efa\u6beb\u79d2\u5468\u671f\uff08\u95f4\u9694\uff09\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = Triggers.Period(5000);\n\n// \u521b\u5efa\u79d2\u5468\u671f\uff08\u95f4\u9694\uff09\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = Triggers.PeriodSeconds(5);\n\n// \u521b\u5efa Cron \u8868\u8fbe\u5f0f\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = Triggers.Cron("* * * * *", CronStringFormat.Default);\n\n// \u521b\u5efa\u6bcf\u79d2\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = Triggers.Secondly();\n\n// \u521b\u5efa\u6bcf\u5206\u949f\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = Triggers.Minutely();\n\n// \u521b\u5efa\u6bcf\u5c0f\u65f6\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = Triggers.Hourly();\n\n// \u521b\u5efa\u6bcf\u5929\uff08\u5348\u591c\uff09\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = Triggers.Daily();\n\n// \u521b\u5efa\u6bcf\u67081\u53f7\uff08\u5348\u591c\uff09\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = Triggers.Monthly();\n\n// \u521b\u5efa\u6bcf\u5468\u65e5\uff08\u5348\u591c\uff09\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = Triggers.Weekly();\n\n// \u521b\u5efa\u6bcf\u5e741\u67081\u53f7\uff08\u5348\u591c\uff09\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = Triggers.Yearly();\n')),(0,a.kt)("h3",{id:"26155-\u81ea\u5b9a\u4e49\u4f5c\u4e1a\u89e6\u53d1\u5668"},"26.1.5.5 \u81ea\u5b9a\u4e49\u4f5c\u4e1a\u89e6\u53d1\u5668"),(0,a.kt)("p",null,"\u9664\u4e86\u4f7f\u7528\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"PeriodTrigger")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"CronTrigger")," \u4ee5\u5916\uff0c\u53ef\u81ea\u5b9a\u4e49\u4f5c\u4e1a\u89e6\u53d1\u5668\uff0c\u53ea\u9700\u8981\u7ee7\u627f ",(0,a.kt)("inlineCode",{parentName:"p"},"Trigger")," \u5e76\u91cd\u5199 ",(0,a.kt)("inlineCode",{parentName:"p"},"GetNextOccurrence")," \u65b9\u6cd5\u5373\u53ef\uff0c\u5982\u5b9e\u73b0\u4e00\u4e2a\u95f4\u9694\u4e24\u79d2\u7684\u4f5c\u4e1a\u89e6\u53d1\u5668\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,5}",showLineNumbers:!0,"{1,3,5}":!0},"public class TwiceSecondTrigger : Trigger\n{\n public override DateTime GetNextOccurrence(DateTime startAt)\n {\n return startAt.AddSeconds(2);\n }\n}\n")),(0,a.kt)("p",null,"\u4e4b\u540e\u53ef\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"Triggers.Create")," \u6216 ",(0,a.kt)("inlineCode",{parentName:"p"},"Triggers.Create")," \u521b\u5efa\u5373\u53ef\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"{3}":!0},"services.AddSchedule(options =>\n{\n options.AddJob(Triggers.Create());\n});\n")),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6,8,10,12}",showLineNumbers:!0,"{2,4,6,8,10,12}":!0},"info: 2022-11-20 21:13:02.4726416 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #9\n job1 job1_trigger1 2022/11/20 21:13:02 ConsoleApp13.TwiceSecondTrigger\ninfo: 2022-11-20 21:13:04.4591328 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #6\n job1 job1_trigger1 2022/11/20 21:13:04 ConsoleApp13.TwiceSecondTrigger\ninfo: 2022-11-20 21:13:06.4677716 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #4\n job1 job1_trigger1 2022/11/20 21:13:06 ConsoleApp13.TwiceSecondTrigger\ninfo: 2022-11-20 21:13:08.4726987 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #14\n job1 job1_trigger1 2022/11/20 21:13:08 ConsoleApp13.TwiceSecondTrigger\ninfo: 2022-11-20 21:13:10.4827028 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #9\n job1 job1_trigger1 2022/11/20 21:13:10 ConsoleApp13.TwiceSecondTrigger\ninfo: 2022-11-20 21:13:12.4936247 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #14\n job1 job1_trigger1 2022/11/20 21:13:12 ConsoleApp13.TwiceSecondTrigger\n")),(0,a.kt)("p",null,"\u53e6\u5916\uff0c\u81ea\u5b9a\u4e49\u4f5c\u4e1a\u89e6\u53d1\u5668\u8fd8\u652f\u6301\u4f20\u9012\u53c2\u6570\uff1a"),(0,a.kt)("admonition",{title:"\u53c2\u6570\u7279\u522b\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c\u81ea\u5b9a\u4e49\u4f5c\u4e1a\u89e6\u53d1\u5668\u5305\u542b\u53c2\u6570\uff0c\u90a3\u4e48",(0,a.kt)("strong",{parentName:"p"},"\u5fc5\u987b\u6ee1\u8db3\u4ee5\u4e0b\u4e24\u4e2a\u6761\u4ef6"),"\uff1a"),(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u53c2\u6570\u5fc5\u987b\u901a\u8fc7\u552f\u4e00\u7684\u6784\u9020\u51fd\u6570\u4f20\u5165\uff0c\u6709\u4e14\u6700\u591a\u53ea\u80fd\u62e5\u6709\u4e00\u4e2a\u6784\u9020\u51fd\u6570")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u53c2\u6570\u7684\u7c7b\u578b\u53ea\u80fd\u662f ",(0,a.kt)("inlineCode",{parentName:"strong"},"int"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"strong"},"string"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"strong"},"bool"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"strong"},"null")," \u6216\u7531\u5b83\u4eec\u7ec4\u6210\u7684\u6570\u7ec4\u7c7b\u578b")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,5,8,12}",showLineNumbers:!0,"{1,3,5,8,12}":!0},"public class SomeSecondTrigger : Trigger\n{\n public SomeSecondTrigger(int seconds) // \u652f\u6301\u591a\u4e2a\u53c2\u6570\n {\n Seconds = seconds;\n }\n\n private int Seconds { get; }\n\n public override DateTime GetNextOccurrence(DateTime startAt)\n {\n return startAt.AddSeconds(Seconds);\n }\n}\n")),(0,a.kt)("p",null,"\u4e4b\u540e\u53ef\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"Triggers.Create")," \u6216 ",(0,a.kt)("inlineCode",{parentName:"p"},"Triggers.Create")," \u521b\u5efa\u5e76\u4f20\u5165\u53c2\u6570\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"{3}":!0},"services.AddSchedule(options =>\n{\n options.AddJob(Triggers.Create(3)); // 3 \u79d2\u6267\u884c\u4e00\u6b21\n});\n")),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6,8,10,12}",showLineNumbers:!0,"{2,4,6,8,10,12}":!0},"info: 2022-11-20 21:33:46.3074692 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #4\n job1 job1_trigger1 2022/11/20 21:33:46 ConsoleApp13.SomeSecondTrigger\ninfo: 2022-11-20 21:33:49.3101667 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #6\n job1 job1_trigger1 2022/11/20 21:33:49 ConsoleApp13.SomeSecondTrigger\ninfo: 2022-11-20 21:33:52.3222046 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #8\n job1 job1_trigger1 2022/11/20 21:33:52 ConsoleApp13.SomeSecondTrigger\ninfo: 2022-11-20 21:33:55.3270737 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #4\n job1 job1_trigger1 2022/11/20 21:33:55 ConsoleApp13.SomeSecondTrigger\ninfo: 2022-11-20 21:33:58.3293727 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #6\n job1 job1_trigger1 2022/11/20 21:33:58 ConsoleApp13.SomeSecondTrigger\ninfo: 2022-11-20 21:34:01.3472296 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #4\n job1 job1_trigger1 2022/11/20 21:34:01 ConsoleApp13.SomeSecondTrigger\n")),(0,a.kt)("p",null,"\u81ea\u5b9a\u4e49\u4f5c\u4e1a\u89e6\u53d1\u5668\u9664\u4e86\u53ef\u91cd\u5199 ",(0,a.kt)("inlineCode",{parentName:"p"},"GetNextOccurrence")," \u65b9\u6cd5\u4e4b\u540e\uff0c\u8fd8\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"ShouldRun")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"ToString")," \u65b9\u6cd5\u53ef\u91cd\u5199\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {15,22,24}",showLineNumbers:!0,"{15,22,24}":!0},'public class SomeSecondTrigger : Trigger\n{\n public SomeSecondTrigger(int seconds)\n {\n Seconds = seconds;\n }\n\n private int Seconds { get; }\n\n public override DateTime GetNextOccurrence(DateTime startAt)\n {\n return startAt.AddSeconds(Seconds);\n }\n\n public override bool ShouldRun(JobDetail jobDetail, DateTime startAt)\n {\n // \u5728\u8fd9\u91cc\u8fdb\u4e00\u6b65\u63a7\u5236\uff0c\u5982\u679c\u8fd4\u56de false\uff0c\u5219\u4f5c\u4e1a\u89e6\u53d1\u5668\u8df3\u8fc7\u6267\u884c\n\n return base.ShouldRun(jobDetail, startAt);\n }\n\n public override string ToString()\n {\n return $"\u81ea\u5b9a\u4e49\u9012\u589e {Seconds}s \u89e6\u53d1\u5668";\n }\n}\n')),(0,a.kt)("p",null,"\u63a8\u8350\u91cd\u5199 ",(0,a.kt)("inlineCode",{parentName:"p"},"GetNextRunTime")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"ToString")," \u65b9\u6cd5\u5373\u53ef\uff0c\u5982\u679c\u91cd\u5199\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"ToString")," \u65b9\u6cd5\uff0c\u90a3\u4e48\u53ef\u4ee5\u901a\u8fc7 $",(0,a.kt)("inlineCode",{parentName:"p"},"{trigger}")," \u8f93\u51fa\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11}",showLineNumbers:!0,"{11}":!0},'public class MyJob : IJob\n{\n private readonly ILogger _logger;\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");\n await Task.CompletedTask;\n }\n}\n')),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4}",showLineNumbers:!0,"{2,4}":!0},"info: 2022-11-20 21:43:07.4570694 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #4\n job1 job1_trigger1 2022/11/20 21:43:07 \u81ea\u5b9a\u4e49\u9012\u589e 3s \u89e6\u53d1\u5668\ninfo: 2022-11-20 21:43:10.4629078 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #9\n job1 job1_trigger1 2022/11/20 21:43:10 \u81ea\u5b9a\u4e49\u9012\u589e 3s \u89e6\u53d1\u5668\n")),(0,a.kt)("h3",{id:"26156-\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"},"26.1.5.6 \u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),(0,a.kt)("p",null,"\u5982\u679c ",(0,a.kt)("inlineCode",{parentName:"p"},"JobBuilder")," \u914d\u7f6e\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"IncludeAnnotations")," \u53c2\u6570\u4e14\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"true"),"\uff0c\u90a3\u4e48\u5c06\u4f1a\u81ea\u52a8\u89e3\u6790 ",(0,a.kt)("inlineCode",{parentName:"p"},"IJob")," \u7684\u5b9e\u73b0\u7c7b\u578b\u7684\u6240\u6709\u7ee7\u627f ",(0,a.kt)("inlineCode",{parentName:"p"},"TriggerAttribute")," \u7684\u7279\u6027\uff0c\u76ee\u524d\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u5185\u7f6e\u4e86\u4ee5\u4e0b\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[Period(5000)]"),"\uff1a\u6beb\u79d2\u5468\u671f\uff08\u95f4\u9694\uff09\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[PeriodSeconds(5)]"),"\uff1a\u79d2\u5468\u671f\uff08\u95f4\u9694\uff09\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},'[Cron("* * * * *", CronStringFormat.Default]'),"\uff1aCron \u8868\u8fbe\u5f0f\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[Secondly]"),"\uff1a\u6bcf\u79d2\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[Minutely]"),"\uff1a\u6bcf\u5206\u949f\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[Hourly]"),"\uff1a\u6bcf\u5c0f\u65f6\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[Daily]"),"\uff1a\u6bcf\u5929\uff08\u5348\u591c\uff09\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[Monthly]"),"\uff1a\u6bcf\u6708 1 \u53f7\uff08\u5348\u591c\uff09\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[Weekly]"),"\uff1a\u6bcf\u5468\u65e5\uff08\u5348\u591c\uff09\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[Yearly]"),"\uff1a\u6bcf\u5e74 1 \u6708 1 \u53f7\uff08\u5348\u591c\uff09\u5f00\u59cb\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027")),(0,a.kt)("p",null,"\u4f7f\u7528\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,6}",showLineNumbers:!0,"{3,6}":!0},"services.AddSchedule(options =>\n{\n options.AddJob(JobBuilder.Create().SetIncludeAnnotations(true));\n\n // \u4e5f\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e + \u7279\u6027\u626b\u63cf\n options.AddJob(JobBuilder.Create().SetIncludeAnnotations(true)\n , Triggers.PeriodSeconds(5));\n});\n")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-3}",showLineNumbers:!0,"{1-3}":!0},'[Minutely]\n[PeriodSeconds(5)]\n[Cron("* * * * *")]\npublic class MyJob : IJob\n{\n private readonly ILogger _logger;\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");\n await Task.CompletedTask;\n }\n}\n')),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6,8,10}",showLineNumbers:!0,"{2,4,6,8,10}":!0},"info: 2022-11-20 22:10:54.5027217 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #9\n job1 job1_trigger2 2022/11/20 22:10:54 5000ms\ninfo: 2022-11-20 22:10:59.4948832 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #9\n job1 job1_trigger2 2022/11/20 22:10:59 5000ms\ninfo: 2022-11-20 22:11:00.0353681 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #6\n job1 job1_trigger3 2022/11/20 22:11:00 * * * * *\ninfo: 2022-11-20 22:11:00.0372492 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #8\n job1 job1_trigger1 2022/11/20 22:11:00 * * * * *\ninfo: 2022-11-20 22:11:04.5094807 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #8\n job1 job1_trigger2 2022/11/20 22:11:04 5000ms\n")),(0,a.kt)("hr",null),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u9664\u4e86\u4f7f\u7528\u5185\u7f6e\u7279\u6027\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u81ea\u5b9a\u4e49\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027"),"\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,2,5}",showLineNumbers:!0,"{1,2,5}":!0},"[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]\npublic class SomeSecondAttribute : TriggerAttribute\n{\n public SomeSecondAttribute(int seconds)\n : base(typeof(SomeSecondTrigger), seconds)\n {\n }\n}\n")),(0,a.kt)("p",null,"\u4f7f\u7528\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},'[SomeSecond(3)]\npublic class MyJob : IJob\n{\n private readonly ILogger _logger;\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");\n await Task.CompletedTask;\n }\n}\n')),(0,a.kt)("p",null,"\u67e5\u770b\u4f5c\u4e1a\u6267\u884c\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6,8,10}",showLineNumbers:!0,"{2,4,6,8,10}":!0},"info: 2022-11-20 22:16:22.0933295 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #9\n job1 job1_trigger1 2022/11/20 22:16:22 \u81ea\u5b9a\u4e49\u9012\u589e 3s \u89e6\u53d1\u5668\ninfo: 2022-11-20 22:16:25.0823563 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #8\n job1 job1_trigger1 2022/11/20 22:16:25 \u81ea\u5b9a\u4e49\u9012\u589e 3s \u89e6\u53d1\u5668\ninfo: 2022-11-20 22:16:28.0910993 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #6\n job1 job1_trigger1 2022/11/20 22:16:28 \u81ea\u5b9a\u4e49\u9012\u589e 3s \u89e6\u53d1\u5668\ninfo: 2022-11-20 22:16:31.0937955 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #9\n job1 job1_trigger1 2022/11/20 22:16:31 \u81ea\u5b9a\u4e49\u9012\u589e 3s \u89e6\u53d1\u5668\ninfo: 2022-11-20 22:16:34.1034905 +08:00 \u661f\u671f\u65e5 L ConsoleApp13.MyJob[0] #6\n job1 job1_trigger1 2022/11/20 22:16:34 \u81ea\u5b9a\u4e49\u9012\u589e 3s \u89e6\u53d1\u5668\n")),(0,a.kt)("hr",null),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f5c\u4e1a\u89e6\u53d1\u5668\u7279\u6027\u8fd8\u63d0\u4f9b\u4e86\u591a\u4e2a\u5c5e\u6027\u914d\u7f6e"),"\uff0c\u5982\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"TriggerId"),"\uff1a\u4f5c\u4e1a\u89e6\u53d1\u5668 Id\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Description"),"\uff1a\u63cf\u8ff0\u4fe1\u606f\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"StartTime"),"\uff1a\u8d77\u59cb\u65f6\u95f4\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"EndTime"),"\uff1a\u7ed3\u675f\u65f6\u95f4\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MaxNumberOfRuns"),"\uff1a\u6700\u5927\u89e6\u53d1\u6b21\u6570\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"long")," \u7c7b\u578b\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"0"),"\uff1a\u4e0d\u9650\u5236\uff1b",(0,a.kt)("inlineCode",{parentName:"li"},"n"),"\uff1aN \u6b21"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MaxNumberOfErrors"),"\uff1a\u6700\u5927\u51fa\u9519\u6b21\u6570\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"long")," \u7c7b\u578b\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"0"),"\uff1a\u4e0d\u9650\u5236\uff1b",(0,a.kt)("inlineCode",{parentName:"li"},"n"),"\uff1aN \u6b21"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"NumRetries"),"\uff1a\u91cd\u8bd5\u6b21\u6570\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"int")," \u7c7b\u578b\uff0c\u9ed8\u8ba4\u503c ",(0,a.kt)("inlineCode",{parentName:"li"},"0")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"RetryTimeout"),"\uff1a\u91cd\u8bd5\u95f4\u9694\u65f6\u95f4\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"int")," \u7c7b\u578b\uff0c\u9ed8\u8ba4\u503c ",(0,a.kt)("inlineCode",{parentName:"li"},"1000")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"StartNow"),"\uff1a\u662f\u5426\u7acb\u5373\u542f\u52a8\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4\u503c ",(0,a.kt)("inlineCode",{parentName:"li"},"true")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"RunOnStart"),"\uff1a\u662f\u5426\u542f\u52a8\u65f6\u6267\u884c\u4e00\u6b21\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4\u503c ",(0,a.kt)("inlineCode",{parentName:"li"},"false"))),(0,a.kt)("p",null,"\u4f7f\u7528\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},'[PeriodSeconds(5, TriggerId = "trigger1", Description = "\u8fd9\u662f\u4e00\u6bb5\u63cf\u8ff0")]\npublic class MyJob : IJob\n{\n')),(0,a.kt)("h3",{id:"26157-\u8bbe\u7f6e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668"},"26.1.5.7 \u8bbe\u7f6e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"TriggerBuilder")," \u63d0\u4f9b\u4e86\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"Trigger")," \u5b8c\u5168\u5339\u914d\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Set[\u5c5e\u6027\u540d]")," \u65b9\u6cd5\u6765\u914d\u7f6e\u4f5c\u4e1a\u89e6\u53d1\u5668\u5404\u4e2a\u5c5e\u6027\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,26}",showLineNumbers:!0,"{3,26}":!0},' services.AddSchedule(options =>\n {\n var triggerBuilder = Triggers.Period(5000)\n .SetTriggerId("trigger1") // \u4f5c\u4e1a\u89e6\u53d1\u5668 Id\n .SetTriggerType("Furion", "Furion.Schedule.PeriodTrigger") // \u4f5c\u4e1a\u89e6\u53d1\u5668\u7c7b\u578b\uff0c\u652f\u6301\u591a\u4e2a\u91cd\u8f7d\n .SetTriggerType() // \u4f5c\u4e1a\u89e6\u53d1\u5668\u7c7b\u578b\uff0c\u652f\u6301\u591a\u4e2a\u91cd\u8f7d\n .SetTriggerType(typeof(PeriodTrigger)) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u7c7b\u578b\uff0c\u652f\u6301\u591a\u4e2a\u91cd\u8f7d\n .SetArgs("[5000]") // \u4f5c\u4e1a\u89e6\u53d1\u5668\u53c2\u6570\uff0c\u652f\u6301\u591a\u4e2a\u91cd\u8f7d\n .SetArgs(5000) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u53c2\u6570\uff0c\u652f\u6301\u591a\u4e2a\u91cd\u8f7d\n .SetDescription("\u4f5c\u4e1a\u89e6\u53d1\u5668\u63cf\u8ff0") // \u4f5c\u4e1a\u89e6\u53d1\u5668\u63cf\u8ff0\n .SetStatus(TriggerStatus.Ready) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u72b6\u6001\n .SetStartTime(DateTime.Now) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u8d77\u59cb\u65f6\u95f4\n .SetEndTime(DateTime.Now.AddMonths(1)) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u7ed3\u675f\u65f6\u95f4\n .SetLastRunTime(DateTime.Now.AddSeconds(-5)) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u6700\u8fd1\u8fd0\u884c\u65f6\u95f4\n .SetNextRunTime(DateTime.Now.AddSeconds(5)) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u4e0b\u4e00\u6b21\u8fd0\u884c\u65f6\u95f4\n .SetNumberOfRuns(1) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u89e6\u53d1\u6b21\u6570\n .SetMaxNumberOfRuns(100) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u6700\u5927\u89e6\u53d1\u5668\u6b21\u6570\n .SetNumberOfErrors(1) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u51fa\u9519\u6b21\u6570\n .SetMaxNumberOfErrors(100) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u6700\u5927\u51fa\u9519\u6b21\u6570\n .SetNumRetries(3) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u51fa\u9519\u91cd\u8bd5\u6b21\u6570\n .SetRetryTimeout(1000) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u91cd\u8bd5\u95f4\u9694\u65f6\u95f4\n .SetStartNow(true) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u662f\u5426\u7acb\u5373\u542f\u52a8\n .SetRunOnStart(false) // \u4f5c\u4e1a\u89e6\u53d1\u5668\u662f\u5426\u542f\u52a8\u65f6\u6267\u884c\u4e00\u6b21\n ;\n\n options.AddJob(triggerBuilder);\n });\n')),(0,a.kt)("h3",{id:"26158-\u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa"},"26.1.5.8 \u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Trigger")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"TriggerBuilder")," \u90fd\u63d0\u4f9b\u4e86\u591a\u79cd\u5c06\u81ea\u8eab\u8f6c\u6362\u6210\u7279\u5b9a\u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u3002"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8f6c\u6362\u6210 ",(0,a.kt)("inlineCode",{parentName:"strong"},"JSON")," \u5b57\u7b26\u4e32"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var json = trigger.ConvertToJSON();\n")),(0,a.kt)("p",null,"\u5b57\u7b26\u4e32\u6253\u5370\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "triggerId": "job1_trigger1",\n "jobId": "job1",\n "triggerType": "Furion.Schedule.PeriodSecondsTrigger",\n "assemblyName": "Furion",\n "args": "[5]",\n "description": null,\n "status": 2,\n "startTime": null,\n "endTime": null,\n "lastRunTime": "2022-11-20T22:25:03.8176033+08:00",\n "nextRunTime": "2022-11-20T22:25:08.8385903+08:00",\n "numberOfRuns": 1,\n "maxNumberOfRuns": 0,\n "numberOfErrors": 0,\n "maxNumberOfErrors": 0,\n "numRetries": 0,\n "retryTimeout": 1000,\n "startNow": true,\n "runOnStart": false,\n "updatedTime": "2022-11-20T22:25:03.8386511+08:00"\n}\n')),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8f6c\u6362\u6210 ",(0,a.kt)("inlineCode",{parentName:"strong"},"SQL")," \u5b57\u7b26\u4e32"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,7,12}",showLineNumbers:!0,"{2,7,12}":!0},'// \u8f93\u51fa\u65b0\u589e SQL\uff0c\u4f7f\u7528 CamelCase \u5c5e\u6027\u547d\u540d\nvar insertSql = trigger.ConvertToSQL("tbName"\n , PersistenceBehavior.Appended\n , NamingConventions.CamelCase);\n\n// \u8f93\u51fa\u5220\u9664 SQL\uff0c\u4f7f\u7528 Pascal \u5c5e\u6027\u547d\u540d\nvar deleteSql = trigger.ConvertToSQL("tbName"\n , PersistenceBehavior.Removed\n , NamingConventions.Pascal);\n\n// \u8f93\u51fa\u66f4\u65b0 SQL\uff0c\u4f7f\u7528 UnderScoreCase \u5c5e\u6027\u547d\u540d\nvar updateSql = trigger.ConvertToSQL("tbName"\n , PersistenceBehavior.Updated\n , NamingConventions.UnderScoreCase);\n')),(0,a.kt)("p",null,"\u5b57\u7b26\u4e32\u6253\u5370\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sql",metastring:"showLineNumbers {2,48,52}",showLineNumbers:!0,"{2,48,52}":!0},"-- \u65b0\u589e\u8bed\u53e5\nINSERT INTO tbName(\n [triggerId],\n [jobId],\n [triggerType],\n [assemblyName],\n [args],\n [description],\n [status],\n [startTime],\n [endTime],\n [lastRunTime],\n [nextRunTime],\n [numberOfRuns],\n [maxNumberOfRuns],\n [numberOfErrors],\n [maxNumberOfErrors],\n [numRetries],\n [retryTimeout],\n [startNow],\n [runOnStart],\n [updatedTime]\n)\nVALUES(\n 'job1_trigger1',\n 'job1',\n 'Furion.Schedule.PeriodSecondsTrigger',\n 'Furion',\n '[5]',\n NULL,\n 2,\n NULL,\n NULL,\n '2022/11/20 22:27:47',\n '2022/11/20 22:27:52',\n 1,\n 0,\n 0,\n 0,\n 0,\n 1000,\n 1,\n 0,\n '2022/11/20 22:27:47'\n);\n\n-- \u5220\u9664\u8bed\u53e5\nDELETE FROM tbName\nWHERE [TriggerId] = 'job1_trigger1' AND [JobId] = 'job1';\n\n-- \u66f4\u65b0\u8bed\u53e5\nUPDATE tbName\nSET\n [trigger_id] = 'job1_trigger1',\n [job_id] = 'job1',\n [trigger_type] = 'Furion.Schedule.PeriodSecondsTrigger',\n [assembly_name] = 'Furion',\n [args] = '[5]',\n [description] = NULL,\n [status] = 2,\n [start_time] = NULL,\n [end_time] = NULL,\n [last_run_time] = '2022/11/20 22:27:47',\n [next_run_time] = '2022/11/20 22:27:52',\n [number_of_runs] = 1,\n [max_number_of_runs] = 0,\n [number_of_errors] = 0,\n [max_number_of_errors] = 0,\n [num_retries] = 0,\n [retry_timeout] = 1000,\n [start_now] = 1,\n [run_on_start] = 0,\n [updated_time] = '2022/11/20 22:27:47'\nWHERE [trigger_id] = 'job1_trigger1' AND [job_id] = 'job1';\n")),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8f6c\u6362\u6210 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Monitor")," \u5b57\u7b26\u4e32"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var monitor = trigger.ConvertToMonitor();\n")),(0,a.kt)("p",null,"\u5b57\u7b26\u4e32\u6253\u5370\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Trigger \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 Furion.Schedule.PeriodSecondsTrigger\n\u2523\n\u2523 triggerId\uff1a job1_trigger1\n\u2523 jobId\uff1a job1\n\u2523 triggerType\uff1a Furion.Schedule.PeriodSecondsTrigger\n\u2523 assemblyName\uff1a Furion\n\u2523 args\uff1a [5]\n\u2523 description\uff1a\n\u2523 status\uff1a Running\n\u2523 startTime\uff1a\n\u2523 endTime\uff1a\n\u2523 lastRunTime\uff1a 2022/11/20 22:30:41\n\u2523 nextRunTime\uff1a 2022/11/20 22:30:46\n\u2523 numberOfRuns\uff1a 1\n\u2523 maxNumberOfRuns\uff1a 0\n\u2523 numberOfErrors\uff1a 0\n\u2523 maxNumberOfErrors\uff1a 0\n\u2523 numRetries\uff1a 0\n\u2523 retryTimeout\uff1a 1000\n\u2523 startNow\uff1a True\n\u2523 runOnStart\uff1a False\n\u2523 updatedTime\uff1a 2022/11/20 22:30:41\n\u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Trigger \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n")),(0,a.kt)("h2",{id:"2616-\u4f5c\u4e1a\u8ba1\u5212-scheduler-\u53ca\u6784\u5efa\u5668"},"26.1.6 \u4f5c\u4e1a\u8ba1\u5212 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Scheduler")," \u53ca\u6784\u5efa\u5668"),(0,a.kt)("h3",{id:"26161-\u5173\u4e8e\u4f5c\u4e1a\u8ba1\u5212"},"26.1.6.1 \u5173\u4e8e\u4f5c\u4e1a\u8ba1\u5212"),(0,a.kt)("p",null,"\u6240\u8c13\u7684\u4f5c\u4e1a\u8ba1\u5212\uff08",(0,a.kt)("inlineCode",{parentName:"p"},"Scheduler"),"\uff09\u662f\u5c06\u4f5c\u4e1a\u4fe1\u606f(",(0,a.kt)("inlineCode",{parentName:"p"},"JobDetail"),"\uff09\uff0c\u4f5c\u4e1a\u89e6\u53d1\u5668\uff08",(0,a.kt)("inlineCode",{parentName:"p"},"Trigger"),"\uff09\u548c\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f\uff08",(0,a.kt)("inlineCode",{parentName:"p"},"IJob"),"\uff09\u5173\u8054\u8d77\u6765\uff0c\u5e76\u6dfb\u52a0\u5230\u4f5c\u4e1a\u8c03\u5ea6\u5668\u4e2d\u7b49\u5f85\u8c03\u5ea6\u6267\u884c\u3002"),(0,a.kt)("p",null,"\u4f5c\u4e3a\u8ba1\u5212\uff08",(0,a.kt)("inlineCode",{parentName:"p"},"Scheduler"),"\uff09\u7c7b\u578b\u5bf9\u5916\u662f\u4e0d\u516c\u5f00\u7684\uff0c\u4f46\u63d0\u4f9b\u4e86\u5bf9\u5e94\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"IScheduler")," \u63a5\u53e3\u8fdb\u884c\u64cd\u4f5c\u3002"),(0,a.kt)("h3",{id:"26162-\u5173\u4e8e\u4f5c\u4e1a\u8ba1\u5212\u6784\u5efa\u5668"},"26.1.6.2 \u5173\u4e8e\u4f5c\u4e1a\u8ba1\u5212\u6784\u5efa\u5668"),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8ba1\u5212 ",(0,a.kt)("inlineCode",{parentName:"p"},"Scheduler")," \u662f\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u63d0\u4f9b\u8fd0\u884c\u65f6\u7684",(0,a.kt)("strong",{parentName:"p"},"\u53ea\u8bfb\u7c7b\u578b"),"\uff0c\u90a3\u4e48\u6211\u4eec\u8be5\u5982\u4f55\u521b\u5efa\u6216\u53d8\u66f4 ",(0,a.kt)("inlineCode",{parentName:"p"},"Scheduler")," \u5bf9\u8c61\u5462\uff1f"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"SchedulerBuilder")," \u662f\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u63d0\u4f9b\u53ef\u7528\u6765\u751f\u6210\u8fd0\u884c\u65f6 ",(0,a.kt)("inlineCode",{parentName:"p"},"Scheduler")," \u7684\u7c7b\u578b\uff0c\u8fd9\u6837\u505a\u7684\u597d\u5904\u53ef\u907f\u514d\u5916\u90e8\u76f4\u63a5\u4fee\u6539\u8fd0\u884c\u65f6 ",(0,a.kt)("inlineCode",{parentName:"p"},"Scheduler")," \u6570\u636e\uff0c\u8fd8\u80fd\u5b9e\u73b0\u4efb\u4f55\u4fee\u6539\u52a8\u4f5c\u76d1\u542c\uff0c\u4e5f\u80fd\u907f\u514d\u591a\u7ebf\u7a0b\u62a2\u5360\u60c5\u51b5\u3002"),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8c03\u5ea6\u6a21\u5757\u63d0\u4f9b\u4e86\u591a\u79cd\u65b9\u5f0f\u7528\u6765\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"SchedulerBuilder")," \u5bf9\u8c61\u3002"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Create")," \u9759\u6001\u65b9\u6cd5\u521b\u5efa"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,9}",showLineNumbers:!0,"{2,9}":!0},"// \u521b\u5efa\u4f5c\u4e1a\u8ba1\u5212\u5fc5\u987b\u4f20\u5165 JoBuilder \u548c 0\u62161\u4e2a\u4ee5\u4e0a\u7684 TiggerBuilder\nvar schedulerBuilder = SchedulerBuilder.Create(\n JobBuilder.Create()\n , Triggers.PeriodSeconds(5), Triggers.Minutely());\n\n// \u6dfb\u52a0\u5230\u4f5c\u4e1a\u8c03\u5ea6\u5668\u4e2d\nservices.AddSchedule(options =>\n{\n options.AddJob(schedulerBuilder);\n});\n")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"JSON")," \u5b57\u7b26\u4e32\u521b\u5efa"))),(0,a.kt)("p",null,"\u8be5\u65b9\u5f0f\u975e\u5e38\u7075\u6d3b\uff0c\u53ef\u4ece\u914d\u7f6e\u6587\u4ef6\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"JSON")," \u5b57\u7b26\u4e32\uff0c\u6216\u5176\u4ed6\u80fd\u591f\u8fd4\u56de ",(0,a.kt)("inlineCode",{parentName:"p"},"JSON")," \u5b57\u7b26\u4e32\u7684\u5730\u65b9\u521b\u5efa\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,14,42}",showLineNumbers:!0,"{1,3,14,42}":!0},'var schedulerBuilder = SchedulerBuilder.From(@"\n{\n ""jobDetail"": {\n ""jobId"": ""job1"",\n ""groupName"": null,\n ""jobType"": ""ConsoleApp32.MyJob"",\n ""assemblyName"": ""ConsoleApp32"",\n ""description"": null,\n ""concurrent"": true,\n ""includeAnnotations"": false,\n ""properties"": ""{}"",\n ""updatedTime"": ""2022-11-17T09:25:47.0471107+08:00""\n },\n ""triggers"": [\n {\n ""triggerId"": ""job1_trigger1"",\n ""triggerType"": ""Furion.Schedule.PeriodSecondsTrigger"",\n ""assemblyName"": ""Furion"",\n ""args"": ""[5]"",\n ""description"": null,\n ""status"": 2,\n ""startTime"": null,\n ""endTime"": null,\n ""lastRunTime"": ""2022-11-20T18:31:56.6859410+08:00"",\n ""nextRunTime"": ""2022-11-20T18:32:01.7233546+08:00"",\n ""numberOfRuns"": 1,\n ""maxNumberOfRuns"": 0,\n ""numberOfErrors"": 0,\n ""maxNumberOfErrors"": 0,\n ""numRetries"": 0,\n ""retryTimeout"": 1000,\n ""startNow"": true,\n ""runOnStart"": false,\n ""updatedTime"": ""2022-11-20T18:31:56.7233630+08:00""\n }\n ]\n}");\n\n// \u6dfb\u52a0\u5230\u4f5c\u4e1a\u8c03\u5ea6\u5668\u4e2d\nservices.AddSchedule(options =>\n{\n options.AddJob(schedulerBuilder);\n});\n')),(0,a.kt)("p",null,"\u5982\u679c\u4f7f\u7528\u7684\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},".NET7"),"\uff0c\u53ef\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},'"""')," \u907f\u514d\u8f6c\u4e49\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,14}",showLineNumbers:!0,"{1,3,14}":!0},'var schedulerBuilder = SchedulerBuilder.From("""\n{\n "jobDetail": {\n "jobId": "job1",\n "groupName": null,\n "jobType": "Furion.Application.MyJob",\n "assemblyName": "Furion.Application",\n "description": null,\n "concurrent": true,\n "includeAnnotations": false,\n "properties": "{}",\n "updatedTime": "2022-11-17T09:25:47.0471107+08:00"\n },\n "triggers": [\n {\n "triggerId": "job1_trigger1",\n "triggerType": "Furion.Schedule.PeriodSecondsTrigger",\n "assemblyName": "Furion",\n "args": "[5]",\n "description": null,\n "status": 2,\n "startTime": null,\n "endTime": null,\n "lastRunTime": "2022-11-20T18:31:56.6859410+08:00",\n "nextRunTime": "2022-11-20T18:32:01.7233546+08:00",\n "numberOfRuns": 1,\n "maxNumberOfRuns": 0,\n "numberOfErrors": 0,\n "maxNumberOfErrors": 0,\n "numRetries": 0,\n "retryTimeout": 1000,\n "startNow": true,\n "runOnStart": false,\n "updatedTime": "2022-11-20T18:31:56.7233630+08:00"\n }\n ]\n}\n""");\n')),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u5c5e\u6027\u540d\u5339\u914d\u89c4\u5219",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"p"},"CamelCase\uff08\u9a7c\u5cf0\u547d\u540d\u6cd5\uff09"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Pascal\uff08\u5e15\u65af\u5361\u547d\u540d\u6cd5\uff09")," \u547d\u540d\u65b9\u5f0f\u3002"),(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"\u4e0d\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"strong"},"UnderScoreCase\uff08\u4e0b\u5212\u7ebf\u547d\u540d\u6cd5\uff09"))," \uff0c\u5982 ",(0,a.kt)("inlineCode",{parentName:"p"},'"include_annotations": true'))),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8fd8\u53ef\u4ee5\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Clone")," \u9759\u6001\u65b9\u6cd5\u4ece\u4e00\u4e2a ",(0,a.kt)("inlineCode",{parentName:"strong"},"SchedulerBuilder")," \u521b\u5efa"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var schedulerBuilder = SchedulerBuilder.Clone(fromSchedulerBuilder);\n")),(0,a.kt)("admonition",{title:"\u514b\u9686\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u514b\u9686\u64cd\u4f5c\u5c06\u514b\u9686 ",(0,a.kt)("inlineCode",{parentName:"p"},"JobBuilder")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"TriggerBuilders"),"\uff0c\u540c\u65f6 ",(0,a.kt)("inlineCode",{parentName:"p"},"Behavior")," \u4f1a\u88ab\u6807\u8bb0\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"PersistenceBehavior.Appended"),"\u3002")),(0,a.kt)("h3",{id:"26163-\u8bbe\u7f6e\u4f5c\u4e1a\u8ba1\u5212\u6784\u5efa\u5668"},"26.1.6.3 \u8bbe\u7f6e\u4f5c\u4e1a\u8ba1\u5212\u6784\u5efa\u5668"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Scheduler")," \u63d0\u4f9b\u4e86\u591a\u4e2a\u65b9\u6cd5\u64cd\u4f5c ",(0,a.kt)("inlineCode",{parentName:"p"},"JobBuilder")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"TriggerBuilder"),"\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8,11,14,16-17,20,22-23,26,28,30-33,36}",showLineNumbers:!0,"{2,5,8,11,14,16-17,20,22-23,26,28,30-33,36}":!0},'// \u83b7\u53d6\u5f53\u524d\u7684\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668\nvar jobBuilder = schedulerBuilder.GetJobBuilder();\n\n// \u66f4\u65b0\u5f53\u524d\u4f5c\u4e1a\u4fe1\u606f\u6784\u5efa\u5668\nschedulerBuilder.UpdateJobBuilder(jobBuilder.SetDescription("\u65b0\u7684\u63cf\u8ff0"));\n\n// \u83b7\u53d6\u6240\u6709\u7684\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\u96c6\u5408\nvar triggerBuilders = schedulerBuilder.GetTriggerBuilders();\n\n// \u83b7\u53d6\u5355\u4e2a\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nvar triggerBuilder = schedulerBuilder.GetTriggerBuilder("job1_trigger1");\n\n// \u65b0\u589e\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nschedulerBuilder.AddTriggerBuilder(Triggers.Minutely());\n// \u4e5f\u652f\u6301\u94fe\u5f0f\u6dfb\u52a0\u6216\u6dfb\u52a0\u591a\u4e2a\nschedulerBuilder.AddTriggerBuilder(Triggers.Minutely()).AddTriggerBuilder(Trigger.Hourly());\nschedulerBuilder.AddTriggerBuilders(Trigger.Minutely(), Trigger.Hourly());\n\n// \u66f4\u65b0\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nschedulerBuilder.UpdateTriggerBuilder(triggerBuilder.SetDescription("\u65b0\u7684\u89e6\u53d1\u5668\u63cf\u8ff0"));\n// \u4e5f\u652f\u6301\u94fe\u5f0f\u66f4\u65b0\u6216\u66f4\u65b0\u591a\u4e2a\nschedulerBuilder.UpdateTriggerBuilder(triggerBuilder1).UpdateTriggerBuilder(triggerBuilder2);\nschedulerBuilder.UpdateTriggerBuilders(triggerBuilder1, triggerBuilder2);\n\n// \u5220\u9664\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nschedulerBuilder.RemoveTriggerBuilder(triggerBuilder);\n// \u53ef\u4ee5\u6839\u636e\u4f5c\u4e1a\u89e6\u53d1\u5668 Id \u5220\u9664\nschedulerBuilder.RemoveTriggerBuilder("job1_trigger1", out var builder);\n// \u4e5f\u652f\u6301\u94fe\u5f0f\u5220\u9664\u6216\u5220\u9664\u591a\u4e2a\nschedulerBuilder.RemoveTriggerBuilder(triggerBuilder1).RemoveTriggerBuilder(triggerBuilder2);\nschedulerBuilder.RemoveTriggerBuilders(triggerBuilder1, triggerBuilder2);\nschedulerBuilder.RemoveTriggerBuilder("job1_trigger1", out var triggerBuilder).RemoveTriggerBuilder("job1_trigger2", out _);\nschedulerBuilder.RemoveTriggerBuilder("job1_trigger1", "job1_trigger2");\n\n// \u6e05\u7a7a\u6240\u6709\u4f5c\u4e1a\u89e6\u53d1\u5668\u6784\u5efa\u5668\nschedulerBuilder.ClearTriggerBuilders();\n')),(0,a.kt)("p",null,"\u9664\u4e86\u63d0\u4f9b\u4e0a\u9762\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"CURD")," \u64cd\u4f5c\u4ee5\u5916\uff0c\u8fd8\u63d0\u4f9b\u4e86\u53ef\u4ee5\u66f4\u6539 ",(0,a.kt)("inlineCode",{parentName:"p"},"SchedulerBuilder")," \u7684",(0,a.kt)("strong",{parentName:"p"},"\u6301\u4e45\u5316\u884c\u4e3a"),"\u7684\u65b9\u6cd5\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u6807\u8bb0\u5f53\u524d\u4f5c\u4e1a\u8ba1\u5212\u6784\u5efa\u5668\u4e3a\u65b0\u589e\u72b6\u6001\nschedulerBuilder.Appended(); // \u9ed8\u8ba4\u503c\n// \u6807\u8bb0\u5f53\u524d\u4f5c\u4e1a\u8ba1\u5212\u6784\u5efa\u5668\u4e3a\u66f4\u65b0\u72b6\u6001\nschedulerBuilder.Updated();\n// \u6807\u8bb0\u5f53\u524d\u4f5c\u4e1a\u8ba1\u5212\u6784\u5efa\u5668\u4e3a\u5220\u9664\u72b6\u6001\nschedulerBuilder.Removed();\n")),(0,a.kt)("h3",{id:"26164-\u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa"},"26.1.6.4 \u591a\u79cd\u683c\u5f0f\u5b57\u7b26\u4e32\u8f93\u51fa"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Scheduler")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"SchedulerBuilder")," \u90fd\u63d0\u4f9b\u4e86\u591a\u79cd\u5c06\u81ea\u8eab\u8f6c\u6362\u6210\u7279\u5b9a\u683c\u5f0f\u7684\u5b57\u7b26\u4e32\u3002"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u8f6c\u6362\u6210 ",(0,a.kt)("inlineCode",{parentName:"strong"},"JSON")," \u5b57\u7b26\u4e32"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var json = schedulerBuilder.ConvertToJSON();\n")),(0,a.kt)("p",null,"\u5b57\u7b26\u4e32\u6253\u5370\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2,13}",showLineNumbers:!0,"{2,13}":!0},'{\n "jobDetail": {\n "jobId": "job1",\n "groupName": null,\n "jobType": "Furion.Application.MyJob",\n "assemblyName": "Furion.Application",\n "description": null,\n "concurrent": true,\n "includeAnnotations": false,\n "properties": "{}",\n "updatedTime": "2022-11-17T09:25:47.0471107+08:00"\n },\n "triggers": [\n {\n "triggerId": "job1_trigger1",\n "jobId": null,\n "triggerType": "Furion.Schedule.PeriodSecondsTrigger",\n "assemblyName": "Furion",\n "args": "[5]",\n "description": null,\n "status": 2,\n "startTime": null,\n "endTime": null,\n "lastRunTime": "2022-11-20T18:31:56.6859410+08:00",\n "nextRunTime": "2022-11-20T18:32:01.7233546+08:00",\n "numberOfRuns": 1,\n "maxNumberOfRuns": 0,\n "numberOfErrors": 0,\n "maxNumberOfErrors": 0,\n "numRetries": 0,\n "retryTimeout": 1000,\n "startNow": true,\n "runOnStart": false,\n "updatedTime": "2022-11-20T18:31:56.7233630+08:00"\n }\n ]\n}\n')),(0,a.kt)("h2",{id:"2617-\u4f5c\u4e1a\u8c03\u5ea6\u5668-scheduleoptionsbuilder-\u914d\u7f6e\u9009\u9879"},"26.1.7 \u4f5c\u4e1a\u8c03\u5ea6\u5668 ",(0,a.kt)("inlineCode",{parentName:"h2"},"ScheduleOptionsBuilder")," \u914d\u7f6e\u9009\u9879"),(0,a.kt)("h3",{id:"26171-\u5173\u4e8e-scheduleoptionsbuilder"},"26.1.7.1 \u5173\u4e8e ",(0,a.kt)("inlineCode",{parentName:"h3"},"ScheduleOptionsBuilder")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ScheduleOptionsBuilder")," \u914d\u7f6e\u9009\u9879\u4e3b\u8981\u662f\u7528\u6765\u521d\u59cb\u5316\u8c03\u5ea6\u4f5c\u4e1a\u670d\u52a1\u548c\u4f5c\u4e1a\u8c03\u5ea6\u5668\u76f8\u5173\u914d\u7f6e\u7684\u3002\u53ea\u4f5c\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"services.AddSchedule")," \u670d\u52a1\u6ce8\u518c\u7684\u914d\u7f6e\u53c2\u6570\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,8-9}",showLineNumbers:!0,"{2,8-9}":!0},"// \u901a\u8fc7\u59d4\u6258\u7684\u65b9\u5f0f\u914d\u7f6e\nservices.AddSchedule(options =>\n{\n // options \u7c7b\u578b\u4e3a ScheduleOptionsBuilder\n});\n\n// \u81ea\u884c\u521b\u5efa\u5bf9\u8c61\u5b9e\u4f8b\u65b9\u5f0f\u914d\u7f6e\nvar scheduleOptionsBuilder = new ScheduleOptionsBuilder();\nservices.AddSchedule(scheduleOptionsBuilder);\n")),(0,a.kt)("h3",{id:"26172-scheduleoptionsbuilder-\u5185\u7f6e\u5c5e\u6027\u548c\u65b9\u6cd5"},"26.1.7.2 ",(0,a.kt)("inlineCode",{parentName:"h3"},"ScheduleOptionsBuilder")," \u5185\u7f6e\u5c5e\u6027\u548c\u65b9\u6cd5"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5185\u7f6e\u5c5e\u6027\u914d\u7f6e"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,7,10}",showLineNumbers:!0,"{4,7,10}":!0},"services.AddSchedule(options =>\n{\n // \u662f\u5426\u4f7f\u7528 UTC \u65f6\u95f4\uff0c\u8be5\u914d\u7f6e\u4e3b\u8981\u7528\u6765\u4f5c\u4e3a\u4f5c\u4e1a\u8c03\u5ea6\u5668\u68c0\u67e5\u65f6\u95f4\u683c\u5f0f\u7684\u4f9d\u636e\n options.UseUtcTimestamp = false;\n\n // \u662f\u5426\u8f93\u51fa\u4f5c\u4e1a\u8c03\u5ea6\u5668\u65e5\u5fd7\n options.LogEnabled = true;\n\n // \u5b9a\u4e49\u672a\u6355\u83b7\u7684\u5f02\u5e38\uff0c\u901a\u5e38\u662f Task \u5f02\u5e38\n options.UnobservedTaskExceptionHandler = (obj, args) =>\n {\n };\n});\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5185\u7f6e\u65b9\u6cd5\u914d\u7f6e"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4-9,12,15,18}",showLineNumbers:!0,"{4-9,12,15,18}":!0},'services.AddSchedule(options =>\n{\n // \u6dfb\u52a0\u4f5c\u4e1a\n options.AddJob(schedulerBuilder);\n options.AddJob(jobBuilder, triggerBuilder, ...);\n options.AddJob(triggerBuilder, ...);\n options.AddJob("\u4f5c\u4e1a Id", triggerBuilder, ...);\n options.AddJob("\u4f5c\u4e1a Id", concurrent: true, triggerBuilder, ...);\n options.AddJob(concurrent: true, triggerBuilder, ...);\n\n // \u6dfb\u52a0\u4f5c\u4e1a\u6267\u884c\u76d1\u89c6\u5668\n options.AddMonitor();\n\n // \u6dfb\u52a0\u4f5c\u4e1a\u6267\u884c\u5668\n options.AddExecutor();\n\n // \u6dfb\u52a0\u4f5c\u4e1a\u6301\u4e45\u5316\u5668\n options.AddPersistence();\n});\n')),(0,a.kt)("h2",{id:"2618-\u4f5c\u4e1a\u76d1\u89c6\u5668-ijobmonitor"},"26.1.8 \u4f5c\u4e1a\u76d1\u89c6\u5668 ",(0,a.kt)("inlineCode",{parentName:"h2"},"IJobMonitor")),(0,a.kt)("p",null,"\u8c03\u5ea6\u4f5c\u4e1a\u670d\u52a1\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"IJobMonitor")," \u76d1\u89c6\u5668\u63a5\u53e3\uff0c\u5b9e\u73b0\u8be5\u63a5\u53e3\u53ef\u4ee5\u76d1\u89c6\u6240\u6709\u4f5c\u4e1a\u5904\u7406\u7a0b\u5e8f\u6267\u884c\u4e8b\u4ef6\uff0c\u5305\u62ec ",(0,a.kt)("inlineCode",{parentName:"p"},"\u6267\u884c\u4e4b\u524d\u3001\u6267\u884c\u4e4b\u540e\uff0c\u6267\u884c\u5f02\u5e38"),"\u3002"),(0,a.kt)("p",null,"\u5982\u6dfb\u52a0 ",(0,a.kt)("inlineCode",{parentName:"p"},"YourJobMonitor"),"\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,9,15}",showLineNumbers:!0,"":!0,"{1,9,15}":!0},'public class YourJobMonitor : IJobMonitor\n{\n private readonly ILogger _logger;\n public YourJobMonitor(ILogger logger)\n {\n _logger = logger;\n }\n\n public Task OnExecutingAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n _logger.LogInformation("\u6267\u884c\u4e4b\u524d\uff1a{JobId} {TriggerId}", context.JobId, context.TriggerId);\n return Task.CompletedTask;\n }\n\n public Task OnExecutedAsync(JobExecutedContext context, CancellationToken stoppingToken)\n {\n _logger.LogInformation("\u6267\u884c\u4e4b\u540e\uff1a{JobId} {TriggerId}", context.JobId, context.TriggerId);\n\n if (context.Exception != null)\n {\n _logger.LogError(context.Exception, "\u6267\u884c\u51fa\u9519\u5566\uff1a{JobId} {TriggerId}", context.JobId, context.TriggerId);\n }\n\n return Task.CompletedTask;\n }\n}\n')),(0,a.kt)("p",null,"\u6700\u540e\uff0c\u5728\u6ce8\u518c ",(0,a.kt)("inlineCode",{parentName:"p"},"Schedule")," \u670d\u52a1\u4e2d\u6ce8\u518c ",(0,a.kt)("inlineCode",{parentName:"p"},"YourJobMonitor"),"\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},"services.AddSchedule(options =>\n{\n // \u6dfb\u52a0\u4f5c\u4e1a\u6267\u884c\u76d1\u89c6\u5668\n builder.AddMonitor();\n});\n")),(0,a.kt)("p",null,"\u6267\u884c\u7ed3\u679c\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,6}",showLineNumbers:!0,"{2,6}":!0},"info: 2022-11-21 13:41:49.2144716 +08:00 \u661f\u671f\u4e00 L ConsoleApp32.YourJobMonitor[0] #9\n \u6267\u884c\u4e4b\u524d\uff1ajob1 job1_trigger1\ninfo: 2022-11-21 13:41:49.2216598 +08:00 \u661f\u671f\u4e00 L ConsoleApp32.MyJob[0] #9\n job1 job1_trigger1 2022/11/21 13:41:49 5000ms\ninfo: 2022-11-21 13:41:49.2249096 +08:00 \u661f\u671f\u4e00 L ConsoleApp32.YourJobMonitor[0] #9\n \u6267\u884c\u4e4b\u540e\uff1ajob1 job1_trigger1\n")),(0,a.kt)("h3",{id:"26181-\u5173\u4e8e\u53c2\u6570-jobexecutioncontext"},"26.1.8.1 \u5173\u4e8e\u53c2\u6570 ",(0,a.kt)("inlineCode",{parentName:"h3"},"JobExecutionContext")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"IJobMonitor")," \u63d0\u4f9b\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"OnExecutingAsync")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"OnExecutedAsync")," \u63a5\u53e3\u65b9\u6cd5\u90fd\u5305\u542b\u4e00\u4e2a ",(0,a.kt)("inlineCode",{parentName:"p"},"context")," \u53c2\u6570\uff0c\u524d\u8005\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"JobExecutingContext"),"\uff0c\u540e\u8005\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"JobExecutedContext"),"\uff0c\u5b83\u4eec\u90fd\u6709\u4e00\u4e2a\u5171\u540c\u7684\u57fa\u7c7b ",(0,a.kt)("inlineCode",{parentName:"p"},"JobExecutionContext"),"\u3002"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"JobExecutionContext")," \u63d0\u4f9b\u4e86\u4ee5\u4e0b\u516c\u5171\u5c5e\u6027\u548c\u516c\u5171\u65b9\u6cd5:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},(0,a.kt)("inlineCode",{parentName:"strong"},"JobExecutionContext")," \u5c5e\u6027\u5217\u8868"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"JobId"),"\uff1a\u4f5c\u4e1a ",(0,a.kt)("inlineCode",{parentName:"li"},"Id")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"TriggerId"),"\uff1a\u5f53\u524d\u89e6\u53d1\u5668 ",(0,a.kt)("inlineCode",{parentName:"li"},"Id")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"JobDetail"),"\uff1a\u4f5c\u4e1a\u4fe1\u606f"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Trigger"),"\uff1a\u4f5c\u4e1a\u89e6\u53d1\u5668"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"OccurrenceTime"),"\uff1a\u8c03\u5ea6\u5668\u68c0\u67e5\u65f6\u95f4\uff0c\u6700\u51c6\u786e\u7684\u8bb0\u5f55\u65f6\u95f4"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},(0,a.kt)("inlineCode",{parentName:"strong"},"JobExecutionContext")," \u65b9\u6cd5\u5217\u8868"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},".ConvertToJSON(naming)"),"\uff1a\u5c06\u4f5c\u4e1a\u8ba1\u5212\u8f6c\u6362\u6210 ",(0,a.kt)("inlineCode",{parentName:"li"},"JSON")," \u5b57\u7b26\u4e32")))),(0,a.kt)("p",null),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},(0,a.kt)("inlineCode",{parentName:"strong"},"JobExecutingContext"))," \u5728\u57fa\u7c7b\u57fa\u7840\u4e0a\u62d3\u5c55\u4e86 ",(0,a.kt)("inlineCode",{parentName:"li"},"ExecutingTime")," \u5c5e\u6027\uff1a",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ExecutingTime"),"\uff1a\u6267\u884c\u524d\u65f6\u95f4"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},(0,a.kt)("inlineCode",{parentName:"strong"},"JobExecutedContext"))," \u5219\u5728\u57fa\u7c7b\u57fa\u7840\u4e0a\u62d3\u5c55\u4e86 ",(0,a.kt)("inlineCode",{parentName:"li"},"ExecutedTime")," \u548c ",(0,a.kt)("inlineCode",{parentName:"li"},"Exception")," \u5c5e\u6027\uff1a",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ExecutedTime"),"\uff1a\u6267\u884c\u540e\u65f6\u95f4"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Exception"),"\uff1a\u6267\u884c\u5f02\u5e38")))),(0,a.kt)("h2",{id:"2619-\u4f5c\u4e1a\u6267\u884c\u5668-ijobexecutor"},"26.1.9 \u4f5c\u4e1a\u6267\u884c\u5668 ",(0,a.kt)("inlineCode",{parentName:"h2"},"IJobExecutor")),(0,a.kt)("p",null,"\u8c03\u5ea6\u4f5c\u4e1a\u670d\u52a1\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"IJobExecutor")," \u6267\u884c\u5668\u63a5\u53e3\uff0c\u53ef\u4ee5\u8ba9\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\u4f5c\u4e1a\u5904\u7406\u51fd\u6570\u6267\u884c\u7b56\u7565\uff0c\u5982 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u8d85\u65f6\u63a7\u5236\uff0c\u5931\u8d25\u91cd\u8bd5\u3001\u7194\u65ad\u7b49\u7b49"),"\u3002"),(0,a.kt)("p",null,"\u5982\u6dfb\u52a0 ",(0,a.kt)("inlineCode",{parentName:"p"},"YourJobExecutor"),"\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,6-9}",showLineNumbers:!0,"":!0,"{1,3,6-9}":!0},"public class YourJobExecutor : IJobExecutor\n{\n public async Task ExecuteAsync(JobExecutingContext context, IJob jobHandler, CancellationToken stoppingToken)\n {\n // \u5b9e\u73b0\u5931\u8d25\u91cd\u8bd5\u7b56\u7565\uff0c\u5982\u5931\u8d25\u91cd\u8bd5 3 \u6b21\n await Retry.InvokeAsync(async () =>\n {\n await jobHandler.ExecuteAsync(context, stoppingToken);\n }, 3, 1000);\n }\n}\n")),(0,a.kt)("p",null,"\u63a5\u7740\u6a21\u62df ",(0,a.kt)("inlineCode",{parentName:"p"},"MyJob")," \u6267\u884c\u51fa\u9519\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,14}",showLineNumbers:!0,"{1,14}":!0},'public class MyJob : IJob\n{\n private readonly ILogger _logger;\n\n public MyJob(ILogger logger)\n {\n _logger = logger;\n }\n\n public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)\n {\n _logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");\n\n throw new Exception("\u6a21\u62df\u51fa\u9519");\n\n await Task.CompletedTask;\n }\n}\n')),(0,a.kt)("p",null,"\u6700\u540e\uff0c\u5728\u6ce8\u518c ",(0,a.kt)("inlineCode",{parentName:"p"},"Schedule")," \u670d\u52a1\u4e2d\u6ce8\u518c ",(0,a.kt)("inlineCode",{parentName:"p"},"YourJobExecutor"),"\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5}",showLineNumbers:!0,"":!0,"{5}":!0},"services.AddSchedule(options =>\n{\n options.AddMonitor();\n // \u6dfb\u52a0\u4f5c\u4e1a\u6267\u884c\u5668\n options.AddExecutor();\n options.AddJob(Triggers.PeriodSeconds(10));\n});\n")),(0,a.kt)("p",null,"\u6267\u884c\u7ed3\u679c\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,5-10,24,26}",showLineNumbers:!0,"{2,5-10,24,26}":!0},"info: 2022-11-21 14:10:33.3382344 +08:00 \u661f\u671f\u4e00 L ConsoleApp32.YourJobMonitor[0] #14\n \u6267\u884c\u4e4b\u524d\uff1ajob1 job1_trigger1\ninfo: 2022-11-21 14:10:33.3447855 +08:00 \u661f\u671f\u4e00 L ConsoleApp32.MyJob[0] #14\n job1 job1_trigger1 2022/11/21 14:10:33 10000ms\ninfo: 2022-11-21 14:10:34.4217342 +08:00 \u661f\u671f\u4e00 L ConsoleApp32.MyJob[0] #14\n job1 job1_trigger1 2022/11/21 14:10:33 10000ms\ninfo: 2022-11-21 14:10:35.4952165 +08:00 \u661f\u671f\u4e00 L ConsoleApp32.MyJob[0] #14\n job1 job1_trigger1 2022/11/21 14:10:33 10000ms\ninfo: 2022-11-21 14:10:36.5719440 +08:00 \u661f\u671f\u4e00 L ConsoleApp32.MyJob[0] #14\n job1 job1_trigger1 2022/11/21 14:10:33 10000ms\nfail: 2022-11-21 14:10:36.7388113 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #14\n Error occurred executing job1 job1_trigger1< 10000ms>.\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n System.Exception: \u6a21\u62df\u51fa\u9519\n at ConsoleApp32.MyJob.ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\MyJob.cs:line 19\n at ConsoleApp32.YourJobExecutor.<>c__DisplayClass0_0.<b__0>d.MoveNext() in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\YourJobExecutor.cs:line 18\n --- End of stack trace from previous location ---\n at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\FriendlyException\\Retry.cs:line 84\n at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\FriendlyException\\Retry.cs:line 95\n at ConsoleApp32.YourJobExecutor.ExecuteAsync(JobExecutingContext context, IJob jobHandler, CancellationToken stoppingToken) in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\YourJobExecutor.cs:line 16\n at Furion.Schedule.ScheduleHostedService.<>c__DisplayClass16_2.<b__1>d.MoveNext() in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\Schedule\\HostedServices\\ScheduleHostedService.cs:line 188\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++\ninfo: 2022-11-21 14:10:36.7413303 +08:00 \u661f\u671f\u4e00 L ConsoleApp32.YourJobMonitor[0] #14\n \u6267\u884c\u4e4b\u540e\uff1ajob1 job1_trigger1\nfail: 2022-11-21 14:10:36.7446968 +08:00 \u661f\u671f\u4e00 L ConsoleApp32.YourJobMonitor[0] #14\n \u6267\u884c\u51fa\u9519\u5566\uff1ajob1 job1_trigger1\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n System.InvalidOperationException: Error occurred executing job1 job1_trigger1< 10000ms>.\n ---\x3e System.Exception: \u6a21\u62df\u51fa\u9519\n at ConsoleApp32.MyJob.ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\MyJob.cs:line 19\n at ConsoleApp32.YourJobExecutor.<>c__DisplayClass0_0.<b__0>d.MoveNext() in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\YourJobExecutor.cs:line 18\n --- End of stack trace from previous location ---\n at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\FriendlyException\\Retry.cs:line 84\n at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\FriendlyException\\Retry.cs:line 95\n at ConsoleApp32.YourJobExecutor.ExecuteAsync(JobExecutingContext context, IJob jobHandler, CancellationToken stoppingToken) in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\YourJobExecutor.cs:line 16\n at Furion.Schedule.ScheduleHostedService.<>c__DisplayClass16_2.<b__1>d.MoveNext() in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\Schedule\\HostedServices\\ScheduleHostedService.cs:line 188\n --- End of inner exception stack trace ---\n ++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n")),(0,a.kt)("h2",{id:"26110-\u4f5c\u4e1a\u8ba1\u5212\u5de5\u5382-ischedulerfactory"},"26.1.10 \u4f5c\u4e1a\u8ba1\u5212\u5de5\u5382 ",(0,a.kt)("inlineCode",{parentName:"h2"},"ISchedulerFactory")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8ba1\u5212\u5de5\u5382\u63d0\u4f9b\u4e86\u7a0b\u5e8f\u8fd0\u884c\u65f6\u64cd\u4f5c\u4f5c\u4e1a\u8c03\u5ea6\u5668\uff0c\u4f5c\u4e1a\u8ba1\u5212\u7b49\u8bf8\u591a\u65b9\u6cd5\u3002"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"ISchedulerFactory")," \u88ab\u6ce8\u518c\u4e3a\u5355\u4f8b\u670d\u52a1\uff0c\u5141\u8bb8\u5728\u4efb\u4f55\u53ef\u4f9d\u8d56\u6ce8\u5165\u7684\u670d\u52a1\u83b7\u53d6\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,9}",showLineNumbers:!0,"{4,9}":!0},"public class YourService: IYourService\n{\n private readonly ISchedulerFactory _schedulerFactory;\n public YourService(ISchedulerFactory schedulerFactory)\n {\n _schedulerFactory = schedulerFactory;\n }\n\n public void SomeMethod([FromServices]ISchedulerFactory schedulerFactory)\n {\n }\n}\n")),(0,a.kt)("h3",{id:"261101-\u67e5\u627e\u6240\u6709\u4f5c\u4e1a"},"26.1.10.1 \u67e5\u627e\u6240\u6709\u4f5c\u4e1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8-9}",showLineNumbers:!0,"{2,5,8-9}":!0},'// \u8fd4\u56de\u7684\u662f IScheduler \u96c6\u5408\uff0c\u4e0d\u80fd\u8bbf\u95ee JobDetail \u548c Triggers \u5c5e\u6027\nvar jobs = _schedulerFactory.GetJobs();\n\n// \u8fd4\u56de\u7684\u662f SchedulerModel \u96c6\u5408\uff0c\u53ef\u4ee5\u8bbf\u95ee JobDetail \u548c Triggers \u5c5e\u6027\nvar jobsOfModels = _schedulerFactory.GetJobsOfModels();\n\n// \u8fd8\u53ef\u4ee5\u901a\u8fc7 group \u67e5\u627e\nvar jobs = _schedulerFactory.GetJobs("group1");\nvar jobsOfModels = _schedulerFactory.GetJobsOfModels("group1");\n')),(0,a.kt)("h3",{id:"261102-\u67e5\u627e\u4e0b\u4e00\u4e2a\u89e6\u53d1\u7684\u4f5c\u4e1a"},"26.1.10.2 \u67e5\u627e\u4e0b\u4e00\u4e2a\u89e6\u53d1\u7684\u4f5c\u4e1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8,9}",showLineNumbers:!0,"{2,5,8,9}":!0},'// \u8fd4\u56de\u7684\u662f IScheduler \u96c6\u5408\uff0c\u4e0d\u80fd\u8bbf\u95ee JobDetail \u548c Triggers \u5c5e\u6027\nvar nextRunJobs = _schedulerFactory.GetNextRunJobs(DateTime.Now);\n\n// \u8fd4\u56de\u7684\u662f SchedulerModel \u96c6\u5408\uff0c\u53ef\u4ee5\u8bbf\u95ee JobDetail \u548c Triggers \u5c5e\u6027\nvar nextRunJobsOfModels = _schedulerFactory.GetNextRunJobsOfModels(DateTime.Now);\n\n// \u8fd8\u53ef\u4ee5\u901a\u8fc7 group \u67e5\u627e\nvar nextRunJobs = _schedulerFactory.GetNextRunJobs("group1");\nvar nextRunJobsOfModels = _schedulerFactory.GetNextRunJobsOfModels("group1");\n')),(0,a.kt)("h3",{id:"261103-\u83b7\u53d6\u5355\u4e2a\u4f5c\u4e1a"},"26.1.10.3 \u83b7\u53d6\u5355\u4e2a\u4f5c\u4e1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},'// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u5b58\u5728\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.NotFound\nvar scheduleResult = _schedulerFactory.TryGetJob("job1", out var scheduler);\n\n// \u8fd4\u56de IScheduler \u7c7b\u578b\nvar scheduler = _schedulerFactory.GetJob("job1");\n')),(0,a.kt)("h3",{id:"261104-\u6dfb\u52a0\u4f5c\u4e1a"},"26.1.10.4 \u6dfb\u52a0\u4f5c\u4e1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"SchedulerBuilder")," \u65b9\u5f0f"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},"// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild\nvar scheduleResult = _schedulerFactory.TryAddJob(schedulerBuilder, out var scheduler);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\n_schedulerFactory.AddJob(schedulerBuilder);\n")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u6dfb\u52a0\u6210\u529f\u6216\u5931\u8d25\u5206\u522b\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4}",showLineNumbers:!0,"{2,4}":!0},"info: 2022-11-21 16:24:03.5834532 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The Scheduler of successfully added to the schedule.\nwarn: 2022-11-21 16:24:03.5876747 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The JobId of already exists.\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"JobBuilder")," + ",(0,a.kt)("inlineCode",{parentName:"strong"},"TriggerBuilder")," \u65b9\u5f0f"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,7}",showLineNumbers:!0,"{2,7}":!0},"// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild\nvar schedulerResult = _schedulerFactory.TryAddJob(JobBuilder.Create()\n , new[] { Triggers.PeriodSeconds(10) }\n , out var scheduler);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\n_schedulerFactory.AddJob(JobBuilder.Create()\n , Triggers.PeriodSeconds(10));\n")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u6dfb\u52a0\u6210\u529f\u6216\u5931\u8d25\u5206\u522b\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4}",showLineNumbers:!0,"{2,4}":!0},"info: 2022-11-21 16:24:03.5834532 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The Scheduler of successfully added to the schedule.\nwarn: 2022-11-21 16:24:03.5876747 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The JobId of already exists.\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"IJob")," \u6cdb\u578b\u65b9\u5f0f"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,6}",showLineNumbers:!0,"{2,6}":!0},"// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild\nvar schedulerResult = _schedulerFactory.TryAddJob(new[] { Triggers.PeriodSeconds(10) }\n , out var scheduler);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\n_schedulerFactory.AddJob(Triggers.PeriodSeconds(10));\n")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u6dfb\u52a0\u6210\u529f\u6216\u5931\u8d25\u5206\u522b\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4}",showLineNumbers:!0,"{2,4}":!0},"info: 2022-11-21 16:24:03.5834532 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The Scheduler of successfully added to the schedule.\nwarn: 2022-11-21 16:24:03.5876747 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The JobId of already exists.\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"IJob")," \u6cdb\u578b + ",(0,a.kt)("inlineCode",{parentName:"strong"},"JobId")," \u65b9\u5f0f"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,6}",showLineNumbers:!0,"{2,6}":!0},'// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild\nvar schedulerResult = _schedulerFactory.TryAddJob("job1", new[] { Triggers.PeriodSeconds(10) }\n , out var scheduler);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\n_schedulerFactory.AddJob("job1", Triggers.PeriodSeconds(10));\n')),(0,a.kt)("p",null,"\u4f5c\u4e1a\u6dfb\u52a0\u6210\u529f\u6216\u5931\u8d25\u5206\u522b\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4}",showLineNumbers:!0,"{2,4}":!0},"info: 2022-11-21 16:24:03.5834532 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The Scheduler of successfully added to the schedule.\nwarn: 2022-11-21 16:24:03.5876747 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The JobId of already exists.\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"IJob")," \u6cdb\u578b + ",(0,a.kt)("inlineCode",{parentName:"strong"},"JobId")," + ",(0,a.kt)("inlineCode",{parentName:"strong"},"Concurrent")," \u65b9\u5f0f"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,7}",showLineNumbers:!0,"{2,7}":!0},'// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild\nvar schedulerResult = _schedulerFactory.TryAddJob("job1", concurrent: true\n , new[] { Triggers.PeriodSeconds(10) }\n , out var scheduler);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\n_schedulerFactory.AddJob("job1", concurrent: true\n , Triggers.PeriodSeconds(10));\n')),(0,a.kt)("p",null,"\u4f5c\u4e1a\u6dfb\u52a0\u6210\u529f\u6216\u5931\u8d25\u5206\u522b\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4}",showLineNumbers:!0,"{2,4}":!0},"info: 2022-11-21 16:24:03.5834532 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The Scheduler of successfully added to the schedule.\nwarn: 2022-11-21 16:24:03.5876747 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The JobId of already exists.\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"IJob")," \u6cdb\u578b + ",(0,a.kt)("inlineCode",{parentName:"strong"},"Concurrent")," \u65b9\u5f0f"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,7}",showLineNumbers:!0,"{2,7}":!0},"// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild\nvar schedulerResult = _schedulerFactory.TryAddJob(concurrent: true\n , new[] { Triggers.PeriodSeconds(10) }\n , out var scheduler);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\n_schedulerFactory.AddJob(concurrent: true\n , Triggers.PeriodSeconds(10));\n")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u6dfb\u52a0\u6210\u529f\u6216\u5931\u8d25\u5206\u522b\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4}",showLineNumbers:!0,"{2,4}":!0},"info: 2022-11-21 16:24:03.5834532 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The Scheduler of successfully added to the schedule.\nwarn: 2022-11-21 16:24:03.5876747 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #8\n The JobId of already exists.\n")),(0,a.kt)("h3",{id:"261105-\u66f4\u65b0\u4f5c\u4e1a"},"26.1.10.5 \u66f4\u65b0\u4f5c\u4e1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"SchedulerBuilder")," \u65b9\u5f0f"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},"// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild\nvar scheduleResult = _schedulerFactory.TryUpdateJob(schedulerBuilder, out var scheduler);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\n_schedulerFactory.UpdateJob(schedulerBuilder);\n")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u66f4\u65b0\u6210\u529f\u6216\u5931\u8d25\u5206\u522b\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6}",showLineNumbers:!0,"{2,4,6}":!0},"info: 2022-11-21 18:13:13.0098096 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #14\n The Scheduler of successfully updated to the schedule.\nwarn: 2022-11-21 18:13:18.0098096 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #14\n The Scheduler of is not found.\nwarn: 2022-11-21 18:13:23.0098096 +08:00 \u661f\u671f\u4e00 L System.Logging.ScheduleService[0] #14\n The Scheduler of update failed.\n")),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u66f4\u65b0\u4f5c\u4e1a\u7684\u80cc\u540e\u884c\u4e3a",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u66f4\u65b0\u4f5c\u4e1a\u9700\u8981\u4f20\u9012 ",(0,a.kt)("inlineCode",{parentName:"p"},"SchedulerBuilder")," \u5bf9\u8c61\uff0c\u8fd9\u4e2a\u5bf9\u8c61\u53ef\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"GetJob(jobId)")," \u83b7\u53d6\uff0c\u5982\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var schedulerBuilder = _schedulerFactory.GetJob("jobId")?.GetBuilder();\n')),(0,a.kt)("p",{parentName:"admonition"},"\u6b64\u65f6\u5b83\u7684\u5185\u90e8 ",(0,a.kt)("inlineCode",{parentName:"p"},"Behavior")," \u5c5e\u6027\u88ab\u6807\u8bb0\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"PersistenceBehavior.Updated"),"\uff0c\u4e5f\u5c31\u662f\u66f4\u65b0\u72b6\u6001\uff0c\u90a3\u4e48\u5bf9\u4e8e\u8fd9\u4e2a\u6784\u5efa\u5668\u7684\u4efb\u4f55\u64cd\u4f5c\u90fd\u4f1a\u6807\u8bb0\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"\u66f4\u65b0")," \u64cd\u4f5c\u3002"),(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},".Appended()")," \u6216 ",(0,a.kt)("inlineCode",{parentName:"p"},".Removed()")," \u65b9\u6cd5\u6807\u8bb0\u4e4b\u540e\uff0c\u90a3\u4e48\u5b83\u7684\u64cd\u4f5c\u884c\u4e3a\u5c31\u53d1\u751f\u53d8\u5316\u4e86\u3002"),(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5982\u679c\u88ab\u6807\u8bb0\u4e3a ",(0,a.kt)("inlineCode",{parentName:"strong"},".Appended()")),"\uff0c\u5982\uff1a")),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"schedulerBuilder.Appended();\n")),(0,a.kt)("p",{parentName:"admonition"},"\u90a3\u4e48\u5b83\u5c06\u8fdb\u884c ",(0,a.kt)("inlineCode",{parentName:"p"},"\u65b0\u589e")," \u64cd\u4f5c\uff0c\u4e5f\u5c31\u662f\u5185\u90e8\u4f1a\u8c03\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"TryAddJob(schedulerBuilder)")," \u64cd\u4f5c\u3002"),(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5982\u679c\u88ab\u6807\u8bb0\u4e3a ",(0,a.kt)("inlineCode",{parentName:"strong"},".Removed()")),"\uff0c\u5982\uff1a")),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"schedulerBuilder.Removed();\n")),(0,a.kt)("p",{parentName:"admonition"},"\u90a3\u4e48\u5b83\u5c06\u8fdb\u884c ",(0,a.kt)("inlineCode",{parentName:"p"},"\u5220\u9664")," \u64cd\u4f5c\uff0c\u4e5f\u5c31\u662f\u5185\u90e8\u4f1a\u8c03\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"TryRemoveJob(schedulerBuilder)")," \u64cd\u4f5c\u3002"),(0,a.kt)("p",{parentName:"admonition"},"\u6bd4\u5982\u4ee5\u4e0b\u7684\u4ee3\u7801\u5b9e\u5219\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"\u65b0\u589e")," \u6216 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u5220\u9664")," \u64cd\u4f5c\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,7}",showLineNumbers:!0,"{3,7}":!0},'// \u5b9e\u9645\u505a\u65b0\u589e\u64cd\u4f5c\nvar scheduleResult = _schedulerFactory.TryUpdateJob(\n SchedulerBuilder.Create(JobBuilder.Create())); // Create \u65b9\u6cd5\u9ed8\u8ba4\u6807\u8bb0\u4e3a Appended\n\n// \u5b9e\u9645\u505a\u5220\u9664\u64cd\u4f5c\nvar schedulerBuilder = _schedulerFactory.GetJob("jobId")?.GetBuilder();\nvar scheduleResult = _schedulerFactory.TryUpdateJob(schedulerBuilder.Removed()); // \u6807\u8bb0\u4e3a Removed\n'))),(0,a.kt)("h3",{id:"261106-\u5220\u9664\u4f5c\u4e1a"},"26.1.10.6 \u5220\u9664\u4f5c\u4e1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"JobId")," \u65b9\u5f0f"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},'// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild \u6216\u8005 ScheduleResult.NotFound\nvar schedulerResult = _schedulerFactory.TryRemoveJob("job1", out var scheduler);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\n_schedulerFactory.RemoveJob("job1");\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"IScheduler")," \u65b9\u5f0f"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},"// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild \u6216\u8005 ScheduleResult.NotFound\nvar schedulerResult = _schedulerFactory.TryRemoveJob(scheduler);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\n_schedulerFactory.RemoveJob(scheduler);\n")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u5220\u9664\u6210\u529f\u6216\u5931\u8d25\u5206\u522b\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4,6}",showLineNumbers:!0,"{2,4,6}":!0},"info: 2022-11-22 09:25:17.4763941 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #4\n The Scheduler of successfully removed to the schedule.\nwarn: 2022-11-22 09:28:56.2241923 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #9\n The Scheduler of is not found.\nwarn: 2022-11-22 09:29:01.2241923 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #9\n The Scheduler of remove failed.\n")),(0,a.kt)("h3",{id:"261107-\u68c0\u67e5\u4f5c\u4e1a\u662f\u5426\u5b58\u5728"},"26.1.10.7 \u68c0\u67e5\u4f5c\u4e1a\u662f\u5426\u5b58\u5728"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4}",showLineNumbers:!0,"{1,4}":!0},'var isExist = _schedulerFactory.ContainsJob("job1");\n\n// \u8fd8\u53ef\u4ee5\u901a\u8fc7 group \u67e5\u627e\nvar isExist = _schedulerFactory.ContainsJob("job1", "group1");\n')),(0,a.kt)("h3",{id:"261108-\u542f\u52a8\u6240\u6709\u4f5c\u4e1a"},"26.1.10.8 \u542f\u52a8\u6240\u6709\u4f5c\u4e1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4}",showLineNumbers:!0,"{1,4}":!0},'_schedulerFactory.StartAll();\n\n// \u8fd8\u53ef\u4ee5\u901a\u8fc7 group \u542f\u52a8\n_schedulerFactory.StartAll("group1");\n')),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8c03\u5ea6\u5668\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4}",showLineNumbers:!0,"{2,4}":!0},"info: 2022-11-22 10:48:55.9619596 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #16\n The trigger for scheduler of successfully started to the schedule.\nwarn: 2022-11-22 10:48:56.0131304 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #16\n Schedule Hosted Service cancels hibernation and GC.Collect().\n")),(0,a.kt)("h3",{id:"261109-\u6682\u505c\u6240\u6709\u4f5c\u4e1a"},"26.1.10.9 \u6682\u505c\u6240\u6709\u4f5c\u4e1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4}",showLineNumbers:!0,"{1,4}":!0},' _schedulerFactory.PauseAll();\n\n// \u8fd8\u53ef\u4ee5\u901a\u8fc7 group \u6682\u505c\n _schedulerFactory.PauseAll("group1");\n')),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8c03\u5ea6\u5668\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {4,6}",showLineNumbers:!0,"{4,6}":!0},"info: 2022-11-22 11:01:52.0008851 +08:00 \u661f\u671f\u4e8c L ConsoleApp32.MyJob[0] #10\n job1 job1_trigger1 2022/11/22 11:01:51 5000ms\ninfo: 2022-11-22 11:01:54.5265246 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #15\n The trigger for scheduler of successfully paused to the schedule.\nwarn: 2022-11-22 11:01:54.5535267 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #15\n Schedule Hosted Service cancels hibernation and GC.Collect().\n")),(0,a.kt)("h3",{id:"2611010-\u5220\u9664\u6240\u6709\u4f5c\u4e1a"},"26.1.10.10 \u5220\u9664\u6240\u6709\u4f5c\u4e1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4}",showLineNumbers:!0,"{1,4}":!0},' _schedulerFactory.RemoveAll();\n\n// \u8fd8\u53ef\u4ee5\u901a\u8fc7 group \u5220\u9664\n _schedulerFactory.RemoveAll("group1");\n')),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8c03\u5ea6\u5668\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {4,6}",showLineNumbers:!0,"{4,6}":!0},"info: 2022-11-22 11:04:19.4838792 +08:00 \u661f\u671f\u4e8c L ConsoleApp32.MyJob[0] #14\n job1 job1_trigger1 2022/11/22 11:04:19 5000ms\nwarn: 2022-11-22 11:04:23.0726721 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #9\n Schedule Hosted Service cancels hibernation and GC.Collect().\ninfo: 2022-11-22 11:04:23.0797010 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #9\n The Scheduler of successfully removed to the schedule.\n")),(0,a.kt)("h3",{id:"2611011-\u5f3a\u5236\u5524\u9192\u4f5c\u4e1a\u8c03\u5ea6\u5668"},"26.1.10.11 \u5f3a\u5236\u5524\u9192\u4f5c\u4e1a\u8c03\u5ea6\u5668"),(0,a.kt)("p",null,"\u6b63\u5e38\u60c5\u51b5\u4e0b\uff0c\u4f5c\u4e1a\u8c03\u5ea6\u5668\u4f1a\u81ea\u52a8\u7ba1\u7406\u4f11\u7720\u548c\u5524\u9192\uff0c\u4f46\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\u4e0b\u9700\u8981\u5f3a\u5236\u5524\u9192\u4f5c\u4e1a\u8c03\u5ea6\u5668\uff08\u6bd4\u5982\u8c03\u5ea6\u5668\u5047\u6b7b\u4e86\uff0c\u88ab\u56de\u6536\u4e86\u3002\u3002\u3002\uff09\uff0c\u53ef\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"_schedulerFactory.CancelSleep();\n")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8c03\u5ea6\u5668\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2}",showLineNumbers:!0,"{2}":!0},"warn: 2022-11-22 11:04:23.0726721 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #9\n Schedule Hosted Service cancels hibernation and GC.Collect().\n")),(0,a.kt)("h3",{id:"2611012-\u5f3a\u5236\u89e6\u53d1\u6240\u6709\u4f5c\u4e1a\u6301\u4e45\u5316"},"26.1.10.12 \u5f3a\u5236\u89e6\u53d1\u6240\u6709\u4f5c\u4e1a\u6301\u4e45\u5316"),(0,a.kt)("p",null,"\u6b64\u64cd\u4f5c\u4f1a\u5f3a\u5236\u89e6\u53d1\u4f5c\u4e1a\u6301\u4e45\u5316\u5668 ",(0,a.kt)("inlineCode",{parentName:"p"},"IJobPersistence")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"OnChanged")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"OnTriggerChanged")," \u65b9\u6cd5\uff0c\u5e76\u6807\u8bb0\u4f5c\u4e1a\u6301\u4e45\u5316\u884c\u4e3a\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"PersistenceBehavior.Updated"),"\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4}",showLineNumbers:!0,"{1,4}":!0},'_schedulerFactory.PersistAll();\n\n// \u8fd8\u53ef\u4ee5\u901a\u8fc7 group \u63a7\u5236\n _schedulerFactory.PersistAll("group1");\n')),(0,a.kt)("h2",{id:"26111-\u4f5c\u4e1a\u8ba1\u5212-ischeduler"},"26.1.11 \u4f5c\u4e1a\u8ba1\u5212 ",(0,a.kt)("inlineCode",{parentName:"h2"},"IScheduler")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8ba1\u5212 ",(0,a.kt)("inlineCode",{parentName:"p"},"Scheduler")," \u7684\u9ed8\u8ba4\u5b9e\u73b0\u63a5\u53e3\u65f6 ",(0,a.kt)("inlineCode",{parentName:"p"},"IScheduler"),"\uff0c\u8be5\u63a5\u53e3\u4e3b\u8981\u7528\u6765\u64cd\u4f5c\u5f53\u524d\uff08\u5355\u4e2a\uff09\u4f5c\u4e1a\u3002"),(0,a.kt)("h3",{id:"261111-\u83b7\u53d6-ischeduler-\u5b9e\u4f8b"},"26.1.11.1 \u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h3"},"IScheduler")," \u5b9e\u4f8b"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},'// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u5b58\u5728\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.NotFound\nvar scheduleResult = _schedulerFactory.TryGetJob("job1", out var scheduler);\n\n// \u8fd4\u56de IScheduler \u7c7b\u578b\nvar scheduler = _schedulerFactory.GetJob("job1");\n')),(0,a.kt)("h3",{id:"261112-\u83b7\u53d6-schedulermodel-\u5b9e\u4f8b"},"26.1.11.2 \u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h3"},"SchedulerModel")," \u5b9e\u4f8b"),(0,a.kt)("p",null,"\u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"p"},"SchedulerModel")," \u4e4b\u540e\u53ef\u76f4\u63a5\u8bbf\u95ee ",(0,a.kt)("inlineCode",{parentName:"p"},"JobDetail")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"Trigger")," \u5bf9\u8c61\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var schedulerModel = scheduler.GetModel();\n")),(0,a.kt)("h3",{id:"261113-\u83b7\u53d6-schedulerbuilder"},"26.1.11.3 \u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h3"},"SchedulerBuilder")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var schedulerBuilder = scheduler.GetBuilder();\n")),(0,a.kt)("h3",{id:"261114-\u83b7\u53d6-jobbuilder"},"26.1.11.4 \u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h3"},"JobBuilder")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var jobBuilder = scheduler.GetJobBuilder();\n")),(0,a.kt)("h3",{id:"261115-\u83b7\u53d6-triggerbuilders"},"26.1.11.5 \u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h3"},"TriggerBuilders")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var triggerBuilders = scheduler.GetTriggerBuilders();\n")),(0,a.kt)("h3",{id:"261116-\u83b7\u53d6\u5355\u4e2a-triggerbuilder"},"26.1.11.6 \u83b7\u53d6\u5355\u4e2a ",(0,a.kt)("inlineCode",{parentName:"h3"},"TriggerBuilder")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var triggerBuilder = scheduler.GetTriggerBuilder("trigger1");\n')),(0,a.kt)("h3",{id:"261117-\u542f\u52a8\u5f53\u524d\u4f5c\u4e1a"},"26.1.11.7 \u542f\u52a8\u5f53\u524d\u4f5c\u4e1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"scheduler.Start();\n")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8c03\u5ea6\u5668\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,4}",showLineNumbers:!0,"{2,4}":!0},"info: 2022-11-22 17:38:16.2612604 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #15\n The trigger for scheduler of successfully started to the schedule.\nwarn: 2022-11-22 17:38:16.2636849 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #15\n Schedule Hosted Service cancels hibernation and GC.Collect().\n")),(0,a.kt)("h3",{id:"261118-\u6682\u505c\u5f53\u524d\u4f5c\u4e1a"},"26.1.11.8 \u6682\u505c\u5f53\u524d\u4f5c\u4e1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"schedular.Pause();\n")),(0,a.kt)("p",null,"\u4f5c\u4e1a\u8c03\u5ea6\u5668\u8f93\u51fa\u65e5\u5fd7\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"{4,6}","{4,6}":!0},"info: 2022-11-22 15:34:39.5609135 +08:00 \u661f\u671f\u4e8c L ConsoleApp32.MyJob[0] #8\n job1 job1_trigger1 2022/11/22 15:34:39 5000ms\ninfo: 2022-11-22 15:34:39.5647151 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #14\n The trigger for scheduler of successfully paused to the schedule.\nwarn: 2022-11-22 15:34:39.5682460 +08:00 \u661f\u671f\u4e8c L System.Logging.ScheduleService[0] #14\n Schedule Hosted Service cancels hibernation and GC.Collect().\n")),(0,a.kt)("h3",{id:"261119-\u542f\u52a8\u4f5c\u4e1a\u7279\u5b9a\u89e6\u53d1\u5668"},"26.1.11.9 \u542f\u52a8\u4f5c\u4e1a\u7279\u5b9a\u89e6\u53d1\u5668"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'scheduler.StartTrigger("triggerId");\n')),(0,a.kt)("h3",{id:"2611110-\u6682\u505c\u4f5c\u4e1a\u7279\u5b9a\u89e6\u53d1\u5668"},"26.1.11.10 \u6682\u505c\u4f5c\u4e1a\u7279\u5b9a\u89e6\u53d1\u5668"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'scheduler.PauseTrigger("triggerId");\n')),(0,a.kt)("h3",{id:"2611111-\u66f4\u65b0\u4f5c\u4e1a\u4fe1\u606f"},"26.1.11.11 \u66f4\u65b0\u4f5c\u4e1a\u4fe1\u606f"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},"// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild\nvar schedulerResult = scheduler.TryUpdateDetail(jobBuilder, out var jobDetail);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\nscheduler.UpdateDetail(jobBuilder);\n")),(0,a.kt)("h3",{id:"2611112-\u83b7\u53d6\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668"},"26.1.11.12 \u83b7\u53d6\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},'// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u5b58\u5728\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.NotFound\nvar scheduleResult = scheduler.TryGetTrigger("trigger1", out var trigger);\n\n// \u8fd4\u56de Trigger \u7c7b\u578b\nvar trigger = scheduler.GetTrigger("trigger1");\n')),(0,a.kt)("h3",{id:"2611113-\u6dfb\u52a0\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668"},"26.1.11.13 \u6dfb\u52a0\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},"// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild\nvar schedulerResult = scheduler.TryAddTrigger(triggerBuilder, out var trigger);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\nscheduler.AddTrigger(triggerBuilder);\n")),(0,a.kt)("h3",{id:"2611114-\u5220\u9664\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668"},"26.1.11.14 \u5220\u9664\u4f5c\u4e1a\u5355\u4e2a\u89e6\u53d1\u5668"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},'// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild \u6216 ScheduleResult.NotFound\nvar schedulerResult = scheduler.TryRemoveTrigger("trigger1", out var trigger);\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\nscheduler.RemoveTrigger(triggerBuilder);\n')),(0,a.kt)("h3",{id:"2611115-\u5224\u65ad\u4f5c\u4e1a\u662f\u5426\u5305\u542b\u7279\u5b9a\u89e6\u53d1\u5668"},"26.1.11.15 \u5224\u65ad\u4f5c\u4e1a\u662f\u5426\u5305\u542b\u7279\u5b9a\u89e6\u53d1\u5668"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var isExist = scheduler.ContainsTrigger("trigger1");\n')),(0,a.kt)("h3",{id:"2611116-\u5220\u9664\u5f53\u524d\u4f5c\u4e1a"},"26.1.11.16 \u5220\u9664\u5f53\u524d\u4f5c\u4e1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u8fd4\u56de ScheduleResult \u7c7b\u578b\uff0c\u5982\u679c\u6dfb\u52a0\u6210\u529f\u8fd4\u56de ScheduleResult.Succeed\uff0c\u5426\u5219\u8fd4\u56de ScheduleResult.Faild\nvar schedulerResult = scheduler.TryRemove();\n\n// \u65e0\u8fd4\u56de\u503c\uff0c\u65e0\u9519\u8bef\nscheduler.Remove();\n")),(0,a.kt)("h3",{id:"2611117-\u5f3a\u5236\u89e6\u53d1\u6240\u6709\u4f5c\u4e1a\u6301\u4e45\u5316"},"26.1.11.17 \u5f3a\u5236\u89e6\u53d1\u6240\u6709\u4f5c\u4e1a\u6301\u4e45\u5316"),(0,a.kt)("p",null,"\u6b64\u64cd\u4f5c\u4f1a\u5f3a\u5236\u89e6\u53d1\u4f5c\u4e1a\u6301\u4e45\u5316\u5668 ",(0,a.kt)("inlineCode",{parentName:"p"},"IJobPersistence")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"OnChanged")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"OnTriggerChanged")," \u65b9\u6cd5\uff0c\u5e76\u6807\u8bb0\u4f5c\u4e1a\u6301\u4e45\u5316\u884c\u4e3a\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"PersistenceBehavior.Updated"),"\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},"scheduler.Persist();\n")),(0,a.kt)("h3",{id:"2611118-\u8f93\u51fa-json-\u5b57\u7b26\u4e32"},"26.1.11.18 \u8f93\u51fa ",(0,a.kt)("inlineCode",{parentName:"h3"},"JSON")," \u5b57\u7b26\u4e32"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var json scheduler.ConvertToJSON();\n")),(0,a.kt)("p",null,"\u8f93\u51fa\u7ed3\u679c\u4e3a\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2,13}",showLineNumbers:!0,"{2,13}":!0},'{\n "jobDetail": {\n "jobId": "job1",\n "groupName": null,\n "jobType": "Furion.Application.MyJob",\n "assemblyName": "Furion.Application",\n "description": null,\n "concurrent": true,\n "includeAnnotations": false,\n "properties": "{}",\n "updatedTime": "2022-11-17T09:25:47.0471107+08:00"\n },\n "triggers": [\n {\n "triggerId": "job1_trigger1",\n "jobId": null,\n "triggerType": "Furion.Schedule.PeriodSecondsTrigger",\n "assemblyName": "Furion",\n "args": "[5]",\n "description": null,\n "status": 2,\n "startTime": null,\n "endTime": null,\n "lastRunTime": "2022-11-20T18:31:56.6859410+08:00",\n "nextRunTime": "2022-11-20T18:32:01.7233546+08:00",\n "numberOfRuns": 1,\n "maxNumberOfRuns": 0,\n "numberOfErrors": 0,\n "maxNumberOfErrors": 0,\n "numRetries": 0,\n "retryTimeout": 1000,\n "startNow": true,\n "runOnStart": false,\n "updatedTime": "2022-11-20T18:31:56.7233630+08:00"\n }\n ]\n}\n')),(0,a.kt)("h2",{id:"26112-\u4f5c\u4e1a\u6301\u4e45\u5316\u5668-ijobpersistence"},"26.1.12 \u4f5c\u4e1a\u6301\u4e45\u5316\u5668 ",(0,a.kt)("inlineCode",{parentName:"h2"},"IJobPersistence")),(0,a.kt)("p",null,"\u7d27\u6025\u7f16\u5199\u4e2d\uff0c\u5c06\u5728 2022 \u5e74 11 \u6708 23 \u65e5\u5b8c\u6210\uff0c\u522b\u50ac\uff01"),(0,a.kt)("h2",{id:"26113-\u4f5c\u4e1a\u96c6\u7fa4\u63a7\u5236"},"26.1.13 \u4f5c\u4e1a\u96c6\u7fa4\u63a7\u5236"),(0,a.kt)("p",null,"\u7d27\u6025\u7f16\u5199\u4e2d\uff0c\u5c06\u5728 2022 \u5e74 11 \u6708 23 \u65e5\u5b8c\u6210\uff0c\u522b\u50ac\uff01"),(0,a.kt)("h2",{id:"26114-\u5982\u4f55\u90e8\u7f72"},"26.1.14 \u5982\u4f55\u90e8\u7f72"),(0,a.kt)("p",null,"\u7d27\u6025\u7f16\u5199\u4e2d\uff0c\u5c06\u5728 2022 \u5e74 11 \u6708 23 \u65e5\u5b8c\u6210\uff0c\u522b\u50ac\uff01"),(0,a.kt)("h2",{id:"26115-\u5e38\u89c1\u95ee\u9898"},"26.1.15 \u5e38\u89c1\u95ee\u9898"),(0,a.kt)("p",null,"\u7d27\u6025\u7f16\u5199\u4e2d\uff0c\u5c06\u5728 2022 \u5e74 11 \u6708 23 \u65e5\u5b8c\u6210\uff0c\u522b\u50ac\uff01"),(0,a.kt)("h2",{id:"26115-\u53cd\u9988\u4e0e\u5efa\u8bae"},"26.1.15 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/235cfaae.f4633d6b.js b/handbook/build/assets/js/235cfaae.f4633d6b.js new file mode 100644 index 00000000000..b6b7d56e4db --- /dev/null +++ b/handbook/build/assets/js/235cfaae.f4633d6b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[3923],{8521:function(o){o.exports=JSON.parse('{"permalink":"/blog/tags/download","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/2397d9c0.7b7cda5e.js b/handbook/build/assets/js/2397d9c0.7b7cda5e.js new file mode 100644 index 00000000000..1a1740e5afa --- /dev/null +++ b/handbook/build/assets/js/2397d9c0.7b7cda5e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4823],{3905:function(e,n,t){t.d(n,{Zo:function(){return u},kt:function(){return m}});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},u=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},g={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(t),m=o,d=c["".concat(s,".").concat(m)]||c[m]||g[m]||r;return t?a.createElement(d,i(i({ref:n},u),{},{components:t})):a.createElement(d,i({ref:n},u))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=t.length,i=new Array(r);i[0]=c;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;pusing",id:"\u9ed8\u8ba4\u5168\u5c40-using",level:3}],m={toc:c};function d(e){var n=e.components,t=(0,o.Z)(e,l);return(0,r.kt)("wrapper",(0,a.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h3",{id:"\u7b80\u4ecb"},"\u7b80\u4ecb"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},".NET6/C#10")," \u4e4b\u540e\uff0c\u5fae\u8f6f\u65b0\u589e\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings")," \u673a\u5236\uff0c\u53ef\u4ee5\u5728\u9879\u76ee\u7684\u6839\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2a ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u6587\u4ef6\uff0c\u628a\u5e38\u7528\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," \u653e\u7f6e\u5176\u4e2d\u3002"),(0,r.kt)("p",null,"\u8fd9\u6837 ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u6240\u5728\u7684\u9879\u76ee ",(0,r.kt)("inlineCode",{parentName:"p"},".cs")," \u6587\u4ef6\u5c31\u65e0\u9700\u91cd\u590d ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," \u4e86\uff0c\u5927\u5927\u7684\u63d0\u9ad8\u5f00\u53d1\u6548\u7387\uff0c\u4e5f\u8ba9\u4ee3\u7801\u53d8\u7684\u66f4\u52a0\u7b80\u6d01\u3002"),(0,r.kt)("h3",{id:"\u5fc5\u8981\u914d\u7f6e"},"\u5fc5\u8981\u914d\u7f6e"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u542f\u7528 ",(0,r.kt)("inlineCode",{parentName:"strong"},"GlobalUsings")," \u673a\u5236\u9700\u8981\u4ee5\u4e0b\u4e24\u4e2a\u6b65\u9aa4\uff1a")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\u5728\u4f60\u9700\u8981\u5168\u5c40 ",(0,r.kt)("inlineCode",{parentName:"li"},"using")," \u7684\u9879\u76ee\u5c42\u6839\u76ee\u5f55\u521b\u5efa ",(0,r.kt)("inlineCode",{parentName:"li"},"GlobalUsings.cs")," \u6587\u4ef6\uff0c\u5982\u679c\u591a\u4e2a\u9879\u76ee\u5c42\u9700\u8981\uff0c\u5219\u6bcf\u4e2a\u5c42\u90fd\u5e94\u8be5\u6709\u4e00\u4e2a ",(0,r.kt)("inlineCode",{parentName:"li"},"GlobalUsings.cs")),(0,r.kt)("li",{parentName:"ol"},"\u7f16\u8f91\u9879\u76ee\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},".csproj")," \u6587\u4ef6\uff0c\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"enable"),"\uff0c\u6ce8\u610f\u662f\u5728 ",(0,r.kt)("inlineCode",{parentName:"li"},"")," \u4e2d\u6dfb\u52a0\uff0c\u901a\u5e38\u548c ",(0,r.kt)("inlineCode",{parentName:"li"},"")," \u540c\u7236\u540c\u7ea7")),(0,r.kt)("h3",{id:"\u57fa\u672c\u4f7f\u7528"},"\u57fa\u672c\u4f7f\u7528"),(0,r.kt)("p",null,"\u914d\u7f6e\u4e4b\u540e\uff0c\u73b0\u5728\u5c31\u53ef\u4ee5\u628a\u5e38\u7528\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," \u653e\u5230 ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u4e2d\u4e86\uff0c\u5199\u6cd5\u5982\u4e0b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers title="Furion \u63a8\u8350\u7684\u5168\u5c40\u547d\u540d\u7a7a\u95f4"',showLineNumbers:!0,title:'"Furion','\u63a8\u8350\u7684\u5168\u5c40\u547d\u540d\u7a7a\u95f4"':!0},"global using Furion;\nglobal using Furion.DatabaseAccessor;\nglobal using Furion.DataEncryption;\nglobal using Furion.DataValidation;\nglobal using Furion.DependencyInjection;\nglobal using Furion.DynamicApiController;\nglobal using Furion.Extensions;\nglobal using Furion.FriendlyException;\nglobal using Mapster;\nglobal using Microsoft.AspNetCore.Authorization;\nglobal using Microsoft.AspNetCore.Http;\nglobal using Microsoft.AspNetCore.Mvc;\nglobal using Microsoft.CodeAnalysis;\nglobal using Microsoft.EntityFrameworkCore;\nglobal using System.ComponentModel.DataAnnotations;\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u5fc5\u987b\u4ee5 ",(0,r.kt)("inlineCode",{parentName:"strong"},"global")," \u5f00\u5934\uff01")),(0,r.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u4e00\u822c\u63a8\u8350\u628a\u5b9e\u4f53\u7c7b\u7684\u547d\u540d\u7a7a\u95f4\u4e5f\u653e\u8fdb\u53bb\uff0c\u56e0\u4e3a\u4ed3\u50a8 ",(0,r.kt)("inlineCode",{parentName:"p"},"IRepository")," \u4f7f\u7528\u7684\u9891\u7387\u975e\u5e38\u9ad8\u3002"),(0,r.kt)("p",{parentName:"admonition"},"\u53e6\u5916\u63a8\u8350\u5927\u5bb6\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u4e2d\u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"p"},"CodeMaid")," \u63d2\u4ef6\u54e6\uff0c\u81ea\u52a8\u6e05\u7406\u89e3\u51b3\u65b9\u6848\u6240\u6709\u65e0\u7528\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"using"),"\uff0c\u7ed3\u5408 ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u975e\u5e38\u68d2\uff01")),(0,r.kt)("admonition",{title:"\u4e2a\u522b\u60c5\u51b5",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u53ef\u80fd\u7531\u4e8e ",(0,r.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u7248\u672c\u7684\u95ee\u9898\uff0c\u5bfc\u81f4 ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u5b9a\u4e49\u51fa\u9519\uff0c\u8fd9\u65f6\u5019\u9700\u8981\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," \u540e\u9762\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"global::"),"\uff0c\u5982\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"global using global::Furion;\n"))),(0,r.kt)("p",null,"\u63a5\u4e0b\u6765\u5728\u4ee3\u7801\u4e2d\u4f7f\u7528\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},"// \u65e0\u9700 using Furion \u7684\u547d\u540d\u7a7a\u95f4\u4e86\u54e6\uff0c\u6e05\u723d\u4e86\u4e0d\u5c11\n\nnamespace Your.Application;\n\npublic class DefaultAppService : IDynamicApiController\n{\n private readonly IRepository _boardCardRepository;\n private readonly IRepository _boardGroupRepository;\n private readonly IRepository _boardCardAttachmentRepository;\n private readonly IRepository _boardCardUserRepository;\n}\n\n// ....\n")),(0,r.kt)("img",{src:(0,i.Z)("img/cd2223.png")}),(0,r.kt)("h3",{id:"\u9ed8\u8ba4\u5168\u5c40-using"},"\u9ed8\u8ba4\u5168\u5c40 ",(0,r.kt)("inlineCode",{parentName:"h3"},"using")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u5b9e\u9645\u4e0a\u5fae\u8f6f\u5df2\u7ecf\u81ea\u52a8\u628a\u4e00\u4e9b\u5e38\u7528\u7684 ",(0,r.kt)("inlineCode",{parentName:"strong"},"using")," \u5728\u7f16\u8bd1\u540e\u7684\u4ee3\u7801\u4e2d\u81ea\u52a8\u8865\u4e0a\u4e86"),"\uff0c\u8def\u5f84\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u9879\u76ee/obj/Debug/net6.0/\u9879\u76ee.GlobalUsings.cs")," \u6587\u4ef6\u4e2d\uff0c\u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \nglobal using global::System;\nglobal using global::System.Collections.Generic;\nglobal using global::System.IO;\nglobal using global::System.Linq;\nglobal using global::System.Net.Http;\nglobal using global::System.Threading;\nglobal using global::System.Threading.Tasks;\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u4e5f\u5c31\u662f\u4ee5\u4e0a\u7684 ",(0,r.kt)("inlineCode",{parentName:"strong"},"using")," \u65e0\u9700\u5199\u5728\u4f60\u521b\u5efa\u7684 ",(0,r.kt)("inlineCode",{parentName:"strong"},"GlobalUsings.cs")," \u4e2d\u4e86\uff0c\u5fae\u8f6f\u4f1a\u5728\u7f16\u8bd1\u65f6\u81ea\u52a8\u5408\u5e76\u3002")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/2529.74f88349.js b/handbook/build/assets/js/2529.74f88349.js new file mode 100644 index 00000000000..c0df9658d0e --- /dev/null +++ b/handbook/build/assets/js/2529.74f88349.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2529],{3905:function(e,t,r){r.d(t,{Zo:function(){return s},kt:function(){return f}});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),m=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=m(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,c=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),d=m(r),f=a,g=d["".concat(c,".").concat(f)]||d[f]||u[f]||l;return r?n.createElement(g,i(i({ref:t},s),{},{components:r})):n.createElement(g,i({ref:t},s))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,i=new Array(l);i[0]=d;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o.mdxType="string"==typeof e?e:a,i[1]=o;for(var m=2;m0;return a.createElement(i.Z,c,a.createElement("div",{className:"container margin-vert--lg"},a.createElement("div",{className:"row"},a.createElement(P,{sidebar:t}),a.createElement("main",{className:(0,l.Z)("col",{"col--7":m,"col--9 col--offset-1":!m}),itemScope:!0,itemType:"http://schema.org/Blog"},o),r&&a.createElement("div",{className:"col col--2"},r))))}},390:function(e,t,r){r.d(t,{Z:function(){return R}});var n=r(7294),a=r(6010),l=r(9460),i=r(4996);function o(e){var t,r=e.children,a=e.className,o=(0,l.C)(),c=o.frontMatter,m=o.assets,s=(0,i.C)().withBaseUrl,u=null!=(t=m.image)?t:c.image;return n.createElement("article",{className:a,itemProp:"blogPost",itemScope:!0,itemType:"http://schema.org/BlogPosting"},u&&n.createElement("meta",{itemProp:"image",content:s(u,{absolute:!0})}),r)}var c=r(9960),m="title_f1Hy";function s(e){var t=e.className,r=(0,l.C)(),i=r.metadata,o=r.isBlogPostPage,s=i.permalink,u=i.title,d=o?"h1":"h2";return n.createElement(d,{className:(0,a.Z)(m,t),itemProp:"headline"},o?u:n.createElement(c.Z,{itemProp:"url",to:s},u))}var u=r(5999),d=r(8824),f="container_mt6G";function g(e){var t,r=e.readingTime,a=(t=(0,d.c)().selectMessage,function(e){var r=Math.ceil(e);return t(r,(0,u.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:r}))});return n.createElement(n.Fragment,null,a(r))}function p(e){var t=e.date,r=e.formattedDate;return n.createElement("time",{dateTime:t,itemProp:"datePublished"},r)}function v(){return n.createElement(n.Fragment,null," \xb7 ")}function h(e){var t=e.className,r=(0,l.C)().metadata,i=r.date,o=r.formattedDate,c=r.readingTime;return n.createElement("div",{className:(0,a.Z)(f,"margin-vert--md",t)},n.createElement(p,{date:i,formattedDate:o}),void 0!==c&&n.createElement(n.Fragment,null,n.createElement(v,null),n.createElement(g,{readingTime:c})))}function E(e){return e.href?n.createElement(c.Z,e):n.createElement(n.Fragment,null,e.children)}function b(e){var t=e.author,r=e.className,l=t.name,i=t.title,o=t.url,c=t.imageURL,m=t.email,s=o||m&&"mailto:"+m||void 0;return n.createElement("div",{className:(0,a.Z)("avatar margin-bottom--sm",r)},c&&n.createElement(E,{href:s,className:"avatar__photo-link"},n.createElement("img",{className:"avatar__photo",src:c,alt:l})),l&&n.createElement("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person"},n.createElement("div",{className:"avatar__name"},n.createElement(E,{href:s,itemProp:"url"},n.createElement("span",{itemProp:"name"},l))),i&&n.createElement("small",{className:"avatar__subtitle",itemProp:"description"},i)))}var P="authorCol_Hf19",N="imageOnlyAuthorRow_pa_O",Z="imageOnlyAuthorCol_G86a";function _(e){var t=e.className,r=(0,l.C)(),i=r.metadata.authors,o=r.assets;if(0===i.length)return null;var c=i.every((function(e){return!e.name}));return n.createElement("div",{className:(0,a.Z)("margin-top--md margin-bottom--sm",c?N:"row",t)},i.map((function(e,t){var r;return n.createElement("div",{className:(0,a.Z)(!c&&"col col--6",c?Z:P),key:t},n.createElement(b,{author:Object.assign({},e,{imageURL:null!=(r=o.authorsImageUrls[t])?r:e.imageURL})}))})))}function y(){return n.createElement("header",null,n.createElement(s,null),n.createElement(h,null),n.createElement(_,null))}var k=r(8780),O=r(5042);function w(e){var t=e.children,r=e.className,i=(0,l.C)().isBlogPostPage;return n.createElement("div",{id:i?k.blogPostContainerID:void 0,className:(0,a.Z)("markdown",r),itemProp:"articleBody"},n.createElement(O.Z,null,t))}var T=r(4881),C=r(1526),x=r(3117),j=r(102),F=["blogPostTitle"];function B(){return n.createElement("b",null,n.createElement(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More"))}function I(e){var t=e.blogPostTitle,r=(0,j.Z)(e,F);return n.createElement(c.Z,(0,x.Z)({"aria-label":(0,u.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},r),n.createElement(B,null))}var L="blogPostFooterDetailsFull_mRVl";function M(){var e=(0,l.C)(),t=e.metadata,r=e.isBlogPostPage,i=t.tags,o=t.title,c=t.editUrl,m=t.hasTruncateMarker,s=!r&&m,u=i.length>0;return u||s||c?n.createElement("footer",{className:(0,a.Z)("row docusaurus-mt-lg",r&&L)},u&&n.createElement("div",{className:(0,a.Z)("col",{"col--9":s})},n.createElement(C.Z,{tags:i})),r&&c&&n.createElement("div",{className:"col margin-top--sm"},n.createElement(T.Z,{editUrl:c})),s&&n.createElement("div",{className:(0,a.Z)("col text--right",{"col--3":u})},n.createElement(I,{blogPostTitle:o,to:t.permalink}))):null}function R(e){var t=e.children,r=e.className,i=(0,l.C)().isBlogPostPage?void 0:"margin-bottom--xl";return n.createElement(o,{className:(0,a.Z)(i,r)},n.createElement(y,null),n.createElement(w,null,t),n.createElement(M,null))}},4881:function(e,t,r){r.d(t,{Z:function(){return d}});var n=r(7294),a=r(5999),l=r(5281),i=r(3117),o=r(102),c=r(6010),m="iconEdit_Z9Sw",s=["className"];function u(e){var t=e.className,r=(0,o.Z)(e,s);return n.createElement("svg",(0,i.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,c.Z)(m,t),"aria-hidden":"true"},r),n.createElement("g",null,n.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function d(e){var t=e.editUrl;return n.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:l.k.common.editThisPage},n.createElement(u,null),n.createElement(a.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},5042:function(e,t,r){r.d(t,{Z:function(){return i}});var n=r(7294),a=r(3905),l=r(9523);function i(e){var t=e.children;return n.createElement(a.Zo,{components:l.Z},t)}},2244:function(e,t,r){r.d(t,{Z:function(){return i}});var n=r(7294),a=r(6010),l=r(9960);function i(e){var t=e.permalink,r=e.title,i=e.subLabel,o=e.isNext;return n.createElement(l.Z,{className:(0,a.Z)("pagination-nav__link",o?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},i&&n.createElement("div",{className:"pagination-nav__sublabel"},i),n.createElement("div",{className:"pagination-nav__label"},r))}},3008:function(e,t,r){r.d(t,{Z:function(){return m}});var n=r(7294),a=r(6010),l=r(9960),i="tag_zVej",o="tagRegular_sFm0",c="tagWithCount_h2kH";function m(e){var t=e.permalink,r=e.label,m=e.count;return n.createElement(l.Z,{href:t,className:(0,a.Z)(i,m?c:o)},r,m&&n.createElement("span",null,m))}},1526:function(e,t,r){r.d(t,{Z:function(){return m}});var n=r(7294),a=r(6010),l=r(5999),i=r(3008),o="tags_jXut",c="tag_QGVx";function m(e){var t=e.tags;return n.createElement(n.Fragment,null,n.createElement("b",null,n.createElement(l.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),n.createElement("ul",{className:(0,a.Z)(o,"padding--none","margin-left--sm")},t.map((function(e){var t=e.label,r=e.permalink;return n.createElement("li",{key:r,className:c},n.createElement(i.Z,{label:t,permalink:r}))}))))}},9460:function(e,t,r){r.d(t,{C:function(){return o},n:function(){return i}});var n=r(7294),a=r(4700),l=n.createContext(null);function i(e){var t=e.children,r=e.content,a=e.isBlogPostPage,i=function(e){var t=e.content,r=e.isBlogPostPage;return(0,n.useMemo)((function(){return{metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:r}}),[t,r])}({content:r,isBlogPostPage:void 0!==a&&a});return n.createElement(l.Provider,{value:i},t)}function o(){var e=(0,n.useContext)(l);if(null===e)throw new a.i6("BlogPostProvider");return e}},8824:function(e,t,r){r.d(t,{c:function(){return m}});var n=r(7294),a=r(2263),l=["zero","one","two","few","many","other"];function i(e){return l.filter((function(t){return e.includes(t)}))}var o={locale:"en",pluralForms:i(["one","other"]),select:function(e){return 1===e?"one":"other"}};function c(){var e=(0,a.Z)().i18n.currentLocale;return(0,n.useMemo)((function(){try{return t=e,r=new Intl.PluralRules(t),{locale:t,pluralForms:i(r.resolvedOptions().pluralCategories),select:function(e){return r.select(e)}}}catch(n){return console.error('Failed to use Intl.PluralRules for locale "'+e+'".\nDocusaurus will fallback to the default (English) implementation.\nError: '+n.message+"\n"),o}var t,r}),[e])}function m(){var e=c();return{selectMessage:function(t,r){return function(e,t,r){var n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error("For locale="+r.locale+", a maximum of "+r.pluralForms.length+" plural forms are expected ("+r.pluralForms.join(",")+"), but the message contains "+n.length+": "+e);var a=r.select(t),l=r.pluralForms.indexOf(a);return n[Math.min(l,n.length-1)]}(r,t,e)}}}}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/26682ccc.dfa1adaa.js b/handbook/build/assets/js/26682ccc.dfa1adaa.js new file mode 100644 index 00000000000..ea6e20f73b2 --- /dev/null +++ b/handbook/build/assets/js/26682ccc.dfa1adaa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4821],{3905:function(e,n,r){r.d(n,{Zo:function(){return l},kt:function(){return m}});var t=r(7294);function a(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function s(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function i(e){for(var n=1;n=0||(a[r]=e[r]);return a}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var u=t.createContext({}),p=function(e){var n=t.useContext(u),r=n;return e&&(r="function"==typeof e?e(n):i(i({},n),e)),r},l=function(e){var n=p(e.components);return t.createElement(u.Provider,{value:n},e.children)},y={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},c=t.forwardRef((function(e,n){var r=e.components,a=e.mdxType,s=e.originalType,u=e.parentName,l=o(e,["components","mdxType","originalType","parentName"]),c=p(r),m=a,d=c["".concat(u,".").concat(m)]||c[m]||y[m]||s;return r?t.createElement(d,i(i({ref:n},l),{},{components:r})):t.createElement(d,i({ref:n},l))}));function m(e,n){var r=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var s=r.length,i=new Array(s);i[0]=c;var o={};for(var u in n)hasOwnProperty.call(n,u)&&(o[u]=n[u]);o.originalType=e,o.mdxType="string"==typeof e?e:a,i[1]=o;for(var p=2;pCase When",id:"91069-case-when",level:3},{value:"9.10.7 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"9107-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],c={toc:y};function m(e){var n=e.components,r=(0,a.Z)(e,i);return(0,s.kt)("wrapper",(0,t.Z)({},c,r,{components:n,mdxType:"MDXLayout"}),(0,s.kt)("h2",{id:"9101-\u6839\u636e\u4e3b\u952e\u67e5\u8be2\u4e00\u6761"},"9.10.1 \u6839\u636e\u4e3b\u952e\u67e5\u8be2\u4e00\u6761"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar person = repository.Find(1);\n\n// \u793a\u4f8b\u4e8c\nvar person = repository.FindOrDefault(1);\n\n// \u793a\u4f8b\u4e09\nvar person = repository.Entities.Find(1);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar person = await repository.FindAsync(1);\n\n// \u793a\u4f8b\u4e8c\nvar person = await repository.FindOrDefaultAsync(1);\n\n// \u793a\u4f8b\u4e09\nvar person = await repository.Entities.FindAsync(1);\n\n")),(0,s.kt)("admonition",{title:"\u5c0f\u63d0\u793a",type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"\u53ef\u4ee5\u652f\u6301\u591a\u4e2a\u952e\u67e5\u8be2\uff0c\u5982\u4e3b\u952e\u3001\u8054\u5408\u952e\u3002",(0,s.kt)("inlineCode",{parentName:"p"},'repository.Find(1, "\u767e\u5c0f\u50e7")'),";")),(0,s.kt)("h2",{id:"9102-\u6839\u636e\u6761\u4ef6\u67e5\u8be2\u4e00\u6761"},"9.10.2 \u6839\u636e\u6761\u4ef6\u67e5\u8be2\u4e00\u6761"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar person = repository.Single(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u4e8c\nvar person = repository.SingleOrDefault(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u4e09\nvar person = repository.First(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u56db\nvar person = repository.FirstOrDefault(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u4e94\nvar person = repository.Last(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u516d\nvar person = repository.LastOrDefault(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u4e03\nvar person = repository.Entities.Single(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u516b\nvar person = repository.Entities.First(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u4e5d\nvar person = repository.Entities.FirstOrDefault(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u5341\nvar person = repository.Entities.Last(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u5341\u4e00\nvar person = repository.Entities.LastOrDefault(u => u.Name == "Furion");\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar person = await repository.SingleAsync(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u4e8c\nvar person = await repository.SingleOrDefaultAsync(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u4e09\nvar person = await repository.FirstAsync(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u56db\nvar person = await repository.FirstOrDefaultAsync(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u4e94\nvar person = await repository.LastAsync(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u516d\nvar person = await repository.LastOrDefaultAsync(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u4e03\nvar person = await repository.Entities.SingleAsync(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u516b\nvar person = await repository.Entities.FirstAsync(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u4e5d\nvar person = await repository.Entities.FirstOrDefaultAsync(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u5341\nvar person = await repository.Entities.LastAsync(u => u.Name == "Furion");\n\n// \u793a\u4f8b\u5341\u4e00\nvar person = await repository.Entities.LastOrDefaultAsync(u => u.Name == "Furion");\n')),(0,s.kt)("h2",{id:"9103-\u67e5\u8be2\u6240\u6709\u6570\u636e"},"9.10.3 \u67e5\u8be2\u6240\u6709\u6570\u636e"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar persons = repository.Entities;\n\n// \u793a\u4f8b\u4e8c\nvar persons = repository.DetachedEntities;\n\n// \u793a\u4f8b\u4e09\nvar persons = repository.AsQueryable();\n\n// \u793a\u4f8b\u56db\nvar persons = repository.AsEnumerable();\n\n// \u793a\u4f8b\u4e94\nvar persons = await repository.AsQueryable().ToListAsync();\n")),(0,s.kt)("h2",{id:"9104-\u6839\u636e\u6761\u4ef6\u67e5\u8be2\u6240\u6709\u6570\u636e"},"9.10.4 \u6839\u636e\u6761\u4ef6\u67e5\u8be2\u6240\u6709\u6570\u636e"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u793a\u4f8b\u4e00\nvar persons = repository.Where(u => u.Id > 10);\n\n// \u793a\u4f8b\u4e8c\nvar persons = repository.Where(u => u.Id > 10 && u.Name.Equals("Furion"));\n\n// \u793a\u4f8b\u4e09 (\u591a\u4e2a where \u91cc\u662f "\u5e76\u4e14"\uff0cId>10 and Name == "Furion")\nvar persons = repository.Where(u => u.Id > 10).Where(u => u.Name.Equals("Furion"));\n\n// \u793a\u4f8b\u56db (\u5224\u65ad name \u662f\u5426\u6709\u503c\uff0c\u5982\u679c name \u662f\u7a7a\u7684\u5219\u4e0d\u4f1a\u6267\u884c u => u.Id > 10 && u.Name.Equals("Furion")\uff0c\u5982\u679c name \u6709\u503c\u5c31\u4f1a\u6267\u884c u => u.Id > 10 && u.Name.Equals("Furion"))\nvar persons = repository.Where(!string.IsNullOrEmpty(name), u => u.Id > 10 && u.Name.Equals("Furion"));\n\n// \u793a\u4f8b\u4e94\nvar persons = repository.Where(!string.IsNullOrEmpty(name), u => u.Id > 10)\n .Where(age > 18, u => u.Name.Contains("\u767e\u5c0f\u50e7"))\n .Where(u => u.Age > 18);\n\n// \u793a\u4f8b\u516d (\u5728\u4e00\u4e2a where \u91cc\u7528\u9017\u53f7\u5206\u9694\u662f "\u6216\u8005"\uff0cName=="Furion" or Name == "\u767e\u5c0f\u50e7" or Name == "MonkSoul")\nvar persons = repository.Where(u => u.Name == "Furion",\n u => u.Name == "\u767e\u5c0f\u50e7",\n u => u.Name == "MonkSoul");\n\n// \u793a\u4f8b\u4e03\nvar persons = repository.Where(u => u.Id > 10).Where(u => u.Name.Equals("Furion"))\n .Where(age > 18, u => u.Name.Contains("\u767e\u5c0f\u50e7"))\n .Where(u => u.Name == "Furion",\n u => u.Name == "\u767e\u5c0f\u50e7",\n u => u.Name == "MonkSoul");\n\n// \u793a\u4f8b\u516b\nvar persons = repository.Where((age > 18, u => u.Name == "Furion"),\n (!string.IsNullOrEmpty(name), u => u.Id > 10));\n\n// \u793a\u4f8b\u4e5d\nvar persons = repository.Where(u => u.Id > 10).Where(u => u.Name.Equals("Furion"))\n .Where(age > 18, u => u.Name.Contains("\u767e\u5c0f\u50e7"))\n .Where(u => u.Name == "Furion",\n u => u.Name == "\u767e\u5c0f\u50e7",\n u => u.Name == "MonkSoul")\n .Where((age > 18, u => u.Name == "Furion"),\n (!string.IsNullOrEmpty(name), u => u.Id > 10));\n\n// \u793a\u4f8b\u5341\nvar persons = repository.Entities.Where(u => u.Id > 10)\n .Where(age > 18, u => u.Name.Contains("\u767e\u5c0f\u50e7"));\n\n// \u793a\u4f8b\u5341\u4e00\nvar persons = repository.DetachedEntities.Where(u => u.Id > 20);\n\n// \u793a\u4f8b\u5341\u4e8c\nvar persons = repository.AsQueryable(u => u.Id > 20).Where(u => u.Name == "Furion");\n')),(0,s.kt)("h2",{id:"9105-\u5206\u9875\u67e5\u8be2"},"9.10.5 \u5206\u9875\u67e5\u8be2"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar persons = repository.Where(u => u.Id > 10).ToPagedList();\n\n// \u793a\u4f8b\u4e8c\nvar persons = repository.Where(u => u.Id > 10).ToPagedList(1, 10);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar persons = await repository.Where(u => u.Id > 10).ToPagedListAsync();\n\n// \u793a\u4f8b\u4e8c\nvar persons = await repository.Where(u => u.Id > 10).ToPagedListAsync(1, 10);\n")),(0,s.kt)("h2",{id:"9106-\u5176\u4ed6\u67e5\u8be2"},"9.10.6 \u5176\u4ed6\u67e5\u8be2"),(0,s.kt)("h3",{id:"91061-\u67e5\u770b\u8bb0\u5f55\u662f\u5426\u5b58\u5728"},"9.10.6.1 \u67e5\u770b\u8bb0\u5f55\u662f\u5426\u5b58\u5728"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar isExists = repository.Any();\n\n// \u793a\u4f8b\u4e8c\nvar isExists = repository.Any(u => u.Id > 10);\n\n// \u793a\u4f8b\u4e09\nvar isExists = repository.Entities.Any();\n\n// \u793a\u4f8b\u56db\nvar isExists = repository.DetachedEntities.Any(u => u.Id > 10);\n\n// \u793a\u4f8b\u4e94\nvar isExists = repository.Where(u => u.Id > 10).Any();\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar isExists = await repository.AnyAsync();\n\n// \u793a\u4f8b\u4e8c\nvar isExists = await repository.AnyAsync(u => u.Id > 10);\n\n// \u793a\u4f8b\u4e09\nvar isExists = await repository.Entities.AnyAsync();\n\n// \u793a\u4f8b\u56db\nvar isExists = await repository.DetachedEntities.AnyAsync(u => u.Id > 10);\n\n// \u793a\u4f8b\u4e94\nvar isExists = await repository.Where(u => u.Id > 10).AnyAsync();\n")),(0,s.kt)("h3",{id:"91062-\u67e5\u8be2\u8bb0\u5f55\u6570"},"9.10.6.2 \u67e5\u8be2\u8bb0\u5f55\u6570"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar count = repository.Count();\n\n// \u793a\u4f8b\u4e8c\nvar count = repository.Count(u => u.Id > 10);\n\n// \u793a\u4f8b\u4e09\nvar count = repository.Entities.Count(u => u.Id > 10);\n\n// \u793a\u4f8b\u56db\nvar count = repository.Entities.DetachedEntities.Count();\n\n// \u793a\u4f8b\u4e94\nvar count = repository.Where(u => u.Id > 10).Count();\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar count = await repository.CountAsync();\n\n// \u793a\u4f8b\u4e8c\nvar count = await repository.CountAsync(u => u.Id > 10);\n\n// \u793a\u4f8b\u4e09\nvar count = await repository.Entities.CountAsync(u => u.Id > 10);\n\n// \u793a\u4f8b\u56db\nvar count = await repository.Entities.DetachedEntities.CountAsync();\n\n// \u793a\u4f8b\u4e94\nvar count = await repository.Where(u => u.Id > 10).CountAsync();\n")),(0,s.kt)("h3",{id:"91063-\u67e5\u8be2\u6700\u5927\u503c"},"9.10.6.3 \u67e5\u8be2\u6700\u5927\u503c"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar entity = repository.Max();\n\n// \u793a\u4f8b\u4e8c\nvar value = repository.Max(u => u.Id);\n\n// \u793a\u4f8b\u4e09\nvar entity = repository.Entities.Max();\n\n// \u793a\u4f8b\u56db\nvar value = repository.Entities.DetachedEntities.Max(u => u.Age);\n\n// \u793a\u4f8b\u4e94\nvar value = repository.Where(u => u.Id > 10).Max(u => u.Age);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar entity = await repository.MaxAsync();\n\n// \u793a\u4f8b\u4e8c\nvar value = await repository.MaxAsync(u => u.Id);\n\n// \u793a\u4f8b\u4e09\nvar entity = await repository.Entities.MaxAsync();\n\n// \u793a\u4f8b\u56db\nvar value = await repository.Entities.DetachedEntities.MaxAsync(u => u.Age);\n\n// \u793a\u4f8b\u4e94\nvar value = await repository.Where(u => u.Id > 10).MaxAsync(u => u.Age);\n")),(0,s.kt)("h3",{id:"91064-\u67e5\u8be2\u6700\u5c0f\u503c"},"9.10.6.4 \u67e5\u8be2\u6700\u5c0f\u503c"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar entity = repository.Min();\n\n// \u793a\u4f8b\u4e8c\nvar value = repository.Min(u => u.Id);\n\n// \u793a\u4f8b\u4e09\nvar entity = repository.Entities.Min();\n\n// \u793a\u4f8b\u56db\nvar value = repository.Entities.DetachedEntities.Min(u => u.Age);\n\n// \u793a\u4f8b\u4e94\nvar value = repository.Where(u => u.Id > 10).Min(u => u.Age);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar entity = await repository.MinAsync();\n\n// \u793a\u4f8b\u4e8c\nvar value = await repository.MinAsync(u => u.Id);\n\n// \u793a\u4f8b\u4e09\nvar entity = await repository.Entities.MinAsync();\n\n// \u793a\u4f8b\u56db\nvar value = await repository.Entities.DetachedEntities.MinAsync(u => u.Age);\n\n// \u793a\u4f8b\u4e94\nvar value = await repository.Where(u => u.Id > 10).MinAsync(u => u.Age);\n")),(0,s.kt)("h3",{id:"91065-\u6c42\u548c\u67e5\u8be2"},"9.10.6.5 \u6c42\u548c\u67e5\u8be2"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar sum = repository.Entities.Sum(u => u.Cost);\n\n// \u793a\u4f8b\u4e8c\nvar sum = repository.AsQueryable().Sum(u => u.Cost);\n\n// \u793a\u4f8b\u4e09\nvar sum = repository.DetachedEntities.Sum(u => u.Cost);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar sum = await repository.Entities.SumAsync(u => u.Cost);\n\n// \u793a\u4f8b\u4e8c\nvar sum = await repository.AsQueryable().SumAsync(u => u.Cost);\n\n// \u793a\u4f8b\u4e09\nvar sum = await repository.DetachedEntities.SumAsync(u => u.Cost);\n")),(0,s.kt)("h3",{id:"91066-\u6c42\u5e73\u5747\u503c\u67e5\u8be2"},"9.10.6.6 \u6c42\u5e73\u5747\u503c\u67e5\u8be2"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar sum = repository.Entities.Average(u => u.Cost);\n\n// \u793a\u4f8b\u4e8c\nvar sum = repository.AsQueryable().Average(u => u.Cost);\n\n// \u793a\u4f8b\u4e09\nvar sum = repository.DetachedEntities.Average(u => u.Cost);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar sum = await repository.Entities.AverageAsync(u => u.Cost);\n\n// \u793a\u4f8b\u4e8c\nvar sum = await repository.AsQueryable().AverageAsync(u => u.Cost);\n\n// \u793a\u4f8b\u4e09\nvar sum = await repository.DetachedEntities.AverageAsync(u => u.Cost);\n")),(0,s.kt)("h3",{id:"91067-\u65f6\u95f4\u67e5\u8be2"},"9.10.6.7 \u65f6\u95f4\u67e5\u8be2"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var starDate = DateTime.Parse("2020-09-10");\nvar endDate = DateTime.Parse("2020-09-10");\nvar query = repository.Where(u => u.CreatedDt >= starDate && u.CreatedDt <= endDate);\n')),(0,s.kt)("h3",{id:"91068-\u6a21\u7cca\u67e5\u8be2"},"9.10.6.8 \u6a21\u7cca\u67e5\u8be2"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u793a\u4f8b\u4e00\nrepository.Where(u => u.Name.StartsWith("Furion"));\n\n// \u793a\u4f8b\u4e8c\n_testRepository.Where(u => u.Name.EndsWith("Furion"));\n\n// \u793a\u4f8b\u4e09\n_testRepository.Where(u => u.Name.Contains("Furion"));\n')),(0,s.kt)("h3",{id:"91069-case-when"},"9.10.6.9 ",(0,s.kt)("inlineCode",{parentName:"h3"},"Case When")),(0,s.kt)("p",null,"\u6570\u636e\u5e93\u4e2d\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"Case When")," \u5b9e\u9645\u4e0a\u5bf9\u5e94\u7684\u662f\u6211\u4eec\u7a0b\u5e8f\u4e2d\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"\u4e09\u5143\u8868\u8fbe\u5f0f")," \uff0c\u4e5f\u5c31\u662f\u4f7f\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"\u4e09\u5143\u8868\u8fbe\u5f0f")," \u5373\u53ef\u81ea\u52a8\u751f\u6210 ",(0,s.kt)("inlineCode",{parentName:"p"},"Case When")," \u8bed\u53e5\u3002"),(0,s.kt)("h2",{id:"9107-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.10.7 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,s.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,s.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,s.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/2729f1a8.78bd5045.js b/handbook/build/assets/js/2729f1a8.78bd5045.js new file mode 100644 index 00000000000..b35563a3fdc --- /dev/null +++ b/handbook/build/assets/js/2729f1a8.78bd5045.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[3350],{3905:function(e,n,t){t.d(n,{Zo:function(){return s},kt:function(){return f}});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var c=r.createContext({}),u=function(e){var n=r.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},s=function(e){var n=u(e.components);return r.createElement(c.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),m=u(t),f=o,g=m["".concat(c,".").concat(f)]||m[f]||p[f]||i;return t?r.createElement(g,a(a({ref:n},s),{},{components:t})):r.createElement(g,a({ref:n},s))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=m;var l={};for(var c in n)hasOwnProperty.call(n,c)&&(l[c]=n[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var u=2;u();\n Console.WriteLine(helloService.SayHello());\n\n Console.WriteLine("=============");\n\n var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();\n Console.WriteLine(baidu);\n }\n }\n\n public interface IHelloService\n {\n string SayHello();\n }\n public class HelloService : IHelloService, ITransient\n {\n public string SayHello()\n {\n return "Hello Furion.";\n }\n }\n}\n')),(0,i.kt)("p",null,"\u4ee5\u4e0a\u4ee3\u7801\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"var services = Inject.Create();")," \u521b\u5efa\u4e00\u4e2a\u670d\u52a1\u96c6\u5408\uff0c\u6700\u540e\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"services.Build()")," \u5373\u53ef\u5b8c\u6210\u521d\u59cb\u5316\u3002"))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/2b75607b.85ce7563.js b/handbook/build/assets/js/2b75607b.85ce7563.js new file mode 100644 index 00000000000..8e1fce70fda --- /dev/null +++ b/handbook/build/assets/js/2b75607b.85ce7563.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9931],{3905:function(e,t,n){n.d(t,{Zo:function(){return p},kt:function(){return m}});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=r.createContext({}),d=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=d(e.components);return r.createElement(u.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,u=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=d(n),m=a,k=c["".concat(u,".").concat(m)]||c[m]||s[m]||i;return n?r.createElement(k,o(o({ref:t},p),{},{components:n})):r.createElement(k,o({ref:t},p))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=c;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var d=2;d\u8fde\u7eed GUID \u65b9\u5f0f",id:"2731-\u8fde\u7eed-guid-\u65b9\u5f0f",level:3},{value:"27.3.2 \u77ed ID",id:"2732-\u77ed-id",level:3},{value:"27.3.3 \u96ea\u82b1\u7b97\u6cd5 ID",id:"2733-\u96ea\u82b1\u7b97\u6cd5-id",level:3},{value:"27.4 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"274-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],c={toc:s};function m(e){var t=e.components,n=(0,a.Z)(e,o);return(0,i.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"271-\u4e3a\u4ec0\u4e48\u9700\u8981\u5206\u5e03\u5f0f-id"},"27.1 \u4e3a\u4ec0\u4e48\u9700\u8981\u5206\u5e03\u5f0f ID"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("inlineCode",{parentName:"p"},"\u5168\u5c40\u552f\u4e00\u6027"),": \u4e0d\u80fd\u51fa\u73b0\u91cd\u590d\u7684 ID \u53f7, \u65e2\u7136\u662f\u552f\u4e00\u6807\u8bc6, \u8fd9\u662f\u6700\u57fa\u672c\u7684\u8981\u6c42\u3002")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("inlineCode",{parentName:"p"},"\u8d8b\u52bf\u9012\u589e"),": \u5728 MySQL InnoDB \u5f15\u64ce\u4e2d\u4f7f\u7528\u7684\u662f\u805a\u96c6\u7d22\u5f15, \u7531\u4e8e\u591a\u6570 RDBMS \u4f7f\u7528 B-tree \u7684\u6570\u636e\u7ed3\u6784\u6765\u5b58\u50a8\u7d22\u5f15\u6570\u636e, \u5728\u4e3b\u952e\u7684\u9009\u62e9\u4e0a\u9762\u6211\u4eec\u5e94\u8be5\u5c3d\u91cf\u4f7f\u7528\u6709\u5e8f\u7684\u4e3b\u952e\u4fdd\u8bc1\u5199\u5165\u6027\u80fd\u3002")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("inlineCode",{parentName:"p"},"\u5355\u8c03\u9012\u589e"),": \u4fdd\u8bc1\u4e0b\u4e00\u4e2a ID \u4e00\u5b9a\u5927\u4e8e\u4e0a\u4e00\u4e2a ID, \u4f8b\u5982\u4e8b\u52a1\u7248\u672c\u53f7, IM \u589e\u91cf\u6d88\u606f, \u6392\u5e8f\u7b49\u7279\u6b8a\u9700\u6c42\u3002")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("inlineCode",{parentName:"p"},"\u4fe1\u606f\u5b89\u5168"),": \u5982\u679c ID \u662f\u8fde\u7eed\u7684, \u6076\u610f\u7528\u6237\u7684\u6252\u53d6\u5de5\u4f5c\u5c31\u975e\u5e38\u5bb9\u6613\u505a\u4e86, \u76f4\u63a5\u6309\u7167\u987a\u5e8f\u4e0b\u8f7d\u6307\u5b9a URL \u5373\u53ef; \u5982\u679c\u662f\u8ba2\u5355\u53f7\u5c31\u66f4\u5371\u9669\u4e86, \u7ade\u5bf9\u53ef\u4ee5\u76f4\u63a5\u77e5\u9053\u6211\u4eec\u4e00\u5929\u7684\u5355\u91cf\u3002 \u6240\u4ee5\u5728\u4e00\u4e9b\u5e94\u7528\u573a\u666f\u4e0b, \u4f1a\u9700\u8981 ID \u65e0\u89c4\u5219, \u4e0d\u89c4\u5219\u3002"))),(0,i.kt)("h2",{id:"272-\u5206\u5e03\u5f0f-id-\u6709\u54ea\u4e9b"},"27.2 \u5206\u5e03\u5f0f ID \u6709\u54ea\u4e9b"),(0,i.kt)("p",null,"\u5e38\u89c1\u7684\u5206\u5e03\u5f0f ID \u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u8fde\u7eed GUID"),"\u3001",(0,i.kt)("inlineCode",{parentName:"p"},"\u77ed ID"),"\u3001",(0,i.kt)("inlineCode",{parentName:"p"},"\u96ea\u82b1\u7b97\u6cd5 ID"),"\u3002"),(0,i.kt)("h2",{id:"273-\u5982\u4f55\u4f7f\u7528"},"27.3 \u5982\u4f55\u4f7f\u7528"),(0,i.kt)("h3",{id:"2731-\u8fde\u7eed-guid-\u65b9\u5f0f"},"27.3.1 ",(0,i.kt)("inlineCode",{parentName:"h3"},"\u8fde\u7eed GUID")," \u65b9\u5f0f"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u9759\u6001 ",(0,i.kt)("inlineCode",{parentName:"li"},"IDGen")," \u65b9\u5f0f")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var guid = IDGen.NextID();\n\n// \u8fd8\u53ef\u4ee5\u914d\u7f6e\u66f4\u591a\u53c2\u6570\nvar guid2 = IDGen.NextID(new SequentialGuidSettings { LittleEndianBinary16Format = true })); // SequentialGuidSettings \u53c2\u6570\u53d6\u51b3\u4e8e\u4f60\u7684\u5206\u5e03\u5f0fID\u7684\u5b9e\u73b0\n")),(0,i.kt)("admonition",{title:"\u7279\u522b\u63d0\u9192",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u5728\u5faa\u73af\u4e2d\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"IDGen")," \u9759\u6001\u7c7b\u65b9\u5f0f\uff0c\u6027\u80fd\u6700\u5dee\uff0c\u539f\u56e0\u662f\u5e95\u5c42\u4e0d\u65ad\u89e3\u6790\u670d\u52a1\u3002\u5982\u679c\u975e\u5faa\u73af\u4e2d\uff0c\u6027\u80fd\u7b49\u4e8e\u4e0b\u9762\u4e24\u79cd\u7528\u6cd5\u3002")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IDistributedIDGenerator")," \u6ce8\u5165\u65b9\u5f0f ",(0,i.kt)("strong",{parentName:"li"},"\u63a8\u8350"))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,6}",showLineNumbers:!0,"":!0,"{2,6}":!0},"private readonly IDistributedIDGenerator _idGenerator;\npublic AppServices(IDistributedIDGenerator idGenerator)\n{\n _idGenerator = idGenerator;\n\n var guidObject = _idGenerator.Create();\n}\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SequentialGuidIDGenerator")," \u65b9\u5f0f")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var idGen = new SequentialGuidIDGenerator();\nvar guid = idGen.Create();\n\n// \u66f4\u591a\u53c2\u6570\nvar idGen2 = new SequentialGuidIDGenerator();\nvar guid2 = idGen2.Create(new SequentialGuidSettings { LittleEndianBinary16Format = true });\n")),(0,i.kt)("h3",{id:"2732-\u77ed-id"},"27.3.2 ",(0,i.kt)("inlineCode",{parentName:"h3"},"\u77ed ID")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"\u77ed ID")," \u6309\u9053\u7406\u4e0d\u5e94\u8be5\u653e\u5728\u5206\u5e03\u5f0f ID \u751f\u6210\u8fd9\u4e2a\u7ae0\u8282\uff0c\u5b83\u7684\u4f5c\u7528\u7528\u9014\u5e38\u7528\u4e8e\u5e76\u53d1\u4e0d\u5f3a\u7684\u5185\u90e8\u7cfb\u7edf\u4e2d\uff0c\u6bd4\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u4efb\u52a1ID"),"\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Issue \u7f16\u53f7")," \u7b49\u7b49\u3002"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var shortid = ShortIDGen.NextID(); // \u751f\u6210\u4e00\u4e2a\u5305\u542b\u6570\u5b57\uff0c\u5b57\u6bcd\uff0c\u4e0d\u5305\u542b\u7279\u6b8a\u7b26\u53f7\u7684 8 \u4f4d\u77edid\n\n// \u6dfb\u52a0\u66f4\u591a\u914d\u7f6e\nvar shortid = ShortIDGen.NextID(new GenerationOptions {\n UseNumbers = false, // \u4e0d\u5305\u542b\u6570\u5b57\n UseSpecialCharacters = true, // \u5305\u542b\u7279\u6b8a\u7b26\u53f7\n Length = 8// \u8bbe\u7f6e\u957f\u5ea6\uff0c\u6ce8\u610f\uff1a\u4e0d\u8bbe\u7f6e\u6b21\u957f\u5ea6\u662f\u968f\u673a\u957f\u5ea6\uff01\uff01\uff01\uff01\uff01\uff01\uff01\n});\n\n// \u81ea\u5b9a\u4e49\u751f\u6210\u77ed ID \u53c2\u4e0e\u8fd0\u7b97\u5b57\u7b26\nstring characters = "\u24b6\u24b7\u24b8\u24b9\u24ba\u24bb\u24bc\u24bd\u24be\u24bf\u24c0\u24c1\u24c2\u24c3\u24c4\u24c5\u24c6\u24c7\u24c8\u24c9\u24ca\u24cb\u24cc\u24cd\u24ce\u24cf\u24d0\u24d1\u24d2\u24d3\u24d4\u24d5\u24d6\u24d7\u24d8\u24d9\u24da\u24db\u24dc\u24dd\u24de\u24df\u24e0\u24e1\u24e2\u24e3\u24e4\u24e5\u24e6\u24e7\u24e8\u24e9\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469\u246a\u246b"; //whatever you want;\nShortIDGen.SetCharacters(characters);\n\n// \u81ea\u5b9a\u4e49\u968f\u673a\u6570\uff08for\uff09\u6b65\u957f\nint seed = 1939048828;\nShortIDGen.SetSeed(seed);\n\n// \u91cd\u8f7d\u6240\u6709\u81ea\u5b9a\u4e49\u914d\u7f6e\nShortIDGen.Reset();\n')),(0,i.kt)("h3",{id:"2733-\u96ea\u82b1\u7b97\u6cd5-id"},"27.3.3 ",(0,i.kt)("inlineCode",{parentName:"h3"},"\u96ea\u82b1\u7b97\u6cd5 ID")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u5728\u6700\u65b0\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"2.1 +")," \u7248\u672c\u79fb\u9664\u4e86",(0,i.kt)("inlineCode",{parentName:"p"},"\u96ea\u82b1\u7b97\u6cd5 ID")," \u529f\u80fd\uff0c\u539f\u56e0\u662f\uff1a"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u76ee\u524d\uff0c",(0,i.kt)("inlineCode",{parentName:"strong"},"\u96ea\u82b1\u7b97\u6cd5 ID")," \u4f7f\u7528\u9891\u7387\u4e0d\u9ad8\uff0c\u800c\u4e14\u5b9e\u73b0 ",(0,i.kt)("inlineCode",{parentName:"strong"},"\u96ea\u82b1\u7b97\u6cd5 ID")," \u7684\u65b9\u5f0f\u4e5f\u662f\u5343\u5dee\u4e07\u522b\uff0c\u6240\u4ee5\u6846\u67b6\u79fb\u9664\u8be5\u529f\u80fd\uff0c\u91c7\u7528\u62d3\u5c55\u6216\u81ea\u96c6\u6210\u65b9\u5f0f\u3002")),(0,i.kt)("h2",{id:"274-\u53cd\u9988\u4e0e\u5efa\u8bae"},"27.4 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,i.kt)("hr",null))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/2b85edf2.b1c4f393.js b/handbook/build/assets/js/2b85edf2.b1c4f393.js new file mode 100644 index 00000000000..6c6e9eae77d --- /dev/null +++ b/handbook/build/assets/js/2b85edf2.b1c4f393.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8980],{3905:function(e,n,t){t.d(n,{Zo:function(){return p},kt:function(){return d}});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),u=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=u(e.components);return a.createElement(s.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(t),d=r,k=c["".concat(s,".").concat(d)]||c[d]||m[d]||o;return t?a.createElement(k,i(i({ref:n},p),{},{components:t})):a.createElement(k,i({ref:n},p))}));function d(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=c;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var u=2;u child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})),v=null!=k?k:b.map((function(e){var n=e.props;return{value:n.value,label:n.label,attributes:n.attributes}})),C=(0,l.l)(v,(function(e,n){return e.value===n.value}));if(C.length>0)throw new Error('Docusaurus error: Duplicate values "'+C.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.');var g=null===d?d:null!=(n=null!=d?d:null==(t=b.find((function(e){return e.props.default})))?void 0:t.props.value)?n:b[0].props.value;if(null!==g&&!v.some((function(e){return e.value===g})))throw new Error('Docusaurus error: The has a defaultValue "'+g+'" but none of its children has the corresponding value. Available values are: '+v.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");var y=(0,s.U)(),h=y.tabGroupChoices,O=y.setTabGroupChoices,w=(0,r.useState)(g),x=w[0],T=w[1],S=[],U=(0,u.o5)().blockElementScrollPositionUntilNextRender;if(null!=f){var E=h[f];null!=E&&E!==x&&v.some((function(e){return e.value===E}))&&T(E)}var A=function(e){var n=e.currentTarget,t=S.indexOf(n),a=v[t].value;a!==x&&(U(n),T(a),null!=f&&O(f,String(a)))},D=function(e){var n,t=null;switch(e.key){case"Enter":A(e);break;case"ArrowRight":var a,r=S.indexOf(e.currentTarget)+1;t=null!=(a=S[r])?a:S[0];break;case"ArrowLeft":var o,i=S.indexOf(e.currentTarget)-1;t=null!=(o=S[i])?o:S[S.length-1]}null==(n=t)||n.focus()};return r.createElement("div",{className:(0,o.Z)("tabs-container",p)},r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":c},N)},v.map((function(e){var n=e.value,t=e.label,i=e.attributes;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:x===n?0:-1,"aria-selected":x===n,key:n,ref:function(e){return S.push(e)},onKeyDown:D,onClick:A},i,{className:(0,o.Z)("tabs__item",m,null==i?void 0:i.className,{"tabs__item--active":x===n})}),null!=t?t:n)}))),i?(0,r.cloneElement)(b.filter((function(e){return e.props.value===x}))[0],{className:"margin-top--md"}):r.createElement("div",{className:"margin-top--md"},b.map((function(e,n){return(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==x})}))))}function d(e){var n=(0,i.Z)();return r.createElement(c,(0,a.Z)({key:String(n)},e))}},4390:function(e,n,t){t.r(n),t.d(n,{assets:function(){return c},contentTitle:function(){return p},default:function(){return f},frontMatter:function(){return u},metadata:function(){return m},toc:function(){return d}});var a=t(3117),r=t(102),o=(t(7294),t(3905)),i=(t(4996),t(5488)),l=t(5162),s=["components"],u={id:"tran",title:"9.26 \u4e8b\u52a1\u548c\u5de5\u4f5c\u5355\u5143",sidebar_label:"9.26 \u4e8b\u52a1\u548c\u5de5\u4f5c\u5355\u5143 (UnitOfWork)"},p=void 0,m={unversionedId:"tran",id:"tran",title:"9.26 \u4e8b\u52a1\u548c\u5de5\u4f5c\u5355\u5143",description:"",source:"@site/docs/tran.mdx",sourceDirName:".",slug:"/tran",permalink:"/docs/tran",draft:!1,editUrl:"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/docs/tran.mdx",tags:[],version:"current",lastUpdatedBy:"ir0nmax",lastUpdatedAt:1668900704,formattedLastUpdatedAt:"Nov 19, 2022",frontMatter:{id:"tran",title:"9.26 \u4e8b\u52a1\u548c\u5de5\u4f5c\u5355\u5143",sidebar_label:"9.26 \u4e8b\u52a1\u548c\u5de5\u4f5c\u5355\u5143 (UnitOfWork)"},sidebar:"docs",previous:{title:"9.25. \u5b9e\u4f53\u6570\u636e\u76d1\u542c\u5668",permalink:"/docs/dbcontext-entitytrigger"},next:{title:"9.27 \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236",permalink:"/docs/dbcontext-read-write"}},c={},d=[{value:"9.26.1 \u4e8b\u52a1",id:"9261-\u4e8b\u52a1",level:2},{value:"9.26.2 \u5de5\u4f5c\u5355\u5143",id:"9262-\u5de5\u4f5c\u5355\u5143",level:2},{value:"9.26.3 \u5982\u4f55\u4f7f\u7528",id:"9263-\u5982\u4f55\u4f7f\u7528",level:2},{value:"9.26.3.1 [UnitOfWork] \u81ea\u52a8\u7ba1\u7406",id:"92631-unitofwork-\u81ea\u52a8\u7ba1\u7406",level:3},{value:"9.26.3.2 EnsureTransaction() \u65b9\u6cd5 \u2728",id:"92632-ensuretransaction-\u65b9\u6cd5-",level:3},{value:"9.26.3.2 \u624b\u52a8\u7ba1\u7406",id:"92632-\u624b\u52a8\u7ba1\u7406",level:3},{value:"9.26.4 \u5de5\u4f5c\u5355\u5143\u7279\u6027\u8bf4\u660e",id:"9264-\u5de5\u4f5c\u5355\u5143\u7279\u6027\u8bf4\u660e",level:2},{value:"9.26.4.1 [UnitOfWork] \u7279\u6027",id:"92641-unitofwork-\u7279\u6027",level:3},{value:"9.26.4.2 [ManualCommit] \u7279\u6027",id:"92642-manualcommit-\u7279\u6027",level:3},{value:"9.26.5 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"9265-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],k={toc:d};function f(e){var n=e.components,t=(0,r.Z)(e,s);return(0,o.kt)("wrapper",(0,a.Z)({},k,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"9261-\u4e8b\u52a1"},"9.26.1 \u4e8b\u52a1"),(0,o.kt)("p",null,"\u4e8b\u52a1\u6307\u4f5c\u4e3a\u5355\u4e2a\u903b\u8f91\u5de5\u4f5c\u5355\u5143\u6267\u884c\u7684\u4e00\u7cfb\u5217\u64cd\u4f5c\uff0c\u8981\u4e48",(0,o.kt)("strong",{parentName:"p"},"\u5b8c\u5168\u5730\u6267\u884c\uff0c\u8981\u4e48\u5b8c\u5168\u5730\u4e0d\u6267\u884c"),"\u3002"),(0,o.kt)("p",null,"\u7b80\u5355\u7684\u8bf4\uff0c\u4e8b\u52a1\u5c31\u662f\u5e76\u53d1\u63a7\u5236\u7684\u5355\u4f4d\uff0c\u662f\u7528\u6237\u5b9a\u4e49\u7684\u4e00\u4e2a\u64cd\u4f5c\u5e8f\u5217\u3002 \u800c\u4e00\u4e2a\u903b\u8f91\u5de5\u4f5c\u5355\u5143\u8981\u6210\u4e3a\u4e8b\u52a1\uff0c\u5c31\u5fc5\u987b\u6ee1\u8db3 ",(0,o.kt)("inlineCode",{parentName:"p"},"ACID")," \u5c5e\u6027\u3002"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"A"),"\uff1a\u539f\u5b50\u6027\uff08Atomicity\uff09\uff1a\u4e8b\u52a1\u4e2d\u7684\u64cd\u4f5c\u8981\u4e48\u90fd\u4e0d\u505a\uff0c\u8981\u4e48\u5c31\u5168\u505a"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"C"),"\uff1a\u4e00\u81f4\u6027\uff08Consistency\uff09\uff1a\u4e8b\u52a1\u6267\u884c\u7684\u7ed3\u679c\u5fc5\u987b\u662f\u4ece\u6570\u636e\u5e93\u4ece\u4e00\u4e2a\u4e00\u81f4\u6027\u72b6\u6001\u8f6c\u6362\u5230\u53e6\u4e00\u4e2a\u4e00\u81f4\u6027\u72b6\u6001"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"I"),"\uff1a\u9694\u79bb\u6027\uff08Isolation\uff09\uff1a\u4e00\u4e2a\u4e8b\u52a1\u7684\u6267\u884c\u4e0d\u80fd\u88ab\u5176\u4ed6\u4e8b\u52a1\u5e72\u6270"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"D"),"\uff1a\u6301\u4e45\u6027\uff08Durability\uff09\uff1a\u4e00\u4e2a\u4e8b\u52a1\u4e00\u65e6\u63d0\u4ea4\uff0c\u5b83\u5bf9\u6570\u636e\u5e93\u4e2d\u6570\u636e\u7684\u6539\u53d8\u5c31\u5e94\u8be5\u662f\u6c38\u4e45\u6027\u7684")),(0,o.kt)("h2",{id:"9262-\u5de5\u4f5c\u5355\u5143"},"9.26.2 \u5de5\u4f5c\u5355\u5143"),(0,o.kt)("p",null,"\u7b80\u5355\u6765\u8bf4\uff0c\u5c31\u662f\u4e3a\u4e86\u4fdd\u8bc1\u4e00\u6b21\u5b8c\u6574\u7684\u529f\u80fd\u64cd\u4f5c\u6240\u4ea7\u751f\u7684\u4e00\u7cfb\u5217\u63d0\u4ea4\u6570\u636e\u7684\u5b8c\u6574\u6027\uff0c\u8d77\u7740\u4e8b\u52a1\u7684\u4f5c\u7528\u3002\u5728\u8ba1\u7b97\u673a\u9886\u57df\u4e2d\uff0c\u5de5\u4f5c\u5355\u5143\u901a\u5e38\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"UnitOfWork")," \u540d\u79f0\u8868\u793a\u3002"),(0,o.kt)("p",null,"\u901a\u5e38\u6211\u4eec\u4fdd\u8bc1\u7528\u6237\u7684\u6bcf\u4e00\u6b21\u8bf7\u6c42\u90fd\u662f\u5904\u4e8e\u5728\u4e00\u4e2a\u529f\u80fd\u5355\u5143\u4e2d\uff0c\u4e5f\u5c31\u662f\u5de5\u4f5c\u5355\u5143\u3002"),(0,o.kt)("h2",{id:"9263-\u5982\u4f55\u4f7f\u7528"},"9.26.3 \u5982\u4f55\u4f7f\u7528"),(0,o.kt)("h3",{id:"92631-unitofwork-\u81ea\u52a8\u7ba1\u7406"},"9.26.3.1 ",(0,o.kt)("inlineCode",{parentName:"h3"},"[UnitOfWork]")," \u81ea\u52a8\u7ba1\u7406"),(0,o.kt)("p",null,"\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728\u63a7\u5236\u5668 Action \u4e2d\u8d34 ",(0,o.kt)("inlineCode",{parentName:"p"},"[UnitOfWork]")," \u7279\u6027\u5373\u53ef\u5f00\u542f\u5de5\u4f5c\u5355\u5143\u6a21\u5f0f\uff0c\u4fdd\u8bc1\u4e86\u6bcf\u4e00\u6b21\u8bf7\u6c42\u90fd\u662f\u4e00\u4e2a ",(0,o.kt)("inlineCode",{parentName:"p"},"\u5de5\u4f5c\u5355\u5143"),"\uff0c\u8981\u4e48\u540c\u65f6\u6210\u529f\uff0c\u8981\u4e48\u540c\u65f6\u5931\u8d25\u3002"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"\u5355\u5e93\u64cd\u4f5c"))),(0,o.kt)("p",null,"\u4e0b\u9762\u65b9\u5f0f\u652f\u6301\u6240\u6709\u5173\u7cfb\u578b\u6570\u636e\u5e93\u7c7b\u578b"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},'[UnitOfWork] // \u7531\u4e8e\u51fa\u73b0\u9519\u8bef\uff0c\u6240\u4ee5\u6240\u6709\u6570\u636e\u5e93\u53d8\u66f4\u90fd\u4f1a\u81ea\u52a8\u56de\u6eda\npublic async Task \u6d4b\u8bd5\u73af\u5883\u4e8b\u52a1(int id)\n{\n // \u5404\u79cd\u5947\u8469\u6570\u636e\u5e93\u64cd\u4f5c\n await _personRepository.DeleteNowAsync(id);\n\n // \u5176\u4ed6\u6570\u636e\u5e93\u64cd\u4f5c\u3002\u3002\n\n // \u6545\u610f\u51fa\u9519\n var d = await _personRepository.SqlQueriesAsync("select * from persion2 d");\n}\n')),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"\u591a\u5e93\u64cd\u4f5c"))),(0,o.kt)("p",null,"\u652f\u6301\u5404\u79cd\u5947\u8469\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"ORM"),"\uff0c\u5305\u62ec ",(0,o.kt)("inlineCode",{parentName:"p"},"ADO.NET"),"\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"EFCore")," \u7b49\u7b2c\u4e09\u65b9\uff0c",(0,o.kt)("strong",{parentName:"p"},"\u652f\u6301\u6240\u6709\u5173\u7cfb\u578b\u6570\u636e\u5e93\u7c7b\u578b\u4f46\u4e0d\u652f\u6301 ",(0,o.kt)("inlineCode",{parentName:"strong"},"Sqlite"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'[UnitOfWork(UseAmbientTransaction = true)] // \u7531\u4e8e\u51fa\u73b0\u9519\u8bef\uff0c\u6240\u4ee5\u6240\u6709\u6570\u636e\u5e93\u53d8\u66f4\u90fd\u4f1a\u81ea\u52a8\u56de\u6eda\npublic async Task \u6d4b\u8bd5\u73af\u5883\u4e8b\u52a1(int id)\n{\n // \u5404\u79cd\u5947\u8469\u6570\u636e\u5e93\u64cd\u4f5c\n await _personRepository.DeleteNowAsync(id);\n\n // \u5176\u4ed6\u6570\u636e\u5e93\u64cd\u4f5c\u3002\u3002\n\n // \u6545\u610f\u51fa\u9519\n var d = await _personRepository.SqlQueriesAsync("select * from persion2 d");\n}\n')),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"UnitOfWork")," \u5185\u7f6e\u914d\u7f6e\uff1a",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"UseAmbientTransaction"),"\uff1a\u662f\u5426\u5f00\u542f\u5206\u5e03\u5f0f\u73af\u5883\u4e8b\u52a1\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"li"},"false"),"\uff0c",(0,o.kt)("strong",{parentName:"li"},"\u4e0d\u652f\u6301 ",(0,o.kt)("inlineCode",{parentName:"strong"},"Sqlite"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"TransactionScope"),"\uff1a\u914d\u7f6e\u5206\u5e03\u5f0f\u73af\u5883\u4e8b\u52a1\u8303\u56f4\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"TransactionScopeOption")," \u7c7b\u578b\uff0c\u5f53 ",(0,o.kt)("inlineCode",{parentName:"li"},"UseAmbientTransaction")," \u4e3a ",(0,o.kt)("inlineCode",{parentName:"li"},"true")," \u6709\u6548"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"TransactionIsolationLevel"),"\uff1a\u914d\u7f6e\u5206\u5e03\u5f0f\u73af\u5883\u4e8b\u52a1\u9694\u79bb\u7ea7\u522b\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"IsolationLevel")," \u7c7b\u578b\uff0c\u5f53 ",(0,o.kt)("inlineCode",{parentName:"li"},"UseAmbientTransaction")," \u4e3a ",(0,o.kt)("inlineCode",{parentName:"li"},"true")," \u6709\u6548"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"TransactionTimeout"),"\uff1a\u914d\u7f6e\u5206\u5e03\u5f0f\u73af\u5883\u4e8b\u52a1\u6267\u884c\u8d85\u65f6\u65f6\u95f4\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"int")," \u7c7b\u578b\uff0c\u5f53 ",(0,o.kt)("inlineCode",{parentName:"li"},"UseAmbientTransaction")," \u4e3a ",(0,o.kt)("inlineCode",{parentName:"li"},"true")," \u6709\u6548"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"TransactionScopeAsyncFlow"),"\uff1a\u914d\u7f6e\u5206\u5e03\u5f0f\u73af\u5883\u4e8b\u52a1\u5f02\u6b65\u6d41\u652f\u6301\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"TransactionScopeAsyncFlowOption")," \u7c7b\u578b\uff0c\u5f53 ",(0,o.kt)("inlineCode",{parentName:"li"},"UseAmbientTransaction")," \u4e3a ",(0,o.kt)("inlineCode",{parentName:"li"},"true")," \u6709\u6548"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"EnsureTransaction"),"\uff1a\u5f3a\u5236\u4f7f\u5b57\u7b26\u4e32 ",(0,o.kt)("inlineCode",{parentName:"li"},"sql")," \u62d3\u5c55\u4e8b\u52a1\u6709\u6548\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"li"},"false"))))),(0,o.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion 3.7.3 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,o.kt)("p",null,"\u5982\u4f7f\u7528\u975e ",(0,o.kt)("inlineCode",{parentName:"p"},"EFCore")," ORM \u6846\u67b6\uff0c\u53ef\u5b9e\u73b0 ",(0,o.kt)("inlineCode",{parentName:"p"},"IUnitOfWork")," \u63a5\u53e3\u4e4b\u540e\u8c03\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"services.AddUnitOfWork()")," \u6ce8\u518c\u5373\u53ef\uff0c\u5982\u793a\u4f8b\u4ee3\u7801\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8,30,41,52,63}",showLineNumbers:!0,"{8,30,41,52,63}":!0},'using Microsoft.AspNetCore.Mvc.Filters;\n\nnamespace Furion.DatabaseAccessor;\n\n/// \n/// SqlSugar \u5de5\u4f5c\u5355\u5143\u5b9e\u73b0\n/// \npublic sealed class SqlSugarUnitOfWork : IUnitOfWork\n{\n /// \n /// SqlSugar \u5bf9\u8c61\n /// \n private readonly ISqlSugarClient _sqlSugarClient;\n\n /// \n /// \u6784\u9020\u51fd\u6570\n /// \n /// \n public SqlSugarUnitOfWork(ISqlSugarClient sqlSugarClient)\n {\n _sqlSugarClient = sqlSugarClient;\n }\n\n /// \n /// \u5f00\u542f\u5de5\u4f5c\u5355\u5143\u5904\u7406\n /// \n /// \n /// \n /// \n public void BeginTransaction(FilterContext context, UnitOfWorkAttribute unitOfWork)\n {\n _sqlSugarClient.AsTenant().BeginTran();\n }\n\n /// \n /// \u63d0\u4ea4\u5de5\u4f5c\u5355\u5143\u5904\u7406\n /// \n /// \n /// \n /// \n public void CommitTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork)\n {\n _sqlSugarClient.AsTenant().CommitTran();\n }\n\n /// \n /// \u56de\u6eda\u5de5\u4f5c\u5355\u5143\u5904\u7406\n /// \n /// \n /// \n /// \n public void RollbackTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork)\n {\n _sqlSugarClient.AsTenant().RollbackTran();\n }\n\n /// \n /// \u6267\u884c\u5b8c\u6bd5\uff08\u65e0\u8bba\u6210\u529f\u5931\u8d25\uff09\n /// \n /// \n /// \n /// \n public void OnCompleted(FilterContext context, FilterContext resultContext)\n {\n _sqlSugarClient.Dispose();\n }\n}\n')),(0,o.kt)("p",null,"\u4e4b\u540e\u6ce8\u518c\u5373\u53ef\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddUnitOfWork();\n")),(0,o.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6-\u5982\u4f55\u5224\u65ad\u662f\u5426\u5f00\u542f\u4e86\u5206\u5e03\u5f0f\u73af\u5883\u4e8b\u52a1",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u6709\u65f6\u5019\u6211\u4eec\u81ea\u5b9a\u4e49\u4e86\u5de5\u4f5c\u5355\u5143\u4e4b\u540e\uff0c\u4e2a\u522b ",(0,o.kt)("inlineCode",{parentName:"p"},"ORM")," \u4e0d\u652f\u6301\u5206\u5e03\u5f0f\u73af\u5883\u4e8b\u52a1\uff0c\u90a3\u4e48\u5c31\u4f1a\u51fa\u73b0\u6267\u884c\u9519\u8bef\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"System.Transactions.Transaction.Current != null")," \u6765\u5224\u65ad\u662f\u5426\u542f\u7528\u4e86\u5206\u5e03\u5f0f\u73af\u5883\u4e8b\u52a1\uff0c\u4e0d\u7b49\u4e8e ",(0,o.kt)("inlineCode",{parentName:"p"},"null")," \u5219\u4e3a\u542f\u7528\uff0c\u5426\u5219\u672a\u542f\u7528\u3002")),(0,o.kt)("h3",{id:"92632-ensuretransaction-\u65b9\u6cd5-"},"9.26.3.2 ",(0,o.kt)("inlineCode",{parentName:"h3"},"EnsureTransaction()")," \u65b9\u6cd5 \u2728"),(0,o.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\u6211\u4eec\u901a\u8fc7\u9759\u6001\u7c7b\u6216\u8005\u5176\u4ed6\u65b9\u5f0f\u4e0d\u5c0f\u5fc3\u521b\u5efa\u4e86\u65b0\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"DbContext")," \u5b9e\u4f8b\uff0c\u8fd9\u65f6\u5019\u8d34\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"[UnitOfWork]")," \u4e5f\u4e0d\u89c1\u8d77\u6548\uff0c\u8fd9\u65f6\u5019\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u6cd5\u6765\u786e\u8ba4\u4e8b\u52a1\u662f\u5426\u6709\u6548\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"repository.EnsureTransaction();\n")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u5982\u679c\u4e0d\u559c\u6b22\u624b\u52a8\u65b9\u5f0f\u4e5f\u53ef\u4ee5\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"strong"},"[UnitOfWork(true)]")," \u5f00\u542f\u6b64\u529f\u80fd\u3002")),(0,o.kt)("p",null,"\u8be5\u65b9\u6cd5\u4f1a\u5c06\u5f53\u524d\u4ed3\u50a8\u6dfb\u52a0\u5230\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6c60\u4e2d\uff0c\u5e76\u786e\u4fdd\u4e8b\u52a1\u53ef\u7528\u3002"),(0,o.kt)("h3",{id:"92632-\u624b\u52a8\u7ba1\u7406"},"9.26.3.2 \u624b\u52a8\u7ba1\u7406"),(0,o.kt)(i.Z,{defaultValue:"one",values:[{label:"\u793a\u4f8b\u4e00",value:"one"},{label:"\u793a\u4f8b\u4e8c",value:"two"},{label:"\u793a\u4f8b\u4e09\uff08\u5206\u5e03\u5f0f\uff09",value:"three"}],mdxType:"Tabs"},(0,o.kt)(l.Z,{value:"one",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u5f00\u542f\u4e8b\u52a1\nusing (var transaction = _testRepository.Database.BeginTransaction())\n{\n try\n {\n _testRepository.Insert(new Blog { Url = "http://blogs.msdn.com/dotnet" });\n _testRepository.SaveNow();\n\n _testRepository.Insert(new Blog { Url = "http://blogs.msdn.com/visualstudio" });\n _testRepository.SaveNow();\n\n var blogs = _testRepository.Entity\n .OrderBy(b => b.Url)\n .ToList();\n\n // \u63d0\u4ea4\u4e8b\u52a1\n transaction.Commit();\n }\n catch (Exception)\n {\n // \u56de\u6eda\u4e8b\u52a1\n // transaction.RollBack(); // \u65b0\u7248\u672c\u81ea\u52a8\u56de\u6eda\u4e86\n }\n}\n'))),(0,o.kt)(l.Z,{value:"two",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var options = new DbContextOptionsBuilder()\n .UseSqlServer(new SqlConnection(connectionString))\n .Options;\n\n// \u521b\u5efa\u8fde\u63a5\u5b57\u7b26\u4e32\nusing (var context1 = new DefaultDbContext(options))\n{\n // \u5f00\u542f\u4e8b\u52a1\n using (var transaction = context1.Database.BeginTransaction())\n {\n try\n {\n _testRepository.Insert(new Blog { Url = "http://blogs.msdn.com/dotnet" });\n _testRepository.SaveNow();\n\n context1.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" });\n context1.SaveChanges();\n\n // \u521b\u5efa\u65b0\u7684\u8fde\u63a5\u5bf9\u8c61\n using (var context2 = new DefaultDbContext(options))\n {\n // \u5171\u4eab\u8fde\u63a5\u4e8b\u52a1\n context2.Database.UseTransaction(transaction.GetDbTransaction());\n\n var blogs = context2.Blogs\n .OrderBy(b => b.Url)\n .ToList();\n }\n\n // \u63d0\u4ea4\u4e8b\u52a1\n transaction.Commit();\n }\n catch (Exception)\n {\n // \u56de\u6eda\u4e8b\u52a1\n // transaction.RollBack(); // \u65b0\u7248\u672c\u81ea\u52a8\u56de\u6eda\u4e86\n }\n }\n}\n'))),(0,o.kt)(l.Z,{value:"three",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-3}",showLineNumbers:!0,"":!0,"{1-3}":!0},'// \u5f00\u542f\u5206\u5e03\u5f0f\u4e8b\u52a1\n// \u5982\u679c\u4e8b\u52a1\u5305\u88f9\u7684\u4ee3\u7801\u4e2d\u5305\u542b\u5f02\u6b65 async/await\uff0c\u90a3\u4e48\u9700\u8981\u8bbe\u7f6e TransactionScopeAsyncFlowOption.Enabled = true\nusing (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted }))\n{\n using (var connection = new SqlConnection(connectionString))\n {\n connection.Open();\n\n try\n {\n // \u8fd9\u91cc\u662f Ado.NET \u64cd\u4f5c\n var command = connection.CreateCommand();\n command.CommandText = "DELETE FROM dbo.Blogs";\n command.ExecuteNonQuery();\n\n // \u521b\u5efaEF Core \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\n var options = new DbContextOptionsBuilder()\n .UseSqlServer(connection)\n .Options;\n using (var context = new BloggingContext(options))\n {\n context.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/dotnet" });\n context.SaveChanges();\n }\n\n // \u6846\u67b6\u5c01\u88c5\u7684\u4ed3\u50a8\n _testRepository.Insert(new Blog { Url = "http://blogs.msdn.com/dotnet" });\n _testRepository.SaveChanges();\n\n // \u63d0\u4ea4\u4e8b\u52a1\n scope.Complete();\n }\n catch (System.Exception)\n {\n // \u81ea\u52a8\u56de\u6eda\n }\n }\n}\n')))),(0,o.kt)("h2",{id:"9264-\u5de5\u4f5c\u5355\u5143\u7279\u6027\u8bf4\u660e"},"9.26.4 \u5de5\u4f5c\u5355\u5143\u7279\u6027\u8bf4\u660e"),(0,o.kt)("h3",{id:"92641-unitofwork-\u7279\u6027"},"9.26.4.1 ",(0,o.kt)("inlineCode",{parentName:"h3"},"[UnitOfWork]")," \u7279\u6027"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"[UnitOfWork]")," \u7279\u6027\u53ea\u80fd\u7528\u4e8e\u63a7\u5236\u5668\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"Action")," \u4e2d\uff0c\u4e00\u65e6\u8d34\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"[UnitOfWork]")," \u7279\u6027\u540e\uff0c\u90a3\u4e48\u8be5\u8bf7\u6c42\u81ea\u52a8\u542f\u7528\u5de5\u4f5c\u5355\u5143\u6a21\u5f0f\uff0c\u8981\u4e48\u6210\u529f\uff0c\u8981\u4e48\u5931\u8d25\u3002"),(0,o.kt)("h3",{id:"92642-manualcommit-\u7279\u6027"},"9.26.4.2 ",(0,o.kt)("inlineCode",{parentName:"h3"},"[ManualCommit]")," \u7279\u6027"),(0,o.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4f1a\u5728\u4e00\u6b21\u6210\u529f\u8bf7\u6c42\u4e4b\u540e\u81ea\u52a8\u8c03\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"SaveChanges()")," \u65b9\u6cd5\uff0c\u5982\u679c\u9009\u62e9\u624b\u52a8\u8c03\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"SaveChanges()")," \u65b9\u6cd5\uff0c\u53ef\u4ee5\u5728\u63a7\u5236\u5668 ",(0,o.kt)("inlineCode",{parentName:"p"},"Action")," \u4e2d\u8d34 ",(0,o.kt)("inlineCode",{parentName:"p"},"[ManualCommit]")," \u7279\u6027\u5373\u53ef\u3002"),(0,o.kt)("h2",{id:"9265-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.26.5 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,o.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,o.kt)("hr",null),(0,o.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,o.kt)("inlineCode",{parentName:"p"},"\u4e8b\u52a1")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,o.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/ef/core/saving/transactions"},"EF Core - \u4f7f\u7528\u4e8b\u52a1")," \u7ae0\u8282\u3002")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/2d0eddae.be39dc12.js b/handbook/build/assets/js/2d0eddae.be39dc12.js new file mode 100644 index 00000000000..e29212b6b5a --- /dev/null +++ b/handbook/build/assets/js/2d0eddae.be39dc12.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9898],{2384:function(a){a.exports=JSON.parse('{"label":"furion","permalink":"/blog/tags/furion","allTagsPath":"/blog/tags","count":7}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/2e8c9594.140d7688.js b/handbook/build/assets/js/2e8c9594.140d7688.js new file mode 100644 index 00000000000..3191a1c31ac --- /dev/null +++ b/handbook/build/assets/js/2e8c9594.140d7688.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[3116],{9911:function(t){t.exports=JSON.parse('{"label":"httpcontext","permalink":"/blog/tags/httpcontext","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/333d5a2c.6a1caacb.js b/handbook/build/assets/js/333d5a2c.6a1caacb.js new file mode 100644 index 00000000000..b57e7dd0fe7 --- /dev/null +++ b/handbook/build/assets/js/333d5a2c.6a1caacb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4184],{2776:function(s){s.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/3427cf63.552848b5.js b/handbook/build/assets/js/3427cf63.552848b5.js new file mode 100644 index 00000000000..c820bde1245 --- /dev/null +++ b/handbook/build/assets/js/3427cf63.552848b5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[841],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return m}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=r.createContext({}),p=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},s=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,u=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),s=p(n),m=o,f=s["".concat(u,".").concat(m)]||s[m]||d[m]||i;return n?r.createElement(f,l(l({ref:t},c),{},{components:n})):r.createElement(f,l({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,l=new Array(i);l[0]=s;var a={};for(var u in t)hasOwnProperty.call(t,u)&&(a[u]=t[u]);a.originalType=e,a.mdxType="string"==typeof e?e:o,l[1]=a;for(var p=2;p=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),f=p(r),d=o,b=f["".concat(c,".").concat(d)]||f[d]||s[d]||a;return r?n.createElement(b,i(i({ref:t},u),{},{components:r})):n.createElement(b,i({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p();\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/3653278d.58c66f49.js b/handbook/build/assets/js/3653278d.58c66f49.js new file mode 100644 index 00000000000..66b21fb226b --- /dev/null +++ b/handbook/build/assets/js/3653278d.58c66f49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7132],{3905:function(e,n,t){t.d(n,{Zo:function(){return c},kt:function(){return d}});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),u=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},c=function(e){var n=u(e.components);return r.createElement(l.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=u(t),d=o,y=m["".concat(l,".").concat(d)]||m[d]||p[d]||i;return t?r.createElement(y,a(a({ref:n},c),{},{components:t})):r.createElement(y,a({ref:n},c))}));function d(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,a[1]=s;for(var u=2;uSQL",id:"91221-\u521b\u5efa\u89c6\u56fe-sql",level:3},{value:"9.12.2.2 \u89c6\u56fe\u6a21\u578b",id:"91222-\u89c6\u56fe\u6a21\u578b",level:3},{value:"9.12.3 \u89c6\u56fe\u4f7f\u7528",id:"9123-\u89c6\u56fe\u4f7f\u7528",level:2},{value:"9.12.4 \u89c6\u56fe\u6700\u4f73\u8bfb\u53d6\u65b9\u5f0f \u2714",id:"9124-\u89c6\u56fe\u6700\u4f73\u8bfb\u53d6\u65b9\u5f0f-",level:2},{value:"9.12.5 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"9125-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],m={toc:p};function d(e){var n=e.components,t=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"9121-\u5173\u4e8e\u89c6\u56fe"},"9.12.1 \u5173\u4e8e\u89c6\u56fe"),(0,i.kt)("p",null,"\u89c6\u56fe\u662f\u6570\u636e\u5e93\u4e2d\u975e\u5e38\u91cd\u8981\u7684\u5bf9\u8c61\uff0c\u662f\u4e00\u5f20\u865a\u62df\u8868\uff0c\u901a\u8fc7\u89c6\u56fe\u6211\u4eec\u53ef\u4ee5\u5bf9\u7ed3\u679c\u8fdb\u884c\u7b5b\u9009\u7f13\u5b58\uff0c\u540c\u65f6\u8fd8\u80fd\u5b9e\u73b0\u9897\u7c92\u5316\u6743\u9650\u63a7\u5236\uff0c\u5982\u63a7\u5236\u6307\u5b9a\u884c\uff0c\u6307\u5b9a\u5217\u3002"),(0,i.kt)("h2",{id:"9122-\u89c6\u56fe\u7684\u4f7f\u7528"},"9.12.2 \u89c6\u56fe\u7684\u4f7f\u7528"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e2d\u5b9e\u73b0\u89c6\u56fe\u7684\u64cd\u4f5c\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u521b\u5efa\u89c6\u56fe\u6a21\u578b\uff0c\u5e76\u7ee7\u627f ",(0,i.kt)("inlineCode",{parentName:"p"},"EntityNotKey")," \u57fa\u7c7b\u5373\u53ef\u3002\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,i.kt)("h3",{id:"91221-\u521b\u5efa\u89c6\u56fe-sql"},"9.12.2.1 \u521b\u5efa\u89c6\u56fe ",(0,i.kt)("inlineCode",{parentName:"h3"},"SQL")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"showLineNumbers",showLineNumbers:!0},"CREATE VIEW V_Person AS\nSELECT Id,Name,Age,Address FROM person\n")),(0,i.kt)("h3",{id:"91222-\u89c6\u56fe\u6a21\u578b"},"9.12.2.2 \u89c6\u56fe\u6a21\u578b"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,10}",showLineNumbers:!0,"":!0,"{5,10}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Core\n{\n public class V_Person : EntityNotKey\n {\n /// \n /// \u914d\u7f6e\u89c6\u56fe\u540d\n /// \n public V_Person() : base("V_Person")\n {\n }\n\n /// \n /// \u4e3b\u952eId\n /// \n public int Id { get; set; }\n\n /// \n /// \u59d3\u540d\n /// \n public string Name { get; set; }\n\n /// \n /// \u5e74\u9f84\n /// \n public int Age { get; set; }\n\n /// \n /// \u4f4f\u5740\n /// \n public string Address { get; set; }\n }\n}\n')),(0,i.kt)("admonition",{title:"\u89c6\u56fe\u540d\u79f0",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u89c6\u56fe\u5b9e\u4f53\u53ea\u9700\u8981\u7ee7\u627f ",(0,i.kt)("inlineCode",{parentName:"p"},"EntityNotKey")," \u57fa\u7c7b\u5e76\u7f16\u5199\u65e0\u53c2\u6784\u9020\u51fd\u6570\u7ee7\u627f ",(0,i.kt)("inlineCode",{parentName:"p"},'base("\u89c6\u56fe\u540d\u79f0")')," \u5373\u53ef\u3002")),(0,i.kt)("h2",{id:"9123-\u89c6\u56fe\u4f7f\u7528"},"9.12.3 \u89c6\u56fe\u4f7f\u7528"),(0,i.kt)("p",null,"\u89c6\u56fe\u9664\u4e86\u4e0d\u80fd\u64cd\u4f5c\uff08\u5199\uff09\u4ee5\u5916\uff0c\u5176\u4ed6\u64cd\u4f5c\u548c\u8868\u64cd\u4f5c\u65e0\u5f02\u3002"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var vEntities = v_repository.Where(u => u.Id >10).ToList();\n")),(0,i.kt)("h2",{id:"9124-\u89c6\u56fe\u6700\u4f73\u8bfb\u53d6\u65b9\u5f0f-"},"9.12.4 \u89c6\u56fe\u6700\u4f73\u8bfb\u53d6\u65b9\u5f0f \u2714"),(0,i.kt)("p",null,"\u7531\u4e8e\u89c6\u56fe\u662f\u865a\u62df\u8868\uff0c\u4e0d\u5e94\u8be5\u5bf9\u5176\u8fdb\u884c\u5199\u64cd\u4f5c\uff0c\u6240\u4ee5\u5e94\u8be5\u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u53ea\u8bfb\u4ed3\u50a8\u521d\u59cb\u5316\u89c6\u56fe"),"\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11,13,16}",showLineNumbers:!0,"":!0,"{11,13,16}":!0},"using Furion.Core;\nusing Furion.DatabaseAccessor;\nusing Furion.DynamicApiController;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Furion.Application.Persons\n{\n public class FurionService : IDynamicApiController\n {\n private readonly IReadableRepository _readableRepository;\n\n public FurionService(IRepository repository)\n {\n // \u521d\u59cb\u5316\u53ea\u8bfb\u4ed3\u50a8\n _readableRepository = repository.Constraint>();\n }\n\n /// \n /// \u8bfb\u53d6\u89c6\u56fe\n /// \n /// \n public async Task> GetVPerson()\n {\n var list = await _readableRepository.AsQueryable().ToListAsync();\n return list;\n }\n }\n}\n")),(0,i.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},".Constraint")," \u65b9\u6cd5\u53ef\u4ee5\u5c06\u4ed3\u50a8\u7ea6\u675f\u4e3a\u7279\u5b9a\u4ed3\u50a8\uff0c\u5982\u53ea\u8bfb\u4ed3\u50a8\uff0c\u53ef\u8bfb\u53ef\u5199\u4ed3\u50a8\uff0c\u53ea\u65b0\u589e\u4ed3\u50a8\u7b49\u3002")),(0,i.kt)("h2",{id:"9125-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.12.5 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/39c6bc14.291e8779.js b/handbook/build/assets/js/39c6bc14.291e8779.js new file mode 100644 index 00000000000..9b97f6b9492 --- /dev/null +++ b/handbook/build/assets/js/39c6bc14.291e8779.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6158],{4469:function(u){u.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"default"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/3a136e85.5d11f3ca.js b/handbook/build/assets/js/3a136e85.5d11f3ca.js new file mode 100644 index 00000000000..1b61a242952 --- /dev/null +++ b/handbook/build/assets/js/3a136e85.5d11f3ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[1254],{3905:function(e,t,r){r.d(t,{Zo:function(){return u},kt:function(){return d}});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),c=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},b=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),b=c(r),d=o,m=b["".concat(i,".").concat(d)]||b[d]||p[d]||a;return r?n.createElement(m,l(l({ref:t},u),{},{components:r})):n.createElement(m,l({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=b;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:o,l[1]=s;for(var c=2;cSql \u4ed3\u50a8",id:"24-\u83b7\u53d6-sql-\u4ed3\u50a8",level:2},{value:"2.5 \u83b7\u53d6 Sql \u5b9a\u4f4d\u5668\u4ed3\u50a8",id:"25-\u83b7\u53d6-sql-\u5b9a\u4f4d\u5668\u4ed3\u50a8",level:2},{value:"2.6 \u83b7\u53d6 Sql \u4ee3\u7406\u5bf9\u8c61",id:"26-\u83b7\u53d6-sql-\u4ee3\u7406\u5bf9\u8c61",level:2},{value:"2.7 \u83b7\u53d6\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",id:"27-\u83b7\u53d6\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",level:2},{value:"2.8 \u83b7\u53d6\u5b9a\u4f4d\u5668\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",id:"28-\u83b7\u53d6\u5b9a\u4f4d\u5668\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",level:2},{value:"2.9 \u521b\u5efa\u65b0\u7684\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",id:"29-\u521b\u5efa\u65b0\u7684\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",level:2},{value:"2.10 \u521b\u5efa\u65b0\u7684\u5b9a\u4f4d\u5668\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",id:"210-\u521b\u5efa\u65b0\u7684\u5b9a\u4f4d\u5668\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",level:2},{value:"2.11 \u6839\u636e\u5b9a\u4f4d\u5668\u7c7b\u578b\u83b7\u53d6\u4ed3\u50a8",id:"211-\u6839\u636e\u5b9a\u4f4d\u5668\u7c7b\u578b\u83b7\u53d6\u4ed3\u50a8",level:2},{value:"2.12 \u83b7\u53d6 \u4e3b\u4ece\u5e93 \u4ed3\u50a8",id:"212-\u83b7\u53d6-\u4e3b\u4ece\u5e93-\u4ed3\u50a8",level:2},{value:"2.13 \u83b7\u53d6 Sql \u4e3b\u5e93\u5b9a\u4f4d\u5668\u4ed3\u50a8",id:"213-\u83b7\u53d6-sql-\u4e3b\u5e93\u5b9a\u4f4d\u5668\u4ed3\u50a8",level:2},{value:"2.14 \u83b7\u53d6\u7279\u5b9a\u5b9a\u4f4d\u5668\u4ed3\u50a8",id:"214-\u83b7\u53d6\u7279\u5b9a\u5b9a\u4f4d\u5668\u4ed3\u50a8",level:2}],b={toc:p};function d(e){var t=e.components,r=(0,o.Z)(e,l);return(0,a.kt)("wrapper",(0,n.Z)({},b,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"21-\u83b7\u53d6\u975e\u6cdb\u578b\u4ed3\u50a8"},"2.1 \u83b7\u53d6\u975e\u6cdb\u578b\u4ed3\u50a8"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var repository = Db.GetRepository();\n")),(0,a.kt)("h2",{id:"22-\u83b7\u53d6\u6cdb\u578b\u4ed3\u50a8"},"2.2 \u83b7\u53d6\u6cdb\u578b\u4ed3\u50a8"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var entityRepository = Db.GetRepository();\n")),(0,a.kt)("h2",{id:"23-\u83b7\u53d6\u5e26\u5b9a\u4f4d\u5668\u6cdb\u578b\u4ed3\u50a8"},"2.3 \u83b7\u53d6\u5e26\u5b9a\u4f4d\u5668\u6cdb\u578b\u4ed3\u50a8"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var locatorRepository = Db.GetRepository();\n")),(0,a.kt)("h2",{id:"24-\u83b7\u53d6-sql-\u4ed3\u50a8"},"2.4 \u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Sql")," \u4ed3\u50a8"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var sqlRepository = Db.GetSqlRepository();\n")),(0,a.kt)("h2",{id:"25-\u83b7\u53d6-sql-\u5b9a\u4f4d\u5668\u4ed3\u50a8"},"2.5 \u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Sql")," \u5b9a\u4f4d\u5668\u4ed3\u50a8"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var sqlLocatorRepository = Db.GetSqlRepository();\n")),(0,a.kt)("h2",{id:"26-\u83b7\u53d6-sql-\u4ee3\u7406\u5bf9\u8c61"},"2.6 \u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Sql")," \u4ee3\u7406\u5bf9\u8c61"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var sqlProxy= Db.GetSqlProxy();\n")),(0,a.kt)("h2",{id:"27-\u83b7\u53d6\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"2.7 \u83b7\u53d6\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var dbContext = Db.GetDbContext();\n")),(0,a.kt)("h2",{id:"28-\u83b7\u53d6\u5b9a\u4f4d\u5668\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"2.8 \u83b7\u53d6\u5b9a\u4f4d\u5668\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var locatorDbContext = Db.GetDbContext();\nvar locatorDbContext2 = Db.GetDbContext(typeof(TDbContextLocator));\n")),(0,a.kt)("h2",{id:"29-\u521b\u5efa\u65b0\u7684\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"2.9 \u521b\u5efa\u65b0\u7684\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var dbContext = Db.GetNewDbContext();\n")),(0,a.kt)("h2",{id:"210-\u521b\u5efa\u65b0\u7684\u5b9a\u4f4d\u5668\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"2.10 \u521b\u5efa\u65b0\u7684\u5b9a\u4f4d\u5668\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var locatorDbContext = Db.GetNewDbContext();\nvar locatorDbContext2 = Db.GetNewDbContext(typeof(TDbContextLocator));\n")),(0,a.kt)("h2",{id:"211-\u6839\u636e\u5b9a\u4f4d\u5668\u7c7b\u578b\u83b7\u53d6\u4ed3\u50a8"},"2.11 \u6839\u636e\u5b9a\u4f4d\u5668\u7c7b\u578b\u83b7\u53d6\u4ed3\u50a8"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var repository = Db.GetRepository(dbContextLocatorType);\n")),(0,a.kt)("h2",{id:"212-\u83b7\u53d6-\u4e3b\u4ece\u5e93-\u4ed3\u50a8"},"2.12 \u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h2"},"\u4e3b\u4ece\u5e93")," \u4ed3\u50a8"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var msRepository = Db.GetMSRepository();\n")),(0,a.kt)("h2",{id:"213-\u83b7\u53d6-sql-\u4e3b\u5e93\u5b9a\u4f4d\u5668\u4ed3\u50a8"},"2.13 \u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Sql")," \u4e3b\u5e93\u5b9a\u4f4d\u5668\u4ed3\u50a8"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var msLocatorRepository = Db.GetMSRepository();\n")),(0,a.kt)("h2",{id:"214-\u83b7\u53d6\u7279\u5b9a\u5b9a\u4f4d\u5668\u4ed3\u50a8"},"2.14 \u83b7\u53d6\u7279\u5b9a\u5b9a\u4f4d\u5668\u4ed3\u50a8"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var msLocatorRepository = Db.GetDbRepository();\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/3d66e15d.43b590b1.js b/handbook/build/assets/js/3d66e15d.43b590b1.js new file mode 100644 index 00000000000..afb7988cd41 --- /dev/null +++ b/handbook/build/assets/js/3d66e15d.43b590b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4012],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return d}});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),c=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=c(n),d=a,g=m["".concat(i,".").concat(d)]||m[d]||p[d]||o;return n?r.createElement(g,s(s({ref:t},u),{},{components:n})):r.createElement(g,s({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=m;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:a,s[1]=l;for(var c=2;c {\n Console.WriteLine("\u6211\u662f\u52a8\u6001\u7684");\n await Task.CompletedTask;\n});\n')),(0,o.kt)("h2",{id:"92-\u53d1\u9001\u6d88\u606f"},"9.2 \u53d1\u9001\u6d88\u606f"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await MessageCenter.PublishAsync("messageId", new {});\n\n// \u8bf8\u591a\u91cd\u8f7d\n')),(0,o.kt)("h2",{id:"93-\u53d6\u6d88\u8ba2\u9605"},"9.3 \u53d6\u6d88\u8ba2\u9605"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'MessageCenter.Unsubscribe("messageId");\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/3d72d16d.f3dffce8.js b/handbook/build/assets/js/3d72d16d.f3dffce8.js new file mode 100644 index 00000000000..072b17bab69 --- /dev/null +++ b/handbook/build/assets/js/3d72d16d.f3dffce8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4638],{3905:function(e,n,t){t.d(n,{Zo:function(){return c},kt:function(){return m}});var a=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=a.createContext({}),p=function(e){var n=a.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(l.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=r(e,["components","mdxType","originalType","parentName"]),d=p(t),m=i,k=d["".concat(l,".").concat(m)]||d[m]||u[m]||o;return t?a.createElement(k,s(s({ref:n},c),{},{components:t})):a.createElement(k,s({ref:n},c))}));function m(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var o=t.length,s=new Array(o);s[0]=d;var r={};for(var l in n)hasOwnProperty.call(n,l)&&(r[l]=n[l]);r.originalType=e,r.mdxType="string"==typeof e?e:i,s[1]=r;for(var p=2;pCookie \u4f7f\u7528",id:"3221-cookie-\u4f7f\u7528",level:3},{value:"32.2.2 Session \u4f7f\u7528",id:"3222-session-\u4f7f\u7528",level:3},{value:"32.2.3 Query Strings \u4f7f\u7528",id:"3223-query-strings-\u4f7f\u7528",level:3},{value:"32.2.4 HttpContext.Items \u4f7f\u7528",id:"3224-httpcontextitems-\u4f7f\u7528",level:3},{value:"32.2.5 Cache \u65b9\u5f0f",id:"3225-cache-\u65b9\u5f0f",level:3},{value:"32.2.6 AsyncLocal<T> \u65b9\u5f0f",id:"3226-asynclocalt-\u65b9\u5f0f",level:3},{value:"32.3 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"323-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:u};function m(e){var n=e.components,t=(0,i.Z)(e,s);return(0,o.kt)("wrapper",(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"321-\u5173\u4e8e\u4f1a\u8bdd\u548c\u72b6\u6001\u7ba1\u7406"},"32.1 \u5173\u4e8e\u4f1a\u8bdd\u548c\u72b6\u6001\u7ba1\u7406"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"HTTP")," \u662f\u65e0\u72b6\u6001\u7684\u534f\u8bae\u3002 \u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"HTTP")," \u8bf7\u6c42\u662f\u4e0d\u4fdd\u7559\u7528\u6237\u503c\u7684\u72ec\u7acb\u6d88\u606f\u3002\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u51e0\u79cd\u65b9\u5f0f\u4fdd\u7559\u8bf7\u6c42\u7528\u6237\u6570\u636e\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Cookie"),"\uff1a\u901a\u5e38\u5b58\u50a8\u5728\u5ba2\u6237\u7aef\u7684\u6570\u636e\uff0c\u8bf7\u6c42\u65f6\u5e26\u56de\u670d\u52a1\u7aef"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Session"),"\uff1a\u5b58\u50a8\u5728\u670d\u52a1\u7aef\u7684\u6570\u636e\uff08\u53ef\u4ee5\u5728\u5b58\u50a8\u5728\u5185\u5b58\u3001\u8fdb\u7a0b\u7b49\u4ecb\u8d28\u4e2d\uff09"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Query Strings"),"\uff1a\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"li"},"Http")," \u8bf7\u6c42\u5730\u5740\u53c2\u6570\u5171\u4eab"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"HttpContext.Items"),"\uff1a\u5b58\u50a8\u5728\u670d\u52a1\u7aef\uff0c\u53ea\u5728\u8bf7\u6c42\u58f0\u660e\u5468\u671f\u5185\u4f7f\u7528\uff0c\u8bf7\u6c42\u7ed3\u675f\u81ea\u52a8\u9500\u6bc1"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Cache"),"\uff1a\u670d\u52a1\u7aef\u7f13\u5b58\uff0c\u5305\u62ec\u5185\u5b58\u7f13\u5b58\u3001\u5206\u5e03\u5f0f\u5185\u5b58\u7f13\u5b58\u3001IO \u7f13\u5b58\u3001\u5e8f\u5217\u5316\u7f13\u5b58\u4ee5\u53ca\u6570\u636e\u5e93\u7f13\u5b58"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"AsyncLocal"),"\uff1a\u901a\u8fc7\u5f02\u6b65\u63a7\u5236\u6d41\u5b9e\u73b0\u672c\u5730\u6570\u636e\u5171\u4eab\uff0c\u8de8\u7ebf\u7a0b")),(0,o.kt)("h2",{id:"322-\u5982\u4f55\u4f7f\u7528"},"32.2 \u5982\u4f55\u4f7f\u7528"),(0,o.kt)("h3",{id:"3221-cookie-\u4f7f\u7528"},"32.2.1 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Cookie")," \u4f7f\u7528"),(0,o.kt)("p",null,"\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"Cookie")," \u975e\u5e38\u7b80\u5355\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u8bfb\u53d6 Cookies\nvar value = httpContext.Request.Cookies["key"];\n\n// \u8bbe\u7f6e Cookies\nvar option = new CookieOptions();\noption.Expires = DateTime.Now.AddMilliseconds(10);\nhttpContext.Response.Cookies.Append(key, value, option);\n\n// \u5220\u9664 Cookies\nhttpContext.Response.Cookies.Delete(key);\n')),(0,o.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"httpContext")," \u53ef\u4ee5\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"IHttpContextAccessor")," \u83b7\u53d6\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"App.HttpContext")," \u83b7\u53d6\u3002")),(0,o.kt)("p",null,"\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"Cookie")," \u5b9e\u73b0\u6388\u6743\u529f\u80fd\u53ca\u5355\u70b9\u767b\u5f55\uff08SSO\uff09\uff1a",(0,o.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/security/cookie-sharing?view=aspnetcore-5.0"},"\u7f51\u7ad9\u5171\u4eab Cookie")),(0,o.kt)("h3",{id:"3222-session-\u4f7f\u7528"},"32.2.2 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Session")," \u4f7f\u7528"),(0,o.kt)("p",null,"\u5728\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"Session")," \u4e4b\u524d\uff0c\u5fc5\u987b\u6ce8\u518c ",(0,o.kt)("inlineCode",{parentName:"p"},"Session")," \u670d\u52a1\uff1a\uff08\u5982\u679c"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,7-12,32,37,39}",showLineNumbers:!0,"":!0,"{1,5,7-12,32,37,39}":!0},'public class Startup\n{\n public void ConfigureServices(IServiceCollection services)\n {\n // services.AddDistributedMemoryCache(); \u6846\u67b6\u5185\u90e8\u5df2\u7ecf\u9ed8\u8ba4\u6ce8\u518c\n\n services.AddSession(options =>\n {\n options.IdleTimeout = TimeSpan.FromSeconds(10);\n options.Cookie.HttpOnly = true;\n options.Cookie.IsEssential = true;\n }); // \u6ce8\u610f\u5728\u63a7\u5236\u5668\u4e4b\u524d\u6ce8\u518c\uff01\uff01\uff01\uff01\n\n services.AddControllersWithViews();\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n if (env.IsDevelopment())\n {\n app.UseDeveloperExceptionPage();\n }\n else\n {\n app.UseExceptionHandler("/Home/Error");\n app.UseHsts();\n }\n\n app.UseHttpsRedirection();\n app.UseStaticFiles();\n\n app.UseRouting();\n\n app.UseAuthentication();\n app.UseAuthorization();\n\n app.UseSession();\n\n app.UseEndpoints(endpoints =>\n {\n endpoints.MapDefaultControllerRoute();\n endpoints.MapRazorPages();\n });\n }\n}\n')),(0,o.kt)("admonition",{title:"\u4e2d\u95f4\u4ef6\u6ce8\u518c\u987a\u5e8f",type:"important"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"app.UseSession()")," \u5fc5\u987b\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"app.UseRouting()")," \u548c ",(0,o.kt)("inlineCode",{parentName:"p"},"app.UseEndpoints()")," ",(0,o.kt)("strong",{parentName:"p"},"\u4e4b\u95f4"),"\u6ce8\u518c\uff01")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u5e38\u89c1\u4f8b\u5b50\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u8bfb\u53d6 Session\nvar byteArr = httpContext.Session.Get("key"); // \u8fd4\u56de byte[]\nvar str = httpContext.Session.GetString("key"); // \u8fd4\u56de string[]\nvar num = httpContext.Session.GetInt32("key"); // \u8fd4\u56de int\n\n// \u8bbe\u7f6e Session\nhttpContext.Session.SetString("key", "value"); // \u8bbe\u7f6e\u5b57\u7b26\u4e32\nhttpContext.Session.SetInt32("key", 1); // \u8bbe\u7f6e int \u7c7b\u578b\n')),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"\u81ea\u5b9a\u4e49\u8bbe\u7f6e\u4efb\u610f\u7c7b\u578b\u62d3\u5c55\uff1a"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"public static class SessionExtensions\n{\n public static void Set(this ISession session, string key, T value)\n {\n session.SetString(key, JsonSerializer.Serialize(value));\n }\n\n public static T Get(this ISession session, string key)\n {\n var value = session.GetString(key);\n return value == null ? default : JsonSerializer.Deserialize(value);\n }\n}\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u9632\u6b62 ",(0,o.kt)("inlineCode",{parentName:"li"},"Session ID")," \u6539\u53d8\u6216 ",(0,o.kt)("inlineCode",{parentName:"li"},"Session")," \u5931\u6548")),(0,o.kt)("p",null,"\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"ConfigureServices")," \u914d\u7f6e\u5373\u53ef\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.Configure(options =>\n{\n \u3000\u3000options.CheckConsentNeeded = context => false; // \u9ed8\u8ba4\u4e3atrue\uff0c\u6539\u4e3afalse\n\u3000\u3000 options.MinimumSameSitePolicy = SameSiteMode.None;\n});\n")),(0,o.kt)("h3",{id:"3223-query-strings-\u4f7f\u7528"},"32.2.3 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Query Strings")," \u4f7f\u7528"),(0,o.kt)("p",null,"\u8be5\u65b9\u5f0f\u4f7f\u7528\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700 ",(0,o.kt)("inlineCode",{parentName:"p"},'httpContext.Request.Query["key"]')," \u5373\u53ef\u3002"),(0,o.kt)("h3",{id:"3224-httpcontextitems-\u4f7f\u7528"},"32.2.4 ",(0,o.kt)("inlineCode",{parentName:"h3"},"HttpContext.Items")," \u4f7f\u7528"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u5bf9\u8c61\u63d0\u4f9b\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"Items")," \u96c6\u5408\u5c5e\u6027\uff0c\u53ef\u4ee5\u8ba9\u6211\u4eec\u5728\u5355\u6b21\u8bf7\u6c42\u95f4\u5171\u4eab\u6570\u636e\uff0c\u8bf7\u6c42\u7ed3\u675f\u7acb\u5373\u9500\u6bc1\uff0c\u53ef\u4ee5\u5b58\u50a8\u4efb\u4f55\u6570\u636e\u3002\u4f7f\u7528\u4e5f\u975e\u5e38\u7b80\u5355\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u8bfb\u53d6\nvar value = httpContext.Items["key"];\n\n// \u6dfb\u52a0\nhttpContext.Items["key"] = "\u4efb\u4f55\u503c\u5305\u62ec\u5bf9\u8c61";\n\n// \u5220\u9664\nhttpContext.Items.Remove("key");\n')),(0,o.kt)("h3",{id:"3225-cache-\u65b9\u5f0f"},"32.2.5 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Cache")," \u65b9\u5f0f"),(0,o.kt)("p",null,"\u53c2\u89c1 ",(0,o.kt)("a",{parentName:"p",href:"/docs/cache"},"\u5206\u5e03\u5f0f\u7f13\u5b58")," \u6587\u6863"),(0,o.kt)("h3",{id:"3226-asynclocalt-\u65b9\u5f0f"},"32.2.6 ",(0,o.kt)("inlineCode",{parentName:"h3"},"AsyncLocal")," \u65b9\u5f0f"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"AsyncLocal")," \u53ef\u4ee5\u8bf4\u662f\u8fdb\u7a0b\u5185\u5171\u4eab\u6570\u636e\u7684\u5927\u5229\u5668\uff0c\u53ef\u4ee5\u901a\u8fc7\u8be5\u7c7b\u5b9e\u73b0\u8de8\u7ebf\u7a0b\u3001\u5f02\u6b65\u63a7\u5236\u6d41\u4e2d\u5171\u4eab\u6570\u636e\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nclass Example\n{\n static AsyncLocal _asyncLocalString = new AsyncLocal();\n\n static ThreadLocal _threadLocalString = new ThreadLocal();\n\n static async Task AsyncMethodA()\n {\n // Start multiple async method calls, with different AsyncLocal values.\n // We also set ThreadLocal values, to demonstrate how the two mechanisms differ.\n _asyncLocalString.Value = \"Value 1\";\n _threadLocalString.Value = \"Value 1\";\n var t1 = AsyncMethodB(\"Value 1\");\n\n _asyncLocalString.Value = \"Value 2\";\n _threadLocalString.Value = \"Value 2\";\n var t2 = AsyncMethodB(\"Value 2\");\n\n // Await both calls\n await t1;\n await t2;\n }\n\n static async Task AsyncMethodB(string expectedValue)\n {\n Console.WriteLine(\"Entering AsyncMethodB.\");\n Console.WriteLine(\" Expected '{0}', AsyncLocal value is '{1}', ThreadLocal value is '{2}'\",\n expectedValue, _asyncLocalString.Value, _threadLocalString.Value);\n await Task.Delay(100);\n Console.WriteLine(\"Exiting AsyncMethodB.\");\n Console.WriteLine(\" Expected '{0}', got '{1}', ThreadLocal value is '{2}'\",\n expectedValue, _asyncLocalString.Value, _threadLocalString.Value);\n }\n\n static async Task Main(string[] args)\n {\n await AsyncMethodA();\n }\n}\n// The example displays the following output:\n// Entering AsyncMethodB.\n// Expected 'Value 1', AsyncLocal value is 'Value 1', ThreadLocal value is 'Value 1'\n// Entering AsyncMethodB.\n// Expected 'Value 2', AsyncLocal value is 'Value 2', ThreadLocal value is 'Value 2'\n// Exiting AsyncMethodB.\n// Expected 'Value 2', got 'Value 2', ThreadLocal value is ''\n// Exiting AsyncMethodB.\n// Expected 'Value 1', got 'Value 1', ThreadLocal value is ''\n")),(0,o.kt)("p",null,"\u4e3a\u4e86\u7b80\u5316\u64cd\u4f5c\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"Furion v2.18+")," \u7248\u672c\u5b9e\u73b0\u4e86\u8f7b\u91cf\u7ea7\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"CallContext")," \u9759\u6001\u7c7b\uff0c\u5185\u90e8\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"AsyncLocal")," \u5b9e\u73b0\uff0c\u4f7f\u7528\u5982\u4e0b\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'CallContext.SetLocalValue("name", "Furion");\nCallContext.GetLocalValue("name");\n\nCallContext.SetLocalValue("count", 1);\nCallContext.GetLocalValue("count");\n')),(0,o.kt)("p",null,"\u4e86\u89e3\u66f4\u591a ",(0,o.kt)("inlineCode",{parentName:"p"},"AsyncLocal")," \u77e5\u8bc6\uff1a",(0,o.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.asynclocal-1?redirectedfrom=MSDN&view=net-5.0"},"https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.asynclocal-1?redirectedfrom=MSDN&view=net-5.0")),(0,o.kt)("h2",{id:"323-\u53cd\u9988\u4e0e\u5efa\u8bae"},"32.3 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,o.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/3eb8904d.73b782a5.js b/handbook/build/assets/js/3eb8904d.73b782a5.js new file mode 100644 index 00000000000..d2684e56115 --- /dev/null +++ b/handbook/build/assets/js/3eb8904d.73b782a5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[5887],{3905:function(e,n,t){t.d(n,{Zo:function(){return d},kt:function(){return c}});var r=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var p=r.createContext({}),s=function(e){var n=r.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},d=function(e){var n=s(e.components);return r.createElement(p.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},u=r.forwardRef((function(e,n){var t=e.components,i=e.mdxType,a=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=s(t),c=i,k=u["".concat(p,".").concat(c)]||u[c]||m[c]||a;return t?r.createElement(k,o(o({ref:n},d),{},{components:t})):r.createElement(k,o({ref:n},d))}));function c(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var a=t.length,o=new Array(a);o[0]=u;var l={};for(var p in n)hasOwnProperty.call(n,p)&&(l[p]=n[p]);l.originalType=e,l.mdxType="string"==typeof e?e:i,o[1]=l;for(var s=2;sOops.Oh \u91cd\u8f7d\u65b9\u6cd5",id:"752-oopsoh-\u91cd\u8f7d\u65b9\u6cd5",level:3},{value:"7.6 \u6700\u4f73\u5b9e\u8df5 \ud83e\udd17",id:"76-\u6700\u4f73\u5b9e\u8df5-",level:2},{value:"7.6.1 \u521b\u5efa\u5f02\u5e38\u4fe1\u606f\u7c7b\u578b",id:"761-\u521b\u5efa\u5f02\u5e38\u4fe1\u606f\u7c7b\u578b",level:3},{value:"7.6.2 \u5173\u4e8e [ErrorCodeItemMetadata]",id:"762-\u5173\u4e8e-errorcodeitemmetadata",level:3},{value:"7.6.3 \u9759\u6001\u5f02\u5e38\u7c7b\u4f7f\u7528",id:"763-\u9759\u6001\u5f02\u5e38\u7c7b\u4f7f\u7528",level:3},{value:"7.6.4 \u5f02\u5e38\u65b9\u6cd5\u91cd\u8bd5",id:"764-\u5f02\u5e38\u65b9\u6cd5\u91cd\u8bd5",level:3},{value:"7.6.5 \u66f4\u591a\u4f8b\u5b50",id:"765-\u66f4\u591a\u4f8b\u5b50",level:3},{value:"7.7 \u591a\u4e2a\u5f02\u5e38\u4fe1\u606f\u7c7b\u578b",id:"77-\u591a\u4e2a\u5f02\u5e38\u4fe1\u606f\u7c7b\u578b",level:2},{value:"7.8 IErrorCodeTypeProvider \u63d0\u4f9b\u5668",id:"78-ierrorcodetypeprovider-\u63d0\u4f9b\u5668",level:2},{value:"7.9 appsetting.json \u4e2d\u914d\u7f6e",id:"79-appsettingjson-\u4e2d\u914d\u7f6e",level:2},{value:"\u4f7f\u7528\u793a\u4f8b",id:"\u4f7f\u7528\u793a\u4f8b",level:4},{value:"7.10 [IfException] \u4f7f\u7528",id:"710-ifexception-\u4f7f\u7528",level:2},{value:"7.10.1 \u4f7f\u7528\u793a\u4f8b",id:"7101-\u4f7f\u7528\u793a\u4f8b",level:3},{value:"7.10.2 \u66f4\u591a\u4f8b\u5b50",id:"7102-\u66f4\u591a\u4f8b\u5b50",level:3},{value:"7.11 \u5f02\u5e38\u6d88\u606f\u4f18\u5148\u7ea7",id:"711-\u5f02\u5e38\u6d88\u606f\u4f18\u5148\u7ea7",level:2},{value:"7.12 \u591a\u8bed\u8a00\u652f\u6301",id:"712-\u591a\u8bed\u8a00\u652f\u6301",level:2},{value:"7.13 \u89c4\u8303\u5316\u7ed3\u679c\u5f02\u5e38\u5904\u7406",id:"713-\u89c4\u8303\u5316\u7ed3\u679c\u5f02\u5e38\u5904\u7406",level:2},{value:"7.14 \u5168\u5c40\u5f02\u5e38\u5904\u7406\u63d0\u4f9b\u5668",id:"714-\u5168\u5c40\u5f02\u5e38\u5904\u7406\u63d0\u4f9b\u5668",level:2},{value:"7.15 FriendlyExceptionSettings \u914d\u7f6e",id:"715-friendlyexceptionsettings-\u914d\u7f6e",level:2},{value:"7.16 BadPageResult \u9519\u8bef\u9875",id:"716-badpageresult-\u9519\u8bef\u9875",level:2},{value:"7.17 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"717-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],c={toc:u};function k(e){var n=e.components,t=(0,i.Z)(e,l);return(0,a.kt)("wrapper",(0,r.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"71-\u4ec0\u4e48\u662f\u5f02\u5e38"},"7.1 \u4ec0\u4e48\u662f\u5f02\u5e38"),(0,a.kt)("p",null,"\u5f02\u5e38\u4e00\u822c\u662f\u6307\u8fd0\u884c\u671f\uff08\u6b64\u5904\u7279\u6307 ",(0,a.kt)("inlineCode",{parentName:"p"},"Exception")," \u7c7b\uff09\u4f1a\u53d1\u751f\u7684\u5bfc\u81f4\u7a0b\u5e8f\u610f\u5916\u4e2d\u6b62\u7684\u95ee\u9898\uff0c\u662f\u4e00\u79cd\u5bf9\u95ee\u9898\u7684\u63cf\u8ff0\u540e\u7684\u5c01\u88c5\u5bf9\u8c61\u3002"),(0,a.kt)("p",null,"\u5728\u8fc7\u53bb\u5f00\u53d1\u4e2d\uff0c\u901a\u5e38\u5f02\u5e38\u7531\u7cfb\u7edf\u8fd0\u884c\u65f6\u51fa\u9519\u629b\u51fa\uff0c\u4f46\u73b0\u5728\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5e94\u5728\u7a0b\u5e8f\u5f00\u53d1\u4e2d\u5408\u7406\u7684\u629b\u51fa\u5f02\u5e38\uff0c\u6bd4\u5982\u66f4\u65b0\u4e00\u6761\u4e0d\u5b58\u5728\u7684\u5b9e\u4f53\uff0c\u6216\u67e5\u8be2\u4e00\u4e2a\u4e0d\u5b58\u5728\u7684\u6570\u636e\u7b49\u7b49\u3002"),(0,a.kt)("h2",{id:"72-\u5904\u7406\u5f02\u5e38\u65b9\u5f0f"},"7.2 \u5904\u7406\u5f02\u5e38\u65b9\u5f0f"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4e0d\u5904\u7406\uff0c\u76f4\u63a5\u4e2d\u65ad\u7a0b\u5e8f\u6267\u884c\uff08\u4e0d\u63a8\u8350\uff09"),(0,a.kt)("li",{parentName:"ul"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"li"},"try catch finally")," \u5904\u7406\uff08\u4e0d\u63a8\u8350\uff09"),(0,a.kt)("li",{parentName:"ul"},"\u5168\u5c40\u7edf\u4e00\u5904\u7406\uff0c\u5e76\u8bb0\u5f55\u5f02\u5e38\u4fe1\u606f",(0,a.kt)("strong",{parentName:"li"},"\uff08\u63a8\u8350\uff09")),(0,a.kt)("li",{parentName:"ul"},"\u5f02\u5e38\u6ce8\u89e3\u65b9\u5f0f\u5904\u7406\uff0c\u652f\u6301",(0,a.kt)("strong",{parentName:"li"},"\u672c\u5730\u5316")," ",(0,a.kt)("strong",{parentName:"li"},"\uff08\u63a8\u8350\uff09"))),(0,a.kt)("h2",{id:"73-\u4ec0\u4e48\u662f\u53cb\u597d\u5f02\u5e38\u5904\u7406"},"7.3 \u4ec0\u4e48\u662f\u53cb\u597d\u5f02\u5e38\u5904\u7406"),(0,a.kt)("h3",{id:"731-\u975e\u53cb\u597d\u5f02\u5e38\u5904\u7406"},"7.3.1 \u975e\u53cb\u597d\u5f02\u5e38\u5904\u7406"),(0,a.kt)("p",null,"\u5728\u4e86\u89e3\u53cb\u597d\u5f02\u5e38\u5904\u7406\u4e4b\u524d\u53ef\u4ee5\u770b\u770b\u975e\u53cb\u597d\u5f02\u5e38\u5904\u7406\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5bf9\u7ec8\u7aef\u7528\u6237\u629b\u51fa ",(0,a.kt)("inlineCode",{parentName:"li"},"500\u72b6\u6001\u7801")," \u5806\u6808\u4fe1\u606f"),(0,a.kt)("li",{parentName:"ul"},"\u5927\u91cf\u7684 ",(0,a.kt)("inlineCode",{parentName:"li"},"try catch")," \u4ee3\u7801\uff0c\u6c61\u67d3\u6b63\u5e38\u4e1a\u52a1\u903b\u8f91"),(0,a.kt)("li",{parentName:"ul"},"\u6ca1\u6709\u89c4\u8303\u5316\u7684\u5f02\u5e38\u72b6\u6001\u7801\u548c\u5f02\u5e38\u6d88\u606f\u7ba1\u7406"),(0,a.kt)("li",{parentName:"ul"},"\u6ca1\u6709\u5f02\u5e38\u65e5\u5fd7\u6536\u96c6\u8bb0\u5f55"),(0,a.kt)("li",{parentName:"ul"},"\u4e0d\u652f\u6301\u5f02\u5e38\u6d88\u606f\u672c\u5730\u5316\u5904\u7406"),(0,a.kt)("li",{parentName:"ul"},"\u4e0d\u652f\u6301\u5f02\u5e38\u7b56\u7565\uff0c\u5931\u8d25\u540e\u7a0b\u5e8f\u7acb\u5373\u7ec8\u6b62"),(0,a.kt)("li",{parentName:"ul"},"\u4e0d\u652f\u6301\u5206\u5e03\u5f0f\u4e8b\u52a1 CAP"),(0,a.kt)("li",{parentName:"ul"},"\u4e0d\u652f\u6301\u5f02\u5e38\u4f20\u64ad"),(0,a.kt)("li",{parentName:"ul"},"\u8fd4\u56de\u7684\u5f02\u5e38\u683c\u5f0f\u6742\u4e71")),(0,a.kt)("h3",{id:"732-\u53cb\u597d\u5f02\u5e38\u5904\u7406"},"7.3.2 \u53cb\u597d\u5f02\u5e38\u5904\u7406"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5bf9\u7ec8\u7aef\u7528\u6237\u63d0\u793a\u53cb\u597d"),(0,a.kt)("li",{parentName:"ul"},"\u5bf9\u540e\u7aef\u5f00\u53d1\u4eba\u5458\u63d0\u4f9b\u8be6\u7ec6\u7684\u5f02\u5e38\u5806\u6808"),(0,a.kt)("li",{parentName:"ul"},"\u4e0d\u5e72\u6270\u6b63\u5e38\u4e1a\u52a1\u903b\u8f91\u4ee3\u7801\uff0c\u5982 \u6ca1\u6709 ",(0,a.kt)("inlineCode",{parentName:"li"},"try catch")," \u4ee3\u7801"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u5f02\u5e38\u72b6\u6001\u7801\u591a\u65b9\u8bbe\u7f6e"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u5f02\u5e38\u6d88\u606f\u672c\u5730\u5316"),(0,a.kt)("li",{parentName:"ul"},"\u5f02\u5e38\u4fe1\u606f\u7edf\u4e00\u914d\u7f6e\u7ba1\u7406"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u5f02\u5e38\u7b56\u7565\uff0c\u5982\u91cd\u8bd5"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u5f02\u5e38\u65e5\u5fd7\u6536\u96c6\u8bb0\u5f55"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301 CAP \u5206\u5e03\u5f0f\u4e8b\u52a1\u5173\u8054"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u5185\u90e8\u5f02\u5e38\u5916\u90e8\u4f20\u64ad"),(0,a.kt)("li",{parentName:"ul"},"\u652f\u6301\u8fd4\u56de\u7edf\u4e00\u7684\u5f02\u5e38\u683c\u5f0f\u6570\u636e")),(0,a.kt)("h2",{id:"74-\u53cb\u597d\u5f02\u5e38\u5904\u7406\u4f7f\u7528\u793a\u4f8b"},"7.4 \u53cb\u597d\u5f02\u5e38\u5904\u7406\u4f7f\u7528\u793a\u4f8b"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u7684\u53cb\u597d\u5f02\u5e38\u5904\u7406\u65b9\u5f0f\u3002"),(0,a.kt)("admonition",{title:"\u5907\u6ce8",type:"important"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},".AddFriendlyException()")," \u9ed8\u8ba4\u5df2\u7ecf\u96c6\u6210\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"AddInject()")," \u4e2d\u4e86\uff0c\u65e0\u9700\u518d\u6b21\u6ce8\u518c\u3002\u4e5f\u5c31\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"7.4.1")," \u7ae0\u8282\u53ef\u4e0d\u914d\u7f6e\u3002")),(0,a.kt)("h3",{id:"741-\u6ce8\u518c\u53cb\u597d\u5f02\u5e38\u670d\u52a1"},"7.4.1 \u6ce8\u518c\u53cb\u597d\u5f02\u5e38\u670d\u52a1"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {11} title="Furion.Web.Core\\FurWebCoreStartup.cs"',showLineNumbers:!0,"":!0,"{11}":!0,title:'"Furion.Web.Core\\FurWebCoreStartup.cs"'},"using Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.Web.Core\n{\n [AppStartup(800)]\n public sealed class FurWebCoreStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddControllers()\n .AddFriendlyException();\n }\n }\n}\n")),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},".AddFriendlyException()")," \u9700\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"services.AddControllers()")," \u4e4b\u540e\u6ce8\u518c\u3002")),(0,a.kt)("h3",{id:"742-\u4e24\u4e2a\u4f8b\u5b50"},"7.4.2 \u4e24\u4e2a\u4f8b\u5b50"),(0,a.kt)("h4",{id:"\u7b80\u5355\u629b\u4e2a\u5f02\u5e38"},"\u7b80\u5355\u629b\u4e2a\u5f02\u5e38"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,12}",showLineNumbers:!0,"":!0,"{2,12}":!0},'using Furion.DynamicApiController;\nusing Furion.FriendlyException;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public int Get(int id)\n {\n if (id < 3)\n {\n throw Oops.Oh($"{id} \u4e0d\u80fd\u5c0f\u4e8e3");\n }\n\n return id;\n }\n }\n}\n')),(0,a.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,a.kt)("img",{src:(0,o.Z)("img/yhyc1.gif")}),(0,a.kt)("h4",{id:"\u629b\u51fa\u7279\u5b9a\u7c7b\u578b\u5f02\u5e38"},"\u629b\u51fa\u7279\u5b9a\u7c7b\u578b\u5f02\u5e38"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,13}",showLineNumbers:!0,"":!0,"{2,13}":!0},'using Furion.DynamicApiController;\nusing Furion.FriendlyException;\nusing System;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public int Get(int id)\n {\n if (id < 3)\n {\n throw Oops.Oh($"{id} \u4e0d\u80fd\u5c0f\u4e8e3\u3002", typeof(InvalidOperationException));\n }\n\n return id;\n }\n }\n}\n')),(0,a.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,a.kt)("img",{src:(0,o.Z)("img/yhyc2.png")}),(0,a.kt)("h2",{id:"75-\u5173\u4e8e-oopsoh"},"7.5 \u5173\u4e8e Oops.Oh"),(0,a.kt)("p",null,"\u901a\u8fc7\u4e0a\u9762\u7684\u4f8b\u5b50\u53ef\u4ee5\u770b\u51fa\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Oops.Oh(errorMessage)")," \u53ef\u4ee5\u7ed3\u5408 ",(0,a.kt)("inlineCode",{parentName:"p"},"throw")," \u629b\u51fa\u5f02\u5e38\u3002\u5bf9\u4e8e\u719f\u6089",(0,a.kt)("inlineCode",{parentName:"p"},"C#"),"\u7684\u4eba\u5458\u6765\u8bf4\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"throw")," \u540e\u9762\u53ea\u80fd ",(0,a.kt)("inlineCode",{parentName:"p"},"Exception")," \u5b9e\u4f8b\u3002",(0,a.kt)("inlineCode",{parentName:"p"},"Oops.Oh(...)")," \u65b9\u6cd5\u8fd4\u56de\u6b63\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"Exception")," \u5b9e\u4f8b\u3002"),(0,a.kt)("h3",{id:"751-\u4e3a\u4ec0\u4e48\u8d77\u8fd9\u4e2a\u540d\u5b57"},"7.5.1 \u4e3a\u4ec0\u4e48\u8d77\u8fd9\u4e2a\u540d\u5b57\uff1f"),(0,a.kt)("p",null,"\u8fd9\u4e2a\u540d\u5b57\u6765\u6e90\u4e8e\u4e00\u4e2a\u82f1\u8bed\u53e5\u5b50\uff1a",(0,a.kt)("inlineCode",{parentName:"p"},"Oh, Oops!"),"\uff0c\u610f\u601d\u662f ",(0,a.kt)("strong",{parentName:"p"},"\u5662\uff08\u54ce\uff09\uff0c\u51fa\u9519\u4e86\uff01"),"\uff0c\u6240\u4ee5\u5c31\u6709\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"Oops.Oh"),"\u3002"),(0,a.kt)("h3",{id:"752-oopsoh-\u91cd\u8f7d\u65b9\u6cd5"},"7.5.2 ",(0,a.kt)("inlineCode",{parentName:"h3"},"Oops.Oh")," \u91cd\u8f7d\u65b9\u6cd5"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13,22,30,39}",showLineNumbers:!0,"":!0,"{13,22,30,39}":!0},'using System;\n\nnamespace Furion.FriendlyException\n{\n public static class Oops\n {\n /// \n /// \u629b\u51fa\u5b57\u7b26\u4e32\u5f02\u5e38\n /// \n /// \u5f02\u5e38\u6d88\u606f\n /// String.Format \u53c2\u6570\n /// \u5f02\u5e38\u5b9e\u4f8b\n public static Exception Oh(string errorMessage, params object[] args);\n\n /// \n /// \u629b\u51fa\u5b57\u7b26\u4e32\u5f02\u5e38\n /// \n /// \u5f02\u5e38\u6d88\u606f\n /// \u5177\u4f53\u5f02\u5e38\u7c7b\u578b\n /// String.Format \u53c2\u6570\n /// \u5f02\u5e38\u5b9e\u4f8b\n public static Exception Oh(string errorMessage, Type exceptionType, params object[] args);\n\n /// \n /// \u629b\u51fa\u9519\u8bef\u7801\u5f02\u5e38\n /// \n /// \u9519\u8bef\u7801\n /// String.Format \u53c2\u6570\n /// \u5f02\u5e38\u5b9e\u4f8b\n public static Exception Oh(object errorCode, params object[] args);\n\n /// \n /// \u629b\u51fa\u9519\u8bef\u7801\u5f02\u5e38\n /// \n /// \u9519\u8bef\u7801\n /// \u5177\u4f53\u5f02\u5e38\u7c7b\u578b\n /// String.Format \u53c2\u6570\n /// \u5f02\u5e38\u5b9e\u4f8b\n public static Exception Oh(object errorCode, Type exceptionType, params object[] args);\n }\n}\n')),(0,a.kt)("h2",{id:"76-\u6700\u4f73\u5b9e\u8df5-"},"7.6 \u6700\u4f73\u5b9e\u8df5 \ud83e\udd17"),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u4e14\u89c4\u8303\u5316\u7684\u53cb\u597d\u5f02\u5e38\u5904\u7406\u65b9\u5f0f\uff0c\u901a\u8fc7\u8fd9\u4e2a\u65b9\u5f0f\u53ef\u4ee5\u65b9\u4fbf\u7ba1\u7406\u5f02\u5e38\u72b6\u6001\u7801\u3001\u5f02\u5e38\u4fe1\u606f\u53ca\u5f02\u5e38\u672c\u5730\u5316\u3002"),(0,a.kt)("h3",{id:"761-\u521b\u5efa\u5f02\u5e38\u4fe1\u606f\u7c7b\u578b"},"7.6.1 \u521b\u5efa\u5f02\u5e38\u4fe1\u606f\u7c7b\u578b"),(0,a.kt)("p",null,"\u5b9e\u73b0\u81ea\u5b9a\u4e49\u5f02\u5e38\u4fe1\u606f\u7c7b\u578b\u5fc5\u987b\u9075\u5faa\u4ee5\u4e0b\u914d\u7f6e\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u7c7b\u578b\u5fc5\u987b\u662f\u516c\u5f00\u4e14\u662f ",(0,a.kt)("inlineCode",{parentName:"li"},"Enum")," \u679a\u4e3e\u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},"\u679a\u4e3e\u7c7b\u578b\u5fc5\u987b\u8d34\u6709 ",(0,a.kt)("inlineCode",{parentName:"li"},"[ErrorCodeType]")," \u7279\u6027"),(0,a.kt)("li",{parentName:"ul"},"\u679a\u4e3e\u4e2d\u6bcf\u4e00\u9879\u5fc5\u987b\u8d34\u6709 ",(0,a.kt)("inlineCode",{parentName:"li"},"[ErrorCodeItemMetadata]")," \u7279\u6027")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,8,11,14,17}",showLineNumbers:!0,"":!0,"{1,5,8,11,14,17}":!0},'using Furion.FriendlyException;\n\nnamespace Furion.Application\n{\n [ErrorCodeType]\n public enum ErrorCodes\n {\n [ErrorCodeItemMetadata("{0} \u4e0d\u80fd\u5c0f\u4e8e {1}")]\n z1000,\n\n [ErrorCodeItemMetadata("\u6570\u636e\u4e0d\u5b58\u5728")]\n x1000,\n\n [ErrorCodeItemMetadata("{0} \u53d1\u73b0 {1} \u4e2a\u5f02\u5e38", "\u767e\u5c0f\u50e7", 2)]\n x1001,\n\n [ErrorCodeItemMetadata("\u670d\u52a1\u5668\u8fd0\u884c\u5f02\u5e38", ErrorCode = "Error")]\n SERVER_ERROR\n }\n}\n')),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"[ErrorCodeType]")," \u7279\u6027\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"IErrorCodeTypeProvider")," \u63d0\u4f9b\u5668\u63a5\u53e3\u6765\u63d0\u4f9b\u5f02\u5e38\u4fe1\u606f\u626b\u63cf\uff0c\u8fd9\u91cc\u7528\u7684\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"[ErrorCodeType]")," \u7279\u6027\u7c7b\u3002")),(0,a.kt)("h3",{id:"762-\u5173\u4e8e-errorcodeitemmetadata"},"7.6.2 \u5173\u4e8e ",(0,a.kt)("inlineCode",{parentName:"h3"},"[ErrorCodeItemMetadata]")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86",(0,a.kt)("inlineCode",{parentName:"p"},"[ErrorCodeItemMetadata]")," \u7279\u6027\u7528\u6765\u6807\u8bc6",(0,a.kt)("strong",{parentName:"p"},"\u679a\u4e3e\u5b57\u6bb5"),"\u5f02\u5e38\u5143\u6570\u636e\uff0c\u8be5\u7279\u6027\u652f\u6301\u4f20\u5165 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u6d88\u606f\u5185\u5bb9")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"\u683c\u5f0f\u5316\u53c2\u6570"),"\u3002\u6700\u7ec8\u4f1a\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"String.Format(\u6d88\u606f\u5185\u5bb9\uff0c\u683c\u5f0f\u5316\u53c2\u6570)")," \u8fdb\u884c\u683c\u5f0f\u5316\u3002"),(0,a.kt)("p",null,"\u5982\u679c\u6d88\u606f\u5185\u5bb9\u4e2d\u5305\u542b",(0,a.kt)("inlineCode",{parentName:"p"},"\u683c\u5f0f\u5316\u5360\u4f4d\u7b26"),"\u4f46\u672a\u6307\u5b9a",(0,a.kt)("inlineCode",{parentName:"p"},"\u683c\u5f0f\u5316\u53c2\u6570"),"\uff0c\u90a3\u4e48\u4f1a\u67e5\u627e\u5f02\u5e38\u6240\u5728\u65b9\u6cd5\u662f\u5426\u8d34\u6709 ",(0,a.kt)("inlineCode",{parentName:"p"},"[IfException]")," \u7279\u6027\u4e14\u542b\u6709\u683c\u5f0f\u5316\u53c2\u6570\uff0c\u63a5\u7740\u5c31\u4f1a\u67e5\u627e ",(0,a.kt)("inlineCode",{parentName:"p"},"Oops.Oh")," \u4e2d\u6307\u5b9a\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u683c\u5f0f\u5316\u53c2\u6570"),"\u3002"),(0,a.kt)("h3",{id:"763-\u9759\u6001\u5f02\u5e38\u7c7b\u4f7f\u7528"},"7.6.3 \u9759\u6001\u5f02\u5e38\u7c7b\u4f7f\u7528"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,12}",showLineNumbers:!0,"":!0,"{2,12}":!0},"using Furion.DynamicApiController;\nusing Furion.FriendlyException;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public int Get(int id)\n {\n if (id < 3)\n {\n throw Oops.Oh(ErrorCodes.z1000, id, 3);\n }\n\n return id;\n }\n }\n}\n")),(0,a.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,a.kt)("img",{src:(0,o.Z)("img/yhyc3.gif")}),(0,a.kt)("h3",{id:"764-\u5f02\u5e38\u65b9\u6cd5\u91cd\u8bd5"},"7.6.4 \u5f02\u5e38\u65b9\u6cd5\u91cd\u8bd5"),(0,a.kt)("admonition",{title:"\u8c03\u6574\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"v2.17.0+")," \u7248\u672c\u4e0b\u9762\u65b9\u6cd5\u8bf7\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"Retry.Invoke()")," \u66ff\u4ee3\u3002")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"Oops.Retry(() => {\n // Do.....\n}, 3, 1000);\n\n// \u5e26\u8fd4\u56de\u503c\nvar value = Oops.Retry(() => {\n // Do.....\n}, 3, 1000);\n\n// \u53ea\u6709\u7279\u5b9a\u5f02\u5e38\u624d\u76d1\u542c\nOops.Retry(() => {\n\n}, 3, 1000, typeof(ArgumentNullException));\n")),(0,a.kt)("h3",{id:"765-\u66f4\u591a\u4f8b\u5b50"},"7.6.5 \u66f4\u591a\u4f8b\u5b50"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6}",showLineNumbers:!0,"":!0,"{6}":!0},'throw Oops.Oh(1000);\nthrow Oops.Oh(ErrorCodes.x1000);\nthrow Oops.Oh("\u54c8\u54c8\u54c8\u54c8");\nthrow Oops.Oh(errorCode: "x1001");\nthrow Oops.Oh(1000, typeof(Exception));\nthrow Oops.Oh(1000).StatusCode(400); // \u8bbe\u7f6e\u9519\u8bef\u7801\nthrow Oops.Oh(1000).WithData(new Model {}); // \u8bbe\u7f6e\u989d\u5916\u6570\u636e\nthrow Oops.Bah("\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef"); // \u629b\u51fa\u4e1a\u52a1\u5f02\u5e38\uff0c\u72b6\u6001\u7801\u4e3a 400\nthrow Oops.Bah(1000);\n')),(0,a.kt)("h2",{id:"77-\u591a\u4e2a\u5f02\u5e38\u4fe1\u606f\u7c7b\u578b"},"7.7 \u591a\u4e2a\u5f02\u5e38\u4fe1\u606f\u7c7b\u578b"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5-6,21-22}",showLineNumbers:!0,"":!0,"{5-6,21-22}":!0},'using Furion.FriendlyException;\n\nnamespace Furion.Application\n{\n [ErrorCodeType]\n public enum ErrorCodes\n {\n [ErrorCodeItemMetadata("{0} \u4e0d\u80fd\u5c0f\u4e8e {1}")]\n z1000,\n\n [ErrorCodeItemMetadata("\u6570\u636e\u4e0d\u5b58\u5728")]\n x1000,\n\n [ErrorCodeItemMetadata("{0} \u53d1\u73b0 {1} \u4e2a\u5f02\u5e38", "\u767e\u5c0f\u50e7", 2)]\n x1001,\n\n [ErrorCodeItemMetadata("\u670d\u52a1\u5668\u8fd0\u884c\u5f02\u5e38", ErrorCode = "Error")]\n SERVER_ERROR\n }\n\n [ErrorCodeType]\n public enum UserErrorCodes\n {\n [ErrorCodeItemMetadata("\u7528\u6237\u6570\u636e\u4e0d\u5b58\u5728")]\n u1000,\n\n [ErrorCodeItemMetadata("\u5176\u4ed6\u5f02\u5e38")]\n u1001\n }\n}\n')),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u591a\u4e2a\u5f02\u5e38\u9759\u6001\u7c7b\u4e2d\u4e5f\u5fc5\u987b\u4fdd\u8bc1\u5e38\u91cf\u503c\u552f\u4e00\u6027\uff0c\u4e0d\u53ef\u91cd\u590d\u3002")),(0,a.kt)("h2",{id:"78-ierrorcodetypeprovider-\u63d0\u4f9b\u5668"},"7.8 ",(0,a.kt)("inlineCode",{parentName:"h2"},"IErrorCodeTypeProvider")," \u63d0\u4f9b\u5668"),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u8fd8\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"IErrorCodeTypeProvider")," \u5f02\u5e38\u6d88\u606f\u63d0\u4f9b\u5668\u63a5\u53e3\uff0c\u65b9\u4fbf\u5728\u4e0d\u80fd\u8d34 ",(0,a.kt)("inlineCode",{parentName:"p"},"[ErrorCodeType]")," \u7279\u6027\u60c5\u51b5\u4e0b\u4f7f\u7528\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,6,8-11}",showLineNumbers:!0,"":!0,"{2,6,8-11}":!0},"using Furion.FriendlyException;\nusing System;\n\nnamespace Furion.Application\n{\n public class CustomErrorCodeTypeProvider : IErrorCodeTypeProvider\n {\n public Type[] Definitions => new[] {\n typeof(ErrorCodes),\n typeof(ErrorCodes2)\n };\n }\n}\n")),(0,a.kt)("p",null,"\u542f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"IErrorCodeTypeProvider")," \u63d0\u4f9b\u5668\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {11} title="Furion.Web.Core\\FurWebCoreStartup.cs"',showLineNumbers:!0,"":!0,"{11}":!0,title:'"Furion.Web.Core\\FurWebCoreStartup.cs"'},"using Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.Web.Core\n{\n [AppStartup(800)]\n public sealed class FurWebCoreStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddControllers()\n .AddFriendlyException();\n }\n }\n}\n")),(0,a.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u53ea\u6709\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"IErrorCodeTypeProvider")," \u65b9\u5f0f\u624d\u9700\u4f7f\u7528\u6cdb\u578b\u65b9\u5f0f\u6ce8\u518c\u3002\u901a\u8fc7\u4e0a\u9762\u7684\u65b9\u5f0f\u6ce8\u518c\u53ef\u4ee5\u540c\u65f6\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"p"},"IErrorCodeTypeProvider")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"[ErrorCodeType]")," \u65b9\u5f0f\u3002")),(0,a.kt)("h2",{id:"79-appsettingjson-\u4e2d\u914d\u7f6e"},"7.9 ",(0,a.kt)("inlineCode",{parentName:"h2"},"appsetting.json")," \u4e2d\u914d\u7f6e"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u8fd8\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u7684\u914d\u7f6e\u6587\u4ef6\u914d\u7f6e\u5f02\u5e38\uff0c\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5b9e\u73b0\u5f02\u5e38\u4fe1\u606f\u540e\u671f\u914d\u7f6e\uff0c\u4e5f\u5c31\u662f\u65e0\u9700\u5728\u5f00\u53d1\u9636\u6bb5\u9884\u5148\u5b9a\u4e49\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers {2-8} title="Furion.Web.Entry/appsettings.json"',showLineNumbers:!0,"":!0,"{2-8}":!0,title:'"Furion.Web.Entry/appsettings.json"'},'{\n "ErrorCodeMessageSettings": {\n "Definitions": [\n ["5000", "{0} \u4e0d\u80fd\u5c0f\u4e8e {1}"],\n ["5001", "\u6211\u53eb {0} \u540d\u5b57", "\u767e\u5c0f\u50e7"],\n ["5002", "Oops! \u51fa\u9519\u4e86"]\n ]\n }\n}\n')),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Definitions")," \u7c7b\u578b\u4e3a\u4e8c\u7ef4\u6570\u7ec4\uff0c\u4e8c\u7ef4\u6570\u7ec4\u4e2d\u7684\u6bcf\u4e00\u4e2a\u6570\u7ec4\u7b2c\u4e00\u4e2a\u53c2\u6570\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"ErrorCode")," \u4e5f\u5c31\u662f\u9519\u8bef\u7801\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"ErrorMessage")," \u6d88\u606f\u5185\u5bb9\uff0c\u5269\u4f59\u53c2\u6570\u4f5c\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"ErrorMessage")," \u7684\u683c\u5f0f\u5316\u53c2\u6570\u3002"),(0,a.kt)("h4",{id:"\u4f7f\u7528\u793a\u4f8b"},"\u4f7f\u7528\u793a\u4f8b"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,12}",showLineNumbers:!0,"":!0,"{2,12}":!0},"using Furion.DynamicApiController;\nusing Furion.FriendlyException;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public int Get(int id)\n {\n if (id < 3)\n {\n throw Oops.Oh(5000, id, 3); // \u53ef\u4ee5\u5c06 5000\u4f5c\u4e3a\u5e38\u91cf\u914d\u7f6e\u8d77\u6765\n }\n\n return id;\n }\n }\n}\n")),(0,a.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"[ErrorCodeType]")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"IErrorCodeTypeProvider")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\u3002")),(0,a.kt)("h2",{id:"710-ifexception-\u4f7f\u7528"},"7.10 ",(0,a.kt)("inlineCode",{parentName:"h2"},"[IfException]")," \u4f7f\u7528"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"[IfException]")," \u7279\u6027\u53ef\u4ee5",(0,a.kt)("strong",{parentName:"p"},"\u8986\u76d6\u9ed8\u8ba4\u6d88\u606f\u914d\u7f6e"),"\u3002\u4e5f\u5c31\u662f\u8986\u76d6 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u5f02\u5e38\u6d88\u606f\u7c7b\u578b")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u4e2d\u7684\u914d\u7f6e\u3002"),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"caution"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"[IfException]")," \u53ea\u80fd\u8d34\u5728\u65b9\u6cd5\u4e0a\uff0c\u652f\u6301\u591a\u4e2a\u3002")),(0,a.kt)("h3",{id:"7101-\u4f7f\u7528\u793a\u4f8b"},"7.10.1 \u4f7f\u7528\u793a\u4f8b"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5f02\u5e38\u6d88\u606f\u7c7b\u5b9a\u4e49")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4}",showLineNumbers:!0,"":!0,"{1,4}":!0},'[ErrorCodeType]\npublic enum ErrorCodes\n{\n [ErrorCodeItemMetadata("{0} \u4e0d\u80fd\u5c0f\u4e8e {1}")]\n z1000\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u8986\u76d6\u9ed8\u8ba4\u914d\u7f6e")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8}",showLineNumbers:!0,"":!0,"{8}":!0},'using Furion.DynamicApiController;\nusing Furion.FriendlyException;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n [IfException(ErrorCodes.z1000, ErrorMessage = "\u6211\u8986\u76d6\u4e86\u9ed8\u8ba4\u7684\uff1a{0} \u4e0d\u80fd\u5c0f\u4e8e {1}")]\n public int Get(int id)\n {\n if (id < 3)\n {\n throw Oops.Oh(ErrorCodes.z1000, id, 3);\n }\n\n return id;\n }\n }\n}\n')),(0,a.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,a.kt)("img",{src:(0,o.Z)("img/yhyc4.png")}),(0,a.kt)("h3",{id:"7102-\u66f4\u591a\u4f8b\u5b50"},"7.10.2 \u66f4\u591a\u4f8b\u5b50"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,8-11}",showLineNumbers:!0,"":!0,"{2,8-11}":!0},'using Furion.DynamicApiController;\nusing Furion.FriendlyException;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n [IfException(typeof(ExceptionType), ErrorMessage = "\u7279\u5b9a\u5f02\u5e38\u7c7b\u578b\u5168\u5c40\u62e6\u622a")]\n [IfException(ErrorMessage = "\u5168\u5c40\u5f02\u5e38\u62e6\u622a")]\n [IfException(ErrorCodes.z1000, ErrorMessage = "\u6211\u8986\u76d6\u4e86\u9ed8\u8ba4\u7684\uff1a{0} \u4e0d\u80fd\u5c0f\u4e8e {1}")]\n [IfException(ErrorCodes.x1001, "\u683c\u5f0f\u5316\u53c2\u65701", "\u683c\u5f0f\u5316\u53c2\u65702", ErrorMessage = "\u6211\u8986\u76d6\u4e86\u9ed8\u8ba4\u7684\uff1a{0} \u4e0d\u80fd\u5c0f\u4e8e {1}")]\n [IfException(ErrorCodes.x1000, "\u683c\u5f0f\u5316\u53c2\u65701", "\u683c\u5f0f\u5316\u53c2\u65702")]\n [IfException(ErrorCodes.SERVER_ERROR, "\u683c\u5f0f\u5316\u53c2\u65701", "\u683c\u5f0f\u5316\u53c2\u65702")]\n public int Get(int id)\n {\n if (id < 3)\n {\n throw Oops.Oh(ErrorCodes.z1000, id, 3);\n }\n\n return id;\n }\n }\n}\n')),(0,a.kt)("admonition",{title:"\u683c\u5f0f\u5316\u6d41\u7a0b",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c\u6d88\u606f\u5185\u5bb9\u4e2d\u5305\u542b",(0,a.kt)("inlineCode",{parentName:"p"},"\u683c\u5f0f\u5316\u5360\u4f4d\u7b26"),"\u4f46\u672a\u6307\u5b9a",(0,a.kt)("inlineCode",{parentName:"p"},"\u683c\u5f0f\u5316\u53c2\u6570"),"\uff0c\u90a3\u4e48\u4f1a\u67e5\u627e\u5f02\u5e38\u6240\u5728\u65b9\u6cd5\u662f\u5426\u8d34\u6709 ",(0,a.kt)("inlineCode",{parentName:"p"},"[IfException]")," \u7279\u6027\u4e14\u542b\u6709\u683c\u5f0f\u5316\u53c2\u6570\uff0c\u63a5\u7740\u5c31\u4f1a\u67e5\u627e ",(0,a.kt)("inlineCode",{parentName:"p"},"Oops.Oh")," \u4e2d\u6307\u5b9a\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u683c\u5f0f\u5316\u53c2\u6570"),"\u3002")),(0,a.kt)("h2",{id:"711-\u5f02\u5e38\u6d88\u606f\u4f18\u5148\u7ea7"},"7.11 \u5f02\u5e38\u6d88\u606f\u4f18\u5148\u7ea7"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"[ErrorCodeItemMetadata]")," -> ",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json")," -> ",(0,a.kt)("inlineCode",{parentName:"p"},"[IfException]"),"\u3002",(0,a.kt)("strong",{parentName:"p"},"\uff08\u4f4e -> \u9ad8\uff09")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[IfException]")," \u4f1a\u8986\u76d6 ",(0,a.kt)("inlineCode",{parentName:"li"},"appsettings.json")," \u5b9a\u4e49\u7684\u72b6\u6001\u7801\u6d88\u606f\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"appsettings.json")," \u4f1a\u8986\u76d6 ",(0,a.kt)("inlineCode",{parentName:"li"},"[ErrorCodeItemMetadata]")," \u5b9a\u4e49\u7684\u6d88\u606f\u3002")),(0,a.kt)("h2",{id:"712-\u591a\u8bed\u8a00\u652f\u6301"},"7.12 \u591a\u8bed\u8a00\u652f\u6301"),(0,a.kt)("p",null,"\u53c2\u89c1 ",(0,a.kt)("a",{parentName:"p",href:"./local-language"},"\u3010\u5168\u7403\u5316\u548c\u672c\u5730\u5316\uff08\u591a\u8bed\u8a00\uff09\u3011")," \u7ae0\u8282"),(0,a.kt)("h2",{id:"713-\u89c4\u8303\u5316\u7ed3\u679c\u5f02\u5e38\u5904\u7406"},"7.13 \u89c4\u8303\u5316\u7ed3\u679c\u5f02\u5e38\u5904\u7406"),(0,a.kt)("admonition",{title:"\u67e5\u770b\u89c4\u8303\u5316\u7ed3\u679c\u6587\u6863",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u9700\u81ea\u5b9a\u4e49\u89c4\u8303\u5316\u7ed3\u679c\u53ef\u67e5\u9605 \u3010",(0,a.kt)("a",{parentName:"p",href:"/docs/specification-document#67-%E7%BB%9F%E4%B8%80%E8%BF%94%E5%9B%9E%E5%80%BC%E6%A8%A1%E5%9E%8B%E8%A7%84%E8%8C%83%E5%8C%96%E7%BB%93%E6%9E%9Capi-%E8%BF%94%E5%9B%9E%E5%80%BC"},"6.7 \u7edf\u4e00\u8fd4\u56de\u503c\u6a21\u578b"),"\u3011")),(0,a.kt)("h2",{id:"714-\u5168\u5c40\u5f02\u5e38\u5904\u7406\u63d0\u4f9b\u5668"},"7.14 \u5168\u5c40\u5f02\u5e38\u5904\u7406\u63d0\u4f9b\u5668"),(0,a.kt)("p",null,"\u901a\u5e38\u6211\u4eec\u9700\u8981\u5728\u5f02\u5e38\u6355\u83b7\u7684\u65f6\u5019\u5199\u65e5\u5fd7\uff0c\u8fd9\u65f6\u5019\u5c31\u9700\u8981\u4f7f\u7528\u5230 ",(0,a.kt)("inlineCode",{parentName:"p"},"IGlobalExceptionHandler")," \u5f02\u5e38\u5b9a\u4e49\u5904\u7406\u7a0b\u5e8f\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8}",showLineNumbers:!0,"":!0,"{8}":!0},"using Furion.DependencyInjection;\nusing Furion.FriendlyException;\nusing Microsoft.AspNetCore.Mvc.Filters;\nusing System.Threading.Tasks;\n\nnamespace Furion.Application\n{\n public class LogExceptionHandler : IGlobalExceptionHandler, ISingleton\n {\n public Task OnExceptionAsync(ExceptionContext context)\n {\n // \u5199\u65e5\u5fd7\n\n return Task.CompletedTask;\n }\n }\n}\n")),(0,a.kt)("h2",{id:"715-friendlyexceptionsettings-\u914d\u7f6e"},"7.15 ",(0,a.kt)("inlineCode",{parentName:"h2"},"FriendlyExceptionSettings")," \u914d\u7f6e"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"HideErrorCode"),"\uff1a\u9690\u85cf\u9519\u8bef\u7801\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,a.kt)("inlineCode",{parentName:"li"},"false")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"DefaultErrorCode"),"\uff1a\u9ed8\u8ba4\u9519\u8bef\u7801\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"DefaultErrorMessage"),"\uff1a\u9ed8\u8ba4\u9519\u8bef\u6d88\u606f\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ThrowBah"),"\uff1a\u662f\u5426\u5c06 ",(0,a.kt)("inlineCode",{parentName:"li"},"Oops.Oh")," \u9ed8\u8ba4\u629b\u51fa\u4e3a\u4e1a\u52a1\u5f02\u5e38\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,a.kt)("inlineCode",{parentName:"li"},"false"),"\uff0c\u8bbe\u7f6e ",(0,a.kt)("inlineCode",{parentName:"li"},"true")," \u4e4b\u540e ",(0,a.kt)("inlineCode",{parentName:"li"},"Oops.Oh")," \u9ed8\u8ba4\u8fdb\u5165 ",(0,a.kt)("inlineCode",{parentName:"li"},"OnValidateFailed")," \u5904\u7406\uff0c\u800c\u4e0d\u662f ",(0,a.kt)("inlineCode",{parentName:"li"},"OnException")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"LogError"),"\uff1a\u662f\u5426\u8f93\u51fa\u5f02\u5e38\u65e5\u5fd7\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,a.kt)("inlineCode",{parentName:"li"},"true"))),(0,a.kt)("p",null,"\u914d\u7f6e\u793a\u4f8b"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "FriendlyExceptionSettings": {\n "DefaultErrorMessage": "\u7cfb\u7edf\u5f02\u5e38\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458"\n }\n}\n')),(0,a.kt)("h2",{id:"716-badpageresult-\u9519\u8bef\u9875"},"7.16 ",(0,a.kt)("inlineCode",{parentName:"h2"},"BadPageResult")," \u9519\u8bef\u9875"),(0,a.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion 3.6.1 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u5728\u8be5\u7248\u672c\u4e4b\u540e\u5185\u7f6e\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"BadPageResult")," \u9519\u8bef\u7ed3\u679c\u7c7b\u578b\uff0c\u8be5\u7c7b\u578b\u6d3e\u751f\u81ea ",(0,a.kt)("inlineCode",{parentName:"p"},"IActionResult"),"\uff0c\u5982\u9700\u8fd4\u56de\u53ea\u9700\u8981\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Action")," \u4e2d\u8fd4\u56de\u5373\u53ef\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers{1,7}","showLineNumbers{1,7}":!0},"using Furion.FriendlyException;\n\npublic IActionResult Add(Person person)\n{\n if(!ModelState.IsValid)\n {\n return new BadPageResult();\n }\n}\n")),(0,a.kt)("img",{src:(0,o.Z)("img/er1.png")}),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"BadPageResult")," \u66f4\u591a\u914d\u7f6e",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u6784\u9020\u51fd\u6570 ",(0,a.kt)("inlineCode",{parentName:"li"},"statusCode"),"\uff1a\u72b6\u6001\u7801\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"int")," \u7c7b\uff0c\u9ed8\u8ba4 400"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Title"),"\uff1a\u9875\u9762\u6807\u9898\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,a.kt)("inlineCode",{parentName:"li"},"ModelState Invalid")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Description"),"\uff1a\u9875\u9762\u63cf\u8ff0\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,a.kt)("inlineCode",{parentName:"li"},"User data verification failed. Please input it correctly.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Code"),"\uff1a\u8be6\u7ec6\u9519\u8bef\u4ee3\u7801\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff0c\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"li"},"\u4ee3\u7801"),"\uff0c\u9ed8\u8ba4\u7a7a\u5b57\u7b26\u4e32"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CodeLang"),"\uff1a\u8be6\u7ec6\u9519\u8bef\u4ee3\u7801\u8bed\u8a00\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,a.kt)("inlineCode",{parentName:"li"},"json")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Base64Icon"),"\uff1a\u9875\u9762\u56fe\u6807\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff0c\u5e26\u9ed8\u8ba4\u503c\uff0c\u81ea\u5b9a\u4e49\u5fc5\u987b\u662f ",(0,a.kt)("inlineCode",{parentName:"li"},"base64")," \u683c\u5f0f\u56fe\u6807")))),(0,a.kt)("h2",{id:"717-\u53cd\u9988\u4e0e\u5efa\u8bae"},"7.17 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/40a433d4.6ee078c2.js b/handbook/build/assets/js/40a433d4.6ee078c2.js new file mode 100644 index 00000000000..07065588959 --- /dev/null +++ b/handbook/build/assets/js/40a433d4.6ee078c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2205],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return k}});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function p(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var m=a.createContext({}),l=function(e){var t=a.useContext(m),n=t;return e&&(n="function"==typeof e?e(t):p(p({},t),e)),n},s=function(e){var t=l(e.components);return a.createElement(m.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,m=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),u=l(n),k=r,N=u["".concat(m,".").concat(k)]||u[k]||d[k]||i;return n?a.createElement(N,p(p({ref:t},s),{},{components:n})):a.createElement(N,p({ref:t},s))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,p=new Array(i);p[0]=u;var o={};for(var m in t)hasOwnProperty.call(t,m)&&(o[m]=t[m]);o.originalType=e,o.mdxType="string"==typeof e?e:r,p[1]=o;for(var l=2;lpm2",id:"3461-\u5173\u4e8e-pm2",level:2},{value:"34.6.2 \u5982\u4f55\u5b89\u88c5",id:"3462-\u5982\u4f55\u5b89\u88c5",level:2},{value:"34.6.3 \u6258\u7ba1 .NET5/6 \u5e94\u7528\u7a0b\u5e8f",id:"3463-\u6258\u7ba1-net56-\u5e94\u7528\u7a0b\u5e8f",level:2},{value:"34.6.3.1 \u975e\u5355\u6587\u4ef6/\u975e\u72ec\u7acb\u53d1\u5e03\u6a21\u5f0f",id:"34631-\u975e\u5355\u6587\u4ef6\u975e\u72ec\u7acb\u53d1\u5e03\u6a21\u5f0f",level:3},{value:"34.6.3.2 \u5355\u6587\u4ef6/\u72ec\u7acb\u53d1\u5e03\u6a21\u5f0f",id:"34632-\u5355\u6587\u4ef6\u72ec\u7acb\u53d1\u5e03\u6a21\u5f0f",level:3},{value:"34.6.3.3 \u542f\u7528\u5e94\u7528\u7a0b\u5e8f",id:"34633-\u542f\u7528\u5e94\u7528\u7a0b\u5e8f",level:3},{value:"34.6.3.4 json \u914d\u7f6e/\u542f\u52a8\u65b9\u5f0f",id:"34634-json-\u914d\u7f6e\u542f\u52a8\u65b9\u5f0f",level:3},{value:"34.6.4 pm2 \u5e38\u89c1\u64cd\u4f5c",id:"3464-pm2-\u5e38\u89c1\u64cd\u4f5c",level:2},{value:"34.6.4.1 \u5b9e\u65f6\u76d1\u542c\u8fd0\u884c\u72b6\u6001",id:"34641-\u5b9e\u65f6\u76d1\u542c\u8fd0\u884c\u72b6\u6001",level:3},{value:"34.6.4.2 \u663e\u793a\u8fd0\u884c\u65e5\u5fd7",id:"34642-\u663e\u793a\u8fd0\u884c\u65e5\u5fd7",level:3},{value:"34.6.4.3 \u67e5\u770b\u5e94\u7528\u4fe1\u606f",id:"34643-\u67e5\u770b\u5e94\u7528\u4fe1\u606f",level:3},{value:"34.6.4.4 \u968f\u673a\u542f\u52a8",id:"34644-\u968f\u673a\u542f\u52a8",level:3},{value:"34.6.4.5 \u96c6\u7fa4\u6a21\u5f0f\uff08\u8d1f\u8f7d\u5747\u8861\uff09",id:"34645-\u96c6\u7fa4\u6a21\u5f0f\u8d1f\u8f7d\u5747\u8861",level:3},{value:"34.6.4.6 \u5176\u4ed6\u64cd\u4f5c",id:"34646-\u5176\u4ed6\u64cd\u4f5c",level:3},{value:"34.6.5 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"3465-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],k={toc:u};function N(e){var t=e.components,n=(0,r.Z)(e,o);return(0,i.kt)("wrapper",(0,a.Z)({},k,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"3461-\u5173\u4e8e-pm2"},"34.6.1 \u5173\u4e8e ",(0,i.kt)("inlineCode",{parentName:"h2"},"pm2")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"pm2")," \u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"NodeJS")," \u5e73\u53f0\u9ad8\u7ea7\u751f\u4ea7\u6d41\u7a0b\u7ba1\u7406\u5668\uff0c\u4e5f\u662f\u4e00\u4e2a\u5b88\u62a4\u8fdb\u7a0b\u7ba1\u7406\u5668\uff0c\u5b83\u80fd\u591f\u7ba1\u7406\u548c\u4fdd\u6301\u5e94\u7528\u7a0b\u5e8f 7","*","24 \u5c0f\u65f6\u5728\u7ebf\u3002"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"pm2")," \u4f18\u70b9:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u7b80\u5355\u6613\u7528"),(0,i.kt)("li",{parentName:"ul"},"\u8de8\u5e73\u53f0"),(0,i.kt)("li",{parentName:"ul"},"\u5bb9\u5668\u96c6\u6210"),(0,i.kt)("li",{parentName:"ul"},"\u5185\u7f6e\u96c6\u7fa4\u3001\u8d1f\u8f7d\u5747\u8861"),(0,i.kt)("li",{parentName:"ul"},"\u652f\u6301\u6a21\u5757\u7cfb\u7edf"),(0,i.kt)("li",{parentName:"ul"},"\u652f\u6301\u5b9e\u65f6\u76d1\u6d4b"),(0,i.kt)("li",{parentName:"ul"},"\u652f\u6301\u65e5\u5fd7\u7ba1\u7406"),(0,i.kt)("li",{parentName:"ul"},"\u652f\u6301\u5173\u952e\u6307\u6807\u76d1\u63a7\n....")),(0,i.kt)("p",null,"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,i.kt)("inlineCode",{parentName:"p"},"pm2")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,i.kt)("a",{parentName:"p",href:"https://pm2.keymetrics.io/"},"https://pm2.keymetrics.io/"),"\u3002"),(0,i.kt)("h2",{id:"3462-\u5982\u4f55\u5b89\u88c5"},"34.6.2 \u5982\u4f55\u5b89\u88c5"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"\u7cfb\u7edf\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"strong"},"NodeJS")," \u73af\u5883 ",(0,i.kt)("a",{parentName:"strong",href:"https://nodejs.org/en/"},"https://nodejs.org/en/")))),(0,i.kt)("p",null,"\u76f8\u4fe1\u5927\u90e8\u5206\u4eba\u7535\u8111\u90fd\u5df2\u7ecf\u5b89\u88c5\u3002"),(0,i.kt)("ol",{start:2},(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"strong"},"npm")," \u6216 ",(0,i.kt)("inlineCode",{parentName:"strong"},"yarn")," \u5168\u5c40\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"strong"},"pm2")," \u5de5\u5177"))),(0,i.kt)("p",null,"npm:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"npm install pm2@latest -g\n")),(0,i.kt)("p",null,"yarn:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"yarn global add pm2\n")),(0,i.kt)("h2",{id:"3463-\u6258\u7ba1-net56-\u5e94\u7528\u7a0b\u5e8f"},"34.6.3 \u6258\u7ba1 ",(0,i.kt)("inlineCode",{parentName:"h2"},".NET5/6")," \u5e94\u7528\u7a0b\u5e8f"),(0,i.kt)("h3",{id:"34631-\u975e\u5355\u6587\u4ef6\u975e\u72ec\u7acb\u53d1\u5e03\u6a21\u5f0f"},"34.6.3.1 \u975e\u5355\u6587\u4ef6/\u975e\u72ec\u7acb\u53d1\u5e03\u6a21\u5f0f"),(0,i.kt)("p",null,"\u8fd9\u79cd\u6a21\u5f0f\u7684\u7279\u70b9\u5c31\u662f\u9700\u8981\u670d\u52a1\u5668\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET5/6")," \u7684\u73af\u5883"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"pm2 start --name xxx dotnet -- xxx.dll\n")),(0,i.kt)("admonition",{title:"\u6307\u5b9a\u7aef\u53e3",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u9700\u6307\u5b9a\u7aef\u53e3\uff0c\u53ef\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\uff1a"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"pm2 start --name xxx dotnet -- PMS.Web.Entry.dll --urls=https://localhost:8089\n")),(0,i.kt)("p",{parentName:"admonition"},"\u6ce8\u610f ",(0,i.kt)("inlineCode",{parentName:"p"},"--")," \u540e\u9762\u53ef\u4ee5\u5199\u5b8c\u6574\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"dotnet")," \u547d\u4ee4\u3002")),(0,i.kt)("admonition",{title:"\u547d\u4ee4\u8bf4\u660e",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"xxx.dll")," \u4e3a\u9879\u76ee\u53d1\u5e03\u540e\u7684\u542f\u52a8\u5c42\u540d\u79f0\u3002"),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"--name")," \u914d\u7f6e\u5e94\u7528\u7a0b\u5e8f\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"pm2")," \u4e2d\u7684\u552f\u4e00\u6807\u8bc6\u3002")),(0,i.kt)("admonition",{title:"\u7ec8\u7aef\u8bf4\u660e",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"\u6ce8\u610f\uff1a\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"--")," \u4f20\u9012\u53c2\u6570\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"powershell")," \u7ec8\u7aef\u4e0b\u65e0\u6548\uff0c\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"cmd")," \u7ec8\u7aef\u4e0b\u624d\u884c\u3002\u6bd4\u5982\u51fa\u73b0\u8fd9\u6837\u7684\u9519\u8bef\uff1a"),(0,i.kt)("img",{src:(0,p.Z)("img/pm2err.png")})),(0,i.kt)("h3",{id:"34632-\u5355\u6587\u4ef6\u72ec\u7acb\u53d1\u5e03\u6a21\u5f0f"},"34.6.3.2 \u5355\u6587\u4ef6/\u72ec\u7acb\u53d1\u5e03\u6a21\u5f0f"),(0,i.kt)("p",null,"\u8fd9\u79cd\u6a21\u5f0f\u7684\u7279\u70b9\u5c31\u662f\u65e0\u9700\u670d\u52a1\u5668\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET")," \u4efb\u4f55\u73af\u5883\uff0c\u53ef\u67e5\u9605 ",(0,i.kt)("a",{parentName:"p",href:"/docs/singlefile"},"\u5355\u6587\u4ef6\u53d1\u5e03\u6587\u6863")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"pm2 start --name xxx PMS.Web.Entry.exe\n")),(0,i.kt)("admonition",{title:"\u6307\u5b9a\u7aef\u53e3",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u9700\u6307\u5b9a\u7aef\u53e3\uff0c\u53ef\u4f7f\u7528\u4e0b\u5217\u547d\u4ee4\uff1a"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"pm2 start --name xxx PMS.Web.Entry.exe -- --urls=https://localhost:8089\n")),(0,i.kt)("p",{parentName:"admonition"},"\u6ce8\u610f ",(0,i.kt)("inlineCode",{parentName:"p"},"--")," \u540e\u9762\u53ef\u4ee5\u5199\u5b8c\u6574\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"dotnet")," \u547d\u4ee4\u3002")),(0,i.kt)("admonition",{title:"\u547d\u4ee4\u8bf4\u660e",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"xxx.exe")," \u4e3a\u9879\u76ee\u53d1\u5e03\u540e\u7684\u542f\u52a8\u5c42\u540d\u79f0\uff0c\u5982\u679c\u540d\u79f0\u5305\u542b ",(0,i.kt)("inlineCode",{parentName:"p"},"\u7a7a\u683c"),"\uff0c\u5219\u4f7f\u7528\u53cc\u5f15\u53f7\u5305\u88f9\uff0c\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},'"x xx.exe"'),"\u3002"),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"--name")," \u914d\u7f6e\u5e94\u7528\u7a0b\u5e8f\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"pm2")," \u4e2d\u7684\u552f\u4e00\u6807\u8bc6\u3002")),(0,i.kt)("admonition",{title:"\u7ec8\u7aef\u8bf4\u660e",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"\u6ce8\u610f\uff1a\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"--")," \u4f20\u9012\u53c2\u6570\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"powershell")," \u7ec8\u7aef\u4e0b\u65e0\u6548\uff0c\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"cmd")," \u7ec8\u7aef\u4e0b\u624d\u884c\u3002"),(0,i.kt)("img",{src:(0,p.Z)("img/pm2err.png")})),(0,i.kt)("h3",{id:"34633-\u542f\u7528\u5e94\u7528\u7a0b\u5e8f"},"34.6.3.3 \u542f\u7528\u5e94\u7528\u7a0b\u5e8f"),(0,i.kt)("p",null,"\u6267\u884c\u4e0a\u8ff0\u547d\u4ee4\u540e\u4f1a\u663e\u793a\u542f\u52a8\u6210\u529f\u65e5\u5fd7\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"PS C:\\Users\\bqrjsoft\\Desktop\\pms> pm2 start --name pms PMS.Web.Entry.exe\n[PM2] Starting C:\\Users\\bqrjsoft\\Desktop\\pms\\PMS.Web.Entry.exe in fork_mode (1 instance)\n[PM2] Done.\n\u250c\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 id \u2502 name \u2502 namespace \u2502 version \u2502 mode \u2502 pid \u2502 uptime \u2502 \u21ba \u2502 status \u2502 cpu \u2502 mem \u2502 user \u2502 watching \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 0 \u2502 pms \u2502 default \u2502 N/A \u2502 fork \u2502 41764 \u2502 0s \u2502 0 \u2502 online \u2502 0% \u2502 85.0mb \u2502 bqrjsoft \u2502 disabled \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\nPS C:\\Users\\bqrjsoft\\Desktop\\pms>\n")),(0,i.kt)("img",{src:(0,p.Z)("img/sf30.png")}),(0,i.kt)("admonition",{title:"\u5173\u4e8e\u7aef\u53e3",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u7a0b\u5e8f\u9ed8\u8ba4\u7aef\u53e3\u90fd\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"5000"),"\uff0c\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"http://localhost:5000"),"\u3002")),(0,i.kt)("h3",{id:"34634-json-\u914d\u7f6e\u542f\u52a8\u65b9\u5f0f"},"34.6.3.4 ",(0,i.kt)("inlineCode",{parentName:"h3"},"json")," \u914d\u7f6e/\u542f\u52a8\u65b9\u5f0f"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"pm2")," \u90e8\u7f72\u4e5f\u63d0\u4f9b\u4e86\u975e\u5e38\u7b80\u5355\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"json")," \u914d\u7f6e\u65b9\u5f0f\uff0c\u90e8\u7f72\u66f4\u7b80\u5355\uff0c\u62d3\u5c55\u6027\u66f4\u5f3a\uff0c\u4e0d\u9700\u8981\u6bcf\u6b21\u91cd\u590d\u8f93\u5165\u547d\u4ee4\uff0c\u5982\u5728\u9879\u76ee\u542f\u52a8\u9879\u76ee\u4e0b\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"p"},"pm2.json"),"\uff0c\u5e76\u8bbe\u7f6e\u6587\u4ef6\u5c5e\u6027 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u5185\u5bb9")," \u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"\u59cb\u7ec8\u590d\u5236"),"\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers {3,15,16,19} title="PMS/Web.Entry/pm2.json"',showLineNumbers:!0,"{3,15,16,19}":!0,title:'"PMS/Web.Entry/pm2.json"'},'{\n "apps": {\n "name": "\u552f\u4e00\u6807\u8bc6",\n "script": "dotnet",\n "exec_mode": "fork",\n "error_file": "logs/err.log",\n "out_file": "logs/out.log",\n "merge_logs": true,\n "log_date_format": "YYYY-MM-DD HH:mm:ss",\n "min_uptime": "60s",\n "max_restarts": 30,\n "autorestart": true,\n "restart_delay": "60",\n "args": [\n "PMS.Web.Entry.dll",\n "--urls=http://*:5001"\n ],\n "env": {\n "ASPNETCORE_ENVIRONMENT": "Production"\n }\n }\n}\n')),(0,i.kt)("p",null,"\u5728\u53d1\u5e03\u540e\u7684\u6587\u4ef6\u76ee\u5f55\u4e0b\u6253\u5f00\u7ec8\u7aef\u6267\u884c\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"pm2 start pm2.json\n")),(0,i.kt)("h2",{id:"3464-pm2-\u5e38\u89c1\u64cd\u4f5c"},"34.6.4 ",(0,i.kt)("inlineCode",{parentName:"h2"},"pm2")," \u5e38\u89c1\u64cd\u4f5c"),(0,i.kt)("h3",{id:"34641-\u5b9e\u65f6\u76d1\u542c\u8fd0\u884c\u72b6\u6001"},"34.6.4.1 \u5b9e\u65f6\u76d1\u542c\u8fd0\u884c\u72b6\u6001"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"pm2 monit\n")),(0,i.kt)("img",{src:(0,p.Z)("img/sf4.png")}),(0,i.kt)("h3",{id:"34642-\u663e\u793a\u8fd0\u884c\u65e5\u5fd7"},"34.6.4.2 \u663e\u793a\u8fd0\u884c\u65e5\u5fd7"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"pm2 logs\n")),(0,i.kt)("img",{src:(0,p.Z)("img/sf5.png")}),(0,i.kt)("h3",{id:"34643-\u67e5\u770b\u5e94\u7528\u4fe1\u606f"},"34.6.4.3 \u67e5\u770b\u5e94\u7528\u4fe1\u606f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"pm2 info pms\n")),(0,i.kt)("p",null,"\u6ce8\u610f\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"pms")," \u4e3a\u60a8\u914d\u7f6e\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"--name")," \u540d\u79f0\u3002"),(0,i.kt)("img",{src:(0,p.Z)("img/sf6.png")}),(0,i.kt)("h3",{id:"34644-\u968f\u673a\u542f\u52a8"},"34.6.4.4 \u968f\u673a\u542f\u52a8"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"pm2 startup\npm2 save\n")),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Windows")," \u4e0b\u968f\u673a\u542f\u52a8"),(0,i.kt)("p",{parentName:"admonition"},"\u53ef\u67e5\u9605 ",(0,i.kt)("a",{parentName:"p",href:"https://www.npmjs.com/package/pm2-windows-startup"},"pm2-windows-startup"),"\u3002"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"npm install pm2-windows-startup -g\npm2-startup install\npm2 save\n"))),(0,i.kt)("h3",{id:"34645-\u96c6\u7fa4\u6a21\u5f0f\u8d1f\u8f7d\u5747\u8861"},"34.6.4.5 \u96c6\u7fa4\u6a21\u5f0f\uff08\u8d1f\u8f7d\u5747\u8861\uff09"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u975e\u5355\u6587\u4ef6/\u975e\u72ec\u7acb\u53d1\u5e03\u6a21\u5f0f")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'pm2 start "xxx.dll" -i max\n')),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u5355\u6587\u4ef6/\u72ec\u7acb\u53d1\u5e03\u6a21\u5f0f")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"pm2 start xxx.exe -i max\n")),(0,i.kt)("h3",{id:"34646-\u5176\u4ed6\u64cd\u4f5c"},"34.6.4.6 \u5176\u4ed6\u64cd\u4f5c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"// \u91cd\u542f\u5e94\u7528\npm2 restart app_name\n\n// \u91cd\u8f7d\u5e94\u7528\npm2 reload app_name\n\n// \u505c\u6b62\u5e94\u7528\npm2 stop app_name\n\n// \u5220\u9664\u5e94\u7528\npm2 delete app_name\n")),(0,i.kt)("p",null,"\u66f4\u591a ",(0,i.kt)("inlineCode",{parentName:"p"},"pm2")," \u6587\u6863\u53ef\u67e5\u9605 ",(0,i.kt)("a",{parentName:"p",href:"https://pm2.keymetrics.io/docs/usage/quick-start/"},"https://pm2.keymetrics.io/docs/usage/quick-start/")),(0,i.kt)("h2",{id:"3465-\u53cd\u9988\u4e0e\u5efa\u8bae"},"34.6.5 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}N.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/42806b0f.623dc805.js b/handbook/build/assets/js/42806b0f.623dc805.js new file mode 100644 index 00000000000..c49cdd7c1e8 --- /dev/null +++ b/handbook/build/assets/js/42806b0f.623dc805.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7903],{3905:function(e,n,t){t.d(n,{Zo:function(){return s},kt:function(){return u}});var o=t(7294);function p(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function a(e){for(var n=1;n=0||(p[t]=e[t]);return p}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(p[t]=e[t])}return p}var l=o.createContext({}),m=function(e){var n=o.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},s=function(e){var n=m(e.components);return o.createElement(l.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},c=o.forwardRef((function(e,n){var t=e.components,p=e.mdxType,i=e.originalType,l=e.parentName,s=r(e,["components","mdxType","originalType","parentName"]),c=m(t),u=p,C=c["".concat(l,".").concat(u)]||c[u]||d[u]||i;return t?o.createElement(C,a(a({ref:n},s),{},{components:t})):o.createElement(C,a({ref:n},s))}));function u(e,n){var t=arguments,p=n&&n.mdxType;if("string"==typeof e||p){var i=t.length,a=new Array(i);a[0]=c;var r={};for(var l in n)hasOwnProperty.call(n,l)&&(r[l]=n[l]);r.originalType=e,r.mdxType="string"==typeof e?e:p,a[1]=r;for(var m=2;mIComponent",id:"324-icomponent",level:2},{value:"3.2.4.1 IServiceComponent",id:"3241-iservicecomponent",level:3},{value:"3.2.4.2 IApplicationComponent",id:"3242-iapplicationcomponent",level:3},{value:"3.2.4.3 IWebComponent",id:"3243-iwebcomponent",level:3},{value:"3.2.4.3 \u6ce8\u518c\u7ec4\u4ef6",id:"3243-\u6ce8\u518c\u7ec4\u4ef6",level:3},{value:"3.2.5 \u7ec4\u4ef6\u8bbe\u8ba1\u539f\u5219",id:"325-\u7ec4\u4ef6\u8bbe\u8ba1\u539f\u5219",level:2},{value:"3.2.5.1 \u804c\u8d23\u5355\u4e00\u6027",id:"3251-\u804c\u8d23\u5355\u4e00\u6027",level:3},{value:"3.2.5.2 \u7ea6\u5b9a\u5927\u4e8e\u914d\u7f6e",id:"3252-\u7ea6\u5b9a\u5927\u4e8e\u914d\u7f6e",level:3},{value:"3.2.6 [DependsOn] \u8be6\u89e3",id:"326-dependson-\u8be6\u89e3",level:2},{value:"3.2.6.1 \u914d\u7f6e\u4ecb\u7ecd",id:"3261-\u914d\u7f6e\u4ecb\u7ecd",level:3},{value:"3.2.6.2 \u91cd\u590d\u4f9d\u8d56\u95ee\u9898",id:"3262-\u91cd\u590d\u4f9d\u8d56\u95ee\u9898",level:3},{value:"3.2.6.3 \u5faa\u73af\u4f9d\u8d56\u95ee\u9898",id:"3263-\u5faa\u73af\u4f9d\u8d56\u95ee\u9898",level:3},{value:"3.2.7 ComponentContext \u8be6\u89e3",id:"327-componentcontext-\u8be6\u89e3",level:2},{value:"3.2.7.1 \u5c5e\u6027\u4ecb\u7ecd",id:"3271-\u5c5e\u6027\u4ecb\u7ecd",level:3},{value:"3.2.7.2 \u53c2\u6570\u914d\u7f6e/\u83b7\u53d6",id:"3272-\u53c2\u6570\u914d\u7f6e\u83b7\u53d6",level:3},{value:"\u4f8b\u5b50\u8bf4\u660e",id:"\u4f8b\u5b50\u8bf4\u660e",level:4},{value:"3.2.8 \u5b9e\u73b0 Startup.cs \u6a21\u5f0f",id:"328-\u5b9e\u73b0-startupcs-\u6a21\u5f0f",level:2},{value:"3.2.9 \u6700\u4f73\u5b9e\u8df5\uff1f",id:"329-\u6700\u4f73\u5b9e\u8df5",level:2},{value:"3.2.10 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"3210-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],c={toc:d};function u(e){var n=e.components,t=(0,p.Z)(e,a);return(0,i.kt)("wrapper",(0,o.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"321-\u5386\u53f2\u80cc\u666f"},"3.2.1 \u5386\u53f2\u80cc\u666f"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET Core 2+")," \u4e4b\u540e\uff0c\u5fae\u8f6f\u521b\u9020\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u6a21\u5f0f\uff0c\u5728\u8fd9\u6837\u7684\u6a21\u5f0f\u4e2d\uff0c\u9700\u8981\u4efb\u4f55\u670d\u52a1\u6216\u8005\u4e2d\u95f4\u4ef6\u5904\u7406\uff0c\u53ea\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u6587\u4ef6\u7684\u4e24\u4e2a\u65b9\u6cd5\uff08",(0,i.kt)("inlineCode",{parentName:"p"},"ConfigureServices")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"Configure"),"\uff09\u4e2d\u914d\u7f6e\u5373\u53ef\u3002"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u4f46\u5728 ",(0,i.kt)("inlineCode",{parentName:"strong"},".NET6")," \u4e4b\u540e\uff0c\u5fae\u8f6f\u4e0d\u518d\u63a8\u8350\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Startup.cs")," \u6a21\u5f0f\u3002")),(0,i.kt)("p",null,"\u5728\u8fd9\u91cc\uff0c\u4e0d\u9610\u8ff0 ",(0,i.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u7684\u4f18\u70b9\uff0c\u5c31\u5217\u4e3e\u51e0\u4e2a\u6bd4\u8f83\u660e\u663e\u7684\u7f3a\u70b9\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u5fc5\u987b\u653e\u5728\u542f\u52a8\u5c42\u4e14\u4e3b\u673a\u542f\u52a8\u65f6\u9700\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"li"},".UseStartup<>")," \u8fdb\u884c\u6ce8\u518c\uff0c\u6b64\u95ee\u9898\u5728 ",(0,i.kt)("inlineCode",{parentName:"li"},"Furion")," \u5df2\u89e3\u51b3 ",(0,i.kt)("inlineCode",{parentName:"li"},"AppStartup")),(0,i.kt)("li",{parentName:"ul"},"\u914d\u7f6e\u670d\u52a1\u5f88\u5bb9\u6613\u7f16\u5199\u51fa\u53c8\u81ed\u53c8\u957f\u7684 ",(0,i.kt)("inlineCode",{parentName:"li"},"service.AddXXX()")," \u548c ",(0,i.kt)("inlineCode",{parentName:"li"},"app.AddXXX()")," \u4ee3\u7801\uff0c\u4e0d\u7ba1\u662f\u9605\u8bfb\u6027\u548c\u7075\u6d3b\u6027\u5927\u5927\u51cf\u5206"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"\u5bf9\u670d\u52a1\u6ce8\u518c\u548c\u4e2d\u95f4\u4ef6\u6ce8\u518c\u6709\u987a\u5e8f\u8981\u6c42\uff0c\u4e0d\u540c\u7684\u987a\u5e8f\u53ef\u80fd\u4ea7\u751f\u4e0d\u540c\u7684\u6548\u679c\uff0c\u751a\u81f3\u51fa\u73b0\u5f02\u5e38")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"\u4e0d\u80fd\u5b9e\u73b0\u6a21\u5757\u5316\u81ea\u52a8\u88c5\u8f7d\u6ce8\u518c\uff0c\u6dfb\u52a0\u65b0\u7684\u6a21\u5757\u9700\u8981\u624b\u52a8\u6ce8\u518c\uff0c\u6ce8\u518c\u53c8\u5f97\u8003\u8651\u6a21\u5757\u5316\u4e4b\u95f4\u4f9d\u8d56\u987a\u5e8f\u95ee\u9898")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"\u4e0d\u80fd\u5bf9\u6a21\u5757\u6ce8\u518c\u8fdb\u884c\u76d1\u89c6\uff0c\u6bd4\u5982\u52a0\u8f7d\u4e4b\u524d\uff0c\u52a0\u8f7d\u5931\u8d25\uff0c\u52a0\u8f7d\u4e4b\u540e"))),(0,i.kt)("h2",{id:"322-\u5148\u770b\u4e00\u4e2a\u4f8b\u5b50"},"3.2.2 \u5148\u770b\u4e00\u4e2a\u4f8b\u5b50"),(0,i.kt)("p",null,"\u5728\u4e00\u4e2a\u5927\u578b\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET Core")," \u9879\u76ee\u4e2d\uff0c\u4f1a\u7ecf\u5e38\u770b\u5230\u8fd9\u6837\u7684\u4ee3\u7801\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {12-26,31-50}",showLineNumbers:!0,"{12-26,31-50}":!0},"using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace Furion.Web.Core;\n\npublic sealed class FurWebCoreStartup : AppStartup\n{\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddCorsAccessor();\n services.AddControllers().AddInject();\n services.AddRemoteRequest();\n services.AddEventBus();\n services.AddAppLocalization();\n services.AddViewEngine();\n services.AddSensitiveDetection();\n services.AddVirtualFileServer();\n services.AddX();\n services.AddXX();\n services.AddXXX();\n services.AddXXXX();\n services.AddXXXXX();\n services.AddXXXXXX();\n // .....\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n if (env.IsDevelopment())\n {\n app.UseDeveloperExceptionPage();\n }\n app.UseHttpsRedirection();\n app.UseRouting();\n app.UseCorsAccessor();\n app.UseAuthentication();\n app.UseAuthorization();\n app.UseInject();\n app.UseX();\n app.UseXX();\n app.UseXXX();\n app.UseXXXX();\n app.UseXXXXX();\n app.UseXXXXXX();\n app.UseEndpoints(endpoints =>\n {\n endpoints.MapControllers();\n });\n }\n}\n")),(0,i.kt)("p",null,"\u53ef\u80fd\u5bf9\u4e8e\u5927\u90e8\u5206 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET")," \u5f00\u53d1\u8005\u6765\u8bf4\u8c8c\u4f3c\u6ca1\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u4f46\u662f\u4ed4\u7ec6\u77a7\u77a7\uff0c\u8fd9\u91cc\u5145\u65a5\u7740\u5927\u91cf\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},".AddXXXX()")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},".UseXXXX()"),"\uff0c",(0,i.kt)("strong",{parentName:"p"},"\u771f\u7684\u7f8e\u89c2\uff0c\u771f\u7684\u597d\u5417"),"\uff1f\u800c\u4e14\u7a0d\u6709\u4e0d\u614e\u79fb\u52a8\u4e86\u5b83\u4eec\u7684\u6ce8\u518c\u987a\u5e8f\u53ef\u80fd\u4f1a\u5f15\u53d1\u707e\u96be\uff0c\u8fd8\u6709\u53ef\u80fd\u591a\u4e2a\u670d\u52a1\u4e4b\u95f4\u76f8\u4e92\u4f9d\u8d56\uff0c\u8981\u4e48\u5168\u90e8\u79fb\u9664\uff0c\u8981\u4e48\u5168\u90e8\u4fdd\u7559\uff0c\u672a\u6765\u66ff\u4ee3\u4f60\u5f00\u53d1\u5c97\u4f4d\u7684\u4eba\u77e5\u9053\u5417\uff1f"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u8bd5\u95ee\uff0c\u8fd9\u4e2a\u95ee\u9898\u662f\u65e0\u89e3\u5417\uff1f")),(0,i.kt)("h2",{id:"323-\u5f53\u7136\u6709\u89e3"},"3.2.3 \u5f53\u7136\u6709\u89e3"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 3.7.3+")," \u7248\u672c\u4e4b\u540e\uff0c\u501f\u52a9 ",(0,i.kt)("inlineCode",{parentName:"p"},"Docker-Compose")," \u7684\u8bbe\u8ba1\u7406\u5ff5\uff0c\u63a8\u51fa\u4e86\u5168\u65b0\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Component \u7ec4\u4ef6\u5316")," \u6a21\u5f0f\uff0c\u901a\u8fc7\u7ec4\u4ef6\u5316\u5f00\u53d1\u53ef\u4ee5\u5b9e\u73b0\u7ec4\u4ef6\u4e4b\u95f4\u76f8\u4e92\u4f9d\u8d56\uff0c\u76f8\u4e92\u94fe\u63a5\uff0c\u8fd8\u53ef\u4ee5\u5171\u4eab\u53c2\u6570\uff0c\u4f60\u4ec5\u4ec5\u9700\u8981\u7f16\u5199\u4e00\u4e2a\u5165\u53e3\u7ec4\u4ef6\u5373\u53ef\u3002"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u5148\u770b\u4e00\u4e2a\u4f8b\u5b50\uff1a")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u521b\u5efa ",(0,i.kt)("inlineCode",{parentName:"li"},"EntryServiceComponent")," \u5165\u53e3\u670d\u52a1\u7ec4\u4ef6")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,6}",showLineNumbers:!0,"{2,6}":!0},"// \u521b\u5efa\u5165\u53e3\u670d\u52a1\u7ec4\u4ef6\u5b9e\u73b0 IServeComponent \u63a5\u53e3\npublic sealed class EntryServiceComponent : IServiceComponent\n{\n public void Load(IServiceCollection services, ComponentContext componentContext)\n {\n // \u505a\u4efb\u4f55\u4f60\u60f3\u505a\u7684\u4e8b\u60c5\uff0c\u5982 service.AddYourInitService(); \u5982\u6dfb\u52a0\u4f60\u7684\u6a21\u5757\u521d\u59cb\u5316\u914d\u7f6e\n }\n}\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"li"},"AddComponent<>")," \u6ce8\u518c\u5165\u53e3\u7ec4\u4ef6")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"{2}":!0},"// \u901a\u8fc7 .AddComponent \u6ce8\u518c\u4e00\u4e2a\u5165\u53e3\u670d\u52a1\u7ec4\u4ef6\nServe.Run(RunOptions.Default.AddComponent());\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6a21\u62df\u5b9e\u9645\u9879\u76ee\u7684\u5f00\u53d1\u9700\u6c42\uff1a")),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"\u9700\u8981\u6dfb\u52a0\u8de8\u57df\u670d\u52a1\uff0c\u521b\u5efa ",(0,i.kt)("inlineCode",{parentName:"li"},"CorsServiceComponent")," \u7ec4\u4ef6")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5}",showLineNumbers:!0,"{1,5}":!0},"public sealed class CorsServiceComponent : IServiceComponent\n{\n public void Load(IServiceCollection services, ComponentContext componentContext)\n {\n services.AddCorsAccessor();\n }\n}\n")),(0,i.kt)("ol",{start:2},(0,i.kt)("li",{parentName:"ol"},"\u9700\u8981\u6dfb\u52a0\u52a8\u6001 ",(0,i.kt)("inlineCode",{parentName:"li"},"WebAPI")," \u670d\u52a1\uff0c\u521b\u5efa ",(0,i.kt)("inlineCode",{parentName:"li"},"DynamicApiServiceComponent")," \u7ec4\u4ef6")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5}",showLineNumbers:!0,"{1,5}":!0},"public sealed class DynamicApiServiceComponent : IServiceComponent\n{\n public void Load(IServiceCollection services, ComponentContext componentContext)\n {\n services.AddDynamicApiControllers();\n }\n}\n")),(0,i.kt)("ol",{start:3},(0,i.kt)("li",{parentName:"ol"},"\u9700\u8981\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"li"},"XXX")," \u7b2c\u4e09\u65b9\u670d\u52a1\uff0c\u521b\u5efa ",(0,i.kt)("inlineCode",{parentName:"li"},"XXXServiceComponent")," \u7ec4\u4ef6")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5}",showLineNumbers:!0,"{1,5}":!0},"public sealed class XXXServiceComponent : IServiceComponent\n{\n public void Load(IServiceCollection services, ComponentContext componentContext)\n {\n services.AddXXX();\n }\n}\n")),(0,i.kt)("p",null,"\u6709\u4e86\u8fd9\u4e48\u591a\u670d\u52a1\u7ec4\u4ef6\uff0c\u90a3\u600e\u4e48\u5c06\u5b83\u4eec\u5173\u8054\u8d77\u6765\u5462\uff0c\u800c\u4e14\u80fd\u591f\u6b63\u786e\u7684\u5904\u7406\u5b83\u4eec\u7684\u987a\u5e8f\u5462\uff1f\u6bd4\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"AddXXX()")," \u5fc5\u987b\u7b49 ",(0,i.kt)("inlineCode",{parentName:"p"},"AddDynamicApiControllers()")," \u6ce8\u518c\u624d\u80fd\u6ce8\u518c\uff0c\u8fd9\u65f6\u5019\u53ea\u9700\u8981\u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"XXXServiceComponent")," \u6dfb\u52a0\u4f9d\u8d56\u5373\u53ef\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-3}",showLineNumbers:!0,"{1-3}":!0},"[DependsOn(\n typeof(DynamicApiServiceComponent)\n)]\npublic sealed class XXXServiceComponent : IServiceComponent\n{\n // ....\n}\n")),(0,i.kt)("p",null,"\u8fd9\u6837\u8868\u793a ",(0,i.kt)("inlineCode",{parentName:"p"},"XXXServiceComponent")," \u4f9d\u8d56 ",(0,i.kt)("inlineCode",{parentName:"p"},"DynamicApiServiceComponent")," \u7ec4\u4ef6\uff0c\u53ea\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},"DynamicApiServiceComponent")," \u5b8c\u6210\u6ce8\u518c\u624d\u4f1a\u6ce8\u518c ",(0,i.kt)("inlineCode",{parentName:"p"},"XXXServiceComponent"),"\u3002"),(0,i.kt)("p",null,"\u90a3\u4e48\u6700\u540e\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"EntryServiceComponent")," \u7684\u4ee3\u7801\u5c06\u4f1a\u662f\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-4}",showLineNumbers:!0,"{1-4}":!0},"[DependsOn(\n typeof(CorsServiceComponent),\n typeof(XXXServiceComponent)\n)]\npublic sealed class EntryServiceComponent : IServiceComponent\n{\n // ....\n}\n")),(0,i.kt)("p",null,"\u6700\u540e\u751f\u6210\u7684\u8c03\u7528\u987a\u5e8f\u4e3a\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"AddCorsAccessor()")," -> ",(0,i.kt)("inlineCode",{parentName:"p"},"AddDynamicApiControllers()")," -> ",(0,i.kt)("inlineCode",{parentName:"p"},"AddXXX()")," -> ",(0,i.kt)("inlineCode",{parentName:"p"},"AddEntry()"),"\u3002"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u770b\u5230\u8fd9\u91cc\uff0c\u662f\u5426\u5df2\u627e\u5230\u7b54\u6848\uff1a\u6bcf\u4e00\u4e2a\u9879\u76ee\u53ea\u6709\u4e00\u4e2a\u5165\u53e3\u7ec4\u4ef6\uff0c\u6bcf\u4e2a\u7ec4\u4ef6\u53ea\u505a\u4e00\u4ef6\u4e8b\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u53ef\u4ee5\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"strong"},"DependsOn")," \u914d\u7f6e\u4f9d\u8d56\uff0c\u7ec4\u4ef6\u4e4b\u95f4\u8fd8\u80fd\u5171\u4eab\u4e0a\u4e0b\u6587\u6570\u636e ",(0,i.kt)("inlineCode",{parentName:"strong"},"ComponentContext"),"\u3002")),(0,i.kt)("p",null,"\u6ca1\u9519\uff0c\u8fd9\u5c31\u662f Furion \u76ee\u524d\u80fd\u591f\u60f3\u5230\u7684\u6700\u4f18\u89e3\u51b3\u65b9\u6848\u3002"),(0,i.kt)("h2",{id:"324-icomponent"},"3.2.4 ",(0,i.kt)("inlineCode",{parentName:"h2"},"IComponent")),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 3.7.3+")," \u7248\u672c\uff0c\u65b0\u589e\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Components")," \u6a21\u5757\uff0c\u8be5\u6a21\u5757\u7684\u6839\u63a5\u53e3\u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"IComponent"),"\uff0c\u542b\u6709\u4e24\u4e2a\u6d3e\u751f\u63a5\u53e3 ",(0,i.kt)("inlineCode",{parentName:"p"},"IServiceComponent")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"IApplicationComponent"),"\u3002"),(0,i.kt)("h3",{id:"3241-iservicecomponent"},"3.2.4.1 ",(0,i.kt)("inlineCode",{parentName:"h3"},"IServiceComponent")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"IServiceComponent")," \u63a5\u53e3\u7b80\u79f0",(0,i.kt)("strong",{parentName:"p"},"\u670d\u52a1\u7ec4\u4ef6"),"\u5bf9\u5e94\u7684\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"ConfigureService"),"\uff0c\u63a5\u53e3\u7b7e\u540d\u4e3a\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,13}",showLineNumbers:!0,"{6,13}":!0},'namespace System;\n\n/// \n/// \u670d\u52a1\u7ec4\u4ef6\u4f9d\u8d56\u63a5\u53e3\n/// \npublic interface IServiceComponent : IComponent\n{\n /// \n /// \u88c5\u8f7d\u670d\u52a1\n /// \n /// \n /// \u7ec4\u4ef6\u4e0a\u4e0b\u6587\n void Load(IServiceCollection services, ComponentContext componentContext);\n}\n')),(0,i.kt)("p",null,"\u9700\u8981\u6ce8\u518c\u670d\u52a1\u53ef\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Load")," \u65b9\u6cd5\u4e2d\u6ce8\u518c\u5373\u53ef\u3002"),(0,i.kt)("h3",{id:"3242-iapplicationcomponent"},"3.2.4.2 ",(0,i.kt)("inlineCode",{parentName:"h3"},"IApplicationComponent")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"IApplicationComponent")," \u63a5\u53e3\u7b80\u79f0",(0,i.kt)("strong",{parentName:"p"},"\u4e2d\u95f4\u4ef6\u7ec4\u4ef6"),"\u5bf9\u5e94\u7684\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Configure"),"\uff0c\u63a5\u53e3\u7b7e\u540d\u4e3a\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,14}",showLineNumbers:!0,"{6,14}":!0},'namespace System;\n\n/// \n/// \u5e94\u7528\u4e2d\u95f4\u4ef6\u63a5\u53e3\n/// \npublic interface IApplicationComponent : IComponent\n{\n /// \n /// \u88c5\u7f6e\u4e2d\u95f4\u4ef6\n /// \n /// \n /// \n /// \u7ec4\u4ef6\u4e0a\u4e0b\u6587\n void Load(IApplicationBuilder app, IWebHostEnvironment env, ComponentContext componentContext);\n}\n')),(0,i.kt)("p",null,"\u9700\u8981\u6ce8\u518c\u4e2d\u95f4\u4ef6\u53ef\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Load")," \u65b9\u6cd5\u4e2d\u6ce8\u518c\u5373\u53ef\u3002"),(0,i.kt)("h3",{id:"3243-iwebcomponent"},"3.2.4.3 ",(0,i.kt)("inlineCode",{parentName:"h3"},"IWebComponent")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"IWebComponent")," \u63a5\u53e3\u7b80\u79f0",(0,i.kt)("strong",{parentName:"p"}," ",(0,i.kt)("inlineCode",{parentName:"strong"},"Web")," \u7ec4\u4ef6"),"\u5bf9\u5e94\u7684\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"Program.cs")," \u4e2d\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"WebApplicationBuilder"),"\uff0c\u63a5\u53e3\u7b7e\u540d\u4e3a\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,13}",showLineNumbers:!0,"{6,13}":!0},'namespace System;\n\n/// \n/// WebApplicationBuilder \u7ec4\u4ef6\u4f9d\u8d56\u63a5\u53e3\n/// \npublic interface IWebComponent : IComponent\n{\n /// \n /// \u88c5\u7f6e Web \u5e94\u7528\u6784\u5efa\u5668\n /// \n /// \n /// \u7ec4\u4ef6\u4e0a\u4e0b\u6587\n void Load(WebApplicationBuilder builder, ComponentContext componentContext);\n}\n')),(0,i.kt)("p",null,"\u9700\u8981\u6ce8\u518c\u4e2d\u95f4\u4ef6\u53ef\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Load")," \u65b9\u6cd5\u4e2d\u6ce8\u518c\u5373\u53ef\u3002"),(0,i.kt)("h3",{id:"3243-\u6ce8\u518c\u7ec4\u4ef6"},"3.2.4.3 \u6ce8\u518c\u7ec4\u4ef6"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86\u591a\u79cd\u6ce8\u518c\u7ec4\u4ef6\u7684\u65b9\u5f0f\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u65b9\u5f0f\u4e00")),(0,i.kt)("p",null,"\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"RunOptions"),"\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"LegacyRunOptions"),"\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"GenericRunOptions")," \u65b9\u5f0f\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2-3,7}",showLineNumbers:!0,"{2-3,7}":!0},"Serve.Run(RunOptions.Default\n .AddComponent()\n .UseComponent());\n\n// .NET6+ \u8fd8\u652f\u6301 AddWebComponent();\nServe.Run(RunOptions.Default\n .AddWebComponent());\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u65b9\u5f0f\u4e8c")),(0,i.kt)("p",null,"\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"services.AddComponent")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"app.UseComponent")," \u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8}",showLineNumbers:!0,"{2,5,8}":!0},"// \u670d\u52a1\u7ec4\u4ef6\nservice.AddComponent();\n\n// \u4e2d\u95f4\u4ef6\u7ec4\u4ef6\napp.UseComponent();\n\n// .NET6+ \u8fd8\u652f\u6301 AddWebComponent();\nbuilder.AddWebComponent();\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u65b9\u5f0f\u4e09")),(0,i.kt)("p",null,"\u7ec4\u4ef6\u6ce8\u518c\u53ef\u4ee5\u4f20\u9012\u53c2\u6570\uff0c\u901a\u8fc7\u6700\u540e\u7684\u53c2\u6570\u6307\u5b9a\u3002"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8}",showLineNumbers:!0,"{2,5,8}":!0},"// \u670d\u52a1\u7ec4\u4ef6\nservice.AddComponent(options);\n\n// \u4e2d\u95f4\u4ef6\u7ec4\u4ef6\napp.UseComponent(options);\n\n// .NET6+ \u8fd8\u652f\u6301 AddWebComponent();\nbuilder.AddWebComponent(options);\n")),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u7c7b\u578b ",(0,i.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Type")," \u6ce8\u518c\u65b9\u5f0f"),(0,i.kt)("p",{parentName:"admonition"},"\u9664\u4e86\u63d0\u4f9b\u6cdb\u578b\u6ce8\u518c\u7ec4\u4ef6\u7684\u65b9\u5f0f\uff0c\u8fd8\u63d0\u4f9b\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},".AddComponent(typeof(XXXComponent))")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},".UseComponent(typeof(XXXComponent))")," \u65b9\u5f0f\u3002")),(0,i.kt)("h2",{id:"325-\u7ec4\u4ef6\u8bbe\u8ba1\u539f\u5219"},"3.2.5 \u7ec4\u4ef6\u8bbe\u8ba1\u539f\u5219"),(0,i.kt)("h3",{id:"3251-\u804c\u8d23\u5355\u4e00\u6027"},"3.2.5.1 \u804c\u8d23\u5355\u4e00\u6027"),(0,i.kt)("p",null,"\u7ec4\u4ef6\u7684\u8bbe\u8ba1\u7406\u5e94\u9075\u5faa",(0,i.kt)("strong",{parentName:"p"},"\u804c\u8d23\u5355\u4e00\u6027\u539f\u5219"),"\uff0c\u5177\u6709\u5355\u4e00\u6027\u53c8\u6709\u804c\u8d23\u660e\u786e\u6027\uff0c\u901a\u4fd7\u70b9\u8bf4\u6bcf\u4e00\u4e2a\u7ec4\u4ef6\u5c3d\u53ef\u80fd\u7684\u53ea\u505a\u4e00\u4ef6\u4e8b\uff0c\u5982\u679c\u7ec4\u4ef6\u4e4b\u95f4\u6709\u4f9d\u8d56\uff0c\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"[DependsOn]")," \u58f0\u660e\u914d\u7f6e\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5}",showLineNumbers:!0,"{1,5}":!0},'[DependsOn(\n typeof(OtherServiceComponent),\n "Other.Assembly;Other.Assembly.OtherServiceComponent"\n)]\npublic sealed class YourServiceComponent : IServiceComponent\n{\n public void Load(IServiceCollection services, ComponentContext componentContext)\n {\n services.AddXXX();\n }\n}\n')),(0,i.kt)("h3",{id:"3252-\u7ea6\u5b9a\u5927\u4e8e\u914d\u7f6e"},"3.2.5.2 \u7ea6\u5b9a\u5927\u4e8e\u914d\u7f6e"),(0,i.kt)("p",null,"\u7531\u4e8e\u7ec4\u4ef6\u901a\u5e38\u5305\u542b\u670d\u52a1\u548c\u4e2d\u95f4\u4ef6\u4e24\u4e2a\u6ce8\u518c\uff0c\u6240\u4ee5\u63a8\u8350\u7ec4\u4ef6\u7c7b\u7684\u547d\u540d\u7edf\u4e00\u4e3a\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"XXXComponent.cs"),"\uff0c\u7136\u540e\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"XXXComponent.cs")," \u4e2d\u5206\u522b\u5199 ",(0,i.kt)("inlineCode",{parentName:"p"},"IServiceComponent")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"IApplicationComponent")," \u7ec4\u4ef6\u3002"),(0,i.kt)("p",null,"\u5c3d\u53ef\u80fd\u6bcf\u4e00\u4e2a\u670d\u52a1\u7ec4\u4ef6\uff08",(0,i.kt)("inlineCode",{parentName:"p"},"IServiceComponent"),"\uff09\u4ee5 ",(0,i.kt)("inlineCode",{parentName:"p"},"ServiceComponent")," \u7ed3\u5c3e\uff0c\u6bcf\u4e00\u4e2a\u4e2d\u95f4\u4ef6\u7ec4\u4ef6\uff08",(0,i.kt)("inlineCode",{parentName:"p"},"IApplicationComponent"),"\uff09\u4ee5 ",(0,i.kt)("inlineCode",{parentName:"p"},"ApplicationComponent")," \u7ed3\u5c3e\u3002\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {3-4,9-10,15-16} title="XXXComponent.cs"',showLineNumbers:!0,"{3-4,9-10,15-16}":!0,title:'"XXXComponent.cs"'},"namespace Your.Components;\n\n// \u670d\u52a1\u7ec4\u4ef6\npublic sealed class XXXServiceComponent : IServiceComponent\n{\n // ....\n}\n\n// \u4e2d\u95f4\u4ef6\u7ec4\u4ef6\npublic sealed class XXXApplicationComponent : IApplicationComponent\n{\n // ....\n}\n\n// WebApplicationBuilder \u7ec4\u4ef6\npublic sealed class XXXWebComponent : IWebComponent\n{\n // ....\n}\n")),(0,i.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u6ca1\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},"IServiceComponent")," \u6216 ",(0,i.kt)("inlineCode",{parentName:"p"},"IApplicationComponent"),"\uff0c\u5219\u5199\u5176\u4e00\u5373\u53ef\u3002")),(0,i.kt)("h2",{id:"326-dependson-\u8be6\u89e3"},"3.2.6 ",(0,i.kt)("inlineCode",{parentName:"h2"},"[DependsOn]")," \u8be6\u89e3"),(0,i.kt)("p",null,"\u7531\u4e8e\u7ec4\u4ef6\u548c\u7ec4\u4ef6\u4e4b\u95f4\u5b58\u5728\u4f9d\u8d56\u65b9\u5f0f\uff0c\u751a\u81f3\u6ca1\u6709\u4f9d\u8d56\u5173\u7cfb\u4f46\u652f\u6301\u5524\u9192\u5176\u4ed6\u7ec4\u4ef6\u529f\u80fd\uff0c\u6240\u4ee5 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"[DependsOn]")," \u7279\u6027\u3002"),(0,i.kt)("h3",{id:"3261-\u914d\u7f6e\u4ecb\u7ecd"},"3.2.6.1 \u914d\u7f6e\u4ecb\u7ecd"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"DependsOn"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"DependComponents"),"\uff1a\u914d\u7f6e\u7ec4\u4ef6\u4f9d\u8d56\u5173\u7cfb\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"Type[]")," \u7c7b\u578b\uff0c\u4e00\u65e6\u914d\u7f6e\u4e86\u4f9d\u8d56\u5173\u7cfb\uff0c\u90a3\u4e48\u88ab\u4f9d\u8d56\u7684\u7ec4\u4ef6\u4f1a\u5148\u4e8e\u5f53\u524d\u7ec4\u4ef6\u6ce8\u518c"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Links"),"\uff1a\u914d\u7f6e\u7ec4\u4ef6\u94fe\u63a5\u5173\u7cfb\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"Type[]")," \u7c7b\u578b\uff0c\u8be5\u914d\u7f6e\u4e3b\u8981\u89e3\u51b3\u4e00\u4e9b\u7ec4\u4ef6\u5e76\u4e0d\u662f\u4ece ",(0,i.kt)("inlineCode",{parentName:"li"},"\u6839\u7ec4\u4ef6")," \u8fdb\u884c\u914d\u7f6e\uff0c\u800c\u662f\u5904\u4e8e\u548c ",(0,i.kt)("inlineCode",{parentName:"li"},"\u6839\u7ec4\u4ef6")," \u5e73\u884c\u7684\u60c5\u51b5\uff0c\u7c7b\u4f3c\u591a\u5165\u53e3\u7ec4\u4ef6")))),(0,i.kt)("admonition",{title:"\u6784\u9020\u51fd\u6570\u8bf4\u660e",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"DependComponents")," \u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"DependsOnAttribute")," \u7279\u6027\u7684\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\uff0c\u652f\u6301 ",(0,i.kt)("inlineCode",{parentName:"p"},"Type")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"String")," \u7c7b\u578b\uff0c\u5982\uff1a"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2-4}",showLineNumbers:!0,"{2-4}":!0},'[DependsOn(\n typeof(XXXComponent),\n typeof(XXXXComponent),\n "\u7a0b\u5e8f\u96c6;\u7c7b\u578b\u5b8c\u6574\u9650\u5b9a\u540d" // \u4f1a\u81ea\u52a8\u52a0\u8f7d\u7a0b\u5e8f\u96c6\u4e2d\u7279\u5b9a\u7684\u7ec4\u4ef6\uff0c\u540e\u7eed\u6a21\u5757\u5316\u5f00\u53d1\u975e\u5e38\u65b9\u4fbf\n)]\n')),(0,i.kt)("p",{parentName:"admonition"},"\u5982\u9700\u914d\u7f6e ",(0,i.kt)("inlineCode",{parentName:"p"},"Links"),"\uff0c\u53ea\u9700\u8981\u8fd9\u6837\u63a5\u53e3\uff1a"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3-6}",showLineNumbers:!0,"{3-6}":!0},"[DependsOn(\n typeof(XXXComponent),\n Links = new object[]{\n typeof(XXXComponent),\n typeof(XXXXComponent)\n }\n)]\n"))),(0,i.kt)("h3",{id:"3262-\u91cd\u590d\u4f9d\u8d56\u95ee\u9898"},"3.2.6.2 \u91cd\u590d\u4f9d\u8d56\u95ee\u9898"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u5df2\u7ecf\u5904\u7406\u4e86\u7ec4\u4ef6\u91cd\u590d\u4f9d\u8d56\u95ee\u9898\uff0c\u4f1a\u81ea\u52a8\u751f\u6210\u597d\u6700\u4f73\u7684\u6ce8\u518c\u987a\u5e8f\u5e76\u53bb\u9664\u91cd\u590d\u4f9d\u8d56\u6ce8\u518c\u95ee\u9898\u3002"),(0,i.kt)("h3",{id:"3263-\u5faa\u73af\u4f9d\u8d56\u95ee\u9898"},"3.2.6.3 \u5faa\u73af\u4f9d\u8d56\u95ee\u9898"),(0,i.kt)("p",null,"\u5faa\u73af\u4f9d\u8d56\u5b9e\u9645\u4e0a\u662f\u4e00\u79cd\u9519\u8bef\u6ce8\u518c\u7ec4\u4ef6\u7684\u65b9\u5f0f\uff0c\u4f1a\u5bfc\u81f4\u51fa\u73b0\u5185\u5b58\u6ea2\u51fa\u60c5\u51b5\uff0c\u65e9\u671f\u7ec4\u4ef6\u5316\u7248\u672c\u6846\u67b6\u5904\u7406\u4e86\u5faa\u73af\u4f9d\u8d56\u95ee\u9898\uff0c\u4e5f\u5c31\u662f\u4e3b\u52a8\u5ffd\u7565\u6216\u62a5\u9519\uff0c\u4f46\u662f\u8003\u8651\u6b64\u884c\u4e3a\u672c\u8eab\u5e26\u6709\u6f5c\u5728\u7684\u5b89\u5168\u95ee\u9898\uff0c\u6240\u4ee5\u79fb\u9664\u4e86\u5faa\u73af\u4f9d\u8d56\u5904\u7406\uff0c\u800c\u662f\u9009\u62e9\u5728\u5f00\u53d1\u9636\u6bb5\u629b\u51fa\u5f02\u5e38\u65b9\u5f0f\u3002"),(0,i.kt)("h2",{id:"327-componentcontext-\u8be6\u89e3"},"3.2.7 ",(0,i.kt)("inlineCode",{parentName:"h2"},"ComponentContext")," \u8be6\u89e3"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"ComponentContext")," \u662f\u7ec4\u4ef6\u6ce8\u518c ",(0,i.kt)("inlineCode",{parentName:"p"},"Load")," \u65b9\u6cd5\u7684\u6700\u540e\u53c2\u6570\uff0c\u8be5\u53c2\u6570\u63d0\u4f9b\u4e86\u7ec4\u4ef6\u4e4b\u95f4\u7684\u4e00\u4e9b\u5143\u6570\u636e\u3002"),(0,i.kt)("h3",{id:"3271-\u5c5e\u6027\u4ecb\u7ecd"},"3.2.7.1 \u5c5e\u6027\u4ecb\u7ecd"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ComponentContext"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ComponentType"),"\uff1a\u7ec4\u4ef6\u7c7b\u578b\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"Type")," \u7c7b\u578b"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"CalledContext"),"\uff1a\u4e0a\u7ea7\u7ec4\u4ef6\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"ComponentContext")," \u7c7b\u578b\uff0c\u4e5f\u5c31\u662f ",(0,i.kt)("inlineCode",{parentName:"li"},"DependsOn")," \u4e2d\u7684\u7ec4\u4ef6\u4e0a\u4e0b\u6587\uff0c\u5982\u679c\u6ca1\u6709\u5219\u662f\u524d\u4e00\u4e2a\u7ec4\u4ef6\u7684\u4e0a\u4e0b\u6587"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"RootContext"),"\uff1a\u6839\u7ec4\u4ef6/\u5165\u53e3\u7ec4\u4ef6\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"ComponentContext")," \u7c7b\u578b"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"DependComponents"),"\uff1a\u7ec4\u4ef6\u4f9d\u8d56\u7684\u6240\u6709\u7ec4\u4ef6\u5217\u8868\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"Type[]")," \u7c7b\u578b"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"LinkComponents"),"\uff1a\u7ec4\u4ef6\u94fe\u63a5\u7684\u6240\u6709\u7ec4\u4ef6\u5217\u8868\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"Type[]")," \u7c7b\u578b")))),(0,i.kt)("h3",{id:"3272-\u53c2\u6570\u914d\u7f6e\u83b7\u53d6"},"3.2.7.2 \u53c2\u6570\u914d\u7f6e/\u83b7\u53d6"),(0,i.kt)("p",null,"\u5728\u6ce8\u518c\u7ec4\u4ef6\u5c0f\u8282\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},".AddComponent")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},".UseComponent")," \u6700\u540e\u7684\u53c2\u6570\u6765\u6307\u5b9a\u7ec4\u4ef6\u7684\u53c2\u6570\uff0c\u90a3\u4e48\u5982\u4f55\u5728\u7ec4\u4ef6\u4e2d\u83b7\u53d6\u4f60\u4f20\u9012\u7684\u53c2\u6570\u5462\uff1f"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"ComponentContext")," \u63d0\u4f9b\u4e86\u591a\u79cd\u65b9\u6cd5\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"GetProperty()"),"\uff1a\u83b7\u53d6\u7ec4\u4ef6\u7684\u53c2\u6570"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"GetProperty(Type)"),"\uff1a\u901a\u8fc7\u7c7b\u578b\u83b7\u53d6\u7ec4\u4ef6\u53c2\u6570"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"GetProperty(string)"),"\uff1a\u901a\u8fc7\u6307\u5b9a ",(0,i.kt)("inlineCode",{parentName:"li"},"key")," \u83b7\u53d6"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"GetProperties()"),"\uff1a\u83b7\u53d6\u7ec4\u4ef6\u6240\u6709\u53c2\u6570\u5217\u8868\uff08\u5305\u62ec\u4f9d\u8d56\uff0c\u94fe\u63a5\u7b49\uff09"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SetProperty(object)"),"\uff1a\u8bbe\u7f6e\u7279\u5b9a\u7ec4\u4ef6\u53c2\u6570"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SetProperty(Type, object)"),"\uff1a\u8bbe\u7f6e\u7279\u5b9a\u7c7b\u578b\u7ec4\u4ef6\u7684\u53c2\u6570"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SetProperty(string, object)"),"\uff1a\u8bbe\u7f6e\u6307\u5b9a ",(0,i.kt)("inlineCode",{parentName:"li"},"key")," \u7684\u53c2\u6570\u503c")),(0,i.kt)("h4",{id:"\u4f8b\u5b50\u8bf4\u660e"},"\u4f8b\u5b50\u8bf4\u660e"),(0,i.kt)("p",null,"\u6ce8\u518c\u65f6\u4f20\u5165 ",(0,i.kt)("inlineCode",{parentName:"p"},"EntryOption")," \u53c2\u6570"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"service.AddComponent(new EntryOption {});\n")),(0,i.kt)("p",null,"\u5728\u7ec4\u4ef6\u5185\u90e8\u83b7\u53d6\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,7}",showLineNumbers:!0,"{5,7}":!0},"public sealed class EntryServiceComponent : IServiceComponent\n{\n public void Load(IServiceCollection services, ComponentContext componentContext)\n {\n var options = componentContext.GetProperty();\n\n services.AddXXXX(options);\n }\n}\n")),(0,i.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"componentContext.SetProperty(new xxxOptions{})")," \u6765\u8bbe\u7f6e\u4e0b\u6e38\u7ec4\u4ef6\u7684\u53c2\u6570\u3002"),(0,i.kt)("h2",{id:"328-\u5b9e\u73b0-startupcs-\u6a21\u5f0f"},"3.2.8 \u5b9e\u73b0 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Startup.cs")," \u6a21\u5f0f"),(0,i.kt)("p",null,"\u7ec4\u4ef6\u6a21\u5f0f\u662f\u975e\u5e38\u5f3a\u5927\u4e14\u7075\u6d3b\u7684\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u901a\u8fc7\u7ec4\u4ef6\u7684\u6a21\u5f0f\u6a21\u62df\u51fa\u4f20\u7edf\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Startup.cs"),"\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {1,6-7,11,16-21} title="StartupComponent"',showLineNumbers:!0,"{1,6-7,11,16-21}":!0,title:'"StartupComponent"'},"// \u6a21\u62df ConfigureService\npublic sealed class StartupServiceComponent : IServiceComponent\n{\n public void Load(IServiceCollection services, ComponentContext componentContext)\n {\n services.AddControllers()\n .AddInject();\n }\n}\n\n// \u6a21\u62df Configure\npublic sealed class StartupApplicationComponent : IApplicationComponent\n{\n public void Load(IApplicationBuilder app, IWebHostEnvironment env, ComponentContext componentContext)\n {\n app.UseRouting();\n app.UseInject(string.Empty);\n app.UseEndpoints(endpoints =>\n {\n endpoints.MapControllers();\n });\n }\n}\n")),(0,i.kt)("p",null,"\u53ea\u9700\u8981\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"service.AddComponent()")," \u6ce8\u518c\u5373\u53ef\uff0c\u5982\u679c\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Serve.Run()")," \u6a21\u5f0f\u5c06\u66f4\u7b80\u5355\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2-3}",showLineNumbers:!0,"{2-3}":!0},"Serve.Run(RunOptions.Default\n .AddComponent()\n .UseComponent());\n")),(0,i.kt)("p",null,"\u662f\u4e0d\u662f\u5f88\u7075\u6d3b\u554a~"),(0,i.kt)("h2",{id:"329-\u6700\u4f73\u5b9e\u8df5"},"3.2.9 \u6700\u4f73\u5b9e\u8df5\uff1f"),(0,i.kt)("p",null,"\u5728\u5199\u6700\u4f73\u5b9e\u8df5\u65f6\u662f\u6700\u75db\u82e6\u7684\uff0c\u56e0\u4e3a\u6700\u4f73\u5b9e\u8df5\u5e94\u8be5\u662f\u628a\u5fae\u8f6f\u5e95\u5c42\u6240\u6709\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"service.AddXXX")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"app.AddXXX")," \u72ec\u7acb\u6210\u4e00\u4e2a\u4e2a\u7ec4\u4ef6\uff0c\u6bd4\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"servers.AddControllers()")," \u5bf9\u5e94\u4e00\u4e2a ",(0,i.kt)("inlineCode",{parentName:"p"},"ControllersServiceComponent"),"\u3002"),(0,i.kt)("p",null,"\u8fd9\u6837\u505a\u7684\u8bdd\u5de5\u4f5c\u91cf\u662f\u975e\u5e38\u5927\u7684\uff0c\u4f46\u5982\u679c\u4e0d\u8fd9\u6837\u505a\uff0c\u7ec4\u4ef6\u5316\u5c31\u65e0\u6cd5\u5f7b\u5e95\u3002"),(0,i.kt)("p",null,"\u6240\u4ee5\u73b0\u9636\u6bb5\u6682\u65f6\u91c7\u7528\u81ea\u7531\u5b9a\u5236\u7ec4\u4ef6\u65b9\u5f0f\uff0c\u6bd4\u5982\u81ea\u5df1\u5728\u9879\u76ee\u4e2d\u7f16\u5199 ",(0,i.kt)("inlineCode",{parentName:"p"},"ControllersServiceComponent")," \u8fd9\u7c7b\u7ec4\u4ef6\u3002"),(0,i.kt)("h2",{id:"3210-\u53cd\u9988\u4e0e\u5efa\u8bae"},"3.2.10 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/4972.d6577103.js b/handbook/build/assets/js/4972.d6577103.js new file mode 100644 index 00000000000..e7bc777a2bf --- /dev/null +++ b/handbook/build/assets/js/4972.d6577103.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4972],{4972:function(e,t,n){n.r(t),n.d(t,{default:function(){return i}});var a=n(7294),o=n(5999),l=n(1944),r=n(9338);function i(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/4ad72136.701b53d4.js b/handbook/build/assets/js/4ad72136.701b53d4.js new file mode 100644 index 00000000000..5305f9e414a --- /dev/null +++ b/handbook/build/assets/js/4ad72136.701b53d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9532],{3905:function(e,t,r){r.d(t,{Zo:function(){return p},kt:function(){return d}});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),u=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},s=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),s=u(r),d=o,f=s["".concat(c,".").concat(d)]||s[d]||m[d]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=s;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u")," \u4ed3\u50a8\u65b9\u5f0f\u5728\u6784\u9020\u51fd\u6570\u4e2d\u521d\u59cb\u5316\uff0c",(0,a.kt)("strong",{parentName:"li"},"\u907f\u514d\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Db.GetRepository")," \u65b9\u5f0f"),"\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u8bf7\u4ee5",(0,a.kt)("strong",{parentName:"li"},"\u5f02\u6b65\u65b9\u5f0f"),"\u8c03\u7528\u6240\u6709\u6570\u636e\u8bbf\u95ee api\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u68c0\u7d22\u7684\u6570\u636e\u4e0d\u662f\u5fc5\u9700\u7684\u3002 \u7f16\u5199\u67e5\u8be2\u4ee5",(0,a.kt)("strong",{parentName:"li"},"\u4ec5\u8fd4\u56de\u5f53\u524d HTTP \u8bf7\u6c42\u6240\u5fc5\u9700\u7684\u6570\u636e"),"\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u5982\u679c\u6570\u636e\u53ef\u4ee5\u63a5\u53d7\uff0c\u8bf7\u8003\u8651",(0,a.kt)("strong",{parentName:"li"},"\u7f13\u5b58\u7ecf\u5e38\u8bbf\u95ee\u7684\u4ece\u6570\u636e\u5e93\u6216\u8fdc\u7a0b\u670d\u52a1\u68c0\u7d22\u7684\u6570\u636e"),"\u3002 \u4f7f\u7528 MemoryCache \u6216 microsoft.web.distributedcache \uff0c\u5177\u4f53\u53d6\u51b3\u4e8e\u65b9\u6848\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5c3d\u91cf\u51cf\u5c11\u7f51\u7edc\u5f80\u8fd4\u6b21\u6570"),"\u3002 \u76ee\u6807\u662f\u4f7f\u7528\u5355\u4e2a\u8c03\u7528\u800c\u4e0d\u662f\u591a\u4e2a\u8c03\u7528\u6765\u68c0\u7d22\u6240\u9700\u6570\u636e\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5982\u679c\u5f53\u524d\u8bf7\u6c42\u53ea\u6709\u6570\u636e\u67e5\u8be2\uff0c\u8bf7\u4f7f\u7528\u65e0\u8ddf\u8e2a\u67e5\u8be2\u65b9\u5f0f"),"\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5982\u679c\u8bf7\u6c42\u4e2d\u542b\u6709\u64cd\u4f5c\u6570\u636e\u65f6\uff0c\u8bf7\u4e0d\u8981\u5728 Entity Framework Core \u4e2d\u4f7f\u7528\u65e0\u8ddf\u8e2a\u67e5\u8be2"),"\u3002 EF Core \u53ef\u4ee5\u66f4\u6709\u6548\u5730\u8fd4\u56de\u65e0\u8ddf\u8e2a\u67e5\u8be2\u7684\u7ed3\u679c\u3002 \u7b5b\u9009\u548c\u805a\u5408 LINQ \u67e5\u8be2\uff08\u4f8b\u5982\uff0c .Where \u4f7f\u7528.Select\u3001\u6216.Sum \u8bed\u53e5\uff09\uff0c\u4ee5\u4fbf\u6570\u636e\u5e93\u6267\u884c\u7b5b\u9009\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u5bf9\u4e8e\u9700\u8981\u8fdb\u884c\u590d\u6742\u903b\u8f91\u8ba1\u7b97\u67e5\u8be2\u6570\u636e\u60c5\u51b5\uff0c\u8bf7\u5c3d\u53ef\u80fd\u5728\u8fd4\u56de\u67e5\u8be2\u540e\u518d\u5728\u5ba2\u6237\u7aef\u8ba1\u7b97\u3002"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u4e0d\u8981\u5bf9\u96c6\u5408\u4f7f\u7528\u6295\u5f71\u67e5\u8be2"),'\uff0c\u8fd9\u53ef\u80fd\u4f1a\u5bfc\u81f4\u6267\u884c "N + 1" \u4e2a SQL \u67e5\u8be2\u3002'),(0,a.kt)("li",{parentName:"ul"},"\u4f7f\u7528 \xb7DbContextPool\xb7 \u6c60\u6765\u7ba1\u7406 DbContext\uff0c\u7c7b\u4f3c ADO.NET \u7684\u8fde\u63a5\u6c60\u3002"),(0,a.kt)("li",{parentName:"ul"},"\u624b\u52a8\u6216\u663e\u5f0f\u7f16\u8bd1\u7684\u67e5\u8be2 API\uff0c\u5141\u8bb8\u5e94\u7528\u7a0b\u5e8f\u7f13\u5b58\u67e5\u8be2\u8f6c\u6362\uff0c\u4f7f\u5176\u53ef\u4ec5\u88ab\u8ba1\u7b97\u4e00\u6b21\u5e76\u6267\u884c\u591a\u6b21\u3002")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// Create an explicitly compiled query\nprivate static Func _customerById =\n EF.CompileQuery((CustomerContext db, int id) =>\n db.Customers\n .Include(c => c.Address)\n .Single(c => c.Id == id));\n\n// Use the compiled query by invoking it\nusing (var db = new CustomerContext())\n{\n var customer = _customerById(db, 147);\n}\n")),(0,a.kt)("h2",{id:"9292-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.29.2 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/4b6c538b.e24c2ceb.js b/handbook/build/assets/js/4b6c538b.e24c2ceb.js new file mode 100644 index 00000000000..71b859961eb --- /dev/null +++ b/handbook/build/assets/js/4b6c538b.e24c2ceb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2009],{3905:function(t,e,a){a.d(e,{Zo:function(){return g},kt:function(){return o}});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var m=n.createContext({}),d=function(t){var e=n.useContext(m),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},g=function(t){var e=d(t.components);return n.createElement(m.Provider,{value:e},t.children)},k={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,m=t.parentName,g=p(t,["components","mdxType","originalType","parentName"]),u=d(a),o=r,N=u["".concat(m,".").concat(o)]||u[o]||k[o]||l;return a?n.createElement(N,i(i({ref:e},g),{},{components:a})):n.createElement(N,i({ref:e},g))}));function o(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=u;var p={};for(var m in e)hasOwnProperty.call(e,m)&&(p[m]=e[m]);p.originalType=t,p.mdxType="string"==typeof t?t:r,i[1]=p;for(var d=2;dBenchmarkDotNet",id:"3633-benchmarkdotnet",level:2},{value:"36.3.3.1 \u5982\u4f55\u4f7f\u7528",id:"36331-\u5982\u4f55\u4f7f\u7528",level:3},{value:"36.3.3.2 \u67e5\u770b\u7ed3\u679c",id:"36332-\u67e5\u770b\u7ed3\u679c",level:3},{value:"36.3.3.3 \u5bfc\u51fa\u62a5\u8868",id:"36333-\u5bfc\u51fa\u62a5\u8868",level:3},{value:"36.3.4 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"3634-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],o={toc:u};function N(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},o,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"3631-\u57fa\u51c6\u6d4b\u8bd5"},"36.3.1 \u57fa\u51c6\u6d4b\u8bd5"),(0,l.kt)("p",null,"\u57fa\u51c6\u6d4b\u8bd5\uff08benchmarking\uff09\u662f\u4e00\u79cd\u6d4b\u91cf\u548c\u8bc4\u4f30\u8f6f\u4ef6\u6027\u80fd\u6307\u6807\u7684\u6d3b\u52a8\u3002\u4f60\u53ef\u4ee5\u5728\u67d0\u4e2a\u65f6\u5019\u901a\u8fc7\u57fa\u51c6\u6d4b\u8bd5\u5efa\u7acb\u4e00\u4e2a\u5df2\u77e5\u7684\u6027\u80fd\u6c34\u5e73\uff08\u79f0\u4e3a\u57fa\u51c6\u7ebf\uff09\uff0c\u5f53\u7cfb\u7edf\u7684\u8f6f\u786c\u4ef6\u73af\u5883\u53d1\u751f\u53d8\u5316\u4e4b\u540e\u518d\u8fdb\u884c\u4e00\u6b21\u57fa\u51c6\u6d4b\u8bd5\u4ee5\u786e\u5b9a\u90a3\u4e9b\u53d8\u5316\u5bf9\u6027\u80fd\u7684\u5f71\u54cd\u3002\u8fd9\u662f\u57fa\u51c6\u6d4b\u8bd5\u6700\u5e38\u89c1\u7684\u7528\u9014\u3002\u5176\u4ed6\u7528\u9014\u5305\u62ec\u6d4b\u5b9a\u67d0\u79cd\u8d1f\u8f7d\u6c34\u5e73\u4e0b\u7684\u6027\u80fd\u6781\u9650\u3001\u7ba1\u7406\u7cfb\u7edf\u6216\u73af\u5883\u7684\u53d8\u5316\u3001\u53d1\u73b0\u53ef\u80fd\u5bfc\u81f4\u6027\u80fd\u95ee\u9898\u7684\u6761\u4ef6\uff0c\u7b49\u7b49\u3002"),(0,l.kt)("h2",{id:"3632-\u57fa\u51c6\u6d4b\u8bd5\u7279\u8d28\u53ca\u610f\u4e49"},"36.3.2 \u57fa\u51c6\u6d4b\u8bd5\u7279\u8d28\u53ca\u610f\u4e49"),(0,l.kt)("h3",{id:"36321-\u7279\u8d28"},"36.3.2.1 \u7279\u8d28"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"\u53ef\u91cd\u590d\u6027"),"\uff1a\u53ef\u8fdb\u884c\u91cd\u590d\u6027\u7684\u6d4b\u8bd5\uff0c\u8fd9\u6837\u505a\u6709\u5229\u4e8e\u6bd4\u8f83\u6bcf\u6b21\u7684\u6d4b\u8bd5\u7ed3\u679c\uff0c\u5f97\u5230\u6027\u80fd\u7ed3\u679c\u7684\u957f\u671f\u53d8\u5316\u8d8b\u52bf\uff0c\u4e3a\u7cfb\u7edf\u8c03\u4f18\u548c\u4e0a\u7ebf\u524d\u7684\u5bb9\u91cf\u89c4\u5212\u505a\u53c2\u8003\u3002"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"\u53ef\u89c2\u6d4b\u6027"),"\uff1a\u901a\u8fc7\u5168\u65b9\u4f4d\u7684\u76d1\u63a7\uff08\u5305\u62ec\u6d4b\u8bd5\u5f00\u59cb\u5230\u7ed3\u675f\uff0c\u6267\u884c\u673a\u3001\u670d\u52a1\u5668\u3001\u6570\u636e\u5e93\uff09\uff0c\u53ca\u65f6\u4e86\u89e3\u548c\u5206\u6790\u6d4b\u8bd5\u8fc7\u7a0b\u53d1\u751f\u4e86\u4ec0\u4e48\u3002"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"\u53ef\u5c55\u793a\u6027"),"\uff1a\u76f8\u5173\u4eba\u5458\u53ef\u4ee5\u76f4\u89c2\u660e\u4e86\u7684\u4e86\u89e3\u6d4b\u8bd5\u7ed3\u679c\uff08web \u754c\u9762\u3001\u4eea\u8868\u76d8\u3001\u6298\u7ebf\u56fe\u6811\u72b6\u56fe\u7b49\u5f62\u5f0f\uff09\u3002"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"\u771f\u5b9e\u6027"),"\uff1a\u6d4b\u8bd5\u7684\u7ed3\u679c\u53cd\u6620\u4e86\u5ba2\u6237\u4f53\u9a8c\u5230\u7684\u771f\u5b9e\u7684\u60c5\u51b5\uff08\u771f\u5b9e\u51c6\u786e\u7684\u4e1a\u52a1\u573a\u666f+\u4e0e\u751f\u4ea7\u4e00\u81f4\u7684\u914d\u7f6e+\u5408\u7406\u6b63\u786e\u7684\u6d4b\u8bd5\u65b9\u6cd5\uff09\u3002"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"\u53ef\u6267\u884c\u6027"),"\uff1a\u76f8\u5173\u4eba\u5458\u53ef\u4ee5\u5feb\u901f\u7684\u8fdb\u884c\u6d4b\u8bd5\u9a8c\u8bc1\u4fee\u6539\u8c03\u4f18\uff08\u53ef\u5b9a\u4f4d\u53ef\u5206\u6790\uff09\u3002")),(0,l.kt)("h3",{id:"36322-\u610f\u4e49"},"36.3.2.2 \u610f\u4e49"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u4e3a\u5bb9\u91cf\u89c4\u5212\u786e\u5b9a\u7cfb\u7edf\u548c\u5e94\u7528\u7a0b\u5e8f\u7684\u6781\u9650\uff1b"),(0,l.kt)("li",{parentName:"ul"},"\u4e3a\u914d\u7f6e\u6d4b\u8bd5\u7684\u53c2\u6570\u548c\u914d\u7f6e\u9009\u9879\u63d0\u4f9b\u53c2\u8003\u4f9d\u636e\uff1b"),(0,l.kt)("li",{parentName:"ul"},"\u4e3a\u9a8c\u6536\u6d4b\u8bd5\u786e\u5b9a\u7cfb\u7edf\u662f\u5426\u5177\u5907\u81ea\u5df1\u6240\u5ba3\u79f0\u7684\u80fd\u529b\uff1b"),(0,l.kt)("li",{parentName:"ul"},"\u4e3a\u6027\u80fd\u57fa\u7ebf\u7684\u5efa\u7acb\u63d0\u4f9b\u957f\u671f\u7684\u6570\u636e\u7edf\u8ba1\u6765\u6e90\u4ee5\u53ca\u6bd4\u8f83\u57fa\u51c6\uff1b")),(0,l.kt)("h2",{id:"3633-benchmarkdotnet"},"36.3.3 ",(0,l.kt)("inlineCode",{parentName:"h2"},"BenchmarkDotNet")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"BenchmarkDotNet")," \u662f ",(0,l.kt)("inlineCode",{parentName:"p"},".NET")," \u5e73\u53f0\u63d0\u4f9b\u7684\u57fa\u51c6\u6d4b\u8bd5\u5de5\u5177\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"BenchmarkDotNet")," \u53ef\u5e2e\u52a9\u60a8\u5c06\u65b9\u6cd5\u8f6c\u6362\u4e3a\u57fa\u51c6\uff0c\u8ddf\u8e2a\u5176\u6027\u80fd\uff0c\u5e76\u5171\u4eab\u53ef\u91cd\u590d\u7684\u6d4b\u91cf\u5b9e\u9a8c\u3002",(0,l.kt)("inlineCode",{parentName:"p"},"BenchmarkDotNet")," \u53ef\u4fdd\u62a4\u60a8\u514d\u53d7\u6d41\u884c\u7684\u57fa\u51c6\u6d4b\u8bd5\u9519\u8bef\uff0c\u5e76\u5728\u57fa\u51c6\u8bbe\u8ba1\u6216\u83b7\u5f97\u7684\u6d4b\u91cf\u4e2d\u51fa\u73b0\u95ee\u9898\u65f6\u8b66\u544a\u60a8\u3002\u7ed3\u679c\u4ee5\u7528\u6237\u53cb\u597d\u7684\u5f62\u5f0f\u5448\u73b0\uff0c\u7a81\u51fa\u663e\u793a\u4e86\u6709\u5173\u5b9e\u9a8c\u7684\u6240\u6709\u91cd\u8981\u4e8b\u5b9e\u3002"),(0,l.kt)("h3",{id:"36331-\u5982\u4f55\u4f7f\u7528"},"36.3.3.1 \u5982\u4f55\u4f7f\u7528"),(0,l.kt)("p",null,"\u521b\u5efa\u4e00\u4e2a ",(0,l.kt)("inlineCode",{parentName:"p"},"\u63a7\u5236\u53f0")," \u5e94\u7528\u7a0b\u5e8f\uff0c\u5e76\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"p"},"Nuget")," \u5b89\u88c5 ",(0,l.kt)("a",{parentName:"p",href:"https://www.nuget.org/packages/BenchmarkDotNet/"},"BenchmarkDotNet")," \u62d3\u5c55\u5305\u3002\u7f16\u5199\u6d4b\u8bd5\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3-4,22,25,33}",showLineNumbers:!0,"":!0,"{3-4,22,25,33}":!0},"using System;\nusing System.Security.Cryptography;\nusing BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Running;\n\nnamespace MyBenchmarks\n{\n public class Md5VsSha256\n {\n private const int N = 10000;\n private readonly byte[] data;\n\n private readonly SHA256 sha256 = SHA256.Create();\n private readonly MD5 md5 = MD5.Create();\n\n public Md5VsSha256()\n {\n data = new byte[N];\n new Random(42).NextBytes(data);\n }\n\n [Benchmark]\n public byte[] Sha256() => sha256.ComputeHash(data);\n\n [Benchmark]\n public byte[] Md5() => md5.ComputeHash(data);\n }\n\n public class Program\n {\n public static void Main(string[] args)\n {\n var summary = BenchmarkRunner.Run();\n }\n }\n}\n")),(0,l.kt)("h3",{id:"36332-\u67e5\u770b\u7ed3\u679c"},"36.3.3.2 \u67e5\u770b\u7ed3\u679c"),(0,l.kt)("p",null,"\u8fd0\u884c\u63a7\u5236\u5668\u7a0b\u5e8f\uff0c\u5c06\u5f97\u5230\u4ee5\u4e0b\u7ed3\u679c"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"BenchmarkDotNet=v0.12.0, OS=Windows 10.0.17763.805 (1809/October2018Update/Redstone5)\nIntel Core i7-7700K CPU 4.20GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores\n [Host] : .NET Framework 4.7.2 (4.7.3468.0), X64 RyuJIT\n Net472 : .NET Framework 4.7.2 (4.7.3468.0), X64 RyuJIT\n NetCoreApp30 : .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), X64 RyuJIT\n CoreRt30 : .NET CoreRT 1.0.28236.02 @Commit: 741d61493c560ba96e8151f9e56876d4d3828489, X64 AOT\n Mono : Mono 6.4.0 (Visual Studio), X64\n")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Method"),(0,l.kt)("th",{parentName:"tr",align:null},"Runtime"),(0,l.kt)("th",{parentName:"tr",align:null},"N"),(0,l.kt)("th",{parentName:"tr",align:"right"},"Mean"),(0,l.kt)("th",{parentName:"tr",align:"right"},"Error"),(0,l.kt)("th",{parentName:"tr",align:"right"},"StdDev"),(0,l.kt)("th",{parentName:"tr",align:"right"},"Ratio"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Sha256"),(0,l.kt)("td",{parentName:"tr",align:null},".NET 4.7.2"),(0,l.kt)("td",{parentName:"tr",align:null},"1000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"7.735 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.1913 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.4034 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.00")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Sha256"),(0,l.kt)("td",{parentName:"tr",align:null},".NET Core 3.0"),(0,l.kt)("td",{parentName:"tr",align:null},"1000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"3.989 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.0796 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.0745 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.50")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Sha256"),(0,l.kt)("td",{parentName:"tr",align:null},"CoreRt 3.0"),(0,l.kt)("td",{parentName:"tr",align:null},"1000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"4.091 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.0811 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.1562 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.53")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Sha256"),(0,l.kt)("td",{parentName:"tr",align:null},"Mono"),(0,l.kt)("td",{parentName:"tr",align:null},"1000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"13.117 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.2485 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.5019 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.70")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:"right"}),(0,l.kt)("td",{parentName:"tr",align:"right"}),(0,l.kt)("td",{parentName:"tr",align:"right"}),(0,l.kt)("td",{parentName:"tr",align:"right"})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Md5"),(0,l.kt)("td",{parentName:"tr",align:null},".NET 4.7.2"),(0,l.kt)("td",{parentName:"tr",align:null},"1000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"2.872 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.0552 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.0737 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.00")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Md5"),(0,l.kt)("td",{parentName:"tr",align:null},".NET Core 3.0"),(0,l.kt)("td",{parentName:"tr",align:null},"1000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.848 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.0348 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.0326 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.64")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Md5"),(0,l.kt)("td",{parentName:"tr",align:null},"CoreRt 3.0"),(0,l.kt)("td",{parentName:"tr",align:null},"1000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.817 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.0359 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.0427 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.63")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Md5"),(0,l.kt)("td",{parentName:"tr",align:null},"Mono"),(0,l.kt)("td",{parentName:"tr",align:null},"1000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"3.574 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.0678 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.0753 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.24")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:"right"}),(0,l.kt)("td",{parentName:"tr",align:"right"}),(0,l.kt)("td",{parentName:"tr",align:"right"}),(0,l.kt)("td",{parentName:"tr",align:"right"})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Sha256"),(0,l.kt)("td",{parentName:"tr",align:null},".NET 4.7.2"),(0,l.kt)("td",{parentName:"tr",align:null},"10000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"74.509 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.5787 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"4.6052 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.00")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Sha256"),(0,l.kt)("td",{parentName:"tr",align:null},".NET Core 3.0"),(0,l.kt)("td",{parentName:"tr",align:null},"10000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"36.049 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.7151 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.0025 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.49")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Sha256"),(0,l.kt)("td",{parentName:"tr",align:null},"CoreRt 3.0"),(0,l.kt)("td",{parentName:"tr",align:null},"10000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"36.253 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.7076 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.7571 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.49")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Sha256"),(0,l.kt)("td",{parentName:"tr",align:null},"Mono"),(0,l.kt)("td",{parentName:"tr",align:null},"10000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"116.350 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"2.2555 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"3.0110 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.58")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:"right"}),(0,l.kt)("td",{parentName:"tr",align:"right"}),(0,l.kt)("td",{parentName:"tr",align:"right"}),(0,l.kt)("td",{parentName:"tr",align:"right"})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Md5"),(0,l.kt)("td",{parentName:"tr",align:null},".NET 4.7.2"),(0,l.kt)("td",{parentName:"tr",align:null},"10000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"17.308 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.3361 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.4250 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.00")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Md5"),(0,l.kt)("td",{parentName:"tr",align:null},".NET Core 3.0"),(0,l.kt)("td",{parentName:"tr",align:null},"10000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"15.726 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.2064 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.1930 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.90")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Md5"),(0,l.kt)("td",{parentName:"tr",align:null},"CoreRt 3.0"),(0,l.kt)("td",{parentName:"tr",align:null},"10000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"15.627 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.2631 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.2461 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.89")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Md5"),(0,l.kt)("td",{parentName:"tr",align:null},"Mono"),(0,l.kt)("td",{parentName:"tr",align:null},"10000"),(0,l.kt)("td",{parentName:"tr",align:"right"},"30.205 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.5868 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"0.6522 us"),(0,l.kt)("td",{parentName:"tr",align:"right"},"1.74")))),(0,l.kt)("h3",{id:"36333-\u5bfc\u51fa\u62a5\u8868"},"36.3.3.3 \u5bfc\u51fa\u62a5\u8868"),(0,l.kt)("p",null,"\u4e5f\u53ef\u4ee5\u5bfc\u51fa\u5404\u79cd\u56fe\u8868"),(0,l.kt)("img",{src:(0,i.Z)("img/bm1.png")}),(0,l.kt)("h2",{id:"3634-\u53cd\u9988\u4e0e\u5efa\u8bae"},"36.3.4 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,l.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,l.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,l.kt)("hr",null),(0,l.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,l.kt)("inlineCode",{parentName:"p"},"BenchmarkDotNet")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,l.kt)("a",{parentName:"p",href:"https://benchmarkdotnet.org/"},"BenchmarkDotNet \u5b98\u7f51"),"\u3002")))}N.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/4c19669a.983a13c7.js b/handbook/build/assets/js/4c19669a.983a13c7.js new file mode 100644 index 00000000000..62bd88a6fb4 --- /dev/null +++ b/handbook/build/assets/js/4c19669a.983a13c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6078],{3905:function(e,t,r){r.d(t,{Zo:function(){return c},kt:function(){return d}});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var u=n.createContext({}),s=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(u.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,u=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=s(r),d=a,f=m["".concat(u,".").concat(d)]||m[d]||p[d]||l;return r?n.createElement(f,o(o({ref:t},c),{},{components:r})):n.createElement(f,o({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,o=new Array(l);o[0]=m;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var s=2;sHello {0}", name];\n')),(0,l.kt)("h2",{id:"83-\u8bbe\u7f6e\u5f53\u524d\u8bed\u8a00"},"8.3 \u8bbe\u7f6e\u5f53\u524d\u8bed\u8a00"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'L.SetCulture("en-US");\n')),(0,l.kt)("h2",{id:"84-\u83b7\u53d6\u7cfb\u7edf\u8bed\u8a00\u5217\u8868"},"8.4 \u83b7\u53d6\u7cfb\u7edf\u8bed\u8a00\u5217\u8868"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var list = L.GetCultures();\n")),(0,l.kt)("h2",{id:"85-\u83b7\u53d6\u5f53\u524d\u9009\u4e2d\u8bed\u8a00"},"8.5 \u83b7\u53d6\u5f53\u524d\u9009\u4e2d\u8bed\u8a00"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var list = L.GetSelectCulture();\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/4c79e569.afc91526.js b/handbook/build/assets/js/4c79e569.afc91526.js new file mode 100644 index 00000000000..75e0576c951 --- /dev/null +++ b/handbook/build/assets/js/4c79e569.afc91526.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8707],{3905:function(e,t,a){a.d(t,{Zo:function(){return k},kt:function(){return N}});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var m=n.createContext({}),o=function(e){var t=n.useContext(m),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},k=function(e){var t=o(e.components);return n.createElement(m.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,r=e.originalType,m=e.parentName,k=p(e,["components","mdxType","originalType","parentName"]),u=o(a),N=i,d=u["".concat(m,".").concat(N)]||u[N]||s[N]||r;return a?n.createElement(d,l(l({ref:t},k),{},{components:a})):n.createElement(d,l({ref:t},k))}));function N(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=a.length,l=new Array(r);l[0]=u;var p={};for(var m in t)hasOwnProperty.call(t,m)&&(p[m]=t[m]);p.originalType=e,p.mdxType="string"==typeof e?e:i,l[1]=p;for(var o=2;o\n{\n services.AddRemoteRequest();\n});\n\n// \u901a\u7528\u6cdb\u578b\u4e3b\u673a\u65b9\u5f0f\nServe.RunGeneric(additional: services =>\n{\n services.AddRemoteRequest();\n});\n\n// \u8fd8\u53ef\u4ee5\u7701\u53bb additional\nServe.Run(services =>\n{\n services.AddRemoteRequest();\n});\n\n// \u901a\u7528\u6cdb\u578b\u4e3b\u673a\u65b9\u5f0f\nServe.RunGeneric(services =>\n{\n services.AddRemoteRequest();\n});\n")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serve.Run")," \u4e3b\u673a\u8fd4\u56de\u503c ",(0,l.kt)("inlineCode",{parentName:"li"},"IHost")," ",(0,l.kt)("sup",null,"4.8.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I61XHV"},"#I61XHV"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,"\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"Winfom/WPF")," \u5e94\u7528\u7a0b\u5e8f\u4e2d\uff0c\u6211\u4eec\u5e0c\u671b\u5173\u95ed\u7a97\u4f53\u6216\u9000\u51fa\u5e94\u7528\u7a0b\u5e8f\u65f6\uff0c\u80fd\u591f\u5173\u95ed ",(0,l.kt)("inlineCode",{parentName:"p"},"Serve")," \u4e3b\u673a\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,8,11-17}",showLineNumbers:!0,"{1,5,8,11-17}":!0},"using Microsoft.Extensions.Hosting;\n\npublic partial class App : Application\n{\n private readonly IHost _host;\n public App()\n {\n _host = Serve.Run(silence: true);\n }\n\n protected override void OnExit(ExitEventArgs e)\n {\n _host.StopAsync();\n _host.Dispose();\n\n base.OnExit(e);\n }\n}\n")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u65e5\u5fd7 ",(0,l.kt)("inlineCode",{parentName:"strong"},"JSON")," \u81ea\u52a8\u7f8e\u5316\u683c\u5f0f\u5316\u5668 ",(0,l.kt)("inlineCode",{parentName:"strong"},"LoggerFormatter.JsonIndented"))," ",(0,l.kt)("sup",null,"4.8.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7b9268cc2428b5ee6cc5ed259e5c45a6830bddb1"},"7b9268c")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"JsonIndented")," \u914d\u7f6e\uff0c\u53ef\u914d\u7f6e\u662f\u5426\u7f8e\u5316 ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," ",(0,l.kt)("sup",null,"4.8.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7b9268cc2428b5ee6cc5ed259e5c45a6830bddb1"},"7b9268c"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u914d\u7f6e\u8f93\u51fa ",(0,l.kt)("inlineCode",{parentName:"p"},"JSON")," \u683c\u5f0f\u5316 ",(0,l.kt)("inlineCode",{parentName:"p"},"LoggerFormatter.Json")," \u4f1a\u6d53\u7f29\u5230\u4e00\u884c\u663e\u793a\u3002"),(0,l.kt)("p",null,"\u65b0\u7248\u672c\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"p"},"LoggerFormatter.JsonIndented")," \u7f8e\u5316 ",(0,l.kt)("inlineCode",{parentName:"p"},"JSON")," \u914d\u7f6e\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,4,8,10,14,16,20,22}",showLineNumbers:!0,"{2,4,8,10,14,16,20,22}":!0},'// \u63a7\u5236\u53f0\u65e5\u5fd7\nservices.AddConsoleFormatter(options =>\n{\n options.MessageFormat = LoggerFormatter.JsonIndented;\n});\n\n// \u6587\u4ef6\u65e5\u5fd7\nservices.AddFileLogging("mytemplate.log", options =>\n{\n options.MessageFormat = LoggerFormatter.JsonIndented;\n});\n\n// \u6570\u636e\u5e93\u65e5\u5fd7\nservices.AddDatabaseLogging(options =>\n{\n options.MessageFormat = LoggerFormatter.JsonIndented;\n});\n\n// LoggingMonitor \u65e5\u5fd7\nservices.AddMonitorLogging(options =>\n{\n options.JsonIndented = true;\n});\n')))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\u65e7\u7248\u672c\u5b9a\u65f6\u4efb\u52a1\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},"\u5f03\u7528")," \u72b6\u6001\uff082022 \u5e74 12 \u6708 31 \u65e5\u5f7b\u5e95\u5220\u9664\uff09\uff0c\u5982\u9700\u53d6\u6d88\u8b66\u544a\u5728 ",(0,l.kt)("inlineCode",{parentName:"strong"},".csproj")," \u4e2d\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"strong"},"0618"))," ",(0,l.kt)("sup",null,"4.8.0")," ",(0,l.kt)("a",{parentName:"li",href:"/docs/job-old"},"\u65e7\u7248\u672c\u6587\u6863")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," \u9759\u6001\u7c7b\u6240\u6709\u65b9\u6cd5\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"serviceProvider")," \u53c2\u6570\uff08\u65e0\u7834\u574f\uff09 ",(0,l.kt)("sup",null,"4.8.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/962fb167aa13c689b688035bef26dcac73d3fca4"},"962fb16")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Http")," \u9759\u6001\u7c7b\u6240\u6709\u65b9\u6cd5\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"serviceProvider")," \u53c2\u6570\uff08\u65e0\u7834\u574f\uff09 ",(0,l.kt)("sup",null,"4.8.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/962fb167aa13c689b688035bef26dcac73d3fca4"},"962fb16")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4ece ",(0,l.kt)("inlineCode",{parentName:"li"},".NET6/7")," \u964d\u7ea7\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},".NET5")," \u627e\u4e0d\u5230 ",(0,l.kt)("inlineCode",{parentName:"li"},".AddDateOnlyConverters()")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},".AddTimeOnlyConverters()")," \u62d3\u5c55\u65b9\u6cd5\u95ee\u9898 ",(0,l.kt)("sup",null,"4.8.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/cdddf8dbf628abb85e0816335ebae6bee96f6dc1"},"cdddf8d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Retry.InvokeAsync")," \u65b9\u6cd5\u5982\u679c\u4e0d\u4f20\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"fallbackPolicy")," \u53c2\u6570\u62a5\u7a7a\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("sup",null,"4.8.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/21af847b02ae6044d344450620fa4e549480e387"},"21af847")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"li"},"WebAPI")," \u4e0d\u652f\u6301\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},".NET7")," \u4e0d\u58f0\u660e ",(0,l.kt)("inlineCode",{parentName:"li"},"[FromServices]")," \u81ea\u52a8\u6ce8\u5165\u95ee\u9898 ",(0,l.kt)("sup",null,"4.8.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I62HP1"},"#I62HP1")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("a",{parentName:"strong",href:"/docs/job"},"\u65b0\u7248\u672c\u5b9a\u65f6\u4efb\u52a1\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("a",{parentName:"strong",href:"/docs/cron"},"Cron \u8868\u8fbe\u5f0f\u89e3\u6790\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("a",{parentName:"li",href:"/docs/global/schedular"},"Schedular")," \u5168\u5c40\u9759\u6001\u7c7b\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serve.Run()")," \u5165\u95e8\u6587\u6863\u6587\u6863\u3001\u5b89\u5168\u6388\u6743\u6587\u6863\u3001\u524d\u7aef\u63a5\u53e3\u4ee3\u7406\u6587\u6863\u3001\u4e8b\u4ef6\u603b\u7ebf\u6587\u6863\u3001\u65e5\u5fd7\u6587\u6863\u3001Worker Service \u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v479\u5f53\u524d\u7248\u672c"},"v4.7.9\uff08\u5f53\u524d\u7248\u672c\uff09"),(0,l.kt)("admonition",{title:".NET7 \u53d1\u5e03",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("strong",{parentName:"p"},"\ud83d\ude80\ud83c\udf89\ud83d\udd25 2022 \u5e74 11 \u6708 08 \u65e5\uff0c\u5fae\u8f6f\u53d1\u5e03\u4e86 .NET7 \u9996\u4e2a\u6b63\u5f0f\u7248\u3002")),(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u7b2c\u4e00\u65f6\u95f4\u5b8c\u6210\u4e86\u9002\u914d\uff0c",(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("inlineCode",{parentName:"strong"},"v4")," \u7248\u672c\u5f00\u59cb\u4e00\u5957\u4ee3\u7801\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},".NET5-.NET7/N"),"\uff0c\u652f\u6301\u6240\u6709 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u7248\u672c\u5347\u7ea7"),"\u3002")),(0,l.kt)("admonition",{title:"\u7248\u672c\u7ec6\u8282",type:"important"},(0,l.kt)("ul",{parentName:"admonition"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.7.9")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I60MFK"},"https://gitee.com/dotnetchina/Furion/issues/I60MFK")," ",(0,l.kt)("sup",null,"2022.11.11")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.7.7")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I60GZ8"},"https://gitee.com/dotnetchina/Furion/issues/I60GZ8")," ",(0,l.kt)("sup",null,"2022.11.10")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.7.6")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I60591"},"https://gitee.com/dotnetchina/Furion/issues/I60591")," ",(0,l.kt)("sup",null,"2022.11.08")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.7.5")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I600R4"},"https://gitee.com/dotnetchina/Furion/issues/I600R4")," ",(0,l.kt)("sup",null,"2022.11.08")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.7.3")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5Z9TI"},"https://gitee.com/dotnetchina/Furion/issues/I5Z9TI")," ",(0,l.kt)("sup",null,"2022.11.03")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.7.2")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5YG48"},"https://gitee.com/dotnetchina/Furion/issues/I5YG48")," ",(0,l.kt)("sup",null,"2022.10.30")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.7.1")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5Y6U3"},"https://gitee.com/dotnetchina/Furion/issues/I5Y6U3")," ",(0,l.kt)("sup",null,"2022.10.28")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.7.0")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5Y04N"},"https://gitee.com/dotnetchina/Furion/issues/I5Y04N")," ",(0,l.kt)("sup",null,"2022.10.27")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65e5\u5fd7\u6a21\u5757\u65f6\u95f4\u683c\u5f0f\u5316\u9ed8\u8ba4\u8f93\u51fa ",(0,l.kt)("inlineCode",{parentName:"li"},"\u6beb\u79d2")," \u90e8\u5206\uff0c\u9488\u5bf9\u5e76\u53d1\u6bd4\u8f83\u9ad8\u7684\u573a\u666f ",(0,l.kt)("sup",null,"4.7.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/c0dc36c4a2294596cbf3f5cdbdb2589c447bf746"},"c0dc36c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5199\u5165\u6570\u636e\u5e93\u65e5\u5fd7\u6b7b\u5faa\u73af\u8f93\u51fa\u68c0\u6d4b\u673a\u5236 ",(0,l.kt)("sup",null,"4.7.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/30dea0cebf8a946bea670fa0d2f82cde8321b847"},"30dea0c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u8f93\u51fa ",(0,l.kt)("inlineCode",{parentName:"li"},"\u7cfb\u7edf\u4fe1\u606f"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},".NET \u67b6\u6784")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"\u57fa\u7840\u6846\u67b6")," ",(0,l.kt)("sup",null,"4.7.1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/aeda90259ef0684bff6308e2f387d89ac9081d37"},"aeda902")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},".SetQueries(obj, ignoreNullValue)")," \u91cd\u8f7d\u65b9\u6cd5 ",(0,l.kt)("sup",null,"4.7.3")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5Z8KC"},"#I5Z8KC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},".GetCookies()")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},".GetSetCookies()")," \u62d3\u5c55\u65b9\u6cd5 ",(0,l.kt)("sup",null,"4.7.5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5ZY1L"},"#I5ZY1L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4e8b\u4ef6\u603b\u7ebf ",(0,l.kt)("inlineCode",{parentName:"li"},".ReplaceStorerOrFallback")," \u81ea\u5b9a\u4e49\u4e8b\u4ef6\u6e90\u5b58\u50a8\u5668\u65b9\u6cd5\uff0c\u53ef\u5728\u81ea\u5b9a\u4e49\u521d\u59cb\u5931\u8d25\u65f6\u56de\u9000\u5230\u9ed8\u8ba4\u503c ",(0,l.kt)("sup",null,"4.7.6")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I602NU"},"#I602NU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u8f93\u51fa ",(0,l.kt)("inlineCode",{parentName:"li"},"\u542f\u52a8\u4fe1\u606f"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"Cookies")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"\u8bf7\u6c42\u7aef\u6e90")," \u4fe1\u606f ",(0,l.kt)("sup",null,"4.7.7")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3037b04cac8cfa70d6e7f1dba62d48362f75e778"},"3037b04")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"JSON")," \u5e8f\u5217\u5316 ",(0,l.kt)("inlineCode",{parentName:"strong"},"DateOnly")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},"TimeOnly")," \u7c7b\u578b\u8f6c\u6362\u5668\uff1a",(0,l.kt)("inlineCode",{parentName:"strong"},".AddDateOnlyConverters()")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},".AddTimeOnlyConverters()"))," ",(0,l.kt)("sup",null,"4.7.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/657"},"!657")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/47a5fcbe9dbcff4fb35addc178d2715dbb3544a2"},"47a5fcb")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"HttpContext.ReadBodyContentAsync()")," \u62d3\u5c55\u65b9\u6cd5\u91cd\u590d\u8bfb\u53d6 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Body")," \u5185\u5bb9")," ",(0,l.kt)("sup",null,"4.7.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I60IYU"},"#I60IYU")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u6240\u6709\u811a\u624b\u67b6\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},"-f")," \u6307\u5b9a ",(0,l.kt)("inlineCode",{parentName:"strong"},".NET")," \u7248\u672c")," ",(0,l.kt)("sup",null,"4.7.6")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I603AZ"},"#I603AZ"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {2,5,8}",showLineNumbers:!0,"{2,5,8}":!0},"# \u521b\u5efa .NET5 \u7248\u672c\ndotnet new furionapi -n \u9879\u76ee\u540d\u79f0 -f net5\n\n# \u521b\u5efa .NET6 \u7248\u672c\ndotnet new furionapi -n \u9879\u76ee\u540d\u79f0 -f net6\n\n# \u521b\u5efa .NET7 \u7248\u672c\ndotnet new furionapi -n \u9879\u76ee\u540d\u79f0 -f net7\n")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," ",(0,l.kt)("strong",{parentName:"li"},"\u9002\u914d ",(0,l.kt)("inlineCode",{parentName:"strong"},".NET 6.0.11")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},".NET 7"))," ",(0,l.kt)("sup",null,"4.7.5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7df31951cc565327ae101d416551c6de3afa401b"},"7df3195")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," ",(0,l.kt)("strong",{parentName:"li"},"\u6240\u6709\u811a\u624b\u67b6\u81f3 ",(0,l.kt)("inlineCode",{parentName:"strong"},".NET 7"))," ",(0,l.kt)("sup",null,"4.7.5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7df31951cc565327ae101d416551c6de3afa401b"},"7df3195")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"LogContext")," \u7c7b\u578b\u7684\u6240\u6709\u65b9\u6cd5\u81f3 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion.Logging")," \u547d\u540d\u7a7a\u95f4\u4e0b\uff0c\u89e3\u51b3\u7a7a\u5f02\u5e38\u95ee\u9898")," ",(0,l.kt)("sup",null,"4.7.3")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5YOT3"},"#I5YOT3"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,"\u7531\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var value = logContext.Get("Key"); // \u8fc7\u53bb\u5982\u679c logContext == null \u62a5\u9519\n')),(0,l.kt)("p",null,"\u6539\u4e3a\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},'using Furion.Logging;\n\nvar value = logContext.Get("Key"); // \u65b0\u7248\u672c\u4e0d\u4f1a\u62a5\u9519\uff0c\u4e14 value = null\n')))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\u65e7\u7248\u672c\u5b9a\u65f6\u4efb\u52a1\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},"\u5f03\u7528")," \u72b6\u6001\uff08\u4e00\u5468\u5185\u53d1\u5e03\u65b0\u7248\uff09\uff0c\u5982\u9700\u53d6\u6d88\u8b66\u544a\u5728 ",(0,l.kt)("inlineCode",{parentName:"strong"},".csproj")," \u4e2d\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"strong"},"0618"))," ",(0,l.kt)("sup",null,"4.7.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/0ff3ac0fcc54c510ce444b80e9f83eb2c81dc9ba"},"0ff3ac0")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("strong",{parentName:"li"},"\u751f\u6210 ",(0,l.kt)("inlineCode",{parentName:"strong"},"JWT Token")," \u65f6\u95f4\u6233\u548c\u81ea\u52a8\u5237\u65b0\u903b\u8f91\u5728\u9ad8\u5e76\u53d1\u4e0b\u68c0\u67e5\u6709\u6548\u6027\u4e0d\u591f\u7cbe\u786e\u95ee\u9898\uff0c\u539f\u56e0\u662f\u65f6\u95f4\u6233\u4e22\u6389\u4e86\u6beb\u79d2\u90e8\u5206")," ",(0,l.kt)("sup",null,"4.7.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3c0c017ca43c9043bb5806b2951a5bcc7d571142"},"3c0c017")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("strong",{parentName:"li"},"\u5728 ",(0,l.kt)("inlineCode",{parentName:"strong"},"IDatabaseLoggingWriter")," \u5b9e\u73b0\u7c7b\u4e2d\u8f93\u51fa\u65e5\u5fd7\u5bfc\u81f4\u6b7b\u5faa\u73af\u95ee\u9898")," ",(0,l.kt)("sup",null,"4.7.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/30dea0cebf8a946bea670fa0d2f82cde8321b847"},"30dea0c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u89c4\u8303\u5316\u7ed3\u679c ",(0,l.kt)("inlineCode",{parentName:"li"},"OnResponseStatusCodes")," \u65b9\u6cd5\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"Response")," \u5df2\u5b8c\u6210\u5199\u5165\u65f6\u8bbe\u7f6e\u51fa\u73b0\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("sup",null,"4.7.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5YBHL"},"#I5YBHL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},'L.SetCulture("zh-CN");')," \u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"Response")," \u5df2\u5b8c\u6210\u5199\u5165\u65f6\u8bbe\u7f6e\u51fa\u73b0\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("sup",null,"4.7.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5YBHL"},"#I5YBHL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"li"},"WebAPI")," \u5728\u7c7b\u4e0a\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"[Route]")," \u7279\u6027\u4e14\u5305\u542b ",(0,l.kt)("inlineCode",{parentName:"li"},"[action]")," \u6a21\u677f\u5bfc\u81f4\u751f\u6210\u9519\u8bef\u63a5\u53e3\u8def\u5f84 ",(0,l.kt)("sup",null,"4.7.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5YEZQ"},"#I5YEZQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u542f\u7528\u4e8c\u7ea7\u865a\u62df\u76ee\u5f55 ",(0,l.kt)("inlineCode",{parentName:"li"},"AppSettings:VirtualPath")," \u5bfc\u81f4 ",(0,l.kt)("inlineCode",{parentName:"li"},"swagger")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"miniprofile")," \u52a0\u8f7d\u5931\u8d25 ",(0,l.kt)("sup",null,"4.7.3")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5Z8RM"},"#I5Z8RM")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u76d1\u542c\u5e26\u6709 ",(0,l.kt)("inlineCode",{parentName:"li"},"[FromServices]")," \u7684\u65b9\u6cd5\u53c2\u6570\u6216\u63a5\u53e3\u7c7b\u578b\u53c2\u6570\u51fa\u9519 ",(0,l.kt)("sup",null,"4.7.7")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3037b04cac8cfa70d6e7f1dba62d48362f75e778"},"3037b04")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpRequest")," \u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"li"},".ReadBodyContentAsync()")," \u8bfb\u53d6\u4e0d\u5230 ",(0,l.kt)("inlineCode",{parentName:"li"},"Body")," \u95ee\u9898 ",(0,l.kt)("sup",null,"4.7.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I60IYU"},"#I60IYU")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON Schema")," \u914d\u7f6e\uff0c\u65b0\u589e\u65e5\u5fd7\u66f4\u591a\u53c2\u6570\u63d0\u9192 ",(0,l.kt)("sup",null,"4.7.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/74bee56ce2a6d305c3825d72e42f6dcaff102aaf"},"74bee56")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u65e5\u5fd7\u8bb0\u5f55\u65f6\u95f4\u683c\u5f0f\u9ed8\u8ba4\u8f93\u51fa\u5e26 ",(0,l.kt)("inlineCode",{parentName:"li"},"7\u4f4d")," \u7684\u6beb\u79d2\u503c ",(0,l.kt)("sup",null,"4.7.1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/aeda90259ef0684bff6308e2f387d89ac9081d37"},"aeda902")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u6240\u6709\u811a\u624b\u67b6\u9ed8\u8ba4\u542f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u5355\u6587\u4ef6/\u72ec\u7acb\u90e8\u7f72")," \u914d\u7f6e ",(0,l.kt)("sup",null,"4.7.7")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/1277f53085833001d241c713b1ec4b8e0a27843e"},"1277f53")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IIS")," \u56de\u6536\u95ee\u9898\u89e3\u51b3\u65b9\u6848\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u83b7\u53d6 ",(0,l.kt)("inlineCode",{parentName:"li"},"Cookies")," \u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u5199\u5165\u6570\u636e\u5e93\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," JSON \u5e8f\u5217\u5316 ",(0,l.kt)("inlineCode",{parentName:"li"},"DateOnly")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"TimeOnly")," \u7c7b\u578b\u5904\u7406\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContext")," \u8bfb\u53d6 ",(0,l.kt)("inlineCode",{parentName:"li"},"Body")," \u5185\u5bb9\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"PM2")," \u914d\u7f6e\u6587\u4ef6 ",(0,l.kt)("inlineCode",{parentName:"li"},"json")," \u90e8\u7f72\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u65e5\u5fd7\u8bb0\u5f55\u6587\u6863\u3001\u5b9a\u65f6\u4efb\u52a1\u6587\u6863\u3001\u8fdc\u7a0b\u8bf7\u6c42\u6587\u6863\u3001\u811a\u624b\u67b6\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7279\u522b\u8d21\u732e")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/YaChengMu"},"@YaChengMu"),"\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/657"},"!657")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/LiuDanK_admin"},"@LiuDanK"),"\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I60MP2"},"#I60MP2"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v469\u5df2\u53d1\u5e03"},"v4.6.9\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("admonition",{title:"\u7248\u672c\u7ec6\u8282",type:"important"},(0,l.kt)("ul",{parentName:"admonition"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.6.9")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5XKW4"},"https://gitee.com/dotnetchina/Furion/issues/I5XKW4")," ",(0,l.kt)("sup",null,"2022.10.25")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.6.8")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5X2Q0"},"https://gitee.com/dotnetchina/Furion/issues/I5X2Q0")," ",(0,l.kt)("sup",null,"2022.10.22")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.6.7")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5WQPP"},"https://gitee.com/dotnetchina/Furion/issues/I5WQPP")," ",(0,l.kt)("sup",null,"2022.10.20")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.6.6")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5WOIV"},"https://gitee.com/dotnetchina/Furion/issues/I5WOIV")," ",(0,l.kt)("sup",null,"2022.10.20")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.6.5")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5VPD1"},"https://gitee.com/dotnetchina/Furion/issues/I5VPD1")," ",(0,l.kt)("sup",null,"2022.10.14")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.6.4")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5VIAQ"},"https://gitee.com/dotnetchina/Furion/issues/I5VIAQ")," ",(0,l.kt)("sup",null,"2022.10.13")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.6.3")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5V99T"},"https://gitee.com/dotnetchina/Furion/issues/I5V99T")," ",(0,l.kt)("sup",null,"2022.10.12")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.6.2")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5V6UE"},"https://gitee.com/dotnetchina/Furion/issues/I5V6UE")," ",(0,l.kt)("sup",null,"2022.10.12")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.6.1")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5UYQW"},"https://gitee.com/dotnetchina/Furion/issues/I5UYQW")," ",(0,l.kt)("sup",null,"2022.10.11")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.6.0")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5UQZ7"},"https://gitee.com/dotnetchina/Furion/issues/I5UQZ7")," ",(0,l.kt)("sup",null,"2022.10.10")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"FileResult")," \u7c7b\u578b\u76d1\u542c ",(0,l.kt)("sup",null,"4.6.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/bf9c0b1d7c695e800b3fdcca1ba578dd26e88d19"},"bf9c0b1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LogMessage")," \u7ed3\u6784 ",(0,l.kt)("inlineCode",{parentName:"li"},"UseUtcTimestamp")," \u5b57\u6bb5\uff0c\u89e3\u91ca\u65e5\u5fd7\u8bb0\u5f55\u65f6\u95f4\u683c\u5f0f\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"UTC")," \u8fd8\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"LOCAL")," \u65f6\u95f4 ",(0,l.kt)("sup",null,"4.6.1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/aab0371d6473117e1e602eef1b9841c48d184e84"},"aab0371")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4e8b\u4ef6\u603b\u7ebf\u6a21\u5757\u91cd\u8bd5\u5931\u8d25\u540e\u652f\u6301\u56de\u8c03 ",(0,l.kt)("sup",null,"4.6.1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5UVMV"},"#I5UVMV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u652f\u6301\u5e8f\u5217\u5316\u5ffd\u7565\u6307\u5b9a\u5c5e\u6027\u540d\u6216\u5c5e\u6027\u7c7b\u578b ",(0,l.kt)("sup",null,"4.6.1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/81c6343a2ddb3751e72de7c5943048c903c638b4"},"81c6343")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"long")," \u5e8f\u5217\u5316\u4e22\u7cbe\u5ea6\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"JsonConvert")," \u5185\u7f6e\u8f6c\u6362\u5668\uff0c",(0,l.kt)("inlineCode",{parentName:"strong"},".AddLongTypeConverters()"))," ",(0,l.kt)("sup",null,"4.6.5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5VJHC"},"#I5VJHC")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/aded58d0bc587d1a1844382c66ec1ab3de96be7c"},"aded58d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"app.EnableBuffering()")," \u62d3\u5c55\uff0c\u89e3\u51b3 ",(0,l.kt)("inlineCode",{parentName:"li"},"Request.Body")," \u4e0d\u80fd\u91cd\u590d\u8bfb\u95ee\u9898 ",(0,l.kt)("sup",null,"4.6.5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/aded58d0bc587d1a1844382c66ec1ab3de96be7c"},"aded58d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u7279\u522b\u63a5\u53e3\u4f7f\u7528\u7279\u5b9a\u7684\u5e8f\u5217\u5316\u89c4\u5219")," ",(0,l.kt)("sup",null,"4.6.6")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/797b0bfe7c702877b1e0f56ee1a97d91fc80c551"},"797b0bf")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u81ea\u52a8\u89e3\u6790 ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT")," \u65f6\u95f4\u6233\u4e3a\u65f6\u95f4\u683c\u5f0f ",(0,l.kt)("sup",null,"4.6.8")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/9e31b0b0cf9adc5fbbf92efd67c781ba8d003cc9"},"9e31b0b")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," ",(0,l.kt)("strong",{parentName:"li"},"\u9002\u914d ",(0,l.kt)("inlineCode",{parentName:"strong"},".NET 6.0.10")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},".NET 7 RC2"))," ",(0,l.kt)("sup",null,"4.6.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/6bb2fadd6600edcebc1539faedba98d4db0e189e"},"6bb2fad")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5185\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"Microsoft.AspNetCore.Mvc.NewtonsoftJson")," \u62d3\u5c55\uff0c\u539f\u56e0\u662f\u592a\u591a\u4eba\u4f7f\u7528\u4e86 ",(0,l.kt)("sup",null,"4.6.5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/aded58d0bc587d1a1844382c66ec1ab3de96be7c"},"aded58d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"del"},'"some log".SetCategory(name)')," \u62d3\u5c55\u65b9\u6cd5")," ",(0,l.kt)("sup",null,"4.6.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/ec4838c218ed9c96ba92d7a80fd11539da59ca22"},"ec4838c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"del"},"DateOnlyJsonConverter")," \u548c ",(0,l.kt)("inlineCode",{parentName:"del"},"DateOnlyOffsetJsonConverter")," \u5904\u7406")," ",(0,l.kt)("sup",null,"4.6.5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/aded58d0bc587d1a1844382c66ec1ab3de96be7c"},"aded58d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\u4e8b\u4ef6\u603b\u7ebf\u89e6\u53d1\u5904\u7406\u7a0b\u5e8f\u7684\u903b\u8f91\uff0c\u7531\u8fc7\u53bb\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"foreach")," \u6539\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},"Parallel.ForEach"),"\uff0c\u541e\u5410\u91cf\u63d0\u5347\u8fd1 4 \u500d")," ",(0,l.kt)("sup",null,"4.6.4")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7384c9c3efb94883421379828565e61870f1640c"},"7384c9c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("del",{parentName:"strong"},(0,l.kt)("inlineCode",{parentName:"del"},".AddDateFormatString()"))," \u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},".AddDateTimeTypeConverters()"))," ",(0,l.kt)("sup",null,"4.6.5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/aded58d0bc587d1a1844382c66ec1ab3de96be7c"},"aded58d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\u91cd\u6784\u65e5\u5fd7\u6a21\u5757\u8bbe\u7f6e\u4e0a\u4e0b\u6587\u6570\u636e\u529f\u80fd")," ",(0,l.kt)("sup",null,"4.6.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/1c198ee2701e0ca76bca1057df6fce6789344c35"},"1c198ee"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,"\u7531\u4e8e\u8fc7\u53bb\u7248\u672c\u8bbe\u7f6e\u65e5\u5fd7\u4e0a\u4e0b\u6587\u6709\u591a\u7ebf\u7a0b\u5f02\u5e38\u548c\u5806\u5185\u5b58\u6ea2\u51fa\u98ce\u9669\uff0c\u6240\u4ee5\u91cd\u65b0\u8bbe\u8ba1\u4e86\u65e5\u5fd7\u4e0a\u4e0b\u6587\u7684\u5199\u6cd5\u3002"),(0,l.kt)("p",null,"\u7531\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},'_logger.ScopeContext(ctx => ctx.Set("Name", "Furion").Set("UserId", 10))\n .LogInformation("\u6211\u662f\u4e00\u4e2a\u65e5\u5fd7 {id}", 20);\n')),(0,l.kt)("p",null,"\u6539\u4e3a\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,7}",showLineNumbers:!0,"{1,7}":!0},'using (var scope = _logger.ScopeContext(ctx => ctx.Set("Name", "Furion").Set("UserId", 10)))\n{\n _logger.LogInformation("\u6211\u662f\u4e00\u4e2a\u65e5\u5fd7 {id}", 20);\n}\n\n// \u4e5f\u53ef\u4ee5\u7b80\u5199\nusing var scope = _logger.ScopeContext(ctx => ctx.Set("Name", "Furion").Set("UserId", 10));\n_logger.LogInformation("\u6211\u662f\u4e00\u4e2a\u65e5\u5fd7 {id}", 20);\n')))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("strong",{parentName:"del"},"\u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"strong"},".SetTimeout")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},"[Timeout]")," \u914d\u7f6e\u65b9\u6cd5\uff0c\u91c7\u7528\u5168\u5c40\u7edf\u4e00\u914d\u7f6e"))," ",(0,l.kt)("sup",null,"4.6.4")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7384c9c3efb94883421379828565e61870f1640c"},"7384c9c"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"HttpClient")," \u8bf7\u6c42\u8d85\u65f6\u65f6\u95f4\u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"100\u79d2"),"\uff0c\u53ef\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u8bbe\u7f6e\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,10}",showLineNumbers:!0,"{4,10}":!0},'// \u914d\u7f6e\u9ed8\u8ba4 HttpClient\noptions.AddHttpClient(string.Empty, c =>\n{\n c.Timeout = TimeSpan.FromMinutes(2);\n});\n\n// \u914d\u7f6e\u7279\u5b9a\u5ba2\u6237\u7aef\noptions.AddHttpClient("github", c =>\n{\n c.Timeout = TimeSpan.FromMinutes(2);\n});\n')))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"4.5.9+")," \u7248\u672c\u65b0\u589e\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"IncludeScopes")," \u914d\u7f6e\u5bfc\u81f4\u65e5\u5fd7\u4e0a\u4e0b\u6587\u5931\u6548 ",(0,l.kt)("sup",null,"4.6.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/4a768415bb2effe47f1a6e12de0773d3bbd6f75c"},"4a76841")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u591a\u4e2a ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u5171\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"DbParameters")," \u51fa\u73b0\u51b2\u7a81\u95ee\u9898 ",(0,l.kt)("sup",null,"4.6.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5UO2H"},"#I5UO2H")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u9ad8\u9891\u7387\u5199\u5165\u65e5\u5fd7\u5bfc\u81f4\u5806\u5185\u5b58\u6ea2\u51fa\u7684\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("sup",null,"4.6.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5UJRS"},"#I5UJRS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6846\u67b6\u5185\u90e8\u6240\u6709\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},".CreateLogger")," \u521b\u5efa\u7684\u65e5\u5fd7\u5bf9\u8c61\u65e0\u6cd5\u5e94\u7528\u4e0a\u4e0b\u6587\u95ee\u9898 ",(0,l.kt)("sup",null,"4.6.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/ec4838c218ed9c96ba92d7a80fd11539da59ca22"},"ec4838c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4fee\u590d\u8fdc\u7a0b\u8bf7\u6c42\u4e0d\u80fd\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker Serivce")," \u4e2d\u8fdb\u884c\u6784\u9020\u51fd\u6570\u6ce8\u5165\uff0c\u539f\u56e0\u662f\u6ce8\u518c\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"Scope")," \u8303\u56f4\u4f5c\u7528\u57df ",(0,l.kt)("sup",null,"4.6.3")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/974f835ccdcf84bc84dd6f7044589ae2a2e7a57b"},"974f835")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("strong",{parentName:"li"},"\u4e2a\u522b\u670d\u52a1\u5668\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"SQL Server")," \u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},"TLS 1.2")," \u534f\u8bae\u95ee\u9898")," ",(0,l.kt)("sup",null,"4.6.3")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/974f835ccdcf84bc84dd6f7044589ae2a2e7a57b"},"974f835")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},".ToDictionary()")," \u62d3\u5c55\u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"JObject")," \u7c7b\u578b\u95ee\u9898 ",(0,l.kt)("sup",null,"4.6.5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5VJHC"},"#I5VJHC")," ",(0,l.kt)("a",{parentName:"li",href:"https://github.com/MonkSoul/Furion/commit/a11bf8d8b6bb90b41b8394d8bca35aa3539239e6"},"a11bf8d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u5904\u7406 ",(0,l.kt)("inlineCode",{parentName:"li"},"long")," \u7c7b\u578b\u4e22\u7cbe\u5ea6\u95ee\u9898 ",(0,l.kt)("sup",null,"4.6.5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5VJHC"},"#I5VJHC")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/aded58d0bc587d1a1844382c66ec1ab3de96be7c"},"aded58d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"li"},"WebAPI")," \u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"class")," \u7c7b\u578b\u4e0a\u8d34 ",(0,l.kt)("inlineCode",{parentName:"li"},"[ApiDescriptionSettings(false)]")," \u5bfc\u81f4\u63a5\u53e3 ",(0,l.kt)("inlineCode",{parentName:"li"},"404")," \u95ee\u9898 ",(0,l.kt)("sup",null,"4.6.7")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5WQ18"},"#I5WQ18")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8d85\u9ad8\u9891\u7387\u4e0b\u53d1\u9001\u4e8b\u4ef6\u603b\u7ebf\u6d88\u606f\uff0c\u4f46\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"GC")," \u6765\u4e0d\u53ca\u56de\u6536\u5bfc\u81f4\u5185\u5b58\u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"CPU")," \u7206\u6389\u95ee\u9898 ",(0,l.kt)("sup",null,"4.6.8")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/dbc7935618ff60d7f41d82c0d49042cd189e58b9"},"dbc7935")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"JWT")," \u6a21\u5757\u81ea\u52a8\u5237\u65b0 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Token")," \u8fbe\u5230\u4e34\u754c\u503c\u65f6\u5bfc\u81f4\u81ea\u52a8\u5237\u65b0\u5931\u8d25\uff0c\u5e76\u8fd4\u56de\u9519\u8bef\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"401")," \u72b6\u6001\u7801")," ",(0,l.kt)("sup",null,"4.6.8")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5WXHZ"},"#I5WXHZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea\u52a8\u751f\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"vue/react/angular")," \u5ba2\u6237\u7aef\u5de5\u5177\u5e93\u9519\u8bef\u5904\u7406 ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u95ee\u9898 ",(0,l.kt)("sup",null,"4.6.8")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5WXHZ"},"#I5WXHZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u6ca1\u6709\u6b63\u786e\u5904\u7406 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u6570\u7ec4\u548c\u96c6\u5408")," \u7c7b\u578b\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"url")," \u53c2\u6570 ",(0,l.kt)("sup",null,"4.6.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5XIQ4"},"#I5XIQ4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea\u5b9a\u4e49 ",(0,l.kt)("inlineCode",{parentName:"li"},"Tenant")," \u5b9e\u4f53\u4e14\u5305\u542b ",(0,l.kt)("inlineCode",{parentName:"li"},"TenantId")," \u5c5e\u6027\u4e14\u6ca1\u6709\u7ee7\u627f ",(0,l.kt)("inlineCode",{parentName:"li"},"EntityBase/Entity")," \u57fa\u7c7b\u51fa\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"The entity type 'Tenant' requires a primary key to be defined")," ",(0,l.kt)("sup",null,"4.6.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4UM3E"},"#I4UM3E")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u8fd4\u56de\u503c\u7c7b\u578b\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"\u6cdb\u578b")," \u65f6\u83b7\u53d6 ",(0,l.kt)("inlineCode",{parentName:"li"},"FullName")," \u5e26\u7a0b\u5e8f\u96c6\u7b7e\u540d\u95ee\u9898 ",(0,l.kt)("sup",null,"4.6.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/f0aaec6a5ae358bab7f4b6ed58848de8a7f32f5e"},"f0aaec6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u4f18\u5316\u8fdc\u7a0b\u8bf7\u6c42\u6027\u80fd\uff0c\u6dfb\u52a0\u590d\u7528\u6c60\u7684\u673a\u5236\uff0c\u907f\u514d\u9891\u7e41\u9500\u6bc1\u521b\u5efa ",(0,l.kt)("sup",null,"4.6.4")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7384c9c3efb94883421379828565e61870f1640c"},"7384c9c")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u8bbe\u7f6e\u5ba2\u6237\u7aef\u751f\u547d\u5468\u671f\u914d\u7f6e\u6587\u6863\u548c\u65b0\u8d85\u65f6\u914d\u7f6e\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," \u5e8f\u5217\u5316\u5904\u7406 ",(0,l.kt)("inlineCode",{parentName:"li"},"long")," \u7c7b\u578b\u8bf4\u660e\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," \u53cd\u5e8f\u5217\u5316 ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTimeOffset")," \u7c7b\u578b\u4e2a\u522b\u683c\u5f0f\u51fa\u9519\u95ee\u9898\u89e3\u51b3\u65b9\u6848\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker Service")," \u5b9e\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u4e32\u884c")," \u64cd\u4f5c\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5173\u95ed ",(0,l.kt)("inlineCode",{parentName:"li"},".NET Core")," \u5e95\u5c42\u65e5\u5fd7\u548c\u8fdc\u7a0b\u8bf7\u6c42\u65e5\u5fd7\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u89c4\u8303\u5316\u7ed3\u679c\u652f\u6301\u7279\u5b9a\u63a5\u53e3\u914d\u7f6e\u72ec\u7acb\u5e8f\u5217\u5316\u914d\u7f6e\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u65e5\u5fd7\u8bb0\u5f55\u6587\u6863\u3001\u4e8b\u4ef6\u603b\u7ebf\u6587\u6863\u3001\u6570\u636e\u5e93\u5165\u95e8\u6587\u6863\u3001",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," \u5e8f\u5217\u5316\u6587\u6863\u3001\u8fdc\u7a0b\u8bf7\u6c42\u6587\u6863\u3001\u5b89\u5168\u6388\u6743\u6587\u6863\u3001\u751f\u6210\u524d\u7aef\u8bf7\u6c42\u4ee3\u7406\u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v459\u5df2\u53d1\u5e03"},"v4.5.9\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("admonition",{title:"\u7248\u672c\u7ec6\u8282",type:"important"},(0,l.kt)("ul",{parentName:"admonition"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.5.9")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5ULWN"},"https://gitee.com/dotnetchina/Furion/issues/I5ULWN")," ",(0,l.kt)("sup",null,"2022.10.09")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.5.8")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5UGNS"},"https://gitee.com/dotnetchina/Furion/issues/I5UGNS")," ",(0,l.kt)("sup",null,"2022.10.08")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.5.7")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5U8Q9"},"https://gitee.com/dotnetchina/Furion/issues/I5U8Q9")," ",(0,l.kt)("sup",null,"2022.10.06")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.5.6")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5U4SG"},"https://gitee.com/dotnetchina/Furion/issues/I5U4SG")," ",(0,l.kt)("sup",null,"2022.10.03")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.5.5")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5U413"},"https://gitee.com/dotnetchina/Furion/issues/I5U413")," ",(0,l.kt)("sup",null,"2022.10.02")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.5.4")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5U3MK"},"https://gitee.com/dotnetchina/Furion/issues/I5U3MK")," ",(0,l.kt)("sup",null,"2022.10.01")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.5.2")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TXON"},"https://gitee.com/dotnetchina/Furion/issues/I5TXON")," ",(0,l.kt)("sup",null,"2022.09.30")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.5.1")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TLI6"},"https://gitee.com/dotnetchina/Furion/issues/I5TLI6")," ",(0,l.kt)("sup",null,"2022.09.28")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.5.0")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TD4X"},"https://gitee.com/dotnetchina/Furion/issues/I5TD4X")," ",(0,l.kt)("sup",null,"2022.09.27")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},".AddConsoleFormatter()")," \u62d3\u5c55\u7b80\u5316\u63a7\u5236\u53f0\u65e5\u5fd7\u6a21\u677f\u914d\u7f6e ",(0,l.kt)("sup",null,"4.5.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TCMO"},"#I5TCMO")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u63a7\u5236\u53f0\u548c\u6587\u4ef6\u65e5\u5fd7\u65f6\u95f4\u9ed8\u8ba4\u663e\u793a ",(0,l.kt)("inlineCode",{parentName:"li"},"\u661f\u671f\u51e0")," ",(0,l.kt)("sup",null,"4.5.1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TKL5"},"#I5TKL5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u63a7\u5236\u53f0\u548c\u6587\u4ef6\u65e5\u5fd7\u652f\u6301\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"options.DateFormat")," \u65e5\u671f\u683c\u5f0f\u5316 ",(0,l.kt)("sup",null,"4.5.1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TKL5"},"#I5TKL5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u63a7\u5236\u53f0\u65e5\u5fd7\u5e26\u989c\u8272\u8f93\u51fa\uff0c\u6bd4\u5982\u9ad8\u4eae ",(0,l.kt)("inlineCode",{parentName:"li"},"\u65e5\u5fd7\u7ea7\u522b")," ",(0,l.kt)("sup",null,"4.5.1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TKL5"},"#I5TKL5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u63a7\u5236\u53f0\u683c\u5f0f\u5316\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"options.WriteHandler")," \u5b8c\u5168\u81ea\u5b9a\u4e49\u914d\u7f6e ",(0,l.kt)("sup",null,"4.5.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7fb30368f9640360017fc7f357df13eeb5031c2b"},"7fb3036")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u65e5\u5fd7\u8f93\u51fa ",(0,l.kt)("inlineCode",{parentName:"strong"},"JSON")," \u683c\u5f0f\u5316\u914d\u7f6e")," ",(0,l.kt)("sup",null,"4.5.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TWC1"},"#I5TWC1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5OUT1"},"#I5OUT1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6570\u636e\u5e93\u65e5\u5fd7\u5199\u5165\u72ec\u7acb\u65e5\u5fd7\u6a21\u677f\u914d\u7f6e\u3001\u72ec\u7acb\u65e5\u671f\u683c\u5f0f\u914d\u7f6e ",(0,l.kt)("sup",null,"4.5.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TWC1"},"#I5TWC1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LogMessage")," \u7ed3\u6784\u7c7b ",(0,l.kt)("inlineCode",{parentName:"li"},"LogDateTime"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"ThreadId"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"State")," \u5c5e\u6027 ",(0,l.kt)("sup",null,"4.5.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TWC1"},"#I5TWC1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u53ef\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"JsonWriterOptions")," \u5c5e\u6027 ",(0,l.kt)("sup",null,"4.5.4")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5U375"},"#I5U375")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Log.ScopeContext")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},'"some log".ScopeContext')," \u62d3\u5c55 ",(0,l.kt)("sup",null,"4.5.4")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/812969357a60d0b73becf105e6b77b46113b3800"},"8129693")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContext.SetTokensOfResponseHeaders")," \u62d3\u5c55 ",(0,l.kt)("sup",null,"4.5.7")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3775e659ca13615bc7f65b050fb8540daeed9433"},"3775e65")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65b0\u589e\u8fdc\u7a0b\u8bf7\u6c42\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Stream")," \u6587\u4ef6\u683c\u5f0f\u4e0a\u4f20 ",(0,l.kt)("sup",null,"4.5.8")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5UF3I"},"#I5UF3I")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65e5\u5fd7\u6a21\u5757\u53ef\u914d\u7f6e\u662f\u5426\u542f\u7528\u4e0a\u4e0b\u6587\u529f\u80fd ",(0,l.kt)("inlineCode",{parentName:"li"},"IncludeScopes")," \u5c5e\u6027 ",(0,l.kt)("sup",null,"4.5.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5UJRS"},"#I5UJRS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u65e5\u5fd7\u7b5b\u9009 ",(0,l.kt)("inlineCode",{parentName:"li"},"WriteFilter")," \u914d\u7f6e ",(0,l.kt)("sup",null,"4.5.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/6f06f12b2c115bd181f4832daa7537efe5cb3fe8"},"6f06f12")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\ud83d\ude0a ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u6846\u67b6\u6587\u6863\u5730\u5740\u4e3a ",(0,l.kt)("a",{parentName:"strong",href:"https://furion.baiqian.ltd"},"https://furion.baiqian.ltd"))," ",(0,l.kt)("sup",null,"4.5.4")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/2e3d80ec0be830c33923ef9953ff504528120f06"},"2e3d80e")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u5e95\u5c42\u903b\u8f91\uff0c\u79fb\u9664\u539f\u6765\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},".ScopeContext")," \u5b58\u50a8\u76d1\u542c\u4fe1\u606f\u8bbe\u8ba1 ",(0,l.kt)("sup",null,"4.5.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TWC1"},"#I5TWC1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("strong",{parentName:"del"},"\u4e3b\u673a\u672a\u542f\u52a8\u65f6\u6784\u5efa\u670d\u52a1\u7684\u64cd\u4f5c\u6743\u9650\uff0c\u6b64\u64cd\u4f5c\u4f1a\u5bfc\u81f4\u5185\u5b58\u6fc0\u589e\uff0c\u53d7\u5f71\u54cd\u65b9\u6cd5\uff1a ",(0,l.kt)("inlineCode",{parentName:"strong"},"App.GetOptions")," \u7cfb\u5217\u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},"App.GetService")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},"Scoped.Create")))," ",(0,l.kt)("sup",null,"4.5.4")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5U0A4"},"#I5U0A4")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/812969357a60d0b73becf105e6b77b46113b3800"},"8129693"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,"\u8fd1\u671f\u53d1\u73b0\u8bb8\u591a\u5f00\u53d1\u8005\u5728\u4e3b\u673a\u8fd8\u672a\u542f\u52a8\u65f6\u89e3\u6790\u670d\u52a1\uff0c\u8fd9\u662f\u975e\u5e38\u4e0d\u6b63\u786e\u7684\u884c\u4e3a\uff0c\u4f1a\u5bfc\u81f4\u542f\u52a8\u65f6\u5185\u5b58\u6fc0\u589e\u751a\u81f3\u6ea2\u51fa\uff0c\u5e38\u89c1\u7684\u9519\u8bef\u6709\uff1a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u5728\u542f\u52a8\u7684\u65f6\u5019\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"li"},"Scoped.Create")," \u521b\u5efa\u4f5c\u7528\u57df"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"\u5728\u542f\u52a8\u7684\u65f6\u5019\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"strong"},"App.GetOptions")," \u83b7\u53d6\u9009\u9879\u5bf9\u8c61")),(0,l.kt)("li",{parentName:"ul"},"\u5728\u542f\u52a8\u7684\u65f6\u5019\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"li"},"App.GetService")," \u89e3\u6790\u670d\u52a1")),(0,l.kt)("p",null,"\u6b63\u786e\u7684\u505a\u6cd5\u662f\uff0c\u542f\u52a8\u7684\u65f6\u5019\u7981\u6b62\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"p"},"Scoped.Create")," \u548c ",(0,l.kt)("inlineCode",{parentName:"p"},"App.GetService"),"\u3002"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"\u5982\u9700\u542f\u52a8\u65f6\u83b7\u53d6\u914d\u7f6e\u5e94\u8be5\u901a\u8fc7\uff1a",(0,l.kt)("inlineCode",{parentName:"strong"},'App.GetConfig("\u914d\u7f6e\u8282\u70b9", true)')," \u66ff\u4ee3 ",(0,l.kt)("inlineCode",{parentName:"strong"},"App.GetOptions()")),"\u3002"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5b57\u7b26\u4e32\u65e5\u5fd7\u62d3\u5c55\u5e26\u6cdb\u578b\u65b9\u6cd5\u4e0d\u80fd\u6b63\u786e\u663e\u793a ",(0,l.kt)("inlineCode",{parentName:"li"},"CategoryName")," \u65e5\u5fd7\u7c7b\u522b ",(0,l.kt)("sup",null,"4.5.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TBKL"},"#I5TBKL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u63a7\u5236\u53f0\u65e5\u5fd7\u8bbe\u7f6e\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},".ScopeContext")," \u65e0\u6548\u95ee\u9898 ",(0,l.kt)("sup",null,"4.5.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7fb30368f9640360017fc7f357df13eeb5031c2b"},"7fb3036")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u540c\u65f6\u914d\u7f6e\u4e86\u5c40\u90e8\u548c\u5168\u5c40\u65e5\u5fd7\u76d1\u542c\u89e6\u53d1\u4e24\u6b21\u95ee\u9898 ",(0,l.kt)("sup",null,"4.5.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/a1a97e817c43db4c20ba6e3aae03cea96d545a4b"},"a1a97e8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"v4.4.8+")," \u7248\u672c\u66f4\u65b0\u5bfc\u81f4\u8fdc\u7a0b\u8bf7\u6c42\u5728\u4e2a\u522b\u60c5\u51b5\u4e0b\u51fa\u73b0\u5e76\u53d1\u95ee\u9898 ",(0,l.kt)("sup",null,"4.5.2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TWL3"},"#I5TWL3")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u914d\u7f6e\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"ReturnValueThreshold")," \u4e4b\u540e ",(0,l.kt)("inlineCode",{parentName:"li"},"Json")," \u88ab\u622a\u65ad\u5f15\u53d1\u6709\u6548\u6027\u68c0\u6d4b\u5f02\u5e38 ",(0,l.kt)("sup",null,"4.5.4")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5U375"},"#I5U375")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"DataTable"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"DataSet"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"Tuple")," \u7b49\u7c7b\u578b\u95ee\u9898 ",(0,l.kt)("sup",null,"4.5.5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5U3VO"},"#I5U3VO")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("strong",{parentName:"li"},"\u81ea ",(0,l.kt)("inlineCode",{parentName:"strong"},"v4.5.2+")," \u7248\u672c\u5347\u7ea7\u540e\u51fa\u73b0\u542f\u52a8\u65f6\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"strong"},"App.GetOptons")," \u5f02\u5e38\u95ee\u9898")," ",(0,l.kt)("sup",null,"4.5.6")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5U4OC"},"#I5U4OC")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/f9a6587e3f7893db88c905cf77c3c4ebed39b73c"},"f9a6587")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"app.UseInject(action)")," \u5bfc\u81f4\u6b7b\u5faa\u73af ",(0,l.kt)("sup",null,"4.5.7")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/608"},"!608")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u62a5\u7a7a\u5f15\u7528\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("sup",null,"4.5.8")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5UGCA"},"#I5UGCA")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/610"},"!610")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5e76\u53d1\u60c5\u51b5\u4e0b\u8bbe\u7f6e\u65e5\u5fd7\u4e0a\u4e0b\u6587\u51fa\u73b0\u5076\u7136\u6027\u7a7a\u5f15\u7528\u95ee\u9898 ",(0,l.kt)("sup",null,"4.5.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5UJRS"},"#I5UJRS")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u6587\u4ef6\u65e5\u5fd7\u9ed8\u8ba4\u6a21\u677f\uff0c\u9ed8\u8ba4\u5bf9\u65e5\u5fd7\u65f6\u95f4\u8fdb\u884c\u683c\u5f0f\u5316\u5e76\u663e\u793a\u661f\u671f\u51e0 ",(0,l.kt)("sup",null,"4.5.1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TKL5"},"#I5TKL5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u811a\u624b\u67b6\u4ee3\u7801\uff0c\u9ed8\u8ba4\u542f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"services.AddConsoleFormatter()")," ",(0,l.kt)("sup",null,"4.5.1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TLI6"},"#I5TLI6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serve.Run()")," \u4ee3\u7801\uff0c\u9ed8\u8ba4\u542f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"services.AddConsoleFormatter()")," ",(0,l.kt)("sup",null,"4.5.1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5TLI6"},"#I5TLI6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u51cf\u5c11 ",(0,l.kt)("inlineCode",{parentName:"li"},"MiniProfile")," \u4e0d\u5fc5\u8981\u7684\u76d1\u542c\uff0c\u53ea\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u9875\u9762\u8bf7\u6c42\u624d\u76d1\u542c ",(0,l.kt)("sup",null,"4.5.7")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/697ef51f4869a4d533a6debd2a17cb9f0c1000c3"},"697ef51")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u65e5\u5fd7\u6a21\u5757\u6240\u6709\u65e5\u5fd7\u65f6\u95f4\u9ed8\u8ba4\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"24\u5c0f\u65f6\u5236"),"\uff0c\u8fc7\u53bb\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"12\u5c0f\u65f6\u5236")," ",(0,l.kt)("sup",null,"4.5.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/612"},"!612")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u9009\u9879\u76d1\u542c\u51fa\u73b0\u89e6\u53d1\u591a\u6b21\u7684\u89e3\u51b3\u65b9\u6848 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5T9PR"},"#I5T9PR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u65e5\u5fd7\u8bb0\u5f55\u6587\u6863\u3001\u52a8\u6001 WebAPI \u6587\u6863\u3001\u9009\u9879\u6587\u6863\u3001",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContext")," \u6587\u6863\u3001\u8fdc\u7a0b\u8bf7\u6c42\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u672c\u671f\u4eae\u70b9"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ol",{parentName:"li"},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u65e5\u5fd7\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"strong"},"JSON")," \u683c\u5f0f\u5316\u8f93\u51fa"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,4,8,10,14,16}",showLineNumbers:!0,"{2,4,8,10,14,16}":!0},'// \u63a7\u5236\u53f0\nservices.AddConsoleFormatter(options =>\n{\n options.MessageFormat = LoggerFormatter.Json;\n});\n\n// \u6587\u4ef6\nservices.AddFileLogging("mytemplate.log", options =>\n{\n options.MessageFormat = LoggerFormatter.Json;\n});\n\n// \u6570\u636e\u5e93\nservices.AddDatabaseLogging(options =>\n{\n options.MessageFormat = LoggerFormatter.Json;\n});\n')))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ol",{parentName:"li",start:2},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},"LoggingMonitor")," \u8f93\u51fa ",(0,l.kt)("inlineCode",{parentName:"strong"},"JSON")," \u683c\u5f0f"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"\u5168\u5c40/\u5c40\u90e8\u542f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"Json")," \u8f93\u51fa\u914d\u7f6e")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,8}",showLineNumbers:!0,"{4,8}":!0},"// \u5168\u5c40\nservices.AddMonitorLogging(options =>\n{\n options.JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson;\n});\n\n// \u5c40\u90e8\n[LoggingMonitor(JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson)]\n")),(0,l.kt)("admonition",{type:"note"},(0,l.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u5173\u4e8e ",(0,l.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"JsonBehavior")),(0,l.kt)("p",{parentName:"admonition"},"\u53ea\u6709\u8bbe\u7f6e\u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"JsonBehavior.OnlyJson")," \u65f6\u624d\u4e0d\u4f1a\u8f93\u51fa",(0,l.kt)("strong",{parentName:"p"},"\u7f8e\u89c2\u7684"),"\u65e5\u5fd7\u3002")),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"\u5199\u5165\u5b58\u50a8\u4ecb\u8d28")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {14-18}",showLineNumbers:!0,"{14-18}":!0},'using Furion.Logging;\n\nnamespace Your.Core;\n\npublic class DatabaseLoggingWriter : IDatabaseLoggingWriter\n{\n // \u652f\u6301\u6784\u9020\u51fd\u6570\u6ce8\u5165\u4efb\u4f55\u5b9e\u4f8b\uff0c\u4f1a\u81ea\u52a8\u91ca\u653e\u4efb\u4f55\u670d\u52a1\uff0c\u6bd4\u5982\u6ce8\u5165 IRepository\uff0c\u6216\u8005 SqlSugarClient\n public DatabaseLoggingWriter()\n {\n }\n\n public void Write(LogMessage logMsg, bool flush)\n {\n // \u5982\u679c JsonBehavior \u914d\u7f6e\u4e3a OnlyJson \u6216\u8005 All\uff0c\u90a3\u4e48 Context \u5c31\u5305\u542b loggingMonitor \u7684\u503c\n // \u5982\u679c JsonBehavior \u914d\u7f6e\u4e3a OnlyJson\uff0c\u90a3\u4e48\u53ef\u76f4\u63a5\u901a\u8fc7 logMsg.Message \u83b7\u53d6\u7ed3\u679c\u5c31\u662f json \u683c\u5f0f\n if (logMsg.LogName == "System.Logging.LoggingMonitor")\n {\n var jsonString = logMsg.Context.Get("loggingMonitor");\n }\n\n // \u8fd9\u91cc\u5199\u4f60\u4efb\u4f55\u63d2\u5165\u6570\u636e\u5e93\u7684\u64cd\u4f5c\uff0c\u65e0\u9700 try catch\n }\n}\n')),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Json")," \u8f93\u51fa\u683c\u5f0f\u5982\u4e0b\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "controllerName": "test-logger",\n "controllerTypeName": "TestLoggerServices",\n "actionName": "person",\n "actionTypeName": "GetPerson",\n "areaName": null,\n "displayName": "Furion.Application.TestLoggerServices.GetPerson (Furion.Application)",\n "localIPv4": "0.0.0.1",\n "remoteIPv4": "0.0.0.1",\n "httpMethod": "GET",\n "requestUrl": "https://localhost:5001/api/test-logger/person/2",\n "refererUrl": "https://localhost:5001/api/index.html?urls.primaryName=\u6570\u636e\u5e93\u64cd\u4f5c\u6f14\u793a",\n "environment": "Development",\n "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.53",\n "requestHeaderAuthorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY2NDQ1MDUwNSwibmJmIjoxNjY0NDUwNTA1LCJleHAiOjE2NjQ0NTE3MDUsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.-xocNcDQGoXClceoVU5QAHIkTcOZ7ZXo0hEbzghDfFI",\n "timeOperationElapsedMilliseconds": 55,\n "authorizationClaims": [\n {\n "type": "UserId",\n "valueType": "integer",\n "value": "1"\n },\n {\n "type": "Account",\n "valueType": "string",\n "value": "admin"\n },\n {\n "type": "iat",\n "valueType": "integer",\n "value": "1664450505"\n },\n {\n "type": "nbf",\n "valueType": "integer",\n "value": "1664450505"\n },\n {\n "type": "exp",\n "valueType": "integer",\n "value": "1664451705"\n },\n {\n "type": "iss",\n "valueType": "string",\n "value": "dotnetchina"\n },\n {\n "type": "aud",\n "valueType": "string",\n "value": "powerby Furion"\n }\n ],\n "parameters": [\n {\n "name": "id",\n "type": "System.Int32",\n "value": 2\n }\n ],\n "returnInformation": {\n "type": "Furion.UnifyResult.RESTfulResult`1[[System.Object, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]",\n "actType": "Furion.Application.Persons.PersonDto",\n "value": {\n "StatusCode": 200,\n "Data": {\n "Id": 2,\n "Name": null,\n "Age": 0,\n "Address": null,\n "PhoneNumber": null,\n "QQ": null,\n "CreatedTime": "0001-01-01T00:00:00+00:00",\n "Childrens": null,\n "Posts": null\n },\n "Succeeded": true,\n "Errors": null,\n "Extras": null,\n "Timestamp": 1664450517341\n }\n },\n "exception": {\n "type": "System.DivideByZeroException",\n "message": "Attempted to divide by zero.",\n "stackTrace": " at Furion.Application.TestLoggerServices.\u6d4b\u8bd5\u65e5\u5fd7\u76d1\u542c8(Int32 id) in D:\\\\Workplaces\\\\OpenSources\\\\Furion\\\\samples\\\\Furion.Application\\\\TestLoggerServices.cs:line 78\\r\\n at lambda_method103(Closure , Object , Object[] )\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Logged|12_1(ControllerActionInvoker invoker)\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)"\n },\n "validation": {\n "errorCode": null,\n "originErrorCode": null,\n "message": "\u51fa\u9519\u4e86\u554a\u3002\u3002\u3002\u3002"\n }\n}\n')))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ol",{parentName:"li",start:3},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u8fdc\u7a0b\u8bf7\u6c42\u4e0a\u4f20\u6587\u4ef6 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Stream")," \u6d41"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"\u5355\u6587\u4ef6\u4e0a\u4f20")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u5b57\u7b26\u4e32\u65b9\u5f0f")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,9}",showLineNumbers:!0,"{1,5,9}":!0},'var fileStream = new FileStream("image.png", FileMode.Open);\n\nvar result = await "https://localhost:44316/api/test-module/upload-file"\n .SetContentType("multipart/form-data")\n .SetFiles(HttpFile.Create("file", fileStream, "image.png")).PostAsync();\n\nvar fileName = await result.Content.ReadAsStringAsync();\n\nawait fileStream.DisposeAsync();\n')),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u4ee3\u7406\u65b9\u5f0f")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,6}",showLineNumbers:!0,"{1,3,6}":!0},'var fileStream = new FileStream("image.png", FileMode.Open);\n\nvar result = await _http.TestSingleFileProxyAsync(HttpFile.Create("file", fileStream, "image.png"));\nvar fileName = await result.Content.ReadAsStringAsync();\n\nawait fileStream.DisposeAsync();\n')),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"\u591a\u6587\u4ef6\u4e0a\u4f20")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u5b57\u7b26\u4e32\u65b9\u5f0f")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,8}",showLineNumbers:!0,"{1,5,8}":!0},'var fileStream = new FileStream("image.png", FileMode.Open);\n\nvar result = await "https://localhost:44316/api/test-module/upload-muliti-file"\n .SetContentType("multipart/form-data")\n .SetFiles(HttpFile.CreateMultiple("files", (fileStream, "image1.png"), (fileStream, "image2.png"))).PostAsync();\nvar fileName = await result.Content.ReadAsStringAsync();\n\nawait fileStream.DisposeAsync();\n')),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u4ee3\u7406\u65b9\u5f0f")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,6}",showLineNumbers:!0,"{1,3,6}":!0},'var fileStream = new FileStream("image.png", FileMode.Open);\n\nvar result = await _http.TestMultiFileProxyAsync(HttpFile.CreateMultiple("files", (fileStream, "image1.png"), (fileStream, "image2.png")));\nvar fileName = await result.Content.ReadAsStringAsync();\n\nawait fileStream.DisposeAsync();\n')),(0,l.kt)("ol",{start:3},(0,l.kt)("li",{parentName:"ol"},"\u8fd8\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Bytes")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Stream")," \u6df7\u5408")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-2,4-10,14,18}",showLineNumbers:!0,"{1-2,4-10,14,18}":!0},'var fileStream = new FileStream("image.png", FileMode.Open);\nvar bytes = File.ReadAllBytes("image.png");\n\nvar httpFile = new HttpFile\n{\n Name = name,\n Bytes = bytes,\n FileStream = fileStream,\n FileName = fileName\n};\n\nvar result = await "https://localhost:44316/api/test-module/upload-file"\n .SetContentType("multipart/form-data")\n .SetFiles(httpFile).PostAsync();\n\nvar fileName = await result.Content.ReadAsStringAsync();\n\nawait fileStream.DisposeAsync();\n')))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ol",{parentName:"li",start:4},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"LoggingMonitor")," \u5168\u5c40\u8fc7\u6ee4"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers showLineNumbers {1,3,10}",showLineNumbers:!0,"{1,3,10}":!0},"services.AddMonitorLogging(options =>\n{\n options.WriteFilter = (context) =>\n {\n // \u83b7\u53d6\u63a7\u5236\u5668/\u64cd\u4f5c\u63cf\u8ff0\u5668\n var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;\n\n // \u4f60\u7684\u903b\u8f91....\uff0c\u4e0d\u9700\u8981\u62e6\u622a\u8fd4\u56de false\uff0c\u5426\u5219 true\n\n return true;\n };\n});\n")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v449\u5df2\u53d1\u5e03"},"v4.4.9\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("admonition",{title:"\u7248\u672c\u7ec6\u8282",type:"important"},(0,l.kt)("ul",{parentName:"admonition"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.4.9")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5SP37"},"https://gitee.com/dotnetchina/Furion/issues/I5SP37")," ",(0,l.kt)("sup",null,"2022.09.23")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.4.8")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5SKUE"},"https://gitee.com/dotnetchina/Furion/issues/I5SKUE")," ",(0,l.kt)("sup",null,"2022.09.22")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.4.7")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5SEFE"},"https://gitee.com/dotnetchina/Furion/issues/I5SEFE")," ",(0,l.kt)("sup",null,"2022.09.21")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.4.6")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5RSFD"},"https://gitee.com/dotnetchina/Furion/issues/I5RSFD")," ",(0,l.kt)("sup",null,"2022.09.19")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.4.5")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5RHQX"},"https://gitee.com/dotnetchina/Furion/issues/I5RHQX")," ",(0,l.kt)("sup",null,"2022.09.16")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.4.4")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5R5TI"},"https://gitee.com/dotnetchina/Furion/issues/I5R5TI")," ",(0,l.kt)("sup",null,"2022.09.15")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.4.3")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5QVH3"},"https://gitee.com/dotnetchina/Furion/issues/I5QVH3")," ",(0,l.kt)("sup",null,"2022.09.13")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.4.2")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5QDHX"},"https://gitee.com/dotnetchina/Furion/issues/I5QDHX")," ",(0,l.kt)("sup",null,"2022.09.08")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.4.1")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5Q3SX"},"https://gitee.com/dotnetchina/Furion/issues/I5Q3SX")," ",(0,l.kt)("sup",null,"2022.09.07")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.4.0")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PQHR"},"https://gitee.com/dotnetchina/Furion/issues/I5PQHR")," ",(0,l.kt)("sup",null,"2022.09.05")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u53cb\u597d\u5f02\u5e38\u53ef\u63a7\u5236\u662f\u5426\u8f93\u51fa\u9519\u8bef\u65e5\u5fd7\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"LogError: true")," ",(0,l.kt)("sup",null,"4.4.0")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PKJH"},"#I5PKJH")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"DateOnlyJsonConverter")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"DateOnlyOffsetJsonConverter")," \u5e8f\u5217\u5316\u8f6c\u6362\u5668 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/565"},"!565")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4e8b\u4ef6\u603b\u7ebf ",(0,l.kt)("inlineCode",{parentName:"li"},"LogEnabled")," \u914d\u7f6e\uff0c\u53ef\u63a7\u5236\u662f\u5426\u8f93\u51fa\u670d\u52a1\u65e5\u5fd7 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5QLY5"},"#I5QLY5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u53ef\u5b9e\u73b0\u4efb\u4f55\u591a\u5957\u89c4\u8303\u5316\u7ed3\u679c\u529f\u80fd\uff0c\u652f\u6301\u7279\u5b9a\u63a7\u5236\u5668\uff0c\u7279\u5b9a\u65b9\u6cd5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5QZ37"},"#I5QZ37")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ILoggerFactory")," \u65e5\u5fd7\u5de5\u5382\u52a8\u6001\u6279\u91cf\u6dfb\u52a0\u6587\u4ef6\u65e5\u5fd7\u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5R9PO"},"#I5R9PO")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.GetCommandLineConfiguration(args)")," \u89e3\u6790\u547d\u4ee4\u884c\u53c2\u6570\u9759\u6001\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/803542c3e21496e92d2bf83aaa2d00831fcb09bc"},"803542c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u4ee3\u7406\u652f\u6301\u8fd4\u56de\u53d7\u5f71\u54cd\u884c\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5REJ9"},"#I5REJ9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u4efb\u610f\u81ea\u5b9a\u4e49\u65e5\u5fd7\u6587\u4ef6\u540d\u652f\u6301\u6eda\u52a8\u65e5\u5fd7\u5220\u9664\u529f\u80fd")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5RFBQ"},"#I5RFBQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},".pcd")," \u56fe\u7247\u7c7b\u578b ",(0,l.kt)("inlineCode",{parentName:"li"},"MIME")," \u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"image/x-photo-cd")," \u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/5fafc8477a4d213d16db92cf030f409c758fab95"},"5fafc84")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u9ed8\u8ba4\u65e5\u5fd7\u8f93\u51fa\u5f53\u524d\u7ebf\u7a0b ",(0,l.kt)("inlineCode",{parentName:"li"},"Environment.CurrentManagedThreadId")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/b8fe2cdc49d1bd11e38ad37fa512acafc3d96417"},"b8fe2cd")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"app.UseInject(Action)")," \u91cd\u8f7d\u65b9\u6cd5\uff0c\u7b80\u5316\u914d\u7f6e ",(0,l.kt)("sup",null,"4.4.8")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/0b645fede0ad81c4779a8b9b4b16d9c5d60c9662"},"0b645fe")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u6846\u67b6\u9002\u914d ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},".NET 6.0.9")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},".NET 7.0 RC1"))," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/be5b4098bae2153f8d49cf9797e454afde0d0aab"},"be5b40")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/1eee77bff0954336dcc5402a09a3195667bb80f2"},"1eee77b")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},".SetBodyBytes")," \u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},".SetFiles")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PMS5"},"#I5PMS5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PIYI"},"#I5PIYI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"FS.InitialContentTypeProvider()")," \u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"FS.GetFileExtensionContentTypeProvider()")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/5fafc8477a4d213d16db92cf030f409c758fab95"},"5fafc84")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},"\u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"del"},"[BodyBytes]")," \u8bbe\u8ba1\uff0c\u91c7\u7528 ",(0,l.kt)("inlineCode",{parentName:"del"},"HttpFile")," \u65b9\u5f0f")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PMS5"},"#I5PMS5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PIYI"},"#I5PIYI"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3-4,7-8,11-12}",showLineNumbers:!0,"{3-4,7-8,11-12}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]\n Task PostXXXAsync(HttpFile file);\n\n // \u652f\u6301\u591a\u4e2a\u6587\u4ef6\n [Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]\n Task PostXXXAsync(HttpFile[] files);\n\n // \u652f\u6301\u591a\u4e2a\u6587\u4ef6\n [Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]\n Task PostXXXAsync(IList files);\n}\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,7}",showLineNumbers:!0,"{3,7}":!0},'// bytes \u53ef\u4ee5\u901a\u8fc7 File.ReadAllBytes(\u6587\u4ef6\u8def\u5f84) \u83b7\u53d6\nvar res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")\n .SetFiles(HttpFile.Create("file", bytes, "image.png")).PostAsync();\n\n// \u652f\u6301\u591a\u4e2a\u6587\u4ef6\nvar res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")\n .SetFiles(HttpFile.CreateMultiple("files", (bytes, "image1.png"), (bytes, "image2.png"))).PostAsync();\n')))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u6240\u6709\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"AddInject")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"UseInject")," \u53c2\u6570\u8bbe\u8ba1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5QCF0"},"#I5QCF0"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,5}",showLineNumbers:!0,"{3,5}":!0},"public void ConfigureServices(IServiceCollection services)\n{\n services.AddInject(options =>\n {\n options.ConfigureSwaggerGen(gen =>\n {\n // ...\n });\n });\n}\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,5,10}",showLineNumbers:!0,"{3,5,10}":!0}," public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n app.UseInject(configure: options =>\n {\n options.ConfigureSwagger(swg =>\n {\n // ...\n });\n\n options.ConfigureSwaggerUI(ui =>\n {\n // ...\n });\n });\n}\n")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\u8fdc\u7a0b\u8bf7\u6c42\u6240\u6709 ",(0,l.kt)("inlineCode",{parentName:"strong"},"xxxAsStreamAsync")," \u8fd4\u56de\u503c")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5QVEB"},"#I5QVEB"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,"\u7531\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var stream = await "https://www.furion.icu/".GetAsStreamAsync();\n')),(0,l.kt)("p",null,"\u6539\u4e3a\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var (stream, encoding) = await "https://www.furion.icu/".GetAsStreamAsync();\n')))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"}," ",(0,l.kt)("inlineCode",{parentName:"strong"},".Inject()")," \u652f\u6301\u914d\u7f6e\u66f4\u591a\u53c2\u6570\uff0c\u5f00\u653e\u5e95\u5c42\u66f4\u591a\u6743\u9650")," ",(0,l.kt)("sup",null,"4.4.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/1182283f6303b2d73ae4c82cdbc8b5b705d90030"},"1182283"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},".Inject((builder, options) => {\n options.ConfigureAppConfiguration((context, config) =>\n {\n\n });\n options.ConfigureServices((context, services) =>\n {\n\n });\n});\n")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u4ee3\u7406\u6a21\u5f0f\u975e\u6cdb\u578b\u53c2\u6570\u5bfc\u81f4\u6570\u7ec4\u6ea2\u51fa\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5Q3SN"},"#I5Q3SN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u5ba2\u6237\u7aef ",(0,l.kt)("inlineCode",{parentName:"li"},"IP")," \u8bb0\u5f55\u9519\u8bef ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5QCU1"},"#I5QCU1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/562"},"!562")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u54cd\u5e94\u62a5\u6587\u4e2d\u5305\u542b ",(0,l.kt)("inlineCode",{parentName:"li"},"charset=gbk")," \u8fdb\u884c\u5e8f\u5217\u5316\u540e\u4e71\u7801\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5QVEB"},"#I5QVEB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6587\u4ef6\u65e5\u5fd7\u65ad\u7535\u65f6\u4e22\u5931\u65e5\u5fd7\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/db7d51bba569001bc363727a6683ab3f31c3fc1d"}," db7d51b")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"li"},"WebAPI")," \u6216\u63a7\u5236\u53f0\u8d34\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},'[ApiDescriptionSettings(Tag = "")]')," \u6807\u7b7e\u4e4b\u540e\u5bfc\u81f4\u6ce8\u91ca\u4e22\u5931 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5REVF"},"#I5REVF")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5RE4J"},"#I5RE4J")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("strong",{parentName:"li"},"\u542f\u7528\u6570\u636e\u5e93\u65e5\u5fd7\u4f46\u662f\u6ca1\u6709\u914d\u7f6e\u914d\u7f6e\u6587\u4ef6\u51fa\u73b0\u7a7a\u5f02\u5e38\u95ee\u9898")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/33817bed9d47c85a57c0198c0819ad5cf1c41d0b"},"33817be")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("strong",{parentName:"li"},"\u63a7\u5236\u53f0\u65e5\u5fd7\u8fc7\u6ee4\u65e0\u6cd5\u8fc7\u6ee4\u9ed8\u8ba4\u4e3b\u673a\u65e5\u5fd7\u95ee\u9898")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/33817bed9d47c85a57c0198c0819ad5cf1c41d0b"},"33817be")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("strong",{parentName:"li"},"\u811a\u624b\u67b6\u9519\u8bef\u7684\u65e5\u5fd7\u914d\u7f6e\u95ee\u9898")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/33817bed9d47c85a57c0198c0819ad5cf1c41d0b"},"33817be")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("strong",{parentName:"li"},"\u9ad8\u9891\u538b\u6d4b\u60c5\u51b5\u4e0b\u5199\u65e5\u5fd7\u5e76\u8bbe\u7f6e\u65e5\u5fd7\u4e0a\u4e0b\u6587\u5bfc\u81f4\u5e76\u53d1\u66f4\u65b0\u51fa\u73b0 ",(0,l.kt)("inlineCode",{parentName:"strong"},"System.AggregateException")," \u5f02\u5e38\u95ee\u9898")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5RFBQ"},"#I5RFBQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("strong",{parentName:"li"},"\u65e5\u5fd7\u6587\u4ef6\u540d\u56e0 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Windows")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},"Linux")," \u8def\u5f84\u5206\u9694\u7b26\u4e0d\u4e00\u81f4\u5bfc\u81f4\u65e5\u5fd7\u6587\u4ef6\u521b\u5efa\u5931\u8d25\u95ee\u9898\uff0c",(0,l.kt)("inlineCode",{parentName:"strong"},"Linux")," \u53ea\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},"/")," \u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},"\\"))," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5RFBQ"},"#I5RFBQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Oops.Oh/Bah")," \u8bbe\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},".WithData")," \u4e4b\u540e\u65e0\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/580"},"!580")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u57fa\u4e8e ",(0,l.kt)("inlineCode",{parentName:"li"},"Redis")," \u91cd\u5199\u4e8b\u4ef6\u5b58\u50a8\u5668\u5e8f\u5217\u5316 ",(0,l.kt)("inlineCode",{parentName:"li"},"IEventSource")," \u5b9e\u4f8b\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("sup",null,"4.4.7")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3e45020eca5948d18d5cb405a665aae44088fd20"},"3e45020")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"Log")," \u9759\u6001\u7c7b\u8d85\u9ad8\u9891\u7387\u4e0b\u5199\u65e5\u5fd7\u5bfc\u81f4 ",(0,l.kt)("inlineCode",{parentName:"li"},"CPU")," \u6fc0\u589e\u95ee\u9898 ",(0,l.kt)("sup",null,"4.4.7")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5SDK5"},"#I5SDK5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u8d85\u9ad8\u9891\u7387\u4e0b\u53d1\u9001\u8bf7\u6c42\u5bfc\u81f4 ",(0,l.kt)("inlineCode",{parentName:"li"},"CPU")," \u6fc0\u589e\u95ee\u9898\u548c\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("sup",null,"4.4.8")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5SJJR"},"#I5SJJR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u96c6\u6210\u7b2c\u4e09\u65b9\u914d\u7f6e\u4e2d\u5fc3\u65f6\u83b7\u53d6\u7684\u4e0d\u662f\u6700\u65b0\u6570\u636e\u95ee\u9898 ",(0,l.kt)("sup",null,"4.4.9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/2cdef6bd4274e5ea0328f209c34b9158dcded7ee"},"2cdef6b")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JWTEncryption")," \u9759\u6001\u7c7b\uff0c\u652f\u6301\u65e0\u9700\u6ce8\u518c ",(0,l.kt)("inlineCode",{parentName:"li"},"services.AddJwt()")," \u4f7f\u7528 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PPKE"},"#I5PPKE")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5POLZ"},"#I5POLZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u4e8b\u4ef6\u603b\u7ebf\u9ed8\u8ba4\u65e5\u5fd7\u7c7b\u540d\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"System.Logging.EventBusService")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5QLY5"},"#I5QLY5")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},".NET6")," \u5347\u7ea7 ",(0,l.kt)("inlineCode",{parentName:"li"},".NET7")," \u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ASP.NET 7")," \u96c6\u6210\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u96c6\u6210\u7b2c\u4e09\u65b9\u914d\u7f6e\u4e2d\u5fc3\u6587\u6863 ",(0,l.kt)("sup",null,"4.4.9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7b2c\u4e09\u65b9\u4e8b\u4ef6\u603b\u7ebf\u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u96c6\u6210\u6587\u6863 ",(0,l.kt)("sup",null,"4.4.9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4e8b\u4ef6\u603b\u7ebf\u96c6\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"Kafka")," \u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5P5UG"},"#I5P5UG")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u53cb\u597d\u5f02\u5e38\u6587\u6863\u3001\u65e5\u5fd7\u8bb0\u5f55\u6587\u6863\u3001\u8fdc\u7a0b\u8bf7\u6c42\u6587\u6863\u3001\u4f9d\u8d56\u6ce8\u5165\u6587\u6863\u3001\u5373\u65f6\u901a\u8baf\u6587\u6863\u3001\u4e8b\u4ef6\u603b\u7ebf\u6587\u6863\u3001Worker Service \u6587\u6863\u3001\u5355\u5143\u6d4b\u8bd5\u6587\u6863\u3001\u5165\u95e8\u6307\u5357\u6587\u6863\u3001\u6570\u636e\u5e93\u65b0\u589e\u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v439\u5df2\u53d1\u5e03"},"v4.3.9\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("admonition",{title:"\u7248\u672c\u7ec6\u8282",type:"important"},(0,l.kt)("ul",{parentName:"admonition"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.3.9")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PIWD"},"https://gitee.com/dotnetchina/Furion/issues/I5PIWD")," ",(0,l.kt)("sup",null,"2022.09.03")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"v4.3.8")," \u7248\u672c\u7ec6\u8282\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PCXK"},"https://gitee.com/dotnetchina/Furion/issues/I5PCXK")," ",(0,l.kt)("sup",null,"2022.09.02")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AppSettings")," \u914d\u7f6e\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"ExcludeAssemblies")," \u5c5e\u6027\uff0c\u652f\u6301\u5ffd\u7565\u6307\u5b9a\u7a0b\u5e8f\u96c6\u626b\u63cf ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7b7747f38c84acfe7df3469599bebf417e5ad843"},"7b7747f")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Oops.Oh")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Oops.Bah")," \u652f\u6301\u8bbe\u7f6e\u989d\u5916\u6570\u636e ",(0,l.kt)("inlineCode",{parentName:"li"},".WithData(data)")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5O38E"},"#I5O38E")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b9a\u65f6\u4efb\u52a1 ",(0,l.kt)("inlineCode",{parentName:"li"},"Crontab.GetSleepMilliseconds(baseTime)")," \u83b7\u53d6\u4e0b\u4e00\u4e2a\u53d1\u751f\u65f6\u95f4\u7684\u65f6\u95f4\u5dee ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/d024fae670b7ce3fd4bfd26aee70ed318a4c0383"},"d024fae")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u53cb\u597d\u5f02\u5e38\u9ed8\u8ba4\u6253\u5370\u5f02\u5e38\u65e5\u5fd7\uff0c\u907f\u514d\u751f\u4ea7\u73af\u5883\u6f0f\u6389\u91cd\u8981\u5f02\u5e38\u4fe1\u606f ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/commit/6e3a5bdd0fd22a7f9ae618b7495cd64081a7f2e8"},"6e3a5bd"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65e5\u5fd7\u9759\u6001\u7c7b ",(0,l.kt)("inlineCode",{parentName:"li"},"Log.CreateLoggerFactory()")," \u9759\u6001\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/75c672afc58b393313916c433cb9d92c779b9629"},"75c672a")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u591a\u8bed\u8a00 ",(0,l.kt)("inlineCode",{parentName:"li"},"SharedResource")," \u6a21\u5f0f\uff0c\u907f\u514d\u786c\u7f16\u7a0b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/18e80c7d7c2c2450c6ad429601716f546552e987"},"18e80c7")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u4e8b\u4ef6\u603b\u7ebf ",(0,l.kt)("inlineCode",{parentName:"strong"},"MessageCenter")," \u9759\u6001\u7c7b\uff0c\u89e3\u51b3\u4ece ",(0,l.kt)("inlineCode",{parentName:"strong"},"Fur v1.x")," \u7248\u672c\u5347\u7ea7\u95ee\u9898 ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/commit/a29fc7cf63a3ea41b1617a6ad98a701a243e24f8"},"a29fc7c"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7ec4\u4ef6\u5316 ",(0,l.kt)("inlineCode",{parentName:"li"},"IWebComponent")," \u6a21\u5f0f\uff0c\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},".NET5+")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/08a44c347a56c467527935a8caac8966585f5d1a"},"08a44c3")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u8bbe\u7f6e\u81ea\u5df1\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpClient")," \u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PBR3"},"#I5PBR3")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/544"},"!545")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u652f\u6301\u6dfb\u52a0\u66f4\u591a\u81ea\u5b9a\u4e49\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PEPA"},"#I5PEPA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u53ef\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"WithReturnValue")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"ReturnValueThreshold")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PFJ1"},"#I5PFJ1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PFOW"},"#I5PFOW")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u53ef\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"MethodsSettings")," \u66f4\u591a\u4fe1\u606f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PFJ1"},"#I5PFJ1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PFOW"},"#I5PFOW"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,4,6}",showLineNumbers:!0,"{2,4,6}":!0},"Serve.Run(RunOptions.Default\n .AddWebComponent());\n\npublic class XXXWebComponent : IWebComponent\n{\n public void Load(WebApplicationBuilder builder, ComponentContext componentContext)\n {\n // ....\n }\n}\n")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u7a0b\u5e8f\u96c6 ",(0,l.kt)("inlineCode",{parentName:"strong"},"PublicKeyToken")," \u5f3a\u7b7e\u540d")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/26b12c0fd64b153a71496eb62110567e05450f20"},"26b12c0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\u4e8b\u4ef6\u603b\u7ebf ",(0,l.kt)("inlineCode",{parentName:"strong"},"IEventBusFactory")," \u4e8b\u4ef6\u5de5\u5382\u65b9\u6cd5 ",(0,l.kt)("inlineCode",{parentName:"strong"},"AddSubscriber -> Subscribe"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"strong"},"RemoveSubscriber -> Unsubscribe")," ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/commit/a29fc7cf63a3ea41b1617a6ad98a701a243e24f8"},"a29fc7c"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},".AddInject()")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},".UseInject()")," \u914d\u7f6e\u9009\u9879\u540d\u79f0\uff0c\u79fb\u9664 ",(0,l.kt)("inlineCode",{parentName:"li"},"Configure")," \u540e\u7f00 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/b6953cd586936593e40ef626c3b8a1e770239e43"},"b6953cd")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"strong"},"\u8bf7\u6c42\u62e6\u622a"),"\u3001",(0,l.kt)("inlineCode",{parentName:"strong"},"\u54cd\u5e94\u62e6\u622a")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},"\u5f02\u5e38\u62e6\u622a")," \u59d4\u6258\u7b7e\u540d\uff0c\u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"strong"},"HttpClient")," \u53c2\u6570")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5OWBO"},"#I5OWBO"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,7,12}",showLineNumbers:!0,"{2,7,12}":!0},"[Interceptor(InterceptorTypes.Request)]\nstatic void OnRequest(HttpClient client, HttpRequestMessage req)\n{\n}\n\n[Interceptor(InterceptorTypes.Response)]\nstatic void OnResponsing(HttpClien client, HttpResponseMessage res)\n{\n}\n\n[Interceptor(InterceptorTypes.Exception)]\nstatic void OnException(HttpClient client, HttpResponseMessage res, string errors)\n{\n}\n")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u751f\u6210\u5305\u542b ",(0,l.kt)("inlineCode",{parentName:"li"},"\u4e2d\u6587")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT Token")," \u89e3\u5bc6\u540e\u51fa\u73b0\u4e71\u7801\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5O397"},"#I5O397")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpRequestMessage")," \u62d3\u5c55\u4e2d\u8ffd\u52a0\u67e5\u8be2\u53c2\u6570\u65f6\u7684\u7a7a\u5f15\u7528\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PENW"},"#I5PENW")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/547"},"!547")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u65e5\u5fd7\u6a21\u5757\u914d\u7f6e\u591a\u4e2a ",(0,l.kt)("inlineCode",{parentName:"li"},"IDatabaseLoggingWriter")," \u53ea\u6709\u4e00\u4e2a\u751f\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PFQ2"},"#I5PFQ2")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PFJ1"},"#I5PFJ1")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u9ed8\u8ba4\u8f93\u51fa\u6587\u4ef6\u65e5\u5fd7\u6a21\u677f\uff0c\u4f7f\u5176\u66f4\u52a0\u7f8e\u89c2 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/1518cf3be74524ed0d3f73360068a9a0ec6685d9"},"#1518cf3")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u9ed8\u8ba4\u89c4\u8303\u5316\u7ed3\u679c\u9a8c\u8bc1\u5904\u7406\u4e5f\u652f\u6301\u72b6\u6001\u7801\u8bbe\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/2eb939074a14d29fcd3e4726937c8a8430765f48"},"2eb9390")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugarCore")," \u62d3\u5c55\u5305\u548c\u811a\u624b\u67b6\u81f3 ",(0,l.kt)("inlineCode",{parentName:"li"},"5.1.2.6")," \u7248\u672c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PCXK"},"#I5PCXK")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON Schema")," \u5173\u4e8e ",(0,l.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," \u66f4\u591a\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5PFJ1"},"#I5PFJ1")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"RabbitMQ")," \u4e8b\u4ef6\u603b\u7ebf\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AppSettings")," \u914d\u7f6e\u6587\u6863\u3001\u4e8b\u4ef6\u603b\u7ebf\u6587\u6863\u3001\u591a\u6570\u636e\u5e93\u914d\u7f6e\u6587\u6863\u3001\u65e5\u5fd7\u6587\u6863\u3001\u5b9a\u65f6\u4efb\u52a1\u6587\u6863\u3001",(0,l.kt)("inlineCode",{parentName:"li"},"MessageCenter")," \u6587\u6863\u3001\u8fdc\u7a0b\u8bf7\u6c42\u6587\u6863\u3001\u7ec4\u4ef6\u5316\u6587\u6863\u3001\u5165\u95e8\u6307\u5357\u3001\u591a\u8bed\u8a00\u6587\u6863\u3002")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v4213\u5df2\u53d1\u5e03"},"v4.2.13\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u4e8b\u4ef6\u603b\u7ebf\u5de5\u5382\uff0c\u652f\u6301\u8fd0\u884c\u65f6\u52a8\u6001\u6dfb\u52a0\u8ba2\u9605\u7a0b\u5e8f\u548c\u79fb\u9664\u8ba2\u9605\u7a0b\u5e8f")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5NNQX"},"#I5NNQX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u4e8b\u4ef6\u603b\u7ebf ",(0,l.kt)("inlineCode",{parentName:"strong"},"[EventSubscribe]")," \u4e8b\u4ef6 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Id")," \u652f\u6301\u6b63\u5219\u8868\u8fbe\u5f0f\u5339\u914d")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5NNQX"},"#I5NNQX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u4e8b\u4ef6\u603b\u7ebf ",(0,l.kt)("inlineCode",{parentName:"strong"},"[EventSubscribe]")," \u652f\u6301\u5c40\u90e8\u5931\u8d25\u91cd\u8bd5\u914d\u7f6e")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5NNQX"},"#I5NNQX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Log")," \u5168\u5c40\u9759\u6001\u7c7b\uff0c\u65b9\u4fbf\u968f\u65f6\u968f\u5730\u8bb0\u5f55\u65e5\u5fd7")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/ba9b1f13a0b89b6670cf7078ac15abe0eed1f2c3"},"ba9b1f1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4e8b\u4ef6\u603b\u7ebf ",(0,l.kt)("inlineCode",{parentName:"li"},"options.AddSubscriber(Type)")," \u91cd\u8f7d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/blob/424460780b630e1c71de4db84ad8fd14e33a09f5/framework/Furion.Pure/EventBus/Builders/EventBusOptionsBuilder.cs"},"42446078")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ValidationMetadata")," \u7c7b\u578b ",(0,l.kt)("inlineCode",{parentName:"li"},"FirstErrorProperty")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"FirstErrorMessage")," \u5c5e\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MFJT"},"#I5MFJT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serve.Run()")," \u6a21\u5f0f ",(0,l.kt)("inlineCode",{parentName:"li"},"WithArgs(args)")," \u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MOJB"},"#I5MOJB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[UnitOfWork]")," \u5206\u5e03\u5f0f\u4e8b\u52a1 ",(0,l.kt)("inlineCode",{parentName:"li"},"TransactionScope")," \u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MRTY"},"#I5MRTY")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," 16 \u4f4d ",(0,l.kt)("inlineCode",{parentName:"li"},"MD5")," \u52a0\u5bc6\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5N8RC"},"#I5N8RC")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Scoped.Create(async (f,s) => {})")," \u5f02\u6b65\u521b\u5efa\u4f5c\u7528\u57df\u65b9\u6cd5\u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"CreateAsync"),"\uff0c\u907f\u514d\u4e00\u4e9b\u60c5\u51b5\u4e0b\u65e0\u6cd5\u533a\u5206\uff0c",(0,l.kt)("strong",{parentName:"li"},"\u540c\u6b65\u65b9\u6cd5\u4e0d\u53d8")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5N9XY"},"#I5N9XY"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,"\u7531\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-2}",showLineNumbers:!0,"{1-2}":!0},"// Scoped.CreateUow \u4e00\u6837\nawait Scoped.Create(async (f, s) => {});\n")),(0,l.kt)("p",null,"\u6539\u4e3a\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-2}",showLineNumbers:!0,"{1-2}":!0},"// Scoped.CreateUowAsync \u4e00\u6837\nawait Scoped.CreateAsync(async (f, s) => {});\n")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},".NET 6.0.8")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},".NET 7 Preview 7")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/842d4f739c92366e05fb1d2c619c9b2c2c2c21b7"},"842d4f7")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[LoggingMonitor]")," \u547d\u540d\u7a7a\u95f4\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"System"),"\uff0c\u56e0\u4e3a\u4f7f\u7528\u9891\u7387\u8d8a\u6765\u8d8a\u9ad8 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/b879861c9db5cf3cb0f4ae023d1e96b06fad3e46"},"b879861")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u5728\u975e ",(0,l.kt)("inlineCode",{parentName:"strong"},"Web")," \u73af\u5883\u4e2d\u4e0d\u6b63\u786e\u4f7f\u7528\u5b57\u7b26\u4e32\u62d3\u5c55\u65b9\u6cd5\u68c0\u6d4b\u673a\u5236")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/6389cbdd69f5ca826fad25749a45ede079db98ce"},"6389cbd")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\u6240\u6709 ",(0,l.kt)("inlineCode",{parentName:"strong"},".Default")," \u9759\u6001\u5c5e\u6027\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},".Default()")," \u65b9\u6cd5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/6389cbdd69f5ca826fad25749a45ede079db98ce"},"6389cbd")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\u5de5\u4f5c\u5355\u5143 ",(0,l.kt)("inlineCode",{parentName:"strong"},"IUnitOfWork")," \u6240\u6709\u65b9\u6cd5\u53c2\u6570\u7c7b\u578b\uff0c\u7531 ",(0,l.kt)("inlineCode",{parentName:"strong"},"ActionExecutingContext")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},"ActionExecutedContext")," \u6539\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},"FilterContext"))," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MHX5"},"#I5MHX5"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,5,7,9}",showLineNumbers:!0,"{3,5,7,9}":!0},"public interface IUnitOfWork\n{\n void BeginTransaction(FilterContext context, UnitOfWorkAttribute unitOfWork);\n\n void CommitTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork);\n\n void RollbackTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork);\n\n void OnCompleted(FilterContext context, FilterContext resultContext);\n}\n")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u65e5\u5fd7\u4e0a\u4e0b\u6587\u6570\u636e\u591a\u6b21\u5199\u5165\u88ab\u6e05\u7a7a\u95ee\u9898\u4ee5\u53ca\u6570\u636e\u5e93\u65e5\u5fd7\u51fa\u73b0\u5f02\u5e38\u540e\u505c\u6b62\u5199\u5165 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5LIWF"},"#I5LIWF")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4e2a\u522b\u60c5\u51b5\u4e0b\u8de8\u57df\u9ed8\u8ba4\u914d\u7f6e\u7684\u54cd\u5e94\u7f13\u5b58\u5bfc\u81f4\u5d4c\u5165\u5f0f\u8d44\u6e90\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7a57efe15a9a2d76475d758f2b64395f96d94077"},"7a57efe")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u4f20\u5165\u4e0d\u5408\u6cd5\u7684\u8bf7\u6c42\u62a5\u6587\u5934\u6570\u636e\u89e6\u53d1\u6821\u9a8c\u5931\u8d25\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5LPFE"},"#I5LPFE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u591a\u7ebf\u7a0b\u4e2d\u4f7f\u7528\u9759\u6001\u65e5\u5fd7\u5199\u6570\u636e\u5e93\u65e5\u5fd7\u5bfc\u81f4\u8fde\u63a5\u6c60\u8017\u5149\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/8d5cdd6ca04d55e33322000ecc176e47195b6f4d"},"8d5cdd6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore 6.0")," \u4e4b\u540e ",(0,l.kt)("inlineCode",{parentName:"li"},"IModelCacheKeyFactory")," \u63a5\u53e3\u65b9\u6cd5\u6539\u53d8\u5bfc\u81f4\u5206\u8868\u5206\u5e93\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MCZ6"},"#I5MCZ6")," ",(0,l.kt)("a",{parentName:"li",href:"https://github.com/dotnet/efcore/issues/25154#issuecomment-868804532"},"EFCore#25154")," ",(0,l.kt)("a",{parentName:"li",href:"https://github.com/dotnet/EntityFramework.Docs/pull/3305"},"EFCore!3305")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ValidationMetadata")," \u5bf9\u8c61 ",(0,l.kt)("inlineCode",{parentName:"li"},"Message")," \u5b57\u7b26\u4e32\u7c7b\u578b\u51fa\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},'\\"\\"')," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MFJT"},"#I5MFJT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[IfException]")," \u8986\u76d6 ",(0,l.kt)("inlineCode",{parentName:"li"},"Oops.Oh/Bah")," \u9519\u8bef\u6d88\u606f\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/4bbd854c6779bf7eca26fd69b25c4979b8cec32d"},"4bbd854")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u65e5\u5fd7\u5199\u5165\u5faa\u73af\u5199\u5165\u548c\u9891\u7e41\u521b\u5efa\u6570\u636e\u5e93\u8fde\u63a5\u6c60\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/9ce214c9cf49eb1ff59f3c52dbecd789be4f45fd"},"9ce214c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Razor Pages")," \u4e0d\u652f\u6301\u5168\u5c40\u5f02\u5e38\u62e6\u622a\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MHX5"},"#I5MHX5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Razor Pages")," \u4e0d\u652f\u6301\u5168\u5c40\u6570\u636e\u9a8c\u8bc1\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MHX5"},"#I5MHX5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Razor Pages")," \u4e0d\u652f\u6301\u5de5\u4f5c\u5355\u5143 ",(0,l.kt)("inlineCode",{parentName:"li"},"[UnitOfWork]")," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MHX5"},"#I5MHX5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Razor Pages")," \u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," \u81ea\u52a8 ",(0,l.kt)("inlineCode",{parentName:"li"},"SaveChanges")," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MHX5"},"#I5MHX5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Blazor Server")," \u56e0 ",(0,l.kt)("inlineCode",{parentName:"li"},"v4.2.2")," \u7248\u672c\u66f4\u65b0\u5bfc\u81f4\u7684\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MNFN"},"#I5MNFN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[IfException]")," \u4e0d\u652f\u6301\u591a\u8bed\u8a00\u914d\u7f6e\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MPN7"},"#I5MPN7")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"li"},"services.AddMvcFilter()")," \u65b9\u5f0f\u6ce8\u518c\u65e0\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/8d1477d8b44ae111bddb8e4780672bcaf4e0e467"},"8d1477d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4e8b\u4ef6\u603b\u7ebf\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"Channel")," \u7ba1\u9053\u521d\u59cb\u5316\u65f6\u673a\u8fc7\u665a\u95ee\u9898\uff0c\u89e3\u51b3\u90e8\u5206\u7b2c\u4e09\u65b9\u4f9d\u8d56\u4f7f\u7528\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MM3O"},"#I5MM3O")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4e3b\u673a\u505c\u6b62\u65f6\u5199\u5165\u65e5\u5fd7\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5N7S2"},"#I5N7S2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u624b\u52a8\u91ca\u653e\u5bfc\u81f4 ",(0,l.kt)("inlineCode",{parentName:"li"},"AutoSaveChange")," \u7279\u6027\u51fa\u73b0\u91ca\u653e\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5NFWC"},"#I5NFWC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[LoggingMonitor]")," \u5faa\u73af\u5f15\u7528\u5e8f\u5217\u5316\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5NRT9"},"#I5NRT9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u4f20\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"null")," Body \u53c2\u6570\u629b\u51fa\u7a7a\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5NTUE"},"#I5NTUE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4e8b\u4ef6\u603b\u7ebf\u9ed8\u8ba4\u5f00\u542f\u6a21\u7cca\u5339\u914d\uff08\u6b63\u5219\u8868\u8fbe\u5f0f\uff09\u5bfc\u81f4\u4e0d\u5fc5\u8981\u7684\u8ba2\u9605 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5NVOP"},"#I5NVOP")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u4e8b\u4ef6\u603b\u7ebf\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"Channel")," \u7ba1\u9053\u521d\u59cb\u5316\u65f6\u673a\uff0c\u89e3\u51b3\u90e8\u5206\u7b2c\u4e09\u65b9\u4f9d\u8d56\u4f7f\u7528\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5MM3O"},"#I5MM3O")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u5e95\u5c42\u8fed\u4ee3\u6539\u8fdb\u4f18\u5316"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u89c4\u8303\u5316\u6587\u6863\u83b7\u53d6\u63a7\u5236\u5668\u3001\u65b9\u6cd5\u5206\u7ec4\u3001\u6807\u7b7e\u4fe1\u606f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/66d8d54b225b5294cd54aa76b548312f7c37903a"},"66d8d54")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5168\u5c40\u65e5\u5fd7\u9759\u6001\u7c7b ",(0,l.kt)("inlineCode",{parentName:"li"},"Log")," \u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/ba9b1f13a0b89b6670cf7078ac15abe0eed1f2c3"},"ba9b1f1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Nuget")," \u672c\u5730\u6d4b\u8bd5\u5305\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u65e5\u5fd7\u6587\u6863\u3001\u9759\u6001\u7c7b\u6587\u6863\u3001\u6570\u636e\u6821\u9a8c\u6587\u6863\u3001Worker Service \u6587\u6863\u3001\u5de5\u4f5c\u5355\u5143\u6587\u6863\u3001\u4f9d\u8d56\u6ce8\u5165\u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v4114\u5df2\u53d1\u5e03"},"v4.1.14\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Furion.Xunit")," \u62d3\u5c55\u5305\uff0c\u6b63\u5f0f\u5b9e\u73b0 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Xunit")," \u5355\u5143\u6d4b\u8bd5\u5b8c\u6574\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/commit/063a034edd089e88d501af4c09251611476fd238"},"063a034e"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"services.AddMonitorLogging()")," \u65e5\u5fd7\u76d1\u89c6\u5668\u670d\u52a1\uff0c\u652f\u6301\u975e\u5e38\u7075\u6d3b\u7684\u65e5\u5fd7\u64cd\u4f5c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/81df742b2784a18fbf4060fe30cc5151909c3cab"},"81df742")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Serve.Run(silence: true)")," \u7b49\u4e00\u7cfb\u5217\u5f3a\u5927\u7684\u9759\u9ed8\u542f\u52a8\u529f\u80fd ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I5JBSQ"},"#I5JBSQ")," ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I5J98T"},"#I5J98T")," ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/commit/7cced443ca1cdcb29226c71274e087ec2a6135ef"},"7cced4"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SpecificationDocumentBuilder.GetOpenApiGroups()")," \u65b9\u6cd5\u83b7\u53d6\u5e95\u5c42\u7684\u89c4\u8303\u5316\u63a5\u53e3\u5206\u7ec4\u4fe1\u606f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/4ff03c5f8342c4d9b26fb1336cd78936ab189f5e"},"4ff03c5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"logger.ScopeContext()")," \u914d\u7f6e\u65e5\u5fd7\u4e0a\u4e0b\u6587\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5JC0D"},"#I5JC0D")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8de8\u57df\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"CorsAccessorSettings.SignalRSupport")," \u914d\u7f6e\u9009\u9879\uff0c\u652f\u6301\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"SignalR")," \u8de8\u57df ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5JREM"},"#I5JREM")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4e8b\u4ef6\u603b\u7ebf ",(0,l.kt)("inlineCode",{parentName:"li"},"UseUtcTimestamp")," \u9009\u9879\u914d\u7f6e\uff0c\u53ef\u9009\u62e9\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTime.UtcNow")," \u8fd8\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTime.Now"),"\uff0c\u9ed8\u8ba4\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTime.Now")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5JSEU"},"#I5JSEU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u89c4\u8303\u5316\u6587\u6863 ",(0,l.kt)("inlineCode",{parentName:"li"},"[OperationId]")," \u914d\u7f6e\uff0c\u89e3\u51b3\u81ea\u5b9a\u4e49 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger UI")," \u4e0d\u80fd\u6b63\u786e\u663e\u793a\u8def\u7531\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5K1IB"},"#I5K1IB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"IHttpDispatchProxy")," \u65b9\u5f0f\u5168\u5c40\u62e6\u622a\u652f\u6301\u591a\u6001\uff08\u7ee7\u627f\uff09 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5K8FS"},"#I5K8FS")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Xunit")," \u62d3\u5c55\u5305\uff0c\u6b63\u5f0f\u5b9e\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Xunit")," \u5355\u5143\u6d4b\u8bd5\u5b8c\u6574\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/063a034edd089e88d501af4c09251611476fd238"},"063a034e")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"del"},"Furion.Extras.DatabaseAccessor.SqlSugar")," \u62d3\u5c55\u63d2\u4ef6\u4e2d\u7684 ",(0,l.kt)("inlineCode",{parentName:"del"},"[SqlSugarUnitOfWork]")," \u5de5\u4f5c\u5355\u5143\u7279\u6027\uff0c\u5c06\u4f7f\u7528\u901a\u7528\u5de5\u4f5c\u5355\u5143\u66ff\u6362","*","*")," ",(0,l.kt)("a",{parentName:"li",href:"/docs/tran#92631-%E8%87%AA%E5%8A%A8%E7%AE%A1%E7%90%86"},"\u67e5\u770b\u6700\u65b0\u5b9e\u73b0\u6587\u6863"),"*","*"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"del"},"Inject.Create()")," \u65b9\u6cd5\uff0c\u518d\u4e5f\u4e0d\u9700\u8981\u4e86\uff0c\u6846\u67b6\u63d0\u4f9b\u4e86\u65e0\u654c\u5f3a\u5927\u7684 ",(0,l.kt)("inlineCode",{parentName:"del"},"Serve.Run()")," \u9759\u9ed8\u542f\u52a8\u65b9\u5f0f")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/200848eda8c2e419c0b5be83f7768a257f3c88bd"},"200848e")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serve.Run")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"ConfigureConfiguration")," \u65b9\u6cd5\u53c2\u6570\uff0c\u7531 ",(0,l.kt)("inlineCode",{parentName:"li"},"configuration => {}")," \u6539\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"(environment, configuration) => {}")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/83c97bb5a19d6fc4e51cfe05f635675d26067d45"},"83c97bb"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,6}",showLineNumbers:!0,"{2,6}":!0},"// \u7531\nServe.Run(RunOptions.Default.ConfigureConfiguration(configuration => {\n\n}));\n// \u6539\u4e3a\uff1a\nServe.Run(RunOptions.Default.ConfigureConfiguration((environment, configuration) => {\n\n}));\n")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[LoggingMonitor]")," \u5f02\u5e38\u6d88\u606f\u65e5\u5fd7\u7ea7\u522b\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"Information")," \u9519\u8bef\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/ab46cdf534433f45d39ce4d3ee7c71ca84707140"},"ab46cdf")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u65b0\u7248\u672c\u65e5\u5fd7\u7ec4\u4ef6\u9891\u7e41\u63d0\u793a\u6587\u4ef6\u5360\u7528\u95ee\u9898\uff0c\u5c06\u6587\u4ef6\u72ec\u5360\u9501\u6539\u4e3a\u5171\u4eab\u9501 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5J3S6"},"#I5J3S6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u914d\u7f6e\u6570\u636e\u5e93\u65e5\u5fd7\u8bfb\u5199\u5668\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," \u65f6\u63a7\u5236\u53f0\u51fa\u73b0\u65e0\u9650\u6253\u5370\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5J474"},"#I5J474")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[LoggingMonitor]")," \u9488\u5bf9 ",(0,l.kt)("inlineCode",{parentName:"li"},"byte[]")," \u7c7b\u578b\u53c2\u6570\u8f93\u51fa\u8fc7\u5927\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/5380f3551de69f8607ca0fc33c950103c7ed8174"},"5380f35")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u53cb\u597d\u5f02\u5e38\u548c\u89c4\u8303\u5316\u7ed3\u679c\u4e22\u5931\u4e86\u539f\u59cb ",(0,l.kt)("inlineCode",{parentName:"li"},"ErrorCode")," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5IX2R"},"#I5IX2R")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u65b0\u7248\u672c\u65e5\u5fd7\u7ec4\u4ef6\u81ea\u5b9a\u4e49\u6570\u636e\u5e93\u8bfb\u5199\u5668\u6ce8\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"IRepository")," \u4ed3\u50a8\u5bfc\u81f4\u6b7b\u5faa\u73af\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5IX2R"},"#I5IX2R")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Mvc")," \u9ed8\u8ba4\u624b\u52a8\u9a8c\u8bc1\u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u5168\u5c40\u9a8c\u8bc1\u51b2\u7a81\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/2a06c39c1d0a032bbc317e25a22c646babce2a60"},"2a06c39")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serve.Run()")," \u6a21\u5f0f\u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"SuperSocket")," \u7b2c\u4e09\u65b9\u5305\u95ee\u9898\uff0c\u539f\u751f\u662f\u652f\u6301\u7684\u3002",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/186ca0a35d696f58d9e696094848a560074cdf6f"},"186ca0a")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SignalR")," \u8de8\u57df\u9519\u8bef\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5JREM"},"#I5JREM")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[LoggingMonitor]")," \u5c06 ",(0,l.kt)("inlineCode",{parentName:"li"},"Oops.Oh")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Oops.Bah")," \u8bb0\u5f55\u5230\u4e86\u9519\u8bef\u65e5\u5fd7\u4e2d\uff0c\u9ed8\u8ba4\u5e94\u8be5\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"Information")," \u4e14\u63d0\u4f9b\u53ef\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5JZ1H"},"#I5JZ1H")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea\u5b9a\u4e49 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger UI")," \u4e4b\u540e\u4e2a\u522b ",(0,l.kt)("inlineCode",{parentName:"li"},"UI")," \u8981\u6c42\u5fc5\u987b\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"operationId"),"\uff0c\u5426\u5219\u51fa\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"guid")," \u5e8f\u53f7 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5K1IB"},"#I5K1IB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4e3b\u52a8\u629b\u51fa ",(0,l.kt)("inlineCode",{parentName:"li"},"NotFoundResult")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"NotFoundObjectResult")," \u65e0\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5KALZ"},"#I5KALZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[LoggingMonitor]")," \u89e3\u6790\u65b9\u6cd5\u53c2\u6570\u4f46\u524d\u7aef\u672a\u4f20\u5165\u65f6\u51fa\u73b0\u9519\u8bef\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5KC5P"},"#I5KC5P")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[LoggingMonitor]")," \u65e0\u6cd5\u5e8f\u5217\u5316 ",(0,l.kt)("inlineCode",{parentName:"li"},"IQueryable")," \u8fd4\u56de\u503c\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5KJD1"},"#I5KJD1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[LoggingMonitor]")," \u4e0d\u80fd\u8bb0\u5f55\u5168\u5c40\u9a8c\u8bc1\u9519\u8bef\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/b44087dcc7dbe9992b8f4518e0b0cf4ed61c56bb"},"b44087d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[LoggingMonitor]")," \u5b58\u5728\u6ce8\u518c\u987a\u5e8f\u5dee\u5f02\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/b44087dcc7dbe9992b8f4518e0b0cf4ed61c56bb"},"b44087d")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5e95\u5c42\u7684\u89c4\u8303\u5316\u6587\u6863 ",(0,l.kt)("inlineCode",{parentName:"li"},"SpecificationDocumentBuilder")," \u90e8\u5206\u65b9\u6cd5\uff0c\u63d0\u4f9b\u66f4\u52a0\u4fbf\u6377\u7684\u7b2c\u4e09\u65b9 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger UI")," \u96c6\u6210 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/10f0f01996586eedb138304c7b00c6f31282dfeb"},"10f0f01")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u5355\u5143\u6d4b\u8bd5\u6587\u6863\u3001\u5165\u95e8\u6307\u5357\u6587\u6863\u3001Worker Services \u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u672c\u671f\u4eae\u70b9")))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("inlineCode",{parentName:"li"},"Serve.Run()")," \u5f7b\u5f7b\u5e95\u5e95\u652f\u6301\u5168\u5e73\u53f0\uff0c\u63d0\u4f9b\u975e\u5e38\u5f3a\u5927\u7684\u9759\u9ed8\u6a21\u5f0f")),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"\u542f\u7528\u9759\u9ed8\u6a21\u5f0f\u53ef\u4ee5\u5b9e\u73b0\u65e0\u963b\u585e\u65b9\u5f0f\u6267\u884c\u7a0b\u5e8f\uff0c\u800c\u4e14\u8fd8\u80fd\u4f53\u9a8c\u5b8c\u6574\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u529f\u80fd\u3002")),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("admonition",{title:"\u5927\u9769\u547d",type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"\u6709\u4e86 ",(0,l.kt)("inlineCode",{parentName:"p"},"Serve.Run()")," \u9759\u9ed8\u6a21\u5f0f\u540e\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u5f7b\u5f7b\u5e95\u5e95\u652f\u6301\u5168\u5e73\u53f0\uff0c\u4e0d\u7ba1\u4f60\u662f ",(0,l.kt)("inlineCode",{parentName:"p"},"\u63a7\u5236\u53f0\u3001Web\u3001\u684c\u9762\u3001\u79fb\u52a8\u3001\u5355\u5143\u6d4b\u8bd5\uff0c\u96c6\u6210\u6d4b\u8bd5\uff0c\u57fa\u51c6\u6d4b\u8bd5\u7b49\u7b49\u5e94\u7528\u7a0b\u5e8f"),"\u3002")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3}",showLineNumbers:!0,"{1,3}":!0},'Serve.Run(silence: true);\n\n// \u4e0d\u4f1a\u963b\u585e\u6267\u884c\u54e6\uff0c\u800c\u4e14\u4ece\u8fd9\u91cc\u5f00\u59cb\u53ef\u4ee5\u4f7f\u7528 Furion \u4efb\u4f55\u529f\u80fd\uff0c\u6bd4\u5982 App.Configuration....\nConsole.WriteLine("Hello, World!");\nConsole.ReadKey();\n')),(0,l.kt)("p",null,"\u8fd8\u6709\u66f4\u591a\u9759\u9ed8\u6a21\u5f0f\u3002"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8}",showLineNumbers:!0,"{2,5,8}":!0},"// RunOptions \u65b9\u5f0f\nServe.Run(RunOptions.DefaultSilence);\n\n// LegacyRunOptions \u65b9\u5f0f\nServe.Run(LegacyRunOptions.DefaultSilence);\n\n// GenericRunOptions \u65b9\u5f0f\nServe.Run(GenericRunOptions.DefaultSilence);\n")))),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"\u5f3a\u5927\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Xunit")," \u5355\u5143\u6d4b\u8bd5\u3001\u96c6\u6210\u6d4b\u8bd5")),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("admonition",{title:"\u5927\u9769\u547d",type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"\u5355\u5143\u6d4b\u8bd5\u548c\u96c6\u6210\u6d4b\u8bd5\u662f\u4fdd\u8bc1\u4e00\u4e2a\u7cfb\u7edf\u80fd\u591f\u6301\u7eed\u7ef4\u62a4\u548c\u7a33\u5b9a\u8fd0\u884c\u7684\u5fc5\u5907\u6280\u80fd\uff0c\u4f46\u662f\u76ee\u524d\u73b0\u6709\u7684\u5355\u5143\u6d4b\u8bd5\u7ec4\u4ef6\u65e0\u6cd5\u76f4\u63a5\u96c6\u6210 ",(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u7684\u529f\u80fd\uff0c\u6700\u5e38\u7528\u7684\u5c31\u662f\u5982\u4f55\u5728\u5355\u5143\u6d4b\u8bd5\u4e2d\u8bfb\u53d6\u914d\u7f6e\uff0c\u4ee5\u53ca",(0,l.kt)("strong",{parentName:"p"},"\u5982\u4f55\u8fdb\u884c\u4f9d\u8d56\u6ce8\u5165"),"\u3002"),(0,l.kt)("p",{parentName:"admonition"},"\u5728\u8fc7\u53bb\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u53ea\u80fd\u4e0d\u65ad\u7684\u53bb\u8c03\u6574\uff0c\u4ee5\u81f3\u4e8e\u9002\u914d\u7b2c\u4e09\u65b9\u5355\u5143\u6d4b\u8bd5\u5199\u6cd5\uff0c\u641e\u5f97\u4e0d\u4f26\u4e0d\u7c7b\uff01"),(0,l.kt)("p",{parentName:"admonition"},"\u6240\u4ee5\uff0c\u8fd9\u4e00\u6b21\u4e0d\u518d\u59a5\u534f\uff0c",(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u63a8\u51fa\u81ea\u5df1\u7684\u5355\u5143\u6d4b\u8bd5\u5de5\u5177\uff0c\u53ef\u4ee5\u8ba9\u73b0\u6709\u7684\u5355\u5143\u6d4b\u8bd5\u5982 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Xunit")," 100% \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u6240\u6709\u529f\u80fd\uff0c\u5168\u90e8\u4fdd\u8bc1\u4e00\u81f4\u7684\u5199\u6cd5\u3002"))),(0,l.kt)("p",null,"\u5355\u5143\u6d4b\u8bd5\u4e2d\u521d\u59cb\u5316 ",(0,l.kt)("inlineCode",{parentName:"p"},"Furion")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,13,18}",showLineNumbers:!0,"{6,13,18}":!0},'using Furion.Xunit;\nusing Xunit.Abstractions;\nusing Xunit.Sdk;\n\n// \u914d\u7f6e\u542f\u52a8\u7c7b\u7c7b\u578b\uff0c\u7b2c\u4e00\u4e2a\u53c2\u6570\u662f TestProgram \u7c7b\u5b8c\u6574\u9650\u5b9a\u540d\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662f\u5f53\u524d\u9879\u76ee\u7a0b\u5e8f\u96c6\u540d\u79f0\n[assembly: TestFramework("TestProject1.TestProgram", "TestProject1")]\n\nnamespace TestProject1;\n\n/// \n/// \u5355\u5143\u6d4b\u8bd5\u542f\u52a8\u7c7b\n/// \npublic class TestProgram : TestStartup\n{\n public TestProgram(IMessageSink messageSink) : base(messageSink)\n {\n // \u521d\u59cb\u5316 Furion\n Serve.Run(silence: true);\n }\n}\n')),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"\u6d4b\u8bd5\u7c7b\u652f\u6301\u5b8c\u6574\u4f9d\u8d56\u6ce8\u5165")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {9,15}",showLineNumbers:!0,"{9,15}":!0},"using TestProject1.Services;\nusing Xunit;\n\nnamespace TestProject1;\n\npublic class UnitTest1\n{\n private readonly ICalcService _calcService;\n public UnitTest1(ICalcService calcService)\n {\n _calcService = calcService;\n }\n\n [Fact]\n public void \u6d4b\u8bd5\u4e24\u4e2a\u6570\u7684\u548c()\n {\n Assert.Equal(3, _calcService.Plus(1, 2));\n }\n}\n")),(0,l.kt)("img",{src:(0,p.Z)("img/ut9.png")}),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("a",{parentName:"strong",href:"/docs/unittest"},"\u67e5\u770b\u65b0\u7248\u672c\u5355\u5143\u6d4b\u8bd5\u6587\u6863"))))),(0,l.kt)("ol",{start:3},(0,l.kt)("li",{parentName:"ol"},"\u5f00\u653e\u5e95\u5c42\u89c4\u8303\u5316\u6587\u6863\u5206\u7ec4\u63a5\u53e3\uff0c\u4f7f\u5f97\u96c6\u6210\u7b2c\u4e09\u65b9 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger UI")," \u66f4\u52a0\u5bb9\u6613\uff0c\u5982\u96c6\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"IGeekFan.AspNetCore.Knife4jUI")," \u62d3\u5c55\uff1a")),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("admonition",{title:"\u5b89\u88c5\u5305",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"\u53ea\u9700\u8981\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"YourPoject.Web.Core")," \u5c42\u5b89\u88c5 ",(0,l.kt)("inlineCode",{parentName:"p"},"IGeekFan.AspNetCore.Knife4jUI")," \u5373\u53ef\u3002")),(0,l.kt)("p",null,"3.1.1 ",(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("inlineCode",{parentName:"strong"},"Knife4jUI")," \u72ec\u7acb\u7248\u672c\u914d\u7f6e")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,12}",showLineNumbers:!0,"{1,3,12}":!0},'var routePrefix = "api"; // \u5b9a\u4e49 swagger \u8def\u7531\u5730\u5740\uff0c\u5982\u679c\u662f\u8ddf\u76ee\u5f55\uff0c\u8bbe\u7f6e string.Empty \u5373\u53ef\n\napp.UseKnife4UI(options =>\n{\n options.RoutePrefix = routePrefix; // \u914d\u7f6e Knife4UI \u8def\u7531\u5730\u5740\n foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups())\n {\n options.SwaggerEndpoint("/" + groupInfo.RouteTemplate, groupInfo.Title);\n }\n});\n\napp.UseInject(routePrefix); // \u914d\u7f6e Furion \u8def\u7531\u5730\u5740\n')),(0,l.kt)("p",null,"3.1.2 ",(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("inlineCode",{parentName:"strong"},"Knife4jUI")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},"Swagger")," \u5171\u5b58\u7248\u672c\u914d\u7f6e")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,10}",showLineNumbers:!0,"{1,3,10}":!0},'app.UseKnife4UI(options =>\n{\n options.RoutePrefix = "newapi"; // \u914d\u7f6e Knife4UI \u8def\u7531\u5730\u5740\uff0c\u73b0\u5728\u662f /newapi\n foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups())\n {\n options.SwaggerEndpoint("/" + groupInfo.RouteTemplate, groupInfo.Title);\n }\n});\n\napp.UseInject(); // Furion \u9ed8\u8ba4 api \u5730\u5740\u4e3a /api\n')),(0,l.kt)("img",{src:(0,p.Z)("img/sg20.png")}),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"\u5982\u9700\u5b9e\u73b0\u767b\u5f55\u4e4b\u540e\u81ea\u52a8\u5c06 ",(0,l.kt)("inlineCode",{parentName:"strong"},"token")," \u6dfb\u52a0\u5230\u5934\u90e8\u53ef\u5728\u767b\u5f55\u63a5\u53e3 ",(0,l.kt)("inlineCode",{parentName:"strong"},"AfterScript")," \u6267\u884c\u4ee5\u4e0b\u4ee3\u7801\uff1a")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-js"},'ke.global.setAllHeader(\n "Authorization",\n "Bearer " + ke.response.headers["access-token"]\n);\n')),(0,l.kt)("img",{src:(0,p.Z)("img/kni.jpg")}),(0,l.kt)("ol",{start:4},(0,l.kt)("li",{parentName:"ol"},"\u63d0\u4f9b\u5f3a\u5927\u7684\u65e5\u5fd7\u4e0a\u4e0b\u6587\u529f\u80fd")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,6,12}",showLineNumbers:!0,"{2,6,12}":!0},'// \u5199\u6cd5\u4e00\n_logger.ScopeContext(ctx => ctx.Set("Name", "Furion").Set("UserId", 10))\n .LogInformation("\u6211\u662f\u4e00\u4e2a\u65e5\u5fd7 {id}", 20);\n\n// \u5199\u6cd5\u4e8c\n_logger.ScopeContext(new Dictionary {\n { "Name", "Furion" },\n { "UserId", 10 }\n}).LogInformation("\u6211\u662f\u4e00\u4e2a\u65e5\u5fd7 {id}", 20);\n\n// \u5199\u6cd5\u4e09\n_logger.ScopeContext(new LogContext {\n // ....\n}).LogInformation("\u6211\u662f\u4e00\u4e2a\u65e5\u5fd7 {id}", 20)\n')))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v400\u91cd\u65b0\u8d77\u822a"},"v4.0.0\uff08\u91cd\u65b0\u8d77\u822a\uff09\ud83d\udc96"),(0,l.kt)("admonition",{title:"\u4e0d\u5fd8\u521d\u5fc3\uff0c\u611f\u6069\u9047\u89c1\uff0c\u611f\u6069\u4fe1\u4efb",type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"2020 \u5e74 09 \u6708 01 \u65e5\uff0c\u4e00\u4e2a\u53eb ",(0,l.kt)("inlineCode",{parentName:"p"},"Fur")," \u7684\u5f00\u6e90\u9879\u76ee\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"Gitee")," \u7684\u8941\u8913\u4e2d\u6084\u7136\u8bde\u751f\uff0c\u5979\u7684\u51fa\u751f\u4eff\u4f5b\u5e26\u7740\u67d0\u79cd\u4f7f\u547d\uff0c\u6ca1\u6709\u5305\u88b1\uff0c\u65e0\u9650\u53ef\u80fd\u3002"),(0,l.kt)("p",{parentName:"admonition"},"\u5979\u7f13\u7f13\u7684\u5f20\u5f00\u53cc\u773c\uff0c\u5e72\u51c0\u96ea\u4eae\u7684\u773c\u775b\u4f3c\u4e4e\u5bf9\u8fd9\u4e2a\u4e16\u754c\u5145\u6ee1\u4e86\u597d\u5947\uff0c\u4efb\u4f55\u4e8b\u7269\u5728\u5979\u773c\u524d\u6643\u8fc7\u90fd\u50cf\u662f\u76f4\u51fb\u7075\u9b42\u7684\u601d\u60f3\u78b0\u649e\uff0c\u8fd9\u4e9b\u5728\u5979\u770b\u6765\u90fd\u662f\u975e\u5e38\u5b9d\u8d35\u7684\u8d22\u5bcc\u3002\u5979\u8c8c\u4f3c\u6709\u7528\u4e0d\u5b8c\u7684\u7cbe\u529b\uff0c\u4e00\u8def\u6c72\u53d6\u77e5\u8bc6\uff0c\u5347\u7ea7\u6253\u602a\uff0c\u4e0d\u65ad\u5954\u8dd1\uff0c\u4e50\u6b64\u4e0d\u75b2\u3002"),(0,l.kt)("p",{parentName:"admonition"},"\u8bb0\u5f97 2020 \u5e74 11 \u6708 11 \u65e5\u7684\u5355\u8eab\u8282\uff0c\u5979\u8fce\u6765\u4e86\u201c\u4e00\u5c81\uff08v1.0.0\uff09\u201d\u751f\u65e5\uff0c\u81ea\u90a3\u4ee5\u540e\uff0cIT \u8fd9\u4e2a\u5927\u94f6\u5e55\u4e0a\u9891\u7e41\u51fa\u73b0\u5979\u7684\u8eab\u5f71\uff0c\u8d8a\u6765\u8d8a\u591a ",(0,l.kt)("inlineCode",{parentName:"p"},".NET5")," \u5f00\u53d1\u8005\u8f6c\u7c89\uff0c\u50cf\u662f\u544a\u8bc9\u8fd9\u4e2a\u4e16\u754c\uff0c\u5979\u5c31\u662f IT \u754c\u5927\u660e\u661f\u3002"),(0,l.kt)("p",{parentName:"admonition"},"\u6bcf\u4e00\u4e2a\u660e\u661f\u90fd\u6709\u4e00\u4e2a\u597d\u542c\u7684\u827a\u540d\uff0c\u5979\u5f53\u7136\u4e5f\u4e0d\u4f8b\u5916\uff0c2020 \u5e74 11 \u6708 20 \u65e5\uff0c\u7ecf\u7eaa\u4eba\u767e\u5c0f\u50e7\u4e3a\u5979\u8d77\u540d\u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"Furion"),"\u3002"),(0,l.kt)("p",{parentName:"admonition"},"2021 \u5e74 11 \u6708 09 \u65e5\u8d77\uff0c\u5979\u8fdb\u5165\u4e86\u6bcf\u4e2a\u5b69\u5b50\u90fd\u7ecf\u5386\u8fc7\u7684\u53db\u9006\u671f\uff0c\u5e74\u5c11\u8f7b\u72c2\u559c\u65b0\u538c\u65e7\uff0c\u629b\u5f03\u4e86\u66fe\u7ecf\u652f\u6301\u5979\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},".NET5")," \u7c89\u4e1d\u4eec\uff0c\u6295\u5165\u5230\u65b0\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},".NET6")," \u62e5\u8db8\u8005\u6000\u62b1\u4e2d\uff0c\u81ea\u6b64\u8fc7\u4e0a\u4e86\u5962\u9761\u5bcc\u8db3\u7684\u751f\u6d3b\u3002"),(0,l.kt)("p",{parentName:"admonition"},"\u4f46\u5979\u8fc7\u7684\u4e0d\u5f00\u5fc3\uff0c\u65f6\u5e38\u5728\u591c\u91cc\u60f3\u8d77 ",(0,l.kt)("inlineCode",{parentName:"p"},".NET5")," \u7684\u7c89\u4e1d\u4eec\uff0c\u5185\u5fc3\u975e\u5e38\u81ea\u8d23\uff0c\u4f46\u5728\u53cc\u91cd\u5de5\u4f5c\u538b\u529b\u4e0b\u5979\u6bc5\u7136\u9009\u62e9\u4e86\u5ffd\u89c6\u4ed6\u4eec\u7684\u8bc9\u6c42\uff0c\u4eff\u4f5b\u4ed6\u4eec\u5c31\u662f\u7d2f\u8d58\u3002"),(0,l.kt)("p",{parentName:"admonition"},"\u65f6\u95f4\u771f\u7684\u662f\u597d\u4e1c\u897f\uff0c\u66fe\u7ecf\u8ba4\u4e3a\u662f\u5bf9\u7684\uff0c\u7ecf\u8fc7\u5c81\u6708\u7684\u8e49\u8dce\u5386\u78e8\uff0c\u6e10\u6e10\u7684\u660e\u767d\uff1a\u4e0d\u5fd8\u521d\u5fc3\uff0c\u65b9\u80fd\u59cb\u7ec8\u3002"),(0,l.kt)("p",{parentName:"admonition"},"\u8fd9\u4e00\u6b21\uff0c\u4e0d\u843d\u4e0b\u4e00\u4eba\uff08",(0,l.kt)("inlineCode",{parentName:"p"},".NET5"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},".NET6"),"\uff0c...\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},".NET N"),"\uff09\uff0c\u643a\u624b\u5171\u8fdb\uff0c\u91cd\u65b0\u8d77\u822a\uff0c\u611f\u6069\u9047\u89c1\uff0c\u611f\u6069\u4fe1\u4efb\u3002")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"v4.0.0")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},".NET5"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"strong"},".NET6"),"\uff0c...\uff0c",(0,l.kt)("inlineCode",{parentName:"strong"},".NET N"),"\uff0c\u6240\u6709\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u9879\u76ee\u90fd\u80fd\u591f\u5347\u7ea7\u5230\u8be5\u7248\u672c\uff0c\u91cd\u65b0\u8d77\u822a\uff0c\u5b9e\u73b0\u5927\u7edf\u3002"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v392\u5df2\u53d1\u5e03\u5168\u65b0\u65e5\u5fd7\u7ec4\u4ef6"},"v3.9.2\uff08\u5df2\u53d1\u5e03\uff0c\u5168\u65b0\u65e5\u5fd7\u7ec4\u4ef6\uff09"),(0,l.kt)("admonition",{title:"\u5173\u4e8e\u65e5\u5fd7",type:"important"},(0,l.kt)("p",{parentName:"admonition"},"\u65e5\u5fd7\u6a21\u5757\u662f\u4efb\u4f55\u5e94\u7528\u7cfb\u7edf\u90fd\u5fc5\u5907\u7684\u529f\u80fd\uff0c\u53ef\u4ee5\u8bf4\u662f\u6700\u91cd\u8981\u7684\u6a21\u5757\uff01\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},".NET")," \u793e\u533a\u4e2d\u6709 ",(0,l.kt)("inlineCode",{parentName:"p"},"Log4NET"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"NLog"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"Serilog")," \u7b49\u65e5\u5fd7\u7ec4\u4ef6\uff0c\u5b83\u4eec\u65e0\u4e00\u4e0d\u662f\u4f18\u79c0\u7684\u5f00\u6e90\u9879\u76ee\u3002"),(0,l.kt)("p",{parentName:"admonition"},"\u4f46\u7531\u4e8e\u8fd9\u4e9b\u65e5\u5fd7\u7ec4\u4ef6\u5386\u53f2\u60a0\u4e45\uff0c\u5185\u90e8\u517c\u5bb9\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},".NET")," \u7248\u672c\u975e\u5e38\u591a\uff0c\u529f\u80fd\u968f\u7740\u65f6\u95f4\u63a8\u79fb\u53d8\u5f97\u6781\u5176\u5f3a\u5927\u590d\u6742\uff0c",(0,l.kt)("strong",{parentName:"p"},"\u5728\u5b9e\u9645\u9879\u76ee\u4f7f\u7528\u4e2d\uff0c\u53d1\u73b0\u6bcf\u4e00\u4e2a\u65e5\u5fd7\u7ec4\u4ef6\u914d\u7f6e\u603b\u662f\u4e0d\u90a3\u4e48\u53cb\u597d\uff0c\u7279\u522b\u662f\u5728\u4f7f\u7528\u4e0a\u4e0d\u591f\u7b80\u5355"),"\u3002"),(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u4f5c\u4e3a\u5168\u6808\u5f00\u53d1\u6846\u67b6\uff0c",(0,l.kt)("strong",{parentName:"p"},"\u5728\u8fc7\u53bb\u7248\u672c\u5e76\u6ca1\u6709\u63d0\u4f9b\u8db3\u4ee5\u6ee1\u8db3\u5f00\u53d1\u8005\u9700\u6c42\u7684\u65e5\u5fd7\u6a21\u5757"),"\uff0c\u8f6c\u800c\u63a8\u8350\u5927\u5bb6\u96c6\u6210\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u5982 ",(0,l.kt)("inlineCode",{parentName:"p"},"Serilog"),"\uff0c",(0,l.kt)("strong",{parentName:"p"},"\u5bfc\u81f4\u540e\u7eed\u65e0\u6cd5\u5b9e\u73b0\u81ea\u5b9a\u4e49\u529f\u80fd\u548c\u4e5f\u589e\u52a0\u4e86\u4e0d\u5c11\u7ef4\u62a4\u6210\u672c\u3002")),(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("strong",{parentName:"p"},"\u8fd9\u4e00\u6b21\uff0c",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u4e0d\u518d\u59a5\u534f\uff0c\u5f7b\u5e95\u91cd\u6784\u4e86\u65e5\u5fd7\u6a21\u5757\uff0c\u5b9e\u73b0\u65e5\u5fd7\u529f\u80fd/\u9700\u6c42\u5b8c\u5168\u81ea\u4e3b\u53ef\u63a7\uff0c\u63d0\u4f9b\u7ed9\u5f00\u53d1\u8005\u51e0\u4e4e\u6240\u6709\u65e5\u5fd7\u529f\u80fd\u7684\u9700\u6c42\uff01")),(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u7684\u4f7f\u7528\u8005\u4eec\uff0c",(0,l.kt)("strong",{parentName:"p"},"\u662f\u65f6\u5019\u201c\u66f4\u6362\u201d\u6389\u7b2c\u4e09\u65b9\u65e5\u5fd7\u7ec4\u4ef6\uff0c\u8ba9\u6211\u4eec\u4e00\u8d77\u8fed\u4ee3\u51fa\u66f4\u5f3a\u66f4\u597d\u7684\u65e5\u5fd7\u7ec4\u4ef6\u5427\uff01")," \ud83c\udf56")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u65e5\u5fd7\u6a21\u5757\uff0c\u5185\u7f6e\u5199\u5165\u63a7\u5236\u53f0\u3001\u6587\u4ef6\u3001\u6570\u636e\u5e93\u529f\u80fd\uff0c\u518d\u4e5f\u65e0\u9700\u5f15\u5165\u7b2c\u4e09\u65b9\u65e5\u5fd7\u4e86\uff01",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/tree/v4/framework/Furion/Logging"},"\u65e5\u5fd7\u6e90\u7801")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u5f3a\u5927\u7684\u8c03\u8bd5\u65e5\u5fd7 ",(0,l.kt)("inlineCode",{parentName:"strong"},"[LoggingMonitor]")," ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/commit/32dfc11fd6b47551a81c09e676eb7f5d018ef737"},"32dfc1"))))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," ",(0,l.kt)("strong",{parentName:"li"},"\u65e5\u5fd7\u6a21\u5757\uff0c\u5185\u7f6e\u5199\u5165\u63a7\u5236\u53f0\u3001\u6587\u4ef6\u3001\u6570\u636e\u5e93\u529f\u80fd\uff0c\u518d\u4e5f\u65e0\u9700\u5f15\u5165\u7b2c\u4e09\u65b9\u65e5\u5fd7\u4e86\uff01",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/tree/v4/framework/Furion/Logging"},"\u65e5\u5fd7\u6e90\u7801"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"TP.Wrapper")," \u89c4\u8303\u5316\u65e5\u5fd7\u6a21\u677f\u7b97\u6cd5\uff0c\u7531\u8fc7\u53bb\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"[\u5c5e\u6027]")," \u6539\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},"##\u5c5e\u6027##"),"\uff0c\u89e3\u51b3 ",(0,l.kt)("inlineCode",{parentName:"strong"},"JSON")," \u5185\u5bb9\u51b2\u7a81\u95ee\u9898 ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/commit/394ecec28629aee9945480155d502418d0b7a8f8"},"394ecec"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("strong",{parentName:"del"},"\u672a\u6765 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion.Extras.Logging.Serilog")," \u62d3\u5c55\u5c06\u4e0d\u518d\u7ee7\u7eed\u7ef4\u62a4\uff0c\u56e0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u6709\u5f3a\u5927\u7684\u65e5\u5fd7\u7ec4\u4ef6\u4e86\uff01"))))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4fee\u590d\u8131\u654f\u6a21\u5757\u6a21\u578b\u7ed1\u5b9a\u4e2a\u522b\u60c5\u51b5\u4e0b\u7a7a\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5IM5C"},"#I5IM5C")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u65e5\u5fd7\u6587\u6863\u3001\u9759\u6001\u7c7b\u6587\u6863\u3001\u6570\u636e\u6821\u9a8c\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u672c\u671f\u4eae\u70b9")))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u6781\u6613\u4f7f\u7528\u4e14\u5f3a\u5927\u7684\u65e5\u5fd7\u6a21\u5757"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u5199\u5165\u6587\u4ef6\nservices.AddFileLogging("logs/application.log");\n\n// \u5199\u5165\u6570\u636e\u5e93\nservices.AddDatabaseLogging();\n')),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("a",{parentName:"strong",href:"/docs/logging"},"\u67e5\u770b\u66f4\u591a\u65e5\u5fd7\u6587\u6863"))))),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u5f3a\u5927\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"[LoggingMonitor]")," \u8c03\u8bd5\u65e5\u5fd7"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,7}",showLineNumbers:!0,"{1,7}":!0},"using Furion.Logging;\n\nnamespace Furion.Application;\n\npublic class TestLoggerServices : IDynamicApiController\n{\n [LoggingMonitor]\n public PersonDto GetPerson(int id)\n {\n return new PersonDto\n {\n Id = id\n };\n }\n}\n")),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"\u652f\u6301\u63a7\u5236\u5668\u3001\u64cd\u4f5c\u6216\u5168\u5c40\u6ce8\u518c\u62e6\u622a"),"\u3002"),(0,l.kt)("p",null,"\u8f93\u51fa\u65e5\u5fd7\u4e3a\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Logging Monitor \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 Furion.Application.TestLoggerServices.GetPerson (Furion.Application)\n\u2523\n\u2523 \u63a7\u5236\u5668\u540d\u79f0\uff1a TestLoggerServices\n\u2523 \u64cd\u4f5c\u540d\u79f0\uff1a GetPerson\n\u2523 \u8def\u7531\u4fe1\u606f\uff1a [area]: ; [controller]: test-logger; [action]: person\n\u2523 \u8bf7\u6c42\u5730\u5740\uff1a https://localhost:44316/api/test-logger/person/11\n\u2523 \u6765\u6e90\u5730\u5740\uff1a https://localhost:44316/api/index.html\n\u2523 \u6d4f\u89c8\u5668\u6807\u8bc6\uff1a Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62\n\u2523 \u5ba2\u6237\u7aef IP \u5730\u5740\uff1a 0.0.0.1\n\u2523 \u670d\u52a1\u7aef IP \u5730\u5740\uff1a 0.0.0.1\n\u2523 \u670d\u52a1\u7aef\u8fd0\u884c\u73af\u5883\uff1a Development\n\u2523 \u6267\u884c\u8017\u65f6\uff1a 31ms\n\u2523 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 \u6388\u6743\u4fe1\u606f \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 JWT Token\uff1a Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY1ODcxNjc5NywibmJmIjoxNjU4NzE2Nzk3LCJleHAiOjE2NTg3MTc5OTcsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.VYZkwwqCwlUy3aJjuL-og62I0rkxNQ96kSjEm3VgXtg\n\u2523\n\u2523 UserId (integer)\uff1a 1\n\u2523 Account (string)\uff1a admin\n\u2523 iat (integer)\uff1a 1658716797\n\u2523 nbf (integer)\uff1a 1658716797\n\u2523 exp (integer)\uff1a 1658717997\n\u2523 iss (string)\uff1a dotnetchina\n\u2523 aud (string)\uff1a powerby Furion\n\u2523 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 \u53c2\u6570\u5217\u8868 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 Content-Type\uff1a\n\u2523\n\u2523 id (Int32)\uff1a 11\n\u2523 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 \u8fd4\u56de\u4fe1\u606f \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 \u7c7b\u578b\uff1a Furion.Application.Persons.PersonDto\n\u2523 \u8fd4\u56de\u503c\uff1a {"Id":11,"Name":null,"Age":0,"Address":null,"PhoneNumber":null,"QQ":null,"CreatedTime":"0001-01-01T00:00:00+00:00","Childrens":null,"Posts":null}\n\u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Logging Monitor \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n')))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v389\u5df2\u53d1\u5e03"},"v3.8.9\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u89c4\u8303\u5316\u7ed3\u679c ",(0,l.kt)("inlineCode",{parentName:"li"},"ExceptionMetadata")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"ValidationMetadata")," \u90fd\u53ef\u4ee5\u83b7\u53d6 ",(0,l.kt)("inlineCode",{parentName:"li"},"ErrorCode")," \u5c5e\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5GJ6D"},"#I5GJ6D")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ValidationMetadata")," \u7c7b ",(0,l.kt)("inlineCode",{parentName:"li"},"StatusCode")," \u5c5e\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5HB5L"},"#I5HB5L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u5bf9 ",(0,l.kt)("inlineCode",{parentName:"li"},"Url")," \u662f\u5426\u7f16\u7801\u8bbe\u7f6e\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"[Get(WithEncodeUrl = false)]")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"WithEncodeUrl(false)")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5GOBC"},"#I5GOBC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u66f4\u5f3a\u5927\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"JWTEncryption.SecurityReadJwtToken('token')")," \u8bfb\u53d6\u89e3\u6790 ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u9759\u6001\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/574eeb601294378e68c3d57ceaf6cb17f36636e3"},"574eeb6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ValiationTypes.Html")," \u9a8c\u8bc1 ",(0,l.kt)("inlineCode",{parentName:"li"},"Html")," \u6807\u7b7e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5HBKC"},"#I5HBKC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("a",{parentName:"strong",href:"https://github.com/efcore/EFCore.NamingConventions"},"EFCore.NamingConventions")," \u652f\u6301\uff0c\u53ef\u81ea\u5b9a\u4e49\u751f\u6210\u8868\u540d\uff0c\u5b57\u6bb5\u540d\u98ce\u683c\uff0c\u6bd4\u5982\u5c0f\u9a7c\u5cf0\uff0c\u86c7\u5f62\u547d\u540d\u7b49 ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I5HBEI"},"#I5HBEI"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"INamedServiceProvider")," \u547d\u540d\u670d\u52a1\u63d0\u4f9b\u5668\uff0c\u53ef\u89e3\u6790\u63a5\u53e3\u591a\u5b9e\u73b0 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5HF98"},"#I5HF98")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8131\u654f\u5904\u7406\u6a21\u5757\u65b9\u6cd5\u53c2\u6570\u5355\u4e2a\u503c\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/a22ec3cc3565582eea67052936e788ede8c633cb"},"a22ec3c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8131\u654f\u8bcd\u5e93\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"|")," \u5206\u5272\u8bcd\u8bed ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3106b1d78b27b24f4141f052bf804a201a268ff7"},"3106b1d")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," \u6240\u6709 ",(0,l.kt)("inlineCode",{parentName:"li"},".NET")," \u4f9d\u8d56\u5305\u81f3 ",(0,l.kt)("inlineCode",{parentName:"li"},"6.0.7")," \u7248\u672c"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serilog.AspNetCore")," \u5305\u81f3 ",(0,l.kt)("inlineCode",{parentName:"li"},"6.0.0")," \u7248\u672c"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u5237\u65b0\u903b\u8f91 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5GXML"},"#I5GXML")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/574eeb601294378e68c3d57ceaf6cb17f36636e3"},"574eeb6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"ExceptionMetadata")," \u547d\u540d\u7a7a\u95f4\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion.FriendlyException"))," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3105d168db10bfbe6e83fff2e435ba5d9ef62ed5"},"3105d16")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Retry.Invoke(Func...)")," \u4e3a\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"Retry.InvokeAsync(Func...)")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3b7899942bb37423c2c4ed313069fe361aabf682"},"3b78999")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u8131\u654f\u5904\u7406\u6a21\u5757\uff0c\u5927\u5927\u63d0\u9ad8\u6027\u80fd\u548c\u51c6\u786e\u7387\uff0c\u540c\u65f6\u652f\u6301\u65b9\u6cd5\u53c2\u6570\u5355\u4e2a\u503c\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/a22ec3cc3565582eea67052936e788ede8c633cb"},"a22ec3c")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Rider")," \u5f00\u53d1\u5de5\u5177\u5bf9\u540c\u540d\u811a\u624b\u67b6 (",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugar"),") \u53ea\u663e\u793a\u4e00\u4e2a\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/518"},"!518")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"UnitOfWork")," \u5de5\u4f5c\u5355\u5143\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," \u4e2d\u5931\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5H0T3"},"#I5H0T3")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT")," \u4e2d ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u5982\u679c\u5b58\u5728\u6570\u7ec4\u7c7b\u578b\u7684\u503c\u65f6\uff0c\u5237\u65b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u540e\u4e22\u5931\u4e86\u5386\u53f2\u503c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5GXML"},"#I5GXML")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"WithEncodeUrl")," \u65e0\u6cd5\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpMethod]")," \u8bbe\u7f6e\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/574eeb601294378e68c3d57ceaf6cb17f36636e3"},"574eeb6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serve.Run()")," \u6a21\u5f0f\u4e0b\u6dfb\u52a0\u81ea\u5b9a\u4e49\u914d\u7f6e\u5bfc\u81f4 ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," \u65e0\u6cd5\u83b7\u53d6\u81ea\u5b9a\u4e49\u914d\u7f6e\u6587\u4ef6\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5GZ0F"},"#I5GZ0F")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Oops.Bah")," \u8fdb\u5165\u5168\u5c40\u5f02\u5e38\u62e6\u622a\u5668\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5H47S"},"#I5H47S")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AddDbPool/AddDb")," \u6269\u5c55\u672a\u6839\u636e\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"Key")," \u8def\u5f84\u8bfb\u53d6\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5H6S4"},"#I5H6S4")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/520"},"!520")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ValiationTypes.Url")," \u6b63\u5219\u8868\u8fbe\u5f0f\u8986\u76d6\u4e0d\u5168\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5HBKC"},"#I5HBKC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"v3.5.x")," \u7248\u672c\u5bfc\u81f4\u96c6\u6210 ",(0,l.kt)("a",{parentName:"strong",href:"https://github.com/efcore/EFCore.NamingConventions"},"EFCore.NamingConventions")," \u5931\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I5HBEI"},"#I5HBEI"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u957f\u8def\u7531\u4e0d\u652f\u6301\u95ee\u9898\u4ee5\u53ca ",(0,l.kt)("inlineCode",{parentName:"li"},"[Required]")," \u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"AllowEmptyStrings")," \u65e0\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/c0143300329b5a96a2fbd4d92de109f520674d33"},"c014330")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u4e0a\u4f20\u6587\u4ef6\u65f6\u8bf7\u6c42\u62a5\u6587 ",(0,l.kt)("inlineCode",{parentName:"li"},"boundary")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Content-Disposition")," \u8bbe\u7f6e\u4e0d\u6b63\u786e\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5HEF0"},"#I5HEF0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8131\u654f\u6a21\u5757\u66ff\u6362\u654f\u611f\u8bcd\u6c47\u51fa\u73b0\u591a\u66ff\u6362\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/a22ec3cc3565582eea67052936e788ede8c633cb"},"a22ec3c")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u591a\u8bed\u8a00\u9ed8\u8ba4\u5904\u7406\u903b\u8f91\uff0c",(0,l.kt)("strong",{parentName:"li"},"\u5141\u8bb8\u4e0d\u914d\u7f6e\u4efb\u4f55\u8bed\u8a00"),"\uff0c\u8fc7\u53bb\u7248\u672c\u4f1a\u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5GRD9"},"#I5GRD9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/5077c5dab9ee94733817f55ff8224b853d0001a3"},"5077c5d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u89c4\u8303\u5316\u6587\u6863 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u6027\u80fd"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u8c03\u6574 ",(0,l.kt)("inlineCode",{parentName:"li"},"MongoDB")," \u4ed3\u50a8 ",(0,l.kt)("inlineCode",{parentName:"li"},"TDocument")," \u6cdb\u578b\u7ea6\u675f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3f49055b6b80ef7861f58b0c6feabf5c87a32010"},"3f49055")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u8fdc\u7a0b\u8bf7\u6c42\u6587\u6863\uff0c\u65e5\u5fd7\u8bb0\u5f55\u6587\u6863\u3001\u591a\u6570\u636e\u5e93\u6587\u6863\u3001PM2 \u90e8\u7f72\u6587\u6863\u3001Visual Studio \u9ad8\u6548\u7387\u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v3711\u5df2\u53d1\u5e03"},"v3.7.11\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Minimal API")," \u5e94\u7528\u652f\u6301\uff1a",(0,l.kt)("inlineCode",{parentName:"strong"},".AddInjectMini()")," ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I4KOQ5"},"#I4KOQ5"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8de8\u57df ",(0,l.kt)("inlineCode",{parentName:"li"},"WithExposedHeaders")," \u9ed8\u8ba4\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"access-token")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"x-access-token")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/42ebdfd33a01353a0b3a801528de052990d2e4c9"},"42ebdfd")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u811a\u624b\u67b6\u9ed8\u8ba4\u542f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"app.UseHttpLogging()")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HTTP")," \u65e5\u5fd7 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/42ebdfd33a01353a0b3a801528de052990d2e4c9"},"42ebdfd")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},"ASP.NET Core")," \u5b8c\u6574 ",(0,l.kt)("inlineCode",{parentName:"strong"},"json")," \u914d\u7f6e\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"JSON Schema")," \u67b6\u6784 ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"},"JSON Schema"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u4ee3\u7406\u652f\u6301\u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/1d7fb5b5330c5a30098056818a93a0879034fecd"},"1d7fb5b")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u4ee3\u7406\u652f\u6301\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"ValueTuple")," \u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/876a2f5f7e2d07fa3bbc3f5b99c0653893e0ada8"},"876a2f5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7ec4\u4ef6\u5316\u8bbe\u8ba1\u6a21\u5757\uff0c\u652f\u6301\u6bd4 ",(0,l.kt)("inlineCode",{parentName:"li"},"AppStartup")," \u66f4\u7075\u6d3b\u4fbf\u6377\u7684\u8bbe\u8ba1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/tree/v4/framework/Furion/Components"},"#components")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u72ec\u7acb\u5de5\u4f5c\u5355\u5143\u6a21\u5757\uff0c\u652f\u6301\u4efb\u4f55\u7b2c\u4e09\u65b9 ",(0,l.kt)("inlineCode",{parentName:"li"},"ORM")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/a02413d6887d258ad3a1ba972bb6a08d29291d0c"},"a02413d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8de8\u57df ",(0,l.kt)("inlineCode",{parentName:"li"},"FixedClientToken")," \u914d\u7f6e\u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/bd016386681631a5539bcf215c068c2069bba15f"},"bd01638")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"throw Oops.Bah")," \u53ef\u4ee5\u624b\u52a8\u89e6\u53d1\u89c4\u8303\u5316\u9a8c\u8bc1\u5931\u8d25\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/83f0036a4ce10c6b1cfc4a258dc61e197af38879"},"83f0036")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"FriendlyExceptionSettings")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"ThrowBah")," \u914d\u7f6e\uff0c\u53ef\u6807\u8bb0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Oops.Oh")," \u4e0d\u8fdb\u5165\u5f02\u5e38\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/76ffa7f18d3683ad36e37e5fc90cf54a4b04e520"},"76ffa7f")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Minimal API")," \u5e94\u7528\u652f\u6301\uff1a",(0,l.kt)("inlineCode",{parentName:"strong"},".AddInjectMini()")," ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I4KOQ5"},"#I4KOQ5"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},"ASP.NET Core")," \u5b8c\u6574 ",(0,l.kt)("inlineCode",{parentName:"strong"},"json")," \u914d\u7f6e\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"JSON Schema")," \u67b6\u6784 ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"},"JSON Schema"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7ec4\u4ef6\u5316\u8bbe\u8ba1\u6a21\u5757\uff0c\u652f\u6301\u6bd4 ",(0,l.kt)("inlineCode",{parentName:"li"},"AppStartup")," \u66f4\u7075\u6d3b\u4fbf\u6377\u7684\u8bbe\u8ba1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/tree/v4/framework/Furion/Components"},"#components")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u72ec\u7acb\u5de5\u4f5c\u5355\u5143\u5355\u5143\u6a21\u5757\uff0c\u652f\u6301\u4efb\u4f55\u7b2c\u4e09\u65b9 ",(0,l.kt)("inlineCode",{parentName:"li"},"ORM")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/a02413d6887d258ad3a1ba972bb6a08d29291d0c"},"a02413d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," ",(0,l.kt)("inlineCode",{parentName:"li"},"DataValidationFilter")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"FriendlyExceptionFilter"),"\uff0c\u89e3\u51b3\u4e0d\u652f\u6301\u624b\u52a8\u629b\u51fa\u4e1a\u52a1\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/83f0036a4ce10c6b1cfc4a258dc61e197af38879"},"83f0036")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},".AddDb<>")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},".AddDbPool<>")," \u81ea\u5b9a\u4e49\u59d4\u6258\u53c2\u6570\u7b7e\u540d\uff0c\u7531 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Action")," \u6539\u4e3a\uff1a",(0,l.kt)("inlineCode",{parentName:"strong"},"Action")))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},"// \u7531\uff1a\noptions.AddDbPool(DbProvider.MySql, opt => {\n});\n// \u6539\u4e3a\noptions.AddDbPool(DbProvider.MySql, (services, opt)=> {\n})\n")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea ",(0,l.kt)("inlineCode",{parentName:"li"},"v3.6.3")," \u7248\u672c\u4f9d\u8d56\uff0c\u6267\u884c\u539f\u751f ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u6dfb\u52a0\u4e86\u53c2\u6570\u6821\u9a8c\u5bfc\u81f4\u5b58\u50a8\u8fc7\u7a0b\u6267\u884c\u9519\u8bef\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5ERMQ"},"#I5ERMQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"tools/cli.ps1")," \u811a\u672c\u5de5\u5177\u51fa\u73b0\u6570\u636e\u5e93\u94fe\u63a5\u88ab\u5360\u7528\u95ee\u9898"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JWTSettings")," \u7b97\u6cd5\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON Schema")," \u9519\u8bef\u95ee\u9898\uff0c\u611f\u8c22 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/gitwentao"},"@gitwentao")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5G27B"},"#I5G27B")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/516"},"!516")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u57fa\u4e8e\u7b56\u7565\u6388\u6743\u5728\u4e0d\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"Policy")," \u7684\u60c5\u51b5\u4e0b\u51fa\u73b0\u7a7a\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5EVF2"},"#I5EVF2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u542f\u7528\u6570\u636e\u5e93\u5b9e\u4f53\u8ddf\u8e2a\u65f6\u5bfc\u81f4\u65b0\u589e\u5b9e\u4f53\u591a\u6b21\u67e5\u8be2\u6570\u636e\u5e93\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4J2LZ"},"#I4J2LZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4e0d\u542f\u7528\u89c4\u8303\u5316\u7ed3\u679c\u5bfc\u81f4\u9a8c\u8bc1\u5931\u6548\uff0c\u5f02\u5e38\u5931\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/cdb3f570ab72cff0a5327a717f85c48e153211be"},"cdb3f57")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u9a8c\u8bc1\u5f02\u5e38\u548c\u53cb\u597d\u5f02\u5e38\u51b2\u7a81\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/83f0036a4ce10c6b1cfc4a258dc61e197af38879"},"83f0036")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"CentOS 7.9")," \u7cfb\u7edf\u90e8\u7f72\u65e0\u6cd5\u6307\u5b9a\u547d\u4ee4 ",(0,l.kt)("inlineCode",{parentName:"li"},"--urls")," \u53c2\u6570\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/8cc8eeff6b5b25de42367884b7c91d419557d054"},"8cc8ee")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u811a\u624b\u67b6\u6240\u6709 ",(0,l.kt)("inlineCode",{parentName:"li"},".json")," \u6587\u4ef6\uff0c\u9ed8\u8ba4\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON Schema")," \u652f\u6301"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7ec4\u4ef6\u5316\u542f\u52a8\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Vue/React/Angular")," \u8bf7\u6c42\u4ee3\u7406\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON Schema")," \u6587\u6863\uff0c\u652f\u6301\u914d\u7f6e\u667a\u80fd\u63d0\u793a\u548c\u9a8c\u8bc1"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u8de8\u57df\u6587\u6863\u3001\u89c4\u8303\u5316\u6587\u6863\u3001\u914d\u7f6e\u6587\u6863\u3001\u65e5\u5fd7\u6587\u6863\u3001IIS \u90e8\u7f72\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u672c\u671f\u4eae\u70b9")))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"strong"},"JSON Schema")," \u652f\u6301\uff0c\u6240\u6709 ",(0,l.kt)("inlineCode",{parentName:"strong"},".json")," \u6587\u4ef6\u652f\u6301\u667a\u80fd\u63d0\u793a\u548c\u9a8c\u8bc1"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2}",showLineNumbers:!0,"{2}":!0},'{\n "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",\n\n "Logging": {\n "LogLevel": {\n "Default": "Information",\n "Microsoft": "Warning",\n "Microsoft.Hosting.Lifetime": "Information",\n "Microsoft.EntityFrameworkCore": "Information"\n }\n },\n "AllowedHosts": "*"\n}\n')),(0,l.kt)("img",{src:(0,p.Z)("img/js1.png")}),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("a",{parentName:"strong",href:"./jsonschema"},"\u67e5\u770b\u66f4\u591a ",(0,l.kt)("inlineCode",{parentName:"a"},"JSON Schema")," \u6587\u6863"))))),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u6839\u636e ",(0,l.kt)("inlineCode",{parentName:"strong"},"Swagger")," \u751f\u6210 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Vue/React/Angular")," \u524d\u7aef\u8bf7\u6c42\u4ee3\u7801"))),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("a",{parentName:"strong",href:"./clientapi"},"\u67e5\u770b\u6587\u6863"))),(0,l.kt)("ol",{start:3},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Sql")," \u4ee3\u7406\u652f\u6301\u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7-9}",showLineNumbers:!0,"{7-9}":!0},'public interface ISql : ISqlDispatchProxy\n{\n // \u96c6\u5408\u7c7b\u578b\n [SqlExecute("select * from person")]\n List GetPersons();\n\n // \u81ea v3.7.3+ \u7248\u672c\u652f\u6301\u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570\n [SqlExecute("select * from person where id=@id")]\n Person GetPerson(int id);\n}\n')))),(0,l.kt)("ol",{start:4},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Sql")," \u4ee3\u7406\u652f\u6301\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"strong"},"ValueTuple")," \u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3-6}",showLineNumbers:!0,"{3-6}":!0},'public interface ISql : ISqlDispatchProxy\n{\n [SqlExecute(@"\n select * from person where id =@id;\n select * from person")]\n (Person, List) GetData(int id); // \u6ce8\u610f\u8fd4\u56de\u503c\u662f `(Person, List)` \u7ec4\u5408\n}\n')))),(0,l.kt)("ol",{start:5},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Minimal API")," \u5e94\u7528"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("a",{parentName:"strong",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-6.0"},"\u4e86\u89e3 ",(0,l.kt)("inlineCode",{parentName:"a"},"Minimal API")," \u5e94\u7528"))),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3-4,10,12-15}",showLineNumbers:!0,"{1,3-4,10,12-15}":!0},'var builder = WebApplication.CreateBuilder(args).Inject();\n\n// \u6ce8\u518c Minimal \u670d\u52a1\nbuilder.Services.AddInjectMini();\n\nvar app = builder.Build();\n\napp.UseHttpsRedirection();\n\napp.UseInject(string.Empty);\n\napp.MapGet("/hello", () =>\n{\n return "Hello, Furion";\n});\n\napp.Run();\n')))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v369\u5df2\u53d1\u5e03\u5168\u65b0\u5165\u53e3\u7ec4\u4ef6"},"v3.6.9\uff08\u5df2\u53d1\u5e03\uff0c\u5168\u65b0\u5165\u53e3\u7ec4\u4ef6\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serve.Run()")," \u6781\u7b80\u4e3b\u673a\u6a21\u5f0f\uff0c\u771f\u6b63\u5b9e\u73b0\u6781\u901f\u5165\u95e8\u3002",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/95cac5b391b70d73bfc94147ee40eef529b2eec6"},"95cac5b")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"TP.Wrapper(...)")," \u62d3\u5c55\u65b9\u6cd5\uff0c\u4e3b\u8981\u7528\u6765\u751f\u6210\u89c4\u8303\u5316\u7684\u65e5\u5fd7\u6a21\u677f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/427999aba4847522ea91c42df6164e5fe69c5bc0"},"427999a")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u9879\u76ee\u7c7b\u578b\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},'')," \u7684\u63a7\u5236\u53f0\u9879\u76ee ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/fb08a6548d49921aa143d01389a2592b92e94e31"},"fb08a65")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"BadPageResult")," \u9519\u8bef\u9875\u9762\u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/494"},"!494")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[SchemaId]")," \u7279\u6027\uff0c\u89e3\u51b3\u4e0d\u540c\u7a0b\u5e8f\u96c6\u76f8\u540c\u7684\u7c7b\u540d\u751f\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"SchemaId")," \u51b2\u7a81\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5D3CU"},"#I5D3CU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"options.ApproveAllCerts()")," \u5ffd\u7565\u6240\u6709\u5ba2\u6237\u7aef\u8bc1\u4e66\u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/eb7d18ac183894d604cec1d4c8527466ef9c648a"},"eb7d18a")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5224\u65ad\u662f\u5426\u662f\u5355\u6587\u4ef6\u73af\u5883\u90e8\u7f72\u9759\u6001\u5c5e\u6027 ",(0,l.kt)("inlineCode",{parentName:"li"},"App.SingleFileEnvironment")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/de556f0aaf87c41fe01cca2655f086890b2638a0"},"de556f0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"WebApplicationBuilder.UseSerilogDefault()")," \u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/e02524c8a15fd660b6359285ef07a697878e6678"},"e02524c")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u9879\u76ee\u7c7b\u578b\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},'')," \u7684\u63a7\u5236\u53f0\u9879\u76ee ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/fb08a6548d49921aa143d01389a2592b92e94e31"},"fb08a65")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serve.Run()")," \u6781\u7b80\u4e3b\u673a\u6a21\u5f0f\uff0c\u771f\u6b63\u5b9e\u73b0\u6781\u901f\u5165\u95e8\u3002",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/95cac5b391b70d73bfc94147ee40eef529b2eec6"},"95cac5b")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u672a\u542f\u7528\u89c4\u8303\u5316\u7ed3\u679c\u65f6\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"MVC")," \u9a8c\u8bc1\u5931\u8d25\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"BadPageResult()")," \u9875\u9762\u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/494"},"!494")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4fee\u590d\u9ed8\u8ba4\u6ce8\u518c\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"services.AddResponseCaching();")," \u670d\u52a1\u5bfc\u81f4 ",(0,l.kt)("inlineCode",{parentName:"li"},".axd")," \u5185\u5d4c\u8d44\u6e90\u8bf7\u6c42\u9519\u8bef\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/495"},"!495")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Oracle")," \u6570\u636e\u5e93\u6267\u884c ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u5fc5\u987b\u8981\u6c42\u547d\u4ee4\u53c2\u6570\u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u8bed\u8a00\u53c2\u6570\u6570\u91cf\u4e00\u81f4 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5D057"},"#I5D057")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IHostService")," \u7c7b\u578b\u4e0d\u80fd\u81ea\u52a8\u6ce8\u518c\u95ee\u9898\uff0c\u4e4b\u524d\u53ea\u626b\u63cf\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"BackgroundService")," \u6d3e\u751f\u7c7b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/968344aa07348f4c06f914abf7b6f46174633d81"},"968344")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u56fd\u4ea7\u82af\u7247\u4e3b\u673a\u4e0d\u80fd\u8bc6\u522b ",(0,l.kt)("inlineCode",{parentName:"li"},"dotnet run --urls")," \u53c2\u6570\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/6d43983781e0c41228c4917a242141d011088bdb"},"6d4398")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u4e0a\u4f20\u6587\u4ef6\u4e0d\u652f\u6301\u7279\u5b9a\u6587\u4ef6\u540e\u7f00\u95ee\u9898\uff0c\u5982 ",(0,l.kt)("inlineCode",{parentName:"li"},".pem")," \u6587\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/ba42198c1cd58612f2b383349c37068aac78cdd7"},"ba42198")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4e00\u4e9b\u7a0b\u5e8f\u96c6\u5df2\u7834\u574f\u6216\u7a0b\u5e8f\u96c6\u4e0d\u5b8c\u6574\u5bfc\u81f4\u4e3b\u673a\u65e0\u6cd5\u542f\u52a8\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/d2dc3e4d09e726699c38ebb8cb7b83de0e97f46f"},"d2dc3e4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u4f20\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"headers")," \u65f6\u7c7b\u578b\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"Dictionary")," \u5bfc\u81f4\u8f6c\u6362\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5DHL9"},"#I5DHL9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serilog")," \u5355\u6587\u4ef6\u53d1\u5e03\u4e0d\u751f\u6210\u65e5\u5fd7\u6587\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5DQ2B"},"I5DQ2B")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u8fdc\u7a0b\u8bf7\u6c42\u9ed8\u8ba4\u5ba2\u6237\u7aef\u4e0d\u68c0\u67e5 ",(0,l.kt)("inlineCode",{parentName:"li"},"SSL")," \u8bc1\u4e66 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/eb7d18ac183894d604cec1d4c8527466ef9c648a"},"eb7d18a")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u5f00\u653e\u9a8c\u8bc1\u670d\u52a1\u9009\u9879 ",(0,l.kt)("inlineCode",{parentName:"li"},"SuppressModelStateInvalidFilter")," \u5c5e\u6027\u4e3a\u53ef\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/495"},"!494")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Serve.Run()")," \u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContext")," \u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"GlobalUsings")," \u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"TP")," \u5168\u5c40\u9759\u6001\u7c7b\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4e2d\u95f4\u4ef6\u6587\u6863\u3001\u7b5b\u9009\u5668\u6587\u6863\u3001\u5ba1\u8ba1\u65e5\u5fd7\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u8de8\u57df\u6587\u6863\u3001\u8fdc\u7a0b\u8bf7\u6c42\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7cbe\u5f69\u8d21\u732e")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/494"},"!494")," \u4f18\u79c0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Pull Request")," \u8fa9\u8bba\u5178\u8303"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u672c\u671f\u4eae\u70b9")))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u6781\u901f\u5165\u95e8"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers title="Program.cs" {3,6}',showLineNumbers:!0,title:'"Program.cs"',"{3,6}":!0},'Serve.Run();\n\n[DynamicApiController]\npublic class HelloService\n{\n public string Say()\n {\n return "Hello, Furion";\n }\n}\n')),(0,l.kt)("p",null,"\u542f\u52a8\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\uff0c\u60ca\u5446\u4e86\u5417\uff01"),(0,l.kt)("img",{src:(0,p.Z)("img/07.png")}))),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u5185\u7f6e\u9519\u8bef\u9875"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers{1,7}","showLineNumbers{1,7}":!0},"using Furion.FriendlyException;\n\npublic IActionResult Add(Person person)\n{\n if(!ModelState.IsValid)\n {\n return new BadPageResult();\n }\n}\n")),(0,l.kt)("img",{src:(0,p.Z)("img/er1.png")}))),(0,l.kt)("ol",{start:3},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Swagger")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Markdown")))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4-62}",showLineNumbers:!0,"{4-62}":!0},'/// \n/// \u6d4b\u8bd5 Markdown\n/// \n/// \n/// # \u6d4b\u8bd5 `Markdown` \u6ce8\u91ca\n///\n/// ![](https://localhost:44316/images/logo.png)\n///\n/// ```cs\n/// Serve.Run();\n///\n/// [DynamicApiController\n/// public class HelloService\n/// {\n/// public string Say()\n/// {\n/// return nameof(Furion);\n/// }\n/// }\n/// ```\n///\n/// \u529f\u80fd\u8fd8\u4e0d\u9519\uff01\uff01\uff01\n///\n/// | \u5546\u54c1 | \u4ef7\u683c | # \u5176\u4ed6 |\n/// |--------------|-----------|------------|\n/// | Juicy Apples | 1.99 | *7* |\n/// | Bananas | **1.89** | 5234 |\n/// | Bananas | **1.89** | 5234 |\n/// | Bananas | **1.89** | 5234 |\n///\n/// -----\n///\n/// # Furion \u63a2\u7d22\u7248\n///\n/// > \u5728\u8fc7\u53bb\u4e00\u5e74\uff0c\u5b9e\u73b0 `Furion` \u4ece\u65e0\u5230\u6709\uff0c\u7f16\u5199\u6587\u6863\u5df2\u903e\u767e\u4e07\u5b57\uff0c\u8fc7\u7a0b\u5fc3\u9178\u5f00\u6e90\u4eba\u81ea\u77e5\u3002\n/// >\n/// > \u8fd9\u4e00\u8def\u65e5\u591c\u517c\u7a0b\uff0c\u5632\u8bbd\u6279\u8bc4\u5e38\u4f34\u773c\u8033\uff0c\u5373\u4fbf\u8f9b\u82e6\u65e0\u5948\u3001\u60f3\u8fc7\u653e\u5f03\uff0c\u4f46\u4e3a\u4e86\u90a3\u5fae\u4e0d\u8db3\u9053\u7684\u5b58\u5728\u611f\u4f9d\u7136\u52aa\u529b\u7740\u3002\n/// >\n/// > \u5f53\u7136\uff0c\u4e5f\u6536\u83b7\u4e86\u4e0d\u5c11...\u8d8a\u6765\u8d8a\u591a\u62e5\u8db8\u8005\uff0c\u8d8a\u53d1\u7cbe\u6e5b\u6280\u672f\u80fd\u529b\uff0c\u66f4\u9ad8\u5c42\u6b21\u601d\u7ef4\u6a21\u5f0f\uff0c\u8fd8\u6709\u8bb8\u591a\u8de8\u754c\u8de8\u884c\u670b\u53cb\u3002\n/// >\n/// > \u5728 \u300a[\u5f00\u6e90\u6307\u5317] (https://gitee.com/opensource-guide/comments/)\u300b\u4e2d\uff0c\u6211\u66fe\u8bf4\u9053\uff1a\u201c\u5f00\u6e90\u5982\u540c\u4eba\u7684\u8138\uff0c\u597d\u574f\u4e00\u9762\u4fbf\u77e5\uff0c\u7f3a\u70b9\u53ef\u80fd\u4f1a\u53d7\u5230\u5632\u8bbd\u6279\u8bc4\uff0c\u4f18\u70b9\u4e5f\u4f1a\u6536\u83b7\u8d5e\u626c\u5c0a\u91cd\u3002\u522b\u62c5\u5fc3\uff0c\u4ed6\u4eec\u6b63\u5728\u5851\u9020\u66f4\u597d\u7684\u4f60\u3002\u201d\n/// >\n/// > \u6240\u4ee5\uff0c\u8fd9\u4e00\u6b21\u91cd\u65b0\u8d77\u822a\uff0c\u91cd\u5851 `Furion` \u91cd\u5851\u81ea\u5df1\u3002\u4e5f\u8bb8\u672a\u6765\u5728\u67d0\u4e2a IT \u5708\u4f46\u51e1\u6709\u4eba\u8c08\u8d77 `.NET` \u8fd8\u80fd\u779f\u5230 `Furion` \u7684\u8eab\u5f71\u3002\n///\n/// ---\n///\n/// \ud83c\udf89 \u63a2\u7d22 Furion \u672a\u6765\u66f4\u591a\u53ef\u80fd\u6027\uff0c\u5b9e\u73b0\u65e0\u7b2c\u4e09\u65b9\u4f9d\u8d56\u7684\u7248\u672c\uff0c\u6240\u6709\u6a21\u5757\u529f\u80fd\u6309\u9700\u5b89\u88c5\uff0c\u6309\u9700\u52a0\u8f7d\u3002\n///\n/// - \u4f5c\u8005\uff1a[\u767e\u5c0f\u50e7] (https://gitee.com/monksoul)\n/// - \u65e5\u671f\uff1a2021 \u5e74 08 \u6708 30 \u65e5\n///\n/// ## \u73af\u5883\n///\n/// - IDE \uff1a[Microsoft Visual Studio Enterprise 2022 Preview(64 \u4f4d) \u7248\u672c 17.0.0 Preview 3.1] (https://visualstudio.microsoft.com/zh-hans/vs/preview/)\n/// - SDK \uff1a[.NET SDK 6] (https://dotnet.microsoft.com/download/dotnet/6.0)\n/// - \u8bed\u8a00\uff1a[C# 10](https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-10)\n///\n/// ## \u5305\u8bf4\u660e\n///\n/// - `Furion.Core`\uff1a\u65e0\u7b2c\u4e09\u65b9\u4f9d\u8d56\uff0c\u53ef\u5728 `.NET 6` \u6240\u6709\u9879\u76ee\u7c7b\u578b\u4e2d\u8fd0\u884c\u3002\n/// - `Furion`\uff1a\u5185\u90e8\u4f9d\u8d56 `Furion.Core` \u4e14\u65e0\u7b2c\u4e09\u65b9\u4f9d\u8d56\uff0c**\u805a\u7126 `Web` \u5e94\u7528**\uff0c\u91c7\u7528\u5171\u4eab\u6846\u67b6 `` \u6a21\u5f0f\n/// \npublic void MarkdownTest()\n{\n // ....\n}\n')),(0,l.kt)("img",{src:(0,p.Z)("img/mdx2.png")}))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v357\u5df2\u53d1\u5e03"},"v3.5.7\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Options")," \u9009\u9879\u5c5e\u6027\u652f\u6301\u81ea\u5b9a\u4e49 ",(0,l.kt)("inlineCode",{parentName:"li"},"Key")," \u540d\u79f0\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},'[MapSettings("key")]')," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5B2HN"},"#I5B2HN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EventBus")," \u6a21\u5757\u4e8b\u4ef6 ",(0,l.kt)("inlineCode",{parentName:"li"},"Id")," \u652f\u6301\u679a\u4e3e\u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/2f328aa8213c8efe7a8480116985573cc6b7fce6"},"2f328aa")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EventBus")," \u6a21\u5757\u53d1\u5e03\u8005 ",(0,l.kt)("inlineCode",{parentName:"li"},"PublishAsync")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"PublishDelayAsync")," \u91cd\u8f7d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/2f328aa8213c8efe7a8480116985573cc6b7fce6"},"2f328aa")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EventBus")," \u6a21\u5757\u62d3\u5c55\u65b9\u6cd5\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"Enum.ParseToString()")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"String.ParseToEnum()")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/2f328aa8213c8efe7a8480116985573cc6b7fce6"},"2f328aa")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u548c ",(0,l.kt)("inlineCode",{parentName:"strong"},"SqlSugar")," \u811a\u624b\u67b6")," \ud83c\udd95\ud83c\udd95\ud83c\udd95 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/8d9293d1188670626f017ccea4ffb85ac315d2fc"},"8d9293d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Dapper")," \u62d3\u5c55\u5168\u5c40\u914d\u7f6e\u59d4\u6258 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I5AYFX"},"#I5AYFX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u8f6c\u5b9e\u4f53\u652f\u6301\u591a\u79cd\u547d\u540d\u7b56\u7565\uff08\u7eaf\u5927\u5199\uff0c\u7eaf\u5c0f\u5199\uff0c\u5e26\u4e0b\u5212\u7ebf\u5206\u5272\u7b49\u7b49\uff09\uff0c\u5982 ",(0,l.kt)("inlineCode",{parentName:"li"},"Oracle")," \u6570\u636e\u5e93 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/a90e24516387e088b2c427e6b99d3dab937116c9"},"a90e245")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"FS.InitalContentTypeProvider()")," \u62d3\u5c55\u65b9\u6cd5\uff0c\u83b7\u53d6\u7cfb\u7edf\u5185\u6240\u6709\u652f\u6301\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"Content-Type")," \u6587\u4ef6\u63d0\u4f9b\u5668 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/6099900472d93dab7012f0b091b05c914be11c4a"},"6099900")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5f7b\u5e95\u89e3\u51b3\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u4e0d\u80fd\u5355\u6587\u4ef6\u53d1\u5e03\u7684\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7e8e0b708bcdac670aa835dec5cd494d41ff3648"},"7e8e0b7")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6846\u67b6\u89c4\u8303\u5316\u6587\u6863 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Controller")," \u6d3e\u751f\u7c7b ",(0,l.kt)("inlineCode",{parentName:"li"},"api")," \u8def\u7531\u95ee\u9898\uff0c\u539f\u751f ",(0,l.kt)("inlineCode",{parentName:"li"},"ASP.NET")," \u662f\u652f\u6301\u7684 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/29e47bce3678767c4793ad254777704ab9dd7e03"},"29e47bc")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u57fa\u4e8e ",(0,l.kt)("inlineCode",{parentName:"li"},"Schema")," \u591a\u79df\u6237\u914d\u7f6e\u65e0\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/6f820ce0f28dd27a6e265b969b5b4095de676106"},"6f820ce")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6307\u5b9a\u5b9e\u4f53 ",(0,l.kt)("inlineCode",{parentName:"li"},'[Table(schema:"dbo")]')," \u7279\u6027\u540e ",(0,l.kt)("inlineCode",{parentName:"li"},"Schema")," \u65e0\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/6f820ce0f28dd27a6e265b969b5b4095de676106"},"6f820ce")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u89c6\u56fe\u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Schema")," \u914d\u7f6e\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/6f820ce0f28dd27a6e265b969b5b4095de676106"},"6f820ce")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u89c4\u8303\u5316\u7ed3\u679c\u6781\u7aef\u60c5\u51b5\u4e0b\u51fa\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u7a7a\u5f02\u5e38")," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/c9b0ef09427418e2ccb88d3a4c02e7a29d9d510e"},"c9b0ef")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"axios-utils.ts")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"angular-utils.ts")," \uff0c\u65b0\u589e\u8bf7\u6c42\u62e6\u622a\u643a\u5e26\u5237\u65b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u7684\u65f6\u673a\u5224\u65ad ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/82f89bd95573aefa7075676af7f00c55507cb03b"},"82f89bd")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u89c4\u8303\u5316\u6587\u6863 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u52a0\u8f7d\u7ee7\u627f\u6ce8\u91ca ",(0,l.kt)("inlineCode",{parentName:"li"},"")," \u6027\u80fd\u5c0f\u4f18\u5316 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/5f06880564ee8cd2e77caa5957ff18a0c489bdd2"},"5f06880")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u811a\u624b\u67b6\u6a21\u677f\uff0c\u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"li"},"GlobalUsings.cs")," \u6a21\u5f0f"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u5bf9\u8c61\u6620\u5c04\u9ed8\u8ba4\u652f\u6301\u5ffd\u7565\u5927\u5c0f\u5199 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/486"},"!486")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u5355\u6587\u4ef6\u53d1\u5e03\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion + SqlSugar")," \u811a\u624b\u67b6\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u4e8b\u4ef6\u603b\u7ebf\u6587\u6863\u3001\u9009\u9879\u6587\u6863\u3001\u5373\u65f6\u901a\u8baf\u6587\u6863\u3001",(0,l.kt)("inlineCode",{parentName:"li"},".NET5")," \u5347\u7ea7 ",(0,l.kt)("inlineCode",{parentName:"li"},".NET6")," \u6587\u6863\u3001\u4f9d\u8d56\u6ce8\u5165\u6587\u6863\u3001\u8de8\u57df\u6587\u6863\u3001\u6570\u636e\u52a0\u89e3\u5bc6\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u672c\u671f\u4eae\u70b9")))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u4e8b\u4ef6\u603b\u7ebf ",(0,l.kt)("inlineCode",{parentName:"strong"},"Id")," \u652f\u6301\u679a\u4e3e\u7c7b\u578b"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,10}",showLineNumbers:!0,"{7,10}":!0},'EventSubscribe("TO:DO")] // \u5b57\u7b26\u4e32\u7c7b\u578b\npublic async Task EventHandler1(EventHandlerExecutingContext context)\n{\n // ....\n}\n\n[EventSubscribe(YourEnum.Some)] // \u679a\u4e3e\u7c7b\u578b\npublic async Task EventHandler2(EventHandlerExecutingContext context)\n{\n var eventEnum = context.Source.EventId.ParseToEnum(); // \u5c06\u4e8b\u4ef6 Id \u8f6c\u6362\u6210\u679a\u4e3e\u5bf9\u8c61\n // ....\n}\n')))),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u4e8b\u4ef6\u603b\u7ebf\u53d1\u5e03\u652f\u6301\u66f4\u7b80\u5355\u8c03\u7528"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,6}",showLineNumbers:!0,"{5,6}":!0},'// \u65e7\u7248\u672c\nawait _eventPublisher.PublishAsync(new ChannelEventSource("ToDo:Create", name));\n\n// \u65b0\u7248\u672c\nawait _eventPublisher.PublishAsync("ToDo:Create", name);\nawait _eventPublisher.PublishAsync(YourEnum.Some); // \u4e5f\u652f\u6301\u679a\u4e3e\n')))),(0,l.kt)("ol",{start:3},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u9009\u9879\u652f\u6301\u5c5e\u6027\u81ea\u5b9a\u4e49\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"strong"},"Key")))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {4}",showLineNumbers:!0,"{4}":!0},'"AppInfo": {\n "Name": "Furion",\n "Version": "1.0.0",\n "Company_Name": "Baiqian" // \u53ef\u4ee5\u548c\u5c5e\u6027\u4e0d\u4e00\u6837\n}\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,7}",showLineNumbers:!0,"{6,7}":!0},'public class AppInfoOptions : IConfigurableOptions\n{\n public string Name { get; set; }\n public string Version { get; set; }\n\n [MapSettings("Company_Name")] // \u652f\u6301\u81ea\u5b9a\u4e49\n public string Company { get; set; }\n}\n')))),(0,l.kt)("ol",{start:4},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u65e5\u5fd7\u89c4\u8303\u5316\u6a21\u677f"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"{2}":!0},'// \u751f\u6210\u6a21\u677f\u5b57\u7b26\u4e32\nvar template = TP.Wrapper("Furion \u6846\u67b6", "\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002",\n "[\u4f5c\u8005] \u767e\u5c0f\u50e7",\n "[\u5f53\u524d\u7248\u672c] v3.5.3",\n "[\u6587\u6863\u5730\u5740] https://furion.icu",\n "[Copyright] \u767e\u5c0f\u50e7, Baiqian Co.,Ltd.");\nConsole.WriteLine(template);\n')),(0,l.kt)("p",null,"\u8f93\u51fa\u7ed3\u679c"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Furion \u6846\u67b6 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 \u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002\n\u2523\n\u2523 \u4f5c\u8005\uff1a \u767e\u5c0f\u50e7\n\u2523 \u5f53\u524d\u7248\u672c\uff1a v3.5.3\n\u2523 \u6587\u6863\u5730\u5740\uff1a https://furion.icu\n\u2523 Copyright\uff1a \u767e\u5c0f\u50e7, Baiqian Co.,Ltd.\n\u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Furion \u6846\u67b6 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\n")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v342\u5df2\u53d1\u5e03"},"v3.4.2\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u89c4\u8303\u5316\u6587\u4ef6 ",(0,l.kt)("inlineCode",{parentName:"li"},"EnableAllGroups")," \u529f\u80fd\uff0c\u53ef\u4ee5\u5c06\u591a\u4e2a\u5206\u7ec4\u5408\u5e76\u5230\u4e00\u4e2a\u5206\u7ec4\u4e2d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/9277b982ce024bac8ab5117ba02c3bd96ad07972"},"9277b98")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"angular-utils")," \u5ba2\u6237\u7aef\u5de5\u5177\u5e93\uff0c\u4e13\u95e8\u5904\u7406 ",(0,l.kt)("inlineCode",{parentName:"li"},"angular")," \u9879\u76ee\u63a5\u53e3\u4ee3\u7406\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/6c705848a77fbf7234070d0ef9f053a85cc8838a"},"6c70584")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u652f\u6301\u5355\u4e2a\u63a5\u53e3\u66f4\u591a\u63cf\u8ff0\u529f\u80fd\uff08\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"html"),"\uff09",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/e5e1db09710dab02966330063935bd5e5b7e4dc8"},"e5e1db0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u63a5\u53e3 ",(0,l.kt)("inlineCode",{parentName:"li"},"[Obsolete]")," \u8fc7\u65f6\u652f\u6301\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/e5e1db09710dab02966330063935bd5e5b7e4dc8"},"e5e1db0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"li"},"API")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"[ApiDescriptionSettings]")," \u7279\u6027 \u548c",(0,l.kt)("inlineCode",{parentName:"li"},"DynamicApiControllerSettings")," \u914d\u7f6e \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"ForceWithRoutePrefix")," \u53c2\u6570\uff0c\u652f\u6301\u5f3a\u5236\u590d\u5199 ",(0,l.kt)("inlineCode",{parentName:"li"},"[Route]")," \u7279\u6027\u5e76\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"DefaultRoutePrefix")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I59B74"},"#I59B74")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u9ed8\u8ba4\u5185\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"GBK"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"Windows-1252"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"Shift-JIS"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"GB2312")," \u7b49\u7f16\u7801\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/c456ecb225b099e5d24add32024f16c359414532"},"c456ecb")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugar")," \u811a\u624b\u67b6"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"")," \u4e0d\u80fd\u8de8\u7a0b\u5e8f\u96c6\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3b9d39ce691f9505c5541a790103fbb0ba6d35af"},"3b9d39c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"")," \u4e0d\u652f\u6301\u5e26\u53c2\u6570\uff0c\u4e0d\u652f\u6301\u9690\u5f0f\u5b9e\u73b0\u63a5\u53e3\u6ce8\u91ca\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I59A6W#note_10699021_link"},"#I59A6W#note_10699021")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"v3.3.1")," \u7248\u672c\u5bfc\u81f4 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u4e0d\u80fd\u663e\u793a\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/676335264478d68b99db009d32b65de781702605"},"6763352")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u3001",(0,l.kt)("inlineCode",{parentName:"li"},"JSON"),"\u4ee5\u53ca ",(0,l.kt)("inlineCode",{parentName:"li"},"Web")," \u9875\u9762\u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"GBK"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"GB2312")," \u7b49\u56fd\u6807\u7f16\u7801\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/c456ecb225b099e5d24add32024f16c359414532"},"c456ecb")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u54cd\u5e94\u62a5\u6587\u8bbe\u7f6e\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"Content-Type:charset=")," \u4e0d\u80fd\u81ea\u52a8\u8f6c\u6362\u7f16\u7801\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/c456ecb225b099e5d24add32024f16c359414532"},"c456ecb")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"axios-utils.ts")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"angular-utils.ts")," \u591a\u5ba2\u6237\u7aef\u652f\u6301"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"GlobalUsings")," \u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://furion.baiqian.ltd/blog/global-usings"},"\u6587\u6863\u5730\u5740")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8bf7\u6c42\u5927\u5c0f/\u4e0a\u4f20\u5927\u5c0f\u9650\u5236\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://furion.baiqian.ltd/docs/file-provider/#317-%E8%AF%B7%E6%B1%82%E5%A4%A7%E5%B0%8F%E6%8E%A7%E5%88%B6%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F%E6%8E%A7%E5%88%B6"},"\u6587\u6863\u5730\u5740")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u89c4\u8303\u5316\u6587\u6863\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"Worker Service")," \u6587\u6863\uff0c\u52a8\u6001 API \u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u672c\u671f\u4eae\u70b9")))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u542f\u7528 ",(0,l.kt)("inlineCode",{parentName:"strong"},"All Groups")," \u5206\u7ec4\u529f\u80fd"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u4e3a\u4e86\u66f4\u597d\u7684\u5bf9\u63a5\u53e3\u8fdb\u884c\u5f52\u7c7b\uff0c\u914d\u7f6e\u4e86 ",(0,l.kt)("inlineCode",{parentName:"p"},"Swagger")," \u591a\u4e2a\u5206\u7ec4\u7684\u529f\u80fd\uff0c\u4f46\u8fd9\u6837\u4e5f\u5bf9\u751f\u6210\u5ba2\u6237\u7aef\u8bf7\u6c42\u4ee3\u7801\u9020\u6210\u4e86\u56f0\u6270\uff0c\u6240\u4ee5\u6dfb\u52a0\u4e86\u65b0\u7684\u914d\u7f6e\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2-3}",showLineNumbers:!0,"{2-3}":!0},'{\n "SpecificationDocumentSettings": {\n "EnableAllGroups": true\n }\n}\n')))),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u63a5\u53e3\u8fc7\u65f6\u63a7\u5236"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,"\u5f53\u6211\u4eec\u67d0\u4e2a\u63a5\u53e3\u5df2\u7ecf\u8fc7\u65f6\uff0c\u63d0\u793a\u5c3d\u65e9\u8c03\u7528\u6700\u65b0\u63a5\u53e3\uff0c\u53ea\u9700\u8981\u5728\u65b9\u6cd5\u4e0a\u9762\u8d34 ",(0,l.kt)("inlineCode",{parentName:"p"},"[Obsolete]")," \u5373\u53ef\uff0c\u5982\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,7}",showLineNumbers:!0,"{1,7}":!0},'[Obsolete("GetName() \u5df2\u7ecf\u8fc7\u65f6\uff0c\u8bf7\u8c03\u7528 GetFrameworkName() \u66ff\u4ee3")]\npublic string GetName()\n{\n return nameof(Furion);\n}\n\n[Obsolete]\npublic string Other()\n{\n // ...\n}\n')),(0,l.kt)("img",{src:(0,p.Z)("img/swg2.png")}))),(0,l.kt)("ol",{start:3},(0,l.kt)("li",{parentName:"ol"},(0,l.kt)("strong",{parentName:"li"},"\u5355\u4e00\u63a5\u53e3\u66f4\u591a\u63cf\u8ff0"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("p",null,"\u5728\u8be5\u7248\u672c\u65b0\u589e\u4e86 ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiDescriptionSettings]")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},"Description")," \u5c5e\u6027\uff0c\u652f\u6301\u5b9a\u4e49\u66f4\u591a\u63cf\u8ff0\uff0c\u5982\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},'[ApiDescriptionSettings(Description = "\u6211\u662f\u4e00\u6bb5\u63cf\u8ff0\uff0c\u663e\u793a\u66f4\u591a\u5185\u5bb9 ")]\npublic string add()\n{\n //....\n}\n')),(0,l.kt)("img",{src:(0,p.Z)("img/swg1.png")}))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v333\u5df2\u53d1\u5e03"},"v3.3.3\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u6587\u4ef6\u4e0a\u4f20\u81ea\u52a8\u8bc6\u522b ",(0,l.kt)("inlineCode",{parentName:"li"},"Content-Type")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Mime")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I57ZMN"},"#I57ZMN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u65b9\u6cd5\u652f\u6301\u8bbe\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"Content-Type")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Encoding")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I57ZMN"},"#I57ZMN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6839\u636e\u6587\u4ef6\u540d\u83b7\u53d6 ",(0,l.kt)("inlineCode",{parentName:"li"},"Content-Type")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Mime")," \u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/8f78184f8661830744592c054b65d503346c1b27"},"#8f78184")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u89c4\u8303\u5316\u6587\u6863\u652f\u6301\u6388\u6743\u8bbf\u95ee ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/32aa3b6328d23a5885033837883c7b546e898d43"},"#32aa3b6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4ee3\u7801\u6ce8\u91ca\uff0c\u89c4\u8303\u5316\u6587\u6863\u6ce8\u91ca ",(0,l.kt)("inlineCode",{parentName:"li"},"inheritdoc")," \u8bed\u6cd5\u652f\u6301 \u2764\ufe0f\ufe0f\ufe0f\ufe0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I59A6W"},"#159A6W")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"li"},"Vue2/3"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"React 16.8+"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"Angular 9+")," \u524d\u7aef\u8bf7\u6c42\u5de5\u5177\u5e93\uff0c\u5b9e\u73b0\u540e\u7aef API \u4ee3\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/tree/v4/clients/axios"},"axios-utils")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4ee3\u7801\u6ce8\u91ca\uff0c\u89c4\u8303\u5316\u6587\u6863\u6ce8\u91ca ",(0,l.kt)("inlineCode",{parentName:"li"},"inheritdoc")," \u8bed\u6cd5\u652f\u6301 \u2764\ufe0f\ufe0f\ufe0f\ufe0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I59A6W"},"#159A6W")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},".NET")," \u6240\u6709\u4f9d\u8d56\u5305\u81f3 ",(0,l.kt)("inlineCode",{parentName:"li"},"v6.0.5")," \u7248\u672c"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea\u5b9a\u4e49\u5168\u5c40\u5f02\u5e38 ",(0,l.kt)("inlineCode",{parentName:"li"},"Exception")," \u540e\u5bfc\u81f4\u83b7\u53d6\u9519\u8bef\u884c\u53f7\uff0c\u6587\u4ef6\u7a7a\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I53EGM"},"#I53EGM")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u914d\u7f6e\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u4f20\u9012\u7a7a\u59d4\u6258\u5bfc\u81f4\u7a7a\u5f15\u7528\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I519AW"},"#I519AW")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5b57\u7b26\u4e32\u6a21\u677f\u6a21\u677f ",(0,l.kt)("inlineCode",{parentName:"li"},"Render")," \u62d3\u5c55\u65b9\u6cd5\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"void")," \u95ee\u9898\uff0c\u5e94\u8be5\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"string")," ",(0,l.kt)("a",{parentName:"li",href:"https://github.com/MonkSoul/Furion/issues/99#issuecomment-1073131906"},"Github-#99")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u6587\u4ef6\u4e0a\u4f20\u51fa\u73b0\u7a7a\u60c5\u51b5\u95ee\u9898\uff08\u539f\u56e0\u662f\u7f3a\u5931 ",(0,l.kt)("inlineCode",{parentName:"li"},"Content-Type")," \uff09",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I57ZMN"},"I57ZMN")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u6846\u67b6\u6e90\u7801\u5f15\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"GlobalUsings")," \u673a\u5236\uff0c\u51cf\u5c11\u4ee3\u7801\u4f53\u79ef ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/7e9cc1c205750906cddd540ad08a4c02f14efa3a"},"#7e9cc1c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u8de8\u57df\u8bf7\u6c42\u7684\u9884\u68c0\u8bbe\u7f6e\uff0c\u5982\u679c\u672a\u8bbe\u7f6e\uff0c\u5219\u9ed8\u8ba4\u4e3a 24 \u5c0f\u65f6\uff0c\u4e3b\u8981\u89e3\u51b3\u524d\u7aef\u591a\u6b21\u53d1\u9001 204 \u9884\u68c0\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/4a11e7c9fa20b4419ac00f6ad21c078500d00791"},"4a11e7c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u89c6\u56fe\u5f15\u64ce\u53cd\u5c04\u6027\u80fd"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7c98\u571f\u5bf9\u8c61\u5e8f\u5217\u5316 ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," \u914d\u7f6e\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u524d\u7aef\u89e3\u5bc6 ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT")," \u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5c06 ",(0,l.kt)("inlineCode",{parentName:"li"},"byte[]")," \u8f6c ",(0,l.kt)("inlineCode",{parentName:"li"},"url")," \u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u4e8c\u7ea7\u865a\u62df\u76ee\u5f55\u90e8\u7f72\u6587\u6863\uff0c\u8fdc\u7a0b\u8bf7\u6c42\u6587\u6863\uff0c\u6587\u4ef6\u4e0a\u4f20\u6587\u6863\uff0c\u5b89\u5168\u6388\u6743\u6587\u6863\u3001\u89c4\u8303\u5316\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u672c\u671f\u4eae\u70b9")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\u2764\ufe0f\ufe0f\ufe0f\ufe0f ",(0,l.kt)("strong",{parentName:"li"},"\u6839\u636e\u6587\u4ef6\u540d\u83b7\u53d6 ",(0,l.kt)("inlineCode",{parentName:"strong"},"MIME")," \u6216 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Content-Type")," \u7c7b\u578b"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var success = FS.TryGetContentType("image.png", out var contentType); // image/png\n')),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u2764\ufe0f\ufe0f\ufe0f\ufe0f ",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Swagger")," \u914d\u7f6e\u767b\u5f55\u540e\u624d\u80fd\u8bbf\u95ee"))),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2-6}",showLineNumbers:!0,"{2-6}":!0},'{\n "SpecificationDocumentSettings": {\n "LoginInfo": {\n "Enabled": true,\n "CheckUrl": "\u68c0\u67e5\u767b\u5f55\u5730\u5740",\n "SubmitUrl": "\u63d0\u4ea4\u767b\u5f55\u5730\u5740"\n }\n }\n}\n')),(0,l.kt)("img",{src:(0,p.Z)("img/swgdl.png")}),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"./specification-document#6529-%E5%B8%A6%E7%99%BB%E5%BD%95%E7%9A%84-swagger-%E6%96%87%E6%A1%A3"},"\u67e5\u770b\u8be6\u7ec6\u6587\u6863")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u2764\ufe0f\ufe0f\ufe0f\ufe0f ",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u4ee3\u7801\u6ce8\u91ca\u7ee7\u627f\uff0cSwagger \u6587\u6863\u6ce8\u91ca\u4e5f\u652f\u6301"))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4,10}",showLineNumbers:!0,"{1,4,10}":!0},'/// \npublic class TestInheritdoc : ITestInheritdoc, IDynamicApiController\n{\n /// \n public string GetName()\n {\n return "Furion";\n }\n\n /// \n public string GetVersion()\n {\n return "3.3.3";\n }\n}\n\n/// \n/// \u6d4b\u8bd5\u6ce8\u91ca\u7ee7\u627f\n/// \npublic interface ITestInheritdoc\n{\n /// \n /// \u83b7\u53d6\u540d\u79f0\n /// \n /// \n string GetName();\n\n /// \n /// \u83b7\u53d6\u7248\u672c\n /// \n /// \n string GetVersion();\n}\n')),(0,l.kt)("img",{src:(0,p.Z)("img/cdr22.png")}),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"./specification-document#6530-inheritdoc-%E5%AE%9E%E7%8E%B0%E6%B3%A8%E9%87%8A%E7%BB%A7%E6%89%BF"},"\u67e5\u770b\u8be6\u7ec6\u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v320\u5df2\u53d1\u5e03"},"v3.2.0\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IFormFile")," \u62d3\u5c55\u65b9\u6cd5 ",(0,l.kt)("inlineCode",{parentName:"li"},"ToByteArray()")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/da69640da2331e2c8582b88bbda965c5ad7ecbe0"},"da69640")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u89c4\u8303\u5316\u6587\u6863 ",(0,l.kt)("inlineCode",{parentName:"li"},"ServeDir")," \u865a\u62df\u76ee\u5f55\u914d\u7f6e\u529f\u80fd\uff0c\u652f\u6301\u4e00\u952e\u5c06\u4e00\u7ea7\u76ee\u5f55\u5207\u6362\u81f3\u4e8c\u7ea7\u76ee\u5f55\u90e8\u7f72\uff08IIS\uff09",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/87183921ac8b6f9856db01b4de679b858a58e753"},"8718392")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6240\u6709\u4f9d\u8d56\u5305\u81f3\u6700\u65b0\u7248"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u4f9d\u8d56\u6ce8\u5165\u6a21\u5757\u6838\u5fc3\u4ee3\u7801\uff0c\u79fb\u9664\u6ce8\u518c\u670d\u52a1\u91c7\u7528\u53cd\u5c04\u673a\u5236\uff0c\u51cf\u5c11\u53cd\u5c04\u6027\u80fd\u635f\u8017 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/acdb3157af92891610a1ba6d317b6af3f09e233f"},"acdb315")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"schema")," \u7c7b\u578b\u5982\u679c\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"C# Object")," \u7c7b\u578b\u65e0\u6cd5\u6b63\u786e\u751f\u6210\u524d\u7aef\u4ee3\u7801\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://github.com/swagger-api/swagger-codegen-generators/issues/692"},"Swagger \u5b98\u65b9 Issue")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/1a252747fd60fc87a8ed4425c8edf7803f96ce43"},"1a25274")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker Service")," \u53d1\u5e03\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"Windows Services")," \u65f6\u65e5\u5fd7\u7edd\u5bf9\u8def\u5f84\u95ee\u9898 \u611f\u8c22 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/jacoat"},"@jacoat")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/467"},"!467")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Nginx")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"IIS")," \u5bf9\u4e8c\u7ea7\u865a\u62df\u76ee\u5f55\u914d\u7f6e\u4e0d\u540c\u5bfc\u81f4 ",(0,l.kt)("inlineCode",{parentName:"li"},"404")," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/87183921ac8b6f9856db01b4de679b858a58e753"},"8718392")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u6a21\u5757\u672a\u521d\u59cb\u5316 ",(0,l.kt)("inlineCode",{parentName:"li"},"OnRequestFailded")," \u5bfc\u81f4\u7a7a\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I54PK7"},"#I54PK7")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4f9d\u8d56\u6ce8\u5165\u53cd\u5c04\u51fa\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Not found Method")," bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I546L1"},"#I546L1")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u5b9a\u65f6\u4efb\u52a1\u5931\u8d25\u540e\u5f02\u5e38\u5904\u7406\u903b\u8f91\uff0c\u611f\u8c22 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/cxs1992"},"@\u7a0b\u5c0f\u80dc")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/463"},"!463")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u5b9a\u65f6\u4efb\u52a1\u6587\u6863\uff0c\u65e5\u5fd7\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6587\u4ef6\u4e0a\u4f20/\u4e0b\u8f7d \u6587\u6863\uff0c\u5305\u542b\u5355\u6587\u4ef6/\u591a\u6587\u4ef6/Base64/Byte[]")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v310\u5df2\u53d1\u5e03"},"v3.1.0\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u6a21\u5757\u5f02\u5e38 ",(0,l.kt)("inlineCode",{parentName:"li"},"Http")," \u72b6\u6001\u7801 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/462"},"!462")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u52a8\u6001 WebAPI \u652f\u6301\u5c0f\u9a7c\u5cf0\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4W1R4"},"#I4W1R4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"SendAsByteArrayAsync")," \u7b49\u4e00\u7cfb\u5217\u65b9\u6cd5\uff0c\u652f\u6301\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"byte[]")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/452"},"!452")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"GZip")," \u538b\u7f29\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I506S5"},"#I506S5")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," ",(0,l.kt)("inlineCode",{parentName:"li"},".NET6")," \u4f9d\u8d56\u5305\u5168\u90e8\u5347\u7ea7\u81f3 ",(0,l.kt)("inlineCode",{parentName:"li"},"Nuget")," \u6700\u65b0\u7248 ",(0,l.kt)("inlineCode",{parentName:"li"},"v6.0.3")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},".NET6 WebApplication")," \u6a21\u5f0f\u4e8c\u7ea7\u865a\u62df\u76ee\u5f55\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4UZLM"},"#I4UZLM")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4PZ0C"},"#I4PZ0C")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u65e5\u671f\u9a8c\u8bc1\u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"2022-03-01 0:00:00"),"\uff08\u73b0\u5728\u652f\u6301\u5c0f\u65f6\u57df ",(0,l.kt)("inlineCode",{parentName:"li"},"0")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"00"),"\uff09 \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4Y3NT"},"#I4Y3NT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u73af\u5883\u914d\u7f6e\u548c\u6587\u4ef6\u914d\u7f6e\u4f18\u5148\u7ea7\u95ee\u9898"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8131\u654f\u6a21\u5757\u66ff\u6362\u654f\u611f\u8bcd\u6c47\u53ea\u66ff\u6362\u6700\u540e\u4e00\u4e2a bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4YFA0"},"#I4YFA0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u8fd4\u56de\u5b57\u7b26\u4e32\u4e2a\u522b\u60c5\u51b5\u51fa\u73b0\u4e2d\u6587\u4e71\u7801\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I50GBD"},"#I50GBD")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[DataValidate]")," \u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"AllowNullValue")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"AllowEmptyString")," \u65e0\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4ZZBE"},"#I4ZZBE")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"[\u8fc7\u65f6]"," \u6807\u8bb0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Extras.Logging.Serilog")," \u62d3\u5c55\u5305 ",(0,l.kt)("inlineCode",{parentName:"li"},"IWebHost")," \u62d3\u5c55\u4e3a\u8fc7\u65f6\u72b6\u6001"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u6587\u6863")," \u4f18\u5316\u6587\u6863\u4f53\u9a8c\uff0c\u65b0\u589e\u9762\u5305\u5c51\u5bfc\u822a\uff0c\u91cd\u5199\u6587\u6863\u7f13\u5b58\uff0c\u63d0\u5347\u6587\u6863\u8bbf\u95ee\u901f\u5ea6"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u6587\u6863")," \u66f4\u65b0\u52a8\u6001 API \u6587\u6863\u3001\u914d\u7f6e\u6587\u6863\u3001\u8fdc\u7a0b\u8bf7\u6c42\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u6587\u6863")," \u66f4\u65b0\u4e8c\u7ea7\u865a\u62df\u76ee\u5f55\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u672c\u671f\u4eae\u70b9")))),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"\u65b0\u589e\u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"li"},"WebApi")," \u652f\u6301\u5c0f\u9a7c\u5cf0\u8def\u5f84\uff0c\u5982 ",(0,l.kt)("inlineCode",{parentName:"li"},"GetMyName")," -> ",(0,l.kt)("inlineCode",{parentName:"li"},"getMyName"),"\uff1a")),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "DynamicApiControllerSettings": {\n "LowercaseRoute": false,\n "KeepName": true,\n "AsLowerCamelCase": true\n }\n}\n')))),(0,l.kt)("ol",{start:2},(0,l.kt)("li",{parentName:"ol"},"\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},".NET6 WebApplication")," \u6a21\u5f0f\u4e8c\u7ea7\u865a\u62df\u76ee\u5f55\u914d\u7f6e\uff1a")),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {title="Progame.cs"}',showLineNumbers:!0,"":!0,"{title":'"Progame.cs"}'},"app.UseVirtualPath(app =>\n{\n app.UseInject(String.Empty); // \u6ce8\u610f String.Empty \u53ea\u662f\u4f8b\u5b50\uff0c\u53ef\u4ee5\u4e0d\u586b\u6216\u586b\u5176\u4ed6\u7684\uff0c\u89c1\u4e00\u5206\u949f\u5165\u95e8\n app.MapRouteControllers();\n});\n")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v300\u5df2\u53d1\u5e03"},"v3.0.0\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("admonition",{title:"v3+ \u7248\u672c\u8bf4\u660e",type:"warning"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("strong",{parentName:"p"},"Furion v3.x \u7248\u672c\u91c7\u7528 .NET6 \u6784\u5efa\u3002"))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"GET")," \u8bf7\u6c42\u81ea\u52a8\u8f6c\u6362 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u7c7b\u7c7b\u578b")," \u7c7b\u578b\u5bf9\u8c61 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4HR5Q"},"#I4HR5Q")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," \u5168\u9762\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},".NET6")," \u7248\u672c"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5f00\u542f\u89c4\u8303\u5316\u7ed3\u679c\u5e76\u81ea\u5b9a\u4e49\u5168\u5c40\u5f02\u5e38\u5bfc\u81f4\u5f02\u5e38\u7ecf\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"li"},"OnSucceeded")," \u8fc7\u6ee4\u5668 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4DTVL"},"#I4DTVL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},".NET5.0.5+")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},".NET6")," \u5fae\u8f6f\u5e95\u5c42\u4fee\u6539\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"[ApiController]")," \u9a8c\u8bc1\u5931\u8d25\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"IActionResult")," \u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4ISOK"},"#I4ISOK")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore 6.0")," \u9002\u914d ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlServer 2005+")," \u51fa\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4ILA5"},"#I4ILA5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," .NET6 \u83b7\u53d6\u914d\u7f6e\u5bf9\u8c61\u5982\u679c\u4e0d\u5b58\u5728\u8fd4\u56de null \u95ee\u9898\uff0c.NET5 \u5219\u8fd4\u56de\u521d\u59cb\u5bf9\u8c61 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/94ae4d8c9b0fe7eb4d713a171f953c0d3c5a76ac"},"94ae4d")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u547d\u4ee4\u53c2\u6570\u4f20\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"Clay")," \u7c7b\u578b\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4D21Q"},"#I4D21Q")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Cron")," \u5b9a\u65f6\u4efb\u52a1\u7279\u6027\u65b9\u5f0f bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4OJQI"},"#I4OJQI")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"del"},"ToPagedList")," \u6cdb\u578b\u7ea6\u675f")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/d0244dc33a0e5236158cdcdff21d086e00a42ee7"},"d0244d")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u6587\u6863")," \u67e5\u770b ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("a",{parentName:"strong",href:"https://furion.baiqian.ltd/docs/get-start-net6"},".NET6 \u4e00\u5206\u949f\u5165\u95e8"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u6587\u6863")," \u67e5\u770b ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("a",{parentName:"strong",href:"https://furion.baiqian.ltd/docs/net5-to-net6"},"Furion v2 \u5347\u7ea7 v3"))))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7279\u522b\u9e23\u8c22")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/KaneLeung"},"KaneLeung"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v220\u5df2\u53d1\u5e03\u5168\u65b0\u4e8b\u4ef6\u603b\u7ebf"},"v2.20\uff08\u5df2\u53d1\u5e03\uff0c\u5168\u65b0\u4e8b\u4ef6\u603b\u7ebf\uff09"),(0,l.kt)("admonition",{title:"v2.20+ \u7248\u672c\u8bf4\u660e",type:"warning"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("strong",{parentName:"p"},"\u5728 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion v2.20+")," \u7248\u672c\u540e\u91c7\u7528 ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Jaina"},"Jaina")," \u4e8b\u4ef6\u603b\u7ebf\u66ff\u6362\u539f\u6709\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"EventBus")))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"GET")," \u8bf7\u6c42\u81ea\u52a8\u8f6c\u6362 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u7c7b\u7c7b\u578b")," \u7c7b\u578b\u5bf9\u8c61 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4HR5Q"},"#I4HR5Q")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EventBus")," \u6a21\u5757\uff0c\u91c7\u7528 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Jaina"},"Jaina")," \u65b9\u5f0f"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5f00\u542f\u89c4\u8303\u5316\u7ed3\u679c\u5e76\u81ea\u5b9a\u4e49\u5168\u5c40\u5f02\u5e38\u5bfc\u81f4\u5f02\u5e38\u7ecf\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"li"},"OnSucceeded")," \u8fc7\u6ee4\u5668 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4DTVL"},"#I4DTVL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},".NET5.0.5+")," \u5fae\u8f6f\u5e95\u5c42\u4fee\u6539\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"[ApiController]")," \u9a8c\u8bc1\u5931\u8d25\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"IActionResult")," \u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4ISOK"},"#I4ISOK")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u4e0a\u4f20\u6587\u4ef6\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/0c0752c624799d7d3c7661a8f36a93983399bb59"},"0c0752")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6846\u67b6\u542f\u52a8\u4e0d\u652f\u6301\u73af\u5883\u53d8\u91cf ",(0,l.kt)("inlineCode",{parentName:"li"},"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES")," \u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/438"},"!438")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5b9a\u65f6\u4efb\u52a1\u5185\u5b58\u548c CPU \u5360\u7528\u53ca\u7279\u6b8a\u60c5\u51b5\u4e0b\u7a7a\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/12c65debf552c57780679e6a567a9dd9fb077f46"},"12c65de")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u9ed8\u8ba4\u63a7\u5236\u5668\u542f\u7528\u89c4\u8303\u5316\u7ed3\u679c\u65e0\u6548 bug",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/c7a4a5ef8c3282d245cbe04124cf379d381d496f"},"c7a4a5e")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4f9d\u8d56\u6ce8\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"InjectionAttribute")," \u7279\u6027\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"ExceptInterfaces")," \u5355\u8bcd\u62fc\u5199\u9519\u8bef\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/436"},"!436")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u547d\u4ee4\u53c2\u6570\u4f20\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"Clay")," \u7c7b\u578b\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4D21Q"},"#I4D21Q")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"InjectionAttribute")," \u4ee3\u7801 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/435"},"!435")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"del"},"ToPagedList")," \u6cdb\u578b\u7ea6\u675f")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/d0244dc33a0e5236158cdcdff21d086e00a42ee7"},"d0244d")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4e8b\u4ef6\u603b\u7ebf\u65b0\u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v219\u5df2\u53d1\u5e03"},"v2.19\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b9a\u65f6\u4efb\u52a1\u76d1\u542c\u5668 ",(0,l.kt)("inlineCode",{parentName:"li"},"ISpareTimeListener")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I468Q1"},"#I468Q1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6267\u884c ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"JsonElement")," \u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/61985d6a300485d553cbe8461b01f01bcd0936ef"},"61985d6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u914d\u7f6e\u679a\u4e3e\u53ca\u6807\u7b7e\u6392\u5e8f\u8fc7\u6ee4\u5668 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I46LON"},"#I46LON")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/404"},"!404")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"application/octet-stream")," \u7c7b\u578b\u9ed8\u8ba4\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/d9bad0320cc4a204e24bc3a070517ebce4cdc5d7"},"d9bad03")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u4ee3\u7406\u6a21\u5f0f\u8bf7\u6c42\u62a5\u6587\u5934\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"IDictionary")," \u7c7b\u578b\u3002",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/0204c0afe2de5c28ebbd44b29131e701b93ae8b8"},"0204c0a")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MongoDB")," \u62d3\u5c55\u7c7b\uff0c\u6dfb\u52a0\u66f4\u591a\u5e38\u7528\u64cd\u4f5c\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/423"},"!423")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTimeOffset?")," \u8f6c\u6362 ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTime")," \u62d3\u5c55\uff08\u5305\u542b\u4e92\u6362\uff09 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/432"},"!432")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Scoped.Create")," \u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," \u8fdb\u884c ",(0,l.kt)("inlineCode",{parentName:"li"},"Add-Migration")," \u65f6\u5019\u62a5\u7a7a\u5f02\u5e38\u95ee\u9898\uff0c\u539f\u56e0\u662f\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"PM")," \u73af\u5883\u4e2d\u4e0d\u5b58\u5728\u6839\u670d\u52a1",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/0853e74de90718fce9c0892e2ee4da597f62a918"},"0853e74")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5b9a\u65f6\u4efb\u52a1\u6267\u884c\u5f02\u5e38\u540e\u5f02\u5e38\u4e00\u76f4\u9a7b\u7559\u5185\u5b58\u95ee\u9898\uff0c\u4fee\u6b63\u4e3a\u6267\u884c\u6210\u529f\u81ea\u52a8\u6e05\u7a7a\u8fc7\u53bb\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/197a62bb4a7df34eb2c0dbda65121e9cf00d905c"},"197a62b")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Jwt")," \u62d3\u5c55\u5305\u4e0d\u6b63\u786e\u7684\u4ee3\u7801\u5bfc\u81f4 IOptions \u5931\u6548",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I46LUP"},"#I46LUP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u679a\u4e3e ",(0,l.kt)("inlineCode",{parentName:"li"},"Schema")," \u8fc7\u6ee4\u5668\u4e0d\u8f93\u51fa\u503c\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I46LON"},"#I46LON")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/404"},"!404")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u5904\u7406\u975e ",(0,l.kt)("inlineCode",{parentName:"li"},"int")," \u7c7b\u578b\u679a\u4e3e\u8f6c\u6362 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I46QJ9"},"#I46QJ9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u89c6\u56fe\u5f15\u64ce\u7f16\u8bd1\u6a21\u677f\u751f\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"dll")," \u540e\u518d\u6b21\u52a0\u8f7d\u51fa\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"IL")," \u683c\u5f0f\u5316\u9519\u8bef\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/ff52d383718b4d34968619f17c9d54d8718b4f3f"},"ff52d38")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u7ba1\u9053 ",(0,l.kt)("inlineCode",{parentName:"li"},"Channel")," \u8bfb\u53d6\u5668\u65e0\u6cd5\u91ca\u653e ",(0,l.kt)("inlineCode",{parentName:"li"},"Handler")," \u5bf9\u8c61\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/10f4a900ee558a29f40ae21366a0eba83eceb3eb"},"10f4a90")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker Services")," \u4e0b\u65e5\u5fd7\u4e0d\u8f93\u51fa\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/c48254822c09092906ef77f04d54497e27665a92"},"c482548")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"multipart/form-data")," \u7c7b\u578b\u5bf9\u63a5\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u4e0a\u4f20\u6587\u4ef6 \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/d9bad0320cc4a204e24bc3a070517ebce4cdc5d7"},"d9bad03")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5de5\u4f5c\u5355\u5143\u4e0a\u4e0b\u6587\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u5171\u4eab\u4e8b\u52a1\u5931\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/006d439de3357d4d58ea6d7d3f9d51771a7b604e"},"006d439")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u679a\u4e3e\u503c\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"GET")," \u8bf7\u6c42\u4e2d ",(0,l.kt)("inlineCode",{parentName:"li"},"Schema")," \u663e\u793a\u4e0d\u6b63\u786e\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/fb72fd7c98de5bf2246dd1bf08200152bd7ab7a0"},"fb72fd7")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"404")," \u4e0d\u8d70\u5f02\u5e38\u8fc7\u6ee4\u5668\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/423"},"!426")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea\u5b9a\u4e49\u4e8b\u4ef6\u603b\u7ebf\u5e76\u53d1\u60c5\u51b5\u4e0b\u8c03\u7528\u5b8c\u6210\u540e\u65e0\u6cd5\u6b63\u786e\u5904\u7406\u961f\u5217\u6570\u636e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/429"},"!429")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"v2.19+")," \u7248\u672c\u4e4b\u540e\u6a21\u5757\u5316\u5f00\u53d1\u52a0\u8f7d\u5916\u90e8\u7a0b\u5e8f\u96c6\u5931\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/433"},"!433")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5b9a\u65f6\u4efb\u52a1 SpareTime \u9891\u7e41\u68c0\u67e5\u5bfc\u81f4 CPU \u589e\u9ad8\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/aa0a2eec95f6ed2b74c681877498900726267d82"},"aa0a2ee")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7279\u522b\u9e23\u8c22")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/YaChengMu"},"YaChengMu"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v218\u5df2\u53d1\u5e03"},"v2.18\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Tools.CommandLine")," \u62d3\u5c55\u5e93 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/tree/v4/tools/Furion.Tools/Furion.Tools.CommandLine"},"\u67e5\u770b\u6e90\u7801")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u57fa\u4e8e ",(0,l.kt)("inlineCode",{parentName:"li"},"AsyncLocal")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"CallContext")," \u5b9e\u73b0 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/9057a212aab8057b668086bd14369fa68ce120df"},"9057a21")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u53ef\u914d\u7f6e\u8bf7\u6c42\u5f02\u5e38\u91cd\u8bd5\u7b56\u7565 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/656da87a667c2da7d82425cdcd47146e99602d65"},"656da87")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"OnRequestFailded")," \u4e8b\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/4a3da4ba2c69380fe5f8c2fda80054544c0a3468"},"4a3da4b")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"del"},"Scoped")," \u6240\u6709\u5e26\u8fd4\u56de\u503c\u65b9\u6cd5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/656da87a667c2da7d82425cdcd47146e99602d65"},"656da87")," - ","\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\u5728 ",(0,l.kt)("inlineCode",{parentName:"strong"},"ConfigureService")," \u4e2d\u8c03\u7528 ",(0,l.kt)("inlineCode",{parentName:"strong"},"App.GetOptions<>()")," \u83b7\u53d6\u914d\u7f6e\u903b\u8f91")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/afa4ac347152ccac37bd1d0f9af1e8ffb665a662"},"afa4ac3"))))),(0,l.kt)("blockquote",null,(0,l.kt)("p",{parentName:"blockquote"},"\u5728\u8fc7\u53bb\uff0c\u5f88\u591a\u5f00\u53d1\u8005\u603b\u662f\u559c\u6b22\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u914d\u7f6e\u670d\u52a1\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},"ConfigureService")," \u65b9\u6cd5\u4e2d\u89e3\u6790\u670d\u52a1\uff0c\u8fd9\u6837\u5bfc\u81f4\u5185\u5b58\u5b58\u5728\u6ea2\u51fa\u98ce\u9669\uff0cGC \u65e0\u6cd5\u56de\u6536\u3002\n\u6b63\u786e\u7684\u65b9\u5f0f\u662f\u5c3d\u53ef\u80fd\u7684\u907f\u514d ",(0,l.kt)("inlineCode",{parentName:"p"},"ConfigureService")," \u4e2d\u89e3\u6790\u670d\u52a1\u3002",(0,l.kt)("strong",{parentName:"p"},"\u5982\u679c\u9700\u8981\u5728\u3010\u542f\u52a8\u65f6\u3011\u83b7\u53d6 ",(0,l.kt)("inlineCode",{parentName:"strong"},"\u914d\u7f6e\u9009\u9879"),"\uff0c\u8bf7\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"strong"},"App.GetConfig(\u8def\u5f84, true)")," \u4ee3\u66ff ",(0,l.kt)("inlineCode",{parentName:"strong"},"App.GetOptions")),"\u3002")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," v2.16+ \u7248\u672c\u91cd\u6784 ",(0,l.kt)("inlineCode",{parentName:"li"},"AppDbContextBuilder")," \u4e4b\u540e\u5199\u9519\u5b9e\u4f53\u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I45E6M"},"#I45E6M")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u5355\u4e2a\u503c\u5e8f\u5217\u5316\u9519\u8bef\u5904\u7406\u65b9\u5f0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3282eba2cecb505e339ef3f9c8e823f84dcb43f0"},"3282eba")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," v2.17.3+ \u5355\u5143\u6d4b\u8bd5\u521b\u5efa ",(0,l.kt)("inlineCode",{parentName:"li"},"TestServer")," bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I45JR3"},"#I45JR3")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Retry.Invoke")," \u6b63\u5e38\u65b9\u6cd5\u6b7b\u5faa\u73af bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/392"},"!392")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5237\u65b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u751f\u6210\u65b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u5b58\u5728\u6570\u7ec4/\u96c6\u5408\u7c7b\u578b\u5bfc\u81f4 ",(0,l.kt)("inlineCode",{parentName:"li"},"Key")," \u91cd\u590d\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/aeea2b1b19434f3171bd1c77be057ca36ecf9be2"},"aeea2b1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u5e8f\u5217\u5316\u5f15\u7528\u7c7b\u578b\u5bf9\u8c61\uff08\u4e0d\u542b ",(0,l.kt)("inlineCode",{parentName:"li"},"string"),"\uff09\u4e0d\u6b63\u786e\u7684\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/93cf63a023f3372b80edb5debc46271d2281318a"},"93cf63a")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u9ed8\u8ba4\u79df\u6237\u5c5e\u6027\u53d7\u5de5\u4f5c\u5355\u5143\u5f71\u54cd\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/e51557fdf37ae5646b2ea37c227c970eccdbed38"},"e51557f")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5305\u7ba1\u7406\u5de5\u5177\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6a21\u677f\u5f15\u64ce\u3001",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u64cd\u4f5c\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"\u6570\u636e\u5e93\u4e0a\u4e0b\u6587")," \u7b49\u7b49\u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v217\u5df2\u53d1\u5e03"},"v2.17\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IPC\uff08Inter-Process Communication\uff0c\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff09")," \u6a21\u5757\u529f\u80fd\uff0c\u76ee\u524d\u63d0\u4f9b\u8fdb\u7a0b\u5185\u901a\u4fe1\u548c\u5171\u4eab\u5185\u5b58\u8fdb\u7a0b\u5916\u901a\u8baf ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/tree/v4/framework/Furion/ProcessChannel"},"ProcessChannel")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"application/xml")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"text/xml")," \u9ed8\u8ba4\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/4753a1aed527a6282fe6c05036de9d50bd3b3dd8"},"4753a1a")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u63a7\u5236\u53f0\u5168\u5c40\u5f02\u5e38\u62e6\u622a ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/4a4fe1f40e1856ea36a0c0d19ca625d3f7bf95b7"},"4a4fe1f")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301\u81ea\u5b9a\u4e49 ",(0,l.kt)("inlineCode",{parentName:"li"},".json")," \u914d\u7f6e\u6587\u4ef6\u626b\u63cf\u76ee\u5f55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/3e2910a8b775fb6323e293b020bbe7cdfb4c6436"},"3e2910a")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301\u6570\u636e\u5e93\u5b9e\u4f53\u63a5\u53e3\u663e\u5f0f\u5b9e\u73b0\u63a5\u53e3\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/9610a0a481f4f78770bc2fc3ed4cabbef2a8f937"},"9610a0a")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u63a7\u5236\u53f0\u5e94\u7528\u7a0b\u5e8f\u5168\u5c40\u62e6\u622a ",(0,l.kt)("inlineCode",{parentName:"li"},"[IfException]")," \u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/4a4fe1f40e1856ea36a0c0d19ca625d3f7bf95b7"},"4a4fe1f")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4f9d\u8d56\u6ce8\u5165\u6a21\u5757\u63a5\u53e3\u53ef\u4ee5\u9650\u5236\u5b9e\u73b0\u7c7b\u751f\u5b58\u5468\u671f\uff0c\u5b9e\u73b0\u7c7b\u4e5f\u652f\u6301\u590d\u5199\u751f\u5b58\u5468\u671f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/d2ce089130300cdd8b1bc6792f325c5d38ee9404"},"d2ce089")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Oops.Retry()")," \u91cd\u8bd5\u7b56\u7565\u529f\u80fd\u81f3\u65b0\u7c7b\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"Retry.Invoke()")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/6a7bbd0b30a653b9a42d340a63520485aa6bbfa4"},"6a7bbd0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"del"},"IHttpContextAccessor.SigninToSwagger()")," \u62d3\u5c55"),"\uff0c\u8bf7\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"IHttpContextAccessor.HttpContext.SigninToSwagger()"),"\uff0c\u9000\u51fa\u4e5f\u4e00\u6837"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},"\u5168\u5c40\u5904\u7406 ",(0,l.kt)("inlineCode",{parentName:"del"},"Request Body")," \u91cd\u590d\u8bfb\u5904\u7406 ",(0,l.kt)("inlineCode",{parentName:"del"},"Request.EnableBuffering()"))," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/d92c24bdb43bfb01643007ebb6a4ee42a5c738e9"},"d92c24b")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u89c4\u8303\u5316\u72b6\u6001\u7801\u8fc7\u6ee4\u903b\u8f91\u9519\u8bef\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I44JYS"},"#I44JYS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u975e\u5173\u7cfb\u578b\u6570\u636e\u5e93\uff08\u5185\u5b58\u6570\u636e\u5e93\uff09\u6ce8\u518c\u53ca\u64cd\u4f5c\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/e1676512a54374427bedbde17cd8cb59d7852557"},"e167651")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u9ed8\u8ba4\u5e8f\u5217\u5316\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/a55603bf7ed109296375dbeffc31591a6f8f8e49"},"a55603b")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5b9a\u65f6\u4efb\u52a1\u96f6\u70b9/\u6574\u70b9\u63d0\u524d\u4e00\u79d2\u89e6\u53d1\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4321L"},"#I4321L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u53cb\u597d\u5f02\u5e38\u5728\u5b50\u7c7b\u91cd\u5199\u62bd\u8c61\u7c7b\u65b9\u6cd5\u5185\u90e8\u629b\u5f02\u5e38\u65e0\u6cd5\u83b7\u53d6\u7684\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/4a4fe1f40e1856ea36a0c0d19ca625d3f7bf95b7"},"4a4fe1f")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4fee\u590d\u975e Web \u9879\u76ee\u629b\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/4a4fe1f40e1856ea36a0c0d19ca625d3f7bf95b7"},"4a4fe1f")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u5b9e\u4f53\u6a21\u578b\u8d34 ",(0,l.kt)("inlineCode",{parentName:"li"},"[NotMapper]")," \u7279\u6027\u65e0\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I44MNO"},"#I44MNO")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," Swagger \u751f\u6210\u6cdb\u578b SchemaIds \u9ed8\u8ba4\u8fde\u63a5\u7b26\uff0c\u7531 ",(0,l.kt)("inlineCode",{parentName:"li"},"Of")," \u6539\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"_")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/81946b64e81d9e290f80cd5bcebdb69c99001153"},"81946b6"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v216\u5df2\u53d1\u5e03"},"v2.16\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"MVC")," \u63a7\u5236\u5668\u652f\u6301\u89c4\u8303\u5316\u5904\u7406 ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I427Z2"},"#I427Z2"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"throw Oops.Bah()")," \u629b\u51fa\u4e1a\u52a1\u5f02\u5e38\uff08\u72b6\u6001\u7801 ",(0,l.kt)("inlineCode",{parentName:"li"},"400"),"\uff09"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"UnifyResultSettings")," \u89c4\u8303\u5316 ",(0,l.kt)("inlineCode",{parentName:"li"},"json")," \u914d\u7f6e\u9009\u9879 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I42NY7"},"#I42NY7")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u591a\u8bed\u8a00\u81ea\u5b9a\u4e49\u914d\u7f6e\u8d44\u6e90\u6587\u4ef6\u540d\u53ca\u81ea\u5b9a\u4e49\u7a0b\u5e8f\u96c6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I434YJ"},"#I434YJ")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u89c4\u8303\u5316\u7ed3\u679c ",(0,l.kt)("inlineCode",{parentName:"li"},"IUnifyResultProvider")," \u53c2\u6570 ",(0,l.kt)("strong",{parentName:"li"},"\uff08\u7834\u574f\u6027\u66f4\u6539\uff09")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I427Z2"},"#I427Z2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IJsonSerializerProvider")," \u63a5\u53e3\u53c2\u6570\uff0c\u53bb\u6389 ",(0,l.kt)("inlineCode",{parentName:"li"},"inherit")," \u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/a55603bf7ed109296375dbeffc31591a6f8f8e49"},"a55603b"))))),(0,l.kt)("details",{style:{marginLeft:50}},(0,l.kt)("summary",null,"\u67e5\u770b\u66f4\u6539"),(0,l.kt)("div",null,(0,l.kt)("admonition",{title:"\u65b0\u7248\u672c\u81ea\u5b9a\u4e49\u89c4\u8303\u5316\u7ed3\u679c",type:"important"},(0,l.kt)("pre",{parentName:"admonition"},(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {15-16}",showLineNumbers:!0,"":!0,"{15-16}":!0},'using Furion.DataValidation;\nusing Furion.DependencyInjection;\nusing Furion.UnifyResult.Internal;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Mvc.Filters;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Furion.UnifyResult\n{\n /// \n /// RESTful \u98ce\u683c\u8fd4\u56de\u503c\n /// \n [SuppressSniffer, UnifyModel(typeof(RESTfulResult<>))]\n public class RESTfulResultProvider : IUnifyResultProvider\n {\n /// \n /// \u5f02\u5e38\u8fd4\u56de\u503c\n /// \n /// \n /// \n /// \n public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata)\n {\n return new JsonResult(RESTfulResult(metadata.StatusCode, errors: metadata.Errors));\n }\n\n /// \n /// \u6210\u529f\u8fd4\u56de\u503c\n /// \n /// \n /// \n /// \n public IActionResult OnSucceeded(ActionExecutedContext context, object data)\n {\n return new JsonResult(RESTfulResult(StatusCodes.Status200OK, true, data));\n }\n\n /// \n /// \u9a8c\u8bc1\u5931\u8d25\u8fd4\u56de\u503c\n /// \n /// \n /// \n /// \n public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata)\n {\n return new JsonResult(RESTfulResult(StatusCodes.Status400BadRequest, errors: metadata.ValidationResult));\n }\n\n /// \n /// \u7279\u5b9a\u72b6\u6001\u7801\u8fd4\u56de\u503c\n /// \n /// \n /// \n /// \n /// \n public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings)\n {\n // \u8bbe\u7f6e\u54cd\u5e94\u72b6\u6001\u7801\n UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings);\n\n switch (statusCode)\n {\n // \u5904\u7406 401 \u72b6\u6001\u7801\n case StatusCodes.Status401Unauthorized:\n await context.Response.WriteAsJsonAsync(RESTfulResult(statusCode, errors: "401 Unauthorized")\n , App.GetOptions()?.JsonSerializerOptions);\n break;\n // \u5904\u7406 403 \u72b6\u6001\u7801\n case StatusCodes.Status403Forbidden:\n await context.Response.WriteAsJsonAsync(RESTfulResult(statusCode, errors: "403 Forbidden")\n , App.GetOptions()?.JsonSerializerOptions);\n break;\n default: break;\n }\n }\n\n /// \n /// \u8fd4\u56de RESTful \u98ce\u683c\u7ed3\u679c\u96c6\n /// \n /// \n /// \n /// \n /// \n /// \n private static RESTfulResult RESTfulResult(int statusCode, bool succeeded = default, object data = default, object errors = default)\n {\n return new RESTfulResult\n {\n StatusCode = statusCode,\n Succeeded = succeeded,\n Data = data,\n Errors = errors,\n Extras = UnifyContext.Take(),\n Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()\n };\n }\n }\n}\n'))))),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MVC")," \u63a7\u5236\u5668\u542f\u7528\u89c4\u8303\u5316\u5904\u7406\u540e\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"new Json({})")," \u5bf9\u8c61\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"null")," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I4354S"},"#I4354S")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u591a\u8bed\u8a00\u5e95\u5c42\u8bbe\u8ba1\uff0c\u53d6\u6d88\u9700\u8981\u521b\u5efa ",(0,l.kt)("inlineCode",{parentName:"li"},"Lang.cs")," \u7a7a\u7c7b\u7684\u8981\u6c42 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I434YJ"},"#I434YJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MiniProfiler")," \u6027\u80fd\uff0c\u51cf\u5c11\u4e0d\u5fc5\u8981\u7684\u76d1\u542c")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v215\u5df2\u53d1\u5e03"},"v2.15\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetDbRepository<\u5b9a\u4f4d\u5668>()")," \u9759\u6001\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I41MZP"},"#I41MZP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u7f3a\u7701\u5e8f\u5217\u5316\u914d\u7f6e\u9009\u9879 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I41PBW"},"#I41PBW")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea\u52a8\u626b\u63cf\u63a5\u53e3\u8fdb\u884c\u4f9d\u8d56\u6ce8\u5165\u83b7\u53d6\u9996\u4e2a\u63a5\u53e3\u9519\u8bef bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I41D1M"},"#I41D1M")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IRepository")," \u6ca1\u6709\u5b9e\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"IRepository")," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I41MZP"},"#I41MZP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u7f3a\u7701\u5e8f\u5217\u5316 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I41PBW"},"#I41PBW")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4fee\u590d ",(0,l.kt)("inlineCode",{parentName:"li"},"AppDbContext.Tenant")," \u591a\u79df\u6237\u7a7a\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I421DA"},"#I421DA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker Service")," \u591a\u4e2a ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker")," \u5b9a\u65f6\u4efb\u52a1\u963b\u585e\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/82a79cce0a3d9b09f4090b7363c3b78327c76846"},"82a79cc")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Jwt")," \u81ea\u52a8\u5237\u65b0\u673a\u5236\u65f6\u533a\u5904\u7406\u95ee\u9898\uff0c\u4e3b\u8981\u9488\u5bf9\u56fd\u5916\u7528\u6237 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I41UB1"},"#I41UB1")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/82a79cce0a3d9b09f4090b7363c3b78327c76846"},"82a79cc")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("strong",{parentName:"li"},"\u7cfb\u7edf\u542f\u52a8\u6027\u80fd\uff0c\u4ece 106M \u51cf\u5c11\u5230 84M")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("strong",{parentName:"li"},"\u5927\u91cf\u5e95\u5c42\u4ee3\u7801\uff0c\u5305\u5927\u5c0f\u4ece 391Kb \u51cf\u5c11\u5230 350Kb\uff08\u4e0d\u5e26\u6ce8\u91ca\u7248\u672c\u4ec5 64Kb\uff09"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v213v214\u5df2\u53d1\u5e03"},"v2.13/v2.14\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7b80\u6613\u5b57\u7b26\u4e32\u6a21\u677f\u529f\u80fd\uff0c\u652f\u6301\u8fdc\u7a0b\u8bf7\u6c42\u3001\u6570\u636e\u5e93\u6a21\u5757\u3001\u65e5\u5fd7\u6a21\u5757\u3001\u4e8b\u4ef6\u603b\u7ebf\u6a21\u5757\u3001\u5b9a\u65f6\u4efb\u52a1\u6a21\u5757\u3001\u5f02\u5e38\u6a21\u5757\u3001\u6570\u636e\u6821\u9a8c\u6a21\u5757 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I402BL"},"#I402BL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"404")," \u72b6\u6001\u7801\u89c4\u8303\u5316\u9ed8\u8ba4\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I408F5"},"#I408F5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b9a\u65f6\u4efb\u52a1 ",(0,l.kt)("inlineCode",{parentName:"li"},"ISpareTimeWorker")," \u58f0\u660e\u65b9\u5f0f\u652f\u6301\u5f02\u6b65\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I40KWR"},"#I40KWR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u81ea\u52a8\u914d\u7f6e\u4e8c\u7ea7\u865a\u62df\u76ee\u5f55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/354"},"!354")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," ",(0,l.kt)("strong",{parentName:"li"},"\u6846\u67b6\u4f9d\u8d56 ",(0,l.kt)("inlineCode",{parentName:"strong"},"SDK")," \u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},".NET 5.0.8")," \u7248\u672c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"del"},"Db.GetNewDbContext()")," \u9759\u6001\u65b9\u6cd5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I400BK"},"#I400BK")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("del",{parentName:"li"},"\u6570\u636e\u5e93\u6a21\u5757\u65f6\u6001\u8868\u62d3\u5c55\u652f\u6301")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I405HI"},"#I405HI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IJsonSerializerProvider")," \u63a5\u53e3\u53c2\u6570\uff0c\u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"li"},"inherit")," \u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ZQU5"},"#I3ZQU5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AppSettings")," \u914d\u7f6e\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"LogEntityFrameworkCoreSqlExecuteCommand")," \u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"OutputOriginalSqlExecuteLog")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I40VVE"},"#I40VVE")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker Services")," \u5b9a\u65f6\u4efb\u52a1\u8fb9\u754c\u503c\u95ee\u9898\u5bfc\u81f4\u8df3\u8fc7\u5355\u6b21\u4efb\u52a1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I405NI"},"#I405NI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker Services")," \u72ec\u7acb\u53d1\u5e03\u540e\u7a0b\u5e8f\u96c6\u626b\u63cf\u5931\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ZH3X"},"#I3ZH3X")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u5982\u679c\u914d\u7f6e\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"Client")," \u5ba2\u6237\u7aef\u4f46\u4f20\u5165\u4e86\u7a7a ",(0,l.kt)("inlineCode",{parentName:"li"},"RequestUrl")," \u5730\u5740\u5bfc\u81f4\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I40BC6"},"#I40BC6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u89c4\u8303\u5316\u7ed3\u679c\u7be1\u6539\u975e\u77ed\u8def\u7aef\u72b6\u6001\u7801\u51fa\u73b0\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I408F5"},"#I408F5")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.GetServiceProvider(type)")," \u89e3\u6790\u670d\u52a1\u6027\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I40KXN"},"#I40KXN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u89c6\u56fe\u5f15\u64ce\u4fdd\u5b58\u6210\u6587\u4ef6\u6d41\u9ed8\u8ba4\u7f13\u5b58\u533a\u5927\u5c0f\uff0c\u4ece ",(0,l.kt)("inlineCode",{parentName:"li"},"4096")," \u63d0\u5347\u81f3 ",(0,l.kt)("inlineCode",{parentName:"li"},"8192")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I40KH5"},"#I40KH5"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v210211212-\u5df2\u53d1\u5e03"},"v2.10/2.11/2.12 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("blockquote",null,(0,l.kt)("p",{parentName:"blockquote"},"\u8be5\u7248\u672c\u6709\u591a\u4e2a\u7834\u574f\u6027\u66f4\u6539\uff0c\u66f4\u65b0\u65f6\u8bf7\u8ba4\u771f\u67e5\u770b\u3002")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.Configuration.Reload()")," \u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XYI8"},"#I3XYI8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ISubscribeHandler")," \u652f\u6301\u5f02\u6b65\u65b9\u6cd5\u5b9a\u4e49 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XYHJ"},"#I3XYHJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"app.UseUnifyResultStatusCodes()")," \u53ef\u914d\u7f6e\u4fee\u6539\u8fd4\u56de\u72b6\u6001\u7801 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VZQH"},"#I3VZQH")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u6dfb\u52a0\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"User-Agent")," \u5934 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3W17C"},"#I3W17C")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u9ad8\u7ea7\u4ee3\u7406\u5207\u6362\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XFP6"},"#I3XFP6")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XDCR"},"#I3XDCR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b9a\u65f6\u4efb\u52a1 ",(0,l.kt)("inlineCode",{parentName:"li"},"CronFormat")," \u81ea\u52a8\u8bc6\u522b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3Y7GT"},"#I3Y7GT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql \u9ad8\u7ea7\u4ee3\u7406")," \u62e6\u622a\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3YHG4"},"#I3YHG4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u62e6\u622a\u8fdc\u7a0b\u8bf7\u6c42\u6240\u6709\u5f02\u5e38\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3YPDE"},"#I3YPDE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"Timeout")," \u8d85\u65f6\u65f6\u95f4 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3YPPK"},"#I3YPPK")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"li"},"RSA")," \u52a0\u5bc6\u7b97\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3YZNU"},"#I3YZNU")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/345"},"!345")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"DataTable")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"DataSet")," \u652f\u6301\u4e0d\u6307\u5b9a\u5f3a\u7c7b\u578b\u8fd4\u56de ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3Z6RI"},"#I3Z6RI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u5b57\u7b26\u4e32\u62d3\u5c55\u65b9\u6cd5\u8bbe\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"Timeout")," \u8d85\u65f6\u65f6\u95f4 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ZKWF"},"#I3ZKWF")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u9ad8\u7ea7\u4ee3\u7406 ",(0,l.kt)("inlineCode",{parentName:"li"},"[Timeout]")," \u7279\u6027\uff0c\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ZKWF"},"#I3ZKWF")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"FakeDelete")," \u5047\u5220\u9664/\u8f6f\u5220\u9664\u6240\u6709\u529f\u80fd ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I3XKII"},"#I3XKII"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("strong",{parentName:"li"},"\u79fb\u9664 ",(0,l.kt)("inlineCode",{parentName:"strong"},"PBKDF2")," \u52a0\u5bc6\u7b97\u6cd5 ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I3Z0IO"},"#I3Z0IO"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},"\u8fdc\u7a0b\u8bf7\u6c42\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4\u5355\u4f4d\u7531 ",(0,l.kt)("inlineCode",{parentName:"strong"},"\u5206\u949f")," \u6539\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},"\u79d2")," ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I3YPPK"},"#I3YPPK"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"IJsonSerializerProvider")," \u63a5\u53e3\u53c2\u6570\uff0c\u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"strong"},"inherit")," \u53c2\u6570 ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I3ZQU5"},"#I3ZQU5"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[NonAutomatic]")," \u7279\u6027\u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"[Manual]")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XKKX"},"#I3XKKX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[NotChangedListener]")," \u7279\u6027\u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"[SuppressChangedListener]")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XKLZ"},"#I3XKLZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[ManualSaveChanges]")," \u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"[ManualCommit]")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XKNP"},"#I3XKNP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"DbContext.TenantIdQueryFilterExpression")," \u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},"DbContext.BuildTenantQueryFilter")," ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I3XKTB"},"#I3XKTB"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[SkipScan]")," \u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"[SuppressSniffer]")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XN5N"},"#I3XN5N")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[SkipProxy]")," \u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"[SuppressProxy]")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XN7O"},"#I3XN7O")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u6267\u884c\uff0c\u6027\u80fd\u63d0\u5347 20% ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3W33U"},"#I3W33U")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u52a8\u6001 WebAPI \u626b\u63cf\u63a7\u5236\u5668\u6ca1\u6709\u5c4f\u853d\u6ca1\u6709\u6ce8\u518c\u7684\u7b2c\u4e09\u65b9\u63a7\u5236\u5668 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3Y7TJ"},"#I3Y7TJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u8bbe\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"TablePrefix")," \u65e0\u6548\uff1a ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3Y57Q"},"#I3Y57Q")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4fee\u590d\u5b9a\u65f6\u4efb\u52a1\u4f7f\u7528\u5f02\u6b65\u59d4\u6258\u5bfc\u81f4\u7a0b\u5e8f\u7ec8\u6b62 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XVZ0"},"#I3XVZ0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4e8b\u4ef6\u603b\u7ebf\u4e00\u4e2a ",(0,l.kt)("inlineCode",{parentName:"li"},"\u6d88\u606fid")," \u5bf9\u5e94\u591a\u4e2a ",(0,l.kt)("inlineCode",{parentName:"li"},"Handler")," \u53ea\u89e6\u53d1\u7b2c\u4e00\u4e2a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XYP0"},"#I3XYP0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},".ToPagedList()")," \u5206\u9875\u65b9\u6cd5\u4f20\u5165\u5c0f\u4e8e\u6216\u7b49\u4e8e 0 \u7684\u9875\u7801 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XNAN"},"#I3XNAN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," \u5e8f\u5217\u5316\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTimeOffset")," \u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XMOL"},"#I3XMOL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u7ee7\u627f ",(0,l.kt)("inlineCode",{parentName:"li"},"Serilog")," \u65e5\u5fd7\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker Service")," \u751f\u6210\u91cd\u590d\u65e5\u5fd7 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3WA0L"},"#I3WA0L")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/331"},"!331")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"\u7c98\u571f\u5bf9\u8c61")," \u52a8\u6001\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Clay")," \u7c7b\u578b bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3W9LW"},"#I3W9LW")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ValidationTypes.Numeric")," \u6821\u9a8c\u6570\u503c\u7c7b\u578b\u6b63\u5219\u8868\u8fbe\u5f0f\u9519\u8bef ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3WADS"},"#I3WADS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u547d\u4ee4\u53c2\u6570 ",(0,l.kt)("inlineCode",{parentName:"li"},"DbParameter")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"Value")," \u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," \u7c7b\u578b\u7684\u65f6\u5019\u4e14\u4e0d\u6307\u5b9a ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3YKM6"},"#I3YKM6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Oracle")," \u6570\u636e\u5e93\u5b58\u50a8\u8fc7\u7a0b ",(0,l.kt)("inlineCode",{parentName:"li"},"\u6e38\u6807\u53c2\u6570")," \u62a5\u9519\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ZBYE"},"#I3ZBYE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker Services")," \u91c7\u7528\u72ec\u7acb\u53d1\u5e03\u540e\u65e0\u6cd5\u6267\u884c\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ZH3X"},"#I3ZH3X")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4fee\u590d\u8fdc\u7a0b\u8bf7\u6c42\u5982\u679c\u65e0\u8fd4\u56de\u503c\u5e8f\u5217\u5316\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/348"},"!348")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"appsettings.json")," \u7b49\u81ea\u5b9a\u4e49\u914d\u7f6e\u6587\u4ef6\u4e2d\u6587\u547d\u540d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3YBFD"},"#I3YBFD")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u8fdc\u7a0b\u8bf7\u6c42\u914d\u7f6e\u547d\u540d\u5ba2\u6237\u7aef ",(0,l.kt)("inlineCode",{parentName:"li"},"BaseAddress")," \u5730\u5740\u517c\u5bb9\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3YCRH"},"#I3YCRH")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," \u6846\u67b6\u65e0\u7528\u4ee3\u7801\u3001\u4f18\u5316\u4ee3\u7801"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u975e Web")," \u73af\u5883\u4e0b\u6027\u80fd"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4f1a\u8bdd\u548c\u72b6\u6001\u7ba1\u7406 \u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3YI3G"},"#I3YI3G")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u8fdc\u7a0b\u8bf7\u6c42\u3001\u65e5\u5fd7\u3001\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u3001\u8fdc\u7a0b\u8bf7\u6c42\u3001",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u9ad8\u7ea7\u4ee3\u7406\u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u914d\u7f6e\u6587\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3Y2EV"},"#I3Y2EV")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"dapper")," \u591a\u4e2a\u6570\u636e\u6e90\u5982\u4f55\u7ee7\u627f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3WUOI"},"#I3WUOI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5173\u4e8e ",(0,l.kt)("inlineCode",{parentName:"li"},"SpareTime")," \u591a\u6b21\u6267\u884c\u95ee\u9898",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XEQU"},"#I3XEQU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u9009\u9879\u66f4\u6539\u901a\u77e5\uff08\u70ed\u66f4\u65b0\uff09\uff1a\u6570\u636e\u5e93\u91cc\u7684\u6570\u636e\u66f4\u6539\u4e86\u5982\u4f55\u901a\u77e5\u9009\u9879\u8fdb\u884c\u6539\u53d8\uff1f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3XYI8"},"#I3XYI8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SaaS")," \u591a\u79df\u6237\u6dfb\u52a0\u65f6\u65e0\u6cd5\u83b7\u53d6\u79df\u6237",(0,l.kt)("inlineCode",{parentName:"li"},"Id")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3Y5CF"},"#I3Y5CF")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u83b7\u53d6 ",(0,l.kt)("inlineCode",{parentName:"li"},"_httpContextAccessor.HttpContext")," \u4e3a\u7a7a",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3Y6BI"},"#I3Y6BI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Ubuntu")," \u4e2d\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"App.Configuration")," \u65b9\u6cd5\u8bfb\u53d6\u4e0d\u5230\u503c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3Y74H"},"#I3Y74H")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u4f5c\u7528\u57df\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3YHXP"},"#I3YHXP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"UnitofWork")," \u63d0\u4ea4\u4e8b\u52a1\uff0c\u53ef\u4ee5\u63d0\u4ea4\u6210\u529f\uff0c\u4f46\u662f\u7cfb\u7edf\u4f1a\u6709\u9519\u8bef ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3YIWU"},"#I3YIWU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6570\u636e\u5e93\u8bfb\u5199\u5206\u79bb--\u975e\u9ed8\u8ba4\u4e3b\u5e93\u7684\u4ece\u5e93\u968f\u673a\u8be5\u5982\u4f55\u914d\u7f6e\uff1f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3YVR7"},"#I3YVR7"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v290-\u5df2\u53d1\u5e03"},"v2.9.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("strong",{parentName:"li"},"\u5e94\u7528\u5168\u5c40\u672a\u6258\u7ba1\u8d44\u6e90\u76d1\u542c\uff0c\u5e76\u5b9e\u73b0\u7279\u5b9a\u65f6\u673a\u91ca\u653e\u975e\u6258\u7ba1\u8d44\u6e90")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VXAU"},"#I3VXAU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4e0d\u5305\u542b ",(0,l.kt)("inlineCode",{parentName:"li"},"EntityFramework.Core")," \u7248\u672c\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Pure")," \u5305",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VGW8"},"#I3VGW8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," swagger \u652f\u6301\u8bbe\u7f6e\u591a\u8bed\u8a00\u65b9\u5f0f\uff0c\u8bbe\u7f6e\u7684\u8bed\u8a00\u81ea\u52a8\u6dfb\u52a0\u5230 api \u5730\u5740\u540e\u9762 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VDTD"},"#I3VDTD")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u52a8\u6001 WebAPI \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"[FromRoute]")," \u975e\u5fc5\u586b\uff08\u9009\u586b\uff09\u53c2\u6570\u8bbe\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VFIM"},"#I3VFIM")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u52a8\u6001 WebAPI \u53c2\u6570\u652f\u6301\u914d\u7f6e\u8def\u7531\u7ea6\u675f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VFIR"},"#I3VFIR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MD5")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"DESC")," \u52a0\u5bc6\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u5927\u5199")," \u8f93\u51fa ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/326"},"#326")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u6240\u6709\u5305\u751f\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},".snupkg")," \u5305\uff0c\u652f\u6301\u5f00\u53d1\u9636\u6bb5\u76f4\u63a5\u8c03\u8bd5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u6240\u6709\u5305\u6e90\u7801 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VFIX"},"#I3VFIX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"repository.BuildChange()")," \u65b9\u6cd5\u7684\u8fd4\u56de\u503c\uff0c\u591a\u8fd4\u56de\u4e00\u4e2a ",(0,l.kt)("inlineCode",{parentName:"li"},"IServiceScope")," \u5bf9\u8c61 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VX3D"},"#I3VX3D")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT")," \u5237\u65b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u65b9\u6cd5 ",(0,l.kt)("inlineCode",{parentName:"li"},"AutoRefreshToken")," \u53c2\u6570 ",(0,l.kt)("inlineCode",{parentName:"li"},"days")," \u6539\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"minutes")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VXNB"},"#I3VXNB")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.GetOptionsSnapshot<>")," \u4ece\u6839\u670d\u52a1\u89e3\u6790\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VS2X"},"#I3VS2X")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4fee\u590d\u8fdc\u7a0b\u8bf7\u6c42\u5982\u679c\u51fa\u73b0\u5f02\u5e38\uff0c\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"Stream")," \u4e3a null \u5bfc\u81f4\u5f02\u5e38\u7684\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VSTU"},"#I3VSTU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5982\u679c\u5b9e\u4f53\u88ab\u8ddf\u8e2a\u540e\uff0c\u65e0\u6cd5\u6267\u884c\u5220\u9664\u64cd\u4f5c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3W08P"},"#I3W08P")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u8fd0\u884c\u65f6\u5185\u5b58\uff0c\u5b9e\u73b0\u8bf7\u6c42\u7ed3\u675f\u81ea\u52a8\u91ca\u653e\u672a\u6258\u7ba1\u8d44\u6e90 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VXAU"},"#I3VXAU")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App")," \u9759\u6001\u7c7b\u6587\u6863\u3001\u8fdc\u7a0b\u8bf7\u6c42\u6587\u6863\u3001\u5206\u8868\u5206\u5e93\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u52a8\u6001 WebAPI\uff0c\u81ea\u5b9a\u4e49\u6839\u636e\u65b9\u6cd5\u540d\u751f\u6210 ","[HttpMethod]"," \u89c4\u5219\u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VKQG"},"#I3VKQG")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"InsertAsync")," \u7684\u65f6\u5019\u63d0\u793a ",(0,l.kt)("inlineCode",{parentName:"li"},"ID")," \u4e3a\u7a7a ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VS7E"},"#I3VS7E")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"FirstOrDefault")," \u81ea\u52a8\u8fc7\u6ee4\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"TanantId")," \u5b57\u6bb5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3W0VH"},"#I3W0VH")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5bf9\u65b9\u63a5\u53e3\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpConnectionResponseContent")," \u8fdc\u7a0b\u8bf7\u6c42\u62ff\u4e0d\u5230\u8fd4\u56de\u503c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3W17C"},"#I3W17C")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u67e5\u8be2\u65b9\u6cd5 ",(0,l.kt)("inlineCode",{parentName:"li"},"FindOrDefault")," \u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3W830"},"#I3W830")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlNonQuery")," \u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"UnitOfWork")," \u5faa\u73af\u6267\u884c",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3W8WW"},"#I3W8WW")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u56e0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u914d\u7f6e\u95ee\u9898\uff0c\u5bfc\u81f4 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u4e2d\u4e0d\u80fd\u81ea\u52a8\u643a\u5e26 token \u6388\u6743\u7684\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3W934"},"#I3W934")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"SetBody")," \u53c2\u6570\u8bc6\u522b\u4e0d\u4e86",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3WBM1"},"#I3WBM1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Scoped.Create")," \u91cc\u6267\u884c ",(0,l.kt)("inlineCode",{parentName:"li"},"sql.SqlNonQuery()")," \u6216\u8005 ",(0,l.kt)("inlineCode",{parentName:"li"},"obj.insert()")," \u95ee\u9898",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3WB5O"},"#I3WB5O")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u8c03\u7528\u51fd\u6570\u6216\u5b58\u50a8\u8fc7\u7a0b\uff0c\u600e\u4e48\u51fa\u53c2\u6570\u636e\u81ea\u5b9a\u4e49\u5bf9\u8c61\uff1f\u5982 ",(0,l.kt)("inlineCode",{parentName:"li"},"Oracle"),"\u6570\u636e\u5e93\u7684\u6570\u7ec4\u6216\u8bb0\u5f55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3W71W"},"#I3W71W"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v270280-\u5df2\u53d1\u5e03"},"v2.7.0/2.8.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},'throw Oops.On("\u5f02\u5e38\u6d88\u606f")')," \u5e94\u7528\u591a\u8bed\u8a00\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UYC2"},"#I3UYC2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetMSRepository()")," \u83b7\u53d6\u4e3b\u4ece\u5e93\u4ed3\u50a8\u9759\u6001\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UBSJ"},"#I3UBSJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5de5\u4f5c\u5355\u5143\u7279\u6027\uff0c\u652f\u6301\u9759\u6001\u7c7b\u5f3a\u5236\u6027\u5f00\u542f\u5171\u4eab\u4e8b\u52a1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3S9N8"},"#I3S9N8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," \u6267\u884c ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u6a21\u5f0f\u6253\u5370\u65e5\u5fd7 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3SE8X"},"#I3SE8X")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u652f\u6301\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpClient")," \u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3SI17"},"#I3SI17")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"li"},"\u77ed ID")," \u751f\u6210\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3T7JP"},"#I3T7JP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[SensitiveDetection]")," \u652f\u6301\u914d\u7f6e\u66ff\u6362\u654f\u611f\u8bcd\u6c47 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3THIA"},"#I3THIA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SpecificationDocumentBuilder.DocumentGroups")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"SpecificationDocumentBuilder.CheckApiDescriptionInCurrentGroup(currentGroup, apiDescription)")," \u516c\u5f00\u65b9\u6cd5",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UDSY"},"#I3UDSY")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u81ea\u52a8\u626b\u63cf ",(0,l.kt)("inlineCode",{parentName:"li"},".json")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},".xml")," \u6587\u4ef6\u5e76\u52a0\u8f7d\u5230\u914d\u7f6e\u4e2d\u7684\u4ee3\u7801\u548c\u89c4\u5219\uff0c\u540c\u65f6\u79fb\u9664\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},".xml")," \u6587\u4ef6\u52a0\u8f7d\uff0c\u53ea\u4fdd\u7559 ",(0,l.kt)("inlineCode",{parentName:"li"},".json")," \u6587\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UJ3L"},"#I3UJ3L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u5206\u5e03\u5f0f\u8fde\u7eed ",(0,l.kt)("inlineCode",{parentName:"li"},"GUID")," \u4ee3\u7801 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UBK0"},"#I3UBK0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"Scoped.CreateUnitOfWork")," \u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},"Scoped.CreateUow")," ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I3SJPU"},"#I3SJPU"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JWTEncryption.Validate")," \u8fd4\u56de\u503c\uff0c\u652f\u6301\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"TokenValidationResult")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3S2ND"},"#I3S2ND")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[DataValidation]")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"[SensitiveDetection]")," \u591a\u8bed\u8a00\u5e94\u7528\u5931\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UH6U"},"#I3UH6U")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Scoped")," \u7cfb\u5217\u65b9\u6cd5\u5f02\u6b65\u51fa\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Task is cancel")," \u60c5\u51b5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3SJF6"},"#I3SJF6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Mysql")," \u6570\u636e\u5e93\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"ToPagedList")," \u65b9\u6cd5\u8fd4\u56de\u7684\u7ed3\u679c\u8fdb\u884c\u904d\u5386\u51fa\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"MySqlConnection is aleady use")," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3SJQ3"},"#I3SJQ3")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"tool/cli.psl")," \u6ca1\u6709\u5305\u542b\u9879\u76ee\u540d\u79f0 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3S1T6"},"#I3S1T6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u505a\u4e0a\u4f20\u6587\u4ef6\u65f6\uff0c\u6ca1\u6709\u4f20\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"Body"),"\uff0c\u7a0b\u5e8f\u76f4\u63a5\u8df3\u8fc7 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3TKFH"},"#I3TKFH")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"multipart/form-data")," \u5185\u5bb9\u5206\u5272\u7b26\u7f3a\u5931 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3TNO9"},"#I3TNO9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u4ee3\u7406\u62e6\u622a\u65b9\u5f0f\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpResponseMessage")," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3V161"},"#I3V161")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"repository.Database.SetCommandTimeout(600)")," \u65e0\u6cd5\u751f\u6548",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VAQS"},"#I3VAQS")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u652f\u6301\u89c4\u8303\u5316\u7ed3\u679c\u4e2d\u95f4\u4ef6\u5224\u65ad\u662f\u5426\u8df3\u8fc7\u89c4\u8303\u5316\u7ed3\u679c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3T2AA"},"#I3T2AA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u66f4\u65b0\u90e8\u5206\u5217 ",(0,l.kt)("inlineCode",{parentName:"li"},"UpdateIncludeNowAsync")," \u5177\u6709\u4e8c\u4e49\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RW9Q"},"#I3RW9Q")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("strong",{parentName:"li"},"\u6846\u67b6\u5e95\u5c42\u6027\u80fd\uff0c\u5927\u5927\u51cf\u5c11\u5185\u5b58\u5360\u7528\u548c\u6ea2\u51fa\u60c5\u51b5\uff0c\u542f\u52a8\u5185\u5b58\u4ece\u4e4b\u524d ",(0,l.kt)("inlineCode",{parentName:"strong"},"136M")," \u4e0b\u5c06\u5230 ",(0,l.kt)("inlineCode",{parentName:"strong"},"86M"))),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u5220\u9664\u65e0\u7528\u4ee3\u7801\uff0c\u4f18\u5316\u4e0d\u89c4\u8303\u547d\u540d\u7b49"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Inject")," \u8bf4\u660e\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3TITA"},"#I3TITA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," 4.2.9 \u7684\u793a\u4f8b\u4ee3\u7801\u6587\u6863\uff0c\u65b9\u6cd5\u6ca1\u6709\u653e\u5728 class \u4e2d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3S9T5"},"#I3S9T5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u89c4\u8303\u5316\u7ed3\u679c 6.5.6 \u591a\u5206\u7ec4\u6392\u5e8f\u56fe\u7247\u5f15\u7528\u9519\u8bef ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UBOQ"},"#I3UBOQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u9759\u6001\u7c7b ",(0,l.kt)("inlineCode",{parentName:"li"},"Scoped")," \u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"MasterDbContextLocator")," \u4e0d\u968f\u81ea\u5b9a\u4e49\u7684\u53c2\u6570\u751f\u6210 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3SDBB"},"#I3SDBB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u4e8b\u4ef6\u603b\u7ebf\u4e2d\u8ba2\u9605\u5904\u7406\u7a0b\u5e8f\u7c7b\u83b7\u53d6\u4e0d\u5230\u7528\u6237\u4fe1\u606f\uff0c\u8fd9\u4e2a\u6b63\u5e38\u5417 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3SS0U"},"#I3SS0U")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5728\u6709\u591a\u79df\u6237\u8fc7\u6ee4\u5668\u7684\u60c5\u51b5\u4e0b\uff0c\u662f\u5426\u6709\u4e00\u79cd\u65b9\u5f0f\u67e5\u8be2\u5168\u91cf\u7684\u6570\u636e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3T0VI"},"#I3T0VI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," mysql \u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},'&"tools/cli.ps1"')," \u9875\u9762\u5316\u52a0\u8f7d\u8868\u7ed3\u6784\u5931\u8d25 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3T4F8"},"#I3T4F8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5176\u4ed6 Web \u5c42\u7684 Startup \u4f18\u5148\u6267\u884c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3T8IP"},"#I3T8IP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u8f85\u52a9\u89d2\u8272\u670d\u52a1\u5b9e\u73b0\u5efa\u8bae ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3T906"},"#I3T906")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5f00\u542f ",(0,l.kt)("inlineCode",{parentName:"li"},"easy connection")," \u540e\u540c\u4e00\u5185\u7f51\u5730\u5740\u6d4f\u89c8\u5668\u53ef\u4ee5\u6b63\u5e38\u8bbf\u95ee\uff0c\u8fdc\u7a0b\u8bf7\u6c42\u5219\u65e0\u6cd5\u8bbf\u95ee",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3TA2U"},"#I3TA2U")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"scope.ServiceProvider.GetService"),"\u4e0d\u5b58\u5728 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3TQMV"},"#I3TQMV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u80fd\u5426\u5728 WPF \u9879\u76ee\u4e2d\u4f7f\u7528\u5462\uff1f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3TMCC"},"#I3TMCC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Dapper")," \u591a\u4e2a\u6570\u636e\u6e90 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3TM9B"},"#I3TM9B")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"L.GetSelectCulture()")," \u65b9\u6cd5\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3TQS4"},"#I3TQS4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5faa\u73af\u4e2d\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"IDGen.NextID()")," \u5f97\u5230\u7684\u7ed3\u679c\u5e76\u4e0d\u662f\u8fde\u7eed\u7684 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UAF6"},"#I3UAF6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6a21\u5757\u5316\u52a8\u6001\u52a0\u8f7d\u63d2\u4ef6\u652f\u6301\u901a\u914d\u7b26\u5339\u914d.dll ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UDT8"},"#I3UDT8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MVC")," \u6a21\u5f0f\uff0c\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"Controller")," \u91cc\u5feb\u6377\u65b9\u5f0f\u521b\u5efa ",(0,l.kt)("inlineCode",{parentName:"li"},"View")," \u9875\u9762\u51fa\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UFGB"},"#I3UFGB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6570\u636e\u5e93\u8fc1\u79fb\u6ca1\u6709\u79cd\u5b50\u6570\u636e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UI7G"},"#I3UI7G")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SpareTimeAttribute")," \u4e2d \u6839\u636e Cron \u8868\u8fbe\u5f0f \u81ea\u52a8\u5339\u914d Cron \u8868\u8fbe\u5f0f\u683c\u5f0f\u5316\u65b9\u5f0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3UTKQ"},"#I3UTKQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"workService")," \u96c6\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugar")," \u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3V8HJ"},"#I3V8HJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"sqlserver 2008")," \u5206\u9875\u62a5\u9519\u5982\u4f55\u89e3\u51b3\u5462 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3VF96"},"#I3VF96"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v250260-\u5df2\u53d1\u5e03"},"v2.5.0/2.6.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u865a\u62df\u6587\u4ef6\u670d\u52a1\uff0c\u652f\u6301\u7269\u7406\u6587\u4ef6\u548c\u5d4c\u5165\u8d44\u6e90\u6587\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RBR9"},"#I3RBR9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236\u4ed3\u50a8 ",(0,l.kt)("inlineCode",{parentName:"li"},"IMSRepository")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"IMSRepository")," \u4ed3\u50a8\uff0c\u53ef\u8fdb\u884c\u968f\u673a\u6216\u81ea\u5b9a\u4e49\u83b7\u53d6\u4ece\u5e93"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6570\u636e\u8131\u654f\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3R5ZF"},"#I3R5ZF")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"InsertOrUpdate")," \u4e00\u7cfb\u5217\u6570\u636e\u5e93\u64cd\u4f5c\u65b9\u6cd5")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RI9L"},"#I3RI9L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," \u6240\u6709\u5305\u542b ",(0,l.kt)("inlineCode",{parentName:"li"},"Exists")," \u5355\u8bcd\u7684\u6570\u636e\u5e93\u64cd\u4f5c\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RJ0T"},"#I3RJ0T")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u5206\u5e03\u5f0f GUID ",(0,l.kt)("inlineCode",{parentName:"li"},"IDGenerater")," \u9759\u6001\u7c7b\u540d\u79f0\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"IDGen")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RGUA"},"#I3RGUA")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8c03\u7528\u65b9\u6cd5\u9519\u8bef\uff0c\u8bf7\u6c42\u62a5\u6587\u5934 ",(0,l.kt)("inlineCode",{parentName:"li"},"Headers")," \u4e0d\u80fd\u6dfb\u52a0\u5230 ",(0,l.kt)("inlineCode",{parentName:"li"},"IHttpDispatchProxy")," \u7684\u5b50\u63a5\u53e3\u4e0a ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RAF7"},"#I3RAF7")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u5e94\u7528\u542f\u52a8\u6027\u80fd\uff0c\u51cf\u5c11\u5185\u5b58\u5206\u914d"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8131\u654f\u5904\u7406\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3R6WZ"},"#I3R6WZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6587\u4ef6\u7cfb\u7edf\u6587\u6863\u3001",(0,l.kt)("inlineCode",{parentName:"li"},"FS")," \u9759\u6001\u7c7b\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RCC4"},"#I3RCC4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236\u3001\u6570\u636e\u5e93\u4ed3\u50a8\u6587\u6863\u3001",(0,l.kt)("inlineCode",{parentName:"li"},"Db")," \u9759\u6001\u7c7b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3R3B6"},"#I3R3B6")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5173\u4e8e ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u96c6\u7fa4\u90e8\u7f72 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3R3J4"},"#I3R3J4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5347\u7ea7\u6700\u65b0\u6846\u67b6\u4ee5\u540e\uff0c \u6570\u636e\u5e93\u751f\u6210\u6a21\u578b\u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3R7TP"},"#I3R7TP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u4e8b\u52a1\u6267\u884c\u4e2d\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"SaveNow")," \u6267\u884c\u540e\u6709\u8b66\u544a ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RAJI"},"#I3RAJI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Hangfire")," \u4f7f\u7528\u4e8b\u52a1\u51fa\u73b0\u9519\u8bef ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ROQ5"},"#I3ROQ5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5982\u4f55\u5b9e\u73b0 cli \u4e0d\u6267\u884c\u67d0\u4e9b\u8868\u7684\u8fc1\u79fb\uff0cweb \u8bf7\u6c42\u53ef\u4ee5\u6b63\u5e38\u64cd\u4f5c\u5462\uff1f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ROU5"},"#I3ROU5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5728\u4f7f\u7528\u5b9a\u65f6\u4efb\u52a1\u65f6\u5019\u51fa\u73b0\u7684\u95ee\u9898\uff1a\u7ee7\u627f ",(0,l.kt)("inlineCode",{parentName:"li"},"ISpareTimeWorker")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RRZS"},"#I3RRZS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MySql")," \u65f6\u95f4\u5dee 8 \u5c0f\u65f6\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RSCO"},"#I3RSCO")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetRepository<>")," \u65b9\u6cd5\u7ed3\u5408 ",(0,l.kt)("inlineCode",{parentName:"li"},"[UnitOfWork]")," \u540e\u4e0d\u53ef\u7528 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RUK5"},"#I3RUK5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u4e8b\u52a1\u5f00\u542f\u5931\u8d25\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RYJY"},"#I3RYJY")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"DbProvider")," \u53ef\u52a8\u6001\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RYPE"},"#I3RYPE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"WorkService")," \u4f9d\u8d56\u6ce8\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"ISingleton")," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3RZ1L"},"#I3RZ1L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ISpareTimeWorker")," \u8fd0\u884c\u671f\u52a8\u6001\u4fee\u6539 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3S33Q"},"#I3S33Q"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v240-\u5df2\u53d1\u5e03"},"v2.4.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301\u81ea\u52a8\u52a0\u8f7d\u6a21\u5757\u5316/\u63d2\u4ef6 ",(0,l.kt)("inlineCode",{parentName:"li"},".xml")," \u6ce8\u91ca\u6587\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3Q7XY"},"#I3Q7XY")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AppDbContext.FailedAutoRollback")," \u5c5e\u6027\uff0c\u53ef\u914d\u7f6e\u4e8b\u52a1\u662f\u5426\u81ea\u52a8\u56de\u6eda ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3QOUS"},"#I3QOUS")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," ",(0,l.kt)("strong",{parentName:"li"},".NET 5 SDK \u4e3a 5.0.6 \u7248\u672c")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IJsonSerializerProvider.GetSerializerOptions()")," \u63a5\u53e3\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3QIJN"},"#I3QIJN")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"li"},"services.AddInject()")," \u65b9\u5f0f\u6ce8\u518c\uff0c\u6a21\u5757\u5316/\u63d2\u4ef6\u4e0d\u52a0\u8f7d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3Q7XH"},"#I3Q7XH")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u79cd\u5b50\u6570\u636e\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"null")," \u62a5\u7a7a\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3QCM5"},"#I3QCM5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"li"},"Clay.Object")," \u521b\u5efa\u7c98\u571f\u5bf9\u8c61\u540e\u5c5e\u6027\u53d8\u5c0f\u5199\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3QRV3"},"#I3QRV3")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u6846\u67b6\u5e95\u5c42\u6027\u80fd\uff0c\u51cf\u5c11\u5185\u5b58\u5360\u7528\uff0c\u63d0\u9ad8\u5e94\u7528\u521d\u59cb\u5316\u901f\u5ea6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/commit/92f8cc1"},"92f8cc1")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," JSON \u5e8f\u5217\u5316\u6587\u6863\u3001\u89c4\u8303\u5316\u7ed3\u679c\u6587\u6863\u3001\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"InsertOrUpdateNowAsync")," \u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3QKO5"},"#I3QKO5"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v230-\u5df2\u53d1\u5e03"},"v2.3.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Extras.DatabaseAccessor.MongoDB")," \u62d3\u5c55\u5305\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3PKST"},"#I3PKST")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u52a8\u6001\u7c98\u571f\u7c7b\u578b\u76f4\u63a5\u8f6c ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," \u6216 ",(0,l.kt)("inlineCode",{parentName:"li"},"dynamic")," \u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OY27"},"#I3OY27")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"li"},"Oops.Retry")," \u65b9\u6cd5\uff0c\u652f\u6301\u8bbe\u7f6e\u65b9\u6cd5\u8c03\u7528\u5931\u8d25\u8fdb\u884c\u91cd\u8bd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3PJKQ"},"#I3PJKQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JWTSettings")," \u914d\u7f6e\u8282\u70b9 ",(0,l.kt)("inlineCode",{parentName:"li"},"Algorithm"),"\uff0c\u7528\u4e8e\u914d\u7f6e\u52a0\u5bc6\u7b97\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3PQGV"},"#I3PQGV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"repository.EnsureTransaction()")," \u65b9\u6cd5\u786e\u4fdd\u5de5\u4f5c\u5355\u5143\u4e8b\u52a1\u6709\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3PVF1"},"#I3PVF1")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301 .NET 6.0.0 Preview 3 \u7248\u672c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3P2C7"},"#I3P2C7")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4f7f\u7528\u6570\u636e\u5e93\u751f\u6210\u6a21\u578b ",(0,l.kt)("inlineCode",{parentName:"li"},"tools/cli.ps1"),"\uff0c\u4ece\u6570\u636e\u5e93\u8868\u751f\u6210\u7684\u5b9e\u4f53\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3PL18"},"#I3PL18")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8d34\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"[NonUntify]")," \u7279\u6027\u540e\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"Example Value")," \u6ca1\u6709\u5339\u914d\u6b63\u786e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3PK0L"},"#I3PK0L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SpareTimer.Tally")," \u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"Cron")," \u8868\u8fbe\u5f0f\u4e2d\u8ba1\u6570\u65e0\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3PWSE"},"#I3PWSE")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6846\u67b6\u9ed8\u8ba4\u5e8f\u5217\u5316\u5e94\u8be5\u4ece\u914d\u7f6e\u4e2d\u8bfb\u53d6\uff0c\u800c\u975e\u624b\u52a8\u7f16\u5199 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3P1SJ"},"#I3P1SJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugar")," \u62d3\u5c55\u5e93\uff0c\u652f\u6301\u975e\u6cdb\u578b\u4ed3\u50a8\u83b7\u53d6\u4e0a\u4e0b\u6587\u64cd\u4f5c\u5bf9\u8c61 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3PK2N"},"#I3PK2N")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u652f\u6301\u5206\u5e03\u5f0f\u5185\u5b58\u7f13\u5b58\u53ef\u914d\u7f6e\u5316 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3POKD"},"#I3POKD")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u6587\u6863")," \u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"JWTSettings")," \u914d\u7f6e\u72ec\u7acb\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3PQGW"},"#I3PQGW")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u8f6f\u5220\u9664\u5982\u679c\u6570\u636e\u4e0d\u5b58\u5728\uff0c\u5219\u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3PTVB"},"#I3PTVB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u591a\u4e2a\u7c7b\u96c6\u6210\u6d4b\u8bd5\u4f1a\u9020\u6210\u6570\u636e\u5e93\u5b9a\u4f4d\u5668\u591a\u6b21\u6ce8\u518c\uff0c\u65e0\u6cd5\u8fd0\u884c\u6240\u6709\u6d4b\u8bd5\uff0c\u53ea\u80fd\u4e00\u4e2a\u7c7b\u4e00\u4e2a\u7c7b\u7684\u8fd0\u884c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3PXGY"},"#I3PXGY"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v220-\u5df2\u53d1\u5e03"},"v2.2.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Clay")," \u7c98\u571f\u7c7b\u578b\uff0c\u652f\u6301\u8ba9 ",(0,l.kt)("inlineCode",{parentName:"li"},"C#")," \u521b\u5efa\u4e00\u4e2a\u5f31\u7c7b\u578b\u5bf9\u8c61\u5e76\u64cd\u4f5c\u5f31\u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3O2QQ"},"#I3O2QQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"li"},"Scoped.Create")," \u5e26\u8fd4\u56de\u503c\u91cd\u8f7d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3O47J"},"#I3O47J")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Scoped.Create()")," \u4e00\u7cfb\u5217\u65b9\u6cd5\u652f\u6301\u4f20\u5165\u4f5c\u7528\u57df\u5de5\u5382 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OAP5"},"#I3OAP5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301\u4e8b\u4ef6\u603b\u7ebf\u540c\u6b65\u6267\u884c\u65b9\u5f0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OAW2"},"#I3OAW2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[DataValidation]")," \u8df3\u8fc7\u7a7a\u5b57\u7b26\u4e32\u548c\u7a7a\u503c\u9a8c\u8bc1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OGEN"},"#I3OGEN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker Service")," \u53ef\u914d\u7f6e\u662f\u5426\u81ea\u52a8\u6ce8\u518c ",(0,l.kt)("inlineCode",{parentName:"li"},"Worker")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OLW4"},"#I3OLW4")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5b9a\u65f6\u4efb\u52a1\u8bbe\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"cancelInNoneNextTime: false")," \u4e00\u6b21\u4e5f\u4e0d\u6267\u884c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3O3N0"},"#I3O3N0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," SpareTime \u81ea\u5b9a\u4e49\u4e0b\u6b21\u6267\u884c\u65f6\u95f4\u51fa\u73b0\u7a7a\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3O46X"},"#I3O46X")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MiniProfiler")," \u8bbe\u7f6e\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"false")," \u65f6\uff0c\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u63d0\u4ea4\u62e6\u622a\u5668\u672a\u6dfb\u52a0 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OAWX"},"#I3OAWX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},'[Consumes("application/x-www-form-urlencoded")]')," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"ModelQuery")," \u914d\u7f6e\u540c\u65f6\u914d\u7f6e\u5bfc\u81f4\u7a7a\u5f15\u7528\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ODUR"},"#I3ODUR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5728 Grpc \u4e2d\u4f7f\u7528 jwt \u6388\u6743\u51fa\u73b0\u7a7a\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OW3I"},"#I3OW3I")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u652f\u6301\u53d1\u5e03\u540e\u4ee3\u7801\u7cbe\u7b80\u914d\u7f6e\uff0c\u51cf\u5c11\u4e0d\u5fc5\u8981\u7684\u6587\u4ef6\u5939\u8f93\u51fa ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OAPF"},"#I3OAPF")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u81ea\u52a8\u5237\u65b0 Token \u673a\u5236\uff0c\u65b0\u589e\u5bb9\u9519\u503c\u5904\u7406\uff0c\u89e3\u51b3\u5e76\u53d1 Token \u5237\u65b0\u5931\u8d25\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OGYF"},"#I3OGYF")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7c98\u571f\u5bf9\u8c61\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OG18"},"#I3OG18")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u52a8\u6001 WebAPI \u5982\u4f55\u83b7\u53d6\u63a5\u6536\u6587\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3O29B"},"#I3O29B")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5b9a\u65f6\u4efb\u52a1\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"Scope.CreateUow")," \u5f15\u53d1\u7684\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3O2CD"},"#I3O2CD")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5355\u6587\u4ef6\u53d1\u5e03\u7a0b\u5e8f\u5de5\u4f5c\u4e0d\u6b63\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3O4D8"},"#I3O4D8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u540c\u65f6\u914d\u7f6e\u79df\u6237\u8fc7\u6ee4\u5668\u548c\u8f6f\u5220\u9664\u8fc7\u6ee4\u5668\uff0c\u6700\u7ec8\u7684 sql \u53ea\u751f\u6210\u4e86\u4e00\u79cd\u8fc7\u6ee4\u6761\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OB0A"},"#I3OB0A")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," HTTP \u91cd\u5b9a\u5411 HTTPS \u540e\u8de8\u57df\u5931\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3OB8R"},"#I3OB8R")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5728 PostgreSql \u6570\u636e\u5e93\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"rep.FirstOrDefault(u => u.Id == UserId);")," \u5f15\u8d77\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3O5OF"},"#I3O5OF")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5b9a\u65f6\u4efb\u52a1\u6709\u65f6\u80fd\u89e6\u53d1\u6709\u65f6\u4e0d\u80fd\u89e6\u53d1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ORBE"},"#I3ORBE"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v210-\u5df2\u53d1\u5e03"},"v2.1.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65b0\u589e\u5b9a\u65f6\u4efb\u52a1 ",(0,l.kt)("inlineCode",{parentName:"li"},"ISpareTimeWorker")," \u65b9\u5f0f\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},'[SpareTime("{\u914d\u7f6e\u8def\u5f84}}]')," \u65b9\u5f0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NTUX"},"#I3NTUX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b9a\u65f6\u4efb\u52a1\u652f\u6301\u5f02\u6b65\u59d4\u6258 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NP96"},"#I3NP96")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8f7b\u91cf\u7ea7\u5206\u5e03\u5f0f\u8fde\u7eed GUID \u751f\u6210\u5668 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NKLZ"},"#I3NKLZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ClayObject")," \u6a21\u5757\uff0c\u5904\u7406 ",(0,l.kt)("inlineCode",{parentName:"li"},"ExpandoObject")," \u53ca ",(0,l.kt)("inlineCode",{parentName:"li"},"IDictionary")," \u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3N3J4"},"#I3N3J4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Scoped.CreateUow(handler)")," \u521b\u5efa\u4f5c\u7528\u57df\u5e76\u81ea\u52a8\u63d0\u4ea4\u6570\u636e\u5e93\u66f4\u6539\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NU3G"},"#I3NU3G")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u89c4\u8303\u5316\u7ed3\u679c\u63a5\u53e3 ",(0,l.kt)("inlineCode",{parentName:"li"},"OnResponseStatusCodes")," \u65b9\u6cd5\uff0c\u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"li"},"UnifyResultStatusCodesOptions")," \u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NDB9"},"#I3NDB9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("strong",{parentName:"li"},"\u96ea\u82b1 ID \u5b9e\u73b0\u4ee3\u7801 ",(0,l.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/issues/I3NKLZ"},"#I3NKLZ"))))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u4e0d\u80fd\u652f\u6301\u975e int \u7c7b\u578b\u7684\u679a\u4e3e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NQM8"},"#I3NQM8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u7ebf\u7a0b\u6c60\u591a\u7ebf\u7a0b\u5e76\u53d1\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NR4L"},"#I3NR4L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea\u5b9a\u4e49\u63a7\u5236\u5668\u8def\u7531\u540e\u4e14\u4e3a\u65b9\u6cd5\u53c2\u6570\u6307\u5b9a\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"[ApiSeat]")," \u540e\u751f\u6210\u8def\u7531\u91cd\u590d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NRF6"},"#I3NRF6")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u652f\u6301\u5e94\u7528\u542f\u52a8\u7684\u65f6\u5019\u8fc1\u79fb\u79cd\u5b50\u6570\u636e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NH3M"},"#I3NH3M")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5206\u5e03\u5f0f ID \u751f\u6210\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3B6CX"},"#I3B6CX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65b0\u589e\u6a21\u5757\u5316\u5f00\u53d1\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NSUS"},"#I3NSUS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," 20.4 \u5b57\u7b26\u4e32\u62d3\u5c55\u65b9\u5f0f > \u9519\u8bef",(0,l.kt)("inlineCode",{parentName:"li"},"ToAESDecrypt")," \u5199\u6210\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"ToToAESDecrypt")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NNKV"},"#")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6709\u5173\u3010\u5b9a\u65f6\u4efb\u52a1/\u59d4\u6258\u3011\u7684\u7591\u95ee ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3N3EW"},"#I3N3EW")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u7edf\u4e00\u8fd4\u56de\u683c\u5f0f\u652f\u6301\u81ea\u5b9a\u4e49 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3NU1G"},"#I3NU1G"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v200-\u5df2\u53d1\u5e03"},"v2.0.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u63a7\u5236\u53f0\u5e94\u7528\u7a0b\u5e8f\u53ca Worker Services \u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3K4DG"},"#I3K4DG")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b8c\u6574\u4efb\u52a1\u8c03\u5ea6\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IRUX"},"#I3IRUX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Cron")," \u8868\u8fbe\u5f0f\u89e3\u6790 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IQ9Y"},"#I3IQ9Y")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u81ea\u5b9a\u4e49\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"swagger.json")," \u5730\u5740\u6a21\u677f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IHMX"},"#I3IHMX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301\u914d\u7f6e\u52a8\u6001 WebApi \u533a\u57df ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IJAZ"},"#I3IJAZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u65b0\u589e\u652f\u6301\u4f20\u5165\u670d\u52a1\u63d0\u4f9b\u5668 ",(0,l.kt)("inlineCode",{parentName:"li"},"IServiceProvider")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IVBL"},"#I3IVBL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5168\u5c40\u914d\u7f6e\u9009\u578b ",(0,l.kt)("inlineCode",{parentName:"li"},"SupportPackageNamePrefixs")," \u914d\u7f6e\uff0c\u652f\u6301\u914d\u7f6e\u5305\u524d\u7f00 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3K0SN"},"#I3K0SN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5e94\u7528\u542f\u52a8\u65f6\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"referenceassembly")," \u7c7b\u578b\u7a0b\u5e8f\u96c6\u626b\u63cf ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3K0SN"},"#I3K0SN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4f9d\u8d56\u6ce8\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"AOP")," \u62e6\u622a\u83b7\u53d6\u65b9\u6cd5\u771f\u5b9e\u7279\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3LZBX"},"#I3LZBX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," EFCore \u624b\u52a8 ",(0,l.kt)("inlineCode",{parentName:"li"},"SaveChanges()")," \u7279\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3N01Y"},"#I3N01Y")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Cors")," \u8de8\u57df\u66f4\u591a\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3N2J0"},"#I3N2J0")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u5b8c\u6574\u4efb\u52a1\u8c03\u5ea6\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IRUX"},"#I3IRUX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u65e5\u5fd7\u6a21\u5757\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3J2K0"},"#I3J2K0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u6a21\u677f\u5f15\u64ce\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3J46E"},"#I3J46E")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u5e95\u5c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCoreRepository")," \u4ed3\u50a8 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3J6W5"},"#I3J6W5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," sql \u5b57\u7b26\u4e32\u62d3\u5c55\u5e95\u5c42\u4ee3\u7801 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IVCE"},"#I3IVCE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u5e95\u5c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlRepository")," \u6240\u6709\u903b\u8f91\u4ee3\u7801 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3J6V6"},"#I3J6V6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u6570\u636e\u5e93\u5b9e\u4f53\u62d3\u5c55\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3J609"},"#I3J609")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u4e8b\u4ef6\u4e8b\u4ef6\u603b\u7ebf\u540c\u6b65\u6267\u884c\u4e3a\u5f02\u6b65\u65b9\u5f0f\u6267\u884c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3J0WA"},"#I3J0WA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," \u6846\u67b6\u5e95\u5c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContext.IsAjaxRequest()")," \u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IVAA"},"#I3IVAA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ValidationTypes.Required")," \u9a8c\u8bc1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3KR85"},"#I3KR85")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5173\u95ed ",(0,l.kt)("inlineCode",{parentName:"li"},"InjectMiniProfiler")," \u53c2\u6570\u540e\u5185\u5b58\u7f13\u5b58\u65e0\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IHLR"},"#I3IHLR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5728\u591a\u79df\u6237\u4e2d\u8c03\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"Tenant")," \u5c5e\u6027\u51fa\u73b0\u5076\u7136\u6027\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u88ab\u91ca\u653e\u7684\u60c5\u51b5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IC70"},"#I3IC70")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," Sql \u4ee3\u7406\u4e2d\u5982\u679c\u8fd4\u56de\u57fa\u5143\u7c7b\u578b\u629b\u51fa\u4e0d\u80fd\u5c06 object \u8f6c\u6362\u6210\u5bf9\u5e94\u7c7b\u578b\u7684\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IC84"},"#I3IC84")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5b58\u50a8\u8fc7\u7a0b\u591a\u8fd4\u56de\u503c\u7684\u65f6\u5019\uff0coutputvalues \u7684 name \u4e0d\u662f\u5b9a\u4e49\u7684 MSG \u7684 name\uff0c\u662f Msg \u7c7b\u578b\u3002 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IC7Y"},"#I3IC7Y")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," PhoneNumber \u624b\u673a\u53f7\u9a8c\u8bc1\u6b63\u5219\u8868\u8fbe\u5f0f\u9519\u8bef ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ID10"},"#I3ID10")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4f9d\u8d56\u6ce8\u5165 AOP \u62e6\u622a\u65e0\u6cd5\u6355\u83b7\u5185\u90e8\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IGCC"},"#I3IGCC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5168\u5c40\u62e6\u622a\u6807\u8bb0\u5f02\u5e38\u5df2\u88ab\u5904\u7406\u540e\u5f02\u5e38\u8fc7\u6ee4\u5668\u4f9d\u7136\u6267\u884c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3J463"},"#I3J463")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea\u5b9a\u4e49\u5168\u5c40\u5f02\u5e38\u62e6\u622a\u5668\u4e0d\u8d77\u4f5c\u7528 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3K1SJ"},"#I3K1SJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5728 WorkerService \u6a21\u5f0f\u4e0b\uff0c\u8fd8\u662f\u4f7f\u7528 WebHostEnvironment \u6765\u5224\u65ad Host \u73af\u5883\uff0c\u4f1a\u5bfc\u81f4\u9519\u8bef ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3LCQY"},"#I3LCQY")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5b9a\u65f6\u4efb\u52a1 ",(0,l.kt)("inlineCode",{parentName:"li"},"DoOnce")," \u629b\u7a7a\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3M0ZT"},"#I3M0ZT")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u542f\u52a8\u65f6\u7a0b\u5e8f\u96c6\u626b\u63cf\u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3K0SN"},"#I3K0SN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},'App.GetConfig<>("key")')," \u4e0d\u652f\u6301\u83b7\u53d6\u5355\u4e2a\u503c\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ILF1"},"#I3ILF1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," UrlEncode \u5e94\u8be5\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"Uri.EscapeDataString()")," \u800c\u4e0d\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpUtility.UrlEncode")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ICTK"},"#I3ICTK")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b9a\u4f4d\u4efb\u52a1\u3001\u540e\u53f0\u4efb\u52a1\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3JHHG"},"#I3JHHG")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8f85\u52a9\u89d2\u8272\u670d\u52a1\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3K5GN"},"#I3K5GN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u52a8\u6001 WebAPI\u3001\u89c4\u8303\u5316\u6587\u6863\u3001\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6570\u636e\u6821\u9a8c\uff0c\u81ea\u5b9a\u4e49 ErrorMessage \u65e0\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ICL3"},"#I3ICL3")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6700\u65b0 issue \u4e2d\u65b0\u589e\u7684\u201c\u65b0\u589e\u5e38\u7528\u7684 JSON \u5e8f\u5217\u5316\u65b9\u6cd5\u201d \u4f1a\u5bfc\u81f4 AOP \u62e6\u622a\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3I7VE"},"#I3I7VE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," Furion.DatabaseAccessor.PrivateEntityBase \u4e2d\u7684 TenantId \u6570\u636e\u7c7b\u578b\u8bbe\u7f6e\u4e3a object ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IQV6"},"#I3IQV6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6709\u5173\u5f02\u5e38\u62e6\u622a\u548c\u5904\u7406\u7684\u7591\u95ee ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IUFZ"},"#I3IUFZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"DataValidation")," \u5728\u7a7a\u503c\u7684\u60c5\u51b5\u4e0b\u88ab\u5ffd\u7565\u6389\u4e86",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IWSM"},"#I3IWSM")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u65e5\u5fd7\u6587\u6863\u6ca1\u6709\u66f4\u65b0 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3J1DX"},"#I3J1DX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5bf9\u4e8e webapi \u7b80\u5355\u7c7b\u578b\u53c2\u6570\uff0c\u662f\u5426\u53ef\u4ee5\u4ee5 json \u65b9\u5f0f\u63d0\u4ea4 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3J18I"},"#I3J18I")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IUnifyResultProvider")," \u5b9e\u73b0\u4e2d\u5982\u679c ",(0,l.kt)("inlineCode",{parentName:"li"},"UnifyModel")," \u7684 type \u4e0d\u662f\u8303\u578b\u4f1a\u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3JBXF"},"#I3JBXF")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5982\u4f55\u6a21\u5757\u5316\u5f00\u53d1\u65b0\u529f\u80fd\uff1f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3J7ZZ"},"#I3J7ZZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5efa\u8bae\u589e\u52a0\u5fae\u670d\u52a1\u4e2d\u95f4\u4ef6\u7684\u96c6\u6210 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3JTZQ"},"#I3JTZQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u4e8c\u7ea7\u865a\u62df\u76ee\u5f55\u90e8\u7f72\u7684 swagger \u7684 MiniProfiler js \u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3IWLR"},"#I3IWLR"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v1190-\u5df2\u53d1\u5e03"},"v1.19.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore 5.0")," \u652f\u6301 ",(0,l.kt)("strong",{parentName:"li"},"SqlServer 2005-2008")," \u6570\u636e\u5e93 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HZZ6"},"#I3HZZ6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u9ad8\u7ea7\u4ee3\u7406\u652f\u6301\u6a21\u677f\u66ff\u6362\u4e86 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HHWU"},"#I3HHWU")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HH2T"},"#I3HH2T")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"PBKDF2")," \u52a0\u5bc6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HN7A"},"#I3HN7A")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5e38\u7528\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," \u64cd\u4f5c\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HUYO"},"#I3HUYO")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6240\u6709\u89e3\u6790\u670d\u52a1\u7684\u65b9\u6cd5\u90fd\u652f\u6301\u4f20\u5165 ",(0,l.kt)("inlineCode",{parentName:"li"},"IServiceProvidier")," \u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HXEU"},"#I3HXEU")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," .NET 5 SDK \u81f3 5.0.5 \u7248\u672c"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"application/x-www-form-urlencoded")," \u81ea\u52a8\u88ab\u8f6c\u7801\u4e86 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HDPC"},"#I3HDPC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ISqlDispatchProxy")," \u8c03\u7528\u5e26\u8fd4\u56de\u503c\u7684\u5b58\u50a8\u8fc7\u7a0b\u51fa\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HISS"},"#I3HISS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u591a\u6570\u636e\u5e93\u5de5\u4f5c\u5355\u5143\u5f02\u5e38\u65e0\u6cd5\u56de\u6eda\u6570\u636e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3I2KN"},"#I3I2KN")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/zuohuaijun/Admin.NET/issues/I3HYN5"},"#I3HYN5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," Serilog \u65e5\u5fd7\u751f\u6210\u592a\u591a\u6587\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3I2PN"},"#I3I2PN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"1.18.0")," \u7248\u672c\u6570\u636e\u5e93\u8fde\u63a5\u6c60\u5b58\u5728\u8fde\u63a5\u6cc4\u6f0f\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3I5KO"},"#I3I5KO")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," Sqlite \u63d0\u793a\u4e8b\u52a1\u5df2\u5b8c\u6210\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3I9F2"},"#I3I9F2")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u89c6\u56fe\u6a21\u677f\u529f\u80fd\uff0c\u9ed8\u8ba4\u652f\u6301\u53ef\u679a\u4e3e\u6cdb\u578b\u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3GYEE"},"#I3GYEE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u5f00\u53d1\u9636\u6bb5 MiniProfiler \u6253\u5370\u6570\u636e\u5e93\u76f8\u5173\u4fe1\u606f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3I8VQ"},"#I3I8VQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," EFCore 5.0 \u672a\u63d0\u4f9b Sqlite \u6570\u636e\u5e93 DataAdapter \u7684\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3I9FC"},"#I3I9FC")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u3001\u591a\u79df\u6237\u3001\u4ed3\u50a8\u3001\u65e5\u5fd7\u3001\u5e8f\u5217\u5316\u7b49\u6587\u6863\u3002"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5efa\u8bae MVC \u6a21\u5f0f\u4e0b\u589e\u52a0 Furion \u7684\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3GY4R"},"#I3GY4R")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6570\u636e\u5e93\u5173\u8054\u64cd\u4f5c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3H5QP"},"#I3H5QP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," 1.17.5 \u7248\u672c suagger \u65e0\u6cd5\u751f\u6210 swagger.json ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HGPZ"},"#I3HGPZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," Serilog \u6269\u5c55+dll \u542f\u52a8\u4e0e swagger \u7684 MiniProfiler \u51b2\u7a81 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HWJM"},"#I3HWJM")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," Sql \u9ad8\u7ea7\u4ee3\u7406\u8fd4\u56de DataTable \u65f6\uff0c\u7ed3\u679c\u4e3a\u7a7a\u53d6\u4e0d\u5230\u8bb0\u5f55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HUWG"},"#I3HUWG")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," Task.Run \u64cd\u4f5c\u6570\u636e\u5e93\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3HZ9D"},"#I3HZ9D"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v1180-\u5df2\u53d1\u5e03"},"v1.18.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Oracle")," 11 \u7248\u672c\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EVL5"},"#I3EVL5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Mysql")," \u5b98\u65b9\u5305 ",(0,l.kt)("inlineCode",{parentName:"li"},"MySql.EntityFrameworkCore")," \u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3E6J1"},"#I3E6J1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5168\u5c40\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"WebApi")," \u53c2\u6570 ",(0,l.kt)("inlineCode",{parentName:"li"},"[FromQury]")," \u5316 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EFYJ"},"#I3EFYJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u516c\u5f00\u6846\u67b6\u5e95\u5c42\u4f9d\u8d56\u6ce8\u5165\u626b\u63cf\u6ce8\u518c\u62d3\u5c55 ",(0,l.kt)("inlineCode",{parentName:"li"},"services.AddRisterTypes(types)")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EIV3"},"#I3EIV3")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," SqlSugar \u5de5\u4f5c\u5355\u5143\u7279\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EJO5"},"#I3EJO5")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6c60\u4e00\u65e6\u6709\u4e0a\u4e0b\u6587\u64cd\u4f5c\u5931\u8d25\u8fd8\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u51fa\u73b0\u4e8c\u6b21\u63d0\u4ea4\u6570\u636e\u5e93\u7684\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EIJJ"},"#I3EIJJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4e0d\u540c\u6570\u636e\u5e93\u547d\u4ee4\u53c2\u6570\u524d\u7f00\u90fd\u6dfb\u52a0\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"@")," \u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EBJP"},"#I3EBJP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5c1d\u8bd5\u4fee\u590d\u4e8b\u4ef6\u603b\u7ebf\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EGSB"},"#I3EGSB")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/236"},"#PR236")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContextExtensions")," \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"SignoutToSwagger")," \u65b9\u6cd5\u65e0\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EHNQ"},"#I3EHNQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5982\u679c\u52a8\u6001 WebApi \u8d34\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"[ApiController]")," \u7279\u6027\u540e\uff0c\u5bfc\u81f4\u8def\u7531\u53c2\u6570\u91cd\u590d\u751f\u6210 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EOQQ"},"#I3EOQQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5982\u679c\u6ca1\u6709\u4efb\u4f55 webapi \u63a7\u5236\u5668\u65f6\uff0c\u6587\u6863\u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EVLB"},"#I3EVLB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4f9d\u8d56\u6ce8\u5165\u6cdb\u578b\u7c7b\u578b\u6ce8\u518c\u5931\u8d25 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EX66"},"#I3EX66")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," SqlSugar \u62d3\u5c55\u5e93\u4ed3\u50a8 ",(0,l.kt)("inlineCode",{parentName:"li"},"Context")," \u5c5e\u6027\u7c7b\u578b\u672a ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugarClient")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EHXA"},"#I3EHXA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u5237\u65b0 Token \u9ed1\u540d\u5355 Redis \u4e2d\u5206\u7ec4 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EQWO"},"#I3EQWO")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u8fdc\u7a0b\u8bf7\u6c42\u5728\u8bf7\u6c42\u62e6\u622a\u6b21\u53d1\u8d77\u4e8c\u6b21\u8bf7\u6c42\u5bfc\u81f4\u5f02\u5e38\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ER71"},"#I3ER71")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u591a\u79df\u6237\u9ed8\u8ba4\u7f13\u5b58\u6539\u4e3a\u5206\u5e03\u5f0f\u7f13\u5b58 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EXEU"},"#I3EXEU")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6570\u636e\u5e93\u64cd\u4f5c\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3E84X"},"#I3E84X")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5982\u4f55\u65b9\u4fbf\u7684\u83b7\u53d6 ",(0,l.kt)("inlineCode",{parentName:"li"},"IDynamicApiController")," API \u4ea7\u751f\u7684 url \u548c \u8c13\u8bcd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ED17"},"#I3ED17")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," Code First -\u6267\u884c\u547d\u4ee4 ",(0,l.kt)("inlineCode",{parentName:"li"},"Add-Migration")," \u9047\u5230\u4e86\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EHD0"},"#I3EHD0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," tools v1.16.0 \u65e0\u6cd5\u751f\u6210\u5b9e\u4f53\uff0c\u4e00\u76f4\u63d0\u793a Missing required argument ",(0,l.kt)("inlineCode",{parentName:"li"},""),". ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ENZ8"},"#I3ENZ8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," Authorize \u7684 Logout \u6309\u94ae\uff0c\u65e0\u6cd5\u5b9e\u65f6\u8bf7\u7a7a token",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3EOF9"},"#I3EOF9"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v1170-\u5df2\u53d1\u5e03"},"v1.17.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u52a8\u6001 WebAPI \u652f\u6301\u7ee7\u627f\u57fa\u7c7b\u914d\u7f6e\u7279\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3D5PX"},"#I3D5PX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"multipart/form-data")," \u5185\u5bb9\u7c7b\u578b\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3D7KG"},"#I3D7KG")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b57\u7b26\u4e32\u52a0\u5bc6\u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3DHBW"},"#I3DHBW")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65b0\u589e\u8fdc\u7a0b\u8bf7\u6c42\u53ef\u76f4\u63a5\u4e0b\u8f7d\u8fd4\u56de\u503c\u5185\u5bb9\u8f6c\u4e3a string \u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3DIGR"},"#I3DIGR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u5730\u5740\u652f\u6301\u6a21\u677f\u5f15\u64ce ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3D5Y8"},"#I3D5Y8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[DataValidation]")," \u9519\u8bef\u6d88\u606f\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"string.Format")," \u64cd\u4f5c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3E08W"},"#I3E08W")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpRequestMessage")," \u62d3\u5c55\u65b9\u6cd5 ",(0,l.kt)("inlineCode",{parentName:"li"},"AppendQueries()")," \u8ffd\u52a0\u66f4\u591a ",(0,l.kt)("inlineCode",{parentName:"li"},"query")," \u53c2\u6570\u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3E3DI"},"#I3E3DI")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IRepository.AsAsyncEnumerable()")," \u8fd4\u56de\u503c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3DIQ1"},"#I3DIQ1"),"\uff0c\u8c03\u6574\u4e3a\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"rep.AsQueryable().ToListAsync()")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u9a8c\u8bc1\u5931\u8d25\u540e\u4e5f\u6253\u5370\u4e86\u6210\u529f\u7684\u5b57\u6bb5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3CVBS"},"#I3CVBS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"contentType")," \u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"application/x-www-form-urlencoded")," \u65e0\u6548\u95ee\u9898",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3CWBS"},"#I3CWBS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u65e0\u6cd5\u6253\u5370\u5b8c\u6574\u7684\u8bf7\u6c42\u5730\u5740\uff0c\u6bd4\u5982\u914d\u7f6e\u4e86 HttpClient \u4e4b\u540e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3CY42"},"#I3CY42")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u7a0b\u5e8f\u542f\u52a8\u65f6\u6392\u9664\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6\u7b97\u6cd5\u4e0d\u5bf9\uff0c\u5e94\u8be5\u91c7\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\u5339\u914d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3D9E7"},"#I3D9E7")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u6210\u529f\u8bf7\u6c42\u62e6\u622a\u4e0d\u751f\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3DOE4"},"#I3DOE4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Dapper")," \u62d3\u5c55\u6570\u636e\u5e93\u5207\u6362\u4e3a oracle \u65f6\uff0c\u7cfb\u7edf\u627e\u4e0d\u5230\u6307\u5b9a\u7684\u6587\u4ef6 ",(0,l.kt)("inlineCode",{parentName:"li"},"Oracle.ManagedDataAccess.Core")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3DYM3"},"#I3DYM3")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u83b7\u53d6 ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT token")," \u4fe1\u606f\u652f\u6301\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u524d\u7f00\uff0c\u5982 ",(0,l.kt)("inlineCode",{parentName:"li"},"Bearer ")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3DJIV"},"#I3DJIV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u5237\u65b0 Token \u9ed1\u540d\u5355\u5b58\u50a8\u65b9\u5f0f\uff0c\u5c06\u5185\u5b58\u7f13\u5b58\u8c03\u6574\u4e3a\u5206\u5e03\u5f0f\u7f13\u5b58 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3DPBR"},"#I3DPBR")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u8fdc\u7a0b\u8bf7\u6c42\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3CPJO"},"#I3CPJO")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"LinqExpression.And")," \u6ca1\u6709 2 \u4e2a\u53c2\u6570\u7684\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3CXKZ"},"#I3CXKZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5f02\u5e38\u4fe1\u606f \u5982\u4f55\u8bb0\u5f55\u5230\u6570\u636e\u5e93\u4e2d:) ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3DDGO"},"#I3DDGO")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u65e0\u952e\u5b9e\u4f53\u9009\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"IEntityNotKey")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3DWRF"},"#I3DWRF")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6839\u636e\u4e3b\u952e\u5220\u9664\u4e00\u6761\u8bb0\u5f55\u4e0d\u6210\u529f\uff0c\u65e0\u9519\u8bef\u4fe1\u606f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3DWWF"},"#I3DWWF")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5982\u4f55\u81ea\u5b9a\u4e49\u63a5\u53e3\u8fd4\u56de\u683c\u5f0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3DZN6"},"#I3DZN6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," DynamicApiController \u5982\u4f55\u5728\u8fd0\u884c\u65f6\u51b3\u5b9a\u662f\u5426\u516c\u5f00\u4e00\u4e2a Action ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3D5UL"},"#I3D5UL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.DatabaseAccessor.DbHelpers")," \u65b9\u6cd5\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"ConvertToDbParameters")," \u662f\u4e0d\u662f\u5e94\u8be5\u8fc7\u6ee4\u6389\u8d34 ",(0,l.kt)("inlineCode",{parentName:"li"},"NotMapped")," \u7684\u7279\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3E2XS"},"#I3E2XS"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v1160-\u5df2\u53d1\u5e03"},"v1.16.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IDGenerator")," \u96ea\u82b1 ID \u7b97\u6cd5\uff0c\u611f\u8c22 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/yitter/idgenerator"},"idgenerator")," \u4f5c\u8005\u63d0\u4ea4 PR ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/204"},"#PR204")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3B60S"},"#I3B60S")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"DbContext")," \u5237\u65b0\u591a\u79df\u6237\u7f13\u5b58\u62d3\u5c55\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I39N5U"},"#I39N5U")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u81ea\u5b9a\u4e49\u914d\u7f6e\u5355\u4e2a\u63a7\u5236\u5668\u540d\u79f0\u89c4\u8303\uff0c\u5982\u5c0f\u5199\u8def\u7531 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3A5XL"},"#I3A5XL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u83b7\u53d6\u5f53\u524d\u9009\u62e9\u533a\u57df\u8bed\u8a00\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3BSDH"},"#I3BSDH")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," .NET 5 SDK \u81f3 5.0.4 \u7248\u672c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ASTL"},"#I3ASTL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u8fdc\u7a0b\u8bf7\u6c42\u6240\u6709\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2LB7M"},"#I2LB7M")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," \u5e8f\u5217\u5316\u529f\u80fd\uff0c\u63d0\u4f9b\u7edf\u4e00\u7684\u62bd\u8c61\u63a5\u53e3\uff0c\u65b9\u4fbf\u81ea\u7531\u66ff\u6362 ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," \u5e93 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I39GT9"},"#I39GT9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u9a8c\u8bc1\u5931\u8d25\u8fd4\u56de\u6d88\u606f\u6a21\u578b\u53ca\u89c4\u8303\u5316\u63a5\u53e3\u9a8c\u8bc1\u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3AFQW"},"#I3AFQW")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u63d2\u4ef6\u5f0f\u5f00\u53d1\u70ed\u63d2\u62d4\u529f\u80fd\uff0c\u5b9e\u73b0\u52a8\u6001\u52a0\u8f7d\u5378\u8f7d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/200"},"#PR200"),", \u611f\u8c22 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/samwangcoder"},"@SamWangCoder")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," \u79fb\u9664 ",(0,l.kt)("inlineCode",{parentName:"li"},"JsonSerializerUtility")," \u9759\u6001\u7c7b\u53ca\u79fb\u9664\u5c5e\u6027\u5927\u5199\u5e8f\u5217\u5316\u62d3\u5c55\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3AFRJ"},"#I3AFRJ")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MVC")," \u6a21\u5f0f\u4e0b\u4e0d\u652f\u6301\u9a8c\u8bc1\u81ea\u5b9a\u4e49\u9a8c\u8bc1\u903b\u8f91 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I39LM5"},"#I39LM5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u9a8c\u8bc1\u6570\u503c\u7c7b\u578b\u6b63\u5219\u8868\u8fbe\u5f0f\u4e0d\u652f\u6301\u8d1f\u6570 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I39YUV"},"#I39YUV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6846\u67b6\u542f\u52a8\u65f6\u65e0\u6cd5\u52a0\u8f7d\u672a\u88ab\u5f15\u7528\u7684\u7a0b\u5e8f\u96c6 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3A3Z4"},"#I3A3Z4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCoreRepository.IsAttached()")," \u65b9\u6cd5\u5224\u65ad\u9519\u8bef bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3A824"},"#I3A824")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"\u52a8\u6001API")," \u9a7c\u5cf0\u663e\u793a\u914d\u7f6e\u65e0\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3AF32"},"#I3AF32")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"cli.ps1")," \u4e0d\u652f\u6301\u65b0\u7248\u672c ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3APO9"},"#I3APO9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," \u5b9e\u4f53\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"[Table]")," \u7279\u6027\u65e0\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3BAYH"},"#I3BAYH")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u52a8\u6001 WebAPI ",(0,l.kt)("inlineCode",{parentName:"li"},"CheckIsSplitCamelCase")," bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3BLKX"},"#I3BLKX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4fee\u590d\u52a8\u6001 WebAPI \u914d\u7f6e\u4fdd\u7559 Action \u7684 Async \u540e\u7f00\u65e0\u6548\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3C3DA"},"#I3C3DA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT")," Token \u5237\u65b0\u540e\u65e7\u7684\u5237\u65b0 Token \u4f9d\u65e7\u53ef\u7528 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3C8ZH"},"#I3C8ZH")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u591a\u8bed\u8a00 ",(0,l.kt)("inlineCode",{parentName:"li"},"Razor")," \u89c6\u56fe\u53d8\u91cf\u591a\u8bed\u8a00\u4e71\u7801\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3CBMU"},"#I3CBMU")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u9ed8\u8ba4\u5e8f\u5217\u5316\u63d0\u4f9b\u5668 ",(0,l.kt)("inlineCode",{parentName:"li"},"System.Text.Json")," \u53cd\u5e8f\u5217\u5316\u5b57\u7b26\u4e32\u65f6\u533a\u5206\u5927\u5c0f\u5199\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3BSXV"},"#I3BSXV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u4f18\u5316 ",(0,l.kt)("inlineCode",{parentName:"li"},"MessageCenter")," \u6027\u80fd\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I39PRR"},"#I39PRR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6c60\u5c0f\u6027\u80fd\u4f18\u5316"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Docker")," \u73af\u5883\u4e0b\u81ea\u52a8\u5316\u90e8\u7f72 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/209"},"#PR209")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," \u5e8f\u5217\u5316 \u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3B6D8"},"#I3B6D8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u8de8\u57df\u3001\u5b89\u5168\u6388\u6743\u3001\u5373\u65f6\u901a\u4fe1\u6587\u6863\u3001\u591a\u8bed\u8a00\u3001\u89c4\u8303\u5316\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Extras.DatabaseAccessor.SqlSugar")," \u914d\u7f6e\u591a\u4e2a\u6570\u636e\u5e93\u6253\u5370 SQL \u8bed\u53e5\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I39PDC"},"#I39PDC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ORACLE")," \u6570\u636e\u5e93\u591a\u79df\u6237\u6a21\u5f0f\u4e0b\u8fd4\u56de\u503c\u4e3a\u6307\u5b9a\u7c7b\u578b\u65f6\u7cfb\u7edf\u5361\u6b7b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I39RNH"},"#I39RNH")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5047\u5220\u9664\u6307\u5411\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I39XZA"},"#I39XZA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u591a\u8bed\u8a00\u914d\u7f6e\u8282\u662f\u653e\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"AppSettings")," \u91cc\u9762\u8fd8\u662f\u5916\u9762\u5462\uff1f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3A4SB"},"#I3A4SB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6ca1\u627e\u5230\u6570\u636e\u5e93\u4e0a\u4e0b\u6587 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3A5HS"},"#I3A5HS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6709 ",(0,l.kt)("inlineCode",{parentName:"li"},"QQ")," \u4ea4\u6d41\u7fa4\u5417\uff1f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3AAM7"},"#I3AAM7")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Vue3")," \u73af\u5883\u4e0b\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"SignalR")," \u8de8\u57df\u51fa\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3ALQ7"},"#I3ALQ7")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u8bbe\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u53c2\u6570\u975e\u5fc5\u586b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3AT02"},"#I3AT02")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," EFCore \u8c03\u7528 Insert \u65f6\u62a5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Unknown column 'Discriminator' in 'field list'")," \u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3B2LC"},"#I3B2LC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u9006\u5411 ",(0,l.kt)("inlineCode",{parentName:"li"},"mysql")," \u6570\u636e\u5e93\u65f6 ",(0,l.kt)("inlineCode",{parentName:"li"},"cli")," \u51fa\u73b0\u9519\u8bef ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3B64F"},"#I3B64F")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," Sql \u9ad8\u7ea7\u4ee3\u7406\u4f7f\u7528\u8fc7\u7a0b\u4e2d DateTime \u7c7b\u578b\u7684\u53c2\u6570\u5e8f\u5217\u5316\u5931\u8d25 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3AZXK"},"#I3AZXK")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u4f7f\u7528 Mysql \u6267\u884c Add-Migration \u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3B8EW"},"#I3B8EW")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," Saas \u591a\u79df\u6237\u6a21\u5f0f-\u72ec\u7acb Database \u6a21\u5f0f\u4e0b\u65e0\u6cd5\u83b7\u53d6 Tenant, \u5bfc\u81f4\u65e0\u6cd5\u81ea\u52a8\u5207\u6362\u7684\u95ee\u9898",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3AVXU"},"#I3AVXU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5982\u4f55\u81ea\u5b9a\u4e49 WebAPI \u7edf\u4e00\u7ed3\u679c\u6a21\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3BBYW"},"#I3BBYW")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3BBYV"},"#I3BBYV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"Web.Entry")," \u9879\u76ee\u65b0\u5efa\u4e86\u4e00\u4e2a ",(0,l.kt)("inlineCode",{parentName:"li"},"Controller"),"\uff0c\u591a\u4e86\u672a\u77e5\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3BKH5"},"#I3BKH5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AOP")," \u62e6\u622a\u5982\u4f55\u89e3\u6790\u670d\u52a1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3BUM3"},"#I3BUM3")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u52a8\u6001 WebAPI \u8fd4\u56de\u53c2\u6570\u88ab\u7701\u7565 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3C2XR"},"#I3C2XR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5982\u4f55\u8bbe\u7f6e\u67d0\u4e00\u4e2a\u63a5\u53e3\u54cd\u5e94\u6570\u636e\u4e0d\u81ea\u52a8\u8f6c\u5c0f\u5199\uff0c\u6309\u539f\u59cb\u5b57\u6bb5\u540d\u8fd4\u56de ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I38L9B"},"#I38L9B")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," code first \u5982\u4f55\u914d\u7f6e\u81ea\u52a8\u8fc1\u79fb ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3CCR0"},"#I3CCR0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," webapi \u6df7\u5408\u6388\u6743\u5982\u4f55\u533a\u5206\u4e0d\u540c\u7cfb\u7edf ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3CJCY"},"#I3CJCY")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," EFCore \u4e0d\u652f\u6301\u9012\u5f52\u65e0\u9650\u7ea7\u904d\u5386\u5173\u7cfb ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3CET9"},"#I3CET9"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v1150-\u5df2\u53d1\u5e03"},"v1.15.0 \uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8df3\u8fc7\u7279\u5b9a\u5b9e\u4f53\u6570\u636e\u5e93\u64cd\u4f5c\u76d1\u542c\u7279\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I386LB"},"#I386LB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IEntityChangedListener")," \u589e\u52a0\u5bf9 ",(0,l.kt)("inlineCode",{parentName:"li"},"OldEntity")," \u7684\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I385X2"},"#I385X2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b9e\u65f6\u901a\u4fe1\u81ea\u52a8\u914d\u7f6e\u96c6\u7ebf\u5668\u62d3\u5c55\u53ca\u7279\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I387QX"},"#I387QX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Mapster")," \u62d3\u5c55\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"IMapper")," \u4f9d\u8d56\u6ce8\u5165\u65b9\u5f0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I38C7C"},"#I38C7C")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[AppDbContext]")," \u7279\u6027\u9ed8\u8ba4\u6784\u9020\u51fd\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I38J97"},"#I38J97")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"UnifyContext.GetExceptionMetadata(context)")," \u8fd4\u56de\u9519\u8bef\u7801\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I38ONX"},"#I38ONX")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u591a\u6b21\u5faa\u73af\u4e2d\u8c03\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetNewDbContext()")," \u8fd8\u662f\u83b7\u53d6\u5230\u540c\u4e00\u4e2a\u5bf9\u8c61 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I38NNP"},"#I38NNP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u8fc7\u6ee4\u6389 ",(0,l.kt)("inlineCode",{parentName:"li"},"object ")," \u7c7b\u578b\u5c5e\u6027\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I38FHL"},"#I38FHL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u540c\u4e00\u7c7b\u4e0d\u652f\u6301\u591a\u7ee7\u627f ",(0,l.kt)("inlineCode",{parentName:"li"},"IEntityChangedListener")," \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I38UQJ"},"#I38UQJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea\u5b9a\u4e49\u5e8f\u5217\u5316\u5c5e\u6027\u540d\u79f0\u5bfc\u81f4\u9a8c\u8bc1\u5931\u8d25\u5c5e\u6027\u4e0d\u5339\u914d\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I38W8Z"},"#I38W8Z")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u4ee3\u7801\u4e0d\u89c4\u8303\u547d\u540d\u5bfc\u81f4\u5f00\u53d1\u8005\u9605\u8bfb\u4ee3\u7801\u65f6\u4ea7\u751f\u6b67\u4e49"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"FluentValidation")," \u96c6\u6210\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I38IOT"},"#I38IOT")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u6846\u67b6\u7248\u672c\u5411\u4e0b\u517c\u5bb9\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I38WMZ"},"#I38WMZ"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v1140\u5df2\u53d1\u5e03"},"v1.14.0\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," 5.0 \u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"Oracle")," \u6570\u636e\u5e93\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I37Z8E"},"#I37Z8E")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u63a7\u5236\u662f\u5426\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u663e\u793a\u6570\u636e\u5e93\u8fde\u63a5\u4fe1\u606f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I37YQ2"},"#I37YQ2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[NonUnify]")," \u652f\u6301\u5728\u7c7b\u4e2d\u8d34\u6b64\u7279\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I359Q6"},"#I359Q6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"\u7f51\u7edc\u8bf7\u6c42")," \u5b57\u7b26\u4e32 ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpClient")," \u62e6\u622a\u5668 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I35F3E"},"#I35F3E")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContext")," \u53ca ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpRequest")," \u83b7\u53d6\u8fdc\u7a0b\u5730\u5740\u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3688Z"},"#I3688Z")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"services.AddMvcFilter<>")," \u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Mvc")," \u8fc7\u6ee4\u5668\u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I368BH"},"#I368BH")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," \u6846\u67b6\u4f9d\u8d56\u7684 .NET 5 SDK \u81f3\u6700\u65b0\u7248 5.0.3 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I37YQQ"},"#I37YQQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swashbuckle.AspNetCore")," \u7ec4\u4ef6\u5305\u5230 ",(0,l.kt)("inlineCode",{parentName:"li"},"6.0.x")," \u7248\u672c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I37EZK"},"#I37EZK")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u6846\u67b6 ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT")," \u62d3\u5c55\u7c7b\uff0c\u53ea\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Extras.Authentication.JwtBearer")," \u4e2d\u4fdd\u7559 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I35D59"},"#I35D59")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4f20\u5165\u9519\u8bef ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT Token")," \u5b57\u7b26\u4e32\u5bfc\u81f4\u81ea\u52a8\u5237\u65b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u51fa\u73b0\u5b57\u7b26\u4e32\u8fb9\u754c\u503c\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I34ZE5"},"#I34ZE5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u77ac\u65f6\u4f5c\u7528\u57df\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u4e5f\u4f1a\u81ea\u52a8\u52a0\u5165\u5de5\u4f5c\u5355\u5143\u5bfc\u81f4\u5199\u65e5\u5fd7\u65f6\u8fde\u9501\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I37WTV"},"#I37WTV")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u83b7\u53d6\u7cfb\u7edf\u73af\u5883\u53c2\u6570\u7684\u6027\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I36SR5"},"#I36SR5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u5e95\u5c42\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Mvc")," \u8fc7\u6ee4\u5668\u4ee3\u7801 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I36SKA"},"#I36SKA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6dfb\u52a0\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"Json")," \u5e8f\u5217\u5316\u65f6\u95f4\u9ed8\u8ba4\u65f6\u95f4\u683c\u5f0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I36SL0"},"#I36SL0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," \u5347\u7ea7 ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugar")," \u62d3\u5c55\u5305\u5230 ",(0,l.kt)("inlineCode",{parentName:"li"},"5.0.2.6")," \u7248\u672c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I36SIG"},"#I36SIG")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6570\u636e\u5e93\u5165\u95e8\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I37Z8S"},"#I37Z8S")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u66f4\u65b0\u65e5\u5fd7\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I36PI0"},"#I36PI0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8bf7\u6c42\u5ba1\u8ba1\u65e5\u5fd7\u3001\u6267\u884c ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u66f4\u65b0\u65e5\u5fd7\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I36PIK"},"#I36PIK")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u524d\u7aef\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"axios")," \u8de8\u57df\u914d\u7f6e\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I36PIT"},"#I36PIT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App")," \u9759\u6001\u7c7b\u83b7\u53d6\u5e94\u7528\u3001\u73af\u5883\u66f4\u591a\u4fe1\u606f\u6570\u636e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I36SOV"},"#I36SOV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u82f1\u6587\u7248 ",(0,l.kt)("inlineCode",{parentName:"li"},"README.md")," \u4ecb\u7ecd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I37QHP"},"#I37QHP"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v1130\u5df2\u53d1\u5e03"},"v1.13.0\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u591a\u8bed\u8a00\u529f\u80fd\u53ca\u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DOCL"},"#I2DOCL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4e8b\u4ef6\u603b\u7ebf\u529f\u80fd\u53ca\u6d88\u606f\u4e2d\u5fc3 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I23BKN"},"#I23BKN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u5206\u7ec4\u663e\u793a\u9690\u85cf\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AHH8"},"#I2AHH8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Extras.Logging.Serilog")," \u62d3\u5c55\u63d2\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AAN8"},"#I2AAN8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"cli.ps")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"-Namespace")," \u547d\u540d\u7a7a\u95f4\u6307\u5b9a ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2A175"},"#I2A175")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u89c4\u8303\u5316\u5316\u6587\u6863\u6388\u6743\u5931\u6548\u540e\u81ea\u52a8\u53d6\u6d88\u6388\u6743\u9501 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AIWC"},"#I2AIWC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Request.Body")," \u652f\u6301\u91cd\u590d\u8bfb\u529f\u80fd\uff0c\u4e3b\u8981\u89e3\u51b3\u5fae\u4fe1 SDK \u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AMG0"},"#I2AMG0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7f51\u7edc\u8bf7\u6c42\u529f\u80fd\u53ca\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2APGJ"},"#I2APGJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugar")," \u62d3\u5c55\u5305\u652f\u6301\u6253\u5370 ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u5230 ",(0,l.kt)("inlineCode",{parentName:"li"},"MiniProfiler")," \u4e2d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2ASLS"},"#I2ASLS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Extras.DatabaseAccesssor.Dapper")," \u62d3\u5c55\u63d2\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2ASYA"},"#I2ASYA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Extras.DatabaseAccessor.PetaPoco")," \u62d3\u5c55\u63d2\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AUGA"},"#I2AUGA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7f51\u7edc\u8bf7\u6c42\u5b57\u7b26\u4e32\u62d3\u5c55\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CPQ0"},"#I2CPQ0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugar")," \u62d3\u5c55\u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"li"},"PagedList")," \u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CW99"},"#I2CW99")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u652f\u6301\u53c2\u6570\u7279\u6027\u9a8c\u8bc1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CX5L"},"#I2CX5L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.User")," \u83b7\u53d6\u5f53\u524d\u6388\u6743\u7528\u6237\u4fe1\u606f\u4fbf\u6377\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CZLO"},"#I2CZLO")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u89c4\u8303\u5316\u6587\u6863\u53ef\u914d\u7f6e\u529f\u80fd\uff0c\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"appsettings.json")," \u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2D1K9"},"#I2D1K9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u62e6\u622a\u5668\u6dfb\u52a0\u65b9\u6cd5\u548c\u65b9\u6cd5\u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2D2CM"},"#I2D2CM")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42\u51fa\u9519\u8fd4\u56de\u9ed8\u8ba4\u503c\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2D44M"},"#I2D44M")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"body")," \u53c2\u6570\u5e8f\u5217\u5316\u652f\u6301\u8bbe\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"PropertyNamingPolicy")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2D685"},"#I2D685")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8fdc\u7a0b\u670d\u52a1\u63a5\u53e3\u5ba2\u6237\u7aef\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2D7PS"},"#I2D7PS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AddInject")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"UseInject")," \u5141\u8bb8\u81ea\u5b9a\u4e49 ",(0,l.kt)("inlineCode",{parentName:"li"},"SecurityDefinitions")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"SwaggerUI")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DIMG"},"#I2DIMG")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[SecurityDefine]")," \u9ed8\u8ba4\u6784\u9020\u51fd\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DNXT"},"#I2DNXT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AspectDispatchProxy")," \u52a8\u6001\u4ee3\u7406\u7c7b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DO6I"},"#I2DO6I")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[QueryParameters]")," \u7279\u6027\uff0c\u652f\u6301\u4e00\u952e\u5c06 ",(0,l.kt)("inlineCode",{parentName:"li"},"Action")," \u53c2\u6570\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[FromQuery]")," \u7279\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2G8TF"},"#I2G8TF")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u52a8\u6001\u65e5\u5fd7\u914d\u7f6e\u53ca\u62d3\u5c55\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2GDGD"},"#I2GDGD")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"WebApi")," \u8bf7\u6c42\u8c13\u8bcd\u9ed8\u8ba4\u89c4\u5219\u914d\u7f6e\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2M70X"},"#I2M70X")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," ",(0,l.kt)("inlineCode",{parentName:"li"},".NET 5")," SDK \u5230 ",(0,l.kt)("inlineCode",{parentName:"li"},".NET 5.0.2")," \u7248\u672c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2D0PZ"},"#I2D0PZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u6846\u67b6\u5185\u6240\u6709\u62d3\u5c55\u7c7b\u547d\u540d\u7a7a\u95f4\uff0c\u5168\u90e8\u8fc1\u79fb\u5230 ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.\u6a21\u5757.Extensions")," \u4e0b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AH54"},"#I2AH54")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u8bb0\u4f4f\u6388\u6743\u5b58\u50a8\u65b9\u5f0f\uff0c\u66ff\u6362 ",(0,l.kt)("inlineCode",{parentName:"li"},"Session")," \u5b58\u50a8\u65b9\u5f0f\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"LocalStorage")," \u65b9\u5f0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AKUA"},"#I2AKUA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u6846\u67b6\u5305\u63cf\u8ff0\u6587\u4ef6\uff0c\u51cf\u5c11\u6846\u67b6\u4f53\u79ef ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2APAU"},"#I2APAU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.CanBeScanTypes")," \u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"App.EffectiveTypes")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2B0ZR"},"#I2B0ZR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.ServiceProvider")," \u5c5e\u6027\u5e76\u79fb\u9664 ",(0,l.kt)("inlineCode",{parentName:"li"},"App.GetDuplicateXXX")," \u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CYZE"},"#I2CYZE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetDuplicateDbContext")," \u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetNewDbContext")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CZ04"},"#I2CZ04")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetSqlDispatchProxy")," \u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetSqlProxy")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DO9T"},"#I2DO9T")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Aop")," \u670d\u52a1\u62e6\u622a\u5668\uff0c\u652f\u6301\u5f02\u6b65\u3001\u540c\u6b65\u4e24\u79cd\u65b9\u5f0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2B9HQ"},"#I2B9HQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u7f51\u7edc\u8bf7\u6c42\u6240\u6709\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2BMR7"},"#I2BMR7")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u89c4\u8303\u5316\u5316\u7ed3\u679c\u4e0d\u4e00\u81f4 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2ACF3"},"#I2ACF3")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u65b0\u589e\u6216\u66f4\u65b0\u5ffd\u7565\u7a7a\u503c\u64cd\u4f5c\u65b9\u6cd5\u62a5\u7a7a\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AB6C"},"#I2AB6C")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Startup.cs")," Aop \u5168\u5c40\u62e6\u622a\u65e0\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2A7T2"},"#I2A7T2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u8fc7\u671f\u540e\u81ea\u52a8\u5237\u65b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u65e0\u6cd5\u83b7\u53d6\u6700\u65b0\u7684\u7528\u6237\u4fe1\u606f bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AWQI"},"#I2AWQI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},'[ApiDescriptionSettings(Tag="xx")]')," \u5bfc\u81f4 ",(0,l.kt)("inlineCode",{parentName:"li"},"swagger.json")," \u62a5\u9519 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2B47R"},"#I2B47R")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Mysql")," sql \u6570\u636e\u5e93\u67e5\u8be2\u7ed3\u679c ",(0,l.kt)("inlineCode",{parentName:"li"},"tinyint")," \u7c7b\u578b\u8f6c\u6362\u51fa\u9519 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2BEBM"},"#I2BEBM")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u89c4\u8303\u5316\u7ed3\u679c\u591a\u6b21\u5305\u88f9\u7c7b\u578b bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2BHHZ"},"#I2BHHZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u52a8\u6001 Api \u57fa\u5143\u7c7b\u578b\u6570\u7ec4\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2BMS5"},"#I2BMS5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u67e5\u8be2\u679a\u4e3e\u7c7b\u578b\u8f6c\u6362\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2BS2Y"},"#I2BS2Y")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"string.SqlQuerizeAsync()")," \u62d3\u5c55\u8fd4\u56de\u9519\u8bef bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2BSTS"},"#I2BSTS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u52a8\u6001 Api \u5b50\u7c7b\u91cd\u5199\u7236\u7c7b\u65b9\u6cd5\u5e76\u53d6\u522b\u540d\u540e ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2C9VP"},"#I2C9VP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u7f51\u7edc\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"application/json")," \u5e8f\u5217\u5316\u5927\u5c0f\u5199\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CRJC"},"#I2CRJC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u591a\u6570\u636e\u5e93\u5b9a\u4f4d\u5668\u5b9e\u4f53\u5d4c\u5957\u5173\u8054 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CVN0"},"#I2CVN0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8de8\u57df\u54cd\u5e94\u5934\u8bbe\u7f6e\u65e0\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CW5T"},"#I2CW5T")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u7f51\u7edc\u8bf7\u6c42\u4ee3\u7406\u6253\u5370\u5230 ",(0,l.kt)("inlineCode",{parentName:"li"},"MiniProfiler")," bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CZBC"},"#I2CZBC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8fdc\u7a0b\u8bf7\u6c42\u54cd\u5e94\u62e6\u622a\u5668 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2D4DG"},"#I2D4DG")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugar")," \u6846\u67b6 ",(0,l.kt)("inlineCode",{parentName:"li"},"AsQueryable()")," \u4e00\u76f4\u8ffd\u52a0\u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DH1D"},"#I2DH1D")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea\u52a8\u5237\u65b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u7a7a\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DO29"},"#I2DO29")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u751f\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT Token")," \u4e0d\u4f20\u8fc7\u671f\u65f6\u95f4\u51fa\u73b0\u9a8c\u8bc1 401 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DO8L"},"#I2DO8L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AppStartup")," \u6392\u5e8f\u65e0\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DVD2"},"#I2DVD2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u672a\u542f\u7528\u591a\u8bed\u8a00\u670d\u52a1\u65f6\u53cb\u597d\u5f02\u5e38\u548c\u9a8c\u8bc1\u51fa\u73b0\u7a7a\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2ECUJ"},"#I2ECUJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u6821\u9a8c\u5b57\u6bcd\u548c\u6570\u5b57\u7ec4\u5408\u65e0\u6cd5\u5339\u914d bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2EF2Q"},"#I2EF2Q")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u6821\u9a8c\u624b\u673a\u6216\u56fa\u8bdd\u65e0\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2M5IZ"},"#I2M5IZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Dapper")," \u62d3\u5c55\u89e3\u6790 ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlConnection")," \u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2M5P2"},"#I2M5P2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5f00\u542f\u591a\u8bed\u8a00\u540e\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"EF")," \u8fc1\u79fb\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2M7DT"},"#I2M7DT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IEntityTypeBuilder")," \u4e0d\u652f\u6301\u591a\u91cd\u7ee7\u627f bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2PAOD"},"#I2PAOD")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JwtHandler")," \u8bbe\u7f6e\u81ea\u52a8\u5237\u65b0\u540e\uff0c\u533f\u540d\u8bbf\u95ee\u65e0\u6cd5\u901a\u8fc7 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2SDOX"},"#I2SDOX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Dapper")," \u62d3\u5c55\u4e2d ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlServer")," \u6570\u636e\u5e93\u83b7\u53d6\u8fde\u63a5\u5bf9\u8c61\u7c7b\u578b bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/159"},"#PR159")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u79fb\u9664 ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u67e5\u8be2\u7ed3\u679c\u6620\u5c04\u68c0\u67e5 ",(0,l.kt)("inlineCode",{parentName:"li"},"[NotMapper]")," \u7279\u6027\u673a\u5236 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I34XD0"},"#I34XD0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u4f9d\u8d56\u6ce8\u5165\u65f6\u6392\u9664 ",(0,l.kt)("inlineCode",{parentName:"li"},"IDynamicApiController")," \u63a5\u53e3 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2ECTG"},"#I2ECTG")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MD5")," \u52a0\u5bc6\u6027\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/158"},"#PR158")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u6587\u6863\u9996\u9875 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I34XBR"},"#I34XBR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7f51\u7edc\u8bf7\u6c42\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2APGJ"},"#I2APGJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u591a\u8bed\u8a00\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DOCL"},"#I2DOCL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6587\u6863\u5168\u6587\u641c\u7d22\u5f15\u64ce ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I34XAW"},"#I34XAW")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5168\u5c40\u9759\u6001\u7c7b\u7c7b\u578b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I34XB4"},"#I34XB4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6846\u67b6\u53ef\u914d\u7f6e\u9009\u9879\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I34XB9"},"#I34XB9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u4e8b\u4ef6\u603b\u7ebf\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I34XBI"},"#I34XBI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6570\u636e\u52a0\u89e3\u5bc6\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I34XC0"},"#I34XC0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u8d21\u732e\u6307\u5357\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I34XC8"},"#I34XC8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContext")," \u53ca ",(0,l.kt)("inlineCode",{parentName:"li"},"\u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d")," \u535a\u5ba2\u6587\u7ae0 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I34XCB"},"#I34XCB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u6587\u6863\u5c0f\u8c03\u6574\uff0c\u5c0f\u4f18\u5316"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u8de8\u57df\u8bbe\u7f6e\u65e0\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2ASNJ"},"#I2ASNJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MVC")," \u89c6\u56fe\u65e0\u6548\uff0c\u539f\u56e0\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},".cshtml")," \u6587\u4ef6\u6ca1\u6709\u8bbe\u7f6e\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"\u5185\u5bb9")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AXUU"},"#I2AXUU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql")," \u64cd\u4f5c\u53ef\u4ee5\u5b9e\u73b0\u4e8b\u52a1\u5417\uff1f",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2B0NX"},"#I2B0NX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IRepository")," \u64cd\u4f5c\u6570\u636e\u5e93\u4f1a\u6253\u5f00\u591a\u6b21\u6570\u636e\u5e93\u8fde\u63a5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2BB7B"},"#I2BB7B")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5982\u4f55\u8fdb\u5165\u81ea\u5b9a\u4e49 ",(0,l.kt)("inlineCode",{parentName:"li"},"AppAuthorizeHandler")," \u65ad\u70b9 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2BGXY"},"#I2BGXY")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugar")," \u6ce8\u5165\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2C2AQ"},"#I2C2AQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5efa\u8bae\u589e\u52a0 API \u7b7e\u540d\u9a8c\u8bc1\uff0c\u65f6\u6548\u9a8c\u8bc1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2C6ET"},"#I2C6ET")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u591a\u6570\u636e\u5e93\u591a\u79df\u6237\u540c\u65f6\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"Add-Migration")," \u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CEHS"},"#I2CEHS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ISqlSugarRepository")," \u6ca1\u6709 ",(0,l.kt)("inlineCode",{parentName:"li"},"Getxxx")," \u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CJLZ"},"#I2CJLZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"cli.ps1")," \u5982\u4f55\u5c06 ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u91cc\u7684\u8868\u5bfc\u51fa\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"model")," \u7c7b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2CSUL"},"#I2CSUL")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u624b\u52a8\u4fee\u6539 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u7ec8\u7ed3\u70b9\u8def\u5f84\u65e0\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2D608"},"#I2D608")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"DefaultDbContext")," \u4e0d\u80fd\u8bc6\u522b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DCZX"},"#I2DCZX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5404\u5206\u5c42\u9879\u76ee ",(0,l.kt)("inlineCode",{parentName:"li"},"Startup.cs")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Configuration")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DDUP"},"#I2DDUP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Aop")," \u65e0\u6cd5\u62e6\u622a\uff0c\u65e0\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DEY8"},"#I2DEY8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"mysql")," \u6267\u884c ",(0,l.kt)("inlineCode",{parentName:"li"},"Add-Migration")," \u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2DSB8"},"#I2DSB8"),"\\"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Entity")," \u521b\u5efa\u65f6\u95f4\u548c\u662f\u5426\u5220\u9664\u6dfb\u52a0\u9ed8\u8ba4\u503c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2E04H"},"#I2E04H")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"swagger")," \u4e2d\u591a\u4e2a ",(0,l.kt)("inlineCode",{parentName:"li"},"servers")," \u8bbe\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2E0IF"},"#I2E0IF")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5168\u5c40\u7b5b\u9009\u5668 \u6ca1\u6709\u6267\u884c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2E5R4"},"#I2E5R4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u591a\u6570\u636e\u5e93\u5b9a\u4f4d\u5668\u7591\u95ee ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2E77T"},"#I2E77T")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"cli.ps")," \u9006\u5411\u5de5\u7a0b ",(0,l.kt)("inlineCode",{parentName:"li"},"Mysql")," \u6570\u636e\u5e93\u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2E7I5"},"#I2E7I5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u5f00\u53d1\u73af\u5883 ",(0,l.kt)("inlineCode",{parentName:"li"},"applicationsettings.json")," \u4e2d\u6587\u4e71\u7801 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2EAG1"},"#I2EAG1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u589e\u52a0\u6307\u5b9a\u8def\u5f84\u7a0b\u5e8f\u96c6\u6620\u5c04 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2EEO2"},"#I2EEO2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u52a8\u6001\u7f16\u8bd1 ",(0,l.kt)("inlineCode",{parentName:"li"},"cs")," \u811a\u672c\u6587\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2EH66"},"#I2EH66")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u81ea\u5b9a\u4e49\u4e2d\u95f4\u4ef6\uff0c\u8fd4\u56de\u7684\u9519\u8bef\u6ca1\u6709\u89c4\u8303\u5316\u7ed3\u679c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2NV8S"},"#I2NV8S")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u5faa\u73af\u5f15\u7528\u8bbe\u7f6e\u751f\u6210\u6587\u6863\u5c42\u7ea7\u65e0\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2PLQQ"},"#I2PLQQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u914d\u7f6e\u6587\u4ef6\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"yaml")," \u6587\u4ef6\u5417? ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2TJ3N"},"#I2TJ3N")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u4fee\u6539\u6570\u636e\u5e93\u672a ",(0,l.kt)("inlineCode",{parentName:"li"},"mysql")," \u6267\u884c ",(0,l.kt)("inlineCode",{parentName:"li"},"Add-Migration")," \u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2VR64"},"#I2VR64")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u591a\u6570\u636e\u5e93\u4f7f\u7528\u5b9a\u4f4d\u5668\u65f6\u62a5\u9519 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2VR8F"},"#I2VR8F")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Migration To Oracle")," \u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2WBYQ"},"#I2WBYQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5f00\u53d1\u65f6\u663e\u793a ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger"),"\uff0c\u4e0a\u7ebf\u65f6\u5173\u95ed ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger"),"\uff0c\u8fd9\u9700\u8981\u600e\u4e48\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2WOYV"},"#I2WOYV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u517c\u5bb9 Mvc \u590d\u6742\u9a8c\u8bc1\u6ca1\u6709\u8bd5\u9a8c\u6210\u529f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2X3GV"},"#I2X3GV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Aop")," \u80fd\u4e0d\u80fd\u652f\u6301\u65e0\u63a5\u53e3\u7684\u7c7b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2X8AS"},"#I2X8AS")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5173\u4e8e ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT Token")," \u81ea\u52a8\u5237\u65b0\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2YD4K"},"#I2YD4K")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u80fd\u5426\u589e\u52a0\u4e00\u4e2a\u62d3\u5c55\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"Entity"),"\uff0c\u589e\u52a0\u4e00\u4e9b\u62d3\u5c55\u7684\u5c5e\u6027 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2YDKT"},"#I2YDKT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u65e0\u6cd5\u8fd8\u539f\u5305\uff0c\u4f7f\u7528",(0,l.kt)("inlineCode",{parentName:"li"},"Nuget")," \u4e0b\u8f7d\u548c\u901a\u8fc7\u6700\u65b0\u7684\u7684\u811a\u624b\u67b6\u4e0b\u8f7d\u90fd\u63d0\u793a\u8fd9\u4e2a\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I30446"},"#I30446")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u590d\u6742\u6821\u9a8c\u4e0e\u7279\u6027\u9a8c\u8bc1\u4e0d\u80fd\u5e76\u884c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I3046U"},"#I3046U"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v170\u5df2\u53d1\u5e03"},"v1.7.0\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Extras.ObjectMapper.Mapster")," \u62d3\u5c55\u5305 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29LSJ"},"#I29LSJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Extras.Logging.Serilog")," \u62d3\u5c55\u5305 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AAN8"},"#I2AAN8")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Extras.Web.HttpContext")," \u62d3\u5c55\u5305 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29LSM"},"#I29LSM")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5185\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u5237\u65b0\u673a\u5236\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29K57"},"#I29K57")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u52a8\u6001\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\uff0c\u652f\u6301\u8fd0\u884c\u65f6\u6267\u884c ",(0,l.kt)("inlineCode",{parentName:"li"},"OnModelCreating")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28UDT"},"#I28UDT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u652f\u6301\u4f9d\u8d56\u6ce8\u5165\u6392\u9664\u6307\u5b9a\u63a5\u53e3 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29693"},"#I29693")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u89c4\u8303\u5316\u7ed3\u679c\u8fd4\u56de\u65f6\u95f4\u6233\u5b57\u6bb5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29697"},"#I29697")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u57fa\u7840 ",(0,l.kt)("inlineCode",{parentName:"li"},"CURD")," \u7236\u7c7b\u64cd\u4f5c\u4f8b\u5b50 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I296SR"},"#I296SR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},'sql.Change("\u5b9a\u4f4d\u5668\u5b8c\u6574\u7c7b\u578b\u540d\u79f0")')," \u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29LAB"},"#I29LAB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"UpdateInclude")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"UpdateExclude")," \u5ffd\u7565\u7a7a\u53c2\u6570\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29VUG"},"#I29VUG")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5185\u7f6e\u5047\u5220\u9664\u67e5\u8be2\u8fc7\u6ee4\u5668\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29Y2R"},"#I29Y2R")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5ffd\u7565\u7a7a\u503c\u6392\u9664\u9ed8\u8ba4\u65f6\u95f4\u683c\u5f0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29VUV"},"#I29VUV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MiniProfiler")," \u7ec4\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I297R9"},"#I297R9")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"AppAuthorizeHandler")," \u6388\u6743\u7ba1\u9053\u4e3a\u5f02\u6b65\u5904\u7406 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29MD9"},"#I29MD9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u9ed8\u8ba4\u542f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"JWT")," \u6388\u6743\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29LI4"},"#I29LI4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContextUtilities")," \u540d\u79f0\u6539\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContextLocal")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29KQE"},"#I29KQE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"UnifyResultContext")," \u540d\u79f0\u6539\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"UnifyContext")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29LLZ"},"#I29LLZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u53ea\u6709\u6267\u884c\u8fc1\u79fb\u547d\u4ee4\u624d\u626b\u63cf\u79cd\u5b50\u6570\u636e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29E6P"},"#I29E6P")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u89c4\u8303\u5316\u7ed3\u679c ",(0,l.kt)("inlineCode",{parentName:"li"},"Successed")," \u5c5e\u6027\u540d\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"Succeeded")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29NMV"},"#I29NMV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Mapster")," \u5bf9\u8c61\u7ec4\u4ef6\uff0c\u91c7\u7528\u63d0\u4f9b\u62d3\u5c55\u65b9\u5f0f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29D2M"},"#I29D2M")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("inlineCode",{parentName:"li"},"CacheManager")," \u62d3\u5c55\u7c7b ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29LU1"},"#I29LU1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SaveChanges")," \u62e6\u622a\u5668 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I292LO"},"#I292LO")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u672a\u6ce8\u518c\u7684\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u4e5f\u88ab\u5f15\u7528\u5168\u5c40\u67e5\u8be2\u62e6\u622a\u5668 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29ZXJ"},"#I29ZXJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u624b\u52a8\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"BadObjectResult")," \u6216 ",(0,l.kt)("inlineCode",{parentName:"li"},"ValidationProblemDetails")," \u7ed3\u679c\u7c7b\u578b\u65f6\u89c4\u8303\u5316\u7ed3\u679c\u5931\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29ZU9"},"#I29ZU9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u52a8\u6001 WebApi ",(0,l.kt)("inlineCode",{parentName:"li"},"KeepName"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"KeepVerb"),"\u3001",(0,l.kt)("inlineCode",{parentName:"li"},"SplitCamelCase")," \u65e0\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29X90"},"#I29X90")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql\u4ee3\u7406")," \u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"\u5143\u7ec4")," \u7c7b\u578b\u51fa\u9519 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29SMV"},"#I29SMV")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"401\uff0c403")," \u72b6\u6001\u7801\u89c4\u8303\u5316\u8fd4\u56de\u503c\u5c5e\u6027\u53d8\u5927\u5199 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29M8Y"},"#I29M8Y")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContext")," \u7a7a\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29LU4"},"#I29LU4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u63a5\u53e3\u65e0\u8fd4\u56de\u503c\u6ca1\u6709\u5e94\u7528\u89c4\u8303\u5316\u7ed3\u679c bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29GT7"},"#I29GT7")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u524d\u7aef ",(0,l.kt)("inlineCode",{parentName:"li"},"Less")," \u914d\u7f6e\u6587\u4ef6\u5bfc\u81f4\u4e3b\u673a\u542f\u52a8\u5931\u8d25 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29E7P"},"#I29E7P")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6267\u884c ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u7ed3\u679c\u8f6c\u6cdb\u578b\u540e\u5c5e\u6027\u91cd\u590d\u8d4b\u503c bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29BUO"},"#I29BUO")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u5173\u95ed ",(0,l.kt)("inlineCode",{parentName:"li"},"MiniProfiler")," \u4e4b\u540e ",(0,l.kt)("inlineCode",{parentName:"li"},"\u7ec4\u4e2d\u7ec4")," \u5931\u6548 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29789"},"#I29789")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u672a\u542f\u7528\u89c4\u8303\u5316\u7ed3\u679c\u65f6\u5f02\u5e38\u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"System.Object")," \u5b57\u7b26 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2969A"},"#I2969A")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6b63\u6570\u6570\u636e\u9a8c\u8bc1 0 \u4e5f\u9a8c\u8bc1\u901a\u8fc7 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2955T"},"#I2955T")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u975e\u6cdb\u578b\u7c7b\u96c6\u6210\u6cdb\u578b\u63a5\u53e3\u4f9d\u8d56\u6ce8\u5165 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I294YT"},"#I294YT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"new")," \u8986\u76d6\u7236\u7c7b\u7684 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28Z1A"},"#I28Z1A")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JsonSerializerUtility")," \u6ca1\u6709\u516c\u5f00 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28WMI"},"#I28WMI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlSugar")," \u62d3\u5c55\u67e5\u8be2\u6cdb\u578b\u7c7b\u578b\u6ce8\u518c\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28VMT"},"#I28VMT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion Tools")," \u4e0d\u652f\u6301\u751f\u6210\u4e0d\u540c\u547d\u540d\u7a7a\u95f4\u7684\u5b9e\u4f53 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2A175"},"#I2A175")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5168\u5c40\u62e6\u622a\u5668\u65e0\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2A7T2"},"#I2A7T2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u65b0\u589e\u6216\u66f4\u65b0\u5ffd\u7565\u7a7a\u503c\u7a7a\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2AB6C"},"#I2AB6C")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Token")," \u751f\u6210\u52a0\u5bc6\u7b97\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29KIH"},"#I29KIH")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u65e5\u5fd7\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28Y9D"},"#I28Y9D")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u3001\u5b9e\u4f53\u62e6\u622a\u5668\u3001\u914d\u7f6e\u3001\u4e00\u5206\u949f\u5165\u95e8\u7b49\u7b49\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u5982\u4f55\u5b9e\u73b0\u6388\u6743\u8bbf\u95ee ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I294F2"},"#I294F2")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5982\u4f55\u5b9e\u73b0\u591a\u4e2a\u6570\u636e\u5e93\u591a\u5bf9\u591a\u5b9e\u4f53\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29G6S"},"#I29G6S")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u52a8\u6001 WebApi \u652f\u6301\u6587\u4ef6\u4e0a\u4f20\u5417 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I29R5E"},"#I29R5E")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u591a\u4e2a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u65e0\u6cd5\u751f\u6210\u8fc1\u79fb\u4ee3\u7801 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2A6II"},"#I2A6II"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v140\u5df2\u53d1\u5e03"},"v1.4.0\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")," \u652f\u6301\u4e8c\u7ea7\u865a\u62df\u76ee\u5f55\u90e8\u7f72\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28B77"},"#I28B77")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Template.RazorWithWebApi")," \u811a\u624b\u67b6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28QGI"},"#I28QGI")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion.Template.BlazorWithWebApi")," \u811a\u624b\u67b6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27Z3O"},"#I27Z3O")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," \u65f6\u6001\u67e5\u8be2\u62d3\u5c55 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28AJ6"},"#I28AJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[AppDbContext(\u8fde\u63a5\u5b57\u7b26\u4e32\uff0c\u6570\u636e\u5e93\u7c7b\u578b)]")," \u914d\u7f6e\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28QTB"},"#I28QTB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTimeOffset")," \u8f6c ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTime")," \u62d3\u5c55\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27MQA"},"#I27MQA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ValidationTypes")," \u9a8c\u8bc1\u6b63\u5219\u8868\u8fbe\u5f0f\u667a\u80fd\u63d0\u793a ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2801V"},"#I2801V")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ValiationTypes.WordWithNumber")," \u9a8c\u8bc1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2805A"},"#I2805")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u83b7\u53d6\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u7aef IP \u5730\u5740 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28QV9"},"#I28QV9")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u5347\u7ea7")," .NET 5.0 \u7248\u672c\u81f3 .NET 5.0.1 \u7248\u672c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28QU1"},"#I28QU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u89c6\u56fe\u5f15\u64ce\u529f\u80fd\uff0c\u4f18\u5316\u4e0d\u89c4\u8303\u547d\u540d\u548c\u65b0\u589e\u5b57\u7b26\u4e32\u6a21\u677f\u7f16\u8bd1 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28G0S"},"#I28G0S")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u6570\u636e\u5e93\u5b9e\u4f53\u67e5\u627e\u7b97\u6cd5\uff0c\u5e76\u4f18\u5316\u6027\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28QUQ"},"#I28QUQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u5e94\u7528\u542f\u52a8\u521d\u59cb\u5316\u6027\u80fd\u548c\u6570\u636e\u5e93\u7b2c\u4e00\u6b21\u81ea\u52a8\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"DbSet")," \u6027\u80fd"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u591a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u914d\u7f6e\u5b9a\u4f4d\u5668\u540e\u5b9e\u4f53\u65e0\u6cd5\u6b63\u786e\u751f\u6210 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2888L"},"#I2888L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u591a\u79df\u6237\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9e\u4f53\u751f\u6210 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2891G"},"#I2891G")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5bf9\u8c61\u9a8c\u8bc1\u5931\u8d25\u63d0\u793a\u6d88\u606f\u6ca1\u6709\u5e94\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"JSON")," \u5927\u5c0f\u5199\u914d\u7f6e bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27UTX"},"#I27UTX")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4ed3\u50a8 ",(0,l.kt)("inlineCode",{parentName:"li"},"Insert")," \u6216 ",(0,l.kt)("inlineCode",{parentName:"li"},"Update")," \u65b9\u6cd5\u6307\u5b9a ",(0,l.kt)("inlineCode",{parentName:"li"},"ignoreNullValues")," \u65e0\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27UN6"},"#I27UN6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Controller")," \u6d3e\u751f\u7c7b\u5982\u679c\u8d34\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"[Route]")," \u7279\u6027\u540e\u51fa\u73b0\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u4e2d bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27TN7"},"#I27TN7")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlScalar")," \u6267\u884c ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u8fd4\u56de ",(0,l.kt)("inlineCode",{parentName:"li"},"Nullable")," \u7c7b\u578b\u51fa\u73b0\u8f6c\u6362\u5931\u8d25 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27S2N"},"#I27S2N")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[UnitOfWork]")," \u7279\u6027\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27MLM"},"#I27MLM")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u9759\u6001\u6267\u884c\u65b9\u5f0f\u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"sql")," \u9ad8\u7ea7\u4ee3\u7406\u65e0\u6cd5\u76d1\u542c\u6570\u636e\u5e93\u8fde\u63a5\u72b6\u6001 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27M4F"},"#I27M4F")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4fee\u590d\u66f4\u6362 Json \u5e8f\u5217\u5316\u5e93\u65e0\u6548 bug\uff0c\u5982\u66ff\u6362\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"Microsoft.AspNetCore.Mvc.NewtonsoftJson")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27M43"},"#I27M43")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion Tools")," \u5de5\u5177\u751f\u6210\u6a21\u578b bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27XI5"},"#I27XI5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u8f6f\u5220\u9664\u6ca1\u6709\u751f\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2804I"},"#I2804I")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion Tools")," \u8bc6\u522b\u5e26\u591a\u4e2a ",(0,l.kt)("inlineCode",{parentName:"li"},"\\\\")," \u7684\u8fde\u63a5\u5b57\u7b26\u4e32\u8bc6\u522b bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I280TS"},"#I280TS"),"\uff0c",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/91"},"#PR91")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion Tools")," \u65e0\u6cd5\u53d6\u6d88\u751f\u6210 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2816M"},"#I2816M")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTimeOffset")," \u8f6c\u672c\u5730\u65f6\u95f4\u5dee 8 \u5c0f\u65f6 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28BA9"},"#I28BA9")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u542f\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"bundle js&css")," \u538b\u7f29\u540e\u542f\u52a8\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28KRP"},"#I28KR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ValidationTypes.Required")," \u65e0\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/98"},"#PR98")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u89c4\u8303\u5316\u7ed3\u679c",(0,l.kt)("inlineCode",{parentName:"li"},"OnValidateFailed")," \u53c2\u6570\u540d\u62fc\u5199\u9519\u8bef bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/93"},"#PR93"),"\uff0c",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/92"},"#PR92")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6388\u6743\u7ba1\u9053\u9a8c\u8bc1\u5931\u8d25\u8fd8\u663e\u793a\u7ed3\u679c bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/89"},"#PR89")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," README.md \u53cb\u60c5\u8fde\u63a5\u5730\u5740 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/88"},"#PR88")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6a21\u677f\u811a\u624b\u67b6\u6e90\u7801\uff0c\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore Tools")," \u5e93 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/87"},"#PR87")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," README.md Nuget \u56fe\u6807 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/85"},"#PR85")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," \u5c06 ",(0,l.kt)("inlineCode",{parentName:"li"},"List")," \u8f6c ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTable")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/97"},"#PR97")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u89c6\u56fe\u5f15\u64ce\u6a21\u677f\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27ZVA"},"#I27ZVA")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," \u65f6\u6001\u67e5\u8be2\u6587\u6863 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28AJ6"},"#I28AJ"),", ",(0,l.kt)("a",{parentName:"li",href:"https://furion.baiqian.ltd/docs/dbcontext-hight-query/#91111-%E6%97%B6%E6%80%81%E6%9F%A5%E8%AF%A2"},"DOC")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u4ed3\u50a8\u6587\u6863\u4e66\u5199\u7eb0\u6f0f bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/90"},"#PR90")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u9009\u9879\u6587\u6863\u9519\u8bef bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/86"},"#PR86")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"\u5b9e\u4f53\u6570\u636e\u76d1\u542c\u5668")," \u6587\u6863\u4e66\u5199\u9519\u8bef bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/83/files"},"#PR83")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u3001\u591a\u6570\u636e\u5e93\u3001\u811a\u624b\u67b6\u7b49\u6587\u6863"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u7b54\u7b54\u7591")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5e0c\u671b ",(0,l.kt)("inlineCode",{parentName:"li"},"api")," \u8fd4\u56de\u7684\u503c\u81ea\u52a8\u5c06 null \u8f6c\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"''")," \u6216 ",(0,l.kt)("inlineCode",{parentName:"li"},"[]")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I286IJ"},"#I286IJ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u6dfb\u52a0\u7f51\u5173\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27TP7"},"#I27TP7"),"\uff0c\u3010\u5df2\u5173\u95ed\u3011"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u65b0\u589e ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlQuery")," \u83b7\u53d6\u5355\u6761\u8bb0\u5f55\u65b9\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28M1V"},"#I28M1V")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5e0c\u671b\u53ef\u4ee5\u63d0\u4f9b\u96c6\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"Serilog")," \u4f8b\u5b50 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I282J4"},"#I282J4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u5982\u4f55\u901a\u8fc7\u7279\u6027\u914d\u7f6e\u552f\u4e00\u7ea6\u675f ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2891L"},"#I2891L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u600e\u4e48\u8bfb\u53d6 ",(0,l.kt)("inlineCode",{parentName:"li"},"appsettings.json")," \u6570\u7ec4 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27WUR"},"#I27WU")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," ",(0,l.kt)("inlineCode",{parentName:"li"},"IRepository")," \u51fa\u73b0\u7a7a\u5f02\u5e38 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I281IE"},"#I281IE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u89c4\u8303\u5316\u63a5\u53e3\u95ee\u9898\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28NMZ"},"#I28NMZ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u7b54\u7591")," \u7edf\u4e00\u8fd4\u56de\u503c\u6a21\u578b\u4e2d OnResponseStatusCodes \u672a\u6267\u884c ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I28NNL"},"#I28NNL"))))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v120\u5df2\u53d1\u5e03"},"v1.2.0\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u96ea\u82b1\u7b97\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26OXG"},"#I26OXG"),", ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/78"},"#PR78")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"[AppDbContext]")," \u914d\u7f6e\u6570\u636e\u5e93\u63d0\u4f9b\u5668\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27G3T"},"#I27G3T")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b9e\u4f53\u8868\u6570\u636e\u66f4\u6539\u76d1\u542c\u63a5\u53e3 ",(0,l.kt)("inlineCode",{parentName:"li"},"IEntityDataChangedListener")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I278DD"},"#I278DD"),", ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I278LQ"},"#I278LQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5168\u5c40\u670d\u52a1\u63a5\u53e3 AOP \u62e6\u622a\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I278CP"},"#I278CP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b9a\u4f4d\u5668\u4ed3\u50a8 ",(0,l.kt)("inlineCode",{parentName:"li"},"IDbRepository")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I276Q3"},"#I276Q3")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6570\u636e\u5e93\u64cd\u4f5c ",(0,l.kt)("inlineCode",{parentName:"li"},"InsertOrUpdate")," \u652f\u6301\u6392\u9664\u7a7a\u5b57\u7b26\u4e32\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I272OG"},"#I272OG")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6570\u636e\u5e93\u64cd\u4f5c ",(0,l.kt)("inlineCode",{parentName:"li"},"UpdateInclude")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"UpdateExclude")," \u533f\u540d\u5bf9\u8c61\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I271X0"},"#I271X0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6570\u636e\u9a8c\u8bc1\u4f20\u5165\u7a7a\u5bf9\u8c61\u8df3\u8fc7\u9a8c\u8bc1\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I273R4"},"#I273R4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5e94\u7528\u542f\u52a8\u65f6\u652f\u6301\u6392\u9664\u7279\u5b9a\u914d\u7f6e\u6587\u4ef6\u81ea\u52a8\u52a0\u8f7d ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26U0A"},"#I26U0A")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5355\u4e2a\u5b9e\u4f53\u8868\u540d\u524d\u7f00\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26LX0"},"#I26LX0")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MySql")," \u6570\u636e\u5e93\u81ea\u52a8\u914d\u7f6e\u9ed8\u8ba4\u7248\u672c\u53f7 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26XQ6"},"#I26XQ6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6388\u6743\u5904\u7406\u7a0b\u5e8f\u4ee3\u7801"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b9e\u4f53\u8868\u6570\u636e\u66f4\u6539\u76d1\u542c\u63a5\u53e3 ",(0,l.kt)("inlineCode",{parentName:"li"},"IEntityDataChangedListener")," ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I278DD"},"#I278DD"),", ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I278LQ"},"#I278LQ")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5168\u5c40\u670d\u52a1\u63a5\u53e3 AOP \u62e6\u622a\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I278CP"},"#I278CP")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u96ea\u82b1\u7b97\u6cd5 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26OXG"},"#I26OXG"),", ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/78"},"#PR78")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u89c6\u56fe\u5f15\u64ce\u52a0\u8f7d\u5916\u90e8\u7a0b\u5e8f\u96c6\u51fa\u9519 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u4f9d\u8d56\u6ce8\u5165\u4ee3\u7406\u63a5\u53e3\u62a5\u7a7a\u5bf9\u8c61\u5f02\u5e38 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EFCore")," \u53d6\u6d88\u9644\u52a0\u5b9e\u4f53\u51fa\u9519 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u4ed3\u50a8\u5728\u975e Web \u8bf7\u6c42\u4e0b\u51fa\u73b0\u7a7a\u5f02\u5e38 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u591a\u4e2a\u6388\u6743\u7b56\u7565\u5171\u5b58\u95ee\u9898\u51fa\u73b0\u65e0\u6548 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u53cb\u597d\u5f02\u5e38 ",(0,l.kt)("inlineCode",{parentName:"li"},"Oop.Oh")," \u4e0d\u652f\u6301\u666e\u901a\u65b9\u6cd5 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u83b7\u53d6\u591a\u79df\u6237\u5bf9\u8c61\u65f6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u51fa\u73b0\u4f5c\u7528\u57df\u9a8c\u8bc1\u5931\u8d25 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5de5\u4f5c\u5355\u5143\u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql\u4ee3\u7406")," \u62e6\u622a bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I27GST"},"#I27GST")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("a",{parentName:"li",href:"https://furion.baiqian.ltd/docs/dbcontext-entitytrigger"},"\u5b9e\u4f53\u6570\u636e\u76d1\u542c\u5668")," \u6587\u6863"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u4e00\u5206\u949f\u5165\u95e8\u3001\u5e94\u7528\u542f\u52a8\u3001\u5b98\u65b9\u811a\u624b\u67b6\u3001\u6570\u636e\u5e93\u64cd\u4f5c\u6307\u5357\u3001\u5bf9\u8c61\u6620\u5c04\u3001\u89c4\u8303\u5316\u6587\u6863\u3001\u5f02\u5e38\u5904\u7406\u3001\u9274\u6743\u6388\u6743\u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v110\u5df2\u53d1\u5e03"},"v1.1.0\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetDbContext()")," \u83b7\u53d6\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u65b9\u6cd5"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContextUtility.GetCurrentHttpContext()")," \u83b7\u53d6\u5168\u5c40 ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContext")," \u4e0a\u4e0b\u6587"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.GetRequiredService<>")," \u89e3\u6790\u670d\u52a1\u65b9\u6cd5"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"object.GetService<>")," \u5bf9\u8c61\u62d3\u5c55\u65b9\u6cd5"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7b56\u7565\u6388\u6743 ",(0,l.kt)("inlineCode",{parentName:"li"},"PolicyPipeline")," \u57fa\u7c7b\u65b9\u6cd5\uff0c\u652f\u6301\u591a\u91cd\u5224\u65ad\u6388\u6743"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"JWTEncryption.ValidateJwtBearerToken")," \u624b\u52a8\u9a8c\u8bc1\u9759\u6001\u65b9\u6cd5"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5168\u5c40\u6570\u636e\u5e93\u4e0a\u4e0b\u6587 ",(0,l.kt)("inlineCode",{parentName:"li"},"InsertOrUpdateIgnoreNullValues")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"EnabledEntityStateTracked")," \u5168\u5c40\u914d\u7f6e"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger Jwt\u6388\u6743")," \u5168\u5c40\u6388\u6743\u53c2\u6570 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26GLR"},"#I26GLR")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"InsertOrUpdate")," \u652f\u6301\u81ea\u5b9a\u4e49\u5224\u65ad\u6761\u4ef6\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I269Q1"},"#I269Q1")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b57\u7b26\u4e32\u5b57\u6bb5\u5c0f\u5199\u547d\u540d\u652f\u6301 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2695D"},"#I2695D")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5b57\u7b26\u4e32\u6587\u672c\u5bf9\u6bd4\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I268LE"},"#I268LE")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u5168\u5c40\u5f02\u5e38\u7279\u6027\u6d88\u606f\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2662O"},"#I2662O")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Insert")," \u6216 ",(0,l.kt)("inlineCode",{parentName:"li"},"Update")," \u6570\u636e\u5e93\u5ffd\u7565\u7a7a\u503c\u529f\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I264Q4"},"#I264Q4")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Fur")," \u9879\u76ee\u540d\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"Furion")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetRequestDbContext<>()")," \u547d\u540d\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetDbContext<>()")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetDbContext<>()")," \u547d\u540d\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"Db.GetDuplicateDbContext<>()")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.GetService<>")," \u89e3\u6790\u670d\u52a1\u7684\u5e95\u5c42\u903b\u8f91\uff0c\u5927\u5927\u63d0\u9ad8\u4e86\u89e3\u6790\u670d\u52a1\u7684\u6027\u80fd"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u6388\u6743\u6838\u5fc3\u4ee3\u7801\uff0c\u4fdd\u6301\u548c\u5fae\u8f6f\u4e00\u81f4\u7684\u6388\u6743\u89c4\u8303 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26DCB"},"#I26DCB")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.GetRequestService<>")," \u65b9\u6cd5"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ValidateJwtBearer")," Jwt \u6388\u6743\u65b9\u6cd5\uff0c\u65e0\u9700\u624b\u52a8\u5224\u65ad\u4e86"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," Furion \u5b98\u65b9\u811a\u624b\u67b6\u751f\u6210\u540e\u7f16\u8bd1\u5f02\u5e38 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Tenant")," \u5185\u7f6e\u5c5e\u6027\u4e0d\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"virtual")," \u4fee\u9970 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"dockerfile")," \u65b0\u547d\u540d\u6784\u5efa\u5931\u8d25 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u81ea\u5b9a\u4e49\u89d2\u8272\u6388\u6743\u548c\u591a\u4e2a\u6388\u6743\u5171\u5b58\u51fa\u73b0 403 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26H1L"},"#I26H1L")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"httpContext.GetEndpoint()")," \u7a7a\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/73"},"#PR73")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Oops.Oh")," \u7a7a\u5f02\u5e38\u548c\u4e0d\u652f\u6301\u670d\u52a1\u629b\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26EFU"},"#I26EFU"),"\uff0c",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26GM4"},"#I26GM4")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"cli.ps")," \u751f\u6210\u6587\u4ef6\u7f16\u7801\u4e71\u7801 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26DVT"},"#I26DVT")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u6587\u4ef6\u4e0a\u4f20\u6309\u94ae\u4e0d\u663e\u793a ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26B6U"},"#I26B6U")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u89c4\u8303\u5316\u7ed3\u679c\u6388\u6743\u72b6\u6001\u7801\u5e8f\u5217\u5316\u5927\u5c0f\u5199\u4e0d\u4e00\u81f4\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I26B26"},"#I26B26")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u672a\u542f\u7528\u89c4\u8303\u5316\u7ed3\u679c\u65f6\u4e2d\u6587\u4e71\u7801 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I268T5"},"#I268T5")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MySql")," \u5f02\u6b65\u5f02\u5e38\u6355\u83b7\u4e0d\u5230 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I265SO"},"#I265SO")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"cli.ps1")," \u63d0\u793a\u627e\u4e0d\u5230\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2647U"},"#I2647U")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4f18\u5316")," \u4ee3\u7801\u6027\u80fd\u5c0f\u4f18\u5316\u548c\u5c0f\u8c03\u6574"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u4e00\u5206\u949f\u5165\u95e8\u3001\u5b89\u5168\u9274\u6743\u3001\u6570\u636e\u5e93\u7b49\u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v103\u5df2\u53d1\u5e03"},"v1.0.3\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," Mvc \u6a21\u677f\u811a\u624b\u67b6\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"Fur.Template.Mvc")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," WebApi \u6a21\u677f\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"Fur.Template.Api")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," Mvc/WebApi \u6a21\u677f\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"Fur.Template.App")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," Razar Pages \u6a21\u677f\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"Fur.Template.Razor")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," Blazor \u6a21\u677f\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"Fur.Template.Blazor")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"PagedList")," \u5230 ",(0,l.kt)("inlineCode",{parentName:"li"},"System.Collections.Generic")," \u547d\u540d\u7a7a\u95f4\u4e0b"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u89e3\u6790\u670d\u52a1\u6027\u80fd\u95ee\u9898\uff0c\u5e95\u5c42\u4ee3\u7801\u5927\u91cf\u4f18\u5316"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"ApiSears.ControllerEnd"),"\u4e0d\u8d77\u4f5c\u7528 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I25KH6"},"#I25KH6")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"RemoteRequest")," \u8bf7\u6c42\u5b8c\u6210\u7ed3\u679c\u5e8f\u5217\u5316\u5c5e\u6027\u5927\u5c0f\u5199\u95ee\u9898 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I25I8R"},"#I25I8R")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpContext.GetEndpoinet()")," \u7a7a\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/73"},"#PR73")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u5165\u95e8\u6587\u6863\u3001\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6587\u6863\u3001\u591a\u6570\u636e\u5e93\u64cd\u4f5c\u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v102\u5df2\u53d1\u5e03"},"v1.0.2\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Pomelo.EntityFrameworkCore.MySql")," \u6700\u65b0 .NET 5 \u5305\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I24ZQK"},"#I24ZQK")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},".AddDateTimeJsonConverter(format)")," \u65f6\u95f4\u683c\u5f0f\u5e8f\u5217\u5316\u914d\u7f6e"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTime")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTimeOffset")," \u7c7b\u578b\u5e8f\u5217\u5316\u683c\u5f0f\u914d\u7f6e ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I253FI"},"#I253FI")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Mapster")," \u5305\u81f3 ",(0,l.kt)("inlineCode",{parentName:"li"},"7.0.0")," \u7248"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.Services")," \u540d\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"App.ServiceProvider")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," ",(0,l.kt)("inlineCode",{parentName:"li"},"App.ApplicationServices")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"App.GetRequestService<>()")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," \u975e Web \u4e3b\u673a\u6ce8\u5165\u62d3\u5c55"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"services.AddFriendlyException()")," \u7f3a\u5c11\u914d\u7f6e\u6ce8\u5165 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6c60\u88ab\u91ca\u653e\u548c\u9ad8\u5e76\u53d1\u4e0b\u5185\u5b58\u6ea2\u51fa bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I2524K"},"#I2524K"),"\uff0c",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I24UMN"},"#I24UMN")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Sql\u4ee3\u7406")," \u8fd4\u56de\u7a7a\u6570\u636e\u65f6\u5f02\u5e38 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I24TCK"},"#I24TCK")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5de5\u4f5c\u5355\u5143 ",(0,l.kt)("inlineCode",{parentName:"li"},"[UnitOfWork]")," \u591a\u6570\u636e\u5e93\u88ab\u91ca\u653e bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I24Q6W"},"#I24Q6W")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"EntityBase")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Entity")," \u6240\u6709\u5c5e\u6027\u4e3a ",(0,l.kt)("inlineCode",{parentName:"li"},"vitural")," \u4fee\u9970"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Jwt")," \u8bfb\u53d6\u548c\u89e3\u6790\u6027\u80fd"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u4f18\u5316\u4ee3\u7801\u652f\u6301 C# 9.0 \u6700\u65b0\u8bed\u6cd5"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("inlineCode",{parentName:"li"},"MD5")," \u52a0\u5bc6\u6027\u80fd ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/71"},"#PR71")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u79fb\u9664")," \u65e0\u7528\u6216\u672a\u4f7f\u7528\u4ee3\u7801"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u3001\u591a\u6570\u636e\u5e93\u3001\u4e00\u5206\u949f\u5165\u95e8\u6587\u6863")))),(0,l.kt)("hr",null),(0,l.kt)("h2",{id:"v100\u5df2\u53d1\u5e03"},"v1.0.0\uff08\u5df2\u53d1\u5e03\uff09"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u65b0\u7279\u6027")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u7f51\u7edc\u8bf7\u6c42 ",(0,l.kt)("inlineCode",{parentName:"li"},"RemoteRequest")," \u7ec4\u4ef6 ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I1YYWD"},"#I1YYWD")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},".AddInjectBase()")," \u6ce8\u5165\uff0c\u53ea\u5305\u542b\u57fa\u7840\u670d\u52a1\u6ce8\u5165"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u6240\u6709\u670d\u52a1\u90fd\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"IServiceCollection")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"IMvcBuilder")," \u6ce8\u5165"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," \u629b\u5f02\u5e38\u72b6\u6001\u7801\u8bbe\u7f6e\u529f\u80fd ",(0,l.kt)("inlineCode",{parentName:"li"},"StatusCode")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u65b0\u589e")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u5e8f\u5217\u5316\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Pascal")," \u5c5e\u6027\u547d\u540d\u65b9\u5f0f"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u7a81\u7834\u6027\u53d8\u5316")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," ",(0,l.kt)("strong",{parentName:"li"},"\u6240\u6709\u7684\u5305\u4e3a ",(0,l.kt)("inlineCode",{parentName:"strong"},".NET 5")," \u6b63\u5f0f\u7248")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u95ee\u9898\u4fee\u590d")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"SqlProxy")," \u4ee3\u7406\u5f02\u6b65\u5904\u7406 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u7c7b\u578b ",(0,l.kt)("inlineCode",{parentName:"li"},"Datetime")," \u8f6c ",(0,l.kt)("inlineCode",{parentName:"li"},"DateTimeOffset")," bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5c5e\u6027\u9996\u5b57\u6bcd\u5927\u5c0f\u5199\u5e8f\u5217\u5316\u4e0d\u5339\u914d\u51fa\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"null")," bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5bf9\u8c61\u5e8f\u5217\u5316\u4e2d\u6587\u51fa\u73b0\u4e71\u7801 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u9ed8\u8ba4\u5e8f\u5217\u5316\u914d\u7f6e\u65e0\u6548 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u6570\u636e\u5e93\u975e\u4f9d\u8d56\u6ce8\u5165\u65b9\u5f0f\u63d0\u4ea4\u65e0\u6548 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5e94\u7528\u7a0b\u5e8f\u6c60\u63d0\u4ea4\u6240\u6709 ",(0,l.kt)("inlineCode",{parentName:"li"},"DbContext")," \u7a7a\u5f02\u5e38 bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Saas")," \u591a\u79df\u6237 ",(0,l.kt)("inlineCode",{parentName:"li"},"Tenant")," \u7c7b\u578b\u5b57\u7b26\u4e32\u5c5e\u6027\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"MySql")," \u6570\u636e\u5e93\u4e0b\u51fa\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"longtext")," \u7c7b\u578b bug"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Mvc")," \u81ea\u52a8\u9a8c\u8bc1\u5b57\u7b26\u4e32\u7a7a\u503c bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I24M2T"},"#I24M2T")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u679a\u4e3e\u6ce8\u91ca\u88ab\u8986\u76d6 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I24N6J"},"#I24N6J")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5ffd\u7565\u89c4\u8303\u5316\u7ed3\u679c\u65e0\u6548 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I24B8P"},"#I24B8P")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"ContentType")," \u4e0d\u662f ",(0,l.kt)("inlineCode",{parentName:"li"},"applicaiton/json")," bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I24F3U"},"#I24F3U")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u4fee\u590d")," \u5185\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"System.Text.Json")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Newtonsoft.Json")," \u51b2\u7a81 bug ",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/issues/I24F3U"},"#I24F3U")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u5176\u4ed6\u66f4\u6539")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," ",(0,l.kt)("inlineCode",{parentName:"li"},"Fur")," \u6846\u67b6\u57df\u540d\u4e3a\uff1a",(0,l.kt)("a",{parentName:"li",href:"https://furion.icu"},"https://furion.icu")),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u8c03\u6574")," \u4ed3\u50a8 ",(0,l.kt)("inlineCode",{parentName:"li"},"FromSqlRaw")," \u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"FromSqlInterpolated")," \u63a5\u53e3\u4f4d\u7f6e"),(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," \u6570\u636e\u52a0\u89e3\u5bc6\u6027\u80fd\uff0c",(0,l.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion/pulls/70"},"#PR70")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},(0,l.kt)("strong",{parentName:"p"},"\u6587\u6863")),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\xa0",(0,l.kt)(pe,{mdxType:"Tag"},"\u66f4\u65b0")," README.md\u3001\u6846\u67b6\u4ecb\u7ecd\u3001\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u3001\u914d\u7f6e\u9009\u9879\u3001\u591a\u79df\u6237\u3001\u8de8\u57df\u6587\u6863")))))}ce.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/4d1c3330.059d9bc9.js b/handbook/build/assets/js/4d1c3330.059d9bc9.js new file mode 100644 index 00000000000..4c167096d9c --- /dev/null +++ b/handbook/build/assets/js/4d1c3330.059d9bc9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[1932],{7023:function(a){a.exports=JSON.parse('{"label":"upload","permalink":"/blog/tags/upload","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/4d87bc8d.0d1731e8.js b/handbook/build/assets/js/4d87bc8d.0d1731e8.js new file mode 100644 index 00000000000..fad3ec6d24d --- /dev/null +++ b/handbook/build/assets/js/4d87bc8d.0d1731e8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[3021],{3905:function(e,n,r){r.d(n,{Zo:function(){return i},kt:function(){return m}});var t=r(7294);function u(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function a(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function s(e){for(var n=1;n=0||(u[r]=e[r]);return u}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(u[r]=e[r])}return u}var d=t.createContext({}),c=function(e){var n=t.useContext(d),r=n;return e&&(r="function"==typeof e?e(n):s(s({},n),e)),r},i=function(e){var n=c(e.components);return t.createElement(d.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},l=t.forwardRef((function(e,n){var r=e.components,u=e.mdxType,a=e.originalType,d=e.parentName,i=o(e,["components","mdxType","originalType","parentName"]),l=c(r),m=u,w=l["".concat(d,".").concat(m)]||l[m]||p[m]||a;return r?t.createElement(w,s(s({ref:n},i),{},{components:r})):t.createElement(w,s({ref:n},i))}));function m(e,n){var r=arguments,u=n&&n.mdxType;if("string"==typeof e||u){var a=r.length,s=new Array(a);s[0]=l;var o={};for(var d in n)hasOwnProperty.call(n,d)&&(o[d]=n[d]);o.originalType=e,o.mdxType="string"==typeof e?e:u,s[1]=o;for(var c=2;cu.Name, u=>u.Age);\n\n// \u793a\u4f8b\u4e8c\nrepository.InsertOrUpdateInclude(user, "Age", "Name");\n\n// \u793a\u4f8b\u4e09\nrepository.InsertOrUpdateInclude(user, new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u56db\nrepository.InsertOrUpdateInclude(user, new[] {"Age", "Name"});\n\n// \u793a\u4f8b\u4e94\nuser.InsertOrUpdateInclude(u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u516d\nuser.InsertOrUpdateInclude("Age", "Name");\n\n// \u793a\u4f8b\u4e03\nuser.InsertOrUpdateInclude(new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u516b\nuser.InsertOrUpdateInclude(new[] {"Age", "Name"});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.InsertOrUpdateIncludeAsync(user, u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u4e8c\nawait repository.InsertOrUpdateIncludeAsync(user, "Age", "Name");\n\n// \u793a\u4f8b\u4e09\nawait repository.InsertOrUpdateIncludeAsync(user, new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u56db\nawait repository.InsertOrUpdateIncludeAsync(user, new[] {"Age", "Name"});\n\n// \u793a\u4f8b\u4e94\nawait user.InsertOrUpdateIncludeAsync(u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u516d\nawait user.InsertOrUpdateIncludeAsync("Age", "Name");\n\n// \u793a\u4f8b\u4e03\nawait user.InsertOrUpdateIncludeAsync(new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u516b\nawait user.InsertOrUpdateIncludeAsync(new[] {"Age", "Name"});\n')),(0,a.kt)("h2",{id:"974-\u65b0\u589e\u6216\u66f4\u65b0\u90e8\u5206\u5217\u7acb\u5373\u63d0\u4ea4"},"9.7.4 \u65b0\u589e\u6216\u66f4\u65b0\u90e8\u5206\u5217\uff08\u7acb\u5373\u63d0\u4ea4\uff09"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.InsertOrUpdateIncludeNow(user, u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u4e8c\nrepository.InsertOrUpdateIncludeNow(user, "Age", "Name");\n\n// \u793a\u4f8b\u4e09\nrepository.InsertOrUpdateIncludeNow(user, new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u56db\nrepository.InsertOrUpdateIncludeNow(user, new[] {"Age", "Name"});\n\n// \u793a\u4f8b\u4e94\nuser.InsertOrUpdateIncludeNow(u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u516d\nuser.InsertOrUpdateIncludeNow("Age", "Name");\n\n// \u793a\u4f8b\u4e03\nuser.InsertOrUpdateIncludeNow(new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u516b\nuser.InsertOrUpdateIncludeNow(new[] {"Age", "Name"});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.InsertOrUpdateIncludeNowAsync(user, u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u4e8c\nawait repository.InsertOrUpdateIncludeNowAsync(user, "Age", "Name");\n\n// \u793a\u4f8b\u4e09\nawait repository.InsertOrUpdateIncludeNowAsync(user, new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u56db\nawait repository.InsertOrUpdateIncludeNowAsync(user, new[] {"Age", "Name"});\n\n// \u793a\u4f8b\u4e94\nawait user.InsertOrUpdateIncludeNowAsync(u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u516d\nawait user.InsertOrUpdateIncludeNowAsync("Age", "Name");\n\n// \u793a\u4f8b\u4e03\nawait user.InsertOrUpdateIncludeNowAsync(new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u516b\nawait user.InsertOrUpdateIncludeNowAsync(new[] {"Age", "Name"});\n')),(0,a.kt)("h2",{id:"975-\u65b0\u589e\u6216\u66f4\u65b0\u6392\u9664\u7279\u5b9a\u5217\u4e0d\u7acb\u5373\u63d0\u4ea4"},"9.7.5 \u65b0\u589e\u6216\u66f4\u65b0\u6392\u9664\u7279\u5b9a\u5217\uff08\u4e0d\u7acb\u5373\u63d0\u4ea4\uff09"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.InsertOrUpdateExclude(user, u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u4e8c\nrepository.InsertOrUpdateExclude(user, "Age", "Name");\n\n// \u793a\u4f8b\u4e09\nrepository.InsertOrUpdateExclude(user, new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u56db\nrepository.InsertOrUpdateExclude(user, new[] {"Age", "Name"});\n\n// \u793a\u4f8b\u4e94\nuser.InsertOrUpdateExclude(u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u516d\nuser.InsertOrUpdateExclude("Age", "Name");\n\n// \u793a\u4f8b\u4e03\nuser.InsertOrUpdateExclude(new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u516b\nuser.InsertOrUpdateExclude(new[] {"Age", "Name"});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.InsertOrUpdateExcludeAsync(user, u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u4e8c\nawait repository.InsertOrUpdateExcludeAsync(user, "Age", "Name");\n\n// \u793a\u4f8b\u4e09\nawait repository.InsertOrUpdateExcludeAsync(user, new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u56db\nawait repository.InsertOrUpdateExcludeAsync(user, new[] {"Age", "Name"});\n\n// \u793a\u4f8b\u4e94\nawait user.InsertOrUpdateExcludeAsync(u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u516d\nawait user.InsertOrUpdateExcludeAsync("Age", "Name");\n\n// \u793a\u4f8b\u4e03\nawait user.InsertOrUpdateExcludeAsync(new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u516b\nawait user.InsertOrUpdateExcludeAsync(new[] {"Age", "Name"});\n')),(0,a.kt)("h2",{id:"976-\u65b0\u589e\u6216\u66f4\u65b0\u6392\u9664\u7279\u5b9a\u5217\u7acb\u5373\u63d0\u4ea4"},"9.7.6 \u65b0\u589e\u6216\u66f4\u65b0\u6392\u9664\u7279\u5b9a\u5217\uff08\u7acb\u5373\u63d0\u4ea4\uff09"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.InsertOrUpdateExcludeNow(user, u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u4e8c\nrepository.InsertOrUpdateExcludeNow(user, "Age", "Name");\n\n// \u793a\u4f8b\u4e09\nrepository.InsertOrUpdateExcludeNow(user, new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u56db\nrepository.InsertOrUpdateExcludeNow(user, new[] {"Age", "Name"});\n\n// \u793a\u4f8b\u4e94\nuser.InsertOrUpdateExcludeNow(u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u516d\nuser.InsertOrUpdateExcludeNow("Age", "Name");\n\n// \u793a\u4f8b\u4e03\nuser.InsertOrUpdateExcludeNow(new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u516b\nuser.InsertOrUpdateExcludeNow(new[] {"Age", "Name"});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.InsertOrUpdateExcludeNowAsync(user, u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u4e8c\nawait repository.InsertOrUpdateExcludeNowAsync(user, "Age", "Name");\n\n// \u793a\u4f8b\u4e09\nawait repository.InsertOrUpdateExcludeNowAsync(user, new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u56db\nawait repository.InsertOrUpdateExcludeNowAsync(user, new[] {"Age", "Name"});\n\n// \u793a\u4f8b\u4e94\nawait user.InsertOrUpdateExcludeNowAsync(u=>u.Name, u=>u.Age);\n\n// \u793a\u4f8b\u516d\nawait user.InsertOrUpdateExcludeNowAsync("Age", "Name");\n\n// \u793a\u4f8b\u4e03\nawait user.InsertOrUpdateExcludeNowAsync(new[] { u=>u.Name, u=>u.Age});\n\n// \u793a\u4f8b\u516b\nawait user.InsertOrUpdateExcludeNowAsync(new[] {"Age", "Name"});\n')),(0,a.kt)("h2",{id:"977-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.7.7 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/4f2c41ae.51bcbdb8.js b/handbook/build/assets/js/4f2c41ae.51bcbdb8.js new file mode 100644 index 00000000000..dc8e5077414 --- /dev/null +++ b/handbook/build/assets/js/4f2c41ae.51bcbdb8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4415],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return m}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},s=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),s=c(n),m=o,f=s["".concat(p,".").concat(m)]||s[m]||d[m]||i;return n?r.createElement(f,a(a({ref:t},u),{},{components:n})):r.createElement(f,a({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=s;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var c=2;c.NET7 SDK",id:"2511-\u5b89\u88c5-net7-sdk",level:3},{value:"2.5.1.2 \u7f16\u8f91 .csproj \u6587\u4ef6",id:"2512-\u7f16\u8f91-csproj-\u6587\u4ef6",level:3},{value:"2.5.1.3 \u5347\u7ea7 Nuget \u5305",id:"2513-\u5347\u7ea7-nuget-\u5305",level:3},{value:"2.5.1.4 \u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u89e3\u51b3\u65b9\u6848",id:"2514-\u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u89e3\u51b3\u65b9\u6848",level:3}],m={toc:s};function f(e){var t=e.components,n=(0,o.Z)(e,l);return(0,i.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:".NET7 \u53d1\u5e03",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"\ud83d\ude80\ud83c\udf89\ud83d\udd25 2022 \u5e74 11 \u6708 08 \u65e5\uff0c\u5fae\u8f6f\u53d1\u5e03\u4e86 .NET7 \u9996\u4e2a\u6b63\u5f0f\u7248\u3002"))),(0,i.kt)("h2",{id:"251-\u5347\u7ea7\u6ce8\u610f\u4e8b\u9879"},"2.5.1 \u5347\u7ea7\u6ce8\u610f\u4e8b\u9879"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u76ee\u524d\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion")," \u6240\u6709\u7248\u672c\uff080.x-3.x\uff09\u7684\u7528\u6237\u5747\u53ef\u4ee5\u5feb\u901f\u65e0\u7f1d\u5347\u7ea7\u81f3 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion v4.x")," \u7248\u672c\uff0c\u53ea\u9700\u8981\u505a\u5c11\u91cf\u66f4\u6539\u5373\u53ef\u3002")),(0,i.kt)("h3",{id:"2511-\u5b89\u88c5-net7-sdk"},"2.5.1.1 \u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"h3"},".NET7 SDK")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://dotnet.microsoft.com/download/dotnet/7.0"},"https://dotnet.microsoft.com/download/dotnet/7.0")),(0,i.kt)("h3",{id:"2512-\u7f16\u8f91-csproj-\u6587\u4ef6"},"2.5.1.2 \u7f16\u8f91 ",(0,i.kt)("inlineCode",{parentName:"h3"},".csproj")," \u6587\u4ef6"),(0,i.kt)("p",null,"\u7f16\u8f91\u89e3\u51b3\u65b9\u6848\u6240\u6709\u9879\u76ee\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},".csproj")," \u6587\u4ef6\uff0c\u5e76\u66ff\u6362 ",(0,i.kt)("inlineCode",{parentName:"p"},"net6.0")," \u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"net7.0"),"\uff0c\u5982\uff1a"),(0,i.kt)("img",{src:(0,a.Z)("img/net73.png")}),(0,i.kt)("p",null,"\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Ctrl + F")," \u5168\u5c40\u66ff\u6362"),(0,i.kt)("img",{src:(0,a.Z)("img/net74.png")}),(0,i.kt)("h3",{id:"2513-\u5347\u7ea7-nuget-\u5305"},"2.5.1.3 \u5347\u7ea7 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Nuget")," \u5305"),(0,i.kt)("p",null,"\u5c06 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6240\u6709\u5305\u5347\u7ea7\u81f3 ",(0,i.kt)("inlineCode",{parentName:"p"},"v4.7.9")," \u7248\u672c\uff0c\u540c\u65f6 ",(0,i.kt)("inlineCode",{parentName:"p"},"Microsoft")," \u6240\u6709\u5305\u5347\u7ea7\u81f3 ",(0,i.kt)("inlineCode",{parentName:"p"},"v7.0.0")," \u7248\u672c\uff0c\u5982\uff1a"),(0,i.kt)("img",{src:(0,a.Z)("img/net75.png")}),(0,i.kt)("h3",{id:"2514-\u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u89e3\u51b3\u65b9\u6848"},"2.5.1.4 \u91cd\u65b0\u7f16\u8bd1\u6574\u4e2a\u89e3\u51b3\u65b9\u6848"),(0,i.kt)("p",null,"\u5347\u7ea7\u5b8c\u6210\uff01\uff01\uff01"))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/4f5e45e5.fea4bc89.js b/handbook/build/assets/js/4f5e45e5.fea4bc89.js new file mode 100644 index 00000000000..f9fe856d1bc --- /dev/null +++ b/handbook/build/assets/js/4f5e45e5.fea4bc89.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[5196],{8234:function(o){o.exports=JSON.parse('{"permalink":"/blog/tags/furos","page":1,"postsPerPage":10,"totalPages":1,"totalCount":7,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/51c11da7.1632a1e1.js b/handbook/build/assets/js/51c11da7.1632a1e1.js new file mode 100644 index 00000000000..57e5b8e2ca2 --- /dev/null +++ b/handbook/build/assets/js/51c11da7.1632a1e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8832],{3905:function(e,n,t){t.d(n,{Zo:function(){return c},kt:function(){return u}});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},c=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(t),u=r,N=m["".concat(s,".").concat(u)]||m[u]||d[u]||i;return t?a.createElement(N,o(o({ref:n},c),{},{components:t})):a.createElement(N,o({ref:n},c))}));function u(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var p=2;pSql \u4ee3\u7406",id:"9171-\u5173\u4e8e-sql-\u4ee3\u7406",level:2},{value:"9.17.2 \u4e86\u89e3 ISqlDispatchProxy",id:"9172-\u4e86\u89e3-isqldispatchproxy",level:2},{value:"9.17.3 \u5f00\u59cb\u9886\u7565 Sql \u4ee3\u7406",id:"9173-\u5f00\u59cb\u9886\u7565-sql-\u4ee3\u7406",level:2},{value:"9.17.3.1 \u6784\u9020\u51fd\u6570\u65b9\u5f0f",id:"91731-\u6784\u9020\u51fd\u6570\u65b9\u5f0f",level:3},{value:"9.17.3.2 \u65b9\u6cd5\u53c2\u6570\u6ce8\u5165",id:"91732-\u65b9\u6cd5\u53c2\u6570\u6ce8\u5165",level:3},{value:"9.17.3.3 Db.GetSqlDispatchProxy<ISql>()",id:"91733-dbgetsqldispatchproxyisql",level:3},{value:"9.17.4 Sql \u64cd\u4f5c",id:"9174-sql-\u64cd\u4f5c",level:2},{value:"9.17.4.1 \u8fd4\u56de DataTable",id:"91741-\u8fd4\u56de-datatable",level:3},{value:"9.17.4.2 \u8fd4\u56de List<T>",id:"91742-\u8fd4\u56de-listt",level:3},{value:"9.17.4.3 \u8fd4\u56de DataSet",id:"91743-\u8fd4\u56de-dataset",level:3},{value:"9.17.4.4 \u8fd4\u56de Tuple<T1,...T8>",id:"91744-\u8fd4\u56de-tuplet1t8",level:3},{value:"9.17.4.5 \u8fd4\u56de \u5355\u884c\u5355\u5217",id:"91745-\u8fd4\u56de-\u5355\u884c\u5355\u5217",level:3},{value:"9.17.4.6 \u65e0\u8fd4\u56de\u503c",id:"91746-\u65e0\u8fd4\u56de\u503c",level:3},{value:"9.17.4.7 \u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570",id:"91747-\u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570",level:3},{value:"9.17.4.8 \u8fd4\u56de\u53d7\u5f71\u54cd\u884c\u6570",id:"91748-\u8fd4\u56de\u53d7\u5f71\u54cd\u884c\u6570",level:3},{value:"9.17.5 \u5b58\u50a8\u8fc7\u7a0b \u64cd\u4f5c",id:"9175-\u5b58\u50a8\u8fc7\u7a0b-\u64cd\u4f5c",level:2},{value:"9.17.5.1 \u8fd4\u56de DataTable",id:"91751-\u8fd4\u56de-datatable",level:3},{value:"9.17.5.2 \u8fd4\u56de List<T>",id:"91752-\u8fd4\u56de-listt",level:3},{value:"9.17.5.3 \u8fd4\u56de DataSet",id:"91753-\u8fd4\u56de-dataset",level:3},{value:"9.17.5.4 \u8fd4\u56de Tuple(T1,...T8)",id:"91754-\u8fd4\u56de-tuplet1t8",level:3},{value:"9.17.5.5 \u8fd4\u56de \u5355\u884c\u5355\u5217",id:"91755-\u8fd4\u56de-\u5355\u884c\u5355\u5217",level:3},{value:"9.17.5.6 \u65e0\u8fd4\u56de\u503c",id:"91756-\u65e0\u8fd4\u56de\u503c",level:3},{value:"9.17.5.7 \u5e26 OUTPUT/RETURN \u8fd4\u56de",id:"91757-\u5e26-outputreturn-\u8fd4\u56de",level:3},{value:"9.17.5.8 \u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570",id:"91758-\u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570",level:3},{value:"9.17.6 \u51fd\u6570 \u64cd\u4f5c",id:"9176-\u51fd\u6570-\u64cd\u4f5c",level:2},{value:"9.17.7 Sql \u6a21\u677f\u66ff\u6362",id:"9177-sql-\u6a21\u677f\u66ff\u6362",level:2},{value:"9.17.8 \u5207\u6362\u6570\u636e\u5e93",id:"9178-\u5207\u6362\u6570\u636e\u5e93",level:2},{value:"9.17.8.1 \u5355\u4e2a\u65b9\u6cd5\u65b9\u5f0f",id:"91781-\u5355\u4e2a\u65b9\u6cd5\u65b9\u5f0f",level:3},{value:"9.17.8.2 \u63a5\u53e3\u65b9\u5f0f",id:"91782-\u63a5\u53e3\u65b9\u5f0f",level:3},{value:"9.17.8.3 \u8fd0\u884c\u65f6 .Change \u65b9\u6cd5\u5207\u6362",id:"91783-\u8fd0\u884c\u65f6-change-\u65b9\u6cd5\u5207\u6362",level:3},{value:"9.17.9 Sql \u4ee3\u7406\u62e6\u622a",id:"9179-sql-\u4ee3\u7406\u62e6\u622a",level:2},{value:"9.17.10 \u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4",id:"91710-\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4",level:2},{value:"9.17.11 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"91711-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],m={toc:d};function u(e){var n=e.components,t=(0,r.Z)(e,o);return(0,i.kt)("wrapper",(0,a.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"9171-\u5173\u4e8e-sql-\u4ee3\u7406"},"9.17.1 \u5173\u4e8e ",(0,i.kt)("inlineCode",{parentName:"h2"},"Sql")," \u4ee3\u7406"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u4ee3\u7406\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u5bf9 ",(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u64cd\u4f5c\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u6982\u5ff5\uff0c\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5927\u5927\u63d0\u9ad8 ",(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u4e66\u5199\u6548\u7387\uff0c\u800c\u4e14\u540e\u671f\u6781\u6613\u7ef4\u62a4\u3002"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u4ee3\u7406\u5c5e\u4e8e ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u4e00\u4e2a\u9ad8\u7ea7\u529f\u80fd\u3002"),(0,i.kt)("h2",{id:"9172-\u4e86\u89e3-isqldispatchproxy"},"9.17.2 \u4e86\u89e3 ",(0,i.kt)("inlineCode",{parentName:"h2"},"ISqlDispatchProxy")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"ISqlDispatchProxy")," \u63a5\u53e3\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u5b9e\u73b0",(0,i.kt)("strong",{parentName:"p"},"\u88ab\u4ee3\u7406\u63a5\u53e3"),"\u7684\u552f\u4e00\u4f9d\u8d56\uff0c\u4efb\u4f55\u516c\u5f00\u7684\u63a5\u53e3\u4e00\u65e6\u96c6\u6210\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"ISqlDispatchProxy")," \u63a5\u53e3\uff0c\u90a3\u4e48\u8fd9\u4e2a\u63a5\u53e3\u5c31\u662f",(0,i.kt)("strong",{parentName:"p"},"\u88ab\u6258\u7ba1\u62e6\u622a"),"\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u64cd\u4f5c\u63a5\u53e3\u3002"),(0,i.kt)("p",null,"\u7b80\u5355\u5b9a\u4e49\u4e00\u4e2a ",(0,i.kt)("strong",{parentName:"p"},"Sql \u4ee3\u7406\u63a5\u53e3")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5}",showLineNumbers:!0,"":!0,"{1,5}":!0},"using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n }\n}\n")),(0,i.kt)("p",null,"\u4e00\u65e6\u8fd9\u4e2a\u63a5\u53e3\u7ee7\u627f\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"ISqlDispatchProxy"),"\uff0c\u90a3\u4e48\u5b83\u5c31\u4f1a",(0,i.kt)("strong",{parentName:"p"},"\u52a8\u6001\u521b\u5efa\u63a5\u53e3\u5b9e\u4f8b\uff0c\u800c\u4e14\u652f\u6301\u4f9d\u8d56\u6ce8\u5165/\u63a7\u5236\u53cd\u8f6c\u83b7\u53d6\u5b9e\u4f8b"),"\u3002"),(0,i.kt)("h2",{id:"9173-\u5f00\u59cb\u9886\u7565-sql-\u4ee3\u7406"},"9.17.3 \u5f00\u59cb\u9886\u7565 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Sql")," \u4ee3\u7406"),(0,i.kt)("p",null,"\u4e0b\u9762\u6211\u5c06\u901a\u8fc7\u591a\u4e2a\u4f8b\u5b50\u6765\u6f14\u793a ",(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u4ee3\u7406\u7684\u7528\u6cd5\uff0c\u4e3a\u4ec0\u4e48\u63a8\u8350\u8fd9\u79cd\u65b9\u5f0f\u64cd\u4f5c ",(0,i.kt)("inlineCode",{parentName:"p"},"Sql"),"\u3002"),(0,i.kt)("p",null,"\u652f\u6301\u5404\u79cd\u65b9\u5f0f\u83b7\u53d6\u5b9e\u4f8b\uff1a"),(0,i.kt)("h3",{id:"91731-\u6784\u9020\u51fd\u6570\u65b9\u5f0f"},"9.17.3.1 \u6784\u9020\u51fd\u6570\u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-2}",showLineNumbers:!0,"":!0,"{1-2}":!0},"private readonly ISql _sql;\npublic FurionService(ISql sql)\n{\n _sql = sql;\n}\n")),(0,i.kt)("h3",{id:"91732-\u65b9\u6cd5\u53c2\u6570\u6ce8\u5165"},"9.17.3.2 \u65b9\u6cd5\u53c2\u6570\u6ce8\u5165"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},"public async Task> GetAll([FromServices] ISql, string keyword)\n{\n}\n")),(0,i.kt)("h3",{id:"91733-dbgetsqldispatchproxyisql"},"9.17.3.3 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Db.GetSqlDispatchProxy()")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var sql = Db.GetSqlDispatchProxy();\n")),(0,i.kt)("h2",{id:"9174-sql-\u64cd\u4f5c"},"9.17.4 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Sql")," \u64cd\u4f5c"),(0,i.kt)("h3",{id:"91741-\u8fd4\u56de-datatable"},"9.17.4.1 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"DataTable")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8,12,16,20}",showLineNumbers:!0,"":!0,"{8,12,16,20}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n // \u6267\u884csql\u5e76\u4f20\u5165\u53c2\u6570\uff0c\u57fa\u5143\u7c7b\u578b\n [SqlExecute("select * from person where id >@id and name like @name")]\n DataTable GetPerson(int id, string name);\n\n // \u6267\u884csql\u5e76\u4f20\u5165\u53c2\u6570\uff0c\u5bf9\u8c61\u7c7b\u578b\n [SqlExecute("select * from person where id >@id and name like @name")]\n DataTable GetPerson(MyParam paras);\n\n // \u6267\u884c\u5b58\u50a8\u8fc7\u7a0b sql\uff0c\u652f\u6301\u8bbe\u7f6e\u53c2\u6570\u7c7b\u578b\n [SqlExecute("exec PROP_NAME @id", CommandType = CommandType.StoredProcedure)]\n DataTable GetPerson(int id);\n\n // \u652f\u6301\u591a\u6570\u636e\u5e93\u64cd\u4f5c\n [SqlExecute("select * from person"), SqlDbContextLocator(typeof(MySqlDbContextLocator))]\n DataTable GetPerson();\n\n // \u5f02\u6b65\u65b9\u5f0f\n [SqlExecute("select * from person"), SqlDbContextLocator(typeof(MySqlDbContextLocator))]\n Task GetPersonAsync();\n }\n}\n')),(0,i.kt)("admonition",{title:"\u5173\u4e8e\u53c2\u6570",type:"important"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u4ee3\u7406\u53c2\u6570\u67e5\u627e\u89c4\u5219\uff1a"),(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u65b9\u6cd5\u7684\u53c2\u6570\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"\u57fa\u5143\u7c7b\u578b"),"\uff08\u6216 ",(0,i.kt)("inlineCode",{parentName:"p"},"string"),"\u3001",(0,i.kt)("inlineCode",{parentName:"p"},"\u503c\u7c7b\u578b"),"\uff09\uff0c\u5219\u81ea\u52a8\u5c06\u8fd9\u4e9b\u7c7b\u578b\u7ec4\u5408\u6210 ",(0,i.kt)("inlineCode",{parentName:"p"},"Dictionary")," \u4f5c\u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u53c2\u6570\u3002\u547d\u4ee4\u53c2\u6570\u53ef\u4f7f\u7528\u65b9\u6cd5\u540c\u540d\u53c2\u6570\u52a0 ",(0,i.kt)("inlineCode",{parentName:"p"},"@")," \u7b26\u53f7\u3002"),(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u65b9\u6cd5\u7684\u53c2\u6570\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"\u7c7b\u7c7b\u578b"),"\uff0c\u90a3\u4e48\u81ea\u52a8\u904d\u5386\u8be5\u7c7b\u516c\u5f00\u5b9e\u4f8b\u5c5e\u6027\u751f\u6210 ",(0,i.kt)("inlineCode",{parentName:"p"},"DbParameter[]")," \u6570\u7ec4\uff0c\u6bcf\u4e00\u4e2a\u5c5e\u6027\u540d\u90fd\u5c06\u662f\u547d\u4ee4\u53c2\u6570\uff0c",(0,i.kt)("strong",{parentName:"p"},"\u5927\u90e8\u5206\u6570\u636e\u5e93\u662f\u4e0d\u533a\u5206\u5927\u5c0f\u5199\uff0c\u4e2a\u522b\u6570\u636e\u5e93\u9664\u5916"),"\uff0c\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"Sqlite"),"\uff0c\u5982\uff1a"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"public class MyModel\n{\n public int Id {get;set;}\n public string Name {get; set;}\n}\n")),(0,i.kt)("p",{parentName:"admonition"},"\u90a3\u4e48 ",(0,i.kt)("inlineCode",{parentName:"p"},"sql")," \u8bed\u53e5\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u5c5e\u6027\u540d\u4f5c\u4e3a\u53c2\u6570\uff1a"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"showLineNumbers",showLineNumbers:!0},"select * from person where id > @id and name = @name;\n"))),(0,i.kt)("h3",{id:"91742-\u8fd4\u56de-listt"},"9.17.4.2 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"List")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8,12,16,20}",showLineNumbers:!0,"":!0,"{8,12,16,20}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n // \u6267\u884csql\u5e76\u4f20\u5165\u53c2\u6570\uff0c\u57fa\u5143\u7c7b\u578b\n [SqlExecute("select * from person where id >@id and name like @name")]\n List GetPerson(int id, string name);\n\n // \u6267\u884csql\u5e76\u4f20\u5165\u53c2\u6570\uff0c\u5bf9\u8c61\u7c7b\u578b\n [SqlExecute("select * from person where id >@id and name like @name")]\n List GetPerson(MyParam paras);\n\n // \u6267\u884c\u5b58\u50a8\u8fc7\u7a0b sql\uff0c\u652f\u6301\u8bbe\u7f6e\u53c2\u6570\u7c7b\u578b\n [SqlExecute("exec PROP_NAME @id", CommandType = CommandType.StoredProcedure)]\n List GetPerson(int id);\n\n // \u652f\u6301\u591a\u6570\u636e\u5e93\u64cd\u4f5c\n [SqlExecute("select * from person"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]\n List GetPerson();\n\n // \u5f02\u6b65\u65b9\u5f0f\n [SqlExecute("select * from person"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]\n Task> GetPersonAsync();\n }\n}\n')),(0,i.kt)("h3",{id:"91743-\u8fd4\u56de-dataset"},"9.17.4.3 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"DataSet")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8-10,14-16,20-22,26-28,32-35}",showLineNumbers:!0,"":!0,"{8-10,14-16,20-22,26-28,32-35}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n // \u6267\u884csql\u5e76\u4f20\u5165\u53c2\u6570\uff0c\u57fa\u5143\u7c7b\u578b\n [SqlExecute(@"\n select * from person where id >@id and name like @name;\n select top 10 * from student where Id >@id;")]\n DataSet GetData(int id, string name);\n\n // \u6267\u884csql\u5e76\u4f20\u5165\u53c2\u6570\uff0c\u5bf9\u8c61\u7c7b\u578b\n [SqlExecute(@"\n select * from person where id >@id and name like @name;\n select top 10 * from student where Id >@id;")]\n DataSet GetData(MyParam paras);\n\n // \u6267\u884c\u5b58\u50a8\u8fc7\u7a0b sql\uff0c\u652f\u6301\u8bbe\u7f6e\u53c2\u6570\u7c7b\u578b\n [SqlExecute(@"\n exec PROP_NAME @id;\n select * from person;", CommandType = CommandType.StoredProcedure)]\n DataSet GetData(int id);\n\n // \u652f\u6301\u591a\u6570\u636e\u5e93\u64cd\u4f5c\n [SqlExecute(@"\n select * from person;\n select * from student;"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]\n DataSet GetData();\n\n // \u5f02\u6b65\u65b9\u5f0f\n [SqlExecute(@"\n select * from person;\n select * from student;\n select 1;"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]\n Task GetDataAsync());\n }\n}\n')),(0,i.kt)("h3",{id:"91744-\u8fd4\u56de-tuplet1t8"},"9.17.4.4 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"Tuple")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8-10,14-16,20-22,26-28,32-35,38-42}",showLineNumbers:!0,"":!0,"{8-10,14-16,20-22,26-28,32-35,38-42}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n // \u6267\u884csql\u5e76\u4f20\u5165\u53c2\u6570\uff0c\u57fa\u5143\u7c7b\u578b\n [SqlExecute(@"\n select * from person where id >@id and name like @name;\n select top 10 * from student where Id >@id;")]\n (List,List) GetData(int id, string name);\n\n // \u6267\u884csql\u5e76\u4f20\u5165\u53c2\u6570\uff0c\u5bf9\u8c61\u7c7b\u578b\n [SqlExecute(@"\n select * from person where id >@id and name like @name;\n select top 10 * from student where Id >@id;")]\n (List,List) GetData(MyParam paras);\n\n // \u6267\u884c\u5b58\u50a8\u8fc7\u7a0b sql\uff0c\u652f\u6301\u8bbe\u7f6e\u53c2\u6570\u7c7b\u578b\n [SqlExecute(@"\n exec PROP_NAME @id;\n select * from person;", CommandType = CommandType.StoredProcedure)]\n (List,List) GetData(int id);\n\n // \u652f\u6301\u591a\u6570\u636e\u5e93\u64cd\u4f5c\n [SqlExecute(@"\n select * from person;\n select * from student;"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]\n (List,List) GetData();\n\n // \u5f02\u6b65\u65b9\u5f0f\n [SqlExecute(@"\n select * from person;\n select * from student;\n select 1;"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]\n Task<(List,List,List)> GetDataAsync();\n\n // \u81ea v3.7.3+ \u7248\u672c\u652f\u6301\u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570\n [SqlExecute(@"\n select * from person where id =@id;\n select * from person")]\n (Person, List) GetData(int id); // \u6ce8\u610f\u8fd4\u56de\u503c\u662f `(Person, List)` \u7ec4\u5408\n}\n')),(0,i.kt)("h3",{id:"91745-\u8fd4\u56de-\u5355\u884c\u5355\u5217"},"9.17.4.5 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"\u5355\u884c\u5355\u5217")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,10,13}",showLineNumbers:!0,"":!0,"{7,10,13}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n [SqlExecute("select Name from person where id = @id")]\n string GetValue(int id);\n\n [SqlExecute("select age from person where id = @id")]\n int GetValue(int id);\n\n [SqlExecute("select Name from person where id = @id")]\n Task GetValueAsync(int id);\n }\n}\n')),(0,i.kt)("h3",{id:"91746-\u65e0\u8fd4\u56de\u503c"},"9.17.4.6 \u65e0\u8fd4\u56de\u503c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,10,13}",showLineNumbers:!0,"":!0,"{7,10,13}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n [SqlExecute("insert into person(Name,Age) values(@name,@age)")]\n void Insert(MyParam dto);\n\n [SqlExecute("delete from person where id = @id")]\n void Delete(int id);\n\n [SqlExecute("update person set name=@name where id=@id")]\n void Update(int id, string name);\n }\n}\n')),(0,i.kt)("h3",{id:"91747-\u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570"},"9.17.4.7 \u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570"),(0,i.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 3.7.1 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3-5}",showLineNumbers:!0,"{3-5}":!0},'public interface ISql : ISqlDispatchProxy\n{\n // \u81ea v3.7.3+ \u7248\u672c\u652f\u6301\u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570\n [SqlExecute("select * from person where id=@id")]\n Person GetPerson(int id);\n}\n')),(0,i.kt)("h3",{id:"91748-\u8fd4\u56de\u53d7\u5f71\u54cd\u884c\u6570"},"9.17.4.8 \u8fd4\u56de\u53d7\u5f71\u54cd\u884c\u6570"),(0,i.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 4.4.5 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,i.kt)("p",null,"\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"[SqlExcuete]")," \u7279\u6027\u4e2d\u6807\u8bb0 ",(0,i.kt)("inlineCode",{parentName:"p"},"RowEffects = true")," \u4e14\u8fd4\u56de\u503c\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"int")," \u6216\u8005 ",(0,i.kt)("inlineCode",{parentName:"p"},"Task"),"\u3002"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,8}",showLineNumbers:!0,"{4,8}":!0},'public interface ISql : ISqlDispatchProxy\n{\n // \u540c\u6b65\n [SqlExecute("update person set age = 30 where id = {id}", RowEffects = true)]\n int Update(int id);\n\n // \u5f02\u6b65\n [SqlExecute("update person set age = 30 where id = {id}", RowEffects = true)]\n Task UpdateAsync(int id);\n}\n')),(0,i.kt)("h2",{id:"9175-\u5b58\u50a8\u8fc7\u7a0b-\u64cd\u4f5c"},"9.17.5 ",(0,i.kt)("inlineCode",{parentName:"h2"},"\u5b58\u50a8\u8fc7\u7a0b")," \u64cd\u4f5c"),(0,i.kt)("h3",{id:"91751-\u8fd4\u56de-datatable"},"9.17.5.1 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"DataTable")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,10,13}",showLineNumbers:!0,"":!0,"{7,10,13}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n [SqlProcedure("PROC_Name")]\n DataTable GetPersons(MyParam dto);\n\n [SqlProcedure("PROC_Name")]\n DataTable GetPersons(int id);\n\n [SqlProcedure("PROC_Name")]\n DataTable GetPersons(int id, string name);\n }\n}\n')),(0,i.kt)("h3",{id:"91752-\u8fd4\u56de-listt"},"9.17.5.2 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"List")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,10,13}",showLineNumbers:!0,"":!0,"{7,10,13}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n [SqlProcedure("PROC_Name")]\n List GetPersons(MyParam dto);\n\n [SqlProcedure("PROC_Name")]\n List GetPersons(int id);\n\n [SqlProcedure("PROC_Name")]\n List GetPersons(int id, string name);\n }\n}\n')),(0,i.kt)("h3",{id:"91753-\u8fd4\u56de-dataset"},"9.17.5.3 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"DataSet")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,10,13}",showLineNumbers:!0,"":!0,"{7,10,13}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n [SqlProcedure("PROC_Name")]\n DataSet GetData(MyParam dto);\n\n [SqlProcedure("PROC_Name")]\n DataSet GetData(int id);\n\n [SqlProcedure("PROC_Name")]\n DataSet GetData(int id, string name);\n }\n}\n')),(0,i.kt)("h3",{id:"91754-\u8fd4\u56de-tuplet1t8"},"9.17.5.4 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"Tuple(T1,...T8)")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,10,13,16-18}",showLineNumbers:!0,"":!0,"{7,10,13,16-18}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n [SqlProcedure("PROC_Name")]\n (List, List) GetData(MyParam dto);\n\n [SqlProcedure("PROC_Name")]\n (List, List) GetData(int id);\n\n [SqlProcedure("PROC_Name")]\n (List, List, Person, int) GetData(int id, string name);\n\n // \u81ea v3.7.3+ \u7248\u672c\u652f\u6301\u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570\n [SqlProcedure(@"PROC_Name)]\n (Person, List) GetData(int id); // \u6ce8\u610f\u8fd4\u56de\u503c\u662f `(Person, List)` \u7ec4\u5408\n }\n}\n')),(0,i.kt)("h3",{id:"91755-\u8fd4\u56de-\u5355\u884c\u5355\u5217"},"9.17.5.5 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"\u5355\u884c\u5355\u5217")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,10,13}",showLineNumbers:!0,"":!0,"{7,10,13}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n [SqlProcedure("PROC_Name")]\n object GetValue(MyParam dto);\n\n [SqlProcedure("PROC_Name")]\n string GetValue(int id);\n\n [SqlProcedure("PROC_Name")]\n int GetValue(int id, string name);\n }\n}\n')),(0,i.kt)("h3",{id:"91756-\u65e0\u8fd4\u56de\u503c"},"9.17.5.6 \u65e0\u8fd4\u56de\u503c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,10,13}",showLineNumbers:!0,"":!0,"{7,10,13}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n [SqlProcedure("PROC_Name")]\n void GetValue(MyParam dto);\n\n [SqlProcedure("PROC_Name")]\n void GetValue(int id);\n\n [SqlProcedure("PROC_Name")]\n void GetValue(int id, string name);\n }\n}\n')),(0,i.kt)("h3",{id:"91757-\u5e26-outputreturn-\u8fd4\u56de"},"9.17.5.7 \u5e26 ",(0,i.kt)("inlineCode",{parentName:"h3"},"OUTPUT/RETURN")," \u8fd4\u56de"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,10,13}",showLineNumbers:!0,"":!0,"{7,10,13}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n [SqlProcedure("PROC_Name")]\n ProcedureOutputResult GetOutput(ProcOutputModel pams);\n\n [SqlProcedure("PROC_Name")]\n ProcedureOutputResult GetOutput(ProcOutputModel pams);\n\n [SqlProcedure("PROC_Name")]\n ProcedureOutputResult<(List, List)> GetOutput(ProcOutputModel pams);\n }\n}\n')),(0,i.kt)("h3",{id:"91758-\u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570"},"9.17.5.8 \u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570"),(0,i.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 3.7.1 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3-5}",showLineNumbers:!0,"{3-5}":!0},'public interface ISql : ISqlDispatchProxy\n{\n // \u81ea v3.7.3+ \u7248\u672c\u652f\u6301\u8fd4\u56de\u5355\u4e2a\u7c7b\u7c7b\u578b\u53c2\u6570\n [SqlProcedure("PROC_Name")]\n Person GetPerson(int id);\n}\n')),(0,i.kt)("h2",{id:"9176-\u51fd\u6570-\u64cd\u4f5c"},"9.17.6 ",(0,i.kt)("inlineCode",{parentName:"h2"},"\u51fd\u6570")," \u64cd\u4f5c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,10}",showLineNumbers:!0,"":!0,"{7,10}":!0},'using Furion.DatabaseAccessor;\n\nnamespace Furion.Application\n{\n public interface ISql : ISqlDispatchProxy\n {\n [SqlFunction("FN_Name")] // \u6807\u91cf\u51fd\u6570\n string GetValue(MyParam dto);\n\n [SqlProcedure("FN_Name")] // \u8868\u503c\u51fd\u6570\n List GetPersons(int id);\n }\n}\n')),(0,i.kt)("admonition",{title:"\u8865\u5145\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u4ee3\u7406\u4f1a\u81ea\u52a8\u5224\u65ad\u8fd4\u56de\u503c\u7136\u540e\u81ea\u52a8\u6267\u884c\u7279\u5b9a\u51fd\u6570\u7c7b\u578b\u3002")),(0,i.kt)("h2",{id:"9177-sql-\u6a21\u677f\u66ff\u6362"},"9.17.7 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Sql")," \u6a21\u677f\u66ff\u6362"),(0,i.kt)("p",null,"\u5728\u6700\u65b0\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"1.18.3")," \u7248\u672c\u4e2d\u63d0\u4f9b\u4e86\u6a21\u677f\u66ff\u6362\u529f\u80fd\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'[SqlExecute("select * from person where id > {id} and name like {name} and age > {user.Age}")]\nList GetPerson(int id, string name, User user);\n')),(0,i.kt)("admonition",{title:"\u4e24\u8005\u533a\u522b",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u6a21\u677f\u5b57\u7b26\u4e32\u6709\u522b\u4e8e\u547d\u4ee4\u53c2\u6570\u66ff\u6362\uff0c\u6a21\u677f\u5b57\u7b26\u4e32\u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"{ }")," \u65b9\u5f0f\uff0c\u8fd0\u884c\u65f6\u76f4\u63a5\u66ff\u6362\u4e3a\u5b9e\u9645\u7684\u5185\u5bb9\uff0c ",(0,i.kt)("inlineCode",{parentName:"p"},"@")," \u800c\u662f\u8f6c\u6362\u6210 ",(0,i.kt)("inlineCode",{parentName:"p"},"DbParameter")," \u53c2\u6570\u3002")),(0,i.kt)("h2",{id:"9178-\u5207\u6362\u6570\u636e\u5e93"},"9.17.8 \u5207\u6362\u6570\u636e\u5e93"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u4ee3\u7406\u65b9\u5f0f\u7684\u652f\u6301\u4e09\u79cd\u5207\u6362\u6570\u636e\u5e93\u7684\u65b9\u5f0f\uff1a"),(0,i.kt)("h3",{id:"91781-\u5355\u4e2a\u65b9\u6cd5\u65b9\u5f0f"},"9.17.8.1 \u5355\u4e2a\u65b9\u6cd5\u65b9\u5f0f"),(0,i.kt)("p",null,"\u4e3b\u8981\u901a\u8fc7\u5728\u65b9\u6cd5\u4e0a\u8d34 ",(0,i.kt)("inlineCode",{parentName:"p"},"[SqlDbContextLocator]")," \u7279\u6027"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},'[SqlExecute("select * from person"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]\nList GetPerson();\n')),(0,i.kt)("h3",{id:"91782-\u63a5\u53e3\u65b9\u5f0f"},"9.17.8.2 \u63a5\u53e3\u65b9\u5f0f"),(0,i.kt)("p",null,"\u5728\u63a5\u53e3\u4e2d\u8d34 ",(0,i.kt)("inlineCode",{parentName:"p"},"[SqlDbContextLocator]")," \u7279\u6027\uff0c\u6b64\u65b9\u5f0f\u4e0b\uff0c\u63a5\u53e3\u6240\u6709\u65b9\u6cd5\u5c06\u91c7\u7528\u6307\u5b9a\u7684\u6570\u636e\u5e93\u6267\u884c\u3002"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},'[SqlDbContextLocator(typeof(MySqlDbContextLocator)]\npublic interface ISql : ISqlDispatchProxy\n{\n [SqlFunction("FN_Name")] // \u6807\u91cf\u51fd\u6570\n string GetValue(MyParam dto);\n\n [SqlProcedure("FN_Name")] // \u8868\u503c\u51fd\u6570\n List GetPersons(int id);\n}\n')),(0,i.kt)("h3",{id:"91783-\u8fd0\u884c\u65f6-change-\u65b9\u6cd5\u5207\u6362"},"9.17.8.3 \u8fd0\u884c\u65f6 ",(0,i.kt)("inlineCode",{parentName:"h3"},".Change")," \u65b9\u6cd5\u5207\u6362"),(0,i.kt)("p",null,"\u9664\u4e86\u4ee5\u4e0a\u4e24\u79cd ",(0,i.kt)("inlineCode",{parentName:"p"},"\u9759\u6001")," \u914d\u7f6e\u65b9\u5f0f\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u8fd8\u63d0\u4f9b ",(0,i.kt)("inlineCode",{parentName:"p"},"\u52a8\u6001")," \u65b9\u5f0f\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,6}",showLineNumbers:!0,"":!0,"{2,6}":!0},"// \u5c06 sql \u4ee3\u7406\u6570\u636e\u5e93\u5207\u6362\u6210\u7279\u5b9a\u6570\u636e\u5e93\n_sql.Change();\n_sql.GetPerson();\n\n// \u591a\u6b21\u5207\u6362\n_sql.Change();\n_sql.GetPerson();\n\n// \u8fd8\u652f\u6301\u91cd\u7f6e\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\u4e3a\u521d\u59cb\u72b6\u6001\n_sql.ResetIt();\n_sql.GetPerson();\n")),(0,i.kt)("admonition",{title:"\u5173\u4e8e\u4f18\u5148\u7ea7\u95ee\u9898",type:"important"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},".Change<>")," \u4f18\u5148\u7ea7\u5927\u4e8e ",(0,i.kt)("inlineCode",{parentName:"p"},"\u65b9\u6cd5\u8d34 [SqlDbContextLocator]")," \u5927\u4e8e ",(0,i.kt)("inlineCode",{parentName:"p"},"\u63a5\u53e3\u8d34 [SqlDbContextLocator]"),"\u3002"),(0,i.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e0d\u6307\u5b9a ",(0,i.kt)("inlineCode",{parentName:"p"},"DbContextLocator")," \u5c5e\u6027\uff0c\u5219\u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"MasterDbContextLocator"),"\u3002")),(0,i.kt)("h2",{id:"9179-sql-\u4ee3\u7406\u62e6\u622a"},"9.17.9 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Sql")," \u4ee3\u7406\u62e6\u622a"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion v2.13 +")," \u7248\u672c\u65b0\u589e\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u4ee3\u7406\u62e6\u622a\u529f\u80fd\uff0c\u53ef\u4ee5\u7be1\u6539\u7279\u5b9a\u65b9\u6cd5\u6216\u6240\u6709\u4ee3\u7406\u65b9\u6cd5\u5b9e\u9645\u6267\u884c\u7684\u53c2\u6570\uff0c\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"sql\u8bed\u53e5\u3001\u53c2\u6570\u3001\u6267\u884c\u5bf9\u8c61\u7b49\u7b49"),"\u3002"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u82e5\u5728 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Sql")," \u4ee3\u7406\u4e2d\u5b9e\u73b0\u62e6\u622a\u529f\u80fd\uff0c\u5fc5\u987b\u6ee1\u8db3\u4e24\u4e2a\u6761\u4ef6"),"\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u65b9\u6cd5\u5fc5\u987b\u662f ",(0,i.kt)("inlineCode",{parentName:"li"},"static")," \u9759\u6001\u65b9\u6cd5\u4e14\u8fd4\u56de\u503c\u4e3a ",(0,i.kt)("inlineCode",{parentName:"li"},"void")," \u4e14\u53ea\u6709\u4e00\u4e2a ",(0,i.kt)("inlineCode",{parentName:"li"},"SqlProxyMethod")," \u53c2\u6570"),(0,i.kt)("li",{parentName:"ul"},"\u65b9\u6cd5\u5fc5\u987b\u8d34 ",(0,i.kt)("inlineCode",{parentName:"li"},"[Interceptor]")," \u7279\u6027")),(0,i.kt)("p",null,"\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {9,13-17,20-24,26-30,32-36}",showLineNumbers:!0,"":!0,"{9,13-17,20-24,26-30,32-36}":!0},'public interface ISql : ISqlDispatchProxy\n{\n [SqlFunction("FN_Name")]\n string GetValue(MyParam dto);\n\n [SqlProcedure("FN_Name")]\n List GetPersons(int id);\n\n [SqlExecute("select name from person", InterceptorId = "GetPersonsByName")] // \u901a\u8fc7 InterceptorId \u89e3\u51b3\u65b9\u6cd5\u540d\u91cd\u8f7d\u95ee\u9898\n Task> GetPersons();\n\n // \u53ea\u62e6\u622a GetValue \u65b9\u6cd5\n [Interceptor(nameof(GetValue))]\n static void \u62e6\u622a1(SqlProxyMethod method)\n {\n method.FinalSql += " where id > 1"; // \u7be1\u6539\u6700\u7ec8\u6267\u884c sql\n }\n\n // \u62e6\u622a GetValue \u548c GetPersons \u65b9\u6cd5\n [Interceptor(nameof(GetValue), nameof(GetPersons))]\n static void \u62e6\u622a2(SqlProxyMethod method)\n {\n method.FinalSql += " where id > 1"; // \u7be1\u6539\u6700\u7ec8\u6267\u884c sql\n }\n\n [Interceptor("GetPersonsByName")] // \u5bf9\u5e94\u4e0a\u9762\u7684 InterceptorId \u914d\u7f6e\n static void \u89e3\u51b3\u65b9\u6cd5\u540d\u91cd\u8f7d\u62e6\u622a(SqlProxyMethod method)\n {\n // \u3002\u3002\u3002\n }\n\n [Interceptor]\n static void \u5168\u5c40\u62e6\u622a(SqlProxyMethod method)\n {\n // \u8fd9\u91cc\u4f1a\u62e6\u622a\u6240\u6709\u7684\u65b9\u6cd5\n }\n}\n')),(0,i.kt)("h2",{id:"91710-\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4"},"9.17.10 \u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'[Timeout(1000)]\npublic interface ISql : ISqlDispatchProxy\n{\n [SqlFunction("FN_Name"), Timeout(500)] // \u5355\u4f4d\u79d2\n string GetValue(MyParam dto);\n}\n')),(0,i.kt)("h2",{id:"91711-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.17.11 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/51c14d7f.99b3d05d.js b/handbook/build/assets/js/51c14d7f.99b3d05d.js new file mode 100644 index 00000000000..1ae347e8d4b --- /dev/null +++ b/handbook/build/assets/js/51c14d7f.99b3d05d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8559],{3905:function(e,n,t){t.d(n,{Zo:function(){return d},kt:function(){return u}});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=r.createContext({}),c=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},d=function(e){var n=c(e.components);return r.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},k=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),k=c(t),u=o,m=k["".concat(s,".").concat(u)]||k[u]||p[u]||i;return t?r.createElement(m,a(a({ref:n},d),{},{components:t})):r.createElement(m,a({ref:n},d))}));function u(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=k;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var c=2;cDocker \u73af\u5883\u90e8\u7f72",id:"3511-\u5173\u4e8e\u5168-docker-\u73af\u5883\u90e8\u7f72",level:2},{value:"35.1.2 \u5b89\u88c5 Docker \u7248 Jenkins",id:"3512-\u5b89\u88c5-docker-\u7248-jenkins",level:2},{value:"35.1.2.1 \u4f7f\u7528 Dockerfile \u5236\u4f5c\u955c\u50cf",id:"35121-\u4f7f\u7528-dockerfile-\u5236\u4f5c\u955c\u50cf",level:3},{value:"35.1.2.2 \u8fd0\u884c Jenkins:dotnet \u955c\u50cf",id:"35122-\u8fd0\u884c-jenkinsdotnet-\u955c\u50cf",level:3},{value:"35.1.3 Jenkins \u7684\u81ea\u52a8\u5316\u90e8\u7f72",id:"3513-jenkins-\u7684\u81ea\u52a8\u5316\u90e8\u7f72",level:2},{value:"35.1.3.1 \u7f16\u5199 Shell \u811a\u672c",id:"35131-\u7f16\u5199-shell-\u811a\u672c",level:3},{value:"35.1.4 Jenkins \u7684\u81ea\u52a8\u5316\u8fdc\u7a0b\u90e8\u7f72",id:"3514-jenkins-\u7684\u81ea\u52a8\u5316\u8fdc\u7a0b\u90e8\u7f72",level:2},{value:"35.1.4.1 \u5b89\u88c5\u63d2\u4ef6",id:"35141-\u5b89\u88c5\u63d2\u4ef6",level:3},{value:"35.1.4.2 \u914d\u7f6e",id:"35142-\u914d\u7f6e",level:3},{value:"35.1.4.3 \u5199\u811a\u672c",id:"35143-\u5199\u811a\u672c",level:3},{value:"35.1.4.4 \u6784\u5efa\u540e\u64cd\u4f5c\uff08\u5173\u952e\uff09",id:"35144-\u6784\u5efa\u540e\u64cd\u4f5c\u5173\u952e",level:3},{value:"35.1.4.5 \u8fdc\u7a0b\u6267\u884c",id:"35145-\u8fdc\u7a0b\u6267\u884c",level:3},{value:"35.1.5 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"3515-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],k={toc:p};function u(e){var n=e.components,t=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,r.Z)({},k,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"3511-\u5173\u4e8e\u5168-docker-\u73af\u5883\u90e8\u7f72"},"35.1.1 \u5173\u4e8e\u5168 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Docker")," \u73af\u5883\u90e8\u7f72"),(0,i.kt)("p",null,"\u5229\u7528\u62e5\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET")," \u73af\u5883\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Jenkins"),"\uff0c\u8fdb\u884c\u6301\u7eed\u5316\u90e8\u7f72"),(0,i.kt)("h2",{id:"3512-\u5b89\u88c5-docker-\u7248-jenkins"},"35.1.2 \u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Docker")," \u7248 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Jenkins")),(0,i.kt)("p",null,"\u6b63\u5e38\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Docker")," \u4e2d\u62c9\u53d6\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Jenkins:lts")," \u662f\u65e0\u6cd5\u6267\u884c ",(0,i.kt)("inlineCode",{parentName:"p"},"dotnet")," \u547d\u4ee4\u7684\uff08\u5c31\u7b97\u4f60\u5bbf\u4e3b\u673a\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},"dotnet")," \u73af\u5883\u3001",(0,i.kt)("inlineCode",{parentName:"p"},"docker")," \u4e2d\u4e5f\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},"dotnet")," \u73af\u5883\u4e5f\u4e0d\u53ef\u4ee5\uff09\uff0c\n\u6240\u4ee5\u6211\u4eec\u53ea\u80fd\u6784\u5efa\u4e00\u4e2a\u5305\u542b ",(0,i.kt)("inlineCode",{parentName:"p"},"dotnet")," \u7684\u955c\u50cf"),(0,i.kt)("h3",{id:"35121-\u4f7f\u7528-dockerfile-\u5236\u4f5c\u955c\u50cf"},"35.1.2.1 \u4f7f\u7528 Dockerfile \u5236\u4f5c\u955c\u50cf"),(0,i.kt)("p",null,"\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Dockerfile")," \u521b\u5efa\u5305\u542b ",(0,i.kt)("inlineCode",{parentName:"p"},"dotnet")," \u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Jenkins")," \u955c\u50cf"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ud83d\udc49 \u7f16\u5199 ",(0,i.kt)("inlineCode",{parentName:"li"},"Dockerfile"))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# \u5c01\u88c5Jenkins\u955c\u50cf\uff08\u5e26\u6709dotnet\u73af\u5883\u7684\uff09 sdk=5.1\nFROM jenkins/jenkins:lts\nUSER root\nWORKDIR /dotnet\nRUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*\nRUN wget -O dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/820db713-c9a5-466e-b72a-16f2f5ed00e2/628aa2a75f6aa270e77f4a83b3742fb8/dotnet-sdk-5.0.100-linux-x64.tar.gz\nRUN tar zxf dotnet.tar.gz -C ./\nRUN rm -rf dotnet.tar.gz\nENV PATH="${PATH}:/dotnet:/var/jenkins_home/.dotnet/tools"\nENV DOTNET_ROOT="/dotnet"\nRUN apt update -y\nRUN apt install icu-devtools vim zip unzip -y\nRUN usermod -a -G root jenkins\nUSER jenkins\n')),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ud83d\udc49 \u547d\u4ee4\u89e3\u91ca")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"- 1. \u8fd9\u4e2aDocker\u955c\u50cf\u57fa\u4e8ejenkins\n- 2. \u8bbe\u7f6e\u5f53\u524d\u7528\u6237\u4e3aroot\uff0c\u56e0\u4e3a\u540e\u9762\u5b89\u88c5\u9700\u8981\u4f7f\u7528root\n- 3. \u8bbe\u7f6e\u5f53\u524d\u5de5\u4f5c\u76ee\u5f55\u4e3adotnet\n- 4. \u4e0b\u8f7ddotnet SDK\u5305\uff0c\u4fdd\u5b58\u4e3adotnet.tar.gz\u3002\u8fd9\u91cc\u8981\u6ce8\u610f\u4e0b\u8f7d\u6b63\u786e\u7248\u672c\u7684SDK\uff0c\u53ef\u524d\u5f80\u5fae\u8f6f\u5b98\u65b9\u7f51\u7ad9\u83b7\u53d6\u4e0b\u8f7d\u94fe\u63a5\uff1ahttps://dotnet.microsoft.com/download\n- 5. \u89e3\u538bdotnet SDK\u5230\u5f53\u524d\u76ee\u5f55\uff0c\u5373/dotnet\u76ee\u5f55\n- 6. \u5220\u9664dotnet SDK\u5305\n- 7. \u628adotnet\u76ee\u5f55\u548cdotnet tools\u76ee\u5f55\u6dfb\u52a0\u5230\u73af\u5883\u53d8\u91cfPATH\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4f7f\u7528dotnet\u547d\u4ee4\u4e86\n- 8. \u8bbe\u7f6eDOTNET_ROOT\u53d8\u91cf\n- 9. \u66f4\u65b0\u6e90\n- 10. \u5b89\u88c5\u4e00\u4e9b\u5fc5\u9700\u7684\uff0c\u5e38\u7528\u7684\u5de5\u5177\u5305\uff0c\u5176\u4e2dicu-devtools\u662f\u8fd0\u884cdotnet\u9700\u8981\u7684\n- 11. \u4fee\u6539jenkins\u7528\u6237\u5230root\u9644\u52a0\u7ec4\n- 12. \u8bbe\u7f6e\u5f53\u524d\u7528\u6237\u4e3ajenkins\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\ud83d\udc49 \u6784\u5efa ",(0,i.kt)("inlineCode",{parentName:"li"},"Docker")," \u955c\u50cf ",(0,i.kt)("inlineCode",{parentName:"li"},"name=jenkins:dotnet"))),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"cd")," \u5230\u6839\u76ee\u5f55\u4e0b\uff08\u5fc5\u987b\u542b ",(0,i.kt)("inlineCode",{parentName:"p"},"Dockerfile"),"\uff09 \u53ea\u9700\u6784\u5efa\u547d\u4ee4\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0}," docker build -t jenkins:dotnet .\n")),(0,i.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed3\u5c3e ",(0,i.kt)("inlineCode",{parentName:"p"},".")," \u4e0d\u80fd\u7701\u7565")),(0,i.kt)("h3",{id:"35122-\u8fd0\u884c-jenkinsdotnet-\u955c\u50cf"},"35.1.2.2 \u8fd0\u884c ",(0,i.kt)("inlineCode",{parentName:"h3"},"Jenkins:dotnet")," \u955c\u50cf"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'docker run -d -p 8080:8080 -p 50000:50000 --name mjenkins \\\n --privileged=true \\\n --restart always \\\n -u root \\\n -e TZ="Asia/Shanghai" \\\n -v /mudata/jenkins:/var/jenkins_home \\\n -v /usr/bin/docker:/usr/bin/docker \\\n -v /var/run/docker.sock:/var/run/docker.sock \\\n -v /mudata/webroot/:/mudata/webroot \\\n jenkins:dotnet\n')),(0,i.kt)("p",null,"\u63a5\u4e0b\u6765\u5c31\u662f\u6bd4\u8f83\u4fd7\u5957\u7684\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},"Jenkins")," \u6b65\u9aa4\uff0c\u7f51\u4e0a\u8d44\u6599\u5f88\u591a\uff0c\u4e0d\u5c55\u5f00\u4e86\u3002"),(0,i.kt)("h2",{id:"3513-jenkins-\u7684\u81ea\u52a8\u5316\u90e8\u7f72"},"35.1.3 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Jenkins")," \u7684\u81ea\u52a8\u5316\u90e8\u7f72"),(0,i.kt)("h3",{id:"35131-\u7f16\u5199-shell-\u811a\u672c"},"35.1.3.1 \u7f16\u5199 Shell \u811a\u672c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"# Jenkins \u6784\u5efa \u6d4b\u8bd5\u670d\n\necho '============\u67e5\u770b\u6253\u5305\u73af\u5883================'\npwd\nls\necho $PATH\n\nimage_version=`date +%Y%m%d%H%M`;\necho $image_version;\n\ndotnet --info\ndotnet --version\n\n# \u83b7\u53d6\u77ed\u7248\u672c\u53f7\nGITHASH=`git rev-parse --short HEAD`\n\necho '============================begin restore======================================='\ndotnet restore\necho '============================end restore======================================='\n\n#\u8981\u6784\u5efa\u7684\u89e3\u51b3\u65b9\u6848\u540d\u79f0\nsolutionName=MUSaas.SCM.BasicData\n#docker run\u7684\u5bb9\u5668\u540d\u79f0\ncontainerName=jenkinsscmbasic\n#\u6307\u5b9arun\u7684\u7aef\u53e3\nport=9994\n#.sln\u6587\u4ef6\u5168\u8def\u5f84\n#solutionDir=20-Solution/${solutionName}.sln\n#.csproj\u6587\u4ef6\u5168\u8def\u5f84\ncsprojDir=${solutionName}/${solutionName}.csproj\n\n#\u9879\u76ee\u53d1\u5e03\u7684\u76ee\u5f55\nwebDir=/mudata/webroot/jenkins/publish/webapp\n\n#\u5f52\u6863\u76ee\u5f55\narchivesDir=/mudata/webroot/jenkins/publish/archives\n\n#\u6e05\u7a7a\u6587\u4ef6\u5939\nrm -rf ${webDir}/${JOB_NAME}/*\n\n#\u53d1\u5e03\u7f51\u7ad9\u5230webDir\ndotnet publish ${JENKINS_HOME}/workspace/${JOB_NAME}/${csprojDir} -c Release -o ${webDir}/${JOB_NAME} /p:Version=1.0.${BUILD_NUMBER}\n#\u590d\u5236\u914d\u7f6e\u6587\u4ef6\n#cp -rf /vdb1/jenkins/DotNetCoreWebPublishToDockerCommonConfigs/* ${webDir}/${JOB_NAME}/\n\n#\u5224\u65b7\u662f\u5426\u5b58\u5728\nCID=$(docker ps | grep \"${containerName}\" | awk '{print $1}')\necho $CID\nif [ \"$CID\" != \"\" ];then\n docker stop ${containerName}\n docker rm ${containerName}\n docker rmi ${containerName}\n#docker stop $CID\n#docker rm $CID\nfi\n\n\n#\u901a\u8fc7Dockerfile\u91cd\u65b0\u6784\u5efa\u955c\u50cf\ndocker build -t ${containerName} ${webDir}/${JOB_NAME}/.\n#docker run\u5bb9\u5668\u5e76\u7ed1\u5b9a\u5230\u7aef\u53e3\n#docker run -d -p ${port}:80 --name ${containerName} ${containerName}\ndocker run --name ${containerName} --restart=always -d -p ${port}:${port} -v /etc/localtime:/etc/localtime:ro ${containerName}\necho \"success!\"\n\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\u5c31\u8fd9\u6837\u81ea\u52a8\u5316\u90e8\u7f72\u5c31\u597d\u4e86\u3002 \u6d4b\u8bd5\u670d\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Jenkins")," \u5c06\u6e90\u7801\u62c9\u4e0b\u6765\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Publish\uff0cDocker Build\uff0cDocker Run"),"\u3002")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\u8fd9\u91cc\u60f3\u8981\u53d1\u5e03\u7684\u65f6\u5019\uff0c\u6bcf\u6b21\u90fd\u9700\u8981\u624b\u52a8\u53bb\u70b9\u51fb\u201c\u6784\u5efa\u201d\u624d\u4f1a\u6267\u884c\u3002\u4e5f\u53ef\u4ee5\u505a\u6210\u5f53\u5206\u652f\u5408\u5e76\u6210\u529f\u540e\u81ea\u52a8\u8fd0\u884c\u3002\u53cd\u6b63 ",(0,i.kt)("inlineCode",{parentName:"p"},"Jenkins")," \u88c5\u597d\u4e4b\u540e\uff0c\u4f60\u60f3\u8981\u4ec0\u4e48\u90fd\u80fd\u73a9\u8d77\u6765\u3002\u6bd4\u5982\u6307\u5b9a\u5206\u652f\u63d0\u4ea4\u540e\u81ea\u52a8\u201c\u6784\u5efa\u201d\u3001\u6bd4\u5982\u6784\u5efa\u6210\u529f\u540e\u5408\u5e76\u5230 Master \u7b49\u7b49")),(0,i.kt)("h2",{id:"3514-jenkins-\u7684\u81ea\u52a8\u5316\u8fdc\u7a0b\u90e8\u7f72"},"35.1.4 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Jenkins")," \u7684\u81ea\u52a8\u5316\u8fdc\u7a0b\u90e8\u7f72"),(0,i.kt)("h3",{id:"35141-\u5b89\u88c5\u63d2\u4ef6"},"35.1.4.1 \u5b89\u88c5\u63d2\u4ef6"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},(0,i.kt)("inlineCode",{parentName:"p"},"Publish Over SSH"))),(0,i.kt)("h3",{id:"35142-\u914d\u7f6e"},"35.1.4.2 \u914d\u7f6e"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\u7cfb\u7edf\u7ba1\u7406 => ",(0,i.kt)("inlineCode",{parentName:"p"},"Publish over SSH"))),(0,i.kt)("h3",{id:"35143-\u5199\u811a\u672c"},"35.1.4.3 \u5199\u811a\u672c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"# Jenkins \u6784\u5efa \u6b63\u5f0f\u670d\n\necho '============\u67e5\u770b\u6253\u5305\u73af\u5883================'\npwd\nls\necho $PATH\n\nimage_version=`date +%Y%m%d%H%M`;\necho $image_version;\n\ndotnet --info\ndotnet --version\n\n# \u83b7\u53d6\u77ed\u7248\u672c\u53f7\nGITHASH=`git rev-parse --short HEAD`\n\necho '============================begin restore======================================='\ndotnet restore\necho '============================end restore======================================='\n\n#\u8981\u6784\u5efa\u7684\u89e3\u51b3\u65b9\u6848\u540d\u79f0\nsolutionName=MUSaas.SCM.BulkOrder\n#docker run\u7684\u5bb9\u5668\u540d\u79f0\ncontainerName=jenkinsscmbulk\n#\u6307\u5b9arun\u7684\u7aef\u53e3\nport=9986\n#.csproj\u6587\u4ef6\u5168\u8def\u5f84\ncsprojDir=/${solutionName}/${solutionName}.csproj\n\n#\u9879\u76ee\u53d1\u5e03\u7684\u76ee\u5f55\nwebDir=/mudata/webroot/jenkins/publish/webapp\n\n#\u5f52\u6863\u76ee\u5f55\narchivesDir=/mudata/webroot/jenkins/publish/archives\n\n#\u6e05\u7a7a\u6587\u4ef6\u5939\nrm -rf ${webDir}/${JOB_NAME}/*\n\n#\u53d1\u5e03\u7f51\u7ad9\u5230webDir\ndotnet publish ${JENKINS_HOME}/workspace/${JOB_NAME}/${csprojDir} -c Release -o ${webDir}/${JOB_NAME} /p:Version=1.0.${BUILD_NUMBER}\n#\u590d\u5236\u914d\u7f6e\u6587\u4ef6\n#cp -rf /vdb1/jenkins/DotNetCoreWebPublishToDockerCommonConfigs/* ${webDir}/${JOB_NAME}/\n\n\n#\u6784\u5efa\u8fdc\u7a0b\u5305\n\nrm -rf ${JENKINS_HOME}/workspace/${JOB_NAME}/publish\nmkdir ${JENKINS_HOME}/workspace/${JOB_NAME}/publish\n\ntar -czvf ${JENKINS_HOME}/workspace/${JOB_NAME}/publish/${JOB_NAME}.${BUILD_NUMBER}.tar.gz -C ${webDir}/${JOB_NAME} .\n\necho \"success!\"\n")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\u5927\u6982\u903b\u8f91\u5c31\u662f\u53d1\u5e03\u540e\uff0c\u6253\u4e2a\u5305\u3002\u7136\u540e\u4e22\u7ed9\u8fdc\u7a0b\uff0c\u8fdc\u7a0b\u518d\u6267\u884c ",(0,i.kt)("inlineCode",{parentName:"p"},"shell"))),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\u6ce8\u610f\u8fd9\u91cc\u4e00\u5b9a\u8981\u53d1\u5e03\u5230\u81ea\u5df1\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"workspace")," \u4e0b\uff0c\u9632\u6b62\u4e0b\u4e00\u6b65\u6b7b\u6d3b\u627e\u4e0d\u5230\u4f4d\u7f6e\u3002\u5982\u679c\u627e\u4e0d\u5230\u4f4d\u7f6e\uff0c\u53ea\u80fd\u6162\u6162\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"ls")," \u547d\u4ee4\uff0c\u4e00\u7ea7\u4e00\u7ea7\u53bb\u6d4b\uff0c\u5f88\u9ebb\u70e6")),(0,i.kt)("h3",{id:"35144-\u6784\u5efa\u540e\u64cd\u4f5c\u5173\u952e"},"35.1.4.4 \u6784\u5efa\u540e\u64cd\u4f5c\uff08\u5173\u952e\uff09"),(0,i.kt)("p",null,"\u9009\u62e9 ",(0,i.kt)("inlineCode",{parentName:"p"},"Send Build artifacts over SSH")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"Source files: publish/\nRemove prefix(\u4e0d\u586b)\nRemote directory:/mudata/webroot/publish/\nExec command:bash /mudata/shell/publish.sh ${JOB_NAME} jenkinsscmbase ${JOB_NAME}.${BUILD_NUMBER} 9994\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u9009\u62e9\u81ea\u5df1\u7684 SSH \u670d\u52a1\u5668"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Source files"),"\uff1a\u4e00\u5b9a\u662f ",(0,i.kt)("inlineCode",{parentName:"li"},"workspace")," \u4e0b\u7684\u5730\u5740"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Remote directory"),"\uff1a\u8fdc\u7a0b\u5730\u5740\uff0c\u4ece\u6839\u76ee\u5f55\u5f00\u59cb"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Exec command"),"\uff1a\u8981\u6267\u884c\u7684 shell\u3002\u8fd9\u91cc\u6240\u6709\u7684 ",(0,i.kt)("inlineCode",{parentName:"li"},"Jenkins")," \u73af\u5883\u53d8\u91cf\u90fd\u53ef\u4ee5\u7528")),(0,i.kt)("h3",{id:"35145-\u8fdc\u7a0b\u6267\u884c"},"35.1.4.5 \u8fdc\u7a0b\u6267\u884c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:'showLineNumbers title="publish.sh"',showLineNumbers:!0,"":!0,title:'"publish.sh"'},'# Jenkins Prod\u670d \u8c03\u7528\u811a\u672c\nsolutionName=$1\ncontainerName=$2\nfilename=$3\nport=$4\n#.publis\necho ${solutionName}\necho ${containerName}\necho ${filename}\nbaseDir=/mudata/webroot/publish\n\nwebDir=${baseDir}/publish/${filename}\n\nrm -rf ${webDir}\nmkdir ${webDir}\n\ntar -zxvf ${baseDir}/publish/${filename}.tar.gz -C ${webDir}/\nrm -f ${webDir}/appsettings.json && mv ${webDir}/appsettings.Prod.json ${webDir}/appsettings.json\n\n#\u5224\u65b7\u662f\u5426\u5b58\u5728\nCID=$(docker ps | grep "${containerName}" | awk \'{print $1}\')\necho $CID\nif [ "$CID" != "" ];then\n docker stop ${containerName}\n docker rm ${containerName}\n docker rmi ${containerName}\n#docker stop $CID\n#docker rm $CID\nfi\n\ncd ${webDir}/ && docker build -t ${containerName} .\ndocker run --name ${containerName} --restart=always -d -p ${port}:${port} --link myredis:myredis -v /etc/localtime:/etc/localtime:ro ${containerName}\n')),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\u8fd9\u91cc\u7684\u903b\u8f91\u5c31\u662f\u89e3\u538b\uff0c\u7136\u540e ",(0,i.kt)("inlineCode",{parentName:"p"},"Docker")," \u76f8\u5173\u3002\u6bcf\u6b21\u6784\u5efa\u90fd\u662f\u5e26\u7740\u7248\u672c\u53f7\u6765\u7684\u3002")),(0,i.kt)("h2",{id:"3515-\u53cd\u9988\u4e0e\u5efa\u8bae"},"35.1.5 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/52821183.aacb6fa0.js b/handbook/build/assets/js/52821183.aacb6fa0.js new file mode 100644 index 00000000000..8244a20b608 --- /dev/null +++ b/handbook/build/assets/js/52821183.aacb6fa0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8445],{3905:function(e,t,n){n.d(t,{Zo:function(){return p},kt:function(){return d}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=r.createContext({}),l=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(u.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},s=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,u=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),s=l(n),d=o,m=s["".concat(u,".").concat(d)]||s[d]||f[d]||i;return n?r.createElement(m,a(a({ref:t},p),{},{components:n})):r.createElement(m,a({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=s;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:o,a[1]=c;for(var l=2;l=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),u=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},l=function(e){var t=u(e.components);return r.createElement(c.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),f=u(n),d=o,m=f["".concat(c,".").concat(d)]||f[d]||s[d]||i;return n?r.createElement(m,a(a({ref:t},l),{},{components:n})):r.createElement(m,a({ref:t},l))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=f;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p.mdxType="string"==typeof e?e:o,a[1]=p;for(var u=2;u=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),c=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},m=function(e){var n=c(e.components);return a.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),d=c(t),p=r,y=d["".concat(s,".").concat(p)]||d[p]||u[p]||i;return t?a.createElement(y,o(o({ref:n},m),{},{components:t})):a.createElement(y,o({ref:n},m))}));function p(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=d;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var c=2;cClay \u5bf9\u8c61",id:"292-clay-\u5bf9\u8c61",level:2},{value:"29.3 \u5982\u4f55\u4f7f\u7528",id:"293-\u5982\u4f55\u4f7f\u7528",level:2},{value:"29.3.1 \u521b\u5efa\u4e00\u4e2a\u5bf9\u8c61",id:"2931-\u521b\u5efa\u4e00\u4e2a\u5bf9\u8c61",level:3},{value:"29.3.2 \u8bfb\u53d6/\u83b7\u53d6\u5c5e\u6027",id:"2932-\u8bfb\u53d6\u83b7\u53d6\u5c5e\u6027",level:3},{value:"29.3.3 \u65b0\u589e\u5c5e\u6027",id:"2933-\u65b0\u589e\u5c5e\u6027",level:3},{value:"29.3.4 \u66f4\u65b0\u5c5e\u6027\u503c",id:"2934-\u66f4\u65b0\u5c5e\u6027\u503c",level:3},{value:"29.3.5 \u5220\u9664\u5c5e\u6027",id:"2935-\u5220\u9664\u5c5e\u6027",level:3},{value:"29.3.6 \u5224\u65ad\u5c5e\u6027\u662f\u5426\u5b58\u5728",id:"2936-\u5224\u65ad\u5c5e\u6027\u662f\u5426\u5b58\u5728",level:3},{value:"29.3.7 \u904d\u5386\u5bf9\u8c61",id:"2937-\u904d\u5386\u5bf9\u8c61",level:3},{value:"29.3.8 \u8f6c\u6362\u6210\u5177\u4f53\u5bf9\u8c61",id:"2938-\u8f6c\u6362\u6210\u5177\u4f53\u5bf9\u8c61",level:3},{value:"29.3.9 \u56fa\u5316\u7c98\u571f",id:"2939-\u56fa\u5316\u7c98\u571f",level:3},{value:"29.3.10 \u8f93\u51fa JSON",id:"29310-\u8f93\u51fa-json",level:3},{value:"29.3.11 \u8f93\u51fa XML \u5bf9\u8c61",id:"29311-\u8f93\u51fa-xml-\u5bf9\u8c61",level:3},{value:"29.3.12 \u5173\u952e\u5b57\u5904\u7406",id:"29312-\u5173\u952e\u5b57\u5904\u7406",level:3},{value:"29.3.13 \u8f6c\u6362\u6210\u5b57\u5178\u7c7b\u578b",id:"29313-\u8f6c\u6362\u6210\u5b57\u5178\u7c7b\u578b",level:3},{value:"29.4 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"294-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:u};function p(e){var n=e.components,t=(0,r.Z)(e,o);return(0,i.kt)("wrapper",(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 2.1.12 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,i.kt)("h2",{id:"291-\u5173\u4e8e\u7c98\u571f\u5bf9\u8c61"},"29.1 \u5173\u4e8e\u7c98\u571f\u5bf9\u8c61"),(0,i.kt)("p",null,"\u7c98\u571f\u5bf9\u8c61\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u81ea\u521b\u7684\u4e00\u79cd\u6982\u5ff5\uff0c\u662f\u4e00\u79cd\u53ef\u4ee5\u6a21\u62df\u5f31\u8bed\u8a00\u7279\u6027\u7684\u5bf9\u8c61\uff0c\u7c7b\u4f3c ",(0,i.kt)("inlineCode",{parentName:"p"},"Javascript")," \u4e00\u6837\u64cd\u4f5c\u5bf9\u8c61\u3002\u53ea\u9700\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"Clay")," \u7c7b\u521d\u59cb\u5316\u5373\u53ef\u3002"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u4e3a\u4ec0\u4e48\u8d77\u540d\u4e3a \u201c\u7c98\u571f\u201d \u5462\uff1f\u56e0\u4e3a\u8fd9\u4e2a\u5bf9\u8c61\u53ef\u4ee5\u81ea\u7531\u7684\u6dfb\u52a0\u5c5e\u6027\uff0c\u79fb\u9664\u5c5e\u6027\uff0c\u53c8\u53ef\u4ee5\u56fa\u5316\u6210\u4efb\u4f55\u5bf9\u8c61\uff0c\u5177\u6709\u53ef\u62d3\u5c55\u3001\u53ef\u5851\u9020\u7684\u7279\u70b9\u3002")),(0,i.kt)("h3",{id:"2911-\u4f7f\u7528\u573a\u666f"},"29.1.1 \u4f7f\u7528\u573a\u666f"),(0,i.kt)("p",null,"\u7c98\u571f\u5bf9\u8c61\u5e38\u7528\u4e8e\u9700\u8981\u52a8\u6001\u6784\u5efa\u5bf9\u8c61\u7684\u5730\u65b9\uff0c\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"CMS")," \u7cfb\u7edf\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"ViewModel"),"\uff0c\u6216\u8005\u8fd0\u884c\u65f6\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5bf9\u8c61\uff0c\u6216\u8005\u8bf7\u6c42\u7b2c\u4e09\u65b9 ",(0,i.kt)("inlineCode",{parentName:"p"},"API")," \u60c5\u51b5\u3002"),(0,i.kt)("h3",{id:"2912-\u5173\u4e8e\u6027\u80fd"},"29.1.2 \u5173\u4e8e\u6027\u80fd"),(0,i.kt)("p",null,"\u7c98\u571f\u6027\u80fd\u5b9e\u9645\u4e0a\u5e76\u4e0d\u9ad8\u6548\uff0c\u4f46\u662f\u6027\u80fd\u4e5f\u5e76\u4e0d\u4f4e\u4e0b\uff0c\u53ea\u4e0d\u8fc7\u7565\u8f93\u4e8e\u5f3a\u7c7b\u578b\u8c03\u7528\u3002\u4ec0\u4e48\u65f6\u5019\u4f7f\u7528\u53ef\u4ee5\u770b\u4ee5\u4e0a\u7684\u3010\u4f7f\u7528\u573a\u666f\u3011\u3002"),(0,i.kt)("h2",{id:"292-clay-\u5bf9\u8c61"},"29.2 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Clay")," \u5bf9\u8c61"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Clay")," \u5bf9\u8c61\u662f\u7ee7\u627f\u81ea ",(0,i.kt)("inlineCode",{parentName:"p"},"DynamicObject")," \u7684\u4e00\u4e2a\u7279\u6b8a\u5bf9\u8c61\uff0c\u63d0\u4f9b\u4e86\u50cf\u5f31\u8bed\u8a00\u4e00\u6837\u64cd\u4f5c\u5bf9\u8c61\u7684\u65b9\u6cd5\u53ca\u7d22\u5f15\u3002"),(0,i.kt)("h2",{id:"293-\u5982\u4f55\u4f7f\u7528"},"29.3 \u5982\u4f55\u4f7f\u7528"),(0,i.kt)("h3",{id:"2931-\u521b\u5efa\u4e00\u4e2a\u5bf9\u8c61"},"29.3.1 \u521b\u5efa\u4e00\u4e2a\u5bf9\u8c61"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u521b\u5efa\u4e00\u4e2a\u7a7a\u7684\u7c98\u571f\u5bf9\u8c61\ndynamic clay = new Clay();\n\n// \u4ece\u73b0\u6709\u7684\u5bf9\u8c61\u521b\u5efa\ndynamic clay2 = Clay.Object(new {});\n\n// \u4ece json \u5b57\u7b26\u4e32\u521b\u5efa\uff0c\u53ef\u7528\u4e8e\u7b2c\u4e09\u65b9 API \u5bf9\u63a5\uff0c\u975e\u5e38\u6709\u7528\ndynamic clay3 = Clay.Parse(@"{""foo"":""json"", ""bar"":100, ""nest"":{ ""foobar"":true } }");\n')),(0,i.kt)("h3",{id:"2932-\u8bfb\u53d6\u83b7\u53d6\u5c5e\u6027"},"29.3.2 \u8bfb\u53d6/\u83b7\u53d6\u5c5e\u6027"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'dynamic clay = Clay.Object(new\n{\n Foo = "json",\n Bar = 100,\n Nest = new\n {\n Foobar = true\n }\n});\n\nvar r1 = clay.Foo; // "json" - string\u7c7b\u578b\nvar r2 = clay.Bar; // 100 - double\u7c7b\u578b\nvar r3 = clay.Nest.Foobar; // true - bool\u7c7b\u578b\nvar r4 = clay["Nest"]["Foobar"]; // \u8fd8\u53ef\u4ee5\u548c Javascript \u4e00\u6837\u901a\u8fc7\u7d22\u5f15\u5668\u83b7\u53d6\n')),(0,i.kt)("h3",{id:"2933-\u65b0\u589e\u5c5e\u6027"},"29.3.3 \u65b0\u589e\u5c5e\u6027"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'dynamic clay = Clay.Object(new\n{\n Foo = "json",\n Bar = 100,\n Nest = new\n {\n Foobar = true\n }\n});\n\n// \u65b0\u589e\nclay.Arr = new string[] { "NOR", "XOR" }; // \u6dfb\u52a0\u4e00\u4e2a\u6570\u7ec4\nclay.Obj1 = new City { }; // \u65b0\u589e\u4e00\u4e2a\u5b9e\u4f8b\u5bf9\u8c61\nclay.Obj2 = new { Foo = "abc", Bar = 100 }; // \u65b0\u589e\u4e00\u4e2a\u533f\u540d\u7c7b\n')),(0,i.kt)("h3",{id:"2934-\u66f4\u65b0\u5c5e\u6027\u503c"},"29.3.4 \u66f4\u65b0\u5c5e\u6027\u503c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'dynamic clay = Clay.Object(new\n{\n Foo = "json",\n Bar = 100,\n Nest = new\n {\n Foobar = true\n }\n});\n\n// \u66f4\u65b0\nclay.Foo = "Furion";\nclay["Nest"].Foobar = false;\nclay.Nest["Foobar"] = true;\n')),(0,i.kt)("h3",{id:"2935-\u5220\u9664\u5c5e\u6027"},"29.3.5 \u5220\u9664\u5c5e\u6027"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'dynamic clay = Clay.Object(new\n{\n Foo = "json",\n Bar = 100,\n Nest = new\n {\n Foobar = true\n },\n Arr = new string[] { "NOR", "XOR" }\n});\n\n// \u5220\u9664\u64cd\u4f5c\nclay.Delete("Foo"); // \u901a\u8fc7 Delete \u65b9\u6cd5\u5220\u9664\nclay.Arr.Delete(0); // \u652f\u6301\u6570\u7ec4 Delete \u7d22\u5f15\u5220\u9664\nclay("Bar"); // \u652f\u6301\u76f4\u63a5\u901a\u8fc7\u5bf9\u8c61\u4f5c\u4e3a\u65b9\u6cd5\u5220\u9664\nclay.Arr(1); // \u652f\u6301\u6570\u7ec4\u4f5c\u4e3a\u65b9\u6cd5\u5220\u9664\n')),(0,i.kt)("h3",{id:"2936-\u5224\u65ad\u5c5e\u6027\u662f\u5426\u5b58\u5728"},"29.3.6 \u5224\u65ad\u5c5e\u6027\u662f\u5426\u5b58\u5728"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'dynamic clay = Clay.Object(new\n{\n Foo = "json",\n Bar = 100,\n Nest = new\n {\n Foobar = true\n },\n Arr = new string[] { "NOR", "XOR" }\n});\n\n// \u5224\u65ad\u5c5e\u6027\u662f\u5426\u5b58\u5728\nvar a = clay.IsDefined("Foo"); // true\nvar b = clay.IsDefined("Foooo"); // false\nvar c = clay.Foo(); // true\nvar d = clay.Foooo(); // false;\n')),(0,i.kt)("h3",{id:"2937-\u904d\u5386\u5bf9\u8c61"},"29.3.7 \u904d\u5386\u5bf9\u8c61"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'dynamic clay = Clay.Object(new\n{\n Foo = "json",\n Bar = 100,\n Nest = new\n {\n Foobar = true\n },\n Arr = new string[] { "NOR", "XOR" }\n});\n\n// \u904d\u5386\u6570\u7ec4\nforeach (string item in clay.Arr)\n{\n Console.WriteLine(item); // NOR, XOR\n}\n\n// \u904d\u5386\u6574\u4e2a\u5bf9\u8c61\u5c5e\u6027\u53ca\u503c\uff0c\u7c7b\u4f3c JavaScript \u7684 for (var p in obj)\nforeach (KeyValuePair item in clay)\n{\n Console.WriteLine(item.Key + ":" + item.Value); // Foo:json, Bar: 100, Nest: { "Foobar":true}, Arr:["NOR","XOR"]\n}\n')),(0,i.kt)("h3",{id:"2938-\u8f6c\u6362\u6210\u5177\u4f53\u5bf9\u8c61"},"29.3.8 \u8f6c\u6362\u6210\u5177\u4f53\u5bf9\u8c61"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'dynamic clay = new Clay();\nclay.Arr = new string[] { "Furion", "Fur" };\n\n// \u6570\u7ec4\u8f6c\u6362\u793a\u4f8b\nvar a1 = clay.Arr.Deserialize(); // \u901a\u8fc7 Deserialize \u65b9\u6cd5\nvar a2 = (string[])clay.Arr; // \u5f3a\u5236\u8f6c\u6362\nstring[] a3 = clay.Arr; // \u58f0\u660e\u65b9\u5f0f\n\n// \u5bf9\u8c61\u8f6c\u6362\u793a\u4f8b\nclay.City = new City { Id = 1, Name = "\u4e2d\u5c71\u5e02" };\nvar c1 = clay.City.Deserialize(); // \u901a\u8fc7 Deserialize \u65b9\u6cd5\nvar c2 = (City)clay.City; // \u5f3a\u5236\u8f6c\u6362\nCity c3 = clay.City; // \u58f0\u660e\u65b9\u5f0f\n')),(0,i.kt)("h3",{id:"2939-\u56fa\u5316\u7c98\u571f"},"29.3.9 \u56fa\u5316\u7c98\u571f"),(0,i.kt)("p",null,"\u56fa\u5316\u7c98\u571f\u5728\u5f88\u591a\u65f6\u5019\u548c\u5e8f\u5217\u5316\u5f88\u50cf\uff0c\u4f46\u662f\u5982\u679c\u76f4\u63a5\u8c03\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Deserialize")," \u6216 ",(0,i.kt)("inlineCode",{parentName:"p"},"Deserialize")," \u65e0\u6cd5\u8fd4\u56de\u5b9e\u9645\u7c7b\u578b\uff0c\u6240\u4ee5\u5c31\u6709\u4e86\u56fa\u5316\u7c7b\u578b\u7684\u529f\u80fd\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u8fd4\u56de object\nvar obj = clay.Solidify();\n\n// \u8fd4\u56de dynamic\nvar obj1 = clay.Solidify();\n\n// \u8fd4\u56de\u5176\u4ed6\u4efb\u610f\u7c7b\u578b\nvar obj2 = clay.Solidify();\n")),(0,i.kt)("h3",{id:"29310-\u8f93\u51fa-json"},"29.3.10 \u8f93\u51fa ",(0,i.kt)("inlineCode",{parentName:"h3"},"JSON")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'dynamic clay = Clay.Object(new\n{\n Foo = "json",\n Bar = 100,\n Nest = new\n {\n Foobar = true\n },\n Arr = new string[] { "NOR", "XOR" }\n});\n\n// \u8f93\u51fa JSON\nvar json = clay.ToString(); // "{\\"Foo\\":\\"json\\",\\"Bar\\":100,\\"Nest\\":{\\"Foobar\\":true},\\"Arr\\":[\\"NOR\\",\\"XOR\\"]}"\n')),(0,i.kt)("admonition",{type:"tip"},(0,i.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Clay")," \u5e8f\u5217\u5316\u6210 ",(0,i.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"JSON")," \u952e\u5927\u5c0f\u5199\u63a7\u5236"),(0,i.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Clay")," \u8f93\u51fa\u6210 ",(0,i.kt)("inlineCode",{parentName:"p"},"JSON")," \u540e\u5c06\u4fdd\u6301\u539f\u6837\u8f93\u51fa\uff0c\u5982\u679c\u9700\u8981\u5b9e\u73b0\u952e\u547d\u540d\u63a7\u5236\uff0c\u5219\u9700\u8981\u5148\u8f6c\u6362\u6210 ",(0,i.kt)("inlineCode",{parentName:"p"},"Dictionary")," \u7136\u540e\u518d\u914d\u7f6e ",(0,i.kt)("inlineCode",{parentName:"p"},"AddJsonOptions")," \u670d\u52a1\uff0c\u5982\uff1a"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8-9}",showLineNumbers:!0,"{8-9}":!0},"public IActionResult OutputClay()\n{\n dynamic clay = Clay.Object(new\n {\n // ....\n });\n\n // \u8f6c\u6362\u6210 dictionary\n var dic = clay.ToDictionary();\n\n return new JsonResult(dic);\n}\n")),(0,i.kt)("p",{parentName:"admonition"},"\u914d\u7f6e\u5e8f\u5217\u5316 ",(0,i.kt)("inlineCode",{parentName:"p"},"Dictionary")," \u952e\u547d\u540d\u7b56\u7565\u652f\u6301\uff1a"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,4}",showLineNumbers:!0,"{2,4}":!0},"services.AddControllers()\n .AddJsonOptions(options =>\n {\n options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; // \u914d\u7f6e Dictionary \u7c7b\u578b\u5e8f\u5217\u5316\u8f93\u51fa\n });\n"))),(0,i.kt)("h3",{id:"29311-\u8f93\u51fa-xml-\u5bf9\u8c61"},"29.3.11 \u8f93\u51fa ",(0,i.kt)("inlineCode",{parentName:"h3"},"XML")," \u5bf9\u8c61"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'dynamic clay = Clay.Object(new\n{\n Foo = "json",\n Bar = 100,\n Nest = new\n {\n Foobar = true\n },\n Arr = new string[] { "NOR", "XOR" }\n});\n\n// \u8f93\u51fa XElement\nvar xml = clay.XmlElement;\n')),(0,i.kt)("h3",{id:"29312-\u5173\u952e\u5b57\u5904\u7406"},"29.3.12 \u5173\u952e\u5b57\u5904\u7406"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'dynamic clay = new Clay();\nclay.@int = 1;\nclay.@event = "\u4e8b\u4ef6";\n')),(0,i.kt)("h3",{id:"29313-\u8f6c\u6362\u6210\u5b57\u5178\u7c7b\u578b"},"29.3.13 \u8f6c\u6362\u6210\u5b57\u5178\u7c7b\u578b"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'dynamic clay = Clay.Object(new { name = "\u5f20\u4e09" });\nclay.name = "\u767e\u5c0f\u50e7";\nDictionary parms = clay.ToDictionary();\n')),(0,i.kt)("h2",{id:"294-\u53cd\u9988\u4e0e\u5efa\u8bae"},"29.4 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/57da61d5.01e3f39c.js b/handbook/build/assets/js/57da61d5.01e3f39c.js new file mode 100644 index 00000000000..0cd4235f12d --- /dev/null +++ b/handbook/build/assets/js/57da61d5.01e3f39c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7043],{3905:function(e,n,t){t.d(n,{Zo:function(){return s},kt:function(){return d}});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var p=r.createContext({}),u=function(e){var n=r.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},s=function(e){var n=u(e.components);return r.createElement(p.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},c=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),c=u(t),d=a,k=c["".concat(p,".").concat(d)]||c[d]||m[d]||i;return t?r.createElement(k,o(o({ref:n},s),{},{components:t})):r.createElement(k,o({ref:n},s))}));function d(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,o=new Array(i);o[0]=c;var l={};for(var p in n)hasOwnProperty.call(n,p)&&(l[p]=n[p]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var u=2;uFurion \u529f\u80fd",id:"232-\u96c6\u6210-furion-\u529f\u80fd",level:2},{value:"2.3.3 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"233-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],c={toc:m};function d(e){var n=e.components,t=(0,a.Z)(e,o);return(0,i.kt)("wrapper",(0,r.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"\u63a8\u8350\u4f7f\u7528\u811a\u624b\u67b6",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u5b98\u65b9\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u65b9\u4fbf\u7684\u811a\u624b\u67b6\uff0c\u53ef\u4ee5\u5feb\u901f\u7684\u521b\u5efa\u591a\u5c42\u67b6\u6784\u9879\u76ee\u3002"),(0,i.kt)("p",{parentName:"admonition"},"\u63a8\u8350\u4f7f\u7528 \u300a",(0,i.kt)("a",{parentName:"p",href:"/docs/template"},"2.2 \u5b98\u65b9\u811a\u624b\u67b6"),"\u300b\u4ee3\u66ff\u672c\u7ae0\u8282\u529f\u80fd\u3002")),(0,i.kt)("h2",{id:"231-\u63a8\u8350\u5206\u5c42\u8bbe\u8ba1"},"2.3.1 \u63a8\u8350\u5206\u5c42\u8bbe\u8ba1"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u63a8\u8350\u91c7\u7528\u591a\u5c42\u9879\u76ee\u8bbe\u8ba1\u67b6\u6784\uff0c\u6bcf\u4e00\u4e2a\u9879\u76ee\u5c42\u7684\u4f9d\u8d56\u5206\u522b\u662f\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"YourName.Application"),"\uff1a\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"li"},"YourName.Core")," \u5f15\u7528"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},(0,i.kt)("inlineCode",{parentName:"strong"},"YourName.Core"),"\uff1a\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion")," \u5f15\u7528"),"\uff0c",(0,i.kt)("strong",{parentName:"li"},"SqlSugar \u7248\u672c\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion.Pure"))," \ud83c\udf97"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"YourName.Database.Migrations"),"\uff1a\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"li"},"YourName.EntityFramework.Core")," \u5f15\u7528"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"YourName.EntityFramework.Core"),"\uff1a\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"li"},"YourName.Core")," \u5f15\u7528"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"YourName.Web.Core"),"\uff1a\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"li"},"YourName.Application"),"\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"YourName.Database.Migrations")," \u5f15\u7528"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},(0,i.kt)("inlineCode",{parentName:"strong"},"YourName.Web.Entry"),"\uff1a\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"strong"},"YourName.Web.Core")," \u5f15\u7528 \u548c ",(0,i.kt)("inlineCode",{parentName:"strong"},"Microsoft.EntityFrameworkCore.Tools")," \u5305"))),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"EFCore")," \u4ee5\u5916\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"ORM")," \u6846\u67b6\uff0c\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"SqlSugar"),"\uff0c\u90a3\u4e48\u65e0\u9700\u521b\u5efa ",(0,i.kt)("inlineCode",{parentName:"p"},"YourName.Database.Migrations")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"YourName.EntityFramework.Core")," \u5c42\u3002"),(0,i.kt)("p",{parentName:"admonition"},"\u53e6\u5916 ",(0,i.kt)("inlineCode",{parentName:"p"},"YourName.Web.Entry")," \u65e0\u9700\u5f15\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Microsoft.EntityFrameworkCore.Tools")," \u5305\u3002")),(0,i.kt)("h2",{id:"232-\u96c6\u6210-furion-\u529f\u80fd"},"2.3.2 \u96c6\u6210 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Furion")," \u529f\u80fd"),(0,i.kt)("p",null,"\u9879\u76ee\u642d\u5efa\u597d\u4e4b\u540e\uff0c\u96c6\u6210 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u53ea\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Program.cs")," \u4e2d \u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"p"},"Inject()")," \u65b9\u6cd5\u5373\u53ef\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},".NET5")," \u7248\u672c\uff1a")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {18}",showLineNumbers:!0,"":!0,"{18}":!0},"using Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Hosting;\n\nnamespace YourName.Web.Entry\n{\n public class Program\n {\n public static void Main(string[] args)\n {\n CreateHostBuilder(args).Build().Run();\n }\n\n public static IHostBuilder CreateHostBuilder(string[] args)\n {\n return Host.CreateDefaultBuilder(args)\n .ConfigureWebHostDefaults(webBuilder =>\n {\n webBuilder.Inject()\n .UseStartup();\n });\n }\n }\n}\n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},".NET6")," \u7248\u672c")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,11}",showLineNumbers:!0,"{1,3,11}":!0},"var builder = WebApplication.CreateBuilder(args).Inject();\n\nbuilder.Services.AddControllers().AddInject();\n\nvar app = builder.Build();\n\napp.UseHttpsRedirection();\n\napp.UseAuthorization();\n\napp.UseInject();\n\napp.MapControllers();\n\napp.Run();\n")),(0,i.kt)("h2",{id:"233-\u53cd\u9988\u4e0e\u5efa\u8bae"},"2.3.3 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/58624d73.89417896.js b/handbook/build/assets/js/58624d73.89417896.js new file mode 100644 index 00000000000..44155572957 --- /dev/null +++ b/handbook/build/assets/js/58624d73.89417896.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7667],{3905:function(e,t,n){n.d(t,{Zo:function(){return m},kt:function(){return d}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},m=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),c=s(n),d=o,y=c["".concat(p,".").concat(d)]||c[d]||u[d]||i;return n?r.createElement(y,a(a({ref:t},m),{},{components:n})):r.createElement(y,a({ref:t},m))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var s=2;sSql \u64cd\u4f5c\u4ed3\u50a8",id:"9424-sql-\u64cd\u4f5c\u4ed3\u50a8",level:3},{value:"9.4.2.5 \u591a\u6570\u636e\u5e93 Sql \u64cd\u4f5c\u4ed3\u50a8",id:"9425-\u591a\u6570\u636e\u5e93-sql-\u64cd\u4f5c\u4ed3\u50a8",level:3},{value:"9.4.2.6 \u53ea\u8bfb\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09",id:"9426-\u53ea\u8bfb\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93",level:3},{value:"9.4.2.7 \u53ea\u5199\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09",id:"9427-\u53ea\u5199\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93",level:3},{value:"9.4.2.8 \u53ea\u5141\u8bb8\u65b0\u589e\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09",id:"9428-\u53ea\u5141\u8bb8\u65b0\u589e\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93",level:3},{value:"9.4.2.9 \u53ea\u5141\u8bb8\u66f4\u65b0\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09",id:"9429-\u53ea\u5141\u8bb8\u66f4\u65b0\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93",level:3},{value:"9.4.2.10 \u53ea\u5141\u8bb8\u5220\u9664\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09",id:"94210-\u53ea\u5141\u8bb8\u5220\u9664\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93",level:3},{value:"9.4.2.11 \u53ea\u5141\u8bb8\u62d3\u5c55\u64cd\u4f5c\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09",id:"94211-\u53ea\u5141\u8bb8\u62d3\u5c55\u64cd\u4f5c\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93",level:3},{value:"9.4.2.12 \u53ea\u5141\u8bb8 Sql \u67e5\u8be2\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09",id:"94212-\u53ea\u5141\u8bb8-sql-\u67e5\u8be2\u4ed3\u50a8\u652f\u6301\u591a\u5e93",level:3},{value:"9.4.2.13 \u53ea\u5141\u8bb8 Sql \u975e\u67e5\u8be2\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09",id:"94213-\u53ea\u5141\u8bb8-sql-\u975e\u67e5\u8be2\u4ed3\u50a8\u652f\u6301\u591a\u5e93",level:3},{value:"9.4.2.14 \u8bfb\u5199\u5206\u79bb\u4ed3\u50a8",id:"94214-\u8bfb\u5199\u5206\u79bb\u4ed3\u50a8",level:3},{value:"9.4.2.15 \u5b9a\u4f4d\u5668\u4ed3\u50a8",id:"94215-\u5b9a\u4f4d\u5668\u4ed3\u50a8",level:3},{value:"9.4.3 \u4ed3\u50a8\u4f7f\u7528",id:"943-\u4ed3\u50a8\u4f7f\u7528",level:2},{value:"9.4.3.1 \u6784\u9020\u51fd\u6570\u6ce8\u5165",id:"9431-\u6784\u9020\u51fd\u6570\u6ce8\u5165",level:3},{value:"9.4.3.2 \u65b9\u6cd5\u53c2\u6570\u6ce8\u5165",id:"9432-\u65b9\u6cd5\u53c2\u6570\u6ce8\u5165",level:3},{value:"9.4.3.3 Db.GetRepository \u83b7\u53d6",id:"9433-dbgetrepository-\u83b7\u53d6",level:3},{value:"9.4.4 \u4ed3\u50a8\u9ad8\u7ea7\u7528\u6cd5",id:"944-\u4ed3\u50a8\u9ad8\u7ea7\u7528\u6cd5",level:2},{value:"9.4.4.1 \u52a8\u6001\u5207\u6362\u5b9e\u4f53\u4ed3\u50a8",id:"9441-\u52a8\u6001\u5207\u6362\u5b9e\u4f53\u4ed3\u50a8",level:3},{value:"9.4.4.2 \u52a8\u6001\u5207\u6362\u4ed3\u50a8\u7c7b\u578b",id:"9442-\u52a8\u6001\u5207\u6362\u4ed3\u50a8\u7c7b\u578b",level:3},{value:"9.4.4.3 \u83b7\u53d6 Sql \u64cd\u4f5c\u4ed3\u50a8",id:"9443-\u83b7\u53d6-sql-\u64cd\u4f5c\u4ed3\u50a8",level:3},{value:"9.4.5 \u591a\u6570\u636e\u5e93\u64cd\u4f5c",id:"945-\u591a\u6570\u636e\u5e93\u64cd\u4f5c",level:2},{value:"9.4.5.1 \u52a8\u6001\u5207\u6362\u591a\u4e2a\u6570\u636e\u5e93",id:"9451-\u52a8\u6001\u5207\u6362\u591a\u4e2a\u6570\u636e\u5e93",level:3},{value:"\u52a8\u6001\u5207\u6362\u6570\u636e\u5e93",id:"\u52a8\u6001\u5207\u6362\u6570\u636e\u5e93",level:4},{value:"\u53e6\u5916\u4efb\u4f55\u4ed3\u50a8\u6216\u5b9e\u4f53\u914d\u7f6e\u90fd\u652f\u6301\u591a\u4e2a\u6570\u636e\u5e93\u540c\u65f6\u64cd\u4f5c",id:"\u53e6\u5916\u4efb\u4f55\u4ed3\u50a8\u6216\u5b9e\u4f53\u914d\u7f6e\u90fd\u652f\u6301\u591a\u4e2a\u6570\u636e\u5e93\u540c\u65f6\u64cd\u4f5c",level:4},{value:"9.4.6 \u5728\u540e\u53f0\u4efb\u52a1\u4e2d\u4f7f\u7528",id:"946-\u5728\u540e\u53f0\u4efb\u52a1\u4e2d\u4f7f\u7528",level:2},{value:"9.4.7 \u81ea\u5b9a\u4e49\u4ed3\u50a8",id:"947-\u81ea\u5b9a\u4e49\u4ed3\u50a8",level:2},{value:"9.4.8 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"948-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],c={toc:u};function d(e){var t=e.components,n=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"941-\u4ec0\u4e48\u662f\u4ed3\u50a8"},"9.4.1 \u4ec0\u4e48\u662f\u4ed3\u50a8"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\u5728\u9886\u57df\u5c42\u548c\u6570\u636e\u6620\u5c04\u5c42\u7684\u4e2d\u4ecb,\u4f7f\u7528\u7c7b\u4f3c\u96c6\u5408\u7684\u63a5\u53e3\u6765\u5b58\u53d6\u9886\u57df\u5bf9\u8c61\uff0c\u5b9e\u9645\u4e0a\uff0c\u4ed3\u50a8\u88ab\u7528\u4e8e\u9886\u57df\u5bf9\u8c61\u5728\u6570\u636e\u5e93\u4e0a\u7684\u64cd\u4f5c\uff08\u5b9e\u4f53 Entity \u548c\u503c\u5bf9\u8c61 Value types\uff09\u3002\u4e00\u822c\u6765\u8bf4,\u6211\u4eec\u9488\u5bf9\u4e0d\u540c\u7684\u5b9e\u4f53(\u6216\u805a\u5408\u6839 Aggregate Root)\u4f1a\u521b\u5efa\u76f8\u5bf9\u5e94\u7684\u4ed3\u50a8\u3002")),(0,i.kt)("p",null,"\u7b80\u5355\u6765\u8bf4\uff0c\u4ed3\u50a8\u5c31\u662f\u6570\u636e\u5b58\u53d6\u64cd\u4f5c\u7684\u8f7d\u4f53\uff0c\u4f46\u4e0d\u9650\u5b9a\u4e8e\u6570\u636e\u5e93\u3002"),(0,i.kt)("h2",{id:"942-\u5185\u7f6e\u4ed3\u50a8"},"9.4.2 \u5185\u7f6e\u4ed3\u50a8"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u5185\u7f6e\u4e86\u4e00\u4e2a\u6570\u636e\u5e93\u64cd\u4f5c\u7684\u4ed3\u50a8\uff0c\u65b9\u4fbf\u5927\u5bb6\u62d3\u5c55\u548c\u96c6\u6210\uff1a"),(0,i.kt)("admonition",{title:"\u5173\u4e8e\u4f9d\u8d56\u6ce8\u5165\u8bf4\u660e",type:"info"},(0,i.kt)("p",{parentName:"admonition"},"\u76ee\u524d\u80fd\u591f\u88ab\u4f9d\u8d56\u6ce8\u5165\u89e3\u6790\u670d\u52a1\u7684\u4ed3\u50a8\u6709\uff1a"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IRepository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IRepository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IRepository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ISqlRepository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ISqlRepository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IMSRepository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IMSRepository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IMSRepository")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IDbRepository"))),(0,i.kt)("p",{parentName:"admonition"},"\u8fd8\u6709\u4e24\u4e2a\u79c1\u6709\u4ed3\u50a8\uff0c\u4e5f\u662f\u6240\u6709\u4ed3\u50a8\u7684\u57fa\u7c7b\uff08\u7528\u4e8e\u9ad8\u7ea7\u81ea\u5b9a\u4e49\u5f00\u53d1\uff09"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IPrivateRepository"),"\uff1a\u6240\u6709\u5b9e\u4f53\u4ed3\u50a8\u7684\u57fa\u7c7b"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IPrivateSqlRepository"),"\uff1a\u6240\u6709\u6570\u636e\u5e93\u64cd\u4f5c\u7684\u57fa\u7c7b")),(0,i.kt)("p",{parentName:"admonition"},"\u9664\u6b64\u4e4b\u540e\u7684\u6240\u6709\u4ed3\u50a8\u53ea\u80fd\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"rep.Constraint()")," \u8fdb\u884c\u7ea6\u675f\u521b\u5efa\uff0c\u5982\uff0c\u53ea\u8bfb\u4ed3\u50a8\uff1a"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var readRepository = rep.Constraint>();\n"))),(0,i.kt)("h3",{id:"9421-\u975e\u6cdb\u578b\u8d85\u7ea7\u4ed3\u50a8"},"9.4.2.1 \u975e\u6cdb\u578b\u8d85\u7ea7\u4ed3\u50a8"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IRepository"),"\uff1a\u9ed8\u8ba4\u975e\u6cdb\u578b\u4ed3\u50a8\u63a5\u53e3\uff0c\u652f\u6301\u5207\u6362\u5230\u4efb\u4f55\u4ed3\u50a8"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"EFCoreRepository"),"\uff1a\u9ed8\u8ba4\u975e\u6cdb\u578b\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"9422-\u6cdb\u578b\u5b9e\u4f53\u4ed3\u50a8"},"9.4.2.2 \u6cdb\u578b\u5b9e\u4f53\u4ed3\u50a8"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93\u5b9e\u4f53\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"EFCoreRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93\u5b9e\u4f53\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"9423-\u6cdb\u578b\u591a\u6570\u636e\u5e93\u5b9e\u4f53\u4ed3\u50a8"},"9.4.2.3 \u6cdb\u578b\u591a\u6570\u636e\u5e93\u5b9e\u4f53\u4ed3\u50a8"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IRepository"),"\uff1a\u4efb\u610f\u6570\u636e\u5e93\u7684\u5b9e\u4f53\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"EFCoreRepository"),"\uff1a\u4efb\u610f\u6570\u636e\u5e93\u7684\u5b9e\u4f53\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"9424-sql-\u64cd\u4f5c\u4ed3\u50a8"},"9.4.2.4 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Sql")," \u64cd\u4f5c\u4ed3\u50a8"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ISqlRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93 ",(0,i.kt)("inlineCode",{parentName:"li"},"Sql")," \u64cd\u4f5c\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93 ",(0,i.kt)("inlineCode",{parentName:"li"},"Sql")," \u64cd\u4f5c\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"9425-\u591a\u6570\u636e\u5e93-sql-\u64cd\u4f5c\u4ed3\u50a8"},"9.4.2.5 \u591a\u6570\u636e\u5e93 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Sql")," \u64cd\u4f5c\u4ed3\u50a8"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ISqlRepository"),"\uff1a\u4efb\u610f\u6570\u636e\u5e93\u7684 ",(0,i.kt)("inlineCode",{parentName:"li"},"Sql")," \u64cd\u4f5c\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlRepository"),"\uff1a\u4efb\u610f\u6570\u636e\u5e93\u7684 ",(0,i.kt)("inlineCode",{parentName:"li"},"Sql")," \u64cd\u4f5c\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"9426-\u53ea\u8bfb\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93"},"9.4.2.6 \u53ea\u8bfb\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IReadableRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93\u53ea\u8bfb\u5b9e\u4f53\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IReadableRepository"),"\uff1a\u591a\u6570\u636e\u5e93\u53ea\u8bfb\u5b9e\u4f53\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"9427-\u53ea\u5199\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93"},"9.4.2.7 \u53ea\u5199\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IWritableRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93\u53ea\u5199\u5b9e\u4f53\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IWritableRepository"),"\uff1a\u591a\u6570\u636e\u5e93\u53ea\u5199\u5b9e\u4f53\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"9428-\u53ea\u5141\u8bb8\u65b0\u589e\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93"},"9.4.2.8 \u53ea\u5141\u8bb8\u65b0\u589e\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IInsertableRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93\u53ea\u5141\u8bb8\u65b0\u589e\u7684\u5b9e\u4f53\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IInsertableRepository"),"\uff1a\u591a\u6570\u636e\u5e93\u53ea\u5141\u8bb8\u65b0\u589e\u7684\u5b9e\u4f53\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"9429-\u53ea\u5141\u8bb8\u66f4\u65b0\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93"},"9.4.2.9 \u53ea\u5141\u8bb8\u66f4\u65b0\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IUpdateableRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93\u53ea\u5141\u8bb8\u66f4\u65b0\u7684\u5b9e\u4f53\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IUpdateableRepository"),"\uff1a\u591a\u6570\u636e\u5e93\u53ea\u5141\u8bb8\u66f4\u65b0\u7684\u5b9e\u4f53\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"94210-\u53ea\u5141\u8bb8\u5220\u9664\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93"},"9.4.2.10 \u53ea\u5141\u8bb8\u5220\u9664\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IDeletableRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93\u53ea\u5141\u8bb8\u5220\u9664\u7684\u5b9e\u4f53\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IDeletableRepository"),"\uff1a\u591a\u6570\u636e\u5e93\u53ea\u5141\u8bb8\u5220\u9664\u7684\u5b9e\u4f53\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"94211-\u53ea\u5141\u8bb8\u62d3\u5c55\u64cd\u4f5c\u5b9e\u4f53\u4ed3\u50a8\u652f\u6301\u591a\u5e93"},"9.4.2.11 \u53ea\u5141\u8bb8\u62d3\u5c55\u64cd\u4f5c\u5b9e\u4f53\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09"),(0,i.kt)("admonition",{title:"\u529f\u80fd\u79fb\u9664\u58f0\u660e",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"\u8be5\u529f\u80fd\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 2.5.1 +")," \u7248\u672c\u4e2d\u5df2\u79fb\u9664\u3002\u6b64\u64cd\u4f5c\u8ba9\u5f88\u591a\u4e0d\u4e86\u89e3 ",(0,i.kt)("inlineCode",{parentName:"p"},"EFCore")," \u7684\u5f00\u53d1\u8005\u4ea7\u751f\u4e86\u5f88\u5927\u7684\u8bef\u89e3\uff0c\u4e0d\u77e5\u4f55\u65f6\u65b0\u589e\u6216\u4f55\u65f6\u66f4\u65b0\uff0c\u6545\u79fb\u9664\u6b64\u529f\u80fd\u3002")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IOperableRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93\u53ea\u5141\u8bb8\u62d3\u5c55\u64cd\u4f5c\u5b9e\u4f53\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IOperableRepository"),"\uff1a\u591a\u6570\u636e\u5e93\u53ea\u5141\u8bb8\u62d3\u5c55\u64cd\u4f5c\u5b9e\u4f53\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"94212-\u53ea\u5141\u8bb8-sql-\u67e5\u8be2\u4ed3\u50a8\u652f\u6301\u591a\u5e93"},"9.4.2.12 \u53ea\u5141\u8bb8 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Sql")," \u67e5\u8be2\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ISqlReaderRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93\u53ea\u5141\u8bb8 ",(0,i.kt)("inlineCode",{parentName:"li"},"Sql")," \u67e5\u8be2\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ISqlReaderRepository"),"\uff1a\u591a\u6570\u636e\u5e93\u53ea\u5141\u8bb8 ",(0,i.kt)("inlineCode",{parentName:"li"},"Sql")," \u67e5\u8be2\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"94213-\u53ea\u5141\u8bb8-sql-\u975e\u67e5\u8be2\u4ed3\u50a8\u652f\u6301\u591a\u5e93"},"9.4.2.13 \u53ea\u5141\u8bb8 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Sql")," \u975e\u67e5\u8be2\u4ed3\u50a8\uff08\u652f\u6301\u591a\u5e93\uff09"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ISqlExecutableRepository"),"\uff1a\u9ed8\u8ba4\u6570\u636e\u5e93\u53ea\u5141\u8bb8 ",(0,i.kt)("inlineCode",{parentName:"li"},"Sql")," \u975e\u67e5\u8be2\u4ed3\u50a8\u63a5\u53e3"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ISqlExecutableRepository"),"\uff1a\u591a\u6570\u636e\u5e93\u53ea\u5141\u8bb8 ",(0,i.kt)("inlineCode",{parentName:"li"},"Sql")," \u975e\u67e5\u8be2\u4ed3\u50a8\u5b9e\u73b0")),(0,i.kt)("h3",{id:"94214-\u8bfb\u5199\u5206\u79bb\u4ed3\u50a8"},"9.4.2.14 \u8bfb\u5199\u5206\u79bb\u4ed3\u50a8"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IMSRepository"),"\uff1a\u6700\u591a\u652f\u6301 ",(0,i.kt)("strong",{parentName:"li"},"\u4e00\u4e3b 7 \u4ece")," \u4ed3\u50a8")),(0,i.kt)("h3",{id:"94215-\u5b9a\u4f4d\u5668\u4ed3\u50a8"},"9.4.2.15 \u5b9a\u4f4d\u5668\u4ed3\u50a8"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"IDbRepository"),"\uff1a\u521d\u59cb\u5316\u7279\u5b9a\u6570\u636e\u5e93\u4ed3\u50a8")),(0,i.kt)("h2",{id:"943-\u4ed3\u50a8\u4f7f\u7528"},"9.4.3 \u4ed3\u50a8\u4f7f\u7528"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86\u975e\u5e38\u591a\u7684\u65b9\u5f0f\u521b\u5efa\u4ed3\u50a8\uff0c\u76ee\u7684\u662f\u4e3a\u4e86\u8ba9\u5927\u5bb6\u53ef\u4ee5\u5728\u4e0d\u540c\u7684\u573a\u666f\u4e2d\u4f7f\u7528\u3002"),(0,i.kt)("h3",{id:"9431-\u6784\u9020\u51fd\u6570\u6ce8\u5165"},"9.4.3.1 \u6784\u9020\u51fd\u6570\u6ce8\u5165"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"":!0,"{2}":!0},"private readonly IRepository _personRepository;\npublic FurionService(IRepository personRepository)\n{\n _personRepository = personRepository;\n}\n")),(0,i.kt)("h3",{id:"9432-\u65b9\u6cd5\u53c2\u6570\u6ce8\u5165"},"9.4.3.2 \u65b9\u6cd5\u53c2\u6570\u6ce8\u5165"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},"public async Task> GetAll([FromServices] IRepository repository, string keyword)\n{\n var persons = await repository.AsQueryable().ToListAsync();\n return persons.Adapt>();\n}\n")),(0,i.kt)("h3",{id:"9433-dbgetrepository-\u83b7\u53d6"},"9.4.3.3 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Db.GetRepository")," \u83b7\u53d6"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u975e\u6cdb\u578b\u4ed3\u50a8\nvar repository = Db.GetRepository();\n\n// \u6cdb\u578b\u4ed3\u50a8\nvar repository = Db.GetRepository();\n\n// Sql \u4ed3\u50a8\nvar sqlRepository = Db.GetSqlRepository();\n")),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u4e0d\u7ba1\u91c7\u7528\u54ea\u79cd\u65b9\u5f0f\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u90fd\u4fdd\u8bc1\u4e86\u4ed3\u50a8\u4e00\u6b21\u8bf7\u6c42\u552f\u4e00\u6027\u3002\u540c\u65f6 ",(0,i.kt)("inlineCode",{parentName:"p"},"Db.GetRepository()")," \u65b9\u5f0f\u652f\u6301\u4efb\u4f55\u9759\u6001\u7c7b\u4e2d\u4f7f\u7528\u3002")),(0,i.kt)("h2",{id:"944-\u4ed3\u50a8\u9ad8\u7ea7\u7528\u6cd5"},"9.4.4 \u4ed3\u50a8\u9ad8\u7ea7\u7528\u6cd5"),(0,i.kt)("h3",{id:"9441-\u52a8\u6001\u5207\u6362\u5b9e\u4f53\u4ed3\u50a8"},"9.4.4.1 \u52a8\u6001\u5207\u6362\u5b9e\u4f53\u4ed3\u50a8"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var userRepository = personRepository.Change();\n")),(0,i.kt)("h3",{id:"9442-\u52a8\u6001\u5207\u6362\u4ed3\u50a8\u7c7b\u578b"},"9.4.4.2 \u52a8\u6001\u5207\u6362\u4ed3\u50a8\u7c7b\u578b"),(0,i.kt)("p",null,"\u6bd4\u5982\uff0c\u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u5e93\u4ed3\u50a8\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u53ea\u8bfb\u4ed3\u50a8\nvar readRepository = personRepository.Constraint>();\n\n// \u53ea\u5199\u4ed3\u50a8\nvar writeRepository = personRepository.Constraint>();\n")),(0,i.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},".Constraint")," \u652f\u6301\u5207\u6362\u4efb\u4f55\u4ed3\u50a8\u7c7b\u578b\u3002")),(0,i.kt)("h3",{id:"9443-\u83b7\u53d6-sql-\u64cd\u4f5c\u4ed3\u50a8"},"9.4.4.3 \u83b7\u53d6 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Sql")," \u64cd\u4f5c\u4ed3\u50a8"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var sqlRepository = repository.Sql();\n")),(0,i.kt)("h2",{id:"945-\u591a\u6570\u636e\u5e93\u64cd\u4f5c"},"9.4.5 \u591a\u6570\u636e\u5e93\u64cd\u4f5c"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"DbContextLocator")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\u5b9e\u73b0\u591a\u79cd\u6570\u636e\u5e93\u64cd\u4f5c\uff0c\u53ef\u4ee5\u968f\u610f\u5207\u6362\u6570\u636e\u5e93"),(0,i.kt)("h3",{id:"9451-\u52a8\u6001\u5207\u6362\u591a\u4e2a\u6570\u636e\u5e93"},"9.4.5.1 \u52a8\u6001\u5207\u6362\u591a\u4e2a\u6570\u636e\u5e93"),(0,i.kt)("h4",{id:"\u52a8\u6001\u5207\u6362\u6570\u636e\u5e93"},"\u52a8\u6001\u5207\u6362\u6570\u636e\u5e93"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u5207\u6362\u5230 MSSQL \u64cd\u4f5c Person\u8868\nvar mssqlRepository = repository.Change();\n\n// \u5207\u6362\u5230 MySql \u64cd\u4f5c Person\u8868\nvar mysqlRepository = repository.Change();\n\n// \u5207\u6362\u5230 Sqlite \u64cd\u4f5c Person\u8868\nvar sqliteRepository = repository.Change();\n\n// \u5176\u4ed6\u66f4\u591a\u6570\u636e\u5e93\u4e00\u6837\u7684\u64cd\u4f5c\n")),(0,i.kt)("h4",{id:"\u53e6\u5916\u4efb\u4f55\u4ed3\u50a8\u6216\u5b9e\u4f53\u914d\u7f6e\u90fd\u652f\u6301\u591a\u4e2a\u6570\u636e\u5e93\u540c\u65f6\u64cd\u4f5c"},"\u53e6\u5916\u4efb\u4f55\u4ed3\u50a8\u6216\u5b9e\u4f53\u914d\u7f6e\u90fd\u652f\u6301\u591a\u4e2a\u6570\u636e\u5e93\u540c\u65f6\u64cd\u4f5c"),(0,i.kt)("p",null,"\u4ed3\u50a8\u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"IRepository mssqlRepository\n\nISqlRepository mssqlRepository;\n")),(0,i.kt)("p",null,"\u52a8\u6001 ",(0,i.kt)("inlineCode",{parentName:"p"},"sql")," \u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'"select * from person".Change().SqlQuery();\n')),(0,i.kt)("p",null,"\u5b9e\u4f53\u914d\u7f6e\u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"public class User:Entity\n{\n}\n")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u4ee3\u7406\u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'[SqlFunction("funcName", DbContextLocator = typeof(MySqlDbContextLocator))]\nint GetAge(int id);\n')),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Linq")," \u4e2d\u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'[QueryableFunction("funcName","dbo", DbContextLocator = typeof(MySqlDbContextLocator))]\nstring GetName()=> throw Oops.Oh("\u4e0d\u652f\u6301\u8be5\u6570\u636e\u5e93\u64cd\u4f5c");\n')),(0,i.kt)("h2",{id:"946-\u5728\u540e\u53f0\u4efb\u52a1\u4e2d\u4f7f\u7528"},"9.4.6 \u5728\u540e\u53f0\u4efb\u52a1\u4e2d\u4f7f\u7528"),(0,i.kt)("p",null,"\u7531\u4e8e ",(0,i.kt)("inlineCode",{parentName:"p"},"DbContext")," \u9ed8\u8ba4\u6ce8\u518c\u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"Scoped")," \u751f\u5b58\u5468\u671f\uff0c\u6240\u4ee5\u5728\u540e\u53f0\u4efb\u52a1\u4e2d\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"IServiceScopeFactory")," \u83b7\u53d6\u6240\u6709\u670d\u52a1\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'public class JobService : BackgroundService\n{\n // \u65e5\u5fd7\u5bf9\u8c61\n private readonly ILogger _logger;\n\n // \u670d\u52a1\u5de5\u5382\n private readonly IServiceScopeFactory _scopeFactory;\n public JobService(ILogger logger\n , IServiceScopeFactory scopeFactory)\n {\n _logger = logger;\n _scopeFactory = scopeFactory;\n }\n\n protected override Task ExecuteAsync(CancellationToken stoppingToken)\n {\n _logger.LogInformation("\u5199\u65e5\u5fd7~~");\n\n using (var scope = _scopeFactory.CreateScope())\n {\n var services = scope.ServiceProvider;\n\n // \u83b7\u53d6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\n var dbContext = Db.GetDbContext(services);\n\n // \u83b7\u53d6\u4ed3\u50a8\n var respository = Db.GetRepository(services);\n\n // \u89e3\u6790\u5176\u4ed6\u670d\u52a1\n var otherService = services.GetService();\n }\n\n return Task.CompletedTask;\n }\n}\n')),(0,i.kt)("admonition",{title:"\u6570\u636e\u5e93\u64cd\u4f5c\u6ce8\u610f",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f5c\u7528\u57df\u4e2d\u5bf9",(0,i.kt)("strong",{parentName:"p"},"\u6570\u636e\u5e93\u6709\u4efb\u4f55\u53d8\u66f4\u64cd\u4f5c"),"\uff0c\u9700\u624b\u52a8\u8c03\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"SaveChanges")," \u6216\u5e26 ",(0,i.kt)("inlineCode",{parentName:"p"},"Now")," \u7ed3\u5c3e\u7684\u65b9\u6cd5\u3002\u4e5f\u53ef\u4ee5\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Scoped.CreateUow(handler)")," \u4ee3\u66ff\u3002")),(0,i.kt)("h2",{id:"947-\u81ea\u5b9a\u4e49\u4ed3\u50a8"},"9.4.7 \u81ea\u5b9a\u4e49\u4ed3\u50a8"),(0,i.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\u6211\u4eec\u9700\u8981\u81ea\u5b9a\u4e49\u4ed3\u50a8\uff0c\u62d3\u5c55\u73b0\u6709\u7684\u4ed3\u50a8\u529f\u80fd\uff0c\u53ef\u53c2\u8003\u4ee5\u4e0b\u4ee3\u7801\uff08\u542b\u5b9a\u4f4d\u5668\u4ed3\u50a8\u548c\u9ed8\u8ba4\u4ed3\u50a8\u5b9e\u73b0\uff09"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'/// \n/// \u81ea\u5b9a\u4e49\u4ed3\u50a8\u63a5\u53e3\n/// \n/// \n/// \npublic interface IMyRepository : IPrivateRepository\n where TEntity : class, IPrivateEntity, new()\n where TDbContextLocator : class, IDbContextLocator\n{\n /// \n /// \u81ea\u5b9a\u4e49\u65b9\u6cd5\n /// \n void MyMethod();\n}\n\n/// \n/// \u81ea\u5b9a\u4e49\u4ed3\u50a8\u5b9e\u73b0\u7c7b\n/// \n/// \n/// \npublic class MyRepository : PrivateRepository, IMyRepository, IScoped\n where TEntity : class, IPrivateEntity, new()\n where TDbContextLocator : class, IDbContextLocator\n{\n /// \n /// \u5b9e\u73b0\u57fa\u7c7b\u6784\u9020\u51fd\u6570\n /// \n /// \n public MyRepository(IServiceProvider serviceProvider)\n : base(typeof(TDbContextLocator), serviceProvider)\n {\n }\n\n /// \n /// \u81ea\u5b9a\u4e49\u65b9\u6cd5\n /// \n public void MyMethod()\n {\n throw new System.NotImplementedException();\n }\n}\n\n/// \n/// \u9ed8\u8ba4\u6570\u636e\u5e93\u81ea\u5b9a\u4e49\u4ed3\u50a8\u63a5\u53e3\n/// \n/// \npublic interface IMyRepository : IMyRepository\n where TEntity : class, IPrivateEntity, new()\n{\n}\n\n/// \n/// \u9ed8\u8ba4\u6570\u636e\u5e93\u81ea\u5b9a\u4e49\u4ed3\u50a8\u5b9e\u73b0\n/// \n/// \npublic class MyRepository : MyRepository, IMyRepository, IScoped\n where TEntity : class, IPrivateEntity, new()\n{\n public MyRepository(IServiceProvider serviceProvider) : base(serviceProvider)\n {\n }\n}\n')),(0,i.kt)("h2",{id:"948-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.4.8 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/5b1379ef.a9febb22.js b/handbook/build/assets/js/5b1379ef.a9febb22.js new file mode 100644 index 00000000000..09c6cd6ad77 --- /dev/null +++ b/handbook/build/assets/js/5b1379ef.a9febb22.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[1041],{1386:function(u){u.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/5edfa151.b5d6edcd.js b/handbook/build/assets/js/5edfa151.b5d6edcd.js new file mode 100644 index 00000000000..46b0663f760 --- /dev/null +++ b/handbook/build/assets/js/5edfa151.b5d6edcd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[5809],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return m}});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=a,k=u["".concat(s,".").concat(m)]||u[m]||d[m]||i;return n?r.createElement(k,o(o({ref:t},c),{},{components:n})):r.createElement(k,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;pZack.EFCore.Batch \u4f7f\u7528",id:"992-zackefcorebatch-\u4f7f\u7528",level:2},{value:"9.9.2.1 \u5b89\u88c5\u5bf9\u5e94\u7684\u6570\u636e\u5e93 Nuget \u5305",id:"9921-\u5b89\u88c5\u5bf9\u5e94\u7684\u6570\u636e\u5e93-nuget-\u5305",level:3},{value:"9.9.2.2 \u6ce8\u518c\u5e76\u914d\u7f6e\u670d\u52a1",id:"9922-\u6ce8\u518c\u5e76\u914d\u7f6e\u670d\u52a1",level:3},{value:"9.9.2.3 \u57fa\u672c\u4f7f\u7528",id:"9923-\u57fa\u672c\u4f7f\u7528",level:3},{value:"9.9.3 EFCore.BulkExtensions \u4f7f\u7528",id:"993-efcorebulkextensions-\u4f7f\u7528",level:2},{value:"9.9.3.1 \u5e38\u89c1\u6279\u91cf\u64cd\u4f5c",id:"9931-\u5e38\u89c1\u6279\u91cf\u64cd\u4f5c",level:3},{value:"9.9.3.2 \u67e5\u8be2\u540e\u6279\u91cf\u64cd\u4f5c",id:"9932-\u67e5\u8be2\u540e\u6279\u91cf\u64cd\u4f5c",level:3},{value:"9.9.3.3 \u6279\u91cf\u64cd\u4f5c\u6027\u80fd",id:"9933-\u6279\u91cf\u64cd\u4f5c\u6027\u80fd",level:3},{value:"9.9.4 EFCore 7 \u5185\u7f6e\u6279\u91cf\u64cd\u4f5c",id:"994-efcore-7-\u5185\u7f6e\u6279\u91cf\u64cd\u4f5c",level:2},{value:"9.9.5 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"995-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],u={toc:d};function m(e){var t=e.components,n=(0,a.Z)(e,o);return(0,i.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"991-\u5173\u4e8e\u6279\u91cf\u64cd\u4f5c"},"9.9.1 \u5173\u4e8e\u6279\u91cf\u64cd\u4f5c"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u9ed8\u8ba4\u53ea\u63d0\u4f9b\u5c0f\u6570\u636e\uff08100 \u6761 \u4ee5\u5185\uff09\u6279\u91cf\u6570\u636e\u64cd\u4f5c\uff0c\u5982\u679c\u9700\u8981\u66f4\u5927\u7684\u6570\u636e\u6279\u91cf\u5904\u7406\uff0c\u63a8\u8350\u4f7f\u7528\u7b2c\u4e09\u65b9\u5305 ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/yangzhongke/Zack.EFCore.Batch"},"Zack.EFCore.Batch"),"\uff0c\u652f\u6301\u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u65e0\u7f1d\u8854\u63a5\u3002"),(0,i.kt)("h2",{id:"992-zackefcorebatch-\u4f7f\u7528"},"9.9.2 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Zack.EFCore.Batch")," \u4f7f\u7528"),(0,i.kt)("h3",{id:"9921-\u5b89\u88c5\u5bf9\u5e94\u7684\u6570\u636e\u5e93-nuget-\u5305"},"9.9.2.1 \u5b89\u88c5\u5bf9\u5e94\u7684\u6570\u636e\u5e93 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Nuget")," \u5305"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"MSSQL"),"\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"Zack.EFCore.Batch.MSSQL")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"MySql"),"\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"Zack.EFCore.Batch.MySQL.Pomelo")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Npgsql"),"\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"Zack.EFCore.Batch.Npgsql")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Oracle"),"\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"Zack.EFCore.Batch.Oracle")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Sqlite"),"\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"Zack.EFCore.Batch.Sqlite"))),(0,i.kt)("h3",{id:"9922-\u6ce8\u518c\u5e76\u914d\u7f6e\u670d\u52a1"},"9.9.2.2 \u6ce8\u518c\u5e76\u914d\u7f6e\u670d\u52a1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,5}",showLineNumbers:!0,"":!0,"{3,5}":!0},"services.AddDatabaseAccessor(options =>\n{\n options.AddDbPool(providerName: default, optionBuilder: (services, opt) => // \u5982\u679c\u662f v3.7.11 \u4e4b\u524d\uff0c\u4f7f\u7528 opt =>\n {\n opt.UseBatchEF_Sqlite(); // SQlite \u6570\u636e\u5e93\u5305\n });\n});\n")),(0,i.kt)("h3",{id:"9923-\u57fa\u672c\u4f7f\u7528"},"9.9.2.3 \u57fa\u672c\u4f7f\u7528"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u6279\u91cf\u66f4\u65b0\nawait repository.Context.BatchUpdate()\n .Set(b => b.Price, b => b.Price + 3)\n .Set(b => b.Title, b => s)\n .Set(b => b.AuthorName,b=>b.Title.Substring(3,2)+b.AuthorName.ToUpper())\n .Set(b => b.PubTime, b => DateTime.Now)\n .Where(b => b.Id > n || b.AuthorName.StartsWith("Zack"))\n .ExecuteAsync();\n\n// \u6279\u91cf\u5220\u9664\nawait repository.Context.DeleteRangeAsync(b => b.Price > n || b.AuthorName == "zack yang");\n')),(0,i.kt)("h2",{id:"993-efcorebulkextensions-\u4f7f\u7528"},"9.9.3 ",(0,i.kt)("inlineCode",{parentName:"h2"},"EFCore.BulkExtensions")," \u4f7f\u7528"),(0,i.kt)("p",null,"\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"Nuget")," \u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},"EFCore.BulkExtensions")," \u5305\u5373\u53ef\u3002"),(0,i.kt)("h3",{id:"9931-\u5e38\u89c1\u6279\u91cf\u64cd\u4f5c"},"9.9.3.1 \u5e38\u89c1\u6279\u91cf\u64cd\u4f5c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u6279\u91cf\u63d2\u5165\nrepository.Context.BulkInsert(entitiesList);\nrepository.Context.BulkInsertAsync(entitiesList);\n\n// \u6279\u91cf\u66f4\u65b0\nrepository.Context.BulkUpdate(entitiesList);\nrepository.Context.BulkUpdateAsync(entitiesList);\n\n// \u6279\u91cf\u5220\u9664\nrepository.Context.BulkDelete(entitiesList);\nrepository.Context.BulkDeleteAsync(entitiesList);\n\n// \u6279\u91cf\u63d2\u5165\u6216\u66f4\u65b0\nrepository.Context.BulkInsertOrUpdate(entitiesList);\nrepository.Context.BulkInsertOrUpdateAsync(entitiesList);\n\n// \u6279\u91cf\u63d2\u5165\u6216\u66f4\u65b0\u6216\u5220\u9664\nrepository.Context.BulkInsertOrUpdateOrDelete(entitiesList);\nrepository.Context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);\n\n// \u6279\u91cf\u8bfb\u53d6\u591a\u4e2a\u5b9e\u4f53\nrepository.Context.BulkRead(entitiesList);\nrepository.Context.BulkReadAsync(entitiesList);\n\n// \u6279\u91cf\u6e05\u7a7a\u8868\uff08\u614e\u7528\uff01\uff01\uff01\uff01\uff01\uff09\nrepository.Context.Truncate();\nrepository.Context.TruncateAsync();\n")),(0,i.kt)("h3",{id:"9932-\u67e5\u8be2\u540e\u6279\u91cf\u64cd\u4f5c"},"9.9.3.2 \u67e5\u8be2\u540e\u6279\u91cf\u64cd\u4f5c"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u6839\u636e\u6761\u4ef6\u6279\u91cf\u5220\u9664\nrepository.Where(a => a.ItemId > 500).BatchDelete();\nawait repository.Where(a => a.ItemId > 500).BatchDeleteAsync();\n\n// \u6839\u636e\u6761\u4ef6\u6279\u91cf\u66f4\u65b0\nrepository.Where(a => a.ItemId <= 500).BatchUpdate(a => new Item { Quantity = a.Quantity + 100 });\nrepository.Where(a => a.ItemId <= 500).BatchUpdate(new Item { Description = "Updated" });\nawait repository.Where(a => a.ItemId <= 500).BatchUpdateAsync(new Item { Description = "Updated" });\n\n// \u6279\u91cf\u66f4\u65b0\u6307\u5b9a\u5217\nvar updateColumns = new List { nameof(Item.Quantity) };\nvar q = repository.Where(a => a.ItemId <= 500);\nint affected = q.BatchUpdate(new Item { Description = "Updated" }, updateColumns);\n')),(0,i.kt)("h3",{id:"9933-\u6279\u91cf\u64cd\u4f5c\u6027\u80fd"},"9.9.3.3 \u6279\u91cf\u64cd\u4f5c\u6027\u80fd"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Operations\\Rows"),(0,i.kt)("th",{parentName:"tr",align:"right"},"100,000 EF"),(0,i.kt)("th",{parentName:"tr",align:"right"},"100,000 EFBulk"),(0,i.kt)("th",{parentName:"tr",align:"right"},"1,000,000 EFBulk"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Insert"),(0,i.kt)("td",{parentName:"tr",align:"right"},"38.98 s"),(0,i.kt)("td",{parentName:"tr",align:"right"},"2.10 s"),(0,i.kt)("td",{parentName:"tr",align:"right"},"17.99 s")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Update"),(0,i.kt)("td",{parentName:"tr",align:"right"},"109.25 s"),(0,i.kt)("td",{parentName:"tr",align:"right"},"3.96 s"),(0,i.kt)("td",{parentName:"tr",align:"right"},"31.45 s")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Delete"),(0,i.kt)("td",{parentName:"tr",align:"right"},"7.26 s"),(0,i.kt)("td",{parentName:"tr",align:"right"},"2.04 s"),(0,i.kt)("td",{parentName:"tr",align:"right"},"12.18 s")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"-----------------"),(0,i.kt)("td",{parentName:"tr",align:"right"},"------------"),(0,i.kt)("td",{parentName:"tr",align:"right"},"----------------"),(0,i.kt)("td",{parentName:"tr",align:"right"},"------------------")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("strong",{parentName:"td"},"Together")),(0,i.kt)("td",{parentName:"tr",align:"right"},"70.70 s"),(0,i.kt)("td",{parentName:"tr",align:"right"},"5.88 s"),(0,i.kt)("td",{parentName:"tr",align:"right"},"56.84 s")))),(0,i.kt)("h2",{id:"994-efcore-7-\u5185\u7f6e\u6279\u91cf\u64cd\u4f5c"},"9.9.4 ",(0,i.kt)("inlineCode",{parentName:"h2"},"EFCore 7")," \u5185\u7f6e\u6279\u91cf\u64cd\u4f5c"),(0,i.kt)("admonition",{title:"\u975e\u5fae\u8f6f\u652f\u6301\u6570\u636e\u5e93\u9002\u914d\u95ee\u9898",type:"caution"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528\u7684\u662f\u975e\u5fae\u8f6f\u652f\u6301\u7684\u6570\u636e\u5e93\uff0c\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"Oracle"),"\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"MySQL"),"\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"PostgreSQL")," \u7b49\uff0c\u53ef\u80fd\u9002\u914d ",(0,i.kt)("inlineCode",{parentName:"p"},"EFCore 7")," \u4e0d\u53ca\u65f6\u4f1a\u51fa\u73b0\u627e\u4e0d\u5230\u65b9\u6cd5\u5f02\u5e38\u3002")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-7.0/whatsnew#executeupdate-and-executedelete-bulk-updates"},"https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-7.0/whatsnew#executeupdate-and-executedelete-bulk-updates")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,7}",showLineNumbers:!0,"{2,7}":!0},'// \u6279\u91cf\u5220\u9664\nawait repository.Entities.ExecuteDeleteAsync();\nawait repository.Entities.Where(t => t.Text.Contains(".NET")).ExecuteDeleteAsync();\nawait repository.Entities.Where(t => t.Posts.All(e => e.PublishedOn.Year < 2022)).ExecuteDeleteAsync();\n\n// \u6279\u91cf\u66f4\u65b0\nawait repository.Entities.ExecuteUpdateAsync(\n s => s.SetProperty(b => b.Name, b => b.Name + " *Featured!*"));\n\nawait repository.Entities\n .Where(p => p.PublishedOn.Year < 2022)\n .ExecuteUpdateAsync(s => s\n .SetProperty(b => b.Title, b => b.Title + " (" + b.PublishedOn.Year + ")")\n .SetProperty(b => b.Content, b => b.Content + " ( This content was published in " + b.PublishedOn.Year + ")"));\n\nawait repository.Entities\n .Where(t => t.Posts.All(e => e.PublishedOn.Year < 2022))\n .ExecuteUpdateAsync(s => s.SetProperty(t => t.Text, t => t.Text + " (old)"));\n')),(0,i.kt)("h2",{id:"995-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.9.5 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,i.kt)("hr",null),(0,i.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,i.kt)("inlineCode",{parentName:"p"},"EFCore.BulkExtensions")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/borisdj/EFCore.BulkExtensions"},"EFCore.BulkExtensions \u5f00\u6e90\u4ed3\u5e93"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/5edfff3a.ed3ede64.js b/handbook/build/assets/js/5edfff3a.ed3ede64.js new file mode 100644 index 00000000000..6128e447d52 --- /dev/null +++ b/handbook/build/assets/js/5edfff3a.ed3ede64.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[318],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return s}});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),d=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=d(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),m=d(n),s=i,k=m["".concat(l,".").concat(s)]||m[s]||u[s]||a;return n?r.createElement(k,o(o({ref:t},c),{},{components:n})):r.createElement(k,o({ref:t},c))}));function s(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=m;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:i,o[1]=p;for(var d=2;dWeb \u9879\u76ee",id:"21-\u521b\u5efa-web-\u9879\u76ee",level:2},{value:"2.1.1 \u521b\u5efa ASP.NET Core Web \u5e94\u7528\u7a0b\u5e8f",id:"211-\u521b\u5efa-aspnet-core-web-\u5e94\u7528\u7a0b\u5e8f",level:3},{value:"2.2 \u6dfb\u52a0 Furion \u4f9d\u8d56\u5305",id:"22-\u6dfb\u52a0-furion-\u4f9d\u8d56\u5305",level:2},{value:"2.3 Furion \u57fa\u672c\u914d\u7f6e",id:"23-furion-\u57fa\u672c\u914d\u7f6e",level:2},{value:"2.3.1 Program.cs \u6dfb\u52a0 Inject()",id:"231-programcs-\u6dfb\u52a0-inject",level:3},{value:"2.4 \u542f\u52a8\u6d4f\u89c8\u5668",id:"24-\u542f\u52a8\u6d4f\u89c8\u5668",level:2},{value:"2.5 WebApplication \u8bf4\u660e \ud83c\udf83",id:"25-webapplication-\u8bf4\u660e-",level:2}],s={toc:m};function k(e){var t=e.components,n=(0,i.Z)(e,p);return(0,a.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{title:"\u63a8\u8350\u4f7f\u7528\u811a\u624b\u67b6",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u5b98\u65b9\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u65b9\u4fbf\u7684\u811a\u624b\u67b6\uff0c\u53ef\u4ee5\u5feb\u901f\u7684\u521b\u5efa\u591a\u5c42\u67b6\u6784\u9879\u76ee\u3002"),(0,a.kt)("p",{parentName:"admonition"},"\u63a8\u8350\u4f7f\u7528 \u300a",(0,a.kt)("a",{parentName:"p",href:"/docs/template"},"2.2 \u5b98\u65b9\u811a\u624b\u67b6"),"\u300b\u4ee3\u66ff\u672c\u7ae0\u8282\u529f\u80fd\u3002")),(0,a.kt)("admonition",{title:"\u5165\u95e8\u6761\u4ef6",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u5bf9 ",(0,a.kt)("inlineCode",{parentName:"p"},".NET Core/ASP.NET Core")," \u6709\u4e00\u5b9a\u57fa\u7840\u4e86\u89e3\uff0c\u8fd8\u672a\u63a5\u89e6\u7684\u53ef\u5148\u770b ",(0,a.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/?view=aspnetcore-6.0&tabs=windows"},"\u3010ASP.NET Core \u57fa\u7840\u3011"))),(0,a.kt)("h2",{id:"21-\u521b\u5efa-web-\u9879\u76ee"},"2.1 \u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"h2"},"Web")," \u9879\u76ee"),(0,a.kt)("admonition",{title:"\u73af\u5883\u8981\u6c42",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e4b\u524d\u5148\u786e\u4fdd\u5b89\u88c5\u4e86\u6700\u65b0\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},".NET 6 SDK")," \u5e76\u5b89\u88c5 ",(0,a.kt)("inlineCode",{parentName:"p"},"Visual Studio 2022")," \u6700\u65b0\u7248\u3002")),(0,a.kt)("h3",{id:"211-\u521b\u5efa-aspnet-core-web-\u5e94\u7528\u7a0b\u5e8f"},"2.1.1 \u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"h3"},"ASP.NET Core Web \u5e94\u7528\u7a0b\u5e8f")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u6253\u5f00 ",(0,a.kt)("inlineCode",{parentName:"li"},"Visual Studio 2022")," \u5e76\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"li"},"Web")," \u9879\u76ee")),(0,a.kt)("img",{src:(0,o.Z)("img/rmn1.png")}),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u914d\u7f6e\u9879\u76ee\u540d\u79f0")),(0,a.kt)("img",{src:(0,o.Z)("img/rmn2.png")}),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u9009\u62e9 ",(0,a.kt)("inlineCode",{parentName:"li"},"WebAPI")," \u9879\u76ee")),(0,a.kt)("img",{src:(0,o.Z)("img/rmn3.png")}),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u5df2\u7ecf\u5185\u7f6e\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"Swagger")," \u89c4\u8303\u5316\u5e93\uff0c\u6240\u4ee5\u521b\u5efa\u65f6",(0,a.kt)("strong",{parentName:"p"},"\u65e0\u9700\u52fe\u9009")," ",(0,a.kt)("inlineCode",{parentName:"p"},"Enable OpenAPI support")," \u9009\u9879\u3002\u5426\u5219\u63d0\u793a\u7248\u672c\u4e0d\u4e00\u81f4\u4ea7\u751f\u51b2\u7a81\u3002")),(0,a.kt)("h2",{id:"22-\u6dfb\u52a0-furion-\u4f9d\u8d56\u5305"},"2.2 \u6dfb\u52a0 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Furion")," \u4f9d\u8d56\u5305"),(0,a.kt)("img",{src:(0,o.Z)("img/rmn4.png")}),(0,a.kt)("h2",{id:"23-furion-\u57fa\u672c\u914d\u7f6e"},"2.3 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Furion")," \u57fa\u672c\u914d\u7f6e"),(0,a.kt)("h3",{id:"231-programcs-\u6dfb\u52a0-inject"},"2.3.1 ",(0,a.kt)("inlineCode",{parentName:"h3"},"Program.cs")," \u6dfb\u52a0 ",(0,a.kt)("inlineCode",{parentName:"h3"},"Inject()")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,11}",showLineNumbers:!0,"":!0,"{1,3,11}":!0},"var builder = WebApplication.CreateBuilder(args).Inject();\n\nbuilder.Services.AddControllers().AddInject();\n\nvar app = builder.Build();\n\napp.UseHttpsRedirection();\n\napp.UseAuthorization();\n\napp.UseInject();\n\napp.MapControllers();\n\napp.Run();\n")),(0,a.kt)("admonition",{title:"\u5c0f\u63d0\u9192",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c ",(0,a.kt)("inlineCode",{parentName:"p"},"app.UseInject()")," \u4e0d\u8f93\u5165\u53c2\u6570\uff0c\u5219\u9ed8\u8ba4\u5730\u5740\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"/api"),"\uff0c\u5982\u679c\u8f93\u5165 ",(0,a.kt)("inlineCode",{parentName:"p"},"string.Empty")," \u5219\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"/")," \u76ee\u5f55\u3002\u5982\u679c\u8f93\u5165\u4efb\u610f\u5b57\u7b26\u4e32\uff0c\u5219\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"/\u4efb\u610f\u5b57\u7b26\u4e32")," \u76ee\u5f55\u3002")),(0,a.kt)("h2",{id:"24-\u542f\u52a8\u6d4f\u89c8\u5668"},"2.4 \u542f\u52a8\u6d4f\u89c8\u5668"),(0,a.kt)("p",null,"\u542f\u52a8\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u3002"),(0,a.kt)("img",{src:(0,o.Z)("img/rmn5.png")}),(0,a.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"Visual Studio 2022")," \u521b\u5efa\u7684\u9879\u76ee\u4f1a\u81ea\u52a8\u914d\u7f6e\u4e86\u542f\u52a8\u9875\uff0c\u5982\u679c\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"F5")," \u8fd0\u884c\uff0c\u53ef\u80fd\u4e0d\u4f1a\u81ea\u52a8\u6253\u5f00\u9996\u9875\uff0c\u8fd9\u65f6\u5019\u6211\u4eec\u53ea\u9700\u8981\u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"p"},"launchSettings.json")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"launchUrl")," \u5373\u53ef\uff1a"),(0,a.kt)("img",{src:(0,o.Z)("img/rmn6.png")})),(0,a.kt)("h2",{id:"25-webapplication-\u8bf4\u660e-"},"2.5 ",(0,a.kt)("inlineCode",{parentName:"h2"},"WebApplication")," \u8bf4\u660e \ud83c\udf83"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},".NET6")," \u7248\u672c\u65b0\u589e\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"WebApplication")," \u5bf9\u8c61\uff0c\u5982\u679c\u6211\u4eec\u9700\u8981\u6ce8\u518c\u670d\u52a1\uff0c\u53ea\u9700\u8981\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"builder.Services.AddXXX()")," \u5373\u53ef\u3002\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},"var builder = WebApplication.CreateBuilder(args).Inject();\n\nbuilder.Services.AddControllers().AddInject();\nbuilder.Services.AddRemoteRequest();\n")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/5f6c9278.2bb9e222.js b/handbook/build/assets/js/5f6c9278.2bb9e222.js new file mode 100644 index 00000000000..14bf04f2d31 --- /dev/null +++ b/handbook/build/assets/js/5f6c9278.2bb9e222.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[732],{3905:function(e,n,t){t.d(n,{Zo:function(){return m},kt:function(){return c}});var r=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function l(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=r.createContext({}),u=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},m=function(e){var n=u(e.components);return r.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,i=e.mdxType,a=e.originalType,s=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=u(t),c=i,g=d["".concat(s,".").concat(c)]||d[c]||p[c]||a;return t?r.createElement(g,l(l({ref:n},m),{},{components:t})):r.createElement(g,l({ref:n},m))}));function c(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var a=t.length,l=new Array(a);l[0]=d;var o={};for(var s in n)hasOwnProperty.call(n,s)&&(o[s]=n[s]);o.originalType=e,o.mdxType="string"==typeof e?e:i,l[1]=o;for(var u=2;uIViewEngine \u63a5\u53e3",id:"175-iviewengine-\u63a5\u53e3",level:2},{value:"17.6 \u5b57\u7b26\u4e32\u6a21\u677f\u66ff\u6362\u5f15\u64ce",id:"176-\u5b57\u7b26\u4e32\u6a21\u677f\u66ff\u6362\u5f15\u64ce",level:2},{value:"17.7 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"177-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:p};function c(e){var n=e.components,t=(0,i.Z)(e,l);return(0,a.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"171-\u5173\u4e8e\u89c6\u56fe\u5f15\u64ce"},"17.1 \u5173\u4e8e\u89c6\u56fe\u5f15\u64ce"),(0,a.kt)("p",null,"\u89c6\u56fe\u5f15\u64ce\u8d1f\u8d23\u6839\u636e\u89c6\u56fe\u6a21\u677f\u521b\u5efa HTML\u3002\u89c6\u56fe\u901a\u5e38\u662f HTML \u548c\u7f16\u7a0b\u8bed\u8a00\u7684\u67d0\u79cd\u6df7\u5408\u3002\u652f\u6301\u53d8\u91cf\u5b9a\u4e49\u3001\u65b9\u6cd5\u8c03\u7528\u53ca\u903b\u8f91\u7f16\u5199\u3002"),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u5e95\u5c42\u96c6\u6210\u4e86\u5fae\u8f6f\u63d0\u4f9b\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Razor")," \u89c6\u56fe\u5f15\u64ce\u7ec4\u4ef6\u5e76\u63d0\u4f9b\u66f4\u52a0\u7075\u6d3b\u65b9\u4fbf\u7684\u8bed\u6cd5\u7cd6\u3002"),(0,a.kt)("h2",{id:"172-\u89c6\u56fe\u5f15\u64ce\u4f5c\u7528"},"17.2 \u89c6\u56fe\u5f15\u64ce\u4f5c\u7528"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"strong"},"ASP.NET Core")," \u5b8c\u6574\u7684 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Razor")," \u8bed\u6cd5")),(0,a.kt)("li",{parentName:"ul"},"\u6839\u636e\u4e0d\u540c\u7684\u6570\u636e\u7f16\u8bd1\u6a21\u677f\u4ea7\u751f\u4e0d\u540c\u7684\u8f93\u51fa"),(0,a.kt)("li",{parentName:"ul"},"\u5b9e\u73b0\u5f3a\u5927\u7684\u63d2\u4ef6\u5316\u673a\u5236"),(0,a.kt)("li",{parentName:"ul"},"\u5b9e\u73b0\u5168\u7ad9\u9875\u9762\u9759\u6001\u5316"),(0,a.kt)("li",{parentName:"ul"},"\u53ef\u4ee5\u7528\u4f5c\u90ae\u4ef6\u6a21\u677f\u3001\u77ed\u4fe1\u6a21\u677f\u3001\u4f18\u60e0\u5238\u4fe1\u606f\u6a21\u677f\u7b49")),(0,a.kt)("h2",{id:"173-\u57fa\u7840\u4f7f\u7528"},"17.3 \u57fa\u7840\u4f7f\u7528"),(0,a.kt)("h3",{id:"1731-\u6ce8\u518c\u670d\u52a1"},"17.3.1 \u6ce8\u518c\u670d\u52a1"),(0,a.kt)("p",null,"\u4f7f\u7528\u4e4b\u524d\u9700\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u6ce8\u518c ",(0,a.kt)("inlineCode",{parentName:"p"},"\u89c6\u56fe\u5f15\u64ce\u670d\u52a1"),"\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},"public void ConfigureServices(IServiceCollection services)\n{\n services.AddViewEngine();\n}\n")),(0,a.kt)("h3",{id:"1732-\u4f7f\u7528\u65b9\u5f0f"},"17.3.2 \u4f7f\u7528\u65b9\u5f0f"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u6784\u9020\u51fd\u6570\u6ce8\u5165 ",(0,a.kt)("inlineCode",{parentName:"li"},"IViewEngine"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,9,12}",showLineNumbers:!0,"":!0,"{2,9,12}":!0},'using Furion.DynamicApiController;\nusing Furion.ViewEngine;\n\nnamespace Furion.Application\n{\n public class ViewEngineService : IDynamicApiController\n {\n private readonly IViewEngine _viewEngine;\n public ViewEngineService(IViewEngine viewEngine)\n {\n _viewEngine = viewEngine;\n var result = _viewEngine.RunCompile("Hello @Model.Name", new { Name = "Furion" });\n }\n }\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5b57\u7b26\u4e32\u65b9\u5f0f")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var result = "Hello @Model.Name".RunCompile(new { Name = "Furion" });\n')),(0,a.kt)("h3",{id:"1733-\u5f31\u7c7b\u578b\u6a21\u677f"},"17.3.3 \u5f31\u7c7b\u578b\u6a21\u677f"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var result = _viewEngine.RunCompile("Hello @Model.Name", new { Name = "Furion" });\n')),(0,a.kt)("p",null,"\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"showLineNumbers",showLineNumbers:!0},"Hello Furion\n")),(0,a.kt)("p",null,"\u652f\u6301\u5f02\u6b65 ",(0,a.kt)("inlineCode",{parentName:"p"},"RunCompileAsync")),(0,a.kt)("h3",{id:"1734-\u5f3a\u7c7b\u578b\u6a21\u677f"},"17.3.4 \u5f3a\u7c7b\u578b\u6a21\u677f"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var result = _viewEngine.RunCompile(@"\nHello @Model.Name\n@foreach(var item in Model.Items)\n{\n

@item

\n}\n", new TestModel\n{\n Name = "Furion",\n Items = new[] { 3, 1, 2 }\n});\n')),(0,a.kt)("p",null,"\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"showLineNumbers",showLineNumbers:!0},"Hello Furion\n

3

\n

1

\n

2

\n")),(0,a.kt)("p",null,"\u652f\u6301\u5f02\u6b65 ",(0,a.kt)("inlineCode",{parentName:"p"},"RunCompileAsync")),(0,a.kt)("h3",{id:"1735-\u9ad8\u6027\u80fd\u6a21\u677f\u7f13\u5b58-"},"17.3.5 \u9ad8\u6027\u80fd\u6a21\u677f\u7f13\u5b58 \ud83e\udd47"),(0,a.kt)("p",null,"\u7531\u4e8e\u6a21\u677f\u7f16\u8bd1\u9700\u8981\u6d88\u8017\u5927\u91cf\u7684\u6027\u80fd\uff0c\u6240\u4ee5\u5efa\u8bae\u4f7f\u7528\u5e26 ",(0,a.kt)("inlineCode",{parentName:"p"},"FromCached")," \u7ed3\u5c3e\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"RunCompileFromCached")," \u66ff\u4ee3\u3002\u8c03\u7528\u8be5\u65b9\u6cd5\u540e\u4f1a\u81ea\u52a8\u5c06\u6a21\u677f\u7f16\u8bd1\u6210 ",(0,a.kt)("inlineCode",{parentName:"p"},".dll")," \u4ee5\u4fbf\u4e0b\u6b21\u4f7f\u7528\u3002\u51cf\u5c11\u7b2c\u4e8c\u6b21\u4e4b\u540e\u4f7f\u7528\u6a21\u677f\u7684\u6027\u80fd\u635f\u8017\u3002"),(0,a.kt)("p",null,"\u5982\uff0c\u5f3a\u7c7b\u578b\u6a21\u677f\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var result = _viewEngine.RunCompileFromCached(@"\nHello @Model.Name\n@foreach(var item in Model.Items)\n{\n

@item

\n}\n", new TestModel\n{\n Name = "Furion",\n Items = new[] { 3, 1, 2 }\n});\n')),(0,a.kt)("p",null,"\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"showLineNumbers",showLineNumbers:!0},"Hello Furion\n

3

\n

1

\n

2

\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u8c03\u7528 ",(0,a.kt)("inlineCode",{parentName:"strong"},"RunCompileFromCached")," \u65b9\u6cd5\u4e4b\u540e\u5c06\u4f1a\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"strong"},"MD5")," \u52a0\u5bc6\u6a21\u677f\u5e76\u751f\u6210 ",(0,a.kt)("inlineCode",{parentName:"strong"},"MD5"),"\u5b57\u7b26\u4e32\u7684 ",(0,a.kt)("inlineCode",{parentName:"strong"},".dll")," \u5b58\u653e\u5728\u7f51\u7ad9\u6839\u76ee\u5f55\u4e0b\u7684 ",(0,a.kt)("inlineCode",{parentName:"strong"},"templates")," \u76ee\u5f55\u4e2d\u3002\u53ea\u8981\u6a21\u677f\u5185\u5bb9\u4e0d\u53d8\uff0c\u6570\u636e\u53d1\u751f\u6539\u53d8\u4e5f\u4e0d\u4f1a\u91cd\u65b0\u7f16\u8bd1\u6a21\u677f\u3002\u8fd9\u6837\u5927\u5927\u7684\u63d0\u9ad8\u4e86\u9996\u6b21\u4e4b\u540e\u7684\u6027\u80fd\u3002")),(0,a.kt)("p",null,"\u5982\uff0c\u4f20\u5165\u65b0\u7684\u6570\u636e\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {10}",showLineNumbers:!0,"":!0,"{10}":!0},'var result = _viewEngine.RunCompileFromCached(@"\nHello @Model.Name\n@foreach(var item in Model.Items)\n{\n

@item

\n}\n", new TestModel\n{\n Name = "Furion",\n Items = new[] { 5,6,7,8 }\n});\n')),(0,a.kt)("p",null,"\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"showLineNumbers",showLineNumbers:!0},"Hello Furion\n

5

\n

6

\n

7

\n

8

\n")),(0,a.kt)("p",null,"\u6a21\u677f\u4e0d\u518d\u91cd\u65b0\u7f16\u8bd1\uff0c\u53ea\u662f\u91cd\u65b0\u66ff\u6362\u6570\u636e\u3002"),(0,a.kt)("h2",{id:"174-\u9ad8\u7ea7\u7528\u6cd5"},"17.4 \u9ad8\u7ea7\u7528\u6cd5"),(0,a.kt)("p",null,"\u9ad8\u7ea7\u7528\u6cd5\u652f\u6301\u5c06\u7279\u5b9a\u7a0b\u5e8f\u96c6\u3001\u7279\u5b9a\u547d\u540d\u7a7a\u95f4\u3001\u7279\u5b9a\u7c7b\u578b\u5f15\u5165\u5230\u6a21\u677f\u4e2d\u4f7f\u7528\u3002"),(0,a.kt)("h3",{id:"1741-\u6dfb\u52a0\u7a0b\u5e8f\u96c6"},"17.4.1 \u6dfb\u52a0\u7a0b\u5e8f\u96c6"),(0,a.kt)("p",null,"\u6bd4\u5982\u8fd9\u91cc\u6dfb\u52a0 ",(0,a.kt)("inlineCode",{parentName:"p"},"System.IO")," \u7a0b\u5e8f\u96c6\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var result = _viewEngine.RunCompileFromCached(@"
@System.IO.Path.Combine(""Furion"", ""ViewEngine"")
", builderAction: builder =>\n {\n builder.AddAssemblyReferenceByName("System.IO");\n });\n')),(0,a.kt)("p",null,"\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"showLineNumbers",showLineNumbers:!0},"
Furion\\\\ViewEngine
\n")),(0,a.kt)("p",null,"\u53e6\u5916\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u591a\u79cd\u65b9\u5f0f\u52a0\u8f7d\u7a0b\u5e8f\u96c6\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'builder.AddAssemblyReferenceByName("System.Security"); // \u901a\u8fc7\u540d\u79f0\nbuilder.AddAssemblyReference(typeof(System.IO.File)); // \u901a\u8fc7\u7c7b\u578b\nbuilder.AddAssemblyReference(Assembly.Load("source")); // \u901a\u8fc7\u5143\u6570\u636e\u5f15\u7528\n')),(0,a.kt)("h3",{id:"1742-\u6dfb\u52a0\u547d\u540d\u7a7a\u95f4"},"17.4.2 \u6dfb\u52a0\u547d\u540d\u7a7a\u95f4"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var result = _viewEngine.RunCompileFromCached(@"
@Path.Combine(""Furion"", ""ViewEngine"")
", builderAction: builder =>\n {\n builder.AddUsing("System.IO");\n builder.AddAssemblyReferenceByName("System.IO");\n });\n')),(0,a.kt)("p",null,"\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"showLineNumbers",showLineNumbers:!0},"
Furion\\\\ViewEngine
\n")),(0,a.kt)("p",null,"\u4e5f\u652f\u6301\u52a0\u5165\u591a\u4e2a ",(0,a.kt)("inlineCode",{parentName:"p"},"using"),"\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'builder.AddUsing("System.IO");\nbuilder.AddUsing("Furion");\n')),(0,a.kt)("h3",{id:"1743-\u5b9a\u4e49\u6a21\u677f\u65b9\u6cd5"},"17.4.3 \u5b9a\u4e49\u6a21\u677f\u65b9\u6cd5"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var result = _viewEngine.RunCompileFromCached(@"\n\n @{ RecursionTest(3); }\n\n\n@{\n void RecursionTest(int level)\n {\n if (level <= 0)\n {\n return;\n }\n\n
LEVEL: @level
\n @{ RecursionTest(level - 1); }\n }\n}\n");\n')),(0,a.kt)("p",null,"\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"showLineNumbers",showLineNumbers:!0},"\n
LEVEL: 3
\n
LEVEL: 2
\n
LEVEL: 1
\n\n")),(0,a.kt)("h3",{id:"1744-\u8c03\u7528\u7c7b\u65b9\u6cd5"},"17.4.4 \u8c03\u7528\u7c7b\u65b9\u6cd5"),(0,a.kt)("p",null,"\u5b9a\u4e49 ",(0,a.kt)("inlineCode",{parentName:"p"},"CustomModel")," \u7c7b\u5e76\u7ee7\u627f ",(0,a.kt)("inlineCode",{parentName:"p"},"ViewEngineModel")," \u57fa\u7c7b"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},'public class CustomModel : ViewEngineModel\n{\n public int A { get; set; }\n public string B { get; set; }\n public string Decorator(object value)\n {\n return "-=" + value + "=-";\n }\n}\n')),(0,a.kt)("p",null,"\u5728\u6a21\u677f\u4e2d\u8c03\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"Decorator(value)")," \u65b9\u6cd5\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var content = @"Hello @A, @B, @Decorator(123)";\n\nvar template = _viewEngine.Compile(content);\n\nvar result = template.Run(instance =>\n{\n instance.A = 10;\n instance.B = "Alex";\n});\n')),(0,a.kt)("p",null,"\u7ed3\u679c\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-html",metastring:"showLineNumbers",showLineNumbers:!0},"Hello 10, Alex, -=123=-\n")),(0,a.kt)("h2",{id:"175-iviewengine-\u63a5\u53e3"},"17.5 ",(0,a.kt)("inlineCode",{parentName:"h2"},"IViewEngine")," \u63a5\u53e3"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"IViewEngine")," \u63d0\u4f9b\u4e86\u7b80\u5355\u65b9\u4fbf\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"RunCompile")," \u65b9\u6cd5\uff0c\u4e5f\u63d0\u4f9b\u4e86\u6700\u539f\u59cb\u5316\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Compile")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"Run")," \u65b9\u6cd5\u3002"),(0,a.kt)("p",null,"\u901a\u8fc7\u539f\u59cb\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Compile")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"Run")," \u65b9\u6cd5\u53ef\u4ee5\u5b9e\u73b0\u5f88\u591a\u590d\u6742\u7684\u903b\u8f91\u548c\u81ea\u5b9a\u4e49\u6307\u4ee4\u96c6\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'/// \n/// \u7f16\u8bd1\u6a21\u677f\n/// \n/// \n/// \n/// \nIViewEngineTemplate Compile(string content, Action builderAction = null);\n/// \n/// \u7f16\u8bd1\u6a21\u677f\n/// \n/// \n/// \n/// \nTask CompileAsync(string content, Action builderAction = null);\n/// \n/// \u7f16\u8bd1\u6a21\u677f\n/// \n/// \n/// \n/// \n/// \nIViewEngineTemplate Compile(string content, Action builderAction = null)\n where T : IViewEngineModel;\n/// \n/// \u7f16\u8bd1\u6a21\u677f\n/// \n/// \n/// \n/// \n/// \nTask> CompileAsync(string content, Action builderAction = null)\n where T : IViewEngineModel;\n')),(0,a.kt)("h2",{id:"176-\u5b57\u7b26\u4e32\u6a21\u677f\u66ff\u6362\u5f15\u64ce"},"17.6 \u5b57\u7b26\u4e32\u6a21\u677f\u66ff\u6362\u5f15\u64ce"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u9664\u4e86\u5185\u7f6e\u89c6\u56fe\u5f15\u64ce\u4e4b\u5916\uff0c\u8fd8\u652f\u6301\u4ee5\u4e0b\u51e0\u79cd\u6a21\u677f\u66ff\u6362\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u63d0\u4f9b\u6570\u636e\u6a21\u677f\u65b9\u5f0f\nvar str = "\u6211\u53eb{name}".Render(new Dictionary{ {"name", "Furion"} });\nvar str = "\u6211\u53eb{Name}".Render(new { Name = "Furion" });\nvar str = "\u6211\u53eb{Detail.Name}".Render(new { Detail = new { Name = "Furoin" } });\n\n// \u4ece\u914d\u7f6e\u8bfb\u53d6\u65b9\u5f0f\nvar str = "\u6211\u53eb#(Furion:Address)".Render();\n')),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "Furion": {\n "Address": "https://www.furion.icu"\n }\n}\n')),(0,a.kt)("h2",{id:"177-\u53cd\u9988\u4e0e\u5efa\u8bae"},"17.7 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/612f2d9e.91e75c34.js b/handbook/build/assets/js/612f2d9e.91e75c34.js new file mode 100644 index 00000000000..511c31bd0d8 --- /dev/null +++ b/handbook/build/assets/js/612f2d9e.91e75c34.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2114],{3905:function(t,e,n){n.d(e,{Zo:function(){return c},kt:function(){return w}});var i=n(7294);function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);e&&(i=i.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,i)}return n}function a(t){for(var e=1;e=0||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}var p=i.createContext({}),m=function(t){var e=i.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):a(a({},e),t)),n},c=function(t){var e=m(t.components);return i.createElement(p.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return i.createElement(i.Fragment,{},e)}},s=i.forwardRef((function(t,e){var n=t.components,o=t.mdxType,r=t.originalType,p=t.parentName,c=l(t,["components","mdxType","originalType","parentName"]),s=m(n),w=o,h=s["".concat(p,".").concat(w)]||s[w]||u[w]||r;return n?i.createElement(h,a(a({ref:e},c),{},{components:n})):i.createElement(h,a({ref:e},c))}));function w(t,e){var n=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var r=n.length,a=new Array(r);a[0]=s;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l.mdxType="string"==typeof t?t:o,a[1]=l;for(var m=2;m=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),u=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=u(e.components);return n.createElement(p.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},s=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),s=u(r),m=o,d=s["".concat(p,".").concat(m)]||s[m]||f[m]||a;return r?n.createElement(d,i(i({ref:t},l),{},{components:r})):n.createElement(d,i({ref:t},l))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=s;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var u=2;u=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var o=i.createContext({}),u=function(e){var n=i.useContext(o),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},p=function(e){var n=u(e.components);return i.createElement(o.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var t=e.components,a=e.mdxType,r=e.originalType,o=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=u(t),k=a,d=m["".concat(o,".").concat(k)]||m[k]||c[k]||r;return t?i.createElement(d,l(l({ref:n},p),{},{components:t})):i.createElement(d,l({ref:n},p))}));function k(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=t.length,l=new Array(r);l[0]=m;var s={};for(var o in n)hasOwnProperty.call(n,o)&&(s[o]=n[o]);s.originalType=e,s.mdxType="string"==typeof e?e:a,l[1]=s;for(var u=2;uxUnit \u5355\u5143\u6d4b\u8bd5\u9879\u76ee",id:"36151-\u521b\u5efa-xunit-\u5355\u5143\u6d4b\u8bd5\u9879\u76ee",level:3},{value:"36.1.5.2 \u7b2c\u4e00\u4e2a\u6d4b\u8bd5\u65b9\u6cd5",id:"36152-\u7b2c\u4e00\u4e2a\u6d4b\u8bd5\u65b9\u6cd5",level:3},{value:"36.1.5.3 \u8fd0\u884c\u6d4b\u8bd5",id:"36153-\u8fd0\u884c\u6d4b\u8bd5",level:3},{value:"36.1.5.4 \u591a\u4e2a\u6d4b\u8bd5\u65b9\u6cd5\u6d4b\u8bd5",id:"36154-\u591a\u4e2a\u6d4b\u8bd5\u65b9\u6cd5\u6d4b\u8bd5",level:3},{value:"36.1.5.5 \u91cd\u590d/\u56de\u5f52\u6d4b\u8bd5",id:"36155-\u91cd\u590d\u56de\u5f52\u6d4b\u8bd5",level:3},{value:"36.1.6 \u96c6\u6210 Furion \u5f3a\u5927\u529f\u80fd",id:"3616-\u96c6\u6210-furion-\u5f3a\u5927\u529f\u80fd",level:2},{value:"36.1.6.1 \u5b89\u88c5 Furion.Xunit \u5305",id:"36161-\u5b89\u88c5-furionxunit-\u5305",level:3},{value:"36.1.6.2 \u6dfb\u52a0\u521d\u59cb\u914d\u7f6e\u7c7b",id:"36162-\u6dfb\u52a0\u521d\u59cb\u914d\u7f6e\u7c7b",level:3},{value:"36.1.6.3 \u4f7f\u7528 Furion \u5b8c\u6574\u529f\u80fd",id:"36163-\u4f7f\u7528-furion-\u5b8c\u6574\u529f\u80fd",level:3},{value:"36.1.7 \u5e26\u53c2\u6570\u7684\u6d4b\u8bd5\u65b9\u6cd5",id:"3617-\u5e26\u53c2\u6570\u7684\u6d4b\u8bd5\u65b9\u6cd5",level:2},{value:"36.1.8 \u5982\u4f55\u8fdb\u884c\u4f9d\u8d56\u6ce8\u5165",id:"3618-\u5982\u4f55\u8fdb\u884c\u4f9d\u8d56\u6ce8\u5165",level:2},{value:"36.1.8.1 \u7f16\u5199\u4e00\u4e2a ICalcService \u63a5\u53e3\u53ca\u5b9e\u73b0\u7c7b",id:"36181-\u7f16\u5199\u4e00\u4e2a-icalcservice-\u63a5\u53e3\u53ca\u5b9e\u73b0\u7c7b",level:3},{value:"36.1.8.2 \u5728\u6d4b\u8bd5\u7c7b\u4e2d\u8c03\u7528",id:"36182-\u5728\u6d4b\u8bd5\u7c7b\u4e2d\u8c03\u7528",level:3},{value:"36.1.8.3 \u8f93\u51fa\u65e5\u5fd7",id:"36183-\u8f93\u51fa\u65e5\u5fd7",level:3},{value:"36.1.8.4 \u5173\u4e8e\u4f9d\u8d56\u6ce8\u5165\u4f5c\u7528\u57df\u91ca\u653e",id:"36184-\u5173\u4e8e\u4f9d\u8d56\u6ce8\u5165\u4f5c\u7528\u57df\u91ca\u653e",level:3},{value:"36.1.8.5 \u6d4b\u8bd5\u91ca\u653e\u8d44\u6e90",id:"36185-\u6d4b\u8bd5\u91ca\u653e\u8d44\u6e90",level:3},{value:"36.1.8.6 [AssemblyFixture] \u7279\u6027",id:"36186-assemblyfixture-\u7279\u6027",level:3},{value:"36.1.8.7 IClassFixture<> \u5355\u4e2a\u6ce8\u5165",id:"36187-iclassfixture-\u5355\u4e2a\u6ce8\u5165",level:3},{value:"36.1.8.8 ICollectionFixture<> \u591a\u4e2a\u6ce8\u5165",id:"36188-icollectionfixture-\u591a\u4e2a\u6ce8\u5165",level:3},{value:"36.1.9 Web \u96c6\u6210\u6d4b\u8bd5",id:"3619-web-\u96c6\u6210\u6d4b\u8bd5",level:2},{value:"36.1.9.1 \u5bf9\u73b0\u6709\u9879\u76ee\u8fdb\u884c\u96c6\u6210\u6d4b\u8bd5",id:"36191-\u5bf9\u73b0\u6709\u9879\u76ee\u8fdb\u884c\u96c6\u6210\u6d4b\u8bd5",level:3},{value:"36.1.9.2 \u72ec\u7acb\u4e3b\u673a\u65b9\u5f0f\u6d4b\u8bd5",id:"36192-\u72ec\u7acb\u4e3b\u673a\u65b9\u5f0f\u6d4b\u8bd5",level:3},{value:"36.1.9.3 \u7cfb\u7edf\u96c6\u6210/\u73af\u5883/\u914d\u7f6e\u90e8\u7f72\u6d4b\u8bd5",id:"36193-\u7cfb\u7edf\u96c6\u6210\u73af\u5883\u914d\u7f6e\u90e8\u7f72\u6d4b\u8bd5",level:3},{value:"36.1.9.4 \u96c6\u6210 Furion.Xunit \u62d3\u5c55",id:"36194-\u96c6\u6210-furionxunit-\u62d3\u5c55",level:3},{value:"36.1.10 Assert \u65ad\u8a00",id:"36110-assert-\u65ad\u8a00",level:2},{value:"36.1.11 \u5355\u5143\u6d4b\u8bd5\u8986\u76d6\u7387",id:"36111-\u5355\u5143\u6d4b\u8bd5\u8986\u76d6\u7387",level:2},{value:"36.1.12 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"36112-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],k={toc:m};function d(e){var n=e.components,t=(0,a.Z)(e,s);return(0,r.kt)("wrapper",(0,i.Z)({},k,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"3611-\u5173\u4e8e\u5355\u5143\u6d4b\u8bd5"},"36.1.1 \u5173\u4e8e\u5355\u5143\u6d4b\u8bd5"),(0,r.kt)("p",null,"\u5f15\u7528\u81ea\u767e\u5ea6\u767e\u79d1\uff1a"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\u5355\u5143\u6d4b\u8bd5\uff08unit testing\uff09\uff0c\u662f\u6307\u5bf9\u8f6f\u4ef6\u4e2d\u7684\u6700\u5c0f\u53ef\u6d4b\u8bd5\u5355\u5143\u8fdb\u884c\u68c0\u67e5\u548c\u9a8c\u8bc1\u3002\u5bf9\u4e8e\u5355\u5143\u6d4b\u8bd5\u4e2d\u5355\u5143\u7684\u542b\u4e49\uff0c\u4e00\u822c\u6765\u8bf4\uff0c\u8981\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u53bb\u5224\u5b9a\u5176\u5177\u4f53\u542b\u4e49\uff0c\u5982 C \u8bed\u8a00\u4e2d\u5355\u5143\u6307\u4e00\u4e2a\u51fd\u6570\uff0cJava \u91cc\u5355\u5143\u6307\u4e00\u4e2a\u7c7b\uff0c\u56fe\u5f62\u5316\u7684\u8f6f\u4ef6\u4e2d\u53ef\u4ee5\u6307\u4e00\u4e2a\u7a97\u53e3\u6216\u4e00\u4e2a\u83dc\u5355\u7b49\u3002\u603b\u7684\u6765\u8bf4\uff0c\u5355\u5143\u5c31\u662f\u4eba\u4e3a\u89c4\u5b9a\u7684\u6700\u5c0f\u7684\u88ab\u6d4b\u529f\u80fd\u6a21\u5757\u3002\u5355\u5143\u6d4b\u8bd5\u662f\u5728\u8f6f\u4ef6\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u8981\u8fdb\u884c\u7684\u6700\u4f4e\u7ea7\u522b\u7684\u6d4b\u8bd5\u6d3b\u52a8\uff0c\u8f6f\u4ef6\u7684\u72ec\u7acb\u5355\u5143\u5c06\u5728\u4e0e\u7a0b\u5e8f\u7684\u5176\u4ed6\u90e8\u5206\u76f8\u9694\u79bb\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u6d4b\u8bd5\u3002")),(0,r.kt)("h2",{id:"3612-\u5355\u5143\u6d4b\u8bd5\u597d\u5904"},"36.1.2 \u5355\u5143\u6d4b\u8bd5\u597d\u5904"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u6d88\u706d\u4f4e\u7ea7\u9519\u8bef"))),(0,r.kt)("p",null,"\u57fa\u672c\u7684\u5355\u5143\u6d4b\u8bd5\uff0c\u53ef\u4ee5\u5728\u7cfb\u7edf\u6d4b\u8bd5\u4e4b\u524d\uff0c\u628a\u5927\u90e8\u5206\u6bd4\u8f83\u4f4e\u7ea7\u7684\u9519\u8bef\u90fd\u6d88\u706d\u6389\uff0c\u51cf\u5c11\u7cfb\u7edf\u6d4b\u8bd5\u8fc7\u7a0b\u4e2d\u7684\u95ee\u9898\uff0c\u8fd9\u6837\u4e5f\u5c31\u51cf\u5c11\u4e86\u7cfb\u7edf\u6d4b\u8bd5\u4e2d\u5b9a\u4f4d\u548c\u89e3\u51b3\u95ee\u9898\u7684\u65f6\u95f4\u6210\u672c\u4e86\u3002"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u627e\u51fa\u6f5c\u5728\u7684 bug"))),(0,r.kt)("p",null,"\u67d0\u4e9b\u7c7b\u578b\u7684 bug\uff0c\u9760\u7cfb\u7edf\u6d4b\u8bd5\u662f\u5f88\u96be\u627e\u5230\u7684\u3002\u4f8b\u5982\u4e00\u4e9b\u4ee3\u7801\u5206\u652f\uff0c\u5e73\u65f6 99%\u7684\u573a\u666f\u57fa\u672c\u4e0a\u90fd\u8d70\u4e0d\u5230\uff0c\u4f46\u4e00\u65e6\u8d70\u5230\u4e86\uff0c\u5982\u679c\u6ca1\u6709\u63d0\u524d\u6d4b\u8bd5\u597d\uff0c\u90a3\u4e48\u53ef\u80fd\u5c31\u662f\u4e00\u4e2a\u707e\u96be\u3002"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u4e0a\u7ebf\u524d\u7684\u4fdd\u8bc1"))),(0,r.kt)("p",null,"\u52a0\u4e86\u65b0\u4ee3\u7801\uff0c\u4e0a\u7ebf\u524d\u8dd1\u4e00\u628a\u5355\u5143\u6d4b\u8bd5\uff0c\u90fd\u901a\u8fc7\uff0c\u8bf4\u660e\u4ee3\u7801\u53ef\u80fd\u6ca1\u6709\u5f71\u54cd\u5230\u4e4b\u524d\u7684\u903b\u8f91\uff0c\u8fd9\u6837\u4e0a\u7ebf\u4e5f\u6bd4\u8f83\u653e\u5fc3\u3002\u5982\u679c\u4e4b\u524d\u7684\u5355\u5143\u6d4b\u8bd5\u8dd1\u4e0d\u8fc7\uff0c\u90a3\u4e48\u5f88\u6709\u53ef\u80fd\u65b0\u7684\u4ee3\u7801\u6709\u6f5c\u5728\u7684\u95ee\u9898\uff0c\u8d76\u7d27\u4fee\u590d\u53bb\u5427\u3002"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u91cd\u6784\u4ee3\u7801\u7684\u673a\u4f1a"))),(0,r.kt)("p",null,"\u5199\u5355\u5143\u6d4b\u8bd5\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4f60\u53ef\u80fd\u4f1a\u987a\u624b\u628a\u4e00\u4e9b code \u91cd\u6784\u4e86\uff0c\u4e3a\u4ec0\u4e48\uff1f\u4e3e\u4f8b\uff0c\u4e00\u4e9b\u957f\u5f97\u975e\u5e38\u50cf\u7684\u4ee3\u7801\uff0c\u5982\u679c\u6bcf\u6b21\u90fd\u8981\u5199\u4e00\u5806\u6d4b\u8bd5\u4ee3\u7801\u53bb\u6d4b\u540c\u6837\u7684 code\uff0c\u4f60\u4f1a\u4e0d\u4f1a\u6293\u72c2\uff1f\u4e0d\u6d4b\u5427\uff0c\u8986\u76d6\u7387\u53c8\u4e0a\u4e0d\u53bb\uff0c\u4e8e\u662f\u6211\u5c31\u4f1a\u60f3\u65b9\u8bbe\u6cd5\u628a\u5f85\u6d4b\u8bd5\u7684 code \u6539\u5f97\u5c3d\u91cf\u7684\u7cbe\u7b80\uff0c\u91cd\u590d\u4ee3\u7801\u51cf\u5c11\uff0c\u8fd9\u6837\u8986\u76d6\u7387\u4e0a\u53bb\u4e86\uff0c\u6d4b\u8bd5\u4e5f\u597d\u6d4b\u4e86\uff0c\u4ee3\u7801\u4e5f\u7b80\u6d01\u4e86\u3002\u5982\u679c\u6ca1\u6709\u5355\u5143\u6d4b\u8bd5\u548c\u8986\u76d6\u7387\u7684\u8981\u6c42\u7684\u8bdd\uff0c\u5766\u767d\u8bf4\u53ef\u80fd\u4e00\u6765\u81ea\u5df1\u4e0d\u4f1a\u53d1\u73b0\u8fd9\u4e9b\u91cd\u590d\u7684 code\uff0c\u53e6\u4e00\u65b9\u9762\u5373\u4f7f\u53d1\u73b0\u4e86\uff0c\u53ef\u80fd\u4e5f\u6ca1\u6709\u592a\u5927\u7684\u52a8\u529b\u53bb\u6539\u8fdb\u3002"),(0,r.kt)("p",null,"\u53e6\u5916\uff0c\u7531\u4e8e\u5355\u5143\u6d4b\u8bd5\u4e2d\uff0c\u4f60\u9700\u8981\u5c1d\u8bd5\u53bb\u8986\u76d6\u4e00\u4e9b\u5f02\u5e38\u5206\u652f\uff0c\u8fd9\u662f\u7cfb\u7edf\u6d4b\u8bd5\u5e38\u5e38\u8d70\u4e0d\u5230\u7684\u5730\u65b9\uff0c\u4e8e\u662f\u5c31\u4f1a\u5f15\u8d77\u4f60\u7684\u4e00\u4e9b\u601d\u8003\uff0c\u4f8b\u5982\u8fd9\u4e2a\u5f02\u5e38\u5206\u652f\u662f\u5426\u771f\u7684\u9700\u8981\uff1f\u662f\u5426\u771f\u7684\u4f1a\u53d1\u751f\uff1f\u5bf9\u4e8e\u4e00\u4e9b\u5b9e\u9645\u4e0a\u7edd\u5bf9\u4e0d\u4f1a\u51fa\u9519\u7684\u51fd\u6570\uff0c\u90a3\u4e48\u6211\u89c9\u5f97\u53ef\u80fd\u5f02\u5e38\u5206\u652f\u662f\u6ca1\u5fc5\u8981\u5b58\u5728\u7684\u3002"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u91cd\u65b0 review \u4ee3\u7801\u7684\u673a\u4f1a"))),(0,r.kt)("p",null,"\u5199 UT \u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u603b\u662f\u4f1a\u597d\u597d\u770b\u54ea\u4e9b\u4ee3\u7801\u6267\u884c\u5230\u4e86\uff0c\u54ea\u4e9b\u4ee3\u7801\u6ca1\u6709\u6267\u884c\u5230\uff0c\u8fd9\u5176\u5b9e\u4e5f\u662f\u4e00\u4e2a review \u81ea\u5df1\u4ee3\u7801\u7684\u673a\u4f1a\uff0c\u6709\u4e9b\u65f6\u5019\uff0c\u5e76\u4e0d\u662f UT \u672c\u8eab\u5e2e\u6211\u627e\u5230 bug\uff0c\u800c\u662f\u56de\u5934 review \u81ea\u5df1\u4ee3\u7801\u7684\u65f6\u5019\u53d1\u73b0\u7684\u3002"),(0,r.kt)("h2",{id:"3613-\u5355\u5143\u6d4b\u8bd5\u7c7b\u578b"},"36.1.3 \u5355\u5143\u6d4b\u8bd5\u7c7b\u578b"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u57fa\u4e8e API \u63a5\u53e3\u6d4b\u8bd5\uff08\u767d\u76d2 + \u6d45\u5ea6\u9ed1\u76d2\u6d4b\u8bd5\uff09"),(0,r.kt)("li",{parentName:"ul"},"\u57fa\u4e8e\u9879\u76ee\u4ee3\u7801\u6d4b\u8bd5\uff08\u6df1\u5ea6\u767d\u76d2\u6d4b\u8bd5\uff09")),(0,r.kt)("h2",{id:"3614-\u4e3b\u6d41\u7684\u5355\u5143\u6d4b\u8bd5\u5e93"},"36.1.4 \u4e3b\u6d41\u7684\u5355\u5143\u6d4b\u8bd5\u5e93"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"xUnit"),"\uff08",(0,r.kt)("strong",{parentName:"li"},"\u6700\u6d41\u884c\u7684\u5e93\uff0c\u63a8\u8350"),"\uff09"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"NUnit")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"MSTest"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u5728\u672c\u7ae0\u8282\uff0c",(0,r.kt)("inlineCode",{parentName:"strong"},"Furion")," \u6846\u67b6\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"strong"},"xUnit")," \u5e93\u8fdb\u884c\u5355\u5143\u6d4b\u8bd5\u3002")),(0,r.kt)("h2",{id:"3615-\u7b2c\u4e00\u4e2a\u4f8b\u5b50"},"36.1.5 \u7b2c\u4e00\u4e2a\u4f8b\u5b50"),(0,r.kt)("h3",{id:"36151-\u521b\u5efa-xunit-\u5355\u5143\u6d4b\u8bd5\u9879\u76ee"},"36.1.5.1 \u521b\u5efa ",(0,r.kt)("inlineCode",{parentName:"h3"},"xUnit")," \u5355\u5143\u6d4b\u8bd5\u9879\u76ee"),(0,r.kt)("img",{src:(0,l.Z)("img/ut1.png")}),(0,r.kt)("h3",{id:"36152-\u7b2c\u4e00\u4e2a\u6d4b\u8bd5\u65b9\u6cd5"},"36.1.5.2 \u7b2c\u4e00\u4e2a\u6d4b\u8bd5\u65b9\u6cd5"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,7,10}",showLineNumbers:!0,"":!0,"{1,7,10}":!0},"using Xunit;\n\nnamespace TestProject1\n{\n public class UnitTest1\n {\n [Fact]\n public void Test1()\n {\n Assert.Equal(2, 1 + 1);\n }\n }\n}\n")),(0,r.kt)("p",null,"\u5355\u5143\u6d4b\u8bd5\u5b9e\u9645\u4e0a\u662f\u901a\u8fc7\u666e\u901a\u7684\u7c7b\u7684\u65b9\u6cd5\u8fdb\u884c\u6a21\u5757\u529f\u80fd\u6d4b\u8bd5\uff0c\u5177\u4f53\u6d4b\u8bd5\u5219\u662f\u6807\u8bb0\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"[Fact]")," \u7279\u6027\u7684\u65b9\u6cd5\uff0c\u5728\u65b9\u6cd5\u4e2d\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"Assert")," \u7c7b\u63d0\u4f9b\u7684\u9759\u6001\u65b9\u6cd5\u8fdb\u884c ",(0,r.kt)("inlineCode",{parentName:"p"},"\u65ad\u8a00"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"\u65ad\u8a00")," \u6210\u529f\uff0c\u5219\u6d4b\u8bd5\u901a\u8fc7\uff0c\u5426\u5219\u6d4b\u8bd5\u4e0d\u901a\u8fc7\u3002"),(0,r.kt)("h3",{id:"36153-\u8fd0\u884c\u6d4b\u8bd5"},"36.1.5.3 \u8fd0\u884c\u6d4b\u8bd5"),(0,r.kt)("p",null,"\u5728\u5355\u5143\u6d4b\u8bd5\u9879\u76ee\u4e2d ",(0,r.kt)("inlineCode",{parentName:"p"},"\u53f3\u952e")," \u9009\u62e9 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u8fd0\u884c\u6d4b\u8bd5")," \u5e76\u6253\u5f00 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u6d4b\u8bd5\u8d44\u6e90\u7ba1\u7406\u5668")," \u5373\u53ef\u67e5\u770b\u6d4b\u8bd5\u7ed3\u679c\u3002"),(0,r.kt)("img",{src:(0,l.Z)("img/ut2.png")}),(0,r.kt)("img",{src:(0,l.Z)("img/ut3.png")}),(0,r.kt)("h3",{id:"36154-\u591a\u4e2a\u6d4b\u8bd5\u65b9\u6cd5\u6d4b\u8bd5"},"36.1.5.4 \u591a\u4e2a\u6d4b\u8bd5\u65b9\u6cd5\u6d4b\u8bd5"),(0,r.kt)("img",{src:(0,l.Z)("img/ut4.png")}),(0,r.kt)("h3",{id:"36155-\u91cd\u590d\u56de\u5f52\u6d4b\u8bd5"},"36.1.5.5 \u91cd\u590d/\u56de\u5f52\u6d4b\u8bd5"),(0,r.kt)("p",null,"\u540e\u7eed\u6dfb\u52a0\u66f4\u591a\u6d4b\u8bd5\u65b9\u6cd5\u53ea\u9700\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u6d4b\u8bd5\u8d44\u6e90\u7ba1\u7406\u5668")," \u70b9\u51fb ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5728\u89c6\u56fe\u4e2d\u8fd0\u884c\u6240\u6709\u6d4b\u8bd5")," \u64ad\u653e\u6309\u94ae\u5373\u53ef\uff0c\u5982\u4e0b\u56fe"),(0,r.kt)("img",{src:(0,l.Z)("img/ut5.png")}),(0,r.kt)("h2",{id:"3616-\u96c6\u6210-furion-\u5f3a\u5927\u529f\u80fd"},"36.1.6 \u96c6\u6210 ",(0,r.kt)("inlineCode",{parentName:"h2"},"Furion")," \u5f3a\u5927\u529f\u80fd"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u662f\u8de8\u5e73\u53f0\u3001\u8de8\u9879\u76ee\u7684\u5f00\u53d1\u6846\u67b6\uff0c\u652f\u6301\u4efb\u610f\u9879\u76ee\u7c7b\u578b\uff0c\u5305\u62ec\u5355\u5143\u6d4b\u8bd5\u9879\u76ee\u3002"),(0,r.kt)("h3",{id:"36161-\u5b89\u88c5-furionxunit-\u5305"},"36.1.6.1 \u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Furion.Xunit")," \u5305"),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Furion")," \u7eaf\u51c0\u7248"),(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528\u7684\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Pure")," \u5219\u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Pure.Xunit")," \u8fd9\u4e2a\u62d3\u5c55\u5305\u3002")),(0,r.kt)("p",null,"\u6253\u5f00 ",(0,r.kt)("inlineCode",{parentName:"p"},"Nuget")," \u7a0b\u5e8f\u5305\u63a7\u5236\u53f0\uff0c\u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Xunit")," \u5305"),(0,r.kt)("img",{src:(0,l.Z)("img/ut6.png")}),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Xunit")," \u5df2\u7ecf\u5305\u542b ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u65e0\u9700\u518d\u6b21\u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion"),"\u3002")),(0,r.kt)("h3",{id:"36162-\u6dfb\u52a0\u521d\u59cb\u914d\u7f6e\u7c7b"},"36.1.6.2 \u6dfb\u52a0\u521d\u59cb\u914d\u7f6e\u7c7b"),(0,r.kt)("p",null,"\u5728\u5355\u5143\u6d4b\u8bd5\u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"TestProgram.cs")," \u7c7b\uff0c\u5e76\u5199\u4e0b\u4ee5\u4e0b\u4ee3\u7801\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {6,13,18} title="TestProgram.cs"',showLineNumbers:!0,"{6,13,18}":!0,title:'"TestProgram.cs"'},'using Furion.Xunit;\nusing Xunit.Abstractions;\nusing Xunit.Sdk;\n\n// \u914d\u7f6e\u542f\u52a8\u7c7b\u7c7b\u578b\uff0c\u7b2c\u4e00\u4e2a\u53c2\u6570\u662f TestProgram \u7c7b\u5b8c\u6574\u9650\u5b9a\u540d\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662f\u5f53\u524d\u9879\u76ee\u7a0b\u5e8f\u96c6\u540d\u79f0\n[assembly: TestFramework("TestProject1.TestProgram", "TestProject1")]\n\nnamespace TestProject1;\n\n/// \n/// \u5355\u5143\u6d4b\u8bd5\u542f\u52a8\u7c7b\n/// \npublic class TestProgram : TestStartup\n{\n public TestProgram(IMessageSink messageSink) : base(messageSink)\n {\n // \u521d\u59cb\u5316 Furion\n Serve.Run(silence: true);\n }\n}\n')),(0,r.kt)("admonition",{title:"\u5c0f\u63d0\u793a",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"TestProgram.cs")," \u540d\u79f0\u53ef\u968f\u610f\uff0c\u53ea\u9700\u8981\u7ee7\u627f ",(0,r.kt)("inlineCode",{parentName:"p"},"TestStartup")," \u7c7b\u5373\u53ef\u3002")),(0,r.kt)("h3",{id:"36163-\u4f7f\u7528-furion-\u5b8c\u6574\u529f\u80fd"},"36.1.6.3 \u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Furion")," \u5b8c\u6574\u529f\u80fd"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u662f\u8de8\u5e73\u53f0\u3001\u8de8\u9879\u76ee\u7684\u5f00\u53d1\u6846\u67b6\uff0c\u4e0b\u9762\u5728\u5355\u5143\u6d4b\u8bd5\u4e2d\u6f14\u793a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u8fdc\u7a0b\u8bf7\u6c42")," \u5e76\u8bf7\u6c42 ",(0,r.kt)("inlineCode",{parentName:"p"},"https://www.baidu.com")," \u6570\u636e\uff0c\u5e76\u6d4b\u8bd5\u662f\u5426\u8bf7\u6c42\u6210\u529f\u3002"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u5728\u6839\u76ee\u5f55\u4e0b\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"Startup.cs")," \u542f\u52a8\u7c7b\uff0c\u5e76\u7ee7\u627f ",(0,r.kt)("inlineCode",{parentName:"li"},"AppStartup"),":")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {8,13} title="Startup.cs"',showLineNumbers:!0,"{8,13}":!0,title:'"Startup.cs"'},"using Furion;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace TestProject1;\n\npublic class Startup : AppStartup\n{\n public void ConfigureServices(IServiceCollection services)\n {\n // \u6ce8\u518c\u8fdc\u7a0b\u670d\u52a1\n services.AddRemoteRequest();\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u7f16\u5199\u6d4b\u8bd5\u65b9\u6cd5")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'[Fact]\npublic async Task \u6d4b\u8bd5\u8bf7\u6c42\u767e\u5ea6()\n{\n var rep = await "https://www.baidu.com".GetAsync();\n Assert.True(rep.IsSuccessStatusCode);\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u67e5\u770b\u6d4b\u8bd5\u7ed3\u679c")),(0,r.kt)("img",{src:(0,l.Z)("img/ut7.png")}),(0,r.kt)("p",null,"\u5f88\u795e\u5947\u5427\uff01",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u652f\u6301\u4efb\u4f55\u9879\u76ee\u7c7b\u578b\uff0c\u4efb\u4f55\u5e73\u53f0\u4f7f\u7528\u3002"),(0,r.kt)("h2",{id:"3617-\u5e26\u53c2\u6570\u7684\u6d4b\u8bd5\u65b9\u6cd5"},"36.1.7 \u5e26\u53c2\u6570\u7684\u6d4b\u8bd5\u65b9\u6cd5"),(0,r.kt)("p",null,"\u4e0a\u9762\u4f8b\u5b50\u4e2d\uff0c\u6d4b\u8bd5\u65b9\u6cd5\u90fd\u662f\u6ca1\u6709\u53c2\u6570\u7684\uff0c\u6709\u65f6\u5019\u9700\u8981\u540c\u4e00\u4e2a\u65b9\u6cd5\u8f93\u5165\u591a\u4e2a\u4e0d\u540c\u7684\u503c\u8fdb\u884c\u6d4b\u8bd5\uff0c\u8fd9\u65f6\u5019\u5c31\u9700\u8981\u7528\u5230 ",(0,r.kt)("inlineCode",{parentName:"p"},"[Theory]")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"[InlineData]")," \u7279\u6027\u4e86\u3002"),(0,r.kt)("p",null,"\u5982\uff0c\u4e0b\u9762\u6d4b\u8bd5\u4e24\u4e2a\u6570\u7684\u548c\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5947\u6570"),"\uff0c\u6d4b\u8bd5\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-4}",showLineNumbers:!0,"":!0,"{1-4}":!0},"[Theory]\n[InlineData(1, 2)]\n[InlineData(3, 4)]\n[InlineData(5, 7)]\npublic void \u5e26\u53c2\u6570\u6d4b\u8bd5(int i, int j)\n{\n Assert.NotEqual(0, (i + j) % 2);\n}\n")),(0,r.kt)("p",null,"\u6d4b\u8bd5\u7ed3\u679c\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/ut8.png")}),(0,r.kt)("h2",{id:"3618-\u5982\u4f55\u8fdb\u884c\u4f9d\u8d56\u6ce8\u5165"},"36.1.8 \u5982\u4f55\u8fdb\u884c\u4f9d\u8d56\u6ce8\u5165"),(0,r.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\uff0c\u6211\u4eec\u9700\u8981\u6d4b\u8bd5\u67d0\u63a5\u53e3\uff0c\u6216\u8005\u8fdb\u884c\u4f9d\u8d56\u6ce8\u5165\u65b9\u5f0f\u89e3\u6790\u670d\u52a1\u5e76\u8c03\u7528\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Xunit")," \u63d0\u4f9b\u5b8c\u6574\u7684\u6784\u9020\u51fd\u6570\u6ce8\u5165\u3002"),(0,r.kt)("h3",{id:"36181-\u7f16\u5199\u4e00\u4e2a-icalcservice-\u63a5\u53e3\u53ca\u5b9e\u73b0\u7c7b"},"36.1.8.1 \u7f16\u5199\u4e00\u4e2a ",(0,r.kt)("inlineCode",{parentName:"h3"},"ICalcService")," \u63a5\u53e3\u53ca\u5b9e\u73b0\u7c7b"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,10}",showLineNumbers:!0,"":!0,"{5,10}":!0},"using Furion.DependencyInjection;\n\nnamespace TestProject1.Services;\n\npublic interface ICalcService\n{\n int Plus(int i, int j);\n}\n\npublic class CalcService : ICalcService, ITransient // \u652f\u6301\u4efb\u4f55\u751f\u547d\u5468\u671f\n{\n public int Plus(int i, int j)\n {\n return i + j;\n }\n}\n")),(0,r.kt)("h3",{id:"36182-\u5728\u6d4b\u8bd5\u7c7b\u4e2d\u8c03\u7528"},"36.1.8.2 \u5728\u6d4b\u8bd5\u7c7b\u4e2d\u8c03\u7528"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {9,15,17}",showLineNumbers:!0,"":!0,"{9,15,17}":!0},"using TestProject1.Services;\nusing Xunit;\n\nnamespace TestProject1;\n\npublic class UnitTest1\n{\n private readonly ICalcService _calcService;\n public UnitTest1(ICalcService calcService)\n {\n _calcService = calcService;\n }\n\n [Fact]\n public void \u6d4b\u8bd5\u4e24\u4e2a\u6570\u7684\u548c()\n {\n Assert.Equal(3, _calcService.Plus(1, 2));\n }\n}\n")),(0,r.kt)("img",{src:(0,l.Z)("img/ut9.png")}),(0,r.kt)("h3",{id:"36183-\u8f93\u51fa\u65e5\u5fd7"},"36.1.8.3 \u8f93\u51fa\u65e5\u5fd7"),(0,r.kt)("p",null,"\u5982\u679c\u5728\u5355\u5143\u6d4b\u8bd5\u4e2d\u60f3\u8f93\u51fa\u65e5\u5fd7\uff0c\u53ea\u9700\u8981\u5728\u6784\u9020\u51fd\u6570\u6ce8\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"ITestOutputHelper")," \u5373\u53ef\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,10,12,18}",showLineNumbers:!0,"":!0,"{2,10,12,18}":!0},'using Xunit;\nusing Xunit.Abstractions;\n\nnamespace TestProject1\n{\n public class UnitTest1\n {\n private readonly ITestOutputHelper Output;\n\n public UnitTest1(ITestOutputHelper tempOutput)\n {\n Output = tempOutput;\n }\n\n [Fact]\n public void Test_String_Equal()\n {\n Output.WriteLine("\u54c8\u54c8\u54c8\u54c8\uff0c\u6211\u662f Furion");\n Assert.NotEqual("Furion", "Fur");\n }\n }\n}\n')),(0,r.kt)("img",{src:(0,l.Z)("img/un3.png")}),(0,r.kt)("h3",{id:"36184-\u5173\u4e8e\u4f9d\u8d56\u6ce8\u5165\u4f5c\u7528\u57df\u91ca\u653e"},"36.1.8.4 \u5173\u4e8e\u4f9d\u8d56\u6ce8\u5165\u4f5c\u7528\u57df\u91ca\u653e"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u4f1a\u5728\u521b\u5efa\u5355\u5143\u6d4b\u8bd5\u5b9e\u4f8b\u65f6\u521b\u5efa\u4e00\u4e2a ",(0,r.kt)("inlineCode",{parentName:"p"},"IServiceScope")," \u5bf9\u8c61\uff0c\u7b49\u8be5\u5b9e\u4f8b\u6240\u6709\u6d4b\u8bd5\u6848\u4f8b\u6267\u884c\u5b8c\u6bd5\u81ea\u52a8\u8c03\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"Dispose"),"\uff0c\u7f16\u5199\u6d4b\u8bd5\u7684\u5f00\u53d1\u8005\u65e0\u9700\u5173\u6ce8\u3002"),(0,r.kt)("h3",{id:"36185-\u6d4b\u8bd5\u91ca\u653e\u8d44\u6e90"},"36.1.8.5 \u6d4b\u8bd5\u91ca\u653e\u8d44\u6e90"),(0,r.kt)("p",null,"\u6709\u65f6\u5019\uff0c\u6211\u4eec\u9700\u8981\u6d4b\u8bd5\u6210\u529f\u540e\u91ca\u653e\u4e00\u4e9b\u4e0d\u80fd\u53ca\u65f6\u91ca\u653e\u7684\u5bf9\u8c61\uff0c\u8fd9\u65f6\uff0c\u53ea\u9700\u8981\u5b9e\u73b0 ",(0,r.kt)("inlineCode",{parentName:"p"},"IDisposable")," \u63a5\u53e3\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,14-17}",showLineNumbers:!0,"":!0,"{6,14-17}":!0},'using System;\nusing Xunit;\n\nnamespace TestProject1\n{\n public class UnitTest1 : IDisposable\n {\n [Fact]\n public void Test_String_Equal()\n {\n Assert.NotEqual("Furion", "Fur");\n }\n\n public void Dispose()\n {\n // \u91ca\u653e\u4f60\u7684\u5bf9\u8c61\n }\n }\n}\n')),(0,r.kt)("h3",{id:"36186-assemblyfixture-\u7279\u6027"},"36.1.8.6 ",(0,r.kt)("inlineCode",{parentName:"h3"},"[AssemblyFixture]")," \u7279\u6027"),(0,r.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u53ef\u80fd\u4e0d\u9700\u8981\u5bf9\u7c7b\u8fdb\u884c\u4f9d\u8d56\u6ce8\u518c\uff0c\u6216\u8005\u65e0\u6cd5\u901a\u8fc7\u5916\u90e8\u8fdb\u884c\u6ce8\u518c\uff0c\u8fd9\u65f6\u5019\u53ef\u4ee5\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"[AssemblyFixture]")," \u7279\u6027\u5b9e\u73b0\u6784\u9020\u51fd\u6570\u6ce8\u5165\u4efb\u4f55\u7c7b\uff0c\u5982\uff1a"),(0,r.kt)("admonition",{title:"\u6709\u6548\u8303\u56f4\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"[AssemblyFixture]")," \u65b9\u5f0f\u5bf9\u6574\u4e2a\u5355\u5143\u6d4b\u8bd5\u7c7b\u6784\u9020\u51fd\u6570\u90fd\u6709\u6548\uff0c\u5982\u9700\u4e2a\u522b\u5355\u5143\u6d4b\u8bd5\u7c7b\u6709\u6548\u53ef\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"IClassFixture<>")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"ICollectionFixture<>")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"[Collection]")," \u7ec4\u5408\u65b9\u5f0f\u3002")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5b9a\u4e49\u9700\u8981\u6ce8\u5165\u8fdb\u5355\u5143\u6d4b\u8bd5\u6784\u9020\u51fd\u6570\u4e2d\u7684\u7c7b"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},"public class MyAssemblyFixture : IDisposable\n{\n public static int InstantiationCount;\n\n public MyAssemblyFixture()\n {\n InstantiationCount++;\n }\n\n public void Dispose()\n {\n // \u505a\u4e00\u4e9b\u91ca\u653e\u5de5\u4f5c\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"strong"},"TestProgram.cs")," \u9876\u90e8\u5168\u5c40\u6ce8\u518c"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {11} title="TestProgram.cs"',showLineNumbers:!0,"{11}":!0,title:'"TestProgram.cs"'},'using Furion.Xunit;\nusing TestProject1;\nusing Xunit;\nusing Xunit.Abstractions;\nusing Xunit.Sdk;\n\n// \u914d\u7f6e\u542f\u52a8\u7c7b\u7c7b\u578b\uff0c\u7b2c\u4e00\u4e2a\u53c2\u6570\u662f TestProgram \u7c7b\u5b8c\u6574\u9650\u5b9a\u540d\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662f\u5f53\u524d\u9879\u76ee\u7a0b\u5e8f\u96c6\u540d\u79f0\n[assembly: TestFramework("TestProject1.TestProgram", "TestProject1")]\n\n// \u652f\u6301\u591a\u4e2a\n[assembly: AssemblyFixture(typeof(MyAssemblyFixture))]\n// [assembly: AssemblyFixture(typeof(XXXXFixture))]\n\nnamespace TestProject1;\n\n/// \n/// \u5355\u5143\u6d4b\u8bd5\u542f\u52a8\u7c7b\n/// \npublic class TestProgram : TestStartup\n{\n public TestProgram(IMessageSink messageSink) : base(messageSink)\n {\n Serve.Run(silence: true);\n }\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5728\u6d4b\u8bd5\u7c7b\u6784\u9020\u51fd\u6570\u6ce8\u5165"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {12,27}",showLineNumbers:!0,"{12,27}":!0},"using TestProject1.Services;\nusing Xunit;\n\nnamespace TestProject1;\n\npublic class UnitTest1\n{\n private readonly ICalcService _calcService;\n private readonly MyAssemblyFixture _fixture;\n\n public UnitTest1(ICalcService calcService\n , MyAssemblyFixture fixture)\n {\n _calcService = calcService;\n _fixture = fixture;\n }\n\n [Fact]\n public void \u6d4b\u8bd5\u4e24\u4e2a\u6570\u7684\u548c()\n {\n Assert.Equal(3, _calcService.Plus(1, 2));\n }\n\n [Fact]\n public void EnsureSingleton()\n {\n Assert.Equal(1, MyAssemblyFixture.InstantiationCount);\n }\n}\n")),(0,r.kt)("img",{src:(0,l.Z)("img/ut10.png")}),(0,r.kt)("h3",{id:"36187-iclassfixture-\u5355\u4e2a\u6ce8\u5165"},"36.1.8.7 ",(0,r.kt)("inlineCode",{parentName:"h3"},"IClassFixture<>")," \u5355\u4e2a\u6ce8\u5165"),(0,r.kt)("p",null,"\u901a\u8fc7\u4e0a\u9762 ",(0,r.kt)("inlineCode",{parentName:"p"},"[AssemblyFixture]")," \u65b9\u5f0f\u6211\u4eec\u77e5\u9053\u6b64\u65b9\u5f0f\u5bf9\u5168\u5c40\u7684\u5355\u5143\u6d4b\u8bd5\u7c7b\u90fd\u6709\u6548\uff0c\u4f46\u6709\u65f6\u5019\u6211\u4eec\u53ea\u9700\u8981\u7279\u5b9a\u5355\u5143\u6d4b\u8bd5\u7c7b\u6709\u6548\uff0c\u5219\u53ef\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"IClassFixture<>")," \u65b9\u5f0f\uff0c\u5982\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5b9a\u4e49\u9700\u8981\u6ce8\u5165\u8fdb\u5355\u5143\u6d4b\u8bd5\u6784\u9020\u51fd\u6570\u4e2d\u7684\u7c7b"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},"public class MyClassFixture : IDisposable\n{\n public static int InstantiationCount;\n\n public MyClassFixture()\n {\n InstantiationCount++;\n }\n\n public void Dispose()\n {\n // \u505a\u4e00\u4e9b\u91ca\u653e\u5de5\u4f5c\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5728\u6d4b\u8bd5\u7c7b\u6784\u9020\u51fd\u6570\u6ce8\u5165"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,14,34}",showLineNumbers:!0,"{6,14,34}":!0},"using TestProject1.Services;\nusing Xunit;\n\nnamespace TestProject1;\n\npublic class UnitTest1 : IClassFixture\n{\n private readonly ICalcService _calcService;\n private readonly MyAssemblyFixture _fixture;\n private readonly MyClassFixture _classFixture;\n\n public UnitTest1(ICalcService calcService\n , MyAssemblyFixture fixture\n , MyClassFixture classFixture)\n {\n _calcService = calcService;\n _fixture = fixture;\n _classFixture = classFixture;\n }\n\n [Fact]\n public void \u6d4b\u8bd5\u4e24\u4e2a\u6570\u7684\u548c()\n {\n Assert.Equal(3, _calcService.Plus(1, 2));\n }\n\n [Fact]\n public void EnsureSingleton()\n {\n Assert.Equal(1, MyAssemblyFixture.InstantiationCount);\n }\n\n [Fact]\n public void EnsureClassSingleton()\n {\n Assert.Equal(1, MyClassFixture.InstantiationCount);\n }\n}\n")),(0,r.kt)("img",{src:(0,l.Z)("img/ut11.png")}),(0,r.kt)("h3",{id:"36188-icollectionfixture-\u591a\u4e2a\u6ce8\u5165"},"36.1.8.8 ",(0,r.kt)("inlineCode",{parentName:"h3"},"ICollectionFixture<>")," \u591a\u4e2a\u6ce8\u5165"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"ICollectionFixture<>")," \u65b9\u5f0f\u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"IClassFixture<>")," \u65b9\u5f0f\u6700\u5927\u7684\u4e0d\u540c\u5c31\u662f\u540e\u8005\u53ea\u80fd\u914d\u7f6e\u4e3a\u5355\u4e2a\u6d4b\u8bd5\u7c7b\u4f7f\u7528\uff0c\u800c ",(0,r.kt)("inlineCode",{parentName:"p"},"ICollectionFixture<>")," \u5219\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"[Collection]")," \u65b9\u5f0f\u914d\u7f6e\u591a\u4e2a\u6d4b\u8bd5\u7c7b\u6709\u6548\uff0c\u5982\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5b9a\u4e49\u9700\u8981\u6ce8\u5165\u8fdb\u5355\u5143\u6d4b\u8bd5\u6784\u9020\u51fd\u6570\u4e2d\u7684\u7c7b"))),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u8fd9\u91cc\u533a\u522b\u4e8e ",(0,r.kt)("inlineCode",{parentName:"p"},"IClassFixture<>")," \u65b9\u5f0f\uff0c\u9700\u5b9a\u4e49\u914d\u7f6e\u5668\u5e76\u5b9e\u73b0 ",(0,r.kt)("inlineCode",{parentName:"p"},"ICollectionFixture<>")," \u63a5\u53e3\u3002")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,20-21}",showLineNumbers:!0,"{5,20-21}":!0},'using Xunit;\n\nnamespace TestProject1;\n\npublic class MyCollectionFixture : IDisposable\n{\n public static int InstantiationCount;\n\n public MyCollectionFixture()\n {\n InstantiationCount++;\n }\n\n public void Dispose()\n {\n // \u505a\u4e00\u4e9b\u91ca\u653e\u5de5\u4f5c\n }\n}\n\n[CollectionDefinition("MyCollection")]\npublic class MyCollection : ICollectionFixture\n{\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5728\u6d4b\u8bd5\u7c7b\u6784\u9020\u51fd\u6570\u6ce8\u5165"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,17,44}",showLineNumbers:!0,"{6,17,44}":!0},'using TestProject1.Services;\nusing Xunit;\n\nnamespace TestProject1;\n\n[Collection("MyCollection")]\npublic class UnitTest1 : IClassFixture\n{\n private readonly ICalcService _calcService;\n private readonly MyAssemblyFixture _fixture;\n private readonly MyClassFixture _classFixture;\n private readonly MyCollectionFixture _collectionFixture;\n\n public UnitTest1(ICalcService calcService\n , MyAssemblyFixture fixture\n , MyClassFixture classFixture\n , MyCollectionFixture collectionFixture)\n {\n _calcService = calcService;\n _fixture = fixture;\n _classFixture = classFixture;\n _collectionFixture = collectionFixture;\n }\n\n [Fact]\n public void \u6d4b\u8bd5\u4e24\u4e2a\u6570\u7684\u548c()\n {\n Assert.Equal(3, _calcService.Plus(1, 2));\n }\n\n [Fact]\n public void EnsureSingleton()\n {\n Assert.Equal(1, MyAssemblyFixture.InstantiationCount);\n }\n\n [Fact]\n public void EnsureClassSingleton()\n {\n Assert.Equal(1, MyClassFixture.InstantiationCount);\n }\n\n [Fact]\n public void EnsureCollectionSingleton()\n {\n Assert.Equal(1, MyCollectionFixture.InstantiationCount);\n }\n}\n')),(0,r.kt)("img",{src:(0,l.Z)("img/ut12.png")}),(0,r.kt)("h2",{id:"3619-web-\u96c6\u6210\u6d4b\u8bd5"},"36.1.9 ",(0,r.kt)("inlineCode",{parentName:"h2"},"Web")," \u96c6\u6210\u6d4b\u8bd5"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Web")," \u96c6\u6210\u6d4b\u8bd5\u6709\u4e09\u79cd\u65b9\u5f0f\uff0c\u901a\u8fc7\u8fd9\u4e09\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5bf9\u9879\u76ee\u8fdb\u884c\u5168\u65b9\u4f4d\u7684\u6d4b\u8bd5\uff0c\u4fdd\u8bc1\u90e8\u7f72\u4e0a\u7ebf\u662f\u6d4b\u8bd5\u671f\u76fc\u6548\u679c\u3002"),(0,r.kt)("h3",{id:"36191-\u5bf9\u73b0\u6709\u9879\u76ee\u8fdb\u884c\u96c6\u6210\u6d4b\u8bd5"},"36.1.9.1 \u5bf9\u73b0\u6709\u9879\u76ee\u8fdb\u884c\u96c6\u6210\u6d4b\u8bd5"),(0,r.kt)("p",null,"\u8fd9\u79cd\u65b9\u5f0f\u6bd4\u8f83\u7b80\u5355\uff0c\u4e5f\u662f\u6700\u5e38\u7528\u7684\u65b9\u5f0f\uff0c\u65e0\u9700\u90e8\u7f72\u5230\u670d\u52a1\u5668\u76f4\u63a5\u5728\u672c\u5730\u5373\u53ef\u6d4b\u8bd5\uff0c\u5982\uff1a"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\u521b\u5efa ",(0,r.kt)("inlineCode",{parentName:"li"},"Xunit")," \u5355\u5143\u6d4b\u8bd5\u9879\u76ee")),(0,r.kt)("img",{src:(0,l.Z)("img/ut1.png")}),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},"\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"Microsoft.AspNetCore.Mvc.Testing")," \u5fae\u8f6f\u63d0\u4f9b\u7684\u96c6\u6210\u6d4b\u8bd5\u62d3\u5c55")),(0,r.kt)("img",{src:(0,l.Z)("img/ut13.png")}),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},"\u6dfb\u52a0\u6d4b\u8bd5\u9879\u76ee\u6216\u4f7f\u7528\u5df2\u6709\u7684\u6d4b\u8bd5\u9879\u76ee",(0,r.kt)("strong",{parentName:"li"},"\u5f15\u7528"))),(0,r.kt)("img",{src:(0,l.Z)("img/ut14.png")}),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},"\u5728\u9700\u8981\u6d4b\u8bd5\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"Web")," \u9879\u76ee\u542f\u52a8\u5c42\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"FakeStarup.cs")," \u7c7b")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers title="FakeStarup.cs"',showLineNumbers:!0,title:'"FakeStarup.cs"'},"namespace WebApplication1;\n\n/// \n/// \u4f9b\u96c6\u6210\u6d4b\u8bd5\u4f7f\u7528\n/// \npublic class FakeStartup\n{\n}\n")),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"\u7f16\u5199\u6d4b\u8bd5 ",(0,r.kt)("inlineCode",{parentName:"li"},"Web")," \u9879\u76ee\u63a5\u53e3\u6d4b\u8bd5\u6848\u4f8b")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,8-12,15,16}",showLineNumbers:!0,"{6,8-12,15,16}":!0},'using Microsoft.AspNetCore.Mvc.Testing;\nusing Xunit;\n\nnamespace TestProject2;\n\npublic class UnitTest1 : IClassFixture>\n{\n private readonly WebApplicationFactory _factory;\n public UnitTest1(WebApplicationFactory factory)\n {\n _factory = factory;\n }\n\n [Theory]\n [InlineData("/default")]\n public async Task TestEnsureSuccessStatusCode(string url)\n {\n using var client = _factory.CreateClient();\n using var response = await client.GetAsync(url);\n response.EnsureSuccessStatusCode();\n }\n}\n')),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"/default")," \u63a5\u53e3\u5bf9\u5e94\u63a7\u5236\u5668\u5b9a\u4e49\u5982\u4e0b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {10,12}",showLineNumbers:!0,"{10,12}":!0},'using Microsoft.AspNetCore.Mvc;\n\nnamespace WebApplication1.Controllers\n{\n [ApiController]\n [Route("[controller]")]\n public class DefaultController : ControllerBase\n {\n [HttpGet]\n public string Get()\n {\n return "Furion \u96c6\u6210\u6d4b\u8bd5";\n }\n }\n}\n')),(0,r.kt)("img",{src:(0,l.Z)("img/ut15.png")}),(0,r.kt)("ol",{start:6},(0,r.kt)("li",{parentName:"ol"},"\u5141\u8bb8\u6d4b\u8bd5")),(0,r.kt)("img",{src:(0,l.Z)("img/ut16.png")}),(0,r.kt)("h3",{id:"36192-\u72ec\u7acb\u4e3b\u673a\u65b9\u5f0f\u6d4b\u8bd5"},"36.1.9.2 \u72ec\u7acb\u4e3b\u673a\u65b9\u5f0f\u6d4b\u8bd5"),(0,r.kt)("p",null,"\u72ec\u7acb\u4e3b\u673a\u7684\u65b9\u5f0f\u5c31\u662f\u5229\u7528\u5355\u5143\u6d4b\u8bd5\u7684\u6bcf\u4e00\u4e2a\u6d4b\u8bd5\u6848\u4f8b\u6784\u5efa\u4e3b\u673a\u8fdb\u884c\u6d4b\u8bd5\u3002"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\u521b\u5efa ",(0,r.kt)("inlineCode",{parentName:"li"},"Xunit")," \u5355\u5143\u6d4b\u8bd5\u9879\u76ee")),(0,r.kt)("img",{src:(0,l.Z)("img/ut1.png")}),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},"\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"Microsoft.AspNetCore.Mvc.Testing")," \u5fae\u8f6f\u63d0\u4f9b\u7684\u96c6\u6210\u6d4b\u8bd5\u62d3\u5c55")),(0,r.kt)("img",{src:(0,l.Z)("img/ut13.png")}),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},"\u5404\u79cd\u521b\u5efa\u4e3b\u673a\u65b9\u5f0f\u793a\u4f8b")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {15,33}",showLineNumbers:!0,"{15,33}":!0},'using Microsoft.AspNetCore.Builder;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\nusing Xunit;\n\nnamespace TestProject3;\n\npublic class UnitTest1\n{\n /// \n /// \u521b\u5efa\u4e3b\u673a\u5e76\u6ce8\u518c\u670d\u52a1\n /// \n /// \u53ef\u7528\u6765\u5224\u65ad\u670d\u52a1\u662f\u5426\u6ce8\u518c\n [Fact]\n public void Test1()\n {\n var builder = WebApplication.CreateBuilder();\n\n // \u6ce8\u518c\u670d\u52a1\n builder.Services.AddScoped();\n\n using var app = builder.Build();\n var services = app.Services;\n\n services.GetRequiredService();\n }\n\n /// \n /// \u6d4b\u8bd5\u914d\u7f6e\n /// \n /// \u6bd4\u5982\u6dfb\u52a0 JSON \u6587\u4ef6\u914d\u7f6e\u540e\u8bfb\u53d6\n [Fact]\n public void Test2()\n {\n var builder = WebApplication.CreateBuilder();\n var host = builder.Host;\n host.ConfigureAppConfiguration(builder =>\n {\n builder.Sources.Clear();\n });\n\n var config = builder.Configuration["\u914d\u7f6e"];\n\n // \u5224\u65ad\u4e0d\u4e3a\u7a7a\n }\n}\n')),(0,r.kt)("h3",{id:"36193-\u7cfb\u7edf\u96c6\u6210\u73af\u5883\u914d\u7f6e\u90e8\u7f72\u6d4b\u8bd5"},"36.1.9.3 \u7cfb\u7edf\u96c6\u6210/\u73af\u5883/\u914d\u7f6e\u90e8\u7f72\u6d4b\u8bd5"),(0,r.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u9700\u8981\u6d4b\u8bd5 ",(0,r.kt)("inlineCode",{parentName:"p"},"Web")," \u4e3b\u673a\u5404\u79cd\u60c5\u51b5\uff0c\u6bd4\u5982\u7aef\u53e3\u662f\u5426\u6709\u6548\uff0c\u73af\u5883\u914d\u7f6e\u662f\u5426\u6709\u6548\uff0c\u7cfb\u7edf\u96c6\u6210\u60c5\u51b5\u7b49\u7b49\uff0c\u8fd9\u65f6\u5019\u53ea\u9700\u8981\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"Microsoft.AspNetCore.TestHost")," \u62d3\u5c55\uff0c\u7136\u540e\u5728\u6d4b\u8bd5\u7c7b\u9876\u90e8\u8d34\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"[assembly: HostingStartup(typeof(WebApplicationTests.TestHostingStartup))]\n")),(0,r.kt)("p",null,"\u5fae\u8f6f\u5df2\u7ecf\u63d0\u4f9b\u4e86\u975e\u5e38\u8be6\u7ec6\u7684\u4f8b\u5b50\uff0c\u8fd9\u91cc\u76f4\u63a5\u653e\u94fe\u63a5 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/dotnet/aspnetcore/tree/main/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests"},"https://github.com/dotnet/aspnetcore/tree/main/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"WebApplicationTests.TestHostingStartup")," \u4e3a\u60a8\u8981\u6d4b\u8bd5\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Web")," \u9879\u76ee\u542f\u52a8\u7c7b\u3002"),(0,r.kt)("h3",{id:"36194-\u96c6\u6210-furionxunit-\u62d3\u5c55"},"36.1.9.4 \u96c6\u6210 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Furion.Xunit")," \u62d3\u5c55"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Web")," \u96c6\u6210\u6d4b\u8bd5\u652f\u6301\u5b8c\u6574\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u7279\u6027\uff0c\u53c2\u8003\u4e0a\u9762\u5355\u5143\u6d4b\u8bd5\u96c6\u6210 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u7ae0\u8282\u3002"),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Furion")," \u7eaf\u51c0\u7248"),(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528\u7684\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Pure")," \u5219\u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Pure.Xunit")," \u8fd9\u4e2a\u62d3\u5c55\u5305\u3002")),(0,r.kt)("h2",{id:"36110-assert-\u65ad\u8a00"},"36.1.10 ",(0,r.kt)("inlineCode",{parentName:"h2"},"Assert")," \u65ad\u8a00"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Assert")," \u662f\u5355\u5143\u6d4b\u8bd5\u5224\u5b9a\u6210\u529f\u7684\u4f9d\u636e\uff0c\u901a\u5e38\u7b2c\u4e00\u4e2a\u53c2\u6570\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u671f\u671b\u503c"),"\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5b9e\u9645\u503c"),"\uff0c\u5bf9\u6bd4\u8fd9\u4e24\u4e2a\u503c\u662f\u5426\u4e00\u81f4\u5373\u53ef\u5224\u65ad\u6210\u529f\u4e0e\u5426\u3002\u8be6\u7ec6\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Assert")," \u9759\u6001\u65b9\u6cd5\u53ef\u67e5\u9605\u5b98\u65b9\u5e93 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/xunit/assert.xunit"},"Assert \u65b9\u6cd5")),(0,r.kt)("h2",{id:"36111-\u5355\u5143\u6d4b\u8bd5\u8986\u76d6\u7387"},"36.1.11 \u5355\u5143\u6d4b\u8bd5\u8986\u76d6\u7387"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u63d0\u4f9b\u4e86\u5206\u6790\u5355\u5143\u6d4b\u8bd5\u8986\u76d6\u7387\u5de5\u5177\uff0c\u5982\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/fgl.png")}),(0,r.kt)("h2",{id:"36112-\u53cd\u9988\u4e0e\u5efa\u8bae"},"36.1.12 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,r.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,r.kt)("hr",null),(0,r.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5355\u5143\u6d4b\u8bd5")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/dotnet/core/testing/"},"\u5728 .NET \u4e2d\u6d4b\u8bd5")," \u7ae0\u8282\u3002")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/6480f9ec.047db3cc.js b/handbook/build/assets/js/6480f9ec.047db3cc.js new file mode 100644 index 00000000000..f5c50c4a337 --- /dev/null +++ b/handbook/build/assets/js/6480f9ec.047db3cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[825],{6802:function(s){s.exports=JSON.parse('{"label":"furos","permalink":"/blog/tags/furos","allTagsPath":"/blog/tags","count":7}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/64e66f0d.b3e009d4.js b/handbook/build/assets/js/64e66f0d.b3e009d4.js new file mode 100644 index 00000000000..0e5b9e29e47 --- /dev/null +++ b/handbook/build/assets/js/64e66f0d.b3e009d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8475],{3905:function(e,n,t){t.d(n,{Zo:function(){return u},kt:function(){return k}});var i=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function l(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function r(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var p=i.createContext({}),m=function(e){var n=i.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},u=function(e){var n=m(e.components);return i.createElement(p.Provider,{value:n},e.children)},s={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},d=i.forwardRef((function(e,n){var t=e.components,a=e.mdxType,l=e.originalType,p=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=m(t),k=a,c=d["".concat(p,".").concat(k)]||d[k]||s[k]||l;return t?i.createElement(c,r(r({ref:n},u),{},{components:t})):i.createElement(c,r({ref:n},u))}));function k(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var l=t.length,r=new Array(l);r[0]=d;var o={};for(var p in n)hasOwnProperty.call(n,p)&&(o[p]=n[p]);o.originalType=e,o.mdxType="string"==typeof e?e:a,r[1]=o;for(var m=2;m child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})),b=null!=c?c:g.map((function(e){var n=e.props;return{value:n.value,label:n.label,attributes:n.attributes}})),A=(0,o.l)(b,(function(e,n){return e.value===n.value}));if(A.length>0)throw new Error('Docusaurus error: Duplicate values "'+A.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.');var v=null===k?k:null!=(n=null!=k?k:null==(t=g.find((function(e){return e.props.default})))?void 0:t.props.value)?n:g[0].props.value;if(null!==v&&!b.some((function(e){return e.value===v})))throw new Error('Docusaurus error: The has a defaultValue "'+v+'" but none of its children has the corresponding value. Available values are: '+b.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");var h=(0,p.U)(),y=h.tabGroupChoices,f=h.setTabGroupChoices,F=(0,a.useState)(v),S=F[0],D=F[1],w=[],T=(0,m.o5)().blockElementScrollPositionUntilNextRender;if(null!=N){var P=y[N];null!=P&&P!==S&&b.some((function(e){return e.value===P}))&&D(P)}var E=function(e){var n=e.currentTarget,t=w.indexOf(n),i=b[t].value;i!==S&&(T(n),D(i),null!=N&&f(N,String(i)))},L=function(e){var n,t=null;switch(e.key){case"Enter":E(e);break;case"ArrowRight":var i,a=w.indexOf(e.currentTarget)+1;t=null!=(i=w[a])?i:w[0];break;case"ArrowLeft":var l,r=w.indexOf(e.currentTarget)-1;t=null!=(l=w[r])?l:w[w.length-1]}null==(n=t)||n.focus()};return a.createElement("div",{className:(0,l.Z)("tabs-container",u)},a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,l.Z)("tabs",{"tabs--block":d},C)},b.map((function(e){var n=e.value,t=e.label,r=e.attributes;return a.createElement("li",(0,i.Z)({role:"tab",tabIndex:S===n?0:-1,"aria-selected":S===n,key:n,ref:function(e){return w.push(e)},onKeyDown:L,onClick:E},r,{className:(0,l.Z)("tabs__item",s,null==r?void 0:r.className,{"tabs__item--active":S===n})}),null!=t?t:n)}))),r?(0,a.cloneElement)(g.filter((function(e){return e.props.value===S}))[0],{className:"margin-top--md"}):a.createElement("div",{className:"margin-top--md"},g.map((function(e,n){return(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==S})}))))}function k(e){var n=(0,r.Z)();return a.createElement(d,(0,i.Z)({key:String(n)},e))}},8211:function(e,n,t){t.r(n),t.d(n,{assets:function(){return k},contentTitle:function(){return s},default:function(){return C},frontMatter:function(){return u},metadata:function(){return d},toc:function(){return c}});var i=t(3117),a=t(102),l=(t(7294),t(3905)),r=t(4996),o=t(5488),p=t(5162),m=["components"],u={id:"dynamic-api-controller",title:"5.1 \u52a8\u6001 WebAPI",sidebar_label:"5.1 \u52a8\u6001 WebAPI"},s=void 0,d={unversionedId:"dynamic-api-controller",id:"dynamic-api-controller",title:"5.1 \u52a8\u6001 WebAPI",description:"",source:"@site/docs/dynamic-api-controller.mdx",sourceDirName:".",slug:"/dynamic-api-controller",permalink:"/docs/dynamic-api-controller",draft:!1,editUrl:"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/docs/dynamic-api-controller.mdx",tags:[],version:"current",lastUpdatedBy:"MonkSoul",lastUpdatedAt:1664424894,formattedLastUpdatedAt:"Sep 29, 2022",frontMatter:{id:"dynamic-api-controller",title:"5.1 \u52a8\u6001 WebAPI",sidebar_label:"5.1 \u52a8\u6001 WebAPI"},sidebar:"docs",previous:{title:"4.2 \u9009\u9879",permalink:"/docs/options"},next:{title:"5.2 HttpContext",permalink:"/docs/httpcontext"}},k={},c=[{value:"5.1.1 \u4ec0\u4e48\u662f\u63a7\u5236\u5668",id:"511-\u4ec0\u4e48\u662f\u63a7\u5236\u5668",level:2},{value:"5.1.2 Mvc \u63a7\u5236\u5668 \u7ea6\u5b9a\u548c\u7f3a\u70b9",id:"512-mvc-\u63a7\u5236\u5668-\u7ea6\u5b9a\u548c\u7f3a\u70b9",level:2},{value:"5.1.2.1 WebAPI \u7ea6\u5b9a",id:"5121-webapi-\u7ea6\u5b9a",level:3},{value:"5.1.2.2 .NET Core WebAPI \u7f3a\u70b9",id:"5122-net-core-webapi-\u7f3a\u70b9",level:3},{value:"5.1.3 \u52a8\u6001 WebAPI \u63a7\u5236\u5668",id:"513-\u52a8\u6001-webapi-\u63a7\u5236\u5668",level:2},{value:"5.1.4 \u6ce8\u518c\u52a8\u6001 WebAPI \u670d\u52a1",id:"514-\u6ce8\u518c\u52a8\u6001-webapi-\u670d\u52a1",level:2},{value:"5.1.5 \u7b2c\u4e00\u4e2a\u4f8b\u5b50",id:"515-\u7b2c\u4e00\u4e2a\u4f8b\u5b50",level:2},{value:"5.1.6 \u52a8\u6001 WebAPI \u539f\u7406\u89e3\u6790",id:"516-\u52a8\u6001-webapi-\u539f\u7406\u89e3\u6790",level:2},{value:"5.1.6.1 \u63a7\u5236\u5668\u7279\u6027\u63d0\u4f9b\u5668",id:"5161-\u63a7\u5236\u5668\u7279\u6027\u63d0\u4f9b\u5668",level:3},{value:"5.1.6.2 \u5e94\u7528\u6a21\u578b\u8f6c\u6362\u5668",id:"5162-\u5e94\u7528\u6a21\u578b\u8f6c\u6362\u5668",level:3},{value:"5.1.7 \u52a8\u6001 WebAPI \u914d\u7f6e\u7ea6\u5b9a",id:"517-\u52a8\u6001-webapi-\u914d\u7f6e\u7ea6\u5b9a",level:2},{value:"5.1.7.1 \u63a7\u5236\u5668\u9ed8\u8ba4\u7ea6\u5b9a",id:"5171-\u63a7\u5236\u5668\u9ed8\u8ba4\u7ea6\u5b9a",level:3},{value:"5.1.7.2 \u52a8\u4f5c\u65b9\u6cd5\u9ed8\u8ba4\u7ea6\u5b9a",id:"5172-\u52a8\u4f5c\u65b9\u6cd5\u9ed8\u8ba4\u7ea6\u5b9a",level:3},{value:"5.1.7.3 \u8bf7\u6c42\u8c13\u8bcd\u9ed8\u8ba4\u7ea6\u5b9a",id:"5173-\u8bf7\u6c42\u8c13\u8bcd\u9ed8\u8ba4\u7ea6\u5b9a",level:3},{value:"5.1.7.4 \u8def\u7531\u5730\u5740\u9ed8\u8ba4\u7ea6\u5b9a",id:"5174-\u8def\u7531\u5730\u5740\u9ed8\u8ba4\u7ea6\u5b9a",level:3},{value:"5.1.7.5 \u5176\u4ed6\u7ea6\u5b9a",id:"5175-\u5176\u4ed6\u7ea6\u5b9a",level:3},{value:"5.1.8 \u66f4\u591a\u4f8b\u5b50",id:"518-\u66f4\u591a\u4f8b\u5b50",level:2},{value:"5.1.8.1 \u591a\u79cd\u8bf7\u6c42\u8c13\u8bcd\u65b9\u6cd5",id:"5181-\u591a\u79cd\u8bf7\u6c42\u8c13\u8bcd\u65b9\u6cd5",level:3},{value:"5.1.8.2 \u591a\u4e2a\u81ea\u5b9a\u4e49\u52a8\u4f5c\u65b9\u6cd5",id:"5182-\u591a\u4e2a\u81ea\u5b9a\u4e49\u52a8\u4f5c\u65b9\u6cd5",level:3},{value:"5.1.8.3 \u5e26\u53c2\u6570\u52a8\u4f5c\u65b9\u6cd5",id:"5183-\u5e26\u53c2\u6570\u52a8\u4f5c\u65b9\u6cd5",level:3},{value:"5.1.8.4 GET/HEAD \u7c7b\u7c7b\u578b\u53c2\u6570",id:"5184-gethead-\u7c7b\u7c7b\u578b\u53c2\u6570",level:3},{value:"5.1.8.5 \u81ea\u5b9a\u4e49\u53c2\u6570\u4f4d\u7f6e",id:"5185-\u81ea\u5b9a\u4e49\u53c2\u6570\u4f4d\u7f6e",level:3},{value:"5.1.8.6 \u81ea\u5b9a\u4e49\u8bf7\u6c42\u8c13\u8bcd",id:"5186-\u81ea\u5b9a\u4e49\u8bf7\u6c42\u8c13\u8bcd",level:3},{value:"5.1.8.7 \u652f\u6301\u591a\u4e2a\u8c13\u8bcd",id:"5187-\u652f\u6301\u591a\u4e2a\u8c13\u8bcd",level:3},{value:"5.1.8.8 \u652f\u6301\u81ea\u5b9a\u4e49\u8def\u7531",id:"5188-\u652f\u6301\u81ea\u5b9a\u4e49\u8def\u7531",level:3},{value:"5.1.8.9 \u591a\u8def\u7531\u968f\u610f\u7ec4\u5408",id:"5189-\u591a\u8def\u7531\u968f\u610f\u7ec4\u5408",level:3},{value:"5.1.8.10 \u652f\u6301\u7248\u672c\u63a7\u5236",id:"51810-\u652f\u6301\u7248\u672c\u63a7\u5236",level:3},{value:"5.1.8.11 \u4e0d\u516c\u5f00\u63a7\u5236\u5668\u6216\u52a8\u4f5c\u65b9\u6cd5",id:"51811-\u4e0d\u516c\u5f00\u63a7\u5236\u5668\u6216\u52a8\u4f5c\u65b9\u6cd5",level:3},{value:"5.1.8.12 \u4fdd\u6301\u63a7\u5236\u5668\u548c\u65b9\u6cd5\u547d\u540d",id:"51812-\u4fdd\u6301\u63a7\u5236\u5668\u548c\u65b9\u6cd5\u547d\u540d",level:3},{value:"5.1.8.13 \u65b9\u6cd5\u53c2\u6570 [FromQuery] \u5316/\u53c2\u6570\u975e\u5fc5\u586b/\u53c2\u6570\u53ef\u9009",id:"51813-\u65b9\u6cd5\u53c2\u6570-fromquery-\u5316\u53c2\u6570\u975e\u5fc5\u586b\u53c2\u6570\u53ef\u9009",level:3},{value:"5.1.8.14 \u53c2\u6570\u7ed1\u5b9a\u914d\u7f6e",id:"51814-\u53c2\u6570\u7ed1\u5b9a\u914d\u7f6e",level:3},{value:"5.1.8.15 \u81ea\u5b9a\u4e49\u6839\u636e\u65b9\u6cd5\u540d\u751f\u6210 [HttpMethod] \u89c4\u5219",id:"51815-\u81ea\u5b9a\u4e49\u6839\u636e\u65b9\u6cd5\u540d\u751f\u6210-httpmethod-\u89c4\u5219",level:3},{value:"5.1.8.16 \u8def\u7531\u53c2\u6570\u975e\u5fc5\u586b/\u9009\u586b",id:"51816-\u8def\u7531\u53c2\u6570\u975e\u5fc5\u586b\u9009\u586b",level:3},{value:"5.1.8.17 [FormRoute] \u8def\u7531\u7ea6\u675f",id:"51817-formroute-\u8def\u7531\u7ea6\u675f",level:3},{value:"5.1.8.18 \u5c0f\u9a7c\u5cf0 \u8def\u7531\u8def\u5f84",id:"51818-\u5c0f\u9a7c\u5cf0-\u8def\u7531\u8def\u5f84",level:3},{value:"5.1.9 [ApiDescriptionSettings]",id:"519-apidescriptionsettings",level:2},{value:"5.1.9.1 \u5185\u7f6e\u914d\u7f6e",id:"5191-\u5185\u7f6e\u914d\u7f6e",level:3},{value:"5.1.9.2 Name \u914d\u7f6e",id:"5192-name-\u914d\u7f6e",level:3},{value:"5.1.9.3 KeepName \u914d\u7f6e",id:"5193-keepname-\u914d\u7f6e",level:3},{value:"5.1.9.4 SplitCamelCase \u914d\u7f6e",id:"5194-splitcamelcase-\u914d\u7f6e",level:3},{value:"5.1.9.5 KeepVerb \u914d\u7f6e",id:"5195-keepverb-\u914d\u7f6e",level:3},{value:"5.1.9.6 Enabled \u914d\u7f6e",id:"5196-enabled-\u914d\u7f6e",level:3},{value:"5.1.9.7 Module \u914d\u7f6e",id:"5197-module-\u914d\u7f6e",level:3},{value:"5.1.9.8 Version \u914d\u7f6e",id:"5198-version-\u914d\u7f6e",level:3},{value:"5.1.9.9 Groups \u914d\u7f6e",id:"5199-groups-\u914d\u7f6e",level:3},{value:"5.1.9.10 Tag \u914d\u7f6e",id:"51910-tag-\u914d\u7f6e",level:3},{value:"\u672a\u8d34\u6807\u7b7e\u4e4b\u524d",id:"\u672a\u8d34\u6807\u7b7e\u4e4b\u524d",level:4},{value:"\u8d34\u6807\u7b7e\u4e4b\u540e",id:"\u8d34\u6807\u7b7e\u4e4b\u540e",level:4},{value:"5.1.10 DynamicApiControllerSettings \u914d\u7f6e",id:"5110-dynamicapicontrollersettings-\u914d\u7f6e",level:2},{value:"5.1.10.1 \u652f\u6301 Mvc \u63a7\u5236\u5668 \u52a8\u6001\u914d\u7f6e",id:"51101-\u652f\u6301-mvc-\u63a7\u5236\u5668-\u52a8\u6001\u914d\u7f6e",level:3},{value:"5.1.11 \u5173\u4e8e AOP \u62e6\u622a",id:"5111-\u5173\u4e8e-aop-\u62e6\u622a",level:2},{value:"5.1.12 \u8bbe\u7f6e api \u8d85\u65f6\u8bf7\u6c42\u65f6\u95f4",id:"5112-\u8bbe\u7f6e-api-\u8d85\u65f6\u8bf7\u6c42\u65f6\u95f4",level:2},{value:"5.1.13 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"5113-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],N={toc:c};function C(e){var n=e.components,t=(0,a.Z)(e,m);return(0,l.kt)("wrapper",(0,i.Z)({},N,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"\u52a8\u6001WebAPI")," \u5b9e\u9645\u4e0a\u5c31\u662f\u5c06\u666e\u901a\u7684\u7c7b\u53d8\u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"Controller"),"\uff0c\u4e5f\u5c31\u662f ",(0,l.kt)("inlineCode",{parentName:"p"},"\u52a8\u6001WebAPI")," \u5c31\u662f\u63a7\u5236\u5668\uff0c\u652f\u6301\u63a7\u5236\u5668\u4e00\u5207\u529f\u80fd\u3002")),(0,l.kt)("h2",{id:"511-\u4ec0\u4e48\u662f\u63a7\u5236\u5668"},"5.1.1 \u4ec0\u4e48\u662f\u63a7\u5236\u5668"),(0,l.kt)("p",null,"\u7b80\u5355\u6765\u8bf4\uff0c\u63a7\u5236\u5668\u662f\u4e00\u4e2a\u627f\u4e0a\u542f\u4e0b\u7684\u4f5c\u7528\uff0c\u6839\u636e\u7528\u6237\u8f93\u5165\uff0c\u6267\u884c\u54cd\u5e94\u884c\u4e3a\uff08\u52a8\u4f5c\u65b9\u6cd5\uff09\uff0c\u540c\u65f6\u5728\u884c\u4e3a\u4e2d\u8c03\u7528\u6a21\u578b\u7684\u4e1a\u52a1\u903b\u8f91\uff0c\u8fd4\u56de\u7ed9\u7528\u6237\u7ed3\u679c\uff08\u89c6\u56fe\uff09\u3002"),(0,l.kt)("img",{src:(0,r.Z)("img/kzq.png")}),(0,l.kt)("p",null),(0,l.kt)("p",null,"\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u4e2d\uff0c\u63a7\u5236\u5668\u6709\u4e24\u79cd\u8868\u73b0\u5f62\u5f0f\uff1a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Mvc"),"\uff08\u5e26\u89c6\u56fe\uff09"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"WebAPI"),"\uff08RESTful API\uff09")),(0,l.kt)(o.Z,{defaultValue:"mvc",values:[{label:"Mvc \u63a7\u5236\u5668",value:"mvc"},{label:"WebAPI \u63a7\u5236\u5668",value:"webapi"}],mdxType:"Tabs"},(0,l.kt)(p.Z,{value:"mvc",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,7}",showLineNumbers:!0,"":!0,"{1,5,7}":!0},"using Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Web.Entry.Controllers\n{\n public class MvcController : Controller\n {\n public IActionResult Index()\n {\n return View();\n }\n }\n}\n"))),(0,l.kt)(p.Z,{value:"webapi",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,6,8,9}",showLineNumbers:!0,"":!0,"{1,5,6,8,9}":!0},'using Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Web.Entry.Controllers\n{\n [Route("api/[controller]")]\n public class WebApiController : ControllerBase\n {\n [HttpGet]\n public IActionResult Get()\n {\n return Content(nameof(Furion));\n }\n }\n}\n')))),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Mvc")," \u63a7\u5236\u5668\u548c ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u63a7\u5236\u5668\u6700\u5927\u7684\u533a\u522b\u662f ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u63a7\u5236\u5668\u4e0d\u5e26 ",(0,l.kt)("strong",{parentName:"p"},"\u89c6\u56fe")," \u548c\u901a\u8fc7 ",(0,l.kt)("strong",{parentName:"p"},"\u8bf7\u6c42\u8c13\u8bcd\u548c\u8def\u7531\u5730\u5740\u54cd\u5e94\u884c\u4e3a"),"\u3002"),(0,l.kt)("h2",{id:"512-mvc-\u63a7\u5236\u5668-\u7ea6\u5b9a\u548c\u7f3a\u70b9"},"5.1.2 ",(0,l.kt)("inlineCode",{parentName:"h2"},"Mvc \u63a7\u5236\u5668")," \u7ea6\u5b9a\u548c\u7f3a\u70b9"),(0,l.kt)("p",null,"\u5728\u5b66\u4e60\u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u63a7\u5236\u5668\u4e4b\u524d\uff0c\u9996\u5148\u4e86\u89e3 ",(0,l.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u4e2d ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u7684\u4e00\u4e9b\u7ea6\u5b9a\u548c\u6ce8\u610f\u4e8b\u9879\u3002"),(0,l.kt)("h3",{id:"5121-webapi-\u7ea6\u5b9a"},"5.1.2.1 ",(0,l.kt)("inlineCode",{parentName:"h3"},"WebAPI")," \u7ea6\u5b9a"),(0,l.kt)("p",null,"\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u5e94\u7528\u4e2d\uff0c\u4e00\u4e2a ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u63a7\u5236\u5668\u9700\u9075\u5faa\u4ee5\u4e0b\u7ea6\u5b9a\uff1a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u63a7\u5236\u5668\u7c7b",(0,l.kt)("strong",{parentName:"li"},"\u5fc5\u987b\u7ee7\u627f ",(0,l.kt)("inlineCode",{parentName:"strong"},"ControllerBase")," \u6216\u95f4\u63a5\u7ee7\u627f")),(0,l.kt)("li",{parentName:"ul"},"\u52a8\u4f5c\u65b9\u6cd5",(0,l.kt)("strong",{parentName:"li"},"\u5fc5\u987b\u8d34\u6709 ",(0,l.kt)("inlineCode",{parentName:"strong"},"[HttpMethod]")," \u7279\u6027\uff0c\u5982\uff1a",(0,l.kt)("inlineCode",{parentName:"strong"},"[HttpGet]"))),(0,l.kt)("li",{parentName:"ul"},"\u63a7\u5236\u5668\u6216\u52a8\u4f5c\u65b9\u6cd5",(0,l.kt)("strong",{parentName:"li"},"\u81f3\u5c11\u6709\u4e00\u4e2a\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"strong"},"[Route]")," \u7279\u6027")),(0,l.kt)("li",{parentName:"ul"},"\u751f\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"WebAPI")," \u8def\u7531\u5730\u5740\u65f6\u4f1a\u81ea\u52a8\u53bb\u6389\u63a7\u5236\u5668\u540d\u79f0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Controller")," \u540e\u7f00\uff0c\u540c\u65f6\u4e5f\u4f1a\u53bb\u6389\u52a8\u4f5c\u65b9\u6cd5\u5339\u914d\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpVerb")," \u8c13\u8bcd\uff0c\u5982 ",(0,l.kt)("inlineCode",{parentName:"li"},"GET\uff0cPOST\uff0cDELETE\uff0cPUT")," \u7b49"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"\u4e0d\u652f\u6301\u8fd4\u56de\u975e ",(0,l.kt)("inlineCode",{parentName:"strong"},"IEnumerable")," \u6cdb\u578b\u5bf9\u8c61")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"\u4e0d\u652f\u6301\u7c7b\u7c7b\u578b\u53c2\u6570\u5728 ",(0,l.kt)("inlineCode",{parentName:"strong"},"GET\uff0cHEAD")," \u8bf7\u6c42\u4e0b\u751f\u6210 ",(0,l.kt)("inlineCode",{parentName:"strong"},"Query")," \u53c2\u6570"))),(0,l.kt)("p",null,"\u9664\u4e86\u4e0a\u8ff0\u7ea6\u5b9a\u5916\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u8def\u7531\u5730\u5740",(0,l.kt)("strong",{parentName:"p"},"\u57fa\u672c\u9760\u624b\u5de5\u5b8c\u6210"),"\uff0c\u4e0d\u5229\u4e8e\u4e66\u5199\uff0c\u4e0d\u5229\u4e8e\u7ef4\u62a4\uff0c\u518d\u8005\uff0c\u5728\u79fb\u52a8\u5e94\u7528\u5bf9\u63a5\u4e2d\u96be\u4ee5\u8fdb\u884c\u591a\u7248\u672c\u63a7\u5236\u3002"),(0,l.kt)("h3",{id:"5122-net-core-webapi-\u7f3a\u70b9"},"5.1.2.2 ",(0,l.kt)("inlineCode",{parentName:"h3"},".NET Core WebAPI")," \u7f3a\u70b9"),(0,l.kt)("p",null,"\u901a\u8fc7\u4e0a\u4e00\u7ae0\u8282\u53ef\u4ee5\u770b\u51fa\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u5e94\u7528\u5b9e\u73b0 ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u9700\u8981\u9075\u5faa\u79cd\u79cd\u7ea6\u5b9a\uff0c\u800c\u4e14\u5bb9\u6613\u51fa\u9519\u3002"),(0,l.kt)("p",null,"\u9664\u4e86\u8fd9\u4e9b\u7ea6\u5b9a\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},".NET Core WebAPI")," \u6709\u4ee5\u4e0b\u7f3a\u70b9\uff1a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u8def\u7531\u5730\u5740\u57fa\u672c\u9760\u624b\u5de5\u5b8c\u6210"),(0,l.kt)("li",{parentName:"ul"},"\u5728\u73b0\u5728\u79fb\u52a8\u4e3a\u738b\u7684\u65f6\u4ee3\uff0c\u4e0d\u5229\u4e8e\u8fdb\u884c\u591a\u7248\u672c\u63a7\u5236"),(0,l.kt)("li",{parentName:"ul"},"\u5bf9\u63a5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u6587\u6863\u5206\u7ec4\u6bd4\u8f83\u590d\u6742"),(0,l.kt)("li",{parentName:"ul"},"\u5b9e\u73b0 ",(0,l.kt)("inlineCode",{parentName:"li"},"Policy")," \u7b56\u7565\u6388\u6743\u4e5f\u6bd4\u8f83\u590d\u6742"),(0,l.kt)("li",{parentName:"ul"},"\u4e0d\u652f\u6301\u63a7\u5236\u5668\u70ed\u63d2\u62d4\u63d2\u4ef6\u5316"),(0,l.kt)("li",{parentName:"ul"},"\u96be\u4ee5\u5b9e\u73b0\u590d\u6742\u81ea\u5b9a\u4e49\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"RESTful API")," \u98ce\u683c")),(0,l.kt)("h2",{id:"513-\u52a8\u6001-webapi-\u63a7\u5236\u5668"},"5.1.3 \u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"h2"},"WebAPI")," \u63a7\u5236\u5668"),(0,l.kt)("p",null,"\u9488\u5bf9\u4ee5\u4e0a ",(0,l.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u63d0\u4f9b\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u5fc5\u987b\u9075\u5faa\u7684\u7ea6\u5b9a\u548c\u4e0d\u53ef\u907f\u514d\u7684\u7f3a\u70b9\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u521b\u9020\u51fa\u4e00\u79cd\u66f4\u52a0\u7075\u6d3b\u521b\u5efa ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u63a7\u5236\u5668\u7684\u65b9\u5f0f\u3002"),(0,l.kt)("p",null,"\u8fd9\u4e2a\u65b9\u5f0f\u5728\u7ee7\u627f\u4e86 ",(0,l.kt)("inlineCode",{parentName:"p"},"ASP.NET Core WebAPI")," \u6240\u6709\u4f18\u70b9\uff0c\u540c\u65f6\u8fdb\u884c\u4e86\u5927\u91cf\u62d3\u5c55\u548c\u4f18\u5316\u3002\u4f18\u5316\u540e\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u5177\u6709\u4ee5\u4e0b\u4f18\u70b9\uff1a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u5177\u5907\u539f\u6709\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"ControllerBase")," \u6240\u6709\u529f\u80fd"),(0,l.kt)("li",{parentName:"ul"},"\u652f\u6301",(0,l.kt)("strong",{parentName:"li"},"\u4efb\u610f\u516c\u5f00 \u975e\u9759\u6001 \u975e\u62bd\u8c61 \u975e\u6cdb\u578b\u7c7b"),"\u8f6c\u63a7\u5236\u5668"),(0,l.kt)("li",{parentName:"ul"},"\u63d0\u4f9b\u66f4\u52a0\u7075\u6d3b\u65b9\u4fbf\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"IDynamicApiController")," \u7a7a\u63a5\u53e3\u6216 ",(0,l.kt)("inlineCode",{parentName:"li"},"[DynamicApiController]")," \u7279\u6027\u66ff\u4ee3 ",(0,l.kt)("inlineCode",{parentName:"li"},"ControllerBase")," \u62bd\u8c61\u7c7b"),(0,l.kt)("li",{parentName:"ul"},"\u65e0\u9700\u624b\u52a8\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpMethod]")," \u7279\u6027\uff0c\u540c\u65f6\u652f\u6301\u4e00\u4e2a\u52a8\u4f5c\u65b9\u6cd5\u591a\u4e2a ",(0,l.kt)("inlineCode",{parentName:"li"},"HttpVerb")),(0,l.kt)("li",{parentName:"ul"},"\u65e0\u9700\u624b\u52a8\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"li"},"[Route]")," \u7279\u6027\uff0c\u652f\u6301\u66f4\u52a0\u7075\u6d3b\u7684\u914d\u7f6e\u53ca\u81ea\u52a8\u8def\u7531\u751f\u6210"),(0,l.kt)("li",{parentName:"ul"},"\u652f\u6301\u8fd4\u56de\u6cdb\u578b\u63a5\u53e3\uff0c\u6cdb\u578b\u7c7b"),(0,l.kt)("li",{parentName:"ul"},"\u548c ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u6df1\u5ea6\u7ed3\u5408\uff0c\u63d0\u4f9b\u6781\u5176\u65b9\u4fbf\u7684\u521b\u5efa ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u5206\u7ec4\u914d\u7f6e"),(0,l.kt)("li",{parentName:"ul"},"\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Basic Auth\uff0cJwt\uff0cApiKey")," \u7b49\u591a\u79cd\u6743\u9650\u7075\u6d3b\u914d\u7f6e"),(0,l.kt)("li",{parentName:"ul"},"\u652f\u6301\u63a7\u5236\u5668\u3001\u52a8\u4f5c\u65b9\u6cd5",(0,l.kt)("strong",{parentName:"li"},"\u7248\u672c\u63a7\u5236"),"\u529f\u80fd"),(0,l.kt)("li",{parentName:"ul"},"\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"GET\u3001HEAD")," \u8bf7\u6c42\u81ea\u52a8\u8f6c\u6362 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u7c7b\u7c7b\u578b\u53c2\u6570")),(0,l.kt)("li",{parentName:"ul"},"\u652f\u6301\u751f\u6210 ",(0,l.kt)("inlineCode",{parentName:"li"},"OAS3")," \u63a5\u53e3\u89c4\u8303")),(0,l.kt)("h2",{id:"514-\u6ce8\u518c\u52a8\u6001-webapi-\u670d\u52a1"},"5.1.4 \u6ce8\u518c\u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"h2"},"WebAPI")," \u670d\u52a1"),(0,l.kt)("admonition",{title:"\u5907\u6ce8",type:"important"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},".AddDynamicApiControllers()")," \u9ed8\u8ba4\u5df2\u7ecf\u96c6\u6210\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"AddInject()")," \u4e2d\u4e86\uff0c\u65e0\u9700\u518d\u6b21\u6ce8\u518c\u3002\u4e5f\u5c31\u662f\u4e0b\u5217\u4ee3\u7801\u53ef\u4e0d\u914d\u7f6e\u3002")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {11} title="Furion.Web.Core\\FurWebCoreStartup.cs"',showLineNumbers:!0,"":!0,"{11}":!0,title:'"Furion.Web.Core\\FurWebCoreStartup.cs"'},"using Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.Web.Core\n{\n [AppStartup(800)]\n public sealed class FurWebCoreStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddControllers()\n .AddDynamicApiControllers();\n }\n }\n}\n")),(0,l.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},".AddDynamicApiControllers()")," \u5fc5\u987b\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"services.AddControllers()")," \u4e4b\u540e\u6ce8\u518c\u3002")),(0,l.kt)("h2",{id:"515-\u7b2c\u4e00\u4e2a\u4f8b\u5b50"},"5.1.5 \u7b2c\u4e00\u4e2a\u4f8b\u5b50"),(0,l.kt)("p",null,"\u521b\u5efa\u4e00\u4e2a ",(0,l.kt)("inlineCode",{parentName:"p"},"FurionAppService")," \u7c7b\u7ee7\u627f ",(0,l.kt)("inlineCode",{parentName:"p"},"IDynamicApiController")," \u63a5\u53e3 \u6216 \u8d34 ",(0,l.kt)("inlineCode",{parentName:"p"},"[DynamicApiController]")," \u7279\u6027\uff0c\u5e76\u5728\u8fd9\u4e2a\u7c7b\u4e2d\u7f16\u5199\u4e00\u4e2a ",(0,l.kt)("inlineCode",{parentName:"p"},"Get")," \u65b9\u6cd5\u3002"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"IDynamicApiController")," \u65b9\u5f0f"))),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,7}",showLineNumbers:!0,"":!0,"{1,5,7}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public string Get()\n {\n return $"Hello {nameof(Furion)}";\n }\n }\n}\n')),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},(0,l.kt)("inlineCode",{parentName:"strong"},"[DynamicApiController]")," \u65b9\u5f0f"))),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,8}",showLineNumbers:!0,"":!0,"{1,5,8}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [DynamicApiController]\n public class FurionAppService\n {\n public string Get()\n {\n return $"Hello {nameof(Furion)}";\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u4e00\u4e2a ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u63a5\u53e3\u5c31\u8fd9\u4e48\u751f\u6210\u4e86\u3002"),(0,l.kt)("img",{src:(0,r.Z)("img/dyglz.gif")}),(0,l.kt)("h2",{id:"516-\u52a8\u6001-webapi-\u539f\u7406\u89e3\u6790"},"5.1.6 \u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"h2"},"WebAPI")," \u539f\u7406\u89e3\u6790"),(0,l.kt)("h3",{id:"5161-\u63a7\u5236\u5668\u7279\u6027\u63d0\u4f9b\u5668"},"5.1.6.1 \u63a7\u5236\u5668\u7279\u6027\u63d0\u4f9b\u5668"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4f1a\u5728\u5e94\u7528\u542f\u52a8\u65f6\u6ce8\u518c ",(0,l.kt)("inlineCode",{parentName:"p"},"DynamicApiControllerFeatureProvider")," \u63a7\u5236\u5668\u7279\u6027\u63d0\u4f9b\u5668\uff0c\u8be5\u63d0\u4f9b\u5668\u7ee7\u627f\u81ea ",(0,l.kt)("inlineCode",{parentName:"p"},"ControllerFeatureProvider")," \u7c7b\u3002"),(0,l.kt)("p",null,"\u63a5\u7740\u91cd\u5199 ",(0,l.kt)("inlineCode",{parentName:"p"},"bool IsController(TypeInfo typeInfo)")," \u65b9\u6cd5\uff0c\u7528\u6765\u6807\u8bc6\u63a7\u5236\u5668\u7c7b\u578b\u3002\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c",(0,l.kt)("strong",{parentName:"p"},"\u7ee7\u627f\u81ea ",(0,l.kt)("inlineCode",{parentName:"strong"},"ControllerBase")," \u7c7b\u6216 ",(0,l.kt)("inlineCode",{parentName:"strong"},"IDynamicApiController")," \u63a5\u53e3\u6216 ",(0,l.kt)("inlineCode",{parentName:"strong"},"[DynamicApiController]")," \u7279\u6027\u90fd\u4f1a\u88ab\u6807\u8bb0\u4e3a\u63a7\u5236\u5668\u7c7b\u578b\u3002")),(0,l.kt)("h3",{id:"5162-\u5e94\u7528\u6a21\u578b\u8f6c\u6362\u5668"},"5.1.6.2 \u5e94\u7528\u6a21\u578b\u8f6c\u6362\u5668"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u540c\u65f6\u5728\u5e94\u7528\u542f\u52a8\u65f6\u6ce8\u518c ",(0,l.kt)("inlineCode",{parentName:"p"},"DynamicApiControllerApplicationModelConvention")," \u5e94\u7528\u6a21\u578b\u8f6c\u6362\u5668\uff0c\u8be5\u8f6c\u6362\u5668\u7ee7\u627f\u81ea ",(0,l.kt)("inlineCode",{parentName:"p"},"IApplicationModelConvention")," \u63a5\u53e3\u3002"),(0,l.kt)("p",null,"\u63a5\u7740\u5b9e\u73b0 ",(0,l.kt)("inlineCode",{parentName:"p"},"void Apply(ApplicationModel application)")," \u63a5\u53e3\u65b9\u6cd5\u3002\u5728\u8be5\u65b9\u6cd5\u4e2d\u914d\u7f6e\u63a7\u5236\u5668\u540d\u79f0\u3001\u8def\u7531\u3001\u5bfc\u51fa\u53ef\u89c1\u6027\u53ca\u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\u3001\u8def\u7531\u3001\u5bfc\u51fa\u53ef\u89c1\u6027\u7b49\u3002"),(0,l.kt)("p",null,"\u5b9e\u9645\u4e0a\u8be5\u65b9\u6cd5\u505a\u7684\u5c31\u662f\u6309\u7167 ",(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("a",{parentName:"strong",href:"#521-webapi-%E7%BA%A6%E5%AE%9A"},"WebAPI \u7ea6\u5b9a"))," \u63d0\u524d\u5e2e\u6211\u4eec\u914d\u7f6e\u597d\u8def\u7531\u3001\u8bf7\u6c42\u8c13\u8bcd\u7b49\u4fe1\u606f\u3002\u907f\u514d\u4e86\u624b\u52a8\u914d\u7f6e\u7684\u540c\u65f6\u8fd8\u589e\u52a0\u4e86\u8bb8\u591a\u65b0\u7279\u6027\uff0c\u5982",(0,l.kt)("strong",{parentName:"p"},"\u7248\u672c\u63a7\u5236\u3002")),(0,l.kt)("h2",{id:"517-\u52a8\u6001-webapi-\u914d\u7f6e\u7ea6\u5b9a"},"5.1.7 \u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"h2"},"WebAPI")," \u914d\u7f6e\u7ea6\u5b9a"),(0,l.kt)("h3",{id:"5171-\u63a7\u5236\u5668\u9ed8\u8ba4\u7ea6\u5b9a"},"5.1.7.1 \u63a7\u5236\u5668\u9ed8\u8ba4\u7ea6\u5b9a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u751f\u6210\u63a7\u5236\u5668\u540d\u79f0\u9ed8\u8ba4\u53bb\u9664\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"AppServices\uff0cAppService\uff0cApiController\uff0cController\uff0cServices\uff0cService")," \u4f5c\u4e3a\u524d\u540e\u7f00\u7684\u5b57\u7b26\u4e32\u3002\u89c1\u7b2c\u4e00\u4e2a\u4f8b\u5b50\u4e2d\u7684 ",(0,l.kt)("inlineCode",{parentName:"li"},"FurionAppService -> Furion")," ",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e")),(0,l.kt)("li",{parentName:"ul"},"\u63a7\u5236\u5668\u540d\u79f0\u5e26 ",(0,l.kt)("inlineCode",{parentName:"li"},"V[0-9_]")," \u7ed3\u5c3e\u7684\uff0c\u4f1a\u81ea\u52a8\u751f\u6210\u63a7\u5236\u5668\u7248\u672c\u53f7\uff0c\u5982 ",(0,l.kt)("inlineCode",{parentName:"li"},"FurionAppServiceV2 -> Furion@2"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"FurionAppServiceV1_1_0 -> Furion@1.1.0"),"\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u7248\u672c\u5206\u9694\u7b26\u914d\u7f6e")),(0,l.kt)("li",{parentName:"ul"},"\u63a7\u5236\u540d\u79f0\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u9a86\u9a7c\u547d\u540d\uff08CamelCase\uff09")," \u4f1a\u81ea\u52a8\u5207\u5272\u6210\u591a\u4e2a\u5355\u8bcd ",(0,l.kt)("inlineCode",{parentName:"li"},"-")," \u8fde\u63a5\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e"))),(0,l.kt)("h3",{id:"5172-\u52a8\u4f5c\u65b9\u6cd5\u9ed8\u8ba4\u7ea6\u5b9a"},"5.1.7.2 \u52a8\u4f5c\u65b9\u6cd5\u9ed8\u8ba4\u7ea6\u5b9a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u751f\u6210\u7684\u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\u9ed8\u8ba4\u53bb\u9664\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Post/Add/Create/Insert/Submit\uff0cGetAll/GetList/Get/Find/Fetch/Query/Search\uff0cPut/Update\uff0cDelete/Remove/Clear\uff0cPatch")," \u5f00\u5934\u7684\u5b57\u7b26\u4e32\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e")),(0,l.kt)("li",{parentName:"ul"},"\u751f\u6210\u7684\u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\u9ed8\u8ba4\u53bb\u9664\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Async")," \u4f5c\u4e3a\u524d\u540e\u7f00\u7684\u5b57\u7b26\u4e32\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e")),(0,l.kt)("li",{parentName:"ul"},"\u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\u5e26 ",(0,l.kt)("inlineCode",{parentName:"li"},"V[0-9_]")," \u7ed3\u5c3e\u7684\uff0c\u4f1a\u81ea\u52a8\u751f\u6210\u52a8\u4f5c\u65b9\u6cd5\u7248\u672c\u53f7\uff0c\u5982 ",(0,l.kt)("inlineCode",{parentName:"li"},"ChangePasswordV2 -> ChangePassword@2"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"ChangePasswordV1_1_0 -> ChangePassword@1.1.0"),"\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u7248\u672c\u5206\u9694\u7b26\u914d\u7f6e")),(0,l.kt)("li",{parentName:"ul"},"\u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u9a86\u9a7c(\u9a7c\u5cf0)/\u5e15\u65af\u5361\u547d\u540d\uff08CamelCase/Pascal\uff09")," \u4f1a\u81ea\u52a8\u5207\u5272\u6210\u591a\u4e2a\u5355\u8bcd ",(0,l.kt)("inlineCode",{parentName:"li"},"-")," \u8fde\u63a5\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e")),(0,l.kt)("li",{parentName:"ul"},"\u52a8\u4f5c\u65b9\u6cd5\u53c2\u6570\u5c06\u81ea\u52a8\u8f6c\u4e3a\u5c0f\u5199\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e"))),(0,l.kt)("h3",{id:"5173-\u8bf7\u6c42\u8c13\u8bcd\u9ed8\u8ba4\u7ea6\u5b9a"},"5.1.7.3 \u8bf7\u6c42\u8c13\u8bcd\u9ed8\u8ba4\u7ea6\u5b9a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u52a8\u4f5c\u65b9\u6cd5\u540d",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Post/Add/Create/Insert/Submit/Change")," \u5f00\u5934\uff0c\u5219\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpPost]")," \u7279\u6027\u3002"),(0,l.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"GetAll/GetList/Get/Find/Fetch/Query")," \u5f00\u5934\uff0c\u5219\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpGet]")," \u7279\u6027\u3002"),(0,l.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Put/Update")," \u5f00\u5934\uff0c\u5219\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpPut]")," \u7279\u6027\u3002"),(0,l.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Delete/Remove/Clear")," \u5f00\u5934\uff0c\u5219\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpDelete]")," \u7279\u6027\u3002"),(0,l.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Patch")," \u5f00\u5934\uff0c\u5219\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpPatch]")," \u7279\u6027"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e")))),(0,l.kt)("li",{parentName:"ul"},"\u5982\u679c\u4e0d\u5728\u4e0a\u9762\u7ea6\u5b9a\u4e2d\uff0c\u5219\u9ed8\u8ba4\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpPost]")," \u7279\u6027\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e"))),(0,l.kt)("h3",{id:"5174-\u8def\u7531\u5730\u5740\u9ed8\u8ba4\u7ea6\u5b9a"},"5.1.7.4 \u8def\u7531\u5730\u5740\u9ed8\u8ba4\u7ea6\u5b9a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u9ed8\u8ba4\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"api")," \u5f00\u5934\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e")),(0,l.kt)("li",{parentName:"ul"},"\u9ed8\u8ba4\u8f6c\u6362\u4e3a\u5c0f\u5199\u8def\u7531\u5730\u5740\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e")),(0,l.kt)("li",{parentName:"ul"},"\u751f\u6210\u63a7\u5236\u5668\u8def\u7531\u6a21\u677f\u683c\u5f0f\u4e3a\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"api/\u524d\u7f6e\u53c2\u6570\u5217\u8868/\u6a21\u5757\u540d\u6216\u9ed8\u8ba4\u533a\u57df\u540d/[controller@\u7248\u672c\u53f7]/\u540e\u7f6e\u53c2\u6570\u5217\u8868")),(0,l.kt)("li",{parentName:"ul"},"\u751f\u6210\u52a8\u4f5c\u65b9\u6cd5\u8def\u7531\u6a21\u677f\u683c\u5f0f\u4e3a\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"\u524d\u7f6e\u53c2\u6570\u5217\u8868/\u6a21\u5757\u540d/[action@\u7248\u672c\u53f7]/\u540e\u7f6e\u53c2\u6570\u5217\u8868"))),(0,l.kt)("h3",{id:"5175-\u5176\u4ed6\u7ea6\u5b9a"},"5.1.7.5 \u5176\u4ed6\u7ea6\u5b9a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u9ed8\u8ba4\u4e0d\u5904\u7406 ",(0,l.kt)("inlineCode",{parentName:"li"},"ControllerBase")," \u63a7\u5236\u5668\u7c7b\u578b\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e")),(0,l.kt)("li",{parentName:"ul"},"\u9ed8\u8ba4\u4e0d\u5904\u7406 ",(0,l.kt)("inlineCode",{parentName:"li"},"GET\uff0cHEAD")," \u8bf7\u6c42\u7684\u5f15\u7528\u7c7b\u578b\u53c2\u6570\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e"))),(0,l.kt)("h2",{id:"518-\u66f4\u591a\u4f8b\u5b50"},"5.1.8 \u66f4\u591a\u4f8b\u5b50"),(0,l.kt)("h3",{id:"5181-\u591a\u79cd\u8bf7\u6c42\u8c13\u8bcd\u65b9\u6cd5"},"5.1.8.1 \u591a\u79cd\u8bf7\u6c42\u8c13\u8bcd\u65b9\u6cd5"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,12,17,22,27}",showLineNumbers:!0,"":!0,"{7,12,17,22,27}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public string Get()\n {\n return $"GET \u8bf7\u6c42";\n }\n\n public string Post()\n {\n return $"POST \u8bf7\u6c42";\n }\n\n public string Delete()\n {\n return $"DELETE \u8bf7\u6c42";\n }\n\n public string Put()\n {\n return $"PUT \u8bf7\u6c42";\n }\n\n public string Patch()\n {\n return $"PATCH \u8bf7\u6c42";\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/dgqqwc.png")}),(0,l.kt)("h3",{id:"5182-\u591a\u4e2a\u81ea\u5b9a\u4e49\u52a8\u4f5c\u65b9\u6cd5"},"5.1.8.2 \u591a\u4e2a\u81ea\u5b9a\u4e49\u52a8\u4f5c\u65b9\u6cd5"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,12,17}",showLineNumbers:!0,"":!0,"{7,12,17}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public string GetVersion()\n {\n return $"v1.0.0";\n }\n\n public string ChangeProfile()\n {\n return "\u4fee\u6539\u6210\u529f";\n }\n\n public string DeleteUser()\n {\n return "\u5220\u9664\u6210\u529f";\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/dzmc.png")}),(0,l.kt)("h3",{id:"5183-\u5e26\u53c2\u6570\u52a8\u4f5c\u65b9\u6cd5"},"5.1.8.3 \u5e26\u53c2\u6570\u52a8\u4f5c\u65b9\u6cd5"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,12,17}",showLineNumbers:!0,"":!0,"{7,12,17}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public string GetUser(int id)\n {\n return $"{id}";\n }\n\n public string GetUser(int id, string name)\n {\n return $"{id} {name}";\n }\n\n public TestDto Add(TestDto testDto)\n {\n return testDto;\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/dcsff.gif")}),(0,l.kt)("h3",{id:"5184-gethead-\u7c7b\u7c7b\u578b\u53c2\u6570"},"5.1.8.4 ",(0,l.kt)("inlineCode",{parentName:"h3"},"GET/HEAD")," \u7c7b\u7c7b\u578b\u53c2\u6570"),(0,l.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u4f1a\u5c06 ",(0,l.kt)("inlineCode",{parentName:"p"},"GET/HEAD")," \u8bf7\u6c42\u4e2d\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},"\u7c7b\u7c7b\u578b\u53c2\u6570")," \u8bbe\u7f6e\u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"[FromBody]")," \u7ed1\u5b9a\uff0c\u5982\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7}",showLineNumbers:!0,"":!0,"{7}":!0},"using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public TestDto GetTest(TestDto testDto)\n {\n return testDto;\n }\n }\n}\n")),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/getyycs.png")}),(0,l.kt)("p",null,"\u4f46\u662f\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"GET\u3001HEAD")," \u8bf7\u6c42\u4e0d\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"p"},"From Body")," \u7ed1\u5b9a\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u8f6c\u6362\u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"Query")," \u67e5\u8be2\u53c2\u6570\u3002"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u652f\u6301\u4ee5\u4e0b\u4e24\u79cd\u65b9\u5f0f\u914d\u7f6e\uff1a"),(0,l.kt)(o.Z,{defaultValue:"fromquery",values:[{label:"[FromQuery] \u7279\u6027",value:"fromquery"},{label:"\u914d\u7f6e DynamicApiControllerSettings",value:"DynamicApiControllerSettings"}],mdxType:"Tabs"},(0,l.kt)(p.Z,{value:"fromquery",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,8}",showLineNumbers:!0,"":!0,"{2,8}":!0},"using Furion.DynamicApiController;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public TestDto GetTest([FromQuery] TestDto testDto)\n {\n return testDto;\n }\n }\n}\n"))),(0,l.kt)(p.Z,{value:"DynamicApiControllerSettings",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers {2-4} title="Furion.Web.Entry/appsettings.json"',showLineNumbers:!0,"":!0,"{2-4}":!0,title:'"Furion.Web.Entry/appsettings.json"'},'{\n "DynamicApiControllerSettings": {\n "ModelToQuery": true\n }\n}\n')))),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/modeltoquery.png")}),(0,l.kt)("h3",{id:"5185-\u81ea\u5b9a\u4e49\u53c2\u6570\u4f4d\u7f6e"},"5.1.8.5 \u81ea\u5b9a\u4e49\u53c2\u6570\u4f4d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u975e\u5e38\u65b9\u4fbf\u7684\u81ea\u5b9a\u4e49\u53c2\u6570\u4f4d\u7f6e\u7684\u7279\u6027 ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiSeat]"),"\uff0c\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiSeat]")," \u53ef\u914d\u7f6e\u53c2\u6570\u4f4d\u7f6e\uff0c\u652f\u6301\u4ee5\u4e0b\u56db\u79cd\u4f4d\u7f6e\uff1a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ApiSeats.ControllerStart"),"\uff1a\u63a7\u5236\u5668\u4e4b\u524d"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ApiSeats.ControllerEnd"),"\uff1a\u63a7\u5236\u5668\u4e4b\u540e"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ApiSeats.ActionStart"),"\uff1a\u52a8\u4f5c\u65b9\u6cd5\u4e4b\u524d"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ApiSeats.ActionEnd"),"\uff1a\u52a8\u4f5c\u65b9\u6cd5\u4e4b\u540e\u3002",(0,l.kt)("strong",{parentName:"li"},"\u9ed8\u8ba4\u503c"))),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8-9,15-20}",showLineNumbers:!0,"":!0,"{8-9,15-20}":!0},'using Furion.DynamicApiController;\nusing System;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n // \u53c2\u6570\u9ed8\u8ba4\u4e3a ApiSeats.ActionEnd\n public string RouteSeat(int id, string name)\n {\n return "\u914d\u7f6e\u8def\u7531\u53c2\u6570\u4f4d\u7f6e";\n }\n\n public string RouteSeat(\n [ApiSeat(ApiSeats.ControllerStart)] int id, // \u63a7\u5236\u5668\u540d\u79f0\u4e4b\u524d\n [ApiSeat(ApiSeats.ControllerEnd)] string name, // \u63a7\u5236\u5668\u540d\u79f0\u4e4b\u540e\n [ApiSeat(ApiSeats.ControllerEnd)] int age, // \u63a7\u5236\u5668\u540d\u79f0\u4e4b\u540e\n [ApiSeat(ApiSeats.ActionStart)] decimal weight, // \u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\u4e4b\u524d\n [ApiSeat(ApiSeats.ActionStart)] float height, // \u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\u4e4b\u524d\n [ApiSeat(ApiSeats.ActionEnd)] DateTime birthday) // \u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\u4e4b\u540e\uff08\u9ed8\u8ba4\u503c\uff09\n {\n return "\u914d\u7f6e\u8def\u7531\u53c2\u6570\u4f4d\u7f6e";\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/cswz.png")}),(0,l.kt)("admonition",{title:"\u6e29\u99a8\u63d0\u793a",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"\u591a\u4e2a ",(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("inlineCode",{parentName:"strong"},"\u540c\u4f4d\u7f6e"))," \u914d\u7f6e\u7684\u53c2\u6570\u5c06\u6309\u7167 ",(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("inlineCode",{parentName:"strong"},"\u5b9a\u4e49\u53c2\u6570\u987a\u5e8f"))," \u8fdb\u884c\u6392\u5e8f\u3002")),(0,l.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"[ApiSeat]")," \u53ea\u80fd\u5e94\u7528\u4e8e\u8d34\u4e86 ",(0,l.kt)("inlineCode",{parentName:"p"},"[FromRoute]")," \u7279\u6027\u7684\u53c2\u6570\u6216 ",(0,l.kt)("inlineCode",{parentName:"p"},"\u57fa\u5143\u7c7b\u578b\u3001\u503c\u7c7b\u578b\u3001\u53ef\u7a7a\u57fa\u5143\u7c7b\u578b\u548c\u53ef\u7a7a\u503c\u7c7b\u578b"),"\u3002")),(0,l.kt)("h3",{id:"5186-\u81ea\u5b9a\u4e49\u8bf7\u6c42\u8c13\u8bcd"},"5.1.8.6 \u81ea\u5b9a\u4e49\u8bf7\u6c42\u8c13\u8bcd"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,8}",showLineNumbers:!0,"":!0,"{2,8}":!0},'using Furion.DynamicApiController;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n [HttpPost]\n public string GetVersion()\n {\n return "1.0.0";\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/zdywc.png")}),(0,l.kt)("h3",{id:"5187-\u652f\u6301\u591a\u4e2a\u8c13\u8bcd"},"5.1.8.7 \u652f\u6301\u591a\u4e2a\u8c13\u8bcd"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,8}",showLineNumbers:!0,"":!0,"{2,8}":!0},'using Furion.DynamicApiController;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n [HttpPost, HttpGet, AcceptVerbs("PUT", "DELETE")]\n public string GetVersion()\n {\n return "1.0.0";\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/dgwc.png")}),(0,l.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"\u5982\u679c\u52a8\u4f5c\u65b9\u6cd5\u4e2d\u542b\u6709 ",(0,l.kt)("inlineCode",{parentName:"p"},"\u7c7b\u7c7b\u578b\u53c2\u6570"),"\uff0c\u4e14\u542b\u6709 ",(0,l.kt)("inlineCode",{parentName:"p"},"POST/PUT/DELETE")," \u4efb\u610f\u8bf7\u6c42\u8c13\u8bcd\uff0c\u90a3\u4e48\u8be5\u53c2\u6570\u4f1a\u81ea\u52a8\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"p"},"[FromBody]")," \u53c2\u6570\uff0c\u5373\u4f7f\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"GET/HEAD")," \u8bf7\u6c42\u4e2d\u4e0d\u652f\u6301\u3002")),(0,l.kt)("h3",{id:"5188-\u652f\u6301\u81ea\u5b9a\u4e49\u8def\u7531"},"5.1.8.8 \u652f\u6301\u81ea\u5b9a\u4e49\u8def\u7531"),(0,l.kt)("p",null,"\u652f\u6301\u63a7\u5236\u5668\u548c\u52a8\u4f5c\u65b9\u6cd5\u81ea\u5b9a\u4e49\u8def\u7531\uff1a"),(0,l.kt)(o.Z,{defaultValue:"kzqrl",values:[{label:"\u81ea\u5b9a\u4e49\u63a7\u5236\u5668\u8def\u7531",value:"kzqrl"},{label:"\u81ea\u5b9a\u4e49\u52a8\u4f5c\u65b9\u6cd5\u8def\u7531",value:"dzffrl"},{label:"\u540c\u65f6\u81ea\u5b9a\u4e49\u8def\u7531",value:"allrl"},{label:"\u8c13\u8bcd\u81ea\u5b9a\u4e49\u8def\u7531",value:"vcrl"}],mdxType:"Tabs"},(0,l.kt)(p.Z,{value:"kzqrl",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,6}",showLineNumbers:!0,"":!0,"{2,6}":!0},'using Furion.DynamicApiController;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Application\n{\n [Route("customapi/mobile/[controller]")]\n public class FurionAppService : IDynamicApiController\n {\n public string GetVersion()\n {\n return "1.0.0";\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/kzqrl.png")})),(0,l.kt)(p.Z,{value:"dzffrl",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,8}",showLineNumbers:!0,"":!0,"{2,8}":!0},'using Furion.DynamicApiController;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n [Route("customapi/[action]")]\n public string GetVersion()\n {\n return "1.0.0";\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/dzffrl.png")})),(0,l.kt)(p.Z,{value:"allrl",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,6,9}",showLineNumbers:!0,"":!0,"{2,6,9}":!0},'using Furion.DynamicApiController;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Application\n{\n [Route("customapi/mobile/[controller]")]\n public class FurionAppService : IDynamicApiController\n {\n [Route("get/[action]")]\n public string GetVersion()\n {\n return "1.0.0";\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/allrl.png")})),(0,l.kt)(p.Z,{value:"vcrl",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {9}",showLineNumbers:!0,"":!0,"{9}":!0},'using Furion.DynamicApiController;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Application\n{\n [Route("api/[controller]")]\n public class FurionAppService : IDynamicApiController\n {\n [HttpGet("get/[action]")]\n public string GetVersion()\n {\n return "1.0.0";\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/wcrl.png")}))),(0,l.kt)("admonition",{title:"\u5c0f\u63d0\u793a",type:"important"},(0,l.kt)("p",{parentName:"admonition"},"\u52a8\u4f5c\u65b9\u6cd5\u81ea\u5b9a\u4e49\u8def\u7531\u5982\u679c\u4ee5 ",(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("inlineCode",{parentName:"strong"},"/"))," \u5f00\u5934\uff0c\u5219\u4e0d\u4f1a\u5408\u5e76\u63a7\u5236\u5668\u8def\u7531\u3002")),(0,l.kt)("admonition",{title:"\u63a8\u8350\u914d\u7f6e",type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"\u81ea\u5b9a\u4e49\u8def\u7531\u5982\u679c\u9700\u8981\u7528\u5230 ",(0,l.kt)("strong",{parentName:"p"},"\u63a7\u5236\u5668/\u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0"),"\uff0c\u63a8\u8350\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"p"},"[controller]")," \u6216 ",(0,l.kt)("inlineCode",{parentName:"p"},"[action]")," \u5360\u4f4d\u7b26\uff0c\u56e0\u4e3a\u8be5\u5360\u4f4d\u7b26\u5df2\u7ecf\u81ea\u52a8\u5904\u7406\u4e86 ",(0,l.kt)("strong",{parentName:"p"},"\u524d\u540e\u7f00\u3001\u7248\u672c\u53f7\u3001\u6a21\u5757\u540d\u79f0"),"\u7b49\u3002")),(0,l.kt)("h3",{id:"5189-\u591a\u8def\u7531\u968f\u610f\u7ec4\u5408"},"5.1.8.9 \u591a\u8def\u7531\u968f\u610f\u7ec4\u5408"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u7684\u5404\u79cd\u8def\u7531\u7ec4\u5408\u65b9\u5f0f\uff0c\u652f\u6301\u4e00\u5bf9\u591a\uff0c\u591a\u5bf9\u591a\u8def\u7531\u7ec4\u5408\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6-8,11-14}",showLineNumbers:!0,"":!0,"{6-8,11-14}":!0},'using Furion.DynamicApiController;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Application\n{\n [Route("api/[controller]")]\n [Route("api/[controller]/second")]\n [Route("api/[controller]/three")]\n public class FurionAppService : IDynamicApiController\n {\n [HttpGet]\n [HttpGet("get/[action]")]\n [HttpPost]\n [HttpPost("post/cus-version")]\n public string GetVersion()\n {\n return "1.0.0";\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/dlrzh.gif")}),(0,l.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"caution"},(0,l.kt)("p",{parentName:"admonition"},"\u52a8\u4f5c\u65b9\u6cd5\u4e0d\u80fd\u540c\u65f6\u8d34 ",(0,l.kt)("inlineCode",{parentName:"p"},"[Route]")," \u548c ",(0,l.kt)("inlineCode",{parentName:"p"},"[HttpMethod]")," \u7279\u6027\uff0c\u53ea\u80fd\u4e8c\u53d6\u4e00\u3002")),(0,l.kt)("h3",{id:"51810-\u652f\u6301\u7248\u672c\u63a7\u5236"},"5.1.8.10 \u652f\u6301\u7248\u672c\u63a7\u5236"),(0,l.kt)(o.Z,{defaultValue:"kzqbb",values:[{label:"\u63a7\u5236\u5668\u7248\u672c",value:"kzqbb"},{label:"\u52a8\u4f5c\u65b9\u6cd5\u7248\u672c",value:"dzffbb"}],mdxType:"Tabs"},(0,l.kt)(p.Z,{value:"kzqbb",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,13,21}",showLineNumbers:!0,"":!0,"{5,13,21}":!0},"using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n public class FurionAppServiceV1 : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n }\n\n public class FurionAppServiceV1_2 : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n }\n\n public class FurionAppServiceV1_2_1 : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n }\n}\n")),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/kzqbb.png")})),(0,l.kt)(p.Z,{value:"dzffbb",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,12,16}",showLineNumbers:!0,"":!0,"{7,12,16}":!0},"using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public string GetV1()\n {\n return nameof(Furion);\n }\n public string GetV2_1()\n {\n return nameof(Furion);\n }\n }\n}\n")),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/dzffbb.png")}))),(0,l.kt)("admonition",{title:"\u7248\u672c\u751f\u6210\u539f\u7406",type:"note"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("inlineCode",{parentName:"strong"},"V[0-9_]"))," \u7ed3\u5c3e\u7684\u547d\u540d\u81ea\u52a8\u89e3\u6790\u6210\u7248\u672c\u53f7\uff0c\u5982 ",(0,l.kt)("strong",{parentName:"p"},(0,l.kt)("inlineCode",{parentName:"strong"},"FurionAppServiceV2 -> Furion@2")),"\u3002")),(0,l.kt)("admonition",{title:"\u7248\u672c\u590d\u5199",type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"\u9664\u4e86\u901a\u8fc7\u7279\u5b9a\u540e\u7f00\u65b9\u5f0f\u4ee5\u5916\uff0c\u7248\u672c\u8fd8\u76f4\u63a5\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiDescriptionSettings]")," \u8fdb\u884c\u590d\u5199\u3002\u5982\uff1a"),(0,l.kt)("pre",{parentName:"admonition"},(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,2}",showLineNumbers:!0,"":!0,"{1,2}":!0},'[ApiDescriptionSettings(Version = "4.0")]\npublic string GetV1()\n{\n return nameof(Furion);\n}\n')),(0,l.kt)("p",{parentName:"admonition"},"\u8fd9\u65f6\uff0c\u751f\u6210\u7248\u672c\u5c06\u91c7\u7528 ",(0,l.kt)("inlineCode",{parentName:"p"},"4.0")," \u66ff\u4ee3 ",(0,l.kt)("inlineCode",{parentName:"p"},"1"))),(0,l.kt)("h3",{id:"51811-\u4e0d\u516c\u5f00\u63a7\u5236\u5668\u6216\u52a8\u4f5c\u65b9\u6cd5"},"5.1.8.11 \u4e0d\u516c\u5f00\u63a7\u5236\u5668\u6216\u52a8\u4f5c\u65b9\u6cd5"),(0,l.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\uff0c\u6211\u4eec\u65e0\u9700\u5bfc\u51fa\u67d0\u4e2a\u52a8\u4f5c\u65b9\u6cd5\u6216\u63a7\u5236\u5668\uff08",(0,l.kt)("strong",{parentName:"p"},"\u4e0d\u663e\u793a\u5230 Swagger"),"\uff09\uff0c\u53ea\u9700\u8981\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiDescriptionSettings(false)]")," \u6216 ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiExplorerSettings(IgnoreApi = true)]"),"\u5373\u53ef\u3002"),(0,l.kt)("p",null,"\u53e6\u5916\u52a8\u4f5c\u65b9\u6cd5\u8fd8\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"p"},"[NonAction]")," \u6807\u8bb0\u4e0d\u662f\u4e00\u4e2a\u6709\u6548\u7684\u63a7\u5236\u5668\u6216 Action\u3002"),(0,l.kt)("admonition",{title:"\u63a8\u8350\u4f7f\u7528",type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"\u63a8\u8350\u63a7\u5236\u5668\u6216\u52a8\u4f5c\u65b9\u6cd5\u8bbe\u7f6e\u4e0d\u5bfc\u51fa\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiDescriptionSettings(false)]")," \u7279\u6027\u3002\u8be5\u7279\u6027\u9ed8\u8ba4\u7ee7\u627f\u81ea ",(0,l.kt)("inlineCode",{parentName:"p"},"ApiExplorerSettingsAttribute")," \u7c7b\u3002")),(0,l.kt)("h3",{id:"51812-\u4fdd\u6301\u63a7\u5236\u5668\u548c\u65b9\u6cd5\u547d\u540d"},"5.1.8.12 \u4fdd\u6301\u63a7\u5236\u5668\u548c\u65b9\u6cd5\u547d\u540d"),(0,l.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u52a8\u6001 API \u4f1a\u5c06\u63a7\u5236\u5668\u548c\u65b9\u6cd5\u540d\u8f93\u51fa\u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"RESTFul")," \u98ce\u683c\u7684\u8def\u7531\uff0c\u5982\u9700\u4fdd\u7559\u539f\u6709\u8bbe\u8ba1\uff0c\u53ea\u9700\u914d\u7f6e\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "DynamicApiControllerSettings": {\n "KeepName": true,\n "KeepVerb": true,\n "LowercaseRoute": false\n }\n}\n')),(0,l.kt)("h3",{id:"51813-\u65b9\u6cd5\u53c2\u6570-fromquery-\u5316\u53c2\u6570\u975e\u5fc5\u586b\u53c2\u6570\u53ef\u9009"},"5.1.8.13 \u65b9\u6cd5\u53c2\u6570 ",(0,l.kt)("inlineCode",{parentName:"h3"},"[FromQuery]")," \u5316/\u53c2\u6570\u975e\u5fc5\u586b/\u53c2\u6570\u53ef\u9009"),(0,l.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u6240\u6709\u7684\u57fa\u5143\u7c7b\u578b\u53c2\u6570\u90fd\u4f1a\u8d34\u4e0a ",(0,l.kt)("inlineCode",{parentName:"p"},"[FromRoute]")," \u7279\u6027\uff0c\u5982\u679c\u9700\u8981\u5c06\u53c2\u6570\u8c03\u6574\u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"[FromQuery]")," \u4fee\u9970\uff0c\u53ea\u9700\u8981\u5728\u65b9\u6cd5\u4e0a\u9762\u8d34 ",(0,l.kt)("inlineCode",{parentName:"p"},"[QueryParameters]")," \u7279\u6027\u5373\u53ef\uff0c\u5982\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'[QueryParameters]\npublic string Get(int id, string name)\n{\n return nameof($"{id} {name}");\n}\n')),(0,l.kt)("p",null,"\u751f\u6210\u7684\u8def\u7531\u4e3a\uff1a",(0,l.kt)("inlineCode",{parentName:"p"},"https://xxx.com?id=1&name=Furion")),(0,l.kt)("p",null,"\u5982\u679c\u4e0d\u559c\u6b22\u6bcf\u4e2a\u90fd\u914d\u7f6e\uff0c\u4e5f\u53ef\u4ee5\u5168\u5c40\u914d\u7f6e\uff08",(0,l.kt)("strong",{parentName:"p"},"\u53ea\u4f1a\u5f71\u54cd\u57fa\u5143\u7c7b\u578b\u7684\u53c2\u6570"),"\uff09\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "DynamicApiControllerSettings": {\n "UrlParameterization": true\n }\n}\n')),(0,l.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,l.kt)("p",{parentName:"admonition"},"\u8d34\u4e86 ",(0,l.kt)("inlineCode",{parentName:"p"},"[QueryParameters]")," \u4e4b\u540e\uff0c\u4f1a\u5bf9\u6240\u6709\u53c2\u6570\u5f71\u54cd\uff0c\u5305\u62ec\u7c7b\u7c7b\u578b\u53c2\u6570\uff0c\u5982\u679c\u4e0d\u9700\u8981\u5904\u7406\u67d0\u4e2a\u53c2\u6570\uff0c\u53ea\u9700\u8981\u8d34 ",(0,l.kt)("inlineCode",{parentName:"p"},"[FromXXX]")," \u7279\u6027\u5373\u53ef\u3002")),(0,l.kt)("h3",{id:"51814-\u53c2\u6570\u7ed1\u5b9a\u914d\u7f6e"},"5.1.8.14 \u53c2\u6570\u7ed1\u5b9a\u914d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u591a\u79cd\u53c2\u6570\u7279\u6027\u914d\u7f6e\u53c2\u6570\u7ed1\u5b9a\u89c4\u5219\uff1a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"[FromRoute]"),"\uff1a\u901a\u8fc7\u8def\u7531\u53c2\u6570\u7ed1\u5b9a\u503c"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"[FromQuery]"),"\uff1a\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"li"},"Url")," \u5730\u5740\u53c2\u6570\u7ed1\u5b9a\u503c"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"[FromBody]"),"\uff1a\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"li"},"Request Body")," \u53c2\u6570\u7ed1\u5b9a\u503c"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"[FromForm]"),"\uff1a\u901a\u8fc7\u8868\u5355\u63d0\u4ea4\u7ed1\u5b9a\u503c"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"[FromHeader]"),"\uff1a\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"li"},"Request Header")," \u53c2\u6570\u7ed1\u5b9a\u503c")),(0,l.kt)("h3",{id:"51815-\u81ea\u5b9a\u4e49\u6839\u636e\u65b9\u6cd5\u540d\u751f\u6210-httpmethod-\u89c4\u5219"},"5.1.8.15 \u81ea\u5b9a\u4e49\u6839\u636e\u65b9\u6cd5\u540d\u751f\u6210 ",(0,l.kt)("inlineCode",{parentName:"h3"},"[HttpMethod]")," \u89c4\u5219"),(0,l.kt)("p",null,"\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u5728\u6ca1\u6709\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"p"},"[HttpMethod]")," \u7279\u6027\u7684\u60c5\u51b5\u4e0b\uff0c\u4f1a\u81ea\u52a8\u6839\u636e\u65b9\u6cd5\u540d\u7b2c\u4e00\u4e2a\u53c2\u6570\u8fdb\u884c\u5206\u6790\uff0c\u5e76\u751f\u6210\u5bf9\u5e94\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},"[HttpMethod]")," \u7279\u6027\uff0c\u89c4\u5219\u5982\u4e0b\uff1a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\u52a8\u4f5c\u65b9\u6cd5\u540d",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Post/Add/Create/Insert/Submit")," \u5f00\u5934\uff0c\u5219\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpPost]")," \u7279\u6027\u3002"),(0,l.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"GetAll/GetList/Get/Find/Fetch/Query")," \u5f00\u5934\uff0c\u5219\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpGet]")," \u7279\u6027\u3002"),(0,l.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Put/Update")," \u5f00\u5934\uff0c\u5219\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpPut]")," \u7279\u6027\u3002"),(0,l.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Delete/Remove/Clear")," \u5f00\u5934\uff0c\u5219\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpDelete]")," \u7279\u6027\u3002"),(0,l.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Patch")," \u5f00\u5934\uff0c\u5219\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpPatch]")," \u7279\u6027"),(0,l.kt)("li",{parentName:"ul"},"\u4ee5 ",(0,l.kt)("inlineCode",{parentName:"li"},"Head")," \u5f00\u5934\uff0c\u5219\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpHead]")," \u7279\u6027"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e")))),(0,l.kt)("li",{parentName:"ul"},"\u5982\u679c\u4e0d\u5728\u4e0a\u9762\u7ea6\u5b9a\u4e2d\uff0c\u5219\u9ed8\u8ba4\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpPost]")," \u7279\u6027\u3002",(0,l.kt)("strong",{parentName:"li"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e"))),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"\u4f46\u662f\uff0c\u6709\u4e9b\u65f6\u5019\u8fd9\u4e0d\u662f\u6211\u4eec\u60f3\u8981\u7684\u89c4\u5219"),"\uff0c\u8fd9\u65f6\u6211\u4eec\u53ea\u9700\u8981\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u4e2d\u914d\u7f6e\u5373\u53ef\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2,3}",showLineNumbers:!0,"":!0,"{2,3}":!0},'{\n "DynamicApiControllerSettings": {\n "VerbToHttpMethods": [\n ["getall", "HEAD"], // => getall \u4f1a\u88ab\u590d\u5199\u4e3a `[HttpHead]`\n ["other", "PUT"] // => \u65b0\u589e\u4e00\u6761\u65b0\u89c4\u5219\uff0c\u6bd4\u5982\uff0c\u4e00 `[other]` \u5f00\u5934\u4f1a\u8f6c\u6362\u4e3a `[HttpPut]` \u8bf7\u6c42\n ]\n }\n}\n')),(0,l.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,l.kt)("p",{parentName:"admonition"},"\u4e8c\u7ef4\u6570\u7ec4\u4e2d\u7684\u6bcf\u4e00\u4e2a\u5143\u7d20\u7684\u7b2c\u4e00\u4e2a\u5143\u7d20",(0,l.kt)("strong",{parentName:"p"},"\u5fc5\u987b\u662f\u5168\u5c0f\u5199"),"\uff0c\u7b2c\u4e8c\u4e2a\u5143\u7d20",(0,l.kt)("strong",{parentName:"p"},"\u5fc5\u987b\u662f\u5168\u5927\u5199\u5927\u5199"),"\uff0c\u7b2c\u4e8c\u4e2a\u5143\u7d20\u53d6\u503c\u6709\uff1a",(0,l.kt)("inlineCode",{parentName:"p"},"HEAD, GET, PUT, POST, PATCH, DELETE"))),(0,l.kt)("h3",{id:"51816-\u8def\u7531\u53c2\u6570\u975e\u5fc5\u586b\u9009\u586b"},"5.1.8.16 \u8def\u7531\u53c2\u6570\u975e\u5fc5\u586b/\u9009\u586b"),(0,l.kt)("p",null,"\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"Furion v2.8.6")," \u7248\u672c\u4e2d\u5b9e\u73b0\u4e86 ",(0,l.kt)("inlineCode",{parentName:"p"},"[FromRoute]")," \u53c2\u6570\u975e\u5fc5\u586b\u529f\u80fd\uff0c\u652f\u6301\u4ee5\u4e0b\u51e0\u79cd\u65b9\u5f0f\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,6,11,16}",showLineNumbers:!0,"":!0,"{2,6,11,16}":!0},"// \u65b9\u5f0f\u4e00\uff0c\u901a\u8fc7\u53ef\u7a7a ?\npublic object Method1(int id, Datetime? dateTime)\n{\n}\n\n// \u65b9\u5f0f\u4e8c\uff0c\u901a\u8fc7\u9ed8\u8ba4\u503c\npublic object Method1(int id, int age = 10)\n{\n}\n\n// \u65b9\u5f0f\u4e09\uff0c\u9ed8\u8ba4\u503c + \u53ef\u7a7a ?\npublic object Method1(int id, int? age = 10)\n{\n}\n\n// \u65b9\u5f0f\u56db\uff0c[FromQuery] \u4fee\u9970\npublic object Method1(int id, [FromQuery]string keyword)\n{\n}\n")),(0,l.kt)("h3",{id:"51817-formroute-\u8def\u7531\u7ea6\u675f"},"5.1.8.17 ",(0,l.kt)("inlineCode",{parentName:"h3"},"[FormRoute]")," \u8def\u7531\u7ea6\u675f"),(0,l.kt)("p",null,"\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"Furion v2.8.6")," \u7248\u672c\u4e2d\uff0c\u6dfb\u52a0\u4e86 ",(0,l.kt)("inlineCode",{parentName:"p"},"[RouteConstraint]")," \u7279\u6027\uff0c\u53ef\u914d\u7f6e\u8def\u7531\u7ea6\u675f\uff0c\u5982\uff1a",(0,l.kt)("inlineCode",{parentName:"p"},'[RouteConstraint(":min(10)")]')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"":!0,"{2}":!0},'// \u6700\u5c0f\u503c 10\npublic object Method1([RouteConstraint(":min(10)")] int id)\n{\n}\n')),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"[RouteConstraint]")," \u652f\u6301\u8def\u7531\u7ea6\u675f\u7b26\u53f7\u5982\u4e0b\uff1a"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"\u7b26\u53f7"),(0,l.kt)("th",{parentName:"tr",align:null},"\u63cf\u8ff0"),(0,l.kt)("th",{parentName:"tr",align:null},"\u4f8b\u5b50"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"alpha")),(0,l.kt)("td",{parentName:"tr",align:null},"\u5339\u914d\u5927\u5199\u6216\u5c0f\u5199\u62c9\u4e01\u5b57\u6bcd\u5b57\u7b26\uff08a-z\u3001A-Z\uff09"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":alpha"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"bool")),(0,l.kt)("td",{parentName:"tr",align:null},"bool \u7c7b\u578b"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":bool"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"datetime")),(0,l.kt)("td",{parentName:"tr",align:null},"DateTime \u7c7b\u578b"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":datetime"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"decimal")),(0,l.kt)("td",{parentName:"tr",align:null},"decimal \u7c7b\u578b"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":decimal"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"double")),(0,l.kt)("td",{parentName:"tr",align:null},"double \u7c7b\u578b"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":double"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"float")),(0,l.kt)("td",{parentName:"tr",align:null},"float \u7c7b\u578b"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":float"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"guid")),(0,l.kt)("td",{parentName:"tr",align:null},"guid \u7c7b\u578b"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":guid"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"int")),(0,l.kt)("td",{parentName:"tr",align:null},"int \u7c7b\u578b"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":int"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"long")),(0,l.kt)("td",{parentName:"tr",align:null},"long \u7c7b\u578b"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":long"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"length")),(0,l.kt)("td",{parentName:"tr",align:null},"\u5339\u914d\u957f\u5ea6\uff08\u5b57\u7b26\u4e32\uff09"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":length(6)")," \u6216 ",(0,l.kt)("inlineCode",{parentName:"td"},":length(1,20)"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"max")),(0,l.kt)("td",{parentName:"tr",align:null},"\u6700\u5927\u503c"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":max(10)"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"maxlength")),(0,l.kt)("td",{parentName:"tr",align:null},"\u6700\u5927\u957f\u5ea6\uff08\u5b57\u7b26\u4e32\uff09"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":maxlength(10)"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"min")),(0,l.kt)("td",{parentName:"tr",align:null},"\u6700\u5c0f\u503c"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":min(10)"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"minlength")),(0,l.kt)("td",{parentName:"tr",align:null},"\u6700\u5c0f\u957f\u5ea6\uff08\u5b57\u7b26\u4e32\uff09"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":minlength(10)"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"range")),(0,l.kt)("td",{parentName:"tr",align:null},"\u53d6\u503c\u8303\u56f4"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":range(10,50)"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"regex")),(0,l.kt)("td",{parentName:"tr",align:null},"\u6b63\u5219\u8868\u8fbe\u5f0f"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},":regex(^\\d{3}-\\d{3}-\\d{4}$)"))))),(0,l.kt)("h3",{id:"51818-\u5c0f\u9a7c\u5cf0-\u8def\u7531\u8def\u5f84"},"5.1.8.18 ",(0,l.kt)("inlineCode",{parentName:"h3"},"\u5c0f\u9a7c\u5cf0")," \u8def\u7531\u8def\u5f84"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "DynamicApiControllerSettings": {\n "LowercaseRoute": false,\n "KeepName": true,\n "AsLowerCamelCase": true\n }\n}\n')),(0,l.kt)("h2",{id:"519-apidescriptionsettings"},"5.1.9 ",(0,l.kt)("inlineCode",{parentName:"h2"},"[ApiDescriptionSettings]")),(0,l.kt)("p",null,"\u9664\u4e86\u4e0a\u8ff0 ",(0,l.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u63d0\u4f9b\u7684\u914d\u7f6e\u5916\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u8fd8\u63d0\u4f9b\u4e86\u975e\u5e38\u5f3a\u5927\u4e14\u7075\u6d3b\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiDescriptionSettings]")," \u7279\u6027\u3002"),(0,l.kt)("h3",{id:"5191-\u5185\u7f6e\u914d\u7f6e"},"5.1.9.1 \u5185\u7f6e\u914d\u7f6e"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Name"),"\uff1a\u81ea\u5b9a\u4e49\u63a7\u5236\u5668/\u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"null")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"KeepName"),"\uff1a\u662f\u5426\u4fdd\u6301\u539f\u6709\u540d\u79f0\u4e0d\u5904\u7406\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"bool"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"false")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"SplitCamelCase"),"\uff1a\u5207\u5272\u9a86\u9a7c(\u9a7c\u5cf0)/\u5e15\u65af\u5361\u547d\u540d\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"bool"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"true")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"KeepVerb"),"\uff1a\u662f\u5426\u4fdd\u7559\u52a8\u4f5c\u65b9\u6cd5\u8bf7\u6c42\u8c13\u8bcd\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"bool"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"false")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Enabled"),"\uff1a\u662f\u5426\u5bfc\u51fa\u63a5\u53e3\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"bool"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"true")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Module"),"\uff1a\u6a21\u5757\u540d\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"null")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Version"),"\uff1a\u7248\u672c\u53f7\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"null")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Groups"),"\uff1a\u63a5\u53e3\u5206\u7ec4\uff0c\u53ef\u7ed3\u5408 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u4e00\u8d77\u4f7f\u7528\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string[]"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"null")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Tags"),"\uff1a\u63a5\u53e3\u6807\u7b7e\uff0c\u53ef\u7ed3\u5408 ",(0,l.kt)("inlineCode",{parentName:"li"},"Swagger")," \u4e00\u8d77\u4f7f\u7528\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string[]"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"null")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Order"),"\uff1a\u914d\u7f6e\u63a7\u5236\u5668/\u52a8\u4f5c\u65b9\u6cd5\u6392\u5e8f"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"LowercaseRoute"),"\uff1a\u662f\u5426\u91c7\u7528\u5c0f\u5199\u8def\u7531\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"true")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"AsLowerCamelCase"),"\uff1a\u542f\u7528\u5c0f\u9a7c\u5cf0\u547d\u540d\uff08\u9996\u5b57\u6bcd\u5c0f\u5199\uff09\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"false")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Area"),"\uff1a\u914d\u7f6e\u533a\u57df\u540d\u79f0\uff0c\u9ed8\u8ba4\u7a7a\uff0c",(0,l.kt)("strong",{parentName:"li"},"\u53ea\u4f5c\u7528\u4e8e\u7c7b\u4e2d\u8d34")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Description"),"\uff1a\u914d\u7f6e\u5355\u4e00\u63a5\u53e3\u66f4\u591a\u63cf\u8ff0\u529f\u80fd\uff0c\u53ea\u5728 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u65b9\u6cd5")," \u4e2d\u6709\u6548\uff0c",(0,l.kt)("strong",{parentName:"li"},"\u4ec5\u9650 v3.3.5+\u7248\u672c\u6709\u6548")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ForceWithRoutePrefix"),"\uff1a\u914d\u7f6e\u662f\u5426\u5f3a\u5236\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"DefaultRoutePrefix"),"\uff0c\u5f53\u63a7\u5236\u5668\u81ea\u5b9a\u4e49\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"[Route]")," \u6709\u6548\uff0c",(0,l.kt)("strong",{parentName:"li"},"\u4ec5\u9650 v3.4.1+\u7248\u672c\u6709\u6548"))),(0,l.kt)("h3",{id:"5192-name-\u914d\u7f6e"},"5.1.9.2 ",(0,l.kt)("inlineCode",{parentName:"h3"},"Name")," \u914d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Name")," \u53c2\u6570\u53ef\u4ee5\u8986\u76d6\u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u81ea\u52a8\u751f\u6210\u7684\u63a7\u5236\u5668\u6216\u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\u3002\u5982\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8}",showLineNumbers:!0,"":!0,"{5,8}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings(Name = "MyFur")]\n public class FurionAppService : IDynamicApiController\n {\n [ApiDescriptionSettings(Name = "MyGet")]\n public string Get()\n {\n return nameof(Furion);\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/namepz.png")}),(0,l.kt)("h3",{id:"5193-keepname-\u914d\u7f6e"},"5.1.9.3 ",(0,l.kt)("inlineCode",{parentName:"h3"},"KeepName")," \u914d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"KeepName")," \u53c2\u6570\u53ef\u4ee5\u4fdd\u7559\u539f\u6709\u7684\u63a7\u5236\u5668\u6216\u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\u3002\u5982\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8}",showLineNumbers:!0,"":!0,"{5,8}":!0},"using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings(KeepName = true)]\n public class FurionAppService : IDynamicApiController\n {\n [ApiDescriptionSettings(KeepName = true)]\n public string Get()\n {\n return nameof(Furion);\n }\n }\n}\n")),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/keepnamepz.png")}),(0,l.kt)("h3",{id:"5194-splitcamelcase-\u914d\u7f6e"},"5.1.9.4 ",(0,l.kt)("inlineCode",{parentName:"h3"},"SplitCamelCase")," \u914d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"SplitCamelCase")," \u53c2\u6570\u9ed8\u8ba4\u5c06\u9a86\u9a7c(\u9a7c\u5cf0)\u547d\u540d\u5207\u5272\u6210\u591a\u4e2a\u5355\u8bcd\u5e76\u901a\u8fc7\u6307\u5b9a ",(0,l.kt)("inlineCode",{parentName:"p"},"\u5360\u4f4d\u7b26")," \u8fde\u63a5\u8d77\u6765\u3002\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"p"},"\u5360\u4f4d\u7b26")," \u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"-"),"\u3002\u9ed8\u8ba4\u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"true"),"\u3002\u5982\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8}",showLineNumbers:!0,"":!0,"{5,8}":!0},"using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings(SplitCamelCase = false)]\n public class MyFurionAppService : IDynamicApiController\n {\n [ApiDescriptionSettings(SplitCamelCase = true)]\n public string ChangeUserName()\n {\n return nameof(Furion);\n }\n }\n}\n")),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/splitnamepz.png")}),(0,l.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"KeepName")," \u4f18\u5148\u7ea7\u9ad8\u4e8e ",(0,l.kt)("inlineCode",{parentName:"p"},"SplitCamelCase"),"\uff0c\u4e5f\u5c31\u662f ",(0,l.kt)("inlineCode",{parentName:"p"},"KeepName")," \u8bbe\u7f6e\u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"true"),"\uff0c\u5219\u4e0d\u4f1a\u5904\u7406 ",(0,l.kt)("inlineCode",{parentName:"p"},"SplitCamelCase")," \u53c2\u6570\u3002")),(0,l.kt)("h3",{id:"5195-keepverb-\u914d\u7f6e"},"5.1.9.5 ",(0,l.kt)("inlineCode",{parentName:"h3"},"KeepVerb")," \u914d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"KeepVerb")," \u53c2\u6570\u4f5c\u7528\u4e8e\u52a8\u4f5c\u65b9\u6cd5\uff0c\u6807\u8bc6\u662f\u5426\u4fdd\u7559\u52a8\u4f5c\u8c13\u8bcd\u3002\u5982\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7}",showLineNumbers:!0,"":!0,"{7}":!0},"using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n [ApiDescriptionSettings(KeepVerb = true)]\n public string GetVersion()\n {\n return nameof(Furion);\n }\n }\n}\n")),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/keepverbpz.png")}),(0,l.kt)("h3",{id:"5196-enabled-\u914d\u7f6e"},"5.1.9.6 ",(0,l.kt)("inlineCode",{parentName:"h3"},"Enabled")," \u914d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Enabled")," \u53c2\u6570\u914d\u7f6e\u63a5\u53e3\u662f\u5426\u5bfc\u51fa\u3002\u901a\u5e38\u7528\u4e8e\u52a8\u4f5c\u65b9\u6cd5\uff0c\u5982\u679c\u7528\u4e8e\u63a7\u5236\u5668\u5b9e\u9645\u4f5c\u7528\u4e0d\u5927\u3002"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {12}",showLineNumbers:!0,"":!0,"{12}":!0},"using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public string GetVersion()\n {\n return nameof(Furion);\n }\n\n [ApiDescriptionSettings(false)]\n public string NoExport()\n {\n return nameof(Furion);\n }\n }\n}\n")),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/enablepz.png")}),(0,l.kt)("h3",{id:"5197-module-\u914d\u7f6e"},"5.1.9.7 ",(0,l.kt)("inlineCode",{parentName:"h3"},"Module")," \u914d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Module")," \u53c2\u6570\u53ef\u4ee5\u914d\u7f6e\u8def\u7531\u5206\u79bb\uff0c\u7c7b\u4f3c\u4e8e ",(0,l.kt)("inlineCode",{parentName:"p"},"Mvc \u533a\u57df")," \u7684\u4f5c\u7528\u3002"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8}",showLineNumbers:!0,"":!0,"{5,8}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings(Module = "mobile")]\n public class FurionAppService : IDynamicApiController\n {\n [ApiDescriptionSettings(Module = "user")]\n public string GetVersion()\n {\n return nameof(Furion);\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/modulepz.png")}),(0,l.kt)("h3",{id:"5198-version-\u914d\u7f6e"},"5.1.9.8 ",(0,l.kt)("inlineCode",{parentName:"h3"},"Version")," \u914d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Version")," \u53c2\u6570\u53ef\u4ee5\u914d\u7f6e\u63a5\u53e3\u7248\u672c\uff0c\u540c\u65f6\u53c8\u53ef\u4ee5\u590d\u5199\u7279\u6b8a\u7248\u672c\u547d\u540d\u914d\u7f6e\u3002\u9ed8\u8ba4\u7248\u672c\u5206\u9694\u7b26\u4e3a ",(0,l.kt)("inlineCode",{parentName:"p"},"@"),"\u3002\u5982\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,9-10}",showLineNumbers:!0,"":!0,"{5,9-10}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings(Version = "1.0")]\n public class FurionAppService : IDynamicApiController\n {\n // V2.0.0 \u88ab\u590d\u5199\u6210 V2.1.1\n [ApiDescriptionSettings(Version = "2.1.1")]\n public string GetVersionV2_0_0()\n {\n return nameof(Furion);\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/versionpz.png")}),(0,l.kt)("h3",{id:"5199-groups-\u914d\u7f6e"},"5.1.9.9 ",(0,l.kt)("inlineCode",{parentName:"h3"},"Groups")," \u914d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Groups")," \u914d\u7f6e\u4e3b\u8981\u7528\u4e8e\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"p"},"Swagger")," \u5206\u7ec4\u4fe1\u606f\u3002"),(0,l.kt)("p",null,"\u901a\u8fc7\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"p"},"Groups")," \u53c2\u6570\u53ef\u4ee5\u5c06",(0,l.kt)("inlineCode",{parentName:"p"},"\u63a7\u5236\u5668\u548c\u52a8\u4f5c\u65b9\u6cd5")," \u8fdb\u884c\u5f52\u7c7b\u548c\u591a\u4e2a\u5206\u7ec4\u76f4\u63a5\u5171\u4eab\u3002\u53ef\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiDescriptionSettings(params Groups)]")," \u6784\u9020\u51fd\u6570\u4f20\u5165\u6216\u6307\u5b9a ",(0,l.kt)("inlineCode",{parentName:"p"},"Groups")," \u53c2\u6570\u914d\u7f6e\u63a5\u53e3\u662f\u5426\u5bfc\u51fa\u3002\u901a\u5e38\u7528\u4e8e\u52a8\u4f5c\u65b9\u6cd5\uff0c\u5982\u679c\u7528\u4e8e\u63a7\u5236\u5668\u5b9e\u9645\u4f5c\u7528\u4e0d\u5927\u3002"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,13}",showLineNumbers:!0,"":!0,"{5,13}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings("Default", "Common")]\n public class FurionAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n [ApiDescriptionSettings("Custom")]\n public int Get(int id)\n {\n return id;\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/dfz.gif")}),(0,l.kt)("h3",{id:"51910-tag-\u914d\u7f6e"},"5.1.9.10 ",(0,l.kt)("inlineCode",{parentName:"h3"},"Tag")," \u914d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Tag")," \u914d\u7f6e\u4e3b\u8981\u7528\u4e8e\u914d\u7f6e ",(0,l.kt)("inlineCode",{parentName:"p"},"Swagger")," \u6807\u7b7e\u5206\u7ec4\u4fe1\u606f\u53ca\u5408\u5e76\u6807\u7b7e\u3002\u4e5f\u5c31\u662f ",(0,l.kt)("inlineCode",{parentName:"p"},"\u7ec4\u4e2d\u7ec4"),":"),(0,l.kt)(o.Z,{defaultValue:"tag1",values:[{label:"\u6807\u7b7e\u547d\u540d",value:"tag1"},{label:"\u5408\u5e76\u6807\u7b7e",value:"tag2"}],mdxType:"Tabs"},(0,l.kt)(p.Z,{value:"tag1",mdxType:"TabItem"},(0,l.kt)("h4",{id:"\u672a\u8d34\u6807\u7b7e\u4e4b\u524d"},"\u672a\u8d34\u6807\u7b7e\u4e4b\u524d"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n\n public class TestAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n}\n")),(0,l.kt)("h4",{id:"\u8d34\u6807\u7b7e\u4e4b\u540e"},"\u8d34\u6807\u7b7e\u4e4b\u540e"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,19}",showLineNumbers:!0,"":!0,"{5,19}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings(Tag = "\u5206\u7ec4\u4e00")]\n public class FurionAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n\n [ApiDescriptionSettings(Tag = "\u5206\u7ec4\u4e8c")]\n public class TestAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/tag1.png")})),(0,l.kt)(p.Z,{value:"tag2",mdxType:"TabItem"},(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,19}",showLineNumbers:!0,"":!0,"{5,19}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings(Tag = "\u5408\u5e76\u6240\u6709\u6807\u7b7e")]\n public class FurionAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n\n [ApiDescriptionSettings(Tag = "\u5408\u5e76\u6240\u6709\u6807\u7b7e")]\n public class TestAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n}\n')),(0,l.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,l.kt)("img",{src:(0,r.Z)("img/tag2.png")}))),(0,l.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,l.kt)("p",{parentName:"admonition"},"\u5982\u679c ",(0,l.kt)("inlineCode",{parentName:"p"},"Tag")," \u540d\u5b57\u4e00\u6837\uff0c\u5219\u4f1a\u81ea\u52a8\u5408\u5e76\uff0c\u5426\u5219\u53ea\u662f\u547d\u540d\u3002")),(0,l.kt)("h2",{id:"5110-dynamicapicontrollersettings-\u914d\u7f6e"},"5.1.10 ",(0,l.kt)("inlineCode",{parentName:"h2"},"DynamicApiControllerSettings")," \u914d\u7f6e"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u8fd8\u63d0\u4f9b\u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u63a5\u53e3\u4e00\u4e9b\u5168\u5c40\u914d\u7f6e\u9009\u9879\uff0c\u5982\uff1a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"DefaultRoutePrefix"),"\uff1a\u9ed8\u8ba4\u8def\u7531\u524d\u7f00\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"api")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"DefaultHttpMethod"),"\uff1a\u9ed8\u8ba4\u8bf7\u6c42\u8c13\u8bcd\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"POST")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"DefaultModule"),"\uff1a\u9ed8\u8ba4\u6a21\u5757\u540d\u79f0\uff08\u533a\u57df\uff09\uff0c\u53ef\u7528\u4f5c\u63a5\u53e3\u7248\u672c\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"v1")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"LowercaseRoute"),"\uff1a\u5c0f\u5199\u8def\u7531\u683c\u5f0f\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"bool"),"\uff0c\u9ed8\u8ba4\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"true")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"AsLowerCamelCase"),"\uff1a\u542f\u7528\u5c0f\u9a7c\u5cf0\u547d\u540d\uff08\u9996\u5b57\u6bcd\u5c0f\u5199\uff09\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"false")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"KeepVerb"),"\uff1a\u662f\u5426\u4fdd\u7559\u52a8\u4f5c\u8c13\u8bcd\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"bool"),"\uff0c\u9ed8\u8ba4\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"false")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"KeepName"),"\uff1a\u662f\u5426\u4fdd\u7559\u9ed8\u8ba4\u540d\u79f0\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"bool"),"\uff0c\u9ed8\u8ba4\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"fasle")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"CamelCaseSeparator"),"\uff1a\u9a86\u9a7c(\u9a7c\u5cf0)/\u5e15\u65af\u5361\u547d\u540d\u5206\u9694\u7b26\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"-")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"VersionSeparator"),"\uff1a\u7248\u672c\u5206\u9694\u7b26\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"@")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ModelToQuery"),"\uff1a",(0,l.kt)("inlineCode",{parentName:"li"},"GET/HEAD")," \u8bf7\u6c42\u5c06 ",(0,l.kt)("inlineCode",{parentName:"li"},"\u7c7b\u7c7b\u578b\u53c2\u6570\u8f6c\u67e5\u8be2\u53c2\u6570"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"bool"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"false")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"SupportedMvcController"),"\uff1a\u662f\u5426\u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"li"},"Mvc Controller")," \u52a8\u6001\u914d\u7f6e\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"bool"),"\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"false")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"UrlParameterization"),"\uff1a\u8def\u7531\u53c2\u6570\u91c7\u7528 ",(0,l.kt)("inlineCode",{parentName:"li"},"[FromQuery]")," \u5316\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"false"),"\uff08",(0,l.kt)("inlineCode",{parentName:"li"},"[FromRoute]")," \u65b9\u5f0f\uff09"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"DefaultArea"),"\uff1a\u914d\u7f6e\u9ed8\u8ba4\u533a\u57df\uff0c\u9ed8\u8ba4 ",(0,l.kt)("inlineCode",{parentName:"li"},"null")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ForceWithRoutePrefix"),"\uff1a\u914d\u7f6e\u662f\u5426\u5f3a\u5236\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"li"},"DefaultRoutePrefix"),"\uff0c\u5f53\u63a7\u5236\u5668\u81ea\u5b9a\u4e49\u4e86 ",(0,l.kt)("inlineCode",{parentName:"li"},"[Route]")," \u6709\u6548\uff0c",(0,l.kt)("strong",{parentName:"li"},"\u4ec5\u9650 v3.4.1+\u7248\u672c\u6709\u6548")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"AbandonControllerAffixes"),"\uff1a\u9ed8\u8ba4\u53bb\u9664\u63a7\u5236\u5668\u540d\u79f0\u524d\u540e\u7f00\u5217\u8868\u540d\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string[]"),"\uff0c\u9ed8\u8ba4\uff1a",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"AppServices")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"AppService")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"ApiController")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Controller")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Services")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Service")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"AbandonActionAffixes"),"\uff1a\u9ed8\u8ba4\u53bb\u9664\u52a8\u4f5c\u65b9\u6cd5\u540d\u79f0\u524d\u540e\u7f00\u5217\u8868\u540d\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string[]"),"\uff0c\u9ed8\u8ba4\uff1a",(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Async")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"VerbToHttpMethods"),"\uff1a\u590d\u5199\u9ed8\u8ba4\u65b9\u6cd5\u540d\u8f6c ",(0,l.kt)("inlineCode",{parentName:"li"},"[HttpMethod]")," \u89c4\u5219\uff0c",(0,l.kt)("inlineCode",{parentName:"li"},"string[][]")," \u4e8c\u7ef4\u6570\u7ec4\u7c7b\u578b\uff0c\u5185\u7f6e\u5339\u914d\u89c4\u5219\u4e3a\uff1a",(0,l.kt)("pre",{parentName:"li"},(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'["post"] = "POST",\n["add"] = "POST",\n["create"] = "POST",\n["insert"] = "POST",\n["submit"] = "POST",\n["get"] = "GET",\n["find"] = "GET",\n["fetch"] = "GET",\n["query"] = "GET",\n["put"] = "PUT",\n["update"] = "PUT",\n["delete"] = "DELETE",\n["remove"] = "DELETE",\n["clear"] = "DELETE",\n["patch"] = "PATCH"\n')),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},"\u590d\u5199\u793a\u4f8b")),(0,l.kt)("pre",{parentName:"li"},(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'"DynamicApiControllerSettings": {\n "VerbToHttpMethods": [\n [ "getall", "HEAD" ], // => getall \u4f1a\u88ab\u590d\u5199\u4e3a `[HttpHead]`\n [ "other", "PUT" ] // => \u65b0\u589e\u4e00\u6761\u65b0\u89c4\u5219\uff0c\u6bd4\u5982\uff0c\u4e00 `[other]` \u5f00\u5934\u4f1a\u8f6c\u6362\u4e3a `[HttpPut]` \u8bf7\u6c42\n ]\n }\n')))))),(0,l.kt)("h3",{id:"51101-\u652f\u6301-mvc-\u63a7\u5236\u5668-\u52a8\u6001\u914d\u7f6e"},"5.1.10.1 \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"h3"},"Mvc \u63a7\u5236\u5668")," \u52a8\u6001\u914d\u7f6e"),(0,l.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u63a5\u53e3\u4e0d\u5bf9 ",(0,l.kt)("inlineCode",{parentName:"p"},"ControllerBase")," \u7c7b\u578b\u8fdb\u884c\u4efb\u4f55\u5904\u7406\u3002\u5f53\u7136\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u624b\u52a8\u542f\u7528 ",(0,l.kt)("inlineCode",{parentName:"p"},"ControllerBase")," \u652f\u6301\u3002"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers {2-4} title="Furion.Web.Entry/appsettings.json"',showLineNumbers:!0,"":!0,"{2-4}":!0,title:'"Furion.Web.Entry/appsettings.json"'},'{\n "DynamicApiControllerSettings": {\n "SupportedMvcController": true\n }\n}\n')),(0,l.kt)("p",null,"\u8bbe\u7f6e ",(0,l.kt)("inlineCode",{parentName:"p"},"SupportedMvcController: true")," \u540e\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"Mvc ControllerBase")," \u7c7b\u578b\u4e5f\u80fd\u548c\u52a8\u6001 ",(0,l.kt)("inlineCode",{parentName:"p"},"WebAPI")," \u4e00\u6837\u7684\u7075\u6d3b\u4e86\u3002\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5}",showLineNumbers:!0,"":!0,"{5}":!0},"using Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Web.Entry.Controllers\n{\n public class MvcController : ControllerBase\n {\n public string Get()\n {\n return nameof(Furion);\n }\n }\n}\n\n")),(0,l.kt)("admonition",{title:"\u6ce8\u610f\u4e8b\u9879",type:"warning"},(0,l.kt)("p",{parentName:"admonition"},"\u542f\u7528\u8be5\u914d\u7f6e\u540e\uff0c\u5982\u679c ",(0,l.kt)("inlineCode",{parentName:"p"},"Mvc \u63a7\u5236\u5668")," \u6ca1\u6709\u4efb\u4f55 ",(0,l.kt)("inlineCode",{parentName:"p"},"[Route]")," \u7279\u6027\uff0c\u4f46\u662f\u8d34\u4e86 ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiController]")," \u7279\u6027\u5c06\u4f1a\u62a5\u9519\u3002\u539f\u56e0\u662f ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiController]")," \u7279\u6027\u5185\u90e8\u505a\u4e86\u8def\u7531\u7279\u6027\u68c0\u6d4b\u3002\u6240\u4ee5\u5efa\u8bae\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"p"},"[ApiDataValidation]")," \u4ee3\u66ff\u3002"),(0,l.kt)("p",{parentName:"admonition"},"\u67e5\u770b ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/dotnet/aspnetcore/blob/c565386a3ed135560bc2e9017aa54a950b4e35dd/src/Mvc/Mvc.Core/src/ApplicationModels/ApiBehaviorApplicationModelProvider.cs#L90"},"ASP.NET Core - ApiBehaviorApplicationModelProvider \u6e90\u7801"))),(0,l.kt)("h2",{id:"5111-\u5173\u4e8e-aop-\u62e6\u622a"},"5.1.11 \u5173\u4e8e AOP \u62e6\u622a"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"\u52a8\u6001WebAPI")," \u652f\u6301 ",(0,l.kt)("inlineCode",{parentName:"p"},"Controller")," \u7684\u6240\u6709\u8fc7\u6ee4\u5668/\u7b5b\u9009\u5668\u62e6\u622a\uff0c\u4e5f\u5c31\u662f\u53ef\u4ee5\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"p"},"ActionFilter"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"ResultFilter")," \u8fdb\u884c\u62e6\u622a\u64cd\u4f5c\u3002\u5982\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3}",showLineNumbers:!0,"":!0,"{1,3}":!0},"public class SampleAsyncActionFilter : IAsyncActionFilter\n{\n public async Task OnActionExecutionAsync(ActionExecutingContext context,ActionExecutionDelegate next)\n {\n // \u62e6\u622a\u4e4b\u524d\n\n var resultContext = await next();\n\n // \u62e6\u622a\u4e4b\u540e\n\n // \u5f02\u5e38\u62e6\u622a\n if(resultContext.Exception != null)\n {\n\n }\n }\n}\n")),(0,l.kt)("p",null,"\u8be6\u7ec6\u7528\u6cd5\u53ef\u53c2\u89c1 ",(0,l.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/filters?view=aspnetcore-5.0"},"ASP.NET Core 5.0 - \u7b5b\u9009\u5668")),(0,l.kt)("h2",{id:"5112-\u8bbe\u7f6e-api-\u8d85\u65f6\u8bf7\u6c42\u65f6\u95f4"},"5.1.12 \u8bbe\u7f6e ",(0,l.kt)("inlineCode",{parentName:"h2"},"api")," \u8d85\u65f6\u8bf7\u6c42\u65f6\u95f4"),(0,l.kt)("p",null,"\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"Program.cs")," \u4e2d\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"p"},".UseKestrel")," \u914d\u7f6e\u5373\u53ef\uff0c\u5982\uff1a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},".NET5 \u7248\u672c"))),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8-12}",showLineNumbers:!0,"":!0,"{8-12}":!0},"public static IHostBuilder CreateHostBuilder(string[] args)\n{\n return Host.CreateDefaultBuilder(args)\n .ConfigureWebHostDefaults(webBuilder =>\n {\n webBuilder.Inject()\n .UseStartup()\n .UseKestrel(option =>\n {\n option.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(20);\n option.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(20);\n });\n });\n}\n")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},".NET6 \u7248\u672c"))),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3-7}",showLineNumbers:!0,"":!0,"{3-7}":!0},"var app = builder.Build();\n\napp.Configuration.Get().ConfigureKestrel(x =>\n{\n x.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(20);\n x.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(20);\n});\n")),(0,l.kt)("h2",{id:"5113-\u53cd\u9988\u4e0e\u5efa\u8bae"},"5.1.13 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,l.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,l.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}C.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/64ece2db.ca5495d7.js b/handbook/build/assets/js/64ece2db.ca5495d7.js new file mode 100644 index 00000000000..405c12f13bf --- /dev/null +++ b/handbook/build/assets/js/64ece2db.ca5495d7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[1327],{3905:function(e,n,t){t.d(n,{Zo:function(){return p},kt:function(){return m}});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var u=r.createContext({}),l=function(e){var n=r.useContext(u),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},p=function(e){var n=l(e.components);return r.createElement(u.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,s=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=l(t),m=o,y=d["".concat(u,".").concat(m)]||d[m]||c[m]||s;return t?r.createElement(y,a(a({ref:n},p),{},{components:t})):r.createElement(y,a({ref:n},p))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var s=t.length,a=new Array(s);a[0]=d;var i={};for(var u in n)hasOwnProperty.call(n,u)&&(i[u]=n[u]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var l=2;l { user, user2 });\n\n// \u793a\u4f8b\u4e09\nrepository.Insert(new[] {user, user2 });\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.InsertAsync(user, user2);\n\n// \u793a\u4f8b\u4e8c\nawait repository.InsertAsync(new List { user, user2 });\n\n// \u793a\u4f8b\u4e09\nawait repository.InsertAsync(new[] {user, user2 });\n")),(0,s.kt)("h2",{id:"954-\u65b0\u589e\u591a\u6761\u7acb\u5373\u63d0\u4ea4"},"9.5.4 \u65b0\u589e\u591a\u6761\uff08\u7acb\u5373\u63d0\u4ea4\uff09"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.InsertNow(user, user2);\n\n// \u793a\u4f8b\u4e8c\nrepository.InsertNow(new List { user, user2 });\n\n// \u793a\u4f8b\u4e09\nrepository.InsertNow(new[] {user, user2 });\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.InsertNowAsync(user, user2);\n\n// \u793a\u4f8b\u4e8c\nawait repository.InsertNowAsync(new List { user, user2 });\n\n// \u793a\u4f8b\u4e09\nawait repository.InsertNowAsync(new[] {user, user2 });\n")),(0,s.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"\u6240\u6709\u5e26 ",(0,s.kt)("inlineCode",{parentName:"p"},"Now")," \u7ed3\u5c3e\u7684\u8868\u793a\u7acb\u5373\u63d0\u4ea4\u5230\u6570\u636e\u5e93\uff0c\u4e5f\u5c31\u662f\u7acb\u5373\u8c03\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"SaveChanges")," \u6216 ",(0,s.kt)("inlineCode",{parentName:"p"},"SaveChangesAsync"),"\u3002")),(0,s.kt)("h2",{id:"955-\u5ffd\u7565\u7a7a\u503c\u65b0\u589e"},"9.5.5 \u5ffd\u7565\u7a7a\u503c\u65b0\u589e"),(0,s.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,s.kt)("inlineCode",{parentName:"p"},"EFCore")," \u65b0\u589e\u4f1a\u63d2\u5165\u5168\u90e8\u5217\uff08\u9664\u5b9e\u4f53\u8ddf\u8e2a\u65b9\u5f0f\u4ee5\u5916\uff09\uff0c\u6709\u4e9b\u65f6\u5019\u6211\u4eec\u5e0c\u671b ",(0,s.kt)("inlineCode",{parentName:"p"},"Null")," \u503c\u65e0\u9700\u63d2\u5165\uff0c\u8fd9\u662f\u6211\u4eec\u53ea\u9700\u8981\u5728\u66f4\u65b0\u65f6\u5019\u914d\u7f6e ",(0,s.kt)("inlineCode",{parentName:"p"},"ignoreNullValues")," \u53c2\u6570\u5373\u53ef\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"repository.Insert(entity, ignoreNullValues: true);\n")),(0,s.kt)("p",null,"\u6ce8\u610f\uff1a",(0,s.kt)("inlineCode",{parentName:"p"},"EFCore")," \u8fd8\u662f\u4f1a\u5bf9 ",(0,s.kt)("inlineCode",{parentName:"p"},"NULL")," \u503c\u5217\u751f\u6210 ",(0,s.kt)("inlineCode",{parentName:"p"},"SQL")," \u8bed\u53e5\u3002"),(0,s.kt)("p",null,"\u4e5f\u53ef\u4ee5\u5168\u5c40\u914d\u7f6e\uff0c\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"AppDbContext")," \u7684\u6d3e\u751f\u7c7b\u7684\u6784\u9020\u51fd\u6570\u4e2d\u542f\u7528\u5373\u53ef\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11}",showLineNumbers:!0,"":!0,"{11}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]\n public class DefaultDbContext : AppDbContext\n {\n public DefaultDbContext(DbContextOptions options) : base(options)\n {\n InsertOrUpdateIgnoreNullValues = true;\n }\n }\n}\n')),(0,s.kt)("h2",{id:"956-\u8868\u5e26\u89e6\u53d1\u5668\u5f02\u5e38\u89e3\u51b3"},"9.5.6 \u8868\u5e26\u89e6\u53d1\u5668\u5f02\u5e38\u89e3\u51b3"),(0,s.kt)("p",null,"\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u6570\u636e\u5e93\u8868\u5b58\u5728\u89e6\u53d1\u5668\uff0c\u8fd9\u65f6\u5019\u53ef\u80fd\u4f1a\u51fa\u73b0\u4e0b\u5217\u5f02\u5e38\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-txt",metastring:"showLineNumbers",showLineNumbers:!0},"Microsoft.EntityFrameworkCore.DbUpdateException:\n Could not save changes because the target table has database triggers.\n Please configure your entity type accordingly,\n see https://aka.ms/efcore-docs-sqlserver-save-changes-and-triggers for more information.\n")),(0,s.kt)("p",null,"\u8fd9\u65f6\u6211\u4eec\u53ea\u9700\u8981\u6dfb\u52a0 ",(0,s.kt)("inlineCode",{parentName:"p"},"HasTrigger")," \u5373\u53ef\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"{3}":!0},'public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)\n{\n entityBuilder.ToTable(tb => tb.HasTrigger("TriggerName")); // \u6807\u8bb0\u6570\u636e\u5e93\u8868\u5b58\u5728\u89e6\u53d1\u5668\uff0c\u89e6\u53d1\u5668\u540d\u79f0\u53ef\u968f\u610f\n}\n')),(0,s.kt)("p",null,"\u76f8\u5173 Issue ",(0,s.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/I5S4EC"},"https://gitee.com/dotnetchina/Furion/issues/I5S4EC")),(0,s.kt)("h2",{id:"957-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.5.7 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,s.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,s.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,s.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/6820b113.9a65daa3.js b/handbook/build/assets/js/6820b113.9a65daa3.js new file mode 100644 index 00000000000..7f4623c68fe --- /dev/null +++ b/handbook/build/assets/js/6820b113.9a65daa3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9179],{6053:function(a){a.exports=JSON.parse('{"label":"download","permalink":"/blog/tags/download","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/6875c492.d5041a7a.js b/handbook/build/assets/js/6875c492.d5041a7a.js new file mode 100644 index 00000000000..b4623d41e79 --- /dev/null +++ b/handbook/build/assets/js/6875c492.d5041a7a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8610],{9703:function(e,t,a){a.d(t,{Z:function(){return i}});var n=a(7294),r=a(5999),l=a(2244);function i(e){var t=e.metadata,a=t.previousPage,i=t.nextPage;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,r.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(l.Z,{permalink:a,title:n.createElement(r.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),i&&n.createElement(l.Z,{permalink:i,title:n.createElement(r.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},9985:function(e,t,a){a.d(t,{Z:function(){return i}});var n=a(7294),r=a(9460),l=a(390);function i(e){var t=e.items,a=e.component,i=void 0===a?l.Z:a;return n.createElement(n.Fragment,null,t.map((function(e){var t=e.content;return n.createElement(r.n,{key:t.metadata.permalink,content:t},n.createElement(i,null,n.createElement(t,null)))})))}},1714:function(e,t,a){a.r(t),a.d(t,{default:function(){return f}});var n=a(7294),r=a(6010),l=a(5999),i=a(8824),o=a(1944),s=a(5281),g=a(9960),c=a(9058),u=a(9703),m=a(197),p=a(9985);function d(e){var t,a=(t=(0,i.c)().selectMessage,function(e){return t(e,(0,l.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:e}))});return(0,l.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:a(e.count),tagName:e.label})}function h(e){var t=d(e.tag);return n.createElement(n.Fragment,null,n.createElement(o.d,{title:t}),n.createElement(m.Z,{tag:"blog_tags_posts"}))}function b(e){var t=e.tag,a=e.items,r=e.sidebar,i=e.listMetadata,o=d(t);return n.createElement(c.Z,{sidebar:r},n.createElement("header",{className:"margin-bottom--xl"},n.createElement("h1",null,o),n.createElement(g.Z,{href:t.allTagsPath},n.createElement(l.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),n.createElement(p.Z,{items:a}),n.createElement(u.Z,{metadata:i}))}function f(e){return n.createElement(o.FG,{className:(0,r.Z)(s.k.wrapper.blogPages,s.k.page.blogTagPostListPage)},n.createElement(h,e),n.createElement(b,e))}}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/68ec177d.56e09d7e.js b/handbook/build/assets/js/68ec177d.56e09d7e.js new file mode 100644 index 00000000000..d067c51d64f --- /dev/null +++ b/handbook/build/assets/js/68ec177d.56e09d7e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[223],{3905:function(e,r,n){n.d(r,{Zo:function(){return p},kt:function(){return d}});var t=n(7294);function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function o(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function i(e){for(var r=1;r=0||(a[n]=e[n]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=t.createContext({}),c=function(e){var r=t.useContext(s),n=r;return e&&(n="function"==typeof e?e(r):i(i({},r),e)),n},p=function(e){var r=c(e.components);return t.createElement(s.Provider,{value:r},e.children)},u={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},m=t.forwardRef((function(e,r){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(n),d=a,g=m["".concat(s,".").concat(d)]||m[d]||u[d]||o;return n?t.createElement(g,i(i({ref:r},p),{},{components:n})):t.createElement(g,i({ref:r},p))}));function d(e,r){var n=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var l={};for(var s in r)hasOwnProperty.call(r,s)&&(l[s]=r[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;cCron \u8868\u8fbe\u5f0f",id:"129-\u89e3\u6790-cron-\u8868\u8fbe\u5f0f",level:2},{value:"12.10 BackgroundService \u95f4\u9694\u5b9a\u65f6\u4efb\u52a1",id:"1210-backgroundservice-\u95f4\u9694\u5b9a\u65f6\u4efb\u52a1",level:2},{value:"12.11 BackgroundService Cron \u5b9a\u65f6\u4efb\u52a1",id:"1211-backgroundservice-cron-\u5b9a\u65f6\u4efb\u52a1",level:2}],m={toc:u};function d(e){var r=e.components,n=(0,a.Z)(e,i);return(0,o.kt)("wrapper",(0,t.Z)({},m,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"SpareTime")," \u9759\u6001\u7c7b\u63d0\u4f9b\u4e86\u4e00\u4e9b\u65b9\u6cd5\u65b9\u4fbf\u521d\u59cb\u5316\u548c\u7ba1\u7406\u4efb\u52a1"),(0,o.kt)("h2",{id:"121-\u521d\u59cb\u5316\u4efb\u52a1"},"12.1 \u521d\u59cb\u5316\u4efb\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u5f00\u542f\u95f4\u9694\u4efb\u52a1\nSpareTime.Do(interval, [options]);\n\n// \u5f00\u542f Cron \u8868\u8fbe\u5f0f\u4efb\u52a1\nSpareTime.Do(expression, [options]);\n\n// \u53ea\u6267\u884c\u4e00\u6b21\u4efb\u52a1\nSpareTime.DoOnce(interval, [options]);\n\n// \u5b9e\u73b0\u81ea\u5b9a\u4e49\u4efb\u52a1\nSpareTime.Do(()=>{\n return DateTime.Now.AddMinutes(10);\n},[options]);\n")),(0,o.kt)("h2",{id:"122-\u5b9e\u73b0\u540e\u53f0\u6267\u884c"},"12.2 \u5b9e\u73b0\u540e\u53f0\u6267\u884c"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u5b9e\u73b0\u540e\u53f0\u6267\u884c\nSpareTime.DoIt(()=>{});\n")),(0,o.kt)("h2",{id:"123-\u5f00\u59cb\u4e00\u4e2a\u4efb\u52a1"},"12.3 \u5f00\u59cb\u4e00\u4e2a\u4efb\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'SpareTime.Start("\u4efb\u52a1\u6807\u8bc6");\n')),(0,o.kt)("h2",{id:"124-\u6682\u505c\u4e00\u4e2a\u4efb\u52a1"},"12.4 \u6682\u505c\u4e00\u4e2a\u4efb\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'SpareTime.Stop("\u4efb\u52a1\u6807\u8bc6");\n// \u8fd8\u53ef\u4ee5\u6807\u8bb0\u4e00\u4e2a\u4efb\u52a1\u6267\u884c\u5931\u8d25\nSpareTime.Stop("\u4efb\u52a1\u6807\u8bc6", true);\n')),(0,o.kt)("h2",{id:"125-\u53d6\u6d88\u4e00\u4e2a\u4efb\u52a1"},"12.5 \u53d6\u6d88\u4e00\u4e2a\u4efb\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'SpareTime.Cancel("\u4efb\u52a1\u540d\u79f0");\n')),(0,o.kt)("h2",{id:"126-\u9500\u6bc1\u6240\u6709\u4efb\u52a1"},"12.6 \u9500\u6bc1\u6240\u6709\u4efb\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"SpareTime.Dispose();\n")),(0,o.kt)("h2",{id:"127-\u83b7\u53d6\u6240\u6709\u4efb\u52a1"},"12.7 \u83b7\u53d6\u6240\u6709\u4efb\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var workers = SpareTime.GetWorkers();\n")),(0,o.kt)("h2",{id:"128-\u83b7\u53d6\u5355\u4e2a\u4efb\u52a1"},"12.8 \u83b7\u53d6\u5355\u4e2a\u4efb\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var worker = SpareTime.GetWorker("workerName");\n')),(0,o.kt)("h2",{id:"129-\u89e3\u6790-cron-\u8868\u8fbe\u5f0f"},"12.9 \u89e3\u6790 ",(0,o.kt)("inlineCode",{parentName:"h2"},"Cron")," \u8868\u8fbe\u5f0f"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var nextTime = SpareTime.GetCronNextOccurrence("* * * * *");\n')),(0,o.kt)("h2",{id:"1210-backgroundservice-\u95f4\u9694\u5b9a\u65f6\u4efb\u52a1"},"12.10 ",(0,o.kt)("inlineCode",{parentName:"h2"},"BackgroundService")," \u95f4\u9694\u5b9a\u65f6\u4efb\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u95f4\u9694\u6267\u884c\u4efb\u52a1\nawait SpareTime.DoAsync(1000, () =>\n{\n _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);\n}, stoppingToken);\n')),(0,o.kt)("h2",{id:"1211-backgroundservice-cron-\u5b9a\u65f6\u4efb\u52a1"},"12.11 ",(0,o.kt)("inlineCode",{parentName:"h2"},"BackgroundService")," ",(0,o.kt)("inlineCode",{parentName:"h2"},"Cron")," \u5b9a\u65f6\u4efb\u52a1"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},' // \u6267\u884c Cron \u8868\u8fbe\u5f0f\u4efb\u52a1\nawait SpareTime.DoAsync("*/5 * * * * *", () =>\n{\n _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);\n}, stoppingToken, CronFormat.IncludeSeconds);\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/698c3fb7.4eeb25c9.js b/handbook/build/assets/js/698c3fb7.4eeb25c9.js new file mode 100644 index 00000000000..a0d44ef3f4a --- /dev/null +++ b/handbook/build/assets/js/698c3fb7.4eeb25c9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4249],{3905:function(t,e,a){a.d(e,{Zo:function(){return u},kt:function(){return d}});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var o=n.createContext({}),m=function(t){var e=n.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},u=function(t){var e=m(t.components);return n.createElement(o.Provider,{value:e},t.children)},g={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},s=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,o=t.parentName,u=p(t,["components","mdxType","originalType","parentName"]),s=m(a),d=r,k=s["".concat(o,".").concat(d)]||s[d]||g[d]||l;return a?n.createElement(k,i(i({ref:e},u),{},{components:a})):n.createElement(k,i({ref:e},u))}));function d(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=s;var p={};for(var o in e)hasOwnProperty.call(e,o)&&(p[o]=e[o]);p.originalType=t,p.mdxType="string"==typeof t?t:r,i[1]=p;for(var m=2;mFurion + EFCore",id:"2211-furion--efcore",level:3},{value:"2.2.1.2 Furion + SqlSugar",id:"2212-furion--sqlsugar",level:3},{value:"2.2.2 \u5b89\u88c5\u811a\u624b\u67b6",id:"222-\u5b89\u88c5\u811a\u624b\u67b6",level:2},{value:"2.2.3 \u4f7f\u7528\u811a\u624b\u67b6",id:"223-\u4f7f\u7528\u811a\u624b\u67b6",level:2},{value:"2.2.4 \u811a\u624b\u67b6\u66f4\u65b0",id:"224-\u811a\u624b\u67b6\u66f4\u65b0",level:2},{value:"2.2.5 Visual Studio \u96c6\u6210",id:"225-visual-studio-\u96c6\u6210",level:2},{value:"2.2.6 \u5173\u4e8e MVC \u6dfb\u52a0\u533a\u57df\u51fa\u9519\u95ee\u9898",id:"226-\u5173\u4e8e-mvc-\u6dfb\u52a0\u533a\u57df\u51fa\u9519\u95ee\u9898",level:2},{value:"2.2.7 \u642d\u5efa\u811a\u624b\u67b6",id:"227-\u642d\u5efa\u811a\u624b\u67b6",level:2},{value:"2.2.8 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"228-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:s};function k(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"important"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("strong",{parentName:"p"},"\u811a\u624b\u67b6\u4e0d\u662f\u5b89\u88c5\u5728\u9879\u76ee\u4e2d\u7684\uff01")," \u800c\u662f\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"p"},"CMD")," \u6216 ",(0,l.kt)("inlineCode",{parentName:"p"},"PowerShell")," \u5b89\u88c5\u5230\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u3002")),(0,l.kt)("h2",{id:"221-\u811a\u624b\u67b6"},"2.2.1 \u811a\u624b\u67b6"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u5b98\u65b9\u63d0\u4f9b\u4e86\u591a\u79cd ",(0,l.kt)("inlineCode",{parentName:"p"},"Web")," \u5e94\u7528\u7c7b\u578b\u7684\u811a\u624b\u67b6\uff0c\u65b9\u4fbf\u5927\u5bb6\u5feb\u901f\u521b\u5efa\u591a\u5c42\u67b6\u6784\u9879\u76ee\u3002\u76ee\u524d\u652f\u6301\u4ee5\u4e0b\u5e94\u7528\u811a\u624b\u67b6\uff1a"),(0,l.kt)("h3",{id:"2211-furion--efcore"},"2.2.1.1 ",(0,l.kt)("inlineCode",{parentName:"h3"},"Furion + EFCore")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:"center"},"\u6a21\u677f\u7c7b\u578b"),(0,l.kt)("th",{parentName:"tr",align:null},"\u540d\u79f0"),(0,l.kt)("th",{parentName:"tr",align:null},"\u7248\u672c"),(0,l.kt)("th",{parentName:"tr",align:null},"\u5173\u952e\u8bcd"),(0,l.kt)("th",{parentName:"tr",align:null},"\u63cf\u8ff0"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Mvc/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.Template.Mvc"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Mvc/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.Mvc.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"furionmvc")),(0,l.kt)("td",{parentName:"tr",align:null},"Mvc \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Api/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.Template.Api"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Api/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.Api.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"furionapi")),(0,l.kt)("td",{parentName:"tr",align:null},"WebApi \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.App/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.Template.App"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.App/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.App.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"furionapp")),(0,l.kt)("td",{parentName:"tr",align:null},"Mvc/WebApi \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Razor/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.Template.Razor"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Razor/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.Razor.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"furionrazor")),(0,l.kt)("td",{parentName:"tr",align:null},"RazorPages \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.RazorWithWebApi/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.Template.RazorWithWebApi"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.RazorWithWebApi/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.RazorWithWebApi.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"furionrazorapi")),(0,l.kt)("td",{parentName:"tr",align:null},"RazorPages/WebApi \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Blazor/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.Template.Blazor"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Blazor/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.Blazor.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"furionblazor")),(0,l.kt)("td",{parentName:"tr",align:null},"Blazor \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.BlazorWithWebApi/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.Template.BlazorWithWebApi"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.BlazorWithWebApi/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.BlazorWithWebApi.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"furionblazorapi")),(0,l.kt)("td",{parentName:"tr",align:null},"Blazor/WebApi \u6a21\u677f")))),(0,l.kt)("h3",{id:"2212-furion--sqlsugar"},"2.2.1.2 ",(0,l.kt)("inlineCode",{parentName:"h3"},"Furion + SqlSugar")),(0,l.kt)("admonition",{type:"tip"},(0,l.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"SqlSugar")," \u4f18\u70b9"),(0,l.kt)("p",{parentName:"admonition"},"\u5f25\u8865 ",(0,l.kt)("inlineCode",{parentName:"p"},"EF Core")," \u4e0a\u624b\u96be\u5ea6\uff1a\u652f\u6301\u7ebf\u7a0b\u5b89\u5168\u3001\u652f\u6301\u591a\u5e93\u4e8b\u52a1\u3001\u591a\u5e93\u517c\u5bb9\u3001\u591a\u5e93\u67e5\u8be2\u548c\u591a\u5e93\u5207\u6362\u3002")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:"center"},"\u6a21\u677f\u7c7b\u578b"),(0,l.kt)("th",{parentName:"tr",align:null},"\u540d\u79f0"),(0,l.kt)("th",{parentName:"tr",align:null},"\u7248\u672c"),(0,l.kt)("th",{parentName:"tr",align:null},"\u5173\u952e\u8bcd"),(0,l.kt)("th",{parentName:"tr",align:null},"\u63cf\u8ff0"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Mvc/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.Mvc"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Mvc/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.Mvc.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"fsmvc")),(0,l.kt)("td",{parentName:"tr",align:null},"Mvc \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Api/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.Api"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Api/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.Api.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"fsapi")),(0,l.kt)("td",{parentName:"tr",align:null},"WebApi \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.App/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.App"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.App/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.App.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"fsapp")),(0,l.kt)("td",{parentName:"tr",align:null},"Mvc/WebApi \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Razor/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.Razor"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Razor/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.Razor.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"fsrazor")),(0,l.kt)("td",{parentName:"tr",align:null},"RazorPages \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.RazorWithWebApi/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.RazorWithWebApi"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.RazorWithWebApi/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.RazorWithWebApi.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"fsrazorapi")),(0,l.kt)("td",{parentName:"tr",align:null},"RazorPages/WebApi \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Blazor/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.Blazor"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Blazor/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.Blazor.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"fsblazor")),(0,l.kt)("td",{parentName:"tr",align:null},"Blazor \u6a21\u677f")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:"center"},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.BlazorWithWebApi/"},(0,l.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.BlazorWithWebApi"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.BlazorWithWebApi/"},(0,l.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.BlazorWithWebApi.svg?cacheSeconds=10800",alt:"nuget"}))),(0,l.kt)("td",{parentName:"tr",align:null},"\ud83d\udc49 ",(0,l.kt)("strong",{parentName:"td"},"fsblazorapi")),(0,l.kt)("td",{parentName:"tr",align:null},"Blazor/WebApi \u6a21\u677f")))),(0,l.kt)("h2",{id:"222-\u5b89\u88c5\u811a\u624b\u67b6"},"2.2.2 \u5b89\u88c5\u811a\u624b\u67b6"),(0,l.kt)("p",null,"\u6253\u5f00 ",(0,l.kt)("inlineCode",{parentName:"p"},"CMD")," \u6216 ",(0,l.kt)("inlineCode",{parentName:"p"},"Powershell")," \u6267\u884c\u6a21\u677f\u5b89\u88c5\u547d\u4ee4\uff08\u65b0\u7248\u672c ",(0,l.kt)("inlineCode",{parentName:"p"},"--install")," \u53ef\u6362\u6210 ",(0,l.kt)("inlineCode",{parentName:"p"},"install"),"\uff09\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"// EFCore\ndotnet new --install Furion.Template.Api::4.7.9\n// SqlSugar\ndotnet new --install Furion.SqlSugar.Template.Api::4.7.9\n")),(0,l.kt)("admonition",{type:"tip"},(0,l.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"SqlSugar")," \u811a\u624b\u67b6\u57fa\u672c\u4f7f\u7528"),(0,l.kt)("p",{parentName:"admonition"},"\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"SqlSugar")," \u811a\u624b\u67b6\u4e2d\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"Core")," \u5c42\u5305\u542b\u4e86\u4e00\u4e2a ",(0,l.kt)("inlineCode",{parentName:"p"},"DbContext.cs")," \u7c7b\uff0c\u53ef\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"p"},"DbContext.Instance")," \u5c31\u53ef\u4ee5\u83b7\u53d6\u5230 ",(0,l.kt)("inlineCode",{parentName:"p"},"SqlSugarScope")," \u5bf9\u8c61\u3002"),(0,l.kt)("p",{parentName:"admonition"},"\u6570\u636e\u5e93\u94fe\u63a5\u5b57\u7b26\u4e32\u5728\u542f\u52a8\u5c42 ",(0,l.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u6587\u4ef6\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},"ConnectionConfigs")," \u8282\u70b9\u4e2d\u914d\u7f6e\uff0c\u5bf9\u5e94\u7684\u662f ",(0,l.kt)("inlineCode",{parentName:"p"},"SqlSugar")," \u4e2d\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},"ConnectionConfig[]")," \u5bf9\u8c61\u3002")),(0,l.kt)("h2",{id:"223-\u4f7f\u7528\u811a\u624b\u67b6"},"2.2.3 \u4f7f\u7528\u811a\u624b\u67b6"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {1,4-6,9-11}",showLineNumbers:!0,"{1,4-6,9-11}":!0},"dotnet new furionapi -n \u9879\u76ee\u540d\u79f0 -f .NET\u7248\u672c\n\n# EFCore\uff1a\u652f\u6301\u521b\u5efa .NET5-7 \u7248\u672c\ndotnet new furionapi -n MyProject -f net5\ndotnet new furionapi -n MyProject -f net6\ndotnet new furionapi -n MyProject -f net7\n\n# SqlSugar\uff1a\u652f\u6301\u521b\u5efa .NET5-7 \u7248\u672c\ndotnet new fsapi -n MyProject -f net5\ndotnet new fsapi -n MyProject -f net6\ndotnet new fsapi -n MyProject -f net7\n")),(0,l.kt)("p",null,"\u8fd9\u6837\u5c31\u53ef\u4ee5\u751f\u6210\u9879\u76ee\u4ee3\u7801\u4e86\uff0c",(0,l.kt)("strong",{parentName:"p"},"\u751f\u6210\u4e4b\u540e\u63a8\u8350\u5c06\u6240\u6709\u7684 ",(0,l.kt)("inlineCode",{parentName:"strong"},"nuget")," \u5305\u66f4\u65b0\u5230\u6700\u65b0\u7248\u672c\u3002")),(0,l.kt)("admonition",{type:"tip"},(0,l.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u5173\u4e8e\u9879\u76ee\u540d\u79f0\u548c ",(0,l.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},".NET")," \u7248\u672c"),(0,l.kt)("p",{parentName:"admonition"},"\u901a\u8fc7\u811a\u624b\u67b6\u751f\u6210\u7684\u9879\u76ee\u540d\u79f0\u4e0d\u80fd\u5305\u542b ",(0,l.kt)("inlineCode",{parentName:"p"},"\u77ed\u6a2a\u7ebf")," \u7b49\u7279\u6b8a\u5b57\u7b26\uff0c\u5982\u6709\u8be5\u9700\u6c42\uff0c\u53ef\u5728\u751f\u6210\u4e4b\u540e\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u8fdb\u884c\u624b\u52a8\u4fee\u6539\u3002"),(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"-f")," \u7248\u672c\u53c2\u6570\u6240\u6709\u9009\u9879\uff1a",(0,l.kt)("inlineCode",{parentName:"p"},"net5"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"net6"),"\uff0c",(0,l.kt)("inlineCode",{parentName:"p"},"net7"),"\u3002")),(0,l.kt)("admonition",{title:"\u7279\u522b\u63d0\u9192",type:"important"},(0,l.kt)("p",{parentName:"admonition"},(0,l.kt)("inlineCode",{parentName:"p"},"furionapi")," \u5bf9\u5e94\u7684\u662f\u4e0a\u9762\u5217\u8868\u7684 ",(0,l.kt)("inlineCode",{parentName:"p"},"\u5173\u952e\u5b57"),"\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"p"},"dotnet new --list")," \u67e5\u770b\u3002"),(0,l.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a\u53ef\u4ee5\u4f7f\u7528 ",(0,l.kt)("inlineCode",{parentName:"p"},"dotnet new \u5173\u952e\u5b57 --help")," \u67e5\u770b\u66f4\u591a\u53c2\u6570\u3002")),(0,l.kt)("h2",{id:"224-\u811a\u624b\u67b6\u66f4\u65b0"},"2.2.4 \u811a\u624b\u67b6\u66f4\u65b0"),(0,l.kt)("p",null,"\u53ea\u9700\u8981\u91cd\u65b0\u5b89\u88c5\u6700\u65b0\u7248\u66ff\u6362\u5373\u53ef\uff0c\u5982\uff1a"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new --install Furion.Template.Api::4.7.9\n")),(0,l.kt)("p",null,"\u4e0d\u5e26\u7248\u672c\u53f7\u603b\u662f\u5b89\u88c5\u6700\u65b0\u7684\u7248\u672c\u3002"),(0,l.kt)("h2",{id:"225-visual-studio-\u96c6\u6210"},"2.2.5 ",(0,l.kt)("inlineCode",{parentName:"h2"},"Visual Studio")," \u96c6\u6210"),(0,l.kt)("p",null,"\u901a\u8fc7\u547d\u4ee4\u5b89\u88c5\u811a\u624b\u67b6\u540e\uff0c\u5347\u7ea7 ",(0,l.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u5230\u6700\u65b0\u7248\u53ef\u4f7f\u7528\u53ef\u89c6\u5316\u65b9\u5f0f\u521b\u5efa\u54e6\u3002"),(0,l.kt)("img",{src:(0,i.Z)("img/ksh.png")}),(0,l.kt)("h2",{id:"226-\u5173\u4e8e-mvc-\u6dfb\u52a0\u533a\u57df\u51fa\u9519\u95ee\u9898"},"2.2.6 ",(0,l.kt)("inlineCode",{parentName:"h2"},"\u5173\u4e8e MVC \u6dfb\u52a0\u533a\u57df\u51fa\u9519\u95ee\u9898")),(0,l.kt)("p",null,"\u7531\u4e8e ",(0,l.kt)("inlineCode",{parentName:"p"},"Furion")," \u5e95\u5c42\u4f9d\u8d56\u4e86 ",(0,l.kt)("inlineCode",{parentName:"p"},"Microsoft.CodeAnalysis.CSharp")," \u5305\uff0c\u6240\u4ee5\u53ef\u80fd\u901a\u8fc7 ",(0,l.kt)("inlineCode",{parentName:"p"},"Viusal Studio")," \u7684\u754c\u9762\u6dfb\u52a0 ",(0,l.kt)("inlineCode",{parentName:"p"},"Area \u533a\u57df")," \u65f6\u4f1a\u51fa\u9519\uff0c\u8fd9\u65f6\u5019\u53ea\u9700\u8981\u5728 ",(0,l.kt)("inlineCode",{parentName:"p"},"Web.Entry")," \u5c42\u5b89\u88c5\u4e0b\u9762\u51e0\u4e2a\u5305\u5373\u53ef\uff1a"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Microsoft.CodeAnalysis.CSharp.Features")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Microsoft.CodeAnalysis.CSharp.Scripting")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Microsoft.CodeAnalysis.VisualBasic.Features")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Microsoft.CodeAnalysis.Workspaces.MSBuild")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"Microsoft.VisualStudio.Web.CodeGeneration.Design"))),(0,l.kt)("h2",{id:"227-\u642d\u5efa\u811a\u624b\u67b6"},"2.2.7 \u642d\u5efa\u811a\u624b\u67b6"),(0,l.kt)("p",null,"\u811a\u624b\u67b6\u53ef\u4ee5\u6781\u5927\u7684\u63d0\u9ad8\u6211\u4eec\u642d\u5efa\u65b0\u9879\u76ee\u7684\u901f\u5ea6\uff0c\u63a8\u8350\u4e24\u7bc7\u6587\u7ae0\u7ed9\u5927\u5bb6\u5b66\u4e60\uff1a"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://www.cnblogs.com/laozhang-is-phi/p/10205495.html"},"https://www.cnblogs.com/laozhang-is-phi/p/10205495.html")),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://www.cnblogs.com/catcher1994/p/10061470.html"},"https://www.cnblogs.com/catcher1994/p/10061470.html")),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"\u63a8\u8350\u76f4\u63a5\u62f7\u8d1d ",(0,l.kt)("inlineCode",{parentName:"strong"},"Furion")," \u811a\u624b\u67b6\u6587\u4ef6\u5939\u8fdb\u884c\u4fee\u6539\uff0c\u53ef\u907f\u514d\u5f88\u591a\u95ee\u9898\u3002")),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/tree/v4/templates"},"Furion \u811a\u624b\u67b6\u6e90\u7801")),(0,l.kt)("h2",{id:"228-\u53cd\u9988\u4e0e\u5efa\u8bae"},"2.2.8 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,l.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,l.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,l.kt)("hr",null),(0,l.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,l.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,l.kt)("inlineCode",{parentName:"p"},"\u6a21\u677f\u77e5\u8bc6")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,l.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-new"},"dotnet-new \u6a21\u677f")," \u7ae0\u8282\u3002")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/69b28fcd.2caa0132.js b/handbook/build/assets/js/69b28fcd.2caa0132.js new file mode 100644 index 00000000000..6a9f683d0f1 --- /dev/null +++ b/handbook/build/assets/js/69b28fcd.2caa0132.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[1186],{3905:function(e,n,t){t.d(n,{Zo:function(){return c},kt:function(){return m}});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=r.createContext({}),p=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},c=function(e){var n=p(e.components);return r.createElement(l.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(t),m=a,v=d["".concat(l,".").concat(m)]||d[m]||u[m]||i;return t?r.createElement(v,o(o({ref:n},c),{},{components:t})):r.createElement(v,o({ref:n},c))}));function m(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,o=new Array(i);o[0]=d;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,o[1]=s;for(var p=2;pMessageCenter \u6d88\u606f\u4e2d\u5fc3",id:"222-messagecenter-\u6d88\u606f\u4e2d\u5fc3",level:2},{value:"22.2.1 \u6ce8\u518c \u8f7b\u91cf\u7ea7\u4e8b\u4ef6\u603b\u7ebf\u670d\u52a1",id:"2221-\u6ce8\u518c-\u8f7b\u91cf\u7ea7\u4e8b\u4ef6\u603b\u7ebf\u670d\u52a1",level:3},{value:"22.2.2 \u5b9a\u4e49\u8ba2\u9605\u5904\u7406\u7a0b\u5e8f",id:"2222-\u5b9a\u4e49\u8ba2\u9605\u5904\u7406\u7a0b\u5e8f",level:3},{value:"22.2.3 \u53d1\u5e03\u6d88\u606f",id:"2223-\u53d1\u5e03\u6d88\u606f",level:3},{value:"22.2.4 \u76f4\u63a5\u8ba2\u9605\u6d88\u606f",id:"2224-\u76f4\u63a5\u8ba2\u9605\u6d88\u606f",level:3},{value:"22.3 \u540c\u6b65\u65b9\u5f0f\u6267\u884c",id:"223-\u540c\u6b65\u65b9\u5f0f\u6267\u884c",level:2},{value:"22.4 \u5173\u4e8e\u4f9d\u8d56\u6ce8\u5165",id:"224-\u5173\u4e8e\u4f9d\u8d56\u6ce8\u5165",level:2},{value:"22.5 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"225-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],m={toc:d};function v(e){var n=e.components,t=(0,a.Z)(e,s);return(0,i.kt)("wrapper",(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"v2.20+ \u7248\u672c\u8bf4\u660e",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"\u5728 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion v2.20+")," \u7248\u672c\u91c7\u7528 ",(0,i.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Jaina"},"Jaina")," \u4e8b\u4ef6\u603b\u7ebf\u66ff\u6362\u539f\u6709\u7684 ",(0,i.kt)("inlineCode",{parentName:"strong"},"EventBus")),"\uff0c",(0,i.kt)("strong",{parentName:"p"},"\ud83d\ude36",(0,i.kt)("a",{parentName:"strong",href:"/docs/event-bus"},"\u67e5\u770b\u65b0\u6587\u6863")))),(0,i.kt)("h2",{id:"221-\u4ec0\u4e48\u662f\u4e8b\u4ef6\u603b\u7ebf"},"22.1 \u4ec0\u4e48\u662f\u4e8b\u4ef6\u603b\u7ebf"),(0,i.kt)("p",null,"\u4e8b\u4ef6\u603b\u7ebf\u662f\u5bf9\u53d1\u5e03-\u8ba2\u9605\u6a21\u5f0f\u7684\u4e00\u79cd\u5b9e\u73b0\u3002\u5b83\u662f\u4e00\u79cd\u96c6\u4e2d\u5f0f\u4e8b\u4ef6\u5904\u7406\u673a\u5236\uff0c\u5141\u8bb8\u4e0d\u540c\u7684\u7ec4\u4ef6\u4e4b\u95f4\u8fdb\u884c\u5f7c\u6b64\u901a\u4fe1\u800c\u53c8\u4e0d\u9700\u8981\u76f8\u4e92\u4f9d\u8d56\uff0c\u8fbe\u5230\u4e00\u79cd\u89e3\u8026\u7684\u76ee\u7684\u3002"),(0,i.kt)("p",null,"\u6211\u4eec\u6765\u770b\u770b\u4e8b\u4ef6\u603b\u7ebf\u7684\u5904\u7406\u6d41\u7a0b\uff1a"),(0,i.kt)("img",{src:(0,o.Z)("img/event1.png")}),(0,i.kt)("h2",{id:"222-messagecenter-\u6d88\u606f\u4e2d\u5fc3"},"22.2 ",(0,i.kt)("inlineCode",{parentName:"h2"},"MessageCenter")," \u6d88\u606f\u4e2d\u5fc3"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u5b9e\u73b0\u4e86\u4e00\u79cd\u8f7b\u91cf\u7ea7\u7684\u4e8b\u4ef6\u603b\u7ebf\u5b9e\u73b0\u673a\u5236\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"MessageCenter"),"\uff08\u6d88\u606f\u4e2d\u5fc3\uff09\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"MessageCenter")," \u91c7\u7528\u5b57\u7b26\u4e32\u6d88\u606f\u673a\u5236\u8fdb\u884c\u5e7f\u64ad\uff0c \u53ef\u4ee5\u5728\u7edd\u5927\u591a\u6570\u4e2d\u5c0f\u578b\u9879\u76ee\u4e2d\u53d1\u6325\u4f5c\u7528\uff0c\u7f3a\u70b9\u662f\u6d88\u606f\u5904\u7406\u662f\u5728\u4e3b\u7ebf\u7a0b\u4e2d\u5b8c\u6210\u5e76\u4e14\u6d88\u606f\u4e0d\u652f\u6301\u5206\u5e03\u5f0f\u5b58\u50a8\u3002"),(0,i.kt)("p",null,"\u53e6\u5916\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"MessageCenter")," \u652f\u6301\u5355\u64ad\u3001\u591a\u64ad\u53d1\u5e03\u53ca\u591a\u8ba2\u9605\u3002\u5982\u56fe\u6240\u793a\uff1a"),(0,i.kt)("img",{src:(0,o.Z)("img/event2.png")}),(0,i.kt)("h3",{id:"2221-\u6ce8\u518c-\u8f7b\u91cf\u7ea7\u4e8b\u4ef6\u603b\u7ebf\u670d\u52a1"},"22.2.1 \u6ce8\u518c ",(0,i.kt)("inlineCode",{parentName:"h3"},"\u8f7b\u91cf\u7ea7\u4e8b\u4ef6\u603b\u7ebf\u670d\u52a1")),(0,i.kt)("p",null,"\u5982\u679c\u60f3\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"MessageCenter")," \u8f7b\u91cf\u7ea7\u4e8b\u4ef6\u603b\u7ebf\uff0c\u53ea\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u6ce8\u518c\u670d\u52a1\u5373\u53ef\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},"public void ConfigureServices(IServiceCollection services)\n{\n services.AddSimpleEventBus();\n}\n")),(0,i.kt)("h3",{id:"2222-\u5b9a\u4e49\u8ba2\u9605\u5904\u7406\u7a0b\u5e8f"},"22.2.2 \u5b9a\u4e49\u8ba2\u9605\u5904\u7406\u7a0b\u5e8f"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"MessageCenter")," \u662f\u6839\u636e ",(0,i.kt)("inlineCode",{parentName:"p"},"MesseageId")," \u6d88\u606f Id \u6765\u89e6\u53d1\u5bf9\u5e94\u7684\u5904\u7406\u7a0b\u5e8f\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5b9a\u4e49 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u8ba2\u9605\u5904\u7406\u7a0b\u5e8f\u7c7b"),"\uff0c\u8be5\u7c7b\u9700\u5b9e\u73b0 ",(0,i.kt)("inlineCode",{parentName:"p"},"ISubscribeHandler")," \u63a5\u53e3\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4-5,11-13}",showLineNumbers:!0,"":!0,"{1,4-5,11-13}":!0},'public class UserChangeSubscribeHandler : ISubscribeHandler\n{\n // \u5b9a\u4e49\u4e00\u6761\u6d88\u606f\n [SubscribeMessage("create:user")]\n public void CreateUser(string eventId, object payload)\n {\n Console.WriteLine("\u6211\u662f"+eventId);\n }\n\n // \u591a\u6761\u6d88\u606f\u5171\u7528\u540c\u4e00\u4e2a\u5904\u7406\u7a0b\u5e8f\n [SubscribeMessage("delete:user")]\n [SubscribeMessage("remove:user")]\n public void RemoveUser(string eventId, object payload)\n {\n Console.WriteLine("\u6211\u662f"+eventId);\n }\n\n // \u652f\u6301\u5f02\u6b65\n [SubscribeMessage("delete:user")]\n public async Task SupportAsync(string eventId, object payload)\n {\n await MethodAsync();\n }\n}\n')),(0,i.kt)("h3",{id:"2223-\u53d1\u5e03\u6d88\u606f"},"22.2.3 \u53d1\u5e03\u6d88\u606f"),(0,i.kt)("p",null,"\u5b9a\u4e49\u597d\u8ba2\u9605\u5904\u7406\u7a0b\u5e8f\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5728\u7a0b\u5e8f\u4efb\u4f55\u5730\u65b9\u8fdb\u884c\u5e7f\u64ad\u6d88\u606f\uff0c\u4e8b\u4ef6\u603b\u7ebf\u4f1a\u81ea\u52a8\u6839\u636e ",(0,i.kt)("inlineCode",{parentName:"p"},"\u6d88\u606f Id")," \u89e6\u53d1\u5bf9\u5e94\u7684\u5904\u7406\u7a0b\u5e8f\u65b9\u6cd5\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'MessageCenter.Send("create:user", new User {}); // => \u6253\u5370\uff1a\u6211\u662fcreate:user\n\nMessageCenter.Send("delete:user", new User {}); // => \u6253\u5370\uff1a\u6211\u662fdelete:user\nMessageCenter.Send("remove:user", new User {}); // => \u6253\u5370\uff1a\u6211\u662fremove:user\n')),(0,i.kt)("h3",{id:"2224-\u76f4\u63a5\u8ba2\u9605\u6d88\u606f"},"22.2.4 \u76f4\u63a5\u8ba2\u9605\u6d88\u606f"),(0,i.kt)("p",null,"\u5728\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u521b\u5efa ",(0,i.kt)("inlineCode",{parentName:"p"},"ISubscribeHandler")," \u7684\u6d3e\u751f\u7c7b\u8fdb\u884c\u76f8\u5173\u914d\u7f6e\u624d\u80fd\u5b9e\u73b0\u8ba2\u9605\u5904\u7406\u3002"),(0,i.kt)("p",null,"\u5728\u67d0\u4e9b\u7279\u6b8a\u60c5\u51b5\u4e0b\uff0c\u53ef\u80fd\u53ea\u9700\u8981\u8ba2\u9605\u4e00\u6b21\u5373\u53ef\u3002\u6240\u4ee5\uff0c\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u4e3a\u4e86\u66f4\u7b80\u4fbf\u7684\u8ba2\u9605\u6d88\u606f\uff0c\u4e5f\u63d0\u4f9b\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"MessageCenter.Subscribe")," \u9759\u6001\u65b9\u6cd5\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'MessageCenter.Subscribe("create:user", (i,p) => {\n // do something\u3002\u3002\u3002\n});\n')),(0,i.kt)("h2",{id:"223-\u540c\u6b65\u65b9\u5f0f\u6267\u884c"},"22.3 \u540c\u6b65\u65b9\u5f0f\u6267\u884c"),(0,i.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e8b\u4ef6\u603b\u7ebf\u603b\u662f\u91c7\u7528\u65b0\u7ebf\u7a0b\u65b9\u5f0f\u6267\u884c\uff0c\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u914d\u7f6e\u4e3a\u540c\u6b65\u65b9\u5f0f\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'MessageCenter.Send("create:user", isSync: true);\n')),(0,i.kt)("h2",{id:"224-\u5173\u4e8e\u4f9d\u8d56\u6ce8\u5165"},"22.4 \u5173\u4e8e\u4f9d\u8d56\u6ce8\u5165"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u4e8b\u4ef6\u603b\u7ebf\u662f\u4e0d\u652f\u6301\u6784\u9020\u51fd\u6570\u6ce8\u5165\u7684\uff0c\u800c\u4e14\u6784\u9020\u51fd\u6570\u4e5f\u53ea\u4f1a\u6267\u884c\u4e00\u6b21\u3002\u6240\u4ee5\u9700\u8981\u7528\u5230\u670d\u52a1\uff0c\u5e94\u8be5\u901a\u8fc7\u9759\u6001\u7c7b\u89e3\u6790\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"App.GetService()")," \u6216 ",(0,i.kt)("inlineCode",{parentName:"p"},"Db.GetRepository()"),"\u3002"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,12-20}",showLineNumbers:!0,"":!0,"{5,12-20}":!0},'public class UserChangeSubscribeHandler : ISubscribeHandler\n{\n public UserChangeSubscribeHandler()\n {\n // \u4e0d\u652f\u6301\u8fd9\u91cc\u89e3\u6790\u670d\u52a1\uff01\uff01\uff01\uff01\uff01\uff01\uff01\uff01\uff01\uff01\uff01\n }\n\n // \u5b9a\u4e49\u4e00\u6761\u6d88\u606f\n [SubscribeMessage("create:user")]\n public void CreateUser(string eventId, object payload)\n {\n // \u521b\u5efa\u4e00\u4e2a\u4f5c\u7528\u57df\uff0c\u5bf9\u8c61\u4f7f\u7528\u5b8c\u6210\u81ea\u52a8\u91ca\u653e\n Scoped.Create((_, scope) =>\n {\n var services = scope.ServiceProvider;\n\n var repository = Db.GetRepository(services); // services \u4f20\u9012\u8fdb\u53bb\n var someService = App.GetService(services); // services \u4f20\u9012\u8fdb\u53bb\n var otherService = services.GetService(); // \u76f4\u63a5\u7528 services \u89e3\u6790\n });\n }\n}\n')),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u5173\u4e8e ",(0,i.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"App.GetService()")," \u89e3\u6790\u670d\u52a1"),(0,i.kt)("p",{parentName:"admonition"},"\u5728\u9ad8\u9891\u5b9a\u65f6\u4efb\u52a1\u4e2d\u8c03\u7528",(0,i.kt)("inlineCode",{parentName:"p"},"App.GetService(TService)"),"\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u5185\u5b58\u65e0\u6cd5\u56de\u6536\u7684\u60c5\u51b5\uff0c\u5efa\u8bae\u59cb\u7ec8\u4f7f\u7528",(0,i.kt)("inlineCode",{parentName:"p"},"scope.ServiceProvider.GetService(TService)"),"\u6765\u83b7\u53d6",(0,i.kt)("inlineCode",{parentName:"p"},"TService"))),(0,i.kt)("admonition",{title:"\u6570\u636e\u5e93\u64cd\u4f5c\u6ce8\u610f",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f5c\u7528\u57df\u4e2d\u5bf9",(0,i.kt)("strong",{parentName:"p"},"\u6570\u636e\u5e93\u6709\u4efb\u4f55\u53d8\u66f4\u64cd\u4f5c"),"\uff0c\u9700\u624b\u52a8\u8c03\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"SaveChanges")," \u6216\u5e26 ",(0,i.kt)("inlineCode",{parentName:"p"},"Now")," \u7ed3\u5c3e\u7684\u65b9\u6cd5\u3002\u4e5f\u53ef\u4ee5\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Scoped.CreateUow(handler)")," \u4ee3\u66ff\u3002")),(0,i.kt)("admonition",{title:"\u5173\u4e8e\u4f9d\u8d56\u6ce8\u5165",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"ISubscribeHandler")," \u63a5\u53e3\u4e3b\u8981\u662f\u7528\u6765\u67e5\u627e\u5b9a\u4e49\u4e8b\u4ef6\u5bf9\u8c61\u7684\uff0c\u4e5f\u5c31\u662f\u5b83\u7684\u5b9e\u73b0\u7c7b\u5e76\u672a\u63d0\u4f9b\u4f9d\u8d56\u6ce8\u5165\u529f\u80fd\uff0c\u6240\u4ee5\u5728\u5b9e\u73b0\u7c7b\u5e76\u4e0d\u652f\u6301\u6784\u9020\u51fd\u6570\u6ce8\u5165\u4f9d\u8d56\u9879\u3002")),(0,i.kt)("h2",{id:"225-\u53cd\u9988\u4e0e\u5efa\u8bae"},"22.5 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}v.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/6b7b862c.d6d4ee4f.js b/handbook/build/assets/js/6b7b862c.d6d4ee4f.js new file mode 100644 index 00000000000..b103d252a8a --- /dev/null +++ b/handbook/build/assets/js/6b7b862c.d6d4ee4f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6366],{3905:function(e,n,t){t.d(n,{Zo:function(){return d},kt:function(){return c}});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var i=r.createContext({}),p=function(e){var n=r.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},d=function(e){var n=p(e.components);return r.createElement(i.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},l=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,s=e.originalType,i=e.parentName,d=u(e,["components","mdxType","originalType","parentName"]),l=p(t),c=a,w=l["".concat(i,".").concat(c)]||l[c]||m[c]||s;return t?r.createElement(w,o(o({ref:n},d),{},{components:t})):r.createElement(w,o({ref:n},d))}));function c(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var s=t.length,o=new Array(s);o[0]=l;var u={};for(var i in n)hasOwnProperty.call(n,i)&&(u[i]=n[i]);u.originalType=e,u.mdxType="string"==typeof e?e:a,o[1]=u;for(var p=2;p { user, user2 });\n\n// \u793a\u4f8b\u4e09\nrepository.Update(new[] {user, user2 });\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.UpdateAsync(user, user2);\n\n// \u793a\u4f8b\u4e8c\nawait repository.UpdateAsync(new List { user, user2 });\n\n// \u793a\u4f8b\u4e09\nawait repository.UpdateAsync(new[] {user, user2 });\n")),(0,s.kt)("h2",{id:"9614-\u66f4\u65b0\u591a\u6761\u8bb0\u5f55\u7acb\u5373\u63d0\u4ea4"},"9.6.14 \u66f4\u65b0\u591a\u6761\u8bb0\u5f55\uff08\u7acb\u5373\u63d0\u4ea4\uff09"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.UpdateNow(user, user2);\n\n// \u793a\u4f8b\u4e8c\nrepository.UpdateNow(new List { user, user2 });\n\n// \u793a\u4f8b\u4e09\nrepository.UpdateNow(new[] {user, user2 });\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.UpdateNowAsync(user, user2);\n\n// \u793a\u4f8b\u4e8c\nawait repository.UpdateNowAsync(new List { user, user2 });\n\n// \u793a\u4f8b\u4e09\nawait repository.UpdateNowAsync(new[] {user, user2 });\n")),(0,s.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,s.kt)("p",{parentName:"admonition"},"\u6240\u6709\u5e26 ",(0,s.kt)("inlineCode",{parentName:"p"},"Now")," \u7ed3\u5c3e\u7684\u8868\u793a\u7acb\u5373\u63d0\u4ea4\u5230\u6570\u636e\u5e93\uff0c\u4e5f\u5c31\u662f\u7acb\u5373\u8c03\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"SaveChanges")," \u6216 ",(0,s.kt)("inlineCode",{parentName:"p"},"SaveChangesAsync"),"\u3002")),(0,s.kt)("h2",{id:"9615-\u5ffd\u7565\u7a7a\u503c\u66f4\u65b0"},"9.6.15 \u5ffd\u7565\u7a7a\u503c\u66f4\u65b0"),(0,s.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,s.kt)("inlineCode",{parentName:"p"},"EFCore")," \u66f4\u65b0\u4f1a\u66f4\u65b0\u5168\u90e8\u5217\uff08\u9664\u5b9e\u4f53\u8ddf\u8e2a\u65b9\u5f0f\u4ee5\u5916\uff09\uff0c\u6709\u4e9b\u65f6\u5019\u6211\u4eec\u5e0c\u671b ",(0,s.kt)("inlineCode",{parentName:"p"},"Null")," \u503c\u65e0\u9700\u66f4\u65b0\uff0c\u8fd9\u662f\u6211\u4eec\u53ea\u9700\u8981\u5728\u66f4\u65b0\u65f6\u5019\u914d\u7f6e ",(0,s.kt)("inlineCode",{parentName:"p"},"ignoreNullValues")," \u53c2\u6570\u5373\u53ef\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"repository.Update(entity, ignoreNullValues: true);\n")),(0,s.kt)("p",null,"\u4e5f\u53ef\u4ee5\u5168\u5c40\u914d\u7f6e\uff0c\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"AppDbContext")," \u7684\u6d3e\u751f\u7c7b\u7684\u6784\u9020\u51fd\u6570\u4e2d\u542f\u7528\u5373\u53ef\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11}",showLineNumbers:!0,"":!0,"{11}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]\n public class DefaultDbContext : AppDbContext\n {\n public DefaultDbContext(DbContextOptions options) : base(options)\n {\n InsertOrUpdateIgnoreNullValues = true;\n }\n }\n}\n')),(0,s.kt)("h2",{id:"9616-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.6.16 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,s.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,s.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,s.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/6eaa010c.93631553.js b/handbook/build/assets/js/6eaa010c.93631553.js new file mode 100644 index 00000000000..82534dbcfcf --- /dev/null +++ b/handbook/build/assets/js/6eaa010c.93631553.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9742],{3905:function(e,n,t){t.d(n,{Zo:function(){return u},kt:function(){return k}});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=r.createContext({}),s=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},u=function(e){var n=s(e.components);return r.createElement(l.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),d=s(t),k=o,m=d["".concat(l,".").concat(k)]||d[k]||p[k]||a;return t?r.createElement(m,i(i({ref:n},u),{},{components:t})):r.createElement(m,i({ref:n},u))}));function k(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=d;var c={};for(var l in n)hasOwnProperty.call(n,l)&&(c[l]=n[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var s=2;sToken",id:"141-\u751f\u6210-token",level:2},{value:"14.2 \u751f\u6210\u5237\u65b0 Token",id:"142-\u751f\u6210\u5237\u65b0-token",level:2},{value:"14.3 \u6839\u636e\u8fc7\u671f Token \u4ea4\u6362\u65b0 Token",id:"143-\u6839\u636e\u8fc7\u671f-token-\u4ea4\u6362\u65b0-token",level:2},{value:"14.4 \u6388\u6743\u5904\u7406\u7a0b\u5e8f\u81ea\u52a8\u5237\u65b0 Token",id:"144-\u6388\u6743\u5904\u7406\u7a0b\u5e8f\u81ea\u52a8\u5237\u65b0-token",level:2},{value:"14.5 \u9a8c\u8bc1 Token \u6709\u6548\u6027",id:"145-\u9a8c\u8bc1-token-\u6709\u6548\u6027",level:2},{value:"14.6 \u9a8c\u8bc1\u8bf7\u6c42\u4e2d Token \u6709\u6548\u6027",id:"146-\u9a8c\u8bc1\u8bf7\u6c42\u4e2d-token-\u6709\u6548\u6027",level:2},{value:"14.7 \u8bfb\u53d6 Token \u4fe1\u606f\uff08\u4e0d\u542b\u9a8c\u8bc1\uff09",id:"147-\u8bfb\u53d6-token-\u4fe1\u606f\u4e0d\u542b\u9a8c\u8bc1",level:2}],d={toc:p};function k(e){var n=e.components,t=(0,o.Z)(e,i);return(0,a.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"141-\u751f\u6210-token"},"14.1 \u751f\u6210 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Token")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u8bfb\u53d6\u914d\u7f6e\u4fe1\u606f\u751f\u6210 Token\nvar token = JWTEncryption.Encrypt(new Dictionary { { "UserId", 1 } });\n\n// \u914d\u7f6e Token \u8fc7\u671f\u65f6\u95f4\nvar token = JWTEncryption.Encrypt(new Dictionary { { "UserId", 1 } }, 20);\n\n// \u914d\u7f6e Token \u5bc6\u94a5\nvar token = JWTEncryption.Encrypt("monksoul@outlook.com", new Dictionary { { "UserId", 1 } });\n\n// \u914d\u7f6e\u7b97\u6cd5\nvar token = JWTEncryption.Encrypt("monksoul@outlook.com", new Dictionary { { "UserId", 1 } }, SecurityAlgorithms.HmacSha256);\n')),(0,a.kt)("h2",{id:"142-\u751f\u6210\u5237\u65b0-token"},"14.2 \u751f\u6210\u5237\u65b0 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Token")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var refreshToken = JWTEncryption.GenerateRefreshToken("token", 43200);\n')),(0,a.kt)("h2",{id:"143-\u6839\u636e\u8fc7\u671f-token-\u4ea4\u6362\u65b0-token"},"14.3 \u6839\u636e\u8fc7\u671f ",(0,a.kt)("inlineCode",{parentName:"h2"},"Token")," \u4ea4\u6362\u65b0 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Token")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var newToken = JWTEncryption.Exchange("\u8fc7\u671f token", "\u4e0e\u4e4b\u5339\u914d\u7684\u5237\u65b0 token", [\u65b0\u7684token\u8fc7\u671f\u65f6\u95f4], [\u5bb9\u9519\u503c]);\n')),(0,a.kt)("h2",{id:"144-\u6388\u6743\u5904\u7406\u7a0b\u5e8f\u81ea\u52a8\u5237\u65b0-token"},"14.4 \u6388\u6743\u5904\u7406\u7a0b\u5e8f\u81ea\u52a8\u5237\u65b0 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Token")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"JWTEncryption.AutoRefreshToken(context, httpContext);\n")),(0,a.kt)("h2",{id:"145-\u9a8c\u8bc1-token-\u6709\u6548\u6027"},"14.5 \u9a8c\u8bc1 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Token")," \u6709\u6548\u6027"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var (isVaild, tokenData, validationResult) = JWTEncryption.Validate("token");\n')),(0,a.kt)("h2",{id:"146-\u9a8c\u8bc1\u8bf7\u6c42\u4e2d-token-\u6709\u6548\u6027"},"14.6 \u9a8c\u8bc1\u8bf7\u6c42\u4e2d ",(0,a.kt)("inlineCode",{parentName:"h2"},"Token")," \u6709\u6548\u6027"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var isValid = JWTEncryption.ValidateJwtBearerToken(httpContext, out tokenInfo);\n")),(0,a.kt)("h2",{id:"147-\u8bfb\u53d6-token-\u4fe1\u606f\u4e0d\u542b\u9a8c\u8bc1"},"14.7 \u8bfb\u53d6 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Token")," \u4fe1\u606f\uff08\u4e0d\u542b\u9a8c\u8bc1\uff09"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var tokenInfo = JWTEncryption.ReadJwtToken("token");\n\n// 3.8.2+ \u4e4b\u540e\u652f\u6301\u66f4\u5f3a\u5927\u7684\u8bfb\u53d6\nvar securityToken = JWTEncryption.SecurityReadJwtToken("token");\n')))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/6fa9a93a.531ec80f.js b/handbook/build/assets/js/6fa9a93a.531ec80f.js new file mode 100644 index 00000000000..fb556d47ecd --- /dev/null +++ b/handbook/build/assets/js/6fa9a93a.531ec80f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[647],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return c}});var i=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=i.createContext({}),s=function(e){var t=i.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return i.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=s(n),c=r,k=d["".concat(p,".").concat(c)]||d[c]||m[c]||a;return n?i.createElement(k,l(l({ref:t},u),{},{components:n})):i.createElement(k,l({ref:t},u))}));function c(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=d;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var s=2;s=0||(a[n]=e[n]);return a}(e,r);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=t.createContext({}),l=function(e){var r=t.useContext(s),n=r;return e&&(n="function"==typeof e?e(r):o(o({},r),e)),n},d=function(e){var r=l(e.components);return t.createElement(s.Provider,{value:r},e.children)},u={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},c=t.forwardRef((function(e,r){var n=e.components,a=e.mdxType,p=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),c=l(n),m=a,k=c["".concat(s,".").concat(m)]||c[m]||u[m]||p;return n?t.createElement(k,o(o({ref:r},d),{},{components:n})):t.createElement(k,o({ref:r},d))}));function m(e,r){var n=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var p=n.length,o=new Array(p);o[0]=c;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,o[1]=i;for(var l=2;lDapper \u670d\u52a1",id:"10221-\u6ce8\u518c-dapper-\u670d\u52a1",level:3},{value:"10.2.2.2 \u5b89\u88c5\u5bf9\u5e94\u7684\u6570\u636e\u5e93\u63d0\u4f9b\u5668",id:"10222-\u5b89\u88c5\u5bf9\u5e94\u7684\u6570\u636e\u5e93\u63d0\u4f9b\u5668",level:3},{value:"10.2.3 \u57fa\u672c\u4f7f\u7528",id:"1023-\u57fa\u672c\u4f7f\u7528",level:2},{value:"10.2.3.1 sql \u64cd\u4f5c",id:"10231-sql-\u64cd\u4f5c",level:3},{value:"10.2.3.2 <TEntity> \u64cd\u4f5c",id:"10232-tentity-\u64cd\u4f5c",level:3},{value:"10.2.4 \u9ad8\u7ea7\u4f7f\u7528",id:"1024-\u9ad8\u7ea7\u4f7f\u7528",level:2},{value:"10.2.4.1 \u67e5\u8be2\u4e00\u5bf9\u4e00",id:"10241-\u67e5\u8be2\u4e00\u5bf9\u4e00",level:3},{value:"10.2.4.2 \u67e5\u8be2\u591a\u4e2a\u7ed3\u679c",id:"10242-\u67e5\u8be2\u591a\u4e2a\u7ed3\u679c",level:3},{value:"10.2.4.3 \u66f4\u591a\u64cd\u4f5c",id:"10243-\u66f4\u591a\u64cd\u4f5c",level:3},{value:"10.2.5 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"1025-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],c={toc:u};function m(e){var r=e.components,n=(0,a.Z)(e,o);return(0,p.kt)("wrapper",(0,t.Z)({},c,n,{components:r,mdxType:"MDXLayout"}),(0,p.kt)("admonition",{title:"\u6e29\u99a8\u63d0\u9192",type:"warning"},(0,p.kt)("p",{parentName:"admonition"},"\u5728 ",(0,p.kt)("inlineCode",{parentName:"p"},"Furion")," \u5305\u4e2d\u9ed8\u8ba4\u96c6\u6210\u4e86 ",(0,p.kt)("inlineCode",{parentName:"p"},"EFCore"),"\uff0c",(0,p.kt)("strong",{parentName:"p"},"\u5982\u679c\u4e0d\u4f7f\u7528 ",(0,p.kt)("inlineCode",{parentName:"strong"},"EFCore"),"\uff0c\u53ef\u5b89\u88c5\u7eaf\u51c0\u7248 ",(0,p.kt)("inlineCode",{parentName:"strong"},"Furion.Pure")," \u4ee3\u66ff ",(0,p.kt)("inlineCode",{parentName:"strong"},"Furion")),"\u3002")),(0,p.kt)("h2",{id:"1021-\u5173\u4e8e-dapper"},"10.2.1 \u5173\u4e8e Dapper"),(0,p.kt)("p",null,(0,p.kt)("inlineCode",{parentName:"p"},"Dapper")," \u662f .NET/C# \u5e73\u53f0\u975e\u5e38\u4f18\u79c0\u7684 ",(0,p.kt)("inlineCode",{parentName:"p"},"\u5fae\u578b ORM")," \u6846\u67b6\uff0c\u4e3b\u8981\u662f\u4e3a ",(0,p.kt)("inlineCode",{parentName:"p"},"ADO.NET")," \u64cd\u4f5c\u5bf9\u8c61\u63d0\u4f9b\u62d3\u5c55\u80fd\u529b\uff0c\u63a8\u5d07\u539f\u751f ",(0,p.kt)("inlineCode",{parentName:"p"},"sql")," \u64cd\u4f5c\u6cd5\u3002"),(0,p.kt)("p",null,(0,p.kt)("inlineCode",{parentName:"p"},"Dapper")," \u5b98\u65b9\u4ed3\u5e93\u5730\u5740\uff1a",(0,p.kt)("a",{parentName:"p",href:"https://github.com/StackExchange/Dapper"},"https://github.com/StackExchange/Dapper")),(0,p.kt)("h2",{id:"1022-\u5982\u4f55\u96c6\u6210"},"10.2.2 \u5982\u4f55\u96c6\u6210"),(0,p.kt)("p",null,"\u5728 ",(0,p.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u5df2\u7ecf\u63a8\u51fa ",(0,p.kt)("inlineCode",{parentName:"p"},"Dapper")," \u62d3\u5c55\u5305 ",(0,p.kt)("a",{parentName:"p",href:"https://www.nuget.org/packages/Furion.Extras.DatabaseAccessor.Dapper"},"Furion.Extras.DatabaseAccessor.Dapper"),"\u3002"),(0,p.kt)("h3",{id:"10221-\u6ce8\u518c-dapper-\u670d\u52a1"},"10.2.2.1 \u6ce8\u518c ",(0,p.kt)("inlineCode",{parentName:"h3"},"Dapper")," \u670d\u52a1"),(0,p.kt)("p",null,"\u4f7f\u7528\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u5728 ",(0,p.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u6dfb\u52a0 ",(0,p.kt)("inlineCode",{parentName:"p"},"services.AddDapper(connStr, SqlProvider)")," \u5373\u53ef\u3002\u5982\uff1a"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'services.AddDapper("Data Source=./Furion.db", SqlProvider.Sqlite);\n\n// \u66f4\u591a\u914d\u7f6e\uff0c\u4ec5 v3.4.3+ \u7248\u672c\u6709\u6548\nservers.AddDapper("Data Source=./Furion.db", SqlProvider.Sqlite, () => {\n DefaultTypeMap.MatchNamesWithUnderscores = true;\n})\n')),(0,p.kt)("h3",{id:"10222-\u5b89\u88c5\u5bf9\u5e94\u7684\u6570\u636e\u5e93\u63d0\u4f9b\u5668"},"10.2.2.2 \u5b89\u88c5\u5bf9\u5e94\u7684\u6570\u636e\u5e93\u63d0\u4f9b\u5668"),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("inlineCode",{parentName:"li"},"SqlServer"),"\uff1a",(0,p.kt)("inlineCode",{parentName:"li"},"Microsoft.Data.SqlClient")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("inlineCode",{parentName:"li"},"Sqlite"),"\uff1a",(0,p.kt)("inlineCode",{parentName:"li"},"Microsoft.Data.Sqlite")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("inlineCode",{parentName:"li"},"MySql"),"\uff1a",(0,p.kt)("inlineCode",{parentName:"li"},"MySql.Data")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("inlineCode",{parentName:"li"},"Npgsql"),"\uff1a",(0,p.kt)("inlineCode",{parentName:"li"},"Npgsql")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("inlineCode",{parentName:"li"},"Oracle"),"\uff1a",(0,p.kt)("inlineCode",{parentName:"li"},"Oracle.ManagedDataAccess.Core")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("inlineCode",{parentName:"li"},"Firebird"),"\uff1a",(0,p.kt)("inlineCode",{parentName:"li"},"FirebirdSql.Data.FirebirdClient"))),(0,p.kt)("admonition",{title:"\u5b89\u88c5\u62d3\u5c55\u5305\u4f4d\u7f6e",type:"important"},(0,p.kt)("p",{parentName:"admonition"},"\u5728 ",(0,p.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u63a8\u8350\u5c06\u62d3\u5c55\u5305 ",(0,p.kt)("inlineCode",{parentName:"p"},"Furion.Extras.DatabaseAccessor.Dapper")," \u5b89\u88c5\u5230 ",(0,p.kt)("inlineCode",{parentName:"p"},"Furion.Core")," \u5c42\u4e2d\u3002")),(0,p.kt)("h2",{id:"1023-\u57fa\u672c\u4f7f\u7528"},"10.2.3 \u57fa\u672c\u4f7f\u7528"),(0,p.kt)("p",null,"\u5728\u4f7f\u7528\u4e4b\u524d\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6784\u9020\u51fd\u6570\u6ce8\u5165 ",(0,p.kt)("inlineCode",{parentName:"p"},"IDapperRepository")," \u6216 ",(0,p.kt)("inlineCode",{parentName:"p"},"IDapperRepository")," \u63a5\u53e3\uff0c\u5982\uff1a"),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},"\u975e\u6cdb\u578b\u7248\u672c")),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"private readonly IDapperRepository _dapperRepository;\npublic PersonService(IDapperRepository dapperRepository)\n{\n _dapperRepository = dapperRepository;\n}\n")),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},"\u6cdb\u578b\u7248\u672c")),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"private readonly IDapperRepository _personRepository;\npublic PersonService(IDapperRepository personRepository)\n{\n _personRepository = personRepository;\n}\n")),(0,p.kt)("h3",{id:"10231-sql-\u64cd\u4f5c"},"10.2.3.1 ",(0,p.kt)("inlineCode",{parentName:"h3"},"sql")," \u64cd\u4f5c"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var data = _dapperRepository.Query("select * from person");\nvar data = await _dapperRepository.QueryAsync("select * from person");\n\nvar data = _dapperRepository.Query("select * from person");\n\nvar guid = Guid.NewGuid();\nvar dog = _dapperRepository.Query("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });\n')),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var count = _dapperRepository.Execute(@"insert MyTable(colA, colB) values (@a, @b)",\n new[] { new { a=1, b=1 }, new { a=2, b=2 }, new { a=3, b=3 } }\n );\n\nvar user = _dapperRepository.Query("spGetUser", new {Id = 1},\n commandType: CommandType.StoredProcedure).SingleOrDefault();\n')),(0,p.kt)("p",null,"\u7528\u6cd5\u548c\u5b98\u65b9\u4e00\u81f4\uff0c\u6b64\u5904\u4e0d\u518d\u4e3e\u66f4\u591a\u4f8b\u5b50\u3002"),(0,p.kt)("h3",{id:"10232-tentity-\u64cd\u4f5c"},"10.2.3.2 ",(0,p.kt)("inlineCode",{parentName:"h3"},"")," \u64cd\u4f5c"),(0,p.kt)("p",null,(0,p.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86 ",(0,p.kt)("inlineCode",{parentName:"p"},"IDapperRepository")," \u548c ",(0,p.kt)("inlineCode",{parentName:"p"},"IDapperRepository")," \u4e24\u4e2a\u64cd\u4f5c\u4ed3\u50a8\uff0c\u540e\u8005\u7ee7\u627f\u524d\u8005\u3002\u4f7f\u7528\u5982\u4e0b\uff1a"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var person = personRepository.Get(1);\nvar persons = personRepository.GetAll();\n\nvar effects = personRepository.Insert(person);\nvar effects = personRepository.Update(person);\nvar effects = personRepository.Delete(person);\n\nvar effects = personRepository.Insert(persons); // \u63d2\u5165\u591a\u4e2a\nvar effects = personRepository.Update(persons); // \u66f4\u65b0\u591a\u4e2a\nvar effects = personRepository.Delete(persons); // \u5220\u9664\u591a\u4e2a\n\nvar effects = await personRepository.InsertAsync(person);\n")),(0,p.kt)("h2",{id:"1024-\u9ad8\u7ea7\u4f7f\u7528"},"10.2.4 \u9ad8\u7ea7\u4f7f\u7528"),(0,p.kt)("p",null,(0,p.kt)("inlineCode",{parentName:"p"},"IDapperRepository")," \u548c ",(0,p.kt)("inlineCode",{parentName:"p"},"IDapperRepository")," \u4ed3\u50a8\u63d0\u4f9b\u4e86 ",(0,p.kt)("inlineCode",{parentName:"p"},"Context")," \u548c ",(0,p.kt)("inlineCode",{parentName:"p"},"DynamicContext")," \u5c5e\u6027\uff0c\u8be5\u5c5e\u6027\u8fd4\u56de ",(0,p.kt)("inlineCode",{parentName:"p"},"IDbConnection")," \u5bf9\u8c61\u3002"),(0,p.kt)("p",null,"\u62ff\u5230\u8be5\u5bf9\u8c61\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u64cd\u4f5c ",(0,p.kt)("inlineCode",{parentName:"p"},"Dapper")," \u63d0\u4f9b\u7684\u6240\u6709\u64cd\u4f5c\u4e86\uff0c\u5982\uff1a"),(0,p.kt)("h3",{id:"10241-\u67e5\u8be2\u4e00\u5bf9\u4e00"},"10.2.4.1 \u67e5\u8be2\u4e00\u5bf9\u4e00"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var sql =\n@"select * from #Posts p\nleft join #Users u on u.Id = p.OwnerId\nOrder by p.Id";\n\nvar data = dapperRepository.Context.Query(sql, (post, user) => { post.Owner = user; return post;});\nvar post = data.First();\n')),(0,p.kt)("h3",{id:"10242-\u67e5\u8be2\u591a\u4e2a\u7ed3\u679c"},"10.2.4.2 \u67e5\u8be2\u591a\u4e2a\u7ed3\u679c"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var sql =\n@"\nselect * from Customers where CustomerId = @id\nselect * from Orders where CustomerId = @id\nselect * from Returns where CustomerId = @id";\n\nusing (var multi = dapperRepository.Context.QueryMultiple(sql, new {id=selectedId}))\n{\n var customer = multi.Read().Single();\n var orders = multi.Read().ToList();\n var returns = multi.Read().ToList();\n // ...\n}\n')),(0,p.kt)("h3",{id:"10243-\u66f4\u591a\u64cd\u4f5c"},"10.2.4.3 \u66f4\u591a\u64cd\u4f5c"),(0,p.kt)("pre",null,(0,p.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var shapes = new List();\nusing (var reader = dapperRepository.Context.ExecuteReader("select * from Shapes"))\n{\n var circleParser = reader.GetRowParser(typeof(Circle));\n var squareParser = reader.GetRowParser(typeof(Square));\n var triangleParser = reader.GetRowParser(typeof(Triangle));\n\n var typeColumnIndex = reader.GetOrdinal("Type");\n\n while (reader.Read())\n {\n IShape shape;\n var type = (ShapeType)reader.GetInt32(typeColumnIndex);\n switch (type)\n {\n case ShapeType.Circle:\n shape = circleParser(reader);\n break;\n case ShapeType.Square:\n shape = squareParser(reader);\n break;\n case ShapeType.Triangle:\n shape = triangleParser(reader);\n break;\n default:\n throw new NotImplementedException();\n }\n\n shapes.Add(shape);\n }\n}\n')),(0,p.kt)("h2",{id:"1025-\u53cd\u9988\u4e0e\u5efa\u8bae"},"10.2.5 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,p.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,p.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,p.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,p.kt)("hr",null),(0,p.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,p.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,p.kt)("inlineCode",{parentName:"p"},"Dapper")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,p.kt)("a",{parentName:"p",href:"https://github.com/StackExchange/Dapper"},"Dapper \u5b98\u7f51"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/713be7bb.e9cbc6ec.js b/handbook/build/assets/js/713be7bb.e9cbc6ec.js new file mode 100644 index 00000000000..7f8d8f6ad06 --- /dev/null +++ b/handbook/build/assets/js/713be7bb.e9cbc6ec.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6696],{3905:function(e,n,t){t.d(n,{Zo:function(){return m},kt:function(){return c}});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function s(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=r.createContext({}),u=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):s(s({},n),e)),t},m=function(e){var n=u(e.components);return r.createElement(l.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),d=u(t),c=a,y=d["".concat(l,".").concat(c)]||d[c]||p[c]||i;return t?r.createElement(y,s(s({ref:n},m),{},{components:t})):r.createElement(y,s({ref:n},m))}));function c(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,s=new Array(i);s[0]=d;var o={};for(var l in n)hasOwnProperty.call(n,l)&&(o[l]=n[l]);o.originalType=e,o.mdxType="string"==typeof e?e:a,s[1]=o;for(var u=2;u child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})),h=null!=y?y:N.map((function(e){var n=e.props;return{value:n.value,label:n.label,attributes:n.attributes}})),k=(0,o.l)(h,(function(e,n){return e.value===n.value}));if(k.length>0)throw new Error('Docusaurus error: Duplicate values "'+k.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.');var v=null===c?c:null!=(n=null!=c?c:null==(t=N.find((function(e){return e.props.default})))?void 0:t.props.value)?n:N[0].props.value;if(null!==v&&!h.some((function(e){return e.value===v})))throw new Error('Docusaurus error: The has a defaultValue "'+v+'" but none of its children has the corresponding value. Available values are: '+h.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");var C=(0,l.U)(),f=C.tabGroupChoices,w=C.setTabGroupChoices,I=(0,a.useState)(v),D=I[0],T=I[1],P=[],L=(0,u.o5)().blockElementScrollPositionUntilNextRender;if(null!=b){var x=f[b];null!=x&&x!==D&&h.some((function(e){return e.value===x}))&&T(x)}var A=function(e){var n=e.currentTarget,t=P.indexOf(n),r=h[t].value;r!==D&&(L(n),T(r),null!=b&&w(b,String(r)))},E=function(e){var n,t=null;switch(e.key){case"Enter":A(e);break;case"ArrowRight":var r,a=P.indexOf(e.currentTarget)+1;t=null!=(r=P[a])?r:P[0];break;case"ArrowLeft":var i,s=P.indexOf(e.currentTarget)-1;t=null!=(i=P[s])?i:P[P.length-1]}null==(n=t)||n.focus()};return a.createElement("div",{className:(0,i.Z)("tabs-container",m)},a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":d},g)},h.map((function(e){var n=e.value,t=e.label,s=e.attributes;return a.createElement("li",(0,r.Z)({role:"tab",tabIndex:D===n?0:-1,"aria-selected":D===n,key:n,ref:function(e){return P.push(e)},onKeyDown:E,onClick:A},s,{className:(0,i.Z)("tabs__item",p,null==s?void 0:s.className,{"tabs__item--active":D===n})}),null!=t?t:n)}))),s?(0,a.cloneElement)(N.filter((function(e){return e.props.value===D}))[0],{className:"margin-top--md"}):a.createElement("div",{className:"margin-top--md"},N.map((function(e,n){return(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==D})}))))}function c(e){var n=(0,s.Z)();return a.createElement(d,(0,r.Z)({key:String(n)},e))}},2126:function(e,n,t){t.r(n),t.d(n,{assets:function(){return d},contentTitle:function(){return m},default:function(){return b},frontMatter:function(){return u},metadata:function(){return p},toc:function(){return c}});var r=t(3117),a=t(102),i=(t(7294),t(3905)),s=(t(4996),t(5488)),o=t(5162),l=["components"],u={id:"dbcontext-hight-query",title:"9.11 \u9ad8\u7ea7\u67e5\u8be2\u64cd\u4f5c",sidebar_label:"9.11 \u9ad8\u7ea7\u67e5\u8be2\u64cd\u4f5c"},m=void 0,p={unversionedId:"dbcontext-hight-query",id:"dbcontext-hight-query",title:"9.11 \u9ad8\u7ea7\u67e5\u8be2\u64cd\u4f5c",description:"",source:"@site/docs/dbcontext-high-query.mdx",sourceDirName:".",slug:"/dbcontext-hight-query",permalink:"/docs/dbcontext-hight-query",draft:!1,editUrl:"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/docs/dbcontext-high-query.mdx",tags:[],version:"current",lastUpdatedBy:"MonkSoul",lastUpdatedAt:1651894493,formattedLastUpdatedAt:"May 7, 2022",frontMatter:{id:"dbcontext-hight-query",title:"9.11 \u9ad8\u7ea7\u67e5\u8be2\u64cd\u4f5c",sidebar_label:"9.11 \u9ad8\u7ea7\u67e5\u8be2\u64cd\u4f5c"},sidebar:"docs",previous:{title:"9.10 \u67e5\u8be2\u64cd\u4f5c",permalink:"/docs/dbcontext-query"},next:{title:"9.12 \u89c6\u56fe\u64cd\u4f5c",permalink:"/docs/dbcontext-view"}},d={},c=[{value:"9.11.1 \u5173\u8054\u6570\u636e\u6a21\u578b",id:"9111-\u5173\u8054\u6570\u636e\u6a21\u578b",level:2},{value:"9.11.2 \u4e00\u5bf9\u4e00\u67e5\u8be2",id:"9112-\u4e00\u5bf9\u4e00\u67e5\u8be2",level:2},{value:"9.11.3 \u4e00\u5bf9\u591a\u67e5\u8be2",id:"9113-\u4e00\u5bf9\u591a\u67e5\u8be2",level:2},{value:"9.11.4 \u591a\u5bf9\u591a\u67e5\u8be2",id:"9114-\u591a\u5bf9\u591a\u67e5\u8be2",level:2},{value:"9.11.5 \u8054\u8868\u67e5\u8be2",id:"9115-\u8054\u8868\u67e5\u8be2",level:2},{value:"9.11.5.1 \u5185\u8fde\u63a5 Inner Join",id:"91151-\u5185\u8fde\u63a5-inner-join",level:3},{value:"9.11.5.2 \u5de6\u8fde\u63a5 Left Join",id:"91152-\u5de6\u8fde\u63a5-left-join",level:3},{value:"9.11.5.3 \u53f3\u8fde\u63a5 Right Join",id:"91153-\u53f3\u8fde\u63a5-right-join",level:3},{value:"9.11.6 \u5206\u7ec4\u67e5\u8be2",id:"9116-\u5206\u7ec4\u67e5\u8be2",level:2},{value:"9.11.7 \u5408\u5e76\u7ed3\u679c\u96c6",id:"9117-\u5408\u5e76\u7ed3\u679c\u96c6",level:2},{value:"9.11.8 \u67e5\u8be2\u6392\u5e8f",id:"9118-\u67e5\u8be2\u6392\u5e8f",level:2},{value:"9.11.8.1 \u6b63\u5e8f",id:"91181-\u6b63\u5e8f",level:3},{value:"9.11.8.2 \u5012\u5e8f",id:"91182-\u5012\u5e8f",level:3},{value:"9.11.8.3 \u6df7\u5408\u5012\u5e8f",id:"91183-\u6df7\u5408\u5012\u5e8f",level:3},{value:"9.11.9 \u9012\u5f52\u67e5\u8be2",id:"9119-\u9012\u5f52\u67e5\u8be2",level:2},{value:"9.11.10 \u52a8\u6001 Sql \u67e5\u8be2",id:"91110-\u52a8\u6001-sql-\u67e5\u8be2",level:2},{value:"9.11.10.1 \u52a8\u6001 Sql",id:"911101-\u52a8\u6001-sql",level:3},{value:"9.11.10.2 \u52a8\u6001 Lambda",id:"911102-\u52a8\u6001-lambda",level:3},{value:"9.11.11 \u65f6\u6001\u67e5\u8be2",id:"91111-\u65f6\u6001\u67e5\u8be2",level:2},{value:"9.11.12 \u6027\u80fd\u4f18\u5316",id:"91112-\u6027\u80fd\u4f18\u5316",level:2},{value:"9.11.13 \u5206\u8868\u67e5\u8be2\u5c0f\u4f8b\u5b50",id:"91113-\u5206\u8868\u67e5\u8be2\u5c0f\u4f8b\u5b50",level:2},{value:"9.11.14 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"91114-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],y={toc:c};function b(e){var n=e.components,t=(0,a.Z)(e,l);return(0,i.kt)("wrapper",(0,r.Z)({},y,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"9111-\u5173\u8054\u6570\u636e\u6a21\u578b"},"9.11.1 \u5173\u8054\u6570\u636e\u6a21\u578b"),(0,i.kt)(s.Z,{defaultValue:"person",values:[{label:"Person",value:"person"},{label:"PersonDetail",value:"person-detail"},{label:"Children",value:"children"},{label:"Post",value:"post"}],mdxType:"Tabs"},(0,i.kt)(o.Z,{value:"person",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {38,43,48}",showLineNumbers:!0,"":!0,"{38,43,48}":!0},"using Furion.DatabaseAccessor;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace Furion.Core\n{\n public class Person : Entity\n {\n /// \n /// \u6784\u9020\u51fd\u6570\n /// \n public Person()\n {\n CreatedTime = DateTime.Now;\n }\n\n /// \n /// \u59d3\u540d\n /// \n [MaxLength(32)]\n public string Name { get; set; }\n\n /// \n /// \u5e74\u9f84\n /// \n public int Age { get; set; }\n\n /// \n /// \u4f4f\u5740\n /// \n public string Address { get; set; }\n\n /// \n /// \u4ece\u8868\n /// \n public PersonDetail PersonDetail { get; set; }\n\n /// \n /// \u4e00\u5bf9\u591a\n /// \n public ICollection Childrens { get; set; }\n\n /// \n /// \u591a\u5bf9\u591a\n /// \n public ICollection Posts { get; set; }\n }\n}\n"))),(0,i.kt)(o.Z,{value:"person-detail",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {25}",showLineNumbers:!0,"":!0,"{25}":!0},"using Furion.DatabaseAccessor;\n\nnamespace Furion.Core\n{\n public class PersonDetail : EntityBase\n {\n /// \n /// \u7535\u8bdd\u53f7\u7801\n /// \n public string PhoneNumber { get; set; }\n\n /// \n /// QQ \u53f7\u7801\n /// \n public string QQ { get; set; }\n\n /// \n /// \u5916\u952e\n /// \n public int PersonId { get; set; }\n\n /// \n /// \u4e3b\u8868\n /// \n public Person Person { get; set; }\n }\n}\n"))),(0,i.kt)(o.Z,{value:"children",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {35}",showLineNumbers:!0,"":!0,"{35}":!0},"using Furion.DatabaseAccessor;\nusing System;\n\nnamespace Furion.Core\n{\n public class Children : Entity\n {\n /// \n /// \u6784\u9020\u51fd\u6570\n /// \n public Children()\n {\n CreatedTime = DateTime.Now;\n \n }\n\n /// \n /// \u540d\u79f0\n /// \n public string Name { get; set; }\n\n /// \n /// \u6027\u522b\n /// \n public Gender Gender { get; set; }\n\n /// \n /// \u5916\u952e\n /// \n public int PersonId { get; set; }\n\n /// \n /// \u4e3b\u8868\n /// \n public Person Person { get; set; }\n }\n}\n"))),(0,i.kt)(o.Z,{value:"post",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {26}",showLineNumbers:!0,"":!0,"{26}":!0},"using Furion.DatabaseAccessor;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Furion.Core\n{\n public class Post : Entity\n {\n /// \n /// \u6784\u9020\u51fd\u6570\n /// \n public Post()\n {\n CreatedTime = DateTime.Now;\n \n }\n\n /// \n /// \u540d\u79f0\n /// \n public string Name { get; set; }\n\n /// \n /// Person \u96c6\u5408\n /// \n public ICollection Persons { get; set; }\n }\n}\n")))),(0,i.kt)("h2",{id:"9112-\u4e00\u5bf9\u4e00\u67e5\u8be2"},"9.11.2 \u4e00\u5bf9\u4e00\u67e5\u8be2"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u793a\u4f8b\u4e00\nvar person = repository.Include(u => u.Detail);\n\n// \u793a\u4f8b\u4e8c\nvar person = repository.Include(u => u.Detail)\n .Include(u => u.Post);\n\n// \u793a\u4f8b\u4e09\nvar person = repository.Include(u => u.Detail)\n .ThenInclude(d => d.Review)\n .Include(u => u.Post);\n\n// \u793a\u4f8b\u56db\nvar person = repository.Include(u => u.Detail.Where(d => d.Id > 10).OrderBy(d => d.Name))\n .ThenInclude(d => d.Review)\n .Include(u => u.Post);\n\n// \u793a\u4f8b\u4e94\nvar person = repository.Include(!string.IsNullOrEmpty(keyword), u => u.Detail);\n\n// \u793a\u4f8b\u516d\nvar person = repository.Include(!string.IsNullOrEmpty(keyword), u => u.Detail)\n .Include(age > 18, u => u.Detail.Where(d => d.Id > 10).OrderBy(d => d.Name))\n .ThenInclude(d => d.Review)\n .Include(u => u.Post);\n")),(0,i.kt)("h2",{id:"9113-\u4e00\u5bf9\u591a\u67e5\u8be2"},"9.11.3 \u4e00\u5bf9\u591a\u67e5\u8be2"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u793a\u4f8b\u4e00\nvar person = repository.Include(u => u.Childrens);\n\n// \u53c2\u8003 \u4e00\u5bf9\u4e00 \u4f8b\u5b50\n")),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"\u4e00\u5bf9\u4e00")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"\u4e00\u5bf9\u591a")," \u67e5\u8be2\u65b9\u6cd5\u4e00\u6837\uff0c\u552f\u4e00\u7684\u533a\u522b\u662f\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"\u4e00\u5bf9\u591a")," \u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"ICollection")," \u5b9a\u4e49\u5c5e\u6027\u3002")),(0,i.kt)("h2",{id:"9114-\u591a\u5bf9\u591a\u67e5\u8be2"},"9.11.4 \u591a\u5bf9\u591a\u67e5\u8be2"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u793a\u4f8b\u4e00\nvar person = repository.Include(u => u.Posts);\n\n// \u53c2\u8003 \u4e00\u5bf9\u4e00 \u4f8b\u5b50\n")),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"\u4e00\u5bf9\u4e00")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"\u591a\u5bf9\u591a")," \u67e5\u8be2\u65b9\u6cd5\u4e00\u6837\uff0c\u552f\u4e00\u7684\u533a\u522b\u662f\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"\u591a\u5bf9\u591a")," \u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"ICollection")," \u5b9a\u4e49\u5c5e\u6027\u3002")),(0,i.kt)("h2",{id:"9115-\u8054\u8868\u67e5\u8be2"},"9.11.5 \u8054\u8868\u67e5\u8be2"),(0,i.kt)("h3",{id:"91151-\u5185\u8fde\u63a5-inner-join"},"9.11.5.1 \u5185\u8fde\u63a5 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Inner Join")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var query = from p in _personRepository.AsQueryable()\n join d in _personDetailRepository.AsQueryable() on p.Id equals d.PersonId\n select new PersonDto\n {\n PhoneNumber = p.PersonDetail.PhoneNumber,\n Address = p.Address,\n Age = p.Age,\n Name = p.Name,\n Id = p.Id,\n QQ = p.PersonDetail.QQ\n };\n")),(0,i.kt)("h3",{id:"91152-\u5de6\u8fde\u63a5-left-join"},"9.11.5.2 \u5de6\u8fde\u63a5 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Left Join")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,3}",showLineNumbers:!0,"":!0,"{2,3}":!0},"var query = from p in _personRepository.AsQueryable()\n join d in _personDetailRepository.AsQueryable() on p.Id equals d.PersonId into results\n from d in results.DefaultIfEmpty()\n select new PersonDto\n {\n PhoneNumber = p.PersonDetail.PhoneNumber,\n Address = p.Address,\n Age = p.Age,\n Name = p.Name,\n Id = p.Id,\n QQ = p.PersonDetail.QQ\n };\n")),(0,i.kt)("admonition",{title:"\u5c0f\u63d0\u793a",type:"note"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("inlineCode",{parentName:"strong"},"Left Join"))," \u548c ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("inlineCode",{parentName:"strong"},"Inner Join"))," \u4e0d\u540c\u7684\u662f\uff0c",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("inlineCode",{parentName:"strong"},"Left Join"))," \u4f1a\u5148\u5c06\u7ed3\u679c ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("inlineCode",{parentName:"strong"},"into"))," \u5230\u65b0\u7684\u7ed3\u679c\u96c6\u7136\u540e\u518d\u67e5\u8be2\uff0c\u5e76\u8c03\u7528 ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("inlineCode",{parentName:"strong"},"DefaultIfEmpty()"))," \u65b9\u6cd5\u3002")),(0,i.kt)("h3",{id:"91153-\u53f3\u8fde\u63a5-right-join"},"9.11.5.3 \u53f3\u8fde\u63a5 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Right Join")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Right Join")," \u53ea\u9700\u8981\u5c06 ",(0,i.kt)("inlineCode",{parentName:"p"},"Left Join")," \u4e3b\u4ece\u8868\u4f4d\u7f6e\u66f4\u6362\u5373\u53ef\u3002"),(0,i.kt)("h2",{id:"9116-\u5206\u7ec4\u67e5\u8be2"},"9.11.6 \u5206\u7ec4\u67e5\u8be2"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u793a\u4f8b\u4e00\nvar query = repository.AsQueryable().GroupBy(x => new { x.Column1, x.Column2 });\n\n// \u793a\u4f8b\u4e8c\nvar query = from student in repository.AsQueryable()\n group student by repository2.AsQueryable() into dateGroup\n select new ResultData()\n {\n Key = dateGroup.Key,\n Value = dateGroup.Count()\n };\n\n// \u793a\u4f8b\u4e09\nvar query = from a in repository.AsQueryable()\n join b in repository2.AsQueryable() on a.Id equals b.Aid\n join c in repository3.AsQueryable() on c.id equals b.Bid\n group a by new { a.Age, b.Sex } into g\n select new {\n Peo = g.Key,\n Count = g.Count()\n };\n")),(0,i.kt)("h2",{id:"9117-\u5408\u5e76\u7ed3\u679c\u96c6"},"9.11.7 \u5408\u5e76\u7ed3\u679c\u96c6"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var query = repository.AsQueryable(u => u.Id > 10)\n .Union(\n repository2.AsQueryable(u => u.Id <= 10)\n );\n")),(0,i.kt)("h2",{id:"9118-\u67e5\u8be2\u6392\u5e8f"},"9.11.8 \u67e5\u8be2\u6392\u5e8f"),(0,i.kt)("h3",{id:"91181-\u6b63\u5e8f"},"9.11.8.1 \u6b63\u5e8f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u793a\u4f8b\u4e00\nvar query = repository.AsQueryable()\n .OrderBy(u => u.Id);\n\n// \u793a\u4f8b\u4e8c\nvar query =repository.AsQueryable()\n .OrderBy(u => u.Id)\n .ThenBy(u => u.Name);\n")),(0,i.kt)("h3",{id:"91182-\u5012\u5e8f"},"9.11.8.2 \u5012\u5e8f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u793a\u4f8b\u4e00\nvar query = repository.AsQueryable()\n .OrderByDescending(u => u.Id);\n\n// \u793a\u4f8b\u4e8c\nvar query =repository.AsQueryable()\n .OrderByDescending(u => u.Id)\n .ThenByDescending(u => u.Name);\n")),(0,i.kt)("h3",{id:"91183-\u6df7\u5408\u5012\u5e8f"},"9.11.8.3 \u6df7\u5408\u5012\u5e8f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u793a\u4f8b\u4e00\nvar query = repository.AsQueryable()\n .OrderBy(u => u.Id)\n .OrderByDescending(u => u.Name)\n .ThenBy(u => u.Age);\n")),(0,i.kt)("h2",{id:"9119-\u9012\u5f52\u67e5\u8be2"},"9.11.9 \u9012\u5f52\u67e5\u8be2"),(0,i.kt)(s.Z,{defaultValue:"city",values:[{label:"City",value:"city"},{label:"CityDto",value:"citydto"}],mdxType:"Tabs"},(0,i.kt)(o.Z,{value:"city",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {12,36,41,49-55}",showLineNumbers:!0,"":!0,"{12,36,41,49-55}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Metadata.Builders;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Furion.Core\n{\n /// \n /// \u57ce\u5e02\n /// \n public class City : Entity, IEntityTypeBuilder, IEntitySeedData\n {\n /// \n /// \u6784\u9020\u51fd\u6570\n /// \n public City()\n {\n CreatedTime = DateTime.Now;\n \n }\n\n /// \n /// \u540d\u79f0\n /// \n public string Name { get; set; }\n\n /// \n /// \u4e0a\u7ea7Id\n /// \n public int? ParentId { get; set; }\n\n /// \n /// \u4e0a\u7ea7\n /// \n public virtual City Parent { get; set; }\n\n /// \n /// \u5b50\u96c6\n /// \n public virtual ICollection Childrens { get; set; }\n\n /// \n /// \u914d\u7f6e\u5b9e\u4f53\u5173\u7cfb\n /// \n /// \n /// \n /// \n public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)\n {\n entityBuilder\n .HasMany(x => x.Childrens)\n .WithOne(x => x.Parent)\n .HasForeignKey(x => x.ParentId)\n .OnDelete(DeleteBehavior.ClientSetNull); // \u5fc5\u987b\u8bbe\u7f6e\u8fd9\u4e00\u884c\n }\n\n /// \n /// \u79cd\u5b50\u6570\u636e\n /// \n /// \n /// \n /// \n public IEnumerable HasData(DbContext dbContext, Type dbContextLocator)\n {\n return new List\n {\n new City { Id=1,CreatedTime =DateTime.Parse("2020-08-20 15:30:20"),IsDeleted=false,Name="\u4e2d\u56fd" },\n new City { Id=2,CreatedTime =DateTime.Parse("2020-08-20 15:30:20"),IsDeleted=false,Name="\u5e7f\u4e1c\u7701",ParentId=1 },\n new City { Id=3,CreatedTime =DateTime.Parse("2020-08-20 15:30:20"),IsDeleted=false,Name="\u4e2d\u5c71\u5e02",ParentId=2 },\n new City { Id=4,CreatedTime =DateTime.Parse("2020-08-20 15:30:20"),IsDeleted=false,Name="\u73e0\u6d77\u5e02",ParentId=2 },\n new City { Id=5,CreatedTime =DateTime.Parse("2020-08-20 15:30:20"),IsDeleted=false,Name="\u6d59\u6c5f\u7701",ParentId=1 },\n };\n }\n }\n}\n'))),(0,i.kt)(o.Z,{value:"citydto",mdxType:"TabItem"},(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"using System.Collections.Generic;\n\nnamespace Furion.Application.Persons\n{\n public class CityDto\n {\n /// \n /// \u4e3b\u952e\n /// \n public int Id { get; set; }\n\n /// \n /// \u540d\u79f0\n /// \n public string Name { get; set; }\n\n /// \n /// \u5b50\u96c6\n /// \n public ICollection Childrens { get; set; }\n }\n}\n")))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var cities = await repository.AsQueryable()\n .Include(u => u.Childrens)\n .Where(u => u.Id == 1)\n .ToListAsync();\n\nvar dtos = cities.Adapt>();\n")),(0,i.kt)("h2",{id:"91110-\u52a8\u6001-sql-\u67e5\u8be2"},"9.11.10 \u52a8\u6001 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Sql")," \u67e5\u8be2"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u9ed8\u8ba4\u4e0d\u652f\u6301 \u52a8\u6001 ",(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u67e5\u8be2\u529f\u80fd\uff0c\u4e0d\u8fc7\u53ef\u4ee5\u901a\u8fc7\u7b2c\u4e09\u65b9\u5b9e\u73b0\uff1a"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u9879\u76ee\u5c42\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},"System.Linq.Dynamic.Core")," \u5305 ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/zzzprojects/System.Linq.Dynamic.Core"},"https://github.com/zzzprojects/System.Linq.Dynamic.Core")),(0,i.kt)("h3",{id:"911101-\u52a8\u6001-sql"},"9.11.10.1 \u52a8\u6001 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Sql")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u793a\u4f8b\u4e00\nvar query = repository.AsQueryable()\n .Where("City == @0 and Orders.Count >= @1", "China", 10)\n .OrderBy("CompanyName")\n .Select("new(CompanyName as Name, Phone)");\n\n// \u793a\u4f8b\u4e8c\nvar list = repository.AsQueryable()\n .Where("Name.Contains(@0)","Furion")\n .ToList();\n\n// \u793a\u4f8b\u4e09\uff0c\u652f\u6301 ? \u8bed\u6cd5\nvar customers = repository.AsQueryable()\n .Include(c => c.Location)\n .Where(c => c.Location?.Name == "test") // \u6ce8\u610f Location?.Name\n .ToList();\n')),(0,i.kt)("h3",{id:"911102-\u52a8\u6001-lambda"},"9.11.10.2 \u52a8\u6001 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Lambda")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u793a\u4f8b\u4e00\nvar x = Expression.Parameter(typeof(int), "x");\nvar y = Expression.Parameter(typeof(int), "y");\nvar e = DynamicExpressionParser\n .ParseLambda(new ParameterExpression[] { x, y }, null, "(x + y) * 2");\n\n// \u793a\u4f8b\u4e8c\nvar e = DynamicExpressionParser.ParseLambda(\n typeof(Customer), typeof(bool),\n "City = @0 and Orders.Count >= @1",\n "London", 10);\n')),(0,i.kt)("h2",{id:"91111-\u65f6\u6001\u67e5\u8be2"},"9.11.11 \u65f6\u6001\u67e5\u8be2"),(0,i.kt)("admonition",{title:"\u529f\u80fd\u79fb\u9664\u58f0\u660e",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 2.13 +")," \u7248\u672c\u4e2d\u5df2\u79fb\u9664\u3002")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u8fd8\u63d0\u4f9b\u4e86\u65f6\u6001\u67e5\u8be2\u529f\u80fd\uff0c\u53ef\u4ee5\u67e5\u8be2\u7279\u5b9a\u65f6\u95f4\u7684\u6570\u636e\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var result = rep.Entities\n .AsTemporalOf(DateTime.UtcNow.AddDays(-1))\n .Include(i=> i.Company)\n .FirstOrDefault(i => i.Name == "Furion");\n')),(0,i.kt)("p",null,"\u53e6\u5916\u63d0\u4f9b\u4e86\u591a\u4e2a\u65f6\u6001\u67e5\u8be2\u65b9\u6cd5"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"AsTemporalAll()"),(0,i.kt)("li",{parentName:"ul"},"AsTemporalAsOf(date)"),(0,i.kt)("li",{parentName:"ul"},"AsTemporalFrom(startDate, endDate)"),(0,i.kt)("li",{parentName:"ul"},"AsTemporalBetween(startDate, endDate)"),(0,i.kt)("li",{parentName:"ul"},"AsTemporalContained(startDate, endDate)")),(0,i.kt)("h2",{id:"91112-\u6027\u80fd\u4f18\u5316"},"9.11.12 \u6027\u80fd\u4f18\u5316"),(0,i.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"EF Core")," \u4f1a\u8ddf\u8e2a\u6240\u6709\u5b9e\u4f53\uff0c\u4e5f\u5c31\u662f\u4efb\u4f55\u6570\u636e\u6539\u53d8\u90fd\u4f1a\u5f15\u8d77\u6570\u636e\u68c0\u67e5\uff0c\u6240\u4ee5\u5982\u679c\u53ea\u505a\u67e5\u8be2\u64cd\u4f5c\uff0c\u5efa\u8bae\u5173\u95ed\u5b9e\u4f53\u8ddf\u8e2a\u529f\u80fd\u3002"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u4ee5\u4e0b\u9ad8\u6027\u80fd\u5b9e\u4f53\u96c6\u5408\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"DetachedEntities"),"\uff1a\u8131\u8f68/\u4e0d\u8ffd\u8e2a\u5b9e\u4f53"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"AsQueryable(false)"),"\uff1a\u4e0d\u8ffd\u8e2a\u5b9e\u4f53"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Entities.AsNoTracking()"),"\uff1a\u624b\u52a8\u5173\u95ed\u5b9e\u4f53\u8ffd\u8e2a")),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"EF Core")," \u4e2d\uff0c\u590d\u6742\u67e5\u8be2\u603b\u662f\u4f1a\u751f\u6210\u4e00\u4e2a ",(0,i.kt)("inlineCode",{parentName:"p"},"sql"),"\uff0c\u4e5f\u5c31\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"AsSingleQuery()"),"\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"AsSplitQuery()")," \u5207\u5272\u6210\u591a\u4e2a\u67e5\u8be2\u3002"),(0,i.kt)("h2",{id:"91113-\u5206\u8868\u67e5\u8be2\u5c0f\u4f8b\u5b50"},"9.11.13 \u5206\u8868\u67e5\u8be2\u5c0f\u4f8b\u5b50"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Metadata.Builders;\nusing System;\nusing System.Collections.Generic;\n\nnamespace Furion.Core\n{\n public class Person : Entity, IEntityTypeBuilder\n {\n public string Name { get; set; }\n\n /// \n /// \u914d\u7f6e\u5b9e\u4f53\u5173\u7cfb\n /// \n /// \n /// \n /// \n public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)\n {\n entityBuilder.ToSqlQuery(\n @"select * from dbo.person.2020-09-19\n union all\n select * from dbo.person.2020-09-20");\n }\n }\n}\n')),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var posts = repository.Where(u => u.Id > 10).ToList();\n")),(0,i.kt)("h2",{id:"91114-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.11.14 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/720de17f.baed949b.js b/handbook/build/assets/js/720de17f.baed949b.js new file mode 100644 index 00000000000..423c5094934 --- /dev/null +++ b/handbook/build/assets/js/720de17f.baed949b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2396],{8574:function(e){e.exports=JSON.parse('{"permalink":"/blog/tags/net","page":1,"postsPerPage":10,"totalPages":1,"totalCount":7,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/73d3b1ea.6f7dd743.js b/handbook/build/assets/js/73d3b1ea.6f7dd743.js new file mode 100644 index 00000000000..4f1768a748b --- /dev/null +++ b/handbook/build/assets/js/73d3b1ea.6f7dd743.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6709],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return m}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=u(n),m=o,k=d["".concat(p,".").concat(m)]||d[m]||c[m]||i;return n?r.createElement(k,a(a({ref:t},s),{},{components:n})):r.createElement(k,a({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var u=2;u.NET 6 Preview 6 SDK",id:"\u5b89\u88c5-net-6-preview-6-sdk",level:2},{value:"\u65e7\u9879\u76ee\u5347\u7ea7",id:"\u65e7\u9879\u76ee\u5347\u7ea7",level:2},{value:"\u65b0\u9879\u76ee\u4f7f\u7528",id:"\u65b0\u9879\u76ee\u4f7f\u7528",level:2},{value:"\u5347\u7ea7 Visual Studio 2019",id:"\u5347\u7ea7-visual-studio-2019",level:3},{value:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",level:3},{value:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",level:3}],d={toc:c};function m(e){var t=e.components,n=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"2021 \u5e74 08 \u6708 11 \u65e5\uff0c\u5fae\u8f6f\u53d1\u5e03\u4e86 ",(0,i.kt)("inlineCode",{parentName:"strong"},".NET 6 Preview 7")," \u7248\u672c\uff0c",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion")," \u5728\u5f53\u5929\u7b2c\u4e00\u65f6\u95f4\u9002\u914d\u4e86\u8be5\u7248\u672c\uff0c\u5e76\u53d1\u5e03 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion v3.0.0-rc.2")," \u7248\u672c\u3002")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/tree/3.0.0-rc.2/"},"Furion .NET 6 Preview 7 \u6e90\u7801\u5730\u5740")),(0,i.kt)("h2",{id:"\u5b89\u88c5-net-6-preview-6-sdk"},"\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"h2"},".NET 6 Preview 6 SDK")),(0,i.kt)("p",null,"\u5c1d\u9c9c\u4e4b\u524d\uff0c\u9996\u5148\u5148\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 7 SDK"),"\uff0c\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://dotnet.microsoft.com/download/dotnet/6.0"},"https://dotnet.microsoft.com/download/dotnet/6.0")),(0,i.kt)("p",null,"\u4e0b\u8f7d\u5bf9\u5e94\u7cfb\u7edf\u548c\u5904\u7406\u5668\u7248\u672c\u5373\u53ef\u3002"),(0,i.kt)("h2",{id:"\u65e7\u9879\u76ee\u5347\u7ea7"},"\u65e7\u9879\u76ee\u5347\u7ea7"),(0,i.kt)("p",null,"\u7f16\u8f91\u6240\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},".csproj")," \u9879\u76ee\uff0c\u4fee\u6539 ",(0,i.kt)("inlineCode",{parentName:"p"},"net5.0")," \u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"net6.0"),"\u3002"),(0,i.kt)("p",null,"\u540c\u65f6\u5347\u7ea7\u6240\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},"Microsoft")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u5305\u4e3a\u6700\u65b0\u7248\u672c\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6700\u65b0\u7248\u672c\u4e3a\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"v3.0.0-rc.1"),"\u3002"),(0,i.kt)("h2",{id:"\u65b0\u9879\u76ee\u4f7f\u7528"},"\u65b0\u9879\u76ee\u4f7f\u7528"),(0,i.kt)("h3",{id:"\u5347\u7ea7-visual-studio-2019"},"\u5347\u7ea7 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Visual Studio 2019")),(0,i.kt)("p",null,"\u76ee\u524d ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 7")," \u652f\u6301\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview 16.11.0 Preview 4.0")," \u7248\u672c\uff0c",(0,i.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u662f ",(0,i.kt)("inlineCode",{parentName:"strong"},"Preview")," \u6700\u65b0\u7248\u672c"),"\u3002\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16"},"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16")),(0,i.kt)("p",null,"\u5df2\u7ecf\u5b89\u88c5\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview")," \u7248\u672c\u7684\u670b\u53cb\u76f4\u63a5\u5347\u7ea7\u5230\u6700\u65b0\u7248\u5373\u53ef\u3002"),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio Code")," \u5f00\u53d1\uff0c\u53ef\u5ffd\u7565\u6b64\u9009\u9879\u3002")),(0,i.kt)("h3",{id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"},"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion v3.0.0-rc.2")," \u76ee\u524d\u63d0\u4f9b\u4e86\u6240\u6709\u7c7b\u578b\u7684\u811a\u624b\u67b6\uff0c\u7248\u672c\u53f7\u7edf\u4e00 ",(0,i.kt)("inlineCode",{parentName:"p"},"3.0.0-rc.2"),"\u3002"),(0,i.kt)("p",null,"\u5b89\u88c5\u811a\u624b\u67b6\uff0c\u6253\u5f00 ",(0,i.kt)("inlineCode",{parentName:"p"},"CMD/Powershell")," \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new --install Furion.Template.Api::3.0.0-rc.2\n")),(0,i.kt)("p",null,"\u521b\u5efa\u9879\u76ee"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new furionapi -n FurionNET6\n")),(0,i.kt)("h3",{id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"},"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"),(0,i.kt)("p",null,"\u6253\u5f00\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u5373\u53ef\u3002"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/757fb418.d013fcee.js b/handbook/build/assets/js/757fb418.d013fcee.js new file mode 100644 index 00000000000..c12ea6200a8 --- /dev/null +++ b/handbook/build/assets/js/757fb418.d013fcee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[651],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return m}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var u=r.createContext({}),p=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(u.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,u=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,f=d["".concat(u,".").concat(m)]||d[m]||c[m]||i;return n?r.createElement(f,a(a({ref:t},s),{},{components:n})):r.createElement(f,a({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var p=2;p.NET 6 Preview 5 SDK",id:"\u5b89\u88c5-net-6-preview-5-sdk",level:3},{value:"\u5347\u7ea7 Visual Studio 2019",id:"\u5347\u7ea7-visual-studio-2019",level:3},{value:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",level:3},{value:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",level:3}],d={toc:c};function m(e){var t=e.components,n=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"2021 \u5e74 06 \u6708 18 \u65e5\uff0c\u5fae\u8f6f\u53d1\u5e03\u4e86 ",(0,i.kt)("inlineCode",{parentName:"strong"},".NET 6 Preview 5")," \u7248\u672c\uff0c",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion")," \u5728\u5f53\u5929\u7b2c\u4e00\u65f6\u95f4\u9002\u914d\u4e86\u8be5\u7248\u672c\uff0c\u5e76\u53d1\u5e03 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion v3.0.0-preview.5.21301.9")," \u7248\u672c\u3002")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/tree/net6.0-preview5/"},"Furion .NET 6 Preview 5 \u6e90\u7801\u5730\u5740")),(0,i.kt)("h2",{id:"\u7b49\u4e0d\u53ca\u5c1d\u9c9c\u4e86"},"\u7b49\u4e0d\u53ca\u5c1d\u9c9c\u4e86"),(0,i.kt)("h3",{id:"\u5b89\u88c5-net-6-preview-5-sdk"},"\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"h3"},".NET 6 Preview 5 SDK")),(0,i.kt)("p",null,"\u5c1d\u9c9c\u4e4b\u524d\uff0c\u9996\u5148\u5148\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 5 SDK"),"\uff0c\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://dotnet.microsoft.com/download/dotnet/6.0"},"https://dotnet.microsoft.com/download/dotnet/6.0")),(0,i.kt)("p",null,"\u4e0b\u8f7d\u5bf9\u5e94\u7cfb\u7edf\u548c\u5904\u7406\u5668\u7248\u672c\u5373\u53ef\u3002"),(0,i.kt)("h3",{id:"\u5347\u7ea7-visual-studio-2019"},"\u5347\u7ea7 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Visual Studio 2019")),(0,i.kt)("p",null,"\u76ee\u524d ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 5")," \u652f\u6301\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview 16.11.0 Preview 2.0")," \u7248\u672c\uff0c",(0,i.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u662f ",(0,i.kt)("inlineCode",{parentName:"strong"},"Preview")," \u6700\u65b0\u7248\u672c"),"\u3002\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16"},"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16")),(0,i.kt)("p",null,"\u5df2\u7ecf\u5b89\u88c5\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview")," \u7248\u672c\u7684\u670b\u53cb\u76f4\u63a5\u5347\u7ea7\u5230\u6700\u65b0\u7248\u5373\u53ef\u3002"),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio Code")," \u5f00\u53d1\uff0c\u53ef\u5ffd\u7565\u6b64\u9009\u9879\u3002")),(0,i.kt)("h3",{id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"},"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion v3.0.0-preview.5.21301.9")," \u76ee\u524d\u63d0\u4f9b\u4e86\u6240\u6709\u7c7b\u578b\u7684\u811a\u624b\u67b6\uff0c\u7248\u672c\u53f7\u7edf\u4e00 ",(0,i.kt)("inlineCode",{parentName:"p"},"3.0.0-preview.5.21301.9"),"\u3002"),(0,i.kt)("p",null,"\u5b89\u88c5\u811a\u624b\u67b6\uff0c\u6253\u5f00 ",(0,i.kt)("inlineCode",{parentName:"p"},"CMD/Powershell")," \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9\n")),(0,i.kt)("p",null,"\u521b\u5efa\u9879\u76ee"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new furionapi -n FurionNET6\n")),(0,i.kt)("h3",{id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"},"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"),(0,i.kt)("p",null,"\u6253\u5f00\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u5373\u53ef\u3002"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/76437093.32703268.js b/handbook/build/assets/js/76437093.32703268.js new file mode 100644 index 00000000000..80339e26996 --- /dev/null +++ b/handbook/build/assets/js/76437093.32703268.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4667],{3905:function(e,t,r){r.d(t,{Zo:function(){return u},kt:function(){return m}});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(r),m=i,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||o;return r?n.createElement(f,a(a({ref:t},u),{},{components:r})):n.createElement(f,a({ref:t},u))}));function m(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,a[1]=l;for(var c=2;c(str, [options]);\n")),(0,o.kt)("h2",{id:"73-\u83b7\u53d6\u9ed8\u8ba4\u5e8f\u5217\u5316\u914d\u7f6e"},"7.3 \u83b7\u53d6\u9ed8\u8ba4\u5e8f\u5217\u5316\u914d\u7f6e"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var options = JsonSerializerUtility.GetDefaultJsonSerializerOptions();\n")),(0,o.kt)("h2",{id:"74-\u8bbe\u7f6e\u5e8f\u5217\u5316\u5c5e\u6027\u9996\u5b57\u6bcd\u5927\u5199"},"7.4 \u8bbe\u7f6e\u5e8f\u5217\u5316\u5c5e\u6027\u9996\u5b57\u6bcd\u5927\u5199"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"":!0,"{2}":!0},"services.AddControllersWithViews()\n .AddJsonSerializerPascalPropertyNaming();\n")),(0,o.kt)("h2",{id:"75-\u8bbe\u7f6e\u65f6\u95f4\u8f93\u51fa\u7edf\u4e00\u683c\u5f0f\u5316"},"7.5 \u8bbe\u7f6e\u65f6\u95f4\u8f93\u51fa\u7edf\u4e00\u683c\u5f0f\u5316"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"":!0,"{2}":!0},'services.AddControllersWithViews()\n .AddDateTimeJsonConverter("yyyy-MM-dd HH:mm:ss");\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/76b00148.11dfc651.js b/handbook/build/assets/js/76b00148.11dfc651.js new file mode 100644 index 00000000000..d4d10eb3dd6 --- /dev/null +++ b/handbook/build/assets/js/76b00148.11dfc651.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7057],{3905:function(e,n,t){t.d(n,{Zo:function(){return u},kt:function(){return m}});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function r(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):r(r({},n),e)),t},u=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},g={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(t),m=o,c=d["".concat(s,".").concat(m)]||d[m]||g[m]||i;return t?a.createElement(c,r(r({ref:n},u),{},{components:t})):a.createElement(c,r({ref:n},u))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,r=new Array(i);r[0]=d;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,r[1]=l;for(var p=2;pGlobalUsing",id:"261-\u5173\u4e8e-globalusing",level:2},{value:"2.6.2 \u5fc5\u8981\u914d\u7f6e",id:"262-\u5fc5\u8981\u914d\u7f6e",level:2},{value:"2.6.3 \u57fa\u672c\u4f7f\u7528",id:"263-\u57fa\u672c\u4f7f\u7528",level:2},{value:"2.6.3.1 \u9ed8\u8ba4\u5168\u5c40 using",id:"2631-\u9ed8\u8ba4\u5168\u5c40-using",level:3},{value:"2.6.4 .NET5 \u9879\u76ee\u5f00\u542f\u652f\u6301",id:"264-net5-\u9879\u76ee\u5f00\u542f\u652f\u6301",level:2},{value:"2.6.5 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"265-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],m={toc:d};function c(e){var n=e.components,t=(0,o.Z)(e,l);return(0,i.kt)("wrapper",(0,a.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"261-\u5173\u4e8e-globalusing"},"2.6.1 \u5173\u4e8e ",(0,i.kt)("inlineCode",{parentName:"h2"},"GlobalUsing")),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET6/C#10")," \u4e4b\u540e\uff0c\u5fae\u8f6f\u65b0\u589e\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"GlobalUsings")," \u673a\u5236\uff0c\u53ef\u4ee5\u5728\u9879\u76ee\u7684\u6839\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2a ",(0,i.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u6587\u4ef6\uff0c\u628a\u5e38\u7528\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"using")," \u653e\u7f6e\u5176\u4e2d\u3002"),(0,i.kt)("p",null,"\u8fd9\u6837 ",(0,i.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u6240\u5728\u7684\u9879\u76ee ",(0,i.kt)("inlineCode",{parentName:"p"},".cs")," \u6587\u4ef6\u5c31\u65e0\u9700\u91cd\u590d ",(0,i.kt)("inlineCode",{parentName:"p"},"using")," \u4e86\uff0c\u5927\u5927\u7684\u63d0\u9ad8\u5f00\u53d1\u6548\u7387\uff0c\u4e5f\u8ba9\u4ee3\u7801\u53d8\u7684\u66f4\u52a0\u7b80\u6d01\u3002"),(0,i.kt)("h2",{id:"262-\u5fc5\u8981\u914d\u7f6e"},"2.6.2 \u5fc5\u8981\u914d\u7f6e"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u542f\u7528 ",(0,i.kt)("inlineCode",{parentName:"strong"},"GlobalUsings")," \u673a\u5236\u9700\u8981\u4ee5\u4e0b\u4e24\u4e2a\u6b65\u9aa4\uff1a")),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"\u5728\u4f60\u9700\u8981\u5168\u5c40 ",(0,i.kt)("inlineCode",{parentName:"li"},"using")," \u7684\u9879\u76ee\u5c42\u6839\u76ee\u5f55\u521b\u5efa ",(0,i.kt)("inlineCode",{parentName:"li"},"GlobalUsings.cs")," \u6587\u4ef6\uff0c\u5982\u679c\u591a\u4e2a\u9879\u76ee\u5c42\u9700\u8981\uff0c\u5219\u6bcf\u4e2a\u5c42\u90fd\u5e94\u8be5\u6709\u4e00\u4e2a ",(0,i.kt)("inlineCode",{parentName:"li"},"GlobalUsings.cs")),(0,i.kt)("li",{parentName:"ol"},"\u7f16\u8f91\u9879\u76ee\u7684 ",(0,i.kt)("inlineCode",{parentName:"li"},".csproj")," \u6587\u4ef6\uff0c\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"li"},"enable"),"\uff0c\u6ce8\u610f\u662f\u5728 ",(0,i.kt)("inlineCode",{parentName:"li"},"")," \u4e2d\u6dfb\u52a0\uff0c\u901a\u5e38\u548c ",(0,i.kt)("inlineCode",{parentName:"li"},"")," \u540c\u7236\u540c\u7ea7")),(0,i.kt)("h2",{id:"263-\u57fa\u672c\u4f7f\u7528"},"2.6.3 \u57fa\u672c\u4f7f\u7528"),(0,i.kt)("p",null,"\u914d\u7f6e\u4e4b\u540e\uff0c\u73b0\u5728\u5c31\u53ef\u4ee5\u628a\u5e38\u7528\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"using")," \u653e\u5230 ",(0,i.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u4e2d\u4e86\uff0c\u5199\u6cd5\u5982\u4e0b\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers title="Furion \u63a8\u8350\u7684\u5168\u5c40\u547d\u540d\u7a7a\u95f4"',showLineNumbers:!0,title:'"Furion','\u63a8\u8350\u7684\u5168\u5c40\u547d\u540d\u7a7a\u95f4"':!0},"global using Furion;\nglobal using Furion.DatabaseAccessor;\nglobal using Furion.DataEncryption;\nglobal using Furion.DataValidation;\nglobal using Furion.DependencyInjection;\nglobal using Furion.DynamicApiController;\nglobal using Furion.Extensions;\nglobal using Furion.FriendlyException;\nglobal using Furion.Logging;\nglobal using Mapster;\nglobal using Microsoft.AspNetCore.Authorization;\nglobal using Microsoft.AspNetCore.Http;\nglobal using Microsoft.AspNetCore.Mvc;\nglobal using Microsoft.CodeAnalysis;\nglobal using Microsoft.EntityFrameworkCore;\nglobal using System.ComponentModel.DataAnnotations;\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u5fc5\u987b\u4ee5 ",(0,i.kt)("inlineCode",{parentName:"strong"},"global")," \u5f00\u5934\uff01")),(0,i.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"\u4e00\u822c\u63a8\u8350\u628a\u5b9e\u4f53\u7c7b\u7684\u547d\u540d\u7a7a\u95f4\u4e5f\u653e\u8fdb\u53bb\uff0c\u56e0\u4e3a\u4ed3\u50a8 ",(0,i.kt)("inlineCode",{parentName:"p"},"IRepository")," \u4f7f\u7528\u7684\u9891\u7387\u975e\u5e38\u9ad8\u3002"),(0,i.kt)("p",{parentName:"admonition"},"\u53e6\u5916\u63a8\u8350\u5927\u5bb6\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u4e2d\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},"CodeMaid")," \u63d2\u4ef6\uff08\u6ce8\u610f ",(0,i.kt)("inlineCode",{parentName:"p"},"2019")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"2022")," \u7248\u672c\uff09\u54e6\uff0c\u81ea\u52a8\u6e05\u7406\u89e3\u51b3\u65b9\u6848\u6240\u6709\u65e0\u7528\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"using"),"\uff0c\u7ed3\u5408 ",(0,i.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u975e\u5e38\u68d2\uff01")),(0,i.kt)("admonition",{title:"\u4e2a\u522b\u60c5\u51b5",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u53ef\u80fd\u7531\u4e8e ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u7248\u672c\u7684\u95ee\u9898\uff0c\u5bfc\u81f4 ",(0,i.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u5b9a\u4e49\u51fa\u9519\uff0c\u8fd9\u65f6\u5019\u9700\u8981\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"using")," \u540e\u9762\u52a0 ",(0,i.kt)("inlineCode",{parentName:"p"},"global::"),"\uff0c\u5982\uff1a"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"global using global::Furion;\n"))),(0,i.kt)("p",null,"\u63a5\u4e0b\u6765\u5728\u4ee3\u7801\u4e2d\u4f7f\u7528\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},"// \u65e0\u9700 using Furion \u7684\u547d\u540d\u7a7a\u95f4\u4e86\u54e6\uff0c\u6e05\u723d\u4e86\u4e0d\u5c11\n\nnamespace Your.Application;\n\npublic class DefaultAppService : IDynamicApiController\n{\n private readonly IRepository _boardCardRepository;\n private readonly IRepository _boardGroupRepository;\n private readonly IRepository _boardCardAttachmentRepository;\n private readonly IRepository _boardCardUserRepository;\n}\n\n// ....\n")),(0,i.kt)("img",{src:(0,r.Z)("img/cd2223.png")}),(0,i.kt)("h3",{id:"2631-\u9ed8\u8ba4\u5168\u5c40-using"},"2.6.3.1 \u9ed8\u8ba4\u5168\u5c40 ",(0,i.kt)("inlineCode",{parentName:"h3"},"using")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u5b9e\u9645\u4e0a\u5fae\u8f6f\u5df2\u7ecf\u81ea\u52a8\u628a\u4e00\u4e9b\u5e38\u7528\u7684 ",(0,i.kt)("inlineCode",{parentName:"strong"},"using")," \u5728\u7f16\u8bd1\u540e\u7684\u4ee3\u7801\u4e2d\u81ea\u52a8\u8865\u4e0a\u4e86"),"\uff0c\u8def\u5f84\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u9879\u76ee/obj/Debug/net6.0/\u9879\u76ee.GlobalUsings.cs")," \u6587\u4ef6\u4e2d\uff0c\u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \nglobal using global::System;\nglobal using global::System.Collections.Generic;\nglobal using global::System.IO;\nglobal using global::System.Linq;\nglobal using global::System.Net.Http;\nglobal using global::System.Threading;\nglobal using global::System.Threading.Tasks;\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u4e5f\u5c31\u662f\u4ee5\u4e0a\u7684 ",(0,i.kt)("inlineCode",{parentName:"strong"},"using")," \u65e0\u9700\u5199\u5728\u4f60\u521b\u5efa\u7684 ",(0,i.kt)("inlineCode",{parentName:"strong"},"GlobalUsings.cs")," \u4e2d\u4e86\uff0c\u5fae\u8f6f\u4f1a\u5728\u7f16\u8bd1\u65f6\u81ea\u52a8\u5408\u5e76\u3002")),(0,i.kt)("h2",{id:"264-net5-\u9879\u76ee\u5f00\u542f\u652f\u6301"},"2.6.4 ",(0,i.kt)("inlineCode",{parentName:"h2"},".NET5")," \u9879\u76ee\u5f00\u542f\u652f\u6301"),(0,i.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},".NET5")," \u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"C# 9.0")," \u7f16\u8bd1\uff0c\u800c ",(0,i.kt)("inlineCode",{parentName:"p"},"GlobalUsing")," \u662f\u4ece ",(0,i.kt)("inlineCode",{parentName:"p"},"C# 10.0")," \u5f00\u59cb\uff0c\u8fd9\u65f6\u5019\u53ea\u9700\u8981\u7f16\u8f91\u9879\u76ee\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},".csproj")," \u5e76\u6dfb\u52a0 ",(0,i.kt)("inlineCode",{parentName:"p"},"10.0")," \u5373\u53ef\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml",metastring:"showLineNumbers {3}",showLineNumbers:!0,"{3}":!0},"\n net5.0\n 10.0\n \x3c!-- \u5176\u4ed6\u914d\u7f6e --\x3e\n\n")),(0,i.kt)("p",null,"\u5982\u9700\u4f7f\u7528\u6700\u65b0\u7248\u53ef\u914d\u7f6e\u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"latest"),"\u3002"),(0,i.kt)("h2",{id:"265-\u53cd\u9988\u4e0e\u5efa\u8bae"},"2.6.5 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/78e5e8dd.e2ae0f52.js b/handbook/build/assets/js/78e5e8dd.e2ae0f52.js new file mode 100644 index 00000000000..f2275a1e197 --- /dev/null +++ b/handbook/build/assets/js/78e5e8dd.e2ae0f52.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[5713],{3905:function(e,n,t){t.d(n,{Zo:function(){return u},kt:function(){return m}});var i=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function p(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=i.createContext({}),s=function(e){var n=i.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):p(p({},n),e)),t},u=function(e){var n=s(e.components);return i.createElement(l.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},d=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=s(t),m=r,k=d["".concat(l,".").concat(m)]||d[m]||c[m]||a;return t?i.createElement(k,p(p({ref:n},u),{},{components:t})):i.createElement(k,p({ref:n},u))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,p=new Array(a);p[0]=d;var o={};for(var l in n)hasOwnProperty.call(n,l)&&(o[l]=n[l]);o.originalType=e,o.mdxType="string"==typeof e?e:r,p[1]=o;for(var s=2;sStartup \u7c7b",id:"311-startup-\u7c7b",level:2},{value:"3.1.1.1 Startup \u4e24\u4e2a\u91cd\u8981\u65b9\u6cd5",id:"3111-startup-\u4e24\u4e2a\u91cd\u8981\u65b9\u6cd5",level:3},{value:"3.1.2 AppStartup",id:"312-appstartup",level:2},{value:"3.1.2.1 \u5982\u4f55\u914d\u7f6e AppStartup",id:"3121-\u5982\u4f55\u914d\u7f6e-appstartup",level:3},{value:"3.1.2.2 AppStartup \u7ea6\u5b9a",id:"3122-appstartup-\u7ea6\u5b9a",level:3},{value:"3.1.2.3 AppStartup \u914d\u7f6e\u987a\u5e8f",id:"3123-appstartup-\u914d\u7f6e\u987a\u5e8f",level:3},{value:"3.1.2.4 AppStartup \u65b9\u6cd5\u8c03\u7528\u987a\u5e8f",id:"3124-appstartup-\u65b9\u6cd5\u8c03\u7528\u987a\u5e8f",level:3},{value:"3.1.3 Startup \u914d\u7f6e\u6700\u4f73\u5b9e\u8df5",id:"313-startup-\u914d\u7f6e\u6700\u4f73\u5b9e\u8df5",level:2},{value:"3.1.4 \u6784\u9020\u51fd\u6570\u6ce8\u5165\u8bf4\u660e",id:"314-\u6784\u9020\u51fd\u6570\u6ce8\u5165\u8bf4\u660e",level:2},{value:"3.1.5 \u5173\u4e8e appsettings.json",id:"315-\u5173\u4e8e-appsettingsjson",level:2},{value:"3.1.6 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"316-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:c};function m(e){var n=e.components,t=(0,r.Z)(e,p);return(0,a.kt)("wrapper",(0,i.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"311-startup-\u7c7b"},"3.1.1 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Startup")," \u7c7b"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Startup")," \u7c7b\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u9ed8\u8ba4\u8c03\u7528\u7684\u7c7b\uff0c\u8be5\u7c7b\u662f\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Program.cs")," \u4e2d\u914d\u7f6e\uff1a"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},".NET5")," \u65b9\u5f0f"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {18} title="Furion.Web.Entry\\Program.cs"',showLineNumbers:!0,"":!0,"{18}":!0,title:'"Furion.Web.Entry\\Program.cs"'},"using Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Hosting;\n\nnamespace Furion.Web.Entry\n{\n public class Program\n {\n public static void Main(string[] args)\n {\n CreateHostBuilder(args).Build().Run();\n }\n\n public static IHostBuilder CreateHostBuilder(string[] args)\n {\n return Host.CreateDefaultBuilder(args)\n .ConfigureWebHostDefaults(webBuilder =>\n {\n webBuilder.UseStartup();\n });\n }\n }\n}\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},".NET6 \u65b9\u5f0f")),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},".NET6")," \u4e2d\u5fae\u8f6f\u5df2\u4e0d\u518d\u63a8\u8350 ",(0,a.kt)("inlineCode",{parentName:"p"},"UseStartup()")," \u65b9\u5f0f\u3002"),(0,a.kt)("h3",{id:"3111-startup-\u4e24\u4e2a\u91cd\u8981\u65b9\u6cd5"},"3.1.1.1 ",(0,a.kt)("inlineCode",{parentName:"h3"},"Startup")," \u4e24\u4e2a\u91cd\u8981\u65b9\u6cd5"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Startup")," \u9ed8\u8ba4\u6709\u4e24\u4e2a\u91cd\u8981\u7684\u65b9\u6cd5:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ConfigureServices"),"\uff1a\u914d\u7f6e\u5e94\u7528\u6240\u9700\u670d\u52a1\uff0c\u5728\u8be5\u65b9\u6cd5\u4e2d\u53ef\u4ee5\u6dfb\u52a0\u5e94\u7528\u6240\u9700\u8981\u7684\u529f\u80fd\u6216\u670d\u52a1"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Configure"),"\uff1a\u914d\u7f6e\u5e94\u7528\u8bf7\u6c42\u5904\u7406\u7ba1\u9053")),(0,a.kt)("p",null,"\u9ed8\u8ba4\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {9,13} title="Furion.Web.Entry\\Startup.cs"',showLineNumbers:!0,"":!0,"{9,13}":!0,title:'"Furion.Web.Entry\\Startup.cs"'},"using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.Web.Entry\n{\n public class Startup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n }\n }\n}\n")),(0,a.kt)("p",null,"\u5728\u8fd9\u91cc\uff0c\u4e0d\u6253\u7b97\u8be6\u7ec6\u8bb2 ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup")," \u7c7b\u7684\u5177\u4f53\u529f\u80fd\u548c\u4f5c\u7528\u3002"),(0,a.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,a.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/startup?view=aspnetcore-3.1"},"ASP.NET Core - Startup \u7c7b")," \u7ae0\u8282\u3002")),(0,a.kt)("h2",{id:"312-appstartup"},"3.1.2 ",(0,a.kt)("inlineCode",{parentName:"h2"},"AppStartup")),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u63d0\u4f9b\u4e86\u66f4\u4e3a\u7075\u6d3b\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup")," \u7c7b\u914d\u7f6e\u65b9\u5f0f\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u65e0\u9700\u5728 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Web \u542f\u7528\u5c42")," \u4e2d\u914d\u7f6e\uff0c\u53ef\u5c06\u914d\u7f6e\u653e\u5230\u4efb\u4f55\u9879\u76ee\u5c42\u3002")),(0,a.kt)("p",null,"\u53ef\u80fd\u4f1a\u6709\u8bfb\u8005\u6709\u7591\u95ee\uff0c\u4e3a\u4ec0\u4e48\u8981\u591a\u6b64\u4e00\u4e3e\u5462\uff1f\u539f\u56e0\u6709\u51e0\u70b9\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Startup")," \u7c7b\u9ed8\u8ba4\u548c ",(0,a.kt)("inlineCode",{parentName:"li"},"Web \u5e94\u7528\u5c42")," \u7ed1\u5b9a\u5728\u4e00\u8d77\uff0c\u8fd9\u6837\u5c31\u4f1a\u5bfc\u81f4\u5982\u679c\u6211\u521b\u5efa\u4e86\u65b0\u7684 ",(0,a.kt)("inlineCode",{parentName:"li"},"Web \u5e94\u7528\u5c42"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"Startup")," \u53c8\u8981\u91cd\u65b0\u914d\u7f6e"),(0,a.kt)("li",{parentName:"ul"},"\u968f\u7740\u4e1a\u52a1\u7684\u589e\u957f\uff0c\u9700\u8981\u96c6\u6210\u8d8a\u6765\u8d8a\u591a\u7684\u7b2c\u4e09\u65b9\u670d\u52a1\uff0c\u8fd9\u65f6\u5019 ",(0,a.kt)("inlineCode",{parentName:"li"},"Startup")," \u7c7b\u5c31\u4f1a\u53d8\u5f97\u8d8a\u6765\u8d8a\u81c3\u80bf\uff0c\u96be\u4ee5\u7ef4\u62a4"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Startup")," \u7c7b\u65e0\u6cd5\u4e0e\u5176\u4ed6\u9879\u76ee\u7c7b\u578b\u8fdb\u884c\u5171\u7528")),(0,a.kt)("p",null,"\u6240\u4ee5\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86\u66f4\u52a0\u7075\u6d3b\u7684\u914d\u7f6e\u65b9\u5f0f\uff1a",(0,a.kt)("inlineCode",{parentName:"p"},"AppStartup"),"\u3002"),(0,a.kt)("admonition",{title:"\u6ce8\u610f\u4e8b\u9879",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c ",(0,a.kt)("inlineCode",{parentName:"p"},"AppStartup")," \u7684\u6d3e\u751f\u7c7b\u6240\u5728\u7684\u9879\u76ee\u5c42\u6ca1\u6709\u88ab\u542f\u52a8\u5c42\u76f4\u63a5\u6216\u95f4\u63a5\u6dfb\u52a0\u5f15\u7528\uff0c\u90a3\u4e48\u8fd9\u4e2a ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u5c31\u4f1a\u88ab\u5ffd\u7565\uff0c\u4e5f\u5c31\u662f\u4e0d\u4f1a\u81ea\u52a8\u8f7d\u5165\u6ce8\u518c\u3002")),(0,a.kt)("h3",{id:"3121-\u5982\u4f55\u914d\u7f6e-appstartup"},"3.1.2.1 \u5982\u4f55\u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"h3"},"AppStartup")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AppStartup")," \u662f\u4e00\u4e2a\u62bd\u8c61\u7684\u7a7a\u7c7b\uff0c\u6ca1\u6709\u4efb\u4f55\u5b9a\u4e49\u6210\u5458\u3002\u6b63\u662f\u56e0\u4e3a\u8fd9\u6837\uff0c\u624d\u63d0\u4f9b\u66f4\u52a0\u7075\u6d3b\u7684\u914d\u7f6e\u65b9\u5f0f\u3002"),(0,a.kt)("h3",{id:"3122-appstartup-\u7ea6\u5b9a"},"3.1.2.2 ",(0,a.kt)("inlineCode",{parentName:"h3"},"AppStartup")," \u7ea6\u5b9a"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AppStartup")," \u6d3e\u751f\u7c7b\u53ea\u6709\u4e24\u4e2a\u5c0f\u7ea6\u5b9a\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u4efb\u4f55\u516c\u5f00\u3001\u975e\u9759\u6001\u3001\u8fd4\u56de\u503c\u4e3a ",(0,a.kt)("inlineCode",{parentName:"li"},"void")," \u4e14\u65b9\u6cd5\u7b2c\u4e00\u4e2a\u53c2\u6570\u662f ",(0,a.kt)("inlineCode",{parentName:"li"},"IServiceCollection")," \u7c7b\u578b\uff0c\u90a3\u4e48\u4ed6\u5c31\u662f\u4e00\u4e2a ",(0,a.kt)("inlineCode",{parentName:"li"},"ConfigureServices")," \u65b9\u6cd5"),(0,a.kt)("li",{parentName:"ul"},"\u4efb\u4f55\u516c\u5f00\u3001\u975e\u9759\u6001\u3001\u8fd4\u56de\u503c\u4e3a ",(0,a.kt)("inlineCode",{parentName:"li"},"void")," \u4e14\u65b9\u6cd5\u7b2c\u4e00\u4e2a\u53c2\u6570\u662f ",(0,a.kt)("inlineCode",{parentName:"li"},"IApplicationBuilder")," \u7c7b\u578b\uff0c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u662f ",(0,a.kt)("inlineCode",{parentName:"li"},"IWebHostEnvironment")," \u7c7b\u578b\uff0c\u90a3\u4e48\u4ed6\u5c31\u662f\u4e00\u4e2a ",(0,a.kt)("inlineCode",{parentName:"li"},"Configure")," \u65b9\u6cd5")),(0,a.kt)("p",null,"\u6240\u4ee5\uff0c\u6211\u4eec\u53ef\u4ee5\u81ea\u7531\u7684\u7f16\u5199\u65b9\u6cd5\uff0c\u53ea\u8981\u9075\u5faa\u7ea6\u5b9a\u5373\u53ef\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,7,12,18,23}",showLineNumbers:!0,"":!0,"{5,7,12,18,23}":!0},"using Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.EntityFramework.Core\n{\n public class MyStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddDataValidation();\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n app.UseSwagger();\n }\n\n // \u53ef\u4ee5\u968f\u610f\u5b9a\u4e49\u540d\u5b57\u548c\u65b9\u6cd5\n public void XXXXName(IServiceCollection services)\n {\n }\n\n // \u53ef\u4ee5\u968f\u610f\u5b9a\u4e49\u540d\u5b57\u548c\u65b9\u6cd5\n public void ZZZName(IApplicationBuilder app, IWebHostEnvironment env)\n {\n }\n }\n}\n")),(0,a.kt)("h3",{id:"3123-appstartup-\u914d\u7f6e\u987a\u5e8f"},"3.1.2.3 ",(0,a.kt)("inlineCode",{parentName:"h3"},"AppStartup")," \u914d\u7f6e\u987a\u5e8f"),(0,a.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"AppStartup")," \u914d\u7f6e\u987a\u5e8f\u7531\u6240\u5728\u7a0b\u5e8f\u96c6\u7684\u540d\u79f0\u8fdb\u884c\u6b63\u5e8f\u8c03\u7528\uff0c\u5982\u679c\u6211\u4eec\u9700\u8981\u914d\u7f6e\u6267\u884c\u987a\u5e8f\uff0c\u53ea\u9700\u8981\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"AppStartup")," \u6d3e\u751f\u7c7b\u4e2d\u8d34 ",(0,a.kt)("inlineCode",{parentName:"p"},"[AppStartup(order)]")," \u7279\u6027\u5373\u53ef\u3002"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"order")," \u6570\u503c\u8d8a\u5927\uff0c\u8d8a\u5728\u524d\u9762\u8c03\u7528\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5}",showLineNumbers:!0,"":!0,"{5}":!0},"using Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppStartup(10)]\n public class FirstStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n }\n }\n}\n")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5}",showLineNumbers:!0,"":!0,"{5}":!0},"using Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppStartup(9)]\n public class SecondStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n }\n }\n}\n")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"FirstStartup")," \u4f1a\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"SecondStartup")," \u4e4b\u524d\u8c03\u7528\u3002"),(0,a.kt)("h3",{id:"3124-appstartup-\u65b9\u6cd5\u8c03\u7528\u987a\u5e8f"},"3.1.2.4 ",(0,a.kt)("inlineCode",{parentName:"h3"},"AppStartup")," \u65b9\u6cd5\u8c03\u7528\u987a\u5e8f"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AppStartup")," \u65b9\u6cd5\u8c03\u7528\u987a\u5e8f\u548c\u65b9\u6cd5\u7684\u4e66\u5199\u5148\u540e\u6709\u5173\uff0c\u8d8a\u5728\u524d\u9762\u7684\u65b9\u6cd5\u8d8a\u5148\u8c03\u7528\u3002"),(0,a.kt)("h2",{id:"313-startup-\u914d\u7f6e\u6700\u4f73\u5b9e\u8df5"},"3.1.3 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Startup")," \u914d\u7f6e\u6700\u4f73\u5b9e\u8df5"),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"v3.6.3+")," \u8bf4\u660e"),(0,a.kt)("p",{parentName:"admonition"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion v3.6.3+")," \u7248\u672c\u4e4b\u540e\u65e0\u9700\u521b\u5efa\u7a7a ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u7c7b\uff0c\u5185\u90e8\u5df2\u5b9e\u73b0 ",(0,a.kt)("inlineCode",{parentName:"p"},"FakeStartup")," \u6a21\u5f0f\u3002")),(0,a.kt)("p",null,"\u5efa\u8bae ",(0,a.kt)("inlineCode",{parentName:"p"},"Web")," \u542f\u52a8\u5c42\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4fdd\u6301\u4e3a\u7a7a\u65b9\u6cd5\u4f53\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {9-11,13-15} title="Furion.Web.Entry\\Startup.cs"',showLineNumbers:!0,"{9-11,13-15}":!0,title:'"Furion.Web.Entry\\Startup.cs"'},"using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.Web.Entry\n{\n public class Startup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n }\n }\n}\n")),(0,a.kt)("p",null,"\u5c06\u6240\u6709 ",(0,a.kt)("inlineCode",{parentName:"p"},"Web \u5e94\u7528\u5c42")," \u914d\u7f6e\u8fc1\u79fb\u5230 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion.Web.Core.Startup.cs")," \u4e2d\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers title="Furion.Web.Core\\Startup.cs"',showLineNumbers:!0,"":!0,title:'"Furion.Web.Core\\Startup.cs"'},"using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace Furion.Web.Core\n{\n public sealed class FurWebCoreStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddCorsAccessor();\n\n services.AddControllers().AddInject();\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n if (env.IsDevelopment())\n {\n app.UseDeveloperExceptionPage();\n }\n\n app.UseHttpsRedirection();\n\n app.UseRouting();\n\n app.UseCorsAccessor();\n\n app.UseAuthentication();\n app.UseAuthorization();\n\n app.UseInject();\n\n app.UseEndpoints(endpoints =>\n {\n endpoints.MapControllers();\n });\n }\n }\n}\n")),(0,a.kt)("p",null,"\u8fd9\u6837\uff0c\u540e\u7eed\u66f4\u6362 ",(0,a.kt)("inlineCode",{parentName:"p"},"Web \u5e94\u7528\u5c42")," \u4e5f\u65e0\u9700\u91cd\u65b0\u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")),(0,a.kt)("h2",{id:"314-\u6784\u9020\u51fd\u6570\u6ce8\u5165\u8bf4\u660e"},"3.1.4 \u6784\u9020\u51fd\u6570\u6ce8\u5165\u8bf4\u660e"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"AppStartup")," \u7684\u6d3e\u751f\u7c7b\u5e76\u672a\u63d0\u4f9b\u4f9d\u8d56\u6ce8\u5165\u7684\u529f\u80fd\uff0c\u4e5f\u5373\u662f\u65e0\u6cd5\u901a\u8fc7\u6784\u9020\u51fd\u6570\u8fdb\u884c\u6ce8\u5165\u670d\u52a1"),"\u3002\u539f\u56e0\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"AppStartup")," \u662f\u4e2a\u7a7a\u7c7b\uff0c\u76ee\u7684\u662f\u7528\u6765\u67e5\u627e ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup")," \u7684\u3002"),(0,a.kt)("p",null,"\u90a3\u5982\u4f55\u50cf ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e00\u6837\u4f7f\u7528\u670d\u52a1\u5462\uff1f"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u83b7\u53d6\u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"li"},"IConfiguration")," \u5b9e\u4f8b\uff1a\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"li"},"App.Configuration")),(0,a.kt)("li",{parentName:"ul"},"\u89e3\u6790\u670d\u52a1\uff1a\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"li"},"App.GetService()")," \u6216 ",(0,a.kt)("inlineCode",{parentName:"li"},"app.ApplicationServices.GetService()"))),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u5173\u4e8e ",(0,a.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Configure")," \u65b9\u6cd5\u6ce8\u5165"),(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"AppStartup")," \u9488\u5bf9 ",(0,a.kt)("inlineCode",{parentName:"p"},"Configure")," \u65b9\u6cd5\u63d0\u4f9b\u4e86\u53c2\u6570\u89e3\u6790\u6ce8\u5165\u529f\u80fd\uff0c\u4e5f\u5c31\u662f\u53ea\u8981\u5728\u65b9\u6cd5\u4e2d\u58f0\u660e\u63a5\u53e3\u53c2\u6570\u5373\u53ef\u81ea\u52a8\u6ce8\u5165\uff0c\u5982\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,2}",showLineNumbers:!0,"":!0,"{1,2}":!0},"// app \u548c env \u4f1a\u81ea\u52a8\u6ce8\u5165\npublic void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n{\n}\n"))),(0,a.kt)("h2",{id:"315-\u5173\u4e8e-appsettingsjson"},"3.1.5 \u5173\u4e8e ",(0,a.kt)("inlineCode",{parentName:"h2"},"appsettings.json")),(0,a.kt)("p",null,"\u5728\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u914d\u7f6e\u653e\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u4e2d\u914d\u7f6e\uff0c\u4f46\u662f\u8fd9\u6837\u7684\u65b9\u5f0f\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u914d\u7f6e\u4e00\u6837\u7684\u9053\u7406\uff0c\u4e00\u65e6\u6211\u4eec\u66f4\u6362\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"Web \u5e94\u7528\u5c42"),"\uff0c\u90a3\u4e48 ",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u53c8\u8981\u91cd\u65b0\u914d\u7f6e\u4e00\u6b21\u3002"),(0,a.kt)("p",null,"\u6240\u4ee5\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u66f4\u52a0\u7075\u6d3b\u7684\u65b9\u5f0f\u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json"),"\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u53ea\u9700\u8981\u5728\u4efb\u4f55\u9879\u76ee\u5c42\u6839\u76ee\u5f55\u4e0b\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"strong"},".json")," \u6587\u4ef6\u5373\u53ef\u3002",(0,a.kt)("inlineCode",{parentName:"strong"},"Furion")," \u6846\u67b6\u6700\u540e\u4f1a\u81ea\u52a8\u5408\u5e76\u6240\u6709\u5206\u6563\u7684\u914d\u7f6e\u6587\u4ef6\u3002")),(0,a.kt)("p",null,"\u5982\u6211\u4eec\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion.EntityFramework.Core")," \u5c42\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"dbsettings.json")," \u914d\u7f6e\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers title="Furion.EntityFramework.Core\\dbsettings.json"',showLineNumbers:!0,"":!0,title:'"Furion.EntityFramework.Core\\dbsettings.json"'},'{\n "ConnectionStrings": {\n "DbConnectionString": "Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;",\n "Sqlite3ConnectionString": "Data Source=./Furion.db"\n }\n}\n')),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u65e0\u9700\u5728 ",(0,a.kt)("inlineCode",{parentName:"strong"},"appsettings.json")," \u4e2d\u914d\u7f6e"),"\uff0c\u4e0b\u9762\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u9ed8\u8ba4\u4ee3\u7801:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "Logging": {\n "LogLevel": {\n "Default": "Information",\n "Microsoft": "Warning",\n "Microsoft.Hosting.Lifetime": "Information",\n "Microsoft.EntityFrameworkCore": "Information"\n }\n },\n "AllowedHosts": "*"\n}\n')),(0,a.kt)("p",null,"\u8fd9\u6837\u6211\u4eec\u628a\u914d\u7f6e\u6587\u4ef6\u5206\u6563\u5728\u4e0d\u540c\u9879\u76ee\u5c42\u4e4b\u540e\uff0c\u5c31\u53ef\u4ee5\u5b9e\u73b0\u5171\u7528\u548c\u5171\u4eab\u4e86\u3002"),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"\u5176\u4ed6\u5c42\u7684\u914d\u7f6e\u6587\u4ef6\u4e0d\u80fd\u4ee5 ",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u547d\u540d\uff0c\u4f1a\u5bfc\u81f4\u8986\u76d6\u542f\u52a8\u5c42\u7684\u914d\u7f6e\u3002"),(0,a.kt)("p",{parentName:"admonition"},"\u53e6\u5916\uff0c\u5728\u5176\u4ed6\u5c42\u521b\u5efa\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"*.json")," \u6587\u4ef6\u5fc5\u987b\u8bbe\u7f6e\u6587\u4ef6\u5c5e\u6027\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"\u59cb\u7ec8\u590d\u5236\u6216\u8f83\u65b0\u590d\u5236"),"\u3002")),(0,a.kt)("h2",{id:"316-\u53cd\u9988\u4e0e\u5efa\u8bae"},"3.1.6 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/78ec8283.1553b264.js b/handbook/build/assets/js/78ec8283.1553b264.js new file mode 100644 index 00000000000..6d62b6a21bd --- /dev/null +++ b/handbook/build/assets/js/78ec8283.1553b264.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7175],{3268:function(e){e.exports=JSON.parse('{"permalink":"/blog/tags/netcore","page":1,"postsPerPage":10,"totalPages":1,"totalCount":7,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/7c5dd5ef.39eac33d.js b/handbook/build/assets/js/7c5dd5ef.39eac33d.js new file mode 100644 index 00000000000..adb7e6f8f9d --- /dev/null +++ b/handbook/build/assets/js/7c5dd5ef.39eac33d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[3043],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return d}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=p(n),d=o,f=m["".concat(s,".").concat(d)]||m[d]||c[d]||a;return n?r.createElement(f,l(l({ref:t},u),{},{components:n})):r.createElement(f,l({ref:t},u))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var p=2;p {\n // Do.....\n}, 3, 1000);\n\n// \u5e26\u8fd4\u56de\u503c\nvar value = Oops.Retry(() => {\n // Do.....\n}, 3, 1000);\n\n// \u53ea\u6709\u7279\u5b9a\u5f02\u5e38\u624d\u76d1\u542c\nOops.Retry(() => {\n\n}, 3, 1000, typeof(ArgumentNullException));\n")),(0,a.kt)("h2",{id:"46-\u629b\u51fa\u4e1a\u52a1\u5f02\u5e38"},"4.6 \u629b\u51fa\u4e1a\u52a1\u5f02\u5e38"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'throw Oops.Bah("\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef");\nthrow Oops.Bah(1000);\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/7c6b08dc.c8dc555d.js b/handbook/build/assets/js/7c6b08dc.c8dc555d.js new file mode 100644 index 00000000000..ab4c12cedd0 --- /dev/null +++ b/handbook/build/assets/js/7c6b08dc.c8dc555d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4507],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return d}});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(n),d=a,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||i;return n?r.createElement(f,o(o({ref:t},c),{},{components:n})):r.createElement(f,o({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;pContentType \u6216 Mime",id:"135-\u83b7\u53d6\u6587\u4ef6-contenttype-\u6216-mime",level:2},{value:"13.6 \u89e3\u51b3\u4e0d\u53d7\u652f\u6301\u7684\u6587\u4ef6 MIME \u7c7b\u578b",id:"136-\u89e3\u51b3\u4e0d\u53d7\u652f\u6301\u7684\u6587\u4ef6-mime-\u7c7b\u578b",level:2}],m={toc:u};function d(e){var t=e.components,n=(0,a.Z)(e,o);return(0,i.kt)("wrapper",(0,r.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"131-\u83b7\u53d6\u7269\u7406\u6587\u4ef6\u63d0\u4f9b\u5668"},"13.1 \u83b7\u53d6\u7269\u7406\u6587\u4ef6\u63d0\u4f9b\u5668"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var fileProvider = FS.GetPhysicalFileProvider(@"c:/test");\n')),(0,i.kt)("h2",{id:"132-\u83b7\u53d6\u5d4c\u5165\u8d44\u6e90\u6587\u4ef6\u63d0\u4f9b\u5668"},"13.2 \u83b7\u53d6\u5d4c\u5165\u8d44\u6e90\u6587\u4ef6\u63d0\u4f9b\u5668"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var fileProvider = FS.GetEmbeddedFileProvider(Assembly.GetEntryAssembly());\n")),(0,i.kt)("h2",{id:"133-\u83b7\u53d6\u6587\u4ef6\u63d0\u4f9b\u5668"},"13.3 \u83b7\u53d6\u6587\u4ef6\u63d0\u4f9b\u5668"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var fileProvider = FS.GetFileProvider(FileProviderTypes.Physical, @"c:/test");\n')),(0,i.kt)("h2",{id:"134-\u7279\u522b\u6ce8\u610f"},"13.4 \u7279\u522b\u6ce8\u610f"),(0,i.kt)("p",null,"\u4f7f\u7528\u8be5\u529f\u80fd\u9700\u786e\u4fdd ",(0,i.kt)("inlineCode",{parentName:"p"},"services.AddVirtualFileServer()")," \u5df2\u6ce8\u518c\u3002\u6846\u67b6\u63d0\u4f9b\u4e24\u79cd\u65b9\u5f0f\u63a7\u5236\u8be5\u670d\u52a1\u6ce8\u518c\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},(0,i.kt)("inlineCode",{parentName:"strong"},"AppSettings")," \u914d\u7f6e"),"\uff08\u63a8\u8350\u65b9\u5f0f\uff09")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "AppSettings": {\n "EnabledVirtualFileServer": true\n }\n}\n')),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u4ee5\u4e0a\u914d\u7f6e\u9ed8\u8ba4\u5f00\u542f\uff0c\u65e0\u9700\u914d\u7f6e\u3002")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"`\u624b\u52a8\u6ce8\u518c"))),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddVirtualFileServer();\n")),(0,i.kt)("h2",{id:"135-\u83b7\u53d6\u6587\u4ef6-contenttype-\u6216-mime"},"13.5 \u83b7\u53d6\u6587\u4ef6 ",(0,i.kt)("inlineCode",{parentName:"h2"},"ContentType")," \u6216 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Mime")),(0,i.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"warning"},(0,i.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 3.3.1 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var success = FS.TryGetContentType("image.png", out var contentType); // image/png\n')),(0,i.kt)("h2",{id:"136-\u89e3\u51b3\u4e0d\u53d7\u652f\u6301\u7684\u6587\u4ef6-mime-\u7c7b\u578b"},"13.6 \u89e3\u51b3\u4e0d\u53d7\u652f\u6301\u7684\u6587\u4ef6 ",(0,i.kt)("inlineCode",{parentName:"h2"},"MIME")," \u7c7b\u578b"),(0,i.kt)("p",null,"\u89e3\u51b3\u4e0d\u53d7\u652f\u6301\u7684\u6587\u4ef6 ",(0,i.kt)("inlineCode",{parentName:"p"},"MIME")," \u51fa\u73b0 ",(0,i.kt)("inlineCode",{parentName:"p"},"404")," \u95ee\u9898\u3002"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"app.UseStaticFiles(new StaticFileOptions {\n ContentTypeProvider = FS.GetFileExtensionContentTypeProvider()\n})\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/7d1915d2.b8d77147.js b/handbook/build/assets/js/7d1915d2.b8d77147.js new file mode 100644 index 00000000000..84504e4e474 --- /dev/null +++ b/handbook/build/assets/js/7d1915d2.b8d77147.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9173],{3905:function(e,n,t){t.d(n,{Zo:function(){return c},kt:function(){return m}});var r=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=r.createContext({}),s=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},c=function(e){var n=s(e.components);return r.createElement(l.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=s(t),m=i,g=d["".concat(l,".").concat(m)]||d[m]||u[m]||o;return t?r.createElement(g,a(a({ref:n},c),{},{components:t})):r.createElement(g,a({ref:n},c))}));function m(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var o=t.length,a=new Array(o);a[0]=d;var p={};for(var l in n)hasOwnProperty.call(n,l)&&(p[l]=n[l]);p.originalType=e,p.mdxType="string"==typeof e?e:i,a[1]=p;for(var s=2;sWeb \u9879\u76ee",id:"21-\u521b\u5efa-web-\u9879\u76ee",level:2},{value:"2.1.1 \u521b\u5efa ASP.NET Core Web \u5e94\u7528\u7a0b\u5e8f",id:"211-\u521b\u5efa-aspnet-core-web-\u5e94\u7528\u7a0b\u5e8f",level:3},{value:"2.2 \u6dfb\u52a0 Furion \u4f9d\u8d56\u5305",id:"22-\u6dfb\u52a0-furion-\u4f9d\u8d56\u5305",level:2},{value:"2.3 Furion \u57fa\u672c\u914d\u7f6e",id:"23-furion-\u57fa\u672c\u914d\u7f6e",level:2},{value:"2.3.1 Program.cs \u6dfb\u52a0 Inject()",id:"231-programcs-\u6dfb\u52a0-inject",level:3},{value:"2.3.2 \u5728 Startup.cs \u4e2d\u6dfb\u52a0\u4e24\u4e2a Inject()",id:"232-\u5728-startupcs-\u4e2d\u6dfb\u52a0\u4e24\u4e2a-inject",level:3},{value:"2.4 \u542f\u52a8\u6d4f\u89c8\u5668",id:"24-\u542f\u52a8\u6d4f\u89c8\u5668",level:2}],m={toc:d};function g(e){var n=e.components,t=(0,i.Z)(e,p);return(0,o.kt)("wrapper",(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{title:"\u5c3d\u5feb\u5347\u7ea7",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"\u622a\u81f3 ",(0,o.kt)("strong",{parentName:"p"},"2022 \u5e74 05 \u6708 31 \u65e5"),"\uff0c\u5fae\u8f6f\u5df2\u7ecf\u505c\u6b62\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},".NET5")," \u7684\u6280\u672f\u652f\u6301\uff0c\u6240\u4ee5\u8bf7\u5c3d\u5feb\u5347\u7ea7\u5230 ",(0,o.kt)("inlineCode",{parentName:"p"},".NET6")," \u7248\u672c\uff0c\u8be6\u7ec6\u5347\u7ea7\u53ef\u67e5\u9605 \u3010",(0,o.kt)("a",{parentName:"p",href:"/docs/net5-to-net6"},".NET5 \u5347\u7ea7 .NET6"),"\u3011")),(0,o.kt)("admonition",{title:"\u63a8\u8350\u4f7f\u7528\u811a\u624b\u67b6",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u5b98\u65b9\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u65b9\u4fbf\u7684\u811a\u624b\u67b6\uff0c\u53ef\u4ee5\u5feb\u901f\u7684\u521b\u5efa\u591a\u5c42\u67b6\u6784\u9879\u76ee\u3002"),(0,o.kt)("p",{parentName:"admonition"},"\u63a8\u8350\u4f7f\u7528 \u300a",(0,o.kt)("a",{parentName:"p",href:"/docs/template"},"2.2 \u5b98\u65b9\u811a\u624b\u67b6"),"\u300b\u4ee3\u66ff\u672c\u7ae0\u8282\u529f\u80fd\u3002")),(0,o.kt)("admonition",{title:"\u5165\u95e8\u6761\u4ef6",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u5bf9 ",(0,o.kt)("inlineCode",{parentName:"p"},".NET Core/ASP.NET Core")," \u6709\u4e00\u5b9a\u57fa\u7840\u4e86\u89e3\uff0c\u8fd8\u672a\u63a5\u89e6\u7684\u53ef\u5148\u770b ",(0,o.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/?view=aspnetcore-5.0&tabs=windows"},"\u3010ASP.NET Core \u57fa\u7840\u3011"))),(0,o.kt)("h2",{id:"21-\u521b\u5efa-web-\u9879\u76ee"},"2.1 \u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"h2"},"Web")," \u9879\u76ee"),(0,o.kt)("admonition",{title:"\u73af\u5883\u8981\u6c42",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e4b\u524d\u5148\u786e\u4fdd\u5b89\u88c5\u4e86\u6700\u65b0\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},".NET 5 SDK")," \u5e76\u5347\u7ea7 ",(0,o.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019")," \u81f3\u6700\u65b0\u7248\u3002")),(0,o.kt)("h3",{id:"211-\u521b\u5efa-aspnet-core-web-\u5e94\u7528\u7a0b\u5e8f"},"2.1.1 \u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"h3"},"ASP.NET Core Web \u5e94\u7528\u7a0b\u5e8f")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u6253\u5f00 ",(0,o.kt)("inlineCode",{parentName:"li"},"Visual Studio 2019")," \u5e76\u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"li"},"Web")," \u9879\u76ee")),(0,o.kt)("img",{src:(0,a.Z)("img/rm1.png")}),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u914d\u7f6e\u9879\u76ee\u540d\u79f0")),(0,o.kt)("img",{src:(0,a.Z)("img/rm2.png")}),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u9009\u62e9 ",(0,o.kt)("inlineCode",{parentName:"li"},"WebAPI")," \u9879\u76ee")),(0,o.kt)("img",{src:(0,a.Z)("img/rm3.png")}),(0,o.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"warning"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u5df2\u7ecf\u5185\u7f6e\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"Swagger")," \u89c4\u8303\u5316\u5e93\uff0c\u6240\u4ee5\u521b\u5efa\u65f6",(0,o.kt)("strong",{parentName:"p"},"\u65e0\u9700\u52fe\u9009")," ",(0,o.kt)("inlineCode",{parentName:"p"},"Enable OpenAPI support")," \u9009\u9879\u3002\u5426\u5219\u63d0\u793a\u7248\u672c\u4e0d\u4e00\u81f4\u4ea7\u751f\u51b2\u7a81\u3002")),(0,o.kt)("h2",{id:"22-\u6dfb\u52a0-furion-\u4f9d\u8d56\u5305"},"2.2 \u6dfb\u52a0 ",(0,o.kt)("inlineCode",{parentName:"h2"},"Furion")," \u4f9d\u8d56\u5305"),(0,o.kt)("img",{src:(0,a.Z)("img/rm4.png")}),(0,o.kt)("h2",{id:"23-furion-\u57fa\u672c\u914d\u7f6e"},"2.3 ",(0,o.kt)("inlineCode",{parentName:"h2"},"Furion")," \u57fa\u672c\u914d\u7f6e"),(0,o.kt)("h3",{id:"231-programcs-\u6dfb\u52a0-inject"},"2.3.1 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Program.cs")," \u6dfb\u52a0 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Inject()")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {18}",showLineNumbers:!0,"":!0,"{18}":!0},"using Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Hosting;\n\nnamespace FurionStart\n{\n public class Program\n {\n public static void Main(string[] args)\n {\n CreateHostBuilder(args).Build().Run();\n }\n\n public static IHostBuilder CreateHostBuilder(string[] args) =>\n Host.CreateDefaultBuilder(args)\n .ConfigureWebHostDefaults(webBuilder =>\n {\n webBuilder\n .Inject() // \u6dfb\u52a0\u8fd9\u4e00\u884c\n .UseStartup();\n });\n }\n}\n")),(0,o.kt)("h3",{id:"232-\u5728-startupcs-\u4e2d\u6dfb\u52a0\u4e24\u4e2a-inject"},"2.3.2 \u5728 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Startup.cs")," \u4e2d\u6dfb\u52a0\u4e24\u4e2a ",(0,o.kt)("inlineCode",{parentName:"h3"},"Inject()")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {20,37}",showLineNumbers:!0,"":!0,"{20,37}":!0},"using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace FurionStart\n{\n public class Startup\n {\n public Startup(IConfiguration configuration)\n {\n Configuration = configuration;\n }\n\n public IConfiguration Configuration { get; }\n\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddControllers().AddInject(); // \u6dfb\u52a0 AddInject();\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n if (env.IsDevelopment())\n {\n app.UseDeveloperExceptionPage();\n }\n\n app.UseHttpsRedirection();\n\n app.UseRouting();\n\n app.UseAuthorization();\n\n // \u6dfb\u52a0\u8fd9\u4e00\u884c\uff0c\u5982\u679c\u662f MVC\u548cAPI\u5171\u5b58\u9879\u76ee\uff0c\u65e0\u9700\u6dfb\u52a0 string.Empty\n app.UseInject(string.Empty);\n\n app.UseEndpoints(endpoints =>\n {\n endpoints.MapControllers();\n });\n }\n }\n}\n")),(0,o.kt)("admonition",{title:"\u5c0f\u63d0\u9192",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u5982\u679c ",(0,o.kt)("inlineCode",{parentName:"p"},"app.UseInject()")," \u4e0d\u8f93\u5165\u53c2\u6570\uff0c\u5219\u9ed8\u8ba4\u5730\u5740\u4e3a ",(0,o.kt)("inlineCode",{parentName:"p"},"/api"),"\uff0c\u5982\u679c\u8f93\u5165 ",(0,o.kt)("inlineCode",{parentName:"p"},"string.Empty")," \u5219\u4e3a ",(0,o.kt)("inlineCode",{parentName:"p"},"/")," \u76ee\u5f55\u3002\u5982\u679c\u8f93\u5165\u4efb\u610f\u5b57\u7b26\u4e32\uff0c\u5219\u4e3a ",(0,o.kt)("inlineCode",{parentName:"p"},"/\u4efb\u610f\u5b57\u7b26\u4e32")," \u76ee\u5f55\u3002")),(0,o.kt)("h2",{id:"24-\u542f\u52a8\u6d4f\u89c8\u5668"},"2.4 \u542f\u52a8\u6d4f\u89c8\u5668"),(0,o.kt)("p",null,"\u542f\u52a8\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u3002"),(0,o.kt)("img",{src:(0,a.Z)("img/rm5.png")}),(0,o.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019")," \u521b\u5efa\u7684\u9879\u76ee\u4f1a\u81ea\u52a8\u914d\u7f6e\u4e86\u542f\u52a8\u9875\uff0c\u5982\u679c\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"F5")," \u8fd0\u884c\uff0c\u53ef\u80fd\u4e0d\u4f1a\u81ea\u52a8\u6253\u5f00\u9996\u9875\uff0c\u8fd9\u65f6\u5019\u6211\u4eec\u53ea\u9700\u8981\u914d\u7f6e ",(0,o.kt)("inlineCode",{parentName:"p"},"launchSettings.json")," \u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"launchUrl")," \u5373\u53ef\uff1a"),(0,o.kt)("img",{src:(0,a.Z)("img/rm6.png")})))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/7dc3064a.4f688025.js b/handbook/build/assets/js/7dc3064a.4f688025.js new file mode 100644 index 00000000000..3c805fa5fea --- /dev/null +++ b/handbook/build/assets/js/7dc3064a.4f688025.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2244],{1299:function(t){t.exports=JSON.parse('{"permalink":"/blog/tags/httpcontext","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/7dd08b1c.bc36c6ea.js b/handbook/build/assets/js/7dd08b1c.bc36c6ea.js new file mode 100644 index 00000000000..5f184a81c5a --- /dev/null +++ b/handbook/build/assets/js/7dd08b1c.bc36c6ea.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4640],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return m}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=u(n),m=o,k=d["".concat(p,".").concat(m)]||d[m]||c[m]||i;return n?r.createElement(k,a(a({ref:t},s),{},{components:n})):r.createElement(k,a({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var u=2;u.NET 6 Preview 6 SDK",id:"\u5b89\u88c5-net-6-preview-6-sdk",level:2},{value:"\u65e7\u9879\u76ee\u5347\u7ea7",id:"\u65e7\u9879\u76ee\u5347\u7ea7",level:2},{value:"\u65b0\u9879\u76ee\u4f7f\u7528",id:"\u65b0\u9879\u76ee\u4f7f\u7528",level:2},{value:"\u5347\u7ea7 Visual Studio 2019",id:"\u5347\u7ea7-visual-studio-2019",level:3},{value:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",level:3},{value:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",level:3}],d={toc:c};function m(e){var t=e.components,n=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"2021 \u5e74 07 \u6708 15 \u65e5\uff0c\u5fae\u8f6f\u53d1\u5e03\u4e86 ",(0,i.kt)("inlineCode",{parentName:"strong"},".NET 6 Preview 6")," \u7248\u672c\uff0c",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion")," \u5728\u5f53\u5929\u7b2c\u4e00\u65f6\u95f4\u9002\u914d\u4e86\u8be5\u7248\u672c\uff0c\u5e76\u53d1\u5e03 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion v3.0.0-rc.1")," \u7248\u672c\u3002")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/tree/3.0.0-rc.1/"},"Furion .NET 6 Preview 6 \u6e90\u7801\u5730\u5740")),(0,i.kt)("h2",{id:"\u5b89\u88c5-net-6-preview-6-sdk"},"\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"h2"},".NET 6 Preview 6 SDK")),(0,i.kt)("p",null,"\u5c1d\u9c9c\u4e4b\u524d\uff0c\u9996\u5148\u5148\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 6 SDK"),"\uff0c\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://dotnet.microsoft.com/download/dotnet/6.0"},"https://dotnet.microsoft.com/download/dotnet/6.0")),(0,i.kt)("p",null,"\u4e0b\u8f7d\u5bf9\u5e94\u7cfb\u7edf\u548c\u5904\u7406\u5668\u7248\u672c\u5373\u53ef\u3002"),(0,i.kt)("h2",{id:"\u65e7\u9879\u76ee\u5347\u7ea7"},"\u65e7\u9879\u76ee\u5347\u7ea7"),(0,i.kt)("p",null,"\u7f16\u8f91\u6240\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},".csproj")," \u9879\u76ee\uff0c\u4fee\u6539 ",(0,i.kt)("inlineCode",{parentName:"p"},"net5.0")," \u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"net6.0"),"\u3002"),(0,i.kt)("p",null,"\u540c\u65f6\u5347\u7ea7\u6240\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},"Microsoft")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u5305\u4e3a\u6700\u65b0\u7248\u672c\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6700\u65b0\u7248\u672c\u4e3a\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"v3.0.0-rc.1"),"\u3002"),(0,i.kt)("h2",{id:"\u65b0\u9879\u76ee\u4f7f\u7528"},"\u65b0\u9879\u76ee\u4f7f\u7528"),(0,i.kt)("h3",{id:"\u5347\u7ea7-visual-studio-2019"},"\u5347\u7ea7 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Visual Studio 2019")),(0,i.kt)("p",null,"\u76ee\u524d ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 6")," \u652f\u6301\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview 16.11.0 Preview 3.0")," \u7248\u672c\uff0c",(0,i.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u662f ",(0,i.kt)("inlineCode",{parentName:"strong"},"Preview")," \u6700\u65b0\u7248\u672c"),"\u3002\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16"},"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16")),(0,i.kt)("p",null,"\u5df2\u7ecf\u5b89\u88c5\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview")," \u7248\u672c\u7684\u670b\u53cb\u76f4\u63a5\u5347\u7ea7\u5230\u6700\u65b0\u7248\u5373\u53ef\u3002"),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio Code")," \u5f00\u53d1\uff0c\u53ef\u5ffd\u7565\u6b64\u9009\u9879\u3002")),(0,i.kt)("h3",{id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"},"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion v3.0.0-rc.1")," \u76ee\u524d\u63d0\u4f9b\u4e86\u6240\u6709\u7c7b\u578b\u7684\u811a\u624b\u67b6\uff0c\u7248\u672c\u53f7\u7edf\u4e00 ",(0,i.kt)("inlineCode",{parentName:"p"},"3.0.0-rc.1"),"\u3002"),(0,i.kt)("p",null,"\u5b89\u88c5\u811a\u624b\u67b6\uff0c\u6253\u5f00 ",(0,i.kt)("inlineCode",{parentName:"p"},"CMD/Powershell")," \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new --install Furion.Template.Api::3.0.0-rc.1\n")),(0,i.kt)("p",null,"\u521b\u5efa\u9879\u76ee"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new furionapi -n FurionNET6\n")),(0,i.kt)("h3",{id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"},"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"),(0,i.kt)("p",null,"\u6253\u5f00\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u5373\u53ef\u3002"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/800036d7.40087786.js b/handbook/build/assets/js/800036d7.40087786.js new file mode 100644 index 00000000000..0fc600b2ec0 --- /dev/null +++ b/handbook/build/assets/js/800036d7.40087786.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7350],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return m}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=u(n),m=o,k=d["".concat(p,".").concat(m)]||d[m]||c[m]||i;return n?r.createElement(k,a(a({ref:t},s),{},{components:n})):r.createElement(k,a({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var u=2;u.NET 6 Preview 6 SDK",id:"\u5b89\u88c5-net-6-preview-6-sdk",level:2},{value:"\u65e7\u9879\u76ee\u5347\u7ea7",id:"\u65e7\u9879\u76ee\u5347\u7ea7",level:2},{value:"\u65b0\u9879\u76ee\u4f7f\u7528",id:"\u65b0\u9879\u76ee\u4f7f\u7528",level:2},{value:"\u5347\u7ea7 Visual Studio 2019",id:"\u5347\u7ea7-visual-studio-2019",level:3},{value:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",level:3},{value:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",level:3}],d={toc:c};function m(e){var t=e.components,n=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"2021 \u5e74 07 \u6708 15 \u65e5\uff0c\u5fae\u8f6f\u53d1\u5e03\u4e86 ",(0,i.kt)("inlineCode",{parentName:"strong"},".NET 6 Preview 6")," \u7248\u672c\uff0c",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion")," \u5728\u5f53\u5929\u7b2c\u4e00\u65f6\u95f4\u9002\u914d\u4e86\u8be5\u7248\u672c\uff0c\u5e76\u53d1\u5e03 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion v3.0.0-rc.1")," \u7248\u672c\u3002")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/tree/3.0.0-rc.1/"},"Furion .NET 6 Preview 6 \u6e90\u7801\u5730\u5740")),(0,i.kt)("h2",{id:"\u5b89\u88c5-net-6-preview-6-sdk"},"\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"h2"},".NET 6 Preview 6 SDK")),(0,i.kt)("p",null,"\u5c1d\u9c9c\u4e4b\u524d\uff0c\u9996\u5148\u5148\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 6 SDK"),"\uff0c\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://dotnet.microsoft.com/download/dotnet/6.0"},"https://dotnet.microsoft.com/download/dotnet/6.0")),(0,i.kt)("p",null,"\u4e0b\u8f7d\u5bf9\u5e94\u7cfb\u7edf\u548c\u5904\u7406\u5668\u7248\u672c\u5373\u53ef\u3002"),(0,i.kt)("h2",{id:"\u65e7\u9879\u76ee\u5347\u7ea7"},"\u65e7\u9879\u76ee\u5347\u7ea7"),(0,i.kt)("p",null,"\u7f16\u8f91\u6240\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},".csproj")," \u9879\u76ee\uff0c\u4fee\u6539 ",(0,i.kt)("inlineCode",{parentName:"p"},"net5.0")," \u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"net6.0"),"\u3002"),(0,i.kt)("p",null,"\u540c\u65f6\u5347\u7ea7\u6240\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},"Microsoft")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u5305\u4e3a\u6700\u65b0\u7248\u672c\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6700\u65b0\u7248\u672c\u4e3a\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"v3.0.0-rc.1"),"\u3002"),(0,i.kt)("h2",{id:"\u65b0\u9879\u76ee\u4f7f\u7528"},"\u65b0\u9879\u76ee\u4f7f\u7528"),(0,i.kt)("h3",{id:"\u5347\u7ea7-visual-studio-2019"},"\u5347\u7ea7 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Visual Studio 2019")),(0,i.kt)("p",null,"\u76ee\u524d ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 6")," \u652f\u6301\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview 16.11.0 Preview 3.0")," \u7248\u672c\uff0c",(0,i.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u662f ",(0,i.kt)("inlineCode",{parentName:"strong"},"Preview")," \u6700\u65b0\u7248\u672c"),"\u3002\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16"},"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16")),(0,i.kt)("p",null,"\u5df2\u7ecf\u5b89\u88c5\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview")," \u7248\u672c\u7684\u670b\u53cb\u76f4\u63a5\u5347\u7ea7\u5230\u6700\u65b0\u7248\u5373\u53ef\u3002"),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio Code")," \u5f00\u53d1\uff0c\u53ef\u5ffd\u7565\u6b64\u9009\u9879\u3002")),(0,i.kt)("h3",{id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"},"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion v3.0.0-rc.1")," \u76ee\u524d\u63d0\u4f9b\u4e86\u6240\u6709\u7c7b\u578b\u7684\u811a\u624b\u67b6\uff0c\u7248\u672c\u53f7\u7edf\u4e00 ",(0,i.kt)("inlineCode",{parentName:"p"},"3.0.0-rc.1"),"\u3002"),(0,i.kt)("p",null,"\u5b89\u88c5\u811a\u624b\u67b6\uff0c\u6253\u5f00 ",(0,i.kt)("inlineCode",{parentName:"p"},"CMD/Powershell")," \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new --install Furion.Template.Api::3.0.0-rc.1\n")),(0,i.kt)("p",null,"\u521b\u5efa\u9879\u76ee"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new furionapi -n FurionNET6\n")),(0,i.kt)("h3",{id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"},"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"),(0,i.kt)("p",null,"\u6253\u5f00\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u5373\u53ef\u3002"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/814f3328.71f09e5a.js b/handbook/build/assets/js/814f3328.71f09e5a.js new file mode 100644 index 00000000000..5f054f4c6c1 --- /dev/null +++ b/handbook/build/assets/js/814f3328.71f09e5a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2535],{5641:function(e){e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"7. GlobalUsings \u7684\u4f7f\u7528","permalink":"/blog/global-usings"},{"title":"6. .NET 6 Preview 7 \u5c1d\u9c9c","permalink":"/blog/net6-preview7"},{"title":"5. \u5728\u63a7\u5236\u53f0\u4e2d\u4f7f\u7528","permalink":"/blog/console"},{"title":"4. .NET 6 Preview 6 \u5c1d\u9c9c","permalink":"/blog/net6-preview6"},{"title":"3. .NET 6 Preview 5 \u5c1d\u9c9c","permalink":"/blog/net6-preview5"}]}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/8443.7661c11e.js b/handbook/build/assets/js/8443.7661c11e.js new file mode 100644 index 00000000000..fab5ebc346c --- /dev/null +++ b/handbook/build/assets/js/8443.7661c11e.js @@ -0,0 +1,2 @@ +/*! For license information please see 8443.7661c11e.js.LICENSE.txt */ +(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8443],{8443:function(t,e,n){"use strict";t.exports=n(295)},1228:function(t,e,n){"use strict";var i=n(2856),s={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(s.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&i.isMsie()<=7&&i.mixin(s.input,{marginTop:"-1px"}),t.exports=s},9050:function(t,e,n){"use strict";var i="aaDataset",s="aaValue",r="aaDatum",o=n(2856),a=n(4910),u=n(3561),c=n(1228),l=n(3109);function h(t){var e;(t=t||{}).templates=t.templates||{},t.source||o.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&o.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?o.getUniqueId():t.name,this.source=t.source,this.displayFn=function(t){return t=t||"value",o.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=function(t,e){return{empty:t.empty&&o.templatify(t.empty),header:t.header&&o.templatify(t.header),footer:t.footer&&o.templatify(t.footer),suggestion:t.suggestion||n};function n(t){return"

"+e(t)+"

"}}(t.templates,this.displayFn),this.css=o.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=o.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(n+"-"+this.name).length>0?a.element(t.$menu.find(n+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(t){return a.element(t).data(i)},h.extractValue=function(t){return a.element(t).data(s)},h.extractDatum=function(t){var e=a.element(t).data(r);return"string"==typeof e&&(e=JSON.parse(e)),e},o.mixin(h.prototype,l,{_render:function(t,e){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(h.apply(this,l)).prepend(c.templates.header?f.apply(this,l):null).append(c.templates.footer?d.apply(this,l):null);else if(n)this.$el.html(p.apply(this,l)).prepend(c.templates.header?f.apply(this,l):null).append(c.templates.footer?d.apply(this,l):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),c.templates.empty.apply(this,e)}function p(){var t,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=a.element(p).css(this.css.suggestions),n=o.map(e,f),t.append.apply(t,n),t;function f(t){var e,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(e=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[t].concat(l)))).data(i,c.name),e.data(s,c.displayFn(t)||void 0),e.data(r,JSON.stringify(t)),e.children().each((function(){a.element(this).css(h.css.suggestionChild)})),e}}function f(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.header.apply(this,e)}function d(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(t,e.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,i()}),this.debounce)}else i()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=h},3354:function(t,e,n){"use strict";var i=n(2856),s=n(4910),r=n(3109),o=n(9050),a=n(1228);function u(t){var e,n,r,o=this;(t=t||{}).menu||i.error("menu is required"),i.isArray(t.datasets)||i.isObject(t.datasets)||i.error("1 or more datasets required"),t.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=i.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=i.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),r=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=s.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,r).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=i.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=i.templatify(t.templates.empty),this.$empty=s.element('
'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(i.mixin({$menu:t,cssClasses:n},e))}(o.$menu,e,t.cssClasses)})),i.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&o.$menu.append(e),t.onSync("rendered",o._onRendered,o)})),t.templates&&t.templates.footer&&(this.templates.footer=i.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;s.element(window).resize((function(){l._redraw()}))}i.mixin(u.prototype,r,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",s.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=s.element(t.currentTarget);if(!e.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){if(t.relatedTarget&&s.element(t.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){if(this.isEmpty=i.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,i,s;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!==(i=((i=e.index(n)+t)+1)%(e.length+1)-1)?(i<-1&&(i=e.length-1),this._setCursor(s=e.eq(i),!0),this._ensureVisible(s)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,i,s;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),i=this.$menu.scrollTop(),s=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(i+e):s',dropdown:'',dataset:'
',suggestions:'',suggestion:'
'}},2534:function(t,e,n){"use strict";var i;i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var s=n(2856),r=n(4910),o=n(3109);function a(t){var e,n,o,a,u,c=this;(t=t||{}).input||s.error("input is missing"),e=s.bind(this._onBlur,this),n=s.bind(this._onFocus,this),o=s.bind(this._onKeydown,this),a=s.bind(this._onInput,this),this.$hint=r.element(t.hint),this.$input=r.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=s.noop),s.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){i[t.which||t.keyCode]||s.defer(s.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,r.element('').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},s.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=i[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,i,s;switch(t){case"tab":i=this.getHint(),s=this.getInputValue(),n=i&&i!==s&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;if("tab"===t)n=!u(e);else n=!0;return n},_checkInputValue:function(){var t,e,n,i,s;t=this.getInputValue(),i=t,s=this.query,n=!(!(e=a.normalizeQuery(i)===a.normalizeQuery(s))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,s.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},6549:function(t,e,n){"use strict";var i="aaAttrs",s=n(2856),r=n(4910),o=n(50),a=n(2534),u=n(3354),c=n(3561),l=n(1228);function h(t){var e,n;if((t=t||{}).input||s.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=s.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=s.mixin({},l,t.appendTo?l.appendTo:{}),this.cssClasses=t.cssClasses=s.mixin({},l.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=s.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",s.getUniqueId()].join("-");var a=function(t){var e,n,o,a;e=r.element(t.input),n=r.element(c.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=r.element(u).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(s.templatify(t.templates.dropdownMenu)());(a=e.clone().css(t.css.hint).css(function(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}(e))).val("").addClass(s.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();e.data(i,{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(s.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(l){}return(n=t.appendTo?n.appendTo(r.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent()).prepend(t.hint?a:null).append(o),{wrapper:n,input:e,hint:a,menu:o}}(t);this.$node=a.wrapper;var u=this.$input=a.input;e=a.menu,n=a.hint,t.dropdownMenuContainer&&r.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),u.on("blur.aa",(function(t){var n=document.activeElement;s.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),s.defer((function(){u.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}s.mixin(h.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];s.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),r.element(document).keydown((function(t){var i=t.target||t.srcElement,s=i.tagName;if(!i.isContentEditable&&"INPUT"!==s&&"SELECT"!==s&&"TEXTAREA"!==s){var r=t.which||t.keyCode;-1!==n.indexOf(r)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var i=t.left-e.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,i;n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion();var s={selectionMethod:"enterKey"};n?(this._select(n,s),e.preventDefault()):this.autoselect&&i&&(this._select(i,s),e.preventDefault())},_onTabKeyed:function(t,e){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,r;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=a.normalizeQuery(e),i=s.escapeRegExChars(n),(r=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+r[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,i,s;e=this.input.getHint(),n=this.input.getQuery(),i=t||this.input.isCursorAtEnd(),e&&n!==e&&i&&((s=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(s.value),this.eventBus.trigger("autocompleted",s.raw,s.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),s.defer(s.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=s.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(t,e){var n=t.find(s.className(e.prefix,e.input));s.each(n.data(i),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(s.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(i);t.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(8840),t.exports=h},4910:function(t){"use strict";t.exports={element:null}},6177:function(t){"use strict";t.exports=function(t){var e=t.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},2856:function(t,e,n){"use strict";var i,s=n(8820),r=n(4910);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,i){t&&(n.isArray(t)?e[i]=[].concat(t):n.isObject(t)&&(e[i]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(i,s){n&&(n=e.call(null,i,s,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(i,s){if(e.call(null,i,s,t))return n=!0,!1})),n):n},getUniqueId:(i=0,function(){return i++}),templatify:function(t){if(this.isFunction(t))return t;var e=r.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return n?t+e:"."+s(t+e,{isIdentifier:!0})},escapeHighlightedString:function(t,e,n){e=e||"";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var r=document.createElement("div");return r.appendChild(document.createTextNode(t)),r.innerHTML.replace(RegExp(o(i.innerHTML),"g"),e).replace(RegExp(o(s.innerHTML),"g"),n)}}},9983:function(t,e,n){"use strict";var i=n(2856),s=n(533),r=n(6177);var o,a,u=(o=[],a=window.Promise.resolve(),function(t,e){return function(n,s){(function(t,e){return window.Promise.resolve().then((function(){return o.length&&(a=t.search(o),o=[]),a})).then((function(t){if(t)return t.results[e]}))})(t.as,o.push({indexName:t.indexName,query:n,params:e})-1).then((function(t){t&&s(t.hits,t)})).catch((function(t){i.error(t.message)}))}});t.exports=function(t,e){var n=r(t.as._ua);if(n&&n[0]>=3&&n[1]>20){var i="autocomplete.js "+s;-1===t.as._ua.indexOf(i)&&(t.as._ua+="; "+i)}return u(t,e)}},8840:function(t,e,n){"use strict";t.exports={hits:n(9983),popularIn:n(4445)}},4445:function(t,e,n){"use strict";var i=n(2856),s=n(533),r=n(6177);t.exports=function(t,e,n,o){var a=r(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+s),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){t.search(a,e,(function(t,a){if(t)i.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var f=r(c.as._ua);return f&&f[0]>=3&&f[1]>20&&(e.additionalUA="autocomplete.js "+s),void c.search(u(h),p,(function(t,e){if(t)i.error(t.message);else{var n=[];if(o.includeAll){var s=o.allTitle||"All departments";n.push(i.mixin({facet:{value:s,count:e.nbHits}},i.cloneDeep(h)))}i.each(e.facets,(function(t,e){i.each(t,(function(t,s){n.push(i.mixin({facet:{facet:e,value:s,count:t}},i.cloneDeep(h)))}))}));for(var r=1;r]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,w=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],C=["after","prepend","before","append"],x=h.createElement("table"),_=h.createElement("tr"),S={tr:h.createElement("tbody"),tbody:x,thead:x,tfoot:x,td:_,th:_,"*":h.createElement("div")},E=/complete|loaded|interactive/,A=/^[\w-]*$/,$={},T=$.toString,O={},D=h.createElement("div"),N={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},k=Array.isArray||function(t){return t instanceof Array};function I(t){return null==t?String(t):$[T.call(t)]||"object"}function P(t){return"function"==I(t)}function L(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function F(t){return"object"==I(t)}function R(t){return F(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,n=i.type(t);return"function"!=n&&!L(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function V(t){return c.call(t,(function(t){return null!=t}))}function H(t){return t.length>0?i.fn.concat.apply([],t):t}function B(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function K(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function j(t,e){return"number"!=typeof e||d[B(t)]?e:e+"px"}function z(t){var e,n;return p[t]||(e=h.createElement(t),h.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),p[t]=n),p[t]}function U(t){return"children"in t?l.call(t.children):i.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function Q(t,e){var n,i=t?t.length:0;for(n=0;n")),n===e&&(n=g.test(t)&&RegExp.$1),n in S||(n="*"),(a=S[n]).innerHTML=""+t,r=i.each(l.call(a.childNodes),(function(){a.removeChild(this)}))),R(s)&&(o=i(r),i.each(s,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),r},O.Z=function(t,e){return new Q(t,e)},O.isZ=function(t){return t instanceof O.Z},O.init=function(t,n){var s;if(!t)return O.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))s=O.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}else{if(P(t))return i(h).ready(t);if(O.isZ(t))return t;if(k(t))s=V(t);else if(F(t))s=[t],t=null;else if(g.test(t))s=O.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}}return O.Z(s,t)},(i=function(t,e){return O.init(t,e)}).extend=function(t){var e,n=l.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){W(t,n,e)})),t},O.qsa=function(t,e){var n,i="#"==e[0],s=!i&&"."==e[0],r=i||s?e.slice(1):e,o=A.test(r);return t.getElementById&&o&&i?(n=t.getElementById(r))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:l.call(o&&!i&&t.getElementsByClassName?s?t.getElementsByClassName(r):t.getElementsByTagName(e):t.querySelectorAll(e))},i.contains=h.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},i.type=I,i.isFunction=P,i.isWindow=L,i.isArray=k,i.isPlainObject=R,i.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},i.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},i.inArray=function(t,e,n){return a.indexOf.call(e,t,n)},i.camelCase=r,i.trim=function(t){return null==t?"":String.prototype.trim.call(t)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(t,e){var n,i,s,r=[];if(q(t))for(i=0;i=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return a.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return P(t)?this.not(this.not(t)):i(c.call(this,(function(e){return O.matches(e,t)})))},add:function(t,e){return i(o(this.concat(i(t,e))))},is:function(t){return this.length>0&&O.matches(this[0],t)},not:function(t){var n=[];if(P(t)&&t.call!==e)this.each((function(e){t.call(this,e)||n.push(this)}));else{var s="string"==typeof t?this.filter(t):q(t)&&P(t.item)?l.call(t):i(t);this.forEach((function(t){s.indexOf(t)<0&&n.push(t)}))}return i(n)},has:function(t){return this.filter((function(){return F(t)?i.contains(this,t):i(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!F(t)?t:i(t)},last:function(){var t=this[this.length-1];return t&&!F(t)?t:i(t)},find:function(t){var e=this;return t?"object"==typeof t?i(t).filter((function(){var t=this;return a.some.call(e,(function(e){return i.contains(e,t)}))})):1==this.length?i(O.qsa(this[0],t)):this.map((function(){return O.qsa(this,t)})):i()},closest:function(t,e){var n=[],s="object"==typeof t&&i(t);return this.each((function(i,r){for(;r&&!(s?s.indexOf(r)>=0:O.matches(r,t));)r=r!==e&&!M(r)&&r.parentNode;r&&n.indexOf(r)<0&&n.push(r)})),i(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=i.map(n,(function(t){if((t=t.parentNode)&&!M(t)&&e.indexOf(t)<0)return e.push(t),t}));return Z(e,t)},parent:function(t){return Z(o(this.pluck("parentNode")),t)},children:function(t){return Z(this.map((function(){return U(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||l.call(this.childNodes)}))},siblings:function(t){return Z(this.map((function(t,e){return c.call(U(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return i.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=z(this.nodeName))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=P(t);if(this[0]&&!e)var n=i(t).get(0),s=n.parentNode||this.length>1;return this.each((function(r){i(this).wrapAll(e?t.call(this,r):s?n.cloneNode(!0):n)}))},wrapAll:function(t){if(this[0]){var e;for(i(this[0]).before(t=i(t));(e=t.children()).length;)t=e.first();i(t).append(this)}return this},wrapInner:function(t){var e=P(t);return this.each((function(n){var s=i(this),r=s.contents(),o=e?t.call(this,n):t;r.length?r.wrapAll(o):s.append(o)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var n=i(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()}))},prev:function(t){return i(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return i(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;i(this).empty().append(X(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=X(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,i){var s;return"string"!=typeof t||1 in arguments?this.each((function(e){if(1===this.nodeType)if(F(t))for(n in t)G(this,n,t[n]);else G(this,t,X(this,i,e,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(s=this[0].getAttribute(t))?s:e},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){G(this,t)}),this)}))},prop:function(t,e){return t=N[t]||t,1 in arguments?this.each((function(n){this[t]=X(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=N[t]||t,this.each((function(){delete this[t]}))},data:function(t,n){var i="data-"+t.replace(w,"-$1").toLowerCase(),s=1 in arguments?this.attr(i,n):this.attr(i);return null!==s?Y(s):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=X(this,t,e,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=i(this),s=X(this,e,t,n.offset()),r=n.offsetParent().offset(),o={top:s.top-r.top,left:s.left-r.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var s=this[0];if("string"==typeof t){if(!s)return;return s.style[r(t)]||getComputedStyle(s,"").getPropertyValue(t)}if(k(t)){if(!s)return;var o={},a=getComputedStyle(s,"");return i.each(t,(function(t,e){o[e]=s.style[r(e)]||a.getPropertyValue(e)})),o}}var u="";if("string"==I(t))e||0===e?u=B(t)+":"+j(t,e):this.each((function(){this.style.removeProperty(B(t))}));else for(n in t)t[n]||0===t[n]?u+=B(n)+":"+j(n,t[n])+";":this.each((function(){this.style.removeProperty(B(n))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(i(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&a.some.call(this,(function(t){return this.test(J(t))}),K(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){s=[];var n=J(this);X(this,t,e,n).split(/\s+/g).forEach((function(t){i(this).hasClass(t)||s.push(t)}),this),s.length&&J(this,n+(n?" ":"")+s.join(" "))}})):this},removeClass:function(t){return this.each((function(n){if("className"in this){if(t===e)return J(this,"");s=J(this),X(this,t,n,s).split(/\s+/g).forEach((function(t){s=s.replace(K(t)," ")})),J(this,s.trim())}}))},toggleClass:function(t,n){return t?this.each((function(s){var r=i(this);X(this,t,s,J(this)).split(/\s+/g).forEach((function(t){(n===e?!r.hasClass(t):n)?r.addClass(t):r.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),s=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(i(t).css("margin-top"))||0,n.left-=parseFloat(i(t).css("margin-left"))||0,s.top+=parseFloat(i(e[0]).css("border-top-width"))||0,s.left+=parseFloat(i(e[0]).css("border-left-width"))||0,{top:n.top-s.top,left:n.left-s.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||h.body;t&&!y.test(t.nodeName)&&"static"==i(t).css("position");)t=t.offsetParent;return t}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(t){var n=t.replace(/./,(function(t){return t[0].toUpperCase()}));i.fn[t]=function(s){var r,o=this[0];return s===e?L(o)?o["inner"+n]:M(o)?o.documentElement["scroll"+n]:(r=this.offset())&&r[t]:this.each((function(e){(o=i(this)).css(t,X(this,s,e,o[t]()))}))}})),C.forEach((function(n,s){var r=s%2;i.fn[n]=function(){var n,o,a=i.map(arguments,(function(t){var s=[];return"array"==(n=I(t))?(t.forEach((function(t){return t.nodeType!==e?s.push(t):i.zepto.isZ(t)?s=s.concat(t.get()):void(s=s.concat(O.fragment(t)))})),s):"object"==n||null==t?t:O.fragment(t)})),u=this.length>1;return a.length<1?this:this.each((function(e,n){o=r?n:n.parentNode,n=0==s?n.nextSibling:1==s?n.firstChild:2==s?n:null;var c=i.contains(h.documentElement,o);a.forEach((function(e){if(u)e=e.cloneNode(!0);else if(!o)return i(e).remove();o.insertBefore(e,n),c&&tt(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},i.fn[r?n+"To":"insert"+(s?"Before":"After")]=function(t){return i(t)[n](this),this}})),O.Z.prototype=Q.prototype=i.fn,O.uniq=o,O.deserializeValue=Y,i.zepto=O,i}();return function(e){var n,i=1,s=Array.prototype.slice,r=e.isFunction,o=function(t){return"string"==typeof t},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(t){return t._zid||(t._zid=i++)}function f(t,e,n,i){if((e=d(e)).ns)var s=g(e.ns);return(a[p(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!n||p(t.fn)===p(n))&&(!i||t.sel==i)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function g(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!c&&t.e in l||!!e}function v(t){return h[t]||c&&l[t]||t}function y(t,i,s,r,o,u,c){var l=p(t),f=a[l]||(a[l]=[]);i.split(/\s/).forEach((function(i){if("ready"==i)return e(document).ready(s);var a=d(i);a.fn=s,a.sel=o,a.e in h&&(s=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||s;a.proxy=function(e){if(!(e=S(e)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(e,"data");i&&!i.writable||(e.data=r)}catch(e){}var s=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===s&&(e.preventDefault(),e.stopPropagation()),s}},a.i=f.length,f.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,m(a,c))}))}function w(t,e,n,i,s){var r=p(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,i).forEach((function(e){delete a[r][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,m(e,s))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:w},e.proxy=function(t,n){var i=2 in arguments&&s.call(arguments,2);if(r(t)){var a=function(){return t.apply(n,i?i.concat(s.call(arguments)):arguments)};return a._zid=p(t),a}if(o(n))return i?(i.unshift(t[n],t),e.proxy.apply(null,i)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var b=function(){return!0},C=function(){return!1},x=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function S(t,i){if(i||!t.isDefaultPrevented){i||(i=t),e.each(_,(function(e,n){var s=i[e];t[e]=function(){return this[n]=b,s&&s.apply(i,arguments)},t[n]=C}));try{t.timeStamp||(t.timeStamp=Date.now())}catch(s){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(t.isDefaultPrevented=b)}return t}function E(t){var e,i={originalEvent:t};for(e in t)x.test(e)||t[e]===n||(i[e]=t[e]);return S(i,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,i,a,u,c){var l,h,p=this;return t&&!o(t)?(e.each(t,(function(t,e){p.on(t,i,a,e,c)})),p):(o(i)||r(u)||!1===u||(u=a,a=i,i=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=C),p.each((function(n,r){c&&(l=function(t){return w(r,t.type,u),u.apply(this,arguments)}),i&&(h=function(t){var n,o=e(t.target).closest(i,r).get(0);if(o&&o!==r)return n=e.extend(E(t),{currentTarget:o,liveFired:r}),(l||u).apply(o,[n].concat(s.call(arguments,1)))}),y(r,t,u,a,i,h||l)})))},e.fn.off=function(t,i,s){var a=this;return t&&!o(t)?(e.each(t,(function(t,e){a.off(t,i,e)})),a):(o(i)||r(s)||!1===s||(s=i,i=n),!1===s&&(s=C),a.each((function(){w(this,t,s,i)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):S(t))._args=n,this.each((function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var i,s;return this.each((function(r,a){(i=E(o(t)?e.Event(t):t))._args=n,i.target=a,e.each(f(a,t.type||t),(function(t,e){if(s=e.proxy(i),i.isImmediatePropagationStopped())return!1}))})),s},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(u[t]||"Events"),i=!0;if(e)for(var s in e)"bubbles"==s?i=!!e[s]:n[s]=e[s];return n.initEvent(t,i,!0),S(n)}}(i),n=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,i=t.camelCase,s=t.expando="Zepto"+ +new Date,r=[];function o(r,o){var u=r[s],c=u&&e[u];if(void 0===o)return c||a(r);if(c){if(o in c)return c[o];var l=i(o);if(l in c)return c[l]}return n.call(t(r),o)}function a(n,r,o){var a=n[s]||(n[s]=++t.uuid),c=e[a]||(e[a]=u(n));return void 0!==r&&(c[i(r)]=o),c}function u(e){var n={};return t.each(e.attributes||r,(function(e,s){0==s.name.indexOf("data-")&&(n[i(s.name.replace("data-",""))]=t.zepto.deserializeValue(s.value))})),n}t.fn.data=function(e,n){return void 0===n?t.isPlainObject(e)?this.each((function(n,i){t.each(e,(function(t,e){a(i,t,e)}))})):0 in this?o(this[0],e):void 0:this.each((function(){a(this,e,n)}))},t.data=function(e,n,i){return t(e).data(n,i)},t.hasData=function(n){var i=n[s],r=i&&e[i];return!!r&&!t.isEmptyObject(r)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var r=this[s],o=r&&e[r];o&&t.each(n||o,(function(t){delete o[n?i(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(i),i}(e)},8820:function(t){"use strict";var e={}.hasOwnProperty,n=/[ -,\.\/:-@\[-\^`\{-~]/,i=/[ -,\.\/:-@\[\]\^`\{-~]/,s=/(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g,r=function t(r,o){"single"!=(o=function(t,n){if(!t)return n;var i={};for(var s in n)i[s]=e.call(t,s)?t[s]:n[s];return i}(o,t.options)).quotes&&"double"!=o.quotes&&(o.quotes="single");for(var a="double"==o.quotes?'"':"'",u=o.isIdentifier,c=r.charAt(0),l="",h=0,p=r.length;h126){if(d>=55296&&d<=56319&&h1)for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var p=i.createContext({}),m=function(e){var n=i.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},s=function(e){var n=m(e.components);return i.createElement(p.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},d=i.forwardRef((function(e,n){var t=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),d=m(t),k=a,c=d["".concat(p,".").concat(k)]||d[k]||u[k]||r;return t?i.createElement(c,l(l({ref:n},s),{},{components:t})):i.createElement(c,l({ref:n},s))}));function k(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=t.length,l=new Array(r);l[0]=d;var o={};for(var p in n)hasOwnProperty.call(n,p)&&(o[p]=n[p]);o.originalType=e,o.mdxType="string"==typeof e?e:a,l[1]=o;for(var m=2;m=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var u=n.createContext({}),p=function(e){var t=n.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=p(e.components);return n.createElement(u.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,u=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),d=p(r),f=o,m=d["".concat(u,".").concat(f)]||d[f]||s[f]||a;return r?n.createElement(m,i(i({ref:t},l),{},{components:r})):n.createElement(m,i({ref:t},l))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var p=2;p=0||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}var l=r.createContext({}),c=function(t){var e=r.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):p(p({},e),t)),n},s=function(t){var e=c(t.components);return r.createElement(l.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},d=r.forwardRef((function(t,e){var n=t.components,o=t.mdxType,a=t.originalType,l=t.parentName,s=i(t,["components","mdxType","originalType","parentName"]),d=c(n),m=o,h=d["".concat(l,".").concat(m)]||d[m]||u[m]||a;return n?r.createElement(h,p(p({ref:e},s),{},{components:n})):r.createElement(h,p({ref:e},s))}));function m(t,e){var n=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var a=n.length,p=new Array(a);p[0]=d;var i={};for(var l in e)hasOwnProperty.call(e,l)&&(i[l]=e[l]);i.originalType=t,i.mdxType="string"==typeof t?t:o,p[1]=i;for(var c=2;cControllerBase \u6d3e\u751f\u7c7b\u4e2d",id:"\u5728-controllerbase-\u6d3e\u751f\u7c7b\u4e2d",level:3},{value:"\u901a\u8fc7\u6ce8\u5165 IHttpContextAccessor",id:"\u901a\u8fc7\u6ce8\u5165-ihttpcontextaccessor",level:3},{value:"\u901a\u8fc7 App.HttpContext",id:"\u901a\u8fc7-apphttpcontext",level:3},{value:"HttpContext \u62d3\u5c55\u65b9\u6cd5",id:"httpcontext-\u62d3\u5c55\u65b9\u6cd5",level:2},{value:"\u83b7\u53d6\u5f53\u524d\u8bf7\u6c42\u7684\u7279\u6027",id:"\u83b7\u53d6\u5f53\u524d\u8bf7\u6c42\u7684\u7279\u6027",level:3},{value:"\u8bbe\u7f6e Swagger \u81ea\u52a8\u6388\u6743",id:"\u8bbe\u7f6e-swagger-\u81ea\u52a8\u6388\u6743",level:3},{value:"\u9000\u51fa Swagger \u6388\u6743",id:"\u9000\u51fa-swagger-\u6388\u6743",level:3},{value:"\u83b7\u53d6\u672c\u5730 IP \u5730\u5740",id:"\u83b7\u53d6\u672c\u5730-ip-\u5730\u5740",level:3},{value:"\u83b7\u53d6\u5ba2\u6237\u7aef IP \u5730\u5740",id:"\u83b7\u53d6\u5ba2\u6237\u7aef-ip-\u5730\u5740",level:3}],d={toc:u};function m(t){var e=t.components,n=(0,o.Z)(t,p);return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"httpcontext-\u91cd\u5927\u8c03\u6574"},"HttpContext \u91cd\u5927\u8c03\u6574"),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"ASP.NET")," \u7684\u65f6\u4ee3\uff0c\u6211\u4eec\u901a\u5e38\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u5168\u5c40\u9759\u6001\u7c7b\u83b7\u53d6\u8bf7\u6c42\u4e0a\u4e0b\u6587\uff0c\u4f46\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u4e2d\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u662f\u4e00\u4e2a\u975e\u9759\u6001\u7684\u62bd\u8c61\u7c7b\uff0c\u65e0\u6cd5\u624b\u52a8\u521b\u5efa\uff0c\u4e5f\u65e0\u6cd5\u901a\u8fc7\u9759\u6001\u83b7\u53d6\u3002"),(0,a.kt)("p",null,"\u867d\u7136\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u4e2d\u65e0\u6cd5\u76f4\u63a5\u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u5bf9\u8c61\u3002\u4f46\u662f\u5fae\u8f6f\u4e5f\u63d0\u4f9b\u4e86\u6ce8\u5165 ",(0,a.kt)("inlineCode",{parentName:"p"},"IHttpContextAccessor")," \u65b9\u5f0f\u83b7\u53d6\u3002"),(0,a.kt)("h2",{id:"httpcontext-\u591a\u79cd\u83b7\u53d6\u65b9\u5f0f"},"HttpContext \u591a\u79cd\u83b7\u53d6\u65b9\u5f0f"),(0,a.kt)("h3",{id:"\u5728-controllerbase-\u6d3e\u751f\u7c7b\u4e2d"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"h3"},"ControllerBase")," \u6d3e\u751f\u7c7b\u4e2d"),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"ControllerBase")," \u6d3e\u751f\u7c7b\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u5c5e\u6027\u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u5bf9\u8c61\u3002"),(0,a.kt)("h3",{id:"\u901a\u8fc7\u6ce8\u5165-ihttpcontextaccessor"},"\u901a\u8fc7\u6ce8\u5165 ",(0,a.kt)("inlineCode",{parentName:"h3"},"IHttpContextAccessor")),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u9ed8\u8ba4\u5df2\u7ecf\u6ce8\u518c\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"IHttpContextAccessor")," \u670d\u52a1\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6784\u9020\u51fd\u6570\u6ce8\u5165\u8be5\u5bf9\u8c61\u83b7\u53d6\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,5}",showLineNumbers:!0,"":!0,"{3,5}":!0},"public class AppService\n{\n public AppService(IHttpContextAccessor httpContextAccessor)\n {\n var httpContext = httpContextAccessor.HttpContext;\n }\n}\n")),(0,a.kt)("h3",{id:"\u901a\u8fc7-apphttpcontext"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"h3"},"App.HttpContext")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"App")," \u9759\u6001\u7c7b\u4e5f\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"App.HttpContext")," \u83b7\u53d6 ",(0,a.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u5bf9\u8c61\u3002"),(0,a.kt)("h2",{id:"httpcontext-\u62d3\u5c55\u65b9\u6cd5"},(0,a.kt)("inlineCode",{parentName:"h2"},"HttpContext")," \u62d3\u5c55\u65b9\u6cd5"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e5f\u63d0\u4f9b\u4e86\u4e00\u4e9b\u5e38\u7528\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"HttpContext")," \u62d3\u5c55\u65b9\u6cd5"),(0,a.kt)("h3",{id:"\u83b7\u53d6\u5f53\u524d\u8bf7\u6c42\u7684\u7279\u6027"},"\u83b7\u53d6\u5f53\u524d\u8bf7\u6c42\u7684\u7279\u6027"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var attribute = httpContext.GetMetadata();\n")),(0,a.kt)("h3",{id:"\u8bbe\u7f6e-swagger-\u81ea\u52a8\u6388\u6743"},"\u8bbe\u7f6e ",(0,a.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u81ea\u52a8\u6388\u6743"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'httpContext.SigninToSwagger("\u4f60\u7684token");\n')),(0,a.kt)("h3",{id:"\u9000\u51fa-swagger-\u6388\u6743"},"\u9000\u51fa ",(0,a.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u6388\u6743"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"httpContext.SignoutToSwagger();\n")),(0,a.kt)("h3",{id:"\u83b7\u53d6\u672c\u5730-ip-\u5730\u5740"},"\u83b7\u53d6\u672c\u5730 IP \u5730\u5740"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var ipv4 = httpContext.GetLocalIpAddressToIPv4();\nvar ipv6 = httpContext.GetLocalIpAddressToIPv6();\n")),(0,a.kt)("h3",{id:"\u83b7\u53d6\u5ba2\u6237\u7aef-ip-\u5730\u5740"},"\u83b7\u53d6\u5ba2\u6237\u7aef IP \u5730\u5740"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var ipv4 = httpContext.GetRemoteIpAddressToIPv4();\nvar ipv6 = httpContext.GetRemoteIpAddressToIPv6();\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/88486ef5.2f47fea7.js b/handbook/build/assets/js/88486ef5.2f47fea7.js new file mode 100644 index 00000000000..85905c4e11f --- /dev/null +++ b/handbook/build/assets/js/88486ef5.2f47fea7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[3201],{3905:function(e,t,n){n.d(t,{Zo:function(){return d},kt:function(){return c}});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):p(p({},t),e)),n},d=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),u=s(n),c=a,k=u["".concat(l,".").concat(c)]||u[c]||m[c]||i;return n?r.createElement(k,p(p({ref:t},d),{},{components:n})):r.createElement(k,p({ref:t},d))}));function c(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,p=new Array(i);p[0]=u;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:a,p[1]=o;for(var s=2;sMapster \u4f7f\u7528",id:"133-mapster-\u4f7f\u7528",level:2},{value:"13.3.1 \u5feb\u901f\u5165\u95e8",id:"1331-\u5feb\u901f\u5165\u95e8",level:3},{value:"13.3.2 \u81ea\u5b9a\u4e49\u6620\u5c04\u89c4\u5219",id:"1332-\u81ea\u5b9a\u4e49\u6620\u5c04\u89c4\u5219",level:3},{value:"13.3.3 \u4f9d\u8d56\u6ce8\u5165\u65b9\u5f0f",id:"1333-\u4f9d\u8d56\u6ce8\u5165\u65b9\u5f0f",level:3},{value:"13.3.4 \u548c EFCore \u914d\u5408",id:"1334-\u548c-efcore-\u914d\u5408",level:3},{value:"13.4 \u5168\u5c40\u9ed8\u8ba4\u914d\u7f6e",id:"134-\u5168\u5c40\u9ed8\u8ba4\u914d\u7f6e",level:2},{value:"13.5 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"135-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],u={toc:m};function c(e){var t=e.components,n=(0,a.Z)(e,p);return(0,i.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"important"},(0,i.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Mapster")," \u4ee5\u5916\u7684\u62d3\u5c55\u8bf4\u660e"),(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Mapster")," \u7684\u62d3\u5c55 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion.Extras.ObjectMapper.Mapster"),"\uff0c\u5982\u9700\u4f7f\u7528\u7b2c\u4e09\u65b9\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"AutoMapper")," \u5219\u65e0\u9700\u5b89\u88c5\u6b64\u62d3\u5c55\u3002")),(0,i.kt)("h2",{id:"131-\u5bf9\u8c61\u6620\u5c04"},"13.1 \u5bf9\u8c61\u6620\u5c04"),(0,i.kt)("p",null,"\u7b80\u5355\u6765\u8bf4\uff0c\u5c31\u662f\u5c06\u4e00\u4e2a\u5bf9\u8c61\u7684\u6570\u636e\u6839\u636e\u7279\u5b9a\u89c4\u5219\u6279\u91cf\u6620\u5c04\u5230\u53e6\u4e00\u4e2a\u5bf9\u8c61\u4e2d\uff0c\u51cf\u5c11\u624b\u5de5\u64cd\u4f5c\u548c\u964d\u4f4e\u4eba\u4e3a\u51fa\u9519\u7387\u3002\u5982\u5c06 ",(0,i.kt)("inlineCode",{parentName:"p"},"DTO")," \u5bf9\u8c61\u6620\u5c04\u5230 ",(0,i.kt)("inlineCode",{parentName:"p"},"Entity")," \u5b9e\u4f53\u4e2d\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002"),(0,i.kt)("h2",{id:"132-\u5148\u770b\u4f8b\u5b50"},"13.2 \u5148\u770b\u4f8b\u5b50"),(0,i.kt)("p",null,"\u5728\u8fc7\u53bb\uff0c\u6211\u4eec\u9700\u8981\u5c06\u4e00\u4e2a\u5bf9\u8c61\u7684\u503c\u8f6c\u6362\u5230\u53e6\u4e00\u4e2a\u5bf9\u8c61\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u8fd9\u6837\u505a\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var entity = repository.Find(1);\n\nvar dto = new Dto();\ndto.Id = entity.Id;\ndto.Name = entity.Name;\ndto.Age = entity.Age;\ndto.Address = entity.Address;\ndto.FullName = entity.FirstName + entity.LastName;\ndto.IdCard = entity.IdCard.Replace("1234", "****");\n')),(0,i.kt)("p",null,"\u4e0a\u9762\u7684\u4f8b\u5b50\u4f3c\u4e4e\u6ca1\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u4f46\u662f\u5982\u679c\u5f88\u591a\u5730\u65b9\u9700\u8981\u8fd9\u6837\u7684\u8d4b\u503c\u64cd\u4f5c\u3001\u6216\u8005\u76f8\u540c\u7684\u8d4b\u503c\u64cd\u4f5c\u5728\u591a\u4e2a\u5730\u65b9\u4f7f\u7528\uff0c\u53c8\u6216\u8005\u4e00\u4e2a\u7c7b\u4e2d\u542b\u6709\u975e\u5e38\u591a\u7684\u5c5e\u6027\u6216\u81ea\u5b9a\u4e49\u8d4b\u503c\u64cd\u4f5c\u3002\u90a3\u4e48\u8fd9\u6837\u7684\u64cd\u4f5c\u6548\u7387\u6781\u4f4e\uff0c\u5bb9\u6613\u51fa\u9519\uff0c\u4e14\u4ee3\u7801\u975e\u5e38\u81c3\u80bf\u548c\u5197\u4f59\u3002"),(0,i.kt)("p",null,"\u6240\u4ee5\uff0c\u5b9e\u73b0\u81ea\u52a8\u6620\u5c04\u8d4b\u503c\u548c\u652f\u6301\u7279\u6b8a\u914d\u7f6e\u7684\u9700\u6c42\u5c31\u6709\u4e86\u3002\u76ee\u524d ",(0,i.kt)("inlineCode",{parentName:"p"},"C#")," \u5e73\u53f0\u6709\u4e24\u4e2a\u4f18\u79c0\u7684\u5bf9\u8c61\u6620\u5c04\u5de5\u5177\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"Mapster")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"AutoMapper"),"\u3002",(0,i.kt)("strong",{parentName:"p"},"\u5728 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u63a8\u8350\u4f7f\u7528 ",(0,i.kt)("a",{parentName:"strong",href:"https://github.com/MapsterMapper/Mapster"},"Mapster"),"\uff0c",(0,i.kt)("a",{parentName:"strong",href:"https://github.com/MapsterMapper/Mapster"},"Mapster")," \u662f\u4e00\u6b3e\u6781\u6613\u4f7f\u7528\u4e14\u8d85\u9ad8\u6027\u80fd\u7684\u5bf9\u8c61\u6620\u5c04\u6846\u67b6\u3002")),(0,i.kt)("h2",{id:"133-mapster-\u4f7f\u7528"},"13.3 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Mapster")," \u4f7f\u7528"),(0,i.kt)("p",null,"\u73b0\u5728\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"Mapster")," \u63d0\u4f9b\u7684\u5bf9\u8c61\u6620\u5c04\u65b9\u6cd5\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"Adapt")," \u65b9\u6cd5\u6539\u9020\u4e0a\u9762\u7684\u4f8b\u5b50\uff1a"),(0,i.kt)("admonition",{title:"\u5b89\u88c5\u62d3\u5c55\u5305",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion.Core")," \u5c42\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion.Extras.ObjectMapper.Mapster")," \u62d3\u5c55\u5305\uff0c\u65e0\u9700\u624b\u52a8\u8c03\u7528\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u4f1a\u81ea\u52a8\u52a0\u8f7d\u5e76\u8c03\u7528\u3002")),(0,i.kt)("h3",{id:"1331-\u5feb\u901f\u5165\u95e8"},"13.3.1 \u5feb\u901f\u5165\u95e8"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var entity = repository.Find(1);\nvar dto = entity.Adapt();\n")),(0,i.kt)("p",null,"\u4ec5\u4ec5\u4e00\u884c\u4ee3\u7801\u5c31\u53ef\u4ee5\u5b9e\u73b0 ",(0,i.kt)("inlineCode",{parentName:"p"},"entity -> dto")," \u7684\u8f6c\u6362\uff0c\u5982\u679c\u6d89\u53ca\u5230\u8d4b\u503c\u7684\u590d\u5236\u64cd\u4f5c\uff0c\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"dto.FullName")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"dto.IdCard"),"\uff0c\u6211\u4eec\u53ea\u9700\u8981\u81ea\u5b9a\u4e49\u6620\u5c04\u89c4\u5219\u7c7b\u5373\u53ef\u3002"),(0,i.kt)("h3",{id:"1332-\u81ea\u5b9a\u4e49\u6620\u5c04\u89c4\u5219"},"13.3.2 \u81ea\u5b9a\u4e49\u6620\u5c04\u89c4\u5219"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,6,10-12}",showLineNumbers:!0,"":!0,"{1,6,10-12}":!0},'using Mapster;\nusing System;\n\nnamespace Furion.Application\n{\n public class Mapper : IRegister\n {\n public void Register(TypeAdapterConfig config)\n {\n config.ForType()\n .Map(dest => dest.FullName, src => src.FirstName + src.LastName)\n .Map(dest => dest.IdCard, src => src.IdCard.Replace("1234", "****"));\n }\n }\n}\n')),(0,i.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"\u8be5\u6620\u5c04\u6587\u4ef6 ",(0,i.kt)("inlineCode",{parentName:"p"},"Mapper.cs")," \u53ef\u4ee5\u653e\u5728\u4efb\u4f55\u9879\u76ee\u6216\u6587\u4ef6\u5939\u4e2d\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u4f1a\u5728\u7a0b\u5e8f\u542f\u52a8\u7684\u65f6\u5019\u81ea\u52a8\u626b\u63cf\u5e76\u6ce8\u5165\u914d\u7f6e\u3002")),(0,i.kt)("h3",{id:"1333-\u4f9d\u8d56\u6ce8\u5165\u65b9\u5f0f"},"13.3.3 \u4f9d\u8d56\u6ce8\u5165\u65b9\u5f0f"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Mapster")," \u9664\u4e86\u63d0\u4f9b ",(0,i.kt)("inlineCode",{parentName:"p"},"Adapt")," \u62d3\u5c55\u65b9\u6cd5\u4ee5\u5916\uff0c\u540c\u65f6\u8fd8\u63d0\u4f9b\u4f9d\u8d56\u6ce8\u5165\u7684\u65b9\u5f0f\u3002"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"public Person(IMapper mapper)\n{\n var dto = _mapper.Map(entity);\n}\n")),(0,i.kt)("h3",{id:"1334-\u548c-efcore-\u914d\u5408"},"13.3.4 \u548c ",(0,i.kt)("inlineCode",{parentName:"h3"},"EFCore")," \u914d\u5408"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Mapster")," \u8fd8\u63d0\u4f9b\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"ProjectToType")," Linq \u62d3\u5c55\u65b9\u6cd5\u51cf\u5c11\u6211\u4eec\u624b\u52a8 ",(0,i.kt)("inlineCode",{parentName:"p"},"Select")," \u64cd\u4f5c\uff0c\u5982\uff1a"),(0,i.kt)("p",null,"\u6b63\u5e38\u7684\u64cd\u4f5c\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var destinations = context.Sources\n .Select(p => new Destination {\n Id = p.Id,\n Name = p.Name,\n Surname = p.Surname,\n ....\n })\n .ToList();\n")),(0,i.kt)("p",null,"\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Mapster")," \u4e4b\u540e\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0}," var destinations = context.Sources.ProjectToType().ToList();\n")),(0,i.kt)("h2",{id:"134-\u5168\u5c40\u9ed8\u8ba4\u914d\u7f6e"},"13.4 \u5168\u5c40\u9ed8\u8ba4\u914d\u7f6e"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u5168\u5c40\u9ed8\u8ba4\u6620\u5c04\u914d\u7f6e\u9009\u9879 ",(0,i.kt)("inlineCode",{parentName:"p"},"TypeAdapterConfig.GlobalSettings.Default"),"\uff0c\u53ef\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Startup")," \u4e2d\u914d\u7f6e\u5373\u53ef\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"TypeAdapterConfig.GlobalSettings.Default\n .PreserveReference(true);\n")),(0,i.kt)("h2",{id:"135-\u53cd\u9988\u4e0e\u5efa\u8bae"},"13.5 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,i.kt)("hr",null),(0,i.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,i.kt)("inlineCode",{parentName:"p"},"Mapster")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/MapsterMapper/Mapster/wiki"},"Mapster - Wiki")," \u6587\u6863\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/8968961d.cc2332c4.js b/handbook/build/assets/js/8968961d.cc2332c4.js new file mode 100644 index 00000000000..7ce80d0aa7e --- /dev/null +++ b/handbook/build/assets/js/8968961d.cc2332c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2710],{3905:function(e,n,t){t.d(n,{Zo:function(){return p},kt:function(){return m}});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function i(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=r.createContext({}),u=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=u(e.components);return r.createElement(l.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},d=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=u(t),m=a,y=d["".concat(l,".").concat(m)]||d[m]||c[m]||o;return t?r.createElement(y,i(i({ref:n},p),{},{components:t})):r.createElement(y,i({ref:n},p))}));function m(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var o=t.length,i=new Array(o);i[0]=d;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var u=2;u[FakeDelete] \u6807\u8bb0",id:"9871-\u6dfb\u52a0-fakedelete-\u6807\u8bb0",level:3},{value:"9.8.7.2 \u5047\u5220\u9664\u4f7f\u7528",id:"9872-\u5047\u5220\u9664\u4f7f\u7528",level:3},{value:"9.8.8 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"988-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:c};function m(e){var n=e.components,t=(0,a.Z)(e,i);return(0,o.kt)("wrapper",(0,r.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{title:"\u529f\u80fd\u79fb\u9664\u58f0\u660e",type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u5305\u542b ",(0,o.kt)("inlineCode",{parentName:"p"},"Exists")," \u5355\u8bcd\u7684\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion 2.6.0 +")," \u7248\u672c\u4e2d\u5df2\u79fb\u9664\u3002")),(0,o.kt)("h2",{id:"981-\u5220\u9664\u4e00\u4e2a\u5b9e\u4f53\u4e0d\u7acb\u5373\u63d0\u4ea4"},"9.8.1 \u5220\u9664\u4e00\u4e2a\u5b9e\u4f53\uff08\u4e0d\u7acb\u5373\u63d0\u4ea4\uff09"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.Delete(user);\n\n// \u793a\u4f8b\u4e8c\nuser.Delete();\n\n// \u793a\u4f8b\u4e09\nrepository.ChangeEntityState(user, EntityState.Deleted);\n\n// \u793a\u4f8b\u56db\nrepository.Entities.Remove(user);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.DeleteAsync(user);\n\n// \u793a\u4f8b\u4e8c\nawait user.DeleteAsync();\n")),(0,o.kt)("h2",{id:"982-\u5220\u9664\u4e00\u4e2a\u5b9e\u4f53\u7acb\u5373\u63d0\u4ea4"},"9.8.2 \u5220\u9664\u4e00\u4e2a\u5b9e\u4f53\uff08\u7acb\u5373\u63d0\u4ea4\uff09"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.DeleteNow(user);\n\n// \u793a\u4f8b\u4e8c\nuser.DeleteNow();\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.DeleteNowAsync(user);\n\n// \u793a\u4f8b\u4e8c\nawait user.DeleteNowAsync();\n")),(0,o.kt)("h2",{id:"983-\u6839\u636e\u4e3b\u952e\u5220\u9664\u8bb0\u5f55\u4e0d\u7acb\u5373\u63d0\u4ea4"},"9.8.3 \u6839\u636e\u4e3b\u952e\u5220\u9664\u8bb0\u5f55\uff08\u4e0d\u7acb\u5373\u63d0\u4ea4\uff09"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.Delete(1);\n\n// \u793a\u4f8b\u4e8c\nuser.Delete(1);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.DeleteAsync(1);\n\n// \u793a\u4f8b\u4e8c\nawait user.DeleteAsync(1);\n")),(0,o.kt)("h2",{id:"984-\u6839\u636e\u4e3b\u952e\u5220\u9664\u8bb0\u5f55\u7acb\u5373\u63d0\u4ea4"},"9.8.4 \u6839\u636e\u4e3b\u952e\u5220\u9664\u8bb0\u5f55\uff08\u7acb\u5373\u63d0\u4ea4\uff09"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.DeleteNow(1);\n\n// \u793a\u4f8b\u4e8c\nuser.DeleteNow(1);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.DeleteNowAsync(1);\n\n// \u793a\u4f8b\u4e8c\nawait user.DeleteNowAsync(1);\n")),(0,o.kt)("h2",{id:"985-\u6570\u636e\u5b58\u5728\u624d\u6839\u636e\u4e3b\u952e\u5220\u9664\u4e0d\u7acb\u5373\u63d0\u4ea4"},"9.8.5 \u6570\u636e\u5b58\u5728\u624d\u6839\u636e\u4e3b\u952e\u5220\u9664\uff08\u4e0d\u7acb\u5373\u63d0\u4ea4\uff09"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.DeleteExists(1);\n\n// \u793a\u4f8b\u4e8c\nuser.DeleteExists(1);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.DeleteExistsAsync(1);\n\n// \u793a\u4f8b\u4e8c\nawait user.DeleteExistsAsync(1);\n")),(0,o.kt)("h2",{id:"986-\u6570\u636e\u5b58\u5728\u624d\u6839\u636e\u4e3b\u952e\u5220\u9664\u7acb\u5373\u63d0\u4ea4"},"9.8.6 \u6570\u636e\u5b58\u5728\u624d\u6839\u636e\u4e3b\u952e\u5220\u9664\uff08\u7acb\u5373\u63d0\u4ea4\uff09"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.DeleteExistsNow(1);\n\n// \u793a\u4f8b\u4e8c\nuser.DeleteExistsNow(1);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.DeleteExistsNowAsync(1);\n\n// \u793a\u4f8b\u4e8c\nawait user.DeleteExistsNowAsync(1);\n")),(0,o.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u6240\u6709\u5e26 ",(0,o.kt)("inlineCode",{parentName:"p"},"Now")," \u7ed3\u5c3e\u7684\u8868\u793a\u7acb\u5373\u63d0\u4ea4\u5230\u6570\u636e\u5e93\uff0c\u4e5f\u5c31\u662f\u7acb\u5373\u8c03\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"SaveChanges")," \u6216 ",(0,o.kt)("inlineCode",{parentName:"p"},"SaveChangesAsync"),"\u3002")),(0,o.kt)("h2",{id:"987-\u5047\u5220\u9664\u8f6f\u5220\u9664"},"9.8.7 \u5047\u5220\u9664/\u8f6f\u5220\u9664"),(0,o.kt)("admonition",{title:"\u529f\u80fd\u79fb\u9664\u58f0\u660e",type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion 2.10 +")," \u7248\u672c\u4e2d\u5df2\u79fb\u9664\u3002")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u53ef\u4ee5\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"[FakeDelete]")," \u7279\u6027\u6807\u8bb0\u5047\u5220\u9664\u7279\u6027\uff0c\u5982\uff1a"),(0,o.kt)("h3",{id:"9871-\u6dfb\u52a0-fakedelete-\u6807\u8bb0"},"9.8.7.1 \u6dfb\u52a0 ",(0,o.kt)("inlineCode",{parentName:"h3"},"[FakeDelete]")," \u6807\u8bb0"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},"public class Model: IEntity\n{\n [FakeDelete(true)] // \u8bbe\u7f6e\u5047\u5220\u9664\u7684\u503c\n public bool IsDeleted { get; set; }\n}\n")),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"[FakeDelete]"),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"[FakeDelete]")," \u5c5e\u6027\u62e5\u6709\u5e26\u4e00\u4e2a\u53c2\u6570\u7684\u6784\u9020\u51fd\u6570\uff0c\u8fd9\u4e2a\u53c2\u6570\u662f\u5047\u5220\u9664\u7684\u503c")),(0,o.kt)("h3",{id:"9872-\u5047\u5220\u9664\u4f7f\u7528"},"9.8.7.2 \u5047\u5220\u9664\u4f7f\u7528"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nrepository.FakeDelete(entity);\n\n// \u793a\u4f8b\u4e8c\nrepository.FakeDeleteNow(entity);\n\n// \u793a\u4f8b\u4e09\nrepository.FakeDelete(1);\n\n// \u793a\u4f8b\u56db\nrepository.FakeDeleteNow(1);\n\n// \u793a\u4f8b\u4e94\nentity.FakeDelete();\n\n// \u793a\u4f8b\u516d\nrepository.UpdateInclude(user, u => u.IsDeleted);\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nawait repository.FakeDeleteAsync(entity);\n\n// \u793a\u4f8b\u4e8c\nawait repository.FakeDeleteNowAsync(entity);\n\n// \u793a\u4f8b\u4e09\nawait repository.FakeDeleteAsync(1);\n\n// \u793a\u4f8b\u56db\nawait repository.FakeDeleteNowAsync(1);\n\n// \u793a\u4f8b\u4e94\nawait entity.FakeDeleteAsync();\n\n// \u793a\u4f8b\u516d\nawait repository.UpdateIncludeAsync(user, u => u.IsDeleted);\n")),(0,o.kt)("h2",{id:"988-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.8.8 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,o.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/8a0794d9.f07cf0c4.js b/handbook/build/assets/js/8a0794d9.f07cf0c4.js new file mode 100644 index 00000000000..4ff0fb42cf2 --- /dev/null +++ b/handbook/build/assets/js/8a0794d9.f07cf0c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2362],{3905:function(t,e,a){a.d(e,{Zo:function(){return u},kt:function(){return c}});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function i(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function l(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var o=n.createContext({}),g=function(t){var e=n.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):l(l({},e),t)),a},u=function(t){var e=g(t.components);return n.createElement(o.Provider,{value:e},t.children)},s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},m=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,i=t.originalType,o=t.parentName,u=p(t,["components","mdxType","originalType","parentName"]),m=g(a),c=r,k=m["".concat(o,".").concat(c)]||m[c]||s[c]||i;return a?n.createElement(k,l(l({ref:e},u),{},{components:a})):n.createElement(k,l({ref:e},u))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=a.length,l=new Array(i);l[0]=m;var p={};for(var o in e)hasOwnProperty.call(e,o)&&(p[o]=e[o]);p.originalType=t,p.mdxType="string"==typeof t?t:r,l[1]=p;for(var g=2;gFurion + EFCore",id:"furion--efcore",level:4},{value:"Furion + SqlSugar",id:"furion--sqlsugar",level:4},{value:"\ud83c\udf4e \u6846\u67b6\u7279\u70b9",id:"-\u6846\u67b6\u7279\u70b9",level:2},{value:"\ud83e\udd5d \u529f\u80fd\u6a21\u5757",id:"-\u529f\u80fd\u6a21\u5757",level:2},{value:"\ud83e\udd50 \u6846\u67b6\u4f9d\u8d56",id:"-\u6846\u67b6\u4f9d\u8d56",level:2},{value:"\ud83e\udd57 \u73af\u5883\u8981\u6c42",id:"-\u73af\u5883\u8981\u6c42",level:2},{value:"\ud83e\udd6a \u652f\u6301\u5e73\u53f0",id:"-\u652f\u6301\u5e73\u53f0",level:2},{value:"\ud83c\udf56 \u5173\u4e8e\u6027\u80fd",id:"-\u5173\u4e8e\u6027\u80fd",level:2},{value:"\ud83c\udf7b \u8d21\u732e\u4ee3\u7801",id:"-\u8d21\u732e\u4ee3\u7801",level:2}],c={toc:m};function k(t){var e=t.components,a=(0,r.Z)(t,p);return(0,i.kt)("wrapper",(0,n.Z)({},c,a,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("img",{src:(0,l.Z)("img/furionlogo.png"),height:"80",style:{margin:"0 auto",display:"block"}}),(0,i.kt)("div",{style:{textAlign:"center",marginTop:25}},(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/stargazers"},(0,i.kt)("img",{parentName:"a",src:"https://gitee.com/dotnetchina/Furion/badge/star.svg?theme=gvp",alt:"star"}))," ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/members"},(0,i.kt)("img",{parentName:"a",src:"https://gitee.com/dotnetchina/Furion/badge/fork.svg?theme=gvp",alt:"fork"}))," ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/MonkSoul/Furion/stargazers"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/github/stars/MonkSoul/Furion?logo=github",alt:"GitHub stars"}))," ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/MonkSoul/Furion/network"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/github/forks/MonkSoul/Furion?logo=github",alt:"GitHub forks"}))," ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/MonkSoul/Furion/blob/main/LICENSE"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/badge/license-MIT-orange",alt:"GitHub license"}))," ",(0,i.kt)("a",{parentName:"p",href:"https://www.nuget.org/packages/Furion"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.svg?cacheSeconds=10800",alt:"nuget"})))),(0,i.kt)("div",{style:{textAlign:"center"}},(0,i.kt)("p",null,"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002")),(0,i.kt)("h2",{id:"-\u5e8f\u8a00"},"\ud83d\udc90 \u5e8f\u8a00"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\u65e0\u79c1\u5949\u732e\u4e0d\u662f\u5929\u65b9\u591c\u8c2d\uff0c\u6709\u65f6\u5019\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u505a\u5230\u3002")),(0,i.kt)("h2",{id:"-\u540d\u5b57\u7684\u7531\u6765"},"\ud83c\udf55 \u540d\u5b57\u7684\u7531\u6765"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\u6545\u4e8b\u662f\u8fd9\u6837\u5b50\u7684\uff1a"),(0,i.kt)("p",{parentName:"blockquote"},"\u81ea\u5fae\u8f6f\u5ba3\u5e03 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 5")," \u5e73\u53f0\u6d88\u606f\u4e4b\u540e\uff0c\u5c31\u7422\u78e8\u7740\u5f00\u53d1\u4e00\u4e2a\u57fa\u4e8e ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 5")," \u5e73\u53f0\u7684\u5f00\u53d1\u6846\u67b6\uff0c\u60f3\u505a\u7b2c\u4e00\u4e2a\u5403 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 5")," \u8783\u87f9\u5c1d\u9c9c\u4e4b\u4eba\u3002"),(0,i.kt)("p",{parentName:"blockquote"},"\u4e00\u5f00\u59cb\u60f3\u5230\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Lazier")," \u4f5c\u4e3a\u6846\u67b6\u7684\u540d\u79f0\uff0c\u4e2d\u6587\u6709 ",(0,i.kt)("strong",{parentName:"p"},"\u66f4\u61d2")," \u7684\u610f\u601d\u3002\u7b26\u5408\u6211\u7684 \u201c\u4e00\u5207\u4ece\u7b80\uff0c\u53ea\u4e3a\u4e86\u66f4\u61d2\u201d \u7684\u5f00\u53d1\u7406\u5ff5\u3002"),(0,i.kt)("p",{parentName:"blockquote"},"\u4f46\u662f ",(0,i.kt)("strong",{parentName:"p"},"\u66f4\u61d2")," \u548c ",(0,i.kt)("strong",{parentName:"p"},"\u66f4\u70c2")," \u4e2d\u6587\u8bfb\u97f3\u76f8\u8fd1\u4e14\u6ca1\u6709\u7279\u8272\uff0c\u800c\u4e14\u5bd3\u610f\u4e5f\u4e0d\u662f\u5f88\u597d\uff0c\u5bf9\u6b64\u6362\u540d\u95ee\u9898\u82e6\u607c\u4e86\u597d\u4e9b\u5929\u3002"),(0,i.kt)("p",{parentName:"blockquote"},"\u521a\u597d\u6709\u4e00\u6b21\u5728 QQ \u7fa4\u4e2d\u65e0\u610f\u95f4\u5237\u5230\u4e86\u7fa4\u53cb\u53d1\u7684 ",(0,i.kt)("strong",{parentName:"p"},"\u201c\u5148\u77e5\u201d")," \u5355\u8bcd\uff1a",(0,i.kt)("strong",{parentName:"p"},"\u201c",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion [fu:r\u026a\u0259n]"),"\u201d"),"\uff0c\u5c31\u90a3\u4e00\u523b\uff0c\u5c31\u8ba4\u5b9a\u5b83\u4e86\uff01"),(0,i.kt)("p",{parentName:"blockquote"},(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e2d\u6587\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u5148\u77e5")," \u7684\u610f\u601d\uff0c\u6070\u597d\u7b26\u5408\u6211\u521b\u9020\u6846\u67b6\u7684\u521d\u8877\u3002\u6240\u4ee5\uff0c",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("inlineCode",{parentName:"strong"},"Furion"))," \u5c31\u8bde\u751f\u4e86\u3002")),(0,i.kt)("h2",{id:"-\u6587\u6863\u5730\u5740"},"\ud83c\udf5f \u6587\u6863\u5730\u5740"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u56fd\u5185\u6587\u6863\uff1a",(0,i.kt)("a",{parentName:"li",href:"https://furion.baiqian.ltd"},"https://furion.baiqian.ltd")),(0,i.kt)("li",{parentName:"ul"},"\u56fd\u5916\u6587\u6863\uff1a",(0,i.kt)("a",{parentName:"li",href:"https://furion.icu"},"https://furion.icu"))),(0,i.kt)("h2",{id:"-\u5f00\u6e90\u5730\u5740"},"\ud83c\udf2d \u5f00\u6e90\u5730\u5740"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Gitee\uff1a",(0,i.kt)("a",{parentName:"li",href:"https://gitee.com/dotnetchina/Furion"},"https://gitee.com/dotnetchina/Furion")),(0,i.kt)("li",{parentName:"ul"},"GitHub\uff1a",(0,i.kt)("a",{parentName:"li",href:"https://github.com/monksoul/Furion"},"https://github.com/monksoul/Furion")),(0,i.kt)("li",{parentName:"ul"},"Nuget\uff1a",(0,i.kt)("a",{parentName:"li",href:"https://www.nuget.org/packages/Furion"},"https://www.nuget.org/packages/Furion"))),(0,i.kt)("h2",{id:"-\u6846\u67b6\u62d3\u5c55\u5305"},"\ud83e\udd65 \u6846\u67b6\u62d3\u5c55\u5305"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"\u5305\u7c7b\u578b"),(0,i.kt)("th",{parentName:"tr",align:null},"\u540d\u79f0"),(0,i.kt)("th",{parentName:"tr",align:"center"},"\u7248\u672c"),(0,i.kt)("th",{parentName:"tr",align:null},"\u63cf\u8ff0"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion \u6838\u5fc3\u5305")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Pure"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Pure"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Pure"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Pure.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion \u7eaf\u51c0\u7248\u5305\uff08\u4e0d\u542b EFCore\uff09")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.Authentication.JwtBearer"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Extras.Authentication.JwtBearer"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.Authentication.JwtBearer"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Extras.Authentication.JwtBearer.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion Jwt \u62d3\u5c55\u5305")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.DependencyModel.CodeAnalysis"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Extras.DependencyModel.CodeAnalysis"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.DependencyModel.CodeAnalysis"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Extras.DependencyModel.CodeAnalysis.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion CodeAnalysis \u62d3\u5c55\u5305")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.ObjectMapper.Mapster"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Extras.ObjectMapper.Mapster"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.ObjectMapper.Mapster"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Extras.ObjectMapper.Mapster.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion Mapster \u62d3\u5c55\u5305")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.DatabaseAccessor.SqlSugar"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Extras.DatabaseAccessor.SqlSugar"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.DatabaseAccessor.SqlSugar"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Extras.DatabaseAccessor.SqlSugar.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion SqlSugar \u62d3\u5c55\u5305")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.DatabaseAccessor.Dapper"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Extras.DatabaseAccessor.Dapper"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.DatabaseAccessor.Dapper"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Extras.DatabaseAccessor.Dapper.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion Dapper \u62d3\u5c55\u5305")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.DatabaseAccessor.MongoDB"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Extras.DatabaseAccessor.MongoDB"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.DatabaseAccessor.MongoDB"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Extras.DatabaseAccessor.MongoDB.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion MongoDB \u62d3\u5c55\u5305")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.Logging.Serilog"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Extras.Logging.Serilog"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Extras.Logging.Serilog"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Extras.Logging.Serilog.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion Serilog \u62d3\u5c55\u5305")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Xunit"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Xunit"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Xunit"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Xunit.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion Xunit \u5355\u5143\u6d4b\u8bd5\u62d3\u5c55\u5305")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Pure.Xunit"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Pure.Xunit"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Pure.Xunit"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Pure.Xunit.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion \u7eaf\u51c0\u7248\u5305 Xunit \u5355\u5143\u6d4b\u8bd5\u62d3\u5c55\u5305\uff08\u4e0d\u542b EFCore\uff09")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Tools.CommandLine"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-blue?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Tools.CommandLine"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Tools.CommandLine"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Tools.CommandLine.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion Tools \u547d\u4ee4\u884c\u53c2\u6570\u89e3\u6790")))),(0,i.kt)("h2",{id:"-\u6846\u67b6\u811a\u624b\u67b6"},"\ud83c\udf44 \u6846\u67b6\u811a\u624b\u67b6"),(0,i.kt)("h4",{id:"furion--efcore"},(0,i.kt)("inlineCode",{parentName:"h4"},"Furion + EFCore")),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"\u6a21\u677f\u7c7b\u578b"),(0,i.kt)("th",{parentName:"tr",align:null},"\u540d\u79f0"),(0,i.kt)("th",{parentName:"tr",align:"center"},"\u7248\u672c"),(0,i.kt)("th",{parentName:"tr",align:null},"\u63cf\u8ff0"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Mvc/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Template.Mvc"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Mvc/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.Mvc.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Mvc \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Api/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Template.Api"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Api/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.Api.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"WebApi \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.App/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Template.App"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.App/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.App.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Mvc/WebApi \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Razor/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Template.Razor"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Razor/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.Razor.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"RazorPages \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.RazorWithWebApi/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Template.RazorWithWebApi"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.RazorWithWebApi/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.RazorWithWebApi.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"RazorPages/WebApi \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Blazor/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Template.Blazor"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.Blazor/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.Blazor.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Blazor \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.BlazorWithWebApi/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.Template.BlazorWithWebApi"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.Template.BlazorWithWebApi/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.Template.BlazorWithWebApi.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Blazor/WebApi \u6a21\u677f")))),(0,i.kt)("h4",{id:"furion--sqlsugar"},(0,i.kt)("inlineCode",{parentName:"h4"},"Furion + SqlSugar")),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:"center"},"\u6a21\u677f\u7c7b\u578b"),(0,i.kt)("th",{parentName:"tr",align:null},"\u540d\u79f0"),(0,i.kt)("th",{parentName:"tr",align:"center"},"\u7248\u672c"),(0,i.kt)("th",{parentName:"tr",align:null},"\u63cf\u8ff0"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Mvc/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.Mvc"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Mvc/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.Mvc.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Mvc \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Api/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.Api"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Api/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.Api.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"WebApi \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.App/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.App"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.App/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.App.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Mvc/WebApi \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Razor/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.Razor"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Razor/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.Razor.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"RazorPages \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.RazorWithWebApi/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.RazorWithWebApi"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.RazorWithWebApi/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.RazorWithWebApi.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"RazorPages/WebApi \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Blazor/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.Blazor"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.Blazor/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.Blazor.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Blazor \u6a21\u677f")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.BlazorWithWebApi/"},(0,i.kt)("img",{parentName:"a",src:"https://shields.io/badge/-Nuget-yellow?cacheSeconds=604800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Furion.SqlSugar.Template.BlazorWithWebApi"),(0,i.kt)("td",{parentName:"tr",align:"center"},(0,i.kt)("a",{parentName:"td",href:"https://www.nuget.org/packages/Furion.SqlSugar.Template.BlazorWithWebApi/"},(0,i.kt)("img",{parentName:"a",src:"https://img.shields.io/nuget/v/Furion.SqlSugar.Template.BlazorWithWebApi.svg?cacheSeconds=10800",alt:"nuget"}))),(0,i.kt)("td",{parentName:"tr",align:null},"Blazor/WebApi \u6a21\u677f")))),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("a",{parentName:"strong",href:"https://furion.baiqian.ltd/docs/template"},"\u5982\u4f55\u4f7f\u7528\u811a\u624b\u67b6"))),(0,i.kt)("h2",{id:"-\u6846\u67b6\u7279\u70b9"},"\ud83c\udf4e \u6846\u67b6\u7279\u70b9"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u5168\u65b0\u9762\u8c8c\uff1a\u57fa\u4e8e ",(0,i.kt)("inlineCode",{parentName:"li"},".NET5/6/7+")," \u5e73\u53f0\uff0c\u6ca1\u6709\u5386\u53f2\u5305\u88b1"),(0,i.kt)("li",{parentName:"ul"},"\u6781\u5c11\u4f9d\u8d56\uff1a\u6846\u67b6\u53ea\u4f9d\u8d56\u4e24\u4e2a\u7b2c\u4e09\u65b9\u5305"),(0,i.kt)("li",{parentName:"ul"},"\u6781\u6613\u5165\u95e8\uff1a\u53ea\u9700\u8981\u4e00\u4e2a ",(0,i.kt)("inlineCode",{parentName:"li"},"Inject()")," \u5373\u53ef\u5b8c\u6210\u914d\u7f6e"),(0,i.kt)("li",{parentName:"ul"},"\u6781\u901f\u5f00\u53d1\uff1a\u5185\u7f6e\u4e30\u5bcc\u7684\u4f01\u4e1a\u5e94\u7528\u5f00\u53d1\u529f\u80fd"),(0,i.kt)("li",{parentName:"ul"},"\u6781\u5176\u7075\u6d3b\uff1a\u8f7b\u677e\u9762\u5bf9\u591a\u53d8\u590d\u6742\u7684\u9700\u6c42"),(0,i.kt)("li",{parentName:"ul"},"\u6781\u6613\u7ef4\u62a4\uff1a\u91c7\u7528\u72ec\u7279\u7684\u67b6\u6784\u601d\u60f3\uff0c\u53ea\u4e3a\u957f\u4e45\u7ef4\u62a4\u8bbe\u8ba1"),(0,i.kt)("li",{parentName:"ul"},"\u5b8c\u6574\u6587\u6863\uff1a\u63d0\u4f9b\u5b8c\u5584\u7684\u5f00\u53d1\u6587\u6863"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"\u8de8\u5168\u5e73\u53f0\uff1a\u652f\u6301\u6240\u6709\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u53ca .NET \u5168\u90e8\u9879\u76ee\u7c7b\u578b"))),(0,i.kt)("h2",{id:"-\u529f\u80fd\u6a21\u5757"},"\ud83e\udd5d \u529f\u80fd\u6a21\u5757"),(0,i.kt)("img",{src:(0,l.Z)("img/functions.png")}),(0,i.kt)("h2",{id:"-\u6846\u67b6\u4f9d\u8d56"},"\ud83e\udd50 \u6846\u67b6\u4f9d\u8d56"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e3a\u4e86\u8ffd\u6c42\u6781\u901f\u5165\u95e8\uff0c\u6781\u81f4\u6027\u80fd\uff0c\u5c3d\u53ef\u80fd\u7684\u4e0d\u4f7f\u7528\u6216\u51cf\u5c11\u7b2c\u4e09\u65b9\u4f9d\u8d56\u3002\u76ee\u524d ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u4ec5\u96c6\u6210\u4e86\u4ee5\u4e0b\u4e24\u4e2a\u4f9d\u8d56\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/MiniProfiler/dotnet"},"MiniProfiler"),"\uff1a\u6027\u80fd\u5206\u6790\u548c\u76d1\u542c\u5fc5\u5907"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/domaindrivendev/Swashbuckle.AspNetCore"},"Swashbuckle"),"\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"Swagger")," \u63a5\u53e3\u6587\u6863")),(0,i.kt)("p",null,"\u9ebb\u96c0\u867d\u5c0f\u4e94\u810f\u4ff1\u5168\u3002",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u5373\u4f7f\u53ea\u96c6\u6210\u4e86\u8fd9\u4e24\u4e2a\u4f9d\u8d56\uff0c\u4f46\u662f\u4e3b\u6d41\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u4f9d\u8d56\u6ce8\u5165/\u63a7\u5236\u53cd\u8f6c"),"\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"AOP")," \u9762\u5411\u5207\u9762\u7f16\u7a0b\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"\u4e8b\u4ef6\u603b\u7ebf"),"\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"\u6570\u636e\u9a8c\u8bc1"),"\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"\u6570\u636e\u5e93\u64cd\u4f5c")," \u7b49\u7b49\u4e00\u4e2a\u90fd\u4e0d\u5c11\u3002"),(0,i.kt)("h2",{id:"-\u73af\u5883\u8981\u6c42"},"\ud83e\udd57 \u73af\u5883\u8981\u6c42"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Visual Studio 2019 16.8 +"),(0,i.kt)("li",{parentName:"ul"},".NET 5 SDK +"),(0,i.kt)("li",{parentName:"ul"},".Net Standard 2.1 +")),(0,i.kt)("h2",{id:"-\u652f\u6301\u5e73\u53f0"},"\ud83e\udd6a \u652f\u6301\u5e73\u53f0"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u8fd0\u884c\u73af\u5883",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Windows"),(0,i.kt)("li",{parentName:"ul"},"Linux"),(0,i.kt)("li",{parentName:"ul"},"MacOS/MacOS M1 CPU"),(0,i.kt)("li",{parentName:"ul"},"Docker/K8S/K3S/Rancher"),(0,i.kt)("li",{parentName:"ul"},"Xamarin/MAUI"))),(0,i.kt)("li",{parentName:"ul"},"\u6570\u636e\u5e93",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"SqlServer"),(0,i.kt)("li",{parentName:"ul"},"Sqlite"),(0,i.kt)("li",{parentName:"ul"},"Azure Cosmos"),(0,i.kt)("li",{parentName:"ul"},"MySql"),(0,i.kt)("li",{parentName:"ul"},"MariaDB"),(0,i.kt)("li",{parentName:"ul"},"PostgreSQL"),(0,i.kt)("li",{parentName:"ul"},"InMemoryDatabase"),(0,i.kt)("li",{parentName:"ul"},"Oracle"),(0,i.kt)("li",{parentName:"ul"},"Firebird"),(0,i.kt)("li",{parentName:"ul"},"\u8fbe\u68a6\u6570\u636e\u5e93"),(0,i.kt)("li",{parentName:"ul"},"MongoDB"))),(0,i.kt)("li",{parentName:"ul"},"\u5e94\u7528\u90e8\u7f72",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Kestrel"),(0,i.kt)("li",{parentName:"ul"},"Nginx"),(0,i.kt)("li",{parentName:"ul"},"Jexus"),(0,i.kt)("li",{parentName:"ul"},"IIS"),(0,i.kt)("li",{parentName:"ul"},"Apache"),(0,i.kt)("li",{parentName:"ul"},"PM2"),(0,i.kt)("li",{parentName:"ul"},"Supervisor"),(0,i.kt)("li",{parentName:"ul"},"\u72ec\u7acb\u53d1\u5e03/\u5355\u6587\u4ef6"),(0,i.kt)("li",{parentName:"ul"},"\u5bb9\u5668\uff08Docker/K8S/K3S/Rancher/PodMan\uff09")))),(0,i.kt)("h2",{id:"-\u5173\u4e8e\u6027\u80fd"},"\ud83c\udf56 \u5173\u4e8e\u6027\u80fd"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u76ee\u524d\u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 16.8")," \u81ea\u5e26\u6027\u80fd\u6d4b\u8bd5\u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"JMeter")," \u8fdb\u884c\u6d4b\u8bd5\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u53ea\u8d34\u90e8\u5206\u6d4b\u8bd5\u56fe\uff0c\u6d4b\u8bd5\u7ed3\u679c\u5982\u4e0b\uff1a"),(0,i.kt)("img",{src:(0,l.Z)("img/xncs.png")}),(0,i.kt)("h2",{id:"-\u8d21\u732e\u4ee3\u7801"},"\ud83c\udf7b \u8d21\u732e\u4ee3\u7801"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u9075\u5faa ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/blob/v4/LICENSE"},"MIT")," \u5f00\u6e90\u534f\u8bae\uff0c\u6b22\u8fce\u5927\u5bb6\u63d0\u4ea4 ",(0,i.kt)("inlineCode",{parentName:"p"},"PR")," \u6216 ",(0,i.kt)("inlineCode",{parentName:"p"},"Issue"),"\u3002"),(0,i.kt)("p",null,"\u5982\u679c\u8981\u4e3a\u9879\u76ee\u505a\u51fa\u8d21\u732e\uff0c\u8bf7\u67e5\u770b ",(0,i.kt)("a",{parentName:"p",href:"/docs/contribute"},"\u8d21\u732e\u6307\u5357"),"\u3002\u611f\u8c22\u6bcf\u4e00\u4f4d\u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u8d21\u732e\u4ee3\u7801\u7684\u670b\u53cb\u3002"))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/8b7511b6.033f0d1b.js b/handbook/build/assets/js/8b7511b6.033f0d1b.js new file mode 100644 index 00000000000..a8471304c05 --- /dev/null +++ b/handbook/build/assets/js/8b7511b6.033f0d1b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[1507],{3905:function(e,n,t){t.d(n,{Zo:function(){return u},kt:function(){return d}});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=r.createContext({}),p=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=p(e.components);return r.createElement(l.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=p(t),d=a,v=m["".concat(l,".").concat(d)]||m[d]||c[d]||i;return t?r.createElement(v,o(o({ref:n},u),{},{components:t})):r.createElement(v,o({ref:n},u))}));function d(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,o=new Array(i);o[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,o[1]=s;for(var p=2;pHttpContext",id:"16-\u83b7\u53d6-httpcontext",level:2},{value:"1.7 \u83b7\u53d6\u767b\u5f55\u7684 User \u5bf9\u8c61",id:"17-\u83b7\u53d6\u767b\u5f55\u7684-user-\u5bf9\u8c61",level:2},{value:"1.8 \u83b7\u53d6\u670d\u52a1\u63d0\u4f9b\u5668",id:"18-\u83b7\u53d6\u670d\u52a1\u63d0\u4f9b\u5668",level:2},{value:"1.9 \u89e3\u6790\u670d\u52a1",id:"19-\u89e3\u6790\u670d\u52a1",level:2},{value:"1.10 \u83b7\u53d6\u9009\u9879\u914d\u7f6e",id:"110-\u83b7\u53d6\u9009\u9879\u914d\u7f6e",level:2},{value:"1.11 \u6253\u5370\u6570\u636e\u5230 MiniProfiler",id:"111-\u6253\u5370\u6570\u636e\u5230-miniprofiler",level:2},{value:"1.12 \u83b7\u53d6\u5e94\u7528\u540d\u79f0",id:"112-\u83b7\u53d6\u5e94\u7528\u540d\u79f0",level:2},{value:"1.13 \u83b7\u53d6\u542f\u52a8\u9879\u76ee\u6839\u76ee\u5f55",id:"113-\u83b7\u53d6\u542f\u52a8\u9879\u76ee\u6839\u76ee\u5f55",level:2},{value:"1.14 \u83b7\u53d6\u7f51\u7ad9\u6839\u76ee\u5f55 wwwroot \u76ee\u5f55",id:"114-\u83b7\u53d6\u7f51\u7ad9\u6839\u76ee\u5f55-wwwroot-\u76ee\u5f55",level:2},{value:"1.15 \u83b7\u53d6\u542f\u52a8\u9879\u76ee\u6240\u5728\u7a0b\u5e8f\u96c6",id:"115-\u83b7\u53d6\u542f\u52a8\u9879\u76ee\u6240\u5728\u7a0b\u5e8f\u96c6",level:2},{value:"1.16 \u83b7\u53d6\u542f\u52a8\u9879\u76ee bin \u76ee\u5f55",id:"116-\u83b7\u53d6\u542f\u52a8\u9879\u76ee-bin-\u76ee\u5f55",level:2},{value:"1.17 \u83b7\u53d6\u73af\u5883\u53d8\u91cf\u540d",id:"117-\u83b7\u53d6\u73af\u5883\u53d8\u91cf\u540d",level:2},{value:"1.18 \u5224\u65ad\u7cfb\u7edf\u73af\u5883",id:"118-\u5224\u65ad\u7cfb\u7edf\u73af\u5883",level:2},{value:"1.19 \u83b7\u53d6\u670d\u52a1\u5668\u4fe1\u606f",id:"119-\u83b7\u53d6\u670d\u52a1\u5668\u4fe1\u606f",level:2},{value:"1.20 \u83b7\u53d6\u6846\u67b6\u5e95\u5c42\u6240\u6709\u672a\u6258\u7ba1\u5bf9\u8c61",id:"120-\u83b7\u53d6\u6846\u67b6\u5e95\u5c42\u6240\u6709\u672a\u6258\u7ba1\u5bf9\u8c61",level:2},{value:"1.21 \u624b\u52a8\u91ca\u653e\u975e\u6258\u7ba1\u5bf9\u8c61",id:"121-\u624b\u52a8\u91ca\u653e\u975e\u6258\u7ba1\u5bf9\u8c61",level:2},{value:"1.22 \u5224\u65ad\u662f\u5426\u662f\u5355\u6587\u4ef6\u73af\u5883",id:"122-\u5224\u65ad\u662f\u5426\u662f\u5355\u6587\u4ef6\u73af\u5883",level:2},{value:"1.23 \u89e3\u6790\u547d\u4ee4\u884c\u53c2\u6570",id:"123-\u89e3\u6790\u547d\u4ee4\u884c\u53c2\u6570",level:2}],m={toc:c};function d(e){var n=e.components,t=(0,a.Z)(e,o);return(0,i.kt)("wrapper",(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"11-\u83b7\u53d6\u5168\u5c40\u914d\u7f6e"},"1.1 \u83b7\u53d6\u5168\u5c40\u914d\u7f6e"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var settings = App.Settings;\n")),(0,i.kt)("h2",{id:"12-\u83b7\u53d6\u914d\u7f6e\u5bf9\u8c61"},"1.2 \u83b7\u53d6\u914d\u7f6e\u5bf9\u8c61"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,6,9}",showLineNumbers:!0,"{1,6,9}":!0},'// \u83b7\u53d6 IConfiguration \u5bf9\u8c61\nvar configuration = App.Configuration;\nvar value = configuration["xxx:xxx"];\n\n// \u83b7\u53d6\u6307\u5b9a\u8282\u70b9\u503c\u5e76\u8f6c\u6210 T \u7c7b\u578b\nvar data = App.GetConfig("key:key2");\n\n// \u91cd\u8f7d/\u5237\u65b0\u914d\u7f6e\nApp.Configuration.Reload();\n')),(0,i.kt)("h2",{id:"13-\u83b7\u53d6\u73af\u5883\u5bf9\u8c61"},"1.3 \u83b7\u53d6\u73af\u5883\u5bf9\u8c61"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var webHostEnvironment = App.HostEnvironment;\n")),(0,i.kt)("h2",{id:"14-\u83b7\u53d6\u9879\u76ee\u6240\u6709\u7a0b\u5e8f\u96c6"},"1.4 \u83b7\u53d6\u9879\u76ee\u6240\u6709\u7a0b\u5e8f\u96c6"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var assemblies = App.Assemblies;\n")),(0,i.kt)("h2",{id:"15-\u83b7\u53d6\u9879\u76ee\u6240\u6709\u6709\u6548\u7c7b\u578b"},"1.5 \u83b7\u53d6\u9879\u76ee\u6240\u6709\u6709\u6548\u7c7b\u578b"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var types = App.EffectiveTypes;\n")),(0,i.kt)("h2",{id:"16-\u83b7\u53d6-httpcontext"},"1.6 \u83b7\u53d6 ",(0,i.kt)("inlineCode",{parentName:"h2"},"HttpContext")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var httpContext = App.HttpContext;\n")),(0,i.kt)("h2",{id:"17-\u83b7\u53d6\u767b\u5f55\u7684-user-\u5bf9\u8c61"},"1.7 \u83b7\u53d6\u767b\u5f55\u7684 ",(0,i.kt)("inlineCode",{parentName:"h2"},"User")," \u5bf9\u8c61"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var contextUser = App.User;\n\n// \u83b7\u53d6 `Jwt` \u5b58\u50a8\u7684\u4fe1\u606f\nvar userId = App.User?.FindFirstValue("\u952e");\n')),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u5f15\u5165 ",(0,i.kt)("inlineCode",{parentName:"strong"},"System.Security.Claims")," \u547d\u540d\u7a7a\u95f4")),(0,i.kt)("h2",{id:"18-\u83b7\u53d6\u670d\u52a1\u63d0\u4f9b\u5668"},"1.8 \u83b7\u53d6\u670d\u52a1\u63d0\u4f9b\u5668"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var serviceProvider = App.ServiceProvider;\n\n// \u83b7\u53d6\u6839\u670d\u52a1\uff0c\u901a\u5e38\u7528\u6765\u89e3\u6790\u5355\u4f8b\uff0c\u53ef\u4f18\u5316\u6027\u80fd\nvar rootService = App.RootServices;\n")),(0,i.kt)("h2",{id:"19-\u89e3\u6790\u670d\u52a1"},"1.9 \u89e3\u6790\u670d\u52a1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var service = App.GetService([IServiceProvider]);\nvar service2 = App.GetService(typeof(TService), [IServiceProvider]);\n\nvar service3 = App.GetRequiredService([IServiceProvider]);\nvar service4 = App.GetRequiredService(typeof(TService), [IServiceProvider]);\n")),(0,i.kt)("h2",{id:"110-\u83b7\u53d6\u9009\u9879\u914d\u7f6e"},"1.10 \u83b7\u53d6\u9009\u9879\u914d\u7f6e"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var options = App.GetOptions([IServiceProvider]);\nvar options2 = App.GetOptionsMonitor([IServiceProvider]);\nvar options3 = App.GetOptionsSnapshot([IServiceProvider]);\n")),(0,i.kt)("h2",{id:"111-\u6253\u5370\u6570\u636e\u5230-miniprofiler"},"1.11 \u6253\u5370\u6570\u636e\u5230 ",(0,i.kt)("inlineCode",{parentName:"h2"},"MiniProfiler")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'App.PrintToMiniProfiler("\u5206\u7c7b", "\u72b6\u6001", "\u8981\u6253\u5370\u7684\u6d88\u606f");\n')),(0,i.kt)("h2",{id:"112-\u83b7\u53d6\u5e94\u7528\u540d\u79f0"},"1.12 \u83b7\u53d6\u5e94\u7528\u540d\u79f0"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var applicationName = App.HostEnvironment.ApplicationName;\n")),(0,i.kt)("h2",{id:"113-\u83b7\u53d6\u542f\u52a8\u9879\u76ee\u6839\u76ee\u5f55"},"1.13 \u83b7\u53d6\u542f\u52a8\u9879\u76ee\u6839\u76ee\u5f55"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var webRootPath = App.HostEnvironment.ContentRootPath;\n")),(0,i.kt)("h2",{id:"114-\u83b7\u53d6\u7f51\u7ad9\u6839\u76ee\u5f55-wwwroot-\u76ee\u5f55"},"1.14 \u83b7\u53d6\u7f51\u7ad9\u6839\u76ee\u5f55 ",(0,i.kt)("inlineCode",{parentName:"h2"},"wwwroot")," \u76ee\u5f55"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var wwwroot = App.WebHostEnvironment.WebRootPath;\n")),(0,i.kt)("p",null,"\u6ce8\u610f\uff1a\u53ef\u80fd\u4e2a\u522b\u64cd\u4f5c\u7cfb\u7edf\u83b7\u53d6\u503c\u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"null"),"\u3002"),(0,i.kt)("h2",{id:"115-\u83b7\u53d6\u542f\u52a8\u9879\u76ee\u6240\u5728\u7a0b\u5e8f\u96c6"},"1.15 \u83b7\u53d6\u542f\u52a8\u9879\u76ee\u6240\u5728\u7a0b\u5e8f\u96c6"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var webAssembly = Assembly.GetEntryAssembly();\n")),(0,i.kt)("h2",{id:"116-\u83b7\u53d6\u542f\u52a8\u9879\u76ee-bin-\u76ee\u5f55"},"1.16 \u83b7\u53d6\u542f\u52a8\u9879\u76ee ",(0,i.kt)("inlineCode",{parentName:"h2"},"bin")," \u76ee\u5f55"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var binPath = AppContext.BaseDirectory;\n")),(0,i.kt)("h2",{id:"117-\u83b7\u53d6\u73af\u5883\u53d8\u91cf\u540d"},"1.17 \u83b7\u53d6\u73af\u5883\u53d8\u91cf\u540d"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var environmentName = App.HostEnvironment.EnvironmentName;\n")),(0,i.kt)("h2",{id:"118-\u5224\u65ad\u7cfb\u7edf\u73af\u5883"},"1.18 \u5224\u65ad\u7cfb\u7edf\u73af\u5883"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8,11}",showLineNumbers:!0,"{2,5,8,11}":!0},'// \u5224\u65ad\u662f\u5426\u5f00\u53d1\u73af\u5883\nvar isDevelopment = App.HostEnvironment.IsDevelopment();\n\n// \u5224\u65ad\u662f\u5426\u751f\u4ea7\u73af\u5883\nvar isProduction = App.HostEnvironment.IsProduction();\n\n// \u5224\u65ad\u662f\u5426 Stage \u73af\u5883\nvar isStaging = App.HostEnvironment.IsStaging();\n\n// \u5224\u65ad\u662f\u5426\u662f\u7279\u5b9a\u73af\u5883\uff0c\u6bd4\u5982\u81ea\u5b9a\u4e49\u6d4b\u8bd5\u73af\u5883\nvar isTest = App.HostEnvironment.IsEnvironment("TestEnvironment");\n')),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"\u6ce8\u610f\uff0c\u9700\u5f15\u7528 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Microsoft.Extensions.Hosting")," \u547d\u540d\u7a7a\u95f4")),(0,i.kt)("h2",{id:"119-\u83b7\u53d6\u670d\u52a1\u5668\u4fe1\u606f"},"1.19 \u83b7\u53d6\u670d\u52a1\u5668\u4fe1\u606f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8,11}",showLineNumbers:!0,"{2,5,8,11}":!0},"// \u83b7\u53d6\u7cfb\u7edf\u67b6\u6784\nvar osArchitecture = RuntimeInformation.OSArchitecture; // => X64\n\n// \u83b7\u53d6\u7cfb\u7edf\u540d\u79f0\nvar osDescription = RuntimeInformation.OSDescription; // => Windows 10 \u4f01\u4e1a\u7248\n\n// \u83b7\u53d6\u8fdb\u7a0b\u67b6\u6784\nvar processArchitecture = RuntimeInformation.ProcessArchitecture; // => X64\n\n// \u662f\u5426\u662f64\u4f4d\u64cd\u4f5c\u7cfb\u7edf\nvar is64BitOperatingSystem = Environment.Is64BitOperatingSystem; // => True\n")),(0,i.kt)("h2",{id:"120-\u83b7\u53d6\u6846\u67b6\u5e95\u5c42\u6240\u6709\u672a\u6258\u7ba1\u5bf9\u8c61"},"1.20 \u83b7\u53d6\u6846\u67b6\u5e95\u5c42\u6240\u6709\u672a\u6258\u7ba1\u5bf9\u8c61"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var objs = App.UnmanagedObjects;\n")),(0,i.kt)("h2",{id:"121-\u624b\u52a8\u91ca\u653e\u975e\u6258\u7ba1\u5bf9\u8c61"},"1.21 \u624b\u52a8\u91ca\u653e\u975e\u6258\u7ba1\u5bf9\u8c61"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"App.DisposeUnmanagedObjects(); // \u901a\u5e38\u5728\u975e `Web` \u73af\u5883\u4e2d\u624b\u52a8\u5904\u7406\u91ca\u653e\u65f6\u673a\n")),(0,i.kt)("h2",{id:"122-\u5224\u65ad\u662f\u5426\u662f\u5355\u6587\u4ef6\u73af\u5883"},"1.22 \u5224\u65ad\u662f\u5426\u662f\u5355\u6587\u4ef6\u73af\u5883"),(0,i.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 3.6.8 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"bool isSingleFileEnviroment = App.SingleFileEnvironment;\n")),(0,i.kt)("h2",{id:"123-\u89e3\u6790\u547d\u4ee4\u884c\u53c2\u6570"},"1.23 \u89e3\u6790\u547d\u4ee4\u884c\u53c2\u6570"),(0,i.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion 4.4.5 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs"},'var cmdConfig = App.GetCommandLineConfiguration(args);\ncmdConfig.TryGet("\u53c2\u6570", out var value);\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/8dcbe064.caf344d0.js b/handbook/build/assets/js/8dcbe064.caf344d0.js new file mode 100644 index 00000000000..b29649381d3 --- /dev/null +++ b/handbook/build/assets/js/8dcbe064.caf344d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7896],{3905:function(e,t,n){n.d(t,{Zo:function(){return p},kt:function(){return m}});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(n),m=i,f=d["".concat(l,".").concat(m)]||d[m]||u[m]||a;return n?r.createElement(f,o(o({ref:t},p),{},{components:n})):r.createElement(f,o({ref:t},p))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,o[1]=s;for(var c=2;c=0||(o[n]=t[n]);return o}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(o[n]=t[n])}return o}var p=r.createContext({}),c=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},u=function(t){var e=c(t.components);return r.createElement(p.Provider,{value:e},t.children)},f={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},s=r.forwardRef((function(t,e){var n=t.components,o=t.mdxType,a=t.originalType,p=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),s=c(n),m=o,h=s["".concat(p,".").concat(m)]||s[m]||f[m]||a;return n?r.createElement(h,i(i({ref:e},u),{},{components:n})):r.createElement(h,i({ref:e},u))}));function m(t,e){var n=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var a=n.length,i=new Array(a);i[0]=s;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l.mdxType="string"==typeof t?t:o,i[1]=l;for(var c=2;c=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=a.createContext({}),s=function(e){var t=a.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,c=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),u=s(n),v=r,f=u["".concat(c,".").concat(v)]||u[v]||m[v]||l;return n?a.createElement(f,i(i({ref:t},d),{},{components:n})):a.createElement(f,i({ref:t},d))}));function v(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,i=new Array(l);i[0]=u;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o.mdxType="string"==typeof e?e:r,i[1]=o;for(var s=2;s0,s=!!(t||n||l);return o||s?a.createElement("footer",{className:(0,d.Z)(L.k.docs.docFooter,"docusaurus-mt-lg")},o&&a.createElement(P,{tags:i}),s&&a.createElement(I,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:r})):null}var B=n(6043),S=n(3743),V=n(102),D="tocCollapsibleButton_TO0P",R="tocCollapsibleButtonExpanded_MG3E",z=["collapsed"];function F(e){var t=e.collapsed,n=(0,V.Z)(e,z);return a.createElement("button",(0,u.Z)({type:"button"},n,{className:(0,d.Z)("clean-btn",D,!t&&R,n.className)}),a.createElement(v.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}var q="tocCollapsible_ETCw",G="tocCollapsibleContent_vkbj",J="tocCollapsibleExpanded_sAul";function X(e){var t=e.toc,n=e.className,r=e.minHeadingLevel,l=e.maxHeadingLevel,i=(0,B.u)({initialState:!0}),o=i.collapsed,c=i.toggleCollapsed;return a.createElement("div",{className:(0,d.Z)(q,!o&&J,n)},a.createElement(F,{collapsed:o,onClick:c}),a.createElement(B.z,{lazy:!0,className:G,collapsed:o},a.createElement(S.Z,{toc:t,minHeadingLevel:r,maxHeadingLevel:l})))}var Q="tocMobile_ITEo";function W(){var e=c(),t=e.toc,n=e.frontMatter;return a.createElement(X,{toc:t,minHeadingLevel:n.toc_min_heading_level,maxHeadingLevel:n.toc_max_heading_level,className:(0,d.Z)(L.k.docs.docTocMobile,Q)})}var K=n(541);function Y(){var e=c(),t=e.toc,n=e.frontMatter;return a.createElement(K.Z,{toc:t,minHeadingLevel:n.toc_min_heading_level,maxHeadingLevel:n.toc_max_heading_level,className:L.k.docs.docTocDesktop})}var $=n(2503),ee=n(5042);function te(e){var t,n,r,l,i=e.children,o=(t=c(),n=t.metadata,r=t.frontMatter,l=t.contentTitle,r.hide_title||void 0!==l?null:n.title);return a.createElement("div",{className:(0,d.Z)(L.k.docs.docMarkdown,"markdown")},o&&a.createElement("header",null,a.createElement($.Z,{as:"h1"},o)),a.createElement(ee.Z,null,i))}var ne=n(3438),ae=n(8596),re=n(4996);function le(e){return a.createElement("svg",(0,u.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}var ie={breadcrumbsContainer:"breadcrumbsContainer_Z_bl",breadcrumbHomeIcon:"breadcrumbHomeIcon_OVgt"};function oe(e){var t=e.children,n=e.href,r="breadcrumbs__link";return e.isLast?a.createElement("span",{className:r,itemProp:"name"},t):n?a.createElement(g.Z,{className:r,href:n,itemProp:"item"},a.createElement("span",{itemProp:"name"},t)):a.createElement("span",{className:r},t)}function ce(e){var t=e.children,n=e.active,r=e.index,l=e.addMicrodata;return a.createElement("li",(0,u.Z)({},l&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,d.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,a.createElement("meta",{itemProp:"position",content:String(r+1)}))}function se(){var e=(0,re.Z)("/");return a.createElement("li",{className:"breadcrumbs__item"},a.createElement(g.Z,{"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:(0,d.Z)("breadcrumbs__link",ie.breadcrumbsItemLink),href:e},a.createElement(le,{className:ie.breadcrumbHomeIcon})))}function de(){var e=(0,ne.s1)(),t=(0,ae.Ns)();return e?a.createElement("nav",{className:(0,d.Z)(L.k.docs.docBreadcrumbs,ie.breadcrumbsContainer),"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},a.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(se,null),e.map((function(t,n){var r=n===e.length-1;return a.createElement(ce,{key:n,active:r,index:n,addMicrodata:!!t.href},a.createElement(oe,{href:t.href,isLast:r},t.label))})))):null}var me="docItemContainer_Djhp",ue="docItemCol_VOVn";function ve(e){var t,n,r,l,i,o,s=e.children,u=(t=c(),n=t.frontMatter,r=t.toc,l=(0,m.i)(),i=n.hide_table_of_contents,o=!i&&r.length>0,{hidden:i,mobile:o?a.createElement(W,null):void 0,desktop:!o||"desktop"!==l&&"ssr"!==l?void 0:a.createElement(Y,null)});return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,d.Z)("col",!u.hidden&&ue)},a.createElement(C,null),a.createElement("div",{className:me},a.createElement("article",null,a.createElement(de,null),a.createElement(T,null),u.mobile,a.createElement(te,null,s),a.createElement(j,null)),a.createElement(b,null))),u.desktop&&a.createElement("div",{className:"col col--3"},u.desktop))}function fe(e){var t="docs-doc-id-"+e.content.metadata.unversionedId,n=e.content;return a.createElement(o,{content:e.content},a.createElement(r.FG,{className:t},a.createElement(s,null),a.createElement(ve,null,a.createElement(n,null))))}},4881:function(e,t,n){n.d(t,{Z:function(){return u}});var a=n(7294),r=n(5999),l=n(5281),i=n(3117),o=n(102),c=n(6010),s="iconEdit_Z9Sw",d=["className"];function m(e){var t=e.className,n=(0,o.Z)(e,d);return a.createElement("svg",(0,i.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,c.Z)(s,t),"aria-hidden":"true"},n),a.createElement("g",null,a.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function u(e){var t=e.editUrl;return a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:l.k.common.editThisPage},a.createElement(m,null),a.createElement(r.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},5042:function(e,t,n){n.d(t,{Z:function(){return i}});var a=n(7294),r=n(3905),l=n(9523);function i(e){var t=e.children;return a.createElement(r.Zo,{components:l.Z},t)}},2244:function(e,t,n){n.d(t,{Z:function(){return i}});var a=n(7294),r=n(6010),l=n(9960);function i(e){var t=e.permalink,n=e.title,i=e.subLabel,o=e.isNext;return a.createElement(l.Z,{className:(0,r.Z)("pagination-nav__link",o?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},i&&a.createElement("div",{className:"pagination-nav__sublabel"},i),a.createElement("div",{className:"pagination-nav__label"},n))}},3743:function(e,t,n){n.d(t,{Z:function(){return h}});var a=n(3117),r=n(102),l=n(7294),i=n(6668),o=["parentIndex"];function c(e){var t=e.map((function(e){return Object.assign({},e,{parentIndex:-1,children:[]})})),n=Array(7).fill(-1);t.forEach((function(e,t){var a=n.slice(2,e.level);e.parentIndex=Math.max.apply(Math,a),n[e.level]=t}));var a=[];return t.forEach((function(e){var n=e.parentIndex,l=(0,r.Z)(e,o);n>=0?t[n].children.push(l):a.push(l)})),a}function s(e){var t=e.toc,n=e.minHeadingLevel,a=e.maxHeadingLevel;return t.flatMap((function(e){var t=s({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[Object.assign({},e,{children:t})]:t}))}function d(e){var t=e.getBoundingClientRect();return t.top===t.bottom?d(e.parentNode):t}function m(e,t){var n,a,r=t.anchorTopOffset,l=e.find((function(e){return d(e).top>=r}));return l?function(e){return e.top>0&&e.bottom=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},l=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),d=s(n),m=o,f=d["".concat(p,".").concat(m)]||d[m]||u[m]||a;return n?r.createElement(f,i(i({ref:t},l),{},{components:n})):r.createElement(f,i({ref:t},l))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=d;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var s=2;s {\n var services = scope.ServiceProvider;\n});\n\n// \u5f02\u6b65\nawait Scoped.CreateAsync(async (factory, scope) => {\n var services = scope.ServiceProvider;\n await _calcService.GetAsync();\n // ...\n})\n")),(0,a.kt)("admonition",{title:"\u6570\u636e\u5e93\u64cd\u4f5c\u6ce8\u610f",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f5c\u7528\u57df\u4e2d\u5bf9",(0,a.kt)("strong",{parentName:"p"},"\u6570\u636e\u5e93\u6709\u4efb\u4f55\u53d8\u66f4\u64cd\u4f5c"),"\uff0c\u9700\u624b\u52a8\u8c03\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"SaveChanges")," \u6216\u5e26 ",(0,a.kt)("inlineCode",{parentName:"p"},"Now")," \u7ed3\u5c3e\u7684\u65b9\u6cd5\u3002\u4e5f\u53ef\u4ee5\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"Scoped.CreateUow(handler)")," \u4ee3\u66ff\u3002")),(0,a.kt)("h2",{id:"112-\u521b\u5efa\u4e00\u4e2a\u5e26\u5de5\u4f5c\u5355\u5143\u7684\u4f5c\u7528\u57df"},"11.2 \u521b\u5efa\u4e00\u4e2a\u5e26\u5de5\u4f5c\u5355\u5143\u7684\u4f5c\u7528\u57df"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u540c\u6b65\nScoped.CreateUow((factory, scope) => {\n var services = scope.ServiceProvider;\n});\n\n// \u5f02\u6b65\nawait Scope.CreateUowAsync(async (factory, scope) => {\n var services = scope.ServiceProvider;\n await _calcService.GetAsync();\n // ...\n});\n")),(0,a.kt)("p",null,"\u6b64\u65b9\u6cd5\u5c06\u5728\u6267\u884c\u5b8c\u6bd5\u4e4b\u540e\u81ea\u52a8\u8c03\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"SaveChanges()")),(0,a.kt)("h2",{id:"113-\u521b\u5efa\u4e00\u4e2a\u4f9d\u8d56\u6ce8\u5165\u4f5c\u7528\u57df\u8303\u56f4\u5e26\u8fd4\u56de\u503c"},"11.3 \u521b\u5efa\u4e00\u4e2a\u4f9d\u8d56\u6ce8\u5165\u4f5c\u7528\u57df\u8303\u56f4\uff08\u5e26\u8fd4\u56de\u503c\uff09"),(0,a.kt)("admonition",{title:"\u79fb\u9664\u58f0\u660e",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion v2.18+")," \u7248\u672c\u79fb\u9664\u5e26\u8fd4\u56de\u503c\u7684\u4f5c\u7528\u57df\uff08\u8be5\u65b9\u6cd5\u5c5e\u4e8e\u591a\u4f59\u64cd\u4f5c\uff09")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},'var obj = Scoped.CreateRef((factory, scope) => {\n var services = scope.ServiceProvider;\n return "\u8fd4\u56de\u503c";\n});\n')),(0,a.kt)("h2",{id:"114-\u521b\u5efa\u4e00\u4e2a\u5e26\u5de5\u4f5c\u5355\u5143\u7684\u4f5c\u7528\u57df\u5e26\u8fd4\u56de\u503c"},"11.4 \u521b\u5efa\u4e00\u4e2a\u5e26\u5de5\u4f5c\u5355\u5143\u7684\u4f5c\u7528\u57df\uff08\u5e26\u8fd4\u56de\u503c\uff09"),(0,a.kt)("admonition",{title:"\u79fb\u9664\u58f0\u660e",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion v2.18+")," \u7248\u672c\u79fb\u9664\u5e26\u8fd4\u56de\u503c\u7684\u4f5c\u7528\u57df\uff08\u8be5\u65b9\u6cd5\u5c5e\u4e8e\u591a\u4f59\u64cd\u4f5c\uff09")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var obj = Scoped.CreateUowRef((factory, scope) => {\n var services = scope.ServiceProvider;\n return "\u8fd4\u56de\u503c";\n});\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/934e2055.52ded749.js b/handbook/build/assets/js/934e2055.52ded749.js new file mode 100644 index 00000000000..dd1d017cfd4 --- /dev/null +++ b/handbook/build/assets/js/934e2055.52ded749.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4918],{3905:function(e,n,t){t.d(n,{Zo:function(){return s},kt:function(){return m}});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),d=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},s=function(e){var n=d(e.components);return a.createElement(p.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),c=d(t),m=r,C=c["".concat(p,".").concat(m)]||c[m]||u[m]||i;return t?a.createElement(C,l(l({ref:n},s),{},{components:t})):a.createElement(C,l({ref:n},s))}));function m(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,l=new Array(i);l[0]=c;var o={};for(var p in n)hasOwnProperty.call(n,p)&&(o[p]=n[p]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var d=2;dIPC",id:"331-\u4ec0\u4e48\u662f-ipc",level:2},{value:"33.2 \u5b9e\u73b0 IPC \u901a\u4fe1\u65b9\u5f0f",id:"332-\u5b9e\u73b0-ipc-\u901a\u4fe1\u65b9\u5f0f",level:2},{value:"33.3 IPC \u901a\u4fe1\u6a21\u5f0f",id:"333-ipc-\u901a\u4fe1\u6a21\u5f0f",level:2},{value:"33.4 \u8fdb\u7a0b\u5185\u901a\u4fe1\uff08\u7ebf\u7a0b\u95f4\uff09",id:"334-\u8fdb\u7a0b\u5185\u901a\u4fe1\u7ebf\u7a0b\u95f4",level:2},{value:"33.4.1 \u4e86\u89e3 Channel",id:"3341-\u4e86\u89e3-channel",level:3},{value:"33.4.2 \u5e38\u89c4\u4f7f\u7528",id:"3342-\u5e38\u89c4\u4f7f\u7528",level:3},{value:"\u521b\u5efa ChannelHandler<TMessage> \u7ba1\u9053\u5904\u7406\u7a0b\u5e8f",id:"\u521b\u5efa-channelhandlertmessage-\u7ba1\u9053\u5904\u7406\u7a0b\u5e8f",level:4},{value:"\u4f7f\u7528 ChannelContext<TMessage, THandler> \u53d1\u9001\u6d88\u606f",id:"\u4f7f\u7528-channelcontexttmessage-thandler-\u53d1\u9001\u6d88\u606f",level:4},{value:"33.4.3 \u5b9e\u73b0\u591a\u8ba2\u9605",id:"3343-\u5b9e\u73b0\u591a\u8ba2\u9605",level:3},{value:"33.4.4 \u66f4\u591a Channel \u77e5\u8bc6",id:"3344-\u66f4\u591a-channel-\u77e5\u8bc6",level:3},{value:"33.4.5 CallContext \u65b9\u5f0f",id:"3345-callcontext-\u65b9\u5f0f",level:3},{value:"34.5 \u8fdb\u7a0b\u5916\u901a\u4fe1\uff08\u5171\u4eab\u5185\u5b58\uff09",id:"345-\u8fdb\u7a0b\u5916\u901a\u4fe1\u5171\u4eab\u5185\u5b58",level:2},{value:"33.6 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"336-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],c={toc:u};function m(e){var n=e.components,t=(0,r.Z)(e,l);return(0,i.kt)("wrapper",(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"331-\u4ec0\u4e48\u662f-ipc"},"33.1 \u4ec0\u4e48\u662f ",(0,i.kt)("inlineCode",{parentName:"h2"},"IPC")),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"\u5f15\u7528\u767e\u5ea6\u767e\u79d1"),(0,i.kt)("p",{parentName:"blockquote"},"IPC\uff08Inter-Process Communication\uff0c\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff09\u3002\u8fdb\u7a0b\u95f4\u901a\u4fe1\u662f\u6307\u4e24\u4e2a\u8fdb\u7a0b\u7684\u6570\u636e\u4e4b\u95f4\u4ea7\u751f\u4ea4\u4e92\u3002")),(0,i.kt)("p",null,"\u901a\u4fd7\u70b9\u8bf4\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"IPC")," \u53ef\u4ee5\u5b9e\u73b0\u4e0d\u540c\u5e94\u7528\u7a0b\u5e8f\u95f4\u901a\u4fe1\uff08\u4ea4\u4e92\u6570\u636e\uff09\u3002"),(0,i.kt)("h2",{id:"332-\u5b9e\u73b0-ipc-\u901a\u4fe1\u65b9\u5f0f"},"33.2 \u5b9e\u73b0 ",(0,i.kt)("inlineCode",{parentName:"h2"},"IPC")," \u901a\u4fe1\u65b9\u5f0f"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u534a\u53cc\u5de5 Unix \u7ba1\u9053"),(0,i.kt)("li",{parentName:"ul"},"FIFOs(\u547d\u540d\u7ba1\u9053)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"\u6d88\u606f\u961f\u5217"),"\uff08\u5e38\u7528\u6a21\u5f0f\uff09"),(0,i.kt)("li",{parentName:"ul"},"\u4fe1\u53f7\u91cf"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"\u5171\u4eab\u5185\u5b58"),"\uff08\u5e38\u7528\u6a21\u5f0f\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"Furion")," \u6846\u67b6\u9ed8\u8ba4\u5b9e\u73b0\u65b9\u5f0f\uff09"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"\u7f51\u7edc Socket"),"\uff08\u5e38\u7528\u6a21\u5f0f\uff09")),(0,i.kt)("h2",{id:"333-ipc-\u901a\u4fe1\u6a21\u5f0f"},"33.3 ",(0,i.kt)("inlineCode",{parentName:"h2"},"IPC")," \u901a\u4fe1\u6a21\u5f0f"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"IPC")," \u672c\u8eab\u6307\u7684\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"\u8fdb\u7a0b\u95f4")," \u901a\u4fe1\uff0c\u4f46 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u5c06\u5185\u7f6e ",(0,i.kt)("inlineCode",{parentName:"p"},"\u8fdb\u7a0b\u95f4/\u5185")," \u4e24\u79cd\u8fdb\u7a0b\u901a\u4fe1\u6a21\u5f0f\u3002"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"\u8fdb\u7a0b\u5185\u901a\u4fe1"),"\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"Furion")," \u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"li"},"Channel")," \u7ba1\u9053\u63d0\u4f9b\u8fdb\u7a0b\u5185\u901a\u4fe1"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"\u8fdb\u7a0b\u5916\u901a\u4fe1"),"\uff1a",(0,i.kt)("inlineCode",{parentName:"li"},"Furion")," \u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"li"},"MemoryMapperFile")," \u5171\u4eab\u5185\u5b58\u65b9\u5f0f\u5b9e\u73b0\u8fdb\u7a0b\u5916\u901a\u4fe1\uff08\u540e\u7eed\u7248\u672c\u5b8c\u5584\uff09")),(0,i.kt)("h2",{id:"334-\u8fdb\u7a0b\u5185\u901a\u4fe1\u7ebf\u7a0b\u95f4"},"33.4 \u8fdb\u7a0b\u5185\u901a\u4fe1\uff08\u7ebf\u7a0b\u95f4\uff09"),(0,i.kt)("p",null,"\u8fdb\u7a0b\u5185\u901a\u4fe1\u4fd7\u79f0\u7ebf\u7a0b\u95f4\u901a\u4fe1\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"C#")," \u63d0\u4f9b\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Channel\uff08\u7ba1\u9053\uff09")," + ",(0,i.kt)("inlineCode",{parentName:"p"},"Lazy")," + ",(0,i.kt)("inlineCode",{parentName:"p"},"Task.Factory")," \u5b9e\u73b0\u957f\u65f6\u95f4\u9ad8\u6027\u80fd\u7684\u7ebf\u7a0b\u95f4\u901a\u4fe1\u673a\u5236\u3002",(0,i.kt)("inlineCode",{parentName:"p"},"Channel")," \u7ba1\u9053\u4e5f\u662f\u76ee\u524d ",(0,i.kt)("inlineCode",{parentName:"p"},".NET/C#")," \u5b9e\u73b0 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u751f\u4ea7\u8005-\u8ba2\u9605\u8005")," \u6a21\u5f0f\u6700\u7b80\u6613\u4e14\u6700\u4e3a\u5f3a\u5927\u7684\u5b9e\u73b0\u3002"),(0,i.kt)("h3",{id:"3341-\u4e86\u89e3-channel"},"33.4.1 \u4e86\u89e3 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Channel")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Channel")," \u662f\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET Core 2.1+")," \u7248\u672c\u4e4b\u540e\u52a0\u5165\u3002",(0,i.kt)("inlineCode",{parentName:"p"},"Channel")," \u5e95\u5c42\u5b9e\u73b0\u662f\u4e00\u4e2a\u9ad8\u6548\u7684\u3001\u7ebf\u7a0b\u5b89\u5168\u7684\u961f\u5217\uff0c\u53ef\u4ee5\u5728\u7ebf\u7a0b\u4e4b\u95f4\u4f20\u9012\u6570\u636e\u3002"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Channel")," \u7684\u4e3b\u8981\u5e94\u7528\u573a\u666f\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"\u53d1\u5e03/\u8ba2\u9605\u3001\u89c2\u5bdf\u8005\u6a21\u5f0f")," \u4e2d\u4f7f\u7528\uff0c\u5982\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"\u4e8b\u4ef6\u603b\u7ebf")," \u5c31\u662f\u6700\u597d\u7684\u5b9e\u73b0\u65b9\u5f0f\u3002\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"Channel")," \u5b9e\u73b0 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u751f\u4ea7-\u6d88\u8d39")," \u673a\u5236\u53ef\u4ee5\u51cf\u5c11\u9879\u76ee\u95f4\u7684\u8026\u5408\uff0c\u63d0\u9ad8\u5e94\u7528\u541e\u5410\u91cf\u3002"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"ChannelContext")," \u5bc6\u5c01\u7c7b\uff0c\u63d0\u4f9b ",(0,i.kt)("inlineCode",{parentName:"p"},"UnBoundedChannel")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"BoundedChannel")," \u4e24\u79cd\u7ba1\u9053\u901a\u4fe1\u6a21\u5f0f\u3002"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"UnBoundedChannel"),"\uff1a\u5177\u6709\u65e0\u9650\u5bb9\u91cf\u7684 ",(0,i.kt)("inlineCode",{parentName:"li"},"Channel"),", \u751f\u4ea7\u8005\u53ef\u4ee5\u5168\u901f\u8fdb\u884c\u751f\u4ea7\u6570\u636e\uff0c\u4f46\u5982\u679c\u6d88\u8d39\u8005\u7684\u6d88\u8d39\u901f\u5ea6\u4f4e\u4e8e\u751f\u4ea7\u8005\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"Channel")," \u7684\u8d44\u6e90\u4f7f\u7528\u4f1a\u65e0\u9650\u589e\u52a0\uff0c\u4f1a\u6709\u670d\u52a1\u5668\u8d44\u6e90\u8017\u5c3d\u7684\u53ef\u80fd\u3002"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"BoundedChannel"),"\uff1a\u5177\u6709\u6709\u9650\u5bb9\u91cf\u7684 ",(0,i.kt)("inlineCode",{parentName:"li"},"Channel"),"\uff0c",(0,i.kt)("inlineCode",{parentName:"li"},"Furion")," \u6846\u67b6\u9ed8\u8ba4\u4e3a ",(0,i.kt)("inlineCode",{parentName:"li"},"1000"),"\uff0c\u5230\u8fbe\u4e0a\u9650\u540e\uff0c\u751f\u4ea7\u8005\u8fdb\u5165\u7b49\u5f85\u5199\u5165\u76f4\u5230\u6709\u7a7a\u95f2\uff0c\u597d\u5904\u662f\u53ef\u4ee5\u63a7\u5236\u751f\u4ea7\u7684\u901f\u5ea6\uff0c\u63a7\u5236\u7cfb\u7edf\u8d44\u6e90\u7684\u4f7f\u7528\u3002",(0,i.kt)("strong",{parentName:"li"},"\uff08\u63a8\u8350\uff09"))),(0,i.kt)("h3",{id:"3342-\u5e38\u89c4\u4f7f\u7528"},"33.4.2 \u5e38\u89c4\u4f7f\u7528"),(0,i.kt)("h4",{id:"\u521b\u5efa-channelhandlertmessage-\u7ba1\u9053\u5904\u7406\u7a0b\u5e8f"},"\u521b\u5efa ",(0,i.kt)("inlineCode",{parentName:"h4"},"ChannelHandler")," \u7ba1\u9053\u5904\u7406\u7a0b\u5e8f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,10,17}",showLineNumbers:!0,"":!0,"{1,10,17}":!0},'using Furion.IPCChannel;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Furion.Core\n{\n /// \n /// \u521b\u5efa\u7ba1\u9053\u5904\u7406\u7a0b\u5e8f\uff08\u5904\u7406 String \u7c7b\u578b\u6d88\u606f\uff09\n /// \n public class MyChannelHandler : ChannelHandler\n {\n /// \n /// \u63a5\u53d7\u5230\u7ba1\u9053\u6d88\u606f\u540e\u5904\u7406\u7a0b\u5e8f\n /// \n /// \n /// \n public override Task InvokeAsync(string message)\n {\n Console.WriteLine(message);\n\n return Task.CompletedTask;\n }\n }\n}\n')),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("inlineCode",{parentName:"p"}," ChannelHandler")," \u6cdb\u578b\u7c7b\u578b\u51b3\u5b9a\u4e86\u4f60\u8981\u63a5\u53d7\u90a3\u79cd\u7c7b\u578b\u7684\u6d88\u606f\uff0c\u4e0d\u540c\u7c7b\u578b\u6d88\u606f\u5c06\u4f1a\u81ea\u52a8\u8fc7\u6ee4\u7b5b\u9009\u3002")),(0,i.kt)("h4",{id:"\u4f7f\u7528-channelcontexttmessage-thandler-\u53d1\u9001\u6d88\u606f"},"\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"h4"},"ChannelContext")," \u53d1\u9001\u6d88\u606f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5-6}",showLineNumbers:!0,"":!0,"{5-6}":!0},'public async Task SendAsync()\n{\n for (int i = 0; i < 100; i++)\n {\n // \u4f7f\u7528\u6709\u9650\u5bb9\u91cf\u751f\u4ea7\u6570\u636e\n await ChannelContext.BoundedChannel.Writer.WriteAsync($"Loop {i} times.");\n }\n}\n')),(0,i.kt)("p",null,"\u4ee5\u4e0a\u4ee3\u7801\u4e5f\u53ef\u4ee5\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"ChannelContext.BoundedChannel.Writer.TryWrite()")," \u540c\u6b65\u5199\u5165\u3002"),(0,i.kt)("h3",{id:"3343-\u5b9e\u73b0\u591a\u8ba2\u9605"},"33.4.3 \u5b9e\u73b0\u591a\u8ba2\u9605"),(0,i.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u521d\u59cb\u5316\u4e86\u4e00\u4e2a\u957f\u65f6\u95f4\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"Task")," \u4efb\u52a1\u8fdb\u884c\u6570\u636e\u68c0\u67e5\u53ca\u8ba2\u9605\uff0c\u5982\u9700\u5b9e\u73b0\u591a\u8ba2\u9605\u6a21\u5f0f\uff0c\u53ef\u521b\u5efa\u65b0\u7684\u8ba2\u9605\u4efb\u52a1\u5373\u53ef\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var reader = ChannelContext.BoundedChannel.Reader;\n\n// \u521b\u5efa\u957f\u65f6\u95f4\u7ebf\u7a0b\u7ba1\u9053\u8bfb\u53d6\u5668\n_ = Task.Factory.StartNew(async () =>\n {\n while (await reader.WaitToReadAsync())\n {\n if (!reader.TryRead(out var message)) continue;\n // \u9ed8\u8ba4\u91cd\u8bd5 3 \u6b21\uff08\u6bcf\u6b21\u95f4\u9694 1s\uff09\n await Retry.Invoke(async () => await Activator.CreateInstance().InvokeAsync(message), 3, 1000, finalThrow: false);\n }\n }, TaskCreationOptions.LongRunning);\n")),(0,i.kt)("h3",{id:"3344-\u66f4\u591a-channel-\u77e5\u8bc6"},"33.4.4 \u66f4\u591a ",(0,i.kt)("inlineCode",{parentName:"h3"},"Channel")," \u77e5\u8bc6"),(0,i.kt)("p",null,"\u53ef\u67e5\u9605 ",(0,i.kt)("a",{parentName:"p",href:"https://www.cnblogs.com/tiger-wang/p/14068973.html"},"Dotnet Core \u4e0b\u7684 Channel, \u4f60\u7528\u4e86\u5417\uff1f")," \u535a\u5ba2\u6559\u7a0b\uff08\ud83d\ude03 \u5199\u7684\u4e0d\u9519\uff09"),(0,i.kt)("h3",{id:"3345-callcontext-\u65b9\u5f0f"},"33.4.5 ",(0,i.kt)("inlineCode",{parentName:"h3"},"CallContext")," \u65b9\u5f0f"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion v2.18+")," \u7248\u672c\u63d0\u4f9b\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"CallContext")," \u9759\u6001\u7c7b\uff0c\u5185\u90e8\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"AsyncLocal")," \u5b9e\u73b0\uff0c\u4e5f\u53ef\u4ee5\u5b9e\u73b0\u7ebf\u7a0b\u95f4\u901a\u4fe1\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'CallContext.SetLocalValue("name", "Furion");\nCallContext.GetLocalValue("name");\n\nCallContext.SetLocalValue("count", 1);\nCallContext.GetLocalValue("count");\n')),(0,i.kt)("h2",{id:"345-\u8fdb\u7a0b\u5916\u901a\u4fe1\u5171\u4eab\u5185\u5b58"},"34.5 \u8fdb\u7a0b\u5916\u901a\u4fe1\uff08\u5171\u4eab\u5185\u5b58\uff09"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u76ee\u524d\u6682\u672a\u63d0\u4f9b\u7684\u8fdb\u7a0b\u5916\u901a\u4fe1\u529f\u80fd\uff0c\u5c06\u5728\u540e\u7eed\u7248\u672c\u5b9e\u73b0\uff08\u4e3b\u8981\u662f\u6a21\u5757\u8bbe\u8ba1\u8fd8\u672a\u60f3\u597d\uff0c\u6280\u672f\u5df2\u5b9e\u73b0\uff09\u3002"),(0,i.kt)("p",null,"\u4e3b\u8981\u662f\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"MemoryMapperFile")," \u5b9e\u73b0\u5171\u4eab\u5185\u5b58\u8fbe\u5230\u8fdb\u7a0b\u5916\u901a\u4fe1\u529f\u80fd\uff0c",(0,i.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/dotnet/api/system.io.memorymappedfiles.memorymappedfile?view=net-5.0"},"\u4e86\u89e3\u66f4\u591a MemoryMapperFile")),(0,i.kt)("h2",{id:"336-\u53cd\u9988\u4e0e\u5efa\u8bae"},"33.6 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/935f2afb.f88096c3.js b/handbook/build/assets/js/935f2afb.f88096c3.js new file mode 100644 index 00000000000..21878e732f1 --- /dev/null +++ b/handbook/build/assets/js/935f2afb.f88096c3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[53],{1109:function(e){e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"category","label":"1. \u5e8f\u8a00","items":[{"type":"link","label":"1.1 \u4ecb\u7ecd","href":"/docs/","docId":"introduce"},{"type":"link","label":"1.2 \u5173\u4e8e\u4f5c\u8005","href":"/docs/author","docId":"author"},{"type":"link","label":"1.3 \u793a\u4f8b\u67b6\u6784\u8bf4\u660e","href":"/docs/source","docId":"source"},{"type":"link","label":"1.4 \u6846\u67b6\u6848\u4f8b","href":"/docs/case","docId":"case"},{"type":"link","label":"1.5 \u652f\u6301 Furion","href":"/docs/donate","docId":"donate"},{"type":"link","label":"1.6 \u66f4\u65b0\u65e5\u5fd7","href":"/docs/upgrade","docId":"upgrade"},{"type":"link","label":"1.7 \u53d1\u5c55\u5927\u4e8b\u8bb0","href":"/docs/course","docId":"course"},{"type":"link","label":"1.8 \u8def\u7ebf\u56fe/\u8ba1\u5212","href":"/docs/target","docId":"target"},{"type":"link","label":"1.9 \u5173\u4e8e\u6846\u67b6\u5b9a\u4f4d","href":"/docs/position","docId":"position"}],"collapsed":true,"collapsible":true},{"type":"category","label":"2. \u5165\u95e8\u6307\u5357","items":[{"type":"link","label":"2.0 \u5165\u95e8\u6307\u5357","href":"/docs/serverun","docId":"serverun"},{"type":"link","label":"2.1 ASP.NET 5 \u96c6\u6210","href":"/docs/get-start","docId":"get-start"},{"type":"link","label":"2.1 ASP.NET 6 \u96c6\u6210","href":"/docs/get-start-net6","docId":"get-start-net6"},{"type":"link","label":"2.1 ASP.NET 7 \u96c6\u6210 \u2728","href":"/docs/get-start-net7","docId":"get-start-net7"},{"type":"link","label":"2.2 \u5b98\u65b9\u811a\u624b\u67b6","href":"/docs/template","docId":"template"},{"type":"link","label":"2.3 \u624b\u52a8\u642d\u5efa\u5206\u5c42","href":"/docs/reference","docId":"reference"},{"type":"link","label":"2.4 \u795e\u5947\u7684 Inject","href":"/docs/inject","docId":"inject"},{"type":"link","label":"2.5 .NET5 \u5347\u7ea7 .NET6","href":"/docs/net5-to-net6","docId":"net5-to-net6"},{"type":"link","label":"2.5 .NET6 \u5347\u7ea7 .NET7 \u2728","href":"/docs/net6-to-net7","docId":"net6-to-net7"},{"type":"link","label":"2.6 GlobalUsing \u4f7f\u7528","href":"/docs/globalusing","docId":"globalusing"},{"type":"link","label":"2.7 JSON Schema \u4f7f\u7528","href":"/docs/jsonschema","docId":"jsonschema"},{"type":"link","label":"2.8 Visual Studio \u9ad8\u6548\u7387","href":"/docs/vsfast","docId":"vsfast"},{"type":"link","label":"2.9 Nuget \u672c\u5730\u8c03\u8bd5\u5305","href":"/docs/nuget-local","docId":"nuget-local"}],"collapsed":true,"collapsible":true},{"type":"category","label":"3. \u5e94\u7528\u542f\u52a8","items":[{"type":"link","label":"3.1 AppStartup \u542f\u52a8","href":"/docs/appstartup","docId":"appstartup"},{"type":"link","label":"3.2 \u7ec4\u4ef6\u5316\u542f\u52a8 \u2728","href":"/docs/component","docId":"component"}],"collapsed":true,"collapsible":true},{"type":"category","label":"4. \u914d\u7f6e\u4e0e\u9009\u9879","items":[{"type":"link","label":"4.1 \u914d\u7f6e","href":"/docs/configuration","docId":"configuration"},{"type":"link","label":"4.2 \u9009\u9879","href":"/docs/options","docId":"options"}],"collapsed":true,"collapsible":true},{"type":"category","label":"5. Web \u5e94\u7528\u5f00\u53d1","items":[{"type":"link","label":"5.1 \u52a8\u6001 WebAPI","href":"/docs/dynamic-api-controller","docId":"dynamic-api-controller"},{"type":"link","label":"5.2 HttpContext","href":"/docs/httpcontext","docId":"httpcontext"},{"type":"link","label":"5.3 \u7b5b\u9009\u5668/\u62e6\u622a\u5668/\u8fc7\u6ee4\u5668/AOP","href":"/docs/filter","docId":"filter"},{"type":"link","label":"5.4 \u8bf7\u6c42\u5ba1\u8ba1\u65e5\u5fd7 (Audit)","href":"/docs/audit","docId":"audit"},{"type":"link","label":"5.5 \u4e2d\u95f4\u4ef6 (Middleware)","href":"/docs/middleware","docId":"middleware"},{"type":"link","label":"5.6 Vue/React/Angular \u8bf7\u6c42\u4ee3\u7406","href":"/docs/clientapi","docId":"clientapi"}],"collapsed":true,"collapsible":true},{"type":"link","label":"6. \u89c4\u8303\u5316\u63a5\u53e3\u6587\u6863 (Swagger)","href":"/docs/specification-document","docId":"specification-document"},{"type":"link","label":"7. \u53cb\u597d\u5f02\u5e38\u5904\u7406","href":"/docs/friendly-exception","docId":"friendly-exception"},{"type":"link","label":"8. \u6570\u636e\u6821\u9a8c","href":"/docs/data-validation","docId":"data-validation"},{"type":"category","label":"9. \u6570\u636e\u5e93\u64cd\u4f5c\u6307\u5357\uff08EFCore\uff09","items":[{"type":"link","label":"9.0 \u5165\u95e8\u7b80\u8981 \u2728","href":"/docs/dbcontext-start","docId":"dbcontext-start"},{"type":"link","label":"9.1 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587","href":"/docs/dbcontext","docId":"dbcontext"},{"type":"link","label":"9.2 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668","href":"/docs/dbcontext-locator","docId":"dbcontext-locator"},{"type":"link","label":"9.3 \u6570\u636e\u5e93\u5b9e\u4f53","href":"/docs/entity","docId":"entity"},{"type":"link","label":"9.4 \u4ed3\u50a8\u6a21\u5f0f (Repository)","href":"/docs/dbcontext-repository","docId":"dbcontext-repository"},{"type":"link","label":"9.5 \u65b0\u589e\u64cd\u4f5c","href":"/docs/dbcontext-add","docId":"dbcontext-add"},{"type":"link","label":"9.6 \u66f4\u65b0\u64cd\u4f5c","href":"/docs/dbcontext-update","docId":"dbcontext-update"},{"type":"link","label":"9.7 \u65b0\u589e\u6216\u66f4\u65b0\u64cd\u4f5c","href":"/docs/dbcontext-add-or-update","docId":"dbcontext-add-or-update"},{"type":"link","label":"9.8 \u5220\u9664\u64cd\u4f5c","href":"/docs/dbcontext-delete","docId":"dbcontext-delete"},{"type":"link","label":"9.9 \u6279\u91cf\u64cd\u4f5c","href":"/docs/dbcontext-batch","docId":"dbcontext-batch"},{"type":"link","label":"9.10 \u67e5\u8be2\u64cd\u4f5c","href":"/docs/dbcontext-query","docId":"dbcontext-query"},{"type":"link","label":"9.11 \u9ad8\u7ea7\u67e5\u8be2\u64cd\u4f5c","href":"/docs/dbcontext-hight-query","docId":"dbcontext-hight-query"},{"type":"link","label":"9.12 \u89c6\u56fe\u64cd\u4f5c","href":"/docs/dbcontext-view","docId":"dbcontext-view"},{"type":"link","label":"9.13 \u5b58\u50a8\u8fc7\u7a0b\u64cd\u4f5c","href":"/docs/dbcontext-proc","docId":"dbcontext-proc"},{"type":"link","label":"9.14 \u51fd\u6570\u64cd\u4f5c","href":"/docs/dbcontext-function","docId":"dbcontext-function"},{"type":"link","label":"9.15 Sql \u64cd\u4f5c","href":"/docs/dbcontext-sql","docId":"dbcontext-sql"},{"type":"link","label":"9.16 Sql \u6a21\u677f","href":"/docs/dbcontext-sql-template","docId":"dbcontext-sql-template"},{"type":"link","label":"9.17 Sql \u9ad8\u7ea7\u4ee3\u7406","href":"/docs/dbcontext-sql-proxy","docId":"dbcontext-sql-proxy"},{"type":"link","label":"9.18 \u591a\u79cd\u6570\u636e\u5e93\u64cd\u4f5c \u2728","href":"/docs/dbcontext-multi-database","docId":"dbcontext-multi-database"},{"type":"link","label":"9.19 \u6570\u636e\u5e93\u751f\u6210\u6a21\u578b (Db First)","href":"/docs/dbcontext-db-first","docId":"dbcontext-db-first"},{"type":"link","label":"9.20 \u6a21\u578b\u751f\u6210\u6570\u636e\u5e93 (Code First)","href":"/docs/dbcontext-code-first","docId":"dbcontext-code-first"},{"type":"link","label":"9.21 \u5b9e\u4f53\u79cd\u5b50\u6570\u636e","href":"/docs/dbcontext-seed-data","docId":"dbcontext-seed-data"},{"type":"link","label":"9.22 \u5ba1\u8ba1\u65e5\u5fd7 (Audit)","href":"/docs/dbcontext-audit","docId":"dbcontext-audit"},{"type":"link","label":"9.23 \u5b9e\u4f53/\u5168\u5c40\u67e5\u8be2\u7b5b\u9009\u5668","href":"/docs/dbcontext-filter","docId":"dbcontext-filter"},{"type":"link","label":"9.24 \u6570\u636e\u5e93\u64cd\u4f5c\u62e6\u622a\u5668","href":"/docs/dbcontext-Interceptor","docId":"dbcontext-Interceptor"},{"type":"link","label":"9.25. \u5b9e\u4f53\u6570\u636e\u76d1\u542c\u5668","href":"/docs/dbcontext-entitytrigger","docId":"dbcontext-entitytrigger"},{"type":"link","label":"9.26 \u4e8b\u52a1\u548c\u5de5\u4f5c\u5355\u5143 (UnitOfWork)","href":"/docs/tran","docId":"tran"},{"type":"link","label":"9.27 \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236","href":"/docs/dbcontext-read-write","docId":"dbcontext-read-write"},{"type":"link","label":"9.28 \u5206\u8868\u5206\u5e93","href":"/docs/split-db","docId":"split-db"},{"type":"link","label":"9.29 EFCore \u6700\u4f73\u5b9e\u8df5","href":"/docs/efcore-recommend","docId":"efcore-recommend"}],"collapsed":true,"collapsible":true},{"type":"category","label":"10. SqlSugar \u6216\u5176\u4ed6 ORM","items":[{"type":"link","label":"10.1 SqlSugar \u96c6\u6210","href":"/docs/sqlsugar","docId":"sqlsugar"},{"type":"link","label":"10.2 Dapper \u96c6\u6210","href":"/docs/dapper","docId":"dapper"},{"type":"link","label":"10.3 MongoDB \u64cd\u4f5c","href":"/docs/mongodb","docId":"mongodb"}],"collapsed":true,"collapsible":true},{"type":"link","label":"11. SaaS \u591a\u79df\u6237","href":"/docs/saas","docId":"saas"},{"type":"link","label":"12. \u4f9d\u8d56\u6ce8\u5165/\u63a7\u5236\u53cd\u8f6c","href":"/docs/dependency-injection","docId":"dependency-injection"},{"type":"link","label":"13. \u5bf9\u8c61\u6570\u636e\u6620\u5c04 (Mapper)","href":"/docs/object-mapper","docId":"object-mapper"},{"type":"link","label":"14. \u5206\u5e03\u5f0f\u7f13\u5b58","href":"/docs/cache","docId":"cache"},{"type":"link","label":"15. \u5b89\u5168\u9274\u6743","href":"/docs/auth-control","docId":"auth-control"},{"type":"link","label":"16. CORS \u8de8\u57df","href":"/docs/cors","docId":"cors"},{"type":"link","label":"17. \u89c6\u56fe\u5f15\u64ce","href":"/docs/view-engine","docId":"view-engine"},{"type":"link","label":"18. \u65e5\u5fd7\u8bb0\u5f55","href":"/docs/logging","docId":"logging"},{"type":"link","label":"19. \u8fdc\u7a0b\u8bf7\u6c42 (HttpClient)","href":"/docs/http","docId":"http"},{"type":"link","label":"20. \u6570\u636e\u52a0\u89e3\u5bc6","href":"/docs/encryption","docId":"encryption"},{"type":"link","label":"21. \u5168\u7403\u5316\u548c\u672c\u5730\u5316\uff08\u591a\u8bed\u8a00\uff09","href":"/docs/local-language","docId":"local-language"},{"type":"link","label":"22. \u4e8b\u4ef6\u603b\u7ebf (EventBus)","href":"/docs/event-bus","docId":"event-bus"},{"type":"link","label":"23. JSON \u5e8f\u5217\u5316","href":"/docs/json-serialization","docId":"json-serialization"},{"type":"link","label":"24. \u5373\u65f6\u901a\u8baf","href":"/docs/signalr","docId":"signalr"},{"type":"link","label":"25. \u8f85\u52a9\u89d2\u8272\u670d\u52a1 (Worker Service)","href":"/docs/process-service","docId":"process-service"},{"type":"category","label":"26. \u5b9a\u65f6\u4efb\u52a1 (Schedule)","items":[{"type":"link","label":"26.1 \u8c03\u5ea6\u4f5c\u4e1a","href":"/docs/job","docId":"job"},{"type":"link","label":"26.2 Cron \u8868\u8fbe\u5f0f","href":"/docs/cron","docId":"cron"}],"collapsed":true,"collapsible":true},{"type":"link","label":"27. \u5206\u5e03\u5f0f ID \u751f\u6210","href":"/docs/idgenerator","docId":"idgenerator"},{"type":"link","label":"28. \u6a21\u5757\u5316\u5f00\u53d1","href":"/docs/module-dev","docId":"module-dev"},{"type":"link","label":"29. \u7c98\u571f\u5bf9\u8c61","href":"/docs/clayobj","docId":"clayobj"},{"type":"link","label":"30. \u8131\u654f\u5904\u7406","href":"/docs/sensitive-detection","docId":"sensitive-detection"},{"type":"link","label":"31. \u865a\u62df\u6587\u4ef6\u7cfb\u7edf\uff08\u4e0a\u4f20\u4e0b\u8f7d\uff09","href":"/docs/file-provider","docId":"file-provider"},{"type":"link","label":"32. \u4f1a\u8bdd\u548c\u72b6\u6001\u7ba1\u7406","href":"/docs/sesssion-state","docId":"sesssion-state"},{"type":"link","label":"33. IPC \u8fdb\u7a0b\u901a\u4fe1","href":"/docs/ipc","docId":"ipc"},{"type":"category","label":"34. \u6258\u7ba1/\u90e8\u7f72/\u53d1\u5e03","items":[{"type":"link","label":"34.1 \u5728 IIS \u90e8\u7f72","href":"/docs/deploy-iis","docId":"deploy-iis"},{"type":"link","label":"34.2 \u5728 Docker \u90e8\u7f72","href":"/docs/deploy-docker","docId":"deploy-docker"},{"type":"link","label":"34.3 \u5728 Nginx \u90e8\u7f72","href":"/docs/deploy-nginx","docId":"deploy-nginx"},{"type":"link","label":"34.4 \u4e8c\u7ea7\u865a\u62df\u76ee\u5f55\u90e8\u7f72","href":"/docs/virtual-deploy","docId":"virtual-deploy"},{"type":"link","label":"34.5. \u5355\u6587\u4ef6\u53d1\u5e03","href":"/docs/singlefile","docId":"singlefile"},{"type":"link","label":"34.6 pm2 \u90e8\u7f72","href":"/docs/pm2","docId":"pm2"}],"collapsed":true,"collapsible":true},{"type":"category","label":"35. \u6301\u7eed\u90e8\u7f72\u96c6\u6210","items":[{"type":"link","label":"35.1 Docker \u73af\u5883\u6301\u7eed\u90e8\u7f72","href":"/docs/deploy-docker-auto","docId":"deploy-docker-auto"},{"type":"link","label":"35.2 \u6301\u7eed\u90e8\u7f72\u96c6\u6210","href":"/docs/devops","docId":"devops"}],"collapsed":true,"collapsible":true},{"type":"category","label":"36. \u6d4b\u8bd5\u6307\u5357","items":[{"type":"link","label":"36.1 \u5355\u5143/\u96c6\u6210\u6d4b\u8bd5","href":"/docs/unittest","docId":"unittest"},{"type":"link","label":"36.2 \u8d1f\u8f7d\u538b\u6d4b","href":"/docs/performance","docId":"performance"},{"type":"link","label":"36.3 \u57fa\u51c6\u6d4b\u8bd5","href":"/docs/benchmark","docId":"benchmark"},{"type":"link","label":"36.4 \u5e76\u53d1\u6d4b\u8bd5","href":"/docs/bingfa","docId":"bingfa"}],"collapsed":true,"collapsible":true},{"type":"link","label":"37. \u7f16\u5199\u5305\u7ba1\u7406\u5de5\u5177 (Tools)","href":"/docs/dotnet-tools","docId":"dotnet-tools"},{"type":"link","label":"38. \u8d21\u732e\u6307\u5357","href":"/docs/contribute","docId":"contribute"}],"settings":[{"type":"link","label":"1. \u5e94\u7528\u914d\u7f6e","href":"/docs/settings/appsettings","docId":"settings/appsettings"},{"type":"link","label":"2. \u8de8\u57df\u914d\u7f6e","href":"/docs/settings/corsaccessorsettings","docId":"settings/corsaccessorsettings"},{"type":"link","label":"3. \u9a8c\u8bc1\u6d88\u606f\u914d\u7f6e","href":"/docs/settings/validationTypemessagesettings","docId":"settings/validationTypemessagesettings"},{"type":"link","label":"4. \u4f9d\u8d56\u6ce8\u5165\u914d\u7f6e","href":"/docs/settings/dependencyinjectionsettings","docId":"settings/dependencyinjectionsettings"},{"type":"link","label":"5. \u52a8\u6001API\u914d\u7f6e","href":"/docs/settings/dynamicapicontrollersettings","docId":"settings/dynamicapicontrollersettings"},{"type":"link","label":"6. \u53cb\u597d\u5f02\u5e38\u914d\u7f6e","href":"/docs/settings/friendlyexceptionsettings","docId":"settings/friendlyexceptionsettings"},{"type":"link","label":"7. \u89c4\u8303\u5316\u6587\u6863\u914d\u7f6e","href":"/docs/settings/specificationdocumentsettings","docId":"settings/specificationdocumentsettings"},{"type":"link","label":"8. \u591a\u8bed\u8a00\u914d\u7f6e","href":"/docs/settings/localizationsettings","docId":"settings/localizationsettings"},{"type":"link","label":"9. JWT \u914d\u7f6e","href":"/docs/settings/jwtsettings","docId":"settings/jwtsettings"},{"type":"link","label":"10. \u89c4\u8303\u5316\u7ed3\u679c\u914d\u7f6e","href":"/docs/settings/unifyresultsettings","docId":"settings/unifyresultsettings"}],"global":[{"type":"link","label":"1. App \u9759\u6001\u7c7b","href":"/docs/global/app","docId":"global/app"},{"type":"link","label":"2. Db \u9759\u6001\u7c7b","href":"/docs/global/db","docId":"global/db"},{"type":"link","label":"3. DataValidator \u9759\u6001\u7c7b","href":"/docs/global/datavalidator","docId":"global/datavalidator"},{"type":"link","label":"4. Oops \u9759\u6001\u7c7b","href":"/docs/global/oops","docId":"global/oops"},{"type":"link","label":"5. LinqExpression \u9759\u6001\u7c7b","href":"/docs/global/linqexpression","docId":"global/linqexpression"},{"type":"link","label":"6. Http \u9759\u6001\u7c7b","href":"/docs/global/shttp","docId":"global/shttp"},{"type":"link","label":"7. JsonSerializerUtility \u9759\u6001\u7c7b","href":"/docs/global/jsonserializer","docId":"global/jsonserializer"},{"type":"link","label":"8. L \u9759\u6001\u7c7b","href":"/docs/global/l","docId":"global/l"},{"type":"link","label":"9. MessageCenter \u9759\u6001\u7c7b","href":"/docs/global/messagecenter","docId":"global/messagecenter"},{"type":"link","label":"10. JSON \u9759\u6001\u7c7b","href":"/docs/global/json","docId":"global/json"},{"type":"link","label":"11. Scoped \u9759\u6001\u7c7b","href":"/docs/global/scoped","docId":"global/scoped"},{"type":"link","label":"12. SpareTime \u9759\u6001\u7c7b","href":"/docs/global/sparetime","docId":"global/sparetime"},{"type":"link","label":"13. FS \u9759\u6001\u7c7b","href":"/docs/global/fs","docId":"global/fs"},{"type":"link","label":"14. JWTEncryption \u9759\u6001\u7c7b","href":"/docs/global/jwt","docId":"global/jwt"},{"type":"link","label":"15. TP \u9759\u6001\u7c7b","href":"/docs/global/tp","docId":"global/tp"},{"type":"link","label":"16. Log \u9759\u6001\u7c7b","href":"/docs/global/log","docId":"global/log"},{"type":"link","label":"17. Schedular \u9759\u6001\u7c7b","href":"/docs/global/schedular","docId":"global/schedular"}]},"docs":{"appstartup":{"id":"appstartup","title":"3.1 AppStartup \u542f\u52a8","description":"3.1.1 Startup \u7c7b","sidebar":"docs"},"audit":{"id":"audit","title":"5.4 \u8bf7\u6c42\u5ba1\u8ba1\u65e5\u5fd7","description":"Furion \u63d0\u4f9b\u4e86\u975e\u5e38\u5f3a\u5927\u7684 LoggingMonitor \u5ba1\u8ba1\u65e5\u5fd7\u529f\u80fd\uff0c\u53ef\u76f4\u63a5\u4f7f\u7528\uff1aLoggingMonitor \u6587\u6863","sidebar":"docs"},"auth-control":{"id":"auth-control","title":"15. \u5b89\u5168\u9274\u6743","description":"15.1 \u4ec0\u4e48\u662f\u9274\u6743","sidebar":"docs"},"author":{"id":"author","title":"1.2 \u5173\u4e8e\u4f5c\u8005","description":"","sidebar":"docs"},"benchmark":{"id":"benchmark","title":"36.3 \u57fa\u51c6\u6d4b\u8bd5","description":"","sidebar":"docs"},"bingfa":{"id":"bingfa","title":"36.4 \u5e76\u53d1\u6d4b\u8bd5","description":"\u3010\u5e76\u53d1\u6d4b\u8bd5\u89c6\u9891\u6559\u7a0b\u3011","sidebar":"docs"},"cache":{"id":"cache","title":"14. \u5206\u5e03\u5f0f\u7f13\u5b58","description":"14.1 \u4ec0\u4e48\u662f\u7f13\u5b58","sidebar":"docs"},"case":{"id":"case","title":"1.4 \u6846\u67b6\u6848\u4f8b","description":"1.4.1 \u5f00\u6e90\u6848\u4f8b","sidebar":"docs"},"clayobj":{"id":"clayobj","title":"29. \u7c98\u571f\u5bf9\u8c61","description":"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 Furion 2.1.12 + \u7248\u672c\u4f7f\u7528\u3002","sidebar":"docs"},"clientapi":{"id":"clientapi","title":"5.6 Vue/React/Angular \u63a5\u53e3\u4ee3\u7406","description":"","sidebar":"docs"},"component":{"id":"component","title":"3.2 \u7ec4\u4ef6\u5316\u542f\u52a8","description":"3.2.1 \u5386\u53f2\u80cc\u666f","sidebar":"docs"},"configuration":{"id":"configuration","title":"4.1 \u914d\u7f6e","description":"","sidebar":"docs"},"contribute":{"id":"contribute","title":"38. \u8d21\u732e\u6307\u5357","description":"38.1 \u63d0\u4ea4\u9519\u8bef\u62a5\u544a","sidebar":"docs"},"cors":{"id":"cors","title":"16. CORS \u8de8\u57df","description":"16.1 \u4ec0\u4e48\u662f\u8de8\u57df","sidebar":"docs"},"course":{"id":"course","title":"1.7 \u53d1\u5c55\u5927\u4e8b\u8bb0","description":"","sidebar":"docs"},"cron":{"id":"cron","title":"26.2 Cron \u8868\u8fbe\u5f0f","description":"","sidebar":"docs"},"dapper":{"id":"dapper","title":"10.2 Dapper \u96c6\u6210","description":"\u5728 Furion \u5305\u4e2d\u9ed8\u8ba4\u96c6\u6210\u4e86 EFCore\uff0c\u5982\u679c\u4e0d\u4f7f\u7528 EFCore\uff0c\u53ef\u5b89\u88c5\u7eaf\u51c0\u7248 Furion.Pure \u4ee3\u66ff Furion\u3002","sidebar":"docs"},"data-validation":{"id":"data-validation","title":"8. \u6570\u636e\u6821\u9a8c","description":"","sidebar":"docs"},"dbcontext":{"id":"dbcontext","title":"9.1 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587","description":"\u5982\u679c\u8fde\u63a5\u5b57\u7b26\u4e32\u662f\u914d\u7f6e\u5728\u81ea\u5b9a\u4e49\u7684 .json \u6587\u4ef6\u4e2d\uff0c\u90a3\u4e48\u5fc5\u987b\u5728 Visual Studio \u4e2d\u914d\u7f6e .json \u53f3\u952e\u5c5e\u6027\uff0c\u8bbe\u7f6e \u590d\u5236 \u8f93\u51fa\u76ee\u5f55\u4e3a \u5982\u679c\u8f83\u65b0\u5219\u590d\u5236\uff0c\u751f\u6210\u64cd\u4f5c\u4e3a\uff1a\u5185\u5bb9\u3002","sidebar":"docs"},"dbcontext-add":{"id":"dbcontext-add","title":"9.5 \u65b0\u589e\u64cd\u4f5c","description":"Furion \u6846\u67b6\u63d0\u4f9b\u975e\u5e38\u591a\u7684\u8bed\u6cd5\u7cd6\u8fdb\u884c\u6570\u636e\u5e93\u64cd\u4f5c\u3002","sidebar":"docs"},"dbcontext-add-or-update":{"id":"dbcontext-add-or-update","title":"9.7 \u65b0\u589e\u6216\u66f4\u65b0\u64cd\u4f5c","description":"\u4ee5\u4e0b\u5185\u5bb9\u5728 Furion 2.5.1 + \u7248\u672c\u4e2d\u5df2\u79fb\u9664\u3002\u6b64\u64cd\u4f5c\u8ba9\u5f88\u591a\u4e0d\u4e86\u89e3 EFCore \u7684\u5f00\u53d1\u8005\u4ea7\u751f\u4e86\u5f88\u5927\u7684\u8bef\u89e3\uff0c\u4e0d\u77e5\u4f55\u65f6\u65b0\u589e\u6216\u4f55\u65f6\u66f4\u65b0\uff0c\u6545\u79fb\u9664\u6b64\u529f\u80fd\u3002","sidebar":"docs"},"dbcontext-audit":{"id":"dbcontext-audit","title":"9.22 \u5ba1\u8ba1\u65e5\u5fd7","description":"9.22.1 \u5ba1\u8ba1\u65e5\u5fd7","sidebar":"docs"},"dbcontext-batch":{"id":"dbcontext-batch","title":"9.9 \u6279\u91cf\u64cd\u4f5c","description":"9.9.1 \u5173\u4e8e\u6279\u91cf\u64cd\u4f5c","sidebar":"docs"},"dbcontext-code-first":{"id":"dbcontext-code-first","title":"9.20 \u6a21\u578b\u751f\u6210\u6570\u636e\u5e93","description":"","sidebar":"docs"},"dbcontext-db-first":{"id":"dbcontext-db-first","title":"9.19 \u6570\u636e\u5e93\u751f\u6210\u6a21\u578b","description":"","sidebar":"docs"},"dbcontext-delete":{"id":"dbcontext-delete","title":"9.8 \u5220\u9664\u64cd\u4f5c","description":"\u4ee5\u4e0b\u5185\u5bb9\u5305\u542b Exists \u5355\u8bcd\u7684\u5728 Furion 2.6.0 + \u7248\u672c\u4e2d\u5df2\u79fb\u9664\u3002","sidebar":"docs"},"dbcontext-entitytrigger":{"id":"dbcontext-entitytrigger","title":"9.25. \u5b9e\u4f53\u6570\u636e\u76d1\u542c\u5668","description":"9.25.1 \u5b9e\u4f53\u6570\u636e\u76d1\u542c\u5668","sidebar":"docs"},"dbcontext-filter":{"id":"dbcontext-filter","title":"9.23 \u5b9e\u4f53/\u5168\u5c40\u67e5\u8be2\u7b5b\u9009\u5668","description":"9.23.1 \u67e5\u8be2\u7b5b\u9009\u5668","sidebar":"docs"},"dbcontext-function":{"id":"dbcontext-function","title":"9.14 \u51fd\u6570\u64cd\u4f5c","description":"\u63a8\u8350\u4f7f\u7528 \u300a9.17 Sql \u9ad8\u7ea7\u4ee3\u7406\u300b\u4ee3\u66ff\u672c\u7ae0\u8282\u529f\u80fd\u3002Sql \u9ad8\u7ea7\u4ee3\u7406 \u80fd\u591f\u63d0\u4f9b\u66f4\u5bb9\u6613\u4e14\u66f4\u6613\u7ef4\u62a4\u7684\u65b9\u5f0f\u3002","sidebar":"docs"},"dbcontext-hight-query":{"id":"dbcontext-hight-query","title":"9.11 \u9ad8\u7ea7\u67e5\u8be2\u64cd\u4f5c","description":"","sidebar":"docs"},"dbcontext-Interceptor":{"id":"dbcontext-Interceptor","title":"9.24 \u6570\u636e\u5e93\u64cd\u4f5c\u62e6\u622a\u5668","description":"9.24.1 \u6570\u636e\u5e93\u62e6\u622a\u5668","sidebar":"docs"},"dbcontext-locator":{"id":"dbcontext-locator","title":"9.2 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668","description":"\u53ea\u8981\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6ce8\u518c\u7ed1\u5b9a\u4e86\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\uff0c\u90a3\u4e48\u6240\u6709\u7684\u4ed3\u50a8\u3001\u5b9e\u4f53\u3001\u79cd\u5b50\u3001\u914d\u7f6e\u3001\u89c6\u56fe\u3001\u51fd\u6570\u7b49\u6570\u636e\u5e93\u76f8\u5173\u7684\u7c7b\u3001\u63a5\u53e3\u3001\u65b9\u6cd5\u90fd\u9700\u8981\u6307\u5b9a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\uff0c\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\u9664\u5916\u3002","sidebar":"docs"},"dbcontext-multi-database":{"id":"dbcontext-multi-database","title":"9.18 \u591a\u79cd\u6570\u636e\u5e93\u64cd\u4f5c","description":"","sidebar":"docs"},"dbcontext-proc":{"id":"dbcontext-proc","title":"9.13 \u5b58\u50a8\u8fc7\u7a0b\u64cd\u4f5c","description":"\u63a8\u8350\u4f7f\u7528 \u300a9.17 Sql \u9ad8\u7ea7\u4ee3\u7406\u300b\u4ee3\u66ff\u672c\u7ae0\u8282\u529f\u80fd\u3002Sql \u9ad8\u7ea7\u4ee3\u7406 \u80fd\u591f\u63d0\u4f9b\u66f4\u5bb9\u6613\u4e14\u66f4\u6613\u7ef4\u62a4\u7684\u65b9\u5f0f\u3002","sidebar":"docs"},"dbcontext-query":{"id":"dbcontext-query","title":"9.10 \u67e5\u8be2\u64cd\u4f5c","description":"9.10.1 \u6839\u636e\u4e3b\u952e\u67e5\u8be2\u4e00\u6761","sidebar":"docs"},"dbcontext-read-write":{"id":"dbcontext-read-write","title":"9.27 \u8bfb\u5199\u5206\u79bb/\u4e3b\u4ece\u590d\u5236","description":"","sidebar":"docs"},"dbcontext-repository":{"id":"dbcontext-repository","title":"9.4 \u4ed3\u50a8\u6a21\u5f0f","description":"9.4.1 \u4ec0\u4e48\u662f\u4ed3\u50a8","sidebar":"docs"},"dbcontext-seed-data":{"id":"dbcontext-seed-data","title":"9.21 \u5b9e\u4f53\u79cd\u5b50\u6570\u636e","description":"\u4e00\u65e6\u5b9a\u4e49\u4e86\u79cd\u5b50\u6570\u636e\u6216\u6539\u53d8\u4e86\u79cd\u5b50\u6570\u636e\uff0c\u9700\u8981\u91cd\u65b0\u6267\u884c Add-Migration \u548c Update-Database \u547d\u4ee4\u3002","sidebar":"docs"},"dbcontext-sql":{"id":"dbcontext-sql","title":"9.15 Sql \u64cd\u4f5c","description":"\u63a8\u8350\u4f7f\u7528 \u300a9.17 Sql \u9ad8\u7ea7\u4ee3\u7406\u300b\u4ee3\u66ff\u672c\u7ae0\u8282\u529f\u80fd\u3002Sql \u9ad8\u7ea7\u4ee3\u7406 \u80fd\u591f\u63d0\u4f9b\u66f4\u5bb9\u6613\u4e14\u66f4\u6613\u7ef4\u62a4\u7684\u65b9\u5f0f\u3002","sidebar":"docs"},"dbcontext-sql-proxy":{"id":"dbcontext-sql-proxy","title":"9.17 Sql \u9ad8\u7ea7\u4ee3\u7406","description":"9.17.1 \u5173\u4e8e Sql \u4ee3\u7406","sidebar":"docs"},"dbcontext-sql-template":{"id":"dbcontext-sql-template","title":"9.16 Sql \u6a21\u677f","description":"9.16.1 Sql \u6a21\u677f","sidebar":"docs"},"dbcontext-start":{"id":"dbcontext-start","title":"9.0 \u5165\u95e8\u7b80\u8981","description":"9.0.1 \u5165\u95e8\u51c6\u5907","sidebar":"docs"},"dbcontext-update":{"id":"dbcontext-update","title":"9.6 \u66f4\u65b0\u64cd\u4f5c","description":"\u4ee5\u4e0b\u5185\u5bb9\u5305\u542b Exists \u5355\u8bcd\u7684\u5728 Furion 2.6.0 + \u7248\u672c\u4e2d\u5df2\u79fb\u9664\u3002","sidebar":"docs"},"dbcontext-view":{"id":"dbcontext-view","title":"9.12 \u89c6\u56fe\u64cd\u4f5c","description":"9.12.1 \u5173\u4e8e\u89c6\u56fe","sidebar":"docs"},"dependency-injection":{"id":"dependency-injection","title":"12. \u4f9d\u8d56\u6ce8\u5165/\u63a7\u5236\u53cd\u8f6c","description":"","sidebar":"docs"},"deploy-docker":{"id":"deploy-docker","title":"34.2 \u5728 Docker \u90e8\u7f72","description":"","sidebar":"docs"},"deploy-docker-auto":{"id":"deploy-docker-auto","title":"35.1 Docker \u73af\u5883\u6301\u7eed\u90e8\u7f72","description":"","sidebar":"docs"},"deploy-iis":{"id":"deploy-iis","title":"34.1 \u5728 IIS \u90e8\u7f72","description":"","sidebar":"docs"},"deploy-nginx":{"id":"deploy-nginx","title":"34.3 \u5728 Nginx \u90e8\u7f72","description":"","sidebar":"docs"},"devops":{"id":"devops","title":"35.2 \u6301\u7eed\u90e8\u7f72\u96c6\u6210","description":"\u6587\u6863\u7d27\u6025\u7f16\u5199\u4e2d\uff0c\u53ef\u4ee5\u5148\u770b\u65e7\u6587\u6863","sidebar":"docs"},"donate":{"id":"donate","title":"1.5 \u652f\u6301 Furion","description":"","sidebar":"docs"},"dotnet-tools":{"id":"dotnet-tools","title":"37. \u7f16\u5199\u5305\u7ba1\u7406\u5de5\u5177","description":"","sidebar":"docs"},"dynamic-api-controller":{"id":"dynamic-api-controller","title":"5.1 \u52a8\u6001 WebAPI","description":"","sidebar":"docs"},"efcore-recommend":{"id":"efcore-recommend","title":"9.29 EFCore \u6700\u4f73\u5b9e\u8df5","description":"9.29.1 EFCore \u9ad8\u6027\u80fd","sidebar":"docs"},"encryption":{"id":"encryption","title":"20. \u6570\u636e\u52a0\u89e3\u5bc6","description":"20.1 \u6570\u636e\u52a0\u89e3\u5bc6","sidebar":"docs"},"entity":{"id":"entity","title":"9.3 \u6570\u636e\u5e93\u5b9e\u4f53","description":"\u4e00\u65e6\u5b9a\u4e49\u4e86\u5b9e\u4f53\u6216\u6539\u53d8\u4e86\u5b9e\u4f53\u7ed3\u6784\u6216\u5b9e\u4f53\u914d\u7f6e\uff0c\u9700\u8981\u91cd\u65b0\u6267\u884c Add-Migration \u548c Update-Database \u547d\u4ee4\u3002","sidebar":"docs"},"event-bus":{"id":"event-bus","title":"22. \u4e8b\u4ef6\u603b\u7ebf","description":"","sidebar":"docs"},"event-bus-old":{"id":"event-bus-old","title":"22. \u4e8b\u4ef6\u603b\u7ebf","description":""},"file-provider":{"id":"file-provider","title":"31. \u865a\u62df\u6587\u4ef6\u7cfb\u7edf","description":"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 Furion 2.5.0 + \u7248\u672c\u4f7f\u7528\u3002","sidebar":"docs"},"filter":{"id":"filter","title":"5.3 \u7b5b\u9009\u5668/\u62e6\u622a\u5668/\u8fc7\u6ee4\u5668/AOP","description":"","sidebar":"docs"},"friendly-exception":{"id":"friendly-exception","title":"7. \u53cb\u597d\u5f02\u5e38\u5904\u7406","description":"","sidebar":"docs"},"get-start":{"id":"get-start","title":"2.1 ASP.NET 5 \u96c6\u6210","description":"\u622a\u81f3 2022 \u5e74 05 \u6708 31 \u65e5\uff0c\u5fae\u8f6f\u5df2\u7ecf\u505c\u6b62\u4e86 .NET5 \u7684\u6280\u672f\u652f\u6301\uff0c\u6240\u4ee5\u8bf7\u5c3d\u5feb\u5347\u7ea7\u5230 .NET6 \u7248\u672c\uff0c\u8be6\u7ec6\u5347\u7ea7\u53ef\u67e5\u9605 \u3010.NET5 \u5347\u7ea7 .NET6\u3011","sidebar":"docs"},"get-start-net6":{"id":"get-start-net6","title":"2.1 ASP.NET 6 \u96c6\u6210","description":"Furion \u5b98\u65b9\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u65b9\u4fbf\u7684\u811a\u624b\u67b6\uff0c\u53ef\u4ee5\u5feb\u901f\u7684\u521b\u5efa\u591a\u5c42\u67b6\u6784\u9879\u76ee\u3002","sidebar":"docs"},"get-start-net7":{"id":"get-start-net7","title":"2.1 ASP.NET 7 \u96c6\u6210","description":"Furion \u5b98\u65b9\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u65b9\u4fbf\u7684\u811a\u624b\u67b6\uff0c\u53ef\u4ee5\u5feb\u901f\u7684\u521b\u5efa\u591a\u5c42\u67b6\u6784\u9879\u76ee\u3002","sidebar":"docs"},"global/app":{"id":"global/app","title":"1. App \u9759\u6001\u7c7b","description":"1.1 \u83b7\u53d6\u5168\u5c40\u914d\u7f6e","sidebar":"global"},"global/datavalidator":{"id":"global/datavalidator","title":"3. DataValidator \u9759\u6001\u7c7b","description":"3.1 \u9a8c\u8bc1\u5bf9\u8c61\u6570\u636e","sidebar":"global"},"global/db":{"id":"global/db","title":"2. Db \u9759\u6001\u7c7b","description":"2.1 \u83b7\u53d6\u975e\u6cdb\u578b\u4ed3\u50a8","sidebar":"global"},"global/fs":{"id":"global/fs","title":"13. FS \u9759\u6001\u7c7b","description":"13.1 \u83b7\u53d6\u7269\u7406\u6587\u4ef6\u63d0\u4f9b\u5668","sidebar":"global"},"global/json":{"id":"global/json","title":"10. JSON \u9759\u6001\u7c7b","description":"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 Furion 1.16.0 + \u7248\u672c\u4f7f\u7528\u3002","sidebar":"global"},"global/jsonserializer":{"id":"global/jsonserializer","title":"7. JsonSerializerUtility \u9759\u6001\u7c7b","description":"\u4ee5\u4e0b\u5185\u5bb9\u5728 Furion 1.16.0 + \u7248\u672c\u4e2d\u5df2\u79fb\u9664\u3002\u8bf7\u4f7f\u7528 \u301023. JSON \u5e8f\u5217\u5316\u7ae0\u8282\u3011","sidebar":"global"},"global/jwt":{"id":"global/jwt","title":"14. JWTEncryption \u9759\u6001\u7c7b","description":"14.1 \u751f\u6210 Token","sidebar":"global"},"global/l":{"id":"global/l","title":"8. L \u9759\u6001\u7c7b","description":"8.1 \u8f6c\u6362\u6587\u672c\u591a\u8bed\u8a00","sidebar":"global"},"global/linqexpression":{"id":"global/linqexpression","title":"5. LinqExpression \u9759\u6001\u7c7b","description":"5.1 \u521b\u5efa\u4e00\u4e2a\u8868\u8fbe\u5f0f","sidebar":"global"},"global/log":{"id":"global/log","title":"16. Log \u9759\u6001\u7c7b","description":"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 Furion 4.2.1 + \u7248\u672c\u4f7f\u7528\u3002","sidebar":"global"},"global/messagecenter":{"id":"global/messagecenter","title":"9. MessageCenter \u9759\u6001\u7c7b","description":"9.1 \u52a8\u6001\u8ba2\u9605\u6d88\u606f","sidebar":"global"},"global/oops":{"id":"global/oops","title":"4. Oops \u9759\u6001\u7c7b","description":"4.1 \u629b\u51fa\u5b57\u7b26\u4e32\u5f02\u5e38","sidebar":"global"},"global/schedular":{"id":"global/schedular","title":"17. Schedular \u9759\u6001\u7c7b","description":"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 Furion 4.8.0 + \u7248\u672c\u4f7f\u7528\u3002","sidebar":"global"},"global/scoped":{"id":"global/scoped","title":"11. Scoped \u9759\u6001\u7c7b","description":"11.1 \u521b\u5efa\u4e00\u4e2a\u4f9d\u8d56\u6ce8\u5165\u4f5c\u7528\u57df\u8303\u56f4","sidebar":"global"},"global/shttp":{"id":"global/shttp","title":"6. Http \u9759\u6001\u7c7b","description":"6.1 \u83b7\u53d6\u8fdc\u7a0b\u4ee3\u7406\u670d\u52a1","sidebar":"global"},"global/sparetime":{"id":"global/sparetime","title":"12. SpareTime \u9759\u6001\u7c7b","description":"SpareTime \u9759\u6001\u7c7b\u63d0\u4f9b\u4e86\u4e00\u4e9b\u65b9\u6cd5\u65b9\u4fbf\u521d\u59cb\u5316\u548c\u7ba1\u7406\u4efb\u52a1","sidebar":"global"},"global/tp":{"id":"global/tp","title":"15. TP \u9759\u6001\u7c7b","description":"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 Furion 3.5.3 + \u7248\u672c\u4f7f\u7528\u3002","sidebar":"global"},"globalusing":{"id":"globalusing","title":"2.6 GlobalUsing \u4f7f\u7528","description":"","sidebar":"docs"},"http":{"id":"http","title":"19. \u8fdc\u7a0b\u8bf7\u6c42","description":"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 Furion 1.16.0 + \u7248\u672c\u4f7f\u7528\u3002","sidebar":"docs"},"httpcontext":{"id":"httpcontext","title":"5.2 HttpContext","description":"","sidebar":"docs"},"idgenerator":{"id":"idgenerator","title":"27. \u5206\u5e03\u5f0f ID \u751f\u6210","description":"27.1 \u4e3a\u4ec0\u4e48\u9700\u8981\u5206\u5e03\u5f0f ID","sidebar":"docs"},"inject":{"id":"inject","title":"2.4 \u795e\u5947\u7684 Inject","description":"","sidebar":"docs"},"introduce":{"id":"introduce","title":"1.1 \u4ecb\u7ecd","description":"","sidebar":"docs"},"ipc":{"id":"ipc","title":"33. IPC \u8fdb\u7a0b\u901a\u4fe1","description":"33.1 \u4ec0\u4e48\u662f IPC","sidebar":"docs"},"job":{"id":"job","title":"26.1 \u8c03\u5ea6\u4f5c\u4e1a","description":"\u5f53\u524d\u6587\u6863\u8fd8\u5728\u7f16\u5199\u4e2d\uff0c\u5df2\u5b8c\u6210\u4e86 95%\uff0c\u5c06\u5728 2022 \u5e74 11 \u6708 23 \u65e5\u5b8c\u6210\u3002","sidebar":"docs"},"job-old":{"id":"job-old","title":"26. \u5b9a\u65f6\u4efb\u52a1/\u540e\u53f0\u4efb\u52a1","description":"\u5728 Furion 4.8.0+ \u7248\u672c\u91c7\u7528 Sundial \u5b9a\u65f6\u4efb\u52a1\u66ff\u6362\u539f\u6709\u7684 TaskScheduler\uff0c\ud83d\ude36\u67e5\u770b\u65b0\u6587\u6863"},"json-serialization":{"id":"json-serialization","title":"23. JSON \u5e8f\u5217\u5316","description":"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 Furion 1.16.0 + \u7248\u672c\u4f7f\u7528\u3002","sidebar":"docs"},"jsonschema":{"id":"jsonschema","title":"2.7 JSON Schema \u4f7f\u7528","description":"","sidebar":"docs"},"local-language":{"id":"local-language","title":"21. \u5168\u7403\u5316\u548c\u672c\u5730\u5316","description":"","sidebar":"docs"},"logging":{"id":"logging","title":"18. \u65e5\u5fd7\u8bb0\u5f55","description":"","sidebar":"docs"},"middleware":{"id":"middleware","title":"5.5 \u4e2d\u95f4\u4ef6 (Middleware)","description":"","sidebar":"docs"},"module-dev":{"id":"module-dev","title":"28. \u6a21\u5757\u5316\u5f00\u53d1","description":"\u4ee5\u4e0b\u7684\u6a21\u5757\u5316\u914d\u7f6e\u5fc5\u987b\u5728 appsettings.json \u4e0b\u914d\u7f6e\u624d\u6709\u6548\uff0c\u539f\u56e0\u662f\u542f\u52a8\u7684\u65f6\u5019 appsettings.json \u5df2\u7ecf\u52a0\u8f7d\uff0c\u81ea\u5b9a\u4e49\u914d\u7f6e\u6587\u4ef6\u8fd8\u672a\u52a0\u8f7d\u3002","sidebar":"docs"},"mongodb":{"id":"mongodb","title":"10.3 MongoDB \u64cd\u4f5c","description":"\u5728 Furion \u5305\u4e2d\u9ed8\u8ba4\u96c6\u6210\u4e86 EFCore\uff0c\u5982\u679c\u4e0d\u4f7f\u7528 EFCore\uff0c\u53ef\u5b89\u88c5\u7eaf\u51c0\u7248 Furion.Pure \u4ee3\u66ff Furion\u3002","sidebar":"docs"},"net5-to-net6":{"id":"net5-to-net6","title":"2.5 .NET5 \u5347\u7ea7 .NET6","description":"","sidebar":"docs"},"net6-to-net7":{"id":"net6-to-net7","title":"2.5 .NET6 \u5347\u7ea7 .NET7","description":"","sidebar":"docs"},"nuget-local":{"id":"nuget-local","title":"2.9 Nuget \u672c\u5730\u8c03\u8bd5\u5305","description":"","sidebar":"docs"},"object-mapper":{"id":"object-mapper","title":"13. \u5bf9\u8c61\u6570\u636e\u6620\u5c04","description":"Furion \u6846\u67b6\u63d0\u4f9b\u4e86 Mapster \u7684\u62d3\u5c55 Furion.Extras.ObjectMapper.Mapster\uff0c\u5982\u9700\u4f7f\u7528\u7b2c\u4e09\u65b9\u5982 AutoMapper \u5219\u65e0\u9700\u5b89\u88c5\u6b64\u62d3\u5c55\u3002","sidebar":"docs"},"options":{"id":"options","title":"4.2 \u9009\u9879","description":"","sidebar":"docs"},"performance":{"id":"performance","title":"36.2 \u8d1f\u8f7d\u538b\u6d4b","description":"\u3010\u8d1f\u8f7d\u538b\u6d4b\u89c6\u9891\u6559\u7a0b\u3011","sidebar":"docs"},"pillar-of-humiliation":{"id":"pillar-of-humiliation","title":"1.10 \u803b\u8fb1\u67f1","description":""},"pm2":{"id":"pm2","title":"34.6 pm2 \u90e8\u7f72","description":"","sidebar":"docs"},"position":{"id":"position","title":"1.9 \u5173\u4e8e\u6846\u67b6\u5b9a\u4f4d","description":"","sidebar":"docs"},"process-service":{"id":"process-service","title":"25. \u8f85\u52a9\u89d2\u8272\u670d\u52a1","description":"","sidebar":"docs"},"reference":{"id":"reference","title":"2.3 \u624b\u52a8\u642d\u5efa\u5206\u5c42","description":"Furion \u5b98\u65b9\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u65b9\u4fbf\u7684\u811a\u624b\u67b6\uff0c\u53ef\u4ee5\u5feb\u901f\u7684\u521b\u5efa\u591a\u5c42\u67b6\u6784\u9879\u76ee\u3002","sidebar":"docs"},"saas":{"id":"saas","title":"11. SaaS \u591a\u79df\u6237","description":"","sidebar":"docs"},"sensitive-detection":{"id":"sensitive-detection","title":"30. \u8131\u654f\u5904\u7406","description":"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 Furion 2.4.4 + \u7248\u672c\u4f7f\u7528\u3002","sidebar":"docs"},"serverun":{"id":"serverun","title":"2.0 \u5165\u95e8\u6307\u5357","description":"","sidebar":"docs"},"sesssion-state":{"id":"sesssion-state","title":"32. \u4f1a\u8bdd\u548c\u72b6\u6001\u7ba1\u7406","description":"","sidebar":"docs"},"settings/appsettings":{"id":"settings/appsettings","title":"1. \u5e94\u7528\u914d\u7f6e","description":"\u5982\u9700\u7f16\u5199\u914d\u7f6e\u7684\u65f6\u5019\u63d0\u4f9b\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\uff0c\u53ef\u67e5\u770b \u30102.7 JSON Schema \u4f7f\u7528\u3011","sidebar":"settings"},"settings/corsaccessorsettings":{"id":"settings/corsaccessorsettings","title":"2. \u8de8\u57df\u914d\u7f6e","description":"\u5982\u9700\u7f16\u5199\u914d\u7f6e\u7684\u65f6\u5019\u63d0\u4f9b\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\uff0c\u53ef\u67e5\u770b \u30102.7 JSON Schema \u4f7f\u7528\u3011","sidebar":"settings"},"settings/dependencyinjectionsettings":{"id":"settings/dependencyinjectionsettings","title":"4. \u4f9d\u8d56\u6ce8\u5165\u914d\u7f6e","description":"\u5982\u9700\u7f16\u5199\u914d\u7f6e\u7684\u65f6\u5019\u63d0\u4f9b\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\uff0c\u53ef\u67e5\u770b \u30102.7 JSON Schema \u4f7f\u7528\u3011","sidebar":"settings"},"settings/dynamicapicontrollersettings":{"id":"settings/dynamicapicontrollersettings","title":"5. \u52a8\u6001API\u914d\u7f6e","description":"\u5982\u9700\u7f16\u5199\u914d\u7f6e\u7684\u65f6\u5019\u63d0\u4f9b\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\uff0c\u53ef\u67e5\u770b \u30102.7 JSON Schema \u4f7f\u7528\u3011","sidebar":"settings"},"settings/friendlyexceptionsettings":{"id":"settings/friendlyexceptionsettings","title":"6. \u53cb\u597d\u5f02\u5e38\u914d\u7f6e","description":"\u5982\u9700\u7f16\u5199\u914d\u7f6e\u7684\u65f6\u5019\u63d0\u4f9b\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\uff0c\u53ef\u67e5\u770b \u30102.7 JSON Schema \u4f7f\u7528\u3011","sidebar":"settings"},"settings/jwtsettings":{"id":"settings/jwtsettings","title":"9. JWT \u914d\u7f6e","description":"\u5982\u9700\u7f16\u5199\u914d\u7f6e\u7684\u65f6\u5019\u63d0\u4f9b\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\uff0c\u53ef\u67e5\u770b \u30102.7 JSON Schema \u4f7f\u7528\u3011","sidebar":"settings"},"settings/localizationsettings":{"id":"settings/localizationsettings","title":"8. \u591a\u8bed\u8a00\u914d\u7f6e","description":"\u5982\u9700\u7f16\u5199\u914d\u7f6e\u7684\u65f6\u5019\u63d0\u4f9b\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\uff0c\u53ef\u67e5\u770b \u30102.7 JSON Schema \u4f7f\u7528\u3011","sidebar":"settings"},"settings/specificationdocumentsettings":{"id":"settings/specificationdocumentsettings","title":"7. \u89c4\u8303\u5316\u6587\u6863\u914d\u7f6e","description":"\u5982\u9700\u7f16\u5199\u914d\u7f6e\u7684\u65f6\u5019\u63d0\u4f9b\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\uff0c\u53ef\u67e5\u770b \u30102.7 JSON Schema \u4f7f\u7528\u3011","sidebar":"settings"},"settings/unifyresultsettings":{"id":"settings/unifyresultsettings","title":"10. \u89c4\u8303\u5316\u7ed3\u679c\u914d\u7f6e","description":"\u5982\u9700\u7f16\u5199\u914d\u7f6e\u7684\u65f6\u5019\u63d0\u4f9b\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\uff0c\u53ef\u67e5\u770b \u30102.7 JSON Schema \u4f7f\u7528\u3011","sidebar":"settings"},"settings/validationTypemessagesettings":{"id":"settings/validationTypemessagesettings","title":"3. \u9a8c\u8bc1\u6d88\u606f\u914d\u7f6e","description":"\u5982\u9700\u7f16\u5199\u914d\u7f6e\u7684\u65f6\u5019\u63d0\u4f9b\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\uff0c\u53ef\u67e5\u770b \u30102.7 JSON Schema \u4f7f\u7528\u3011","sidebar":"settings"},"signalr":{"id":"signalr","title":"24. \u5373\u65f6\u901a\u8baf","description":"24.1 \u4ec0\u4e48\u662f\u5373\u65f6\u901a\u8baf","sidebar":"docs"},"singlefile":{"id":"singlefile","title":"34.5. \u5355\u6587\u4ef6\u53d1\u5e03","description":"","sidebar":"docs"},"source":{"id":"source","title":"1.3 \u793a\u4f8b\u67b6\u6784\u8bf4\u660e","description":"1.3.1 \u793a\u4f8b\u67b6\u6784","sidebar":"docs"},"specification-document":{"id":"specification-document","title":"6. \u89c4\u8303\u5316\u63a5\u53e3\u6587\u6863","description":"","sidebar":"docs"},"split-db":{"id":"split-db","title":"9.28 \u5206\u8868\u5206\u5e93","description":"","sidebar":"docs"},"sqlsugar":{"id":"sqlsugar","title":"10.1 SqlSugar \u96c6\u6210","description":"\u7531\u4e8e SqlSugar \u9ad8\u901f\u53d1\u5c55\uff0c\u65b0\u7248\u672c\u5e26\u6765\u4e86\u8bf8\u591a\u7279\u6027\uff0c\u800c Furion.Extras.DatabaseAccessor.SqlSugar \u62d3\u5c55\u5305\u66f4\u65b0\u4e0d\u53ca\u65f6\u5bfc\u81f4\u4e0d\u80fd\u7b2c\u4e00\u65f6\u95f4\u4f53\u9a8c\u65b0\u7279\u6027\u3002","sidebar":"docs"},"sqlsugar-old":{"id":"sqlsugar-old","title":"10.1. SqlSugar \u96c6\u6210","description":"\u5728 Furion \u5305\u4e2d\u9ed8\u8ba4\u96c6\u6210\u4e86 EFCore\uff0c\u5982\u679c\u4e0d\u4f7f\u7528 EFCore\uff0c\u53ef\u5b89\u88c5\u7eaf\u51c0\u7248 Furion.Pure \u4ee3\u66ff Furion\uff0c\u8fd9\u6837\u53ef\u4ee5\u5ffd\u7565\u672c\u7ae0\u8282\u76f4\u63a5\u6309\u7167 SqlSugar \u5b98\u65b9\u6587\u6863\u4f7f\u7528\u3002"},"target":{"id":"target","title":"1.8 \u8def\u7ebf\u56fe","description":"","sidebar":"docs"},"template":{"id":"template","title":"2.2 \u5b98\u65b9\u811a\u624b\u67b6","description":"","sidebar":"docs"},"tran":{"id":"tran","title":"9.26 \u4e8b\u52a1\u548c\u5de5\u4f5c\u5355\u5143","description":"","sidebar":"docs"},"unittest":{"id":"unittest","title":"36.1 \u5355\u5143/\u96c6\u6210\u6d4b\u8bd5","description":"","sidebar":"docs"},"upgrade":{"id":"upgrade","title":"1.6 \u66f4\u65b0\u65e5\u5fd7","description":"","sidebar":"docs"},"view-engine":{"id":"view-engine","title":"17. \u89c6\u56fe\u5f15\u64ce","description":"17.1 \u5173\u4e8e\u89c6\u56fe\u5f15\u64ce","sidebar":"docs"},"virtual-deploy":{"id":"virtual-deploy","title":"34.4 \u4e8c\u7ea7\u865a\u62df\u76ee\u5f55\u90e8\u7f72","description":"","sidebar":"docs"},"vsfast":{"id":"vsfast","title":"2.8 Visual Studio \u9ad8\u6548\u7387","description":"","sidebar":"docs"}}}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/937eda02.d35467da.js b/handbook/build/assets/js/937eda02.d35467da.js new file mode 100644 index 00000000000..3b737a9a0ba --- /dev/null +++ b/handbook/build/assets/js/937eda02.d35467da.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6526],{3905:function(e,t,n){n.d(t,{Zo:function(){return c},kt:function(){return d}});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),d=i,h=u["".concat(l,".").concat(d)]||u[d]||m[d]||o;return n?a.createElement(h,r(r({ref:t},c),{},{components:n})):a.createElement(h,r({ref:t},c))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,r[1]=s;for(var p=2;pJSON Schema",id:"271-\u5173\u4e8e-json-schema",level:2},{value:"2.7.2 \u5b66\u4e60 JSON Schema \u7f16\u5199",id:"272-\u5b66\u4e60-json-schema-\u7f16\u5199",level:2},{value:"2.7.3 \u6846\u67b6\u63d0\u4f9b",id:"273-\u6846\u67b6\u63d0\u4f9b",level:2},{value:"2.7.4 \u5982\u4f55\u4f7f\u7528",id:"274-\u5982\u4f55\u4f7f\u7528",level:2},{value:"2.7.5 JSON Schema \u5931\u6548\u89e3\u51b3",id:"275-json-schema-\u5931\u6548\u89e3\u51b3",level:2},{value:"2.7.5.1 Visual Studio",id:"2751-visual-studio",level:3},{value:"2.7.5.2 Visual Studio Code",id:"2752-visual-studio-code",level:3},{value:"2.7.6 \u5982\u4f55\u66f4\u65b0 JSON Schema",id:"276-\u5982\u4f55\u66f4\u65b0-json-schema",level:2},{value:"2.7.6.1 Visual Studio",id:"2761-visual-studio",level:3},{value:"2.7.6.2 Visual Studio Code",id:"2762-visual-studio-code",level:3},{value:"2.7.7 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"277-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:u};function h(e){var t=e.components,n=(0,i.Z)(e,s);return(0,o.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"271-\u5173\u4e8e-json-schema"},"2.7.1 \u5173\u4e8e ",(0,o.kt)("inlineCode",{parentName:"h2"},"JSON Schema")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"JSON Schema")," \u662f\u7528\u4e8e\u9a8c\u8bc1 ",(0,o.kt)("inlineCode",{parentName:"p"},"JSON")," \u6570\u636e\u7ed3\u6784\u7684\u5f3a\u5927\u5de5\u5177\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"Schema")," \u53ef\u4ee5\u7406\u89e3\u4e3a\u6a21\u5f0f\u6216\u8005\u89c4\u5219\u3002"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u6709\u4e86 ",(0,o.kt)("inlineCode",{parentName:"strong"},"JSON Schema")," \u518d\u4e5f\u4e0d\u6015\u914d\u7f6e\u5199\u9519\u7684\u60c5\u51b5\u4e86\uff01")),(0,o.kt)("h2",{id:"272-\u5b66\u4e60-json-schema-\u7f16\u5199"},"2.7.2 \u5b66\u4e60 ",(0,o.kt)("inlineCode",{parentName:"h2"},"JSON Schema")," \u7f16\u5199"),(0,o.kt)("p",null,"\u4f5c\u4e3a\u4e00\u4e2a\u6846\u67b6\u63d0\u4f9b ",(0,o.kt)("inlineCode",{parentName:"p"},"JSON Schema")," \u662f\u975e\u5e38\u6709\u5fc5\u8981\u7684\uff0c\u53ef\u4ee5\u8ba9\u5f00\u53d1\u8005\u5728\u6dfb\u52a0\u914d\u7f6e\u7684\u65f6\u5019\u80fd\u591f\u6709\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\u529f\u80fd\uff0c\u5982\u679c\u60f3\u5b66\u4e60 ",(0,o.kt)("inlineCode",{parentName:"p"},"JSON Schema")," \u7f16\u5199\u53ef\u4ee5\u67e5\u770b\u4ee5\u4e0b\u6587\u6863\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://json-schema.apifox.cn/"},"https://json-schema.apifox.cn/")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://zhuanlan.zhihu.com/p/355175938"},"https://zhuanlan.zhihu.com/p/355175938"))),(0,o.kt)("p",null,"\u8fd9\u91cc\u4e5f\u63d0\u4f9b\u4e00\u4e2a\u975e\u5e38\u4fbf\u6377\u7684\u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"p"},"JSON Schema")," \u7684\u5728\u7ebf\u7f51\u7ad9\uff0c\u53ef\u4ee5\u6839\u636e ",(0,o.kt)("inlineCode",{parentName:"p"},"json")," \u6587\u4ef6\u5185\u5bb9\u81ea\u52a8\u751f\u6210 ",(0,o.kt)("inlineCode",{parentName:"p"},"JSON Schema"),"\uff0c\u4e4b\u540e\u8fdb\u884c\u5c0f\u91cf\u4fee\u6539\u5373\u53ef\uff1a"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://hellosean1025.github.io/json-schema-visual-editor/"},"https://hellosean1025.github.io/json-schema-visual-editor/")),(0,o.kt)("h2",{id:"273-\u6846\u67b6\u63d0\u4f9b"},"2.7.3 \u6846\u67b6\u63d0\u4f9b"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u5b8c\u6574\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u548c ",(0,o.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"JSON Schema")," \u6587\u4ef6\uff0c\u901a\u8fc7\u8be5\u6587\u4ef6\u53ef\u4ee5\u5728\u7f16\u5199\u914d\u7f6e\u6587\u4ef6\u65f6\u63d0\u4f9b\u5b8c\u6574\u7684\u667a\u80fd\u63d0\u793a\u548c\u6821\u9a8c\u3002"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("a",{parentName:"strong",href:"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"},"\u67e5\u770b ",(0,o.kt)("inlineCode",{parentName:"a"},"JSON Schema")," \u6e90\u7801\u5730\u5740"))),(0,o.kt)("h2",{id:"274-\u5982\u4f55\u4f7f\u7528"},"2.7.4 \u5982\u4f55\u4f7f\u7528"),(0,o.kt)("p",null,"\u4f7f\u7528\u65b9\u5f0f\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},".json")," \u6587\u4ef6\u7684\u5934\u90e8\u6dfb\u52a0 ",(0,o.kt)("inlineCode",{parentName:"p"},'"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",')," \u5373\u53ef\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2}",showLineNumbers:!0,"{2}":!0},'{\n "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",\n\n "Logging": {\n "LogLevel": {\n "Default": "Information",\n "Microsoft": "Warning",\n "Microsoft.Hosting.Lifetime": "Information",\n "Microsoft.EntityFrameworkCore": "Information",\n "Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"\n }\n },\n "AllowedHosts": "*"\n}\n')),(0,o.kt)("img",{src:(0,r.Z)("img/js1.png")}),(0,o.kt)("img",{src:(0,r.Z)("img/js2.png")}),(0,o.kt)("img",{src:(0,r.Z)("img/js3.png")}),(0,o.kt)("img",{src:(0,r.Z)("img/js4.png")}),(0,o.kt)("img",{src:(0,r.Z)("img/js7.png")}),(0,o.kt)("h2",{id:"275-json-schema-\u5931\u6548\u89e3\u51b3"},"2.7.5 ",(0,o.kt)("inlineCode",{parentName:"h2"},"JSON Schema")," \u5931\u6548\u89e3\u51b3"),(0,o.kt)("p",null,"\u5982\u679c\u6dfb\u52a0\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},'"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",')," \u4f9d\u7136\u65e0\u6cd5\u8fdb\u884c\u667a\u80fd\u63d0\u793a\u6821\u9a8c\uff0c\u53ef\u5c1d\u8bd5\u5173\u95ed ",(0,o.kt)("inlineCode",{parentName:"p"},".json")," \u6587\u4ef6\u518d\u91cd\u65b0\u6253\u5f00\u3002"),(0,o.kt)("p",null,"\u5982\u679c\u4e0a\u9762\u6b65\u9aa4\u4f9d\u7136\u65e0\u6548\uff0c\u90a3\u4e48\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4e0b\u9762\u65b9\u5f0f\uff1a"),(0,o.kt)("h3",{id:"2751-visual-studio"},"2.7.5.1 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Visual Studio")),(0,o.kt)("img",{src:(0,r.Z)("img/js5.png")}),(0,o.kt)("img",{src:(0,r.Z)("img/js6.png")}),(0,o.kt)("h3",{id:"2752-visual-studio-code"},"2.7.5.2 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Visual Studio Code")),(0,o.kt)("p",null,"\u91cd\u542f ",(0,o.kt)("inlineCode",{parentName:"p"},"Visual Studio Code")," \u5373\u53ef\u3002"),(0,o.kt)("h2",{id:"276-\u5982\u4f55\u66f4\u65b0-json-schema"},"2.7.6 \u5982\u4f55\u66f4\u65b0 ",(0,o.kt)("inlineCode",{parentName:"h2"},"JSON Schema")),(0,o.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"JSON Schema")," \u5728\u7b2c\u4e00\u6b21\u83b7\u53d6\u4e4b\u540e\u4f1a\u81ea\u52a8\u7f13\u5b58\u8d77\u6765\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4 ",(0,o.kt)("inlineCode",{parentName:"p"},".json")," \u6587\u4ef6\u63d0\u793a\u9519\u8bef\uff0c\u8fd9\u4e2a\u65f6\u5019\u53ea\u9700\u8981\u5220\u9664\u7f13\u5b58\u5373\u53ef\u3002"),(0,o.kt)("h3",{id:"2761-visual-studio"},"2.7.6.1 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Visual Studio")),(0,o.kt)("p",null,"\u6253\u5f00\u7535\u8111\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"\u8fd0\u884c")," \u5e76\u8f93\u5165 ",(0,o.kt)("inlineCode",{parentName:"p"},"%AppData%"),"\uff0c\u4e4b\u540e\u8fdb\u5165 ",(0,o.kt)("inlineCode",{parentName:"p"},"C:\\Users\\\u4f60\u7684\u7535\u8111\u7528\u6237\u540d\\AppData\\Local\\Microsoft\\VisualStudio")," \u4e0b"),(0,o.kt)("img",{src:(0,r.Z)("img/js8.png")}),(0,o.kt)("img",{src:(0,r.Z)("img/js9.png")}),(0,o.kt)("img",{src:(0,r.Z)("img/js10.png")}),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u4e4b\u540e\u5220\u9664 ",(0,o.kt)("inlineCode",{parentName:"strong"},"http/https")," \u5f00\u5934\u7684\u6587\u4ef6\u5373\u53ef\u3002")),(0,o.kt)("h3",{id:"2762-visual-studio-code"},"2.7.6.2 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Visual Studio Code")),(0,o.kt)("p",null,"\u540c\u4e0a\uff0c\u8fd0\u884c\u8fdb\u5165 ",(0,o.kt)("inlineCode",{parentName:"p"},"%AppData%"),"\uff0c\u4e4b\u540e\u8fdb\u5165\u4e0b\u5217\u8def\u5f84\uff1a",(0,o.kt)("inlineCode",{parentName:"p"},"C:\\Users\\\u4f60\u7684\u7535\u8111\u7528\u6237\u540d\\AppData\\Roaming\\Code\\User\\globalStorage\\vscode.json-language-features\\json-schema-cache")),(0,o.kt)("img",{src:(0,r.Z)("img/js11.png")}),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u4e4b\u540e\u5220\u9664\u8fd9\u4e9b\u6587\u4ef6\u5373\u53ef\u3002")),(0,o.kt)("h2",{id:"277-\u53cd\u9988\u4e0e\u5efa\u8bae"},"2.7.7 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,o.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/9523.d6eb3b71.js b/handbook/build/assets/js/9523.d6eb3b71.js new file mode 100644 index 00000000000..4ced8cb715c --- /dev/null +++ b/handbook/build/assets/js/9523.d6eb3b71.js @@ -0,0 +1 @@ +(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9523],{2503:function(e,t,n){"use strict";n.d(t,{Z:function(){return d}});var r=n(3117),a=n(102),o=n(7294),i=n(6010),l=n(5999),c=n(6668),s="anchorWithStickyNavbar_LWe7",u="anchorWithHideOnScrollNavbar_WYt5",m=["as","id"];function d(e){var t=e.as,n=e.id,d=(0,a.Z)(e,m),p=(0,c.L)().navbar.hideOnScroll;return"h1"!==t&&n?o.createElement(t,(0,r.Z)({},d,{className:(0,i.Z)("anchor",p?u:s),id:n}),d.children,o.createElement("a",{className:"hash-link",href:"#"+n,title:(0,l.I)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"\u200b")):o.createElement(t,(0,r.Z)({},d,{id:void 0}))}},9523:function(e,t,n){"use strict";n.d(t,{Z:function(){return Ne}});var r=n(3117),a=n(7294),o=n(102),i=n(5742),l=["mdxType","originalType"];var c=n(2389),s=n(6010),u=n(2949),m=n(6668);function d(){var e=(0,m.L)().prism,t=(0,u.I)().colorMode,n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var p=n(5281),f=n(7802),h=n(7594),v=n.n(h),g=(0,f.Z)(/title=(["'])(.*?)\1/,{quote:1,title:2}),y=(0,f.Z)(/\{([\d,-]+)\}/,{range:1}),b={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function k(e,t){var n=e.map((function(e){var n=b[e],r=n.start,a=n.end;return"(?:"+r+"\\s*("+t.flatMap((function(e){var t,n;return[e.line,null==(t=e.block)?void 0:t.start,null==(n=e.block)?void 0:n.end].filter(Boolean)})).join("|")+")\\s*"+a+")"})).join("|");return new RegExp("^\\s*(?:"+n+")\\s*$")}function E(e,t){var n=e.replace(/\n$/,""),r=t.language,a=t.magicComments,o=t.metastring;if(o&&y.test(o)){var i=o.match(y).groups.range;if(0===a.length)throw new Error("A highlight range has been given in code block's metastring (``` "+o+"), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.");var l=a[0].className,c=v()(i).filter((function(e){return e>0})).map((function(e){return[e-1,[l]]}));return{lineClassNames:Object.fromEntries(c),code:n}}if(void 0===r)return{lineClassNames:{},code:n};for(var s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return k(["js","jsBlock"],t);case"jsx":case"tsx":return k(["js","jsBlock","jsx"],t);case"html":return k(["js","jsBlock","html"],t);case"python":case"py":case"bash":return k(["bash"],t);case"markdown":case"md":return k(["html","jsx","bash"],t);default:return k(Object.keys(b),t)}}(r,a),u=n.split("\n"),m=Object.fromEntries(a.map((function(e){return[e.className,{start:0,range:""}]}))),d=Object.fromEntries(a.filter((function(e){return e.line})).map((function(e){var t=e.className;return[e.line,t]}))),p=Object.fromEntries(a.filter((function(e){return e.block})).map((function(e){var t=e.className;return[e.block.start,t]}))),f=Object.fromEntries(a.filter((function(e){return e.block})).map((function(e){var t=e.className;return[e.block.end,t]}))),h=0;h0&&e[n-1]===t?e:e.concat(t)},M=function(e,t){var n=e.plain,r=Object.create(null),a=e.styles.reduce((function(e,n){var r=n.languages,a=n.style;return r&&!r.includes(t)||n.types.forEach((function(t){var n=z({},e[t],a);e[t]=n})),e}),r);return a.root=n,a.plain=z({},n,{backgroundColor:null}),a};function H(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}var P=function(e){function t(){for(var t=this,n=[],r=arguments.length;r--;)n[r]=arguments[r];e.apply(this,n),S(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?M(e.theme,e.language):void 0;return t.themeDict=n})),S(this,"getLineProps",(function(e){var n=e.key,r=e.className,a=e.style,o=z({},H(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),i=t.getThemeDict(t.props);return void 0!==i&&(o.style=i.plain),void 0!==a&&(o.style=void 0!==o.style?z({},o.style,a):a),void 0!==n&&(o.key=n),r&&(o.className+=" "+r),o})),S(this,"getStyleForToken",(function(e){var n=e.types,r=e.empty,a=n.length,o=t.getThemeDict(t.props);if(void 0!==o){if(1===a&&"plain"===n[0])return r?{display:"inline-block"}:void 0;if(1===a&&!r)return o[n[0]];var i=r?{display:"inline-block"}:{},l=n.map((function(e){return o[e]}));return Object.assign.apply(Object,[i].concat(l))}})),S(this,"getTokenProps",(function(e){var n=e.key,r=e.className,a=e.style,o=e.token,i=z({},H(e,["key","className","style","token"]),{className:"token "+o.types.join(" "),children:o.content,style:t.getStyleForToken(o),key:void 0});return void 0!==a&&(i.style=void 0!==i.style?z({},i.style,a):a),void 0!==n&&(i.key=n),r&&(i.className+=" "+r),i})),S(this,"tokenize",(function(e,t,n,r){var a={code:t,grammar:n,language:r,tokens:[]};e.hooks.run("before-tokenize",a);var o=a.tokens=e.tokenize(a.code,a.grammar,a.language);return e.hooks.run("after-tokenize",a),o}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,r=e.code,a=e.children,o=this.getThemeDict(this.props),i=t.languages[n];return a({tokens:function(e){for(var t=[[]],n=[e],r=[0],a=[e.length],o=0,i=0,l=[],c=[l];i>-1;){for(;(o=r[i]++)0?u:["plain"],s=m):(u=O(u,m.type),m.alias&&(u=O(u,m.alias)),s=m.content),"string"==typeof s){var d=s.split(A),p=d.length;l.push({types:u,content:d[0]});for(var f=1;f0&&(o=a.getRangeAt(0)),t.append(n),n.select(),n.selectionStart=0,n.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}n.remove(),o&&(a.removeAllRanges(),a.addRange(o)),r&&r.focus()}(t),i(!0),l.current=window.setTimeout((function(){i(!1)}),1e3)}),[t]);return(0,a.useEffect)((function(){return function(){return window.clearTimeout(l.current)}}),[]),a.createElement("button",{type:"button","aria-label":o?(0,F.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,F.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,F.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",n,G.copyButton,o&&G.copyButtonCopied),onClick:c},a.createElement("span",{className:G.copyButtonIcons,"aria-hidden":"true"},a.createElement("svg",{className:G.copyButtonIcon,viewBox:"0 0 24 24"},a.createElement("path",{d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})),a.createElement("svg",{className:G.copyButtonSuccessIcon,viewBox:"0 0 24 24"},a.createElement("path",{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))))}var $="wordWrapButtonIcon_Bwma",Y="wordWrapButtonEnabled_EoeP";function Q(e){var t=e.className,n=e.onClick,r=e.isEnabled,o=(0,F.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return a.createElement("button",{type:"button",onClick:n,className:(0,s.Z)("clean-btn",t,r&&Y),"aria-label":o,title:o},a.createElement("svg",{className:$,viewBox:"0 0 24 24","aria-hidden":"true"},a.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})))}function J(e){var t,n,o,i,l,c,u,p,f,h,v,y=e.children,b=e.className,k=void 0===b?"":b,N=e.metastring,C=e.title,Z=e.showLineNumbers,w=e.language,L=(0,m.L)().prism,x=L.defaultLanguage,S=L.magicComments,z=null!=(t=null!=w?w:null==(n=k.split(" ").find((function(e){return e.startsWith("language-")})))?void 0:n.replace(/language-/,""))?t:x,A=d(),I=(o=(0,a.useState)(!1),i=o[0],l=o[1],c=(0,a.useState)(!1),u=c[0],p=c[1],f=(0,a.useRef)(null),h=(0,a.useCallback)((function(){var e=f.current.querySelector("code");i?e.removeAttribute("style"):(e.style.whiteSpace="pre-wrap",e.style.overflowWrap="anywhere"),l((function(e){return!e}))}),[f,i]),v=(0,a.useCallback)((function(){var e=f.current,t=e.scrollWidth>e.clientWidth||f.current.querySelector("code").hasAttribute("style");p(t)}),[f]),j(f,v),(0,a.useEffect)((function(){v()}),[i,v]),(0,a.useEffect)((function(){return window.addEventListener("resize",v,{passive:!0}),function(){window.removeEventListener("resize",v)}}),[v]),{codeBlockRef:f,isEnabled:i,isCodeScrollable:u,toggle:h}),O=function(e){var t,n;return null!=(t=null==e||null==(n=e.match(g))?void 0:n.groups.title)?t:""}(N)||C,M=E(y,{metastring:N,language:z,magicComments:S}),H=M.lineClassNames,P=M.code,D=null!=Z?Z:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(N);return a.createElement(B,{as:"div",className:(0,s.Z)(k,z&&!k.includes("language-"+z)&&"language-"+z)},O&&a.createElement("div",{className:T.codeBlockTitle},O),a.createElement("div",{className:T.codeBlockContent},a.createElement(V,(0,r.Z)({},_,{theme:A,code:P,language:null!=z?z:"text"}),(function(e){var t=e.className,n=e.tokens,r=e.getLineProps,o=e.getTokenProps;return a.createElement("pre",{tabIndex:0,ref:I.codeBlockRef,className:(0,s.Z)(t,T.codeBlock,"thin-scrollbar")},a.createElement("code",{className:(0,s.Z)(T.codeBlockLines,D&&T.codeBlockLinesWithNumbering)},n.map((function(e,t){return a.createElement(q,{key:t,line:e,getLineProps:r,getTokenProps:o,classNames:H[t],showLineNumbers:D})}))))})),a.createElement("div",{className:T.buttonGroup},(I.isEnabled||I.isCodeScrollable)&&a.createElement(Q,{className:T.codeButton,onClick:function(){return I.toggle()},isEnabled:I.isEnabled}),a.createElement(U,{className:T.codeButton,code:P}))))}var K=["children"];function X(e){var t=e.children,n=(0,o.Z)(e,K),i=(0,c.Z)(),l=function(e){return a.Children.toArray(e).some((function(e){return(0,a.isValidElement)(e)}))?e:Array.isArray(e)?e.join(""):e}(t),s="string"==typeof l?J:Z;return a.createElement(s,(0,r.Z)({key:String(i)},n),l)}var ee=n(9960);var te=n(6043),ne="details_lb9f",re="isBrowser_bmU9",ae="collapsibleContent_i85q",oe=["summary","children"];function ie(e){return!!e&&("SUMMARY"===e.tagName||ie(e.parentElement))}function le(e,t){return!!e&&(e===t||le(e.parentElement,t))}function ce(e){var t=e.summary,n=e.children,i=(0,o.Z)(e,oe),l=(0,c.Z)(),u=(0,a.useRef)(null),m=(0,te.u)({initialState:!i.open}),d=m.collapsed,p=m.setCollapsed,f=(0,a.useState)(i.open),h=f[0],v=f[1];return a.createElement("details",(0,r.Z)({},i,{ref:u,open:h,"data-collapsed":d,className:(0,s.Z)(ne,l&&re,i.className),onMouseDown:function(e){ie(e.target)&&e.detail>1&&e.preventDefault()},onClick:function(e){e.stopPropagation();var t=e.target;ie(t)&&le(t,u.current)&&(e.preventDefault(),d?(p(!1),v(!0)):p(!0))}}),null!=t?t:a.createElement("summary",null,"Details"),a.createElement(te.z,{lazy:!1,collapsed:d,disableSSRStyle:!0,onCollapseTransitionEnd:function(e){p(e),v(!e)}},a.createElement("div",{className:ae},n)))}var se="details_b_Ee";function ue(e){var t=Object.assign({},e);return a.createElement(ce,(0,r.Z)({},t,{className:(0,s.Z)("alert alert--info",se,t.className)}))}var me=n(2503);function de(e){return a.createElement(me.Z,e)}var pe="containsTaskList_mC6p";var fe="img_ev3q";var he="admonition_LlT9",ve="admonitionHeading_tbUL",ge="admonitionIcon_kALy",ye="admonitionContent_S0QG";var be={note:{infimaClassName:"secondary",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:a.createElement(F.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:a.createElement(F.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:a.createElement(F.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:a.createElement(F.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 16 16"},a.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:a.createElement(F.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},ke={secondary:"note",important:"info",success:"tip",warning:"danger"};function Ee(e){var t,n=function(e){var t=a.Children.toArray(e),n=t.find((function(e){var t;return a.isValidElement(e)&&"mdxAdmonitionTitle"===(null==(t=e.props)?void 0:t.mdxType)})),r=a.createElement(a.Fragment,null,t.filter((function(e){return e!==n})));return{mdxAdmonitionTitle:n,rest:r}}(e.children),r=n.mdxAdmonitionTitle,o=n.rest;return Object.assign({},e,{title:null!=(t=e.title)?t:r,children:o})}var Ne={head:function(e){var t=a.Children.map(e.children,(function(e){return a.isValidElement(e)?function(e){var t;if(null!=(t=e.props)&&t.mdxType&&e.props.originalType){var n=e.props,r=(n.mdxType,n.originalType,(0,o.Z)(n,l));return a.createElement(e.props.originalType,r)}return e}(e):e}));return a.createElement(i.Z,e,t)},code:function(e){var t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return a.Children.toArray(e.children).every((function(e){var n;return"string"==typeof e&&!e.includes("\n")||(0,a.isValidElement)(e)&&t.includes(null==(n=e.props)?void 0:n.mdxType)}))?a.createElement("code",e):a.createElement(X,e)},a:function(e){return a.createElement(ee.Z,e)},pre:function(e){var t;return a.createElement(X,(0,a.isValidElement)(e.children)&&"code"===(null==(t=e.children.props)?void 0:t.originalType)?e.children.props:Object.assign({},e))},details:function(e){var t=a.Children.toArray(e.children),n=t.find((function(e){var t;return a.isValidElement(e)&&"summary"===(null==(t=e.props)?void 0:t.mdxType)})),o=a.createElement(a.Fragment,null,t.filter((function(e){return e!==n})));return a.createElement(ue,(0,r.Z)({},e,{summary:n}),o)},ul:function(e){return a.createElement("ul",(0,r.Z)({},e,{className:(t=e.className,(0,s.Z)(t,(null==t?void 0:t.includes("contains-task-list"))&&pe))}));var t},img:function(e){return a.createElement("img",(0,r.Z)({loading:"lazy"},e,{className:(t=e.className,(0,s.Z)(t,fe))}));var t},h1:function(e){return a.createElement(de,(0,r.Z)({as:"h1"},e))},h2:function(e){return a.createElement(de,(0,r.Z)({as:"h2"},e))},h3:function(e){return a.createElement(de,(0,r.Z)({as:"h3"},e))},h4:function(e){return a.createElement(de,(0,r.Z)({as:"h4"},e))},h5:function(e){return a.createElement(de,(0,r.Z)({as:"h5"},e))},h6:function(e){return a.createElement(de,(0,r.Z)({as:"h6"},e))},admonition:function(e){var t=Ee(e),n=t.children,r=t.type,o=t.title,i=t.icon,l=function(e){var t,n=null!=(t=ke[e])?t:e;return be[n]||(console.warn('No admonition config found for admonition type "'+n+'". Using Info as fallback.'),be.info)}(r),c=null!=o?o:l.label,u=l.iconComponent,m=null!=i?i:a.createElement(u,null);return a.createElement("div",{className:(0,s.Z)(p.k.common.admonition,p.k.common.admonitionType(e.type),"alert","alert--"+l.infimaClassName,he)},a.createElement("div",{className:ve},a.createElement("span",{className:ge},m),c),a.createElement("div",{className:ye},n))},mermaid:function(){return null}}},7594:function(e,t){function n(e){let t,n=[];for(let r of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(r))n.push(parseInt(r,10));else if(t=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,r,a,o]=t;if(r&&o){r=parseInt(r),o=parseInt(o);const e=r=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),u=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=u(e.components);return a.createElement(s.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=u(t),c=r,v=m["".concat(s,".").concat(c)]||m[c]||d[c]||o;return t?a.createElement(v,i(i({ref:n},p),{},{components:t})):a.createElement(v,i({ref:n},p))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var u=2;uSaveChanges \u4e8b\u4ef6",id:"9222-\u5173\u4e8e-savechanges-\u4e8b\u4ef6",level:2},{value:"9.22.3 \u5982\u4f55\u5b9e\u73b0",id:"9223-\u5982\u4f55\u5b9e\u73b0",level:2},{value:"9.22.3.1 \u6570\u636e\u5e93\u5ba1\u8ba1\u65e5\u5fd7",id:"92231-\u6570\u636e\u5e93\u5ba1\u8ba1\u65e5\u5fd7",level:3},{value:"9.22.3.2 \u6267\u884c sql \u5ba1\u8ba1\u65e5\u5fd7",id:"92232-\u6267\u884c-sql-\u5ba1\u8ba1\u65e5\u5fd7",level:3},{value:"9.22.3.3 \u8bf7\u6c42\u5ba1\u8ba1\u65e5\u5fd7",id:"92233-\u8bf7\u6c42\u5ba1\u8ba1\u65e5\u5fd7",level:3},{value:"9.22.4 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"9224-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],m={toc:d};function c(e){var n=e.components,t=(0,r.Z)(e,i);return(0,o.kt)("wrapper",(0,a.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"9221-\u5ba1\u8ba1\u65e5\u5fd7"},"9.22.1 \u5ba1\u8ba1\u65e5\u5fd7"),(0,o.kt)("p",null,"\u5728\u4e00\u4e2a\u4f01\u4e1a\u5e94\u7528\u7cfb\u7edf\u4e2d\uff0c\u7528\u6237\u5bf9\u7cfb\u7edf\u6240\u6709\u7684\u64cd\u4f5c\u5305\u62ec\u8bf7\u6c42\u3001\u6570\u636e\u5e93\u64cd\u4f5c\u7b49\u7b49\u90fd\u5e94\u8be5\u8bb0\u5f55\u8d77\u6765\uff0c\u90a3\u4e48\u8fd9\u4e9b\u65e5\u5fd7\u6211\u4eec\u79f0\u4e3a\u64cd\u4f5c\u65e5\u5fd7\uff0c\u4e5f\u53ef\u4ee5\u8bf4\u5ba1\u8ba1\u65e5\u5fd7\u3002"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u901a\u5e38\u6765\u8bf4\uff0c\u6211\u4eec\u5ba1\u8ba1\u65e5\u5fd7\u66f4\u591a\u6307\u7684\u662f\u6570\u636e\u5e93\u7684\u64cd\u4f5c\u8bb0\u5f55"),"\u3002"),(0,o.kt)("p",null,"\u5ba1\u8ba1\u65e5\u5fd7\u4e00\u822c\u4f1a\u8bb0\u5f55\u4ee5\u4e0b\u4e09\u4e2a\u64cd\u4f5c\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"\u65b0\u589e\u64cd\u4f5c"),"\uff1a\u8bb0\u5f55\u67d0\u67d0\u4eba\u5728\u67d0\u67d0\u65f6\u95f4\u5bf9\u54ea\u4e2a\u8868\u65b0\u589e\u4e86\u4ec0\u4e48\u6570\u636e"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"\u66f4\u65b0\u64cd\u4f5c"),"\uff1a\u8bb0\u5f55\u67d0\u67d0\u4eba\u5728\u67d0\u67d0\u65f6\u95f4\u5bf9\u54ea\u4e2a\u8868\u7684\u54ea\u4e9b\u6570\u636e\u505a\u4e86\u66f4\u6539\uff0c\u8bb0\u5f55\u66f4\u6539\u524d\u7684\u503c\u548c\u66f4\u6539\u540e\u7684\u503c"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"\u5220\u9664\u64cd\u4f5c"),"\uff1a\u8bb0\u5f55\u67d0\u67d0\u4eba\u5728\u67d0\u67d0\u65f6\u95f4\u5bf9\u54ea\u4e2a\u8868\u5220\u9664\u4e86\u4ec0\u4e48\u6570\u636e")),(0,o.kt)("h2",{id:"9222-\u5173\u4e8e-savechanges-\u4e8b\u4ef6"},"9.22.2 \u5173\u4e8e ",(0,o.kt)("inlineCode",{parentName:"h2"},"SaveChanges")," \u4e8b\u4ef6"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u4e3a\u6240\u6709 ",(0,o.kt)("inlineCode",{parentName:"p"},"AppDbContext")," \u5b50\u7c7b\u90fd\u63d0\u4f9b\u4e86\u4e09\u4e2a\u53ef\u91cd\u5199\u7684\u65b9\u6cd5\uff0c\u8fd9\u4e09\u4e2a\u65b9\u6cd5\u5206\u522b\u7531\u4e09\u4e2a\u4e8b\u4ef6\u89e6\u53d1\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"\u63d0\u4ea4\u66f4\u6539\u4e4b\u524d SavingChanges \u4e8b\u4ef6"),"\uff1a\u89e6\u53d1 ",(0,o.kt)("inlineCode",{parentName:"li"},"void SavingChangesEvent(DbContextEventData eventData, InterceptionResult result)")," \u65b9\u6cd5"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"\u63d0\u4ea4\u66f4\u6539\u4e4b\u540e SavedChanges \u4e8b\u4ef6"),"\uff1a\u89e6\u53d1 ",(0,o.kt)("inlineCode",{parentName:"li"},"void SavedChangesEvent(SaveChangesCompletedEventData eventData, int result)")," \u65b9\u6cd5"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"\u63d0\u4ea4\u66f4\u6539\u5931\u8d25 SaveChangesFailed \u4e8b\u4ef6"),"\uff1a\u89e6\u53d1 ",(0,o.kt)("inlineCode",{parentName:"li"},"void SaveChangesFailedEvent(DbContextErrorEventData eventData)")," \u65b9\u6cd5")),(0,o.kt)("p",null,"\u901a\u8fc7\u8fd9\u4e09\u4e2a\u4e8b\u4ef6\u6211\u4eec\u5c31\u53ef\u4ee5\u6355\u83b7\u6240\u6709\u66f4\u6539\u7684\u5b9e\u4f53\u7136\u540e\u4fdd\u5b58\u5230\u6570\u636e\u5e93\u5ba1\u8ba1\u65e5\u5fd7\u4e2d\u3002"),(0,o.kt)("h2",{id:"9223-\u5982\u4f55\u5b9e\u73b0"},"9.22.3 \u5982\u4f55\u5b9e\u73b0"),(0,o.kt)("h3",{id:"92231-\u6570\u636e\u5e93\u5ba1\u8ba1\u65e5\u5fd7"},"9.22.3.1 \u6570\u636e\u5e93\u5ba1\u8ba1\u65e5\u5fd7"),(0,o.kt)("p",null,"\u6211\u4eec\u53ea\u9700\u8981\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"AppDbContext")," \u5b50\u7c7b\u4e2d\u91cd\u5199 ",(0,o.kt)("inlineCode",{parentName:"p"},"SavingChanges")," \u4e8b\u4ef6\u5bf9\u5e94\u65b9\u6cd5\u5373\u53ef\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {23}",showLineNumbers:!0,"":!0,"{23}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing System;\nusing System.Linq;\nusing System.Security.AccessControl;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("Sqlite3ConnectionString")]\n public class FurionDbContext : AppDbContext\n {\n public FurionDbContext(DbContextOptions options) : base(options)\n {\n }\n\n /// \n /// \u91cd\u5199\u4fdd\u5b58\u4e4b\u524d\u4e8b\u4ef6\n /// \n /// \n /// \n protected override void SavingChangesEvent(DbContextEventData eventData, InterceptionResult result)\n {\n // \u83b7\u53d6\u5f53\u524d\u4e8b\u4ef6\u5bf9\u5e94\u4e0a\u4e0b\u6587\n var dbContext = eventData.Context;\n\n // \u5f3a\u5236\u91cd\u65b0\u68c0\u67e5\u4e00\u8fb9\u5b9e\u4f53\u66f4\u6539\u4fe1\u606f\n // dbContext.ChangeTracker.DetectChanges();\n\n // \u83b7\u53d6\u6240\u6709\u66f4\u6539\uff0c\u5220\u9664\uff0c\u65b0\u589e\u7684\u5b9e\u4f53\uff0c\u4f46\u6392\u9664\u5ba1\u8ba1\u5b9e\u4f53\uff08\u907f\u514d\u6b7b\u5faa\u73af\uff09\n var entities = dbContext.ChangeTracker.Entries()\n .Where(u => u.Entity.GetType() != typeof(Audit) && (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added))\n .ToList();\n\n // \u901a\u8fc7\u8bf7\u6c42\u4e2d\u83b7\u53d6\u5f53\u524d\u64cd\u4f5c\u4eba\n var userId = App.GetService().HttpContext.Items["UserId"];\n\n // \u83b7\u53d6\u6240\u6709\u5df2\u66f4\u6539\u7684\u5b9e\u4f53\n foreach (var entity in entities)\n {\n // \u83b7\u53d6\u5b9e\u4f53\u7c7b\u578b\n var entityType = entity.Entity.GetType();\n\n // \u83b7\u53d6\u6240\u6709\u5b9e\u4f53\u6709\u6548\u5c5e\u6027\uff0c\u6392\u9664 [NotMapper] \u5c5e\u6027\n var props = entity.OriginalValues.Properties;\n\n // \u83b7\u53d6\u5b9e\u4f53\u5f53\u524d\uff08\u73b0\u5728\uff09\u7684\u503c\n var currentValues = entity.CurrentValues;\n\n // \u83b7\u53d6\u6570\u636e\u5e93\u4e2d\u5b9e\u4f53\u7684\u503c\n var databaseValues = entity.GetDatabaseValues();\n\n // \u904d\u5386\u6240\u6709\u5c5e\u6027\n foreach (var prop in props)\n {\n // \u83b7\u53d6\u5c5e\u6027\u540d\n var propName = prop.Name;\n\n // \u83b7\u53d6\u73b0\u5728\u7684\u5b9e\u4f53\u503c\n var newValue = currentValues[propName];\n\n object oldValue = null;\n // \u5982\u679c\u662f\u65b0\u589e\u6570\u636e\uff0c\u5219 databaseValues \u4e3a\u7a7a\uff0c\u6240\u4ee5\u9700\u8981\u5224\u65ad\u4e00\u4e0b\n if (databaseValues != null)\n {\n oldValue = databaseValues[propName];\n }\n\n // \u63d2\u5165\u5ba1\u8ba1\u65e5\u5fd7\u8868\uff0cAudit \u662f\u4f60\u81ea\u5b9a\u4e49\u7684\u5b9e\u4f53\n dbContext.Set().Add(new Audit\n {\n Table = entityType.Name, // \u8868\u540d\n Column = propName, // \u66f4\u65b0\u7684\u5217\n NewValue = newValue, // \u65b0\u503c\n OldValue = oldValue, // \u65e7\u503c\n CreatedTime = DateTime.Now, // \u64cd\u4f5c\u65f6\u95f4\n UserId = userId, // \u64cd\u4f5c\u4eba\n Operate = entity.State.ToString() // \u64cd\u4f5c\u65b9\u5f0f\uff1a\u65b0\u589e\u3001\u66f4\u65b0\u3001\u5220\u9664\n });\n }\n }\n }\n }\n}\n')),(0,o.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u5982\u679c\u5bf9\u6027\u80fd\u6709\u6240\u8981\u6c42\uff0c\u90a3\u4e48\u5efa\u8bae\u5ba1\u8ba1\u65e5\u5fd7\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"\u65e5\u5fd7\u7ec4\u4ef6")," \u5199\u5165\u6570\u636e\u5e93\uff0c\u5982\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"Nlog\u3001Log4Net")," \u8fd9\u4e9b\u7b49\uff1a"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u63d2\u5165\u5ba1\u8ba1\u65e5\u5fd7\u8868\ndbContext.Set().Add(new Audit\n{\n Table = entityType.Name, // \u8868\u540d\n Column = propName, // \u66f4\u65b0\u7684\u5217\n newValue = newValue, // \u65b0\u503c\n OldValue = oldValue, // \u65e7\u503c\n CreatedTime = DateTime.Now, // \u64cd\u4f5c\u65f6\u95f4\n UserId = userId, // \u64cd\u4f5c\u4eba\n Operate = entity.State.ToString() // \u64cd\u4f5c\u65b9\u5f0f\uff1a\u65b0\u589e\u3001\u66f4\u65b0\u3001\u5220\u9664\n});\n")),(0,o.kt)("p",{parentName:"admonition"},"\u66ff\u6362\u4e3a\uff1a"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"logger.Information(JsonConvert.SerializeObject(new Audit\n{\n Table = entityType.Name, // \u8868\u540d\n Column = propName, // \u66f4\u65b0\u7684\u5217\n newValue = newValue, // \u65b0\u503c\n OldValue = oldValue, // \u65e7\u503c\n CreatedTime = DateTime.Now, // \u64cd\u4f5c\u65f6\u95f4\n UserId = userId, // \u64cd\u4f5c\u4eba\n Operate = entity.State.ToString() // \u64cd\u4f5c\u65b9\u5f0f\uff1a\u65b0\u589e\u3001\u66f4\u65b0\u3001\u5220\u9664\n}));\n"))),(0,o.kt)("p",null,"\u901a\u8fc7\u4e0a\u9762\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5bf9\u6570\u636e\u5e93\u6240\u6709\u7684\u65b0\u589e\u3001\u66f4\u65b0\u3001\u5220\u9664\u8fdb\u884c\u76d1\u63a7\u4e86\u3002"),(0,o.kt)("h3",{id:"92232-\u6267\u884c-sql-\u5ba1\u8ba1\u65e5\u5fd7"},"9.22.3.2 \u6267\u884c ",(0,o.kt)("inlineCode",{parentName:"h3"},"sql")," \u5ba1\u8ba1\u65e5\u5fd7"),(0,o.kt)("p",null,"\u4e3b\u8981\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"DbCommandInterceptor")," \u62e6\u622a\u5b9e\u73b0\uff0c\u5177\u4f53\u4f7f\u7528\u53ef\u67e5\u770b ",(0,o.kt)("a",{parentName:"p",href:"./dbcontext-Interceptor#92422-dbcommandinterceptor"},"\u6570\u636e\u5e93\u62e6\u622a\u5668 - DbCommandInterceptor"),"\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11}",showLineNumbers:!0,"":!0,"{11}":!0},"using Microsoft.EntityFrameworkCore.Diagnostics;\nusing System.Data.Common;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Furion.Web.Core\n{\n /// \n /// \u6267\u884c sql \u5ba1\u8ba1\n /// \n public sealed class SqlCommandAuditInterceptor : DbCommandInterceptor\n {\n public override InterceptionResult NonQueryExecuting(DbCommand command, CommandEventData eventData, InterceptionResult result)\n {\n // \u83b7\u53d6\u6267\u884c\u7684 sql \u8bed\u53e5\n var sql = command.CommandText;\n\n // \u83b7\u53d6\u6267\u884c\u7684 sql \u7c7b\u578b\uff0c\u662f sql \u8bed\u53e5\uff0c\u8fd8\u662f\u5b58\u50a8\u8fc7\u7a0b\uff0c\u8fd8\u662f\u5176\u4ed6\n var type = command.CommandType;\n\n // \u83b7\u53d6 sql \u4f20\u9012\u7684\u547d\u4ee4\u53c2\u6570\n var parameters = command.Parameters;\n\n // \u5199\u65e5\u5fd7~~~~\n\n return base.NonQueryExecuting(command, eventData, result);\n }\n\n public override ValueTask> NonQueryExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default)\n {\n // \u83b7\u53d6\u6267\u884c\u7684 sql \u8bed\u53e5\n var sql = command.CommandText;\n\n // \u83b7\u53d6\u6267\u884c\u7684 sql \u7c7b\u578b\uff0c\u662f sql \u8bed\u53e5\uff0c\u8fd8\u662f\u5b58\u50a8\u8fc7\u7a0b\uff0c\u8fd8\u662f\u5176\u4ed6\n var type = command.CommandType;\n\n // \u83b7\u53d6 sql \u4f20\u9012\u7684\u547d\u4ee4\u53c2\u6570\n var parameters = command.Parameters;\n\n // \u5199\u65e5\u5fd7~~~~\n\n return base.NonQueryExecutingAsync(command, eventData, result, cancellationToken);\n }\n\n // \u5176\u4ed6 override\n }\n}\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"\u6ce8\u518c\u5ba1\u8ba1\u65e5\u5fd7")),(0,o.kt)("p",null,"\u53ea\u9700\u8981\u5728\u6ce8\u518c\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u4e2d\u6307\u5b9a ",(0,o.kt)("inlineCode",{parentName:"p"},"interceptors")," \u53c2\u6570\u5373\u53ef"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// services.AddDb \u4e00\u6837\nservices.AddDbPool(interceptors: new IInterceptor[] {\n new SqlCommandAuditInterceptor()\n});\n")),(0,o.kt)("h3",{id:"92233-\u8bf7\u6c42\u5ba1\u8ba1\u65e5\u5fd7"},"9.22.3.3 \u8bf7\u6c42\u5ba1\u8ba1\u65e5\u5fd7"),(0,o.kt)("admonition",{title:"\u5173\u4e8e\u8bf7\u6c42\u5ba1\u8ba1\u65e5\u5fd7",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u5982\u9700\u5b9e\u73b0\u8bf7\u6c42\u5ba1\u8ba1\u65e5\u5fd7\u53ef\u67e5\u9605 \u3010",(0,o.kt)("a",{parentName:"p",href:"/docs/audit"},"5.4 \u8bf7\u6c42\u5ba1\u8ba1\u65e5\u5fd7\u7ae0\u8282"),"\u3011")),(0,o.kt)("h2",{id:"9224-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.22.4 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,o.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/9bd20b97.6ac0dead.js b/handbook/build/assets/js/9bd20b97.6ac0dead.js new file mode 100644 index 00000000000..9991b03e195 --- /dev/null +++ b/handbook/build/assets/js/9bd20b97.6ac0dead.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7094],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return d}});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),m=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=m(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},s=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),s=m(n),d=a,k=s["".concat(p,".").concat(d)]||s[d]||c[d]||i;return n?r.createElement(k,o(o({ref:t},u),{},{components:n})):r.createElement(k,o({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=s;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var m=2;m=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var u=r.createContext({}),c=function(e){var t=r.useContext(u),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},d=function(e){var t=c(e.components);return r.createElement(u.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,u=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=c(a),f=n,m=p["".concat(u,".").concat(f)]||p[f]||s[f]||o;return a?r.createElement(m,l(l({ref:t},d),{},{components:a})):r.createElement(m,l({ref:t},d))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,l=new Array(o);l[0]=p;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i.mdxType="string"==typeof e?e:n,l[1]=i;for(var c=2;c=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var o=l.createContext({}),u=function(e){var t=l.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},m=function(e){var t=u(e.components);return l.createElement(o.Provider,{value:t},e.children)},k={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},d=l.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,o=e.parentName,m=p(e,["components","mdxType","originalType","parentName"]),d=u(n),s=a,c=d["".concat(o,".").concat(s)]||d[s]||k[s]||i;return n?l.createElement(c,r(r({ref:t},m),{},{components:n})):l.createElement(c,r({ref:t},m))}));function s(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=d;var p={};for(var o in t)hasOwnProperty.call(t,o)&&(p[o]=t[o]);p.originalType=e,p.mdxType="string"==typeof e?e:a,r[1]=p;for(var u=2;u();\n')),(0,i.kt)("p",null,"\u5982\u9700\u8de8\u5e93\u67e5\u8be2\uff0c\u9700\u7528\u5230\u6570\u636e\u5e93\u6280\u672f\uff0c\u5982 ",(0,i.kt)("inlineCode",{parentName:"p"},"SqlServer")," \u94fe\u63a5\u670d\u52a1\u5668\u6216\u540c\u4e49\u8bcd\u3002"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"\u52a8\u6001\u5207\u6362\u6570\u636e\u5e93\u8868"))),(0,i.kt)("p",null,"\u7b2c\u4e00\u6b65\u3001\u914d\u7f6e\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u7279\u6027",(0,i.kt)("inlineCode",{parentName:"p"},"[AppDbContext( Mode=DbContextMode.Dynamic)]")),(0,i.kt)("p",null,"\u7b2c\u4e8c\u6b65\u3001\u9700\u8981\u52a8\u6001\u4fee\u6539\u8868\u540d\u7684\u5b9e\u4f53\u7ee7\u627f ",(0,i.kt)("inlineCode",{parentName:"p"},"IEntityMutableTable")," \u63a5\u53e3\uff0c\u5e76\u5b9e\u73b0 ",(0,i.kt)("inlineCode",{parentName:"p"},"GetTableName()")," \u8fd4\u56de\u8868\u540d\u65b9\u6cd5"),(0,i.kt)("p",null,"\u6700\u540e\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"BuildChange")," \u5207\u6362\u5373\u53ef\u3002"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var (rep, scoped) = repository.BuildChange();\n")),(0,i.kt)("p",null,"\u8c03\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"BuildChange")," \u65b9\u6cd5\u4e4b\u540e\u4f1a\u81ea\u52a8\u8c03\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"GetTableName()")," \u65b9\u6cd5\u3002"),(0,i.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,i.kt)("inlineCode",{parentName:"p"},"DynamicModelCacheKeyFactory")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,i.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/ef/core/modeling/dynamic-model"},"EF Core - \u591a\u4e2a\u6a21\u578b\u4e4b\u95f4\u4ea4\u66ff")," \u7ae0\u8282\u3002")),(0,i.kt)("h2",{id:"9287-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.28.7 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/9e4087bc.c598c564.js b/handbook/build/assets/js/9e4087bc.c598c564.js new file mode 100644 index 00000000000..af6b6b3dd61 --- /dev/null +++ b/handbook/build/assets/js/9e4087bc.c598c564.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[3608],{3169:function(e,t,a){a.r(t),a.d(t,{default:function(){return s}});var r=a(7294),n=a(9960),l=a(5999),c=a(1944),i=a(9338);function m(e){var t=e.year,a=e.posts;return r.createElement(r.Fragment,null,r.createElement("h3",null,t),r.createElement("ul",null,a.map((function(e){return r.createElement("li",{key:e.metadata.date},r.createElement(n.Z,{to:e.metadata.permalink},e.metadata.formattedDate," - ",e.metadata.title))}))))}function o(e){var t=e.years;return r.createElement("section",{className:"margin-vert--lg"},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},t.map((function(e,t){return r.createElement("div",{key:t,className:"col col--4 margin-vert--lg"},r.createElement(m,e))})))))}function s(e){var t,a,n=e.archive,m=(0,l.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),s=(0,l.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),u=(t=n.blogPosts,a=t.reduceRight((function(e,t){var a,r=t.metadata.date.split("-")[0],n=null!=(a=e.get(r))?a:[];return e.set(r,[t].concat(n))}),new Map),Array.from(a,(function(e){return{year:e[0],posts:e[1]}})));return r.createElement(r.Fragment,null,r.createElement(c.d,{title:m,description:s}),r.createElement(i.Z,null,r.createElement("header",{className:"hero hero--primary"},r.createElement("div",{className:"container"},r.createElement("h1",{className:"hero__title"},m),r.createElement("p",{className:"hero__subtitle"},s))),r.createElement("main",null,u.length>0&&r.createElement(o,{years:u}))))}}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/9e7ef9fa.3ca63a13.js b/handbook/build/assets/js/9e7ef9fa.3ca63a13.js new file mode 100644 index 00000000000..0acace15f0d --- /dev/null +++ b/handbook/build/assets/js/9e7ef9fa.3ca63a13.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[1866],{3905:function(e,n,t){t.d(n,{Zo:function(){return m},kt:function(){return c}});var i=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function a(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=i.createContext({}),p=function(e){var n=i.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},m=function(e){var n=p(e.components);return i.createElement(s.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},u=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=p(t),c=r,k=u["".concat(s,".").concat(c)]||u[c]||d[c]||o;return t?i.createElement(k,a(a({ref:n},m),{},{components:t})):i.createElement(k,a({ref:n},m))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,a=new Array(o);a[0]=u;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,a[1]=l;for(var p=2;p\u7a0b\u5e8f\u5305\u7ba1\u7406\u63a7\u5236\u53f0",id:"91921-\u6253\u5f00-\u7a0b\u5e8f\u5305\u7ba1\u7406\u63a7\u5236\u53f0",level:3},{value:"9.19.2.2 \u5207\u6362\u9ed8\u8ba4\u9879\u76ee",id:"91922-\u5207\u6362\u9ed8\u8ba4\u9879\u76ee",level:3},{value:"9.19.2.3 \u8f93\u5165 cli.ps1 \u547d\u4ee4",id:"91923-\u8f93\u5165-clips1-\u547d\u4ee4",level:3},{value:"9.19.3 \u754c\u9762\u64cd\u4f5c\u6a21\u5f0f",id:"9193-\u754c\u9762\u64cd\u4f5c\u6a21\u5f0f",level:2},{value:"9.19.3.1 \u542f\u52a8\u754c\u9762\u64cd\u4f5c",id:"91931-\u542f\u52a8\u754c\u9762\u64cd\u4f5c",level:3},{value:"9.19.3.2 \u52a0\u8f7d\u6570\u636e\u5e93\u8868",id:"91932-\u52a0\u8f7d\u6570\u636e\u5e93\u8868",level:3},{value:"9.19.3.3 \u9009\u62e9\u8868\u6216\u89c6\u56fe\u751f\u6210",id:"91933-\u9009\u62e9\u8868\u6216\u89c6\u56fe\u751f\u6210",level:3},{value:"9.19.3.4 \u9009\u62e9\u4fdd\u5b58\u76ee\u5f55",id:"91934-\u9009\u62e9\u4fdd\u5b58\u76ee\u5f55",level:3},{value:"9.19.3.5 \u751f\u6210\u6700\u7ec8\u5b9e\u4f53\u4ee3\u7801",id:"91935-\u751f\u6210\u6700\u7ec8\u5b9e\u4f53\u4ee3\u7801",level:3},{value:"9.19.4 \u547d\u4ee4\u53c2\u6570\u914d\u7f6e",id:"9194-\u547d\u4ee4\u53c2\u6570\u914d\u7f6e",level:2},{value:"9.19.5 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"9195-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],c={toc:u};function k(e){var n=e.components,t=(0,r.Z)(e,l);return(0,o.kt)("wrapper",(0,i.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{title:"\u89c6\u9891\u6559\u7a0b",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("a",{parentName:"p",href:"https://www.bilibili.com/video/BV1Rt4y1W7oJ"},"https://www.bilibili.com/video/BV1Rt4y1W7oJ"))),(0,o.kt)("admonition",{title:"\u5173\u4e8e\u811a\u672c",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u5728\u9605\u8bfb\u4e0b\u9762\u6587\u6863\u4e4b\u524d\uff0c\u5fc5\u987b\u628a",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6e90\u7801\u6587\u4ef6\u5939\u4e0b\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"tools/cli.ps1")," \u6587\u4ef6\u62f7\u8d1d\u5230\u672c\u5730\u4e2d\u3002\u800c\u4e14 ",(0,o.kt)("inlineCode",{parentName:"p"},"Fur.Web.Entry")," \u5c42\u9700\u8981\u5b89\u88c5 ",(0,o.kt)("inlineCode",{parentName:"p"},"Microsoft.EntityFrameworkCore.Tools")," \u5305\u3002")),(0,o.kt)("admonition",{title:"\u7cfb\u7edf\u63d0\u793a\u7981\u6b62\u8fd0\u884c\u811a\u672c\u89e3\u51b3",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u5982\u679c\u51fa\u73b0 ",(0,o.kt)("inlineCode",{parentName:"p"},"cli.ps1")," \u65e0\u6cd5\u8fd0\u884c\u7684\u60c5\u51b5\uff0c\u5982\u63d0\u793a\uff1a",(0,o.kt)("inlineCode",{parentName:"p"},"\u201c\u56e0\u4e3a\u5728\u6b64\u7cfb\u7edf\u4e0a\u7981\u6b62\u8fd0\u884c\u811a\u672c\u201d"),"\uff0c\u53ea\u9700\u8981\u6253\u5f00\u7cfb\u7edf\u7ba1\u7406\u5458 ",(0,o.kt)("inlineCode",{parentName:"p"},"CMD/Powershell")," \u6267\u884c\uff1a",(0,o.kt)("inlineCode",{parentName:"p"},"set-ExecutionPolicy RemoteSigned")," \u547d\u4ee4\u5e76\u6839\u636e\u64cd\u4f5c\u63d0\u793a\u8f93\u5165 ",(0,o.kt)("inlineCode",{parentName:"p"},"A")," \u5373\u53ef\u3002"),(0,o.kt)("p",{parentName:"admonition"},"\u4e4b\u540e\u91cd\u542f ",(0,o.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u5de5\u5177\u3002")),(0,o.kt)("h2",{id:"9191-\u6570\u636e\u5e93\u5f00\u53d1\u65b9\u5f0f"},"9.19.1 \u6570\u636e\u5e93\u5f00\u53d1\u65b9\u5f0f"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e24\u79cd\u4e3b\u8981\u65b9\u6cd5\u6765 ",(0,o.kt)("strong",{parentName:"p"},"\u4fdd\u6301\u5b9e\u4f53\u6a21\u578b\u548c\u6570\u636e\u5e93\u67b6\u6784\u540c\u6b65"),"\u3002"),(0,o.kt)("p",null,"\u81f3\u4e8e\u6211\u4eec\u5e94\u8be5\u9009\u7528\u54ea\u4e2a\u65b9\u6cd5\uff0c\u8bf7\u786e\u5b9a\u4f60\u662f\u5e0c\u671b\u4ee5\u5b9e\u4f53\u6a21\u578b\u4e3a\u51c6\u8fd8\u662f\u4ee5\u6570\u636e\u5e93\u4e3a\u51c6\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"\u5982\u679c\u5e0c\u671b ",(0,o.kt)("strong",{parentName:"p"},"\u4ee5\u5b9e\u4f53\u6a21\u578b\u4e3a\u51c6"),"\uff0c\u8bf7\u4f7f\u7528\u6b63\u5411\u5de5\u7a0b\uff08Code First\uff09\u3002 \u5bf9\u5b9e\u4f53\u6a21\u578b\u8fdb\u884c\u66f4\u6539\u65f6\uff0c\u6b64\u65b9\u6cd5\u4f1a\u4ee5\u589e\u91cf\u65b9\u5f0f\u5c06\u76f8\u5e94\u67b6\u6784\u66f4\u6539\u5e94\u7528\u5230\u6570\u636e\u5e93\uff0c\u4ee5\u4f7f\u6570\u636e\u5e93\u4fdd\u6301\u4e0e\u5b9e\u4f53\u6a21\u578b\u517c\u5bb9\u3002")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"\u5982\u679c\u5e0c\u671b ",(0,o.kt)("strong",{parentName:"p"},"\u4ee5\u6570\u636e\u5e93\u67b6\u6784\u4e3a\u51c6"),"\uff0c\u8bf7\u4f7f\u7528\u53cd\u5411\u5de5\u7a0b\uff08Database First\uff09\u3002 \u4f7f\u7528\u6b64\u65b9\u6cd5\uff0c\u53ef\u901a\u8fc7\u5c06\u6570\u636e\u5e93\u67b6\u6784\u53cd\u5411\u5de5\u7a0b\u5230\u5b9e\u4f53\u6a21\u578b\u6765\u751f\u6210\u76f8\u5e94\u7684\u5b9e\u4f53\u7c7b\u578b\u3002"))),(0,o.kt)("p",null,"\u672c\u7ae0\u8282\u662f ",(0,o.kt)("strong",{parentName:"p"},"\u53cd\u5411\u5de5\u7a0b\uff08Database First\uff09")," \u7684\u76f8\u5173\u5185\u5bb9\u3002"),(0,o.kt)("h2",{id:"9192-\u64cd\u4f5c\u6307\u5357"},"9.19.2 \u64cd\u4f5c\u6307\u5357"),(0,o.kt)("admonition",{title:"\u64cd\u4f5c\u4e4b\u524d\u6ce8\u610f\u4e8b\u9879",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u76ee\u524d ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion Tools")," \u751f\u6210\u5de5\u5177",(0,o.kt)("strong",{parentName:"p"},"\u9ed8\u8ba4\u4e0d\u652f\u6301\u4efb\u4f55\u6570\u636e\u5e93"),"\u751f\u6210\uff0c\u6240\u4ee5\u5982\u9700\u751f\u6210\u7279\u5b9a\u6570\u636e\u5e93\u7684\u4ee3\u7801\uff0c\u53ea\u9700\u8981\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion.EntityFrameworkCore.Core")," \u5b89\u88c5\u5bf9\u5e94\u7684\u6570\u636e\u5e93\u5305\u5373\u53ef\uff1a"),(0,o.kt)("p",{parentName:"admonition"},"\u5404\u4e2a\u6570\u636e\u5e93\u7684\u5305\u53ef\u67e5\u9605\uff1a",(0,o.kt)("a",{parentName:"p",href:"dbcontext-multi-database"},"\u591a\u6570\u636e\u5e93\u64cd\u4f5c-\u6570\u636e\u5e93\u63d0\u4f9b\u5668\u5bf9\u5e94\u5305")),(0,o.kt)("p",{parentName:"admonition"},"\u53e6\u5916\uff0c\u53ea\u6709 ",(0,o.kt)("inlineCode",{parentName:"p"},"SqlServer")," \u6570\u636e\u5e93\u652f\u6301\u53ef\u89c6\u5316 ",(0,o.kt)("inlineCode",{parentName:"p"},"GUI")," \u64cd\u4f5c\uff0c\u5176\u4ed6\u7684\u53ea\u80fd\u547d\u4ee4\u884c\u64cd\u4f5c\u3002")),(0,o.kt)("h3",{id:"91921-\u6253\u5f00-\u7a0b\u5e8f\u5305\u7ba1\u7406\u63a7\u5236\u53f0"},"9.19.2.1 \u6253\u5f00 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u7a0b\u5e8f\u5305\u7ba1\u7406\u63a7\u5236\u53f0")),(0,o.kt)("p",null,"\u6ce8\u610f\uff1a\u5f00\u59cb\u4e4b\u524d\u5148\u628a ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion.Web.Entry")," \u8bbe\u4e3a\u542f\u52a8\u9879\u76ee\u3002"),(0,o.kt)("img",{src:(0,a.Z)("img/dbfirst1.png")}),(0,o.kt)("h3",{id:"91922-\u5207\u6362\u9ed8\u8ba4\u9879\u76ee"},"9.19.2.2 \u5207\u6362\u9ed8\u8ba4\u9879\u76ee"),(0,o.kt)("p",null,"\u5c06 ",(0,o.kt)("inlineCode",{parentName:"p"},"\u7a0b\u5e8f\u5305\u7ba1\u7406\u63a7\u5236\u53f0")," \u9ed8\u8ba4\u9879\u76ee\u8bbe\u7f6e\u4e3a ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion.Core"),"\uff0c\u5982\u679c\u60a8\u662f\u5176\u4ed6\u540d\u5b57\uff0c\u5219\u5207\u6362\u5bf9\u5e94\u5373\u53ef\u3002"),(0,o.kt)("img",{src:(0,a.Z)("img/dbfirst2.png")}),(0,o.kt)("h3",{id:"91923-\u8f93\u5165-clips1-\u547d\u4ee4"},"9.19.2.3 \u8f93\u5165 ",(0,o.kt)("inlineCode",{parentName:"h3"},"cli.ps1")," \u547d\u4ee4"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"PM> Show-Command ../tools/cli.ps1\n")),(0,o.kt)("img",{src:(0,a.Z)("img/df10.png")}),(0,o.kt)("admonition",{title:"\u5168\u547d\u4ee4\u65b9\u5f0f\uff08\u63a8\u8350\uff09\u2764\ufe0f",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u9664\u4e86\u91c7\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"Show-Command")," \u65b9\u5f0f\u4ee5\u5916\uff0c\u8fd8\u53ef\u4ee5\u76f4\u63a5\u6267\u884c\u547d\u4ee4\uff0c\u5982\uff1a"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},'&"./tools/cli.ps1" -DbProvider "Microsoft.EntityFrameworkCore.SqlServer" -CoreProject "XXX.Core" -EntryProject "XXX.Web.Entry" -ConnectionName "Default"\n'))),(0,o.kt)("admonition",{title:"\u5c0f\u63d0\u793a",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528\u7684\u662f ",(0,o.kt)("inlineCode",{parentName:"p"},"SqlServer")," \u6570\u636e\u5e93\uff0c\u5219\u9ed8\u8ba4\u4e0d\u9700\u8981\u6307\u5b9a ",(0,o.kt)("inlineCode",{parentName:"p"},"-DbProvider")," \u53c2\u6570\u3002")),(0,o.kt)("p",null,"\u5982\u679c\u4e0d\u6e05\u695a\u5f53\u524d\u8fd0\u884c\u73af\u5883\u7684\u8def\u5f84\uff0c\u53ef\u4ee5\u8f93\u5165 ",(0,o.kt)("inlineCode",{parentName:"p"},"pwd")," \u67e5\u770b\u3002"),(0,o.kt)("admonition",{title:"\u5173\u4e8e\u6570\u636e\u5e93\u547d\u540d",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u5982\u679c\u9700\u8981\u4fdd\u6301\u548c\u6570\u636e\u5e93\u4e00\u6a21\u4e00\u6837\u7684\u547d\u540d\uff0c\u5219\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"-UseDatabaseNames")," \u53c2\u6570\u6307\u5b9a\uff0c\u5982\uff1a"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},' &"../tools/cli.ps1" -UseDatabaseNames\n'))),(0,o.kt)("img",{src:(0,a.Z)("img/dbfirst3.png")}),(0,o.kt)("admonition",{title:"\u7b49\u5f85\u8f93\u5165",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u6267\u884c\u4e0a\u9762\u547d\u4ee4\u540e\uff0c\u6b64\u65f6 ",(0,o.kt)("inlineCode",{parentName:"p"},"Cli")," \u6709\u4e00\u4e2a\u7b49\u5f85\u8f93\u5165\u63d0\u793a\uff1a"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Furion Tools v1.0.0 \u8bf7\u952e\u5165\u64cd\u4f5c\u7c7b\u578b\uff1a[G] \u754c\u9762\u64cd\u4f5c\uff0c[\u4efb\u610f\u5b57\u7b26] \u547d\u4ee4\u884c\u64cd\u4f5c\nFurion Tools v1.0.0 \u60a8\u7684\u8f93\u5165\u662f:\n")),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"\u8f93\u5165\u5927\u5199 ",(0,o.kt)("inlineCode",{parentName:"strong"},"G")," \u8fdb\u5165\u754c\u9762\u64cd\u4f5c\u6a21\u5f0f\uff0c\u5176\u4ed6\u4efb\u610f\u5b57\u7b26\u8fdb\u5165\u547d\u4ee4\u884c\u64cd\u4f5c\u6a21\u5f0f\u3002"))),(0,o.kt)("admonition",{title:"\u6ce8\u610f\u4e8b\u9879",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"\u76ee\u524d\u53ea\u6709 ",(0,o.kt)("inlineCode",{parentName:"p"},"Sql Server")," \u6570\u636e\u5e93\u624d\u652f\u6301 ",(0,o.kt)("inlineCode",{parentName:"p"},"GUI \u754c\u9762\u64cd\u4f5c\u6a21\u5f0f"),"\uff0c\u5176\u4ed6\u6570\u636e\u5e93\u8bf7\u4f7f\u7528\u547d\u4ee4\u884c\u6a21\u5f0f\u3002")),(0,o.kt)("h2",{id:"9193-\u754c\u9762\u64cd\u4f5c\u6a21\u5f0f"},"9.19.3 \u754c\u9762\u64cd\u4f5c\u6a21\u5f0f"),(0,o.kt)("h3",{id:"91931-\u542f\u52a8\u754c\u9762\u64cd\u4f5c"},"9.19.3.1 \u542f\u52a8\u754c\u9762\u64cd\u4f5c"),(0,o.kt)("p",null,"\u5f53\u6211\u4eec\u8f93\u5165 ",(0,o.kt)("inlineCode",{parentName:"p"},"G")," \u65f6\uff0c\u5c06\u6253\u5f00 ",(0,o.kt)("inlineCode",{parentName:"p"},"GUI")," \u754c\u9762\u64cd\u4f5c\u6a21\u5f0f\uff0c\u5982\uff1a"),(0,o.kt)("img",{src:(0,a.Z)("img/dbfirst4.png")}),(0,o.kt)("p",null,"\u8fd9\u65f6\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"Furion Tools")," \u4f1a\u81ea\u52a8\u67e5\u627e\u6240\u6709\u6570\u636e\u5e93\u914d\u7f6e\u8fde\u63a5\u5b57\u7b26\u4e32\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},".json")," \u6587\u4ef6\uff1a"),(0,o.kt)("admonition",{title:"\u6ce8\u610f\u4e8b\u9879",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\u914d\u7f6e\u9879\u9700\u5199\u5230 ",(0,o.kt)("inlineCode",{parentName:"p"},"json")," \u914d\u7f6e\u6587\u4ef6\u4e2d\uff0c\u4e14\u6839\u8282\u70b9\u9700\u8981\u5199\u4e3a ",(0,o.kt)("inlineCode",{parentName:"p"},"ConnectionStrings")," \u3002")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {12-13}",showLineNumbers:!0,"":!0,"{12-13}":!0},'{\n "Logging": {\n "LogLevel": {\n "Default": "Information",\n "Microsoft": "Warning",\n "Microsoft.Hosting.Lifetime": "Information",\n "Microsoft.EntityFrameworkCore": "Information"\n }\n },\n "AllowedHosts": "*",\n "ConnectionStrings": {\n "DbConnectionString": "Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;",\n "Sqlite3ConnectionString": "Data Source=./Furion.db"\n }\n}\n')),(0,o.kt)("h3",{id:"91932-\u52a0\u8f7d\u6570\u636e\u5e93\u8868"},"9.19.3.2 \u52a0\u8f7d\u6570\u636e\u5e93\u8868"),(0,o.kt)("p",null,"\u9009\u62e9\u8fde\u63a5\u5b57\u7b26\u4e32\u4e4b\u540e\uff0c\u70b9\u51fb ",(0,o.kt)("inlineCode",{parentName:"p"},"\u52a0\u8f7d\u6570\u636e\u5e93\u8868\u548c\u89c6\u56fe")," \u6309\u94ae\u52a0\u8f7d\u3002"),(0,o.kt)("img",{src:(0,a.Z)("img/dbfirst5.png")}),(0,o.kt)("h3",{id:"91933-\u9009\u62e9\u8868\u6216\u89c6\u56fe\u751f\u6210"},"9.19.3.3 \u9009\u62e9\u8868\u6216\u89c6\u56fe\u751f\u6210"),(0,o.kt)("p",null,"\u52a0\u8f7d\u8868\u5b8c\u6210\u540e\uff0c\u53ef\u4ee5\u9009\u62e9\u60a8\u8981\u751f\u6210\u7684\u8868\u6216\u89c6\u56fe\uff0c",(0,o.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u9009")),(0,o.kt)("img",{src:(0,a.Z)("img/dbfirst6.png")}),(0,o.kt)("p",null,"\u70b9\u51fb\u5e95\u90e8\u6309\u94ae ",(0,o.kt)("inlineCode",{parentName:"p"},"\u7acb\u5373\u751f\u6210")),(0,o.kt)("h3",{id:"91934-\u9009\u62e9\u4fdd\u5b58\u76ee\u5f55"},"9.19.3.4 \u9009\u62e9\u4fdd\u5b58\u76ee\u5f55"),(0,o.kt)("p",null,"\u70b9\u51fb ",(0,o.kt)("inlineCode",{parentName:"p"},"\u7acb\u5373\u751f\u6210")," \u6309\u94ae\u540e\uff0c\u4f1a\u5f39\u51fa\u5b9e\u4f53\u4fdd\u5b58\u9009\u62e9\u76ee\u5f55\u8d44\u6e90\u7ba1\u7406\u5668\uff0c\u9ed8\u8ba4\u5b9e\u4f53\u53ea\u80fd\u4fdd\u5b58\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion.Core")," \u5c42\uff1a"),(0,o.kt)("img",{src:(0,a.Z)("img/dbfirst7.png")}),(0,o.kt)("p",null,"\u70b9\u51fb\u786e\u5b9a\u540e\u5c31\u53ef\u5b8c\u6210\u6240\u6709\u751f\u6210\u64cd\u4f5c\u3002"),(0,o.kt)("h3",{id:"91935-\u751f\u6210\u6700\u7ec8\u5b9e\u4f53\u4ee3\u7801"},"9.19.3.5 \u751f\u6210\u6700\u7ec8\u5b9e\u4f53\u4ee3\u7801"),(0,o.kt)("img",{src:(0,a.Z)("img/dbfirst8.png")}),(0,o.kt)("p",null,"\u6700\u7ec8\u811a\u672c\u5982\u4e0b\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},'PM> &"../tools/cli.ps1"\n// -----------------------------------------------------------------------------\n// ______ _______ _\n// | ____| |__ __| | |\n// | |__ _ _ _ __ | | ___ ___ | |___\n// | __| | | | \'__| | |/ _ \\ / _ \\| / __|\n// | | | |_| | | | | (_) | (_) | \\__ \\\n// |_| \\__,_|_| |_|\\___/ \\___/|_|___/\n//\n// -----------------------------------------------------------------------------\nFurion Tools v1.0.0 \u542f\u52a8\u4e2d......\nFurion Tools v1.0.0 \u542f\u52a8\u6210\u529f\uff01\nFurion Tools v1.0.0 \u8bf7\u952e\u5165\u64cd\u4f5c\u7c7b\u578b\uff1a[G] \u754c\u9762\u64cd\u4f5c\uff0c[\u4efb\u610f\u5b57\u7b26] \u547d\u4ee4\u884c\u64cd\u4f5c\nFurion Tools v1.0.0 \u60a8\u7684\u8f93\u5165\u662f: G\nFurion Tools v1.0.0 \u6b63\u5728\u52a0\u8f7d\u6570\u636e\u5e93\u8868\u548c\u89c6\u56fe......\nFurion Tools v1.0.0 \u52a0\u8f7d\u6210\u529f\uff01\nFurion Tools v1.0.0 \u6b63\u5728\u7f16\u8bd1\u89e3\u51b3\u65b9\u6848\u4ee3\u7801......\nBuild started...\nBuild succeeded.\nFor foreign key FK_PersonDetail_Person_PersonId on table dbo.PersonDetail, unable to model the end of the foreign key on principal table dbo.Person. This is usually because the principal table was not included in the selection set.\nFurion Tools v1.0.0 \u7f16\u8bd1\u6210\u529f\uff01\nFurion Tools v1.0.0 \u5f00\u59cb\u751f\u6210\u5b9e\u4f53\u6587\u4ef6......\nFurion Tools v1.0.0 \u6b63\u5728\u751f\u6210 City.cs \u5b9e\u4f53\u4ee3\u7801......\nFurion Tools v1.0.0 \u6210\u529f\u751f\u6210 City.cs \u5b9e\u4f53\u4ee3\u7801\n// -----------------------------------------------------------------------------\n// \u4ee5\u4e0b\u4ee3\u7801\u7531 Furion Tools v1.0.0 \u751f\u6210\n// -----------------------------------------------------------------------------\n\nusing Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore.Metadata.Builders;\nusing System;\nusing System.Collections.Generic;\n\n#nullable disable\n\nnamespace Furion.Core\n{\n public partial class City : IEntity, IEntityTypeBuilder\n {\n\n public City()\n {\n InverseParent = new HashSet();\n }\n\n public int Id { get; set; }\n public string Name { get; set; }\n public int? ParentId { get; set; }\n public DateTime CreatedTime { get; set; }\n public DateTime? UpdatedTime { get; set; }\n public bool IsDeleted { get; set; }\n\n public virtual City Parent { get; set; }\n public virtual ICollection InverseParent { get; set; }\n\n public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)\n {\n entityBuilder.HasIndex(e => e.ParentId, "IX_City_ParentId");\n\n entityBuilder.HasOne(d => d.Parent)\n .WithMany(p => p.InverseParent)\n .HasForeignKey(d => d.ParentId);\n\n }\n\n }\n}\n\nFurion Tools v1.0.0 \u6b63\u5728\u751f\u6210 PersonDetail.cs \u5b9e\u4f53\u4ee3\u7801......\nFurion Tools v1.0.0 \u6210\u529f\u751f\u6210 PersonDetail.cs \u5b9e\u4f53\u4ee3\u7801\n// -----------------------------------------------------------------------------\n// \u4ee5\u4e0b\u4ee3\u7801\u7531 Furion Tools v1.0.0 \u751f\u6210\n// -----------------------------------------------------------------------------\n\nusing Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore.Metadata.Builders;\nusing System;\nusing System.Collections.Generic;\n\n#nullable disable\n\nnamespace Furion.Core\n{\n public partial class PersonDetail : IEntity, IEntityTypeBuilder\n {\n\n public int Id { get; set; }\n public string PhoneNumber { get; set; }\n public string Qq { get; set; }\n public int PersonId { get; set; }\n\n public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)\n {\n entityBuilder.HasIndex(e => e.PersonId, "IX_PersonDetail_PersonId")\n .IsUnique();\n\n entityBuilder.Property(e => e.Qq).HasColumnName("QQ");\n\n }\n\n }\n}\n\nFurion Tools v1.0.0 \u6b63\u5728\u751f\u6210 Post.cs \u5b9e\u4f53\u4ee3\u7801......\nFurion Tools v1.0.0 \u6210\u529f\u751f\u6210 Post.cs \u5b9e\u4f53\u4ee3\u7801\n// -----------------------------------------------------------------------------\n// \u4ee5\u4e0b\u4ee3\u7801\u7531 Furion Tools v1.0.0 \u751f\u6210\n// -----------------------------------------------------------------------------\n\nusing Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore.Metadata.Builders;\nusing System;\nusing System.Collections.Generic;\n\n#nullable disable\n\nnamespace Furion.Core\n{\n public partial class Post : IEntity\n {\n\n public int Id { get; set; }\n public string Name { get; set; }\n public DateTime CreatedTime { get; set; }\n public DateTime? UpdatedTime { get; set; }\n public bool IsDeleted { get; set; }\n\n }\n}\n\nFurion Tools v1.0.0 \u6b63\u5728\u751f\u6210 VPerson.cs \u5b9e\u4f53\u4ee3\u7801......\nFurion Tools v1.0.0 \u6210\u529f\u751f\u6210 VPerson.cs \u5b9e\u4f53\u4ee3\u7801\n// -----------------------------------------------------------------------------\n// \u4ee5\u4e0b\u4ee3\u7801\u7531 Furion Tools v1.0.0 \u751f\u6210\n// -----------------------------------------------------------------------------\n\nusing Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore.Metadata.Builders;\nusing System;\nusing System.Collections.Generic;\n\n#nullable disable\n\nnamespace Furion.Core\n{\n public partial class VPerson : IEntity, IEntityTypeBuilder\n {\n\n public int Id { get; set; }\n public string Name { get; set; }\n public int Age { get; set; }\n public string Address { get; set; }\n\n public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)\n {\n entityBuilder.HasNoKey();\n\n entityBuilder.ToView("V_Person");\n\n entityBuilder.Property(e => e.Id).ValueGeneratedOnAdd();\n\n entityBuilder.Property(e => e.Name).HasMaxLength(32);\n\n }\n\n }\n}\n\nFurion Tools v1.0.0 \u5168\u90e8\u5b9e\u4f53\u751f\u6210\u6210\u529f\uff01\nPM>\n')),(0,o.kt)("h2",{id:"9194-\u547d\u4ee4\u53c2\u6570\u914d\u7f6e"},"9.19.4 \u547d\u4ee4\u53c2\u6570\u914d\u7f6e"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion Tools Cli")," \u652f\u6301\u591a\u4e2a\u53c2\u6570\u914d\u7f6e\uff0c\u4f7f\u7528\u65b9\u6cd5\u53ea\u9700\u8981\u5728\u547d\u4ee4\u540e\u9762\u6dfb\u52a0\u5373\u53ef\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},' &"../tools/cli.ps1" -Context \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u540d -ConnectionName \u8fde\u63a5\u5b57\u7b26\u4e32Key\n')),(0,o.kt)("p",null,"\u652f\u6301\u53c2\u6570\u5982\u4e0b\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-Tables"),"\uff1a\u914d\u7f6e\u8981\u751f\u6210\u7684\u6570\u636e\u5e93\u8868\uff0c\u6570\u7ec4\u7c7b\u578b\uff0c\u5982\u679c\u4e3a\u7a7a\uff0c\u5219\u751f\u6210\u6570\u636e\u5e93\u6240\u6709\u8868\u548c\u89c6\u56fe\u3002\u5982\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"-Tables Person,PersonDetails")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-Context"),"\uff1a\u914d\u7f6e\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\uff0c\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"li"},"FurionDbContext"),"\uff0c\u5982\u679c\u6709\u591a\u4e2a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\uff0c\u5219\u6b64\u53c2\u6570\u5fc5\u987b\u914d\u7f6e"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-ConnectionName"),"\uff1a\u914d\u7f6e\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\uff0c\u5bf9\u5e94 ",(0,o.kt)("inlineCode",{parentName:"li"},"appsetting.json")," \u4e2d\u7684 ",(0,o.kt)("inlineCode",{parentName:"li"},"ConnectionStrings")," \u5b9a\u4e49\u7684 ",(0,o.kt)("inlineCode",{parentName:"li"},"Key")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-OutputDir"),"\uff1a\u751f\u6210\u5b9e\u4f53\u4ee3\u7801\u8f93\u51fa\u76ee\u5f55\uff0c\u9ed8\u8ba4\u4e3a\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"./Furion.Core/Entities/")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-DbProvider"),"\uff1a\u6570\u636e\u5e93\u63d0\u4f9b\u5668\uff0c\u9ed8\u8ba4\u662f ",(0,o.kt)("inlineCode",{parentName:"li"},"Microsoft.EntityFrameworkCore.SqlServer"),"\uff0c\u5176\u4ed6\u6570\u636e\u5e93\u8bf7\u6307\u5b9a\u5bf9\u5e94\u7a0b\u5e8f\u96c6",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"SqlServer"),"\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"Microsoft.EntityFrameworkCore.SqlServer")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Sqlite"),"\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"Microsoft.EntityFrameworkCore.Sqlite")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Cosmos"),"\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"Microsoft.EntityFrameworkCore.Cosmos")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"InMemoryDatabase"),"\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"Microsoft.EntityFrameworkCore.InMemory")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"MySql"),"\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"Pomelo.EntityFrameworkCore.MySql")," \u6216 ",(0,o.kt)("inlineCode",{parentName:"li"},"MySql.EntityFrameworkCore")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"PostgreSQL"),"\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"Npgsql.EntityFrameworkCore.PostgreSQL")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Oracle"),"\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"Oracle.EntityFrameworkCore")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Dm"),"\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"Microsoft.EntityFrameworkCore.Dm")))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-EntryProject"),"\uff1aWeb \u542f\u7528\u9879\u76ee\u5c42\u540d\uff0c\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"li"},"Furion.Web.Entry")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-CoreProject"),"\uff1a\u5b9e\u4f53\u9879\u76ee\u5c42\u540d\uff0c\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"li"},"Furion.Core")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-DbContextLocators"),"\uff1a\u591a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\uff0c\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"li"},"MasterDbContextLocator"),"\uff0c\u652f\u6301\u591a\u4e2a\uff0c\u5982\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"MasterDbContextLocator,MySqlDbContextLocator")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-Product"),"\uff1a\u89e3\u51b3\u65b9\u6848\u9ed8\u8ba4\u524d\u7f00\uff0c\u5982 ",(0,o.kt)("inlineCode",{parentName:"li"},"Furion")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-UseDatabaseNames"),"\uff1a\u662f\u5426\u4fdd\u6301\u751f\u6210\u548c\u6570\u636e\u5e93\u3001\u8868\u4e00\u81f4\u7684\u540d\u79f0"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"-Namespace"),"\uff1a\u6307\u5b9a\u5b9e\u4f53\u547d\u540d\u7a7a\u95f4")),(0,o.kt)("h2",{id:"9195-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.19.5 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,o.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/a0a8cac6.57d4d8d8.js b/handbook/build/assets/js/a0a8cac6.57d4d8d8.js new file mode 100644 index 00000000000..31440a06204 --- /dev/null +++ b/handbook/build/assets/js/a0a8cac6.57d4d8d8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7365],{3905:function(e,n,t){t.d(n,{Zo:function(){return p},kt:function(){return d}});var o=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function a(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=o.createContext({}),g=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},p=function(e){var n=g(e.components);return o.createElement(s.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var t=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=g(t),d=i,c=u["".concat(s,".").concat(d)]||u[d]||m[d]||r;return t?o.createElement(c,a(a({ref:n},p),{},{components:t})):o.createElement(c,a({ref:n},p))}));function d(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var r=t.length,a=new Array(r);a[0]=u;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,a[1]=l;for(var g=2;gILogger<T> \u6cdb\u578b\u65b9\u5f0f",id:"1841-iloggert-\u6cdb\u578b\u65b9\u5f0f",level:3},{value:"18.4.2 ILoggerFactory \u5de5\u5382\u65b9\u5f0f",id:"1842-iloggerfactory-\u5de5\u5382\u65b9\u5f0f",level:3},{value:"18.4.3 Log \u9759\u6001\u7c7b\u65b9\u5f0f",id:"1843-log-\u9759\u6001\u7c7b\u65b9\u5f0f",level:3},{value:"18.4.4 \u61d2\u4eba\u6a21\u5f0f \ud83d\ude01",id:"1844-\u61d2\u4eba\u6a21\u5f0f-",level:3},{value:"18.5 \u914d\u7f6e\u65e5\u5fd7\u8f93\u51fa\u4ecb\u8d28",id:"185-\u914d\u7f6e\u65e5\u5fd7\u8f93\u51fa\u4ecb\u8d28",level:2},{value:"18.5.1 \u8f93\u51fa\u5230\u63a7\u5236\u53f0",id:"1851-\u8f93\u51fa\u5230\u63a7\u5236\u53f0",level:3},{value:"18.5.2 \u8f93\u51fa\u5230\u6587\u4ef6",id:"1852-\u8f93\u51fa\u5230\u6587\u4ef6",level:3},{value:"18.5.3 \u8f93\u51fa\u5230\u6570\u636e\u5e93/\u5176\u4ed6\u5b58\u50a8\u4ecb\u8d28",id:"1853-\u8f93\u51fa\u5230\u6570\u636e\u5e93\u5176\u4ed6\u5b58\u50a8\u4ecb\u8d28",level:3},{value:"18.5.4 ILoggerFactory \u65b9\u5f0f",id:"1854-iloggerfactory-\u65b9\u5f0f",level:3},{value:"18.5.5 ILoggingBuilder \u65b9\u5f0f",id:"1855-iloggingbuilder-\u65b9\u5f0f",level:3},{value:"18.5.6 \u8bb0\u5f55\u8bf7\u6c42\u65e5\u5fd7",id:"1856-\u8bb0\u5f55\u8bf7\u6c42\u65e5\u5fd7",level:3},{value:"18.5.7 Debug \u548c Trace \u9ed8\u8ba4\u4e0d\u8f93\u51fa\u95ee\u9898",id:"1857-debug-\u548c-trace-\u9ed8\u8ba4\u4e0d\u8f93\u51fa\u95ee\u9898",level:3},{value:"18.6 [LoggingMonitor] \u76d1\u542c\u65e5\u5fd7",id:"186-loggingmonitor-\u76d1\u542c\u65e5\u5fd7",level:2},{value:"18.6.1 \u7279\u6027\u914d\u7f6e",id:"1861-\u7279\u6027\u914d\u7f6e",level:3},{value:"18.6.2 \u5168\u5c40\u914d\u7f6e",id:"1862-\u5168\u5c40\u914d\u7f6e",level:3},{value:"18.6.3 \u66f4\u591a\u914d\u7f6e",id:"1863-\u66f4\u591a\u914d\u7f6e",level:3},{value:"18.6.4 JSON \u683c\u5f0f",id:"1864-json-\u683c\u5f0f",level:3},{value:"18.6.5 \u5168\u5c40\u8fc7\u6ee4 WriteFilter",id:"1865-\u5168\u5c40\u8fc7\u6ee4-writefilter",level:3},{value:"18.6.6 \u8f93\u51fa JSON \u652f\u6301\u5ffd\u7565\u5c5e\u6027\u540d\u6216\u5c5e\u6027\u7c7b\u578b",id:"1866-\u8f93\u51fa-json-\u652f\u6301\u5ffd\u7565\u5c5e\u6027\u540d\u6216\u5c5e\u6027\u7c7b\u578b",level:3},{value:"18.6.7 \u5c06 LoggingMonitor \u5199\u5165\u6570\u636e\u5e93",id:"1867-\u5c06-loggingmonitor-\u5199\u5165\u6570\u636e\u5e93",level:3},{value:"18.7 \u6253\u5370\u65e5\u5fd7\u5230 Swagger \u4e2d",id:"187-\u6253\u5370\u65e5\u5fd7\u5230-swagger-\u4e2d",level:2},{value:"18.8 \u9759\u6001 Default() \u65b9\u5f0f\u6784\u5efa",id:"188-\u9759\u6001-default-\u65b9\u5f0f\u6784\u5efa",level:2},{value:"18.9 \u89c4\u8303\u65e5\u5fd7\u6a21\u677f",id:"189-\u89c4\u8303\u65e5\u5fd7\u6a21\u677f",level:2},{value:"18.10 \u65e5\u5fd7\u4e0a\u4e0b\u6587",id:"1810-\u65e5\u5fd7\u4e0a\u4e0b\u6587",level:2},{value:"18.11 \u5173\u95ed .NET Core \u5e95\u5c42\u7684\u65e5\u5fd7",id:"1811-\u5173\u95ed-net-core-\u5e95\u5c42\u7684\u65e5\u5fd7",level:2},{value:"18.12 \u5173\u4e8e\u6570\u636e\u5e93\u65e5\u5fd7\u5faa\u73af\u8f93\u51fa\u65e5\u5fd7",id:"1812-\u5173\u4e8e\u6570\u636e\u5e93\u65e5\u5fd7\u5faa\u73af\u8f93\u51fa\u65e5\u5fd7",level:2},{value:"18.13 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"1813-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:u};function c(e){var n=e.components,t=(0,i.Z)(e,l);return(0,r.kt)("wrapper",(0,o.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"181-\u5173\u4e8e\u65e5\u5fd7"},"18.1 \u5173\u4e8e\u65e5\u5fd7"),(0,r.kt)("p",null,"\u901a\u5e38\u65e5\u5fd7\u6307\u7684\u662f",(0,r.kt)("strong",{parentName:"p"},"\u7cfb\u7edf\u65e5\u5fd7"),"\u548c",(0,r.kt)("strong",{parentName:"p"},"\u7a0b\u5e8f\u65e5\u5fd7"),"\u3002"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u7cfb\u7edf\u65e5\u5fd7")," \u662f\u8bb0\u5f55\u7cfb\u7edf\u4e2d\u786c\u4ef6\u3001\u8f6f\u4ef6\u548c\u7cfb\u7edf\u95ee\u9898\u7684\u4fe1\u606f\uff0c\u540c\u65f6\u8fd8\u53ef\u4ee5\u76d1\u89c6\u7cfb\u7edf\u4e2d\u53d1\u751f\u7684\u4e8b\u4ef6\u3002\u7528\u6237\u53ef\u4ee5\u901a\u8fc7\u5b83\u6765\u68c0\u67e5\u9519\u8bef\u53d1\u751f\u7684\u539f\u56e0\uff0c\u6216\u8005\u5bfb\u627e\u53d7\u5230\u653b\u51fb\u65f6\u653b\u51fb\u8005\u7559\u4e0b\u7684\u75d5\u8ff9\u3002\u7cfb\u7edf\u65e5\u5fd7\u5305\u62ec\u7cfb\u7edf\u65e5\u5fd7\u3001\u5e94\u7528\u7a0b\u5e8f\u65e5\u5fd7\u548c\u5b89\u5168\u65e5\u5fd7\u3002"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u7a0b\u5e8f\u65e5\u5fd7")," \u662f\u7a0b\u5e8f\u8fd0\u884c\u4e2d\u4ea7\u751f\u7684\u65e5\u5fd7\uff0c\u901a\u5e38\u7531\u6846\u67b6\u8fd0\u884c\u65f6\u6216\u5f00\u53d1\u8005\u63d0\u4f9b\u7684\u65e5\u5fd7\u3002\u5305\u62ec\u8bf7\u6c42\u65e5\u5fd7\uff0c\u5f02\u5e38\u65e5\u5fd7\u3001\u5ba1\u8ba1\u65e5\u5fd7\u3001\u884c\u4e3a\u65e5\u5fd7\u7b49\u3002"),(0,r.kt)("h2",{id:"182-\u65e5\u5fd7\u4f5c\u7528"},"18.2 \u65e5\u5fd7\u4f5c\u7528"),(0,r.kt)("p",null,"\u5728\u9879\u76ee\u5f00\u53d1\u4e2d\uff0c\u90fd\u4e0d\u53ef\u907f\u514d\u7684\u4f7f\u7528\u5230\u65e5\u5fd7\u3002\u6ca1\u6709\u65e5\u5fd7\u867d\u7136\u4e0d\u4f1a\u5f71\u54cd\u9879\u76ee\u7684\u6b63\u786e\u8fd0\u884c\uff0c\u4f46\u662f\u6ca1\u6709\u65e5\u5fd7\u7684\u9879\u76ee\u53ef\u4ee5\u8bf4\u662f\u4e0d\u5b8c\u6574\u7684\u3002\u65e5\u5fd7\u5728\u8c03\u8bd5\uff0c\u9519\u8bef\u6216\u8005\u5f02\u5e38\u5b9a\u4f4d\uff0c\u6570\u636e\u5206\u6790\u4e2d\u7684\u4f5c\u7528\u662f\u4e0d\u8a00\u800c\u55bb\u7684\u3002"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u8c03\u8bd5")),(0,r.kt)("p",null,"\u5728\u9879\u76ee\u8c03\u8bd5\u65f6\uff0c\u67e5\u770b\u6808\u4fe1\u606f\u53ef\u4ee5\u65b9\u4fbf\u5730\u77e5\u9053\u5f53\u524d\u7a0b\u5e8f\u7684\u8fd0\u884c\u72b6\u6001\uff0c\u8f93\u51fa\u7684\u65e5\u5fd7\u4fbf\u4e8e\u8bb0\u5f55\u7a0b\u5e8f\u5728\u4e4b\u524d\u7684\u8fd0\u884c\u7ed3\u679c\u3002"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u9519\u8bef\u5b9a\u4f4d")),(0,r.kt)("p",null,"\u4e0d\u8981\u4ee5\u4e3a\u9879\u76ee\u80fd\u6b63\u786e\u8dd1\u8d77\u6765\u5c31\u53ef\u4ee5\u9ad8\u6795\u65e0\u5fe7\uff0c\u9879\u76ee\u5728\u8fd0\u884c\u4e00\u6bb5\u65f6\u5019\u540e\uff0c\u53ef\u80fd\u7531\u4e8e\u6570\u636e\u95ee\u9898\uff0c\u7f51\u7edc\u95ee\u9898\uff0c\u5185\u5b58\u95ee\u9898\u7b49\u51fa\u73b0\u5f02\u5e38\u3002\u8fd9\u65f6\u65e5\u5fd7\u53ef\u4ee5\u5e2e\u52a9\u5f00\u53d1\u6216\u8005\u8fd0\u7ef4\u4eba\u5458\u5feb\u901f\u5b9a\u4f4d\u9519\u8bef\u4f4d\u7f6e\uff0c\u63d0\u51fa\u89e3\u51b3\u65b9\u6848\u3002"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u6570\u636e\u5206\u6790")),(0,r.kt)("p",null,"\u5927\u6570\u636e\u7684\u5174\u8d77\uff0c\u4f7f\u5f97\u5927\u91cf\u7684\u65e5\u5fd7\u5206\u6790\u6210\u4e3a\u53ef\u80fd\uff0cELK \u4e5f\u8ba9\u65e5\u5fd7\u5206\u6790\u95e8\u69db\u964d\u4f4e\u4e86\u5f88\u591a\u3002\u65e5\u5fd7\u4e2d\u8574\u542b\u4e86\u5927\u91cf\u7684\u7528\u6237\u6570\u636e\uff0c\u5305\u62ec\u70b9\u51fb\u884c\u4e3a\uff0c\u5174\u8da3\u504f\u597d\u7b49\uff0c\u7528\u6237\u753b\u50cf\u5bf9\u4e8e\u516c\u53f8\u4e0b\u4e00\u6b65\u7684\u6218\u7565\u65b9\u5411\u6709\u4e00\u5b9a\u6307\u5f15\u4f5c\u7528\u3002"),(0,r.kt)("h2",{id:"183-\u65e5\u5fd7\u7ea7\u522b"},"18.3 \u65e5\u5fd7\u7ea7\u522b"),(0,r.kt)("p",null,"\u65e5\u5fd7\u7ea7\u522b\u53ef\u4ee5\u6709\u6548\u7684\u5bf9\u65e5\u5fd7\u4fe1\u606f\u8fdb\u884c\u5f52\u7c7b\uff0c\u65b9\u4fbf\u51c6\u786e\u7684\u67e5\u770b\u7279\u5b9a\u65e5\u5fd7\u5185\u5bb9\u3002\u901a\u5e38\u65e5\u5fd7\u7c7b\u522b\u6709\u4ee5\u4e0b\u7ea7\u522b\uff1a"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:"center"},"\u7ea7\u522b"),(0,r.kt)("th",{parentName:"tr",align:null},"\u503c"),(0,r.kt)("th",{parentName:"tr",align:"center"},"\u65b9\u6cd5"),(0,r.kt)("th",{parentName:"tr",align:null},"\u63cf\u8ff0"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Trace\uff08\u8ddf\u8e2a\uff09"),(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:"center"},"LogTrace"),(0,r.kt)("td",{parentName:"tr",align:null},"\u5305\u542b\u6700\u8be6\u7ec6\u7684\u6d88\u606f\u3002 \u8fd9\u4e9b\u6d88\u606f\u53ef\u80fd\u5305\u542b\u654f\u611f\u7684\u5e94\u7528\u6570\u636e\u3002 \u8fd9\u4e9b\u6d88\u606f\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u5904\u4e8e\u7981\u7528\u72b6\u6001\uff0c\u5e76\u4e14\u4e0d\u5e94\u5728\u751f\u4ea7\u4e2d\u542f\u7528\u3002")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Debug\uff08\u8c03\u8bd5\uff09"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:"center"},"LogDebug"),(0,r.kt)("td",{parentName:"tr",align:null},"\u7528\u4e8e\u8c03\u8bd5\u548c\u5f00\u53d1\u3002 \u7531\u4e8e\u91cf\u5927\uff0c\u8bf7\u5728\u751f\u4ea7\u4e2d\u5c0f\u5fc3\u4f7f\u7528\u3002")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Information\uff08\u4fe1\u606f\uff09"),(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:"center"},"LogInformation"),(0,r.kt)("td",{parentName:"tr",align:null},"\u8ddf\u8e2a\u5e94\u7528\u7684\u5e38\u89c4\u6d41\u3002 \u53ef\u80fd\u5177\u6709\u957f\u671f\u503c\u3002")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Warning\uff08\u8b66\u544a\uff09"),(0,r.kt)("td",{parentName:"tr",align:null},"3"),(0,r.kt)("td",{parentName:"tr",align:"center"},"LogWarning"),(0,r.kt)("td",{parentName:"tr",align:null},"\u5bf9\u4e8e\u5f02\u5e38\u4e8b\u4ef6\u6216\u610f\u5916\u4e8b\u4ef6\u3002 \u901a\u5e38\u5305\u62ec\u4e0d\u4f1a\u5bfc\u81f4\u5e94\u7528\u5931\u8d25\u7684\u9519\u8bef\u6216\u60c5\u51b5\u3002")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Error\uff08\u9519\u8bef\uff09"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:"center"},"LogError"),(0,r.kt)("td",{parentName:"tr",align:null},"\u8868\u793a\u65e0\u6cd5\u5904\u7406\u7684\u9519\u8bef\u548c\u5f02\u5e38\u3002 \u8fd9\u4e9b\u6d88\u606f\u8868\u793a\u5f53\u524d\u64cd\u4f5c\u6216\u8bf7\u6c42\u5931\u8d25\uff0c\u800c\u4e0d\u662f\u6574\u4e2a\u5e94\u7528\u5931\u8d25\u3002")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:"center"},"Critical\uff08\u4e25\u91cd\uff09"),(0,r.kt)("td",{parentName:"tr",align:null},"5"),(0,r.kt)("td",{parentName:"tr",align:"center"},"LogCritical"),(0,r.kt)("td",{parentName:"tr",align:null},"\u9700\u8981\u7acb\u5373\u5173\u6ce8\u7684\u5931\u8d25\u3002 \u4f8b\u5982\u6570\u636e\u4e22\u5931\u3001\u78c1\u76d8\u7a7a\u95f4\u4e0d\u8db3\u3002")))),(0,r.kt)("h2",{id:"184-\u5982\u4f55\u4f7f\u7528"},"18.4 \u5982\u4f55\u4f7f\u7528"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},".NET 5")," \u6846\u67b6\u4e2d\uff0c\u5fae\u8f6f\u5df2\u7ecf\u4e3a\u6211\u4eec\u5185\u7f6e\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u65e5\u5fd7\u7ec4\u4ef6"),"\uff0c\u6b63\u5e38\u60c5\u51b5\u4e0b\uff0c\u65e0\u9700\u6211\u4eec\u5f15\u7528\u7b2c\u4e09\u65b9\u5305\u8fdb\u884c\u65e5\u5fd7\u8bb0\u5f55\u3002",(0,r.kt)("inlineCode",{parentName:"p"},".NET 5")," \u6846\u67b6\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u4e24\u79cd\u65e5\u5fd7\u5bf9\u8c61\u521b\u5efa\u65b9\u5f0f\u3002"),(0,r.kt)("h3",{id:"1841-iloggert-\u6cdb\u578b\u65b9\u5f0f"},"18.4.1 ",(0,r.kt)("inlineCode",{parentName:"h3"},"ILogger")," \u6cdb\u578b\u65b9\u5f0f"),(0,r.kt)("p",null,"\u4f7f\u7528\u975e\u5e38\u7b80\u5355\uff0c\u53ef\u4ee5\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"ILogger")," \u5bf9\u8c61\u8fdb\u884c\u6ce8\u5165\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5}",showLineNumbers:!0,"":!0,"{5}":!0},'public class PrivacyModel : PageModel\n{\n private readonly ILogger _logger;\n\n public PrivacyModel(ILogger logger)\n {\n _logger = logger;\n }\n\n public void OnGet()\n {\n _logger.LogInformation("GET Pages.PrivacyModel called.");\n }\n}\n')),(0,r.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u901a\u8fc7\u6cdb\u578b ",(0,r.kt)("inlineCode",{parentName:"p"},"ILogger")," \u65b9\u5f0f\u5199\u5165\u65e5\u5fd7\uff0c\u90a3\u4e48\u9ed8\u8ba4\u5c06 ",(0,r.kt)("inlineCode",{parentName:"p"},"T")," \u7c7b\u578b\u5b8c\u6574\u7c7b\u578b\u540d\u79f0\u4f5c\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u65e5\u5fd7\u7c7b\u522b"),"\u3002")),(0,r.kt)("h3",{id:"1842-iloggerfactory-\u5de5\u5382\u65b9\u5f0f"},"18.4.2 ",(0,r.kt)("inlineCode",{parentName:"h3"},"ILoggerFactory")," \u5de5\u5382\u65b9\u5f0f"),(0,r.kt)("p",null,"\u4f7f\u7528\u5de5\u5382\u65b9\u5f0f\uff0c\u9700\u624b\u52a8\u4f20\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u65e5\u5fd7\u7c7b\u522b"),"\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,7}",showLineNumbers:!0,"":!0,"{5,7}":!0},'public class ContactModel : PageModel\n{\n private readonly ILogger _logger;\n\n public ContactModel(ILoggerFactory logger)\n {\n _logger = logger.CreateLogger("MyCategory");\n }\n\n public void OnGet()\n {\n _logger.LogInformation("GET Pages.ContactModel called.");\n }\n}\n')),(0,r.kt)("h3",{id:"1843-log-\u9759\u6001\u7c7b\u65b9\u5f0f"},"18.4.3 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Log")," \u9759\u6001\u7c7b\u65b9\u5f0f"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.2.1 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,10-15}",showLineNumbers:!0,"{2,5,10-15}":!0},'// \u521b\u5efa\u65e5\u5fd7\u5bf9\u8c61\nvar logger = Log.CreateLogger("\u65e5\u5fd7\u540d\u79f0");\n\n// \u521b\u5efa\u65e5\u5fd7\u5de5\u5382\nusing var loggerFactory = Log.CreateLoggerFactory(builder => {\n // ....\n});\n\n// \u65e5\u5fd7\u8bb0\u5f55\nLog.Information("Information");\nLog.Warning("Warning");\nLog.Error("Error");\nLog.Debug("Debug");\nLog.Trace("Trace");\nLog.Critical("Critical");\n')),(0,r.kt)("h3",{id:"1844-\u61d2\u4eba\u6a21\u5f0f-"},"18.4.4 ",(0,r.kt)("inlineCode",{parentName:"h3"},"\u61d2\u4eba\u6a21\u5f0f")," \ud83d\ude01"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u63d0\u4f9b\u4e86\u66f4\u61d2\u7684\u65b9\u5f0f\u5199\u5165\u65e5\u5fd7\uff0c\u4e5f\u5c31\u662f\u901a\u8fc7\u5b57\u7b26\u4e32\u62d3\u5c55\u7684\u65b9\u5f0f\u5199\u5165\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'"\u7b80\u5355\u65e5\u5fd7".LogInformation();\n\n"\u767e\u5c0f\u50e7 \u65b0\u589e\u4e86\u4e00\u6761\u8bb0\u5f55".LogInformation();\n\n"\u7a0b\u5e8f\u51fa\u73b0\u5f02\u5e38\u5566".LogError();\n\n"\u8fd9\u662f\u81ea\u5b9a\u4e49\u7c7b\u522b\u65e5\u5fd7".SetCategory("\u7c7b\u522b").LogInformation();\n')),(0,r.kt)("p",null,"\u901a\u8fc7\u5b57\u7b26\u4e32\u62d3\u5c55\u65b9\u5f0f\u53ef\u4ee5\u5728\u4efb\u4f55\u65f6\u5019\u65b9\u4fbf\u8bb0\u5f55\u65e5\u5fd7\uff0c\u4e13\u95e8\u4e3a\u61d2\u4eba\u63d0\u4f9b\u7684\u3002"),(0,r.kt)("h2",{id:"185-\u914d\u7f6e\u65e5\u5fd7\u8f93\u51fa\u4ecb\u8d28"},"18.5 \u914d\u7f6e\u65e5\u5fd7\u8f93\u51fa\u4ecb\u8d28"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5c0f\u8282\u4ec5\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 3.9.0+")," \u7248\u672c\u63d0\u4f9b\u3002")),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u5e94\u7528\u7a0b\u5e8f\u4e2d\uff0c\u4e3b\u673a\u542f\u52a8\u65f6\u9ed8\u8ba4\u6ce8\u518c\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"ConsoleLoggerProvider")," \u63d0\u4f9b\u5668\uff0c\u4e5f\u5c31\u662f\u63a7\u5236\u53f0\u65e5\u5fd7\u8f93\u51fa\u63d0\u4f9b\u5668\uff0c\u6240\u4ee5\u65e0\u9700\u4efb\u4f55\u6ce8\u518c\u670d\u52a1\u5373\u53ef\u5728\u63a7\u5236\u53f0\u8f93\u51fa\u3002"),(0,r.kt)("h3",{id:"1851-\u8f93\u51fa\u5230\u63a7\u5236\u53f0"},"18.5.1 \u8f93\u51fa\u5230\u63a7\u5236\u53f0"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"info: Furion.EventBus.EventBusHostedService[0]\n EventBus Hosted Service is running.\ninfo: Microsoft.Hosting.Lifetime[14]\n Now listening on: https://localhost:5001\ninfo: Microsoft.Hosting.Lifetime[14]\n Now listening on: http://localhost:5000\ninfo: Microsoft.Hosting.Lifetime[0]\n Application started. Press Ctrl+C to shut down.\ninfo: Microsoft.Hosting.Lifetime[0]\n Hosting environment: Development\ninfo: Microsoft.Hosting.Lifetime[0]\n Content root path: C:\\Workplaces\\Furion\\samples\\Furion.Web.Entry\\\n")),(0,r.kt)("p",null,"\u5982\u679c\u5e0c\u671b\u4e0d\u8f93\u51fa\u67d0\u4e9b\u65e5\u5fd7\u7c7b\u522b\u7684\u65e5\u5fd7\u53ef\u4ee5\u6dfb\u52a0\u4ee5\u4e0b\u8fc7\u6ee4\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u63a7\u5236\u53f0\u8f93\u51fa\u8fc7\u6ee4"))),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},".NET5")," \u7248\u672c\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,2,4}",showLineNumbers:!0,"{1,2,4}":!0},'Host.CreateDefaultBuilder(args)\n .ConfigureLogging(logging =>\n {\n logging.AddFilter((provider, category, logLevel) =>\n {\n return !new[] { "Microsoft.Hosting", "Microsoft.AspNetCore" }.Any(u => category.StartsWith(u))\n && logLevel >= LogLevel.Information;\n });\n })\n')),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},".NET6+")," \u7248\u672c\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3}",showLineNumbers:!0,"{1,3}":!0},'var builder = WebApplication.CreateBuilder(args);\n\nbuilder.Logging.AddFilter((provider, category, logLevel) =>\n{\n return !new[] { "Microsoft.Hosting", "Microsoft.AspNetCore" }.Any(u => category.StartsWith(u))\n && logLevel >= LogLevel.Information;\n});\n')),(0,r.kt)("p",null,"\u6216\u8005 ",(0,r.kt)("inlineCode",{parentName:"p"},"Serve.Run")," \u65b9\u5f0f"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,7-10}",showLineNumbers:!0,"{1,3,7-10}":!0},'Serve.Run(RunOptions.Default.AddWebComponent());\n\npublic class WebComponent : IWebComponent\n{\n public void Load(WebApplicationBuilder builder, ComponentContext componentContext)\n {\n builder.Logging.AddFilter((provider, category, logLevel) =>\n {\n return !new[] { "Microsoft.Hosting", "Microsoft.AspNetCore" }.Any(u => category.StartsWith(u))\n && logLevel >= LogLevel.Information;\n });\n }\n}\n')),(0,r.kt)("admonition",{title:"\u65e5\u5fd7\u8fc7\u6ee4\u65e0\u6548\u60c5\u51b5",type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"\u5047\u5982\u4f7f\u7528\u4e0a\u8ff0\u4ee3\u7801\u8fc7\u6ee4\u65e0\u6548\uff08\u4e0d\u80fd\u8fc7\u6ee4\u9ed8\u8ba4\u7684\u4e3b\u673a\u65e5\u5fd7\uff09\uff0c\u90a3\u4e48\u8bf7\u786e\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"appsettings.Development.json")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Logging:Level")," \u662f\u5426\u5982\u4e0b\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {4-5}",showLineNumbers:!0,"{4-5}":!0},'{\n "Logging": {\n "LogLevel": {\n "Default": "Information",\n "Microsoft.AspNetCore": "Warning",\n "Microsoft.EntityFrameworkCore": "Information"\n }\n }\n}\n')),(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c\u914d\u7f6e\u4e86\u4ee5\u4e0b\u914d\u7f6e\uff0c",(0,r.kt)("strong",{parentName:"p"},"\u8bf7\u5220\u9664"),"\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-json"},'"Microsoft": "Warning",\n"Microsoft.Hosting.Lifetime": "Information",\n'))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u63a7\u5236\u53f0\u65e5\u5fd7\u6807\u51c6\u5316\u6a21\u677f"))),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.5.0 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u9ed8\u8ba4\u63a7\u5236\u53f0\u65e5\u5fd7\u76f8\u5bf9\u7b80\u6d01\uff0c\u5e76\u672a\u5305\u542b\u5e38\u89c1\u7684\u65e5\u5fd7\u65f6\u95f4\u3001\u7ebf\u7a0b ",(0,r.kt)("inlineCode",{parentName:"p"},"Id")," \u7b49\uff0c\u800c\u4e14\u81ea\u5b9a\u4e49\u6a21\u677f\u4e5f\u76f8\u5bf9\u590d\u6742\uff0c\u6240\u4ee5 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.5.0+")," \u7248\u672c\u63d0\u4f9b\u4e86\u7b80\u5316\u914d\u7f6e\uff0c\u5982\uff1a"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"Startup.cs")," \u65b9\u5f0f")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddConsoleFormatter();\n")),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},".NET5")," \u65b9\u5f0f")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,4}",showLineNumbers:!0,"{2,4}":!0},"Host.CreateDefaultBuilder(args)\n .ConfigureLogging(logging =>\n {\n logging.AddConsoleFormatter();\n });\n")),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},".NET6")," \u65b9\u5f0f")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"{3}":!0},"var builder = WebApplication.CreateBuilder(args);\n\nbuilder.Logging.AddConsoleFormatter();\n")),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"Serve.Run()")," \u65b9\u5f0f")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,7}",showLineNumbers:!0,"{1,3,7}":!0},"Serve.Run(RunOptions.Default.AddWebComponent());\n\npublic class WebComponent : IWebComponent\n{\n public void Load(WebApplicationBuilder builder, ComponentContext componentContext)\n {\n builder.Logging.AddConsoleFormatter();\n }\n}\n")),(0,r.kt)("p",null,"\u8f93\u51fa\u7ed3\u679c\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"info: 2022-09-27T13:17:33.5958395+08:00 System.Logging.EventBusService[0] #1\n EventBus Hosted Service is running.\ninfo: 2022-09-27T13:17:35.1666167+08:00 Microsoft.Hosting.Lifetime[ListeningOnAddress] #1\n Now listening on: https://localhost:5001\ninfo: 2022-09-27T13:17:35.1728106+08:00 Microsoft.Hosting.Lifetime[ListeningOnAddress] #1\n Now listening on: http://localhost:5000\ninfo: 2022-09-27T13:17:35.1893063+08:00 Microsoft.Hosting.Lifetime[0] #1\n Application started. Press Ctrl+C to shut down.\ninfo: 2022-09-27T13:17:35.1941484+08:00 Microsoft.Hosting.Lifetime[0] #1\n Hosting environment: Development\ninfo: 2022-09-27T13:17:35.1996545+08:00 Microsoft.Hosting.Lifetime[0] #1\n Content root path: D:\\Workplaces\\OpenSources\\Furion\\samples\\Furion.Web.Entry\\\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u81ea\u5b9a\u4e49\u63a7\u5236\u53f0\u65e5\u5fd7\u8f93\u51fa\u6a21\u677f"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,13,15}",showLineNumbers:!0,"{1,3,13,15}":!0},'services.AddConsoleFormatter(options =>\n{\n options.MessageFormat = (logMsg) =>\n {\n var stringBuilder = new StringBuilder();\n stringBuilder.Append(DateTime.Now.ToString("o"));\n // \u5176\u4ed6\u7684\u3002\u3002\u3002\u81ea\u5df1\u7ec4\u88c5\n return stringBuilder.ToString();\n };\n});\n\n// \u8f93\u51fa\u4e3a JSON \u683c\u5f0f\uff0cFurion 4.5.2+\nservices.AddConsoleFormatter(options =>\n{\n options.MessageFormat = LoggerFormatter.Json;\n // Furion 4.8.0+ \u65b0\u589e JSON \u7f8e\u5316\u8f93\u51fa\n options.MessageFormat = LoggerFormatter.JsonIndented;\n});\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u81ea\u5b9a\u4e49\u65e5\u5fd7\u8f93\u51fa\u65f6\u95f4\u683c\u5f0f"))),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.5.1 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3}",showLineNumbers:!0,"{1,3}":!0},'services.AddConsoleFormatter(options =>\n{\n options.DateFormat = "yyyy-MM-dd HH:mm:ss.fffffff zzz dddd";\n});\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},"info: 2022-09-28 02:02:20(+08:00) \u661f\u671f\u4e09 System.Logging.EventBusService[0] #1\n EventBus Hosted Service is running.\ninfo: 2022-09-28 02:02:22(+08:00) \u661f\u671f\u4e09 Microsoft.Hosting.Lifetime[14] #1\n Now listening on: https://localhost:5001\ninfo: 2022-09-28 02:02:22(+08:00) \u661f\u671f\u4e09 Microsoft.Hosting.Lifetime[14] #1\n Now listening on: http://localhost:5000\ninfo: 2022-09-28 02:02:22(+08:00) \u661f\u671f\u4e09 Microsoft.Hosting.Lifetime[0] #1\n Application started. Press Ctrl+C to shut down.\ninfo: 2022-09-28 02:02:22(+08:00) \u661f\u671f\u4e09 Microsoft.Hosting.Lifetime[0] #1\n Hosting environment: Development\ninfo: 2022-09-28 02:02:22(+08:00) \u661f\u671f\u4e09 Microsoft.Hosting.Lifetime[0] #1\n Content root path: D:\\Workplaces\\OpenSources\\Furion\\samples\\Furion.Web.Entry\\\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5b8c\u6574\u81ea\u5b9a\u4e49\u65e5\u5fd7\u683c\u5f0f\u5316\u5199\u5165"))),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.5.2 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,5}",showLineNumbers:!0,"{1,3,5}":!0},"services.AddConsoleFormatter(options =>\n{\n options.WriteHandler = (logMsg, scopeProvider, writer, fmtMsg, opt) =>\n {\n writer.WriteLine(fmtMsg);\n };\n});\n")),(0,r.kt)("h3",{id:"1852-\u8f93\u51fa\u5230\u6587\u4ef6"},"18.5.2 \u8f93\u51fa\u5230\u6587\u4ef6"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u57fa\u7840\u4f7f\u7528"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,8}",showLineNumbers:!0,"{2,5,8}":!0},'// \u4f8b\u5b50\u4e00\uff1a\u542f\u52a8\u5c42\u6839\u76ee\u5f55\u8f93\u51fa\nservices.AddFileLogging("application.log");\n\n// \u4f8b\u5b50\u4e8c\uff1a\u652f\u6301\u8def\u5f84\nservices.AddFileLogging("logs/application.log");\n\n// \u4f8b\u5b50\u4e09\uff1a\u652f\u6301\u65e5\u5fd7\u8ffd\u52a0\u8fd8\u662f\u8986\u76d6\uff0c\u8bbe\u7f6e true \u4e3a\u8ffd\u52a0\uff0cfalse \u4e3a\u8986\u76d6\nservices.AddFileLogging("application.log", true);\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u4ece\u914d\u7f6e\u6587\u4ef6\u8bfb\u53d6\u914d\u7f6e"))),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"\u53ea\u6709\u4e0d\u5728 ",(0,r.kt)("inlineCode",{parentName:"strong"},".AddFile")," \u7b2c\u4e00\u4e2a\u53c2\u6570\u914d\u7f6e\u6587\u4ef6\u540d\u624d\u4f1a\u81ea\u52a8\u52a0\u8f7d\u914d\u7f6e\uff0c\u4e5f\u5c31\u662f\u6587\u4ef6\u540d\u5e94\u8be5\u914d\u7f6e\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u3002"))),(0,r.kt)("p",null,"\u6587\u4ef6\u65e5\u5fd7\u914d\u7f6e\u8bf4\u660e\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2,7-13,16-22}",showLineNumbers:!0,"{2,7-13,16-22}":!0},'{\n "Logging": {\n "LogLevel": {\n "Default": "Information"\n // .... appsettings \u9ed8\u8ba4\u914d\u7f6e\n },\n "File": {\n "FileName": "application.log", // \u65e5\u5fd7\u6587\u4ef6\u5b8c\u6574\u8def\u5f84\u6216\u6587\u4ef6\u540d\uff0c\u63a8\u8350 .log \u4f5c\u4e3a\u62d3\u5c55\u540d\n "Append": true, // \u8ffd\u52a0\u5230\u5df2\u5b58\u5728\u65e5\u5fd7\u6587\u4ef6\u6216\u8986\u76d6\u5b83\u4eec\n "MinimumLevel": "Information", // \u6700\u4f4e\u65e5\u5fd7\u8bb0\u5f55\u7ea7\u522b\n "FileSizeLimitBytes": 0, // \u63a7\u5236\u6bcf\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\u6700\u5927\u5b58\u50a8\u5927\u5c0f\uff0c\u5355\u4f4d\u662f B\uff0c\u4e5f\u5c31\u662f 1024 \u624d\u7b49\u4e8e 1KB\uff0c\u9ed8\u8ba4\u65e0\u9650\u5236\uff0c\u5982\u679c\u6307\u5b9a\u4e86\u8be5\u503c\uff0c\u90a3\u4e48\u65e5\u5fd7\u6587\u4ef6\u5927\u5c0f\u8d85\u51fa\u4e86\u8be5\u914d\u7f6e\u5c31\u4f1a\u521b\u5efa\u65b0\u7684\u65e5\u5fd7\u6587\u4ef6\uff0c\u65b0\u521b\u5efa\u7684\u65e5\u5fd7\u6587\u4ef6\u547d\u540d\u89c4\u5219\uff1a\u6587\u4ef6\u540d+[\u9012\u589e\u5e8f\u53f7].log\n "MaxRollingFiles": 0 // \u63a7\u5236\u6700\u5927\u521b\u5efa\u7684\u65e5\u5fd7\u6587\u4ef6\u6570\u91cf\uff0c\u9ed8\u8ba4\u65e0\u9650\u5236\uff0c\u914d\u5408 FileSizeLimitBytes \u4f7f\u7528\uff0c\u5982\u679c\u6307\u5b9a\u4e86\u8be5\u503c\uff0c\u90a3\u4e48\u8d85\u51fa\u8be5\u503c\u5c06\u4ece\u6700\u521d\u65e5\u5fd7\u6587\u4ef6\u4e2d\u4ece\u5934\u5199\u5165\u8986\u76d6\n }\n },\n // \u81ea\u5b9a\u4e49\u914d\u7f6e\u8282\u70b9\n "MyLogger": {\n "FileName": "application.log",\n "Append": true,\n "MinimumLevel": "Information",\n "FileSizeLimitBytes": 0,\n "MaxRollingFiles": 0\n }\n}\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,13,16}",showLineNumbers:!0,"{2,5,13,16}":!0},'// \u4f8b\u5b50\u4e00\uff1a\u9ed8\u8ba4\u8bfb\u53d6 Logging:File \u8282\u70b9\nservices.AddFileLogging();\n\n// \u4f8b\u5b50\u4e8c\uff1a\u9ed8\u8ba4\u8bfb\u53d6 Logging:File \u8282\u70b9\uff0c\u652f\u6301\u66f4\u591a\u914d\u7f6e\nservices.AddFileLogging(options =>\n{\n options.MinimumLevel = LogLevel.Warning;\n\n // \u5176\u4ed6\u914d\u7f6e...\n});\n\n// \u4f8b\u5b50\u4e09\uff1a\u81ea\u5b9a\u4e49\u914d\u7f6e\u8282\u70b9\nservices.AddFileLogging(() => "MyLogger");\n\n// \u4f8b\u5b50\u56db\uff1a\u81ea\u5b9a\u4e49\u914d\u7f6e\u8282\u70b9\uff0c\u652f\u6301\u66f4\u591a\u914d\u7f6e\nservices.AddFileLogging(() => "MyLogger", options =>\n{\n options.MinimumLevel = LogLevel.Warning;\n\n // \u5176\u4ed6\u914d\u7f6e...\n});\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u81ea\u5b9a\u4e49\u65e5\u5fd7\u6587\u4ef6\u540d\u89c4\u5219"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,14,23}",showLineNumbers:!0,"{2,5,14,23}":!0},'// \u4f8b\u5b50\u4e00\uff1a\u652f\u6301\u7cfb\u7edf\u73af\u5883\u53d8\u91cf\uff0c\u5982%SystemDrive%\uff0c%SystemRoot%\nservices.AddFileLogging("application%SystemDrive%-%SystemRoot%.log");\n\n// \u4f8b\u5b50\u4e8c\uff1a\u6bcf\u5929\u521b\u5efa\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\nservices.AddFileLogging("application-{0:yyyy}-{0:MM}-{0:dd}.log", options =>\n{\n options.FileNameRule = fileName =>\n {\n return string.Format(fileName, DateTime.UtcNow);\n };\n});\n\n// \u4f8b\u5b50\u4e09\uff0c\u4efb\u4f55\u81ea\u5df1\u559c\u6b22\u7684\u547d\u540d\u89c4\u5219\nservices.AddFileLogging("application-{0:yyyy}-{0:MM}-{0:dd}.log", options =>\n{\n options.FileNameRule = fileName =>\n {\n // your rule...\n };\n});\n\n// \u4f8b\u5b50\u56db\uff0c\u6279\u91cf\u8bbe\u7f6e\u591a\u4e2a\nArray.ForEach(new[] { LogLevel.Information, LogLevel.Warning, LogLevel.Error }, logLevel =>\n{\n services.AddFileLogging("application-{1}-{0:yyyy}-{0:MM}-{0:dd}.log", options =>\n {\n options.FileNameRule = fileName => string.Format(fileName, DateTime.UtcNow, logLevel.ToString());\n options.WriteFilter = logMsg => logMsg.LogLevel == logLevel;\n });\n});\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u65e5\u5fd7\u8fc7\u6ee4\u5668/\u7b5b\u9009\u5668"))),(0,r.kt)("p",null,"\u901a\u8fc7\u65e5\u5fd7\u7b5b\u9009\u5668\u53ef\u4ee5\u5bf9\u65e5\u5fd7\u8fdb\u884c\u5f52\u7c7b\u5199\u5165"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,10,19}",showLineNumbers:!0,"{2,10,19}":!0},'// \u4f8b\u5b50\u4e00\uff1a\u6839\u636e\u65e5\u5fd7\u7ea7\u522b\u8f93\u51fa\nservices.AddFileLogging("infomation.log", options =>\n{\n options.WriteFilter = (logMsg) =>\n {\n return logMsg.LogLevel == LogLevel.Information;\n };\n});\n\nservices.AddFileLogging("error.log", options =>\n{\n options.WriteFilter = (logMsg) =>\n {\n return logMsg.LogLevel == LogLevel.Error;\n };\n});\n\n// \u4f8b\u5b50\u4e8c\uff0c\u6839\u636e\u4efb\u4f55\u89c4\u5219\uff0c\u6bd4\u5982\u7279\u5b9a\u7684\u7c7b\u540d\nservices.AddFileLogging("someclass.log", options =>\n{\n options.WriteFilter = (logMsg) =>\n {\n return logMsg.LogName.Contains("SomeClassName");\n };\n});\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u81ea\u5b9a\u4e49\u65e5\u5fd7\u6a21\u677f"))),(0,r.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86\u6807\u51c6\u7684\u65e5\u5fd7\u8f93\u51fa\u6a21\u677f\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"2022-07-23T20:16:29.3459053+08:00 [INF] [Furion.EventBus.EventBusHostedService] [0] EventBus Hosted Service is running.\n2022-07-23T20:16:29.5827366+08:00 [INF] [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down.\n2022-07-23T20:16:29.5828798+08:00 [INF] [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development\n2022-07-23T20:16:29.5829377+08:00 [INF] [Microsoft.Hosting.Lifetime] [0] Content root path: C:\\Workplaces\\Furion\\samples\\Furion.Web.Entry\\\n")),(0,r.kt)("p",null,"\u5982\u9700\u81ea\u5b9a\u4e49\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,16,34,47,49}",showLineNumbers:!0,"{2,16,34,47,49}":!0},'// \u4f8b\u5b50\u4e00\uff0c\u81ea\u5b9a\u4e49\u65e5\u5fd7\u6a21\u677f\uff08\u5e38\u7528\uff09\nservices.AddFileLogging("mytemplate.log", options =>\n{\n options.MessageFormat = (logMsg) =>\n {\n var stringBuilder = new StringBuilder();\n\n stringBuilder.Append(DateTime.Now.ToString("o"));\n // \u5176\u4ed6\u7684\u3002\u3002\u3002\u81ea\u5df1\u7ec4\u88c5\n\n return stringBuilder.ToString();\n };\n});\n\n// \u4f8b\u5b50\u4e8c\uff0c\u9700\u8981\u8f93\u51fa json \u683c\u5f0f\uff0c\u6bd4\u5982\u5bf9\u63a5\u963f\u91cc\u4e91\u65e5\u5fd7\uff0ckibana\u7b2c\u4e09\u65b9\u65e5\u5fd7\u4f7f\u7528\u8fd9\u4e2a\nservices.AddFileLogging("mytemplate.log", options =>\n{\n options.MessageFormat = (logMsg) =>\n {\n // \u9ad8\u6027\u80fd\u5199\u5165\n return logMsg.WriteArray(writer =>\n {\n writer.WriteStringValue(DateTime.Now.ToString("o"));\n writer.WriteStringValue(logMsg.LogLevel.ToString());\n writer.WriteStringValue(logMsg.LogName);\n writer.WriteNumberValue(logMsg.EventId.Id);\n writer.WriteStringValue(logMsg.Message);\n writer.WriteStringValue(logMsg.Exception?.ToString());\n });\n };\n});\n\n// \u4f8b\u5b50\u4e8c\uff0c\u9700\u8981\u8f93\u51fa json \uff08\u81ea\u5b9a\u4e49\uff09\u683c\u5f0f\uff0c\u6bd4\u5982\u5bf9\u63a5\u963f\u91cc\u4e91\u65e5\u5fd7\uff0ckibana\u7b2c\u4e09\u65b9\u65e5\u5fd7\u4f7f\u7528\u8fd9\u4e2a\nservices.AddFileLogging("mytemplate.log", options =>\n{\n options.MessageFormat = (logMsg) =>\n {\n // \u9ad8\u6027\u80fd\u5199\u5165\n return logMsg.Write(writer =>\n {\n // write \u5bf9\u8c61\u4e3a Utf8JsonWriter\uff0c\u53ef\u901a\u8fc7\u6d41\u5199\u5165\uff0c\u6027\u80fd\u6781\u9ad8\n });\n };\n});\n\n// \u8f93\u51fa\u4e3a JSON \u683c\u5f0f\uff0cFurion 4.5.2+\nservices.AddFileLogging("mytemplate.log", options =>\n{\n options.MessageFormat = LoggerFormatter.Json;\n // Furion 4.8.0+ \u65b0\u589e JSON \u7f8e\u5316\u8f93\u51fa\n options.MessageFormat = LoggerFormatter.JsonIndented;\n});\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u65e5\u5fd7\u5199\u5165\u5931\u8d25\u5904\u7406"))),(0,r.kt)("p",null,"\u6709\u65f6\u5019\u53ef\u80fd\u56e0\u4e3a\u65e5\u5fd7\u6587\u4ef6\u88ab\u6253\u5f00\u6216\u8005\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u5360\u7528\u4e86\uff0c\u90a3\u4e48\u5c31\u4f1a\u5bfc\u81f4\u65e5\u5fd7\u5199\u5165\u5931\u8d25\uff0c\u8fd9\u65f6\u5019\u53ef\u4ee5\u8fdb\u884c\u5176\u4ed6\u76f8\u5173\u5904\u7406\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,11,15}",showLineNumbers:!0,"{2,11,15}":!0},'// \u4f8b\u5b50\u4e00\uff1a\u5176\u4ed6\u5904\u7406\nservices.AddFileLogging("template-obj.log", options =>\n{\n options.HandleWriteError = (writeError) =>\n {\n // ~~\n };\n});\n\n// \u4f8b\u5b50\u4e8c\uff0c\u542f\u7528\u5907\u7528\u65e5\u5fd7\u6587\u4ef6\u529f\u80fd\uff0c\u4e5f\u5c31\u662f\u5982\u679c\u6587\u4ef6\u88ab\u5360\u7528\u4e86\uff0c\u53ef\u4ee5\u521b\u5efa\u65b0\u7684\u5907\u7528\u65e5\u5fd7\u7ee7\u7eed\u5199\u5165\uff0c\u63a8\u8350\uff01\uff01\uff01\nservices.AddFileLogging("template-obj.log", options =>\n{\n options.HandleWriteError = (writeError) =>\n {\n writeError.UseRollbackFileName(Path.GetFileNameWithoutExtension(writeError.CurrentFileName) + "-oops" + Path.GetExtension(writeError.CurrentFileName));\n };\n});\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u81ea\u5b9a\u4e49\u65e5\u5fd7\u8f93\u51fa\u65f6\u95f4\u683c\u5f0f"))),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.5.1 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3}",showLineNumbers:!0,"{1,3}":!0},'services.AddFileLogging("application.log", options =>\n{\n options.DateFormat = "yyyy-MM-dd HH:mm:ss.fffffff zzz dddd";\n});\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},"info: 2022-09-28 02:02:20(+08:00) \u661f\u671f\u4e09 System.Logging.EventBusService[0] #1\n EventBus Hosted Service is running.\ninfo: 2022-09-28 02:02:22(+08:00) \u661f\u671f\u4e09 Microsoft.Hosting.Lifetime[14] #1\n Now listening on: https://localhost:5001\ninfo: 2022-09-28 02:02:22(+08:00) \u661f\u671f\u4e09 Microsoft.Hosting.Lifetime[14] #1\n Now listening on: http://localhost:5000\ninfo: 2022-09-28 02:02:22(+08:00) \u661f\u671f\u4e09 Microsoft.Hosting.Lifetime[0] #1\n Application started. Press Ctrl+C to shut down.\ninfo: 2022-09-28 02:02:22(+08:00) \u661f\u671f\u4e09 Microsoft.Hosting.Lifetime[0] #1\n Hosting environment: Development\ninfo: 2022-09-28 02:02:22(+08:00) \u661f\u671f\u4e09 Microsoft.Hosting.Lifetime[0] #1\n Content root path: D:\\Workplaces\\OpenSources\\Furion\\samples\\Furion.Web.Entry\\\n")),(0,r.kt)("h3",{id:"1853-\u8f93\u51fa\u5230\u6570\u636e\u5e93\u5176\u4ed6\u5b58\u50a8\u4ecb\u8d28"},"18.5.3 \u8f93\u51fa\u5230\u6570\u636e\u5e93/\u5176\u4ed6\u5b58\u50a8\u4ecb\u8d28"),(0,r.kt)("p",null,"\u5c06\u65e5\u5fd7\u8f93\u51fa\u5230\u6570\u636e\u5e93\u4e2d\u4e5f\u662f\u975e\u5e38\u5e38\u89c1\u7684\u9700\u6c42\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u628a\u8be5\u529f\u80fd\u505a\u5230\u4e86\u975e\u5e38\u7b80\u5355\uff0c\u652f\u6301\u4efb\u4f55\u5b58\u50a8\u4ecb\u8d28\u3002"),(0,r.kt)("p",null,"\u5728\u5199\u5165\u6570\u636e\u5e93/\u5176\u4ed6\u5b58\u50a8\u4ecb\u8d28\u4e4b\u524d\u9700\u521b\u5efa\u6570\u636e\u5e93\u65e5\u5fd7\u5199\u5165\u5668\u5e76\u5b9e\u73b0 ",(0,r.kt)("inlineCode",{parentName:"p"},"IDatabaseLoggingWriter")," \u63a5\u53e3\uff0c",(0,r.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u4e2a"),"\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,8,12}",showLineNumbers:!0,"{1,5,8,12}":!0},"using Furion.Logging;\n\nnamespace YourProject.Core;\n\npublic class DatabaseLoggingWriter : IDatabaseLoggingWriter\n{\n // \u652f\u6301\u6784\u9020\u51fd\u6570\u6ce8\u5165\u4efb\u4f55\u5b9e\u4f8b\uff0c\u4f1a\u81ea\u52a8\u91ca\u653e\u4efb\u4f55\u670d\u52a1\uff0c\u6bd4\u5982\u6ce8\u5165 IRepository\uff0c\u6216\u8005 SqlSugarClient\n public DatabaseLoggingWriter()\n {\n }\n\n public void Write(LogMessage logMsg, bool flush)\n {\n // \u8fd9\u91cc\u5199\u4f60\u4efb\u4f55\u63d2\u5165\u6570\u636e\u5e93\u7684\u64cd\u4f5c\uff0c\u65e0\u9700 try catch\n }\n}\n")),(0,r.kt)("p",null,"\u4f60\u6ca1\u770b\u9519\uff0c\u5c31\u8fd9\u4e48\u7b80\u5355\uff01\uff01"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u57fa\u7840\u4f7f\u7528"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5}",showLineNumbers:!0,"{2,5}":!0},"// \u4f8b\u5b50\u4e00\uff0c\u9ed8\u8ba4\u914d\u7f6e\nservices.AddDatabaseLogging(options => {});\n\n// \u4f8b\u5b50\u4e8c\uff1a\u81ea\u5b9a\u4e49\u914d\u7f6e\nservices.AddDatabaseLogging(options =>\n{\n options.MinimumLevel = LogLevel.Warning;\n\n // \u5176\u4ed6\u914d\u7f6e...\n});\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u4ece\u914d\u7f6e\u6587\u4ef6\u4e2d\u8bfb\u53d6"))),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"\u53ea\u6709\u4e0d\u5728 ",(0,r.kt)("inlineCode",{parentName:"strong"},".AddDatabase")," \u7b2c\u4e00\u4e2a\u53c2\u6570\u4e3a\u7a7a\u624d\u4f1a\u81ea\u52a8\u52a0\u8f7d\u914d\u7f6e\u3002"))),(0,r.kt)("p",null,"\u6570\u636e\u5e93\u65e5\u5fd7\u914d\u7f6e\u8bf4\u660e\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2,7-9,12-14}",showLineNumbers:!0,"{2,7-9,12-14}":!0},'{\n "Logging": {\n "LogLevel": {\n "Default": "Information"\n // .... appsettings \u9ed8\u8ba4\u914d\u7f6e\n },\n "Database": {\n "MinimumLevel": "Information" // \u6700\u4f4e\u65e5\u5fd7\u8bb0\u5f55\u7ea7\u522b\n }\n },\n // \u81ea\u5b9a\u4e49\u914d\u7f6e\u8282\u70b9\n "MyLogger": {\n "MinimumLevel": "Information"\n }\n}\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,5,5,18,25}",showLineNumbers:!0,"{2,5,5,18,25}":!0},'// \u4f8b\u5b50\u4e00\uff1a\u9ed8\u8ba4\u8bfb\u53d6 Logging:Database \u8282\u70b9\nservices.AddDatabaseLogging();\n\n// \u4f8b\u5b50\u4e8c\uff1a\u9ed8\u8ba4\u8bfb\u53d6 Logging:Database \u8282\u70b9\uff0c\u652f\u6301\u66f4\u591a\u914d\u7f6e\nservices.AddDatabaseLogging(default(string), options =>\n{\n options.MinimumLevel = LogLevel.Warning;\n\n // \u5176\u4ed6\u914d\u7f6e...\n});\n\n// \u4f8b\u5b50\u4e09\uff1a\u81ea\u5b9a\u4e49\u914d\u7f6e\u8282\u70b9\nservices.AddDatabaseLogging("MyLogger");\n// \u6216\nservices.AddDatabaseLogging(() => "MyLogger");\n\n// \u4f8b\u5b50\u56db\uff1a\u81ea\u5b9a\u4e49\u914d\u7f6e\u8282\u70b9\uff0c\u652f\u6301\u66f4\u591a\u914d\u7f6e\nservices.AddDatabaseLogging("MyLogger", options =>\n{\n options.MinimumLevel = LogLevel.Warning;\n\n // \u5176\u4ed6\u914d\u7f6e...\n});\n// \u6216\nservices.AddDatabaseLogging(() => "MyLogger", options =>\n{\n options.MinimumLevel = LogLevel.Warning;\n\n // \u5176\u4ed6\u914d\u7f6e...\n});\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u65e5\u5fd7\u8fc7\u6ee4\u5668/\u7b5b\u9009\u5668"))),(0,r.kt)("p",null,"\u901a\u8fc7\u65e5\u5fd7\u7b5b\u9009\u5668\u53ef\u4ee5\u5bf9\u65e5\u5fd7\u8fdb\u884c\u5f52\u7c7b\u5199\u5165"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,10,19}",showLineNumbers:!0,"{2,10,19}":!0},'// \u4f8b\u5b50\u4e00\uff1a\u6839\u636e\u65e5\u5fd7\u7ea7\u522b\u8f93\u51fa\uff0c\u53ef\u4ee5\u5206\u522b\u5b9a\u4e49 IDatabaseLoggingWriter\uff0c\u4e5f\u53ef\u4ee5\u7528\u540c\u4e00\u4e2a\u5e95\u5c42\u8fdb\u884c\u5224\u65ad\nservices.AddDatabaseLogging(options =>\n{\n options.WriteFilter = (logMsg) =>\n {\n return logMsg.LogLevel == LogLevel.Information;\n };\n});\n// \u53ef\u4ee5\u5206\u522b\u5b9a\u4e49 IDatabaseLoggingWriter\uff0c\u4e5f\u53ef\u4ee5\u7528\u540c\u4e00\u4e2a\u5e95\u5c42\u8fdb\u884c\u5224\u65ad\nservices.AddDatabaseLogging(options =>\n{\n options.WriteFilter = (logMsg) =>\n {\n return logMsg.LogLevel == LogLevel.Error;\n };\n});\n\n// \u4f8b\u5b50\u4e8c\uff0c\u6839\u636e\u4efb\u4f55\u89c4\u5219\uff0c\u6bd4\u5982\u7279\u5b9a\u7684\u7c7b\u540d\nservices.AddDatabaseLogging(options =>\n{\n options.WriteFilter = (logMsg) =>\n {\n return logMsg.LogName.Contains("SomeClassName");\n };\n});\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u81ea\u5b9a\u4e49\u65e5\u5fd7\u6a21\u677f"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,15,17}",showLineNumbers:!0,"{1,3,15,17}":!0},'services.AddDatabaseLogging(options =>\n{\n options.MessageFormat = (logMsg) =>\n {\n var stringBuilder = new StringBuilder();\n\n stringBuilder.Append(DateTime.Now.ToString("o"));\n // \u5176\u4ed6\u7684\u3002\u3002\u3002\u81ea\u5df1\u7ec4\u88c5\n\n return stringBuilder.ToString();\n };\n});\n\n// \u8f93\u51fa\u4e3a JSON \u683c\u5f0f\uff0cFurion 4.5.2+\nservices.AddDatabaseLogging(options =>\n{\n options.MessageFormat = LoggerFormatter.Json;\n // Furion 4.8.0+ \u65b0\u589e JSON \u7f8e\u5316\u8f93\u51fa\n options.MessageFormat = LoggerFormatter.JsonIndented;\n});\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u65e5\u5fd7\u5199\u5165\u5931\u8d25\u5904\u7406"))),(0,r.kt)("p",null,"\u6709\u65f6\u5019\u53ef\u80fd\u56e0\u4e3a\u6570\u636e\u5e93\u8fde\u63a5\u5f02\u5e38\u6216\u5176\u4ed6\u539f\u56e0\u8fde\u63a5\u6c60\u6ee1\uff0c\u90a3\u4e48\u5c31\u4f1a\u5bfc\u81f4\u65e5\u5fd7\u5199\u5165\u5931\u8d25\uff0c\u8fd9\u65f6\u5019\u53ef\u4ee5\u8fdb\u884c\u5176\u4ed6\u76f8\u5173\u5904\u7406\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"{2}":!0},"// \u4f8b\u5b50\u4e00\uff1a\u5176\u4ed6\u5904\u7406\nservices.AddDatabaseLogging(options =>\n{\n options.HandleWriteError = (writeError) =>\n {\n // ~~\n };\n});\n")),(0,r.kt)("h3",{id:"1854-iloggerfactory-\u65b9\u5f0f"},"18.5.4 ",(0,r.kt)("inlineCode",{parentName:"h3"},"ILoggerFactory")," \u65b9\u5f0f"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e5f\u63d0\u4f9b\u4e86\u8fd0\u884c\u65f6\u52a8\u6001\u521b\u5efa\u65e5\u5fd7\u63d0\u4f9b\u5668\u5e76\u5199\u5165\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,7-8}",showLineNumbers:!0,"":!0,"{5,7-8}":!0},'public class ContactModel : PageModel\n{\n private readonly ILogger _logger;\n\n public ContactModel(ILoggerFactory logger)\n {\n // \u652f\u6301\u6240\u6709 AddLoggingFile \u548c AddDatabaseFile \u914d\u7f6e\n _logger = logger.AddFile(....).CreateLogger("MyCategory");\n }\n\n public void OnGet()\n {\n _logger.LogInformation("GET Pages.ContactModel called.");\n }\n}\n')),(0,r.kt)("h3",{id:"1855-iloggingbuilder-\u65b9\u5f0f"},"18.5.5 ",(0,r.kt)("inlineCode",{parentName:"h3"},"ILoggingBuilder")," \u65b9\u5f0f"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e5f\u63d0\u4f9b\u4e86\u539f\u751f ",(0,r.kt)("inlineCode",{parentName:"p"},"services.AddLogging(builder => {})")," \u65b9\u5f0f\u914d\u7f6e\uff0c\u5982"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,5}",showLineNumbers:!0,"{1,3,5}":!0},'services.AddLogging(builder =>\n{\n builder.AddFile("applicaion.log");\n\n builder.AddDatabase();\n\n //....\n});\n')),(0,r.kt)("h3",{id:"1856-\u8bb0\u5f55\u8bf7\u6c42\u65e5\u5fd7"},"18.5.6 \u8bb0\u5f55\u8bf7\u6c42\u65e5\u5fd7"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"ASP.NET 6")," \u4e2d\uff0c\u6846\u67b6\u9ed8\u8ba4\u63d0\u4f9b\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"app.UseHttpLogging()")," \u8bb0\u5f55 ",(0,r.kt)("inlineCode",{parentName:"p"},"HTTP")," \u8bf7\u6c42\u65e5\u5fd7\u529f\u80fd\uff0c\u8be6\u7ec6\u4e86\u89e3\u53ef\u67e5\u770b\u5b98\u65b9\u6587\u6863 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/http-logging/?view=aspnetcore-6.0"},"ASP.NET Core - HTTP \u65e5\u5fd7\u8bb0\u5f55")),(0,r.kt)("p",null,"\u5f53\u7136\u4e5f\u53ef\u4ee5\u81ea\u5b9a\u4e49\u4e2d\u95f4\u4ef6\u7684\u65b9\u5f0f\u5199\uff0c\u53ea\u9700\u8981\u6ce8\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"ILogger<>")," \u63a5\u53e3\u5373\u53ef\u3002"),(0,r.kt)("h3",{id:"1857-debug-\u548c-trace-\u9ed8\u8ba4\u4e0d\u8f93\u51fa\u95ee\u9898"},"18.5.7 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Debug")," \u548c ",(0,r.kt)("inlineCode",{parentName:"h3"},"Trace")," \u9ed8\u8ba4\u4e0d\u8f93\u51fa\u95ee\u9898"),(0,r.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5fae\u8f6f\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"appsettings.Development.json")," \u4e2d\u914d\u7f6e\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"Default")," \u65e5\u5fd7\u7ea7\u522b\uff0c\u5982\u9700\u81ea\u5b9a\u4e49\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {4}",showLineNumbers:!0,"{4}":!0},'{\n "Logging": {\n "LogLevel": {\n "Default": "Information"\n }\n }\n}\n')),(0,r.kt)("p",null,"\u8fd9\u65f6\u5019\u53ea\u9700\u8981\u4fee\u6539 ",(0,r.kt)("inlineCode",{parentName:"p"},"Default")," \u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"Debug")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"Trace")," \u5373\u53ef\uff0c",(0,r.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u4e0d\u540c\u73af\u5883\u52a0\u8f7d\u4e0d\u540c\u7684\u914d\u7f6e\u6587\u4ef6\u3002\u5f00\u53d1\u73af\u5883\u5e94\u4fee\u6539 ",(0,r.kt)("inlineCode",{parentName:"strong"},"appsettings.Development.json")," \u4e0b\u7684\u914d\u7f6e\u3002")),(0,r.kt)("h2",{id:"186-loggingmonitor-\u76d1\u542c\u65e5\u5fd7"},"18.6 ",(0,r.kt)("inlineCode",{parentName:"h2"},"[LoggingMonitor]")," \u76d1\u542c\u65e5\u5fd7"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 3.9.1")," \u7248\u672c\u65b0\u589e\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"[LoggingMonitor]")," \u7279\u6027\uff0c\u652f\u6301\u5728\u63a7\u5236\u5668\u6216\u64cd\u4f5c\u4e2d\u8d34\u8be5\u7279\u6027\uff0c\u53ef\u4ee5\u5b9e\u73b0\u5f3a\u5927\u7684\u8bf7\u6c42\u65e5\u5fd7\u76d1\u542c\uff0c\u65b9\u4fbf\u6d4b\u8bd5\uff0c\u5982\uff1a"),(0,r.kt)("h3",{id:"1861-\u7279\u6027\u914d\u7f6e"},"18.6.1 \u7279\u6027\u914d\u7f6e"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,7}",showLineNumbers:!0,"{1,7}":!0},"using Furion.Logging;\n\nnamespace Furion.Application;\n\npublic class TestLoggerServices : IDynamicApiController\n{\n [LoggingMonitor]\n public PersonDto GetPerson(int id)\n {\n return new PersonDto\n {\n Id = id\n };\n }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"[LoggingMonitor]")," \u652f\u6301\u4ee5\u4e0b\u914d\u7f6e\uff1a",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Title"),"\uff1a\u914d\u7f6e\u6807\u9898\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"Logging Monitor")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"WithReturnValue"),"\uff1a\u662f\u5426\u5305\u542b\u8fd4\u56de\u503c\u6253\u5370\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"true"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"Furion 4.3.9+ \u6709\u6548")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ReturnValueThreshold"),"\uff1a\u914d\u7f6e\u8fd4\u56de\u503c\u5b57\u7b26\u4e32\u9608\u503c\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"int")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"0")," \u5168\u91cf\u8f93\u51fa\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"Furion 4.3.9+ \u6709\u6548")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"JsonBehavior"),"\uff1a\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," ",(0,r.kt)("inlineCode",{parentName:"li"},"Json")," \u8f93\u51fa\u884c\u4e3a\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"None"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"Furion 4.5.2+")," \u6709\u6548"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"JsonIndented"),"\uff1a\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"li"},"LoggingMonitor")," ",(0,r.kt)("inlineCode",{parentName:"li"},"Json")," \u683c\u5f0f\u5316\u884c\u4e3a\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"false"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"Furion 4.8.0+")," \u6709\u6548")))),(0,r.kt)("p",null,"\u8f93\u51fa\u65e5\u5fd7\u4e3a\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Logging Monitor \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 Furion.Application.TestLoggerServices.GetPerson (Furion.Application)\n\u2523\n\u2523 \u63a7\u5236\u5668\u540d\u79f0\uff1a TestLoggerServices\n\u2523 \u64cd\u4f5c\u540d\u79f0\uff1a GetPerson\n\u2523 \u8def\u7531\u4fe1\u606f\uff1a [area]: ; [controller]: test-logger; [action]: person\n\u2523 \u8bf7\u6c42\u65b9\u5f0f\uff1a POST\n\u2523 \u8bf7\u6c42\u5730\u5740\uff1a https://localhost:44316/api/test-logger/person/11\n\u2523 \u6765\u6e90\u5730\u5740\uff1a https://localhost:44316/api/index.html\n\u2523 \u6d4f\u89c8\u5668\u6807\u8bc6\uff1a Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62\n\u2523 \u5ba2\u6237\u7aef IP \u5730\u5740\uff1a 0.0.0.1\n\u2523 \u670d\u52a1\u7aef IP \u5730\u5740\uff1a 0.0.0.1\n\u2523 \u670d\u52a1\u7aef\u8fd0\u884c\u73af\u5883\uff1a Development\n\u2523 \u6267\u884c\u8017\u65f6\uff1a 31ms\n\u2523 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 \u6388\u6743\u4fe1\u606f \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 JWT Token\uff1a Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY1ODcxNjc5NywibmJmIjoxNjU4NzE2Nzk3LCJleHAiOjE2NTg3MTc5OTcsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.VYZkwwqCwlUy3aJjuL-og62I0rkxNQ96kSjEm3VgXtg\n\u2523\n\u2523 UserId (integer)\uff1a 1\n\u2523 Account (string)\uff1a admin\n\u2523 iat (integer)\uff1a 1658716797\n\u2523 nbf (integer)\uff1a 1658716797\n\u2523 exp (integer)\uff1a 1658717997\n\u2523 iss (string)\uff1a dotnetchina\n\u2523 aud (string)\uff1a powerby Furion\n\u2523 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 \u53c2\u6570\u5217\u8868 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 Content-Type\uff1a\n\u2523\n\u2523 id (Int32)\uff1a 11\n\u2523 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 \u8fd4\u56de\u4fe1\u606f \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 \u7c7b\u578b\uff1a Furion.Application.Persons.PersonDto\n\u2523 \u8fd4\u56de\u503c\uff1a {"Id":11,"Name":null,"Age":0,"Address":null,"PhoneNumber":null,"QQ":null,"CreatedTime":"0001-01-01T00:00:00+00:00","Childrens":null,"Posts":null}\n\u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Logging Monitor \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n')),(0,r.kt)("h3",{id:"1862-\u5168\u5c40\u914d\u7f6e"},"18.6.2 \u5168\u5c40\u914d\u7f6e"),(0,r.kt)("p",null,"\u5982\u9700\u5168\u5c40\u542f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"LoggingMonitor")," \u529f\u80fd\uff0c\u65e0\u9700\u5728\u6bcf\u4e2a\u63a7\u5236\u5668\u6216\u8005\u65b9\u6cd5\u4e2d\u8d34\uff0c\u5168\u5c40\u6ce8\u518c\u5982\u4e0b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddMvcFilter();\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Furion 4.0.2")," \u65b0\u63a8\u8350\u914d\u7f6e"),(0,r.kt)("p",{parentName:"admonition"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.0.2")," \u7248\u672c\u4e2d\u65b0\u589e\u4e86\u975e\u5e38\u7075\u6d3b\u65b9\u4fbf\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"services.AddMonitorLogging()")," \u670d\u52a1\u914d\u7f6e\uff0c\u53ef\u5728\u914d\u7f6e\u4e2d\u968f\u610f\u63a7\u5236\u54ea\u4e2a\u7c7b\u54ea\u4e2a\u65b9\u6cd5\u542f\u7528\u6216\u4e0d\u542f\u7528\u3002"),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"\u6ce8\u518c\u670d\u52a1")),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddMonitorLogging(); // \u9ed8\u8ba4\u8bfb\u53d6 Logging:Monitor \u4e0b\u914d\u7f6e\uff0c\u652f\u6301\u4f20\u5165\u53c2\u6570\u81ea\u5b9a\u4e49\n")),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"\u6dfb\u52a0\u914d\u7f6e")),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2,3,4-6}",showLineNumbers:!0,"{2,3,4-6}":!0},'{\n "Logging": {\n "Monitor": {\n "GlobalEnabled": false, // \u662f\u5426\u542f\u7528\u5168\u5c40\u62e6\u622a\uff0c\u9ed8\u8ba4 `false`\n "IncludeOfMethods": [], // \u662f\u5426\u6307\u5b9a\u62e6\u622a\u7279\u5b9a\u65b9\u6cd5\uff0c\u5f53 GlobalEnabled: false \u6709\u6548\n "ExcludeOfMethods": [], // \u662f\u5426\u6307\u5b9a\u6392\u9664\u7279\u5b9a\u65b9\u6cd5\uff0c\u5f53 GlobalEnabled: true \u6709\u6548\n "BahLogLevel": "Information", // \u914d\u7f6e Oops.Oh \u548c Oops.Bah \u4e1a\u52a1\u65e5\u5fd7\u8f93\u51fa\u7ea7\u522b\uff0c\u9ed8\u8ba4 Information\n "WithReturnValue": true, // \u914d\u7f6e\u662f\u5426\u5305\u542b\u8fd4\u56de\u503c\uff0c\u9ed8\u8ba4 `true`\uff0cFurion 4.3.9+ \u6709\u6548\n "ReturnValueThreshold": 0, // \u914d\u7f6e\u8fd4\u56de\u503c\u5b57\u7b26\u4e32\u9608\u503c\uff0c\u9ed8\u8ba4 0\uff0c\u5168\u91cf\u8f93\u51fa\uff0cFurion 4.3.9+ \u6709\u6548\n "JsonBehavior": "None", // \u914d\u7f6e LoggingMonitor Json \u8f93\u51fa\u884c\u4e3a\uff0c\u9ed8\u8ba4 None\uff0cFurion 4.5.2+ \u6709\u6548\n "JsonIndented": false, // \u914d\u7f6e LoggingMonitor Json \u683c\u5f0f\u5316\u884c\u4e3a\uff0c\u9ed8\u8ba4 false\uff0cFurion 4.8.2+ \u6709\u6548\n "MethodsSettings": [\n // \u914d\u7f6e\u88ab\u76d1\u89c6\u65b9\u6cd5\u66f4\u591a\u4fe1\u606f\uff0cFurion 4.3.9+ \u6709\u6548\n {\n "FullName": "Furion.Application.TestLoggerServices.MethodName", // \u65b9\u6cd5\u5b8c\u5168\u9650\u5b9a\u540d\n "WithReturnValue": true, // \u914d\u7f6e\u662f\u5426\u5305\u542b\u8fd4\u56de\u503c\uff0c\u9ed8\u8ba4 `true`\uff0cFurion 4.3.9+ \u6709\u6548\n "ReturnValueThreshold": 0, // \u914d\u7f6e\u8fd4\u56de\u503c\u5b57\u7b26\u4e32\u9608\u503c\uff0c\u9ed8\u8ba4 0\uff0c\u5168\u91cf\u8f93\u51fa\uff0cFurion 4.3.9+ \u6709\u6548\n "JsonIndented": false // \u914d\u7f6e LoggingMonitor Json \u683c\u5f0f\u5316\u884c\u4e3a\uff0c\u9ed8\u8ba4 false\uff0cFurion 4.8.2+ \u6709\u6548\n }\n ]\n }\n }\n}\n')),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"IncludeOfMethods")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"ExcludeOfMethods")," \u65b9\u6cd5\u7b7e\u540d\u683c\u5f0f\u4e3a\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"\u7c7b\u5b8c\u5168\u9650\u5b9a\u540d.\u65b9\u6cd5\u540d"),"\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Application.TestNamedServices.GetName"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Application.TestNamedServices")," \u662f\u7c7b\u540d\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"GetName")," \u662f\u65b9\u6cd5\u540d\u3002")),(0,r.kt)("p",null,"\u5982\u679c\u914d\u7f6e\u4e86\u5168\u5c40\u8bf7\u6c42\u76d1\u89c6\u65e5\u5fd7\uff0c\u5bf9\u4e2a\u522b\u4e0d\u9700\u8981\u76d1\u89c6\u7684\u63a5\u53e3\u65b9\u6cd5\u53ea\u9700\u8981\u8d34 ",(0,r.kt)("inlineCode",{parentName:"p"},"[SuppressMonitor]")," \u7279\u6027\u5373\u53ef\u3002"),(0,r.kt)("h3",{id:"1863-\u66f4\u591a\u914d\u7f6e"},"18.6.3 \u66f4\u591a\u914d\u7f6e"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.3.9 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u652f\u6301 ",(0,r.kt)("inlineCode",{parentName:"p"},"LoggingMonitor")," \u5199\u5165\u65e5\u5fd7\u62e6\u622a\uff0c\u5982\u6dfb\u52a0\u989d\u5916\u6570\u636e\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,6}",showLineNumbers:!0,"{1,3,6}":!0},'services.AddMonitorLogging(options =>\n{\n options.ConfigureLogger((logger, logContext, context) =>\n {\n var httpContext = context.HttpContext;\n logContext.Set("extra", "\u5176\u4ed6\u6570\u636e");\n });\n});\n')),(0,r.kt)("p",null,"\u9664\u6b64\u4e4b\u5916\uff0c\u8fd8\u652f\u6301\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"json")," \u8def\u5f84\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'services.AddMonitorLogging(jsonKey: "YourKey:Monitor");\n')),(0,r.kt)("h3",{id:"1864-json-\u683c\u5f0f"},"18.6.4 ",(0,r.kt)("inlineCode",{parentName:"h3"},"JSON")," \u683c\u5f0f"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.5.2 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\u5168\u5c40/\u5c40\u90e8\u542f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"Json")," \u8f93\u51fa\u914d\u7f6e")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,9}",showLineNumbers:!0,"{4,9}":!0},"// \u5168\u5c40\nservices.AddMonitorLogging(options =>\n{\n options.JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson;\n options.JsonIndented = true; // \u662f\u5426\u7f8e\u5316 JSON\uff0cFurion 4.8.0+ \u7248\u672c\u6709\u6548\n});\n\n// \u5c40\u90e8\n[LoggingMonitor(JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson)]\n// \u662f\u5426\u7f8e\u5316 JSON\uff0cFurion 4.8.0+ \u7248\u672c\u6709\u6548\n[LoggingMonitor(JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson, JsonIndented = true)]\n")),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u5173\u4e8e ",(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"JsonBehavior")),(0,r.kt)("p",{parentName:"admonition"},"\u53ea\u6709\u8bbe\u7f6e\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"JsonBehavior.OnlyJson")," \u65f6\u624d\u4e0d\u4f1a\u8f93\u51fa",(0,r.kt)("strong",{parentName:"p"},"\u7f8e\u89c2\u7684"),"\u65e5\u5fd7\u3002")),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},"\u5199\u5165\u5b58\u50a8\u4ecb\u8d28")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {14-18}",showLineNumbers:!0,"{14-18}":!0},'using Furion.Logging;\n\nnamespace YourProject.Core;\n\npublic class DatabaseLoggingWriter : IDatabaseLoggingWriter\n{\n // \u652f\u6301\u6784\u9020\u51fd\u6570\u6ce8\u5165\u4efb\u4f55\u5b9e\u4f8b\uff0c\u4f1a\u81ea\u52a8\u91ca\u653e\u4efb\u4f55\u670d\u52a1\uff0c\u6bd4\u5982\u6ce8\u5165 IRepository\uff0c\u6216\u8005 SqlSugarClient\n public DatabaseLoggingWriter()\n {\n }\n\n public void Write(LogMessage logMsg, bool flush)\n {\n // \u5982\u679c JsonBehavior \u914d\u7f6e\u4e3a OnlyJson \u6216\u8005 All\uff0c\u90a3\u4e48 Context \u5c31\u5305\u542b loggingMonitor \u7684\u503c\n // \u5982\u679c JsonBehavior \u914d\u7f6e\u4e3a OnlyJson\uff0c\u90a3\u4e48\u53ef\u76f4\u63a5\u901a\u8fc7 logMsg.Message \u83b7\u53d6\u7ed3\u679c\u5c31\u662f json \u683c\u5f0f\n if (logMsg.LogName == "System.Logging.LoggingMonitor")\n {\n var jsonString = logMsg.Context.Get("loggingMonitor");\n }\n\n // \u8fd9\u91cc\u5199\u4f60\u4efb\u4f55\u63d2\u5165\u6570\u636e\u5e93\u7684\u64cd\u4f5c\uff0c\u65e0\u9700 try catch\n }\n}\n')),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Json")," \u8f93\u51fa\u683c\u5f0f\u5982\u4e0b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "controllerName": "test-logger",\n "controllerTypeName": "TestLoggerServices",\n "actionName": "person",\n "actionTypeName": "GetPerson",\n "areaName": null,\n "displayName": "Furion.Application.TestLoggerServices.GetPerson (Furion.Application)",\n "localIPv4": "0.0.0.1",\n "remoteIPv4": "0.0.0.1",\n "httpMethod": "GET",\n "requestUrl": "https://localhost:5001/api/test-logger/person/2",\n "refererUrl": "https://localhost:5001/api/index.html?urls.primaryName=\u6570\u636e\u5e93\u64cd\u4f5c\u6f14\u793a",\n "environment": "Development",\n "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.53",\n "requestHeaderAuthorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY2NDQ1MDUwNSwibmJmIjoxNjY0NDUwNTA1LCJleHAiOjE2NjQ0NTE3MDUsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.-xocNcDQGoXClceoVU5QAHIkTcOZ7ZXo0hEbzghDfFI",\n "timeOperationElapsedMilliseconds": 55,\n "authorizationClaims": [\n {\n "type": "UserId",\n "valueType": "integer",\n "value": "1"\n },\n {\n "type": "Account",\n "valueType": "string",\n "value": "admin"\n },\n {\n "type": "iat",\n "valueType": "integer",\n "value": "1664450505"\n },\n {\n "type": "nbf",\n "valueType": "integer",\n "value": "1664450505"\n },\n {\n "type": "exp",\n "valueType": "integer",\n "value": "1664451705"\n },\n {\n "type": "iss",\n "valueType": "string",\n "value": "dotnetchina"\n },\n {\n "type": "aud",\n "valueType": "string",\n "value": "powerby Furion"\n }\n ],\n "parameters": [\n {\n "name": "id",\n "type": "System.Int32",\n "value": 2\n }\n ],\n "returnInformation": {\n "type": "Furion.UnifyResult.RESTfulResult`1[[System.Object, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]",\n "actType": "Furion.Application.Persons.PersonDto",\n "value": {\n "StatusCode": 200,\n "Data": {\n "Id": 2,\n "Name": null,\n "Age": 0,\n "Address": null,\n "PhoneNumber": null,\n "QQ": null,\n "CreatedTime": "0001-01-01T00:00:00+00:00",\n "Childrens": null,\n "Posts": null\n },\n "Succeeded": true,\n "Errors": null,\n "Extras": null,\n "Timestamp": 1664450517341\n }\n },\n "exception": {\n "type": "System.DivideByZeroException",\n "message": "Attempted to divide by zero.",\n "stackTrace": " at Furion.Application.TestLoggerServices.\u6d4b\u8bd5\u65e5\u5fd7\u76d1\u542c8(Int32 id) in D:\\\\Workplaces\\\\OpenSources\\\\Furion\\\\samples\\\\Furion.Application\\\\TestLoggerServices.cs:line 78\\r\\n at lambda_method103(Closure , Object , Object[] )\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Logged|12_1(ControllerActionInvoker invoker)\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)"\n },\n "validation": {\n "errorCode": null,\n "originErrorCode": null,\n "message": "\u51fa\u9519\u4e86\u554a\u3002\u3002\u3002\u3002"\n }\n}\n')),(0,r.kt)("h3",{id:"1865-\u5168\u5c40\u8fc7\u6ee4-writefilter"},"18.6.5 \u5168\u5c40\u8fc7\u6ee4 ",(0,r.kt)("inlineCode",{parentName:"h3"},"WriteFilter")),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.5.9 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.5.9+")," \u7248\u672c\u65b0\u589e\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"WriteFilter")," \u8fc7\u6ee4\u529f\u80fd\uff0c\u53ef\u6839\u636e\u81ea\u5b9a\u4e49\u903b\u8f91\u81ea\u5b9a\u4e49\u8fc7\u6ee4\u62e6\u622a\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers showLineNumbers {1,3,10}",showLineNumbers:!0,"{1,3,10}":!0},"services.AddMonitorLogging(options =>\n{\n options.WriteFilter = (context) =>\n {\n // \u83b7\u53d6\u63a7\u5236\u5668/\u64cd\u4f5c\u63cf\u8ff0\u5668\n var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;\n\n // \u4f60\u7684\u903b\u8f91....\uff0c\u4e0d\u9700\u8981\u62e6\u622a\u8fd4\u56de false\uff0c\u5426\u5219 true\n\n return true;\n };\n});\n")),(0,r.kt)("h3",{id:"1866-\u8f93\u51fa-json-\u652f\u6301\u5ffd\u7565\u5c5e\u6027\u540d\u6216\u5c5e\u6027\u7c7b\u578b"},"18.6.6 \u8f93\u51fa ",(0,r.kt)("inlineCode",{parentName:"h3"},"JSON")," \u652f\u6301\u5ffd\u7565\u5c5e\u6027\u540d\u6216\u5c5e\u6027\u7c7b\u578b"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.6.1 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u6709\u65f6\u63a5\u53e3\u7684\u8fd4\u56de\u503c\u5305\u542b\u4e0d\u80fd\u88ab\u5e8f\u5217\u5316\u7684\u7c7b\u578b\u6216\u8005\u60f3\u5ffd\u7565\u67d0\u4e9b\u5c5e\u6027\u540d\u4e0d\u88ab\u5e8f\u5217\u5316\uff0c\u8fd9\u65f6\u5019\u5c31\u9700\u8981\u7528\u5230\u8fd9\u4e2a\u3002"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5c40\u90e8\u914d\u7f6e"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,4,10}",showLineNumbers:!0,"{3,4,10}":!0},'// \u5ffd\u7565\u540d\u79f0\u548c\u5c5e\u6027\uff0c\u652f\u6301\u5355\u4e00\u914d\u7f6e\u6216\u5c40\u90e8\u914d\u7f6e\n[LoggingMonitor(JsonBehavior = JsonBehavior.OnlyJson\n , IgnorePropertyNames = new[] { "Bytes" }\n , IgnorePropertyTypes = new[] { typeof(byte[]) })]\npublic object \u6d4b\u8bd5\u6307\u5b9a\u5ffd\u7565\u6307\u5b9a\u5e8f\u5217\u5316\u7c7b\u578b(int id)\n{\n return new\n {\n Id = 10,\n Bytes = File.ReadAllBytes("image.png")\n };\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5168\u5c40\u914d\u7f6e"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4-5}",showLineNumbers:!0,"{4-5}":!0},'// \u5ffd\u7565\u540d\u79f0\u548c\u5c5e\u6027\uff0c\u652f\u6301\u5355\u4e00\u914d\u7f6e\u6216\u5c40\u90e8\u914d\u7f6e\nservices.AddMonitorLogging(options =>\n{\n options.IgnorePropertyNames = new[] { "Byte" };\n options.IgnorePropertyTypes = new[] { typeof(byte[]) };\n});\n')),(0,r.kt)("img",{src:(0,a.Z)("img/hl1.png")}),(0,r.kt)("h3",{id:"1867-\u5c06-loggingmonitor-\u5199\u5165\u6570\u636e\u5e93"},"18.6.7 \u5c06 ",(0,r.kt)("inlineCode",{parentName:"h3"},"LoggingMonitor")," \u5199\u5165\u6570\u636e\u5e93"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\u6ce8\u518c ",(0,r.kt)("inlineCode",{parentName:"li"},".AddDatabaseLogging<>")," \u670d\u52a1\uff1a")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,5}",showLineNumbers:!0,"{1,3,5}":!0},'services.AddDatabaseLogging(options =>\n{\n options.WriteFilter = (logMsg) =>\n {\n return logMsg.LogName == "System.Logging.LoggingMonitor";\n };\n});\n')),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},"\u5199\u5165\u6570\u636e\u5e93")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,8,12}",showLineNumbers:!0,"{1,5,8,12}":!0},"using Furion.Logging;\n\nnamespace YourProject.Core;\n\npublic class DatabaseLoggingWriter : IDatabaseLoggingWriter\n{\n // \u4efb\u4f55\u6570\u636e\u5e93 ORM \u6ce8\u5165\u3002\u3002\u3002\n public DatabaseLoggingWriter()\n {\n }\n\n public void Write(LogMessage logMsg, bool flush)\n {\n // \u5c06 logMsg \u7684\u5c5e\u6027\u4e00\u4e00\u63d2\u5165\u5230\u6570\u636e\u5e93\u4e2d~\n }\n}\n")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u5355\u4e2a ",(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"DatabaseLoggingWriter")," \u60c5\u51b5"),(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c\u5df2\u7ecf\u5168\u5c40\u6ce8\u518c\u4e86\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddDatabaseLogging(); // \u6ce8\u610f\u8fd9\u91cc\u6ca1\u6709\u8fc7\u6ee4 logName\n")),(0,r.kt)("p",{parentName:"admonition"},"\u4e14\u4e0d\u60f3\u591a\u6ce8\u518c\u4e00\u4e2a\u6570\u636e\u5e93\u65e5\u5fd7\u670d\u52a1\uff0c\u90a3\u4e48\u53ea\u9700\u8981\u5728\u4ee3\u7801\u4e2d\u8fc7\u6ee4\u5373\u53ef\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5,8,12,15}",showLineNumbers:!0,"{1,5,8,12,15}":!0},'using Furion.Logging;\n\nnamespace YourProject.Core;\n\npublic class DatabaseLoggingWriter : IDatabaseLoggingWriter\n{\n // \u4efb\u4f55\u6570\u636e\u5e93 ORM \u6ce8\u5165\u3002\u3002\u3002\n public DatabaseLoggingWriter()\n {\n }\n\n public void Write(LogMessage logMsg, bool flush)\n {\n // \u5c06 logMsg \u7684\u5c5e\u6027\u4e00\u4e00\u63d2\u5165\u5230\u6570\u636e\u5e93\u4e2d~\n if(logMsg.LogName == "System.Logging.LoggingMonitor")\n {\n // \u5199\u5165\u5ba1\u8ba1\u8868\u6570\u636e\u5e93\n }\n else\n {\n // \u5199\u5165\u5176\u4ed6\u8868\u6570\u636e\u5e93\n }\n }\n}\n'))),(0,r.kt)("h2",{id:"187-\u6253\u5370\u65e5\u5fd7\u5230-swagger-\u4e2d"},"18.7 \u6253\u5370\u65e5\u5fd7\u5230 ",(0,r.kt)("inlineCode",{parentName:"h2"},"Swagger")," \u4e2d"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u9ed8\u8ba4\u96c6\u6210\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"MiniProfiler")," \u7ec4\u4ef6\u5e76\u4e0e ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u8fdb\u884c\u4e86\u7ed3\u5408\uff0c\u5982\u9700\u6253\u5370\u65e5\u5fd7\u6216\u8c03\u8bd5\u4ee3\u7801\uff0c\u53ea\u9700\u8c03\u7528\u4ee5\u4e0b\u65b9\u6cd5\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'App.PrintToMiniProfiler("\u5206\u7c7b", "\u72b6\u6001", "\u8981\u6253\u5370\u7684\u6d88\u606f");\n')),(0,r.kt)("h2",{id:"188-\u9759\u6001-default-\u65b9\u5f0f\u6784\u5efa"},"18.8 \u9759\u6001 ",(0,r.kt)("inlineCode",{parentName:"h2"},"Default()")," \u65b9\u5f0f\u6784\u5efa"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'StringLoggingPart.Default().SetMessage("\u8fd9\u662f\u4e00\u4e2a\u65e5\u5fd7").LogInformation();\n')),(0,r.kt)("h2",{id:"189-\u89c4\u8303\u65e5\u5fd7\u6a21\u677f"},"18.9 \u89c4\u8303\u65e5\u5fd7\u6a21\u677f"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion v3.5.3+")," \u65b0\u589e\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"TP.Wrapper(...)")," \u89c4\u8303\u6a21\u677f\uff0c\u4f7f\u7528\u5982\u4e0b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"{2}":!0},'// \u751f\u6210\u6a21\u677f\u5b57\u7b26\u4e32\nvar template = TP.Wrapper("Furion \u6846\u67b6", "\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002",\n "##\u4f5c\u8005## \u767e\u5c0f\u50e7",\n "##\u5f53\u524d\u7248\u672c## v3.5.3",\n "##\u6587\u6863\u5730\u5740## https://furion.icu",\n "##Copyright## \u767e\u5c0f\u50e7, Baiqian Co.,Ltd.");\n\nConsole.WriteLine(template);\n')),(0,r.kt)("p",null,"\u65e5\u5fd7\u6253\u5370\u6a21\u677f\u5982\u4e0b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Furion \u6846\u67b6 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u2523 \u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002\n\u2523\n\u2523 \u4f5c\u8005\uff1a \u767e\u5c0f\u50e7\n\u2523 \u5f53\u524d\u7248\u672c\uff1a v3.5.3\n\u2523 \u6587\u6863\u5730\u5740\uff1a https://furion.icu\n\u2523 Copyright\uff1a \u767e\u5c0f\u50e7, Baiqian Co.,Ltd.\n\u2517\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 Furion \u6846\u67b6 \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\n")),(0,r.kt)("admonition",{title:"\u5173\u4e8e\u5c5e\u6027\u751f\u6210",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c\u5217\u8868\u9879\u4ee5 ",(0,r.kt)("inlineCode",{parentName:"p"},"##\u5c5e\u6027\u540d##")," \u5f00\u5934\uff0c\u81ea\u52a8\u751f\u6210 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5c5e\u6027\u540d\uff1a")," \u4f5c\u4e3a\u884c\u9996\u4e14\u81ea\u52a8\u7b49\u5bbd\u5bf9\u9f50\u3002"),(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"Furion 3.9.1")," \u4e4b\u524d\u7248\u672c\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"[\u5c5e\u6027\u540d]")," \u5f00\u5934\u3002")),(0,r.kt)("h2",{id:"1810-\u65e5\u5fd7\u4e0a\u4e0b\u6587"},"18.10 \u65e5\u5fd7\u4e0a\u4e0b\u6587"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.6.0 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u5e0c\u671b\u4e3a\u65e5\u5fd7\u63d0\u4f9b\u989d\u5916\u6570\u636e\uff0c\u8fd9\u65f6\u5019\u53ef\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},".ScopeContext()")," \u914d\u7f6e\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,8,15,21,25,28}",showLineNumbers:!0,"{2,8,15,21,25,28}":!0},'// \u5199\u6cd5\u4e00\nusing (var scope = _logger.ScopeContext(ctx => ctx.Set("Name", "Furion").Set("UserId", 10)))\n{\n _logger.LogInformation("\u6211\u662f\u4e00\u4e2a\u65e5\u5fd7 {id}", 20);\n}\n\n// \u5199\u6cd5\u4e8c\nusing var scope = _logger.ScopeContext(new Dictionary {\n { "Name", "Furion" },\n { "UserId", 10 }\n});\n_logger.LogInformation("\u6211\u662f\u4e00\u4e2a\u65e5\u5fd7 {id}", 20);\n\n// \u5199\u6cd5\u4e09\nusing var scope = _logger.ScopeContext(new LogContext {\n // ....\n});\n_logger.LogInformation("\u6211\u662f\u4e00\u4e2a\u65e5\u5fd7 {id}", 20);\n\n// \u5199\u6cd5\u56db\nvar (logger, scoped) = Log.ScopeContext(new LogContext {\n // ...\n});\nlogger.LogInformation("\u6211\u662f\u4e00\u4e2a\u65e5\u5fd7 {id}", 20);\nscoped?.Dispose();\n\n// \u5199\u6cd5\u4e94\n"\u6211\u662f\u4e00\u4e2a\u65e5\u5fd7 {id}".ScopeContext(new LogContext {\n // ...\n}).LogInformation();\n')),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"LogMessage")," \u5bf9\u8c61\u4e2d\u4f7f\u7528\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,9,14,16}",showLineNumbers:!0,"{1,9,14,16}":!0},'var value = logMsg.Context.Get("Key");\n\n// \u6bd4\u5982\u5728\u8fc7\u6ee4\u4e2d\u4f7f\u7528\nservices.AddFileLogging("infomation.log", options =>\n{\n options.WriteFilter = (logMsg) =>\n {\n // \u8fd8\u53ef\u4ee5\u8bbe\u7f6e\u7ed9\u8fd0\u884c\u65f6\u4f7f\u7528\uff1alogMsg.Context.Set(...);\n return logMsg.Context.Get("Name") == "Furion";\n };\n});\n\n// \u5728 IDatabaseLoggingWriter \u4e2d\u4f7f\u7528\npublic void Write(LogMessage logMsg, bool flush)\n{\n var name = logMsg.Context.Get("Name");\n}\n')),(0,r.kt)("p",null,"\u8fd8\u53ef\u4ee5\u5b9e\u73b0\u5171\u4eab\u65e5\u5fd7\u4e0a\u4e0b\u6587\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers{1,4,11,25,33}","showLineNumbers{1,4,11,25,33}":!0},'public TestAppService: ITestAppService, IDisposable\n{\n private readonly ILogger _logger;\n private IDisposable _scopeProvider;\n\n public TestAppService(ILogger logger)\n {\n _logger = logger;\n\n // \u6dfb\u52a0\u5168\u5c40\u7528\u6237\u4fe1\u606f\u4e0a\u4e0b\u6587\u6570\u636e\n _scopeProvider = _logger.ScopeContext(ctx => ctx.Set("uid", "100").Set("uname", "\u767e\u5c0f\u50e7"));\n }\n\n public string GetName(int id)\n {\n // \u5171\u4eab\u5168\u5c40\u4e0a\u4e0b\u6587\u6570\u636e\n _logger.LogInformation("\u5199\u5165\u65b0\u7684\u65e5\u5fd7");\n\n return "Furion";\n }\n\n public string GetTags(int id)\n {\n // \u989d\u5916\u65b0\u589e\u4e0a\u4e0b\u6587\u6570\u636e\n using var scope = _logger.ScopeContext(ctx => ctx.Set("key", "value"));\n _logger.LogInformation("\u8bbe\u7f6e\u989d\u5916\u7684\u4e0a\u4e0a\u4e0b\u6587\u65e5\u5fd7");\n\n return "\u767e\u5c0f\u50e7";\n }\n\n public void Dispose()\n {\n _scopeProvider.Dispose();\n }\n}\n')),(0,r.kt)("h2",{id:"1811-\u5173\u95ed-net-core-\u5e95\u5c42\u7684\u65e5\u5fd7"},"18.11 \u5173\u95ed ",(0,r.kt)("inlineCode",{parentName:"h2"},".NET Core")," \u5e95\u5c42\u7684\u65e5\u5fd7"),(0,r.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},".NET Core")," \u5e95\u5c42\u9ed8\u8ba4\u8f93\u51fa\u4e86\u5f88\u591a\u65e5\u5fd7\uff0c\u5982\u9700\u5173\u95ed\u53ea\u9700\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"appsettings.Development.json")," \u4e2d\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},'"\u547d\u540d\u7a7a\u95f4/\u65e5\u5fd7\u7c7b\u522b":"\u6700\u4f4e\u65e5\u5fd7\u7ea7\u522b"')," \u65e5\u5fd7\u7c7b\u522b\u8fc7\u6ee4\u5373\u53ef\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2,7-8}",showLineNumbers:!0,"{2,7-8}":!0},'{\n "Logging": {\n "LogLevel": {\n "Default": "Information",\n "Microsoft.AspNetCore": "Warning",\n "Microsoft.EntityFrameworkCore": "Information",\n "System.Net.Http.HttpClient": "Warning",\n "\u547d\u540d\u7a7a\u95f4/\u65e5\u5fd7\u7c7b\u522b": "Warning"\n }\n }\n}\n')),(0,r.kt)("p",null,"\u5c0f\u63d0\u9192\uff1a\u8fc7\u6ee4 ",(0,r.kt)("inlineCode",{parentName:"p"},".NET Core")," \u5e95\u5c42\u65e5\u5fd7\u6700\u4f4e\u65e5\u5fd7\u7ea7\u522b\u901a\u5e38\u8bbe\u7f6e\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"Warning"),"\u3002"),(0,r.kt)("h2",{id:"1812-\u5173\u4e8e\u6570\u636e\u5e93\u65e5\u5fd7\u5faa\u73af\u8f93\u51fa\u65e5\u5fd7"},"18.12 \u5173\u4e8e\u6570\u636e\u5e93\u65e5\u5fd7\u5faa\u73af\u8f93\u51fa\u65e5\u5fd7"),(0,r.kt)("p",null,"\u5fae\u8f6f\u63d0\u4f9b\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"EFCore")," \u6216\u8005\u7b2c\u4e09\u65b9 ",(0,r.kt)("inlineCode",{parentName:"p"},"ORM")," \u672c\u8eab\u64cd\u4f5c\u6570\u636e\u5e93\u65f6\u81ea\u5e26\u65e5\u5fd7\u8f93\u51fa\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4 ",(0,r.kt)("inlineCode",{parentName:"p"},"IDatabaseLoggingWriter")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Write")," \u6b7b\u5faa\u73af\uff0c\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u6709\u4ee5\u4e0b\u65b9\u6cd5\uff1a"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\u521b\u5efa\u65b0\u7684\u6570\u636e\u5e93\u64cd\u4f5c\u5b9e\u4f8b\u5e76\u5173\u95ed\u65e5\u5fd7"),(0,r.kt)("li",{parentName:"ol"},"\u66f4\u65b0\u5230 ",(0,r.kt)("inlineCode",{parentName:"li"},"Furion 4.7.0+")," \u7248\u672c ",(0,r.kt)("strong",{parentName:"li"},"\uff08\u63a8\u8350\uff09")),(0,r.kt)("li",{parentName:"ol"},"\u81ea\u884c\u6839\u636e\u4e1a\u52a1\u903b\u8f91\u8fc7\u6ee4")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u5982\u4e0d\u5b58\u5728\u8be5\u95ee\u9898\u53ef\u5173\u95ed\u6846\u67b6\u81ea\u5e26\u6b7b\u5faa\u73af\u68c0\u6d4b\u529f\u80fd\uff08\u5bf9\u6027\u80fd\u6709\u63d0\u5347\u4f5c\u7528\uff09"),"\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"{3}":!0},"services.AddDatabaseLogging(options =>\n{\n options.IgnoreReferenceLoop = false;\n});\n")),(0,r.kt)("h2",{id:"1813-\u53cd\u9988\u4e0e\u5efa\u8bae"},"18.13 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,r.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,r.kt)("hr",null),(0,r.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u65e5\u5fd7")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?view=aspnetcore-5.0"},"ASP.NET Core - \u65e5\u5fd7")," \u7ae0\u8282 \u548c ",(0,r.kt)("a",{parentName:"p",href:"https://serilog.net/"},"Serilog")," \u6587\u6863\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/a125e20e.753da91f.js b/handbook/build/assets/js/a125e20e.753da91f.js new file mode 100644 index 00000000000..901d5f53e49 --- /dev/null +++ b/handbook/build/assets/js/a125e20e.753da91f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6828],{3905:function(e,n,t){t.d(n,{Zo:function(){return u},kt:function(){return m}});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var s=a.createContext({}),p=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},u=function(e){var n=p(e.components);return a.createElement(s.Provider,{value:n},e.children)},g={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},c=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(t),m=o,d=c["".concat(s,".").concat(m)]||c[m]||g[m]||r;return t?a.createElement(d,i(i({ref:n},u),{},{components:t})):a.createElement(d,i({ref:n},u))}));function m(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=t.length,i=new Array(r);i[0]=c;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;pusing",id:"\u9ed8\u8ba4\u5168\u5c40-using",level:3}],m={toc:c};function d(e){var n=e.components,t=(0,o.Z)(e,l);return(0,r.kt)("wrapper",(0,a.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h3",{id:"\u7b80\u4ecb"},"\u7b80\u4ecb"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},".NET6/C#10")," \u4e4b\u540e\uff0c\u5fae\u8f6f\u65b0\u589e\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings")," \u673a\u5236\uff0c\u53ef\u4ee5\u5728\u9879\u76ee\u7684\u6839\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2a ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u6587\u4ef6\uff0c\u628a\u5e38\u7528\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," \u653e\u7f6e\u5176\u4e2d\u3002"),(0,r.kt)("p",null,"\u8fd9\u6837 ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u6240\u5728\u7684\u9879\u76ee ",(0,r.kt)("inlineCode",{parentName:"p"},".cs")," \u6587\u4ef6\u5c31\u65e0\u9700\u91cd\u590d ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," \u4e86\uff0c\u5927\u5927\u7684\u63d0\u9ad8\u5f00\u53d1\u6548\u7387\uff0c\u4e5f\u8ba9\u4ee3\u7801\u53d8\u7684\u66f4\u52a0\u7b80\u6d01\u3002"),(0,r.kt)("h3",{id:"\u5fc5\u8981\u914d\u7f6e"},"\u5fc5\u8981\u914d\u7f6e"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u542f\u7528 ",(0,r.kt)("inlineCode",{parentName:"strong"},"GlobalUsings")," \u673a\u5236\u9700\u8981\u4ee5\u4e0b\u4e24\u4e2a\u6b65\u9aa4\uff1a")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\u5728\u4f60\u9700\u8981\u5168\u5c40 ",(0,r.kt)("inlineCode",{parentName:"li"},"using")," \u7684\u9879\u76ee\u5c42\u6839\u76ee\u5f55\u521b\u5efa ",(0,r.kt)("inlineCode",{parentName:"li"},"GlobalUsings.cs")," \u6587\u4ef6\uff0c\u5982\u679c\u591a\u4e2a\u9879\u76ee\u5c42\u9700\u8981\uff0c\u5219\u6bcf\u4e2a\u5c42\u90fd\u5e94\u8be5\u6709\u4e00\u4e2a ",(0,r.kt)("inlineCode",{parentName:"li"},"GlobalUsings.cs")),(0,r.kt)("li",{parentName:"ol"},"\u7f16\u8f91\u9879\u76ee\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},".csproj")," \u6587\u4ef6\uff0c\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"enable"),"\uff0c\u6ce8\u610f\u662f\u5728 ",(0,r.kt)("inlineCode",{parentName:"li"},"")," \u4e2d\u6dfb\u52a0\uff0c\u901a\u5e38\u548c ",(0,r.kt)("inlineCode",{parentName:"li"},"")," \u540c\u7236\u540c\u7ea7")),(0,r.kt)("h3",{id:"\u57fa\u672c\u4f7f\u7528"},"\u57fa\u672c\u4f7f\u7528"),(0,r.kt)("p",null,"\u914d\u7f6e\u4e4b\u540e\uff0c\u73b0\u5728\u5c31\u53ef\u4ee5\u628a\u5e38\u7528\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," \u653e\u5230 ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u4e2d\u4e86\uff0c\u5199\u6cd5\u5982\u4e0b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers title="Furion \u63a8\u8350\u7684\u5168\u5c40\u547d\u540d\u7a7a\u95f4"',showLineNumbers:!0,title:'"Furion','\u63a8\u8350\u7684\u5168\u5c40\u547d\u540d\u7a7a\u95f4"':!0},"global using Furion;\nglobal using Furion.DatabaseAccessor;\nglobal using Furion.DataEncryption;\nglobal using Furion.DataValidation;\nglobal using Furion.DependencyInjection;\nglobal using Furion.DynamicApiController;\nglobal using Furion.Extensions;\nglobal using Furion.FriendlyException;\nglobal using Mapster;\nglobal using Microsoft.AspNetCore.Authorization;\nglobal using Microsoft.AspNetCore.Http;\nglobal using Microsoft.AspNetCore.Mvc;\nglobal using Microsoft.CodeAnalysis;\nglobal using Microsoft.EntityFrameworkCore;\nglobal using System.ComponentModel.DataAnnotations;\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u5fc5\u987b\u4ee5 ",(0,r.kt)("inlineCode",{parentName:"strong"},"global")," \u5f00\u5934\uff01")),(0,r.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u4e00\u822c\u63a8\u8350\u628a\u5b9e\u4f53\u7c7b\u7684\u547d\u540d\u7a7a\u95f4\u4e5f\u653e\u8fdb\u53bb\uff0c\u56e0\u4e3a\u4ed3\u50a8 ",(0,r.kt)("inlineCode",{parentName:"p"},"IRepository")," \u4f7f\u7528\u7684\u9891\u7387\u975e\u5e38\u9ad8\u3002"),(0,r.kt)("p",{parentName:"admonition"},"\u53e6\u5916\u63a8\u8350\u5927\u5bb6\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u4e2d\u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"p"},"CodeMaid")," \u63d2\u4ef6\u54e6\uff0c\u81ea\u52a8\u6e05\u7406\u89e3\u51b3\u65b9\u6848\u6240\u6709\u65e0\u7528\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"using"),"\uff0c\u7ed3\u5408 ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u975e\u5e38\u68d2\uff01")),(0,r.kt)("admonition",{title:"\u4e2a\u522b\u60c5\u51b5",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u53ef\u80fd\u7531\u4e8e ",(0,r.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u7248\u672c\u7684\u95ee\u9898\uff0c\u5bfc\u81f4 ",(0,r.kt)("inlineCode",{parentName:"p"},"GlobalUsings.cs")," \u5b9a\u4e49\u51fa\u9519\uff0c\u8fd9\u65f6\u5019\u9700\u8981\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"using")," \u540e\u9762\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"global::"),"\uff0c\u5982\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"global using global::Furion;\n"))),(0,r.kt)("p",null,"\u63a5\u4e0b\u6765\u5728\u4ee3\u7801\u4e2d\u4f7f\u7528\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},"// \u65e0\u9700 using Furion \u7684\u547d\u540d\u7a7a\u95f4\u4e86\u54e6\uff0c\u6e05\u723d\u4e86\u4e0d\u5c11\n\nnamespace Your.Application;\n\npublic class DefaultAppService : IDynamicApiController\n{\n private readonly IRepository _boardCardRepository;\n private readonly IRepository _boardGroupRepository;\n private readonly IRepository _boardCardAttachmentRepository;\n private readonly IRepository _boardCardUserRepository;\n}\n\n// ....\n")),(0,r.kt)("img",{src:(0,i.Z)("img/cd2223.png")}),(0,r.kt)("h3",{id:"\u9ed8\u8ba4\u5168\u5c40-using"},"\u9ed8\u8ba4\u5168\u5c40 ",(0,r.kt)("inlineCode",{parentName:"h3"},"using")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u5b9e\u9645\u4e0a\u5fae\u8f6f\u5df2\u7ecf\u81ea\u52a8\u628a\u4e00\u4e9b\u5e38\u7528\u7684 ",(0,r.kt)("inlineCode",{parentName:"strong"},"using")," \u5728\u7f16\u8bd1\u540e\u7684\u4ee3\u7801\u4e2d\u81ea\u52a8\u8865\u4e0a\u4e86"),"\uff0c\u8def\u5f84\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u9879\u76ee/obj/Debug/net6.0/\u9879\u76ee.GlobalUsings.cs")," \u6587\u4ef6\u4e2d\uff0c\u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \nglobal using global::System;\nglobal using global::System.Collections.Generic;\nglobal using global::System.IO;\nglobal using global::System.Linq;\nglobal using global::System.Net.Http;\nglobal using global::System.Threading;\nglobal using global::System.Threading.Tasks;\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u4e5f\u5c31\u662f\u4ee5\u4e0a\u7684 ",(0,r.kt)("inlineCode",{parentName:"strong"},"using")," \u65e0\u9700\u5199\u5728\u4f60\u521b\u5efa\u7684 ",(0,r.kt)("inlineCode",{parentName:"strong"},"GlobalUsings.cs")," \u4e2d\u4e86\uff0c\u5fae\u8f6f\u4f1a\u5728\u7f16\u8bd1\u65f6\u81ea\u52a8\u5408\u5e76\u3002")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/a19656d0.30e3e43b.js b/handbook/build/assets/js/a19656d0.30e3e43b.js new file mode 100644 index 00000000000..af35654ef40 --- /dev/null +++ b/handbook/build/assets/js/a19656d0.30e3e43b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[1736],{3905:function(e,t,n){n.d(t,{Zo:function(){return p},kt:function(){return f}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=u(n),f=o,d=m["".concat(s,".").concat(f)]||m[f]||c[f]||a;return n?r.createElement(d,i(i({ref:t},p),{},{components:n})):r.createElement(d,i({ref:t},p))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u UploadFileAsync(List files)\n{\n // \u4fdd\u5b58\u5230\u7f51\u7ad9\u6839\u76ee\u5f55\u4e0b\u7684 uploads \u76ee\u5f55\n var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, "uploads");\n if(!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);\n\n long size = files.Sum(f => f.Length);\n\n foreach (var formFile in files)\n {\n if (formFile.Length > 0)\n {\n // \u907f\u514d\u6587\u4ef6\u540d\u91cd\u590d\uff0c\u91c7\u7528 GUID \u751f\u6210\n var filePath = Path.Combine(savePath, Guid.NewGuid().ToString("N") + Path.GetExtension(formFile.FileName)); // \u53ef\u4ee5\u66ff\u4ee3\u4e3a\u4f60\u9700\u8981\u5b58\u50a8\u7684\u771f\u5b9e\u8def\u5f84\n\n using (var stream = System.IO.File.Create(filePath))\n {\n await formFile.CopyToAsync(stream);\n }\n }\n }\n\n // \u5728\u52a8\u6001 API \u76f4\u63a5\u8fd4\u56de\u5bf9\u8c61\u5373\u53ef\uff0c\u65e0\u9700 OK \u548c IActionResult\n return Ok(new { count = files.Count, size });\n}\n')),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u4f7f\u7528axios\u4e0a\u4f20\u6587\u4ef6,\u65b9\u6cd5\u83b7\u53d6\u5230\u53c2\u6570files.Count=0",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"axios\u8bf7\u6c42\u914d\u7f6e"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},' let formData = new FormData();\n formData.append("files", this.file); //files\u9700\u4e0e\u65b9\u6cd5\u91cc\u7684\u53c2\u6570files\u540d\u79f0\u4e00\u6837\n let config = {\n headers: {\n "Content-Type": "multipart/form-data",\n },\n };\n axios.post(this.uploadURL, formData, config).then((res) => {//\u9700\u5f15\u5165axios\n console.log(res);\n });\n'))))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/a2d62645.bd27b6bd.js b/handbook/build/assets/js/a2d62645.bd27b6bd.js new file mode 100644 index 00000000000..c71545723f2 --- /dev/null +++ b/handbook/build/assets/js/a2d62645.bd27b6bd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2232],{3905:function(e,t,n){n.d(t,{Zo:function(){return d},kt:function(){return u}});var i=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=i.createContext({}),s=function(e){var t=i.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=s(e.components);return i.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},c=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),c=s(n),u=r,k=c["".concat(p,".").concat(u)]||c[u]||m[u]||a;return n?i.createElement(k,l(l({ref:t},d),{},{components:n})):i.createElement(k,l({ref:t},d))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,l=new Array(a);l[0]=c;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var s=2;s\u975e\u6258\u7ba1",id:"34134-\u8bbe\u7f6e\u4e3a-\u975e\u6258\u7ba1",level:3},{value:"34.1.3.5 \u91cd\u542f\u7f51\u7ad9",id:"34135-\u91cd\u542f\u7f51\u7ad9",level:3},{value:"34.1.4 \u5e38\u89c1\u95ee\u9898",id:"3414-\u5e38\u89c1\u95ee\u9898",level:2},{value:"34.1.4.1 405 \u72b6\u6001\u7801\uff0c\u4e0d\u652f\u6301 PUT\uff0cDELETE \u8bf7\u6c42",id:"34141-405-\u72b6\u6001\u7801\u4e0d\u652f\u6301-putdelete-\u8bf7\u6c42",level:3},{value:"34.1.4.2 WebSocket/ SignalR \u8fde\u63a5\u62a5\u9519",id:"34142-websocket-signalr-\u8fde\u63a5\u62a5\u9519",level:3},{value:"34.1.4.3 \u90e8\u7f72\u4e4b\u540e\u7f3a\u5931 api-ms-win.xxxx.dll \u95ee\u9898",id:"34143-\u90e8\u7f72\u4e4b\u540e\u7f3a\u5931-api-ms-winxxxxdll-\u95ee\u9898",level:3},{value:"34.1.5 IIS \u56de\u6536\u95ee\u9898\u548c\u914d\u7f6e",id:"3415-iis-\u56de\u6536\u95ee\u9898\u548c\u914d\u7f6e",level:2},{value:"34.1.6 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"3416-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],u={toc:c};function k(e){var t=e.components,n=(0,r.Z)(e,o);return(0,a.kt)("wrapper",(0,i.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{title:"\u7cbe\u7b80\u53d1\u5e03\u6587\u4ef6",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c\u9700\u8981\u7cbe\u7b80\u53d1\u5e03\u540e\u7684\u6587\u4ef6\uff0c\u4e5f\u5c31\u662f\u5220\u9664\u4e0d\u5fc5\u8981\u7684\u6587\u4ef6\u5939\uff0c\u53ef\u4ee5\u7f16\u8f91 Web \u9879\u76ee\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},".csproj")," \u5e76\u6dfb\u52a0 ",(0,a.kt)("inlineCode",{parentName:"p"},"en-US"),"\uff0c\u5982\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},"\n net6.0\n en-US\n\n"))),(0,a.kt)("h2",{id:"3411-\u53d1\u5e03\u7f51\u7ad9"},"34.1.1 \u53d1\u5e03\u7f51\u7ad9"),(0,a.kt)("h3",{id:"34111-\u9009\u62e9\u542f\u52a8\u9879\u53d1\u5e03"},"34.1.1.1 \u9009\u62e9\u542f\u52a8\u9879\u53d1\u5e03"),(0,a.kt)("img",{src:(0,l.Z)("img/dp1.png")}),(0,a.kt)("h3",{id:"34112-\u9009\u62e9\u53d1\u5e03\u5230\u6587\u4ef6\u5939"},"34.1.1.2 \u9009\u62e9\u53d1\u5e03\u5230\u6587\u4ef6\u5939"),(0,a.kt)("img",{src:(0,l.Z)("img/dy2.png")}),(0,a.kt)("h3",{id:"34113-\u914d\u7f6e\u53d1\u5e03\u540e\u8def\u5f84"},"34.1.1.3 \u914d\u7f6e\u53d1\u5e03\u540e\u8def\u5f84"),(0,a.kt)("img",{src:(0,l.Z)("img/dp3.png")}),(0,a.kt)("h3",{id:"34114-\u70b9\u51fb\u53d1\u5e03"},"34.1.1.4 \u70b9\u51fb\u53d1\u5e03"),(0,a.kt)("img",{src:(0,l.Z)("img/dp4.png")}),(0,a.kt)("h2",{id:"3412-\u670d\u52a1\u5668\u73af\u5883\u914d\u7f6e"},"34.1.2 \u670d\u52a1\u5668\u73af\u5883\u914d\u7f6e"),(0,a.kt)("h3",{id:"34121-\u7b2c\u4e00\u6b65"},"34.1.2.1 \u7b2c\u4e00\u6b65"),(0,a.kt)("p",null,"\u5b89\u88c5.NET Core \u8fd0\u884c\u65f6\u6346\u7ed1\u5305\uff1a",(0,a.kt)("a",{parentName:"p",href:"https://dotnet.microsoft.com/permalink/dotnetcore-current-windows-runtime-bundle-installer"},"\u70b9\u51fb\u4e0b\u8f7d")),(0,a.kt)("h3",{id:"34122-\u7b2c\u4e8c\u6b65\u547d\u4ee4"},"34.1.2.2 \u7b2c\u4e8c\u6b65\uff08\u547d\u4ee4\uff09"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"net stop was /y\n")),(0,a.kt)("h3",{id:"34123-\u7b2c\u4e09\u6b65\u547d\u4ee4"},"34.1.2.3 \u7b2c\u4e09\u6b65\uff08\u547d\u4ee4\uff09"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"net start w3svc\n")),(0,a.kt)("h3",{id:"34124-\u7b2c\u56db\u6b65\u547d\u4ee4"},"34.1.2.4 \u7b2c\u56db\u6b65\uff08\u547d\u4ee4\uff09"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"set ASPNETCORE_ENVIRONMENT=Production\n")),(0,a.kt)("h2",{id:"3413-\u90e8\u7f72\u5230-iis"},"34.1.3 \u90e8\u7f72\u5230 IIS"),(0,a.kt)("h3",{id:"34131-\u6dfb\u52a0\u65b0\u7f51\u7ad9"},"34.1.3.1 \u6dfb\u52a0\u65b0\u7f51\u7ad9"),(0,a.kt)("img",{src:(0,l.Z)("img/ds1.png")}),(0,a.kt)("h3",{id:"34132-\u914d\u7f6e\u7f51\u7ad9\u4fe1\u606f"},"34.1.3.2 \u914d\u7f6e\u7f51\u7ad9\u4fe1\u606f"),(0,a.kt)("img",{src:(0,l.Z)("img/ds2.png")}),(0,a.kt)("h3",{id:"34133-\u914d\u7f6e\u5e94\u7528\u7a0b\u5e8f\u6c60"},"34.1.3.3 \u914d\u7f6e\u5e94\u7528\u7a0b\u5e8f\u6c60"),(0,a.kt)("img",{src:(0,l.Z)("img/ds3.png")}),(0,a.kt)("h3",{id:"34134-\u8bbe\u7f6e\u4e3a-\u975e\u6258\u7ba1"},"34.1.3.4 \u8bbe\u7f6e\u4e3a ",(0,a.kt)("inlineCode",{parentName:"h3"},"\u975e\u6258\u7ba1")),(0,a.kt)("img",{src:(0,l.Z)("img/ds4.png")}),(0,a.kt)("h3",{id:"34135-\u91cd\u542f\u7f51\u7ad9"},"34.1.3.5 \u91cd\u542f\u7f51\u7ad9"),(0,a.kt)("p",null,"\u53ea\u9700\u91cd\u542f\u7f51\u7ad9\u6216\u5e94\u7528\u7a0b\u5e8f\u6c60\u5373\u53ef\u3002"),(0,a.kt)("h2",{id:"3414-\u5e38\u89c1\u95ee\u9898"},"34.1.4 \u5e38\u89c1\u95ee\u9898"),(0,a.kt)("h3",{id:"34141-405-\u72b6\u6001\u7801\u4e0d\u652f\u6301-putdelete-\u8bf7\u6c42"},"34.1.4.1 405 \u72b6\u6001\u7801\uff0c\u4e0d\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"h3"},"PUT\uff0cDELETE")," \u8bf7\u6c42"),(0,a.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"IIS"),"\u62d2\u7edd ",(0,a.kt)("inlineCode",{parentName:"p"},"PUT"),"\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"DELETE")," \u8bf7\u6c42\uff0c\u539f\u56e0\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"IIS")," \u9ed8\u8ba4\u6ce8\u518c\u4e86\u4e00\u4e2a\u540d\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"WebDAVModule")," \u7684\u81ea\u5b9a\u4e49 ",(0,a.kt)("inlineCode",{parentName:"p"},"HttpModule")," \u5bfc\u81f4\u7684\u3002"),(0,a.kt)("p",null,"\u89e3\u51b3\u8be5\u95ee\u9898\uff0c\u53ea\u9700\u8981\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"web.config")," \u79fb\u9664\u5373\u53ef\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-xml",metastring:"{2-6}","{2-6}":!0},'\n \n \n \n \n \n\n')),(0,a.kt)("p",null,"\u5fae\u8f6f\u5b98\u65b9\u6587\u6863\uff1a",(0,a.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/troubleshoot/developer/webapps/iis/health-diagnostic-performance/http-error-405-website"},"https://docs.microsoft.com/zh-cn/troubleshoot/developer/webapps/iis/health-diagnostic-performance/http-error-405-website")),(0,a.kt)("img",{src:(0,l.Z)("img/iis5.png")}),(0,a.kt)("h3",{id:"34142-websocket-signalr-\u8fde\u63a5\u62a5\u9519"},"34.1.4.2 ",(0,a.kt)("inlineCode",{parentName:"h3"},"WebSocket"),"/ ",(0,a.kt)("inlineCode",{parentName:"h3"},"SignalR")," \u8fde\u63a5\u62a5\u9519"),(0,a.kt)("p",null,"\u5982\u679c\u9879\u76ee\u90e8\u7f72\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"IIS")," \u4e2d\u51fa\u73b0 ",(0,a.kt)("inlineCode",{parentName:"p"},"WebSoket"),"/",(0,a.kt)("inlineCode",{parentName:"p"},"SignalR")," \u4e0d\u80fd\u8fde\u63a5\u6216\u8fde\u63a5\u5931\u8d25\u7b49\u95ee\u9898\uff0c\u8bf7\u786e\u4fdd ",(0,a.kt)("inlineCode",{parentName:"p"},"IIS")," \u670d\u52a1\u4e2d\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"WebSocket \u534f\u8bae")," \u662f\u52fe\u9009\u72b6\u6001"),(0,a.kt)("img",{src:(0,l.Z)("img/iis2.png")}),(0,a.kt)("h3",{id:"34143-\u90e8\u7f72\u4e4b\u540e\u7f3a\u5931-api-ms-winxxxxdll-\u95ee\u9898"},"34.1.4.3 \u90e8\u7f72\u4e4b\u540e\u7f3a\u5931 ",(0,a.kt)("inlineCode",{parentName:"h3"},"api-ms-win.xxxx.dll")," \u95ee\u9898"),(0,a.kt)("p",null,"\u6709\u65f6\u5019\u5c06\u53d1\u5e03\u6587\u4ef6\u53d1\u5e03\u5230\u670d\u52a1\u5668\u540e\uff0c\u51fa\u73b0\u4e22\u5931 ",(0,a.kt)("inlineCode",{parentName:"p"},"api.ms-win.xxxx.dll")," \u6587\u4ef6\uff0c\u8fd9\u65f6\u53ea\u9700\u8981\u91cd\u65b0\u53d1\u5e03\u5e76\u9009\u62e9\u670d\u52a1\u5668\u7279\u5b9a\u7684\u67b6\u6784\u5373\u53ef\u3002"),(0,a.kt)("img",{src:(0,l.Z)("img/iis4.jpg")}),(0,a.kt)("img",{src:(0,l.Z)("img/iis3.png")}),(0,a.kt)("h2",{id:"3415-iis-\u56de\u6536\u95ee\u9898\u548c\u914d\u7f6e"},"34.1.5 ",(0,a.kt)("inlineCode",{parentName:"h2"},"IIS")," \u56de\u6536\u95ee\u9898\u548c\u914d\u7f6e"),(0,a.kt)("p",null,"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"IIS")," \u90e8\u7f72 ",(0,a.kt)("inlineCode",{parentName:"p"},".NET Core")," \u5e94\u7528\u7a0b\u5e8f\uff0c\u5982\u679c\u542f\u52a8\u4e86\u7cfb\u7edf\u65e5\u5fd7\uff0c\u5c31\u4f1a\u53d1\u73b0\u7ecf\u5e38\u51fa\u73b0 ",(0,a.kt)("inlineCode",{parentName:"p"},"Application is shutting down...")," \u7684\u65e5\u5fd7\uff0c\u4ee3\u8868 ",(0,a.kt)("inlineCode",{parentName:"p"},"IIS")," \u56de\u6536\u4e86\u5e94\u7528\u7a0b\u5e8f\u6c60\u3002"),(0,a.kt)("p",null,"\u5bf9\u4e8e\u4e00\u4e2a\u957f\u671f\u5728\u7ebf\u7684\u7f51\u7ad9\u6765\u8bf4\uff0c\u8fd9\u662f\u975e\u5e38\u4e0d\u5408\u7406\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u914d\u7f6e\u8ba9 ",(0,a.kt)("inlineCode",{parentName:"p"},"IIS")," \u8fdb\u884c\u957f\u65f6\u95f4\u4e0d\u8bbf\u95ee\u4fbf\u56de\u6536\u7684\u673a\u5236\u3002"),(0,a.kt)("hr",null),(0,a.kt)("p",null,"\u914d\u7f6e\u6b65\u9aa4\u5982\u4e0b\uff1a"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\u6253\u5f00 ",(0,a.kt)("inlineCode",{parentName:"li"},"IIS")," \u5e76\u70b9\u51fb\u5de6\u4fa7\u6811\u6839\u8282\u70b9\uff08\u8ba1\u7b97\u673a\u540d\u79f0\uff09\u5e76\u70b9\u51fb\u53f3\u4fa7\u7684 ",(0,a.kt)("inlineCode",{parentName:"li"},"Configuration Editor"),"\uff08\u914d\u7f6e\u7f16\u8f91\u5668\uff09")),(0,a.kt)("img",{src:(0,l.Z)("img/iis6.png")}),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"li"},"Section"),"\uff08\u8282\uff09\u9009\u62e9 ",(0,a.kt)("inlineCode",{parentName:"li"},"system.applicationHost/applicationPools")," \u5e76\u8bbe\u7f6e ",(0,a.kt)("inlineCode",{parentName:"li"},"startMode")," \u4e3a ",(0,a.kt)("inlineCode",{parentName:"li"},"AlwaysRunning"),"\uff0c\u4e4b\u540e\u70b9\u51fb ",(0,a.kt)("inlineCode",{parentName:"li"},"Apply")," \u4fdd\u5b58\u3002")),(0,a.kt)("img",{src:(0,l.Z)("img/iis7.png")}),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},"\u70b9\u51fb\u5de6\u4fa7\u6811\u6839\u8282\u70b9\uff08\u8ba1\u7b97\u673a\u540d\u79f0\uff09\u4e0b\u7684 ",(0,a.kt)("inlineCode",{parentName:"li"},"Application Pools")," \u5e76\u70b9\u51fb\u6700\u53f3\u4fa7\u7684 ",(0,a.kt)("inlineCode",{parentName:"li"},"Set Appliation Pool Defaults..."),"\uff08\u8bbe\u7f6e\u5e94\u7528\u7a0b\u5e8f\u6c60\u9ed8\u8ba4\u914d\u7f6e...\uff09")),(0,a.kt)("img",{src:(0,l.Z)("img/iis8.png")}),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},"\u8bbe\u7f6e ",(0,a.kt)("inlineCode",{parentName:"li"},"Idle Time-out (minutes)"),"\uff08\u95f2\u7f6e\u8d85\u65f6\uff08\u5206\u949f\uff09\u4e3a ",(0,a.kt)("inlineCode",{parentName:"li"},"0"))),(0,a.kt)("img",{src:(0,l.Z)("img/iis9.png")}),(0,a.kt)("p",null,"\u8fd9\u6837\u5373\u53ef\u89e3\u51b3 ",(0,a.kt)("inlineCode",{parentName:"p"},"IIS")," \u56de\u6536\u95ee\u9898\u3002"),(0,a.kt)("h2",{id:"3416-\u53cd\u9988\u4e0e\u5efa\u8bae"},"34.1.6 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/a4688235.f14efef4.js b/handbook/build/assets/js/a4688235.f14efef4.js new file mode 100644 index 00000000000..584df007715 --- /dev/null +++ b/handbook/build/assets/js/a4688235.f14efef4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[969],{3905:function(e,n,t){t.d(n,{Zo:function(){return m},kt:function(){return c}});var o=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function a(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=o.createContext({}),s=function(e){var n=o.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},m=function(e){var n=s(e.components);return o.createElement(l.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},u=o.forwardRef((function(e,n){var t=e.components,i=e.mdxType,r=e.originalType,l=e.parentName,m=p(e,["components","mdxType","originalType","parentName"]),u=s(t),c=i,k=u["".concat(l,".").concat(c)]||u[c]||d[c]||r;return t?o.createElement(k,a(a({ref:n},m),{},{components:t})):o.createElement(k,a({ref:n},m))}));function c(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var r=t.length,a=new Array(r);a[0]=u;var p={};for(var l in n)hasOwnProperty.call(n,l)&&(p[l]=n[l]);p.originalType=e,p.mdxType="string"==typeof e?e:i,a[1]=p;for(var s=2;sAppDbContext",id:"912-appdbcontext",level:2},{value:"9.1.3 AppDbContext \u548c DbContext \u533a\u522b",id:"913-appdbcontext-\u548c-dbcontext-\u533a\u522b",level:2},{value:"9.1.4 \u5982\u4f55\u5b9a\u4e49\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",id:"914-\u5982\u4f55\u5b9a\u4e49\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",level:2},{value:"9.1.4.1 \u521b\u5efa\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",id:"9141-\u521b\u5efa\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",level:3},{value:"9.1.4.2 \u521b\u5efa\u5176\u4ed6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",id:"9142-\u521b\u5efa\u5176\u4ed6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587",level:3},{value:"9.1.5 \u914d\u7f6e\u8fde\u63a5\u5b57\u7b26\u4e32",id:"915-\u914d\u7f6e\u8fde\u63a5\u5b57\u7b26\u4e32",level:2},{value:"9.1.5.1 \u5728\u6ce8\u518c\u6570\u636e\u5e93\u670d\u52a1\u65f6\u914d\u7f6e",id:"9151-\u5728\u6ce8\u518c\u6570\u636e\u5e93\u670d\u52a1\u65f6\u914d\u7f6e",level:3},{value:"9.1.5.2 [AppDbContext] \u65b9\u5f0f\u914d\u7f6e",id:"9152-appdbcontext-\u65b9\u5f0f\u914d\u7f6e",level:3},{value:"9.1.5.3 OnConfiguring \u65b9\u5f0f\u914d\u7f6e",id:"9153-onconfiguring-\u65b9\u5f0f\u914d\u7f6e",level:3},{value:"9.1.5.4 \u5404\u7c7b\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\u914d\u7f6e\u793a\u4f8b",id:"9154-\u5404\u7c7b\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\u914d\u7f6e\u793a\u4f8b",level:3},{value:"9.1.6 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4e49\u4f4d\u7f6e",id:"916-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4e49\u4f4d\u7f6e",level:2},{value:"9.1.7 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6ce8\u518c",id:"917-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6ce8\u518c",level:2},{value:"9.1.8 \u81ea\u5b9a\u4e49\u9ad8\u7ea7\u6ce8\u518c",id:"918-\u81ea\u5b9a\u4e49\u9ad8\u7ea7\u6ce8\u518c",level:2},{value:"9.1.9 \u52a8\u6001\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5bf9\u8c61",id:"919-\u52a8\u6001\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5bf9\u8c61",level:2},{value:"9.1.10 \u5728\u540e\u53f0\u4efb\u52a1\u4e2d\u4f7f\u7528",id:"9110-\u5728\u540e\u53f0\u4efb\u52a1\u4e2d\u4f7f\u7528",level:2},{value:"9.1.11 AppDbContext \u5168\u5c40\u914d\u7f6e\u5c5e\u6027",id:"9111-appdbcontext-\u5168\u5c40\u914d\u7f6e\u5c5e\u6027",level:2},{value:"9.1.12 \u914d\u7f6e\u5b9e\u4f53 \u61d2\u52a0\u8f7d",id:"9112-\u914d\u7f6e\u5b9e\u4f53-\u61d2\u52a0\u8f7d",level:2},{value:"9.1.13 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"9113-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],u={toc:d};function c(e){var n=e.components,t=(0,i.Z)(e,a);return(0,r.kt)("wrapper",(0,o.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"\u8fde\u63a5\u5b57\u7b26\u4e32\u914d\u7f6e\u6ce8\u610f\u4e8b\u9879",type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c\u8fde\u63a5\u5b57\u7b26\u4e32\u662f\u914d\u7f6e\u5728\u81ea\u5b9a\u4e49\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},".json")," \u6587\u4ef6\u4e2d\uff0c\u90a3\u4e48\u5fc5\u987b\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u4e2d\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},".json")," \u53f3\u952e\u5c5e\u6027\uff0c\u8bbe\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"\u590d\u5236")," \u8f93\u51fa\u76ee\u5f55\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5982\u679c\u8f83\u65b0\u5219\u590d\u5236"),"\uff0c\u751f\u6210\u64cd\u4f5c\u4e3a\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"\u5185\u5bb9"),"\u3002"),(0,r.kt)("p",{parentName:"admonition"},"\u5426\u5219\u5c31\u4f1a\u63d0\u793a\u627e\u4e0d\u5230\u914d\u7f6e\u6216\u8fde\u63a5\u5b57\u7b26\u4e32\u7684\u9519\u8bef\u3002")),(0,r.kt)("h2",{id:"911-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"9.1.1 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,r.kt)("p",null,"\u7b80\u5355\u6765\u8bf4\uff0c\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u662f\u8d1f\u8d23\u548c\u6570\u636e\u5e93\u4ea4\u4e92\u7684\u5bf9\u8c61\uff0c\u63d0\u4f9b\u7a0b\u5e8f\u5bf9\u6570\u636e\u5e93\u5b58\u53d6\u63d0\u4f9b\u4e86\u5927\u91cf\u7684\u65b9\u6cd5\u3002"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u9ed8\u8ba4\u96c6\u6210\u4e86\u5fae\u8f6f\u4eb2\u513f\u5b50\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"EntityFramework Core")," \uff0c\u4e5f\u5c31\u662f\u901a\u5e38\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6307\u7684\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"DbContext")," \u7c7b\u6216\u5b83\u7684\u5b9e\u73b0\u7c7b\u3002"),(0,r.kt)("h2",{id:"912-appdbcontext"},"9.1.2 ",(0,r.kt)("inlineCode",{parentName:"h2"},"AppDbContext")),(0,r.kt)("p",null,"\u5728\u6211\u4eec\u5b9e\u9645\u9879\u76ee\u5f00\u53d1\u8fc7\u7a0b\u4e2d\uff0c\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"EFCore")," \u63d0\u4f9b\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"DbContext")," \u64cd\u4f5c\u5bf9\u8c61\u64cd\u4f5c\u6570\u636e\u5e93\u6709\u4e9b\u7e41\u7410\u548c\u590d\u6742\uff0c\u4e14\u9ed8\u8ba4\u4e0d\u5177\u5907\u8bfb\u5199\u5206\u79bb\u3001\u591a\u5e93\u7b49\u64cd\u4f5c\u529f\u80fd\u3002"),(0,r.kt)("p",null,"\u6240\u4ee5\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"AppDbContext")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\uff0c\u8be5\u4e0a\u4e0b\u6587\u7ee7\u627f\u81ea ",(0,r.kt)("inlineCode",{parentName:"p"},"DbContext"),"\u3002"),(0,r.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u540e\u7eed\u7ae0\u8282\uff0c\u7686\u91c7\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"EFCore")," \u4ee3\u66ff ",(0,r.kt)("inlineCode",{parentName:"p"},"EntityFramework Core"),"\u3002")),(0,r.kt)("h2",{id:"913-appdbcontext-\u548c-dbcontext-\u533a\u522b"},"9.1.3 ",(0,r.kt)("inlineCode",{parentName:"h2"},"AppDbContext")," \u548c ",(0,r.kt)("inlineCode",{parentName:"h2"},"DbContext")," \u533a\u522b"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u7ee7\u627f\u81ea ",(0,r.kt)("inlineCode",{parentName:"li"},"DbContext"),"\uff0c\u5177\u5907 ",(0,r.kt)("inlineCode",{parentName:"li"},"DbContext")," \u6240\u6709\u529f\u80fd\u3002"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u652f\u6301\u591a\u6570\u636e\u5e93\u64cd\u4f5c\u6cdb\u578b\u7248\u672c\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u81ea\u52a8\u914d\u7f6e\u5b9e\u4f53\u4fe1\u606f\uff0c\u65e0\u9700\u5728 ",(0,r.kt)("inlineCode",{parentName:"li"},"OnModelCreating")," \u4e2d\u914d\u7f6e"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u652f\u6301\u5185\u7f6e\u591a\u79df\u6237\u652f\u6301"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u652f\u6301\u5168\u5c40\u6a21\u578b\u914d\u7f6e\u62e6\u622a\u5668"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u652f\u6301\u6570\u636e\u63d0\u4ea4\u66f4\u6539\u591a\u4e2a\u4e8b\u4ef6"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u63d0\u4f9b\u66f4\u52a0\u5f3a\u5927\u7684\u6a21\u578b\u64cd\u4f5c\u80fd\u529b\uff0c\u5982 ",(0,r.kt)("inlineCode",{parentName:"li"},"Sql")," \u64cd\u4f5c\uff0c\u8bfb\u5199\u5206\u79bb\u7b49"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u80fd\u591f\u5f97\u5230 ",(0,r.kt)("inlineCode",{parentName:"li"},"Furion")," \u6846\u67b6\u66f4\u591a\u7684\u529f\u80fd\u652f\u6301")),(0,r.kt)("h2",{id:"914-\u5982\u4f55\u5b9a\u4e49\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"9.1.4 \u5982\u4f55\u5b9a\u4e49\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u4e86\uff0c\u63d0\u4f9b\u4e86\u4e24\u79cd ",(0,r.kt)("inlineCode",{parentName:"p"},"AppDbContext")," \u5b9a\u4e49\u65b9\u5f0f\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u64cd\u4f5c\u9ed8\u8ba4\u6570\u636e\u5e93"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext")," \u64cd\u4f5c N \u4e2a\u6570\u636e\u5e93")),(0,r.kt)("p",null,"\u5176\u4e2d ",(0,r.kt)("inlineCode",{parentName:"p"},"AppDbContext")," \u9ed8\u8ba4\u7ee7\u627f\u81ea ",(0,r.kt)("inlineCode",{parentName:"p"},"AppDbContext"),"\u3002"),(0,r.kt)("p",null,"\u4e0b\u9762\u662f\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u521b\u5efa\u7684\u591a\u4e2a\u4f8b\u5b50\uff1a"),(0,r.kt)("h3",{id:"9141-\u521b\u5efa\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"9.1.4.1 \u521b\u5efa\u9ed8\u8ba4\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,6,12}",showLineNumbers:!0,"":!0,"{1,6,12}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("\u8fde\u63a5\u5b57\u7b26\u4e32\u6216appsetting.json \u952e")]\n public class FurionDbContext : AppDbContext // \u7ee7\u627f AppDbContext<> \u7c7b\n {\n /// \n /// \u7ee7\u627f\u7236\u7c7b\u6784\u9020\u51fd\u6570\n /// \n /// \n public FurionDbContext(DbContextOptions options) : base(options)\n {\n }\n }\n}\n')),(0,r.kt)("h3",{id:"9142-\u521b\u5efa\u5176\u4ed6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"9.1.4.2 \u521b\u5efa\u5176\u4ed6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,6,12}",showLineNumbers:!0,"":!0,"{1,6,12}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("\u8fde\u63a5\u5b57\u7b26\u4e32\u6216appsetting.json \u952e")]\n public class FurOtherDbContext : AppDbContext // \u7ee7\u627f AppDbContext<> \u7c7b\n {\n /// \n /// \u7ee7\u627f\u7236\u7c7b\u6784\u9020\u51fd\u6570\n /// \n /// \n public FurOtherDbContext(DbContextOptions options) : base(options)\n {\n }\n }\n}\n')),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u6240\u6709\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u90fd\u5e94\u8be5\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.EntityFramework.Core")," \u9879\u76ee\u4e2d\u521b\u5efa\u3002\u53e6\u5916\u5982\u679c\u7cfb\u7edf\u7528\u5230\u4e86\u591a\u4e2a\u6570\u636e\u5e93\uff0c\u90a3\u4e48\u4ece\u7b2c\u4e8c\u4e2a\u5f00\u59cb\u5fc5\u987b\u6307\u5b9a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\u3002\u5173\u4e8e ",(0,r.kt)("inlineCode",{parentName:"p"},"TDbContextLocator")," \u5c06\u5728\u4e0b\u4e00\u7ae0\u8282 \u300a",(0,r.kt)("a",{parentName:"p",href:"dbcontext-locator"},"9.2 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668"),"\u300b\u9610\u8ff0\u3002")),(0,r.kt)("h2",{id:"915-\u914d\u7f6e\u8fde\u63a5\u5b57\u7b26\u4e32"},"9.1.5 \u914d\u7f6e\u8fde\u63a5\u5b57\u7b26\u4e32"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u591a\u79cd\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\u914d\u7f6e\u65b9\u5f0f\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u5728\u6ce8\u518c\u6570\u636e\u5e93\u670d\u52a1\u65f6\u914d\u7f6e\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},'AddDbPool("\u8fde\u63a5\u5b57\u7b26\u4e32")')," \u65b9\u5f0f"),(0,r.kt)("li",{parentName:"ul"},"\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},'[AppDbContext("\u8fde\u63a5\u5b57\u7b26\u4e32/Key")]')," \u7279\u6027\u65b9\u5f0f\uff08\u53ea\u5728 ",(0,r.kt)("inlineCode",{parentName:"li"},"AppDbContext \u5b9e\u73b0\u7c7b\u6709\u6548"),"\uff09",(0,r.kt)("strong",{parentName:"li"},"\u63a8\u8350")),(0,r.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u91cd\u5199 ",(0,r.kt)("inlineCode",{parentName:"li"},"OnConfiguring(DbContextOptionsBuilder optionsBuilder)")," \u914d\u7f6e")),(0,r.kt)("h3",{id:"9151-\u5728\u6ce8\u518c\u6570\u636e\u5e93\u670d\u52a1\u65f6\u914d\u7f6e"},"9.1.5.1 \u5728\u6ce8\u518c\u6570\u636e\u5e93\u670d\u52a1\u65f6\u914d\u7f6e"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {12-19} title="Furion.EntityFramework.Core\\Startup.cs"',showLineNumbers:!0,"":!0,"{12-19}":!0,title:'"Furion.EntityFramework.Core\\Startup.cs"'},'using Furion.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppStartup(600)]\n public sealed class FurEntityFrameworkCoreStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n // \u914d\u7f6e\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\uff0c\u652f\u6301N\u4e2a\u6570\u636e\u5e93\n services.AddDatabaseAccessor(options =>\n {\n // \u914d\u7f6e\u9ed8\u8ba4\u6570\u636e\u5e93\n options.AddDbPool(DbProvider.SqlServer, connectionMetadata:"\u8fde\u63a5\u5b57\u7b26\u4e32");\n\n // \u914d\u7f6e\u591a\u4e2a\u6570\u636e\u5e93\uff0c\u591a\u4e2a\u6570\u636e\u5e93\u5fc5\u987b\u6307\u5b9a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\n options.AddDbPool(DbProvider.Sqlite, connectionMetadata:"\u8fde\u63a5\u5b57\u7b26\u4e32");\n });\n }\n }\n}\n')),(0,r.kt)("admonition",{title:"\u65b0\u7248 MySQL \u6ce8\u610f",type:"caution"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"MySQL")," \u5728\u65b0\u7248\u672c\u5305\u4e2d\u6ce8\u518c\u6709\u6240\u4fee\u6539\uff0c\u6240\u4ee5\u6ce8\u518c\u65b9\u5f0f\u4e3a\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'services.AddDatabaseAccessor(options =>\n{\n options.AddDbPool($"{DbProvider.MySql}@8.0.22");\n});\n'))),(0,r.kt)("h3",{id:"9152-appdbcontext-\u65b9\u5f0f\u914d\u7f6e"},"9.1.5.2 ",(0,r.kt)("inlineCode",{parentName:"h3"},"[AppDbContext]")," \u65b9\u5f0f\u914d\u7f6e"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,6}",showLineNumbers:!0,"":!0,"{1,6}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("DbConnectionString")] // \u652f\u6301 `appsetting.json` \u540d\u6216 \u8fde\u63a5\u5b57\u7b26\u4e32\n public class FurionDbContext : AppDbContext\n {\n /// \n /// \u7ee7\u627f\u7236\u7c7b\u6784\u9020\u51fd\u6570\n /// \n /// \n public FurionDbContext(DbContextOptions options) : base(options)\n {\n }\n }\n}\n')),(0,r.kt)("admonition",{title:"\u5c0f\u63d0\u793a",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u63a8\u8350\u4f7f\u7528\u6b64\u65b9\u5f0f\u914d\u7f6e\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\u3002")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"[AppDbContext]"))," \u5185\u7f6e\u5c5e\u6027\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ConnectionMetadata"),"\uff1a\u652f\u6301\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\uff0c\u914d\u7f6e\u6587\u4ef6\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"ConnectionStrings")," \u4e2d\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"Key")," \u6216\u914d\u7f6e\u6587\u4ef6\u7684\u5b8c\u6574\u7684\u914d\u7f6e\u8def\u5f84\uff0c\u5982\u679c\u662f\u5185\u5b58\u6570\u636e\u5e93\uff0c\u5219\u4e3a\u6570\u636e\u5e93\u540d\u79f0\u3002"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"TablePrefix"),"\uff1a\u5f53\u524d\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u8868\u7edf\u4e00\u524d\u7f00"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"TableSuffix"),"\uff1a\u5f53\u524d\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u8868\u7edf\u4e00\u540e\u7f00"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ProviderName"),"\uff1a\u914d\u7f6e\u6570\u636e\u5e93\u63d0\u4f9b\u5668\u7c7b\u578b\uff0c\u4f20\u5165 ",(0,r.kt)("inlineCode",{parentName:"li"},"DbProvider.Xxx")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Mode"),"\uff1a\u914d\u7f6e\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6a21\u5f0f\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"DbContextMode")," \u679a\u4e3e\u7c7b\u578b\uff0c\u53d6\u503c\uff1a",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Cached"),"\uff1a\u7f13\u5b58\u6a21\u578b\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\uff0c\u9ed8\u8ba4\u503c"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Dynamic"),"\uff1a\u52a8\u6001\u6a21\u578b\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"SlaveDbContextLocators"),"\uff1a\u4e3b\u4ece\u5e93\u914d\u7f6e\uff0c\u8bbe\u7f6e\u591a\u4e2a\u4ece\u5e93\u5b9a\u4f4d\u5668\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"Type[]")," \u7c7b\u578b")),(0,r.kt)("h3",{id:"9153-onconfiguring-\u65b9\u5f0f\u914d\u7f6e"},"9.1.5.3 ",(0,r.kt)("inlineCode",{parentName:"h3"},"OnConfiguring")," \u65b9\u5f0f\u914d\u7f6e"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {16-20}",showLineNumbers:!0,"":!0,"{16-20}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n public class FurionDbContext : AppDbContext\n {\n /// \n /// \u7ee7\u627f\u7236\u7c7b\u6784\u9020\u51fd\u6570\n /// \n /// \n public FurionDbContext(DbContextOptions options) : base(options)\n {\n }\n\n protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\n {\n base.OnConfiguring(optionsBuilder);\n\n optionsBuilder.UseSqlServer("\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32");\n }\n }\n}\n')),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u8fd9\u4e09\u79cd\u65b9\u5f0f\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528\uff0c\u4f46\u662f\u6709\u4f18\u5148\u7ea7\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"[AppDbContext]")," -> ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5728\u6ce8\u518c\u6570\u636e\u5e93\u670d\u52a1\u65f6\u914d\u7f6e")," -> ",(0,r.kt)("inlineCode",{parentName:"p"},"OnConfiguring"),"\uff08\u4f4e\u5230\u9ad8\uff09"),(0,r.kt)("p",{parentName:"admonition"},"\u4e5f\u5c31\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"OnConfiguring")," \u914d\u7f6e\u4f1a\u8986\u76d6 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5728\u6ce8\u518c\u6570\u636e\u5e93\u670d\u52a1\u65f6\u914d\u7f6e")," \u914d\u7f6e\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"\u5728\u6ce8\u518c\u6570\u636e\u5e93\u670d\u52a1\u65f6\u914d\u7f6e")," \u914d\u7f6e\u4f1a\u8986\u76d6 ",(0,r.kt)("inlineCode",{parentName:"p"},"[AppDbContext]")," \u914d\u7f6e\u6240\u914d\u7f6e\u7684\u8fde\u63a5\u5b57\u7b26\u4e32\u3002")),(0,r.kt)("h3",{id:"9154-\u5404\u7c7b\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\u914d\u7f6e\u793a\u4f8b"},"9.1.5.4 \u5404\u7c7b\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\u914d\u7f6e\u793a\u4f8b"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Sqlite"),"\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"Data Source=./Furion.db")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"MySql"),"\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"Data Source=localhost;Database=Furion;User ID=root;Password=000000;pooling=true;port=3306;sslmode=none;CharSet=utf8;")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"SqlServer"),"\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Oracle"),"\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"User Id=orcl;Password=orcl;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"PostgreSQL"),"\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"PORT=5432;DATABASE=postgres;HOST=127.0.0.1;PASSWORD=postgres;USER ID=postgres;"))),(0,r.kt)("h2",{id:"916-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4e49\u4f4d\u7f6e"},"9.1.6 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4e49\u4f4d\u7f6e"),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u9700\u5b9a\u4e49\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.EntityFramework.Core")," \u4e2d\uff0c\u4e14\u6bcf\u4e00\u4e2a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u90fd\u5fc5\u987b\u62e5\u6709\u552f\u4e00\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"DbContextLocator")," \u5b9a\u4f4d\u5668")),(0,r.kt)("h2",{id:"917-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6ce8\u518c"},"9.1.7 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u6ce8\u518c"),(0,r.kt)("p",null,"\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u914d\u7f6e\u597d\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\u540e\uff0c\u9700\u8981\u6ce8\u518c\u8be5\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\uff0c\u5e76\u6307\u5b9a\u6570\u636e\u5e93\u7c7b\u578b\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {11-13} title="Furion\\framework\\Furion.EntityFramework.Core\\FurEntityFrameworkCoreStartup.cs"',showLineNumbers:!0,"":!0,"{11-13}":!0,title:'"Furion\\framework\\Furion.EntityFramework.Core\\FurEntityFrameworkCoreStartup.cs"'},"using Furion.DatabaseAccessor;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppStartup(600)]\n public sealed class FurEntityFrameworkCoreStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddDatabaseAccessor(options =>\n {\n options.AddDbPool(DbProvider.Sqlite);\n });\n }\n }\n}\n")),(0,r.kt)("p",null,"\u5982\u679c\u6709\u591a\u4e2a\u6570\u636e\u5e93\u64cd\u4f5c\uff0c",(0,r.kt)("strong",{parentName:"p"},"\u90a3\u4e48\u4ece\u7b2c\u4e8c\u4e2a\u8d77\uff0c\u5c31\u9700\u8981\u7ed1\u5b9a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668"),"\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"options.AddDbPool(DbProvider.Sqlite); // \u7b2c\u4e00\u4e2a\u6570\u636e\u5e93\n\noptions.AddDbPool(DbProvider.SqlServer); // \u7b2c\u4e8c\u4e2a\u6570\u636e\u5e93\n\noptions.AddDbPool(DbProvider.SqlServer); // \u7b2c\u4e09\u4e2a\u6570\u636e\u5e93\n")),(0,r.kt)("h2",{id:"918-\u81ea\u5b9a\u4e49\u9ad8\u7ea7\u6ce8\u518c"},"9.1.8 \u81ea\u5b9a\u4e49\u9ad8\u7ea7\u6ce8\u518c"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u4e3a\u4e86\u80fd\u591f\u5b9e\u73b0\u6570\u636e\u5e93\u7684\u7b80\u5355\u4f7f\u7528\u8fdb\u884c\u4e86\u6ce8\u518c\u5c01\u88c5\uff0c\u4f46\u6709\u4e9b\u65f6\u5019\uff0c\u6211\u4eec\u53ef\u80fd\u9700\u8981\u6dfb\u52a0\u66f4\u591a\u914d\u7f6e\uff0c\u8fd9\u65f6\u5c31\u9700\u8981\u4f7f\u7528\u539f\u751f\u81ea\u5b9a\u4e49\u914d\u7f6e\u65b9\u5f0f\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddDatabaseAccessor(options =>\n{\n // \u81ea\u5b9a\u4e49\u539f\u751f\u914d\u7f6e\n options.AddDb((services, builder) =>\n {\n builder.UseSqlite(...);\n }\n});\n")),(0,r.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u5feb\u901f\u89e3\u6790\u8fde\u63a5\u5b57\u7b26\u4e32\u7684\u9759\u6001\u65b9\u6cd5\uff0c\u81ea\u52a8\u6839\u636e\u540d\u79f0\u8bfb\u53d6\u914d\u7f6e\uff0c\u81ea\u52a8\u89e3\u6790 ",(0,r.kt)("inlineCode",{parentName:"p"},'[AppContext("...")]')," \u4fe1\u606f\uff0c\u5982\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u83b7\u53d6\u8fde\u63a5\u5b57\u7b26\u4e32\nvar connStr = DbProvider.GetConnectionString(/*\u8fd9\u91cc\u53ef\u5199\u53ef\u4e0d\u5199*/);\n\noptions.AddDb((services, builder) =>\n{\n builder.UseSqlite(connStr, ...);\n}\n"))),(0,r.kt)("h2",{id:"919-\u52a8\u6001\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5bf9\u8c61"},"9.1.9 \u52a8\u6001\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5bf9\u8c61"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u662f\u5b9a\u4e49\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.EntityFramework.Core")," \u9879\u76ee\u5c42\uff0c\u5e76\u4e14\u8be5\u5c42\u4e0d\u88ab ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Application")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Core")," \u7b49\u5c42\u5f15\u7528\u3002"),(0,r.kt)("p",null,"\u6240\u4ee5\u5c31\u4e0d\u80fd\u76f4\u63a5\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Application")," \u9879\u76ee\u5c42\u76f4\u63a5\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.EntityFramework.Core")," \u5b9a\u4e49\u7684\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u3002"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u63d0\u4f9b\u4e86\u4e24\u79cd\u65b9\u5f0f\u5904\u7406\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"repository.Context")," \uff1a\u5f53\u524d\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5bf9\u8c61\uff0c\u8fd4\u56de\u662f ",(0,r.kt)("inlineCode",{parentName:"li"},"DbContext")," \u62bd\u8c61\u7c7b\u578b"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"repository.DynamicContext"),"\uff1a\u5f53\u524d\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5bf9\u8c61\uff0c\u8fd4\u56de\u7684\u662f ",(0,r.kt)("inlineCode",{parentName:"li"},"dynamic")," \u7c7b\u578b")),(0,r.kt)("p",null,"\u5982\u679c\u4f60\u53ea\u662f\u60f3\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"DbContext")," \u7684\u529f\u80fd\uff0c\u76f4\u63a5\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"repository.Context")," \u5373\u53ef\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"repository.Context.SaveChanges();\n")),(0,r.kt)("p",null,"\u5982\u679c\u4f60\u60f3\u80fd\u591f\u83b7\u53d6\u5177\u4f53\u7684\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u7c7b\u578b\uff0c\u5982 ",(0,r.kt)("inlineCode",{parentName:"p"},"MyDbContext"),"\uff0c\u90a3\u4e48\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"repository.DynamicContext")," \u5c31\u53ef\u4ee5\u83b7\u53d6\u5230\u5177\u4f53\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"MyDbContext")," \u7c7b\u578b\u3002\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var persons = repository.DynamicContext.Persons.Find(1);\nvar users = repository.DynamicContext.Users;\n")),(0,r.kt)("p",null,"\u8fd9\u6837\u5c31\u53ef\u4ee5\u76f4\u63a5\u64cd\u4f5c ",(0,r.kt)("inlineCode",{parentName:"p"},"MyDbContext")," \u5b9a\u4e49\u7684\u5c5e\u6027\u548c\u65b9\u6cd5\u4e86\u3002"),(0,r.kt)("h2",{id:"9110-\u5728\u540e\u53f0\u4efb\u52a1\u4e2d\u4f7f\u7528"},"9.1.10 \u5728\u540e\u53f0\u4efb\u52a1\u4e2d\u4f7f\u7528"),(0,r.kt)("p",null,"\u7531\u4e8e ",(0,r.kt)("inlineCode",{parentName:"p"},"DbContext")," \u9ed8\u8ba4\u6ce8\u518c\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"Scoped")," \u751f\u5b58\u5468\u671f\uff0c\u6240\u4ee5\u5728\u540e\u53f0\u4efb\u52a1\u4e2d\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"IServiceScopeFactory")," \u83b7\u53d6\u6240\u6709\u670d\u52a1\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'public class JobService : BackgroundService\n{\n // \u65e5\u5fd7\u5bf9\u8c61\n private readonly ILogger _logger;\n\n // \u670d\u52a1\u5de5\u5382\n private readonly IServiceScopeFactory _scopeFactory;\n public JobService(ILogger logger\n , IServiceScopeFactory scopeFactory)\n {\n _logger = logger;\n _scopeFactory = scopeFactory;\n }\n\n protected override Task ExecuteAsync(CancellationToken stoppingToken)\n {\n _logger.LogInformation("\u5199\u65e5\u5fd7~~");\n\n using (var scope = _scopeFactory.CreateScope())\n {\n var services = scope.ServiceProvider;\n\n // \u83b7\u53d6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\n var dbContext = Db.GetDbContext(services);\n\n // \u83b7\u53d6\u4ed3\u50a8\n var repository = Db.GetRepository(services);\n\n // \u89e3\u6790\u5176\u4ed6\u670d\u52a1\n var otherService = services.GetService();\n }\n\n return Task.CompletedTask;\n }\n}\n')),(0,r.kt)("admonition",{title:"\u6570\u636e\u5e93\u64cd\u4f5c\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f5c\u7528\u57df\u4e2d\u5bf9",(0,r.kt)("strong",{parentName:"p"},"\u6570\u636e\u5e93\u6709\u4efb\u4f55\u53d8\u66f4\u64cd\u4f5c"),"\uff0c\u9700\u624b\u52a8\u8c03\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"SaveChanges")," \u6216\u5e26 ",(0,r.kt)("inlineCode",{parentName:"p"},"Now")," \u7ed3\u5c3e\u7684\u65b9\u6cd5\u3002\u4e5f\u53ef\u4ee5\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"Scoped.CreateUow(handler)")," \u4ee3\u66ff\u3002")),(0,r.kt)("h2",{id:"9111-appdbcontext-\u5168\u5c40\u914d\u7f6e\u5c5e\u6027"},"9.1.11 ",(0,r.kt)("inlineCode",{parentName:"h2"},"AppDbContext")," \u5168\u5c40\u914d\u7f6e\u5c5e\u6027"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"InsertOrUpdateIgnoreNullValues"),"\uff1a\u65b0\u589e\u6216\u66f4\u65b0\u5ffd\u7565\u7a7a\u503c\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"false"),"\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u5728\u6784\u9020\u51fd\u6570\u4e2d\u914d\u7f6e")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"EnabledEntityStateTracked"),"\uff1a\u542f\u7528\u5b9e\u4f53\u8ddf\u8e2a\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"true"),"\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u5728\u6784\u9020\u51fd\u6570\u4e2d\u914d\u7f6e")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"EnabledEntityChangedListener"),"\uff1a\u542f\u7528\u5b9e\u4f53\u6570\u636e\u66f4\u6539\u76d1\u542c\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"false"),"\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u5728\u6784\u9020\u51fd\u6570\u4e2d\u914d\u7f6e")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Tenant"),"\uff1a\u9ed8\u8ba4\u5185\u7f6e\u591a\u79df\u6237"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"FailedAutoRollback"),"\uff1a\u662f\u5426\u542f\u7528\u4fdd\u5b58\u5931\u8d25\u540e\u4e8b\u52a1\u81ea\u52a8\u56de\u6eda\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"true"),"\uff0c\u53ef\u4ee5\u5728\u4efb\u4f55\u5730\u65b9\u914d\u7f6e")),(0,r.kt)("h2",{id:"9112-\u914d\u7f6e\u5b9e\u4f53-\u61d2\u52a0\u8f7d"},"9.1.12 \u914d\u7f6e\u5b9e\u4f53 ",(0,r.kt)("inlineCode",{parentName:"h2"},"\u61d2\u52a0\u8f7d")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u7b2c\u4e00\u6b65\uff1a\u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"li"},"EFCore")," \u62d3\u5c55\u5305")),(0,r.kt)("p",null,"\u5728\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4e49\u6240\u5728\u7684\u5c42\u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"p"},"Microsoft.EntityFrameworkCore.Proxies")," \u62d3\u5c55\u5305"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u7b2c\u4e8c\u6b65\uff1a\u91c7\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"AddDb")," \u65b9\u5f0f\u6ce8\u518c")),(0,r.kt)("p",null,"\u786e\u4fdd\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u91c7\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"AddDb")," \u6ce8\u518c\u800c\u975e ",(0,r.kt)("inlineCode",{parentName:"p"},"AddDbPool"),"\u3002"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u7b2c\u4e09\u6b65\uff1a\u91cd\u5199 ",(0,r.kt)("inlineCode",{parentName:"li"},"OnConfiguring")," \u65b9\u6cd5")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13,15}",showLineNumbers:!0,"":!0,"{13,15}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]\n public class DefaultDbContext : AppDbContext\n {\n public DefaultDbContext(DbContextOptions options) : base(options)\n {\n }\n\n protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\n {\n optionsBuilder.UseLazyLoadingProxies()\n .UseSqlite(DbProvider.GetConnectionString());\n\n base.OnConfiguring(optionsBuilder);\n }\n }\n}\n')),(0,r.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u66f4\u591a ",(0,r.kt)("inlineCode",{parentName:"p"},"EFCore")," \u61d2\u52a0\u8f7d\u53ef\u67e5\u770b ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("a",{parentName:"strong",href:"https://docs.microsoft.com/zh-cn/ef/core/querying/related-data/lazy"},"\u3010EFCore - \u5ef6\u8fdf\u52a0\u8f7d\u3011"))," \u6587\u6863\u3002")),(0,r.kt)("h2",{id:"9113-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.1.13 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,r.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,r.kt)("hr",null),(0,r.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u6570\u636e\u5e93\u4e0a\u4e0b\u6587")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/configuring-dbcontext"},"EF Core - \u914d\u7f6e DbContext")," \u7ae0\u8282\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/a4c09e9b.9c26d341.js b/handbook/build/assets/js/a4c09e9b.9c26d341.js new file mode 100644 index 00000000000..2553d97ed20 --- /dev/null +++ b/handbook/build/assets/js/a4c09e9b.9c26d341.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[8854],{3905:function(t,e,n){n.d(e,{Zo:function(){return u},kt:function(){return d}});var o=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function i(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var p=o.createContext({}),c=function(t){var e=o.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},u=function(t){var e=c(t.components);return o.createElement(p.Provider,{value:e},t.children)},m={inlineCode:"code",wrapper:function(t){var e=t.children;return o.createElement(o.Fragment,{},e)}},s=o.forwardRef((function(t,e){var n=t.components,r=t.mdxType,a=t.originalType,p=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),s=c(n),d=r,k=s["".concat(p,".").concat(d)]||s[d]||m[d]||a;return n?o.createElement(k,i(i({ref:e},u),{},{components:n})):o.createElement(k,i({ref:e},u))}));function d(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var a=n.length,i=new Array(a);i[0]=s;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l.mdxType="string"==typeof t?t:r,i[1]=l;for(var c=2;c")," \u5373\u53ef\u3002"),(0,a.kt)("p",null,"\u5982\uff1a\u53ea\u6709\u4e00\u4e2a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4e49\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]\n public class DefaultDbContext : AppDbContext // \u65e0\u9700\u6307\u5b9a\u5b9a\u4f4d\u5668\n {\n public DefaultDbContext(DbContextOptions options) : base(options)\n {\n }\n }\n}\n')),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u591a\u6570\u636e\u5e93\u5b9a\u4f4d\u5668",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u6570\u636e\u5e93\u7684\u5b9a\u4f4d\u5668\u9ed8\u8ba4\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"MasterDbContextLocator"),"\uff0c\u6240\u4ee5\u65e0\u9700\u663e\u793a\u6307\u5b9a\u5b9a\u4f4d\u5668\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u4f46\u4ece\u7b2c\u4e8c\u4e2a\u6570\u636e\u5e93\u5f00\u59cb\uff0c\u90fd\u5fc5\u987b\u6307\u5b9a\u6570\u636e\u5e93\u5b9a\u4f4d\u5668"),"\u3002\u5982\uff1a"),(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},"\u6ce8\u518c\u4e0a\u4e0b\u6587\uff1a")),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"options.AddDbPool();\n")),(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},"\u5b9a\u4e49\u4e0a\u4e0b\u6587")),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]\n public class OtherDbContext : AppDbContext // \u9700\u6307\u5b9a\u5b9a\u4f4d\u5668\n {\n public OtherDbContext(DbContextOptions options) : base(options)\n {\n }\n }\n}\n')),(0,a.kt)("p",{parentName:"admonition"},"\u53e6\u5916\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Entity/IEntity")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"IRepository")," \u7b49\u90fd\u9700\u8981\u6307\u5b9a\u5b9a\u4f4d\u5668\uff0c\u5982\uff1a",(0,a.kt)("inlineCode",{parentName:"p"},"IEntity"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"IRepository")," \u64cd\u4f5c\u3002")),(0,a.kt)("h2",{id:"925-\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\u652f\u6301\u5bf9\u8c61"},"9.2.5 \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\u652f\u6301\u5bf9\u8c61"),(0,a.kt)("p",null,"\u76ee\u524d\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u652f\u6301\u4ee5\u4e0b\u591a\u4e2a\u5bf9\u8c61\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"AppDbContext"),"\uff1a\u6570\u636e\u4e0a\u4e0b\u6587"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IRepository"),"\uff1a\u5b9e\u4f53\u4ed3\u50a8"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ISqlRepository"),": Sql \u64cd\u4f5c\u4ed3\u50a8"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IDbRepository"),": \u7279\u5b9a\u6570\u636e\u5e93\u64cd\u4f5c\u4ed3\u50a8"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IMSRepository"),": \u8bfb\u5199\u5206\u79bb\u4ed3\u50a8"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Func"),"\uff1a\u4f9d\u8d56\u6ce8\u5165\u83b7\u53d6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Entity")," \uff1a\u5b9e\u4f53\u914d\u7f6e"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"EntityBase"),"\uff1a\u5b9e\u4f53\u914d\u7f6e"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"EntityNotKey"),"\uff1a\u65e0\u952e\u5b9e\u4f53\u914d\u7f6e"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IEntity"),"\uff1a\u9ed8\u8ba4\u5b9e\u4f53\u914d\u7f6e"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IEntitySeedData"),"\uff1a\u79cd\u5b50\u6570\u636e\u914d\u7f6e"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IEntityTypeBuilder"),"\uff1a\u5b9e\u4f53\u7c7b\u578b\u6784\u5efa\u5668"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IModelBuilderFilter"),"\uff1a\u6a21\u578b\u6784\u5efa\u7b5b\u9009\u5668"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[QueryableFunction(DbContextLocators=Type[])]"),"\uff1a\u67e5\u8be2\u51fd\u6570")),(0,a.kt)("h2",{id:"926-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.2.6 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/a6aa9e1f.fbb145ee.js b/handbook/build/assets/js/a6aa9e1f.fbb145ee.js new file mode 100644 index 00000000000..7877eae0ff9 --- /dev/null +++ b/handbook/build/assets/js/a6aa9e1f.fbb145ee.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[3089],{46:function(e,t,n){n.r(t),n.d(t,{default:function(){return d}});var a=n(7294),r=n(6010),i=n(2263),l=n(1944),o=n(5281),c=n(9058),s=n(9703),m=n(197),u=n(9985);function g(e){var t=e.metadata,n=(0,i.Z)().siteConfig.title,r=t.blogDescription,o=t.blogTitle,c="/"===t.permalink?n:o;return a.createElement(a.Fragment,null,a.createElement(l.d,{title:c,description:r}),a.createElement(m.Z,{tag:"blog_posts_list"}))}function p(e){var t=e.metadata,n=e.items,r=e.sidebar;return a.createElement(c.Z,{sidebar:r},a.createElement(u.Z,{items:n}),a.createElement(s.Z,{metadata:t}))}function d(e){return a.createElement(l.FG,{className:(0,r.Z)(o.k.wrapper.blogPages,o.k.page.blogListPage)},a.createElement(g,e),a.createElement(p,e))}},9703:function(e,t,n){n.d(t,{Z:function(){return l}});var a=n(7294),r=n(5999),i=n(2244);function l(e){var t=e.metadata,n=t.previousPage,l=t.nextPage;return a.createElement("nav",{className:"pagination-nav","aria-label":(0,r.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},n&&a.createElement(i.Z,{permalink:n,title:a.createElement(r.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),l&&a.createElement(i.Z,{permalink:l,title:a.createElement(r.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},9985:function(e,t,n){n.d(t,{Z:function(){return l}});var a=n(7294),r=n(9460),i=n(390);function l(e){var t=e.items,n=e.component,l=void 0===n?i.Z:n;return a.createElement(a.Fragment,null,t.map((function(e){var t=e.content;return a.createElement(r.n,{key:t.metadata.permalink,content:t},a.createElement(l,null,a.createElement(t,null)))})))}}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/a7023ddc.12a083d8.js b/handbook/build/assets/js/a7023ddc.12a083d8.js new file mode 100644 index 00000000000..9a43a826804 --- /dev/null +++ b/handbook/build/assets/js/a7023ddc.12a083d8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[1713],{3457:function(l){l.exports=JSON.parse('[{"label":"furion","permalink":"/blog/tags/furion","count":7},{"label":"furos","permalink":"/blog/tags/furos","count":7},{"label":".net","permalink":"/blog/tags/net","count":7},{"label":".netcore","permalink":"/blog/tags/netcore","count":7},{"label":".net5","permalink":"/blog/tags/net-5","count":7},{"label":".net6","permalink":"/blog/tags/net-6","count":5},{"label":"upload","permalink":"/blog/tags/upload","count":1},{"label":"download","permalink":"/blog/tags/download","count":1},{"label":"httpcontext","permalink":"/blog/tags/httpcontext","count":1}]')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/a70a819f.7d98829e.js b/handbook/build/assets/js/a70a819f.7d98829e.js new file mode 100644 index 00000000000..2a8780457c1 --- /dev/null +++ b/handbook/build/assets/js/a70a819f.7d98829e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7868],{828:function(o){o.exports=JSON.parse('{"permalink":"/blog/tags/furion","page":1,"postsPerPage":10,"totalPages":1,"totalCount":7,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/a71f9f93.319663b2.js b/handbook/build/assets/js/a71f9f93.319663b2.js new file mode 100644 index 00000000000..67d1b51fc08 --- /dev/null +++ b/handbook/build/assets/js/a71f9f93.319663b2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[74],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return c}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=s(n),c=o,k=d["".concat(p,".").concat(c)]||d[c]||m[c]||a;return n?r.createElement(k,i(i({ref:t},u),{},{components:n})):r.createElement(k,i({ref:t},u))}));function c(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;sCode First \u8bf4\u660e",id:"9016-code-first-\u8bf4\u660e",level:3},{value:"9.0.2 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"902-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:m};function c(e){var t=e.components,n=(0,o.Z)(e,i);return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"901-\u5165\u95e8\u51c6\u5907"},"9.0.1 \u5165\u95e8\u51c6\u5907"),(0,a.kt)("admonition",{title:"\u5165\u95e8\u6761\u4ef6",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u5bf9 ",(0,a.kt)("inlineCode",{parentName:"p"},"EF/EFCore")," \u6709\u4e00\u5b9a\u57fa\u7840\u4e86\u89e3\uff0c\u8fd8\u672a\u63a5\u89e6\u7684\u53ef\u5148\u770b ",(0,a.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/ef/core/"},"\u3010EFCore \u57fa\u7840\u3011"))),(0,a.kt)("h3",{id:"9011-\u5b89\u88c5\u5bf9\u5e94\u6570\u636e\u5e93\u5305"},"9.0.1.1 \u5b89\u88c5\u5bf9\u5e94\u6570\u636e\u5e93\u5305"),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u5728\u672c\u7ae0\u8282\u6240\u5728\u7684\u7c7b\u522b\u4e2d\uff0c\u6240\u6709\u6570\u636e\u5e93\u64cd\u4f5c\u529f\u80fd\u5747\u9700\u8981\u4f9d\u8d56 ",(0,a.kt)("inlineCode",{parentName:"p"},"EntityFramework Core")," \u6846\u67b6\uff0c\u4f46 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u5e95\u5c42\u5e76\u672a\u96c6\u6210 ",(0,a.kt)("inlineCode",{parentName:"p"},"EntityFramework Core")," \u5305\uff0c\u800c\u662f\u91c7\u7528\u52a8\u6001\u52a0\u8f7d\u7a0b\u5e8f\u96c6\u65b9\u5f0f\u81ea\u52a8\u8f7d\u5165\u3002")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u6240\u4ee5\uff0c\u5982\u9700\u4f7f\u7528\u672c\u5927\u7c7b\u6570\u636e\u5e93\u529f\u80fd\uff0c\u9700\u5b89\u88c5\u5bf9\u5e94\u7684 ",(0,a.kt)("inlineCode",{parentName:"strong"},"EntityFramework Core")," \u6570\u636e\u5e93\u5305\uff1a")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"SqlServer"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Microsoft.EntityFrameworkCore.SqlServer")," (\u652f\u6301 SqlServer 2005 +)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Sqlite"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Microsoft.EntityFrameworkCore.Sqlite")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Cosmos"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Microsoft.EntityFrameworkCore.Cosmos")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"InMemoryDatabase"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Microsoft.EntityFrameworkCore.InMemory")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MySql"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Pomelo.EntityFrameworkCore.MySql"),"\uff1a(\u652f\u6301 MySql 5.x +)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MySql.EntityFrameworkCore"),"\uff1a\u652f\u6301 (MySql 8.x +)"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"PostgreSQL"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Npgsql.EntityFrameworkCore.PostgreSQL")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Oracle"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Oracle.EntityFrameworkCore")," \uff08\u652f\u6301 Oracle 10 +\uff09"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Firebird"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"FirebirdSql.EntityFrameworkCore.Firebird")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Dm"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Microsoft.EntityFrameworkCore.Dm"))),(0,a.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u8fd9\u4e9b\u6570\u636e\u5e93\u5305\u5e94\u8be5\u5b89\u88c5\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion.EntityFramework.Core")," \u5c42\u3002\u7279\u6b8a\u60c5\u51b5\u9700\u5b89\u88c5\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion.Core")," \u5c42\u4e2d\uff0c\u5982 ",(0,a.kt)("inlineCode",{parentName:"p"},"Mysql")," ",(0,a.kt)("inlineCode",{parentName:"p"},"HasCharset()")," \u914d\u7f6e\u3002")),(0,a.kt)("h3",{id:"9012-\u521b\u5efa\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"9.0.1.2 \u521b\u5efa\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7}",showLineNumbers:!0,"":!0,"{7}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]\n public class DefaultDbContext : AppDbContext\n {\n public DefaultDbContext(DbContextOptions options) : base(options)\n {\n }\n }\n}\n')),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u6bcf\u4e00\u4e2a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u90fd\u9700\u7ee7\u627f ",(0,a.kt)("inlineCode",{parentName:"p"},"AppDbContext")," \u57fa\u7c7b\uff0c\u9ed8\u8ba4\u6570\u636e\u5e93\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"TDbContextLocator")," \u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"MasterDbContextLocator"),"\uff0c\u65e0\u9700\u663e\u5f0f\u7f16\u5199\u3002"),(0,a.kt)("p",{parentName:"admonition"},"\u975e\u9ed8\u8ba4\u6570\u636e\u5e93\u5219\u9700\u663e\u5f0f\u7ee7\u627f\u5e76\u7533\u660e\uff0c\u5982\uff1a",(0,a.kt)("inlineCode",{parentName:"p"},"AppDbContext"),"\u3002")),(0,a.kt)("p",null,"\u60f3\u4e86\u89e3\u66f4\u591a\u53ef\u67e5\u9605 \u3010",(0,a.kt)("a",{parentName:"p",href:"./dbcontext-locator"},"\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668"),"\u3011 \u7ae0\u8282\u3002"),(0,a.kt)("h3",{id:"9013-\u914d\u7f6e\u8fde\u63a5\u5b57\u7b26\u4e32"},"9.0.1.3 \u914d\u7f6e\u8fde\u63a5\u5b57\u7b26\u4e32"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u591a\u79cd\u65b9\u5f0f\u914d\u7f6e\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"appsettings.json")," \u4e2d\u914d\u7f6e")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2-3}",showLineNumbers:!0,"":!0,"{2-3}":!0},'{\n "ConnectionStrings": {\n "Sqlite3ConnectionString": "Data Source=./Furion.db"\n }\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u81ea\u5b9a\u4e49 ",(0,a.kt)("inlineCode",{parentName:"li"},".json")," \u6587\u4ef6\u914d\u7f6e")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2-3}",showLineNumbers:!0,"":!0,"{2-3}":!0},'{\n "ConnectionStrings": {\n "Sqlite3ConnectionString": "Data Source=./Furion.db"\n }\n}\n')),(0,a.kt)("p",null,"\u8be5\u65b9\u5f0f\u548c\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u7684\u533a\u522b\u662f\u81ea\u5b9a\u4e49\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},".json")," \u6587\u4ef6\u4e0d\u4f1a\u81ea\u52a8\u6dfb\u52a0\u5230\u9879\u76ee\u4e2d\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u987b\u5728 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Visual Studio")," \u4e2d\u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"strong"},".json")," \u53f3\u952e\u5c5e\u6027\uff0c\u8bbe\u7f6e ",(0,a.kt)("inlineCode",{parentName:"strong"},"\u590d\u5236")," \u8f93\u51fa\u76ee\u5f55\u4e3a ",(0,a.kt)("inlineCode",{parentName:"strong"},"\u5982\u679c\u8f83\u65b0\u5219\u590d\u5236"),"\uff0c\u751f\u6210\u64cd\u4f5c\u4e3a\uff1a",(0,a.kt)("inlineCode",{parentName:"strong"},"\u5185\u5bb9"),"\u3002")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"[AppDbContext]")," \u7279\u6027\u914d\u7f6e")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},'[AppDbContext("Data Source=./Furion.db", DbProvider.Sqlite)]\npublic class DefaultDbContext : AppDbContext\n{\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5728\u6ce8\u518c\u4e0a\u4e0b\u6587\u65f6\u914d\u7f6e")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3-4}",showLineNumbers:!0,"":!0,"{3-4}":!0},'services.AddDatabaseAccessor(options =>\n{\n // options.AddDb(connectionMetadata: "\u914d\u7f6eKey\u6216\u8fde\u63a5\u5b57\u7b26\u4e32");\n options.AddDbPool(connectionMetadata: "\u914d\u7f6eKey\u6216\u8fde\u63a5\u5b57\u7b26\u4e32");\n});\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"li"},"DbContext")," \u4e2d\u914d\u7f6e")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {12-14}",showLineNumbers:!0,"":!0,"{12-14}":!0},'using Furion.DatabaseAccessor;\nusing Microsoft.EntityFrameworkCore;\n\nnamespace Furion.EntityFramework.Core\n{\n public class DefaultDbContext : AppDbContext\n {\n public DefaultDbContext(DbContextOptions options) : base(options)\n {\n }\n\n protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\n {\n optionsBuilder.UseSqlite("\u8fde\u63a5\u5b57\u7b26\u4e32");\n base.OnConfiguring(optionsBuilder);\n }\n }\n}\n')),(0,a.kt)("h3",{id:"9014-\u5404\u7c7b\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\u914d\u7f6e\u793a\u4f8b"},"9.0.1.4 \u5404\u7c7b\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32\u914d\u7f6e\u793a\u4f8b"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Sqlite"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Data Source=./Furion.db")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"MySql"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Data Source=localhost;Database=Furion;User ID=root;Password=000000;pooling=true;port=3306;sslmode=none;CharSet=utf8;")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"SqlServer"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;TrustServerCertificate=True;")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Oracle"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"User Id=orcl;Password=orcl;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"PostgreSQL"),"\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"PORT=5432;DATABASE=postgres;HOST=127.0.0.1;PASSWORD=postgres;USER ID=postgres;"))),(0,a.kt)("h3",{id:"9015-\u6ce8\u518c\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"},"9.0.1.5 \u6ce8\u518c\u6570\u636e\u5e93\u4e0a\u4e0b\u6587"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {12-19} title="Furion.EntityFramework.Core\\Startup.cs"',showLineNumbers:!0,"":!0,"{12-19}":!0,title:'"Furion.EntityFramework.Core\\Startup.cs"'},"using Furion.DependencyInjection;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Furion.EntityFramework.Core\n{\n [AppStartup(600)]\n public sealed class FurEntityFrameworkCoreStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n // \u914d\u7f6e\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\uff0c\u652f\u6301N\u4e2a\u6570\u636e\u5e93\n services.AddDatabaseAccessor(options =>\n {\n // \u914d\u7f6e\u9ed8\u8ba4\u6570\u636e\u5e93\n options.AddDbPool();\n\n // \u914d\u7f6e\u591a\u4e2a\u6570\u636e\u5e93\uff0c\u591a\u4e2a\u6570\u636e\u5e93\u5fc5\u987b\u6307\u5b9a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668\n // options.AddDbPool();\n });\n }\n }\n}\n")),(0,a.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a\u6570\u636e\u5e93\u6570\u636e\u5e93\u6ce8\u518c\u65b9\u5f0f",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u9700\u4e86\u89e3\u5404\u79cd\u6570\u636e\u5e93\u53ca\u7248\u672c\u6ce8\u518c\u65b9\u5f0f\u53ef\u67e5\u9605 \u3010",(0,a.kt)("a",{parentName:"p",href:"/docs/dbcontext-multi-database"},"\u591a\u6570\u636e\u5e93\u6ce8\u518c\u7ae0\u8282"),"\u3011")),(0,a.kt)("h3",{id:"9016-code-first-\u8bf4\u660e"},"9.0.1.6 ",(0,a.kt)("inlineCode",{parentName:"h3"},"Code First")," \u8bf4\u660e"),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u9ed8\u8ba4\u6570\u636e\u8fc1\u79fb\u7684\u7a0b\u5e8f\u96c6\u4e3a\uff1a",(0,a.kt)("inlineCode",{parentName:"p"},"Furion.Database.Migrations"),"\uff0c\u6240\u4ee5\u5982\u679c\u60a8\u6539\u4e86\u7a0b\u5e8f\u96c6\u540d\u79f0\u6216\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"Nuget")," \u65b9\u5f0f\u5b89\u88c5\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u5305\uff0c\u5219\u9700\u8981\u914d\u7f6e\u8fc1\u79fb\u7a0b\u5e8f\u96c6\u540d\u79f0\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},'services.AddDatabaseAccessor(options =>\n{\n options.AddDbPool(DbProvider.Sqlite);\n}, "\u5b58\u653e\u8fc1\u79fb\u6587\u4ef6\u7684\u9879\u76ee\u540d\u79f0");\n')),(0,a.kt)("p",{parentName:"admonition"},"\u53e6\u5916\uff0c\u5982\u679c\u5e94\u7528\u4e2d\u914d\u7f6e\u4e86\u591a\u4e2a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\uff0c\u90a3\u4e48\u6240\u6709\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u8fc1\u79fb\u547d\u4ee4")," \u90fd\u9700\u8981\u6307\u5b9a ",(0,a.kt)("inlineCode",{parentName:"p"},"-Context \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u540d\u79f0")," \u53c2\u6570\u3002\u5982\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Add-Migration v1.0.0 -Context DefaultDbContext\n"))),(0,a.kt)("h2",{id:"902-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.0.2 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/a8677dec.0725b7c4.js b/handbook/build/assets/js/a8677dec.0725b7c4.js new file mode 100644 index 00000000000..68a0f905870 --- /dev/null +++ b/handbook/build/assets/js/a8677dec.0725b7c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4197],{3905:function(e,n,t){t.d(n,{Zo:function(){return c},kt:function(){return d}});var i=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function l(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=i.createContext({}),p=function(e){var n=i.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},c=function(e){var n=p(e.components);return i.createElement(s.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),m=p(t),d=r,k=m["".concat(s,".").concat(d)]||m[d]||u[d]||a;return t?i.createElement(k,l(l({ref:n},c),{},{components:t})):i.createElement(k,l({ref:n},c))}));function d(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,l=new Array(a);l[0]=m;var o={};for(var s in n)hasOwnProperty.call(n,s)&&(o[s]=n[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var p=2;pIOC/DI \u4f18\u7f3a\u70b9",id:"123-iocdi-\u4f18\u7f3a\u70b9",level:2},{value:"12.4 \u4f9d\u8d56\u6ce8\u5165\u7684\u4e09\u79cd\u65b9\u5f0f",id:"124-\u4f9d\u8d56\u6ce8\u5165\u7684\u4e09\u79cd\u65b9\u5f0f",level:2},{value:"12.4.1 \u6784\u9020\u65b9\u6cd5\u6ce8\u5165",id:"1241-\u6784\u9020\u65b9\u6cd5\u6ce8\u5165",level:3},{value:"12.4.2 \u5c5e\u6027\u65b9\u5f0f\u6ce8\u5165",id:"1242-\u5c5e\u6027\u65b9\u5f0f\u6ce8\u5165",level:3},{value:"12.4.3 \u65b9\u6cd5\u53c2\u6570\u6ce8\u5165",id:"1243-\u65b9\u6cd5\u53c2\u6570\u6ce8\u5165",level:3},{value:"12.5 \u6ce8\u518c\u5bf9\u8c61\u751f\u5b58\u671f",id:"125-\u6ce8\u518c\u5bf9\u8c61\u751f\u5b58\u671f",level:2},{value:"12.5.1 \u6682\u65f6/\u77ac\u65f6 \u751f\u5b58\u671f",id:"1251-\u6682\u65f6\u77ac\u65f6-\u751f\u5b58\u671f",level:3},{value:"12.5.2 \u4f5c\u7528\u57df \u751f\u5b58\u671f",id:"1252-\u4f5c\u7528\u57df-\u751f\u5b58\u671f",level:3},{value:"12.5.3 \u5355\u4f8b \u751f\u5b58\u671f",id:"1253-\u5355\u4f8b-\u751f\u5b58\u671f",level:3},{value:"12.6 \u5185\u7f6e\u4f9d\u8d56\u63a5\u53e3",id:"126-\u5185\u7f6e\u4f9d\u8d56\u63a5\u53e3",level:2},{value:"12.7 \u5e38\u89c1\u4f7f\u7528",id:"127-\u5e38\u89c1\u4f7f\u7528",level:2},{value:"12.7.1 \u7b2c\u4e00\u4e2a\u4f8b\u5b50",id:"1271-\u7b2c\u4e00\u4e2a\u4f8b\u5b50",level:3},{value:"12.7.2 \u6ce8\u518c\u6cdb\u578b\u5b9e\u4f8b",id:"1272-\u6ce8\u518c\u6cdb\u578b\u5b9e\u4f8b",level:3},{value:"12.7.3 \u4e00\u4e2a\u63a5\u53e3\u591a\u4e2a\u5b9e\u73b0",id:"1273-\u4e00\u4e2a\u63a5\u53e3\u591a\u4e2a\u5b9e\u73b0",level:3},{value:"12.7.4 \u65e0\u63a5\u53e3\u65b9\u5f0f",id:"1274-\u65e0\u63a5\u53e3\u65b9\u5f0f",level:3},{value:"12.8 [Injection] \u7279\u6027\u914d\u7f6e",id:"128-injection-\u7279\u6027\u914d\u7f6e",level:2},{value:"12.9 \u81ea\u5b9a\u4e49\u9ad8\u7ea7\u6ce8\u518c",id:"129-\u81ea\u5b9a\u4e49\u9ad8\u7ea7\u6ce8\u518c",level:2},{value:"12.10 appsettings.json \u914d\u7f6e\u6ce8\u518c",id:"1210-appsettingsjson-\u914d\u7f6e\u6ce8\u518c",level:2},{value:"12.11 \u6ce8\u518c\u987a\u5e8f\u548c\u4f18\u5148\u7ea7",id:"1211-\u6ce8\u518c\u987a\u5e8f\u548c\u4f18\u5148\u7ea7",level:2},{value:"12.12 Aop \u6ce8\u518c\u62e6\u622a",id:"1212-aop-\u6ce8\u518c\u62e6\u622a",level:2},{value:"12.12.1 \u5168\u5c40Aop\u62e6\u622a",id:"12121-\u5168\u5c40aop\u62e6\u622a",level:3},{value:"12.12.2 AOP \u6ce8\u5165\u89e3\u6790\u670d\u52a1",id:"12122-aop-\u6ce8\u5165\u89e3\u6790\u670d\u52a1",level:3},{value:"12.12.3 AOP \u7684\u4f5c\u7528",id:"12123-aop-\u7684\u4f5c\u7528",level:3},{value:"12.13 \u5728\u975e Web \u6216\u591a\u7ebf\u7a0b\u89e3\u6790\u670d\u52a1",id:"1213-\u5728\u975e-web-\u6216\u591a\u7ebf\u7a0b\u89e3\u6790\u670d\u52a1",level:2},{value:"12.13.1 IServiceProvider \u65b9\u5f0f",id:"12131-iserviceprovider-\u65b9\u5f0f",level:3},{value:"12.13.2 IServiceScopeFactory \u65b9\u5f0f",id:"12132-iservicescopefactory-\u65b9\u5f0f",level:3},{value:"12.13.3 Scoped \u9759\u6001\u7c7b",id:"12133-scoped-\u9759\u6001\u7c7b",level:3},{value:"12.14 \u81ea\u5b9a\u4e49\u626b\u63cf/\u7b5b\u9009\u6ce8\u518c\u670d\u52a1",id:"1214-\u81ea\u5b9a\u4e49\u626b\u63cf\u7b5b\u9009\u6ce8\u518c\u670d\u52a1",level:2},{value:"12.15 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"1215-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:m};function k(e){var n=e.components,t=(0,r.Z)(e,o);return(0,a.kt)("wrapper",(0,i.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{title:"\u9605\u524d\u5fc5\u8bfb",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7531\u4e8e\u5f88\u591a\u670b\u53cb\u7b2c\u4e00\u6b21\u63a5\u89e6 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u4f9d\u8d56\u6ce8\u5165/\u63a7\u5236\u53cd\u8f6c")," \u7684\u67b6\u6784\u7406\u5ff5\uff0c\u6240\u4ee5\u6ca1\u641e\u660e\u767d ",(0,a.kt)("inlineCode",{parentName:"p"},"\u4f5c\u7528\u57df")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"\u591a\u7ebf\u7a0b\u89e3\u6790\u670d\u52a1")," \u7684\u95ee\u9898\uff0c\u4ece\u800c\u4e0d\u6b63\u786e\u7684\u4f7f\u7528\u5bfc\u81f4\u5185\u5b58\u4e0d\u65ad\u98d9\u9ad8\uff0c\u6b63\u786e\u7684\u65b9\u5f0f\u5e94\u8be5\u662f\uff1a"),(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},"\u5c3d\u53ef\u80fd\u7684\u91c7\u7528\u6784\u9020\u51fd\u6570\u6ce8\u5165\uff08\u5982\u679c\u8fd9\u4e2a\u7c7b\u652f\u6301\uff09"),(0,a.kt)("li",{parentName:"ul"},"\u5728\u975e\u9759\u6001\u4e2d\uff08",(0,a.kt)("strong",{parentName:"li"},"\u4f46\u5728 Web \u8bf7\u6c42\u6709\u6548\u7684\u58f0\u660e\u5468\u671f\u5185"),"\uff09\u53ef\u5b89\u5168\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"li"},"App.GetService<>")," \u89e3\u6790\u670d\u52a1\uff0c\u5982\u679c\u662f ",(0,a.kt)("inlineCode",{parentName:"li"},"\u5355\u4f8b\u670d\u52a1"),"\uff0c\u4f18\u5148\u63a8\u8350\u6784\u9020\u51fd\u6570\u6ce8\u5165\u6216 ",(0,a.kt)("inlineCode",{parentName:"li"},"App.RootServices.GetService<>")," \u65b9\u5f0f"),(0,a.kt)("li",{parentName:"ul"},"\ud83e\udd10 ",(0,a.kt)("strong",{parentName:"li"},"\u5728\u975e ",(0,a.kt)("inlineCode",{parentName:"strong"},"Web")," \u73af\u5883\u3001\u591a\u7ebf\u7a0b\u73af\u5883\u3001\u7269\u8054\u7f51\u7b49\u73af\u5883\uff08\u542b\u4e8b\u4ef6\u603b\u7ebf\u3001\u5b9a\u65f6\u4efb\u52a1\u7b49\uff09\ud83c\udfd2 \u9664\u5355\u4f8b\u670d\u52a1\u4ee5\u5916 \ud83c\udfd2 \u5fc5\u987b\u91c7\u7528 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Scoped.Create()")," \u65b9\u5f0f\u521b\u5efa\u4f5c\u7528\u57df\u4e14\u670d\u52a1\u5728\u5185\u90e8\u59d4\u6258\u4e2d\u89e3\u6790\uff01")," \ud83e\udd10"))),(0,a.kt)("h2",{id:"121-\u4f9d\u8d56\u6ce8\u5165"},"12.1 \u4f9d\u8d56\u6ce8\u5165"),(0,a.kt)("p",null,"\u6240\u8c13\u4f9d\u8d56\u6ce8\u5165\uff0c\u662f\u6307\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u9700\u8981\u8c03\u7528\u53e6\u4e00\u4e2a\u5bf9\u8c61\u534f\u52a9\u65f6\uff0c\u65e0\u987b\u5728\u4ee3\u7801\u4e2d\u521b\u5efa\u88ab\u8c03\u7528\u8005\uff0c\u800c\u662f\u4f9d\u8d56\u4e8e\u5916\u90e8\u7684\u6ce8\u5165\u3002"),(0,a.kt)("p",null,"\u901a\u4fd7\u6765\u8bb2\uff0c\u5c31\u662f\u628a\u6709\u4f9d\u8d56\u5173\u7cfb\u7684\u7c7b\u653e\u5230\u5bb9\u5668\u4e2d\uff0c\u7136\u540e\u5728\u6211\u4eec\u9700\u8981\u8fd9\u4e9b\u7c7b\u65f6\uff0c\u5bb9\u5668\u81ea\u52a8\u89e3\u6790\u51fa\u8fd9\u4e9b\u7c7b\u7684\u5b9e\u4f8b\u3002"),(0,a.kt)("p",null,"\u4f9d\u8d56\u6ce8\u5165\u6700\u5927\u7684\u597d\u5904\u662f\u5b9e\u73b0\u7c7b\u7684\u89e3\u8026\uff0c\u5229\u4e8e\u7a0b\u5e8f\u62d3\u5c55\u3001\u5355\u5143\u6d4b\u8bd5\u3001\u81ea\u52a8\u5316\u6a21\u62df\u6d4b\u8bd5\u7b49\u3002"),(0,a.kt)("p",null,"\u4f9d\u8d56\u6ce8\u5165\u7684\u82f1\u6587\u4e3a\uff1a",(0,a.kt)("inlineCode",{parentName:"p"},"Dependency Injection"),"\uff0c\u7b80\u79f0 ",(0,a.kt)("inlineCode",{parentName:"p"},"DI")),(0,a.kt)("h2",{id:"122-\u63a7\u5236\u53cd\u8f6c"},"12.2 \u63a7\u5236\u53cd\u8f6c"),(0,a.kt)("p",null,"\u63a7\u5236\u53cd\u8f6c\u53ea\u662f\u4e00\u4e2a\u6982\u5ff5\uff0c\u4e5f\u5c31\u662f\u5c06\u521b\u5efa\u5bf9\u8c61\u5b9e\u4f8b\u7684\u63a7\u5236\u6743\uff08\u539f\u672c\u662f\u7a0b\u5e8f\u5458\uff09\u4ece\u4ee3\u7801\u63a7\u5236\u6743\u5265\u79bb\u5230 ",(0,a.kt)("inlineCode",{parentName:"p"},"IOC \u5bb9\u5668")," \u4e2d\u63a7\u5236\u3002"),(0,a.kt)("p",null,"\u63a7\u5236\u53cd\u8f6c\u7684\u82f1\u6587\u4e3a\uff1a",(0,a.kt)("inlineCode",{parentName:"p"},"Inversion of Control"),"\uff0c\u7b80\u79f0 ",(0,a.kt)("inlineCode",{parentName:"p"},"IOC")),(0,a.kt)("h2",{id:"123-iocdi-\u4f18\u7f3a\u70b9"},"12.3 ",(0,a.kt)("inlineCode",{parentName:"h2"},"IOC/DI")," \u4f18\u7f3a\u70b9"),(0,a.kt)("p",null,"\u4f20\u7edf\u7684\u4ee3\u7801\uff0c\u6bcf\u4e2a\u5bf9\u8c61\u8d1f\u8d23\u7ba1\u7406\u4e0e\u81ea\u5df1\u9700\u8981\u4f9d\u8d56\u7684\u5bf9\u8c61\uff0c\u5bfc\u81f4\u5982\u679c\u9700\u8981\u5207\u6362\u4f9d\u8d56\u5bf9\u8c61\u7684\u5b9e\u73b0\u7c7b\u65f6\uff0c\u9700\u8981\u4fee\u6539\u591a\u5904\u5730\u65b9\u3002\u540c\u65f6\uff0c\u8fc7\u5ea6\u8026\u5408\u4e5f\u4f7f\u5f97\u5bf9\u8c61\u96be\u4ee5\u8fdb\u884c\u5355\u5143\u6d4b\u8bd5\u3002"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u4f18\u70b9"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u4f9d\u8d56\u6ce8\u5165\u628a\u5bf9\u8c61\u7684\u521b\u9020\u4ea4\u7ed9\u5916\u90e8\u53bb\u7ba1\u7406,\u5f88\u597d\u7684\u89e3\u51b3\u4e86\u4ee3\u7801\u7d27\u8026\u5408\uff08tight couple\uff09\u7684\u95ee\u9898\uff0c\u662f\u4e00\u79cd\u8ba9\u4ee3\u7801\u5b9e\u73b0\u677e\u8026\u5408\uff08loose couple\uff09\u7684\u673a\u5236"),(0,a.kt)("li",{parentName:"ul"},"\u677e\u8026\u5408\u8ba9\u4ee3\u7801\u66f4\u5177\u7075\u6d3b\u6027\uff0c\u80fd\u66f4\u597d\u5730\u5e94\u5bf9\u9700\u6c42\u53d8\u52a8\uff0c\u4ee5\u53ca\u65b9\u4fbf\u5355\u5143\u6d4b\u8bd5"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u7f3a\u70b9"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u76ee\u524d\u4e3b\u6d41\u7684 ",(0,a.kt)("inlineCode",{parentName:"li"},"IOC/DI")," \u57fa\u672c\u91c7\u7528\u53cd\u5c04\u7684\u65b9\u5f0f\u6765\u5b9e\u73b0\u4f9d\u8d56\u6ce8\u5165\uff0c\u5728\u4e00\u5b9a\u7a0b\u5ea6\u4f1a\u5f71\u54cd\u6027\u80fd")))),(0,a.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u5728\u672c\u7ae0\u8282\u4e0d\u6253\u7b97\u7ec6\u8bb2 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u4f9d\u8d56\u6ce8\u5165/\u63a7\u5236\u53cd\u8f6c")," \u5177\u4f53\u5b9e\u73b0\u548c\u5e94\u7528\u573a\u666f\uff0c\u60f3\u4e86\u89e3\u66f4\u591a\u77e5\u8bc6\uff0c\u53ef\u67e5\u9605 \u3010",(0,a.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-5.0"},"ASP.NET Core \u4f9d\u8d56\u6ce8\u5165"),"\u3011 \u5b98\u65b9\u6587\u6863\u3002")),(0,a.kt)("h2",{id:"124-\u4f9d\u8d56\u6ce8\u5165\u7684\u4e09\u79cd\u65b9\u5f0f"},"12.4 \u4f9d\u8d56\u6ce8\u5165\u7684\u4e09\u79cd\u65b9\u5f0f"),(0,a.kt)("h3",{id:"1241-\u6784\u9020\u65b9\u6cd5\u6ce8\u5165"},"12.4.1 \u6784\u9020\u65b9\u6cd5\u6ce8\u5165"),(0,a.kt)("p",null,"\u76ee\u524d\u6784\u9020\u65b9\u6cd5\u6ce8\u5165\u662f\u4f9d\u8d56\u6ce8\u5165\u63a8\u8350\u4f7f\u7528\u65b9\u5f0f\u3002"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u4f18\u70b9"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u5728\u6784\u9020\u65b9\u6cd5\u4e2d\u4f53\u73b0\u51fa\u5bf9\u5176\u4ed6\u7c7b\u7684\u4f9d\u8d56\uff0c\u4e00\u773c\u5c31\u80fd\u770b\u51fa\u8fd9\u4e2a\u7c7b\u9700\u8981\u4f9d\u8d56\u54ea\u4e9b\u7c7b\u624d\u80fd\u5de5\u4f5c"),(0,a.kt)("li",{parentName:"ul"},"\u8131\u79bb\u4e86 IOC \u6846\u67b6\uff0c\u8fd9\u4e2a\u7c7b\u4ecd\u7136\u53ef\u4ee5\u5de5\u4f5c\uff0cPOJO \u7684\u6982\u5ff5"),(0,a.kt)("li",{parentName:"ul"},"\u4e00\u65e6\u5bf9\u8c61\u521d\u59cb\u5316\u6210\u529f\u4e86\uff0c\u8fd9\u4e2a\u5bf9\u8c61\u7684\u72b6\u6001\u80af\u5b9a\u662f\u6b63\u786e\u7684"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u7f3a\u70b9"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u6784\u9020\u51fd\u6570\u4f1a\u6709\u5f88\u591a\u53c2\u6570\uff08Bad smell\uff09"),(0,a.kt)("li",{parentName:"ul"},"\u6709\u4e9b\u7c7b\u662f\u9700\u8981\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\u7684\uff0c\u6bd4\u5982 MVC \u6846\u67b6\u7684 Controller \u7c7b\uff0c\u4e00\u65e6\u4f7f\u7528\u6784\u9020\u51fd\u6570\u6ce8\u5165\uff0c\u5c31\u65e0\u6cd5\u4f7f\u7528\u9ed8\u8ba4\u6784\u9020\u51fd\u6570"),(0,a.kt)("li",{parentName:"ul"},"\u8fd9\u4e2a\u7c7b\u91cc\u9762\u7684\u6709\u4e9b\u65b9\u6cd5\u5e76\u4e0d\u9700\u8981\u7528\u5230\u8fd9\u4e9b\u4f9d\u8d56\uff08Bad smell\uff09")))),(0,a.kt)("p",null,"\u4ee3\u7801\u793a\u4f8b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},"public class FurionService\n{\n private readonly IRepository _repository;\n public FurionService(IRepository repository)\n {\n _repository = repository;\n }\n}\n")),(0,a.kt)("h3",{id:"1242-\u5c5e\u6027\u65b9\u5f0f\u6ce8\u5165"},"12.4.2 \u5c5e\u6027\u65b9\u5f0f\u6ce8\u5165"),(0,a.kt)("admonition",{title:"\u7279\u522b\u58f0\u660e",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u65b0\u7248\u672c\u4e2d\uff0c\u5df2\u7ecf\u79fb\u9664\u5c5e\u6027\u6ce8\u5165\u529f\u80fd\uff0c\u5efa\u8bae\u4f7f\u7528\u6784\u9020\u51fd\u6570\u6216\u65b9\u6cd5\u65b9\u5f0f\u6ce8\u5165\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"App.GetService")," \u65b9\u5f0f\u6ce8\u5165\u3002")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u901a\u8fc7\u5c5e\u6027\u65b9\u5f0f\u6ce8\u5165\u5bb9\u6613\u548c\u7c7b\u7684\u5b9e\u4f8b\u5c5e\u6027\u6df7\u6dc6\uff0c\u4e0d\u5efa\u8bae\u4f7f\u7528\u3002")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u4f18\u70b9"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u5728\u5bf9\u8c61\u7684\u6574\u4e2a\u751f\u547d\u5468\u671f\u5185\uff0c\u53ef\u4ee5\u968f\u65f6\u52a8\u6001\u7684\u6539\u53d8\u4f9d\u8d56"),(0,a.kt)("li",{parentName:"ul"},"\u975e\u5e38\u7075\u6d3b"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u7f3a\u70b9"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u5bf9\u8c61\u5728\u521b\u5efa\u540e\uff0c\u88ab\u8bbe\u7f6e\u4f9d\u8d56\u5bf9\u8c61\u4e4b\u524d\u8fd9\u6bb5\u65f6\u95f4\u72b6\u6001\u662f\u4e0d\u5bf9\u7684"),(0,a.kt)("li",{parentName:"ul"},"\u4e0d\u76f4\u89c2\uff0c\u65e0\u6cd5\u6e05\u6670\u5730\u8868\u793a\u54ea\u4e9b\u5c5e\u6027\u662f\u5fc5\u987b\u7684")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},"public class FurionService\n{\n public IRepository Repository { get; set; }\n}\n")),(0,a.kt)("h3",{id:"1243-\u65b9\u6cd5\u53c2\u6570\u6ce8\u5165"},"12.4.3 \u65b9\u6cd5\u53c2\u6570\u6ce8\u5165"),(0,a.kt)("p",null,"\u65b9\u6cd5\u53c2\u6570\u6ce8\u5165\u7684\u610f\u601d\u662f\u5728\u521b\u5efa\u5bf9\u8c61\u540e\uff0c\u901a\u8fc7\u81ea\u52a8\u8c03\u7528\u67d0\u4e2a\u65b9\u6cd5\u6765\u6ce8\u5165\u4f9d\u8d56\u3002"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u4f18\u70b9\uff1a"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u6bd4\u8f83\u7075\u6d3b"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u7f3a\u70b9\uff1a"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"\u65b0\u52a0\u5165\u4f9d\u8d56\u65f6\u4f1a\u7834\u574f\u539f\u6709\u7684\u65b9\u6cd5\u7b7e\u540d\uff0c\u5982\u679c\u8fd9\u4e2a\u65b9\u6cd5\u5df2\u7ecf\u88ab\u5176\u4ed6\u5f88\u591a\u6a21\u5757\u7528\u5230\u5c31\u5f88\u9ebb\u70e6"),(0,a.kt)("li",{parentName:"ul"},"\u4e0e\u6784\u9020\u65b9\u6cd5\u6ce8\u5165\u4e00\u6837\uff0c\u4f1a\u6709\u5f88\u591a\u53c2\u6570")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},"public class FurionService\n{\n public Person GetById([FromServices]IRepository repository, int id)\n {\n return repository.Find(id);\n }\n}\n")),(0,a.kt)("h2",{id:"125-\u6ce8\u518c\u5bf9\u8c61\u751f\u5b58\u671f"},"12.5 \u6ce8\u518c\u5bf9\u8c61\u751f\u5b58\u671f"),(0,a.kt)("h3",{id:"1251-\u6682\u65f6\u77ac\u65f6-\u751f\u5b58\u671f"},"12.5.1 ",(0,a.kt)("inlineCode",{parentName:"h3"},"\u6682\u65f6/\u77ac\u65f6")," \u751f\u5b58\u671f"),(0,a.kt)("p",null,"\u6682\u65f6\u751f\u5b58\u671f\u670d\u52a1\u662f\u6bcf\u6b21\u4ece\u670d\u52a1\u5bb9\u5668\u8fdb\u884c\u8bf7\u6c42\u65f6\u521b\u5efa\u7684\u3002 \u8fd9\u79cd\u751f\u5b58\u671f\u9002\u5408\u8f7b\u91cf\u7ea7\u3001 \u65e0\u72b6\u6001\u7684\u670d\u52a1\u3002"),(0,a.kt)("p",null,"\u5728\u5904\u7406\u8bf7\u6c42\u7684\u5e94\u7528\u4e2d\uff0c\u5728\u8bf7\u6c42\u7ed3\u675f\u65f6\u4f1a\u91ca\u653e\u6682\u65f6\u670d\u52a1\u3002"),(0,a.kt)("p",null,"\u901a\u5e38\u6211\u4eec\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"ITransient")," \u63a5\u53e3\u4f9d\u8d56\u8868\u793a\u8be5\u751f\u547d\u5468\u671f\u3002"),(0,a.kt)("h3",{id:"1252-\u4f5c\u7528\u57df-\u751f\u5b58\u671f"},"12.5.2 ",(0,a.kt)("inlineCode",{parentName:"h3"},"\u4f5c\u7528\u57df")," \u751f\u5b58\u671f"),(0,a.kt)("p",null,"\u4f5c\u7528\u57df\u751f\u5b58\u671f\u670d\u52a1\u9488\u5bf9\u6bcf\u4e2a\u5ba2\u6237\u7aef\u8bf7\u6c42\uff08\u8fde\u63a5\uff09\u521b\u5efa\u4e00\u6b21\u3002\u5728\u5904\u7406\u8bf7\u6c42\u7684\u5e94\u7528\u4e2d\uff0c\u5728\u8bf7\u6c42\u7ed3\u675f\u65f6\u4f1a\u91ca\u653e\u6709\u4f5c\u7528\u57df\u7684\u670d\u52a1\u3002"),(0,a.kt)("p",null,"\u901a\u5e38\u6211\u4eec\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"IScoped")," \u63a5\u53e3\u4f9d\u8d56\u8868\u793a\u8be5\u751f\u547d\u5468\u671f\u3002"),(0,a.kt)("h3",{id:"1253-\u5355\u4f8b-\u751f\u5b58\u671f"},"12.5.3 ",(0,a.kt)("inlineCode",{parentName:"h3"},"\u5355\u4f8b")," \u751f\u5b58\u671f"),(0,a.kt)("p",null,"\u5728\u9996\u6b21\u8bf7\u6c42\u5b83\u4eec\u65f6\u8fdb\u884c\u521b\u5efa\uff0c\u4e4b\u540e\u6bcf\u4e2a\u540e\u7eed\u8bf7\u6c42\u90fd\u4f7f\u7528\u76f8\u540c\u7684\u5b9e\u4f8b\u3002"),(0,a.kt)("p",null,"\u901a\u5e38\u6211\u4eec\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"ISingleton")," \u63a5\u53e3\u4f9d\u8d56\u8868\u793a\u8be5\u751f\u547d\u5468\u671f\u3002"),(0,a.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,a.kt)("inlineCode",{parentName:"p"},"\u670d\u52a1\u751f\u5b58\u671f")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,a.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-5.0#service-lifetimes"},"ASP.NET Core - \u4f9d\u8d56\u6ce8\u5165 - \u670d\u52a1\u751f\u5b58\u671f")," \u7ae0\u8282\u3002")),(0,a.kt)("h2",{id:"126-\u5185\u7f6e\u4f9d\u8d56\u63a5\u53e3"},"12.6 \u5185\u7f6e\u4f9d\u8d56\u63a5\u53e3"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e09\u4e2a\u63a5\u53e3\u4f9d\u8d56\u5206\u522b\u5bf9\u5e94\u4e0d\u540c\u7684\u670d\u52a1\u751f\u5b58\u671f\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ITransient"),"\uff1a\u5bf9\u5e94\u6682\u65f6/\u77ac\u65f6\u4f5c\u7528\u57df\u670d\u52a1\u751f\u5b58\u671f"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IScoped"),"\uff1a\u5bf9\u5e94\u8bf7\u6c42\u4f5c\u7528\u57df\u670d\u52a1\u751f\u5b58\u671f"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ISingleton"),"\uff1a\u5bf9\u5e94\u5355\u4f8b\u4f5c\u7528\u57df\u670d\u52a1\u751f\u5b58\u671f")),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0a\u4e09\u4e2a\u63a5\u53e3\u53ea\u80fd\u5b9e\u4f8b\u7c7b\u5b9e\u73b0\uff0c\u5176\u4ed6\u9759\u6001\u7c7b\u3001\u62bd\u8c61\u7c7b\u3001\u53ca\u63a5\u53e3\u4e0d\u80fd\u5b9e\u73b0\u3002")),(0,a.kt)("h2",{id:"127-\u5e38\u89c1\u4f7f\u7528"},"12.7 \u5e38\u89c1\u4f7f\u7528"),(0,a.kt)("h3",{id:"1271-\u7b2c\u4e00\u4e2a\u4f8b\u5b50"},"12.7.1 \u7b2c\u4e00\u4e2a\u4f8b\u5b50"),(0,a.kt)("p",null,"\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"IBusinessService")," \u63a5\u53e3\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"BusinessService")," \u5b9e\u73b0\u7c7b\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,12}",showLineNumbers:!0,"":!0,"{7,12}":!0},"using Furion.Core;\nusing Furion.DatabaseAccessor;\nusing Furion.DependencyInjection;\n\nnamespace Furion.Application\n{\n public interface IBusinessService\n {\n Person Get(int id);\n }\n\n public class BusinessService : IBusinessService, ITransient\n {\n private readonly IRepository _personRepository;\n\n public BusinessService(IRepository personRepository)\n {\n _personRepository = personRepository;\n }\n\n public Person Get(int id)\n {\n return _personRepository.Find(id);\n }\n }\n}\n")),(0,a.kt)("p",null,"\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"PersonController")," \u63a7\u5236\u5668\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11,19}",showLineNumbers:!0,"":!0,"{11,19}":!0},'using Furion.Application;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Web.Entry.Controllers\n{\n [Route("api/[controller]")]\n [ApiController]\n public class PersonController : ControllerBase\n {\n private readonly IBusinessService _businessService;\n public PersonController(IBusinessService businessService)\n {\n _businessService = businessService;\n }\n\n [HttpGet]\n public IActionResult Get(int id)\n {\n var person = _businessService.Get(id);\n return new JsonResult(person);\n }\n }\n}\n')),(0,a.kt)("img",{src:(0,l.Z)("img/di1.gif")}),(0,a.kt)("hr",null),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f8b\u5b50\u89e3\u8bf4")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u975e\u5e38\u7075\u6d3b\u4e14\u65b9\u4fbf\u7684\u5b9e\u73b0\u4f9d\u8d56\u6ce8\u5165\u7684\u65b9\u5f0f\uff0c\u53ea\u9700\u8981\u5b9e\u4f8b\u7c7b\u7ee7\u627f\u5bf9\u5e94\u751f\u5b58\u671f\u7684\u63a5\u53e3\u5373\u53ef\uff0c\u8fd9\u91cc\u7ee7\u627f\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"ITransient"),"\uff0c\u4e5f\u5c31\u8868\u660e\u4e86\u8fd9\u662f\u4e00\u4e2a ",(0,a.kt)("inlineCode",{parentName:"p"},"\u6682\u65f6/\u77ac\u65f6")," \u4f5c\u7528\u57df\u5b9e\u4f8b\u7c7b\u3002\u8be5\u7c7b\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u88ab\u6ce8\u5165\u5bf9\u8c61\uff0c\u540c\u65f6\u4e5f\u80fd\u6ce8\u5165\u5176\u4ed6\u63a5\u53e3\u5bf9\u8c61\u3002"),(0,a.kt)("p",null,"\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"BusinessService")," \u6ce8\u5165\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"IRepository")," \u4ed3\u50a8\u63a5\u53e3\uff0c\u540c\u65f6 ",(0,a.kt)("inlineCode",{parentName:"p"},"PersonController")," \u63a7\u5236\u5668\u6ce8\u5165\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"IBusinessService")," \u63a5\u53e3\u3002"),(0,a.kt)("p",null,"\u8fd9\u6837 ",(0,a.kt)("inlineCode",{parentName:"p"},"PersonController")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"BusinessService")," \u4e4b\u95f4\u5c31\u5b9e\u73b0\u4e86\u89e3\u8026\uff0c\u4e0d\u518d\u4f9d\u8d56\u4e8e\u5177\u4f53\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"BusinessService")," \u5b9e\u4f8b\u3002"),(0,a.kt)("p",null,"\u8fd9\u5c31\u662f\u4f9d\u8d56\u6ce8\u5165/\u63a7\u5236\u53cd\u8f6c\u6700\u7ecf\u5178\u7684\u4f8b\u5b50\u3002"),(0,a.kt)("h3",{id:"1272-\u6ce8\u518c\u6cdb\u578b\u5b9e\u4f8b"},"12.7.2 \u6ce8\u518c\u6cdb\u578b\u5b9e\u4f8b"),(0,a.kt)("p",null,"\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"IBusinessService")," \u63a5\u53e3\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"BusinessService")," \u5b9e\u73b0\u7c7b\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,12}",showLineNumbers:!0,"":!0,"{7,12}":!0},"using Furion.Core;\nusing Furion.DatabaseAccessor;\nusing Furion.DependencyInjection;\n\nnamespace Furion.Application\n{\n public interface IBusinessService\n {\n Person Get(int id);\n }\n\n public class BusinessService : IBusinessService, ITransient\n {\n private readonly IRepository _personRepository;\n\n public BusinessService(IRepository personRepository)\n {\n _personRepository = personRepository;\n }\n\n public Person Get(int id)\n {\n return _personRepository.Find(id);\n }\n }\n}\n")),(0,a.kt)("p",null,"\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"PersonController")," \u63a7\u5236\u5668\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11,19}",showLineNumbers:!0,"":!0,"{11,19}":!0},'using Furion.Application;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Web.Entry.Controllers\n{\n [Route("api/[controller]")]\n [ApiController]\n public class PersonController : ControllerBase\n {\n private readonly IBusinessService _businessService;\n public PersonController(IBusinessService businessService)\n {\n _businessService = businessService;\n }\n\n [HttpGet]\n public IActionResult Get(int id)\n {\n var person = _businessService.Get(id);\n return new JsonResult(person);\n }\n }\n}\n')),(0,a.kt)("h3",{id:"1273-\u4e00\u4e2a\u63a5\u53e3\u591a\u4e2a\u5b9e\u73b0"},"12.7.3 \u4e00\u4e2a\u63a5\u53e3\u591a\u4e2a\u5b9e\u73b0"),(0,a.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4e00\u4e2a\u63a5\u53e3\u53ea\u5bf9\u5e94\u4e00\u4e2a\u5b9e\u73b0\u7c7b\uff0c\u4f46\u6709\u4e9b\u7279\u6b8a\u60c5\u51b5\uff0c\u9700\u8981\u591a\u4e2a\u5b9e\u73b0\u7c7b\u6ce8\u518c\u540c\u4e00\u4e2a\u63a5\u53e3\uff0c\u5982 ",(0,a.kt)("inlineCode",{parentName:"p"},"DbContext")," \u591a\u6570\u636e\u5e93\u60c5\u51b5\u3002"),(0,a.kt)("p",null,"\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4f9d\u8d56\u6ce8\u5165 ",(0,a.kt)("inlineCode",{parentName:"p"},"Func")," \u59d4\u6258\u6765\u89e3\u6790\u591a\u4e2a\u5b9e\u4f8b\uff0c\u5176\u4e2d\u59d4\u6258\u7684\u53c2\u6570\u5206\u522b\u4e3a\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u53c2\u6570 1\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff0c\u4e0d\u540c\u5b9e\u73b0\u7c7b\u552f\u4e00\u6807\u8bc6\uff0c\u9ed8\u8ba4\u4e3a ",(0,a.kt)("inlineCode",{parentName:"li"},"nameof(\u5b9e\u73b0\u7c7b)")," \u540d\u79f0"),(0,a.kt)("li",{parentName:"ul"},"\u53c2\u6570 2\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Type")," \u7c7b\u578b\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"IPrivateDependency")," \u6d3e\u751f\u63a5\u53e3\uff0c\u4e5f\u5c31\u662f ",(0,a.kt)("inlineCode",{parentName:"li"},"ITransient"),"\u3001",(0,a.kt)("inlineCode",{parentName:"li"},"IScoped"),"\u3001",(0,a.kt)("inlineCode",{parentName:"li"},"ISingleton")),(0,a.kt)("li",{parentName:"ul"},"\u8fd4\u56de\u503c\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"object")," \u7c7b\u578b\uff0c\u8fd4\u56de\u5177\u4f53\u7684\u5b9e\u73b0\u7c7b\u5b9e\u4f8b")),(0,a.kt)("p",null,"\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"IBusinessService")," \u63a5\u53e3\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"BusinessService"),"\u3001",(0,a.kt)("inlineCode",{parentName:"p"},"OtherBusinessService")," \u4e24\u4e2a\u5b9e\u73b0\u7c7b\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,10,18}",showLineNumbers:!0,"":!0,"{5,10,18}":!0},'using Furion.DependencyInjection;\n\nnamespace Furion.Application\n{\n public interface IBusinessService\n {\n string GetName();\n }\n\n public class BusinessService : IBusinessService, ITransient\n {\n public string GetName()\n {\n return "\u6211\u662f\uff1a" + nameof(BusinessService);\n }\n }\n\n public class OtherBusinessService : IBusinessService, ITransient\n {\n public string GetName()\n {\n return "\u6211\u662f\uff1a" + nameof(OtherBusinessService);\n }\n }\n}\n')),(0,a.kt)("admonition",{title:"\u65b0\u7248\u672c\uff0c\u63a8\u8350\u4f7f\u7528",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion 3.8.6+")," \u7248\u672c\u4e4b\u540e\u65b0\u589e\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"INamedServiceProvider")," \u670d\u52a1\u63a5\u53e3\uff0c\u53ef\u66ff\u4ee3 ",(0,a.kt)("inlineCode",{parentName:"p"},"Func")," \u65b9\u5f0f\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8,15-17,19-23}",showLineNumbers:!0,"{8,15-17,19-23}":!0},'using Furion.Application.Services;\n\nnamespace Furion.Application;\n\npublic class TestNamedServices : IDynamicApiController\n{\n private readonly INamedServiceProvider _namedServiceProvider;\n public TestNamedServices(INamedServiceProvider namedServiceProvider)\n {\n _namedServiceProvider = namedServiceProvider;\n }\n\n public string GetName()\n {\n // \u7b2c\u4e00\u79cd\u7528\u6cd5\uff0c\u901a\u8fc7\u53cd\u5c04\u89e3\u6790\u670d\u52a1\u5468\u671f\uff0c\u6027\u80fd\u6709\u635f\u8017\n var service1 = _namedServiceProvider.GetService(nameof(BusinessService));\n var service2 = _namedServiceProvider.GetService(nameof(OtherBusinessService));\n\n // \u7b2c\u4e8c\u79cd\u7528\u6cd5\uff0c\u65e0\u9700\u53cd\u5c04\uff0c\u6ce8\u610f\u4e0b\u9762\u7684\u6cdb\u578b\u53c2\u6570\u4f20\u5165\u7684\u662f\u751f\u547d\u5468\u671f\u4f9d\u8d56\u63a5\u53e3\uff0cITransient, IScoped, ISingleton\n var service3 = _namedServiceProvider.GetService(nameof(BusinessService));\n var service4 = _namedServiceProvider.GetService(nameof(OtherBusinessService));\n\n return service1.GetName() + "-" + service2.GetName() + "-" + service3.GetName() + "-" + service4.GetName();\n }\n}\n'))),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u4e0d\u518d\u63a8\u8350 ",(0,a.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Func")," \u65b9\u5f0f"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {15,17,18}",showLineNumbers:!0,"":!0,"{15,17,18}":!0},'using Furion.Application;\nusing Furion.DependencyInjection;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\n\nnamespace Furion.Web.Entry.Controllers\n{\n [Route("api/[controller]")]\n [ApiController]\n public class ValueController : ControllerBase\n {\n private readonly IBusinessService _businessService;\n private readonly IBusinessService _otherBusinessService;\n\n public ValueController(Func resolveNamed)\n {\n _businessService = resolveNamed("BusinessService", default) as IBusinessService;\n _otherBusinessService = resolveNamed("OtherBusinessService", default) as IBusinessService;\n }\n\n [HttpGet]\n public string GetName()\n {\n return _businessService.GetName() + "----------" + _otherBusinessService.GetName();\n }\n }\n}\n'))),(0,a.kt)("img",{src:(0,l.Z)("img/di2.gif")}),(0,a.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c\u9700\u8981\u81ea\u5b9a\u4e49\u89e3\u6790\u540d\u79f0\uff0c\u53ea\u9700\u8981\u8d34 ",(0,a.kt)("inlineCode",{parentName:"p"},'[Injection(Named = "\u540d\u79f0")]')," \u5373\u53ef\uff0c\u5982\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,11}",showLineNumbers:!0,"":!0,"{5,11}":!0},'using Furion.DependencyInjection;\n\nnamespace Furion.Application\n{\n [Injection(Named = "BusName1")]\n public class BusinessService : IBusinessService, ITransient\n {\n // ...\n }\n\n [Injection(Named = "BusName2")]\n public class OtherBusinessService : IBusinessService, ITransient\n {\n // ...\n }\n}\n')),(0,a.kt)("p",{parentName:"admonition"},"\u89e3\u6790\u670d\u52a1\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'_businessService = resolveNamed("BusName1", default) as IBusinessService;\n_otherBusinessService = resolveNamed("BusName2", default) as IBusinessService;\n'))),(0,a.kt)("h3",{id:"1274-\u65e0\u63a5\u53e3\u65b9\u5f0f"},"12.7.4 \u65e0\u63a5\u53e3\u65b9\u5f0f"),(0,a.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\uff0c\u6211\u4eec\u4e0d\u60f3\u5b9a\u4e49\u63a5\u53e3\uff0c\u800c\u662f\u60f3\u628a\u5b9e\u4f8b\u7c7b\u4f5c\u4e3a\u53ef\u4f9d\u8d56\u6ce8\u5165\u7684\u5bf9\u8c61\uff0c\u5982 MVC \u4e2d\u7684\u63a7\u5236\u5668\u3002"),(0,a.kt)("p",null,"\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"SelfService")," \u5b9e\u4f8b\u7c7b\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,11}",showLineNumbers:!0,"":!0,"{7,11}":!0},"using Furion.Core;\nusing Furion.DatabaseAccessor;\nusing Furion.DependencyInjection;\n\nnamespace Furion.Application\n{\n public class SelfService : ITransient\n {\n private readonly IRepository _personRepository;\n\n public SelfService(IRepository personRepository)\n {\n _personRepository = personRepository;\n }\n\n public Person Get(int id)\n {\n return _personRepository.Find(id);\n }\n }\n}\n")),(0,a.kt)("p",null,"\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"ValueController")," \u63a7\u5236\u5668\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13,21}",showLineNumbers:!0,"":!0,"{13,21}":!0},'using Furion.Application;\nusing Furion.Core;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Web.Entry.Controllers\n{\n [Route("api/[controller]")]\n [ApiController]\n public class ValueController : ControllerBase\n {\n private readonly SelfService _selfService;\n\n public ValueController(SelfService selfService)\n {\n _selfService = selfService;\n }\n\n [HttpGet]\n public Person Get(int id)\n {\n return _selfService.Get(id);\n }\n }\n}\n')),(0,a.kt)("h2",{id:"128-injection-\u7279\u6027\u914d\u7f6e"},"12.8 ",(0,a.kt)("inlineCode",{parentName:"h2"},"[Injection]")," \u7279\u6027\u914d\u7f6e"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b ",(0,a.kt)("inlineCode",{parentName:"p"},"[Injection]")," \u7279\u6027\u53ef\u4ee5\u6539\u53d8\u6ce8\u518c\u65b9\u5f0f\uff0c\u540c\u65f6\u8fd8\u80fd\u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"p"},"AOP")," \u62e6\u622a\u3002"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"[Injection]")," \u63d0\u4f9b\u4ee5\u4e0b\u914d\u7f6e\u652f\u6301\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Action"),"\uff1a\u914d\u7f6e\u6ce8\u518c\u884c\u4e3a\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"InjectionActions")," \u7c7b\u578b\uff0c\u53ef\u9009\u503c\uff1a",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Add"),"\uff1a",(0,a.kt)("strong",{parentName:"li"},"\u9ed8\u8ba4\u503c"),"\uff0c\u8868\u793a\u65e0\u9650\u5236\u6dfb\u52a0\u6ce8\u518c\u670d\u52a1\uff0c\u8be5\u65b9\u5f0f\u652f\u6301\u4e00\u4e2a\u63a5\u53e3\u591a\u4e2a\u5b9e\u73b0"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"TryAdd"),"\uff1a\u8868\u793a\u6ce8\u518c\u5df2\u5b58\u5728\u5219\u8df3\u8fc7\u6ce8\u518c"))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Pattern"),"\uff1a\u914d\u7f6e\u6ce8\u518c\u9009\u9879\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"InjectionPatterns")," \u7c7b\u578b\uff0c\u53ef\u9009\u503c\uff1a",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Self"),"\uff1a\u53ea\u6ce8\u518c\u81ea\u5df1"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"FirstInterface"),"\uff1a\u53ea\u6ce8\u518c\u7b2c\u4e00\u4e2a\u63a5\u53e3"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"SelfWithFirstInterface"),"\uff1a\u6ce8\u518c\u81ea\u5df1\u548c\u7b2c\u4e00\u4e2a\u63a5\u53e3"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ImplementedInterfaces"),"\uff1a\u6ce8\u518c\u6240\u6709\u63a5\u53e3"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"All"),"\uff1a\u6ce8\u518c\u81ea\u5df1\u5305\u62ec\u6240\u6709\u63a5\u53e3 \uff0c",(0,a.kt)("strong",{parentName:"li"},"\u9ed8\u8ba4\u503c")))),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Named"),"\uff1a\u914d\u7f6e\u5b9e\u4f8b\u522b\u540d\uff0c\u901a\u8fc7\u522b\u540d\u53ef\u4ee5\u89e3\u6790\u63a5\u53e3\uff0c\u5982\u540c\u4e00\u4e2a\u63a5\u53e3\u6709\u591a\u4e2a\u5b9e\u73b0\uff0c\u90a3\u4e48\u53ef\u4ee5\u901a\u8fc7\u522b\u540d\u89e3\u6790\u4e0d\u540c\u7684\u5b9e\u73b0\uff0c\u9ed8\u8ba4\u53ea\u4e3a\u5b9e\u73b0\u7c7b\u7684\u7c7b\u540d"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Order"),"\uff1a\u6ce8\u518c\u6392\u5e8f\uff0c\u6570\u5b57\u8d8a\u5927\uff0c\u5219\u8d8a\u5728\u6700\u540e\u6ce8\u518c\uff0c\u9ed8\u8ba4 ",(0,a.kt)("inlineCode",{parentName:"li"},"0")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Proxy"),"\uff1a\u914d\u7f6e\u4ee3\u7406\u62e6\u622a\u7c7b\u578b\uff0c\u4e5f\u5c31\u662f ",(0,a.kt)("inlineCode",{parentName:"li"},"AOP"),"\uff0c",(0,a.kt)("strong",{parentName:"li"},"\u4ee3\u7406\u7c7b\u578b\u5fc5\u987b\u7ee7\u627f ",(0,a.kt)("inlineCode",{parentName:"strong"},"AspectDispatchProxy")," \u7c7b\u548c ",(0,a.kt)("inlineCode",{parentName:"strong"},"IDispatchProxy")," \u63a5\u53e3"),"\uff0c\u65e0\u9ed8\u8ba4\u503c"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ExpectInterfaces"),"\uff1a\u914d\u7f6e\u5ffd\u7565\u6ce8\u518c\u7684\u63a5\u53e3\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"Type[]")," \u7c7b\u578b")),(0,a.kt)("h2",{id:"129-\u81ea\u5b9a\u4e49\u9ad8\u7ea7\u6ce8\u518c"},"12.9 \u81ea\u5b9a\u4e49\u9ad8\u7ea7\u6ce8\u518c"),(0,a.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u7684\u6ce8\u518c\u65b9\u5f0f\u53ef\u4ee5\u6ee1\u8db3\u5927\u591a\u6570\u4f9d\u8d56\u6ce8\u5165\u7684\u9700\u6c42\uff0c\u5982\u6709\u7279\u522b\u6ce8\u518c\u9700\u6c42\uff0c\u53ea\u9700\u8981\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup")," \u4e2d\u914d\u7f6e\u5373\u53ef\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddScoped(typeof(ISpecService), provider = > {\n // \u81ea\u5b9a\u4e49\u4efb\u4f55\u521b\u5efa\u5b9e\u4f8b\u7684\u65b9\u5f0f\n var instance = new SpecService(); // \u6216\u8005\u53ef\u4ee5\u901a\u8fc7 AOP\u63d2\u4ef6\u8fd4\u56de\u4ee3\u7406\u5b9e\u4f8b\n\n return instance;\n});\n")),(0,a.kt)("admonition",{title:"\u8865\u5145\u8bf4\u660e",type:"note"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"AppDbContext")," \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u8fd8\u6709 ",(0,a.kt)("inlineCode",{parentName:"p"},"ISqlDispatchProxy")," \u90fd\u662f\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\u521b\u5efa\u7684\u3002")),(0,a.kt)("admonition",{title:"\u77e5\u8bc6\u5bfc\u822a",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a\u81ea\u5b9a\u4e49\u9ad8\u7ea7\u4e2d\u6ce8\u518c\uff0c\u53ef\u67e5\u9605 \u3010",(0,a.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-5.0"},"ASP.NET Core \u4f9d\u8d56\u6ce8\u5165"),"\u3011 \u5b98\u65b9\u6587\u6863\u3002")),(0,a.kt)("h2",{id:"1210-appsettingsjson-\u914d\u7f6e\u6ce8\u518c"},"12.10 ",(0,a.kt)("inlineCode",{parentName:"h2"},"appsettings.json")," \u914d\u7f6e\u6ce8\u518c"),(0,a.kt)("p",null,"\u9664\u4e86\u5728\u4ee3\u7801\u4e2d\u5b9e\u73b0\u4f9d\u8d56\u6ce8\u5165\uff0c\u4e5f\u53ef\u4ee5\u5b9e\u73b0\u52a8\u6001\u4f9d\u8d56\u6ce8\u5165\uff0c\u65e0\u9700\u4fee\u6539\u4ee3\u7801\u6216\u91cd\u65b0\u7f16\u8bd1\u5373\u53ef\u5b9e\u73b0\u70ed\u63d2\u62d4\uff08\u63d2\u4ef6\uff09\u6548\u679c\u3002\u914d\u7f6e\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2}",showLineNumbers:!0,"":!0,"{2}":!0},'{\n "DependencyInjectionSettings": {\n "Definitions": [\n {\n "Interface": "Furion.Application;Furion.Application.ITestService",\n "Service": "Furion.Application;Furion.Application.TestService",\n "RegisterType": "Transient",\n "Action": "Add",\n "Pattern": "SelfWithFirstInterface",\n "Named": "TestService",\n "Order": 1,\n "Proxy": "Furion.Application;Furion.Application.LogDispathProxy"\n }\n ]\n }\n}\n')),(0,a.kt)("p",null,"\u914d\u7f6e\u8bf4\u660e\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"DependencyInjectionSettings"),"\uff1a\u4f9d\u8d56\u6ce8\u5165\u914d\u7f6e\u6839\u8282\u70b9",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Definitions"),"\uff1a\u52a8\u6001\u4f9d\u8d56\u6ce8\u5165\u914d\u7f6e\u8282\u70b9\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"ExternalService")," \u6570\u7ec4\u7c7b\u578b",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"ExternalService"),"\uff1a\u914d\u7f6e\u5355\u4e2a\u4f9d\u8d56\u6ce8\u5165\u4fe1\u606f",(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Interface"),"\uff1a\u914d\u7f6e\u4f9d\u8d56\u63a5\u53e3\u4fe1\u606f\uff0c\u683c\u5f0f\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"\u7a0b\u5e8f\u96c6\u540d\u79f0;\u63a5\u53e3\u5b8c\u6574\u540d\u79f0"),"\uff0c\u5982\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Furion.Application;Furion.Application.ITestService")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Service"),"\uff1a\u914d\u7f6e\u63a5\u53e3\u5b9e\u73b0\u4fe1\u606f\uff0c\u683c\u5f0f\u540c\u4e0a"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"RegisterType"),"\uff1a\u914d\u7f6e\u4f9d\u8d56\u6ce8\u5165\u7684\u5bf9\u8c61\u751f\u5b58\u671f\uff0c\u53d6\u503c\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Transient"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"Scoped"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"Singleton")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Action"),"\uff1a\u6ce8\u518c\u884c\u4e3a\uff0c\u53ef\u9009\u503c\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"Add"),"\uff0c",(0,a.kt)("inlineCode",{parentName:"li"},"TryAdd"),"\uff0c\u53c2\u89c1 ",(0,a.kt)("a",{parentName:"li",href:"#128-injection-%E7%89%B9%E6%80%A7%E9%85%8D%E7%BD%AE"},"#128-injection-\u7279\u6027\u914d\u7f6e")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Pattern"),"\uff1a\u6ce8\u518c\u9009\u9879\uff0c\u53c2\u89c1 ",(0,a.kt)("a",{parentName:"li",href:"#128-injection-%E7%89%B9%E6%80%A7%E9%85%8D%E7%BD%AE"},"#128-injection-\u7279\u6027\u914d\u7f6e")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Named"),"\uff1a\u6ce8\u518c\u522b\u540d\uff0c\u53c2\u89c1 ",(0,a.kt)("a",{parentName:"li",href:"#128-injection-%E7%89%B9%E6%80%A7%E9%85%8D%E7%BD%AE"},"#128-injection-\u7279\u6027\u914d\u7f6e")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Order"),"\uff1a\u6ce8\u518c\u6392\u5e8f\uff0c\u53c2\u89c1 ",(0,a.kt)("a",{parentName:"li",href:"#128-injection-%E7%89%B9%E6%80%A7%E9%85%8D%E7%BD%AE"},"#128-injection-\u7279\u6027\u914d\u7f6e")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Proxy"),"\uff1a\u914d\u7f6e\u4ee3\u7406\u62e6\u622a\uff0c\u683c\u5f0f\uff1a",(0,a.kt)("inlineCode",{parentName:"li"},"\u7a0b\u5e8f\u96c6\u540d\u79f0;\u4ee3\u7406\u7c7b\u5b8c\u6574\u540d\u79f0"),"\uff0c\u53c2\u89c1 ",(0,a.kt)("a",{parentName:"li",href:"#128-injection-%E7%89%B9%E6%80%A7%E9%85%8D%E7%BD%AE"},"#128-injection-\u7279\u6027\u914d\u7f6e"))))))))),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u5916\u90e8\u7a0b\u5e8f\u96c6",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c\u52a8\u6001\u6ce8\u5165\u7684\u5bf9\u8c61\u662f\u5916\u90e8\u7a0b\u5e8f\u96c6\uff0c\u90a3\u4e48\u9996\u5148\u5148\u6ce8\u518c\u5916\u90e8\u7a0b\u5e8f\u96c6\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "AppSettings": {\n "ExternalAssemblies": ["\u5916\u90e8\u7a0b\u5e8f\u96c6\u540d\u79f0", "Taobao.Pay"] // \u652f\u6301\u591a\u4e2a\n }\n}\n'))),(0,a.kt)("h2",{id:"1211-\u6ce8\u518c\u987a\u5e8f\u548c\u4f18\u5148\u7ea7"},"12.11 \u6ce8\u518c\u987a\u5e8f\u548c\u4f18\u5148\u7ea7"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u9ed8\u8ba4\u6ce8\u518c\u987a\u5e8f\u662f\u6309\u7167\u7a0b\u5e8f\u96c6\u626b\u63cf\u987a\u5e8f\u8fdb\u884c\u6ce8\u518c\uff0c\u5982\u679c\u9700\u8981\u6539\u53d8\u6ce8\u518c\u987a\u5e8f\uff0c\u53ef\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"[Injection(Order)]")," \u7279\u6027\u6307\u5b9a\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Order")," \u503c\u8d8a\u5927\uff0c\u5219\u8d8a\u5728\u6700\u540e\u6ce8\u518c\u3002"),(0,a.kt)("p",null,"\u53e6\u5916 ",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u914d\u7f6e\u7684\u4f18\u5148\u7ea7\u6700\u5927\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u914d\u7f6e\u7684\u6ce8\u518c\u4f1a\u8986\u76d6\u4e4b\u524d\u6240\u6709\u6ce8\u518c\u3002"),(0,a.kt)("h2",{id:"1212-aop-\u6ce8\u518c\u62e6\u622a"},"12.12 ",(0,a.kt)("inlineCode",{parentName:"h2"},"Aop")," \u6ce8\u518c\u62e6\u622a"),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u52a8\u6001 API \u548c\u670d\u52a1\u7684\u533a\u522b",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c\u60a8\u7684\u670d\u52a1\u662f\u52a8\u6001 API\uff0c\u90a3\u4e48\u8bf7\u4f7f\u7528 ",(0,a.kt)("a",{parentName:"p",href:"/docs/dynamic-api-controller#511-%E5%85%B3%E4%BA%8E-aop-%E6%8B%A6%E6%88%AA"},"\u52a8\u6001 API - AOP \u62e6\u622a"),"\uff0c\u539f\u56e0\u662f\u52a8\u6001 API \u672c\u8d28\u662f\u63a7\u5236\u5668\uff0c\u6240\u4ee5\u91c7\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"Filter")," \u65b9\u5f0f\u3002")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"AOP")," \u662f\u975e\u5e38\u91cd\u8981\u7684\u601d\u60f3\u548c\u6280\u672f\uff0c\u4e5f\u5c31\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"\u9762\u5411\u5207\u9762")," \u7f16\u7a0b\uff0c\u53ef\u4ee5\u8ba9\u6211\u4eec\u5728\u4e0d\u6539\u52a8\u539f\u6765\u4ee3\u7801\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u52a8\u6001\u7be1\u6539\u4e1a\u52a1\u4ee3\u7801\u3002"),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u5b9e\u73b0 ",(0,a.kt)("inlineCode",{parentName:"p"},"Aop")," \u975e\u5e38\u7b80\u5355\uff0c\u5982\uff1a"),(0,a.kt)("p",null,"\u5047\u8bbe\u6211\u4eec\u6709 ",(0,a.kt)("inlineCode",{parentName:"p"},"ITestService")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"TestService")," \u4e24\u4e2a\u7c7b\u578b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"public interface ITestService\n{\n string SayHello(string word);\n}\n")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'public class TestService: ITestService, ITransient\n{\n public string SayHello(string word)\n {\n return $"Hello {word}";\n }\n}\n')),(0,a.kt)("p",null,"\u73b0\u5728\u6211\u4eec\u6709\u4e00\u4e2a\u9700\u6c42\uff0c\u6211\u4eec\u5e0c\u671b\u8c03\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"SayHello")," \u7684\u65f6\u5019\u53ef\u4ee5\u8bb0\u5f55\u65e5\u5fd7\u548c\u6743\u9650\u63a7\u5236\uff08\u4e4b\u524d\u6ca1\u6709\u8003\u8651\u5230\u7684\u9700\u6c42\uff09\u3002"),(0,a.kt)("p",null,"\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u53ea\u9700\u8981\u521b\u5efa\u4e00\u4e2a\u4ee3\u7406\u7c7b\u5373\u53ef\uff0c\u5982 ",(0,a.kt)("inlineCode",{parentName:"p"},"LogDispatchProxy")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,7,25,37,48}",showLineNumbers:!0,"":!0,"{1,3,7,25,37,48}":!0},'using Furion.DependencyInjection;\nusing System;\nusing System.Reflection;\n\nnamespace Furion.Application\n{\n public class LogDispatchProxy : AspectDispatchProxy, IDispatchProxy\n {\n /// \n /// \u5f53\u524d\u670d\u52a1\u5b9e\u4f8b\n /// \n public object Target { get; set; }\n\n /// \n /// \u670d\u52a1\u63d0\u4f9b\u5668\uff0c\u53ef\u4ee5\u7528\u6765\u89e3\u6790\u670d\u52a1\uff0c\u5982\uff1aServices.GetService()\n /// \n public IServiceProvider Services { get; set; }\n\n /// \n /// \u62e6\u622a\u65b9\u6cd5\n /// \n /// \n /// \n /// \n public override object Invoke(MethodInfo method, object[] args)\n {\n Console.WriteLine("SayHello \u65b9\u6cd5\u88ab\u8c03\u7528\u4e86");\n\n var result = method.Invoke(Target, args);\n\n Console.WriteLine("SayHello \u65b9\u6cd5\u8fd4\u56de\u503c\uff1a" + result);\n\n return result;\n }\n\n // \u5f02\u6b65\u65e0\u8fd4\u56de\u503c\n public override async Task InvokeAsync(MethodInfo method, object[] args)\n {\n Console.WriteLine("SayHello \u65b9\u6cd5\u88ab\u8c03\u7528\u4e86");\n\n var task = method.Invoke(Target, args) as Task;\n await task;\n\n Console.WriteLine("SayHello \u65b9\u6cd5\u8c03\u7528\u5b8c\u6210");\n }\n\n // \u5f02\u6b65\u5e26\u8fd4\u56de\u503c\n public override async Task InvokeAsyncT(MethodInfo method, object[] args)\n {\n Console.WriteLine("SayHello \u65b9\u6cd5\u88ab\u8c03\u7528\u4e86");\n\n var taskT = method.Invoke(Target, args) as Task;\n var result = await taskT;\n\n Console.WriteLine("SayHello \u65b9\u6cd5\u8fd4\u56de\u503c\uff1a" + result);\n\n return result;\n }\n }\n}\n')),(0,a.kt)("admonition",{title:"\u83b7\u53d6\u7279\u6027",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c\u9700\u8981\u83b7\u53d6\u65b9\u6cd5\u7684\u7279\u6027\uff0c\u53ea\u9700\u8981\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"method.GetActualCustomAttribute()")," \u5373\u53ef\u3002\u6240\u6709\u83b7\u53d6\u771f\u5b9e\u7684\u7279\u6027\u7edf\u4e00\u91c7\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"method.GetActual....()")," \u65b9\u6cd5\u5f00\u5934\u3002")),(0,a.kt)("p",null,"\u4e4b\u540e\u6211\u4eec\u53ea\u9700\u8981\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"TestService")," \u589e\u52a0 ",(0,a.kt)("inlineCode",{parentName:"p"},"[Injection]")," \u7279\u6027\u5373\u53ef\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},'[Injection(Proxy = typeof(LogDispatchProxy))]\npublic class TestService: ITestService, ITransient\n{\n public string SayHello(string word)\n {\n return $"Hello {word}";\n }\n}\n')),(0,a.kt)("p",null,"\u4e4b\u540e ",(0,a.kt)("inlineCode",{parentName:"p"},"SayHello")," \u65b9\u6cd5\u88ab\u8c03\u7528\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u5b9e\u73b0\u52a8\u6001\u62e6\u622a\u4e86\uff0c\u6bd4\u5982\u8fd9\u91cc\u5199\u65e5\u5fd7\u3002"),(0,a.kt)("h3",{id:"12121-\u5168\u5c40aop\u62e6\u622a"},"12.12.1 ",(0,a.kt)("inlineCode",{parentName:"h3"},"\u5168\u5c40Aop\u62e6\u622a")),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e5f\u63d0\u4f9b\u4e86\u5168\u5c40\u62e6\u622a\u7684\u65b9\u5f0f\uff0c\u53ea\u9700\u8981\u5c06 ",(0,a.kt)("inlineCode",{parentName:"p"},"IDispatchProxy")," \u4fee\u6539\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"IGlobalDispatchProxy")," \u5373\u53ef\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"using Furion;\nusing System.Reflection;\n\nnamespace Furion.Application\n{\n public class LogDispatchProxy : AspectDispatchProxy, IGlobalDispatchProxy\n {\n // ....\n }\n}\n")),(0,a.kt)("p",null,"\u8fd9\u6837\u5c31\u4f1a\u62e6\u622a\u6240\u6709\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Service"),"\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u901a\u8fc7\u7ed9\u7279\u5b9a\u7c7b\u8d34 ",(0,a.kt)("inlineCode",{parentName:"p"},"[SuppressProxy]")," \u8df3\u8fc7\u5168\u5c40\u62e6\u622a\u64cd\u4f5c\u3002"),(0,a.kt)("admonition",{title:"\u62e6\u622a\u4f18\u5148\u7ea7",type:"important"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"[SuppressProxy]")," > ",(0,a.kt)("inlineCode",{parentName:"p"},"[Injection(Proxy = typeof(LogDispatchProxy))]")," > ",(0,a.kt)("inlineCode",{parentName:"p"},"\u5168\u5c40\u62e6\u622a"),"\u3002")),(0,a.kt)("h3",{id:"12122-aop-\u6ce8\u5165\u89e3\u6790\u670d\u52a1"},"12.12.2 ",(0,a.kt)("inlineCode",{parentName:"h3"},"AOP")," \u6ce8\u5165\u89e3\u6790\u670d\u52a1"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u672a\u63d0\u4f9b ",(0,a.kt)("inlineCode",{parentName:"p"},"Proxy")," \u6784\u9020\u51fd\u6570\u6ce8\u5165\u529f\u80fd\uff0c\u4f46\u662f\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"Services")," \u5c5e\u6027\uff0c\u5982\u679c\u9700\u8981\u89e3\u6790\u670d\u52a1\uff0c\u5219\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var someServices = Services.GetService(); // \u63a8\u8350\u65b9\u5f0f\n// \u6216\nvar someServices = App.GetService();\n")),(0,a.kt)("h3",{id:"12123-aop-\u7684\u4f5c\u7528"},"12.12.3 ",(0,a.kt)("inlineCode",{parentName:"h3"},"AOP")," \u7684\u4f5c\u7528"),(0,a.kt)("p",null,"\u8fd9\u79cd\u9762\u5411\u5207\u9762\u7684\u80fd\u529b\uff08\u52a8\u6001\u62e6\u622a/\u4ee3\u7406\uff09\u53ef\u4ee5\u5b9e\u73b0\u5f88\u591a\u5f88\u591a\u529f\u80fd\uff0c\u5982\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u52a8\u6001\u65e5\u5fd7\u8bb0\u5f55"),(0,a.kt)("li",{parentName:"ul"},"\u52a8\u6001\u4fee\u6539\u53c2\u6570"),(0,a.kt)("li",{parentName:"ul"},"\u52a8\u6001\u4fee\u6539\u8fd4\u56de\u503c"),(0,a.kt)("li",{parentName:"ul"},"\u52a8\u6001\u65b9\u6cd5\u91cd\u5b9a\u5411"),(0,a.kt)("li",{parentName:"ul"},"\u52a8\u6001\u4fee\u6539\u4ee3\u7801\u903b\u8f91"),(0,a.kt)("li",{parentName:"ul"},"\u52a8\u6001\u5b9e\u73b0\u5f02\u5e38\u76d1\u542c")),(0,a.kt)("p",null,"\u8fd8\u53ef\u4ee5\u505a\u66f4\u591a\u66f4\u591a\u7684\u4e8b\u60c5\u3002"),(0,a.kt)("h2",{id:"1213-\u5728\u975e-web-\u6216\u591a\u7ebf\u7a0b\u89e3\u6790\u670d\u52a1"},"12.13 \u5728\u975e ",(0,a.kt)("inlineCode",{parentName:"h2"},"Web")," \u6216\u591a\u7ebf\u7a0b\u89e3\u6790\u670d\u52a1"),(0,a.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Web")," \u8bf7\u6c42\u5f00\u59cb\u4e4b\u524d\u4f1a\u81ea\u52a8\u521b\u5efa\u8303\u56f4\u4f5c\u7528\u57df\uff0c\u8fd9\u4e2a\u4f5c\u7528\u57df\u7684\u751f\u5b58\u5468\u671f\u662f\u8bf7\u6c42\u4e4b\u524d\u548c\u54cd\u5e94\u4e4b\u540e\uff0c\u4e5f\u5c31\u662f\u5728\u8fd9\u4e2a\u4f5c\u7528\u57df\u5185\u7684\u6240\u6709\u670d\u52a1\u90fd\u5b9e\u73b0\u4e86\u81ea\u52a8\u7ba1\u7406\uff0c\u6bd4\u5982\u521b\u5efa\u670d\u52a1\u548c\u91ca\u653e\u670d\u52a1\u7684\u65f6\u673a\u3002"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"\u4f46\u5728\u975e ",(0,a.kt)("inlineCode",{parentName:"strong"},"Web")," \u6216\u591a\u7ebf\u7a0b\u4e2d\uff0c\u6846\u67b6\u5e76\u4e0d\u4f1a\u505a\u8fd9\u6837\u7684\u4e8b\u60c5\uff0c\u4e5f\u5c31\u662f\u6846\u67b6\u53ea\u8d1f\u8d23\u4e86\u670d\u52a1\u7684\u521b\u5efa\uff0c\u4f46\u662f\u6ca1\u6709\u8d1f\u8d23\u9500\u6bc1\uff0c\u539f\u56e0\u662f\u6846\u67b6\u65e0\u6cd5\u5f97\u77e5\u5177\u4f53\u7684\u9500\u6bc1\u65f6\u673a\uff0c\u8fd9\u6837\u5c31\u5bfc\u81f4\u4e86\u5185\u5b58\u6ea2\u51fa\u3002")),(0,a.kt)("p",null,"\u89e3\u51b3\u65b9\u5f0f\u662f\uff1a\u5728\u975e ",(0,a.kt)("inlineCode",{parentName:"p"},"Web")," \u6216\u591a\u7ebf\u7a0b\u4e2d\u4f7f\u7528\u670d\u52a1\uff0c\u5e94\u8be5\u4e3b\u52a8\u521b\u5efa\u4f5c\u7528\u57df\uff0c\u7c7b\u4f3c\u8fc7\u53bb\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"using"),"\uff0c\u76ee\u524d\u6846\u67b6\u63d0\u4f9b\u4e86\u51e0\u79cd\u65b9\u5f0f\u3002"),(0,a.kt)("h3",{id:"12131-iserviceprovider-\u65b9\u5f0f"},"12.13.1 ",(0,a.kt)("inlineCode",{parentName:"h3"},"IServiceProvider")," \u65b9\u5f0f"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-2,5,8,11-12}",showLineNumbers:!0,"{1-2,5,8,11-12}":!0},"using var scope = serviceProvider.CreateScope();\nvar services = scope.ServiceProvider;\n\n// \u83b7\u53d6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\nvar dbContext = Db.GetDbContext(services);\n\n// \u83b7\u53d6\u4ed3\u50a8\nvar respository = Db.GetRepository(services);\n\n// \u89e3\u6790\u5176\u4ed6\u670d\u52a1\nvar otherService = services.GetService();\nvar otherService2 = App.GetService(services);\n")),(0,a.kt)("h3",{id:"12132-iservicescopefactory-\u65b9\u5f0f"},"12.13.2 ",(0,a.kt)("inlineCode",{parentName:"h3"},"IServiceScopeFactory")," \u65b9\u5f0f"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"using var scope = serviceScopeFactory.CreateScope();\nvar services = scope.ServiceProvider;\n")),(0,a.kt)("h3",{id:"12133-scoped-\u9759\u6001\u7c7b"},"12.13.3 ",(0,a.kt)("inlineCode",{parentName:"h3"},"Scoped")," \u9759\u6001\u7c7b"),(0,a.kt)("p",null,"\u4e3a\u4e86\u65b9\u6cd5\u5feb\u901f\u521b\u5efa\u670d\u52a1\u4f5c\u7528\u57df\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"Scoped")," \u9759\u6001\u7c7b\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-2}",showLineNumbers:!0,"{1-2}":!0},"Scoped.Create((factory, scope) => {\n var services = scope.ServiceProvider;\n});\n")),(0,a.kt)("h2",{id:"1214-\u81ea\u5b9a\u4e49\u626b\u63cf\u7b5b\u9009\u6ce8\u518c\u670d\u52a1"},"12.14 \u81ea\u5b9a\u4e49\u626b\u63cf/\u7b5b\u9009\u6ce8\u518c\u670d\u52a1"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u5e76\u672a\u63d0\u4f9b\u5b8c\u5168\u81ea\u5b9a\u4e49\u4f9d\u8d56\u6ce8\u5165\u626b\u63cf\u7684\u673a\u5236\uff0c\u4f46\u63a8\u8350\u4e00\u4e2a\u975e\u5e38\u4f18\u79c0\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},".NET Core")," \u4f9d\u8d56\u6ce8\u5165\u62d3\u5c55\u5e93\uff1a",(0,a.kt)("inlineCode",{parentName:"p"},"Scrutor"),"\uff0c\u4f7f\u7528\u975e\u5e38\u7b80\u5355\uff0c\u4e3b\u8981\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"FromAssemblyOf<>")," \u626b\u63cf\u7a0b\u5e8f\u96c6\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"AddClasses(o)")," \u8fdb\u884c\u7b5b\u9009\u6ce8\u518c\u3002"),(0,a.kt)("p",null,"\u4f7f\u7528\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,6,13,19,22}",showLineNumbers:!0,"{1,3,6,13,19,22}":!0},"services.Scan(scan => scan\n // \u626b\u63cf\u7279\u5b9a\u7c7b\u578b\u6240\u5728\u7684\u7a0b\u5e8f\u96c6\uff0c\u8fd9\u91cc\u662f ITransientService \u6240\u5728\u7684\u7a0b\u5e8f\u96c6\n .FromAssemblyOf()\n // .AddClasses \u5728\u4e0a\u9762\u83b7\u53d6\u5230\u7684\u7a0b\u5e8f\u96c6\u4e2d\u626b\u63cf\u6240\u6709\u516c\u5f00\u3001\u975e\u62bd\u8c61\u7c7b\u578b\n // \u4e4b\u540e\u53ef\u4ee5\u901a\u8fc7\u59d4\u6258\u8fdb\u884c\u7c7b\u578b\u7b5b\u9009\uff0c\u4f8b\u5982\u4e0b\u9762\u53ea\u626b\u63cf\u5b9e\u73b0 ITransientService \u7684\u7c7b\u578b\n .AddClasses(classes => classes.AssignableTo())\n // \u5c06\u4e0a\u9762\u7684\u7c7b\u578b\u4f5c\u4e3a\u5b83\u5b9e\u73b0\u7684\u6240\u6709\u63a5\u53e3\u8fdb\u884c\u6ce8\u518c\n // \u5982\u679c\u7c7b\u578b\u5b9e\u73b0\u4e86 N \u4e2a\u63a5\u53e3\uff0c\u90a3\u4e48\u5c31\u4f1a\u6709\u4e09\u4e2a\u72ec\u7acb\u7684\u6ce8\u518c\n .AsImplementedInterfaces()\n // \u6700\u540e\u6307\u5b9a\u6ce8\u518c\u7684\u751f\u5b58\u671f\uff0c\u5982\u77ac\u65f6\uff0c\u4f5c\u7528\u57df\uff0c\u8fd8\u662f\u5355\u4f8b\n .WithTransientLifetime()\n // \u91cd\u590d\u4e0a\u9762\u64cd\u4f5c\uff0c\u6bd4\u5982\u8fd9\u91cc\u626b\u63cf IScopedService \u6240\u5728\u7684\u7a0b\u5e8f\u96c6\n .AddClasses(classes => classes.AssignableTo())\n // \u8fd9\u91cc\u548c\u4e0a\u9762\u4e0d\u4e00\u6837\u7684\u662f\uff0c\u8fd9\u91cc\u6307\u5b9a\u53ea\u5b9e\u73b0\u7279\u5b9a\u7684\u51e0\u53e3\uff0c\u4e5f\u5c31\u662f\u53ea\u6ce8\u518c\u4e00\u6b21\n .As()\n // \u6307\u5b9a\u6ce8\u518c\u7684\u751f\u5b58\u671f\n .WithScopedLifetime()\n // \u4e5f\u652f\u6301\u6cdb\u578b\u6ce8\u518c\uff0c\u5355\u4e2a\u6cdb\u578b\u53c2\u6570\n .AddClasses(classes => classes.AssignableTo(typeof(IOpenGeneric<>)))\n .AsImplementedInterfaces()\n // \u591a\u4e2a\u6cdb\u578b\u53c2\u6570\n .AddClasses(classes => classes.AssignableTo(typeof(IQueryHandler<,>)))\n .AsImplementedInterfaces());\n")),(0,a.kt)("p",null,"\u8be6\u7ec6\u6587\u6863\u8bf7\u67e5\u9605 ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/khellang/Scrutor"},"https://github.com/khellang/Scrutor")),(0,a.kt)("h2",{id:"1215-\u53cd\u9988\u4e0e\u5efa\u8bae"},"12.15 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/aa7bdd74.9c37b522.js b/handbook/build/assets/js/aa7bdd74.9c37b522.js new file mode 100644 index 00000000000..9710f190f50 --- /dev/null +++ b/handbook/build/assets/js/aa7bdd74.9c37b522.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4572],{3905:function(e,n,r){r.d(n,{Zo:function(){return c},kt:function(){return u}});var t=r(7294);function i(e,n,r){return n in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function o(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),r.push.apply(r,t)}return r}function a(e){for(var n=1;n=0||(i[r]=e[r]);return i}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=t.createContext({}),p=function(e){var n=t.useContext(l),r=n;return e&&(r="function"==typeof e?e(n):a(a({},n),e)),r},c=function(e){var n=p(e.components);return t.createElement(l.Provider,{value:n},e.children)},k={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},d=t.forwardRef((function(e,n){var r=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(r),u=i,m=d["".concat(l,".").concat(u)]||d[u]||k[u]||o;return r?t.createElement(m,a(a({ref:n},c),{},{components:r})):t.createElement(m,a({ref:n},c))}));function u(e,n){var r=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=d;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:i,a[1]=s;for(var p=2;pWorker Service \u65b9\u5f0f",id:"253-\u72ec\u7acb-worker-service-\u65b9\u5f0f",level:2},{value:"25.3.1 \u5982\u4f55\u521b\u5efa Worker Service",id:"2531-\u5982\u4f55\u521b\u5efa-worker-service",level:3},{value:"25.3.2 \u521b\u5efa Worker",id:"2532-\u521b\u5efa-worker",level:3},{value:"25.3.3 \u591a\u4e2a Worker",id:"2533-\u591a\u4e2a-worker",level:3},{value:"25.3.4 \u751f\u547d\u5468\u671f",id:"2534-\u751f\u547d\u5468\u671f",level:3},{value:"25.3.5 \u96c6\u6210 Furion",id:"2535-\u96c6\u6210-furion",level:3},{value:"25.3.6 \u6ce8\u518c\u670d\u52a1",id:"2536-\u6ce8\u518c\u670d\u52a1",level:3},{value:"25.4 \u5b9e\u73b0\u5b9a\u65f6\u4efb\u52a1",id:"254-\u5b9e\u73b0\u5b9a\u65f6\u4efb\u52a1",level:2},{value:"25.4.1 \u95f4\u9694\u6267\u884c\u65b9\u5f0f",id:"2541-\u95f4\u9694\u6267\u884c\u65b9\u5f0f",level:3},{value:"25.4.2 Cron \u8868\u8fbe\u5f0f\u6267\u884c\u65b9\u5f0f",id:"2542-cron-\u8868\u8fbe\u5f0f\u6267\u884c\u65b9\u5f0f",level:3},{value:"25.4.3 \u5b9e\u73b0 \u4e32\u884c \u64cd\u4f5c",id:"2543-\u5b9e\u73b0-\u4e32\u884c-\u64cd\u4f5c",level:3},{value:"25.5 \u4f9d\u8d56\u6ce8\u5165\u4f7f\u7528",id:"255-\u4f9d\u8d56\u6ce8\u5165\u4f7f\u7528",level:2},{value:"25.6 \u5982\u4f55\u90e8\u7f72",id:"256-\u5982\u4f55\u90e8\u7f72",level:2},{value:"25.6.1 \u5171\u5bbf\u4e3b\u65b9\u5f0f",id:"2561-\u5171\u5bbf\u4e3b\u65b9\u5f0f",level:3},{value:"25.6.2 \u72ec\u7acb Worker Service \u65b9\u5f0f",id:"2562-\u72ec\u7acb-worker-service-\u65b9\u5f0f",level:3},{value:"\u90e8\u7f72\u5230 Windows Service",id:"\u90e8\u7f72\u5230-windows-service",level:4},{value:"\u90e8\u7f72\u5230 Linux \u5b88\u62a4\u7a0b\u5e8f",id:"\u90e8\u7f72\u5230-linux-\u5b88\u62a4\u7a0b\u5e8f",level:4},{value:"25.7 \u5173\u4e8e Windows \u90e8\u7f72\u65e5\u5fd7\u95ee\u9898",id:"257-\u5173\u4e8e-windows-\u90e8\u7f72\u65e5\u5fd7\u95ee\u9898",level:2},{value:"25.8 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"258-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],u={toc:d};function m(e){var n=e.components,r=(0,i.Z)(e,s);return(0,o.kt)("wrapper",(0,t.Z)({},u,r,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"251-\u5173\u4e8e\u8f85\u52a9\u89d2\u8272\u670d\u52a1"},"25.1 \u5173\u4e8e\u8f85\u52a9\u89d2\u8272\u670d\u52a1"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},".NET Core 3.0")," \u65b0\u589e\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u7684\u65b0\u9879\u76ee\u6a21\u677f\uff0c",(0,o.kt)("strong",{parentName:"p"},"\u53ef\u4ee5\u7f16\u5199\u957f\u65f6\u95f4\u8fd0\u884c\u7684\u540e\u53f0\u670d\u52a1\uff0c\u5e76\u4e14\u80fd\u8f7b\u677e\u7684\u90e8\u7f72\u6210 ",(0,o.kt)("inlineCode",{parentName:"strong"},"Windows\u670d\u52a1")," \u6216 ",(0,o.kt)("inlineCode",{parentName:"strong"},"Linux \u5b88\u62a4\u7a0b\u5e8f")),"\u3002"),(0,o.kt)("p",null,"\u76ee\u524d\u5fae\u8f6f\u63d0\u4f9b\u4e86\u4e24\u79cd\u65b9\u5f0f\u521b\u5efa\u957f\u65f6\u95f4\u8fd0\u884c\u7684\u540e\u53f0\u670d\u52a1\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"\u5171\u5bbf\u4e3b\u65b9\u5f0f"),"\uff1a\u4e2d\u5c0f\u578b\u9879\u76ee\u63a8\u8350\uff0c\u65e0\u9700\u5355\u72ec\u90e8\u7f72 ",(0,o.kt)("inlineCode",{parentName:"li"},"Windows/Linux")," \u670d\u52a1"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"\u72ec\u7acb ",(0,o.kt)("inlineCode",{parentName:"strong"},"Worker Service")," \u65b9\u5f0f"),"\uff1a\u9700\u72ec\u7acb\u90e8\u7f72 ",(0,o.kt)("inlineCode",{parentName:"li"},"Windows/Linux")," \u670d\u52a1")),(0,o.kt)("h2",{id:"252-\u5171\u5bbf\u4e3b\u65b9\u5f0f"},"25.2 \u5171\u5bbf\u4e3b\u65b9\u5f0f"),(0,o.kt)("p",null,"\u5171\u5bbf\u4e3b\u65b9\u5f0f\u6307\u7684\u662f\u5728\u73b0\u6709\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"Web")," \u6216\u5176\u4ed6\u5e94\u7528\u7a0b\u4e2d\u521b\u5efa\u7c7b\u6587\u4ef6\u5e76\u6d3e\u751f\u81ea ",(0,o.kt)("inlineCode",{parentName:"p"},"BackgroundService")," \u7c7b\u5373\u53ef\u3002",(0,o.kt)("strong",{parentName:"p"},"\u8fd9\u79cd\u65b9\u5f0f\u7684\u5178\u578b\u7279\u70b9\u5c31\u662f\u548c\u5e94\u7528\u5171\u751f\u5b58\u5468\u671f\uff0c\u5e94\u7528\u542f\u52a8\u65f6\u542f\u52a8\uff0c\u5e94\u7528\u7ed3\u675f\u505c\u6b62\u8fd0\u884c\u3002")),(0,o.kt)("admonition",{title:"\u63a8\u8350\u7b49\u7ea7",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u63a8\u8350\u4e2d\u5c0f\u578b\u9879\u76ee\u4f7f\u7528\u8fd9\u79cd\u65b9\u5f0f\u3002")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8,11,12-17}",showLineNumbers:!0,"{8,11,12-17}":!0},"using Microsoft.Extensions.Hosting;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace YourPoject.Web.Core;\n\npublic class Worker : BackgroundService\n{\n protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n Console.WriteLine(DateTime.Now);\n\n // \u5ef6\u8fdf 1 \u79d2\n await Task.Delay(1000, stoppingToken);\n }\n }\n}\n")),(0,o.kt)("p",null,"\u4e4b\u540e\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u6ce8\u518c\u5373\u53ef\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddHostedService();\n")),(0,o.kt)("h3",{id:"2521-\u6700\u4f73\u5b9e\u8df5"},"25.2.1 \u6700\u4f73\u5b9e\u8df5"),(0,o.kt)("p",null,"\u6700\u597d\u7684\u5b9e\u8df5\u65b9\u5f0f\u662f\u521b\u5efa\u72ec\u7acb\u7684\u7c7b\u5e93\u9879\u76ee\uff1a",(0,o.kt)("inlineCode",{parentName:"p"},"YourProject.BackgroundServices"),"\uff0c\u4e4b\u540e\u6dfb\u52a0 ",(0,o.kt)("inlineCode",{parentName:"p"},"YourPoject.Application")," \u548c ",(0,o.kt)("inlineCode",{parentName:"p"},"YourPoject.Core")," \u5c42\u5f15\u7528\uff0c\u5c06\u6240\u6709\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker")," \u653e\u5728\u8be5\u5c42\uff0c\u540c\u65f6\u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u7c7b\u8fdb\u884c ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker")," \u7edf\u4e00\u6ce8\u518c\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,7,9-10}",showLineNumbers:!0,"{5,7,9-10}":!0},"using Microsoft.Extensions.DependencyInjection;\n\nnamespace YourProject.BackgroundServices;\n\npublic sealed class Startup : AppStartup\n{\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddHostedService();\n services.AddHostedService();\n }\n}\n")),(0,o.kt)("h2",{id:"253-\u72ec\u7acb-worker-service-\u65b9\u5f0f"},"25.3 \u72ec\u7acb ",(0,o.kt)("inlineCode",{parentName:"h2"},"Worker Service")," \u65b9\u5f0f"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u72ec\u7acb ",(0,o.kt)("inlineCode",{parentName:"strong"},"Worker Service")," \u65b9\u5f0f\u7684\u4e3b\u8981\u7279\u70b9\u5c31\u662f\u5b83\u662f\u4e00\u4e2a\u72ec\u7acb\u7684\u9879\u76ee"),"\uff0c\u548c\u73b0\u6709\u7684\u9879\u76ee\u6ca1\u6709\u76f4\u63a5\u5173\u8054\u5173\u7cfb\uff0c",(0,o.kt)("strong",{parentName:"p"},"\u9700\u8981\u5206\u5f00\u72ec\u7acb\u90e8\u7f72"),"\u3002"),(0,o.kt)("admonition",{title:"\u63a8\u8350\u7b49\u7ea7",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u63a8\u8350\u4e2d\u5927\u578b\u9879\u76ee\u4f7f\u7528\u8fd9\u79cd\u65b9\u5f0f\uff0c\u4e5f\u5c31\u662f\u72ec\u7acb\u90e8\u7f72\u6210 ",(0,o.kt)("inlineCode",{parentName:"p"},"Windows Service")," \u6216\u8005 ",(0,o.kt)("inlineCode",{parentName:"p"},"Linux \u5b88\u62a4\u8fdb\u7a0b"),"\uff0c\u5177\u6709\u72ec\u7acb\u751f\u5b58\u5468\u671f\uff0c\u5373\u4f7f\u5e94\u7528\u6545\u969c\u4e86\u4e5f\u4e0d\u4f1a\u5f71\u54cd\u5b83\u7684\u8fd0\u884c\u3002")),(0,o.kt)("h3",{id:"2531-\u5982\u4f55\u521b\u5efa-worker-service"},"25.3.1 \u5982\u4f55\u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"h3"},"Worker Service")),(0,o.kt)("p",null,"\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019")," \u63d0\u4f9b\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u53ef\u76f4\u63a5\u521b\u5efa\u3002\u5982\u56fe\uff1a"),(0,o.kt)("img",{src:(0,a.Z)("img/wk.png")}),(0,o.kt)("h3",{id:"2532-\u521b\u5efa-worker"},"25.3.2 \u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"h3"},"Worker")),(0,o.kt)("p",null,"\u5f53\u6211\u4eec\u521b\u5efa\u597d ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u9879\u76ee\u65f6\uff0c\u5df2\u7ecf\u81ea\u5e26\u4e86\u4e00\u4e2a ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker")," \u7c7b\u5e76\u7ee7\u627f\u81ea ",(0,o.kt)("inlineCode",{parentName:"p"},"BackgroundService")," \u57fa\u7c7b\u3002"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Worker")," \u6b63\u662f\u6211\u4eec\u8f85\u52a9\u89d2\u8272\u7684\u4e3b\u8981\u5de5\u4f5c\u7c7b\uff0c\u5728\u8fd9\u91cc\u6211\u4eec\u7f16\u5199\u6211\u4eec\u6240\u6709\u7684\u4e1a\u52a1\u903b\u8f91\u3002\u901a\u5e38 ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker")," \u9ed8\u8ba4\u683c\u5f0f\u4e3a\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {9,18}",showLineNumbers:!0,"":!0,"{9,18}":!0},'using Microsoft.Extensions.Hosting;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace FurionWorkers\n{\n public class Worker : BackgroundService\n {\n private readonly ILogger _logger;\n\n public Worker(ILogger logger)\n {\n _logger = logger;\n }\n\n protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);\n await Task.Delay(1000, stoppingToken);\n }\n }\n }\n}\n')),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u5f53\u6211\u4eec\u521b\u5efa\u4e86 ",(0,o.kt)("inlineCode",{parentName:"strong"},"Worker")," \u7c7b\u4e4b\u540e\uff0c\u9700\u8981\u5728 ",(0,o.kt)("inlineCode",{parentName:"strong"},"Program.cs")," \u4e2d\u8fdb\u884c\u6ce8\u518c"),"\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {17}",showLineNumbers:!0,"":!0,"{17}":!0},"using Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace FurionWorkers\n{\n public class Program\n {\n public static void Main(string[] args)\n {\n CreateHostBuilder(args).Build().Run();\n }\n\n public static IHostBuilder CreateHostBuilder(string[] args) =>\n Host.CreateDefaultBuilder(args)\n .ConfigureServices((hostContext, services) =>\n {\n services.AddHostedService();\n });\n }\n}\n")),(0,o.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u5305\u540e\u53ef\u5b9e\u73b0\u81ea\u52a8\u6ce8\u518c\u3002")),(0,o.kt)("h3",{id:"2533-\u591a\u4e2a-worker"},"25.3.3 \u591a\u4e2a ",(0,o.kt)("inlineCode",{parentName:"h3"},"Worker")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u662f\u652f\u6301\u5b9a\u4e49\u591a\u4e2a ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker")," \u8fdb\u884c\u534f\u8c03\u5de5\u4f5c\u7684\uff0c\u6bcf\u4e2a ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker")," \u662f\u5b8c\u5168\u72ec\u7acb\u7684\u5de5\u4f5c\u73af\u5883\uff0c\u4f46\u53ef\u5171\u4eab\u540c\u4e00\u4e3b\u8fdb\u7a0b\u4fe1\u606f\u3002"),(0,o.kt)("h3",{id:"2534-\u751f\u547d\u5468\u671f"},"25.3.4 \u751f\u547d\u5468\u671f"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u4e3a ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker")," \u63d0\u4f9b\u4e86\u4e09\u4e2a\u6267\u884c\u65b9\u6cd5\uff0c\u5206\u522b\u4ee3\u8868\u4e09\u4e2a\u751f\u547d\u5468\u671f\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"StartAsync"),"\uff1a\u8d1f\u8d23\u542f\u52a8 ",(0,o.kt)("inlineCode",{parentName:"li"},"Worker Service"),"\uff0c\u5982\u679c\u8c03\u7528 ",(0,o.kt)("inlineCode",{parentName:"li"},"StartAsync")," \u65b9\u6cd5\u7684\u7ebf\u7a0b\u88ab\u4e00\u76f4\u963b\u585e\u4e86\uff0c\u90a3\u4e48 ",(0,o.kt)("inlineCode",{parentName:"li"},"Worker Service")," \u7684\u542f\u52a8\u5c31\u4e00\u76f4\u5b8c\u6210\u4e0d\u4e86"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"ExecuteAsync"),"\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"Worker Service")," \u771f\u6b63\u5b9e\u73b0\u4e1a\u52a1\u903b\u8f91\u7684\u5730\u65b9\uff0c\u8fd9\u91cc\u4e0d\u80fd\u8c03\u7528\u963b\u585e\u4ee3\u7801\uff01\uff01\uff01"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"StopAsync"),"\uff1a\u8d1f\u8d23\u7ed3\u675f ",(0,o.kt)("inlineCode",{parentName:"li"},"Worker Service"),"\uff0c\u5982\u679c\u8c03\u7528 ",(0,o.kt)("inlineCode",{parentName:"li"},"StopAsync")," \u65b9\u6cd5\u7684\u7ebf\u7a0b\u88ab\u4e00\u76f4\u963b\u585e\u4e86\uff0c\u90a3\u4e48 ",(0,o.kt)("inlineCode",{parentName:"li"},"Worker Service")," \u7684\u7ed3\u675f\u5c31\u4e00\u76f4\u5b8c\u6210\u4e0d\u4e86")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {19,25,35}",showLineNumbers:!0,"":!0,"{19,25,35}":!0},'using Microsoft.Extensions.Hosting;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace FurionWorkers\n{\n public class Worker : BackgroundService\n {\n private readonly ILogger _logger;\n\n public Worker(ILogger logger)\n {\n _logger = logger;\n }\n\n // \u542f\u52a8\n public override Task StartAsync(CancellationToken cancellationToken)\n {\n return base.StartAsync(cancellationToken);\n }\n\n // \u6267\u884c\u903b\u8f91\n protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);\n await Task.Delay(1000, stoppingToken);\n }\n }\n\n // \u505c\u6b62\n public override Task StopAsync(CancellationToken cancellationToken)\n {\n return base.StopAsync(cancellationToken);\n }\n }\n}\n')),(0,o.kt)("h3",{id:"2535-\u96c6\u6210-furion"},"25.3.5 \u96c6\u6210 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Furion")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u96c6\u6210 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u975e\u5e38\u65b9\u4fbf\uff0c\u53ea\u9700\u8981\u5b89\u88c5 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u7684\u5305\u5373\u53ef\uff0c\u5e76\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Program.cs")," \u4e2d\u8c03\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},".Inject()")," \u65b9\u6cd5\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {15}",showLineNumbers:!0,"":!0,"{15}":!0},"using Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace FurionWorkers\n{\n public class Program\n {\n public static void Main(string[] args)\n {\n CreateHostBuilder(args).Build().Run();\n }\n\n public static IHostBuilder CreateHostBuilder(string[] args) =>\n Host.CreateDefaultBuilder(args)\n .Inject()\n .ConfigureServices((hostContext, services) =>\n {\n // \u4ee5\u4e0b\u4ee3\u7801\u53ef\u4e0d\u7528\u7f16\u5199\uff0cFurion \u5df2\u5b9e\u73b0\u81ea\u52a8\u6ce8\u518c Worker;\n // services.AddHostedService();\n });\n }\n}\n")),(0,o.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"Inject()")," \u65b9\u6cd5\u6ce8\u518c\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"\u65e5\u5fd7\u3001\u7f13\u5b58\u3001\u4f9d\u8d56\u6ce8\u5165\u3001\u52a0\u8f7d\u914d\u7f6e\u3001\u81ea\u5b9a\u4e49 Startup")," \u529f\u80fd\u3002"),(0,o.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u96c6\u6210 ",(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u540e\u4f1a\u81ea\u52a8\u626b\u63cf ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker")," \u7c7b\u5e76\u5b9e\u73b0\u81ea\u52a8\u6ce8\u518c\u3002")),(0,o.kt)("h3",{id:"2536-\u6ce8\u518c\u670d\u52a1"},"25.3.6 \u6ce8\u518c\u670d\u52a1"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u6ce8\u518c\u670d\u52a1\u548c ",(0,o.kt)("inlineCode",{parentName:"p"},"Web")," \u7565\u6709\u4e0d\u540c\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"Web")," \u4e3b\u8981\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Starup.cs")," \u7c7b\u4e2d\u6ce8\u518c\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Program.cs")," \u542f\u52a8\u7c7b\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"ConfigureServices")," \u65b9\u6cd5\u4e2d\u6ce8\u518c\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {16-28}",showLineNumbers:!0,"":!0,"{16-28}":!0},"using Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace FurionWorkers\n{\n public class Program\n {\n public static void Main(string[] args)\n {\n CreateHostBuilder(args).Build().Run();\n }\n\n public static IHostBuilder CreateHostBuilder(string[] args) =>\n Host.CreateDefaultBuilder(args)\n .Inject()\n .ConfigureServices((hostContext, services) =>\n {\n // \u6ce8\u518c\u6570\u636e\u5e93\u670d\u52a1\n services.AddDatabaseAccessor(options =>\n {\n options.AddDb();\n });\n\n // \u6ce8\u518c\u8fdc\u7a0b\u8bf7\u6c42\n services.AddRemoteRequest();\n\n // \u7b49\u7b49\u5176\u4ed6\u670d\u52a1\u6ce8\u518c\n });\n }\n}\n")),(0,o.kt)("h2",{id:"254-\u5b9e\u73b0\u5b9a\u65f6\u4efb\u52a1"},"25.4 \u5b9e\u73b0\u5b9a\u65f6\u4efb\u52a1"),(0,o.kt)("admonition",{title:"\u5c0f\u5efa\u8bae",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u5efa\u8bae\u4f7f\u7528 \u3010",(0,o.kt)("a",{parentName:"p",href:"/docs/job"},"26.1 \u8c03\u5ea6\u4f5c\u4e1a"),"\u3011 \u7ae0\u8282\u5185\u5bb9\u5b9e\u73b0\u5f3a\u5927\u7684\u5206\u5e03\u5f0f\u5b9a\u65f6\u4efb\u52a1\u3002")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e3a ",(0,o.kt)("inlineCode",{parentName:"p"},"BackgroundService")," \u63d0\u4f9b\u4e86\u5b9a\u65f6\u4efb\u52a1\u7684\u652f\u6301\u3002"),(0,o.kt)("h3",{id:"2541-\u95f4\u9694\u6267\u884c\u65b9\u5f0f"},"25.4.1 \u95f4\u9694\u6267\u884c\u65b9\u5f0f"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7,18,20,30}",showLineNumbers:!0,"":!0,"{7,18,20,30}":!0},'namespace WorkerService;\n\npublic class Worker : BackgroundService\n{\n private readonly ILogger _logger;\n\n private const int delay = 1000;\n\n public Worker(ILogger logger)\n {\n _logger = logger;\n }\n\n protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);\n\n await taskFactory.StartNew(async () =>\n {\n // \u4f60\u7684\u4e1a\u52a1\u4ee3\u7801\u5199\u5230\u8fd9\u91cc\u9762\n\n _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);\n\n await Task.CompletedTask;\n\n }, stoppingToken);\n\n await Task.Delay(delay, stoppingToken);\n }\n }\n}\n')),(0,o.kt)("h3",{id:"2542-cron-\u8868\u8fbe\u5f0f\u6267\u884c\u65b9\u5f0f"},"25.4.2 ",(0,o.kt)("inlineCode",{parentName:"h3"},"Cron")," \u8868\u8fbe\u5f0f\u6267\u884c\u65b9\u5f0f"),(0,o.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\u5982\u9700\u4e86\u89e3 ",(0,o.kt)("inlineCode",{parentName:"p"},"Cron")," \u8868\u8fbe\u5f0f\u5185\u5bb9\uff0c\u53ef\u67e5\u9605 \u3010",(0,o.kt)("a",{parentName:"p",href:"/docs/cron"},"26.2 Cron \u8868\u8fbe\u5f0f"),"\u3011 \u7ae0\u8282\u5185\u5bb9\u3002")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {9,14,21,23,32}",showLineNumbers:!0,"":!0,"{9,14,21,23,32}":!0},'using Furion.TimeCrontab;\n\nnamespace WorkerService;\n\npublic class Worker : BackgroundService\n{\n private readonly ILogger _logger;\n\n private readonly Crontab _crontab;\n\n public Worker(ILogger logger)\n {\n _logger = logger;\n _crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);\n }\n\n protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);\n\n await taskFactory.StartNew(async () =>\n {\n // \u4f60\u7684\u4e1a\u52a1\u4ee3\u7801\u5199\u5230\u8fd9\u91cc\u9762\n\n _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);\n\n await Task.CompletedTask;\n }, stoppingToken);\n\n await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.UtcNow), stoppingToken);\n }\n }\n}\n')),(0,o.kt)("h3",{id:"2543-\u5b9e\u73b0-\u4e32\u884c-\u64cd\u4f5c"},"25.4.3 \u5b9e\u73b0 ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u4e32\u884c")," \u64cd\u4f5c"),(0,o.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u5b9a\u65f6\u4efb\u52a1\u90fd\u662f\u91c7\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"\u5e76\u884c")," \u7684\u65b9\u5f0f\uff0c\u4e5f\u5c31\u662f\u4e0d\u4f1a\u7b49\u5f85\u4e0a\u4e00\u6b21\u4efb\u52a1\u5b8c\u6210\uff0c\u5982\u679c\u9700\u8981\u7b49\u5f85\u4e0a\u4e00\u6b21\u4efb\u52a1\u5b8c\u6210\uff0c\u53ef\u4ee5\u4fee\u6539\u4e3a ",(0,o.kt)("inlineCode",{parentName:"p"},"\u4e32\u884c")," \u65b9\u5f0f\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {11,23-24,30,37-38,40}",showLineNumbers:!0,"{11,23-24,30,37-38,40}":!0},'using Furion.TimeCrontab;\n\nnamespace WorkerService;\n\npublic class Worker : BackgroundService\n{\n private readonly ILogger _logger;\n\n private readonly Crontab _crontab;\n\n private bool _isLock = false;\n\n public Worker(ILogger logger)\n {\n _logger = logger;\n _crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);\n }\n\n protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n if (_isLock) goto next;\n _isLock = true;\n\n var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);\n var task = await taskFactory.StartNew(async () =>\n {\n // \u6a21\u62df\u8017\u65f6\u64cd\u4f5c\n await Task.Delay(2000);\n\n _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);\n\n await Task.CompletedTask;\n }, stoppingToken);\n\n // \u7b49\u5f85\u4efb\u52a1\u5b8c\u6210\n await task.ContinueWith(task => _isLock = false);\n\n next:\n await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.UtcNow), stoppingToken);\n }\n }\n}\n')),(0,o.kt)("h2",{id:"255-\u4f9d\u8d56\u6ce8\u5165\u4f7f\u7528"},"25.5 \u4f9d\u8d56\u6ce8\u5165\u4f7f\u7528"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u53ea\u4e3a ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker")," \u63d0\u4f9b\u4e86",(0,o.kt)("strong",{parentName:"p"},"\u5355\u4f8b\u4f5c\u7528\u57df"),"\u7684\u670d\u52a1\u6ce8\u5165\uff0c\u5982\u679c\u9700\u8981\u6ce8\u5165\u77ac\u65f6\u6216\u4f5c\u7528\u57df\u5bf9\u8c61\uff0c\u9700\u624b\u52a8\u521b\u5efa\u4f5c\u7528\u57df\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {7-8,19-29}",showLineNumbers:!0,"":!0,"{7-8,19-29}":!0},"public class Worker : BackgroundService\n{\n // \u65e5\u5fd7\u5bf9\u8c61\n private readonly ILogger _logger;\n\n // \u670d\u52a1\u5de5\u5382\n private readonly IServiceScopeFactory _scopeFactory;\n public Worker(ILogger logger\n , IServiceScopeFactory scopeFactory)\n {\n _logger = logger;\n _scopeFactory = scopeFactory;\n }\n\n protected override Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n using var scope = _scopeFactory.CreateScope();\n var services = scope.ServiceProvider;\n\n // \u83b7\u53d6\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\n var dbContext = Db.GetDbContext(services);\n\n // \u83b7\u53d6\u4ed3\u50a8\n var respository = Db.GetRepository(services);\n\n // \u89e3\u6790\u5176\u4ed6\u670d\u52a1\n var otherService = services.GetService();\n }\n\n return Task.CompletedTask;\n }\n}\n")),(0,o.kt)("h2",{id:"256-\u5982\u4f55\u90e8\u7f72"},"25.6 \u5982\u4f55\u90e8\u7f72"),(0,o.kt)("h3",{id:"2561-\u5171\u5bbf\u4e3b\u65b9\u5f0f"},"25.6.1 \u5171\u5bbf\u4e3b\u65b9\u5f0f"),(0,o.kt)("p",null,"\u5171\u5bbf\u4e3b\u65b9\u5f0f\u65b9\u5f0f\u90e8\u7f72\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u90e8\u7f72\u6240\u5728\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"Web")," \u6216\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u9879\u76ee\u5373\u53ef\uff0c\u4f1a\u81ea\u52a8\u968f\u7740\u9879\u76ee\u542f\u52a8\u81ea\u52a8\u542f\u52a8\u3002"),(0,o.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u5982\u679c\u90e8\u7f72\u5230 ",(0,o.kt)("inlineCode",{parentName:"p"},"IIS")," \u4e2d\uff0c\u53ef\u80fd\u5b58\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u88ab\u56de\u6536\u7684\u60c5\u51b5\uff0c\u6bd5\u7adf\u662f\u548c\u7f51\u7ad9\u540c\u4e00\u4e2a\u5bbf\u4e3b\u3002")),(0,o.kt)("h3",{id:"2562-\u72ec\u7acb-worker-service-\u65b9\u5f0f"},"25.6.2 \u72ec\u7acb ",(0,o.kt)("inlineCode",{parentName:"h3"},"Worker Service")," \u65b9\u5f0f"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Worker Service")," \u652f\u6301\u90e8\u7f72\u5230 ",(0,o.kt)("inlineCode",{parentName:"p"},"Windows Service")," \u4e2d \u6216 ",(0,o.kt)("inlineCode",{parentName:"p"},"Linux \u5b88\u62a4\u8fdb\u7a0b\u4e2d")),(0,o.kt)("hr",null),(0,o.kt)("h4",{id:"\u90e8\u7f72\u5230-windows-service"},"\u90e8\u7f72\u5230 ",(0,o.kt)("inlineCode",{parentName:"h4"},"Windows Service")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"\u7b2c\u4e00\u6b65"),"\uff1a\u5b89\u88c5 ",(0,o.kt)("inlineCode",{parentName:"p"},"Microsoft.Extensions.Hosting.WindowsServices")," \u62d3\u5c55\u5305")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"\u7b2c\u4e8c\u6b65"),"\uff1a\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Program.cs")," \u4e2d\u6dfb\u52a0 ",(0,o.kt)("inlineCode",{parentName:"p"},".UseWindowsService()")))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {15}",showLineNumbers:!0,"":!0,"{15}":!0},"using Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace FurionWorkers\n{\n public class Program\n {\n public static void Main(string[] args)\n {\n CreateHostBuilder(args).Build().Run();\n }\n\n public static IHostBuilder CreateHostBuilder(string[] args) =>\n Host.CreateDefaultBuilder(args)\n .UseWindowsService()\n .Inject()\n .ConfigureServices((hostContext, services) =>\n {\n // \u4ee5\u4e0b\u4ee3\u7801\u53ef\u4e0d\u7528\u7f16\u5199\uff0cFurion \u5df2\u5b9e\u73b0\u81ea\u52a8\u6ce8\u518c Worker;\n // services.AddHostedService();\n });\n }\n}\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"\u7b2c\u4e09\u6b65"),"\uff1a\u53d1\u5e03 ",(0,o.kt)("inlineCode",{parentName:"li"},"Worker Service"),"\uff0c\u53ef\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"li"},"dotnet publish -c Release -o C:\\FurionWorker")," \u547d\u4ee4\u53d1\u5e03\u6216\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"li"},"Visual Studio 2019")," \u53d1\u5e03\u3002")),(0,o.kt)("p",null,"\u72ec\u7acb\u53d1\u5e03\u4e0d\u4f9d\u8d56 SDK \u65b9\u5f0f ",(0,o.kt)("inlineCode",{parentName:"p"},"dotnet publish -c release -r win10-x64 --framework net6.0")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"\u7b2c\u56db\u6b65"),"\uff1a\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"li"},"sc.exe")," \u5de5\u5177\u6765\u7ba1\u7406\u5e76\u521b\u5efa ",(0,o.kt)("inlineCode",{parentName:"li"},"Windows")," \u670d\u52a1\uff0c\u901a\u8fc7 ",(0,o.kt)("strong",{parentName:"li"},"\u7ba1\u7406\u5458\u6a21\u5f0f")," \u5e76\u6253\u5f00\u63a7\u5236\u53f0\uff0c\u8f93\u5165\uff1a")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cmd"},"sc.exe create FurionWorkerServices binPath= C:\\FurionWorker\\FurionWorker.exe\n")),(0,o.kt)("p",null,"\u6ce8\u610f",(0,o.kt)("inlineCode",{parentName:"p"},"="),"\u540e\u9762\u8981\u6709\u4e00\u4e2a\u7a7a\u683c\n\u521b\u5efa\u6210\u529f\u540e\u53ef\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"p"},"sc.exe query FurionWorkerServices")," \u67e5\u770b\u670d\u52a1\u72b6\u6001\u3002"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"\u7b2c\u4e94\u6b65"))),(0,o.kt)("p",null,"\u542f\u52a8\u670d\u52a1\uff1a",(0,o.kt)("inlineCode",{parentName:"p"},"sc.exe start FurionWorkerServices"),"\uff0c\u542f\u52a8\u4e4b\u540e\u5c31\u53ef\u4ee5\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Windows")," \u670d\u52a1\u5de5\u5177\u4e2d\u67e5\u770b\u4e86\u3002"),(0,o.kt)("p",null,"\u505c\u6b62\u670d\u52a1\uff1a",(0,o.kt)("inlineCode",{parentName:"p"},"sc.exe stop NETCoreDemoWorkerService")),(0,o.kt)("p",null,"\u5220\u9664\u670d\u52a1\uff1a",(0,o.kt)("inlineCode",{parentName:"p"},"sc.exe delete NETCoreDemoWorkerService")),(0,o.kt)("admonition",{title:"\u7279\u522b\u63d0\u9192",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0a\u6240\u6709 ",(0,o.kt)("inlineCode",{parentName:"p"},"sc.exe")," \u547d\u4ee4\u5fc5\u987b\u5728 ",(0,o.kt)("strong",{parentName:"p"},"\u7ba1\u7406\u5458")," \u6a21\u5f0f\u4e0b\u8fdb\u884c\u3002\nsc.exe delete NETCoreDemoWorkerService, \u6267\u884c\u5220\u9664\u65f6\u5019, \u628a",(0,o.kt)("inlineCode",{parentName:"p"},"Windows")," \u670d\u52a1\u5de5\u5177\u5173\u95ed, \u5426\u5219, \u7535\u8111\u91cd\u542f\u540e\u624d\u4f1a\u663e\u793a\u5220\u9664;")),(0,o.kt)("hr",null),(0,o.kt)("h4",{id:"\u90e8\u7f72\u5230-linux-\u5b88\u62a4\u7a0b\u5e8f"},"\u90e8\u7f72\u5230 ",(0,o.kt)("inlineCode",{parentName:"h4"},"Linux \u5b88\u62a4\u7a0b\u5e8f")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"\u7b2c\u4e00\u6b65"),"\uff1a\u5b89\u88c5 ",(0,o.kt)("inlineCode",{parentName:"p"},"Microsoft.Extensions.Hosting.Systemd")," \u62d3\u5c55\u5305")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"\u7b2c\u4e8c\u6b65"),"\uff1a\u5728 ",(0,o.kt)("inlineCode",{parentName:"p"},"Program.cs")," \u4e2d\u6dfb\u52a0 ",(0,o.kt)("inlineCode",{parentName:"p"},".UseSystemd()")))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {15}",showLineNumbers:!0,"":!0,"{15}":!0},"using Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace FurionWorkers\n{\n public class Program\n {\n public static void Main(string[] args)\n {\n CreateHostBuilder(args).Build().Run();\n }\n\n public static IHostBuilder CreateHostBuilder(string[] args) =>\n Host.CreateDefaultBuilder(args)\n .UseSystemd()\n .Inject()\n .ConfigureServices((hostContext, services) =>\n {\n // \u4ee5\u4e0b\u4ee3\u7801\u53ef\u4e0d\u7528\u7f16\u5199\uff0cFurion \u5df2\u5b9e\u73b0\u81ea\u52a8\u6ce8\u518c Worker;\n // services.AddHostedService();\n });\n }\n}\n")),(0,o.kt)("p",null,"\u90e8\u7f72\u5230 ",(0,o.kt)("inlineCode",{parentName:"p"},"Linux \u5b88\u62a4\u8fdb\u7a0b")," \u5c31\u662f\u8fd9\u4e48\u7b80\u5355\u3002"),(0,o.kt)("h2",{id:"257-\u5173\u4e8e-windows-\u90e8\u7f72\u65e5\u5fd7\u95ee\u9898"},"25.7 \u5173\u4e8e ",(0,o.kt)("inlineCode",{parentName:"h2"},"Windows")," \u90e8\u7f72\u65e5\u5fd7\u95ee\u9898"),(0,o.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u4f7f\u7528 ",(0,o.kt)("inlineCode",{parentName:"p"},"Windows Services")," \u90e8\u7f72\u540e\uff0c\u65e5\u5fd7\u6587\u4ef6\u53ef\u80fd\u4f1a\u5728\u7cfb\u7edf\u76d8\u7684 ",(0,o.kt)("inlineCode",{parentName:"p"},"System32")," \u4e0b\u3002"),(0,o.kt)("img",{src:(0,a.Z)("img/rjs.jpg")}),(0,o.kt)("h2",{id:"258-\u53cd\u9988\u4e0e\u5efa\u8bae"},"25.8 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,o.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/ab4c4f37.6d3ed28a.js b/handbook/build/assets/js/ab4c4f37.6d3ed28a.js new file mode 100644 index 00000000000..8e384ce9a6e --- /dev/null +++ b/handbook/build/assets/js/ab4c4f37.6d3ed28a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7065],{3905:function(e,t,n){n.d(t,{Zo:function(){return p},kt:function(){return m}});var r=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,l=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=l,T=d["".concat(s,".").concat(m)]||d[m]||c[m]||o;return n?r.createElement(T,a(a({ref:t},p),{},{components:n})):r.createElement(T,a({ref:t},p))}));function m(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=n.length,a=new Array(o);a[0]=d;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:l,a[1]=i;for(var u=2;u child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})),v=null!=T?T:P.map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes}})),y=(0,i.l)(v,(function(e,t){return e.value===t.value}));if(y.length>0)throw new Error('Docusaurus error: Duplicate values "'+y.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.');var q=null===m?m:null!=(t=null!=m?m:null==(n=P.find((function(e){return e.props.default})))?void 0:n.props.value)?t:P[0].props.value;if(null!==q&&!v.some((function(e){return e.value===q})))throw new Error('Docusaurus error: The has a defaultValue "'+q+'" but none of its children has the corresponding value. Available values are: '+v.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");var b=(0,s.U)(),S=b.tabGroupChoices,_=b.setTabGroupChoices,g=(0,l.useState)(q),h=g[0],R=g[1],f=[],C=(0,u.o5)().blockElementScrollPositionUntilNextRender;if(null!=N){var x=S[N];null!=x&&x!==h&&v.some((function(e){return e.value===x}))&&R(x)}var O=function(e){var t=e.currentTarget,n=f.indexOf(t),r=v[n].value;r!==h&&(C(t),R(r),null!=N&&_(N,String(r)))},w=function(e){var t,n=null;switch(e.key){case"Enter":O(e);break;case"ArrowRight":var r,l=f.indexOf(e.currentTarget)+1;n=null!=(r=f[l])?r:f[0];break;case"ArrowLeft":var o,a=f.indexOf(e.currentTarget)-1;n=null!=(o=f[a])?o:f[f.length-1]}null==(t=n)||t.focus()};return l.createElement("div",{className:(0,o.Z)("tabs-container",p)},l.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":d},k)},v.map((function(e){var t=e.value,n=e.label,a=e.attributes;return l.createElement("li",(0,r.Z)({role:"tab",tabIndex:h===t?0:-1,"aria-selected":h===t,key:t,ref:function(e){return f.push(e)},onKeyDown:w,onClick:O},a,{className:(0,o.Z)("tabs__item",c,null==a?void 0:a.className,{"tabs__item--active":h===t})}),null!=n?n:t)}))),a?(0,l.cloneElement)(P.filter((function(e){return e.props.value===h}))[0],{className:"margin-top--md"}):l.createElement("div",{className:"margin-top--md"},P.map((function(e,t){return(0,l.cloneElement)(e,{key:t,hidden:e.props.value!==h})}))))}function m(e){var t=(0,a.Z)();return l.createElement(d,(0,r.Z)({key:String(t)},e))}},2746:function(e,t,n){n.r(t),n.d(t,{assets:function(){return d},contentTitle:function(){return p},default:function(){return N},frontMatter:function(){return u},metadata:function(){return c},toc:function(){return m}});var r=n(3117),l=n(102),o=(n(7294),n(3905)),a=(n(4996),n(5488)),i=n(5162),s=["components"],u={id:"dbcontext-proc",title:"9.13 \u5b58\u50a8\u8fc7\u7a0b\u64cd\u4f5c",sidebar_label:"9.13 \u5b58\u50a8\u8fc7\u7a0b\u64cd\u4f5c"},p=void 0,c={unversionedId:"dbcontext-proc",id:"dbcontext-proc",title:"9.13 \u5b58\u50a8\u8fc7\u7a0b\u64cd\u4f5c",description:"\u63a8\u8350\u4f7f\u7528 \u300a9.17 Sql \u9ad8\u7ea7\u4ee3\u7406\u300b\u4ee3\u66ff\u672c\u7ae0\u8282\u529f\u80fd\u3002Sql \u9ad8\u7ea7\u4ee3\u7406 \u80fd\u591f\u63d0\u4f9b\u66f4\u5bb9\u6613\u4e14\u66f4\u6613\u7ef4\u62a4\u7684\u65b9\u5f0f\u3002",source:"@site/docs/dbcontext-proc.mdx",sourceDirName:".",slug:"/dbcontext-proc",permalink:"/docs/dbcontext-proc",draft:!1,editUrl:"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/docs/dbcontext-proc.mdx",tags:[],version:"current",lastUpdatedBy:"MonkSoul",lastUpdatedAt:1651894493,formattedLastUpdatedAt:"May 7, 2022",frontMatter:{id:"dbcontext-proc",title:"9.13 \u5b58\u50a8\u8fc7\u7a0b\u64cd\u4f5c",sidebar_label:"9.13 \u5b58\u50a8\u8fc7\u7a0b\u64cd\u4f5c"},sidebar:"docs",previous:{title:"9.12 \u89c6\u56fe\u64cd\u4f5c",permalink:"/docs/dbcontext-view"},next:{title:"9.14 \u51fd\u6570\u64cd\u4f5c",permalink:"/docs/dbcontext-function"}},d={},m=[{value:"9.13.1 \u5173\u4e8e\u5b58\u50a8\u8fc7\u7a0b",id:"9131-\u5173\u4e8e\u5b58\u50a8\u8fc7\u7a0b",level:2},{value:"9.13.2.0 \u652f\u6301\u5b58\u50a8\u8fc7\u7a0b\u7684\u6570\u636e\u5e93",id:"91320-\u652f\u6301\u5b58\u50a8\u8fc7\u7a0b\u7684\u6570\u636e\u5e93",level:3},{value:"9.13.2 \u5b58\u50a8\u8fc7\u7a0b\u4f7f\u7528",id:"9132-\u5b58\u50a8\u8fc7\u7a0b\u4f7f\u7528",level:2},{value:"9.13.2.1 \u521d\u59cb\u5316\u65b9\u5f0f",id:"91321-\u521d\u59cb\u5316\u65b9\u5f0f",level:3},{value:"9.13.2.2 \u8fd4\u56de DataTable",id:"91322-\u8fd4\u56de-datatable",level:3},{value:"9.13.2.3 \u8fd4\u56de DataSet",id:"91323-\u8fd4\u56de-dataset",level:3},{value:"9.13.2.4 \u8fd4\u56de List<T>",id:"91324-\u8fd4\u56de-listt",level:3},{value:"9.13.2.5 \u8fd4\u56de Tuple<T1,...T8>",id:"91325-\u8fd4\u56de-tuplet1t8",level:3},{value:"9.13.2.6 \u8fd4\u56de \u5355\u884c\u5355\u5217 object",id:"91326-\u8fd4\u56de-\u5355\u884c\u5355\u5217-object",level:3},{value:"9.13.2.7 \u8fd4\u56de \u5355\u884c\u5355\u5217 <T>",id:"91327-\u8fd4\u56de-\u5355\u884c\u5355\u5217-t",level:3},{value:"9.13.2.8 \u6267\u884c\u4f46\u65e0\u8fd4\u56de",id:"91328-\u6267\u884c\u4f46\u65e0\u8fd4\u56de",level:3},{value:"9.13.3 \u6267\u884c\u590d\u6742\u5b58\u50a8\u8fc7\u7a0b",id:"9133-\u6267\u884c\u590d\u6742\u5b58\u50a8\u8fc7\u7a0b",level:2},{value:"9.13.3.1 \u521b\u5efa\u53c2\u6570\u6a21\u578b",id:"91331-\u521b\u5efa\u53c2\u6570\u6a21\u578b",level:3},{value:"9.13.3.2 \u6267\u884c\u590d\u6742\u5b58\u50a8\u8fc7\u7a0b",id:"91332-\u6267\u884c\u590d\u6742\u5b58\u50a8\u8fc7\u7a0b",level:3},{value:"9.13.3 \u5173\u4e8e [DbParameter]",id:"9133-\u5173\u4e8e-dbparameter",level:2},{value:"9.13.4 \u5173\u4e8e ProcedureOutputResult",id:"9134-\u5173\u4e8e-procedureoutputresult",level:2},{value:"9.13.5 \u5b58\u50a8\u8fc7\u7a0b\u53c2\u6570",id:"9135-\u5b58\u50a8\u8fc7\u7a0b\u53c2\u6570",level:2},{value:"9.13.6 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"9136-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],T={toc:m};function N(e){var t=e.components,n=(0,l.Z)(e,s);return(0,o.kt)("wrapper",(0,r.Z)({},T,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("admonition",{title:"\u6e29\u99a8\u63d0\u793a",type:"important"},(0,o.kt)("p",{parentName:"admonition"},"\u63a8\u8350\u4f7f\u7528 \u300a",(0,o.kt)("a",{parentName:"p",href:"/docs/dbcontext-sql-proxy"},"9.17 Sql \u9ad8\u7ea7\u4ee3\u7406"),"\u300b\u4ee3\u66ff\u672c\u7ae0\u8282\u529f\u80fd\u3002",(0,o.kt)("inlineCode",{parentName:"p"},"Sql \u9ad8\u7ea7\u4ee3\u7406")," \u80fd\u591f\u63d0\u4f9b\u66f4\u5bb9\u6613\u4e14\u66f4\u6613\u7ef4\u62a4\u7684\u65b9\u5f0f\u3002")),(0,o.kt)("h2",{id:"9131-\u5173\u4e8e\u5b58\u50a8\u8fc7\u7a0b"},"9.13.1 \u5173\u4e8e\u5b58\u50a8\u8fc7\u7a0b"),(0,o.kt)("p",null,"\u5f15\u7528\u767e\u5ea6\u767e\u79d1\uff1a"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"\u5b58\u50a8\u8fc7\u7a0b\uff08Stored Procedure\uff09\u662f\u5728\u5927\u578b\u6570\u636e\u5e93\u7cfb\u7edf\u4e2d\uff0c\u4e00\u7ec4\u4e3a\u4e86\u5b8c\u6210\u7279\u5b9a\u529f\u80fd\u7684 SQL \u8bed\u53e5\u96c6\uff0c\u5b83\u5b58\u50a8\u5728\u6570\u636e\u5e93\u4e2d\uff0c\u4e00\u6b21\u7f16\u8bd1\u540e\u6c38\u4e45\u6709\u6548\uff0c\u7528\u6237\u901a\u8fc7\u6307\u5b9a\u5b58\u50a8\u8fc7\u7a0b\u7684\u540d\u5b57\u5e76\u7ed9\u51fa\u53c2\u6570\uff08\u5982\u679c\u8be5\u5b58\u50a8\u8fc7\u7a0b\u5e26\u6709\u53c2\u6570\uff09\u6765\u6267\u884c\u5b83\u3002"),(0,o.kt)("p",{parentName:"blockquote"},"\u5b58\u50a8\u8fc7\u7a0b\u662f\u6570\u636e\u5e93\u4e2d\u7684\u4e00\u4e2a\u91cd\u8981\u5bf9\u8c61\u3002\u5728\u6570\u636e\u91cf\u7279\u522b\u5e9e\u5927\u7684\u60c5\u51b5\u4e0b\u5229\u7528\u5b58\u50a8\u8fc7\u7a0b\u80fd\u8fbe\u5230\u500d\u901f\u7684\u6548\u7387\u63d0\u5347\u3002")),(0,o.kt)("p",null,"\u7b80\u5355\u6765\u8bf4\uff0c\u5b58\u50a8\u8fc7\u7a0b\u5c31\u662f\u5173\u7cfb\u578b\u6570\u636e\u5e93\u4e2d\uff08",(0,o.kt)("inlineCode",{parentName:"p"},"Sqlite")," \u9664\u5916\uff09\u4e2d\u7f16\u5199\u903b\u8f91\u7684\u51fd\u6570/\u65b9\u6cd5\uff0c\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u53ef\u4ee5\u5c06 ",(0,o.kt)("inlineCode",{parentName:"p"},"sql")," \u7f16\u8bd1\u7f13\u5b58\u8d77\u6765\uff0c\u5927\u5927\u63d0\u9ad8\u5b58\u50a8\u8fc7\u7a0b\u7684\u6267\u884c\u6548\u7387\u3002"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"\u8fd9\u91cc\u4e0d\u8ba8\u8bba\u5b58\u50a8\u8fc7\u7a0b\u7684\u4f18\u7f3a\u70b9\u3002")),(0,o.kt)("h3",{id:"91320-\u652f\u6301\u5b58\u50a8\u8fc7\u7a0b\u7684\u6570\u636e\u5e93"},"9.13.2.0 \u652f\u6301\u5b58\u50a8\u8fc7\u7a0b\u7684\u6570\u636e\u5e93"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"SqlServer"),(0,o.kt)("th",{parentName:"tr",align:null},"Sqlite"),(0,o.kt)("th",{parentName:"tr",align:null},"Cosmos"),(0,o.kt)("th",{parentName:"tr",align:null},"InMemoryDatabase"),(0,o.kt)("th",{parentName:"tr",align:null},"MySql"),(0,o.kt)("th",{parentName:"tr",align:null},"PostgreSQL"),(0,o.kt)("th",{parentName:"tr",align:null},"Oracle"),(0,o.kt)("th",{parentName:"tr",align:null},"Firebird"),(0,o.kt)("th",{parentName:"tr",align:null},"Dm"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"\u2714"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null},"\u2714"),(0,o.kt)("td",{parentName:"tr",align:null}),(0,o.kt)("td",{parentName:"tr",align:null},"\u2714"),(0,o.kt)("td",{parentName:"tr",align:null},"\u2714"),(0,o.kt)("td",{parentName:"tr",align:null},"\u2714"),(0,o.kt)("td",{parentName:"tr",align:null},"\u2714"),(0,o.kt)("td",{parentName:"tr",align:null},"\u2714")))),(0,o.kt)("h2",{id:"9132-\u5b58\u50a8\u8fc7\u7a0b\u4f7f\u7528"},"9.13.2 \u5b58\u50a8\u8fc7\u7a0b\u4f7f\u7528"),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u63d0\u4f9b\u4e86\u591a\u79cd\u5b58\u50a8\u8fc7\u7a0b\u64cd\u4f5c\u65b9\u5f0f\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"ISqlRepository"),"\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"Sql")," \u64cd\u4f5c\u4ed3\u50a8\uff0c\u53ef\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"li"},"\u4f9d\u8d56\u6ce8\u5165")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"ISqlDispatchProxy"),"\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"Sql")," \u4ee3\u7406\u65b9\u5f0f\uff08\u9ad8\u7ea7\u7528\u6cd5\uff0c\u63a8\u8350\uff09"),(0,o.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u4efb\u610f\u5b9e\u4f53\u4ed3\u50a8\u64cd\u4f5c\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"personRepository.SqlProcedureQuery(procName)")),(0,o.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u5b57\u7b26\u4e32\u62d3\u5c55\u65b9\u6cd5\uff1a",(0,o.kt)("inlineCode",{parentName:"li"},"procName.SqlProcedureQuery()")),(0,o.kt)("li",{parentName:"ul"},"\u901a\u8fc7 ",(0,o.kt)("inlineCode",{parentName:"li"},"repository.Sql().SqlProcedureQuery()")," \u65b9\u5f0f")),(0,o.kt)("h3",{id:"91321-\u521d\u59cb\u5316\u65b9\u5f0f"},"9.13.2.1 \u521d\u59cb\u5316\u65b9\u5f0f"),(0,o.kt)(a.Z,{defaultValue:"one",values:[{label:"ISqlRepository",value:"one"},{label:"ISqlDispatchProxy",value:"two"},{label:"\u5b9e\u4f53\u4ed3\u50a8\u65b9\u5f0f",value:"three"},{label:"\u5b57\u7b26\u4e32\u62d3\u5c55\u65b9\u5f0f",value:"four"}],mdxType:"Tabs"},(0,o.kt)(i.Z,{value:"one",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,9-12}",showLineNumbers:!0,"":!0,"{1,9-12}":!0},"using Furion.DatabaseAccessor;\nusing Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [DynamicApiController]\n public class SqlService\n {\n private ISqlRepository _sqlRepository;\n public SqlService(ISqlRepository sqlRepository)\n {\n _sqlRepository = sqlRepository;\n }\n }\n}\n"))),(0,o.kt)(i.Z,{value:"two",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,7,9-10}",showLineNumbers:!0,"":!0,"{2,7,9-10}":!0},'using Furion.Core;\nusing Furion.DatabaseAccessor;\nusing System.Collections.Generic;\n\nnamespace Furion.Application\n{\n public interface ISqlExecuteProxy : ISqlDispatchProxy\n {\n [SqlProcedure("proc_GetPersons")]\n List GetPersons(string keyword);\n }\n}\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {9-12}",showLineNumbers:!0,"":!0,"{9-12}":!0},"using Furion.DatabaseAccessor;\nusing Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [DynamicApiController]\n public class SqlService\n {\n private ISqlExecuteProxy _sqlExecuteProxy;\n public SqlService(ISqlExecuteProxy sqlExecuteProxy)\n {\n _sqlExecuteProxy = sqlExecuteProxy;\n }\n }\n}\n"))),(0,o.kt)(i.Z,{value:"three",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var persons = personRepository.SqlProcedureQuery("proc_GetPersons");\n'))),(0,o.kt)(i.Z,{value:"four",mdxType:"TabItem"},(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var persons = "proc_GetPersons".SqlProcedureQuery();\n')))),(0,o.kt)("h3",{id:"91322-\u8fd4\u56de-datatable"},"9.13.2.2 \u8fd4\u56de ",(0,o.kt)("inlineCode",{parentName:"h3"},"DataTable")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ISqlRepository \u65b9\u6cd5\nvar dataTable = _sqlRepository.SqlProcedureQuery("proc_GetPersons");\n\n// ISqlDispatchProxy \u65b9\u5f0f\nvar dataTable = _sqlExecuteProxy.GetPersons(); // \u63a8\u8350\u65b9\u5f0f\n\n// \u5b9e\u4f53\u4ed3\u50a8\u65b9\u5f0f\nvar dataTable = _personRepository.SqlProcedureQuery("proc_GetPersons");\n\n// IRepository \u975e\u6cdb\u578b\u65b9\u5f0f\nvar dataTable = _repository.Sql().SqlProcedureQuery("proc_GetPersons");\n\n// \u53d8\u6001\u61d2\u4eba\u65b9\u5f0f\uff0c\u76f4\u63a5\u901a\u8fc7\u5b58\u50a8\u8fc7\u7a0b\u540d\u6267\u884c\nvar dataTable = "proc_GetPersons".SqlProcedureQuery();\n')),(0,o.kt)("admonition",{title:"\u5173\u4e8e\u5f02\u6b65",type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u6bcf\u4e00\u4e2a\u6570\u636e\u5e93\u64cd\u4f5c\u90fd\u652f\u6301\u5f02\u6b65\u65b9\u5f0f\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u5c31\u4e0d\u5217\u4e3e\u5f02\u6b65\u65b9\u5f0f\u4e86\u3002")),(0,o.kt)("h3",{id:"91323-\u8fd4\u56de-dataset"},"9.13.2.3 \u8fd4\u56de ",(0,o.kt)("inlineCode",{parentName:"h3"},"DataSet")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ISqlRepository \u65b9\u6cd5\nvar dataSet = _sqlRepository.SqlProcedureQueries("proc_GetPersons");\n\n// ISqlDispatchProxy \u65b9\u5f0f\nvar dataSet = _sqlExecuteProxy.GetPersons(); // \u63a8\u8350\u65b9\u5f0f\n\n// \u5b9e\u4f53\u4ed3\u50a8\u65b9\u5f0f\nvar dataSet = _personRepository.SqlProcedureQueries("proc_GetPersons");\n\n// IRepository \u975e\u6cdb\u578b\u65b9\u5f0f\nvar dataSet = _repository.Sql().SqlProcedureQueries("proc_GetPersons");\n\n// \u53d8\u6001\u61d2\u4eba\u65b9\u5f0f\uff0c\u76f4\u63a5\u901a\u8fc7\u5b58\u50a8\u8fc7\u7a0b\u540d\u6267\u884c\nvar dataSet = "proc_GetPersons".SqlProcedureQueries();\n')),(0,o.kt)("admonition",{title:"\u5173\u4e8e\u5f02\u6b65",type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u6bcf\u4e00\u4e2a\u6570\u636e\u5e93\u64cd\u4f5c\u90fd\u652f\u6301\u5f02\u6b65\u65b9\u5f0f\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u5c31\u4e0d\u5217\u4e3e\u5f02\u6b65\u65b9\u5f0f\u4e86\u3002")),(0,o.kt)("h3",{id:"91324-\u8fd4\u56de-listt"},"9.13.2.4 \u8fd4\u56de ",(0,o.kt)("inlineCode",{parentName:"h3"},"List")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ISqlRepository \u65b9\u6cd5\nvar list = _sqlRepository.SqlProcedureQuery("proc_GetPersons");\n\n// ISqlDispatchProxy \u65b9\u5f0f\nvar list = _sqlExecuteProxy.GetPersons(); // \u63a8\u8350\u65b9\u5f0f\n\n// \u5b9e\u4f53\u4ed3\u50a8\u65b9\u5f0f\nvar list = _personRepository.SqlProcedureQuery("proc_GetPersons");\n\n// IRepository \u975e\u6cdb\u578b\u65b9\u5f0f\nvar list = _repository.Sql().SqlProcedureQuery("proc_GetPersons");\n\n// \u53d8\u6001\u61d2\u4eba\u65b9\u5f0f\uff0c\u76f4\u63a5\u901a\u8fc7\u5b58\u50a8\u8fc7\u7a0b\u540d\u6267\u884c\nvar list = "proc_GetPersons".SqlProcedureQuery();\n')),(0,o.kt)("admonition",{title:"\u5173\u4e8e\u5f02\u6b65",type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u6bcf\u4e00\u4e2a\u6570\u636e\u5e93\u64cd\u4f5c\u90fd\u652f\u6301\u5f02\u6b65\u65b9\u5f0f\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u5c31\u4e0d\u5217\u4e3e\u5f02\u6b65\u65b9\u5f0f\u4e86\u3002")),(0,o.kt)("h3",{id:"91325-\u8fd4\u56de-tuplet1t8"},"9.13.2.5 \u8fd4\u56de ",(0,o.kt)("inlineCode",{parentName:"h3"},"Tuple")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u5927\u5927\u5229\u7528\u4e86 ",(0,o.kt)("inlineCode",{parentName:"p"},"Tuple")," \u7684\u7279\u6027\uff0c\u5c06\u8fd4\u56de\u591a\u4e2a\u7ed3\u679c\u96c6\u8f6c\u6210 ",(0,o.kt)("inlineCode",{parentName:"p"},"Tuple")," \u7c7b\u578b"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ISqlRepository \u65b9\u6cd5\n\n// \u8fd4\u56de\u4e00\u4e2a\u7ed3\u679c\u96c6\nvar list1 = _sqlRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e24\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2) = _sqlRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e09\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3) = _sqlRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u56db\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4) = _sqlRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e94\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5) = _sqlRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u516d\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6) = _sqlRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e03\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6, list7) = _sqlRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u516b\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6, list7, list8) = _sqlRepository.SqlProcedureQueries("proc_GetPersons");\n\n// ==================================\n\n// ISqlDispatchProxy \u65b9\u5f0f\uff0c\u63a8\u8350\u65b9\u5f0f\uff0c\u81ea\u52a8\u5904\u7406\u591a\u4e2a\u7ed3\u679c\u96c6\n\n// \u8fd4\u56de\u4e00\u4e2a\u7ed3\u679c\u96c6\nvar list1 = _sqlRepository.GetDatas();\n\n// \u8fd4\u56de\u4e24\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2) = _sqlRepository.GetDatas();\n\n// \u8fd4\u56de\u4e09\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3) = _sqlRepository.GetDatas();\n\n// \u8fd4\u56de\u56db\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4) = _sqlRepository.GetDatas();\n\n// \u8fd4\u56de\u4e94\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5) = _sqlRepository.GetDatas();\n\n// \u8fd4\u56de\u516d\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6) = _sqlRepository.GetDatas();\n\n// \u8fd4\u56de\u4e03\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6, list7) = _sqlRepository.GetDatas();\n\n// \u8fd4\u56de\u516b\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6, list7, list8) = _sqlRepository.GetDatas();\n\n// ==================================\n\n// \u5b9e\u4f53\u4ed3\u50a8\u65b9\u5f0f\n\n// \u8fd4\u56de\u4e00\u4e2a\u7ed3\u679c\u96c6\nvar list1 = _personRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e24\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2) = _personRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e09\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3) = _personRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u56db\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4) = _personRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e94\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5) = _personRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u516d\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6) = _personRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e03\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6, list7) = _personRepository.SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u516b\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6, list7, list8) = _personRepository.SqlProcedureQueries("proc_GetPersons");\n\n// ==================================\n\n// IRepository \u975e\u6cdb\u578b\u65b9\u5f0f\n\n// \u8fd4\u56de\u4e00\u4e2a\u7ed3\u679c\u96c6\nvar list1 = _repository.Sql().SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e24\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2) = _repository.Sql().SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e09\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3) = _repository.Sql().SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u56db\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4) = _repository.Sql().SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e94\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5) = _repository.Sql().SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u516d\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6) = _repository.Sql().SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u4e03\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6, list7) = _repository.Sql().SqlProcedureQueries("proc_GetPersons");\n\n// \u8fd4\u56de\u516b\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6, list7, list8) = _repository.Sql().SqlProcedureQueries("proc_GetPersons");\n\n// ==================================\n\n// \u53d8\u6001\u61d2\u4eba\u65b9\u5f0f\uff0c\u76f4\u63a5\u901a\u8fc7\u5b58\u50a8\u8fc7\u7a0b\u540d\u6267\u884c\n\n// \u8fd4\u56de\u4e00\u4e2a\u7ed3\u679c\u96c6\nvar list1 = "proc_GetPersons".SqlProcedureQueries();\n\n// \u8fd4\u56de\u4e24\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2) = "proc_GetPersons".SqlProcedureQueries();\n\n// \u8fd4\u56de\u4e09\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3) = "proc_GetPersons".SqlProcedureQueries();\n\n// \u8fd4\u56de\u56db\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4) = "proc_GetPersons".SqlProcedureQueries();\n\n// \u8fd4\u56de\u4e94\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5) = "proc_GetPersons".SqlProcedureQueries();\n\n// \u8fd4\u56de\u516d\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6) = "proc_GetPersons".SqlProcedureQueries();\n\n// \u8fd4\u56de\u4e03\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6, list7) = "proc_GetPersons".SqlProcedureQueries();\n\n// \u8fd4\u56de\u516b\u4e2a\u7ed3\u679c\u96c6\nvar (list1, list2, list3, list4, list5, list6, list7, list8) = "proc_GetPersons".SqlProcedureQueries();\n')),(0,o.kt)("admonition",{title:"\u5173\u4e8e\u5f02\u6b65",type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u6bcf\u4e00\u4e2a\u6570\u636e\u5e93\u64cd\u4f5c\u90fd\u652f\u6301\u5f02\u6b65\u65b9\u5f0f\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u5c31\u4e0d\u5217\u4e3e\u5f02\u6b65\u65b9\u5f0f\u4e86\u3002")),(0,o.kt)("h3",{id:"91326-\u8fd4\u56de-\u5355\u884c\u5355\u5217-object"},"9.13.2.6 \u8fd4\u56de ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u5355\u884c\u5355\u5217 object")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ISqlRepository \u65b9\u6cd5\nvar value = _sqlRepository.SqlProcedureScalar("proc_GetName");\n\n// ISqlDispatchProxy \u65b9\u5f0f\nvar value = _sqlExecuteProxy.GetName(); // \u63a8\u8350\u65b9\u5f0f\n\n// \u5b9e\u4f53\u4ed3\u50a8\u65b9\u5f0f\nvar value = _personRepository.SqlProcedureScalar("proc_GetName");\n\n// IRepository \u975e\u6cdb\u578b\u65b9\u5f0f\nvar value = _repository.Sql().SqlProcedureScalar("proc_GetName");\n\n// \u53d8\u6001\u61d2\u4eba\u65b9\u5f0f\uff0c\u76f4\u63a5\u901a\u8fc7\u5b58\u50a8\u8fc7\u7a0b\u540d\u6267\u884c\nvar value = "proc_GetName".SqlProcedureScalar();\n')),(0,o.kt)("admonition",{title:"\u5173\u4e8e\u5f02\u6b65",type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u6bcf\u4e00\u4e2a\u6570\u636e\u5e93\u64cd\u4f5c\u90fd\u652f\u6301\u5f02\u6b65\u65b9\u5f0f\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u5c31\u4e0d\u5217\u4e3e\u5f02\u6b65\u65b9\u5f0f\u4e86\u3002")),(0,o.kt)("h3",{id:"91327-\u8fd4\u56de-\u5355\u884c\u5355\u5217-t"},"9.13.2.7 \u8fd4\u56de ",(0,o.kt)("inlineCode",{parentName:"h3"},"\u5355\u884c\u5355\u5217 ")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ISqlRepository \u65b9\u6cd5\nvar value = _sqlRepository.SqlProcedureScalar("proc_GetName");\n\n// ISqlDispatchProxy \u65b9\u5f0f\nvar value = _sqlExecuteProxy.GetName(); // \u63a8\u8350\u65b9\u5f0f\n\n// \u5b9e\u4f53\u4ed3\u50a8\u65b9\u5f0f\nvar value = _personRepository.SqlProcedureScalar("proc_GetName");\n\n// IRepository \u975e\u6cdb\u578b\u65b9\u5f0f\nvar value = _repository.Sql().SqlProcedureScalar("proc_GetName");\n\n// \u53d8\u6001\u61d2\u4eba\u65b9\u5f0f\uff0c\u76f4\u63a5\u901a\u8fc7\u5b58\u50a8\u8fc7\u7a0b\u540d\u6267\u884c\nvar value = "proc_GetName".SqlProcedureScalar();\n')),(0,o.kt)("admonition",{title:"\u5173\u4e8e\u5f02\u6b65",type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u6bcf\u4e00\u4e2a\u6570\u636e\u5e93\u64cd\u4f5c\u90fd\u652f\u6301\u5f02\u6b65\u65b9\u5f0f\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u5c31\u4e0d\u5217\u4e3e\u5f02\u6b65\u65b9\u5f0f\u4e86\u3002")),(0,o.kt)("h3",{id:"91328-\u6267\u884c\u4f46\u65e0\u8fd4\u56de"},"9.13.2.8 \u6267\u884c\u4f46\u65e0\u8fd4\u56de"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ISqlRepository \u65b9\u6cd5\n_sqlRepository.SqlProcedureNonQuery("proc_UpdateData");\n\n// ISqlDispatchProxy \u65b9\u5f0f\n_sqlExecuteProxy.UpdateData(); // \u63a8\u8350\u65b9\u5f0f\n\n// \u5b9e\u4f53\u4ed3\u50a8\u65b9\u5f0f\n_personRepository.SqlProcedureNonQuery("proc_UpdateData");\n\n// IRepository \u975e\u6cdb\u578b\u65b9\u5f0f\n_repository.Sql().SqlProcedureNonQuery("proc_UpdateData");\n\n// \u53d8\u6001\u61d2\u4eba\u65b9\u5f0f\uff0c\u76f4\u63a5\u901a\u8fc7\u5b58\u50a8\u8fc7\u7a0b\u540d\u6267\u884c\n"proc_UpdateData".SqlProcedureNonQuery();\n')),(0,o.kt)("admonition",{title:"\u5173\u4e8e\u5f02\u6b65",type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u6bcf\u4e00\u4e2a\u6570\u636e\u5e93\u64cd\u4f5c\u90fd\u652f\u6301\u5f02\u6b65\u65b9\u5f0f\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u5c31\u4e0d\u5217\u4e3e\u5f02\u6b65\u65b9\u5f0f\u4e86\u3002")),(0,o.kt)("h2",{id:"9133-\u6267\u884c\u590d\u6742\u5b58\u50a8\u8fc7\u7a0b"},"9.13.3 \u6267\u884c\u590d\u6742\u5b58\u50a8\u8fc7\u7a0b"),(0,o.kt)("p",null,"\u5728\u5b58\u50a8\u8fc7\u7a0b\u4e2d\uff0c\u6709\u4e00\u79cd\u4f8b\u5b50\u975e\u5e38\u590d\u6742\uff0c\u90a3\u5c31\u662f\u65e2\u6709 ",(0,o.kt)("inlineCode",{parentName:"p"},"INPUT")," \u53c2\u6570\uff0c\u53c8\u6709 ",(0,o.kt)("inlineCode",{parentName:"p"},"OUTPUT")," \u53c2\u6570\uff0c\u8fd8\u6709 ",(0,o.kt)("inlineCode",{parentName:"p"},"RETURN")," \u53c2\u6570\uff0c\u540c\u65f6\u8fd8\u8f93\u51fa \u7ed3\u679c\u96c6 \ud83d\udca5\uff0c\u5982\uff1a"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-sql",metastring:"showLineNumbers {3,4,10-12,15-17,22}",showLineNumbers:!0,"":!0,"{3,4,10-12,15-17,22}":!0},"CREATE PROC PROC_Output\n @Id INT, // \u8f93\u5165\u53c2\u6570\n @Name NVARCHAR(32) OUTPUT, // \u8f93\u51fa\u53c2\u6570\uff0c\u8fd8\u5e26\u957f\u5ea6\n @Age INT OUTPUT // \u8f93\u51fa\u53c2\u6570\nAS\nBEGIN\n SET @Name = 'Furion Output';\n\n // \u8f93\u51fa\u7ed3\u679c\u96c6\n SELECT *\n FROM dbo.Test\n WHERE Id > @Id;\n\n // \u8f93\u51fa\u7ed3\u679c\u96c6\n SELECT TOP 10\n *\n FROM dbo.Test;\n\n SET @Age = 27;\n\n // \u5e26 RETURN \u8fd4\u56de\n RETURN 10;\nEND;\n")),(0,o.kt)("h3",{id:"91331-\u521b\u5efa\u53c2\u6570\u6a21\u578b"},"9.13.3.1 \u521b\u5efa\u53c2\u6570\u6a21\u578b"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,10,13,16}",showLineNumbers:!0,"":!0,"{1,10,13,16}":!0},"using Furion.DatabaseAccessor;\nusing System.Data;\n\nnamespace Furion.Application\n{\n public class ProcOutputModel\n {\n public int Id { get; set; } // \u8f93\u5165\u53c2\u6570\n\n [DbParameter(ParameterDirection.Output, Size = 32)]\n public string Name { get; set; } // \u8f93\u51fa\u53c2\u6570\n\n [DbParameter(ParameterDirection.Output)]\n public int Age { get; set; } // \u8f93\u51fa\u53c2\u6570\n\n [DbParameter(ParameterDirection.ReturnValue)]\n public int ReturnValue { get; set; } // \u8fd4\u56de\u503c\n }\n}\n")),(0,o.kt)("h3",{id:"91332-\u6267\u884c\u590d\u6742\u5b58\u50a8\u8fc7\u7a0b"},"9.13.3.2 \u6267\u884c\u590d\u6742\u5b58\u50a8\u8fc7\u7a0b"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"}," ",(0,o.kt)("inlineCode",{parentName:"strong"},"DataSet")," ")," \u65b9\u5f0f")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ISqlRepository \u65b9\u6cd5\nProcedureOutputResult result = _sqlRepository.SqlProcedureOutput("proc_Complex", new ProcOutputModel{});\n\n// ISqlDispatchProxy \u65b9\u5f0f\nProcedureOutputResult result = _sqlExecuteProxy.Complex(new ProcOutputModel{}); // \u63a8\u8350\u65b9\u5f0f\n\n// \u5b9e\u4f53\u4ed3\u50a8\u65b9\u5f0f\nProcedureOutputResult result = _personRepository.SqlProcedureOutput("proc_Complex", new ProcOutputModel{});\n\n// IRepository \u975e\u6cdb\u578b\u65b9\u5f0f\nProcedureOutputResult result = _repository.Sql().SqlProcedureOutput("proc_Complex", new ProcOutputModel{});\n\n// \u53d8\u6001\u61d2\u4eba\u65b9\u5f0f\uff0c\u76f4\u63a5\u901a\u8fc7\u5b58\u50a8\u8fc7\u7a0b\u540d\u6267\u884c\nProcedureOutputResult result = "proc_Complex".SqlProcedureOutput(new ProcOutputModel{});\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u83b7\u53d6 OUTPUT \u53c2\u6570\u503c\nvar outputs = result.OutputValues;\n\n// \u83b7\u53d6 RETURN \u8fd4\u56de\u503c\nvar reval = result.ReturnValue;\n\n// \u83b7\u53d6\u8fd4\u56de\u7ed3\u679c\u96c6\nvar dataSet = result.Result;\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Tuple")," \u65b9\u5f0f")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ISqlRepository \u65b9\u6cd5\nProcedureOutputResult<(List, List)> result = _sqlRepository.SqlProcedureOutput<(List, List)>("proc_Complex", new ProcOutputModel{});\n\n// ISqlDispatchProxy \u65b9\u5f0f\nProcedureOutputResult<(List, List)> result = _sqlExecuteProxy.Complex(new ProcOutputModel{}); // \u63a8\u8350\u65b9\u5f0f\n\n// \u5b9e\u4f53\u4ed3\u50a8\u65b9\u5f0f\nProcedureOutputResult<(List, List)> result = _personRepository.SqlProcedureOutput<(List, List)>("proc_Complex", new ProcOutputModel{});\n\n// IRepository \u975e\u6cdb\u578b\u65b9\u5f0f\nProcedureOutputResult<(List, List)> result = _repository.Sql().SqlProcedureOutput<(List, List)>("proc_Complex", new ProcOutputModel{});\n\n// \u53d8\u6001\u61d2\u4eba\u65b9\u5f0f\uff0c\u76f4\u63a5\u901a\u8fc7\u5b58\u50a8\u8fc7\u7a0b\u540d\u6267\u884c\nProcedureOutputResult<(List, List)> result = "proc_Complex".SqlProcedureOutput<(List, List)>(new ProcOutputModel{});\n')),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u83b7\u53d6 OUTPUT \u53c2\u6570\u503c\nvar outputs = result.OutputValues;\n\n// \u83b7\u53d6 RETURN \u8fd4\u56de\u503c\nvar reval = result.ReturnValue;\n\n// \u83b7\u53d6\u8fd4\u56de\u7ed3\u679c\u96c6\nvar (list1,list2) = result.Result;\n")),(0,o.kt)("admonition",{title:"\u5173\u4e8e\u5f02\u6b65",type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u6bcf\u4e00\u4e2a\u6570\u636e\u5e93\u64cd\u4f5c\u90fd\u652f\u6301\u5f02\u6b65\u65b9\u5f0f\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u5c31\u4e0d\u5217\u4e3e\u5f02\u6b65\u65b9\u5f0f\u4e86\u3002")),(0,o.kt)("h2",{id:"9133-\u5173\u4e8e-dbparameter"},"9.13.3 \u5173\u4e8e ",(0,o.kt)("inlineCode",{parentName:"h2"},"[DbParameter]")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"[DbParameter]")," \u7279\u6027\u662f\u7528\u6765\u6807\u6ce8 ",(0,o.kt)("inlineCode",{parentName:"p"},"Sql"),"\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"\u51fd\u6570"),"\uff0c",(0,o.kt)("inlineCode",{parentName:"p"},"\u5b58\u50a8\u8fc7\u7a0b")," \u53c2\u6570\u7684\uff0c\u53ef\u914d\u7f6e\u5c5e\u6027\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Direction"),"\uff1a\u8bbe\u7f6e\u53c2\u6570\u65b9\u5411\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"ParameterDirection")," \u679a\u4e3e\u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,o.kt)("inlineCode",{parentName:"li"},"ParameterDirection.Input")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"DbType"),"\uff1a\u8bbe\u7f6e\u53c2\u6570\u7c7b\u578b\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"DbType")," \u679a\u4e3e\u7c7b\u578b\uff0c\u65e0\u9ed8\u8ba4"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Size"),"\uff1a\u8bbe\u7f6e\u53c2\u6570\u957f\u5ea6\u7684\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"int")," \u7c7b\u578b")),(0,o.kt)("p",null,"\u5176\u4e2d ",(0,o.kt)("inlineCode",{parentName:"p"},"Direction")," \u5c5e\u6027\u662f\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\u53c2\u6570\u3002"),(0,o.kt)("h2",{id:"9134-\u5173\u4e8e-procedureoutputresult"},"9.13.4 \u5173\u4e8e ",(0,o.kt)("inlineCode",{parentName:"h2"},"ProcedureOutputResult")),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"ProcedureOutputResult")," \u548c ",(0,o.kt)("inlineCode",{parentName:"p"},"ProcedureOutputResult")," \u662f\u590d\u6742\u5b58\u50a8\u8fc7\u7a0b\u6267\u884c\u8fd4\u56de\u6a21\u578b\u7c7b\uff0c\u6709\u4ee5\u4e0b\u5c5e\u6027\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"OutputValues"),"\uff1a\u591a\u4e2a\u8f93\u51fa\u503c\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"ProcedureOutputValue")," \u7c7b\u578b"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"ReturnValue"),"\uff1a\u8fd4\u56de\u503c\uff0c",(0,o.kt)("inlineCode",{parentName:"li"},"object")," \u7c7b\u578b"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Result"),"\uff1a\u7ed3\u679c\u96c6\uff0c\u975e\u6cdb\u578b\u7248\u672c\u662f ",(0,o.kt)("inlineCode",{parentName:"li"},"DataSet"),"\u7c7b\u578b\uff0c\u5426\u5219\u662f \u6cdb\u578b\u7c7b\u578b")),(0,o.kt)("h2",{id:"9135-\u5b58\u50a8\u8fc7\u7a0b\u53c2\u6570"},"9.13.5 \u5b58\u50a8\u8fc7\u7a0b\u53c2\u6570"),(0,o.kt)("p",null,"\u6240\u6709 ",(0,o.kt)("inlineCode",{parentName:"p"},"sql")," \u53c2\u6570\u90fd\u652f\u6301\u56db\u79cd\u65b9\u5f0f\uff1a"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"DbParameter[]"),"\uff1a\u6570\u7ec4\u7c7b\u578b"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"new {}"),"\uff1a\u533f\u540d\u7c7b\u578b"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"new Class{}"),"\uff1a\u5f3a\u7c7b\u578b\u7c7b\u578b\uff08\u652f\u6301\u590d\u6742\u5b58\u50a8\u8fc7\u7a0b\u53c2\u6570\uff09"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"Dictionary")," \u7c7b\u578b")),(0,o.kt)("h2",{id:"9136-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.13.6 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,o.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,o.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}N.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/ab6beea0.d00d5f50.js b/handbook/build/assets/js/ab6beea0.d00d5f50.js new file mode 100644 index 00000000000..93415225c1a --- /dev/null +++ b/handbook/build/assets/js/ab6beea0.d00d5f50.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6229],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return d}});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=i.createContext({}),p=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=p(e.components);return i.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),m=p(n),d=a,k=m["".concat(l,".").concat(d)]||m[d]||c[d]||s;return n?i.createElement(k,r(r({ref:t},u),{},{components:n})):i.createElement(k,r({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=n.length,r=new Array(s);r[0]=m;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o.mdxType="string"==typeof e?e:a,r[1]=o;for(var p=2;p child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})),g=null!=k?k:h.map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes}})),C=(0,o.l)(g,(function(e,t){return e.value===t.value}));if(C.length>0)throw new Error('Docusaurus error: Duplicate values "'+C.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.');var y=null===d?d:null!=(t=null!=d?d:null==(n=h.find((function(e){return e.props.default})))?void 0:n.props.value)?t:h[0].props.value;if(null!==y&&!g.some((function(e){return e.value===y})))throw new Error('Docusaurus error: The has a defaultValue "'+y+'" but none of its children has the corresponding value. Available values are: '+g.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");var b=(0,l.U)(),f=b.tabGroupChoices,H=b.setTabGroupChoices,v=(0,a.useState)(y),A=v[0],S=v[1],L=[],T=(0,p.o5)().blockElementScrollPositionUntilNextRender;if(null!=w){var P=f[w];null!=P&&P!==A&&g.some((function(e){return e.value===P}))&&S(P)}var R=function(e){var t=e.currentTarget,n=L.indexOf(t),i=g[n].value;i!==A&&(T(t),S(i),null!=w&&H(w,String(i)))},X=function(e){var t,n=null;switch(e.key){case"Enter":R(e);break;case"ArrowRight":var i,a=L.indexOf(e.currentTarget)+1;n=null!=(i=L[a])?i:L[0];break;case"ArrowLeft":var s,r=L.indexOf(e.currentTarget)-1;n=null!=(s=L[r])?s:L[L.length-1]}null==(t=n)||t.focus()};return a.createElement("div",{className:(0,s.Z)("tabs-container",u)},a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.Z)("tabs",{"tabs--block":m},N)},g.map((function(e){var t=e.value,n=e.label,r=e.attributes;return a.createElement("li",(0,i.Z)({role:"tab",tabIndex:A===t?0:-1,"aria-selected":A===t,key:t,ref:function(e){return L.push(e)},onKeyDown:X,onClick:R},r,{className:(0,s.Z)("tabs__item",c,null==r?void 0:r.className,{"tabs__item--active":A===t})}),null!=n?n:t)}))),r?(0,a.cloneElement)(h.filter((function(e){return e.props.value===A}))[0],{className:"margin-top--md"}):a.createElement("div",{className:"margin-top--md"},h.map((function(e,t){return(0,a.cloneElement)(e,{key:t,hidden:e.props.value!==A})}))))}function d(e){var t=(0,r.Z)();return a.createElement(m,(0,i.Z)({key:String(t)},e))}},2133:function(e,t,n){n.r(t),n.d(t,{assets:function(){return m},contentTitle:function(){return u},default:function(){return w},frontMatter:function(){return p},metadata:function(){return c},toc:function(){return d}});var i=n(3117),a=n(102),s=(n(7294),n(3905)),r=n(5488),o=n(5162),l=["components"],p={id:"http",title:"19. \u8fdc\u7a0b\u8bf7\u6c42",sidebar_label:"19. \u8fdc\u7a0b\u8bf7\u6c42 (HttpClient)"},u=void 0,c={unversionedId:"http",id:"http",title:"19. \u8fdc\u7a0b\u8bf7\u6c42",description:"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 Furion 1.16.0 + \u7248\u672c\u4f7f\u7528\u3002",source:"@site/docs/http.mdx",sourceDirName:".",slug:"/http",permalink:"/docs/http",draft:!1,editUrl:"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/docs/http.mdx",tags:[],version:"current",lastUpdatedBy:"MonkSoul",lastUpdatedAt:1668062826,formattedLastUpdatedAt:"Nov 10, 2022",frontMatter:{id:"http",title:"19. \u8fdc\u7a0b\u8bf7\u6c42",sidebar_label:"19. \u8fdc\u7a0b\u8bf7\u6c42 (HttpClient)"},sidebar:"docs",previous:{title:"18. \u65e5\u5fd7\u8bb0\u5f55",permalink:"/docs/logging"},next:{title:"20. \u6570\u636e\u52a0\u89e3\u5bc6",permalink:"/docs/encryption"}},m={},d=[{value:"19.1 \u5173\u4e8e\u8fdc\u7a0b\u8bf7\u6c42",id:"191-\u5173\u4e8e\u8fdc\u7a0b\u8bf7\u6c42",level:2},{value:"19.2 \u8fdc\u7a0b\u8bf7\u6c42\u7684\u4f5c\u7528",id:"192-\u8fdc\u7a0b\u8bf7\u6c42\u7684\u4f5c\u7528",level:2},{value:"19.3 \u57fa\u7840\u4f7f\u7528",id:"193-\u57fa\u7840\u4f7f\u7528",level:2},{value:"19.3.1 \u6ce8\u518c\u670d\u52a1",id:"1931-\u6ce8\u518c\u670d\u52a1",level:3},{value:"19.3.2 \u4f7f\u7528\u65b9\u5f0f",id:"1932-\u4f7f\u7528\u65b9\u5f0f",level:3},{value:"19.4 \u5b57\u7b26\u4e32\u65b9\u5f0f\u4f7f\u7528\u793a\u4f8b",id:"194-\u5b57\u7b26\u4e32\u65b9\u5f0f\u4f7f\u7528\u793a\u4f8b",level:2},{value:"19.4.1 \u5185\u7f6e\u8bf7\u6c42\u65b9\u5f0f",id:"1941-\u5185\u7f6e\u8bf7\u6c42\u65b9\u5f0f",level:3},{value:"19.4.2 \u8bbe\u7f6e\u8bf7\u6c42\u5730\u5740",id:"1942-\u8bbe\u7f6e\u8bf7\u6c42\u5730\u5740",level:3},{value:"19.4.3 \u8bbe\u7f6e\u8bf7\u6c42\u65b9\u5f0f",id:"1943-\u8bbe\u7f6e\u8bf7\u6c42\u65b9\u5f0f",level:3},{value:"19.4.4 \u8bbe\u7f6e\u5730\u5740\u6a21\u677f",id:"1944-\u8bbe\u7f6e\u5730\u5740\u6a21\u677f",level:3},{value:"19.4.5 \u8bbe\u7f6e\u8bf7\u6c42\u62a5\u6587\u5934",id:"1945-\u8bbe\u7f6e\u8bf7\u6c42\u62a5\u6587\u5934",level:3},{value:"19.4.6 \u8bbe\u7f6e URL \u5730\u5740\u53c2\u6570",id:"1946-\u8bbe\u7f6e-url-\u5730\u5740\u53c2\u6570",level:3},{value:"19.4.7 \u8bbe\u7f6e\u8bf7\u6c42\u5ba2\u6237\u7aef",id:"1947-\u8bbe\u7f6e\u8bf7\u6c42\u5ba2\u6237\u7aef",level:3},{value:"19.4.8 \u8bbe\u7f6e Body \u53c2\u6570",id:"1948-\u8bbe\u7f6e-body-\u53c2\u6570",level:3},{value:"19.4.9 \u8bbe\u7f6e Content-Type",id:"1949-\u8bbe\u7f6e-content-type",level:3},{value:"19.4.10 \u8bbe\u7f6e\u5185\u5bb9\u7f16\u7801",id:"19410-\u8bbe\u7f6e\u5185\u5bb9\u7f16\u7801",level:3},{value:"19.4.11 \u8bbe\u7f6e JSON \u5e8f\u5217\u5316\u63d0\u4f9b\u7a0b\u5e8f",id:"19411-\u8bbe\u7f6e-json-\u5e8f\u5217\u5316\u63d0\u4f9b\u7a0b\u5e8f",level:3},{value:"19.4.12 \u542f\u7528 Body \u53c2\u6570\u9a8c\u8bc1",id:"19412-\u542f\u7528-body-\u53c2\u6570\u9a8c\u8bc1",level:3},{value:"19.4.13 \u8bf7\u6c42\u62e6\u622a",id:"19413-\u8bf7\u6c42\u62e6\u622a",level:3},{value:"19.4.14 HttpClient \u62e6\u622a",id:"19414-httpclient-\u62e6\u622a",level:3},{value:"19.4.15 \u8bf7\u6c42\u4e4b\u524d\u62e6\u622a",id:"19415-\u8bf7\u6c42\u4e4b\u524d\u62e6\u622a",level:3},{value:"19.4.16 \u6210\u529f\u8bf7\u6c42\u62e6\u622a",id:"19416-\u6210\u529f\u8bf7\u6c42\u62e6\u622a",level:3},{value:"19.4.17 \u8bf7\u6c42\u5f02\u5e38\u62e6\u622a",id:"19417-\u8bf7\u6c42\u5f02\u5e38\u62e6\u622a",level:3},{value:"19.4.18 \u5404\u79cd\u8fd4\u56de\u503c\u5904\u7406",id:"19418-\u5404\u79cd\u8fd4\u56de\u503c\u5904\u7406",level:3},{value:"19.4.19 \u8bbe\u7f6e Byte[]/Stream \u7c7b\u578b/\u4e0a\u4f20\u6587\u4ef6",id:"19419-\u8bbe\u7f6e-bytestream-\u7c7b\u578b\u4e0a\u4f20\u6587\u4ef6",level:3},{value:"19.4.20 \u8bbe\u7f6e IServiceProvider",id:"19420-\u8bbe\u7f6e-iserviceprovider",level:3},{value:"19.4.21 \u652f\u6301\u6a21\u677f\u914d\u7f6e",id:"19421-\u652f\u6301\u6a21\u677f\u914d\u7f6e",level:3},{value:"19.4.22 \u91cd\u8bd5\u7b56\u7565",id:"19422-\u91cd\u8bd5\u7b56\u7565",level:3},{value:"19.4.23 \u652f\u6301 GZip \u538b\u7f29",id:"19423-\u652f\u6301-gzip-\u538b\u7f29",level:3},{value:"19.4.24 \u8bbe\u7f6e Url \u8f6c\u7801",id:"19424-\u8bbe\u7f6e-url-\u8f6c\u7801",level:3},{value:"19.5 IHttpDispatchProxy \u4ee3\u7406\u65b9\u5f0f",id:"195-ihttpdispatchproxy-\u4ee3\u7406\u65b9\u5f0f",level:2},{value:"19.5.1 \u652f\u6301\u591a\u79cd\u4ee3\u7406\u65b9\u5f0f",id:"1951-\u652f\u6301\u591a\u79cd\u4ee3\u7406\u65b9\u5f0f",level:3},{value:"19.5.2 \u8bbe\u7f6e\u5730\u5740\u6a21\u677f",id:"1952-\u8bbe\u7f6e\u5730\u5740\u6a21\u677f",level:3},{value:"19.5.3 \u8bbe\u7f6e\u8bf7\u6c42\u62a5\u6587\u5934",id:"1953-\u8bbe\u7f6e\u8bf7\u6c42\u62a5\u6587\u5934",level:3},{value:"19.5.4 \u8bbe\u7f6e URL \u5730\u5740\u53c2\u6570",id:"1954-\u8bbe\u7f6e-url-\u5730\u5740\u53c2\u6570",level:3},{value:"19.5.5 \u8bbe\u7f6e\u8bf7\u6c42\u5ba2\u6237\u7aef",id:"1955-\u8bbe\u7f6e\u8bf7\u6c42\u5ba2\u6237\u7aef",level:3},{value:"19.5.6 \u8bbe\u7f6e Body \u53c2\u6570",id:"1956-\u8bbe\u7f6e-body-\u53c2\u6570",level:3},{value:"19.5.7 \u8bbe\u7f6e JSON \u5e8f\u5217\u5316\u63d0\u4f9b\u7a0b\u5e8f",id:"1957-\u8bbe\u7f6e-json-\u5e8f\u5217\u5316\u63d0\u4f9b\u7a0b\u5e8f",level:3},{value:"19.5.8 \u53c2\u6570\u9a8c\u8bc1",id:"1958-\u53c2\u6570\u9a8c\u8bc1",level:3},{value:"19.5.9 \u8bf7\u6c42\u62e6\u622a",id:"1959-\u8bf7\u6c42\u62e6\u622a",level:3},{value:"19.5.10 HttpClient \u62e6\u622a",id:"19510-httpclient-\u62e6\u622a",level:3},{value:"19.5.11 \u8bf7\u6c42\u4e4b\u524d\u62e6\u622a",id:"19511-\u8bf7\u6c42\u4e4b\u524d\u62e6\u622a",level:3},{value:"19.5.12 \u6210\u529f\u8bf7\u6c42\u62e6\u622a",id:"19512-\u6210\u529f\u8bf7\u6c42\u62e6\u622a",level:3},{value:"19.5.13 \u8bf7\u6c42\u5f02\u5e38\u62e6\u622a",id:"19513-\u8bf7\u6c42\u5f02\u5e38\u62e6\u622a",level:3},{value:"19.5.14 \u5404\u79cd\u8fd4\u56de\u503c\u5904\u7406",id:"19514-\u5404\u79cd\u8fd4\u56de\u503c\u5904\u7406",level:3},{value:"19.5.15 \u8bbe\u7f6e Byte[]/Stream \u7c7b\u578b/\u4e0a\u4f20\u6587\u4ef6",id:"19515-\u8bbe\u7f6e-bytestream-\u7c7b\u578b\u4e0a\u4f20\u6587\u4ef6",level:3},{value:"19.5.16 \u652f\u6301\u6a21\u677f\u914d\u7f6e",id:"19516-\u652f\u6301\u6a21\u677f\u914d\u7f6e",level:3},{value:"19.5.17 \u91cd\u8bd5\u7b56\u7565",id:"19517-\u91cd\u8bd5\u7b56\u7565",level:3},{value:"19.5.18 \u652f\u6301 GZip",id:"19518-\u652f\u6301-gzip",level:3},{value:"19.5.19 \u8bbe\u7f6e Url \u8f6c\u7801",id:"19519-\u8bbe\u7f6e-url-\u8f6c\u7801",level:3},{value:"19.6 \u8bf7\u6c42\u5ba2\u6237\u7aef\u914d\u7f6e",id:"196-\u8bf7\u6c42\u5ba2\u6237\u7aef\u914d\u7f6e",level:2},{value:"19.6.1 Startup.cs \u7edf\u4e00\u914d\u7f6e",id:"1961-startupcs-\u7edf\u4e00\u914d\u7f6e",level:3},{value:"19.6.2 \u914d\u7f6e\u5ba2\u6237\u7aef Timeout",id:"1962-\u914d\u7f6e\u5ba2\u6237\u7aef-timeout",level:3},{value:"19.6.3 \u914d\u7f6e\u5ba2\u6237\u7aef\u751f\u5b58\u671f",id:"1963-\u914d\u7f6e\u5ba2\u6237\u7aef\u751f\u5b58\u671f",level:3},{value:"19.6.4 \u81ea\u5b9a\u4e49 Client \u7c7b\u65b9\u5f0f",id:"1964-\u81ea\u5b9a\u4e49-client-\u7c7b\u65b9\u5f0f",level:3},{value:"19.6.5 \u81ea\u5b9a\u4e49 Client \u7c7b + \u63a5\u53e3\u65b9\u5f0f",id:"1965-\u81ea\u5b9a\u4e49-client-\u7c7b--\u63a5\u53e3\u65b9\u5f0f",level:3},{value:"19.7 SSL/https \u8bc1\u4e66\u914d\u7f6e",id:"197-sslhttps-\u8bc1\u4e66\u914d\u7f6e",level:2},{value:"19.7.1 \u4f7f\u7528\u9ed8\u8ba4 SSL \u8bc1\u4e66",id:"1971-\u4f7f\u7528\u9ed8\u8ba4-ssl-\u8bc1\u4e66",level:3},{value:"19.7.2 \u5ffd\u7565\u7279\u5b9a\u5ba2\u6237\u7aef SSL \u8bc1\u4e66\u68c0\u67e5",id:"1972-\u5ffd\u7565\u7279\u5b9a\u5ba2\u6237\u7aef-ssl-\u8bc1\u4e66\u68c0\u67e5",level:3},{value:"19.7.3 \u624b\u52a8\u6307\u5b9a SSL \u8bc1\u4e66",id:"1973-\u624b\u52a8\u6307\u5b9a-ssl-\u8bc1\u4e66",level:3},{value:"19.7.4 \u5ffd\u7565\u6240\u6709\u5ba2\u6237\u7aef\u8bc1\u4e66\u68c0\u67e5",id:"1974-\u5ffd\u7565\u6240\u6709\u5ba2\u6237\u7aef\u8bc1\u4e66\u68c0\u67e5",level:3},{value:"19.8 \u5173\u4e8e\u8fd4\u56de\u503c\u975e 200 \u65f6\u5ffd\u7565 Http\u72b6\u6001",id:"198-\u5173\u4e8e\u8fd4\u56de\u503c\u975e-200-\u65f6\u5ffd\u7565-http\u72b6\u6001",level:2},{value:"19.9 \u5173\u4e8e\u540c\u6b65\u8bf7\u6c42",id:"199-\u5173\u4e8e\u540c\u6b65\u8bf7\u6c42",level:2},{value:"19.10 \u9759\u6001 Default \u65b9\u5f0f\u6784\u5efa",id:"1910-\u9759\u6001-default-\u65b9\u5f0f\u6784\u5efa",level:2},{value:"19.11 \u5173\u95ed Http \u8bf7\u6c42\u65e5\u5fd7",id:"1911-\u5173\u95ed-http-\u8bf7\u6c42\u65e5\u5fd7",level:2},{value:"19.12 \u83b7\u53d6 Cookies",id:"1912-\u83b7\u53d6-cookies",level:2},{value:"19.13 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"1913-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],k={toc:d};function w(e){var t=e.components,n=(0,a.Z)(e,l);return(0,s.kt)("wrapper",(0,i.Z)({},k,n,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,s.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion 1.16.0 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,s.kt)("h2",{id:"191-\u5173\u4e8e\u8fdc\u7a0b\u8bf7\u6c42"},"19.1 \u5173\u4e8e\u8fdc\u7a0b\u8bf7\u6c42"),(0,s.kt)("p",null,"\u5728\u4e92\u8054\u7f51\u5927\u6570\u636e\u7684\u9a71\u52a8\u4e0b\uff0c\u5e73\u53f0\u6216\u7cfb\u7edf\u514d\u4e0d\u4e86\u9700\u8981\u548c\u7b2c\u4e09\u65b9\u8fdb\u884c\u6570\u636e\u4ea4\u4e92\uff0c\u800c\u7b2c\u4e09\u65b9\u5f80\u5f80\u63d0\u4f9b\u4e86 ",(0,s.kt)("inlineCode",{parentName:"p"},"RESTful API")," \u63a5\u53e3\u89c4\u8303\uff0c\u8fd9\u4e2a\u65f6\u5019\u5c31\u9700\u8981\u901a\u8fc7 ",(0,s.kt)("inlineCode",{parentName:"p"},"Http")," \u8bf7\u6c42\u7b2c\u4e09\u65b9\u63a5\u53e3\u8fdb\u884c\u6570\u636e\u4f20\u8f93\u4ea4\u4e92\u3002"),(0,s.kt)("p",null,"\u4e5f\u5c31\u662f\u672c\u7ae0\u8282\u6240\u8bf4\u7684\u8fdc\u7a0b\u8bf7\u6c42\u3002"),(0,s.kt)("h2",{id:"192-\u8fdc\u7a0b\u8bf7\u6c42\u7684\u4f5c\u7528"},"19.2 \u8fdc\u7a0b\u8bf7\u6c42\u7684\u4f5c\u7528"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u8de8\u7cfb\u7edf\u3001\u8de8\u8bbe\u5907\u901a\u4fe1"),(0,s.kt)("li",{parentName:"ul"},"\u5b9e\u73b0\u591a\u4e2a\u7cfb\u7edf\u6570\u636e\u4f20\u8f93\u4ea4\u4e92"),(0,s.kt)("li",{parentName:"ul"},"\u8de8\u7f16\u7a0b\u8bed\u8a00\u534f\u540c\u5f00\u53d1")),(0,s.kt)("h2",{id:"193-\u57fa\u7840\u4f7f\u7528"},"19.3 \u57fa\u7840\u4f7f\u7528"),(0,s.kt)("h3",{id:"1931-\u6ce8\u518c\u670d\u52a1"},"19.3.1 \u6ce8\u518c\u670d\u52a1"),(0,s.kt)("p",null,"\u4f7f\u7528\u4e4b\u524d\u9700\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u6ce8\u518c ",(0,s.kt)("inlineCode",{parentName:"p"},"\u8fdc\u7a0b\u8bf7\u6c42\u670d\u52a1")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},"public void ConfigureServices(IServiceCollection services)\n{\n services.AddRemoteRequest();\n}\n")),(0,s.kt)("h3",{id:"1932-\u4f7f\u7528\u65b9\u5f0f"},"19.3.2 \u4f7f\u7528\u65b9\u5f0f"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e24\u79cd\u65b9\u5f0f\u8bbf\u95ee\u53d1\u9001\u8fdc\u7a0b\u8bf7\u6c42\u3002"),(0,s.kt)(r.Z,{defaultValue:"IHttpDispatchProxy \u4ee3\u7406\u65b9\u5f0f",values:[{label:"IHttpDispatchProxy \u4ee3\u7406\u65b9\u5f0f",value:"IHttpDispatchProxy \u4ee3\u7406\u65b9\u5f0f"},{label:"\u5b57\u7b26\u4e32\u62d3\u5c55\u65b9\u5f0f",value:"\u5b57\u7b26\u4e32\u62d3\u5c55\u65b9\u5f0f"}],mdxType:"Tabs"},(0,s.kt)(o.Z,{value:"IHttpDispatchProxy \u4ee3\u7406\u65b9\u5f0f",mdxType:"TabItem"},(0,s.kt)("p",null,"\u5b9a\u4e49\u4ee3\u7406\u8bf7\u6c42\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"\u63a5\u53e3")," \u5e76\u7ee7\u627f ",(0,s.kt)("inlineCode",{parentName:"p"},"IHttpDispatchProxy")," \u63a5\u53e3"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,6,9,12,15,18}",showLineNumbers:!0,"":!0,"{1,3,6,9,12,15,18}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Get("https://www.furion.icu/get")]\n Task GetXXXAsync();\n\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync();\n\n [Put("https://www.furion.icu/put")]\n Task PutXXXAsync();\n\n [Delete("https://www.furion.icu/delete")]\n Task DeleteXXXAsync();\n\n [Patch("https://www.furion.icu/patch")]\n Task PatchXXXAsync();\n\n [Head("https://www.furion.icu/head")]\n Task HeadXXXAsync();\n}\n')),(0,s.kt)("p",null,"\u901a\u8fc7\u6784\u9020\u51fd\u6570\u6ce8\u5165 ",(0,s.kt)("inlineCode",{parentName:"p"},"\u63a5\u53e3")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {9,16}",showLineNumbers:!0,"":!0,"{9,16}":!0},"using Furion.DynamicApiController;\nusing Furion.RemoteRequest.Extensions;\n\nnamespace Furion.Application\n{\n public class RemoteRequestService : IDynamicApiController\n {\n private readonly IHttp _http;\n public RemoteRequestService(IHttp http)\n {\n _http = http;\n }\n\n public async Task GetData()\n {\n var data = await _http.GetXXXAsync();\n }\n }\n}\n"))),(0,s.kt)(o.Z,{value:"\u5b57\u7b26\u4e32\u62d3\u5c55\u65b9\u5f0f",mdxType:"TabItem"},(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var response = await "https://www.furion.icu/get".GetAsync();\n\nvar response = await "https://www.furion.icu/post".PostAsync();\n\nvar response = await "https://www.furion.icu/put".PutAsync();\n\nvar response = await "https://www.furion.icu/delete".DeleteAsync();\n\nvar response = await "https://www.furion.icu/patch".PatchAsync();\n\nvar response = await "https://www.furion.icu/head".HeadAsync();\n')),(0,s.kt)("p",null,"\u9700\u5f15\u5165 ",(0,s.kt)("inlineCode",{parentName:"p"},"using Furion.RemoteRequest.Extensions")," \u547d\u540d\u7a7a\u95f4\u3002"))),(0,s.kt)("h2",{id:"194-\u5b57\u7b26\u4e32\u65b9\u5f0f\u4f7f\u7528\u793a\u4f8b"},"19.4 \u5b57\u7b26\u4e32\u65b9\u5f0f\u4f7f\u7528\u793a\u4f8b"),(0,s.kt)("h3",{id:"1941-\u5185\u7f6e\u8bf7\u6c42\u65b9\u5f0f"},"19.4.1 \u5185\u7f6e\u8bf7\u6c42\u65b9\u5f0f"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u53d1\u9001 Get \u8bf7\u6c42\nvar response = await "https://www.furion.icu/get".GetAsync();\n\n// \u53d1\u9001 Post \u8bf7\u6c42\nvar response = await "https://www.furion.icu/post".PostAsync();\n\n// \u53d1\u9001 Put \u8bf7\u6c42\nvar response = await "https://www.furion.icu/put".PutAsync();\n\n// \u53d1\u9001 Delete \u8bf7\u6c42\nvar response = await "https://www.furion.icu/delete".DeleteAsync();\n\n// \u53d1\u9001 Patch \u8bf7\u6c42\nvar response = await "https://www.furion.icu/patch".PatchAsync();\n\n// \u53d1\u9001 Head \u8bf7\u6c42\nvar response = await "https://www.furion.icu/head".HeadAsync();\n\n// \u624b\u52a8\u6307\u5b9a\u53d1\u9001\u7279\u5b9a\u8bf7\u6c42\nvar response = await "https://www.furion.icu/post".SetHttpMethod(HttpMethod.Post)\n .SendAsync();\n')),(0,s.kt)("h3",{id:"1942-\u8bbe\u7f6e\u8bf7\u6c42\u5730\u5740"},"19.4.2 \u8bbe\u7f6e\u8bf7\u6c42\u5730\u5740"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u8be5\u65b9\u5f0f\u5728 Furion v3.0.0 \u5df2\u79fb\u9664\uff0c\u591a\u6b64\u4e00\u4e3e\u4e86\nawait "".SetRequestUrl("https://www.furion.icu/");\n')),(0,s.kt)("h3",{id:"1943-\u8bbe\u7f6e\u8bf7\u6c42\u65b9\u5f0f"},"19.4.3 \u8bbe\u7f6e\u8bf7\u6c42\u65b9\u5f0f"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await "https://www.furion.icu/post".SetHttpMethod(HttpMethod.Get);\n')),(0,s.kt)("h3",{id:"1944-\u8bbe\u7f6e\u5730\u5740\u6a21\u677f"},"19.4.4 \u8bbe\u7f6e\u5730\u5740\u6a21\u677f"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u5b57\u5178\u65b9\u5f0f\nawait "https://www.furion.icu/post/{id}?name={name}&id={p.Id}".SetTemplates(new Dictionary {\n { "id", 1 },\n { "name", "Furion" },\n { "p.Id", new Person { Id = 1 } }\n});\n\n// \u5bf9\u8c61/\u533f\u540d\u5bf9\u8c61\u65b9\u5f0f\nawait "https://www.furion.icu/post/{id}?name={name}".SetTemplates(new {\n id = 1,\n name = "Furion"\n});\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u6ce8\uff1a\u6a21\u677f\u66ff\u6362\u533a\u5206\u5927\u5c0f\u5199\u3002")),(0,s.kt)("h3",{id:"1945-\u8bbe\u7f6e\u8bf7\u6c42\u62a5\u6587\u5934"},"19.4.5 \u8bbe\u7f6e\u8bf7\u6c42\u62a5\u6587\u5934"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u5b57\u5178\u65b9\u5f0f\nawait "https://www.furion.icu/post".SetHeaders(new Dictionary {\n { "Authorization", "Bearer \u4f60\u7684token"},\n { "X-Authorization", "Bearer \u4f60\u7684\u5237\u65b0token"}\n});\n\n// \u5bf9\u8c61/\u533f\u540d\u5bf9\u8c61\u65b9\u5f0f\nawait "https://www.furion.icu/post".SetHeaders(new {\n Authorization = "Bearer \u4f60\u7684token"\n});\n')),(0,s.kt)("h3",{id:"1946-\u8bbe\u7f6e-url-\u5730\u5740\u53c2\u6570"},"19.4.6 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"URL")," \u5730\u5740\u53c2\u6570"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u5b57\u5178\u65b9\u5f0f\nawait "https://www.furion.icu/get".SetQueries(new Dictionary {\n { "id", 1 },\n { "name", "Furion"}\n});\n\n// \u5bf9\u8c61/\u533f\u540d\u5bf9\u8c61\u65b9\u5f0f\nawait "https://www.furion.icu/get".SetQueries(new {\n id = 1,\n name = "Furion"\n});\n\n// Furion 4.7.3+ \u65b0\u589e\u5ffd\u7565 null \u503c\u91cd\u8f7d\nawait "https://www.furion.icu/get".SetQueries(new {\n id = 1,\n name = "Furion",\n nullValue = default(object)\n}, true); // \u8bbe\u7f6e true \u5219\u5ffd\u7565 null \u503c\n')),(0,s.kt)("p",null,"\u6700\u7ec8\u8f93\u51fa\u683c\u5f0f\u4e3a\uff1a",(0,s.kt)("inlineCode",{parentName:"p"},"https://www.furion.icu/get?id=1&name=Furion"),"\u3002"),(0,s.kt)("h3",{id:"1947-\u8bbe\u7f6e\u8bf7\u6c42\u5ba2\u6237\u7aef"},"19.4.7 \u8bbe\u7f6e\u8bf7\u6c42\u5ba2\u6237\u7aef"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("strong",{parentName:"li"},"\u5168\u5c40\u914d\u7f6e\u65b9\u5f0f"))),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3-4,12}",showLineNumbers:!0,"":!0,"{1,3-4,12}":!0},'services.AddRemoteRequest(options=>\n{\n // \u914d\u7f6e Github \u57fa\u672c\u4fe1\u606f\n options.AddHttpClient("github", c =>\n {\n c.BaseAddress = new Uri("https://api.github.com/");\n c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");\n c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");\n });\n});\n\nawait "get".SetClient("github");\n')),(0,s.kt)("p",null,"\u6700\u7ec8\u751f\u6210\u8bf7\u6c42\u5730\u5740\u4e3a\uff1a",(0,s.kt)("inlineCode",{parentName:"p"},"https://api.github.com/get"),"\u3002"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("strong",{parentName:"li"},"\u5c40\u90e8\u914d\u7f6e\u65b9\u5f0f"))),(0,s.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,s.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion 4.3.8 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await "https://www.furion.icu".SetClient(() => new HttpClient());\n')),(0,s.kt)("h3",{id:"1948-\u8bbe\u7f6e-body-\u53c2\u6570"},"19.4.8 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"Body")," \u53c2\u6570"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u4f20\u5165\u5bf9\u8c61\nawait "https://www.furion.icu/api/user/add".SetBody(new User { Id = 1, Name = "Furion" });\n\n// \u914d\u7f6e Content-Type\nawait "https://www.furion.icu/api/user/add".SetBody(new { Id = 1, Name = "Furion" }, "application/json");\n\n// \u8bbe\u7f6e Encoding \u7f16\u7801\nawait "https://www.furion.icu/api/user/add".SetBody(new User { Id = 1, Name = "Furion" }, "application/json", Encoding.UTF8);\n\n// \u5904\u7406 application/x-www-form-urlencoded \u8bf7\u6c42\nawait "https://www.furion.icu/api/user/add".SetBody(new Dictionary {\n { "Id", 1 },\n { "Name", "Furion"}\n}, "application/x-www-form-urlencoded");\n\n// \u5904\u7406 application/xml\u3001text/xml\nawait "https://www.furion.icu/api/user/add".SetBody("somevalue", "application/xml");\n')),(0,s.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,s.kt)("p",{parentName:"admonition"},"\u5982\u679c\u8bf7\u6c42 ",(0,s.kt)("inlineCode",{parentName:"p"},"Content-Type")," \u8bbe\u7f6e\u4e3a ",(0,s.kt)("inlineCode",{parentName:"p"},"application/x-www-form-urlencoded")," \u7c7b\u578b\uff0c\u90a3\u4e48\u5e95\u5c42\u81ea\u52a8\u5c06\u6570\u636e\u8fdb\u884c ",(0,s.kt)("inlineCode",{parentName:"p"},"UrlEncode")," \u7f16\u7801\u5904\u7406\uff0c\u65e0\u9700\u5916\u90e8\u5904\u7406\u3002")),(0,s.kt)("h3",{id:"1949-\u8bbe\u7f6e-content-type"},"19.4.9 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"Content-Type")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await "https://www.furion.icu/post".SetContentType("application/json");\n')),(0,s.kt)("h3",{id:"19410-\u8bbe\u7f6e\u5185\u5bb9\u7f16\u7801"},"19.4.10 \u8bbe\u7f6e\u5185\u5bb9\u7f16\u7801"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await "https://www.furion.icu/post".SetContentEncoding(Encoding.UTF8);\n')),(0,s.kt)("h3",{id:"19411-\u8bbe\u7f6e-json-\u5e8f\u5217\u5316\u63d0\u4f9b\u7a0b\u5e8f"},"19.4.11 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"JSON")," \u5e8f\u5217\u5316\u63d0\u4f9b\u7a0b\u5e8f"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u9ed8\u8ba4\u60c5\u51b5\u4e0b\u91c7\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"System.Text.Json")," \u8fdb\u884c ",(0,s.kt)("inlineCode",{parentName:"p"},"JSON")," \u5e8f\u5217\u5316\u5904\u7406\uff0c\u5982\u9700\u8bbe\u7f6e\u7b2c\u4e09\u65b9 ",(0,s.kt)("inlineCode",{parentName:"p"},"JSON")," \u63d0\u4f9b\u5668\uff0c\u5219\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u914d\u7f6e\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u6cdb\u578b\u65b9\u5f0f\nawait "https://www.furion.icu/api/user/add".SetJsonSerialization();\n\n// \u975e\u6cdb\u578b\u65b9\u5f0f\nawait "https://www.furion.icu/api/user/add".SetJsonSerialization(typeof(NewtonsoftJsonSerializerProvider));\n\n// \u6dfb\u52a0\u66f4\u591a\u914d\u7f6e\nawait "https://www.furion.icu/api/user/add".SetJsonSerialization(new JsonSerializerSettings {\n\n});\n\n// \u6bd4\u5982\u914d\u7f6e\u7f3a\u7701\u7684\u5e8f\u5217\u5316\u9009\u9879\nawait "https://www.furion.icu".SetJsonSerialization(default, new JsonSerializerOptions\n {\n // \u4e2d\u6587\u4e71\u7801\n Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping\n })\n .GetAsAsync();\n')),(0,s.kt)("admonition",{type:"important"},(0,s.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u5173\u4e8e ",(0,s.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"JSON")," \u5e8f\u5217\u5316\u63d0\u4f9b\u5668"),(0,s.kt)("p",{parentName:"admonition"},"\u5982\u9700\u4e86\u89e3\u66f4\u591a ",(0,s.kt)("inlineCode",{parentName:"p"},"JSON")," \u5e8f\u5217\u5316\u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,s.kt)("a",{parentName:"p",href:"json-serialization#2351-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BA%8F%E5%88%97%E5%8C%96%E6%8F%90%E4%BE%9B%E5%99%A8"},"23. JSON \u5e8f\u5217\u5316")," \u7ae0\u8282")),(0,s.kt)("h3",{id:"19412-\u542f\u7528-body-\u53c2\u6570\u9a8c\u8bc1"},"19.4.12 \u542f\u7528 ",(0,s.kt)("inlineCode",{parentName:"h3"},"Body")," \u53c2\u6570\u9a8c\u8bc1"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await "https://www.furion.icu/api/user/add".SetValidationState();\n\n// \u8bbe\u7f6e\u4e0d\u9a8c\u8bc1 null \u503c\nawait "https://www.furion.icu/api/user/add".SetValidationState(includeNull: true);\n')),(0,s.kt)("p",null,"\u652f\u6301\u7c7b\u4e2d ",(0,s.kt)("inlineCode",{parentName:"p"},"[Required]")," \u7b49\u5b8c\u6574\u6a21\u578b\u9a8c\u8bc1\u7279\u6027\u3002"),(0,s.kt)("h3",{id:"19413-\u8bf7\u6c42\u62e6\u622a"},"19.4.13 \u8bf7\u6c42\u62e6\u622a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await "https://www.furion.icu/".OnRequesting((client, req) => {\n // req \u4e3a HttpRequestMessage \u5bf9\u8c61\n // \u8ffd\u52a0\u66f4\u591a\u53c2\u6570\n req.AppendQueries(new Dictionary {\n { "access_token", "xxxx"}\n });\n});\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u6b21\u62e6\u622a")),(0,s.kt)("h3",{id:"19414-httpclient-\u62e6\u622a"},"19.4.14 ",(0,s.kt)("inlineCode",{parentName:"h3"},"HttpClient")," \u62e6\u622a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await "https://www.furion.icu/".OnClientCreating(client => {\n // client \u4e3a HttpClient \u5bf9\u8c61\n client.Timeout = 30000; // \u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4\n});\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u6b21\u62e6\u622a")),(0,s.kt)("h3",{id:"19415-\u8bf7\u6c42\u4e4b\u524d\u62e6\u622a"},"19.4.15 \u8bf7\u6c42\u4e4b\u524d\u62e6\u622a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await "https://www.furion.icu/".OnRequesting((client, req) => {\n // req \u4e3a HttpRequestMessage \u5bf9\u8c61\n});\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u6b21\u62e6\u622a")),(0,s.kt)("h3",{id:"19416-\u6210\u529f\u8bf7\u6c42\u62e6\u622a"},"19.4.16 \u6210\u529f\u8bf7\u6c42\u62e6\u622a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await "https://www.furion.icu/".OnResponsing((client, res) => {\n // res \u4e3a HttpResponseMessage \u5bf9\u8c61\n});\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u6b21\u62e6\u622a")),(0,s.kt)("h3",{id:"19417-\u8bf7\u6c42\u5f02\u5e38\u62e6\u622a"},"19.4.17 \u8bf7\u6c42\u5f02\u5e38\u62e6\u622a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await "https://www.furion.icu/".OnException((client, res, errors) => {\n // res \u4e3a HttpResponseMessage \u5bf9\u8c61\n});\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u6b21\u62e6\u622a")),(0,s.kt)("h3",{id:"19418-\u5404\u79cd\u8fd4\u56de\u503c\u5904\u7406"},"19.4.18 \u5404\u79cd\u8fd4\u56de\u503c\u5904\u7406"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u8fdc\u7a0b\u8bf7\u6c42\u9ed8\u8ba4\u63d0\u4f9b\u56db\u79cd\u8fd4\u56de\u503c\u7c7b\u578b\uff1a"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"HttpResponseMessage"),"\uff1a\u8bf7\u6c42\u54cd\u5e94\u6d88\u606f\u7c7b\u578b"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"Stream"),"\uff1a\u6d41\u7c7b\u578b"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"T"),"\uff1a\u6cdb\u578b ",(0,s.kt)("inlineCode",{parentName:"li"},"T")," \u7c7b\u578b"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"String"),"\uff1a\u5b57\u7b26\u4e32\u7c7b\u578b\uff0c\u4e5f\u5c31\u662f\u76f4\u63a5\u5c06\u7f51\u7edc\u8bf7\u6c42\u7ed3\u679c\u5185\u5bb9\u5b57\u7b26\u4e32\u5316"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"Byte[]"),"\uff1a\u5b57\u8282\u6570\u7ec4\u7c7b\u578b")),(0,s.kt)("p",null,"\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// HttpResponseMessage\nvar res = await "https://www.furion.icu/".GetAsync();\n\n// Stream\nvar (stream, encoding) = await "https://www.furion.icu/".GetAsStreamAsync();\n\n// T\nvar user = await "https://www.furion.icu/".GetAsAsync();\n\n// String\nvar str = await "https://www.baidu.com".GetAsStringAsync();\n')),(0,s.kt)("h3",{id:"19419-\u8bbe\u7f6e-bytestream-\u7c7b\u578b\u4e0a\u4f20\u6587\u4ef6"},"19.4.19 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"Byte[]/Stream")," \u7c7b\u578b/\u4e0a\u4f20\u6587\u4ef6"),(0,s.kt)("admonition",{type:"warning"},(0,s.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,s.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Furion 4.4.0")," \u4ee5\u4e0b\u7248\u672c"),(0,s.kt)("p",{parentName:"admonition"},"\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion 4.4.0+")," \u7248\u672c\u79fb\u9664\u4e86 ",(0,s.kt)("inlineCode",{parentName:"p"},".SetBodyBytes")," \u65b9\u5f0f\uff0c\u539f\u56e0\u662f\u62d3\u5c55\u6027\u592a\u5dee\uff0c",(0,s.kt)("strong",{parentName:"p"},"\u65b0\u7248\u672c\u8bf7\u4f7f\u7528 ",(0,s.kt)("inlineCode",{parentName:"strong"},".SetFiles")," \u65b9\u5f0f"),"\u3002")),(0,s.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u9700\u8981\u4e0a\u4f20\u6587\u4ef6\uff0c\u9700\u8981\u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"p"},"Content-Type")," \u4e3a ",(0,s.kt)("inlineCode",{parentName:"p"},"multipart/form-data")," \u7c7b\u578b\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,7,10,15}",showLineNumbers:!0,"{3,7,10,15}":!0},'// \u652f\u6301\u5355\u6587\u4ef6\uff0cbytes \u53ef\u4ee5\u901a\u8fc7 File.ReadAllBytes(\u6587\u4ef6\u8def\u5f84) \u83b7\u53d6\nvar res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")\n .SetBodyBytes(("\u952e", bytes, "\u6587\u4ef6\u540d")).PostAsync();\n\n// \u652f\u6301\u591a\u4e2a\u6587\u4ef6\nvar res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")\n .SetBodyBytes(("\u952e", bytes, "\u6587\u4ef6\u540d"),("\u952e", bytes, "\u6587\u4ef6\u540d")).PostAsync();\n\n// \u652f\u6301\u5355\u6587\u4ef6\uff0cFurion 4.5.8 \u7248\u672c\u652f\u6301 Stream \u65b9\u5f0f\u66f4\u65b0\nvar res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")\n .SetBodyBytes(("\u952e", fileStream, "\u6587\u4ef6\u540d")).PostAsync();\n\n// \u652f\u6301\u591a\u4e2a\u6587\u4ef6\uff0cFurion 4.5.8 \u7248\u672c\u652f\u6301 Stream \u65b9\u5f0f\u66f4\u65b0\nvar res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")\n .SetBodyBytes(("\u952e", fileStream, "\u6587\u4ef6\u540d"),("\u952e", fileStream, "\u6587\u4ef6\u540d")).PostAsync();\n')),(0,s.kt)("admonition",{title:"\u5173\u4e8e\u5fae\u4fe1\u4e0a\u4f20\u63a5\u53e3",type:"note"},(0,s.kt)("p",{parentName:"admonition"},"\u5982\u679c\u9047\u5230\u5fae\u4fe1\u4e0a\u4f20\u51fa\u73b0\u95ee\u9898\uff0c\u5219\u53ef\u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"p"},"Content-Type")," \u4e3a\uff1a",(0,s.kt)("inlineCode",{parentName:"p"},"application/octet-stream"),"\uff0c\u5982\uff1a"),(0,s.kt)("pre",{parentName:"admonition"},(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var result = await $"https://api.weixin.qq.com/wxa/img_sec_check?access_token={token}"\n .SetBodyBytes(("media", bytes, Path.GetFileName(imgPath)))\n .SetContentType("application/octet-stream")\n .PostAsStringAsync();\n'))),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,s.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Furion 4.4.0+")," \u7248\u672c"),(0,s.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion 4.4.0+")," \u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},".SetFiles")," \u66ff\u4ee3 ",(0,s.kt)("inlineCode",{parentName:"p"},".SetBodyBytes")," \u64cd\u4f5c\u3002")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,7}",showLineNumbers:!0,"{3,7}":!0},'// bytes \u53ef\u4ee5\u901a\u8fc7 File.ReadAllBytes(\u6587\u4ef6\u8def\u5f84) \u83b7\u53d6\nvar res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")\n .SetFiles(HttpFile.Create("file", bytes, "image.png")).PostAsync();\n\n// \u652f\u6301\u591a\u4e2a\u6587\u4ef6\nvar res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")\n .SetFiles(HttpFile.CreateMultiple("files", (bytes, "image1.png"), (bytes, "image2.png"))).PostAsync();\n')),(0,s.kt)("h3",{id:"19420-\u8bbe\u7f6e-iserviceprovider"},"19.4.20 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"IServiceProvider")),(0,s.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u9700\u8981\u6784\u5efa\u4e00\u4e2a\u4f5c\u7528\u57df\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"IServiceProvider"),"\uff0c\u8fd9\u65f6\u53ea\u9700\u8981\u8bbe\u7f6e\u5373\u53ef\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var res = await "https://www.furion.icu/upload".SetRequestScoped(services);\n')),(0,s.kt)("h3",{id:"19421-\u652f\u6301\u6a21\u677f\u914d\u7f6e"},"19.4.21 \u652f\u6301\u6a21\u677f\u914d\u7f6e"),(0,s.kt)("p",null,"\u6a21\u677f\u683c\u5f0f\u4e3a\uff1a",(0,s.kt)("inlineCode",{parentName:"p"},"#(\u914d\u7f6e\u8def\u5f84)")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var res = await "#(Furion:Address)/upload".GetAsync();\n')),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "Furion": {\n "Address": "https://www.furion.icu"\n }\n}\n')),(0,s.kt)("h3",{id:"19422-\u91cd\u8bd5\u7b56\u7565"},"19.4.22 \u91cd\u8bd5\u7b56\u7565"),(0,s.kt)("p",null,"\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion v2.18+")," \u7248\u672c\u652f\u6301\u914d\u7f6e\u91cd\u8bd5\u7b56\u7565\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var res = await "https://www.furion.icu".SetRetryPolicy(3, 1000).GetAsync();\n')),(0,s.kt)("p",null,"\u4ee5\u4e0a\u4ee3\u7801\u8868\u793a\u8bf7\u6c42\u5931\u8d25\u91cd\u8bd5 ",(0,s.kt)("inlineCode",{parentName:"p"},"3")," \u6b21\uff0c\u6bcf\u6b21\u5ef6\u8fdf ",(0,s.kt)("inlineCode",{parentName:"p"},"1000ms")," \u3002"),(0,s.kt)("h3",{id:"19423-\u652f\u6301-gzip-\u538b\u7f29"},"19.4.23 \u652f\u6301 ",(0,s.kt)("inlineCode",{parentName:"h3"},"GZip")," \u538b\u7f29"),(0,s.kt)("p",null,"\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion v3.2.0+")," \u7248\u672c\u652f\u6301",(0,s.kt)("inlineCode",{parentName:"p"},"GZip")," \u538b\u7f29\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var res = await "https://www.furion.icu".WithGZip().GetAsync();\n')),(0,s.kt)("h3",{id:"19424-\u8bbe\u7f6e-url-\u8f6c\u7801"},"19.4.24 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"Url")," \u8f6c\u7801"),(0,s.kt)("p",null,"\u8fc7\u53bb\u7248\u672c\u4f1a\u5bf9\u6240\u6709\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"Url")," \u8fdb\u884c ",(0,s.kt)("inlineCode",{parentName:"p"},"Uri.EscapeDataString")," \u8f6c\u7801\uff0c\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion v3.8.0+")," \u7248\u672c\u652f\u6301 ",(0,s.kt)("inlineCode",{parentName:"p"},"Url")," \u8f6c\u7801\u8bbe\u7f6e\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var res = await "https://www.furion.icu".WithEncodeUrl(false).GetAsync();\n')),(0,s.kt)("h2",{id:"195-ihttpdispatchproxy-\u4ee3\u7406\u65b9\u5f0f"},"19.5 ",(0,s.kt)("inlineCode",{parentName:"h2"},"IHttpDispatchProxy")," \u4ee3\u7406\u65b9\u5f0f"),(0,s.kt)("h3",{id:"1951-\u652f\u6301\u591a\u79cd\u4ee3\u7406\u65b9\u5f0f"},"19.5.1 \u652f\u6301\u591a\u79cd\u4ee3\u7406\u65b9\u5f0f"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'public interface IHttp : IHttpDispatchProxy\n{\n // \u53d1\u9001 Get \u8bf7\u6c42\n [Get("https://www.furion.icu/get")]\n Task GetXXXAsync();\n\n // \u53d1\u9001 Post \u8bf7\u6c42\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync();\n\n // \u53d1\u9001 Put \u8bf7\u6c42\n [Put("https://www.furion.icu/put")]\n Task PutXXXAsync();\n\n // \u53d1\u9001 Delete \u8bf7\u6c42\n [Delete("https://www.furion.icu/delete")]\n Task DeleteXXXAsync();\n\n // \u53d1\u9001 Patch \u8bf7\u6c42\n [Patch("https://www.furion.icu/patch")]\n Task PatchXXXAsync();\n\n // \u53d1\u9001 Head \u8bf7\u6c42\n [Head("https://www.furion.icu/head")]\n Task HeadXXXAsync();\n}\n')),(0,s.kt)("h3",{id:"1952-\u8bbe\u7f6e\u5730\u5740\u6a21\u677f"},"19.5.2 \u8bbe\u7f6e\u5730\u5740\u6a21\u677f"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Get("https://www.furion.icu/get/{id}?name={name}&number={p.PersonDetail.PhonNumber}")]\n Task GetXXXAsync(int id, string name, Person p);\n}\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u6ce8\uff1a\u6a21\u677f\u66ff\u6362\u533a\u5206\u5927\u5c0f\u5199\u3002")),(0,s.kt)("h3",{id:"1953-\u8bbe\u7f6e\u8bf7\u6c42\u62a5\u6587\u5934"},"19.5.3 \u8bbe\u7f6e\u8bf7\u6c42\u62a5\u6587\u5934"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u8fdc\u7a0b\u8bf7\u6c42\u4ee3\u7406\u6a21\u5f0f\u63d0\u4f9b\u4e09\u79cd\u65b9\u5f0f\u8bbe\u7f6e\u8bf7\u6c42\u62a5\u6587\u5934\uff1a"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u652f\u6301\u5728\u63a5\u53e3\u4e2d\u58f0\u660e"),(0,s.kt)("li",{parentName:"ul"},"\u652f\u6301\u5728\u65b9\u6cd5\u4e2d\u58f0\u660e"),(0,s.kt)("li",{parentName:"ul"},"\u652f\u6301\u5728\u53c2\u6570\u4e2d\u58f0\u660e")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-2,5,9,12}",showLineNumbers:!0,"":!0,"{1-2,5,9,12}":!0},'[Headers("key","value")]\n[Headers("key1","value2")] // \u8bbe\u7f6e\u591a\u4e2a\npublic interface IHttp : IHttpDispatchProxy\n{\n [Get("https://www.furion.icu/get/{id}?name={name}"), Headers("key2","value2")]\n Task GetXXXAsync(int id, string name);\n\n [Get("https://www.furion.icu")]\n Task GetXXX2Async(int id, [Headers]string token = default);\n\n [Get("https://www.furion.icu")]\n Task GetXXX2Async(int id, string name, [Headers("\u522b\u540d")]string token = default);\n}\n')),(0,s.kt)("h3",{id:"1954-\u8bbe\u7f6e-url-\u5730\u5740\u53c2\u6570"},"19.5.4 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"URL")," \u5730\u5740\u53c2\u6570"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,7,10,13}",showLineNumbers:!0,"":!0,"{4,7,10,13}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Get("https://www.furion.icu/get/{id}?name={name}")]\n Task GetXXXAsync(int id, string name);\n\n [Get("https://www.furion.icu/get/{p.Id}?name={p.Name}")]\n Task GetXXXAsync(Person p);\n\n [Get("https://www.furion.icu/get")]\n Task GetXXXAsync([QueryString]int id, [QueryString]string name);\n\n [Get("https://www.furion.icu/get")]\n Task GetXXXAsync([QueryString]int id, [QueryString("\u522b\u540d")]string name);\n\n // Furion 4.7.3 \u65b0\u589e IgnoreNullValueQueries \u914d\u7f6e\u5ffd\u7565\u7a7a\u503c\n [Get("https://www.furion.icu/get", IgnoreNullValueQueries = true)]\n Task GetXXXAsync([QueryString]int id, [QueryString]string name, [QueryString]string nullValue);\n}\n')),(0,s.kt)("p",null,"\u6700\u7ec8\u8f93\u51fa\u683c\u5f0f\u4e3a\uff1a",(0,s.kt)("inlineCode",{parentName:"p"},"https://www.furion.icu/get?id=1&name=Furion"),"\u3002"),(0,s.kt)("h3",{id:"1955-\u8bbe\u7f6e\u8bf7\u6c42\u5ba2\u6237\u7aef"},"19.5.5 \u8bbe\u7f6e\u8bf7\u6c42\u5ba2\u6237\u7aef"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("strong",{parentName:"li"},"\u5168\u5c40\u914d\u7f6e\u65b9\u5f0f"))),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3-4,14}",showLineNumbers:!0,"":!0,"{1,3-4,14}":!0},'services.AddRemoteRequest(options=>\n{\n // \u914d\u7f6e Github \u57fa\u672c\u4fe1\u606f\n options.AddHttpClient("github", c =>\n {\n c.BaseAddress = new Uri("https://api.github.com/");\n c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");\n c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");\n });\n});\n\npublic interface IHttp : IHttpDispatchProxy\n{\n [Get("get"), Client("github")]\n Task GetXXXAsync();\n}\n')),(0,s.kt)("p",null,"\u6700\u7ec8\u751f\u6210\u8bf7\u6c42\u5730\u5740\u4e3a\uff1a",(0,s.kt)("inlineCode",{parentName:"p"},"https://api.github.com/get"),"\u3002"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("strong",{parentName:"li"},"\u5c40\u90e8\u914d\u7f6e\u65b9\u5f0f"))),(0,s.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,s.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion 4.3.8 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,7-11}",showLineNumbers:!0,"{5,7-11}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n // \u5c40\u90e8\u65b9\u5f0f\n [Get("get")]\n Task GetXXXAsync([Interceptor(InterceptorTypes.Initiate)]Func clientProvider);\n\n // \u5168\u5c40\u9759\u6001\u65b9\u5f0f\n [Interceptor(InterceptorTypes.Initiate)]\n static HttpClient CreateHttpClient()\n {\n return new HttpClient(...);\n }\n}\n')),(0,s.kt)("h3",{id:"1956-\u8bbe\u7f6e-body-\u53c2\u6570"},"19.5.6 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"Body")," \u53c2\u6570"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,6,9}",showLineNumbers:!0,"":!0,"{3,6,9}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync([Body]User user);\n\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync([Body("application/x-www-form-urlencoded")]User user);\n\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync([Body("application/x-www-form-urlencoded", "UTF-8")]User user);\n}\n')),(0,s.kt)("h3",{id:"1957-\u8bbe\u7f6e-json-\u5e8f\u5217\u5316\u63d0\u4f9b\u7a0b\u5e8f"},"19.5.7 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"JSON")," \u5e8f\u5217\u5316\u63d0\u4f9b\u7a0b\u5e8f"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u9ed8\u8ba4\u60c5\u51b5\u4e0b\u91c7\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"System.Text.Json")," \u8fdb\u884c ",(0,s.kt)("inlineCode",{parentName:"p"},"JSON")," \u5e8f\u5217\u5316\u5904\u7406\uff0c\u5982\u9700\u8bbe\u7f6e\u7b2c\u4e09\u65b9 ",(0,s.kt)("inlineCode",{parentName:"p"},"JSON")," \u63d0\u4f9b\u5668\uff0c\u5219\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u914d\u7f6e\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,6-7}",showLineNumbers:!0,"":!0,"{3,6-7}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Post("https://www.furion.icu/post"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))]\n Task PostXXXAsync([Body]User user);\n\n [Post("https://www.furion.icu/post"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))]\n Task PostXXXAsync([Body]User user, [JsonSerializerOptions]object jsonSerializerOptions = default);\n\n /// \n /// \u7f3a\u7701\u5e8f\u5217\u5316\u914d\u7f6e\n /// \n /// \n [JsonSerializerOptions]\n static object GetJsonSerializerOptions()\n {\n // \u8fd9\u91cc\u4e5f\u53ef\u4ee5\u901a\u8fc7 JSON.GetSerializerOptions() \u83b7\u53d6 Startup.cs \u4e2d\u7684\u914d\u7f6e\n return new JsonSerializerOptions\n {\n\n };\n }\n}\n')),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"[JsonSerializerOptions]")," \u53ef\u4ee5\u6807\u8bb0\u53c2\u6570\u662f\u4e00\u4e2a ",(0,s.kt)("inlineCode",{parentName:"p"},"JSON")," \u5e8f\u5217\u5316\u914d\u7f6e\u53c2\u6570\u3002"),(0,s.kt)("admonition",{type:"important"},(0,s.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u5173\u4e8e ",(0,s.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"JSON")," \u5e8f\u5217\u5316\u63d0\u4f9b\u5668"),(0,s.kt)("p",{parentName:"admonition"},"\u5982\u9700\u4e86\u89e3\u66f4\u591a ",(0,s.kt)("inlineCode",{parentName:"p"},"JSON")," \u5e8f\u5217\u5316\u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,s.kt)("a",{parentName:"p",href:"json-serialization#2351-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BA%8F%E5%88%97%E5%8C%96%E6%8F%90%E4%BE%9B%E5%99%A8"},"23. JSON \u5e8f\u5217\u5316")," \u7ae0\u8282")),(0,s.kt)("h3",{id:"1958-\u53c2\u6570\u9a8c\u8bc1"},"19.5.8 \u53c2\u6570\u9a8c\u8bc1"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,7}",showLineNumbers:!0,"":!0,"{4,7}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync([Range(1,10)]int id, [Required, MaxLength(10)]string name);\n\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync([Required]User user); // \u5bf9\u8c61\u7c7b\u578b\u652f\u6301\u5c5e\u6027\u914d\u7f6e\u7279\u6027\u9a8c\u8bc1\n}\n')),(0,s.kt)("h3",{id:"1959-\u8bf7\u6c42\u62e6\u622a"},"19.5.9 \u8bf7\u6c42\u62e6\u622a"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u8fdc\u7a0b\u8bf7\u6c42\u4ee3\u7406\u65b9\u5f0f\u63d0\u4f9b\u4e24\u79cd\u62e6\u622a\u65b9\u5f0f\uff1a"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u63a5\u53e3\u9759\u6001\u65b9\u6cd5\u62e6\u622a"),(0,s.kt)("li",{parentName:"ul"},"\u53c2\u6570\u6807\u8bb0\u62e6\u622a")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8,18}",showLineNumbers:!0,"":!0,"{5,8,18}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n // \u901a\u8fc7\u53c2\u6570\u62e6\u622a\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync([Interceptor(InterceptorTypes.Request)] Action action = default);\n\n // \u5168\u5c40\u62e6\u622a\uff0c\u7c7b\u4e2d\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u90fd\u4f1a\u89e6\u53d1\n [Interceptor(InterceptorTypes.Request)]\n static void OnRequesting1(HttpClient client, HttpRequestMessage req)\n {\n // \u8ffd\u52a0\u66f4\u591a\u53c2\u6570\n req.AppendQueries(new Dictionary {\n { "access_token", "xxxx"}\n });\n }\n\n // \u5168\u5c40\u62e6\u622a\uff0c\u7c7b\u4e2d\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u90fd\u4f1a\u89e6\u53d1\n [Interceptor(InterceptorTypes.Request)]\n static void OnRequesting2(HttpClient client, HttpRequestMessage req)\n {\n\n }\n}\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u6b21\u62e6\u622a")),(0,s.kt)("h3",{id:"19510-httpclient-\u62e6\u622a"},"19.5.10 ",(0,s.kt)("inlineCode",{parentName:"h3"},"HttpClient")," \u62e6\u622a"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u8fdc\u7a0b\u8bf7\u6c42\u4ee3\u7406\u65b9\u5f0f\u63d0\u4f9b\u4e24\u79cd\u62e6\u622a\u65b9\u5f0f\uff1a"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u63a5\u53e3\u9759\u6001\u65b9\u6cd5\u62e6\u622a"),(0,s.kt)("li",{parentName:"ul"},"\u53c2\u6570\u6807\u8bb0\u62e6\u622a")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8,15}",showLineNumbers:!0,"":!0,"{5,8,15}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n // \u901a\u8fc7\u53c2\u6570\u62e6\u622a\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync([Interceptor(InterceptorTypes.Client)] Action action = default);\n\n // \u5168\u5c40\u62e6\u622a\uff0c\u7c7b\u4e2d\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u90fd\u4f1a\u89e6\u53d1\n [Interceptor(InterceptorTypes.Client)]\n static void onClientCreating1(HttpClient client)\n {\n\n }\n\n // \u5168\u5c40\u62e6\u622a\uff0c\u7c7b\u4e2d\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u90fd\u4f1a\u89e6\u53d1\n [Interceptor(InterceptorTypes.Client)]\n static void onClientCreating2(HttpClient client)\n {\n\n }\n}\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u6b21\u62e6\u622a")),(0,s.kt)("h3",{id:"19511-\u8bf7\u6c42\u4e4b\u524d\u62e6\u622a"},"19.5.11 \u8bf7\u6c42\u4e4b\u524d\u62e6\u622a"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u8fdc\u7a0b\u8bf7\u6c42\u4ee3\u7406\u65b9\u5f0f\u63d0\u4f9b\u4e24\u79cd\u62e6\u622a\u65b9\u5f0f\uff1a"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u63a5\u53e3\u9759\u6001\u65b9\u6cd5\u62e6\u622a"),(0,s.kt)("li",{parentName:"ul"},"\u53c2\u6570\u6807\u8bb0\u62e6\u622a")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8,15}",showLineNumbers:!0,"":!0,"{5,8,15}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n // \u901a\u8fc7\u53c2\u6570\u62e6\u622a\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync([Interceptor(InterceptorTypes.Request)] Action action = default);\n\n // \u5168\u5c40\u62e6\u622a\uff0c\u7c7b\u4e2d\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u90fd\u4f1a\u89e6\u53d1\n [Interceptor(InterceptorTypes.Request)]\n static void OnRequest1(HttpClient client, HttpRequestMessage req)\n {\n\n }\n\n // \u5168\u5c40\u62e6\u622a\uff0c\u7c7b\u4e2d\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u90fd\u4f1a\u89e6\u53d1\n [Interceptor(InterceptorTypes.Request)]\n static void OnRequest2(HttpClient client, HttpRequestMessage req)\n {\n\n }\n}\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u6b21\u62e6\u622a")),(0,s.kt)("h3",{id:"19512-\u6210\u529f\u8bf7\u6c42\u62e6\u622a"},"19.5.12 \u6210\u529f\u8bf7\u6c42\u62e6\u622a"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u8fdc\u7a0b\u8bf7\u6c42\u4ee3\u7406\u65b9\u5f0f\u63d0\u4f9b\u4e24\u79cd\u62e6\u622a\u65b9\u5f0f\uff1a"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u63a5\u53e3\u9759\u6001\u65b9\u6cd5\u62e6\u622a"),(0,s.kt)("li",{parentName:"ul"},"\u53c2\u6570\u6807\u8bb0\u62e6\u622a")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8,15}",showLineNumbers:!0,"":!0,"{5,8,15}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n // \u901a\u8fc7\u53c2\u6570\u62e6\u622a\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync([Interceptor(InterceptorTypes.Response)] Action action = default);\n\n // \u5168\u5c40\u62e6\u622a\uff0c\u7c7b\u4e2d\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u90fd\u4f1a\u89e6\u53d1\n [Interceptor(InterceptorTypes.Response)]\n static void OnResponsing1(HttpClient client, HttpResponseMessage res)\n {\n\n }\n\n // \u5168\u5c40\u62e6\u622a\uff0c\u7c7b\u4e2d\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u90fd\u4f1a\u89e6\u53d1\n [Interceptor(InterceptorTypes.Response)]\n static void OnResponsing2(HttpClient client, HttpResponseMessage res)\n {\n\n }\n}\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u6b21\u62e6\u622a")),(0,s.kt)("h3",{id:"19513-\u8bf7\u6c42\u5f02\u5e38\u62e6\u622a"},"19.5.13 \u8bf7\u6c42\u5f02\u5e38\u62e6\u622a"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u8fdc\u7a0b\u8bf7\u6c42\u4ee3\u7406\u65b9\u5f0f\u63d0\u4f9b\u4e24\u79cd\u62e6\u622a\u65b9\u5f0f\uff1a"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u63a5\u53e3\u9759\u6001\u65b9\u6cd5\u62e6\u622a"),(0,s.kt)("li",{parentName:"ul"},"\u53c2\u6570\u6807\u8bb0\u62e6\u622a")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8,15}",showLineNumbers:!0,"":!0,"{5,8,15}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n // \u901a\u8fc7\u53c2\u6570\u62e6\u622a\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync([Interceptor(InterceptorTypes.Exception)] Action action = default);\n\n // \u5168\u5c40\u62e6\u622a\uff0c\u7c7b\u4e2d\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u90fd\u4f1a\u89e6\u53d1\n [Interceptor(InterceptorTypes.Exception)]\n static void OnException1(HttpClient client, HttpResponseMessage res, string errors)\n {\n\n }\n\n // \u5168\u5c40\u62e6\u622a\uff0c\u7c7b\u4e2d\u6bcf\u4e00\u4e2a\u65b9\u6cd5\u90fd\u4f1a\u89e6\u53d1\n [Interceptor(InterceptorTypes.Exception)]\n static void OnException2(HttpClient client, HttpResponseMessage res, string errors)\n {\n\n }\n}\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u652f\u6301\u591a\u6b21\u62e6\u622a")),(0,s.kt)("h3",{id:"19514-\u5404\u79cd\u8fd4\u56de\u503c\u5904\u7406"},"19.5.14 \u5404\u79cd\u8fd4\u56de\u503c\u5904\u7406"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u8fdc\u7a0b\u8bf7\u6c42\u9ed8\u8ba4\u63d0\u4f9b\u56db\u79cd\u8fd4\u56de\u503c\u7c7b\u578b\uff1a"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"HttpResponseMessage"),"\uff1a\u8bf7\u6c42\u54cd\u5e94\u6d88\u606f\u7c7b\u578b"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"Stream"),"\uff1a\u6d41\u7c7b\u578b"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"T"),"\uff1a\u6cdb\u578b ",(0,s.kt)("inlineCode",{parentName:"li"},"T")," \u7c7b\u578b"),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("inlineCode",{parentName:"li"},"String"),"\uff1a\u5b57\u7b26\u4e32\u7c7b\u578b\uff0c\u4e5f\u5c31\u662f\u76f4\u63a5\u5c06\u7f51\u7edc\u8bf7\u6c42\u7ed3\u679c\u5185\u5bb9\u5b57\u7b26\u4e32\u5316")),(0,s.kt)("p",null,"\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync();\n\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync();\n\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync();\n\n [Post("https://www.furion.icu/post")]\n Task PostXXXAsync();\n}\n')),(0,s.kt)("h3",{id:"19515-\u8bbe\u7f6e-bytestream-\u7c7b\u578b\u4e0a\u4f20\u6587\u4ef6"},"19.5.15 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"Byte[]/Stream")," \u7c7b\u578b/\u4e0a\u4f20\u6587\u4ef6"),(0,s.kt)("admonition",{type:"warning"},(0,s.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,s.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Furion 4.4.0")," \u4ee5\u4e0b\u7248\u672c"),(0,s.kt)("p",{parentName:"admonition"},"\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion 4.4.0+")," \u7248\u672c\u79fb\u9664\u4e86 ",(0,s.kt)("inlineCode",{parentName:"p"},"[BodyBytes]")," \u65b9\u5f0f\uff0c\u539f\u56e0\u662f\u62d3\u5c55\u6027\u592a\u5dee\uff0c",(0,s.kt)("strong",{parentName:"p"},"\u65b0\u7248\u672c\u8bf7\u4f7f\u7528 ",(0,s.kt)("inlineCode",{parentName:"strong"},"HttpFile")," \u65b9\u5f0f"),"\u3002")),(0,s.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u9700\u8981\u4e0a\u4f20\u6587\u4ef6\uff0c\u9700\u8981\u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"p"},"Content-Type")," \u4e3a ",(0,s.kt)("inlineCode",{parentName:"p"},"multipart/form-data")," \u7c7b\u578b\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,4}",showLineNumbers:!0,"{3,4}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")] // bytes \u53ef\u4ee5\u901a\u8fc7 File.ReadAllBytes(\u6587\u4ef6\u8def\u5f84) \u83b7\u53d6\n Task PostXXXAsync([BodyBytes("\u952e","\u6587\u4ef6\u540d")]Byte[] bytes);\n\n // \u652f\u6301\u591a\u4e2a\u6587\u4ef6\n [Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")] // bytes \u53ef\u4ee5\u901a\u8fc7 File.ReadAllBytes(\u6587\u4ef6\u8def\u5f84) \u83b7\u53d6\n Task PostXXXAsync([BodyBytes("\u952e","\u6587\u4ef6\u540d")]Byte[] bytes,[BodyBytes("\u952e","\u6587\u4ef6\u540d")]Byte[] bytes2);\n}\n')),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,s.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"Furion 4.4.0+")," \u7248\u672c"),(0,s.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion 4.4.0+")," \u7248\u672c\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpFile")," \u66ff\u4ee3 ",(0,s.kt)("inlineCode",{parentName:"p"},"[BodyBytes]")," \u64cd\u4f5c\u3002\u8bf7\u6c42\u6709\u989d\u5916\u53c2\u6570\u65f6 ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpFile")," \u5fc5\u987b\u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"p"},"fileName")," \u503c\u3002")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3-4,7-8,11-12,15-16}",showLineNumbers:!0,"{3-4,7-8,11-12,15-16}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]\n Task PostXXXAsync(HttpFile file);\n\n\n [Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]\n Task PostXXXAsync(HttpFile file, [Body("multipart/form-data")]User user);\n\n // \u652f\u6301\u591a\u4e2a\u6587\u4ef6\n [Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]\n Task PostXXXAsync(HttpFile[] files);\n\n // \u652f\u6301\u591a\u4e2a\u6587\u4ef6\n [Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]\n Task PostXXXAsync(IList files);\n}\n')),(0,s.kt)("h3",{id:"19516-\u652f\u6301\u6a21\u677f\u914d\u7f6e"},"19.5.16 \u652f\u6301\u6a21\u677f\u914d\u7f6e"),(0,s.kt)("p",null,"\u6a21\u677f\u683c\u5f0f\u4e3a\uff1a",(0,s.kt)("inlineCode",{parentName:"p"},"#(\u914d\u7f6e\u8def\u5f84)")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Post("#(Furion:Address)/upload")]\n Task PostXXXAsync([Body]User user);\n}\n')),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "Furion": {\n "Address": "https://www.furion.icu"\n }\n}\n')),(0,s.kt)("p",null,"\u65b9\u6cd5\u7684\u4f18\u5148\u7ea7\u9ad8\u4e8e\u63a5\u53e3\u5b9a\u4e49\u7684\u4f18\u5148\u7ea7\u3002"),(0,s.kt)("h3",{id:"19517-\u91cd\u8bd5\u7b56\u7565"},"19.5.17 \u91cd\u8bd5\u7b56\u7565"),(0,s.kt)("p",null,"\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion v2.18+")," \u7248\u672c\u652f\u6301\u914d\u7f6e\u91cd\u8bd5\u7b56\u7565\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'[RetryPolicy(3, 1000)] // \u652f\u6301\u5168\u5c40\npublic interface IHttp : IHttpDispatchProxy\n{\n [Post("https://www.furion.icu"), RetryPolicy(3, 1000)] // \u652f\u6301\u5c40\u90e8\n Task PostXXXAsync([Body]User user);\n}\n')),(0,s.kt)("p",null,"\u4ee5\u4e0a\u4ee3\u7801\u8868\u793a\u8bf7\u6c42\u5931\u8d25\u91cd\u8bd5 ",(0,s.kt)("inlineCode",{parentName:"p"},"3")," \u6b21\uff0c\u6bcf\u6b21\u5ef6\u8fdf ",(0,s.kt)("inlineCode",{parentName:"p"},"1000ms")," \u3002"),(0,s.kt)("h3",{id:"19518-\u652f\u6301-gzip"},"19.5.18 \u652f\u6301 ",(0,s.kt)("inlineCode",{parentName:"h3"},"GZip")),(0,s.kt)("p",null,"\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion v3.2.0+")," \u7248\u672c\u652f\u6301 ",(0,s.kt)("inlineCode",{parentName:"p"},"GZip"),"\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Post("https://www.furion.icu", WithGZip = true)]\n Task PostXXXAsync([Body]User user);\n}\n')),(0,s.kt)("h3",{id:"19519-\u8bbe\u7f6e-url-\u8f6c\u7801"},"19.5.19 \u8bbe\u7f6e ",(0,s.kt)("inlineCode",{parentName:"h3"},"Url")," \u8f6c\u7801"),(0,s.kt)("p",null,"\u8fc7\u53bb\u7248\u672c\u4f1a\u5bf9\u6240\u6709\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"Url")," \u8fdb\u884c ",(0,s.kt)("inlineCode",{parentName:"p"},"Uri.EscapeDataString")," \u8f6c\u7801\uff0c\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion v3.8.0+")," \u7248\u672c\u652f\u6301 ",(0,s.kt)("inlineCode",{parentName:"p"},"Url")," \u8f6c\u7801\u8bbe\u7f6e\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Post("https://www.furion.icu", WithEncodeUrl = false)]\n Task PostXXXAsync([Body]User user);\n}\n')),(0,s.kt)("h2",{id:"196-\u8bf7\u6c42\u5ba2\u6237\u7aef\u914d\u7f6e"},"19.6 \u8bf7\u6c42\u5ba2\u6237\u7aef\u914d\u7f6e"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e5f\u63d0\u4f9b\u4e86\u591a\u4e2a\u8bf7\u6c42\u5ba2\u6237\u7aef\u914d\u7f6e\uff0c\u53ef\u4ee5\u4e3a\u591a\u4e2a\u5ba2\u6237\u7aef\u8bf7\u6c42\u914d\u7f6e\u9ed8\u8ba4\u8bf7\u6c42\u4fe1\u606f\uff0c\u76ee\u524d\u652f\u6301\u56db\u79cd\u6a21\u5f0f\u8fdb\u884c\u914d\u7f6e\u3002"),(0,s.kt)("h3",{id:"1961-startupcs-\u7edf\u4e00\u914d\u7f6e"},"19.6.1 ",(0,s.kt)("inlineCode",{parentName:"h3"},"Startup.cs")," \u7edf\u4e00\u914d\u7f6e"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,9}",showLineNumbers:!0,"":!0,"{4,9}":!0},'services.AddRemoteRequest(options=>\n{\n // \u914d\u7f6e\u9ed8\u8ba4 HttpClient\n options.AddHttpClient(string.Empty, c => {\n // \u5176\u4ed6\u914d\u7f6e\n });\n\n // \u914d\u7f6e\u7279\u5b9a\u5ba2\u6237\u7aef\n options.AddHttpClient("github", c =>\n {\n c.BaseAddress = new Uri("https://api.github.com/");\n c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");\n c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");\n });\n})\n')),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"\u914d\u7f6e\u4e86\u547d\u540d\u5ba2\u6237\u7aef\u540e\uff0c\u6bcf\u6b21\u8bf7\u6c42\u90fd\u4f1a\u81ea\u52a8\u52a0\u4e0a\u8fd9\u4e9b\u914d\u7f6e\u3002")),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u5728 ",(0,s.kt)("inlineCode",{parentName:"li"},"\u4ee3\u7406\u8bf7\u6c42")," \u4f7f\u7528")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'[Get("api/getdata"), Client("github")]\nTask GetData();\n\n[Put("api/getdata"), Client("facebook")]\nTask GetData();\n')),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u5728 ",(0,s.kt)("inlineCode",{parentName:"li"},"\u5b57\u7b26\u4e32\u62d3\u5c55")," \u4f7f\u7528")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u8bbe\u7f6e\u8bf7\u6c42\u62e6\u622a\nvar response = await "http://47.100.247.61/api/sysdata/categories".SetClient("github").PostAsync();\n')),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u5728 ",(0,s.kt)("inlineCode",{parentName:"li"},"IHttpClientFactory")," \u4e2d\u4f7f\u7528")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,13}",showLineNumbers:!0,"{3,13}":!0},'public class ValuesController : Controller\n{\n private readonly IHttpClientFactory _httpClientFactory;\n\n public ValuesController(IHttpClientFactory httpClientFactory)\n {\n _httpClientFactory = httpClientFactory;\n }\n\n [HttpGet]\n public async Task Get()\n {\n var client = _httpClientFactory.CreateClient("github");\n string result = await client.GetStringAsync("/");\n return Ok(result);\n }\n}\n')),(0,s.kt)("h3",{id:"1962-\u914d\u7f6e\u5ba2\u6237\u7aef-timeout"},"19.6.2 \u914d\u7f6e\u5ba2\u6237\u7aef ",(0,s.kt)("inlineCode",{parentName:"h3"},"Timeout")),(0,s.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,s.kt)("inlineCode",{parentName:"p"},"HttpClient")," \u8bf7\u6c42\u8d85\u65f6\u65f6\u95f4\u4e3a ",(0,s.kt)("inlineCode",{parentName:"p"},"100\u79d2"),"\uff0c\u53ef\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u8bbe\u7f6e\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,10}",showLineNumbers:!0,"{4,10}":!0},'// \u914d\u7f6e\u9ed8\u8ba4 HttpClient\noptions.AddHttpClient(string.Empty, c =>\n{\n c.Timeout = TimeSpan.FromMinutes(2);\n});\n\n// \u914d\u7f6e\u7279\u5b9a\u5ba2\u6237\u7aef\noptions.AddHttpClient("github", c =>\n{\n c.Timeout = TimeSpan.FromMinutes(2);\n});\n')),(0,s.kt)("h3",{id:"1963-\u914d\u7f6e\u5ba2\u6237\u7aef\u751f\u5b58\u671f"},"19.6.3 \u914d\u7f6e\u5ba2\u6237\u7aef\u751f\u5b58\u671f"),(0,s.kt)("p",null,"\u6bcf\u6b21\u5bf9 ",(0,s.kt)("inlineCode",{parentName:"p"},"IHttpClientFactory")," \u8c03\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"CreateClient")," \u90fd\u4f1a\u8fd4\u56de\u4e00\u4e2a\u65b0 ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpClient")," \u5b9e\u4f8b\u3002 \u6bcf\u4e2a\u547d\u540d\u5ba2\u6237\u7aef\u90fd\u521b\u5efa\u4e00\u4e2a ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpMessageHandler"),"\u3002 \u5de5\u5382\u7ba1\u7406 ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpMessageHandler")," \u5b9e\u4f8b\u7684\u751f\u5b58\u671f\u3002"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"IHttpClientFactory")," \u5c06\u5de5\u5382\u521b\u5efa\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpMessageHandler")," \u5b9e\u4f8b\u6c47\u96c6\u5230\u6c60\u4e2d\uff0c\u4ee5\u51cf\u5c11\u8d44\u6e90\u6d88\u8017\u3002 \u65b0\u5efa ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpClient")," \u5b9e\u4f8b\u65f6\uff0c\u53ef\u80fd\u4f1a\u91cd\u7528\u6c60\u4e2d\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpMessageHandler")," \u5b9e\u4f8b\uff08\u5982\u679c\u751f\u5b58\u671f\u5c1a\u672a\u5230\u671f\u7684\u8bdd\uff09\u3002"),(0,s.kt)("p",null,"\u5904\u7406\u7a0b\u5e8f\u7684\u9ed8\u8ba4\u751f\u5b58\u671f\u4e3a",(0,s.kt)("strong",{parentName:"p"},"\u4e24\u5206\u949f"),"\u3002 \u53ef\u5728\u6bcf\u4e2a\u547d\u540d\u5ba2\u6237\u7aef\u4e0a\u91cd\u5199\u9ed8\u8ba4\u503c\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,7}",showLineNumbers:!0,"{3,7}":!0},'// \u914d\u7f6e\u9ed8\u8ba4 HttpClient\noptions.AddHttpClient(string.Empty, c => { ... })\n .SetHandlerLifetime(TimeSpan.FromMinutes(5));\n\n// \u914d\u7f6e\u7279\u5b9a\u5ba2\u6237\u7aef\noptions.AddHttpClient("github", c => { ... })\n .SetHandlerLifetime(TimeSpan.FromMinutes(5));\n')),(0,s.kt)("h3",{id:"1964-\u81ea\u5b9a\u4e49-client-\u7c7b\u65b9\u5f0f"},"19.6.4 \u81ea\u5b9a\u4e49 ",(0,s.kt)("inlineCode",{parentName:"h3"},"Client")," \u7c7b\u65b9\u5f0f"),(0,s.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u6309\u7167\u4e00\u5b9a\u7684\u89c4\u5219\u7f16\u5199\u7279\u5b9a\u670d\u52a1\u7684\u8bf7\u6c42\u5ba2\u6237\u7aef\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,5}",showLineNumbers:!0,"{1,3,5}":!0},'public class GitHubClient\n{\n public HttpClient Client { get; private set; }\n\n public GitHubClient(HttpClient httpClient)\n {\n httpClient.BaseAddress = new Uri("https://api.github.com/");\n httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");\n httpClient.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");\n Client = httpClient;\n }\n}\n')),(0,s.kt)("p",null,"\u7136\u540e\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u6ce8\u518c\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddHttpClient();\n")),(0,s.kt)("p",null,"\u4f7f\u7528\u5982\u4e0b\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,13}",showLineNumbers:!0,"{3,13}":!0},'public class ValuesController : Controller\n{\n private readonly GitHubClient _gitHubClient;;\n\n public ValuesController(GitHubClient gitHubClient)\n {\n _gitHubClient = gitHubClient;\n }\n\n [HttpGet]\n public async Task Get()\n {\n string result = await _gitHubClient.Client.GetStringAsync("/");\n return Ok(result);\n }\n}\n')),(0,s.kt)("h3",{id:"1965-\u81ea\u5b9a\u4e49-client-\u7c7b--\u63a5\u53e3\u65b9\u5f0f"},"19.6.5 \u81ea\u5b9a\u4e49 ",(0,s.kt)("inlineCode",{parentName:"h3"},"Client")," \u7c7b + \u63a5\u53e3\u65b9\u5f0f"),(0,s.kt)("p",null,"\u6211\u4eec\u4e5f\u53ef\u4ee5\u5b9a\u4e49\u63a5\u53e3\uff0c\u901a\u8fc7\u63a5\u53e3\u7684\u63d0\u4f9b\u5177\u4f53\u7684\u670d\u52a1 ",(0,s.kt)("inlineCode",{parentName:"p"},"API")," \u64cd\u4f5c\uff0c\u65e0\u9700\u624b\u52a8\u914d\u7f6e ",(0,s.kt)("inlineCode",{parentName:"p"},"Url"),"\uff0c\u5982\u4e0a\u9762\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},'GetStringAsync("/")'),"\u3002"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,6,10,18-21}",showLineNumbers:!0,"{1,3,6,10,18-21}":!0},'public interface IGitHubClient\n{\n Task GetData();\n}\n\npublic class GitHubClient : IGitHubClient\n{\n private readonly HttpClient _client;\n\n public GitHubClient(HttpClient httpClient)\n {\n httpClient.BaseAddress = new Uri("https://api.github.com/");\n httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");\n httpClient.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");\n _client = httpClient;\n }\n\n public async Task GetData()\n {\n return await _client.GetStringAsync("/");\n }\n}\n')),(0,s.kt)("p",null,"\u7136\u540e\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u6ce8\u518c\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddHttpClient();\n")),(0,s.kt)("p",null,"\u4f7f\u7528\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,13}",showLineNumbers:!0,"{3,13}":!0},"public class ValuesController : Controller\n{\n private readonly IGitHubClient _gitHubClient;;\n\n public ValuesController(IGitHubClient gitHubClient)\n {\n _gitHubClient = gitHubClient;\n }\n\n [HttpGet]\n public async Task Get()\n {\n string result = await _gitHubClient.GetData();\n return Ok(result);\n }\n}\n")),(0,s.kt)("h2",{id:"197-sslhttps-\u8bc1\u4e66\u914d\u7f6e"},"19.7 ",(0,s.kt)("inlineCode",{parentName:"h2"},"SSL/https")," \u8bc1\u4e66\u914d\u7f6e"),(0,s.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u8bf7\u6c42\u8fdc\u7a0b\u63a5\u53e3\u65f6\u4f1a\u9047\u5230 ",(0,s.kt)("inlineCode",{parentName:"p"},"The SSL connection could not be established, see inner exception.")," \u8fd9\u6837\u7684\u9519\u8bef\uff0c\u539f\u56e0\u662f\u8bc1\u4e66\u914d\u7f6e\u4e0d\u6b63\u786e\u95ee\u9898\uff0c\u4e0b\u9762\u6709\u51e0\u79cd\u89e3\u51b3\u65b9\u6cd5\u3002"),(0,s.kt)("h3",{id:"1971-\u4f7f\u7528\u9ed8\u8ba4-ssl-\u8bc1\u4e66"},"19.7.1 \u4f7f\u7528\u9ed8\u8ba4 ",(0,s.kt)("inlineCode",{parentName:"h3"},"SSL")," \u8bc1\u4e66"),(0,s.kt)("p",null,"\u5728\u4e00\u4e9b\u60c5\u51b5\u4e0b\uff0c\u53ef\u76f4\u63a5\u4f7f\u7528\u9ed8\u8ba4\u8bc1\u4e66\u5373\u53ef\u89e3\u51b3\u95ee\u9898\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,7-8,13,15-16}",showLineNumbers:!0,"{5,7-8,13,15-16}":!0},'services.AddRemoteRequest(options=>\n{\n // \u9ed8\u8ba4 HttpClient \u5728 Furion \u6846\u67b6\u5185\u90e8\u5df2\u7ecf\u914d\u7f6e\u4e86\u8be5\u64cd\u4f5c\n options.AddHttpClient(string.Empty)\n .ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler\n {\n AllowAutoRedirect = true,\n UseDefaultCredentials = true\n });\n\n // \u914d\u7f6e\u7279\u5b9a\u5ba2\u6237\u7aef\n options.AddHttpClient("github", c => { /*\u5176\u4ed6\u914d\u7f6e*/ })\n .ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler\n {\n AllowAutoRedirect = true,\n UseDefaultCredentials = true\n });\n});\n')),(0,s.kt)("h3",{id:"1972-\u5ffd\u7565\u7279\u5b9a\u5ba2\u6237\u7aef-ssl-\u8bc1\u4e66\u68c0\u67e5"},"19.7.2 \u5ffd\u7565\u7279\u5b9a\u5ba2\u6237\u7aef ",(0,s.kt)("inlineCode",{parentName:"h3"},"SSL")," \u8bc1\u4e66\u68c0\u67e5"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,7,12,14}",showLineNumbers:!0,"{5,7,12,14}":!0},'services.AddRemoteRequest(options=>\n{\n // \u9ed8\u8ba4 HttpClient \u5728 Furion \u6846\u67b6\u5185\u90e8\u5df2\u7ecf\u914d\u7f6e\u4e86\u8be5\u64cd\u4f5c\n options.AddHttpClient(string.Empty)\n .ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler\n {\n ServerCertificateCustomValidationCallback = (_, _, _, _) => true,\n });\n\n // \u914d\u7f6e\u7279\u5b9a\u5ba2\u6237\u7aef\n options.AddHttpClient("github", c => { /*\u5176\u4ed6\u914d\u7f6e*/ })\n .ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler\n {\n ServerCertificateCustomValidationCallback = (_, _, _, _) => true,\n });\n});\n')),(0,s.kt)("admonition",{type:"tip"},(0,s.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u5173\u4e8e ",(0,s.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"HttpClientHandler")," \u548c ",(0,s.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"SocketsHttpHandler")),(0,s.kt)("p",{parentName:"admonition"},"\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},".NET6")," \u4e4b\u540e\u9ed8\u8ba4\u4f7f\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"SocketsHttpHandler ")," \u4f5c\u4e3a\u9ed8\u8ba4\u5e95\u5c42\u7f51\u7edc\u901a\u4fe1\uff0c\u4f46\u6bd4 ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpClientHandler")," \u63d0\u4f9b\u4e86\u66f4\u591a\u5e73\u53f0\u65e0\u5dee\u5f02\u7684\u529f\u80fd\uff0c\u5bf9 ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpClientHandler")," \u7684\u4efb\u4f55\u8bbe\u7f6e\u90fd\u4f1a\u8f6c\u53d1\u5230 ",(0,s.kt)("inlineCode",{parentName:"p"},"SocketsHttpHandler")," \u4e2d\uff0c\u5982\u9700\u4f7f\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"SocketsHttpHandler")," \u914d\u7f6e\u53ef\u53c2\u8003\uff1a"),(0,s.kt)("pre",{parentName:"admonition"},(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,5-8}",showLineNumbers:!0,"{3,5-8}":!0},"// \u5ffd\u7565 SSL \u4e0d\u5b89\u5168\u68c0\u67e5\uff0c\u6216 https \u4e0d\u5b89\u5168\u6216 https \u8bc1\u4e66\u6709\u8bef\noptions.AddHttpClient(string.Empty)\n .ConfigurePrimaryHttpMessageHandler(u => new SocketsHttpHandler\n {\n SslOptions = new SslClientAuthenticationOptions\n {\n RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true\n }\n });\n"))),(0,s.kt)("h3",{id:"1973-\u624b\u52a8\u6307\u5b9a-ssl-\u8bc1\u4e66"},"19.7.3 \u624b\u52a8\u6307\u5b9a ",(0,s.kt)("inlineCode",{parentName:"h3"},"SSL")," \u8bc1\u4e66"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8-13}",showLineNumbers:!0,"{5,8-13}":!0},'services.AddRemoteRequest(options=>\n{\n // \u914d\u7f6e\u7279\u5b9a\u5ba2\u6237\u7aef\n options.AddHttpClient("github", c => { /*\u5176\u4ed6\u914d\u7f6e*/ })\n .ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler\n {\n // \u624b\u52a8\u914d\u7f6e\u8bc1\u4e66\n ClientCertificateOptions = ClientCertificateOption.Manual,\n ClientCertificates = {\n new X509Certificate2("...","..."),\n new X509Certificate2("...","..."),\n new X509Certificate2("...","...")\n }\n });\n});\n')),(0,s.kt)("h3",{id:"1974-\u5ffd\u7565\u6240\u6709\u5ba2\u6237\u7aef\u8bc1\u4e66\u68c0\u67e5"},"19.7.4 \u5ffd\u7565\u6240\u6709\u5ba2\u6237\u7aef\u8bc1\u4e66\u68c0\u67e5"),(0,s.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,s.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion v3.6.6+")," \u7248\u672c\u4f7f\u7528\u3002")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4}",showLineNumbers:!0,"{1,4}":!0},"services.AddRemoteRequest(options=>\n{\n // \u9700\u5728\u6240\u6709\u5ba2\u6237\u7aef\u6ce8\u518c\u4e4b\u524d\u6ce8\u518c\n options.ApproveAllCerts();\n});\n")),(0,s.kt)("h2",{id:"198-\u5173\u4e8e\u8fd4\u56de\u503c\u975e-200-\u65f6\u5ffd\u7565-http\u72b6\u6001"},"19.8 \u5173\u4e8e\u8fd4\u56de\u503c\u975e ",(0,s.kt)("inlineCode",{parentName:"h2"},"200")," \u65f6\u5ffd\u7565 ",(0,s.kt)("inlineCode",{parentName:"h2"},"Http\u72b6\u6001")),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86\u975e\u5e38\u65b9\u4fbf\u7684\u8bf7\u6c42\u5e76\u4e14\u5e8f\u5217\u5316\u8bf7\u6c42\u7ed3\u679c ",(0,s.kt)("inlineCode",{parentName:"p"},"PostAsAsync"),"\n\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"2.8.8")," \u53ca\u4ee5\u4e0b\u7248\u672c\uff0c\u5f53\u8fd4\u56de\u7ed3\u679c\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"Http")," \u72b6\u6001\u4e3a\u975e ",(0,s.kt)("inlineCode",{parentName:"p"},"200")," \u65f6\uff0c\u4f1a\u76f4\u63a5\u622a\u65ad\u3002\u8003\u8651\u5230\u8bf7\u6c42\u63a5\u53e3\u7684\u591a\u6837\u6027\uff0c\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"2.8.9")," \u53ca\u4ee5\u4e0a\u7248\u672c\u589e\u52a0\u5ffd\u7565\u8fd4\u56de ",(0,s.kt)("inlineCode",{parentName:"p"},"Http")," \u72b6\u6001\uff0c\u76f4\u63a5\u5e8f\u5217\u5316\u7ed3\u679c\u7684\u65b9\u5f0f\u3002"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'//\u8bf7\u6c42\u5e76\u4e14\u5e8f\u5217\u5316\u8bf7\u6c42\u7ed3\u679c\nvar result = await "https://api.facebook.com/"\n //\u5982\u679c\u4e0d\u52a0OnException\uff0c\u5219\u4f1a\u76f4\u63a5\u622a\u65ad\n .OnException((res,errors)=> {\n //\u6fc0\u6d3b\u5f02\u6b65\u62e6\u622a \u6b64\u5904\u53ef\u4ee5\u505a\u8bb0\u5f55\u65e5\u5fd7\u64cd\u4f5c \u4e5f\u53ef\u4fdd\u6301\u73b0\u72b6\n })\n .PostAsAsync();\n')),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"PostAsStringAsync()")," \u4e5f\u4f7f\u7528\u540c\u6837\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"OnException")," \u64cd\u4f5c\u4f7f\u5f97\u5ffd\u7565\u8fd4\u56de ",(0,s.kt)("inlineCode",{parentName:"p"},"Http")," \u72b6\u6001,\u539f\u6837\u8fd4\u56de ",(0,s.kt)("inlineCode",{parentName:"p"},"Http")," \u8bf7\u6c42\u7ed3\u679c"),(0,s.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"important"},(0,s.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4e0d\u52a0 ",(0,s.kt)("inlineCode",{parentName:"p"},"OnException"),"\uff0c\u5219\u4f1a\u76f4\u63a5\u622a\u65ad\u3002\n\u5982\u679c\u9700\u8981\u590d\u6742\u7684 ",(0,s.kt)("inlineCode",{parentName:"p"},"Http Post")," \u8bf7\u6c42\uff0c\u5efa\u8bae\u76f4\u63a5\u4f7f\u7528 ",(0,s.kt)("inlineCode",{parentName:"p"},"PostAsync"),",\u8fd4\u56de\u503c\u4e3a ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpResponseMessage"),"\uff0c\u53ef\u4ee5\u66f4\u7075\u6d3b\u7684\u63a7\u5236\u7ed3\u679c\u3002")),(0,s.kt)("h2",{id:"199-\u5173\u4e8e\u540c\u6b65\u8bf7\u6c42"},"19.9 \u5173\u4e8e\u540c\u6b65\u8bf7\u6c42"),(0,s.kt)("p",null,(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u5185\u90e8\u9ed8\u8ba4\u4e0d\u63d0\u4f9b\u540c\u6b65\u8bf7\u6c42\u64cd\u4f5c\uff0c\u5efa\u8bae\u603b\u662f\u4f7f\u7528\u5f02\u6b65\u7684\u65b9\u5f0f\u8bf7\u6c42\u3002\u5982\u5728\u4e0d\u80fd\u4f7f\u7528\u5f02\u6b65\u7684\u60c5\u51b5\u4e0b\uff0c\u53ef\u81ea\u884c\u8f6c\u6362\u4e3a\u540c\u6b65\u6267\u884c\u3002\u5982\uff1a"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u5b57\u7b26\u4e32\u62d3\u5c55\u65b9\u5f0f\uff1a")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4}",showLineNumbers:!0,"{1,4}":!0},'var result = "https://api.facebook.com".GetAsync().GetAwaiter().GetResult();\n\n// \u5982\u679c\u4e0d\u8003\u8651 Task \u5f02\u5e38\u6355\u83b7\uff0c\u53ef\u4ee5\u76f4\u63a5 .Result\nvar result = "https://api.facebook.com".GetAsync().Result;\n')),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u4ee3\u7406\u65b9\u5f0f")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {8,11}",showLineNumbers:!0,"{8,11}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Get("https://api.facebook.com")]\n Task GetAsync();\n}\n\n// \u540c\u6b65\u8c03\u7528\nvar result = _http.GetAsync().GetAwaiter().GetResult();\n\n// \u5982\u679c\u4e0d\u8003\u8651 Task \u5f02\u5e38\u6355\u83b7\uff0c\u53ef\u4ee5\u76f4\u63a5 .Result\nvar result = _http.GetAsync().Result;\n')),(0,s.kt)("h2",{id:"1910-\u9759\u6001-default-\u65b9\u5f0f\u6784\u5efa"},"19.10 \u9759\u6001 ",(0,s.kt)("inlineCode",{parentName:"h2"},"Default")," \u65b9\u5f0f\u6784\u5efa"),(0,s.kt)("p",null,"\u8fd9\u79cd\u65b9\u5f0f\u6bd4\u5b57\u7b26\u4e32\u62d3\u5c55\u597d\uff0c\u907f\u514d\u4e86\u76f4\u63a5\u5728\u5b57\u7b26\u4e32\u4e0a\u62d3\u5c55\u3002"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'await HttpRequestPart.Default().SetRequestUrl("https://www.baidu.com").GetAsStringAsync();\n')),(0,s.kt)("h2",{id:"1911-\u5173\u95ed-http-\u8bf7\u6c42\u65e5\u5fd7"},"19.11 \u5173\u95ed ",(0,s.kt)("inlineCode",{parentName:"h2"},"Http")," \u8bf7\u6c42\u65e5\u5fd7"),(0,s.kt)("p",null,"\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u5e95\u5c42\u4e2d\uff0c",(0,s.kt)("inlineCode",{parentName:"p"},"HttpClient")," \u5bf9\u8c61\u9ed8\u8ba4\u901a\u8fc7 ",(0,s.kt)("inlineCode",{parentName:"p"},"IHttpClientFactory")," \u521b\u5efa\u7684\uff0c\u53ea\u8981\u53d1\u9001\u8bf7\u6c42\u5c31\u4f1a\u81ea\u52a8\u6253\u5370\u65e5\u5fd7\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {13-22}",showLineNumbers:!0,"{13-22}":!0},"info: 2022-10-26 11:38:16(+08:00) \u661f\u671f\u4e09 L System.Logging.EventBusService[0] #1\n EventBus Hosted Service is running.\ninfo: 2022-10-26 11:38:17(+08:00) \u661f\u671f\u4e09 L Microsoft.Hosting.Lifetime[14] #1\n Now listening on: https://localhost:5001\ninfo: 2022-10-26 11:38:17(+08:00) \u661f\u671f\u4e09 L Microsoft.Hosting.Lifetime[14] #1\n Now listening on: http://localhost:5000\ninfo: 2022-10-26 11:38:17(+08:00) \u661f\u671f\u4e09 L Microsoft.Hosting.Lifetime[0] #1\n Application started. Press Ctrl+C to shut down.\ninfo: 2022-10-26 11:38:17(+08:00) \u661f\u671f\u4e09 L Microsoft.Hosting.Lifetime[0] #1\n Hosting environment: Development\ninfo: 2022-10-26 11:38:17(+08:00) \u661f\u671f\u4e09 L Microsoft.Hosting.Lifetime[0] #1\n Content root path: D:\\Workplaces\\OpenSources\\Furion\\samples\\Furion.Web.Entry\\\ninfo: 2022-10-26 11:39:00(+08:00) \u661f\u671f\u4e09 L System.Net.Http.HttpClient.Default.LogicalHandler[100] #8\n Start processing HTTP request GET https://www.baidu.com/\ninfo: 2022-10-26 11:39:00(+08:00) \u661f\u671f\u4e09 L System.Net.Http.HttpClient.Default.ClientHandler[100] #8\n Sending HTTP request GET https://www.baidu.com/\ninfo: 2022-10-26 11:39:00(+08:00) \u661f\u671f\u4e09 L System.Net.Http.HttpClient.Default.ClientHandler[101] #6\n Received HTTP response headers after 288.0665ms - 200\ninfo: 2022-10-26 11:39:00(+08:00) \u661f\u671f\u4e09 L System.Net.Http.HttpClient.Default.LogicalHandler[101] #6\n End processing HTTP request after 326.1497ms - 200\ninfo: 2022-10-26 11:39:04(+08:00) \u661f\u671f\u4e09 L System.Net.Http.HttpClient.Default.LogicalHandler[100] #3\n Start processing HTTP request GET https://www.baidu.com/\n")),(0,s.kt)("p",null,"\u5982\u9700\u5173\u95ed\u53ea\u9700\u5728 ",(0,s.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u548c ",(0,s.kt)("inlineCode",{parentName:"p"},"appsettings.Development.json")," \u4e2d\u6dfb\u52a0 ",(0,s.kt)("inlineCode",{parentName:"p"},"System.Net.Http.HttpClient")," \u65e5\u5fd7\u7c7b\u522b\u8fc7\u6ee4\u5373\u53ef\uff0c\u5982\uff1a"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2,7}",showLineNumbers:!0,"{2,7}":!0},'{\n "Logging": {\n "LogLevel": {\n "Default": "Information",\n "Microsoft.AspNetCore": "Warning",\n "Microsoft.EntityFrameworkCore": "Information",\n "System.Net.Http.HttpClient": "Warning"\n }\n }\n}\n')),(0,s.kt)("h2",{id:"1912-\u83b7\u53d6-cookies"},"19.12 \u83b7\u53d6 ",(0,s.kt)("inlineCode",{parentName:"h2"},"Cookies")),(0,s.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,s.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,s.kt)("inlineCode",{parentName:"p"},"Furion 4.7.4 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u5b57\u7b26\u4e32\u65b9\u5f0f")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"{2}":!0},'var response = await "https://www.furion.icu/".GetAsync();\nvar cookies = response.GetCookies();\n')),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"\u4ee3\u7406\u65b9\u5f0f")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,8}",showLineNumbers:!0,"{4,8}":!0},'public interface IHttp : IHttpDispatchProxy\n{\n [Get("https://www.furion.icu/")]\n Task GetAsync();\n}\n\nvar response = await _http.GetAsync();\nvar cookies = response.GetCookies();\n')),(0,s.kt)("h2",{id:"1913-\u53cd\u9988\u4e0e\u5efa\u8bae"},"19.13 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,s.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,s.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,s.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,s.kt)("hr",null),(0,s.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,s.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,s.kt)("inlineCode",{parentName:"p"},"HttpClient")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,s.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/http-requests?view=aspnetcore-5.0"},"ASP.NET Core - HTTP \u8bf7\u6c42")," \u7ae0\u8282")))}w.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/ace43ec3.60d2a559.js b/handbook/build/assets/js/ace43ec3.60d2a559.js new file mode 100644 index 00000000000..0f515fbb03b --- /dev/null +++ b/handbook/build/assets/js/ace43ec3.60d2a559.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[2583],{3905:function(e,n,t){t.d(n,{Zo:function(){return u},kt:function(){return c}});var i=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function l(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var p=i.createContext({}),s=function(e){var n=i.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},u=function(e){var n=s(e.components);return i.createElement(p.Provider,{value:n},e.children)},m={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},d=i.forwardRef((function(e,n){var t=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=s(t),c=a,k=d["".concat(p,".").concat(c)]||d[c]||m[c]||r;return t?i.createElement(k,l(l({ref:n},u),{},{components:t})):i.createElement(k,l({ref:n},u))}));function c(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=t.length,l=new Array(r);l[0]=d;var o={};for(var p in n)hasOwnProperty.call(n,p)&&(o[p]=n[p]);o.originalType=e,o.mdxType="string"==typeof e?e:a,l[1]=o;for(var s=2;s child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the component should be , and every should have a unique "value" prop.')})),f=null!=k?k:C.map((function(e){var n=e.props;return{value:n.value,label:n.label,attributes:n.attributes}})),h=(0,o.l)(f,(function(e,n){return e.value===n.value}));if(h.length>0)throw new Error('Docusaurus error: Duplicate values "'+h.map((function(e){return e.value})).join(", ")+'" found in . Every value needs to be unique.');var b=null===c?c:null!=(n=null!=c?c:null==(t=C.find((function(e){return e.props.default})))?void 0:t.props.value)?n:C[0].props.value;if(null!==b&&!f.some((function(e){return e.value===b})))throw new Error('Docusaurus error: The has a defaultValue "'+b+'" but none of its children has the corresponding value. Available values are: '+f.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");var w=(0,p.U)(),S=w.tabGroupChoices,v=w.setTabGroupChoices,y=(0,a.useState)(b),A=y[0],I=y[1],T=[],F=(0,s.o5)().blockElementScrollPositionUntilNextRender;if(null!=g){var L=S[g];null!=L&&L!==A&&f.some((function(e){return e.value===L}))&&I(L)}var D=function(e){var n=e.currentTarget,t=T.indexOf(n),i=f[t].value;i!==A&&(F(n),I(i),null!=g&&v(g,String(i)))},x=function(e){var n,t=null;switch(e.key){case"Enter":D(e);break;case"ArrowRight":var i,a=T.indexOf(e.currentTarget)+1;t=null!=(i=T[a])?i:T[0];break;case"ArrowLeft":var r,l=T.indexOf(e.currentTarget)-1;t=null!=(r=T[l])?r:T[T.length-1]}null==(n=t)||n.focus()};return a.createElement("div",{className:(0,r.Z)("tabs-container",u)},a.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,r.Z)("tabs",{"tabs--block":d},N)},f.map((function(e){var n=e.value,t=e.label,l=e.attributes;return a.createElement("li",(0,i.Z)({role:"tab",tabIndex:A===n?0:-1,"aria-selected":A===n,key:n,ref:function(e){return T.push(e)},onKeyDown:x,onClick:D},l,{className:(0,r.Z)("tabs__item",m,null==l?void 0:l.className,{"tabs__item--active":A===n})}),null!=t?t:n)}))),l?(0,a.cloneElement)(C.filter((function(e){return e.props.value===A}))[0],{className:"margin-top--md"}):a.createElement("div",{className:"margin-top--md"},C.map((function(e,n){return(0,a.cloneElement)(e,{key:n,hidden:e.props.value!==A})}))))}function c(e){var n=(0,l.Z)();return a.createElement(d,(0,i.Z)({key:String(n)},e))}},3113:function(e,n,t){t.r(n),t.d(n,{assets:function(){return c},contentTitle:function(){return m},default:function(){return N},frontMatter:function(){return u},metadata:function(){return d},toc:function(){return k}});var i=t(3117),a=t(102),r=(t(7294),t(3905)),l=t(4996),o=t(5488),p=t(5162),s=["components"],u={id:"specification-document",title:"6. \u89c4\u8303\u5316\u63a5\u53e3\u6587\u6863",sidebar_label:"6. \u89c4\u8303\u5316\u63a5\u53e3\u6587\u6863 (Swagger)"},m=void 0,d={unversionedId:"specification-document",id:"specification-document",title:"6. \u89c4\u8303\u5316\u63a5\u53e3\u6587\u6863",description:"",source:"@site/docs/specification-document.mdx",sourceDirName:".",slug:"/specification-document",permalink:"/docs/specification-document",draft:!1,editUrl:"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/docs/specification-document.mdx",tags:[],version:"current",lastUpdatedBy:"MonkSoul",lastUpdatedAt:1667987923,formattedLastUpdatedAt:"Nov 9, 2022",frontMatter:{id:"specification-document",title:"6. \u89c4\u8303\u5316\u63a5\u53e3\u6587\u6863",sidebar_label:"6. \u89c4\u8303\u5316\u63a5\u53e3\u6587\u6863 (Swagger)"},sidebar:"docs",previous:{title:"5.6 Vue/React/Angular \u8bf7\u6c42\u4ee3\u7406",permalink:"/docs/clientapi"},next:{title:"7. \u53cb\u597d\u5f02\u5e38\u5904\u7406",permalink:"/docs/friendly-exception"}},c={},k=[{value:"6.1 \u4ec0\u4e48\u662f\u63a5\u53e3\u6587\u6863",id:"61-\u4ec0\u4e48\u662f\u63a5\u53e3\u6587\u6863",level:2},{value:"6.2 \u4e3a\u4ec0\u4e48\u8981\u5199\u63a5\u53e3\u6587\u6863",id:"62-\u4e3a\u4ec0\u4e48\u8981\u5199\u63a5\u53e3\u6587\u6863",level:2},{value:"6.3 \u4e3a\u4ec0\u4e48\u9700\u8981\u89c4\u8303\u5316\u6587\u6863",id:"63-\u4e3a\u4ec0\u4e48\u9700\u8981\u89c4\u8303\u5316\u6587\u6863",level:2},{value:"6.3.1 \u534f\u8bae\u89c4\u8303",id:"631-\u534f\u8bae\u89c4\u8303",level:3},{value:"6.3.2 \u63a5\u53e3\u8def\u5f84\u89c4\u8303",id:"632-\u63a5\u53e3\u8def\u5f84\u89c4\u8303",level:3},{value:"6.3.3 \u7248\u672c\u63a7\u5236\u89c4\u8303",id:"633-\u7248\u672c\u63a7\u5236\u89c4\u8303",level:3},{value:"6.3.4 \u63a5\u53e3\u547d\u540d\u89c4\u8303",id:"634-\u63a5\u53e3\u547d\u540d\u89c4\u8303",level:3},{value:"6.3.5 \u8bf7\u6c42\u53c2\u6570\u89c4\u8303",id:"635-\u8bf7\u6c42\u53c2\u6570\u89c4\u8303",level:3},{value:"6.3.6 \u8fd4\u56de\u6570\u636e\u89c4\u8303",id:"636-\u8fd4\u56de\u6570\u636e\u89c4\u8303",level:3},{value:"6.4 \u4ec0\u4e48\u662f Swagger",id:"64-\u4ec0\u4e48\u662f-swagger",level:2},{value:"6.5 Swagger \u4f7f\u7528",id:"65-swagger-\u4f7f\u7528",level:2},{value:"6.5.1 \u6ce8\u518c\u670d\u52a1",id:"651-\u6ce8\u518c\u670d\u52a1",level:3},{value:"6.5.2 \u9ed8\u8ba4\u5730\u5740",id:"652-\u9ed8\u8ba4\u5730\u5740",level:3},{value:"6.5.3 \u9ed8\u8ba4\u5206\u7ec4",id:"653-\u9ed8\u8ba4\u5206\u7ec4",level:3},{value:"6.5.4 \u6587\u6863\u6ce8\u91ca",id:"654-\u6587\u6863\u6ce8\u91ca",level:3},{value:"6.5.5 \u591a\u5206\u7ec4\u652f\u6301",id:"655-\u591a\u5206\u7ec4\u652f\u6301",level:3},{value:"6.5.6 \u591a\u5206\u7ec4\u6392\u5e8f",id:"656-\u591a\u5206\u7ec4\u6392\u5e8f",level:3},{value:"6.5.7 \u591a\u5206\u7ec4\u4fe1\u606f\u914d\u7f6e",id:"657-\u591a\u5206\u7ec4\u4fe1\u606f\u914d\u7f6e",level:3},{value:"6.5.8 \u7ec4\u4e2d\u7ec4\uff08\u6807\u7b7e\uff09",id:"658-\u7ec4\u4e2d\u7ec4\u6807\u7b7e",level:3},{value:"\u672a\u8d34\u6807\u7b7e\u4e4b\u524d",id:"\u672a\u8d34\u6807\u7b7e\u4e4b\u524d",level:4},{value:"\u8d34\u6807\u7b7e\u4e4b\u540e",id:"\u8d34\u6807\u7b7e\u4e4b\u540e",level:4},{value:"6.5.9 \u9ed8\u8ba4\u5c55\u5f00\u6240\u6709\u6587\u6863",id:"659-\u9ed8\u8ba4\u5c55\u5f00\u6240\u6709\u6587\u6863",level:3},{value:"6.5.10 \u914d\u7f6e\u6587\u6863\u6807\u9898",id:"6510-\u914d\u7f6e\u6587\u6863\u6807\u9898",level:3},{value:"6.5.11 \u6388\u6743\u63a7\u5236",id:"6511-\u6388\u6743\u63a7\u5236",level:3},{value:"6.5.12 \u5728\u7ebf\u6d4b\u8bd5",id:"6512-\u5728\u7ebf\u6d4b\u8bd5",level:3},{value:"6.5.13 \u6027\u80fd\u76d1\u89c6 MiniProfiler",id:"6513-\u6027\u80fd\u76d1\u89c6-miniprofiler",level:3},{value:"6.5.14 \u5b9a\u4e49\u63a5\u53e3\u8f93\u51fa\u7c7b\u578b",id:"6514-\u5b9a\u4e49\u63a5\u53e3\u8f93\u51fa\u7c7b\u578b",level:3},{value:"6.5.15 \u9690\u85cf\u7279\u5b9a\u5206\u7ec4",id:"6515-\u9690\u85cf\u7279\u5b9a\u5206\u7ec4",level:3},{value:"6.5.16 \u4e2d\u6587\u4e71\u7801\u95ee\u9898",id:"6516-\u4e2d\u6587\u4e71\u7801\u95ee\u9898",level:3},{value:"6.5.17 \u751f\u4ea7\u73af\u5883\u4e2d\u5173\u95ed Swagger",id:"6517-\u751f\u4ea7\u73af\u5883\u4e2d\u5173\u95ed-swagger",level:3},{value:"6.5.18 \u8bbe\u7f6e Example Value \u9ed8\u8ba4\u503c",id:"6518-\u8bbe\u7f6e-example-value-\u9ed8\u8ba4\u503c",level:3},{value:"6.5.19 \u81ea\u5b9a\u4e49 Swagger \u914d\u7f6e",id:"6519-\u81ea\u5b9a\u4e49-swagger-\u914d\u7f6e",level:3},{value:"6.5.20 \u914d\u7f6e Swagger\u7684 Schemes",id:"6520-\u914d\u7f6e-swagger\u7684-schemes",level:3},{value:"6.5.21 \u81ea\u5b9a\u4e49 swagger.json \u8def\u7531\u6a21\u677f",id:"6521-\u81ea\u5b9a\u4e49-swaggerjson-\u8def\u7531\u6a21\u677f",level:3},{value:"6.5.22 \u5173\u4e8e application/x-www-form-urlencoded \u8bf7\u6c42",id:"6522-\u5173\u4e8e-applicationx-www-form-urlencoded-\u8bf7\u6c42",level:3},{value:"6.5.23 Swagger \u51fa\u73b0 CORS \u95ee\u9898\u89e3\u51b3",id:"6523-swagger-\u51fa\u73b0-cors-\u95ee\u9898\u89e3\u51b3",level:3},{value:"6.5.24 Swagger \u51fa\u73b0\u9ed8\u8ba4 xml \u53c2\u6570\u95ee\u9898\u89e3\u51b3",id:"6524-swagger-\u51fa\u73b0\u9ed8\u8ba4-xml-\u53c2\u6570\u95ee\u9898\u89e3\u51b3",level:3},{value:"6.5.25 Swagger \u591a\u8bed\u8a00\u652f\u6301",id:"6525-swagger-\u591a\u8bed\u8a00\u652f\u6301",level:3},{value:"6.5.26 \u81ea\u5b9a\u4e49\u903b\u8f91\u63a7\u5236 Swagger \u6bcf\u4e00\u4e2a api \u53ef\u89c1\u6027",id:"6526-\u81ea\u5b9a\u4e49\u903b\u8f91\u63a7\u5236-swagger-\u6bcf\u4e00\u4e2a-api-\u53ef\u89c1\u6027",level:3},{value:"6.5.27 \u914d\u7f6e MVC \u63a7\u5236\u5668\u652f\u6301\u89c4\u8303\u5316\u5904\u7406",id:"6527-\u914d\u7f6e-mvc-\u63a7\u5236\u5668\u652f\u6301\u89c4\u8303\u5316\u5904\u7406",level:3},{value:"6.5.28 Swagger \u5237\u65b0\u8bb0\u4f4f\u6388\u6743\u72b6\u6001",id:"6528-swagger-\u5237\u65b0\u8bb0\u4f4f\u6388\u6743\u72b6\u6001",level:3},{value:"6.5.29 \u5e26\u767b\u5f55\u7684 Swagger \u6587\u6863",id:"6529-\u5e26\u767b\u5f55\u7684-swagger-\u6587\u6863",level:3},{value:"\u914d\u7f6e\u8bf4\u660e",id:"\u914d\u7f6e\u8bf4\u660e",level:4},{value:"\u914d\u7f6e\u793a\u4f8b",id:"\u914d\u7f6e\u793a\u4f8b",level:4},{value:"6.5.30 inheritdoc \u5b9e\u73b0\u6ce8\u91ca\u7ee7\u627f",id:"6530-inheritdoc-\u5b9e\u73b0\u6ce8\u91ca\u7ee7\u627f",level:2},{value:"6.5.31 \u542f\u7528 All Groups \u5206\u7ec4\u529f\u80fd",id:"6531-\u542f\u7528-all-groups-\u5206\u7ec4\u529f\u80fd",level:3},{value:"6.5.32 \u63a5\u53e3\u8fc7\u65f6\u63a7\u5236",id:"6532-\u63a5\u53e3\u8fc7\u65f6\u63a7\u5236",level:3},{value:"6.5.33 \u5355\u4e00\u63a5\u53e3\u66f4\u591a\u63cf\u8ff0",id:"6533-\u5355\u4e00\u63a5\u53e3\u66f4\u591a\u63cf\u8ff0",level:3},{value:"6.5.34 Swagger \u5f02\u5e38/\u4e0d\u80fd\u663e\u793a/\u9519\u8bef\u5904\u7406",id:"6534-swagger-\u5f02\u5e38\u4e0d\u80fd\u663e\u793a\u9519\u8bef\u5904\u7406",level:3},{value:"6.5.35 \u81ea\u5b9a\u4e49 Swagger \u7684 SchemaId",id:"6535-\u81ea\u5b9a\u4e49-swagger-\u7684-schemaid",level:3},{value:"6.5.36 \u81ea\u5b9a\u4e49 Swagger \u7684 OperationId",id:"6536-\u81ea\u5b9a\u4e49-swagger-\u7684-operationid",level:3},{value:"6.5.37 Swagger \u63a5\u53e3\u6587\u6863\u652f\u6301\u5b8c\u6574\u7684 Markdown",id:"6537-swagger-\u63a5\u53e3\u6587\u6863\u652f\u6301\u5b8c\u6574\u7684-markdown",level:3},{value:"6.5.38 \u7b2c\u4e09\u65b9 UI \u96c6\u6210\uff0c\u5982 Knife4jUI",id:"6538-\u7b2c\u4e09\u65b9-ui-\u96c6\u6210\u5982-knife4jui",level:3},{value:"6.6 SpecificationDocumentSettings \u914d\u7f6e",id:"66-specificationdocumentsettings-\u914d\u7f6e",level:2},{value:"6.7 \u7edf\u4e00\u8fd4\u56de\u503c\u6a21\u578b/\u89c4\u8303\u5316\u7ed3\u679c/API \u8fd4\u56de\u503c",id:"67-\u7edf\u4e00\u8fd4\u56de\u503c\u6a21\u578b\u89c4\u8303\u5316\u7ed3\u679capi-\u8fd4\u56de\u503c",level:2},{value:"6.7.1 \u6392\u9664\u89c4\u8303\u5316\u5904\u7406",id:"671-\u6392\u9664\u89c4\u8303\u5316\u5904\u7406",level:3},{value:"6.7.2 \u89c4\u8303\u5316\u7ed3\u679c\u6dfb\u52a0\u989d\u5916\u6570\u636e",id:"672-\u89c4\u8303\u5316\u7ed3\u679c\u6dfb\u52a0\u989d\u5916\u6570\u636e",level:3},{value:"6.7.3 \u81ea\u5b9a\u4e49\u7279\u522b\u63a5\u53e3\u89c4\u8303\u5316\u7ed3\u679c",id:"673-\u81ea\u5b9a\u4e49\u7279\u522b\u63a5\u53e3\u89c4\u8303\u5316\u7ed3\u679c",level:3},{value:"6.8 \u652f\u6301\u591a\u5957\u89c4\u8303\u5316\u914d\u7f6e",id:"68-\u652f\u6301\u591a\u5957\u89c4\u8303\u5316\u914d\u7f6e",level:2},{value:"6.9 \u9488\u5bf9\u7279\u5b9a\u63a7\u5236\u5668\u6216\u7279\u5b9a\u65b9\u6cd5\u914d\u7f6e\u5e8f\u5217\u5316\u9009\u9879",id:"69-\u9488\u5bf9\u7279\u5b9a\u63a7\u5236\u5668\u6216\u7279\u5b9a\u65b9\u6cd5\u914d\u7f6e\u5e8f\u5217\u5316\u9009\u9879",level:2},{value:"6.9.1 \u901a\u8fc7 JsonResult \u8bbe\u7f6e\u7b2c\u4e8c\u4e2a\u53c2\u6570",id:"691-\u901a\u8fc7-jsonresult-\u8bbe\u7f6e\u7b2c\u4e8c\u4e2a\u53c2\u6570",level:3},{value:"6.9.2 \u6ce8\u518c\u591a\u5957\u5e8f\u5217\u5316\u914d\u7f6e\u9009\u9879 (\u63a8\u8350)",id:"692-\u6ce8\u518c\u591a\u5957\u5e8f\u5217\u5316\u914d\u7f6e\u9009\u9879-\u63a8\u8350",level:3},{value:"6.10 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"610-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],g={toc:k};function N(e){var n=e.components,t=(0,a.Z)(e,s);return(0,r.kt)("wrapper",(0,i.Z)({},g,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"61-\u4ec0\u4e48\u662f\u63a5\u53e3\u6587\u6863"},"6.1 \u4ec0\u4e48\u662f\u63a5\u53e3\u6587\u6863"),(0,r.kt)("p",null,"\u5728\u73b0\u5728\u79fb\u52a8\u4e3a\u738b\u3001\u591a\u7aef\u4e92\u8f85\u3001\u524d\u7aef\u767e\u82b1\u9f50\u653e\u7684\u5f00\u653e\u65f6\u4ee3\uff0c\u4e0d\u518d\u662f\u4e00\u4eba\u5305\u63fd\u5f0f\u5f00\u53d1\uff0c\u5927\u5bb6\u5404\u53f8\u5176\u804c\uff0c\u540e\u7aef\u5de5\u7a0b\u5e08\u8d1f\u8d23\u63a5\u53e3\u5f00\u53d1\uff0c\u524d\u7aef\u8d1f\u8d23\u63a5\u53e3\u8054\u8c03\uff0c\u4e5f\u5c31\u662f\u4e92\u8054\u7f51\u73b0\u5728\u6d41\u884c\u7684\u524d\u540e\u7aef\u5206\u79bb\u67b6\u6784\u3002"),(0,r.kt)("p",null,"\u6240\u4ee5\u5c31\u9700\u8981\u7531\u524d\u540e\u7aef\u5de5\u7a0b\u5e08\u5171\u540c\u5b9a\u4e49\u63a5\u53e3\uff0c\u7f16\u5199\u63a5\u53e3\u6587\u6863\uff0c\u4e4b\u540e\u5927\u5bb6\u6309\u7167\u8fd9\u4e2a\u63a5\u53e3\u6587\u6863\u8fdb\u884c\u5f00\u53d1\u3001\u7ef4\u62a4\u53ca\u5f00\u653e\u7ed9\u7b2c\u4e09\u65b9\u3002"),(0,r.kt)("h2",{id:"62-\u4e3a\u4ec0\u4e48\u8981\u5199\u63a5\u53e3\u6587\u6863"},"6.2 \u4e3a\u4ec0\u4e48\u8981\u5199\u63a5\u53e3\u6587\u6863"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u80fd\u591f\u8ba9\u524d\u7aef\u5f00\u53d1\u4e0e\u540e\u53f0\u5f00\u53d1\u4eba\u5458\u66f4\u597d\u7684\u914d\u5408\uff0c\u63d0\u9ad8\u5de5\u4f5c\u6548\u7387"),(0,r.kt)("li",{parentName:"ul"},"\u9879\u76ee\u8fed\u4ee3\u6216\u8005\u9879\u76ee\u4eba\u5458\u66f4\u8fed\u65f6\uff0c\u65b9\u4fbf\u540e\u671f\u4eba\u5458\u67e5\u770b\u548c\u7ef4\u62a4"),(0,r.kt)("li",{parentName:"ul"},"\u65b9\u4fbf\u6d4b\u8bd5\u4eba\u5458\u8fdb\u884c\u63a5\u53e3\u6d4b\u8bd5")),(0,r.kt)("h2",{id:"63-\u4e3a\u4ec0\u4e48\u9700\u8981\u89c4\u8303\u5316\u6587\u6863"},"6.3 \u4e3a\u4ec0\u4e48\u9700\u8981\u89c4\u8303\u5316\u6587\u6863"),(0,r.kt)("p",null,"\u7531\u4e8e\u6bcf\u4e2a\u516c\u53f8\u540e\u7aef\u4eba\u5458\u6280\u672f\u53c2\u5dee\u4e0d\u9f50\uff0c\u6280\u672f\u6587\u6863\u80fd\u529b\u4e5f\u4e0d\u4f8b\u5916\uff0c\u5bfc\u81f4\u63a5\u53e3\u5b9a\u4e49\u53ca\u6587\u6863\u4e94\u82b1\u516b\u95e8\uff0c\u4e0d\u540c\u9879\u76ee\u6216\u4e0d\u540c\u516c\u53f8\u5bf9\u63a5\u6781\u5176\u56f0\u96be\uff0c\u800c\u4e14\u4f53\u9a8c\u7cdf\u7cd5\u3002\u6240\u4ee5\uff0c\u65e0\u89c4\u77e9\u4e0d\u6210\u65b9\u5706\uff0c\u4e3a\u4e86\u5f00\u53d1\u4eba\u5458\u95f4\u66f4\u597d\u7684\u914d\u5408\uff0c\u8feb\u5207\u9700\u8981\u6574\u7406\u51fa\u4e00\u5957\u89c4\u8303\u3002"),(0,r.kt)("p",null,"\u901a\u5e38\u63a5\u53e3\u89c4\u8303\u5206\u4e3a\u516d\u4e2a\u90e8\u5206\uff1a"),(0,r.kt)("h3",{id:"631-\u534f\u8bae\u89c4\u8303"},"6.3.1 \u534f\u8bae\u89c4\u8303"),(0,r.kt)("p",null,"\u4e3a\u4e86\u786e\u4fdd\u4e0d\u540c\u7cfb\u7edf/\u6a21\u5757\u95f4\u7684\u6570\u636e\u4ea4\u4e92\uff0c\u9700\u8981\u4e8b\u5148\u7ea6\u5b9a\u597d\u901a\u8baf\u534f\u8bae\uff0c\u5982\uff1aTCP\u3001HTTP\u3001HTTPS \u534f\u8bae\u3002\u4e3a\u4e86\u786e\u4fdd\u6570\u636e\u4ea4\u4e92\u5b89\u5168\uff0c\u5efa\u8bae\u4f7f\u7528 HTTPS \u534f\u8bae"),(0,r.kt)("h3",{id:"632-\u63a5\u53e3\u8def\u5f84\u89c4\u8303"},"6.3.2 \u63a5\u53e3\u8def\u5f84\u89c4\u8303"),(0,r.kt)("p",null,"\u4f5c\u4e3a\u63a5\u53e3\u8def\u5f84\uff0c\u4e3a\u4e86\u65b9\u4fbf\u6e05\u6670\u7684\u533a\u5206\u6765\u81ea\u4e0d\u540c\u7684\u7cfb\u7edf\uff0c\u53ef\u4ee5\u91c7\u7528\u4e0d\u540c\u7cfb\u7edf/\u6a21\u5757\u540d\u4f5c\u4e3a\u63a5\u53e3\u8def\u5f84\u524d\u7f00\uff0c\u5982\uff1a\u652f\u4ed8\u6a21\u5757\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"/pay/xxx"),"\uff0c\u8ba2\u5355\u6a21\u5757\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"/order/xxx")),(0,r.kt)("h3",{id:"633-\u7248\u672c\u63a7\u5236\u89c4\u8303"},"6.3.3 \u7248\u672c\u63a7\u5236\u89c4\u8303"),(0,r.kt)("p",null,'\u4e3a\u4e86\u4fbf\u4e8e\u540e\u671f\u63a5\u53e3\u7684\u5347\u7ea7\u548c\u7ef4\u62a4\uff0c\u5efa\u8bae\u5728\u63a5\u53e3\u8def\u5f84\u4e2d\u52a0\u5165\u7248\u672c\u53f7\uff0c\u4fbf\u4e8e\u7ba1\u7406\uff0c\u5b9e\u73b0\u63a5\u53e3\u591a\u7248\u672c\u7684\u53ef\u7ef4\u62a4\u6027\u3002\u5982\uff1a\u63a5\u53e3\u8def\u5f84\u4e2d\u6dfb\u52a0\u7c7b\u4f3c"',(0,r.kt)("inlineCode",{parentName:"p"},"v1"),'"\u3001"',(0,r.kt)("inlineCode",{parentName:"p"},"v2"),'"\u7b49\u7248\u672c\u53f7'),(0,r.kt)("h3",{id:"634-\u63a5\u53e3\u547d\u540d\u89c4\u8303"},"6.3.4 \u63a5\u53e3\u547d\u540d\u89c4\u8303"),(0,r.kt)("p",null,'\u548c C# \u547d\u540d\u89c4\u8303\u4e00\u6837\uff0c\u597d\u7684\u3001\u7edf\u4e00\u7684\u63a5\u53e3\u547d\u540d\u89c4\u8303\uff0c\u4e0d\u4ec5\u53ef\u4ee5\u589e\u5f3a\u5176\u53ef\u8bfb\u6027\uff0c\u800c\u4e14\u8fd8\u4f1a\u51cf\u5c11\u5f88\u591a\u4e0d\u5fc5\u8981\u7684\u53e3\u5934/\u4e66\u9762\u4e0a\u7684\u89e3\u91ca\u3002\u53ef\u4f7f\u7528"\u9a7c\u5cf0\u547d\u540d\u6cd5"\u6309\u7167\u5b9e\u73b0\u63a5\u53e3\u7684',(0,r.kt)("strong",{parentName:"p"},"\u4e1a\u52a1\u7c7b\u578b\u3001\u4e1a\u52a1\u573a\u666f"),"\u7b49\u547d\u540d\uff0c\u6709\u5fc5\u8981\u65f6\u53ef\u91c7\u53d6\u591a\u7ea7\u76ee\u5f55\u547d\u540d\uff0c\u4f46\u76ee\u5f55\u4e0d\u5b9c\u8fc7\u957f\uff0c\u4e24\u7ea7\u76ee\u5f55\u8f83\u4e3a\u9002\u5b9c"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u5e38\u89c1\u547d\u540d\u65b9\u5f0f"),":",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u63a5\u53e3\u540d\u79f0\u52a8\u8bcd\u524d/\u540e\u7f00\u5316"),"\uff1a \u63a5\u53e3\u540d\u79f0\u4ee5\u63a5\u53e3\u6570\u636e\u64cd\u4f5c\u7684\u52a8\u8bcd\u4e3a\u524d/\u540e\u7f00\uff0c\u5e38\u89c1\u52a8\u8bcd\u6709\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"Add\u3001Delete\u3001Update\u3001Query\u3001Get\u3001Send\u3001Save\u3001Detail\u3001List"),"\u7b49\uff0c\u5982\uff1a\u65b0\u5efa\u7528\u6237 ",(0,r.kt)("inlineCode",{parentName:"li"},"AddUser"),"\u3001\u67e5\u8be2\u8ba2\u5355\u8be6\u60c5 ",(0,r.kt)("inlineCode",{parentName:"li"},"QueryOrderDetail"),"\u3002"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u63a5\u53e3\u540d\u79f0\u52a8\u8bcd + \u8bf7\u6c42\u65b9\u5f0f"),"\uff1a\u63a5\u53e3\u8def\u5f84\u4e2d\u5305\u542b\u5177\u4f53\u63a5\u53e3\u540d\u79f0\u7684\u540d\u8bcd\uff0c\u63a5\u53e3\u6570\u636e\u64cd\u4f5c\u52a8\u4f5c\u4ee5 HTTP \u8bf7\u6c42\u65b9\u5f0f\u6765\u533a\u5206\u3002\u5e38\u7528\u7684 HTTP \u8bf7\u6c42\u65b9\u5f0f\u6709\uff1a",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"GET"),"\uff1a\u4ece\u670d\u52a1\u5668\u53d6\u51fa\u8d44\u6e90\uff08\u4e00\u9879\u6216\u591a\u9879\uff09"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"POST"),"\uff1a\u5728\u670d\u52a1\u5668\u65b0\u5efa\u4e00\u4e2a\u8d44\u6e90"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"PUT"),"\uff1a\u5728\u670d\u52a1\u5668\u66f4\u65b0\u8d44\u6e90\uff08\u5ba2\u6237\u7aef\u63d0\u4f9b\u6539\u53d8\u540e\u7684\u5b8c\u6574\u8d44\u6e90\uff09"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"PATCH"),"\uff1a\u5728\u670d\u52a1\u5668\u66f4\u65b0\u8d44\u6e90\uff08\u5ba2\u6237\u7aef\u63d0\u4f9b\u6539\u53d8\u7684\u5c5e\u6027\uff09"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"DELETE"),"\uff1a\u4ece\u670d\u52a1\u5668\u5220\u9664\u8d44\u6e90")))))),(0,r.kt)("h3",{id:"635-\u8bf7\u6c42\u53c2\u6570\u89c4\u8303"},"6.3.5 \u8bf7\u6c42\u53c2\u6570\u89c4\u8303"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u8bf7\u6c42\u65b9\u5f0f"),"\uff1a\u6309\u7167 ",(0,r.kt)("inlineCode",{parentName:"li"},"GET\u3001POST\u3001PUT")," \u7b49\u542b\u4e49\u5b9a\u4e49\uff0c\u907f\u514d\u51fa\u73b0\u4e0d\u4e00\u81f4\u73b0\u8c61\uff0c\u5bf9\u4eba\u9020\u6210\u8bef\u89e3\u3001\u6b67\u4e49",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u8bf7\u6c42\u5934"),"\uff1a\u8bf7\u6c42\u5934\u6839\u636e\u9879\u76ee\u9700\u6c42\u6dfb\u52a0\u914d\u7f6e\u53c2\u6570\u3002\u5982\uff1a\u8bf7\u6c42\u6570\u636e\u683c\u5f0f\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"accept=application/json")," \u7b49\u3002\u5982\u6709\u9700\u8981\uff0c\u8bf7\u6c42\u5934\u53ef\u6839\u636e\u9879\u76ee\u9700\u6c42\u8981\u6c42\u4f20\u5165\u7528\u6237 token\u3001\u552f\u4e00\u9a8c\u7b7e\u7801\u7b49\u52a0\u5bc6\u6570\u636e"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u8bf7\u6c42\u53c2\u6570/\u8bf7\u6c42\u4f53"),"\uff1a \u8bf7\u6c42\u53c2\u6570\u5b57\u6bb5\uff0c\u5c3d\u53ef\u80fd\u4e0e\u6570\u636e\u5e93\u8868\u5b57\u6bb5\u3001\u5bf9\u8c61\u5c5e\u6027\u540d\u7b49\u4fdd\u6301\u4e00\u81f4\uff0c\u56e0\u4e3a\u4fdd\u6301\u4e00\u81f4\u662f\u6700\u7701\u4e8b\uff0c\u6700\u8212\u670d\u7684\u4e00\u4ef6\u4e8b")))),(0,r.kt)("h3",{id:"636-\u8fd4\u56de\u6570\u636e\u89c4\u8303"},"6.3.6 \u8fd4\u56de\u6570\u636e\u89c4\u8303"),(0,r.kt)("p",null,"\u7edf\u4e00\u89c4\u8303\u8fd4\u56de\u6570\u636e\u7684\u683c\u5f0f\uff0c\u5bf9\u5df1\u5bf9\u5f7c\u90fd\u6709\u597d\u5904\uff0c\u6b64\u5904\u4ee5 json \u683c\u5f0f\u4e3a\u4f8b\u3002\u8fd4\u56de\u6570\u636e\u5e94\u5305\u542b\uff1a",(0,r.kt)("strong",{parentName:"p"},"\u8fd4\u56de\u72b6\u6001\u7801\u3001\u8fd4\u56de\u72b6\u6001\u4fe1\u606f\u3001\u5177\u4f53\u6570\u636e"),"\u3002",(0,r.kt)("strong",{parentName:"p"},"\u8fd4\u56de\u6570\u636e\u4e2d\u7684\u72b6\u6001\u7801\u3001\u72b6\u6001\u4fe1\u606f\uff0c\u5e38\u6307\u5177\u4f53\u7684\u4e1a\u52a1\u72b6\u6001\uff0c\u4e0d\u5efa\u8bae\u548c HTTP \u72b6\u6001\u7801\u6df7\u5728\u4e00\u8d77"),"\u3002HTTP \u72b6\u6001\uff0c\u662f\u7528\u6765\u4f53\u73b0 HTTP \u94fe\u8def\u72b6\u6001\u60c5\u51b5\uff0c\u5982\uff1a404-Not Found\u3002HTTP \u72b6\u6001\u7801\u548c json \u7ed3\u679c\u4e2d\u7684\u72b6\u6001\u7801\uff0c\u5e76\u5b58\u5c1a\u53ef\uff0c\u7528\u4e8e\u4f53\u73b0\u4e0d\u540c\u7ef4\u5ea6\u7684\u72b6\u6001\u3002"),(0,r.kt)("h2",{id:"64-\u4ec0\u4e48\u662f-swagger"},"6.4 \u4ec0\u4e48\u662f Swagger"),(0,r.kt)("p",null,"\u76f8\u4fe1\u65e0\u8bba\u662f\u524d\u7aef\u8fd8\u662f\u540e\u7aef\u5f00\u53d1\uff0c\u90fd\u6216\u591a\u6216\u5c11\u5730\u88ab\u63a5\u53e3\u6587\u6863\u6298\u78e8\u8fc7\u3002\u524d\u7aef\u7ecf\u5e38\u62b1\u6028\u540e\u7aef\u7ed9\u7684\u63a5\u53e3\u6587\u6863\u4e0e\u5b9e\u9645\u60c5\u51b5\u4e0d\u4e00\u81f4\u3002\u540e\u7aef\u53c8\u89c9\u5f97\u7f16\u5199\u53ca\u7ef4\u62a4\u63a5\u53e3\u6587\u6863\u4f1a\u8017\u8d39\u4e0d\u5c11\u7cbe\u529b\uff0c\u7ecf\u5e38\u6765\u4e0d\u53ca\u66f4\u65b0\u3002"),(0,r.kt)("p",null,"\u5176\u5b9e\u65e0\u8bba\u662f\u524d\u7aef\u8c03\u7528\u540e\u7aef\uff0c\u8fd8\u662f\u540e\u7aef\u8c03\u7528\u540e\u7aef\uff0c\u90fd\u671f\u671b\u6709\u4e00\u4e2a\u597d\u7684\u63a5\u53e3\u6587\u6863\u3002\u4f46\u662f\u8fd9\u4e2a\u63a5\u53e3\u6587\u6863\u5bf9\u4e8e\u7a0b\u5e8f\u5458\u6765\u8bf4\uff0c\u5c31\u8ddf\u6ce8\u91ca\u4e00\u6837\uff0c\u7ecf\u5e38\u4f1a\u62b1\u6028\u522b\u4eba\u5199\u7684\u4ee3\u7801\u6ca1\u6709\u5199\u6ce8\u91ca\uff0c\u7136\u800c\u81ea\u5df1\u5199\u8d77\u4ee3\u7801\u8d77\u6765\uff0c\u6700\u8ba8\u538c\u7684\uff0c\u4e5f\u662f\u5199\u6ce8\u91ca\u3002\u6240\u4ee5\u4ec5\u4ec5\u53ea\u901a\u8fc7\u5f3a\u5236\u6765\u89c4\u8303\u5927\u5bb6\u662f\u4e0d\u591f\u7684\uff0c\u968f\u7740\u65f6\u95f4\u63a8\u79fb\uff0c\u7248\u672c\u8fed\u4ee3\uff0c\u63a5\u53e3\u6587\u6863\u5f80\u5f80\u5f88\u5bb9\u6613\u5c31\u8ddf\u4e0d\u4e0a\u4ee3\u7801\u4e86\u3002"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u53d1\u73b0\u4e86\u75db\u70b9\u5c31\u8981\u53bb\u627e\u89e3\u51b3\u65b9\u6848\u3002\u89e3\u51b3\u65b9\u6848\u7528\u7684\u4eba\u591a\u4e86\uff0c\u5c31\u6210\u4e86\u6807\u51c6\u7684\u89c4\u8303\uff0c\u8fd9\u5c31\u662f ",(0,r.kt)("inlineCode",{parentName:"strong"},"Swagger")," \u7684\u7531\u6765"),"\u3002"),(0,r.kt)("p",null,"\u901a\u8fc7\u8fd9\u5957\u89c4\u8303\uff0c\u4f60\u53ea\u9700\u8981\u6309\u7167\u5b83\u7684\u89c4\u8303\u53bb\u5b9a\u4e49\u63a5\u53e3\u53ca\u63a5\u53e3\u76f8\u5173\u7684\u4fe1\u606f\u3002\u518d\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u884d\u751f\u51fa\u6765\u7684\u4e00\u7cfb\u5217\u9879\u76ee\u548c\u5de5\u5177\uff0c\u5c31\u53ef\u4ee5\u505a\u5230\u751f\u6210\u5404\u79cd\u683c\u5f0f\u7684\u63a5\u53e3\u6587\u6863\uff0c\u751f\u6210\u591a\u79cd\u8bed\u8a00\u7684\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u7aef\u7684\u4ee3\u7801\uff0c\u4ee5\u53ca\u5728\u7ebf\u63a5\u53e3\u8c03\u8bd5\u9875\u9762\u7b49\u7b49\u3002"),(0,r.kt)("p",null,"\u8fd9\u6837\uff0c\u5982\u679c\u6309\u7167\u65b0\u7684\u5f00\u53d1\u6a21\u5f0f\uff0c\u5728\u5f00\u53d1\u65b0\u7248\u672c\u6216\u8005\u8fed\u4ee3\u7248\u672c\u7684\u65f6\u5019\uff0c\u53ea\u9700\u8981\u66f4\u65b0 ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u63cf\u8ff0\u6587\u4ef6\uff0c\u5c31\u53ef\u4ee5\u81ea\u52a8\u751f\u6210\u63a5\u53e3\u6587\u6863\u548c\u5ba2\u6237\u7aef\u670d\u52a1\u7aef\u4ee3\u7801\uff0c\u505a\u5230\u8c03\u7528\u7aef\u4ee3\u7801\u3001\u670d\u52a1\u7aef\u4ee3\u7801\u4ee5\u53ca\u63a5\u53e3\u6587\u6863\u7684\u4e00\u81f4\u6027\u3002"),(0,r.kt)("p",null,"\u6240\u4ee5\uff0cSwagger \u662f\u4e00\u4e2a\u89c4\u8303\u548c\u5b8c\u6574\u7684\u6846\u67b6\uff0c\u7528\u4e8e\u751f\u6210\u3001\u63cf\u8ff0\u3001\u8c03\u7528\u548c\u53ef\u89c6\u5316",(0,r.kt)("inlineCode",{parentName:"p"},"RESTful")," \u98ce\u683c\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Web")," \u670d\u52a1\u3002"),(0,r.kt)("p",null,"\u603b\u4f53\u76ee\u6807\u662f\u4f7f\u5ba2\u6237\u7aef\u548c\u6587\u4ef6\u7cfb\u7edf\u4f5c\u4e3a\u670d\u52a1\u5668\u4ee5\u540c\u6837\u7684\u901f\u5ea6\u6765\u66f4\u65b0\u3002\u6587\u4ef6\u7684\u65b9\u6cd5\u3001\u53c2\u6570\u548c\u6a21\u578b\u7d27\u5bc6\u96c6\u6210\u5230\u670d\u52a1\u5668\u7aef\u7684\u4ee3\u7801\uff0c\u5141\u8bb8 API \u6765\u59cb\u7ec8\u4fdd\u6301\u540c\u6b65\u3002",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u8ba9\u90e8\u7f72\u7ba1\u7406\u548c\u4f7f\u7528\u529f\u80fd\u5f3a\u5927\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"API")," \u4ece\u672a\u5982\u6b64\u7b80\u5355\u3002"),(0,r.kt)("h2",{id:"65-swagger-\u4f7f\u7528"},"6.5 Swagger \u4f7f\u7528"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u975e\u5e38\u65b9\u4fbf\u4e14\u7075\u6d3b\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u914d\u7f6e\uff0c\u65e0\u9700\u589e\u52a0\u989d\u5916\u5b66\u4e60\u6210\u672c\u3002"),(0,r.kt)("h3",{id:"651-\u6ce8\u518c\u670d\u52a1"},"6.5.1 \u6ce8\u518c\u670d\u52a1"),(0,r.kt)("admonition",{title:"\u5907\u6ce8",type:"important"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},".UseInject()")," \u5df2\u7ecf\u5305\u542b\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},".UseSpecificationDocuments()")," \u6ce8\u518c\uff0c\u65e0\u9700\u518d\u6b21\u6ce8\u518c\u3002")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:'showLineNumbers {13,21} title="Furion.Web.Core\\Startup.cs"',showLineNumbers:!0,"":!0,"{13,21}":!0,title:'"Furion.Web.Core\\Startup.cs"'},"using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace Furion.Web.Core\n{\n [AppStartup(800)]\n public sealed class FurWebCoreStartup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n services.AddSpecificationDocuments();\n services.AddControllers();\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n // Other Codes\n\n app.UseSpecificationDocuments();\n\n app.UseEndpoints(endpoints =>\n {\n endpoints.MapControllers();\n });\n }\n }\n}\n")),(0,r.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"services.AddSpecificationDocuments()")," \u901a\u5e38\u548c ",(0,r.kt)("inlineCode",{parentName:"p"},".AddDynamicApiControllers()")," \u6210\u5bf9\u51fa\u73b0\u3002")),(0,r.kt)("h3",{id:"652-\u9ed8\u8ba4\u5730\u5740"},"6.5.2 \u9ed8\u8ba4\u5730\u5740"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u89c4\u8303\u5316\u6587\u6863")," \u5730\u5740\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"/api")," \u76ee\u5f55\uff0c",(0,r.kt)("strong",{parentName:"p"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e"),"\u3002"),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/swagger1.png")}),(0,r.kt)("p",null,"\u53ef\u4ee5\u901a\u8fc7\u4e24\u79cd\u65b9\u5f0f\u914d\u7f6e\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},'app.UseInject("\u8def\u7531")')," \u65b9\u5f0f\uff0c\u5982")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'app.UseInject("testapi"); // \u90a3\u4e48 /testapi \u5c31\u662f\u89c4\u8303\u5316\u5730\u5740\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u914d\u7f6e\u6587\u4ef6\u914d\u7f6e"),"\uff1a")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},'{\n "SpecificationDocumentSettings": {\n "RoutePrefix": "testapi"\n }\n}\n')),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u914d\u7f6e\u6587\u4ef6\u4f18\u5148\u7ea7\u5927\u4e8e ",(0,r.kt)("inlineCode",{parentName:"strong"},"UseInject()")," \u65b9\u5f0f")),(0,r.kt)("h3",{id:"653-\u9ed8\u8ba4\u5206\u7ec4"},"6.5.3 \u9ed8\u8ba4\u5206\u7ec4"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\u9ed8\u8ba4\u5206\u7ec4\u540d\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"Default"),"\uff0c",(0,r.kt)("strong",{parentName:"p"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e"),"\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},'{\n "SpecificationDocumentSettings": {\n "DefaultGroupName": "MyGroup"\n }\n}\n')),(0,r.kt)("h3",{id:"654-\u6587\u6863\u6ce8\u91ca"},"6.5.4 \u6587\u6863\u6ce8\u91ca"),(0,r.kt)("p",null,"\u89c4\u8303\u5316\u6587\u6863\u9ed8\u8ba4\u626b\u63cf ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Application"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Web.Core"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Web.Entry")," \u4e09\u4e2a\u7a0b\u5e8f\u96c6",(0,r.kt)("inlineCode",{parentName:"p"},".xml")," \u6ce8\u91ca\u6587\u4ef6\uff0c",(0,r.kt)("strong",{parentName:"p"},"\u652f\u6301\u81ea\u5b9a\u4e49\u914d\u7f6e"),"\u3002"),(0,r.kt)("p",null,"\u53ea\u652f\u6301 ",(0,r.kt)("inlineCode",{parentName:"p"},"///")," \u6807\u8bc6\u7684\u6ce8\u91ca\u8bed\u6cd5\uff0c\u5982\uff1a",(0,r.kt)("strong",{parentName:"p"},"\u7c7b\u3001\u65b9\u6cd5\u3001\u5c5e\u6027\u3001\u53c2\u6570\u3001\u8fd4\u56de\u503c\u3001\u9a8c\u8bc1\u7279\u6027"),"\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5-7,10-13,19-23}",showLineNumbers:!0,"":!0,"{5-7,10-13,19-23}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n /// \n /// \u7c7b\u6ce8\u91ca\n /// \n public class FurionAppService : IDynamicApiController\n {\n /// \n /// \u65b9\u6cd5\u6ce8\u91ca\n /// \n /// \n public string Get()\n {\n return nameof(Furion);\n }\n\n /// \n /// \u5e26 ID \u53c2\u6570\u7684\u65b9\u6cd5\u6ce8\u91ca\n /// \n /// \n /// \n public int Get(int id)\n {\n return id;\n }\n }\n}\n')),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/swagger2.png")}),(0,r.kt)("admonition",{title:"\u5c0f\u63d0\u793a",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c\u6587\u6863\u6ce8\u91ca\u6ca1\u6709\u663e\u793a\uff0c\u8bf7\u68c0\u67e5\u9879\u76ee ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5c5e\u6027->\u751f\u6210->\u8f93\u51fa")," \u4e2d XML \u6587\u6863\u662f\u5426\u914d\u7f6e\u8f93\u51fa\u8def\u5f84\u3002",(0,r.kt)("strong",{parentName:"p"},"\u6ce8\u610f\uff1a\u53ea\u6709\u4e0d\u5e26\u8def\u5f84\u7684 \u3010\u9879\u76ee\u540d\u79f0.xml\u3011 \u624d\u4f1a\u81ea\u52a8\u52a0\u8f7d\u3002"))),(0,r.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"info"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"Debug")," \u6a21\u5f0f\u4e0b\u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"Release")," \u6a21\u5f0f\u4e0b\u7684\u6ce8\u91ca\u6587\u4ef6\u662f\u4e0d\u901a\u7528\u7684\uff0c\u6240\u4ee5\u5bfc\u81f4\u5f88\u591a\u5f00\u53d1\u8005\u53d1\u5e03\u5230\u670d\u52a1\u5668\u4e0a\u53d1\u73b0\u6ca1\u6709\u663e\u793a\u6ce8\u91ca\u3002\u6211\u4eec\u53ea\u9700\u8981\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Visual Studio")," \u4e2d\u5207\u6362 ",(0,r.kt)("inlineCode",{parentName:"p"},"Debug")," \u6a21\u5f0f\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"Release"),"\uff0c\u7136\u540e\u91cd\u65b0\u914d\u7f6e\u4e00\u6b21\u5373\u53ef\u3002"),(0,r.kt)("p",{parentName:"admonition"},"\u8fd9\u6837\u4e0d\u7ba1\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"Debug")," \u8fd8\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"Release")," \u6a21\u5f0f\u90fd\u4f1a\u663e\u793a\u6ce8\u91ca\u4e86\u3002")),(0,r.kt)("h3",{id:"655-\u591a\u5206\u7ec4\u652f\u6301"},"6.5.5 \u591a\u5206\u7ec4\u652f\u6301"),(0,r.kt)("p",null,"\u591a\u5206\u7ec4\u662f\u4e00\u4e2a\u7cfb\u7edf\u4e2d\u5fc5\u5907\u529f\u80fd\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7cfb\u7edf\u5212\u5206\u4e3a\u591a\u4e2a\u6a21\u5757\uff0c\u6bcf\u4e2a\u6a21\u5757\u90fd\u72ec\u7acb\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"api")," \u914d\u7f6e\u3002\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u5b9e\u73b0\u591a\u5206\u7ec4\u975e\u5e38\u7b80\u5355\u3002\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,21,32}",showLineNumbers:!0,"":!0,"{5,21,32}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings("Group1")]\n public class FurionAppService : IDynamicApiController\n {\n /// \n /// \u968f\u7236\u7c7b Group1 \u5206\u7ec4\n /// \n /// \n public string Post()\n {\n return nameof(Furion);\n }\n\n /// \n /// \u5728 Group1\u3001Group3 \u90fd\u6709\u6211\n /// \n /// \n [ApiDescriptionSettings("Group1", "Group3")]\n public string Get()\n {\n return nameof(Furion);\n }\n\n /// \n /// \u6211\u53ea\u5728 Group2 \u51fa\u73b0\n /// \n /// \n /// \n [ApiDescriptionSettings("Group2")]\n public int Get(int id)\n {\n return id;\n }\n }\n}\n')),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/swagger3.gif")}),(0,r.kt)("h3",{id:"656-\u591a\u5206\u7ec4\u6392\u5e8f"},"6.5.6 \u591a\u5206\u7ec4\u6392\u5e8f"),(0,r.kt)(o.Z,{defaultValue:"fz1",values:[{label:"\u65b9\u5f0f\u4e00",value:"fz1"},{label:"\u65b9\u5f0f\u4e8c",value:"fz2"}],mdxType:"Tabs"},(0,r.kt)(p.Z,{value:"fz1",mdxType:"TabItem"},(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u901a\u8fc7\u5206\u7ec4\u540d\u79f0\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"strong"},"@\u6574\u6570")," \u8fdb\u884c\u6392\u5e8f")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,19}",showLineNumbers:!0,"":!0,"{5,19}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings("Group1@1")]\n public class FurionAppService : IDynamicApiController\n {\n public string Post()\n {\n return nameof(Furion);\n }\n\n [ApiDescriptionSettings("Group1", "Group3")]\n public string Get()\n {\n return nameof(Furion);\n }\n\n [ApiDescriptionSettings("Group@2")]\n public int Get(int id)\n {\n return id;\n }\n }\n}\n')),(0,r.kt)("p",null,"\u53ef\u4ee5\u901a\u8fc7\u5728\u5206\u7ec4\u540d\u540e\u9762\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"@\u6574\u6570")," \u8fdb\u884c\u6392\u5e8f\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"\u6574\u6570")," \u8d8a\u5927\u6392\u524d\u9762\u3002\u5982\u679c\u5206\u7ec4\u540d\u79f0\u591a\u6b21\u6307\u5b9a\u4e14\u591a\u6b21\u6307\u5b9a\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"@\u6574\u6570")," \uff0c\u5219\u81ea\u52a8",(0,r.kt)("strong",{parentName:"p"},"\u53d6\u8be5\u5206\u7ec4\u6700\u5927\u7684\u6574\u6570"),"\u8fdb\u884c\u6392\u5e8f\u3002")),(0,r.kt)(p.Z,{value:"fz2",mdxType:"TabItem"},(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u901a\u8fc7\u914d\u7f6e\u6587\u4ef6\u914d\u7f6e\u6392\u5e8f")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers {2-17} title="Furion.Web.Entry/appsettings.json"',showLineNumbers:!0,"":!0,"{2-17}":!0,title:'"Furion.Web.Entry/appsettings.json"'},'{\n "SpecificationDocumentSettings": {\n "GroupOpenApiInfos": [\n {\n "Group": "Group1",\n "Order": 1\n },\n {\n "Group": "Group2",\n "Order": 2\n },\n {\n "Group": "Group3",\n "Order": 0\n }\n ]\n }\n}\n')))),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/swagger4.png")}),(0,r.kt)("admonition",{title:"\u6392\u5e8f\u8bf4\u660e",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u5206\u7ec4\u9ed8\u8ba4\u6392\u5e8f ",(0,r.kt)("inlineCode",{parentName:"p"},"Order")," \u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"0"),"\u3002\u5982\u679c\u540c\u65f6\u914d\u7f6e\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"@\u6574\u6570")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u914d\u7f6e\u6587\u4ef6\uff0c\u90a3\u4e48\u4f18\u5148\u91c7\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"appsettings.json")," \u4e2d\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Order"))),(0,r.kt)("h3",{id:"657-\u591a\u5206\u7ec4\u4fe1\u606f\u914d\u7f6e"},"6.5.7 \u591a\u5206\u7ec4\u4fe1\u606f\u914d\u7f6e"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u53ef\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"appsetting.json")," \u914d\u7f6e\u5206\u7ec4\u4fe1\u606f\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers {3-20} title="Furion.Web.Entry/appsettings.json"',showLineNumbers:!0,"":!0,"{3-20}":!0,title:'"Furion.Web.Entry/appsettings.json"'},'{\n "SpecificationDocumentSettings": {\n "GroupOpenApiInfos": [\n {\n "Group": "Group1",\n "Title": "\u5206\u7ec4\u6807\u9898",\n "Description": "\u8fd9\u91cc\u662f\u5206\u7ec4\u63cf\u8ff0",\n "Version": "\u7248\u672c\u53f7",\n "TermsOfService": "https://furion.icu",\n "Contact": {\n "Name": "\u767e\u5c0f\u50e7",\n "Url": "https://gitee.com/monksoul",\n "Email": "monksoul@outlook.com"\n },\n "License": {\n "Name": "MIT",\n "Url": "https://gitee.com/dotnetchina/Furion/blob/alpha/LICENSE"\n }\n }\n ]\n }\n}\n')),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/swagger5.png")}),(0,r.kt)("h3",{id:"658-\u7ec4\u4e2d\u7ec4\u6807\u7b7e"},"6.5.8 \u7ec4\u4e2d\u7ec4\uff08\u6807\u7b7e\uff09"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Tag")," \u914d\u7f6e\u4e3b\u8981\u7528\u4e8e\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u6807\u7b7e\u5206\u7ec4\u4fe1\u606f\u53ca\u5408\u5e76\u6807\u7b7e\u3002\u4e5f\u5c31\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"\u7ec4\u4e2d\u7ec4"),":"),(0,r.kt)(o.Z,{defaultValue:"tag1",values:[{label:"\u6807\u7b7e\u547d\u540d",value:"tag1"},{label:"\u5408\u5e76\u6807\u7b7e",value:"tag2"}],mdxType:"Tabs"},(0,r.kt)(p.Z,{value:"tag1",mdxType:"TabItem"},(0,r.kt)("h4",{id:"\u672a\u8d34\u6807\u7b7e\u4e4b\u524d"},"\u672a\u8d34\u6807\u7b7e\u4e4b\u524d"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n\n public class TestAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n}\n")),(0,r.kt)("h4",{id:"\u8d34\u6807\u7b7e\u4e4b\u540e"},"\u8d34\u6807\u7b7e\u4e4b\u540e"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,19}",showLineNumbers:!0,"":!0,"{5,19}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings(Tag = "\u5206\u7ec4\u4e00")]\n public class FurionAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n\n [ApiDescriptionSettings(Tag = "\u5206\u7ec4\u4e8c")]\n public class TestAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n}\n')),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/tag1.png")})),(0,r.kt)(p.Z,{value:"tag2",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,19}",showLineNumbers:!0,"":!0,"{5,19}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n [ApiDescriptionSettings(Tag = "\u5408\u5e76\u6240\u6709\u6807\u7b7e")]\n public class FurionAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n\n [ApiDescriptionSettings(Tag = "\u5408\u5e76\u6240\u6709\u6807\u7b7e")]\n public class TestAppService : IDynamicApiController\n {\n public string Get()\n {\n return nameof(Furion);\n }\n\n public int Get(int id)\n {\n return id;\n }\n }\n}\n')),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/tag2.png")}))),(0,r.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c ",(0,r.kt)("inlineCode",{parentName:"p"},"Tag")," \u540d\u5b57\u4e00\u6837\uff0c\u5219\u4f1a\u81ea\u52a8\u5408\u5e76\uff0c\u5426\u5219\u53ea\u662f\u547d\u540d\u3002")),(0,r.kt)("h3",{id:"659-\u9ed8\u8ba4\u5c55\u5f00\u6240\u6709\u6587\u6863"},"6.5.9 \u9ed8\u8ba4\u5c55\u5f00\u6240\u6709\u6587\u6863"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers {2-4} title="Furion.Web.Entry/appsettings.json"',showLineNumbers:!0,"":!0,"{2-4}":!0,title:'"Furion.Web.Entry/appsettings.json"'},'{\n "SpecificationDocumentSettings": {\n "DocExpansionState": "Full"\n }\n}\n')),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/swagger6.gif")}),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"DocExpansionState")," \u914d\u7f6e\u8bf4\u660e\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"List"),"\uff1a\u5217\u8868\u5f0f\uff08\u5c55\u5f00\u5b50\u7c7b\uff09\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u9ed8\u8ba4\u503c")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Full"),"\uff1a\u5b8c\u5168\u5c55\u5f00"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"None"),"\uff1a\u5217\u8868\u5f0f\uff08\u4e0d\u5c55\u5f00\u5b50\u7c7b\uff09")),(0,r.kt)("h3",{id:"6510-\u914d\u7f6e\u6587\u6863\u6807\u9898"},"6.5.10 \u914d\u7f6e\u6587\u6863\u6807\u9898"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers {2-4} title="Furion.Web.Entry/appsettings.json"',showLineNumbers:!0,"":!0,"{2-4}":!0,title:'"Furion.Web.Entry/appsettings.json"'},'{\n "SpecificationDocumentSettings": {\n "DocumentTitle": "\u6211\u662f\u81ea\u5b9a\u4e49\u6807\u9898"\n }\n}\n')),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/swagger7.png")}),(0,r.kt)("h3",{id:"6511-\u6388\u6743\u63a7\u5236"},"6.5.11 \u6388\u6743\u63a7\u5236"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u65b0\u7248\u672c ",(0,r.kt)("inlineCode",{parentName:"strong"},"Furion")," \u5df2\u7ecf\u9ed8\u8ba4\u542f\u7528\u4e86 Bearer Token \u6388\u6743\u914d\u7f6e\uff0c\u65e0\u9700\u624b\u52a8\u914d\u7f6e"),"\uff0c\u5982\u9700\u624b\u52a8\u914d\u7f6e\uff0c\u53ef\u624b\u52a8\u6dfb\u52a0\u4ee5\u4e0b\u7c7b\u4f3c\u914d\u7f6e\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers title="Furion.Web.Entry/appsettings.json"',showLineNumbers:!0,"":!0,title:'"Furion.Web.Entry/appsettings.json"'},'{\n "SpecificationDocumentSettings": {\n "EnableAuthorized": true,\n\n "SecurityDefinitions": [\n {\n "Id": "Bearer",\n "Type": "Http",\n "Name": "Authorization",\n "Description": "JWT Authorization header using the Bearer scheme.",\n "BearerFormat": "JWT",\n "Scheme": "bearer",\n "In": "Header",\n\n "Requirement": {\n "Scheme": {\n "Reference": {\n "Id": "Bearer",\n "Type": "SecurityScheme"\n },\n "Accesses": []\n }\n }\n }\n ]\n }\n}\n')),(0,r.kt)("h3",{id:"6512-\u5728\u7ebf\u6d4b\u8bd5"},"6.5.12 \u5728\u7ebf\u6d4b\u8bd5"),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/swagger8.gif")}),(0,r.kt)("h3",{id:"6513-\u6027\u80fd\u76d1\u89c6-miniprofiler"},"6.5.13 \u6027\u80fd\u76d1\u89c6 ",(0,r.kt)("inlineCode",{parentName:"h3"},"MiniProfiler")),(0,r.kt)("p",null,"\u89c4\u8303\u5316\u6587\u6863\u9ed8\u8ba4\u96c6\u6210\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"MiniProfiler")," \u7b2c\u4e09\u65b9\u6027\u80fd\u7ec4\u4ef6\uff0c\u901a\u8fc7\u8be5\u7ec4\u4ef6\u53ef\u4ee5\u65b9\u4fbf\u67e5\u770b\u8bf7\u6c42\u6027\u80fd\u3001\u5f02\u5e38\u5806\u6808\u3001\u6570\u636e\u5e93\u64cd\u4f5c\u7b49\u4fe1\u606f\u3002\u9ed8\u8ba4\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u9996\u9875\u5de6\u4e0a\u89d2\u663e\u793a\u3002"),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/mipr.png")}),(0,r.kt)("admonition",{title:"\u5c0f\u63d0\u793a",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u4e5f\u53ef\u4ee5\u901a\u8fc7 ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"appsetting.json"))," \u4e2d ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"AppSettings:InjectMiniProfiler"))," \u8bbe\u4e3a ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"false"))," \u5173\u95ed\u3002")),(0,r.kt)("h3",{id:"6514-\u5b9a\u4e49\u63a5\u53e3\u8f93\u51fa\u7c7b\u578b"},"6.5.14 \u5b9a\u4e49\u63a5\u53e3\u8f93\u51fa\u7c7b\u578b"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,8-9}",showLineNumbers:!0,"":!0,"{2,8-9}":!0},"using Furion.DynamicApiController;\nusing Microsoft.AspNetCore.Mvc;\n\nnamespace Furion.Application\n{\n public class FurionAppService : IDynamicApiController\n {\n [ProducesResponseType(201, Type = typeof(TestDto))]\n [ProducesResponseType(400)]\n public string Get()\n {\n return nameof(Furion);\n }\n }\n}\n")),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/fhzlx.png")}),(0,r.kt)("h3",{id:"6515-\u9690\u85cf\u7279\u5b9a\u5206\u7ec4"},"6.5.15 \u9690\u85cf\u7279\u5b9a\u5206\u7ec4"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u65b0\u7248\u672c\u63d0\u4f9b\u4e86\u9690\u85cf\u5206\u7ec4\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Visible")," \u914d\u7f6e\uff0c\u8bbe\u7f6e\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"false")," \u4e4b\u540e\u8be5\u5206\u7ec4\u5c06\u4e0d\u663e\u793a\u5728\u89c4\u8303\u5316\u6587\u6863\u4e2d\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers title="appsetting.json"',showLineNumbers:!0,"":!0,title:'"appsetting.json"'},'{\n "SpecificationDocumentSettings": {\n "GroupOpenApiInfos": [\n {\n "Group": "Group1",\n "Visible": false\n }\n ]\n }\n}\n')),(0,r.kt)("h3",{id:"6516-\u4e2d\u6587\u4e71\u7801\u95ee\u9898"},"6.5.16 \u4e2d\u6587\u4e71\u7801\u95ee\u9898"),(0,r.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b,",(0,r.kt)("inlineCode",{parentName:"p"},".json")," \u6587\u4ef6\u5e76\u672a\u91c7\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"utf-8")," \u7f16\u7801\uff0c\u6240\u4ee5\u5982\u679c\u914d\u7f6e\u4e2d\u6587\u5206\u7ec4\u4fe1\u606f\u5c31\u4f1a\u51fa\u73b0\u4e71\u7801\u60c5\u51b5\uff0c\u8fd9\u65f6\u5019\uff0c\u53ea\u9700\u8981\u4fee\u6539 ",(0,r.kt)("inlineCode",{parentName:"p"},".json")," \u6587\u4ef6\u7f16\u7801\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"utf-8")," \u5373\u53ef\u3002"),(0,r.kt)("h3",{id:"6517-\u751f\u4ea7\u73af\u5883\u4e2d\u5173\u95ed-swagger"},"6.5.17 \u751f\u4ea7\u73af\u5883\u4e2d\u5173\u95ed ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")),(0,r.kt)("p",null,"\u5982\u679c\u4e0d\u9700\u8981\u7ebf\u4e0a\u73af\u5883\u5f00\u542f ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u529f\u80fd\uff0c\u53ea\u9700\u8981\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"appsetting.json")," \u914d\u7f6e\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},'{\n "AppSettings": {\n "InjectSpecificationDocument": false\n }\n}\n')),(0,r.kt)("h3",{id:"6518-\u8bbe\u7f6e-example-value-\u9ed8\u8ba4\u503c"},"6.5.18 \u8bbe\u7f6e ",(0,r.kt)("inlineCode",{parentName:"h3"},"Example Value")," \u9ed8\u8ba4\u503c"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u4f1a\u81ea\u52a8\u6839\u636e\u5bf9\u8c61\u7c7b\u578b\u8f93\u5165\u53c2\u6570\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"Example Value")," \u9ed8\u8ba4\u503c\uff0c\u4f46\u662f\u8be5\u9ed8\u8ba4\u503c\u901a\u5e38\u662f\u5bf9\u8c61\u5c5e\u6027\u7684\u7c7b\u578b\u5b57\u7b26\u4e32\u6216\u7f3a\u7701\u503c\uff0c\u5982\u679c\u6211\u4eec\u9700\u8981\u81ea\u5b9a\u4e49\u8fd9\u4e9b\u9ed8\u8ba4\u503c\uff0c\u53ea\u9700\u8981\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"/// \u9ed8\u8ba4\u503c")," \u6ce8\u91ca\u5373\u53ef\u3002"),(0,r.kt)("p",null,"\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},"/// \n/// \u5e74\u9f84\n/// \n/// 13\n[Required, Range(10, 110)]\npublic int Age { get; set; }\n")),(0,r.kt)("p",null,"\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/sd20.png")}),(0,r.kt)("p",null,"\u66f4\u591a\u7c7b\u578b\u9ed8\u8ba4\u503c\u8bbe\u7f6e\u793a\u4f8b\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"/// true")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"/// foobar")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"number")," \u7c7b\u578b\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"/// 123")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"null")," \u7c7b\u578b\uff1a ",(0,r.kt)("inlineCode",{parentName:"li"},"/// null")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"array")," \u7c7b\u578b\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"/// [ 1, 2, 3 ]"))),(0,r.kt)("admonition",{type:"important"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u5173\u4e8e ",(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"object")," \u7c7b\u578b\u8f93\u5165\u53c2\u6570"),(0,r.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Example Value")," \u4e0d\u4f1a\u663e\u793a ",(0,r.kt)("inlineCode",{parentName:"p"},"object")," \u7c7b\u578b\u7684\u5bf9\u8c61\u5c5e\u6027\uff0c\u56e0\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u8ba4\u4e3a\u8fd9\u662f\u4e0d\u5408\u7406\u7684\u5b9a\u4e49\u3002\u5982\u679c\u9700\u8981\u5f3a\u5236\u663e\u793a\uff0c\u53ea\u9700\u8981\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},'/// "object"')," \u6ce8\u91ca\u5373\u53ef\u3002")),(0,r.kt)("h3",{id:"6519-\u81ea\u5b9a\u4e49-swagger-\u914d\u7f6e"},"6.5.19 \u81ea\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u914d\u7f6e"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u9664\u4e86\u5185\u7f6e\u4e86\u4e0d\u5c11\u914d\u7f6e\u4ee5\u5916\uff0c\u8fd8\u63d0\u4f9b\u4e86\u76f4\u63a5\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," Api \u7684\u53c2\u6570\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5}",showLineNumbers:!0,"{5}":!0},"public void ConfigureServices(IServiceCollection services)\n{\n services.AddInject(options =>\n {\n options.ConfigureSwaggerGen(gen =>\n {\n // ....\n });\n });\n}\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,11}",showLineNumbers:!0,"{6,11}":!0}," public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n // \u5982\u679c\u4f7f\u7528 Furion 4.4.8+ \u7248\u672c\u53ef\u4ee5 app.UseInject(options => {}) \u4e86\uff0c\u65e0\u9700\u6307\u5b9a configure:\n app.UseInject(configure: options =>\n {\n options.ConfigureSwagger(swg =>\n {\n // ....\n });\n\n options.ConfigureSwaggerUI(ui =>\n {\n // ....\n });\n });\n}\n\n")),(0,r.kt)("h3",{id:"6520-\u914d\u7f6e-swagger\u7684-schemes"},"6.5.20 \u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger"),"\u7684 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Schemes")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u9ed8\u8ba4\u53ea\u663e\u793a\u540d\u79f0\uff0c\u5982\u679c\u9700\u8981\u81ea\u5b9a\u4e49\u663e\u793a\u89c4\u5219\uff0c\u53ea\u9700\u8981\u6dfb\u52a0\u914d\u7f6e\u5373\u53ef\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,6}",showLineNumbers:!0,"{4,6}":!0},"services.AddControllersWithViews()\n .AddInject(options =>\n {\n options.ConfigureSwaggerGen(gen =>\n {\n gen.CustomSchemaIds(x => x.FullName);\n });\n });\n")),(0,r.kt)("h3",{id:"6521-\u81ea\u5b9a\u4e49-swaggerjson-\u8def\u7531\u6a21\u677f"},"6.5.21 \u81ea\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"h3"},"swagger.json")," \u8def\u7531\u6a21\u677f"),(0,r.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4f1a\u751f\u6210\u7edf\u4e00\u7684\u5206\u7ec4\u6a21\u677f\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"swagger/{documentName}/swagger.json"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"{documentName}")," \u4f1a\u5728\u8fd0\u884c\u65f6\u66ff\u6362\u4e3a\u5206\u7ec4\u540d\uff0c\u5982\u9700\u81ea\u5b9a\u4e49\uff0c\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"RouteTemplate")," \u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:'showLineNumbers title="appsetting.json"',showLineNumbers:!0,"":!0,title:'"appsetting.json"'},'{\n "SpecificationDocumentSettings": {\n "RouteTemplate": "myapp/{documentName}/xxxx.json"\n }\n}\n')),(0,r.kt)("h3",{id:"6522-\u5173\u4e8e-applicationx-www-form-urlencoded-\u8bf7\u6c42"},"6.5.22 \u5173\u4e8e ",(0,r.kt)("inlineCode",{parentName:"h3"},"application/x-www-form-urlencoded")," \u8bf7\u6c42"),(0,r.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u5e76\u672a\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"application/x-www-form-urlencoded")," \u652f\u6301\uff0c\u5982\u9700\u542f\u7528\u8be5\u914d\u7f6e\uff0c\u53ea\u9700\u5728\u65b9\u6cd5\u9876\u90e8\u8d34 ",(0,r.kt)("inlineCode",{parentName:"p"},"[Consumes]")," \u7279\u6027\u5373\u53ef\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,2}",showLineNumbers:!0,"":!0,"{1,2}":!0},'[Consumes("application/x-www-form-urlencoded")]\npublic async Task Test([FromForm] TestRequest testRequest)\n{\n // ....\n}\n\npublic class TestRequest\n{\n public string TestValue { get; set; }\n}\n')),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u53c2\u6570\u5fc5\u987b\u8d34 ",(0,r.kt)("inlineCode",{parentName:"p"},"[FromForm]")," \u7279\u6027\u3002\u53e6\u5916\u8bf7\u6c42\u65f6\u5c06\u53c2\u6570\u6309 ",(0,r.kt)("inlineCode",{parentName:"p"},"URL")," \u5730\u5740\u62fc\u63a5\u5e76\u653e\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Body")," \u4e2d\u8bf7\u6c42\u3002")),(0,r.kt)("h3",{id:"6523-swagger-\u51fa\u73b0-cors-\u95ee\u9898\u89e3\u51b3"},"6.5.23 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u51fa\u73b0 ",(0,r.kt)("inlineCode",{parentName:"h3"},"CORS")," \u95ee\u9898\u89e3\u51b3"),(0,r.kt)("p",null,"\u5982\u679c ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u51fa\u73b0\u4ee5\u4e0b\u9519\u8bef\uff0c\u5982\u56fe\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/swerror.png")}),(0,r.kt)("p",null,"\u5219\u9700\u8981\u6dfb\u52a0\u4ee5\u4e0b\u914d\u7f6e\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2,3}",showLineNumbers:!0,"":!0,"{2,3}":!0},'{\n "SpecificationDocumentSettings": {\n "HideServers": true\n }\n}\n')),(0,r.kt)("h3",{id:"6524-swagger-\u51fa\u73b0\u9ed8\u8ba4-xml-\u53c2\u6570\u95ee\u9898\u89e3\u51b3"},"6.5.24 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u51fa\u73b0\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"h3"},"xml")," \u53c2\u6570\u95ee\u9898\u89e3\u51b3"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u4ea7\u751f\u6b64\u539f\u56e0\u6709\u4e24\u4e2a\u5fc5\u8981\u6761\u4ef6\uff1a")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\u4f7f\u7528\u4e86 ",(0,r.kt)("inlineCode",{parentName:"li"},"Microsoft.AspNetCore.Mvc.NewtonsoftJson")," \u5305\u5e76\u6dfb\u52a0\u4e86 ",(0,r.kt)("inlineCode",{parentName:"li"},"AddNewtonsoftJson()")," \u6ce8\u518c\u3002"),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},".AddNewtonsoftJson()")," \u5199\u5728\u4e86 ",(0,r.kt)("inlineCode",{parentName:"li"},".AddInjectWithUnifyResult()")," \u540e\u9762\u3002")),(0,r.kt)("p",null,"\u6240\u4ee5\u89e3\u51b3\u65b9\u6cd5\u662f\uff0c\u5148\u6ce8\u518c ",(0,r.kt)("inlineCode",{parentName:"p"},".AddNewtonsoftJson()")," \u518d\u6ce8\u518c\u89c4\u8303\u5316\u7ed3\u679c\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"":!0,"{2}":!0},"services.AddControllers()\n .AddNewtonsoftJson()\n .AddInjectWithUnifyResult();\n")),(0,r.kt)("h3",{id:"6525-swagger-\u591a\u8bed\u8a00\u652f\u6301"},"6.5.25 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u591a\u8bed\u8a00\u652f\u6301"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 2.9.0 + ")," \u7248\u672c\u5df2\u7ecf\u652f\u6301\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u6587\u6863\u5730\u5740 ",(0,r.kt)("inlineCode",{parentName:"p"},"?culture=en-US")," \u53c2\u6570\u591a\u8bed\u8a00\u8f6c\u53d1\u529f\u80fd\u4e86\uff0c\u4e5f\u5c31\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u5730\u5740\u5e26 ",(0,r.kt)("inlineCode",{parentName:"p"},"?culture=")," \u53c2\u6570\u5c06\u81ea\u52a8\u6dfb\u52a0\u5230\u6bcf\u4e00\u4e2a\u8bf7\u6c42\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"api")," \u5730\u5740\u4e2d\u3002"),(0,r.kt)("h3",{id:"6526-\u81ea\u5b9a\u4e49\u903b\u8f91\u63a7\u5236-swagger-\u6bcf\u4e00\u4e2a-api-\u53ef\u89c1\u6027"},"6.5.26 \u81ea\u5b9a\u4e49\u903b\u8f91\u63a7\u5236 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u6bcf\u4e00\u4e2a ",(0,r.kt)("inlineCode",{parentName:"h3"},"api")," \u53ef\u89c1\u6027"),(0,r.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u9700\u8981\u81ea\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u63a5\u53e3\u53ef\u89c1\u6027\uff0c\u6bd4\u5982\u6839\u636e\u6743\u9650\uff0c\u4e0d\u540c\u7528\u6237\u7c7b\u578b\uff0c\u5404\u79cd\u903b\u8f91\u63a7\u5236\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,6}",showLineNumbers:!0,"{4,6}":!0},"// \u4e5f\u53ef\u4ee5\u7528 .AddInjectWithUnifyResult\nservices.AddInject(options =>\n{\n options.ConfigureSwaggerGen(gen =>\n {\n gen.DocInclusionPredicate((currentGroup, apiDescription) =>\n {\n // Furion \u5185\u90e8\u68c0\u67e5\uff0c\u5fc5\u987b\u653e\u7b2c\u4e00\u884c\n var isShow = SpecificationDocumentBuilder.CheckApiDescriptionInCurrentGroup(currentGroup, apiDescription);\n\n // \u83b7\u53d6\u5f53\u524d\u65b9\u6cd5\n _ = apiDescription.TryGetMethodInfo(out var method);\n\n // \u6709\u4e86\u65b9\u6cd5\uff0c\u8fd9\u91cc\u505a\u4f60\u60f3\u505a\u7684\u4e8b\u60c5\uff0cisShow \u8bbe\u7f6e true \u53ef\u89c1\uff0c\u8bbe\u7f6e false \u4e0d\u53ef\u89c1\n\n return isShow;\n });\n });\n});\n")),(0,r.kt)("h3",{id:"6527-\u914d\u7f6e-mvc-\u63a7\u5236\u5668\u652f\u6301\u89c4\u8303\u5316\u5904\u7406"},"6.5.27 \u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"h3"},"MVC")," \u63a7\u5236\u5668\u652f\u6301\u89c4\u8303\u5316\u5904\u7406"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "UnifyResultSettings": {\n "SupportMvcController": true\n }\n}\n')),(0,r.kt)("h3",{id:"6528-swagger-\u5237\u65b0\u8bb0\u4f4f\u6388\u6743\u72b6\u6001"},"6.5.28 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u5237\u65b0\u8bb0\u4f4f\u6388\u6743\u72b6\u6001"),(0,r.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u5237\u65b0\u6d4f\u89c8\u5668\u540e\uff0c\u6388\u6743\u72b6\u6001\u5c06\u88ab\u91cd\u7f6e\uff0c\u4e5f\u5c31\u662f\u9700\u8981\u91cd\u65b0\u767b\u5f55\uff0c\u901a\u8fc7\u4e0b\u9762\u4ee3\u7801\u5728 ",(0,r.kt)("strong",{parentName:"p"},"\u7528\u6237\u767b\u5f55\u6210\u529f\u540e")," \u8c03\u7528\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ....\u9a8c\u8bc1\u7528\u6237\u540d/\u5bc6\u7801....\n\n_httpContextAccessor.HttpContext.SigninToSwagger("\u4f20\u5165 token");\n')),(0,r.kt)("h3",{id:"6529-\u5e26\u767b\u5f55\u7684-swagger-\u6587\u6863"},"6.5.29 \u5e26\u767b\u5f55\u7684 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u6587\u6863"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion v3.3.3+")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u662f\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u8bbf\u95ee\u7684\uff0c\u8fd9\u6837\u4e5f\u66b4\u9732\u51fa\u4e00\u4e9b\u5b89\u5168\u95ee\u9898\uff0c\u6240\u4ee5\u5728\u8be5\u7248\u672c\u4e4b\u540e\u6dfb\u52a0\u4e86\u767b\u5f55\u529f\u80fd\uff0c\u53ea\u9700\u8981\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"p"},"SpecificationDocumentSettings")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"LoginInfo")," \u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2-6}",showLineNumbers:!0,"{2-6}":!0},'{\n "SpecificationDocumentSettings": {\n "LoginInfo": {\n "Enabled": true,\n "CheckUrl": "/Home/CheckUrl",\n "SubmitUrl": "/Home/SubmitUrl",\n "UserName": "admin",\n "Password": "admin"\n }\n }\n}\n')),(0,r.kt)("h4",{id:"\u914d\u7f6e\u8bf4\u660e"},"\u914d\u7f6e\u8bf4\u660e"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"LoginInfo"),"\uff1a\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"li"},"Swagger")," \u662f\u5426\u9700\u8981\u767b\u5f55\u624d\u80fd\u8bbf\u95ee\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"SpecificationLoginInfo")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"null"),"\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u4ec5\u5728 Furion v3.3.3+` \u6709\u6548"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Enabled"),"\uff1a\u662f\u5426\u542f\u7528\u767b\u5f55\u6388\u6743\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"false")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CheckUrl"),"\uff1a\u68c0\u67e5\u767b\u5f55\u72b6\u6001\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"Url")," \u5730\u5740\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u8be5\u5730\u5740\u5fc5\u987b\u662f ",(0,r.kt)("inlineCode",{parentName:"strong"},"POST")," \u8bf7\u6c42"),"\uff0c\u5df2\u6388\u6743\u8fd4\u56de ",(0,r.kt)("inlineCode",{parentName:"li"},"200"),"\uff0c\u5426\u5219\u8fd4\u56de ",(0,r.kt)("inlineCode",{parentName:"li"},"401"),"\uff0c\u652f\u6301\u76f8\u5bf9\u5730\u5740\uff0c\u4ee5 ",(0,r.kt)("inlineCode",{parentName:"li"},"/")," \u5f00\u5934"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"SubmitUrl"),"\uff1a\u63d0\u4ea4\u767b\u5f55\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"Url")," \u5730\u5740\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u8be5\u5730\u5740\u5fc5\u987b\u662f ",(0,r.kt)("inlineCode",{parentName:"strong"},"POST")," \u8bf7\u6c42\u4e14\u53ea\u6709\u4e00\u4e2a ",(0,r.kt)("inlineCode",{parentName:"strong"},"SpecificationAuth")," \u7c7b\u578b\u53c2\u6570"),"\uff0c\u6210\u529f\u767b\u5f55\u8fd4\u56de ",(0,r.kt)("inlineCode",{parentName:"li"},"200"),"\uff0c\u5426\u5219\u8fd4\u56de ",(0,r.kt)("inlineCode",{parentName:"li"},"401"),"\uff0c\u652f\u6301\u76f8\u5bf9\u5730\u5740\uff0c\u4ee5 ",(0,r.kt)("inlineCode",{parentName:"li"},"/")," \u5f00\u5934")))),(0,r.kt)("h4",{id:"\u914d\u7f6e\u793a\u4f8b"},"\u914d\u7f6e\u793a\u4f8b"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {10-14,16-31}",showLineNumbers:!0,"{10-14,16-31}":!0},'using Furion.SpecificationDocument;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Mvc;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace Furion.Web.Entry.Controllers;\n\npublic class HomeController : Controller\n{\n [HttpPost, AllowAnonymous, NonUnify]\n public int CheckUrl()\n {\n return 401;\n }\n\n [HttpPost, AllowAnonymous, NonUnify]\n public int SubmitUrl([FromForm] SpecificationAuth auth)\n {\n // \u8bfb\u53d6\u914d\u7f6e\u4fe1\u606f\n var userName = App.Configuration["SpecificationDocumentSettings:LoginInfo:UserName"];\n var password = App.Configuration["SpecificationDocumentSettings:LoginInfo:Password"];\n\n if (auth.UserName == userName && auth.Password == password)\n {\n return 200;\n }\n else\n {\n return 401;\n }\n }\n}\n')),(0,r.kt)("img",{src:(0,l.Z)("img/swgdl.png")}),(0,r.kt)("h2",{id:"6530-inheritdoc-\u5b9e\u73b0\u6ce8\u91ca\u7ee7\u627f"},"6.5.30 ",(0,r.kt)("inlineCode",{parentName:"h2"},"inheritdoc")," \u5b9e\u73b0\u6ce8\u91ca\u7ee7\u627f"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion v3.3.3+")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u5728\u8fc7\u53bb\u6211\u4eec\u5728\u63a5\u53e3\u5b9a\u4e49\u7684\u65f6\u5019\u7f16\u5199\u4e86\u5b8c\u6574\u7684\u6210\u5458\u6ce8\u91ca\uff0c\u7136\u540e\u5728\u6d3e\u751f\u6210\u5458\u4e2d\u53c8\u8981\u91cd\u590d\u5199\u4e00\u6b21\uff0c\u5b9e\u9645\u4e0a\u505a\u4e86\u5f88\u5927\u65e0\u7528\u529f\uff0c\u73b0\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u652f\u6301\u4e86\u6ce8\u91ca\u7ee7\u627f\u4e86\uff0c\u540c\u65f6 ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u4e2d\u4e5f\u80fd\u6b63\u786e\u663e\u793a\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,8,14}",showLineNumbers:!0,"{5,8,14}":!0},'using Furion.DynamicApiController;\n\nnamespace Furion.Application\n{\n /// \n public class TestInheritdoc : ITestInheritdoc, IDynamicApiController\n {\n /// \n public string GetName()\n {\n return "Furion";\n }\n\n /// \n public string GetVersion()\n {\n return "3.3.3";\n }\n }\n\n /// \n /// \u6d4b\u8bd5\u6ce8\u91ca\u7ee7\u627f\n /// \n public interface ITestInheritdoc\n {\n /// \n /// \u83b7\u53d6\u540d\u79f0\n /// \n /// \n string GetName();\n\n /// \n /// \u83b7\u53d6\u7248\u672c\n /// \n /// \n string GetVersion();\n }\n}\n\n')),(0,r.kt)("p",null,"\u663e\u793a\u6548\u679c\uff1a"),(0,r.kt)("img",{src:(0,l.Z)("img/cdr22.png")}),(0,r.kt)("admonition",{title:"\u6ce8\u610f\u4e8b\u9879",type:"important"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"")," \u4e0d\u6307\u5b9a ",(0,r.kt)("inlineCode",{parentName:"p"},"cref")," ",(0,r.kt)("strong",{parentName:"p"},"\u4ec5\u9650\u6210\u5458\u53ef\u7528"),"\u4e14\u6240\u5728\u7684\u7c7b\u578b\u5fc5\u987b\u6307\u5b9a ",(0,r.kt)("inlineCode",{parentName:"p"},''),"\uff0c\u8fd9\u6837\u624d\u80fd\u81ea\u52a8\u8bc6\u522b\u3002")),(0,r.kt)("h3",{id:"6531-\u542f\u7528-all-groups-\u5206\u7ec4\u529f\u80fd"},"6.5.31 \u542f\u7528 ",(0,r.kt)("inlineCode",{parentName:"h3"},"All Groups")," \u5206\u7ec4\u529f\u80fd"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion v3.3.4+")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u4e3a\u4e86\u66f4\u597d\u7684\u5bf9\u63a5\u53e3\u8fdb\u884c\u5f52\u7c7b\uff0c\u914d\u7f6e\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u591a\u4e2a\u5206\u7ec4\u7684\u529f\u80fd\uff0c\u4f46\u8fd9\u6837\u4e5f\u5bf9\u751f\u6210\u5ba2\u6237\u7aef\u8bf7\u6c42\u4ee3\u7801\u9020\u6210\u4e86\u56f0\u6270\uff0c\u6240\u4ee5\u6dfb\u52a0\u4e86\u65b0\u7684\u914d\u7f6e\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {2-3}",showLineNumbers:!0,"{2-3}":!0},'{\n "SpecificationDocumentSettings": {\n "EnableAllGroups": true\n }\n}\n')),(0,r.kt)("h3",{id:"6532-\u63a5\u53e3\u8fc7\u65f6\u63a7\u5236"},"6.5.32 \u63a5\u53e3\u8fc7\u65f6\u63a7\u5236"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion v3.3.5+")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u67d0\u4e2a\u63a5\u53e3\u5df2\u7ecf\u8fc7\u65f6\uff0c\u63d0\u793a\u5c3d\u65e9\u8c03\u7528\u6700\u65b0\u63a5\u53e3\uff0c\u53ea\u9700\u8981\u5728\u65b9\u6cd5\u4e0a\u9762\u8d34 ",(0,r.kt)("inlineCode",{parentName:"p"},"[Obsolete]")," \u5373\u53ef\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,7}",showLineNumbers:!0,"{1,7}":!0},'[Obsolete("GetName() \u5df2\u7ecf\u8fc7\u65f6\uff0c\u8bf7\u8c03\u7528 GetFrameworkName() \u66ff\u4ee3")]\npublic string GetName()\n{\n return nameof(Furion);\n}\n\n[Obsolete]\npublic string Other()\n{\n // ...\n}\n')),(0,r.kt)("img",{src:(0,l.Z)("img/swg2.png")}),(0,r.kt)("h3",{id:"6533-\u5355\u4e00\u63a5\u53e3\u66f4\u591a\u63cf\u8ff0"},"6.5.33 \u5355\u4e00\u63a5\u53e3\u66f4\u591a\u63cf\u8ff0"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion v3.3.5+")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u5728\u8be5\u7248\u672c\u65b0\u589e\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"[ApiDescriptionSettings]")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Description")," \u5c5e\u6027\uff0c\u652f\u6301\u5b9a\u4e49\u66f4\u591a\u63cf\u8ff0\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},'[ApiDescriptionSettings(Description = "\u6211\u662f\u4e00\u6bb5\u63cf\u8ff0\uff0c\u663e\u793a\u66f4\u591a\u5185\u5bb9 ")]\npublic string add()\n{\n //....\n}\n')),(0,r.kt)("img",{src:(0,l.Z)("img/swg1.png")}),(0,r.kt)("h3",{id:"6534-swagger-\u5f02\u5e38\u4e0d\u80fd\u663e\u793a\u9519\u8bef\u5904\u7406"},"6.5.34 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u5f02\u5e38/\u4e0d\u80fd\u663e\u793a/\u9519\u8bef\u5904\u7406"),(0,r.kt)("p",null,"\u6709\u65f6\u5019\u53ef\u80fd\u56e0\u4e3a\u9519\u8bef\u7684\u914d\u7f6e\u5bfc\u81f4 ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u4e0d\u80fd\u663e\u793a\uff0c\u8fd9\u65f6\u5019\u53ea\u9700\u8981\u590d\u5236\u63d0\u793a\u7684\u9519\u8bef ",(0,r.kt)("inlineCode",{parentName:"p"},".json")," \u94fe\u63a5\u5730\u5740\u5230\u6d4f\u89c8\u5668\u4e2d\u8bbf\u95ee\u5373\u53ef\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"https://localhost:\u4f60\u7684\u7aef\u53e3/swagger/Default/swagger.json\n")),(0,r.kt)("p",null,"\u540e\u9762\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"/swagger/Default/swagger.json")," \u5c31\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u9519\u8bef\u63d0\u793a\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},".json")," \u94fe\u63a5\u5730\u5740\u3002"),(0,r.kt)("p",null,"\u8fd9\u6837\u5c31\u53ef\u4ee5\u770b\u5230\u8be6\u7ec6\u7684\u9519\u8bef\u4e86\u3002"),(0,r.kt)("img",{src:(0,l.Z)("img/sperr.png")}),(0,r.kt)("img",{src:(0,l.Z)("img/sperr2.png")}),(0,r.kt)("h3",{id:"6535-\u81ea\u5b9a\u4e49-swagger-\u7684-schemaid"},"6.5.35 \u81ea\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"h3"},"SchemaId")),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion v3.6.4+")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u6709\u65f6\u5019\uff0c\u4e0d\u540c\u7a0b\u5e8f\u96c6\u4f1a\u5b9a\u4e49\u76f8\u540c\u7684\u7c7b\u578b\u540d\u79f0 ",(0,r.kt)("inlineCode",{parentName:"p"},"Name"),"\uff0c\u8fd9\u6837\u5c31\u4f1a\u5bfc\u81f4\u751f\u6210 ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"SchemaId")," \u51fa\u73b0\u51b2\u7a81\uff0c\u8fd9\u65f6\u53ea\u9700\u8981\u5728\u7c7b\u578b\u4e0a\u8d34 ",(0,r.kt)("inlineCode",{parentName:"p"},"[SchemaId]")," \u7279\u6027\u5373\u53ef\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"{3}":!0},'using Furion.SpecificationDocument;\n\n[SchemaId("Other_")]\npublic class PersonDto\n{\n // ...\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"SchemaIdAttribute")," \u914d\u7f6e\u9009\u9879\uff1a",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"SchemaId"),"\uff1a\u81ea\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"li"},"SchemaId"),"\uff0c\u5b57\u7b26\u4e32\u7c7b\u578b\uff0c\u53ea\u80fd\u662f ",(0,r.kt)("inlineCode",{parentName:"li"},"\u5b57\u6bcd,\u6570\u5b57\uff0c\u4e0b\u5212\u7ebf")," \u7ec4\u5408"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Replace"),"\uff1a\u662f\u5426\u5b8c\u5168\u66ff\u6362\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"false"),"\uff0c\u9ed8\u8ba4\u662f\u4f5c\u4e3a\u524d\u7f00\u62fc\u63a5\uff0c\u5982\u4e0a\u9762\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"PersonDto")," \u4f1a\u751f\u6210 ",(0,r.kt)("inlineCode",{parentName:"li"},"Other_PersonDto"),"\uff0c\u5982\u679c\u8bbe\u7f6e\u4e3a ",(0,r.kt)("inlineCode",{parentName:"li"},"true"),"\uff0c\u5219\u76f4\u63a5\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"Test_"))))),(0,r.kt)("h3",{id:"6536-\u81ea\u5b9a\u4e49-swagger-\u7684-operationid"},"6.5.36 \u81ea\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"h3"},"OperationId")),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.1.7+")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u901a\u8fc7\u6211\u4eec\u6839\u636e ",(0,r.kt)("inlineCode",{parentName:"p"},"swagger.json")," \u751f\u6210\u524d\u7aef\u4ee3\u7801\u65f6\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u4f1a\u81ea\u52a8\u6839\u636e\u8def\u7531\u5730\u5740\u751f\u6210\u8c03\u7528\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"api")," \u540d\u79f0\uff0c\u4f46\u8fd9\u6837\u7684\u540d\u79f0\u5f80\u5f80\u4e0d\u6613\u8bfb\uff0c\u8fd9\u65f6\u5019\u53ef\u81ea\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"p"},"[OperationId]")," \u6765\u914d\u7f6e\u751f\u6210\u7684\u524d\u7aef\u540d\u79f0\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5}",showLineNumbers:!0,"{5}":!0},'using Furion.SpecificationDocument;\n\npublic class PersonDto\n{\n [OperationId("MyClientMethodName")]\n public string TestMethod()\n {\n // ...\n }\n}\n')),(0,r.kt)("h3",{id:"6537-swagger-\u63a5\u53e3\u6587\u6863\u652f\u6301\u5b8c\u6574\u7684-markdown"},"6.5.37 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Swagger")," \u63a5\u53e3\u6587\u6863\u652f\u6301\u5b8c\u6574\u7684 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Markdown")),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6700\u65b0\u7248\u4e2d\uff0c\u652f\u6301\u4e86\u5b8c\u6574\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Markdown")," \u6ce8\u518c\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,80}",showLineNumbers:!0,"{4,80}":!0},'/// \n/// \u6d4b\u8bd5 Markdown\n/// \n/// \n/// # \u5148\u77e5 / Furion ([\u63a2\u7d22\u7248](https://gitee.com/dotnetchina/Furion/tree/experimental/))\n///\n/// \u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u6846\u67b6\uff0c\u60a8\u53ef\u4ee5\u5c06\u5b83\u96c6\u6210\u5230\u4efb\u4f55.NET/C# \u5e94\u7528\u7a0b\u5e8f\u4e2d\u3002\n///\n/// An application framework that you can integrate into any.NET/C# application.\n///\n/// ## \u5b89\u88c5 / Installation\n///\n/// - [Package Manager] (https://www.nuget.org/packages/Furion)\n///\n/// ```powershell\n/// Install-Package Furion\n/// ```\n///\n/// - [.NET CLI] (https://www.nuget.org/packages/Furion)\n///\n/// ```powershell\n/// dotnet add package Furion\n/// ```\n///\n/// ## \u4f8b\u5b50 / Examples\n///\n/// \u6211\u4eec\u5728[\u4e3b\u9875](https://furion.baiqian.ltd)\u4e0a\u6709\u4e0d\u5c11\u4f8b\u5b50\uff0c\u8fd9\u662f\u8ba9\u60a8\u5165\u95e8\u7684\u7b2c\u4e00\u4e2a\uff1a\n///\n/// We have several examples [on the website] (https://furion.baiqian.ltd). Here is the first one to get you started:\n///\n/// ```cs\n/// Serve.Run();\n///\n/// [DynamicApiController]\n/// public class HelloService\n/// {\n/// public string Say()\n/// {\n/// return "Hello, Furion";\n/// }\n/// }\n/// ```\n///\n/// \u6253\u5f00\u6d4f\u89c8\u5668\u8bbf\u95ee `https://localhost:5001`\u3002\n///\n/// Open browser access `https://localhost:5001`.\n///\n/// ## \u6587\u6863 / Documentation\n///\n/// \u60a8\u53ef\u4ee5\u5728[\u4e3b\u9875] (https://furion.baiqian.ltd)\u6216[\u5907\u4efd\u4e3b\u9875](https://furion.icu)\u627e\u5230 Furion \u6587\u6863\u3002\n///\n/// You can find the Furion documentation[on the website](https://furion.baiqian.ltd) or [on the backup website](https://furion.icu).\n///\n/// ## \u8d21\u732e / Contributing\n///\n/// \u8be5\u5b58\u50a8\u5e93\u7684\u4e3b\u8981\u76ee\u7684\u662f\u7ee7\u7eed\u53d1\u5c55 Furion \u6838\u5fc3\uff0c\u4f7f\u5176\u66f4\u5feb\u3001\u66f4\u6613\u4e8e\u4f7f\u7528\u3002 Furion \u7684\u5f00\u53d1\u5728[Gitee](https://gitee.com/dotnetchina/Furion) \u4e0a\u516c\u5f00\u8fdb\u884c\uff0c\u6211\u4eec\u611f\u8c22\u793e\u533a\u8d21\u732e\u9519\u8bef\u4fee\u590d\u548c\u6539\u8fdb\u3002\n///\n/// \u9605\u8bfb[\u8d21\u732e\u6307\u5357] (https://furion.baiqian.ltd/docs/contribute)\u5185\u5bb9\uff0c\u4e86\u89e3\u5982\u4f55\u53c2\u4e0e\u6539\u8fdb Furion\u3002\n///\n/// The main purpose of this repository is to continue evolving Furion core, making it faster and easier to use.Development of Furion happens in the open on[Gitee] (https://gitee.com/dotnetchina/Furion), and we are grateful to the community for contributing bugfixes and improvements.\n///\n/// Read[contribution documents] (https://furion.baiqian.ltd/docs/contribute) to learn how you can take part in improving Furion.\n///\n/// ## \u8bb8\u53ef\u8bc1 / License\n///\n/// Furion \u91c7\u7528[MIT](https://gitee.com/dotnetchina/Furion/blob/v4/LICENSE) \u5f00\u6e90\u8bb8\u53ef\u8bc1\u3002\n///\n/// Furion uses the[MIT] (https://gitee.com/dotnetchina/Furion/blob/v4/LICENSE) open source license.\n///\n/// ```\n/// Copyright(c) 2020-2022 \u767e\u5c0f\u50e7, Baiqian Co., Ltd.\n/// Furion is licensed under Mulan PSL v2.\n/// You can use this software according to the terms andconditions of the Mulan PSL v2.\n/// You may obtain a copy of Mulan PSL v2 at:\n/// https://gitee.com/dotnetchina/Furion/blob/v4/LICENSE\n/// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUTWARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.\n/// See the Mulan PSL v2 for more details.\n/// ```\n///\n/// \n/// \npublic string Hello()\n{\n return "Furion";\n}\n')),(0,r.kt)("img",{src:(0,l.Z)("img/mdx.png")}),(0,r.kt)("h3",{id:"6538-\u7b2c\u4e09\u65b9-ui-\u96c6\u6210\u5982-knife4jui"},"6.5.38 \u7b2c\u4e09\u65b9 ",(0,r.kt)("inlineCode",{parentName:"h3"},"UI")," \u96c6\u6210\uff0c\u5982 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Knife4jUI")),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u96c6\u6210\u7b2c\u4e09\u65b9 ",(0,r.kt)("inlineCode",{parentName:"p"},"SwaggerUI")," \u975e\u5e38\u5bb9\u6613\uff0c\u6bd4\u5982\u96c6\u6210 ",(0,r.kt)("inlineCode",{parentName:"p"},"IGeekFan.AspNetCore.Knife4jUI"),"\uff1a"),(0,r.kt)("admonition",{title:"\u5b89\u88c5\u5305",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u53ea\u9700\u8981\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"YourPoject.Web.Core")," \u5c42\u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"p"},"IGeekFan.AspNetCore.Knife4jUI")," \u5373\u53ef\u3002")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"Knife4jUI")," \u72ec\u7acb\u7248\u672c\u914d\u7f6e")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,12}",showLineNumbers:!0,"{1,3,12}":!0},'var routePrefix = "api"; // \u5b9a\u4e49 swagger \u8def\u7531\u5730\u5740\uff0c\u5982\u679c\u662f\u8ddf\u76ee\u5f55\uff0c\u8bbe\u7f6e string.Empty \u5373\u53ef\n\napp.UseKnife4UI(options =>\n{\n options.RoutePrefix = routePrefix; // \u914d\u7f6e Knife4UI \u8def\u7531\u5730\u5740\n foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups())\n {\n options.SwaggerEndpoint("/" + groupInfo.RouteTemplate, groupInfo.Title);\n }\n});\n\napp.UseInject(routePrefix); // \u914d\u7f6e Furion \u8def\u7531\u5730\u5740\n')),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("inlineCode",{parentName:"strong"},"Knife4jUI")," \u548c ",(0,r.kt)("inlineCode",{parentName:"strong"},"Swagger")," \u5171\u5b58\u7248\u672c\u914d\u7f6e")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3,10}",showLineNumbers:!0,"{1,3,10}":!0},'app.UseKnife4UI(options =>\n{\n options.RoutePrefix = "newapi"; // \u914d\u7f6e Knife4UI \u8def\u7531\u5730\u5740\uff0c\u73b0\u5728\u662f /newapi\n foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups())\n {\n options.SwaggerEndpoint("/" + groupInfo.RouteTemplate, groupInfo.Title);\n }\n});\n\napp.UseInject(); // Furion \u9ed8\u8ba4 api \u5730\u5740\u4e3a /api\n')),(0,r.kt)("img",{src:(0,l.Z)("img/sg20.png")}),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u5982\u9700\u5b9e\u73b0\u767b\u5f55\u4e4b\u540e\u81ea\u52a8\u5c06 ",(0,r.kt)("inlineCode",{parentName:"strong"},"token")," \u6dfb\u52a0\u5230\u5934\u90e8\u53ef\u5728\u767b\u5f55\u63a5\u53e3 ",(0,r.kt)("inlineCode",{parentName:"strong"},"AfterScript")," \u6267\u884c\u4ee5\u4e0b\u4ee3\u7801\uff1a")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-js"},'ke.global.setAllHeader(\n "Authorization",\n "Bearer " + ke.response.headers["access-token"]\n);\n')),(0,r.kt)("img",{src:(0,l.Z)("img/kni.jpg")}),(0,r.kt)("h2",{id:"66-specificationdocumentsettings-\u914d\u7f6e"},"6.6 ",(0,r.kt)("inlineCode",{parentName:"h2"},"SpecificationDocumentSettings")," \u914d\u7f6e"),(0,r.kt)("p",null,"\u9664\u4e86\u4e0a\u8ff0\u4f8b\u5b50\u5916\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86\u4e00\u4e9b\u914d\u7f6e\u9009\u9879\uff0c\u5982\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"DocumentTitle"),"\uff1a\u6587\u6863\u6807\u9898\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"Specification Api Document")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"DefaultGroupName"),"\uff1a\u9ed8\u8ba4\u5206\u7ec4\u540d\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"Default")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"EnableAuthorized"),"\uff1a\u662f\u5426\u542f\u7528\u6743\u9650\u63a7\u5236\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool"),"\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"true")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"FormatAsV2"),"\uff1a\u91c7\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"Swagger 2.0")," \u7248\u672c\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool"),"\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"false")," ",(0,r.kt)("strong",{parentName:"li"},(0,r.kt)("a",{parentName:"strong",href:"https://github.com/domaindrivendev/Swashbuckle.WebApi/issues/1393"},"\u5df2\u5f03\u7528"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"RoutePrefix"),"\uff1a\u89c4\u8303\u5316\u6587\u6863\u5730\u5740\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"api"),"\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u5982\u679c\u5e0c\u671b\u5728\u9996\u9875\uff0c\u6539\u4e3a\u7a7a\u5b57\u7b26\u4e32\u5373\u53ef"),"\u3002"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"DocExpansionState"),"\uff1a\u6587\u6863\u663e\u793a\u65b9\u5f0f\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"DocExpansion"),"\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"List"),"\uff0c\u53d6\u503c\uff1a",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"List"),"\uff1a\u5217\u8868\u5f0f\uff08\u5c55\u5f00\u5b50\u7c7b\uff09\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u9ed8\u8ba4\u503c")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Full"),"\uff1a\u5b8c\u5168\u5c55\u5f00"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"None"),"\uff1a\u5217\u8868\u5f0f\uff08\u4e0d\u5c55\u5f00\u5b50\u7c7b\uff09"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"XmlComments"),"\uff1a\u7a0b\u5e8f\u96c6\u6ce8\u91ca\u63cf\u8ff0\u6587\u4ef6\u540d\uff08\u53ef\u5e26 ",(0,r.kt)("inlineCode",{parentName:"li"},".xml"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string"),"\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"Furion.Application, Furion.Web.Entry, Furion.Web.Core")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"GroupOpenApiInfos"),"\uff1a\u5206\u7ec4\u4fe1\u606f\u914d\u7f6e\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"SpecificationOpenApiInfo[]"),"\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"{ 'Group': 'Default'}")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"SecurityDefinitions"),"\uff1a\u5b89\u5168\u7b56\u7565\u5b9a\u4e49\u914d\u7f6e\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"SpecificationOpenApiSecurityScheme[]"),"\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"[]")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Servers"),"\uff1a\u914d\u7f6e Server \u4e0b\u62c9\u5217\u8868\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"OpenApiServer[]")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"[]"),"\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},'{Servers:[ { Url:"\u5730\u5740", Description:"\u63cf\u8ff0"} ]}')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"HideServers"),"\uff1a\u662f\u5426\u9690\u85cf Server \u4e0b\u62c9\u5217\u8868\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"true")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"RouteTemplate"),"\uff1a\u914d\u7f6e\u6587\u6863 ",(0,r.kt)("inlineCode",{parentName:"li"},"swagger.json")," \u8def\u7531\u6a21\u677f\uff0c\u9ed8\u8ba4\u6a21\u677f\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"swagger/{documentName}/swagger.json"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"{documentName}")," \u4ee3\u8868\u5206\u7ec4\u540d\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u5fc5\u987b\u4fdd\u7559\u539f\u6837")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"PackagesGroups"),"\uff1a\u914d\u7f6e\u6a21\u5757\u5316\u5185\u7f6e\u5206\u7ec4\u540d\u79f0\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string[]")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"[]")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"EnableEnumSchemaFilter"),"\uff1a\u542f\u7528\u679a\u4e3e Schema \u7b5b\u9009\u5668\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"true")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"EnableTagsOrderDocumentFilter"),"\uff1a\u542f\u7528\u6807\u7b7e\u6392\u5e8f\u7b5b\u9009\u5668\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"true")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ServerDir"),"\uff1a\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"li"},"IIS")," \u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"Application")," \u90e8\u7f72\u540d\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff0c\u9ed8\u8ba4\u7a7a\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u4ec5\u5728 Furion v3.2.0+` \u6709\u6548")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"LoginInfo"),"\uff1a\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"li"},"Swagger")," \u662f\u5426\u9700\u8981\u767b\u5f55\u624d\u80fd\u8bbf\u95ee\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"SpecificationLoginInfo")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"null"),"\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u4ec5\u5728 Furion v3.3.3+` \u6709\u6548"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Enabled"),"\uff1a\u662f\u5426\u542f\u7528\u767b\u5f55\u6388\u6743\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"false")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"CheckUrl"),"\uff1a\u68c0\u67e5\u767b\u5f55\u72b6\u6001\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"Url")," \u5730\u5740\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u8be5\u5730\u5740\u5fc5\u987b\u662f ",(0,r.kt)("inlineCode",{parentName:"strong"},"POST")," \u8bf7\u6c42"),"\uff0c\u5df2\u6388\u6743\u8fd4\u56de ",(0,r.kt)("inlineCode",{parentName:"li"},"200"),"\uff0c\u5426\u5219\u8fd4\u56de ",(0,r.kt)("inlineCode",{parentName:"li"},"401")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"SubmitUrl"),"\uff1a\u63d0\u4ea4\u767b\u5f55\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"Url")," \u5730\u5740\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u8be5\u5730\u5740\u5fc5\u987b\u662f ",(0,r.kt)("inlineCode",{parentName:"strong"},"POST")," \u8bf7\u6c42\u4e14\u53ea\u6709\u4e00\u4e2a ",(0,r.kt)("inlineCode",{parentName:"strong"},"SpecificationAuth")," \u7c7b\u578b\u53c2\u6570"),"\uff0c\u6210\u529f\u767b\u5f55\u8fd4\u56de ",(0,r.kt)("inlineCode",{parentName:"li"},"200"),"\uff0c\u5426\u5219\u8fd4\u56de ",(0,r.kt)("inlineCode",{parentName:"li"},"401"),"\uff0c\u652f\u6301\u76f8\u5bf9\u5730\u5740\uff0c\u4ee5 ",(0,r.kt)("inlineCode",{parentName:"li"},"/")," \u5f00\u5934"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"EnableAllGroups"),"\uff1a\u542f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"Swagger")," \u603b\u5206\u7ec4\u529f\u80fd\uff0c\u81ea\u52a8\u5c06\u6240\u6709\u5206\u7ec4\u7684\u63a5\u53e3\u5408\u5e76\u5230 ",(0,r.kt)("inlineCode",{parentName:"li"},"All Groups")," \u4e2d\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"false"),"\uff0c",(0,r.kt)("strong",{parentName:"li"},"\u4ec5\u5728 Furion v3.3.4+` \u6709\u6548"))),(0,r.kt)("p",null,"\u53e6\u5916 ",(0,r.kt)("inlineCode",{parentName:"p"},"SpecificationOpenApiInfo")," \u5185\u7f6e\u914d\u7f6e\u5982\u4e0b\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Group"),"\uff1a\u5206\u7ec4\u552f\u4e00\u6807\u8bc6\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b\uff0c\u5fc5\u586b"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Order"),"\uff1a\u5206\u7ec4\u6392\u5e8f\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"int")," \u7c7b\u578b\uff0c\u6570\u5b57\u8d8a\u5927\u6392\u524d\u9762\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"0")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Visible"),"\uff1a\u914d\u7f6e\u5206\u7ec4\u662f\u5426\u53ef\u89c1\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"bool")," \u7c7b\u578b\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"true")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Title"),"\uff1a\u914d\u7f6e\u5206\u7ec4\u6807\u9898\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Description"),"\uff1a\u914d\u7f6e\u5206\u7ec4\u63cf\u8ff0\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"string")," \u7c7b\u578b"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Version"),"\uff1a\u914d\u7f6e\u5206\u7ec4\u7248\u672c\uff0c\u9ed8\u8ba4 ",(0,r.kt)("inlineCode",{parentName:"li"},"1.0")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"TermsOfService"),"\uff1a\u914d\u7f6e\u76f8\u5173\u94fe\u63a5\u5730\u5740\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"Uri")," \u7c7b\u578b"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Contact"),"\uff1a\u914d\u7f6e\u8054\u7cfb\u65b9\u5f0f\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"OpenApiContact")," \u7c7b\u578b"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"License"),"\uff1a\u914d\u7f6e\u534f\u8bae\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"OpenApiLicense")," \u7c7b\u578b")),(0,r.kt)("p",null,"\u914d\u7f6e\u793a\u4f8b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "SpecificationDocumentSettings": {\n "GroupOpenApiInfos": [\n {\n "Group": "Group1",\n "Title": "\u5206\u7ec4\u6807\u9898",\n "Description": "\u8fd9\u91cc\u662f\u5206\u7ec4\u63cf\u8ff0",\n "Version": "\u7248\u672c\u53f7",\n "TermsOfService": "https://furion.icu",\n "Contact": {\n "Name": "\u767e\u5c0f\u50e7",\n "Url": "https://gitee.com/monksoul",\n "Email": "monksoul@outlook.com"\n },\n "License": {\n "Name": "MIT",\n "Url": "https://gitee.com/dotnetchina/Furion/blob/alpha/LICENSE"\n }\n }\n ]\n }\n}\n')),(0,r.kt)("h2",{id:"67-\u7edf\u4e00\u8fd4\u56de\u503c\u6a21\u578b\u89c4\u8303\u5316\u7ed3\u679capi-\u8fd4\u56de\u503c"},"6.7 \u7edf\u4e00\u8fd4\u56de\u503c\u6a21\u578b/\u89c4\u8303\u5316\u7ed3\u679c/API \u8fd4\u56de\u503c"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b ",(0,r.kt)("inlineCode",{parentName:"p"},"\u89c4\u8303\u5316\u7ed3\u679c")," \u529f\u80fd\uff0c\u53ef\u4ee5\u901a\u8fc7\u5b9e\u73b0 ",(0,r.kt)("inlineCode",{parentName:"p"},"IUnifyResultProvider")," \u63d0\u4f9b\u5668\u5b9e\u73b0\u7edf\u4e00\u89c4\u8303\u5316\u8fd4\u56de\u503c\u5b9a\u5236\uff0c\u5982\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5b9a\u4e49\u7ed3\u679c\u5305\u88c5\u7c7b\u578b"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-2}",showLineNumbers:!0,"{1-2}":!0},"// \u5fc5\u987b\u662f\u6cdb\u578b\u7c7b\u578b\npublic class YourRESTfulResult\n{\n /// \n /// \u72b6\u6001\u7801\n /// \n public int? StatusCode { get; set; }\n\n /// \n /// \u6570\u636e\n /// \n public T Data { get; set; }\n\n /// \n /// \u6267\u884c\u6210\u529f\n /// \n public bool Succeeded { get; set; }\n\n /// \n /// \u9519\u8bef\u4fe1\u606f\n /// \n public object Errors { get; set; }\n\n /// \n /// \u9644\u52a0\u6570\u636e\n /// \n public object Extras { get; set; }\n\n /// \n /// \u65f6\u95f4\u6233\n /// \n public long Timestamp { get; set; }\n}\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"strong"},"IUnifyResultProvider")," \u5b9e\u73b0\u7c7b\uff0c\u5e76\u8d34\u7279\u6027 ",(0,r.kt)("inlineCode",{parentName:"strong"},"[UnifyModel(typeof(YourRESTfulResult<>))]")))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {15-16,24,36,48,61}",showLineNumbers:!0,"":!0,"{15-16,24,36,48,61}":!0},'using Furion.DataValidation;\nusing Furion.DependencyInjection;\nusing Furion.UnifyResult.Internal;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Mvc.Filters;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace YourProject.UnifyResult\n{\n /// \n /// RESTful \u98ce\u683c\u8fd4\u56de\u503c\n /// \n [UnifyModel(typeof(YourRESTfulResult<>))]\n public class YourRESTfulResultProvider : IUnifyResultProvider\n {\n /// \n /// \u5f02\u5e38\u8fd4\u56de\u503c\n /// \n /// \n /// \n /// \n public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata)\n {\n return new JsonResult(YourRESTfulResult(metadata.StatusCode, data: metadata.Data, errors: metadata.Errors)\n , UnifyContext.GetSerializerSettings(context)); // \u5f53\u524d\u884c\u4ec5\u9650 Furion 4.6.6+ \u4f7f\u7528\n }\n\n /// \n /// \u6210\u529f\u8fd4\u56de\u503c\n /// \n /// \n /// \n /// \n public IActionResult OnSucceeded(ActionExecutedContext context, object data)\n {\n return new JsonResult(YourRESTfulResult(StatusCodes.Status200OK, true, data)\n , UnifyContext.GetSerializerSettings(context)); // \u5f53\u524d\u884c\u4ec5\u9650 Furion 4.6.6+ \u4f7f\u7528\n }\n\n /// \n /// \u9a8c\u8bc1\u5931\u8d25\u8fd4\u56de\u503c\n /// \n /// \n /// \n /// \n public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata)\n {\n return new JsonResult(YourRESTfulResult(metadata.StatusCode ?? StatusCodes.Status400BadRequest, data: metadata.Data, errors: metadata.ValidationResult)\n , UnifyContext.GetSerializerSettings(context)); // \u5f53\u524d\u884c\u4ec5\u9650 Furion 4.6.6+ \u4f7f\u7528\n }\n\n /// \n /// \u7279\u5b9a\u72b6\u6001\u7801\u8fd4\u56de\u503c\n /// \n /// \n /// \n /// \n /// \n public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings)\n {\n // \u8bbe\u7f6e\u54cd\u5e94\u72b6\u6001\u7801\n UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings);\n\n switch (statusCode)\n {\n // \u5904\u7406 401 \u72b6\u6001\u7801\n case StatusCodes.Status401Unauthorized:\n await context.Response.WriteAsJsonAsync(YourRESTfulResult(statusCode, errors: "401 Unauthorized")\n , App.GetOptions()?.JsonSerializerOptions);\n break;\n // \u5904\u7406 403 \u72b6\u6001\u7801\n case StatusCodes.Status403Forbidden:\n await context.Response.WriteAsJsonAsync(YourRESTfulResult(statusCode, errors: "403 Forbidden")\n , App.GetOptions()?.JsonSerializerOptions);\n break;\n default: break;\n }\n }\n\n /// \n /// \u8fd4\u56de RESTful \u98ce\u683c\u7ed3\u679c\u96c6\n /// \n /// \n /// \n /// \n /// \n /// \n private static YourRESTfulResult YourRESTfulResult(int statusCode, bool succeeded = default, object data = default, object errors = default)\n {\n return new YourRESTfulResult\n {\n StatusCode = statusCode,\n Succeeded = succeeded,\n Data = data,\n Errors = errors,\n Extras = UnifyContext.Take(),\n Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()\n };\n }\n }\n}\n')),(0,r.kt)("p",null,"\u4e4b\u540e\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u6ce8\u518c\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddControllers()\n .AddInjectWithUnifyResult();\n")),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u89c4\u8303\u5316\u7ed3\u679c\u4e0d\u4f1a\u5bf9 ",(0,r.kt)("inlineCode",{parentName:"p"},"401")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"403"),"\u3001",(0,r.kt)("inlineCode",{parentName:"p"},"404")," \u72b6\u6001\u7801\u8fdb\u884c\u89c4\u8303\u5316\u5904\u7406\uff0c\u5982\u9700\u542f\u52a8\u8be5\u72b6\u6001\u7801\u5904\u7406\uff0c\u53ea\u9700\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Configure")," \u4e2d\u542f\u7528\u63a5\u53e3\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n{\n if (env.IsDevelopment())\n {\n app.UseDeveloperExceptionPage();\n }\n // \u6dfb\u52a0\u89c4\u8303\u5316\u7ed3\u679c\u72b6\u6001\u7801\uff0c\u9700\u8981\u5728\u8fd9\u91cc\u6ce8\u518c\n app.UseUnifyResultStatusCodes();\n // \u5176\u4ed6\u6ce8\u518c...\n}\n"))),(0,r.kt)("h3",{id:"671-\u6392\u9664\u89c4\u8303\u5316\u5904\u7406"},"6.7.1 \u6392\u9664\u89c4\u8303\u5316\u5904\u7406"),(0,r.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\uff0c\u6211\u4eec\u67d0\u4e9b\u63a5\u53e3\u4e0d\u9700\u8981\u8fdb\u884c\u89c4\u8303\u5316\u5904\u7406\uff0c\u8fd9\u65f6\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5e16 ",(0,r.kt)("inlineCode",{parentName:"p"},"[NonUnify]")," \u7279\u6027\u5373\u53ef\u3002"),(0,r.kt)("h3",{id:"672-\u89c4\u8303\u5316\u7ed3\u679c\u6dfb\u52a0\u989d\u5916\u6570\u636e"},"6.7.2 \u89c4\u8303\u5316\u7ed3\u679c\u6dfb\u52a0\u989d\u5916\u6570\u636e"),(0,r.kt)("p",null,"\u9ed8\u8ba4\u7684\u89c4\u8303\u5316\u7ed3\u679c\u4e2d\u5305\u542b ",(0,r.kt)("inlineCode",{parentName:"p"},"extras")," \u5c5e\u6027\uff0c\u53ef\u4ee5\u914d\u7f6e\u989d\u5916\u6570\u636e\u8fd4\u56de\u5230\u5ba2\u6237\u7aef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'UnifyContext.Fill(new { Message = "\u64cd\u4f5c\u6210\u529f" });\n')),(0,r.kt)("h3",{id:"673-\u81ea\u5b9a\u4e49\u7279\u522b\u63a5\u53e3\u89c4\u8303\u5316\u7ed3\u679c"},"6.7.3 \u81ea\u5b9a\u4e49\u7279\u522b\u63a5\u53e3\u89c4\u8303\u5316\u7ed3\u679c"),(0,r.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\uff0c\u6211\u4eec\u7279\u5b9a\u63a5\u53e3\u9700\u8fd4\u56de\u7279\u5b9a\u7684\u63a5\u53e3\u7c7b\u578b\uff0c\u65e0\u9700\u89c4\u8303\u5316\u5904\u7406\uff0c\u8fd9\u65f6\u5019\u6211\u4eec\u53ea\u9700\u8981\u8d34 ",(0,r.kt)("inlineCode",{parentName:"p"},"[UnifyResult(typeof(\u7ed3\u679c\u7c7b))]")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"[ProducesResponseType(typeof(\u7ed3\u679c\u7c7b),200)]"),"\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"[UnifyResult(typeof(Person))]\npublic Person GetPerson(int id)\n{\n // ...\n}\n")),(0,r.kt)("h2",{id:"68-\u652f\u6301\u591a\u5957\u89c4\u8303\u5316\u914d\u7f6e"},"6.8 \u652f\u6301\u591a\u5957\u89c4\u8303\u5316\u914d\u7f6e"),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.4.4 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u5728\u4e00\u4e9b\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u53ef\u80fd\u9700\u8981\u9488\u5bf9\u7279\u5b9a\u7684\u63a7\u5236\u5668\uff08\u52a8\u6001 WebAPI\uff09\u6216\u7279\u5b9a\u7684\u65b9\u6cd5\u4f7f\u7528\u4e0d\u540c\u7684\u89c4\u8303\u5316\u5904\u7406\u673a\u5236\uff0c\u8fd9\u65f6\u5c31\u9700\u8981\u591a\u5957\u89c4\u8303\u5316\u5904\u7406\u63d0\u4f9b\u5668\uff0c\u5982\uff1a"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"\u5b9a\u4e49\u89c4\u8303\u5316\u5904\u7406\u63d0\u4f9b\u7a0b\u5e8f"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1-2,25}",showLineNumbers:!0,"{1-2,25}":!0},"[UnifyModel(typeof(MyResult<>))]\npublic class SpeciallyResultProvider : IUnifyResultProvider\n{\n public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata)\n {\n // \u53c2\u8003\u4e0a\u9762\u7684\u89c4\u8303\u5316\u5904\u7406\u5199\u6cd5\n }\n\n public IActionResult OnSucceeded(ActionExecutedContext context, object data)\n {\n // \u53c2\u8003\u4e0a\u9762\u7684\u89c4\u8303\u5316\u5904\u7406\u5199\u6cd5\n }\n\n public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata)\n {\n // \u53c2\u8003\u4e0a\u9762\u7684\u89c4\u8303\u5316\u5904\u7406\u5199\u6cd5\n }\n\n public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings)\n {\n // \u53c2\u8003\u4e0a\u9762\u7684\u89c4\u8303\u5316\u5904\u7406\u5199\u6cd5\n }\n}\n\npublic class MyResult\n{\n /// \n /// \u6570\u636e\n /// \n public T Data { get; set; }\n}\n")),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"\u6ce8\u518c\u89c4\u8303\u5316\u5904\u7406\u63d0\u4f9b\u5668"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'services.AddUnifyProvider("specially"); // \u6307\u5b9a\u89c4\u8303\u5316\u552f\u4e00\u540d\u79f0\uff0c\u5982\u679c\u4e0d\u6307\u5b9a\u5c31\u4f1a\u66ff\u4ee3\u9ed8\u8ba4\u7684\n')),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"\u5728\u63a7\u5236\u5668/\u52a8\u6001 WebAPI \u4e2d\u4f7f\u7528"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3,8,14}",showLineNumbers:!0,"{3,8,14}":!0},'public class TestUnifyProvider : IDynamicApiController\n{\n public string DefaultUnify()\n {\n return "test";\n }\n\n [UnifyProvider]\n public string DefaultUnify2()\n {\n return "test";\n }\n\n [UnifyProvider("specially")]\n public string SpeciallyUnify()\n {\n return "\u7279\u522b";\n }\n}\n')),(0,r.kt)("h2",{id:"69-\u9488\u5bf9\u7279\u5b9a\u63a7\u5236\u5668\u6216\u7279\u5b9a\u65b9\u6cd5\u914d\u7f6e\u5e8f\u5217\u5316\u9009\u9879"},"6.9 \u9488\u5bf9\u7279\u5b9a\u63a7\u5236\u5668\u6216\u7279\u5b9a\u65b9\u6cd5\u914d\u7f6e\u5e8f\u5217\u5316\u9009\u9879"),(0,r.kt)("p",null,"\u5f88\u5c11\u5f00\u53d1\u8005\u6ce8\u610f\u5230 ",(0,r.kt)("inlineCode",{parentName:"p"},"new JsonResult(data)")," \u5b9e\u9645\u4e0a\u6709\u7b2c\u4e8c\u4e2a\u53c2\u6570\u7684\uff0c\u4e5f\u5c31\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"new JsonResult(data, serializerSettings)"),"\uff0c\u90a3\u4e48\u53ef\u4ee5\u6839\u636e\u81ea\u5df1\u7684\u903b\u8f91\u4f20\u9012\u7b2c\u4e8c\u4e2a\u53c2\u6570\uff0c\u5982\u679c\u4e0d\u4f20\u9012\u5219\u91c7\u7528\u5168\u5c40\u914d\u7f6e\u7684\u5e8f\u5217\u5316\u9009\u9879\u3002"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e24\u79cd\u5904\u7406\u65b9\u5f0f\u3002"),(0,r.kt)("h3",{id:"691-\u901a\u8fc7-jsonresult-\u8bbe\u7f6e\u7b2c\u4e8c\u4e2a\u53c2\u6570"},"6.9.1 \u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"h3"},"JsonResult")," \u8bbe\u7f6e\u7b2c\u4e8c\u4e2a\u53c2\u6570"),(0,r.kt)("p",null,"\u8fd9\u79cd\u65b9\u5f0f\u6bd4\u8f83\u539f\u59cb\u5316\uff0c\u4ee3\u7801\u6bd4\u8f83\u7e41\u6742\uff0c\u4e5f\u4e0d\u5229\u4e8e\u7ef4\u62a4\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4,13-16}",showLineNumbers:!0,"{1,4,13-16}":!0},'[NonUnify]\npublic IActionResult SpecialApi()\n{\n return new JsonResult(new YourRESTfulResult\n {\n StatusCode = 200,\n Succeeded = true,\n Data = new\n {\n Name = "Furion"\n },\n Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()\n }, new JsonSerializerOptions\n {\n PropertyNamingPolicy = null\n });\n}\n')),(0,r.kt)("h3",{id:"692-\u6ce8\u518c\u591a\u5957\u5e8f\u5217\u5316\u914d\u7f6e\u9009\u9879-\u63a8\u8350"},"6.9.2 \u6ce8\u518c\u591a\u5957\u5e8f\u5217\u5316\u914d\u7f6e\u9009\u9879 ",(0,r.kt)("strong",{parentName:"h3"},"(\u63a8\u8350)")),(0,r.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion 4.6.6 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u6ce8\u518c\u4e00\u5957\u65b0\u7684\u89c4\u5219\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},'services.AddUnifyJsonOptions("special", new JsonSerializerOptions // \u5982\u679c\u4f7f\u7528 Newtonsoft.Json => new JsonSerializerSettings\n{\n PropertyNamingPolicy = null\n});\n')),(0,r.kt)("p",null,"\u4ee3\u7801\u4f7f\u7528\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"{1}":!0},'[UnifySerializerSetting("special")]\npublic object SpecialApi()\n{\n return new\n {\n Name = "Furion"\n }\n}\n')),(0,r.kt)("admonition",{title:"\u7279\u522b\u63d0\u9192",type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"\u76ee\u524d ",(0,r.kt)("inlineCode",{parentName:"p"},"Swagger")," \u6682\u672a\u63d0\u4f9b\u4e2a\u522b\u7684\u63a5\u53e3\u81ea\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"p"},"schema")," \u5e8f\u5217\u5316\u9009\u9879\u3002")),(0,r.kt)("h2",{id:"610-\u53cd\u9988\u4e0e\u5efa\u8bae"},"6.10 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,r.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}N.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/adf0697d.77b8024c.js b/handbook/build/assets/js/adf0697d.77b8024c.js new file mode 100644 index 00000000000..5fac6d11cd2 --- /dev/null +++ b/handbook/build/assets/js/adf0697d.77b8024c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7400],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return k}});var a=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var p=a.createContext({}),m=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},s=function(e){var t=m(e.components);return a.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,l=e.mdxType,r=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),d=m(n),k=l,N=d["".concat(p,".").concat(k)]||d[k]||u[k]||r;return n?a.createElement(N,o(o({ref:t},s),{},{components:n})):a.createElement(N,o({ref:t},s))}));function k(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=n.length,o=new Array(r);o[0]=d;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:l,o[1]=i;for(var m=2;mdotnet tools \u5305\u7ba1\u7406\u597d\u5904",id:"3712-dotnet-tools-\u5305\u7ba1\u7406\u597d\u5904",level:3},{value:"37.2 \u4e86\u89e3\u5305\u547d\u4ee4\u8bed\u6cd5",id:"372-\u4e86\u89e3\u5305\u547d\u4ee4\u8bed\u6cd5",level:2},{value:"37.2.1 \u77ed\u53c2\u6570\u4f8b\u5b50",id:"3721-\u77ed\u53c2\u6570\u4f8b\u5b50",level:3},{value:"37.2.2 \u957f\u53c2\u6570\u4f8b\u5b50",id:"3722-\u957f\u53c2\u6570\u4f8b\u5b50",level:3},{value:"37.2.3 \u6df7\u5408\u53c2\u6570\u4f8b\u5b50",id:"3723-\u6df7\u5408\u53c2\u6570\u4f8b\u5b50",level:3},{value:"37.2.4 \u591a\u4e2a\u503c\u53c2\u6570",id:"3724-\u591a\u4e2a\u503c\u53c2\u6570",level:3},{value:"37.2.5 \u64cd\u4f5c\u7b26",id:"3725-\u64cd\u4f5c\u7b26",level:3},{value:"37.3 \u7f16\u5199\u7b2c\u4e00\u4e2a\u5305",id:"373-\u7f16\u5199\u7b2c\u4e00\u4e2a\u5305",level:2},{value:"37.3.1 \u521b\u5efa HelloTools \u63a7\u5236\u53f0\u5e94\u7528",id:"3731-\u521b\u5efa-hellotools-\u63a7\u5236\u53f0\u5e94\u7528",level:3},{value:"37.3.2 \u7f16\u8f91 HelloTools.csproj",id:"3732-\u7f16\u8f91-hellotoolscsproj",level:3},{value:"\u914d\u7f6e\u5173\u952e\u8282\u70b9\u8bf4\u660e",id:"\u914d\u7f6e\u5173\u952e\u8282\u70b9\u8bf4\u660e",level:4},{value:"37.3.3 \u5b89\u88c5 Furion.Tools.CommandLine \u5305",id:"3733-\u5b89\u88c5-furiontoolscommandline-\u5305",level:3},{value:"37.3.4 \u7f16\u5199\u903b\u8f91\u4ee3\u7801",id:"3734-\u7f16\u5199\u903b\u8f91\u4ee3\u7801",level:3},{value:"37.3.5 \u5982\u4f55\u8c03\u8bd5\u5305\u5de5\u5177 \ud83d\udc4f",id:"3735-\u5982\u4f55\u8c03\u8bd5\u5305\u5de5\u5177-",level:3},{value:"37.3.6 \u6d4b\u8bd5\u5404\u4e2a\u53c2\u6570\u60c5\u51b5",id:"3736-\u6d4b\u8bd5\u5404\u4e2a\u53c2\u6570\u60c5\u51b5",level:3},{value:"37.4 \u6253\u5305\uff08\u672c\u673a\uff09\u6d4b\u8bd5",id:"374-\u6253\u5305\u672c\u673a\u6d4b\u8bd5",level:2},{value:"37.4.1 \u5168\u5c40\u6253\u5305\u5b89\u88c5",id:"3741-\u5168\u5c40\u6253\u5305\u5b89\u88c5",level:3},{value:"\u2714 \u5b89\u88c5\u5168\u5c40\u5305",id:"-\u5b89\u88c5\u5168\u5c40\u5305",level:4},{value:"\u2714 \u6d4b\u8bd5\u5168\u5c40\u5305",id:"-\u6d4b\u8bd5\u5168\u5c40\u5305",level:4},{value:"\u2714 \u66f4\u65b0\u5168\u5c40\u5305",id:"-\u66f4\u65b0\u5168\u5c40\u5305",level:4},{value:"\u2714 \u5378\u8f7d\u5168\u5c40\u5305",id:"-\u5378\u8f7d\u5168\u5c40\u5305",level:4},{value:"37.4.2 \u672c\u5730\u6253\u5305\u5b89\u88c5",id:"3742-\u672c\u5730\u6253\u5305\u5b89\u88c5",level:3},{value:"\u2714 \u521b\u5efa\u672c\u5730\u6e05\u5355\u6587\u4ef6",id:"-\u521b\u5efa\u672c\u5730\u6e05\u5355\u6587\u4ef6",level:4},{value:"\u2714 \u5b89\u88c5\u672c\u5730\u5305",id:"-\u5b89\u88c5\u672c\u5730\u5305",level:4},{value:"\u2714 \u6d4b\u8bd5\u672c\u5730\u5305",id:"-\u6d4b\u8bd5\u672c\u5730\u5305",level:4},{value:"\u2714 \u66f4\u65b0\u672c\u5730\u5305",id:"-\u66f4\u65b0\u672c\u5730\u5305",level:4},{value:"\u2714 \u5378\u8f7d\u672c\u5730\u5305",id:"-\u5378\u8f7d\u672c\u5730\u5305",level:4},{value:"37.5 \u53d1\u5e03\u5230 Nuget \u5e73\u53f0 \ud83d\udc4f",id:"375-\u53d1\u5e03\u5230-nuget-\u5e73\u53f0-",level:2},{value:"\u2714 \u5b89\u88c5 Nuget \u5305\u5230\u672c\u5730",id:"-\u5b89\u88c5-nuget-\u5305\u5230\u672c\u5730",level:4},{value:"37.6 Cli \u9759\u6001\u7c7b\u8bf4\u660e",id:"376-cli-\u9759\u6001\u7c7b\u8bf4\u660e",level:2},{value:"37.6.1 \u6d88\u606f\u7c7b",id:"3761-\u6d88\u606f\u7c7b",level:3},{value:"37.6.2 \u5de5\u5177\u7c7b",id:"3762-\u5de5\u5177\u7c7b",level:3},{value:"37.6.2 \u4fe1\u606f\u7c7b",id:"3762-\u4fe1\u606f\u7c7b",level:3},{value:"37.6.3 \u5176\u4ed6\u7c7b",id:"3763-\u5176\u4ed6\u7c7b",level:3},{value:"37.7 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"377-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],k={toc:d};function N(e){var t=e.components,n=(0,l.Z)(e,i);return(0,r.kt)("wrapper",(0,a.Z)({},k,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"371-\u5173\u4e8e\u5305\u7ba1\u7406\u5de5\u5177"},"37.1 \u5173\u4e8e\u5305\u7ba1\u7406\u5de5\u5177"),(0,r.kt)("p",null,"\u4f7f\u7528\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"NodeJs")," \u7684\u670b\u53cb\u4e00\u5b9a\u5bf9 ",(0,r.kt)("inlineCode",{parentName:"p"},"npm")," \u547d\u4ee4\u4e0d\u4f1a\u964c\u751f\uff0c\u53ef\u4ee5\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"npm")," \u5b89\u88c5\u9879\u76ee\u9700\u8981\u7684\u5305\u6216\u73af\u5883\u9700\u8981\u7684\u5de5\u5177\uff0c\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},".NET Core 2.1+")," \u4e4b\u540e\uff0c\u5fae\u8f6f\u4e5f\u63a8\u51fa\u4e86\u65b0\u7684\u7279\u6027\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Global/Local Tools"),"\uff0c\u8be5\u7279\u6027\u529f\u80fd\u4e5f\u6b63\u662f\u53d7\u5230 ",(0,r.kt)("inlineCode",{parentName:"p"},"npm")," \u542f\u53d1\u4e0b\u8bde\u751f\u7684\u3002"),(0,r.kt)("p",null,"\u4e0d\u540c\u7684\u662f\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"npm")," \u4e2d\u7684\u5305\u91c7\u7528\u7684\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"Javascript")," \u7f16\u5199\u5e76\u53d1\u5e03\u5230 ",(0,r.kt)("a",{parentName:"p",href:"https://www.npmjs.com/"},"https://www.npmjs.com/")," \u5e73\u53f0\uff0c\u800c ",(0,r.kt)("inlineCode",{parentName:"p"},"dotnet tools")," \u91c7\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"C#")," \u7f16\u5199\u5e76\u53d1\u5e03\u5230 ",(0,r.kt)("inlineCode",{parentName:"p"},"https://www.nuget.org/")," \u5e73\u53f0\u4f9b\u5b89\u88c5\u4f7f\u7528\u3002"),(0,r.kt)("h3",{id:"3712-dotnet-tools-\u5305\u7ba1\u7406\u597d\u5904"},"37.1.2 ",(0,r.kt)("inlineCode",{parentName:"h3"},"dotnet tools")," \u5305\u7ba1\u7406\u597d\u5904"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u8de8\u5e73\u53f0\uff0c\u652f\u6301 ",(0,r.kt)("inlineCode",{parentName:"li"},"Linux/Mac/Windows")," \u5e73\u53f0\u4f9b\u5b89\u88c5\u4f7f\u7528"),(0,r.kt)("li",{parentName:"ul"},"\u5b8c\u6574\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"C#")," \u751f\u6001\u652f\u6301"),(0,r.kt)("li",{parentName:"ul"},"\u4e3a\u6240\u6b32\u4e3a~~~\uff08\u62e5\u6709\u64cd\u4f5c\u7cfb\u7edf\u7684\u6743\u9650\uff09")),(0,r.kt)("h2",{id:"372-\u4e86\u89e3\u5305\u547d\u4ee4\u8bed\u6cd5"},"37.2 \u4e86\u89e3\u5305\u547d\u4ee4\u8bed\u6cd5"),(0,r.kt)("p",null,"\u901a\u5e38\u5305\u547d\u4ee4\u8bed\u6cd5\u90fd\u9075\u5faa\u4ee5\u4e0b\u89c4\u5219\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"<-|--|/>argument-name<=|:| >[\"|']value['|\"] [--] [operand] ... [operand]\n")),(0,r.kt)("p",null,"\u5728\u8fd9\u91cc\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u5c06\u7b80\u5355\u4ecb\u7ecd\u547d\u4ee4\u5e38\u7528\u7684\u77e5\u8bc6\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u5de5\u5177\u7b26"),"\uff1a\u901a\u5e38\u6307\u7684\u662f\u4f60\u5de5\u5177\u7684\u552f\u4e00\u540d\u79f0\uff0c\u4e5f\u5c31\u662f\u5173\u952e\u5b57\uff0c\u800c\u4e14\u603b\u662f\u5728\u6700\u5f00\u5934\u7f16\u5199\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"dotnet"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"npm"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"node")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u77ed\u53c2\u6570"),"\uff1a\u77ed\u53c2\u6570\u6307\u7684\u662f ",(0,r.kt)("inlineCode",{parentName:"li"},"\u5355\u4e2a\u5b57\u7b26")," \u7684\u5b57\u7b26\u4e32\uff0c\u6211\u4eec\u901a\u5e38\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"-")," \u4e00\u4e2a\u6a2a\u6746\u6307\u5b9a\u53c2\u6570\u53ca\u503c\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"-v")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"li"},"-v 0.0.1")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u957f\u53c2\u6570"),"\uff1a\u957f\u53c2\u6570\u6307\u7684\u662f\u4e00\u4e2a\u6216\u591a\u4e2a\u5355\u8bcd\u8fde\u63a5\u7684\u5b57\u7b26\u4e32\uff0c\u8be5\u53c2\u6570\u901a\u5e38\u548c ",(0,r.kt)("inlineCode",{parentName:"li"},"\u77ed\u53c2\u6570")," \u540c\u65f6\u5b58\u5728\uff0c\u901a\u5e38\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"--")," \u6307\u5b9a\u53c2\u6570\u53ca\u503c\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"--version")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"li"},"--version 0.0.1")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u64cd\u4f5c\u7b26"),"\uff1a\u5b57\u7b26\u4e32\u4e2d\u4e0e\u53c2\u6570\u503c\u683c\u5f0f\u4e0d\u5339\u914d\u7684\u4efb\u4f55\u6587\u672c\u90fd\u88ab\u89c6\u4e3a\u64cd\u4f5c\u6570\uff0c\u4efb\u4f55\u51fa\u73b0\u5728\u53cc\u8fde\u5b57\u7b26 ",(0,r.kt)("inlineCode",{parentName:"li"},"--")," \u4e4b\u540e\u4e14\u672a\u5305\u542b\u5728\u5355\u5f15\u53f7\u6216\u53cc\u5f15\u53f7\u4e2d\u4e14\u4e24\u4fa7\u6709\u7a7a\u683c\u7684\u6587\u672c\u90fd\u88ab\u89c6\u4e3a\u64cd\u4f5c\u6570\uff0c\u65e0\u8bba\u5b83\u662f\u5426\u4e0e\u53c2\u6570\u503c\u683c\u5f0f\u5339\u914d\uff0c\u901a\u5e38\u7528\u4e8e\u5f52\u7c7b/\u5206\u7c7b\u4f5c\u7528\u3002")),(0,r.kt)("h3",{id:"3721-\u77ed\u53c2\u6570\u4f8b\u5b50"},"37.2.1 \u77ed\u53c2\u6570\u4f8b\u5b50"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-a foo"))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"\u77ed\u53c2\u6570"),(0,r.kt)("th",{parentName:"tr",align:null},"\u53c2\u6570\u503c"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"a"),(0,r.kt)("td",{parentName:"tr",align:null},"foo")))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-ab"))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"\u77ed\u53c2\u6570"),(0,r.kt)("th",{parentName:"tr",align:null},"\u53c2\u6570\u503c"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"a"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"b"),(0,r.kt)("td",{parentName:"tr",align:null})))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"-abc bar"))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"\u77ed\u53c2\u6570"),(0,r.kt)("th",{parentName:"tr",align:null},"\u53c2\u6570\u503c"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"a"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"b"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"bar")))),(0,r.kt)("h3",{id:"3722-\u957f\u53c2\u6570\u4f8b\u5b50"},"37.2.2 \u957f\u53c2\u6570\u4f8b\u5b50"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--foo bar"))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"\u957f\u53c2\u6570"),(0,r.kt)("th",{parentName:"tr",align:null},"\u53c2\u6570\u503c"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"foo"),(0,r.kt)("td",{parentName:"tr",align:null},"bar")))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--foo --bar"))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"\u957f\u53c2\u6570"),(0,r.kt)("th",{parentName:"tr",align:null},"\u53c2\u6570\u503c"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"foo"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"bar"),(0,r.kt)("td",{parentName:"tr",align:null})))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--foo bar --hello world"))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"\u957f\u53c2\u6570"),(0,r.kt)("th",{parentName:"tr",align:null},"\u53c2\u6570\u503c"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"foo"),(0,r.kt)("td",{parentName:"tr",align:null},"bar")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"hello"),(0,r.kt)("td",{parentName:"tr",align:null},"world")))),(0,r.kt)("h3",{id:"3723-\u6df7\u5408\u53c2\u6570\u4f8b\u5b50"},"37.2.3 \u6df7\u5408\u53c2\u6570\u4f8b\u5b50"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},'-abc foo --hello world /new="slashes are ok too"'))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"\u77ed/\u957f\u53c2\u6570"),(0,r.kt)("th",{parentName:"tr",align:null},"\u53c2\u6570\u503c"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"a"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"b"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"foo")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"hello"),(0,r.kt)("td",{parentName:"tr",align:null},"world")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"new"),(0,r.kt)("td",{parentName:"tr",align:null},"slashes are ok too")))),(0,r.kt)("h3",{id:"3724-\u591a\u4e2a\u503c\u53c2\u6570"},"37.2.4 \u591a\u4e2a\u503c\u53c2\u6570"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"--list 1 --list 2 --list 3"))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"\u957f\u53c2\u6570"),(0,r.kt)("th",{parentName:"tr",align:null},"\u53c2\u6570\u503c"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"list"),(0,r.kt)("td",{parentName:"tr",align:null},"1,2,3")))),(0,r.kt)("h3",{id:"3725-\u64cd\u4f5c\u7b26"},"37.2.5 \u64cd\u4f5c\u7b26"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},'-a foo bar "hello world" -b -- -explicit operand'))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"\u77ed\u53c2\u6570"),(0,r.kt)("th",{parentName:"tr",align:null},"\u53c2\u6570\u503c"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"a"),(0,r.kt)("td",{parentName:"tr",align:null},"foo")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"b"),(0,r.kt)("td",{parentName:"tr",align:null})))),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"\u64cd\u4f5c\u7b26"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"bar")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},'"hello world"')),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"-explicit")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"operand")))),(0,r.kt)("p",null,"\u4e86\u89e3\u66f4\u591a\u5173\u4e8e\u5305\u547d\u4ee4\u8bed\u6cd5\u7684\u5b98\u65b9\u77e5\u8bc6\uff1a",(0,r.kt)("a",{parentName:"p",href:"https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html"},"https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html")),(0,r.kt)("h2",{id:"373-\u7f16\u5199\u7b2c\u4e00\u4e2a\u5305"},"37.3 \u7f16\u5199\u7b2c\u4e00\u4e2a\u5305"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"dotnet tools")," \u5de5\u5177\u5b9e\u9645\u4e0a\u662f\u4e00\u4e2a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u63a7\u5236\u53f0")," \u5e94\u7528\u7a0b\u5e8f\uff0c\u4e0d\u540c\u7684\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},".csproj")," \u9879\u76ee\u6587\u4ef6\u9700\u8981\u6dfb\u52a0\u7279\u5b9a\u914d\u7f6e\u3002\u4e0b\u9762\u5c06\u7ed9\u5927\u5bb6\u7f16\u5199\u4e00\u4e2a ",(0,r.kt)("inlineCode",{parentName:"p"},"HelloTools")," \u5305\u7ba1\u7406\u5de5\u5177\u3002"),(0,r.kt)("h3",{id:"3731-\u521b\u5efa-hellotools-\u63a7\u5236\u53f0\u5e94\u7528"},"37.3.1 \u521b\u5efa ",(0,r.kt)("inlineCode",{parentName:"h3"},"HelloTools")," \u63a7\u5236\u53f0\u5e94\u7528"),(0,r.kt)("img",{src:(0,o.Z)("img/ts1.png")}),(0,r.kt)("h3",{id:"3732-\u7f16\u8f91-hellotoolscsproj"},"37.3.2 \u7f16\u8f91 ",(0,r.kt)("inlineCode",{parentName:"h3"},"HelloTools.csproj")),(0,r.kt)("p",null,"\u5c06\u63a7\u5236\u53f0\u9879\u76ee\u6807\u8bb0\u6210 ",(0,r.kt)("inlineCode",{parentName:"p"},"dotnet tools")," \u9700\u8981\u914d\u7f6e\u4ee5\u4e0b\u8282\u70b9\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-xml",metastring:"showLineNumbers {6-11}",showLineNumbers:!0,"":!0,"{6-11}":!0},'\n\n \n Exe\n net5.0\n 0.0.1\n \u7b2c\u4e00\u4e2a dotnet tools \u5de5\u5177\n hello-tools\n true\n true\n ./nupkg\n \n\n\n')),(0,r.kt)("h4",{id:"\u914d\u7f6e\u5173\u952e\u8282\u70b9\u8bf4\u660e"},"\u914d\u7f6e\u5173\u952e\u8282\u70b9\u8bf4\u660e"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Version"),"\uff1a\u5305\u5de5\u5177\u7248\u672c\u53f7"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Description"),"\uff1a\u5305\u5de5\u5177\u4ecb\u7ecd"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ToolCommandName"),"\uff1a\u5305\u5de5\u5177\u5173\u952e\u5b57\uff0c\u5982 ",(0,r.kt)("inlineCode",{parentName:"li"},"dotnet"),"\u3001",(0,r.kt)("inlineCode",{parentName:"li"},"npm"),"\uff0c\u540e\u7eed\u4f7f\u7528\u90fd\u662f\u901a\u8fc7\u8be5\u5173\u952e\u5b57\u4f7f\u7528"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"PackAsTool"),"\uff1a\u662f\u5426\u58f0\u660e\u4e3a\u5305\u7ba1\u7406\u5de5\u5177\uff0c\u8bbe\u7f6e ",(0,r.kt)("inlineCode",{parentName:"li"},"true")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"GeneratePackageOnBuild"),"\uff1a\u662f\u5426\u7f16\u8bd1\u65f6\u81ea\u52a8\u751f\u6210 ",(0,r.kt)("inlineCode",{parentName:"li"},".nupkg")," \u5305\uff0c\u65b9\u4fbf\u540e\u7eed\u4e0a\u4f20\u5230 ",(0,r.kt)("inlineCode",{parentName:"li"},"Nuget")," \u5e73\u53f0"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"PackageOutputPath"),"\uff1a\u914d\u7f6e ",(0,r.kt)("inlineCode",{parentName:"li"},".nupkg")," \u5305\u5b58\u50a8\u76ee\u5f55\uff0c\u63a8\u8350\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"li"},"./nupkg"))),(0,r.kt)("h3",{id:"3733-\u5b89\u88c5-furiontoolscommandline-\u5305"},"37.3.3 \u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Furion.Tools.CommandLine")," \u5305"),(0,r.kt)("p",null,"\u4e3a\u4e86\u65b9\u4fbf\u7ba1\u7406\u5de5\u5177\u5305\u5f00\u53d1\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u5b98\u65b9\u7279\u610f\u5f00\u53d1\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Tools.CommandLine")," \u5305\uff0c\u5e2e\u52a9\u5927\u5bb6\u5feb\u901f\u5f00\u53d1\u7ba1\u7406\u5de5\u5177\u5305\u3002"),(0,r.kt)("img",{src:(0,o.Z)("img/ts2.png")}),(0,r.kt)("h3",{id:"3734-\u7f16\u5199\u903b\u8f91\u4ee3\u7801"},"37.3.4 \u7f16\u5199\u903b\u8f91\u4ee3\u7801"),(0,r.kt)("p",null,"\u6211\u4eec\u5148\u5b9a\u4e49\u51e0\u4e2a\u9700\u6c42\uff0c\u7136\u540e\u7f16\u5199\u903b\u8f91\u4ee3\u7801\uff1a"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\u9700\u6c42\u4e00\uff1a\u8f93\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"hello-tools")," \u6253\u5370\u4ecb\u7ecd\u4fe1\u606f"),(0,r.kt)("p",{parentName:"blockquote"},"\u9700\u6c42\u4e8c\uff1a\u8f93\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"-n")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"--name")," \u8f93\u51fa ",(0,r.kt)("inlineCode",{parentName:"p"},"Hello \u540d\u5b57")),(0,r.kt)("p",{parentName:"blockquote"},"\u9700\u6c42\u4e09\uff1a\u8f93\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"-v")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"--version")," \u8f93\u51fa\u5f53\u524d\u7248\u672c"),(0,r.kt)("p",{parentName:"blockquote"},"\u9700\u6c42\u56db\uff1a\u8f93\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"-h")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"--help")," \u8f93\u51fa\u5e2e\u52a9\u6587\u6863")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},"\u751f\u6210\u63a7\u5236\u53f0 ",(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"LOGO")),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"\u4e0d\u652f\u6301\u4e2d\u6587\uff1a",(0,r.kt)("a",{parentName:"li",href:"http://patorjk.com/software/taag/#p=display&f=Big&t=Furion%20Tools"},"http://patorjk.com/software/taag/#p=display&f=Big&t=Furion%20Tools")),(0,r.kt)("li",{parentName:"ul"},"\u652f\u6301\u6240\u6709\u5b57\u7b26\uff1a",(0,r.kt)("a",{parentName:"li",href:"https://www.qqxiuzi.cn/zh/dianzhenzi-zifu/"},"https://www.qqxiuzi.cn/zh/dianzhenzi-zifu/")))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,10,15-18,26-29,37-40,45}",showLineNumbers:!0,"":!0,"{1,10,15-18,26-29,37-40,45}":!0},'using Furion.Tools.CommandLine;\nusing System;\nusing System.Collections.Generic;\n\nnamespace HelloTools\n{\n class Program\n {\n // \u901a\u8fc7 Cli.Inject() \u5b8c\u6210\u51c6\u5907\u5de5\u4f5c\n static void Main(string[] args) => Cli.Inject();\n\n /// \n /// \u8f93\u51fa Hello \u540d\u5b57\n /// \n [Argument(\'n\', "name", "\u60a8\u7684\u540d\u5b57")]\n static string Name { get; set; }\n // \u5b9a\u4e49\u53c2\u6570\u5904\u7406\u7a0b\u5e8f\uff0c\u5fc5\u987b [\u5c5e\u6027\u540d]+Handler\n static void NameHandler(ArgumentMetadata argument)\n {\n Console.WriteLine($"Hello {Name}");\n }\n\n /// \n /// \u67e5\u770b\u7248\u672c\n /// \n [Argument(\'v\', "version", "\u5de5\u5177\u7248\u672c\u53f7")]\n static bool Version { get; set; }\n // \u5b9a\u4e49\u53c2\u6570\u5904\u7406\u7a0b\u5e8f\uff0c\u5fc5\u987b [\u5c5e\u6027\u540d]+Handler\n static void VersionHandler(ArgumentMetadata argument)\n {\n Console.WriteLine(Cli.GetVersion());\n }\n\n /// \n /// \u67e5\u770b\u5e2e\u52a9\u6587\u6863\n /// \n [Argument(\'h\', "help", "\u67e5\u770b\u5e2e\u52a9\u6587\u6863")]\n static bool Help { get; set; }\n // \u5b9a\u4e49\u53c2\u6570\u5904\u7406\u7a0b\u5e8f\uff0c\u5fc5\u987b [\u5c5e\u6027\u540d]+Handler\n static void HelpHandler(ArgumentMetadata argument)\n {\n Cli.GetHelpText("hello-tools");\n }\n\n // \u6240\u6709\u672a\u5339\u914d\u7684\u53c2\u6570/\u64cd\u4f5c\u7b26\u5904\u7406\u7a0b\u5e8f\uff0c\u56fa\u5b9a NoMatchesHandler \u65b9\u6cd5\u540d\n static void NoMatchesHandler(bool isEmpty, string[] operands, Dictionary noMatches)\n {\n if (isEmpty)\n {\n Console.WriteLine(@"\n _ _ _ _ _______ _\n | | | | | | | |__ __| | |\n | |__| | ___| | | ___ | | ___ ___ | |___\n | __ |/ _ \\ | |/ _ \\ | |/ _ \\ / _ \\| / __|\n | | | | __/ | | (_) | | | (_) | (_) | \\__ \\\n |_| |_|\\___|_|_|\\___/ |_|\\___/ \\___/|_|___/\n\n\n");\n Console.WriteLine($"\u6b22\u8fce\u4f7f\u7528{Cli.GetDescription()}");\n }\n }\n }\n}\n')),(0,r.kt)("admonition",{title:"\u4ee3\u7801\u8bf4\u660e",type:"tip"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Furion")," \u5de5\u5177\u5305\u63d0\u4f9b\u4e86\u975e\u5e38\u65b9\u4fbf\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"Cli.Inject()")," \u65b9\u6cd5\uff0c\u53ef\u4ee5\u5b9e\u73b0\u4e00\u6b21\u6027\u5b8c\u6210\u6240\u6709\u521d\u59cb\u5316\u5de5\u4f5c\uff0c\u53ea\u9700\u8981\u5728 ",(0,r.kt)("inlineCode",{parentName:"li"},"Main")," \u65b9\u6cd5\u8c03\u7528\u5373\u53ef"),(0,r.kt)("li",{parentName:"ul"},"\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"li"},"[Argument(\u77ed\u53c2\u6570\uff0c\u957f\u53c2\u6570\uff0c\u63d0\u793a\u6587\u6863)]")," \u5b9a\u4e49\u6bcf\u4e00\u4e2a\u53c2\u6570\u5c5e\u6027\uff0c\u53c2\u6570\u5fc5\u987b\u662f ",(0,r.kt)("inlineCode",{parentName:"li"},"static")," \u9759\u6001"),(0,r.kt)("li",{parentName:"ul"},"\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"li"},"[\u5c5e\u6027\u540d]Handler")," \u5b9a\u4e49\u6bcf\u4e2a\u53c2\u6570\u5339\u914d\u540e\u7684\u5904\u7406\u7a0b\u5e8f\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"VersionHandler"),"\uff0c\u683c\u5f0f\u4e3a\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"static void \u5c5e\u6027\u540dHandler(ArgumentMetadata argument)")),(0,r.kt)("li",{parentName:"ul"},"\u901a\u8fc7\u56fa\u5b9a\u65b9\u6cd5\u540d ",(0,r.kt)("inlineCode",{parentName:"li"},"NoMatchesHandler")," \u5b9a\u4e49\u672a\u5339\u914d\u7684\u53c2\u6570\u53ca\u64cd\u4f5c\u7b26\uff0c\u8be5\u65b9\u6cd5\u6709\u4e09\u4e2a\u53c2\u6570\uff1a",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"isEmpty"),"\uff1a\u5224\u65ad\u662f\u5426\u6ca1\u6709\u4f20\u9012\u4efb\u4f55\u53c2\u6570\uff0c\u901a\u5e38\u7528\u4e8e\u8f93\u51fa\u4ecb\u7ecd"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"operands"),"\uff1a\u83b7\u53d6\u6240\u6709\u64cd\u4f5c\u7b26\u5217\u8868"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"noMatches"),"\uff1a\u83b7\u53d6\u6240\u6709\u672a\u5339\u914d\u7684\u53c2\u6570\u5b57\u5178"))))),(0,r.kt)("h3",{id:"3735-\u5982\u4f55\u8c03\u8bd5\u5305\u5de5\u5177-"},"37.3.5 \u5982\u4f55\u8c03\u8bd5\u5305\u5de5\u5177 \ud83d\udc4f"),(0,r.kt)("p",null,"\u5305\u7ba1\u7406\u5de5\u5177\u8c03\u8bd5\u6709\u522b\u4e8e\u666e\u901a\u7684\u63a7\u5236\u53f0\uff0c\u4e3b\u8981\u533a\u522b\u662f\u6d4b\u8bd5\u5404\u4e2a\u53c2\u6570\u7684\u4f7f\u7528\uff0c\u4e5f\u5c31\u662f\u5982\u4f55\u4f20\u9012 ",(0,r.kt)("inlineCode",{parentName:"p"},"Main")," \u65b9\u6cd5\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"args")," \u53c2\u6570\u3002\u53ea\u9700\u8981\u4ee5\u4e0b\u4e24\u4e2a\u6b65\u9aa4\u5373\u53ef\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u5728\u9879\u76ee\u6839\u76ee\u5f55\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"Properties")," \u76ee\u5f55"),(0,r.kt)("li",{parentName:"ul"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"li"},"Properties")," \u76ee\u5f55\u4e2d\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"li"},"launchSettings.json")," \u6587\u4ef6\uff0c\u5e76\u9075\u5faa\u4ee5\u4e0b\u89c4\u5219\uff1a")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {3,5}",showLineNumbers:!0,"":!0,"{3,5}":!0},'{\n "profiles": {\n "\u9879\u76ee\u540d\u79f0": {\n "commandName": "Project",\n "commandLineArgs": "\u4f60\u7684\u547d\u4ee4"\n }\n }\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"\u9879\u76ee\u540d\u79f0"),"\uff1a\u5199\u4f60\u7684\u9879\u76ee\u5b9e\u9645\u540d\u79f0\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"HelloTools")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"commandName"),"\uff1a\u56fa\u5b9a\u4e3a ",(0,r.kt)("inlineCode",{parentName:"li"},"Project")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"commandLineArgs"),"\uff1a\u7f16\u5199\u6d4b\u8bd5\u547d\u4ee4\uff0c\u53ea\u9700\u8981\u5199\u53c2\u6570/\u64cd\u4f5c\u7b26\u90e8\u5206\u5373\u53ef\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"li"},"-v"),"\uff0c",(0,r.kt)("inlineCode",{parentName:"li"},"-v -h --Name Furion"))),(0,r.kt)("p",null,"\u5982\uff0c\u6211\u4eec\u9700\u8981\u6d4b\u8bd5 ",(0,r.kt)("inlineCode",{parentName:"p"},"HelloTools")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"-n")," \u53c2\u6570"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {3,5}",showLineNumbers:!0,"":!0,"{3,5}":!0},'{\n "profiles": {\n "HelloTools": {\n "commandName": "Project",\n "commandLineArgs": "-n Furion"\n }\n }\n}\n')),(0,r.kt)("img",{src:(0,o.Z)("img/ts3.png")}),(0,r.kt)("p",null,"\u70b9\u51fb ",(0,r.kt)("inlineCode",{parentName:"p"},"\u8fd0\u884c/\u8c03\u8bd5/F5")," \u542f\u52a8\u8c03\u8bd5"),(0,r.kt)("img",{src:(0,o.Z)("img/ts4.png")}),(0,r.kt)("h3",{id:"3736-\u6d4b\u8bd5\u5404\u4e2a\u53c2\u6570\u60c5\u51b5"},"37.3.6 \u6d4b\u8bd5\u5404\u4e2a\u53c2\u6570\u60c5\u51b5"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\u9700\u6c42\u4e00\uff1a\u8f93\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"hello-tools")," \u6253\u5370\u4ecb\u7ecd\u4fe1\u606f")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {5}",showLineNumbers:!0,"":!0,"{5}":!0},'{\n "profiles": {\n "HelloTools": {\n "commandName": "Project",\n "commandLineArgs": ""\n }\n }\n}\n')),(0,r.kt)("img",{src:(0,o.Z)("img/ts5.png")}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\u9700\u6c42\u4e8c\uff1a\u8f93\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"-n")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"--name")," \u8f93\u51fa ",(0,r.kt)("inlineCode",{parentName:"p"},"Hello \u540d\u5b57"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {5}",showLineNumbers:!0,"":!0,"{5}":!0},'{\n "profiles": {\n "HelloTools": {\n "commandName": "Project",\n "commandLineArgs": "-n Furion"\n }\n }\n}\n')),(0,r.kt)("img",{src:(0,o.Z)("img/ts6.png")}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\u9700\u6c42\u4e09\uff1a\u8f93\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"-v")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"--version")," \u8f93\u51fa\u5f53\u524d\u7248\u672c")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {5}",showLineNumbers:!0,"":!0,"{5}":!0},'{\n "profiles": {\n "HelloTools": {\n "commandName": "Project",\n "commandLineArgs": "--version"\n }\n }\n}\n')),(0,r.kt)("img",{src:(0,o.Z)("img/ts7.png")}),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"\u9700\u6c42\u56db\uff1a\u8f93\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"-h")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"--help")," \u8f93\u51fa\u5e2e\u52a9\u6587\u6863")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers {5}",showLineNumbers:!0,"":!0,"{5}":!0},'{\n "profiles": {\n "HelloTools": {\n "commandName": "Project",\n "commandLineArgs": "-h"\n }\n }\n}\n')),(0,r.kt)("img",{src:(0,o.Z)("img/ts8.png")}),(0,r.kt)("h2",{id:"374-\u6253\u5305\u672c\u673a\u6d4b\u8bd5"},"37.4 \u6253\u5305\uff08\u672c\u673a\uff09\u6d4b\u8bd5"),(0,r.kt)("p",null,"\u521a\u521a\u6211\u4eec\u5df2\u7ecf\u5b66\u4f1a\u8c03\u8bd5\u5305\u5de5\u5177\u4e86\uff0c\u4f46\u662f\u8fd8\u672a\u505a\u5230\u7c7b\u4f3c ",(0,r.kt)("inlineCode",{parentName:"p"},"npm")," \u5305\u4e00\u6837\uff0c\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"cmd/powershell")," \u4e2d\u5b89\u88c5\u4e4b\u540e\u53ef\u5728\u547d\u4ee4\u884c\u5168\u5c40\u6d4b\u8bd5\uff0c\u4e0b\u9762\u5c06\u6559\u5927\u5bb6\u5982\u4f55\u5b9e\u73b0 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u5168\u5c40\u5b89\u88c5")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"\u672c\u5730\u5b89\u88c5"),"\u3002"),(0,r.kt)("h3",{id:"3741-\u5168\u5c40\u6253\u5305\u5b89\u88c5"},"37.4.1 \u5168\u5c40\u6253\u5305\u5b89\u88c5"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u5168\u5c40\u6253\u5305\u5b89\u88c5\u5c31\u662f\u914d\u7f6e\u5728\u7cfb\u7edf\u73af\u5883\u53d8\u91cf\u4e2d\uff0c\u5728\u4efb\u4f55\u5730\u65b9\u90fd\u53ef\u4ee5\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"HelloTools")," \u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u6253\u5f00 ",(0,r.kt)("inlineCode",{parentName:"p"},"cmd/powershell"),"\uff08",(0,r.kt)("strong",{parentName:"p"},"\u5c3d\u91cf\u4f7f\u7528\u7ba1\u7406\u5458\u5de5\u5177"),"\uff09\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a"),(0,r.kt)("h4",{id:"-\u5b89\u88c5\u5168\u5c40\u5305"},"\u2714 \u5b89\u88c5\u5168\u5c40\u5305"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet tool install --global --add-source ./nupkg HelloTools\n")),(0,r.kt)("p",null,"\u5176\u4e2d ",(0,r.kt)("inlineCode",{parentName:"p"},"HelloTools")," \u5c31\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"\u9879\u76ee\u540d\u79f0"),"\u3002"),(0,r.kt)("img",{src:(0,o.Z)("img/ts9.png")}),(0,r.kt)("p",null,"\u4e4b\u540e\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u4e4b\u524d ",(0,r.kt)("inlineCode",{parentName:"p"},"HelloTools.csproj")," \u4e2d\u914d\u7f6e\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"hello-tools")," \u4f7f\u7528\u4e86\u3002"),(0,r.kt)("h4",{id:"-\u6d4b\u8bd5\u5168\u5c40\u5305"},"\u2714 \u6d4b\u8bd5\u5168\u5c40\u5305"),(0,r.kt)("img",{src:(0,o.Z)("img/ts10.png")}),(0,r.kt)("h4",{id:"-\u66f4\u65b0\u5168\u5c40\u5305"},"\u2714 \u66f4\u65b0\u5168\u5c40\u5305"),(0,r.kt)("p",null,"\u5982\u679c\u6e90\u7801\u53d1\u751f\u6539\u53d8\uff0c\u53ea\u9700\u8981\u7f16\u8bd1\u9879\u76ee\u540e\u91cd\u65b0\u66f4\u65b0\u5305\u5de5\u5177\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet tool update --global --add-source ./nupkg HelloTools\n")),(0,r.kt)("h4",{id:"-\u5378\u8f7d\u5168\u5c40\u5305"},"\u2714 \u5378\u8f7d\u5168\u5c40\u5305"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet tool uninstall --global HelloTools\n")),(0,r.kt)("p",null,"\u60f3\u4e86\u89e3\u66f4\u591a\u5168\u5c40\u6253\u5305\u5b89\u88c5\u77e5\u8bc6\u67e5\u9605\u5b98\u65b9\u6587\u6863\u5373\u53ef\uff1a",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/dotnet/core/tools/global-tools-how-to-use"},"https://docs.microsoft.com/zh-cn/dotnet/core/tools/global-tools-how-to-use")),(0,r.kt)("h3",{id:"3742-\u672c\u5730\u6253\u5305\u5b89\u88c5"},"37.4.2 \u672c\u5730\u6253\u5305\u5b89\u88c5"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u672c\u5730\u6253\u5305\u5b89\u88c5\u5c31\u662f\u53ea\u6709\u5728\u9879\u76ee\u6240\u5728\u76ee\u5f55\u53ca\u5b50\u5b59\u76ee\u5f55\u65b9\u53ef\u4f7f\u7528\u3002")),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"HelloTools")," \u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u6253\u5f00 ",(0,r.kt)("inlineCode",{parentName:"p"},"cmd/powershell")," \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a"),(0,r.kt)("h4",{id:"-\u521b\u5efa\u672c\u5730\u6e05\u5355\u6587\u4ef6"},"\u2714 \u521b\u5efa\u672c\u5730\u6e05\u5355\u6587\u4ef6"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new tool-manifest\n")),(0,r.kt)("p",null,"\u6267\u884c\u8be5\u547d\u4ee4\u540e\u4f1a\u81ea\u52a8\u521b\u5efa ",(0,r.kt)("inlineCode",{parentName:"p"},".config")," \u6587\u4ef6\u5939\u5e76\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"dotnet-tools.json")," \u6587\u4ef6\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json",metastring:"showLineNumbers",showLineNumbers:!0},'{\n "version": 1,\n "isRoot": true,\n "tools": {}\n}\n')),(0,r.kt)("admonition",{title:"\u6ce8\u610f\u4e8b\u9879",type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"\u901a\u5e38\u8be5\u6587\u4ef6\u5185\u5bb9\u4e0d\u9700\u8981\u624b\u52a8\u66f4\u6539\u3002")),(0,r.kt)("h4",{id:"-\u5b89\u88c5\u672c\u5730\u5305"},"\u2714 \u5b89\u88c5\u672c\u5730\u5305"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet tool install --add-source ./nupkg HelloTools\n")),(0,r.kt)("img",{src:(0,o.Z)("img/ts11.png")}),(0,r.kt)("h4",{id:"-\u6d4b\u8bd5\u672c\u5730\u5305"},"\u2714 \u6d4b\u8bd5\u672c\u5730\u5305"),(0,r.kt)("p",null,"\u672c\u5730\u5305\u6d4b\u8bd5\u548c\u5168\u5c40\u5305\u4e0d\u4e00\u6837\u7684\u662f\u672c\u5730\u5305\u662f\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"dotnet \u5173\u952e\u5b57 \u53c2\u6570")," \u6d4b\u8bd5\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet hello-tools -n Furion\n")),(0,r.kt)("img",{src:(0,o.Z)("img/ts12.png")}),(0,r.kt)("h4",{id:"-\u66f4\u65b0\u672c\u5730\u5305"},"\u2714 \u66f4\u65b0\u672c\u5730\u5305"),(0,r.kt)("p",null,"\u5982\u679c\u6e90\u7801\u53d1\u751f\u6539\u53d8\uff0c\u53ea\u9700\u8981\u7f16\u8bd1\u9879\u76ee\u540e\u91cd\u65b0\u66f4\u65b0\u5305\u5de5\u5177\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet tool update --add-source ./nupkg HelloTools\n")),(0,r.kt)("h4",{id:"-\u5378\u8f7d\u672c\u5730\u5305"},"\u2714 \u5378\u8f7d\u672c\u5730\u5305"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet tool uninstall HelloTools\n")),(0,r.kt)("p",null,"\u60f3\u4e86\u89e3\u66f4\u591a\u672c\u5730\u6253\u5305\u5b89\u88c5\u77e5\u8bc6\u67e5\u9605\u5b98\u65b9\u6587\u6863\u5373\u53ef\uff1a",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/dotnet/core/tools/local-tools-how-to-use"},"https://docs.microsoft.com/zh-cn/dotnet/core/tools/local-tools-how-to-use")),(0,r.kt)("h2",{id:"375-\u53d1\u5e03\u5230-nuget-\u5e73\u53f0-"},"37.5 \u53d1\u5e03\u5230 ",(0,r.kt)("inlineCode",{parentName:"h2"},"Nuget")," \u5e73\u53f0 \ud83d\udc4f"),(0,r.kt)("p",null,"\u53d1\u5e03\u5230 ",(0,r.kt)("inlineCode",{parentName:"p"},"Nuget")," \u5e73\u53f0\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u4e24\u4e2a\u6b65\u9aa4\u5373\u53ef\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u5207\u6362\u9879\u76ee ",(0,r.kt)("inlineCode",{parentName:"li"},"Debug")," \u6a21\u5f0f\u5230 ",(0,r.kt)("inlineCode",{parentName:"li"},"Release")," \u5e76\u91cd\u65b0\u7f16\u8bd1\u9879\u76ee"),(0,r.kt)("li",{parentName:"ul"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"li"},"Nuget")," \u5e73\u53f0\u4e0a\u4f20 ",(0,r.kt)("inlineCode",{parentName:"li"},"nupkg")," \u6587\u4ef6\u5939\u5bf9\u5e94 ",(0,r.kt)("inlineCode",{parentName:"li"},"\u9879\u76ee\u540d\u79f0.\u7248\u672c\u53f7.nupkg")," \u6587\u4ef6\u5373\u53ef\uff1a",(0,r.kt)("a",{parentName:"li",href:"https://www.nuget.org/packages/manage/upload"},"https://www.nuget.org/packages/manage/upload"))),(0,r.kt)("admonition",{title:"\u4e0a\u4f20 Nuget \u5e73\u53f0\u8865\u9f50\u4fe1\u606f",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u5efa\u8bae\u4e0a\u4f20\u5230 ",(0,r.kt)("inlineCode",{parentName:"p"},"Nuget")," \u5e73\u53f0\u7f16\u8f91 ",(0,r.kt)("inlineCode",{parentName:"p"},".csproj")," \u6587\u4ef6\u8865\u9f50\u4ee5\u4e0b\u4fe1\u606f\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {13-21}",showLineNumbers:!0,"":!0,"{13-21}":!0},'\n\n \n Exe\n net5.0\n 0.0.1\n \u7b2c\u4e00\u4e2a dotnet tools \u5de5\u5177\n hello-tools\n true\n true\n ./nupkg\n\n \u767e\u5c0f\u50e7\n Baiqian Co.,Ltd.\n Furion\n \xa9 2020-2021 \u767e\u5c0f\u50e7, Baiqian Co.,Ltd.\n https://gitee.com/dotnetchina/Furion\n Gitee\n true\n MIT\n https://furion.icu\n \n\n \n \n \n\n\n'))),(0,r.kt)("img",{src:(0,o.Z)("img/ts13.png")}),(0,r.kt)("img",{src:(0,o.Z)("img/ts14.png")}),(0,r.kt)("p",null,"\u53d1\u5e03\u5230 ",(0,r.kt)("inlineCode",{parentName:"p"},"Nuget")," \u5e73\u53f0\u540e\uff0c\u522b\u4eba\u5c31\u53ef\u4ee5\u901a\u8fc7\uff1a"),(0,r.kt)("h4",{id:"-\u5b89\u88c5-nuget-\u5305\u5230\u672c\u5730"},"\u2714 \u5b89\u88c5 Nuget \u5305\u5230\u672c\u5730"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet tool install --global \u9879\u76ee\u540d --version \u7248\u672c\u53f7\n")),(0,r.kt)("h2",{id:"376-cli-\u9759\u6001\u7c7b\u8bf4\u660e"},"37.6 ",(0,r.kt)("inlineCode",{parentName:"h2"},"Cli")," \u9759\u6001\u7c7b\u8bf4\u660e"),(0,r.kt)("p",null,"\u4e3a\u4e86\u7b80\u5316\u5305\u5de5\u5177\u7684\u5f00\u53d1\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Tools.CommandLine")," \u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Cli")," \u9759\u6001\u7c7b\u63d0\u4f9b\u4e86\u5f88\u591a\u65b9\u4fbf\u7684\u9759\u6001\u65b9\u6cd5\uff1a"),(0,r.kt)("h3",{id:"3761-\u6d88\u606f\u7c7b"},"37.6.1 \u6d88\u606f\u7c7b"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u8f93\u51fa\u7a7a\u884c\nCli.EmptyLine();\n\n// \u8f93\u51fa\u4e00\u884c\nCli.WriteLine("\u6d88\u606f");\nCli.WriteLine("\u6d88\u606f", ConsoleColor.Blue); // \u5b57\u4f53\u989c\u8272\nCli.WriteLine("\u6d88\u606f", ConsoleColor.Blue, ConsoleColor.White); // \u80cc\u666f\u989c\u8272\nCli.WriteLine("\u6d88\u606f", ConsoleColor.Blue, ConsoleColor.White, fillLine: true); // \u586b\u5145\u6574\u884c\n\n// \u8f93\u51fa\uff08\u4e0d\u6362\u884c\uff09\nCli.Write("\u6d88\u606f");\nCli.Write("\u6d88\u606f", ConsoleColor.Blue); // \u5b57\u4f53\u989c\u8272\nCli.Write("\u6d88\u606f", ConsoleColor.Blue, ConsoleColor.White); // \u80cc\u666f\u989c\u8272\nCli.Write("\u6d88\u606f", ConsoleColor.Blue, ConsoleColor.White, fillLine: true); // \u586b\u5145\u6574\u884c\n\n// \u8f93\u51fa\u63d0\u793a\u6d88\u606f\nCli.Success("\u6210\u529f");\nCli.Warn("\u8b66\u544a");\nCli.Error("\u9519\u8bef");\nCli.Tip("\u63d0\u793a");\n\n// \u6536\u96c6\u7528\u6237\u8f93\u5165\uff08\u652f\u6301\u591a\u884c\uff09\nvar inputs = Cli.ReadInput(); // \u8f93\u5165 exit \u9000\u51fa\u8f93\u5165\n\n// \u9009\u62e9\u6d88\u606f\nvar selectId = Cli.ReadOptions("\u8bf7\u9009\u62e9\u559c\u6b22\u7684\u6c34\u679c\uff1a", new []{ "\u897f\u74dc", "\u82f9\u679c", "\u51e4\u68a8"}); // selectId \u4ece 1 \u5f00\u59cb\n')),(0,r.kt)("h3",{id:"3762-\u5de5\u5177\u7c7b"},"37.6.2 \u5de5\u5177\u7c7b"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u5b8c\u6210\u53c2\u6570\u586b\u5145\u5c5e\u6027\u521d\u59cb\u5316\u64cd\u4f5c\nCli.Inject();\n\n// \u83b7\u53d6\u53c2\u6570\u6240\u6709\u4fe1\u606f\nvar arguments = Cli.ArgumentMetadatas;\n\n// \u624b\u52a8\u68c0\u67e5\u53c2\u6570\u662f\u5426\u5339\u914d\nCli.Check(nameof(\u5c5e\u6027\u540d), argument => {\n // \u5982\u679c\u7528\u6237\u8f93\u5165\u8be5\u53c2\u6570\n if(argument?.IsTransmission == true){\n Cli.WriteLine(argument.Value);\n }\n else {\n Cli.Error("\u7528\u6237\u6ca1\u6709\u8f93\u5165");\n }\n});\n\n// \u53ea\u6709\u53c2\u6570\u5339\u914d\u624d\u8fdb\u5165\nCli.CheckMatch(nameof(\u5c5e\u6027\u540d), argument => {\n Cli.WriteLine(argument.Value);\n})\n\n// \u65e0\u5c5e\u6027\u68c0\u67e5\nCli.Check(new[] {"v", "version"}, (isMatch, value) => {\n // \u5982\u679c\u7528\u6237\u8f93\u5165\u8be5\u53c2\u6570\n if(isMatch){\n Cli.WriteLine(value);\n }\n else {\n Cli.Error("\u7528\u6237\u6ca1\u6709\u8f93\u5165");\n }\n});\n\n// \u65e0\u5c5e\u6027\u5339\u914d\nCli.CheckMatch(new[] {"v", "version"}, value => {\n Cli.WriteLine(value);\n});\n\n// \u6240\u6709\u672a\u5339\u914d\u7684\u53c2\u6570\u3001\u64cd\u4f5c\u7b26\nCli.CheckNoMatches((isEmpty, operands, noMatches) => {\n if (isEmpty) Cli.WriteLine($"\u6b22\u8fce\u4f7f\u7528 {Cli.GetDescription()}");\n if (operands.Length > 0) Cli.Error($"\u672a\u627e\u5230\u8be5\u64cd\u4f5c\u7b26\uff1a{string.Join(",", operands)}");\n if (noMatches.Count > 0) Cli.Error($"\u672a\u627e\u5230\u8be5\u53c2\u6570\uff1a{string.Join(",", noMatches.Keys)}");\n});\n\n// \u89e3\u6790 Main \u65b9\u6cd5\u53c2\u6570\u4fe1\u606f\nvar argumentModel = Cli.Parse();\n\n// \u624b\u52a8\u89e3\u6790\u547d\u4ee4\u5b57\u7b26\u4e32\nvar argumentModel = Cli.Parse("-abc foo --hello world");\n\n// \u7ec8\u6b62\u8f93\u51fa/\u7ed3\u675f\u8f93\u51fa\nCli.Exit();\n')),(0,r.kt)("h3",{id:"3762-\u4fe1\u606f\u7c7b"},"37.6.2 \u4fe1\u606f\u7c7b"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u83b7\u53d6\u5f53\u524d\u5de5\u5177\u5305\u7248\u672c\u53f7\nvar version = Cli.GetVersion();\n\n// \u83b7\u53d6\u5f53\u524d\u5de5\u5177\u5305\u63cf\u8ff0\nvar description = Cli.GetDescription();\n")),(0,r.kt)("h3",{id:"3763-\u5176\u4ed6\u7c7b"},"37.6.3 \u5176\u4ed6\u7c7b"),(0,r.kt)("p",null,"\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"Environment")," \u83b7\u53d6\u5f53\u524d\u73af\u5883\u66f4\u591a\u4fe1\u606f\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// \u5f53\u524d\u6267\u884c\u547d\u4ee4\u76ee\u5f55\nvar currentDirectory = Environment.CurrentDirectory;\n\n// \u83b7\u53d6\u673a\u5668\u540d\u79f0\nvar machineName = Environment.MachineName;\n\n// \u7b49\u7b49\u3002\u3002\u3002\u3002\u3002\n")),(0,r.kt)("h2",{id:"377-\u53cd\u9988\u4e0e\u5efa\u8bae"},"37.7 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,r.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}N.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/afaad682.c1df8629.js b/handbook/build/assets/js/afaad682.c1df8629.js new file mode 100644 index 00000000000..7e21e75c2c9 --- /dev/null +++ b/handbook/build/assets/js/afaad682.c1df8629.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7194],{3905:function(e,n,t){t.d(n,{Zo:function(){return s},kt:function(){return f}});var r=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var c=r.createContext({}),u=function(e){var n=r.useContext(c),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},s=function(e){var n=u(e.components);return r.createElement(c.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),m=u(t),f=o,g=m["".concat(c,".").concat(f)]||m[f]||p[f]||i;return t?r.createElement(g,a(a({ref:n},s),{},{components:t})):r.createElement(g,a({ref:n},s))}));function f(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=m;var l={};for(var c in n)hasOwnProperty.call(n,c)&&(l[c]=n[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var u=2;u();\n Console.WriteLine(helloService.SayHello());\n\n Console.WriteLine("=============");\n\n var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();\n Console.WriteLine(baidu);\n }\n }\n\n public interface IHelloService\n {\n string SayHello();\n }\n public class HelloService : IHelloService, ITransient\n {\n public string SayHello()\n {\n return "Hello Furion.";\n }\n }\n}\n')),(0,i.kt)("p",null,"\u4ee5\u4e0a\u4ee3\u7801\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"var services = Inject.Create();")," \u521b\u5efa\u4e00\u4e2a\u670d\u52a1\u96c6\u5408\uff0c\u6700\u540e\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"services.Build()")," \u5373\u53ef\u5b8c\u6210\u521d\u59cb\u5316\u3002"))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/b0352e4c.01d4ae3c.js b/handbook/build/assets/js/b0352e4c.01d4ae3c.js new file mode 100644 index 00000000000..d93a3803c94 --- /dev/null +++ b/handbook/build/assets/js/b0352e4c.01d4ae3c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[1912],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return f}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),l=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},u=function(e){var t=l(e.components);return r.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),d=l(n),f=o,y=d["".concat(p,".").concat(f)]||d[f]||s[f]||i;return n?r.createElement(y,c(c({ref:t},u),{},{components:n})):r.createElement(y,c({ref:t},u))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,c=new Array(i);c[0]=d;var a={};for(var p in t)hasOwnProperty.call(t,p)&&(a[p]=t[p]);a.originalType=e,a.mdxType="string"==typeof e?e:o,c[1]=a;for(var l=2;lenable`\uff0c\u6ce8\u610f\u662f\u5728 `` \u4e2d\u6dfb\u52a0\uff0c\u901a\u5e38\u548c `` \u540c\u7236\u540c\u7ea7\\r\\n\\r\\n### \u57fa\u672c\u4f7f\u7528\\r\\n\\r\\n\u914d\u7f6e\u4e4b\u540e\uff0c\u73b0\u5728\u5c31\u53ef\u4ee5\u628a\u5e38\u7528\u7684 `using` \u653e\u5230 `GlobalUsings.cs` \u4e2d\u4e86\uff0c\u5199\u6cd5\u5982\u4e0b\uff1a\\r\\n\\r\\n```cs showLineNumbers title=\\"Furion \u63a8\u8350\u7684\u5168\u5c40\u547d\u540d\u7a7a\u95f4\\"\\r\\nglobal using Furion;\\r\\nglobal using Furion.DatabaseAccessor;\\r\\nglobal using Furion.DataEncryption;\\r\\nglobal using Furion.DataValidation;\\r\\nglobal using Furion.DependencyInjection;\\r\\nglobal using Furion.DynamicApiController;\\r\\nglobal using Furion.Extensions;\\r\\nglobal using Furion.FriendlyException;\\r\\nglobal using Mapster;\\r\\nglobal using Microsoft.AspNetCore.Authorization;\\r\\nglobal using Microsoft.AspNetCore.Http;\\r\\nglobal using Microsoft.AspNetCore.Mvc;\\r\\nglobal using Microsoft.CodeAnalysis;\\r\\nglobal using Microsoft.EntityFrameworkCore;\\r\\nglobal using System.ComponentModel.DataAnnotations;\\r\\n```\\r\\n\\r\\n**\u6ce8\u610f\u5fc5\u987b\u4ee5 `global` \u5f00\u5934\uff01**\\r\\n\\r\\n:::tip \u5c0f\u77e5\u8bc6\\r\\n\\r\\n\u4e00\u822c\u63a8\u8350\u628a\u5b9e\u4f53\u7c7b\u7684\u547d\u540d\u7a7a\u95f4\u4e5f\u653e\u8fdb\u53bb\uff0c\u56e0\u4e3a\u4ed3\u50a8 `IRepository` \u4f7f\u7528\u7684\u9891\u7387\u975e\u5e38\u9ad8\u3002\\r\\n\\r\\n\u53e6\u5916\u63a8\u8350\u5927\u5bb6\u5728 `Visual Studio` \u4e2d\u5b89\u88c5 `CodeMaid` \u63d2\u4ef6\u54e6\uff0c\u81ea\u52a8\u6e05\u7406\u89e3\u51b3\u65b9\u6848\u6240\u6709\u65e0\u7528\u7684 `using`\uff0c\u7ed3\u5408 `GlobalUsings.cs` \u975e\u5e38\u68d2\uff01\\r\\n\\r\\n:::\\r\\n\\r\\n:::important \u4e2a\u522b\u60c5\u51b5\\r\\n\\r\\n\u53ef\u80fd\u7531\u4e8e `Visual Studio` \u7248\u672c\u7684\u95ee\u9898\uff0c\u5bfc\u81f4 `GlobalUsings.cs` \u5b9a\u4e49\u51fa\u9519\uff0c\u8fd9\u65f6\u5019\u9700\u8981\u5728 `using` \u540e\u9762\u52a0 `global::`\uff0c\u5982\uff1a\\r\\n\\r\\n```cs showLineNumbers\\r\\nglobal using global::Furion;\\r\\n```\\r\\n\\r\\n:::\\r\\n\\r\\n\u63a5\u4e0b\u6765\u5728\u4ee3\u7801\u4e2d\u4f7f\u7528\uff1a\\r\\n\\r\\n```cs showLineNumbers {1}\\r\\n// \u65e0\u9700 using Furion \u7684\u547d\u540d\u7a7a\u95f4\u4e86\u54e6\uff0c\u6e05\u723d\u4e86\u4e0d\u5c11\\r\\n\\r\\nnamespace Your.Application;\\r\\n\\r\\npublic class DefaultAppService : IDynamicApiController\\r\\n{\\r\\n private readonly IRepository _boardCardRepository;\\r\\n private readonly IRepository _boardGroupRepository;\\r\\n private readonly IRepository _boardCardAttachmentRepository;\\r\\n private readonly IRepository _boardCardUserRepository;\\r\\n}\\r\\n\\r\\n// ....\\r\\n```\\r\\n\\r\\n\\r\\n\\r\\n### \u9ed8\u8ba4\u5168\u5c40 `using`\\r\\n\\r\\n**\u5b9e\u9645\u4e0a\u5fae\u8f6f\u5df2\u7ecf\u81ea\u52a8\u628a\u4e00\u4e9b\u5e38\u7528\u7684 `using` \u5728\u7f16\u8bd1\u540e\u7684\u4ee3\u7801\u4e2d\u81ea\u52a8\u8865\u4e0a\u4e86**\uff0c\u8def\u5f84\u5728 `\u9879\u76ee/obj/Debug/net6.0/\u9879\u76ee.GlobalUsings.cs` \u6587\u4ef6\u4e2d\uff0c\u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff1a\\r\\n\\r\\n```cs showLineNumbers\\r\\n// \\r\\nglobal using global::System;\\r\\nglobal using global::System.Collections.Generic;\\r\\nglobal using global::System.IO;\\r\\nglobal using global::System.Linq;\\r\\nglobal using global::System.Net.Http;\\r\\nglobal using global::System.Threading;\\r\\nglobal using global::System.Threading.Tasks;\\r\\n```\\r\\n\\r\\n**\u4e5f\u5c31\u662f\u4ee5\u4e0a\u7684 `using` \u65e0\u9700\u5199\u5728\u4f60\u521b\u5efa\u7684 `GlobalUsings.cs` \u4e2d\u4e86\uff0c\u5fae\u8f6f\u4f1a\u5728\u7f16\u8bd1\u65f6\u81ea\u52a8\u5408\u5e76\u3002**"},{"id":"net6-preview7","metadata":{"permalink":"/blog/net6-preview7","editUrl":"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/blog/2021-08-11-net6-preview7.mdx","source":"@site/blog/2021-08-11-net6-preview7.mdx","title":"6. .NET 6 Preview 7 \u5c1d\u9c9c","description":"","date":"2021-08-11T00:00:00.000Z","formattedDate":"August 11, 2021","tags":[{"label":"furion","permalink":"/blog/tags/furion"},{"label":"furos","permalink":"/blog/tags/furos"},{"label":".net","permalink":"/blog/tags/net"},{"label":".netcore","permalink":"/blog/tags/netcore"},{"label":".net5","permalink":"/blog/tags/net-5"},{"label":".net6","permalink":"/blog/tags/net-6"}],"readingTime":1.485,"hasTruncateMarker":false,"authors":[{"name":"dotNET China","title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","url":"https://www.chinadot.net","imageURL":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png"}],"frontMatter":{"slug":"net6-preview7","title":"6. .NET 6 Preview 7 \u5c1d\u9c9c","author":"dotNET China","author_title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","author_url":"https://www.chinadot.net","author_image_url":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png","tags":["furion","furos",".net",".netcore",".net5",".net6"]},"prevItem":{"title":"7. GlobalUsings \u7684\u4f7f\u7528","permalink":"/blog/global-usings"},"nextItem":{"title":"5. \u5728\u63a7\u5236\u53f0\u4e2d\u4f7f\u7528","permalink":"/blog/console"}},"content":"import useBaseUrl from \\"@docusaurus/useBaseUrl\\";\\r\\n\\r\\n**2021 \u5e74 08 \u6708 11 \u65e5\uff0c\u5fae\u8f6f\u53d1\u5e03\u4e86 `.NET 6 Preview 7` \u7248\u672c\uff0c`Furion` \u5728\u5f53\u5929\u7b2c\u4e00\u65f6\u95f4\u9002\u914d\u4e86\u8be5\u7248\u672c\uff0c\u5e76\u53d1\u5e03 `Furion v3.0.0-rc.2` \u7248\u672c\u3002**\\r\\n\\r\\n[Furion .NET 6 Preview 7 \u6e90\u7801\u5730\u5740](https://gitee.com/dotnetchina/Furion/tree/3.0.0-rc.2/)\\r\\n\\r\\n## \u5b89\u88c5 `.NET 6 Preview 6 SDK`\\r\\n\\r\\n\u5c1d\u9c9c\u4e4b\u524d\uff0c\u9996\u5148\u5148\u5b89\u88c5 `.NET 6 Preview 7 SDK`\uff0c\u4e0b\u8f7d\u5730\u5740\uff1a[https://dotnet.microsoft.com/download/dotnet/6.0](https://dotnet.microsoft.com/download/dotnet/6.0)\\r\\n\\r\\n\u4e0b\u8f7d\u5bf9\u5e94\u7cfb\u7edf\u548c\u5904\u7406\u5668\u7248\u672c\u5373\u53ef\u3002\\r\\n\\r\\n## \u65e7\u9879\u76ee\u5347\u7ea7\\r\\n\\r\\n\u7f16\u8f91\u6240\u6709 `.csproj` \u9879\u76ee\uff0c\u4fee\u6539 `net5.0` \u4e3a `net6.0`\u3002\\r\\n\\r\\n\u540c\u65f6\u5347\u7ea7\u6240\u6709 `Microsoft` \u548c `Furion` \u5305\u4e3a\u6700\u65b0\u7248\u672c\uff0c`Furion` \u6700\u65b0\u7248\u672c\u4e3a\uff1a`v3.0.0-rc.1`\u3002\\r\\n\\r\\n## \u65b0\u9879\u76ee\u4f7f\u7528\\r\\n\\r\\n### \u5347\u7ea7 `Visual Studio 2019`\\r\\n\\r\\n\u76ee\u524d `.NET 6 Preview 7` \u652f\u6301\u4f7f\u7528 `Visual Studio 2019 Preview 16.11.0 Preview 4.0` \u7248\u672c\uff0c**\u6ce8\u610f\u662f `Preview` \u6700\u65b0\u7248\u672c**\u3002\u4e0b\u8f7d\u5730\u5740\uff1a[https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16](https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16)\\r\\n\\r\\n\u5df2\u7ecf\u5b89\u88c5\u4e86 `Visual Studio 2019 Preview` \u7248\u672c\u7684\u670b\u53cb\u76f4\u63a5\u5347\u7ea7\u5230\u6700\u65b0\u7248\u5373\u53ef\u3002\\r\\n\\r\\n:::note \u7279\u522b\u8bf4\u660e\\r\\n\\r\\n\u5982\u679c\u4f7f\u7528 `Visual Studio Code` \u5f00\u53d1\uff0c\u53ef\u5ffd\u7565\u6b64\u9009\u9879\u3002\\r\\n\\r\\n:::\\r\\n\\r\\n### \u7b2c\u4e00\u4e2a\u4f8b\u5b50\\r\\n\\r\\n`Furion v3.0.0-rc.2` \u76ee\u524d\u63d0\u4f9b\u4e86\u6240\u6709\u7c7b\u578b\u7684\u811a\u624b\u67b6\uff0c\u7248\u672c\u53f7\u7edf\u4e00 `3.0.0-rc.2`\u3002\\r\\n\\r\\n\u5b89\u88c5\u811a\u624b\u67b6\uff0c\u6253\u5f00 `CMD/Powershell` \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a\\r\\n\\r\\n```bash showLineNumbers \\r\\ndotnet new --install Furion.Template.Api::3.0.0-rc.2\\r\\n```\\r\\n\\r\\n\u521b\u5efa\u9879\u76ee\\r\\n\\r\\n```bash showLineNumbers \\r\\ndotnet new furionapi -n FurionNET6\\r\\n```\\r\\n\\r\\n### \u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee\\r\\n\\r\\n\u6253\u5f00\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u5373\u53ef\u3002"},{"id":"console","metadata":{"permalink":"/blog/console","editUrl":"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/blog/2021-07-24-console.mdx","source":"@site/blog/2021-07-24-console.mdx","title":"5. \u5728\u63a7\u5236\u53f0\u4e2d\u4f7f\u7528","description":"","date":"2021-07-24T00:00:00.000Z","formattedDate":"July 24, 2021","tags":[{"label":"furion","permalink":"/blog/tags/furion"},{"label":"furos","permalink":"/blog/tags/furos"},{"label":".net","permalink":"/blog/tags/net"},{"label":".netcore","permalink":"/blog/tags/netcore"},{"label":".net5","permalink":"/blog/tags/net-5"},{"label":".net6","permalink":"/blog/tags/net-6"}],"readingTime":0.84,"hasTruncateMarker":false,"authors":[{"name":"dotNET China","title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","url":"https://www.chinadot.net","imageURL":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png"}],"frontMatter":{"slug":"console","title":"5. \u5728\u63a7\u5236\u53f0\u4e2d\u4f7f\u7528","author":"dotNET China","author_title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","author_url":"https://www.chinadot.net","author_image_url":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png","tags":["furion","furos",".net",".netcore",".net5",".net6"]},"prevItem":{"title":"6. .NET 6 Preview 7 \u5c1d\u9c9c","permalink":"/blog/net6-preview7"},"nextItem":{"title":"4. .NET 6 Preview 6 \u5c1d\u9c9c","permalink":"/blog/net6-preview6"}},"content":"import useBaseUrl from \\"@docusaurus/useBaseUrl\\";\\r\\n\\r\\n`Furion` \u4ece `v2.15.3+` \u7248\u672c\u5f00\u59cb\uff0c\u652f\u6301\u5168\u5e73\u53f0\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\uff0c\u5305\u62ec `Web`\uff0c`\u63a7\u5236\u53f0`\uff0c`WinForm`\uff0c`WPF`\uff0c`Xamarin/MAUI` \u7b49\u3002\\r\\n\\r\\n\u5728\u63a7\u5236\u53f0\u4e2d\u4f7f\u7528\u793a\u4f8b\uff1a\\r\\n\\r\\n```cs showLineNumbers \\r\\nusing Furion;\\r\\nusing Furion.DependencyInjection;\\r\\nusing Furion.RemoteRequest.Extensions;\\r\\nusing Microsoft.Extensions.DependencyInjection;\\r\\nusing System;\\r\\n\\r\\nnamespace ConsoleApp1\\r\\n{\\r\\n class Program\\r\\n {\\r\\n static void Main(string[] args)\\r\\n {\\r\\n // \u521b\u5efa\u4e00\u4e2a\u670d\u52a1\u5bb9\u5668\\r\\n var services = Inject.Create();\\r\\n // \u6ce8\u518c\u670d\u52a1\\r\\n services.AddRemoteRequest();\\r\\n // \u6240\u6709\u670d\u52a1\u6ce8\u518c\u5b8c\u6bd5\u540e\u8c03\u7528 Build() \u6784\u5efa\\r\\n services.Build();\\r\\n\\r\\n // \u4f7f\u7528\\r\\n var helloService = App.GetService();\\r\\n Console.WriteLine(helloService.SayHello());\\r\\n\\r\\n Console.WriteLine(\\"=============\\");\\r\\n\\r\\n var baidu = \\"https://www.baidu.com\\".GetAsStringAsync().GetAwaiter().GetResult();\\r\\n Console.WriteLine(baidu);\\r\\n }\\r\\n }\\r\\n\\r\\n public interface IHelloService\\r\\n {\\r\\n string SayHello();\\r\\n }\\r\\n public class HelloService : IHelloService, ITransient\\r\\n {\\r\\n public string SayHello()\\r\\n {\\r\\n return \\"Hello Furion.\\";\\r\\n }\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n\u4ee5\u4e0a\u4ee3\u7801\u901a\u8fc7 `var services = Inject.Create();` \u521b\u5efa\u4e00\u4e2a\u670d\u52a1\u96c6\u5408\uff0c\u6700\u540e\u901a\u8fc7 `services.Build()` \u5373\u53ef\u5b8c\u6210\u521d\u59cb\u5316\u3002"},{"id":"net6-preview6","metadata":{"permalink":"/blog/net6-preview6","editUrl":"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/blog/2021-07-15-net6-preview6.mdx","source":"@site/blog/2021-07-15-net6-preview6.mdx","title":"4. .NET 6 Preview 6 \u5c1d\u9c9c","description":"","date":"2021-07-15T00:00:00.000Z","formattedDate":"July 15, 2021","tags":[{"label":"furion","permalink":"/blog/tags/furion"},{"label":"furos","permalink":"/blog/tags/furos"},{"label":".net","permalink":"/blog/tags/net"},{"label":".netcore","permalink":"/blog/tags/netcore"},{"label":".net5","permalink":"/blog/tags/net-5"},{"label":".net6","permalink":"/blog/tags/net-6"}],"readingTime":1.485,"hasTruncateMarker":false,"authors":[{"name":"dotNET China","title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","url":"https://www.chinadot.net","imageURL":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png"}],"frontMatter":{"slug":"net6-preview6","title":"4. .NET 6 Preview 6 \u5c1d\u9c9c","author":"dotNET China","author_title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","author_url":"https://www.chinadot.net","author_image_url":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png","tags":["furion","furos",".net",".netcore",".net5",".net6"]},"prevItem":{"title":"5. \u5728\u63a7\u5236\u53f0\u4e2d\u4f7f\u7528","permalink":"/blog/console"},"nextItem":{"title":"3. .NET 6 Preview 5 \u5c1d\u9c9c","permalink":"/blog/net6-preview5"}},"content":"import useBaseUrl from \\"@docusaurus/useBaseUrl\\";\\r\\n\\r\\n**2021 \u5e74 07 \u6708 15 \u65e5\uff0c\u5fae\u8f6f\u53d1\u5e03\u4e86 `.NET 6 Preview 6` \u7248\u672c\uff0c`Furion` \u5728\u5f53\u5929\u7b2c\u4e00\u65f6\u95f4\u9002\u914d\u4e86\u8be5\u7248\u672c\uff0c\u5e76\u53d1\u5e03 `Furion v3.0.0-rc.1` \u7248\u672c\u3002**\\r\\n\\r\\n[Furion .NET 6 Preview 6 \u6e90\u7801\u5730\u5740](https://gitee.com/dotnetchina/Furion/tree/3.0.0-rc.1/)\\r\\n\\r\\n## \u5b89\u88c5 `.NET 6 Preview 6 SDK`\\r\\n\\r\\n\u5c1d\u9c9c\u4e4b\u524d\uff0c\u9996\u5148\u5148\u5b89\u88c5 `.NET 6 Preview 6 SDK`\uff0c\u4e0b\u8f7d\u5730\u5740\uff1a[https://dotnet.microsoft.com/download/dotnet/6.0](https://dotnet.microsoft.com/download/dotnet/6.0)\\r\\n\\r\\n\u4e0b\u8f7d\u5bf9\u5e94\u7cfb\u7edf\u548c\u5904\u7406\u5668\u7248\u672c\u5373\u53ef\u3002\\r\\n\\r\\n## \u65e7\u9879\u76ee\u5347\u7ea7\\r\\n\\r\\n\u7f16\u8f91\u6240\u6709 `.csproj` \u9879\u76ee\uff0c\u4fee\u6539 `net5.0` \u4e3a `net6.0`\u3002\\r\\n\\r\\n\u540c\u65f6\u5347\u7ea7\u6240\u6709 `Microsoft` \u548c `Furion` \u5305\u4e3a\u6700\u65b0\u7248\u672c\uff0c`Furion` \u6700\u65b0\u7248\u672c\u4e3a\uff1a`v3.0.0-rc.1`\u3002\\r\\n\\r\\n## \u65b0\u9879\u76ee\u4f7f\u7528\\r\\n\\r\\n### \u5347\u7ea7 `Visual Studio 2019`\\r\\n\\r\\n\u76ee\u524d `.NET 6 Preview 6` \u652f\u6301\u4f7f\u7528 `Visual Studio 2019 Preview 16.11.0 Preview 3.0` \u7248\u672c\uff0c**\u6ce8\u610f\u662f `Preview` \u6700\u65b0\u7248\u672c**\u3002\u4e0b\u8f7d\u5730\u5740\uff1a[https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16](https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16)\\r\\n\\r\\n\u5df2\u7ecf\u5b89\u88c5\u4e86 `Visual Studio 2019 Preview` \u7248\u672c\u7684\u670b\u53cb\u76f4\u63a5\u5347\u7ea7\u5230\u6700\u65b0\u7248\u5373\u53ef\u3002\\r\\n\\r\\n:::note \u7279\u522b\u8bf4\u660e\\r\\n\\r\\n\u5982\u679c\u4f7f\u7528 `Visual Studio Code` \u5f00\u53d1\uff0c\u53ef\u5ffd\u7565\u6b64\u9009\u9879\u3002\\r\\n\\r\\n:::\\r\\n\\r\\n### \u7b2c\u4e00\u4e2a\u4f8b\u5b50\\r\\n\\r\\n`Furion v3.0.0-rc.1` \u76ee\u524d\u63d0\u4f9b\u4e86\u6240\u6709\u7c7b\u578b\u7684\u811a\u624b\u67b6\uff0c\u7248\u672c\u53f7\u7edf\u4e00 `3.0.0-rc.1`\u3002\\r\\n\\r\\n\u5b89\u88c5\u811a\u624b\u67b6\uff0c\u6253\u5f00 `CMD/Powershell` \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a\\r\\n\\r\\n```bash showLineNumbers \\r\\ndotnet new --install Furion.Template.Api::3.0.0-rc.1\\r\\n```\\r\\n\\r\\n\u521b\u5efa\u9879\u76ee\\r\\n\\r\\n```bash showLineNumbers \\r\\ndotnet new furionapi -n FurionNET6\\r\\n```\\r\\n\\r\\n### \u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee\\r\\n\\r\\n\u6253\u5f00\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u5373\u53ef\u3002"},{"id":"net6-preview5","metadata":{"permalink":"/blog/net6-preview5","editUrl":"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/blog/2021-06-18-net6-preview5.mdx","source":"@site/blog/2021-06-18-net6-preview5.mdx","title":"3. .NET 6 Preview 5 \u5c1d\u9c9c","description":"","date":"2021-06-18T00:00:00.000Z","formattedDate":"June 18, 2021","tags":[{"label":"furion","permalink":"/blog/tags/furion"},{"label":"furos","permalink":"/blog/tags/furos"},{"label":".net","permalink":"/blog/tags/net"},{"label":".netcore","permalink":"/blog/tags/netcore"},{"label":".net5","permalink":"/blog/tags/net-5"},{"label":".net6","permalink":"/blog/tags/net-6"}],"readingTime":1.29,"hasTruncateMarker":false,"authors":[{"name":"dotNET China","title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","url":"https://www.chinadot.net","imageURL":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png"}],"frontMatter":{"slug":"net6-preview5","title":"3. .NET 6 Preview 5 \u5c1d\u9c9c","author":"dotNET China","author_title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","author_url":"https://www.chinadot.net","author_image_url":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png","tags":["furion","furos",".net",".netcore",".net5",".net6"]},"prevItem":{"title":"4. .NET 6 Preview 6 \u5c1d\u9c9c","permalink":"/blog/net6-preview6"},"nextItem":{"title":"2. \u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d","permalink":"/blog/fileupload-download"}},"content":"import useBaseUrl from \\"@docusaurus/useBaseUrl\\";\\r\\n\\r\\n**2021 \u5e74 06 \u6708 18 \u65e5\uff0c\u5fae\u8f6f\u53d1\u5e03\u4e86 `.NET 6 Preview 5` \u7248\u672c\uff0c`Furion` \u5728\u5f53\u5929\u7b2c\u4e00\u65f6\u95f4\u9002\u914d\u4e86\u8be5\u7248\u672c\uff0c\u5e76\u53d1\u5e03 `Furion v3.0.0-preview.5.21301.9` \u7248\u672c\u3002**\\r\\n\\r\\n[Furion .NET 6 Preview 5 \u6e90\u7801\u5730\u5740](https://gitee.com/dotnetchina/Furion/tree/net6.0-preview5/)\\r\\n\\r\\n## \u7b49\u4e0d\u53ca\u5c1d\u9c9c\u4e86\\r\\n\\r\\n### \u5b89\u88c5 `.NET 6 Preview 5 SDK`\\r\\n\\r\\n\u5c1d\u9c9c\u4e4b\u524d\uff0c\u9996\u5148\u5148\u5b89\u88c5 `.NET 6 Preview 5 SDK`\uff0c\u4e0b\u8f7d\u5730\u5740\uff1a[https://dotnet.microsoft.com/download/dotnet/6.0](https://dotnet.microsoft.com/download/dotnet/6.0)\\r\\n\\r\\n\u4e0b\u8f7d\u5bf9\u5e94\u7cfb\u7edf\u548c\u5904\u7406\u5668\u7248\u672c\u5373\u53ef\u3002\\r\\n\\r\\n### \u5347\u7ea7 `Visual Studio 2019`\\r\\n\\r\\n\u76ee\u524d `.NET 6 Preview 5` \u652f\u6301\u4f7f\u7528 `Visual Studio 2019 Preview 16.11.0 Preview 2.0` \u7248\u672c\uff0c**\u6ce8\u610f\u662f `Preview` \u6700\u65b0\u7248\u672c**\u3002\u4e0b\u8f7d\u5730\u5740\uff1a[https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16](https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16)\\r\\n\\r\\n\u5df2\u7ecf\u5b89\u88c5\u4e86 `Visual Studio 2019 Preview` \u7248\u672c\u7684\u670b\u53cb\u76f4\u63a5\u5347\u7ea7\u5230\u6700\u65b0\u7248\u5373\u53ef\u3002\\r\\n\\r\\n:::note \u7279\u522b\u8bf4\u660e\\r\\n\\r\\n\u5982\u679c\u4f7f\u7528 `Visual Studio Code` \u5f00\u53d1\uff0c\u53ef\u5ffd\u7565\u6b64\u9009\u9879\u3002\\r\\n\\r\\n:::\\r\\n\\r\\n### \u7b2c\u4e00\u4e2a\u4f8b\u5b50\\r\\n\\r\\n`Furion v3.0.0-preview.5.21301.9` \u76ee\u524d\u63d0\u4f9b\u4e86\u6240\u6709\u7c7b\u578b\u7684\u811a\u624b\u67b6\uff0c\u7248\u672c\u53f7\u7edf\u4e00 `3.0.0-preview.5.21301.9`\u3002\\r\\n\\r\\n\u5b89\u88c5\u811a\u624b\u67b6\uff0c\u6253\u5f00 `CMD/Powershell` \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a\\r\\n\\r\\n```bash showLineNumbers \\r\\ndotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9\\r\\n```\\r\\n\\r\\n\u521b\u5efa\u9879\u76ee\\r\\n\\r\\n```bash showLineNumbers \\r\\ndotnet new furionapi -n FurionNET6\\r\\n```\\r\\n\\r\\n### \u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee\\r\\n\\r\\n\u6253\u5f00\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u5373\u53ef\u3002"},{"id":"fileupload-download","metadata":{"permalink":"/blog/fileupload-download","editUrl":"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/blog/2021-02-02-fileupload-download.mdx","source":"@site/blog/2021-02-02-fileupload-download.mdx","title":"2. \u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d","description":"","date":"2021-02-02T00:00:00.000Z","formattedDate":"February 2, 2021","tags":[{"label":"furion","permalink":"/blog/tags/furion"},{"label":"furos","permalink":"/blog/tags/furos"},{"label":".net","permalink":"/blog/tags/net"},{"label":".netcore","permalink":"/blog/tags/netcore"},{"label":".net5","permalink":"/blog/tags/net-5"},{"label":"upload","permalink":"/blog/tags/upload"},{"label":"download","permalink":"/blog/tags/download"}],"readingTime":1.435,"hasTruncateMarker":true,"authors":[{"name":"dotNET China","title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","url":"https://www.chinadot.net","imageURL":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png"}],"frontMatter":{"slug":"fileupload-download","title":"2. \u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d","author":"dotNET China","author_title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","author_url":"https://www.chinadot.net","author_image_url":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png","tags":["furion","furos",".net",".netcore",".net5","upload","download"]},"prevItem":{"title":"3. .NET 6 Preview 5 \u5c1d\u9c9c","permalink":"/blog/net6-preview5"},"nextItem":{"title":"1. HttpContext \u5e94\u7528","permalink":"/blog/httpcontext"}},"content":"import useBaseUrl from \\"@docusaurus/useBaseUrl\\";\\r\\n\\r\\n## \u6587\u4ef6\u4e0b\u8f7d\\r\\n\\r\\n```cs showLineNumbers \\r\\n[HttpGet, NonUnify]\\r\\npublic IActionResult FileDownload(string path, string fileName)\\r\\n{\\r\\n string filePath = \\"\u8fd9\u91cc\u83b7\u53d6\u5b8c\u6574\u7684\u6587\u4ef6\u4e0b\u8f7d\u8def\u5f84\\";\\r\\n return new FileStreamResult(new FileStream(filePath, FileMode.Open), \\"application/octet-stream\\") { FileDownloadName = fileName };\\r\\n}\\r\\n```\\r\\n\\r\\n:::note \u5173\u4e8e\u524d\u7aef\u83b7\u53d6\u6587\u4ef6\u540d\\r\\n\\r\\n\u5982\u679c\u524d\u7aef\u83b7\u53d6\u4e0d\u5230\u6587\u4ef6\u5939\uff0c\u53ef\u6dfb\u52a0\u4ee5\u4e0b\u914d\u7f6e\uff1a\\r\\n\\r\\n```cs showLineNumbers \\r\\n_httpContextAccessor.HttpContext.Response.Headers.Add(\\"Content-Disposition\\", $\\"attachment; filename={\u6587\u4ef6\u540d}\\");\\r\\n_httpContextAccessor.HttpContext.Response.Headers.Add(\\"Access-Control-Expose-Headers\\", \\"Content-Disposition\\");\\r\\n```\\r\\n\\r\\n:::\\r\\n\\r\\n\x3c!--truncate--\x3e\\r\\n\\r\\n## \u6587\u4ef6\u4e0a\u4f20\\r\\n\\r\\n```cs showLineNumbers \\r\\n[HttpPost, NonUnify]\\r\\npublic async Task UploadFileAsync(List files)\\r\\n{\\r\\n // \u4fdd\u5b58\u5230\u7f51\u7ad9\u6839\u76ee\u5f55\u4e0b\u7684 uploads \u76ee\u5f55\\r\\n var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, \\"uploads\\");\\r\\n if(!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);\\r\\n\\r\\n long size = files.Sum(f => f.Length);\\r\\n\\r\\n foreach (var formFile in files)\\r\\n {\\r\\n if (formFile.Length > 0)\\r\\n {\\r\\n // \u907f\u514d\u6587\u4ef6\u540d\u91cd\u590d\uff0c\u91c7\u7528 GUID \u751f\u6210\\r\\n var filePath = Path.Combine(savePath, Guid.NewGuid().ToString(\\"N\\") + Path.GetExtension(formFile.FileName)); // \u53ef\u4ee5\u66ff\u4ee3\u4e3a\u4f60\u9700\u8981\u5b58\u50a8\u7684\u771f\u5b9e\u8def\u5f84\\r\\n\\r\\n using (var stream = System.IO.File.Create(filePath))\\r\\n {\\r\\n await formFile.CopyToAsync(stream);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n // \u5728\u52a8\u6001 API \u76f4\u63a5\u8fd4\u56de\u5bf9\u8c61\u5373\u53ef\uff0c\u65e0\u9700 OK \u548c IActionResult\\r\\n return Ok(new { count = files.Count, size });\\r\\n}\\r\\n```\\r\\n\\r\\n:::note \u5173\u4e8e\u4f7f\u7528axios\u4e0a\u4f20\u6587\u4ef6,\u65b9\u6cd5\u83b7\u53d6\u5230\u53c2\u6570files.Count=0\\r\\naxios\u8bf7\u6c42\u914d\u7f6e\\r\\n\\r\\n```cs showLineNumbers \\r\\n let formData = new FormData();\\r\\n formData.append(\\"files\\", this.file); //files\u9700\u4e0e\u65b9\u6cd5\u91cc\u7684\u53c2\u6570files\u540d\u79f0\u4e00\u6837\\r\\n let config = {\\r\\n headers: {\\r\\n \\"Content-Type\\": \\"multipart/form-data\\",\\r\\n },\\r\\n };\\r\\n axios.post(this.uploadURL, formData, config).then((res) => {//\u9700\u5f15\u5165axios\\r\\n console.log(res);\\r\\n });\\r\\n```"},{"id":"httpcontext","metadata":{"permalink":"/blog/httpcontext","editUrl":"https://gitee.com/dotnetchina/Furion/tree/v4/handbook/blog/2021-02-01-httpcontext.mdx","source":"@site/blog/2021-02-01-httpcontext.mdx","title":"1. HttpContext \u5e94\u7528","description":"","date":"2021-02-01T00:00:00.000Z","formattedDate":"February 1, 2021","tags":[{"label":"furion","permalink":"/blog/tags/furion"},{"label":"furos","permalink":"/blog/tags/furos"},{"label":".net","permalink":"/blog/tags/net"},{"label":".netcore","permalink":"/blog/tags/netcore"},{"label":".net5","permalink":"/blog/tags/net-5"},{"label":"httpcontext","permalink":"/blog/tags/httpcontext"}],"readingTime":1.545,"hasTruncateMarker":true,"authors":[{"name":"dotNET China","title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","url":"https://www.chinadot.net","imageURL":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png"}],"frontMatter":{"slug":"httpcontext","title":"1. HttpContext \u5e94\u7528","author":"dotNET China","author_title":"\u8ba9 .NET \u5f00\u53d1\u66f4\u7b80\u5355\uff0c\u66f4\u901a\u7528\uff0c\u66f4\u6d41\u884c\u3002","author_url":"https://www.chinadot.net","author_image_url":"https://i.loli.net/2021/01/19/M8q5a3OTZWUKicl.png","tags":["furion","furos",".net",".netcore",".net5","httpcontext"]},"prevItem":{"title":"2. \u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d","permalink":"/blog/fileupload-download"}},"content":"import useBaseUrl from \\"@docusaurus/useBaseUrl\\";\\r\\n\\r\\n## HttpContext \u91cd\u5927\u8c03\u6574\\r\\n\\r\\n\u5728 `ASP.NET` \u7684\u65f6\u4ee3\uff0c\u6211\u4eec\u901a\u5e38\u901a\u8fc7 `HttpContext` \u5168\u5c40\u9759\u6001\u7c7b\u83b7\u53d6\u8bf7\u6c42\u4e0a\u4e0b\u6587\uff0c\u4f46\u5728 `ASP.NET Core` \u4e2d\uff0c`HttpContext` \u662f\u4e00\u4e2a\u975e\u9759\u6001\u7684\u62bd\u8c61\u7c7b\uff0c\u65e0\u6cd5\u624b\u52a8\u521b\u5efa\uff0c\u4e5f\u65e0\u6cd5\u901a\u8fc7\u9759\u6001\u83b7\u53d6\u3002\\r\\n\\r\\n\u867d\u7136\u5728 `ASP.NET Core` \u4e2d\u65e0\u6cd5\u76f4\u63a5\u83b7\u53d6 `HttpContext` \u5bf9\u8c61\u3002\u4f46\u662f\u5fae\u8f6f\u4e5f\u63d0\u4f9b\u4e86\u6ce8\u5165 `IHttpContextAccessor` \u65b9\u5f0f\u83b7\u53d6\u3002\\r\\n\\r\\n## HttpContext \u591a\u79cd\u83b7\u53d6\u65b9\u5f0f\\r\\n\\r\\n\x3c!--truncate--\x3e\\r\\n\\r\\n### \u5728 `ControllerBase` \u6d3e\u751f\u7c7b\u4e2d\\r\\n\\r\\n\u5728 `ControllerBase` \u6d3e\u751f\u7c7b\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7 `HttpContext` \u5c5e\u6027\u83b7\u53d6 `HttpContext` \u5bf9\u8c61\u3002\\r\\n\\r\\n### \u901a\u8fc7\u6ce8\u5165 `IHttpContextAccessor`\\r\\n\\r\\n\u5728 `Furion` \u6846\u67b6\u4e2d\uff0c\u9ed8\u8ba4\u5df2\u7ecf\u6ce8\u518c\u4e86 `IHttpContextAccessor` \u670d\u52a1\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6784\u9020\u51fd\u6570\u6ce8\u5165\u8be5\u5bf9\u8c61\u83b7\u53d6\u3002\\r\\n\\r\\n```cs showLineNumbers {3,5}\\r\\npublic class AppService\\r\\n{\\r\\n public AppService(IHttpContextAccessor httpContextAccessor)\\r\\n {\\r\\n var httpContext = httpContextAccessor.HttpContext;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n### \u901a\u8fc7 `App.HttpContext`\\r\\n\\r\\n`App` \u9759\u6001\u7c7b\u4e5f\u63d0\u4f9b\u4e86 `App.HttpContext` \u83b7\u53d6 `HttpContext` \u5bf9\u8c61\u3002\\r\\n\\r\\n## `HttpContext` \u62d3\u5c55\u65b9\u6cd5\\r\\n\\r\\n`Furion` \u6846\u67b6\u4e5f\u63d0\u4f9b\u4e86\u4e00\u4e9b\u5e38\u7528\u7684 `HttpContext` \u62d3\u5c55\u65b9\u6cd5\\r\\n\\r\\n### \u83b7\u53d6\u5f53\u524d\u8bf7\u6c42\u7684\u7279\u6027\\r\\n\\r\\n```cs showLineNumbers \\r\\nvar attribute = httpContext.GetMetadata();\\r\\n```\\r\\n\\r\\n### \u8bbe\u7f6e `Swagger` \u81ea\u52a8\u6388\u6743\\r\\n\\r\\n```cs showLineNumbers \\r\\nhttpContext.SigninToSwagger(\\"\u4f60\u7684token\\");\\r\\n```\\r\\n\\r\\n### \u9000\u51fa `Swagger` \u6388\u6743\\r\\n\\r\\n```cs showLineNumbers \\r\\nhttpContext.SignoutToSwagger();\\r\\n```\\r\\n\\r\\n### \u83b7\u53d6\u672c\u5730 IP \u5730\u5740\\r\\n\\r\\n```cs showLineNumbers \\r\\nvar ipv4 = httpContext.GetLocalIpAddressToIPv4();\\r\\nvar ipv6 = httpContext.GetLocalIpAddressToIPv6();\\r\\n```\\r\\n\\r\\n### \u83b7\u53d6\u5ba2\u6237\u7aef IP \u5730\u5740\\r\\n\\r\\n```cs showLineNumbers \\r\\nvar ipv4 = httpContext.GetRemoteIpAddressToIPv4();\\r\\nvar ipv6 = httpContext.GetRemoteIpAddressToIPv6();\\r\\n```"}]}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/b40312ef.d32b3d76.js b/handbook/build/assets/js/b40312ef.d32b3d76.js new file mode 100644 index 00000000000..6b7614074cf --- /dev/null +++ b/handbook/build/assets/js/b40312ef.d32b3d76.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[5393],{3905:function(e,n,t){t.d(n,{Zo:function(){return u},kt:function(){return c}});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),d=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},u=function(e){var n=d(e.components);return a.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),m=d(t),c=r,g=m["".concat(s,".").concat(c)]||m[c]||p[c]||i;return t?a.createElement(g,l(l({ref:n},u),{},{components:t})):a.createElement(g,l({ref:n},u))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,l=new Array(i);l[0]=m;var o={};for(var s in n)hasOwnProperty.call(n,s)&&(o[s]=n[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var d=2;d\n var configConnection=new ConnectionConfig()\n {\n DbType = SqlSugar.DbType.MySql,\n ConnectionString = configuration.GetConnectionString(dbName),\n IsAutoCloseConnection = true,\n };\n \n SqlSugarScope sqlSugar = new SqlSugarScope(configConnection,\n db =>\n {\n //\u5355\u4f8b\u53c2\u6570\u914d\u7f6e\uff0c\u6240\u6709\u4e0a\u4e0b\u6587\u751f\u6548\n db.Aop.OnLogExecuting = (sql, pars) =>\n {\n //Console.WriteLine(sql);//\u8f93\u51fasql\n };\n });\n\n services.AddSingleton(sqlSugar);//\u8fd9\u8fb9\u662fSqlSugarScope\u7528AddSingleton\n }\n}\n')),(0,i.kt)("p",null,"\u4f7f\u7528\u6ce8\u5165"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"//1.\u6784\u9020\u51fd\u6570\u6ce8\u5165\nSqlSugar.ISqlSugarClient db;\npublic WeatherForecastController(ISqlSugarClient db) \n{\n\n this.db = db;\n}\n\n//2.\u624b\u52a8\u83b7\u53d6\nApp.GetService();\n")),(0,i.kt)("ol",{start:2},(0,i.kt)("li",{parentName:"ol"},"\u5728 ",(0,i.kt)("inlineCode",{parentName:"li"},"Startup.cs")," \u4e2d\u6ce8\u518c\uff1a")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddSqlsugarSetup(App.Configuration);\n")),(0,i.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u9700\u8981\u591a\u5e93\u914d\u7f6e\uff0c\u53ef\u67e5\u770b ",(0,i.kt)("a",{parentName:"p",href:"https://www.donet5.com/home/Doc?typeId=2246"},"https://www.donet5.com/home/Doc?typeId=2246"))),(0,i.kt)("h2",{id:"1015-\u7279\u8272\u529f\u80fd"},"10.1.5 \u7279\u8272\u529f\u80fd"),(0,i.kt)("h3",{id:"10151-\u8054\u8868\u67e5\u8be2"},"10.1.5.1 \u8054\u8868\u67e5\u8be2"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Linq/Lambda"),"\uff1a")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var query5 = db.Queryable()\n .LeftJoin ((o, cus) => o.CustomId == cus.Id)\n .LeftJoin ((o, cus, oritem ) => o.Id == oritem.OrderId)\n .Where(o => o.Id == 1) \n .Select((o, cus) => new ViewOrder { Id = o.Id, CustomName = cus.Name })\n .ToList(); \n")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u751f\u6210 ",(0,i.kt)("inlineCode",{parentName:"li"},"SQL"),"\uff1a")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"showLineNumbers",showLineNumbers:!0},"SELECT\n [o].[Id] AS [Id],\n [cus].[Name] AS [CustomName]\nFROM\n [Order] o\n Left JOIN [Custom] cus ON ([o].[CustomId] = [cus].[Id])\n Left JOIN [OrderDetail] oritem ON ([o].[Id] = [oritem].[OrderId])\nWHERE\n ([o].[Id] = @Id0)\n")),(0,i.kt)("h3",{id:"10152-\u5206\u9875\u67e5\u8be2"},"10.1.5.2 \u5206\u9875\u67e5\u8be2"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"int pageIndex = 1; \nint pageSize = 20;\nint totalCount=0;\nvar page = db.Queryable().ToPageList(pageIndex, pageSize, ref totalCount);\n")),(0,i.kt)("h3",{id:"10153-\u52a8\u6001\u8868\u8fbe\u5f0f"},"10.1.5.3 \u52a8\u6001\u8868\u8fbe\u5f0f"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Linq/Lambda"),"\uff1a")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var names= new string [] { "a","b"};\nExpressionable exp = new Expressionable();\n\nforeach (var item in names)\n{\n exp.Or(it => it.Name.Contains(item.ToString()));\n}\n\nvar list= db.Queryable().Where(exp.ToExpression()).ToList();\n')),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"\u751f\u6210 ",(0,i.kt)("inlineCode",{parentName:"li"},"SQL"),"\uff1a")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"showLineNumbers",showLineNumbers:!0},"SELECT [Id],[Name],[Price],[CreateTime],[CustomId]\n FROM [Order] WHERE (\n ([Name] like '%'+ CAST(@MethodConst0 AS NVARCHAR(MAX))+'%') OR \n ([Name] like '%'+ CAST(@MethodConst1 AS NVARCHAR(MAX))+'%')\n )\n")),(0,i.kt)("h3",{id:"10154-\u4ed3\u50a8\u65b9\u6cd5"},"10.1.5.4 \u4ed3\u50a8\u65b9\u6cd5"),(0,i.kt)("p",null,"\u65b0\u5efa\u4e00\u4e2a\u4ed3\u50a8\u7c7b\uff0c\u5982\u679c\u60f3\u6269\u5c55\u65b9\u6cd5\u5199\u5230\u4ed3\u50a8\u7c7b\u4e2d"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"public class Repository : SimpleClient where T : class, new()\n{\n public Repository(ISqlSugarClient context = null) : base(context)//\u9ed8\u8ba4\u503c\u7b49\u4e8enull\u4e0d\u80fd\u5c11\n {\n base.Context = App.GetService();//\u7528\u624b\u52a8\u83b7\u53d6\u65b9\u5f0f\u652f\u6301\u5207\u6362\u4ed3\u50a8\n }\n}\n")),(0,i.kt)("p",null,"\u7ee7\u627f\u4ed3\u50a8\u7c7b\u5c31\u53ef\u4ee5\u4f7f\u7528\u4ed3\u50a8API\u4e86"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'//\u67e5\u8be2\nvar data1 = base.GetById(1);//\u6839\u636eid\u67e5\u8be2\nvar data4 = base.GetSingle(it => it.Id == 1);//\u67e5\u8be2\u5355\u6761\u8bb0\u5f55\uff0c\u7ed3\u679c\u96c6\u4e0d\u80fd\u8d85\u8fc71\uff0c\u4e0d\u7136\u4f1a\u63d0\u793a\u9519\u8bef\nvar data = base.GetFirst(it => it.Id == 1);//\u67e5\u8be2\u7b2c\u4e00\u6761\u8bb0\u5f55\n\nvar data2 = base.GetList();//\u67e5\u8be2\u6240\u6709\nvar data3 = base.GetList(it => it.Id == 1); //\u6839\u636e\u6761\u4ef6\u67e5\u8be2\n\nvar p = new PageModel() { PageIndex = 1, PageSize = 2 };\nvar data5 = base.GetPageList(it => it.Name == "xx", p);\nConsole.Write(p.PageCount);\n\nvar data6 = base.GetPageList(it => it.Name == "xx", p, it => it.Name, OrderByType.Asc);\nConsole.Write(p.PageCount);\n\nList conModels = new List();\nconModels.Add(new ConditionalModel(){FieldName="id",ConditionalType=ConditionalType.Equal,FieldValue="1"});//id=1\nvar data7 = base.GetPageList(conModels, p, it => it.Name, OrderByType.Asc);\nbase.AsQueryable().Where(x => x.Id == 1).ToList();\n \n//\u63d2\u5165\nbase.Insert(insertObj);\nbase.InsertRange(InsertObjs);\nvar id = base.InsertReturnIdentity(insertObj);\nbase.AsInsertable(insertObj).ExecuteCommand();\n \n//\u5220\u9664\nbase.Delete(insertObj);\nbase.DeleteById(1);\nbase.DeleteByIds(new object [] { 1, 2 }); //\u6570\u7ec4\u5e26\u662f ids\u65b9\u6cd5 \uff0c\u5c01\u88c5\u4f20 object [] \u7c7b\u578b\nbase.Delete(it => it.Id == 1);\nbase.AsDeleteable().Where(it => it.Id == 1).ExecuteCommand();\n \n//\u66f4\u65b0\nbase.Update(insertObj); \nbase.UpdateRange(InsertObjs); \nbase.Update(it => new Order() { Name = "a", }, it => it.Id == 1);\nbase.AsUpdateable(insertObj).UpdateColumns(it=>new { it.Name }).ExecuteCommand();\n \n//\u9ad8\u7ea7\u64cd\u4f5c\nbase.AsSugarClient // \u83b7\u53d6\u5b8c\u6574\u7684db\u5bf9\u8c61\nbase.AsTenant // \u83b7\u53d6\u591a\u5e93\u76f8\u5173\u64cd\u4f5c\n \n//\u5207\u6362\u4ed3\u50a8\nbase.ChangeRepository>() //\u652f\u6301\u591a\u79df\u6237\u548c\u6269\u5c55\u65b9\u6cd5\uff0c\u4f7f\u7528SqlSugarScope\u5355\u4f8b\uff08\u6216\u8005SqlSugarClient Scope\u6ce8\u5165\uff09\nbase.Change()//\u53ea\u652f\u6301\u81ea\u5e26\u65b9\u6cd5\u548c\u5355\u5e93\n')),(0,i.kt)("h3",{id:"10155-\u591a\u5e93\u4e8b\u52a1"},"10.1.5.5 \u591a\u5e93\u4e8b\u52a1"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'SqlSugarClient db = new SqlSugarClient(new List()\n{\n new ConnectionConfig(){ ConfigId="0", DbType=DbType.SqlServer, ConnectionString=Config.ConnectionString, IsAutoCloseConnection=true },\n new ConnectionConfig(){ ConfigId="1", DbType=DbType.MySql, ConnectionString=Config.ConnectionString4 ,IsAutoCloseConnection=true}\n});\n\nvar mysqldb = db.GetConnection("1"); // mysql db\nvar sqlServerdb = db.GetConnection("0"); // sqlserver db\n \ndb.BeginTran();\n\nmysqldb.Insertable(new Order()\n{\n CreateTime = DateTime.Now,\n CustomId = 1,\n Name = "a",\n Price = 1\n}).ExecuteCommand();\nmysqldb.Queryable().ToList();\nsqlServerdb.Queryable().ToList();\n\ndb.CommitTran();\n')),(0,i.kt)("h3",{id:"10156-\u5355\u4f8b\u6a21\u5f0f"},"10.1.5.6 \u5355\u4f8b\u6a21\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig()\n {\n DbType = SqlSugar.DbType.SqlServer,\n ConnectionString = Config.ConnectionString,\n IsAutoCloseConnection = true \n },\n db=> {\n db.Aop.OnLogExecuting = (s, p) =>\n {\n Console.WriteLine(s);\n };\n });\n \nusing (var tran = Db.UseTran())\n{\n new Test2().Insert(XX);\n new Test1().Insert(XX);\n ..... \n \n tran.CommitTran(); \n}\n")),(0,i.kt)("h3",{id:"10157-\u5168\u5c40\u8fc7\u6ee4\u5668"},"10.1.5.7 \u5168\u5c40\u8fc7\u6ee4\u5668"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"db.QueryFilter.Add(new TableFilterItem(it => it.Name.Contains(\"a\"))); \n \ndb.Queryable().ToList();\n// SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] WHERE ([Name] like '%'+@MethodConst0+'%') \n\ndb.Queryable((i, o) => i.OrderId == o.Id)\n .Where(i => i.OrderId != 0)\n .Select(\"i.*\").ToList();\n// SELECT i.* FROM [OrderDetail] i ,[Order] o WHERE ( [i].[OrderId] = [o].[Id] ) AND \n// ( [i].[OrderId] <> @OrderId0 ) AND ([o].[Name] like '%'+@MethodConst1+'%')\n")),(0,i.kt)("h3",{id:"10158-\u6dfb\u52a0\u6216\u8005\u66f4\u65b0"},"10.1.5.8 \u6dfb\u52a0\u6216\u8005\u66f4\u65b0"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var x = Db.Storageable(list2).ToStorage(); \nx.AsInsertable.ExecuteCommand(); \nx.AsUpdateable.ExecuteCommand(); \n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var x = Db.Storageable(list).SplitInsert(it => !it.Any()).ToStorage()\nx.AsInsertable.ExecuteCommand(); \n")),(0,i.kt)("h3",{id:"10159-\u81ea\u52a8\u5206\u8868"},"10.1.5.9 \u81ea\u52a8\u5206\u8868"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'[SplitTable(SplitType.Year)] // Table by year (the table supports year, quarter, month, week and day)\n[SugarTable("SplitTestTable_{year}{month}{day}")] \npublic class SplitTestTable\n{\n [SugarColumn(IsPrimaryKey =true)]\n public long Id { get; set; }\n\n public string Name { get; set; }\n \n //When the sub-table field is inserted, which table will be inserted according to this field. \n //When it is updated and deleted, it can also be convenient to use this field to \n //find out the related table \n [SplitField] \n public DateTime CreateTime { get; set; }\n}\n')),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var lis2t = db.Queryable()\n.SplitTable(DateTime.Now.Date.AddYears(-1), DateTime.Now)\n.ToPageList(1,2);\u3000\n")),(0,i.kt)("h3",{id:"101510-\u5927\u6570\u636e\u63d2\u5165\u66f4\u65b0\u63d2\u5165\u6216\u8005\u66f4\u65b0"},"10.1.5.10 \u5927\u6570\u636e\u63d2\u5165\uff0c\u66f4\u65b0\uff0c\u63d2\u5165\u6216\u8005\u66f4\u65b0"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'//Insert A million only takes a few seconds\ndb.Fastest().BulkCopy(GetList());\n \n//update A million only takes a few seconds\ndb.Fastest().BulkUpdate(GetList());//A million only takes a few seconds\u5b8c\ndb.Fastest().BulkUpdate(GetList(),new string[]{"id"},new string[]{"name","time"})//no primary key\n \n//if exists update, else insert\n var x= db.Storageable(data).ToStorage();\n x.BulkCopy();\n x.BulkUpdate(); \n \n//set table name\ndb.Fastest().AS("tableName").BulkCopy(GetList())\n \n//set page \ndb.Fastest().PageSize(300000).BulkCopy(insertObjs);\n')),(0,i.kt)("h3",{id:"101511-\u66f4\u591a\u529f\u80fd"},"10.1.5.11 \u66f4\u591a\u529f\u80fd"),(0,i.kt)("p",null,"\u53ef\u67e5\u9605 ",(0,i.kt)("a",{parentName:"p",href:"https://www.donet5.com/Home/Doc"},"SqlSugar \u5b98\u7f51"),"\u3002"),(0,i.kt)("h2",{id:"1016-\u53cd\u9988\u4e0e\u5efa\u8bae"},"10.1.6 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,i.kt)("hr",null),(0,i.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,i.kt)("inlineCode",{parentName:"p"},"SqlSugar")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,i.kt)("a",{parentName:"p",href:"https://www.donet5.com/Home/Doc"},"SqlSugar \u5b98\u7f51"),"\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/b4685f05.125d0758.js b/handbook/build/assets/js/b4685f05.125d0758.js new file mode 100644 index 00000000000..6bd3e581d03 --- /dev/null +++ b/handbook/build/assets/js/b4685f05.125d0758.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[9138],{3905:function(e,n,t){t.d(n,{Zo:function(){return c},kt:function(){return d}});var i=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function o(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=i.createContext({}),p=function(e){var n=i.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},c=function(e){var n=p(e.components);return i.createElement(l.Provider,{value:n},e.children)},u={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=p(t),d=r,v=m["".concat(l,".").concat(d)]||m[d]||u[d]||a;return t?i.createElement(v,o(o({ref:n},c),{},{components:t})):i.createElement(v,o({ref:n},c))}));function d(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,o=new Array(a);o[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,o[1]=s;for(var p=2;p\u8131\u654f\u8bcd\u6c47\u68c0\u6d4b \u670d\u52a1",id:"3021-\u6ce8\u518c-\u8131\u654f\u8bcd\u6c47\u68c0\u6d4b-\u670d\u52a1",level:3},{value:"30.2.2 \u521b\u5efa sensitive-words.txt \u6587\u4ef6",id:"3022-\u521b\u5efa-sensitive-wordstxt-\u6587\u4ef6",level:3},{value:"30.2.3 \u4f7f\u7528\u8131\u654f\u68c0\u6d4b",id:"3023-\u4f7f\u7528\u8131\u654f\u68c0\u6d4b",level:3},{value:"30.2.4 \u8131\u654f\u8bcd\u6c47\u66ff\u6362",id:"3024-\u8131\u654f\u8bcd\u6c47\u66ff\u6362",level:3},{value:"30.3 \u81ea\u5b9a\u4e49\u8131\u654f\u8bcd\u6c47\u5904\u7406",id:"303-\u81ea\u5b9a\u4e49\u8131\u654f\u8bcd\u6c47\u5904\u7406",level:2},{value:"30.3.1 \u81ea\u5b9a\u4e49 ISensitiveDetectionProvider \u7a0b\u5e8f\uff0c\u5982\uff1a",id:"3031-\u81ea\u5b9a\u4e49-isensitivedetectionprovider-\u7a0b\u5e8f\u5982",level:3},{value:"30.3.2 \u6ce8\u518c\u81ea\u5b9a\u4e49\u8131\u654f\u63d0\u4f9b\u5668",id:"3032-\u6ce8\u518c\u81ea\u5b9a\u4e49\u8131\u654f\u63d0\u4f9b\u5668",level:3},{value:"30.4 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"304-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:m};function v(e){var n=e.components,t=(0,r.Z)(e,s);return(0,a.kt)("wrapper",(0,i.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion 2.4.4 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,a.kt)("h2",{id:"301-\u5173\u4e8e\u8131\u654f"},"30.1 \u5173\u4e8e\u8131\u654f"),(0,a.kt)("p",null,"\u5f15\u7528\u767e\u5ea6\u767e\u79d1\uff1a"),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"\u6570\u636e\u8131\u654f\u662f\u6307\u5bf9\u67d0\u4e9b\u654f\u611f\u4fe1\u606f\u901a\u8fc7\u8131\u654f\u89c4\u5219\u8fdb\u884c\u6570\u636e\u7684\u53d8\u5f62\uff0c\u5b9e\u73b0\u654f\u611f\u9690\u79c1\u6570\u636e\u7684\u53ef\u9760\u4fdd\u62a4\u3002\u5728\u6d89\u53ca\u5ba2\u6237\u5b89\u5168\u6570\u636e\u6216\u8005\u4e00\u4e9b\u5546\u4e1a\u6027\u654f\u611f\u6570\u636e\u7684\u60c5\u51b5\u4e0b\uff0c\u5728\u4e0d\u8fdd\u53cd\u7cfb\u7edf\u89c4\u5219\u6761\u4ef6\u4e0b\uff0c\u5bf9\u771f\u5b9e\u6570\u636e\u8fdb\u884c\u6539\u9020\u5e76\u63d0\u4f9b\u6d4b\u8bd5\u4f7f\u7528\uff0c\u5982\u8eab\u4efd\u8bc1\u53f7\u3001\u624b\u673a\u53f7\u3001\u5361\u53f7\u3001\u5ba2\u6237\u53f7\u7b49\u4e2a\u4eba\u4fe1\u606f\u90fd\u9700\u8981\u8fdb\u884c\u6570\u636e\u8131\u654f\u3002\u6570\u636e\u5b89\u5168\u6280\u672f\u4e4b\u4e00\uff0c\u6570\u636e\u5e93\u5b89\u5168\u6280\u672f\u4e3b\u8981\u5305\u62ec\uff1a\u6570\u636e\u5e93\u6f0f\u626b\u3001\u6570\u636e\u5e93\u52a0\u5bc6\u3001\u6570\u636e\u5e93\u9632\u706b\u5899\u3001\u6570\u636e\u8131\u654f\u3001\u6570\u636e\u5e93\u5b89\u5168\u5ba1\u8ba1\u7cfb\u7edf\u3002")),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u7cfb\u7edf\u4e2d\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"\u8131\u654f\u5904\u7406")," \u6307\u7684\u662f\u5bf9\u4e0d\u7b26\u5408\u7cfb\u7edf\u5408\u6cd5\u8bcd\u6c47\u68c0\u6d4b\u9a8c\u8bc1\u3002"),(0,a.kt)("h2",{id:"302-\u5982\u4f55\u4f7f\u7528"},"30.2 \u5982\u4f55\u4f7f\u7528"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u5185\u7f6e\u4e86\u4e00\u5957\u9ed8\u8ba4\u7684\u8131\u654f\u8bcd\u6c47\u8131\u654f\u5904\u7406\u673a\u5236\uff0c\u5e76\u4e14\u63d0\u4f9b\u81ea\u5b9a\u4e49\u64cd\u4f5c\u3002"),(0,a.kt)("h3",{id:"3021-\u6ce8\u518c-\u8131\u654f\u8bcd\u6c47\u68c0\u6d4b-\u670d\u52a1"},"30.2.1 \u6ce8\u518c ",(0,a.kt)("inlineCode",{parentName:"h3"},"\u8131\u654f\u8bcd\u6c47\u68c0\u6d4b")," \u670d\u52a1"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},"public void ConfigureServices(IServiceCollection services)\n{\n services.AddSensitiveDetection();\n}\n")),(0,a.kt)("h3",{id:"3022-\u521b\u5efa-sensitive-wordstxt-\u6587\u4ef6"},"30.2.2 \u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"h3"},"sensitive-words.txt")," \u6587\u4ef6"),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Web")," \u542f\u52a8\u5c42\u9879\u76ee\u4e2d\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"sensitive-words.txt")," \u6587\u4ef6\uff0c",(0,a.kt)("strong",{parentName:"p"},"\u786e\u4fdd\u91c7\u7528 ",(0,a.kt)("inlineCode",{parentName:"strong"},"UTF-8")," \u7f16\u7801\u683c\u5f0f\u4e14\u4e0d\u80fd\u5e26 ",(0,a.kt)("inlineCode",{parentName:"strong"},"BOM \u7b7e\u540d")," \u4e14\u8bbe\u7f6e\u4e3a\u5d4c\u5165\u5f0f\u8d44\u6e90\uff01"),"\ud83c\udf83"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"sensitive-words.txt")," \u5185\u5bb9\u683c\u5f0f\u4e3a\u6bcf\u4e00\u884c\u6807\u8bc6\u4e00\u4e2a\u8131\u654f\u8bcd\u6c47\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-showLineNumbers"},"\u574f\u4eba\n\u65e0\u8bed\n\u6eda\u5f00\n\u516b\u560e\n")),(0,a.kt)("admonition",{title:"3.8.9+ \u7248\u672c",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion 3.8.9+")," \u7248\u672c\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"p"},"|")," \u5206\u9694\u7b26\u8fdb\u884c\u5206\u5272\uff0c\u4e5f\u540c\u65f6\u652f\u6301 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u6362\u884c")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"|")," \u6df7\u7528\uff0c\u5982\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-showLineNumbers"},"\u574f\u4eba|\u65e0\u8bed|\u6eda\u5f00\n\u516b\u560e\n")),(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"\u63a8\u8350\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"strong"},"|")," \u65b9\u5f0f\uff0c\u53ef\u4ee5\u8282\u7701\u8bcd\u5e93\u5360\u7528\u5b58\u50a8\u7a7a\u95f4\u3002"))),(0,a.kt)("p",null,"\u63a5\u4e0b\u6765\u8bbe\u7f6e\u4e3a\u5d4c\u5165\u5f0f\u8d44\u6e90\uff1a"),(0,a.kt)("img",{src:(0,o.Z)("img/tm.png")}),(0,a.kt)("h3",{id:"3023-\u4f7f\u7528\u8131\u654f\u68c0\u6d4b"},"30.2.3 \u4f7f\u7528\u8131\u654f\u68c0\u6d4b"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5b9e\u73b0\u6570\u636e\u9a8c\u8bc1\u8131\u654f\u68c0\u6d4b ",(0,a.kt)("inlineCode",{parentName:"strong"},"[SensitiveDetection]")))),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"[SensitiveDetection]")," \u9a8c\u8bc1\u7279\u6027\uff0c\u53ef\u4ee5\u5bf9\u53c2\u6570\u3001\u5c5e\u6027\u8fdb\u884c\u8131\u654f\u9a8c\u8bc1\uff0c\u7528\u6cd5\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"[DataValidation]")," \u4e00\u81f4\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,9}",showLineNumbers:!0,"":!0,"{4,9}":!0},"// \u5728\u5c5e\u6027\u4e2d\u4f7f\u7528\npublic class Content\n{\n [SensitiveDetection]\n public string Text { get; set; }\n}\n\n// \u5728 \u52a8\u6001API/Controller \u4e2d\u4f7f\u7528\npublic void Test([SensitiveDetection] string text)\n{\n\n}\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"strong"},"ISensitiveDetectionProvider")," \u670d\u52a1\u4f7f\u7528"))),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e5f\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"ISensitiveDetectionProvider")," \u670d\u52a1\u8fdb\u884c\u624b\u52a8\u8131\u654f\u9a8c\u8bc1\u5904\u7406\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,15,25,35}",showLineNumbers:!0,"":!0,"{4,15,25,35}":!0},'public class FurionService\n{\n private readonly ISensitiveDetectionProvider _sensitiveDetectionProvider;\n public FurionService(ISensitiveDetectionProvider sensitiveDetectionProvider)\n {\n _sensitiveDetectionProvider = sensitiveDetectionProvider;\n }\n\n /// \n /// \u83b7\u53d6\u6240\u6709\u8131\u654f\u8bcd\u6c47\n /// \n /// \n public async Task> GetWordsAsync()\n {\n return await _sensitiveDetectionProvider.GetWordsAsync();\n }\n\n /// \n /// \u5224\u65ad\u662f\u5426\u662f\u6b63\u5e38\u7684\u8bcd\u6c47\n /// \n /// \n /// \n public async Task VaildedAsync(string text)\n {\n return await _sensitiveDetectionProvider.VaildedAsync(text);\n }\n\n /// \n /// \u66ff\u6362\u975e\u6b63\u5e38\u8bcd\u6c47\n /// \n /// \n /// \n public async Task ReplaceAsync(string text)\n {\n return await _sensitiveDetectionProvider.ReplaceAsync(text, \'*\');\n }\n}\n')),(0,a.kt)("h3",{id:"3024-\u8131\u654f\u8bcd\u6c47\u66ff\u6362"},"30.2.4 \u8131\u654f\u8bcd\u6c47\u66ff\u6362"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e5f\u63d0\u4f9b\u4e86\u66ff\u6362\u8131\u654f\u8bcd\u6c47\u7684\u7279\u6027\u652f\u6301\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},"// \u5728\u5c5e\u6027\u4e2d\u4f7f\u7528\npublic class Content\n{\n [SensitiveDetection('*')]\n public string Text { get; set; }\n}\n")),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion 3.8.8+")," \u7248\u672c\u540e\u652f\u6301\u65b9\u6cd5\u7279\u6027\u76f4\u63a5\u66ff\u6362"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},"public void Test([SensitiveDetection('*')] string text)\n{\n}\n"))),(0,a.kt)("h2",{id:"303-\u81ea\u5b9a\u4e49\u8131\u654f\u8bcd\u6c47\u5904\u7406"},"30.3 \u81ea\u5b9a\u4e49\u8131\u654f\u8bcd\u6c47\u5904\u7406"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u9664\u4e86\u5185\u7f6e\u4e86\u4e00\u5957\u9ed8\u8ba4\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u8131\u654f\u5904\u7406")," \u7a0b\u5e8f\uff0c\u4e5f\u652f\u6301\u81ea\u5b9a\u4e49\u8131\u654f\u5904\u7406\u7a0b\u5e8f\u3002"),(0,a.kt)("h3",{id:"3031-\u81ea\u5b9a\u4e49-isensitivedetectionprovider-\u7a0b\u5e8f\u5982"},"30.3.1 \u81ea\u5b9a\u4e49 ",(0,a.kt)("inlineCode",{parentName:"h3"},"ISensitiveDetectionProvider")," \u7a0b\u5e8f\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,15,25,36}",showLineNumbers:!0,"":!0,"{4,15,25,36}":!0},'/// \n/// \u81ea\u5b9a\u4e49\u8131\u654f\u8bcd\u6c47\u68c0\u6d4b\u5668\n/// \npublic class YourSensitiveDetectionProvider : ISensitiveDetectionProvider\n{\n // \u652f\u6301\u6784\u9020\u51fd\u6570\u6ce8\u5165\n public YourSensitiveDetectionProvider()\n {\n }\n\n /// \n /// \u8fd4\u56de\u6240\u6709\u8131\u654f\u8bcd\u6c47\n /// \n /// \n public async Task> GetWordsAsync()\n {\n // \u8fd9\u91cc\u5199\u4f60\u8131\u654f\u8bcd\u6c47\u6570\u636e\u7684\u6765\u6e90\uff08\u5982\u4ece\u6570\u636e\u5e93\u8bfb\u53d6\uff09\uff0c\u5efa\u8bae\u505a\u597d\u7f13\u5b58\u64cd\u4f5c\n }\n\n /// \n /// \u5224\u65ad\u8131\u654f\u8bcd\u6c47\u662f\u5426\u6709\u6548\n /// \n /// \n /// \n public async Task VaildedAsync(string text)\n {\n // \u8fd9\u91cc\u5199\u4f60\u5982\u4f55\u5224\u65ad\u662f\u6b63\u5e38\u7684\u5b57\u7b26\uff0c\u8fd4\u56de true \u6b63\u5e38\uff0c\u8fd4\u56de false \u8868\u793a\u662f\u4e2a\u8131\u654f\u8bcd\u6c47\n }\n\n /// \n /// \u66ff\u6362\u8131\u654f\u8bcd\u6c47\n /// \n /// \n /// \n /// \n public async Task ReplaceAsync(string text, char transfer = \'*\')\n {\n // \u8fd9\u91cc\u5199\u4f60\u66ff\u6362\u975e\u6b63\u5e38\u5b57\u7b26\u4e3a\u6307\u5b9a\u5b57\u7b26\n }\n}\n')),(0,a.kt)("h3",{id:"3032-\u6ce8\u518c\u81ea\u5b9a\u4e49\u8131\u654f\u63d0\u4f9b\u5668"},"30.3.2 \u6ce8\u518c\u81ea\u5b9a\u4e49\u8131\u654f\u63d0\u4f9b\u5668"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {3}",showLineNumbers:!0,"":!0,"{3}":!0},"public void ConfigureServices(IServiceCollection services)\n{\n services.AddSensitiveDetection();\n}\n")),(0,a.kt)("p",null,"\u4e4b\u540e\u7cfb\u7edf\u5c06\u81ea\u52a8\u91c7\u7528\u81ea\u5b9a\u4e49\u7684\u65b9\u5f0f\u8fdb\u884c\u8131\u654f\u5904\u7406\u3002"),(0,a.kt)("h2",{id:"304-\u53cd\u9988\u4e0e\u5efa\u8bae"},"30.4 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,a.kt)("hr",null))}v.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/b6492972.53aacb2b.js b/handbook/build/assets/js/b6492972.53aacb2b.js new file mode 100644 index 00000000000..8ce211681fb --- /dev/null +++ b/handbook/build/assets/js/b6492972.53aacb2b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7300],{3905:function(e,t,n){n.d(t,{Zo:function(){return p},kt:function(){return u}});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=i.createContext({}),c=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(n),u=a,C=m["".concat(s,".").concat(u)]||m[u]||d[u]||r;return n?i.createElement(C,o(o({ref:t},p),{},{components:n})):i.createElement(C,o({ref:t},p))}));function u(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var c=2;cPerson",id:"92021-\u521b\u5efa\u5b9e\u4f53\u6a21\u578b-person",level:3},{value:"9.20.2.2 \u6253\u5f00 \u7a0b\u5e8f\u5305\u7ba1\u7406\u63a7\u5236\u53f0",id:"92022-\u6253\u5f00-\u7a0b\u5e8f\u5305\u7ba1\u7406\u63a7\u5236\u53f0",level:3},{value:"9.20.2.3 \u5207\u6362\u9ed8\u8ba4\u9879\u76ee",id:"92023-\u5207\u6362\u9ed8\u8ba4\u9879\u76ee",level:3},{value:"9.20.2.4 \u521b\u5efa\u6a21\u578b\u7248\u672c",id:"92024-\u521b\u5efa\u6a21\u578b\u7248\u672c",level:3},{value:"9.20.2.5 \u66f4\u65b0\u5230\u6570\u636e\u5e93",id:"92025-\u66f4\u65b0\u5230\u6570\u636e\u5e93",level:3},{value:"9.20.3 \u66f4\u65b0\u6a21\u578b",id:"9203-\u66f4\u65b0\u6a21\u578b",level:2},{value:"9.20.4 \u5bfc\u51fa Sql",id:"9204-\u5bfc\u51fa-sql",level:2},{value:"9.20.5 VS Code/Rider/\u4efb\u4f55IDE/\u64cd\u4f5c\u7cfb\u7edf \u65b9\u5f0f",id:"9205-vs-coderider\u4efb\u4f55ide\u64cd\u4f5c\u7cfb\u7edf-\u65b9\u5f0f",level:2},{value:"9.20.5.1 \u5b89\u88c5 dotnet ef",id:"92051-\u5b89\u88c5-dotnet-ef",level:3},{value:"9.20.5.2 cd \u76ee\u5f55",id:"92052-cd-\u76ee\u5f55",level:3},{value:"9.20.5.3 \u6267\u884c\u547d\u4ee4",id:"92053-\u6267\u884c\u547d\u4ee4",level:3},{value:"9.20.6 \u5e94\u7528\u542f\u52a8\u65f6\u81ea\u52a8\u751f\u6210\u6570\u636e\u5e93",id:"9206-\u5e94\u7528\u542f\u52a8\u65f6\u81ea\u52a8\u751f\u6210\u6570\u636e\u5e93",level:2},{value:"9.20.6.1 \u5bf9\u5df2\u7ecf\u751f\u6210 Migrations \u6587\u4ef6\u60c5\u51b5",id:"92061-\u5bf9\u5df2\u7ecf\u751f\u6210-migrations-\u6587\u4ef6\u60c5\u51b5",level:3},{value:"9.20.6.2 \u5982\u679c\u6ca1\u6709\u751f\u6210\u8fc7 Migrations \u6587\u4ef6\u60c5\u51b5",id:"92062-\u5982\u679c\u6ca1\u6709\u751f\u6210\u8fc7-migrations-\u6587\u4ef6\u60c5\u51b5",level:3},{value:"9.20.7 MySql.EntityFrameworkCore \u5728 .NET 6.0.8+ \u95ee\u9898",id:"9207-mysqlentityframeworkcore-\u5728-net-608-\u95ee\u9898",level:2},{value:"9.20.8 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"9208-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],u={toc:m};function C(e){var t=e.components,n=(0,a.Z)(e,l);return(0,r.kt)("wrapper",(0,i.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"\u5f00\u59cb\u4e4b\u524d",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"Fur.Web.Entry")," \u5c42\u9700\u8981\u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"p"},"Microsoft.EntityFrameworkCore.Tools")," \u5305\u3002")),(0,r.kt)("h2",{id:"9201-\u6570\u636e\u5e93\u5f00\u53d1\u65b9\u5f0f"},"9.20.1 \u6570\u636e\u5e93\u5f00\u53d1\u65b9\u5f0f"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e24\u79cd\u4e3b\u8981\u65b9\u6cd5\u6765 ",(0,r.kt)("strong",{parentName:"p"},"\u4fdd\u6301\u5b9e\u4f53\u6a21\u578b\u548c\u6570\u636e\u5e93\u67b6\u6784\u540c\u6b65"),"\u3002"),(0,r.kt)("p",null,"\u81f3\u4e8e\u6211\u4eec\u5e94\u8be5\u9009\u7528\u54ea\u4e2a\u65b9\u6cd5\uff0c\u8bf7\u786e\u5b9a\u4f60\u662f\u5e0c\u671b\u4ee5\u5b9e\u4f53\u6a21\u578b\u4e3a\u51c6\u8fd8\u662f\u4ee5\u6570\u636e\u5e93\u4e3a\u51c6\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"\u5982\u679c\u5e0c\u671b ",(0,r.kt)("strong",{parentName:"p"},"\u4ee5\u5b9e\u4f53\u6a21\u578b\u4e3a\u51c6"),"\uff0c\u8bf7\u4f7f\u7528\u6b63\u5411\u5de5\u7a0b\uff08Code First\uff09\u3002 \u5bf9\u5b9e\u4f53\u6a21\u578b\u8fdb\u884c\u66f4\u6539\u65f6\uff0c\u6b64\u65b9\u6cd5\u4f1a\u4ee5\u589e\u91cf\u65b9\u5f0f\u5c06\u76f8\u5e94\u67b6\u6784\u66f4\u6539\u5e94\u7528\u5230\u6570\u636e\u5e93\uff0c\u4ee5\u4f7f\u6570\u636e\u5e93\u4fdd\u6301\u4e0e\u5b9e\u4f53\u6a21\u578b\u517c\u5bb9\u3002")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"\u5982\u679c\u5e0c\u671b ",(0,r.kt)("strong",{parentName:"p"},"\u4ee5\u6570\u636e\u5e93\u67b6\u6784\u4e3a\u51c6"),"\uff0c\u8bf7\u4f7f\u7528\u53cd\u5411\u5de5\u7a0b\uff08Database First\uff09\u3002 \u4f7f\u7528\u6b64\u65b9\u6cd5\uff0c\u53ef\u901a\u8fc7\u5c06\u6570\u636e\u5e93\u67b6\u6784\u53cd\u5411\u5de5\u7a0b\u5230\u5b9e\u4f53\u6a21\u578b\u6765\u751f\u6210\u76f8\u5e94\u7684\u5b9e\u4f53\u7c7b\u578b\u3002"))),(0,r.kt)("p",null,"\u672c\u7ae0\u8282\u662f ",(0,r.kt)("strong",{parentName:"p"},"\u6b63\u5411\u5de5\u7a0b\uff08Code First\uff09")," \u7684\u76f8\u5173\u5185\u5bb9\u3002"),(0,r.kt)("h2",{id:"9202-\u64cd\u4f5c\u6307\u5357"},"9.20.2 \u64cd\u4f5c\u6307\u5357"),(0,r.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"important"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u9ed8\u8ba4\u6570\u636e\u8fc1\u79fb\u7684\u7a0b\u5e8f\u96c6\u4e3a\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Database.Migrations"),"\uff0c\u6240\u4ee5\u5982\u679c\u60a8\u6539\u4e86\u7a0b\u5e8f\u96c6\u540d\u79f0\u6216\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"Nuget")," \u65b9\u5f0f\u5b89\u88c5\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u5305\uff0c\u5219\u9700\u8981\u914d\u7f6e\u8fc1\u79fb\u7a0b\u5e8f\u96c6\u540d\u79f0\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},'services.AddDatabaseAccessor(options =>\n{\n options.AddDbPool(DbProvider.Sqlite);\n}, "\u5b58\u653e\u8fc1\u79fb\u6587\u4ef6\u7684\u9879\u76ee\u540d\u79f0");\n')),(0,r.kt)("p",{parentName:"admonition"},"\u53e6\u5916\uff0c\u5982\u679c\u5e94\u7528\u4e2d\u914d\u7f6e\u4e86\u591a\u4e2a\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\uff0c\u90a3\u4e48\u6240\u6709\u7684 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u8fc1\u79fb\u547d\u4ee4")," \u90fd\u9700\u8981\u6307\u5b9a ",(0,r.kt)("inlineCode",{parentName:"p"},"-Context \u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u540d\u79f0")," \u53c2\u6570\u3002\u5982\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Add-Migration v1.0.0 -Context FurionDbContext\n"))),(0,r.kt)("h3",{id:"92021-\u521b\u5efa\u5b9e\u4f53\u6a21\u578b-person"},"9.20.2.1 \u521b\u5efa\u5b9e\u4f53\u6a21\u578b ",(0,r.kt)("inlineCode",{parentName:"h3"},"Person")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,6,8}",showLineNumbers:!0,"":!0,"{1,6,8}":!0},"using Furion.DatabaseAccessor;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace Furion.Core\n{\n public class Person : Entity\n {\n /// \n /// \u6784\u9020\u51fd\u6570\n /// \n public Person()\n {\n CreatedTime = DateTime.Now;\n IsDeleted = false;\n }\n\n /// \n /// \u59d3\u540d\n /// \n [MaxLength(32)]\n public string Name { get; set; }\n\n /// \n /// \u5e74\u9f84\n /// \n public int Age { get; set; }\n\n /// \n /// \u4f4f\u5740\n /// \n public string Address { get; set; }\n }\n}\n")),(0,r.kt)("admonition",{title:"\u5b9e\u4f53\u7ea6\u5b9a",type:"important"},(0,r.kt)("p",{parentName:"admonition"},"\u6240\u6709\u6570\u636e\u5e93\u5b9e\u4f53\u5fc5\u987b\u76f4\u63a5\u6216\u95f4\u63a5\u7ee7\u627f ",(0,r.kt)("inlineCode",{parentName:"p"},"IEntity")," \u63a5\u53e3\u3002")),(0,r.kt)("h3",{id:"92022-\u6253\u5f00-\u7a0b\u5e8f\u5305\u7ba1\u7406\u63a7\u5236\u53f0"},"9.20.2.2 \u6253\u5f00 ",(0,r.kt)("inlineCode",{parentName:"h3"},"\u7a0b\u5e8f\u5305\u7ba1\u7406\u63a7\u5236\u53f0")),(0,r.kt)("img",{src:(0,o.Z)("img/dbfirst1.png")}),(0,r.kt)("h3",{id:"92023-\u5207\u6362\u9ed8\u8ba4\u9879\u76ee"},"9.20.2.3 \u5207\u6362\u9ed8\u8ba4\u9879\u76ee"),(0,r.kt)("p",null,"\u5c06 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u7a0b\u5e8f\u5305\u7ba1\u7406\u63a7\u5236\u53f0")," \u9ed8\u8ba4\u9879\u76ee\u8bbe\u7f6e\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Database.Migrations")),(0,r.kt)("img",{src:(0,o.Z)("img/codefirst1.png")}),(0,r.kt)("h3",{id:"92024-\u521b\u5efa\u6a21\u578b\u7248\u672c"},"9.20.2.4 \u521b\u5efa\u6a21\u578b\u7248\u672c"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Add-Migration v1.0.0\n")),(0,r.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("strong",{parentName:"p"},"v1.0.0")," \u662f\u6b64\u5904\u6570\u636e\u5e93\u66f4\u6539\u7684\u7248\u672c\u53f7\uff0c\u53ef\u4ee5\u5199\u4efb\u4f55\u5b57\u7b26\u4e32\uff0c\u4f46\u63a8\u8350\u5199\u7248\u672c\u53f7\uff0c\u6bcf\u6b21 ",(0,r.kt)("strong",{parentName:"p"},"+1"),"\u3002")),(0,r.kt)("p",null,"\u6700\u7ec8\u547d\u4ee4\u5982\u4e0b\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"PM> Add-Migration v1.0.0\nBuild started...\nBuild succeeded.\nMicrosoft.EntityFrameworkCore.Model.Validation[10400]\n Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data, this mode should only be enabled during development.\nMicrosoft.EntityFrameworkCore.Infrastructure[10403]\n Entity Framework Core 5.0.0-rc.1.20451.13 initialized 'FurionDbContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: SensitiveDataLoggingEnabled DetailedErrorsEnabled MaxPoolSize=100 MigrationsAssembly=Furion.Database.Migrations\nTo undo this action, use Remove-Migration.\nPM>\n")),(0,r.kt)("p",null,"\u751f\u6210\u6210\u529f\u540e\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Database.Migrations")," \u9879\u76ee\u4e0b\u4f1a\u65b0\u589e ",(0,r.kt)("inlineCode",{parentName:"p"},"Migrations")," \u6587\u4ef6\u5939\uff08\u5982\u679c\u6ca1\u6709\uff09\uff0c\u540c\u65f6\u672c\u6b21\u7684\u67b6\u6784\u751f\u6210\u6587\u4ef6\uff0c\u5982\uff1a"),(0,r.kt)("img",{src:(0,o.Z)("img/codefirst3.png")}),(0,r.kt)("h3",{id:"92025-\u66f4\u65b0\u5230\u6570\u636e\u5e93"},"9.20.2.5 \u66f4\u65b0\u5230\u6570\u636e\u5e93"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Update-Database\n")),(0,r.kt)("p",null,"\u6267\u884c\u8be5\u547d\u4ee4\u540e\uff0c\u6570\u636e\u5e93\u5c31\u4f1a\u81ea\u52a8\u6839\u636e\u6a21\u578b\u751f\u6210\u5bf9\u5e94\u7684\u8868\u3002"),(0,r.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u5982\u679c ",(0,r.kt)("inlineCode",{parentName:"p"},"Update-Database")," \u540e\u9762\u5e26\u5b57\u7b26\u4e32\u53c2\u6570\uff0c\u5219\u4f1a\u81ea\u52a8\u8fd8\u539f\u6570\u636e\u5e93\u5230\u6307\u5b9a\u7248\u672c\uff0c\u5982\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Update-Database v0.0.3\n")),(0,r.kt)("p",{parentName:"admonition"},"\u5c06\u6570\u636e\u5e93\u8fd8\u539f\u5230 ",(0,r.kt)("inlineCode",{parentName:"p"},"v0.0.3")," \u7248\u672c")),(0,r.kt)("h2",{id:"9203-\u66f4\u65b0\u6a21\u578b"},"9.20.3 \u66f4\u65b0\u6a21\u578b"),(0,r.kt)("p",null,"\u5982\u679c\u6a21\u578b\u6539\u53d8\u4e86\uff0c\u91cd\u590d\u4e0a\u9762\u64cd\u4f5c\u5373\u53ef\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Add-Migration v1.0.1\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Update-Database\n")),(0,r.kt)("h2",{id:"9204-\u5bfc\u51fa-sql"},"9.20.4 \u5bfc\u51fa ",(0,r.kt)("inlineCode",{parentName:"h2"},"Sql")),(0,r.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\uff0c\u6211\u4eec\u6ca1\u6709\u76f4\u63a5\u66f4\u65b0\u6570\u636e\u5e93\u7684\u6743\u9650\uff0c\u6216\u8005\u6015\u51fa\u95ee\u9898\uff0c\u6211\u4eec\u90fd\u4f1a\u5148\u751f\u6210 ",(0,r.kt)("inlineCode",{parentName:"p"},"Sql")," \u770b\u770b\uff0c\u8fd9\u65f6\u5019\u53ea\u9700\u8981\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"Script-Migration")," \u5bfc\u51fa\u5373\u53ef\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"Script-Migration\n")),(0,r.kt)("img",{src:(0,o.Z)("img/codefirst2.png")}),(0,r.kt)("h2",{id:"9205-vs-coderider\u4efb\u4f55ide\u64cd\u4f5c\u7cfb\u7edf-\u65b9\u5f0f"},"9.20.5 ",(0,r.kt)("inlineCode",{parentName:"h2"},"VS Code/Rider/\u4efb\u4f55IDE/\u64cd\u4f5c\u7cfb\u7edf")," \u65b9\u5f0f"),(0,r.kt)("h3",{id:"92051-\u5b89\u88c5-dotnet-ef"},"9.20.5.1 \u5b89\u88c5 ",(0,r.kt)("inlineCode",{parentName:"h3"},"dotnet ef")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet tool install --global dotnet-ef --version 5.0.0-rc.2.20475.6\n")),(0,r.kt)("h3",{id:"92052-cd-\u76ee\u5f55"},"9.20.5.2 ",(0,r.kt)("inlineCode",{parentName:"h3"},"cd")," \u76ee\u5f55"),(0,r.kt)("p",null,"\u901a\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"p"},"VS Code")," \u6253\u5f00 ",(0,r.kt)("inlineCode",{parentName:"p"},".sln")," \u6240\u5728\u7684\u76ee\u5f55\uff0c\u5982\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"framework"),"\u3002"),(0,r.kt)("p",null,"\u4e4b\u540e\u8fdb\u5165 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion.Database.Migrations")," \u76ee\u5f55"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},"cd Furion.Database.Migrations\n")),(0,r.kt)("h3",{id:"92053-\u6267\u884c\u547d\u4ee4"},"9.20.5.3 \u6267\u884c\u547d\u4ee4"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},'dotnet ef migrations add v1.0.0 -s "../Furion.Web.Entry"\n')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell",metastring:"showLineNumbers",showLineNumbers:!0},'dotnet ef database update -s "../Furion.Web.Entry"\n')),(0,r.kt)("h2",{id:"9206-\u5e94\u7528\u542f\u52a8\u65f6\u81ea\u52a8\u751f\u6210\u6570\u636e\u5e93"},"9.20.6 \u5e94\u7528\u542f\u52a8\u65f6\u81ea\u52a8\u751f\u6210\u6570\u636e\u5e93"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u5efa\u8bae\u5927\u5bb6\u4f7f\u7528\u547d\u4ee4\u65b9\u5f0f\u64cd\u4f5c\u6570\u636e\u5e93\uff0c",(0,r.kt)("strong",{parentName:"p"},"\u5b8c\u5168\u4e0d\u63a8\u8350\u81ea\u52a8\u5316\u751f\u6210\u6570\u636e\u5e93"),"\uff0c\u4f46\u662f\u6709\u4e9b\u7279\u6b8a\u60c5\u51b5\u4e0b\uff0c\u6709\u8fd9\u4e2a\u5fc5\u8981\uff0c\u6545\u5c06\u6b64\u529f\u80fd\u5199\u51fa\uff1a"),(0,r.kt)("h3",{id:"92061-\u5bf9\u5df2\u7ecf\u751f\u6210-migrations-\u6587\u4ef6\u60c5\u51b5"},"9.20.6.1 \u5bf9\u5df2\u7ecf\u751f\u6210 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Migrations")," \u6587\u4ef6\u60c5\u51b5"),(0,r.kt)("p",null,"\u5982\u679c\u5df2\u7ecf\u751f\u6210 ",(0,r.kt)("inlineCode",{parentName:"p"},"Migrations")," \u6587\u4ef6\uff0c\u90a3\u4e48\u53ef\u4ee5\u76f4\u63a5\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4ee3\u7801\u4e2d\u5b9e\u73b0\u7a0b\u5e8f\u542f\u52a8\u65f6\u81ea\u52a8\u6267\u884c ",(0,r.kt)("inlineCode",{parentName:"p"},"update-database")," \u547d\u4ee4\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4,6,8-9}",showLineNumbers:!0,"":!0,"{1,4,6,8-9}":!0},"public void Configure(IApplicationBuilder app, IHostingEnvironment env)\n{\n // \u5224\u65ad\u5f00\u53d1\u73af\u5883\uff01\uff01\uff01\u5fc5\u987b\uff01\uff01\uff01\uff01\n if (env.IsDevelopment())\n {\n Scoped.Create((_, scope) =>\n {\n var context = scope.ServiceProvider.GetRequiredService();\n context.Database.Migrate();\n });\n }\n\n // \u5176\u4ed6\u4ee3\u7801\n}\n")),(0,r.kt)("h3",{id:"92062-\u5982\u679c\u6ca1\u6709\u751f\u6210\u8fc7-migrations-\u6587\u4ef6\u60c5\u51b5"},"9.20.6.2 \u5982\u679c\u6ca1\u6709\u751f\u6210\u8fc7 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Migrations")," \u6587\u4ef6\u60c5\u51b5"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4,6,8-9}",showLineNumbers:!0,"":!0,"{1,4,6,8-9}":!0},"public void Configure(IApplicationBuilder app, IHostingEnvironment env)\n{\n // \u5224\u65ad\u5f00\u53d1\u73af\u5883\uff01\uff01\uff01\u5fc5\u987b\uff01\uff01\uff01\uff01\n if (env.IsDevelopment())\n {\n Scoped.Create((_, scope) =>\n {\n var context = scope.ServiceProvider.GetRequiredService();\n context.Database.EnsureCreated();\n });\n }\n\n // \u5176\u4ed6\u4ee3\u7801\n}\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u5982\u679c\u9700\u8981\u5728\u521b\u5efa\u6570\u636e\u5e93\u4e4b\u524d\u5148\u5220\u9664\u65e7\u7684\uff0c\u53ef\u5148\u8c03\u7528 ",(0,r.kt)("inlineCode",{parentName:"strong"},"context.Database.EnsureDeleted();")," \u4ee3\u7801\u3002\u614e\u91cd\uff01\uff01\uff01\uff01\uff01\uff01\uff01\uff01\uff01\uff01\uff01\uff01")),(0,r.kt)("h2",{id:"9207-mysqlentityframeworkcore-\u5728-net-608-\u95ee\u9898"},"9.20.7 ",(0,r.kt)("inlineCode",{parentName:"h2"},"MySql.EntityFrameworkCore")," \u5728 ",(0,r.kt)("inlineCode",{parentName:"h2"},".NET 6.0.8+")," \u95ee\u9898"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},".NET 6.0.8+")," \u7248\u672c\uff0c\u5fae\u8f6f\u5e95\u5c42\u4fee\u6539\u4e86 ",(0,r.kt)("inlineCode",{parentName:"p"},"IDesignTimeServices")," \u903b\u8f91\u5bfc\u81f4 ",(0,r.kt)("inlineCode",{parentName:"p"},"MySql.EntityFrameworkCore")," \u7248\u672c\u6ca1\u6709\u53ca\u65f6\u66f4\u65b0\u5bfc\u81f4\u4e00\u4e0b\u9519\u8bef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers {51}",showLineNumbers:!0,"{51}":!0},"PM> Add-Migration v0.0.1\nBuild started...\nBuild succeeded.\nMicrosoft.EntityFrameworkCore.Model.Validation[10400]\n Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data; this mode should only be enabled during development.\nMicrosoft.EntityFrameworkCore.Infrastructure[10403]\n Entity Framework Core 6.0.8 initialized 'DefaultDbContext' using provider 'MySql.EntityFrameworkCore:6.0.4+MySQL8.0.30' with options: SensitiveDataLoggingEnabled DetailedErrorsEnabled MaxPoolSize=100 MigrationsAssembly=Furion.TestMS.Database.Migrations \nSystem.InvalidOperationException: Unable to resolve service for type 'Microsoft.EntityFrameworkCore.Storage.TypeMappingSourceDependencies' while attempting to activate 'MySql.EntityFrameworkCore.Storage.Internal.MySQLTypeMappingSource'.\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateEnumerable(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)\n at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType)\n at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)\n at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)\n at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)\n at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)\n at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)\n at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType, String namespace)\n at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType, String namespace)\n at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_0.<.ctor>b__0()\n at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.b__0()\n at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)\nUnable to resolve service for type 'Microsoft.EntityFrameworkCore.Storage.TypeMappingSourceDependencies' while attempting to activate 'MySql.EntityFrameworkCore.Storage.Internal.MySQLTypeMappingSource'.\nPM> \n")),(0,r.kt)("p",null,"\u89e3\u51b3\u529e\u6cd5\u4e5f\u5f88\u7b80\u5355\uff0c\u53ea\u9700\u8981\u5728\u542f\u52a8\u5c42\u6dfb\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"MysqlEntityFrameworkDesignTimeServices.cs")," \u5e76\u5199\u5165\u4ee5\u4e0b\u5185\u5bb9\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4,6}",showLineNumbers:!0,"{4,6}":!0},"using Microsoft.EntityFrameworkCore.Design;\nusing MySql.EntityFrameworkCore.Extensions;\n\nnamespace YourProject.Web.Entry;\n\npublic class MysqlEntityFrameworkDesignTimeServices : IDesignTimeServices\n{\n public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)\n {\n serviceCollection.AddEntityFrameworkMySQL();\n new EntityFrameworkRelationalDesignServicesBuilder(serviceCollection)\n .TryAddCoreServices();\n }\n}\n")),(0,r.kt)("p",null,"\u76f8\u5173 ",(0,r.kt)("inlineCode",{parentName:"p"},"Issue")," \u8ba8\u8bba\uff1a",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/I5O5ER"},"https://gitee.com/dotnetchina/Furion/issues/I5O5ER")),(0,r.kt)("h2",{id:"9208-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.20.8 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,r.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,r.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,r.kt)("hr",null),(0,r.kt)("admonition",{title:"\u4e86\u89e3\u66f4\u591a",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a ",(0,r.kt)("inlineCode",{parentName:"p"},"\u6b63\u5411\u5de5\u5382")," \u77e5\u8bc6\u53ef\u67e5\u9605 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/ef/core/managing-schemas/migrations/?tabs=dotnet-core-cli"},"EF Core - \u7ba1\u7406\u6570\u636e\u5e93\u67b6\u6784")," \u7ae0\u8282\u3002")))}C.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/b753a5b5.325847ca.js b/handbook/build/assets/js/b753a5b5.325847ca.js new file mode 100644 index 00000000000..59db421e218 --- /dev/null +++ b/handbook/build/assets/js/b753a5b5.325847ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4954],{3905:function(e,n,t){t.d(n,{Zo:function(){return u},kt:function(){return c}});var r=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=r.createContext({}),d=function(e){var n=r.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=d(e.components);return r.createElement(s.Provider,{value:n},e.children)},p={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=d(t),c=a,N=m["".concat(s,".").concat(c)]||m[c]||p[c]||i;return t?r.createElement(N,o(o({ref:n},u),{},{components:t})):r.createElement(N,o({ref:n},u))}));function c(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,o=new Array(i);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var d=2;dSql",id:"9151-\u5173\u4e8e-sql",level:2},{value:"9.15.2 \u61d2\u4eba\u65e0\u654c Sql \ud83d\udc2e",id:"9152-\u61d2\u4eba\u65e0\u654c-sql-",level:2},{value:"9.15.2.1 \u8fd4\u56de DataTable",id:"91521-\u8fd4\u56de-datatable",level:3},{value:"9.15.2.2 \u8fd4\u56de List<T>",id:"91522-\u8fd4\u56de-listt",level:3},{value:"9.15.2.3 \u8fd4\u56de DataSet",id:"91523-\u8fd4\u56de-dataset",level:3},{value:"9.15.2.4 \u8fd4\u56de Tuple<T1,...T8>",id:"91524-\u8fd4\u56de-tuplet1t8",level:3},{value:"9.15.2.5 \u8fd4\u56de \u5355\u884c\u5355\u5217",id:"91525-\u8fd4\u56de-\u5355\u884c\u5355\u5217",level:3},{value:"9.15.2.6 \u8fd4\u56de \u53d7\u5f71\u54cd\u884c\u6570",id:"91526-\u8fd4\u56de-\u53d7\u5f71\u54cd\u884c\u6570",level:3},{value:"9.15.3 \u61d2\u4eba\u65e0\u654c \u5b58\u50a8\u8fc7\u7a0b \ud83d\udc2e",id:"9153-\u61d2\u4eba\u65e0\u654c-\u5b58\u50a8\u8fc7\u7a0b-",level:2},{value:"9.15.3.1 \u8fd4\u56de DataTable",id:"91531-\u8fd4\u56de-datatable",level:3},{value:"9.15.3.2 \u8fd4\u56de List<T>",id:"91532-\u8fd4\u56de-listt",level:3},{value:"9.15.3.3 \u8fd4\u56de DataSet",id:"91533-\u8fd4\u56de-dataset",level:3},{value:"9.15.3.4 \u8fd4\u56de Tuple<T1,...T8>",id:"91534-\u8fd4\u56de-tuplet1t8",level:3},{value:"9.15.3.5 \u8fd4\u56de \u5355\u884c\u5355\u5217",id:"91535-\u8fd4\u56de-\u5355\u884c\u5355\u5217",level:3},{value:"9.15.3.6 \u8fd4\u56de \u53d7\u5f71\u54cd\u884c\u6570",id:"91536-\u8fd4\u56de-\u53d7\u5f71\u54cd\u884c\u6570",level:3},{value:"9.15.3.7 \u5e26 OUTPUT/RETURN \u8fd4\u56de",id:"91537-\u5e26-outputreturn-\u8fd4\u56de",level:3},{value:"9.15.4 \u61d2\u4eba\u65e0\u654c \u51fd\u6570 \ud83d\udc2e",id:"9154-\u61d2\u4eba\u65e0\u654c-\u51fd\u6570-",level:2},{value:"9.15.4.1 \u6807\u91cf\u51fd\u6570",id:"91541-\u6807\u91cf\u51fd\u6570",level:3},{value:"9.15.4.2 \u8868\u503c\u51fd\u6570",id:"91542-\u8868\u503c\u51fd\u6570",level:3},{value:"9.15.5 \u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4",id:"9155-\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4",level:2},{value:"9.15.6 ISqlRepository \u64cd\u4f5c",id:"9156-isqlrepository-\u64cd\u4f5c",level:2},{value:"9.15.7 IRepository \u64cd\u4f5c",id:"9157-irepository-\u64cd\u4f5c",level:2},{value:"9.15.8 IRepository<TEntity> \u64cd\u4f5c",id:"9158-irepositorytentity-\u64cd\u4f5c",level:2},{value:"9.15.9 \u5173\u4e8e Sql \u53c2\u6570",id:"9159-\u5173\u4e8e-sql-\u53c2\u6570",level:2},{value:"9.15.10 \u591a\u6570\u636e\u5e93 Sql \u64cd\u4f5c \ud83d\udcaf \ud83d\udc9b",id:"91510-\u591a\u6570\u636e\u5e93-sql-\u64cd\u4f5c--",level:2},{value:"9.15.10.1 \u61d2\u4eba\u65e0\u654c \ud83d\udc2e \u65b9\u5f0f",id:"915101-\u61d2\u4eba\u65e0\u654c--\u65b9\u5f0f",level:3},{value:"9.15.10.2 ISqlRepository \u65b9\u5f0f",id:"915102-isqlrepository-\u65b9\u5f0f",level:3},{value:"9.15.10.3 IRepository \u65b9\u5f0f",id:"915103-irepository-\u65b9\u5f0f",level:3},{value:"9.15.10.4 IRepository<TEntity> \u65b9\u5f0f",id:"915104-irepositorytentity-\u65b9\u5f0f",level:3},{value:"9.15.11 \u5207\u6362\u6570\u636e\u5e93",id:"91511-\u5207\u6362\u6570\u636e\u5e93",level:2},{value:"9.15.12 \u591a\u7ebf\u7a0b\u5171\u4eab\u4f5c\u7528\u57df",id:"91512-\u591a\u7ebf\u7a0b\u5171\u4eab\u4f5c\u7528\u57df",level:2},{value:"9.15.13 \u9759\u6001 Default \u65b9\u5f0f\u6784\u5efa",id:"91513-\u9759\u6001-default-\u65b9\u5f0f\u6784\u5efa",level:2},{value:"9.15.14 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"91514-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],m={toc:p};function c(e){var n=e.components,t=(0,a.Z)(e,o);return(0,i.kt)("wrapper",(0,r.Z)({},m,t,{components:n,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"\u6e29\u99a8\u63d0\u793a",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u63a8\u8350\u4f7f\u7528 \u300a",(0,i.kt)("a",{parentName:"p",href:"/docs/dbcontext-sql-proxy"},"9.17 Sql \u9ad8\u7ea7\u4ee3\u7406"),"\u300b\u4ee3\u66ff\u672c\u7ae0\u8282\u529f\u80fd\u3002",(0,i.kt)("inlineCode",{parentName:"p"},"Sql \u9ad8\u7ea7\u4ee3\u7406")," \u80fd\u591f\u63d0\u4f9b\u66f4\u5bb9\u6613\u4e14\u66f4\u6613\u7ef4\u62a4\u7684\u65b9\u5f0f\u3002")),(0,i.kt)("admonition",{title:"\u4f8b\u5b50\u8bf4\u660e",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u672c\u7ae0\u8282\u4f8b\u5b50\u5747\u4ee5 ",(0,i.kt)("inlineCode",{parentName:"p"},"sql server")," \u6570\u636e\u5e93\u5199\u7684\u4f8b\u5b50\uff0c\u547d\u4ee4\u53c2\u6570\u7edf\u4e00\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"@")," \u7b26\u53f7\uff0c\u4f46\u4e0d\u540c\u6570\u636e\u5e93\u7684\u53c2\u6570\u524d\u7f00\u6709\u6240\u4e0d\u540c\uff0c\u5982\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"sql server")," \u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"@"),"\uff0coracle \u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},":"),"\uff0cmy sql \u91c7\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"?"),"\u3002")),(0,i.kt)("h2",{id:"9151-\u5173\u4e8e-sql"},"9.15.1 \u5173\u4e8e ",(0,i.kt)("inlineCode",{parentName:"h2"},"Sql")),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u975e\u5e38\u591a\u4e14\u7075\u6d3b\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"sql")," \u64cd\u4f5c\u65b9\u6cd5\uff0c\u4e14\u6027\u80fd\u4e0d\u8f93\u4e8e ",(0,i.kt)("inlineCode",{parentName:"p"},"dapper"),"\uff0c\u540c\u65f6\u903c\u8fd1 ",(0,i.kt)("inlineCode",{parentName:"p"},"ADO.NET")," \u539f\u751f\u64cd\u4f5c\u3002"),(0,i.kt)("h2",{id:"9152-\u61d2\u4eba\u65e0\u654c-sql-"},"9.15.2 \u61d2\u4eba\u65e0\u654c ",(0,i.kt)("inlineCode",{parentName:"h2"},"Sql")," \ud83d\udc2e"),(0,i.kt)("h3",{id:"91521-\u8fd4\u56de-datatable"},"9.15.2.1 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"DataTable")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar dataTable = "select * from person".SqlQuery();\n\n// \u793a\u4f8b\u4e8c\nvar dataTable = "select top 10 * from person where id > @id".SqlQuery(new {id = 10});\n\n// \u793a\u4f8b\u4e09\nvar dataTable = "select Id, Name, Age from person where name like @name".SqlQuery(new Dictionary{ {"name", "%Furion%"} });\n\n// \u793a\u4f8b\u56db\nvar dataTable = "select * from person where name=@name limit 1,10".SqlQuery(new []{ new MySqlParameter("name","Furion") });\n\n// \u793a\u4f8b\u4e94\nvar dataTable = "select * from person where id>@id and name like @name".SqlQuery(new YourModel { Id = 1, Name = "%Furion%" });\n\n// \u793a\u4f8b\u516d\nvar dataTable = "exec PROC_GetPerson @id".SqlQuery(new {id = 10});\n\n// \u793a\u4f8b\u4e03\nvar dataTable = "select * from FN_GetPersons(@id)".SqlQuery(new {id = 10});\n\n// \u793a\u4f8b\u516b\nvar dataTable = @"\nselect * from person p\nleft join personDetail pd on p.Id == pd.pid\nwhere p.Id > @id;".SqlQuery(new {id = 10});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar dataTable = await "select * from person".SqlQueryAsync();\n\n// \u793a\u4f8b\u4e8c\nvar dataTable = await "select top 10 * from person where id > @id".SqlQueryAsync(new {id = 10});\n\n// \u793a\u4f8b\u4e09\nvar dataTable = await "select Id, Name, Age from person where name like @name".SqlQueryAsync(new Dictionary{ {"name", "%Furion%"} });\n\n// \u793a\u4f8b\u56db\nvar dataTable = await "select * from person where name=@name limit 1,10".SqlQueryAsync(new []{ new MySqlParameter("name","Furion") });\n\n// \u793a\u4f8b\u4e94\nvar dataTable = await "select * from person where id>@id and name like @name".SqlQueryAsync(new YourModel { Id = 1, Name = "%Furion%" });\n\n// \u793a\u4f8b\u516d\nvar dataTable = await "exec PROC_GetPerson @id".SqlQueryAsync(new {id = 10});\n\n// \u793a\u4f8b\u4e03\nvar dataTable = await "select * from FN_GetPersons(@id)".SqlQueryAsync(new {id = 10});\n\n// \u793a\u4f8b\u516b\nvar dataTable = await @"\nselect * from person p\nleft join personDetail pd on p.Id == pd.pid\nwhere p.Id > @id;".SqlQueryAsync(new {id = 10});\n')),(0,i.kt)("h3",{id:"91522-\u8fd4\u56de-listt"},"9.15.2.2 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"List")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar persons = "select * from person".SqlQuery();\n\n// \u793a\u4f8b\u4e8c\nvar persons = "select top 10 * from person where id > @id".SqlQuery(new {id = 10});\n\n// \u793a\u4f8b\u4e09\nvar persons = "select Id, Name, Age from person where name like @name".SqlQuery(new Dictionary{ {"name", "%Furion%"} });\n\n// \u793a\u4f8b\u56db\nvar persons = "select * from person where name=@name limit 1,10".SqlQuery(new []{ new MySqlParameter("name","Furion") });\n\n// \u793a\u4f8b\u4e94\nvar persons = "select * from person where id>@id and name like @name".SqlQuery(new YourModel { Id = 1, Name = "%Furion%" });\n\n// \u793a\u4f8b\u516d\nvar persons = "exec PROC_GetPerson @id".SqlQuery(new {id = 10});\n\n// \u793a\u4f8b\u4e03\nvar persons = "select * from FN_GetPersons(@id)".SqlQuery(new {id = 10});\n\n// \u793a\u4f8b\u516b\nvar persons = @"\nselect * from person p\nleft join personDetail pd on p.Id == pd.pid\nwhere p.Id > @id;".SqlQuery(new {id = 10});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar persons = await "select * from person".SqlQueryAsync();\n\n// \u793a\u4f8b\u4e8c\nvar persons = await "select top 10 * from person where id > @id".SqlQueryAsync(new {id = 10});\n\n// \u793a\u4f8b\u4e09\nvar persons = await "select Id, Name, Age from person where name like @name".SqlQueryAsync(new Dictionary{ {"name", "%Furion%"} });\n\n// \u793a\u4f8b\u56db\nvar persons = await "select * from person where name=@name limit 1,10".SqlQueryAsync(new []{ new MySqlParameter("name","Furion") });\n\n// \u793a\u4f8b\u4e94\nvar persons = await "select * from person where id>@id and name like @name".SqlQueryAsync(new YourModel { Id = 1, Name = "%Furion%" });\n\n// \u793a\u4f8b\u516d\nvar persons = await "exec PROC_GetPerson @id".SqlQueryAsync(new {id = 10});\n\n// \u793a\u4f8b\u4e03\nvar persons = await "select * from FN_GetPersons(@id)".SqlQueryAsync(new {id = 10});\n\n// \u793a\u4f8b\u516b\nvar persons = await @"\nselect * from person p\nleft join personDetail pd on p.Id == pd.pid\nwhere p.Id > @id;".SqlQueryAsync(new {id = 10});\n')),(0,i.kt)("h3",{id:"91523-\u8fd4\u56de-dataset"},"9.15.2.3 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"DataSet")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar dataSet = @"\nselect * from person;\nselect * from student;".SqlQueries();\n\n// \u793a\u4f8b\u4e8c\nvar dataSet = @"\nselect * from person where Id > @id;\nselect * from student where Name like @name;".SqlQueries(new {id = 1, name = "%furion%"});\n\n// \u793a\u4f8b\u4e09\nvar dataSet = @"\nselect * from person;\nexec PROC_GetStudents(@id);\nselect \'Furion\';\nselect * from FN_GetPerson(@id);".SqlQueries(new {id = 1});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar dataSet = await @"\nselect * from person;\nselect * from student;".SqlQueriesAsync();\n\n// \u793a\u4f8b\u4e8c\nvar dataSet = await @"\nselect * from person where Id > @id;\nselect * from student where Name like @name;".SqlQueriesAsync(new {id = 1, name = "%furion%"});\n\n// \u793a\u4f8b\u4e09\nvar dataSet = await @"\nselect * from person;\nexec PROC_GetStudents(@id);\nselect \'Furion\';\nselect * from FN_GetPerson(@id);".SqlQueriesAsync(new {id = 1});\n')),(0,i.kt)("h3",{id:"91524-\u8fd4\u56de-tuplet1t8"},"9.15.2.4 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"Tuple")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar (persons, students) = @"\nselect * from person;\nselect * from student;".SqlQueries();\n\n// \u793a\u4f8b\u4e8c\nvar (persons, students) = @"\nselect * from person where Id > @id;\nselect * from student where Name like @name;".SqlQueries(new {id = 1, name = "%furion%"});\n\n// \u793a\u4f8b\u4e09\nvar (persons, students, string, PersonDto) = @"\nselect * from person;\nexec PROC_GetStudents(@id);\nselect \'Furion\';\nselect * from FN_GetPerson(@id);".SqlQueries(new {id = 1});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar (persons, students) = await @"\nselect * from person;\nselect * from student;".SqlQueriesAsync();\n\n// \u793a\u4f8b\u4e8c\nvar (persons, students) = await @"\nselect * from person where Id > @id;\nselect * from student where Name like @name;".SqlQueriesAsync(new {id = 1, name = "%furion%"});\n\n// \u793a\u4f8b\u4e09\nvar (persons, students, string, PersonDto) = await @"\nselect * from person;\nexec PROC_GetStudents(@id);\nselect \'Furion\';\nselect * from FN_GetPerson(@id);".SqlQueriesAsync(new {id = 1});\n')),(0,i.kt)("h3",{id:"91525-\u8fd4\u56de-\u5355\u884c\u5355\u5217"},"9.15.2.5 \u8fd4\u56de \u5355\u884c\u5355\u5217"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar value = "select Name from person where id = @id".SqlScalar(new {id = 1});\n\n// \u793a\u4f8b\u4e8c\nvar value = "select Name from person where id = @id".SqlScalar(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar value = "select Age from person where id = @id".SqlScalar(new {id = 1});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar value = await "select Name from person where id = @id".SqlScalarAsync(new {id = 1});\n\n// \u793a\u4f8b\u4e8c\nvar value = await "select Name from person where id = @id".SqlScalarAsync(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar value = await "select Age from person where id = @id".SqlScalarAsync(new {id = 1});\n')),(0,i.kt)("h3",{id:"91526-\u8fd4\u56de-\u53d7\u5f71\u54cd\u884c\u6570"},"9.15.2.6 \u8fd4\u56de \u53d7\u5f71\u54cd\u884c\u6570"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar rowEffects = "insert into person(Name,Age,Address) values(@name,@age,@address)".SqlNonQuery(person);\n\n// \u793a\u4f8b\u4e8c\nvar rowEffects = @"\ninsert into person(Name,Age,Address) values(@name,@age,@address);\ninsert into person(Name,Age,Address) values(@name,@age,@address);".SqlNonQuery(persons);\n\n// \u793a\u4f8b\u4e09\nvar rowEffects = "update person set name=@name where id=@id".SqlNonQuery(new {id=1, name="\u767e\u5c0f\u50e7"});\n\n// \u793a\u4f8b\u56db\nvar rowEffects = "delete from person where @id > 10".SqlNonQuery(new {id=1});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar rowEffects = await "insert into person(Name,Age,Address) values(@name,@age,@address)".SqlNonQueryAsync(person);\n\n// \u793a\u4f8b\u4e8c\nvar rowEffects = @"\ninsert into person(Name,Age,Address) values(@name,@age,@address);\ninsert into person(Name,Age,Address) values(@name,@age,@address);".SqlNonQueryAsync(persons);\n\n// \u793a\u4f8b\u4e09\nvar rowEffects = await "update person set name=@name where id=@id".SqlNonQueryAsync(new {id=1, name="\u767e\u5c0f\u50e7"});\n\n// \u793a\u4f8b\u56db\nvar rowEffects = await "delete from person where @id > 10".SqlNonQueryAsync(new {id=1});\n')),(0,i.kt)("h2",{id:"9153-\u61d2\u4eba\u65e0\u654c-\u5b58\u50a8\u8fc7\u7a0b-"},"9.15.3 \u61d2\u4eba\u65e0\u654c ",(0,i.kt)("inlineCode",{parentName:"h2"},"\u5b58\u50a8\u8fc7\u7a0b")," \ud83d\udc2e"),(0,i.kt)("h3",{id:"91531-\u8fd4\u56de-datatable"},"9.15.3.1 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"DataTable")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar dataTable = "PROC_Name".SqlProcedureQuery();\n\n// \u793a\u4f8b\u4e8c\nvar dataTable = "PROC_Name".SqlProcedureQuery(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar dataTable = "PROC_Name".SqlProcedureQuery(new {id = 1, age = 27});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar dataTable = await "PROC_Name".SqlProcedureQueryAsync();\n\n// \u793a\u4f8b\u4e8c\nvar dataTable = await "PROC_Name".SqlProcedureQueryAsync(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar dataTable = await "PROC_Name".SqlProcedureQueryAsync(new {id = 1, age = 27});\n')),(0,i.kt)("h3",{id:"91532-\u8fd4\u56de-listt"},"9.15.3.2 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"List")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar persons = "PROC_Name".SqlProcedureQuery();\n\n// \u793a\u4f8b\u4e8c\nvar persons = "PROC_Name".SqlProcedureQuery(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar persons = "PROC_Name".SqlProcedureQuery(new {id = 1, age = 27});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar persons = await "PROC_Name".SqlProcedureQueryAsync();\n\n// \u793a\u4f8b\u4e8c\nvar persons = await "PROC_Name".SqlProcedureQueryAsync(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar persons = await "PROC_Name".SqlProcedureQueryAsync(new {id = 1, age = 27});\n')),(0,i.kt)("h3",{id:"91533-\u8fd4\u56de-dataset"},"9.15.3.3 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"DataSet")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar dataSet = "PROC_Name".SqlProcedureQueries();\n\n// \u793a\u4f8b\u4e8c\nvar dataSet = "PROC_Name".SqlProcedureQueries(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar dataSet = "PROC_Name".SqlProcedureQueries(new {id = 1, age = 27});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar dataSet = await "PROC_Name".SqlProcedureQueriesAsync();\n\n// \u793a\u4f8b\u4e8c\nvar dataSet = await "PROC_Name".SqlProcedureQueriesAsync(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar dataSet = await "PROC_Name".SqlProcedureQueriesAsync(new {id = 1, age = 27});\n')),(0,i.kt)("h3",{id:"91534-\u8fd4\u56de-tuplet1t8"},"9.15.3.4 \u8fd4\u56de ",(0,i.kt)("inlineCode",{parentName:"h3"},"Tuple")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar persons = "PROC_Name".SqlProcedureQueries();\n\n// \u793a\u4f8b\u4e8c\nvar (persons,students) = "PROC_Name".SqlProcedureQueries(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar (persons,students,string) = "PROC_Name".SqlProcedureQueries(new {id = 1, age = 27});\n\n// \u793a\u4f8b\u56db\nvar (persons,students,personDetail,string) = "PROC_Name".SqlProcedureQueries(new {id = 1, age = 27});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar persons = await "PROC_Name".SqlProcedureQueriesAsync();\n\n// \u793a\u4f8b\u4e8c\nvar (persons,students) = await "PROC_Name".SqlProcedureQueriesAsync(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar (persons,students,string) = await "PROC_Name".SqlProcedureQueriesAsync(new {id = 1, age = 27});\n\n// \u793a\u4f8b\u56db\nvar (persons,students,personDetail,string) = await "PROC_Name".SqlProcedureQueriesAsync(new {id = 1, age = 27});\n')),(0,i.kt)("h3",{id:"91535-\u8fd4\u56de-\u5355\u884c\u5355\u5217"},"9.15.3.5 \u8fd4\u56de \u5355\u884c\u5355\u5217"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar value = "PROC_Name".SqlProcedureScalar(new {id = 1});\n\n// \u793a\u4f8b\u4e8c\nvar value = "PROC_Name".SqlProcedureScalar(new {id = 1, name = "\u65b0\u751f\u5e1d", address ="\u5e7f\u4e1c\u7701\u4e2d\u5c71\u5e02"});\n\n// \u793a\u4f8b\u4e09\nvar value = "PROC_Name".SqlProcedureScalar(new {id = 1, address ="\u5e7f\u4e1c\u7701\u4e2d\u5c71\u5e02"});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar value = await "PROC_Name".SqlProcedureScalarAsync(new {id = 1});\n\n// \u793a\u4f8b\u4e8c\nvar value = await "PROC_Name".SqlProcedureScalarAsync(new {id = 1, name = "\u65b0\u751f\u5e1d", address ="\u5e7f\u4e1c\u7701\u4e2d\u5c71\u5e02"});\n\n// \u793a\u4f8b\u4e09\nvar value = await "PROC_Name".SqlProcedureScalarAsync(new {id = 1, address ="\u5e7f\u4e1c\u7701\u4e2d\u5c71\u5e02"});\n')),(0,i.kt)("h3",{id:"91536-\u8fd4\u56de-\u53d7\u5f71\u54cd\u884c\u6570"},"9.15.3.6 \u8fd4\u56de \u53d7\u5f71\u54cd\u884c\u6570"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar rowEffects = "PROC_Name".SqlProcedureNonQuery(person);\n\n// \u793a\u4f8b\u4e8c\nvar rowEffects = "PROC_Name".SqlProcedureNonQuery(new {id = 1, name = "\u65b0\u751f\u5e1d", address ="\u5e7f\u4e1c\u7701\u4e2d\u5c71\u5e02"});\n\n// \u793a\u4f8b\u4e09\nvar rowEffects = "PROC_Name".SqlProcedureNonQuery(new {id=1, name="\u767e\u5c0f\u50e7"});\n\n// \u793a\u4f8b\u56db\nvar rowEffects = "PROC_Name".SqlProcedureNonQuery(new {id=1});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar rowEffects = await "PROC_Name".SqlProcedureNonQueryAsync(person);\n\n// \u793a\u4f8b\u4e8c\nvar rowEffects = await "PROC_Name".SqlProcedureNonQueryAsync(new {id = 1, name = "\u65b0\u751f\u5e1d", address ="\u5e7f\u4e1c\u7701\u4e2d\u5c71\u5e02"});\n\n// \u793a\u4f8b\u4e09\nvar rowEffects = await "PROC_Name".SqlProcedureNonQueryAsync(new {id=1, name="\u767e\u5c0f\u50e7"});\n\n// \u793a\u4f8b\u56db\nvar rowEffects = await "PROC_Name".SqlProcedureNonQueryAsync(new {id=1});\n')),(0,i.kt)("h3",{id:"91537-\u5e26-outputreturn-\u8fd4\u56de"},"9.15.3.7 \u5e26 ",(0,i.kt)("inlineCode",{parentName:"h3"},"OUTPUT/RETURN")," \u8fd4\u56de"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-sql",metastring:"showLineNumbers {3,4,10-12,15-17,22}",showLineNumbers:!0,"":!0,"{3,4,10-12,15-17,22}":!0},"CREATE PROC PROC_Output\n @Id INT, // \u8f93\u5165\u53c2\u6570\n @Name NVARCHAR(32) OUTPUT, // \u8f93\u51fa\u53c2\u6570\uff0c\u8fd8\u5e26\u957f\u5ea6\n @Age INT OUTPUT // \u8f93\u51fa\u53c2\u6570\nAS\nBEGIN\n SET @Name = 'Furion Output';\n\n // \u8f93\u51fa\u7ed3\u679c\u96c6\n SELECT *\n FROM dbo.Test\n WHERE Id > @Id;\n\n // \u8f93\u51fa\u7ed3\u679c\u96c6\n SELECT TOP 10\n *\n FROM dbo.Test;\n\n SET @Age = 27;\n\n // \u5e26 RETURN \u8fd4\u56de\n RETURN 10;\nEND;\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,10,13,16}",showLineNumbers:!0,"":!0,"{1,10,13,16}":!0},"using Furion.DatabaseAccessor;\nusing System.Data;\n\nnamespace Furion.Application\n{\n public class ProcOutputModel\n {\n public int Id { get; set; } // \u8f93\u5165\u53c2\u6570\n\n [DbParameter(ParameterDirection.Output, Size = 32)]\n public string Name { get; set; } // \u8f93\u51fa\u53c2\u6570\n\n [DbParameter(ParameterDirection.Output)]\n public int Age { get; set; } // \u8f93\u51fa\u53c2\u6570\n\n [DbParameter(ParameterDirection.ReturnValue)]\n public int ReturnValue { get; set; } // \u8fd4\u56de\u503c\n }\n}\n")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nProcedureOutputResult result = "PROC_Name".SqlProcedureOutput(new ProcOutputModel{ Id=1});\n\n// \u793a\u4f8b\u4e8c\nProcedureOutputResult result = "PROC_Name".SqlProcedureOutput(new ProcOutputModel{ Id=1});\n\n// \u793a\u4f8b\u4e09\nProcedureOutputResult<(List, List)> result = "PROC_Name".SqlProcedureOutput<(List, List)>(new ProcOutputModel{ Id=1});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n// \u793a\u4f8b\u4e00\nProcedureOutputResult result = await "PROC_Name".SqlProcedureOutputAsync(new ProcOutputModel{ Id=1});\n\n// \u793a\u4f8b\u4e8c\nProcedureOutputResult result = await "PROC_Name".SqlProcedureOutputAsync(new ProcOutputModel{ Id=1});\n\n// \u793a\u4f8b\u4e09\nProcedureOutputResult<(List, List)> result = await "PROC_Name".SqlProcedureOutputAsync<(List, List)>(new ProcOutputModel{ Id=1});\n')),(0,i.kt)("h2",{id:"9154-\u61d2\u4eba\u65e0\u654c-\u51fd\u6570-"},"9.15.4 \u61d2\u4eba\u65e0\u654c ",(0,i.kt)("inlineCode",{parentName:"h2"},"\u51fd\u6570")," \ud83d\udc2e"),(0,i.kt)("h3",{id:"91541-\u6807\u91cf\u51fd\u6570"},"9.15.4.1 ",(0,i.kt)("inlineCode",{parentName:"h3"},"\u6807\u91cf\u51fd\u6570")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar value = "FN_Name".SqlFunctionScalar();\n\n// \u793a\u4f8b\u4e8c\nvar value = "FN_Name".SqlFunctionScalar(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar value = "FN_Name".SqlFunctionScalar();\n\n// \u793a\u4f8b\u56db\nvar value = "FN_Name".SqlFunctionScalar(new {id = 1});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar value = await "FN_Name".SqlFunctionScalarAsync();\n\n// \u793a\u4f8b\u4e8c\nvar value = await "FN_Name".SqlFunctionScalarAsync(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar value = await "FN_Name".SqlFunctionScalarAsync();\n\n// \u793a\u4f8b\u56db\nvar value = await "FN_Name".SqlFunctionScalarAsync(new {id = 1});\n')),(0,i.kt)("h3",{id:"91542-\u8868\u503c\u51fd\u6570"},"9.15.4.2 ",(0,i.kt)("inlineCode",{parentName:"h3"},"\u8868\u503c\u51fd\u6570")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// ==== \u540c\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar dataTable = "FN_Name".SqlFunctionQuery();\n\n// \u793a\u4f8b\u4e8c\nvar dataTable = "FN_Name".SqlFunctionQuery(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar persons = "FN_Name".SqlFunctionQuery();\n\n// \u793a\u4f8b\u56db\nvar persons = "FN_Name".SqlFunctionQuery(new {id = 1});\n\n// ==== \u5f02\u6b65\u64cd\u4f5c ====\n\n// \u793a\u4f8b\u4e00\nvar dataTable = await "FN_Name".SqlFunctionQueryAsync();\n\n// \u793a\u4f8b\u4e8c\nvar dataTable = await "FN_Name".SqlFunctionQueryAsync(new {id = 1});\n\n// \u793a\u4f8b\u4e09\nvar persons = await "FN_Name".SqlFunctionQueryAsync();\n\n// \u793a\u4f8b\u56db\nvar persons = await "FN_Name".SqlFunctionQueryAsync(new {id = 1});\n')),(0,i.kt)("h2",{id:"9155-\u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4"},"9.15.5 \u8bbe\u7f6e\u8d85\u65f6\u65f6\u95f4"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var data = "select * from table".SetCommandTimeout(100).SqlQuery(); // \u5355\u4f4d\u79d2\n')),(0,i.kt)("h2",{id:"9156-isqlrepository-\u64cd\u4f5c"},"9.15.6 ",(0,i.kt)("inlineCode",{parentName:"h2"},"ISqlRepository")," \u64cd\u4f5c"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"ISqlRepository")," \u4ed3\u50a8\u662f\u4e13\u95e8\u5904\u7406 ",(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \u64cd\u4f5c\u7684\uff0c\u65e0\u9700\u5b9e\u4f53\u65b9\u5f0f\uff0c\u6240\u6709\u63a5\u53e3\u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"\u61d2\u4eba\u65e0\u654c")," \u65b9\u5f0f\u4e00\u6837\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u793a\u4f8b\u4e00\nvar dataTable = sqlRepository.SqlQuery("select * from person");\n\n// \u793a\u4f8b\u4e8c\nvar dataTable = sqlRepository.SqlQuery("select * from person where id > @id", new { id = 10});\n\n// \u793a\u4f8b\u56db\nvar persons = sqlRepository.SqlQuery("select * from person");\n\n// \u793a\u4f8b\u4e94\nvar persons = sqlRepository.SqlQuery("select * from person where id > @id", new { id = 10});\n\n// \u4e0d\u518d\u4e3e\u4f8b\u5b50\u3002\u3002\u3002\n')),(0,i.kt)("admonition",{title:"\u8865\u5145\u8bf4\u660e",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u4e0d\u7ba1\u662f\u54ea\u79cd\u65b9\u5f0f\u64cd\u4f5c ",(0,i.kt)("inlineCode",{parentName:"p"},"Sql")," \uff0c\u65b9\u6cd5\u540d\u53c2\u6570\u90fd\u662f\u4e00\u81f4\u7684\uff0c\u5982\uff1a"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlQuery")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlQueryAsync")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlQueries")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlQueriesAsync")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlNonQuery")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlNonQueryAsync")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlScalar")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlScalarAsync")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlProcedureQuery")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlProcedureQueryAsync")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlProcedureQueries")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlProcedureQueriesAsync")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlProcedureScalar")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlProcedureScalarAsync")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlProcedureNonQuery")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlProcedureNonQueryAsync")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlProcedureOutput")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlProcedureOutputAsync")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlFunctionScalar")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlFunctionScalarAsync")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlFunctionQuery")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"SqlFunctionQuery")))),(0,i.kt)("h2",{id:"9157-irepository-\u64cd\u4f5c"},"9.15.7 ",(0,i.kt)("inlineCode",{parentName:"h2"},"IRepository")," \u64cd\u4f5c"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"IRepository")," \u4e5f\u80fd\u64cd\u4f5c ",(0,i.kt)("inlineCode",{parentName:"p"},"sql"),"\uff0c\u8c03\u7528\u65b9\u6cd5\u4e5f\u662f\u548c\u4e0a\u9762\u4e00\u81f4\u7684\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var dataTable = repository.Sql().SqlQuery("select * from person");\n')),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u4e0d\u518d\u5217\u4e3e\u6240\u6709\u4f8b\u5b50\u3002")),(0,i.kt)("h2",{id:"9158-irepositorytentity-\u64cd\u4f5c"},"9.15.8 ",(0,i.kt)("inlineCode",{parentName:"h2"},"IRepository")," \u64cd\u4f5c"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"IRepository")," \u4e5f\u80fd\u64cd\u4f5c ",(0,i.kt)("inlineCode",{parentName:"p"},"sql"),"\uff0c\u8c03\u7528\u65b9\u6cd5\u4e5f\u662f\u548c\u4e0a\u9762\u4e00\u81f4\u7684\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var dataTable = personRepository.SqlQuery("select * from person");\n')),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u4e0d\u518d\u5217\u4e3e\u6240\u6709\u4f8b\u5b50\u3002")),(0,i.kt)("h2",{id:"9159-\u5173\u4e8e-sql-\u53c2\u6570"},"9.15.9 \u5173\u4e8e ",(0,i.kt)("inlineCode",{parentName:"h2"},"Sql")," \u53c2\u6570"),(0,i.kt)("p",null,"\u6240\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},"sql"),"\u3001",(0,i.kt)("inlineCode",{parentName:"p"},"\u5b58\u50a8\u8fc7\u7a0b"),"\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"\u51fd\u6570")," \u53c2\u6570\u90fd\u652f\u6301\u56db\u79cd\u65b9\u5f0f\uff1a"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"DbParameter[]"),"\uff1a\u6570\u7ec4\u7c7b\u578b"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"new {}"),"\uff1a\u533f\u540d\u7c7b\u578b"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"new Class{}"),"\uff1a\u5f3a\u7c7b\u578b\u7c7b\u578b\uff08\u652f\u6301\u590d\u6742\u5b58\u50a8\u8fc7\u7a0b\u53c2\u6570\uff09"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"Dictionary")," \u7c7b\u578b")),(0,i.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"\u5efa\u8bae\u9664\u4e86\u590d\u6742\u7684\u5b58\u50a8\u8fc7\u7a0b\uff08\u5e26 ",(0,i.kt)("inlineCode",{parentName:"p"},"OUTPUT/RETURN"),"\uff09\u7684\u4ee5\u5916\uff0c\u6240\u6709\u53c2\u6570\u5efa\u8bae\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"new {}")," \u533f\u540d\u7c7b\u578b\uff0c\u5982\u679c\u9700\u8981\u52a8\u6001\u53c2\u6570\uff0c\u5219\u53ef\u4ee5\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Dictionary")," \u7c7b\u578b\u3002")),(0,i.kt)("admonition",{title:"\u53c2\u6570\u5927\u5c0f\u5199\u95ee\u9898",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u7531\u4e8e\u4e0d\u540c\u6570\u636e\u5e93\u5bf9\u67e5\u8be2\u53c2\u6570\u5927\u5c0f\u5199\u95ee\u9898\u5904\u7406\u4e0d\u4e00\u81f4\uff0c\u6240\u4ee5",(0,i.kt)("strong",{parentName:"p"},"\u5efa\u8bae\u6240\u6709\u67e5\u8be2\u53c2\u6570\u548c\u53c2\u6570\u540d\u6216\u5c5e\u6027\u540d\u5b8c\u5168\u4e00\u81f4"),"\u3002")),(0,i.kt)("h2",{id:"91510-\u591a\u6570\u636e\u5e93-sql-\u64cd\u4f5c--"},"9.15.10 \u591a\u6570\u636e\u5e93 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Sql")," \u64cd\u4f5c \ud83d\udcaf \ud83d\udc9b"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u62e5\u6709\u975e\u5e38\u7075\u6d3b\u7684\u591a\u6570\u636e\u5e93\u64cd\u4f5c\u65b9\u5f0f\uff0c\u53ea\u9700\u901a\u8fc7\u591a",(0,i.kt)("strong",{parentName:"p"},"\u6570\u636e\u5e93\u4e0a\u4e0b\u6587\u5b9a\u4f4d\u5668"),"\u5373\u53ef\u52a8\u6001\u5207\u6362\u6570\u636e\u5e93\u3002"),(0,i.kt)("h3",{id:"915101-\u61d2\u4eba\u65e0\u654c--\u65b9\u5f0f"},"9.15.10.1 \u61d2\u4eba\u65e0\u654c \ud83d\udc2e \u65b9\u5f0f"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var dataTable = "select * from person".Change().SqlQuery();\n\nvar persons = "select * from person whre id > @id".Change().SqlQuery();\n')),(0,i.kt)("admonition",{title:"\u8865\u5145\u8bf4\u660e",type:"important"},(0,i.kt)("p",{parentName:"admonition"},"\u61d2\u4eba\u65b9\u5f0f \u53ea\u9700\u8981\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"Change")," \u65b9\u5f0f\u5373\u53ef\u52a8\u6001\u5207\u6362\u6570\u636e\u5e93\u3002")),(0,i.kt)("h3",{id:"915102-isqlrepository-\u65b9\u5f0f"},"9.15.10.2 ",(0,i.kt)("inlineCode",{parentName:"h3"},"ISqlRepository")," \u65b9\u5f0f"),(0,i.kt)("p",null,"\u53ea\u9700\u8981\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"ISqlRepository")," \u6ce8\u5165\u6216\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"sqlRepository.Change()")," \u5207\u6362\u3002"),(0,i.kt)("h3",{id:"915103-irepository-\u65b9\u5f0f"},"9.15.10.3 ",(0,i.kt)("inlineCode",{parentName:"h3"},"IRepository")," \u65b9\u5f0f"),(0,i.kt)("p",null,"\u53ea\u9700\u8981\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"repository.Change()")," \u83b7\u53d6\u5373\u53ef\u3002"),(0,i.kt)("h3",{id:"915104-irepositorytentity-\u65b9\u5f0f"},"9.15.10.4 ",(0,i.kt)("inlineCode",{parentName:"h3"},"IRepository")," \u65b9\u5f0f"),(0,i.kt)("p",null,"\u53ea\u9700\u8981\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"IRepository")," \u6ce8\u5165\u6216\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},"personRepository.Change()")," \u5207\u6362\u3002"),(0,i.kt)("h2",{id:"91511-\u5207\u6362\u6570\u636e\u5e93"},"9.15.11 \u5207\u6362\u6570\u636e\u5e93"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u4e0d\u7ba1\u662f\u61d2\u4eba\u6a21\u5f0f\u8fd8\u662f\u4ed3\u50a8\u6a21\u5f0f\u90fd\u662f\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},".Change")," \u65b9\u5f0f\u5207\u6362\u6570\u636e\u5e93\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u61d2\u4eba\u6a21\u5f0f\nvar data = "select * from table".Change().SqlQuery();\n\n// \u4ed3\u50a8\u65b9\u5f0f\nvar data = req.Change().SqlQuery("select * from table");\n')),(0,i.kt)("h2",{id:"91512-\u591a\u7ebf\u7a0b\u5171\u4eab\u4f5c\u7528\u57df"},"9.15.12 \u591a\u7ebf\u7a0b\u5171\u4eab\u4f5c\u7528\u57df"),(0,i.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c\u6240\u6709\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u5b57\u7b26\u4e32")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"\u5b9e\u4f53")," \u62d3\u5c55\u90fd\u6709\u81ea\u5df1\u72ec\u7acb\u7ef4\u62a4\u7684 ",(0,i.kt)("inlineCode",{parentName:"p"},"ServiceProvider")," \u4f5c\u7528\u57df\u3002"),(0,i.kt)("p",null,"\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"Web")," \u8bf7\u6c42\u4e2d\uff0c\u9ed8\u8ba4\u662f ",(0,i.kt)("inlineCode",{parentName:"p"},"HttpContext.RequestServices"),"\uff0c\u4f46\u5728 ",(0,i.kt)("inlineCode",{parentName:"p"},"\u975e Web"),"\uff0c\u5982\u591a\u7ebf\u7a0b\u64cd\u4f5c\uff0c\u540e\u53f0\u4efb\u52a1\uff0c\u4e8b\u4ef6\u603b\u7ebf\u7b49\u573a\u666f\u4e0b\u4f1a\u81ea\u52a8\u521b\u5efa\u65b0\u7684\u4f5c\u7528\u57df\uff0c\u5b9e\u9645\u4e0a\u8fd9\u662f\u975e\u5e38\u4e0d\u5fc5\u8981\u7684\u5185\u5b58\u5f00\u9500\u3002"),(0,i.kt)("p",null,"\u8fd9\u65f6\uff0c\u6211\u4eec\u53ea\u9700\u8981\u901a\u8fc7 ",(0,i.kt)("inlineCode",{parentName:"p"},".SetXXXScoped(service)")," \u5171\u4eab\u5f53\u524d\u670d\u52a1\u63d0\u4f9b\u5668\u4f5c\u7528\u57df\u5373\u53ef\uff0c\u5982\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'Scoped.Create((fac, scope) => {\n "select * from table".SetContextScoped(scope.ServiceProvider).SqlQuery();\n});\n')),(0,i.kt)("h2",{id:"91513-\u9759\u6001-default-\u65b9\u5f0f\u6784\u5efa"},"9.15.13 \u9759\u6001 ",(0,i.kt)("inlineCode",{parentName:"h2"},"Default")," \u65b9\u5f0f\u6784\u5efa"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'SqlExecutePart.Default.SetSqlString("select * from person").SqlQuery();\n')),(0,i.kt)("h2",{id:"91514-\u53cd\u9988\u4e0e\u5efa\u8bae"},"9.15.14 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,i.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/b77cc225.1c3d355f.js b/handbook/build/assets/js/b77cc225.1c3d355f.js new file mode 100644 index 00000000000..29aae9cc693 --- /dev/null +++ b/handbook/build/assets/js/b77cc225.1c3d355f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7408],{3905:function(t,e,n){n.d(e,{Zo:function(){return c},kt:function(){return s}});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var p=r.createContext({}),u=function(t){var e=r.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},c=function(t){var e=u(t.components);return r.createElement(p.Provider,{value:e},t.children)},m={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},d=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,o=t.originalType,p=t.parentName,c=l(t,["components","mdxType","originalType","parentName"]),d=u(n),s=a,f=d["".concat(p,".").concat(s)]||d[s]||m[s]||o;return n?r.createElement(f,i(i({ref:e},c),{},{components:n})):r.createElement(f,i({ref:e},c))}));function s(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var p in e)hasOwnProperty.call(e,p)&&(l[p]=e[p]);l.originalType=t,l.mdxType="string"==typeof t?t:a,i[1]=l;for(var u=2;u=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=u(n),d=o,f=m["".concat(p,".").concat(d)]||m[d]||s[d]||a;return n?r.createElement(f,i(i({ref:t},c),{},{components:n})):r.createElement(f,i({ref:t},c))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var u=2;u=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(n),m=o,f=d["".concat(s,".").concat(m)]||d[m]||p[m]||a;return n?r.createElement(f,i(i({ref:t},u),{},{components:n})):r.createElement(f,i({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c(str, [options]);\n")),(0,a.kt)("h2",{id:"104-\u83b7\u53d6\u5168\u5c40\u914d\u7f6e"},"10.4 \u83b7\u53d6\u5168\u5c40\u914d\u7f6e"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"var options = JSON.GetSerializerOptions();\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/b96ebcf3.889835bb.js b/handbook/build/assets/js/b96ebcf3.889835bb.js new file mode 100644 index 00000000000..7f62b7572f7 --- /dev/null +++ b/handbook/build/assets/js/b96ebcf3.889835bb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[7963],{3769:function(u){u.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/bb3cf766.a1b1c761.js b/handbook/build/assets/js/bb3cf766.a1b1c761.js new file mode 100644 index 00000000000..de9e58d3e46 --- /dev/null +++ b/handbook/build/assets/js/bb3cf766.a1b1c761.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[4489],{3905:function(e,t,n){n.d(t,{Zo:function(){return u},kt:function(){return m}});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=i,f=d["".concat(s,".").concat(m)]||d[m]||c[m]||a;return n?r.createElement(f,o(o({ref:t},u),{},{components:n})):r.createElement(f,o({ref:t},u))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,o[1]=l;for(var p=2;p=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=i.createContext({}),p=function(e){var n=i.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):l(l({},n),e)),t},m=function(e){var n=p(e.components);return i.createElement(s.Provider,{value:n},e.children)},d={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},u=i.forwardRef((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,m=o(e,["components","mdxType","originalType","parentName"]),u=p(t),c=r,k=u["".concat(s,".").concat(c)]||u[c]||d[c]||a;return t?i.createElement(k,l(l({ref:n},m),{},{components:t})):i.createElement(k,l({ref:n},m))}));function c(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,l=new Array(a);l[0]=u;var o={};for(var s in n)hasOwnProperty.call(n,s)&&(o[s]=n[s]);o.originalType=e,o.mdxType="string"==typeof e?e:r,l[1]=o;for(var p=2;pIFileProvider \u5b9e\u4f8b",id:"313-\u83b7\u53d6\u6587\u4ef6\u7cfb\u7edf-ifileprovider-\u5b9e\u4f8b",level:2},{value:"31.3.1 Func<FileProviderTypes, object, IFileProvider> \u65b9\u5f0f",id:"3131-funcfileprovidertypes-object-ifileprovider-\u65b9\u5f0f",level:3},{value:"31.3.2 FS \u9759\u6001\u7c7b\u65b9\u5f0f",id:"3132-fs-\u9759\u6001\u7c7b\u65b9\u5f0f",level:3},{value:"31.4 IFileProvider \u5e38\u89c1\u64cd\u4f5c",id:"314-ifileprovider-\u5e38\u89c1\u64cd\u4f5c",level:2},{value:"31.4.1 \u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9",id:"3141-\u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9",level:3},{value:"31.4.2 \u83b7\u53d6\u6587\u4ef6\u76ee\u5f55\u5185\u5bb9\uff08\u9700\u9012\u5f52\u67e5\u627e\uff09",id:"3142-\u83b7\u53d6\u6587\u4ef6\u76ee\u5f55\u5185\u5bb9\u9700\u9012\u5f52\u67e5\u627e",level:3},{value:"31.4.4 \u76d1\u542c\u6587\u4ef6\u53d8\u5316",id:"3144-\u76d1\u542c\u6587\u4ef6\u53d8\u5316",level:3},{value:"31.5 \u6a21\u5757\u5316\u9759\u6001\u8d44\u6e90\u914d\u7f6e",id:"315-\u6a21\u5757\u5316\u9759\u6001\u8d44\u6e90\u914d\u7f6e",level:2},{value:"31.6 \u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d",id:"316-\u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d",level:2},{value:"31.6.1 \u6587\u4ef6\u4e0b\u8f7d",id:"3161-\u6587\u4ef6\u4e0b\u8f7d",level:3},{value:"31.6.2 \u6587\u4ef6\u4e0a\u4f20",id:"3162-\u6587\u4ef6\u4e0a\u4f20",level:3},{value:"31.6.3 \u5c06 IFormFile \u8f6c byte[]",id:"3163-\u5c06-iformfile-\u8f6c-byte",level:3},{value:"31.6.4 \u5c06 byte[] \u8f93\u51fa\u4e3a Url \u5730\u5740",id:"3164-\u5c06-byte-\u8f93\u51fa\u4e3a-url-\u5730\u5740",level:3},{value:"31.7 \u8bf7\u6c42\u5927\u5c0f\u63a7\u5236\uff08\u4e0a\u4f20\u6587\u4ef6\u5927\u5c0f\u63a7\u5236\uff09",id:"317-\u8bf7\u6c42\u5927\u5c0f\u63a7\u5236\u4e0a\u4f20\u6587\u4ef6\u5927\u5c0f\u63a7\u5236",level:2},{value:"31.7.1 \u5bf9\u7279\u5b9a\u7684\u63a5\u53e3\u8fdb\u884c\u63a7\u5236",id:"3171-\u5bf9\u7279\u5b9a\u7684\u63a5\u53e3\u8fdb\u884c\u63a7\u5236",level:3},{value:"31.7.2 \u5bf9\u7279\u5b9a\u63a5\u53e3\u53d6\u6d88\u9650\u5236",id:"3172-\u5bf9\u7279\u5b9a\u63a5\u53e3\u53d6\u6d88\u9650\u5236",level:3},{value:"31.7.3 \u901a\u7528\u4e2d\u95f4\u4ef6\u8fdb\u884c\u63a7\u5236",id:"3173-\u901a\u7528\u4e2d\u95f4\u4ef6\u8fdb\u884c\u63a7\u5236",level:3},{value:"31.7.4 \u5168\u5c40\u914d\u7f6e",id:"3174-\u5168\u5c40\u914d\u7f6e",level:3},{value:"31.8 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"318-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],u={toc:d};function c(e){var n=e.components,t=(0,r.Z)(e,l);return(0,a.kt)("wrapper",(0,i.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{title:"\u7248\u672c\u8bf4\u660e",type:"important"},(0,a.kt)("p",{parentName:"admonition"},"\u4ee5\u4e0b\u5185\u5bb9\u4ec5\u9650 ",(0,a.kt)("inlineCode",{parentName:"p"},"Furion 2.5.0 +")," \u7248\u672c\u4f7f\u7528\u3002")),(0,a.kt)("h2",{id:"311-\u5173\u4e8e\u6587\u4ef6\u7cfb\u7edf"},"31.1 \u5173\u4e8e\u6587\u4ef6\u7cfb\u7edf"),(0,a.kt)("p",null,"\u672c\u7ae0\u6240\u8c13\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u6587\u4ef6\u7cfb\u7edf")," \u6709\u70b9\u540d\u4e0d\u526f\u5b9e\uff0c\u5176\u5b9e\u6839\u672c\u7b97\u4e0d\u4e0a\u4e00\u4e2a\u7cfb\u7edf\uff0c\u5b83\u4ec5\u4ec5\u662f\u5229\u7528\u4e00\u4e2a\u62bd\u8c61\u5316\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"IFileProvider")," \u4ee5\u7edf\u4e00\u7684\u65b9\u5f0f\u63d0\u4f9b\u6240\u9700\u7684\u6587\u4ef6\u800c\u5df2\u3002\u901a\u8fc7\u8be5 ",(0,a.kt)("inlineCode",{parentName:"p"},"\u6587\u4ef6\u7cfb\u7edf")," \u53ef\u4ee5\u8bfb\u53d6\u7269\u7406\u6587\u4ef6\u548c\u5d4c\u5165\u8d44\u6e90\u6587\u4ef6\uff0c\u5305\u62ec\u76ee\u5f55\u7ed3\u679c\u8bfb\u53d6\uff0c\u6587\u4ef6\u5185\u5bb9\u8bfb\u53d6\uff0c\u6587\u4ef6\u5185\u5bb9\u76d1\u542c\u7b49\u7b49\u3002"),(0,a.kt)("h3",{id:"3111-\u6587\u4ef6\u7cfb\u7edf\u7c7b\u578b"},"31.1.1 \u6587\u4ef6\u7cfb\u7edf\u7c7b\u578b"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u63d0\u4f9b\u4e86\u4e24\u79cd\u6587\u4ef6\u7cfb\u7edf\u7c7b\u578b\uff1a"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Physical"),"\uff1a\u7269\u7406\u6587\u4ef6\u7cfb\u7edf\u7c7b\u578b\uff0c\u4e5f\u5c31\u662f\u7269\u7406\u673a\u4e2d\u5b9e\u9645\u5b58\u5728\u7684\u6587\u4ef6"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Embedded"),"\uff1a\u5d4c\u5165\u8d44\u6e90\u6587\u4ef6\u7cfb\u7edf\u7c7b\u578b\uff0c\u4e5f\u5c31\u662f\u8d44\u6e90\u6587\u4ef6\u5d4c\u5165\u5230\u4e86\u7a0b\u5e8f\u96c6\u4e2d\uff0c\u5e38\u7528\u4e8e\u6a21\u5757\u5316\u5f00\u53d1")),(0,a.kt)("h2",{id:"312-\u6ce8\u518c\u865a\u62df\u6587\u4ef6\u7cfb\u7edf\u670d\u52a1"},"31.2 \u6ce8\u518c\u865a\u62df\u6587\u4ef6\u7cfb\u7edf\u670d\u52a1"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"services.AddVirtualFileServer();\n")),(0,a.kt)("h2",{id:"313-\u83b7\u53d6\u6587\u4ef6\u7cfb\u7edf-ifileprovider-\u5b9e\u4f8b"},"31.3 \u83b7\u53d6\u6587\u4ef6\u7cfb\u7edf ",(0,a.kt)("inlineCode",{parentName:"h2"},"IFileProvider")," \u5b9e\u4f8b"),(0,a.kt)("h3",{id:"3131-funcfileprovidertypes-object-ifileprovider-\u65b9\u5f0f"},"31.3.1 ",(0,a.kt)("inlineCode",{parentName:"h3"},"Func")," \u65b9\u5f0f"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"Func")," \u59d4\u6258\u4f9b\u6784\u9020\u51fd\u6570\u6ce8\u5165\u6216\u89e3\u6790\u670d\u52a1\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6,8-9,11-12}",showLineNumbers:!0,"":!0,"{6,8-9,11-12}":!0},'public class PersonServices\n{\n private readonly IFileProvider _physicalFileProvider;\n private readonly IFileProvider _embeddedFileProvider;\n\n public PersonServices(Func fileProviderResolve)\n {\n // \u89e3\u6790\u7269\u7406\u6587\u4ef6\u7cfb\u7edf\n _physicalFileProvider = fileProviderResolve(FileProviderTypes.Physical, @"c:/test");\n\n // \u89e3\u6790\u5d4c\u5165\u8d44\u6e90\u6587\u4ef6\u7cfb\u7edf\n _embeddedFileProvider = fileProviderResolve(FileProviderTypes.Embedded, Assembly.GetEntryAssembly());\n }\n}\n')),(0,a.kt)("h3",{id:"3132-fs-\u9759\u6001\u7c7b\u65b9\u5f0f"},"31.3.2 ",(0,a.kt)("inlineCode",{parentName:"h3"},"FS")," \u9759\u6001\u7c7b\u65b9\u5f0f"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e5f\u63d0\u4f9b\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"FS")," \u9759\u6001\u7c7b\u65b9\u5f0f\u521b\u5efa\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u89e3\u6790\u7269\u7406\u6587\u4ef6\u7cfb\u7edf\nvar physicalFileProvider = FS.GetPhysicalFileProvider(@"c:/test");\n\n// \u89e3\u6790\u5d4c\u5165\u8d44\u6e90\u6587\u4ef6\u7cfb\u7edf\nvar embeddedFileProvider = FS.GetEmbeddedFileProvider(Assembly.GetEntryAssembly());\n')),(0,a.kt)("h2",{id:"314-ifileprovider-\u5e38\u89c1\u64cd\u4f5c"},"31.4 ",(0,a.kt)("inlineCode",{parentName:"h2"},"IFileProvider")," \u5e38\u89c1\u64cd\u4f5c"),(0,a.kt)("h3",{id:"3141-\u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9"},"31.4.1 \u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'byte[] buffer;\nusing (Stream readStream = _fileProvider.GetFileInfo("\u4f60\u7684\u6587\u4ef6\u8def\u5f84").CreateReadStream())\n{\n buffer = new byte[readStream.Length];\n await readStream.ReadAsync(buffer.AsMemory(0, buffer.Length));\n}\n\n// \u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9\nvar content = Encoding.UTF8.GetString(buffer);\n')),(0,a.kt)("h3",{id:"3142-\u83b7\u53d6\u6587\u4ef6\u76ee\u5f55\u5185\u5bb9\u9700\u9012\u5f52\u67e5\u627e"},"31.4.2 \u83b7\u53d6\u6587\u4ef6\u76ee\u5f55\u5185\u5bb9\uff08\u9700\u9012\u5f52\u67e5\u627e\uff09"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'var rootPath = "\u5f53\u524d\u76ee\u5f55\u8def\u5f84";\nvar fileinfos = _fileProvider.GetDirectoryContents(rootPath);\nforeach (var fileinfo in fileinfos)\n{\n if(fileinfo.IsDirectory)\n {\n // \u8fd9\u91cc\u9012\u5f52\u3002\u3002\u3002\n }\n}\n')),(0,a.kt)("h3",{id:"3144-\u76d1\u542c\u6587\u4ef6\u53d8\u5316"},"31.4.4 \u76d1\u542c\u6587\u4ef6\u53d8\u5316"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'ChangeToken.OnChange(() => _fileProvider.Watch("\u76d1\u542c\u7684\u6587\u4ef6"), () =>\n{\n // \u8fd9\u91cc\u5199\u4f60\u7684\u903b\u8f91\n});\n')),(0,a.kt)("h2",{id:"315-\u6a21\u5757\u5316\u9759\u6001\u8d44\u6e90\u914d\u7f6e"},"31.5 \u6a21\u5757\u5316\u9759\u6001\u8d44\u6e90\u914d\u7f6e"),(0,a.kt)("p",null,"\u901a\u5e38\u6211\u4eec\u91c7\u7528\u6a21\u5757\u5316\u5f00\u53d1\uff0c\u9759\u6001\u8d44\u6e90\u90fd\u662f\u5d4c\u5165\u8fdb\u7a0b\u5e8f\u96c6\u4e2d\uff0c\u8fd9\u65f6\u5019\u6211\u4eec\u9700\u8981\u901a\u8fc7\u914d\u7f6e ",(0,a.kt)("inlineCode",{parentName:"p"},"UseFileServer")," \u6307\u5b9a\u6a21\u5757\u9759\u6001\u8d44\u6e90\u8def\u5f84\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'// \u9ed8\u8ba4\u9759\u6001\u8d44\u6e90\u8c03\u7528\uff0cwwwroot\napp.UseStaticFiles();\n\n// \u914d\u7f6e\u6a21\u5757\u5316\u9759\u6001\u8d44\u6e90\napp.UseFileServer(new FileServerOptions\n{\n FileProvider = new EmbeddedFileProvider(\u6a21\u5757\u7a0b\u5e8f\u96c6),\n RequestPath = "/\u6a21\u5757\u540d\u79f0", // \u540e\u7eed\u6240\u6709\u8d44\u6e90\u90fd\u662f\u901a\u8fc7 /\u6a21\u5757\u540d\u79f0/xxx.css \u8c03\u7528\n EnableDirectoryBrowsing = true\n});\n')),(0,a.kt)("h2",{id:"316-\u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d"},"31.6 \u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d"),(0,a.kt)("p",null,"\u5728\u5e94\u7528\u5f00\u53d1\u4e2d\uff0c\u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d\u5c5e\u4e8e\u975e\u5e38\u5e38\u7528\u7684\u529f\u80fd\uff0c\u8fd9\u91cc\u8d34\u51fa\u5e38\u89c1\u7684\u6587\u4ef6\u4e0a\u4f20\u4e0b\u8f7d\u793a\u4f8b\u3002"),(0,a.kt)("h3",{id:"3161-\u6587\u4ef6\u4e0b\u8f7d"},"31.6.1 \u6587\u4ef6\u4e0b\u8f7d"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\u6587\u4ef6\u8def\u5f84\u7684\u65b9\u5f0f")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,5}",showLineNumbers:!0,"{1,5}":!0},'[HttpGet, NonUnify]\npublic IActionResult FileDownload()\n{\n string filePath = "\u8fd9\u91cc\u83b7\u53d6\u5b8c\u6574\u7684\u6587\u4ef6\u4e0b\u8f7d\u8def\u5f84";\n return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") {\n FileDownloadName = fileName // \u914d\u7f6e\u6587\u4ef6\u4e0b\u8f7d\u663e\u793a\u540d\n };\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"byte[]")," \u65b9\u5f0f")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,4}",showLineNumbers:!0,"{1,4}":!0},'[HttpGet, NonUnify]\npublic IActionResult FileDownload()\n{\n return new FileStreamResult(byte\u6570\u7ec4, "application/octet-stream") {\n FileDownloadName = fileName // \u914d\u7f6e\u6587\u4ef6\u4e0b\u8f7d\u663e\u793a\u540d\n };\n}\n')),(0,a.kt)("admonition",{title:"\u5173\u4e8e\u524d\u7aef\u83b7\u53d6\u6587\u4ef6\u540d",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u5982\u679c\u524d\u7aef\u83b7\u53d6\u4e0d\u5230\u6587\u4ef6\u5939\uff0c\u53ef\u6dfb\u52a0\u4ee5\u4e0b\u914d\u7f6e\uff1a"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={\u6587\u4ef6\u540d}");\n_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");\n'))),(0,a.kt)("h3",{id:"3162-\u6587\u4ef6\u4e0a\u4f20"},"31.6.2 \u6587\u4ef6\u4e0a\u4f20"),(0,a.kt)("admonition",{title:"\u5c0f\u63d0\u9192",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"IFormFile")," \u7c7b\u578b\u5bf9\u5e94\u524d\u7aef\u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Content-Type")," \u4e3a\uff1a ",(0,a.kt)("inlineCode",{parentName:"p"},"multipart/form-data"))),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5355\u6587\u4ef6 ",(0,a.kt)("inlineCode",{parentName:"strong"},"IFormFile")," \u7c7b\u578b\u53c2\u6570\uff08\u5b58\u50a8\u5230\u786c\u76d8\uff09"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,2,18}",showLineNumbers:!0,"":!0,"{1,2,18}":!0},'[HttpPost]\npublic async Task UploadFileAsync(IFormFile file)\n{\n // \u5982\uff1a\u4fdd\u5b58\u5230\u7f51\u7ad9\u6839\u76ee\u5f55\u4e0b\u7684 uploads \u76ee\u5f55\n var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, "uploads");\n if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);\n\n //// \u8fd9\u91cc\u8fd8\u53ef\u4ee5\u83b7\u53d6\u6587\u4ef6\u7684\u4fe1\u606f\n // var size = file.Length / 1024.0; // \u6587\u4ef6\u5927\u5c0f KB\n // var clientFileName = file.FileName; // \u5ba2\u6237\u7aef\u4e0a\u4f20\u7684\u6587\u4ef6\u540d\n // var contentType = file.ContentType; // \u83b7\u53d6\u6587\u4ef6 ContentType \u6216\u89e3\u6790 MIME \u7c7b\u578b\n\n // \u907f\u514d\u6587\u4ef6\u540d\u91cd\u590d\uff0c\u91c7\u7528 GUID \u751f\u6210\n var fileName = Guid.NewGuid().ToString("N") + Path.GetExtension(file.FileName);\n var filePath = Path.Combine(savePath, fileName);\n\n // \u4fdd\u5b58\u5230\u6307\u5b9a\u8def\u5f84\n using (var stream = System.IO.File.Create(filePath))\n {\n await file.CopyToAsync(stream);\n }\n\n // \u5728\u52a8\u6001 API \u76f4\u63a5\u8fd4\u56de\u5bf9\u8c61\u5373\u53ef\uff0c\u65e0\u9700 OK \u548c IActionResult\n return Ok(new { filename });\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u5355\u6587\u4ef6 ",(0,a.kt)("inlineCode",{parentName:"strong"},"Base64")," \u7c7b\u578b\u53c2\u6570\uff08\u5b58\u50a8\u5230\u786c\u76d8\uff09"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,2,9,19}",showLineNumbers:!0,"":!0,"{1,2,9,19}":!0},'[HttpPost]\npublic async Task UploadFileAsync([FromBody] string fileBase64, string clientFileName)\n{\n // \u5982\uff1a\u4fdd\u5b58\u5230\u7f51\u7ad9\u6839\u76ee\u5f55\u4e0b\u7684 uploads \u76ee\u5f55\n var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, "uploads");\n if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);\n\n // \u5c06 base64 \u5b57\u7b26\u4e32\u8f6c byte[]\n var bytes = Convert.FromBase64String(fileBase64);\n\n // \u8fd9\u91cc\u8fd8\u53ef\u4ee5\u83b7\u53d6\u6587\u4ef6\u7684\u4fe1\u606f\n // var size = bytes.Length / 1024.0; // \u6587\u4ef6\u5927\u5c0f KB\n\n // \u907f\u514d\u6587\u4ef6\u540d\u91cd\u590d\uff0c\u91c7\u7528 GUID \u751f\u6210\n var fileName = Guid.NewGuid().ToString("N") + Path.GetExtension(clientFileName);\n var filePath = Path.Combine(savePath, fileName);\n\n // \u4fdd\u5b58\u5230\u6307\u5b9a\u8def\u5f84\n using (var fs = new FileStream(filePath, FileMode.Create))\n {\n await fs.WriteAsync(bytes);\n }\n\n // \u5728\u52a8\u6001 API \u76f4\u63a5\u8fd4\u56de\u5bf9\u8c61\u5373\u53ef\uff0c\u65e0\u9700 OK \u548c IActionResult\n return Ok(new { fileName });\n}\n')),(0,a.kt)("admonition",{title:"\u7279\u522b\u6ce8\u610f",type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"\u6587\u4ef6 ",(0,a.kt)("inlineCode",{parentName:"p"},"Base64")," \u5b57\u7b26\u4e32\u5982\u679c\u5e26 ",(0,a.kt)("inlineCode",{parentName:"p"},"data:text/plain;base64,")," \u5f00\u5934\u5219\uff0c\u9700\u8981\u624b\u52a8\u53bb\u6389 ",(0,a.kt)("inlineCode",{parentName:"p"},",")," \u4e4b\u524d\uff08\u542b\u9017\u53f7\uff09\u7684\u5b57\u7b26\u4e32\u3002")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u591a\u6587\u4ef6 ",(0,a.kt)("inlineCode",{parentName:"strong"},"List")," \u7c7b\u578b\u53c2\u6570\uff08\u5b58\u50a8\u5230\u786c\u76d8\uff09"))),(0,a.kt)("p",null,"\u4ee3\u7801\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"\u5355\u6587\u4ef6\u5904\u7406\u4e00\u81f4"),"\uff0c\u53ea\u9700 ",(0,a.kt)("inlineCode",{parentName:"p"},"foreach")," \u5373\u53ef\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,12}",showLineNumbers:!0,"":!0,"{1,12}":!0},'[HttpPost]\npublic async Task UploadFileAsync(List files)\n{\n // \u4fdd\u5b58\u5230\u7f51\u7ad9\u6839\u76ee\u5f55\u4e0b\u7684 uploads \u76ee\u5f55\n var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, "uploads");\n if(!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);\n\n // \u603b\u4e0a\u4f20\u5927\u5c0f\n long size = files.Sum(f => f.Length);\n\n // \u904d\u5386\u6240\u6709\u6587\u4ef6\u9010\u4e00\u4e0a\u4f20\n foreach (var formFile in files)\n {\n if (formFile.Length > 0)\n {\n // \u907f\u514d\u6587\u4ef6\u540d\u91cd\u590d\uff0c\u91c7\u7528 GUID \u751f\u6210\n var fileName = Guid.NewGuid().ToString("N") + Path.GetExtension(clientFileName);\n var filePath = Path.Combine(savePath, fileName);\n\n // \u4fdd\u5b58\u5230\u6307\u5b9a\u8def\u5f84\n using (var stream = System.IO.File.Create(filePath))\n {\n await formFile.CopyToAsync(stream);\n }\n }\n }\n\n // \u5728\u52a8\u6001 API \u76f4\u63a5\u8fd4\u56de\u5bf9\u8c61\u5373\u53ef\uff0c\u65e0\u9700 OK \u548c IActionResult\n return Ok(new { count = files.Count, size });\n}\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"\u591a\u6587\u4ef6 ",(0,a.kt)("inlineCode",{parentName:"strong"},"List")," ",(0,a.kt)("inlineCode",{parentName:"strong"},"Base64")," \u7c7b\u578b\u53c2\u6570\uff08\u5b58\u50a8\u5230\u786c\u76d8\uff09"))),(0,a.kt)("p",null,"\u4ee3\u7801\u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"\u5355\u6587\u4ef6\u5904\u7406\u4e00\u81f4"),"\uff0c\u53ea\u9700 ",(0,a.kt)("inlineCode",{parentName:"p"},"foreach")," \u5373\u53ef\uff08\u53c2\u4e0a\uff09\u3002"),(0,a.kt)("h3",{id:"3163-\u5c06-iformfile-\u8f6c-byte"},"31.6.3 \u5c06 ",(0,a.kt)("inlineCode",{parentName:"h3"},"IFormFile")," \u8f6c ",(0,a.kt)("inlineCode",{parentName:"h3"},"byte[]")),(0,a.kt)("p",null,"\u6709\u65f6\u5019\u6211\u4eec\u9700\u8981\u5c06\u6587\u4ef6\u8f6c\u6362\u6210 ",(0,a.kt)("inlineCode",{parentName:"p"},"byte[]")," \u5b58\u50a8\u5230\u6570\u636e\u5e93\uff0c\u800c\u4e0d\u662f\u5b58\u50a8\u5230\u786c\u76d8\u4e2d\u3002"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4-8}",showLineNumbers:!0,"{4-8}":!0},"[HttpPost]\npublic async Task UploadFileAsync(IFormFile file)\n{\n var fileLength = file.Length;\n using var stream = file.OpenReadStream();\n var bytes = new byte[fileLength];\n\n stream.Read(bytes, 0, (int)fileLength);\n\n // \u8fd9\u91cc\u5c06 bytes \u5b58\u50a8\u5230\u4f60\u60f3\u8981\u7684\u4ecb\u8d28\u4e2d\u5373\u53ef\n}\n")),(0,a.kt)("admonition",{title:"\u4fbf\u6377\u62d3\u5c55\u65b9\u6cd5",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u5728 Furion ",(0,a.kt)("inlineCode",{parentName:"p"},"v3.2.0")," \u65b0\u589e\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"IFormFile")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"ToByteArray")," \u62d3\u5c55\uff0c\u5982:"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {4}",showLineNumbers:!0,"":!0,"{4}":!0},"[HttpPost]\npublic async Task UploadFileAsync(IFormFile file)\n{\n var bytes = file.ToByteArray();\n\n // \u8fd9\u91cc\u5c06 bytes \u5b58\u50a8\u5230\u4f60\u60f3\u8981\u7684\u4ecb\u8d28\u4e2d\u5373\u53ef\n}\n"))),(0,a.kt)("h3",{id:"3164-\u5c06-byte-\u8f93\u51fa\u4e3a-url-\u5730\u5740"},"31.6.4 \u5c06 ",(0,a.kt)("inlineCode",{parentName:"h3"},"byte[]")," \u8f93\u51fa\u4e3a ",(0,a.kt)("inlineCode",{parentName:"h3"},"Url")," \u5730\u5740"),(0,a.kt)("p",null,"\u7531\u4e8e\u4e00\u4e9b\u9879\u76ee\u76f4\u63a5\u5c06\u6587\u4ef6\u4e8c\u8fdb\u5236\u5b58\u50a8\u5728\u6570\u636e\u5e93\u4e2d\uff0c\u8bfb\u53d6\u5230\u5185\u5b58\u7684\u65f6\u5019\u90fd\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"byte[]")," \u6570\u7ec4\uff0c\u6bd4\u5982\u6211\u4eec\u5c06\u56fe\u7247\u6587\u4ef6\u5b58\u50a8\u5728\u6570\u636e\u5e93\u4e2d\uff0c\u7136\u540e\u524d\u7aef\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"Url")," \u94fe\u63a5\u8fdb\u884c\u8bbf\u95ee\uff0c\u8fd9\u4e2a\u65f6\u5019\u5c31\u9700\u8981\u5c06 ",(0,a.kt)("inlineCode",{parentName:"p"},"byte[]")," \u8f6c\u6362\u4e3a\u6709\u6548\u7684\u8d44\u6e90\u8def\u5f84\u683c\u5f0f\uff0c\u5982\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,7}",showLineNumbers:!0,"{1,7}":!0},"[NonUnify, HttpGet, AllowAnonymous]\npublic async Task attachment(string resourceId)\n{\n // \u6839\u636e resourceId \u67e5\u8be2 byte[] \u5b57\u8282\u6570\u7ec4\u548c content-type\n\n // \u8fd4\u56de FileContentResult \u7c7b\u578b\n return new FileContentResult(\u5b57\u8282\u6570\u7ec4\uff0ccontent-type);\n}\n")),(0,a.kt)("p",null,"\u4e4b\u540e\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"https://localhost/attachment/\u8d44\u6e90id")," \u8bbf\u95ee\u6587\u4ef6\u6216\u56fe\u7247\u4e86\u3002"),(0,a.kt)("h2",{id:"317-\u8bf7\u6c42\u5927\u5c0f\u63a7\u5236\u4e0a\u4f20\u6587\u4ef6\u5927\u5c0f\u63a7\u5236"},"31.7 \u8bf7\u6c42\u5927\u5c0f\u63a7\u5236\uff08\u4e0a\u4f20\u6587\u4ef6\u5927\u5c0f\u63a7\u5236\uff09"),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Web")," \u9879\u76ee\u4e2d\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"Kestrel")," \u548c ",(0,a.kt)("inlineCode",{parentName:"p"},"HttpSys")," \u90fd\u5f3a\u5236\u5b9e\u65bd ",(0,a.kt)("inlineCode",{parentName:"p"},"30M (~28.6MiB)")," \u7684\u6700\u5927\u8bf7\u6c42\u6b63\u6587\u5927\u5c0f\u9650\u5236\uff0c\u5982\u679c\u8bf7\u6c42\u6b63\u6587\u5927\u5c0f\u8d85\u8fc7\u914d\u7f6e\u7684\u6700\u5927\u8bf7\u6c42\u6b63\u6587\u5927\u5c0f\u9650\u5236\uff0c\u5219\u5f15\u53d1 ",(0,a.kt)("inlineCode",{parentName:"p"},"Request body too large. The max request body size is xxxxx")," \u5f02\u5e38\uff0c\u72b6\u6001\u7801\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"413")," \u6216 ",(0,a.kt)("inlineCode",{parentName:"p"},"500"),"\u3002"),(0,a.kt)("h3",{id:"3171-\u5bf9\u7279\u5b9a\u7684\u63a5\u53e3\u8fdb\u884c\u63a7\u5236"},"31.7.1 \u5bf9\u7279\u5b9a\u7684\u63a5\u53e3\u8fdb\u884c\u63a7\u5236"),(0,a.kt)("p",null,"\u53ef\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},"[RequestSizeLimit]")," \u7279\u6027\u8fdb\u884c\u7279\u5b9a\u9650\u5236"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"{2}":!0},"[HttpPost]\n[RequestSizeLimit(100_000_000)]\npublic IActionResult MyAction([FromBody] MyViewModel data)\n{\n}\n")),(0,a.kt)("h3",{id:"3172-\u5bf9\u7279\u5b9a\u63a5\u53e3\u53d6\u6d88\u9650\u5236"},"31.7.2 \u5bf9\u7279\u5b9a\u63a5\u53e3\u53d6\u6d88\u9650\u5236"),(0,a.kt)("p",null,"\u5982\u679c\u4e0d\u9700\u8981\u5bf9\u8bf7\u6c42\u5927\u5c0f\u8fdb\u884c\u9650\u5236\uff0c\u4e5f\u5c31\u662f\u652f\u6301\u63d0\u4ea4\u65e0\u9650\u5927\u5c0f\uff0c\u5219\u8d34 ",(0,a.kt)("inlineCode",{parentName:"p"},"[DisableRequestSizeLimit]")," \u7279\u6027\u5373\u53ef\u3002"),(0,a.kt)("h3",{id:"3173-\u901a\u7528\u4e2d\u95f4\u4ef6\u8fdb\u884c\u63a7\u5236"},"31.7.3 \u901a\u7528\u4e2d\u95f4\u4ef6\u8fdb\u884c\u63a7\u5236"),(0,a.kt)("p",null,"\u6211\u4eec\u4e5f\u53ef\u4ee5\u901a\u8fc7\u4e2d\u95f4\u4ef6\u7684\u65b9\u5f0f\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u8fdb\u884c\u914d\u7f6e\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3}",showLineNumbers:!0,"{1,3}":!0},"app.Run(async context =>\n{\n context.Features.Get().MaxRequestBodySize = 100_000_000; // \u8bbe\u7f6e null \u5c31\u662f\u4e0d\u9650\u5236\uff0c\u5177\u4f53\u503c\u5c31\u662f\u9650\u5236\u6700\u5927\u591a\u5c11 M\n}\n")),(0,a.kt)("p",null,"\u5982\u679c\u8bbe\u7f6e ",(0,a.kt)("inlineCode",{parentName:"p"},"MaxRequestBodySize")," \u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"null")," \uff0c\u5219\u7b49\u540c\u4e8e\u53d6\u6d88\u9650\u5236\uff0c\u4e5f\u5c31\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"[DisableRequestSizeLimit]")," \u7684\u6548\u679c\u3002"),(0,a.kt)("admonition",{title:"\u5c0f\u6ce8\u610f",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u6709\u65f6\u5019\u914d\u7f6e\u4e86\u4e2d\u95f4\u4ef6\u6548\u679c\u53d1\u73b0\u6ca1\u8d77\u4f5c\u7528\uff0c\u5f88\u6709\u53ef\u80fd\u548c\u4e2d\u95f4\u4ef6\u987a\u5e8f\u6709\u5173\uff0c\u53ef\u4ee5\u901a\u8fc7 ",(0,a.kt)("inlineCode",{parentName:"p"},".IsReadOnly")," \u5c5e\u6027\u5224\u65ad\uff0c\u5982\u679c\u4e3a ",(0,a.kt)("inlineCode",{parentName:"p"},"true")," \uff0c\u8bf4\u660e\u4f60\u7684\u914d\u7f6e\u65e0\u6548\uff0c\u53ea\u6709 ",(0,a.kt)("inlineCode",{parentName:"p"},"false")," \u624d\u6709\u6548\u3002")),(0,a.kt)("h3",{id:"3174-\u5168\u5c40\u914d\u7f6e"},"31.7.4 \u5168\u5c40\u914d\u7f6e"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"IIS")," \u65b9\u5f0f\uff1a")),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u5f00\u53d1\u73af\u5883\uff08IISExpress\uff09"))),(0,a.kt)("p",null,"\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Web")," \u542f\u52a8\u5c42\uff08\u901a\u5e38\u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"XXX.Web.Entry"),"\uff09\u6839\u76ee\u5f55\u4e0b\u521b\u5efa ",(0,a.kt)("inlineCode",{parentName:"p"},"web.config")," \u6587\u4ef6\uff0c\u5185\u5bb9\u5982\u4e0b\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-xml",metastring:"showLineNumbers {3-9}",showLineNumbers:!0,"{3-9}":!0},'\n\n \n \n \n \n \n \n \n\n')),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"\u751f\u4ea7\u73af\u5883"))),(0,a.kt)("p",null,"\u901a\u5e38\u751f\u4ea7\u73af\u5883 ",(0,a.kt)("inlineCode",{parentName:"p"},"IIS")," \u81ea\u52a8\u9879\u76ee\u6dfb\u52a0\u4e86 ",(0,a.kt)("inlineCode",{parentName:"p"},"web.config")," \u6587\u4ef6\uff0c\u8fd9\u65f6\u5019\u53ea\u9700\u8981\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"")," \u8282\u70b9\u4e0b\u6dfb\u52a0\u4e0b\u9762\u5185\u5bb9\u5373\u53ef\uff1a"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-xml",metastring:"showLineNumbers {3-5}",showLineNumbers:!0,"{3-5}":!0},'\n \n \n \n \n \n\n')),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"Kestrel")," \u65b9\u5f0f\uff1a")),(0,a.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u672a\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"IIS")," \u6258\u7ba1\u65f6\uff0c",(0,a.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u9ed8\u8ba4\u4f7f\u7528 ",(0,a.kt)("inlineCode",{parentName:"p"},"Kestrel")," \u65b9\u5f0f\u3002")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,8}",showLineNumbers:!0,"{1,8}":!0},"// .NET5 \u65b9\u5f0f\uff0c\u5728 .ConfigureWebHostDefaults \u91cc\u9762\u914d\u7f6e\n.UseStartup()\n.UseKestrel(options =>\n{\n options.Limits.MaxRequestBodySize = null; // \u8bbe\u7f6e null \u5c31\u662f\u4e0d\u9650\u5236\uff0c\u5177\u4f53\u503c\u5c31\u662f\u9650\u5236\u6700\u5927\u591a\u5c11 M\n}\n\n// .NET6 \u65b9\u5f0f,\u5728 progame.cs \u6587\u4ef6 var app = builder.Build(); \u4e4b\u540e\u914d\u7f6e\napp.Configuration.Get().ConfigureKestrel(options =>\n{\n options.Limits.MaxRequestBodySize = null; // \u8bbe\u7f6e null \u5c31\u662f\u4e0d\u9650\u5236\uff0c\u5177\u4f53\u503c\u5c31\u662f\u9650\u5236\u6700\u5927\u591a\u5c11 M\n});\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"HttpSys")," \u65b9\u5f0f\uff1a")),(0,a.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("inlineCode",{parentName:"p"},"HTTP.sys")," \u662f\u4ec5\u5728 ",(0,a.kt)("inlineCode",{parentName:"p"},"Windows")," \u4e0a\u8fd0\u884c\u7684\u9002\u7528\u4e8e ",(0,a.kt)("inlineCode",{parentName:"p"},"ASP.NET Core")," \u7684 ",(0,a.kt)("inlineCode",{parentName:"p"},"Web")," \u670d\u52a1\u5668\u3002 ",(0,a.kt)("inlineCode",{parentName:"p"},"HTTP.sys")," \u662f ",(0,a.kt)("inlineCode",{parentName:"p"},"Kestrel")," \u670d\u52a1\u5668\u7684\u66ff\u4ee3\u9009\u62e9\uff0c\u63d0\u4f9b\u4e86\u4e00\u4e9b ",(0,a.kt)("inlineCode",{parentName:"p"},"Kestrel")," \u4e0d\u63d0\u4f9b\u7684\u529f\u80fd\u3002")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"// .NET5 \u65b9\u5f0f\u540c\u4e0a\n.UseHttpSys(options =>\n{\n options.MaxRequestBodySize = 100_000_000; // \u8bbe\u7f6e null \u5c31\u662f\u4e0d\u9650\u5236\uff0c\u5177\u4f53\u503c\u5c31\u662f\u9650\u5236\u6700\u5927\u591a\u5c11 M\n}\n\n// .NET6 \u65b9\u5f0f\u540c\u4e0a\n")),(0,a.kt)("h2",{id:"318-\u53cd\u9988\u4e0e\u5efa\u8bae"},"31.8 \u53cd\u9988\u4e0e\u5efa\u8bae"),(0,a.kt)("admonition",{title:"\u4e0e\u6211\u4eec\u4ea4\u6d41",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"\u7ed9 Furion \u63d0 ",(0,a.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/issues/new?issue"},"Issue"),"\u3002")),(0,a.kt)("hr",null))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/c0812ddb.add60091.js b/handbook/build/assets/js/c0812ddb.add60091.js new file mode 100644 index 00000000000..4d3629a3a45 --- /dev/null +++ b/handbook/build/assets/js/c0812ddb.add60091.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[5827],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return m}});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),u=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=u(e.components);return r.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=u(n),m=o,k=d["".concat(p,".").concat(m)]||d[m]||c[m]||i;return n?r.createElement(k,a(a({ref:t},s),{},{components:n})):r.createElement(k,a({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var u=2;u.NET 6 Preview 6 SDK",id:"\u5b89\u88c5-net-6-preview-6-sdk",level:2},{value:"\u65e7\u9879\u76ee\u5347\u7ea7",id:"\u65e7\u9879\u76ee\u5347\u7ea7",level:2},{value:"\u65b0\u9879\u76ee\u4f7f\u7528",id:"\u65b0\u9879\u76ee\u4f7f\u7528",level:2},{value:"\u5347\u7ea7 Visual Studio 2019",id:"\u5347\u7ea7-visual-studio-2019",level:3},{value:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50",level:3},{value:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee",level:3}],d={toc:c};function m(e){var t=e.components,n=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"2021 \u5e74 08 \u6708 11 \u65e5\uff0c\u5fae\u8f6f\u53d1\u5e03\u4e86 ",(0,i.kt)("inlineCode",{parentName:"strong"},".NET 6 Preview 7")," \u7248\u672c\uff0c",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion")," \u5728\u5f53\u5929\u7b2c\u4e00\u65f6\u95f4\u9002\u914d\u4e86\u8be5\u7248\u672c\uff0c\u5e76\u53d1\u5e03 ",(0,i.kt)("inlineCode",{parentName:"strong"},"Furion v3.0.0-rc.2")," \u7248\u672c\u3002")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://gitee.com/dotnetchina/Furion/tree/3.0.0-rc.2/"},"Furion .NET 6 Preview 7 \u6e90\u7801\u5730\u5740")),(0,i.kt)("h2",{id:"\u5b89\u88c5-net-6-preview-6-sdk"},"\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"h2"},".NET 6 Preview 6 SDK")),(0,i.kt)("p",null,"\u5c1d\u9c9c\u4e4b\u524d\uff0c\u9996\u5148\u5148\u5b89\u88c5 ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 7 SDK"),"\uff0c\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://dotnet.microsoft.com/download/dotnet/6.0"},"https://dotnet.microsoft.com/download/dotnet/6.0")),(0,i.kt)("p",null,"\u4e0b\u8f7d\u5bf9\u5e94\u7cfb\u7edf\u548c\u5904\u7406\u5668\u7248\u672c\u5373\u53ef\u3002"),(0,i.kt)("h2",{id:"\u65e7\u9879\u76ee\u5347\u7ea7"},"\u65e7\u9879\u76ee\u5347\u7ea7"),(0,i.kt)("p",null,"\u7f16\u8f91\u6240\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},".csproj")," \u9879\u76ee\uff0c\u4fee\u6539 ",(0,i.kt)("inlineCode",{parentName:"p"},"net5.0")," \u4e3a ",(0,i.kt)("inlineCode",{parentName:"p"},"net6.0"),"\u3002"),(0,i.kt)("p",null,"\u540c\u65f6\u5347\u7ea7\u6240\u6709 ",(0,i.kt)("inlineCode",{parentName:"p"},"Microsoft")," \u548c ",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u5305\u4e3a\u6700\u65b0\u7248\u672c\uff0c",(0,i.kt)("inlineCode",{parentName:"p"},"Furion")," \u6700\u65b0\u7248\u672c\u4e3a\uff1a",(0,i.kt)("inlineCode",{parentName:"p"},"v3.0.0-rc.1"),"\u3002"),(0,i.kt)("h2",{id:"\u65b0\u9879\u76ee\u4f7f\u7528"},"\u65b0\u9879\u76ee\u4f7f\u7528"),(0,i.kt)("h3",{id:"\u5347\u7ea7-visual-studio-2019"},"\u5347\u7ea7 ",(0,i.kt)("inlineCode",{parentName:"h3"},"Visual Studio 2019")),(0,i.kt)("p",null,"\u76ee\u524d ",(0,i.kt)("inlineCode",{parentName:"p"},".NET 6 Preview 7")," \u652f\u6301\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview 16.11.0 Preview 4.0")," \u7248\u672c\uff0c",(0,i.kt)("strong",{parentName:"p"},"\u6ce8\u610f\u662f ",(0,i.kt)("inlineCode",{parentName:"strong"},"Preview")," \u6700\u65b0\u7248\u672c"),"\u3002\u4e0b\u8f7d\u5730\u5740\uff1a",(0,i.kt)("a",{parentName:"p",href:"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16"},"https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16")),(0,i.kt)("p",null,"\u5df2\u7ecf\u5b89\u88c5\u4e86 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio 2019 Preview")," \u7248\u672c\u7684\u670b\u53cb\u76f4\u63a5\u5347\u7ea7\u5230\u6700\u65b0\u7248\u5373\u53ef\u3002"),(0,i.kt)("admonition",{title:"\u7279\u522b\u8bf4\u660e",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"\u5982\u679c\u4f7f\u7528 ",(0,i.kt)("inlineCode",{parentName:"p"},"Visual Studio Code")," \u5f00\u53d1\uff0c\u53ef\u5ffd\u7565\u6b64\u9009\u9879\u3002")),(0,i.kt)("h3",{id:"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"},"\u7b2c\u4e00\u4e2a\u4f8b\u5b50"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Furion v3.0.0-rc.2")," \u76ee\u524d\u63d0\u4f9b\u4e86\u6240\u6709\u7c7b\u578b\u7684\u811a\u624b\u67b6\uff0c\u7248\u672c\u53f7\u7edf\u4e00 ",(0,i.kt)("inlineCode",{parentName:"p"},"3.0.0-rc.2"),"\u3002"),(0,i.kt)("p",null,"\u5b89\u88c5\u811a\u624b\u67b6\uff0c\u6253\u5f00 ",(0,i.kt)("inlineCode",{parentName:"p"},"CMD/Powershell")," \u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new --install Furion.Template.Api::3.0.0-rc.2\n")),(0,i.kt)("p",null,"\u521b\u5efa\u9879\u76ee"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"dotnet new furionapi -n FurionNET6\n")),(0,i.kt)("h3",{id:"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"},"\u6253\u5f00\u5e76\u542f\u52a8\u9879\u76ee"),(0,i.kt)("p",null,"\u6253\u5f00\u6d4f\u89c8\u5668\u67e5\u770b\u6548\u679c\u5373\u53ef\u3002"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/handbook/build/assets/js/c4b1c400.9a917fb5.js b/handbook/build/assets/js/c4b1c400.9a917fb5.js new file mode 100644 index 00000000000..31f645743a8 --- /dev/null +++ b/handbook/build/assets/js/c4b1c400.9a917fb5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfurion=self.webpackChunkfurion||[]).push([[6931],{3905:function(e,n,t){t.d(n,{Zo:function(){return p},kt:function(){return m}});var a=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=a.createContext({}),u=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},p=function(e){var n=u(e.components);return a.createElement(s.Provider,{value:n},e.children)},c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},d=a.forwardRef((function(e,n){var t=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=u(t),m=i,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||r;return t?a.createElement(g,o(o({ref:n},p),{},{components:t})):a.createElement(g,o({ref:n},p))}));function m(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var r=t.length,o=new Array(r);o[0]=d;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,o[1]=l;for(var u=2;uSignalR",id:"243-\u5173\u4e8e-signalr",level:2},{value:"24.3.1 \u5fae\u8f6f\u5b98\u65b9\u4ecb\u7ecd",id:"2431-\u5fae\u8f6f\u5b98\u65b9\u4ecb\u7ecd",level:3},{value:"24.4 \u6ce8\u518c SignalR \u670d\u52a1",id:"244-\u6ce8\u518c-signalr-\u670d\u52a1",level:2},{value:"24.5 SignalR \u957f\u8fde\u63a5\u548c\u96c6\u7ebf\u5668",id:"245-signalr-\u957f\u8fde\u63a5\u548c\u96c6\u7ebf\u5668",level:2},{value:"24.5.1 \u6301\u4e45\u6027\u8fde\u63a5",id:"2451-\u6301\u4e45\u6027\u8fde\u63a5",level:3},{value:"24.5.2 \u96c6\u7ebf\u5668",id:"2452-\u96c6\u7ebf\u5668",level:3},{value:"24.6 \u96c6\u7ebf\u5668 Hub \u5b9a\u4e49",id:"246-\u96c6\u7ebf\u5668-hub-\u5b9a\u4e49",level:2},{value:"24.6.1 \u4e24\u79cd\u5b9a\u4e49\u65b9\u5f0f",id:"2461-\u4e24\u79cd\u5b9a\u4e49\u65b9\u5f0f",level:3},{value:"24.6.2 [MapHub] \u914d\u7f6e\u8fde\u63a5\u5730\u5740",id:"2462-maphub-\u914d\u7f6e\u8fde\u63a5\u5730\u5740",level:3},{value:"24.6.3 Hub \u6ce8\u518c\u66f4\u591a\u914d\u7f6e",id:"2463-hub-\u6ce8\u518c\u66f4\u591a\u914d\u7f6e",level:3},{value:"24.7 \u83b7\u53d6 Hub \u5b9e\u4f8b\u65b9\u5f0f",id:"247-\u83b7\u53d6-hub-\u5b9e\u4f8b\u65b9\u5f0f",level:2},{value:"24.7.1 IHubContext \u6ce8\u5165\u65b9\u5f0f",id:"2471-ihubcontext-\u6ce8\u5165\u65b9\u5f0f",level:3},{value:"24.7.2 HttpContext \u89e3\u6790\u65b9\u5f0f",id:"2472-httpcontext-\u89e3\u6790\u65b9\u5f0f",level:3},{value:"24.7.3 IHost \u4e2d\u89e3\u6790\u65b9\u5f0f",id:"2473-ihost-\u4e2d\u89e3\u6790\u65b9\u5f0f",level:3},{value:"24.7.4 \u5f3a\u7c7b\u578b IHubContext \u6ce8\u5165\u65b9\u5f0f",id:"2474-\u5f3a\u7c7b\u578b-ihubcontext-\u6ce8\u5165\u65b9\u5f0f",level:3},{value:"24.7.5 IHubContext \u6cdb\u578b\u8f6c\u6362",id:"2475-ihubcontext-\u6cdb\u578b\u8f6c\u6362",level:3},{value:"24.8 \u670d\u52a1\u7aef\u548c\u5ba2\u6237\u7aef\u53cc\u5de5\u901a\u4fe1",id:"248-\u670d\u52a1\u7aef\u548c\u5ba2\u6237\u7aef\u53cc\u5de5\u901a\u4fe1",level:2},{value:"24.8.1 \u89e6\u53d1\u6240\u6709\u5ba2\u6237\u7aef\u4ee3\u7801",id:"2481-\u89e6\u53d1\u6240\u6709\u5ba2\u6237\u7aef\u4ee3\u7801",level:3},{value:"24.8.2 \u89e6\u53d1\u8c03\u7528\u8005\u5ba2\u6237\u7aef",id:"2482-\u89e6\u53d1\u8c03\u7528\u8005\u5ba2\u6237\u7aef",level:3},{value:"24.8.3 \u89e6\u53d1\u9664\u4e86\u8c03\u7528\u8005\u4ee5\u5916\u7684\u5ba2\u6237\u7aef",id:"2483-\u89e6\u53d1\u9664\u4e86\u8c03\u7528\u8005\u4ee5\u5916\u7684\u5ba2\u6237\u7aef",level:3},{value:"24.8.4 \u89e6\u53d1\u7279\u5b9a\u7528\u6237\u5ba2\u6237\u7aef",id:"2484-\u89e6\u53d1\u7279\u5b9a\u7528\u6237\u5ba2\u6237\u7aef",level:3},{value:"24.8.5 \u89e6\u53d1\u591a\u4e2a\u7528\u6237\u5ba2\u6237\u7aef",id:"2485-\u89e6\u53d1\u591a\u4e2a\u7528\u6237\u5ba2\u6237\u7aef",level:3},{value:"24.8.6 \u89e6\u53d1\u5206\u7ec4\u5185\u5ba2\u6237\u7aef",id:"2486-\u89e6\u53d1\u5206\u7ec4\u5185\u5ba2\u6237\u7aef",level:3},{value:"24.8.7 \u89e6\u53d1\u591a\u4e2a\u5206\u7ec4\u5ba2\u6237\u7aef",id:"2487-\u89e6\u53d1\u591a\u4e2a\u5206\u7ec4\u5ba2\u6237\u7aef",level:3},{value:"24.8.8 \u89e6\u53d1\u5206\u7ec4\u5916\u7684\u5ba2\u6237\u7aef",id:"2488-\u89e6\u53d1\u5206\u7ec4\u5916\u7684\u5ba2\u6237\u7aef",level:3},{value:"24.9 \u81ea\u5b9a\u4e49\u7528\u6237\u552f\u4e00\u6807\u8bc6",id:"249-\u81ea\u5b9a\u4e49\u7528\u6237\u552f\u4e00\u6807\u8bc6",level:2},{value:"24.10 \u5206\u7ec4\u7ba1\u7406",id:"2410-\u5206\u7ec4\u7ba1\u7406",level:2},{value:"24.11 \u5404\u4e2a\u5ba2\u6237\u7aef\u8fde\u63a5 API",id:"2411-\u5404\u4e2a\u5ba2\u6237\u7aef\u8fde\u63a5-api",level:2},{value:"24.11.1 Javascript \u5ba2\u6237\u7aef",id:"24111-javascript-\u5ba2\u6237\u7aef",level:3},{value:"24.11.2 Typescript \u5ba2\u6237\u7aef",id:"24112-typescript-\u5ba2\u6237\u7aef",level:3},{value:"\u5728 vue3.2+ \u4e2d\u4f7f\u7528",id:"\u5728-vue32-\u4e2d\u4f7f\u7528",level:4},{value:"24.11.3 .NET \u5ba2\u6237\u7aef",id:"24113-net-\u5ba2\u6237\u7aef",level:3},{value:"24.11.4 Java \u5ba2\u6237\u7aef",id:"24114-java-\u5ba2\u6237\u7aef",level:3},{value:"24.12 \u5e38\u89c1\u4f8b\u5b50",id:"2412-\u5e38\u89c1\u4f8b\u5b50",level:2},{value:"24.12.1 \u5b9e\u73b0\u6d88\u606f\u5e7f\u64ad\u3001\u63a8\u9001",id:"24121-\u5b9e\u73b0\u6d88\u606f\u5e7f\u64ad\u63a8\u9001",level:3},{value:"24.12.2 \u5b9e\u73b0\u804a\u5929\u529f\u80fd",id:"24122-\u5b9e\u73b0\u804a\u5929\u529f\u80fd",level:3},{value:"24.12.3 \u5b9e\u73b0 \u4f60\u753b\u6211\u6765\u731c",id:"24123-\u5b9e\u73b0-\u4f60\u753b\u6211\u6765\u731c",level:3},{value:"24.13 \u53cd\u9988\u4e0e\u5efa\u8bae",id:"2413-\u53cd\u9988\u4e0e\u5efa\u8bae",level:2}],d={toc:c};function m(e){var n=e.components,t=(0,i.Z)(e,o);return(0,r.kt)("wrapper",(0,a.Z)({},d,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"241-\u4ec0\u4e48\u662f\u5373\u65f6\u901a\u8baf"},"24.1 \u4ec0\u4e48\u662f\u5373\u65f6\u901a\u8baf"),(0,r.kt)("p",null,"\u5373\u65f6\u901a\u8baf\uff08Instant messaging\uff0c\u7b80\u79f0 IM\uff09\u901a\u5e38\u662f\u6307\u4e92\u8054\u7f51\u4e0a\u7528\u4ee5\u8fdb\u884c\u5b9e\u65f6\u901a\u8baf\u7684\u7cfb\u7edf\uff0c\u5141\u8bb8\u4e24\u4eba\u6216\u591a\u4eba\u4f7f\u7528\u7f51\u7edc\u5373\u65f6\u7684\u4f20\u9012\u6587\u5b57\u4fe1\u606f\u3001\u6587\u6863\u3001\u8bed\u97f3\u4e0e\u89c6\u9891\u4ea4\u6d41\u3002"),(0,r.kt)("p",null,"\u5373\u65f6\u901a\u8baf\u4e0d\u540c\u4e8e e-mail \u5728\u4e8e\u5b83\u7684\u4ea4\u8c08\u662f\u5b9e\u65f6\u7684\u3002\u5927\u90e8\u5206\u7684\u5373\u65f6\u901a\u8baf\u670d\u52a1\u63d0\u4f9b\u4e86\u72b6\u6001\u4fe1\u606f\u7684\u7279\u6027 \u2500\u2500 \u663e\u793a\u8054\u7edc\u4eba\u540d\u5355\uff0c\u8054\u7edc\u4eba\u662f\u5426\u5728\u7ebf\u4e0a\u4e0e\u80fd\u5426\u4e0e\u8054\u7edc\u4eba\u4ea4\u8c08\u3002"),(0,r.kt)("p",null,"\u5728\u4e92\u8054\u7f51\u4e0a\u76ee\u524d\u4f7f\u7528\u8f83\u5e7f\u7684\u5373\u65f6\u901a\u8baf\u670d\u52a1\u5305\u62ec Windows Live Messenger\u3001AOL Instant Messenger\u3001skype\u3001Yahoo! Messenger\u3001NET Messenger Service\u3001Jabber\u3001ICQ \u4e0e QQ \u7b49\u3002"),(0,r.kt)("h2",{id:"242-\u5373\u65f6\u901a\u8baf\u5e94\u7528\u573a\u666f"},"24.2 \u5373\u65f6\u901a\u8baf\u5e94\u7528\u573a\u666f"),(0,r.kt)("p",null,"\u5373\u65f6\u901a\u8baf\u5e94\u7528\u573a\u666f\u975e\u5e38\u5e7f\u6cdb\uff0c\u9700\u8981\u5b9e\u65f6\u4ea4\u4e92\u6d88\u606f\u7684\u90fd\u9700\u8981\u3002\u5982\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u804a\u5929\u5de5\u5177\uff1aQQ\u3001WeChat\u3001\u5728\u7ebf\u5ba2\u670d\u7b49"),(0,r.kt)("li",{parentName:"ul"},"\u624b\u6e38\u7f51\u6e38\uff1a\u738b\u8005\u8363\u8000\u3001\u9b54\u517d\u7b49"),(0,r.kt)("li",{parentName:"ul"},"\u7f51\u7edc\u76f4\u64ad\uff1a\u817e\u8baf\u8bfe\u5802\u3001\u6296\u97f3\u76f4\u64ad\u7b49"),(0,r.kt)("li",{parentName:"ul"},"\u8ba2\u5355\u63a8\u9001\uff1a\u7f8e\u56e2\u3001\u9910\u996e\u4e0b\u5355\u7cfb\u7edf\u7b49"),(0,r.kt)("li",{parentName:"ul"},"\u534f\u540c\u529e\u516c\uff1a\u516c\u53f8\u5185\u90e8\u6587\u4ef6\u5206\u4eab\u3001\u5de5\u4f5c\u5b89\u6392\u3001\u5728\u7ebf\u4f1a\u8bae\u7b49\u3002")),(0,r.kt)("p",null,"\u4ee5\u4e0a\u53ea\u662f\u5217\u4e3e\u4e86\u6bd4\u8f83\u5e38\u7528\u7684\u5e94\u7528\u573a\u666f\uff0c\u4f46\u5373\u65f6\u901a\u8baf\u7684\u4f5c\u7528\u8fdc\u4e0d\u6b62\u4e8e\u6b64\u3002"),(0,r.kt)("p",null,"\u6587\u6863\u7d27\u6025\u7f16\u5199\u4e2d\uff0c\u53ef\u4ee5\u5148\u770b\u5b98\u65b9\u6587\u6863\uff1a",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?view=aspnetcore-5.0"},"https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?view=aspnetcore-5.0")),(0,r.kt)("h2",{id:"243-\u5173\u4e8e-signalr"},"24.3 \u5173\u4e8e ",(0,r.kt)("inlineCode",{parentName:"h2"},"SignalR")),(0,r.kt)("p",null,"\u5373\u65f6\u901a\u8baf\u6280\u672f\u5b9e\u73b0\u662f\u590d\u6742\u4e14\u8fc7\u4e8e\u5e95\u5c42\u5316\uff0c\u6240\u4ee5\u5fae\u8f6f\u4e3a\u4e86\u7b80\u5316\u5373\u65f6\u901a\u8baf\u5e94\u7528\u7a0b\u5e8f\uff0c\u5f00\u53d1\u51fa\u4e86\u4e00\u4e2a\u5f3a\u5927\u4e14\u7b80\u6613\u4f7f\u7528\u7684\u901a\u4fe1\u5e93\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"SignalR"),"\uff0c\u901a\u8fc7\u8be5\u5e93\u6211\u4eec\u53ef\u4ee5\u8f7b\u677e\u5b9e\u73b0\u7c7b\u4f3c QQ\u3001\u5fae\u4fe1\u8fd9\u7c7b IM \u804a\u5929\u5de5\u5177\uff0c\u4e5f\u80fd\u5feb\u901f\u5b9e\u73b0\u6d88\u606f\u63a8\u9001\u3001\u8ba2\u5355\u63a8\u9001\u8fd9\u6837\u7684\u7cfb\u7edf\u3002"),(0,r.kt)("h3",{id:"2431-\u5fae\u8f6f\u5b98\u65b9\u4ecb\u7ecd"},"24.3.1 \u5fae\u8f6f\u5b98\u65b9\u4ecb\u7ecd"),(0,r.kt)("p",null,"ASP.NET Core SignalR \u662f\u4e00\u79cd\u5f00\u653e\u6e90\u4ee3\u7801\u5e93\uff0c\u53ef\u7b80\u5316\u5c06\u5b9e\u65f6 web \u529f\u80fd\u6dfb\u52a0\u5230\u5e94\u7528\u7a0b\u5e8f\u7684\u529f\u80fd\u3002 \u5b9e\u65f6 web \u529f\u80fd\u4f7f\u670d\u52a1\u5668\u7aef\u4ee3\u7801\u53ef\u4ee5\u7acb\u5373\u5c06\u5185\u5bb9\u63a8\u9001\u5230\u5ba2\u6237\u7aef\u3002"),(0,r.kt)("p",null,"\u9002\u7528\u4e8e SignalR \uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\u9700\u8981\u4ece\u670d\u52a1\u5668\u8fdb\u884c\u9ad8\u9891\u7387\u66f4\u65b0\u7684\u5e94\u7528\u3002 \u793a\u4f8b\u5305\u62ec\u6e38\u620f\u3001\u793e\u4ea4\u7f51\u7edc\u3001\u6295\u7968\u3001\u62cd\u5356\u3001\u5730\u56fe\u548c GPS \u5e94\u7528\u3002"),(0,r.kt)("li",{parentName:"ul"},"\u4eea\u8868\u677f\u548c\u76d1\u89c6\u5e94\u7528\u3002 \u793a\u4f8b\u5305\u62ec\u516c\u53f8\u4eea\u8868\u677f\u3001\u5373\u65f6\u9500\u552e\u66f4\u65b0\u6216\u65c5\u884c\u8b66\u62a5\u3002"),(0,r.kt)("li",{parentName:"ul"},"\u534f\u4f5c\u5e94\u7528\u3002 \u534f\u4f5c\u5e94\u7528\u7684\u793a\u4f8b\u5305\u62ec\u767d\u677f\u5e94\u7528\u548c\u56e2\u961f\u4f1a\u8bae\u8f6f\u4ef6\u3002"),(0,r.kt)("li",{parentName:"ul"},"\u9700\u8981\u901a\u77e5\u7684\u5e94\u7528\u3002 \u793e\u4ea4\u7f51\u7edc\u3001\u7535\u5b50\u90ae\u4ef6\u3001\u804a\u5929\u3001\u6e38\u620f\u3001\u65c5\u884c\u8b66\u62a5\u548c\u5f88\u591a\u5176\u4ed6\u5e94\u7528\u90fd\u9700\u4f7f\u7528\u901a\u77e5\u3002")),(0,r.kt)("p",null,"\u76ee\u524d ",(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u5df2\u7ecf\u5185\u7f6e\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},".NET 5 SDK")," \u4e2d\u3002\u540c\u65f6 ",(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u652f\u6301 ",(0,r.kt)("inlineCode",{parentName:"p"},"Web\u3001App\u3001Console\u3001Desktop")," \u7b49\u591a\u4e2a\u5e94\u7528\u5e73\u53f0\u3002"),(0,r.kt)("h2",{id:"244-\u6ce8\u518c-signalr-\u670d\u52a1"},"24.4 \u6ce8\u518c ",(0,r.kt)("inlineCode",{parentName:"h2"},"SignalR")," \u670d\u52a1"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u4e2d\uff0c\u4efb\u4f55\u670d\u52a1\u529f\u80fd\u90fd\u9700\u8981\u5148\u6ce8\u518c\u540e\u518d\u4f7f\u7528\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u4e5f\u4e0d\u4f8b\u5916\u3002\u53ea\u9700\u8981\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u6dfb\u52a0\u6ce8\u518c\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,15,22,25}",showLineNumbers:!0,"":!0,"{1,15,22,25}":!0},'using Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\n\nnamespace Furion.Web.Core\n{\n public sealed class Startup : AppStartup\n {\n public void ConfigureServices(IServiceCollection services)\n {\n // \u5176\u4ed6\u4ee3\u7801...\n\n // \u6dfb\u52a0\u5373\u65f6\u901a\u8baf\n services.AddSignalR();\n }\n\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n // \u5176\u4ed6\u4ee3\u7801...\n\n app.UseEndpoints(endpoints =>\n {\n // \u6ce8\u518c\u96c6\u7ebf\u5668\n endpoints.MapHubs();\n\n endpoints.MapControllerRoute(\n name: "default",\n pattern: "{controller=Home}/{action=Index}/{id?}");\n });\n }\n }\n}\n')),(0,r.kt)("h2",{id:"245-signalr-\u957f\u8fde\u63a5\u548c\u96c6\u7ebf\u5668"},"24.5 ",(0,r.kt)("inlineCode",{parentName:"h2"},"SignalR")," \u957f\u8fde\u63a5\u548c\u96c6\u7ebf\u5668"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u5305\u542b\u4e24\u79cd\u7528\u4e8e\u5728\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u5668\u4e4b\u95f4\u8fdb\u884c\u901a\u4fe1\u7684\u6a21\u578b\uff1a",(0,r.kt)("inlineCode",{parentName:"p"},"\u6301\u4e45\u6027\u8fde\u63a5"),"\u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"\u96c6\u7ebf\u5668")," \u4e2d\u5fc3\u3002"),(0,r.kt)("h3",{id:"2451-\u6301\u4e45\u6027\u8fde\u63a5"},"24.5.1 \u6301\u4e45\u6027\u8fde\u63a5"),(0,r.kt)("p",null,"\u8fde\u63a5\u8868\u793a\u7528\u4e8e\u53d1\u9001\u5355\u63a5\u6536\u65b9\u3001\u5206\u7ec4\u6216\u5e7f\u64ad\u6d88\u606f\u7684\u7b80\u5355\u7ec8\u7ed3\u70b9\u3002 ",(0,r.kt)("inlineCode",{parentName:"p"},"\u6301\u4e45\u6027\u8fde\u63a5")," (\u5728 .NET \u4ee3\u7801\u4e2d\u7531 PersistentConnection \u7c7b\u8868\u793a\uff0c\u5728 ASP.NET Core SignalR \u4e2d \uff0cPersistentConnection \u7c7b\u5df2\u88ab\u5220\u9664\u3002) \u4f7f\u5f00\u53d1\u4eba\u5458\u80fd\u591f\u76f4\u63a5\u8bbf\u95ee ",(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u516c\u5f00\u7684\u4f4e\u7ea7\u522b\u901a\u4fe1\u534f\u8bae\u3002 \u4f7f\u7528\u57fa\u4e8e\u8fde\u63a5\u7684 Api \uff08\u5982 Windows Communication Foundation\uff09\u7684\u5f00\u53d1\u4eba\u5458\u5c06\u5bf9\u4f7f\u7528\u8fde\u63a5\u901a\u4fe1\u6a21\u578b\u975e\u5e38\u719f\u6089\u3002"),(0,r.kt)("h3",{id:"2452-\u96c6\u7ebf\u5668"},"24.5.2 \u96c6\u7ebf\u5668"),(0,r.kt)("p",null,"\u96c6\u7ebf\u5668\u662f\u4e00\u79cd\u57fa\u4e8e\u8fde\u63a5 API \u6784\u5efa\u7684\u66f4\u9ad8\u7ea7\u522b\u7ba1\u9053\uff0c",(0,r.kt)("strong",{parentName:"p"},"\u5b83\u5141\u8bb8\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u5668\u76f4\u63a5\u8c03\u7528\u65b9\u6cd5"),"\u3002 ",(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u5c31\u50cf\u9b54\u672f\u4e00\u6837\u5904\u7406\u8de8\u673a\u5668\u8fb9\u754c\u7684\u8c03\u5ea6\uff0c\u4f7f\u5ba2\u6237\u7aef\u80fd\u591f\u50cf\u672c\u5730\u65b9\u6cd5\u4e00\u6837\u8f7b\u677e\u5730\u8c03\u7528\u670d\u52a1\u5668\u4e0a\u7684\u65b9\u6cd5\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002 \u5982\u679c\u5f00\u53d1\u4eba\u5458\u5df2\u4f7f\u7528\u8fdc\u7a0b\u8c03\u7528 \uff08\u5982 .NET \u8fdc\u7a0b\u5904\u7406\uff09\uff0c\u5219\u5c06\u5bf9\u4f7f\u7528\u4e2d\u5fc3\u901a\u4fe1\u6a21\u578b\u975e\u5e38\u719f\u6089\u3002 \u4f7f\u7528\u96c6\u7ebf\u5668\u8fd8\u53ef\u4ee5\u5c06\u5f3a\u7c7b\u578b\u53c2\u6570\u4f20\u9012\u7ed9\u65b9\u6cd5\uff0c\u4ece\u800c\u542f\u7528\u6a21\u578b\u7ed1\u5b9a\u3002"),(0,r.kt)("admonition",{title:"\u5c0f\u77e5\u8bc6",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u60f3\u4e86\u89e3\u66f4\u591a\u5173\u4e8e ",(0,r.kt)("inlineCode",{parentName:"p"},"\u6301\u4e45\u6027\u8fde\u63a5")," \u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"\u96c6\u7ebf\u5668\u4e2d\u5fc3")," \u53ef\u67e5\u9605 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/signalr/overview/getting-started/introduction-to-signalr#connections-and-hubs"},"SignalR \u5b98\u65b9\u6587\u6863"))),(0,r.kt)("h2",{id:"246-\u96c6\u7ebf\u5668-hub-\u5b9a\u4e49"},"24.6 \u96c6\u7ebf\u5668 ",(0,r.kt)("inlineCode",{parentName:"h2"},"Hub")," \u5b9a\u4e49"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"\u5728\u672c\u7ae0\u8282\u4e2d\u4e3b\u8981\u63a8\u8350\u4f7f\u7528\u96c6\u7ebf\u5668\u901a\u4fe1\u6a21\u578b\u65b9\u5f0f\u3002"),"\u8fd9\u91cc\u4e3b\u8981\u8bf4\u660e ",(0,r.kt)("inlineCode",{parentName:"p"},"Hub")," \u5b9a\u4e49\uff0c\u5982\u679c\u65e0\u6cd5\u7406\u89e3\u8be5\u901a\u4fe1\u6a21\u578b\u7684\u4f5c\u7528\u4e5f\u6ca1\u5173\u7cfb\uff0c\u63a5\u4e0b\u6765\u7684\u4f8b\u5b50\u4f1a\u5e26\u5927\u5bb6\u6162\u6162\u719f\u6089\u5e76\u4f7f\u7528\u3002"),(0,r.kt)("h3",{id:"2461-\u4e24\u79cd\u5b9a\u4e49\u65b9\u5f0f"},"24.6.1 \u4e24\u79cd\u5b9a\u4e49\u65b9\u5f0f"),(0,r.kt)("p",null,"\u5b9a\u4e49\u96c6\u7ebf\u5668\u53ea\u9700\u8981\u7ee7\u627f ",(0,r.kt)("inlineCode",{parentName:"p"},"Hub")," \u6216 ",(0,r.kt)("inlineCode",{parentName:"p"},"Hub")," \u6cdb\u578b\u57fa\u7c7b\u5373\u53ef\uff0c\u5982\uff1a"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Hub")," \u65b9\u5f0f")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {9}",showLineNumbers:!0,"":!0,"{9}":!0},'using Furion.InstantMessaging;\nusing Microsoft.AspNetCore.SignalR;\n\nnamespace Furion.Core\n{\n /// \n /// \u804a\u5929\u96c6\u7ebf\u5668\n /// \n public class ChatHub : Hub\n {\n // \u5b9a\u4e49\u4e00\u4e2a\u65b9\u6cd5\u4f9b\u5ba2\u6237\u7aef\u8c03\u7528\n public Task SendMessage(string user, string message)\n {\n // \u89e6\u53d1\u5ba2\u6237\u7aef\u5b9a\u4e49\u76d1\u542c\u7684\u65b9\u6cd5\n return Clients.All.SendAsync("ReceiveMessage", user, message);\n }\n }\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Hub")," \u7c7b\u578b\u65b9\u5f0f")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"public interface IChatClient\n{\n Task ReceiveMessage(string user, string message);\n}\n")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1}",showLineNumbers:!0,"":!0,"{1}":!0},"public class StronglyTypedChatHub : Hub\n{\n // \u5b9a\u4e49\u4e00\u4e2a\u65b9\u6cd5\u4f9b\u5ba2\u6237\u7aef\u8c03\u7528\n public async Task SendMessage(string user, string message)\n {\n // \u89e6\u53d1\u5ba2\u6237\u7aef\u5b9a\u4e49\u76d1\u542c\u7684\u65b9\u6cd5\n await Clients.All.ReceiveMessage(user, message);\n }\n}\n")),(0,r.kt)("p",null,"\u901a\u8fc7\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"Hub")," \u53ef\u4ee5\u5bf9\u5ba2\u6237\u7aef\u65b9\u6cd5\u8fdb\u884c\u7f16\u8bd1\u65f6\u68c0\u67e5\u3002 \u8fd9\u53ef\u4ee5\u9632\u6b62\u7531\u4e8e\u4f7f\u7528\u795e\u5947\u5b57\u7b26\u4e32\u800c\u5bfc\u81f4\u7684\u95ee\u9898\uff0c\u56e0\u4e3a ",(0,r.kt)("inlineCode",{parentName:"p"},"Hub")," \u53ea\u80fd\u63d0\u4f9b\u5bf9\u5728\u63a5\u53e3\u4e2d\u5b9a\u4e49\u7684\u65b9\u6cd5\u7684\u8bbf\u95ee\u3002"),(0,r.kt)("h3",{id:"2462-maphub-\u914d\u7f6e\u8fde\u63a5\u5730\u5740"},"24.6.2 ",(0,r.kt)("inlineCode",{parentName:"h3"},"[MapHub]")," \u914d\u7f6e\u8fde\u63a5\u5730\u5740"),(0,r.kt)("p",null,"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u5e93\u4e2d\u8981\u6c42\u6bcf\u4e00\u4e2a\u516c\u5f00\u7684\u96c6\u7ebf\u5668\u90fd\u9700\u8981\u914d\u7f6e\u5ba2\u6237\u7aef\u8fde\u63a5\u5730\u5740\uff0c\u6240\u4ee5\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u6846\u67b6\u63d0\u4f9b\u4e86\u66f4\u52a0 ",(0,r.kt)("inlineCode",{parentName:"p"},"[MapHub]")," \u914d\u7f6e\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,11}",showLineNumbers:!0,"":!0,"{1,11}":!0},'using Furion.InstantMessaging;\nusing Microsoft.AspNetCore.SignalR;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Furion.Core\n{\n /// \n /// \u804a\u5929\u96c6\u7ebf\u5668\n /// \n [MapHub("/hubs/chathub")]\n public class ChatHub : Hub\n {\n // ...\n }\n}\n')),(0,r.kt)("admonition",{type:"important"},(0,r.kt)("mdxAdmonitionTitle",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"mdxAdmonitionTitle"},"SignalR")," \u539f\u751f\u914d\u7f6e\u65b9\u5f0f"),(0,r.kt)("p",{parentName:"admonition"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Furion")," \u4e2d\u63a8\u8350\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"[MapHub]")," \u65b9\u5f0f\u914d\u7f6e\u96c6\u7ebf\u5668\u5ba2\u6237\u7aef\u8fde\u63a5\u5730\u5740\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528 ",(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u63d0\u4f9b\u7684\u65b9\u5f0f\uff0c\u5982\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u914d\u7f6e\uff1a"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {10}",showLineNumbers:!0,"":!0,"{10}":!0},'public sealed class Startup : AppStartup\n{\n // \u5176\u4ed6\u4ee3\u7801\n public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n {\n // \u5176\u4ed6\u4ee3\u7801...\n app.UseEndpoints(endpoints =>\n {\n // \u6ce8\u518c\u96c6\u7ebf\u5668\n endpoints.MapHub("/hubs/chathub");\n });\n }\n}\n'))),(0,r.kt)("h3",{id:"2463-hub-\u6ce8\u518c\u66f4\u591a\u914d\u7f6e"},"24.6.3 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Hub")," \u6ce8\u518c\u66f4\u591a\u914d\u7f6e"),(0,r.kt)("p",null,"\u6709\u4e9b\u65f6\u5019\uff0c\u6211\u4eec\u9700\u8981\u6ce8\u518c ",(0,r.kt)("inlineCode",{parentName:"p"},"Hub")," \u65f6\u914d\u7f6e\u66f4\u591a\u53c2\u6570\uff0c\u6bd4\u5982\u6743\u9650\u3001\u8de8\u57df\u7b49\uff0c\u8fd9\u65f6\u53ea\u9700\u8981\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Hub")," \u6d3e\u751f\u7c7b\u4e2d\u7f16\u5199\u4ee5\u4e0b\u9759\u6001\u65b9\u6cd5\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,8,13,18}",showLineNumbers:!0,"":!0,"{1,8,13,18}":!0},'using Furion.InstantMessaging;\nusing Microsoft.AspNetCore.SignalR;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace Furion.Core\n{\n [MapHub("/hubs/chathub")]\n public class ChatHub : Hub\n {\n // \u5176\u4ed6\u4ee3\u7801\n\n public static void HttpConnectionDispatcherOptionsSettings(HttpConnectionDispatcherOptions options)\n {\n // \u914d\u7f6e\n }\n\n public static void HubEndpointConventionBuilderSettings(HubEndpointConventionBuilder Builder)\n {\n // \u914d\u7f6e\n }\n }\n}\n')),(0,r.kt)("p",null,"\u4ee5\u4e0a\u914d\u7f6e\u7b49\u4ef7\u4e8e ",(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u7684\u914d\u7f6e\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'app.UseEndpoints(endpoints =>\n{\n var builder = endpoints.MapHub("/hubs/chathub", options =>\n {\n // \u914d\u7f6e\n });\n});\n')),(0,r.kt)("h2",{id:"247-\u83b7\u53d6-hub-\u5b9e\u4f8b\u65b9\u5f0f"},"24.7 \u83b7\u53d6 ",(0,r.kt)("inlineCode",{parentName:"h2"},"Hub")," \u5b9e\u4f8b\u65b9\u5f0f"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u63d0\u4f9b\u4e86\u51e0\u79cd\u65b9\u5f0f\u8fdb\u884c\u83b7\u53d6 ",(0,r.kt)("inlineCode",{parentName:"p"},"Hub")," \u5b9e\u4f8b\u3002"),(0,r.kt)("h3",{id:"2471-ihubcontext-\u6ce8\u5165\u65b9\u5f0f"},"24.7.1 ",(0,r.kt)("inlineCode",{parentName:"h3"},"IHubContext")," \u6ce8\u5165\u65b9\u5f0f"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"IHubContext")," \u9ed8\u8ba4\u6ce8\u518c\u4e3a\u5355\u4f8b\u6a21\u5f0f\uff0c\u53ef\u5728\u4efb\u4f55\u5730\u65b9\u76f4\u63a5\u83b7\u53d6\u5b9e\u4f8b\u3002"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,12}",showLineNumbers:!0,"{5,12}":!0},'public class HomeController : Controller\n{\n private readonly IHubContext _hubContext;\n\n public HomeController(IHubContext hubContext)\n {\n _hubContext = hubContext;\n }\n\n public async Task Index()\n {\n await _hubContext.Clients.All.SendAsync("Notify", $"Home page loaded at: {DateTime.Now}");\n return View();\n }\n}\n')),(0,r.kt)("h3",{id:"2472-httpcontext-\u89e3\u6790\u65b9\u5f0f"},"24.7.2 ",(0,r.kt)("inlineCode",{parentName:"h3"},"HttpContext")," \u89e3\u6790\u65b9\u5f0f"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2}",showLineNumbers:!0,"{2}":!0}," var hubContext = context.RequestServices\n .GetRequiredService>();\n")),(0,r.kt)("h3",{id:"2473-ihost-\u4e2d\u89e3\u6790\u65b9\u5f0f"},"24.7.3 ",(0,r.kt)("inlineCode",{parentName:"h3"},"IHost")," \u4e2d\u89e3\u6790\u65b9\u5f0f"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {6}",showLineNumbers:!0,"{6}":!0},"public class Program\n{\n public static void Main(string[] args)\n {\n var host = CreateHostBuilder(args).Build();\n var hubContext = host.Services.GetService(typeof(IHubContext));\n host.Run();\n }\n\n public static IHostBuilder CreateHostBuilder(string[] args) =>\n Host.CreateDefaultBuilder(args)\n .ConfigureWebHostDefaults(webBuilder => {\n webBuilder.UseStartup();\n });\n}\n")),(0,r.kt)("h3",{id:"2474-\u5f3a\u7c7b\u578b-ihubcontext-\u6ce8\u5165\u65b9\u5f0f"},"24.7.4 \u5f3a\u7c7b\u578b ",(0,r.kt)("inlineCode",{parentName:"h3"},"IHubContext")," \u6ce8\u5165\u65b9\u5f0f"),(0,r.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0c",(0,r.kt)("inlineCode",{parentName:"p"},"IHubContext")," \u975e\u6cdb\u578b\u5b9e\u4f8b\u8fd4\u56de\u7684\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"dynamic")," \u52a8\u6001\u7c7b\u578b\u5bf9\u8c61\uff0c\u8be5\u7c7b\u578b\u5bf9\u8c61\u65e0\u6cd5\u83b7\u5f97\u7f16\u8bd1\u671f\u8bed\u6cd5\u68c0\u67e5\u548c ",(0,r.kt)("inlineCode",{parentName:"p"},"IDE")," \u667a\u80fd\u63d0\u793a\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f20\u5165\u4e00\u4e2a\u548c\u81ea\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"p"},"Hub")," \u4e00\u6837\u7684\u65b9\u6cd5\u7b7e\u540d\u63a5\u53e3\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {5,12}",showLineNumbers:!0,"{5,12}":!0},"public class ChatController : Controller\n{\n public IHubContext _strongChatHubContext { get; }\n\n public ChatController(IHubContext chatHubContext)\n {\n _strongChatHubContext = chatHubContext;\n }\n\n public async Task SendMessage(string user, string message)\n {\n await _strongChatHubContext.Clients.All.ReceiveMessage(user, message);\n }\n}\n")),(0,r.kt)("h3",{id:"2475-ihubcontext-\u6cdb\u578b\u8f6c\u6362"},"24.7.5 ",(0,r.kt)("inlineCode",{parentName:"h3"},"IHubContext")," \u6cdb\u578b\u8f6c\u6362"),(0,r.kt)("p",null,"\u6b63\u5e38\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u83b7\u53d6\u7684\u662f ",(0,r.kt)("inlineCode",{parentName:"p"},"IHubContext<>")," \u7684\u5b9e\u4f8b\uff0c\u4f46\u5728\u4e00\u4e9b\u53cd\u5c04\u573a\u666f\u4e0b\uff0c\u53ef\u4ee5\u5c06 ",(0,r.kt)("inlineCode",{parentName:"p"},"IHubContext<>")," \u5f3a\u5236\u8f6c\u6362\u6210 ",(0,r.kt)("inlineCode",{parentName:"p"},"IHubContext")," \u4ece\u800c\u66f4\u6613\u4e8e\u64cd\u4f5c\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {2,4,6-7}",showLineNumbers:!0,"{2,4,6-7}":!0},"var myHubContext = context.RequestServices\n .GetRequiredService>();\nvar myOtherHubContext = context.RequestServices\n .GetRequiredService>();\n\nawait CommonHubContextMethod((IHubContext)myHubContext);\nawait CommonHubContextMethod((IHubContext)myOtherHubContext);\n")),(0,r.kt)("h2",{id:"248-\u670d\u52a1\u7aef\u548c\u5ba2\u6237\u7aef\u53cc\u5de5\u901a\u4fe1"},"24.8 \u670d\u52a1\u7aef\u548c\u5ba2\u6237\u7aef\u53cc\u5de5\u901a\u4fe1"),(0,r.kt)("h3",{id:"2481-\u89e6\u53d1\u6240\u6709\u5ba2\u6237\u7aef\u4ee3\u7801"},"24.8.1 \u89e6\u53d1\u6240\u6709\u5ba2\u6237\u7aef\u4ee3\u7801"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"Clients.All.\u5ba2\u6237\u7aef\u65b9\u6cd5(\u53c2\u6570);\n")),(0,r.kt)("h3",{id:"2482-\u89e6\u53d1\u8c03\u7528\u8005\u5ba2\u6237\u7aef"},"24.8.2 \u89e6\u53d1\u8c03\u7528\u8005\u5ba2\u6237\u7aef"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"Clients.Caller.\u5ba2\u6237\u7aef\u65b9\u6cd5(\u53c2\u6570);\n")),(0,r.kt)("h3",{id:"2483-\u89e6\u53d1\u9664\u4e86\u8c03\u7528\u8005\u4ee5\u5916\u7684\u5ba2\u6237\u7aef"},"24.8.3 \u89e6\u53d1\u9664\u4e86\u8c03\u7528\u8005\u4ee5\u5916\u7684\u5ba2\u6237\u7aef"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"Clients.Others.\u5ba2\u6237\u7aef\u65b9\u6cd5(\u53c2\u6570);\n")),(0,r.kt)("h3",{id:"2484-\u89e6\u53d1\u7279\u5b9a\u7528\u6237\u5ba2\u6237\u7aef"},"24.8.4 \u89e6\u53d1\u7279\u5b9a\u7528\u6237\u5ba2\u6237\u7aef"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'Clients.User("\u7528\u6237").\u5ba2\u6237\u7aef\u65b9\u6cd5(\u53c2\u6570);\n')),(0,r.kt)("h3",{id:"2485-\u89e6\u53d1\u591a\u4e2a\u7528\u6237\u5ba2\u6237\u7aef"},"24.8.5 \u89e6\u53d1\u591a\u4e2a\u7528\u6237\u5ba2\u6237\u7aef"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'Clients.Users("\u7528\u6237","\u7528\u62372",...).\u5ba2\u6237\u7aef\u65b9\u6cd5(\u53c2\u6570);\n')),(0,r.kt)("h3",{id:"2486-\u89e6\u53d1\u5206\u7ec4\u5185\u5ba2\u6237\u7aef"},"24.8.6 \u89e6\u53d1\u5206\u7ec4\u5185\u5ba2\u6237\u7aef"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'Clients.Group("\u5206\u7ec4").\u5ba2\u6237\u7aef\u65b9\u6cd5(\u53c2\u6570);\n')),(0,r.kt)("h3",{id:"2487-\u89e6\u53d1\u591a\u4e2a\u5206\u7ec4\u5ba2\u6237\u7aef"},"24.8.7 \u89e6\u53d1\u591a\u4e2a\u5206\u7ec4\u5ba2\u6237\u7aef"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'Clients.Groups("\u5206\u7ec4","\u5206\u7ec42",...).\u5ba2\u6237\u7aef\u65b9\u6cd5(\u53c2\u6570);\n')),(0,r.kt)("h3",{id:"2488-\u89e6\u53d1\u5206\u7ec4\u5916\u7684\u5ba2\u6237\u7aef"},"24.8.8 \u89e6\u53d1\u5206\u7ec4\u5916\u7684\u5ba2\u6237\u7aef"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},'Clients.GroupExcept("\u5206\u7ec4").\u5ba2\u6237\u7aef\u65b9\u6cd5(\u53c2\u6570);\n')),(0,r.kt)("h2",{id:"249-\u81ea\u5b9a\u4e49\u7528\u6237\u552f\u4e00\u6807\u8bc6"},"24.9 \u81ea\u5b9a\u4e49\u7528\u6237\u552f\u4e00\u6807\u8bc6"),(0,r.kt)("p",null,"\u9ed8\u8ba4\u60c5\u51b5\u4e0b ",(0,r.kt)("inlineCode",{parentName:"p"},"SignalR")," \u4f1a\u4e3a\u6bcf\u4e00\u4e2a\u94fe\u63a5\u521b\u5efa ",(0,r.kt)("inlineCode",{parentName:"p"},"ConnectionId"),"\uff0c\u4f46\u662f\u8fd9\u4e2a ",(0,r.kt)("inlineCode",{parentName:"p"},"ConnectionId")," \u5e76\u6ca1\u6709\u548c\u6211\u4eec\u7cfb\u7edf\u7684\u7528\u6237\u7ed1\u5173\u8054\u8d77\u6765\uff0c\u6240\u4ee5\u9700\u8981\u91c7\u7528\u81ea\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"p"},"ConnectionId"),"\uff0c\u5982\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers {1,3}",showLineNumbers:!0,"{1,3}":!0},"public class YourUserIdProvider : IUserIdProvider\n{\n public virtual string GetUserId(HubConnectionContext connection)\n {\n // \u4f60\u5982\u4f55\u83b7\u53d6 UserId\uff0c\u53ef\u4ee5\u901a\u8fc7 connection.User \u83b7\u53d6 JWT \u6388\u6743\u7684\u7528\u6237\n }\n}\n")),(0,r.kt)("p",null,"\u7136\u540e\u5728 ",(0,r.kt)("inlineCode",{parentName:"p"},"Startup.cs")," \u4e2d\u6ce8\u518c\u5373\u53ef\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"builder.Services.AddSingleton();\n")),(0,r.kt)("p",null,"\u4e4b\u540e\u5c31\u53ef\u4ee5\u901a\u8fc7\u81ea\u5b9a\u4e49 ",(0,r.kt)("inlineCode",{parentName:"p"},"UserId")," \u53d1\u9001\u6d88\u606f\uff1a"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-cs",metastring:"showLineNumbers",showLineNumbers:!0},"Clients.User(userId).\u5ba2\u6237\u7aef\u65b9\u6cd5(\u53c2\u6570);\n")),(0,r.kt)("p",null,"\u67e5\u770b\u66f4\u591a\u6587\u6863 ",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/zh-cn/aspnet/core/signalr/authn-and-authz?view=aspnetcore-6.0#use-claims-to-customize-identity-handling"},"https://docs.microsoft.com/zh-cn/aspnet/core/signalr/authn-and-authz?view=aspnetcore-6.0#use-claims-to-customize-identity-handling")),(0,r.kt)("h2",{id:"2410-\u5206\u7ec4\u7ba1\u7406"},"24.10 \u5206\u7ec4\u7ba1\u7406"),(0,r.kt)("h2",{id:"2411-\u5404\u4e2a\u5ba2\u6237\u7aef\u8fde\u63a5-api"},"24.11 \u5404\u4e2a\u5ba2\u6237\u7aef\u8fde\u63a5 API"),(0,r.kt)("h3",{id:"24111-javascript-\u5ba2\u6237\u7aef"},"24.11.1 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Javascript")," \u5ba2\u6237\u7aef"),(0,r.kt)("h3",{id:"24112-typescript-\u5ba2\u6237\u7aef"},"24.11.2 ",(0,r.kt)("inlineCode",{parentName:"h3"},"Typescript")," \u5ba2\u6237\u7aef"),(0,r.kt)("h4",{id:"\u5728-vue32-\u4e2d\u4f7f\u7528"},"\u5728 ",(0,r.kt)("inlineCode",{parentName:"h4"},"vue3.2+")," \u4e2d\u4f7f\u7528"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\u5b89\u88c5\u5fae\u8f6f\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"signalr typescript")," \u5ba2\u6237\u7aef\u5305\uff0c\u4e3b\u8981\u7528\u4e8e\u8c03\u7528\u670d\u52a1\u7aef\u65b9\u6cd5\uff0c\u5982\uff08 ",(0,r.kt)("inlineCode",{parentName:"li"},"Hub")," \u4e2d\u7684 ",(0,r.kt)("inlineCode",{parentName:"li"},"SendMessage")," \u65b9\u6cd5\uff09\uff1a")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},"npm i @microsoft/signalr @types/node\n")),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},"\u793a\u4f8b\u4ee3\u7801")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-typescript",metastring:"showLineNumbers",showLineNumbers:!0},'import { HubConnectionBuilder } from "@microsoft/signalr";\n\n + + + + + + \ No newline at end of file diff --git a/handbook/build/blog/atom.xml b/handbook/build/blog/atom.xml new file mode 100644 index 00000000000..62c22be4263 --- /dev/null +++ b/handbook/build/blog/atom.xml @@ -0,0 +1,130 @@ + + + https://furion.baiqian.ltd/blog + Furion Blog + 2022-05-31T00:00:00.000Z + https://github.com/jpmonette/feed + + Furion Blog + https://furion.baiqian.ltd/img/favicon.ico + + <![CDATA[7. GlobalUsings 的使用]]> + global-usings + + 2022-05-31T00:00:00.000Z + 简介

.NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

必要配置

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

基本使用

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

默认全局 using

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

]]>
+ + dotNET China + https://www.chinadot.net + + + + + + + +
+ + <![CDATA[6. .NET 6 Preview 7 尝鲜]]> + net6-preview7 + + 2021-08-11T00:00:00.000Z + 2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。

Furion .NET 6 Preview 7 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.2

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

]]>
+ + dotNET China + https://www.chinadot.net + + + + + + + +
+ + <![CDATA[5. 在控制台中使用]]> + console + + 2021-07-24T00:00:00.000Z + Furionv2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web控制台WinFormWPFXamarin/MAUI 等。

在控制台中使用示例:

using Furion;
using Furion.DependencyInjection;
using Furion.RemoteRequest.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 创建一个服务容器
var services = Inject.Create();
// 注册服务
services.AddRemoteRequest();
// 所有服务注册完毕后调用 Build() 构建
services.Build();

// 使用
var helloService = App.GetService<IHelloService>();
Console.WriteLine(helloService.SayHello());

Console.WriteLine("=============");

var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();
Console.WriteLine(baidu);
}
}

public interface IHelloService
{
string SayHello();
}
public class HelloService : IHelloService, ITransient
{
public string SayHello()
{
return "Hello Furion.";
}
}
}

以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。

]]>
+ + dotNET China + https://www.chinadot.net + + + + + + + +
+ + <![CDATA[4. .NET 6 Preview 6 尝鲜]]> + net6-preview6 + + 2021-07-15T00:00:00.000Z + 2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。

Furion .NET 6 Preview 6 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.1

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

]]>
+ + dotNET China + https://www.chinadot.net + + + + + + + +
+ + <![CDATA[3. .NET 6 Preview 5 尝鲜]]> + net6-preview5 + + 2021-06-18T00:00:00.000Z + 2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。

Furion .NET 6 Preview 5 源码地址

等不及尝鲜了

安装 .NET 6 Preview 5 SDK

尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

升级 Visual Studio 2019

目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

]]>
+ + dotNET China + https://www.chinadot.net + + + + + + + +
+ + <![CDATA[2. 文件上传下载]]> + fileupload-download + + 2021-02-02T00:00:00.000Z + 文件下载
[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

文件上传

[HttpPost, NonUnify]
public async Task<IActionResult> UploadFileAsync(List<IFormFile> files)
{
// 保存到网站根目录下的 uploads 目录
var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, "uploads");
if(!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);

long size = files.Sum(f => f.Length);

foreach (var formFile in files)
{
if (formFile.Length > 0)
{
// 避免文件名重复,采用 GUID 生成
var filePath = Path.Combine(savePath, Guid.NewGuid().ToString("N") + Path.GetExtension(formFile.FileName)); // 可以替代为你需要存储的真实路径

using (var stream = System.IO.File.Create(filePath))
{
await formFile.CopyToAsync(stream);
}
}
}

// 在动态 API 直接返回对象即可,无需 OK 和 IActionResult
return Ok(new { count = files.Count, size });
}
关于使用axios上传文件,方法获取到参数files.Count=0

axios请求配置

    let formData = new FormData();
formData.append("files", this.file); //files需与方法里的参数files名称一样
let config = {
headers: {
"Content-Type": "multipart/form-data",
},
};
axios.post(this.uploadURL, formData, config).then((res) => {//需引入axios
console.log(res);
});
]]>
+ + dotNET China + https://www.chinadot.net + + + + + + + + +
+ + <![CDATA[1. HttpContext 应用]]> + httpcontext + + 2021-02-01T00:00:00.000Z + HttpContext 重大调整

ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

HttpContext 多种获取方式

ControllerBase 派生类中

ControllerBase 派生类中,我们可以直接通过 HttpContext 属性获取 HttpContext 对象。

通过注入 IHttpContextAccessor

Furion 框架中,默认已经注册了 IHttpContextAccessor 服务,所以我们可以通过构造函数注入该对象获取。

public class AppService
{
public AppService(IHttpContextAccessor httpContextAccessor)
{
var httpContext = httpContextAccessor.HttpContext;
}
}

通过 App.HttpContext

App 静态类也提供了 App.HttpContext 获取 HttpContext 对象。

HttpContext 拓展方法

Furion 框架也提供了一些常用的 HttpContext 拓展方法

获取当前请求的特性

var attribute = httpContext.GetMetadata<SomeAttribute>();

设置 Swagger 自动授权

httpContext.SigninToSwagger("你的token");

退出 Swagger 授权

httpContext.SignoutToSwagger();

获取本地 IP 地址

var ipv4 = httpContext.GetLocalIpAddressToIPv4();
var ipv6 = httpContext.GetLocalIpAddressToIPv6();

获取客户端 IP 地址

var ipv4 = httpContext.GetRemoteIpAddressToIPv4();
var ipv6 = httpContext.GetRemoteIpAddressToIPv6();
]]>
+ + dotNET China + https://www.chinadot.net + + + + + + + +
+
\ No newline at end of file diff --git a/handbook/build/blog/console/index.html b/handbook/build/blog/console/index.html new file mode 100644 index 00000000000..2e5f981103f --- /dev/null +++ b/handbook/build/blog/console/index.html @@ -0,0 +1,17 @@ + + + + + +5. 在控制台中使用 | Furion + + + + + +
+

5. 在控制台中使用

· One min read
dotNET China

Furionv2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web控制台WinFormWPFXamarin/MAUI 等。

在控制台中使用示例:

using Furion;
using Furion.DependencyInjection;
using Furion.RemoteRequest.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 创建一个服务容器
var services = Inject.Create();
// 注册服务
services.AddRemoteRequest();
// 所有服务注册完毕后调用 Build() 构建
services.Build();

// 使用
var helloService = App.GetService<IHelloService>();
Console.WriteLine(helloService.SayHello());

Console.WriteLine("=============");

var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();
Console.WriteLine(baidu);
}
}

public interface IHelloService
{
string SayHello();
}
public class HelloService : IHelloService, ITransient
{
public string SayHello()
{
return "Hello Furion.";
}
}
}

以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/fileupload-download/index.html b/handbook/build/blog/fileupload-download/index.html new file mode 100644 index 00000000000..530404a50a9 --- /dev/null +++ b/handbook/build/blog/fileupload-download/index.html @@ -0,0 +1,17 @@ + + + + + +2. 文件上传下载 | Furion + + + + + +
+

2. 文件上传下载

· 2 min read
dotNET China

文件下载

[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

文件上传

[HttpPost, NonUnify]
public async Task<IActionResult> UploadFileAsync(List<IFormFile> files)
{
// 保存到网站根目录下的 uploads 目录
var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, "uploads");
if(!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);

long size = files.Sum(f => f.Length);

foreach (var formFile in files)
{
if (formFile.Length > 0)
{
// 避免文件名重复,采用 GUID 生成
var filePath = Path.Combine(savePath, Guid.NewGuid().ToString("N") + Path.GetExtension(formFile.FileName)); // 可以替代为你需要存储的真实路径

using (var stream = System.IO.File.Create(filePath))
{
await formFile.CopyToAsync(stream);
}
}
}

// 在动态 API 直接返回对象即可,无需 OK 和 IActionResult
return Ok(new { count = files.Count, size });
}
关于使用axios上传文件,方法获取到参数files.Count=0

axios请求配置

    let formData = new FormData();
formData.append("files", this.file); //files需与方法里的参数files名称一样
let config = {
headers: {
"Content-Type": "multipart/form-data",
},
};
axios.post(this.uploadURL, formData, config).then((res) => {//需引入axios
console.log(res);
});
+ + + + \ No newline at end of file diff --git a/handbook/build/blog/global-usings/index.html b/handbook/build/blog/global-usings/index.html new file mode 100644 index 00000000000..dce2fda8272 --- /dev/null +++ b/handbook/build/blog/global-usings/index.html @@ -0,0 +1,17 @@ + + + + + +7. GlobalUsings 的使用 | Furion + + + + + +
+

7. GlobalUsings 的使用

· 3 min read
dotNET China

简介

.NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

必要配置

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

基本使用

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

默认全局 using

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/httpcontext/index.html b/handbook/build/blog/httpcontext/index.html new file mode 100644 index 00000000000..306ff9d17ae --- /dev/null +++ b/handbook/build/blog/httpcontext/index.html @@ -0,0 +1,17 @@ + + + + + +1. HttpContext 应用 | Furion + + + + + +
+

1. HttpContext 应用

· 2 min read
dotNET China

HttpContext 重大调整

ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

HttpContext 多种获取方式

ControllerBase 派生类中

ControllerBase 派生类中,我们可以直接通过 HttpContext 属性获取 HttpContext 对象。

通过注入 IHttpContextAccessor

Furion 框架中,默认已经注册了 IHttpContextAccessor 服务,所以我们可以通过构造函数注入该对象获取。

public class AppService
{
public AppService(IHttpContextAccessor httpContextAccessor)
{
var httpContext = httpContextAccessor.HttpContext;
}
}

通过 App.HttpContext

App 静态类也提供了 App.HttpContext 获取 HttpContext 对象。

HttpContext 拓展方法

Furion 框架也提供了一些常用的 HttpContext 拓展方法

获取当前请求的特性

var attribute = httpContext.GetMetadata<SomeAttribute>();

设置 Swagger 自动授权

httpContext.SigninToSwagger("你的token");

退出 Swagger 授权

httpContext.SignoutToSwagger();

获取本地 IP 地址

var ipv4 = httpContext.GetLocalIpAddressToIPv4();
var ipv6 = httpContext.GetLocalIpAddressToIPv6();

获取客户端 IP 地址

var ipv4 = httpContext.GetRemoteIpAddressToIPv4();
var ipv6 = httpContext.GetRemoteIpAddressToIPv6();
+ + + + \ No newline at end of file diff --git a/handbook/build/blog/index.html b/handbook/build/blog/index.html new file mode 100644 index 00000000000..6d7e8b07186 --- /dev/null +++ b/handbook/build/blog/index.html @@ -0,0 +1,17 @@ + + + + + +Blog | Furion + + + + + +
+

· 3 min read
dotNET China

简介

.NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

必要配置

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

基本使用

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

默认全局 using

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

· 2 min read
dotNET China

2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。

Furion .NET 6 Preview 7 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.2

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· One min read
dotNET China

Furionv2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web控制台WinFormWPFXamarin/MAUI 等。

在控制台中使用示例:

using Furion;
using Furion.DependencyInjection;
using Furion.RemoteRequest.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 创建一个服务容器
var services = Inject.Create();
// 注册服务
services.AddRemoteRequest();
// 所有服务注册完毕后调用 Build() 构建
services.Build();

// 使用
var helloService = App.GetService<IHelloService>();
Console.WriteLine(helloService.SayHello());

Console.WriteLine("=============");

var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();
Console.WriteLine(baidu);
}
}

public interface IHelloService
{
string SayHello();
}
public class HelloService : IHelloService, ITransient
{
public string SayHello()
{
return "Hello Furion.";
}
}
}

以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。

· 2 min read
dotNET China

2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。

Furion .NET 6 Preview 6 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.1

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。

Furion .NET 6 Preview 5 源码地址

等不及尝鲜了

安装 .NET 6 Preview 5 SDK

尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

升级 Visual Studio 2019

目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

文件下载

[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

· 2 min read
dotNET China

HttpContext 重大调整

ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

HttpContext 多种获取方式

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/net6-preview5/index.html b/handbook/build/blog/net6-preview5/index.html new file mode 100644 index 00000000000..7d5ce413a9f --- /dev/null +++ b/handbook/build/blog/net6-preview5/index.html @@ -0,0 +1,17 @@ + + + + + +3. .NET 6 Preview 5 尝鲜 | Furion + + + + + +
+

3. .NET 6 Preview 5 尝鲜

· 2 min read
dotNET China

2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。

Furion .NET 6 Preview 5 源码地址

等不及尝鲜了

安装 .NET 6 Preview 5 SDK

尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

升级 Visual Studio 2019

目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/net6-preview6/index.html b/handbook/build/blog/net6-preview6/index.html new file mode 100644 index 00000000000..c99e992726a --- /dev/null +++ b/handbook/build/blog/net6-preview6/index.html @@ -0,0 +1,17 @@ + + + + + +4. .NET 6 Preview 6 尝鲜 | Furion + + + + + +
+

4. .NET 6 Preview 6 尝鲜

· 2 min read
dotNET China

2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。

Furion .NET 6 Preview 6 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.1

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/net6-preview7/index.html b/handbook/build/blog/net6-preview7/index.html new file mode 100644 index 00000000000..d97278f6b44 --- /dev/null +++ b/handbook/build/blog/net6-preview7/index.html @@ -0,0 +1,17 @@ + + + + + +6. .NET 6 Preview 7 尝鲜 | Furion + + + + + +
+

6. .NET 6 Preview 7 尝鲜

· 2 min read
dotNET China

2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。

Furion .NET 6 Preview 7 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.2

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/rss.xml b/handbook/build/blog/rss.xml new file mode 100644 index 00000000000..369a7ec9134 --- /dev/null +++ b/handbook/build/blog/rss.xml @@ -0,0 +1,104 @@ + + + + Furion Blog + https://furion.baiqian.ltd/blog + Furion Blog + Tue, 31 May 2022 00:00:00 GMT + https://validator.w3.org/feed/docs/rss2.html + https://github.com/jpmonette/feed + en + + <![CDATA[7. GlobalUsings 的使用]]> + https://furion.baiqian.ltd/blog/global-usings + global-usings + Tue, 31 May 2022 00:00:00 GMT + 简介

.NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

必要配置

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

基本使用

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

默认全局 using

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

]]>
+ furion + furos + .net + .netcore + .net5 + .net6 +
+ + <![CDATA[6. .NET 6 Preview 7 尝鲜]]> + https://furion.baiqian.ltd/blog/net6-preview7 + net6-preview7 + Wed, 11 Aug 2021 00:00:00 GMT + 2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。

Furion .NET 6 Preview 7 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.2

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

]]>
+ furion + furos + .net + .netcore + .net5 + .net6 +
+ + <![CDATA[5. 在控制台中使用]]> + https://furion.baiqian.ltd/blog/console + console + Sat, 24 Jul 2021 00:00:00 GMT + Furionv2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web控制台WinFormWPFXamarin/MAUI 等。

在控制台中使用示例:

using Furion;
using Furion.DependencyInjection;
using Furion.RemoteRequest.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 创建一个服务容器
var services = Inject.Create();
// 注册服务
services.AddRemoteRequest();
// 所有服务注册完毕后调用 Build() 构建
services.Build();

// 使用
var helloService = App.GetService<IHelloService>();
Console.WriteLine(helloService.SayHello());

Console.WriteLine("=============");

var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();
Console.WriteLine(baidu);
}
}

public interface IHelloService
{
string SayHello();
}
public class HelloService : IHelloService, ITransient
{
public string SayHello()
{
return "Hello Furion.";
}
}
}

以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。

]]>
+ furion + furos + .net + .netcore + .net5 + .net6 +
+ + <![CDATA[4. .NET 6 Preview 6 尝鲜]]> + https://furion.baiqian.ltd/blog/net6-preview6 + net6-preview6 + Thu, 15 Jul 2021 00:00:00 GMT + 2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。

Furion .NET 6 Preview 6 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.1

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

]]>
+ furion + furos + .net + .netcore + .net5 + .net6 +
+ + <![CDATA[3. .NET 6 Preview 5 尝鲜]]> + https://furion.baiqian.ltd/blog/net6-preview5 + net6-preview5 + Fri, 18 Jun 2021 00:00:00 GMT + 2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。

Furion .NET 6 Preview 5 源码地址

等不及尝鲜了

安装 .NET 6 Preview 5 SDK

尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

升级 Visual Studio 2019

目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

]]>
+ furion + furos + .net + .netcore + .net5 + .net6 +
+ + <![CDATA[2. 文件上传下载]]> + https://furion.baiqian.ltd/blog/fileupload-download + fileupload-download + Tue, 02 Feb 2021 00:00:00 GMT + 文件下载
[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

文件上传

[HttpPost, NonUnify]
public async Task<IActionResult> UploadFileAsync(List<IFormFile> files)
{
// 保存到网站根目录下的 uploads 目录
var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, "uploads");
if(!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);

long size = files.Sum(f => f.Length);

foreach (var formFile in files)
{
if (formFile.Length > 0)
{
// 避免文件名重复,采用 GUID 生成
var filePath = Path.Combine(savePath, Guid.NewGuid().ToString("N") + Path.GetExtension(formFile.FileName)); // 可以替代为你需要存储的真实路径

using (var stream = System.IO.File.Create(filePath))
{
await formFile.CopyToAsync(stream);
}
}
}

// 在动态 API 直接返回对象即可,无需 OK 和 IActionResult
return Ok(new { count = files.Count, size });
}
关于使用axios上传文件,方法获取到参数files.Count=0

axios请求配置

    let formData = new FormData();
formData.append("files", this.file); //files需与方法里的参数files名称一样
let config = {
headers: {
"Content-Type": "multipart/form-data",
},
};
axios.post(this.uploadURL, formData, config).then((res) => {//需引入axios
console.log(res);
});
]]>
+ furion + furos + .net + .netcore + .net5 + upload + download +
+ + <![CDATA[1. HttpContext 应用]]> + https://furion.baiqian.ltd/blog/httpcontext + httpcontext + Mon, 01 Feb 2021 00:00:00 GMT + HttpContext 重大调整

ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

HttpContext 多种获取方式

ControllerBase 派生类中

ControllerBase 派生类中,我们可以直接通过 HttpContext 属性获取 HttpContext 对象。

通过注入 IHttpContextAccessor

Furion 框架中,默认已经注册了 IHttpContextAccessor 服务,所以我们可以通过构造函数注入该对象获取。

public class AppService
{
public AppService(IHttpContextAccessor httpContextAccessor)
{
var httpContext = httpContextAccessor.HttpContext;
}
}

通过 App.HttpContext

App 静态类也提供了 App.HttpContext 获取 HttpContext 对象。

HttpContext 拓展方法

Furion 框架也提供了一些常用的 HttpContext 拓展方法

获取当前请求的特性

var attribute = httpContext.GetMetadata<SomeAttribute>();

设置 Swagger 自动授权

httpContext.SigninToSwagger("你的token");

退出 Swagger 授权

httpContext.SignoutToSwagger();

获取本地 IP 地址

var ipv4 = httpContext.GetLocalIpAddressToIPv4();
var ipv6 = httpContext.GetLocalIpAddressToIPv6();

获取客户端 IP 地址

var ipv4 = httpContext.GetRemoteIpAddressToIPv4();
var ipv6 = httpContext.GetRemoteIpAddressToIPv6();
]]>
+ furion + furos + .net + .netcore + .net5 + httpcontext +
+
+
\ No newline at end of file diff --git a/handbook/build/blog/tags/download/index.html b/handbook/build/blog/tags/download/index.html new file mode 100644 index 00000000000..46a1720817d --- /dev/null +++ b/handbook/build/blog/tags/download/index.html @@ -0,0 +1,17 @@ + + + + + +One post tagged with "download" | Furion + + + + + +
+

One post tagged with "download"

View All Tags

· 2 min read
dotNET China

文件下载

[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
+ + + + \ No newline at end of file diff --git a/handbook/build/blog/tags/furion/index.html b/handbook/build/blog/tags/furion/index.html new file mode 100644 index 00000000000..9ccc4182b57 --- /dev/null +++ b/handbook/build/blog/tags/furion/index.html @@ -0,0 +1,17 @@ + + + + + +7 posts tagged with "furion" | Furion + + + + + +
+

7 posts tagged with "furion"

View All Tags

· 3 min read
dotNET China

简介

.NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

必要配置

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

基本使用

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

默认全局 using

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

· 2 min read
dotNET China

2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。

Furion .NET 6 Preview 7 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.2

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· One min read
dotNET China

Furionv2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web控制台WinFormWPFXamarin/MAUI 等。

在控制台中使用示例:

using Furion;
using Furion.DependencyInjection;
using Furion.RemoteRequest.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 创建一个服务容器
var services = Inject.Create();
// 注册服务
services.AddRemoteRequest();
// 所有服务注册完毕后调用 Build() 构建
services.Build();

// 使用
var helloService = App.GetService<IHelloService>();
Console.WriteLine(helloService.SayHello());

Console.WriteLine("=============");

var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();
Console.WriteLine(baidu);
}
}

public interface IHelloService
{
string SayHello();
}
public class HelloService : IHelloService, ITransient
{
public string SayHello()
{
return "Hello Furion.";
}
}
}

以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。

· 2 min read
dotNET China

2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。

Furion .NET 6 Preview 6 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.1

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。

Furion .NET 6 Preview 5 源码地址

等不及尝鲜了

安装 .NET 6 Preview 5 SDK

尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

升级 Visual Studio 2019

目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

文件下载

[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

· 2 min read
dotNET China

HttpContext 重大调整

ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

HttpContext 多种获取方式

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/tags/furos/index.html b/handbook/build/blog/tags/furos/index.html new file mode 100644 index 00000000000..1f9549de627 --- /dev/null +++ b/handbook/build/blog/tags/furos/index.html @@ -0,0 +1,17 @@ + + + + + +7 posts tagged with "furos" | Furion + + + + + +
+

7 posts tagged with "furos"

View All Tags

· 3 min read
dotNET China

简介

.NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

必要配置

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

基本使用

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

默认全局 using

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

· 2 min read
dotNET China

2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。

Furion .NET 6 Preview 7 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.2

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· One min read
dotNET China

Furionv2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web控制台WinFormWPFXamarin/MAUI 等。

在控制台中使用示例:

using Furion;
using Furion.DependencyInjection;
using Furion.RemoteRequest.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 创建一个服务容器
var services = Inject.Create();
// 注册服务
services.AddRemoteRequest();
// 所有服务注册完毕后调用 Build() 构建
services.Build();

// 使用
var helloService = App.GetService<IHelloService>();
Console.WriteLine(helloService.SayHello());

Console.WriteLine("=============");

var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();
Console.WriteLine(baidu);
}
}

public interface IHelloService
{
string SayHello();
}
public class HelloService : IHelloService, ITransient
{
public string SayHello()
{
return "Hello Furion.";
}
}
}

以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。

· 2 min read
dotNET China

2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。

Furion .NET 6 Preview 6 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.1

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。

Furion .NET 6 Preview 5 源码地址

等不及尝鲜了

安装 .NET 6 Preview 5 SDK

尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

升级 Visual Studio 2019

目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

文件下载

[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

· 2 min read
dotNET China

HttpContext 重大调整

ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

HttpContext 多种获取方式

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/tags/httpcontext/index.html b/handbook/build/blog/tags/httpcontext/index.html new file mode 100644 index 00000000000..86b75595dc0 --- /dev/null +++ b/handbook/build/blog/tags/httpcontext/index.html @@ -0,0 +1,17 @@ + + + + + +One post tagged with "httpcontext" | Furion + + + + + +
+

One post tagged with "httpcontext"

View All Tags

· 2 min read
dotNET China

HttpContext 重大调整

ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

HttpContext 多种获取方式

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/tags/index.html b/handbook/build/blog/tags/index.html new file mode 100644 index 00000000000..81e4e2132bf --- /dev/null +++ b/handbook/build/blog/tags/index.html @@ -0,0 +1,17 @@ + + + + + +Tags | Furion + + + + + + + + + + \ No newline at end of file diff --git a/handbook/build/blog/tags/net-5/index.html b/handbook/build/blog/tags/net-5/index.html new file mode 100644 index 00000000000..a8ea7e76ff3 --- /dev/null +++ b/handbook/build/blog/tags/net-5/index.html @@ -0,0 +1,17 @@ + + + + + +7 posts tagged with ".net5" | Furion + + + + + +
+

7 posts tagged with ".net5"

View All Tags

· 3 min read
dotNET China

简介

.NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

必要配置

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

基本使用

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

默认全局 using

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

· 2 min read
dotNET China

2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。

Furion .NET 6 Preview 7 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.2

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· One min read
dotNET China

Furionv2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web控制台WinFormWPFXamarin/MAUI 等。

在控制台中使用示例:

using Furion;
using Furion.DependencyInjection;
using Furion.RemoteRequest.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 创建一个服务容器
var services = Inject.Create();
// 注册服务
services.AddRemoteRequest();
// 所有服务注册完毕后调用 Build() 构建
services.Build();

// 使用
var helloService = App.GetService<IHelloService>();
Console.WriteLine(helloService.SayHello());

Console.WriteLine("=============");

var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();
Console.WriteLine(baidu);
}
}

public interface IHelloService
{
string SayHello();
}
public class HelloService : IHelloService, ITransient
{
public string SayHello()
{
return "Hello Furion.";
}
}
}

以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。

· 2 min read
dotNET China

2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。

Furion .NET 6 Preview 6 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.1

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。

Furion .NET 6 Preview 5 源码地址

等不及尝鲜了

安装 .NET 6 Preview 5 SDK

尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

升级 Visual Studio 2019

目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

文件下载

[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

· 2 min read
dotNET China

HttpContext 重大调整

ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

HttpContext 多种获取方式

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/tags/net-6/index.html b/handbook/build/blog/tags/net-6/index.html new file mode 100644 index 00000000000..1d7ff61dc21 --- /dev/null +++ b/handbook/build/blog/tags/net-6/index.html @@ -0,0 +1,17 @@ + + + + + +5 posts tagged with ".net6" | Furion + + + + + +
+

5 posts tagged with ".net6"

View All Tags

· 3 min read
dotNET China

简介

.NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

必要配置

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

基本使用

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

默认全局 using

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

· 2 min read
dotNET China

2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。

Furion .NET 6 Preview 7 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.2

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· One min read
dotNET China

Furionv2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web控制台WinFormWPFXamarin/MAUI 等。

在控制台中使用示例:

using Furion;
using Furion.DependencyInjection;
using Furion.RemoteRequest.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 创建一个服务容器
var services = Inject.Create();
// 注册服务
services.AddRemoteRequest();
// 所有服务注册完毕后调用 Build() 构建
services.Build();

// 使用
var helloService = App.GetService<IHelloService>();
Console.WriteLine(helloService.SayHello());

Console.WriteLine("=============");

var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();
Console.WriteLine(baidu);
}
}

public interface IHelloService
{
string SayHello();
}
public class HelloService : IHelloService, ITransient
{
public string SayHello()
{
return "Hello Furion.";
}
}
}

以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。

· 2 min read
dotNET China

2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。

Furion .NET 6 Preview 6 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.1

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。

Furion .NET 6 Preview 5 源码地址

等不及尝鲜了

安装 .NET 6 Preview 5 SDK

尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

升级 Visual Studio 2019

目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/tags/net/index.html b/handbook/build/blog/tags/net/index.html new file mode 100644 index 00000000000..5c934dc4833 --- /dev/null +++ b/handbook/build/blog/tags/net/index.html @@ -0,0 +1,17 @@ + + + + + +7 posts tagged with ".net" | Furion + + + + + +
+

7 posts tagged with ".net"

View All Tags

· 3 min read
dotNET China

简介

.NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

必要配置

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

基本使用

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

默认全局 using

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

· 2 min read
dotNET China

2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。

Furion .NET 6 Preview 7 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.2

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· One min read
dotNET China

Furionv2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web控制台WinFormWPFXamarin/MAUI 等。

在控制台中使用示例:

using Furion;
using Furion.DependencyInjection;
using Furion.RemoteRequest.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 创建一个服务容器
var services = Inject.Create();
// 注册服务
services.AddRemoteRequest();
// 所有服务注册完毕后调用 Build() 构建
services.Build();

// 使用
var helloService = App.GetService<IHelloService>();
Console.WriteLine(helloService.SayHello());

Console.WriteLine("=============");

var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();
Console.WriteLine(baidu);
}
}

public interface IHelloService
{
string SayHello();
}
public class HelloService : IHelloService, ITransient
{
public string SayHello()
{
return "Hello Furion.";
}
}
}

以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。

· 2 min read
dotNET China

2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。

Furion .NET 6 Preview 6 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.1

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。

Furion .NET 6 Preview 5 源码地址

等不及尝鲜了

安装 .NET 6 Preview 5 SDK

尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

升级 Visual Studio 2019

目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

文件下载

[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

· 2 min read
dotNET China

HttpContext 重大调整

ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

HttpContext 多种获取方式

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/tags/netcore/index.html b/handbook/build/blog/tags/netcore/index.html new file mode 100644 index 00000000000..7d6269d89e5 --- /dev/null +++ b/handbook/build/blog/tags/netcore/index.html @@ -0,0 +1,17 @@ + + + + + +7 posts tagged with ".netcore" | Furion + + + + + +
+

7 posts tagged with ".netcore"

View All Tags

· 3 min read
dotNET China

简介

.NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

必要配置

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

基本使用

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

默认全局 using

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

· 2 min read
dotNET China

2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。

Furion .NET 6 Preview 7 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.2

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· One min read
dotNET China

Furionv2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web控制台WinFormWPFXamarin/MAUI 等。

在控制台中使用示例:

using Furion;
using Furion.DependencyInjection;
using Furion.RemoteRequest.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
// 创建一个服务容器
var services = Inject.Create();
// 注册服务
services.AddRemoteRequest();
// 所有服务注册完毕后调用 Build() 构建
services.Build();

// 使用
var helloService = App.GetService<IHelloService>();
Console.WriteLine(helloService.SayHello());

Console.WriteLine("=============");

var baidu = "https://www.baidu.com".GetAsStringAsync().GetAwaiter().GetResult();
Console.WriteLine(baidu);
}
}

public interface IHelloService
{
string SayHello();
}
public class HelloService : IHelloService, ITransient
{
public string SayHello()
{
return "Hello Furion.";
}
}
}

以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。

· 2 min read
dotNET China

2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。

Furion .NET 6 Preview 6 源码地址

安装 .NET 6 Preview 6 SDK

尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

旧项目升级

编辑所有 .csproj 项目,修改 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>

同时升级所有 MicrosoftFurion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1

新项目使用

升级 Visual Studio 2019

目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-rc.1

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。

Furion .NET 6 Preview 5 源码地址

等不及尝鲜了

安装 .NET 6 Preview 5 SDK

尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0

下载对应系统和处理器版本即可。

升级 Visual Studio 2019

目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16

已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。

特别说明

如果使用 Visual Studio Code 开发,可忽略此选项。

第一个例子

Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9

安装脚手架,打开 CMD/Powershell 执行以下命令:

dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9

创建项目

dotnet new furionapi -n FurionNET6

打开并启动项目

打开浏览器查看效果即可。

· 2 min read
dotNET China

文件下载

[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

· 2 min read
dotNET China

HttpContext 重大调整

ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

HttpContext 多种获取方式

+ + + + \ No newline at end of file diff --git a/handbook/build/blog/tags/upload/index.html b/handbook/build/blog/tags/upload/index.html new file mode 100644 index 00000000000..a678a12b18c --- /dev/null +++ b/handbook/build/blog/tags/upload/index.html @@ -0,0 +1,17 @@ + + + + + +One post tagged with "upload" | Furion + + + + + +
+

One post tagged with "upload"

View All Tags

· 2 min read
dotNET China

文件下载

[HttpGet, NonUnify]
public IActionResult FileDownload(string path, string fileName)
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") { FileDownloadName = fileName };
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/appstartup/index.html b/handbook/build/docs/appstartup/index.html new file mode 100644 index 00000000000..de276e7222a --- /dev/null +++ b/handbook/build/docs/appstartup/index.html @@ -0,0 +1,17 @@ + + + + + +3.1 AppStartup 启动 | Furion + + + + + +
+

3.1 AppStartup 启动

3.1.1 Startup

Startup 类是 ASP.NET Core 应用程序启动默认调用的类,该类是在 Program.cs 中配置:

.NET5 方式

Furion.Web.Entry\Program.cs
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace Furion.Web.Entry
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
}

.NET6 方式

.NET6 中微软已不再推荐 UseStartup<TStarup>() 方式。

3.1.1.1 Startup 两个重要方法

Startup 默认有两个重要的方法:

  • ConfigureServices:配置应用所需服务,在该方法中可以添加应用所需要的功能或服务
  • Configure:配置应用请求处理管道

默认代码如下:

Furion.Web.Entry\Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

namespace Furion.Web.Entry
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
}

在这里,不打算详细讲 Startup 类的具体功能和作用。

了解更多

想了解更多 Startup 知识可查阅 ASP.NET Core - Startup 类 章节。

3.1.2 AppStartup

Furion 框架中,提供了更为灵活的 Startup 类配置方式,无需在 Web 启用层 中配置,可将配置放到任何项目层。

可能会有读者有疑问,为什么要多此一举呢?原因有几点:

  • Startup 类默认和 Web 应用层 绑定在一起,这样就会导致如果我创建了新的 Web 应用层Startup 又要重新配置
  • 随着业务的增长,需要集成越来越多的第三方服务,这时候 Startup 类就会变得越来越臃肿,难以维护
  • Startup 类无法与其他项目类型进行共用

所以,Furion 提供了更加灵活的配置方式:AppStartup

注意事项

如果 AppStartup 的派生类所在的项目层没有被启动层直接或间接添加引用,那么这个 Startup.cs 就会被忽略,也就是不会自动载入注册。

3.1.2.1 如何配置 AppStartup

AppStartup 是一个抽象的空类,没有任何定义成员。正是因为这样,才提供更加灵活的配置方式。

3.1.2.2 AppStartup 约定

AppStartup 派生类只有两个小约定:

  • 任何公开、非静态、返回值为 void 且方法第一个参数是 IServiceCollection 类型,那么他就是一个 ConfigureServices 方法
  • 任何公开、非静态、返回值为 void 且方法第一个参数是 IApplicationBuilder 类型,第二个参数是 IWebHostEnvironment 类型,那么他就是一个 Configure 方法

所以,我们可以自由的编写方法,只要遵循约定即可,如:

using Microsoft.Extensions.DependencyInjection;

namespace Furion.EntityFramework.Core
{
public class MyStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDataValidation();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseSwagger();
}

// 可以随意定义名字和方法
public void XXXXName(IServiceCollection services)
{
}

// 可以随意定义名字和方法
public void ZZZName(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
}

3.1.2.3 AppStartup 配置顺序

默认情况下,AppStartup 配置顺序由所在程序集的名称进行正序调用,如果我们需要配置执行顺序,只需要在 AppStartup 派生类中贴 [AppStartup(order)] 特性即可。

order 数值越大,越在前面调用,如:

using Microsoft.Extensions.DependencyInjection;

namespace Furion.EntityFramework.Core
{
[AppStartup(10)]
public class FirstStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
}
using Microsoft.Extensions.DependencyInjection;

namespace Furion.EntityFramework.Core
{
[AppStartup(9)]
public class SecondStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
}

FirstStartup 会在 SecondStartup 之前调用。

3.1.2.4 AppStartup 方法调用顺序

AppStartup 方法调用顺序和方法的书写先后有关,越在前面的方法越先调用。

3.1.3 Startup 配置最佳实践

v3.6.3+ 说明

Furion v3.6.3+ 版本之后无需创建空 Startup.cs 类,内部已实现 FakeStartup 模式。

建议 Web 启动层的 Startup.cs 保持为空方法体,如:

Furion.Web.Entry\Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

namespace Furion.Web.Entry
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
}

将所有 Web 应用层 配置迁移到 Furion.Web.Core.Startup.cs 中,如:

Furion.Web.Core\Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace Furion.Web.Core
{
public sealed class FurWebCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddCorsAccessor();

services.AddControllers().AddInject();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseCorsAccessor();

app.UseAuthentication();
app.UseAuthorization();

app.UseInject();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}

这样,后续更换 Web 应用层 也无需重新配置 Startup.cs

3.1.4 构造函数注入说明

AppStartup 的派生类并未提供依赖注入的功能,也即是无法通过构造函数进行注入服务。原因是 AppStartup 是个空类,目的是用来查找 Startup 的。

那如何像 Startup.cs 一样使用服务呢?

  • 获取配置 IConfiguration 实例:通过 App.Configuration
  • 解析服务:通过 App.GetService<TService>()app.ApplicationServices.GetService<TService>()
关于 Configure 方法注入

AppStartup 针对 Configure 方法提供了参数解析注入功能,也就是只要在方法中声明接口参数即可自动注入,如:

// app 和 env 会自动注入
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}

3.1.5 关于 appsettings.json

在默认情况下,ASP.NET Core 配置放在 appsettings.json 中配置,但是这样的方式和 Startup.cs 配置一样的道理,一旦我们更换了 Web 应用层,那么 appsettings.json 又要重新配置一次。

所以,Furion 框架提供了更加灵活的方式配置 appsettings.json只需要在任何项目层根目录下创建 .json 文件即可。Furion 框架最后会自动合并所有分散的配置文件。

如我们在 Furion.EntityFramework.Core 层创建 dbsettings.json 配置数据库连接字符串,如:

Furion.EntityFramework.Core\dbsettings.json
{
"ConnectionStrings": {
"DbConnectionString": "Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;",
"Sqlite3ConnectionString": "Data Source=./Furion.db"
}
}

无需在 appsettings.json 中配置,下面是 appsettings.json 默认代码:

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.EntityFrameworkCore": "Information"
}
},
"AllowedHosts": "*"
}

这样我们把配置文件分散在不同项目层之后,就可以实现共用和共享了。

特别注意

其他层的配置文件不能以 appsettings.json 命名,会导致覆盖启动层的配置。

另外,在其他层创建的 *.json 文件必须设置文件属性为 始终复制或较新复制

3.1.6 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/audit/index.html b/handbook/build/docs/audit/index.html new file mode 100644 index 00000000000..bbb57862024 --- /dev/null +++ b/handbook/build/docs/audit/index.html @@ -0,0 +1,17 @@ + + + + + +5.4 请求审计日志 | Furion + + + + + +
+

5.4 请求审计日志

小知识

Furion 提供了非常强大的 LoggingMonitor 审计日志功能,可直接使用:LoggingMonitor 文档

5.4.1 审计日志

在一个企业应用系统中,用户对系统所有的操作包括请求、数据库操作等等都应该记录起来,那么这些日志我们称为操作日志,也可以说审计日志。

关于数据库操作审计日志

如需实现 sql 操作,数据库操作 的审计日志可查阅 【9.22 审计日志章节

5.4.2 请求审计日志

实现原理

在这里,结合 【5.3 筛选器】 实现请求审计日志功能。

请求审计日志通常指的是记录请求地址,来源地址,操作人,传递参数等。这个主要是通过 IAsyncActionFilter 筛选器实现,如:

  1. 定义 RequestAuditFilter 并实现 IAsyncActionFilter
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Security.Claims;
using System.Threading.Tasks;

namespace Furion.Web.Core
{
public class RequestAuditFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
//============== 这里是执行方法之前获取数据 ====================

// 获取控制器、路由信息
var actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;

// 获取请求的方法
var method = actionDescriptor.MethodInfo;

// 获取 HttpContext 和 HttpRequest 对象
var httpContext = context.HttpContext;
var httpRequest = httpContext.Request;

// 获取客户端 Ipv4 地址
var remoteIPv4 = httpContext.GetRemoteIpAddressToIPv4();

// 获取请求的 Url 地址
var requestUrl = httpRequest.GetRequestUrlAddress();

// 获取来源 Url 地址
var refererUrl = httpRequest.GetRefererUrlAddress();

// 获取请求参数(写入日志,需序列化成字符串后存储)
var parameters = context.ActionArguments;

// 获取操作人(必须授权访问才有值)"userId" 为你存储的 claims type,jwt 授权对应的是 payload 中存储的键名
var userId = httpContext.User?.FindFirstValue("userId");

// 请求时间
var requestedTime = DateTimeOffset.Now;


//============== 这里是执行方法之后获取数据 ====================
var actionContext = await next();

// 获取返回的结果
var returnResult = actionContext.Result;

// 判断是否请求成功,没有异常就是请求成功
var isRequestSucceed = actionContext.Exception == null;

// 获取调用堆栈信息,提供更加简单明了的调用和异常堆栈
var stackTrace = EnhancedStackTrace.Current();

// 这里写入日志,或存储到数据库中!!!~~~~~~~~~~~~~~~~~~~~
}
}
}
  1. 注册 RequestAuditFilter 筛选器
services.AddMvcFilter<RequestAuditFilter>();

5.4.3 LoggingMonitor 审计日志

小知识

Furion 提供了非常强大的 LoggingMonitor 审计日志功能,可直接使用:LoggingMonitor 文档

┏━━━━━━━━━━━  Logging Monitor ━━━━━━━━━━━
┣ Furion.Application.TestLoggerServices.GetPerson (Furion.Application)

┣ 控制器名称: TestLoggerServices
┣ 操作名称: GetPerson
┣ 路由信息: [area]: ; [controller]: test-logger; [action]: person
┣ 请求方式: POST
┣ 请求地址: https://localhost:44316/api/test-logger/person/11
┣ 来源地址: https://localhost:44316/api/index.html
┣ 浏览器标识: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62
┣ 客户端 IP 地址: 0.0.0.1
┣ 服务端 IP 地址: 0.0.0.1
┣ 服务端运行环境: Development
┣ 执行耗时: 31ms
┣ ━━━━━━━━━━━━━━━ 授权信息 ━━━━━━━━━━━━━━━
┣ JWT Token: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY1ODcxNjc5NywibmJmIjoxNjU4NzE2Nzk3LCJleHAiOjE2NTg3MTc5OTcsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.VYZkwwqCwlUy3aJjuL-og62I0rkxNQ96kSjEm3VgXtg

┣ UserId (integer)1
┣ Account (string): admin
┣ iat (integer)1658716797
┣ nbf (integer)1658716797
┣ exp (integer)1658717997
┣ iss (string): dotnetchina
┣ aud (string): powerby Furion
┣ ━━━━━━━━━━━━━━━ 参数列表 ━━━━━━━━━━━━━━━
┣ Content-Type:

id (Int32)11
┣ ━━━━━━━━━━━━━━━ 返回信息 ━━━━━━━━━━━━━━━
┣ 类型: Furion.Application.Persons.PersonDto
┣ 返回值: {"Id":11,"Name":null,"Age":0,"Address":null,"PhoneNumber":null,"QQ":null,"CreatedTime":"0001-01-01T00:00:00+00:00","Childrens":null,"Posts":null}
┗━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━

5.4.4 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/auth-control/index.html b/handbook/build/docs/auth-control/index.html new file mode 100644 index 00000000000..11d2c7c70cb --- /dev/null +++ b/handbook/build/docs/auth-control/index.html @@ -0,0 +1,18 @@ + + + + + +15. 安全鉴权 | Furion + + + + + +
+

15. 安全鉴权

15.1 什么是鉴权

鉴权实际上就是一种身份认证

由用户提供凭据,然后将其与存储在操作系统、数据库、应用或资源中的凭据进行比较。 在授权过程中,如果凭据匹配,则用户身份验证成功,可执行已向其授权的操作。 授权指判断允许用户执行的操作的过程。 +也可以将身份验证理解为进入空间(例如服务器、数据库、应用或资源)的一种方式,而授权是用户可以对该空间(服务器、数据库或应用)内的哪些对象执行哪些操作。

15.1.1 常见的鉴权方式

  • HTTP Basic Authentication

这是 HTTP 协议实现的基本认证方式,我们在浏览网页时,从浏览器正上方弹出的对话框要求我们输入账号密码,正是使用了这种认证方式

  • Session + Cookie

利用服务器端的 session(会话)和浏览器端的 cookie 来实现前后端的认证,由于 http 请求时是无状态的,服务器正常情况下是不知道当前请求之前有没有来过,这个时候我们如果要记录状态,就需要在服务器端创建一个会话(session),将同一个客户端的请求都维护在各自的会话中,每当请求到达服务器端的时候,先去查一下该客户端有没有在服务器端创建 session,如果有则已经认证成功了,否则就没有认证。

  • Token

客户端在首次登录以后,服务端再次接收 HTTP 请求的时候,就只认 Token 了,请求只要每次把 Token 带上就行了,服务器端会拦截所有的请求,然后校验 Token 的合法性,合法就放行,不合法就返回 401(鉴权失败)

Token验证比较灵活,适用于大部分场景。常用的 Token 鉴权方式的解决方案是 JWTJWT 是通过对带有相关用户信息的进行加密,加密的方式比较灵活,可以根据需求具体设计。

  • OAuth

OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容,为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。我们常见的提供 OAuth 认证服务的厂商有支付宝、QQ 和微信。

OAuth 协议又有 1.0 和 2.0 两个版本。相比较 1.0 版,2.0 版整个授权验证流程更简单更安全,也是目前最主要的用户身份验证和授权方式。

15.2 如何使用

配置之前

在添加授权服务之前,请先确保 Startup.csConfigure 是否添加了以下两个中间件:

app.UseAuthentication();
app.UseAuthorization();
使用说明

如果您使用的是 WebAPI,则该小节可忽略,通常 WebAPI 使用的是 JWT 授权方式,而非 Cookie

// Cookies单独身份验证
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, b =>
{
b.LoginPath = "/Home/Login";
});

15.2.2 添加 Jwt 身份验证

  • 安装 Furion.Extras.Authentication.JwtBearer 拓展包

  • Startup.cs 中注册 AddJwt 服务,注意,必须在 .AddControllers() 之前注册!!

// 默认授权机制,需授权的即可(方法)需贴 `[Authorize]` 特性
services.AddJwt();

// 启用全局授权,这样每个接口都必须授权才能访问,无需贴 `[Authorize]` 特性,推荐!!!!!!!!!❤️
// services.AddJwt<JwtHandler>(enableGlobalAuthorize:true);

注:如果项目使用了 services.AddSignalR(); 服务,那么该服务必须在 services.AddJwt 之后注册。

额外补充

默认 JwtHandler 代码:

using Furion.Authorization;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;

namespace FurionApi.Web.Core;

public class JwtHandler : AppAuthorizeHandler
{
public override Task<bool> PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext)
{
// 这里写您的授权判断逻辑,授权通过返回 true,否则返回 false

return Task.FromResult(true);
}
}
  • 自定义 Jwt 配置(默认无需配置
{
"JWTSettings": {
"ValidateIssuerSigningKey": true, // 是否验证密钥,bool 类型,默认true
"IssuerSigningKey": "你的密钥", // 密钥,string 类型,必须是复杂密钥,长度大于16
"ValidateIssuer": true, // 是否验证签发方,bool 类型,默认true
"ValidIssuer": "签发方", // 签发方,string 类型
"ValidateAudience": true, // 是否验证签收方,bool 类型,默认true
"ValidAudience": "签收方", // 签收方,string 类型
"ValidateLifetime": true, // 是否验证过期时间,bool 类型,默认true,建议true
"ExpiredTime": 20, // 过期时间,long 类型,单位分钟,默认20分钟
"ClockSkew": 5, // 过期时间容错值,long 类型,单位秒,默认 5秒
"Algorithm": "HS256" // 加密算法,string 类型,默认 HS256
}
}
系统安全注意事项

Furion 框架为了方便开发,已经自动添加了 Jwt 默认配置。建议每个项目都应该单独配置 IssuerSigningKeyValidIssuerValidAudience 这三个。否则同样用了 Furion 框架生成的 Token 可能存在相互访问各自系统的风险。

Algorithm 算法支持列表

目前支持的加密算法

  • HS256
  • HS384
  • HS512
  • PS256
  • PS384
  • PS512
  • RS256:需自行实现算法
  • RS384:需自行实现算法
  • RS512:需自行实现算法
  • ES256
  • ES256K
  • ES384
  • ES512
  • EdDSA

详情请查阅 SecurityAlgorithms

  • ❤️ ❤️ 生成 Token

通常我们需要在登录成功之后生成 JWT Token 并返回,可通过 JWTEncryption.Encrypt 静态方法生成,如:

关于 Token 的值

字典 Dictionary 中的值支持所有基元类型和基元类型组成的值,但应尽可能避免使用 数组 值。

// 生成 token
var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>()
{
{ "UserId", user.Id }, // 存储Id
{ "Account",user.Account }, // 存储用户名
});

15.2.3 混合身份验证

// JWT 和 Cookies 混合身份验证
services.AddJwt(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
options.LoginPath = "/Home/Login";
});
特别注意

如果启用了混合身份验证后,WebApi 需在控制器/Action 中指定 Scheme 类型为 JwtBearerDefaults.AuthenticationScheme,如:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class ApiServices : IDynamicApiController
{
}

如果不设置 Scheme 那么在混合授权的 Swagger 中将默认采用 Cookie 方式,也就是授权失败会将整个 登录页面 内容返回。

15.3 高级自定义授权

Furion 框架提供了非常灵活的高级策略鉴权和授权方式,通过该策略授权方式可以实现任何自定义授权。

15.3.1 AppAuthorizeHandler

Furion 框架提供了 AppAuthorizeHandler 策略授权处理程序提供基类,只需要创建自己的 Handler 继承它即可。如:JwtHandler

using Furion.Authorization;
using Furion.Core;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.IdentityModel.JsonWebTokens;

namespace Furion.Web.Core
{
/// <summary>
/// JWT 授权自定义处理程序
/// </summary>
public class JwtHandler : AppAuthorizeHandler
{
/// <summary>
/// 请求管道
/// </summary>
/// <param name="context"></param>
/// <param name="httpContext"></param>
/// <returns></returns>
public override Task<bool> PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext)
{
// 此处已经自动验证 Jwt token的有效性了,无需手动验证

// 检查权限,如果方法是异步的就不用 Task.FromResult 包裹,直接使用 async/await 即可
return Task.FromResult(CheckAuthorzie(httpContext));
}

/// <summary>
/// 检查权限
/// </summary>
/// <param name="httpContext"></param>
/// <returns></returns>
private static bool CheckAuthorzie(DefaultHttpContext httpContext)
{
// 获取权限特性
var securityDefineAttribute = httpContext.GetMetadata<SecurityDefineAttribute>();
if (securityDefineAttribute == null) return true;

return "查询数据库返回是否有权限";
}
}
}

之后注册 JwtHandler 即可:

services.AddJwt<JwtHandler>();

15.3.2 完全自定义授权

有些时候可能针对不同的平台采用不一样的授权方式,比如合作信任的第三方机构可以免授权,这时候我们只需要重写 HandleAsync 方法即可。如:

using Furion.Authorization;
using Furion.Core;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;

namespace Furion.Web.Core
{
public class JwtHandler : AppAuthorizeHandler
{
public override async Task HandleAsync(AuthorizationHandlerContext context)
{
// 常规授权(可以判断是不是第三方)
var isAuthenticated = context.User.Identity.IsAuthenticated;

// 第三方授权自定义
if(是第三方){
foreach (var requirement in pendingRequirements)
{
// 授权成功
context.Succeed(requirement);
}
}
// 授权失败
else context.Fail();
}
}
}

15.4 授权特性及全局授权

默认情况下,所有的路由都是允许匿名访问的,所以如果需要对某个 ActionController 设定授权访问,只需要在 ActionController[AppAuthorize][Authorize] 特性即可。

如果需要对特定的 ActionController 允许匿名访问,则贴 [AllowAnonymous] 即可。

15.4.1 全局授权

services.AddJwt<JwtHandler>(enableGlobalAuthorize:true);

15.4.2 匿名访问

如果需要对特定的 ActionController 允许匿名访问,则贴 [AllowAnonymous] 即可。

15.5 自动刷新 Token

15.5.1 后端登录部分

当用户登录成功之后,返回 accessToken 字符串,之后通过 JWTEncryption.GenerateRefreshToken() 获取 刷新Token,并通过响应报文头返回,如:

// token
var accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>()
{
{ "UserId", user.Id }, // 存储Id
{ "Account",user.Account }, // 存储用户名
});

// 获取刷新 token
var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken, 43200); // 第二个参数是刷新 token 的有效期(分钟),默认三十天

// 设置响应报文头
httpContextAccessor.HttpContext.Response.Headers["access-token"] = accessToken;
httpContextAccessor.HttpContext.Response.Headers["x-access-token"] = refreshToken;

用户登录成功之后把 accessTokenrefreshToken 一起返回给客户端存储起来。

15.5.2 后端授权 Handler 部分

using Furion.Authorization;
using Furion.Core;
using Furion.DataEncryption;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using System.Threading.Tasks;

namespace Furion.Web.Core
{
/// <summary>
/// JWT 授权自定义处理程序
/// </summary>
public class JwtHandler : AppAuthorizeHandler
{
/// <summary>
/// 重写 Handler 添加自动刷新收取逻辑
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public override async Task HandleAsync(AuthorizationHandlerContext context)
{
// 自动刷新 token
if (JWTEncryption.AutoRefreshToken(context, context.GetCurrentHttpContext()))
{
await AuthorizeHandleAsync(context);
}
else context.Fail(); // 授权失败
}

/// <summary>
/// 验证管道,也就是验证核心代码
/// </summary>
/// <param name="context"></param>
/// <param name="httpContext"></param>
/// <returns></returns>
public override Task<bool> PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext)
{
// 检查权限,如果方法是异步的就不用 Task.FromResult 包裹,直接使用 async/await 即可
return Task.FromResult(true);
}
}
}

15.5.3 客户端部分

客户端每次请求需将 accessTokenrefreshToken 放到请求报文头中传送到服务端,格式为:

Authorization: Bearer 你的token
X-Authorization: Bearer 你的刷新token

Furion 框架提供了 vue/react/angular 客户端请求参考代码:https://gitee.com/dotnetchina/Furion/tree/v4/clients

小建议

建议使用自动生成 Vue/React/Angular 代理方式:5.6 Vue/React/Angular 接口代理

其他补充

在正常开发中,refreshToken 无需每次请求携带,而是 accessToken 即将过期之后携带即可。可以在客户端自行判断 accessToken 是否即将过期。

如果 Token 过期,那么 Furion 将自动根据有效期内的 refreshToken 自动生成新的 AccessToken,并在 响应报文头 中返回,如:

access-token: 新的token
x-access-token: 新的刷新token
存储新的 Token

前端需要获取 响应报文头 新的 token 和刷新 token 替换之前在客户处存储旧的 token 和刷新 token。

15.6 获取 Jwt 存储的信息

// 获取 `Jwt` 存储的信息
var userId = App.User?.FindFirstValue("键");

注意引入 System.Security.Claims 命名空间

获取不到 Token 信息说明

请确保 .AddJwt 服务已注册且启用了 全局授权 或该接口(方法)贴有 [Authorize] 特性。

15.7 前端解密 JWT 信息

通常在用户登录成功后我们会将 JWT Token 存储到浏览器中,这时候就需要在浏览器端解析 token 里面存储的信息,可以通过调用下面方法实现:

  • TypeScript 版本
/**
* 解密 JWT token 的信息
* @param token jwt token 字符串
* @returns <any>object
*/
function decryptJWT(token: string): any {
token = token.replace(/_/g, "/").replace(/-/g, "+");
var json = decodeURIComponent(escape(window.atob(token.split(".")[1])));
return JSON.parse(json);
}
  • JavaScript 版本
/**
* 解密 JWT token 的信息
* @param token jwt token 字符串
* @returns <any>object
*/
function decryptJWT(token) {
token = token.replace(/_/g, "/").replace(/-/g, "+");
var json = decodeURIComponent(escape(window.atob(token.split(".")[1])));
return JSON.parse(json);
}

这样就可以把后端放在 token 里面的信息解析出来了。

小知识

可以在解密之后读取 过期时间 exp 来解决请求时是否需要带刷新 Token,比如即将过期前 5 分钟。

15.8 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 鉴权授权 知识可查阅 ASP.NET Core - 安全和标识 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/author/index.html b/handbook/build/docs/author/index.html new file mode 100644 index 00000000000..d56f74413c8 --- /dev/null +++ b/handbook/build/docs/author/index.html @@ -0,0 +1,17 @@ + + + + + +1.2 关于作者 | Furion + + + + + +
+

1.2 关于作者

孤芳自赏

纵你阅人何其多,再无一人恰似我。

网名

  • 百小僧
  • MonkSoul
  • Rustln

专属头像

于 2016 年 07 月 14 日,亲自设计了该头像。

个性签名

成在经营,败在管理,错在不学习。

奉献宣言

无私奉献不是天方夜谭,有时候,我们也可以做到。

开源初衷

开源如同人的脸,好坏一面便知,缺点可能会受到嘲讽批评,优点也会收获赞扬尊重。别担心,他们正在塑造更好的你。

兴趣爱好

对新技术颇感兴趣,喜欢开源事业,喜欢分享技术,喜欢赛车,喜欢纹身文化,喜欢科技产品,喜欢穿越火线和我的世界游戏。

喜欢逛开源中国、IT 之家、Gitee/Github、刷抖音、看动漫、看美剧。

个人主页

https://gitee.com/monksoul

https://github.com/monksoul

技术能力

小僧不才,自 2008 年 接触 IT 行业有十余载,对互联网主流技术略懂皮毛,最喜欢的编程技术是 RustReact

常用工具

Vim/NeoVimVisual Studio CodePostgreSQLVisual Studio 2022

领域兴趣

对软件工程、架构、底层、算法、嵌入式/单片机、网络编程等颇感兴趣。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/benchmark/index.html b/handbook/build/docs/benchmark/index.html new file mode 100644 index 00000000000..11f285faeb2 --- /dev/null +++ b/handbook/build/docs/benchmark/index.html @@ -0,0 +1,17 @@ + + + + + +36.3 基准测试 | Furion + + + + + +
+

36.3 基准测试

36.3.1 基准测试

基准测试(benchmarking)是一种测量和评估软件性能指标的活动。你可以在某个时候通过基准测试建立一个已知的性能水平(称为基准线),当系统的软硬件环境发生变化之后再进行一次基准测试以确定那些变化对性能的影响。这是基准测试最常见的用途。其他用途包括测定某种负载水平下的性能极限、管理系统或环境的变化、发现可能导致性能问题的条件,等等。

36.3.2 基准测试特质及意义

36.3.2.1 特质

  • 可重复性:可进行重复性的测试,这样做有利于比较每次的测试结果,得到性能结果的长期变化趋势,为系统调优和上线前的容量规划做参考。
  • 可观测性:通过全方位的监控(包括测试开始到结束,执行机、服务器、数据库),及时了解和分析测试过程发生了什么。
  • 可展示性:相关人员可以直观明了的了解测试结果(web 界面、仪表盘、折线图树状图等形式)。
  • 真实性:测试的结果反映了客户体验到的真实的情况(真实准确的业务场景+与生产一致的配置+合理正确的测试方法)。
  • 可执行性:相关人员可以快速的进行测试验证修改调优(可定位可分析)。

36.3.2.2 意义

  • 为容量规划确定系统和应用程序的极限;
  • 为配置测试的参数和配置选项提供参考依据;
  • 为验收测试确定系统是否具备自己所宣称的能力;
  • 为性能基线的建立提供长期的数据统计来源以及比较基准;

36.3.3 BenchmarkDotNet

BenchmarkDotNet.NET 平台提供的基准测试工具,BenchmarkDotNet 可帮助您将方法转换为基准,跟踪其性能,并共享可重复的测量实验。BenchmarkDotNet 可保护您免受流行的基准测试错误,并在基准设计或获得的测量中出现问题时警告您。结果以用户友好的形式呈现,突出显示了有关实验的所有重要事实。

36.3.3.1 如何使用

创建一个 控制台 应用程序,并通过 Nuget 安装 BenchmarkDotNet 拓展包。编写测试:

using System;
using System.Security.Cryptography;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;

namespace MyBenchmarks
{
public class Md5VsSha256
{
private const int N = 10000;
private readonly byte[] data;

private readonly SHA256 sha256 = SHA256.Create();
private readonly MD5 md5 = MD5.Create();

public Md5VsSha256()
{
data = new byte[N];
new Random(42).NextBytes(data);
}

[Benchmark]
public byte[] Sha256() => sha256.ComputeHash(data);

[Benchmark]
public byte[] Md5() => md5.ComputeHash(data);
}

public class Program
{
public static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<Md5VsSha256>();
}
}
}

36.3.3.2 查看结果

运行控制器程序,将得到以下结果

BenchmarkDotNet=v0.12.0, OS=Windows 10.0.17763.805 (1809/October2018Update/Redstone5)
Intel Core i7-7700K CPU 4.20GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores
[Host] : .NET Framework 4.7.2 (4.7.3468.0), X64 RyuJIT
Net472 : .NET Framework 4.7.2 (4.7.3468.0), X64 RyuJIT
NetCoreApp30 : .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), X64 RyuJIT
CoreRt30 : .NET CoreRT 1.0.28236.02 @Commit: 741d61493c560ba96e8151f9e56876d4d3828489, X64 AOT
Mono : Mono 6.4.0 (Visual Studio), X64
MethodRuntimeNMeanErrorStdDevRatio
Sha256.NET 4.7.210007.735 us0.1913 us0.4034 us1.00
Sha256.NET Core 3.010003.989 us0.0796 us0.0745 us0.50
Sha256CoreRt 3.010004.091 us0.0811 us0.1562 us0.53
Sha256Mono100013.117 us0.2485 us0.5019 us1.70
Md5.NET 4.7.210002.872 us0.0552 us0.0737 us1.00
Md5.NET Core 3.010001.848 us0.0348 us0.0326 us0.64
Md5CoreRt 3.010001.817 us0.0359 us0.0427 us0.63
Md5Mono10003.574 us0.0678 us0.0753 us1.24
Sha256.NET 4.7.21000074.509 us1.5787 us4.6052 us1.00
Sha256.NET Core 3.01000036.049 us0.7151 us1.0025 us0.49
Sha256CoreRt 3.01000036.253 us0.7076 us0.7571 us0.49
Sha256Mono10000116.350 us2.2555 us3.0110 us1.58
Md5.NET 4.7.21000017.308 us0.3361 us0.4250 us1.00
Md5.NET Core 3.01000015.726 us0.2064 us0.1930 us0.90
Md5CoreRt 3.01000015.627 us0.2631 us0.2461 us0.89
Md5Mono1000030.205 us0.5868 us0.6522 us1.74

36.3.3.3 导出报表

也可以导出各种图表

36.3.4 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 BenchmarkDotNet 知识可查阅 BenchmarkDotNet 官网

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/bingfa/index.html b/handbook/build/docs/bingfa/index.html new file mode 100644 index 00000000000..ac0b00f7ad7 --- /dev/null +++ b/handbook/build/docs/bingfa/index.html @@ -0,0 +1,17 @@ + + + + + +36.4 并发测试 | Furion + + + + + +
+
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/cache/index.html b/handbook/build/docs/cache/index.html new file mode 100644 index 00000000000..f860c81f136 --- /dev/null +++ b/handbook/build/docs/cache/index.html @@ -0,0 +1,18 @@ + + + + + +14. 分布式缓存 | Furion + + + + + +
+

14. 分布式缓存

14.1 什么是缓存

缓存可以减少生成内容所需的工作,从而显著提高应用程序的性能和可伸缩性。 缓存适用于不经常更改的数据,因为生成成本很高。 通过缓存,可比从数据源返回数据的副本速度快得多。 应该对应用进行编写和测试,使其不要永远依赖于缓存的数据。

14.2 缓存类型

  • 内存缓存:顾名思义,就是缓存在应用部署所在服务器的内存中
  • 分布式缓存:分布式缓存是由多个应用服务器共享的缓存
  • 响应缓存:缓存服务器端 Not Modified 的数据

14.3 内存缓存使用

内存缓存是最常用的缓存方式,具有存取快,效率高特点。

内存缓存通过注入 IMemoryCache 方式注入即可。

备注

Furion 框架中,内存缓存服务已经默认注册,无需手动注册。

14.3.1 基本使用

如,缓存当前时间:

using Furion.DynamicApiController;
using Microsoft.Extensions.Caching.Memory;
using System;

namespace Furion.Application
{
public class CacheServices : IDynamicApiController
{
private const string _timeCacheKey = "cache_time";

private readonly IMemoryCache _memoryCache;

public CacheServices(IMemoryCache memoryCache)
{
_memoryCache = memoryCache;
}

[ApiDescriptionSettings(KeepName = true)]
public DateTimeOffset GetOrCreate()
{
return _memoryCache.GetOrCreate(_timeCacheKey, entry =>
{
return DateTimeOffset.UtcNow;
});
}
}
}

14.3.2 设置缓存选项

内存缓存支持设置缓存时间、缓存大小、及绝对缓存过期时间等

_memoryCache.GetOrCreate(_timeCacheKey, entry =>
{
entry.SlidingExpiration = TimeSpan.FromSeconds(3); // 滑动缓存时间
return DateTimeOffset.UtcNow;
});

await _memoryCache.GetOrCreateAsync(_timeCacheKey, async entry =>
{
// 这里可以使用异步~~
});
关于缓存时间

具有可调过期的缓存项集存在过时的风险。 如果访问的时间比滑动过期时间间隔更频繁,则该项将永不过期。

将弹性过期与绝对过期组合在一起,以保证项目在其绝对过期时间通过后过期。 绝对过期会将项的上限设置为可缓存项的时间,同时仍允许项在可调整过期时间间隔内未请求时提前过期。

如果同时指定了绝对过期和可调过期时间,则过期时间以逻辑方式运算。 如果滑动过期时间间隔 或 绝对过期时间通过,则从缓存中逐出该项。

如:

_memoryCache.GetOrCreate(_timeCacheKey, entry =>
{
entry.SetSlidingExpiration(TimeSpan.FromSeconds(3));
entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(20);
return DateTime.Now;
});

前面的代码保证数据的缓存时间不超过绝对时间。

14.3.3 手动设置缓存选项

除了上面的 Func<MemoryCacheEntryOptions, object> 方式设置缓存选项,我们可以手动创建并设置,如:

var cacheEntryOptions = new MemoryCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromSeconds(3));

_memoryCache.Set(_timeCacheKey, DateTimeOffset.UtcNow, cacheEntryOptions);

14.3.4 缓存依赖关系

下面的示例演示如何在依赖条目过期后使缓存条目过期。 CancellationChangeToken 添加到缓存的项。 当 Cancel 在上调用时 CancellationTokenSource ,将逐出两个缓存项。

public IActionResult CreateDependentEntries()
{
var cts = new CancellationTokenSource();
_cache.Set(CacheKeys.DependentCTS, cts);

using (var entry = _cache.CreateEntry(CacheKeys.Parent))
{
// expire this entry if the dependant entry expires.
entry.Value = DateTime.Now;
entry.RegisterPostEvictionCallback(DependentEvictionCallback, this);

_cache.Set(CacheKeys.Child,
DateTime.Now,
new CancellationChangeToken(cts.Token));
}

return RedirectToAction("GetDependentEntries");
}

public IActionResult GetDependentEntries()
{
return View("Dependent", new DependentViewModel
{
ParentCachedTime = _cache.Get<DateTime?>(CacheKeys.Parent),
ChildCachedTime = _cache.Get<DateTime?>(CacheKeys.Child),
Message = _cache.Get<string>(CacheKeys.DependentMessage)
});
}

public IActionResult RemoveChildEntry()
{
_cache.Get<CancellationTokenSource>(CacheKeys.DependentCTS).Cancel();
return RedirectToAction("GetDependentEntries");
}

private static void DependentEvictionCallback(object key, object value,
EvictionReason reason, object state)
{
var message = $"Parent entry was evicted. Reason: {reason}.";
((HomeController)state)._cache.Set(CacheKeys.DependentMessage, message);
}

使用 CancellationTokenSource 允许将多个缓存条目作为一个组逐出。 using 在上面的代码中,在块中创建的缓存条目 using 将继承触发器和过期设置。

了解更多

想了解更多 内存中的缓存 知识可查阅 ASP.NET Core - 内存缓存 章节。

14.4 分布式缓存

分布式缓存是由多个应用服务器共享的缓存,通常作为外部服务在访问它的应用服务器上维护。 分布式缓存可以提高 ASP.NET Core 应用程序的性能和可伸缩性,尤其是在应用程序由云服务或服务器场托管时。

与其他缓存方案相比,分布式缓存具有多项优势,其中缓存的数据存储在单个应用服务器上。

当分布式缓存数据时,数据将:

  • (一致性) 跨多个 服务器的请求
  • 存活在服务器重启和应用部署之间
  • 不使用本地内存

分布式缓存配置是特定于实现的。 本文介绍如何配置 SQL ServerRedis 分布式缓存。 第三方实现也可用,例如 GitHub 上的 NCache (NCache) 。

无论选择哪种实现,应用都会使用接口与缓存交互 IDistributedCache

14.4.1 使用条件

  • 若要使用 SQL Server 分布式缓存,则添加 Microsoft.Extensions.Caching.SqlServer
  • 若要使用 Redis 分布式缓存,则添加 Microsoft.Extensions.Caching.StackExchangeRedis
  • 若要使用 NCache 分布式缓存,则添加 NCache.Microsoft.Extensions.Caching.OpenSource

14.4.2 IDistributedCache

IDistributedCache 接口提供以下方法来处理分布式缓存实现中的项:

  • Get/GetAsync:接受字符串键,并检索缓存项作为 byte[] 数组(如果在缓存中找到)
  • Set/SetAsync:使用字符串键将项 (作为 byte[] 数组) 添加到缓存中
  • Refresh/RefreshAsync :根据项的键刷新缓存中的项,重置其滑动过期超时(如果有)
  • Remove/RemoveAsync:根据缓存项的字符串键删除缓存项

14.4.3 分布式内存缓存

分布式内存缓存(AddDistributedMemoryCache)是一个框架提供的实现 IDistributedCache ,它将项存储在内存中。 分布式内存缓存不是实际的分布式缓存,缓存项由应用程序实例存储在运行应用程序的服务器上。

分布式内存缓存优点:

  • 用于开发和测试方案。
  • 在生产环境中使用单一服务器并且内存消耗不是问题。 实现分布式内存缓存会抽象化缓存的数据存储。 如果需要多个节点或容错,可以在将来实现真正的分布式缓存解决方案。
备注

Furion 框架中,分布式内存缓存服务已经默认注册,无需手动调用 services.AddDistributedMemoryCache(); 注册。

14.4.4 分布式 SQL Server 缓存

分布式 SQL Server 缓存实现 (AddDistributedSqlServerCache) 允许分布式缓存使用 SQL Server 数据库作为其后备存储。

若要在 SQL Server 实例中创建 SQL Server 缓存的项表,可以使用 sql-cache 工具。 该工具将创建一个表,其中包含指定的名称和架构。

通过运行命令 sql-cache create 创建一个表,提供 SQL Server 实例 (Data Source) 、数据库 (Initial Catalog) 、架构 (例如) dbo 和表名称。例如 TestCache

dotnet sql-cache create "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DistCache;Integrated Security=True;" dbo TestCache

创建成功后,在 Startup.cs 中注册即可:

services.AddDistributedSqlServerCache(options =>
{
options.ConnectionString =
_config["DistCache_ConnectionString"];
options.SchemaName = "dbo";
options.TableName = "TestCache";
});

14.4.5 分布式 Redis 缓存

Redis 是内存中数据存储的开源数据存储,通常用作分布式缓存。在使用时通过 services.AddStackExchangeRedisCache() 中注册即可。

这里不细讲 Redis 相关内容,后续章节会使用基本例子演示。

Redis 基本配置:

services.AddStackExchangeRedisCache(options =>
{
// 连接字符串,这里也可以读取配置文件
options.Configuration = "192.168.111.134,password=aW1HAyupRKmiZn3Q";
// 键名前缀
options.InstanceName = "furion_";
});

14.4.6 分布式 NCache 缓存

NCache 是在 .NET.Net Core 中以本机方式开发的开源内存中分布式缓存。 NCache 在本地工作并配置为分布式缓存群集,适用于在 Azure 或其他托管平台上运行的 ASP.NET Core 应用。 +若要在本地计算机上安装和配置 NCache,请参阅 适用于 Windows 的 NCache 入门指南

NCache 基本配置:

  • 安装 Alachisoft.NCache.OpenSource.SDK
  • ncconf 中配置缓存群集
  • 注册 NCache 服务
services.AddNCacheDistributedCache(configuration =>
{
configuration.CacheName = "demoClusteredCache";
configuration.EnableLogs = true;
configuration.ExceptionsEnabled = true;
});

14.5 分布式缓存使用

若要使用 IDistributedCache 接口,请 IDistributedCache 通过构造函数依赖关系注入。

public class IndexModel : PageModel
{
private readonly IDistributedCache _cache;

public IndexModel(IDistributedCache cache)
{
_cache = cache;
}

public string CachedTimeUTC { get; set; }

public async Task OnGetAsync()
{
CachedTimeUTC = "Cached Time Expired";
// 获取分布式缓存
var encodedCachedTimeUTC = await _cache.GetAsync("cachedTimeUTC");

if (encodedCachedTimeUTC != null)
{
CachedTimeUTC = Encoding.UTF8.GetString(encodedCachedTimeUTC);
}
}

public async Task<IActionResult> OnPostResetCachedTime()
{
var currentTimeUTC = DateTime.UtcNow.ToString();
byte[] encodedCurrentTimeUTC = Encoding.UTF8.GetBytes(currentTimeUTC);

// 设置分布式缓存
var options = new DistributedCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromSeconds(20));

await _cache.SetAsync("cachedTimeUTC", encodedCurrentTimeUTC, options);

return RedirectToPage();
}
}

14.6 分布式缓存建议

确定 IDistributedCache 最适合你的应用的实现时,请考虑以下事项:

  • 现有基础结构
  • 性能要求
  • 成本
  • 团队经验

缓存解决方案通常依赖于内存中的存储以快速检索缓存的数据,但是,内存是有限的资源,并且很昂贵。 仅将常用数据存储在缓存中。

通常,Redis 缓存提供比 SQL Server 缓存更高的吞吐量和更低的延迟。 但是,通常需要进行基准测试来确定缓存策略的性能特征。

SQL Server 用作分布式缓存后备存储时,对缓存使用同一数据库,并且应用的普通数据存储和检索会对这两种情况的性能产生负面影响。 建议使用分布式缓存后备存储的专用 SQL Server 实例。

14.7 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 分布式缓存 知识可查阅 ASP.NET Core - 分布式缓存 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/case/index.html b/handbook/build/docs/case/index.html new file mode 100644 index 00000000000..daf8f838f7d --- /dev/null +++ b/handbook/build/docs/case/index.html @@ -0,0 +1,17 @@ + + + + + +1.4 框架案例 | Furion + + + + + +
+

1.4 框架案例

1.4.1 开源案例

越来越多的开发者使用 Furion 框架进行开发,以下是已知且开源的案例:

  • Admin.NET:基于 Furion 的通用权限管理平台
  • Abc.Mvc: 基于 NET7 RC1+ Furion + EFCore + Sqlsugar + Pear Layui adminMVC 后台管理框架 🆕
  • BaseNet: 基于Furion + Pear Admin Layui 快速开发基础框架,包含前端、后台权限控制,到手即用 🆕
  • TulingMember: 基于 Furion + IView 开发的极简进销管理系统 🆕
  • WeiXinApi: 基于Furion + SenparcSdk 的微信公众号开发 Demo 🆕
  • Magic.NET:基于 Furion + Sqlsugar 的通用权限管理平台 🆕
  • NiuPi: 基于 Furion + Sqlsugar + Vue-Next-Admin 细粒度权限控制的快速开发框架 🆕
  • 考试君:基于 Furion 的在线考试系统
  • 园丁:基于 Furion + Blazor 的超简单后台管理系统
  • Queer:基于 Furion + Layui 的通用型管理系统
  • Pear Admin:基于 Furion + PearAdmin 管理系统
  • JoyAdmin:基于 Furion + iviewadmin 开发的管理系统
  • YShop:基于 Furion + Vue 开发的移动电商项目
  • Vboot: 基于 Furion + Vben 开发的快速开发管理平台

如果您使用了 Furion 进行项目开发,可以告诉我们,点击底部的 Edit this page 进行编辑添加。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/clayobj/index.html b/handbook/build/docs/clayobj/index.html new file mode 100644 index 00000000000..ffe4b96a1f6 --- /dev/null +++ b/handbook/build/docs/clayobj/index.html @@ -0,0 +1,17 @@ + + + + + +29. 粘土对象 | Furion + + + + + +
+

29. 粘土对象

版本说明

以下内容仅限 Furion 2.1.12 + 版本使用。

29.1 关于粘土对象

粘土对象是 Furion 框架自创的一种概念,是一种可以模拟弱语言特性的对象,类似 Javascript 一样操作对象。只需通过 Clay 类初始化即可。

为什么起名为 “粘土” 呢?因为这个对象可以自由的添加属性,移除属性,又可以固化成任何对象,具有可拓展、可塑造的特点。

29.1.1 使用场景

粘土对象常用于需要动态构建对象的地方,如 CMS 系统的 ViewModel,或者运行时创建一个新的对象,或者请求第三方 API 情况。

29.1.2 关于性能

粘土性能实际上并不高效,但是性能也并不低下,只不过略输于强类型调用。什么时候使用可以看以上的【使用场景】。

29.2 Clay 对象

Clay 对象是继承自 DynamicObject 的一个特殊对象,提供了像弱语言一样操作对象的方法及索引。

29.3 如何使用

29.3.1 创建一个对象

// 创建一个空的粘土对象
dynamic clay = new Clay();

// 从现有的对象创建
dynamic clay2 = Clay.Object(new {});

// 从 json 字符串创建,可用于第三方 API 对接,非常有用
dynamic clay3 = Clay.Parse(@"{""foo"":""json"", ""bar"":100, ""nest"":{ ""foobar"":true } }");

29.3.2 读取/获取属性

dynamic clay = Clay.Object(new
{
Foo = "json",
Bar = 100,
Nest = new
{
Foobar = true
}
});

var r1 = clay.Foo; // "json" - string类型
var r2 = clay.Bar; // 100 - double类型
var r3 = clay.Nest.Foobar; // true - bool类型
var r4 = clay["Nest"]["Foobar"]; // 还可以和 Javascript 一样通过索引器获取

29.3.3 新增属性

dynamic clay = Clay.Object(new
{
Foo = "json",
Bar = 100,
Nest = new
{
Foobar = true
}
});

// 新增
clay.Arr = new string[] { "NOR", "XOR" }; // 添加一个数组
clay.Obj1 = new City { }; // 新增一个实例对象
clay.Obj2 = new { Foo = "abc", Bar = 100 }; // 新增一个匿名类

29.3.4 更新属性值

dynamic clay = Clay.Object(new
{
Foo = "json",
Bar = 100,
Nest = new
{
Foobar = true
}
});

// 更新
clay.Foo = "Furion";
clay["Nest"].Foobar = false;
clay.Nest["Foobar"] = true;

29.3.5 删除属性

dynamic clay = Clay.Object(new
{
Foo = "json",
Bar = 100,
Nest = new
{
Foobar = true
},
Arr = new string[] { "NOR", "XOR" }
});

// 删除操作
clay.Delete("Foo"); // 通过 Delete 方法删除
clay.Arr.Delete(0); // 支持数组 Delete 索引删除
clay("Bar"); // 支持直接通过对象作为方法删除
clay.Arr(1); // 支持数组作为方法删除

29.3.6 判断属性是否存在

dynamic clay = Clay.Object(new
{
Foo = "json",
Bar = 100,
Nest = new
{
Foobar = true
},
Arr = new string[] { "NOR", "XOR" }
});

// 判断属性是否存在
var a = clay.IsDefined("Foo"); // true
var b = clay.IsDefined("Foooo"); // false
var c = clay.Foo(); // true
var d = clay.Foooo(); // false;

29.3.7 遍历对象

dynamic clay = Clay.Object(new
{
Foo = "json",
Bar = 100,
Nest = new
{
Foobar = true
},
Arr = new string[] { "NOR", "XOR" }
});

// 遍历数组
foreach (string item in clay.Arr)
{
Console.WriteLine(item); // NOR, XOR
}

// 遍历整个对象属性及值,类似 JavaScript 的 for (var p in obj)
foreach (KeyValuePair<string, dynamic> item in clay)
{
Console.WriteLine(item.Key + ":" + item.Value); // Foo:json, Bar: 100, Nest: { "Foobar":true}, Arr:["NOR","XOR"]
}

29.3.8 转换成具体对象

dynamic clay = new Clay();
clay.Arr = new string[] { "Furion", "Fur" };

// 数组转换示例
var a1 = clay.Arr.Deserialize<string[]>(); // 通过 Deserialize 方法
var a2 = (string[])clay.Arr; // 强制转换
string[] a3 = clay.Arr; // 声明方式

// 对象转换示例
clay.City = new City { Id = 1, Name = "中山市" };
var c1 = clay.City.Deserialize<City>(); // 通过 Deserialize 方法
var c2 = (City)clay.City; // 强制转换
City c3 = clay.City; // 声明方式

29.3.9 固化粘土

固化粘土在很多时候和序列化很像,但是如果直接调用 Deserialize<object>Deserialize<dynamic> 无法返回实际类型,所以就有了固化类型的功能,如:

// 返回 object
var obj = clay.Solidify();

// 返回 dynamic
var obj1 = clay.Solidify<dynamic>();

// 返回其他任意类型
var obj2 = clay.Solidify<City>();

29.3.10 输出 JSON

dynamic clay = Clay.Object(new
{
Foo = "json",
Bar = 100,
Nest = new
{
Foobar = true
},
Arr = new string[] { "NOR", "XOR" }
});

// 输出 JSON
var json = clay.ToString(); // "{\"Foo\":\"json\",\"Bar\":100,\"Nest\":{\"Foobar\":true},\"Arr\":[\"NOR\",\"XOR\"]}"
Clay 序列化成 JSON 键大小写控制

默认情况下,Clay 输出成 JSON 后将保持原样输出,如果需要实现键命名控制,则需要先转换成 Dictionary 然后再配置 AddJsonOptions 服务,如:

public IActionResult OutputClay()
{
dynamic clay = Clay.Object(new
{
// ....
});

// 转换成 dictionary
var dic = clay.ToDictionary();

return new JsonResult(dic);
}

配置序列化 Dictionary 键命名策略支持:

services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; // 配置 Dictionary 类型序列化输出
});

29.3.11 输出 XML 对象

dynamic clay = Clay.Object(new
{
Foo = "json",
Bar = 100,
Nest = new
{
Foobar = true
},
Arr = new string[] { "NOR", "XOR" }
});

// 输出 XElement
var xml = clay.XmlElement;

29.3.12 关键字处理

dynamic clay = new Clay();
clay.@int = 1;
clay.@event = "事件";

29.3.13 转换成字典类型

dynamic clay = Clay.Object(new { name = "张三" });
clay.name = "百小僧";
Dictionary<string, object> parms = clay.ToDictionary();

29.4 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/clientapi/index.html b/handbook/build/docs/clientapi/index.html new file mode 100644 index 00000000000..2ab6e7ed318 --- /dev/null +++ b/handbook/build/docs/clientapi/index.html @@ -0,0 +1,17 @@ + + + + + +5.6 Vue/React/Angular 接口代理 | Furion + + + + + +
+

5.6 Vue/React/Angular 接口代理

5.6.1 历史背景

在现在主流的 Web 项目开发中,越来越多的开发者选择使用 Vue/React/Angular 三大框架进行开发,这三大框架和传统开发模式最大的不同是前者采用前后端分离的方式,而后者统一由后端程序员编写。

在前后端分离的模式中,前后端程序员各司其职,后端程序负责编写接口(API),前端程序员负责编写客户端请求后端接口(API)并进行数据绑定。

但这里暴露出了一个工作效率极低且易出错的问题,那就是前端程序需要将后端几百个甚至上千个接口进行一一对应编写,大多都是采用 $.ajaxaxios 的方式。

一旦后端接口参数或返回值发生改变,前端程序员需要一一进行勘正,一旦出现纠正不完全就会导致系统无法响应或接收错误的用户消息从而造成不必要的维护工作和成本浪费。

5.6.2 如何解决?

Furion 框架编写的所有后端接口都会生成规范化的 swagger.json 文件,使用该文件可以在 https://editor.swagger.io 生成任何支持标准 swagger 的界面或客户端代码。

自此,前端程序员再也无需自己手写 $.ajaxaxios 代码,这部分代码全部自动生成,以后开发效率至少提高一半以上。

5.6.3 生成客户端请求代码

关于 TypeScriptJavaScript

以下教程仅适用于 Vue/React/AngularTypeScript 类型项目,暂不支持 JavaScript

为了项目良好的发展和维护,建议使用 TypeScript 进行编写。

5.3.3.1 生成客户端代码

  1. 打开规范化文档(Swagger)首页,并点击顶部 /swagger/xxxx/swagger.json 到新窗口打开。
  1. 接着全选并复制全部内容
  1. 打开 https://editor.swagger.io 官网并粘贴进去
无法联网

Furion 也提供了 Swagger-Editor.rar 离线包,可直接下载解压并双击 index.html 即可。

  1. 最后点击顶部的 Generate Client 选择对应的语言/框架进行生成即可。

5.6.3.2 Vue/React 配置

点击 Generate Client 顶部菜单并选择 typescript-axios 进行下载。

下载成功之后拷贝下图选择的目录和文件:

接着打开你的 VueReact 项目,并在 src 目录下创建 api-services 目录并将刚刚复制的目录文件放在里面。

接下来通过 npmyarn 安装 axios

# npm 方式
npm i axios@0.21.4

# yarn 方式
yarn add axios@0.21.4
axios 版本说明

注意 axios 版本必须是 0.21.4 版本,如果安装其他版本可能会出现无法编译的情况。

接着下载 Furion 提供的 Vue/React 工具库 axios-utils.ts 并拷贝到和 api-services 同级目录下:

axios-utils.ts 下载地址

Vue3 项目不能编译问题

如果在 Vue3 项目中无法编译通过,则需要修改根目录下的 tsconfig.app.jsontsconfig.vite-config.jsontsconfig.vitest.json 文件并添加下列配置即可,如:

"compilerOptions": {
"importsNotUsedAsValues": "remove",
"preserveValueImports": false
}

5.6.3.3 Angular 配置

点击 Generate Client 顶部菜单并选择 typescript-angular 进行下载。

下载成功之后拷贝下图选择的目录和文件:

接着打开你的 Angular 项目,并在 src 目录下创建 api-services 目录并将刚刚复制的目录文件放在里面。

接着下载 Furion 提供的 Angular 工具库 angular-utils.ts 并拷贝到和 api-services 同级目录下:

angular-utils.ts 下载地址

Angular 项目不能编译问题

如果在 Angular 项目中无法编译通过,则需要修改根目录下的 api-services/encoder.ts 文件,并在 encodeKeyencodeValue 前添加 override 即可,如:

api-services/encoder.ts
export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec {
override encodeKey(k: string): string {
k = super.encodeKey(k);
return k.replace(/\+/gi, "%2B");
}
override encodeValue(v: string): string {
v = super.encodeValue(v);
return v.replace(/\+/gi, "%2B");
}
}

最后在 src/app/app.module.ts 中注册 ServeModule

src/app/app.module.ts
import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";

import { AppRoutingModule } from "./app-routing.module";
import { AppComponent } from "./app.component";

import { ServeModule } from "src/angular-utils";

@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
AppRoutingModule,
ServeModule, // 注册代理服务模块
],
providers: [],
bootstrap: [AppComponent],
})
export class AppModule {}

5.6.4 初始配置

完成上面步骤之后还需要最后一步,那就修改服务端(后端)接口(API)地址。

5.6.4.1 Vue/React 配置

Vue/React 项目中编辑 Furion 框架提供的 axios-utils.ts 文件,并将 serveConfig 修改为对应的后端地址即可,如:

/**
* 当前版本:v1.0.3
* 使用描述:https://editor.swagger.io 代码生成 typescript-axios 辅组工具库
* 依赖说明:适配 axios 版本:v0.21.1
* 视频教程:https://www.bilibili.com/video/BV1EW4y1C71D
*/

import globalAxios, { AxiosInstance } from "axios";
import { Configuration } from "./api-services";
import { BaseAPI, BASE_PATH } from "./api-services/base";

// 如果是 Angular 项目,则取消下面注释即可
// import { environment } from './environments/environment';

/**
* 接口服务器配置
*/
export const serveConfig = new Configuration({
// 如果是 Angular 项目,则取消下面注释,并删除 process.env.NODE_ENV !== "production"
// basePath: !environment.production
basePath:
process.env.NODE_ENV !== "production"
? "https://localhost:44342" // 开发环境服务器接口地址
: "https://furion.icu", // 生产环境服务器接口地址
});

// ......

5.6.4.2 Angular 配置

如果是 Angular 项目则编辑 Furion 框架提供的 angular-utils.ts 文件,并将 serveConfig 修改为对应的后端地址即可,如:

/**
* 当前版本:v1.0.3
* 使用描述:https://editor.swagger.io 代码生成 typescript-angular 辅组工具库
*/

import {
HttpClientModule,
HttpEvent,
HttpHandler,
HttpHeaders,
HttpInterceptor,
HttpRequest,
HttpResponse,
HTTP_INTERCEPTORS,
} from "@angular/common/http";
import { Injectable, NgModule } from "@angular/core";
import { finalize, Observable, tap } from "rxjs";
import { ApiModule, Configuration } from "./api-services";
import { environment } from "./environments/environment";

/**
* 接口服务器配置
*/
export const serveConfig = new Configuration({
basePath: !environment.production
? "https://localhost:44316" // 开发环境服务器接口地址
: "https://furion.icu", // 生产环境服务器接口地址
});

// ......

5.6.5 基本使用

5.6.5.1 Vue/React 中使用

Vue/React 中使用有两种方式,一种是 Promise,另外一种就是 async/await,推荐使用后者。

  • Promise 方式
import { getAPI } from "../axios-utils"; // 注意项目的路径

getAPI(SystemAPI) // SystemAPI 对应的是 Swagger 分组标签名称 + API
.apiGetXXXX()
.then((res) => {
var data = res.data.data!;
})
.catch((err) => {
console.log(err);
})
.finally(() => {
console.log("api request completed.");
});
  • async/await 方式
import { getAPI, feature } from "../axios-utils"; // 注意项目的路径

const [err, res] = await feature(getAPI(SystemAPI).apiGetXXX());

if (err) {
console.log(err);
} else {
var data = res.data.data!;
}

console.log("api request completed.");
关于 关于文件流下载

对于文件流下载可能存在下载文件过大的情况,这时候需要添加 options 参数 responseType: "blob" 解决,如:

getAPI(SystemAPI, { responseType: "blob" }).apiGetXXX();

5.6.5.2 Angular 中使用

Angular 项目中,通过构造函数注入对应的服务即可

import { Component } from "@angular/core";
import { PersonService } from "src/api-services"; // 注意项目的路径

@Component({
selector: "app-root",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"],
})
export class AppComponent {
title = "angulars";

// 注入 PersonService
constructor(private personService: PersonService) {}

ngOnInit(): void {
// 使用 personService
this.personService.apiPersonAllGet().subscribe({
next: (res) => {
// 请求成功
console.log(res);
},
error: (err) => {
// 请求失败
},
complete: () => {
// 请求完成
},
});
}
}

5.6.6 重新生成代码

如果后端接口(API)发生改变,只需要删除 api-services 下所有目录文件并重新生成复制进去即可。

关于 Angular 项目

如果是 Angular 项目,可以保留 api-services/encoder.ts 文件并删除其他目录文件,新生成的目录文件无需复制 encoder.ts,这样可以避免每次修改 encoder.ts 文件。

5.6.7 Swagger 多分组生成

在很多大型系统中,为了方便对接口进行归类,往往使用了 Swagger 多分组功能,这样会使系统的接口散落在多个 swagger.json 中。

这个时候,需要在后端规范化文档中启用多分组配置:

{
"SpecificationDocumentSettings": {
"EnableAllGroups": true
}
}

启用配置之后在 Swagger 导航栏顶部下拉分组将出现 All Groups 选项,这时候使用这个 All Groupsswagger.json 进行生成。

5.6.8 自定义生成前端方法名

版本说明

以下内容仅限 Furion 4.1.7+ 版本使用。

通过我们根据 swagger.json 生成前端代码时,Swagger 会自动根据路由地址生成调用的 api 名称,但这样的名称往往不易读,这时候可自定义 [OperationId] 来配置生成的前端名称。

using Furion.SpecificationDocument;

public class PersonDto
{
[OperationId("MyClientMethodName")]
public string TestMethod()
{
// ...
}
}

5.6.9 框架客户端工具库介绍

axios-utils.tsangular-utils.tsFurion 框架专门针对 Furion 开发的 WebAPI 项目编写的客户端代理库,在这个代理库中已经处理了跨域,授权,自动刷新 token 以及解密客户端 JWT token 问题。

同时提供了非常方便的 feature 方法,可将异步方法进行同步化处理。

5.6.10 无法连接外网/内网情况/离线包

在一些比较注重代码安全的组织或公司中,可能不能连接外网进行生成,这个时候只需要下载 https://github.com/swagger-api/swagger-editor 代码在本地部署即可。

Furion 官网也提供了 Swagger-Editor.rar 离线包下载:https://gitee.com/dotnetchina/Furion/blob/v4/clients/Swagger-Editor.rar

下载离线包后直接双击 index.html 启动即可

5.6.11 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/component/index.html b/handbook/build/docs/component/index.html new file mode 100644 index 00000000000..7b6a08ad678 --- /dev/null +++ b/handbook/build/docs/component/index.html @@ -0,0 +1,17 @@ + + + + + +3.2 组件化启动 | Furion + + + + + +
+

3.2 组件化启动

3.2.1 历史背景

.NET Core 2+ 之后,微软创造了 Startup.cs 模式,在这样的模式中,需要任何服务或者中间件处理,只需要在 Startup.cs 文件的两个方法(ConfigureServicesConfigure)中配置即可。

但在 .NET6 之后,微软不再推荐使用 Startup.cs 模式。

在这里,不阐述 Startup.cs 的优点,就列举几个比较明显的缺点:

  • 默认情况下必须放在启动层且主机启动时需通过 .UseStartup<> 进行注册,此问题在 Furion 已解决 AppStartup
  • 配置服务很容易编写出又臭又长的 service.AddXXX()app.AddXXX() 代码,不管是阅读性和灵活性大大减分
  • 对服务注册和中间件注册有顺序要求,不同的顺序可能产生不同的效果,甚至出现异常
  • 不能实现模块化自动装载注册,添加新的模块需要手动注册,注册又得考虑模块化之间依赖顺序问题
  • 不能对模块注册进行监视,比如加载之前,加载失败,加载之后

3.2.2 先看一个例子

在一个大型的 .NET Core 项目中,会经常看到这样的代码:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace Furion.Web.Core;

public sealed class FurWebCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddCorsAccessor();
services.AddControllers().AddInject();
services.AddRemoteRequest();
services.AddEventBus();
services.AddAppLocalization();
services.AddViewEngine();
services.AddSensitiveDetection();
services.AddVirtualFileServer();
services.AddX();
services.AddXX();
services.AddXXX();
services.AddXXXX();
services.AddXXXXX();
services.AddXXXXXX();
// .....
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseCorsAccessor();
app.UseAuthentication();
app.UseAuthorization();
app.UseInject();
app.UseX();
app.UseXX();
app.UseXXX();
app.UseXXXX();
app.UseXXXXX();
app.UseXXXXXX();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}

可能对于大部分 .NET 开发者来说貌似没有任何问题,但是仔细瞧瞧,这里充斥着大量的 .AddXXXX().UseXXXX()真的美观,真的好吗?而且稍有不慎移动了它们的注册顺序可能会引发灾难,还有可能多个服务之间相互依赖,要么全部移除,要么全部保留,未来替代你开发岗位的人知道吗?

试问,这个问题是无解吗?

3.2.3 当然有解

Furion 3.7.3+ 版本之后,借助 Docker-Compose 的设计理念,推出了全新的 Component 组件化 模式,通过组件化开发可以实现组件之间相互依赖,相互链接,还可以共享参数,你仅仅需要编写一个入口组件即可。

先看一个例子:

  • 创建 EntryServiceComponent 入口服务组件
// 创建入口服务组件实现 IServeComponent 接口
public sealed class EntryServiceComponent : IServiceComponent
{
public void Load(IServiceCollection services, ComponentContext componentContext)
{
// 做任何你想做的事情,如 service.AddYourInitService(); 如添加你的模块初始化配置
}
}
  • 通过 AddComponent<> 注册入口组件
// 通过 .AddComponent 注册一个入口服务组件
Serve.Run(RunOptions.Default.AddComponent<EntryServiceComponent>());

接下来,我们模拟实际项目的开发需求:

  1. 需要添加跨域服务,创建 CorsServiceComponent 组件
public sealed class CorsServiceComponent : IServiceComponent
{
public void Load(IServiceCollection services, ComponentContext componentContext)
{
services.AddCorsAccessor();
}
}
  1. 需要添加动态 WebAPI 服务,创建 DynamicApiServiceComponent 组件
public sealed class DynamicApiServiceComponent : IServiceComponent
{
public void Load(IServiceCollection services, ComponentContext componentContext)
{
services.AddDynamicApiControllers();
}
}
  1. 需要添加 XXX 第三方服务,创建 XXXServiceComponent 组件
public sealed class XXXServiceComponent : IServiceComponent
{
public void Load(IServiceCollection services, ComponentContext componentContext)
{
services.AddXXX();
}
}

有了这么多服务组件,那怎么将它们关联起来呢,而且能够正确的处理它们的顺序呢?比如 AddXXX() 必须等 AddDynamicApiControllers() 注册才能注册,这时候只需要为 XXXServiceComponent 添加依赖即可,如:

[DependsOn(
typeof(DynamicApiServiceComponent)
)]
public sealed class XXXServiceComponent : IServiceComponent
{
// ....
}

这样表示 XXXServiceComponent 依赖 DynamicApiServiceComponent 组件,只有 DynamicApiServiceComponent 完成注册才会注册 XXXServiceComponent

那么最后的 EntryServiceComponent 的代码将会是:

[DependsOn(
typeof(CorsServiceComponent),
typeof(XXXServiceComponent)
)]
public sealed class EntryServiceComponent : IServiceComponent
{
// ....
}

最后生成的调用顺序为:AddCorsAccessor() -> AddDynamicApiControllers() -> AddXXX() -> AddEntry()

看到这里,是否已找到答案:每一个项目只有一个入口组件,每个组件只做一件事,组件之间可以通过 DependsOn 配置依赖,组件之间还能共享上下文数据 ComponentContext

没错,这就是 Furion 目前能够想到的最优解决方案。

3.2.4 IComponent

Furion 3.7.3+ 版本,新增了 Components 模块,该模块的根接口为 IComponent,含有两个派生接口 IServiceComponentIApplicationComponent

3.2.4.1 IServiceComponent

IServiceComponent 接口简称服务组件对应的是 Startup.cs 中的 ConfigureService,接口签名为:

namespace System;

/// <summary>
/// 服务组件依赖接口
/// </summary>
public interface IServiceComponent : IComponent
{
/// <summary>
/// 装载服务
/// </summary>
/// <param name="services"><see cref="IServiceCollection"/></param>
/// <param name="componentContext">组件上下文</param>
void Load(IServiceCollection services, ComponentContext componentContext);
}

需要注册服务可在 Load 方法中注册即可。

3.2.4.2 IApplicationComponent

IApplicationComponent 接口简称中间件组件对应的是 Startup.cs 中的 Configure,接口签名为:

namespace System;

/// <summary>
/// 应用中间件接口
/// </summary>
public interface IApplicationComponent : IComponent
{
/// <summary>
/// 装置中间件
/// </summary>
/// <param name="app"><see cref="IApplicationBuilder"/></param>
/// <param name="env"><see cref="IWebHostEnvironment"/></param>
/// <param name="componentContext">组件上下文</param>
void Load(IApplicationBuilder app, IWebHostEnvironment env, ComponentContext componentContext);
}

需要注册中间件可在 Load 方法中注册即可。

3.2.4.3 IWebComponent

IWebComponent 接口简称 Web 组件对应的是 Program.cs 中的 WebApplicationBuilder,接口签名为:

namespace System;

/// <summary>
/// WebApplicationBuilder 组件依赖接口
/// </summary>
public interface IWebComponent : IComponent
{
/// <summary>
/// 装置 Web 应用构建器
/// </summary>
/// <param name="app"><see cref="WebApplicationBuilder"/></param>
/// <param name="componentContext">组件上下文</param>
void Load(WebApplicationBuilder builder, ComponentContext componentContext);
}

需要注册中间件可在 Load 方法中注册即可。

3.2.4.3 注册组件

Furion 提供了多种注册组件的方式:

  • 方式一

通过 RunOptionsLegacyRunOptionsGenericRunOptions 方式:

Serve.Run(RunOptions.Default
.AddComponent<TComponent>()
.UseComponent<TComponent>());

// .NET6+ 还支持 AddWebComponent<TComponent>();
Serve.Run(RunOptions.Default
.AddWebComponent<TComponent>());
  • 方式二

通过 services.AddComponentapp.UseComponent 方式

// 服务组件
service.AddComponent<TComponent>();

// 中间件组件
app.UseComponent<TComponent>();

// .NET6+ 还支持 AddWebComponent<TComponent>();
builder.AddWebComponent<TComponent>();
  • 方式三

组件注册可以传递参数,通过最后的参数指定。

// 服务组件
service.AddComponent<TComponent>(options);

// 中间件组件
app.UseComponent<TComponent>(options);

// .NET6+ 还支持 AddWebComponent<TComponent>();
builder.AddWebComponent<TComponent>(options);
类型 Type 注册方式

除了提供泛型注册组件的方式,还提供了 .AddComponent(typeof(XXXComponent)).UseComponent(typeof(XXXComponent)) 方式。

3.2.5 组件设计原则

3.2.5.1 职责单一性

组件的设计理应遵循职责单一性原则,具有单一性又有职责明确性,通俗点说每一个组件尽可能的只做一件事,如果组件之间有依赖,通过 [DependsOn] 声明配置,如:

[DependsOn(
typeof(OtherServiceComponent),
"Other.Assembly;Other.Assembly.OtherServiceComponent"
)]
public sealed class YourServiceComponent : IServiceComponent
{
public void Load(IServiceCollection services, ComponentContext componentContext)
{
services.AddXXX();
}
}

3.2.5.2 约定大于配置

由于组件通常包含服务和中间件两个注册,所以推荐组件类的命名统一为:XXXComponent.cs,然后在 XXXComponent.cs 中分别写 IServiceComponentIApplicationComponent 组件。

尽可能每一个服务组件(IServiceComponent)以 ServiceComponent 结尾,每一个中间件组件(IApplicationComponent)以 ApplicationComponent 结尾。如:

XXXComponent.cs
namespace Your.Components;

// 服务组件
public sealed class XXXServiceComponent : IServiceComponent
{
// ....
}

// 中间件组件
public sealed class XXXApplicationComponent : IApplicationComponent
{
// ....
}

// WebApplicationBuilder 组件
public sealed class XXXWebComponent : IWebComponent
{
// ....
}
小知识

如果没有 IServiceComponentIApplicationComponent,则写其一即可。

3.2.6 [DependsOn] 详解

由于组件和组件之间存在依赖方式,甚至没有依赖关系但支持唤醒其他组件功能,所以 Furion 提供了 [DependsOn] 特性。

3.2.6.1 配置介绍

  • DependsOn
    • DependComponents:配置组件依赖关系,Type[] 类型,一旦配置了依赖关系,那么被依赖的组件会先于当前组件注册
    • Links:配置组件链接关系,Type[] 类型,该配置主要解决一些组件并不是从 根组件 进行配置,而是处于和 根组件 平行的情况,类似多入口组件
构造函数说明

DependComponentsDependsOnAttribute 特性的默认构造函数,支持 TypeString 类型,如:

[DependsOn(
typeof(XXXComponent),
typeof(XXXXComponent),
"程序集;类型完整限定名" // 会自动加载程序集中特定的组件,后续模块化开发非常方便
)]

如需配置 Links,只需要这样接口:

[DependsOn(
typeof(XXXComponent),
Links = new object[]{
typeof(XXXComponent),
typeof(XXXXComponent)
}
)]

3.2.6.2 重复依赖问题

Furion 框架中已经处理了组件重复依赖问题,会自动生成好最佳的注册顺序并去除重复依赖注册问题。

3.2.6.3 循环依赖问题

循环依赖实际上是一种错误注册组件的方式,会导致出现内存溢出情况,早期组件化版本框架处理了循环依赖问题,也就是主动忽略或报错,但是考虑此行为本身带有潜在的安全问题,所以移除了循环依赖处理,而是选择在开发阶段抛出异常方式。

3.2.7 ComponentContext 详解

ComponentContext 是组件注册 Load 方法的最后参数,该参数提供了组件之间的一些元数据。

3.2.7.1 属性介绍

  • ComponentContext
    • ComponentType:组件类型,Type 类型
    • CalledContext:上级组件,ComponentContext 类型,也就是 DependsOn 中的组件上下文,如果没有则是前一个组件的上下文
    • RootContext:根组件/入口组件,ComponentContext 类型
    • DependComponents:组件依赖的所有组件列表,Type[] 类型
    • LinkComponents:组件链接的所有组件列表,Type[] 类型

3.2.7.2 参数配置/获取

在注册组件小节中,我们可以通过 .AddComponent.UseComponent 最后的参数来指定组件的参数,那么如何在组件中获取你传递的参数呢?

ComponentContext 提供了多种方法:

  • GetProperty<TComponent, TComponentOptions>():获取组件的参数
  • GetProperty<TComponentOptions>(Type):通过类型获取组件参数
  • GetProperty<TComponentOptions>(string):通过指定 key 获取
  • GetProperties():获取组件所有参数列表(包括依赖,链接等)
  • SetProperty<TComponent>(object):设置特定组件参数
  • SetProperty(Type, object):设置特定类型组件的参数
  • SetProperty(string, object):设置指定 key 的参数值

例子说明

注册时传入 EntryOption 参数

service.AddComponent<EntryServiceComponent>(new EntryOption {});

在组件内部获取:

public sealed class EntryServiceComponent : IServiceComponent
{
public void Load(IServiceCollection services, ComponentContext componentContext)
{
var options = componentContext.GetProperty<EntryServiceComponent, EntryOption>();

services.AddXXXX(options);
}
}

除此之外,还可以通过 componentContext.SetProperty<XXXServiceComponent>(new xxxOptions{}) 来设置下游组件的参数。

3.2.8 实现 Startup.cs 模式

组件模式是非常强大且灵活的,我们也可以通过组件的模式模拟出传统的 Startup.cs,如:

StartupComponent
// 模拟 ConfigureService
public sealed class StartupServiceComponent : IServiceComponent
{
public void Load(IServiceCollection services, ComponentContext componentContext)
{
services.AddControllers()
.AddInject();
}
}

// 模拟 Configure
public sealed class StartupApplicationComponent : IApplicationComponent
{
public void Load(IApplicationBuilder app, IWebHostEnvironment env, ComponentContext componentContext)
{
app.UseRouting();
app.UseInject(string.Empty);
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}

只需要通过 service.AddComponent<StartupComponent>() 注册即可,如果使用 Serve.Run() 模式将更简单,如:

Serve.Run(RunOptions.Default
.AddComponent<StartupServiceComponent>()
.UseComponent<StartupApplicationComponent>());

是不是很灵活啊~

3.2.9 最佳实践?

在写最佳实践时是最痛苦的,因为最佳实践应该是把微软底层所有的 service.AddXXXapp.AddXXX 独立成一个个组件,比如 servers.AddControllers() 对应一个 ControllersServiceComponent

这样做的话工作量是非常大的,但如果不这样做,组件化就无法彻底。

所以现阶段暂时采用自由定制组件方式,比如自己在项目中编写 ControllersServiceComponent 这类组件。

3.2.10 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/configuration/index.html b/handbook/build/docs/configuration/index.html new file mode 100644 index 00000000000..9b144e05927 --- /dev/null +++ b/handbook/build/docs/configuration/index.html @@ -0,0 +1,17 @@ + + + + + +4.1 配置 | Furion + + + + + +
+

4.1 配置

自定义配置特别注意

如:xxxx.json,必须在 VS Studio 中右键属性设置 复制输出目录为如果较新则复制,生成操作为:内容

如果 .json 文件配置在多个项目层,也必须保证命名唯一,不然编译后出现相互覆盖的情况。

中文乱码问题

默认情况下,.json 文件并未采用 utf-8 编码,所以如果存在中文读取后就会出现乱码情况,这时候,只需要修改 .json 文件编码为 utf-8 即可。

4.1.1 什么是配置

简单来说,配置将系统应用可动态调配的选项放在统一地方管理,通过不同的配置让系统做出动态调整。

ASP.NET Core 应用程序启动时默认加载 启动项目 下的 appsettings.json 作为应用配置。同时还支持不同的运行环境加载对应的配置文件,如:

  • Development:加载 appsettings.Development.json
  • Staging:加载 appsettings.Staging.json
  • {Environment}appsettings.{Environment}.json

4.1.2 配置的使用

假设我们需要在系统运行时获取系统名称、版本号及版权信息,这些信息可能随时变化而且需要在多个地方使用。这时就需要将这些信息配置起来。具体步骤如下:

4.1.2.1 配置 appsettings.json 信息

{
"AppInfo": {
"Name": "Furion",
"Version": "1.0.0",
"Company": "Baiqian"
}
}
特别注意

appsettings.json 复制输出目录为如果较新则复制,生成操作为:内容

另外,某些 linux 系统不支持读取带 注释 的 json 文件,直接读取将会报错。需要将 json 内的注释全部 删除 才能正常读取。

4.1.2.2 读取 appsettings.json 信息

Furion 框架中,提供了两种读取方式:

  • 依赖注入 IConfiguration 对象读取
  • 通过 App.Configuration[path] 读取
using Microsoft.AspNetCore.Mvc;

namespace Furion.Web.Entry.Controllers
{
[Route("api/[controller]")]
public class DefaultController : ControllerBase
{
[HttpGet]
public string Get()
{
return $@"名称:{App.Configuration["AppInfo:Name"]}
版本:{App.Configuration["AppInfo:Version"]}
公司:{App.Configuration["AppInfo:Company"]}";
}
}
}
依赖注入的方式

通过依赖注入注入实例有几种方式:

  • 构造函数注入方式
private readonly IConfiguration _configuration;
public DefaultController(IConfiguration configuration)
{
_configuration = configuration;
}
  • 参数注入方式 [FromServices]
public string Get([FromServices] IConfiguration configuration)
{
}
  • 属性注入方式
public IConfiguration Configuration { get; set; }

想了解更多关于《ASP.NET Core - 依赖注入》 知识

4.1.2.3 如何选择读取方式

  • 在可依赖注入类中,依赖注入 IConfiguration 读取
  • 在静态类/非依赖注入类中,选择 App.Configuration[path] 读取

4.1.2.4 读取配置并转换成特定类型

ASP.NET CoreFurion 提供了多种配置类型读取并转换成特定类型,包括基础类型,对象类型,数组,集合,字典等等,如:

// ASP.NET Core
var data = Configuration.GetSection("配置节点").Get<类型>();

// Furion,推荐!!!
var data = App.GetConfig<类型>("配置节点");

4.1.3 路径符 查找节点

ASP.NET Core 中,配置采用 : 分隔符来读取分层配置数据。如上述例子中的 AppInfo:Name。如有更多层级数据则只需要通过 : 进入下一层节点即可。

假设我们有以下配置信息:

{
"AppInfo": {
"Name": "Furion",
"Version": "1.0.0",
"Company": {
"Name": "Baiqian",
"Address": {
"City": "中国",
"Province": "广东省",
"Detail": "中山市东区紫马公园西门"
}
}
}
}
var companyName = App.Configuration["AppInfo:Name"]; // => Furion

4.1.3.1 查找数组节点

有些时候我们需要或者数组特定的某些,可以通过 App.Configuration["array:0"] 获取,0 是索引数字。

4.1.4 自定义配置文件

XML 配置说明

Furion v2.8.0 版本移除了 .xml 文件自动扫描配置了,改为手动添加配置。

大多情况下,我们的配置只需要在 appsettings.json 中配置即可,但一些特殊情况下,我们希望某些组件或功能拥有独立的配置,这个时候就需要用到自定义配置,Furion 目前支持 .json.xml 两种方式配置,如:

Furion.Web.Entry/emailsetting.json
{
"outlook": {
"smtp": {
"server": "smtp.office365.com",
"port": "587",
"ssl": "STARTTLS"
},
"pop": {
"server": "outlook.office365.com",
"port": "995",
"ssl": "TLS"
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<MyKey>MyXMLFile Value</MyKey>
<Position>
<Title>Title from MyXMLFile</Title>
<Name>Name from MyXMLFile</Name>
</Position>
<Logging>
<LogLevel>
<Default>Information</Default>
<Microsoft>Warning</Microsoft>
</LogLevel>
</Logging>
</configuration>
xml 配置事项

如果采用 xml 配置,那么文件名必须以 .config.xml 结尾(不区分大小写)。

特别说明

Furion 框架会在启动时自动扫描每一个项目层根目录下的 *.json 文件加入配置中,所以无需手工配置。

新增 *.json 文件的属性 复制到输出目录 设置为始终复制或较新复制,否则不会载入。另外配置文件不能出现重名,也就是保证整个项目中配置文件名字唯一。比如不能在非 Web 其他层定义 appsettings.json 文件。

v2.16.7+ 版本版本之后,支持自定义配置扫描目录:

{
"ConfigurationScanDirectories": ["目录1名称", "目录1名称/子目录名称"]
}

同时 Furion 提供了非常灵活的方式支持自定义配置文件读取,如:

4.1.4.1 读取 emailsetting.json 配置

读取自定义配置文件和读取 appsettings.json 一致,系统会自动从多个配置文件中读取输入,如:

var smtpServer = App.Configuration["outlook:smtp:server"]; // => smtp.office365.com

4.1.4.2 排除特定配置文件

有些时候,我们不需要 .json.xml 自动载入配置中,我们只需要在启动层 appsettings.json 中添加 IgnoreConfigurationFiles 节点即可:

{
"IgnoreConfigurationFiles": ["runtime.json"]
}

4.1.5 不同环境读取

在实际应用开发中,我们可能会根据不同的环境加载不同的配置文件,如 数据库连接字符串

这时我们只需要遵循特定命名规范 {name}.{Environment}.json 即可。如:

  • appsettings.Development.json
  • appsettings.Staging.json
  • appsettings.Production.json
  • emailsetting.Development.json
  • emailsetting.Staging.json
  • emailsetting.Production.json

这时,ASP.NET Core 会在应用启动时自动加载不同环境的配置文件。

4.1.6 配置更改通知(热更新

.NET Core 应用程序中,配置支持更改通知,也就是热更新操作。一旦监听到 appsetting.json 或自定义配置文件发生变动,就会触发 OnChange 方法。代码如下:

var appInfoConfiguration = App.Configuration.GetSection("AppInfo");
ChangeToken.OnChange(() => App.Configuration.GetReloadToken(), () =>
{
var name = appInfoConfiguration["Name"]; // 实时的最新值
var version = appInfoConfiguration["Version"]; // 实时的最新值
});
监听对象

如果监听全局配置文件传入 App.Configuration.GetReloadToken(),如果只需要监听特定节点,传入 App.Configuration.GetSection("AppInfo")

4.1.7 手动添加配置文件

获取路径说明
  • 获取项目目录:AppContext.BaseDirectory
  • 获取网站根目录:Directory.GetCurrentDirectory()

有些时候,我们的配置文件没有放在项目的根目录下,这时候我们需要手动载入自定义配置文件,有以下几种方式:

  • 方式一:appsettings.json 中 (推荐)
支持版本

v2.16.7+ 版本有效

{
"ConfigurationScanDirectories": ["目录1名称", "目录1名称/子目录名称"]
}
  • 方式二:.NET5Program.cs 中配置
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
// 加载自定义配置
config.AddJsonFile("MyConfig.json", optional: true, reloadOnChange: true);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
  • 方式三:.NET6Program.cs 中配置
var builder = WebApplication.CreateBuilder(args)
builder.Configuration.AddJsonFile("MyConfig.json", optional: true, reloadOnChange: true);
// 注意先添加配置再初始化 Furion
builder.Inject();
var app = builder.Build();
app.Run();

如果使用 Serve.Run() 模式可使用下列代码配置:

Serve.Run(RunOptions.Default.ConfigureConfiguration((env, configuration) => {
configuration.AddJsonFile("MyConfig.json", optional: true, reloadOnChange: true);
}));

4.1.8 配置的优缺点

  • 优点

    • 能够在系统运行时快速读取
    • 无需额外配置
  • 缺点

    • 存在重复读取
    • 通过硬编码字符串读取,容易出错
    • 不能设置默认值
    • 不能在运行环境中动态配置
    • 不能验证配置有效性
    • 不支持更改通知

4.1.9 配置使用场景

如果只需要一次性读取配置信息,则使用配置,否则应该使用 《4.2 选项》代替。

4.1.10 实现配置中心

ASP.NET Core 除了通过配置文件读取配置信息外,还支持自定义 配置提供程序,通过 配置提供程序 可以实现配置中心,比如通过数据库提供配置。

具体实现查看微软官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0#custom-configuration-provider

下面给出集成 AliginConfig 例子:

版本说明

以下内容仅限 Furion 4.4.9 + 版本使用。

Serve.Run 方式:

Serve.Run(RunOptions.Default.WithArgs(args)
.ConfigureInject((builder, options) =>
{
options.ConfigureAppConfiguration((_, cfb) =>
{
cfb.AddAgileConfig(new AgileConfig.Client.ConfigClient(builder.Configuration), obj =>
{
Console.WriteLine($"{obj}");
});
});

options.ConfigureWebServices((_, services) =>
{
services.AddAgileConfig();
});
})
);

.NET6+ 方式

var builder = WebApplication.CreateBuilder(args)
.Inject((builder, options) =>
{
options.ConfigureAppConfiguration((_, cfb) =>
{
cfb.AddAgileConfig(new AgileConfig.Client.ConfigClient(builder.Configuration), obj =>
{
Console.WriteLine($"{obj}");
});
});
options.ConfigureWebServices((_, services) =>
{
services.AddAgileConfig();
});
});

.NET5 方式:

public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.Inject((builder, options) =>
{
options.ConfigureAppConfiguration((_, cfb) =>
{
cfb.AddAgileConfig(new AgileConfig.Client.ConfigClient(cfb.Build()), obj =>
{
Console.WriteLine($"{obj}");
});
});
options.ConfigureWebServices((_, services) =>
{
services.AddAgileConfig();
});
})
.UseStartup<Startup>();
});
}

4.1.11 重载配置

Furion 会在应用启动的时候对 IConfiguration 进行静态缓存,如果使用了 App.Configuration 静态属性且配置数据已发生变更,则调用以下方法刷新即可:

App.Configuration.Reload();

4.1.12 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 配置 知识可查阅 ASP.NET Core - 配置 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/contribute/index.html b/handbook/build/docs/contribute/index.html new file mode 100644 index 00000000000..85fdf8e8eb6 --- /dev/null +++ b/handbook/build/docs/contribute/index.html @@ -0,0 +1,17 @@ + + + + + +38. 贡献指南 | Furion + + + + + +
+

38. 贡献指南

38.1 提交错误报告

如果您在 Furion 中发现了一个不存在安全问题的漏洞,请在 Furion 仓库中的 Issues 中搜索,以防该漏洞已被提交,如果找不到漏洞可以创建一个新的 Issues,如果发现了一个安全问题请不要将其公开,请参阅安全问题处理方式,提交错误报告时应该详尽。

38.2 安全问题处理

本项目中对安全问题处理的形式,项目核心人员确认编辑,该部分内容可以根据项目情况添加。

38.3 解决现有问题

通过查看仓库的 Issues 列表可以发现需要处理的问题信息,可以尝试解决其中的某个问题。

38.4 如何提出新功能

提出新功能有些项目使用 Issues 的 Feature 标签进行管理,有些则通过邮件的形式统一收集,在收集后项目内人员会进行确认开发,一般将确认开发的功能会放入下一个版本的任务列表。

38.5 如何设置开发环境并运行测试

如果是通过 Git 管理可以从 git clone https://gitee.com/dotnetchina/Furion.git 开始编写,将开发环境的配置信息,IDE 的设置等信息配置文档编写。

38.6 变更日志填写规则

  1. 使用现在时态
  2. 第一行字数限制
  3. 提交内容的约束

38.7 编码约定

  • 项目内编码约定文件:.editorconfig

38.8 分支处理约定

  • 分支处理形式,如 gitFlow

38.9 合并 PR 的形式

在什么情况下可以合并到 master/main:

  1. 通过 CI
  2. 两个及以上的维护者通过.
  3. 最新版本
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/cors/index.html b/handbook/build/docs/cors/index.html new file mode 100644 index 00000000000..01097e53ed3 --- /dev/null +++ b/handbook/build/docs/cors/index.html @@ -0,0 +1,17 @@ + + + + + +16. CORS 跨域 | Furion + + + + + +
+

16. CORS 跨域

16.1 什么是跨域

简单来说,当一个请求 url 的协议、域名、端口三者之间任意一个与当前页面 url 不同即为跨域。那为什么会出现跨域问题呢?

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说 Web 是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的 javascript 脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

16.2 有跨域行为示例

当前页面 url被请求页面 url是否跨域原因
http://www.furion.icu/http://www.furion.icu/index.html同源(协议、域名、端口号相同)
http://www.furion.icu/https://www.furion.icu/index.html跨域协议不同(http/https)
http://www.furion.icu/http://www.baidu.com/跨域主域名不同(chinadot/baidu)
http://www.furion.icu/http://blog.furion.icu/跨域子域名不同(www/blog)
http://www.furion.icu:8080/http://www.furion.icu:7001/跨域端口号不同(8080/7001)

16.3 什么是 CORS

跨源资源共享 (CORS) :

  • 是一种 W3C 标准,可让服务器放宽相同的源策略。
  • 不是一项安全功能,CORS 放宽 securityAPI 不能通过允许 CORS 来更安全。 有关详细信息,请参阅 CORS 工作原理
  • 允许服务器明确允许一些跨源请求,同时拒绝其他请求。
  • 比早期的技术(如 JSONP)更安全且更灵活。

16.4 如何使用

16.4.1 添加 CORS 服务

启用跨域 Cors 支持首先添加 CorsAccessor 服务,如:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace Furion.Web.Core
{
[AppStartup(700)]
public sealed class FurWebCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddCorsAccessor();

// ...
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//...

app.UseCorsAccessor();

// ...
}
}
}
特别注意

services.AddCorsAccessor(); 需在 services.AddControllers() 之前注册。

app.UseCorsAccessor(); 需在 app.UseRouting();app.UseAuthentication(); 之间注册。

16.4.2 配置允许跨域域名

小提醒

默认情况下,Furion 允许所有域名来源访问,也就是无需配置任何来源域名,另外前端也需要设置请求参数:withCredentials:false

如果需要指定特定域名,则添加以下配置即可:

{
"CorsAccessorSettings": {
"PolicyName": "自定义跨域策略名",
"WithOrigins": ["http://localhost:4200", "https://furion.icu"]
}
}

16.5 CorsAccessorSettings 配置

  • CorsAccessorSettings
    • PolicyName:跨域策略名,string 类型,必填,默认 App.Cors.Policy
    • WithOrigins:允许跨域的域名列表,string[] 类型,默认 *
    • WithHeaders:请求表头,没有配置则允许所有表头,string[] 类型
    • WithExposedHeaders:设置客户端可获取的响应标头,string[] 类型,默认 ["access-token", "x-access-token"]
    • WithMethods:设置跨域允许请求谓词,没有配置则允许所有,string[] 类型
    • AllowCredentials:是否允许跨域请求中的凭据,bool 类型,默认值 true
    • SetPreflightMaxAge:设置预检过期时间,int 类型,默认值 24小时
    • FixedClientToken:是否默认配置 WithExposedHeadersbool 类型,默认 true
    • SignalRSupport:是否启用 SignalR 跨域支持,bool 类型,默认 false

16.6 前端不能读取响应头注意事项

有时候,我们通过 ajax 或者 axios 第三方库无法读取响应头自定义信息,这时需要响应报文中公开特定 Header 才能放行,如:Access-Control-Expose-Headers: xxxxx,所以,需要添加以下配置:

appsettings.json
{
"CorsAccessorSettings": {
"WithExposedHeaders": ["access-token","x-access-token"]
}
}

需要获取哪个头,就在 WithExposedHeaders 数组中配置即可。如果使用 ajax 可以通过 xhr.getResponseHeader(key)xhr.getAllResponseHeaders() 获取配置的 key

特别情况下不能请求,可以考虑设置 withCredentials: false

16.7 使用 $.ajax 前端注意事项

使用 Jquery 前端请求可以参考以下配置:

$.ajax({
       url: "https://localhost:5001/api/system/getdata",
       type: "GET",
       xhrFields: {
           withCredentials: false // 如果是https请求,可以试试 true
       },
       crossDomain: true,
       success: function (res) {
           render(res);
       }
});
特别注意

在本地开发阶段,请求如果出现 Access to XMLHttpRequest...has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header... 错误,请确保 ajaxurl 参数是正确的,通常错误的做法是:

  • 使用了 127.0.0.1 而不是 localhost 主机地址
  • 使用 http 而不是 https 主机协议
  • 使用了 5000 而不是 5001 主机端口

16.8 禁用跨域

有时候,我们希望某个方法不检查跨域请求,可以在 Action 中贴 [DisableCors] 特性即可。

16.9 SignalR 跨域问题

SignalR 实现跨域需要满足下面几个条件:

  • 允许特定的预期来源,允许任何来源是可行的,但不安全或不推荐使用
  • 必须允许使用 HTTP 方法 GETPOST
  • 为了使基于 cookie 的粘滞会话正常工作,必须允许使用凭据,即使未使用身份验证,也必须启用它们。

官方文档说明 https://docs.microsoft.com/zh-cn/aspnet/core/signalr/security?view=aspnetcore-6.0

Furion 4.1.4+ 版本已修正 SignalR 跨域问题,只需要启用 SignalRSupport 配置即可,如:

{
"CorsAccessorSettings": {
"SignalRSupport": true
}
}

16.10 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 跨域请求 知识可查阅 ASP.NET Core - 启用跨域请求 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/course/index.html b/handbook/build/docs/course/index.html new file mode 100644 index 00000000000..d35759cf9c6 --- /dev/null +++ b/handbook/build/docs/course/index.html @@ -0,0 +1,17 @@ + + + + + +1.7 发展大事记 | Furion + + + + + +
+

1.7 发展大事记

2020 年

  • 2020 年 06 月 29 日Fur 在 Gitee 平台创建空仓库。
  • 2020 年 09 月 01 日Fur 正式写下第一行代码。
  • 2020 年 10 月 01 日Fur 获得 Gitee 最有价值开源项目 GVP 证书
  • 2020 年 10 月 22 日Fur 在 Gitee 平台获得 1000 stars.
  • 2020 年 11 月 11 日Fur 单身节当天发布了 1.0.0 正式版。
  • 2020 年 11 月 20 日Fur 改名为 Furion
  • 2020 年 11 月 23 日Furion Logo 由之前的 奶牛 更换为 袋鼠
  • 2020 年 12 月 22 日Furion 在 Gitee 平台获得 2000 stars。

2021 年

  • 2021 年 03 月 01 日Furion 捐赠项目到 dotNET China 组织。
  • 2021 年 03 月 05 日Furion 在 Gitee 平台获得 3000 stars。
  • 2021 年 04 月 01 日Furion 所在群 dotNET China 突破 5000 人。
  • 2021 年 04 月 06 日Furion 在 Gitee 平台获得 4000 stars。
  • 2021 年 04 月 19 日Furion 正式发布 2.0.0 版本,并支持控制台应用开发。
  • 2021 年 04 月 29 日Furion 所在群 dotNET China 突破 6000 人。
  • 2021 年 05 月 13 日Furion 在 Gitee 平台获得 5000 stars。
  • 2021 年 06 月 01 日Furion 所在群 dotNET China 突破 7000 人。
  • 2021 年 06 月 22 日Furion 在 Gitee 平台获得 6000 stars。
  • 2021 年 07 月 04 日Furion 登顶 Gitee 平台 C# 语言板块第一名。
  • 2021 年 07 月 16 日Furion 采用 百小僧 头像作为 Logo
  • 2021 年 07 月 20 日FurionApache 2.0 开源协议修改为 MulanPSL-2.0 (木兰宽松许可证)
  • 2021 年 07 月 27 日Furion 正式支持全平台、.NET 全平台项目开发。
  • 2021 年 08 月 11 日Furion 加入 木兰开源社区 重点孵化。
  • 2021 年 08 月 21 日FurionNuget 平台突破 100万 安装量。
  • 2021 年 08 月 30 日Furion 在 Gitee 平台获得 7000 stars。
  • 2021 年 09 月 01 日Furion 诞生一周年。
  • 2021 年 11 月 09 日Furion 正式发布 3.0.0 版本,全新的 .NET6 架构。
  • 2021 年 11 月 22 日Furion 迎来了第一个赞助商 JNPF

2022 年

  • 2022 年 05 月 20 日Furion 在 Gitee 平台获得 8000 Stars。
  • 2022 年 06 月 18 日Furion 有了自己的入口函数 Serve.Run() 和错误页。
  • 2022 年 06 月 20 日Furion 项目贡献者突破 200 人。
  • 2022 年 07 月 25 日Furion 正式发布 4.0.0 版本,彻底实现大一统(.NET5-.NET N)都可以升级。
  • 2022 年 08 月 01 日FurionMulanPSL-2.0 开源协议修改为 MIT
  • 2022 年 08 月 18 日FurionNuget 平台突破 300万 安装量。
  • 2022 年 09 月 01 日Furion 诞生两周年。
  • 2022 年 09 月 18 日Furion 解散 QQ 群,回归最初的开源协作模式,了解更多
  • 2022 年 10 月 29 日FurionNuget 平台突破 400万 安装量。
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/cron/index.html b/handbook/build/docs/cron/index.html new file mode 100644 index 00000000000..ef218994503 --- /dev/null +++ b/handbook/build/docs/cron/index.html @@ -0,0 +1,17 @@ + + + + + +26.2 Cron 表达式 | Furion + + + + + +
+

26.2 Cron 表达式

版本说明

Furion 4.8.0+ 版本采用 TimeCrontab 作为 Cron 表达式解析。

版本说明

以下内容仅限 Furion 4.8.0 + 版本使用。

26.2.1 关于 Cron 表达式

Cron 表达式是一个字符串,字符串以 56 个空格隔开,分为 67 个域,每一个域代表一个含义,Cron 表达式通常是作为实现定时任务的基石。

26.2.2 快速入门

26.2.2.1 常规格式

常规格式:分 时 天 月 周

var crontab = Crontab.Parse("* * * * *");
var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);

26.2.2.2 支持年份

支持年份:分 时 天 月 周 年

var crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithYears);
var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);

26.2.2.3 支持秒数

支持秒数:秒 分 时 天 月 周

var crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);

26.2.2.4 支持秒和年

支持秒和年:秒 分 时 天 月 周 年

var crontab = Crontab.Parse("* * * * * * *", CronStringFormat.WithSecondsAndYears);
var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);

26.2.2.5 Macro 标识符和静态属性

为了方便常见的 Cron 表达式,如 每天每月每小时 等等,所以提供了 Macro 标识符和静态属性:

// macro 字符串
var secondly = Crontab.Parse("@secondly"); // 每秒 .0000000
var minutely = Crontab.Parse("@minutely"); // 每分钟 00
var hourly = Crontab.Parse("@hourly"); // 每小时 00:00
var daily = Crontab.Parse("@daily"); // 每天 00:00:00
var monthly = Crontab.Parse("@monthly"); // 每月 1 号 00:00:00
var weekly = Crontab.Parse("@weekly"); // 每周日 00:00:00
var yearly = Crontab.Parse("@yearly"); // 每年 1 月 1 号 00:00:00

// 静态属性
var secondly = Crontab.Secondly; // 每秒 .0000000
var minutely = Crontab.Minutely; // 每分钟 00
var hourly = Crontab.Hourly; // 每小时 00:00
var daily = Crontab.Daily; // 每天 00:00:00
var monthly = Crontab.Monthly; // 每月 1 号 00:00:00
var weekly = Crontab.Weekly; // 每周日 00:00:00
var yearly = Crontab.Yearly; // 每年 1 月 1 号 00:00:00

26.2.3 Cron 各字段说明

字段允许值允许特别符号格式化
     0-59\* , - /CronStringFormat.WithSecondsCronStringFormat.WithSecondsAndYears
分钟      0-59\* , - /ALL
小时      0-23\* , - /ALL
     1-31\* , - / ? L WALL
月份      1-12 or JAN-DEC\* , - /ALL
星期      0-6 or SUN-SAT\* , - / ? L #ALL
年份      0001–9999\* , - /CronStringFormat.WithYearsCronStringFormat.WithSecondsAndYears
  • *:表示匹配该域的任意值,假如在 分钟 域使用 *,即表示每分钟都会触发事件。
  • ?:只能用在 星期 两个域。它也匹配域的任意值,但实际不会。因为 星期 会相互影响。例如想在 每月的20日 触发调度,不管 20 日到底是星期几,则只能使用如下写法:13 13 15 20 * ?, 其中最后一位只能用 ?,而不能使用 *,如果使用 * 表示不管星期几都会触发,实际上并不是这样。
  • -:表示范围,例如在 分钟 域使用 5-20,表示从 5分20分钟 每分钟触发一次。
  • /:表示起始时间开始触发,然后每隔固定时间触发一次,例如在 分钟 域使用 5/20,则意味着 5分钟 触发一次,而 25,45 等分别触发一次。
  • ,:表示列出枚举值。例如:在 分钟 域使用 5,20,则意味着在 第5第20分钟 分别触发一次。
  • L:表示最后,只能出现在 星期月份 域,如果在 星期 域使用 5L,意味着在 最后的一个星期四 触发。
  • W:表示有效工作日(周一到周五),只能出现在 域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 使用 5W,如果 5日是星期六,则将在最近的工作日:星期五,即 4日 触发。如果 5日是星期天,则在6日(周一)触发;如果 5日在星期一到星期五中的一天,则就在 5日 触发。另外一点,W 的最近寻找不会跨过月份。
  • LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个非周六周末的日期。
  • #:用于确定每个月第几个星期几,只能出现在 星期 域。例如在 4#2,表示某月的第二个星期三。

26.2.4 CronStringFormat 格式化

默认情况下,Cron 表达式不支持 的,如有需求,可配置 CronStringFormat 枚举参数。

  • CronStringFormat 提供以下枚举值:
    • CronStringFormat.Default:默认格式,书写顺序:分 时 天 月 周
    • CronStringFormat.WithYears:带年份格式,书写顺序:分 时 天 月 周 年
    • CronStringFormat.WithSeconds:带秒格式,书写顺序:秒 分 时 天 月 周
    • CronStringFormat.WithSecondsAndYears:带秒和年格式,书写顺序:秒 分 时 天 月 周 年

26.2.5 在线生成 Cron 表达式

对于大多数开发者来说,编写 Cron 表达式是有难度的,所以推荐使用在线 Cron 表达式生成器。

https://cron.qqe2.com/

26.2.6 实现简单定时任务

小建议

建议使用 【26.1 调度作业】 章节内容实现强大的分布式定时任务。

通过 Cron 表达式解析和 while 循环可以实现简单的定时任务。

26.2.6.1 while + Task 方式

// 阻塞方式
var crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
while(true)
{
Thread.Sleep(crontab.GetSleepMilliseconds(DateTime.Now));
Console.WriteLine(DateTime.Now.ToString("G"));
}

// 无阻塞方式
var crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
Task.Factory.StartNew(async () =>
{
while (true)
{
await Task.Delay(crontab.GetSleepMilliseconds(DateTime.Now));
Console.WriteLine(DateTime.Now.ToString("G"));
}
}, TaskCreationOptions.LongRunning);

26.2.6.2 BackgroundService 方式

using Furion.TimeCrontab;

namespace WorkerService;

public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly Crontab _crontab;

public Worker(ILogger<Worker> logger)
{
_logger = logger;
_crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);
await taskFactory.StartNew(async () =>
{
// 你的业务代码写到这里面

_logger.LogInformation("Worker running at: {time}", DateTime.Now);

await Task.CompletedTask;
}, stoppingToken);

await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.Now), stoppingToken);
}
}
}

26.2.7 Crontab 对象属性和方法

// 实例属性
var format = crontab.Format; // 获取当前格式化配置

// 静态属性
var secondly = Crontab.Secondly; // 每秒 .0000000
var minutely = Crontab.Minutely; // 每分钟 00
var hourly = Crontab.Hourly; // 每小时 00:00
var daily = Crontab.Daily; // 每天 00:00:00
var monthly = Crontab.Monthly; // 每月 1 号 00:00:00
var weekly = Crontab.Weekly; // 每周日 00:00:00
var yearly = Crontab.Yearly; // 每年 1 月 1 号 00:00:00

// 实例方法
// 获取下一个执行时间
var nextOccurrence = crontab.GetNextOccurrence(起始时间);
var nextOccurrence = crontab.GetNewDbContext(起始时间, 结束时间);
// 获取特定时间所有执行执行时间
var nextOccurrences = crontab.GetNextOccurrences(起始时间, 结束时间);
// 获取当前时间和下一个发生时间相差毫秒数
var sleepMilliseconds = crontab.GetSleepMilliseconds(起始时间);
// 将 crontab 对象转换成 cron 表达式
var expression = crontab.ToString();

// 静态方法
// 解析表达式
var crontab = Crontab.Parse("表达式", CronStringFormat.Default); // 转换表达式为 Crontab 对象
var crontab = Crontab.TryParse("表达式", CronStringFormat.Default); // 转换表达式为 Crontab 对象

26.2.8 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dapper/index.html b/handbook/build/docs/dapper/index.html new file mode 100644 index 00000000000..823ef54c2a3 --- /dev/null +++ b/handbook/build/docs/dapper/index.html @@ -0,0 +1,17 @@ + + + + + +10.2 Dapper 集成 | Furion + + + + + +
+

10.2 Dapper 集成

温馨提醒

Furion 包中默认集成了 EFCore如果不使用 EFCore,可安装纯净版 Furion.Pure 代替 Furion

10.2.1 关于 Dapper

Dapper 是 .NET/C# 平台非常优秀的 微型 ORM 框架,主要是为 ADO.NET 操作对象提供拓展能力,推崇原生 sql 操作法。

Dapper 官方仓库地址:https://github.com/StackExchange/Dapper

10.2.2 如何集成

Furion 框架中,已经推出 Dapper 拓展包 Furion.Extras.DatabaseAccessor.Dapper

10.2.2.1 注册 Dapper 服务

使用非常简单,只需要在 Startup.cs 中添加 services.AddDapper(connStr, SqlProvider) 即可。如:

services.AddDapper("Data Source=./Furion.db", SqlProvider.Sqlite);

// 更多配置,仅 v3.4.3+ 版本有效
servers.AddDapper("Data Source=./Furion.db", SqlProvider.Sqlite, () => {
DefaultTypeMap.MatchNamesWithUnderscores = true;
})

10.2.2.2 安装对应的数据库提供器

  • SqlServerMicrosoft.Data.SqlClient
  • SqliteMicrosoft.Data.Sqlite
  • MySqlMySql.Data
  • NpgsqlNpgsql
  • OracleOracle.ManagedDataAccess.Core
  • FirebirdFirebirdSql.Data.FirebirdClient
安装拓展包位置

Furion 框架中,推荐将拓展包 Furion.Extras.DatabaseAccessor.Dapper 安装到 Furion.Core 层中。

10.2.3 基本使用

在使用之前,我们可以通过构造函数注入 IDapperRepositoryIDapperRepository<TEntity> 接口,如:

  • 非泛型版本
private readonly IDapperRepository _dapperRepository;
public PersonService(IDapperRepository dapperRepository)
{
_dapperRepository = dapperRepository;
}
  • 泛型版本
private readonly IDapperRepository<Person> _personRepository;
public PersonService(IDapperRepository<Person> personRepository)
{
_personRepository = personRepository;
}

10.2.3.1 sql 操作

var data = _dapperRepository.Query("select * from person");
var data = await _dapperRepository.QueryAsync("select * from person");

var data = _dapperRepository.Query<Person>("select * from person");

var guid = Guid.NewGuid();
var dog = _dapperRepository.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });
var count = _dapperRepository.Execute(@"insert MyTable(colA, colB) values (@a, @b)",
new[] { new { a=1, b=1 }, new { a=2, b=2 }, new { a=3, b=3 } }
);

var user = _dapperRepository.Query<User>("spGetUser", new {Id = 1},
commandType: CommandType.StoredProcedure).SingleOrDefault();

用法和官方一致,此处不再举更多例子。

10.2.3.2 <TEntity> 操作

Furion 框架提供了 IDapperRepositoryIDapperRepository<TEntity> 两个操作仓储,后者继承前者。使用如下:

var person = personRepository.Get(1);
var persons = personRepository.GetAll();

var effects = personRepository.Insert(person);
var effects = personRepository.Update(person);
var effects = personRepository.Delete(person);

var effects = personRepository.Insert(persons); // 插入多个
var effects = personRepository.Update(persons); // 更新多个
var effects = personRepository.Delete(persons); // 删除多个

var effects = await personRepository.InsertAsync(person);

10.2.4 高级使用

IDapperRepositoryIDapperRepository<TEntity> 仓储提供了 ContextDynamicContext 属性,该属性返回 IDbConnection 对象。

拿到该对象后,我们就可以操作 Dapper 提供的所有操作了,如:

10.2.4.1 查询一对一

var sql =
@"select * from #Posts p
left join #Users u on u.Id = p.OwnerId
Order by p.Id";

var data = dapperRepository.Context.Query<Post, User, Post>(sql, (post, user) => { post.Owner = user; return post;});
var post = data.First();

10.2.4.2 查询多个结果

var sql =
@"
select * from Customers where CustomerId = @id
select * from Orders where CustomerId = @id
select * from Returns where CustomerId = @id";

using (var multi = dapperRepository.Context.QueryMultiple(sql, new {id=selectedId}))
{
var customer = multi.Read<Customer>().Single();
var orders = multi.Read<Order>().ToList();
var returns = multi.Read<Return>().ToList();
// ...
}

10.2.4.3 更多操作

var shapes = new List<IShape>();
using (var reader = dapperRepository.Context.ExecuteReader("select * from Shapes"))
{
var circleParser = reader.GetRowParser<IShape>(typeof(Circle));
var squareParser = reader.GetRowParser<IShape>(typeof(Square));
var triangleParser = reader.GetRowParser<IShape>(typeof(Triangle));

var typeColumnIndex = reader.GetOrdinal("Type");

while (reader.Read())
{
IShape shape;
var type = (ShapeType)reader.GetInt32(typeColumnIndex);
switch (type)
{
case ShapeType.Circle:
shape = circleParser(reader);
break;
case ShapeType.Square:
shape = squareParser(reader);
break;
case ShapeType.Triangle:
shape = triangleParser(reader);
break;
default:
throw new NotImplementedException();
}

shapes.Add(shape);
}
}

10.2.5 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 Dapper 知识可查阅 Dapper 官网

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/data-validation/index.html b/handbook/build/docs/data-validation/index.html new file mode 100644 index 00000000000..73449d87907 --- /dev/null +++ b/handbook/build/docs/data-validation/index.html @@ -0,0 +1,17 @@ + + + + + +8. 数据校验 | Furion + + + + + +
+

8. 数据校验

8.1 关于数据校验

数据校验字面上的意思就是对使用者提交过来的数据进行合法性验证。在一套完善的应用系统中,数据有效性校验是必不可少的业务处理第一道关卡。

8.2 数据校验的好处

  • 过滤不安全数据,提高系统的安全性
  • 减少不必要的业务异常处理,提高系统的响应速度
  • 大大提高系统稳定性
  • 大数据并发时起着一定的缓冲作用

8.3 数据校验方式

  • 传统方式,在业务代码之前手动验证
  • Mvc 特性方式,Mvc 内置的 DataAnnotations 方式
  • 推荐方式Furion 框架内置的 DataValidation 验证
  • 其他方式,使用第三方验证库,如 FluentValidation

8.3.1 传统方式

在很多老项目中,我们经常看到这样的代码:

public bool Insert(Person person)
{
// 验证参数
if(string.IsNullOrEmty(person.Name))
{
throw new System.Exception("名字不能为空");
}

if(person.Age < 18)
{
throw new System.Exception("年龄不能小于 18 岁");
}

if(!person.Password.Equals(person.ConfirmPassword)
{
throw new System.Exception("两次密码不一致");
}

// 业务代码
_repository.Insert(person.Adapt<PersonEntity>());

// ...
}

从上面的代码看起来,似乎没有什么不妥,但是从一个程序可维护性来说,这是一个糟糕的代码,因为该业务代码中包含了太多与业务无关的数据验证

试想一下,如果这个 Person 有 几十个参数都需要验证呢?可想而知,这是一个庞大的业务代码。

再者,如果其他地方也需要用到这个 Person 类验证呢?那代码好比老鼠啃过的面包屑一样,到处都是。

如此得知,这样的方式是极其不推荐的,不但污染了业务代码,也破坏了业务职责单一性原理,也让验证逻辑无法实现通用,后续维护难度大大升级

8.3.2 Mvc 特性方式

ASP.NET Core 中,微软为我们提供了全新的 特性 验证方式,可通过对对象贴特性实现数据验证。这种方式有效的将数据校验和业务代码剥离开来,而且容易使用和拓展。

  • 在模型中验证
using System.ComponentModel.DataAnnotations;

namespace Hoa.Application.Authorization.Dtos
{
public class SignInInput
{
[Required] // 必填验证
[MinLength(4)] // 最小长度验证
public string Account { get; set; }

[Required] // 必填验证
[MaxLength(32)] // 最大长度验证
public string Password { get; set; }
}
}
  • 在参数中验证
public void CheckMethodParameterValid(
[Required] // 必填验证
[MinLength(4)] // 最小长度验证
string name,

int age,

[Required] // 必填验证
[RegularExpression("[a-zA-Z0-9_]{8,30}") // 正则表达式验证
string password,

[Required] // 必填验证
[RegularExpression("[a-zA-Z0-9_]{8,30}") // 正则表达式验证
string confirmPassword
)
{
// TODO
}
小提醒

如果函数的参数大于或等于 3 个,建议抽离出模型类,也就是不建议上面的方式。

  • Mvc 内置特性

    • [ValidateNever]:指示熟悉或参数从验证中排除
    • [CreditCard]:信用卡格式验证
    • [Compare]:验证两个属性值是否匹配
    • [EmailAddress]:验证电子邮箱
    • [Phone]:验证电话号码
    • [Range]:验证指定范围
    • [RegularExpression]:验证属性值是否匹配正则表达式
    • [Required]:验证不为 null
    • [StringLength]:验证字符串长度
    • [URL]:验证是否有效的 URL 格式
    • [Remote]:调用远程服务地址进行客户端验证
Mvc 内置特性

想了解 Mvc 内置特性列表可查看官方文档 ASP.NET Core - 模型验证

  • 自定义特性验证
public class ClassicMovieAttribute : ValidationAttribute
{
public ClassicMovieAttribute(int year)
{
Year = year;
}

public int Year { get; }

public string GetErrorMessage() =>
$"Classic movies must have a release year no later than {Year}.";

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var movie = (Movie)validationContext.ObjectInstance;
var releaseYear = ((DateTime)value).Year;

if (movie.Genre == Genre.Classic && releaseYear > Year)
{
return new ValidationResult(GetErrorMessage());
}

return ValidationResult.Success;
}
}
  • IValidatableObject 复杂验证
using System.Collections.Generic;

public class DtoModel : IValidatableObject
{
[Required]
[StringLength(100)]
public string Title { get; set; }

// 你的验证逻辑
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
// 还可以解析服务
var service = validationContext.GetService(typeof(类型));

if (你的逻辑代码)
{
yield return new ValidationResult(
"错误消息"
,new[] { nameof(Title) } // 验证失败的属性
);
}
}
}

Mvc 特性方式极大的将业务逻辑和验证进行了剥离和解耦,而且还能实现自定义复杂验证。

但是 Mvc 特性验证方式有几个明显的缺点

  • 只能在 控制器 中的 Action(动作方法)中使用
  • 无法在任意类、任意方法中使用
  • 内置的验证类型非常有限,且不易拓展
  • 不支持验证消息后期配置

所以,Furion 提供了新的验证引擎 DataValidation,在完全兼容 Mvc 内置验证的同时提供了大量常见验证、复杂验证、自定义验证等能力。

8.4 DataValidation 验证 🤗

DataValidationFurion 框架提供了全新的验证方式,完全兼容 Mvc 内置验证,并且赋予了超能。

8.4.1 DataValidation 优点

  • 完全兼容 Mvc 内置验证引擎
  • 内置常见验证类型及可自定义验证类型功能
  • 提供全局对象拓展验证方式
  • 支持验证消息后期配置,支持实时更新
  • 支持在任何类,任何方法、任何位置实现手动验证、特性方式验证等
  • 支持设置验证结果模型

8.5 DataValidation 使用

备注

.AddDataValidation() 默认已经集成在 AddInject() 中了,无需再次注册。也就是 8.5.1 章节可不配置。

8.5.1 注册验证服务

Furion.Web.Core\FurWebCoreStartup.cs
using Microsoft.Extensions.DependencyInjection;

namespace Furion.Web.Core
{
[AppStartup(800)]
public sealed class FurWebCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddDataValidation();
}
}
}
特别注意

.AddDataValidation() 需在 services.AddControllers() 之后注册。

8.5.2 兼容 Mvc 特性验证

using System.ComponentModel.DataAnnotations;

namespace Furion.Application
{
public class TestDto
{
[Range(10, 20, ErrorMessage = "Id 只能在 10-20 区间取值")]
public int Id { get; set; }

[Required(ErrorMessage = "必填"), MinLength(3, ErrorMessage = "字符串长度不能少于3位")]
public string Name { get; set; }
}
}

如下图所示:

8.5.3 兼容 Mvc 复杂验证

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace Furion.Application
{
public class TestDto : IValidatableObject
{
[Range(10, 20, ErrorMessage = "Id 只能在 10-20 区间取值")]
public int Id { get; set; }

[Required(ErrorMessage = "必填"), MinLength(3, ErrorMessage = "字符串长度不能少于3位")]
public string Name { get; set; }

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
// 还可以解析服务
var service = validationContext.GetService(typeof(类型));

if (Name.StartsWith("Furion"))
{
yield return new ValidationResult(
"不能以 Furion 开头"
, new[] { nameof(Name) }
);
}
}
}
}

如下图所示:

8.6 手动验证

8.6.1 验证模型

using Furion.DataValidation;
using Furion.DynamicApiController;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
[NonValidation] // 跳过全局验证
public DataValidationResult Post(TestDto testDto)
{
return testDto.TryValidate();
}
}
}

如下图所示:

note

支持 Mvc 内置的特性验证、属性验证及复杂的 IValidatableObject 验证。

8.6.2 TryValidateValidate

Furion 提供了 TryValidate()Validate() 两个验证拓展方法,唯一的区别就是后者验证失败将自动抛出异常消息。

8.6.3 ValidationTypes 常见验证

Furion 内置了很多常用类型的数据验证,包括:

  • Numeric:数值类型
  • PositiveNumber:正数类型
  • NegativeNumber:负数类型
  • Integer:整数类型
  • Money:金钱类型
  • Date:日期类型
  • Time:时间类型
  • IDCard:身份证类型
  • PostCode:邮编类型
  • PhoneNumber:手机号类型
  • Telephone:固话类型
  • PhoneOrTelNumber:手机或固话类型
  • EmailAddress:邮件地址类型
  • Url:网址类型
  • Color:颜色值类型
  • Chinese:中文类型
  • IPv4:IPv4 地址类型
  • IPv6:IPv6 地址类型
  • Age:年龄类型
  • ChineseName:中文名类型
  • EnglishName:英文名类型
  • Capital:纯大写英文类型
  • Lowercase:纯小写英文类型
  • Ascii:Ascii 类型
  • Md5:Md5 字符串类型
  • Zip:压缩包格式类型
  • Image:图片格式类型
  • Document:文档格式类型
  • MP3:Mp3 格式类型
  • Flash:Flash 格式类型
  • Video:视频文件格式类型
  • HtmlHtml 标签格式

使用示例

// 验证中文
"我叫 MonK".TryValidate(ValidationTypes.Chinese); // => false

// 验证数值
2.TryValidate(ValidationTypes.Numeric); // => true

// 验证整数
true.TryValidate(ValidationTypes.Integer); // => false

// 验证邮箱
"monksoul@outlook.com".TryValidate(ValidationTypes.EmailAddress); // => true

// 验证负数
2.0m.TryValidate(ValidationTypes.NegativeNumber); // => false

// 自定义正则表达式验证
"Furion".TryValidate("/^Furion$"); // => true
小知识

可通过设置 TryValidate([ValidationPattern], params object[] validationTypes) 方法的 ValidationPattern 参数配置验证逻辑,如:同时成立只要一个成立 即可验证通过

8.6.4 [DataValidation] 特性

Furion 还提供了 [DataValidation] 特性方便在模型参数中使用 ValidationTypes 常见验证或自定义验证。

using Furion.DataValidation;

namespace Furion.Application
{
public class TestDto
{
[DataValidation(ValidationTypes.Integer)]
public int Id { get; set; }

[DataValidation(ValidationTypes.Numeric, ValidationTypes.Integer)]
public int Cost { get; set; }

[DataValidation(ValidationPattern.AtLeastOne, ValidationTypes.Chinese, ValidationTypes.Date)]
public string Name { get; set; }

// 可以和Mvc特性共存
[Required, DataValidation(ValidationTypes.Age)]
public int Age { get; set; }

[DataValidation(ValidationTypes.IDCard, ErrorMessage = "自定义身份证提示消息")]
public string IDCard { get; set; }
}
}

[DataValidation] 特性具备 ValidationAttribute 特性的所有配置以外还提供了以下配置:

  • ValidationTypes:验证类型,Enum[] 类型,
  • ValidationPattern:验证逻辑,ValidationPattern 类型,可选 AllOfThem(全部验证通过)AtleastOne(至少一个验证通过)
  • AllowNullValue:是否允许空值,bool 类型,默认 false
  • AllowEmptyStrings:是否允许空字符串,bool 类型,默认 false

8.6.5 [ModelBinder] 特性

默认情况下,验证失败信息会根据属性名进行序列化,但是如果属性序列化自定义了 [JsonPropertyName] 特性,那么验证失败的消息就不匹配了,这时我们需要添加 [ModelBinder(Name = "序列化对应名字")] 进行纠正。如下图所示:

[JsonPropertyName("phone_number"), ModelBinder(Name = "phone_number")]
public string PhoneNumber { get; set; }

8.7 [NonValidation] 跳过验证

Furion 框架提供了对象模型跳过验证特性 [NonValidation],支持在 控制器动作方法 中使用。

一旦贴了此特性,那么将不会执行验证操作。

note

[NonValidation] 只对对象类型有效,值类型无效。

8.8 高级自定义操作

8.8.1 自定义 ValidationTypes 类型

除了 Furion 内置的验证类型以外,Furion 还提供了非常灵活的自定义验证类型机制。

实现自定义验证类型必须遵循以下配置:

  • 验证类型必须是公开且是 Enum 枚举类型
  • 枚举类型必须贴有 [ValidationType] 特性
  • 枚举中每一项必须贴有 [ValidationItemMetadata] 特性

using Furion.DataValidation;
using System.Text.RegularExpressions;

namespace Furion.Application
{
[ValidationType]
public enum MyValidationTypes
{
/// <summary>
/// 强密码类型
/// </summary>
[ValidationItemMetadata(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$", "必须须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间")]
StrongPassword,

/// <summary>
/// 以 Furion 字符串开头,忽略大小写
/// </summary>
[ValidationItemMetadata(@"^(furion).*", "默认提示:必须以Fur字符串开头,忽略大小写", RegexOptions.IgnoreCase)]
StartWithFurString
}
}
小知识

Any-Rule 是国人记录的正则表达式大全,如需查找正则表达式可查阅 https://any86.github.io/any-rule/

使用

  • 手动使用
"q1w2e3".TryValidate(MyValidationTypes.StrongPassword); // => false

"furos".TryValidate(MyValidationTypes.StartWithFurString); // => true
  • [DataValidation] 中使用
[DataValidation(MyValidationTypes.StrongPassword)]
public string Password { get; set; }
  • 多个自定义类型混用
"Q1w2e3r4t5!*".TryValidate(MyValidationTypes.StrongPassword, ValidationTypes.EmailAddress); // => true
特别注意

自定义的验证类型也要保证名称全局唯一,也就是多个验证类型不能出现一样的名字。

8.8.2 自定义 ValidationTypes 失败消息

Furion 内置的 ValidationTypes 已有默认的失败消息:

  • NumericThe value is not a numeric type.
  • PositiveNumberThe value is not a positive number type.
  • NegativeNumberThe value is not a negative number type.
  • IntegerThe value is not a integer type.
  • MoneyThe value is not a money type.
  • DateThe value is not a date type.
  • TimeThe value is not a time type.
  • IDCardThe value is not a idcard type.
  • PostCodeThe value is not a postcode type.
  • PhoneNumberThe value is not a phone number type.
  • TelephoneThe value is not a telephone type.
  • PhoneOrTelNumberThe value is not a phone number or telephone type.
  • EmailAddressThe value is not a email address type.
  • UrlThe value is not a url address type.
  • ColorThe value is not a color type.
  • ChineseThe value is not a chinese type.
  • IPv4The value is not a IPv4 type.
  • IPv6The value is not a IPv6 type.
  • AgeThe value is not a age type.
  • ChineseNameThe value is not a chinese name type.
  • EnglishNameThe value is not a english name type.
  • CapitalThe value is not a capital type.
  • LowercaseThe value is not a lowercase type.
  • AsciiThe value is not a ascii type.
  • Md5The value is not a md5 type.
  • ZipThe value is not a zip type.
  • ImageThe value is not a image type.
  • DocumentThe value is not a document type.
  • MP3The value is not a mp3 type.
  • FlashThe value is not a flash type.
  • VideoThe value is not a video type.
  • HtmlThe value is not a html type.

我们可以通过创建继承 IValidationMessageTypeProvider 验证消息提供器类型,或通过 appsettings.json 配置。

  • [ValidationMessageType] 方式
using Furion.DataValidation;

namespace Furion.Application
{
[ValidationMessageType]
public enum MyValidationMessageType
{
[ValidationMessage("必须是数值类型")]
Numeric,

[ValidationMessage("必须是正数")]
PositiveNumber,

// 修改自定义类型验证失败消息
[ValidationMessage("密码太简单了")]
StrongPassword,

[ValidationMessage("必须以 Furion 开头")]
StartWithFurString
}
}
小知识

除了贴 [ValidationMessageType] 特性外,Furion 框架还提供了 IValidationMessageTypeProvider 方式查找验证消息类型,如下图所示:

using Furion.DataValidation;
using System;

namespace Furion.Application
{
public class MyValidationTypeMessageProvider : IValidationMessageTypeProvider
{
public Type[] Definitions => new[]
{
typeof(MyValidationMessageType),
typeof(MyValidationMessageType2)
};
}
}

注册验证消息提供器

Furion.Web.Core\FurWebCoreStartup.cs
using Microsoft.Extensions.DependencyInjection;

namespace Furion.Web.Core
{
[AppStartup(800)]
public sealed class FurWebCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddDataValidation<MyValidationTypeMessageProvider>();
}
}
}

如下图所示:

  • appsettings.json 方式
Furion.Web.Entry/appsettings.json
{
"ValidationTypeMessageSettings": {
"Definitions": [
["Numeric", "必须是数值类型"],

["StrongPassword", "密码太简单了!!!"]
]
}
}
info

appsettings.json 中相同的 Key 会覆盖 IValidationMessageTypeProvider 提供相同 Key 的值。

错误消息查找优先级

DefaultErrorMessage -> IValidationMessageTypeProvider -> appsettings.json (低 -> 高)

8.9 模型验证范围

Furion 提供多种模型验证范围设置:

  • 全局验证(默认)
  • [NonValidation] 跳过验证
  • [TypeFilter(typeof(DataValidationFilter))] 局部验证
  • [ApiController] 控制器范围验证

8.9.1 全局验证

默认情况下,通过 .AddDataValidation() 注册数据验证服务已经启用了全局验证,如若不想启用全局验证,则传入 false 即可,如:.AddDataValidation(false)

8.9.2 [NonValidation] 跳过验证

可通过 [NonValidation] 贴在 控制器动作方法 中跳过全局验证或不需要验证

8.9.3 [TypeFilter(typeof(DataValidationFilter))] 局部验证

我们也可以无需注册 .AddDataValidation() 服务,直接在 动作方法 上贴 [TypeFilter(typeof(DataValidationFilter))] 可启用局部验证。如:

using Furion.DataValidation;
using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
[TypeFilter(typeof(DataValidationFilter))]
public TestDto Post(TestDto testDto)
{
return testDto;
}
}
}

8.9.4 [ApiController] 控制器范围验证

[ApiController]Mvc 提供的控制器范围(含所有动作方法)的验证。

using Microsoft.AspNetCore.Mvc;

namespace Furion.Web.Entry.Controllers
{
[ApiController]
public class MvcController : Controller
{
public IActionResult Index()
{
return View();
}
}
}

8.10 MiniProfiler 查看

如下图所示:

8.11 多语言支持

参见 【全球化和本地化(多语言)】 章节

8.12 集成 FluentValidation 第三方校验

Furion 内置的验证已经可以满足绝大多数校验情况,但是对于 场景 验证目前暂未支持。这里推荐集成 FluentValidation 第三方校验组件。

8.12.1 安装 FluentValidation.AspNetCore 拓展包

dotnet add package FluentValidation.AspNetCore

8.12.2 在 Startup.cs 中注册

services.AddControllers()
.AddFluentValidation(fv => {
fv.RegisterValidatorsFromAssemblies(App.Assemblies);
});

8.12.3 使用例子

public class Person {
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
}

public class PersonValidator : AbstractValidator<Person> {
public PersonValidator() {
RuleFor(x => x.Id).NotNull();
RuleFor(x => x.Name).Length(0, 10);
RuleFor(x => x.Email).EmailAddress();
RuleFor(x => x.Age).InclusiveBetween(18, 60);
}
}

在控制器中使用无需手动调用 ModelState.IsValid 进行判断,Furion 会自动执行该操作。

如需了解更多 FluentValidation 知识可查阅官方文档:https://fluentvalidation.net/

8.13 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-Interceptor/index.html b/handbook/build/docs/dbcontext-Interceptor/index.html new file mode 100644 index 00000000000..6ef4e841305 --- /dev/null +++ b/handbook/build/docs/dbcontext-Interceptor/index.html @@ -0,0 +1,17 @@ + + + + + +9.24 数据库操作拦截器 | Furion + + + + + +
+

9.24 数据库操作拦截器

9.24.1 数据库拦截器

Furion 框架提供四种数据库操作拦截器,可以通过拦截器动态修改数据库连接字符串,动态修改 sql,动态更改参数等操作。

Furion 支持这四种拦截器:

  • DbConnectionInterceptor:数据库连接拦截器
  • DbCommandInterceptor:数据库执行 Sql 拦截器
  • SaveChangesInterceptor:提交到数据库拦截器
  • 在数据库上下文中重写 SavedChangesEvent 相关事件

9.24.2 支持拦截类型

9.24.2.1 DbConnectionInterceptor

using Microsoft.EntityFrameworkCore.Diagnostics;
using System.Data.Common;
using System.Threading;
using System.Threading.Tasks;

namespace Furion.DatabaseAccessor.Interceptors
{
public class SqlConnectionInterceptor : DbConnectionInterceptor
{
// 数据库连接之前
public override InterceptionResult ConnectionOpening(DbConnection connection, ConnectionEventData eventData, InterceptionResult result)
{
return base.ConnectionOpening(connection, eventData, result);
}

// 数据库连接之前(异步)
public override ValueTask<InterceptionResult> ConnectionOpeningAsync(DbConnection connection, ConnectionEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default)
{
return base.ConnectionOpeningAsync(connection, eventData, result, cancellationToken);
}

// 数据库连接成功
public override void ConnectionOpened(DbConnection connection, ConnectionEndEventData eventData)
{
base.ConnectionOpened(connection, eventData);
}

// 数据库连接成功(异步)
public override Task ConnectionOpenedAsync(DbConnection connection, ConnectionEndEventData eventData, CancellationToken cancellationToken = default)
{
return base.ConnectionOpenedAsync(connection, eventData, cancellationToken);
}

// 数据库连接关闭之前
public override InterceptionResult ConnectionClosing(DbConnection connection, ConnectionEventData eventData, InterceptionResult result)
{
return base.ConnectionClosing(connection, eventData, result);
}

// 数据库连接关闭之前(异步)
public override ValueTask<InterceptionResult> ConnectionClosingAsync(DbConnection connection, ConnectionEventData eventData, InterceptionResult result)
{
return base.ConnectionClosingAsync(connection, eventData, result);
}

// 数据库连接关闭成功
public override void ConnectionClosed(DbConnection connection, ConnectionEndEventData eventData)
{
base.ConnectionClosed(connection, eventData);
}

// 数据库连接关闭成功(异步)
public override Task ConnectionClosedAsync(DbConnection connection, ConnectionEndEventData eventData)
{
return base.ConnectionClosedAsync(connection, eventData);
}

// 数据库连接失败
public override void ConnectionFailed(DbConnection connection, ConnectionErrorEventData eventData)
{
base.ConnectionFailed(connection, eventData);
}

// 数据库连接失败(异步)
public override Task ConnectionFailedAsync(DbConnection connection, ConnectionErrorEventData eventData, CancellationToken cancellationToken = default)
{
return base.ConnectionFailedAsync(connection, eventData, cancellationToken);
}
}
}

9.24.2.2 DbCommandInterceptor

using Microsoft.EntityFrameworkCore.Diagnostics;
using System.Data.Common;
using System.Threading;
using System.Threading.Tasks;

namespace Furion.DatabaseAccessor
{
internal sealed class SqlCommandProfilerInterceptor : DbCommandInterceptor
{
// 创建命令对象之前
public override InterceptionResult<DbCommand> CommandCreating(CommandCorrelatedEventData eventData, InterceptionResult<DbCommand> result)
{
return base.CommandCreating(eventData, result);
}

// 创建命令对象之后
public override DbCommand CommandCreated(CommandEndEventData eventData, DbCommand result)
{
return base.CommandCreated(eventData, result);
}

// 创建命令对象失败
public override void CommandFailed(DbCommand command, CommandErrorEventData eventData)
{
base.CommandFailed(command, eventData);
}

// 创建命令对象失败(异步)
public override Task CommandFailedAsync(DbCommand command, CommandErrorEventData eventData, CancellationToken cancellationToken = default)
{
return base.CommandFailedAsync(command, eventData, cancellationToken);
}

// 读取数据之前
public override InterceptionResult<DbDataReader> ReaderExecuting(DbCommand command, CommandEventData eventData, InterceptionResult<DbDataReader> result)
{
return base.ReaderExecuting(command, eventData, result);
}

// 读取数据之前(异步)
public override ValueTask<InterceptionResult<DbDataReader>> ReaderExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult<DbDataReader> result, CancellationToken cancellationToken = default)
{
return base.ReaderExecutingAsync(command, eventData, result, cancellationToken);
}

// 读取数据之后
public override DbDataReader ReaderExecuted(DbCommand command, CommandExecutedEventData eventData, DbDataReader result)
{
return base.ReaderExecuted(command, eventData, result);
}

// 读取数据之后(异步)
public override ValueTask<DbDataReader> ReaderExecutedAsync(DbCommand command, CommandExecutedEventData eventData, DbDataReader result, CancellationToken cancellationToken = default)
{
return base.ReaderExecutedAsync(command, eventData, result, cancellationToken);
}

// DataReader 对象释放之前
public override InterceptionResult DataReaderDisposing(DbCommand command, DataReaderDisposingEventData eventData, InterceptionResult result)
{
return base.DataReaderDisposing(command, eventData, result);
}

// 无查询执行 sql 之前
public override InterceptionResult<int> NonQueryExecuting(DbCommand command, CommandEventData eventData, InterceptionResult<int> result)
{
return base.NonQueryExecuting(command, eventData, result);
}

// 无查询执行 sql 之前(异步)
public override ValueTask<InterceptionResult<int>> NonQueryExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult<int> result, CancellationToken cancellationToken = default)
{
return base.NonQueryExecutingAsync(command, eventData, result, cancellationToken);
}

// 无查询执行 sql 之后
public override int NonQueryExecuted(DbCommand command, CommandExecutedEventData eventData, int result)
{
return base.NonQueryExecuted(command, eventData, result);
}

// 无查询执行 sql 之后(异步)
public override ValueTask<int> NonQueryExecutedAsync(DbCommand command, CommandExecutedEventData eventData, int result, CancellationToken cancellationToken = default)
{
return base.NonQueryExecutedAsync(command, eventData, result, cancellationToken);
}

// 执行 sql 返回单行单列之前
public override InterceptionResult<object> ScalarExecuting(DbCommand command, CommandEventData eventData, InterceptionResult<object> result)
{
return base.ScalarExecuting(command, eventData, result);
}

// 执行 sql 返回单行单列之前(异步)
public override ValueTask<InterceptionResult<object>> ScalarExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult<object> result, CancellationToken cancellationToken = default)
{
return base.ScalarExecutingAsync(command, eventData, result, cancellationToken);
}

// 执行 sql 返回单行单列之后
public override object ScalarExecuted(DbCommand command, CommandExecutedEventData eventData, object result)
{
return base.ScalarExecuted(command, eventData, result);
}

// 执行 sql 返回单行单列之后(异步)
public override ValueTask<object> ScalarExecutedAsync(DbCommand command, CommandExecutedEventData eventData, object result, CancellationToken cancellationToken = default)
{
return base.ScalarExecutedAsync(command, eventData, result, cancellationToken);
}
}
}

9.24.2.3 SaveChangesInterceptor

using Microsoft.EntityFrameworkCore.Diagnostics;
using System.Threading;
using System.Threading.Tasks;

namespace Furion.DatabaseAccessor
{
public class DbContextSaveChangesInterceptor : SaveChangesInterceptor
{
// 提交到数据库之前
public override InterceptionResult<int> SavingChanges(DbContextEventData eventData, InterceptionResult<int> result)
{
return base.SavingChanges(eventData, result);
}

// 提交到数据库之前(异步)
public override ValueTask<InterceptionResult<int>> SavingChangesAsync(DbContextEventData eventData, InterceptionResult<int> result, CancellationToken cancellationToken = default)
{
return base.SavingChangesAsync(eventData, result, cancellationToken);
}

// 提交到数据库之后
public override int SavedChanges(SaveChangesCompletedEventData eventData, int result)
{
return base.SavedChanges(eventData, result);
}

// 提交到数据库之后(异步)
public override ValueTask<int> SavedChangesAsync(SaveChangesCompletedEventData eventData, int result, CancellationToken cancellationToken = default)
{
return base.SavedChangesAsync(eventData, result, cancellationToken);
}

// 提交数据库失败
public override void SaveChangesFailed(DbContextErrorEventData eventData)
{
base.SaveChangesFailed(eventData);
}

// 提交数据库失败(异步)
public override Task SaveChangesFailedAsync(DbContextErrorEventData eventData, CancellationToken cancellationToken = default)
{
return base.SaveChangesFailedAsync(eventData, cancellationToken);
}
}
}

9.24.2.4 SavedChangesEvent 拦截

Furion 框架中为所有 AppDbContext 子类都提供了三个可重写的方法,这三个方法分别由三个事件触发:

  • 提交更改之前 SavingChanges 事件:触发 void SavingChangesEvent(DbContextEventData eventData, InterceptionResult<int> result) 方法
  • 提交更改之后 SavedChanges 事件:触发 void SavedChangesEvent(SaveChangesCompletedEventData eventData, int result) 方法
  • 提交更改失败 SaveChangesFailed 事件:触发 void SaveChangesFailedEvent(DbContextErrorEventData eventData) 方法

通过这三个事件我们可以在数据库做增、删、改时候做拦截,比如设置创建时间、更新时间或其他默认操作

如自动添加租户 Id:

protected override void SavingChangesEvent(DbContextEventData eventData, InterceptionResult<int> result)
{
// 获取当前事件对应上下文
var dbContext = eventData.Context;

// 获取所有新增和更新的实体
var entities = dbContext.ChangeTracker.Entries()
.Where(u => u.State == EntityState.Added || u.State == EntityState.Modified);

foreach (var entity in entities)
{
switch (entity.State)
{
// 自动设置租户Id
case EntityState.Added:
entity.Property(nameof(Entity.TenantId)).CurrentValue = GetTenantId();
break;
// 排除租户Id
case EntityState.Modified:
entity.Property(nameof(Entity.TenantId)).IsModified = false;
break;
}
}
}

9.24.3 注册自定义筛选器

定义好过滤器之后,我们需要在数据库上下文中注册:

// services.AddDb 也是一样用法
services.AddDbPool<FurionDbContext>(interceptors: new IInterceptor[] {
new YourSqlConnectionProfilerInterceptor(),
new YourDbContextSaveChangesInterceptor(),
new YourSqlCommandProfilerInterceptor()
});

9.24.4 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-add-or-update/index.html b/handbook/build/docs/dbcontext-add-or-update/index.html new file mode 100644 index 00000000000..f197104e2ef --- /dev/null +++ b/handbook/build/docs/dbcontext-add-or-update/index.html @@ -0,0 +1,17 @@ + + + + + +9.7 新增或更新操作 | Furion + + + + + +
+

9.7 新增或更新操作

功能移除声明

以下内容在 Furion 2.5.1 + 版本中已移除。此操作让很多不了解 EFCore 的开发者产生了很大的误解,不知何时新增或何时更新,故移除此功能。

9.7.1 新增或更新(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.InsertOrUpdate(user);

// 示例二
user.InsertOrUpdate();

// ==== 异步操作 ====

// 示例一
await repository.InsertOrUpdateAsync(user);

// 示例二
await user.InsertOrUpdateAsync();

9.7.2 新增或更新(立即提交)

// ==== 同步操作 ====

// 示例一
repository.InsertOrUpdateNow(user);

// 示例二
user.InsertOrUpdateNow();

// ==== 异步操作 ====

// 示例一
await repository.InsertOrUpdateNowAsync(user);

// 示例二
await user.InsertOrUpdateNowAsync();

9.7.3 新增或更新部分列(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.InsertOrUpdateInclude(user, u=>u.Name, u=>u.Age);

// 示例二
repository.InsertOrUpdateInclude(user, "Age", "Name");

// 示例三
repository.InsertOrUpdateInclude(user, new[] { u=>u.Name, u=>u.Age});

// 示例四
repository.InsertOrUpdateInclude(user, new[] {"Age", "Name"});

// 示例五
user.InsertOrUpdateInclude(u=>u.Name, u=>u.Age);

// 示例六
user.InsertOrUpdateInclude("Age", "Name");

// 示例七
user.InsertOrUpdateInclude(new[] { u=>u.Name, u=>u.Age});

// 示例八
user.InsertOrUpdateInclude(new[] {"Age", "Name"});

// ==== 异步操作 ====

// 示例一
await repository.InsertOrUpdateIncludeAsync(user, u=>u.Name, u=>u.Age);

// 示例二
await repository.InsertOrUpdateIncludeAsync(user, "Age", "Name");

// 示例三
await repository.InsertOrUpdateIncludeAsync(user, new[] { u=>u.Name, u=>u.Age});

// 示例四
await repository.InsertOrUpdateIncludeAsync(user, new[] {"Age", "Name"});

// 示例五
await user.InsertOrUpdateIncludeAsync(u=>u.Name, u=>u.Age);

// 示例六
await user.InsertOrUpdateIncludeAsync("Age", "Name");

// 示例七
await user.InsertOrUpdateIncludeAsync(new[] { u=>u.Name, u=>u.Age});

// 示例八
await user.InsertOrUpdateIncludeAsync(new[] {"Age", "Name"});

9.7.4 新增或更新部分列(立即提交)

// ==== 同步操作 ====

// 示例一
repository.InsertOrUpdateIncludeNow(user, u=>u.Name, u=>u.Age);

// 示例二
repository.InsertOrUpdateIncludeNow(user, "Age", "Name");

// 示例三
repository.InsertOrUpdateIncludeNow(user, new[] { u=>u.Name, u=>u.Age});

// 示例四
repository.InsertOrUpdateIncludeNow(user, new[] {"Age", "Name"});

// 示例五
user.InsertOrUpdateIncludeNow(u=>u.Name, u=>u.Age);

// 示例六
user.InsertOrUpdateIncludeNow("Age", "Name");

// 示例七
user.InsertOrUpdateIncludeNow(new[] { u=>u.Name, u=>u.Age});

// 示例八
user.InsertOrUpdateIncludeNow(new[] {"Age", "Name"});

// ==== 异步操作 ====

// 示例一
await repository.InsertOrUpdateIncludeNowAsync(user, u=>u.Name, u=>u.Age);

// 示例二
await repository.InsertOrUpdateIncludeNowAsync(user, "Age", "Name");

// 示例三
await repository.InsertOrUpdateIncludeNowAsync(user, new[] { u=>u.Name, u=>u.Age});

// 示例四
await repository.InsertOrUpdateIncludeNowAsync(user, new[] {"Age", "Name"});

// 示例五
await user.InsertOrUpdateIncludeNowAsync(u=>u.Name, u=>u.Age);

// 示例六
await user.InsertOrUpdateIncludeNowAsync("Age", "Name");

// 示例七
await user.InsertOrUpdateIncludeNowAsync(new[] { u=>u.Name, u=>u.Age});

// 示例八
await user.InsertOrUpdateIncludeNowAsync(new[] {"Age", "Name"});

9.7.5 新增或更新排除特定列(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.InsertOrUpdateExclude(user, u=>u.Name, u=>u.Age);

// 示例二
repository.InsertOrUpdateExclude(user, "Age", "Name");

// 示例三
repository.InsertOrUpdateExclude(user, new[] { u=>u.Name, u=>u.Age});

// 示例四
repository.InsertOrUpdateExclude(user, new[] {"Age", "Name"});

// 示例五
user.InsertOrUpdateExclude(u=>u.Name, u=>u.Age);

// 示例六
user.InsertOrUpdateExclude("Age", "Name");

// 示例七
user.InsertOrUpdateExclude(new[] { u=>u.Name, u=>u.Age});

// 示例八
user.InsertOrUpdateExclude(new[] {"Age", "Name"});

// ==== 异步操作 ====

// 示例一
await repository.InsertOrUpdateExcludeAsync(user, u=>u.Name, u=>u.Age);

// 示例二
await repository.InsertOrUpdateExcludeAsync(user, "Age", "Name");

// 示例三
await repository.InsertOrUpdateExcludeAsync(user, new[] { u=>u.Name, u=>u.Age});

// 示例四
await repository.InsertOrUpdateExcludeAsync(user, new[] {"Age", "Name"});

// 示例五
await user.InsertOrUpdateExcludeAsync(u=>u.Name, u=>u.Age);

// 示例六
await user.InsertOrUpdateExcludeAsync("Age", "Name");

// 示例七
await user.InsertOrUpdateExcludeAsync(new[] { u=>u.Name, u=>u.Age});

// 示例八
await user.InsertOrUpdateExcludeAsync(new[] {"Age", "Name"});

9.7.6 新增或更新排除特定列(立即提交)

// ==== 同步操作 ====

// 示例一
repository.InsertOrUpdateExcludeNow(user, u=>u.Name, u=>u.Age);

// 示例二
repository.InsertOrUpdateExcludeNow(user, "Age", "Name");

// 示例三
repository.InsertOrUpdateExcludeNow(user, new[] { u=>u.Name, u=>u.Age});

// 示例四
repository.InsertOrUpdateExcludeNow(user, new[] {"Age", "Name"});

// 示例五
user.InsertOrUpdateExcludeNow(u=>u.Name, u=>u.Age);

// 示例六
user.InsertOrUpdateExcludeNow("Age", "Name");

// 示例七
user.InsertOrUpdateExcludeNow(new[] { u=>u.Name, u=>u.Age});

// 示例八
user.InsertOrUpdateExcludeNow(new[] {"Age", "Name"});

// ==== 异步操作 ====

// 示例一
await repository.InsertOrUpdateExcludeNowAsync(user, u=>u.Name, u=>u.Age);

// 示例二
await repository.InsertOrUpdateExcludeNowAsync(user, "Age", "Name");

// 示例三
await repository.InsertOrUpdateExcludeNowAsync(user, new[] { u=>u.Name, u=>u.Age});

// 示例四
await repository.InsertOrUpdateExcludeNowAsync(user, new[] {"Age", "Name"});

// 示例五
await user.InsertOrUpdateExcludeNowAsync(u=>u.Name, u=>u.Age);

// 示例六
await user.InsertOrUpdateExcludeNowAsync("Age", "Name");

// 示例七
await user.InsertOrUpdateExcludeNowAsync(new[] { u=>u.Name, u=>u.Age});

// 示例八
await user.InsertOrUpdateExcludeNowAsync(new[] {"Age", "Name"});

9.7.7 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-add/index.html b/handbook/build/docs/dbcontext-add/index.html new file mode 100644 index 00000000000..e509bf935f4 --- /dev/null +++ b/handbook/build/docs/dbcontext-add/index.html @@ -0,0 +1,17 @@ + + + + + +9.5 新增操作 | Furion + + + + + +
+

9.5 新增操作

Furion 框架提供非常多的语法糖进行数据库操作。

9.5.1 新增一条,无返回值

var user = new User { Name = "百小僧", Age = 27 };

// ==== 同步操作 ====

// 示例一
repository.Insert(user);

// 示例二
user.Insert();

// 示例三
repository.Entities.Add(user);

// 示例四
repository.ChangeEntityState(user, EntityState.Added);

// ==== 异步操作 ====

// 示例一
await repository.InsertAsync(user);

// 示例二
await user.InsertAsync();

// 示例三
await repository.Entities.AddAsync(user);

9.5.2 新增一条,返回最新数据

// ==== 同步操作 ====

// 示例一
var newEntity = repository.InsertNow(user);

// 示例三
var newEntity = user.InsertNow();

// ==== 异步操作 ====

// 示例二
var newEntity = await repository.InsertNowAsync(user); // 有三个重载

// 示例四
var newEntity = await user.InsertNowAsync(); // 有三个重载

9.5.3 新增多条(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.Insert(user, user2);

// 示例二
repository.Insert(new List<User> { user, user2 });

// 示例三
repository.Insert(new[] {user, user2 });

// ==== 异步操作 ====

// 示例一
await repository.InsertAsync(user, user2);

// 示例二
await repository.InsertAsync(new List<User> { user, user2 });

// 示例三
await repository.InsertAsync(new[] {user, user2 });

9.5.4 新增多条(立即提交)

// ==== 同步操作 ====

// 示例一
repository.InsertNow(user, user2);

// 示例二
repository.InsertNow(new List<User> { user, user2 });

// 示例三
repository.InsertNow(new[] {user, user2 });

// ==== 异步操作 ====

// 示例一
await repository.InsertNowAsync(user, user2);

// 示例二
await repository.InsertNowAsync(new List<User> { user, user2 });

// 示例三
await repository.InsertNowAsync(new[] {user, user2 });
小知识

所有带 Now 结尾的表示立即提交到数据库,也就是立即调用 SaveChangesSaveChangesAsync

9.5.5 忽略空值新增

默认情况下,EFCore 新增会插入全部列(除实体跟踪方式以外),有些时候我们希望 Null 值无需插入,这是我们只需要在更新时候配置 ignoreNullValues 参数即可,如:

repository.Insert(entity, ignoreNullValues: true);

注意:EFCore 还是会对 NULL 值列生成 SQL 语句。

也可以全局配置,在 AppDbContext 的派生类的构造函数中启用即可:

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class DefaultDbContext : AppDbContext<DefaultDbContext>
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
{
InsertOrUpdateIgnoreNullValues = true;
}
}
}

9.5.6 表带触发器异常解决

在某些情况下,数据库表存在触发器,这时候可能会出现下列异常:

Microsoft.EntityFrameworkCore.DbUpdateException:
Could not save changes because the target table has database triggers.
Please configure your entity type accordingly,
see https://aka.ms/efcore-docs-sqlserver-save-changes-and-triggers for more information.

这时我们只需要添加 HasTrigger 即可,如:

public void Configure(EntityTypeBuilder<YourEntity> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.ToTable(tb => tb.HasTrigger("TriggerName")); // 标记数据库表存在触发器,触发器名称可随意
}

相关 Issue https://gitee.com/dotnetchina/Furion/issues/I5S4EC

9.5.7 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-audit/index.html b/handbook/build/docs/dbcontext-audit/index.html new file mode 100644 index 00000000000..9ee537a0974 --- /dev/null +++ b/handbook/build/docs/dbcontext-audit/index.html @@ -0,0 +1,17 @@ + + + + + +9.22 审计日志 | Furion + + + + + +
+

9.22 审计日志

9.22.1 审计日志

在一个企业应用系统中,用户对系统所有的操作包括请求、数据库操作等等都应该记录起来,那么这些日志我们称为操作日志,也可以说审计日志。

通常来说,我们审计日志更多指的是数据库的操作记录

审计日志一般会记录以下三个操作:

  • 新增操作:记录某某人在某某时间对哪个表新增了什么数据
  • 更新操作:记录某某人在某某时间对哪个表的哪些数据做了更改,记录更改前的值和更改后的值
  • 删除操作:记录某某人在某某时间对哪个表删除了什么数据

9.22.2 关于 SaveChanges 事件

Furion 框架中为所有 AppDbContext 子类都提供了三个可重写的方法,这三个方法分别由三个事件触发:

  • 提交更改之前 SavingChanges 事件:触发 void SavingChangesEvent(DbContextEventData eventData, InterceptionResult<int> result) 方法
  • 提交更改之后 SavedChanges 事件:触发 void SavedChangesEvent(SaveChangesCompletedEventData eventData, int result) 方法
  • 提交更改失败 SaveChangesFailed 事件:触发 void SaveChangesFailedEvent(DbContextErrorEventData eventData) 方法

通过这三个事件我们就可以捕获所有更改的实体然后保存到数据库审计日志中。

9.22.3 如何实现

9.22.3.1 数据库审计日志

我们只需要在 AppDbContext 子类中重写 SavingChanges 事件对应方法即可:

using Furion.DatabaseAccessor;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using System;
using System.Linq;
using System.Security.AccessControl;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString")]
public class FurionDbContext : AppDbContext<FurionDbContext>
{
public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}

/// <summary>
/// 重写保存之前事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected override void SavingChangesEvent(DbContextEventData eventData, InterceptionResult<int> result)
{
// 获取当前事件对应上下文
var dbContext = eventData.Context;

// 强制重新检查一边实体更改信息
// dbContext.ChangeTracker.DetectChanges();

// 获取所有更改,删除,新增的实体,但排除审计实体(避免死循环)
var entities = dbContext.ChangeTracker.Entries()
.Where(u => u.Entity.GetType() != typeof(Audit) && (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added))
.ToList();

// 通过请求中获取当前操作人
var userId = App.GetService<IHttpContextAccessor>().HttpContext.Items["UserId"];

// 获取所有已更改的实体
foreach (var entity in entities)
{
// 获取实体类型
var entityType = entity.Entity.GetType();

// 获取所有实体有效属性,排除 [NotMapper] 属性
var props = entity.OriginalValues.Properties;

// 获取实体当前(现在)的值
var currentValues = entity.CurrentValues;

// 获取数据库中实体的值
var databaseValues = entity.GetDatabaseValues();

// 遍历所有属性
foreach (var prop in props)
{
// 获取属性名
var propName = prop.Name;

// 获取现在的实体值
var newValue = currentValues[propName];

object oldValue = null;
// 如果是新增数据,则 databaseValues 为空,所以需要判断一下
if (databaseValues != null)
{
oldValue = databaseValues[propName];
}

// 插入审计日志表,Audit 是你自定义的实体
dbContext.Set<Audit>().Add(new Audit
{
Table = entityType.Name, // 表名
Column = propName, // 更新的列
NewValue = newValue, // 新值
OldValue = oldValue, // 旧值
CreatedTime = DateTime.Now, // 操作时间
UserId = userId, // 操作人
Operate = entity.State.ToString() // 操作方式:新增、更新、删除
});
}
}
}
}
}
小知识

如果对性能有所要求,那么建议审计日志通过 日志组件 写入数据库,如通过 Nlog、Log4Net 这些等:

// 插入审计日志表
dbContext.Set<Audit>().Add(new Audit
{
Table = entityType.Name, // 表名
Column = propName, // 更新的列
newValue = newValue, // 新值
OldValue = oldValue, // 旧值
CreatedTime = DateTime.Now, // 操作时间
UserId = userId, // 操作人
Operate = entity.State.ToString() // 操作方式:新增、更新、删除
});

替换为:

logger.Information(JsonConvert.SerializeObject(new Audit
{
Table = entityType.Name, // 表名
Column = propName, // 更新的列
newValue = newValue, // 新值
OldValue = oldValue, // 旧值
CreatedTime = DateTime.Now, // 操作时间
UserId = userId, // 操作人
Operate = entity.State.ToString() // 操作方式:新增、更新、删除
}));

通过上面的例子,我们就可以对数据库所有的新增、更新、删除进行监控了。

9.22.3.2 执行 sql 审计日志

主要通过 DbCommandInterceptor 拦截实现,具体使用可查看 数据库拦截器 - DbCommandInterceptor,如:

using Microsoft.EntityFrameworkCore.Diagnostics;
using System.Data.Common;
using System.Threading;
using System.Threading.Tasks;

namespace Furion.Web.Core
{
/// <summary>
/// 执行 sql 审计
/// </summary>
public sealed class SqlCommandAuditInterceptor : DbCommandInterceptor
{
public override InterceptionResult<int> NonQueryExecuting(DbCommand command, CommandEventData eventData, InterceptionResult<int> result)
{
// 获取执行的 sql 语句
var sql = command.CommandText;

// 获取执行的 sql 类型,是 sql 语句,还是存储过程,还是其他
var type = command.CommandType;

// 获取 sql 传递的命令参数
var parameters = command.Parameters;

// 写日志~~~~

return base.NonQueryExecuting(command, eventData, result);
}

public override ValueTask<InterceptionResult<int>> NonQueryExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult<int> result, CancellationToken cancellationToken = default)
{
// 获取执行的 sql 语句
var sql = command.CommandText;

// 获取执行的 sql 类型,是 sql 语句,还是存储过程,还是其他
var type = command.CommandType;

// 获取 sql 传递的命令参数
var parameters = command.Parameters;

// 写日志~~~~

return base.NonQueryExecutingAsync(command, eventData, result, cancellationToken);
}

// 其他 override
}
}
  • 注册审计日志

只需要在注册数据库上下文中指定 interceptors 参数即可

// services.AddDb 一样
services.AddDbPool<FurionDbContext>(interceptors: new IInterceptor[] {
new SqlCommandAuditInterceptor()
});

9.22.3.3 请求审计日志

关于请求审计日志

如需实现请求审计日志可查阅 【5.4 请求审计日志章节

9.22.4 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-batch/index.html b/handbook/build/docs/dbcontext-batch/index.html new file mode 100644 index 00000000000..9d38abaa816 --- /dev/null +++ b/handbook/build/docs/dbcontext-batch/index.html @@ -0,0 +1,17 @@ + + + + + +9.9 批量操作 | Furion + + + + + +
+

9.9 批量操作

9.9.1 关于批量操作

Furion 框架中,默认只提供小数据(100 条 以内)批量数据操作,如果需要更大的数据批量处理,推荐使用第三方包 Zack.EFCore.Batch,支持和 Furion 无缝衔接。

9.9.2 Zack.EFCore.Batch 使用

9.9.2.1 安装对应的数据库 Nuget

  • MSSQLZack.EFCore.Batch.MSSQL
  • MySqlZack.EFCore.Batch.MySQL.Pomelo
  • NpgsqlZack.EFCore.Batch.Npgsql
  • OracleZack.EFCore.Batch.Oracle
  • SqliteZack.EFCore.Batch.Sqlite

9.9.2.2 注册并配置服务

services.AddDatabaseAccessor(options =>
{
options.AddDbPool<DefaultDbContext>(providerName: default, optionBuilder: (services, opt) => // 如果是 v3.7.11 之前,使用 opt =>
{
opt.UseBatchEF_Sqlite(); // SQlite 数据库包
});
});

9.9.2.3 基本使用

// 批量更新
await repository.Context.BatchUpdate<Book>()
.Set(b => b.Price, b => b.Price + 3)
.Set(b => b.Title, b => s)
.Set(b => b.AuthorName,b=>b.Title.Substring(3,2)+b.AuthorName.ToUpper())
.Set(b => b.PubTime, b => DateTime.Now)
.Where(b => b.Id > n || b.AuthorName.StartsWith("Zack"))
.ExecuteAsync();

// 批量删除
await repository.Context.DeleteRangeAsync<Book>(b => b.Price > n || b.AuthorName == "zack yang");

9.9.3 EFCore.BulkExtensions 使用

通过 Nuget 安装 EFCore.BulkExtensions 包即可。

9.9.3.1 常见批量操作

// 批量插入
repository.Context.BulkInsert(entitiesList);
repository.Context.BulkInsertAsync(entitiesList);

// 批量更新
repository.Context.BulkUpdate(entitiesList);
repository.Context.BulkUpdateAsync(entitiesList);

// 批量删除
repository.Context.BulkDelete(entitiesList);
repository.Context.BulkDeleteAsync(entitiesList);

// 批量插入或更新
repository.Context.BulkInsertOrUpdate(entitiesList);
repository.Context.BulkInsertOrUpdateAsync(entitiesList);

// 批量插入或更新或删除
repository.Context.BulkInsertOrUpdateOrDelete(entitiesList);
repository.Context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);

// 批量读取多个实体
repository.Context.BulkRead(entitiesList);
repository.Context.BulkReadAsync(entitiesList);

// 批量清空表(慎用!!!!!)
repository.Context.Truncate<Entity>();
repository.Context.TruncateAsync<Entity>();

9.9.3.2 查询后批量操作

// 根据条件批量删除
repository.Where(a => a.ItemId > 500).BatchDelete();
await repository.Where(a => a.ItemId > 500).BatchDeleteAsync();

// 根据条件批量更新
repository.Where(a => a.ItemId <= 500).BatchUpdate(a => new Item { Quantity = a.Quantity + 100 });
repository.Where(a => a.ItemId <= 500).BatchUpdate(new Item { Description = "Updated" });
await repository.Where(a => a.ItemId <= 500).BatchUpdateAsync(new Item { Description = "Updated" });

// 批量更新指定列
var updateColumns = new List<string> { nameof(Item.Quantity) };
var q = repository.Where(a => a.ItemId <= 500);
int affected = q.BatchUpdate(new Item { Description = "Updated" }, updateColumns);

9.9.3.3 批量操作性能

Operations\Rows100,000 EF100,000 EFBulk1,000,000 EFBulk
Insert38.98 s2.10 s17.99 s
Update109.25 s3.96 s31.45 s
Delete7.26 s2.04 s12.18 s
---------------------------------------------------------------
Together70.70 s5.88 s56.84 s

9.9.4 EFCore 7 内置批量操作

非微软支持数据库适配问题

如果使用的是非微软支持的数据库,如 OracleMySQLPostgreSQL 等,可能适配 EFCore 7 不及时会出现找不到方法异常。

https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-7.0/whatsnew#executeupdate-and-executedelete-bulk-updates

// 批量删除
await repository.Entities.ExecuteDeleteAsync();
await repository.Entities.Where(t => t.Text.Contains(".NET")).ExecuteDeleteAsync();
await repository.Entities.Where(t => t.Posts.All(e => e.PublishedOn.Year < 2022)).ExecuteDeleteAsync();

// 批量更新
await repository.Entities.ExecuteUpdateAsync(
s => s.SetProperty(b => b.Name, b => b.Name + " *Featured!*"));

await repository.Entities
.Where(p => p.PublishedOn.Year < 2022)
.ExecuteUpdateAsync(s => s
.SetProperty(b => b.Title, b => b.Title + " (" + b.PublishedOn.Year + ")")
.SetProperty(b => b.Content, b => b.Content + " ( This content was published in " + b.PublishedOn.Year + ")"));

await repository.Entities
.Where(t => t.Posts.All(e => e.PublishedOn.Year < 2022))
.ExecuteUpdateAsync(s => s.SetProperty(t => t.Text, t => t.Text + " (old)"));

9.9.5 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 EFCore.BulkExtensions 知识可查阅 EFCore.BulkExtensions 开源仓库

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-code-first/index.html b/handbook/build/docs/dbcontext-code-first/index.html new file mode 100644 index 00000000000..b7e4cf8ee4d --- /dev/null +++ b/handbook/build/docs/dbcontext-code-first/index.html @@ -0,0 +1,17 @@ + + + + + +9.20 模型生成数据库 | Furion + + + + + +
+

9.20 模型生成数据库

开始之前

Fur.Web.Entry 层需要安装 Microsoft.EntityFrameworkCore.Tools 包。

9.20.1 数据库开发方式

Furion 提供两种主要方法来 保持实体模型和数据库架构同步

至于我们应该选用哪个方法,请确定你是希望以实体模型为准还是以数据库为准:

  • 如果希望 以实体模型为准,请使用正向工程(Code First)。 对实体模型进行更改时,此方法会以增量方式将相应架构更改应用到数据库,以使数据库保持与实体模型兼容。

  • 如果希望 以数据库架构为准,请使用反向工程(Database First)。 使用此方法,可通过将数据库架构反向工程到实体模型来生成相应的实体类型。

本章节是 正向工程(Code First) 的相关内容。

9.20.2 操作指南

特别注意

Furion 框架默认数据迁移的程序集为:Furion.Database.Migrations,所以如果您改了程序集名称或通过 Nuget 方式安装的 Furion 包,则需要配置迁移程序集名称:

services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurionDbContext>(DbProvider.Sqlite);
}, "存放迁移文件的项目名称");

另外,如果应用中配置了多个数据库上下文,那么所有的 迁移命令 都需要指定 -Context 数据库上下文名称 参数。如:

Add-Migration v1.0.0 -Context FurionDbContext

9.20.2.1 创建实体模型 Person

using Furion.DatabaseAccessor;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace Furion.Core
{
public class Person : Entity
{
/// <summary>
/// 构造函数
/// </summary>
public Person()
{
CreatedTime = DateTime.Now;
IsDeleted = false;
}

/// <summary>
/// 姓名
/// </summary>
[MaxLength(32)]
public string Name { get; set; }

/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }

/// <summary>
/// 住址
/// </summary>
public string Address { get; set; }
}
}
实体约定

所有数据库实体必须直接或间接继承 IEntity 接口。

9.20.2.2 打开 程序包管理控制台

9.20.2.3 切换默认项目

程序包管理控制台 默认项目设置为 Furion.Database.Migrations

9.20.2.4 创建模型版本

Add-Migration v1.0.0
特别说明

v1.0.0 是此处数据库更改的版本号,可以写任何字符串,但推荐写版本号,每次 +1

最终命令如下:

PM> Add-Migration v1.0.0
Build started...
Build succeeded.
Microsoft.EntityFrameworkCore.Model.Validation[10400]
Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data, this mode should only be enabled during development.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 5.0.0-rc.1.20451.13 initialized 'FurionDbContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: SensitiveDataLoggingEnabled DetailedErrorsEnabled MaxPoolSize=100 MigrationsAssembly=Furion.Database.Migrations
To undo this action, use Remove-Migration.
PM>

生成成功后,Furion.Database.Migrations 项目下会新增 Migrations 文件夹(如果没有),同时本次的架构生成文件,如:

9.20.2.5 更新到数据库

Update-Database

执行该命令后,数据库就会自动根据模型生成对应的表。

小知识

如果 Update-Database 后面带字符串参数,则会自动还原数据库到指定版本,如:

Update-Database v0.0.3

将数据库还原到 v0.0.3 版本

9.20.3 更新模型

如果模型改变了,重复上面操作即可,如:

Add-Migration v1.0.1
Update-Database

9.20.4 导出 Sql

有些时候,我们没有直接更新数据库的权限,或者怕出问题,我们都会先生成 Sql 看看,这时候只需要通过 Script-Migration 导出即可,如:

Script-Migration

9.20.5 VS Code/Rider/任何IDE/操作系统 方式

9.20.5.1 安装 dotnet ef

dotnet tool install --global dotnet-ef --version 5.0.0-rc.2.20475.6

9.20.5.2 cd 目录

通过 VS Code 打开 .sln 所在的目录,如:framework

之后进入 Furion.Database.Migrations 目录

cd Furion.Database.Migrations

9.20.5.3 执行命令

dotnet ef migrations add v1.0.0 -s "../Furion.Web.Entry"
dotnet ef database update -s "../Furion.Web.Entry"

9.20.6 应用启动时自动生成数据库

Furion 框架建议大家使用命令方式操作数据库,完全不推荐自动化生成数据库,但是有些特殊情况下,有这个必要,故将此功能写出:

9.20.6.1 对已经生成 Migrations 文件情况

如果已经生成 Migrations 文件,那么可以直接在 Startup.cs 代码中实现程序启动时自动执行 update-database 命令,如:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// 判断开发环境!!!必须!!!!
if (env.IsDevelopment())
{
Scoped.Create((_, scope) =>
{
var context = scope.ServiceProvider.GetRequiredService<FurionDbContext>();
context.Database.Migrate();
});
}

// 其他代码
}

9.20.6.2 如果没有生成过 Migrations 文件情况

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// 判断开发环境!!!必须!!!!
if (env.IsDevelopment())
{
Scoped.Create((_, scope) =>
{
var context = scope.ServiceProvider.GetRequiredService<FurionDbContext>();
context.Database.EnsureCreated();
});
}

// 其他代码
}

如果需要在创建数据库之前先删除旧的,可先调用 context.Database.EnsureDeleted(); 代码。慎重!!!!!!!!!!!!

9.20.7 MySql.EntityFrameworkCore.NET 6.0.8+ 问题

.NET 6.0.8+ 版本,微软底层修改了 IDesignTimeServices 逻辑导致 MySql.EntityFrameworkCore 版本没有及时更新导致一下错误:

PM> Add-Migration v0.0.1
Build started...
Build succeeded.
Microsoft.EntityFrameworkCore.Model.Validation[10400]
Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data; this mode should only be enabled during development.
Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 6.0.8 initialized 'DefaultDbContext' using provider 'MySql.EntityFrameworkCore:6.0.4+MySQL8.0.30' with options: SensitiveDataLoggingEnabled DetailedErrorsEnabled MaxPoolSize=100 MigrationsAssembly=Furion.TestMS.Database.Migrations
System.InvalidOperationException: Unable to resolve service for type 'Microsoft.EntityFrameworkCore.Storage.TypeMappingSourceDependencies' while attempting to activate 'MySql.EntityFrameworkCore.Storage.Internal.MySQLTypeMappingSource'.
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateEnumerable(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType, String namespace)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType, String namespace)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_0.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.<Execute>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
Unable to resolve service for type 'Microsoft.EntityFrameworkCore.Storage.TypeMappingSourceDependencies' while attempting to activate 'MySql.EntityFrameworkCore.Storage.Internal.MySQLTypeMappingSource'.
PM>

解决办法也很简单,只需要在启动层添加 MysqlEntityFrameworkDesignTimeServices.cs 并写入以下内容即可:

using Microsoft.EntityFrameworkCore.Design;
using MySql.EntityFrameworkCore.Extensions;

namespace YourProject.Web.Entry;

public class MysqlEntityFrameworkDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
{
serviceCollection.AddEntityFrameworkMySQL();
new EntityFrameworkRelationalDesignServicesBuilder(serviceCollection)
.TryAddCoreServices();
}
}

相关 Issue 讨论:https://gitee.com/dotnetchina/Furion/issues/I5O5ER

9.20.8 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 正向工厂 知识可查阅 EF Core - 管理数据库架构 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-db-first/index.html b/handbook/build/docs/dbcontext-db-first/index.html new file mode 100644 index 00000000000..4b36b8736c6 --- /dev/null +++ b/handbook/build/docs/dbcontext-db-first/index.html @@ -0,0 +1,17 @@ + + + + + +9.19 数据库生成模型 | Furion + + + + + +
+

9.19 数据库生成模型

关于脚本

在阅读下面文档之前,必须把Furion 源码文件夹下的 tools/cli.ps1 文件拷贝到本地中。而且 Fur.Web.Entry 层需要安装 Microsoft.EntityFrameworkCore.Tools 包。

系统提示禁止运行脚本解决

如果出现 cli.ps1 无法运行的情况,如提示:“因为在此系统上禁止运行脚本”,只需要打开系统管理员 CMD/Powershell 执行:set-ExecutionPolicy RemoteSigned 命令并根据操作提示输入 A 即可。

之后重启 Visual Studio 工具。

9.19.1 数据库开发方式

Furion 提供两种主要方法来 保持实体模型和数据库架构同步

至于我们应该选用哪个方法,请确定你是希望以实体模型为准还是以数据库为准:

  • 如果希望 以实体模型为准,请使用正向工程(Code First)。 对实体模型进行更改时,此方法会以增量方式将相应架构更改应用到数据库,以使数据库保持与实体模型兼容。

  • 如果希望 以数据库架构为准,请使用反向工程(Database First)。 使用此方法,可通过将数据库架构反向工程到实体模型来生成相应的实体类型。

本章节是 反向工程(Database First) 的相关内容。

9.19.2 操作指南

操作之前注意事项

目前 Furion Tools 生成工具默认不支持任何数据库生成,所以如需生成特定数据库的代码,只需要在 Furion.EntityFrameworkCore.Core 安装对应的数据库包即可:

各个数据库的包可查阅:多数据库操作-数据库提供器对应包

另外,只有 SqlServer 数据库支持可视化 GUI 操作,其他的只能命令行操作。

9.19.2.1 打开 程序包管理控制台

注意:开始之前先把 Furion.Web.Entry 设为启动项目。

9.19.2.2 切换默认项目

程序包管理控制台 默认项目设置为 Furion.Core,如果您是其他名字,则切换对应即可。

9.19.2.3 输入 cli.ps1 命令

PM> Show-Command ../tools/cli.ps1
全命令方式(推荐)❤️

除了采用 Show-Command 方式以外,还可以直接执行命令,如:

&"./tools/cli.ps1" -DbProvider "Microsoft.EntityFrameworkCore.SqlServer" -CoreProject "XXX.Core" -EntryProject "XXX.Web.Entry" -ConnectionName "Default"
小提示

如果使用的是 SqlServer 数据库,则默认不需要指定 -DbProvider 参数。

如果不清楚当前运行环境的路径,可以输入 pwd 查看。

关于数据库命名

如果需要保持和数据库一模一样的命名,则使用 -UseDatabaseNames 参数指定,如:

 &"../tools/cli.ps1" -UseDatabaseNames
等待输入

执行上面命令后,此时 Cli 有一个等待输入提示:

Furion Tools v1.0.0 请键入操作类型:[G] 界面操作,[任意字符] 命令行操作
Furion Tools v1.0.0 您的输入是:

输入大写 G 进入界面操作模式,其他任意字符进入命令行操作模式。

注意事项

目前只有 Sql Server 数据库才支持 GUI 界面操作模式,其他数据库请使用命令行模式。

9.19.3 界面操作模式

9.19.3.1 启动界面操作

当我们输入 G 时,将打开 GUI 界面操作模式,如:

这时,Furion Tools 会自动查找所有数据库配置连接字符串的 .json 文件:

注意事项

数据库连接字符串配置项需写到 json 配置文件中,且根节点需要写为 ConnectionStrings

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.EntityFrameworkCore": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DbConnectionString": "Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;",
"Sqlite3ConnectionString": "Data Source=./Furion.db"
}
}

9.19.3.2 加载数据库表

选择连接字符串之后,点击 加载数据库表和视图 按钮加载。

9.19.3.3 选择表或视图生成

加载表完成后,可以选择您要生成的表或视图,支持多选

点击底部按钮 立即生成

9.19.3.4 选择保存目录

点击 立即生成 按钮后,会弹出实体保存选择目录资源管理器,默认实体只能保存在 Furion.Core 层:

点击确定后就可完成所有生成操作。

9.19.3.5 生成最终实体代码

最终脚本如下:

PM> &"../tools/cli.ps1"
// -----------------------------------------------------------------------------
// ______ _______ _
// | ____| |__ __| | |
// | |__ _ _ _ __ | | ___ ___ | |___
// | __| | | | '__| | |/ _ \ / _ \| / __|
// | | | |_| | | | | (_) | (_) | \__ \
// |_| \__,_|_| |_|\___/ \___/|_|___/
//
// -----------------------------------------------------------------------------
Furion Tools v1.0.0 启动中......
Furion Tools v1.0.0 启动成功!
Furion Tools v1.0.0 请键入操作类型:[G] 界面操作,[任意字符] 命令行操作
Furion Tools v1.0.0 您的输入是: G
Furion Tools v1.0.0 正在加载数据库表和视图......
Furion Tools v1.0.0 加载成功!
Furion Tools v1.0.0 正在编译解决方案代码......
Build started...
Build succeeded.
For foreign key FK_PersonDetail_Person_PersonId on table dbo.PersonDetail, unable to model the end of the foreign key on principal table dbo.Person. This is usually because the principal table was not included in the selection set.
Furion Tools v1.0.0 编译成功!
Furion Tools v1.0.0 开始生成实体文件......
Furion Tools v1.0.0 正在生成 City.cs 实体代码......
Furion Tools v1.0.0 成功生成 City.cs 实体代码
// -----------------------------------------------------------------------------
// 以下代码由 Furion Tools v1.0.0 生成
// -----------------------------------------------------------------------------

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;

#nullable disable

namespace Furion.Core
{
public partial class City : IEntity, IEntityTypeBuilder<City>
{

public City()
{
InverseParent = new HashSet<City>();
}

public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public DateTime CreatedTime { get; set; }
public DateTime? UpdatedTime { get; set; }
public bool IsDeleted { get; set; }

public virtual City Parent { get; set; }
public virtual ICollection<City> InverseParent { get; set; }

public void Configure(EntityTypeBuilder<City> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasIndex(e => e.ParentId, "IX_City_ParentId");

entityBuilder.HasOne(d => d.Parent)
.WithMany(p => p.InverseParent)
.HasForeignKey(d => d.ParentId);

}

}
}

Furion Tools v1.0.0 正在生成 PersonDetail.cs 实体代码......
Furion Tools v1.0.0 成功生成 PersonDetail.cs 实体代码
// -----------------------------------------------------------------------------
// 以下代码由 Furion Tools v1.0.0 生成
// -----------------------------------------------------------------------------

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;

#nullable disable

namespace Furion.Core
{
public partial class PersonDetail : IEntity, IEntityTypeBuilder<PersonDetail>
{

public int Id { get; set; }
public string PhoneNumber { get; set; }
public string Qq { get; set; }
public int PersonId { get; set; }

public void Configure(EntityTypeBuilder<PersonDetail> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasIndex(e => e.PersonId, "IX_PersonDetail_PersonId")
.IsUnique();

entityBuilder.Property(e => e.Qq).HasColumnName("QQ");

}

}
}

Furion Tools v1.0.0 正在生成 Post.cs 实体代码......
Furion Tools v1.0.0 成功生成 Post.cs 实体代码
// -----------------------------------------------------------------------------
// 以下代码由 Furion Tools v1.0.0 生成
// -----------------------------------------------------------------------------

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;

#nullable disable

namespace Furion.Core
{
public partial class Post : IEntity
{

public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedTime { get; set; }
public DateTime? UpdatedTime { get; set; }
public bool IsDeleted { get; set; }

}
}

Furion Tools v1.0.0 正在生成 VPerson.cs 实体代码......
Furion Tools v1.0.0 成功生成 VPerson.cs 实体代码
// -----------------------------------------------------------------------------
// 以下代码由 Furion Tools v1.0.0 生成
// -----------------------------------------------------------------------------

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;

#nullable disable

namespace Furion.Core
{
public partial class VPerson : IEntity, IEntityTypeBuilder<VPerson>
{

public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Address { get; set; }

public void Configure(EntityTypeBuilder<VPerson> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasNoKey();

entityBuilder.ToView("V_Person");

entityBuilder.Property(e => e.Id).ValueGeneratedOnAdd();

entityBuilder.Property(e => e.Name).HasMaxLength(32);

}

}
}

Furion Tools v1.0.0 全部实体生成成功!
PM>

9.19.4 命令参数配置

Furion Tools Cli 支持多个参数配置,使用方法只需要在命令后面添加即可,如:

 &"../tools/cli.ps1" -Context 数据库上下文名 -ConnectionName 连接字符串Key

支持参数如下:

  • -Tables:配置要生成的数据库表,数组类型,如果为空,则生成数据库所有表和视图。如:-Tables Person,PersonDetails
  • -Context:配置数据库上下文,默认 FurionDbContext,如果有多个数据库上下文,则此参数必须配置
  • -ConnectionName:配置数据库连接字符串,对应 appsetting.json 中的 ConnectionStrings 定义的 Key
  • -OutputDir:生成实体代码输出目录,默认为:./Furion.Core/Entities/
  • -DbProvider:数据库提供器,默认是 Microsoft.EntityFrameworkCore.SqlServer,其他数据库请指定对应程序集
    • SqlServerMicrosoft.EntityFrameworkCore.SqlServer
    • SqliteMicrosoft.EntityFrameworkCore.Sqlite
    • CosmosMicrosoft.EntityFrameworkCore.Cosmos
    • InMemoryDatabaseMicrosoft.EntityFrameworkCore.InMemory
    • MySqlPomelo.EntityFrameworkCore.MySqlMySql.EntityFrameworkCore
    • PostgreSQLNpgsql.EntityFrameworkCore.PostgreSQL
    • OracleOracle.EntityFrameworkCore
    • DmMicrosoft.EntityFrameworkCore.Dm
  • -EntryProject:Web 启用项目层名,默认 Furion.Web.Entry
  • -CoreProject:实体项目层名,默认 Furion.Core
  • -DbContextLocators:多数据库上下文定位器,默认 MasterDbContextLocator,支持多个,如:MasterDbContextLocator,MySqlDbContextLocator
  • -Product:解决方案默认前缀,如 Furion
  • -UseDatabaseNames:是否保持生成和数据库、表一致的名称
  • -Namespace:指定实体命名空间

9.19.5 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-delete/index.html b/handbook/build/docs/dbcontext-delete/index.html new file mode 100644 index 00000000000..9401c01bd0d --- /dev/null +++ b/handbook/build/docs/dbcontext-delete/index.html @@ -0,0 +1,17 @@ + + + + + +9.8 删除操作 | Furion + + + + + +
+

9.8 删除操作

功能移除声明

以下内容包含 Exists 单词的在 Furion 2.6.0 + 版本中已移除。

9.8.1 删除一个实体(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.Delete(user);

// 示例二
user.Delete();

// 示例三
repository.ChangeEntityState(user, EntityState.Deleted);

// 示例四
repository.Entities.Remove(user);

// ==== 异步操作 ====

// 示例一
await repository.DeleteAsync(user);

// 示例二
await user.DeleteAsync();

9.8.2 删除一个实体(立即提交)

// ==== 同步操作 ====

// 示例一
repository.DeleteNow(user);

// 示例二
user.DeleteNow();

// ==== 异步操作 ====

// 示例一
await repository.DeleteNowAsync(user);

// 示例二
await user.DeleteNowAsync();

9.8.3 根据主键删除记录(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.Delete(1);

// 示例二
user.Delete(1);

// ==== 异步操作 ====

// 示例一
await repository.DeleteAsync(1);

// 示例二
await user.DeleteAsync(1);

9.8.4 根据主键删除记录(立即提交)

// ==== 同步操作 ====

// 示例一
repository.DeleteNow(1);

// 示例二
user.DeleteNow(1);

// ==== 异步操作 ====

// 示例一
await repository.DeleteNowAsync(1);

// 示例二
await user.DeleteNowAsync(1);

9.8.5 数据存在才根据主键删除(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.DeleteExists(1);

// 示例二
user.DeleteExists(1);

// ==== 异步操作 ====

// 示例一
await repository.DeleteExistsAsync(1);

// 示例二
await user.DeleteExistsAsync(1);

9.8.6 数据存在才根据主键删除(立即提交)

// ==== 同步操作 ====

// 示例一
repository.DeleteExistsNow(1);

// 示例二
user.DeleteExistsNow(1);

// ==== 异步操作 ====

// 示例一
await repository.DeleteExistsNowAsync(1);

// 示例二
await user.DeleteExistsNowAsync(1);
小知识

所有带 Now 结尾的表示立即提交到数据库,也就是立即调用 SaveChangesSaveChangesAsync

9.8.7 假删除/软删除

功能移除声明

以下内容在 Furion 2.10 + 版本中已移除。

Furion 框架中可以通过 [FakeDelete] 特性标记假删除特性,如:

9.8.7.1 添加 [FakeDelete] 标记

public class Model: IEntity
{
[FakeDelete(true)] // 设置假删除的值
public bool IsDeleted { get; set; }
}
[FakeDelete]

[FakeDelete] 属性拥有带一个参数的构造函数,这个参数是假删除的值

9.8.7.2 假删除使用

// ==== 同步操作 ====

// 示例一
repository.FakeDelete(entity);

// 示例二
repository.FakeDeleteNow(entity);

// 示例三
repository.FakeDelete(1);

// 示例四
repository.FakeDeleteNow(1);

// 示例五
entity.FakeDelete();

// 示例六
repository.UpdateInclude(user, u => u.IsDeleted);

// ==== 异步操作 ====

// 示例一
await repository.FakeDeleteAsync(entity);

// 示例二
await repository.FakeDeleteNowAsync(entity);

// 示例三
await repository.FakeDeleteAsync(1);

// 示例四
await repository.FakeDeleteNowAsync(1);

// 示例五
await entity.FakeDeleteAsync();

// 示例六
await repository.UpdateIncludeAsync(user, u => u.IsDeleted);

9.8.8 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-entitytrigger/index.html b/handbook/build/docs/dbcontext-entitytrigger/index.html new file mode 100644 index 00000000000..4425fca7c5a --- /dev/null +++ b/handbook/build/docs/dbcontext-entitytrigger/index.html @@ -0,0 +1,17 @@ + + + + + +9.25. 实体数据监听器 | Furion + + + + + +
+

9.25. 实体数据监听器

9.25.1 实体数据监听器

在最新的 Furion1.1.6+ 版本中,新增了 IEntityChangedListener 实体数据监听接口,可以监听 EFCore 任何实体表 增删改 操作。

9.25.2 有何作用

  • 类似数据库 触发器 功能,可实现 增删改 监听
  • 可以实现特殊操作,比如刷新缓存,记录日志等

9.25.3 如何使用

Furion 框架中,默认不启用实体数据监听器,如想启用,只需要在 数据库上下文 构造函数中启用即可:

9.25.3.1 启用数据监听

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString")]
public class DefaultDbContext : AppDbContext<DefaultDbContext>
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
{
EnabledEntityChangedListener = true;
}
}
}

9.25.3.2 监听特定实体数据

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory;
using System;
using System.Collections.Generic;

namespace Furion.Core
{
public class Post : Entity, IEntityChangedListener<Post>
{
/// <summary>
/// 构造函数
/// </summary>
public Post()
{
CreatedTime = DateTimeOffset.UtcNow;
IsDeleted = false;
}

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }

/// <summary>
/// Person 集合
/// </summary>
public ICollection<Person> Persons { get; set; }

/// <summary>
/// 实体更改后触发
/// </summary>
/// <param name="entity">新数据</param>
/// <param name="oldEntity">旧数据</param>
/// <param name="dbContext">数据库上下文</param>
/// <param name="dbContextLocator">数据库上下文定位器</param>
/// <param name="state">实体状态</param>
public void OnChanged(Post entity, Post oldEntity, DbContext dbContext, Type dbContextLocator, EntityState state)
{
// 刷新缓存
App.GetService<IMemoryCache>().Set("Key", "Value");
}
}
}

9.25.4 IEntityChangedListener 定义

/// <summary>
/// 实体数据改变监听依赖接口
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public interface IEntityChangedListener<TEntity>
where TEntity : class, IPrivateEntity, new()
{
/// <summary>
/// 监听数据改变之前(仅支持EFCore操作)
/// </summary>
/// <param name="entity"></param>
/// <param name="dbContext"></param>
/// <param name="dbContextLocator"></param>
/// <param name="state"></param>
void OnChanging(TEntity entity, DbContext dbContext, Type dbContextLocator, EntityState state) { }

/// <summary>
/// 监听数据改变之后(仅支持EFCore操作)
/// </summary>
/// <param name="newEntity">新值</param>
/// <param name="oldEntity">旧值</param>
/// <param name="dbContext"></param>
/// <param name="dbContextLocator"></param>
/// <param name="state"></param>
void OnChanged(TEntity newEntity, TEntity oldEntity, DbContext dbContext, Type dbContextLocator, EntityState state);

/// <summary>
/// 监听数据改变失败(仅支持EFCore操作)
/// </summary>
/// <param name="entity"></param>
/// <param name="dbContext"></param>
/// <param name="dbContextLocator"></param>
/// <param name="state"></param>
void OnChangeFailed(TEntity entity, DbContext dbContext, Type dbContextLocator, EntityState state) { }
}

9.25.5 [SuppressChangedListener] 跳过监听

默认情况下,Furion 框架会对所有新增、更新、编辑的实体进行监听,有些时候我们无需监听特定实体,只需要在实体上贴 [SuppressChangedListener] 特性即可。

9.25.6 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-filter/index.html b/handbook/build/docs/dbcontext-filter/index.html new file mode 100644 index 00000000000..49bdd952810 --- /dev/null +++ b/handbook/build/docs/dbcontext-filter/index.html @@ -0,0 +1,17 @@ + + + + + +9.23 实体/全局查询筛选器 | Furion + + + + + +
+

9.23 实体/全局查询筛选器

9.23.1 查询筛选器

通常,我们系统中有一些维护字段,如 IsDeleted 字段,这个字段用来标识用户已经删除的数据,那么我们需要每次查询数据的时候带上这个字段,避免查询出不该出现的数据。

Furion 提供非常灵活方便的全局查询筛选器,能够应用到每一次查询中。

9.23.2 多种筛选器配置

9.23.2.1 单表筛选器

单表筛选器就是只针对特定实体进行筛选操作,使用简单,只需要在继承 IEntityTypeBuilder<TEntity> 接口并实现即可,如:

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;

namespace Furion.Core
{
public class Person : Entity, IEntityTypeBuilder<Person>
{
public Person()
{
CreatedTime = DateTime.Now;
IsDeleted = false;
}

public string Name { get; set; }

public int Age { get; set; }

public string Address { get; set; }

public void Configure(EntityTypeBuilder<Person> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasQueryFilter(u => !u.IsDeleted);
}
}
}

9.23.2.2 全局筛选器

全局筛选器可以配置所有实体应用筛选器中,无需一个一个去配置。使用方法稍微有些复杂,需要动态构建 Lambda 表达式。

实现全局筛选器依赖于 IModelBuilderFilter 接口,该接口提供两个方法:

  • OnCreating:实体构建之前
  • OnCreated:实体构建之后

通过实现这两个方法即可配置全局过滤器,如:

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Linq.Expressions;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString")]
public class FurionDbContext : AppDbContext<FurionDbContext>, IModelBuilderFilter
{
public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}

public void OnCreating(ModelBuilder modelBuilder, EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)
{
// 设置软删除表达式
var fakeDeleteQueryFilterExpression = FakeDeleteQueryFilterExpression(entityBuilder, dbContext);
if (fakeDeleteQueryFilterExpression == null) return;

entityBuilder.HasQueryFilter(fakeDeleteQueryFilterExpression);
}
}
}
小建议

如果对动态构建 LambdaExpression 不熟悉的朋友,可以使用 System.Linq.Dynamic.Corehttps://github.com/zzzprojects/System.Linq.Dynamic.Core

9.23.3 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-function/index.html b/handbook/build/docs/dbcontext-function/index.html new file mode 100644 index 00000000000..770129b4b3a --- /dev/null +++ b/handbook/build/docs/dbcontext-function/index.html @@ -0,0 +1,17 @@ + + + + + +9.14 函数操作 | Furion + + + + + +
+

9.14 函数操作

温馨提示

推荐使用 《9.17 Sql 高级代理》代替本章节功能。Sql 高级代理 能够提供更容易且更易维护的方式。

9.14.1 数据库函数

引用百度百科:

数据库函数是指当需要分析数据清单中的数值是否符合特定条件时,使用数据库工作表函数。

简单来说,数据库函数就是用于子计算的函数。其计算的结果可以用于构建 sql 语句。

9.14.1.1 支持标量函数的数据库

SqlServerSqliteCosmosInMemoryDatabaseMySqlPostgreSQLOracleFirebirdDm

9.14.1.2 支持表值函数的数据库

SqlServerSqliteCosmosInMemoryDatabaseMySqlPostgreSQLOracleFirebirdDm

9.14.2 数据库函数类型

在关系型数据库中,数据库函数有这两种类型:

  • 标量函数:只能返回单个值
  • 表值函数:只能返回一个结果集

9.14.3 函数的使用

9.14.3.1 标量函数返回 object

// ISqlRepository 方法
var value = _sqlRepository.SqlFunctionScalar("func_GetValue");

// ISqlDispatchProxy 方式
var value = _sqlExecuteProxy.GetValue(); // 推荐方式

// 实体仓储方式
var value = _personRepository.SqlFunctionScalar("func_GetValue");

// IRepository 非泛型方式
var value = _repository.Sql().SqlFunctionScalar("func_GetValue");

// 变态懒人方式,直接通过函数名执行
var value = "func_GetValue".SqlFunctionScalar();
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.14.3.2 标量函数返回 T

// ISqlRepository 方法
var value = _sqlRepository.SqlFunctionScalar<string>("func_GetValue");

// ISqlDispatchProxy 方式
var value = _sqlExecuteProxy.GetValue(); // 推荐方式

// 实体仓储方式
var value = _personRepository.SqlFunctionScalar<string>("func_GetValue");

// IRepository 非泛型方式
var value = _repository.Sql().SqlFunctionScalar<string>("func_GetValue");

// 变态懒人方式,直接通过函数名执行
var value = "func_GetValue".SqlFunctionScalar<string>();
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.14.3.3 表值函数返回 DataTable

// ISqlRepository 方法
var value = _sqlRepository.SqlFunctionQuery("func_GetTable");

// ISqlDispatchProxy 方式
var value = _sqlExecuteProxy.GetTable(); // 推荐方式

// 实体仓储方式
var value = _personRepository.SqlFunctionQuery("func_GetTable");

// IRepository 非泛型方式
var value = _repository.Sql().SqlFunctionQuery("func_GetTable");

// 变态懒人方式,直接通过函数名执行
var value = "func_GetTable".SqlFunctionQuery();
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.14.3.4 表值函数返回 List<T>

// ISqlRepository 方法
var value = _sqlRepository.SqlFunctionQuery<Person>("func_GetTable");

// ISqlDispatchProxy 方式
var value = _sqlExecuteProxy.GetTable(); // 推荐方式

// 实体仓储方式
var value = _personRepository.SqlFunctionQuery<Person>("func_GetTable");

// IRepository 非泛型方式
var value = _repository.Sql().SqlFunctionQuery<Person>("func_GetTable");

// 变态懒人方式,直接通过函数名执行
var value = "func_GetTable".SqlFunctionQuery<Person>();
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.14.4 在 Linq 中使用 标量函数

Furion 框架提供非常灵活的在 Linq 中使用标量函数的方法。如果像使用这样的方式,需要满足以下两个条件:

  • 标量函数必须定义在公开静态类中,且自己也是公开静态方法
  • 公开静态方法必须贴有 [QueryableFunction] 特性

示例如下:

9.14.4.1 创建标量函数

CREATE FUNCTION FN_GetId
(
@id INT
)
RETURNS INT
AS
BEGIN
RETURN @id + 1;
END;

9.14.4.2 创建静态类和静态方法

创建静态类,如 QueryFunctions,将该 标量函数 放在静态类中:

using Furion.DatabaseAccessor;
using System;

namespace Furion.Application
{
// 必须是公开静态的
public static class QueryFunctions
{
// 必须是静态方法
[QueryableFunction("FN_GetId", "dbo")] // 配置标量函数
public static int GetId(int id) => throw new NotSupportedException();
}
}

9.14.4.3 在 Linq 中使用

_personRepository.Where(u => u.Id > QueryFunctions.GetId(1)).ToList();
SELECT [p].[Id], [p].[Address], [p].[Age], [p].[CreatedTime], [p].[IsDeleted], [p].[Name], [p].[UpdatedTime]
FROM [Person] AS [p]
WHERE [p].[Id] > [dbo].[FN_GetId](1) // 💥 注意这里

9.14.5 在 Linq 中使用 表值函数

EF Core 5.0 版本支持在 Linq 中操作 表值函数,操作有点类似 视图操作

示例如下:

9.14.5.1 创建表值函数

CREATE FUNCTION dbo.GetPersons
(
@id INT
)
RETURNS TABLE
AS
RETURN
(
SELECT Id,
Name,
Age,
Address
FROM dbo.Person
WHERE Id > @id
);

9.14.5.2 创建表值函数模型

namespace Furion.Core
{
public class F_Person
{
/// <summary>
/// 主键Id
/// </summary>
public int Id { get; set; }

/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }

/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }

/// <summary>
/// 住址
/// </summary>
public string Address { get; set; }
}
}

9.14.5.3 表值函数配置

DbContext 类中定义方法:

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using System.Linq;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString")]
public class FurionDbContext : AppDbContext<FurionDbContext>
{
public IQueryable<F_Person> GetPersons(int id) => FromExpression(() => GetPersons(id));

public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.Entity(typeof(F_Person)).HasNoKey();
modelBuilder.HasDbFunction(() => GetPersons(default));
}
}
}

9.14.5.4 在 Linq 中使用

IQueryable<F_Person> query = _repository.DynamicDbContext.GetPersons(1);
var result = query.Where(u => u.Name.Equals("Furion")).ToList();

最终生成 Sql

SELECT [g].Id, [g].Name, [g].Age, [g].Address
FROM dbo.GetPersons(1) AS [g]
WHERE [g].Name == N'Furion';

9.14.6 在 EF Core 内置函数

EF Core 为我们提供了很多常用的内置函数,可以在 Lambda 条件中使用,主要是通过 EF.Functions 调用,如:

_repository.Where(u => EF.Functions.DateDiffHour(u.CreatedDt, DateTime.Now) > 8).FirstOrDefault();

这个语句使用了 EF.Functions.DateDiffHour 最终生成的 Sql 如下:

SELECT TOP(1) [a].*
FROM [dbo].[TEST] AS [a]
WHERE DATEDIFF(HOUR, [a].[CREATED_DT], GETDATE()) > 8

EF Core 内置函数就不一一列出了,可以通过 EF.Functions 查看更多,如果不能满足自己的需求,那么可以自定义 Linq 标量函数

9.14.7 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-hight-query/index.html b/handbook/build/docs/dbcontext-hight-query/index.html new file mode 100644 index 00000000000..cd6849d04db --- /dev/null +++ b/handbook/build/docs/dbcontext-hight-query/index.html @@ -0,0 +1,17 @@ + + + + + +9.11 高级查询操作 | Furion + + + + + +
+

9.11 高级查询操作

9.11.1 关联数据模型

using Furion.DatabaseAccessor;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace Furion.Core
{
public class Person : Entity
{
/// <summary>
/// 构造函数
/// </summary>
public Person()
{
CreatedTime = DateTime.Now;
}

/// <summary>
/// 姓名
/// </summary>
[MaxLength(32)]
public string Name { get; set; }

/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }

/// <summary>
/// 住址
/// </summary>
public string Address { get; set; }

/// <summary>
/// 从表
/// </summary>
public PersonDetail PersonDetail { get; set; }

/// <summary>
/// 一对多
/// </summary>
public ICollection<Children> Childrens { get; set; }

/// <summary>
/// 多对多
/// </summary>
public ICollection<Post> Posts { get; set; }
}
}

9.11.2 一对一查询

// 示例一
var person = repository.Include(u => u.Detail);

// 示例二
var person = repository.Include(u => u.Detail)
.Include(u => u.Post);

// 示例三
var person = repository.Include(u => u.Detail)
.ThenInclude(d => d.Review)
.Include(u => u.Post);

// 示例四
var person = repository.Include(u => u.Detail.Where(d => d.Id > 10).OrderBy(d => d.Name))
.ThenInclude(d => d.Review)
.Include(u => u.Post);

// 示例五
var person = repository.Include(!string.IsNullOrEmpty(keyword), u => u.Detail);

// 示例六
var person = repository.Include(!string.IsNullOrEmpty(keyword), u => u.Detail)
.Include(age > 18, u => u.Detail.Where(d => d.Id > 10).OrderBy(d => d.Name))
.ThenInclude(d => d.Review)
.Include(u => u.Post);

9.11.3 一对多查询

// 示例一
var person = repository.Include(u => u.Childrens);

// 参考 一对一 例子
特别说明

一对一一对多 查询方法一样,唯一的区别是:一对多 采用 ICollection<TEntity> 定义属性。

9.11.4 多对多查询

// 示例一
var person = repository.Include(u => u.Posts);

// 参考 一对一 例子
特别说明

一对一多对多 查询方法一样,唯一的区别是:多对多 采用 ICollection<TEntity> 定义属性。

9.11.5 联表查询

9.11.5.1 内连接 Inner Join

var query = from p in _personRepository.AsQueryable()
join d in _personDetailRepository.AsQueryable() on p.Id equals d.PersonId
select new PersonDto
{
PhoneNumber = p.PersonDetail.PhoneNumber,
Address = p.Address,
Age = p.Age,
Name = p.Name,
Id = p.Id,
QQ = p.PersonDetail.QQ
};

9.11.5.2 左连接 Left Join

var query = from p in _personRepository.AsQueryable()
join d in _personDetailRepository.AsQueryable() on p.Id equals d.PersonId into results
from d in results.DefaultIfEmpty()
select new PersonDto
{
PhoneNumber = p.PersonDetail.PhoneNumber,
Address = p.Address,
Age = p.Age,
Name = p.Name,
Id = p.Id,
QQ = p.PersonDetail.QQ
};
小提示

Left JoinInner Join 不同的是,Left Join 会先将结果 into 到新的结果集然后再查询,并调用 DefaultIfEmpty() 方法。

9.11.5.3 右连接 Right Join

Right Join 只需要将 Left Join 主从表位置更换即可。

9.11.6 分组查询

// 示例一
var query = repository.AsQueryable().GroupBy(x => new { x.Column1, x.Column2 });

// 示例二
var query = from student in repository.AsQueryable()
group student by repository2.AsQueryable() into dateGroup
select new ResultData()
{
Key = dateGroup.Key,
Value = dateGroup.Count()
};

// 示例三
var query = from a in repository.AsQueryable()
join b in repository2.AsQueryable() on a.Id equals b.Aid
join c in repository3.AsQueryable() on c.id equals b.Bid
group a by new { a.Age, b.Sex } into g
select new {
Peo = g.Key,
Count = g.Count()
};

9.11.7 合并结果集

var query = repository.AsQueryable(u => u.Id > 10)
.Union(
repository2.AsQueryable(u => u.Id <= 10)
);

9.11.8 查询排序

9.11.8.1 正序

// 示例一
var query = repository.AsQueryable()
.OrderBy(u => u.Id);

// 示例二
var query =repository.AsQueryable()
.OrderBy(u => u.Id)
.ThenBy(u => u.Name);

9.11.8.2 倒序

// 示例一
var query = repository.AsQueryable()
.OrderByDescending(u => u.Id);

// 示例二
var query =repository.AsQueryable()
.OrderByDescending(u => u.Id)
.ThenByDescending(u => u.Name);

9.11.8.3 混合倒序

// 示例一
var query = repository.AsQueryable()
.OrderBy(u => u.Id)
.OrderByDescending(u => u.Name)
.ThenBy(u => u.Age);

9.11.9 递归查询

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;

namespace Furion.Core
{
/// <summary>
/// 城市
/// </summary>
public class City : Entity, IEntityTypeBuilder<City>, IEntitySeedData<City>
{
/// <summary>
/// 构造函数
/// </summary>
public City()
{
CreatedTime = DateTime.Now;

}

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }

/// <summary>
/// 上级Id
/// </summary>
public int? ParentId { get; set; }

/// <summary>
/// 上级
/// </summary>
public virtual City Parent { get; set; }

/// <summary>
/// 子集
/// </summary>
public virtual ICollection<City> Childrens { get; set; }

/// <summary>
/// 配置实体关系
/// </summary>
/// <param name="entityBuilder"></param>
/// <param name="dbContext"></param>
/// <param name="dbContextLocator"></param>
public void Configure(EntityTypeBuilder<City> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder
.HasMany(x => x.Childrens)
.WithOne(x => x.Parent)
.HasForeignKey(x => x.ParentId)
.OnDelete(DeleteBehavior.ClientSetNull); // 必须设置这一行
}

/// <summary>
/// 种子数据
/// </summary>
/// <param name="dbContext"></param>
/// <param name="dbContextLocator"></param>
/// <returns></returns>
public IEnumerable<City> HasData(DbContext dbContext, Type dbContextLocator)
{
return new List<City>
{
new City { Id=1,CreatedTime =DateTime.Parse("2020-08-20 15:30:20"),IsDeleted=false,Name="中国" },
new City { Id=2,CreatedTime =DateTime.Parse("2020-08-20 15:30:20"),IsDeleted=false,Name="广东省",ParentId=1 },
new City { Id=3,CreatedTime =DateTime.Parse("2020-08-20 15:30:20"),IsDeleted=false,Name="中山市",ParentId=2 },
new City { Id=4,CreatedTime =DateTime.Parse("2020-08-20 15:30:20"),IsDeleted=false,Name="珠海市",ParentId=2 },
new City { Id=5,CreatedTime =DateTime.Parse("2020-08-20 15:30:20"),IsDeleted=false,Name="浙江省",ParentId=1 },
};
}
}
}
var cities = await repository.AsQueryable()
.Include(u => u.Childrens)
.Where(u => u.Id == 1)
.ToListAsync();

var dtos = cities.Adapt<List<CityDto>>();

9.11.10 动态 Sql 查询

Furion 默认不支持 动态 Sql 查询功能,不过可以通过第三方实现:

Furion 项目层安装 System.Linq.Dynamic.Corehttps://github.com/zzzprojects/System.Linq.Dynamic.Core

9.11.10.1 动态 Sql

// 示例一
var query = repository.AsQueryable()
.Where("City == @0 and Orders.Count >= @1", "China", 10)
.OrderBy("CompanyName")
.Select("new(CompanyName as Name, Phone)");

// 示例二
var list = repository.AsQueryable()
.Where("Name.Contains(@0)","Furion")
.ToList();

// 示例三,支持 ? 语法
var customers = repository.AsQueryable()
.Include(c => c.Location)
.Where(c => c.Location?.Name == "test") // 注意 Location?.Name
.ToList();

9.11.10.2 动态 Lambda

// 示例一
var x = Expression.Parameter(typeof(int), "x");
var y = Expression.Parameter(typeof(int), "y");
var e = DynamicExpressionParser
.ParseLambda(new ParameterExpression[] { x, y }, null, "(x + y) * 2");

// 示例二
var e = DynamicExpressionParser.ParseLambda(
typeof(Customer), typeof(bool),
"City = @0 and Orders.Count >= @1",
"London", 10);

9.11.11 时态查询

功能移除声明

以下内容在 Furion 2.13 + 版本中已移除。

Furion 框架还提供了时态查询功能,可以查询特定时间的数据,如:

var result = rep.Entities
.AsTemporalOf(DateTime.UtcNow.AddDays(-1))
.Include(i=> i.Company)
.FirstOrDefault(i => i.Name == "Furion");

另外提供了多个时态查询方法

  • AsTemporalAll()
  • AsTemporalAsOf(date)
  • AsTemporalFrom(startDate, endDate)
  • AsTemporalBetween(startDate, endDate)
  • AsTemporalContained(startDate, endDate)

9.11.12 性能优化

默认情况下,EF Core 会跟踪所有实体,也就是任何数据改变都会引起数据检查,所以如果只做查询操作,建议关闭实体跟踪功能。

Furion 框架提供了以下高性能实体集合:

  • DetachedEntities:脱轨/不追踪实体
  • AsQueryable(false):不追踪实体
  • Entities.AsNoTracking():手动关闭实体追踪

EF Core 中,复杂查询总是会生成一个 sql,也就是 AsSingleQuery(),我们也可以设置为 AsSplitQuery() 切割成多个查询。

9.11.13 分表查询小例子

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Collections.Generic;

namespace Furion.Core
{
public class Person : Entity, IEntityTypeBuilder<Person>
{
public string Name { get; set; }

/// <summary>
/// 配置实体关系
/// </summary>
/// <param name="entityBuilder"></param>
/// <param name="dbContext"></param>
/// <param name="dbContextLocator"></param>
public void Configure(EntityTypeBuilder<Person> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.ToSqlQuery(
@"select * from dbo.person.2020-09-19
union all
select * from dbo.person.2020-09-20");
}
}
}
var posts = repository.Where(u => u.Id > 10).ToList();

9.11.14 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-locator/index.html b/handbook/build/docs/dbcontext-locator/index.html new file mode 100644 index 00000000000..defe530ccae --- /dev/null +++ b/handbook/build/docs/dbcontext-locator/index.html @@ -0,0 +1,17 @@ + + + + + +9.2 数据库上下文定位器 | Furion + + + + + +
+

9.2 数据库上下文定位器

小提醒

只要数据库上下文注册绑定了数据库上下文定位器,那么所有的仓储、实体、种子、配置、视图、函数等数据库相关的类、接口、方法都需要指定数据库上下文定位器,默认数据库上下文定位器除外。

如果改变了和数据库实体相关的所有配置接口的定位器,还需执行 Add-MigrationUpdate-Database 命令。

9.2.1 数据库上下文定位器

在了解数据库上下文定位器之前,我们先了解什么是 定位器定位器 就是给物体安装特殊配置,使其能够被实时追踪和定位。

那为什么需要 定位器

由于 EF Core 本身支持多个数据库上下文操作,但是通过 依赖注入 的方式默认只初始化一个数据库上下文,也就是如果我们想要操作多个数据库上下文,那么 构造函数 注入方式就会变得复杂。

所以,Furion 实现了一套 定位器 功能,通过这个 定位器 ,我们就能够通过 依赖注入 等多个方式定位到数据库上下文并初始化。

9.2.2 数据库上下文定位器作用

  • 能够实现构造函数初始化多个数据库上下文
  • 能够避免业务层直接引用 DbContext
  • 能够实现动态切换数据库、读写分离、主从库等复杂操作

9.2.3 如何定义数据库上下文定位器

定义数据库上下文定位器只需遵循三个原则即可:

  • 必须是公开 class 类型同时具备无参构造函数
  • 该类型必须继承 IDbContextLocator 接口
  • 数据库上下文定位器和数据库上下文必须是一对一关系,也就是不能同时被多个数据库上下文使用

数据库上下文定位器定义代码如下:

using Furion.DatabaseAccessor;

namespace Furion.Core
{
public sealed class FurionDbContextLocator : IDbContextLocator
{
}
}

9.2.4 默认数据库上下文定位器

Furion 框架中已经提供了 MasterDbContextLocator 默认数据库上下文定位器,所以默认数据库上下文只需继承 AppDbContext<TDbContext> 即可。

如:只有一个数据库上下文定义:

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class DefaultDbContext : AppDbContext<DefaultDbContext> // 无需指定定位器
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
{
}
}
}
关于多数据库定位器

默认数据库的定位器默认为 MasterDbContextLocator,所以无需显示指定定位器,但从第二个数据库开始,都必须指定数据库定位器。如:

  • 注册上下文:
options.AddDbPool<OtherDbContext, OtherDbContextLocator>();
  • 定义上下文
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class OtherDbContext : AppDbContext<OtherDbContext, OtherDbContextLocator> // 需指定定位器
{
public OtherDbContext(DbContextOptions<OtherDbContext> options) : base(options)
{
}
}
}

另外,Entity/IEntityIRepository 等都需要指定定位器,如:IEntity<TKey, TLocator>IRepository<TEntity, TLocator> 操作。

9.2.5 数据库上下文定位器支持对象

目前数据库上下文支持以下多个对象:

  • AppDbContext<TEntity, TDbContextLocator>:数据上下文
  • IRepository<TEntity, TDbContextLocator>:实体仓储
  • ISqlRepository<TDbContextLocator>: Sql 操作仓储
  • IDbRepository<TDbContextLocator>: 特定数据库操作仓储
  • IMSRepository<TMasterDbContextLocator, TSlaveDbContextLocator1, ... TSlaveDbContextLocator7>: 读写分离仓储
  • Func<Type, DbContext>:依赖注入获取数据库上下文
  • Entity<Tkey, TDbContextLocator> :实体配置
  • EntityBase<Tkey, TDbContextLocator1, ... TDbContextLocator8>:实体配置
  • EntityNotKey<TDbContextLocator1, ... TDbContextLocator8>:无键实体配置
  • IEntity<TDbContextLocator1, ... TDbContextLocator8>:默认实体配置
  • IEntitySeedData<TEntity, TDbContextLocator1, ... TDbContextLocator8>:种子数据配置
  • IEntityTypeBuilder<TEntity, TDbContextLocator1, ... TDbContextLocator8>:实体类型构建器
  • IModelBuilderFilter<TDbContextLocator1, ... TDbContextLocator8>:模型构建筛选器
  • [QueryableFunction(DbContextLocators=Type[])]:查询函数

9.2.6 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-multi-database/index.html b/handbook/build/docs/dbcontext-multi-database/index.html new file mode 100644 index 00000000000..c9a4c67902d --- /dev/null +++ b/handbook/build/docs/dbcontext-multi-database/index.html @@ -0,0 +1,17 @@ + + + + + +9.18 多种数据库操作 | Furion + + + + + +
+

9.18 多种数据库操作

连接字符串配置注意事项

如果连接字符串是配置在自定义的 .json 文件中,那么必须在 Visual Studio 中配置 .json 右键属性,设置 复制 输出目录为 如果较新则复制,生成操作为 内容

否则就会提示找不到配置或连接字符串的错误。

9.18.1 Furion 支持数据库提供器

SqlServerSqliteCosmosInMemoryDatabaseMySqlPostgreSQLOracleFirebirdDm

9.18.1.1 数据库提供器对应包

  • SqlServerMicrosoft.EntityFrameworkCore.SqlServer (支持 SqlServer 2005 +)
  • SqliteMicrosoft.EntityFrameworkCore.Sqlite
  • CosmosMicrosoft.EntityFrameworkCore.Cosmos
  • InMemoryDatabaseMicrosoft.EntityFrameworkCore.InMemory
  • MySql
    • Pomelo.EntityFrameworkCore.MySql:(支持 MySql 5.x +)
    • MySql.EntityFrameworkCore:支持 (MySql 8.x +)
  • PostgreSQLNpgsql.EntityFrameworkCore.PostgreSQL
  • OracleOracle.EntityFrameworkCore (支持 Oracle 10 +)
  • FirebirdFirebirdSql.EntityFrameworkCore.Firebird
  • DmMicrosoft.EntityFrameworkCore.Dm
小知识

这些数据库包应该安装在 Furion.EntityFramework.Core 层。特殊情况需安装在 Furion.Core 层中,如 Mysql HasCharset() 配置。

9.18.2 多数据库服务注册

// 注册 SqlServer
options.AddDbPool<FurionDbContext>(DbProvider.SqlServer);
options.AddDbPool<FurionDbContext>($"{DbProvider.SqlServer}@2005"); // 支持 2005 数据库
options.AddDbPool<FurionDbContext>($"{DbProvider.SqlServer}@2008"); // 支持 2008 数据库

// 注册 Sqlite
options.AddDbPool<FurionDbContext>(DbProvider.Sqlite);

// 注册 Cosmos
options.AddDbPool<FurionDbContext>(DbProvider.Cosmos);

// 注册 InMemoryDatabase
options.AddDbPool<FurionDbContext>(DbProvider.InMemoryDatabase);

// 注册 MySql
options.AddDbPool<FurionDbContext>(DbProvider.MySql);
options.AddDbPool<FurionDbContext>($"{DbProvider.MySql}@8.0.22"); // 可以指定版本号
options.AddDbPool<FurionDbContext>(DbProvider.MySqlOfficial); // 使用 MySql 官方包(MySql.EntityFrameworkCore)

// 注册 PostgreSQL
options.AddDbPool<FurionDbContext>(DbProvider.Npgsql);

// 注册 Oracle
options.AddDbPool<FurionDbContext>(DbProvider.Oracle);
options.AddDbPool<FurionDbContext>($"{DbProvider.Oracle}@11"); // 支持 Oracle 11 版本

// 注册 Firebird
options.AddDbPool<FurionDbContext>(DbProvider.Firebird);

// 注册 Dm
options.AddDbPool<FurionDbContext>(DbProvider.Dm);
新版 SqlServer/MySQL/Oracle 注意

SqlServer 兼容 2005-2008 写法:

services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurionDbContext>($"{DbProvider.SqlServer}@2005"); // 支持 2005 数据库
options.AddDbPool<FurionDbContext>($"{DbProvider.SqlServer}@2008"); // 支持 2008 数据库
});

MySQL 兼容旧版本(带版本号)写法:

services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurionDbContext>($"{DbProvider.MySql}@8.0.22");
});

如果使用了 MySql.EntityFrameworkCore 包,则需改为以下注册:

services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurionDbContext>(DbProvider.MySqlOfficial);
});

Oracle 兼容 11 版本

services.AddDatabaseAccessor(options =>
{
// 正常这样配置即可
options.AddDbPool<FurionDbContext>($"{DbProvider.Oracle}@11");

// 如果依然出现 ORA-00933: SQL 错误,可以尝试以下配置:
options.AddDbPool<FurionDbContext>($"{DbProvider.Oracle}@11", optionBuilder: (ses, opt) =>
{
opt.UseOracle(b => b.UseOracleSQLCompatibility("11"));
});
});

9.18.3 各类数据库连接字符串配置示例

  • SqliteData Source=./Furion.db
  • MySqlData Source=localhost;Database=Furion;User ID=root;Password=000000;pooling=true;port=3306;sslmode=none;CharSet=utf8;
  • SqlServerServer=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;TrustServerCertificate=True;
  • OracleUser Id=orcl;Password=orcl;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))
  • PostgreSQLPORT=5432;DATABASE=postgres;HOST=127.0.0.1;PASSWORD=postgres;USER ID=postgres;

9.18.4 多数据库使用方式

Furion 通过独创的 数据库上下文定位器 实现多数据库灵活操作切换。只需要为每一种数据库绑定唯一的数据库上下文定位器即可。

以下是 Furion 支持多数据库操作的实例:

9.18.4.1 实体仓储方式

// 切换到 MSSQL 操作 Person表
var mssqlRepository = personRepository.Change<Person, MsSqlDbContextLocator>();

// 切换到 MySql 操作 Person表
var mysqlRepository = personRepository.Change<Person, MySqlDbContextLocator>();

// 切换到 Sqlite 操作 Person表
var sqliteRepository = personRepository.Change<Person, SqliteDbContextLocator>();

9.18.4.2 非泛型仓储方式

// 切换到 MSSQL 操作 Person表
var mssqlRepository = repository.Change<Person, MsSqlDbContextLocator>();

// 切换到 MySql 操作 Person表
var mysqlRepository = repository.Change<Person, MySqlDbContextLocator>();

// 切换到 Sqlite 操作 Person表
var sqliteRepository = repository.Change<Person, SqliteDbContextLocator>();

9.18.4.3 Sql 仓储方式

// 切换到 MSSQL 操作 Person表
var mssqlRepository = sqlRepository.Change<MsSqlDbContextLocator>();

// 切换到 MySql 操作 Person表
var mysqlRepository = sqlRepository.Change<MySqlDbContextLocator>();

// 切换到 Sqlite 操作 Person表
var sqliteRepository = sqlRepository.Change<SqliteDbContextLocator>();

9.18.4.4 实体定义方式


// 支持一个数据库
public class Person: IEntity<MySqlDbContextLocator>
{
// ....
}

// 支持多个数据库
public class Person: IEntity<MySqlDbContextLocator, SqliteDbContextLocator>
{
// ....
}
小知识

所有的 实体依赖接口或抽象类 都支持泛型方式 指定 数据库上下文定位器,最多支持 8 个。

9.18.4.5 Linq 函数方式

public static class QueryFunctions
{
[QueryableFunction("FN_GetId", "dbo", typeof(MySqlDbContextLocator), typeof(SqliteDbContextLocator))]
public static int GetId(int id) => throw new NotSupportedException();
}

9.18.5 SqlServer 低版本支持动态配置

正常情况下,只需要在注册的时候指定 @2008 数据库即可,有些时候我们可能需要在 DbContextOnConfigure 中配置,这个时候就需要添加以下代码:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(DbProvider.GetConnectionString<TDbContext>())
.ReplaceService<IQueryTranslationPostprocessorFactory, SqlServer2008QueryTranslationPostprocessorFactory>();
base.OnConfiguring(optionsBuilder);
}
小知识

DbProvider.GetConnectionString<TDbContext>() 是获取对应上下文配置的数据库链接字符串。

9.18.6 MySql 时区问题/少 8 小时问题

可查阅相关 Issuehttps://gitee.com/dotnetchina/Furion/issues/I3RSCO

9.18.7 snake_case 风格表名和字段

默认情况下 EFCore 将使用和模型定义一致的方式定义表和字段,但可以通过 https://github.com/efcore/EFCore.NamingConventions 拓展插件改变此行为,如下图所示:

 builder.UseNpgsql()
.UseLowerCaseNamingConvention();

其他资料:https://www.npgsql.org/efcore/modeling/table-column-naming.html

9.18.8 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-proc/index.html b/handbook/build/docs/dbcontext-proc/index.html new file mode 100644 index 00000000000..fada2c45309 --- /dev/null +++ b/handbook/build/docs/dbcontext-proc/index.html @@ -0,0 +1,17 @@ + + + + + +9.13 存储过程操作 | Furion + + + + + +
+

9.13 存储过程操作

温馨提示

推荐使用 《9.17 Sql 高级代理》代替本章节功能。Sql 高级代理 能够提供更容易且更易维护的方式。

9.13.1 关于存储过程

引用百度百科:

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的 SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

简单来说,存储过程就是关系型数据库中(Sqlite 除外)中编写逻辑的函数/方法,通过这种方式,可以将 sql 编译缓存起来,大大提高存储过程的执行效率。

这里不讨论存储过程的优缺点。

9.13.2.0 支持存储过程的数据库

SqlServerSqliteCosmosInMemoryDatabaseMySqlPostgreSQLOracleFirebirdDm

9.13.2 存储过程使用

Furion 框架中提供了多种存储过程操作方式:

  • ISqlRepositorySql 操作仓储,可通过 依赖注入
  • ISqlDispatchProxySql 代理方式(高级用法,推荐)
  • 通过任意实体仓储操作:personRepository.SqlProcedureQuery(procName)
  • 通过字符串拓展方法:procName.SqlProcedureQuery()
  • 通过 repository.Sql().SqlProcedureQuery() 方式

9.13.2.1 初始化方式

using Furion.DatabaseAccessor;
using Furion.DynamicApiController;

namespace Furion.Application
{
[DynamicApiController]
public class SqlService
{
private ISqlRepository _sqlRepository;
public SqlService(ISqlRepository sqlRepository)
{
_sqlRepository = sqlRepository;
}
}
}

9.13.2.2 返回 DataTable

// ISqlRepository 方法
var dataTable = _sqlRepository.SqlProcedureQuery("proc_GetPersons");

// ISqlDispatchProxy 方式
var dataTable = _sqlExecuteProxy.GetPersons(); // 推荐方式

// 实体仓储方式
var dataTable = _personRepository.SqlProcedureQuery("proc_GetPersons");

// IRepository 非泛型方式
var dataTable = _repository.Sql().SqlProcedureQuery("proc_GetPersons");

// 变态懒人方式,直接通过存储过程名执行
var dataTable = "proc_GetPersons".SqlProcedureQuery();
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.13.2.3 返回 DataSet

// ISqlRepository 方法
var dataSet = _sqlRepository.SqlProcedureQueries("proc_GetPersons");

// ISqlDispatchProxy 方式
var dataSet = _sqlExecuteProxy.GetPersons(); // 推荐方式

// 实体仓储方式
var dataSet = _personRepository.SqlProcedureQueries("proc_GetPersons");

// IRepository 非泛型方式
var dataSet = _repository.Sql().SqlProcedureQueries("proc_GetPersons");

// 变态懒人方式,直接通过存储过程名执行
var dataSet = "proc_GetPersons".SqlProcedureQueries();
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.13.2.4 返回 List<T>

// ISqlRepository 方法
var list = _sqlRepository.SqlProcedureQuery<Person>("proc_GetPersons");

// ISqlDispatchProxy 方式
var list = _sqlExecuteProxy.GetPersons(); // 推荐方式

// 实体仓储方式
var list = _personRepository.SqlProcedureQuery<Person>("proc_GetPersons");

// IRepository 非泛型方式
var list = _repository.Sql().SqlProcedureQuery<Person>("proc_GetPersons");

// 变态懒人方式,直接通过存储过程名执行
var list = "proc_GetPersons".SqlProcedureQuery<Person>();
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.13.2.5 返回 Tuple<T1,...T8>

Furion 框架大大利用了 Tuple 的特性,将返回多个结果集转成 Tuple<T1,...T8> 类型

// ISqlRepository 方法

// 返回一个结果集
var list1 = _sqlRepository.SqlProcedureQueries<T1>("proc_GetPersons");

// 返回两个结果集
var (list1, list2) = _sqlRepository.SqlProcedureQueries<T1,T2>("proc_GetPersons");

// 返回三个结果集
var (list1, list2, list3) = _sqlRepository.SqlProcedureQueries<T1,T2,T3>("proc_GetPersons");

// 返回四个结果集
var (list1, list2, list3, list4) = _sqlRepository.SqlProcedureQueries<T1,T2,T3,T4>("proc_GetPersons");

// 返回五个结果集
var (list1, list2, list3, list4, list5) = _sqlRepository.SqlProcedureQueries<T1,T2,T3,T4,T5>("proc_GetPersons");

// 返回六个结果集
var (list1, list2, list3, list4, list5, list6) = _sqlRepository.SqlProcedureQueries<T1,T2,T3,T4,T5,T6>("proc_GetPersons");

// 返回七个结果集
var (list1, list2, list3, list4, list5, list6, list7) = _sqlRepository.SqlProcedureQueries<T1,T2,T3,T4,T5,T6,T7>("proc_GetPersons");

// 返回八个结果集
var (list1, list2, list3, list4, list5, list6, list7, list8) = _sqlRepository.SqlProcedureQueries<T1,T2,T3,T4,T5,T6,T7,T8>("proc_GetPersons");

// ==================================

// ISqlDispatchProxy 方式,推荐方式,自动处理多个结果集

// 返回一个结果集
var list1 = _sqlRepository.GetDatas();

// 返回两个结果集
var (list1, list2) = _sqlRepository.GetDatas();

// 返回三个结果集
var (list1, list2, list3) = _sqlRepository.GetDatas();

// 返回四个结果集
var (list1, list2, list3, list4) = _sqlRepository.GetDatas();

// 返回五个结果集
var (list1, list2, list3, list4, list5) = _sqlRepository.GetDatas();

// 返回六个结果集
var (list1, list2, list3, list4, list5, list6) = _sqlRepository.GetDatas();

// 返回七个结果集
var (list1, list2, list3, list4, list5, list6, list7) = _sqlRepository.GetDatas();

// 返回八个结果集
var (list1, list2, list3, list4, list5, list6, list7, list8) = _sqlRepository.GetDatas();

// ==================================

// 实体仓储方式

// 返回一个结果集
var list1 = _personRepository.SqlProcedureQueries<T1>("proc_GetPersons");

// 返回两个结果集
var (list1, list2) = _personRepository.SqlProcedureQueries<T1,T2>("proc_GetPersons");

// 返回三个结果集
var (list1, list2, list3) = _personRepository.SqlProcedureQueries<T1,T2,T3>("proc_GetPersons");

// 返回四个结果集
var (list1, list2, list3, list4) = _personRepository.SqlProcedureQueries<T1,T2,T3,T4>("proc_GetPersons");

// 返回五个结果集
var (list1, list2, list3, list4, list5) = _personRepository.SqlProcedureQueries<T1,T2,T3,T4,T5>("proc_GetPersons");

// 返回六个结果集
var (list1, list2, list3, list4, list5, list6) = _personRepository.SqlProcedureQueries<T1,T2,T3,T4,T5,T6>("proc_GetPersons");

// 返回七个结果集
var (list1, list2, list3, list4, list5, list6, list7) = _personRepository.SqlProcedureQueries<T1,T2,T3,T4,T5,T6,T7>("proc_GetPersons");

// 返回八个结果集
var (list1, list2, list3, list4, list5, list6, list7, list8) = _personRepository.SqlProcedureQueries<T1,T2,T3,T4,T5,T6,T7,T8>("proc_GetPersons");

// ==================================

// IRepository 非泛型方式

// 返回一个结果集
var list1 = _repository.Sql().SqlProcedureQueries<T1>("proc_GetPersons");

// 返回两个结果集
var (list1, list2) = _repository.Sql().SqlProcedureQueries<T1,T2>("proc_GetPersons");

// 返回三个结果集
var (list1, list2, list3) = _repository.Sql().SqlProcedureQueries<T1,T2,T3>("proc_GetPersons");

// 返回四个结果集
var (list1, list2, list3, list4) = _repository.Sql().SqlProcedureQueries<T1,T2,T3,T4>("proc_GetPersons");

// 返回五个结果集
var (list1, list2, list3, list4, list5) = _repository.Sql().SqlProcedureQueries<T1,T2,T3,T4,T5>("proc_GetPersons");

// 返回六个结果集
var (list1, list2, list3, list4, list5, list6) = _repository.Sql().SqlProcedureQueries<T1,T2,T3,T4,T5,T6>("proc_GetPersons");

// 返回七个结果集
var (list1, list2, list3, list4, list5, list6, list7) = _repository.Sql().SqlProcedureQueries<T1,T2,T3,T4,T5,T6,T7>("proc_GetPersons");

// 返回八个结果集
var (list1, list2, list3, list4, list5, list6, list7, list8) = _repository.Sql().SqlProcedureQueries<T1,T2,T3,T4,T5,T6,T7,T8>("proc_GetPersons");

// ==================================

// 变态懒人方式,直接通过存储过程名执行

// 返回一个结果集
var list1 = "proc_GetPersons".SqlProcedureQueries<T1>();

// 返回两个结果集
var (list1, list2) = "proc_GetPersons".SqlProcedureQueries<T1,T2>();

// 返回三个结果集
var (list1, list2, list3) = "proc_GetPersons".SqlProcedureQueries<T1,T2,T3>();

// 返回四个结果集
var (list1, list2, list3, list4) = "proc_GetPersons".SqlProcedureQueries<T1,T2,T3,T4>();

// 返回五个结果集
var (list1, list2, list3, list4, list5) = "proc_GetPersons".SqlProcedureQueries<T1,T2,T3,T4,T5>();

// 返回六个结果集
var (list1, list2, list3, list4, list5, list6) = "proc_GetPersons".SqlProcedureQueries<T1,T2,T3,T4,T5,T6>();

// 返回七个结果集
var (list1, list2, list3, list4, list5, list6, list7) = "proc_GetPersons".SqlProcedureQueries<T1,T2,T3,T4,T5,T6,T7>();

// 返回八个结果集
var (list1, list2, list3, list4, list5, list6, list7, list8) = "proc_GetPersons".SqlProcedureQueries<T1,T2,T3,T4,T5,T6,T7,T8>();
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.13.2.6 返回 单行单列 object

// ISqlRepository 方法
var value = _sqlRepository.SqlProcedureScalar("proc_GetName");

// ISqlDispatchProxy 方式
var value = _sqlExecuteProxy.GetName(); // 推荐方式

// 实体仓储方式
var value = _personRepository.SqlProcedureScalar("proc_GetName");

// IRepository 非泛型方式
var value = _repository.Sql().SqlProcedureScalar("proc_GetName");

// 变态懒人方式,直接通过存储过程名执行
var value = "proc_GetName".SqlProcedureScalar();
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.13.2.7 返回 单行单列 <T>

// ISqlRepository 方法
var value = _sqlRepository.SqlProcedureScalar<string>("proc_GetName");

// ISqlDispatchProxy 方式
var value = _sqlExecuteProxy.GetName(); // 推荐方式

// 实体仓储方式
var value = _personRepository.SqlProcedureScalar<string>("proc_GetName");

// IRepository 非泛型方式
var value = _repository.Sql().SqlProcedureScalar<string>("proc_GetName");

// 变态懒人方式,直接通过存储过程名执行
var value = "proc_GetName".SqlProcedureScalar<string>();
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.13.2.8 执行但无返回

// ISqlRepository 方法
_sqlRepository.SqlProcedureNonQuery("proc_UpdateData");

// ISqlDispatchProxy 方式
_sqlExecuteProxy.UpdateData(); // 推荐方式

// 实体仓储方式
_personRepository.SqlProcedureNonQuery("proc_UpdateData");

// IRepository 非泛型方式
_repository.Sql().SqlProcedureNonQuery("proc_UpdateData");

// 变态懒人方式,直接通过存储过程名执行
"proc_UpdateData".SqlProcedureNonQuery();
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.13.3 执行复杂存储过程

在存储过程中,有一种例子非常复杂,那就是既有 INPUT 参数,又有 OUTPUT 参数,还有 RETURN 参数,同时还输出 结果集 💥,如:

CREATE PROC PROC_Output
@Id INT, // 输入参数
@Name NVARCHAR(32) OUTPUT, // 输出参数,还带长度
@Age INT OUTPUT // 输出参数
AS
BEGIN
SET @Name = 'Furion Output';

// 输出结果集
SELECT *
FROM dbo.Test
WHERE Id > @Id;

// 输出结果集
SELECT TOP 10
*
FROM dbo.Test;

SET @Age = 27;

// 带 RETURN 返回
RETURN 10;
END;

9.13.3.1 创建参数模型

using Furion.DatabaseAccessor;
using System.Data;

namespace Furion.Application
{
public class ProcOutputModel
{
public int Id { get; set; } // 输入参数

[DbParameter(ParameterDirection.Output, Size = 32)]
public string Name { get; set; } // 输出参数

[DbParameter(ParameterDirection.Output)]
public int Age { get; set; } // 输出参数

[DbParameter(ParameterDirection.ReturnValue)]
public int ReturnValue { get; set; } // 返回值
}
}

9.13.3.2 执行复杂存储过程

  • DataSet 方式
// ISqlRepository 方法
ProcedureOutputResult result = _sqlRepository.SqlProcedureOutput("proc_Complex", new ProcOutputModel{});

// ISqlDispatchProxy 方式
ProcedureOutputResult result = _sqlExecuteProxy.Complex(new ProcOutputModel{}); // 推荐方式

// 实体仓储方式
ProcedureOutputResult result = _personRepository.SqlProcedureOutput("proc_Complex", new ProcOutputModel{});

// IRepository 非泛型方式
ProcedureOutputResult result = _repository.Sql().SqlProcedureOutput("proc_Complex", new ProcOutputModel{});

// 变态懒人方式,直接通过存储过程名执行
ProcedureOutputResult result = "proc_Complex".SqlProcedureOutput(new ProcOutputModel{});
// 获取 OUTPUT 参数值
var outputs = result.OutputValues;

// 获取 RETURN 返回值
var reval = result.ReturnValue;

// 获取返回结果集
var dataSet = result.Result;
  • Tuple<T1,...T8> 方式
// ISqlRepository 方法
ProcedureOutputResult<(List<Test>, List<Test>)> result = _sqlRepository.SqlProcedureOutput<(List<Test>, List<Test>)>("proc_Complex", new ProcOutputModel{});

// ISqlDispatchProxy 方式
ProcedureOutputResult<(List<Test>, List<Test>)> result = _sqlExecuteProxy.Complex(new ProcOutputModel{}); // 推荐方式

// 实体仓储方式
ProcedureOutputResult<(List<Test>, List<Test>)> result = _personRepository.SqlProcedureOutput<(List<Test>, List<Test>)>("proc_Complex", new ProcOutputModel{});

// IRepository 非泛型方式
ProcedureOutputResult<(List<Test>, List<Test>)> result = _repository.Sql().SqlProcedureOutput<(List<Test>, List<Test>)>("proc_Complex", new ProcOutputModel{});

// 变态懒人方式,直接通过存储过程名执行
ProcedureOutputResult<(List<Test>, List<Test>)> result = "proc_Complex".SqlProcedureOutput<(List<Test>, List<Test>)>(new ProcOutputModel{});
// 获取 OUTPUT 参数值
var outputs = result.OutputValues;

// 获取 RETURN 返回值
var reval = result.ReturnValue;

// 获取返回结果集
var (list1,list2) = result.Result;
关于异步

Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。

9.13.3 关于 [DbParameter]

[DbParameter] 特性是用来标注 Sql函数存储过程 参数的,可配置属性:

  • Direction:设置参数方向,ParameterDirection 枚举类型,默认 ParameterDirection.Input
  • DbType:设置参数类型,DbType 枚举类型,无默认
  • Size:设置参数长度的,int 类型

其中 Direction 属性是默认构造函数参数。

9.13.4 关于 ProcedureOutputResult

ProcedureOutputResultProcedureOutputResult<TResult> 是复杂存储过程执行返回模型类,有以下属性:

  • OutputValues:多个输出值,ProcedureOutputValue 类型
  • ReturnValue:返回值,object 类型
  • Result:结果集,非泛型版本是 DataSet类型,否则是 泛型类型

9.13.5 存储过程参数

所有 sql 参数都支持四种方式:

  • DbParameter[]:数组类型
  • new {}:匿名类型
  • new Class{}:强类型类型(支持复杂存储过程参数)
  • Dictionary<string,object> 类型

9.13.6 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-query/index.html b/handbook/build/docs/dbcontext-query/index.html new file mode 100644 index 00000000000..73efcb6d19b --- /dev/null +++ b/handbook/build/docs/dbcontext-query/index.html @@ -0,0 +1,17 @@ + + + + + +9.10 查询操作 | Furion + + + + + +
+

9.10 查询操作

9.10.1 根据主键查询一条

// ==== 同步操作 ====

// 示例一
var person = repository.Find(1);

// 示例二
var person = repository.FindOrDefault(1);

// 示例三
var person = repository.Entities.Find(1);

// ==== 异步操作 ====

// 示例一
var person = await repository.FindAsync(1);

// 示例二
var person = await repository.FindOrDefaultAsync(1);

// 示例三
var person = await repository.Entities.FindAsync(1);

小提示

可以支持多个键查询,如主键、联合键。repository.Find(1, "百小僧");

9.10.2 根据条件查询一条

// ==== 同步操作 ====

// 示例一
var person = repository.Single(u => u.Name == "Furion");

// 示例二
var person = repository.SingleOrDefault(u => u.Name == "Furion");

// 示例三
var person = repository.First(u => u.Name == "Furion");

// 示例四
var person = repository.FirstOrDefault(u => u.Name == "Furion");

// 示例五
var person = repository.Last(u => u.Name == "Furion");

// 示例六
var person = repository.LastOrDefault(u => u.Name == "Furion");

// 示例七
var person = repository.Entities.Single(u => u.Name == "Furion");

// 示例八
var person = repository.Entities.First(u => u.Name == "Furion");

// 示例九
var person = repository.Entities.FirstOrDefault(u => u.Name == "Furion");

// 示例十
var person = repository.Entities.Last(u => u.Name == "Furion");

// 示例十一
var person = repository.Entities.LastOrDefault(u => u.Name == "Furion");

// ==== 异步操作 ====

// 示例一
var person = await repository.SingleAsync(u => u.Name == "Furion");

// 示例二
var person = await repository.SingleOrDefaultAsync(u => u.Name == "Furion");

// 示例三
var person = await repository.FirstAsync(u => u.Name == "Furion");

// 示例四
var person = await repository.FirstOrDefaultAsync(u => u.Name == "Furion");

// 示例五
var person = await repository.LastAsync(u => u.Name == "Furion");

// 示例六
var person = await repository.LastOrDefaultAsync(u => u.Name == "Furion");

// 示例七
var person = await repository.Entities.SingleAsync(u => u.Name == "Furion");

// 示例八
var person = await repository.Entities.FirstAsync(u => u.Name == "Furion");

// 示例九
var person = await repository.Entities.FirstOrDefaultAsync(u => u.Name == "Furion");

// 示例十
var person = await repository.Entities.LastAsync(u => u.Name == "Furion");

// 示例十一
var person = await repository.Entities.LastOrDefaultAsync(u => u.Name == "Furion");

9.10.3 查询所有数据

// ==== 同步操作 ====

// 示例一
var persons = repository.Entities;

// 示例二
var persons = repository.DetachedEntities;

// 示例三
var persons = repository.AsQueryable();

// 示例四
var persons = repository.AsEnumerable();

// 示例五
var persons = await repository.AsQueryable().ToListAsync();

9.10.4 根据条件查询所有数据

// 示例一
var persons = repository.Where(u => u.Id > 10);

// 示例二
var persons = repository.Where(u => u.Id > 10 && u.Name.Equals("Furion"));

// 示例三 (多个 where 里是 "并且",Id>10 and Name == "Furion")
var persons = repository.Where(u => u.Id > 10).Where(u => u.Name.Equals("Furion"));

// 示例四 (判断 name 是否有值,如果 name 是空的则不会执行 u => u.Id > 10 && u.Name.Equals("Furion"),如果 name 有值就会执行 u => u.Id > 10 && u.Name.Equals("Furion"))
var persons = repository.Where(!string.IsNullOrEmpty(name), u => u.Id > 10 && u.Name.Equals("Furion"));

// 示例五
var persons = repository.Where(!string.IsNullOrEmpty(name), u => u.Id > 10)
.Where(age > 18, u => u.Name.Contains("百小僧"))
.Where(u => u.Age > 18);

// 示例六 (在一个 where 里用逗号分隔是 "或者",Name=="Furion" or Name == "百小僧" or Name == "MonkSoul")
var persons = repository.Where(u => u.Name == "Furion",
u => u.Name == "百小僧",
u => u.Name == "MonkSoul");

// 示例七
var persons = repository.Where(u => u.Id > 10).Where(u => u.Name.Equals("Furion"))
.Where(age > 18, u => u.Name.Contains("百小僧"))
.Where(u => u.Name == "Furion",
u => u.Name == "百小僧",
u => u.Name == "MonkSoul");

// 示例八
var persons = repository.Where((age > 18, u => u.Name == "Furion"),
(!string.IsNullOrEmpty(name), u => u.Id > 10));

// 示例九
var persons = repository.Where(u => u.Id > 10).Where(u => u.Name.Equals("Furion"))
.Where(age > 18, u => u.Name.Contains("百小僧"))
.Where(u => u.Name == "Furion",
u => u.Name == "百小僧",
u => u.Name == "MonkSoul")
.Where((age > 18, u => u.Name == "Furion"),
(!string.IsNullOrEmpty(name), u => u.Id > 10));

// 示例十
var persons = repository.Entities.Where(u => u.Id > 10)
.Where(age > 18, u => u.Name.Contains("百小僧"));

// 示例十一
var persons = repository.DetachedEntities.Where(u => u.Id > 20);

// 示例十二
var persons = repository.AsQueryable(u => u.Id > 20).Where(u => u.Name == "Furion");

9.10.5 分页查询

// ==== 同步操作 ====

// 示例一
var persons = repository.Where(u => u.Id > 10).ToPagedList();

// 示例二
var persons = repository.Where(u => u.Id > 10).ToPagedList(1, 10);

// ==== 异步操作 ====

// 示例一
var persons = await repository.Where(u => u.Id > 10).ToPagedListAsync();

// 示例二
var persons = await repository.Where(u => u.Id > 10).ToPagedListAsync(1, 10);

9.10.6 其他查询

9.10.6.1 查看记录是否存在

// ==== 同步操作 ====

// 示例一
var isExists = repository.Any();

// 示例二
var isExists = repository.Any(u => u.Id > 10);

// 示例三
var isExists = repository.Entities.Any();

// 示例四
var isExists = repository.DetachedEntities.Any(u => u.Id > 10);

// 示例五
var isExists = repository.Where(u => u.Id > 10).Any();

// ==== 异步操作 ====

// 示例一
var isExists = await repository.AnyAsync();

// 示例二
var isExists = await repository.AnyAsync(u => u.Id > 10);

// 示例三
var isExists = await repository.Entities.AnyAsync();

// 示例四
var isExists = await repository.DetachedEntities.AnyAsync(u => u.Id > 10);

// 示例五
var isExists = await repository.Where(u => u.Id > 10).AnyAsync();

9.10.6.2 查询记录数

// ==== 同步操作 ====

// 示例一
var count = repository.Count();

// 示例二
var count = repository.Count(u => u.Id > 10);

// 示例三
var count = repository.Entities.Count(u => u.Id > 10);

// 示例四
var count = repository.Entities.DetachedEntities.Count();

// 示例五
var count = repository.Where(u => u.Id > 10).Count();

// ==== 异步操作 ====

// 示例一
var count = await repository.CountAsync();

// 示例二
var count = await repository.CountAsync(u => u.Id > 10);

// 示例三
var count = await repository.Entities.CountAsync(u => u.Id > 10);

// 示例四
var count = await repository.Entities.DetachedEntities.CountAsync();

// 示例五
var count = await repository.Where(u => u.Id > 10).CountAsync();

9.10.6.3 查询最大值

// ==== 同步操作 ====

// 示例一
var entity = repository.Max();

// 示例二
var value = repository.Max(u => u.Id);

// 示例三
var entity = repository.Entities.Max();

// 示例四
var value = repository.Entities.DetachedEntities.Max(u => u.Age);

// 示例五
var value = repository.Where(u => u.Id > 10).Max(u => u.Age);

// ==== 异步操作 ====

// 示例一
var entity = await repository.MaxAsync();

// 示例二
var value = await repository.MaxAsync(u => u.Id);

// 示例三
var entity = await repository.Entities.MaxAsync();

// 示例四
var value = await repository.Entities.DetachedEntities.MaxAsync(u => u.Age);

// 示例五
var value = await repository.Where(u => u.Id > 10).MaxAsync(u => u.Age);

9.10.6.4 查询最小值

// ==== 同步操作 ====

// 示例一
var entity = repository.Min();

// 示例二
var value = repository.Min(u => u.Id);

// 示例三
var entity = repository.Entities.Min();

// 示例四
var value = repository.Entities.DetachedEntities.Min(u => u.Age);

// 示例五
var value = repository.Where(u => u.Id > 10).Min(u => u.Age);

// ==== 异步操作 ====

// 示例一
var entity = await repository.MinAsync();

// 示例二
var value = await repository.MinAsync(u => u.Id);

// 示例三
var entity = await repository.Entities.MinAsync();

// 示例四
var value = await repository.Entities.DetachedEntities.MinAsync(u => u.Age);

// 示例五
var value = await repository.Where(u => u.Id > 10).MinAsync(u => u.Age);

9.10.6.5 求和查询

// ==== 同步操作 ====

// 示例一
var sum = repository.Entities.Sum(u => u.Cost);

// 示例二
var sum = repository.AsQueryable().Sum(u => u.Cost);

// 示例三
var sum = repository.DetachedEntities.Sum(u => u.Cost);

// ==== 异步操作 ====

// 示例一
var sum = await repository.Entities.SumAsync(u => u.Cost);

// 示例二
var sum = await repository.AsQueryable().SumAsync(u => u.Cost);

// 示例三
var sum = await repository.DetachedEntities.SumAsync(u => u.Cost);

9.10.6.6 求平均值查询

// ==== 同步操作 ====

// 示例一
var sum = repository.Entities.Average(u => u.Cost);

// 示例二
var sum = repository.AsQueryable().Average(u => u.Cost);

// 示例三
var sum = repository.DetachedEntities.Average(u => u.Cost);

// ==== 异步操作 ====

// 示例一
var sum = await repository.Entities.AverageAsync(u => u.Cost);

// 示例二
var sum = await repository.AsQueryable().AverageAsync(u => u.Cost);

// 示例三
var sum = await repository.DetachedEntities.AverageAsync(u => u.Cost);

9.10.6.7 时间查询

var starDate = DateTime.Parse("2020-09-10");
var endDate = DateTime.Parse("2020-09-10");
var query = repository.Where(u => u.CreatedDt >= starDate && u.CreatedDt <= endDate);

9.10.6.8 模糊查询

// 示例一
repository.Where(u => u.Name.StartsWith("Furion"));

// 示例二
_testRepository.Where(u => u.Name.EndsWith("Furion"));

// 示例三
_testRepository.Where(u => u.Name.Contains("Furion"));

9.10.6.9 Case When

数据库中的 Case When 实际上对应的是我们程序中的 三元表达式 ,也就是使用 三元表达式 即可自动生成 Case When 语句。

9.10.7 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-read-write/index.html b/handbook/build/docs/dbcontext-read-write/index.html new file mode 100644 index 00000000000..e6e58f6864d --- /dev/null +++ b/handbook/build/docs/dbcontext-read-write/index.html @@ -0,0 +1,18 @@ + + + + + +9.27 读写分离/主从复制 | Furion + + + + + +
+

9.27 读写分离/主从复制

9.27.1 读写分离

其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。

9.27.1.1 解决了什么问题

大多数互联网业务,往往读多写少,这时候,数据库的读会首先成为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用“分组架构”(读写分离架构)。

用一句话概括,读写分离是用来解决数据库的读性能瓶颈的。

9.27.1.2 注意事项

  • 数据库连接池要进行区分,哪些是读连接池,哪个是写连接池,研发的难度会增加;
  • 为了保证高可用,读连接池要能够实现故障自动转移;
  • 主从的一致性问题需要考虑。

9.27.2 如何实现

Furion 在数据库模块设计之初,就考虑了读写分离这种情况,所以从底层就支持动态切换数据库上下文及读写操作方法约束。

读写分离操作主要使用 IMSRepository 仓储,该仓储已经为开发者提供方便的操作调用。当然也可以不使用该仓储。

下面就给大家演示如何读写多库读写操作。

9.27.2.1 创建 主库 数据库上下文

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
/// <summary>
/// 主库数据库上下文
/// </summary>
[AppDbContext("MasterConnectionString")]
public class MasterDbContext : AppDbContext<MasterDbContext>
{
public MasterDbContext(DbContextOptions<MasterDbContext> options) : base(options)
{
}
}
}

数据库连接字符串:

{
"ConnectionStrings": {
"MasterConnectionString": "Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;"
}
}

9.27.2.2 创建 从库 数据库上下文

using Furion.Core;
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
/// <summary>
/// 从库数据库上下文
/// </summary>
[AppDbContext("SlaveConnectionString")]
public class SlaveDbContext : AppDbContext<SlaveDbContext, SlaveDbContextLocator>
{
public SlaveDbContext(DbContextOptions<SlaveDbContext> options) : base(options)
{
}
}
}
特别注意

多数据库操作除了默认数据库无需自定义 数据库上下文定位器,其他数据库都需要有数据库上下文定位器。如 SlaveDbContextLocator

从库数据库上下文定位器:

using Furion.DatabaseAccessor;

namespace Furion.Core
{
/// <summary>
/// 从库数据库上下文定位器
/// </summary>
public class SlaveDbContextLocator : IDbContextLocator
{
}
}

数据库连接字符串:

{
"ConnectionStrings": {
"SlaveConnectionString": "Server=localhost;Database=FurSlave;User=sa;Password=000000;MultipleActiveResultSets=True;"
}
}

9.27.2.3 注册 主从库 数据库上下文

using Furion.Core;
using Microsoft.Extensions.DependencyInjection;

namespace Furion.EntityFramework.Core
{
[AppStartup(600)]
public sealed class FurEntityFrameworkCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDatabaseAccessor(options =>
{
services.AddDbPool<MasterDbContext>();
services.AddDbPool<SlaveDbContext, SlaveDbContextLocator>();
});
}
}
}

9.27.2.4 创建 Person 实体

由于 主从库 具有相同的数据库结构,所以实体也必须声明 主从库

using Furion.DatabaseAccessor;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Furion.Core
{
public class Person : IEntity<MasterDbContextLocator, SlaveDbContextLocator>
{
/// <summary>
/// 主键Id
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }

/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
}
}

9.27.2.5 将 Person 转换成数据库表

创建主库数据库表:

Add-Migration v0.0.1 -Context MasterDbContext
Update-Database -Context MasterDbContext

创建从库数据库表:

Add-Migration v0.0.1 -Context SlaveDbContext
Update-Database -Context SlaveDbContext

9.27.2.6 固定主从库使用例子

using Furion.Core;
using Furion.DatabaseAccessor;
using Furion.DynamicApiController;
using System.Collections.Generic;

namespace Furion.Application
{
public class PersonService : IDynamicApiController
{
/// <summary>
/// 可调配仓储(读写分离)
/// </summary>
private readonly IMSRepository<MasterDbContextLocator, SlaveDbContextLocator> _msRepository;

/// <summary>
/// 构造函数初始化
/// </summary>
/// <param name="msRepository"></param>
public PersonService(IMSRepository<MasterDbContextLocator, SlaveDbContextLocator> msRepository)
{
_msRepository = msRepository;
}

/// <summary>
/// 新增走主库
/// </summary>
/// <param name="person"></param>
/// <returns></returns>
public void Insert(Person person)
{
_msRepository.Master<Person>().Insert(person);
}

/// <summary>
/// 查询走从库
/// </summary>
/// <returns></returns>
public List<Person> Get()
{
return _msRepository.Slave1<Person>().AsEnumerable().ToList();
}
}
}

9.27.2.7 随机自定义返回从库 ✨

Furion 2.4.1 + 版本新增了 IMSRepositoryIMSRepository<TMasterDbContextLocator> 仓储类型,可以获取随机仓储或自定义仓储。使用例子如下:

  • 配置 主库 [AppDbContext] 特性的 SlaveDbContextLocators 属性,可通过构造函数最后参数传入,如:
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite, typeof(从库定位器1), typeof(从库定位器2), typeof(从库定位器3))]
public class MasterDbContext : AppDbContext<MasterDbContext>
{
public MasterDbContext(DbContextOptions<MasterDbContext> options) : base(options)
{
}
}
}
  • 使用 IMSRepositoryIMSRepository<TMasterDbContextLocator>
using Furion.Core;
using Furion.DatabaseAccessor;
using Furion.DynamicApiController;
using System.Collections.Generic;

namespace Furion.Application
{
public class PersonService : IDynamicApiController
{
/// <summary>
/// 可调配仓储(读写分离)
/// </summary>
private readonly IMSRepository _msRepository; // 不指定定位器,默认是 MasterDbContextLocator

/// <summary>
/// 构造函数初始化
/// </summary>
/// <param name="msRepository"></param>
public PersonService(IMSRepository msRepository)
{
_msRepository = msRepository;
}

/// <summary>
/// 新增走主库
/// </summary>
/// <param name="person"></param>
/// <returns></returns>
public void Insert(Person person)
{
_msRepository.Master<Person>().Insert(person);
}

/// <summary>
/// 随机从库
/// </summary>
/// <returns></returns>
public List<Person> Get()
{
return _msRepository.Slave<Person>().AsEnumerable().ToList();
}

/// <summary>
/// 自定义从库
/// </summary>
/// <returns></returns>
public List<Person> Get()
{
return _msRepository.Slave<Person>(() => {
// 这里写你的逻辑返回从库定位器

return 你的从库定位器;
}).AsEnumerable().ToList();
}
}
}
特别说明

IMSRepository 不带泛型默认指的是 IMSRepository<TMasterDbContextLocator>,如需泛型版本,则使用 IMSRepository<定位器>

9.27.3 主从复制

主从复制:是一种数据备份的方案。

简单来说,是使用两个或两个以上相同的数据库,将一个数据库当做主数据库,而另一个数据库当做从数据库。在主数据库中进行相应操作时,从数据库记录下所有主数据库的操作,使其二者一模一样。

9.27.4 主从复制几种方式

9.27.4.1 同步复制

所谓的同步复制,意思是 Master 的变化,必须等待 Slave-1,Slave-2,...,Slave-n 完成后才能返回。 +这样,显然不可取,比如,在 Web 前端页面上,用户增加了条记录,需要等待很长时间。

9.27.4.2 异步复制

如同 AJAX 请求一样。Master 只需要完成自己的数据库操作即可。至于 Slaves 是否收到二进制日志,是否完成操作,不用关心。(推荐方式)

9.27.4.3 半同步复制

Master 只保证 Slaves 中的一个操作成功,就返回,其他 Slave 不管。

下面将使用 SqlServer 简单配置主从复制功能。

9.27.5 SqlServer 主库配置

9.27.5.1 添加 本地发布

9.27.5.2 选择 分发服务器

9.27.5.3 启用 代理

9.27.5.4 发布数据库

9.27.5.5 快照发布

具体选择何种发布类型,视具体业务场景而定。

9.27.5.6 选择发布项目

9.27.5.7 配置分发计划

9.27.5.8 配置安全设置

9.27.5.9 完成配置

9.27.6 SqlServer 从库配置

9.27.6.1 添加 本地订阅

9.27.6.2 选择 分发服务器

9.27.6.3 选择 分发代理位置

9.27.6.4 选择 订阅数据库

9.27.6.5 选择 分发安全设置

9.27.6.6 选择 同步计划

9.27.6.7 完成订阅

9.27.7 分发定义监视

9.27.8 查看主从复制结果

特别特性

主从复制有一定迟延性,所以系统设计要有一定“容忍性"。

9.27.9 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-repository/index.html b/handbook/build/docs/dbcontext-repository/index.html new file mode 100644 index 00000000000..4438e74de26 --- /dev/null +++ b/handbook/build/docs/dbcontext-repository/index.html @@ -0,0 +1,17 @@ + + + + + +9.4 仓储模式 | Furion + + + + + +
+

9.4 仓储模式

9.4.1 什么是仓储

在领域层和数据映射层的中介,使用类似集合的接口来存取领域对象,实际上,仓储被用于领域对象在数据库上的操作(实体 Entity 和值对象 Value types)。一般来说,我们针对不同的实体(或聚合根 Aggregate Root)会创建相对应的仓储。

简单来说,仓储就是数据存取操作的载体,但不限定于数据库。

9.4.2 内置仓储

Furion 框架内置了一个数据库操作的仓储,方便大家拓展和集成:

关于依赖注入说明

目前能够被依赖注入解析服务的仓储有:

  • IRepository
  • IRepository<TEntity>
  • IRepository<TEntity, TDbContextLocator>
  • ISqlRepository
  • ISqlRepository<TDbContextLocator>
  • IMSRepository
  • IMSRepository<TMasterDbContextLocator>
  • IMSRepository<TMasterDbContextLocator,...TSlaveDbContextLocator8>
  • IDbRepository<TDbContextLocator>

还有两个私有仓储,也是所有仓储的基类(用于高级自定义开发)

  • IPrivateRepository<TEntity>:所有实体仓储的基类
  • IPrivateSqlRepository:所有数据库操作的基类

除此之后的所有仓储只能通过 rep.Constraint<TRepository>() 进行约束创建,如,只读仓储:

var readRepository = rep.Constraint<IReadableRepository<TEntity>>();

9.4.2.1 非泛型超级仓储

  • IRepository:默认非泛型仓储接口,支持切换到任何仓储
  • EFCoreRepository:默认非泛型仓储实现

9.4.2.2 泛型实体仓储

  • IRepository<TEntity>:默认数据库实体仓储接口
  • EFCoreRepository<TEntity>:默认数据库实体仓储实现

9.4.2.3 泛型多数据库实体仓储

  • IRepository<TEntity, TDbContextLocator>:任意数据库的实体仓储接口
  • EFCoreRepository<TEntity, TDbContextLocator>:任意数据库的实体仓储实现

9.4.2.4 Sql 操作仓储

  • ISqlRepository:默认数据库 Sql 操作仓储接口
  • SqlRepository:默认数据库 Sql 操作仓储实现

9.4.2.5 多数据库 Sql 操作仓储

  • ISqlRepository<TDbContextLocator>:任意数据库的 Sql 操作仓储接口
  • SqlRepository<TDbContextLocator>:任意数据库的 Sql 操作仓储实现

9.4.2.6 只读实体仓储(支持多库)

  • IReadableRepository<TEntity>:默认数据库只读实体仓储接口
  • IReadableRepository<TEntity, TDbContextLocator>:多数据库只读实体仓储实现

9.4.2.7 只写实体仓储(支持多库)

  • IWritableRepository<TEntity>:默认数据库只写实体仓储接口
  • IWritableRepository<TEntity, TDbContextLocator>:多数据库只写实体仓储实现

9.4.2.8 只允许新增实体仓储(支持多库)

  • IInsertableRepository<TEntity>:默认数据库只允许新增的实体仓储接口
  • IInsertableRepository<TEntity, TDbContextLocator>:多数据库只允许新增的实体仓储实现

9.4.2.9 只允许更新实体仓储(支持多库)

  • IUpdateableRepository<TEntity>:默认数据库只允许更新的实体仓储接口
  • IUpdateableRepository<TEntity, TDbContextLocator>:多数据库只允许更新的实体仓储实现

9.4.2.10 只允许删除实体仓储(支持多库)

  • IDeletableRepository<TEntity>:默认数据库只允许删除的实体仓储接口
  • IDeletableRepository<TEntity, TDbContextLocator>:多数据库只允许删除的实体仓储实现

9.4.2.11 只允许拓展操作实体仓储(支持多库)

功能移除声明

该功能在 Furion 2.5.1 + 版本中已移除。此操作让很多不了解 EFCore 的开发者产生了很大的误解,不知何时新增或何时更新,故移除此功能。

  • IOperableRepository<TEntity>:默认数据库只允许拓展操作实体仓储接口
  • IOperableRepository<TEntity, TDbContextLocator>:多数据库只允许拓展操作实体仓储实现

9.4.2.12 只允许 Sql 查询仓储(支持多库)

  • ISqlReaderRepository:默认数据库只允许 Sql 查询仓储接口
  • ISqlReaderRepository<TDbContextLocator>:多数据库只允许 Sql 查询仓储实现

9.4.2.13 只允许 Sql 非查询仓储(支持多库)

  • ISqlExecutableRepository:默认数据库只允许 Sql 非查询仓储接口
  • ISqlExecutableRepository<TDbContextLocator>:多数据库只允许 Sql 非查询仓储实现

9.4.2.14 读写分离仓储

  • IMSRepository:最多支持 一主 7 从 仓储

9.4.2.15 定位器仓储

  • IDbRepository<TDbContextLocator>:初始化特定数据库仓储

9.4.3 仓储使用

Furion 提供了非常多的方式创建仓储,目的是为了让大家可以在不同的场景中使用。

9.4.3.1 构造函数注入

private readonly IRepository<Person> _personRepository;
public FurionService(IRepository<Person> personRepository)
{
_personRepository = personRepository;
}

9.4.3.2 方法参数注入

public async Task<List<PersonDto>> GetAll([FromServices] IRepository<Person> repository, string keyword)
{
var persons = await repository.AsQueryable().ToListAsync();
return persons.Adapt<List<PersonDto>>();
}

9.4.3.3 Db.GetRepository 获取

// 非泛型仓储
var repository = Db.GetRepository();

// 泛型仓储
var repository = Db.GetRepository<Person>();

// Sql 仓储
var sqlRepository = Db.GetSqlRepository();
特别说明

不管采用哪种方式,Furion 都保证了仓储一次请求唯一性。同时 Db.GetRepository<TEntity>() 方式支持任何静态类中使用。

9.4.4 仓储高级用法

9.4.4.1 动态切换实体仓储

var userRepository = personRepository.Change<User>();

9.4.4.2 动态切换仓储类型

比如,读写分离/主从库仓储:

// 只读仓储
var readRepository = personRepository.Constraint<IReadableRepository<User>>();

// 只写仓储
var writeRepository = personRepository.Constraint<IWritableRepository<User>>();
小知识

.Constraint 支持切换任何仓储类型。

9.4.4.3 获取 Sql 操作仓储

var sqlRepository = repository.Sql();

9.4.5 多数据库操作

Furion 通过 DbContextLocator 数据库上下文定位器实现多种数据库操作,可以随意切换数据库

9.4.5.1 动态切换多个数据库

动态切换数据库

// 切换到 MSSQL 操作 Person表
var mssqlRepository = repository.Change<Person, MsSqlDbContextLocator>();

// 切换到 MySql 操作 Person表
var mysqlRepository = repository.Change<Person, MySqlDbContextLocator>();

// 切换到 Sqlite 操作 Person表
var sqliteRepository = repository.Change<Person, SqliteDbContextLocator>();

// 其他更多数据库一样的操作

另外任何仓储或实体配置都支持多个数据库同时操作

仓储方式

IRepository<Person, MsSqlDbContextLocator> mssqlRepository

ISqlRepository<MsSqlDbContextLocator> mssqlRepository;

动态 sql 方式

"select * from person".Change<MsSqlDbContextLocator>().SqlQuery();

实体配置方式

public class User:Entity<int, MsSqlDbContextLocator, MySqlDbContextLocator>
{
}

Sql 代理方式

[SqlFunction("funcName", DbContextLocator = typeof(MySqlDbContextLocator))]
int GetAge(int id);

Linq 中方式

[QueryableFunction("funcName","dbo", DbContextLocator = typeof(MySqlDbContextLocator))]
string GetName()=> throw Oops.Oh("不支持该数据库操作");

9.4.6 在后台任务中使用

由于 DbContext 默认注册为 Scoped 生存周期,所以在后台任务中使用 IServiceScopeFactory 获取所有服务,如:

public class JobService : BackgroundService
{
// 日志对象
private readonly ILogger<JobService> _logger;

// 服务工厂
private readonly IServiceScopeFactory _scopeFactory;
public JobService(ILogger<JobService> logger
, IServiceScopeFactory scopeFactory)
{
_logger = logger;
_scopeFactory = scopeFactory;
}

protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("写日志~~");

using (var scope = _scopeFactory.CreateScope())
{
var services = scope.ServiceProvider;

// 获取数据库上下文
var dbContext = Db.GetDbContext(services);

// 获取仓储
var respository = Db.GetRepository<Person>(services);

// 解析其他服务
var otherService = services.GetService<XXX>();
}

return Task.CompletedTask;
}
}
数据库操作注意

如果作用域中对数据库有任何变更操作,需手动调用 SaveChanges 或带 Now 结尾的方法。也可以使用 Scoped.CreateUow(handler) 代替。

9.4.7 自定义仓储

有些时候我们需要自定义仓储,拓展现有的仓储功能,可参考以下代码(含定位器仓储和默认仓储实现)

/// <summary>
/// 自定义仓储接口
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <typeparam name="TDbContextLocator"></typeparam>
public interface IMyRepository<TEntity, TDbContextLocator> : IPrivateRepository<TEntity>
where TEntity : class, IPrivateEntity, new()
where TDbContextLocator : class, IDbContextLocator
{
/// <summary>
/// 自定义方法
/// </summary>
void MyMethod();
}

/// <summary>
/// 自定义仓储实现类
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <typeparam name="TDbContextLocator"></typeparam>
public class MyRepository<TEntity, TDbContextLocator> : PrivateRepository<TEntity>, IMyRepository<TEntity, TDbContextLocator>, IScoped
where TEntity : class, IPrivateEntity, new()
where TDbContextLocator : class, IDbContextLocator
{
/// <summary>
/// 实现基类构造函数
/// </summary>
/// <param name="serviceProvider"></param>
public MyRepository(IServiceProvider serviceProvider)
: base(typeof(TDbContextLocator), serviceProvider)
{
}

/// <summary>
/// 自定义方法
/// </summary>
public void MyMethod()
{
throw new System.NotImplementedException();
}
}

/// <summary>
/// 默认数据库自定义仓储接口
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public interface IMyRepository<TEntity> : IMyRepository<TEntity, MasterDbContextLocator>
where TEntity : class, IPrivateEntity, new()
{
}

/// <summary>
/// 默认数据库自定义仓储实现
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public class MyRepository<TEntity> : MyRepository<TEntity, MasterDbContextLocator>, IMyRepository<TEntity>, IScoped
where TEntity : class, IPrivateEntity, new()
{
public MyRepository(IServiceProvider serviceProvider) : base(serviceProvider)
{
}
}

9.4.8 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-seed-data/index.html b/handbook/build/docs/dbcontext-seed-data/index.html new file mode 100644 index 00000000000..e6efd3d29e7 --- /dev/null +++ b/handbook/build/docs/dbcontext-seed-data/index.html @@ -0,0 +1,17 @@ + + + + + +9.21 实体种子数据 | Furion + + + + + +
+

9.21 实体种子数据

特别提醒

一旦定义了种子数据或改变了种子数据,需要重新执行 Add-MigrationUpdate-Database 命令。

9.21.1 什么是种子数据

Furion 框架中,种子数据通常指的是通过程序为数据库预先设置一些初始化数据,比如我们的数据字典表,我们可能希望在系统构建初期就自动将一些规范化数据保存到数据库中。

如性别:男/女,地区,行业信息等等。

9.21.2 如何配置

Furion 提供非常灵活方便的 IEntitySeedData<TEntity> 依赖接口可以快速的构建种子数据,支持任何无参构造函数对象类中使用。如我们需要为 Person 表插入初始化数据:

9.21.2.1 在实体定义中使用

using Furion.DatabaseAccessor;
using System;
using System.Collections.Generic;

namespace Furion.Core
{
public class Person : EntityBase, IEntitySeedData<Person>
{
public string Name { get; set; }

public int Age { get; set; }

public string Address { get; set; }

// 配置种子数据
public IEnumerable<Person> HasData(DbContext dbContext, Type dbContextLocator)
{
return new List<Person>
{
new Person { Id = 1, Name = "百小僧", Address = "广东省中山市" },
new Person { Id = 2, Name = "新生帝", Address = "广东省珠海市" }
};
}
}
}
特别注意

主键 值必须手动插入,因为会自动关闭主键或自增标识检查。

9.21.2.2 在任意对象类中使用

using Furion.DatabaseAccessor;
using System.Collections.Generic;

namespace Furion.Application
{
public class PersonSeedData : IEntitySeedData<Person>
{
// 配置种子数据
public IEnumerable<Person> HasData(DbContext dbContext, Type dbContextLocator)
{
return new List<Person>
{
new Person { Id = 1, Name = "百小僧", Address = "广东省中山市" },
new Person { Id = 2, Name = "新生帝", Address = "广东省珠海市" }
};
}
}
}

9.21.3 导航属性

通常我们的实体有 一对多多对多等外键关系,那么我们需要单独为每一个实体添加数据种子,而不是直接写在主表中。

9.21.4 多个数据库种子数据

Furion 提供泛型的方式支持多个数据库种子数据设定,如:

using Furion.DatabaseAccessor;
using System.Collections.Generic;

namespace Furion.Application
{
public class PersonSeedData : IEntitySeedData<Person, MySqlDbContextLocator, SqliteDbContextLocator>
{
// 配置种子数据
public IEnumerable<Person> HasData(DbContext dbContext, Type dbContextLocator)
{
return new List<Person>
{
new Person { Id = 1, Name = "百小僧", Address = "广东省中山市" },
new Person { Id = 2, Name = "新生帝", Address = "广东省珠海市" }
};
}
}
}

上面的例子表示同时为 MySqlDbContextSqliteDbContext 创建种子数据。

9.21.5 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 数据种子 知识可查阅 EF Core - 数据种子设定 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-sql-proxy/index.html b/handbook/build/docs/dbcontext-sql-proxy/index.html new file mode 100644 index 00000000000..b81ddf26e2c --- /dev/null +++ b/handbook/build/docs/dbcontext-sql-proxy/index.html @@ -0,0 +1,17 @@ + + + + + +9.17 Sql 高级代理 | Furion + + + + + +
+

9.17 Sql 高级代理

9.17.1 关于 Sql 代理

Sql 代理是 Furion 框架中对 Sql 操作一个非常重要的概念,通过这种方式可以大大提高 Sql 书写效率,而且后期极易维护。

Sql 代理属于 Furion 框架中一个高级功能。

9.17.2 了解 ISqlDispatchProxy

ISqlDispatchProxy 接口是 Furion 实现被代理接口的唯一依赖,任何公开的接口一旦集成了 ISqlDispatchProxy 接口,那么这个接口就是被托管拦截Sql 操作接口。

简单定义一个 Sql 代理接口

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
}
}

一旦这个接口继承了 ISqlDispatchProxy,那么它就会动态创建接口实例,而且支持依赖注入/控制反转获取实例

9.17.3 开始领略 Sql 代理

下面我将通过多个例子来演示 Sql 代理的用法,为什么推荐这种方式操作 Sql

支持各种方式获取实例:

9.17.3.1 构造函数方式

private readonly ISql _sql;
public FurionService(ISql sql)
{
_sql = sql;
}

9.17.3.2 方法参数注入

public async Task<List<PersonDto>> GetAll([FromServices] ISql, string keyword)
{
}

9.17.3.3 Db.GetSqlDispatchProxy<ISql>()

var sql = Db.GetSqlDispatchProxy<ISql>();

9.17.4 Sql 操作

9.17.4.1 返回 DataTable

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
// 执行sql并传入参数,基元类型
[SqlExecute("select * from person where id >@id and name like @name")]
DataTable GetPerson(int id, string name);

// 执行sql并传入参数,对象类型
[SqlExecute("select * from person where id >@id and name like @name")]
DataTable GetPerson(MyParam paras);

// 执行存储过程 sql,支持设置参数类型
[SqlExecute("exec PROP_NAME @id", CommandType = CommandType.StoredProcedure)]
DataTable GetPerson(int id);

// 支持多数据库操作
[SqlExecute("select * from person"), SqlDbContextLocator(typeof(MySqlDbContextLocator))]
DataTable GetPerson();

// 异步方式
[SqlExecute("select * from person"), SqlDbContextLocator(typeof(MySqlDbContextLocator))]
Task<DataTable> GetPersonAsync();
}
}
关于参数

Sql 代理参数查找规则:

如果方法的参数是 基元类型(或 string值类型),则自动将这些类型组合成 Dictionary<string, object> 作为 Sql 参数。命令参数可使用方法同名参数加 @ 符号。

如果方法的参数是 类类型,那么自动遍历该类公开实例属性生成 DbParameter[] 数组,每一个属性名都将是命令参数,大部分数据库是不区分大小写,个别数据库除外,如 Sqlite,如:

public class MyModel
{
public int Id {get;set;}
public string Name {get; set;}
}

那么 sql 语句可以直接使用属性名作为参数:

select * from person where id > @id and name = @name;

9.17.4.2 返回 List<T>

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
// 执行sql并传入参数,基元类型
[SqlExecute("select * from person where id >@id and name like @name")]
List<Person> GetPerson(int id, string name);

// 执行sql并传入参数,对象类型
[SqlExecute("select * from person where id >@id and name like @name")]
List<Person> GetPerson(MyParam paras);

// 执行存储过程 sql,支持设置参数类型
[SqlExecute("exec PROP_NAME @id", CommandType = CommandType.StoredProcedure)]
List<Person> GetPerson(int id);

// 支持多数据库操作
[SqlExecute("select * from person"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]
List<Person> GetPerson();

// 异步方式
[SqlExecute("select * from person"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]
Task<List<Person>> GetPersonAsync();
}
}

9.17.4.3 返回 DataSet

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
// 执行sql并传入参数,基元类型
[SqlExecute(@"
select * from person where id >@id and name like @name;
select top 10 * from student where Id >@id;")]
DataSet GetData(int id, string name);

// 执行sql并传入参数,对象类型
[SqlExecute(@"
select * from person where id >@id and name like @name;
select top 10 * from student where Id >@id;")]
DataSet GetData(MyParam paras);

// 执行存储过程 sql,支持设置参数类型
[SqlExecute(@"
exec PROP_NAME @id;
select * from person;", CommandType = CommandType.StoredProcedure)]
DataSet GetData(int id);

// 支持多数据库操作
[SqlExecute(@"
select * from person;
select * from student;"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]
DataSet GetData();

// 异步方式
[SqlExecute(@"
select * from person;
select * from student;
select 1;"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]
Task<DataSet> GetDataAsync());
}
}

9.17.4.4 返回 Tuple<T1,...T8>

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
// 执行sql并传入参数,基元类型
[SqlExecute(@"
select * from person where id >@id and name like @name;
select top 10 * from student where Id >@id;")]
(List<Person>,List<Student>) GetData(int id, string name);

// 执行sql并传入参数,对象类型
[SqlExecute(@"
select * from person where id >@id and name like @name;
select top 10 * from student where Id >@id;")]
(List<Person>,List<Student>) GetData(MyParam paras);

// 执行存储过程 sql,支持设置参数类型
[SqlExecute(@"
exec PROP_NAME @id;
select * from person;", CommandType = CommandType.StoredProcedure)]
(List<Person>,List<Student>) GetData(int id);

// 支持多数据库操作
[SqlExecute(@"
select * from person;
select * from student;"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]
(List<Person>,List<Student>) GetData();

// 异步方式
[SqlExecute(@"
select * from person;
select * from student;
select 1;"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]
Task<(List<Person>,List<Student>,List<int>)> GetDataAsync();

// 自 v3.7.3+ 版本支持返回单个类类型参数
[SqlExecute(@"
select * from person where id =@id;
select * from person")]
(Person, List<Person>) GetData(int id); // 注意返回值是 `(Person, List<Person>)` 组合
}

9.17.4.5 返回 单行单列

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
[SqlExecute("select Name from person where id = @id")]
string GetValue(int id);

[SqlExecute("select age from person where id = @id")]
int GetValue(int id);

[SqlExecute("select Name from person where id = @id")]
Task<string> GetValueAsync(int id);
}
}

9.17.4.6 无返回值

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
[SqlExecute("insert into person(Name,Age) values(@name,@age)")]
void Insert(MyParam dto);

[SqlExecute("delete from person where id = @id")]
void Delete(int id);

[SqlExecute("update person set name=@name where id=@id")]
void Update(int id, string name);
}
}

9.17.4.7 返回单个类类型参数

版本说明

以下内容仅限 Furion 3.7.1 + 版本使用。

public interface ISql : ISqlDispatchProxy
{
// 自 v3.7.3+ 版本支持返回单个类类型参数
[SqlExecute("select * from person where id=@id")]
Person GetPerson(int id);
}

9.17.4.8 返回受影响行数

版本说明

以下内容仅限 Furion 4.4.5 + 版本使用。

需要在 [SqlExcuete] 特性中标记 RowEffects = true 且返回值是 int 或者 Task<int>

public interface ISql : ISqlDispatchProxy
{
// 同步
[SqlExecute("update person set age = 30 where id = {id}", RowEffects = true)]
int Update(int id);

// 异步
[SqlExecute("update person set age = 30 where id = {id}", RowEffects = true)]
Task<int> UpdateAsync(int id);
}

9.17.5 存储过程 操作

9.17.5.1 返回 DataTable

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
[SqlProcedure("PROC_Name")]
DataTable GetPersons(MyParam dto);

[SqlProcedure("PROC_Name")]
DataTable GetPersons(int id);

[SqlProcedure("PROC_Name")]
DataTable GetPersons(int id, string name);
}
}

9.17.5.2 返回 List<T>

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
[SqlProcedure("PROC_Name")]
List<Person> GetPersons(MyParam dto);

[SqlProcedure("PROC_Name")]
List<Person> GetPersons(int id);

[SqlProcedure("PROC_Name")]
List<Person> GetPersons(int id, string name);
}
}

9.17.5.3 返回 DataSet

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
[SqlProcedure("PROC_Name")]
DataSet GetData(MyParam dto);

[SqlProcedure("PROC_Name")]
DataSet GetData(int id);

[SqlProcedure("PROC_Name")]
DataSet GetData(int id, string name);
}
}

9.17.5.4 返回 Tuple(T1,...T8)

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
[SqlProcedure("PROC_Name")]
(List<Person>, List<Student>) GetData(MyParam dto);

[SqlProcedure("PROC_Name")]
(List<Person>, List<Student>) GetData(int id);

[SqlProcedure("PROC_Name")]
(List<Person>, List<Student>, Person, int) GetData(int id, string name);

// 自 v3.7.3+ 版本支持返回单个类类型参数
[SqlProcedure(@"PROC_Name)]
(Person, List<Person>) GetData(int id); // 注意返回值是 `(Person, List<Person>)` 组合
}
}

9.17.5.5 返回 单行单列

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
[SqlProcedure("PROC_Name")]
object GetValue(MyParam dto);

[SqlProcedure("PROC_Name")]
string GetValue(int id);

[SqlProcedure("PROC_Name")]
int GetValue(int id, string name);
}
}

9.17.5.6 无返回值

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
[SqlProcedure("PROC_Name")]
void GetValue(MyParam dto);

[SqlProcedure("PROC_Name")]
void GetValue(int id);

[SqlProcedure("PROC_Name")]
void GetValue(int id, string name);
}
}

9.17.5.7 带 OUTPUT/RETURN 返回

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
[SqlProcedure("PROC_Name")]
ProcedureOutputResult GetOutput(ProcOutputModel pams);

[SqlProcedure("PROC_Name")]
ProcedureOutputResult GetOutput(ProcOutputModel pams);

[SqlProcedure("PROC_Name")]
ProcedureOutputResult<(List<Person>, List<Student>)> GetOutput(ProcOutputModel pams);
}
}

9.17.5.8 返回单个类类型参数

版本说明

以下内容仅限 Furion 3.7.1 + 版本使用。

public interface ISql : ISqlDispatchProxy
{
// 自 v3.7.3+ 版本支持返回单个类类型参数
[SqlProcedure("PROC_Name")]
Person GetPerson(int id);
}

9.17.6 函数 操作

using Furion.DatabaseAccessor;

namespace Furion.Application
{
public interface ISql : ISqlDispatchProxy
{
[SqlFunction("FN_Name")] // 标量函数
string GetValue(MyParam dto);

[SqlProcedure("FN_Name")] // 表值函数
List<Person> GetPersons(int id);
}
}
补充说明

Sql 代理会自动判断返回值然后自动执行特定函数类型。

9.17.7 Sql 模板替换

在最新的 1.18.3 版本中提供了模板替换功能,如:

[SqlExecute("select * from person where id > {id} and name like {name} and age > {user.Age}")]
List<Person> GetPerson(int id, string name, User user);
两者区别

模板字符串有别于命令参数替换,模板字符串采用 { } 方式,运行时直接替换为实际的内容, @ 而是转换成 DbParameter 参数。

9.17.8 切换数据库

Sql 代理方式的支持三种切换数据库的方式:

9.17.8.1 单个方法方式

主要通过在方法上贴 [SqlDbContextLocator] 特性

[SqlExecute("select * from person"), SqlDbContextLocator(typeof(MySqlDbContextLocator)]
List<Person> GetPerson();

9.17.8.2 接口方式

在接口中贴 [SqlDbContextLocator] 特性,此方式下,接口所有方法将采用指定的数据库执行。

[SqlDbContextLocator(typeof(MySqlDbContextLocator)]
public interface ISql : ISqlDispatchProxy
{
[SqlFunction("FN_Name")] // 标量函数
string GetValue(MyParam dto);

[SqlProcedure("FN_Name")] // 表值函数
List<Person> GetPersons(int id);
}

9.17.8.3 运行时 .Change 方法切换

除了以上两种 静态 配置方式,Furion 框架还提供 动态 方式,如:

// 将 sql 代理数据库切换成特定数据库
_sql.Change<MySqlDbContextLocator>();
_sql.GetPerson();

// 多次切换
_sql.Change<OracleDbContextLocator>();
_sql.GetPerson();

// 还支持重置数据库上下文定位器为初始状态
_sql.ResetIt();
_sql.GetPerson();
关于优先级问题

.Change<> 优先级大于 方法贴 [SqlDbContextLocator] 大于 接口贴 [SqlDbContextLocator]

默认情况下,不指定 DbContextLocator 属性,则为 MasterDbContextLocator

9.17.9 Sql 代理拦截

Furion v2.13 + 版本新增了 Sql 代理拦截功能,可以篡改特定方法或所有代理方法实际执行的参数,如 sql语句、参数、执行对象等等

若在 Sql 代理中实现拦截功能,必须满足两个条件

  • 方法必须是 static 静态方法且返回值为 void 且只有一个 SqlProxyMethod 参数
  • 方法必须贴 [Interceptor] 特性

如:

public interface ISql : ISqlDispatchProxy
{
[SqlFunction("FN_Name")]
string GetValue(MyParam dto);

[SqlProcedure("FN_Name")]
List<Person> GetPersons(int id);

[SqlExecute("select name from person", InterceptorId = "GetPersonsByName")] // 通过 InterceptorId 解决方法名重载问题
Task<List<string>> GetPersons();

// 只拦截 GetValue 方法
[Interceptor(nameof(GetValue))]
static void 拦截1(SqlProxyMethod method)
{
method.FinalSql += " where id > 1"; // 篡改最终执行 sql
}

// 拦截 GetValue 和 GetPersons 方法
[Interceptor(nameof(GetValue), nameof(GetPersons))]
static void 拦截2(SqlProxyMethod method)
{
method.FinalSql += " where id > 1"; // 篡改最终执行 sql
}

[Interceptor("GetPersonsByName")] // 对应上面的 InterceptorId 配置
static void 解决方法名重载拦截(SqlProxyMethod method)
{
// 。。。
}

[Interceptor]
static void 全局拦截(SqlProxyMethod method)
{
// 这里会拦截所有的方法
}
}

9.17.10 设置超时时间

[Timeout(1000)]
public interface ISql : ISqlDispatchProxy
{
[SqlFunction("FN_Name"), Timeout(500)] // 单位秒
string GetValue(MyParam dto);
}

9.17.11 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-sql-template/index.html b/handbook/build/docs/dbcontext-sql-template/index.html new file mode 100644 index 00000000000..bc61ff29d5b --- /dev/null +++ b/handbook/build/docs/dbcontext-sql-template/index.html @@ -0,0 +1,17 @@ + + + + + +9.16 Sql 模板 | Furion + + + + + +
+

9.16 Sql 模板

9.16.1 Sql 模板

通常我们程序中执行数据库的 sql 语句都写在了程序集中,随程序一起编译,后续需要修改,则重新编译代码。

所以,Furion 创造出一种 Sql 模板的方式,程序执行 Sql 时,只需要使用特殊标记即可:#(模板Key),这些真实的 Sql 配置在 .json.xml 配置文件中。

如:

  • Json 方式
{
"Select.User": "select * from User where id > @id"
}
  • Xml 方式
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<Select.User>select * from User where id > @id</Select.User>
</configuration>

9.16.2 Sql 模板优缺点

9.16.2.1 优点

  • 支持 Sql 动态配置,可在程序运行时动态调配 Sql 语句
  • 支持程序 Sql 语句加密

9.16.2.2 缺点

  • 需增加对应配置文件
  • 不容易调试 Sql 代码

9.16.3 如何使用

在执行 Sql 的时候,只需要填写指定模板即可。

9.16.3.1 常规使用

// 仓储方式
var users = repository.SqlQuery<User>("#(Select.User)", new { id = 1});

// 懒人方式
var users = "#(Select.User)".SqlQuery<User>(new { id = 1});

// Sql 代理方式
[SqlExecute("#(Select.User)")]
List<User> GetUser(int id);

9.16.3.2 高级嵌套

var users = repository.SqlQuery<User>(
@"select * from user u
left join #(User.Detail) d on u.Id = d.UserId
where id > @id");

9.16.4 Sql 模板配置

9.16.4.1 普通模式

{
"Select.User": "select * from User"
}

9.16.4.2 更多配置

功能移除声明

以下内容在 Furion 2.13 + 版本中已移除。

{
"Select.User": {
"Sql": "select * from User where id > @id and Name = @name",
"Params": [
{
"Name": " Id",
"Value": "1",
"DbType": "Int16",
"Size": 10
},
{
"Name": " Name",
"Value": "百小僧",
"DbType": "String",
"Size": 10
}
]
}
}

9.16.5 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-sql/index.html b/handbook/build/docs/dbcontext-sql/index.html new file mode 100644 index 00000000000..cc9d607d63e --- /dev/null +++ b/handbook/build/docs/dbcontext-sql/index.html @@ -0,0 +1,17 @@ + + + + + +9.15 Sql 操作 | Furion + + + + + +
+

9.15 Sql 操作

温馨提示

推荐使用 《9.17 Sql 高级代理》代替本章节功能。Sql 高级代理 能够提供更容易且更易维护的方式。

例子说明

本章节例子均以 sql server 数据库写的例子,命令参数统一用 @ 符号,但不同数据库的参数前缀有所不同,如:sql server 采用 @,oracle 采用 :,my sql 采用 ?

9.15.1 关于 Sql

Furion 框架提供非常多且灵活的 sql 操作方法,且性能不输于 dapper,同时逼近 ADO.NET 原生操作。

9.15.2 懒人无敌 Sql 🐮

9.15.2.1 返回 DataTable

// ==== 同步操作 ====

// 示例一
var dataTable = "select * from person".SqlQuery();

// 示例二
var dataTable = "select top 10 * from person where id > @id".SqlQuery(new {id = 10});

// 示例三
var dataTable = "select Id, Name, Age from person where name like @name".SqlQuery(new Dictionary<string,object>{ {"name", "%Furion%"} });

// 示例四
var dataTable = "select * from person where name=@name limit 1,10".SqlQuery(new []{ new MySqlParameter("name","Furion") });

// 示例五
var dataTable = "select * from person where id>@id and name like @name".SqlQuery(new YourModel { Id = 1, Name = "%Furion%" });

// 示例六
var dataTable = "exec PROC_GetPerson @id".SqlQuery(new {id = 10});

// 示例七
var dataTable = "select * from FN_GetPersons(@id)".SqlQuery(new {id = 10});

// 示例八
var dataTable = @"
select * from person p
left join personDetail pd on p.Id == pd.pid
where p.Id > @id;".SqlQuery(new {id = 10});

// ==== 异步操作 ====

// 示例一
var dataTable = await "select * from person".SqlQueryAsync();

// 示例二
var dataTable = await "select top 10 * from person where id > @id".SqlQueryAsync(new {id = 10});

// 示例三
var dataTable = await "select Id, Name, Age from person where name like @name".SqlQueryAsync(new Dictionary<string,object>{ {"name", "%Furion%"} });

// 示例四
var dataTable = await "select * from person where name=@name limit 1,10".SqlQueryAsync(new []{ new MySqlParameter("name","Furion") });

// 示例五
var dataTable = await "select * from person where id>@id and name like @name".SqlQueryAsync(new YourModel { Id = 1, Name = "%Furion%" });

// 示例六
var dataTable = await "exec PROC_GetPerson @id".SqlQueryAsync(new {id = 10});

// 示例七
var dataTable = await "select * from FN_GetPersons(@id)".SqlQueryAsync(new {id = 10});

// 示例八
var dataTable = await @"
select * from person p
left join personDetail pd on p.Id == pd.pid
where p.Id > @id;".SqlQueryAsync(new {id = 10});

9.15.2.2 返回 List<T>

// ==== 同步操作 ====

// 示例一
var persons = "select * from person".SqlQuery<Person>();

// 示例二
var persons = "select top 10 * from person where id > @id".SqlQuery<Person>(new {id = 10});

// 示例三
var persons = "select Id, Name, Age from person where name like @name".SqlQuery<Person>(new Dictionary<string,object>{ {"name", "%Furion%"} });

// 示例四
var persons = "select * from person where name=@name limit 1,10".SqlQuery<Person>(new []{ new MySqlParameter("name","Furion") });

// 示例五
var persons = "select * from person where id>@id and name like @name".SqlQuery<Person>(new YourModel { Id = 1, Name = "%Furion%" });

// 示例六
var persons = "exec PROC_GetPerson @id".SqlQuery<Person>(new {id = 10});

// 示例七
var persons = "select * from FN_GetPersons(@id)".SqlQuery<Person>(new {id = 10});

// 示例八
var persons = @"
select * from person p
left join personDetail pd on p.Id == pd.pid
where p.Id > @id;".SqlQuery<Person>(new {id = 10});

// ==== 异步操作 ====

// 示例一
var persons = await "select * from person".SqlQueryAsync<Person>();

// 示例二
var persons = await "select top 10 * from person where id > @id".SqlQueryAsync<Person>(new {id = 10});

// 示例三
var persons = await "select Id, Name, Age from person where name like @name".SqlQueryAsync<Person>(new Dictionary<string,object>{ {"name", "%Furion%"} });

// 示例四
var persons = await "select * from person where name=@name limit 1,10".SqlQueryAsync<Person>(new []{ new MySqlParameter("name","Furion") });

// 示例五
var persons = await "select * from person where id>@id and name like @name".SqlQueryAsync<Person>(new YourModel { Id = 1, Name = "%Furion%" });

// 示例六
var persons = await "exec PROC_GetPerson @id".SqlQueryAsync<Person>(new {id = 10});

// 示例七
var persons = await "select * from FN_GetPersons(@id)".SqlQueryAsync<Person>(new {id = 10});

// 示例八
var persons = await @"
select * from person p
left join personDetail pd on p.Id == pd.pid
where p.Id > @id;".SqlQueryAsync<Person>(new {id = 10});

9.15.2.3 返回 DataSet

// ==== 同步操作 ====

// 示例一
var dataSet = @"
select * from person;
select * from student;".SqlQueries();

// 示例二
var dataSet = @"
select * from person where Id > @id;
select * from student where Name like @name;".SqlQueries(new {id = 1, name = "%furion%"});

// 示例三
var dataSet = @"
select * from person;
exec PROC_GetStudents(@id);
select 'Furion';
select * from FN_GetPerson(@id);".SqlQueries(new {id = 1});

// ==== 异步操作 ====

// 示例一
var dataSet = await @"
select * from person;
select * from student;".SqlQueriesAsync();

// 示例二
var dataSet = await @"
select * from person where Id > @id;
select * from student where Name like @name;".SqlQueriesAsync(new {id = 1, name = "%furion%"});

// 示例三
var dataSet = await @"
select * from person;
exec PROC_GetStudents(@id);
select 'Furion';
select * from FN_GetPerson(@id);".SqlQueriesAsync(new {id = 1});

9.15.2.4 返回 Tuple<T1,...T8>

// ==== 同步操作 ====

// 示例一
var (persons, students) = @"
select * from person;
select * from student;".SqlQueries<Person,Student>();

// 示例二
var (persons, students) = @"
select * from person where Id > @id;
select * from student where Name like @name;".SqlQueries<Person,Student>(new {id = 1, name = "%furion%"});

// 示例三
var (persons, students, string, PersonDto) = @"
select * from person;
exec PROC_GetStudents(@id);
select 'Furion';
select * from FN_GetPerson(@id);".SqlQueries<Person, Student, string, PersonDto>(new {id = 1});

// ==== 异步操作 ====

// 示例一
var (persons, students) = await @"
select * from person;
select * from student;".SqlQueriesAsync<Person,Student>();

// 示例二
var (persons, students) = await @"
select * from person where Id > @id;
select * from student where Name like @name;".SqlQueriesAsync<Person,Student>(new {id = 1, name = "%furion%"});

// 示例三
var (persons, students, string, PersonDto) = await @"
select * from person;
exec PROC_GetStudents(@id);
select 'Furion';
select * from FN_GetPerson(@id);".SqlQueriesAsync<Person, Student, string, PersonDto>(new {id = 1});

9.15.2.5 返回 单行单列

// ==== 同步操作 ====

// 示例一
var value = "select Name from person where id = @id".SqlScalar(new {id = 1});

// 示例二
var value = "select Name from person where id = @id".SqlScalar<string>(new {id = 1});

// 示例三
var value = "select Age from person where id = @id".SqlScalar<int>(new {id = 1});

// ==== 异步操作 ====

// 示例一
var value = await "select Name from person where id = @id".SqlScalarAsync(new {id = 1});

// 示例二
var value = await "select Name from person where id = @id".SqlScalarAsync<string>(new {id = 1});

// 示例三
var value = await "select Age from person where id = @id".SqlScalarAsync<int>(new {id = 1});

9.15.2.6 返回 受影响行数

// ==== 同步操作 ====

// 示例一
var rowEffects = "insert into person(Name,Age,Address) values(@name,@age,@address)".SqlNonQuery(person);

// 示例二
var rowEffects = @"
insert into person(Name,Age,Address) values(@name,@age,@address);
insert into person(Name,Age,Address) values(@name,@age,@address);".SqlNonQuery(persons);

// 示例三
var rowEffects = "update person set name=@name where id=@id".SqlNonQuery(new {id=1, name="百小僧"});

// 示例四
var rowEffects = "delete from person where @id > 10".SqlNonQuery(new {id=1});

// ==== 异步操作 ====

// 示例一
var rowEffects = await "insert into person(Name,Age,Address) values(@name,@age,@address)".SqlNonQueryAsync(person);

// 示例二
var rowEffects = @"
insert into person(Name,Age,Address) values(@name,@age,@address);
insert into person(Name,Age,Address) values(@name,@age,@address);".SqlNonQueryAsync(persons);

// 示例三
var rowEffects = await "update person set name=@name where id=@id".SqlNonQueryAsync(new {id=1, name="百小僧"});

// 示例四
var rowEffects = await "delete from person where @id > 10".SqlNonQueryAsync(new {id=1});

9.15.3 懒人无敌 存储过程 🐮

9.15.3.1 返回 DataTable

// ==== 同步操作 ====

// 示例一
var dataTable = "PROC_Name".SqlProcedureQuery();

// 示例二
var dataTable = "PROC_Name".SqlProcedureQuery(new {id = 1});

// 示例三
var dataTable = "PROC_Name".SqlProcedureQuery(new {id = 1, age = 27});

// ==== 异步操作 ====

// 示例一
var dataTable = await "PROC_Name".SqlProcedureQueryAsync();

// 示例二
var dataTable = await "PROC_Name".SqlProcedureQueryAsync(new {id = 1});

// 示例三
var dataTable = await "PROC_Name".SqlProcedureQueryAsync(new {id = 1, age = 27});

9.15.3.2 返回 List<T>

// ==== 同步操作 ====

// 示例一
var persons = "PROC_Name".SqlProcedureQuery<Person>();

// 示例二
var persons = "PROC_Name".SqlProcedureQuery<Person>(new {id = 1});

// 示例三
var persons = "PROC_Name".SqlProcedureQuery<Person>(new {id = 1, age = 27});

// ==== 异步操作 ====

// 示例一
var persons = await "PROC_Name".SqlProcedureQueryAsync<Person>();

// 示例二
var persons = await "PROC_Name".SqlProcedureQueryAsync<Person>(new {id = 1});

// 示例三
var persons = await "PROC_Name".SqlProcedureQueryAsync<Person>(new {id = 1, age = 27});

9.15.3.3 返回 DataSet

// ==== 同步操作 ====

// 示例一
var dataSet = "PROC_Name".SqlProcedureQueries();

// 示例二
var dataSet = "PROC_Name".SqlProcedureQueries(new {id = 1});

// 示例三
var dataSet = "PROC_Name".SqlProcedureQueries(new {id = 1, age = 27});

// ==== 异步操作 ====

// 示例一
var dataSet = await "PROC_Name".SqlProcedureQueriesAsync();

// 示例二
var dataSet = await "PROC_Name".SqlProcedureQueriesAsync(new {id = 1});

// 示例三
var dataSet = await "PROC_Name".SqlProcedureQueriesAsync(new {id = 1, age = 27});

9.15.3.4 返回 Tuple<T1,...T8>

// ==== 同步操作 ====

// 示例一
var persons = "PROC_Name".SqlProcedureQueries<Person>();

// 示例二
var (persons,students) = "PROC_Name".SqlProcedureQueries<Person,Student>(new {id = 1});

// 示例三
var (persons,students,string) = "PROC_Name".SqlProcedureQueries<Person,Student,string>(new {id = 1, age = 27});

// 示例四
var (persons,students,personDetail,string) = "PROC_Name".SqlProcedureQueries<Person,Student,PersonDetail,string>(new {id = 1, age = 27});

// ==== 异步操作 ====

// 示例一
var persons = await "PROC_Name".SqlProcedureQueriesAsync<Person>();

// 示例二
var (persons,students) = await "PROC_Name".SqlProcedureQueriesAsync<Person,Student>(new {id = 1});

// 示例三
var (persons,students,string) = await "PROC_Name".SqlProcedureQueriesAsync<Person,Student,string>(new {id = 1, age = 27});

// 示例四
var (persons,students,personDetail,string) = await "PROC_Name".SqlProcedureQueriesAsync<Person,Student,PersonDetail,string>(new {id = 1, age = 27});

9.15.3.5 返回 单行单列

// ==== 同步操作 ====

// 示例一
var value = "PROC_Name".SqlProcedureScalar(new {id = 1});

// 示例二
var value = "PROC_Name".SqlProcedureScalar<string>(new {id = 1, name = "新生帝", address ="广东省中山市"});

// 示例三
var value = "PROC_Name".SqlProcedureScalar<int>(new {id = 1, address ="广东省中山市"});

// ==== 异步操作 ====

// 示例一
var value = await "PROC_Name".SqlProcedureScalarAsync(new {id = 1});

// 示例二
var value = await "PROC_Name".SqlProcedureScalarAsync<string>(new {id = 1, name = "新生帝", address ="广东省中山市"});

// 示例三
var value = await "PROC_Name".SqlProcedureScalarAsync<int>(new {id = 1, address ="广东省中山市"});

9.15.3.6 返回 受影响行数

// ==== 同步操作 ====

// 示例一
var rowEffects = "PROC_Name".SqlProcedureNonQuery(person);

// 示例二
var rowEffects = "PROC_Name".SqlProcedureNonQuery(new {id = 1, name = "新生帝", address ="广东省中山市"});

// 示例三
var rowEffects = "PROC_Name".SqlProcedureNonQuery(new {id=1, name="百小僧"});

// 示例四
var rowEffects = "PROC_Name".SqlProcedureNonQuery(new {id=1});

// ==== 异步操作 ====

// 示例一
var rowEffects = await "PROC_Name".SqlProcedureNonQueryAsync(person);

// 示例二
var rowEffects = await "PROC_Name".SqlProcedureNonQueryAsync(new {id = 1, name = "新生帝", address ="广东省中山市"});

// 示例三
var rowEffects = await "PROC_Name".SqlProcedureNonQueryAsync(new {id=1, name="百小僧"});

// 示例四
var rowEffects = await "PROC_Name".SqlProcedureNonQueryAsync(new {id=1});

9.15.3.7 带 OUTPUT/RETURN 返回

CREATE PROC PROC_Output
@Id INT, // 输入参数
@Name NVARCHAR(32) OUTPUT, // 输出参数,还带长度
@Age INT OUTPUT // 输出参数
AS
BEGIN
SET @Name = 'Furion Output';

// 输出结果集
SELECT *
FROM dbo.Test
WHERE Id > @Id;

// 输出结果集
SELECT TOP 10
*
FROM dbo.Test;

SET @Age = 27;

// 带 RETURN 返回
RETURN 10;
END;
using Furion.DatabaseAccessor;
using System.Data;

namespace Furion.Application
{
public class ProcOutputModel
{
public int Id { get; set; } // 输入参数

[DbParameter(ParameterDirection.Output, Size = 32)]
public string Name { get; set; } // 输出参数

[DbParameter(ParameterDirection.Output)]
public int Age { get; set; } // 输出参数

[DbParameter(ParameterDirection.ReturnValue)]
public int ReturnValue { get; set; } // 返回值
}
}
// ==== 同步操作 ====

// 示例一
ProcedureOutputResult result = "PROC_Name".SqlProcedureOutput(new ProcOutputModel{ Id=1});

// 示例二
ProcedureOutputResult result = "PROC_Name".SqlProcedureOutput(new ProcOutputModel{ Id=1});

// 示例三
ProcedureOutputResult<(List<Person>, List<Student>)> result = "PROC_Name".SqlProcedureOutput<(List<Person>, List<Student>)>(new ProcOutputModel{ Id=1});

// ==== 异步操作 ====
// 示例一
ProcedureOutputResult result = await "PROC_Name".SqlProcedureOutputAsync(new ProcOutputModel{ Id=1});

// 示例二
ProcedureOutputResult result = await "PROC_Name".SqlProcedureOutputAsync(new ProcOutputModel{ Id=1});

// 示例三
ProcedureOutputResult<(List<Person>, List<Student>)> result = await "PROC_Name".SqlProcedureOutputAsync<(List<Person>, List<Student>)>(new ProcOutputModel{ Id=1});

9.15.4 懒人无敌 函数 🐮

9.15.4.1 标量函数

// ==== 同步操作 ====

// 示例一
var value = "FN_Name".SqlFunctionScalar();

// 示例二
var value = "FN_Name".SqlFunctionScalar(new {id = 1});

// 示例三
var value = "FN_Name".SqlFunctionScalar<string>();

// 示例四
var value = "FN_Name".SqlFunctionScalar<int>(new {id = 1});

// ==== 异步操作 ====

// 示例一
var value = await "FN_Name".SqlFunctionScalarAsync();

// 示例二
var value = await "FN_Name".SqlFunctionScalarAsync(new {id = 1});

// 示例三
var value = await "FN_Name".SqlFunctionScalarAsync<string>();

// 示例四
var value = await "FN_Name".SqlFunctionScalarAsync<int>(new {id = 1});

9.15.4.2 表值函数

// ==== 同步操作 ====

// 示例一
var dataTable = "FN_Name".SqlFunctionQuery();

// 示例二
var dataTable = "FN_Name".SqlFunctionQuery(new {id = 1});

// 示例三
var persons = "FN_Name".SqlFunctionQuery<Person>();

// 示例四
var persons = "FN_Name".SqlFunctionQuery<Person>(new {id = 1});

// ==== 异步操作 ====

// 示例一
var dataTable = await "FN_Name".SqlFunctionQueryAsync();

// 示例二
var dataTable = await "FN_Name".SqlFunctionQueryAsync(new {id = 1});

// 示例三
var persons = await "FN_Name".SqlFunctionQueryAsync<Person>();

// 示例四
var persons = await "FN_Name".SqlFunctionQueryAsync<Person>(new {id = 1});

9.15.5 设置超时时间

var data = "select * from table".SetCommandTimeout(100).SqlQuery(); // 单位秒

9.15.6 ISqlRepository 操作

ISqlRepository 仓储是专门处理 Sql 操作的,无需实体方式,所有接口和 懒人无敌 方式一样:

// 示例一
var dataTable = sqlRepository.SqlQuery("select * from person");

// 示例二
var dataTable = sqlRepository.SqlQuery("select * from person where id > @id", new { id = 10});

// 示例四
var persons = sqlRepository.SqlQuery<Person>("select * from person");

// 示例五
var persons = sqlRepository.SqlQuery<Person>("select * from person where id > @id", new { id = 10});

// 不再举例子。。。
补充说明

不管是哪种方式操作 Sql ,方法名参数都是一致的,如:

  • SqlQuery
  • SqlQueryAsync
  • SqlQueries
  • SqlQueriesAsync
  • SqlNonQuery
  • SqlNonQueryAsync
  • SqlScalar
  • SqlScalarAsync
  • SqlProcedureQuery
  • SqlProcedureQueryAsync
  • SqlProcedureQueries
  • SqlProcedureQueriesAsync
  • SqlProcedureScalar
  • SqlProcedureScalarAsync
  • SqlProcedureNonQuery
  • SqlProcedureNonQueryAsync
  • SqlProcedureOutput
  • SqlProcedureOutputAsync
  • SqlFunctionScalar
  • SqlFunctionScalarAsync
  • SqlFunctionQuery
  • SqlFunctionQuery

9.15.7 IRepository 操作

IRepository 也能操作 sql,调用方法也是和上面一致的,如:

var dataTable = repository.Sql().SqlQuery("select * from person");
特别说明

由于篇幅有限,不再列举所有例子。

9.15.8 IRepository<TEntity> 操作

IRepository<TEntity> 也能操作 sql,调用方法也是和上面一致的,如:

var dataTable = personRepository.SqlQuery("select * from person");
特别说明

由于篇幅有限,不再列举所有例子。

9.15.9 关于 Sql 参数

所有 sql存储过程函数 参数都支持四种方式:

  • DbParameter[]:数组类型
  • new {}:匿名类型
  • new Class{}:强类型类型(支持复杂存储过程参数)
  • Dictionary<string,object> 类型
小知识

建议除了复杂的存储过程(带 OUTPUT/RETURN)的以外,所有参数建议使用 new {} 匿名类型,如果需要动态参数,则可以使用 Dictionary<string,object> 类型。

参数大小写问题

由于不同数据库对查询参数大小写问题处理不一致,所以建议所有查询参数和参数名或属性名完全一致

9.15.10 多数据库 Sql 操作 💯 💛

Furion 框架拥有非常灵活的多数据库操作方式,只需通过多数据库上下文定位器即可动态切换数据库。

9.15.10.1 懒人无敌 🐮 方式

var dataTable = "select * from person".Change<MySqlDbContextLocator>().SqlQuery();

var persons = "select * from person whre id > @id".Change<SqliteDbContextLocator>().SqlQuery<Person>();
补充说明

懒人方式 只需要通过 Change<TDbContextLocator> 方式即可动态切换数据库。

9.15.10.2 ISqlRepository 方式

只需要通过 ISqlRepository<TDbContextLocator> 注入或通过 sqlRepository.Change<TDbContextLocator>() 切换。

9.15.10.3 IRepository 方式

只需要通过 repository.Change<TDbContextLocator>() 获取即可。

9.15.10.4 IRepository<TEntity> 方式

只需要通过 IRepository<TEntity, TDbContextLocator> 注入或通过 personRepository.Change<TEntity, TDbContextLocator>() 切换。

9.15.11 切换数据库

Furion 框架中,不管是懒人模式还是仓储模式都是通过 .Change<TDbContextLocator> 方式切换数据库,如:

// 懒人模式
var data = "select * from table".Change<MySqlDbContextLocator>().SqlQuery<Data>();

// 仓储方式
var data = req.Change<MySqlDbContextLocator>().SqlQuery<Data>("select * from table");

9.15.12 多线程共享作用域

默认情况下,所有的 字符串实体 拓展都有自己独立维护的 ServiceProvider 作用域。

Web 请求中,默认是 HttpContext.RequestServices,但在 非 Web,如多线程操作,后台任务,事件总线等场景下会自动创建新的作用域,实际上这是非常不必要的内存开销。

这时,我们只需要通过 .SetXXXScoped(service) 共享当前服务提供器作用域即可,如:

Scoped.Create((fac, scope) => {
"select * from table".SetContextScoped(scope.ServiceProvider).SqlQuery();
});

9.15.13 静态 Default 方式构建

SqlExecutePart.Default.SetSqlString("select * from person").SqlQuery();

9.15.14 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-start/index.html b/handbook/build/docs/dbcontext-start/index.html new file mode 100644 index 00000000000..48b749820cd --- /dev/null +++ b/handbook/build/docs/dbcontext-start/index.html @@ -0,0 +1,17 @@ + + + + + +9.0 入门简要 | Furion + + + + + +
+

9.0 入门简要

9.0.1 入门准备

入门条件

EF/EFCore 有一定基础了解,还未接触的可先看 【EFCore 基础】

9.0.1.1 安装对应数据库包

tip

在本章节所在的类别中,所有数据库操作功能均需要依赖 EntityFramework Core 框架,但 Furion 框架底层并未集成 EntityFramework Core 包,而是采用动态加载程序集方式自动载入。

所以,如需使用本大类数据库功能,需安装对应的 EntityFramework Core 数据库包:

  • SqlServerMicrosoft.EntityFrameworkCore.SqlServer (支持 SqlServer 2005 +)
  • SqliteMicrosoft.EntityFrameworkCore.Sqlite
  • CosmosMicrosoft.EntityFrameworkCore.Cosmos
  • InMemoryDatabaseMicrosoft.EntityFrameworkCore.InMemory
  • MySql
    • Pomelo.EntityFrameworkCore.MySql:(支持 MySql 5.x +)
    • MySql.EntityFrameworkCore:支持 (MySql 8.x +)
  • PostgreSQLNpgsql.EntityFrameworkCore.PostgreSQL
  • OracleOracle.EntityFrameworkCore (支持 Oracle 10 +)
  • FirebirdFirebirdSql.EntityFrameworkCore.Firebird
  • DmMicrosoft.EntityFrameworkCore.Dm
小知识

这些数据库包应该安装在 Furion.EntityFramework.Core 层。特殊情况需安装在 Furion.Core 层中,如 Mysql HasCharset() 配置。

9.0.1.2 创建数据库上下文

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class DefaultDbContext : AppDbContext<DefaultDbContext>
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
{
}
}
}
特别注意

每一个数据库上下文都需继承 AppDbContext<TDbContext, TDbContextLocator> 基类,默认数据库的 TDbContextLocatorMasterDbContextLocator,无需显式编写。

非默认数据库则需显式继承并申明,如:AppDbContext<OtherDbContext, OtherDbContextLocator>

想了解更多可查阅 【数据库上下文定位器】 章节。

9.0.1.3 配置连接字符串

Furion 框架提供多种方式配置数据库连接字符串:

  • appsettings.json 中配置
{
"ConnectionStrings": {
"Sqlite3ConnectionString": "Data Source=./Furion.db"
}
}
  • 自定义 .json 文件配置
{
"ConnectionStrings": {
"Sqlite3ConnectionString": "Data Source=./Furion.db"
}
}

该方式和在 appsettings.json 的区别是自定义的 .json 文件不会自动添加到项目中,须在 Visual Studio 中配置 .json 右键属性,设置 复制 输出目录为 如果较新则复制,生成操作为:内容

  • [AppDbContext] 特性配置
[AppDbContext("Data Source=./Furion.db", DbProvider.Sqlite)]
public class DefaultDbContext : AppDbContext<DefaultDbContext>
{
}
  • 在注册上下文时配置
services.AddDatabaseAccessor(options =>
{
// options.AddDb<DefaultDbContext>(connectionMetadata: "配置Key或连接字符串");
options.AddDbPool<DefaultDbContext>(connectionMetadata: "配置Key或连接字符串");
});
  • DbContext 中配置
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
public class DefaultDbContext : AppDbContext<DefaultDbContext>
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
{
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("连接字符串");
base.OnConfiguring(optionsBuilder);
}
}
}

9.0.1.4 各类数据库连接字符串配置示例

  • SqliteData Source=./Furion.db
  • MySqlData Source=localhost;Database=Furion;User ID=root;Password=000000;pooling=true;port=3306;sslmode=none;CharSet=utf8;
  • SqlServerServer=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;TrustServerCertificate=True;
  • OracleUser Id=orcl;Password=orcl;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))
  • PostgreSQLPORT=5432;DATABASE=postgres;HOST=127.0.0.1;PASSWORD=postgres;USER ID=postgres;

9.0.1.5 注册数据库上下文

Furion.EntityFramework.Core\Startup.cs
using Furion.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;

namespace Furion.EntityFramework.Core
{
[AppStartup(600)]
public sealed class FurEntityFrameworkCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
// 配置数据库上下文,支持N个数据库
services.AddDatabaseAccessor(options =>
{
// 配置默认数据库
options.AddDbPool<DefaultDbContext>();

// 配置多个数据库,多个数据库必须指定数据库上下文定位器
// options.AddDbPool<SqliteDbContext, SqliteDbContextLocaotr>();
});
}
}
}
了解更多数据库数据库注册方式

如需了解各种数据库及版本注册方式可查阅 【多数据库注册章节

9.0.1.6 Code First 说明

特别注意

Furion 框架默认数据迁移的程序集为:Furion.Database.Migrations,所以如果您改了程序集名称或通过 Nuget 方式安装的 Furion 包,则需要配置迁移程序集名称:

services.AddDatabaseAccessor(options =>
{
options.AddDbPool<DefaultDbContext>(DbProvider.Sqlite);
}, "存放迁移文件的项目名称");

另外,如果应用中配置了多个数据库上下文,那么所有的 迁移命令 都需要指定 -Context 数据库上下文名称 参数。如:

Add-Migration v1.0.0 -Context DefaultDbContext

9.0.2 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-update/index.html b/handbook/build/docs/dbcontext-update/index.html new file mode 100644 index 00000000000..a7069a7acca --- /dev/null +++ b/handbook/build/docs/dbcontext-update/index.html @@ -0,0 +1,17 @@ + + + + + +9.6 更新操作 | Furion + + + + + +
+

9.6 更新操作

功能移除声明

以下内容包含 Exists 单词的在 Furion 2.6.0 + 版本中已移除。

9.6.1 更新全部列(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.Update(user);

// 示例二
user.Update();

// 示例三
repository.ChangeEntityState(user, EntityState.Modified);

// 示例四
repository.Entities.Update(user);

// ==== 异步操作 ====

// 示例一
await repository.UpdateAsync(user);

// 示例二
await user.UpdateAsync();

9.6.2 更新全部列(立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateNow(user);

// 示例二
user.UpdateNow();

// ==== 异步操作 ====

// 示例一
await repository.UpdateNowAsync(user);

// 示例二
await user.UpdateNowAsync();

9.6.3 更新部分列(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateInclude(user, new[] {"Age", "Name"});

// 示例二
repository.UpdateInclude(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
repository.UpdateInclude(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// 示例四
user.UpdateInclude(new[] {"Age", "Name"});

// 示例五
user.UpdateInclude(new[] {nameof(User.Name), nameof(User.Age)});

// 示例六
user.UpdateInclude(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值


// ==== 异步操作 ====

// 示例一
await repository.UpdateIncludeAsync(user, new[] {"Age", "Name"});

// 示例二
await repository.UpdateIncludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
await repository.UpdateIncludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// 示例四
await user.UpdateIncludeAsync(new[] {"Age", "Name"});

// 示例五
await user.UpdateIncludeAsync(new[] {nameof(User.Name), nameof(User.Age)});

// 示例六
await user.UpdateIncludeAsync(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

9.6.4 更新部分列(立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateIncludeNow(user, new[] {"Age", "Name"});

// 示例二
repository.UpdateIncludeNow(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
repository.UpdateIncludeNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// 示例四
user.UpdateIncludeNow(new[] {"Age", "Name"});

// 示例五
user.UpdateIncludeNow(new[] {nameof(User.Name), nameof(User.Age)});

// 示例六
user.UpdateInclude(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值


// ==== 异步操作 ====

// 示例一
await repository.UpdateIncludeNowAsync(user, new[] {"Age", "Name"});

// 示例二
await repository.UpdateIncludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
await repository.UpdateIncludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// 示例四
await user.UpdateIncludeNowAsync(new[] {"Age", "Name"});

// 示例五
await user.UpdateIncludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)});

// 示例六
await user.UpdateIncludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

9.6.5 排除特定列更新(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateExclude(user, new[] {"Age", "Name"});

// 示例二
repository.UpdateExclude(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
repository.UpdateExclude(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// 示例四
user.UpdateExclude(new[] {"Age", "Name"});

// 示例五
user.UpdateExclude(new[] {nameof(User.Name), nameof(User.Age)});

// 示例六
user.UpdateExclude(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值


// ==== 异步操作 ====

// 示例一
await repository.UpdateExcludeAsync(user, new[] {"Age", "Name"});

// 示例二
await repository.UpdateExcludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
await repository.UpdateExcludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// 示例四
await user.UpdateExcludeAsync(new[] {"Age", "Name"});

// 示例五
await user.UpdateExcludeAsync(new[] {nameof(User.Name), nameof(User.Age)});

// 示例六
await user.UpdateExcludeAsync(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

9.6.6 排除特定列更新(立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateExcludeNow(user, new[] {"Age", "Name"});

// 示例二
repository.UpdateExcludeNow(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
repository.UpdateExcludeNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// 示例四
user.UpdateExcludeNow(new[] {"Age", "Name"});

// 示例五
user.UpdateExcludeNow(new[] {nameof(User.Name), nameof(User.Age)});

// 示例六
user.UpdateExcludeNow(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值


// ==== 异步操作 ====

// 示例一
await repository.UpdateExcludeNowAsync(user, new[] {"Age", "Name"});

// 示例二
await repository.UpdateExcludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
await repository.UpdateExcludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// 示例四
await user.UpdateExcludeNowAsync(new[] {"Age", "Name"});

// 示例五
await user.UpdateExcludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)});

// 示例六
await user.UpdateExcludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

9.6.7 数据存在才更新所有列(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateExists(user);

// ==== 异步操作 ====

// 示例一
await repository.UpdateExistsAsync(user);

9.6.8 数据存在才更新所有列(立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateExistsNow(user);

// ==== 异步操作 ====

// 示例一
await repository.UpdateExistsNowAsync(user);

9.6.9 数据存在才更新部分列(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateIncludeExists(user, new[] {"Age", "Name"});

// 示例二
repository.UpdateIncludeExists(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
repository.UpdateIncludeExists(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// ==== 异步操作 ====

// 示例一
await repository.UpdateIncludeExistsAsync(user, new[] {"Age", "Name"});

// 示例二
await repository.UpdateIncludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
await repository.UpdateIncludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

9.6.10 数据存在才更新部分列(立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateIncludeExistsNow(user, new[] {"Age", "Name"});

// 示例二
repository.UpdateIncludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
repository.UpdateIncludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// ==== 异步操作 ====

// 示例一
await repository.UpdateIncludeExistsNowAsync(user, new[] {"Age", "Name"});

// 示例二
await repository.UpdateIncludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
await repository.UpdateIncludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

9.6.11 数据存在才排除特定部分列更新(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateExcludeExists(user, new[] {"Age", "Name"});

// 示例二
repository.UpdateExcludeExists(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
repository.UpdateExcludeExists(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// ==== 异步操作 ====

// 示例一
await repository.UpdateExcludeExistsAsync(user, new[] {"Age", "Name"});

// 示例二
await repository.UpdateExcludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
await repository.UpdateExcludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

9.6.12 数据存在才排除特定部分列更新(立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateExcludeExistsNow(user, new[] {"Age", "Name"});

// 示例二
repository.UpdateExcludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
repository.UpdateExcludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

// ==== 异步操作 ====

// 示例一
await repository.UpdateExcludeExistsNowAsync(user, new[] {"Age", "Name"});

// 示例二
await repository.UpdateExcludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)});

// 示例三
await repository.UpdateExcludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值

9.6.13 更新多条记录(不立即提交)

// ==== 同步操作 ====

// 示例一
repository.Update(user, user2);

// 示例二
repository.Update(new List<User> { user, user2 });

// 示例三
repository.Update(new[] {user, user2 });

// ==== 异步操作 ====

// 示例一
await repository.UpdateAsync(user, user2);

// 示例二
await repository.UpdateAsync(new List<User> { user, user2 });

// 示例三
await repository.UpdateAsync(new[] {user, user2 });

9.6.14 更新多条记录(立即提交)

// ==== 同步操作 ====

// 示例一
repository.UpdateNow(user, user2);

// 示例二
repository.UpdateNow(new List<User> { user, user2 });

// 示例三
repository.UpdateNow(new[] {user, user2 });

// ==== 异步操作 ====

// 示例一
await repository.UpdateNowAsync(user, user2);

// 示例二
await repository.UpdateNowAsync(new List<User> { user, user2 });

// 示例三
await repository.UpdateNowAsync(new[] {user, user2 });
小知识

所有带 Now 结尾的表示立即提交到数据库,也就是立即调用 SaveChangesSaveChangesAsync

9.6.15 忽略空值更新

默认情况下,EFCore 更新会更新全部列(除实体跟踪方式以外),有些时候我们希望 Null 值无需更新,这是我们只需要在更新时候配置 ignoreNullValues 参数即可,如:

repository.Update(entity, ignoreNullValues: true);

也可以全局配置,在 AppDbContext 的派生类的构造函数中启用即可:

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class DefaultDbContext : AppDbContext<DefaultDbContext>
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
{
InsertOrUpdateIgnoreNullValues = true;
}
}
}

9.6.16 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext-view/index.html b/handbook/build/docs/dbcontext-view/index.html new file mode 100644 index 00000000000..081b8b2d1a8 --- /dev/null +++ b/handbook/build/docs/dbcontext-view/index.html @@ -0,0 +1,17 @@ + + + + + +9.12 视图操作 | Furion + + + + + +
+

9.12 视图操作

9.12.1 关于视图

视图是数据库中非常重要的对象,是一张虚拟表,通过视图我们可以对结果进行筛选缓存,同时还能实现颗粒化权限控制,如控制指定行,指定列。

9.12.2 视图的使用

Furion 中实现视图的操作非常简单,只需要创建视图模型,并继承 EntityNotKey 基类即可。代码如下:

9.12.2.1 创建视图 SQL

CREATE VIEW V_Person AS
SELECT Id,Name,Age,Address FROM person

9.12.2.2 视图模型

using Furion.DatabaseAccessor;

namespace Furion.Core
{
public class V_Person : EntityNotKey
{
/// <summary>
/// 配置视图名
/// </summary>
public V_Person() : base("V_Person")
{
}

/// <summary>
/// 主键Id
/// </summary>
public int Id { get; set; }

/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }

/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }

/// <summary>
/// 住址
/// </summary>
public string Address { get; set; }
}
}
视图名称

视图实体只需要继承 EntityNotKey 基类并编写无参构造函数继承 base("视图名称") 即可。

9.12.3 视图使用

视图除了不能操作(写)以外,其他操作和表操作无异。

var vEntities = v_repository.Where(u => u.Id >10).ToList();

9.12.4 视图最佳读取方式 ✔

由于视图是虚拟表,不应该对其进行写操作,所以应该采用 只读仓储初始化视图

using Furion.Core;
using Furion.DatabaseAccessor;
using Furion.DynamicApiController;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Furion.Application.Persons
{
public class FurionService : IDynamicApiController
{
private readonly IReadableRepository<V_Person> _readableRepository;

public FurionService(IRepository<V_Person> repository)
{
// 初始化只读仓储
_readableRepository = repository.Constraint<IReadableRepository<V_Person>>();
}

/// <summary>
/// 读取视图
/// </summary>
/// <returns></returns>
public async Task<List<V_Person>> GetVPerson()
{
var list = await _readableRepository.AsQueryable().ToListAsync();
return list;
}
}
}
小知识

通过 .Constraint<TEntity,TDbContextLocator> 方法可以将仓储约束为特定仓储,如只读仓储,可读可写仓储,只新增仓储等。

9.12.5 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dbcontext/index.html b/handbook/build/docs/dbcontext/index.html new file mode 100644 index 00000000000..408ca3eedda --- /dev/null +++ b/handbook/build/docs/dbcontext/index.html @@ -0,0 +1,17 @@ + + + + + +9.1 数据库上下文 | Furion + + + + + +
+

9.1 数据库上下文

连接字符串配置注意事项

如果连接字符串是配置在自定义的 .json 文件中,那么必须在 Visual Studio 中配置 .json 右键属性,设置 复制 输出目录为 如果较新则复制,生成操作为:内容

否则就会提示找不到配置或连接字符串的错误。

9.1.1 数据库上下文

简单来说,数据库上下文是负责和数据库交互的对象,提供程序对数据库存取提供了大量的方法。

Furion 框架中,默认集成了微软亲儿子:EntityFramework Core ,也就是通常数据库上下文指的是 DbContext 类或它的实现类。

9.1.2 AppDbContext

在我们实际项目开发过程中,使用 EFCore 提供的 DbContext 操作对象操作数据库有些繁琐和复杂,且默认不具备读写分离、多库等操作功能。

所以,Furion 框架提供了 AppDbContext<TDbContext, TDbContextLocator> 数据库上下文,该上下文继承自 DbContext

特别说明

后续章节,皆采用 EFCore 代替 EntityFramework Core

9.1.3 AppDbContextDbContext 区别

  • AppDbContext 继承自 DbContext,具备 DbContext 所有功能。
  • AppDbContext 支持多数据库操作泛型版本,如:AppDbContext<TDbContext, TDbContextLocator>
  • AppDbContext 自动配置实体信息,无需在 OnModelCreating 中配置
  • AppDbContext 支持内置多租户支持
  • AppDbContext 支持全局模型配置拦截器
  • AppDbContext 支持数据提交更改多个事件
  • AppDbContext 提供更加强大的模型操作能力,如 Sql 操作,读写分离等
  • AppDbContext 能够得到 Furion 框架更多的功能支持

9.1.4 如何定义数据库上下文

Furion 框架中了,提供了两种 AppDbContext 定义方式:

  • AppDbContext<TDbContext> 操作默认数据库
  • AppDbContext<TDbContext, TDbContextLocator> 操作 N 个数据库

其中 AppDbContext<TDbContext> 默认继承自 AppDbContext<TDbContext, TDbContextLocator>

下面是数据库上下文创建的多个例子:

9.1.4.1 创建默认数据库上下文

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("连接字符串或appsetting.json 键")]
public class FurionDbContext : AppDbContext<FurionDbContext> // 继承 AppDbContext<> 类
{
/// <summary>
/// 继承父类构造函数
/// </summary>
/// <param name="options"></param>
public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}
}
}

9.1.4.2 创建其他数据库上下文

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("连接字符串或appsetting.json 键")]
public class FurOtherDbContext : AppDbContext<FurOtherDbContext, FurOtherDbContextLocator> // 继承 AppDbContext<> 类
{
/// <summary>
/// 继承父类构造函数
/// </summary>
/// <param name="options"></param>
public FurOtherDbContext(DbContextOptions<FurOtherDbContext> options) : base(options)
{
}
}
}
特别注意

所有数据库上下文都应该在 Furion.EntityFramework.Core 项目中创建。另外如果系统用到了多个数据库,那么从第二个开始必须指定数据库上下文定位器。关于 TDbContextLocator 将在下一章节 《9.2 数据库上下文定位器》阐述。

9.1.5 配置连接字符串

Furion 框架提供多种数据库连接字符串配置方式:

  • 在注册数据库服务时配置:AddDbPool<TDbContext>("连接字符串") 方式
  • 使用 [AppDbContext("连接字符串/Key")] 特性方式(只在 AppDbContext 实现类有效推荐
  • 通过重写 OnConfiguring(DbContextOptionsBuilder optionsBuilder) 配置

9.1.5.1 在注册数据库服务时配置

Furion.EntityFramework.Core\Startup.cs
using Furion.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;

namespace Furion.EntityFramework.Core
{
[AppStartup(600)]
public sealed class FurEntityFrameworkCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
// 配置数据库上下文,支持N个数据库
services.AddDatabaseAccessor(options =>
{
// 配置默认数据库
options.AddDbPool<FurionDbContext>(DbProvider.SqlServer, connectionMetadata:"连接字符串");

// 配置多个数据库,多个数据库必须指定数据库上下文定位器
options.AddDbPool<SqliteDbContext, SqliteDbContextLocaotr>(DbProvider.Sqlite, connectionMetadata:"连接字符串");
});
}
}
}
新版 MySQL 注意

MySQL 在新版本包中注册有所修改,所以注册方式为:

services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurionDbContext>($"{DbProvider.MySql}@8.0.22");
});

9.1.5.2 [AppDbContext] 方式配置

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("DbConnectionString")] // 支持 `appsetting.json` 名或 连接字符串
public class FurionDbContext : AppDbContext<FurionDbContext>
{
/// <summary>
/// 继承父类构造函数
/// </summary>
/// <param name="options"></param>
public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}
}
}
小提示

Furion 推荐使用此方式配置数据库连接字符串。

[AppDbContext] 内置属性:

  • ConnectionMetadata:支持数据库连接字符串,配置文件的 ConnectionStrings 中的 Key 或配置文件的完整的配置路径,如果是内存数据库,则为数据库名称。
  • TablePrefix:当前数据库上下文表统一前缀
  • TableSuffix:当前数据库上下文表统一后缀
  • ProviderName:配置数据库提供器类型,传入 DbProvider.Xxx
  • Mode:配置数据库上下文模式,DbContextMode 枚举类型,取值:
    • Cached:缓存模型数据库上下文,默认值
    • Dynamic:动态模型数据库上下文
  • SlaveDbContextLocators:主从库配置,设置多个从库定位器,Type[] 类型

9.1.5.3 OnConfiguring 方式配置

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
public class FurionDbContext : AppDbContext<FurionDbContext>
{
/// <summary>
/// 继承父类构造函数
/// </summary>
/// <param name="options"></param>
public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);

optionsBuilder.UseSqlServer("数据库连接字符串");
}
}
}
特别注意

这三种方式可以同时使用,但是有优先级:[AppDbContext] -> 在注册数据库服务时配置 -> OnConfiguring(低到高)

也就是 OnConfiguring 配置会覆盖 在注册数据库服务时配置 配置,在注册数据库服务时配置 配置会覆盖 [AppDbContext] 配置所配置的连接字符串。

9.1.5.4 各类数据库连接字符串配置示例

  • SqliteData Source=./Furion.db
  • MySqlData Source=localhost;Database=Furion;User ID=root;Password=000000;pooling=true;port=3306;sslmode=none;CharSet=utf8;
  • SqlServerServer=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;
  • OracleUser Id=orcl;Password=orcl;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))
  • PostgreSQLPORT=5432;DATABASE=postgres;HOST=127.0.0.1;PASSWORD=postgres;USER ID=postgres;

9.1.6 数据库上下文定义位置

特别注意

Furion 框架中,数据库上下文需定义在 Furion.EntityFramework.Core 中,且每一个数据库上下文都必须拥有唯一的 DbContextLocator 定位器

9.1.7 数据库上下文注册

数据库上下文配置好数据库连接字符串后,需要注册该数据库上下文,并指定数据库类型,如:

Furion\framework\Furion.EntityFramework.Core\FurEntityFrameworkCoreStartup.cs
using Furion.DatabaseAccessor;
using Microsoft.Extensions.DependencyInjection;

namespace Furion.EntityFramework.Core
{
[AppStartup(600)]
public sealed class FurEntityFrameworkCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurionDbContext>(DbProvider.Sqlite);
});
}
}
}

如果有多个数据库操作,那么从第二个起,就需要绑定数据库上下文定位器,如:

options.AddDbPool<FurionDbContext>(DbProvider.Sqlite); // 第一个数据库

options.AddDbPool<SecondDbContext, SecondDbContextDbContextLocator>(DbProvider.SqlServer); // 第二个数据库

options.AddDbPool<ThirdDbContext, ThirdDbContextDbContextLocator>(DbProvider.SqlServer); // 第三个数据库

9.1.8 自定义高级注册

Furion 框架中,为了能够实现数据库的简单使用进行了注册封装,但有些时候,我们可能需要添加更多配置,这时就需要使用原生自定义配置方式,如:

services.AddDatabaseAccessor(options =>
{
// 自定义原生配置
options.AddDb<YourDbContext>((services, builder) =>
{
builder.UseSqlite(...);
}
});
小知识

Furion 框架提供了快速解析连接字符串的静态方法,自动根据名称读取配置,自动解析 [AppContext("...")] 信息,如:

// 获取连接字符串
var connStr = DbProvider.GetConnectionString<YourDbContext>(/*这里可写可不写*/);

options.AddDb<YourDbContext>((services, builder) =>
{
builder.UseSqlite(connStr, ...);
}

9.1.9 动态数据库上下文对象

Furion 框架中,数据库上下文是定义在 Furion.EntityFramework.Core 项目层,并且该层不被 Furion.ApplicationFurion.Core 等层引用。

所以就不能直接在 Furion.Application 项目层直接使用 Furion.EntityFramework.Core 定义的数据库上下文。

Furion 为了解决这个问题,提供了两种方式处理:

  • repository.Context :当前数据库上下文对象,返回是 DbContext 抽象类型
  • repository.DynamicContext:当前数据库上下文对象,返回的是 dynamic 类型

如果你只是想使用 DbContext 的功能,直接使用 repository.Context 即可,如:

repository.Context.SaveChanges();

如果你想能够获取具体的数据库上下文类型,如 MyDbContext,那么使用 repository.DynamicContext 就可以获取到具体的 MyDbContext 类型。如:

var persons = repository.DynamicContext.Persons.Find(1);
var users = repository.DynamicContext.Users;

这样就可以直接操作 MyDbContext 定义的属性和方法了。

9.1.10 在后台任务中使用

由于 DbContext 默认注册为 Scoped 生存周期,所以在后台任务中使用 IServiceScopeFactory 获取所有服务,如:

public class JobService : BackgroundService
{
// 日志对象
private readonly ILogger<JobService> _logger;

// 服务工厂
private readonly IServiceScopeFactory _scopeFactory;
public JobService(ILogger<JobService> logger
, IServiceScopeFactory scopeFactory)
{
_logger = logger;
_scopeFactory = scopeFactory;
}

protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("写日志~~");

using (var scope = _scopeFactory.CreateScope())
{
var services = scope.ServiceProvider;

// 获取数据库上下文
var dbContext = Db.GetDbContext(services);

// 获取仓储
var repository = Db.GetRepository<Person>(services);

// 解析其他服务
var otherService = services.GetService<XXX>();
}

return Task.CompletedTask;
}
}
数据库操作注意

如果作用域中对数据库有任何变更操作,需手动调用 SaveChanges 或带 Now 结尾的方法。也可以使用 Scoped.CreateUow(handler) 代替。

9.1.11 AppDbContext 全局配置属性

  • InsertOrUpdateIgnoreNullValues:新增或更新忽略空值,默认 false在构造函数中配置
  • EnabledEntityStateTracked:启用实体跟踪,默认 true在构造函数中配置
  • EnabledEntityChangedListener:启用实体数据更改监听,默认 false在构造函数中配置
  • Tenant:默认内置多租户
  • FailedAutoRollback:是否启用保存失败后事务自动回滚,默认 true,可以在任何地方配置

9.1.12 配置实体 懒加载

  • 第一步:安装 EFCore 拓展包

在数据库上下文定义所在的层安装 Microsoft.EntityFrameworkCore.Proxies 拓展包

  • 第二步:采用 AddDb<TDbContext> 方式注册

确保数据库上下文采用 AddDb<TDbContext> 注册而非 AddDbPool<TDbContext>

  • 第三步:重写 OnConfiguring 方法
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class DefaultDbContext : AppDbContext<DefaultDbContext>
{
public DefaultDbContext(DbContextOptions<DefaultDbContext> options) : base(options)
{
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseLazyLoadingProxies()
.UseSqlite(DbProvider.GetConnectionString<DefaultDbContext>());

base.OnConfiguring(optionsBuilder);
}
}
}
小知识

更多 EFCore 懒加载可查看 【EFCore - 延迟加载】 文档。

9.1.13 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 数据库上下文 知识可查阅 EF Core - 配置 DbContext 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dependency-injection/index.html b/handbook/build/docs/dependency-injection/index.html new file mode 100644 index 00000000000..a8f259ea1d1 --- /dev/null +++ b/handbook/build/docs/dependency-injection/index.html @@ -0,0 +1,17 @@ + + + + + +12. 依赖注入/控制反转 | Furion + + + + + +
+

12. 依赖注入/控制反转

阅前必读

由于很多朋友第一次接触 依赖注入/控制反转 的架构理念,所以没搞明白 作用域多线程解析服务 的问题,从而不正确的使用导致内存不断飙高,正确的方式应该是:

  • 尽可能的采用构造函数注入(如果这个类支持)
  • 在非静态中(但在 Web 请求有效的声明周期内)可安全使用 App.GetService<> 解析服务,如果是 单例服务,优先推荐构造函数注入或 App.RootServices.GetService<> 方式
  • 🤐 在非 Web 环境、多线程环境、物联网等环境(含事件总线、定时任务等)🏒 除单例服务以外 🏒 必须采用 Scoped.Create() 方式创建作用域且服务在内部委托中解析! 🤐

12.1 依赖注入

所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。

通俗来讲,就是把有依赖关系的类放到容器中,然后在我们需要这些类时,容器自动解析出这些类的实例。

依赖注入最大的好处是实现类的解耦,利于程序拓展、单元测试、自动化模拟测试等。

依赖注入的英文为:Dependency Injection,简称 DI

12.2 控制反转

控制反转只是一个概念,也就是将创建对象实例的控制权(原本是程序员)从代码控制权剥离到 IOC 容器 中控制。

控制反转的英文为:Inversion of Control,简称 IOC

12.3 IOC/DI 优缺点

传统的代码,每个对象负责管理与自己需要依赖的对象,导致如果需要切换依赖对象的实现类时,需要修改多处地方。同时,过度耦合也使得对象难以进行单元测试。

  • 优点

    • 依赖注入把对象的创造交给外部去管理,很好的解决了代码紧耦合(tight couple)的问题,是一种让代码实现松耦合(loose couple)的机制
    • 松耦合让代码更具灵活性,能更好地应对需求变动,以及方便单元测试
  • 缺点

    • 目前主流的 IOC/DI 基本采用反射的方式来实现依赖注入,在一定程度会影响性能
特别说明

在本章节不打算细讲 依赖注入/控制反转 具体实现和应用场景,想了解更多知识,可查阅 【ASP.NET Core 依赖注入】 官方文档。

12.4 依赖注入的三种方式

12.4.1 构造方法注入

目前构造方法注入是依赖注入推荐使用方式。

  • 优点

    • 在构造方法中体现出对其他类的依赖,一眼就能看出这个类需要依赖哪些类才能工作
    • 脱离了 IOC 框架,这个类仍然可以工作,POJO 的概念
    • 一旦对象初始化成功了,这个对象的状态肯定是正确的
  • 缺点

    • 构造函数会有很多参数(Bad smell)
    • 有些类是需要默认构造函数的,比如 MVC 框架的 Controller 类,一旦使用构造函数注入,就无法使用默认构造函数
    • 这个类里面的有些方法并不需要用到这些依赖(Bad smell)

代码示例:

public class FurionService
{
private readonly IRepository _repository;
public FurionService(IRepository repository)
{
_repository = repository;
}
}

12.4.2 属性方式注入

特别声明

Furion 新版本中,已经移除属性注入功能,建议使用构造函数或方法方式注入,也可以通过 App.GetService<TService> 方式注入。

通过属性方式注入容易和类的实例属性混淆,不建议使用。

  • 优点

    • 在对象的整个生命周期内,可以随时动态的改变依赖
    • 非常灵活
  • 缺点

    • 对象在创建后,被设置依赖对象之前这段时间状态是不对的
    • 不直观,无法清晰地表示哪些属性是必须的
public class FurionService
{
public IRepository Repository { get; set; }
}

12.4.3 方法参数注入

方法参数注入的意思是在创建对象后,通过自动调用某个方法来注入依赖。

  • 优点:

    • 比较灵活
  • 缺点:

    • 新加入依赖时会破坏原有的方法签名,如果这个方法已经被其他很多模块用到就很麻烦
    • 与构造方法注入一样,会有很多参数
public class FurionService
{
public Person GetById([FromServices]IRepository repository, int id)
{
return repository.Find(id);
}
}

12.5 注册对象生存期

12.5.1 暂时/瞬时 生存期

暂时生存期服务是每次从服务容器进行请求时创建的。 这种生存期适合轻量级、 无状态的服务。

在处理请求的应用中,在请求结束时会释放暂时服务。

通常我们使用 ITransient 接口依赖表示该生命周期。

12.5.2 作用域 生存期

作用域生存期服务针对每个客户端请求(连接)创建一次。在处理请求的应用中,在请求结束时会释放有作用域的服务。

通常我们使用 IScoped 接口依赖表示该生命周期。

12.5.3 单例 生存期

在首次请求它们时进行创建,之后每个后续请求都使用相同的实例。

通常我们使用 ISingleton 接口依赖表示该生命周期。

了解更多

想了解更多 服务生存期 知识可查阅 ASP.NET Core - 依赖注入 - 服务生存期 章节。

12.6 内置依赖接口

Furion 框架提供三个接口依赖分别对应不同的服务生存期:

  • ITransient:对应暂时/瞬时作用域服务生存期
  • IScoped:对应请求作用域服务生存期
  • ISingleton:对应单例作用域服务生存期
特别注意

以上三个接口只能实例类实现,其他静态类、抽象类、及接口不能实现。

12.7 常见使用

12.7.1 第一个例子

创建 IBusinessService 接口和 BusinessService 实现类,代码如下:

using Furion.Core;
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;

namespace Furion.Application
{
public interface IBusinessService
{
Person Get(int id);
}

public class BusinessService : IBusinessService, ITransient
{
private readonly IRepository<Person> _personRepository;

public BusinessService(IRepository<Person> personRepository)
{
_personRepository = personRepository;
}

public Person Get(int id)
{
return _personRepository.Find(id);
}
}
}

创建 PersonController 控制器,代码如下:

using Furion.Application;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Web.Entry.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class PersonController : ControllerBase
{
private readonly IBusinessService _businessService;
public PersonController(IBusinessService businessService)
{
_businessService = businessService;
}

[HttpGet]
public IActionResult Get(int id)
{
var person = _businessService.Get(id);
return new JsonResult(person);
}
}
}

例子解说

Furion 框架提供了非常灵活且方便的实现依赖注入的方式,只需要实例类继承对应生存期的接口即可,这里继承了 ITransient,也就表明了这是一个 暂时/瞬时 作用域实例类。该类就可以作为被注入对象,同时也能注入其他接口对象。

上面的例子中,BusinessService 注入了 IRepository<Person> 仓储接口,同时 PersonController 控制器注入了 IBusinessService 接口。

这样 PersonControllerBusinessService 之间就实现了解耦,不再依赖于具体的 BusinessService 实例。

这就是依赖注入/控制反转最经典的例子。

12.7.2 注册泛型实例

创建 IBusinessService<T> 接口和 BusinessService<T> 实现类,代码如下:

using Furion.Core;
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;

namespace Furion.Application
{
public interface IBusinessService<T>
{
Person Get(int id);
}

public class BusinessService<T> : IBusinessService<T>, ITransient
{
private readonly IRepository<Person> _personRepository;

public BusinessService(IRepository<Person> personRepository)
{
_personRepository = personRepository;
}

public Person Get(int id)
{
return _personRepository.Find(id);
}
}
}

创建 PersonController 控制器,代码如下:

using Furion.Application;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Web.Entry.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class PersonController : ControllerBase
{
private readonly IBusinessService<int> _businessService;
public PersonController(IBusinessService<int> businessService)
{
_businessService = businessService;
}

[HttpGet]
public IActionResult Get(int id)
{
var person = _businessService.Get(id);
return new JsonResult(person);
}
}
}

12.7.3 一个接口多个实现

默认情况下,一个接口只对应一个实现类,但有些特殊情况,需要多个实现类注册同一个接口,如 DbContext 多数据库情况。

这个时候我们可以通过依赖注入 Func<string, IPrivateDependency, object> 委托来解析多个实例,其中委托的参数分别为:

  • 参数 1:string 类型,不同实现类唯一标识,默认为 nameof(实现类) 名称
  • 参数 2:Type 类型,IPrivateDependency 派生接口,也就是 ITransientIScopedISingleton
  • 返回值:object 类型,返回具体的实现类实例

创建 IBusinessService 接口和 BusinessServiceOtherBusinessService 两个实现类,代码如下:

using Furion.DependencyInjection;

namespace Furion.Application
{
public interface IBusinessService
{
string GetName();
}

public class BusinessService : IBusinessService, ITransient
{
public string GetName()
{
return "我是:" + nameof(BusinessService);
}
}

public class OtherBusinessService : IBusinessService, ITransient
{
public string GetName()
{
return "我是:" + nameof(OtherBusinessService);
}
}
}
新版本,推荐使用

Furion 3.8.6+ 版本之后新增了 INamedServiceProvider 服务接口,可替代 Func<string, ILifetime, object> 方式:

using Furion.Application.Services;

namespace Furion.Application;

public class TestNamedServices : IDynamicApiController
{
private readonly INamedServiceProvider<IBusinessService> _namedServiceProvider;
public TestNamedServices(INamedServiceProvider<IBusinessService> namedServiceProvider)
{
_namedServiceProvider = namedServiceProvider;
}

public string GetName()
{
// 第一种用法,通过反射解析服务周期,性能有损耗
var service1 = _namedServiceProvider.GetService(nameof(BusinessService));
var service2 = _namedServiceProvider.GetService(nameof(OtherBusinessService));

// 第二种用法,无需反射,注意下面的泛型参数传入的是生命周期依赖接口,ITransient, IScoped, ISingleton
var service3 = _namedServiceProvider.GetService<ITransient>(nameof(BusinessService));
var service4 = _namedServiceProvider.GetService<ITransient>(nameof(OtherBusinessService));

return service1.GetName() + "-" + service2.GetName() + "-" + service3.GetName() + "-" + service4.GetName();
}
}
不再推荐 Func<string, TLifetime, object> 方式
using Furion.Application;
using Furion.DependencyInjection;
using Microsoft.AspNetCore.Mvc;
using System;

namespace Furion.Web.Entry.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValueController : ControllerBase
{
private readonly IBusinessService _businessService;
private readonly IBusinessService _otherBusinessService;

public ValueController(Func<string, ITransient, object> resolveNamed)
{
_businessService = resolveNamed("BusinessService", default) as IBusinessService;
_otherBusinessService = resolveNamed("OtherBusinessService", default) as IBusinessService;
}

[HttpGet]
public string GetName()
{
return _businessService.GetName() + "----------" + _otherBusinessService.GetName();
}
}
}
小知识

如果需要自定义解析名称,只需要贴 [Injection(Named = "名称")] 即可,如:

using Furion.DependencyInjection;

namespace Furion.Application
{
[Injection(Named = "BusName1")]
public class BusinessService : IBusinessService, ITransient
{
// ...
}

[Injection(Named = "BusName2")]
public class OtherBusinessService : IBusinessService, ITransient
{
// ...
}
}

解析服务:

_businessService = resolveNamed("BusName1", default) as IBusinessService;
_otherBusinessService = resolveNamed("BusName2", default) as IBusinessService;

12.7.4 无接口方式

有些时候,我们不想定义接口,而是想把实例类作为可依赖注入的对象,如 MVC 中的控制器。

创建 SelfService 实例类,代码如下:

using Furion.Core;
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;

namespace Furion.Application
{
public class SelfService : ITransient
{
private readonly IRepository<Person> _personRepository;

public SelfService(IRepository<Person> personRepository)
{
_personRepository = personRepository;
}

public Person Get(int id)
{
return _personRepository.Find(id);
}
}
}

创建 ValueController 控制器,代码如下:

using Furion.Application;
using Furion.Core;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Web.Entry.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValueController : ControllerBase
{
private readonly SelfService _selfService;

public ValueController(SelfService selfService)
{
_selfService = selfService;
}

[HttpGet]
public Person Get(int id)
{
return _selfService.Get(id);
}
}
}

12.8 [Injection] 特性配置

Furion 框架提供 [Injection] 特性可以改变注册方式,同时还能配置 AOP 拦截。

[Injection] 提供以下配置支持:

  • Action:配置注册行为,InjectionActions 类型,可选值:
    • Add默认值,表示无限制添加注册服务,该方式支持一个接口多个实现
    • TryAdd:表示注册已存在则跳过注册
  • Pattern:配置注册选项,InjectionPatterns 类型,可选值:
    • Self:只注册自己
    • FirstInterface:只注册第一个接口
    • SelfWithFirstInterface:注册自己和第一个接口
    • ImplementedInterfaces:注册所有接口
    • All:注册自己包括所有接口 ,默认值
  • Named:配置实例别名,通过别名可以解析接口,如同一个接口有多个实现,那么可以通过别名解析不同的实现,默认只为实现类的类名
  • Order:注册排序,数字越大,则越在最后注册,默认 0
  • Proxy:配置代理拦截类型,也就是 AOP代理类型必须继承 AspectDispatchProxy 类和 IDispatchProxy 接口,无默认值
  • ExpectInterfaces:配置忽略注册的接口,Type[] 类型

12.9 自定义高级注册

默认情况下,Furion 提供的注册方式可以满足大多数依赖注入的需求,如有特别注册需求,只需要在 Startup 中配置即可,如:

services.AddScoped(typeof(ISpecService), provider = > {
// 自定义任何创建实例的方式
var instance = new SpecService(); // 或者可以通过 AOP插件返回代理实例

return instance;
});
补充说明

Furion 框架中的 AppDbContext 数据库上下文还有 ISqlDispatchProxy 都是通过这种方式创建的。

知识导航

想了解更多自定义高级中注册,可查阅 【ASP.NET Core 依赖注入】 官方文档。

12.10 appsettings.json 配置注册

除了在代码中实现依赖注入,也可以实现动态依赖注入,无需修改代码或重新编译即可实现热插拔(插件)效果。配置如下:

{
"DependencyInjectionSettings": {
"Definitions": [
{
"Interface": "Furion.Application;Furion.Application.ITestService",
"Service": "Furion.Application;Furion.Application.TestService",
"RegisterType": "Transient",
"Action": "Add",
"Pattern": "SelfWithFirstInterface",
"Named": "TestService",
"Order": 1,
"Proxy": "Furion.Application;Furion.Application.LogDispathProxy"
}
]
}
}

配置说明:

  • DependencyInjectionSettings:依赖注入配置根节点
    • Definitions:动态依赖注入配置节点,ExternalService 数组类型
      • ExternalService:配置单个依赖注入信息
关于外部程序集

如果动态注入的对象是外部程序集,那么首先先注册外部程序集:

{
"AppSettings": {
"ExternalAssemblies": ["外部程序集名称", "Taobao.Pay"] // 支持多个
}
}

12.11 注册顺序和优先级

Furion 框架中,默认注册顺序是按照程序集扫描顺序进行注册,如果需要改变注册顺序,可通过 [Injection(Order)] 特性指定,Order 值越大,则越在最后注册。

另外 appsettings.json 配置的优先级最大,appsettings.json 配置的注册会覆盖之前所有注册。

12.12 Aop 注册拦截

关于动态 API 和服务的区别

如果您的服务是动态 API,那么请使用 动态 API - AOP 拦截,原因是动态 API 本质是控制器,所以采用 Filter 方式。

AOP 是非常重要的思想和技术,也就是 面向切面 编程,可以让我们在不改动原来代码的情况下进行动态篡改业务代码。

Furion 框架中,实现 Aop 非常简单,如:

假设我们有 ITestServiceTestService 两个类型:

public interface ITestService
{
string SayHello(string word);
}
public class TestService: ITestService, ITransient
{
public string SayHello(string word)
{
return $"Hello {word}";
}
}

现在我们有一个需求,我们希望调用 SayHello 的时候可以记录日志和权限控制(之前没有考虑到的需求)。

这个时候我们只需要创建一个代理类即可,如 LogDispatchProxy

using Furion.DependencyInjection;
using System;
using System.Reflection;

namespace Furion.Application
{
public class LogDispatchProxy : AspectDispatchProxy, IDispatchProxy
{
/// <summary>
/// 当前服务实例
/// </summary>
public object Target { get; set; }

/// <summary>
/// 服务提供器,可以用来解析服务,如:Services.GetService()
/// </summary>
public IServiceProvider Services { get; set; }

/// <summary>
/// 拦截方法
/// </summary>
/// <param name="method"></param>
/// <param name="args"></param>
/// <returns></returns>
public override object Invoke(MethodInfo method, object[] args)
{
Console.WriteLine("SayHello 方法被调用了");

var result = method.Invoke(Target, args);

Console.WriteLine("SayHello 方法返回值:" + result);

return result;
}

// 异步无返回值
public override async Task InvokeAsync(MethodInfo method, object[] args)
{
Console.WriteLine("SayHello 方法被调用了");

var task = method.Invoke(Target, args) as Task;
await task;

Console.WriteLine("SayHello 方法调用完成");
}

// 异步带返回值
public override async Task<T> InvokeAsyncT<T>(MethodInfo method, object[] args)
{
Console.WriteLine("SayHello 方法被调用了");

var taskT = method.Invoke(Target, args) as Task<T>;
var result = await taskT;

Console.WriteLine("SayHello 方法返回值:" + result);

return result;
}
}
}
获取特性

如果需要获取方法的特性,只需要通过 method.GetActualCustomAttribute<TArrbute>() 即可。所有获取真实的特性统一采用 method.GetActual....() 方法开头。

之后我们只需要为 TestService 增加 [Injection] 特性即可,如:

[Injection(Proxy = typeof(LogDispatchProxy))]
public class TestService: ITestService, ITransient
{
public string SayHello(string word)
{
return $"Hello {word}";
}
}

之后 SayHello 方法被调用的时候就可以实现动态拦截了,比如这里写日志。

12.12.1 全局Aop拦截

Furion 框架也提供了全局拦截的方式,只需要将 IDispatchProxy 修改为 IGlobalDispatchProxy 即可。

using Furion;
using System.Reflection;

namespace Furion.Application
{
public class LogDispatchProxy : AspectDispatchProxy, IGlobalDispatchProxy
{
// ....
}
}

这样就会拦截所有的 Service,当然也可以通过给特定类贴 [SuppressProxy] 跳过全局拦截操作。

拦截优先级

[SuppressProxy] > [Injection(Proxy = typeof(LogDispatchProxy))] > 全局拦截

12.12.2 AOP 注入解析服务

Furion 框架未提供 Proxy 构造函数注入功能,但是提供了 Services 属性,如果需要解析服务,则可以通过以下方式:

var someServices = Services.GetService<ISomeService>(); // 推荐方式
// 或
var someServices = App.GetService<ISomeService>();

12.12.3 AOP 的作用

这种面向切面的能力(动态拦截/代理)可以实现很多很多功能,如:

  • 动态日志记录
  • 动态修改参数
  • 动态修改返回值
  • 动态方法重定向
  • 动态修改代码逻辑
  • 动态实现异常监听

还可以做更多更多的事情。

12.13 在非 Web 或多线程解析服务

默认情况下,在 Web 请求开始之前会自动创建范围作用域,这个作用域的生存周期是请求之前和响应之后,也就是在这个作用域内的所有服务都实现了自动管理,比如创建服务和释放服务的时机。

但在非 Web 或多线程中,框架并不会做这样的事情,也就是框架只负责了服务的创建,但是没有负责销毁,原因是框架无法得知具体的销毁时机,这样就导致了内存溢出。

解决方式是:在非 Web 或多线程中使用服务,应该主动创建作用域,类似过去的 using,目前框架提供了几种方式。

12.13.1 IServiceProvider 方式

using var scope = serviceProvider.CreateScope();
var services = scope.ServiceProvider;

// 获取数据库上下文
var dbContext = Db.GetDbContext(services);

// 获取仓储
var respository = Db.GetRepository<Person>(services);

// 解析其他服务
var otherService = services.GetService<XXX>();
var otherService2 = App.GetService<XXX>(services);

12.13.2 IServiceScopeFactory 方式

using var scope = serviceScopeFactory.CreateScope();
var services = scope.ServiceProvider;

12.13.3 Scoped 静态类

为了方法快速创建服务作用域,Furion 框架提供了 Scoped 静态类,如:

Scoped.Create((factory, scope) => {
var services = scope.ServiceProvider;
});

12.14 自定义扫描/筛选注册服务

Furion 框架中并未提供完全自定义依赖注入扫描的机制,但推荐一个非常优秀的 .NET Core 依赖注入拓展库:Scrutor,使用非常简单,主要通过 FromAssemblyOf<> 扫描程序集和 AddClasses(o) 进行筛选注册。

使用如下:

services.Scan(scan => scan
// 扫描特定类型所在的程序集,这里是 ITransientService 所在的程序集
.FromAssemblyOf<ITransientService>()
// .AddClasses 在上面获取到的程序集中扫描所有公开、非抽象类型
// 之后可以通过委托进行类型筛选,例如下面只扫描实现 ITransientService 的类型
.AddClasses(classes => classes.AssignableTo<ITransientService>())
// 将上面的类型作为它实现的所有接口进行注册
// 如果类型实现了 N 个接口,那么就会有三个独立的注册
.AsImplementedInterfaces()
// 最后指定注册的生存期,如瞬时,作用域,还是单例
.WithTransientLifetime()
// 重复上面操作,比如这里扫描 IScopedService 所在的程序集
.AddClasses(classes => classes.AssignableTo<IScopedService>())
// 这里和上面不一样的是,这里指定只实现特定的几口,也就是只注册一次
.As<IScopedService>()
// 指定注册的生存期
.WithScopedLifetime()
// 也支持泛型注册,单个泛型参数
.AddClasses(classes => classes.AssignableTo(typeof(IOpenGeneric<>)))
.AsImplementedInterfaces()
// 多个泛型参数
.AddClasses(classes => classes.AssignableTo(typeof(IQueryHandler<,>)))
.AsImplementedInterfaces());

详细文档请查阅 https://github.com/khellang/Scrutor

12.15 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/deploy-docker-auto/index.html b/handbook/build/docs/deploy-docker-auto/index.html new file mode 100644 index 00000000000..9330f17f8ba --- /dev/null +++ b/handbook/build/docs/deploy-docker-auto/index.html @@ -0,0 +1,18 @@ + + + + + +35.1 Docker 环境持续部署 | Furion + + + + + +
+

35.1 Docker 环境持续部署

35.1.1 关于全 Docker 环境部署

利用拥有 .NET 环境的 Jenkins,进行持续化部署

35.1.2 安装 DockerJenkins

正常在 Docker 中拉取的 Jenkins:lts 是无法执行 dotnet 命令的(就算你宿主机有 dotnet 环境、docker 中也有 dotnet 环境也不可以), +所以我们只能构建一个包含 dotnet 的镜像

35.1.2.1 使用 Dockerfile 制作镜像

使用 Dockerfile 创建包含 dotnetJenkins 镜像

  • 👉 编写 Dockerfile
# 封装Jenkins镜像(带有dotnet环境的) sdk=5.1
FROM jenkins/jenkins:lts
USER root
WORKDIR /dotnet
RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*
RUN wget -O dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/820db713-c9a5-466e-b72a-16f2f5ed00e2/628aa2a75f6aa270e77f4a83b3742fb8/dotnet-sdk-5.0.100-linux-x64.tar.gz
RUN tar zxf dotnet.tar.gz -C ./
RUN rm -rf dotnet.tar.gz
ENV PATH="${PATH}:/dotnet:/var/jenkins_home/.dotnet/tools"
ENV DOTNET_ROOT="/dotnet"
RUN apt update -y
RUN apt install icu-devtools vim zip unzip -y
RUN usermod -a -G root jenkins
USER jenkins
  • 👉 命令解释
- 1. 这个Docker镜像基于jenkins
- 2. 设置当前用户为root,因为后面安装需要使用root
- 3. 设置当前工作目录为dotnet
- 4. 下载dotnet SDK包,保存为dotnet.tar.gz。这里要注意下载正确版本的SDK,可前往微软官方网站获取下载链接:https://dotnet.microsoft.com/download
- 5. 解压dotnet SDK到当前目录,即/dotnet目录
- 6. 删除dotnet SDK包
- 7. 把dotnet目录和dotnet tools目录添加到环境变量PATH,这样就可以使用dotnet命令了
- 8. 设置DOTNET_ROOT变量
- 9. 更新源
- 10. 安装一些必需的,常用的工具包,其中icu-devtools是运行dotnet需要的
- 11. 修改jenkins用户到root附加组
- 12. 设置当前用户为jenkins
  • 👉 构建 Docker 镜像 name=jenkins:dotnet

cd 到根目录下(必须含 Dockerfile) 只需构建命令:

 docker build -t jenkins:dotnet .
特别注意

结尾 . 不能省略

35.1.2.2 运行 Jenkins:dotnet 镜像

docker run -d -p 8080:8080 -p 50000:50000 --name mjenkins  \
--privileged=true \
--restart always \
-u root \
-e TZ="Asia/Shanghai" \
-v /mudata/jenkins:/var/jenkins_home \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /mudata/webroot/:/mudata/webroot \
jenkins:dotnet

接下来就是比较俗套的安装 Jenkins 步骤,网上资料很多,不展开了。

35.1.3 Jenkins 的自动化部署

35.1.3.1 编写 Shell 脚本

# Jenkins 构建 测试服

echo '============查看打包环境================'
pwd
ls
echo $PATH

image_version=`date +%Y%m%d%H%M`;
echo $image_version;

dotnet --info
dotnet --version

# 获取短版本号
GITHASH=`git rev-parse --short HEAD`

echo '============================begin restore======================================='
dotnet restore
echo '============================end restore======================================='

#要构建的解决方案名称
solutionName=MUSaas.SCM.BasicData
#docker run的容器名称
containerName=jenkinsscmbasic
#指定run的端口
port=9994
#.sln文件全路径
#solutionDir=20-Solution/${solutionName}.sln
#.csproj文件全路径
csprojDir=${solutionName}/${solutionName}.csproj

#项目发布的目录
webDir=/mudata/webroot/jenkins/publish/webapp

#归档目录
archivesDir=/mudata/webroot/jenkins/publish/archives

#清空文件夹
rm -rf ${webDir}/${JOB_NAME}/*

#发布网站到webDir
dotnet publish ${JENKINS_HOME}/workspace/${JOB_NAME}/${csprojDir} -c Release -o ${webDir}/${JOB_NAME} /p:Version=1.0.${BUILD_NUMBER}
#复制配置文件
#cp -rf /vdb1/jenkins/DotNetCoreWebPublishToDockerCommonConfigs/* ${webDir}/${JOB_NAME}/

#判斷是否存在
CID=$(docker ps | grep "${containerName}" | awk '{print $1}')
echo $CID
if [ "$CID" != "" ];then
docker stop ${containerName}
docker rm ${containerName}
docker rmi ${containerName}
#docker stop $CID
#docker rm $CID
fi


#通过Dockerfile重新构建镜像
docker build -t ${containerName} ${webDir}/${JOB_NAME}/.
#docker run容器并绑定到端口
#docker run -d -p ${port}:80 --name ${containerName} ${containerName}
docker run --name ${containerName} --restart=always -d -p ${port}:${port} -v /etc/localtime:/etc/localtime:ro ${containerName}
echo "success!"

就这样自动化部署就好了。 测试服的 Jenkins 将源码拉下来,Publish,Docker Build,Docker Run

这里想要发布的时候,每次都需要手动去点击“构建”才会执行。也可以做成当分支合并成功后自动运行。反正 Jenkins 装好之后,你想要什么都能玩起来。比如指定分支提交后自动“构建”、比如构建成功后合并到 Master 等等

35.1.4 Jenkins 的自动化远程部署

35.1.4.1 安装插件

Publish Over SSH

35.1.4.2 配置

系统管理 => Publish over SSH

35.1.4.3 写脚本

# Jenkins 构建  正式服

echo '============查看打包环境================'
pwd
ls
echo $PATH

image_version=`date +%Y%m%d%H%M`;
echo $image_version;

dotnet --info
dotnet --version

# 获取短版本号
GITHASH=`git rev-parse --short HEAD`

echo '============================begin restore======================================='
dotnet restore
echo '============================end restore======================================='

#要构建的解决方案名称
solutionName=MUSaas.SCM.BulkOrder
#docker run的容器名称
containerName=jenkinsscmbulk
#指定run的端口
port=9986
#.csproj文件全路径
csprojDir=/${solutionName}/${solutionName}.csproj

#项目发布的目录
webDir=/mudata/webroot/jenkins/publish/webapp

#归档目录
archivesDir=/mudata/webroot/jenkins/publish/archives

#清空文件夹
rm -rf ${webDir}/${JOB_NAME}/*

#发布网站到webDir
dotnet publish ${JENKINS_HOME}/workspace/${JOB_NAME}/${csprojDir} -c Release -o ${webDir}/${JOB_NAME} /p:Version=1.0.${BUILD_NUMBER}
#复制配置文件
#cp -rf /vdb1/jenkins/DotNetCoreWebPublishToDockerCommonConfigs/* ${webDir}/${JOB_NAME}/


#构建远程包

rm -rf ${JENKINS_HOME}/workspace/${JOB_NAME}/publish
mkdir ${JENKINS_HOME}/workspace/${JOB_NAME}/publish

tar -czvf ${JENKINS_HOME}/workspace/${JOB_NAME}/publish/${JOB_NAME}.${BUILD_NUMBER}.tar.gz -C ${webDir}/${JOB_NAME} .

echo "success!"

大概逻辑就是发布后,打个包。然后丢给远程,远程再执行 shell

注意这里一定要发布到自己的 workspace 下,防止下一步死活找不到位置。如果找不到位置,只能慢慢用 ls 命令,一级一级去测,很麻烦

35.1.4.4 构建后操作(关键)

选择 Send Build artifacts over SSH

Source files: publish/
Remove prefix(不填)
Remote directory:/mudata/webroot/publish/
Exec command:bash /mudata/shell/publish.sh ${JOB_NAME} jenkinsscmbase ${JOB_NAME}.${BUILD_NUMBER} 9994
  • 选择自己的 SSH 服务器
  • Source files:一定是 workspace 下的地址
  • Remote directory:远程地址,从根目录开始
  • Exec command:要执行的 shell。这里所有的 Jenkins 环境变量都可以用

35.1.4.5 远程执行

publish.sh
# Jenkins Prod服 调用脚本
solutionName=$1
containerName=$2
filename=$3
port=$4
#.publis
echo ${solutionName}
echo ${containerName}
echo ${filename}
baseDir=/mudata/webroot/publish

webDir=${baseDir}/publish/${filename}

rm -rf ${webDir}
mkdir ${webDir}

tar -zxvf ${baseDir}/publish/${filename}.tar.gz -C ${webDir}/
rm -f ${webDir}/appsettings.json && mv ${webDir}/appsettings.Prod.json ${webDir}/appsettings.json

#判斷是否存在
CID=$(docker ps | grep "${containerName}" | awk '{print $1}')
echo $CID
if [ "$CID" != "" ];then
docker stop ${containerName}
docker rm ${containerName}
docker rmi ${containerName}
#docker stop $CID
#docker rm $CID
fi

cd ${webDir}/ && docker build -t ${containerName} .
docker run --name ${containerName} --restart=always -d -p ${port}:${port} --link myredis:myredis -v /etc/localtime:/etc/localtime:ro ${containerName}

这里的逻辑就是解压,然后 Docker 相关。每次构建都是带着版本号来的。

35.1.5 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/deploy-docker/index.html b/handbook/build/docs/deploy-docker/index.html new file mode 100644 index 00000000000..5e8640e7c98 --- /dev/null +++ b/handbook/build/docs/deploy-docker/index.html @@ -0,0 +1,17 @@ + + + + + +34.2 在 Docker 部署 | Furion + + + + + +
+

34.2 在 Docker 部署

精简发布文件

如果需要精简发布后的文件,也就是删除不必要的文件夹,可以编辑 Web 项目的 .csproj 并添加 <SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>,如:

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>
</PropertyGroup>

34.2.1 关于 Docker 部署

Docker 中部署网站有两种方式:

  • 发布后构建:此方式是先发布网站后在再构建镜像,这样可以减少不必要的构建层,而且还能缩减镜像大小。(推荐)
  • 编译+构建+发布:也就是说在 Dockerfile 中配置网站从构建到发布的完整过程,此方式会速度慢,而且会产生冗余层,增加镜像大小。

34.2.2 两种方式构建

34.2.2.1 发布后构建

  • 👉 发布网站

首先在 Visual Studiodotnet cli 中发布网站,可以参考 在 IIS 部署-发布网站

  • 👉 编写 Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:5.0.9
WORKDIR /app
EXPOSE 80
EXPOSE 443

COPY . .
ENTRYPOINT ["dotnet", "Furion.Web.Entry.dll"]
  • 👉 将 Dockerfile 文件拷贝到发布根目录

将编写好的 Dockerfile 文件(注意 D 大写)拷贝到发布网站的根目录下。

  • 👉 构建 Docker 镜像

在网站发布后的路径根目录下(必须含 Dockerfile)打开 CMD/PowerShell 只需构建命令:

docker build -t 网站名称:网站版本号 .
特别注意

后端的 . 不能省略

  • 👉 启动镜像
docker run --name 容器名称 -p 5000:80 --restart=always -d 网站名称:网站版本号
发布到 hub.docker.com

如果需要将该网站的镜像公开出去,那么可以发布到 hub.docker.com 中。发布步骤如下:

  • 👉 为镜像打 tag 标签
docker tag 网站名称:网站版本号 docker账号名/网站名称:网站版本号

如:

docker tag furion:v2.20 monksoul/furion:v2.20
  • 👉 登录 docker
docker login
  • 👉 推送到 hub.docker.com
docker push docker账号名/网站名称:网站版本号

如:

docker push monksoul/furion:v2.20

34.2.2.2 编译+构建+发布

此方式可以偷懒,但是不太推荐,不过在某些场景下非常有用,就是集成 Devops 工具链可以做到一步到位。

  • 👉 编写 Dockerfile

这种方式只需要把 Dockerfile 内容替换成以下即可:

FROM mcr.microsoft.com/dotnet/sdk:5.0.9 AS build
WORKDIR /source

# Download Source
RUN git init
RUN git remote add -t master -m master origin 你的源码Git地址
RUN git config core.sparseCheckout true
RUN echo samples >> .git/info/sparse-checkout
RUN git pull --depth 1 origin main

# Restore And Publish
WORKDIR /source/samples
RUN dotnet restore
RUN dotnet publish -c release -o /app --no-restore

# Run
FROM mcr.microsoft.com/dotnet/aspnet:5.0.9
WORKDIR /app
COPY --from=build /app ./
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["dotnet", "Furion.Web.Entry.dll"]
  • 👉 在 Dockerfile 所在路径构建

接下来的步骤和上述步骤一致,不再重复编写。

34.2.3 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/deploy-iis/index.html b/handbook/build/docs/deploy-iis/index.html new file mode 100644 index 00000000000..01dccd61989 --- /dev/null +++ b/handbook/build/docs/deploy-iis/index.html @@ -0,0 +1,17 @@ + + + + + +34.1 在 IIS 部署 | Furion + + + + + +
+

34.1 在 IIS 部署

精简发布文件

如果需要精简发布后的文件,也就是删除不必要的文件夹,可以编辑 Web 项目的 .csproj 并添加 <SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>,如:

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<SatelliteResourceLanguages>en-US</SatelliteResourceLanguages>
</PropertyGroup>

34.1.1 发布网站

34.1.1.1 选择启动项发布

34.1.1.2 选择发布到文件夹

34.1.1.3 配置发布后路径

34.1.1.4 点击发布

34.1.2 服务器环境配置

34.1.2.1 第一步

安装.NET Core 运行时捆绑包:点击下载

34.1.2.2 第二步(命令)

net stop was /y

34.1.2.3 第三步(命令)

net start w3svc

34.1.2.4 第四步(命令)

set ASPNETCORE_ENVIRONMENT=Production

34.1.3 部署到 IIS

34.1.3.1 添加新网站

34.1.3.2 配置网站信息

34.1.3.3 配置应用程序池

34.1.3.4 设置为 非托管

34.1.3.5 重启网站

只需重启网站或应用程序池即可。

34.1.4 常见问题

34.1.4.1 405 状态码,不支持 PUT,DELETE 请求

默认情况下,IIS拒绝 PUTDELETE 请求,原因为 IIS 默认注册了一个名为 WebDAVModule 的自定义 HttpModule 导致的。

解决该问题,只需要在 web.config 移除即可:

<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="webDAVModule"/>
</modules>
</system.webServer>
</configuration>

微软官方文档:https://docs.microsoft.com/zh-cn/troubleshoot/developer/webapps/iis/health-diagnostic-performance/http-error-405-website

34.1.4.2 WebSocket/ SignalR 连接报错

如果项目部署在 IIS 中出现 WebSoket/SignalR 不能连接或连接失败等问题,请确保 IIS 服务中的 WebSocket 协议 是勾选状态

34.1.4.3 部署之后缺失 api-ms-win.xxxx.dll 问题

有时候将发布文件发布到服务器后,出现丢失 api.ms-win.xxxx.dll 文件,这时只需要重新发布并选择服务器特定的架构即可。

34.1.5 IIS 回收问题和配置

通过 IIS 部署 .NET Core 应用程序,如果启动了系统日志,就会发现经常出现 Application is shutting down... 的日志,代表 IIS 回收了应用程序池。

对于一个长期在线的网站来说,这是非常不合理的,所以我们可以通过以下配置让 IIS 进行长时间不访问便回收的机制。


配置步骤如下:

  1. 打开 IIS 并点击左侧树根节点(计算机名称)并点击右侧的 Configuration Editor(配置编辑器)
  1. Section(节)选择 system.applicationHost/applicationPools 并设置 startModeAlwaysRunning,之后点击 Apply 保存。
  1. 点击左侧树根节点(计算机名称)下的 Application Pools 并点击最右侧的 Set Appliation Pool Defaults...(设置应用程序池默认配置...)
  1. 设置 Idle Time-out (minutes)(闲置超时(分钟)为 0

这样即可解决 IIS 回收问题。

34.1.6 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/deploy-nginx/index.html b/handbook/build/docs/deploy-nginx/index.html new file mode 100644 index 00000000000..9c93960cc9f --- /dev/null +++ b/handbook/build/docs/deploy-nginx/index.html @@ -0,0 +1,17 @@ + + + + + +34.3 在 Nginx 部署 | Furion + + + + + +
+
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/devops/index.html b/handbook/build/docs/devops/index.html new file mode 100644 index 00000000000..d52b29e6bc2 --- /dev/null +++ b/handbook/build/docs/devops/index.html @@ -0,0 +1,17 @@ + + + + + +35.2 持续部署集成 | Furion + + + + + +
+
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/donate/index.html b/handbook/build/docs/donate/index.html new file mode 100644 index 00000000000..52272cffce1 --- /dev/null +++ b/handbook/build/docs/donate/index.html @@ -0,0 +1,17 @@ + + + + + +1.5 支持 Furion | Furion + + + + + +
+

1.5 支持 Furion

成为赞助商

Furion 是采用 MIT 许可的开源项目,使用完全免费。

维护这样一个庞大的生态系统和为项目开发新功能所需的巨大努力,只有在我们的赞助者慷慨的财务支持下才得以持续。

1.5.1 作为企业赞助

赞助 Furion 可以让您通过我们的网站和 Gitee 项目自述文件接触全球超过 5 万 Furion 开发人员。此外,支持 OSS 可以提高品牌声誉,这对于任何与开发人员互动的公司来说都是一项重要资产。

如果您使用 Furion 来构建一个创收产品,赞助它的开发是有商业意义的:它确保您的产品所依赖的项目保持健康和积极维护。社区中的曝光率和正面的品牌形象也使得吸引和招募 Furion 开发人员变得更加容易。

如果您正在构建目标客户是开发人员的产品,您将通过赞助曝光获得高质量的流量,因为我们的所有访问者都是开发人员。赞助还可以建立品牌知名度并提高转化率。

联系方式:电子邮箱<monksoul@outlook.com> 微信号<ibaiqian>。

1.5.2 作为个人赞助

如果您是一个个人用户,并且喜欢使用 Furion 的生产力,请考虑通过微信手机端扫描微信赞赏码 - 就像偶尔给我买咖啡一样。如果您对微信赞赏码不满意,Gitee 也支持一次性捐赠!

您也可以尝试说服您的雇主赞助 Furion,这可能并不容易,但商业赞助通常比个人捐赠对 OSS 项目的可持续性产生更大的影响,因此如果您成功了,您将对我们提供更多帮助。

💖 赞助列表

注:排序按赞助顺序书写

赞助人昵称赞助金额(元)附语
🤴 爱吃油麦菜100感谢您的开源项目!
👳‍♂️ 麦壳饼200感谢您的开源项目!
👨 Sun100感谢您的开源项目!
👶 d61761720感谢您的开源项目!
👦 Diqiguoji00816.66见贤思齐
👲 nodyang100感谢您的开源项目!
👳‍♀️ mictxd100吹过的牛都实现。
🧓 欧流全10希望将来超越 Spring
👨‍⚕️ lionkon10...看了框架感觉拿来学习是很不错的...
😤 好人!10Nice 的小僧,我们的 dotnetchina 马上火起来了
😮 木木 Woody10感谢您的开源项目!
😚 Joker HouQQ 超级会员一个月
🤠 ccdfzQQ 专属红包 199
🌝 天夫李总支付宝 6666Furion 非常有意思,持续关注
😝 六尘子微信红包 199公司已经使用,小小敬意
🤠 ccdfzQQ 专属红包 200赞助一根内存条
🤑 邓亮灯28.88感谢您的开源项目!
😬 天道酬勤微信二维码 188小小心意
🥰 却月居士QQ 专属红包 100恭喜发财
🤩 鲁旭100感谢您的开源项目!
😬 散客行微信二维码 666终于找到一个不错的框架
😌 本心100项目功能很强大
🙆‍♂️ 毕业生100请你喝杯咖啡
🦹‍♀️ 猪鼻子微信二维码 668
🧟‍♂️ 明年·今日200使用的框架里最爽的,最理想的!加油
👨‍🎓 过去的过去50感谢您的开源项目!
👨‍🔧 万里兮100新公司的第一个项目从 Furion 开始
👴 Muphalem20很热心很亲切的开发者,加油!
💂‍♂️ 吃锅巴的码农微信二维码 500就冲你的文档写得好!
🤴 三重罗生门微信红包 200下次烤鱼你请!
🤵 李涛10加油,我们看到了 dotnet 美好的明天 :)
😂 !@#$%^&QQ 专属红包 100刚接触 furion,文档真棒
😵 李斌20看到一个不错的框架,学习学习,感谢作者的无私奉献
😞 逞强QQ 专属红包 20恭喜发财
🤒 顾锦松QQ 专属红包 200期待文档完成时候
🧟‍♀️ 哈哈微信赞赏码 1000点赞作者!
🍍 Z微信赞赏码 100恭喜孩子诞生,谢谢大佬
🍲 海涛50恭喜
😣 h微信赞赏码 100qq82683656
👱‍♀️ 冷大大微信赞赏码 100加快文档和教学补充哦,另外需要钉钉群,平常不用 QQ
👜 腾坤微信赞赏码 10感谢您的开源项目,QQ:565728589
🚆 文耶耶微信赞赏码 10很棒
🎟 Cynthiax微信转账 5000一路看着过来,小小心意
🥴 一花一世界微信赞赏码 10感谢开源,感谢持续更新
🥪 。微信赞赏码 2感谢
🎄微信赞赏码 20感谢你的开源项目
🍖 班卓微信赞赏码 9.9新年快乐
🥖 雨天裸奔的猫微信赞赏码 10加油!好东西,期待更多新特性
🍖 班卓微信赞赏码 9.9加个鸡腿
🍘 Egota Tiya微信赞赏码 6.66真的不错,准备使用这个框架
🤩 李氏天下微信赞赏码 200坚持下去
🎗 Trube微信赞赏码 200感恩
🧦 不长胡子的毛微信赞赏码 100Fur
👓 醉酒码农微信赞赏码 1000单次只能赞助 200,捐赠 5 次,支持 Furion
😢 XIUXIN微信赞赏码 20谢大佬,春天里的第一杯奶茶
👩‍🦳 吴鹏微信赞赏码 100感谢这么好的框架和文档
🧔 SymmmeeQQ 专属红包 20太牛了
🤴 隐居~~~QQ 专属红包 100支持一下吧
👵 饭粥微信赞赏码 666666666666
🎭 Free微信赞赏码 20感谢开源。比较敬业的架构师,支持一下
👑 时不待我微信赞赏码 50请你喝咖啡
😋 Eway5微信赞赏码 99找 abp 搜到 Furion 的,没想到国内有这么优秀的贡献者
🍛 吃瓜青蛙微信赞赏码 100加油,点赞
👩‍🎤 陈启表微信赞赏码 100敬佩开源,希望能成为未来.NET 项目框架之星!!
👨‍🔧 sunshuaize100感谢您的开源项目!
🚍 淘小涛10略尽绵薄之力,加油~大家
🍖 常松微信赞赏码 100开源不易,感谢您的开源
🍙 种一抹馨香微信赞赏码 50每次犯低级错误问你,都很耐心解答
😐 Ray微信赞赏码 8.88ray@wwads.cn 求合作
😁 王歆微信赞赏码 10略表心意,希望你的教程早些出来
🧶 Mark微信赞赏码 166
🎡 顾龙飞10感谢你的开源项目
🎏 石头微信赞赏码 20加油,给力
😣 慢慢微信赞赏码 100学习学习,挺好的架构
🎊 Minhoz微信赞赏码 8Furion 必火,大势所趋
🏹 瓯印软件88.88感谢你的开源项目
🤩 独、特10希望越来越好
🧵微信赞赏码 20
👸 李孟良微信赞赏码 100支持开源,感谢付出
🥰 易旭锋微信赞赏码 50
😆 liupan微信赞赏码 200
😏 君临天下微信赞赏码 20
🎉 海绵微信赞赏码 100大佬加油
🎊 好名字微信赞赏码 10希望尽快使用上 Furion 全家桶
🤗 A.LO微信赞赏码 100wash 3rd foot only
🤣 朱鹏程微信赞赏码 50午夜小精灵
😉 空问微信赞赏码 50加油,感谢!
😃 某人微信赞赏码 50大佬,喝阔落
😃 june微信赞赏码 10june-WHQ
😃 A.Mr 厘米微信赞赏码 101加油!
😃 大漠胡杨微信赞赏码 50再接再厉
😃 Anybody微信赞赏码 1000坚持下去
😃 听风微信赞赏码 200
🌝 dZhang Davil支付宝 10000great project.
🌝 aifie50YYDS,佩服,感谢您的开源项目!
🌝 🎄++微信赞赏码 10正在学习中,大佬加油!
🌝 无服务微信赞赏码 20感谢你的开源项目
🌝 铭微信赞赏码 10
🌝 生旦净末丑微信赞赏码 200加油,666
🌝 Mog微信赞赏码 50挺好用的
🌝 其实 °微信赞赏码 20事件总线太好用了
🌝 SU微信赞赏码 10功能强度大,持续关注
🌝微信赞赏码 100项目挺好!
🌝 M微信赞赏码 10希望国货崛起
🌝 EE微信赞赏码 20感谢那么棒的项目
🌝 陈春胜微信赞赏码 20浪里星辰
🌝 whd微信赞赏码 200支持
🌝 Dong微信赞赏码 20感谢开源,聊表心意!
🌝 琳琅水月微信赞赏码 100非常棒。省时省力。持续关注!
🌝 种花家村长微信赞赏码 20希望事件总线优化一下性能
🌝 刘强微信赞赏码 200感谢开源!期待更好的未来!
🌝 刘强微信转账 1000请兄弟们吃顿饭
🌝 芝麻芯微信赞赏码 100初学者,感谢让我们能专注于业务
🌝 june微信赞赏码 10june-WHQ
🌝 jamie微信赞赏码 10感谢无私奉献,收获满满
🌝 君子兰微信赞赏码 20NET 开发者加油~
🌝 王雾微信赞赏码 20希望 Furion 越来越好
🌝 李孟良微信赞赏码 100Furion 越来越好 赞
🌝 黄微信赞赏码 100感谢你的开源项目
🌝 HOMING_HNLY微信赞赏码 10感谢开源,敬佩持之以恒的更新!
🌝 Xukaige微信赞赏码 5钱虽少,一片心意,加油
🌝 快乐的小帅哥微信赞赏码 20支持一下,基础功能不错,节省开发时间
🌝 TR微信赞赏码 10很赞,小小的支持一下开源上项目!
🚍 wangshiqiao12510感谢您的开源项目!
🚍 Xukaige微信赞赏码 5钱虽少,一片心意,加油。
🚍 Coder_Army50感谢您的开源项目!和尚辛苦啦
🚍 fujin微信赞赏码 166.66感谢开源。
🚍 木三科技-软件开发微信赞赏码 66.66Furion 很强大,公司已开始使用,感谢开源。
🚍 dd微信赞赏码 50感谢您的开源项目!
🚍 chenYuAn微信赞赏码 10感谢您的开源项目!
🚍 keni微信赞赏码 20很棒,要是有纯英文版的更容易推广
🚍 Talk is cheap微信赞赏码 30感谢大佬无私奉献,文档细致全面,乃我辈典范
🚍 李涛微信赞赏码 20感谢您的开源项目,一直在使用
🚍 七色^_^微信赞赏码 100坚持下去,我是你的铁杆粉丝
🚍 鱼微信赞赏码 50桂电鱼
🚍 文林50感谢您的开源项目
🚍 AndyLi微信赞赏码 100让.NET 开发更简单,更通用,更流行。
🚍 未来微信赞赏码 20从 20 年开始用到现在,感谢付出
🚍 许云微信赞赏码 100我还没有开始用,不管行不行,先赞助一下。
🚍 王韩广100感谢您的开源项目,若有官方群请私信我,谢谢!
🚍 辉微信赞赏码 50感谢
🚍 with you微信赞赏码 20感谢!
🚍 蒋状先生微信赞赏码 99
🚍 江左梅郎-工作在浏览器上的人微信赞赏码 10谢谢,公司做项目里用到了这个框架
🚍 Bai Jianlong微信赞赏码 20

1.5.3 帮助推广支持

此外,您也可以将 Furion 的宣传海报转发到你的社交朋友圈、个人博客或者其他平台,让更多的人知道 Furion,这对我们有不小的帮助。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dotnet-tools/index.html b/handbook/build/docs/dotnet-tools/index.html new file mode 100644 index 00000000000..4f015e0256b --- /dev/null +++ b/handbook/build/docs/dotnet-tools/index.html @@ -0,0 +1,17 @@ + + + + + +37. 编写包管理工具 | Furion + + + + + +
+

37. 编写包管理工具

37.1 关于包管理工具

使用过 NodeJs 的朋友一定对 npm 命令不会陌生,可以通过 npm 安装项目需要的包或环境需要的工具,在 .NET Core 2.1+ 之后,微软也推出了新的特性,Global/Local Tools,该特性功能也正是受到 npm 启发下诞生的。

不同的是,npm 中的包采用的是 Javascript 编写并发布到 https://www.npmjs.com/ 平台,而 dotnet tools 采用 C# 编写并发布到 https://www.nuget.org/ 平台供安装使用。

37.1.2 dotnet tools 包管理好处

  • 跨平台,支持 Linux/Mac/Windows 平台供安装使用
  • 完整的 C# 生态支持
  • 为所欲为~~~(拥有操作系统的权限)

37.2 了解包命令语法

通常包命令语法都遵循以下规则:

<-|--|/>argument-name<=|:| >["|']value['|"] [--] [operand] ... [operand]

在这里,Furion 将简单介绍命令常用的知识:

  • 工具符:通常指的是你工具的唯一名称,也就是关键字,而且总是在最开头编写,如:dotnetnpmnode
  • 短参数:短参数指的是 单个字符 的字符串,我们通常使用 - 一个横杆指定参数及值,如:-v-v 0.0.1
  • 长参数:长参数指的是一个或多个单词连接的字符串,该参数通常和 短参数 同时存在,通常使用 -- 指定参数及值,如:--version--version 0.0.1
  • 操作符:字符串中与参数值格式不匹配的任何文本都被视为操作数,任何出现在双连字符 -- 之后且未包含在单引号或双引号中且两侧有空格的文本都被视为操作数,无论它是否与参数值格式匹配,通常用于归类/分类作用。

37.2.1 短参数例子

  • -a foo
短参数参数值
afoo
  • -ab
短参数参数值
a
b
  • -abc bar
短参数参数值
a
b
cbar

37.2.2 长参数例子

  • --foo bar
长参数参数值
foobar
  • --foo --bar
长参数参数值
foo
bar
  • --foo bar --hello world
长参数参数值
foobar
helloworld

37.2.3 混合参数例子

  • -abc foo --hello world /new="slashes are ok too"
短/长参数参数值
a
b
cfoo
helloworld
newslashes are ok too

37.2.4 多个值参数

  • --list 1 --list 2 --list 3
长参数参数值
list1,2,3

37.2.5 操作符

  • -a foo bar "hello world" -b -- -explicit operand
短参数参数值
afoo
b
操作符
bar
"hello world"
-explicit
operand

了解更多关于包命令语法的官方知识:https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html

37.3 编写第一个包

dotnet tools 工具实际上是一个 控制台 应用程序,不同的是 .csproj 项目文件需要添加特定配置。下面将给大家编写一个 HelloTools 包管理工具。

37.3.1 创建 HelloTools 控制台应用

37.3.2 编辑 HelloTools.csproj

将控制台项目标记成 dotnet tools 需要配置以下节点,如下图所示:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<Version>0.0.1</Version>
<Description>第一个 dotnet tools 工具</Description>
<ToolCommandName>hello-tools</ToolCommandName>
<PackAsTool>true</PackAsTool>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageOutputPath>./nupkg</PackageOutputPath>
</PropertyGroup>

</Project>

配置关键节点说明

  • Version:包工具版本号
  • Description:包工具介绍
  • ToolCommandName:包工具关键字,如 dotnetnpm,后续使用都是通过该关键字使用
  • PackAsTool:是否声明为包管理工具,设置 true
  • GeneratePackageOnBuild:是否编译时自动生成 .nupkg 包,方便后续上传到 Nuget 平台
  • PackageOutputPath:配置 .nupkg 包存储目录,推荐使用 ./nupkg

37.3.3 安装 Furion.Tools.CommandLine

为了方便管理工具包开发,Furion 官方特意开发了 Furion.Tools.CommandLine 包,帮助大家快速开发管理工具包。

37.3.4 编写逻辑代码

我们先定义几个需求,然后编写逻辑代码:

需求一:输入 hello-tools 打印介绍信息

需求二:输入 -n--name 输出 Hello 名字

需求三:输入 -v--version 输出当前版本

需求四:输入 -h--help 输出帮助文档

using Furion.Tools.CommandLine;
using System;
using System.Collections.Generic;

namespace HelloTools
{
class Program
{
// 通过 Cli.Inject() 完成准备工作
static void Main(string[] args) => Cli.Inject();

/// <summary>
/// 输出 Hello 名字
/// </summary>
[Argument('n', "name", "您的名字")]
static string Name { get; set; }
// 定义参数处理程序,必须 [属性名]+Handler
static void NameHandler(ArgumentMetadata argument)
{
Console.WriteLine($"Hello {Name}");
}

/// <summary>
/// 查看版本
/// </summary>
[Argument('v', "version", "工具版本号")]
static bool Version { get; set; }
// 定义参数处理程序,必须 [属性名]+Handler
static void VersionHandler(ArgumentMetadata argument)
{
Console.WriteLine(Cli.GetVersion());
}

/// <summary>
/// 查看帮助文档
/// </summary>
[Argument('h', "help", "查看帮助文档")]
static bool Help { get; set; }
// 定义参数处理程序,必须 [属性名]+Handler
static void HelpHandler(ArgumentMetadata argument)
{
Cli.GetHelpText("hello-tools");
}

// 所有未匹配的参数/操作符处理程序,固定 NoMatchesHandler 方法名
static void NoMatchesHandler(bool isEmpty, string[] operands, Dictionary<string, object> noMatches)
{
if (isEmpty)
{
Console.WriteLine(@"
_ _ _ _ _______ _
| | | | | | | |__ __| | |
| |__| | ___| | | ___ | | ___ ___ | |___
| __ |/ _ \ | |/ _ \ | |/ _ \ / _ \| / __|
| | | | __/ | | (_) | | | (_) | (_) | \__ \
|_| |_|\___|_|_|\___/ |_|\___/ \___/|_|___/


");
Console.WriteLine($"欢迎使用{Cli.GetDescription()}");
}
}
}
}
代码说明
  • Furion 工具包提供了非常方便的 Cli.Inject() 方法,可以实现一次性完成所有初始化工作,只需要在 Main 方法调用即可
  • 通过 [Argument(短参数,长参数,提示文档)] 定义每一个参数属性,参数必须是 static 静态
  • 通过 [属性名]Handler 定义每个参数匹配后的处理程序,如:VersionHandler,格式为:static void 属性名Handler(ArgumentMetadata argument)
  • 通过固定方法名 NoMatchesHandler 定义未匹配的参数及操作符,该方法有三个参数:
    • isEmpty:判断是否没有传递任何参数,通常用于输出介绍
    • operands:获取所有操作符列表
    • noMatches:获取所有未匹配的参数字典

37.3.5 如何调试包工具 👏

包管理工具调试有别于普通的控制台,主要区别是测试各个参数的使用,也就是如何传递 Main 方法的 args 参数。只需要以下两个步骤即可:

  • 在项目根目录添加 Properties 目录
  • Properties 目录中添加 launchSettings.json 文件,并遵循以下规则:
{
"profiles": {
"项目名称": {
"commandName": "Project",
"commandLineArgs": "你的命令"
}
}
}
  • 项目名称:写你的项目实际名称,如:HelloTools
  • commandName:固定为 Project
  • commandLineArgs:编写测试命令,只需要写参数/操作符部分即可,如:-v-v -h --Name Furion

如,我们需要测试 HelloTools-n 参数

{
"profiles": {
"HelloTools": {
"commandName": "Project",
"commandLineArgs": "-n Furion"
}
}
}

点击 运行/调试/F5 启动调试

37.3.6 测试各个参数情况

需求一:输入 hello-tools 打印介绍信息

{
"profiles": {
"HelloTools": {
"commandName": "Project",
"commandLineArgs": ""
}
}
}

需求二:输入 -n--name 输出 Hello 名字

{
"profiles": {
"HelloTools": {
"commandName": "Project",
"commandLineArgs": "-n Furion"
}
}
}

需求三:输入 -v--version 输出当前版本

{
"profiles": {
"HelloTools": {
"commandName": "Project",
"commandLineArgs": "--version"
}
}
}

需求四:输入 -h--help 输出帮助文档

{
"profiles": {
"HelloTools": {
"commandName": "Project",
"commandLineArgs": "-h"
}
}
}

37.4 打包(本机)测试

刚刚我们已经学会调试包工具了,但是还未做到类似 npm 包一样,在 cmd/powershell 中安装之后可在命令行全局测试,下面将教大家如何实现 全局安装本地安装

37.4.1 全局打包安装

全局打包安装就是配置在系统环境变量中,在任何地方都可以使用。

HelloTools 项目根目录下打开 cmd/powershell尽量使用管理员工具)执行以下命令:

✔ 安装全局包

dotnet tool install --global --add-source ./nupkg HelloTools

其中 HelloTools 就是 项目名称

之后我们就可以通过之前 HelloTools.csproj 中配置的 <ToolCommandName>hello-tools</ToolCommandName> 使用了。

✔ 测试全局包

✔ 更新全局包

如果源码发生改变,只需要编译项目后重新更新包工具即可:

dotnet tool update --global --add-source ./nupkg HelloTools

✔ 卸载全局包

dotnet tool uninstall --global HelloTools

想了解更多全局打包安装知识查阅官方文档即可:https://docs.microsoft.com/zh-cn/dotnet/core/tools/global-tools-how-to-use

37.4.2 本地打包安装

本地打包安装就是只有在项目所在目录及子孙目录方可使用。

HelloTools 项目根目录下打开 cmd/powershell 执行以下命令:

✔ 创建本地清单文件

dotnet new tool-manifest

执行该命令后会自动创建 .config 文件夹并添加 dotnet-tools.json 文件:

{
"version": 1,
"isRoot": true,
"tools": {}
}
注意事项

通常该文件内容不需要手动更改。

✔ 安装本地包

dotnet tool install --add-source ./nupkg HelloTools

✔ 测试本地包

本地包测试和全局包不一样的是本地包是通过 dotnet 关键字 参数 测试:

dotnet hello-tools -n Furion

✔ 更新本地包

如果源码发生改变,只需要编译项目后重新更新包工具即可:

dotnet tool update --add-source ./nupkg HelloTools

✔ 卸载本地包

dotnet tool uninstall HelloTools

想了解更多本地打包安装知识查阅官方文档即可:https://docs.microsoft.com/zh-cn/dotnet/core/tools/local-tools-how-to-use

37.5 发布到 Nuget 平台 👏

发布到 Nuget 平台非常简单,只需要两个步骤即可:

上传 Nuget 平台补齐信息

建议上传到 Nuget 平台编辑 .csproj 文件补齐以下信息:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<Version>0.0.1</Version>
<Description>第一个 dotnet tools 工具</Description>
<ToolCommandName>hello-tools</ToolCommandName>
<PackAsTool>true</PackAsTool>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageOutputPath>./nupkg</PackageOutputPath>

<Authors>百小僧</Authors>
<Company>Baiqian Co.,Ltd.</Company>
<Product>Furion</Product>
<Copyright>© 2020-2021 百小僧, Baiqian Co.,Ltd.</Copyright>
<RepositoryUrl>https://gitee.com/dotnetchina/Furion</RepositoryUrl>
<RepositoryType>Gitee</RepositoryType>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageProjectUrl>https://furion.icu</PackageProjectUrl>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Furion.Tools.CommandLine" Version="2.6.0" />
</ItemGroup>

</Project>

发布到 Nuget 平台后,别人就可以通过:

✔ 安装 Nuget 包到本地

dotnet tool install --global 项目名 --version 版本号

37.6 Cli 静态类说明

为了简化包工具的开发,Furion.Tools.CommandLineCli 静态类提供了很多方便的静态方法:

37.6.1 消息类

// 输出空行
Cli.EmptyLine();

// 输出一行
Cli.WriteLine("消息");
Cli.WriteLine("消息", ConsoleColor.Blue); // 字体颜色
Cli.WriteLine("消息", ConsoleColor.Blue, ConsoleColor.White); // 背景颜色
Cli.WriteLine("消息", ConsoleColor.Blue, ConsoleColor.White, fillLine: true); // 填充整行

// 输出(不换行)
Cli.Write("消息");
Cli.Write("消息", ConsoleColor.Blue); // 字体颜色
Cli.Write("消息", ConsoleColor.Blue, ConsoleColor.White); // 背景颜色
Cli.Write("消息", ConsoleColor.Blue, ConsoleColor.White, fillLine: true); // 填充整行

// 输出提示消息
Cli.Success("成功");
Cli.Warn("警告");
Cli.Error("错误");
Cli.Tip("提示");

// 收集用户输入(支持多行)
var inputs = Cli.ReadInput(); // 输入 exit 退出输入

// 选择消息
var selectId = Cli.ReadOptions("请选择喜欢的水果:", new []{ "西瓜", "苹果", "凤梨"}); // selectId 从 1 开始

37.6.2 工具类

// 完成参数填充属性初始化操作
Cli.Inject();

// 获取参数所有信息
var arguments = Cli.ArgumentMetadatas;

// 手动检查参数是否匹配
Cli.Check(nameof(属性名), argument => {
// 如果用户输入该参数
if(argument?.IsTransmission == true){
Cli.WriteLine(argument.Value);
}
else {
Cli.Error("用户没有输入");
}
});

// 只有参数匹配才进入
Cli.CheckMatch(nameof(属性名), argument => {
Cli.WriteLine(argument.Value);
})

// 无属性检查
Cli.Check(new[] {"v", "version"}, (isMatch, value) => {
// 如果用户输入该参数
if(isMatch){
Cli.WriteLine(value);
}
else {
Cli.Error("用户没有输入");
}
});

// 无属性匹配
Cli.CheckMatch(new[] {"v", "version"}, value => {
Cli.WriteLine(value);
});

// 所有未匹配的参数、操作符
Cli.CheckNoMatches((isEmpty, operands, noMatches) => {
if (isEmpty) Cli.WriteLine($"欢迎使用 {Cli.GetDescription()}");
if (operands.Length > 0) Cli.Error($"未找到该操作符:{string.Join(",", operands)}");
if (noMatches.Count > 0) Cli.Error($"未找到该参数:{string.Join(",", noMatches.Keys)}");
});

// 解析 Main 方法参数信息
var argumentModel = Cli.Parse();

// 手动解析命令字符串
var argumentModel = Cli.Parse("-abc foo --hello world");

// 终止输出/结束输出
Cli.Exit();

37.6.2 信息类

// 获取当前工具包版本号
var version = Cli.GetVersion();

// 获取当前工具包描述
var description = Cli.GetDescription();

37.6.3 其他类

我们可以通过 Environment 获取当前环境更多信息,如下图所示:

// 当前执行命令目录
var currentDirectory = Environment.CurrentDirectory;

// 获取机器名称
var machineName = Environment.MachineName;

// 等等。。。。。

37.7 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/dynamic-api-controller/index.html b/handbook/build/docs/dynamic-api-controller/index.html new file mode 100644 index 00000000000..1476027f62a --- /dev/null +++ b/handbook/build/docs/dynamic-api-controller/index.html @@ -0,0 +1,17 @@ + + + + + +5.1 动态 WebAPI | Furion + + + + + +
+

5.1 动态 WebAPI

小知识

动态WebAPI 实际上就是将普通的类变为 Controller,也就是 动态WebAPI 就是控制器,支持控制器一切功能。

5.1.1 什么是控制器

简单来说,控制器是一个承上启下的作用,根据用户输入,执行响应行为(动作方法),同时在行为中调用模型的业务逻辑,返回给用户结果(视图)。

ASP.NET Core 中,控制器有两种表现形式:

  • Mvc(带视图)
  • WebAPI(RESTful API)
using Microsoft.AspNetCore.Mvc;

namespace Furion.Web.Entry.Controllers
{
public class MvcController : Controller
{
public IActionResult Index()
{
return View();
}
}
}

Mvc 控制器和 WebAPI 控制器最大的区别是 WebAPI 控制器不带 视图 和通过 请求谓词和路由地址响应行为

5.1.2 Mvc 控制器 约定和缺点

在学习动态 WebAPI 控制器之前,首先了解 ASP.NET CoreWebAPI 的一些约定和注意事项。

5.1.2.1 WebAPI 约定

ASP.NET Core 应用中,一个 WebAPI 控制器需遵循以下约定:

  • 控制器类必须继承 ControllerBase 或间接继承
  • 动作方法必须贴有 [HttpMethod] 特性,如:[HttpGet]
  • 控制器或动作方法至少有一个配置 [Route] 特性
  • 生成 WebAPI 路由地址时会自动去掉控制器名称 Controller 后缀,同时也会去掉动作方法匹配的 HttpVerb 谓词,如 GET,POST,DELETE,PUT
  • 不支持返回非 IEnumerable<T> 泛型对象
  • 不支持类类型参数在 GET,HEAD 请求下生成 Query 参数

除了上述约定外,WebAPI 路由地址基本靠手工完成,不利于书写,不利于维护,再者,在移动应用对接中难以进行多版本控制。

5.1.2.2 .NET Core WebAPI 缺点

通过上一章节可以看出,ASP.NET Core 应用实现 WebAPI 需要遵循种种约定,而且容易出错。

除了这些约定,.NET Core WebAPI 有以下缺点:

  • 路由地址基本靠手工完成
  • 在现在移动为王的时代,不利于进行多版本控制
  • 对接 Swagger 文档分组比较复杂
  • 实现 Policy 策略授权也比较复杂
  • 不支持控制器热插拔插件化
  • 难以实现复杂自定义的 RESTful API 风格

5.1.3 动态 WebAPI 控制器

针对以上 ASP.NET Core 提供的 WebAPI 必须遵循的约定和不可避免的缺点,Furion 框架创造出一种更加灵活创建 WebAPI 控制器的方式。

这个方式在继承了 ASP.NET Core WebAPI 所有优点,同时进行了大量拓展和优化。优化后的 WebAPI 具有以下优点:

  • 具备原有的 ControllerBase 所有功能
  • 支持任意公开 非静态 非抽象 非泛型类转控制器
  • 提供更加灵活方便的 IDynamicApiController 空接口或 [DynamicApiController] 特性替代 ControllerBase 抽象类
  • 无需手动配置 [HttpMethod] 特性,同时支持一个动作方法多个 HttpVerb
  • 无需手动配置 [Route] 特性,支持更加灵活的配置及自动路由生成
  • 支持返回泛型接口,泛型类
  • Swagger 深度结合,提供极其方便的创建 Swagger 分组配置
  • 支持 Basic Auth,Jwt,ApiKey 等多种权限灵活配置
  • 支持控制器、动作方法版本控制功能
  • 支持 GET、HEAD 请求自动转换 类类型参数
  • 支持生成 OAS3 接口规范

5.1.4 注册动态 WebAPI 服务

备注

.AddDynamicApiControllers() 默认已经集成在 AddInject() 中了,无需再次注册。也就是下列代码可不配置。

Furion.Web.Core\FurWebCoreStartup.cs
using Microsoft.Extensions.DependencyInjection;

namespace Furion.Web.Core
{
[AppStartup(800)]
public sealed class FurWebCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddDynamicApiControllers();
}
}
}
特别注意

.AddDynamicApiControllers() 必须在 services.AddControllers() 之后注册。

5.1.5 第一个例子

创建一个 FurionAppService 类继承 IDynamicApiController 接口 或 贴 [DynamicApiController] 特性,并在这个类中编写一个 Get 方法。

  • IDynamicApiController 方式
using Furion.DynamicApiController;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public string Get()
{
return $"Hello {nameof(Furion)}";
}
}
}
  • [DynamicApiController] 方式
using Furion.DynamicApiController;

namespace Furion.Application
{
[DynamicApiController]
public class FurionAppService
{
public string Get()
{
return $"Hello {nameof(Furion)}";
}
}
}

如下图所示,一个 WebAPI 接口就这么生成了。

5.1.6 动态 WebAPI 原理解析

5.1.6.1 控制器特性提供器

Furion 框架会在应用启动时注册 DynamicApiControllerFeatureProvider 控制器特性提供器,该提供器继承自 ControllerFeatureProvider 类。

接着重写 bool IsController(TypeInfo typeInfo) 方法,用来标识控制器类型。在 Furion 框架中,继承自 ControllerBase 类或 IDynamicApiController 接口或 [DynamicApiController] 特性都会被标记为控制器类型。

5.1.6.2 应用模型转换器

Furion 框架同时在应用启动时注册 DynamicApiControllerApplicationModelConvention 应用模型转换器,该转换器继承自 IApplicationModelConvention 接口。

接着实现 void Apply(ApplicationModel application) 接口方法。在该方法中配置控制器名称、路由、导出可见性及动作方法名称、路由、导出可见性等。

实际上该方法做的就是按照 WebAPI 约定 提前帮我们配置好路由、请求谓词等信息。避免了手动配置的同时还增加了许多新特性,如版本控制。

5.1.7 动态 WebAPI 配置约定

5.1.7.1 控制器默认约定

  • 生成控制器名称默认去除以 AppServices,AppService,ApiController,Controller,Services,Service 作为前后缀的字符串。见第一个例子中的 FurionAppService -> Furion 支持自定义配置
  • 控制器名称带 V[0-9_] 结尾的,会自动生成控制器版本号,如 FurionAppServiceV2 -> Furion@2FurionAppServiceV1_1_0 -> Furion@1.1.0支持版本分隔符配置
  • 控制名称以 骆驼命名(CamelCase) 会自动切割成多个单词 - 连接。支持自定义配置

5.1.7.2 动作方法默认约定

  • 生成的动作方法名称默认去除以 Post/Add/Create/Insert/Submit,GetAll/GetList/Get/Find/Fetch/Query/Search,Put/Update,Delete/Remove/Clear,Patch 开头的字符串。支持自定义配置
  • 生成的动作方法名称默认去除以 Async 作为前后缀的字符串。支持自定义配置
  • 动作方法名称带 V[0-9_] 结尾的,会自动生成动作方法版本号,如 ChangePasswordV2 -> ChangePassword@2ChangePasswordV1_1_0 -> ChangePassword@1.1.0支持版本分隔符配置
  • 动作方法名称以 骆驼(驼峰)/帕斯卡命名(CamelCase/Pascal) 会自动切割成多个单词 - 连接。支持自定义配置
  • 动作方法参数将自动转为小写。支持自定义配置

5.1.7.3 请求谓词默认约定

  • 动作方法名
    • Post/Add/Create/Insert/Submit/Change 开头,则添加 [HttpPost] 特性。
    • GetAll/GetList/Get/Find/Fetch/Query 开头,则添加 [HttpGet] 特性。
    • Put/Update 开头,则添加 [HttpPut] 特性。
    • Delete/Remove/Clear 开头,则添加 [HttpDelete] 特性。
    • Patch 开头,则添加 [HttpPatch] 特性
    • 支持自定义配置
  • 如果不在上面约定中,则默认添加 [HttpPost] 特性。支持自定义配置

5.1.7.4 路由地址默认约定

  • 默认以 api 开头。支持自定义配置
  • 默认转换为小写路由地址。支持自定义配置
  • 生成控制器路由模板格式为:api/前置参数列表/模块名或默认区域名/[controller@版本号]/后置参数列表
  • 生成动作方法路由模板格式为:前置参数列表/模块名/[action@版本号]/后置参数列表

5.1.7.5 其他约定

  • 默认不处理 ControllerBase 控制器类型。支持自定义配置
  • 默认不处理 GET,HEAD 请求的引用类型参数。支持自定义配置

5.1.8 更多例子

5.1.8.1 多种请求谓词方法

using Furion.DynamicApiController;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public string Get()
{
return $"GET 请求";
}

public string Post()
{
return $"POST 请求";
}

public string Delete()
{
return $"DELETE 请求";
}

public string Put()
{
return $"PUT 请求";
}

public string Patch()
{
return $"PATCH 请求";
}
}
}

如下图所示:

5.1.8.2 多个自定义动作方法

using Furion.DynamicApiController;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public string GetVersion()
{
return $"v1.0.0";
}

public string ChangeProfile()
{
return "修改成功";
}

public string DeleteUser()
{
return "删除成功";
}
}
}

如下图所示:

5.1.8.3 带参数动作方法

using Furion.DynamicApiController;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public string GetUser(int id)
{
return $"{id}";
}

public string GetUser(int id, string name)
{
return $"{id} {name}";
}

public TestDto Add(TestDto testDto)
{
return testDto;
}
}
}

如下图所示:

5.1.8.4 GET/HEAD 类类型参数

默认情况下,ASP.NET Core 会将 GET/HEAD 请求中的 类类型参数 设置为 [FromBody] 绑定,如:

using Furion.DynamicApiController;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public TestDto GetTest(TestDto testDto)
{
return testDto;
}
}
}

如下图所示:

但是,GET、HEAD 请求不支持 From Body 绑定。所以我们需要转换为 Query 查询参数。

Furion 框架支持以下两种方式配置:

using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public TestDto GetTest([FromQuery] TestDto testDto)
{
return testDto;
}
}
}

如下图所示:

5.1.8.5 自定义参数位置

Furion 框架提供了非常方便的自定义参数位置的特性 [ApiSeat],通过 [ApiSeat] 可配置参数位置,支持以下四种位置:

  • ApiSeats.ControllerStart:控制器之前
  • ApiSeats.ControllerEnd:控制器之后
  • ApiSeats.ActionStart:动作方法之前
  • ApiSeats.ActionEnd:动作方法之后。默认值
using Furion.DynamicApiController;
using System;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
// 参数默认为 ApiSeats.ActionEnd
public string RouteSeat(int id, string name)
{
return "配置路由参数位置";
}

public string RouteSeat(
[ApiSeat(ApiSeats.ControllerStart)] int id, // 控制器名称之前
[ApiSeat(ApiSeats.ControllerEnd)] string name, // 控制器名称之后
[ApiSeat(ApiSeats.ControllerEnd)] int age, // 控制器名称之后
[ApiSeat(ApiSeats.ActionStart)] decimal weight, // 动作方法名称之前
[ApiSeat(ApiSeats.ActionStart)] float height, // 动作方法名称之前
[ApiSeat(ApiSeats.ActionEnd)] DateTime birthday) // 动作方法名称之后(默认值)
{
return "配置路由参数位置";
}
}
}

如下图所示:

温馨提示

多个 同位置 配置的参数将按照 定义参数顺序 进行排序。

特别注意

[ApiSeat] 只能应用于贴了 [FromRoute] 特性的参数或 基元类型、值类型、可空基元类型和可空值类型

5.1.8.6 自定义请求谓词

using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
[HttpPost]
public string GetVersion()
{
return "1.0.0";
}
}
}

如下图所示:

5.1.8.7 支持多个谓词

using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
[HttpPost, HttpGet, AcceptVerbs("PUT", "DELETE")]
public string GetVersion()
{
return "1.0.0";
}
}
}

如下图所示:

特别注意

如果动作方法中含有 类类型参数,且含有 POST/PUT/DELETE 任意请求谓词,那么该参数会自动添加 [FromBody] 参数,即使在 GET/HEAD 请求中不支持。

5.1.8.8 支持自定义路由

支持控制器和动作方法自定义路由:

using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Application
{
[Route("customapi/mobile/[controller]")]
public class FurionAppService : IDynamicApiController
{
public string GetVersion()
{
return "1.0.0";
}
}
}

如下图所示:

小提示

动作方法自定义路由如果以 / 开头,则不会合并控制器路由。

推荐配置

自定义路由如果需要用到 控制器/动作方法名称,推荐使用 [controller][action] 占位符,因为该占位符已经自动处理了 前后缀、版本号、模块名称等。

5.1.8.9 多路由随意组合

Furion 框架提供了非常灵活的各种路由组合方式,支持一对多,多对多路由组合:

using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Application
{
[Route("api/[controller]")]
[Route("api/[controller]/second")]
[Route("api/[controller]/three")]
public class FurionAppService : IDynamicApiController
{
[HttpGet]
[HttpGet("get/[action]")]
[HttpPost]
[HttpPost("post/cus-version")]
public string GetVersion()
{
return "1.0.0";
}
}
}

如下图所示:

特别注意

动作方法不能同时贴 [Route][HttpMethod] 特性,只能二取一。

5.1.8.10 支持版本控制

using Furion.DynamicApiController;

namespace Furion.Application
{
public class FurionAppServiceV1 : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}
}

public class FurionAppServiceV1_2 : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}
}

public class FurionAppServiceV1_2_1 : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}
}
}

如下图所示:

版本生成原理

V[0-9_] 结尾的命名自动解析成版本号,如 FurionAppServiceV2 -> Furion@2

版本复写

除了通过特定后缀方式以外,版本还直接通过 [ApiDescriptionSettings] 进行复写。如:

[ApiDescriptionSettings(Version = "4.0")]
public string GetV1()
{
return nameof(Furion);
}

这时,生成版本将采用 4.0 替代 1

5.1.8.11 不公开控制器或动作方法

有些时候,我们无需导出某个动作方法或控制器(不显示到 Swagger),只需要添加 [ApiDescriptionSettings(false)][ApiExplorerSettings(IgnoreApi = true)]即可。

另外动作方法还支持 [NonAction] 标记不是一个有效的控制器或 Action。

推荐使用

推荐控制器或动作方法设置不导出使用 [ApiDescriptionSettings(false)] 特性。该特性默认继承自 ApiExplorerSettingsAttribute 类。

5.1.8.12 保持控制器和方法命名

默认情况下,动态 API 会将控制器和方法名输出为 RESTFul 风格的路由,如需保留原有设计,只需配置:

{
"DynamicApiControllerSettings": {
"KeepName": true,
"KeepVerb": true,
"LowercaseRoute": false
}
}

5.1.8.13 方法参数 [FromQuery] 化/参数非必填/参数可选

默认情况下,所有的基元类型参数都会贴上 [FromRoute] 特性,如果需要将参数调整为 [FromQuery] 修饰,只需要在方法上面贴 [QueryParameters] 特性即可,如:

[QueryParameters]
public string Get(int id, string name)
{
return nameof($"{id} {name}");
}

生成的路由为:https://xxx.com?id=1&name=Furion

如果不喜欢每个都配置,也可以全局配置(只会影响基元类型的参数):

{
"DynamicApiControllerSettings": {
"UrlParameterization": true
}
}
特别注意

贴了 [QueryParameters] 之后,会对所有参数影响,包括类类型参数,如果不需要处理某个参数,只需要贴 [FromXXX] 特性即可。

5.1.8.14 参数绑定配置

Furion 框架提供了多种参数特性配置参数绑定规则:

  • [FromRoute]:通过路由参数绑定值
  • [FromQuery]:通过 Url 地址参数绑定值
  • [FromBody]:通过 Request Body 参数绑定值
  • [FromForm]:通过表单提交绑定值
  • [FromHeader]:通过 Request Header 参数绑定值

5.1.8.15 自定义根据方法名生成 [HttpMethod] 规则

Furion 框架中,在没有配置 [HttpMethod] 特性的情况下,会自动根据方法名第一个参数进行分析,并生成对应的 [HttpMethod] 特性,规则如下:

  • 动作方法名
    • Post/Add/Create/Insert/Submit 开头,则添加 [HttpPost] 特性。
    • GetAll/GetList/Get/Find/Fetch/Query 开头,则添加 [HttpGet] 特性。
    • Put/Update 开头,则添加 [HttpPut] 特性。
    • Delete/Remove/Clear 开头,则添加 [HttpDelete] 特性。
    • Patch 开头,则添加 [HttpPatch] 特性
    • Head 开头,则添加 [HttpHead] 特性
    • 支持自定义配置
  • 如果不在上面约定中,则默认添加 [HttpPost] 特性。支持自定义配置

但是,有些时候这不是我们想要的规则,这时我们只需要在 appsettings.json 中配置即可:

{
"DynamicApiControllerSettings": {
"VerbToHttpMethods": [
["getall", "HEAD"], // => getall 会被复写为 `[HttpHead]`
["other", "PUT"] // => 新增一条新规则,比如,一 `[other]` 开头会转换为 `[HttpPut]` 请求
]
}
}
特别注意

二维数组中的每一个元素的第一个元素必须是全小写,第二个元素必须是全大写大写,第二个元素取值有:HEAD, GET, PUT, POST, PATCH, DELETE

5.1.8.16 路由参数非必填/选填

Furion v2.8.6 版本中实现了 [FromRoute] 参数非必填功能,支持以下几种方式:

// 方式一,通过可空 ?
public object Method1(int id, Datetime? dateTime)
{
}

// 方式二,通过默认值
public object Method1(int id, int age = 10)
{
}

// 方式三,默认值 + 可空 ?
public object Method1(int id, int? age = 10)
{
}

// 方式四,[FromQuery] 修饰
public object Method1(int id, [FromQuery]string keyword)
{
}

5.1.8.17 [FormRoute] 路由约束

Furion v2.8.6 版本中,添加了 [RouteConstraint] 特性,可配置路由约束,如:[RouteConstraint(":min(10)")]

// 最小值 10
public object Method1([RouteConstraint(":min(10)")] int id)
{
}

[RouteConstraint] 支持路由约束符号如下:

符号描述例子
alpha匹配大写或小写拉丁字母字符(a-z、A-Z):alpha
boolbool 类型:bool
datetimeDateTime 类型:datetime
decimaldecimal 类型:decimal
doubledouble 类型:double
floatfloat 类型:float
guidguid 类型:guid
intint 类型:int
longlong 类型:long
length匹配长度(字符串):length(6):length(1,20)
max最大值:max(10)
maxlength最大长度(字符串):maxlength(10)
min最小值:min(10)
minlength最小长度(字符串):minlength(10)
range取值范围:range(10,50)
regex正则表达式:regex(^\d{3}-\d{3}-\d{4}$)

5.1.8.18 小驼峰 路由路径

{
"DynamicApiControllerSettings": {
"LowercaseRoute": false,
"KeepName": true,
"AsLowerCamelCase": true
}
}

5.1.9 [ApiDescriptionSettings]

除了上述 ASP.NET Core 提供的配置外,Furion 框架还提供了非常强大且灵活的 [ApiDescriptionSettings] 特性。

5.1.9.1 内置配置

  • Name:自定义控制器/动作方法名称,string,默认 null
  • KeepName:是否保持原有名称不处理,bool,默认 false
  • SplitCamelCase:切割骆驼(驼峰)/帕斯卡命名,bool,默认 true
  • KeepVerb:是否保留动作方法请求谓词,bool,默认 false
  • Enabled:是否导出接口,bool,默认 true
  • Module:模块名,string,默认 null
  • Version:版本号,string,默认 null
  • Groups:接口分组,可结合 Swagger 一起使用,string[],默认 null
  • Tags:接口标签,可结合 Swagger 一起使用,string[],默认 null
  • Order:配置控制器/动作方法排序
  • LowercaseRoute:是否采用小写路由,bool 类型,默认 true
  • AsLowerCamelCase:启用小驼峰命名(首字母小写),默认 false
  • Area:配置区域名称,默认空,只作用于类中贴
  • Description:配置单一接口更多描述功能,只在 方法 中有效,仅限 v3.3.5+版本有效
  • ForceWithRoutePrefix:配置是否强制添加 DefaultRoutePrefix,当控制器自定义了 [Route] 有效,仅限 v3.4.1+版本有效

5.1.9.2 Name 配置

Name 参数可以覆盖动态 WebAPI 自动生成的控制器或动作方法名称。如:

using Furion.DynamicApiController;

namespace Furion.Application
{
[ApiDescriptionSettings(Name = "MyFur")]
public class FurionAppService : IDynamicApiController
{
[ApiDescriptionSettings(Name = "MyGet")]
public string Get()
{
return nameof(Furion);
}
}
}

如下图所示:

5.1.9.3 KeepName 配置

KeepName 参数可以保留原有的控制器或动作方法名称。如:

using Furion.DynamicApiController;

namespace Furion.Application
{
[ApiDescriptionSettings(KeepName = true)]
public class FurionAppService : IDynamicApiController
{
[ApiDescriptionSettings(KeepName = true)]
public string Get()
{
return nameof(Furion);
}
}
}

如下图所示:

5.1.9.4 SplitCamelCase 配置

SplitCamelCase 参数默认将骆驼(驼峰)命名切割成多个单词并通过指定 占位符 连接起来。默认 占位符-。默认为 true。如:

using Furion.DynamicApiController;

namespace Furion.Application
{
[ApiDescriptionSettings(SplitCamelCase = false)]
public class MyFurionAppService : IDynamicApiController
{
[ApiDescriptionSettings(SplitCamelCase = true)]
public string ChangeUserName()
{
return nameof(Furion);
}
}
}

如下图所示:

特别注意

KeepName 优先级高于 SplitCamelCase,也就是 KeepName 设置为 true,则不会处理 SplitCamelCase 参数。

5.1.9.5 KeepVerb 配置

KeepVerb 参数作用于动作方法,标识是否保留动作谓词。如:

using Furion.DynamicApiController;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
[ApiDescriptionSettings(KeepVerb = true)]
public string GetVersion()
{
return nameof(Furion);
}
}
}

如下图所示:

5.1.9.6 Enabled 配置

Enabled 参数配置接口是否导出。通常用于动作方法,如果用于控制器实际作用不大。

using Furion.DynamicApiController;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public string GetVersion()
{
return nameof(Furion);
}

[ApiDescriptionSettings(false)]
public string NoExport()
{
return nameof(Furion);
}
}
}

如下图所示:

5.1.9.7 Module 配置

Module 参数可以配置路由分离,类似于 Mvc 区域 的作用。

using Furion.DynamicApiController;

namespace Furion.Application
{
[ApiDescriptionSettings(Module = "mobile")]
public class FurionAppService : IDynamicApiController
{
[ApiDescriptionSettings(Module = "user")]
public string GetVersion()
{
return nameof(Furion);
}
}
}

如下图所示:

5.1.9.8 Version 配置

Version 参数可以配置接口版本,同时又可以复写特殊版本命名配置。默认版本分隔符为 @。如:

using Furion.DynamicApiController;

namespace Furion.Application
{
[ApiDescriptionSettings(Version = "1.0")]
public class FurionAppService : IDynamicApiController
{
// V2.0.0 被复写成 V2.1.1
[ApiDescriptionSettings(Version = "2.1.1")]
public string GetVersionV2_0_0()
{
return nameof(Furion);
}
}
}

如下图所示:

5.1.9.9 Groups 配置

Groups 配置主要用于配置 Swagger 分组信息。

通过配置 Groups 参数可以将控制器和动作方法 进行归类和多个分组直接共享。可通过 [ApiDescriptionSettings(params Groups)] 构造函数传入或指定 Groups 参数配置接口是否导出。通常用于动作方法,如果用于控制器实际作用不大。

using Furion.DynamicApiController;

namespace Furion.Application
{
[ApiDescriptionSettings("Default", "Common")]
public class FurionAppService : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}

[ApiDescriptionSettings("Custom")]
public int Get(int id)
{
return id;
}
}
}

如下图所示:

5.1.9.10 Tag 配置

Tag 配置主要用于配置 Swagger 标签分组信息及合并标签。也就是 组中组:

未贴标签之前

using Furion.DynamicApiController;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}

public int Get(int id)
{
return id;
}
}

public class TestAppService : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}

public int Get(int id)
{
return id;
}
}
}

贴标签之后

using Furion.DynamicApiController;

namespace Furion.Application
{
[ApiDescriptionSettings(Tag = "分组一")]
public class FurionAppService : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}

public int Get(int id)
{
return id;
}
}

[ApiDescriptionSettings(Tag = "分组二")]
public class TestAppService : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}

public int Get(int id)
{
return id;
}
}
}

如下图所示:

小知识

如果 Tag 名字一样,则会自动合并,否则只是命名。

5.1.10 DynamicApiControllerSettings 配置

Furion 还提供动态 WebAPI 接口一些全局配置选项,如:

  • DefaultRoutePrefix:默认路由前缀,string,默认 api
  • DefaultHttpMethod:默认请求谓词,string,默认:POST
  • DefaultModule:默认模块名称(区域),可用作接口版本,string,默认:v1
  • LowercaseRoute:小写路由格式,bool,默认:true
  • AsLowerCamelCase:启用小驼峰命名(首字母小写),默认 false
  • KeepVerb:是否保留动作谓词,bool,默认:false
  • KeepName:是否保留默认名称,bool,默认:fasle
  • CamelCaseSeparator:骆驼(驼峰)/帕斯卡命名分隔符,string,默认:-
  • VersionSeparator:版本分隔符,string,默认:@
  • ModelToQueryGET/HEAD 请求将 类类型参数转查询参数bool,默认 false
  • SupportedMvcController:是否支持 Mvc Controller 动态配置,bool,默认 false
  • UrlParameterization:路由参数采用 [FromQuery] 化,默认 false[FromRoute] 方式)
  • DefaultArea:配置默认区域,默认 null
  • ForceWithRoutePrefix:配置是否强制添加 DefaultRoutePrefix,当控制器自定义了 [Route] 有效,仅限 v3.4.1+版本有效
  • AbandonControllerAffixes:默认去除控制器名称前后缀列表名,string[],默认:
    • AppServices
    • AppService
    • ApiController
    • Controller
    • Services
    • Service
  • AbandonActionAffixes:默认去除动作方法名称前后缀列表名,string[],默认:
    • Async
    • VerbToHttpMethods:复写默认方法名转 [HttpMethod] 规则,string[][] 二维数组类型,内置匹配规则为:
      ["post"] = "POST",
      ["add"] = "POST",
      ["create"] = "POST",
      ["insert"] = "POST",
      ["submit"] = "POST",
      ["get"] = "GET",
      ["find"] = "GET",
      ["fetch"] = "GET",
      ["query"] = "GET",
      ["put"] = "PUT",
      ["update"] = "PUT",
      ["delete"] = "DELETE",
      ["remove"] = "DELETE",
      ["clear"] = "DELETE",
      ["patch"] = "PATCH"
      • 复写示例
      "DynamicApiControllerSettings": {
      "VerbToHttpMethods": [
      [ "getall", "HEAD" ], // => getall 会被复写为 `[HttpHead]`
      [ "other", "PUT" ] // => 新增一条新规则,比如,一 `[other]` 开头会转换为 `[HttpPut]` 请求
      ]
      }

5.1.10.1 支持 Mvc 控制器 动态配置

默认情况下,Furion 动态 WebAPI 接口不对 ControllerBase 类型进行任何处理。当然,我们也可以手动启用 ControllerBase 支持。

Furion.Web.Entry/appsettings.json
{
"DynamicApiControllerSettings": {
"SupportedMvcController": true
}
}

设置 SupportedMvcController: true 后,Mvc ControllerBase 类型也能和动态 WebAPI 一样的灵活了。代码如下:

using Microsoft.AspNetCore.Mvc;

namespace Furion.Web.Entry.Controllers
{
public class MvcController : ControllerBase
{
public string Get()
{
return nameof(Furion);
}
}
}

注意事项

启用该配置后,如果 Mvc 控制器 没有任何 [Route] 特性,但是贴了 [ApiController] 特性将会报错。原因是 [ApiController] 特性内部做了路由特性检测。所以建议使用 [ApiDataValidation] 代替。

查看 ASP.NET Core - ApiBehaviorApplicationModelProvider 源码

5.1.11 关于 AOP 拦截

动态WebAPI 支持 Controller 的所有过滤器/筛选器拦截,也就是可以通过 ActionFilterResultFilter 进行拦截操作。如:

public class SampleAsyncActionFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context,ActionExecutionDelegate next)
{
// 拦截之前

var resultContext = await next();

// 拦截之后

// 异常拦截
if(resultContext.Exception != null)
{

}
}
}

详细用法可参见 ASP.NET Core 5.0 - 筛选器

5.1.12 设置 api 超时请求时间

Program.cs 中添加 .UseKestrel 配置即可,如:

  • .NET5 版本
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.Inject()
.UseStartup<Startup>()
.UseKestrel(option =>
{
option.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(20);
option.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(20);
});
});
}
  • .NET6 版本
var app = builder.Build();

app.Configuration.Get<WebHostBuilder>().ConfigureKestrel(x =>
{
x.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(20);
x.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(20);
});

5.1.13 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/efcore-recommend/index.html b/handbook/build/docs/efcore-recommend/index.html new file mode 100644 index 00000000000..3387f28302f --- /dev/null +++ b/handbook/build/docs/efcore-recommend/index.html @@ -0,0 +1,17 @@ + + + + + +9.29 EFCore 最佳实践 | Furion + + + + + +
+

9.29 EFCore 最佳实践

9.29.1 EFCore 高性能

Furion 框架,默认推荐使用 EFCore 操作数据库,但很多朋友对 EFCore 使用不当,特意编写此文档说明。

  • 尽可能的采用 IRepository/IRepository<TEntity> 仓储方式在构造函数中初始化,避免使用 Db.GetRepository<TEntity> 方式
  • 请以异步方式调用所有数据访问 api。
  • 检索的数据不是必需的。 编写查询以仅返回当前 HTTP 请求所必需的数据
  • 如果数据可以接受,请考虑缓存经常访问的从数据库或远程服务检索的数据。 使用 MemoryCache 或 microsoft.web.distributedcache ,具体取决于方案。
  • 尽量减少网络往返次数。 目标是使用单个调用而不是多个调用来检索所需数据。
  • 如果当前请求只有数据查询,请使用无跟踪查询方式
  • 如果请求中含有操作数据时,请不要在 Entity Framework Core 中使用无跟踪查询。 EF Core 可以更有效地返回无跟踪查询的结果。 筛选和聚合 LINQ 查询(例如, .Where 使用.Select、或.Sum 语句),以便数据库执行筛选。
  • 对于需要进行复杂逻辑计算查询数据情况,请尽可能在返回查询后再在客户端计算。
  • 不要对集合使用投影查询,这可能会导致执行 "N + 1" 个 SQL 查询。
  • 使用 ·DbContextPool· 池来管理 DbContext,类似 ADO.NET 的连接池。
  • 手动或显式编译的查询 API,允许应用程序缓存查询转换,使其可仅被计算一次并执行多次。
// Create an explicitly compiled query
private static Func<CustomerContext, int, Customer> _customerById =
EF.CompileQuery((CustomerContext db, int id) =>
db.Customers
.Include(c => c.Address)
.Single(c => c.Id == id));

// Use the compiled query by invoking it
using (var db = new CustomerContext())
{
var customer = _customerById(db, 147);
}

9.29.2 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/encryption/index.html b/handbook/build/docs/encryption/index.html new file mode 100644 index 00000000000..6549b834d6b --- /dev/null +++ b/handbook/build/docs/encryption/index.html @@ -0,0 +1,17 @@ + + + + + +20. 数据加解密 | Furion + + + + + +
+

20. 数据加解密

20.1 数据加解密

由于现在的互联网越具发达,数据成为了我们生活的一部分,当然也带来了很多数据安全性的问题,比如用户密码明文存储,用户信息明文存在在浏览器 cookies 中等等不安全操作。

所以,对数据的加解密是系统开发必要的环节。

20.2 内置加密算法

  • MD5 加密
  • DESC 加解密
  • AES 加解密
  • JWT 加解密
  • PBKDF2 加密(Furion v2.12 + 版本已移除)
  • RSA 加解密

20.3 加解密使用

20.3.1 MD5 加密

// 测试 MD5 加密,比较
var md5Hash = MD5Encryption.Encrypt("百小僧"); // 加密
var isEqual = MD5Encryption.Compare("百小僧", md5Hash); // 比较
return (md5Hash, isEqual);

// 输出大写 MD5 加密
var md5Hash = MD5Encryption.Encrypt("百小僧", true);

// 输出 16位 MD5 加密,Furion 4.2.6+ 版本
var md5Hash16 = MD5Encryption.Encrypt("百小僧", is16: true);

20.3.2 DESC 加解密

// 测试 DESC 加解密
var descHash = DESCEncryption.Encrypt("百小僧", "Furion"); // 加密
var str = DESCEncryption.Decrypt(descHash, "Furion"); // 解密
return (descHash, str);

20.3.3 AES 加解密

// 测试 AES 加解密
var key = Guid.NewGuid().ToString("N"); // 密钥,长度必须为24位或32位

var aesHash = AESEncryption.Encrypt("百小僧", key); // 加密
var str2 = AESEncryption.Decrypt(aesHash, key); // 解密
return (aesHash, str2);

20.3.4 JWT 加解密

var token = JWTEncryption.Encrypt(new Dictionary<string, object>()  // 加密
{
{ "UserId", user.Id },
{ "Account",user.Account }
});

var tokenData = JWTEncryption.ReadJwtToken("你的token"); // 解密

var (isValid, tokenData, validationResult) = JWTEncryption.Validate("你的token"); // 验证token有效期
特别注意

JWTEncryption 加解密并未包含在 Furion 框架中,需要安装 Furion 框架提供的 Furion.Extras.Authentication.JwtBearer 拓展包。

20.3.5 PBKDF2 加密

Furion v2.12 + 版本已移除。

// 测试 PBKDF2 加密,比较
var basestring = PBKDF2Encryption.Encrypt("百小僧"); // 加密
var isEqual = PBKDF2Encryption.Compare("百小僧", basestring); // 比较
支持选择更多参数

PBKDF2 还可以配置更多参数:

  • Startup.cs 中注册服务
services.AddPBKDF2EncryptionOptions();
  • appsettings.json 配置:
{
"PBKDF2EncryptionSettings": {
"InitialIterationCount": 110, // 初始迭代次数累加值
"KeyDerivation": "HMACSHA256", // 加密算法规则 KeyDerivationPrf.HMACSHA256
"NumBytesRequested": 64 // 派生密钥的长度 (以字节为单位) 512 / 8
}
}
  • KeyDerivation 可选值有:HMACSHA1HMACSHA256HMACSHA512

20.3.6 RSA 加密

// 测试 RSA 加密
var (publicKey, privateKey) = RSAEncryption.GenerateSecretKey(2048); //生成 RSA 秘钥 秘钥大小必须为 2048 到 16384,并且是 8 的倍数
var basestring = RSAEncryption.Encrypt("百小僧", publicKey); // 加密
var str2 = RSAEncryption.Decrypt(basestring, privateKey); // 解密
return (basestring, str2);
关于 RSA 签名和校验

Furion 框架底层不内置 RSA 签名和校验功能,如需添加该功能可查阅开发者提交的代码:查看 RSA 签名和校验

20.4 字符串拓展方式

Furion 框架也提供了字符串拓展方式进行 MD5加密、AES/DESC加解密、RSA加解密

using Furion.DataEncryption.Extensions;

// MD5 加密
var s = "Furion".ToMD5Encrypt();
var b = "Furion".ToMD5Compare(s); // 比较

// AES加解密
var s = "Furion".ToAESEncrypt("sfdsfdsfdsfdsfdsfdsfdsfdsfdfdsfdsfdfdfdfd");
var str = s.ToAESDecrypt("sfdsfdsfdsfdsfdsfdsfdsfdsfdfdsfdsfdfdfdfd");

// DESC 加解密
var s = "Furion".ToDESCEncrypt("sfdsfdsfdsfdsfdsfdsfdsfdsfdfdsfdsfdfdfdfd");
var str = s.ToDESCDecrypt("sfdsfdsfdsfdsfdsfdsfdsfdsfdfdsfdsfdfdfdfd");

// PBKDF2 加密(`Furion v2.12 +` 版本已移除!!!!!!!!)
var s = "Furion".ToPBKDF2Encrypt();
var b = "Furion".ToPBKDF2Compare(s); // 比较

// RSA 加解密
var (publicKey, privateKey) = RSAEncryption.GenerateSecretKey(2048); //生成 RSA 秘钥 秘钥大小必须为 2048 到 16384,并且是 8 的倍数
var s= "Furion".ToRSAEncrpyt(publicKey); // 加密
var str=s.ToRSADecrypt(privateKey); // 解密

20.5 SM2SM3SM4 国密

Furion 框架未内置国密算法 SM2-4,但是已有开发者贡献实现并开源,可查阅 Gitee 仓库,感谢 QQ(373696184)形影相印²º²² 贡献

var data = "{\"lx\":\"1\",\"wxid\":\"\",\"ehealth_code_id\":\"68A018036186B717CC1B051C10996F4EEE805F5F81EB1594C9EB43592545F7F6\",\"ehealth_code\":\"68A018036186B717CC1B051C10996F4EEE805F5F81EB1594C9EB43592545F7F6\",\"xm\":\"测试\"}";

// SM2
var b = SM2Utils.加密("123");
var b1 = SM2Utils.解密(b);

// SM3 一般用于数字签名
var sM3Utils = new SM3Utils();
sM3Utils.secretKey = "ASAFSDFDSGSDFSDFSDFSFSF";
var token= sM3Utils.加密("123");

// SM4
var sM4Utils = new SM4Utils();
sM4Utils.secretKey = "BDBDBDBDBDBDBDBDBDBDBDBDBDBDBD";

var a = sM4Utils.加密(data);
var a1 = sM4Utils.解密(a);

20.6 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/entity/index.html b/handbook/build/docs/entity/index.html new file mode 100644 index 00000000000..98a1f02f5c6 --- /dev/null +++ b/handbook/build/docs/entity/index.html @@ -0,0 +1,17 @@ + + + + + +9.3 数据库实体 | Furion + + + + + +
+

9.3 数据库实体

特别提醒

一旦定义了实体或改变了实体结构或实体配置,需要重新执行 Add-MigrationUpdate-Database 命令。

9.3.1 数据库实体

在面向对象开发思想中,最重要尤为对象二字,在 .NET 开发过去,操作数据库往往采用 DataTableDataSet 来接收数据库返回结果集,而操作数据库也离不开手写 sql 语句。

在过去面向过程和应用不发达的时代,这些操作确实好使。然后随着中国互联网网民的激增,电子化时代的到来,各行各业对应用需求也达到了前所未有的量级。

所以,在过去手写 sql 的时代各种问题显露无疑:

  • 程序员能力参差不齐,写出的 sql 性能自然也天差地别
  • sql 属于字符串硬编程,后期维护难上加难
  • 许多单表甚至多表结构一致,出现大量重复 sql 代码
  • sql 本身在不同的数据库提供器中写法有差,后续迁移头痛不已

当然,sql 是时代的产物,我们也离不开 sql,但对于大多数程序员和项目来说,sql 未必能够带给他们多大的效益。

所以,ORM 就诞生了,所谓的 ORM 就是对象关系映射,英文:Object Relational Mapping,简单点说,ORM 根据特有的 POCO 贫血模型 规则生成 sql 语句。大大避免了重复 sqlsql 能力参差不齐等问题。(当然 ORM 作者 sql 能力也会影响最终性能)

上面所说的 POCO 贫血模型正是我们本章节的 数据库实体

简单来说,数据库实体就是数据库表的类表现,通过一定的规则使这个类能够一一对应表结构。通常这样的类也称为:POCO 贫血模型,也就是只有定义,没有行为。

9.3.2 如何定义实体

Furion 框架提供多种定义实体的接口依赖:

  • IEntity:实体基接口,是所有实体的基接口
  • IEntityNotKey:无键实体接口,也就是视图、存储过程、函数依赖接口
  • EntityBase:实体基抽象类,内置了 IdTenantId 字段
  • Entity:实体通用抽象类,继承自 EntityBase,同时内置 CreatedTimeUpdatedTime 字段
  • EntityNotKey:无键实体抽象类,视图、存储过程、函数依赖抽象类
实体定义位置

Furion 框架中有约定,实体统一定义在 Furion.Core 层。

9.3.2.1 实体继承选用原则

  • 如果你不需要 Furion 为实体添加任何内置特性,选用 IEntity,无键实体选用 IEntityNotKey
  • 如果你只需要 Id 属性,选用 EntityBase
  • 如果你需要 Furion 为你自动添加常用字段,则选用 Entity
  • 如果你需要视图、存储过程、函数可以通过 DbSet 操作,则继承 EntityNotKey

9.3.2.2 IEntity 示范:

using Furion.DatabaseAccessor;

namespace Furion.Core
{
public class User : IEntity
{
/// <summary>
/// 手工定义 Id
/// </summary>
public int Id { get; set; }

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
}
}

9.3.2.3 EntityBase 示范:

using Furion.DatabaseAccessor;

namespace Furion.Core
{
public class User : EntityBase
{
// 无需定义 Id 属性

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
}
}

9.3.2.4 Entity 示范:

using Furion.DatabaseAccessor;

namespace Furion.Core
{
public class User : Entity
{
// 无需定义 Id 属性
// 并自动添加 CreatedTime,UpdatedTime 属性

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
}
}

9.3.2.5 EntityNotKey 示范:

using Furion.DatabaseAccessor;

namespace Furion.Core
{
public class UserView : EntityNotKey
{
public UserView() : base("视图名称")
{
}

/// <summary>
/// Id
/// </summary>
public int Id { get; set; }

/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
}
}
特别注意

Furion 框架中,数据库实体必须直接或间接继承 IEntity 才能进行仓储等操作。

9.3.3 自定义公共实体

在实际项目开发中,我们通常每个应用的数据库表都有一些公共的类,比如创建人,创建时间等,这个时候我们就需要自定义公共实体类了。

Furion 框架中,创建公共实体类需要满足以下条件:

  • 公共实体类必须是公开且是抽象类
  • 公共实体类必须含有无参构造函数
  • 公共实体类必须提供数据库定位器的支持

如:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Your.Namespace
{
public abstract class CommonEntity : CommonEntity<int, MasterDbContextLocator>
{
}

public abstract class CommonEntity<TKey> : CommonEntity<TKey, MasterDbContextLocator>
{
}

public abstract class CommonEntity<TKey, TDbContextLocator1> : PrivateCommonEntity<TKey>
where TDbContextLocator1 : class, IDbContextLocator
{
}

public abstract class CommonEntity<TKey, TDbContextLocator1, TDbContextLocator2> : PrivateCommonEntity<TKey>
where TDbContextLocator1 : class, IDbContextLocator
where TDbContextLocator2 : class, IDbContextLocator
{
}

public abstract class CommonEntity<TKey, TDbContextLocator1, TDbContextLocator2, TDbContextLocator3> : PrivateCommonEntity<TKey>
where TDbContextLocator1 : class, IDbContextLocator
where TDbContextLocator2 : class, IDbContextLocator
where TDbContextLocator3 : class, IDbContextLocator
{
}

public abstract class CommonEntity<TKey, TDbContextLocator1, TDbContextLocator2, TDbContextLocator3, TDbContextLocator4> : PrivateCommonEntity<TKey>
where TDbContextLocator1 : class, IDbContextLocator
where TDbContextLocator2 : class, IDbContextLocator
where TDbContextLocator3 : class, IDbContextLocator
where TDbContextLocator4 : class, IDbContextLocator
{
}

public abstract class CommonEntity<TKey, TDbContextLocator1, TDbContextLocator2, TDbContextLocator3, TDbContextLocator4, TDbContextLocator5> : PrivateCommonEntity<TKey>
where TDbContextLocator1 : class, IDbContextLocator
where TDbContextLocator2 : class, IDbContextLocator
where TDbContextLocator3 : class, IDbContextLocator
where TDbContextLocator4 : class, IDbContextLocator
where TDbContextLocator5 : class, IDbContextLocator
{
}

public abstract class CommonEntity<TKey, TDbContextLocator1, TDbContextLocator2, TDbContextLocator3, TDbContextLocator4, TDbContextLocator5, TDbContextLocator6> : PrivateCommonEntity<TKey>
where TDbContextLocator1 : class, IDbContextLocator
where TDbContextLocator2 : class, IDbContextLocator
where TDbContextLocator3 : class, IDbContextLocator
where TDbContextLocator4 : class, IDbContextLocator
where TDbContextLocator5 : class, IDbContextLocator
where TDbContextLocator6 : class, IDbContextLocator
{
}

public abstract class CommonEntity<TKey, TDbContextLocator1, TDbContextLocator2, TDbContextLocator3, TDbContextLocator4, TDbContextLocator5, TDbContextLocator6, TDbContextLocator7> : PrivateCommonEntity<TKey>
where TDbContextLocator1 : class, IDbContextLocator
where TDbContextLocator2 : class, IDbContextLocator
where TDbContextLocator3 : class, IDbContextLocator
where TDbContextLocator4 : class, IDbContextLocator
where TDbContextLocator5 : class, IDbContextLocator
where TDbContextLocator6 : class, IDbContextLocator
where TDbContextLocator7 : class, IDbContextLocator
{
}

public abstract class CommonEntity<TKey, TDbContextLocator1, TDbContextLocator2, TDbContextLocator3, TDbContextLocator4, TDbContextLocator5, TDbContextLocator6, TDbContextLocator7, TDbContextLocator8> : PrivateCommonEntity<TKey>
where TDbContextLocator1 : class, IDbContextLocator
where TDbContextLocator2 : class, IDbContextLocator
where TDbContextLocator3 : class, IDbContextLocator
where TDbContextLocator4 : class, IDbContextLocator
where TDbContextLocator5 : class, IDbContextLocator
where TDbContextLocator6 : class, IDbContextLocator
where TDbContextLocator7 : class, IDbContextLocator
where TDbContextLocator8 : class, IDbContextLocator
{
}

public abstract class PrivateCommonEntity<TKey> : IPrivateEntity
{
// 注意是在这里定义你的公共实体
public virtual TKey Id { get; set; }

public virtual DateTime CreatedTime { get; set; }

// 更多属性定义
}
}
特别说明

通过上面的格式定义可以完美的支持多数据库操作,建议采用这种格式,而且所有的公共属性都应该定义在 PrivateXXXX 有类中。

9.3.4 数据库实体配置

在过去的 EF Core 项目开发中,数据库实体配置需要在 DbContextOnModelCreating 中配置。Furion 为了简化配置和提高开发效率,抽象出了 IEntityTypeBuilder<TEntity> 接口。

通过 IEntityTypeBuilder<TEntity> 接口,我们无需在 DbContextOnModelCreating 中配置,可在任意地方配置。

9.3.4.1 在数据库实体中配置

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;

namespace Furion.Core
{
public class User : Entity, IEntityTypeBuilder<User>
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }

/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }

// 配置数据库实体
public void Configure(EntityTypeBuilder<User> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasKey(u => u.Id);
entityBuilder.HasIndex(u => u.Name);
}
}
}

9.3.4.2 在任何实例类中配置

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;

namespace Furion.Core
{
public class SomeClass : IEntityTypeBuilder<User>
{
public void Configure(EntityTypeBuilder<User> entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasKey(u => u.Id);
entityBuilder.HasIndex(u => u.Name);
}
}
}

如上面例子,通过 SomeClass 配置 User 数据库实体。

特别注意

SomeClass必须声明为public,否则无法自动注册。

更多知识

如需了解实体配置支持哪些配置可查阅 【EFCore - 创建模型】 章节。

9.3.5 数据库实体配置说明

Furion 框架会自动扫描所有继承 IEntity 接口的类进行 DbSet<TEntity> 注册,也就是实现自动配置 DbContextOnModelCreating

如果需要跳过自动注册,只需要贴 [Manual][SuppressSniffer] 特性即可。一旦贴了此特性,那么就需要手动配置 DbContextOnModelCreating

9.3.6 配置列名及列类型

有时候我们需要手动设置列名或列类型,比如 decimal(18,2),这时候只需要在属性上面贴 [Column("列名", TypeName="decimal(18,2)")] 即可。

9.3.7 配置数据库表名和 Schema

可以通过在实体类型贴 [Table("表名", "dbo")] 配置。

9.3.8 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/event-bus-old/index.html b/handbook/build/docs/event-bus-old/index.html new file mode 100644 index 00000000000..e10e4ebb30f --- /dev/null +++ b/handbook/build/docs/event-bus-old/index.html @@ -0,0 +1,17 @@ + + + + + +22. 事件总线 | Furion + + + + + +
+

22. 事件总线

v2.20+ 版本说明

Furion v2.20+ 版本采用 Jaina 事件总线替换原有的 EventBus😶查看新文档

22.1 什么是事件总线

事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。

我们来看看事件总线的处理流程:

22.2 MessageCenter 消息中心

Furion 框架中,实现了一种轻量级的事件总线实现机制:MessageCenter(消息中心),MessageCenter 采用字符串消息机制进行广播, 可以在绝大多数中小型项目中发挥作用,缺点是消息处理是在主线程中完成并且消息不支持分布式存储。

另外,MessageCenter 支持单播、多播发布及多订阅。如图所示:

22.2.1 注册 轻量级事件总线服务

如果想使用 MessageCenter 轻量级事件总线,只需要在 Startup.cs 中注册服务即可,如:

public void ConfigureServices(IServiceCollection services)
{
services.AddSimpleEventBus();
}

22.2.2 定义订阅处理程序

MessageCenter 是根据 MesseageId 消息 Id 来触发对应的处理程序的,所以我们需要定义 订阅处理程序类,该类需实现 ISubscribeHandler 接口,如:

public class UserChangeSubscribeHandler : ISubscribeHandler
{
// 定义一条消息
[SubscribeMessage("create:user")]
public void CreateUser(string eventId, object payload)
{
Console.WriteLine("我是"+eventId);
}

// 多条消息共用同一个处理程序
[SubscribeMessage("delete:user")]
[SubscribeMessage("remove:user")]
public void RemoveUser(string eventId, object payload)
{
Console.WriteLine("我是"+eventId);
}

// 支持异步
[SubscribeMessage("delete:user")]
public async Task SupportAsync(string eventId, object payload)
{
await MethodAsync();
}
}

22.2.3 发布消息

定义好订阅处理程序后,我们就可以在程序任何地方进行广播消息,事件总线会自动根据 消息 Id 触发对应的处理程序方法:

MessageCenter.Send("create:user", new User {}); // => 打印:我是create:user

MessageCenter.Send("delete:user", new User {}); // => 打印:我是delete:user
MessageCenter.Send("remove:user", new User {}); // => 打印:我是remove:user

22.2.4 直接订阅消息

在上面的例子中,我们需要创建 ISubscribeHandler 的派生类进行相关配置才能实现订阅处理。

在某些特殊情况下,可能只需要订阅一次即可。所以,在 Furion 框架中,为了更简便的订阅消息,也提供了 MessageCenter.Subscribe<T> 静态方法,如:

MessageCenter.Subscribe<User>("create:user", (i,p) => {
// do something。。。
});

22.3 同步方式执行

默认情况下,事件总线总是采用新线程方式执行,但是我们可以配置为同步方式,如:

MessageCenter.Send("create:user", isSync: true);

22.4 关于依赖注入

Furion 框架中,事件总线是不支持构造函数注入的,而且构造函数也只会执行一次。所以需要用到服务,应该通过静态类解析,App.GetService<xx>()Db.GetRepository<XX>()

public class UserChangeSubscribeHandler : ISubscribeHandler
{
public UserChangeSubscribeHandler()
{
// 不支持这里解析服务!!!!!!!!!!!
}

// 定义一条消息
[SubscribeMessage("create:user")]
public void CreateUser(string eventId, object payload)
{
// 创建一个作用域,对象使用完成自动释放
Scoped.Create((_, scope) =>
{
var services = scope.ServiceProvider;

var repository = Db.GetRepository<Person>(services); // services 传递进去
var someService = App.GetService<ISomeService>(services); // services 传递进去
var otherService = services.GetService<IOtherService>(); // 直接用 services 解析
});
}
}
关于 App.GetService<TService>() 解析服务

在高频定时任务中调用App.GetService(TService),可能会出现内存无法回收的情况,建议始终使用scope.ServiceProvider.GetService(TService)来获取TService

数据库操作注意

如果作用域中对数据库有任何变更操作,需手动调用 SaveChanges 或带 Now 结尾的方法。也可以使用 Scoped.CreateUow(handler) 代替。

关于依赖注入

ISubscribeHandler 接口主要是用来查找定义事件对象的,也就是它的实现类并未提供依赖注入功能,所以在实现类并不支持构造函数注入依赖项。

22.5 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/event-bus/index.html b/handbook/build/docs/event-bus/index.html new file mode 100644 index 00000000000..a58ed4d446a --- /dev/null +++ b/handbook/build/docs/event-bus/index.html @@ -0,0 +1,17 @@ + + + + + +22. 事件总线 | Furion + + + + + +
+

22. 事件总线

v2.20 以下版本说明

Furion v2.20+ 版本采用 Jaina 事件总线替换原有的 EventBus查看旧文档

版本说明

以下内容仅限 Furion 2.20.0 + 版本使用。

22.1 关于事件总线

事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。

22.2 快速入门

  1. 定义事件订阅者 ToDoEventSubscriber
// 实现 IEventSubscriber 接口
public class ToDoEventSubscriber : IEventSubscriber
{
private readonly ILogger<ToDoEventSubscriber> _logger;
public ToDoEventSubscriber(ILogger<ToDoEventSubscriber> logger)
{
_logger = logger;
}

[EventSubscribe("ToDo:Create")]
public async Task CreateToDo(EventHandlerExecutingContext context)
{
var todo = context.Source;
_logger.LogInformation("创建一个 ToDo:{Name}", todo.Payload);
await Task.CompletedTask;
}

// 支持多个
[EventSubscribe("ToDo:Create")]
[EventSubscribe("ToDo:Update")]
public async Task CreateOrUpdateToDo(EventHandlerExecutingContext context)
{
var todo = context.Source;
_logger.LogInformation("创建或更新一个 ToDo:{Name}", todo.Payload);
await Task.CompletedTask;
}

// 支持枚举类型,v3.4.3+ 版本支持
[EventSubscribe(YourEnum.Some)]
public async Task EnumHandler(EventHandlerExecutingContext context)
{
var eventEnum = context.Source.EventId.ParseToEnum(); // 将事件 Id 转换成枚举对象
await Task.CompletedTask;
}

// 支持正则表达式匹配,4.2.10+ 版本支持
[EventSubscribe("(^1[3456789][0-9]{9}$)|((^[0-9]{3,4}\\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\\([0-9]{3,4}\\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$))", FuzzyMatch = true)]
public async Task RegexHandler(EventHandlerExecutingContext context)
{
var eventId = context.Source.EventId;
await Task.CompletedTask;
}

// 支持多种异常重试配置,Furion 4.2.10+ 版本支持
[EventSubscribe("test:error", NumRetries = 3)]
[EventSubscribe("test:error", NumRetries = 3, RetryTimeout = 1000)] // 重试间隔时间
[EventSubscribe("test:error", NumRetries = 3, ExceptionTypes = new[] { typeof(ArgumentException) })] // 特定类型异常才重试
public async Task ExceptionHandler(EventHandlerExecutingContext context)
{
var eventId = context.Source.EventId;
await Task.CompletedTask;
}

// 支持简单 Order 编排,Furion 4.8.0+ 版本支持
[EventSubscribe("test:order", Order = 1)]
public async Task ExceptionHandler(EventHandlerExecutingContext context)
{
var eventId = context.Source.EventId;
await Task.CompletedTask;
}
}
  1. 创建控制器 ToDoController,依赖注入 IEventPublisher 服务:
public class ToDoController : ControllerBase
{
// 依赖注入事件发布者 IEventPublisher
private readonly IEventPublisher _eventPublisher;
public ToDoController(IEventPublisher eventPublisher)
{
_eventPublisher = eventPublisher;
}

// 发布 ToDo:Create 消息
public async Task CreateDoTo(string name)
{
await _eventPublisher.PublishAsync(new ChannelEventSource("ToDo:Create", name));
}

// v3.4.3+ 版本支持发送消息简化
public async Task CreateDoTo(string name)
{
await _eventPublisher.PublishAsync("ToDo:Create", name);
// 也支持枚举
await _eventPublisher.PublishAsync(YourEnum.Some);
}
}
  1. Startup.cs 注册 EventBus 服务:
// 注册 EventBus 服务
services.AddEventBus(builder =>
{
// 注册 ToDo 事件订阅者
builder.AddSubscriber<ToDoEventSubscriber>();

// 通过类型注册,Furion 4.2.1+ 版本
builder.AddSubscriber(typeof(ToDoEventSubscriber));

// 批量注册事件订阅者
builder.AddSubscribers(ass1, ass2, ....);
});
懒人提醒

Furion 中可以不用通过 builder.AddSubscriber<T>() 方式一一注册,只需要实现 ISingleton 接口即可,如:

public class ToDoEventSubscriber : IEventSubscriber, ISingleton
{
}

这样就无需写 builder.AddSubscriber<ToDoEventSubscriber>(); 代码了,只需保留 services.AddEventBus() 服务即可。

  1. 运行项目:
info: Jaina.Samples.ToDoEventSubscriber[0]
创建一个 ToDo:Jaina

22.3 自定义事件源

Furion 使用 IEventSource 作为消息载体,任何实现该接口的类都可以充当消息载体。

如需自定义,只需实现 IEventSource 接口即可:

public class ToDoEventSource : IEventSource
{
public ToDoEventSource()
{
}

public ToDoEventSource(string eventId, string todoName)
{
EventId = eventId;
ToDoName = todoName;
}

// 自定义属性
public string ToDoName { get; set; }

/// <summary>
/// 事件 Id
/// </summary>
public string EventId { get; set; }

/// <summary>
/// 事件承载(携带)数据
/// </summary>
public object Payload { get; set; }

/// <summary>
/// 事件创建时间
/// </summary>
public DateTime CreatedTime { get; set; } = DateTime.UtcNow;

/// <summary>
/// 取消任务 Token
/// </summary>
/// <remarks>用于取消本次消息处理</remarks>
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public CancellationToken CancellationToken { get; set; }
}

使用:

await _eventPublisher.PublishAsync(new ToDoEventSource ("ToDo:Create", "我的 ToDo Name"));

22.4 自定义事件源存储器

Fruion 默认采用 Channel 作为事件源 IEventSource 存储器,开发者可以使用任何消息队列组件进行替换,如 Kafka、RabbitMQ、ActiveMQ 等,也可以使用部分数据库 Redis、SQL Server、MySql 实现。

如需自定义,只需实现 IEventSourceStorer 接口即可:

public class RedisEventSourceStorer : IEventSourceStorer
{
private readonly IRedisClient _redisClient;

public RedisEventSourceStorer(IRedisClient redisClient)
{
_redisClient = redisClient;
}

// 往 Redis 中写入一条
public async ValueTask WriteAsync(IEventSource eventSource, CancellationToken cancellationToken)
{
await _redisClient.WriteAsync(...., cancellationToken);
}

// 从 Redis 中读取一条
public async ValueTask<IEventSource> ReadAsync(CancellationToken cancellationToken)
{
return await _redisClient.ReadAsync(...., cancellationToken);
}
}

最后,在注册 EventBus 服务中替换默认 IEventSourceStorer

services.AddEventBus(builder =>
{
// 替换事件源存储器
builder.ReplaceStorer(serviceProvider =>
{
var redisClient = serviceProvider.GetService<IRedisClient>();
return new RedisEventSourceStorer(redisClient);
});

// Furion 4.7.6 版本新增 ReplaceStorerOrFallback ,可在自定义事件源存储器初始失败时回退到默认值
builder.ReplaceStorerOrFallback(() => new YourEventSourceStorer());
// 支持 IServiceProvider 参数
builder.ReplaceStorerOrFallback(serviceProvider =>
{
return new YourEventSourceStorer();
});

});

22.4.1 RabbitMQ 自定义指南

版本说明

以下内容仅限 Furion 4.3.4 + 版本使用。

由于使用 RabbitMQ 作为事件总线存储器的比较多,所以这里提供了完整的使用例子。

1. 安装 RabbitMQ.Client 拓展包

Install-Package RabbitMQ.Client -Version 6.4.0

2. 创建 RabbitMQEventSourceStorer 自定义存储器

using Furion.EventBus;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Text;
using System.Text.Json;
using System.Threading;
using System.Threading.Channels;
using System.Threading.Tasks;

namespace Furion.Core;

public sealed class RabbitMQEventSourceStorer : IEventSourceStorer, IDisposable
{
/// <summary>
/// 内存通道事件源存储器
/// </summary>
private readonly Channel<IEventSource> _channel;

/// <summary>
/// 通道对象
/// </summary>
private readonly IModel _model;

/// <summary>
/// 连接对象
/// </summary>
private readonly IConnection _connection;

/// <summary>
/// 路由键
/// </summary>
private readonly string _routeKey;

/// <summary>
/// 构造函数
/// </summary>
/// <param name="factory">连接工厂</param>
/// <param name="routeKey">路由键</param>
/// <param name="capacity">存储器最多能够处理多少消息,超过该容量进入等待写入</param>
public RabbitMQEventSourceStorer(ConnectionFactory factory, string routeKey, int capacity)
{
// 配置通道,设置超出默认容量后进入等待
var boundedChannelOptions = new BoundedChannelOptions(capacity)
{
FullMode = BoundedChannelFullMode.Wait
};

// 创建有限容量通道
_channel = Channel.CreateBounded<IEventSource>(boundedChannelOptions);

// 创建连接
_connection = factory.CreateConnection();
_routeKey = routeKey;

// 创建通道
_model = _connection.CreateModel();

// 声明路由队列
_model.QueueDeclare(routeKey, false, false, false, null);

// 创建消息订阅者
var consumer = new EventingBasicConsumer(_model);

// 订阅消息并写入内存 Channel
consumer.Received += (ch, ea) =>
{
// 读取原始消息
var stringEventSource = Encoding.UTF8.GetString(ea.Body.ToArray());

// 转换为 IEventSource,这里可以选择自己喜欢的序列化工具,如果自定义了 EventSource,注意属性是可读可写
var eventSource = JsonSerializer.Deserialize<ChannelEventSource>(stringEventSource);

// 写入内存管道存储器
_channel.Writer.WriteAsync(eventSource);

// 确认该消息已被消费
_model.BasicAck(ea.DeliveryTag, false);
};

// 启动消费者 设置为手动应答消息
_model.BasicConsume(routeKey, false, consumer);
}

/// <summary>
/// 将事件源写入存储器
/// </summary>
/// <param name="eventSource">事件源对象</param>
/// <param name="cancellationToken">取消任务 Token</param>
/// <returns><see cref="ValueTask"/></returns>
public async ValueTask WriteAsync(IEventSource eventSource, CancellationToken cancellationToken)
{
// 空检查
if (eventSource == default)
{
throw new ArgumentNullException(nameof(eventSource));
}

// 这里判断是否是 ChannelEventSource 或者 自定义的 EventSource
if (eventSource is ChannelEventSource source)
{
// 序列化,这里可以选择自己喜欢的序列化工具
var data = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(source));

// 发布
_model.BasicPublish("", _routeKey, null, data);
}
else
{
// 这里处理动态订阅问题
await _channel.Writer.WriteAsync(eventSource, cancellationToken);
}
}

/// <summary>
/// 从存储器中读取一条事件源
/// </summary>
/// <param name="cancellationToken">取消任务 Token</param>
/// <returns>事件源对象</returns>
public async ValueTask<IEventSource> ReadAsync(CancellationToken cancellationToken)
{
// 读取一条事件源
var eventSource = await _channel.Reader.ReadAsync(cancellationToken);
return eventSource;
}

/// <summary>
/// 释放非托管资源
/// </summary>
public void Dispose()
{
_model.Dispose();
_connection.Dispose();
}
}

3. 替换默认事件存储器

services.AddEventBus(options =>
{
// 创建连接工厂
var factory = new ConnectionFactory
{
UserName = "admin",
Password = "q1w2e3",
};

// 创建默认内存通道事件源对象,可自定义队列路由key,比如这里是 eventbus
var rbmqEventSourceStorer = new RabbitMQEventSourceStorer(factory, "eventbus", 3000);

// 替换默认事件总线存储器
options.ReplaceStorer(serviceProvider =>
{
return rbmqEventSourceStorer;
});
});

22.4.2 Kafka 自定义指南

1. 安装 Confluent.Kafka 拓展包

Install-Package Confluent.Kafka -Version 1.9.3

2. 创建 EventConsumer 订阅类

using Confluent.Kafka;

namespace Furion.Core;

/// <summary>
/// Kafka 消息扩展
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
public class EventConsumer<TKey, TValue> : IDisposable
{
private Task _consumerTask;
private CancellationTokenSource _consumerCts;

/// <summary>
/// 消费者
/// </summary>
public IConsumer<TKey, TValue> Consumer { get; }

/// <summary>
/// ConsumerBuilder
/// </summary>
public ConsumerBuilder<TKey, TValue> Builder { get; set; }

/// <summary>
/// 消息回调
/// </summary>
public event EventHandler<ConsumeResult<TKey, TValue>> Received;

/// <summary>
/// 异常回调
/// </summary>
public event EventHandler<ConsumeException> OnConsumeException;

/// <summary>
/// 构造函数
/// </summary>
/// <param name="config"></param>
public EventConsumer(IEnumerable<KeyValuePair<string, string>> config)
{
Builder = new ConsumerBuilder<TKey, TValue>(config);
Consumer = Builder.Build();
}

/// <summary>
/// 启动
/// </summary>
/// <exception cref="InvalidOperationException"></exception>
public void Start()
{
if (Consumer.Subscription?.Any() != true)
{
throw new InvalidOperationException("Subscribe first using the Consumer.Subscribe() function");
}
if (_consumerTask != null)
{
return;
}
_consumerCts = new CancellationTokenSource();
var ct = _consumerCts.Token;
_consumerTask = Task.Factory.StartNew(() =>
{
while (!ct.IsCancellationRequested)
{
try
{
var cr = Consumer.Consume(TimeSpan.FromSeconds(1));
if (cr == null) continue;
Received?.Invoke(this, cr);
}
catch (ConsumeException e)
{
OnConsumeException?.Invoke(this, e);
}
}
}, ct, TaskCreationOptions.LongRunning, System.Threading.Tasks.TaskScheduler.Default);
}

/// <summary>
/// 停止
/// </summary>
/// <returns></returns>
public async Task Stop()
{
if (_consumerCts == null || _consumerTask == null) return;
_consumerCts.Cancel();
try
{
await _consumerTask;
}
finally
{
_consumerTask = null;
_consumerCts = null;
}
}

/// <summary>
/// 释放
/// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

/// <summary>
/// 释放
/// </summary>
/// <param name="disposing"></param>
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (_consumerTask != null)
{
Stop().Wait();
}
Consumer?.Dispose();
}
}
}

3. 创建 KafkaEventSourceStore 自定义存储器

using Confluent.Kafka;
using Furion.EventBus;
using Newtonsoft.Json;
using System.Threading.Channels;

namespace Furion.Core;

/// <summary>
/// Kafka 存储源
/// </summary>
public class KafkaEventSourceStore : IEventSourceStorer, IDisposable
{
/// <summary>
/// 内存通道事件源存储器
/// </summary>
private readonly Channel<IEventSource> _channel;
/// <summary>
/// 主题
/// </summary>
private readonly string _topic;
/// <summary>
/// 消费者
/// </summary>
private readonly EventConsumer<Null, string> _eventConsumer;
/// <summary>
/// 生产者
/// </summary>
private readonly IProducer<Null, string> _producer;

/// <summary>
/// 构造函数
/// </summary>
/// <param name="consumerConf">消费者配置</param>
/// <param name="producerConf">生产者配置</param>
/// <param name="topic">主题</param>
/// <param name="capacity">存储器最多能够处理多少消息,超过该容量进入等待写入</param>
public KafkaEventSourceStore(ConsumerConfig consumerConf, ProducerConfig producerConf, string topic, int capacity)
{
// 配置通道,设置超出默认容量后进入等待
var boundedChannelOptions = new BoundedChannelOptions(capacity)
{
FullMode = BoundedChannelFullMode.Wait
};

// 创建有限容量通道
_channel = Channel.CreateBounded<IEventSource>(boundedChannelOptions);

// 主题
_topic = topic;

// 创建消息订阅者
_eventConsumer = new EventConsumer<Null, string>(consumerConf);
_eventConsumer.Consumer.Subscribe(new[] { topic });

// 订阅消息写入 Channel
_eventConsumer.Received += (send, cr) =>
{
// 反序列化消息
var eventSource = JsonConvert.DeserializeObject<ChannelEventSource>(cr.Message.Value);

// 写入内存管道存储器
_channel.Writer.WriteAsync(eventSource);
};

// 启动消费者
_eventConsumer.Start();

// 创建生产者
_producer = new ProducerBuilder<Null, string>(producerConf).Build();
}

/// <summary>
/// 将事件源写入存储器
/// </summary>
/// <param name="eventSource">事件源对象</param>
/// <param name="cancellationToken">取消任务 Token</param>
/// <returns><see cref="ValueTask"/></returns>
public async ValueTask WriteAsync(IEventSource eventSource, CancellationToken cancellationToken)
{
if (eventSource == default)
{
throw new ArgumentNullException(nameof(eventSource));
}
// 这里判断是否是 ChannelEventSource 或者 自定义的 EventSource
if (eventSource is ChannelEventSource source)
{
// 序列化
var data = JsonConvert.SerializeObject(source);
// 异步发布
await _producer.ProduceAsync(_topic, new Message<Null, string>
{
Value = data
}, cancellationToken);
}
else
{
// 这里处理动态订阅问题
await _channel.Writer.WriteAsync(eventSource, cancellationToken);
}
}

/// <summary>
/// 从存储器中读取一条事件源
/// </summary>
/// <param name="cancellationToken">取消任务 Token</param>
/// <returns>事件源对象</returns>
public async ValueTask<IEventSource> ReadAsync(CancellationToken cancellationToken)
{
// 读取一条事件源
var eventSource = await _channel.Reader.ReadAsync(cancellationToken);
return eventSource;
}

/// <summary>
/// 释放非托管资源
/// </summary>
public async void Dispose()
{
await _eventConsumer.Stop();
GC.SuppressFinalize(this);
}
}

4. 替换默认事件存储器

services.AddEventBus(options =>
{
var consumerConf = new ConsumerConfig
{
BootstrapServers = "xxx.xxx.xxx.xxx:9092",
GroupId = "Consumer",
AutoOffsetReset = AutoOffsetReset.Earliest // 从最早的开始消费起
};

var producerConf = new ProducerConfig
{
BootstrapServers = "xxx.xxx.xxx.xxx:9092",
BatchSize = 16384, // 修改批次大小为16K
LingerMs = 20 // 修改等待时间为20ms
};

// 创建默认内存通道事件源对象,可自定义队列路由key,比如这里是 eventbus
var kafkaEventSourceStorer = new KafkaEventSourceStore(consumerConf, producerConf, "testTopic", 30000);

// 替换默认事件总线存储器
options.ReplaceStorer(serviceProvider =>
{
return kafkaEventSourceStorer;
});
});

22.5 自定义事件发布者

Furion 默认内置基于 Channel 的事件发布者 ChannelEventPublisher

如需自定义,只需实现 IEventPublisher 接口即可:

public class ToDoEventPublisher : IEventPublisher
{
private readonly IEventSourceStorer _eventSourceStorer;

public ToDoEventPublisher(IEventSourceStorer eventSourceStorer)
{
_eventSourceStorer = eventSourceStorer;
}

public async Task PublishAsync(IEventSource eventSource)
{
await _eventSourceStorer.WriteAsync(eventSource, eventSource.CancellationToken);
}
}

最后,在注册 EventBus 服务中替换默认 IEventPublisher

services.AddEventBus(builder =>
{
// 替换事件源存储器
builder.ReplacePublisher<ToDoEventPublisher>();
});

22.6 添加事件执行监视器

Furion 提供了 IEventHandlerMonitor 监视器接口,实现该接口可以监视所有订阅事件,包括 执行之前、执行之后,执行异常,共享上下文数据

如添加 ToDoEventHandlerMonitor

public class ToDoEventHandlerMonitor : IEventHandlerMonitor
{
private readonly ILogger<ToDoEventHandlerMonitor> _logger;
public ToDoEventHandlerMonitor(ILogger<ToDoEventHandlerMonitor> logger)
{
_logger = logger;
}

public Task OnExecutingAsync(EventHandlerExecutingContext context)
{
_logger.LogInformation("执行之前:{EventId}", context.Source.EventId);
return Task.CompletedTask;
}

public Task OnExecutedAsync(EventHandlerExecutedContext context)
{
_logger.LogInformation("执行之后:{EventId}", context.Source.EventId);

if (context.Exception != null)
{
_logger.LogError(context.Exception, "执行出错啦:{EventId}", context.Source.EventId);
}

return Task.CompletedTask;
}
}

最后,在注册 EventBus 服务中注册 ToDoEventHandlerMonitor

services.AddEventBus(builder =>
{
// 添加事件执行监视器
builder.AddMonitor<ToDoEventHandlerMonitor>();
});

22.7 添加事件执行器

Furion 提供了 IEventHandlerExecutor 执行器接口,可以让开发者自定义事件处理函数执行策略,如 超时控制,失败重试、熔断等等

如添加 RetryEventHandlerExecutor

public class RetryEventHandlerExecutor : IEventHandlerExecutor
{
public async Task ExecuteAsync(EventHandlerExecutingContext context, Func<EventHandlerExecutingContext, Task> handler)
{
// 如果执行失败,每隔 1s 重试,最多三次
await Retry.InvokeAsync(async () => {
await handler(context);
}, 3, 1000);
}
}

最后,在注册 EventBus 服务中注册 RetryEventHandlerExecutor

services.AddEventBus(builder =>
{
// 添加事件执行器
builder.AddExecutor<RetryEventHandlerExecutor>();
});

22.8 使用有作用域的服务

Furion 中, Event Bus 所有服务均注册为单例,如需使用作用域服务(单例服务可直接注入),可通过依赖注入 IServiceProvider 实例并通过 CreateScope() 创建一个作用域,如:

public class ToDoEventSubscriber : IEventSubscriber
{
private readonly ILogger<ToDoEventSubscriber> _logger;

public ToDoEventSubscriber(IServiceProvider services
, ILogger<ToDoEventSubscriber> logger)
{
Services = services;
_logger = logger;
}

public IServiceProvider Services { get; }

[EventSubscribe("ToDo:Create")]
public async Task CreateToDo(EventHandlerExecutingContext context)
{
// 创建新的作用域
using var scope = Services.CreateScope();

// 解析服务
var scopedProcessingService = scope.ServiceProvider.GetRequiredService<IScopedProcessingService>();
// ....
}
}

22.9 订阅执行任务意外异常

services.AddEventBus(builder =>
{
// 订阅 EventBus 未捕获异常
builder.UnobservedTaskExceptionHandler = (obj, args) =>
{
// ....
};
});

22.10 事件总线工厂

版本说明

以下内容仅限 Furion 4.2.10 + 版本使用。

在该版本中,Furion 提供了 IEventBusFactory 工厂服务,可在运行时动态新增或删除订阅,如:

public class TestEventBus : IDynamicApiController
{
private readonly IEventPublisher _eventPublisher;
private readonly IEventBusFactory _eventBusFactory;
public TestEventBus(IEventPublisher eventPublisher, IEventBusFactory eventBusFactory)
{
_eventPublisher = eventPublisher;
_eventBusFactory = eventBusFactory;
}

// 运行时动态添加一个订阅器
public async Task AddSubscriber()
{
await _eventBusFactory.Subscribe("xxx", async (ctx) =>
{
Console.WriteLine("我是动态的");
await Task.CompletedTask;
});
}

// 运行时动态删除一个订阅器
public async Task RemoveDynamic(string eventId)
{
await _eventBusFactory.Unsubscribe(eventId);
}
}

22.11 MessageCenter 静态类

版本说明

以下内容仅限 Furion 4.3.3 + 版本使用。

Furion 4.3.3 版本新增了 MessageCenter 静态类,可在任何地方发送事件消息或订阅消息。

// 发送消息(含诸多重载)
await MessageCenter.PublishAsync("messageId", new {});

// 动态订阅消息
MessageCenter.Subscribe("messageId", async (ctx) => {
Console.WriteLine("我是动态的");
await Task.CompletedTask;
});

// 取消订阅
MessageCenter.Unsubscribe("messageId");

22.12 配置重试失败回调

版本说明

以下内容仅限 Furion 4.6.1 + 版本使用。

  1. 创建 IEventFallbackPolicy 实现类并实现 Callback 方法,如 EventFallbackPolicy
public class EventFallbackPolicy : IEventFallbackPolicy
{
private readonly ILogger<EventFallbackPolicy> _logger;
public EventFallbackPolicy(ILogger<EventFallbackPolicy> logger)
{
_logger = logger;
}

public async Task CallbackAsync(EventHandlerExecutingContext context, Exception ex)
{
_logger.LogError(ex, "重试了多次最终还是失败了");
await Task.CompletedTask;
}
}
  1. 注册 EventFallbackPolicy 类型服务
services.AddEventBus(options =>
{
options.AddFallbackPolicy<EventFallbackPolicy>();
});
  1. 通过 [EventSubscribe] 特性配置 FallbackPolicy 属性使用
[EventSubscribe("test:error", NumRetries = 3, FallbackPolicy = typeof(EventFallbackPolicy))]  // 重试三次
public async Task TestError(EventHandlerExecutingContext context)
{
Console.WriteLine("我执行啦~~");
throw new NotImplementedException();
}
小知识

可以定义多个 IEventFallbackPolicy 实现类,然后通过 options.AddFallbackPolicy<T>() 注册多个,这样实现不同的事件订阅程序执行不同的策略。如:

[EventSubscribe("test:error", NumRetries = 3, FallbackPolicy = typeof(EventFallbackPolicy))]

[EventSubscribe("test:error", NumRetries = 1010, FallbackPolicy = typeof(OtherEventFallbackPolicy))]

22.13 EventBusOptionsBuilder 配置

EventBusOptionsBuilderAddEventBus 构建服务选项,该选项包含以下属性和方法:

  • 属性
    • ChannelCapacity:默认内存通道容量
    • UnobservedTaskExceptionHandler:订阅执行任务未察觉异常
    • UseUtcTimestamp:是否使用 UTC 事件,bool 类型,默认 false
    • FuzzyMatch:是否开启全局模糊匹配(正则表达式)事件 Idbool 类型,默认 false
    • LogEnabled:是否启用日志输出,bool 类型,默认 true
  • 方法
    • AddSubscriber<TEventSubscriber>:添加订阅者
    • ReplacePublisher<TEventPublisher>:替换发布者
    • ReplaceStorer(Func<IServiceProvider, IEventSourceStorer>):替换存储器
    • AddMonitor<TEventHandlerMonitor>:添加监视器
    • AddExecutor<TEventHandlerExecutor>:添加执行器

22.14 关于高频消息处理方式

在一些高频发送消息的场景如 IoT、日志记录、数据采集,为避免频繁解析服务和创建作用域,可使用 类全局作用域 和所有服务都采取单例的方式:

public class ToDoEventSubscriber : IEventSubscriber, IDisposable
{
private readonly ILogger<ToDoEventSubscriber> _logger;
private readonly IServiceScope _serviceScope;

public ToDoEventSubscriber(IServiceProvider serviceProvider
, ILogger<ToDoEventSubscriber> logger)
{
_serviceScope = serviceProvider.CreateScope();
_logger = logger;
}

[EventSubscribe("iot:log")]
public async Task LogFromIoT(EventHandlerExecutingContext context)
{
// 解析服务
var scopedProcessingService = _serviceScope.ServiceProvider.GetRequiredService<IScopedProcessingService>();
// ....
}

/// <summary>
/// 释放服务作用域
/// </summary>
public void Dispose()
{
_serviceScope.Dispose();
}
}

22.15 IIS 部署回收设置

如果在项目中使用了事件总线且部署到 IIS 中,那么需要设置 IIS 禁止回收,避免事件总线服务进入休眠,点击查看 IIS 回收问题解决方案

22.16 使用第三方事件总线 CAP 示例

builder.Services.AddCap(options =>
{
options.UseInMemoryStorage();
options.UseInMemoryMessageQueue();
}).AddSubscriberAssembly(App.Assemblies.ToArray());

22.17 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/file-provider/index.html b/handbook/build/docs/file-provider/index.html new file mode 100644 index 00000000000..041b33e1401 --- /dev/null +++ b/handbook/build/docs/file-provider/index.html @@ -0,0 +1,17 @@ + + + + + +31. 虚拟文件系统 | Furion + + + + + +
+

31. 虚拟文件系统

版本说明

以下内容仅限 Furion 2.5.0 + 版本使用。

31.1 关于文件系统

本章所谓的 文件系统 有点名不副实,其实根本算不上一个系统,它仅仅是利用一个抽象化的 IFileProvider 以统一的方式提供所需的文件而已。通过该 文件系统 可以读取物理文件和嵌入资源文件,包括目录结果读取,文件内容读取,文件内容监听等等。

31.1.1 文件系统类型

Furion 提供了两种文件系统类型:

  • Physical:物理文件系统类型,也就是物理机中实际存在的文件
  • Embedded:嵌入资源文件系统类型,也就是资源文件嵌入到了程序集中,常用于模块化开发

31.2 注册虚拟文件系统服务

services.AddVirtualFileServer();

31.3 获取文件系统 IFileProvider 实例

31.3.1 Func<FileProviderTypes, object, IFileProvider> 方式

Furion 框架提供了 Func<FileProviderTypes, object, IFileProvider> 委托供构造函数注入或解析服务,如:

public class PersonServices
{
private readonly IFileProvider _physicalFileProvider;
private readonly IFileProvider _embeddedFileProvider;

public PersonServices(Func<FileProviderTypes, object, IFileProvider> fileProviderResolve)
{
// 解析物理文件系统
_physicalFileProvider = fileProviderResolve(FileProviderTypes.Physical, @"c:/test");

// 解析嵌入资源文件系统
_embeddedFileProvider = fileProviderResolve(FileProviderTypes.Embedded, Assembly.GetEntryAssembly());
}
}

31.3.2 FS 静态类方式

Furion 框架也提供了 FS 静态类方式创建,如:

// 解析物理文件系统
var physicalFileProvider = FS.GetPhysicalFileProvider(@"c:/test");

// 解析嵌入资源文件系统
var embeddedFileProvider = FS.GetEmbeddedFileProvider(Assembly.GetEntryAssembly());

31.4 IFileProvider 常见操作

31.4.1 读取文件内容

byte[] buffer;
using (Stream readStream = _fileProvider.GetFileInfo("你的文件路径").CreateReadStream())
{
buffer = new byte[readStream.Length];
await readStream.ReadAsync(buffer.AsMemory(0, buffer.Length));
}

// 读取文件内容
var content = Encoding.UTF8.GetString(buffer);

31.4.2 获取文件目录内容(需递归查找)

var rootPath = "当前目录路径";
var fileinfos = _fileProvider.GetDirectoryContents(rootPath);
foreach (var fileinfo in fileinfos)
{
if(fileinfo.IsDirectory)
{
// 这里递归。。。
}
}

31.4.4 监听文件变化

ChangeToken.OnChange(() => _fileProvider.Watch("监听的文件"), () =>
{
// 这里写你的逻辑
});

31.5 模块化静态资源配置

通常我们采用模块化开发,静态资源都是嵌入进程序集中,这时候我们需要通过配置 UseFileServer 指定模块静态资源路径,如:

// 默认静态资源调用,wwwroot
app.UseStaticFiles();

// 配置模块化静态资源
app.UseFileServer(new FileServerOptions
{
FileProvider = new EmbeddedFileProvider(模块程序集),
RequestPath = "/模块名称", // 后续所有资源都是通过 /模块名称/xxx.css 调用
EnableDirectoryBrowsing = true
});

31.6 文件上传下载

在应用开发中,文件上传下载属于非常常用的功能,这里贴出常见的文件上传下载示例。

31.6.1 文件下载

  • 文件路径的方式
[HttpGet, NonUnify]
public IActionResult FileDownload()
{
string filePath = "这里获取完整的文件下载路径";
return new FileStreamResult(new FileStream(filePath, FileMode.Open), "application/octet-stream") {
FileDownloadName = fileName // 配置文件下载显示名
};
}
  • byte[] 方式
[HttpGet, NonUnify]
public IActionResult FileDownload()
{
return new FileStreamResult(byte数组, "application/octet-stream") {
FileDownloadName = fileName // 配置文件下载显示名
};
}
关于前端获取文件名

如果前端获取不到文件夹,可添加以下配置:

_httpContextAccessor.HttpContext.Response.Headers.Add("Content-Disposition", $"attachment; filename={文件名}");
_httpContextAccessor.HttpContext.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

31.6.2 文件上传

小提醒

IFormFile 类型对应前端的 Content-Type 为: multipart/form-data

  • 单文件 IFormFile 类型参数(存储到硬盘)
[HttpPost]
public async Task<IActionResult> UploadFileAsync(IFormFile file)
{
// 如:保存到网站根目录下的 uploads 目录
var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, "uploads");
if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);

//// 这里还可以获取文件的信息
// var size = file.Length / 1024.0; // 文件大小 KB
// var clientFileName = file.FileName; // 客户端上传的文件名
// var contentType = file.ContentType; // 获取文件 ContentType 或解析 MIME 类型

// 避免文件名重复,采用 GUID 生成
var fileName = Guid.NewGuid().ToString("N") + Path.GetExtension(file.FileName);
var filePath = Path.Combine(savePath, fileName);

// 保存到指定路径
using (var stream = System.IO.File.Create(filePath))
{
await file.CopyToAsync(stream);
}

// 在动态 API 直接返回对象即可,无需 OK 和 IActionResult
return Ok(new { filename });
}
  • 单文件 Base64 类型参数(存储到硬盘)
[HttpPost]
public async Task UploadFileAsync([FromBody] string fileBase64, string clientFileName)
{
// 如:保存到网站根目录下的 uploads 目录
var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, "uploads");
if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);

// 将 base64 字符串转 byte[]
var bytes = Convert.FromBase64String(fileBase64);

// 这里还可以获取文件的信息
// var size = bytes.Length / 1024.0; // 文件大小 KB

// 避免文件名重复,采用 GUID 生成
var fileName = Guid.NewGuid().ToString("N") + Path.GetExtension(clientFileName);
var filePath = Path.Combine(savePath, fileName);

// 保存到指定路径
using (var fs = new FileStream(filePath, FileMode.Create))
{
await fs.WriteAsync(bytes);
}

// 在动态 API 直接返回对象即可,无需 OK 和 IActionResult
return Ok(new { fileName });
}
特别注意

文件 Base64 字符串如果带 data:text/plain;base64, 开头则,需要手动去掉 , 之前(含逗号)的字符串。

  • 多文件 List<IFormFile> 类型参数(存储到硬盘)

代码和 单文件处理一致,只需 foreach 即可。

[HttpPost]
public async Task<IActionResult> UploadFileAsync(List<IFormFile> files)
{
// 保存到网站根目录下的 uploads 目录
var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, "uploads");
if(!Directory.Exists(savePath)) Directory.CreateDirectory(savePath);

// 总上传大小
long size = files.Sum(f => f.Length);

// 遍历所有文件逐一上传
foreach (var formFile in files)
{
if (formFile.Length > 0)
{
// 避免文件名重复,采用 GUID 生成
var fileName = Guid.NewGuid().ToString("N") + Path.GetExtension(clientFileName);
var filePath = Path.Combine(savePath, fileName);

// 保存到指定路径
using (var stream = System.IO.File.Create(filePath))
{
await formFile.CopyToAsync(stream);
}
}
}

// 在动态 API 直接返回对象即可,无需 OK 和 IActionResult
return Ok(new { count = files.Count, size });
}
  • 多文件 List<string> Base64 类型参数(存储到硬盘)

代码和 单文件处理一致,只需 foreach 即可(参上)。

31.6.3 将 IFormFilebyte[]

有时候我们需要将文件转换成 byte[] 存储到数据库,而不是存储到硬盘中。

[HttpPost]
public async Task<IActionResult> UploadFileAsync(IFormFile file)
{
var fileLength = file.Length;
using var stream = file.OpenReadStream();
var bytes = new byte[fileLength];

stream.Read(bytes, 0, (int)fileLength);

// 这里将 bytes 存储到你想要的介质中即可
}
便捷拓展方法

在 Furion v3.2.0 新增了 IFormFileToByteArray 拓展,如:

[HttpPost]
public async Task<IActionResult> UploadFileAsync(IFormFile file)
{
var bytes = file.ToByteArray();

// 这里将 bytes 存储到你想要的介质中即可
}

31.6.4 将 byte[] 输出为 Url 地址

由于一些项目直接将文件二进制存储在数据库中,读取到内存的时候都是 byte[] 数组,比如我们将图片文件存储在数据库中,然后前端通过 Url 链接进行访问,这个时候就需要将 byte[] 转换为有效的资源路径格式,如:

[NonUnify, HttpGet, AllowAnonymous]
public async Task<IActionResult> attachment(string resourceId)
{
// 根据 resourceId 查询 byte[] 字节数组和 content-type

// 返回 FileContentResult 类型
return new FileContentResult(字节数组,content-type);
}

之后我们就可以通过 https://localhost/attachment/资源id 访问文件或图片了。

31.7 请求大小控制(上传文件大小控制)

Web 项目中,KestrelHttpSys 都强制实施 30M (~28.6MiB) 的最大请求正文大小限制,如果请求正文大小超过配置的最大请求正文大小限制,则引发 Request body too large. The max request body size is xxxxx 异常,状态码为 413500

31.7.1 对特定的接口进行控制

可通过 [RequestSizeLimit] 特性进行特定限制

[HttpPost]
[RequestSizeLimit(100_000_000)]
public IActionResult MyAction([FromBody] MyViewModel data)
{
}

31.7.2 对特定接口取消限制

如果不需要对请求大小进行限制,也就是支持提交无限大小,则贴 [DisableRequestSizeLimit] 特性即可。

31.7.3 通用中间件进行控制

我们也可以通过中间件的方式在 Startup.cs 中进行配置:

app.Run(async context =>
{
context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = 100_000_000; // 设置 null 就是不限制,具体值就是限制最大多少 M
}

如果设置 MaxRequestBodySizenull ,则等同于取消限制,也就是 [DisableRequestSizeLimit] 的效果。

小注意

有时候配置了中间件效果发现没起作用,很有可能和中间件顺序有关,可以通过 .IsReadOnly 属性判断,如果为 true ,说明你的配置无效,只有 false 才有效。

31.7.4 全局配置

  • IIS 方式:
  1. 开发环境(IISExpress)

Web 启动层(通常是 XXX.Web.Entry)根目录下创建 web.config 文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
  1. 生产环境

通常生产环境 IIS 自动项目添加了 web.config 文件,这时候只需要在 <configuration> 节点下添加下面内容即可:

<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
  • Kestrel 方式:
小知识

未使用 IIS 托管时,ASP.NET Core 默认使用 Kestrel 方式。

// .NET5 方式,在 .ConfigureWebHostDefaults 里面配置
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Limits.MaxRequestBodySize = null; // 设置 null 就是不限制,具体值就是限制最大多少 M
}

// .NET6 方式,在 progame.cs 文件 var app = builder.Build(); 之后配置
app.Configuration.Get<WebHostBuilder>().ConfigureKestrel(options =>
{
options.Limits.MaxRequestBodySize = null; // 设置 null 就是不限制,具体值就是限制最大多少 M
});
  • HttpSys 方式:
小知识

HTTP.sys 是仅在 Windows 上运行的适用于 ASP.NET CoreWeb 服务器。 HTTP.sysKestrel 服务器的替代选择,提供了一些 Kestrel 不提供的功能。

// .NET5 方式同上
.UseHttpSys(options =>
{
options.MaxRequestBodySize = 100_000_000; // 设置 null 就是不限制,具体值就是限制最大多少 M
}

// .NET6 方式同上

31.8 反馈与建议

与我们交流

给 Furion 提 Issue


+ + + + \ No newline at end of file diff --git a/handbook/build/docs/filter/index.html b/handbook/build/docs/filter/index.html new file mode 100644 index 00000000000..b9da8574975 --- /dev/null +++ b/handbook/build/docs/filter/index.html @@ -0,0 +1,17 @@ + + + + + +5.3 筛选器/拦截器/过滤器/AOP | Furion + + + + + +
+

5.3 筛选器/拦截器/过滤器/AOP

5.3.1 关于筛选器

筛选器又名过滤器,拦截器,在 ASP.NET Core 中,可在请求处理管道中特定阶段之前或之后运行代码。筛选器是非常经典的面向切面编程方式,也就是所谓的 AOP 操作。

通俗点说就是可以在控制器 Action 执行前后进行切面操作或返回 Result 结果前后操作。

5.3.2 应用场景

通过自定义筛选器可以实现错误处理,缓存处理,授权处理,日志记录,实现工作单元事务(Uow)等等切面操作,从而使业务逻辑和系统行为逻辑进行分离。

5.3.2.1 筛选器优点

  • 易拓展,易集成
  • 业务和系统逻辑分离,不干扰业务代码
  • 可实现接口多维度控制,如请求参数篡改,返回值篡改,限流,分布式事务支持
  • ...

5.3.3 支持拦截应用

  • Mvc/WebAPI 控制器/Action
  • Razor Pages 页面
  • 框架提供的 动态 WebAPI
  • 所有请求资源
  • 全局异常

5.3.4 筛选器类型

5.3.4.1 接口类型

  • 授权筛选器:该筛选器是最先运行,用于确定是否已针对请求为用户授权。 如果请求未获授权,授权筛选器可以让管道短路。
    • IAuthorizationFilter
    • IAsyncAuthorizationFilter
    • AuthorizeFilter
  • 资源筛选器:授权后运行,如果需要是大部分请求管道短路,它将会很有用
    • IResourceFilter
    • IAsyncResourceFilter
  • 操作筛选器:在调用操作方法之前和之后运行代码,可以更改传递的参数,返回结果等,不可在 Razor Pages 中使用
    • IActionFilter
    • IAsyncActionFilter
  • 异常筛选器:在向响应正文写入任何内容之前,对未经处理的异常应用全局策略。
    • IExceptionFilter
    • IAsyncExceptionFilter
  • 结果筛选器:在执行操作结果之前和之后立即运行代码,仅当操作方法成功执行时,它们才会运行。 对于必须围绕视图或格式化程序的执行的逻辑,它们很有用。
    • IResultFilter
    • IAsyncResultFilter
    • IAlwaysRunResultFilter:该接口主要针对所有操作结果运行拦截,也就是即使 IResourceFilter 设置了 Result 仍会执行并获取最终的 Result
    • IAsyncAlwaysRunReusltFilter
  • Razor Pages 筛选器:允许 Razor Pages 在运行 Razor 页面处理程序前后运行代码,和操作筛选器类似,但它们不能应用单个页面处理程序方法。
    • IPageFilter
    • IAsyncPageFilter

5.3.4.2 特性 Attribute 类型

  • 授权特性筛选器 (Attribute + IAsyncAuthorizationFilter):同上接口类型
  • 操作特性筛选器 (ActionFilterAttribute):同上接口类型
  • 异常特性筛选器 (ExceptionFilterAttribute):同上接口类型
  • 结果特性筛选器 (ResultFilterAttribute):同上接口类型
  • 服务特性筛选器 (ServiceFilterAttribute):支持依赖注入的服务筛选器特性
  • 类型特性筛选器 (TypeFilterAttribute):不支持依赖注入但可以传入自定义构造函数参数
  • 组合特性筛选器 (Attribute + 接口类型方式):可以通过派生自 Attribute 和 特定接口实现,如 Attribute, IActionFilter
筛选器选用技巧

关于选择哪种类型的筛选器有一个小技巧,当你不需要全局筛选器的时候使用特性筛选器,否则使用接口类型筛选器

另外尽可能的使用带 IAsync 开头的异步筛选器,这样无需分开多个方法,可在一个方法中操作,还能提高吞吐量。

同步异步筛选器

筛选器接口的同步和异步版本任意实现一个,而不是同时实现。

运行时会先查看筛选器是否实现了异步接口,如果是,则调用该接口。 如果不是,则调用同步接口的方法。

如果在一个类中同时实现异步和同步接口,则仅调用异步方法。 使用抽象类(如 ActionFilterAttribute)时,将为每种筛选器类型仅重写同步方法或仅重写异步方法。

5.3.5 筛选器注册

ASP.NET Core 提供了多种筛选器注册方式,通常情况下不同的注册方式执行顺序不同,服务类型注册最先执行,其次是 Mvc Filter 方式,最后是特性方式。相同的方式中又按照注册前后来决定执行顺序,先注册先执行。

同时也提供了 IOrderedFilter 接口重写执行顺序,其 Order 属性值越高的先执行。

5.3.5.1 在 Startup.cs 中注册

最常见的注册筛选器的方式就是在 Startup.cs 中注册,这种方式表示全局注册,应用所有控制器/Action

Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Mvc 方式注册一,全局执行
services.AddControllersWithViews(options =>
{
options.Filters.Add(new AddHeaderAttribute("GlobalAddHeader", "Result filter added to MvcOptions.Filters")); // 手动创建实例,带构造参数
options.Filters.Add(typeof(MySampleActionFilter)); // 类型 Type 方式
options.Filters.Add(new SampleGlobalActionFilter()); // 手动创建实例,无构造参数
});

// Mvc 方式注册二,全局执行
services.Configure<MvcOptions>(options =>
{
options.Filters.Add<TFilter>();
});

// Mvc 注册方式三,全局执行,Furion 框架提供方式
services.AddMvcFilter<TFilter>();
}

5.3.5.2 特性方式注册

如果筛选器派生自 特性,则可通过特性方式注册,这种方式表示局部注册,只作用于特定的控制器/Action

  • 直接贴方式
// 定义结果特性筛选器
public class AddHeaderAttribute : ResultFilterAttribute
{
// ...
}

// 直接贴方式,对于动态 WebAPI 也是一样的
[AddHeader]
public class SampleController : Controller
{
}
  • 通过 [ServiceFilter] 方式

这种方式适用于自定义的特性筛选器包含构造函数注入服务应用场景,这种方式必须在 ConfigureService 中通过 services.AddScoped<TFilter> 注册。

public class MyActionFilterAttribute : ActionFilterAttribute
{
// 注入服务
private readonly PositionOptions _settings;
public MyActionFilterAttribute(IOptions<PositionOptions> options)
{
}
}

需先在 Startup.cs 中注册筛选器

Startup.cs
services.AddScoped<MyActionFilterAttribute>();

使用:

public class SampleController : Controller
{
// 通过 [ServiceFilter] 方式
[ServiceFilter(typeof(MyActionFilterAttribute))]
public IActionResult Index2()
{
// ...
}
}
  • 通过 [TypeFilter] 方式

[TypeFilter][ServiceFilter] 类似,唯一的区别就是 [TypeFilter] 不支持构造函数注入服务,但可以传递基元类型构造函数参数

public class MyLogFilterAttribute : ActionFilterAttribute
{
// 构造函数包含基元类型参数
public MyLogFilterAttribute(string message, int level)
{
}
}

public class SampleController : Controller
{
// 通过 [TypeFilter] 方式
[TypeFilter(typeof(MyLogFilterAttribute), Arguments = new object[] { "Message", 10 })]
public IActionResult Index2()
{
// ...
}
}

5.3.6 授权筛选器

通过授权筛选器可以实现在所有请求到达控制器/Action 之前进行验证,如果授权失败,直接跳转到登录或者返回 401

5.3.6.1 接口定义方式

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Authorization;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters;

namespace WebApplication4.Filters;

/// <summary>
/// 自定义授权筛选器
/// </summary>
public class MyAuthorizationFilter : IAsyncAuthorizationFilter
{
public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
Console.WriteLine("授权检查......");

// 获取控制器信息
var actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;

// 获取控制器类型
var controllerType = actionDescriptor!.ControllerTypeInfo;

// 获取 Action 类型
var methodType = actionDescriptor.MethodInfo;

// 是否匿名访问
var allowAnonymouse = context.Filters.Any(u => u is IAllowAnonymousFilter)
|| controllerType.IsDefined(typeof(AllowAnonymousAttribute), true)
|| methodType.IsDefined(typeof(AllowAnonymousAttribute), true);

// 不是匿名才处理权限检查
if (!allowAnonymouse)
{
Console.Write("逻辑检查~~~~");

// 在 MVC 项目中,如果检查失败,则跳转到登录页
if (typeof(Controller).IsAssignableFrom(controllerType.AsType()))
{
context.Result = new RedirectResult("~/Login");
}
// WebAPI 或者其他类型
else
{
// 返回未授权
context.Result = new UnauthorizedResult();
}
}
// 否则直接跳过处理
else await Task.CompletedTask;
}
}
  • 全局注册

ConfigureService 中注册,该方式会作用所有的控制器/ Action

services.Configure<MvcOptions>(options =>
{
options.Filters.Add<MyAuthorizationFilter>();
});
更简易方式

Furion 框架中提供了 services.AddMvcFilter<MyAuthorizationFilter>(),可使用它代替上面多行注册。

  • 局部特性方式

[TypeFilter]

[TypeFilter(typeof(MyAuthorizationFilter))]
public IActionResult Get()
{
// ...
}

[ServiceFilter]

Starup.cs
services.AddScoped<MyAuthorizationFilter>();
[ServiceFilter(typeof(MyAuthorizationFilter))]
public IActionResult Get()
{
// ...
}

5.3.6.2 特性定义方式(组合)

只需要上述接口方式中添加派生 Attribute 并设置 [AttributeUsage] 接口,如:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)]
public class MyAuthorizationFilterAttribute : Attribute, IAsyncAuthorizationFilter
{
public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
// 代码同上
}
}

使用:

[MyAuthorizationFilter]
public IActionResult Get()
{
// ...
}

5.3.7 资源筛选器

资源筛选器使用频率较少,通常用来处理资源缓存或者阻止模型(值)绑定操作。

5.3.7.1 接口定义方式

using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.ModelBinding;

namespace WebApplication4.Filters;

public class MyResourceFilter : IAsyncResourceFilter
{
public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next)
{
// 获取所有资源提供器工厂
var valueProviderFactories = context.ValueProviderFactories;

// 比如这里判断如果是 Form 表单方式提交就就不给参数复制
var formValueProviderFactory = valueProviderFactories
.OfType<FormValueProviderFactory>()
.FirstOrDefault();
if (formValueProviderFactory != null)
{
// 移除 Form 表单绑定值提供器器
context.ValueProviderFactories.Remove(formValueProviderFactory);
}

// .... 更多操作

// 资源请求成功后
var resourceContext = await next();
}
}
  • 全局注册

ConfigureService 中注册,该方式会作用所有的控制器/ Action

services.Configure<MvcOptions>(options =>
{
options.Filters.Add<MyResourceFilter>();
});
更简易方式

Furion 框架中提供了 services.AddMvcFilter<MyResourceFilter>(),可使用它代替上面多行注册。

  • 局部特性方式

[TypeFilter]

[TypeFilter(typeof(MyResourceFilter))]
public IActionResult Get()
{
// ...
}

[ServiceFilter]

Starup.cs
services.AddScoped<MyResourceFilter>();
[ServiceFilter(typeof(MyResourceFilter))]
public IActionResult Get()
{
// ...
}

5.3.7.2 特性定义方式(组合)

只需要上述接口方式中添加派生 Attribute 并设置 [AttributeUsage] 接口,如:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)]
public class MyResourceFilterAttribute : Attribute, IAsyncResourceFilter
{
public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next)
{
// 代码同上
}
}

使用:

[MyResourceFilter]
public IActionResult Get()
{
// ...
}

5.3.8 操作筛选器

操作筛选器是使用频率最高的筛选器,通常用来控制进入 Action 之前(此时模型绑定已经完成)和 Action 执行之后(此时 Result 还未返回)。

可以使用操作筛选器实现各种骚操作,如篡改参数,篡改返回值,统一参数验证,审计日志,实现数据库事务自动开启关闭等等。

5.3.8.1 接口定义方式

using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Diagnostics;
using System.Security.Claims;

namespace WebApplication4.Filters;

public class MyActionFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
//============== 这里是执行方法之前获取数据 ====================
// 获取控制器、路由信息
var actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;

// 获取请求的方法
var method = actionDescriptor!.MethodInfo;

// 获取 HttpContext 和 HttpRequest 对象
var httpContext = context.HttpContext;
var httpRequest = httpContext.Request;

// 获取客户端 Ipv4 地址
var remoteIPv4 = httpContext.GetRemoteIpAddressToIPv4();

// 获取请求的 Url 地址
var requestUrl = httpRequest.GetRequestUrlAddress();

// 获取来源 Url 地址
var refererUrl = httpRequest.GetRefererUrlAddress();

// 获取请求参数(写入日志,需序列化成字符串后存储),可以自由篡改!!!!!!
var parameters = context.ActionArguments;

// 获取操作人(必须授权访问才有值)"userId" 为你存储的 claims type,jwt 授权对应的是 payload 中存储的键名
var userId = httpContext.User?.FindFirstValue("userId");

// 请求时间
var requestedTime = DateTimeOffset.Now;

//============== 这里是执行方法之后获取数据 ====================
var actionContext = await next();

// 获取返回的结果
var returnResult = actionContext.Result;

// 判断是否请求成功,没有异常就是请求成功
var isRequestSucceed = actionContext.Exception == null;

// 获取调用堆栈信息,提供更加简单明了的调用和异常堆栈
var stackTrace = EnhancedStackTrace.Current();

// 其他操作,如写入日志
}
}
  • 全局注册

ConfigureService 中注册,该方式会作用所有的控制器/ Action

services.Configure<MvcOptions>(options =>
{
options.Filters.Add<MyActionFilter>();
});
更简易方式

Furion 框架中提供了 services.AddMvcFilter<MyActionFilter>(),可使用它代替上面多行注册。

  • 局部特性方式

[TypeFilter]

[TypeFilter(typeof(MyActionFilter))]
public IActionResult Get()
{
// ...
}

[ServiceFilter]

Starup.cs
services.AddScoped<MyActionFilter>();
[ServiceFilter(typeof(MyActionFilter))]
public IActionResult Get()
{
// ...
}

5.3.8.2 ActionFilterAttribute 方式

using Microsoft.AspNetCore.Mvc.Filters;

namespace WebApplication4.Filters;

public class MyActionAttribute : ActionFilterAttribute
{
/// <summary>
/// 执行操作前后
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// 代码参考接口方式

return base.OnActionExecutionAsync(context, next);
}

/// <summary>
/// 返回结果前后
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public override Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
// 代码参考接口方式

return base.OnResultExecutionAsync(context, next);
}
}
  • 全局注册

ConfigureService 中注册,该方式会作用所有的控制器/ Action

services.Configure<MvcOptions>(options =>
{
options.Filters.Add<MyActionAttribute>();
});
更简易方式

Furion 框架中提供了 services.AddMvcFilter<MyActionAttribute>(),可使用它代替上面多行注册。

  • 局部特性方式
[MyAction]
public IActionResult Get()
{
// ...
}

5.3.8.3 特性定义方式(组合)

只需要上述接口方式中添加派生 Attribute 并设置 [AttributeUsage] 接口,如:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)]
public class MyActionFilterAttribute : Attribute, IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// 代码同上
}
}

使用:

[MyActionFilter]
public IActionResult Get()
{
// ...
}

5.3.9 异常筛选器

异常筛选器使用频率仅次于操作筛选器,更多用于程序出现异常时记录日志或者返回统一的页面操作。

5.3.9.1 接口定义方式

using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Diagnostics;

namespace WebApplication4.Filters;

public class MyExceptionFilter : IAsyncExceptionFilter
{
public async Task OnExceptionAsync(ExceptionContext context)
{
// 如果异常在其他地方被标记了处理,那么这里不再处理
if (context.ExceptionHandled) return;

// 获取控制器信息
ControllerActionDescriptor? actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;

// 获取请求的方法
var method = actionDescriptor!.MethodInfo;

// 获取异常对象
var exception = context.Exception;

// 获取调用堆栈信息,提供更加简单明了的调用和异常堆栈
var stackTrace = EnhancedStackTrace.Current();

// 其他处理~~~
// 1. MVC 直接返回自定义的错误页面,或者 BadPageResult 类型,如:context.Result = new BadPageResult(StatusCodes.Status500InternalServerError) { }

// 2. WebAPI 可以直接返回 context.Result = new JsonResult(.....);

// 3. 记录日志。。。。

await Task.CompletedTask;
}
}
  • 全局注册

ConfigureService 中注册,该方式会作用所有的控制器/ Action

services.Configure<MvcOptions>(options =>
{
options.Filters.Add<MyExceptionFilter>();
});
更简易方式

Furion 框架中提供了 services.AddMvcFilter<MyExceptionFilter>(),可使用它代替上面多行注册。

  • 局部特性方式

[TypeFilter]

[TypeFilter(typeof(MyExceptionFilter))]
public IActionResult Get()
{
// ...
}

[ServiceFilter]

Starup.cs
services.AddScoped<MyExceptionFilter>();
[ServiceFilter(typeof(MyExceptionFilter))]
public IActionResult Get()
{
// ...
}

5.3.9.2 ExceptionFilterAttribute 方式

using Microsoft.AspNetCore.Mvc.Filters;

namespace WebApplication4.Filters;

public class MyExceptionAttribute : ExceptionFilterAttribute
{
/// <summary>
/// 异常拦截器
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public override Task OnExceptionAsync(ExceptionContext context)
{
// 代码参考接口方式
return base.OnExceptionAsync(context);
}
}
  • 全局注册

ConfigureService 中注册,该方式会作用所有的控制器/ Action

services.Configure<MvcOptions>(options =>
{
options.Filters.Add<MyExceptionAttribute>();
});
更简易方式

Furion 框架中提供了 services.AddMvcFilter<MyExceptionAttribute>(),可使用它代替上面多行注册。

  • 局部特性方式
[MyException]
public IActionResult Get()
{
// ...
}

5.3.9.3 特性定义方式(组合)

只需要上述接口方式中添加派生 Attribute 并设置 [AttributeUsage] 接口,如:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)]
public class MyExceptionFilterAttribute : Attribute, IAsyncExceptionFilter
{
public async Task OnExceptionAsync(ExceptionContext context)
{
// 代码同上
}
}

使用:

[MyExceptionFilter]
public IActionResult Get()
{
// ...
}

5.3.10 结果筛选器

结果控制器常用于对返回的结果附加更多数据,比如 Mvc 中的 ViewBagViewData,换句话说主要用来控制输出到浏览器的界面视图对象。

5.3.10.1 接口定义方式

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters;

namespace WebApplication4.Filters;

public class MyResultFilter : IAsyncResultFilter
{
public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
// 获取控制器信息
ControllerActionDescriptor? actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;

// 获取路由表信息
var routeData = context.RouteData;
var controllerName = routeData.Values["controller"];
var actionName = routeData.Values["action"];
var areaName = routeData.DataTokens["area"];

// 判断如果是 MVC 视图,可以动态添加数据到页面中
if (context.Result is ViewResult viewResult)
{
// 动态添加数据,在 Razor 中就可以直接使用 @TempData["Name"] 获取数据了
viewResult.TempData["Name"] = "Furion";

// 动态添加数据,在 Razor 中就可以直接使用 @ViewBag.Version 或 @ViewData["Name"] 获取数据了
viewResult.ViewData["Version"] = 1;
}

// 这里还可以强制性换掉 Result
// context.Result = new ContentResult("....");

// 执行下一个结果过滤器,如果直接短路返回,可设置 context.Cancel = true; 这样就不会执行下一个过滤器,这个和下列代码是互斥的
var resultContext = await next();

// 获取返回的结果
var result = resultContext.Result;
}
}
  • 全局注册

ConfigureService 中注册,该方式会作用所有的控制器/ Action

services.Configure<MvcOptions>(options =>
{
options.Filters.Add<MyResultFilter>();
});
更简易方式

Furion 框架中提供了 services.AddMvcFilter<MyResultFilter>(),可使用它代替上面多行注册。

  • 局部特性方式

[TypeFilter]

[TypeFilter(typeof(MyResultFilter))]
public IActionResult Get()
{
// ...
}

[ServiceFilter]

Starup.cs
services.AddScoped<MyResultFilter>();
[ServiceFilter(typeof(MyResultFilter))]
public IActionResult Get()
{
// ...
}

5.3.10.2 ResultFilterAttribute 方式

using Microsoft.AspNetCore.Mvc.Filters;

namespace WebApplication4.Filters;

public class MyResultAttribute : ResultFilterAttribute
{
public override Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
// 代码参考接口方式

return base.OnResultExecutionAsync(context, next);
}
}
  • 全局注册

ConfigureService 中注册,该方式会作用所有的控制器/ Action

services.Configure<MvcOptions>(options =>
{
options.Filters.Add<MyResultAttribute>();
});
更简易方式

Furion 框架中提供了 services.AddMvcFilter<MyResultAttribute>(),可使用它代替上面多行注册。

  • 局部特性方式
[MyResult]
public IActionResult Get()
{
// ...
}

5.3.10.3 特性定义方式(组合)

只需要上述接口方式中添加派生 Attribute 并设置 [AttributeUsage] 接口,如:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)]
public class MyResultFilterAttribute : Attribute, IAsyncResultFilter
{
public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
// 代码同上
}
}

使用:

[MyResultFilter]
public IActionResult Get()
{
// ...
}

5.3.10.4 IAlwaysRunResultFilter

IAlwaysRunResultFilterIAsyncAlwaysRunResultFilter 接口声明了一个针对所有操作结果运行的 IResultFilter 实现。 这包括由以下对象生成的操作结果:

  • 设置短路的授权筛选器和资源筛选器。
  • 异常筛选器。

详细使用可查看微软官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/filters?view=aspnetcore-6.0#ialwaysrunresultfilter-and-iasyncalwaysrunresultfilter

5.3.11 RazorPages 筛选器

Razor Pages 筛选器仅支持 Razor Pages 项目类型。

5.3.11.1 接口定义方式

using Microsoft.AspNetCore.Mvc.Filters;

namespace WebApplication1;

public class MyPageFilter : IAsyncPageFilter
{
/// <summary>
/// 调用方法之前
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{
// 路由信息
var routeData = context.RouteData;

// 请求方法信息
var actionDescriptor = context.ActionDescriptor;

// 处理方法信息
var methodDescriptor = context.HandlerMethod;

await next.Invoke();
}

/// <summary>
/// 模型绑定之前
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public Task OnPageHandlerSelectionAsync(PageHandlerSelectedContext context)
{
return Task.CompletedTask;
}
}
  • 全局注册

ConfigureService 中注册,该方式会作用所有 Page Handler

services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new MyPageFilter());
});

5.3.11.2 ResultFilterAttribute 方式

using Microsoft.AspNetCore.Mvc.Filters;

namespace WebApplication1.Filters;

public class MyResultAttribute : ResultFilterAttribute
{
public override Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
// 代码参考接口方式

return base.OnResultExecutionAsync(context, next);
}
}
  • 局部特性方式
[MyResult]
public void OnGet()
{
// ...
}

5.3.12 筛选器取消和短路

通常筛选器支持多个,正常情况下,只要调用 await next() 方法都会进去下一个筛选器,但如果通过 context.Result = new XXXResult() 之后,就可以使其短路,也就是不会再执行下一个筛选器。

但也有例外

  • IResultFilter/IAsyncResultFilter 结果筛选器中,则使用标记 context.Cancel = true; 设置短路。
  • IExceptionFilter/IAsyncExceptionFilter 异常筛选器中,则使用标记 context.ExceptionHandled = true; 设置短路。

5.3.13 筛选器执行顺序控制

默认情况下,筛选器是按照以下执行顺序执行:

5.3.13.1 不同类型筛选器执行顺序

IAuthorizationFilter -> IResourceFilter -> IActionFilter -> IExceptionFilter -> IResultFilter -> IAlwaysRunResultFilter

异步也是如此。

5.3.13.2 相同类型筛选器执行顺序

默认情况下,通过 services.Configure<MvcOptions>(...) 方式先注册先执行,之后到特性方式,也是采用先注册先执行。

如果使用同一种方式,如 services.Configuration<MvcOptions>(...) 或同一种特性方式,也可以控制其执行顺序,如:

  • IOrderedFilter 方式:
public class MyActionFilter : IAsyncActionFilter, IOrderedFilter
{
// 值越大,越优先执行
public int Order => 1000;

public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// ....
}
}
  • 特性 方式:
[MyActionFilter(Order = 1000)]
public class ControllerFiltersController : Controller
{
// ...
}

5.3.4 筛选器依赖注入

筛选器是支持构造函数依赖注入服务的,使用它们的前提是在 Startup.cs 中注册,如:

Startup.cs
services.AddScoped<MyActionFilterAttribute>();

5.3.15 了解更多

想了解更多筛选器知识可查阅官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/filters?view=aspnetcore-6.0

5.3.16 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/friendly-exception/index.html b/handbook/build/docs/friendly-exception/index.html new file mode 100644 index 00000000000..528e5cd7cb2 --- /dev/null +++ b/handbook/build/docs/friendly-exception/index.html @@ -0,0 +1,17 @@ + + + + + +7. 友好异常处理 | Furion + + + + + +
+

7. 友好异常处理

7.1 什么是异常

异常一般是指运行期(此处特指 Exception 类)会发生的导致程序意外中止的问题,是一种对问题的描述后的封装对象。

在过去开发中,通常异常由系统运行时出错抛出,但现在的开发过程中,我们应在程序开发中合理的抛出异常,比如更新一条不存在的实体,或查询一个不存在的数据等等。

7.2 处理异常方式

  • 不处理,直接中断程序执行(不推荐)
  • 通过 try catch finally 处理(不推荐)
  • 全局统一处理,并记录异常信息(推荐)
  • 异常注解方式处理,支持本地化 (推荐)

7.3 什么是友好异常处理

7.3.1 非友好异常处理

在了解友好异常处理之前可以看看非友好异常处理:

  • 对终端用户抛出 500状态码 堆栈信息
  • 大量的 try catch 代码,污染正常业务逻辑
  • 没有规范化的异常状态码和异常消息管理
  • 没有异常日志收集记录
  • 不支持异常消息本地化处理
  • 不支持异常策略,失败后程序立即终止
  • 不支持分布式事务 CAP
  • 不支持异常传播
  • 返回的异常格式杂乱

7.3.2 友好异常处理

  • 对终端用户提示友好
  • 对后端开发人员提供详细的异常堆栈
  • 不干扰正常业务逻辑代码,如 没有 try catch 代码
  • 支持异常状态码多方设置
  • 支持异常消息本地化
  • 异常信息统一配置管理
  • 支持异常策略,如重试
  • 支持异常日志收集记录
  • 支持 CAP 分布式事务关联
  • 支持内部异常外部传播
  • 支持返回统一的异常格式数据

7.4 友好异常处理使用示例

Furion 框架提供了非常灵活的友好异常处理方式。

备注

.AddFriendlyException() 默认已经集成在 AddInject() 中了,无需再次注册。也就是 7.4.1 章节可不配置。

7.4.1 注册友好异常服务

Furion.Web.Core\FurWebCoreStartup.cs
using Microsoft.Extensions.DependencyInjection;

namespace Furion.Web.Core
{
[AppStartup(800)]
public sealed class FurWebCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddFriendlyException();
}
}
}
特别注意

.AddFriendlyException() 需在 services.AddControllers() 之后注册。

7.4.2 两个例子

简单抛个异常

using Furion.DynamicApiController;
using Furion.FriendlyException;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public int Get(int id)
{
if (id < 3)
{
throw Oops.Oh($"{id} 不能小于3");
}

return id;
}
}
}

如下图所示:

抛出特定类型异常

using Furion.DynamicApiController;
using Furion.FriendlyException;
using System;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public int Get(int id)
{
if (id < 3)
{
throw Oops.Oh($"{id} 不能小于3。", typeof(InvalidOperationException));
}

return id;
}
}
}

如下图所示:

7.5 关于 Oops.Oh

通过上面的例子可以看出,Oops.Oh(errorMessage) 可以结合 throw 抛出异常。对于熟悉C#的人员来说,throw 后面只能 Exception 实例。Oops.Oh(...) 方法返回正是 Exception 实例。

7.5.1 为什么起这个名字?

这个名字来源于一个英语句子:Oh, Oops!,意思是 噢(哎),出错了!,所以就有了 Oops.Oh

7.5.2 Oops.Oh 重载方法

using System;

namespace Furion.FriendlyException
{
public static class Oops
{
/// <summary>
/// 抛出字符串异常
/// </summary>
/// <param name="errorMessage">异常消息</param>
/// <param name="args">String.Format 参数</param>
/// <returns>异常实例</returns>
public static Exception Oh(string errorMessage, params object[] args);

/// <summary>
/// 抛出字符串异常
/// </summary>
/// <param name="errorMessage">异常消息</param>
/// <param name="exceptionType">具体异常类型</param>
/// <param name="args">String.Format 参数</param>
/// <returns>异常实例</returns>
public static Exception Oh(string errorMessage, Type exceptionType, params object[] args);

/// <summary>
/// 抛出错误码异常
/// </summary>
/// <param name="errorCode">错误码</param>
/// <param name="args">String.Format 参数</param>
/// <returns>异常实例</returns>
public static Exception Oh(object errorCode, params object[] args);

/// <summary>
/// 抛出错误码异常
/// </summary>
/// <param name="errorCode">错误码</param>
/// <param name="exceptionType">具体异常类型</param>
/// <param name="args">String.Format 参数</param>
/// <returns>异常实例</returns>
public static Exception Oh(object errorCode, Type exceptionType, params object[] args);
}
}

7.6 最佳实践 🤗

Furion 框架中,提供了非常灵活且规范化的友好异常处理方式,通过这个方式可以方便管理异常状态码、异常信息及异常本地化。

7.6.1 创建异常信息类型

实现自定义异常信息类型必须遵循以下配置:

  • 类型必须是公开且是 Enum 枚举类型
  • 枚举类型必须贴有 [ErrorCodeType] 特性
  • 枚举中每一项必须贴有 [ErrorCodeItemMetadata] 特性
using Furion.FriendlyException;

namespace Furion.Application
{
[ErrorCodeType]
public enum ErrorCodes
{
[ErrorCodeItemMetadata("{0} 不能小于 {1}")]
z1000,

[ErrorCodeItemMetadata("数据不存在")]
x1000,

[ErrorCodeItemMetadata("{0} 发现 {1} 个异常", "百小僧", 2)]
x1001,

[ErrorCodeItemMetadata("服务器运行异常", ErrorCode = "Error")]
SERVER_ERROR
}
}
info

Furion 框架提供了 [ErrorCodeType] 特性和 IErrorCodeTypeProvider 提供器接口来提供异常信息扫描,这里用的是 [ErrorCodeType] 特性类。

7.6.2 关于 [ErrorCodeItemMetadata]

Furion 框架提供了[ErrorCodeItemMetadata] 特性用来标识枚举字段异常元数据,该特性支持传入 消息内容格式化参数。最终会使用 String.Format(消息内容,格式化参数) 进行格式化。

如果消息内容中包含格式化占位符但未指定格式化参数,那么会查找异常所在方法是否贴有 [IfException] 特性且含有格式化参数,接着就会查找 Oops.Oh 中指定的 格式化参数

7.6.3 静态异常类使用

using Furion.DynamicApiController;
using Furion.FriendlyException;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public int Get(int id)
{
if (id < 3)
{
throw Oops.Oh(ErrorCodes.z1000, id, 3);
}

return id;
}
}
}

如下图所示:

7.6.4 异常方法重试

调整说明

v2.17.0+ 版本下面方法请使用 Retry.Invoke() 替代。

Oops.Retry(() => {
// Do.....
}, 3, 1000);

// 带返回值
var value = Oops.Retry<int>(() => {
// Do.....
}, 3, 1000);

// 只有特定异常才监听
Oops.Retry(() => {

}, 3, 1000, typeof(ArgumentNullException));

7.6.5 更多例子

throw Oops.Oh(1000);
throw Oops.Oh(ErrorCodes.x1000);
throw Oops.Oh("哈哈哈哈");
throw Oops.Oh(errorCode: "x1001");
throw Oops.Oh(1000, typeof(Exception));
throw Oops.Oh(1000).StatusCode(400); // 设置错误码
throw Oops.Oh(1000).WithData(new Model {}); // 设置额外数据
throw Oops.Bah("用户名或密码错误"); // 抛出业务异常,状态码为 400
throw Oops.Bah(1000);

7.7 多个异常信息类型

using Furion.FriendlyException;

namespace Furion.Application
{
[ErrorCodeType]
public enum ErrorCodes
{
[ErrorCodeItemMetadata("{0} 不能小于 {1}")]
z1000,

[ErrorCodeItemMetadata("数据不存在")]
x1000,

[ErrorCodeItemMetadata("{0} 发现 {1} 个异常", "百小僧", 2)]
x1001,

[ErrorCodeItemMetadata("服务器运行异常", ErrorCode = "Error")]
SERVER_ERROR
}

[ErrorCodeType]
public enum UserErrorCodes
{
[ErrorCodeItemMetadata("用户数据不存在")]
u1000,

[ErrorCodeItemMetadata("其他异常")]
u1001
}
}
特别注意

多个异常静态类中也必须保证常量值唯一性,不可重复。

7.8 IErrorCodeTypeProvider 提供器

Furion 框架中,还提供了 IErrorCodeTypeProvider 异常消息提供器接口,方便在不能贴 [ErrorCodeType] 特性情况下使用:

using Furion.FriendlyException;
using System;

namespace Furion.Application
{
public class CustomErrorCodeTypeProvider : IErrorCodeTypeProvider
{
public Type[] Definitions => new[] {
typeof(ErrorCodes),
typeof(ErrorCodes2)
};
}
}

启用 IErrorCodeTypeProvider 提供器:

Furion.Web.Core\FurWebCoreStartup.cs
using Microsoft.Extensions.DependencyInjection;

namespace Furion.Web.Core
{
[AppStartup(800)]
public sealed class FurWebCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddFriendlyException<CustomErrorCodeTypeProvider>();
}
}
}
小知识

只有使用 IErrorCodeTypeProvider 方式才需使用泛型方式注册。通过上面的方式注册可以同时支持 IErrorCodeTypeProvider[ErrorCodeType] 方式。

7.9 appsetting.json 中配置

Furion 框架还提供了非常灵活的配置文件配置异常,通过这种方式可以实现异常信息后期配置,也就是无需在开发阶段预先定义。

Furion.Web.Entry/appsettings.json
{
"ErrorCodeMessageSettings": {
"Definitions": [
["5000", "{0} 不能小于 {1}"],
["5001", "我叫 {0} 名字", "百小僧"],
["5002", "Oops! 出错了"]
]
}
}

Definitions 类型为二维数组,二维数组中的每一个数组第一个参数为 ErrorCode 也就是错误码,第二个参数为 ErrorMessage 消息内容,剩余参数作为 ErrorMessage 的格式化参数。

使用示例

using Furion.DynamicApiController;
using Furion.FriendlyException;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public int Get(int id)
{
if (id < 3)
{
throw Oops.Oh(5000, id, 3); // 可以将 5000作为常量配置起来
}

return id;
}
}
}
小知识

[ErrorCodeType]IErrorCodeTypeProviderappsettings.json 可以同时使用。

7.10 [IfException] 使用

Furion 框架提供了 [IfException] 特性可以覆盖默认消息配置。也就是覆盖 异常消息类型appsettings.json 中的配置。

特别注意

[IfException] 只能贴在方法上,支持多个。

7.10.1 使用示例

  • 异常消息类定义
[ErrorCodeType]
public enum ErrorCodes
{
[ErrorCodeItemMetadata("{0} 不能小于 {1}")]
z1000
}
  • 覆盖默认配置
using Furion.DynamicApiController;
using Furion.FriendlyException;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
[IfException(ErrorCodes.z1000, ErrorMessage = "我覆盖了默认的:{0} 不能小于 {1}")]
public int Get(int id)
{
if (id < 3)
{
throw Oops.Oh(ErrorCodes.z1000, id, 3);
}

return id;
}
}
}

如下图所示:

7.10.2 更多例子

using Furion.DynamicApiController;
using Furion.FriendlyException;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
[IfException(typeof(ExceptionType), ErrorMessage = "特定异常类型全局拦截")]
[IfException(ErrorMessage = "全局异常拦截")]
[IfException(ErrorCodes.z1000, ErrorMessage = "我覆盖了默认的:{0} 不能小于 {1}")]
[IfException(ErrorCodes.x1001, "格式化参数1", "格式化参数2", ErrorMessage = "我覆盖了默认的:{0} 不能小于 {1}")]
[IfException(ErrorCodes.x1000, "格式化参数1", "格式化参数2")]
[IfException(ErrorCodes.SERVER_ERROR, "格式化参数1", "格式化参数2")]
public int Get(int id)
{
if (id < 3)
{
throw Oops.Oh(ErrorCodes.z1000, id, 3);
}

return id;
}
}
}
格式化流程

如果消息内容中包含格式化占位符但未指定格式化参数,那么会查找异常所在方法是否贴有 [IfException] 特性且含有格式化参数,接着就会查找 Oops.Oh 中指定的 格式化参数

7.11 异常消息优先级

[ErrorCodeItemMetadata] -> appsettings.json -> [IfException](低 -> 高)

  • [IfException] 会覆盖 appsettings.json 定义的状态码消息。
  • appsettings.json 会覆盖 [ErrorCodeItemMetadata] 定义的消息。

7.12 多语言支持

参见 【全球化和本地化(多语言)】 章节

7.13 规范化结果异常处理

查看规范化结果文档

如需自定义规范化结果可查阅 【6.7 统一返回值模型

7.14 全局异常处理提供器

通常我们需要在异常捕获的时候写日志,这时候就需要使用到 IGlobalExceptionHandler 异常定义处理程序,如:

using Furion.DependencyInjection;
using Furion.FriendlyException;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Threading.Tasks;

namespace Furion.Application
{
public class LogExceptionHandler : IGlobalExceptionHandler, ISingleton
{
public Task OnExceptionAsync(ExceptionContext context)
{
// 写日志

return Task.CompletedTask;
}
}
}

7.15 FriendlyExceptionSettings 配置

  • HideErrorCode:隐藏错误码,bool 类型,默认 false
  • DefaultErrorCode:默认错误码,string 类型
  • DefaultErrorMessage:默认错误消息,string 类型
  • ThrowBah:是否将 Oops.Oh 默认抛出为业务异常,bool 类型,默认 false,设置 true 之后 Oops.Oh 默认进入 OnValidateFailed 处理,而不是 OnException
  • LogError:是否输出异常日志,bool 类型,默认 true

配置示例

{
"FriendlyExceptionSettings": {
"DefaultErrorMessage": "系统异常,请联系管理员"
}
}

7.16 BadPageResult 错误页

版本说明

以下内容仅限 Furion 3.6.1 + 版本使用。

Furion 在该版本之后内置了 BadPageResult 错误结果类型,该类型派生自 IActionResult,如需返回只需要在 Action 中返回即可。

using Furion.FriendlyException;

public IActionResult Add(Person person)
{
if(!ModelState.IsValid)
{
return new BadPageResult();
}
}
  • BadPageResult 更多配置
    • 构造函数 statusCode:状态码,int 类,默认 400
    • Title:页面标题,string 类型,默认 ModelState Invalid
    • Description:页面描述,string 类型,默认 User data verification failed. Please input it correctly.
    • Code:详细错误代码,string 类型,支持 代码,默认空字符串
    • CodeLang:详细错误代码语言,string 类型,默认 json
    • Base64Icon:页面图标,string 类型,带默认值,自定义必须是 base64 格式图标

7.17 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/get-start-net6/index.html b/handbook/build/docs/get-start-net6/index.html new file mode 100644 index 00000000000..3b20c726057 --- /dev/null +++ b/handbook/build/docs/get-start-net6/index.html @@ -0,0 +1,17 @@ + + + + + +2.1 ASP.NET 6 集成 | Furion + + + + + +
+

2.1 ASP.NET 6 集成

推荐使用脚手架

Furion 官方提供了非常灵活方便的脚手架,可以快速的创建多层架构项目。

推荐使用 《2.2 官方脚手架》代替本章节功能。

入门条件

.NET Core/ASP.NET Core 有一定基础了解,还未接触的可先看 【ASP.NET Core 基础】

2.1 创建 Web 项目

环境要求

使用 Furion 之前先确保安装了最新的 .NET 6 SDK 并安装 Visual Studio 2022 最新版。

2.1.1 创建 ASP.NET Core Web 应用程序

  • 打开 Visual Studio 2022 并创建 Web 项目
  • 配置项目名称
  • 选择 WebAPI 项目
特别注意

Furion 已经内置了 Swagger 规范化库,所以创建时无需勾选 Enable OpenAPI support 选项。否则提示版本不一致产生冲突。

2.2 添加 Furion 依赖包

2.3 Furion 基本配置

2.3.1 Program.cs 添加 Inject()

var builder = WebApplication.CreateBuilder(args).Inject();

builder.Services.AddControllers().AddInject();

var app = builder.Build();

app.UseHttpsRedirection();

app.UseAuthorization();

app.UseInject();

app.MapControllers();

app.Run();
小提醒

如果 app.UseInject() 不输入参数,则默认地址为 /api,如果输入 string.Empty 则为 / 目录。如果输入任意字符串,则为 /任意字符串 目录。

2.4 启动浏览器

启动浏览器查看效果。

小知识

默认情况下,通过 Visual Studio 2022 创建的项目会自动配置了启动页,如果使用 F5 运行,可能不会自动打开首页,这时候我们只需要配置 launchSettings.jsonlaunchUrl 即可:

2.5 WebApplication 说明 🎃

.NET6 版本新增了 WebApplication 对象,如果我们需要注册服务,只需要通过 builder.Services.AddXXX() 即可。如:

var builder = WebApplication.CreateBuilder(args).Inject();

builder.Services.AddControllers().AddInject();
builder.Services.AddRemoteRequest();
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/get-start-net7/index.html b/handbook/build/docs/get-start-net7/index.html new file mode 100644 index 00000000000..e6d0bf94607 --- /dev/null +++ b/handbook/build/docs/get-start-net7/index.html @@ -0,0 +1,17 @@ + + + + + +2.1 ASP.NET 7 集成 | Furion + + + + + +
+

2.1 ASP.NET 7 集成

推荐使用脚手架

Furion 官方提供了非常灵活方便的脚手架,可以快速的创建多层架构项目。

推荐使用 《2.2 官方脚手架》代替本章节功能。

入门条件

.NET Core/ASP.NET Core 有一定基础了解,还未接触的可先看 【ASP.NET Core 基础】

2.1 创建 Web 项目

环境要求

使用 Furion 之前先确保安装了最新的 .NET 7 SDK 并安装 Visual Studio 2022 Preview 最新版。

2.1.1 创建 ASP.NET Core Web 应用程序

  • 打开 Visual Studio 2022 Preview 并创建 Web 项目
  • 配置项目名称
  • 选择 WebAPI 项目
特别注意

Furion 已经内置了 Swagger 规范化库,所以创建时无需勾选 Enable OpenAPI support 选项。否则提示版本不一致产生冲突。

2.2 添加 Furion 依赖包

2.3 Furion 基本配置

2.3.1 Program.cs 添加 Inject()

var builder = WebApplication.CreateBuilder(args).Inject();

builder.Services.AddControllers().AddInject();

var app = builder.Build();

app.UseHttpsRedirection();

app.UseAuthorization();

app.UseInject();

app.MapControllers();

app.Run();
小提醒

如果 app.UseInject() 不输入参数,则默认地址为 /api,如果输入 string.Empty 则为 / 目录。如果输入任意字符串,则为 /任意字符串 目录。

2.4 启动浏览器

启动浏览器查看效果。

小知识

默认情况下,通过 Visual Studio 2022 Preview 创建的项目会自动配置了启动页,如果使用 F5 运行,可能不会自动打开首页,这时候我们只需要配置 launchSettings.jsonlaunchUrl 即可:

2.5 WebApplication 说明 🎃

.NET6 版本新增了 WebApplication 对象,如果我们需要注册服务,只需要通过 builder.Services.AddXXX() 即可。如:

var builder = WebApplication.CreateBuilder(args).Inject();

builder.Services.AddControllers().AddInject();
builder.Services.AddRemoteRequest();
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/get-start/index.html b/handbook/build/docs/get-start/index.html new file mode 100644 index 00000000000..52809015f0f --- /dev/null +++ b/handbook/build/docs/get-start/index.html @@ -0,0 +1,17 @@ + + + + + +2.1 ASP.NET 5 集成 | Furion + + + + + +
+

2.1 ASP.NET 5 集成

尽快升级

截至 2022 年 05 月 31 日,微软已经停止了 .NET5 的技术支持,所以请尽快升级到 .NET6 版本,详细升级可查阅 【.NET5 升级 .NET6

推荐使用脚手架

Furion 官方提供了非常灵活方便的脚手架,可以快速的创建多层架构项目。

推荐使用 《2.2 官方脚手架》代替本章节功能。

入门条件

.NET Core/ASP.NET Core 有一定基础了解,还未接触的可先看 【ASP.NET Core 基础】

2.1 创建 Web 项目

环境要求

使用 Furion 之前先确保安装了最新的 .NET 5 SDK 并升级 Visual Studio 2019 至最新版。

2.1.1 创建 ASP.NET Core Web 应用程序

  • 打开 Visual Studio 2019 并创建 Web 项目
  • 配置项目名称
  • 选择 WebAPI 项目
特别注意

Furion 已经内置了 Swagger 规范化库,所以创建时无需勾选 Enable OpenAPI support 选项。否则提示版本不一致产生冲突。

2.2 添加 Furion 依赖包

2.3 Furion 基本配置

2.3.1 Program.cs 添加 Inject()

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace FurionStart
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.Inject() // 添加这一行
.UseStartup<Startup>();
});
}
}

2.3.2 在 Startup.cs 中添加两个 Inject()

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace FurionStart
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers().AddInject(); // 添加 AddInject();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthorization();

// 添加这一行,如果是 MVC和API共存项目,无需添加 string.Empty
app.UseInject(string.Empty);

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
小提醒

如果 app.UseInject() 不输入参数,则默认地址为 /api,如果输入 string.Empty 则为 / 目录。如果输入任意字符串,则为 /任意字符串 目录。

2.4 启动浏览器

启动浏览器查看效果。

小知识

默认情况下,通过 Visual Studio 2019 创建的项目会自动配置了启动页,如果使用 F5 运行,可能不会自动打开首页,这时候我们只需要配置 launchSettings.jsonlaunchUrl 即可:

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/app/index.html b/handbook/build/docs/global/app/index.html new file mode 100644 index 00000000000..bed0732182a --- /dev/null +++ b/handbook/build/docs/global/app/index.html @@ -0,0 +1,17 @@ + + + + + +1. App 静态类 | Furion + + + + + +
+

1. App 静态类

1.1 获取全局配置

var settings = App.Settings;

1.2 获取配置对象

// 获取 IConfiguration 对象
var configuration = App.Configuration;
var value = configuration["xxx:xxx"];

// 获取指定节点值并转成 T 类型
var data = App.GetConfig<TConfig>("key:key2");

// 重载/刷新配置
App.Configuration.Reload();

1.3 获取环境对象

var webHostEnvironment = App.HostEnvironment;

1.4 获取项目所有程序集

var assemblies = App.Assemblies;

1.5 获取项目所有有效类型

var types = App.EffectiveTypes;

1.6 获取 HttpContext

var httpContext = App.HttpContext;

1.7 获取登录的 User 对象

var contextUser = App.User;

// 获取 `Jwt` 存储的信息
var userId = App.User?.FindFirstValue("键");

注意引入 System.Security.Claims 命名空间

1.8 获取服务提供器

var serviceProvider = App.ServiceProvider;

// 获取根服务,通常用来解析单例,可优化性能
var rootService = App.RootServices;

1.9 解析服务

var service = App.GetService<TService>([IServiceProvider]);
var service2 = App.GetService(typeof(TService), [IServiceProvider]);

var service3 = App.GetRequiredService<TService>([IServiceProvider]);
var service4 = App.GetRequiredService(typeof(TService), [IServiceProvider]);

1.10 获取选项配置

var options = App.GetOptions<TOptions>([IServiceProvider]);
var options2 = App.GetOptionsMonitor<TOptions>([IServiceProvider]);
var options3 = App.GetOptionsSnapshot<TOptions>([IServiceProvider]);

1.11 打印数据到 MiniProfiler

App.PrintToMiniProfiler("分类", "状态", "要打印的消息");

1.12 获取应用名称

var applicationName = App.HostEnvironment.ApplicationName;

1.13 获取启动项目根目录

var webRootPath = App.HostEnvironment.ContentRootPath;

1.14 获取网站根目录 wwwroot 目录

var wwwroot = App.WebHostEnvironment.WebRootPath;

注意:可能个别操作系统获取值为 null

1.15 获取启动项目所在程序集

var webAssembly = Assembly.GetEntryAssembly();

1.16 获取启动项目 bin 目录

var binPath = AppContext.BaseDirectory;

1.17 获取环境变量名

var environmentName = App.HostEnvironment.EnvironmentName;

1.18 判断系统环境

// 判断是否开发环境
var isDevelopment = App.HostEnvironment.IsDevelopment();

// 判断是否生产环境
var isProduction = App.HostEnvironment.IsProduction();

// 判断是否 Stage 环境
var isStaging = App.HostEnvironment.IsStaging();

// 判断是否是特定环境,比如自定义测试环境
var isTest = App.HostEnvironment.IsEnvironment("TestEnvironment");

注意,需引用 Microsoft.Extensions.Hosting 命名空间

1.19 获取服务器信息

// 获取系统架构
var osArchitecture = RuntimeInformation.OSArchitecture; // => X64

// 获取系统名称
var osDescription = RuntimeInformation.OSDescription; // => Windows 10 企业版

// 获取进程架构
var processArchitecture = RuntimeInformation.ProcessArchitecture; // => X64

// 是否是64位操作系统
var is64BitOperatingSystem = Environment.Is64BitOperatingSystem; // => True

1.20 获取框架底层所有未托管对象

var objs = App.UnmanagedObjects;

1.21 手动释放非托管对象

App.DisposeUnmanagedObjects();  // 通常在非 `Web` 环境中手动处理释放时机

1.22 判断是否是单文件环境

版本说明

以下内容仅限 Furion 3.6.8 + 版本使用。

bool isSingleFileEnviroment = App.SingleFileEnvironment;

1.23 解析命令行参数

版本说明

以下内容仅限 Furion 4.4.5 + 版本使用。

var cmdConfig = App.GetCommandLineConfiguration(args);
cmdConfig.TryGet("参数", out var value);
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/datavalidator/index.html b/handbook/build/docs/global/datavalidator/index.html new file mode 100644 index 00000000000..a914f4dfdeb --- /dev/null +++ b/handbook/build/docs/global/datavalidator/index.html @@ -0,0 +1,17 @@ + + + + + +3. DataValidator 静态类 | Furion + + + + + +
+

3. DataValidator 静态类

3.1 验证对象数据

var result = DataValidator.TryValidateObject(obj);

3.2 验证单个值

var result = DataValidator.TryValidateValue(value, typeof(RequiredAttribure), typeof(RangeAttribute));

3.3 正则表达式验证单个值

var result = DataValidator.TryValidateValue(value,"正则表达式");

3.4 验证类型验证单个值

var result = DataValidator.TryValidateValue(value, ValidationTypes.Number);

var result2 = DataValidator.TryValidateValue(value, ValidationPattern.AllOfThem, ValidationTypes.Number, ValidationTypes.Required);
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/db/index.html b/handbook/build/docs/global/db/index.html new file mode 100644 index 00000000000..4953a6b3dad --- /dev/null +++ b/handbook/build/docs/global/db/index.html @@ -0,0 +1,17 @@ + + + + + +2. Db 静态类 | Furion + + + + + +
+

2. Db 静态类

2.1 获取非泛型仓储

var repository = Db.GetRepository();

2.2 获取泛型仓储

var entityRepository = Db.GetRepository<TEntity>();

2.3 获取带定位器泛型仓储

var locatorRepository = Db.GetRepository<TEntity, TDbContextLocator>();

2.4 获取 Sql 仓储

var sqlRepository = Db.GetSqlRepository();

2.5 获取 Sql 定位器仓储

var sqlLocatorRepository = Db.GetSqlRepository<TDbContextLocator>();

2.6 获取 Sql 代理对象

var sqlProxy= Db.GetSqlProxy<TSqlDispatchProxy>();

2.7 获取默认数据库上下文

var dbContext = Db.GetDbContext();

2.8 获取定位器数据库上下文

var locatorDbContext = Db.GetDbContext<TDbContextLocator>();
var locatorDbContext2 = Db.GetDbContext(typeof(TDbContextLocator));

2.9 创建新的默认数据库上下文

var dbContext = Db.GetNewDbContext();

2.10 创建新的定位器数据库上下文

var locatorDbContext = Db.GetNewDbContext<TDbContextLocator>();
var locatorDbContext2 = Db.GetNewDbContext(typeof(TDbContextLocator));

2.11 根据定位器类型获取仓储

var repository = Db.GetRepository<TEntity>(dbContextLocatorType);

2.12 获取 主从库 仓储

var msRepository = Db.GetMSRepository();

2.13 获取 Sql 主库定位器仓储

var msLocatorRepository = Db.GetMSRepository<TMasterDbContextLocator>();

2.14 获取特定定位器仓储

var msLocatorRepository = Db.GetDbRepository<TDbContextLocator>();
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/fs/index.html b/handbook/build/docs/global/fs/index.html new file mode 100644 index 00000000000..9b462a7f76c --- /dev/null +++ b/handbook/build/docs/global/fs/index.html @@ -0,0 +1,17 @@ + + + + + +13. FS 静态类 | Furion + + + + + +
+

13. FS 静态类

13.1 获取物理文件提供器

var fileProvider = FS.GetPhysicalFileProvider(@"c:/test");

13.2 获取嵌入资源文件提供器

var fileProvider = FS.GetEmbeddedFileProvider(Assembly.GetEntryAssembly());

13.3 获取文件提供器

var fileProvider = FS.GetFileProvider(FileProviderTypes.Physical, @"c:/test");

13.4 特别注意

使用该功能需确保 services.AddVirtualFileServer() 已注册。框架提供两种方式控制该服务注册:

  • AppSettings 配置(推荐方式)
{
"AppSettings": {
"EnabledVirtualFileServer": true
}
}

以上配置默认开启,无需配置。

  • `手动注册
services.AddVirtualFileServer();

13.5 获取文件 ContentTypeMime

版本说明

以下内容仅限 Furion 3.3.1 + 版本使用。

var success = FS.TryGetContentType("image.png", out var contentType);  // image/png

13.6 解决不受支持的文件 MIME 类型

解决不受支持的文件 MIME 出现 404 问题。

app.UseStaticFiles(new StaticFileOptions {
ContentTypeProvider = FS.GetFileExtensionContentTypeProvider()
})
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/json/index.html b/handbook/build/docs/global/json/index.html new file mode 100644 index 00000000000..7cf559d75af --- /dev/null +++ b/handbook/build/docs/global/json/index.html @@ -0,0 +1,17 @@ + + + + + +10. JSON 静态类 | Furion + + + + + +
+

10. JSON 静态类

版本说明

以下内容仅限 Furion 1.16.0 + 版本使用。

10.1 获取序列化提供器

var serializer = JSON.GetJsonSerializer();

10.2 序列化

var str = JSON.Serialize(obj, [options]);

10.3 反序列化

var obj = JSON.Deserialize<T>(str, [options]);

10.4 获取全局配置

var options = JSON.GetSerializerOptions<TOption>();
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/jsonserializer/index.html b/handbook/build/docs/global/jsonserializer/index.html new file mode 100644 index 00000000000..3d0a01ba4db --- /dev/null +++ b/handbook/build/docs/global/jsonserializer/index.html @@ -0,0 +1,17 @@ + + + + + +7. JsonSerializerUtility 静态类 | Furion + + + + + +
+

7. JsonSerializerUtility 静态类

重要声明

以下内容在 Furion 1.16.0 + 版本中已移除。请使用 【23. JSON 序列化章节】

7.1 序列化

var str = JsonSerializerUtility.Serialize(obj, [options]);

7.2 反序列化

var obj = JsonSerializerUtility.Deserialize<T>(str, [options]);

7.3 获取默认序列化配置

var options = JsonSerializerUtility.GetDefaultJsonSerializerOptions();

7.4 设置序列化属性首字母大写

services.AddControllersWithViews()
.AddJsonSerializerPascalPropertyNaming();

7.5 设置时间输出统一格式化

services.AddControllersWithViews()
.AddDateTimeJsonConverter("yyyy-MM-dd HH:mm:ss");
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/jwt/index.html b/handbook/build/docs/global/jwt/index.html new file mode 100644 index 00000000000..a114ebc9c9a --- /dev/null +++ b/handbook/build/docs/global/jwt/index.html @@ -0,0 +1,17 @@ + + + + + +14. JWTEncryption 静态类 | Furion + + + + + +
+

14. JWTEncryption 静态类

14.1 生成 Token

// 读取配置信息生成 Token
var token = JWTEncryption.Encrypt(new Dictionary<string, object> { { "UserId", 1 } });

// 配置 Token 过期时间
var token = JWTEncryption.Encrypt(new Dictionary<string, object> { { "UserId", 1 } }, 20);

// 配置 Token 密钥
var token = JWTEncryption.Encrypt("monksoul@outlook.com", new Dictionary<string, object> { { "UserId", 1 } });

// 配置算法
var token = JWTEncryption.Encrypt("monksoul@outlook.com", new Dictionary<string, object> { { "UserId", 1 } }, SecurityAlgorithms.HmacSha256);

14.2 生成刷新 Token

var refreshToken = JWTEncryption.GenerateRefreshToken("token", 43200);

14.3 根据过期 Token 交换新 Token

var newToken = JWTEncryption.Exchange("过期 token", "与之匹配的刷新 token", [新的token过期时间], [容错值]);

14.4 授权处理程序自动刷新 Token

JWTEncryption.AutoRefreshToken(context, httpContext);

14.5 验证 Token 有效性

var (isVaild, tokenData, validationResult) = JWTEncryption.Validate("token");

14.6 验证请求中 Token 有效性

var isValid = JWTEncryption.ValidateJwtBearerToken(httpContext, out tokenInfo);

14.7 读取 Token 信息(不含验证)

var tokenInfo = JWTEncryption.ReadJwtToken("token");

// 3.8.2+ 之后支持更强大的读取
var securityToken = JWTEncryption.SecurityReadJwtToken("token");
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/l/index.html b/handbook/build/docs/global/l/index.html new file mode 100644 index 00000000000..1dc6cfac3c3 --- /dev/null +++ b/handbook/build/docs/global/l/index.html @@ -0,0 +1,17 @@ + + + + + +8. L 静态类 | Furion + + + + + + + + + + \ No newline at end of file diff --git a/handbook/build/docs/global/linqexpression/index.html b/handbook/build/docs/global/linqexpression/index.html new file mode 100644 index 00000000000..ea8bb92b6ec --- /dev/null +++ b/handbook/build/docs/global/linqexpression/index.html @@ -0,0 +1,17 @@ + + + + + +5. LinqExpression 静态类 | Furion + + + + + +
+

5. LinqExpression 静态类

5.1 创建一个表达式

var expression = LinqExpression.Create<T>(u => u.Id == 1);
var expression2 = LinqExpression.Create<T>((u,i) => u.Id == 1 && i > 0);

5.2 拼接两个表达式

// 创建一个初始化的表达式
var expression = LinqExpression.And();
var expression2 = LinqExpression.IndexAnd();
var expression3 = LinqExpression.Or();
var expression4 = LinqExpression.IndexOr();

// 拼接表达式
var expression5 = expression.And(expression2);
var expression6 = expression.AndIf(age > 18, expression2);
var expression7 = expression.Or(expression2);
var expression8 = expression.OrIf(age > 18, expression2);

// 获取表达式属性名
var properyName = expression.GetExpressionPropertyName(u => u.Name); // Name
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/messagecenter/index.html b/handbook/build/docs/global/messagecenter/index.html new file mode 100644 index 00000000000..047b0319e43 --- /dev/null +++ b/handbook/build/docs/global/messagecenter/index.html @@ -0,0 +1,17 @@ + + + + + +9. MessageCenter 静态类 | Furion + + + + + +
+

9. MessageCenter 静态类

9.1 动态订阅消息

MessageCenter.Subscribe("messageId", async (ctx) => {
Console.WriteLine("我是动态的");
await Task.CompletedTask;
});

9.2 发送消息

await MessageCenter.PublishAsync("messageId", new {});

// 诸多重载

9.3 取消订阅

MessageCenter.Unsubscribe("messageId");
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/oops/index.html b/handbook/build/docs/global/oops/index.html new file mode 100644 index 00000000000..ba9ba0e7809 --- /dev/null +++ b/handbook/build/docs/global/oops/index.html @@ -0,0 +1,17 @@ + + + + + +4. Oops 静态类 | Furion + + + + + +
+

4. Oops 静态类

4.1 抛出字符串异常

throw Oops.Oh("异常消息");
throw Oops.Oh("异常消息:{0}", "出错了");

4.2 指定类型的异常

throw Oops.Oh("异常消息", typeof(ArgumentNullException));
throw Oops.Oh("异常消息:{0}", typeof(ArgumentNullException), "出错了");

4.3 状态码异常

throw Oops.Oh(1000);
throw Oops.Oh(1000, "出错了");

4.4 状态码异常

throw Oops.Oh(1000, typeof(ArgumentNullException));
throw Oops.Oh(1000, typeof(ArgumentNullException), "出错了");

4.5 异常方法重试

调整说明

v2.17.0+ 版本下面方法请使用 Retry.Invoke()/Retry.InvokeAsync() 替代。

Oops.Retry(() => {
// Do.....
}, 3, 1000);

// 带返回值
var value = Oops.Retry<int>(() => {
// Do.....
}, 3, 1000);

// 只有特定异常才监听
Oops.Retry(() => {

}, 3, 1000, typeof(ArgumentNullException));

4.6 抛出业务异常

throw Oops.Bah("用户名或密码错误");
throw Oops.Bah(1000);
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/schedular/index.html b/handbook/build/docs/global/schedular/index.html new file mode 100644 index 00000000000..8a464411dc2 --- /dev/null +++ b/handbook/build/docs/global/schedular/index.html @@ -0,0 +1,17 @@ + + + + + +17. Schedular 静态类 | Furion + + + + + +
+

17. Schedular 静态类

版本说明

以下内容仅限 Furion 4.8.0 + 版本使用。

17.1 启动调度作业服务

该功能 建议 仅限不能通过 services.AddXXX 方式使用,比如控制台,Winfrom/WPF 等。

IDisposable dispose =  Schedular.Run(options =>
{
options.AddJob<MyJob>(Triggers.Secondly());
});

这种方式有一个隐藏的巨大隐藏 “骚操作”:可以在任何地方创建作业调度服务,多次调用可以创建多个作业调度器。

推荐使用 Serve.Run()Serve.RunGeneric() 方式替代

Furion 框架提供了 Serve.Run() 方式支持跨平台使用,还能支持注册更多服务,如:

Serve.Run(services =>
{
services.AddSchedule(options =>
{
options.Add<MyJob>(Triggers.Secondly());
});
})

如无需 Web 功能,可通过 Serve.RunGeneric 替代 Serve.Run

17.2 获取作业调度计划工厂

var schedulerFactory = Schedular.GetFactory();

17.3 获取作业

var scheduler = Schedular.GetJob("作业 Id");
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/scoped/index.html b/handbook/build/docs/global/scoped/index.html new file mode 100644 index 00000000000..8411507a50e --- /dev/null +++ b/handbook/build/docs/global/scoped/index.html @@ -0,0 +1,17 @@ + + + + + +11. Scoped 静态类 | Furion + + + + + +
+

11. Scoped 静态类

11.1 创建一个依赖注入作用域范围

// 同步
Scoped.Create((factory, scope) => {
var services = scope.ServiceProvider;
});

// 异步
await Scoped.CreateAsync(async (factory, scope) => {
var services = scope.ServiceProvider;
await _calcService.GetAsync();
// ...
})
数据库操作注意

如果作用域中对数据库有任何变更操作,需手动调用 SaveChanges 或带 Now 结尾的方法。也可以使用 Scoped.CreateUow(handler) 代替。

11.2 创建一个带工作单元的作用域

// 同步
Scoped.CreateUow((factory, scope) => {
var services = scope.ServiceProvider;
});

// 异步
await Scope.CreateUowAsync(async (factory, scope) => {
var services = scope.ServiceProvider;
await _calcService.GetAsync();
// ...
});

此方法将在执行完毕之后自动调用 SaveChanges()

11.3 创建一个依赖注入作用域范围(带返回值)

移除声明

Furion v2.18+ 版本移除带返回值的作用域(该方法属于多余操作)

var obj = Scoped.CreateRef<string>((factory, scope) => {
var services = scope.ServiceProvider;
return "返回值";
});

11.4 创建一个带工作单元的作用域(带返回值)

移除声明

Furion v2.18+ 版本移除带返回值的作用域(该方法属于多余操作)

var obj = Scoped.CreateUowRef<string>((factory, scope) => {
var services = scope.ServiceProvider;
return "返回值";
});
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/shttp/index.html b/handbook/build/docs/global/shttp/index.html new file mode 100644 index 00000000000..72f59820e07 --- /dev/null +++ b/handbook/build/docs/global/shttp/index.html @@ -0,0 +1,17 @@ + + + + + +6. Http 静态类 | Furion + + + + + + + + + + \ No newline at end of file diff --git a/handbook/build/docs/global/sparetime/index.html b/handbook/build/docs/global/sparetime/index.html new file mode 100644 index 00000000000..af9abb18879 --- /dev/null +++ b/handbook/build/docs/global/sparetime/index.html @@ -0,0 +1,17 @@ + + + + + +12. SpareTime 静态类 | Furion + + + + + +
+

12. SpareTime 静态类

SpareTime 静态类提供了一些方法方便初始化和管理任务

12.1 初始化任务

// 开启间隔任务
SpareTime.Do(interval, [options]);

// 开启 Cron 表达式任务
SpareTime.Do(expression, [options]);

// 只执行一次任务
SpareTime.DoOnce(interval, [options]);

// 实现自定义任务
SpareTime.Do(()=>{
return DateTime.Now.AddMinutes(10);
},[options]);

12.2 实现后台执行

// 实现后台执行
SpareTime.DoIt(()=>{});

12.3 开始一个任务

SpareTime.Start("任务标识");

12.4 暂停一个任务

SpareTime.Stop("任务标识");
// 还可以标记一个任务执行失败
SpareTime.Stop("任务标识", true);

12.5 取消一个任务

SpareTime.Cancel("任务名称");

12.6 销毁所有任务

SpareTime.Dispose();

12.7 获取所有任务

var workers = SpareTime.GetWorkers();

12.8 获取单个任务

var worker = SpareTime.GetWorker("workerName");

12.9 解析 Cron 表达式

var nextTime = SpareTime.GetCronNextOccurrence("* * * * *");

12.10 BackgroundService 间隔定时任务

// 间隔执行任务
await SpareTime.DoAsync(1000, () =>
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
}, stoppingToken);

12.11 BackgroundService Cron 定时任务

 // 执行 Cron 表达式任务
await SpareTime.DoAsync("*/5 * * * * *", () =>
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
}, stoppingToken, CronFormat.IncludeSeconds);
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/global/tp/index.html b/handbook/build/docs/global/tp/index.html new file mode 100644 index 00000000000..79ef0a436df --- /dev/null +++ b/handbook/build/docs/global/tp/index.html @@ -0,0 +1,17 @@ + + + + + +15. TP 静态类 | Furion + + + + + +
+

15. TP 静态类

版本说明

以下内容仅限 Furion 3.5.3 + 版本使用。

15.1 生成规范的日志模板

// 生成模板字符串
var template = TP.Wrapper("Furion 框架", "让 .NET 开发更简单,更通用,更流行。",
"##作者## 百小僧",
"##当前版本## v3.5.3",
"##文档地址## https://furion.icu",
"##Copyright## 百小僧, Baiqian Co.,Ltd.");

Console.WriteLine(template);

日志打印模板如下:

┏━━━━━━━━━━━  Furion 框架 ━━━━━━━━━━━
┣ 让 .NET 开发更简单,更通用,更流行。

┣ 作者: 百小僧
┣ 当前版本: v3.5.3
┣ 文档地址: https://furion.icu
┣ Copyright: 百小僧, Baiqian Co.,Ltd.
┗━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━

关于属性生成

如果列表项以 ##属性名## 开头,自动生成 属性名: 作为行首且自动等宽对齐。

Furion 3.9.1 之前版本使用 [属性名] 开头。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/globalusing/index.html b/handbook/build/docs/globalusing/index.html new file mode 100644 index 00000000000..d7e43b426a6 --- /dev/null +++ b/handbook/build/docs/globalusing/index.html @@ -0,0 +1,17 @@ + + + + + +2.6 GlobalUsing 使用 | Furion + + + + + +
+

2.6 GlobalUsing 使用

2.6.1 关于 GlobalUsing

.NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。

这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。

2.6.2 必要配置

启用 GlobalUsings 机制需要以下两个步骤:

  1. 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs
  2. 编辑项目的 .csproj 文件,添加 <ImplicitUsings>enable</ImplicitUsings>,注意是在 <PropertyGroup> 中添加,通常和 <TargetFramework> 同父同级

2.6.3 基本使用

配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下:

Furion 推荐的全局命名空间
global using Furion;
global using Furion.DatabaseAccessor;
global using Furion.DataEncryption;
global using Furion.DataValidation;
global using Furion.DependencyInjection;
global using Furion.DynamicApiController;
global using Furion.Extensions;
global using Furion.FriendlyException;
global using Furion.Logging;
global using Mapster;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.CodeAnalysis;
global using Microsoft.EntityFrameworkCore;
global using System.ComponentModel.DataAnnotations;

注意必须以 global 开头!

小知识

一般推荐把实体类的命名空间也放进去,因为仓储 IRepository<T> 使用的频率非常高。

另外推荐大家在 Visual Studio 中安装 CodeMaid 插件(注意 20192022 版本)哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒!

个别情况

可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如:

global using global::Furion;

接下来在代码中使用:

// 无需 using Furion 的命名空间了哦,清爽了不少

namespace Your.Application;

public class DefaultAppService : IDynamicApiController
{
private readonly IRepository<BoardCard> _boardCardRepository;
private readonly IRepository<BoardGroup> _boardGroupRepository;
private readonly IRepository<BoardCardAttachment> _boardCardAttachmentRepository;
private readonly IRepository<BoardCardUser> _boardCardUserRepository;
}

// ....

2.6.3.1 默认全局 using

实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下:

// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。

2.6.4 .NET5 项目开启支持

默认情况下,.NET5 采用 C# 9.0 编译,而 GlobalUsing 是从 C# 10.0 开始,这时候只需要编辑项目的 .csproj 并添加 <LangVersion>10.0</LangVersion> 即可:

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<LangVersion>10.0</LangVersion>
<!-- 其他配置 -->
</PropertyGroup>

如需使用最新版可配置为 <LangVersion>latest</LangVersion>

2.6.5 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/http/index.html b/handbook/build/docs/http/index.html new file mode 100644 index 00000000000..11e8d0cb170 --- /dev/null +++ b/handbook/build/docs/http/index.html @@ -0,0 +1,19 @@ + + + + + +19. 远程请求 | Furion + + + + + +
+

19. 远程请求

版本说明

以下内容仅限 Furion 1.16.0 + 版本使用。

19.1 关于远程请求

在互联网大数据的驱动下,平台或系统免不了需要和第三方进行数据交互,而第三方往往提供了 RESTful API 接口规范,这个时候就需要通过 Http 请求第三方接口进行数据传输交互。

也就是本章节所说的远程请求。

19.2 远程请求的作用

  • 跨系统、跨设备通信
  • 实现多个系统数据传输交互
  • 跨编程语言协同开发

19.3 基础使用

19.3.1 注册服务

使用之前需在 Startup.cs 注册 远程请求服务

public void ConfigureServices(IServiceCollection services)
{
services.AddRemoteRequest();
}

19.3.2 使用方式

Furion 提供两种方式访问发送远程请求。

定义代理请求的 接口 并继承 IHttpDispatchProxy 接口

public interface IHttp : IHttpDispatchProxy
{
[Get("https://www.furion.icu/get")]
Task<Result> GetXXXAsync();

[Post("https://www.furion.icu/post")]
Task<Result> PostXXXAsync();

[Put("https://www.furion.icu/put")]
Task<Result> PutXXXAsync();

[Delete("https://www.furion.icu/delete")]
Task<Result> DeleteXXXAsync();

[Patch("https://www.furion.icu/patch")]
Task<Result> PatchXXXAsync();

[Head("https://www.furion.icu/head")]
Task<Result> HeadXXXAsync();
}

通过构造函数注入 接口

using Furion.DynamicApiController;
using Furion.RemoteRequest.Extensions;

namespace Furion.Application
{
public class RemoteRequestService : IDynamicApiController
{
private readonly IHttp _http;
public RemoteRequestService(IHttp http)
{
_http = http;
}

public async Task GetData()
{
var data = await _http.GetXXXAsync();
}
}
}

19.4 字符串方式使用示例

19.4.1 内置请求方式

// 发送 Get 请求
var response = await "https://www.furion.icu/get".GetAsync();

// 发送 Post 请求
var response = await "https://www.furion.icu/post".PostAsync();

// 发送 Put 请求
var response = await "https://www.furion.icu/put".PutAsync();

// 发送 Delete 请求
var response = await "https://www.furion.icu/delete".DeleteAsync();

// 发送 Patch 请求
var response = await "https://www.furion.icu/patch".PatchAsync();

// 发送 Head 请求
var response = await "https://www.furion.icu/head".HeadAsync();

// 手动指定发送特定请求
var response = await "https://www.furion.icu/post".SetHttpMethod(HttpMethod.Post)
.SendAsync();

19.4.2 设置请求地址

// 该方式在 Furion v3.0.0 已移除,多此一举了
await "".SetRequestUrl("https://www.furion.icu/");

19.4.3 设置请求方式

await "https://www.furion.icu/post".SetHttpMethod(HttpMethod.Get);

19.4.4 设置地址模板

// 字典方式
await "https://www.furion.icu/post/{id}?name={name}&id={p.Id}".SetTemplates(new Dictionary<string , object> {
{ "id", 1 },
{ "name", "Furion" },
{ "p.Id", new Person { Id = 1 } }
});

// 对象/匿名对象方式
await "https://www.furion.icu/post/{id}?name={name}".SetTemplates(new {
id = 1,
name = "Furion"
});

注:模板替换区分大小写。

19.4.5 设置请求报文头

// 字典方式
await "https://www.furion.icu/post".SetHeaders(new Dictionary<string , object> {
{ "Authorization", "Bearer 你的token"},
{ "X-Authorization", "Bearer 你的刷新token"}
});

// 对象/匿名对象方式
await "https://www.furion.icu/post".SetHeaders(new {
Authorization = "Bearer 你的token"
});

19.4.6 设置 URL 地址参数

// 字典方式
await "https://www.furion.icu/get".SetQueries(new Dictionary<string , object> {
{ "id", 1 },
{ "name", "Furion"}
});

// 对象/匿名对象方式
await "https://www.furion.icu/get".SetQueries(new {
id = 1,
name = "Furion"
});

// Furion 4.7.3+ 新增忽略 null 值重载
await "https://www.furion.icu/get".SetQueries(new {
id = 1,
name = "Furion",
nullValue = default(object)
}, true); // 设置 true 则忽略 null 值

最终输出格式为:https://www.furion.icu/get?id=1&name=Furion

19.4.7 设置请求客户端

  • 全局配置方式
services.AddRemoteRequest(options=>
{
// 配置 Github 基本信息
options.AddHttpClient("github", c =>
{
c.BaseAddress = new Uri("https://api.github.com/");
c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
});
});

await "get".SetClient("github");

最终生成请求地址为:https://api.github.com/get

  • 局部配置方式
版本说明

以下内容仅限 Furion 4.3.8 + 版本使用。

await "https://www.furion.icu".SetClient(() => new HttpClient());

19.4.8 设置 Body 参数

// 传入对象
await "https://www.furion.icu/api/user/add".SetBody(new User { Id = 1, Name = "Furion" });

// 配置 Content-Type
await "https://www.furion.icu/api/user/add".SetBody(new { Id = 1, Name = "Furion" }, "application/json");

// 设置 Encoding 编码
await "https://www.furion.icu/api/user/add".SetBody(new User { Id = 1, Name = "Furion" }, "application/json", Encoding.UTF8);

// 处理 application/x-www-form-urlencoded 请求
await "https://www.furion.icu/api/user/add".SetBody(new Dictionary<string , object> {
{ "Id", 1 },
{ "Name", "Furion"}
}, "application/x-www-form-urlencoded");

// 处理 application/xml、text/xml
await "https://www.furion.icu/api/user/add".SetBody("<SomeDto><SomeTag>somevalue</SomeTag></SomeDto>", "application/xml");
特别注意

如果请求 Content-Type 设置为 application/x-www-form-urlencoded 类型,那么底层自动将数据进行 UrlEncode 编码处理,无需外部处理。

19.4.9 设置 Content-Type

await "https://www.furion.icu/post".SetContentType("application/json");

19.4.10 设置内容编码

await "https://www.furion.icu/post".SetContentEncoding(Encoding.UTF8);

19.4.11 设置 JSON 序列化提供程序

Furion 默认情况下采用 System.Text.Json 进行 JSON 序列化处理,如需设置第三方 JSON 提供器,则可以通过以下配置:

// 泛型方式
await "https://www.furion.icu/api/user/add".SetJsonSerialization<NewtonsoftJsonSerializerProvider>();

// 非泛型方式
await "https://www.furion.icu/api/user/add".SetJsonSerialization(typeof(NewtonsoftJsonSerializerProvider));

// 添加更多配置
await "https://www.furion.icu/api/user/add".SetJsonSerialization<NewtonsoftJsonSerializerProvider>(new JsonSerializerSettings {

});

// 比如配置缺省的序列化选项
await "https://www.furion.icu".SetJsonSerialization(default, new JsonSerializerOptions
{
// 中文乱码
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
})
.GetAsAsync();
关于 JSON 序列化提供器

如需了解更多 JSON 序列化知识可查阅 23. JSON 序列化 章节

19.4.12 启用 Body 参数验证

await "https://www.furion.icu/api/user/add".SetValidationState();

// 设置不验证 null 值
await "https://www.furion.icu/api/user/add".SetValidationState(includeNull: true);

支持类中 [Required] 等完整模型验证特性。

19.4.13 请求拦截

await "https://www.furion.icu/".OnRequesting((client, req) => {
// req 为 HttpRequestMessage 对象
// 追加更多参数
req.AppendQueries(new Dictionary<string, object> {
{ "access_token", "xxxx"}
});
});

支持多次拦截

19.4.14 HttpClient 拦截

await "https://www.furion.icu/".OnClientCreating(client => {
// client 为 HttpClient 对象
client.Timeout = 30000; // 设置超时时间
});

支持多次拦截

19.4.15 请求之前拦截

await "https://www.furion.icu/".OnRequesting((client, req) => {
// req 为 HttpRequestMessage 对象
});

支持多次拦截

19.4.16 成功请求拦截

await "https://www.furion.icu/".OnResponsing((client, res) => {
// res 为 HttpResponseMessage 对象
});

支持多次拦截

19.4.17 请求异常拦截

await "https://www.furion.icu/".OnException((client, res, errors) => {
// res 为 HttpResponseMessage 对象
});

支持多次拦截

19.4.18 各种返回值处理

Furion 远程请求默认提供四种返回值类型:

  • HttpResponseMessage:请求响应消息类型
  • Stream:流类型
  • T:泛型 T 类型
  • String:字符串类型,也就是直接将网络请求结果内容字符串化
  • Byte[]:字节数组类型

如:

// HttpResponseMessage
var res = await "https://www.furion.icu/".GetAsync();

// Stream
var (stream, encoding) = await "https://www.furion.icu/".GetAsStreamAsync();

// T
var user = await "https://www.furion.icu/".GetAsAsync<User>();

// String
var str = await "https://www.baidu.com".GetAsStringAsync();

19.4.19 设置 Byte[]/Stream 类型/上传文件

Furion 4.4.0 以下版本

Furion 4.4.0+ 版本移除了 .SetBodyBytes 方式,原因是拓展性太差,新版本请使用 .SetFiles 方式

有时候我们需要上传文件,需要设置 Content-Typemultipart/form-data 类型,如:

// 支持单文件,bytes 可以通过 File.ReadAllBytes(文件路径) 获取
var res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")
.SetBodyBytes(("键", bytes, "文件名")).PostAsync();

// 支持多个文件
var res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")
.SetBodyBytes(("键", bytes, "文件名"),("键", bytes, "文件名")).PostAsync();

// 支持单文件,Furion 4.5.8 版本支持 Stream 方式更新
var res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")
.SetBodyBytes(("键", fileStream, "文件名")).PostAsync();

// 支持多个文件,Furion 4.5.8 版本支持 Stream 方式更新
var res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")
.SetBodyBytes(("键", fileStream, "文件名"),("键", fileStream, "文件名")).PostAsync();
关于微信上传接口

如果遇到微信上传出现问题,则可设置 Content-Type 为:application/octet-stream,如:

var result = await $"https://api.weixin.qq.com/wxa/img_sec_check?access_token={token}"
.SetBodyBytes(("media", bytes, Path.GetFileName(imgPath)))
.SetContentType("application/octet-stream")
.PostAsStringAsync();
Furion 4.4.0+ 版本

如果使用 Furion 4.4.0+ 版本,请使用以下的 .SetFiles 替代 .SetBodyBytes 操作。

// bytes 可以通过 File.ReadAllBytes(文件路径) 获取
var res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")
.SetFiles(HttpFile.Create("file", bytes, "image.png")).PostAsync();

// 支持多个文件
var res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")
.SetFiles(HttpFile.CreateMultiple("files", (bytes, "image1.png"), (bytes, "image2.png"))).PostAsync();

19.4.20 设置 IServiceProvider

有时候我们需要构建一个作用域的 IServiceProvider,这时只需要设置即可:

var res = await "https://www.furion.icu/upload".SetRequestScoped(services);

19.4.21 支持模板配置

模板格式为:#(配置路径)

var res = await "#(Furion:Address)/upload".GetAsync();
{
"Furion": {
"Address": "https://www.furion.icu"
}
}

19.4.22 重试策略

Furion v2.18+ 版本支持配置重试策略,如:

var res = await "https://www.furion.icu".SetRetryPolicy(3, 1000).GetAsync();

以上代码表示请求失败重试 3 次,每次延迟 1000ms

19.4.23 支持 GZip 压缩

Furion v3.2.0+ 版本支持GZip 压缩,如:

var res = await "https://www.furion.icu".WithGZip().GetAsync();

19.4.24 设置 Url 转码

过去版本会对所有的 Url 进行 Uri.EscapeDataString 转码,在 Furion v3.8.0+ 版本支持 Url 转码设置,如:

var res = await "https://www.furion.icu".WithEncodeUrl(false).GetAsync();

19.5 IHttpDispatchProxy 代理方式

19.5.1 支持多种代理方式

public interface IHttp : IHttpDispatchProxy
{
// 发送 Get 请求
[Get("https://www.furion.icu/get")]
Task<HttpResponseMessage> GetXXXAsync();

// 发送 Post 请求
[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync();

// 发送 Put 请求
[Put("https://www.furion.icu/put")]
Task<HttpResponseMessage> PutXXXAsync();

// 发送 Delete 请求
[Delete("https://www.furion.icu/delete")]
Task<HttpResponseMessage> DeleteXXXAsync();

// 发送 Patch 请求
[Patch("https://www.furion.icu/patch")]
Task<HttpResponseMessage> PatchXXXAsync();

// 发送 Head 请求
[Head("https://www.furion.icu/head")]
Task<HttpResponseMessage> HeadXXXAsync();
}

19.5.2 设置地址模板

public interface IHttp : IHttpDispatchProxy
{
[Get("https://www.furion.icu/get/{id}?name={name}&number={p.PersonDetail.PhonNumber}")]
Task<HttpResponseMessage> GetXXXAsync(int id, string name, Person p);
}

注:模板替换区分大小写。

19.5.3 设置请求报文头

Furion 框架远程请求代理模式提供三种方式设置请求报文头:

  • 支持在接口中声明
  • 支持在方法中声明
  • 支持在参数中声明
[Headers("key","value")]
[Headers("key1","value2")] // 设置多个
public interface IHttp : IHttpDispatchProxy
{
[Get("https://www.furion.icu/get/{id}?name={name}"), Headers("key2","value2")]
Task<HttpResponseMessage> GetXXXAsync(int id, string name);

[Get("https://www.furion.icu")]
Task<HttpResponseMessage> GetXXX2Async(int id, [Headers]string token = default);

[Get("https://www.furion.icu")]
Task<HttpResponseMessage> GetXXX2Async(int id, string name, [Headers("别名")]string token = default);
}

19.5.4 设置 URL 地址参数

public interface IHttp : IHttpDispatchProxy
{
[Get("https://www.furion.icu/get/{id}?name={name}")]
Task<HttpResponseMessage> GetXXXAsync(int id, string name);

[Get("https://www.furion.icu/get/{p.Id}?name={p.Name}")]
Task<HttpResponseMessage> GetXXXAsync(Person p);

[Get("https://www.furion.icu/get")]
Task<HttpResponseMessage> GetXXXAsync([QueryString]int id, [QueryString]string name);

[Get("https://www.furion.icu/get")]
Task<HttpResponseMessage> GetXXXAsync([QueryString]int id, [QueryString("别名")]string name);

// Furion 4.7.3 新增 IgnoreNullValueQueries 配置忽略空值
[Get("https://www.furion.icu/get", IgnoreNullValueQueries = true)]
Task<HttpResponseMessage> GetXXXAsync([QueryString]int id, [QueryString]string name, [QueryString]string nullValue);
}

最终输出格式为:https://www.furion.icu/get?id=1&name=Furion

19.5.5 设置请求客户端

  • 全局配置方式
services.AddRemoteRequest(options=>
{
// 配置 Github 基本信息
options.AddHttpClient("github", c =>
{
c.BaseAddress = new Uri("https://api.github.com/");
c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
});
});

public interface IHttp : IHttpDispatchProxy
{
[Get("get"), Client("github")]
Task<HttpResponseMessage> GetXXXAsync();
}

最终生成请求地址为:https://api.github.com/get

  • 局部配置方式
版本说明

以下内容仅限 Furion 4.3.8 + 版本使用。

public interface IHttp : IHttpDispatchProxy
{
// 局部方式
[Get("get")]
Task<HttpResponseMessage> GetXXXAsync([Interceptor(InterceptorTypes.Initiate)]Func<HttpClient> clientProvider);

// 全局静态方式
[Interceptor(InterceptorTypes.Initiate)]
static HttpClient CreateHttpClient()
{
return new HttpClient(...);
}
}

19.5.6 设置 Body 参数

public interface IHttp : IHttpDispatchProxy
{
[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync([Body]User user);

[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync([Body("application/x-www-form-urlencoded")]User user);

[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync([Body("application/x-www-form-urlencoded", "UTF-8")]User user);
}

19.5.7 设置 JSON 序列化提供程序

Furion 默认情况下采用 System.Text.Json 进行 JSON 序列化处理,如需设置第三方 JSON 提供器,则可以通过以下配置:

public interface IHttp : IHttpDispatchProxy
{
[Post("https://www.furion.icu/post"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))]
Task<HttpResponseMessage> PostXXXAsync([Body]User user);

[Post("https://www.furion.icu/post"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))]
Task<HttpResponseMessage> PostXXXAsync([Body]User user, [JsonSerializerOptions]object jsonSerializerOptions = default);

/// <summary>
/// 缺省序列化配置
/// </summary>
/// <returns></returns>
[JsonSerializerOptions]
static object GetJsonSerializerOptions()
{
// 这里也可以通过 JSON.GetSerializerOptions<JsonSerializerOptions>() 获取 Startup.cs 中的配置
return new JsonSerializerOptions
{

};
}
}

[JsonSerializerOptions] 可以标记参数是一个 JSON 序列化配置参数。

关于 JSON 序列化提供器

如需了解更多 JSON 序列化知识可查阅 23. JSON 序列化 章节

19.5.8 参数验证

public interface IHttp : IHttpDispatchProxy
{
[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync([Range(1,10)]int id, [Required, MaxLength(10)]string name);

[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync([Required]User user); // 对象类型支持属性配置特性验证
}

19.5.9 请求拦截

Furion 远程请求代理方式提供两种拦截方式:

  • 接口静态方法拦截
  • 参数标记拦截
public interface IHttp : IHttpDispatchProxy
{
// 通过参数拦截
[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync([Interceptor(InterceptorTypes.Request)] Action<HttpClient, HttpRequestMessage> action = default);

// 全局拦截,类中每一个方法都会触发
[Interceptor(InterceptorTypes.Request)]
static void OnRequesting1(HttpClient client, HttpRequestMessage req)
{
// 追加更多参数
req.AppendQueries(new Dictionary<string, object> {
{ "access_token", "xxxx"}
});
}

// 全局拦截,类中每一个方法都会触发
[Interceptor(InterceptorTypes.Request)]
static void OnRequesting2(HttpClient client, HttpRequestMessage req)
{

}
}

支持多次拦截

19.5.10 HttpClient 拦截

Furion 远程请求代理方式提供两种拦截方式:

  • 接口静态方法拦截
  • 参数标记拦截
public interface IHttp : IHttpDispatchProxy
{
// 通过参数拦截
[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync([Interceptor(InterceptorTypes.Client)] Action<HttpClient> action = default);

// 全局拦截,类中每一个方法都会触发
[Interceptor(InterceptorTypes.Client)]
static void onClientCreating1(HttpClient client)
{

}

// 全局拦截,类中每一个方法都会触发
[Interceptor(InterceptorTypes.Client)]
static void onClientCreating2(HttpClient client)
{

}
}

支持多次拦截

19.5.11 请求之前拦截

Furion 远程请求代理方式提供两种拦截方式:

  • 接口静态方法拦截
  • 参数标记拦截
public interface IHttp : IHttpDispatchProxy
{
// 通过参数拦截
[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync([Interceptor(InterceptorTypes.Request)] Action<HttpClient, HttpRequestMessage> action = default);

// 全局拦截,类中每一个方法都会触发
[Interceptor(InterceptorTypes.Request)]
static void OnRequest1(HttpClient client, HttpRequestMessage req)
{

}

// 全局拦截,类中每一个方法都会触发
[Interceptor(InterceptorTypes.Request)]
static void OnRequest2(HttpClient client, HttpRequestMessage req)
{

}
}

支持多次拦截

19.5.12 成功请求拦截

Furion 远程请求代理方式提供两种拦截方式:

  • 接口静态方法拦截
  • 参数标记拦截
public interface IHttp : IHttpDispatchProxy
{
// 通过参数拦截
[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync([Interceptor(InterceptorTypes.Response)] Action<HttpClient, HttpResponseMessage> action = default);

// 全局拦截,类中每一个方法都会触发
[Interceptor(InterceptorTypes.Response)]
static void OnResponsing1(HttpClient client, HttpResponseMessage res)
{

}

// 全局拦截,类中每一个方法都会触发
[Interceptor(InterceptorTypes.Response)]
static void OnResponsing2(HttpClient client, HttpResponseMessage res)
{

}
}

支持多次拦截

19.5.13 请求异常拦截

Furion 远程请求代理方式提供两种拦截方式:

  • 接口静态方法拦截
  • 参数标记拦截
public interface IHttp : IHttpDispatchProxy
{
// 通过参数拦截
[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync([Interceptor(InterceptorTypes.Exception)] Action<HttpClient, HttpResponseMessage, string> action = default);

// 全局拦截,类中每一个方法都会触发
[Interceptor(InterceptorTypes.Exception)]
static void OnException1(HttpClient client, HttpResponseMessage res, string errors)
{

}

// 全局拦截,类中每一个方法都会触发
[Interceptor(InterceptorTypes.Exception)]
static void OnException2(HttpClient client, HttpResponseMessage res, string errors)
{

}
}

支持多次拦截

19.5.14 各种返回值处理

Furion 远程请求默认提供四种返回值类型:

  • HttpResponseMessage:请求响应消息类型
  • Stream:流类型
  • T:泛型 T 类型
  • String:字符串类型,也就是直接将网络请求结果内容字符串化

如:

public interface IHttp : IHttpDispatchProxy
{
[Post("https://www.furion.icu/post")]
Task<HttpResponseMessage> PostXXXAsync();

[Post("https://www.furion.icu/post")]
Task<Stream> PostXXXAsync();

[Post("https://www.furion.icu/post")]
Task<User> PostXXXAsync();

[Post("https://www.furion.icu/post")]
Task<string> PostXXXAsync();
}

19.5.15 设置 Byte[]/Stream 类型/上传文件

Furion 4.4.0 以下版本

Furion 4.4.0+ 版本移除了 [BodyBytes] 方式,原因是拓展性太差,新版本请使用 HttpFile 方式

有时候我们需要上传文件,需要设置 Content-Typemultipart/form-data 类型,如:

public interface IHttp : IHttpDispatchProxy
{
[Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")] // bytes 可以通过 File.ReadAllBytes(文件路径) 获取
Task<HttpResponseMessage> PostXXXAsync([BodyBytes("键","文件名")]Byte[] bytes);

// 支持多个文件
[Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")] // bytes 可以通过 File.ReadAllBytes(文件路径) 获取
Task<HttpResponseMessage> PostXXXAsync([BodyBytes("键","文件名")]Byte[] bytes,[BodyBytes("键","文件名")]Byte[] bytes2);
}
Furion 4.4.0+ 版本

如果使用 Furion 4.4.0+ 版本,请使用以下的 HttpFile 替代 [BodyBytes] 操作。请求有额外参数时 HttpFile 必须设置 fileName 值。

public interface IHttp : IHttpDispatchProxy
{
[Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]
Task<HttpResponseMessage> PostXXXAsync(HttpFile file);


[Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]
Task<HttpResponseMessage> PostXXXAsync(HttpFile file, [Body("multipart/form-data")]User user);

// 支持多个文件
[Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]
Task<HttpResponseMessage> PostXXXAsync(HttpFile[] files);

// 支持多个文件
[Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]
Task<HttpResponseMessage> PostXXXAsync(IList<HttpFile> files);
}

19.5.16 支持模板配置

模板格式为:#(配置路径)

public interface IHttp : IHttpDispatchProxy
{
[Post("#(Furion:Address)/upload")]
Task<HttpResponseMessage> PostXXXAsync([Body]User user);
}
{
"Furion": {
"Address": "https://www.furion.icu"
}
}

方法的优先级高于接口定义的优先级。

19.5.17 重试策略

Furion v2.18+ 版本支持配置重试策略,如:

[RetryPolicy(3, 1000)] // 支持全局
public interface IHttp : IHttpDispatchProxy
{
[Post("https://www.furion.icu"), RetryPolicy(3, 1000)] // 支持局部
Task<HttpResponseMessage> PostXXXAsync([Body]User user);
}

以上代码表示请求失败重试 3 次,每次延迟 1000ms

19.5.18 支持 GZip

Furion v3.2.0+ 版本支持 GZip,如:

public interface IHttp : IHttpDispatchProxy
{
[Post("https://www.furion.icu", WithGZip = true)]
Task<HttpResponseMessage> PostXXXAsync([Body]User user);
}

19.5.19 设置 Url 转码

过去版本会对所有的 Url 进行 Uri.EscapeDataString 转码,在 Furion v3.8.0+ 版本支持 Url 转码设置,如:

public interface IHttp : IHttpDispatchProxy
{
[Post("https://www.furion.icu", WithEncodeUrl = false)]
Task<HttpResponseMessage> PostXXXAsync([Body]User user);
}

19.6 请求客户端配置

Furion 框架也提供了多个请求客户端配置,可以为多个客户端请求配置默认请求信息,目前支持四种模式进行配置。

19.6.1 Startup.cs 统一配置

services.AddRemoteRequest(options=>
{
// 配置默认 HttpClient
options.AddHttpClient(string.Empty, c => {
// 其他配置
});

// 配置特定客户端
options.AddHttpClient("github", c =>
{
c.BaseAddress = new Uri("https://api.github.com/");
c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
});
})

配置了命名客户端后,每次请求都会自动加上这些配置。

  • 代理请求 使用
[Get("api/getdata"), Client("github")]
Task<User> GetData();

[Put("api/getdata"), Client("facebook")]
Task<User> GetData();
  • 字符串拓展 使用
// 设置请求拦截
var response = await "http://47.100.247.61/api/sysdata/categories".SetClient("github").PostAsync();
  • IHttpClientFactory 中使用
public class ValuesController : Controller
{
private readonly IHttpClientFactory _httpClientFactory;

public ValuesController(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}

[HttpGet]
public async Task<ActionResult> Get()
{
var client = _httpClientFactory.CreateClient("github");
string result = await client.GetStringAsync("/");
return Ok(result);
}
}

19.6.2 配置客户端 Timeout

默认情况下,HttpClient 请求超时时间为 100秒,可根据实际情况进行设置:

// 配置默认 HttpClient
options.AddHttpClient(string.Empty, c =>
{
c.Timeout = TimeSpan.FromMinutes(2);
});

// 配置特定客户端
options.AddHttpClient("github", c =>
{
c.Timeout = TimeSpan.FromMinutes(2);
});

19.6.3 配置客户端生存期

每次对 IHttpClientFactory 调用 CreateClient 都会返回一个新 HttpClient 实例。 每个命名客户端都创建一个 HttpMessageHandler。 工厂管理 HttpMessageHandler 实例的生存期。

IHttpClientFactory 将工厂创建的 HttpMessageHandler 实例汇集到池中,以减少资源消耗。 新建 HttpClient 实例时,可能会重用池中的 HttpMessageHandler 实例(如果生存期尚未到期的话)。

处理程序的默认生存期为两分钟。 可在每个命名客户端上重写默认值:

// 配置默认 HttpClient
options.AddHttpClient(string.Empty, c => { ... })
.SetHandlerLifetime(TimeSpan.FromMinutes(5));

// 配置特定客户端
options.AddHttpClient("github", c => { ... })
.SetHandlerLifetime(TimeSpan.FromMinutes(5));

19.6.4 自定义 Client 类方式

我们可以按照一定的规则编写特定服务的请求客户端,如:

public class GitHubClient
{
public HttpClient Client { get; private set; }

public GitHubClient(HttpClient httpClient)
{
httpClient.BaseAddress = new Uri("https://api.github.com/");
httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
httpClient.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
Client = httpClient;
}
}

然后在 Startup.cs 中注册:

services.AddHttpClient<GitHubClient>();

使用如下:

public class ValuesController : Controller
{
private readonly GitHubClient _gitHubClient;;

public ValuesController(GitHubClient gitHubClient)
{
_gitHubClient = gitHubClient;
}

[HttpGet]
public async Task<ActionResult> Get()
{
string result = await _gitHubClient.Client.GetStringAsync("/");
return Ok(result);
}
}

19.6.5 自定义 Client 类 + 接口方式

我们也可以定义接口,通过接口的提供具体的服务 API 操作,无需手动配置 Url,如上面的 GetStringAsync("/")

public interface IGitHubClient
{
Task<string> GetData();
}

public class GitHubClient : IGitHubClient
{
private readonly HttpClient _client;

public GitHubClient(HttpClient httpClient)
{
httpClient.BaseAddress = new Uri("https://api.github.com/");
httpClient.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
httpClient.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
_client = httpClient;
}

public async Task<string> GetData()
{
return await _client.GetStringAsync("/");
}
}

然后在 Startup.cs 中注册:

services.AddHttpClient<IGitHubClient, GitHubClient>();

使用:

public class ValuesController : Controller
{
private readonly IGitHubClient _gitHubClient;;

public ValuesController(IGitHubClient gitHubClient)
{
_gitHubClient = gitHubClient;
}

[HttpGet]
public async Task<ActionResult> Get()
{
string result = await _gitHubClient.GetData();
return Ok(result);
}
}

19.7 SSL/https 证书配置

有时候我们请求远程接口时会遇到 The SSL connection could not be established, see inner exception. 这样的错误,原因是证书配置不正确问题,下面有几种解决方法。

19.7.1 使用默认 SSL 证书

在一些情况下,可直接使用默认证书即可解决问题,如:

services.AddRemoteRequest(options=>
{
// 默认 HttpClient 在 Furion 框架内部已经配置了该操作
options.AddHttpClient(string.Empty)
.ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler
{
AllowAutoRedirect = true,
UseDefaultCredentials = true
});

// 配置特定客户端
options.AddHttpClient("github", c => { /*其他配置*/ })
.ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler
{
AllowAutoRedirect = true,
UseDefaultCredentials = true
});
});

19.7.2 忽略特定客户端 SSL 证书检查

services.AddRemoteRequest(options=>
{
// 默认 HttpClient 在 Furion 框架内部已经配置了该操作
options.AddHttpClient(string.Empty)
.ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (_, _, _, _) => true,
});

// 配置特定客户端
options.AddHttpClient("github", c => { /*其他配置*/ })
.ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (_, _, _, _) => true,
});
});
关于 HttpClientHandlerSocketsHttpHandler

.NET6 之后默认使用 SocketsHttpHandler 作为默认底层网络通信,但比 HttpClientHandler 提供了更多平台无差异的功能,对 HttpClientHandler 的任何设置都会转发到 SocketsHttpHandler 中,如需使用 SocketsHttpHandler 配置可参考:

// 忽略 SSL 不安全检查,或 https 不安全或 https 证书有误
options.AddHttpClient(string.Empty)
.ConfigurePrimaryHttpMessageHandler(u => new SocketsHttpHandler
{
SslOptions = new SslClientAuthenticationOptions
{
RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true
}
});

19.7.3 手动指定 SSL 证书

services.AddRemoteRequest(options=>
{
// 配置特定客户端
options.AddHttpClient("github", c => { /*其他配置*/ })
.ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler
{
// 手动配置证书
ClientCertificateOptions = ClientCertificateOption.Manual,
ClientCertificates = {
new X509Certificate2("...","..."),
new X509Certificate2("...","..."),
new X509Certificate2("...","...")
}
});
});

19.7.4 忽略所有客户端证书检查

版本说明

以下内容仅限 Furion v3.6.6+ 版本使用。

services.AddRemoteRequest(options=>
{
// 需在所有客户端注册之前注册
options.ApproveAllCerts();
});

19.8 关于返回值非 200 时忽略 Http状态

Furion 提供了非常方便的请求并且序列化请求结果 PostAsAsync<T> +在 2.8.8 及以下版本,当返回结果的 Http 状态为非 200 时,会直接截断。考虑到请求接口的多样性,在 2.8.9 及以上版本增加忽略返回 Http 状态,直接序列化结果的方式。

//请求并且序列化请求结果
var result = await "https://api.facebook.com/"
//如果不加OnException,则会直接截断
.OnException((res,errors)=> {
//激活异步拦截 此处可以做记录日志操作 也可保持现状
})
.PostAsAsync<T>();

PostAsStringAsync() 也使用同样的 OnException 操作使得忽略返回 Http 状态,原样返回 Http 请求结果

特别说明

如果不加 OnException,则会直接截断。 +如果需要复杂的 Http Post 请求,建议直接使用 PostAsync,返回值为 HttpResponseMessage,可以更灵活的控制结果。

19.9 关于同步请求

Furion 框架内部默认不提供同步请求操作,建议总是使用异步的方式请求。如在不能使用异步的情况下,可自行转换为同步执行。如:

  • 字符串拓展方式:
var result = "https://api.facebook.com".GetAsync().GetAwaiter().GetResult();

// 如果不考虑 Task 异常捕获,可以直接 .Result
var result = "https://api.facebook.com".GetAsync().Result;
  • 代理方式
public interface IHttp : IHttpDispatchProxy
{
[Get("https://api.facebook.com")]
Task<HttpResponseMessage> GetAsync();
}

// 同步调用
var result = _http.GetAsync().GetAwaiter().GetResult();

// 如果不考虑 Task 异常捕获,可以直接 .Result
var result = _http.GetAsync().Result;

19.10 静态 Default 方式构建

这种方式比字符串拓展好,避免了直接在字符串上拓展。

await HttpRequestPart.Default().SetRequestUrl("https://www.baidu.com").GetAsStringAsync();

19.11 关闭 Http 请求日志

Furion 框架底层中,HttpClient 对象默认通过 IHttpClientFactory 创建的,只要发送请求就会自动打印日志,如:

info: 2022-10-26 11:38:16(+08:00) 星期三 L System.Logging.EventBusService[0] #1
EventBus Hosted Service is running.
info: 2022-10-26 11:38:17(+08:00) 星期三 L Microsoft.Hosting.Lifetime[14] #1
Now listening on: https://localhost:5001
info: 2022-10-26 11:38:17(+08:00) 星期三 L Microsoft.Hosting.Lifetime[14] #1
Now listening on: http://localhost:5000
info: 2022-10-26 11:38:17(+08:00) 星期三 L Microsoft.Hosting.Lifetime[0] #1
Application started. Press Ctrl+C to shut down.
info: 2022-10-26 11:38:17(+08:00) 星期三 L Microsoft.Hosting.Lifetime[0] #1
Hosting environment: Development
info: 2022-10-26 11:38:17(+08:00) 星期三 L Microsoft.Hosting.Lifetime[0] #1
Content root path: D:\Workplaces\OpenSources\Furion\samples\Furion.Web.Entry\
info: 2022-10-26 11:39:00(+08:00) 星期三 L System.Net.Http.HttpClient.Default.LogicalHandler[100] #8
Start processing HTTP request GET https://www.baidu.com/
info: 2022-10-26 11:39:00(+08:00) 星期三 L System.Net.Http.HttpClient.Default.ClientHandler[100] #8
Sending HTTP request GET https://www.baidu.com/
info: 2022-10-26 11:39:00(+08:00) 星期三 L System.Net.Http.HttpClient.Default.ClientHandler[101] #6
Received HTTP response headers after 288.0665ms - 200
info: 2022-10-26 11:39:00(+08:00) 星期三 L System.Net.Http.HttpClient.Default.LogicalHandler[101] #6
End processing HTTP request after 326.1497ms - 200
info: 2022-10-26 11:39:04(+08:00) 星期三 L System.Net.Http.HttpClient.Default.LogicalHandler[100] #3
Start processing HTTP request GET https://www.baidu.com/

如需关闭只需在 appsettings.jsonappsettings.Development.json 中添加 System.Net.Http.HttpClient 日志类别过滤即可,如:

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Microsoft.EntityFrameworkCore": "Information",
"System.Net.Http.HttpClient": "Warning"
}
}
}

19.12 获取 Cookies

版本说明

以下内容仅限 Furion 4.7.4 + 版本使用。

  • 字符串方式
var response = await "https://www.furion.icu/".GetAsync();
var cookies = response.GetCookies();
  • 代理方式
public interface IHttp : IHttpDispatchProxy
{
[Get("https://www.furion.icu/")]
Task<HttpResponseMessage> GetAsync();
}

var response = await _http.GetAsync();
var cookies = response.GetCookies();

19.13 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 HttpClient 知识可查阅 ASP.NET Core - HTTP 请求 章节

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/httpcontext/index.html b/handbook/build/docs/httpcontext/index.html new file mode 100644 index 00000000000..6c7b53ba9d8 --- /dev/null +++ b/handbook/build/docs/httpcontext/index.html @@ -0,0 +1,17 @@ + + + + + +5.2 HttpContext | Furion + + + + + +
+

5.2 HttpContext

5.2.1 关于 HttpContext

ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。

虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。

5.2.2 获取 HttpContext

ASP.NET CoreFurion 提供了多种访问 HttpContext 的方式。

5.2.2.1 在 ControllerBase 派生类中

ControllerBase 派生类中,我们可以直接通过 HttpContext 属性获取 HttpContext 对象。

public class HomeController : Controller
{
public IActionResult Index()
{
// 在这里HttpContext 是 Controller/ControllerBase 对象的属性
var httpContext = HttpContext;

return View();
}
}

5.2.2.2 注入 IHttpContextAccessor

Furion 框架中,默认已经注册了 IHttpContextAccessor 服务,所以我们可以通过构造函数注入该接口获取。

public class AppService
{
public AppService(IHttpContextAccessor httpContextAccessor)
{
var httpContext = httpContextAccessor.HttpContext;
}
}

5.2.2.3 通过 App.HttpContext

App 静态类也提供了 App.HttpContext 获取 HttpContext 对象。

var request = App.HttpContext.Request;
Web 中访问

Web 完整的生命周期内,App.HttpContext 都是有效的,但在非 Web 中返回 null,避免在多线程,事件总线,定时任务等中使用。

5.2.3 HttpContext 拓展方法

Furion 框架基于 HttpContext 提供了一些常用的拓展方法。

5.2.3.1 获取当前请求的特性 Attribute

下列代码通常用于授权 Handler 中。

var attribute = httpContext.GetMetadata<SomeAttribute>();
Middleware 中间件获取特性方式

Middleware 中间件中获取有所区别,主要通过 HttpContextFeatures 获取,如:

var endpointFeature = httpContext.Features.Get<IEndpointFeature>();
var attribute = endpointFeature?.Endpoint?.Metadata?.GetMetadata<SomeAttribute>();

5.2.3.2 设置 Swagger 自动授权

Swagger 默认不能记住授权信息,一旦刷新浏览器就自动清空,所以 Furion 提供了该拓展,即使刷新浏览器也能保持授权状态。

// 检查用户登录和生成 token 代码...
// .....

// 之后调用该拓展,这样就可以实现 Swagger 刷新也能记住登录了
httpContext.SigninToSwagger("你的token");

5.2.3.3 退出 Swagger 授权

通过后端代码强制性让 Swagger 授权实现,只针对下一次请求有效!

httpContext.SignoutToSwagger();

5.2.3.4 获取本地 IP 地址

// ipv4
var ipv4 = httpContext.GetLocalIpAddressToIPv4();

// ipv6
var ipv6 = httpContext.GetLocalIpAddressToIPv6();

5.2.3.5 获取客户端 IP 地址

// ipv4
var ipv4 = httpContext.GetRemoteIpAddressToIPv4();

// ipv6
var ipv6 = httpContext.GetRemoteIpAddressToIPv6();
Nginx 无法获取正确客户端 IP 问题

如果服务器端使用了 nginx 等反向代理工具,可添加以下代码配置:

Startup.cs
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.All;
});

// 注意在 Configure 最前面配置
app.UseForwardedHeaders();

5.2.3.6 设置响应头 Token

httpContext.SetTokensOfResponseHeaders("token", "刷新token");

5.2.4 读取 Body 内容(重复读)

版本说明

以下内容仅限 Furion 4.7.9 + 版本使用。

默认情况下,ASP.NET Core 不支持重复读取 Body 内容,Furion 框架提供了拓展方法,需要按照以下步骤操作:

  1. Startup.csConfigure 启用 Body 重复读功能
  • .NET5 版本:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.EnableBuffering();
app.UseRouting();
// ....
}
  • .NET6+ 版本:
var builder = WebApplication.CreateBuilder(args).Inject();
// ...
var app = builder.Build();
// ...
app.UseInject();

app.EnableBuffering();
app.MapControllers();

app.Run();

注意:app.EnableBuffering() 必须在 app.UseRouting()app.MapControllers() 之前注册。

  1. 使用 HttpContextHttpRequest 拓展 .ReadBodyContentAsync() 即可
// HttpContext 拓展
var body = await httpContext.ReadBodyContentAsync();

// HttpRequest 拓展
var body = await httpContext.Request.ReadBodyContentAsync();

5.2.5 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/idgenerator/index.html b/handbook/build/docs/idgenerator/index.html new file mode 100644 index 00000000000..a076f2a33bb --- /dev/null +++ b/handbook/build/docs/idgenerator/index.html @@ -0,0 +1,17 @@ + + + + + +27. 分布式 ID 生成 | Furion + + + + + +
+

27. 分布式 ID 生成

27.1 为什么需要分布式 ID

  • 全局唯一性: 不能出现重复的 ID 号, 既然是唯一标识, 这是最基本的要求。

  • 趋势递增: 在 MySQL InnoDB 引擎中使用的是聚集索引, 由于多数 RDBMS 使用 B-tree 的数据结构来存储索引数据, 在主键的选择上面我们应该尽量使用有序的主键保证写入性能。

  • 单调递增: 保证下一个 ID 一定大于上一个 ID, 例如事务版本号, IM 增量消息, 排序等特殊需求。

  • 信息安全: 如果 ID 是连续的, 恶意用户的扒取工作就非常容易做了, 直接按照顺序下载指定 URL 即可; 如果是订单号就更危险了, 竞对可以直接知道我们一天的单量。 所以在一些应用场景下, 会需要 ID 无规则, 不规则。

27.2 分布式 ID 有哪些

常见的分布式 ID 有 连续 GUID短 ID雪花算法 ID

27.3 如何使用

27.3.1 连续 GUID 方式

  • 静态 IDGen 方式
var guid = IDGen.NextID();

// 还可以配置更多参数
var guid2 = IDGen.NextID(new SequentialGuidSettings { LittleEndianBinary16Format = true })); // SequentialGuidSettings 参数取决于你的分布式ID的实现
特别提醒

如果在循环中使用 IDGen 静态类方式,性能最差,原因是底层不断解析服务。如果非循环中,性能等于下面两种用法。

  • IDistributedIDGenerator 注入方式 推荐
private readonly IDistributedIDGenerator _idGenerator;
public AppServices(IDistributedIDGenerator idGenerator)
{
_idGenerator = idGenerator;

var guidObject = _idGenerator.Create();
}
  • SequentialGuidIDGenerator 方式
var idGen = new SequentialGuidIDGenerator();
var guid = idGen.Create();

// 更多参数
var idGen2 = new SequentialGuidIDGenerator();
var guid2 = idGen2.Create(new SequentialGuidSettings { LittleEndianBinary16Format = true });

27.3.2 短 ID

短 ID 按道理不应该放在分布式 ID 生成这个章节,它的作用用途常用于并发不强的内部系统中,比如 任务IDIssue 编号 等等。

var shortid = ShortIDGen.NextID(); // 生成一个包含数字,字母,不包含特殊符号的 8 位短id

// 添加更多配置
var shortid = ShortIDGen.NextID(new GenerationOptions {
UseNumbers = false, // 不包含数字
UseSpecialCharacters = true, // 包含特殊符号
Length = 8// 设置长度,注意:不设置次长度是随机长度!!!!!!!
});

// 自定义生成短 ID 参与运算字符
string characters = "ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ①②③④⑤⑥⑦⑧⑨⑩⑪⑫"; //whatever you want;
ShortIDGen.SetCharacters(characters);

// 自定义随机数(for)步长
int seed = 1939048828;
ShortIDGen.SetSeed(seed);

// 重载所有自定义配置
ShortIDGen.Reset();

27.3.3 雪花算法 ID

Furion 在最新的 2.1 + 版本移除了雪花算法 ID 功能,原因是:

目前,雪花算法 ID 使用频率不高,而且实现 雪花算法 ID 的方式也是千差万别,所以框架移除该功能,采用拓展或自集成方式。

27.4 反馈与建议

与我们交流

给 Furion 提 Issue


+ + + + \ No newline at end of file diff --git a/handbook/build/docs/index.html b/handbook/build/docs/index.html new file mode 100644 index 00000000000..5f1cfe53164 --- /dev/null +++ b/handbook/build/docs/index.html @@ -0,0 +1,17 @@ + + + + + +1.1 介绍 | Furion + + + + + +
+

1.1 介绍

star fork GitHub stars GitHub forks GitHub license nuget

让 .NET 开发更简单,更通用,更流行。

💐 序言

无私奉献不是天方夜谭,有时候,我们也可以做到。

🍕 名字的由来

故事是这样子的:

自微软宣布 .NET 5 平台消息之后,就琢磨着开发一个基于 .NET 5 平台的开发框架,想做第一个吃 .NET 5 螃蟹尝鲜之人。

一开始想到了 Lazier 作为框架的名称,中文有 更懒 的意思。符合我的 “一切从简,只为了更懒” 的开发理念。

但是 更懒更烂 中文读音相近且没有特色,而且寓意也不是很好,对此换名问题苦恼了好些天。

刚好有一次在 QQ 群中无意间刷到了群友发的 “先知” 单词:Furion [fu:rɪən],就那一刻,就认定它了!

Furion 中文有 先知 的意思,恰好符合我创造框架的初衷。所以,Furion 就诞生了。

🍟 文档地址

🌭 开源地址

🥥 框架拓展包

包类型名称版本描述
nugetFurionnugetFurion 核心包
nugetFurion.PurenugetFurion 纯净版包(不含 EFCore)
nugetFurion.Extras.Authentication.JwtBearernugetFurion Jwt 拓展包
nugetFurion.Extras.DependencyModel.CodeAnalysisnugetFurion CodeAnalysis 拓展包
nugetFurion.Extras.ObjectMapper.MapsternugetFurion Mapster 拓展包
nugetFurion.Extras.DatabaseAccessor.SqlSugarnugetFurion SqlSugar 拓展包
nugetFurion.Extras.DatabaseAccessor.DappernugetFurion Dapper 拓展包
nugetFurion.Extras.DatabaseAccessor.MongoDBnugetFurion MongoDB 拓展包
nugetFurion.Extras.Logging.SerilognugetFurion Serilog 拓展包
nugetFurion.XunitnugetFurion Xunit 单元测试拓展包
nugetFurion.Pure.XunitnugetFurion 纯净版包 Xunit 单元测试拓展包(不含 EFCore)
nugetFurion.Tools.CommandLinenugetFurion Tools 命令行参数解析

🍄 框架脚手架

Furion + EFCore

模板类型名称版本描述
nugetFurion.Template.MvcnugetMvc 模板
nugetFurion.Template.ApinugetWebApi 模板
nugetFurion.Template.AppnugetMvc/WebApi 模板
nugetFurion.Template.RazornugetRazorPages 模板
nugetFurion.Template.RazorWithWebApinugetRazorPages/WebApi 模板
nugetFurion.Template.BlazornugetBlazor 模板
nugetFurion.Template.BlazorWithWebApinugetBlazor/WebApi 模板

Furion + SqlSugar

模板类型名称版本描述
nugetFurion.SqlSugar.Template.MvcnugetMvc 模板
nugetFurion.SqlSugar.Template.ApinugetWebApi 模板
nugetFurion.SqlSugar.Template.AppnugetMvc/WebApi 模板
nugetFurion.SqlSugar.Template.RazornugetRazorPages 模板
nugetFurion.SqlSugar.Template.RazorWithWebApinugetRazorPages/WebApi 模板
nugetFurion.SqlSugar.Template.BlazornugetBlazor 模板
nugetFurion.SqlSugar.Template.BlazorWithWebApinugetBlazor/WebApi 模板

如何使用脚手架

🍎 框架特点

  • 全新面貌:基于 .NET5/6/7+ 平台,没有历史包袱
  • 极少依赖:框架只依赖两个第三方包
  • 极易入门:只需要一个 Inject() 即可完成配置
  • 极速开发:内置丰富的企业应用开发功能
  • 极其灵活:轻松面对多变复杂的需求
  • 极易维护:采用独特的架构思想,只为长久维护设计
  • 完整文档:提供完善的开发文档
  • 跨全平台:支持所有主流操作系统及 .NET 全部项目类型

🥝 功能模块

🥐 框架依赖

Furion 为了追求极速入门,极致性能,尽可能的不使用或减少第三方依赖。目前 Furion 仅集成了以下两个依赖:

麻雀虽小五脏俱全。Furion 即使只集成了这两个依赖,但是主流的 依赖注入/控制反转AOP 面向切面编程,事件总线数据验证数据库操作 等等一个都不少。

🥗 环境要求

  • Visual Studio 2019 16.8 +
  • .NET 5 SDK +
  • .Net Standard 2.1 +

🥪 支持平台

  • 运行环境
    • Windows
    • Linux
    • MacOS/MacOS M1 CPU
    • Docker/K8S/K3S/Rancher
    • Xamarin/MAUI
  • 数据库
    • SqlServer
    • Sqlite
    • Azure Cosmos
    • MySql
    • MariaDB
    • PostgreSQL
    • InMemoryDatabase
    • Oracle
    • Firebird
    • 达梦数据库
    • MongoDB
  • 应用部署
    • Kestrel
    • Nginx
    • Jexus
    • IIS
    • Apache
    • PM2
    • Supervisor
    • 独立发布/单文件
    • 容器(Docker/K8S/K3S/Rancher/PodMan)

🍖 关于性能

Furion 目前采用 Visual Studio 2019 16.8 自带性能测试和 JMeter 进行测试,由于篇幅有限,只贴部分测试图,测试结果如下:

🍻 贡献代码

Furion 遵循 MIT 开源协议,欢迎大家提交 PRIssue

如果要为项目做出贡献,请查看 贡献指南。感谢每一位为 Furion 贡献代码的朋友。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/inject/index.html b/handbook/build/docs/inject/index.html new file mode 100644 index 00000000000..679138f2396 --- /dev/null +++ b/handbook/build/docs/inject/index.html @@ -0,0 +1,17 @@ + + + + + +2.4 神奇的 Inject | Furion + + + + + +
+

2.4 神奇的 Inject

2.4.1 Inject 设计

Inject [ɪnˈdʒekt] 意思是 注入,注射 的意思,在这里意为使用最小的侵入式对应用进行机能改造。

Inject() 方法是 Furion 框架提供的最小侵入式的方法,可以让任何 ASP.NET Core Web 后端项目瞬间支持所有 Furion 框架特性。

2.4.2 Inject 方法有哪些

  • Inject():在 Program.cs 中注册
  • AddInject():在 Startup.csConfigureServices 中注册
  • AddInjectBase():在 Startup.csConfigureServices 中注册
  • AddInjectWithUnifyResult()/ AddInjectWithUnifyResult<T>():在 Startup.csConfigureServices 中注册
  • AddInjectMini():支持 Minimal API
  • UseInject():在 Startup.csConfigure 中注册
  • UseInjectBase():在 Startup.csConfigure 中注册

2.4.3 在 Program.cs 中使用

2.4.3.1 Inject() 方法

Inject() 是在启动程序 Program.cs 中使用的,集成 Furion 框架唯一方法,如:

Furion.Web.Entry\Program.cs
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace Furion.Web.Entry
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.Inject()
.UseStartup<Startup>();
});
}
}
}

2.4.4 Startup.ConfigureServices 使用

2.4.4.1 AddInject() 方法

AddInject() 方法是在 Startup.csConfigureServices 中提供最基础功能的注册。

AddInject() 包含以下基础功能注册:

services.AddSpecificationDocuments([options])
.AddDynamicApiControllers()
.AddDataValidation()
.AddFriendlyException();

使用如下:

namespace Furion.Web.Entry
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddInject(); // 支持直接注册(和下面代码二选一,不能同时注册两次)

services.AddControllers()
.AddInject(); // 支持链式注册(和上面代码二选一,不能同时注册两次)
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 其他代码
}
}
}

2.4.4.2 AddInjectBase() 方法

AddInjectBase() 方法是在 Startup.csConfigureServices 中提供最基础功能的注册。

AddInjectBase() 包含以下基础功能注册:

services.AddDataValidation()
.AddFriendlyException();

使用同上 AddInject()

2.4.4.3 AddInjectMini() 方法

版本说明

以下内容仅限 Furion 3.7.6 + 版本使用。

支持 .NET6 最新的 Minimal API 模式:

builder.Services.AddInjectMini();

2.4.4.4 AddInjectWithUnifyResult() 方法

AddInjectWithUnifyResult() 方法实际上等同于:

services.AddInject([swaggerGen])
.AddUnifyResult();

使用同上 AddInject()

特别注意

所有 .AddInject****() 方法不能同时注册,只能取其一。

2.4.5 Startup.Configure 使用

2.4.5.1 UseInject() 方法

UseInject() 方法是在 Startup.csConfigure 中提供最基础功能的注册。

UseInject() 包含以下基础功能注册:

app.UseSpecificationDocuments();

使用如下:

namespace Furion.Web.Entry
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// 其他代码
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseInject(); // 包含最小 Swagger 注册
}
}
}

2.4.5.2 UseInjectBase() 方法

UseInjectBase() 方法是在 Startup.csConfigure 中提供最基础功能的注册。

UseInjectBase() 实际上是个空方法,为了规范化代码特意建立的。

使用同上 UseInject()

2.4.6 配置 Inject() 默认注册服务

所有 .Inject 方法都可以传入委托,通过委托可以进一步去配置默认行为。如:

.AddInject(options =>
{
options.ConfigureDataValidation(vail =>
{
vail.GlobalEnabled = false;
});

// ....
});

2.4.7 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/ipc/index.html b/handbook/build/docs/ipc/index.html new file mode 100644 index 00000000000..8eeaac87be7 --- /dev/null +++ b/handbook/build/docs/ipc/index.html @@ -0,0 +1,17 @@ + + + + + +33. IPC 进程通信 | Furion + + + + + +
+

33. IPC 进程通信

33.1 什么是 IPC

引用百度百科

IPC(Inter-Process Communication,进程间通信)。进程间通信是指两个进程的数据之间产生交互。

通俗点说,IPC 可以实现不同应用程序间通信(交互数据)。

33.2 实现 IPC 通信方式

  • 半双工 Unix 管道
  • FIFOs(命名管道)
  • 消息队列(常用模式)
  • 信号量
  • 共享内存(常用模式,Furion 框架默认实现方式)
  • 网络 Socket(常用模式)

33.3 IPC 通信模式

IPC 本身指的是 进程间 通信,但 Furion 框架将内置 进程间/内 两种进程通信模式。

  • 进程内通信Furion 采用 Channel 管道提供进程内通信
  • 进程外通信Furion 采用 MemoryMapperFile 共享内存方式实现进程外通信(后续版本完善)

33.4 进程内通信(线程间)

进程内通信俗称线程间通信,Furion 框架采用 C# 提供的 Channel(管道) + Lazy + Task.Factory 实现长时间高性能的线程间通信机制。Channel 管道也是目前 .NET/C# 实现 生产者-订阅者 模式最简易且最为强大的实现。

33.4.1 了解 Channel

Channel 是在 .NET Core 2.1+ 版本之后加入。Channel 底层实现是一个高效的、线程安全的队列,可以在线程之间传递数据。

Channel 的主要应用场景是 发布/订阅、观察者模式 中使用,如:事件总线 就是最好的实现方式。通过 Channel 实现 生产-消费 机制可以减少项目间的耦合,提高应用吞吐量。

Furion 框架提供了 ChannelContext<TMessage, THandler> 密封类,提供 UnBoundedChannelBoundedChannel 两种管道通信模式。

  • UnBoundedChannel:具有无限容量的 Channel, 生产者可以全速进行生产数据,但如果消费者的消费速度低于生产者,Channel 的资源使用会无限增加,会有服务器资源耗尽的可能。
  • BoundedChannel:具有有限容量的 ChannelFurion 框架默认为 1000,到达上限后,生产者进入等待写入直到有空闲,好处是可以控制生产的速度,控制系统资源的使用。(推荐)

33.4.2 常规使用

创建 ChannelHandler<TMessage> 管道处理程序

using Furion.IPCChannel;
using System;
using System.Threading.Tasks;

namespace Furion.Core
{
/// <summary>
/// 创建管道处理程序(处理 String 类型消息)
/// </summary>
public class MyChannelHandler : ChannelHandler<string>
{
/// <summary>
/// 接受到管道消息后处理程序
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
public override Task InvokeAsync(string message)
{
Console.WriteLine(message);

return Task.CompletedTask;
}
}
}
note

ChannelHandler<TMessage> 泛型类型决定了你要接受那种类型的消息,不同类型消息将会自动过滤筛选。

使用 ChannelContext<TMessage, THandler> 发送消息

public async Task SendAsync()
{
for (int i = 0; i < 100; i++)
{
// 使用有限容量生产数据
await ChannelContext<string, MyChannelHandler>.BoundedChannel.Writer.WriteAsync($"Loop {i} times.");
}
}

以上代码也可以通过 ChannelContext<string, MyChannelHandler>.BoundedChannel.Writer.TryWrite() 同步写入。

33.4.3 实现多订阅

默认情况下,Furion 初始化了一个长时间的 Task 任务进行数据检查及订阅,如需实现多订阅模式,可创建新的订阅任务即可:

var reader = ChannelContext<string, MyChannelHandler>.BoundedChannel.Reader;

// 创建长时间线程管道读取器
_ = Task.Factory.StartNew(async () =>
{
while (await reader.WaitToReadAsync())
{
if (!reader.TryRead(out var message)) continue;
// 默认重试 3 次(每次间隔 1s)
await Retry.Invoke(async () => await Activator.CreateInstance<MyChannelHandler>().InvokeAsync(message), 3, 1000, finalThrow: false);
}
}, TaskCreationOptions.LongRunning);

33.4.4 更多 Channel 知识

可查阅 Dotnet Core 下的 Channel, 你用了吗? 博客教程(😃 写的不错)

33.4.5 CallContext 方式

Furion v2.18+ 版本提供了 CallContext 静态类,内部使用 AsyncLocal<T> 实现,也可以实现线程间通信,如:

CallContext.SetLocalValue("name", "Furion");
CallContext.GetLocalValue("name");

CallContext<int>.SetLocalValue("count", 1);
CallContext<int>.GetLocalValue("count");

34.5 进程外通信(共享内存)

Furion 目前暂未提供的进程外通信功能,将在后续版本实现(主要是模块设计还未想好,技术已实现)。

主要是通过 MemoryMapperFile 实现共享内存达到进程外通信功能,了解更多 MemoryMapperFile

33.6 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/job-old/index.html b/handbook/build/docs/job-old/index.html new file mode 100644 index 00000000000..4ea52664a76 --- /dev/null +++ b/handbook/build/docs/job-old/index.html @@ -0,0 +1,17 @@ + + + + + +26. 定时任务/后台任务 | Furion + + + + + +
+

26. 定时任务/后台任务

4.8.0+ 版本说明

Furion 4.8.0+ 版本采用 Sundial 定时任务替换原有的 TaskScheduler😶查看新文档

旧版本将支持到 2022年12月31日,之后旧版本代码从框架中移除,请尽快使用新版本替代。

版本说明

以下内容仅限 Furion 2.0.0 + 版本使用。

IIS 部署说明

由于 IIS 有回收的机制,所以定时任务应该采用独立部署,不然经常出现不能触发的情况。查看【Worker Service 章节

26.1 关于定时任务

顾名思义,定时任务就是在特定的时间或符合某种时间规律执行的任务。通常定时任务有四种时间调度方式:

  • 缓隔时间 方式:延迟多少时间后调配任务,这种方式任务只会被调用一次。
  • 间隔时间 方式:每隔一段固定时间调配任务,无间断调用任务。
  • Cron 表达式 方法:通过 Cron 表达式计算下一次执行时间进行调配任务,可以配置特定时间范围内执行,也可以无间断执行。
  • 自定义下次执行时间:可以通过各种逻辑运算返回下一次执行时间

26.2 如何实现

Furion 框架提供了两种方式实现定时任务:

  • SpareTime 静态类:SpareTime 静态类提供 SpareTime.Do([options]) 方式调用。
  • ISpareTimeWorker 依赖方式:通过自定义类实现 ISpareTimeWorker 接口并编写一定规则的方法即可。需要在 Startup.cs 中注册 services.AddTaskScheduler()

26.3 缓隔方式使用

26.3.1 特定时间后执行

这里演示 3s 后执行

Console.WriteLine("当前时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

// timer 是定时器的对象,包含定时器相关信息
// count 表示执行次数,这里只有一次
SpareTime.DoOnce(3000, (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
});

26.3.2 配置任务信息

SpareTime.DoOnce(3000, (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}, "jobName", "描述一下这个任务是干什么的");

jobName 标识任务的唯一标识,通过这个标识可以启动、暂停、销毁任务。

26.3.3 手动启动执行

默认情况下,任务初始化后就立即启动,等待符合的时间就执行,有些时候我们仅仅想初始化时间,不希望立即执行,只需要配置 startNow 即可:

SpareTime.DoOnce(3000, (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
},"jobName", startNow: false);

// 手动启动执行
SpareTime.Start("jobName");

26.3.4 模拟后台执行

有些时候,我们只需要开启新线程去执行一个任务,比如发短信,发邮件,无需配置。

// 此方法无需主线程等待即可返回,可大大提高性能
SpareTime.DoIt(() => {
// 这里发送短信,发送邮件或记录访问记录
});

还可以指定多长时间后触发,建议 10-1000 毫秒之间:

SpareTime.DoIt(() => {
// 发送短信
}, 100);

26.3.5 ISpareTimeWorker 方式

public class JobWorker : ISpareTimeWorker
{
/// <summary>
/// 3s 后执行
/// </summary>
/// <param name="timer"></param>
/// <param name="count"></param>
[SpareTime(3000, "jobName", DoOnce = true, StartNow = true)]
public void DoSomething(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}

/// <summary>
/// 3s 后执行(支持异步)
/// </summary>
/// <param name="timer"></param>
/// <param name="count"></param>
[SpareTime(3000, "jobName", DoOnce = true, StartNow = true)]
public async Task DoSomethingAsync(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
await Task.CompletedTask;
}
}

需要在 Startup.cs 中注册 services.AddTaskScheduler()

26.4 间隔方式使用

26.4.1 每隔一段时间执行

// 每隔 1s 执行
SpareTime.Do(1000, (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
});

26.4.2 配置任务信息

SpareTime.Do(1000, (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}, "jobName", "这是一个计时器任务");

26.4.3 手动启动执行

SpareTime.Do(1000, (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}, "jobName", startNow:false);

SpareTime.Start("jobName");

26.4.4 ISpareTimeWorker 方式

public class JobWorker : ISpareTimeWorker
{
/// <summary>
/// 每隔 3s 执行
/// </summary>
/// <param name="timer"></param>
/// <param name="count"></param>
[SpareTime(3000, "jobName", StartNow = true)]
public void DoSomething(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}
}

需要在 Startup.cs 中注册 services.AddTaskScheduler()

26.5 Cron 表达式使用

26.5.1 什么是 Cron 表达式

Cron 表达式是一个字符串,字符串以 56 个空格隔开,分为 6 或 7 个域,每一个域代表一个含义,Cron 有如下两种语法格式:

(1) Seconds Minutes Hours DayofMonth Month DayofWeek Year

(2)Seconds Minutes Hours DayofMonth Month DayofWeek

Cron 从左到右(用空格隔开): 小时 月份中的日期 月份 星期中的日期 年份

字段允许值允许的特殊字符
秒(Seconds)0~59 的整数, - \* / 四个字符
分(Minutes)0~59 的整数, - \* / 四个字符
小时(Hours)0~23 的整数, - \* / 四个字符
日期(DayofMonth)1~31 的整数(但是你需要考虑平闰月的天数),- \* ? / L W C 八个字符
月份(Month)1~12 的整数或者 JAN-DEC, - \* / 四个字符
星期(DayofWeek)1~7 的整数或者 SUN-SAT (1=SUN), - \* ? / L C # 八个字符
年(可选,留空)(Year)1970~2099, - \* / 四个字符

每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是:

(1)_:表示匹配该域的任意值。假如在 Minutes 域使用 \_, 即表示每分钟都会触发事件。

(2)?:只能用在 DayofMonthDayofWeek 两个域。它也匹配域的任意值,但实际不会。因为 DayofMonthDayofWeek 会相互影响。例如想在每月的 20 日触发调度,不管 20 日到底是星期几,则只能使用如下写法: 13 13 15 20 _ ?, 其中最后一位只能用,而不能使用_,如果使用*表示不管星期几都会触发,实际上并不是这样。

(3)-:表示范围。例如在 Minutes 域使用 5-20,表示从 5 分到 20 分钟每分钟触发一次

(4)/:表示起始时间开始触发,然后每隔固定时间触发一次。例如在 Minutes 域使用 5/20,则意味着 5 分钟触发一次,而 25,45 等分别触发一次.

(5),:表示列出枚举值。例如:在 Minutes 域使用 5,20,则意味着在 520 分每分钟触发一次。

(6)L:表示最后,只能出现在 DayofWeekDayofMonth 域。如果在 DayofWeek 域使用 5L,意味着在最后的一个星期四触发。

(7)W:表示有效工作日(周一到周五) 只能出现在 DayofMonth 域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth 使用 5W,如果 5 日是星期六,则将在最近的工作日:星期五,即 4 日触发。如果 5 日是星期天,则在 6 日(周一)触发;如果 5 日在星期一到星期五中的一天,则就在 5 日触发。另外一点,W 的最近寻找不会跨过月份 。

(8)LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。

(9)#:用于确定每个月第几个星期几,只能出现在 DayofMonth 域。例如在 4#2,表示某月的第二个星期三。

26.5.2 常见 Cron 表达式

表达式表达式代表含义格式化
* * * * *每分钟CronFormat.Standard
*/1 * * * *每分钟CronFormat.Standard
0 0/1 * * * ?每分钟CronFormat.IncludeSeconds
0 0 * * * ?每小时CronFormat.IncludeSeconds
0 0 0/1 * * ?每小时CronFormat.IncludeSeconds
0 23 ? * MON-FRI晚上 11:00,周一至周五CronFormat.Standard
* * * * * *每秒CronFormat.IncludeSeconds
*/45 * * * * *每 45 秒CronFormat.IncludeSeconds
*/5 * * * *每 5 分钟CronFormat.Standard
0 0/10 * * * ?每 10 分钟CronFormat.IncludeSeconds
0 */5 * * * *每 5 分钟CronFormat.IncludeSeconds
30 11 * * 1-5周一至周五上午 11:30CronFormat.Standard
30 11 * * *11:30CronFormat.Standard
0-10 11 * * *上午 11:00 至 11:10 之间的每一分钟CronFormat.Standard
* * * 3 *每分钟,只在 3 月份CronFormat.Standard
* * * 3,6 *每分钟,只在 3 月和 6 月CronFormat.Standard
30 14,16 * * *下午 02:30 分和 04:30 分CronFormat.Standard
30 6,14,16 * * *早上 06:30,下午 02:30 和 04:30CronFormat.Standard
46 9 * * 1早上 09:46,只在星期一CronFormat.Standard
23 12 15 * *下午 12:23,在本月的第 15 天CronFormat.Standard
23 12 * JAN *下午 12:23,只在 1 月份CronFormat.Standard
23 12 ? JAN *下午 12:23,只在 1 月份CronFormat.Standard
23 12 * JAN-FEB *下午 12:23,1 月至 2 月CronFormat.Standard
23 12 * JAN-MAR *下午 12:23,1 月至 3 月CronFormat.Standard
23 12 * * SUN下午 12:23,仅在星期天CronFormat.Standard
*/5 15 * * MON-FRI每 5 分钟,下午 0:00 至 03:59,周一至周五CronFormat.Standard
* * * * MON#3每分钟,在月的第三个星期一CronFormat.Standard
* * * * 4L每一分钟,在本月的最后一天CronFormat.Standard
*/5 * L JAN *每月一次每月 5 分钟,只在 1 月份CronFormat.Standard
30 02 14 * * *下午在 02:02:30CronFormat.IncludeSeconds
5-10 * * * * *每分钟的 5-10 秒CronFormat.IncludeSeconds
5-10 30-35 10-12 * * *10:00 至 12:00 之间的每分钟 5-10 秒,每小时 30-35 分钟CronFormat.IncludeSeconds
30 */5 * * * *每分钟的 30 秒,每五分钟CronFormat.IncludeSeconds
0 30 10-13 ? * WED,FRI每小时的 30 分钟,下午 10:00 至 01:00 之间,仅在周三和周五CronFormat.IncludeSeconds
10 0/5 * * * ?每分钟的 10 秒,每 05 分钟CronFormat.IncludeSeconds
0 0 6 1/1 * ?下午 06:00CronFormat.IncludeSeconds
0 5 0/1 * * ?一个小时的 05 分CronFormat.IncludeSeconds
0 0 L * *每月最后一天上午 00:00CronFormat.Standard
0 0 L-1 * *每月最后一天的凌晨 00:00CronFormat.Standard
0 0 3W * *每月第 3 个工作日上午 00:00CronFormat.Standard
0 0 LW * *在每月的最后一个工作日,上午 00:00CronFormat.Standard
0 0 * * 2L本月最后一个星期二上午 00:00CronFormat.Standard
0 0 * * 6#3每月第三个星期六上午 00:00CronFormat.Standard
0 0 ? 1 MON#11 月第一个星期一上午 00:00CronFormat.Standard
0 0 3 * * ?每天几点执行一次CronFormat.IncludeSeconds

26.5.3 在线生成 Cron 表达式

https://cron.qqe2.com/

26.5.4 Macro 标识符

为了方便定义 Cron 表达式,Furion 框架也提供了非常方便的占位符实现常用的时间格式:

占位符对应表达式占位符代表含义
@every_second* * * * * *一秒钟跑一次
@every_minute* * * * *在分钟开始时每分钟运行一次
@hourly0 * * * *在小时开始时每小时运行一次
@daily0 0 * * *每天午夜运行一次
@midnight0 0 * * *每天午夜运行一次
@weekly0 0 * * 0周日上午午夜每周运行一次
@monthly0 0 1 * *每月在每月第一天的午夜运行一次
@yearly0 0 1 1 *每年 1 月 1 日午夜运行一次
@annually0 0 1 1 *每年 1 月 1 日午夜运行一次

26.5.5 使用 Cron 表达式

// 每隔 1s 执行
SpareTime.Do("* * * * * *", (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}, cronFormat: CronFormat.IncludeSeconds);
关于 CronFormat

默认情况下,Furion 框架未启用对 的支持,如需开启,则设置 cronFormat: CronFormat.IncludeSeconds 即可。默认值是 cronFormat: CronFormat.Standard

26.5.6 使用 Macro 占位符

// 每隔 1s 执行
SpareTime.Do("@every_second", (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
});

26.5.7 配置任务信息

SpareTime.Do("* * * * *", (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}, "cronName", "每分钟执行一次");

26.5.8 手动启动执行

SpareTime.Do("* * * * *", (timer, count) => {
Console.WriteLine("现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}, "cronName", "每分钟执行一次", startNow: false);

SpareTime.Start("cronName");

26.5.9 ISpareTimeWorker 方式

public class JobWorker : ISpareTimeWorker
{
/// <summary>
/// 每分钟执行
/// </summary>
/// <param name="timer"></param>
/// <param name="count"></param>
[SpareTime("* * * * *", "jobName", StartNow = true)]
public void DoSomething(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}

/// <summary>
/// 每分钟执行(支持异步)
/// </summary>
/// <param name="timer"></param>
/// <param name="count"></param>
[SpareTime("* * * * *", "jobName", StartNow = true)]
public async Task DoSomethingAsync(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
await Task.CompletedTask;
}
}

需要在 Startup.cs 中注册 services.AddTaskScheduler()

26.6 自定义下次执行时间

有些时候我们需要进行一些业务逻辑,比如数据库查询等操作返回下一次执行时间,这个时候我们可以通过高级自定义方式。

26.6.1 高级自定义间隔方式

SpareTime.Do(()=>{
// 这里可以查询数据库或进行或进行任何业务逻辑

if(符合逻辑){
return 1000; // 每秒执行
}
else return -1; // 不符合逻辑取消任务
},
(timer,count)=>{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
});
配置是否持续检查

默认情况下,该自定义会在返回 小于或等于0 时终止任务的执行。但是我们希望该任务不要终止,只要符合条件都一直执行,只需要配置 cancelInNoneNextTime: false 即可

26.6.2 高级自定义 Cron 表达式

SpareTime.Do(()=>{
// 这里可以查询数据库或进行或进行任何业务逻辑

if(符合逻辑){
return DateTimeOffset.Now.AddMinutes(10); // 十分钟后再执行
}
else return null; // 不符合逻辑取消任务
},
(timer,count) => {
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
});
配置是否持续检查

默认情况下,该自定义会在返回 null 时终止任务的执行。但是我们希望该任务不要终止,只要符合条件都一直执行,只需要配置 cancelInNoneNextTime: false 即可,如:

SpareTime.Do(()=>{
// 这里可以查询数据库或进行或进行任何业务逻辑

if(符合逻辑){
return SpareTime.GetCronNextOccurrence("cron 表达式");
}
else return null; // 不符合逻辑继续检查
},
(timer,count) => {
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}, cancelInNoneNextTime: false);

26.7 ISpareTimeWorker 说明

除了上面的 SpareTime 静态类方式,Furion 框架还提供了 ISpareTimeWorker 方式,使用该方式非常简单,只需要自定义一个公开且非抽象非静态类并实现 ISpareTimeWorker 即可。

在该类中定义的任务方法需满足以下规则:

  • 必须是公开且实例方法
  • 该方法必须返回 void 且提供 SpareTimerlong 两个参数
  • 必须贴有 [SpareTime] 特性

如:

public class JobWorker : ISpareTimeWorker
{
// 每隔一秒执行,且立即启动
[SpareTime(1000, "jobName1", StartNow = true)]
public void DoSomething1(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}

// 每分钟执行,且立即启动
[SpareTime("* * * * *", "jobName2", StartNow = true)]
public void DoSomething2(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}

// 每秒执行,且等待启动
[SpareTime("* * * * * *", "jobName3",CronFormat = CronFormat.IncludeSeconds, StartNow = false)]
public void DoSomething3(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}

// 每秒执行一次,每分钟也执行一次
[SpareTime(1000, "jobName4", StartNow = true)]
[SpareTime("* * * * *", "jobName5", StartNow = true)]
public void DoSomething4(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}

// 只执行一次
[SpareTime(1000, "jobName5", StartNow = true, DoOnce = true)]
public void DoSomething5(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}

// 读取配置文件,通过 #(配置路径)
[SpareTime("#(MyJob:Time)", "jobName6", StartNow = true, DoOnce = true)]
public void DoSomething5(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}

// 支持异步
[SpareTime(1000, "jobName1", StartNow = true)]
public async Task DoSomethingAsync(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
await Task.CompletedTask;
}
}
关于依赖注入

ISpareTimeWorker 接口主要是用来查找定时器对象的,也就是它的实现类并未提供依赖注入功能,所以在实现类并不支持构造函数注入依赖项。

26.7.1 [SpareTime] 特性

[SpareTime] 支持以下配置属性

  • Interval:间隔时间, double 类型
  • CronExpressionCron 表达式,string 类型
  • WorkerName:任务唯一标识,string 类型,必填
  • Description:任务描述,string 类型
  • DoOnce:是否只执行一次,bool 类型,默认 false
  • StartNow:是否立即启动,默认 false
  • CronFormatCron 表达式格式化方式,CronFormat 枚举类型,默认 CronFormat.Standard
  • ExecuteType:配置任务执行方式,SpareTimeExecuteTypes 枚举类型,默认 SpareTimeExecuteTypes.Parallel

26.8 SpareTime 静态类

SpareTime 静态类提供了一些方法方便初始化和管理任务

26.8.1 初始化任务

// 开启间隔任务
SpareTime.Do(interval, [options]);

// 开启 Cron 表达式任务
SpareTime.Do(expression, [options]);

// 只执行一次任务
SpareTime.DoOnce(interval, [options]);

// 实现自定义任务
SpareTime.Do(()=>{
return DateTime.Now.AddMinutes(10);
},[options]);

26.8.2 实现后台执行

// 实现后台执行
SpareTime.DoIt(()=>{});

26.8.3 开始一个任务

SpareTime.Start("任务标识");

26.8.4 暂停一个任务

SpareTime.Stop("任务标识");
// 还可以标记一个任务执行失败
SpareTime.Stop("任务标识", true);

26.8.5 取消一个任务

SpareTime.Cancel("任务名称");

26.8.6 销毁所有任务

SpareTime.Dispose();

26.8.7 获取所有任务

var workers = SpareTime.GetWorkers();

26.8.8 获取单个任务

var worker = SpareTime.GetWorker("workerName");

26.8.9 解析 Cron 表达式

var nextTime = SpareTime.GetCronNextOccurrence("* * * * *");

26.9 并行串行执行方式

Furion 框架提供了任务两种执行方式 并行串行

  • 并行:无需等待上一次任务完成,默认值
  • 串行:需等待上一次任务完成

26.9.1 SpareTime 静态方式指定

SpareTime.Do(1000, (t, i) =>
{
Thread.Sleep(5000); // 模拟执行耗时任务
Console.WriteLine($"{t.WorkerName} -{t.Description} - {DateTime.Now:yyyy-MM-dd HH:mm:ss} - {i}");
}, "serialName", "模拟串行任务", executeType: SpareTimeExecuteTypes.Serial);

26.9.2 ISpareTimeWorker 方式

[SpareTime(1000, "jobName1", StartNow = true, ExecuteType = SpareTimeExecuteTypes.Serial)]
public void DoSomething1(SpareTimer timer, long count)
{
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
Console.WriteLine($"一共执行了:{count} 次");
}

26.10 任务异常处理

有些时候我们可能在执行任务过程中出现异常,Furion 也提供了属性判断是否有异常和异常信息,方便记录到日志中,如:

SpareTime.Do(1000, (t, c) =>
{
// 判断是否有异常
if (t.Exception.Any())
{
Console.WriteLine(t.Exception.Values.LastOrDefault()?.Message);
}
// 执行第三次抛异常
if (c > 2)
{
throw Oops.Oh("抛异常" + c);
}
else
{
Console.WriteLine($"{t.WorkerName} -{t.Description} - {DateTime.Now:yyyy-MM-dd HH:mm:ss} - {c}");
}
}, "exceptionJob");
特别说明

如果一个任务连续错误次数达 10次 则任务将自动停止,并标记任务状态为 Failed

26.11 如何在任务中解析对象

有些时候我们需要在任务中进行数据库操作或解析服务,这时候我们只需要创建一个新的作用域即可

26.11.1 SpareTime 静态类中

SpareTime.Do(1000, (timer,count) => {
Scoped.Create((_, scope) =>
{
var services = scope.ServiceProvider;

// 获取数据库上下文
var dbContext = Db.GetDbContext(services);

// 获取仓储
var respository = Db.GetRepository<Person>(services);

// 解析其他服务
var otherService = services.GetService<XXX>();
var otherService2 = App.GetService<XXX>(services);
});
}, "任务标识");

26.11.2 ISpareTimeWorker 方式

[SpareTime(1000, "jobName1", StartNow = true, ExecuteType = SpareTimeExecuteTypes.Serial)]
public void DoSomething1(SpareTimer timer, long count)
{
Scoped.Create((_, scope) =>
{
var services = scope.ServiceProvider;

// 获取数据库上下文
var dbContext = Db.GetDbContext(services);

// 获取仓储
var respository = Db.GetRepository<Person>(services);

// 解析其他服务
var otherService = services.GetService<XXX>();
var otherService2 = App.GetService<XXX>(services);
});
}
数据库操作注意

如果作用域中对数据库有任何变更操作,需手动调用 SaveChanges 或带 Now 结尾的方法。也可以使用 Scoped.CreateUow(handler) 代替。

26.12 在 BackgroundService 中使用

BackgroundService.NET Core 3 之后提供的轻量级后台任务,同时可以发布到 Windows 服务和 Linux 守护进程中。

26.12.1 间隔执行方式

namespace WorkerService;

public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;

private const int delay = 1000;

public Worker(ILogger<Worker> logger)
{
_logger = logger;
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);

await taskFactory.StartNew(async () =>
{
// 你的业务代码写到这里面

_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);

await Task.CompletedTask;

}, stoppingToken);

await Task.Delay(delay, stoppingToken);
}
}
}

26.12.2 Cron 表达式执行方式

using Furion.TimeCrontab;

namespace WorkerService;

public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;

private readonly Crontab _crontab;

public Worker(ILogger<Worker> logger)
{
_logger = logger;
_crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);

await taskFactory.StartNew(async () =>
{
// 你的业务代码写到这里面

_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);

await Task.CompletedTask;
}, stoppingToken);

await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.UtcNow), stoppingToken);
}
}
}

26.13 定时任务监听器

Furion v2.18+ 版本之后新增了定时任务监听器 ISpareTimeListener,通过监听器可以实现所有定时任务的状态。如,创建一个 单例 的监听器 SpareTimeListener

using Furion.DependencyInjection;
using Furion.TaskScheduler;
using System;
using System.Threading.Tasks;

namespace Furion.Core
{
public class SpareTimeListener : ISpareTimeListener, ISingleton
{
/// <summary>
/// 监听所有任务
/// </summary>
/// <param name="executer"></param>
/// <returns></returns>
public Task OnListener(SpareTimerExecuter executer)
{
switch (executer.Status)
{
// 执行开始通知
case 0:
Console.WriteLine($"{executer.Timer.WorkerName} 任务开始通知");
break;
// 任务执行之前通知
case 1:
Console.WriteLine($"{executer.Timer.WorkerName} 执行之前通知");
break;
// 执行成功通知
case 2:
Console.WriteLine($"{executer.Timer.WorkerName} 执行成功通知");
break;
// 任务执行失败通知
case 3:
Console.WriteLine($"{executer.Timer.WorkerName} 执行失败通知");
break;
// 任务执行停止通知
case -1:
Console.WriteLine($"{executer.Timer.WorkerName} 执行停止通知");
break;
// 任务执行取消通知
case -2:
Console.WriteLine($"{executer.Timer.WorkerName} 执行取消通知");
break;
default:
break;
}

return Task.CompletedTask;
}
}
}

26.13.1 SpareTimerExecuter 属性说明

  • TimerSpareTimer 定时器对象
  • Status:监听状态
    • 0:任务开始
    • 1:执行之前
    • 2:执行成功
    • 3:执行失败
    • -1:任务停止
    • -2:任务取消

26.14 IIS 部署回收设置

如果在项目中使用了定时任务且部署到 IIS 中,那么需要设置 IIS 禁止回收,点击查看 IIS 回收问题解决方案

部署建议

建议定时任务采用 Worker Service 独立部署方式,不应依托 Web 项目进程中。查看【 Worker Service】章节

26.15 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/job/index.html b/handbook/build/docs/job/index.html new file mode 100644 index 00000000000..509a457c2a9 --- /dev/null +++ b/handbook/build/docs/job/index.html @@ -0,0 +1,17 @@ + + + + + +26.1 调度作业 | Furion + + + + + +
+

26.1 调度作业

当前文档还未发布

当前文档还在编写中,已完成了 95%,将在 2022 年 11 月 23 日完成。


4.8.0 以下版本说明

Furion 4.8.0+ 版本采用 Sundial 定时任务替换原有的 TaskScheduler查看旧文档

版本说明

以下内容仅限 Furion 4.8.0 + 版本使用。

26.1.1 关于调度作业

调度作业又称定时任务,顾名思义,定时任务就是在特定的时间或符合某种时间规律自动触发并执行任务。

26.1.2 快速入门

  1. 定义作业处理程序 MyJob
public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");
await Task.CompletedTask;
}
}
  1. Startup.cs 注册 Schedule 服务:
services.AddSchedule(options =>
{
// 注册作业,并配置作业触发器
options.AddJob<MyJob>(Triggers.Secondly()); // 表示每秒执行
});
  1. 查看作业执行结果
info: 2022-11-17 16:23:56.0166669 +08:00 星期四 L MyJob[0] #16
job1 job1_trigger1 2022/11/17 16:23:56 * * * * * *
info: 2022-11-17 16:23:57.0125960 +08:00 星期四 L MyJob[0] #17
job1 job1_trigger1 2022/11/17 16:23:57 * * * * * *
info: 2022-11-17 16:23:58.0120379 +08:00 星期四 L MyJob[0] #16
job1 job1_trigger1 2022/11/17 16:23:58 * * * * * *
info: 2022-11-17 16:23:59.0071986 +08:00 星期四 L MyJob[0] #5
job1 job1_trigger1 2022/11/17 16:23:59 * * * * * *
info: 2022-11-17 16:24:00.0196813 +08:00 星期四 L MyJob[0] #16
job1 job1_trigger1 2022/11/17 16:24:00 * * * * * *
info: 2022-11-17 16:24:01.0305799 +08:00 星期四 L MyJob[0] #17
job1 job1_trigger1 2022/11/17 16:24:01 * * * * * *

26.1.2.1 指定作业 Id

默认情况下,不指定作业 Id 会自动生成 job[编号]

services.AddSchedule(options =>
{
options.AddJob<MyJob>("myjob", Triggers.Secondly());
});

查看作业执行结果:

info: 2022-11-17 16:25:44.0339177 +08:00 星期四 L MyJob[0] #3
myjob myjob_trigger1 2022/11/17 16:25:44 * * * * * *
info: 2022-11-17 16:25:45.0064838 +08:00 星期四 L MyJob[0] #14
myjob myjob_trigger1 2022/11/17 16:25:45 * * * * * *
info: 2022-11-17 16:25:46.0186243 +08:00 星期四 L MyJob[0] #15
myjob myjob_trigger1 2022/11/17 16:25:46 * * * * * *
info: 2022-11-17 16:25:47.0175115 +08:00 星期四 L MyJob[0] #16
myjob myjob_trigger1 2022/11/17 16:25:47 * * * * * *
info: 2022-11-17 16:25:48.0304982 +08:00 星期四 L MyJob[0] #15
myjob myjob_trigger1 2022/11/17 16:25:48 * * * * * *
info: 2022-11-17 16:25:49.0070855 +08:00 星期四 L MyJob[0] #16
myjob myjob_trigger1 2022/11/17 16:25:49 * * * * * *

26.1.2.2 多个作业触发器

有时候,一个作业支持多种触发时间,比如 每分钟 执行一次,每 5秒 执行一次,每分钟第 3/7/8秒 执行一次。

services.AddSchedule(options =>
{
options.AddJob<MyJob>(Triggers.Minutely() // 每分钟开始
, Triggers.Period(5000) // 每 5 秒,也可以使用 Triggers.PeriodSeconds(5)
, Triggers.Cron("3,7,8 * * * * ?", CronStringFormat.WithSeconds)); // 每分钟第 3/7/8 秒
});

查看作业执行结果:

info: 2022-11-17 16:45:40.5258191 +08:00 星期四 L MyJob[0] #14
job1 job1_trigger2 2022/11/17 16:45:40 5000ms
info: 2022-11-17 16:45:45.5281473 +08:00 星期四 L MyJob[0] #3
job1 job1_trigger2 2022/11/17 16:45:45 5000ms
info: 2022-11-17 16:45:50.5378417 +08:00 星期四 L MyJob[0] #8
job1 job1_trigger2 2022/11/17 16:45:50 5000ms
info: 2022-11-17 16:45:55.5436499 +08:00 星期四 L MyJob[0] #3
job1 job1_trigger2 2022/11/17 16:45:55 5000ms
info: 2022-11-17 16:46:00.0253985 +08:00 星期四 L MyJob[0] #14
job1 job1_trigger1 2022/11/17 16:46:00 * * * * *
info: 2022-11-17 16:46:00.5494676 +08:00 星期四 L MyJob[0] #16
job1 job1_trigger2 2022/11/17 16:46:00 5000ms
info: 2022-11-17 16:46:03.0238143 +08:00 星期四 L MyJob[0] #15
job1 job1_trigger3 2022/11/17 16:46:03 3,7,8 * * * * ?
info: 2022-11-17 16:46:05.5629293 +08:00 星期四 L MyJob[0] #14
job1 job1_trigger2 2022/11/17 16:46:05 5000ms
info: 2022-11-17 16:46:07.0169836 +08:00 星期四 L MyJob[0] #15
job1 job1_trigger3 2022/11/17 16:46:07 3,7,8 * * * * ?
info: 2022-11-17 16:46:08.0128756 +08:00 星期四 L MyJob[0] #14
job1 job1_trigger3 2022/11/17 16:46:08 3,7,8 * * * * ?
info: 2022-11-17 16:46:10.5731138 +08:00 星期四 L MyJob[0] #8
job1 job1_trigger2 2022/11/17 16:46:10 5000ms
info: 2022-11-17 16:46:15.5841547 +08:00 星期四 L MyJob[0] #15
job1 job1_trigger2 2022/11/17 16:46:15 5000ms
info: 2022-11-17 16:46:20.5866898 +08:00 星期四 L MyJob[0] #8
job1 job1_trigger2 2022/11/17 16:46:20 5000ms

26.1.2.3 串行 执行

默认情况下,作业采用 并行 执行方式,也就是不会等待上一次作业执行完成,只要触发时间到了就自动执行,但一些情况下,我们可能希望等待上一次作业完成再执行,如:

services.AddSchedule(options =>
{
options.AddJob<MyJob>(concurrent: false, Triggers.Secondly()); // 串行,每秒执行
});
public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");
await Task.Delay(2000, stoppingToken); // 这里模拟耗时操作,比如耗时2秒
}
}

查看作业执行结果:

info: 2022-11-17 16:57:49.0898900 +08:00 星期四 L MyJob[0] #8
job1 job1_trigger1 2022/11/17 16:57:49 * * * * * *
warn: 2022-11-17 16:57:50.0322409 +08:00 星期四 L System.Logging.ScheduleService[0] #8
11/17/2022 16:57:50: The <job1_trigger1> trigger of job <job1> failed to execute as scheduled due to blocking.
warn: 2022-11-17 16:57:51.0099629 +08:00 星期四 L System.Logging.ScheduleService[0] #8
11/17/2022 16:57:51: The <job1_trigger1> trigger of job <job1> failed to execute as scheduled due to blocking.
info: 2022-11-17 16:57:52.0192847 +08:00 星期四 L MyJob[0] #8
job1 job1_trigger1 2022/11/17 16:57:52 * * * * * *
warn: 2022-11-17 16:57:53.0159256 +08:00 星期四 L System.Logging.ScheduleService[0] #8
11/17/2022 16:57:53: The <job1_trigger1> trigger of job <job1> failed to execute as scheduled due to blocking.
warn: 2022-11-17 16:57:54.0101172 +08:00 星期四 L System.Logging.ScheduleService[0] #8
11/17/2022 16:57:54: The <job1_trigger1> trigger of job <job1> failed to execute as scheduled due to blocking.
info: 2022-11-17 16:57:55.0038536 +08:00 星期四 L MyJob[0] #13
job1 job1_trigger1 2022/11/17 16:57:55 * * * * * *
warn: 2022-11-17 16:57:56.0158085 +08:00 星期四 L System.Logging.ScheduleService[0] #16
11/17/2022 16:57:56: The <job1_trigger1> trigger of job <job1> failed to execute as scheduled due to blocking.
warn: 2022-11-17 16:57:57.0276842 +08:00 星期四 L System.Logging.ScheduleService[0] #16
11/17/2022 16:57:57: The <job1_trigger1> trigger of job <job1> failed to execute as scheduled due to blocking.
info: 2022-11-17 16:57:58.0100972 +08:00 星期四 L MyJob[0] #13
job1 job1_trigger1 2022/11/17 16:57:58 * * * * * *
warn: 2022-11-17 16:57:59.0149137 +08:00 星期四 L System.Logging.ScheduleService[0] #13
11/17/2022 16:57:59: The <job1_trigger1> trigger of job <job1> failed to execute as scheduled due to blocking.

默认情况下,使用 串行 执行但因为耗时导致触发时间到了但实际未能执行会默认输出 warn 警告日志,如需关闭只需要:

services.AddSchedule(options =>
{
options.LogEnabled = false;
options.AddJob<MyJob>(concurrent: false, Triggers.Secondly()); // 每秒执行
});

查看作业执行结果:

info: 2022-11-17 17:02:28.0559602 +08:00 星期四 L MyJob[0] #5
job1 job1_trigger1 2022/11/17 17:02:28 * * * * * *
info: 2022-11-17 17:02:31.0183238 +08:00 星期四 L MyJob[0] #8
job1 job1_trigger1 2022/11/17 17:02:31 * * * * * *
info: 2022-11-17 17:02:34.0130555 +08:00 星期四 L MyJob[0] #13
job1 job1_trigger1 2022/11/17 17:02:34 * * * * * *
info: 2022-11-17 17:02:37.0040306 +08:00 星期四 L MyJob[0] #15
job1 job1_trigger1 2022/11/17 17:02:37 * * * * * *
info: 2022-11-17 17:02:39.0142346 +08:00 星期四 L MyJob[0] #15
job1 job1_trigger1 2022/11/17 17:02:39 * * * * * *

26.1.2.4 打印作业完整信息

框架提供了四种方式打印作业完整信息。

  • 第一种:输出完整的作业 JSON 信息:context.ConvertToJSON()
public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation(context.ConvertToJSON());
await Task.CompletedTask;
}
}

查看作业打印结果:

info: 2022-11-17 17:13:41.0480946 +08:00 星期四 L MyJob[0] #5
{
"jobDetail": {
"jobId": "job1",
"groupName": null,
"jobType": "MyJob",
"assemblyName": "ConsoleApp32",
"description": null,
"concurrent": false,
"includeAnnotations": false,
"properties": "{}",
"updatedTime": "2022-11-17T17:13:41.0247430+08:00"
},
"trigger": {
"triggerId": "job1_trigger1",
"jobId": "job1",
"triggerType": "Furion.Schedule.CronTrigger",
"assemblyName": "Furion",
"args": "[\"@secondly\",0]",
"description": null,
"status": 2,
"startTime": null,
"endTime": null,
"lastRunTime": "2022-11-17T17:13:41.0000000",
"nextRunTime": "2022-11-17T17:13:42.0000000",
"numberOfRuns": 1,
"maxNumberOfRuns": 0,
"numberOfErrors": 0,
"maxNumberOfErrors": 0,
"numRetries": 0,
"retryTimeout": 1000,
"startNow": true,
"runOnStart": fals,
"updatedTime": "2022-11-17T17:13:41.0250214+08:00"
}
}
  • 第二种:输出单独的作业 JSON 信息:jobDetail.ConvertToJSON()trigger.ConvertToJSON()
public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
var jobDetail = context.JobDetail;
var trigger = context.Trigger;

_logger.LogInformation(jobDetail.ConvertToJSON());
_logger.LogInformation(trigger.ConvertToJSON(NamingConventions.UnderScoreCase)); // 支持三种属性名输出规则

await Task.CompletedTask;
}
}

查看作业打印结果:

info: 2022-11-17 17:17:15.0441407 +08:00 星期四 L MyJob[0] #3
{
"jobId": "job1",
"groupName": null,
"jobType": "MyJob",
"assemblyName": "ConsoleApp32",
"description": null,
"concurrent": false,
"includeAnnotations": false,
"properties": "{}",
"updatedTime": "2022-11-17T17:17:15.0103913+08:00"
}
info: 2022-11-17 17:17:15.0503546 +08:00 星期四 L MyJob[0] #3
{
"trigger_id": "job1_trigger1",
"job_id": "job1",
"trigger_type": "Furion.Schedule.CronTrigger",
"assembly_name": "Furion",
"args": "[\"@secondly\",0]",
"description": null,
"status": 2,
"start_time": null,
"end_time": null,
"last_run_time": "2022-11-17T17:17:15.0000000",
"next_run_time": "2022-11-17T17:17:16.0000000",
"number_of_runs": 1,
"max_number_of_runs": 0,
"number_of_errors": 0,
"max_number_of_errors": 0,
"num_retries": 0,
"retry_timeout": 1000,
"start_now": true,
"run_on_start": false,
"updated_time": "2022-11-17T17:17:15.0109612+08:00"
}
  • 第三种:输出单独的作业 SQL 信息:jobDetail.ConvertToSQL()trigger.ConvertToSQL()
public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
var jobDetail = context.JobDetail;
var trigger = context.Trigger;

_logger.LogInformation(jobDetail.ConvertToSQL("作业信息表名", PersistenceBehavior.Appended)); // 输出新增语句
_logger.LogInformation(trigger.ConvertToSQL("作业触发器表名", PersistenceBehavior.Removed, NamingConventions.Pascal)); // 输出删除语句
_logger.LogInformation(trigger.ConvertToSQL("作业触发器表名", PersistenceBehavior.Updated, NamingConventions.UnderScoreCase)); // 输出更新语句

await Task.CompletedTask;
}
}

查看作业打印结果:

info: 2022-11-17 17:35:11.1085426 +08:00 星期四 L MyJob[0] #9
INSERT INTO 作业信息表名(
[jobId],
[groupName],
[jobType],
[assemblyName],
[description],
[concurrent],
[includeAnnotations],
[properties],
[updatedTime]
)
VALUES(
'job1',
NULL,
'MyJob',
'ConsoleApp32',
NULL,
0,
0,
'{}',
'2022/11/17 17:35:11'
);
info: 2022-11-17 17:35:11.1150444 +08:00 星期四 L MyJob[0] #9
DELETE FROM 作业触发器表名
WHERE [TriggerId] = 'job1_trigger1' AND [JobId] = 'job1';
info: 2022-11-17 17:35:11.1190961 +08:00 星期四 L MyJob[0] #9
UPDATE 作业触发器表名
SET
[trigger_id] = 'job1_trigger1',
[job_id] = 'job1',
[trigger_type] = 'Furion.Schedule.CronTrigger',
[assembly_name] = 'Furion',
[args] = '["@secondly",0]',
[description] = NULL,
[status] = 2,
[start_time] = NULL,
[end_time] = NULL,
[last_run_time] = '2022/11/17 17:35:11',
[next_run_time] = '2022/11/17 17:35:12',
[number_of_runs] = 1,
[max_number_of_runs] = 0,
[number_of_errors] = 0,
[max_number_of_errors] = 0,
[num_retries] = 0,
[retry_timeout] = 1000,
[start_now] = 1,
[run_on_start] = 0,
[updated_time] = '2022/11/17 17:35:11'
WHERE [trigger_id] = 'job1_trigger1' AND [job_id] = 'job1';
  • 第四种:输出单独的作业 Monitor 信息:jobDetail.ConvertToMonitor()trigger.ConvertToMonitor()
public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
var jobDetail = context.JobDetail;
var trigger = context.Trigger;

_logger.LogInformation(jobDetail.ConvertToMonitor());
_logger.LogInformation(trigger.ConvertToMonitor());

await Task.CompletedTask;
}
}

查看作业打印结果:

info: 2022-11-17 17:39:09.1086517 +08:00 星期四 L MyJob[0] #3
┏━━━━━━━━━━━ JobDetail ━━━━━━━━━━━
┣ MyJob

┣ JobId: job1
┣ GroupName:
┣ JobType: MyJob
┣ AssemblyName: ConsoleApp32
┣ Description:
┣ Concurrent: False
┣ IncludeAnnotations: False
┣ Properties: {}
┣ UpdatedTime: 2022/11/17 17:39:09
┗━━━━━━━━━━━ JobDetail ━━━━━━━━━━━
info: 2022-11-17 17:39:09.1133162 +08:00 星期四 L MyJob[0] #3
┏━━━━━━━━━━━ Trigger ━━━━━━━━━━━
┣ Furion.Schedule.CronTrigger

┣ TriggerId: job1_trigger1
┣ JobId: job1
┣ TriggerType: Furion.Schedule.CronTrigger
┣ AssemblyName: Furion
┣ Args: ["@secondly",0]
┣ Description:
┣ Status: Running
┣ StartTime:
┣ EndTime:
┣ LastRunTime: 2022/11/17 17:39:09
┣ NextRunTime: 2022/11/17 17:39:10
┣ NumberOfRuns: 1
┣ MaxNumberOfRuns: 0
┣ NumberOfErrors: 0
┣ MaxNumberOfErrors: 0
┣ NumRetries: 0
┣ RetryTimeout: 1000
┣ StartNow: True
┣ RunOnStart: False
┣ UpdatedTime: 2022/11/17 17:39:09
┗━━━━━━━━━━━ Trigger ━━━━━━━━━━━

26.1.2.5 运行时(动态)操作作业

有时候,我们需要在运行时对作业动态的增加,更新,删除等操作,如动态添加作业:

  1. 注册 services.AddSchedule() 服务
// 可以完全动态操作,只需要注册服务即可
services.AddSchedule();

// 也可以部分静态,部分动态注册
services.AddSchedule(options =>
{
options.AddJob<MyJob>(concurrent: false, Triggers.PeriodSeconds(5));
});
  1. 注入 ISchedulerFactory 服务
public class YourService: IYourService
{
private readonly ISchedulerFactory _schedulerFactory;
public YourService(ISchedulerFactory schedulerFactory)
{
_schedulerFactory = schedulerFactory;
}

public void AddJob()
{
_schedulerFactory.AddJob<MyJob>("动态作业 Id", Triggers.Secondly());
}
}
  1. 查看作业执行结果
warn: 2022-11-17 17:54:35.2654513 +08:00 星期四 L System.Logging.ScheduleService[0] #5
Schedule Hosted Service cancels hibernation.
info: 2022-11-17 17:54:35.2670018 +08:00 星期四 L System.Logging.ScheduleService[0] #5
The Scheduler of <动态作业 Id> successfully added to the schedule.
info: 2022-11-17 17:54:36.0834925 +08:00 星期四 L MyJob[0] #5
job1 job1_trigger1 2022/11/17 17:54:36 5000ms
info: 2022-11-17 17:54:36.0911692 +08:00 星期四 L MyJob[0] #3
动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:36 * * * * * *
info: 2022-11-17 17:54:37.0146251 +08:00 星期四 L MyJob[0] #18
动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:37 * * * * * *
info: 2022-11-17 17:54:38.0071504 +08:00 星期四 L MyJob[0] #16
动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:38 * * * * * *
info: 2022-11-17 17:54:39.0140840 +08:00 星期四 L MyJob[0] #17
动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:39 * * * * * *
info: 2022-11-17 17:54:40.0173240 +08:00 星期四 L MyJob[0] #16
动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:40 * * * * * *
info: 2022-11-17 17:54:41.0249043 +08:00 星期四 L MyJob[0] #16
动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:41 * * * * * *
info: 2022-11-17 17:54:41.0550205 +08:00 星期四 L MyJob[0] #15
job1 job1_trigger1 2022/11/17 17:54:41 5000ms
info: 2022-11-17 17:54:42.0171271 +08:00 星期四 L MyJob[0] #15
动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:42 * * * * * *
info: 2022-11-17 17:54:43.0288486 +08:00 星期四 L MyJob[0] #18
动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:43 * * * * * *
info: 2022-11-17 17:54:44.0092455 +08:00 星期四 L MyJob[0] #15
动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:44 * * * * * *

26.1.2.6 作业触发器特性

默认情况下,框架不会扫描 IJob 实现类的作业触发器特性,但可以设置作业的 IncludeAnnotations 进行启用。

  1. 启用 IncludeAnnotations 扫描
services.AddSchedule(options =>
{
options.AddJob(JobBuilder.Create<MyJob>().SetIncludeAnnotations(true)
, Triggers.PeriodSeconds(5)); // 这里可传可不传,传了则会自动载入特性和这里配置的作业触发器
});
  1. MyJob 中添加多个作业触发器特性
[Minutely]
[Cron("3,7,8 * * * * ?", CronStringFormat.WithSeconds)]
public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");

await Task.CompletedTask;
}
}
  1. 查看作业执行结果
info: 2022-11-18 10:28:56.3382585 +08:00 星期五 L MyJob[0] #14
job1 job1_trigger1 2022/11/18 10:28:56 5000ms
info: 2022-11-18 10:29:00.0219493 +08:00 星期五 L MyJob[0] #5
job1 job1_trigger2 2022/11/18 10:29:00 * * * * *
info: 2022-11-18 10:29:01.3318716 +08:00 星期五 L MyJob[0] #14
job1 job1_trigger1 2022/11/18 10:29:01 5000ms
info: 2022-11-18 10:29:03.0127992 +08:00 星期五 L MyJob[0] #16
job1 job1_trigger3 2022/11/18 10:29:03 3,7,8 * * * * ?
info: 2022-11-18 10:29:06.3457728 +08:00 星期五 L MyJob[0] #16
job1 job1_trigger1 2022/11/18 10:29:06 5000ms
info: 2022-11-18 10:29:07.0318919 +08:00 星期五 L MyJob[0] #14
job1 job1_trigger3 2022/11/18 10:29:07 3,7,8 * * * * ?
info: 2022-11-18 10:29:08.0141479 +08:00 星期五 L MyJob[0] #8
job1 job1_trigger3 2022/11/18 10:29:08 3,7,8 * * * * ?
info: 2022-11-18 10:29:11.3468100 +08:00 星期五 L MyJob[0] #16
job1 job1_trigger1 2022/11/18 10:29:11 5000ms
info: 2022-11-18 10:29:16.3504029 +08:00 星期五 L MyJob[0] #14
job1 job1_trigger1 2022/11/18 10:29:16 5000ms

26.1.3 作业信息 JobDetail 及构建器

26.1.3.1 关于作业信息

框架提供了 JobDetail 类型来描述作业信息,JobDetail 类型提供以下只读属性

属性名属性类型默认值说明
JobIdstring作业 Id
GroupNamestring作业组名称
JobTypestring作业处理程序类型,存储的是类型的 FullName
AssemblyNamestring作业处理程序类型所在程序集,存储的是程序集 Name
Descriptionstring描述信息
Concurrentbooltrue描述信息,如果设置为 false,那么使用 串行 执行
IncludeAnnotationsboolfalse是否扫描 IJob 实现类 [Trigger] 特性触发器
Propertiesstring"{}"作业信息额外数据,由 Dictionary<string, object> 序列化成字符串存储
UpdatedTimeDateTime?作业更新时间

26.1.3.2 关于作业信息构建器

作业信息 JobDetail 是作业调度模块提供运行时的只读类型,那么我们该如何创建或变更 JobDetail 对象呢?

JobBuilder 是作业调度模块提供可用来生成运行时 JobDetail 的类型,这样做的好处可避免外部直接修改运行时 JobDetail 数据,还能实现任何修改动作监听,也能避免多线程抢占情况。

作业调度模块提供了多种方式用来创建 JobBuilder 对象。

  1. 通过 Create 静态方法创建
// 根据 IJob 实现类类型创建
var jobBuilder = JobBuilder.Create<MyJob>();

// 根据 Type 类型创建
var jobBuilder = JobBuilder.Create(typeof(MyJob));

// 根据程序集名称和类型完全限定名(FullName)创建
var jobBuilder = JobBuilder.Create("YourProject", "YourProject.MyJob");
  1. 通过 JobDetail 类型创建

这种方式常用于在运行时更新作业信息。

var jobBuilder = JobBuilder.From(jobDetail);
  1. 通过 JSON 字符串创建

该方式非常灵活,可从配置文件,JSON 字符串,或其他能够返回 JSON 字符串的地方创建。

var jobBuilder = JobBuilder.From(@"
{
""jobId"": ""job1"",
""groupName"": null,
""jobType"": ""Furion.Application.MyJob"",
""assemblyName"": ""Furion.Application"",
""description"": null,
""concurrent"": true,
""includeAnnotations"": false,
""properties"": ""{}"",
""updatedTime"": ""2022-11-17T09:25:47.0471107+08:00""
}");

如果使用的是 .NET7,可使用 """ 避免转义,如:

var jobBuilder = JobBuilder.From("""
{
"jobId": "job1",
"groupName": null,
"jobType": "Furion.Application.MyJob",
"assemblyName": "Furion.Application",
"description": null,
"concurrent": true,
"includeAnnotations": false,
"properties": "{}",
"updatedTime": "2022-11-17T09:25:47.0471107+08:00"
}
""");
关于属性名匹配规则

支持 CamelCase(驼峰命名法)Pascal(帕斯卡命名法) 命名方式。

不支持 UnderScoreCase(下划线命名法) ,如 "include_annotations": true

  1. 还可以通过 Clone 静态方法从一个 JobBuilder 创建
var jobBuilder = JobBuilder.Clone(fromJobBuilder);
克隆说明

克隆操作只会克隆 AssemblyNameJobTypeGroupNameDescriptionConcurrentIncludeAnnotationsProperties

不会克隆 JobIdUpdatedTime

  1. 还可以通过 LoadFrom 实例方法填充当前的 JobBuilder

比如可以传递匿名类型,类类型:

// 会覆盖所有相同的值
jobBuilder.LoadFrom(new
{
Description = "我是描述",
Concurrent = false
});

// 支持多个填充,还可以配置跳过 null 值覆盖
jobBuilder.LoadFrom(new
{
Description = "我是另外一个描述",
Concurrent = false,
IncludeAnnotations = default(object) // 会跳过赋值
}, ignoreNullValue: true);
关于属性名匹配规则

支持 CamelCase(驼峰命名法)Pascal(帕斯卡命名法)UnderScoreCase(下划线命名法) 命名方式。

26.1.3.3 设置作业信息构建器

JobBuilder 提供了和 JobDetail 完全匹配的 Set[属性名] 方法来配置作业信息各个属性,如:

services.AddSchedule(options =>
{
var jobBuilder = JobBuilder.Create<MyJob>()
.SetJobId("job1") // 作业 Id
.SetGroupName("group1") // 作业组名称
.SetJobType("Furion.Application", "Furion.Application.MyJob") // 作业类型,支持多个重载
.SetJobType<MyJob>() // 作业类型,支持多个重载
.SetJobType(typeof(MyJob)) // 作业类型,支持多个重载
.SetDescription("这是一段描述") // 作业描述
.SetConcurrent(false) // 并行还是串行方式,false 为 串行
.SetIncludeAnnotations(true) // 是否扫描 IJob 类型的触发器特性,true 为 扫描
.SetProperties("{}") // 作业额外数据 Dictionary<string, object> 类型序列化,支持多个重载
.SetProperties(new Dictionary<string, object> { { "name", "Furion" } }) // 作业类型额外数据,支持多个重载,推荐!!!
;

options.AddJob(jobBuilder, Triggers.PeriodSeconds(5));
});

26.1.3.4 作业信息/构建器额外数据

有时候我们需要在作业运行的时候添加一些额外数据,或者实现多个触发器共享数据,经常用于 串行 执行中,后面一个触发器需等待前一个触发器完成。

public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
var jobDetail = context.JobDetail;

var count = jobDetail.GetProperty<int>("count");
jobDetail.AddOrUpdateProperty("count", count + 1); // 递增 count

_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger} {count}");

await Task.CompletedTask;
}
}

查看作业运行日志:

info: 2022-11-18 16:48:35.8308170 +08:00 星期五 L ConsoleApp32.MyJob[0] #5
job1 job1_trigger1 2022/11/18 16:48:35 5000ms 0
info: 2022-11-18 16:48:40.8437231 +08:00 星期五 L ConsoleApp32.MyJob[0] #8
job1 job1_trigger1 2022/11/18 16:48:40 5000ms 1
info: 2022-11-18 16:48:45.8471287 +08:00 星期五 L ConsoleApp32.MyJob[0] #15
job1 job1_trigger1 2022/11/18 16:48:45 5000ms 2
info: 2022-11-18 16:48:50.8607141 +08:00 星期五 L ConsoleApp32.MyJob[0] #15
job1 job1_trigger1 2022/11/18 16:48:50 5000ms 3
info: 2022-11-18 16:48:55.8645520 +08:00 星期五 L ConsoleApp32.MyJob[0] #14
job1 job1_trigger1 2022/11/18 16:48:55 5000ms 4

作业调度模块为 JobDetailJobBuilder 提供了多个方法操作额外数据:

// 查看所有额外数据
var properties = jobDetail.GetProperties();

// 查看单个额外数据,返回 object
var value = jobBuilder.GetProperty("key");

// 查看单个额外数据泛型
var value = jobDetail.GetProperty<int>("key");

// 添加新的额外数据,支持链式操作,如果键已存在,则跳过
jobDetail.AddProperty("key", "Furion").AddProperty("key1", 2);

// 添加或更新额外数据,支持链式操作,不存在则新增,存在则替换,推荐
jobDetail.AddOrUpdateProperty("key", "Furion").AddOrUpdateProperty("key1", 2);

// 删除某个额外数据,支持链式操作,如果 key 不存在则跳过
jobDetail.RemoveProperty("key").RemoveProperty("key1");

// 清空所有额外数据
jobDetail.ClearProperties();
作业额外数据类型支持

作业额外数据每一项的值只支持 int32stringboolnull 或它们组成的数组类型。

26.1.3.5 多种格式字符串输出

JobDetailJobBuilder 都提供了多种将自身转换成特定格式的字符串。

  1. 转换成 JSON 字符串
var json = jobDetail.ConvertToJSON();

字符串打印如下:

{
"jobId": "job1",
"groupName": null,
"jobType": "Furion.Application.MyJob",
"assemblyName": "Furion.Application",
"description": null,
"concurrent": true,
"includeAnnotations": false,
"properties": "{}",
"updatedTime": "2022-11-18T22:56:47.4149299+08:00"
}
  1. 转换成 SQL 字符串
// 输出新增 SQL,使用 CamelCase 属性命名
var insertSql = jobDetail.ConvertToSQL("tbName"
, PersistenceBehavior.Appended
, NamingConventions.CamelCase);

// 输出删除 SQL,使用 Pascal 属性命名
var deleteSql = jobDetail.ConvertToSQL("tbName"
, PersistenceBehavior.Removed
, NamingConventions.Pascal);

// 输出更新 SQL,使用 UnderScoreCase 属性命名
var updateSql = jobDetail.ConvertToSQL("tbName"
, PersistenceBehavior.Updated
, NamingConventions.UnderScoreCase);

字符串打印如下:

-- 新增语句
INSERT INTO tbName(
[jobId],
[groupName],
[jobType],
[assemblyName],
[description],
[concurrent],
[includeAnnotations],
[properties],
[updatedTime]
)
VALUES(
'job1',
NULL,
'ConsoleApp13.MyJob',
'ConsoleApp13',
NULL,
1,
0,
'{}',
'2022/11/18 23:16:18'
);

-- 删除语句
DELETE FROM tbName
WHERE [JobId] = 'job1';

-- 更新语句
UPDATE tbName
SET
[job_id] = 'job1',
[group_name] = NULL,
[job_type] = 'ConsoleApp13.MyJob',
[assembly_name] = 'ConsoleApp13',
[description] = NULL,
[concurrent] = 1,
[include_annotations] = 0,
[properties] = '{}',
[updated_time] = '2022/11/18 23:16:18'
WHERE [job_id] = 'job1';
  1. 转换成 Monitor 字符串
var monitor = jobDetail.ConvertToMonitor();

字符串打印如下:

┏━━━━━━━━━━━  JobDetail ━━━━━━━━━━━
┣ ConsoleApp13.MyJob

┣ jobId: job1
┣ groupName:
┣ jobType: Furion.Application.MyJob
┣ assemblyName: Furion.Application
┣ description:
┣ concurrent: True
┣ includeAnnotations: False
┣ properties: {}
┣ updatedTime: 2022/11/18 23:26:47
┗━━━━━━━━━━━ JobDetail ━━━━━━━━━━━

26.1.4 作业处理程序 IJob

作业处理程序是作业具体执行的业务逻辑代码,通常由程序员编写,作业处理程序必须实现 IJob 接口。

26.1.4.1 如何定义

public class MyJob : IJob
{
public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
// your code...
}
}

26.1.4.2 依赖注入

实现 IJob 的作业处理程序类型默认注册为 单例那么只要是单例的服务,皆可以通过构造函数注入,如:ILogger<>IConfiguration

public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
private readonly IConfiguration _configuration;

public MyJob(ILogger<MyJob> logger
, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger} {count}");

await Task.CompletedTask;
}
}
  • 如果是非单例的接口,如瞬时或范围服务,可通过 IServiceProvder 创建
public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
private readonly IConfiguration _configuration;
private readonly IServiceProvider _serviceProvider;

public MyJob(ILogger<MyJob> logger
, IConfiguration configuration
, IServiceProvider serviceProvider)
{
_logger = logger;
_configuration = configuration;
_serviceProvider = serviceProvider;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
using var serviceScope = _serviceProvider.CreateScope();
var repository = serviceScope.ServiceProvider.GetService<IRepository<User>>();

_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");

await Task.CompletedTask;
}
}
  • 针对高频定时任务,比如每秒执行一次,或者更频繁的任务

为了避免频繁创建作用域和销毁作用域,可创建长范围的作用域。

public class MyJob : IJob, IDisposable
{
private readonly ILogger<MyJob> _logger;
private readonly IConfiguration _configuration;
private readonly IServiceScope _serviceScope;

public MyJob(ILogger<MyJob> logger
, IConfiguration configuration
, IServiceProvider serviceProvider)
{
_logger = logger;
_configuration = configuration;
_serviceScope = serviceProvider.CreateScope();
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
var repository = _serviceScope.ServiceProvider.GetService<IRepository<User>>();

_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");

await Task.CompletedTask;
}

public void Dispose()
{
_serviceScope?.Dispose();
}
}

26.1.4.3 JobExecutingContext 上下文

JobExecutingContext 上下文作为 ExecuteAsync 方法的第一个参数,提供了以下几个运行时信息:

  • JobExecutingContext 属性列表
    • JobId:作业 Id
    • TriggerId:当前触发器 Id
    • JobDetail:作业信息
    • Trigger:作业触发器
    • OccurrenceTime:调度器检查时间,最准确的记录时间
    • ExecutingTime:实际执行时间(可能存在误差)
  • JobExecutingContext 方法列表
    • .ConvertToJSON(naming):将作业计划转换成 JSON 字符串

26.1.4.4 作业被取消处理

一下情况下,作业被临时暂停或取消,但作业处理程序还未处理完成,这个时候我们可以选择取消还是继续执行,如果选择同步取消:

public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;

public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
// 创建任务关联取消 Token
var cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(stoppingToken);

try
{
// 传递给异步服务
await todo.SomeMethodAsync(cancellationTokenSource.Token);
}
catch (Exception ex)
{
// ...
}

_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");
}
}

这样当作业被取消时,SomeMethodAsync 也会同步取消。

26.1.5 作业触发器 Trigger 及构建器

26.1.5.1 关于作业触发器

框架提供了 Trigger 类型来描述作业具体的触发时间,Trigger 类型提供以下只读属性

属性名属性类型默认值说明
TriggerIdstring作业触发器 Id
JobIdstring作业 Id
TriggerTypestring作业触发器类型,存储的是类型的 FullName
AssemblyNamestring作业触发器类型所在程序集,存储的是程序集 Name
Argsstring作业触发器参数,运行时将反序列化为 object[] 类型并作为构造函数参数
Descriptionstring描述信息
StatusTriggerStatusReady作业触发器状态
StartTimeDateTime?起始时间
EndTimeDateTime?结束时间
LastRunTimeDateTime?最近运行时间
NextRunTimeDateTime?下一次运行时间
NumberOfRunslong0触发次数
MaxNumberOfRunslong0最大触发次数,0:不限制,n:N 次
NumberOfErrorslong0出错次数
MaxNumberOfErrorslong0最大出错次数,0:不限制,n:N 次
NumRetriesint0重试次数
RetryTimeoutint1000重试间隔时间,毫秒单位
StartNowbooltrue是否立即启动
RunOnStartboolfalse是否启动时执行一次
UpdatedTimeDateTime?作业触发器更新时间

26.1.5.2 作业触发器状态

作业触发器状态指示了当前作业触发器的状态,使用 TriggerStatus 枚举类型(uint),该类型包含以下枚举成员。

枚举名枚举值说明
Backlog0积压,起始时间大于当前时间
Ready1就绪
Running2正在运行
Pause3暂停
Blocked4阻塞,本该执行但是没有执行
ErrorToReady5由失败进入就绪,运行错误当并未超出最大错误数,进入下一轮就绪
Archived6归档,结束时间小于当前时间
Panic7崩溃,错误次数超出了最大错误数
Overrun8超限,运行次数超出了最大限制
Unoccupied9无触发时间,下一次执行时间为 null
NotStart10未启动
Unknown11未知作业触发器,作业触发器运行时类型为 null
Unhandled12未知作业处理程序,作业处理程序类型运行时类型为 null

26.1.5.3 关于作业触发器构建器

作业触发器 Trigger 是作业调度模块提供运行时的只读类型,那么我们该如何创建或变更 Trigger 对象呢?

TriggerBuilder 是作业调度模块提供可用来生成运行时 Trigger 的类型,这样做的好处可避免外部直接修改运行时 Trigger 数据,还能实现任何修改动作监听,也能避免多线程抢占情况。

作业调度模块提供了多种方式用来创建 TriggerBuilder 对象。

  1. 通过 Create 静态方法创建
// 根据 Trigger 派生类类型创建
var triggerBuilder = TriggerBuilder.Create<PeriodTrigger>();

// 根据 Type 类型创建
var triggerBuilder = TriggerBuilder.Create(typeof(PeriodTrigger));

// 根据程序集名称和类型完全限定名(FullName)创建
var triggerBuilder = TriggerBuilder.Create("Furion", "Furion.Schedule.PeriodTrigger");
  1. 通过 Trigger 类型创建

这种方式常用于在运行时更新作业触发器。

var triggerBuilder = TriggerBuilder.From(trigger);
  1. 通过 JSON 字符串创建

该方式非常灵活,可从配置文件,JSON 字符串,或其他能够返回 JSON 字符串的地方创建。

var triggerBuilder = TriggerBuilder.From(@"
{
""triggerId"": ""job1_trigger1"",
""triggerType"": ""Furion.Schedule.PeriodSecondsTrigger"",
""assemblyName"": ""Furion"",
""args"": ""[5]"",
""description"": null,
""status"": 2,
""startTime"": null,
""endTime"": null,
""lastRunTime"": ""2022-11-20T18:31:56.6859410+08:00"",
""nextRunTime"": ""2022-11-20T18:32:01.7233546+08:00"",
""numberOfRuns"": 1,
""maxNumberOfRuns"": 0,
""numberOfErrors"": 0,
""maxNumberOfErrors"": 0,
""numRetries"": 0,
""retryTimeout"": 1000,
""startNow"": true,
""runOnStart"": false,
""updatedTime"": ""2022-11-20T18:31:56.7233630+08:00""
}");

如果使用的是 .NET7,可使用 """ 避免转义,如:

var triggerBuilder = TriggerBuilder.From("""
{
"triggerId": "job1_trigger1",
"triggerType": "Furion.Schedule.PeriodSecondsTrigger",
"assemblyName": "Furion",
"args": "[5]",
"description": null,
"status": 2,
"startTime": null,
"endTime": null,
"lastRunTime": "2022-11-20T18:31:56.6859410+08:00",
"nextRunTime": "2022-11-20T18:32:01.7233546+08:00",
"numberOfRuns": 1,
"maxNumberOfRuns": 0,
"numberOfErrors": 0,
"maxNumberOfErrors": 0,
"numRetries": 0,
"retryTimeout": 1000,
"startNow": true,
"runOnStart": false,
"updatedTime": "2022-11-20T18:31:56.7233630+08:00"
}
""");
关于属性名匹配规则

支持 CamelCase(驼峰命名法)Pascal(帕斯卡命名法) 命名方式。

不支持 UnderScoreCase(下划线命名法) ,如 "include_annotations": true

  1. 还可以通过 Clone 静态方法从一个 TriggerBuilder 创建
var triggerBuilder = TriggerBuilder.Clone(fromTriggerBuilder);
克隆说明

克隆操作只会克隆 AssemblyNameTriggerTypeArgsDescriptionStartTimeEndTimeMaxNumberOfRunsMaxNumberOfErrorsNumRetriesRetryTimeoutStartNowRunOnStart

不会克隆 TriggerIdJobIdStatusLastRunTimeNextRunTimeNumberOfRunsNumberOfErrorsUpdatedTime

  1. 还可以通过 LoadFrom 实例方法填充当前的 TriggerBuilder

比如可以传递匿名类型,类类型:

// 会覆盖所有相同的值
triggerBuilder.LoadFrom(new
{
Description = "我是描述",
StartTime = DateTime.Now
});

// 支持多个填充,还可以配置跳过 null 值覆盖
triggerBuilder.LoadFrom(new
{
Description = "我是另外一个描述",
StartTime = DateTime.Now,
LastRunTime = default(DateTime?) // 会跳过赋值
}, ignoreNullValue: true);
关于属性名匹配规则

支持 CamelCase(驼峰命名法)Pascal(帕斯卡命名法)UnderScoreCase(下划线命名法) 命名方式。

26.1.5.4 内置作业触发器构建器

为了方便快速实现作业触发器,作业调度模块内置了 Period(间隔)Cron(表达式) 作业触发器,可通过 TriggerBuilder 类型或 Triggers 静态类创建。

  • TriggerBuilder 方式
// 创建毫秒周期(间隔)作业触发器构建器
var triggerBuilder = TriggerBuilder.Period(5000);

// 创建秒周期(间隔)作业触发器构建器
var triggerBuilder = TriggerBuilder.PeriodSeconds(5);

// 创建 Cron 表达式作业触发器构建器
var triggerBuilder = TriggerBuilder.Cron("* * * * *", CronStringFormat.Default);
  • Triggers 方式,推荐

Triggers 具备 TriggerBuilder 所有的静态方法,另外还添加了不少更加便捷的静态方法。

// 创建毫秒周期(间隔)作业触发器构建器
var triggerBuilder = Triggers.Period(5000);

// 创建秒周期(间隔)作业触发器构建器
var triggerBuilder = Triggers.PeriodSeconds(5);

// 创建 Cron 表达式作业触发器构建器
var triggerBuilder = Triggers.Cron("* * * * *", CronStringFormat.Default);

// 创建每秒开始作业触发器构建器
var triggerBuilder = Triggers.Secondly();

// 创建每分钟开始作业触发器构建器
var triggerBuilder = Triggers.Minutely();

// 创建每小时开始作业触发器构建器
var triggerBuilder = Triggers.Hourly();

// 创建每天(午夜)开始作业触发器构建器
var triggerBuilder = Triggers.Daily();

// 创建每月1号(午夜)开始作业触发器构建器
var triggerBuilder = Triggers.Monthly();

// 创建每周日(午夜)开始作业触发器构建器
var triggerBuilder = Triggers.Weekly();

// 创建每年1月1号(午夜)开始作业触发器构建器
var triggerBuilder = Triggers.Yearly();

26.1.5.5 自定义作业触发器

除了使用作业调度模块提供了 PeriodTriggerCronTrigger 以外,可自定义作业触发器,只需要继承 Trigger 并重写 GetNextOccurrence 方法即可,如实现一个间隔两秒的作业触发器。

public class TwiceSecondTrigger : Trigger
{
public override DateTime GetNextOccurrence(DateTime startAt)
{
return startAt.AddSeconds(2);
}
}

之后可通过 Triggers.CreateTriggers.Create 创建即可:

services.AddSchedule(options =>
{
options.AddJob<MyJob>(Triggers.Create<TwiceSecondTrigger>());
});

查看作业执行结果:

info: 2022-11-20 21:13:02.4726416 +08:00 星期日 L ConsoleApp13.MyJob[0] #9
job1 job1_trigger1 2022/11/20 21:13:02 ConsoleApp13.TwiceSecondTrigger
info: 2022-11-20 21:13:04.4591328 +08:00 星期日 L ConsoleApp13.MyJob[0] #6
job1 job1_trigger1 2022/11/20 21:13:04 ConsoleApp13.TwiceSecondTrigger
info: 2022-11-20 21:13:06.4677716 +08:00 星期日 L ConsoleApp13.MyJob[0] #4
job1 job1_trigger1 2022/11/20 21:13:06 ConsoleApp13.TwiceSecondTrigger
info: 2022-11-20 21:13:08.4726987 +08:00 星期日 L ConsoleApp13.MyJob[0] #14
job1 job1_trigger1 2022/11/20 21:13:08 ConsoleApp13.TwiceSecondTrigger
info: 2022-11-20 21:13:10.4827028 +08:00 星期日 L ConsoleApp13.MyJob[0] #9
job1 job1_trigger1 2022/11/20 21:13:10 ConsoleApp13.TwiceSecondTrigger
info: 2022-11-20 21:13:12.4936247 +08:00 星期日 L ConsoleApp13.MyJob[0] #14
job1 job1_trigger1 2022/11/20 21:13:12 ConsoleApp13.TwiceSecondTrigger

另外,自定义作业触发器还支持传递参数:

参数特别说明

如果自定义作业触发器包含参数,那么必须满足以下两个条件

  • 参数必须通过唯一的构造函数传入,有且最多只能拥有一个构造函数
  • 参数的类型只能是 intstringboolnull 或由它们组成的数组类型
public class SomeSecondTrigger : Trigger
{
public SomeSecondTrigger(int seconds) // 支持多个参数
{
Seconds = seconds;
}

private int Seconds { get; }

public override DateTime GetNextOccurrence(DateTime startAt)
{
return startAt.AddSeconds(Seconds);
}
}

之后可通过 Triggers.CreateTriggers.Create 创建并传入参数。

services.AddSchedule(options =>
{
options.AddJob<MyJob>(Triggers.Create<SomeSecondTrigger>(3)); // 3 秒执行一次
});

查看作业执行结果:

info: 2022-11-20 21:33:46.3074692 +08:00 星期日 L ConsoleApp13.MyJob[0] #4
job1 job1_trigger1 2022/11/20 21:33:46 ConsoleApp13.SomeSecondTrigger
info: 2022-11-20 21:33:49.3101667 +08:00 星期日 L ConsoleApp13.MyJob[0] #6
job1 job1_trigger1 2022/11/20 21:33:49 ConsoleApp13.SomeSecondTrigger
info: 2022-11-20 21:33:52.3222046 +08:00 星期日 L ConsoleApp13.MyJob[0] #8
job1 job1_trigger1 2022/11/20 21:33:52 ConsoleApp13.SomeSecondTrigger
info: 2022-11-20 21:33:55.3270737 +08:00 星期日 L ConsoleApp13.MyJob[0] #4
job1 job1_trigger1 2022/11/20 21:33:55 ConsoleApp13.SomeSecondTrigger
info: 2022-11-20 21:33:58.3293727 +08:00 星期日 L ConsoleApp13.MyJob[0] #6
job1 job1_trigger1 2022/11/20 21:33:58 ConsoleApp13.SomeSecondTrigger
info: 2022-11-20 21:34:01.3472296 +08:00 星期日 L ConsoleApp13.MyJob[0] #4
job1 job1_trigger1 2022/11/20 21:34:01 ConsoleApp13.SomeSecondTrigger

自定义作业触发器除了可重写 GetNextOccurrence 方法之后,还提供了 ShouldRunToString 方法可重写,如:

public class SomeSecondTrigger : Trigger
{
public SomeSecondTrigger(int seconds)
{
Seconds = seconds;
}

private int Seconds { get; }

public override DateTime GetNextOccurrence(DateTime startAt)
{
return startAt.AddSeconds(Seconds);
}

public override bool ShouldRun(JobDetail jobDetail, DateTime startAt)
{
// 在这里进一步控制,如果返回 false,则作业触发器跳过执行

return base.ShouldRun(jobDetail, startAt);
}

public override string ToString()
{
return $"自定义递增 {Seconds}s 触发器";
}
}

推荐重写 GetNextRunTimeToString 方法即可,如果重写了 ToString 方法,那么可以通过 ${trigger} 输出,如:

public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");
await Task.CompletedTask;
}
}

查看作业执行结果:

info: 2022-11-20 21:43:07.4570694 +08:00 星期日 L ConsoleApp13.MyJob[0] #4
job1 job1_trigger1 2022/11/20 21:43:07 自定义递增 3s 触发器
info: 2022-11-20 21:43:10.4629078 +08:00 星期日 L ConsoleApp13.MyJob[0] #9
job1 job1_trigger1 2022/11/20 21:43:10 自定义递增 3s 触发器

26.1.5.6 作业触发器特性

如果 JobBuilder 配置了 IncludeAnnotations 参数且为 true,那么将会自动解析 IJob 的实现类型的所有继承 TriggerAttribute 的特性,目前作业调度模块内置了以下作业触发器特性:

  • [Period(5000)]:毫秒周期(间隔)作业触发器特性
  • [PeriodSeconds(5)]:秒周期(间隔)作业触发器特性
  • [Cron("* * * * *", CronStringFormat.Default]:Cron 表达式作业触发器特性
  • [Secondly]:每秒开始作业触发器特性
  • [Minutely]:每分钟开始作业触发器特性
  • [Hourly]:每小时开始作业触发器特性
  • [Daily]:每天(午夜)开始作业触发器特性
  • [Monthly]:每月 1 号(午夜)开始作业触发器特性
  • [Weekly]:每周日(午夜)开始作业触发器特性
  • [Yearly]:每年 1 月 1 号(午夜)开始作业触发器特性

使用如下:

services.AddSchedule(options =>
{
options.AddJob(JobBuilder.Create<MyJob>().SetIncludeAnnotations(true));

// 也支持自定义配置 + 特性扫描
options.AddJob(JobBuilder.Create<MyJob>().SetIncludeAnnotations(true)
, Triggers.PeriodSeconds(5));
});
[Minutely]
[PeriodSeconds(5)]
[Cron("* * * * *")]
public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");
await Task.CompletedTask;
}
}

查看作业执行结果:

info: 2022-11-20 22:10:54.5027217 +08:00 星期日 L ConsoleApp13.MyJob[0] #9
job1 job1_trigger2 2022/11/20 22:10:54 5000ms
info: 2022-11-20 22:10:59.4948832 +08:00 星期日 L ConsoleApp13.MyJob[0] #9
job1 job1_trigger2 2022/11/20 22:10:59 5000ms
info: 2022-11-20 22:11:00.0353681 +08:00 星期日 L ConsoleApp13.MyJob[0] #6
job1 job1_trigger3 2022/11/20 22:11:00 * * * * *
info: 2022-11-20 22:11:00.0372492 +08:00 星期日 L ConsoleApp13.MyJob[0] #8
job1 job1_trigger1 2022/11/20 22:11:00 * * * * *
info: 2022-11-20 22:11:04.5094807 +08:00 星期日 L ConsoleApp13.MyJob[0] #8
job1 job1_trigger2 2022/11/20 22:11:04 5000ms

除了使用内置特性,我们还可以自定义作业触发器特性,如:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class SomeSecondAttribute : TriggerAttribute
{
public SomeSecondAttribute(int seconds)
: base(typeof(SomeSecondTrigger), seconds)
{
}
}

使用如下:

[SomeSecond(3)]
public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;
public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");
await Task.CompletedTask;
}
}

查看作业执行结果:

info: 2022-11-20 22:16:22.0933295 +08:00 星期日 L ConsoleApp13.MyJob[0] #9
job1 job1_trigger1 2022/11/20 22:16:22 自定义递增 3s 触发器
info: 2022-11-20 22:16:25.0823563 +08:00 星期日 L ConsoleApp13.MyJob[0] #8
job1 job1_trigger1 2022/11/20 22:16:25 自定义递增 3s 触发器
info: 2022-11-20 22:16:28.0910993 +08:00 星期日 L ConsoleApp13.MyJob[0] #6
job1 job1_trigger1 2022/11/20 22:16:28 自定义递增 3s 触发器
info: 2022-11-20 22:16:31.0937955 +08:00 星期日 L ConsoleApp13.MyJob[0] #9
job1 job1_trigger1 2022/11/20 22:16:31 自定义递增 3s 触发器
info: 2022-11-20 22:16:34.1034905 +08:00 星期日 L ConsoleApp13.MyJob[0] #6
job1 job1_trigger1 2022/11/20 22:16:34 自定义递增 3s 触发器

作业触发器特性还提供了多个属性配置,如:

  • TriggerId:作业触发器 Id,string 类型
  • Description:描述信息,string 类型
  • StartTime:起始时间,string 类型
  • EndTime:结束时间,string 类型
  • MaxNumberOfRuns:最大触发次数,long 类型,0:不限制;n:N 次
  • MaxNumberOfErrors:最大出错次数,long 类型,0:不限制;n:N 次
  • NumRetries:重试次数,int 类型,默认值 0
  • RetryTimeout:重试间隔时间,int 类型,默认值 1000
  • StartNow:是否立即启动,bool 类型,默认值 true
  • RunOnStart:是否启动时执行一次,bool 类型,默认值 false

使用如下:

[PeriodSeconds(5, TriggerId = "trigger1", Description = "这是一段描述")]
public class MyJob : IJob
{

26.1.5.7 设置作业触发器构建器

TriggerBuilder 提供了和 Trigger 完全匹配的 Set[属性名] 方法来配置作业触发器各个属性,如:

 services.AddSchedule(options =>
{
var triggerBuilder = Triggers.Period(5000)
.SetTriggerId("trigger1") // 作业触发器 Id
.SetTriggerType("Furion", "Furion.Schedule.PeriodTrigger") // 作业触发器类型,支持多个重载
.SetTriggerType<PeriodTrigger>() // 作业触发器类型,支持多个重载
.SetTriggerType(typeof(PeriodTrigger)) // 作业触发器类型,支持多个重载
.SetArgs("[5000]") // 作业触发器参数,支持多个重载
.SetArgs(5000) // 作业触发器参数,支持多个重载
.SetDescription("作业触发器描述") // 作业触发器描述
.SetStatus(TriggerStatus.Ready) // 作业触发器状态
.SetStartTime(DateTime.Now) // 作业触发器起始时间
.SetEndTime(DateTime.Now.AddMonths(1)) // 作业触发器结束时间
.SetLastRunTime(DateTime.Now.AddSeconds(-5)) // 作业触发器最近运行时间
.SetNextRunTime(DateTime.Now.AddSeconds(5)) // 作业触发器下一次运行时间
.SetNumberOfRuns(1) // 作业触发器触发次数
.SetMaxNumberOfRuns(100) // 作业触发器最大触发器次数
.SetNumberOfErrors(1) // 作业触发器出错次数
.SetMaxNumberOfErrors(100) // 作业触发器最大出错次数
.SetNumRetries(3) // 作业触发器出错重试次数
.SetRetryTimeout(1000) // 作业触发器重试间隔时间
.SetStartNow(true) // 作业触发器是否立即启动
.SetRunOnStart(false) // 作业触发器是否启动时执行一次
;

options.AddJob<MyJob>(triggerBuilder);
});

26.1.5.8 多种格式字符串输出

TriggerTriggerBuilder 都提供了多种将自身转换成特定格式的字符串。

  1. 转换成 JSON 字符串
var json = trigger.ConvertToJSON();

字符串打印如下:

{
"triggerId": "job1_trigger1",
"jobId": "job1",
"triggerType": "Furion.Schedule.PeriodSecondsTrigger",
"assemblyName": "Furion",
"args": "[5]",
"description": null,
"status": 2,
"startTime": null,
"endTime": null,
"lastRunTime": "2022-11-20T22:25:03.8176033+08:00",
"nextRunTime": "2022-11-20T22:25:08.8385903+08:00",
"numberOfRuns": 1,
"maxNumberOfRuns": 0,
"numberOfErrors": 0,
"maxNumberOfErrors": 0,
"numRetries": 0,
"retryTimeout": 1000,
"startNow": true,
"runOnStart": false,
"updatedTime": "2022-11-20T22:25:03.8386511+08:00"
}
  1. 转换成 SQL 字符串
// 输出新增 SQL,使用 CamelCase 属性命名
var insertSql = trigger.ConvertToSQL("tbName"
, PersistenceBehavior.Appended
, NamingConventions.CamelCase);

// 输出删除 SQL,使用 Pascal 属性命名
var deleteSql = trigger.ConvertToSQL("tbName"
, PersistenceBehavior.Removed
, NamingConventions.Pascal);

// 输出更新 SQL,使用 UnderScoreCase 属性命名
var updateSql = trigger.ConvertToSQL("tbName"
, PersistenceBehavior.Updated
, NamingConventions.UnderScoreCase);

字符串打印如下:

-- 新增语句
INSERT INTO tbName(
[triggerId],
[jobId],
[triggerType],
[assemblyName],
[args],
[description],
[status],
[startTime],
[endTime],
[lastRunTime],
[nextRunTime],
[numberOfRuns],
[maxNumberOfRuns],
[numberOfErrors],
[maxNumberOfErrors],
[numRetries],
[retryTimeout],
[startNow],
[runOnStart],
[updatedTime]
)
VALUES(
'job1_trigger1',
'job1',
'Furion.Schedule.PeriodSecondsTrigger',
'Furion',
'[5]',
NULL,
2,
NULL,
NULL,
'2022/11/20 22:27:47',
'2022/11/20 22:27:52',
1,
0,
0,
0,
0,
1000,
1,
0,
'2022/11/20 22:27:47'
);

-- 删除语句
DELETE FROM tbName
WHERE [TriggerId] = 'job1_trigger1' AND [JobId] = 'job1';

-- 更新语句
UPDATE tbName
SET
[trigger_id] = 'job1_trigger1',
[job_id] = 'job1',
[trigger_type] = 'Furion.Schedule.PeriodSecondsTrigger',
[assembly_name] = 'Furion',
[args] = '[5]',
[description] = NULL,
[status] = 2,
[start_time] = NULL,
[end_time] = NULL,
[last_run_time] = '2022/11/20 22:27:47',
[next_run_time] = '2022/11/20 22:27:52',
[number_of_runs] = 1,
[max_number_of_runs] = 0,
[number_of_errors] = 0,
[max_number_of_errors] = 0,
[num_retries] = 0,
[retry_timeout] = 1000,
[start_now] = 1,
[run_on_start] = 0,
[updated_time] = '2022/11/20 22:27:47'
WHERE [trigger_id] = 'job1_trigger1' AND [job_id] = 'job1';
  1. 转换成 Monitor 字符串
var monitor = trigger.ConvertToMonitor();

字符串打印如下:

┏━━━━━━━━━━━  Trigger ━━━━━━━━━━━
┣ Furion.Schedule.PeriodSecondsTrigger

┣ triggerId: job1_trigger1
┣ jobId: job1
┣ triggerType: Furion.Schedule.PeriodSecondsTrigger
┣ assemblyName: Furion
┣ args: [5]
┣ description:
┣ status: Running
┣ startTime:
┣ endTime:
┣ lastRunTime: 2022/11/20 22:30:41
┣ nextRunTime: 2022/11/20 22:30:46
┣ numberOfRuns: 1
┣ maxNumberOfRuns: 0
┣ numberOfErrors: 0
┣ maxNumberOfErrors: 0
┣ numRetries: 0
┣ retryTimeout: 1000
┣ startNow: True
┣ runOnStart: False
┣ updatedTime: 2022/11/20 22:30:41
┗━━━━━━━━━━━ Trigger ━━━━━━━━━━━

26.1.6 作业计划 Scheduler 及构建器

26.1.6.1 关于作业计划

所谓的作业计划(Scheduler)是将作业信息(JobDetail),作业触发器(Trigger)和作业处理程序(IJob)关联起来,并添加到作业调度器中等待调度执行。

作为计划(Scheduler)类型对外是不公开的,但提供了对应的 IScheduler 接口进行操作。

26.1.6.2 关于作业计划构建器

作业计划 Scheduler 是作业调度模块提供运行时的只读类型,那么我们该如何创建或变更 Scheduler 对象呢?

SchedulerBuilder 是作业调度模块提供可用来生成运行时 Scheduler 的类型,这样做的好处可避免外部直接修改运行时 Scheduler 数据,还能实现任何修改动作监听,也能避免多线程抢占情况。

作业调度模块提供了多种方式用来创建 SchedulerBuilder 对象。

  1. 通过 Create 静态方法创建
// 创建作业计划必须传入 JoBuilder 和 0或1个以上的 TiggerBuilder
var schedulerBuilder = SchedulerBuilder.Create(
JobBuilder.Create<MyJob>()
, Triggers.PeriodSeconds(5), Triggers.Minutely());

// 添加到作业调度器中
services.AddSchedule(options =>
{
options.AddJob(schedulerBuilder);
});
  1. 通过 JSON 字符串创建

该方式非常灵活,可从配置文件,JSON 字符串,或其他能够返回 JSON 字符串的地方创建。

var schedulerBuilder = SchedulerBuilder.From(@"
{
""jobDetail"": {
""jobId"": ""job1"",
""groupName"": null,
""jobType"": ""ConsoleApp32.MyJob"",
""assemblyName"": ""ConsoleApp32"",
""description"": null,
""concurrent"": true,
""includeAnnotations"": false,
""properties"": ""{}"",
""updatedTime"": ""2022-11-17T09:25:47.0471107+08:00""
},
""triggers"": [
{
""triggerId"": ""job1_trigger1"",
""triggerType"": ""Furion.Schedule.PeriodSecondsTrigger"",
""assemblyName"": ""Furion"",
""args"": ""[5]"",
""description"": null,
""status"": 2,
""startTime"": null,
""endTime"": null,
""lastRunTime"": ""2022-11-20T18:31:56.6859410+08:00"",
""nextRunTime"": ""2022-11-20T18:32:01.7233546+08:00"",
""numberOfRuns"": 1,
""maxNumberOfRuns"": 0,
""numberOfErrors"": 0,
""maxNumberOfErrors"": 0,
""numRetries"": 0,
""retryTimeout"": 1000,
""startNow"": true,
""runOnStart"": false,
""updatedTime"": ""2022-11-20T18:31:56.7233630+08:00""
}
]
}");

// 添加到作业调度器中
services.AddSchedule(options =>
{
options.AddJob(schedulerBuilder);
});

如果使用的是 .NET7,可使用 """ 避免转义,如:

var schedulerBuilder = SchedulerBuilder.From("""
{
"jobDetail": {
"jobId": "job1",
"groupName": null,
"jobType": "Furion.Application.MyJob",
"assemblyName": "Furion.Application",
"description": null,
"concurrent": true,
"includeAnnotations": false,
"properties": "{}",
"updatedTime": "2022-11-17T09:25:47.0471107+08:00"
},
"triggers": [
{
"triggerId": "job1_trigger1",
"triggerType": "Furion.Schedule.PeriodSecondsTrigger",
"assemblyName": "Furion",
"args": "[5]",
"description": null,
"status": 2,
"startTime": null,
"endTime": null,
"lastRunTime": "2022-11-20T18:31:56.6859410+08:00",
"nextRunTime": "2022-11-20T18:32:01.7233546+08:00",
"numberOfRuns": 1,
"maxNumberOfRuns": 0,
"numberOfErrors": 0,
"maxNumberOfErrors": 0,
"numRetries": 0,
"retryTimeout": 1000,
"startNow": true,
"runOnStart": false,
"updatedTime": "2022-11-20T18:31:56.7233630+08:00"
}
]
}
""");
关于属性名匹配规则

支持 CamelCase(驼峰命名法)Pascal(帕斯卡命名法) 命名方式。

不支持 UnderScoreCase(下划线命名法) ,如 "include_annotations": true

  1. 还可以通过 Clone 静态方法从一个 SchedulerBuilder 创建
var schedulerBuilder = SchedulerBuilder.Clone(fromSchedulerBuilder);
克隆说明

克隆操作将克隆 JobBuilderTriggerBuilders,同时 Behavior 会被标记为 PersistenceBehavior.Appended

26.1.6.3 设置作业计划构建器

Scheduler 提供了多个方法操作 JobBuilderTriggerBuilder,如:

// 获取当前的作业信息构建器
var jobBuilder = schedulerBuilder.GetJobBuilder();

// 更新当前作业信息构建器
schedulerBuilder.UpdateJobBuilder(jobBuilder.SetDescription("新的描述"));

// 获取所有的作业触发器构建器集合
var triggerBuilders = schedulerBuilder.GetTriggerBuilders();

// 获取单个作业触发器构建器
var triggerBuilder = schedulerBuilder.GetTriggerBuilder("job1_trigger1");

// 新增作业触发器构建器
schedulerBuilder.AddTriggerBuilder(Triggers.Minutely());
// 也支持链式添加或添加多个
schedulerBuilder.AddTriggerBuilder(Triggers.Minutely()).AddTriggerBuilder(Trigger.Hourly());
schedulerBuilder.AddTriggerBuilders(Trigger.Minutely(), Trigger.Hourly());

// 更新作业触发器构建器
schedulerBuilder.UpdateTriggerBuilder(triggerBuilder.SetDescription("新的触发器描述"));
// 也支持链式更新或更新多个
schedulerBuilder.UpdateTriggerBuilder(triggerBuilder1).UpdateTriggerBuilder(triggerBuilder2);
schedulerBuilder.UpdateTriggerBuilders(triggerBuilder1, triggerBuilder2);

// 删除作业触发器构建器
schedulerBuilder.RemoveTriggerBuilder(triggerBuilder);
// 可以根据作业触发器 Id 删除
schedulerBuilder.RemoveTriggerBuilder("job1_trigger1", out var builder);
// 也支持链式删除或删除多个
schedulerBuilder.RemoveTriggerBuilder(triggerBuilder1).RemoveTriggerBuilder(triggerBuilder2);
schedulerBuilder.RemoveTriggerBuilders(triggerBuilder1, triggerBuilder2);
schedulerBuilder.RemoveTriggerBuilder("job1_trigger1", out var triggerBuilder).RemoveTriggerBuilder("job1_trigger2", out _);
schedulerBuilder.RemoveTriggerBuilder("job1_trigger1", "job1_trigger2");

// 清空所有作业触发器构建器
schedulerBuilder.ClearTriggerBuilders();

除了提供上面的 CURD 操作以外,还提供了可以更改 SchedulerBuilder持久化行为的方法,如:

// 标记当前作业计划构建器为新增状态
schedulerBuilder.Appended(); // 默认值
// 标记当前作业计划构建器为更新状态
schedulerBuilder.Updated();
// 标记当前作业计划构建器为删除状态
schedulerBuilder.Removed();

26.1.6.4 多种格式字符串输出

SchedulerSchedulerBuilder 都提供了多种将自身转换成特定格式的字符串。

  1. 转换成 JSON 字符串
var json = schedulerBuilder.ConvertToJSON();

字符串打印如下:

{
"jobDetail": {
"jobId": "job1",
"groupName": null,
"jobType": "Furion.Application.MyJob",
"assemblyName": "Furion.Application",
"description": null,
"concurrent": true,
"includeAnnotations": false,
"properties": "{}",
"updatedTime": "2022-11-17T09:25:47.0471107+08:00"
},
"triggers": [
{
"triggerId": "job1_trigger1",
"jobId": null,
"triggerType": "Furion.Schedule.PeriodSecondsTrigger",
"assemblyName": "Furion",
"args": "[5]",
"description": null,
"status": 2,
"startTime": null,
"endTime": null,
"lastRunTime": "2022-11-20T18:31:56.6859410+08:00",
"nextRunTime": "2022-11-20T18:32:01.7233546+08:00",
"numberOfRuns": 1,
"maxNumberOfRuns": 0,
"numberOfErrors": 0,
"maxNumberOfErrors": 0,
"numRetries": 0,
"retryTimeout": 1000,
"startNow": true,
"runOnStart": false,
"updatedTime": "2022-11-20T18:31:56.7233630+08:00"
}
]
}

26.1.7 作业调度器 ScheduleOptionsBuilder 配置选项

26.1.7.1 关于 ScheduleOptionsBuilder

ScheduleOptionsBuilder 配置选项主要是用来初始化调度作业服务和作业调度器相关配置的。只作为 services.AddSchedule 服务注册的配置参数,如:

// 通过委托的方式配置
services.AddSchedule(options =>
{
// options 类型为 ScheduleOptionsBuilder
});

// 自行创建对象实例方式配置
var scheduleOptionsBuilder = new ScheduleOptionsBuilder();
services.AddSchedule(scheduleOptionsBuilder);

26.1.7.2 ScheduleOptionsBuilder 内置属性和方法

  • 内置属性配置
services.AddSchedule(options =>
{
// 是否使用 UTC 时间,该配置主要用来作为作业调度器检查时间格式的依据
options.UseUtcTimestamp = false;

// 是否输出作业调度器日志
options.LogEnabled = true;

// 定义未捕获的异常,通常是 Task 异常
options.UnobservedTaskExceptionHandler = (obj, args) =>
{
};
});
  • 内置方法配置
services.AddSchedule(options =>
{
// 添加作业
options.AddJob(schedulerBuilder);
options.AddJob(jobBuilder, triggerBuilder, ...);
options.AddJob<MyJob>(triggerBuilder, ...);
options.AddJob<MyJob>("作业 Id", triggerBuilder, ...);
options.AddJob<MyJob>("作业 Id", concurrent: true, triggerBuilder, ...);
options.AddJob<MyJob>(concurrent: true, triggerBuilder, ...);

// 添加作业执行监视器
options.AddMonitor<YourJobMonitor>();

// 添加作业执行器
options.AddExecutor<YourJobMonitor>();

// 添加作业持久化器
options.AddPersistence<YourJobPersistence>();
});

26.1.8 作业监视器 IJobMonitor

调度作业服务提供了 IJobMonitor 监视器接口,实现该接口可以监视所有作业处理程序执行事件,包括 执行之前、执行之后,执行异常

如添加 YourJobMonitor

public class YourJobMonitor : IJobMonitor
{
private readonly ILogger<YourJobMonitor> _logger;
public YourJobMonitor(ILogger<YourJobMonitor> logger)
{
_logger = logger;
}

public Task OnExecutingAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation("执行之前:{JobId} {TriggerId}", context.JobId, context.TriggerId);
return Task.CompletedTask;
}

public Task OnExecutedAsync(JobExecutedContext context, CancellationToken stoppingToken)
{
_logger.LogInformation("执行之后:{JobId} {TriggerId}", context.JobId, context.TriggerId);

if (context.Exception != null)
{
_logger.LogError(context.Exception, "执行出错啦:{JobId} {TriggerId}", context.JobId, context.TriggerId);
}

return Task.CompletedTask;
}
}

最后,在注册 Schedule 服务中注册 YourJobMonitor

services.AddSchedule(options =>
{
// 添加作业执行监视器
builder.AddMonitor<YourJobMonitor>();
});

执行结果如下:

info: 2022-11-21 13:41:49.2144716 +08:00 星期一 L ConsoleApp32.YourJobMonitor[0] #9
执行之前:job1 job1_trigger1
info: 2022-11-21 13:41:49.2216598 +08:00 星期一 L ConsoleApp32.MyJob[0] #9
job1 job1_trigger1 2022/11/21 13:41:49 5000ms
info: 2022-11-21 13:41:49.2249096 +08:00 星期一 L ConsoleApp32.YourJobMonitor[0] #9
执行之后:job1 job1_trigger1

26.1.8.1 关于参数 JobExecutionContext

IJobMonitor 提供的 OnExecutingAsyncOnExecutedAsync 接口方法都包含一个 context 参数,前者是 JobExecutingContext,后者是 JobExecutedContext,它们都有一个共同的基类 JobExecutionContext

JobExecutionContext 提供了以下公共属性和公共方法:

  • JobExecutionContext 属性列表
    • JobId:作业 Id
    • TriggerId:当前触发器 Id
    • JobDetail:作业信息
    • Trigger:作业触发器
    • OccurrenceTime:调度器检查时间,最准确的记录时间
  • JobExecutionContext 方法列表
    • .ConvertToJSON(naming):将作业计划转换成 JSON 字符串

  • JobExecutingContext 在基类基础上拓展了 ExecutingTime 属性:
    • ExecutingTime:执行前时间
  • JobExecutedContext 则在基类基础上拓展了 ExecutedTimeException 属性:
    • ExecutedTime:执行后时间
    • Exception:执行异常

26.1.9 作业执行器 IJobExecutor

调度作业服务提供了 IJobExecutor 执行器接口,可以让开发者自定义作业处理函数执行策略,如 超时控制,失败重试、熔断等等

如添加 YourJobExecutor

public class YourJobExecutor : IJobExecutor
{
public async Task ExecuteAsync(JobExecutingContext context, IJob jobHandler, CancellationToken stoppingToken)
{
// 实现失败重试策略,如失败重试 3 次
await Retry.InvokeAsync(async () =>
{
await jobHandler.ExecuteAsync(context, stoppingToken);
}, 3, 1000);
}
}

接着模拟 MyJob 执行出错:

public class MyJob : IJob
{
private readonly ILogger<MyJob> _logger;

public MyJob(ILogger<MyJob> logger)
{
_logger = logger;
}

public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
{
_logger.LogInformation($"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}");

throw new Exception("模拟出错");

await Task.CompletedTask;
}
}

最后,在注册 Schedule 服务中注册 YourJobExecutor

services.AddSchedule(options =>
{
options.AddMonitor<YourJobMonitor>();
// 添加作业执行器
options.AddExecutor<YourJobExecutor>();
options.AddJob<MyJob>(Triggers.PeriodSeconds(10));
});

执行结果如下:

info: 2022-11-21 14:10:33.3382344 +08:00 星期一 L ConsoleApp32.YourJobMonitor[0] #14
执行之前:job1 job1_trigger1
info: 2022-11-21 14:10:33.3447855 +08:00 星期一 L ConsoleApp32.MyJob[0] #14
job1 job1_trigger1 2022/11/21 14:10:33 10000ms
info: 2022-11-21 14:10:34.4217342 +08:00 星期一 L ConsoleApp32.MyJob[0] #14
job1 job1_trigger1 2022/11/21 14:10:33 10000ms
info: 2022-11-21 14:10:35.4952165 +08:00 星期一 L ConsoleApp32.MyJob[0] #14
job1 job1_trigger1 2022/11/21 14:10:33 10000ms
info: 2022-11-21 14:10:36.5719440 +08:00 星期一 L ConsoleApp32.MyJob[0] #14
job1 job1_trigger1 2022/11/21 14:10:33 10000ms
fail: 2022-11-21 14:10:36.7388113 +08:00 星期一 L System.Logging.ScheduleService[0] #14
Error occurred executing job1 job1_trigger1< 10000ms>.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
System.Exception: 模拟出错
at ConsoleApp32.MyJob.ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) in D:\Workplaces\Study\CSharp\ConsoleApp32\ConsoleApp32\MyJob.cs:line 19
at ConsoleApp32.YourJobExecutor.<>c__DisplayClass0_0.<<ExecuteAsync>b__0>d.MoveNext() in D:\Workplaces\Study\CSharp\ConsoleApp32\ConsoleApp32\YourJobExecutor.cs:line 18
--- End of stack trace from previous location ---
at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\Workplaces\OpenSources\Furion\framework\Furion\FriendlyException\Retry.cs:line 84
at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\Workplaces\OpenSources\Furion\framework\Furion\FriendlyException\Retry.cs:line 95
at ConsoleApp32.YourJobExecutor.ExecuteAsync(JobExecutingContext context, IJob jobHandler, CancellationToken stoppingToken) in D:\Workplaces\Study\CSharp\ConsoleApp32\ConsoleApp32\YourJobExecutor.cs:line 16
at Furion.Schedule.ScheduleHostedService.<>c__DisplayClass16_2.<<BackgroundProcessing>b__1>d.MoveNext() in D:\Workplaces\OpenSources\Furion\framework\Furion\Schedule\HostedServices\ScheduleHostedService.cs:line 188
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
info: 2022-11-21 14:10:36.7413303 +08:00 星期一 L ConsoleApp32.YourJobMonitor[0] #14
执行之后:job1 job1_trigger1
fail: 2022-11-21 14:10:36.7446968 +08:00 星期一 L ConsoleApp32.YourJobMonitor[0] #14
执行出错啦:job1 job1_trigger1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
System.InvalidOperationException: Error occurred executing job1 job1_trigger1< 10000ms>.
---> System.Exception: 模拟出错
at ConsoleApp32.MyJob.ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) in D:\Workplaces\Study\CSharp\ConsoleApp32\ConsoleApp32\MyJob.cs:line 19
at ConsoleApp32.YourJobExecutor.<>c__DisplayClass0_0.<<ExecuteAsync>b__0>d.MoveNext() in D:\Workplaces\Study\CSharp\ConsoleApp32\ConsoleApp32\YourJobExecutor.cs:line 18
--- End of stack trace from previous location ---
at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\Workplaces\OpenSources\Furion\framework\Furion\FriendlyException\Retry.cs:line 84
at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\Workplaces\OpenSources\Furion\framework\Furion\FriendlyException\Retry.cs:line 95
at ConsoleApp32.YourJobExecutor.ExecuteAsync(JobExecutingContext context, IJob jobHandler, CancellationToken stoppingToken) in D:\Workplaces\Study\CSharp\ConsoleApp32\ConsoleApp32\YourJobExecutor.cs:line 16
at Furion.Schedule.ScheduleHostedService.<>c__DisplayClass16_2.<<BackgroundProcessing>b__1>d.MoveNext() in D:\Workplaces\OpenSources\Furion\framework\Furion\Schedule\HostedServices\ScheduleHostedService.cs:line 188
--- End of inner exception stack trace ---
++++++++++++++++++++++++++++++++++++++++++++++++++++++++

26.1.10 作业计划工厂 ISchedulerFactory

作业计划工厂提供了程序运行时操作作业调度器,作业计划等诸多方法。

ISchedulerFactory 被注册为单例服务,允许在任何可依赖注入的服务获取,如:

public class YourService: IYourService
{
private readonly ISchedulerFactory _schedulerFactory;
public YourService(ISchedulerFactory schedulerFactory)
{
_schedulerFactory = schedulerFactory;
}

public void SomeMethod([FromServices]ISchedulerFactory schedulerFactory)
{
}
}

26.1.10.1 查找所有作业

// 返回的是 IScheduler 集合,不能访问 JobDetail 和 Triggers 属性
var jobs = _schedulerFactory.GetJobs();

// 返回的是 SchedulerModel 集合,可以访问 JobDetail 和 Triggers 属性
var jobsOfModels = _schedulerFactory.GetJobsOfModels();

// 还可以通过 group 查找
var jobs = _schedulerFactory.GetJobs("group1");
var jobsOfModels = _schedulerFactory.GetJobsOfModels("group1");

26.1.10.2 查找下一个触发的作业

// 返回的是 IScheduler 集合,不能访问 JobDetail 和 Triggers 属性
var nextRunJobs = _schedulerFactory.GetNextRunJobs(DateTime.Now);

// 返回的是 SchedulerModel 集合,可以访问 JobDetail 和 Triggers 属性
var nextRunJobsOfModels = _schedulerFactory.GetNextRunJobsOfModels(DateTime.Now);

// 还可以通过 group 查找
var nextRunJobs = _schedulerFactory.GetNextRunJobs("group1");
var nextRunJobsOfModels = _schedulerFactory.GetNextRunJobsOfModels("group1");

26.1.10.3 获取单个作业

// 返回 ScheduleResult 类型,如果存在返回 ScheduleResult.Succeed,否则返回 ScheduleResult.NotFound
var scheduleResult = _schedulerFactory.TryGetJob("job1", out var scheduler);

// 返回 IScheduler 类型
var scheduler = _schedulerFactory.GetJob("job1");

26.1.10.4 添加作业

  • 通过 SchedulerBuilder 方式
// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild
var scheduleResult = _schedulerFactory.TryAddJob(schedulerBuilder, out var scheduler);

// 无返回值,无错误
_schedulerFactory.AddJob(schedulerBuilder);

作业添加成功或失败分别输出日志:

info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The Scheduler of <job1> successfully added to the schedule.
warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The JobId of <job1> already exists.
  • 通过 JobBuilder + TriggerBuilder 方式
// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild
var schedulerResult = _schedulerFactory.TryAddJob(JobBuilder.Create<MyJob>()
, new[] { Triggers.PeriodSeconds(10) }
, out var scheduler);

// 无返回值,无错误
_schedulerFactory.AddJob(JobBuilder.Create<MyJob>()
, Triggers.PeriodSeconds(10));

作业添加成功或失败分别输出日志:

info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The Scheduler of <job1> successfully added to the schedule.
warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The JobId of <job1> already exists.
  • 通过 IJob 泛型方式
// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild
var schedulerResult = _schedulerFactory.TryAddJob<MyJob>(new[] { Triggers.PeriodSeconds(10) }
, out var scheduler);

// 无返回值,无错误
_schedulerFactory.AddJob<MyJob>(Triggers.PeriodSeconds(10));

作业添加成功或失败分别输出日志:

info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The Scheduler of <job1> successfully added to the schedule.
warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The JobId of <job1> already exists.
  • 通过 IJob 泛型 + JobId 方式
// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild
var schedulerResult = _schedulerFactory.TryAddJob<MyJob>("job1", new[] { Triggers.PeriodSeconds(10) }
, out var scheduler);

// 无返回值,无错误
_schedulerFactory.AddJob<MyJob>("job1", Triggers.PeriodSeconds(10));

作业添加成功或失败分别输出日志:

info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The Scheduler of <job1> successfully added to the schedule.
warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The JobId of <job1> already exists.
  • 通过 IJob 泛型 + JobId + Concurrent 方式
// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild
var schedulerResult = _schedulerFactory.TryAddJob<MyJob>("job1", concurrent: true
, new[] { Triggers.PeriodSeconds(10) }
, out var scheduler);

// 无返回值,无错误
_schedulerFactory.AddJob<MyJob>("job1", concurrent: true
, Triggers.PeriodSeconds(10));

作业添加成功或失败分别输出日志:

info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The Scheduler of <job1> successfully added to the schedule.
warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The JobId of <job1> already exists.
  • 通过 IJob 泛型 + Concurrent 方式
// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild
var schedulerResult = _schedulerFactory.TryAddJob<MyJob>(concurrent: true
, new[] { Triggers.PeriodSeconds(10) }
, out var scheduler);

// 无返回值,无错误
_schedulerFactory.AddJob<MyJob>(concurrent: true
, Triggers.PeriodSeconds(10));

作业添加成功或失败分别输出日志:

info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The Scheduler of <job1> successfully added to the schedule.
warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8
The JobId of <job1> already exists.

26.1.10.5 更新作业

  • 通过 SchedulerBuilder 方式
// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild
var scheduleResult = _schedulerFactory.TryUpdateJob(schedulerBuilder, out var scheduler);

// 无返回值,无错误
_schedulerFactory.UpdateJob(schedulerBuilder);

作业更新成功或失败分别输出日志:

info: 2022-11-21 18:13:13.0098096 +08:00 星期一 L System.Logging.ScheduleService[0] #14
The Scheduler of <job1> successfully updated to the schedule.
warn: 2022-11-21 18:13:18.0098096 +08:00 星期一 L System.Logging.ScheduleService[0] #14
The Scheduler of <job1> is not found.
warn: 2022-11-21 18:13:23.0098096 +08:00 星期一 L System.Logging.ScheduleService[0] #14
The Scheduler of <job1> update failed.
关于更新作业的背后行为

默认情况下,更新作业需要传递 SchedulerBuilder 对象,这个对象可通过 GetJob(jobId) 获取,如:

var schedulerBuilder = _schedulerFactory.GetJob("jobId")?.GetBuilder();

此时它的内部 Behavior 属性被标记为 PersistenceBehavior.Updated,也就是更新状态,那么对于这个构建器的任何操作都会标记为 更新 操作。

如果通过 .Appended().Removed() 方法标记之后,那么它的操作行为就发生变化了。

  • 如果被标记为 .Appended(),如:
schedulerBuilder.Appended();

那么它将进行 新增 操作,也就是内部会调用 TryAddJob(schedulerBuilder) 操作。

  • 如果被标记为 .Removed(),如:
schedulerBuilder.Removed();

那么它将进行 删除 操作,也就是内部会调用 TryRemoveJob(schedulerBuilder) 操作。

比如以下的代码实则是 新增删除 操作:

// 实际做新增操作
var scheduleResult = _schedulerFactory.TryUpdateJob(
SchedulerBuilder.Create(JobBuilder.Create<MyJob>())); // Create 方法默认标记为 Appended

// 实际做删除操作
var schedulerBuilder = _schedulerFactory.GetJob("jobId")?.GetBuilder();
var scheduleResult = _schedulerFactory.TryUpdateJob(schedulerBuilder.Removed()); // 标记为 Removed

26.1.10.6 删除作业

  • 通过 JobId 方式
// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild 或者 ScheduleResult.NotFound
var schedulerResult = _schedulerFactory.TryRemoveJob("job1", out var scheduler);

// 无返回值,无错误
_schedulerFactory.RemoveJob("job1");
  • 通过 IScheduler 方式
// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild 或者 ScheduleResult.NotFound
var schedulerResult = _schedulerFactory.TryRemoveJob(scheduler);

// 无返回值,无错误
_schedulerFactory.RemoveJob(scheduler);

作业删除成功或失败分别输出日志:

info: 2022-11-22 09:25:17.4763941 +08:00 星期二 L System.Logging.ScheduleService[0] #4
The Scheduler of <job1> successfully removed to the schedule.
warn: 2022-11-22 09:28:56.2241923 +08:00 星期二 L System.Logging.ScheduleService[0] #9
The Scheduler of <job12> is not found.
warn: 2022-11-22 09:29:01.2241923 +08:00 星期二 L System.Logging.ScheduleService[0] #9
The Scheduler of <job1> remove failed.

26.1.10.7 检查作业是否存在

var isExist = _schedulerFactory.ContainsJob("job1");

// 还可以通过 group 查找
var isExist = _schedulerFactory.ContainsJob("job1", "group1");

26.1.10.8 启动所有作业

_schedulerFactory.StartAll();

// 还可以通过 group 启动
_schedulerFactory.StartAll("group1");

作业调度器输出日志:

info: 2022-11-22 10:48:55.9619596 +08:00 星期二 L System.Logging.ScheduleService[0] #16
The <job1_trigger1> trigger for scheduler of <job1> successfully started to the schedule.
warn: 2022-11-22 10:48:56.0131304 +08:00 星期二 L System.Logging.ScheduleService[0] #16
Schedule Hosted Service cancels hibernation and GC.Collect().

26.1.10.9 暂停所有作业

 _schedulerFactory.PauseAll();

// 还可以通过 group 暂停
_schedulerFactory.PauseAll("group1");

作业调度器输出日志:

info: 2022-11-22 11:01:52.0008851 +08:00 星期二 L ConsoleApp32.MyJob[0] #10
job1 job1_trigger1 2022/11/22 11:01:51 5000ms
info: 2022-11-22 11:01:54.5265246 +08:00 星期二 L System.Logging.ScheduleService[0] #15
The <job1_trigger1> trigger for scheduler of <job1> successfully paused to the schedule.
warn: 2022-11-22 11:01:54.5535267 +08:00 星期二 L System.Logging.ScheduleService[0] #15
Schedule Hosted Service cancels hibernation and GC.Collect().

26.1.10.10 删除所有作业

 _schedulerFactory.RemoveAll();

// 还可以通过 group 删除
_schedulerFactory.RemoveAll("group1");

作业调度器输出日志:

info: 2022-11-22 11:04:19.4838792 +08:00 星期二 L ConsoleApp32.MyJob[0] #14
job1 job1_trigger1 2022/11/22 11:04:19 5000ms
warn: 2022-11-22 11:04:23.0726721 +08:00 星期二 L System.Logging.ScheduleService[0] #9
Schedule Hosted Service cancels hibernation and GC.Collect().
info: 2022-11-22 11:04:23.0797010 +08:00 星期二 L System.Logging.ScheduleService[0] #9
The Scheduler of <job1> successfully removed to the schedule.

26.1.10.11 强制唤醒作业调度器

正常情况下,作业调度器会自动管理休眠和唤醒,但一些特殊情况下需要强制唤醒作业调度器(比如调度器假死了,被回收了。。。),可通过以下方式:

_schedulerFactory.CancelSleep();

作业调度器输出日志:

warn: 2022-11-22 11:04:23.0726721 +08:00 星期二 L System.Logging.ScheduleService[0] #9
Schedule Hosted Service cancels hibernation and GC.Collect().

26.1.10.12 强制触发所有作业持久化

此操作会强制触发作业持久化器 IJobPersistenceOnChangedOnTriggerChanged 方法,并标记作业持久化行为为 PersistenceBehavior.Updated

_schedulerFactory.PersistAll();

// 还可以通过 group 控制
_schedulerFactory.PersistAll("group1");

26.1.11 作业计划 IScheduler

作业计划 Scheduler 的默认实现接口时 IScheduler,该接口主要用来操作当前(单个)作业。

26.1.11.1 获取 IScheduler 实例

// 返回 ScheduleResult 类型,如果存在返回 ScheduleResult.Succeed,否则返回 ScheduleResult.NotFound
var scheduleResult = _schedulerFactory.TryGetJob("job1", out var scheduler);

// 返回 IScheduler 类型
var scheduler = _schedulerFactory.GetJob("job1");

26.1.11.2 获取 SchedulerModel 实例

获取 SchedulerModel 之后可直接访问 JobDetailTrigger 对象。

var schedulerModel = scheduler.GetModel();

26.1.11.3 获取 SchedulerBuilder

var schedulerBuilder = scheduler.GetBuilder();

26.1.11.4 获取 JobBuilder

var jobBuilder = scheduler.GetJobBuilder();

26.1.11.5 获取 TriggerBuilders

var triggerBuilders = scheduler.GetTriggerBuilders();

26.1.11.6 获取单个 TriggerBuilder

var triggerBuilder = scheduler.GetTriggerBuilder("trigger1");

26.1.11.7 启动当前作业

scheduler.Start();

作业调度器输出日志:

info: 2022-11-22 17:38:16.2612604 +08:00 星期二 L System.Logging.ScheduleService[0] #15
The <job1_trigger1> trigger for scheduler of <job1> successfully started to the schedule.
warn: 2022-11-22 17:38:16.2636849 +08:00 星期二 L System.Logging.ScheduleService[0] #15
Schedule Hosted Service cancels hibernation and GC.Collect().

26.1.11.8 暂停当前作业

schedular.Pause();

作业调度器输出日志:

info: 2022-11-22 15:34:39.5609135 +08:00 星期二 L ConsoleApp32.MyJob[0] #8
job1 job1_trigger1 2022/11/22 15:34:39 5000ms
info: 2022-11-22 15:34:39.5647151 +08:00 星期二 L System.Logging.ScheduleService[0] #14
The <job1_trigger1> trigger for scheduler of <job1> successfully paused to the schedule.
warn: 2022-11-22 15:34:39.5682460 +08:00 星期二 L System.Logging.ScheduleService[0] #14
Schedule Hosted Service cancels hibernation and GC.Collect().

26.1.11.9 启动作业特定触发器

scheduler.StartTrigger("triggerId");

26.1.11.10 暂停作业特定触发器

scheduler.PauseTrigger("triggerId");

26.1.11.11 更新作业信息

// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild
var schedulerResult = scheduler.TryUpdateDetail(jobBuilder, out var jobDetail);

// 无返回值,无错误
scheduler.UpdateDetail(jobBuilder);

26.1.11.12 获取作业单个触发器

// 返回 ScheduleResult 类型,如果存在返回 ScheduleResult.Succeed,否则返回 ScheduleResult.NotFound
var scheduleResult = scheduler.TryGetTrigger("trigger1", out var trigger);

// 返回 Trigger 类型
var trigger = scheduler.GetTrigger("trigger1");

26.1.11.13 添加作业单个触发器

// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild
var schedulerResult = scheduler.TryAddTrigger(triggerBuilder, out var trigger);

// 无返回值,无错误
scheduler.AddTrigger(triggerBuilder);

26.1.11.14 删除作业单个触发器

// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild 或 ScheduleResult.NotFound
var schedulerResult = scheduler.TryRemoveTrigger("trigger1", out var trigger);

// 无返回值,无错误
scheduler.RemoveTrigger(triggerBuilder);

26.1.11.15 判断作业是否包含特定触发器

var isExist = scheduler.ContainsTrigger("trigger1");

26.1.11.16 删除当前作业

// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild
var schedulerResult = scheduler.TryRemove();

// 无返回值,无错误
scheduler.Remove();

26.1.11.17 强制触发所有作业持久化

此操作会强制触发作业持久化器 IJobPersistenceOnChangedOnTriggerChanged 方法,并标记作业持久化行为为 PersistenceBehavior.Updated

scheduler.Persist();

26.1.11.18 输出 JSON 字符串

var json scheduler.ConvertToJSON();

输出结果为:

{
"jobDetail": {
"jobId": "job1",
"groupName": null,
"jobType": "Furion.Application.MyJob",
"assemblyName": "Furion.Application",
"description": null,
"concurrent": true,
"includeAnnotations": false,
"properties": "{}",
"updatedTime": "2022-11-17T09:25:47.0471107+08:00"
},
"triggers": [
{
"triggerId": "job1_trigger1",
"jobId": null,
"triggerType": "Furion.Schedule.PeriodSecondsTrigger",
"assemblyName": "Furion",
"args": "[5]",
"description": null,
"status": 2,
"startTime": null,
"endTime": null,
"lastRunTime": "2022-11-20T18:31:56.6859410+08:00",
"nextRunTime": "2022-11-20T18:32:01.7233546+08:00",
"numberOfRuns": 1,
"maxNumberOfRuns": 0,
"numberOfErrors": 0,
"maxNumberOfErrors": 0,
"numRetries": 0,
"retryTimeout": 1000,
"startNow": true,
"runOnStart": false,
"updatedTime": "2022-11-20T18:31:56.7233630+08:00"
}
]
}

26.1.12 作业持久化器 IJobPersistence

紧急编写中,将在 2022 年 11 月 23 日完成,别催!

26.1.13 作业集群控制

紧急编写中,将在 2022 年 11 月 23 日完成,别催!

26.1.14 如何部署

紧急编写中,将在 2022 年 11 月 23 日完成,别催!

26.1.15 常见问题

紧急编写中,将在 2022 年 11 月 23 日完成,别催!

26.1.15 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/json-serialization/index.html b/handbook/build/docs/json-serialization/index.html new file mode 100644 index 00000000000..946e60a0c4e --- /dev/null +++ b/handbook/build/docs/json-serialization/index.html @@ -0,0 +1,17 @@ + + + + + +23. JSON 序列化 | Furion + + + + + +
+

23. JSON 序列化

版本说明

以下内容仅限 Furion 1.16.0 + 版本使用。

23.1 什么是 JSON

JSON (JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c 制定的 js 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

简单来说,JSON,是一种数据格式,在与后端的数据交互中有较为广泛的应用。

23.2 关于序列化库

目前在 C# 语言中有两个主流的 JSON 序列化操作库:

  • System.Text.Json.NET Core 内置 JSON 序列化库,也是 Furion 框架默认实现
  • Newtonsoft.Json:目前使用人数最多的 JSON 序列化库,需要安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 拓展包

由于目前 System.Text.Json 相比 Newtonsoft.Json 功能和稳定性有许多不足之处,比如循环引用问题在 System.Text.Json 无解。但在 .NET 6 之后得到解决。

Furion 框架为了解决多种序列化工具配置和用法上的差异问题,抽象出了 IJsonSerializerProvider 接口。

23.3 IJsonSerializerProvider 接口

Furion 框架提供了 IJsonSerializerProvider 接口规范,同时要求实现该接口的实体都必须采用单例模式,该接口定义代码如下:

namespace Furion.JsonSerialization
{
/// <summary>
/// Json 序列化提供器
/// </summary>
public interface IJsonSerializerProvider
{
/// <summary>
/// 序列化对象
/// </summary>
/// <param name="value"></param>
/// <param name="jsonSerializerOptions"></param>
/// <returns></returns>
string Serialize(object value, object jsonSerializerOptions = default);

/// <summary>
/// 反序列化字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <param name="jsonSerializerOptions"></param>
/// <returns></returns>
T Deserialize<T>(string json, object jsonSerializerOptions = default);

/// <summary>
/// 返回读取全局配置的 JSON 选项
/// </summary>
/// <returns></returns>
object GetSerializerOptions();
}
}
默认实现

SystemTextJsonSerializerProvider 类是 IJsonSerializerProvider 接口的默认实现,在应用启动时已默认注册。

23.4 如何使用

23.4.1 获取序列化对象

Furion 框架提供了两种方式获取 IJsonSerializerProvider 实例:

  • 构造函数注入 IJsonSerializerProvider
  • 静态类 JSON.GetJsonSerializer() 方式,查看 JSON 静态类

如:

using Furion.DynamicApiController;
using Furion.JsonSerialization;

namespace Furion.Application
{
public class JsonDemo : IDynamicApiController
{
private readonly IJsonSerializerProvider _jsonSerializer;
private readonly IJsonSerializerProvider _jsonSerializer2;
public JsonDemo(IJsonSerializerProvider jsonSerializer)
{
_jsonSerializer = jsonSerializer;
_jsonSerializer2 = JSON.GetJsonSerializer();
}
}
}

23.4.2 序列化对象

public string GetText()
{
return _jsonSerializer.Serialize(new
{
Id = 1,
Name = "Furion"
});
}

23.4.3 反序列化字符串

public object GetObject()
{
var json = "{\"Id\":1,\"Name\":\"Furion\"}";
var obj = _jsonSerializer.Deserialize<object>(json);
return obj;
}
特别注意

System.Text.Json 默认反序列化大小写敏感,也就是不完全匹配的属性名称不会自动赋值。这时候我们可以全局配置或单独配置。

  • 全局配置
services.AddControllersWithViews()
.AddJsonOptions(options => {
options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
});
  • 单独配置
var obj = _jsonSerializer.Deserialize<object>(json, new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
});

23.4.4 序列化更多配置

Furion 框架不推荐一个框架中有多种序列化实现类,也就是说使用 System.Text.Json 就不要使用 Newtonsoft.Json,反之亦然。

如需配置更多选项,只需创建 JsonSerializerOptions 配置对象即可,如:

var json =  _jsonSerializer.Serialize(new
{
Id = 1,
Name = "Furion"
}, new JsonSerializerOptions {
WriteIndented = true
});

23.5 高级用法

23.5.1 自定义序列化提供器

正如上文所说,Furion 默认的 IJsonSerializerProvider 实现方式是 System.Text.Json 库,如需替换为 Newtonsoft.Json,只需以下步骤即可:

无需安装

Furion 4.6.5+ 版本已经内置了 Microsoft.AspNetCore.Mvc.NewtonsoftJson 拓展包,也就是直接在 Startup.cs 中注册即可。

  1. 安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 拓展,并在 Startup.cs 中注册
services.AddControllersWithViews()
.AddNewtonsoftJson();
  1. 实现 IJsonSerializerProvider 提供器
using Furion.DependencyInjection;
using Furion.JsonSerialization;
using Newtonsoft.Json;

namespace Furion.Core
{
/// <summary>
/// Newtonsoft.Json 实现
/// </summary>
public class NewtonsoftJsonSerializerProvider : IJsonSerializerProvider, ISingleton
{
/// <summary>
/// 序列化对象
/// </summary>
/// <param name="value"></param>
/// <param name="jsonSerializerOptions"></param>
/// <returns></returns>
public string Serialize(object value, object jsonSerializerOptions = null)
{
return JsonConvert.SerializeObject(value, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings);
}

/// <summary>
/// 反序列化字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <param name="jsonSerializerOptions"></param>
/// <returns></returns>
public T Deserialize<T>(string json, object jsonSerializerOptions = null)
{
return JsonConvert.DeserializeObject<T>(json, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings);
}

/// <summary>
/// 返回读取全局配置的 JSON 选项
/// </summary>
/// <returns></returns>
public object GetSerializerOptions()
{
return App.GetOptions<MvcNewtonsoftJsonOptions>()?.SerializerSettings;
}
}
}

23.5.2 序列化属性名大写(属性原样输出)

  • System.Text.Json 方式
services.AddControllersWithViews()
.AddJsonOptions(options => {
options.JsonSerializerOptions.PropertyNamingPolicy = null;
// options.JsonSerializerOptions.DictionaryKeyPolicy = null; // 配置 Dictionary 类型序列化输出
});
  • Newtonsoft.Json 方式
services.AddControllersWithViews()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
特别注意

采用 Newtonsoft.Json 方式接口返回值能够正常输出,但是 Swagger 界面中的 Example Values 依然显示小写字母开头的属性,这时只需要再添加 System.Text.Json 配置即可,如:

.AddJsonOptions(options => {
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});

主要原因是 Swagger 拓展包底层依赖了 System.Text.Json

23.5.3 时间格式化

  • System.Text.Json 方式
services.AddControllersWithViews()
.AddJsonOptions(options =>
{
// 在 4.6.5 之前的版本使用 .AddDateFormatString
options.JsonSerializerOptions.Converters.AddDateTimeTypeConverters("yyyy-MM-dd HH:mm:ss");
});
小提示

如果使用使用了 DateTimeOffset 类型,那么可以设置 .AddDateTimeTypeConverters("yyyy-MM-dd HH:mm:ss", true) 第二个参数为 true,自动转换成本地时间。

如果使用了 Mysql 数据库,且使用了 Pomelo.EntityFrameworkCore.MySql 包,那么会出现时区问题,比如少 8 小时,可以尝试配置第二个参数为 true

需引用 System.Text.Json 命名空间。

  • Newtonsoft.Json 方式
services.AddControllersWithViews()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
});

23.5.4 忽略循环引用

  • System.Text.Json 方式
services.AddControllersWithViews()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;
});
特别说明

.NET 5 中,System.Text.Json 并不支持处理循环引用问题,以上的解决方案仅限用于 .NET 6 Preview 2+。😂

需引用 System.Text.Json 命名空间。

  • Newtonsoft.Json 方式
services.AddControllersWithViews()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});

23.5.5 包含成员字段序列化

  • System.Text.Json 方式
services.AddControllersWithViews()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.IncludeFields = true;
});

需引用 System.Text.Json 命名空间。

  • Newtonsoft.Json 方式

无需配置。

23.5.6 允许尾随逗号

  • System.Text.Json 方式
services.AddControllersWithViews()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.AllowTrailingCommas = true;
});

需引用 System.Text.Json 命名空间。

  • Newtonsoft.Json 方式

无需配置。

23.5.7 允许注释

  • System.Text.Json 方式
services.AddControllersWithViews()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.ReadCommentHandling = JsonCommentHandling.Skip;
});

需引用 System.Text.Json 命名空间。

  • Newtonsoft.Json 方式

无需配置。

23.5.8 处理乱码问题

  • System.Text.Json 方式
services.AddControllersWithViews()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
});

需引用 System.Text.Json 命名空间。

  • Newtonsoft.Json 方式

无需配置。

23.5.9 不区分大小写

  • System.Text.Json 方式
services.AddControllersWithViews()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
});

需引用 System.Text.Json 命名空间。

  • Newtonsoft.Json 方式
更多序列化配置

这里只列举常用见的序列化配置,如需查看更多配置,可查阅 System.Text.Json 文档

23.5.10 忽略特定属性序列化

有时候我们不希望对象中某个对象被序列化出来或者不想在 Swagger 中显示,这时候只需要在属性贴该特性即可:

[Newtonsoft.Json.JsonIgnore]    // 针对 Newtonsoft
[System.Text.Json.Serialization.JsonIgnore] // 针对 System.Text.Json
public string PropertyName {get; set;}

23.5.11 动态对象属性名大写问题

有时候使用了动态对象后发现属性名出现了大写情况(首字母),这个时候可以尝试使用以下方法解决:

.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
})

23.5.12 long 类型序列化时转 string

有时候我们需要将 long 类型序列化时转为 string 类型,防止 JavaScript 出现精度溢出问题,这个时候可以尝试使用以下方法解决:

  • System.Text.Json 方式
services.AddControllersWithViews()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.AddLongTypeConverters();
});
  • Newtonsoft.Json 方式
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.Converters.AddLongTypeConverters();
})
关于 Dictionary<,> 类型包含 long 处理

默认情况下,System.Text.Json 不支持 Dictionary<,> 类型的序列化设置 Converter 操作,这个时候可以换成 Newtonsoft.Json 处理,如:

.AddNewtonsoftJson(options =>
{
options.SerializerSettings.Converters.AddLongTypeConverters();
})

同时创建 NewtonsoftJsonSerializerProvider.cs 文件写入即可:

namespace YourProject.Core;

public class NewtonsoftJsonSerializerProvider : IJsonSerializerProvider, ISingleton
{
public string Serialize(object value, object jsonSerializerOptions = null)
{
return JsonConvert.SerializeObject(value, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings);
}

public T Deserialize<T>(string json, object jsonSerializerOptions = null)
{
return JsonConvert.DeserializeObject<T>(json, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings);
}

public object GetSerializerOptions()
{
return App.GetOptions<MvcNewtonsoftJsonOptions>()?.SerializerSettings;
}
}

23.5.13 DateOnlyTimeOnly 类型序列化支持

.NET6+ 添加了 DateOnlyTimeOnly 类型,Furion 4.7.9+ 提供了支持。

  • System.Text.Json 方式
services.AddControllersWithViews()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.AddDateOnlyConverters(); // DateOnly
options.JsonSerializerOptions.Converters.AddTimeOnlyConverters(); // TimeOnly
});
  • Newtonsoft.Json 方式
.AddNewtonsoftJson(options =>
{
options.JsonSerializerOptions.Converters.AddDateOnlyConverters(); // DateOnly
options.JsonSerializerOptions.Converters.AddTimeOnlyConverters(); // TimeOnly
})

23.5.14 DateTimeOffset 反序列化异常

以下处理只针对 Newtonsoft.Json,数据为 0001-01-01 00:00:00 的情形下反序列化为 DateTimeOffset 类型报错:

Could not convert string to DateTimeOffset: 0001-01-01 00:00:00

相关问题讨论:https://stackoverflow.com/questions/50628374/json-net-deserializing-datetimeoffset-value-fails-for-datetimeoffset-minvalue-wi/50631270#50631270

  • System.Text.Json 方式

无需配置

  • Newtonsoft.Json 方式
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore;
options.SerializerSettings.DateParseHandling = DateParseHandling.None;
options.SerializerSettings.Converters.Add(new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal });
});

23.6 DataTableDataSetTuple 元组等序列化问题

由于默认 Furion 采用 System.Text.Json 进行序列化,但是不支持复杂类型,如 DataTableDataSetTuple 元组,所以需要更换成 NewtonsoftJson 即可,见 JSON 序列化 - 23.5.1 自定义序列化提供器

23.7 System.Text.JsonNewtonsoft.Json 完整差异化对比

https://docs.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json-migrate-from-newtonsoft-how-to?pivots=dotnet-5-0

23.8 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/jsonschema/index.html b/handbook/build/docs/jsonschema/index.html new file mode 100644 index 00000000000..68e827b4194 --- /dev/null +++ b/handbook/build/docs/jsonschema/index.html @@ -0,0 +1,17 @@ + + + + + +2.7 JSON Schema 使用 | Furion + + + + + +
+

2.7 JSON Schema 使用

2.7.1 关于 JSON Schema

JSON Schema 是用于验证 JSON 数据结构的强大工具,Schema 可以理解为模式或者规则。

有了 JSON Schema 再也不怕配置写错的情况了!

2.7.2 学习 JSON Schema 编写

作为一个框架提供 JSON Schema 是非常有必要的,可以让开发者在添加配置的时候能够有智能提示和校验功能,如果想学习 JSON Schema 编写可以查看以下文档:

这里也提供一个非常便捷的创建 JSON Schema 的在线网站,可以根据 json 文件内容自动生成 JSON Schema,之后进行小量修改即可:

https://hellosean1025.github.io/json-schema-visual-editor/

2.7.3 框架提供

Furion 框架提供了完整的 FurionASP.NET CoreJSON Schema 文件,通过该文件可以在编写配置文件时提供完整的智能提示和校验。

查看 JSON Schema 源码地址

2.7.4 如何使用

使用方式非常简单,只需要在 .json 文件的头部添加 "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json", 即可,如:

{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",

"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.EntityFrameworkCore": "Information",
"Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"
}
},
"AllowedHosts": "*"
}

2.7.5 JSON Schema 失效解决

如果添加了 "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json", 依然无法进行智能提示校验,可尝试关闭 .json 文件再重新打开。

如果上面步骤依然无效,那么还可以通过下面方式:

2.7.5.1 Visual Studio

2.7.5.2 Visual Studio Code

重启 Visual Studio Code 即可。

2.7.6 如何更新 JSON Schema

默认情况下,JSON Schema 在第一次获取之后会自动缓存起来,可能会导致 .json 文件提示错误,这个时候只需要删除缓存即可。

2.7.6.1 Visual Studio

打开电脑的 运行 并输入 %AppData%,之后进入 C:\Users\你的电脑用户名\AppData\Local\Microsoft\VisualStudio

之后删除 http/https 开头的文件即可。

2.7.6.2 Visual Studio Code

同上,运行进入 %AppData%,之后进入下列路径:C:\Users\你的电脑用户名\AppData\Roaming\Code\User\globalStorage\vscode.json-language-features\json-schema-cache

之后删除这些文件即可。

2.7.7 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/local-language/index.html b/handbook/build/docs/local-language/index.html new file mode 100644 index 00000000000..73ea79b2e09 --- /dev/null +++ b/handbook/build/docs/local-language/index.html @@ -0,0 +1,17 @@ + + + + + +21. 全球化和本地化 | Furion + + + + + +
+

21. 全球化和本地化

21.1 全球化和本地化

全球化 是设计支持不同区域性的应用程序的过程。 全球化添加了对一组有关特定地理区域的已定义语言脚本的输入、显示和输出支持。

本地化 是将已经针对可本地化性进行处理的全球化应用调整为特定的区域性/区域设置的过程。

通俗来说,就是使应用或系统支持多语言切换。Furion 框架提供了完整支持多语言处理的服务。

21.2 注册服务

在使用多语言服务之前,必须先注册服务,如:

public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews()
.AddAppLocalization(); // 注册多语言
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

// 配置多语言,必须在 路由注册之前
app.UseAppLocalization();

app.UseStaticFiles();
app.UseRouting();

// 其他中间件
}
特别注意

app.UseAppLocalization(); 必须在 app.UseRouting(); 之前注册。

21.3 如何使用

21.3.1 配置 LocalizationSettings

添加 LocalizationSettings 配置选项:

{
"LocalizationSettings": {
"SupportedCultures": ["zh-CN", "en-US"], // 配置支持的语言列表
"DefaultCulture": "zh-CN" // 配置默认语言,如果不配置,取 SupportedCultures 的第一项
}
}

21.3.2 创建 Resources 文件夹

接下来在 Web启动项目层 添加 Resources 文件夹,如图:(可配置放置任意层,见配置 AssemblyName

21.4 L 静态类

Furion 框架主要通过 L 静态类完成多语言转换,该静态类有以下属性和方法:

  • L.Text[文本]:转换文本多语言
  • L.Html[HTML代码, 格式化]:转换 Html 多语言
  • L.SetCulture(区域码):设置当前语言区域
  • L.GetSelectCulture():获取当前的语言区域
  • L.GetCultures():获取系统支持的多语言列表

21.5 使用例子

通过上面的配置步骤之后,我们就可以通过 L 静态类在代码任何位置使用了,如:

21.5.1 在类中使用

// 文本多语言
var apiInterface = L.Text["API 接口"];
var sourceCode = L.Text["源码地址"];

// HTML 标记多语言
var name = L.Html["<b>Hello</b><i> {0}</i>", name];

21.5.2 在视图中使用

@using Furion.Localization

<div style="text-align:center;margin-top:50px;">
<p>让 .NET 开发更简单,更通用,更流行。</p>
<p>
<a href="/api">@L.Text["API 接口"]</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a
href="https://gitee.com/dotnetchina/Furion"
target="_blank"
>@L.Text["源码地址"]</a
>
</p>
</div>

21.5.3 在验证特性中使用

[Required(ErrorMessage = "必填消息")]

所有验证特性已经自动支持多语言配置了,无需通过 L.Text[] 调用。

21.5.4 在异常消息中使用

using Furion.FriendlyException;

namespace Furion.Application
{
[ErrorCodeType]
public enum ErrorCodes
{
[ErrorCodeItemMetadata("用户名不能为空")]
z1000
}
}

所有异常消息特性已经自动支持多语言配置了,无需通过 L.Text[] 调用。

throw Oops.Oh(ErrorCodes.z1000);    // 自动应用多语言

21.5.5 SharedResource 模式

版本说明

以下内容仅限 Furion 4.3.7 + 版本使用。

正常情况下,我们都是通过 L.Text["Hello"] 方式输出 Hello 在不同的区域语言的翻译,但是会导致 Hello 硬编码字符串散落到处都是。

所以 Furion 提供了 SharedResource 模式,只需要创建一个 SharedResource.cs 类(可以任何名字)并添加对应的属性即可,如:

namespace Furion.Core;

public class SharedResource
{
public string Hello { get; set; }

public string Name { get; set; }
}

使用如下:

var hello = L.GetString<SharedResource>(u => u.Hello);  // 比 L.Text["Hello"]; 容易维护
var name = L.GetString<SharedResource>(u => u.Name); // 比 L.Text["Name"]; 容易维护

当然也有更简单的方式,就是使用 nameof,如:

var hello = L.Text[nameof(SharedResource.Hello)];  // 比 L.Text["Hello"]; 容易维护
var name = L.Text[nameof(SharedResource.Name)]; // 比 L.Text["Name"]; 容易维护

21.6 创建语言翻译文件

Furion 框架中,如果没找到对应的语言翻译文件,则自动显示字符串文本,如:

L.Text["没找到"];   // => 如果设置为英文,但是没有文件,则直接输出 “没找到”

21.6.1 在 Resources 文件夹中创建语言文件

接下来,我们只需要在刚刚的 Resources 文件夹中添加 资源文件 即可,资源文件命名规则:Lang.区域码.resx,如:Lang.en-US.resx

接下来,只需要把对应语言版本的键值对填写即可。

自定义资源文件名或存放程序集

默认情况下,资源文件名必须以 Lang 开头,且只能放在启动层,如果需要自定义,添加配置文件即可

{
"LocalizationSettings": {
"LanguageFilePrefix": "MyLang"
// "AssemblyName": "你的其他层程序集名称"
}
}

之后,就可以:MyLang.区域码.resx

21.7 切换语言

Furion 提供了三种语言切换方式进行切换语言:

  • URL 参数 方式: ?culture=en-US此方式优先级最高,格式为:culture=区域码
  • Cookies 方式:调用 L.SetCulture(区域码) 方式切换
  • 客户端浏览器语言自动匹配:如果前面两种方式都没有设置,支持自动根据客户端浏览器语言进行匹配。

21.7.1 URL 参数 方式

21.7.2 Cookies 方式

此方式只需要提供一个 api 或设置代码即可:

L.SetCulture("en-US");  // en-US 也可以通过前端传递过来,这样就可以不用 `culture` 参数了,可以自定义参数。

这样就可以直接根据客户端存储的 cookies 自动切换了。

21.7.3 客户端浏览器语言自动切换

推荐此方式,可以自动根据浏览器的语言自动配置:

21.8 依赖注入方式使用

Furion 框架也兼容 .NET Core 自带的依赖注入方式,如:

 public class TestController : Controller
{
private readonly IStringLocalizer _localizer;

public TestController(IStringLocalizerFactory factory)
{
_localizer = factory.Create();
}

public IActionResult About()
{
ViewData["Message"] = _localizer["Your application description page."];
}
}

21.9 LocalizationSettings 配置

  • LocalizationSettings 多语言配置根节点
    • ResourcesPath:资源目录,string 类型,默认 Resources
    • SupportedCultures:支持的语言区域码类别,string[] 类型
    • DefaultCulture:默认语言区域码,如果为空,则取 SupportedCultures 第一项
    • LanguageFilePrefix:配置资源文件前缀,string 类型,默认 Lang
    • AssemblyName:配置资源文件存放程序集名,string 类型,默认 启动层 名称

21.10 关于中文不能切换问题

若通过 dotnet build 命令行编译后发布的代码(比如 jenkins 以及其他 devops 工具),无法生成 zh-CN 资源文件,会出现中文无法显示的问题,这时候只需要将 Lang.zh-CN.resx 修改为:Lang.zh-Hans.resxLang.zh-Hant.resxLang.zh.resx 即可。

相关文档说明 https://docs.microsoft.com/zh-cn/dotnet/api/system.globalization.cultureinfo?view=net-6.0

21.11 Json数据库 多语言实现

asp.net core 本地化 文档中微软推荐了三个拓展开源项目:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/localization-extensibility?view=aspnetcore-6.0#localization-resources

选择自己合适的即可。

21.12 区域码列表

  • af 公用荷兰语
  • af-ZA 公用荷兰语 - 南非
  • sq 阿尔巴尼亚
  • sq-AL 阿尔巴尼亚 -阿尔巴尼亚
  • ar 阿拉伯语
  • ar-DZ 阿拉伯语 -阿尔及利亚
  • ar-BH 阿拉伯语 -巴林
  • ar-EG 阿拉伯语 -埃及
  • ar-IQ 阿拉伯语 -伊拉克
  • ar-JO 阿拉伯语 -约旦
  • ar-KW 阿拉伯语 -科威特
  • ar-LB 阿拉伯语 -黎巴嫩
  • ar-LY 阿拉伯语 -利比亚
  • ar-MA 阿拉伯语 -摩洛哥
  • ar-OM 阿拉伯语 -阿曼
  • ar-QA 阿拉伯语 -卡塔尔
  • ar-SA 阿拉伯语 - 沙特阿拉伯
  • ar-SY 阿拉伯语 -叙利亚共和国
  • ar-TN 阿拉伯语 -北非的共和国
  • ar-AE 阿拉伯语 - 阿拉伯联合酋长国
  • ar-YE 阿拉伯语 -也门
  • hy 亚美尼亚
  • hy-AM 亚美尼亚的 -亚美尼亚
  • az Azeri
  • az-AZ-Cyrl Azeri-(西里尔字母的) 阿塞拜疆
  • az-AZ-Latn Azeri(拉丁文)- 阿塞拜疆
  • eu 巴斯克
  • eu-ES 巴斯克 -巴斯克
  • be Belarusian
  • be-BY Belarusian-白俄罗斯
  • bg 保加利亚
  • bg-BG 保加利亚 -保加利亚
  • ca 嘉泰罗尼亚
  • ca-ES 嘉泰罗尼亚 -嘉泰罗尼亚
  • zh-HK 华 - 香港的 SAR
  • zh-MO 华 - 澳门的 SAR
  • zh-CN 华 -中国
  • zh-CHS 华 (单一化)
  • zh-SG 华 -新加坡
  • zh-TW 华 -台湾
  • zh-CHT 华 (传统的)
  • hr 克罗埃西亚
  • hr-HR 克罗埃西亚 -克罗埃西亚
  • cs 捷克
  • cs-CZ 捷克 - 捷克
  • da 丹麦文
  • da-DK 丹麦文 -丹麦
  • div Dhivehi
  • div-MV Dhivehi-马尔代夫
  • nl 荷兰
  • nl-BE 荷兰 -比利时
  • nl-NL 荷兰 - 荷兰
  • en 英国
  • en-AU 英国 -澳洲
  • en-BZ 英国 -伯利兹
  • en-CA 英国 -加拿大
  • en-CB 英国 -加勒比海
  • en-IE 英国 -爱尔兰
  • en-JM 英国 -牙买加
  • en-NZ 英国 - 新西兰
  • en-PH 英国 -菲律宾共和国
  • en-ZA 英国 - 南非
  • en-TT 英国 - 千里达托贝哥共和国
  • en-GB 英国 - 英国
  • en-US 英国 - 美国
  • en-ZW 英国 -津巴布韦
  • et 爱沙尼亚
  • et-EE 爱沙尼亚的 -爱沙尼亚
  • fo Faroese
  • fo-FO Faroese- 法罗群岛
  • fa 波斯语
  • fa-IR 波斯语 -伊朗王国
  • fi 芬兰语
  • fi-FI 芬兰语 -芬兰
  • fr 法国
  • fr-BE 法国 -比利时
  • fr-CA 法国 -加拿大
  • fr-FR 法国 -法国
  • fr-LU 法国 -卢森堡
  • fr-MC 法国 -摩纳哥
  • fr-CH 法国 -瑞士
  • gl 加利西亚
  • gl-ES 加利西亚 -加利西亚
  • ka 格鲁吉亚州
  • ka-GE 格鲁吉亚州 -格鲁吉亚州
  • de 德国
  • de-AT 德国 -奥地利
  • de-DE 德国 -德国
  • de-LI 德国 -列支敦士登
  • de-LU 德国 -卢森堡
  • de-CH 德国 -瑞士
  • el 希腊
  • el-GR 希腊 -希腊
  • gu Gujarati
  • gu-IN Gujarati-印度
  • he 希伯来
  • he-IL 希伯来 -以色列
  • hi 北印度语
  • hi-IN 北印度的 -印度
  • hu 匈牙利
  • hu-HU 匈牙利的 -匈牙利
  • is 冰岛语
  • is-IS 冰岛的 -冰岛
  • id 印尼
  • id-ID 印尼 -印尼
  • it 意大利
  • it-IT 意大利 -意大利
  • it-CH 意大利 -瑞士
  • ja 日本
  • ja-JP 日本 -日本
  • kn 卡纳达语
  • kn-IN 卡纳达语 -印度
  • kk Kazakh
  • kk-KZ Kazakh-哈萨克
  • kok Konkani
  • kok-IN Konkani-印度
  • ko 韩国
  • ko-KR 韩国 -韩国
  • ky Kyrgyz
  • ky-KZ Kyrgyz-哈萨克
  • lv 拉脱维亚
  • lv-LV 拉脱维亚的 -拉脱维亚
  • lt 立陶宛
  • lt-LT 立陶宛 -立陶宛
  • mk 马其顿
  • mk-MK 马其顿 -FYROM
  • ms 马来
  • ms-BN 马来 -汶莱
  • ms-MY 马来 -马来西亚
  • mr 马拉地语
  • mr-IN 马拉地语 -印度
  • mn 蒙古
  • mn-MN 蒙古 -蒙古
  • no 挪威
  • nb-NO 挪威 (Bokm?l) - 挪威
  • nn-NO 挪威 (Nynorsk)- 挪威
  • pl 波兰
  • pl-PL 波兰 -波兰
  • pt 葡萄牙
  • pt-BR 葡萄牙 -巴西
  • pt-PT 葡萄牙 -葡萄牙
  • pa Punjab 语
  • pa-IN Punjab 语 -印度
  • ro 罗马尼亚语
  • ro-RO 罗马尼亚语 -罗马尼亚
  • ru 俄国
  • ru-RU 俄国 -俄国
  • sa 梵文
  • sa-IN 梵文 -印度
  • sr-SP-Cyrl 塞尔维亚 -(西里尔字母的) 塞尔维亚共和国
  • sr-SP-Latn 塞尔维亚 (拉丁文)- 塞尔维亚共和国
  • sk 斯洛伐克
  • sk-SK 斯洛伐克 -斯洛伐克
  • sl 斯洛文尼亚
  • sl-SI 斯洛文尼亚 -斯洛文尼亚
  • es 西班牙
  • es-AR 西班牙 -阿根廷
  • es-BO 西班牙 -玻利维亚
  • es-CL 西班牙 -智利
  • es-CO 西班牙 -哥伦比亚
  • es-CR 西班牙 - 哥斯达黎加
  • es-DO 西班牙 - 多米尼加共和国
  • es-EC 西班牙 -厄瓜多尔
  • es-SV 西班牙 - 萨尔瓦多
  • es-GT 西班牙 -危地马拉
  • es-HN 西班牙 -洪都拉斯
  • es-MX 西班牙 -墨西哥
  • es-NI 西班牙 -尼加拉瓜
  • es-PA 西班牙 -巴拿马
  • es-PY 西班牙 -巴拉圭
  • es-PE 西班牙 -秘鲁
  • es-PR 西班牙 - 波多黎各
  • es-ES 西班牙 -西班牙
  • es-UY 西班牙 -乌拉圭
  • es-VE 西班牙 -委内瑞拉
  • sw Swahili
  • sw-KE Swahili-肯尼亚
  • sv 瑞典
  • sv-FI 瑞典 -芬兰
  • sv-SE 瑞典 -瑞典
  • syr Syriac
  • syr-SY Syriac-叙利亚共和国
  • ta 坦米尔
  • ta-IN 坦米尔 -印度
  • tt Tatar
  • tt-RU Tatar-俄国
  • te Telugu
  • te-IN Telugu-印度
  • th 泰国
  • th-TH 泰国 -泰国
  • tr 土耳其语
  • tr-TR 土耳其语 -土耳其
  • uk 乌克兰
  • uk-UA 乌克兰 -乌克兰
  • ur Urdu
  • ur-PK Urdu-巴基斯坦
  • uz Uzbek
  • uz-UZ-Cyrl Uzbek-(西里尔字母的) 乌兹别克斯坦
  • uz-UZ-Latn Uzbek(拉丁文)- 乌兹别克斯坦
  • vi 越南
  • vi-VN 越南 -越南

21.13 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 多语言 知识可查阅 ASP.NET Core - 全局化和本地化 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/logging/index.html b/handbook/build/docs/logging/index.html new file mode 100644 index 00000000000..b75ba2eb81c --- /dev/null +++ b/handbook/build/docs/logging/index.html @@ -0,0 +1,17 @@ + + + + + +18. 日志记录 | Furion + + + + + +
+

18. 日志记录

18.1 关于日志

通常日志指的是系统日志程序日志

系统日志 是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。系统日志包括系统日志、应用程序日志和安全日志。

程序日志 是程序运行中产生的日志,通常由框架运行时或开发者提供的日志。包括请求日志,异常日志、审计日志、行为日志等。

18.2 日志作用

在项目开发中,都不可避免的使用到日志。没有日志虽然不会影响项目的正确运行,但是没有日志的项目可以说是不完整的。日志在调试,错误或者异常定位,数据分析中的作用是不言而喻的。

  • 调试

在项目调试时,查看栈信息可以方便地知道当前程序的运行状态,输出的日志便于记录程序在之前的运行结果。

  • 错误定位

不要以为项目能正确跑起来就可以高枕无忧,项目在运行一段时候后,可能由于数据问题,网络问题,内存问题等出现异常。这时日志可以帮助开发或者运维人员快速定位错误位置,提出解决方案。

  • 数据分析

大数据的兴起,使得大量的日志分析成为可能,ELK 也让日志分析门槛降低了很多。日志中蕴含了大量的用户数据,包括点击行为,兴趣偏好等,用户画像对于公司下一步的战略方向有一定指引作用。

18.3 日志级别

日志级别可以有效的对日志信息进行归类,方便准确的查看特定日志内容。通常日志类别有以下级别:

级别方法描述
Trace(跟踪)0LogTrace包含最详细的消息。 这些消息可能包含敏感的应用数据。 这些消息默认情况下处于禁用状态,并且不应在生产中启用。
Debug(调试)1LogDebug用于调试和开发。 由于量大,请在生产中小心使用。
Information(信息)2LogInformation跟踪应用的常规流。 可能具有长期值。
Warning(警告)3LogWarning对于异常事件或意外事件。 通常包括不会导致应用失败的错误或情况。
Error(错误)4LogError表示无法处理的错误和异常。 这些消息表示当前操作或请求失败,而不是整个应用失败。
Critical(严重)5LogCritical需要立即关注的失败。 例如数据丢失、磁盘空间不足。

18.4 如何使用

.NET 5 框架中,微软已经为我们内置了 日志组件,正常情况下,无需我们引用第三方包进行日志记录。.NET 5 框架为我们提供了两种日志对象创建方式。

18.4.1 ILogger<T> 泛型方式

使用非常简单,可以通过 ILogger<T> 对象进行注入,如:

public class PrivacyModel : PageModel
{
private readonly ILogger<PrivacyModel> _logger;

public PrivacyModel(ILogger<PrivacyModel> logger)
{
_logger = logger;
}

public void OnGet()
{
_logger.LogInformation("GET Pages.PrivacyModel called.");
}
}
小知识

通过泛型 ILogger<T> 方式写入日志,那么默认将 T 类型完整类型名称作为 日志类别

18.4.2 ILoggerFactory 工厂方式

使用工厂方式,需手动传入 日志类别,如:

public class ContactModel : PageModel
{
private readonly ILogger _logger;

public ContactModel(ILoggerFactory logger)
{
_logger = logger.CreateLogger("MyCategory");
}

public void OnGet()
{
_logger.LogInformation("GET Pages.ContactModel called.");
}
}

18.4.3 Log 静态类方式

版本说明

以下内容仅限 Furion 4.2.1 + 版本使用。

// 创建日志对象
var logger = Log.CreateLogger("日志名称");

// 创建日志工厂
using var loggerFactory = Log.CreateLoggerFactory(builder => {
// ....
});

// 日志记录
Log.Information("Information");
Log.Warning("Warning");
Log.Error("Error");
Log.Debug("Debug");
Log.Trace("Trace");
Log.Critical("Critical");

18.4.4 懒人模式 😁

Furion 框架中,提供了更懒的方式写入日志,也就是通过字符串拓展的方式写入,如:

"简单日志".LogInformation();

"百小僧 新增了一条记录".LogInformation<HomeController>();

"程序出现异常啦".LogError<HomeController>();

"这是自定义类别日志".SetCategory("类别").LogInformation();

通过字符串拓展方式可以在任何时候方便记录日志,专门为懒人提供的。

18.5 配置日志输出介质

版本说明

以下小节仅在 Furion 3.9.0+ 版本提供。

ASP.NET Core 应用程序中,主机启动时默认注册了 ConsoleLoggerProvider 提供器,也就是控制台日志输出提供器,所以无需任何注册服务即可在控制台输出。

18.5.1 输出到控制台

info: Furion.EventBus.EventBusHostedService[0]
EventBus Hosted Service is running.
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\Workplaces\Furion\samples\Furion.Web.Entry\

如果希望不输出某些日志类别的日志可以添加以下过滤:

  • 控制台输出过滤

.NET5 版本:

Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddFilter((provider, category, logLevel) =>
{
return !new[] { "Microsoft.Hosting", "Microsoft.AspNetCore" }.Any(u => category.StartsWith(u))
&& logLevel >= LogLevel.Information;
});
})

.NET6+ 版本:

var builder = WebApplication.CreateBuilder(args);

builder.Logging.AddFilter((provider, category, logLevel) =>
{
return !new[] { "Microsoft.Hosting", "Microsoft.AspNetCore" }.Any(u => category.StartsWith(u))
&& logLevel >= LogLevel.Information;
});

或者 Serve.Run 方式

Serve.Run(RunOptions.Default.AddWebComponent<WebComponent>());

public class WebComponent : IWebComponent
{
public void Load(WebApplicationBuilder builder, ComponentContext componentContext)
{
builder.Logging.AddFilter((provider, category, logLevel) =>
{
return !new[] { "Microsoft.Hosting", "Microsoft.AspNetCore" }.Any(u => category.StartsWith(u))
&& logLevel >= LogLevel.Information;
});
}
}
日志过滤无效情况

假如使用上述代码过滤无效(不能过滤默认的主机日志),那么请确认 appsettings.jsonappsettings.Development.jsonLogging:Level 是否如下:

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Microsoft.EntityFrameworkCore": "Information"
}
}
}

如果配置了以下配置,请删除

"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
  • 控制台日志标准化模板
版本说明

以下内容仅限 Furion 4.5.0 + 版本使用。

ASP.NET Core 默认控制台日志相对简洁,并未包含常见的日志时间、线程 Id 等,而且自定义模板也相对复杂,所以 Furion 4.5.0+ 版本提供了简化配置,如:

  1. Startup.cs 方式
services.AddConsoleFormatter();
  1. .NET5 方式
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddConsoleFormatter();
});
  1. .NET6 方式
var builder = WebApplication.CreateBuilder(args);

builder.Logging.AddConsoleFormatter();
  1. Serve.Run() 方式
Serve.Run(RunOptions.Default.AddWebComponent<WebComponent>());

public class WebComponent : IWebComponent
{
public void Load(WebApplicationBuilder builder, ComponentContext componentContext)
{
builder.Logging.AddConsoleFormatter();
}
}

输出结果:

info: 2022-09-27T13:17:33.5958395+08:00 System.Logging.EventBusService[0] #1
EventBus Hosted Service is running.
info: 2022-09-27T13:17:35.1666167+08:00 Microsoft.Hosting.Lifetime[ListeningOnAddress] #1
Now listening on: https://localhost:5001
info: 2022-09-27T13:17:35.1728106+08:00 Microsoft.Hosting.Lifetime[ListeningOnAddress] #1
Now listening on: http://localhost:5000
info: 2022-09-27T13:17:35.1893063+08:00 Microsoft.Hosting.Lifetime[0] #1
Application started. Press Ctrl+C to shut down.
info: 2022-09-27T13:17:35.1941484+08:00 Microsoft.Hosting.Lifetime[0] #1
Hosting environment: Development
info: 2022-09-27T13:17:35.1996545+08:00 Microsoft.Hosting.Lifetime[0] #1
Content root path: D:\Workplaces\OpenSources\Furion\samples\Furion.Web.Entry\
  • 自定义控制台日志输出模板
services.AddConsoleFormatter(options =>
{
options.MessageFormat = (logMsg) =>
{
var stringBuilder = new StringBuilder();
stringBuilder.Append(DateTime.Now.ToString("o"));
// 其他的。。。自己组装
return stringBuilder.ToString();
};
});

// 输出为 JSON 格式,Furion 4.5.2+
services.AddConsoleFormatter(options =>
{
options.MessageFormat = LoggerFormatter.Json;
// Furion 4.8.0+ 新增 JSON 美化输出
options.MessageFormat = LoggerFormatter.JsonIndented;
});
  • 自定义日志输出时间格式
版本说明

以下内容仅限 Furion 4.5.1 + 版本使用。

services.AddConsoleFormatter(options =>
{
options.DateFormat = "yyyy-MM-dd HH:mm:ss.fffffff zzz dddd";
});
info: 2022-09-28 02:02:20(+08:00) 星期三 System.Logging.EventBusService[0] #1
EventBus Hosted Service is running.
info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[14] #1
Now listening on: https://localhost:5001
info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[14] #1
Now listening on: http://localhost:5000
info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1
Application started. Press Ctrl+C to shut down.
info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1
Hosting environment: Development
info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1
Content root path: D:\Workplaces\OpenSources\Furion\samples\Furion.Web.Entry\
  • 完整自定义日志格式化写入
版本说明

以下内容仅限 Furion 4.5.2 + 版本使用。

services.AddConsoleFormatter(options =>
{
options.WriteHandler = (logMsg, scopeProvider, writer, fmtMsg, opt) =>
{
writer.WriteLine(fmtMsg);
};
});

18.5.2 输出到文件

  • 基础使用
// 例子一:启动层根目录输出
services.AddFileLogging("application.log");

// 例子二:支持路径
services.AddFileLogging("logs/application.log");

// 例子三:支持日志追加还是覆盖,设置 true 为追加,false 为覆盖
services.AddFileLogging("application.log", true);
  • 从配置文件读取配置
特别注意

只有不在 .AddFile 第一个参数配置文件名才会自动加载配置,也就是文件名应该配置在配置文件中。

文件日志配置说明:

{
"Logging": {
"LogLevel": {
"Default": "Information"
// .... appsettings 默认配置
},
"File": {
"FileName": "application.log", // 日志文件完整路径或文件名,推荐 .log 作为拓展名
"Append": true, // 追加到已存在日志文件或覆盖它们
"MinimumLevel": "Information", // 最低日志记录级别
"FileSizeLimitBytes": 0, // 控制每一个日志文件最大存储大小,单位是 B,也就是 1024 才等于 1KB,默认无限制,如果指定了该值,那么日志文件大小超出了该配置就会创建新的日志文件,新创建的日志文件命名规则:文件名+[递增序号].log
"MaxRollingFiles": 0 // 控制最大创建的日志文件数量,默认无限制,配合 FileSizeLimitBytes 使用,如果指定了该值,那么超出该值将从最初日志文件中从头写入覆盖
}
},
// 自定义配置节点
"MyLogger": {
"FileName": "application.log",
"Append": true,
"MinimumLevel": "Information",
"FileSizeLimitBytes": 0,
"MaxRollingFiles": 0
}
}
// 例子一:默认读取 Logging:File 节点
services.AddFileLogging();

// 例子二:默认读取 Logging:File 节点,支持更多配置
services.AddFileLogging(options =>
{
options.MinimumLevel = LogLevel.Warning;

// 其他配置...
});

// 例子三:自定义配置节点
services.AddFileLogging(() => "MyLogger");

// 例子四:自定义配置节点,支持更多配置
services.AddFileLogging(() => "MyLogger", options =>
{
options.MinimumLevel = LogLevel.Warning;

// 其他配置...
});
  • 自定义日志文件名规则
// 例子一:支持系统环境变量,如%SystemDrive%,%SystemRoot%
services.AddFileLogging("application%SystemDrive%-%SystemRoot%.log");

// 例子二:每天创建一个日志文件
services.AddFileLogging("application-{0:yyyy}-{0:MM}-{0:dd}.log", options =>
{
options.FileNameRule = fileName =>
{
return string.Format(fileName, DateTime.UtcNow);
};
});

// 例子三,任何自己喜欢的命名规则
services.AddFileLogging("application-{0:yyyy}-{0:MM}-{0:dd}.log", options =>
{
options.FileNameRule = fileName =>
{
// your rule...
};
});

// 例子四,批量设置多个
Array.ForEach(new[] { LogLevel.Information, LogLevel.Warning, LogLevel.Error }, logLevel =>
{
services.AddFileLogging("application-{1}-{0:yyyy}-{0:MM}-{0:dd}.log", options =>
{
options.FileNameRule = fileName => string.Format(fileName, DateTime.UtcNow, logLevel.ToString());
options.WriteFilter = logMsg => logMsg.LogLevel == logLevel;
});
});
  • 日志过滤器/筛选器

通过日志筛选器可以对日志进行归类写入

// 例子一:根据日志级别输出
services.AddFileLogging("infomation.log", options =>
{
options.WriteFilter = (logMsg) =>
{
return logMsg.LogLevel == LogLevel.Information;
};
});

services.AddFileLogging("error.log", options =>
{
options.WriteFilter = (logMsg) =>
{
return logMsg.LogLevel == LogLevel.Error;
};
});

// 例子二,根据任何规则,比如特定的类名
services.AddFileLogging("someclass.log", options =>
{
options.WriteFilter = (logMsg) =>
{
return logMsg.LogName.Contains("SomeClassName");
};
});
  • 自定义日志模板

默认情况下,Furion 提供了标准的日志输出模板,如:

2022-07-23T20:16:29.3459053+08:00   [INF]   [Furion.EventBus.EventBusHostedService] [0] EventBus Hosted Service is running.
2022-07-23T20:16:29.5827366+08:00 [INF] [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down.
2022-07-23T20:16:29.5828798+08:00 [INF] [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development
2022-07-23T20:16:29.5829377+08:00 [INF] [Microsoft.Hosting.Lifetime] [0] Content root path: C:\Workplaces\Furion\samples\Furion.Web.Entry\

如需自定义:

// 例子一,自定义日志模板(常用)
services.AddFileLogging("mytemplate.log", options =>
{
options.MessageFormat = (logMsg) =>
{
var stringBuilder = new StringBuilder();

stringBuilder.Append(DateTime.Now.ToString("o"));
// 其他的。。。自己组装

return stringBuilder.ToString();
};
});

// 例子二,需要输出 json 格式,比如对接阿里云日志,kibana第三方日志使用这个
services.AddFileLogging("mytemplate.log", options =>
{
options.MessageFormat = (logMsg) =>
{
// 高性能写入
return logMsg.WriteArray(writer =>
{
writer.WriteStringValue(DateTime.Now.ToString("o"));
writer.WriteStringValue(logMsg.LogLevel.ToString());
writer.WriteStringValue(logMsg.LogName);
writer.WriteNumberValue(logMsg.EventId.Id);
writer.WriteStringValue(logMsg.Message);
writer.WriteStringValue(logMsg.Exception?.ToString());
});
};
});

// 例子二,需要输出 json (自定义)格式,比如对接阿里云日志,kibana第三方日志使用这个
services.AddFileLogging("mytemplate.log", options =>
{
options.MessageFormat = (logMsg) =>
{
// 高性能写入
return logMsg.Write(writer =>
{
// write 对象为 Utf8JsonWriter,可通过流写入,性能极高
});
};
});

// 输出为 JSON 格式,Furion 4.5.2+
services.AddFileLogging("mytemplate.log", options =>
{
options.MessageFormat = LoggerFormatter.Json;
// Furion 4.8.0+ 新增 JSON 美化输出
options.MessageFormat = LoggerFormatter.JsonIndented;
});
  • 日志写入失败处理

有时候可能因为日志文件被打开或者其他应用程序占用了,那么就会导致日志写入失败,这时候可以进行其他相关处理:

// 例子一:其他处理
services.AddFileLogging("template-obj.log", options =>
{
options.HandleWriteError = (writeError) =>
{
// ~~
};
});

// 例子二,启用备用日志文件功能,也就是如果文件被占用了,可以创建新的备用日志继续写入,推荐!!!
services.AddFileLogging("template-obj.log", options =>
{
options.HandleWriteError = (writeError) =>
{
writeError.UseRollbackFileName(Path.GetFileNameWithoutExtension(writeError.CurrentFileName) + "-oops" + Path.GetExtension(writeError.CurrentFileName));
};
});
  • 自定义日志输出时间格式
版本说明

以下内容仅限 Furion 4.5.1 + 版本使用。

services.AddFileLogging("application.log", options =>
{
options.DateFormat = "yyyy-MM-dd HH:mm:ss.fffffff zzz dddd";
});
info: 2022-09-28 02:02:20(+08:00) 星期三 System.Logging.EventBusService[0] #1
EventBus Hosted Service is running.
info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[14] #1
Now listening on: https://localhost:5001
info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[14] #1
Now listening on: http://localhost:5000
info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1
Application started. Press Ctrl+C to shut down.
info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1
Hosting environment: Development
info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1
Content root path: D:\Workplaces\OpenSources\Furion\samples\Furion.Web.Entry\

18.5.3 输出到数据库/其他存储介质

将日志输出到数据库中也是非常常见的需求,Furion 把该功能做到了非常简单,支持任何存储介质。

在写入数据库/其他存储介质之前需创建数据库日志写入器并实现 IDatabaseLoggingWriter 接口,支持多个,如:

using Furion.Logging;

namespace YourProject.Core;

public class DatabaseLoggingWriter : IDatabaseLoggingWriter
{
// 支持构造函数注入任何实例,会自动释放任何服务,比如注入 IRepository,或者 SqlSugarClient
public DatabaseLoggingWriter()
{
}

public void Write(LogMessage logMsg, bool flush)
{
// 这里写你任何插入数据库的操作,无需 try catch
}
}

你没看错,就这么简单!!

  • 基础使用
// 例子一,默认配置
services.AddDatabaseLogging<DatabaseLoggingWriter>(options => {});

// 例子二:自定义配置
services.AddDatabaseLogging<DatabaseLoggingWriter>(options =>
{
options.MinimumLevel = LogLevel.Warning;

// 其他配置...
});
  • 从配置文件中读取
特别注意

只有不在 .AddDatabase 第一个参数为空才会自动加载配置。

数据库日志配置说明:

{
"Logging": {
"LogLevel": {
"Default": "Information"
// .... appsettings 默认配置
},
"Database": {
"MinimumLevel": "Information" // 最低日志记录级别
}
},
// 自定义配置节点
"MyLogger": {
"MinimumLevel": "Information"
}
}
// 例子一:默认读取 Logging:Database 节点
services.AddDatabaseLogging<DatabaseLoggingWriter>();

// 例子二:默认读取 Logging:Database 节点,支持更多配置
services.AddDatabaseLogging<DatabaseLoggingWriter>(default(string), options =>
{
options.MinimumLevel = LogLevel.Warning;

// 其他配置...
});

// 例子三:自定义配置节点
services.AddDatabaseLogging<DatabaseLoggingWriter>("MyLogger");
// 或
services.AddDatabaseLogging<DatabaseLoggingWriter>(() => "MyLogger");

// 例子四:自定义配置节点,支持更多配置
services.AddDatabaseLogging<DatabaseLoggingWriter>("MyLogger", options =>
{
options.MinimumLevel = LogLevel.Warning;

// 其他配置...
});
// 或
services.AddDatabaseLogging<DatabaseLoggingWriter>(() => "MyLogger", options =>
{
options.MinimumLevel = LogLevel.Warning;

// 其他配置...
});
  • 日志过滤器/筛选器

通过日志筛选器可以对日志进行归类写入

// 例子一:根据日志级别输出,可以分别定义 IDatabaseLoggingWriter,也可以用同一个底层进行判断
services.AddDatabaseLogging<InfomationLoggingWriter>(options =>
{
options.WriteFilter = (logMsg) =>
{
return logMsg.LogLevel == LogLevel.Information;
};
});
// 可以分别定义 IDatabaseLoggingWriter,也可以用同一个底层进行判断
services.AddDatabaseLogging<ErrorLoggingWriter>(options =>
{
options.WriteFilter = (logMsg) =>
{
return logMsg.LogLevel == LogLevel.Error;
};
});

// 例子二,根据任何规则,比如特定的类名
services.AddDatabaseLogging<DatabaseLoggingWriter>(options =>
{
options.WriteFilter = (logMsg) =>
{
return logMsg.LogName.Contains("SomeClassName");
};
});
  • 自定义日志模板
services.AddDatabaseLogging<DatabaseLoggingWriter>(options =>
{
options.MessageFormat = (logMsg) =>
{
var stringBuilder = new StringBuilder();

stringBuilder.Append(DateTime.Now.ToString("o"));
// 其他的。。。自己组装

return stringBuilder.ToString();
};
});

// 输出为 JSON 格式,Furion 4.5.2+
services.AddDatabaseLogging<DatabaseLoggingWriter>(options =>
{
options.MessageFormat = LoggerFormatter.Json;
// Furion 4.8.0+ 新增 JSON 美化输出
options.MessageFormat = LoggerFormatter.JsonIndented;
});
  • 日志写入失败处理

有时候可能因为数据库连接异常或其他原因连接池满,那么就会导致日志写入失败,这时候可以进行其他相关处理:

// 例子一:其他处理
services.AddDatabaseLogging<DatabaseLoggingWriter>(options =>
{
options.HandleWriteError = (writeError) =>
{
// ~~
};
});

18.5.4 ILoggerFactory 方式

Furion 也提供了运行时动态创建日志提供器并写入:

public class ContactModel : PageModel
{
private readonly ILogger _logger;

public ContactModel(ILoggerFactory logger)
{
// 支持所有 AddLoggingFile 和 AddDatabaseFile 配置
_logger = logger.AddFile(....).CreateLogger("MyCategory");
}

public void OnGet()
{
_logger.LogInformation("GET Pages.ContactModel called.");
}
}

18.5.5 ILoggingBuilder 方式

Furion 也提供了原生 services.AddLogging(builder => {}) 方式配置,如

services.AddLogging(builder =>
{
builder.AddFile("applicaion.log");

builder.AddDatabase<DatabaseLoggingWriter>();

//....
});

18.5.6 记录请求日志

ASP.NET 6 中,框架默认提供了 app.UseHttpLogging() 记录 HTTP 请求日志功能,详细了解可查看官方文档 ASP.NET Core - HTTP 日志记录

当然也可以自定义中间件的方式写,只需要注入 ILogger<> 接口即可。

18.5.7 DebugTrace 默认不输出问题

默认情况下,微软在 appsettings.jsonappsettings.Development.json 中配置了 Default 日志级别,如需自定义:

{
"Logging": {
"LogLevel": {
"Default": "Information"
}
}
}

这时候只需要修改 DefaultDebugTrace 即可,注意不同环境加载不同的配置文件。开发环境应修改 appsettings.Development.json 下的配置。

18.6 [LoggingMonitor] 监听日志

Furion 3.9.1 版本新增了 [LoggingMonitor] 特性,支持在控制器或操作中贴该特性,可以实现强大的请求日志监听,方便测试,如:

18.6.1 特性配置

using Furion.Logging;

namespace Furion.Application;

public class TestLoggerServices : IDynamicApiController
{
[LoggingMonitor]
public PersonDto GetPerson(int id)
{
return new PersonDto
{
Id = id
};
}
}
  • [LoggingMonitor] 支持以下配置:
    • Title:配置标题,string 类型,默认 Logging Monitor
    • WithReturnValue:是否包含返回值打印,bool 类型,默认 trueFurion 4.3.9+ 有效
    • ReturnValueThreshold:配置返回值字符串阈值,int 类型,默认 0 全量输出,Furion 4.3.9+ 有效
    • JsonBehavior:配置 LoggingMonitor Json 输出行为,默认 NoneFurion 4.5.2+ 有效
    • JsonIndented:配置 LoggingMonitor Json 格式化行为,bool 类型,默认 falseFurion 4.8.0+ 有效

输出日志为:

┏━━━━━━━━━━━  Logging Monitor ━━━━━━━━━━━
┣ Furion.Application.TestLoggerServices.GetPerson (Furion.Application)

┣ 控制器名称: TestLoggerServices
┣ 操作名称: GetPerson
┣ 路由信息: [area]: ; [controller]: test-logger; [action]: person
┣ 请求方式: POST
┣ 请求地址: https://localhost:44316/api/test-logger/person/11
┣ 来源地址: https://localhost:44316/api/index.html
┣ 浏览器标识: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62
┣ 客户端 IP 地址: 0.0.0.1
┣ 服务端 IP 地址: 0.0.0.1
┣ 服务端运行环境: Development
┣ 执行耗时: 31ms
┣ ━━━━━━━━━━━━━━━ 授权信息 ━━━━━━━━━━━━━━━
┣ JWT Token: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY1ODcxNjc5NywibmJmIjoxNjU4NzE2Nzk3LCJleHAiOjE2NTg3MTc5OTcsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.VYZkwwqCwlUy3aJjuL-og62I0rkxNQ96kSjEm3VgXtg

┣ UserId (integer)1
┣ Account (string): admin
┣ iat (integer)1658716797
┣ nbf (integer)1658716797
┣ exp (integer)1658717997
┣ iss (string): dotnetchina
┣ aud (string): powerby Furion
┣ ━━━━━━━━━━━━━━━ 参数列表 ━━━━━━━━━━━━━━━
┣ Content-Type:

id (Int32)11
┣ ━━━━━━━━━━━━━━━ 返回信息 ━━━━━━━━━━━━━━━
┣ 类型: Furion.Application.Persons.PersonDto
┣ 返回值: {"Id":11,"Name":null,"Age":0,"Address":null,"PhoneNumber":null,"QQ":null,"CreatedTime":"0001-01-01T00:00:00+00:00","Childrens":null,"Posts":null}
┗━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━

18.6.2 全局配置

如需全局启用 LoggingMonitor 功能,无需在每个控制器或者方法中贴,全局注册如下:

services.AddMvcFilter<LoggingMonitorAttribute>();
Furion 4.0.2 新推荐配置

Furion 4.0.2 版本中新增了非常灵活方便的 services.AddMonitorLogging() 服务配置,可在配置中随意控制哪个类哪个方法启用或不启用。

  • 注册服务
services.AddMonitorLogging();   // 默认读取 Logging:Monitor 下配置,支持传入参数自定义
  • 添加配置
{
"Logging": {
"Monitor": {
"GlobalEnabled": false, // 是否启用全局拦截,默认 `false`
"IncludeOfMethods": [], // 是否指定拦截特定方法,当 GlobalEnabled: false 有效
"ExcludeOfMethods": [], // 是否指定排除特定方法,当 GlobalEnabled: true 有效
"BahLogLevel": "Information", // 配置 Oops.Oh 和 Oops.Bah 业务日志输出级别,默认 Information
"WithReturnValue": true, // 配置是否包含返回值,默认 `true`,Furion 4.3.9+ 有效
"ReturnValueThreshold": 0, // 配置返回值字符串阈值,默认 0,全量输出,Furion 4.3.9+ 有效
"JsonBehavior": "None", // 配置 LoggingMonitor Json 输出行为,默认 None,Furion 4.5.2+ 有效
"JsonIndented": false, // 配置 LoggingMonitor Json 格式化行为,默认 false,Furion 4.8.2+ 有效
"MethodsSettings": [
// 配置被监视方法更多信息,Furion 4.3.9+ 有效
{
"FullName": "Furion.Application.TestLoggerServices.MethodName", // 方法完全限定名
"WithReturnValue": true, // 配置是否包含返回值,默认 `true`,Furion 4.3.9+ 有效
"ReturnValueThreshold": 0, // 配置返回值字符串阈值,默认 0,全量输出,Furion 4.3.9+ 有效
"JsonIndented": false // 配置 LoggingMonitor Json 格式化行为,默认 false,Furion 4.8.2+ 有效
}
]
}
}
}

IncludeOfMethodsExcludeOfMethods 方法签名格式为:类完全限定名.方法名,如:Furion.Application.TestNamedServices.GetNameFurion.Application.TestNamedServices 是类名,GetName 是方法名。

如果配置了全局请求监视日志,对个别不需要监视的接口方法只需要贴 [SuppressMonitor] 特性即可。

18.6.3 更多配置

版本说明

以下内容仅限 Furion 4.3.9 + 版本使用。

支持 LoggingMonitor 写入日志拦截,如添加额外数据:

services.AddMonitorLogging(options =>
{
options.ConfigureLogger((logger, logContext, context) =>
{
var httpContext = context.HttpContext;
logContext.Set("extra", "其他数据");
});
});

除此之外,还支持配置 json 路径:

services.AddMonitorLogging(jsonKey: "YourKey:Monitor");

18.6.4 JSON 格式

版本说明

以下内容仅限 Furion 4.5.2 + 版本使用。

  1. 全局/局部启用 Json 输出配置
// 全局
services.AddMonitorLogging(options =>
{
options.JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson;
options.JsonIndented = true; // 是否美化 JSON,Furion 4.8.0+ 版本有效
});

// 局部
[LoggingMonitor(JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson)]
// 是否美化 JSON,Furion 4.8.0+ 版本有效
[LoggingMonitor(JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson, JsonIndented = true)]
关于 JsonBehavior

只有设置为 JsonBehavior.OnlyJson 时才不会输出美观的日志。

  1. 写入存储介质
using Furion.Logging;

namespace YourProject.Core;

public class DatabaseLoggingWriter : IDatabaseLoggingWriter
{
// 支持构造函数注入任何实例,会自动释放任何服务,比如注入 IRepository,或者 SqlSugarClient
public DatabaseLoggingWriter()
{
}

public void Write(LogMessage logMsg, bool flush)
{
// 如果 JsonBehavior 配置为 OnlyJson 或者 All,那么 Context 就包含 loggingMonitor 的值
// 如果 JsonBehavior 配置为 OnlyJson,那么可直接通过 logMsg.Message 获取结果就是 json 格式
if (logMsg.LogName == "System.Logging.LoggingMonitor")
{
var jsonString = logMsg.Context.Get("loggingMonitor");
}

// 这里写你任何插入数据库的操作,无需 try catch
}
}

Json 输出格式如下:

{
"controllerName": "test-logger",
"controllerTypeName": "TestLoggerServices",
"actionName": "person",
"actionTypeName": "GetPerson",
"areaName": null,
"displayName": "Furion.Application.TestLoggerServices.GetPerson (Furion.Application)",
"localIPv4": "0.0.0.1",
"remoteIPv4": "0.0.0.1",
"httpMethod": "GET",
"requestUrl": "https://localhost:5001/api/test-logger/person/2",
"refererUrl": "https://localhost:5001/api/index.html?urls.primaryName=数据库操作演示",
"environment": "Development",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.53",
"requestHeaderAuthorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY2NDQ1MDUwNSwibmJmIjoxNjY0NDUwNTA1LCJleHAiOjE2NjQ0NTE3MDUsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.-xocNcDQGoXClceoVU5QAHIkTcOZ7ZXo0hEbzghDfFI",
"timeOperationElapsedMilliseconds": 55,
"authorizationClaims": [
{
"type": "UserId",
"valueType": "integer",
"value": "1"
},
{
"type": "Account",
"valueType": "string",
"value": "admin"
},
{
"type": "iat",
"valueType": "integer",
"value": "1664450505"
},
{
"type": "nbf",
"valueType": "integer",
"value": "1664450505"
},
{
"type": "exp",
"valueType": "integer",
"value": "1664451705"
},
{
"type": "iss",
"valueType": "string",
"value": "dotnetchina"
},
{
"type": "aud",
"valueType": "string",
"value": "powerby Furion"
}
],
"parameters": [
{
"name": "id",
"type": "System.Int32",
"value": 2
}
],
"returnInformation": {
"type": "Furion.UnifyResult.RESTfulResult`1[[System.Object, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]",
"actType": "Furion.Application.Persons.PersonDto",
"value": {
"StatusCode": 200,
"Data": {
"Id": 2,
"Name": null,
"Age": 0,
"Address": null,
"PhoneNumber": null,
"QQ": null,
"CreatedTime": "0001-01-01T00:00:00+00:00",
"Childrens": null,
"Posts": null
},
"Succeeded": true,
"Errors": null,
"Extras": null,
"Timestamp": 1664450517341
}
},
"exception": {
"type": "System.DivideByZeroException",
"message": "Attempted to divide by zero.",
"stackTrace": " at Furion.Application.TestLoggerServices.测试日志监听8(Int32 id) in D:\\Workplaces\\OpenSources\\Furion\\samples\\Furion.Application\\TestLoggerServices.cs:line 78\r\n at lambda_method103(Closure , Object , Object[] )\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)"
},
"validation": {
"errorCode": null,
"originErrorCode": null,
"message": "出错了啊。。。。"
}
}

18.6.5 全局过滤 WriteFilter

版本说明

以下内容仅限 Furion 4.5.9 + 版本使用。

Furion 4.5.9+ 版本新增了 WriteFilter 过滤功能,可根据自定义逻辑自定义过滤拦截:

services.AddMonitorLogging(options =>
{
options.WriteFilter = (context) =>
{
// 获取控制器/操作描述器
var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;

// 你的逻辑....,不需要拦截返回 false,否则 true

return true;
};
});

18.6.6 输出 JSON 支持忽略属性名或属性类型

版本说明

以下内容仅限 Furion 4.6.1 + 版本使用。

有时接口的返回值包含不能被序列化的类型或者想忽略某些属性名不被序列化,这时候就需要用到这个。

  • 局部配置
// 忽略名称和属性,支持单一配置或局部配置
[LoggingMonitor(JsonBehavior = JsonBehavior.OnlyJson
, IgnorePropertyNames = new[] { "Bytes" }
, IgnorePropertyTypes = new[] { typeof(byte[]) })]
public object 测试指定忽略指定序列化类型(int id)
{
return new
{
Id = 10,
Bytes = File.ReadAllBytes("image.png")
};
}
  • 全局配置
// 忽略名称和属性,支持单一配置或局部配置
services.AddMonitorLogging(options =>
{
options.IgnorePropertyNames = new[] { "Byte" };
options.IgnorePropertyTypes = new[] { typeof(byte[]) };
});

18.6.7 将 LoggingMonitor 写入数据库

  1. 注册 .AddDatabaseLogging<> 服务:
services.AddDatabaseLogging<DatabaseLoggingWriter>(options =>
{
options.WriteFilter = (logMsg) =>
{
return logMsg.LogName == "System.Logging.LoggingMonitor";
};
});
  1. 写入数据库
using Furion.Logging;

namespace YourProject.Core;

public class DatabaseLoggingWriter : IDatabaseLoggingWriter
{
// 任何数据库 ORM 注入。。。
public DatabaseLoggingWriter()
{
}

public void Write(LogMessage logMsg, bool flush)
{
// 将 logMsg 的属性一一插入到数据库中~
}
}
单个 DatabaseLoggingWriter 情况

如果已经全局注册了:

services.AddDatabaseLogging<DatabaseLoggingWriter>();   // 注意这里没有过滤 logName

且不想多注册一个数据库日志服务,那么只需要在代码中过滤即可:

using Furion.Logging;

namespace YourProject.Core;

public class DatabaseLoggingWriter : IDatabaseLoggingWriter
{
// 任何数据库 ORM 注入。。。
public DatabaseLoggingWriter()
{
}

public void Write(LogMessage logMsg, bool flush)
{
// 将 logMsg 的属性一一插入到数据库中~
if(logMsg.LogName == "System.Logging.LoggingMonitor")
{
// 写入审计表数据库
}
else
{
// 写入其他表数据库
}
}
}

18.7 打印日志到 Swagger

Furion 框架中默认集成了 MiniProfiler 组件并与 Swagger 进行了结合,如需打印日志或调试代码,只需调用以下方法即可:

App.PrintToMiniProfiler("分类", "状态", "要打印的消息");

18.8 静态 Default() 方式构建

StringLoggingPart.Default().SetMessage("这是一个日志").LogInformation();

18.9 规范日志模板

Furion v3.5.3+ 新增了 TP.Wrapper(...) 规范模板,使用如下:

// 生成模板字符串
var template = TP.Wrapper("Furion 框架", "让 .NET 开发更简单,更通用,更流行。",
"##作者## 百小僧",
"##当前版本## v3.5.3",
"##文档地址## https://furion.icu",
"##Copyright## 百小僧, Baiqian Co.,Ltd.");

Console.WriteLine(template);

日志打印模板如下:

┏━━━━━━━━━━━  Furion 框架 ━━━━━━━━━━━
┣ 让 .NET 开发更简单,更通用,更流行。

┣ 作者: 百小僧
┣ 当前版本: v3.5.3
┣ 文档地址: https://furion.icu
┣ Copyright: 百小僧, Baiqian Co.,Ltd.
┗━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━

关于属性生成

如果列表项以 ##属性名## 开头,自动生成 属性名: 作为行首且自动等宽对齐。

Furion 3.9.1 之前版本使用 [属性名] 开头。

18.10 日志上下文

版本说明

以下内容仅限 Furion 4.6.0 + 版本使用。

有时候我们希望为日志提供额外数据,这时候可通过 .ScopeContext() 配置,如:

// 写法一
using (var scope = _logger.ScopeContext(ctx => ctx.Set("Name", "Furion").Set("UserId", 10)))
{
_logger.LogInformation("我是一个日志 {id}", 20);
}

// 写法二
using var scope = _logger.ScopeContext(new Dictionary<object, object> {
{ "Name", "Furion" },
{ "UserId", 10 }
});
_logger.LogInformation("我是一个日志 {id}", 20);

// 写法三
using var scope = _logger.ScopeContext(new LogContext {
// ....
});
_logger.LogInformation("我是一个日志 {id}", 20);

// 写法四
var (logger, scoped) = Log.ScopeContext(new LogContext {
// ...
});
logger.LogInformation("我是一个日志 {id}", 20);
scoped?.Dispose();

// 写法五
"我是一个日志 {id}".ScopeContext(new LogContext {
// ...
}).LogInformation();

LogMessage 对象中使用:

var value = logMsg.Context.Get("Key");

// 比如在过滤中使用
services.AddFileLogging("infomation.log", options =>
{
options.WriteFilter = (logMsg) =>
{
// 还可以设置给运行时使用:logMsg.Context.Set(...);
return logMsg.Context.Get("Name") == "Furion";
};
});

// 在 IDatabaseLoggingWriter 中使用
public void Write(LogMessage logMsg, bool flush)
{
var name = logMsg.Context.Get("Name");
}

还可以实现共享日志上下文,如:

public TestAppService: ITestAppService, IDisposable
{
private readonly ILogger<TestAppService> _logger;
private IDisposable _scopeProvider;

public TestAppService(ILogger<TestAppService> logger)
{
_logger = logger;

// 添加全局用户信息上下文数据
_scopeProvider = _logger.ScopeContext(ctx => ctx.Set("uid", "100").Set("uname", "百小僧"));
}

public string GetName(int id)
{
// 共享全局上下文数据
_logger.LogInformation("写入新的日志");

return "Furion";
}

public string GetTags(int id)
{
// 额外新增上下文数据
using var scope = _logger.ScopeContext(ctx => ctx.Set("key", "value"));
_logger.LogInformation("设置额外的上上下文日志");

return "百小僧";
}

public void Dispose()
{
_scopeProvider.Dispose();
}
}

18.11 关闭 .NET Core 底层的日志

默认情况下,.NET Core 底层默认输出了很多日志,如需关闭只需在 appsettings.jsonappsettings.Development.json 中添加 "命名空间/日志类别":"最低日志级别" 日志类别过滤即可,如:

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Microsoft.EntityFrameworkCore": "Information",
"System.Net.Http.HttpClient": "Warning",
"命名空间/日志类别": "Warning"
}
}
}

小提醒:过滤 .NET Core 底层日志最低日志级别通常设置为 Warning

18.12 关于数据库日志循环输出日志

微软提供的 EFCore 或者第三方 ORM 本身操作数据库时自带日志输出,这就会导致 IDatabaseLoggingWriterWrite 死循环,解决这个问题有以下方法:

  1. 创建新的数据库操作实例并关闭日志
  2. 更新到 Furion 4.7.0+ 版本 (推荐)
  3. 自行根据业务逻辑过滤

如不存在该问题可关闭框架自带死循环检测功能(对性能有提升作用)

services.AddDatabaseLogging<DatabaseLoggingWriter>(options =>
{
options.IgnoreReferenceLoop = false;
});

18.13 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 日志 知识可查阅 ASP.NET Core - 日志 章节 和 Serilog 文档。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/middleware/index.html b/handbook/build/docs/middleware/index.html new file mode 100644 index 00000000000..cd5b62b759b --- /dev/null +++ b/handbook/build/docs/middleware/index.html @@ -0,0 +1,17 @@ + + + + + +5.5 中间件 (Middleware) | Furion + + + + + +
+

5.5 中间件 (Middleware)

5.5.1 关于中间件

中间件是一种装配到应用管道以处理请求和响应的软件。 每个组件:

  • 选择是否将请求传递到管道中的下一个组件。
  • 可在管道中的下一个组件前后执行工作。
  • 请求委托用于生成请求管道。 请求委托处理每个 HTTP 请求。

一句话总结:中间件是比筛选器更底层,更上游的面向切面技术,其性能最高,可处理的应用范围远比过滤器广,如实现网关,URL 转发,限流等等。

中间件更多内容

本章节暂不考虑将中间件展开讲,想了解更多知识可阅读官方文档 【ASP.NET Core - 中间件

5.5.2 常见中间件

5.5.2.1 所有请求返回同一个结果

app.Run(async context =>
{
await context.Response.WriteAsync("Hello world!");
});

5.5.2.2 拦截所有请求(可多个)

app.Use(async (context, next) =>
{
// 比如设置统一头
context.Response.Headers["framework"] = "Furion";

// 执行下一个中间件
await next.Invoke();
});

// 多个
app.Use(...);

5.5.2.3 特定路由中间件(可多个)

app.Map("/hello", app => {
app.Run(async context =>
{
await context.Response.WriteAsync("Map Test 1");
});
});

app.Map("/hello/say", app => {
// ....
});

5.5.2.4 嵌套路由中间件(可多个)

app.Map("/level1", level1App => {
level1App.Map("/level2a", level2AApp => {
// "/level1/level2a" processing
});
level1App.Map("/level2b", level2BApp => {
// "/level1/level2b" processing
});
});

更多例子查看官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-6.0

5.5.3 自定义中间件

自定义中间件有多种方式,最简单的是通过 app.Use 方式,另外还支持独立类定义方式。

5.5.3.1 app.Use 方式 (不推荐)

Starup.cs
app.Use(async (context, next) =>
{
var cultureQuery = context.Request.Query["culture"];
if (!string.IsNullOrWhiteSpace(cultureQuery))
{
var culture = new CultureInfo(cultureQuery);

CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;
}

// 调用下一个中间件
await next(context);
});

5.5.3.2 独立类 方式(推荐)

独立类的方式是目前最为推荐的方式,拓展性强,维护性高,如:

  • 定义中间件,建议以 Middleware 结尾:
using System.Globalization;

namespace Middleware.Example;

public class RequestCultureMiddleware
{
private readonly RequestDelegate _next;

public RequestCultureMiddleware(RequestDelegate next)
{
_next = next;
}

public async Task InvokeAsync(HttpContext context)
{
var cultureQuery = context.Request.Query["culture"];
if (!string.IsNullOrWhiteSpace(cultureQuery))
{
var culture = new CultureInfo(cultureQuery);

CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;
}

// 调用下一个中间件
await _next(context);
}
}
  • 添加中间件拓展类

定义了中间件之后,需要创建这个中间件的拓展类,中间件拓展方法建议以 Use 开头,如:

public static class RequestCultureMiddlewareExtensions
{
public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder)
{
return builder.UseMiddleware<RequestCultureMiddleware>();
}
}
  • Startup.cs 中使用
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ... 其他中间件
app.UseRequestCulture();
// ... 其他中间件
}

5.5.3.3 配置更多参数

默认情况下,自定义独立类中间件构造函数只有一个 RequestDelegate 参数,除此之后,还可以注入服务接口/类(建议是单例服务),另外还支持传入任何其他类型。

  • 服务类型参数
using System.Globalization;

namespace Middleware.Example;

public class RequestCultureMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<RequestCultureMiddleware> _logger;

public RequestCultureMiddleware(RequestDelegate next
, ILogger<RequestCultureMiddleware> logger)
{
_next = next;
_logger = logger;
}

public async Task InvokeAsync(HttpContext context)
{
// 其他代码

_logger.LogInformation("...");

// 调用下一个中间件
await _next(context);
}
}
  • 非服务类型参数

除此之外,还可以添加 非服务参数 参数,但必须是最后一个参数!!!

using System.Globalization;

namespace Middleware.Example;

public class RequestCultureMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<RequestCultureMiddleware> _logger;

public RequestCultureMiddleware(RequestDelegate next
, ILogger<RequestCultureMiddleware> logger
, int age
, string name)
{
_next = next;
_logger = logger;
}

public async Task InvokeAsync(HttpContext context)
{
// 其他代码

_logger.LogInformation("...");

// 调用下一个中间件
await _next(context);
}
}

之后还需要修改中间件拓展类:

public static class RequestCultureMiddlewareExtensions
{
public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder, int age, string name)
{
return builder.UseMiddleware<RequestCultureMiddleware>(new object[] {age, name });
}
}

使用:

app.UseRequestCulture(30, "百小僧");

5.5.4 中间件顺序

中间件是有执行顺序的,而且是先注册的先执行,无法通过其他方式更改,参考下图:

5.5.5 依赖注入/解析服务

中间件有两种方式注入服务,一种是通过构造函数注入,一种是通过 httpContext.RequestServices 方式解析。

5.5.5.1 构造函数方式

using System.Globalization;

namespace Middleware.Example;

public class RequestCultureMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<RequestCultureMiddleware> _logger;

public RequestCultureMiddleware(RequestDelegate next
, ILogger<RequestCultureMiddleware> logger
, IHostEnvironment hostEnvironment)
{
_next = next;
_logger = logger;
}

public async Task InvokeAsync(HttpContext context)
{
// 其他代码

// 调用下一个中间件
await _next(context);
}
}
特别说明

通过构造函数的方式建议注入 单例模式 的服务,否则可能存在服务不能释放问题,如需使用瞬时或作用域的服务,可使用下列 httpContext.RequestServices 方式

5.5.5.2 httpContext.RequestServices 方式

通过这种方式可以使用非单例服务解析:

using System.Globalization;

namespace Middleware.Example;

public class RequestCultureMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger<RequestCultureMiddleware> _logger;

// 构造函数注册单例
public RequestCultureMiddleware(RequestDelegate next
, ILogger<RequestCultureMiddleware> logger
, IHostEnvironment hostEnvironment)
{
_next = next;
_logger = logger;
}

public async Task InvokeAsync(HttpContext context)
{
// 非单例模式
using var serviceProvider = context.RequestServices.CreateScope();
var repository = serviceProvider.ServiceProvider.GetService<IRepository>();

// 调用下一个中间件
await _next(context);
}
}

5.5.6 常见问题

由于中间件是比较原始的切面方式,有时候我们需要获取终点路由的特性或者其他信息,则需要一点技巧:

// 获取终点路由特性
var endpointFeature = context.Features.Get<IEndpointFeature>();

// 获取是否定义了特性
var attribute = endpointFeature?.Endpoint?.Metadata?.GetMetadata<YourAttribute>()

5.5.7 了解更多

想了解更多中间件知识可阅读官方文档 【ASP.NET Core - 中间件

5.5.8 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/module-dev/index.html b/handbook/build/docs/module-dev/index.html new file mode 100644 index 00000000000..43baa74e2f9 --- /dev/null +++ b/handbook/build/docs/module-dev/index.html @@ -0,0 +1,17 @@ + + + + + +28. 模块化开发 | Furion + + + + + +
+

28. 模块化开发

特别注意

以下的模块化配置必须在 appsettings.json 下配置才有效,原因是启动的时候 appsettings.json 已经加载,自定义配置文件还未加载。

28.1 关于模块化开发

模块化是代码的组成的一种方式,模块化系统就像乐高玩具一样,一块一块零散积木堆积起一个精彩的世界。每种积木的形状各不相同,功能各不相同,积木与积木直接互相依赖,互相支撑。

28.1.1 模块化开发好处

模块化开发能够将不同的功能组装在一起,实现功能的累加,诸多功能组装在一起,最终形成项目。

28.2 模块分类

  • 应用程序模块:通常这类模块是完整的应用程序,可以独立运行,有自己的实体、服务、API 及 UI 组件等。
  • 框架级模块:这类通常是解决某个业务功能进行开发的模块,比如上传文件、分布式缓存、数据验证等。

28.3 如何进行模块化开发

Furion 框架设计之初就考虑到模块化开发,所以从最初版本就具备此功能。启用 Furion 模块化支持非常简单。

28.3.1 启用模块化支持

{
"AppSettings": {
"EnabledReferenceAssemblyScan": true, // 启用模块化程序集扫描
"SupportPackageNamePrefixs": ["Module1", "Module2",...] // 配置通过 Nuget 方式安装的模块化包,如果不是通过 Nuget 方式可不配置
// "ExternalAssemblies": ["plugins/Module1.dll", "plugins/Module2.dll", ...] // 配置加载网站 plugins 目录下的模块程序集,可不配置
}
}

28.3.2 各种添加模块配置方式

添加模块到现有的应用中有多种方式:

  1. 直接通过项目添加模块化引用或编辑 .csproj 添加模块

这种方式无需任何配置,Furion 框架可自动加载模块。

  1. 通过添加 .dll 方式引用模块

需要配置 EnabledReferenceAssemblyScan 节点,如:

{
"AppSettings": {
"EnabledReferenceAssemblyScan": true
}
}
  1. 通过 Nuget 方式安装模块

如果通过 Nuget 方式安装模块,需要配置 SupportPackageNamePrefixs 节点,如:

{
"AppSettings": {
"SupportPackageNamePrefixs": ["Nuget包名称", "Nuget包名称",...]
}
}
  1. 通过动态加载 .dll 方式安装模块

这种方式通常是在网站创建一个文件夹放入模块化 .dll 文件,如:plugins,无需添加引用可自动加载。

{
"AppSettings": {
"ExternalAssemblies": ["plugins/Module1.dll", "plugins/Module2.dll", ...]
}
}
特别注意

如果非生产环境,那么 plugins 文件夹放在 bin\Debug\net n.0\bin\Release\net n.0 目录下。

如果是生产环境,则直接放在根目录即可。

28.4 模块化开发注意事项

  • 尽可能保证每个模块都有独立的路由地址格式:/模块化名称/路由地址,这样才能保证不会和现有的系统出现冲突。
  • 开发模块化是尽可能设计为完全独立的引用,如果需要包含 UI 元素如视图、html/cs/javascript 应采用嵌入式方式
  • 模块化开发如果需要添加第三方服务,应配置在 AppStartup 的派生类中。
  • 模块化的所在程序集的注释文件 .xml 需放在和 .dll 同级目录

28.5 关于热插拔机制

Furion v2.4.0 + 版本之后,框架移除了热加载和热卸载模块的功能,原因是目前微软提供的 AssemblyLoadContext + 文件夹监听 处理 .dll 运行时热拔插机制还未成熟,此功能将在 .NET6 版本得到改善。

也就是,自 v2.4.0+ 版本之后,Furion 框架只提供在启动时加载模块,不在运行时进行任何处理。

28.6 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/mongodb/index.html b/handbook/build/docs/mongodb/index.html new file mode 100644 index 00000000000..838b4723666 --- /dev/null +++ b/handbook/build/docs/mongodb/index.html @@ -0,0 +1,17 @@ + + + + + +10.3 MongoDB 操作 | Furion + + + + + +
+

10.3 MongoDB 操作

温馨提醒

Furion 包中默认集成了 EFCore如果不使用 EFCore,可安装纯净版 Furion.Pure 代替 Furion

10.3.1 关于 MongoDB

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

10.3.2 如何集成

Furion 框架中,已经推出 MongoDB 拓展包 Furion.Extras.DatabaseAccessor.MongoDB

10.3.2.1 注册 MongoDB 服务

使用非常简单,只需要在 Startup.cs 中添加 services.AddMongoDB(connectionString) 即可。如:

// 方式一
services.AddMongoDB("mongodb://localhost:27017");

// 方式二
services.AddMongoDB(new MongoClientSettings {});

// 方式三
services.AddMongoDB(new MongoUrl {});

10.3.3 基本使用

在使用之前,我们可以通过构造函数注入 IMongoDBRepository 接口,如:

  • 非泛型版本
private readonly IMongoDBRepository _mongoRepository;
public PersonService(IMongoDBRepository mongoRepository)
{
_mongoRepository = mongoRepository;
}

10.3.3.1 常见例子

var database = _mongoRepository.Context.GetDatabase("foo");
var collection = database.GetCollection<BsonDocument>("bar");

await collection.InsertOneAsync(new BsonDocument("Name", "Jack"));

var list = await collection.Find(new BsonDocument("Name", "Jack"))
.ToListAsync();

foreach(var document in list)
{
Console.WriteLine(document["Name"]);
}
public class Person
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}

var database = _mongoRepository.Context.GetDatabase("foo");
var collection = database.GetCollection<Person>("bar");

await collection.InsertOneAsync(new Person { Name = "Jack" });

var list = await collection.Find(x => x.Name == "Jack")
.ToListAsync();

foreach(var person in list)
{
Console.WriteLine(person.Name);
}

10.3.3.2 获取 MongoClient 对象

IMongoDBRepository 只封装了 MongoDB 基础功能,如需获取更多操作可通过 .Context 属性获取 MongoClient 对象,如:

var client = _mongoRepository.Context;

10.3.4 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 MongoDB 知识可查阅 MongoDB 仓库

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/net5-to-net6/index.html b/handbook/build/docs/net5-to-net6/index.html new file mode 100644 index 00000000000..a02f2463f21 --- /dev/null +++ b/handbook/build/docs/net5-to-net6/index.html @@ -0,0 +1,18 @@ + + + + + +2.5 .NET5 升级 .NET6 | Furion + + + + + +
+

2.5 .NET5 升级 .NET6

2.5.1 升级注意事项

目前使用 Furion 所有版本(0.x-3.x)的用户均可以快速无缝升级至 Furion v4.x 版本,只需要做少量更改即可。

2.5.1.1 安装 .NET6 SDK

https://dotnet.microsoft.com/download/dotnet/6.0

2.5.1.2 编辑 .csproj 文件

编辑解决方案所有项目的 .csproj 文件,并替换 <TargetFramework>net5.0</TargetFramework><TargetFramework>net6.0</TargetFramework>,如:

当然也可以使用 Ctrl + F 全局替换

2.5.1.3 升级 Nuget

Furion 所有包升级至 v4.7.9 版本,同时 Microsoft 所有包升级至 v6.0.8 版本,如:

2.5.1.4 删除 Startup.cs 文件

删除 Web 启动层Startup.cs 文件,如:

2.5.1.5 编辑 Web 启动层 .csproj

编辑 Web 启动层 .csproj 文件,并添加 <ImplicitUsings>enable</ImplicitUsings>,如:

2.5.1.6 替换 Program.cs 内容为:

var builder = WebApplication.CreateBuilder(args).Inject();
var app = builder.Build();
app.Run();
v3.6.4+ 版本

如果使用 Furion 3.6.4+ 版本,可直接使用 Serve.Run(RunOptions.Default); 替代上面即可。

小提醒

如果使用了 Serilog 日志组件,可添加 builder.UseSerilogDefault();

也可以使用 Serve.Run(RunOptions.Default.ConfigureBuilder(builder => builder.UseSerilogDefault()));

如果使用了 pgsql 数据库,你还可能需要添加 AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); +=> 相关说明:在 .NET6 中 Npgsql 6.0 对时间戳的映射方式进行了一些重要的更改。

2.5.1.7 重新编译整个解决方案

升级完成!!!

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/net6-to-net7/index.html b/handbook/build/docs/net6-to-net7/index.html new file mode 100644 index 00000000000..3893ab86d1e --- /dev/null +++ b/handbook/build/docs/net6-to-net7/index.html @@ -0,0 +1,17 @@ + + + + + +2.5 .NET6 升级 .NET7 | Furion + + + + + +
+

2.5 .NET6 升级 .NET7

.NET7 发布

🚀🎉🔥 2022 年 11 月 08 日,微软发布了 .NET7 首个正式版。

2.5.1 升级注意事项

目前使用 Furion 所有版本(0.x-3.x)的用户均可以快速无缝升级至 Furion v4.x 版本,只需要做少量更改即可。

2.5.1.1 安装 .NET7 SDK

https://dotnet.microsoft.com/download/dotnet/7.0

2.5.1.2 编辑 .csproj 文件

编辑解决方案所有项目的 .csproj 文件,并替换 <TargetFramework>net6.0</TargetFramework><TargetFramework>net7.0</TargetFramework>,如:

当然也可以使用 Ctrl + F 全局替换

2.5.1.3 升级 Nuget

Furion 所有包升级至 v4.7.9 版本,同时 Microsoft 所有包升级至 v7.0.0 版本,如:

2.5.1.4 重新编译整个解决方案

升级完成!!!

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/nuget-local/index.html b/handbook/build/docs/nuget-local/index.html new file mode 100644 index 00000000000..b772249866f --- /dev/null +++ b/handbook/build/docs/nuget-local/index.html @@ -0,0 +1,17 @@ + + + + + +2.9 Nuget 本地调试包 | Furion + + + + + +
+

2.9 Nuget 本地调试包

2.9.1 关于本地测试包

正常情况下,我们都是通过 Nuget 在线平台(Visual Studio 内置的 Nuget 包管理器)安装拓展依赖,但有时候我们不希望发布到 Nuget 平台或者只想在本地使用又或者先在本地测试通过再发布。

这样做的好处是:

  • 可以有效保护公司核心代码
  • 方便开源项目测试

2.9.2 如何配置

2.9.2.1 测试包命名规则

默认情况下,Furion 会根据 Furion.版本号-beta.Issue编号 规则生成 .nupkg.snupkg 包,前者是不包含调试的无符号 Nuget 包,后者则是调试符号包(方便 IDE 调试用的),如:

D:\Furion_Nuget_Test_Packages
Furion.4.2.3-beta-I5MM3O.nupkg
Furion.4.2.3-beta-I5MM3O.snupkg

其中 I5MM3O 对应的正是 Issue 的编号:https://gitee.com/dotnetchina/Furion/issues/I5MM3O

2.9.2.2 配置本地包路径

有了这两个包之后,就可以在本地磁盘中创建文件夹并放进去,如 D:\Furion_Nuget_Test_Packages

2.9.2.3 在 Visual Studio 中配置路径

关于命令行操作

如果不使用可视化 IDE 配置,可通过下列命令行配置:

dotnet restore "YourProject.Web.Entry/YourProject.Web.Entry.csproj" -s "D:\Furion_Nuget_Test_Packages";
dotnet restore "YourProject.Web.Entry/YourProject.Web.Entry.csproj" -s "https://api.nuget.org/v3/index.json";

2.9.2.4 选择测试版安装或更新


测试通过后可以删除之前的配置即可,如:

2.9.3 Visual Studio 调试 Nuget

Furion 提供了 .snupkg 包,在安装 Furion 的时候自动下载到本地,如需启用源码调试,只需要启用以下配置即可:

启用之后重新编译解决方案就可以通过 F12 跳转到源代码区并调试源代码了。

2.9.4 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/object-mapper/index.html b/handbook/build/docs/object-mapper/index.html new file mode 100644 index 00000000000..749b0b10293 --- /dev/null +++ b/handbook/build/docs/object-mapper/index.html @@ -0,0 +1,17 @@ + + + + + +13. 对象数据映射 | Furion + + + + + +
+

13. 对象数据映射

使用 Mapster 以外的拓展说明

Furion 框架提供了 Mapster 的拓展 Furion.Extras.ObjectMapper.Mapster,如需使用第三方如 AutoMapper 则无需安装此拓展。

13.1 对象映射

简单来说,就是将一个对象的数据根据特定规则批量映射到另一个对象中,减少手工操作和降低人为出错率。如将 DTO 对象映射到 Entity 实体中,反之亦然。

13.2 先看例子

在过去,我们需要将一个对象的值转换到另一个对象中,我们需要这样做,如:

var entity = repository.Find(1);

var dto = new Dto();
dto.Id = entity.Id;
dto.Name = entity.Name;
dto.Age = entity.Age;
dto.Address = entity.Address;
dto.FullName = entity.FirstName + entity.LastName;
dto.IdCard = entity.IdCard.Replace("1234", "****");

上面的例子似乎没有任何问题,但是如果很多地方需要这样的赋值操作、或者相同的赋值操作在多个地方使用,又或者一个类中含有非常多的属性或自定义赋值操作。那么这样的操作效率极低,容易出错,且代码非常臃肿和冗余。

所以,实现自动映射赋值和支持特殊配置的需求就有了。目前 C# 平台有两个优秀的对象映射工具:MapsterAutoMapperFurion 框架中,推荐使用 MapsterMapster 是一款极易使用且超高性能的对象映射框架。

13.3 Mapster 使用

现在,我们可以通过 Mapster 提供的对象映射方法:Adapt 方法改造上面的例子:

安装拓展包

Furion.Core 层安装 Furion.Extras.ObjectMapper.Mapster 拓展包,无需手动调用,Furion 会自动加载并调用。

13.3.1 快速入门

var entity = repository.Find(1);
var dto = entity.Adapt<Dto>();

仅仅一行代码就可以实现 entity -> dto 的转换,如果涉及到赋值的复制操作,如 dto.FullNamedto.IdCard,我们只需要自定义映射规则类即可。

13.3.2 自定义映射规则

using Mapster;
using System;

namespace Furion.Application
{
public class Mapper : IRegister
{
public void Register(TypeAdapterConfig config)
{
config.ForType<Entity, Dto>()
.Map(dest => dest.FullName, src => src.FirstName + src.LastName)
.Map(dest => dest.IdCard, src => src.IdCard.Replace("1234", "****"));
}
}
}
小知识

该映射文件 Mapper.cs 可以放在任何项目或文件夹中,Furion 会在程序启动的时候自动扫描并注入配置。

13.3.3 依赖注入方式

Mapster 除了提供 Adapt 拓展方法以外,同时还提供依赖注入的方式。

public  Person(IMapper mapper)
{
var dto = _mapper.Map<Dto>(entity);
}

13.3.4 和 EFCore 配合

Mapster 还提供了 ProjectToType Linq 拓展方法减少我们手动 Select 操作,如:

正常的操作:

var destinations = context.Sources
.Select(p => new Destination {
Id = p.Id,
Name = p.Name,
Surname = p.Surname,
....
})
.ToList();

使用 Mapster 之后:

 var destinations = context.Sources.ProjectToType<Destination>().ToList();

13.4 全局默认配置

Furion 提供全局默认映射配置选项 TypeAdapterConfig.GlobalSettings.Default,可在 Startup 中配置即可,如:

TypeAdapterConfig.GlobalSettings.Default
.PreserveReference(true);

13.5 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 Mapster 知识可查阅 Mapster - Wiki 文档。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/options/index.html b/handbook/build/docs/options/index.html new file mode 100644 index 00000000000..546a252deec --- /dev/null +++ b/handbook/build/docs/options/index.html @@ -0,0 +1,17 @@ + + + + + +4.2 选项 | Furion + + + + + +
+

4.2 选项

4.2.1 什么是选项

选项是 ASP.NET Core 推荐的动态读取配置的方式,这种方式将配置文件数据用一个强类型来托管,能够实现配置验证、默认值配置、实时读取等功能。

4.2.2 与配置的区别

选项实际上也是配置,但在后者的基础上添加了配置验证、默认值/后期配置设定及提供了多种接口读取配置信息,同时还支持供配置更改通知等强大灵活功能。

所以,除了一次性读取使用的配置以外,都应该选用 选项 替换 配置

知识导航

有关配置说明可查看《4.1 配置》 章节。

4.2.3 选项的使用

假设我们需要在系统运行时获取系统名称、版本号及版权信息,这些信息可能随时变化而且需要在多个地方使用。这时就需要将这些信息配置起来。具体步骤如下:

4.2.3.1 配置 appsettings.json 信息

{
"AppInfo": {
"Name": "Furion",
"Version": "1.0.0",
"Company": "Baiqian"
}
}

4.2.3.2 创建 AppInfoOptions 强类型类

using Furion.ConfigurableOptions;

namespace Furion.Application
{
public class AppInfoOptions : IConfigurableOptions
{
public string Name { get; set; }
public string Version { get; set; }
public string Company { get; set; }
}
}
温馨提示

建议所有选项类都应该以 Options 命名结尾。

另外,Furion 框架提供了非常灵活的注册选项服务的方法,只需要继承 IConfigurableOptions 接口即可,该接口位于 Furion.ConfigurableOptions 命名空间下。

4.2.3.3 注册 AppInfoOptions 服务

选项不同于配置,需在应用启动时注册

Furion.Web.Core\FurWebCoreStartup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

namespace Furion.Web.Core
{
[AppStartup(800)]
public sealed class FurWebCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddConfigurableOptions<AppInfoOptions>();
}
}
}

4.2.3.4 读取 AppInfoOptions 信息

Furion 框架中,提供了多种读取方式:

  • 通过 App.GetOptions<TOptions>(path) 读取(不推荐
  • 通过依赖注入以下实例读取:
    • IOptions<TOptions>
    • IOptionsSnapshot<TOptions>
    • IOptionsMonitor<TOptions>
  • 通过 App 静态类提供的静态方法获取:
    • App.GetOptions<TOptions>()
    • App.GetOptionsMonitor<TOptions>()
    • App.GetOptionsSnapshot<TOptions>()
特别注意

禁止在主机启动时通过 App.GetOptions<TOptions> 获取选项,如需获取配置选项理应通过 App.GetConfig<TOptions>("配置节点", true)

using Furion.Application;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Web.Entry.Controllers
{
[Route("api/[controller]")]
public class DefaultController : ControllerBase
{
[HttpGet]
public string Get()
{
// 不推荐采用此方式读取,该方式仅在 ConfigureServices 启动时使用
var appInfo = App.GetConfig<AppInfoOptions>("AppInfo", true);
return $@"名称:{appInfo.Name}
版本:{appInfo.Version}
公司:{appInfo.Company}";
}
}
}

4.2.3.5 如何选择读取方式

  • 如果选项需要在多个地方使用,则无论任何时候都不推荐使用 App.GetOptions<TOptions>()
  • 在可依赖注入类中,依赖注入 IOptions[Snapshot|Monitor]<TOptions> 读取
  • 在静态类/非依赖注入类中,选择 App.GetOptions[Snapshot|Monitor]<TOptions>() 读取

4.2.4 选项接口说明

ASP.NET Core 应用提供了多种读取选项的接口:

  • IOptions<TOptions>
    • 不支持:
      • 在应用启动后读取配置数据
      • 命名选项
    • 注册为单一实例且可以注入到任何服务生存期
  • IOptionsSnapshot<TOptions>
    • 在每次请求时应重新计算选项的方案中有用
    • 注册为范围内,因此无法注入到单一实例服务
    • 支持命名选项
  • IOptionsMonitor<TOptions>
    • 用于检索选项并管理 TOptions 实例的选项通知。
    • 注册为单一实例且可以注入到任何服务生存期。
    • 支持:
      • 更改通知
      • 命名选项
      • 可重载配置
      • 选择性选项失效 (IOptionsMonitorCache<TOptions>)
注意事项

在使用 IConfigurableOptionsListener 监听选项后,如要获取最新的配置信息,请使用 App.GetOptionsMonitor<TOptions>() 而不是 App.GetOptions<TOptions>()

了解更多

想了解更多 选项接口 知识可查阅 ASP.NET Core - 选项 - 选项接口 小节。

4.2.5 选项自定义配置

我们知道,选项实际上需要和配置文件特定键值挂钩,那 Furion 是如何准确的找到配置文件中的键值的呢?

4.2.5.1 选项查找键流程

  • 没有贴 [OptionsSettings] 特性
    • Options 结尾,则去除 Options 字符串
    • 否则返回 类名称
  • 贴了 [OptionsSettings] 特性
    • 如果配置了 Path 属性,则返回 Path 的值
    • 否则返回 类名称
  • Options 结尾,则键名为:AppInfo
public class AppInfoOptions : IConfigurableOptions
{
public string Name { get; set; }
public string Version { get; set; }
public string Company { get; set; }
}
  • 不以 Options 结尾,则键名为:AppInfoSettings
public class AppInfoSettings : IConfigurableOptions
{
public string Name { get; set; }
public string Version { get; set; }
public string Company { get; set; }
}

4.2.6 [OptionsSettings] 说明

选项类可以通过 [OptionsSettings] 来配置查找路径值。

4.2.7 选项验证

选项支持验证配置有效性,在 Furion 框架中,通过 services.AddConfigurableOptions<TOptions>() 注册选项默认启用了验证支持。

包括:

  • 特性方式 DataAnnotations
  • 自定义复杂验证 IValidateOptions<TOptions>
using Furion.ConfigurableOptions;
using System.ComponentModel.DataAnnotations;

namespace Furion.Application
{
public class AppInfoOptions : IConfigurableOptions
{
[Required(ErrorMessage = "名称不能为空")]
public string Name { get; set; }
[Required, RegularExpression(@"^[0-9][0-9\.]+[0-9]$", ErrorMessage = "不是有效的版本号")]
public string Version { get; set; }
[Required, MaxLength(100)]
public string Company { get; set; }
}
}
特别说明

IConfigurableOptions<TOptions, TOptionsValidation> 继承自 IConfigurableOptions<TOptions>,也就是自定义复杂验证默认具有 PostConfigure(TOptions options) 选项后期配置方法。关于《4.2.8 选项后期配置》将在下一小节说明。

4.2.8 选项后期配置

选项后期配置通俗一点来说,可以在运行时解析值或设定默认值/后期配置等。

Furion 框架中,配置选项后期配置很简单,只需要继承 IConfigurableOptions<TOptions> 接口并实现 PostConfigure(TOptions options) 方法。

using Furion.ConfigurableOptions;
using Microsoft.Extensions.Configuration;
using System.ComponentModel.DataAnnotations;

namespace Furion.Application
{
public class AppInfoOptions : IConfigurableOptions<AppInfoOptions>
{
[Required(ErrorMessage = "名称不能为空")]
public string Name { get; set; }
[Required]
public string Version { get; set; }
[Required, MaxLength(100)]
public string Company { get; set; }

public void PostConfigure(AppInfoOptions options, IConfiguration configuration)
{
options.Name ??= "Furion";
options.Version ??= "1.0.0";
options.Company ??= "Baiqian";
}
}
}
特别说明

IConfigurableOptions<TOptions, TOptionsValidation> 继承自 IConfigurableOptions<TOptions>,也就是自定义复杂验证默认具有 PostConfigure(TOptions options, IConfiguration configuration) 选项后期配置方法。

4.2.9 选项更改通知(热更新

Furion 框架提供了非常简单且灵活的方式监听选项更改,也就是 appsettings.json 或 自定义配置文件发生任何更改都会触发处理方法

使用非常简单,只需要继承 IConfigurableOptionsListener<TOptions> 接口并实现 void OnListener(TOptions options, IConfiguration configuration) 方法即可。

using Furion.ConfigurableOptions;

namespace Furion.Application
{
public class AppInfoOptions : IConfigurableOptionsListener<AppInfoOptions>
{
public string Name { get; set; }
public string Version { get; set; }
public string Company { get; set; }

public void OnListener(AppInfoOptions options, IConfiguration configuration)
{
var name = options.Name; // 实时的最新值
var version = options.Version; // 实时的最新值
}

public void PostConfigure(AppInfoOptions options, IConfiguration configuration)
{
}
}
}
特别说明

IConfigurableOptionsListener<TOptions> 继承自 IConfigurableOptions<TOptions>

4.2.9.1 关于多次触发问题

Furion 底层使用的是 ChangeToken.OnChange 监听文件更改,但是此方式会导致 OnListener 触发两次,这并非是框架的 bug,而是 .NET Core 本身存在的问题,详见:https://github.com/dotnet/aspnetcore/issues/2542

所以,Furion 框架也给出另一种解决方案可替代 IConfigurableOptionsListener 的方式,也就是通过局部注入 IOptionsMonitor 的方式,如:

public class YourService : IYourService, IDisposable
{
private readonly IDisposable _optionsReloadToken;

private YourOptions _options;

public YourService(IOptionsMonitor<YourOptions> options)
{
(_optionsReloadToken, _options) = (options.OnChange(ReloadOptions), options.CurrentValue);
}

private void ReloadOptions(YourOptions options)
{
_options = options;
}

public void Dispose()
{
_optionsReloadToken?.Dispose();
}
}

这种方式虽然啰嗦,但是可以很好和业务代码契合。

4.2.10 选项的优缺点

  • 优点

    • 强类型配置
    • 提供多种读取方式
    • 支持热加载
    • 支持设置默认值/后期配置
    • 支持在运行环境中动态配置
    • 支持验证配置有效性
    • 支持更改通知
    • 支持命名选项
  • 缺点

    • 需要定义对应类型
    • 需要在启动时注册

4.2.11 自定义属性 Key 映射

版本说明

以下内容仅限 Furion v3.4.3+ 版本使用。

有时候我们在 appsettings.json 中配置的 Key 和选项定义的属性名不一样,这时候就需要用到 [MapSettings] 特性即可,如:

"AppInfo": {
"Name": "Furion",
"Version": "1.0.0",
"Company_Name": "Baiqian"
}
public class AppInfoOptions : IConfigurableOptions
{
public string Name { get; set; }
public string Version { get; set; }

[MapSettings("Company_Name")]
public string Company { get; set; }
}
特别注意

[MapSettings] 配置的 Key 会自定应用选项的 Key 作为起始点,如实际上 Company 属性对应的 Key 为:AppInfo:Company_Name

4.2.12 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 选项 知识可查阅 ASP.NET Core - 选项 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/performance/index.html b/handbook/build/docs/performance/index.html new file mode 100644 index 00000000000..98ca5699f9e --- /dev/null +++ b/handbook/build/docs/performance/index.html @@ -0,0 +1,17 @@ + + + + + +36.2 负载压测 | Furion + + + + + +
+
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/pillar-of-humiliation/index.html b/handbook/build/docs/pillar-of-humiliation/index.html new file mode 100644 index 00000000000..0ff24b945ee --- /dev/null +++ b/handbook/build/docs/pillar-of-humiliation/index.html @@ -0,0 +1,17 @@ + + + + + +1.10 耻辱柱 | Furion + + + + + +
+

1.10 耻辱柱

谨言慎行

Furion 诞生之初,受到诸多标题党、造谣喷子党在各大平台无脑黑,故设立耻辱柱,将这些情节极其严重的人钉在 Furion 耻辱柱上,以示世人。

网络不是不法之地,望大家谨言慎行。

其他补充

张善友 .NET 颇有影响力的人,Furion 作为唯一一个 .NET 项目成功加入木兰开源社区时,张善友在腾讯 TVP 公开群说 Furion 只是个营销框架,对此也不过多说什么,简单记录。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/pm2/index.html b/handbook/build/docs/pm2/index.html new file mode 100644 index 00000000000..00fc373dbac --- /dev/null +++ b/handbook/build/docs/pm2/index.html @@ -0,0 +1,18 @@ + + + + + +34.6 pm2 部署 | Furion + + + + + +
+

34.6 pm2 部署

34.6.1 关于 pm2

pm2NodeJS 平台高级生产流程管理器,也是一个守护进程管理器,它能够管理和保持应用程序 7*24 小时在线。

pm2 优点:

  • 简单易用
  • 跨平台
  • 容器集成
  • 内置集群、负载均衡
  • 支持模块系统
  • 支持实时监测
  • 支持日志管理
  • 支持关键指标监控 +....

想了解更多 pm2 知识可查阅 https://pm2.keymetrics.io/

34.6.2 如何安装

  1. 系统安装 NodeJS 环境 https://nodejs.org/en/

相信大部分人电脑都已经安装。

  1. 通过 npmyarn 全局安装 pm2 工具

npm:

npm install pm2@latest -g

yarn:

yarn global add pm2

34.6.3 托管 .NET5/6 应用程序

34.6.3.1 非单文件/非独立发布模式

这种模式的特点就是需要服务器安装 .NET5/6 的环境

pm2 start --name xxx dotnet -- xxx.dll
指定端口

如需指定端口,可使用下列命令:

pm2 start --name xxx dotnet -- PMS.Web.Entry.dll --urls=https://localhost:8089

注意 -- 后面可以写完整的 dotnet 命令。

命令说明

xxx.dll 为项目发布后的启动层名称。

--name 配置应用程序在 pm2 中的唯一标识。

终端说明

注意:通过 -- 传递参数在 powershell 终端下无效,需要在 cmd 终端下才行。比如出现这样的错误:

34.6.3.2 单文件/独立发布模式

这种模式的特点就是无需服务器安装 .NET 任何环境,可查阅 单文件发布文档

pm2 start --name xxx PMS.Web.Entry.exe
指定端口

如需指定端口,可使用下列命令:

pm2 start --name xxx PMS.Web.Entry.exe -- --urls=https://localhost:8089

注意 -- 后面可以写完整的 dotnet 命令。

命令说明

xxx.exe 为项目发布后的启动层名称,如果名称包含 空格,则使用双引号包裹,如 "x xx.exe"

--name 配置应用程序在 pm2 中的唯一标识。

终端说明

注意:通过 -- 传递参数在 powershell 终端下无效,需要在 cmd 终端下才行。

34.6.3.3 启用应用程序

执行上述命令后会显示启动成功日志,如:

PS C:\Users\bqrjsoft\Desktop\pms> pm2 start --name pms PMS.Web.Entry.exe
[PM2] Starting C:\Users\bqrjsoft\Desktop\pms\PMS.Web.Entry.exe in fork_mode (1 instance)
[PM2] Done.
┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
0 │ pms │ default │ N/A │ fork │ 41764 │ 0s │ 0 │ online │ 0% │ 85.0mb │ bqrjsoft │ disabled │
└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
PS C:\Users\bqrjsoft\Desktop\pms>
关于端口

ASP.NET Core 程序默认端口都是 5000,如 http://localhost:5000

34.6.3.4 json 配置/启动方式

pm2 部署也提供了非常简单的 json 配置方式,部署更简单,拓展性更强,不需要每次重复输入命令,如在项目启动项目下添加 pm2.json,并设置文件属性 内容始终复制

PMS/Web.Entry/pm2.json
{
"apps": {
"name": "唯一标识",
"script": "dotnet",
"exec_mode": "fork",
"error_file": "logs/err.log",
"out_file": "logs/out.log",
"merge_logs": true,
"log_date_format": "YYYY-MM-DD HH:mm:ss",
"min_uptime": "60s",
"max_restarts": 30,
"autorestart": true,
"restart_delay": "60",
"args": [
"PMS.Web.Entry.dll",
"--urls=http://*:5001"
],
"env": {
"ASPNETCORE_ENVIRONMENT": "Production"
}
}
}

在发布后的文件目录下打开终端执行:

pm2 start pm2.json

34.6.4 pm2 常见操作

34.6.4.1 实时监听运行状态

pm2 monit

34.6.4.2 显示运行日志

pm2 logs

34.6.4.3 查看应用信息

pm2 info pms

注意,pms 为您配置的 --name 名称。

34.6.4.4 随机启动

pm2 startup
pm2 save
Windows 下随机启动

可查阅 pm2-windows-startup

npm install pm2-windows-startup -g
pm2-startup install
pm2 save

34.6.4.5 集群模式(负载均衡)

  • 非单文件/非独立发布模式
pm2 start "xxx.dll" -i max
  • 单文件/独立发布模式
pm2 start xxx.exe -i max

34.6.4.6 其他操作

// 重启应用
pm2 restart app_name

// 重载应用
pm2 reload app_name

// 停止应用
pm2 stop app_name

// 删除应用
pm2 delete app_name

更多 pm2 文档可查阅 https://pm2.keymetrics.io/docs/usage/quick-start/

34.6.5 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/position/index.html b/handbook/build/docs/position/index.html new file mode 100644 index 00000000000..1378491ac44 --- /dev/null +++ b/handbook/build/docs/position/index.html @@ -0,0 +1,17 @@ + + + + + +1.9 关于框架定位 | Furion + + + + + +
+

1.9 关于框架定位

微不足道的贡献

.NET 要在国内真正发展起来,必须得有一些追逐梦想的人在做着不计付出的事情,而我希望自己能贡献一份微薄之力。

很多人问过,我不知道该怎么回答,因为我自己几乎没有考虑过这个问题,还包括盈利的问题。

我没考虑的是 Furion 一定要是某种形式的框架,譬如企业级、微服务、单体等形式。Furion 一贯的思路是,用户迫切需要什么,那么我们就推什么,尽管最终可能让它变成四不像,可说不定用户要的就是 “四不像”。

当然也要有所为有所不为,用户需要的,但感觉自己做不好的,还是别去碰了,精心完善现有功能才是正道。

好吧,其实多数时候,我们想得太多了,实际去做的太少了。就好像写这个内容时想的是个中长篇,可真正话到手上只有寥寥数语。

做事何尝不是如此,光有 idea 是不值钱的!

-- powerby javayou

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/process-service/index.html b/handbook/build/docs/process-service/index.html new file mode 100644 index 00000000000..a74576f3695 --- /dev/null +++ b/handbook/build/docs/process-service/index.html @@ -0,0 +1,19 @@ + + + + + +25. 辅助角色服务 | Furion + + + + + +
+

25. 辅助角色服务

25.1 关于辅助角色服务

.NET Core 3.0 新增了 Worker Service 的新项目模板,可以编写长时间运行的后台服务,并且能轻松的部署成 Windows服务Linux 守护程序

目前微软提供了两种方式创建长时间运行的后台服务:

  • 共宿主方式:中小型项目推荐,无需单独部署 Windows/Linux 服务
  • 独立 Worker Service 方式:需独立部署 Windows/Linux 服务

25.2 共宿主方式

共宿主方式指的是在现有的 Web 或其他应用程中创建类文件并派生自 BackgroundService 类即可。这种方式的典型特点就是和应用共生存周期,应用启动时启动,应用结束停止运行。

推荐等级

推荐中小型项目使用这种方式。

using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace YourPoject.Web.Core;

public class Worker : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
Console.WriteLine(DateTime.Now);

// 延迟 1 秒
await Task.Delay(1000, stoppingToken);
}
}
}

之后在 Startup.cs 中注册即可:

services.AddHostedService<Worker>();

25.2.1 最佳实践

最好的实践方式是创建独立的类库项目:YourProject.BackgroundServices,之后添加 YourPoject.ApplicationYourPoject.Core 层引用,将所有的 Worker 放在该层,同时创建 Startup.cs 类进行 Worker 统一注册,如:

using Microsoft.Extensions.DependencyInjection;

namespace YourProject.BackgroundServices;

public sealed class Startup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddHostedService<Worker>();
services.AddHostedService<Worker2>();
}
}

25.3 独立 Worker Service 方式

独立 Worker Service 方式的主要特点就是它是一个独立的项目,和现有的项目没有直接关联关系,需要分开独立部署

推荐等级

推荐中大型项目使用这种方式,也就是独立部署成 Windows Service 或者 Linux 守护进程,具有独立生存周期,即使应用故障了也不会影响它的运行。

25.3.1 如何创建 Worker Service

通过 Visual Studio 2019 提供的 Worker Service 可直接创建。如图:

25.3.2 创建 Worker

当我们创建好 Worker Service 项目时,已经自带了一个 Worker 类并继承自 BackgroundService 基类。

Worker 正是我们辅助角色的主要工作类,在这里我们编写我们所有的业务逻辑。通常 Worker 默认格式为:

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace FurionWorkers
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;

public Worker(ILogger<Worker> logger)
{
_logger = logger;
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken);
}
}
}
}

当我们创建了 Worker 类之后,需要在 Program.cs 中进行注册,如:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace FurionWorkers
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
}
}
小知识

如果使用了 Furion 包后可实现自动注册。

25.3.3 多个 Worker

Worker Service 是支持定义多个 Worker 进行协调工作的,每个 Worker 是完全独立的工作环境,但可共享同一主进程信息。

25.3.4 生命周期

Worker ServiceWorker 提供了三个执行方法,分别代表三个生命周期:

  • StartAsync:负责启动 Worker Service,如果调用 StartAsync 方法的线程被一直阻塞了,那么 Worker Service 的启动就一直完成不了
  • ExecuteAsyncWorker Service 真正实现业务逻辑的地方,这里不能调用阻塞代码!!!
  • StopAsync:负责结束 Worker Service,如果调用 StopAsync 方法的线程被一直阻塞了,那么 Worker Service 的结束就一直完成不了
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace FurionWorkers
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;

public Worker(ILogger<Worker> logger)
{
_logger = logger;
}

// 启动
public override Task StartAsync(CancellationToken cancellationToken)
{
return base.StartAsync(cancellationToken);
}

// 执行逻辑
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
await Task.Delay(1000, stoppingToken);
}
}

// 停止
public override Task StopAsync(CancellationToken cancellationToken)
{
return base.StopAsync(cancellationToken);
}
}
}

25.3.5 集成 Furion

Worker Service 集成 Furion 非常方便,只需要安装 Furion 的包即可,并在 Program.cs 中调用 .Inject() 方法,如:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace FurionWorkers
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.Inject()
.ConfigureServices((hostContext, services) =>
{
// 以下代码可不用编写,Furion 已实现自动注册 Worker;
// services.AddHostedService<Worker>();
});
}
}

默认情况下,Inject() 方法注册了 日志、缓存、依赖注入、加载配置、自定义 Startup 功能。

小知识

集成 Furion 后会自动扫描 Worker 类并实现自动注册。

25.3.6 注册服务

Worker Service 注册服务和 Web 略有不同,Web 主要在 Starup.cs 类中注册,Worker ServiceProgram.cs 启动类的 ConfigureServices 方法中注册,如:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace FurionWorkers
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.Inject()
.ConfigureServices((hostContext, services) =>
{
// 注册数据库服务
services.AddDatabaseAccessor(options =>
{
options.AddDb<DefaultDbContext>();
});

// 注册远程请求
services.AddRemoteRequest();

// 等等其他服务注册
});
}
}

25.4 实现定时任务

小建议

建议使用 【26.1 调度作业】 章节内容实现强大的分布式定时任务。

Furion 框架为 BackgroundService 提供了定时任务的支持。

25.4.1 间隔执行方式

namespace WorkerService;

public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;

private const int delay = 1000;

public Worker(ILogger<Worker> logger)
{
_logger = logger;
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);

await taskFactory.StartNew(async () =>
{
// 你的业务代码写到这里面

_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);

await Task.CompletedTask;

}, stoppingToken);

await Task.Delay(delay, stoppingToken);
}
}
}

25.4.2 Cron 表达式执行方式

小知识

如需了解 Cron 表达式内容,可查阅 【26.2 Cron 表达式】 章节内容。

using Furion.TimeCrontab;

namespace WorkerService;

public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;

private readonly Crontab _crontab;

public Worker(ILogger<Worker> logger)
{
_logger = logger;
_crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);

await taskFactory.StartNew(async () =>
{
// 你的业务代码写到这里面

_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);

await Task.CompletedTask;
}, stoppingToken);

await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.UtcNow), stoppingToken);
}
}
}

25.4.3 实现 串行 操作

默认情况下,定时任务都是采用 并行 的方式,也就是不会等待上一次任务完成,如果需要等待上一次任务完成,可以修改为 串行 方式:

using Furion.TimeCrontab;

namespace WorkerService;

public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;

private readonly Crontab _crontab;

private bool _isLock = false;

public Worker(ILogger<Worker> logger)
{
_logger = logger;
_crontab = Crontab.Parse("* * * * * *", CronStringFormat.WithSeconds);
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
if (_isLock) goto next;
_isLock = true;

var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current);
var task = await taskFactory.StartNew(async () =>
{
// 模拟耗时操作
await Task.Delay(2000);

_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);

await Task.CompletedTask;
}, stoppingToken);

// 等待任务完成
await task.ContinueWith(task => _isLock = false);

next:
await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.UtcNow), stoppingToken);
}
}
}

25.5 依赖注入使用

Worker Service 只为 Worker 提供了单例作用域的服务注入,如果需要注入瞬时或作用域对象,需手动创建作用域,如:

public class Worker : BackgroundService
{
// 日志对象
private readonly ILogger<JobService> _logger;

// 服务工厂
private readonly IServiceScopeFactory _scopeFactory;
public Worker(ILogger<Worker> logger
, IServiceScopeFactory scopeFactory)
{
_logger = logger;
_scopeFactory = scopeFactory;
}

protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
using var scope = _scopeFactory.CreateScope();
var services = scope.ServiceProvider;

// 获取数据库上下文
var dbContext = Db.GetDbContext(services);

// 获取仓储
var respository = Db.GetRepository<Person>(services);

// 解析其他服务
var otherService = services.GetService<XXX>();
}

return Task.CompletedTask;
}
}

25.6 如何部署

25.6.1 共宿主方式

共宿主方式方式部署非常简单,只需要部署所在的 Web 或其他应用程序项目即可,会自动随着项目启动自动启动。

特别说明

如果部署到 IIS 中,可能存在 Worker Service 被回收的情况,毕竟是和网站同一个宿主。

25.6.2 独立 Worker Service 方式

Worker Service 支持部署到 Windows Service 中 或 Linux 守护进程中


部署到 Windows Service

  • 第一步:安装 Microsoft.Extensions.Hosting.WindowsServices 拓展包

  • 第二步:在 Program.cs 中添加 .UseWindowsService()

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace FurionWorkers
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.Inject()
.ConfigureServices((hostContext, services) =>
{
// 以下代码可不用编写,Furion 已实现自动注册 Worker;
// services.AddHostedService<Worker>();
});
}
}
  • 第三步:发布 Worker Service,可通过 dotnet publish -c Release -o C:\FurionWorker 命令发布或通过 Visual Studio 2019 发布。

独立发布不依赖 SDK 方式 dotnet publish -c release -r win10-x64 --framework net6.0

  • 第四步:通过 sc.exe 工具来管理并创建 Windows 服务,通过 管理员模式 并打开控制台,输入:
sc.exe create FurionWorkerServices binPath= C:\FurionWorker\FurionWorker.exe

注意=后面要有一个空格 +创建成功后可通过 sc.exe query FurionWorkerServices 查看服务状态。

  • 第五步

启动服务:sc.exe start FurionWorkerServices,启动之后就可以在 Windows 服务工具中查看了。

停止服务:sc.exe stop NETCoreDemoWorkerService

删除服务:sc.exe delete NETCoreDemoWorkerService

特别提醒

以上所有 sc.exe 命令必须在 管理员 模式下进行。 +sc.exe delete NETCoreDemoWorkerService, 执行删除时候, 把Windows 服务工具关闭, 否则, 电脑重启后才会显示删除;


部署到 Linux 守护程序

  • 第一步:安装 Microsoft.Extensions.Hosting.Systemd 拓展包

  • 第二步:在 Program.cs 中添加 .UseSystemd()

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace FurionWorkers
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSystemd()
.Inject()
.ConfigureServices((hostContext, services) =>
{
// 以下代码可不用编写,Furion 已实现自动注册 Worker;
// services.AddHostedService<Worker>();
});
}
}

部署到 Linux 守护进程 就是这么简单。

25.7 关于 Windows 部署日志问题

默认情况下,使用 Windows Services 部署后,日志文件可能会在系统盘的 System32 下。

25.8 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/reference/index.html b/handbook/build/docs/reference/index.html new file mode 100644 index 00000000000..1cf08e886c4 --- /dev/null +++ b/handbook/build/docs/reference/index.html @@ -0,0 +1,17 @@ + + + + + +2.3 手动搭建分层 | Furion + + + + + +
+

2.3 手动搭建分层

推荐使用脚手架

Furion 官方提供了非常灵活方便的脚手架,可以快速的创建多层架构项目。

推荐使用 《2.2 官方脚手架》代替本章节功能。

2.3.1 推荐分层设计

Furion 推荐采用多层项目设计架构,每一个项目层的依赖分别是:

  • YourName.Application:添加 YourName.Core 引用
  • YourName.Core:添加 Furion 引用SqlSugar 版本添加 Furion.Pure 🎗
  • YourName.Database.Migrations:添加 YourName.EntityFramework.Core 引用
  • YourName.EntityFramework.Core:添加 YourName.Core 引用
  • YourName.Web.Core:添加 YourName.ApplicationYourName.Database.Migrations 引用
  • YourName.Web.Entry:添加 YourName.Web.Core 引用 和 Microsoft.EntityFrameworkCore.Tools
特别说明

如果采用 EFCore 以外的 ORM 框架,如 SqlSugar,那么无需创建 YourName.Database.MigrationsYourName.EntityFramework.Core 层。

另外 YourName.Web.Entry 无需引用 Microsoft.EntityFrameworkCore.Tools 包。

2.3.2 集成 Furion 功能

项目搭建好之后,集成 Furion 框架只需要在 Program.cs 中 添加 Inject() 方法即可:

  • .NET5 版本:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

namespace YourName.Web.Entry
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.Inject()
.UseStartup<Startup>();
});
}
}
}
  • .NET6 版本
var builder = WebApplication.CreateBuilder(args).Inject();

builder.Services.AddControllers().AddInject();

var app = builder.Build();

app.UseHttpsRedirection();

app.UseAuthorization();

app.UseInject();

app.MapControllers();

app.Run();

2.3.3 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/saas/index.html b/handbook/build/docs/saas/index.html new file mode 100644 index 00000000000..5c61fe859ce --- /dev/null +++ b/handbook/build/docs/saas/index.html @@ -0,0 +1,23 @@ + + + + + +11. SaaS 多租户 | Furion + + + + + +
+

11. SaaS 多租户

11.1 什么是 SaaS

SaaS 是 Software-as-a-Service(软件即服务)的简称,随着互联网技术的发展和应用软件的成熟, 在 21 世纪开始兴起的一种完全创新的软件应用模式。它与“on-demand software”,the application service provider(ASP,应用服务提供商),hosted software(托管软件)所具有相似的含义。

它是一种通过 Internet 提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。用户不用再购买软件,而改用向提供商租用基于 Web 的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,软件厂商在向客户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让用户随时随地都可以使用其定购的软件和服务。

对于许多小型企业来说,SaaS 是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。

11.2 什么是多租户

多租户技术或称多重租赁技术,简称 SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性。

简单讲:在一台服务器上运行单个应用实例,它为多个租户(客户)提供服务。从定义中我们可以理解:多租户是一种架构,目的是为了让多用户环境下使用同一套程序,且保证用户间数据隔离。那么重点就很浅显易懂了,多租户的重点就是同一套程序下实现多用户数据的隔离。

11.3 实现多租户方案

11.3.1 独立数据库(基于 Database 的方式)

这是第一种方案,即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高。

  • 优点: +为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果出现故障,恢复数据比较简单。

  • 缺点: +增多了数据库的安装数量,随之带来维护成本和购置成本的增加。 这种方案与传统的一个客户、一套数据、一套部署类似,差别只在于软件统一部署在运营商那里。如果面对的是银行、医院等需要非常高数据隔离级别的租户,可以选择这种模式,提高租用的定价。如果定价较低,产品走低价路线,这种方案一般对运营商来说是无法承受的。

11.3.2 共享数据库,独立 Schema (基于 Schema 的方式)

这是第二种方案,即多个或所有租户共享 Database,但是每个租户一个 Schema(也可叫做一个 user)。底层库比如是:SqlServerOracle 等,一个数据库下可以有多个 Schema

  • 优点: +为安全性要求较高的租户提供了一定程度的逻辑数据隔离,并不是完全隔离;每个数据库可支持更多的租户数量。

  • 缺点: +如果出现故障,数据恢复比较困难,因为恢复数据库将牵涉到其他租户的数据; 如果需要跨租户统计数据,存在一定困难。

11.3.3 共享数据库,共享 Schema (基于 TenantId 的方式)

共享数据表 这是第三种方案,即租户共享同一个 Database、同一个 Schema,但在表中增加 TenantId 多租户的数据字段。这是共享程度最高、隔离级别最低的模式。 即每插入一条数据时都需要有一个客户的标识。这样才能在同一张表中区分出不同客户的数据。

  • 优点: +三种方案比较,第三种方案的维护和购置成本最低,允许每个数据库支持的租户数量最多。

  • 缺点: +隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量; 数据备份和恢复最困难,需要逐表逐条备份和还原。

11.4 多租户使用方案

Furion 框架支持以上三种多租户实现方案,使用简单且容易维护。下面分别使用三种不同方式演示多租户方案用法。

特别说明

一旦 数据库上下文 类继承了租户任意接口,则自动开始多租户功能支持。

11.5 基于 TenantId 的方式

此方式在中小型企业系统中最为常用,维护成本低,购置成本低。

11.5.1 创建租户数据库上下文

Furion.EntityFramework.Core\DbContexts\MultiTenantDbContext.cs
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class MultiTenantDbContext : AppDbContext<MultiTenantDbContext, MultiTenantDbContextLocator>
{
public MultiTenantDbContext(DbContextOptions<MultiTenantDbContext> options) : base(options)
{
}
}
}
特别注意

多租户操作建议单独一个数据库上下文,而且需指定 MultiTenantDbContextLocator 数据库上下文定位器。

11.5.2 注册多租户数据库上下文

using Furion.DatabaseAccessor;
using Microsoft.Extensions.DependencyInjection;

namespace Furion.EntityFramework.Core
{
[AppStartup(600)]
public sealed class FurEntityFrameworkCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurionDbContext>();
options.AddDbPool<MultiTenantDbContext, MultiTenantDbContextLocator>();
});
}
}
}

11.5.3 添加 Tenant 种子数据

Furion.EntityFramework.Core\SeedDatas\TenantSeedData.cs
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;

namespace Furion.EntityFramework.Core
{
public class TenantSeedData : IEntitySeedData<Tenant, MultiTenantDbContextLocator>
{
public IEnumerable<Tenant> HasData(DbContext dbContext, Type dbContextLocator)
{
return new List<Tenant>
{
new Tenant
{
TenantId = Guid.Parse("383AFB88-F519-FFF8-B364-6D563BF3687F"),
Name = "默认租户",
Host = "localhost:44313",
CreatedTime = DateTime.Parse("2020-10-06 20:19:07")
},
new Tenant
{
TenantId = Guid.Parse("C5798CB6-16D6-0F42-EB56-59C695353BC0"),
Name = "其他租户",
Host = "localhost:5000",
CreatedTime = DateTime.Parse("2020-10-06 20:20:32")
}
};
}
}
}
特别说明

该步骤只在 Code First 方式执行,Database First 无需配置种子数据。

11.5.4 根据模型创建 Tenant

Add-Migration add_tenant_table -Context MultiTenantDbContext
Update-Database -Context MultiTenantDbContext

11.5.5 实现 IMultiTenantOnTable 接口

在需要多租户的数据库上下文中实现 IMultiTenantOnTable 接口,如:

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using System;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class FurionDbContext : AppDbContext<FurionDbContext>, IMultiTenantOnTable, IModelBuilderFilter
{
public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}

public object GetTenantId()
{
return base.Tenant?.TenantId ?? Guid.Empty;
}
}
}

GetTenantId() 方法中,首先获取请求的 主机地址,然后根据主机地址查询对应的租户 TenantId,避免多次查询数据库,这里使用了 IMemoryCache 内存缓存。

特别说明

base.Tenant 只是 Furion 框架提供的默认租户实现方法,如果不能满足业务需求,只需要在 GetTenantId 里面写你的业务代码即可,也就是无需调用 base.Tenant。如:

public object GetTenantId()
{
// 这里是你获取 TenantId 的逻辑
return 你的 TenantId;
}

11.5.6 实现 IModelBuilderFilter 接口

IModelBuilderFilter 接口是全局查询过滤器实现接口,所以我们需要配置实体 TenantId 过滤器

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class FurionDbContext : AppDbContext<FurionDbContext>, IMultiTenantOnTable, IModelBuilderFilter
{
public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}

public object GetTenantId()
{
return base.Tenant?.TenantId ?? Guid.Empty;
}

public void OnCreating(ModelBuilder modelBuilder, EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasQueryFilter(BuildTenantQueryFilter(entityBuilder, dbContext));
}
}
}

11.5.7 重写 SavingChangesEvent 事件方法

通过上面的步骤,我们已经解决了 查询 租户过滤功能,但是 新增更新 还未处理。

  • 新增 数据的时候自动设置 TenantId 的值
  • 更新 数据的时候排除 TenantId 属性更新

实现上面的步骤很简单,只需要重写 SavingChangesEvent 事件方法即可。

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
using System.Linq;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class FurionDbContext : AppDbContext<FurionDbContext>, IMultiTenantOnTable, IModelBuilderFilter
{
public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}

public object GetTenantId()
{
return base.Tenant?.TenantId ?? Guid.Empty;
}

public void OnCreating(ModelBuilder modelBuilder, EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasQueryFilter(BuildTenantQueryFilter(entityBuilder, dbContext));
}

protected override void SavingChangesEvent(DbContextEventData eventData, InterceptionResult<int> result)
{
// 获取当前事件对应上下文
var dbContext = eventData.Context;

// 获取所有新增、更新、删除的实体
var entities = dbContext.ChangeTracker.Entries().Where(u => u.State == EntityState.Added || u.State == EntityState.Modified || u.State == EntityState.Deleted);

foreach (var entity in entities)
{
switch (entity.State)
{
// 自动设置租户Id
case EntityState.Added:
entity.Property(nameof(Entity.TenantId)).CurrentValue = GetTenantId();
break;
// 排除租户Id
case EntityState.Modified:
entity.Property(nameof(Entity.TenantId)).IsModified = false;
break;
// 删除处理
case EntityState.Deleted:
break;
}
}
}
}
}

11.6 基于 Database 的方式

此方式在中大型企业系统中最为常用,一个租户(客户)一个独立的数据库。

11.6.1 创建租户数据库上下文

Furion.EntityFramework.Core\DbContexts\MultiTenantDbContext.cs
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class MultiTenantDbContext : AppDbContext<MultiTenantDbContext, MultiTenantDbContextLocator>
{
public MultiTenantDbContext(DbContextOptions<MultiTenantDbContext> options) : base(options)
{
}
}
}
特别注意

多租户操作建议单独一个数据库上下文,而且需指定 MultiTenantDbContextLocator 数据库上下文定位器。

11.6.2 注册多租户数据库上下文

using Furion.DatabaseAccessor;
using Microsoft.Extensions.DependencyInjection;

namespace Furion.EntityFramework.Core
{
[AppStartup(600)]
public sealed class FurEntityFrameworkCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDatabaseAccessor(options =>
{
options.AddDb<FurionDbContext>();
options.AddDbPool<MultiTenantDbContext, MultiTenantDbContextLocator>();
});
}
}
}
特别注意

需要 Database 多租户方案的数据库上下文需要采用 AddDb 注册,而不是 AddDbPool。原因是 AddDbPool 方式注册后续不支持 OnConfiguring 重写!!!

11.6.3 添加 Tenant 种子数据

Furion.EntityFramework.Core\SeedDatas\TenantSeedData.cs
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;

namespace Furion.EntityFramework.Core
{
public class TenantSeedData : IEntitySeedData<Tenant, MultiTenantDbContextLocator>
{
public IEnumerable<Tenant> HasData(DbContext dbContext, Type dbContextLocator)
{
return new List<Tenant>
{
new Tenant
{
TenantId = Guid.Parse("383AFB88-F519-FFF8-B364-6D563BF3687F"),
Name = "默认租户",
Host = "localhost:44313",
CreatedTime = DateTime.Parse("2020-10-06 20:19:07"),
ConnectionString = "Data Source=./Furion.db" // 配置连接字符串
},
new Tenant
{
TenantId = Guid.Parse("C5798CB6-16D6-0F42-EB56-59C695353BC0"),
Name = "其他租户",
Host = "localhost:5000",
CreatedTime = DateTime.Parse("2020-10-06 20:20:32"),
ConnectionString = "Data Source=./Fur2.db" // 配置连接字符串
}
};
}
}
}
特别说明

该步骤只在 Code First 方式执行,Database First 无需配置种子数据。

11.6.4 根据模型创建 Tenant

Add-Migration add_tenant_table -Context MultiTenantDbContext
Update-Database -Context MultiTenantDbContext

11.6.5 实现 IMultiTenantOnDatabase 接口

在需要多租户的数据库上下文中实现 IMultiTenantOnDatabase 接口,如:

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
// 这里可不配置
public class FurionDbContext : AppDbContext<FurionDbContext>, IMultiTenantOnDatabase
{
public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}

public string GetDatabaseConnectionString()
{
return base.Tenant?.ConnectionString??"默认链接字符串";
}
}
}
特别说明

base.Tenant 只是 Furion 框架提供的默认租户实现方法,如果不能满足业务需求,只需要在 GetDatabaseConnectionString 里面写你的业务代码即可,也就是无需调用 base.Tenant。如:

public string GetDatabaseConnectionString()
{
// 这里是你获取 DatabaseConnecionString 的逻辑
return 你的 连接字符串;
}

11.6.6 重写 OnConfiguring 方法

在需要多租户的数据库上下文中重写 OnConfiguring 方法并配置连接字符串:

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
public class FurionDbContext : AppDbContext<FurionDbContext>, IMultiTenantOnDatabase
{
public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(GetDatabaseConnectionString());

base.OnConfiguring(optionsBuilder);
}

public string GetDatabaseConnectionString()
{
return base.Tenant?.ConnectionString??"默认链接字符串";
}
}
}
特别注意

基于 Database 方式做 Code First 的时候,需要手动指定迁移程序名称,如:

optionsBuilder.UseSqlite(GetDatabaseConnectionString(), options=>
{
options.MigrationsAssembly("My.Migrations");
});

11.7 基于 Schema 的方式

此方式在中小型企业系统中也不少见,一个租户(客户)共享数据库且不同 Schema

11.7.1 创建租户数据库上下文

Furion.EntityFramework.Core\DbContexts\MultiTenantDbContext.cs
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class MultiTenantDbContext : AppDbContext<MultiTenantDbContext, MultiTenantDbContextLocator>
{
public MultiTenantDbContext(DbContextOptions<MultiTenantDbContext> options) : base(options)
{
}
}
}
特别注意

多租户操作建议单独一个数据库上下文,而且需指定 MultiTenantDbContextLocator 数据库上下文定位器。

11.7.2 注册多租户数据库上下文

using Furion.DatabaseAccessor;
using Microsoft.Extensions.DependencyInjection;

namespace Furion.EntityFramework.Core
{
[AppStartup(600)]
public sealed class FurEntityFrameworkCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDatabaseAccessor(options =>
{
options.AddDbPool<FurionDbContext>();
options.AddDbPool<MultiTenantDbContext, MultiTenantDbContextLocator>();
});
}
}
}

11.7.3 添加 Tenant 种子数据

Furion.EntityFramework.Core\SeedDatas\TenantSeedData.cs
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;

namespace Furion.EntityFramework.Core
{
public class TenantSeedData : IEntitySeedData<Tenant, MultiTenantDbContextLocator>
{
public IEnumerable<Tenant> HasData(DbContext dbContext, Type dbContextLocator)
{
return new List<Tenant>
{
new Tenant
{
TenantId = Guid.Parse("383AFB88-F519-FFF8-B364-6D563BF3687F"),
Name = "默认租户",
Host = "localhost:44313",
CreatedTime = DateTime.Parse("2020-10-06 20:19:07"),
Schema = "dbo" // Schema
},
new Tenant
{
TenantId = Guid.Parse("C5798CB6-16D6-0F42-EB56-59C695353BC0"),
Name = "其他租户",
Host = "localhost:5000",
CreatedTime = DateTime.Parse("2020-10-06 20:20:32"),
Schema = "furion" // Schema
}
};
}
}
}
特别说明

该步骤只在 Code First 方式执行,Database First 无需配置种子数据。

11.7.4 根据模型创建 Tenant

Add-Migration add_tenant_table -Context MultiTenantDbContext
Update-Database -Context MultiTenantDbContext

11.7.5 实现 IMultiTenantOnSchema 接口

在需要多租户的数据库上下文中实现 IMultiTenantOnSchema 接口,如:

using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;

namespace Furion.EntityFramework.Core
{
[AppDbContext("Sqlite3ConnectionString", DbProvider.Sqlite)]
public class FurionDbContext : AppDbContext<FurionDbContext>, IMultiTenantOnSchema
{
public FurionDbContext(DbContextOptions<FurionDbContext> options) : base(options)
{
}

public string GetSchemaName()
{
return base.Tenant?.Schema??"dbo";
}
}
}
特别说明

base.Tenant 只是 Furion 框架提供的默认租户实现方法,如果不能满足业务需求,只需要在 GetSchemaName 里面写你的业务代码即可,也就是无需调用 base.Tenant。如:

public string GetSchemaName()
{
// 这里是你获取 Schema 的逻辑
return 你的 Schema;
}

11.7.6 关于 Code First 数据迁移

基于 Schema 方式比较特别,生成数据迁移的时候没办法获取租户信息,所以建议分开多次迁移,如:

public string GetSchemaName()
{
return base.Tenant?.Schema?? "租户一Schema";
}
public string GetSchemaName()
{
return base.Tenant?.Schema?? "租户二Schema";
}

这样就可以在迁移的时候生成多次迁移了。

11.8 自定义 Tenant 类型

默认情况下,Furion 框架提供了内置的 Tenant 类型,方便大家快速实现 SaaS 多租户功能,如果需要自定义多租户 Tenant 类型,只需要启用以下配置即可:

11.8.1 启动自定义多租户类型配置

services.AddDatabaseAccessor(options =>
{
options.CustomizeMultiTenants(); // 启用自定义多租户类型,有一个默认参数,配置多租户表字段名
options.AddDbPool<FurionDbContext>();
});

11.8.2 自定义租户类

using System;
using System.ComponentModel.DataAnnotations.Schema;

namespace Furion.Core
{
public class MyTenant : IEntity<MultiTenantDbContextLocator>
{
[Key]
public Guid TenantId { get; set; }

public string Name { get; set; }

public string Host { get; set; }
}
}

如果需要查询该租户信息,可通过以下代码获取,如:

var tenantDbContext = Db.GetDbContext<MultiTenantDbContextLocator>();
var myTenant = tenantDbContext.Set<MyTenant>();

11.9 刷新租户缓存

Furion 框架会在租户上下文第一次查询时候将租户表缓存起来,避免频发查询数据库,如果更新了租户表,则需要手动刷新租户信息,如:

using Furion.DatabaseAccessor.Extensions;

// 在更新租户信息后调用
_repository.Context.RefreshTenantCache();

11.10 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/sensitive-detection/index.html b/handbook/build/docs/sensitive-detection/index.html new file mode 100644 index 00000000000..796afa5c340 --- /dev/null +++ b/handbook/build/docs/sensitive-detection/index.html @@ -0,0 +1,17 @@ + + + + + +30. 脱敏处理 | Furion + + + + + +
+

30. 脱敏处理

版本说明

以下内容仅限 Furion 2.4.4 + 版本使用。

30.1 关于脱敏

引用百度百科:

数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。数据安全技术之一,数据库安全技术主要包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。

Furion 系统中,脱敏处理 指的是对不符合系统合法词汇检测验证。

30.2 如何使用

Furion 框架内置了一套默认的脱敏词汇脱敏处理机制,并且提供自定义操作。

30.2.1 注册 脱敏词汇检测 服务

public void ConfigureServices(IServiceCollection services)
{
services.AddSensitiveDetection();
}

30.2.2 创建 sensitive-words.txt 文件

Web 启动层项目中创建 sensitive-words.txt 文件,确保采用 UTF-8 编码格式且不能带 BOM 签名 且设置为嵌入式资源!🎃

sensitive-words.txt 内容格式为每一行标识一个脱敏词汇:

坏人
无语
滚开
八嘎
3.8.9+ 版本

Furion 3.8.9+ 版本支持 | 分隔符进行分割,也同时支持 换行| 混用,如:

坏人|无语|滚开
八嘎

推荐使用 | 方式,可以节省词库占用存储空间。

接下来设置为嵌入式资源:

30.2.3 使用脱敏检测

  • 实现数据验证脱敏检测 [SensitiveDetection]

Furion 框架提供了 [SensitiveDetection] 验证特性,可以对参数、属性进行脱敏验证,用法和 [DataValidation] 一致,如:

// 在属性中使用
public class Content
{
[SensitiveDetection]
public string Text { get; set; }
}

// 在 动态API/Controller 中使用
public void Test([SensitiveDetection] string text)
{

}
  • 通过 ISensitiveDetectionProvider 服务使用

Furion 框架也提供了 ISensitiveDetectionProvider 服务进行手动脱敏验证处理,如:

public class FurionService
{
private readonly ISensitiveDetectionProvider _sensitiveDetectionProvider;
public FurionService(ISensitiveDetectionProvider sensitiveDetectionProvider)
{
_sensitiveDetectionProvider = sensitiveDetectionProvider;
}

/// <summary>
/// 获取所有脱敏词汇
/// </summary>
/// <returns></returns>
public async Task<IEnumerable<string>> GetWordsAsync()
{
return await _sensitiveDetectionProvider.GetWordsAsync();
}

/// <summary>
/// 判断是否是正常的词汇
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public async Task<bool> VaildedAsync(string text)
{
return await _sensitiveDetectionProvider.VaildedAsync(text);
}

/// <summary>
/// 替换非正常词汇
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public async Task<string> ReplaceAsync(string text)
{
return await _sensitiveDetectionProvider.ReplaceAsync(text, '*');
}
}

30.2.4 脱敏词汇替换

Furion 框架也提供了替换脱敏词汇的特性支持,如:

// 在属性中使用
public class Content
{
[SensitiveDetection('*')]
public string Text { get; set; }
}
特别注意

Furion 3.8.8+ 版本后支持方法特性直接替换

public void Test([SensitiveDetection('*')] string text)
{
}

30.3 自定义脱敏词汇处理

Furion 框架除了内置了一套默认的 脱敏处理 程序,也支持自定义脱敏处理程序。

30.3.1 自定义 ISensitiveDetectionProvider 程序,如:

/// <summary>
/// 自定义脱敏词汇检测器
/// </summary>
public class YourSensitiveDetectionProvider : ISensitiveDetectionProvider
{
// 支持构造函数注入
public YourSensitiveDetectionProvider()
{
}

/// <summary>
/// 返回所有脱敏词汇
/// </summary>
/// <returns></returns>
public async Task<IEnumerable<string>> GetWordsAsync()
{
// 这里写你脱敏词汇数据的来源(如从数据库读取),建议做好缓存操作
}

/// <summary>
/// 判断脱敏词汇是否有效
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public async Task<bool> VaildedAsync(string text)
{
// 这里写你如何判断是正常的字符,返回 true 正常,返回 false 表示是个脱敏词汇
}

/// <summary>
/// 替换脱敏词汇
/// </summary>
/// <param name="text"></param>
/// <param name="transfer"></param>
/// <returns></returns>
public async Task<string> ReplaceAsync(string text, char transfer = '*')
{
// 这里写你替换非正常字符为指定字符
}
}

30.3.2 注册自定义脱敏提供器

public void ConfigureServices(IServiceCollection services)
{
services.AddSensitiveDetection<YourSensitiveDetectionProvider>();
}

之后系统将自动采用自定义的方式进行脱敏处理。

30.4 反馈与建议

与我们交流

给 Furion 提 Issue


+ + + + \ No newline at end of file diff --git a/handbook/build/docs/serverun/index.html b/handbook/build/docs/serverun/index.html new file mode 100644 index 00000000000..938dce3e617 --- /dev/null +++ b/handbook/build/docs/serverun/index.html @@ -0,0 +1,17 @@ + + + + + +2.0 入门指南 | Furion + + + + + +
+

2.0 入门指南

版本说明

以下内容仅限 Furion 3.6.3 + 版本使用。

推荐使用脚手架

Furion 官方提供了非常灵活方便的脚手架,可以快速的创建多层架构项目。

推荐使用 《2.2 官方脚手架》代替本章节功能。

2.0.1 历史背景

相信从 ASP.NET 5 升级至 ASP.NET 6 的开发者都经历过这样变更:

  • ASP.NET 5 中,我们这样创建 Web 主机
Program.cs
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
  • ASP.NET 6 中, 我们这样创建 Web 主机
Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

试问,ASP.NET 7ASP.NET 8 ... ASP.NET N 呢?会不会每一个版本都有不同的创建方式,那后续项目如何无缝升级?

所以,为了保证一致的代码体验和后续无缝升级,创造出了 Serve.Run(),即使未来创建方式变了,也不用担心,交给框架即可。

2.0.2 创建 控制台 项目

  • 打开 Visual Studio 2022 并创建 控制台 项目
  • 配置项目名称
  • 选择 .NET6
使用命令行方式
// 创建控制台项目
dotnet new console -n HelloFurion

2.0.3 添加 Furion 依赖包

使用命令行方式
// 进入创建的目录
cd HelloFurion
// 添加包
dotnet add package Furion

2.0.4 一句话搞定

修改 Program.cs 代码为:

Program.cs
Serve.Run();

对,你没看错,Furion 已经配置好了!

功能说明

Serve.Run() 已经包含了基本的 WebAPI 功能,包含动态 WebAPI跨域 等等,如需完全自定义配置可使用 Serve.Run(RunOptions.Default),之后 AppStartup 派生类自行配置。

2.0.5 启动浏览器

启动浏览器查看效果

是不是超级超级简单!!!

2.0.6 编写第一个 API

Program.cs
Serve.Run();

[DynamicApiController]
public class HelloService
{
public string Say()
{
return "Hello, Furion";
}
}

启动浏览器查看效果

2.0.7 Serve.Run() 更多配置

2.0.7.1 配置默认端口

默认情况下,创建的 Web 主机端口为 5000/5001 端口,如需自定义配置,可通过第一个参数配置:

Serve.Run("https://localhost:8080");

同时也支持 dotnet rundotnet watch run 指定:

dotnet run --urls https://localhost:8080

# watch 方式
dotnet watch run --urls https://localhost:8080

也可以通过 ConfigureBuilder 方式配置:

Serve.Run(RunOptions.Default.ConfigureBuilder(builder =>
{
builder.WebHost.UseUrls("https://localhost:8080"); // 也可以通过 builder.Configuration 读取 urls 配置
}));
关于 localhost 和多端口

建议使用 * 代替 localhost,这样可以自适应主机地址,多个端口使用 ; 分割,结尾无需 ;

通过 json 方式配置

如需通过配置文件配置端口,需两个该步骤:

  1. 编辑控制台启动项目 .csproj 文件,修改 Project 节点为:
<Project Sdk="Microsoft.NET.Sdk.Web">

也就是在原来的 Sdk 中添加 .Web 即可。

  1. 在控制台启动项目中添加 Properties 文件夹并在此文件夹中创建 launchSettings.json 文件,同时写入以下内容:
launchSettings.json
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"启动项目名称": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "",
"applicationUrl": "https://localhost:8080;http://localhost:8081",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

除了 launchsettings.json 的方式,还可以在 appsettings.json 简单配置


appsettings.json
{
"Urls": "http://localhost:8081"
}

2.0.7.2 便捷服务注册

版本说明

以下内容仅限 Furion 4.8.0 + 版本使用。

Serve.Run(additional: services =>
{
services.AddRemoteRequest();
});

// 通用泛型主机方式
Serve.RunGeneric(additional: services =>
{
services.AddRemoteRequest();
});

// 还可以省去 additional
Serve.Run(services =>
{
services.AddRemoteRequest();
});

// 通用泛型主机方式
Serve.RunGeneric(services =>
{
services.AddRemoteRequest();
});

2.0.7.3 自定义配置

传入 RunOptions 对象相当于自由定义和控制,也就是除了默认集成了 Furion 以外,没有注册任何功能。

  • 仅集成 Furion 的默认配置
Serve.Run(RunOptions.Default);
  • 配置更多服务/中间件
Serve.Run(RunOptions.Default
.ConfigureBuilder(builder =>
{
builder.Services.AddControllers()
.AddInject();
})
.Configure(app =>
{
app.UseRouting();
app.UseInject(string.Empty);
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}));
  • WebComponent 方式
版本说明

以下内容仅限 Furion 4.3.5 + 版本使用。

Serve.Run(RunOptions.Default
.AddWebComponent<XXXWebComponent>());

public class XXXWebComponent : IWebComponent
{
public void Load(WebApplicationBuilder builder, ComponentContext componentContext)
{
// ....
}
}

2.0.7.4 Serve.RunStartup 最佳组合

默认情况下 Serve.Run() 内置了 跨域控制器路由规范化结果静态文件 服务/中间件。适合快速开始项目和编写测试代码。

但不能对这些已注册服务/中间件进行自定义配置,这时只需要配置 RunOptions 属性/方法即可,如:

Program.cs
Serve.Run(RunOptions.Default
.ConfigureBuilder(...)
.Configure(..));

但把所有服务/中间件都放在 Program.cs 中好吗?答案是不好的,因为会导致后续迁移代码维护代码造成了一些困扰。

所以 Furion 推荐下面更加灵活且易维护的方式,Program.cs 只需一句话即可:

推荐使用组件启动

Furion 3.7.3+ 官方提供了非常灵活方便的组件化启动配置服务。

推荐使用 《3.1 组件化启动》代替 AppStartup 方式功能。

Program.cs
Serve.Run(RunOptions.Default);

然后添加自定义 Startup.cs 文件,代码如下:

Startup.cs
using Furion;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

namespace HelloFurion;

public class Startup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
// ....
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ....
}
}
小提示

正常情况下,自定义 Startup.cs 文件应该放在独立的 YourProject.Web.Core 层或其他层。

2.0.7.5 更多配置

如配置 WebHost...

Serve.Run(RunOptions.Default
.ConfigureBuilder(builder => {
builder.WebHost.....
}));

2.0.8 支持 Furion 所有功能

Serve.Run() 看似非常简单,实则非常灵活,而且支持 Furion.NET 所有功能。

2.0.8.1 添加 appsettings.json

创建 appsettings.json 文件,并设置 属性如果较新则复制内容(生成操作)

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.EntityFrameworkCore": "Information"
}
},
"AllowedHosts": "*"
}

在代码中读取配置:

using Furion;

Serve.Run();

[DynamicApiController]
public class HelloService
{
public string Say()
{
return "Hello, Furion " + App.Configuration["Logging:LogLevel:Default"];
}
}

2.0.8.2 添加自定义 Startup

Furion 中可以派生自 AppStartup 可以实现更多配置,如:

Program.cs
Serve.Run();
特别注意

如果您想自己配置 Web 项目服务,可通过 Serve.Run(RunOptions.Default); 方式,因为 Serve.Run() 已经包含了常用的 Web 可能会提示重复注册错误。

MyStartup.cs
using Furion;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

namespace HelloFurion;

public class MyStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
Console.WriteLine("调用服务注册啦~~");
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
Console.WriteLine("调用中间件注册啦");
}
}

2.0.8.3 将控制台项目变成 Web 项目

只需要编辑 .csproj 文件,将第一行 Project 节点的 Sdk

<Project Sdk="Microsoft.NET.Sdk">

修改为:

<Project Sdk="Microsoft.NET.Sdk.Web">

即可完成转换,实际上只是追加了 .Web

2.0.8.4 添加 args 启动参数

版本说明

以下内容仅限 Furion 4.2.4 + 版本使用。

Serve.Run(args: args);

Serve.Run(RunOptions.Default.WithArgs(args));

Serve.Run(RunOptions.Main(args));

2.0.8.5 还没看够?

是不是非常强大啊,Serve.Run() 虽然简单,但是 100% 支持 Furion.NET 所有功能。尽情去体验吧!

2.0.9 RunOptionsLegacyRunOptionsGenericRunOptions

Serve.Run 提供了 RunOptionsLegacyRunOptionsGenericRunOptions 重载参数类型,他们的主要区别:

  • RunOptions:使用的是 WebApplication 方式,创建 Web 主机优先推荐方式
  • LegacyRunOptions:使用的是 Host 方式,但默认配置了 Web 主机
  • GenericRunOptions:使用的是 Host 方式,通用类型主机,可用于 WorkerService

LegacyRunOptions 配置例子:

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

Serve.Run(LegacyRunOptions.Default
// 配置 Web 主机
.ConfigureWebDefaults(builder => builder.ConfigureServices(services =>
{
// ...
})
.Configure(app =>
{
// ...
});
})
// 配置 Host 主机
.ConfigureBuilder(builder => builder....));

GenericRunOptions 配置例子:

Serve.Run(GenericRunOptions.Default
// 配置 Host 主机
.ConfigureBuilder(hostBuilder => hostBuilder....);

更多发布命令说明可查阅微软官方文档 https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish

2.0.10 在 Winform/WPF 桌面中使用

WinformWPF 中使用,请确保 Serve.Run() 在桌面应用程序之前初始化:

  • Winform
namespace WinFormsApp2;

internal static class Program
{
[STAThread]
static void Main()
{
// 如果在 4.8.0 之前版本无返回值
var host = Serve.Run(silence: true); // 静默启动

ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
  • WPF
using Microsoft.Extensions.Hosting;

namespace WpfApp1;

public partial class App : Application
{
private readonly IHost _host;

public App()
{
// 如果在 4.8.0 之前版本无返回值
_host = Serve.Run(silence: true);
}

protected override void OnExit(ExitEventArgs e)
{
// 停止服务并释放
_host.StopAsync();
_host.Dispose();

base.OnExit(e);
}
}

2.0.10.1 添加更多服务

如果想注册服务,可创建 YourStartup 派生自 AppStartup 即可,如:

YourStartup.cs
using Furion;
using Microsoft.Extensions.DependencyInjection;

namespace YourProject;

public class YourStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddRemoteRequest();
}
}

2.0.11 静默启动

默认情况下,Serve.Run() 使用阻塞线程方式启动,但有些时候我们不希望阻塞现有的代码,可使用静默启动的方式:

Serve.Run(silence: true);

Console.WriteLine("Hello, World!");
Console.ReadKey();

也可以通过 RunOptionsLegacyRunOptionsGenericRunOptions 方式,如:

// RunOptions 方式
Serve.Run(RunOptions.DefaultSilence);

// LegacyRunOptions 方式
Serve.Run(LegacyRunOptions.DefaultSilence);

// GenericRunOptions 方式
Serve.Run(GenericRunOptions.DefaultSilence);

2.0.12 .NET5 模式找不到 Views 视图路径

由于 .NET5 必须在使用 .UseStartup<> 配置启动项,所以 Serve.Run() 模式会提示找不到 Views 视图路径,这时候只需要在启动目录创建 Startup.cs 文件并通过泛型方式指定即可,如:

Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

namespace YourProject.Web.Entity
{
public class Startup
{
public void ConfigureServices(IServiceCollection _)
{
}

public void Configure(IApplicationBuilder _)
{
}
}
}

Startup 类通过 Serve.Run 泛型指定:

Serve.Run<Startup>(LegacyRunOptions.Default);

2.0.13 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/sesssion-state/index.html b/handbook/build/docs/sesssion-state/index.html new file mode 100644 index 00000000000..6adf9a313a3 --- /dev/null +++ b/handbook/build/docs/sesssion-state/index.html @@ -0,0 +1,17 @@ + + + + + +32. 会话和状态管理 | Furion + + + + + +
+

32. 会话和状态管理

32.1 关于会话和状态管理

HTTP 是无状态的协议。 默认情况下,HTTP 请求是不保留用户值的独立消息。但是我们可以通过以下几种方式保留请求用户数据:

  • Cookie:通常存储在客户端的数据,请求时带回服务端
  • Session:存储在服务端的数据(可以在存储在内存、进程等介质中)
  • Query Strings:通过 Http 请求地址参数共享
  • HttpContext.Items:存储在服务端,只在请求声明周期内使用,请求结束自动销毁
  • Cache:服务端缓存,包括内存缓存、分布式内存缓存、IO 缓存、序列化缓存以及数据库缓存
  • AsyncLocal<T>:通过异步控制流实现本地数据共享,跨线程

32.2 如何使用

使用 Cookie 非常简单,如:

// 读取 Cookies
var value = httpContext.Request.Cookies["key"];

// 设置 Cookies
var option = new CookieOptions();
option.Expires = DateTime.Now.AddMilliseconds(10);
httpContext.Response.Cookies.Append(key, value, option);

// 删除 Cookies
httpContext.Response.Cookies.Delete(key);
特别说明

httpContext 可以通过 IHttpContextAccessor 获取,也可以通过 App.HttpContext 获取。

我们还可以通过 Cookie 实现授权功能及单点登录(SSO):网站共享 Cookie

32.2.2 Session 使用

在使用 Session 之前,必须注册 Session 服务:(如果

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// services.AddDistributedMemoryCache(); 框架内部已经默认注册

services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromSeconds(10);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
}); // 注意在控制器之前注册!!!!

services.AddControllersWithViews();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.UseSession();

app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
endpoints.MapRazorPages();
});
}
}
中间件注册顺序

app.UseSession() 必须在 app.UseRouting()app.UseEndpoints() 之间注册!

  • 常见例子:
// 读取 Session
var byteArr = httpContext.Session.Get("key"); // 返回 byte[]
var str = httpContext.Session.GetString("key"); // 返回 string[]
var num = httpContext.Session.GetInt32("key"); // 返回 int

// 设置 Session
httpContext.Session.SetString("key", "value"); // 设置字符串
httpContext.Session.SetInt32("key", 1); // 设置 int 类型
  • 自定义设置任意类型拓展:
public static class SessionExtensions
{
public static void Set<T>(this ISession session, string key, T value)
{
session.SetString(key, JsonSerializer.Serialize(value));
}

public static T Get<T>(this ISession session, string key)
{
var value = session.GetString(key);
return value == null ? default : JsonSerializer.Deserialize<T>(value);
}
}
  • 防止 Session ID 改变或 Session 失效

Startup.csConfigureServices 配置即可:

services.Configure<CookiePolicyOptions>(options =>
{
  options.CheckConsentNeeded = context => false; // 默认为true,改为false
   options.MinimumSameSitePolicy = SameSiteMode.None;
});

32.2.3 Query Strings 使用

该方式使用非常简单,只需 httpContext.Request.Query["key"] 即可。

32.2.4 HttpContext.Items 使用

HttpContext 对象提供了 Items 集合属性,可以让我们在单次请求间共享数据,请求结束立即销毁,可以存储任何数据。使用也非常简单,如:

// 读取
var value = httpContext.Items["key"];

// 添加
httpContext.Items["key"] = "任何值包括对象";

// 删除
httpContext.Items.Remove("key");

32.2.5 Cache 方式

参见 分布式缓存 文档

32.2.6 AsyncLocal<T> 方式

AsyncLocal<T> 可以说是进程内共享数据的大利器,可以通过该类实现跨线程、异步控制流中共享数据,如:

using System;
using System.Threading;
using System.Threading.Tasks;

class Example
{
static AsyncLocal<string> _asyncLocalString = new AsyncLocal<string>();

static ThreadLocal<string> _threadLocalString = new ThreadLocal<string>();

static async Task AsyncMethodA()
{
// Start multiple async method calls, with different AsyncLocal values.
// We also set ThreadLocal values, to demonstrate how the two mechanisms differ.
_asyncLocalString.Value = "Value 1";
_threadLocalString.Value = "Value 1";
var t1 = AsyncMethodB("Value 1");

_asyncLocalString.Value = "Value 2";
_threadLocalString.Value = "Value 2";
var t2 = AsyncMethodB("Value 2");

// Await both calls
await t1;
await t2;
}

static async Task AsyncMethodB(string expectedValue)
{
Console.WriteLine("Entering AsyncMethodB.");
Console.WriteLine(" Expected '{0}', AsyncLocal value is '{1}', ThreadLocal value is '{2}'",
expectedValue, _asyncLocalString.Value, _threadLocalString.Value);
await Task.Delay(100);
Console.WriteLine("Exiting AsyncMethodB.");
Console.WriteLine(" Expected '{0}', got '{1}', ThreadLocal value is '{2}'",
expectedValue, _asyncLocalString.Value, _threadLocalString.Value);
}

static async Task Main(string[] args)
{
await AsyncMethodA();
}
}
// The example displays the following output:
// Entering AsyncMethodB.
// Expected 'Value 1', AsyncLocal value is 'Value 1', ThreadLocal value is 'Value 1'
// Entering AsyncMethodB.
// Expected 'Value 2', AsyncLocal value is 'Value 2', ThreadLocal value is 'Value 2'
// Exiting AsyncMethodB.
// Expected 'Value 2', got 'Value 2', ThreadLocal value is ''
// Exiting AsyncMethodB.
// Expected 'Value 1', got 'Value 1', ThreadLocal value is ''

为了简化操作,Furion v2.18+ 版本实现了轻量级的 CallContext 静态类,内部使用 AsyncLocal<T> 实现,使用如下:

CallContext.SetLocalValue("name", "Furion");
CallContext.GetLocalValue("name");

CallContext<int>.SetLocalValue("count", 1);
CallContext<int>.GetLocalValue("count");

了解更多 AsyncLocal<T> 知识:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.asynclocal-1?redirectedfrom=MSDN&view=net-5.0

32.3 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/settings/appsettings/index.html b/handbook/build/docs/settings/appsettings/index.html new file mode 100644 index 00000000000..f4ad2c829ed --- /dev/null +++ b/handbook/build/docs/settings/appsettings/index.html @@ -0,0 +1,17 @@ + + + + + +1. 应用配置 | Furion + + + + + +
+

1. 应用配置

配置智能提示和校验

如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用

只需要在 .json 文件头部添加下列配置即可:

{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"
}

1.1 关于配置

应用配置指的是 Furion 框架全局配置选项。

1.2 配置信息

  • AppSettings:配置根节点
    • InjectMiniProfiler:是否注入 MiniProfilerbool 类型,默认 true关闭 Swagger 左上角监听
    • InjectSpecificationDocument:是否启用 Swagger 文档,bool 类型,默认 true生产环境可关闭
    • EnabledReferenceAssemblyScan:是否启用通过 dll 方式添加的引用程序集扫描,bool 类型,默认 false
    • ExternalAssemblies:配置外部程序集完整路径,支持动态加载,string[] 类型,默认 []
    • ExcludeAssemblies:排除扫描的程序集名称,string[] 类型,默认 []
    • PrintDbConnectionInfo:是否打印数据库连接信息到 MiniProfiler 中,bool 类型,默认 true
    • SupportPackageNamePrefixs:配置支持的包前缀名,string[] 类型,默认 []
    • OutputOriginalSqlExecuteLog:是否输出原始 Sql 执行日志(ADO.NET),默认 true
    • VirtualPath:配置虚拟目录,必须以 / 开头

1.3 配置示例

{
"AppSettings": {
"InjectMiniProfiler": false
}
}

1.4 特别注意

默认情况下,Furion 框架会自动扫描根目录下的 *.json*.config.xml 文件载入配置中,如需忽略个别文件,需在 appsettings.json 配置文件根节点下配置 IgnoreConfigurationFiles 节点即可,string[] 类型,如:

{
"IgnoreConfigurationFiles": ["runtime.json"]
}

如果需要自定义扫描目录(非根目录),需在 appsettings.json 中添加下面配置:

支持版本

v2.16.7+ 版本有效

{
"ConfigurationScanDirectories": ["目录1名称", "目录1名称/子目录名称"]
}

必须在 appsettings.json 文件中配置才有效

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/settings/corsaccessorsettings/index.html b/handbook/build/docs/settings/corsaccessorsettings/index.html new file mode 100644 index 00000000000..afd4769f90b --- /dev/null +++ b/handbook/build/docs/settings/corsaccessorsettings/index.html @@ -0,0 +1,17 @@ + + + + + +2. 跨域配置 | Furion + + + + + +
+

2. 跨域配置

配置智能提示和校验

如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用

只需要在 .json 文件头部添加下列配置即可:

{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"
}

2.1 关于配置

跨域配置指的是 Furion 框架客户端跨域配置选项。

2.2 配置信息

  • CorsAccessorSettings:配置根节点
    • PolicyName:跨域策略名,string 类型,必填,默认 App.Cors.Policy
    • WithOrigins:允许跨域的域名列表,string[] 类型,默认 *
    • WithHeaders:请求表头,没有配置则允许所有表头,string[] 类型
    • WithExposedHeaders:设置客户端可获取的响应标头,string[] 类型,默认 ["access-token", "x-access-token"]
    • WithMethods:设置跨域允许请求谓词,没有配置则允许所有,string[] 类型
    • AllowCredentials:是否允许跨域请求中的凭据,bool 类型,默认值 true
    • SetPreflightMaxAge:设置预检过期时间,int 类型,默认值 24小时
    • FixedClientToken:是否默认配置 WithExposedHeadersbool 类型,默认 true
    • SignalRSupport:是否启用 SignalR 跨域支持,bool 类型,默认 false

2.3 配置示例

{
"CorsAccessorSettings": {
"PolicyName": "MyPolicy",
"WithOrigins": ["http://localhost:4200", "https://furion.icu"]
}
}

2.4 使用 axios 前端注意事项

由于 axios 对跨域有特定的需要,需要响应报文中添加特定 Header 才能放行,如:Access-Control-Expose-Headers: xxxxx,所以,如果前端使用了 axios 请求,需要添加以下配置:

{
"CorsAccessorSettings": {
"WithExposedHeaders": ["X-Pagination","access-token","x-access-token"]
}
}
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/settings/dependencyinjectionsettings/index.html b/handbook/build/docs/settings/dependencyinjectionsettings/index.html new file mode 100644 index 00000000000..d276bf589bc --- /dev/null +++ b/handbook/build/docs/settings/dependencyinjectionsettings/index.html @@ -0,0 +1,17 @@ + + + + + +4. 依赖注入配置 | Furion + + + + + +
+

4. 依赖注入配置

配置智能提示和校验

如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用

只需要在 .json 文件头部添加下列配置即可:

{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"
}

4.1 关于配置

依赖注入配置指的是 Furion 框架依赖注入配置选项。

4.2 配置信息

  • DependencyInjectionSettings:依赖注入配置根节点
    • Definitions:动态依赖注入配置节点,ExternalService 数组类型
      • ExternalService:配置单个依赖注入信息
        • Interface:配置依赖接口信息,格式:程序集名称;接口完整名称,如:Furion.Application;Furion.Application.ITestService
        • Service:配置接口实现信息,格式同上
        • RegisterType:配置依赖注入的对象生存期,取值:TransientScopedSingleton
        • Action:注册行为,可选值:AddTryAdd,参见 依赖注入-特性配置
        • Pattern:注册选项,参见 依赖注入-特性配置置
        • Named:注册别名,参见 依赖注入-特性配置
        • Order:注册排序,参见 依赖注入-特性配置
        • Proxy:配置代理拦截,格式:程序集名称;代理类完整名称,参见 依赖注入-特性配置

4.3 配置示例

{
"DependencyInjectionSettings": {
"Definitions": [
{
"Interface": "Furion.Application;Furion.Application.ITestService",
"Service": "Furion.Application;Furion.Application.TestService",
"RegisterType": "Transient",
"Action": "Add",
"Pattern": "SelfWithFirstInterface",
"Named": "TestService",
"Order": 1,
"Proxy": "Furion.Application;Furion.Application.LogDispathProxy"
}
]
}
}
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/settings/dynamicapicontrollersettings/index.html b/handbook/build/docs/settings/dynamicapicontrollersettings/index.html new file mode 100644 index 00000000000..fb3b2a0a35d --- /dev/null +++ b/handbook/build/docs/settings/dynamicapicontrollersettings/index.html @@ -0,0 +1,17 @@ + + + + + +5. 动态API配置 | Furion + + + + + +
+

5. 动态API配置

配置智能提示和校验

如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用

只需要在 .json 文件头部添加下列配置即可:

{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"
}

5.1 关于配置

动态 API 配置指的是 Furion 框架动态 API 配置选项。

5.2 配置信息

  • DynamicApiControllerSettings:配置根节点
    • DefaultRoutePrefix:默认路由前缀,string,默认 api
    • DefaultHttpMethod:默认请求谓词,string,默认:POST
    • DefaultModule:默认模块名称(区域),可用作接口版本,string,默认:v1
    • LowercaseRoute:小写路由格式,bool,默认:true
    • AsLowerCamelCase:启用小驼峰命名(首字母小写),默认 false
    • KeepVerb:是否保留动作谓词,bool,默认:false
    • KeepName:是否保留默认名称,bool,默认:fasle
    • CamelCaseSeparator:骆驼(驼峰)命名分隔符,string,默认:-
    • VersionSeparator:版本分隔符,string,默认:@
    • ModelToQueryGET/HEAD 请求将 类类型参数转查询参数bool,默认 false
    • SupportedMvcController:是否支持 Mvc Controller 动态配置,bool,默认 false
    • UrlParameterization:路由参数采用 [FromQuery] 化,默认 false[FromRoute] 方式)
    • DefaultArea:配置默认区域,默认 null
    • ForceWithRoutePrefix:配置是否强制添加 DefaultRoutePrefix,当控制器自定义了 [Route] 有效,仅限 v3.4.1+版本有效
    • AbandonControllerAffixes:默认去除控制器名称前后缀列表名,string[],默认:
      • AppServices
      • AppService
      • ApiController
      • Controller
      • Services
      • Service
    • AbandonActionAffixes:默认去除动作方法名称前后缀列表名,string[],默认:
      • Async
    • VerbToHttpMethods:复写默认方法名转 [HttpMethod] 规则,string[][] 二维数组类型,内置匹配规则为:
      ["post"] = "POST",
      ["add"] = "POST",
      ["create"] = "POST",
      ["insert"] = "POST",
      ["submit"] = "POST",
      ["get"] = "GET",
      ["find"] = "GET",
      ["fetch"] = "GET",
      ["query"] = "GET",
      ["put"] = "PUT",
      ["update"] = "PUT",
      ["delete"] = "DELETE",
      ["remove"] = "DELETE",
      ["clear"] = "DELETE",
      ["patch"] = "PATCH"
      • 复写示例
      "DynamicApiControllerSettings": {
      "VerbToHttpMethods": [
      [ "getall", "HEAD" ], // => getall 会被复写为 `[HttpHead]`
      [ "other", "PUT" ] // => 新增一条新规则,比如,一 `[other]` 开头会转换为 `[HttpPut]` 请求
      ]
      }

5.3 配置示例

{
"DynamicApiControllerSettings": {
"SupportedMvcController": true
}
}
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/settings/friendlyexceptionsettings/index.html b/handbook/build/docs/settings/friendlyexceptionsettings/index.html new file mode 100644 index 00000000000..c4057206923 --- /dev/null +++ b/handbook/build/docs/settings/friendlyexceptionsettings/index.html @@ -0,0 +1,17 @@ + + + + + +6. 友好异常配置 | Furion + + + + + +
+

6. 友好异常配置

配置智能提示和校验

如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用

只需要在 .json 文件头部添加下列配置即可:

{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"
}

6.1 关于配置

友好异常配置指的是 Furion 框架友好异常配置选项。

6.2 配置信息

  • FriendlyExceptionSettings:配置根节点
    • HideErrorCode:隐藏错误码,bool 类型,默认 false
    • DefaultErrorCode:默认错误码,string 类型
    • DefaultErrorMessage:默认错误消息,string 类型
    • ThrowBah:是否将 Oops.Oh 默认抛出为业务异常,bool 类型,默认 false,设置 true 之后 Oops.Oh 默认进入 OnValidateFailed 处理,而不是 OnException
    • LogError:是否输出异常日志,bool 类型,默认 true

6.3 配置示例

{
"FriendlyExceptionSettings": {
"DefaultErrorMessage": "系统异常,请联系管理员"
}
}

6.4 异常消息配置

Furion 框架还为友好异常消息提供外部配置

6.4.1 配置信息

  • ErrorCodeMessageSettings:配置根节点
    • Definitions:配置异常错误码消息类型,[错误状态码,错误消息][] 类型,如:["5000", "{0} 不能小于 {1}"]

6.4.2 配置示例

{
"ErrorCodeMessageSettings": {
"Definitions": [
["5000", "{0} 不能小于 {1}"],
["5001", "我叫 {0} 名字", "百小僧"],
["5002", "Oops! 出错了"]
]
}
}
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/settings/jwtsettings/index.html b/handbook/build/docs/settings/jwtsettings/index.html new file mode 100644 index 00000000000..1ea02505397 --- /dev/null +++ b/handbook/build/docs/settings/jwtsettings/index.html @@ -0,0 +1,17 @@ + + + + + +9. JWT 配置 | Furion + + + + + +
+

9. JWT 配置

配置智能提示和校验

如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用

只需要在 .json 文件头部添加下列配置即可:

{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"
}

9.1 关于配置

JWT 配置指的是生成 JWT token 配置。

9.2 配置信息

  • JWTSettings:根节点
    • ValidateIssuerSigningKey:是否验证密钥,bool 类型,默认 true
    • IssuerSigningKey:密钥,string 类型,必须是复杂密钥,长度大于 16
    • ValidateIssuer:是否验证签发方,bool 类型,默认 true
    • ValidIssuer:签发方,string 类型
    • ValidateAudience:是否验证签收方,bool 类型,默认 true
    • ValidAudience:签收方,string 类型
    • ValidateLifetim:是否验证过期时间,bool 类型,默认 true,建议 true
    • ExpiredTime:过期时间,long 类型,单位分钟,默认 20 分钟
    • ClockSkew:过期时间容错值,long 类型,单位秒,默认 5
    • Algorithm:加密算法,string 类型,默认 HS256,可选算法有:
      • HS256
      • HS384
      • HS512
      • PS256
      • PS384
      • PS512
      • RS256
      • RS384
      • RS512
      • ES256
      • ES256K
      • ES384
      • ES512
      • EdDSA

9.3 配置示例

{
"JWTSettings": {
"ValidateIssuerSigningKey": true, // 是否验证密钥,bool 类型,默认true
"IssuerSigningKey": "你的密钥", // 密钥,string 类型,必须是复杂密钥,长度大于16
"ValidateIssuer": true, // 是否验证签发方,bool 类型,默认true
"ValidIssuer": "签发方", // 签发方,string 类型
"ValidateAudience": true, // 是否验证签收方,bool 类型,默认true
"ValidAudience": "签收方", // 签收方,string 类型
"ValidateLifetime": true, // 是否验证过期时间,bool 类型,默认true,建议true
"ExpiredTime": 20, // 过期时间,long 类型,单位分钟,默认20分钟
"ClockSkew": 5, // 过期时间容错值,long 类型,单位秒,默认 5秒
"Algorithm": "HS256" // 加密算法,string 类型,默认 HS256
}
}
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/settings/localizationsettings/index.html b/handbook/build/docs/settings/localizationsettings/index.html new file mode 100644 index 00000000000..8f2406b34c2 --- /dev/null +++ b/handbook/build/docs/settings/localizationsettings/index.html @@ -0,0 +1,17 @@ + + + + + +8. 多语言配置 | Furion + + + + + +
+

8. 多语言配置

配置智能提示和校验

如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用

只需要在 .json 文件头部添加下列配置即可:

{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"
}

8.1 关于配置

多语言配置指的是 Furion 框架全球化和本地化选项。

8.2 配置信息

  • LocalizationSettings 多语言配置根节点
    • ResourcesPath:资源目录,string 类型,默认 Resources
    • SupportedCultures:支持的语言区域码类别,string[] 类型
    • DefaultCulture:默认语言区域码,如果为空,则取 SupportedCultures 第一项
    • LanguageFilePrefix:配置资源文件前缀,string 类型,默认 Lang
    • AssemblyName:配置资源文件存放程序集名,string 类型,默认 启动层 名称

8.3 配置示例

{
"LocalizationSettings": {
"SupportedCultures": ["zh-CN", "en-US"], // 配置支持的语言列表
"DefaultCulture": "zh-CN" // 配置默认语言,如果不配置,取 SupportedCultures 的第一项
}
}
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/settings/specificationdocumentsettings/index.html b/handbook/build/docs/settings/specificationdocumentsettings/index.html new file mode 100644 index 00000000000..1690ca91213 --- /dev/null +++ b/handbook/build/docs/settings/specificationdocumentsettings/index.html @@ -0,0 +1,17 @@ + + + + + +7. 规范化文档配置 | Furion + + + + + +
+

7. 规范化文档配置

配置智能提示和校验

如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用

只需要在 .json 文件头部添加下列配置即可:

{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"
}

7.1 关于配置

规范化文档配置指的是 Furion 框架 Swagger 文档配置选项。

7.2 配置信息

  • SpecificationDocumentSettings:配置根节点
    • DocumentTitle:文档标题,string,默认 Specification Api Document
    • DefaultGroupName:默认分组名,string,默认 Default
    • EnableAuthorized:是否启用权限控制,bool,默认 true
    • FormatAsV2:采用 Swagger 2.0 版本,bool,默认 false 已弃用
    • RoutePrefix:规范化文档地址,string,默认 api如果希望在首页,改为空字符串即可
    • DocExpansionState:文档显示方式,DocExpansion,默认 List,取值:
      • List:列表式(展开子类),默认值
      • Full:完全展开
      • None:列表式(不展开子类)
    • XmlComments:程序集注释描述文件名(可带 .xmlstring,默认 Furion.Application, Furion.Web.Entry, Furion.Web.Core
    • GroupOpenApiInfos:分组信息配置,SpecificationOpenApiInfo[],默认 { 'Group': 'Default'}
    • SecurityDefinitions:安全策略定义配置,SpecificationOpenApiSecurityScheme[],默认 []
    • Servers:配置 Server 下拉列表,OpenApiServer[] 类型,默认 [],如:{Servers:[ { Url:"地址", Description:"描述"} ]}
    • HideServers:是否隐藏 Server 下拉列表,bool 类型,默认 true
    • RouteTemplate:配置文档 swagger.json 路由模板,默认模板:swagger/{documentName}/swagger.json, {documentName} 代表分组名,必须保留原样
    • PackagesGroups:配置模块化内置分组名称,string[] 类型,默认 []
    • EnableEnumSchemaFilter:启用枚举 Schema 筛选器,bool 类型,默认 true
    • EnableTagsOrderDocumentFilter:启用标签排序筛选器,bool 类型,默认 true
    • ServerDir:配置 IIS 添加 Application 部署名,string 类型,默认空,仅在 Furion v3.2.0+` 有效
    • LoginInfo:配置 Swagger 是否需要登录才能访问,SpecificationLoginInfo 类型,默认 null仅在 Furion v3.3.3+` 有效
      • Enabled:是否启用登录授权,默认 false
      • CheckUrl:检查登录状态的 Url 地址,该地址必须是 POST 请求
    • SubmitUrl:提交登录的 Url 地址,该地址必须是 POST 请求且只有一个 SpecificationAuth 类型参数,成功登录返回 200,否则返回 401,支持相对地址,以 / 开头
    • EnableAllGroups:启用 Swagger 总分组功能,自动将所有分组的接口合并到 All Groups 中,bool 类型,默认 false仅在 Furion v3.3.4+` 有效

另外 SpecificationOpenApiInfo 内置配置如下:

  • Group:分组唯一标识,string 类型,必填
  • Order:分组排序,int 类型,数字越大排前面,默认 0
  • Visible:配置分组是否可见,bool 类型,默认 true
  • Title:配置分组标题,string 类型
  • Description:配置分组描述,string 类型
  • Version:配置分组版本,默认 1.0
  • TermsOfService:配置相关链接地址,Uri 类型
  • Contact:配置联系方式,OpenApiContact 类型
  • License:配置协议,OpenApiLicense 类型

7.3 配置示例

{
"SpecificationDocumentSettings": {
"GroupOpenApiInfos": [
{
"Group": "Group1",
"Title": "分组标题",
"Description": "这里是分组描述",
"Version": "版本号",
"TermsOfService": "https://furion.icu",
"Contact": {
"Name": "百小僧",
"Url": "https://gitee.com/monksoul",
"Email": "monksoul@outlook.com"
},
"License": {
"Name": "MIT",
"Url": "https://gitee.com/dotnetchina/Furion/blob/alpha/LICENSE"
}
}
]
}
}
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/settings/unifyresultsettings/index.html b/handbook/build/docs/settings/unifyresultsettings/index.html new file mode 100644 index 00000000000..38afaf01fdd --- /dev/null +++ b/handbook/build/docs/settings/unifyresultsettings/index.html @@ -0,0 +1,17 @@ + + + + + +10. 规范化结果配置 | Furion + + + + + +
+

10. 规范化结果配置

配置智能提示和校验

如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用

只需要在 .json 文件头部添加下列配置即可:

{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"
}

10.1 关于配置

规范化配置指的是配置响应结果,响应状态码等配置

10.2 配置信息

  • UnifyResultSettings 规范化配置根节点
    • Return200StatusCodes:配置返回 200 状态码的请求,int[] 类型,只支持 400+(404除外) 状态码篡改
    • AdaptStatusCodes:配置篡改状态码规则,int[][] 类型,只支持 400+(404除外) 状态码篡改
    • SupportMvcController:是否支持 MVC 控制台规范化处理,bool 类型,默认 false

10.3 配置示例

{
"UnifyResultSettings": {
"Return200StatusCodes": [401, 403],
"AdaptStatusCodes": [
[401, 200],
[403, 401]
],
"SupportMvcController": true
}
}
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/settings/validationTypemessagesettings/index.html b/handbook/build/docs/settings/validationTypemessagesettings/index.html new file mode 100644 index 00000000000..d750f41a0b6 --- /dev/null +++ b/handbook/build/docs/settings/validationTypemessagesettings/index.html @@ -0,0 +1,17 @@ + + + + + +3. 验证消息配置 | Furion + + + + + +
+

3. 验证消息配置

配置智能提示和校验

如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用

只需要在 .json 文件头部添加下列配置即可:

{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json"
}

3.1 关于配置

验证消息配置指的是 Furion 框架数据校验中验证类型默认消息配置选项。

3.2 配置信息

  • ValidationTypeMessageSettings:配置根节点
    • Definitions:配置验证类型对应的消息类型,[类型名称,类型消息][] 类型,如:["Required", "值不能为空或Null"]

3.3 配置示例

{
"ValidationTypeMessageSettings": {
"Definitions": [
["Required", "值不能为空或Null"],
["Numeric", "必须是数值类型"],
["StrongPassword", "密码太简单了!!!"]
]
}
}
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/signalr/index.html b/handbook/build/docs/signalr/index.html new file mode 100644 index 00000000000..dab940bda22 --- /dev/null +++ b/handbook/build/docs/signalr/index.html @@ -0,0 +1,17 @@ + + + + + +24. 即时通讯 | Furion + + + + + +
+

24. 即时通讯

24.1 什么是即时通讯

即时通讯(Instant messaging,简称 IM)通常是指互联网上用以进行实时通讯的系统,允许两人或多人使用网络即时的传递文字信息、文档、语音与视频交流。

即时通讯不同于 e-mail 在于它的交谈是实时的。大部分的即时通讯服务提供了状态信息的特性 ── 显示联络人名单,联络人是否在线上与能否与联络人交谈。

在互联网上目前使用较广的即时通讯服务包括 Windows Live Messenger、AOL Instant Messenger、skype、Yahoo! Messenger、NET Messenger Service、Jabber、ICQ 与 QQ 等。

24.2 即时通讯应用场景

即时通讯应用场景非常广泛,需要实时交互消息的都需要。如:

  • 聊天工具:QQ、WeChat、在线客服等
  • 手游网游:王者荣耀、魔兽等
  • 网络直播:腾讯课堂、抖音直播等
  • 订单推送:美团、餐饮下单系统等
  • 协同办公:公司内部文件分享、工作安排、在线会议等。

以上只是列举了比较常用的应用场景,但即时通讯的作用远不止于此。

文档紧急编写中,可以先看官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?view=aspnetcore-5.0

24.3 关于 SignalR

即时通讯技术实现是复杂且过于底层化,所以微软为了简化即时通讯应用程序,开发出了一个强大且简易使用的通信库:SignalR,通过该库我们可以轻松实现类似 QQ、微信这类 IM 聊天工具,也能快速实现消息推送、订单推送这样的系统。

24.3.1 微软官方介绍

ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能。 实时 web 功能使服务器端代码可以立即将内容推送到客户端。

适用于 SignalR :

  • 需要从服务器进行高频率更新的应用。 示例包括游戏、社交网络、投票、拍卖、地图和 GPS 应用。
  • 仪表板和监视应用。 示例包括公司仪表板、即时销售更新或旅行警报。
  • 协作应用。 协作应用的示例包括白板应用和团队会议软件。
  • 需要通知的应用。 社交网络、电子邮件、聊天、游戏、旅行警报和很多其他应用都需使用通知。

目前 SignalR 已经内置在 .NET 5 SDK 中。同时 SignalR 支持 Web、App、Console、Desktop 等多个应用平台。

24.4 注册 SignalR 服务

Furion 框架中,任何服务功能都需要先注册后再使用,SignalR 也不例外。只需要在 Startup.cs 中添加注册即可:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace Furion.Web.Core
{
public sealed class Startup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
// 其他代码...

// 添加即时通讯
services.AddSignalR();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 其他代码...

app.UseEndpoints(endpoints =>
{
// 注册集线器
endpoints.MapHubs();

endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}

24.5 SignalR 长连接和集线器

SignalR 包含两种用于在客户端和服务器之间进行通信的模型:持久性连接集线器 中心。

24.5.1 持久性连接

连接表示用于发送单接收方、分组或广播消息的简单终结点。 持久性连接 (在 .NET 代码中由 PersistentConnection 类表示,在 ASP.NET Core SignalR 中 ,PersistentConnection 类已被删除。) 使开发人员能够直接访问 SignalR 公开的低级别通信协议。 使用基于连接的 Api (如 Windows Communication Foundation)的开发人员将对使用连接通信模型非常熟悉。

24.5.2 集线器

集线器是一种基于连接 API 构建的更高级别管道,它允许客户端和服务器直接调用方法SignalR 就像魔术一样处理跨机器边界的调度,使客户端能够像本地方法一样轻松地调用服务器上的方法,反之亦然。 如果开发人员已使用远程调用 (如 .NET 远程处理),则将对使用中心通信模型非常熟悉。 使用集线器还可以将强类型参数传递给方法,从而启用模型绑定。

小知识

想了解更多关于 持久性连接集线器中心 可查阅 SignalR 官方文档

24.6 集线器 Hub 定义

在本章节中主要推荐使用集线器通信模型方式。这里主要说明 Hub 定义,如果无法理解该通信模型的作用也没关系,接下来的例子会带大家慢慢熟悉并使用。

24.6.1 两种定义方式

定义集线器只需要继承 HubHub<TStrongType> 泛型基类即可,如:

  • Hub 方式
using Furion.InstantMessaging;
using Microsoft.AspNetCore.SignalR;

namespace Furion.Core
{
/// <summary>
/// 聊天集线器
/// </summary>
public class ChatHub : Hub
{
// 定义一个方法供客户端调用
public Task SendMessage(string user, string message)
{
// 触发客户端定义监听的方法
return Clients.All.SendAsync("ReceiveMessage", user, message);
}
}
}
  • Hub<TStrongType> 类型方式
public interface IChatClient
{
Task ReceiveMessage(string user, string message);
}
public class StronglyTypedChatHub : Hub<IChatClient>
{
// 定义一个方法供客户端调用
public async Task SendMessage(string user, string message)
{
// 触发客户端定义监听的方法
await Clients.All.ReceiveMessage(user, message);
}
}

通过使用 Hub<IChatClient> 可以对客户端方法进行编译时检查。 这可以防止由于使用神奇字符串而导致的问题,因为 Hub<T> 只能提供对在接口中定义的方法的访问。

24.6.2 [MapHub] 配置连接地址

SignalR 库中要求每一个公开的集线器都需要配置客户端连接地址,所以,Furion 框架提供了更加 [MapHub] 配置,如:

using Furion.InstantMessaging;
using Microsoft.AspNetCore.SignalR;
using System;
using System.Threading.Tasks;

namespace Furion.Core
{
/// <summary>
/// 聊天集线器
/// </summary>
[MapHub("/hubs/chathub")]
public class ChatHub : Hub
{
// ...
}
}
SignalR 原生配置方式

Furion 中推荐使用 [MapHub] 方式配置集线器客户端连接地址,当然也可以使用 SignalR 提供的方式,如在 Startup.cs 配置:

public sealed class Startup : AppStartup
{
// 其他代码
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 其他代码...
app.UseEndpoints(endpoints =>
{
// 注册集线器
endpoints.MapHub<ChatHub>("/hubs/chathub");
});
}
}

24.6.3 Hub 注册更多配置

有些时候,我们需要注册 Hub 时配置更多参数,比如权限、跨域等,这时只需要在 Hub 派生类中编写以下静态方法即可:

using Furion.InstantMessaging;
using Microsoft.AspNetCore.SignalR;
using System;
using System.Threading.Tasks;

namespace Furion.Core
{
[MapHub("/hubs/chathub")]
public class ChatHub : Hub
{
// 其他代码

public static void HttpConnectionDispatcherOptionsSettings(HttpConnectionDispatcherOptions options)
{
// 配置
}

public static void HubEndpointConventionBuilderSettings(HubEndpointConventionBuilder Builder)
{
// 配置
}
}
}

以上配置等价于 SignalRStartup.cs 中的配置:

app.UseEndpoints(endpoints =>
{
var builder = endpoints.MapHub<ChatHub>("/hubs/chathub", options =>
{
// 配置
});
});

24.7 获取 Hub 实例方式

SignalR 提供了几种方式进行获取 Hub 实例。

24.7.1 IHubContext 注入方式

IHubContext 默认注册为单例模式,可在任何地方直接获取实例。

public class HomeController : Controller
{
private readonly IHubContext<NotificationHub> _hubContext;

public HomeController(IHubContext<NotificationHub> hubContext)
{
_hubContext = hubContext;
}

public async Task<IActionResult> Index()
{
await _hubContext.Clients.All.SendAsync("Notify", $"Home page loaded at: {DateTime.Now}");
return View();
}
}

24.7.2 HttpContext 解析方式

 var hubContext = context.RequestServices
.GetRequiredService<IHubContext<ChatHub>>();

24.7.3 IHost 中解析方式

public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
var hubContext = host.Services.GetService(typeof(IHubContext<ChatHub>));
host.Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
});
}

24.7.4 强类型 IHubContext 注入方式

默认情况下,IHubContext 非泛型实例返回的是 dynamic 动态类型对象,该类型对象无法获得编译期语法检查和 IDE 智能提示,所以我们可以传入一个和自定义 Hub 一样的方法签名接口,如:

public class ChatController : Controller
{
public IHubContext<ChatHub, IChatClient> _strongChatHubContext { get; }

public ChatController(IHubContext<ChatHub, IChatClient> chatHubContext)
{
_strongChatHubContext = chatHubContext;
}

public async Task SendMessage(string user, string message)
{
await _strongChatHubContext.Clients.All.ReceiveMessage(user, message);
}
}

24.7.5 IHubContext 泛型转换

正常情况下,我们获取的是 IHubContext<> 的实例,但在一些反射场景下,可以将 IHubContext<> 强制转换成 IHubContext 从而更易于操作,如:

var myHubContext = context.RequestServices
.GetRequiredService<IHubContext<MyHub>>();
var myOtherHubContext = context.RequestServices
.GetRequiredService<IHubContext<MyOtherHub>>();

await CommonHubContextMethod((IHubContext)myHubContext);
await CommonHubContextMethod((IHubContext)myOtherHubContext);

24.8 服务端和客户端双工通信

24.8.1 触发所有客户端代码

Clients.All.客户端方法(参数);

24.8.2 触发调用者客户端

Clients.Caller.客户端方法(参数);

24.8.3 触发除了调用者以外的客户端

Clients.Others.客户端方法(参数);

24.8.4 触发特定用户客户端

Clients.User("用户").客户端方法(参数);

24.8.5 触发多个用户客户端

Clients.Users("用户","用户2",...).客户端方法(参数);

24.8.6 触发分组内客户端

Clients.Group("分组").客户端方法(参数);

24.8.7 触发多个分组客户端

Clients.Groups("分组","分组2",...).客户端方法(参数);

24.8.8 触发分组外的客户端

Clients.GroupExcept("分组").客户端方法(参数);

24.9 自定义用户唯一标识

默认情况下 SignalR 会为每一个链接创建 ConnectionId,但是这个 ConnectionId 并没有和我们系统的用户绑关联起来,所以需要采用自定义 ConnectionId,如:

public class YourUserIdProvider : IUserIdProvider
{
public virtual string GetUserId(HubConnectionContext connection)
{
// 你如何获取 UserId,可以通过 connection.User 获取 JWT 授权的用户
}
}

然后在 Startup.cs 中注册即可:

builder.Services.AddSingleton<IUserIdProvider, YourUserIdProvider>();

之后就可以通过自定义 UserId 发送消息:

Clients.User(userId).客户端方法(参数);

查看更多文档 https://docs.microsoft.com/zh-cn/aspnet/core/signalr/authn-and-authz?view=aspnetcore-6.0#use-claims-to-customize-identity-handling

24.10 分组管理

24.11 各个客户端连接 API

24.11.1 Javascript 客户端

24.11.2 Typescript 客户端

vue3.2+ 中使用

  1. 安装微软的 signalr typescript 客户端包,主要用于调用服务端方法,如( Hub 中的 SendMessage 方法):
npm i @microsoft/signalr @types/node
  1. 示例代码
import { HubConnectionBuilder } from "@microsoft/signalr";

<script setup lang="ts">
import { HubConnectionBuilder } from "@microsoft/signalr";
import { ref } from "vue";

const messages = ref('');
const reciveMessage = (msg: string) => {
console.log("msg", msg);
}

//初始化signalr HubConnection对象
const connection = new HubConnectionBuilder()
.withUrl("<你的signalr连接地址>")//https://localhost:7260/chatHub
.build();

//启动连接并发送消息测试
connection.start()
.then(() => connection.send("SendMessage", "Hello"));

//注册web端方法以供后端调用
connection.on("ReciveMessage", reciveMessage);

const sendMsg = async () => {
console.log(messages.value);
await connection.send("SendMessage", messages.value).catch(function (err) {
console.log(err);
});
}
</script>

参考文档

24.11.3 .NET 客户端

24.11.4 Java 客户端

24.12 常见例子

24.12.1 实现消息广播、推送

整理中...

24.12.2 实现聊天功能

整理中...

24.12.3 实现 你画我来猜

整理中...

24.13 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 SignalR 知识可查阅 SignalR 官方文档ASP.NET Core SignalR 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/singlefile/index.html b/handbook/build/docs/singlefile/index.html new file mode 100644 index 00000000000..001379cc996 --- /dev/null +++ b/handbook/build/docs/singlefile/index.html @@ -0,0 +1,17 @@ + + + + + +34.5. 单文件发布 | Furion + + + + + +
+

34.5. 单文件发布

版本说明

以下内容仅限 Furion 3.5.2 + 版本使用。

34.5.1 历史背景

.NET Core 3 起,微软就提供了单文件发布的技术支持,但实际上并不是 .NET 所有 CLR 都支持单文件发布,如 Microsoft.Extensions.DependencyModel 包本身不支持单文件发布,原因是内部使用了 Assembley.CodeBase

好巧不巧Furion 中招了,在过去两年中,Furion 依赖该包的 DependencyContext.Default 特性进行程序集扫描,所以单文件发布也就成了 Furion 不愿提起的痛!!!

终于,在 Furion v3.5.2+ 版本想出了新的解决方案,自此彻底解决了单文件发布的问题。

34.5.2 必要配置

Furion v3.5.2+ 版本之后,新增了 ISingleFilePublish 接口。

  • 编辑启动层 .csproj 文件,添加下列代码到 <PropertyGroup> 节点中
<PublishReadyToRunComposite>true</PublishReadyToRunComposite>
关于 ReadyToRun

如果发布时未打勾 ReadyToRun 选项,则无需配置上述代码。

  • Web 启动层 创建类型并实现该接口,如:
using System.Reflection;

namespace YourProject.Web.Entry;

/// <summary>
/// 解决单文件发布问题
/// </summary>
public class SingleFilePublish : ISingleFilePublish
{
/// <summary>
/// 解决单文件不能扫描的程序集
/// </summary>
/// <remarks>和 <see cref="IncludeAssemblyNames"/> 可同时配置</remarks>
/// <returns></returns>
public Assembly[] IncludeAssemblies()
{
// 需要 Furion 框架扫描哪些程序集就写上去即可
return Array.Empty<Assembly>();
}

/// <summary>
/// 解决单文件不能扫描的程序集名称
/// </summary>
/// <remarks>和 <see cref="IncludeAssemblies"/> 可同时配置</remarks>
/// <returns></returns>
public string[] IncludeAssemblyNames()
{
// 需要 Furion 框架扫描哪些程序集就写上去即可
return new[]
{
"YourProject.Application",
"YourProject.Core",
"YourProject.EntityFramework.Core",
"YourProject.Web.Core",
"Furion.Extras.ObjectMapper.Mapster" // 解决 Mapster 单文件失效问题,v3.5.3+版本后无需配置
};
}
}
配置说明

IncludeAssembliesIncludeAssemblyNames 的区别是前者是开发者直接返回 Assembley 集合,后者是直接返回名称,Furion 会自动加载程序集,可同时配置,也可以配置其中一个。

如果只配置启用一个,则另外一个返回 Array.Empty<Assembley>()Array.Empty<string>() 即可。

如果发布后出现 Mapster 不能映射问题,可将 Furion.Extras.ObjectMapper.Mapster 添加到 IncludeAssemblyNames 集合中即可。v3.5.3+ 版本后无需配置。

34.5.3 发布

小知识

如无需生成 .pdb 调试包可在生成中禁用即可。

34.5.4 自定义启动端口

默认单文件发布监听的是 https://localhost:5001,如果需要修改,可在 program.cs 中配置:

var builder = WebApplication.CreateBuilder(args).Inject();
builder.WebHost.UseUrls("https://*:8089");
var app = builder.Build();
app.Run();

这样就可以通过 https://localhost:8089 访问。

34.5.5 pm2 守护进程部署

34.5.5.1 运行弊端

正常情况下,将应用程序发布成单文件后,需点击 XXXXX.exe 进行启动,这时候程序自动打开终端(控制台),之后根据提示在浏览器上打开对应的地址即可。

但是这种方式有以下问题:

  • 必须保证终端/控制台一直运行
  • 终端/控制台有时候会出现假死的情况,导致应用程序无法访问
  • 无法实时监听应用程序资源使用情况(如 CPU,内存,日志等)
  • 无法映射端口启动
  • 集群变得复杂

34.5.5.2 pm2 守护进程部署

为了解决上述问题,推荐 NodeJS 一个非常强大的工具 pm2 https://pm2.keymetrics.io/,通过该工具可以解决上述的所有问题。

必要条件

  1. 系统必须安装 NodeJS 环境 https://nodejs.org/en/

相信大部分人电脑都已经安装。

  1. 通过 npmyarn 全局安装 pm2 工具

npm:

npm install pm2@latest -g

yarn:

yarn global add pm2
  1. 启动应用程序

使用 pm2 非常简单就可以启动守护进程应用程序。

pm2 start --name pms PMS.Web.Entry.exe
指定端口

如需指定端口,可使用下列命令:

pm2 start --name pms PMS.Web.Entry.exe -- --urls=https://localhost:8089

注意 -- 后面可以写完整的 dotnet 命令。

命令说明

pms.exe 为项目发布后的启动层名称,如果名称包含 空格,则使用双引号包裹,如 "p ms.exe"

--name 配置应用程序在 pm2 中的唯一标识。

start 后面跟着是 .exe 文件,在 linux/macos 下无需指定后缀名。

启动成功后即可通过浏览器访问指定端口,通常是 http://localhost:5000

PS C:\Users\bqrjsoft\Desktop\pms> pm2 start --name pms PMS.Web.Entry.exe
[PM2] Starting C:\Users\bqrjsoft\Desktop\pms\PMS.Web.Entry.exe in fork_mode (1 instance)
[PM2] Done.
┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
0 │ pms │ default │ N/A │ fork │ 41764 │ 0s │ 0 │ online │ 0% │ 85.0mb │ bqrjsoft │ disabled │
└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
PS C:\Users\bqrjsoft\Desktop\pms>

34.5.5.3 pm2 常见操作

  • 实时监听运行状态
pm2 monit
  • 显示运行日志
pm2 logs
  • 查看应用信息
pm2 info pms

注意,pms 为您配置的 --name 名称。

  • 随机启动
pm2 startup
pm2 save
Windows 下随机启动

可查阅 pm2-windows-startup

npm install pm2-windows-startup -g
pm2-startup install
pm2 save
  • 其他操作
// 重启应用
pm2 restart app_name

// 重载应用
pm2 reload app_name

// 停止应用
pm2 stop app_name

// 删除应用
pm2 delete app_name

更多 pm2 文档可查阅 https://pm2.keymetrics.io/docs/usage/quick-start/

34.5.6 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/source/index.html b/handbook/build/docs/source/index.html new file mode 100644 index 00000000000..bfe73a436cb --- /dev/null +++ b/handbook/build/docs/source/index.html @@ -0,0 +1,17 @@ + + + + + +1.3 示例架构说明 | Furion + + + + + +
+

1.3 示例架构说明

1.3.1 示例架构

源码仓库中的 samples 示例采用多层分层设计,主要设计是 自动抽象工厂DDD 领域驱动设计 相结合。

Furion 示例项目结构如下:

  • Furion:框架核心层
  • Furion.Application:业务应用层(业务代码主要编写层)
  • Furion.Core:核心层(实体,仓储,其他核心代码)
  • Furion.Database.Migrations:EFCore 架构迁移文件层
  • Furion.EntityFramework.Core:EF Core 配置层
  • Furion.Web.Core:Web 核心层(存放 Web 公共代码,如 过滤器、中间件、Web Helpers 等)
  • Furion.Web.Entry:Web 入口层/启动层

示例地址:https://gitee.com/dotnetchina/Furion/tree/v4/samples

1.3.2 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/specification-document/index.html b/handbook/build/docs/specification-document/index.html new file mode 100644 index 00000000000..ee5d50076d9 --- /dev/null +++ b/handbook/build/docs/specification-document/index.html @@ -0,0 +1,17 @@ + + + + + +6. 规范化接口文档 | Furion + + + + + +
+

6. 规范化接口文档

6.1 什么是接口文档

在现在移动为王、多端互辅、前端百花齐放的开放时代,不再是一人包揽式开发,大家各司其职,后端工程师负责接口开发,前端负责接口联调,也就是互联网现在流行的前后端分离架构。

所以就需要由前后端工程师共同定义接口,编写接口文档,之后大家按照这个接口文档进行开发、维护及开放给第三方。

6.2 为什么要写接口文档

  • 能够让前端开发与后台开发人员更好的配合,提高工作效率
  • 项目迭代或者项目人员更迭时,方便后期人员查看和维护
  • 方便测试人员进行接口测试

6.3 为什么需要规范化文档

由于每个公司后端人员技术参差不齐,技术文档能力也不例外,导致接口定义及文档五花八门,不同项目或不同公司对接极其困难,而且体验糟糕。所以,无规矩不成方圆,为了开发人员间更好的配合,迫切需要整理出一套规范。

通常接口规范分为六个部分:

6.3.1 协议规范

为了确保不同系统/模块间的数据交互,需要事先约定好通讯协议,如:TCP、HTTP、HTTPS 协议。为了确保数据交互安全,建议使用 HTTPS 协议

6.3.2 接口路径规范

作为接口路径,为了方便清晰的区分来自不同的系统,可以采用不同系统/模块名作为接口路径前缀,如:支付模块:/pay/xxx,订单模块:/order/xxx

6.3.3 版本控制规范

为了便于后期接口的升级和维护,建议在接口路径中加入版本号,便于管理,实现接口多版本的可维护性。如:接口路径中添加类似"v1"、"v2"等版本号

6.3.4 接口命名规范

和 C# 命名规范一样,好的、统一的接口命名规范,不仅可以增强其可读性,而且还会减少很多不必要的口头/书面上的解释。可使用"驼峰命名法"按照实现接口的业务类型、业务场景等命名,有必要时可采取多级目录命名,但目录不宜过长,两级目录较为适宜

  • 常见命名方式:
    • 接口名称动词前/后缀化: 接口名称以接口数据操作的动词为前/后缀,常见动词有:Add、Delete、Update、Query、Get、Send、Save、Detail、List等,如:新建用户 AddUser、查询订单详情 QueryOrderDetail
    • 接口名称动词 + 请求方式:接口路径中包含具体接口名称的名词,接口数据操作动作以 HTTP 请求方式来区分。常用的 HTTP 请求方式有:
      • GET:从服务器取出资源(一项或多项)
      • POST:在服务器新建一个资源
      • PUT:在服务器更新资源(客户端提供改变后的完整资源)
      • PATCH:在服务器更新资源(客户端提供改变的属性)
      • DELETE:从服务器删除资源

6.3.5 请求参数规范

  • 请求方式:按照 GET、POST、PUT 等含义定义,避免出现不一致现象,对人造成误解、歧义
    • 请求头:请求头根据项目需求添加配置参数。如:请求数据格式,accept=application/json 等。如有需要,请求头可根据项目需求要求传入用户 token、唯一验签码等加密数据
    • 请求参数/请求体: 请求参数字段,尽可能与数据库表字段、对象属性名等保持一致,因为保持一致是最省事,最舒服的一件事

6.3.6 返回数据规范

统一规范返回数据的格式,对己对彼都有好处,此处以 json 格式为例。返回数据应包含:返回状态码、返回状态信息、具体数据返回数据中的状态码、状态信息,常指具体的业务状态,不建议和 HTTP 状态码混在一起。HTTP 状态,是用来体现 HTTP 链路状态情况,如:404-Not Found。HTTP 状态码和 json 结果中的状态码,并存尚可,用于体现不同维度的状态。

6.4 什么是 Swagger

相信无论是前端还是后端开发,都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新。

其实无论是前端调用后端,还是后端调用后端,都期望有一个好的接口文档。但是这个接口文档对于程序员来说,就跟注释一样,经常会抱怨别人写的代码没有写注释,然而自己写起代码起来,最讨厌的,也是写注释。所以仅仅只通过强制来规范大家是不够的,随着时间推移,版本迭代,接口文档往往很容易就跟不上代码了。

发现了痛点就要去找解决方案。解决方案用的人多了,就成了标准的规范,这就是 Swagger 的由来

通过这套规范,你只需要按照它的规范去定义接口及接口相关的信息。再通过 Swagger 衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,生成多种语言的客户端和服务端的代码,以及在线接口调试页面等等。

这样,如果按照新的开发模式,在开发新版本或者迭代版本的时候,只需要更新 Swagger 描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。

所以,Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful 风格的 Web 服务。

总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法、参数和模型紧密集成到服务器端的代码,允许 API 来始终保持同步。Swagger 让部署管理和使用功能强大的 API 从未如此简单。

6.5 Swagger 使用

Furion 框架提供了非常方便且灵活的 Swagger 配置,无需增加额外学习成本。

6.5.1 注册服务

备注

.UseInject() 已经包含了 .UseSpecificationDocuments() 注册,无需再次注册。

Furion.Web.Core\Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace Furion.Web.Core
{
[AppStartup(800)]
public sealed class FurWebCoreStartup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSpecificationDocuments();
services.AddControllers();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Other Codes

app.UseSpecificationDocuments();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
小知识

services.AddSpecificationDocuments() 通常和 .AddDynamicApiControllers() 成对出现。

6.5.2 默认地址

Furion 框架中,默认 规范化文档 地址为 /api 目录,支持自定义配置

如下图所示:

可以通过两种方式配置:

  • app.UseInject("路由") 方式,如
app.UseInject("testapi"); // 那么  /testapi 就是规范化地址
  • 配置文件配置
{
"SpecificationDocumentSettings": {
"RoutePrefix": "testapi"
}
}

配置文件优先级大于 UseInject() 方式

6.5.3 默认分组

Furion 框架中默认分组名为 Default支持自定义配置

{
"SpecificationDocumentSettings": {
"DefaultGroupName": "MyGroup"
}
}

6.5.4 文档注释

规范化文档默认扫描 Furion.ApplicationFurion.Web.CoreFurion.Web.Entry 三个程序集.xml 注释文件,支持自定义配置

只支持 /// 标识的注释语法,如:类、方法、属性、参数、返回值、验证特性

using Furion.DynamicApiController;

namespace Furion.Application
{
/// <summary>
/// 类注释
/// </summary>
public class FurionAppService : IDynamicApiController
{
/// <summary>
/// 方法注释
/// </summary>
/// <returns></returns>
public string Get()
{
return nameof(Furion);
}

/// <summary>
/// 带 ID 参数的方法注释
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public int Get(int id)
{
return id;
}
}
}

如下图所示:

小提示

如果文档注释没有显示,请检查项目 属性->生成->输出 中 XML 文档是否配置输出路径。注意:只有不带路径的 【项目名称.xml】 才会自动加载。

特别说明

Debug 模式下和 Release 模式下的注释文件是不通用的,所以导致很多开发者发布到服务器上发现没有显示注释。我们只需要在 Visual Studio 中切换 Debug 模式为 Release,然后重新配置一次即可。

这样不管是 Debug 还是 Release 模式都会显示注释了。

6.5.5 多分组支持

多分组是一个系统中必备功能,我们可以将系统划分为多个模块,每个模块都独立的 api 配置。在 Furion 框架中,实现多分组非常简单。如:

using Furion.DynamicApiController;

namespace Furion.Application
{
[ApiDescriptionSettings("Group1")]
public class FurionAppService : IDynamicApiController
{
/// <summary>
/// 随父类 Group1 分组
/// </summary>
/// <returns></returns>
public string Post()
{
return nameof(Furion);
}

/// <summary>
/// 在 Group1、Group3 都有我
/// </summary>
/// <returns></returns>
[ApiDescriptionSettings("Group1", "Group3")]
public string Get()
{
return nameof(Furion);
}

/// <summary>
/// 我只在 Group2 出现
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[ApiDescriptionSettings("Group2")]
public int Get(int id)
{
return id;
}
}
}

如下图所示:

6.5.6 多分组排序

通过分组名称添加 @整数 进行排序

using Furion.DynamicApiController;

namespace Furion.Application
{
[ApiDescriptionSettings("Group1@1")]
public class FurionAppService : IDynamicApiController
{
public string Post()
{
return nameof(Furion);
}

[ApiDescriptionSettings("Group1", "Group3")]
public string Get()
{
return nameof(Furion);
}

[ApiDescriptionSettings("Group@2")]
public int Get(int id)
{
return id;
}
}
}

可以通过在分组名后面添加 @整数 进行排序,整数 越大排前面。如果分组名称多次指定且多次指定了 @整数 ,则自动取该分组最大的整数进行排序。

如下图所示:

排序说明

分组默认排序 Order0。如果同时配置了 @整数appsettings.json 配置文件,那么优先采用 appsettings.json 中的 Order

6.5.7 多分组信息配置

Furion 框架提供了可通过 appsetting.json 配置分组信息:

Furion.Web.Entry/appsettings.json
{
"SpecificationDocumentSettings": {
"GroupOpenApiInfos": [
{
"Group": "Group1",
"Title": "分组标题",
"Description": "这里是分组描述",
"Version": "版本号",
"TermsOfService": "https://furion.icu",
"Contact": {
"Name": "百小僧",
"Url": "https://gitee.com/monksoul",
"Email": "monksoul@outlook.com"
},
"License": {
"Name": "MIT",
"Url": "https://gitee.com/dotnetchina/Furion/blob/alpha/LICENSE"
}
}
]
}
}

如下图所示:

6.5.8 组中组(标签)

Tag 配置主要用于配置 Swagger 标签分组信息及合并标签。也就是 组中组:

未贴标签之前

using Furion.DynamicApiController;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}

public int Get(int id)
{
return id;
}
}

public class TestAppService : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}

public int Get(int id)
{
return id;
}
}
}

贴标签之后

using Furion.DynamicApiController;

namespace Furion.Application
{
[ApiDescriptionSettings(Tag = "分组一")]
public class FurionAppService : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}

public int Get(int id)
{
return id;
}
}

[ApiDescriptionSettings(Tag = "分组二")]
public class TestAppService : IDynamicApiController
{
public string Get()
{
return nameof(Furion);
}

public int Get(int id)
{
return id;
}
}
}

如下图所示:

小知识

如果 Tag 名字一样,则会自动合并,否则只是命名。

6.5.9 默认展开所有文档

Furion.Web.Entry/appsettings.json
{
"SpecificationDocumentSettings": {
"DocExpansionState": "Full"
}
}

如下图所示:

DocExpansionState 配置说明:

  • List:列表式(展开子类),默认值
  • Full:完全展开
  • None:列表式(不展开子类)

6.5.10 配置文档标题

Furion.Web.Entry/appsettings.json
{
"SpecificationDocumentSettings": {
"DocumentTitle": "我是自定义标题"
}
}

如下图所示:

6.5.11 授权控制

新版本 Furion 已经默认启用了 Bearer Token 授权配置,无需手动配置,如需手动配置,可手动添加以下类似配置:

Furion.Web.Entry/appsettings.json
{
"SpecificationDocumentSettings": {
"EnableAuthorized": true,

"SecurityDefinitions": [
{
"Id": "Bearer",
"Type": "Http",
"Name": "Authorization",
"Description": "JWT Authorization header using the Bearer scheme.",
"BearerFormat": "JWT",
"Scheme": "bearer",
"In": "Header",

"Requirement": {
"Scheme": {
"Reference": {
"Id": "Bearer",
"Type": "SecurityScheme"
},
"Accesses": []
}
}
}
]
}
}

6.5.12 在线测试

如下图所示:

6.5.13 性能监视 MiniProfiler

规范化文档默认集成了 MiniProfiler 第三方性能组件,通过该组件可以方便查看请求性能、异常堆栈、数据库操作等信息。默认在 Swagger 首页左上角显示。

如下图所示:

小提示

也可以通过 appsetting.jsonAppSettings:InjectMiniProfiler 设为 false 关闭。

6.5.14 定义接口输出类型

using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;

namespace Furion.Application
{
public class FurionAppService : IDynamicApiController
{
[ProducesResponseType(201, Type = typeof(TestDto))]
[ProducesResponseType(400)]
public string Get()
{
return nameof(Furion);
}
}
}

如下图所示:

6.5.15 隐藏特定分组

Furion 新版本提供了隐藏分组的 Visible 配置,设置为 false 之后该分组将不显示在规范化文档中,如:

appsetting.json
{
"SpecificationDocumentSettings": {
"GroupOpenApiInfos": [
{
"Group": "Group1",
"Visible": false
}
]
}
}

6.5.16 中文乱码问题

默认情况下,.json 文件并未采用 utf-8 编码,所以如果配置中文分组信息就会出现乱码情况,这时候,只需要修改 .json 文件编码为 utf-8 即可。

6.5.17 生产环境中关闭 Swagger

如果不需要线上环境开启 Swagger 功能,只需要在 appsetting.json 配置即可:

{
"AppSettings": {
"InjectSpecificationDocument": false
}
}

6.5.18 设置 Example Value 默认值

Swagger 会自动根据对象类型输入参数添加 Example Value 默认值,但是该默认值通常是对象属性的类型字符串或缺省值,如果我们需要自定义这些默认值,只需要添加 /// <example>默认值</example> 注释即可。

如:

/// <summary>
/// 年龄
/// </summary>
/// <example>13</example>
[Required, Range(10, 110)]
public int Age { get; set; }

如下图所示:

更多类型默认值设置示例:

  • bool 类型:/// <example>true</example>
  • string 类型:/// <example>foobar</example>
  • number 类型:/// <example>123</example>
  • null 类型: /// <example>null</example>
  • array 类型:/// <example>[ 1, 2, 3 ]</example>
关于 object 类型输入参数

默认情况下,Example Value 不会显示 object 类型的对象属性,因为 Swagger 认为这是不合理的定义。如果需要强制显示,只需要添加 /// <example>"object"</example> 注释即可。

6.5.19 自定义 Swagger 配置

Furion 框架除了内置了不少配置以外,还提供了直接配置 Swagger Api 的参数,如:

public void ConfigureServices(IServiceCollection services)
{
services.AddInject(options =>
{
options.ConfigureSwaggerGen(gen =>
{
// ....
});
});
}
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 如果使用 Furion 4.4.8+ 版本可以 app.UseInject(options => {}) 了,无需指定 configure:
app.UseInject(configure: options =>
{
options.ConfigureSwagger(swg =>
{
// ....
});

options.ConfigureSwaggerUI(ui =>
{
// ....
});
});
}

6.5.20 配置 SwaggerSchemes

Furion 框架默认只显示名称,如果需要自定义显示规则,只需要添加配置即可。

services.AddControllersWithViews()
.AddInject(options =>
{
options.ConfigureSwaggerGen(gen =>
{
gen.CustomSchemaIds(x => x.FullName);
});
});

6.5.21 自定义 swagger.json 路由模板

默认情况下,Furion 框架会生成统一的分组模板,如:swagger/{documentName}/swagger.json{documentName} 会在运行时替换为分组名,如需自定义,配置 RouteTemplate 即可:

appsetting.json
{
"SpecificationDocumentSettings": {
"RouteTemplate": "myapp/{documentName}/xxxx.json"
}
}

6.5.22 关于 application/x-www-form-urlencoded 请求

默认情况下,Swagger 并未添加 application/x-www-form-urlencoded 支持,如需启用该配置,只需在方法顶部贴 [Consumes] 特性即可,如:

[Consumes("application/x-www-form-urlencoded")]
public async Task<IActionResult> Test([FromForm] TestRequest testRequest)
{
// ....
}

public class TestRequest
{
public string TestValue { get; set; }
}
特别注意

参数必须贴 [FromForm] 特性。另外请求时将参数按 URL 地址拼接并放在 Body 中请求。

6.5.23 Swagger 出现 CORS 问题解决

如果 Swagger 出现以下错误,如图:

则需要添加以下配置:

{
"SpecificationDocumentSettings": {
"HideServers": true
}
}

6.5.24 Swagger 出现默认 xml 参数问题解决

产生此原因有两个必要条件:

  1. 使用了 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包并添加了 AddNewtonsoftJson() 注册。
  2. .AddNewtonsoftJson() 写在了 .AddInjectWithUnifyResult() 后面。

所以解决方法是,先注册 .AddNewtonsoftJson() 再注册规范化结果,如:

services.AddControllers()
.AddNewtonsoftJson()
.AddInjectWithUnifyResult();

6.5.25 Swagger 多语言支持

Furion 2.9.0 + 版本已经支持了 Swagger 文档地址 ?culture=en-US 参数多语言转发功能了,也就是 Swagger 地址带 ?culture= 参数将自动添加到每一个请求的 api 地址中。

6.5.26 自定义逻辑控制 Swagger 每一个 api 可见性

有时候我们需要自定义 Swagger 接口可见性,比如根据权限,不同用户类型,各种逻辑控制,如:

// 也可以用 .AddInjectWithUnifyResult
services.AddInject(options =>
{
options.ConfigureSwaggerGen(gen =>
{
gen.DocInclusionPredicate((currentGroup, apiDescription) =>
{
// Furion 内部检查,必须放第一行
var isShow = SpecificationDocumentBuilder.CheckApiDescriptionInCurrentGroup(currentGroup, apiDescription);

// 获取当前方法
_ = apiDescription.TryGetMethodInfo(out var method);

// 有了方法,这里做你想做的事情,isShow 设置 true 可见,设置 false 不可见

return isShow;
});
});
});

6.5.27 配置 MVC 控制器支持规范化处理

{
"UnifyResultSettings": {
"SupportMvcController": true
}
}

6.5.28 Swagger 刷新记住授权状态

默认情况下,Swagger 刷新浏览器后,授权状态将被重置,也就是需要重新登录,通过下面代码在 用户登录成功后 调用即可:

// ....验证用户名/密码....

_httpContextAccessor.HttpContext.SigninToSwagger("传入 token");

6.5.29 带登录的 Swagger 文档

版本说明

以下内容仅限 Furion v3.3.3+ 版本使用。

默认情况下,Swagger 是任何人都可以访问的,这样也暴露出一些安全问题,所以在该版本之后添加了登录功能,只需要配置 SpecificationDocumentSettingsLoginInfo 即可:

{
"SpecificationDocumentSettings": {
"LoginInfo": {
"Enabled": true,
"CheckUrl": "/Home/CheckUrl",
"SubmitUrl": "/Home/SubmitUrl",
"UserName": "admin",
"Password": "admin"
}
}
}

配置说明

  • LoginInfo:配置 Swagger 是否需要登录才能访问,SpecificationLoginInfo 类型,默认 null仅在 Furion v3.3.3+` 有效
    • Enabled:是否启用登录授权,默认 false
    • CheckUrl:检查登录状态的 Url 地址,该地址必须是 POST 请求,已授权返回 200,否则返回 401,支持相对地址,以 / 开头
    • SubmitUrl:提交登录的 Url 地址,该地址必须是 POST 请求且只有一个 SpecificationAuth 类型参数,成功登录返回 200,否则返回 401,支持相对地址,以 / 开头

配置示例

using Furion.SpecificationDocument;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel.DataAnnotations;

namespace Furion.Web.Entry.Controllers;

public class HomeController : Controller
{
[HttpPost, AllowAnonymous, NonUnify]
public int CheckUrl()
{
return 401;
}

[HttpPost, AllowAnonymous, NonUnify]
public int SubmitUrl([FromForm] SpecificationAuth auth)
{
// 读取配置信息
var userName = App.Configuration["SpecificationDocumentSettings:LoginInfo:UserName"];
var password = App.Configuration["SpecificationDocumentSettings:LoginInfo:Password"];

if (auth.UserName == userName && auth.Password == password)
{
return 200;
}
else
{
return 401;
}
}
}

6.5.30 inheritdoc 实现注释继承

版本说明

以下内容仅限 Furion v3.3.3+ 版本使用。

在过去我们在接口定义的时候编写了完整的成员注释,然后在派生成员中又要重复写一次,实际上做了很大无用功,现在 Furion 支持了注释继承了,同时 Swagger 中也能正确显示。

using Furion.DynamicApiController;

namespace Furion.Application
{
/// <inheritdoc cref="ITestInheritdoc" />
public class TestInheritdoc : ITestInheritdoc, IDynamicApiController
{
/// <inheritdoc cref="ITestInheritdoc.GetName"/>
public string GetName()
{
return "Furion";
}

/// <inheritdoc />
public string GetVersion()
{
return "3.3.3";
}
}

/// <summary>
/// 测试注释继承
/// </summary>
public interface ITestInheritdoc
{
/// <summary>
/// 获取名称
/// </summary>
/// <returns></returns>
string GetName();

/// <summary>
/// 获取版本
/// </summary>
/// <returns></returns>
string GetVersion();
}
}

显示效果:

注意事项

<inheritdoc /> 不指定 cref 仅限成员可用且所在的类型必须指定 <inheritdoc cref="" />,这样才能自动识别。

6.5.31 启用 All Groups 分组功能

版本说明

以下内容仅限 Furion v3.3.4+ 版本使用。

有时候我们为了更好的对接口进行归类,配置了 Swagger 多个分组的功能,但这样也对生成客户端请求代码造成了困扰,所以添加了新的配置:

{
"SpecificationDocumentSettings": {
"EnableAllGroups": true
}
}

6.5.32 接口过时控制

版本说明

以下内容仅限 Furion v3.3.5+ 版本使用。

有时候我们某个接口已经过时,提示尽早调用最新接口,只需要在方法上面贴 [Obsolete] 即可,如:

[Obsolete("GetName() 已经过时,请调用 GetFrameworkName() 替代")]
public string GetName()
{
return nameof(Furion);
}

[Obsolete]
public string Other()
{
// ...
}

6.5.33 单一接口更多描述

版本说明

以下内容仅限 Furion v3.3.5+ 版本使用。

在该版本新增了 [ApiDescriptionSettings]Description 属性,支持定义更多描述,如:

[ApiDescriptionSettings(Description = "我是一段描述,显示更多内容 <button>我是按钮</button>")]
public string add()
{
//....
}

6.5.34 Swagger 异常/不能显示/错误处理

有时候可能因为错误的配置导致 Swagger 不能显示,这时候只需要复制提示的错误 .json 链接地址到浏览器中访问即可,如:

https://localhost:你的端口/swagger/Default/swagger.json

后面的 /swagger/Default/swagger.json 就是 Swagger 错误提示的 .json 链接地址。

这样就可以看到详细的错误了。

6.5.35 自定义 SwaggerSchemaId

版本说明

以下内容仅限 Furion v3.6.4+ 版本使用。

有时候,不同程序集会定义相同的类型名称 Name,这样就会导致生成 SwaggerSchemaId 出现冲突,这时只需要在类型上贴 [SchemaId] 特性即可,如:

using Furion.SpecificationDocument;

[SchemaId("Other_")]
public class PersonDto
{
// ...
}
  • SchemaIdAttribute 配置选项:
    • SchemaId:自定义 SchemaId,字符串类型,只能是 字母,数字,下划线 组合
    • Replace:是否完全替换,bool 类型,默认 false,默认是作为前缀拼接,如上面的 PersonDto 会生成 Other_PersonDto,如果设置为 true,则直接使用 Test_

6.5.36 自定义 SwaggerOperationId

版本说明

以下内容仅限 Furion 4.1.7+ 版本使用。

通过我们根据 swagger.json 生成前端代码时,Swagger 会自动根据路由地址生成调用的 api 名称,但这样的名称往往不易读,这时候可自定义 [OperationId] 来配置生成的前端名称。

using Furion.SpecificationDocument;

public class PersonDto
{
[OperationId("MyClientMethodName")]
public string TestMethod()
{
// ...
}
}

6.5.37 Swagger 接口文档支持完整的 Markdown

Furion 最新版中,支持了完整的 Markdown 注册,如:

/// <summary>
/// 测试 Markdown
/// </summary>
/// <remarks>
/// # 先知 / Furion ([探索版](https://gitee.com/dotnetchina/Furion/tree/experimental/))
///
/// 一个应用程序框架,您可以将它集成到任何.NET/C# 应用程序中。
///
/// An application framework that you can integrate into any.NET/C# application.
///
/// ## 安装 / Installation
///
/// - [Package Manager] (https://www.nuget.org/packages/Furion)
///
/// ```powershell
/// Install-Package Furion
/// ```
///
/// - [.NET CLI] (https://www.nuget.org/packages/Furion)
///
/// ```powershell
/// dotnet add package Furion
/// ```
///
/// ## 例子 / Examples
///
/// 我们在[主页](https://furion.baiqian.ltd)上有不少例子,这是让您入门的第一个:
///
/// We have several examples [on the website] (https://furion.baiqian.ltd). Here is the first one to get you started:
///
/// ```cs
/// Serve.Run();
///
/// [DynamicApiController]
/// public class HelloService
/// {
/// public string Say()
/// {
/// return "Hello, Furion";
/// }
/// }
/// ```
///
/// 打开浏览器访问 `https://localhost:5001`。
///
/// Open browser access `https://localhost:5001`.
///
/// ## 文档 / Documentation
///
/// 您可以在[主页] (https://furion.baiqian.ltd)或[备份主页](https://furion.icu)找到 Furion 文档。
///
/// You can find the Furion documentation[on the website](https://furion.baiqian.ltd) or [on the backup website](https://furion.icu).
///
/// ## 贡献 / Contributing
///
/// 该存储库的主要目的是继续发展 Furion 核心,使其更快、更易于使用。 Furion 的开发在[Gitee](https://gitee.com/dotnetchina/Furion) 上公开进行,我们感谢社区贡献错误修复和改进。
///
/// 阅读[贡献指南] (https://furion.baiqian.ltd/docs/contribute)内容,了解如何参与改进 Furion。
///
/// The main purpose of this repository is to continue evolving Furion core, making it faster and easier to use.Development of Furion happens in the open on[Gitee] (https://gitee.com/dotnetchina/Furion), and we are grateful to the community for contributing bugfixes and improvements.
///
/// Read[contribution documents] (https://furion.baiqian.ltd/docs/contribute) to learn how you can take part in improving Furion.
///
/// ## 许可证 / License
///
/// Furion 采用[MIT](https://gitee.com/dotnetchina/Furion/blob/v4/LICENSE) 开源许可证。
///
/// Furion uses the[MIT] (https://gitee.com/dotnetchina/Furion/blob/v4/LICENSE) open source license.
///
/// ```
/// Copyright(c) 2020-2022 百小僧, Baiqian Co., Ltd.
/// Furion is licensed under Mulan PSL v2.
/// You can use this software according to the terms andconditions of the Mulan PSL v2.
/// You may obtain a copy of Mulan PSL v2 at:
/// https://gitee.com/dotnetchina/Furion/blob/v4/LICENSE
/// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUTWARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
/// See the Mulan PSL v2 for more details.
/// ```
///
/// </remarks>
/// <returns></returns>
public string Hello()
{
return "Furion";
}

6.5.38 第三方 UI 集成,如 Knife4jUI

Furion 框架中,集成第三方 SwaggerUI 非常容易,比如集成 IGeekFan.AspNetCore.Knife4jUI

安装包

只需要在 YourPoject.Web.Core 层安装 IGeekFan.AspNetCore.Knife4jUI 即可。

Knife4jUI 独立版本配置

var routePrefix = "api";    // 定义 swagger 路由地址,如果是跟目录,设置 string.Empty 即可

app.UseKnife4UI(options =>
{
options.RoutePrefix = routePrefix; // 配置 Knife4UI 路由地址
foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups())
{
options.SwaggerEndpoint("/" + groupInfo.RouteTemplate, groupInfo.Title);
}
});

app.UseInject(routePrefix); // 配置 Furion 路由地址

Knife4jUISwagger 共存版本配置

app.UseKnife4UI(options =>
{
options.RoutePrefix = "newapi"; // 配置 Knife4UI 路由地址,现在是 /newapi
foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups())
{
options.SwaggerEndpoint("/" + groupInfo.RouteTemplate, groupInfo.Title);
}
});

app.UseInject(); // Furion 默认 api 地址为 /api

如需实现登录之后自动将 token 添加到头部可在登录接口 AfterScript 执行以下代码:

ke.global.setAllHeader(
"Authorization",
"Bearer " + ke.response.headers["access-token"]
);

6.6 SpecificationDocumentSettings 配置

除了上述例子外,Furion 提供了一些配置选项,如:

  • DocumentTitle:文档标题,string,默认 Specification Api Document
  • DefaultGroupName:默认分组名,string,默认 Default
  • EnableAuthorized:是否启用权限控制,bool,默认 true
  • FormatAsV2:采用 Swagger 2.0 版本,bool,默认 false 已弃用
  • RoutePrefix:规范化文档地址,string,默认 api如果希望在首页,改为空字符串即可
  • DocExpansionState:文档显示方式,DocExpansion,默认 List,取值:
    • List:列表式(展开子类),默认值
    • Full:完全展开
    • None:列表式(不展开子类)
  • XmlComments:程序集注释描述文件名(可带 .xmlstring,默认 Furion.Application, Furion.Web.Entry, Furion.Web.Core
  • GroupOpenApiInfos:分组信息配置,SpecificationOpenApiInfo[],默认 { 'Group': 'Default'}
  • SecurityDefinitions:安全策略定义配置,SpecificationOpenApiSecurityScheme[],默认 []
  • Servers:配置 Server 下拉列表,OpenApiServer[] 类型,默认 [],如:{Servers:[ { Url:"地址", Description:"描述"} ]}
  • HideServers:是否隐藏 Server 下拉列表,bool 类型,默认 true
  • RouteTemplate:配置文档 swagger.json 路由模板,默认模板:swagger/{documentName}/swagger.json, {documentName} 代表分组名,必须保留原样
  • PackagesGroups:配置模块化内置分组名称,string[] 类型,默认 []
  • EnableEnumSchemaFilter:启用枚举 Schema 筛选器,bool 类型,默认 true
  • EnableTagsOrderDocumentFilter:启用标签排序筛选器,bool 类型,默认 true
  • ServerDir:配置 IIS 添加 Application 部署名,string 类型,默认空,仅在 Furion v3.2.0+` 有效
  • LoginInfo:配置 Swagger 是否需要登录才能访问,SpecificationLoginInfo 类型,默认 null仅在 Furion v3.3.3+` 有效
    • Enabled:是否启用登录授权,默认 false
    • CheckUrl:检查登录状态的 Url 地址,该地址必须是 POST 请求,已授权返回 200,否则返回 401
    • SubmitUrl:提交登录的 Url 地址,该地址必须是 POST 请求且只有一个 SpecificationAuth 类型参数,成功登录返回 200,否则返回 401,支持相对地址,以 / 开头
  • EnableAllGroups:启用 Swagger 总分组功能,自动将所有分组的接口合并到 All Groups 中,bool 类型,默认 false仅在 Furion v3.3.4+` 有效

另外 SpecificationOpenApiInfo 内置配置如下:

  • Group:分组唯一标识,string 类型,必填
  • Order:分组排序,int 类型,数字越大排前面,默认 0
  • Visible:配置分组是否可见,bool 类型,默认 true
  • Title:配置分组标题,string 类型
  • Description:配置分组描述,string 类型
  • Version:配置分组版本,默认 1.0
  • TermsOfService:配置相关链接地址,Uri 类型
  • Contact:配置联系方式,OpenApiContact 类型
  • License:配置协议,OpenApiLicense 类型

配置示例:

{
"SpecificationDocumentSettings": {
"GroupOpenApiInfos": [
{
"Group": "Group1",
"Title": "分组标题",
"Description": "这里是分组描述",
"Version": "版本号",
"TermsOfService": "https://furion.icu",
"Contact": {
"Name": "百小僧",
"Url": "https://gitee.com/monksoul",
"Email": "monksoul@outlook.com"
},
"License": {
"Name": "MIT",
"Url": "https://gitee.com/dotnetchina/Furion/blob/alpha/LICENSE"
}
}
]
}
}

6.7 统一返回值模型/规范化结果/API 返回值

Furion 框架提供 规范化结果 功能,可以通过实现 IUnifyResultProvider 提供器实现统一规范化返回值定制,如:

  • 定义结果包装类型
// 必须是泛型类型
public class YourRESTfulResult<T>
{
/// <summary>
/// 状态码
/// </summary>
public int? StatusCode { get; set; }

/// <summary>
/// 数据
/// </summary>
public T Data { get; set; }

/// <summary>
/// 执行成功
/// </summary>
public bool Succeeded { get; set; }

/// <summary>
/// 错误信息
/// </summary>
public object Errors { get; set; }

/// <summary>
/// 附加数据
/// </summary>
public object Extras { get; set; }

/// <summary>
/// 时间戳
/// </summary>
public long Timestamp { get; set; }
}
  • 定义 IUnifyResultProvider 实现类,并贴特性 [UnifyModel(typeof(YourRESTfulResult<>))]
using Furion.DataValidation;
using Furion.DependencyInjection;
using Furion.UnifyResult.Internal;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Threading.Tasks;

namespace YourProject.UnifyResult
{
/// <summary>
/// RESTful 风格返回值
/// </summary>
[UnifyModel(typeof(YourRESTfulResult<>))]
public class YourRESTfulResultProvider : IUnifyResultProvider
{
/// <summary>
/// 异常返回值
/// </summary>
/// <param name="context"></param>
/// <param name="metadata"></param>
/// <returns></returns>
public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata)
{
return new JsonResult(YourRESTfulResult(metadata.StatusCode, data: metadata.Data, errors: metadata.Errors)
, UnifyContext.GetSerializerSettings(context)); // 当前行仅限 Furion 4.6.6+ 使用
}

/// <summary>
/// 成功返回值
/// </summary>
/// <param name="context"></param>
/// <param name="data"></param>
/// <returns></returns>
public IActionResult OnSucceeded(ActionExecutedContext context, object data)
{
return new JsonResult(YourRESTfulResult(StatusCodes.Status200OK, true, data)
, UnifyContext.GetSerializerSettings(context)); // 当前行仅限 Furion 4.6.6+ 使用
}

/// <summary>
/// 验证失败返回值
/// </summary>
/// <param name="context"></param>
/// <param name="metadata"></param>
/// <returns></returns>
public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata)
{
return new JsonResult(YourRESTfulResult(metadata.StatusCode ?? StatusCodes.Status400BadRequest, data: metadata.Data, errors: metadata.ValidationResult)
, UnifyContext.GetSerializerSettings(context)); // 当前行仅限 Furion 4.6.6+ 使用
}

/// <summary>
/// 特定状态码返回值
/// </summary>
/// <param name="context"></param>
/// <param name="statusCode"></param>
/// <param name="unifyResultSettings"></param>
/// <returns></returns>
public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings)
{
// 设置响应状态码
UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings);

switch (statusCode)
{
// 处理 401 状态码
case StatusCodes.Status401Unauthorized:
await context.Response.WriteAsJsonAsync(YourRESTfulResult(statusCode, errors: "401 Unauthorized")
, App.GetOptions<JsonOptions>()?.JsonSerializerOptions);
break;
// 处理 403 状态码
case StatusCodes.Status403Forbidden:
await context.Response.WriteAsJsonAsync(YourRESTfulResult(statusCode, errors: "403 Forbidden")
, App.GetOptions<JsonOptions>()?.JsonSerializerOptions);
break;
default: break;
}
}

/// <summary>
/// 返回 RESTful 风格结果集
/// </summary>
/// <param name="statusCode"></param>
/// <param name="succeeded"></param>
/// <param name="data"></param>
/// <param name="errors"></param>
/// <returns></returns>
private static YourRESTfulResult<object> YourRESTfulResult(int statusCode, bool succeeded = default, object data = default, object errors = default)
{
return new YourRESTfulResult<object>
{
StatusCode = statusCode,
Succeeded = succeeded,
Data = data,
Errors = errors,
Extras = UnifyContext.Take(),
Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
};
}
}
}

之后在 Startup.cs 中注册即可:

services.AddControllers()
.AddInjectWithUnifyResult<YourRESTfulResultProvider>();
特别注意

默认情况下,规范化结果不会对 401403404 状态码进行规范化处理,如需启动该状态码处理,只需在 Startup.cs 中的 Configure 中启用接口:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// 添加规范化结果状态码,需要在这里注册
app.UseUnifyResultStatusCodes();
// 其他注册...
}

6.7.1 排除规范化处理

有些时候,我们某些接口不需要进行规范化处理,这时,我们只需要帖 [NonUnify] 特性即可。

6.7.2 规范化结果添加额外数据

默认的规范化结果中包含 extras 属性,可以配置额外数据返回到客户端:

UnifyContext.Fill(new { Message = "操作成功" });

6.7.3 自定义特别接口规范化结果

有些时候,我们特定接口需返回特定的接口类型,无需规范化处理,这时候我们只需要贴 [UnifyResult(typeof(结果类))][ProducesResponseType(typeof(结果类),200)],如:

[UnifyResult(typeof(Person))]
public Person GetPerson(int id)
{
// ...
}

6.8 支持多套规范化配置

版本说明

以下内容仅限 Furion 4.4.4 + 版本使用。

在一些情况下,我们可能需要针对特定的控制器(动态 WebAPI)或特定的方法使用不同的规范化处理机制,这时就需要多套规范化处理提供器,如:

  1. 定义规范化处理提供程序
[UnifyModel(typeof(MyResult<>))]
public class SpeciallyResultProvider : IUnifyResultProvider
{
public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata)
{
// 参考上面的规范化处理写法
}

public IActionResult OnSucceeded(ActionExecutedContext context, object data)
{
// 参考上面的规范化处理写法
}

public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata)
{
// 参考上面的规范化处理写法
}

public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings)
{
// 参考上面的规范化处理写法
}
}

public class MyResult<T>
{
/// <summary>
/// 数据
/// </summary>
public T Data { get; set; }
}
  1. 注册规范化处理提供器
services.AddUnifyProvider<SpeciallyResultProvider>("specially");  // 指定规范化唯一名称,如果不指定就会替代默认的
  1. 在控制器/动态 WebAPI 中使用
public class TestUnifyProvider : IDynamicApiController
{
public string DefaultUnify()
{
return "test";
}

[UnifyProvider]
public string DefaultUnify2()
{
return "test";
}

[UnifyProvider("specially")]
public string SpeciallyUnify()
{
return "特别";
}
}

6.9 针对特定控制器或特定方法配置序列化选项

很少开发者注意到 new JsonResult(data) 实际上有第二个参数的,也就是 new JsonResult(data, serializerSettings),那么可以根据自己的逻辑传递第二个参数,如果不传递则采用全局配置的序列化选项。

Furion 框架提供两种处理方式。

6.9.1 通过 JsonResult 设置第二个参数

这种方式比较原始化,代码比较繁杂,也不利于维护。

[NonUnify]
public IActionResult SpecialApi()
{
return new JsonResult(new YourRESTfulResult<object>
{
StatusCode = 200,
Succeeded = true,
Data = new
{
Name = "Furion"
},
Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
}, new JsonSerializerOptions
{
PropertyNamingPolicy = null
});
}

6.9.2 注册多套序列化配置选项 (推荐)

版本说明

以下内容仅限 Furion 4.6.6 + 版本使用。

Startup.cs 中注册一套新的规则:

services.AddUnifyJsonOptions("special", new JsonSerializerOptions // 如果使用 Newtonsoft.Json => new JsonSerializerSettings
{
PropertyNamingPolicy = null
});

代码使用:

[UnifySerializerSetting("special")]
public object SpecialApi()
{
return new
{
Name = "Furion"
}
}
特别提醒

目前 Swagger 暂未提供个别的接口自定义 schema 序列化选项。

6.10 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/split-db/index.html b/handbook/build/docs/split-db/index.html new file mode 100644 index 00000000000..fc6db8b1af6 --- /dev/null +++ b/handbook/build/docs/split-db/index.html @@ -0,0 +1,19 @@ + + + + + +9.28 分表分库 | Furion + + + + + +
+

9.28 分表分库

特此声明

本章 9.28.29.28.5 小节挪用博主:雨点的名字分库分表 - 理论 博客内容。特此声明。

9.28.1 应用场景

数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作增删改查的开销也会越来越大。

另外,由于无法进行分布式部署,而一台服务器的资源(CPU、磁盘、内存、IO 等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。

这个时候就需要对数据库或数据表进行拆分。

数据切分可以分为:垂直切分水平切分

9.28.2 垂直切分

垂直切分又可以分为: 垂直分库和垂直分表。

9.28.2.1 垂直分库

根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行独立划分。与"微服务治理"的做法相似,每个微服务使用单独的一个数据库。

说明

一开始我们是单体服务,所以只有一个数据库,所有的表都在这个库里。

后来因为业务需求,单体服务变成微服务治理。所以将之前的一个商品库,拆分成多个数据库。每个微服务对于一个数据库。

9.28.2.2 垂直分表

把一个表的多个字段分别拆成多个表,一般按字段的冷热拆分,热字段一个表,冷字段一个表。从而提升了数据库性能。

说明

一开始商品表中包含商品的所有字段,但是我们发现:

1.商品详情和商品属性字段较长。2.商品列表的时候我们是不需要显示商品详情和商品属性信息,只有在点进商品商品的时候才会展示商品详情信息。

所以可以考虑把商品详情和商品属性单独切分一张表,提高查询效率。

9.28.2.3 优缺点

  • 优点

    • 解决业务系统层面的耦合,业务清晰
    • 与微服务的治理类似,也能对不同业务的数据进行分级管理、维护、监控、扩展等
    • 高并发场景下,垂直切分一定程度的提升 IO、数据库连接数、单机硬件资源的瓶颈
  • 缺点

    • 分库后无法 Join,只能通过接口聚合方式解决,提升了开发的复杂度
    • 分库后分布式事务处理复杂
    • 依然存在单表数据量过大的问题(需要水平切分)

9.28.3 水平切分

当一个应用难以再细粒度的垂直切分或切分后数据量行数巨大,存在单库读写、存储性能瓶颈,这时候就需要进行水平切分了。

水平切分也可以分为:水平分库和水平分表。

9.28.3.1 水平分库

上面虽然已经把商品库分成 3 个库,但是随着业务的增加一个订单库也出现 QPS 过高,数据库响应速度来不及,一般 mysql 单机也就 1000 左右的 QPS,如果超过 1000 就要考虑分库。

9.28.3.2 水平分表

一般我们一张表的数据不要超过 1 千万,如果表数据超过 1 千万,并且还在不断增加数据,那就可以考虑分表。

9.28.3.3 优缺点

  • 优点

    • 不存在单库数据量过大、高并发的性能瓶颈,提升系统稳定性和负载能力
    • 应用端改造较小,不需要拆分业务模块
  • 缺点

    • 跨分片的事务一致性难以保证
    • 跨库的 Join 关联查询性能较差
    • 数据多次扩展难度和维护量极大

9.28.4 数据分片规则

我们考虑去水平切分表,将一张表水平切分成多张表,这就涉及到数据分片的规则,比较常见的有:Hash 取模分表、数值 Range 分表、一致性 Hash 算法分表。

9.28.4.1 Hash 取模分表

一般采用 Hash 取模的切分方式,例如:假设按 goods_id 分 4 张表。(goods_id%4 取整确定表)

优缺点

  • 优点

    • 数据分片相对比较均匀,不容易出现热点和并发访问的瓶颈。
  • 缺点

    • 后期分片集群扩容时,需要迁移旧的数据很难。
    • 容易面临跨分片查询的复杂问题。比如上例中,如果频繁用到的查询条件中不带 goods_id 时,将会导致无法定位数据库,从而需要同时向 4 个库发起查询, +再在内存中合并数据,取最小集返回给应用,分库反而成为拖累。

9.28.4.2 数值 Range 分表

按照时间区间或 ID 区间来切分。例如:将 goods_id 为 1-1000 的记录分到第一个表,1000-2000 的分到第二个表,以此类推。

优缺点

  • 优点

    • 单表大小可控
    • 天然便于水平扩展,后期如果想对整个分片集群扩容时,只需要添加节点即可,无需对其他分片的数据进行迁移
    • 使用分片字段进行范围查找时,连续分片可快速定位分片进行快速查询,有效避免跨分片查询的问题。
  • 缺点

    • 热点数据成为性能瓶颈。 +例如按时间字段分片,有些分片存储最近时间段内的数据,可能会被频繁的读写,而有些分片存储的历史数据,则很少被查询

9.28.4.3 一致性 Hash 算法

一致性 Hash 算法能很好的解决因为 Hash 取模而产生的分片集群扩容时,需要迁移旧的数据的难题。具体原理可参考 https://www.cnblogs.com/duhuo/p/4996105.html

9.28.5 分库分表带来的问题

任何事情都有两面性,分库分表也不例外,如果采用分库分表,会引入新的的问题:

9.28.5.1 分布式事务问题

使用分布式事务中间件解决,具体是通过最终一致性还是强一致性分布式事务,看业务需求,这里就不多说。

9.28.5.2 跨节点关联查询 Join 问题

切分之前,我们可以通过 Join 来完成。而切分之后,数据可能分布在不同的节点上,此时 Join 带来的问题就比较麻烦了,考虑到性能,尽量避免使用 Join 查询。

解决这个问题的一些方法:

  • 全局表

全局表,也可看做是 "数据字典表",就是系统中所有模块都可能依赖的一些表,为了避免跨库 Join 查询,可以将 这类表在每个数据库中都保存一份。这些数据通常很少会进行修改,所以也不担心一致性的问题。

  • 字段冗余

利用空间换时间,为了性能而避免 join 查询。例:订单表保存 userId 时候,也将 userName 冗余保存一份,这样查询订单详情时就不需要再去查询"买家 user 表"了。

  • 数据组装

在系统层面,分两次查询。第一次查询的结果集中找出关联数据 id,然后根据 id 发起第二次请求得到关联数据。最后将获得到的数据进行字段拼装。

9.28.5.3 跨节点分页、排序、函数问题

跨节点多库进行查询时,会出现 Limit 分页、Order by 排序等问题。分页需要按照指定字段进行排序,当排序字段就是分片字段时,通过分片规则就比较容易定位到指定的分片;

当排序字段非分片字段时,就变得比较复杂了。需要先在不同的分片节点中将数据进行排序并返回,然后将不同分片返回的结果集进行汇总和再次排序,最终返回给用户。

9.28.5.4 全局主键避重问题

如果都用主键自增肯定不合理,如果用 UUID 那么无法做到根据主键排序,所以我们可以考虑通过雪花 ID 来作为数据库的主键,

9.28.5.5 数据迁移问题

采用双写的方式,修改代码,所有涉及到分库分表的表的增、删、改的代码,都要对新库进行增删改。同时,再有一个数据抽取服务,不断地从老库抽数据,往新库写,

边写边按时间比较数据是不是最新的。

9.28.6 如何实现

特别说明

由于分表分库不仅仅需要内置代码的支持,同时还需要集成数据库中间件,这里推荐 MyCat 中间件。MyCat 官方网站

Furion 框架中提供了轻量级的 分表分库 支持:

  • 动态切换数据库
// 直接改变数据库
repository.ChangeDatabase("数据库连接字符串");

// 通过数据库上下文定位器切换
repository.Change<Entity, MyDbContextLocator2>();

如需跨库查询,需用到数据库技术,如 SqlServer 链接服务器或同义词。

  • 动态切换数据库表

第一步、配置数据库上下文特性[AppDbContext( Mode=DbContextMode.Dynamic)]

第二步、需要动态修改表名的实体继承 IEntityMutableTable<TEntity> 接口,并实现 GetTableName() 返回表名方法

最后通过 BuildChange<TEntity> 切换即可。

var (rep, scoped) = repository.BuildChange<Persion>();

调用 BuildChange 方法之后会自动调用 GetTableName() 方法。

了解更多

想了解更多 DynamicModelCacheKeyFactory 知识可查阅 EF Core - 多个模型之间交替 章节。

9.28.7 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/sqlsugar-old/index.html b/handbook/build/docs/sqlsugar-old/index.html new file mode 100644 index 00000000000..cdace93be4e --- /dev/null +++ b/handbook/build/docs/sqlsugar-old/index.html @@ -0,0 +1,18 @@ + + + + + +10.1. SqlSugar 集成 | Furion + + + + + +
+

10.1. SqlSugar 集成

温馨提醒

Furion 包中默认集成了 EFCore如果不使用 EFCore,可安装纯净版 Furion.Pure 代替 Furion,这样可以忽略本章节直接按照 SqlSugar 官方文档使用

10.1.1 关于 SqlSugar

SqlSugar 是 .NET/C# 平台非常优秀的 ORM 框架,目前 Nuget 总下载突破 700K,Github 关注量也高达 3.2K,是目前当之无愧的国产优秀 ORM 框架之一。

SqlSugar 官方地址:http://www.donet5.com/

SqlSugar 与 EF 优势: 性能比 EF 更快、语法上手更容易

SqlSugar 与 Dapper 优势: SqlSugar 功能更加丰富,性能丝毫不逊色于 Dapper,并且批量操作性能更好

10.1.2 如何集成

Furion 框架中,已经推出 SqlSugar 拓展包 Furion.Extras.DatabaseAccessor.SqlSugar

10.1.2.1 注册 SqlSugar 服务

使用非常简单,只需要在 Startup.cs 中添加 services.AddSqlSugar(config) 即可。如:

// =====配置单库=====
services.AddSqlSugar(new ConnectionConfig
{
ConnectionString = "Server=.xxxxx",//连接符字串
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息
});

// =====配置多库=====
List<ConnectionConfig> connectConfigList = new List<ConnectionConfig>();
//数据库1
connectConfigList.Add(new ConnectionConfig
{
ConnectionString = "链接字符串1",
DbType = DbType.MySql,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute,
ConfigId = "0",
AopEvents = new AopEvents
{
//多库状态下每个库必须单独绑定打印事件,否则只会打印第一个库的sql日志
OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(SqlProfiler.ParameterFormat(sql, pars));
Console.WriteLine();
}
}
});
//数据库2
connectConfigList.Add(new ConnectionConfig
{
ConnectionString = "链接字符串2",
DbType = DbType.MySql,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute,
ConfigId = "1",
AopEvents = new AopEvents
{
//多库状态下每个库必须单独绑定打印事件,否则只会打印第一个库的sql日志
OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(SqlProfiler.ParameterFormat(sql, pars));
Console.WriteLine();
}
}
});
services.AddSqlSugar(connectConfigList.ToArray());

同时也可以添加更多配置,如: +ps:多库状态下每个库必须单独绑定打印事件,否则只会打印第一个库的sql日志(参考上面的多库配置)

services.AddSqlSugar(connectConfigList.ToArray(),
db =>
{
//处理日志事务
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql);
Console.WriteLine(string.Join(",", pars?.Select(it => it.ParameterName + ":" + it.Value)));
Console.WriteLine();
App.PrintToMiniProfiler("SqlSugar", "Info", sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
};
});
安装拓展包位置

Furion 框架中,推荐将拓展包 Furion.Extras.DatabaseAccessor.SqlSugar 安装到 Furion.Core 层中。

10.1.3 基本使用

在使用之前,我们可以通过构造函数注入 ISqlSugarRepository 接口,如:

private readonly ISqlSugarRepository repository; // 仓储对象:封装简单的CRUD
private readonly SqlSugarClient db; // 核心对象:拥有完整的SqlSugar全部功能
public PersonService(ISqlSugarRepository sqlSugarRepository)
{
repository = sqlSugarRepository;
db = repository.Context; // 推荐操作
}

10.1.4 数据库操作示例

// ================== SqlSugarClient ================

//查询功能
var data1 =db.Queryable<Student>().First(it=>it.Id==1); //db.GetById(1);

var data2 = db.Queryable<Student>().ToList();// db.GetList();

// ================== 简单仓储 ================

//插入
db.Insert(insertObj);
var id = db.InsertReturnIdentity(insertObj);
db.AsInsertable(insertObj).ExecuteCommand();

//删除
db.Delete(insertObj);
db.Delete(it => it.Id == 1);

//更新
db.Update(insertObj);
db.Update(it => new Order() { Name = "a", }, it => it.Id == 1);

//异步方法用法
db.Insert(insertObj);//同步
db.InsertAsync(insertObj);//异步

//切换仓储
var orderRespository=db.GetSimpleClient<Order>();
orderRespository.Insert(Order);

10.1.5 SqlSugarClient 操作示例

10.1.5.1 基础查询

//查询所有
var getAll = db.Queryable<Student>().ToList();
//查询前10
var top10= db.Queryable<Student>().Take(10).ToList();
//查询单条
var getFirst = db.Queryable<Student>().First(it=>it.Id==1);
//with nolock
var getAllNoLock = db.Queryable<Student>().With(SqlWith.NoLock).ToList();
//根据主键查询
var getByPrimaryKey = db.Queryable<Student>().InSingle(2);
//查询总和
var sum = db.Queryable<Student>().Sum(it=>it.Id);
//是否存在
var isAny = db.Queryable<Student>().Where(it=>it.Id==-1).Any();
//模糊查
var list2 = db.Queryable<Order>().Where(it =>it.Name.Contains("jack")).ToList();

10.1.5.2 联表查询

var list = db.Queryable<Student, School>((st, sc) => new JoinQueryInfos(
JoinType.Left,st.SchoolId==sc.Id))
.Select((st,sc)=>new{Id=st.Id,Name=st.Name,SchoolName=sc.Name}).ToList();

生成的Sql如下:
SELECT [st].[ID] AS [id] ,
[st].[Name] AS [name] ,
[sc].[Name] AS [schoolName] FROM [STudent] st
Left JOIN School sc ON ( [st].[SchoolId] =[sc].[Id])

10.1.5.3 分页查询

 int pageIndex = 1;
int pageSize = 20;
int totalCount=0;
var page = db.Queryable<Student>().ToPageList(pageIndex, pageSize, ref totalCount);

更多查询用法 : http://www.donet5.com/Home/Doc?typeId=1185

10.1.5.4 插入

//可以是 类 或者 List<类>
db.Insertable(insertObj).ExecuteCommand();

//插入返回自增列
db.Insertable(insertObj).ExecuteReturnIdentity();

//可以是 Dictionary 或者 List<Dictionary >
var dc= new Dictionary<string, object>();
dt.Add("name", "1");
dt.Add("CreateTime", null);
db.Insertable(dc).AS("student").ExecuteCommand();

//DataTable插入
Dictionary<string,object> dc= db.Utilities.DataTableToDictionary(dataTable);//转成字典就可以按上面的字典更新了
db.Insertable(dc).AS("student").ExecuteReturnIdentity();

//实体可以配置主键和自增列
public class Student
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public int? SchoolId { get; set; }
public string Name { get; set; }
}

更多插入用法: http://www.donet5.com/Home/Doc?typeId=1193

10.1.5.5 更新

实体配置参考插入,只需要配置主键即可

//根据主键更新单条 参数 Class
var result= db.Updateable(updateObj).ExecuteCommand();
//不更新 Name 和TestId
var result=db.Updateable(updateObj).IgnoreColumns(it => new { it.CreateTime,it.TestId }).ExecuteCommand()
//只更新 Name 和 CreateTime
var result=db.Updateable(updateObj).UpdateColumns(it => new { it.Name,it.CreateTime }).ExecuteCommand();
//根据表达式更新
var result71 = db.Updateable<Order>()
.SetColumns(it => it.Name == "a")
.SetColumnsIF(p!=null ,it => it.CreateTime == p.Value)//当p不等于null更新createtime列
.Where(it => it.Id == 11).ExecuteCommand();

更多更新用法: http://www.donet5.com/Home/Doc?typeId=1191

10.1.5.6 删除

实体配置参考插入,只需要配置主键即可

//根据实体删除
db.Deleteable<Student>().Where(new Student() { Id = 1 }).ExecuteCommand();
//根据主键删除
db.Deleteable<Student>().In(1).ExecuteCommand();
//根据表达式删除
db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();

更多删除用法: http://www.donet5.com/Home/Doc?typeId=1195

10.1.6 Sql 查询

//sql分页
var list = db.SqlQueryable<Student>("select * from student").ToPageList(1, 2,ref total);

//原生Sql用法
var dt=db.Ado.GetDataTable("select * from table where id=@id and name=@name",new List<SugarParameter>(){
new SugarParameter("@id",1),
new SugarParameter("@name",2)
});
//参数2
var dt=db.Ado.GetDataTable("select * from table where id=@id and name=@name",new{id=1,name=2});

//存储过程用法
var nameP= new SugarParameter("@name", "张三");
var ageP= new SugarParameter("@age", null, true);//设置为output
var dt = db.Ado.UseStoredProcedure().GetDataTable("sp_school",nameP,ageP);

方法名描述返回值
SqlQuery< T >查询所有返回实体集合List
SqlQuery<T,T2>可以返回 2 个结果集Tuple<List, List>
SqlQuerySingle查询第一条记录T
GetDataTable查询所有DataTable
GetDataReader读取 DR 需要手动释放 DRDataReader
GetDataSetAll获取多个结果集DataSet
ExecuteCommand返回受影响行数,一般用于增删改int
GetScalar获取首行首列object
GetString获取首行首列string
GetInt获取首行首列int
GetLong获取首行首列long
GetDouble获取首行首列Double
GetDecimal获取首行首列Decimal
GetDateTime获取首行首列DateTime

想了解更多 SqlSugar 知识可查阅 SqlSugar 官网

10.1.7 打印 sqlSwagger

services.AddSqlSugar(new ConnectionConfig
{
ConnectionString = "Server=.xxxxx",//连接符字串
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息
},
db =>
{
db.Aop.OnLogExecuting = (sql, pars) =>
{
//方法一
App.PrintToMiniProfiler("SqlSugar", "Info", sql + "\r\n" +string.Join(",", pars?.Select(it => it.ParameterName + ":" + it.Value)));

//方法二:Furion对上述用法进行二次封装 建议方式 Sql参数会直接写入到生成Sql中
App.PrintToMiniProfiler("SqlSugar","Info",SqlProfiler.ParameterFormat(sql,pars));
};
});

10.1.8 Oracle注意事项

注意 .NET5 用户需要在 API 或者项目解决方案 .csproj 文件加以下一行代码:

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>

10.1.9 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/sqlsugar/index.html b/handbook/build/docs/sqlsugar/index.html new file mode 100644 index 00000000000..25ec9f22305 --- /dev/null +++ b/handbook/build/docs/sqlsugar/index.html @@ -0,0 +1,17 @@ + + + + + +10.1 SqlSugar 集成 | Furion + + + + + +
+

10.1 SqlSugar 集成

关于拓展包

由于 SqlSugar 高速发展,新版本带来了诸多特性,而 Furion.Extras.DatabaseAccessor.SqlSugar 拓展包更新不及时导致不能第一时间体验新特性。

所以,和 SqlSugar 作者商量后,决定全面推荐使用 SqlSugar 原生拓展包即可。以下文档已更新查看旧文档

温馨提醒

Furion 包中默认集成了 EFCore如果不使用 EFCore,可安装纯净版 Furion.Pure 代替 Furion

10.1.1 SqlSugar ORM

SqlSugar.NET/C# 平台非常优秀的 ORM 框架,目前 Nuget 总下载突破 1000KGithub 关注量也高达 3.7K,是目前当之无愧的国产优秀 ORM 框架之一。

SqlSugar 高性能,具有百万级插入、更新大数据分表等特色功能。

10.1.2 功能介绍

  • 支持 SqlServer、MySql、PgSql、Oracle 百万级插入和更新
  • 支持全自动分表
  • 支持多库事务
  • 支持 CodeFirst
  • 支持联表查询、嵌套查询、导航查询、子查询和动态 JSON 查询等查询操作
  • 支持配置查询
  • 支持工具生成实体和代码生成实体
  • 支持数据库 MySql、SqlServer、Sqlite、Oracle、postgresql、达梦、人大金仓、神通数据库

10.1.3 官网文档

点击以下链接可以跳转到 SqlSugar 官网查看详细 API

入门查询插入更新删 除
安装简单查询
入门联表

10.1.4 Furion 集成

  1. 创建一个拓展类:
public static class SqlsugarSetup
{
public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration, string dbName = "db_master")
{
//如果多个数数据库传 List<ConnectionConfig>
var configConnection=new ConnectionConfig()
{
DbType = SqlSugar.DbType.MySql,
ConnectionString = configuration.GetConnectionString(dbName),
IsAutoCloseConnection = true,
};

SqlSugarScope sqlSugar = new SqlSugarScope(configConnection,
db =>
{
//单例参数配置,所有上下文生效
db.Aop.OnLogExecuting = (sql, pars) =>
{
//Console.WriteLine(sql);//输出sql
};
});

services.AddSingleton<ISqlSugarClient>(sqlSugar);//这边是SqlSugarScope用AddSingleton
}
}

使用注入

//1.构造函数注入
SqlSugar.ISqlSugarClient db;
public WeatherForecastController(ISqlSugarClient db)
{

this.db = db;
}

//2.手动获取
App.GetService<ISqlSugarClient>();
  1. Startup.cs 中注册:
services.AddSqlsugarSetup(App.Configuration);
小知识

如果需要多库配置,可查看 https://www.donet5.com/home/Doc?typeId=2246

10.1.5 特色功能

10.1.5.1 联表查询

  • Linq/Lambda
var query5 = db.Queryable<Order>()
.LeftJoin<Custom> ((o, cus) => o.CustomId == cus.Id)
.LeftJoin<OrderItem> ((o, cus, oritem ) => o.Id == oritem.OrderId)
.Where(o => o.Id == 1)
.Select((o, cus) => new ViewOrder { Id = o.Id, CustomName = cus.Name })
.ToList();
  • 生成 SQL
SELECT
[o].[Id] AS [Id],
[cus].[Name] AS [CustomName]
FROM
[Order] o
Left JOIN [Custom] cus ON ([o].[CustomId] = [cus].[Id])
Left JOIN [OrderDetail] oritem ON ([o].[Id] = [oritem].[OrderId])
WHERE
([o].[Id] = @Id0)

10.1.5.2 分页查询

int pageIndex = 1; 
int pageSize = 20;
int totalCount=0;
var page = db.Queryable<Student>().ToPageList(pageIndex, pageSize, ref totalCount);

10.1.5.3 动态表达式

  • Linq/Lambda
var names= new string [] { "a","b"};
Expressionable<Order> exp = new Expressionable<Order>();

foreach (var item in names)
{
exp.Or(it => it.Name.Contains(item.ToString()));
}

var list= db.Queryable<Order>().Where(exp.ToExpression()).ToList();
  • 生成 SQL
SELECT [Id],[Name],[Price],[CreateTime],[CustomId]
FROM [Order] WHERE (
([Name] like '%'+ CAST(@MethodConst0 AS NVARCHAR(MAX))+'%') OR
([Name] like '%'+ CAST(@MethodConst1 AS NVARCHAR(MAX))+'%')
)

10.1.5.4 仓储方法

新建一个仓储类,如果想扩展方法写到仓储类中

public class Repository<T> : SimpleClient<T> where T : class, new()
{
public Repository(ISqlSugarClient context = null) : base(context)//默认值等于null不能少
{
base.Context = App.GetService<ISqlSugarClient>();//用手动获取方式支持切换仓储
}
}

继承仓储类就可以使用仓储API了

//查询
var data1 = base.GetById(1);//根据id查询
var data4 = base.GetSingle(it => it.Id == 1);//查询单条记录,结果集不能超过1,不然会提示错误
var data = base.GetFirst(it => it.Id == 1);//查询第一条记录

var data2 = base.GetList();//查询所有
var data3 = base.GetList(it => it.Id == 1); //根据条件查询

var p = new PageModel() { PageIndex = 1, PageSize = 2 };
var data5 = base.GetPageList(it => it.Name == "xx", p);
Console.Write(p.PageCount);

var data6 = base.GetPageList(it => it.Name == "xx", p, it => it.Name, OrderByType.Asc);
Console.Write(p.PageCount);

List<IConditionalModel> conModels = new List<IConditionalModel>();
conModels.Add(new ConditionalModel(){FieldName="id",ConditionalType=ConditionalType.Equal,FieldValue="1"});//id=1
var data7 = base.GetPageList(conModels, p, it => it.Name, OrderByType.Asc);
base.AsQueryable().Where(x => x.Id == 1).ToList();

//插入
base.Insert(insertObj);
base.InsertRange(InsertObjs);
var id = base.InsertReturnIdentity(insertObj);
base.AsInsertable(insertObj).ExecuteCommand();

//删除
base.Delete(insertObj);
base.DeleteById(1);
base.DeleteByIds(new object [] { 1, 2 }); //数组带是 ids方法 ,封装传 object [] 类型
base.Delete(it => it.Id == 1);
base.AsDeleteable().Where(it => it.Id == 1).ExecuteCommand();

//更新
base.Update(insertObj);
base.UpdateRange(InsertObjs);
base.Update(it => new Order() { Name = "a", }, it => it.Id == 1);
base.AsUpdateable(insertObj).UpdateColumns(it=>new { it.Name }).ExecuteCommand();

//高级操作
base.AsSugarClient // 获取完整的db对象
base.AsTenant // 获取多库相关操作

//切换仓储
base.ChangeRepository<Repository<OrderItem>>() //支持多租户和扩展方法,使用SqlSugarScope单例(或者SqlSugarClient Scope注入)
base.Change<OrderItem>()//只支持自带方法和单库

10.1.5.5 多库事务

SqlSugarClient db = new SqlSugarClient(new List<ConnectionConfig>()
{
new ConnectionConfig(){ ConfigId="0", DbType=DbType.SqlServer, ConnectionString=Config.ConnectionString, IsAutoCloseConnection=true },
new ConnectionConfig(){ ConfigId="1", DbType=DbType.MySql, ConnectionString=Config.ConnectionString4 ,IsAutoCloseConnection=true}
});

var mysqldb = db.GetConnection("1"); // mysql db
var sqlServerdb = db.GetConnection("0"); // sqlserver db

db.BeginTran();

mysqldb.Insertable(new Order()
{
CreateTime = DateTime.Now,
CustomId = 1,
Name = "a",
Price = 1
}).ExecuteCommand();
mysqldb.Queryable<Order>().ToList();
sqlServerdb.Queryable<Order>().ToList();

db.CommitTran();

10.1.5.6 单例模式

public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig()
{
DbType = SqlSugar.DbType.SqlServer,
ConnectionString = Config.ConnectionString,
IsAutoCloseConnection = true
},
db=> {
db.Aop.OnLogExecuting = (s, p) =>
{
Console.WriteLine(s);
};
});

using (var tran = Db.UseTran())
{
new Test2().Insert(XX);
new Test1().Insert(XX);
.....

tran.CommitTran();
}

10.1.5.7 全局过滤器

db.QueryFilter.Add(new TableFilterItem<Order>(it => it.Name.Contains("a")));  

db.Queryable<Order>().ToList();
// SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] WHERE ([Name] like '%'+@MethodConst0+'%')

db.Queryable<OrderItem, Order>((i, o) => i.OrderId == o.Id)
.Where(i => i.OrderId != 0)
.Select("i.*").ToList();
// SELECT i.* FROM [OrderDetail] i ,[Order] o WHERE ( [i].[OrderId] = [o].[Id] ) AND
// ( [i].[OrderId] <> @OrderId0 ) AND ([o].[Name] like '%'+@MethodConst1+'%')

10.1.5.8 添加或者更新

var x = Db.Storageable(list2).ToStorage();  
x.AsInsertable.ExecuteCommand();
x.AsUpdateable.ExecuteCommand();
var x = Db.Storageable(list).SplitInsert(it => !it.Any()).ToStorage()
x.AsInsertable.ExecuteCommand();

10.1.5.9 自动分表

[SplitTable(SplitType.Year)] // Table by year (the table supports year, quarter, month, week and day)
[SugarTable("SplitTestTable_{year}{month}{day}")]
public class SplitTestTable
{
[SugarColumn(IsPrimaryKey =true)]
public long Id { get; set; }

public string Name { get; set; }

//When the sub-table field is inserted, which table will be inserted according to this field.
//When it is updated and deleted, it can also be convenient to use this field to
//find out the related table
[SplitField]
public DateTime CreateTime { get; set; }
}
var lis2t = db.Queryable<OrderSpliteTest>()
.SplitTable(DateTime.Now.Date.AddYears(-1), DateTime.Now)
.ToPageList(1,2); 

10.1.5.10 大数据插入,更新,插入或者更新

//Insert A million only takes a few seconds
db.Fastest<RealmAuctionDatum>().BulkCopy(GetList());

//update A million only takes a few seconds
db.Fastest<RealmAuctionDatum>().BulkUpdate(GetList());//A million only takes a few seconds完
db.Fastest<RealmAuctionDatum>().BulkUpdate(GetList(),new string[]{"id"},new string[]{"name","time"})//no primary key

//if exists update, else insert
var x= db.Storageable<Order>(data).ToStorage();
x.BulkCopy();
x.BulkUpdate();

//set table name
db.Fastest<RealmAuctionDatum>().AS("tableName").BulkCopy(GetList())

//set page
db.Fastest<Order>().PageSize(300000).BulkCopy(insertObjs);

10.1.5.11 更多功能

可查阅 SqlSugar 官网

10.1.6 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 SqlSugar 知识可查阅 SqlSugar 官网

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/target/index.html b/handbook/build/docs/target/index.html new file mode 100644 index 00000000000..703e4d6f243 --- /dev/null +++ b/handbook/build/docs/target/index.html @@ -0,0 +1,17 @@ + + + + + +1.8 路线图 | Furion + + + + + +
+

1.8 路线图

写于 2022 年 11 月 17 日

在过去两年,实现 Furion 从无到有,编写文档已逾三百万字,过程心酸开源人自知。

这一路日夜兼程,嘲讽批评常伴眼耳,即便辛苦无奈、想过放弃,但为了那微不足道的成就感依然努力着。

当然,也收获了不少... 越来越多拥趸者,越发精湛技术能力,更高层次思维模式,还有许多跨界跨行朋友。

在 《开源指北》中,我曾说道:“开源如同人的脸,好坏一面便知,缺点可能会受到嘲讽批评,优点也会收获赞扬尊重。别担心,他们正在塑造更好的你。”

所以,这一次重新起航,重塑 Furion 重塑自己。也许未来在某个 IT 圈但凡有人谈起 .NET 还能瞟到 Furion 的身影。

状态

我们创建了一个详细的列表来轻松显示 Furion 重构版本的状态和演变。

图标描述
⚠️待定
进行中
完成
💔随时抛弃

计划

计划于 2023 年 4 月 1 日之前完成以下内容重构。

  • [重构] 定时任务模块 ✅(2022 年 11 月 21 日)
  • [重构] 动态 API 模块 ⏳
  • [重构] 数据验证模块 ⏳
  • [重构] 友好异常模块 ⏳
  • [重构] 依赖注入模块 ⏳
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/template/index.html b/handbook/build/docs/template/index.html new file mode 100644 index 00000000000..1fc5d544217 --- /dev/null +++ b/handbook/build/docs/template/index.html @@ -0,0 +1,17 @@ + + + + + +2.2 官方脚手架 | Furion + + + + + +
+

2.2 官方脚手架

特别说明

脚手架不是安装在项目中的! 而是通过 CMDPowerShell 安装到操作系统中的。

2.2.1 脚手架

Furion 官方提供了多种 Web 应用类型的脚手架,方便大家快速创建多层架构项目。目前支持以下应用脚手架:

2.2.1.1 Furion + EFCore

模板类型名称版本关键词描述
nugetFurion.Template.Mvcnuget👉 furionmvcMvc 模板
nugetFurion.Template.Apinuget👉 furionapiWebApi 模板
nugetFurion.Template.Appnuget👉 furionappMvc/WebApi 模板
nugetFurion.Template.Razornuget👉 furionrazorRazorPages 模板
nugetFurion.Template.RazorWithWebApinuget👉 furionrazorapiRazorPages/WebApi 模板
nugetFurion.Template.Blazornuget👉 furionblazorBlazor 模板
nugetFurion.Template.BlazorWithWebApinuget👉 furionblazorapiBlazor/WebApi 模板

2.2.1.2 Furion + SqlSugar

SqlSugar 优点

弥补 EF Core 上手难度:支持线程安全、支持多库事务、多库兼容、多库查询和多库切换。

模板类型名称版本关键词描述
nugetFurion.SqlSugar.Template.Mvcnuget👉 fsmvcMvc 模板
nugetFurion.SqlSugar.Template.Apinuget👉 fsapiWebApi 模板
nugetFurion.SqlSugar.Template.Appnuget👉 fsappMvc/WebApi 模板
nugetFurion.SqlSugar.Template.Razornuget👉 fsrazorRazorPages 模板
nugetFurion.SqlSugar.Template.RazorWithWebApinuget👉 fsrazorapiRazorPages/WebApi 模板
nugetFurion.SqlSugar.Template.Blazornuget👉 fsblazorBlazor 模板
nugetFurion.SqlSugar.Template.BlazorWithWebApinuget👉 fsblazorapiBlazor/WebApi 模板

2.2.2 安装脚手架

打开 CMDPowershell 执行模板安装命令(新版本 --install 可换成 install):

// EFCore
dotnet new --install Furion.Template.Api::4.7.9
// SqlSugar
dotnet new --install Furion.SqlSugar.Template.Api::4.7.9
SqlSugar 脚手架基本使用

SqlSugar 脚手架中,Core 层包含了一个 DbContext.cs 类,可通过 DbContext.Instance 就可以获取到 SqlSugarScope 对象。

数据库链接字符串在启动层 appsettings.json 文件的 ConnectionConfigs 节点中配置,对应的是 SqlSugar 中的 ConnectionConfig[] 对象。

2.2.3 使用脚手架

dotnet new furionapi -n 项目名称 -f .NET版本

# EFCore:支持创建 .NET5-7 版本
dotnet new furionapi -n MyProject -f net5
dotnet new furionapi -n MyProject -f net6
dotnet new furionapi -n MyProject -f net7

# SqlSugar:支持创建 .NET5-7 版本
dotnet new fsapi -n MyProject -f net5
dotnet new fsapi -n MyProject -f net6
dotnet new fsapi -n MyProject -f net7

这样就可以生成项目代码了,生成之后推荐将所有的 nuget 包更新到最新版本。

关于项目名称和 .NET 版本

通过脚手架生成的项目名称不能包含 短横线 等特殊字符,如有该需求,可在生成之后通过 Visual Studio 进行手动修改。

-f 版本参数所有选项:net5net6net7

特别提醒

furionapi 对应的是上面列表的 关键字,我们也可以通过 dotnet new --list 查看。

想了解更多可以使用 dotnet new 关键字 --help 查看更多参数。

2.2.4 脚手架更新

只需要重新安装最新版替换即可,如:

dotnet new --install Furion.Template.Api::4.7.9

不带版本号总是安装最新的版本。

2.2.5 Visual Studio 集成

通过命令安装脚手架后,升级 Visual Studio 到最新版可使用可视化方式创建哦。

2.2.6 关于 MVC 添加区域出错问题

由于 Furion 底层依赖了 Microsoft.CodeAnalysis.CSharp 包,所以可能通过 Viusal Studio 的界面添加 Area 区域 时会出错,这时候只需要在 Web.Entry 层安装下面几个包即可:

  • Microsoft.CodeAnalysis.CSharp.Features
  • Microsoft.CodeAnalysis.CSharp.Scripting
  • Microsoft.CodeAnalysis.VisualBasic.Features
  • Microsoft.CodeAnalysis.Workspaces.MSBuild
  • Microsoft.VisualStudio.Web.CodeGeneration.Design

2.2.7 搭建脚手架

脚手架可以极大的提高我们搭建新项目的速度,推荐两篇文章给大家学习:

https://www.cnblogs.com/laozhang-is-phi/p/10205495.html

https://www.cnblogs.com/catcher1994/p/10061470.html

推荐直接拷贝 Furion 脚手架文件夹进行修改,可避免很多问题。

Furion 脚手架源码

2.2.8 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 模板知识 知识可查阅 dotnet-new 模板 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/tran/index.html b/handbook/build/docs/tran/index.html new file mode 100644 index 00000000000..fbce7944759 --- /dev/null +++ b/handbook/build/docs/tran/index.html @@ -0,0 +1,17 @@ + + + + + +9.26 事务和工作单元 | Furion + + + + + +
+

9.26 事务和工作单元

9.26.1 事务

事务指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行

简单的说,事务就是并发控制的单位,是用户定义的一个操作序列。 而一个逻辑工作单元要成为事务,就必须满足 ACID 属性。

  • A:原子性(Atomicity):事务中的操作要么都不做,要么就全做
  • C:一致性(Consistency):事务执行的结果必须是从数据库从一个一致性状态转换到另一个一致性状态
  • I:隔离性(Isolation):一个事务的执行不能被其他事务干扰
  • D:持久性(Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的

9.26.2 工作单元

简单来说,就是为了保证一次完整的功能操作所产生的一系列提交数据的完整性,起着事务的作用。在计算机领域中,工作单元通常用 UnitOfWork 名称表示。

通常我们保证用户的每一次请求都是处于在一个功能单元中,也就是工作单元。

9.26.3 如何使用

9.26.3.1 [UnitOfWork] 自动管理

Furion 框架中,我们只需要在控制器 Action 中贴 [UnitOfWork] 特性即可开启工作单元模式,保证了每一次请求都是一个 工作单元,要么同时成功,要么同时失败。

  • 单库操作

下面方式支持所有关系型数据库类型

[UnitOfWork]    // 由于出现错误,所以所有数据库变更都会自动回滚
public async Task 测试环境事务(int id)
{
// 各种奇葩数据库操作
await _personRepository.DeleteNowAsync(id);

// 其他数据库操作。。

// 故意出错
var d = await _personRepository.SqlQueriesAsync("select * from persion2 d");
}
  • 多库操作

支持各种奇葩的 ORM,包括 ADO.NETEFCore 等第三方,支持所有关系型数据库类型但不支持 Sqlite

[UnitOfWork(UseAmbientTransaction = true)]    // 由于出现错误,所以所有数据库变更都会自动回滚
public async Task 测试环境事务(int id)
{
// 各种奇葩数据库操作
await _personRepository.DeleteNowAsync(id);

// 其他数据库操作。。

// 故意出错
var d = await _personRepository.SqlQueriesAsync("select * from persion2 d");
}
  • UnitOfWork 内置配置:
    • UseAmbientTransaction:是否开启分布式环境事务,bool 类型,默认 false不支持 Sqlite
    • TransactionScope:配置分布式环境事务范围,TransactionScopeOption 类型,当 UseAmbientTransactiontrue 有效
    • TransactionIsolationLevel:配置分布式环境事务隔离级别,IsolationLevel 类型,当 UseAmbientTransactiontrue 有效
    • TransactionTimeout:配置分布式环境事务执行超时时间,int 类型,当 UseAmbientTransactiontrue 有效
    • TransactionScopeAsyncFlow:配置分布式环境事务异步流支持,TransactionScopeAsyncFlowOption 类型,当 UseAmbientTransactiontrue 有效
    • EnsureTransaction:强制使字符串 sql 拓展事务有效,bool 类型,默认 false
版本说明

以下内容仅限 Furion 3.7.3 + 版本使用。

如使用非 EFCore ORM 框架,可实现 IUnitOfWork 接口之后调用 services.AddUnitOfWork<TUnitOfWork>() 注册即可,如示例代码:

using Microsoft.AspNetCore.Mvc.Filters;

namespace Furion.DatabaseAccessor;

/// <summary>
/// SqlSugar 工作单元实现
/// </summary>
public sealed class SqlSugarUnitOfWork : IUnitOfWork
{
/// <summary>
/// SqlSugar 对象
/// </summary>
private readonly ISqlSugarClient _sqlSugarClient;

/// <summary>
/// 构造函数
/// </summary>
/// <param name="sqlSugarClient"></param>
public SqlSugarUnitOfWork(ISqlSugarClient sqlSugarClient)
{
_sqlSugarClient = sqlSugarClient;
}

/// <summary>
/// 开启工作单元处理
/// </summary>
/// <param name="context"></param>
/// <param name="unitOfWork"></param>
/// <exception cref="NotImplementedException"></exception>
public void BeginTransaction(FilterContext context, UnitOfWorkAttribute unitOfWork)
{
_sqlSugarClient.AsTenant().BeginTran();
}

/// <summary>
/// 提交工作单元处理
/// </summary>
/// <param name="resultContext"></param>
/// <param name="unitOfWork"></param>
/// <exception cref="NotImplementedException"></exception>
public void CommitTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork)
{
_sqlSugarClient.AsTenant().CommitTran();
}

/// <summary>
/// 回滚工作单元处理
/// </summary>
/// <param name="resultContext"></param>
/// <param name="unitOfWork"></param>
/// <exception cref="NotImplementedException"></exception>
public void RollbackTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork)
{
_sqlSugarClient.AsTenant().RollbackTran();
}

/// <summary>
/// 执行完毕(无论成功失败)
/// </summary>
/// <param name="context"></param>
/// <param name="resultContext"></param>
/// <exception cref="NotImplementedException"></exception>
public void OnCompleted(FilterContext context, FilterContext resultContext)
{
_sqlSugarClient.Dispose();
}
}

之后注册即可:

services.AddUnitOfWork<SqlSugarUnitOfWork>();
小知识-如何判断是否开启了分布式环境事务

有时候我们自定义了工作单元之后,个别 ORM 不支持分布式环境事务,那么就会出现执行错误,我们可以通过 System.Transactions.Transaction.Current != null 来判断是否启用了分布式环境事务,不等于 null 则为启用,否则未启用。

9.26.3.2 EnsureTransaction() 方法 ✨

有些时候我们通过静态类或者其他方式不小心创建了新的 DbContext 实例,这时候贴了 [UnitOfWork] 也不见起效,这时候可以通过以下方法来确认事务是否有效:

repository.EnsureTransaction();

如果不喜欢手动方式也可以通过 [UnitOfWork(true)] 开启此功能。

该方法会将当前仓储添加到数据库上下文池中,并确保事务可用。

9.26.3.2 手动管理

// 开启事务
using (var transaction = _testRepository.Database.BeginTransaction())
{
try
{
_testRepository.Insert(new Blog { Url = "http://blogs.msdn.com/dotnet" });
_testRepository.SaveNow();

_testRepository.Insert(new Blog { Url = "http://blogs.msdn.com/visualstudio" });
_testRepository.SaveNow();

var blogs = _testRepository.Entity
.OrderBy(b => b.Url)
.ToList();

// 提交事务
transaction.Commit();
}
catch (Exception)
{
// 回滚事务
// transaction.RollBack(); // 新版本自动回滚了
}
}

9.26.4 工作单元特性说明

9.26.4.1 [UnitOfWork] 特性

[UnitOfWork] 特性只能用于控制器的 Action 中,一旦贴了 [UnitOfWork] 特性后,那么该请求自动启用工作单元模式,要么成功,要么失败。

9.26.4.2 [ManualCommit] 特性

默认情况下,Furion 框架会在一次成功请求之后自动调用 SaveChanges() 方法,如果选择手动调用 SaveChanges() 方法,可以在控制器 Action 中贴 [ManualCommit] 特性即可。

9.26.5 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 事务 知识可查阅 EF Core - 使用事务 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/unittest/index.html b/handbook/build/docs/unittest/index.html new file mode 100644 index 00000000000..4fa86677634 --- /dev/null +++ b/handbook/build/docs/unittest/index.html @@ -0,0 +1,17 @@ + + + + + +36.1 单元/集成测试 | Furion + + + + + +
+

36.1 单元/集成测试

36.1.1 关于单元测试

引用自百度百科:

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如 C 语言中单元指一个函数,Java 里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

36.1.2 单元测试好处

  • 消灭低级错误

基本的单元测试,可以在系统测试之前,把大部分比较低级的错误都消灭掉,减少系统测试过程中的问题,这样也就减少了系统测试中定位和解决问题的时间成本了。

  • 找出潜在的 bug

某些类型的 bug,靠系统测试是很难找到的。例如一些代码分支,平时 99%的场景基本上都走不到,但一旦走到了,如果没有提前测试好,那么可能就是一个灾难。

  • 上线前的保证

加了新代码,上线前跑一把单元测试,都通过,说明代码可能没有影响到之前的逻辑,这样上线也比较放心。如果之前的单元测试跑不过,那么很有可能新的代码有潜在的问题,赶紧修复去吧。

  • 重构代码的机会

写单元测试的过程中,你可能会顺手把一些 code 重构了,为什么?举例,一些长得非常像的代码,如果每次都要写一堆测试代码去测同样的 code,你会不会抓狂?不测吧,覆盖率又上不去,于是我就会想方设法把待测试的 code 改得尽量的精简,重复代码减少,这样覆盖率上去了,测试也好测了,代码也简洁了。如果没有单元测试和覆盖率的要求的话,坦白说可能一来自己不会发现这些重复的 code,另一方面即使发现了,可能也没有太大的动力去改进。

另外,由于单元测试中,你需要尝试去覆盖一些异常分支,这是系统测试常常走不到的地方,于是就会引起你的一些思考,例如这个异常分支是否真的需要?是否真的会发生?对于一些实际上绝对不会出错的函数,那么我觉得可能异常分支是没必要存在的。

  • 重新 review 代码的机会

写 UT 的过程中,我总是会好好看哪些代码执行到了,哪些代码没有执行到,这其实也是一个 review 自己代码的机会,有些时候,并不是 UT 本身帮我找到 bug,而是回头 review 自己代码的时候发现的。

36.1.3 单元测试类型

  • 基于 API 接口测试(白盒 + 浅度黑盒测试)
  • 基于项目代码测试(深度白盒测试)

36.1.4 主流的单元测试库

  • xUnit最流行的库,推荐
  • NUnit
  • MSTest

在本章节,Furion 框架使用 xUnit 库进行单元测试。

36.1.5 第一个例子

36.1.5.1 创建 xUnit 单元测试项目

36.1.5.2 第一个测试方法

using Xunit;

namespace TestProject1
{
public class UnitTest1
{
[Fact]
public void Test1()
{
Assert.Equal(2, 1 + 1);
}
}
}

单元测试实际上是通过普通的类的方法进行模块功能测试,具体测试则是标记了 [Fact] 特性的方法,在方法中使用 Assert 类提供的静态方法进行 断言断言 成功,则测试通过,否则测试不通过。

36.1.5.3 运行测试

在单元测试项目中 右键 选择 运行测试 并打开 测试资源管理器 即可查看测试结果。

36.1.5.4 多个测试方法测试

36.1.5.5 重复/回归测试

后续添加更多测试方法只需在 测试资源管理器 点击 在视图中运行所有测试 播放按钮即可,如下图

36.1.6 集成 Furion 强大功能

Furion 是跨平台、跨项目的开发框架,支持任意项目类型,包括单元测试项目。

36.1.6.1 安装 Furion.Xunit

Furion 纯净版

如果使用的是 Furion.Pure 则安装 Furion.Pure.Xunit 这个拓展包。

打开 Nuget 程序包控制台,安装 Furion.Xunit

特别注意

Furion.Xunit 已经包含 Furion 无需再次安装 Furion

36.1.6.2 添加初始配置类

在单元测试项目根目录下添加 TestProgram.cs 类,并写下以下代码:

TestProgram.cs
using Furion.Xunit;
using Xunit.Abstractions;
using Xunit.Sdk;

// 配置启动类类型,第一个参数是 TestProgram 类完整限定名,第二个参数是当前项目程序集名称
[assembly: TestFramework("TestProject1.TestProgram", "TestProject1")]

namespace TestProject1;

/// <summary>
/// 单元测试启动类
/// </summary>
public class TestProgram : TestStartup
{
public TestProgram(IMessageSink messageSink) : base(messageSink)
{
// 初始化 Furion
Serve.Run(silence: true);
}
}
小提示

TestProgram.cs 名称可随意,只需要继承 TestStartup 类即可。

36.1.6.3 使用 Furion 完整功能

Furion 是跨平台、跨项目的开发框架,下面在单元测试中演示 远程请求 并请求 https://www.baidu.com 数据,并测试是否请求成功。

  • 在根目录下添加 Startup.cs 启动类,并继承 AppStartup:
Startup.cs
using Furion;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;

namespace TestProject1;

public class Startup : AppStartup
{
public void ConfigureServices(IServiceCollection services)
{
// 注册远程服务
services.AddRemoteRequest();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}
}
  • 编写测试方法
[Fact]
public async Task 测试请求百度()
{
var rep = await "https://www.baidu.com".GetAsync();
Assert.True(rep.IsSuccessStatusCode);
}
  • 查看测试结果

很神奇吧!Furion 支持任何项目类型,任何平台使用。

36.1.7 带参数的测试方法

上面例子中,测试方法都是没有参数的,有时候需要同一个方法输入多个不同的值进行测试,这时候就需要用到 [Theory][InlineData] 特性了。

如,下面测试两个数的和是 奇数,测试代码如下:

[Theory]
[InlineData(1, 2)]
[InlineData(3, 4)]
[InlineData(5, 7)]
public void 带参数测试(int i, int j)
{
Assert.NotEqual(0, (i + j) % 2);
}

测试结果:

36.1.8 如何进行依赖注入

有些时候,我们需要测试某接口,或者进行依赖注入方式解析服务并调用,Furion.Xunit 提供完整的构造函数注入。

36.1.8.1 编写一个 ICalcService 接口及实现类

using Furion.DependencyInjection;

namespace TestProject1.Services;

public interface ICalcService
{
int Plus(int i, int j);
}

public class CalcService : ICalcService, ITransient // 支持任何生命周期
{
public int Plus(int i, int j)
{
return i + j;
}
}

36.1.8.2 在测试类中调用

using TestProject1.Services;
using Xunit;

namespace TestProject1;

public class UnitTest1
{
private readonly ICalcService _calcService;
public UnitTest1(ICalcService calcService)
{
_calcService = calcService;
}

[Fact]
public void 测试两个数的和()
{
Assert.Equal(3, _calcService.Plus(1, 2));
}
}

36.1.8.3 输出日志

如果在单元测试中想输出日志,只需要在构造函数注入 ITestOutputHelper 即可,如:

using Xunit;
using Xunit.Abstractions;

namespace TestProject1
{
public class UnitTest1
{
private readonly ITestOutputHelper Output;

public UnitTest1(ITestOutputHelper tempOutput)
{
Output = tempOutput;
}

[Fact]
public void Test_String_Equal()
{
Output.WriteLine("哈哈哈哈,我是 Furion");
Assert.NotEqual("Furion", "Fur");
}
}
}

36.1.8.4 关于依赖注入作用域释放

Furion 会在创建单元测试实例时创建一个 IServiceScope 对象,等该实例所有测试案例执行完毕自动调用 Dispose,编写测试的开发者无需关注。

36.1.8.5 测试释放资源

有时候,我们需要测试成功后释放一些不能及时释放的对象,这时,只需要实现 IDisposable 接口即可:

using System;
using Xunit;

namespace TestProject1
{
public class UnitTest1 : IDisposable
{
[Fact]
public void Test_String_Equal()
{
Assert.NotEqual("Furion", "Fur");
}

public void Dispose()
{
// 释放你的对象
}
}
}

36.1.8.6 [AssemblyFixture] 特性

有时候我们可能不需要对类进行依赖注册,或者无法通过外部进行注册,这时候可以通过 [AssemblyFixture] 特性实现构造函数注入任何类,如:

有效范围说明

[AssemblyFixture] 方式对整个单元测试类构造函数都有效,如需个别单元测试类有效可使用 IClassFixture<>ICollectionFixture<> + [Collection] 组合方式。

  • 定义需要注入进单元测试构造函数中的类
public class MyAssemblyFixture : IDisposable
{
public static int InstantiationCount;

public MyAssemblyFixture()
{
InstantiationCount++;
}

public void Dispose()
{
// 做一些释放工作
}
}
  • TestProgram.cs 顶部全局注册
TestProgram.cs
using Furion.Xunit;
using TestProject1;
using Xunit;
using Xunit.Abstractions;
using Xunit.Sdk;

// 配置启动类类型,第一个参数是 TestProgram 类完整限定名,第二个参数是当前项目程序集名称
[assembly: TestFramework("TestProject1.TestProgram", "TestProject1")]

// 支持多个
[assembly: AssemblyFixture(typeof(MyAssemblyFixture))]
// [assembly: AssemblyFixture(typeof(XXXXFixture))]

namespace TestProject1;

/// <summary>
/// 单元测试启动类
/// </summary>
public class TestProgram : TestStartup
{
public TestProgram(IMessageSink messageSink) : base(messageSink)
{
Serve.Run(silence: true);
}
}
  • 在测试类构造函数注入
using TestProject1.Services;
using Xunit;

namespace TestProject1;

public class UnitTest1
{
private readonly ICalcService _calcService;
private readonly MyAssemblyFixture _fixture;

public UnitTest1(ICalcService calcService
, MyAssemblyFixture fixture)
{
_calcService = calcService;
_fixture = fixture;
}

[Fact]
public void 测试两个数的和()
{
Assert.Equal(3, _calcService.Plus(1, 2));
}

[Fact]
public void EnsureSingleton()
{
Assert.Equal(1, MyAssemblyFixture.InstantiationCount);
}
}

36.1.8.7 IClassFixture<> 单个注入

通过上面 [AssemblyFixture] 方式我们知道此方式对全局的单元测试类都有效,但有时候我们只需要特定单元测试类有效,则可通过 IClassFixture<> 方式,如:

  • 定义需要注入进单元测试构造函数中的类
public class MyClassFixture : IDisposable
{
public static int InstantiationCount;

public MyClassFixture()
{
InstantiationCount++;
}

public void Dispose()
{
// 做一些释放工作
}
}
  • 在测试类构造函数注入
using TestProject1.Services;
using Xunit;

namespace TestProject1;

public class UnitTest1 : IClassFixture<MyClassFixture>
{
private readonly ICalcService _calcService;
private readonly MyAssemblyFixture _fixture;
private readonly MyClassFixture _classFixture;

public UnitTest1(ICalcService calcService
, MyAssemblyFixture fixture
, MyClassFixture classFixture)
{
_calcService = calcService;
_fixture = fixture;
_classFixture = classFixture;
}

[Fact]
public void 测试两个数的和()
{
Assert.Equal(3, _calcService.Plus(1, 2));
}

[Fact]
public void EnsureSingleton()
{
Assert.Equal(1, MyAssemblyFixture.InstantiationCount);
}

[Fact]
public void EnsureClassSingleton()
{
Assert.Equal(1, MyClassFixture.InstantiationCount);
}
}

36.1.8.8 ICollectionFixture<> 多个注入

ICollectionFixture<> 方式和 IClassFixture<> 方式最大的不同就是后者只能配置为单个测试类使用,而 ICollectionFixture<> 则通过 [Collection] 方式配置多个测试类有效,如:

  • 定义需要注入进单元测试构造函数中的类
特别注意

这里区别于 IClassFixture<> 方式,需定义配置器并实现 ICollectionFixture<> 接口。

using Xunit;

namespace TestProject1;

public class MyCollectionFixture : IDisposable
{
public static int InstantiationCount;

public MyCollectionFixture()
{
InstantiationCount++;
}

public void Dispose()
{
// 做一些释放工作
}
}

[CollectionDefinition("MyCollection")]
public class MyCollection : ICollectionFixture<MyCollectionFixture>
{
}
  • 在测试类构造函数注入
using TestProject1.Services;
using Xunit;

namespace TestProject1;

[Collection("MyCollection")]
public class UnitTest1 : IClassFixture<MyClassFixture>
{
private readonly ICalcService _calcService;
private readonly MyAssemblyFixture _fixture;
private readonly MyClassFixture _classFixture;
private readonly MyCollectionFixture _collectionFixture;

public UnitTest1(ICalcService calcService
, MyAssemblyFixture fixture
, MyClassFixture classFixture
, MyCollectionFixture collectionFixture)
{
_calcService = calcService;
_fixture = fixture;
_classFixture = classFixture;
_collectionFixture = collectionFixture;
}

[Fact]
public void 测试两个数的和()
{
Assert.Equal(3, _calcService.Plus(1, 2));
}

[Fact]
public void EnsureSingleton()
{
Assert.Equal(1, MyAssemblyFixture.InstantiationCount);
}

[Fact]
public void EnsureClassSingleton()
{
Assert.Equal(1, MyClassFixture.InstantiationCount);
}

[Fact]
public void EnsureCollectionSingleton()
{
Assert.Equal(1, MyCollectionFixture.InstantiationCount);
}
}

36.1.9 Web 集成测试

Web 集成测试有三种方式,通过这三种方式可以对项目进行全方位的测试,保证部署上线是测试期盼效果。

36.1.9.1 对现有项目进行集成测试

这种方式比较简单,也是最常用的方式,无需部署到服务器直接在本地即可测试,如:

  1. 创建 Xunit 单元测试项目
  1. 添加 Microsoft.AspNetCore.Mvc.Testing 微软提供的集成测试拓展
  1. 添加测试项目或使用已有的测试项目引用
  1. 在需要测试的 Web 项目启动层添加 FakeStarup.cs
FakeStarup.cs
namespace WebApplication1;

/// <summary>
/// 供集成测试使用
/// </summary>
public class FakeStartup
{
}
  1. 编写测试 Web 项目接口测试案例
using Microsoft.AspNetCore.Mvc.Testing;
using Xunit;

namespace TestProject2;

public class UnitTest1 : IClassFixture<WebApplicationFactory<WebApplication1.FakeStartup>>
{
private readonly WebApplicationFactory<WebApplication1.FakeStartup> _factory;
public UnitTest1(WebApplicationFactory<WebApplication1.FakeStartup> factory)
{
_factory = factory;
}

[Theory]
[InlineData("/default")]
public async Task TestEnsureSuccessStatusCode(string url)
{
using var client = _factory.CreateClient();
using var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
}
}

/default 接口对应控制器定义如下:

using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{
[ApiController]
[Route("[controller]")]
public class DefaultController : ControllerBase
{
[HttpGet]
public string Get()
{
return "Furion 集成测试";
}
}
}
  1. 允许测试

36.1.9.2 独立主机方式测试

独立主机的方式就是利用单元测试的每一个测试案例构建主机进行测试。

  1. 创建 Xunit 单元测试项目
  1. 添加 Microsoft.AspNetCore.Mvc.Testing 微软提供的集成测试拓展
  1. 各种创建主机方式示例
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit;

namespace TestProject3;

public class UnitTest1
{
/// <summary>
/// 创建主机并注册服务
/// </summary>
/// <remarks>可用来判断服务是否注册</remarks>
[Fact]
public void Test1()
{
var builder = WebApplication.CreateBuilder();

// 注册服务
builder.Services.AddScoped<IYourService, YourService>();

using var app = builder.Build();
var services = app.Services;

services.GetRequiredService<IYourService>();
}

/// <summary>
/// 测试配置
/// </summary>
/// <remarks>比如添加 JSON 文件配置后读取</remarks>
[Fact]
public void Test2()
{
var builder = WebApplication.CreateBuilder();
var host = builder.Host;
host.ConfigureAppConfiguration(builder =>
{
builder.Sources.Clear();
});

var config = builder.Configuration["配置"];

// 判断不为空
}
}

36.1.9.3 系统集成/环境/配置部署测试

有时候我们需要测试 Web 主机各种情况,比如端口是否有效,环境配置是否有效,系统集成情况等等,这时候只需要添加 Microsoft.AspNetCore.TestHost 拓展,然后在测试类顶部贴:

[assembly: HostingStartup(typeof(WebApplicationTests.TestHostingStartup))]

微软已经提供了非常详细的例子,这里直接放链接 https://github.com/dotnet/aspnetcore/tree/main/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests

WebApplicationTests.TestHostingStartup 为您要测试的 Web 项目启动类。

36.1.9.4 集成 Furion.Xunit 拓展

Web 集成测试支持完整的 Furion 特性,参考上面单元测试集成 Furion 章节。

Furion 纯净版

如果使用的是 Furion.Pure 则安装 Furion.Pure.Xunit 这个拓展包。

36.1.10 Assert 断言

Assert 是单元测试判定成功的依据,通常第一个参数为 期望值,第二个参数为 实际值,对比这两个值是否一致即可判断成功与否。详细的 Assert 静态方法可查阅官方库 Assert 方法

36.1.11 单元测试覆盖率

Visual Studio 提供了分析单元测试覆盖率工具,如:

36.1.12 反馈与建议

与我们交流

给 Furion 提 Issue


了解更多

想了解更多 单元测试 知识可查阅 在 .NET 中测试 章节。

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/upgrade/index.html b/handbook/build/docs/upgrade/index.html new file mode 100644 index 00000000000..45ddeb645b5 --- /dev/null +++ b/handbook/build/docs/upgrade/index.html @@ -0,0 +1,18 @@ + + + + + +1.6 更新日志 | Furion + + + + + +
+

1.6 更新日志

Furion 框架升级/发版规则

升级前重点关注可能造成【破坏性】的标签类型

版本号规则:主版本号.次版本号.修订版本号

  • 只要【确认】为框架 bug,则当天修复,当天发版,修订版本号 加 1
  • 只要 .NET SDK 版本更新,则当天升级,当天发版,修订版本号 加 1
  • 如果 .csproj 文件有变更,则当天发版,修订版本号 加 1
  • 如果新增 拓展包,为了版本号统一,则当天发版,修订版本号 加 1
  • 如果涉及到代码重构,则当天发版,次版本号 加 1,修订版本号 清 0
  • 如果 .NET SDK 主版本号升级,则当天发版,主版本号 加 1

如有意外不能当天发版,则会在 Issue 中说明具体发版时间,正常不会超过 3 天。

v4.8.0(未发布,全新定时任务)

更好的 Furion,更好的自己

在过去两年,实现 Furion 从无到有,编写文档已逾三百万字,过程心酸开源人自知。

这一路日夜兼程,嘲讽批评常伴眼耳,即便辛苦无奈、想过放弃,但为了那微不足道的成就感依然努力着。

当然,也收获了不少... 越来越多拥趸者,越发精湛技术能力,更高层次思维模式,还有许多跨界跨行朋友。

在 《开源指北》中,我曾说道:“开源如同人的脸,好坏一面便知,缺点可能会受到嘲讽批评,优点也会收获赞扬尊重。别担心,他们正在塑造更好的你。”

所以,这一次重新起航,重塑 Furion 重塑自己。也许未来在某个 IT 圈但凡有人谈起 .NET 还能瞟到 Furion 的身影。

版本细节
查看更改

极速入门现在可以便捷注册服务,写测试例子的时候非常有用,无需编写 Startup.cs

Serve.Run(additional: services =>
{
services.AddRemoteRequest();
});

// 通用泛型主机方式
Serve.RunGeneric(additional: services =>
{
services.AddRemoteRequest();
});

// 还可以省去 additional
Serve.Run(services =>
{
services.AddRemoteRequest();
});

// 通用泛型主机方式
Serve.RunGeneric(services =>
{
services.AddRemoteRequest();
});
    •   Serve.Run 主机返回值 IHost 4.8.0 #I61XHV
查看更改

Winfom/WPF 应用程序中,我们希望关闭窗体或退出应用程序时,能够关闭 Serve 主机:

using Microsoft.Extensions.Hosting;

public partial class App : Application
{
private readonly IHost _host;
public App()
{
_host = Serve.Run(silence: true);
}

protected override void OnExit(ExitEventArgs e)
{
_host.StopAsync();
_host.Dispose();

base.OnExit(e);
}
}
    •   日志 JSON 自动美化格式化器 LoggerFormatter.JsonIndented 4.8.0 7b9268c
    •   LoggingMonitorJsonIndented 配置,可配置是否美化 JSON 4.8.0 7b9268c
查看更改

默认情况下,配置输出 JSON 格式化 LoggerFormatter.Json 会浓缩到一行显示。

新版本支持 LoggerFormatter.JsonIndented 美化 JSON 配置:

// 控制台日志
services.AddConsoleFormatter(options =>
{
options.MessageFormat = LoggerFormatter.JsonIndented;
});

// 文件日志
services.AddFileLogging("mytemplate.log", options =>
{
options.MessageFormat = LoggerFormatter.JsonIndented;
});

// 数据库日志
services.AddDatabaseLogging<DatabaseLoggingWriter>(options =>
{
options.MessageFormat = LoggerFormatter.JsonIndented;
});

// LoggingMonitor 日志
services.AddMonitorLogging(options =>
{
options.JsonIndented = true;
});
  • 突破性变化

    •   旧版本定时任务为 弃用 状态(2022 年 12 月 31 日彻底删除),如需取消警告在 .csproj 中添加 <NoWarn>0618</NoWarn> 4.8.0 旧版本文档
    •   JSON 静态类所有方法的 serviceProvider 参数(无破坏) 4.8.0 962fb16
    •   Http 静态类所有方法的 serviceProvider 参数(无破坏) 4.8.0 962fb16
  • 问题修复

    •  .NET6/7 降级回 .NET5 找不到 .AddDateOnlyConverters().AddTimeOnlyConverters() 拓展方法问题 4.8.0 cdddf8d
    •   Retry.InvokeAsync 方法如果不传入 fallbackPolicy 参数报空异常问题 4.8.0 21af847
    •   动态 WebAPI 不支持在 .NET7 不声明 [FromServices] 自动注入问题 4.8.0 #I62HP1
  • 文档


v4.7.9(当前版本)

.NET7 发布

🚀🎉🔥 2022 年 11 月 08 日,微软发布了 .NET7 首个正式版。

Furion 第一时间完成了适配,v4 版本开始一套代码支持 .NET5-.NET7/N,支持所有 Furion 版本升级

版本细节
  • 新特性

    •   日志模块时间格式化默认输出 毫秒 部分,针对并发比较高的场景 4.7.0 c0dc36c
    •   写入数据库日志死循环输出检测机制 4.7.0 30dea0c
    •   LoggingMonitor 输出 系统信息.NET 架构基础框架 4.7.1 aeda902
    •   远程请求 .SetQueries(obj, ignoreNullValue) 重载方法 4.7.3 #I5Z8KC
    •   远程请求 .GetCookies().GetSetCookies() 拓展方法 4.7.5 #I5ZY1L
    •   事件总线 .ReplaceStorerOrFallback 自定义事件源存储器方法,可在自定义初始失败时回退到默认值 4.7.6 #I602NU
    •   LoggingMonitor 输出 启动信息Cookies请求端源 信息 4.7.7 3037b04
    •   JSON 序列化 DateOnlyTimeOnly 类型转换器:.AddDateOnlyConverters().AddTimeOnlyConverters() 4.7.9 !657 47a5fcb
    •   HttpContext.ReadBodyContentAsync() 拓展方法重复读取 Body 内容 4.7.9 #I60IYU
  • 突破性变化

    •   所有脚手架支持 -f 指定 .NET 版本 4.7.6 #I603AZ
查看更改
# 创建 .NET5 版本
dotnet new furionapi -n 项目名称 -f net5

# 创建 .NET6 版本
dotnet new furionapi -n 项目名称 -f net6

# 创建 .NET7 版本
dotnet new furionapi -n 项目名称 -f net7
    •   适配 .NET 6.0.11.NET 7 4.7.5 7df3195
    •   所有脚手架至 .NET 7 4.7.5 7df3195
    •   LogContext 类型的所有方法至 Furion.Logging 命名空间下,解决空异常问题 4.7.3 #I5YOT3
查看更改

由:

var value = logContext.Get("Key");  // 过去如果 logContext == null 报错

改为:

using Furion.Logging;

var value = logContext.Get("Key"); // 新版本不会报错,且 value = null
    •   旧版本定时任务为 弃用 状态(一周内发布新版),如需取消警告在 .csproj 中添加 <NoWarn>0618</NoWarn> 4.7.9 0ff3ac0
  • 问题修复

    •   生成 JWT Token 时间戳和自动刷新逻辑在高并发下检查有效性不够精确问题,原因是时间戳丢掉了毫秒部分 4.7.0 3c0c017
    •   IDatabaseLoggingWriter 实现类中输出日志导致死循环问题 4.7.0 30dea0c
    •   规范化结果 OnResponseStatusCodes 方法在 Response 已完成写入时设置出现异常问题 4.7.2 #I5YBHL
    •   L.SetCulture("zh-CN");Response 已完成写入时设置出现异常问题 4.7.2 #I5YBHL
    •   动态 WebAPI 在类上配置 [Route] 特性且包含 [action] 模板导致生成错误接口路径 4.7.2 #I5YEZQ
    •   启用二级虚拟目录 AppSettings:VirtualPath 导致 swaggerminiprofile 加载失败 4.7.3 #I5Z8RM
    •   LoggingMonitor 监听带有 [FromServices] 的方法参数或接口类型参数出错 4.7.7 3037b04
    •   HttpRequest 通过 .ReadBodyContentAsync() 读取不到 Body 问题 4.7.9 #I60IYU
  • 其他更改

    •   JSON Schema 配置,新增日志更多参数提醒 4.7.0 74bee56
    •   日志记录时间格式默认输出带 7位 的毫秒值 4.7.1 aeda902
    •   所有脚手架默认启用 单文件/独立部署 配置 4.7.7 1277f53
  • 文档

    •   IIS 回收问题解决方案文档
    •   远程请求获取 Cookies 文档
    •   LoggingMonitor 写入数据库文档
    •   JSON 序列化 DateOnlyTimeOnly 类型处理文档
    •   HttpContext 读取 Body 内容文档
    •   PM2 配置文件 json 部署文档
    •   日志记录文档、定时任务文档、远程请求文档、脚手架文档
  • 特别贡献


v4.6.9(已发布)

版本细节
  • 新特性

    •   LoggingMonitor 支持 FileResult 类型监听 4.6.0 bf9c0b1
    •   LogMessage 结构 UseUtcTimestamp 字段,解释日志记录时间格式是 UTC 还是 LOCAL 时间 4.6.1 aab0371
    •   事件总线模块重试失败后支持回调 4.6.1 #I5UVMV
    •   LoggingMonitor 支持序列化忽略指定属性名或属性类型 4.6.1 81c6343
    •   long 序列化丢精度的 JsonConvert 内置转换器,.AddLongTypeConverters() 4.6.5 #I5VJHC aded58d
    •   app.EnableBuffering() 拓展,解决 Request.Body 不能重复读问题 4.6.5 aded58d
    •   支持特别接口使用特定的序列化规则 4.6.6 797b0bf
    •   LoggingMonitor 自动解析 JWT 时间戳为时间格式 4.6.8 9e31b0b
  • 突破性变化

    •   适配 .NET 6.0.10.NET 7 RC2 4.6.2 6bb2fad
    •   内置 Microsoft.AspNetCore.Mvc.NewtonsoftJson 拓展,原因是太多人使用了 4.6.5 aded58d
    •   "some log".SetCategory(name) 拓展方法 4.6.0 ec4838c
    •   DateOnlyJsonConverterDateOnlyOffsetJsonConverter 处理 4.6.5 aded58d
    •   事件总线触发处理程序的逻辑,由过去的 foreach 改为 Parallel.ForEach,吞吐量提升近 4 倍 4.6.4 7384c9c
    •   .AddDateFormatString() 名称为 .AddDateTimeTypeConverters() 4.6.5 aded58d
    •   重构日志模块设置上下文数据功能 4.6.0 1c198ee
查看更改

由于过去版本设置日志上下文有多线程异常和堆内存溢出风险,所以重新设计了日志上下文的写法。

由:

_logger.ScopeContext(ctx => ctx.Set("Name", "Furion").Set("UserId", 10))
.LogInformation("我是一个日志 {id}", 20);

改为:

using (var scope = _logger.ScopeContext(ctx => ctx.Set("Name", "Furion").Set("UserId", 10)))
{
_logger.LogInformation("我是一个日志 {id}", 20);
}

// 也可以简写
using var scope = _logger.ScopeContext(ctx => ctx.Set("Name", "Furion").Set("UserId", 10));
_logger.LogInformation("我是一个日志 {id}", 20);
    •   远程请求 .SetTimeout[Timeout] 配置方法,采用全局统一配置 4.6.4 7384c9c
查看更改

默认情况下,HttpClient 请求超时时间为 100秒,可根据实际情况进行设置:

// 配置默认 HttpClient
options.AddHttpClient(string.Empty, c =>
{
c.Timeout = TimeSpan.FromMinutes(2);
});

// 配置特定客户端
options.AddHttpClient("github", c =>
{
c.Timeout = TimeSpan.FromMinutes(2);
});
  • 问题修复

    •   4.5.9+ 版本新增的 IncludeScopes 配置导致日志上下文失效 4.6.0 4a76841
    •   多个 sql 共用 DbParameters 出现冲突问题 4.6.0 #I5UO2H
    •   高频率写入日志导致堆内存溢出的异常问题 4.6.0 #I5UJRS
    •   框架内部所有使用 .CreateLogger 创建的日志对象无法应用上下文问题 4.6.0 ec4838c
    •   修复远程请求不能在 Worker Serivce 中进行构造函数注入,原因是注册为 Scope 范围作用域 4.6.3 974f835
    •   个别服务器的 SQL Server 不支持 TLS 1.2 协议问题 4.6.3 974f835
    •   .ToDictionary() 拓展不支持 JObject 类型问题 4.6.5 #I5VJHC a11bf8d
    •   LoggingMonitor 处理 long 类型丢精度问题 4.6.5 #I5VJHC aded58d
    •   动态 WebAPIclass 类型上贴 [ApiDescriptionSettings(false)] 导致接口 404 问题 4.6.7 #I5WQ18
    •   超高频率下发送事件总线消息,但是 GC 来不及回收导致内存和 CPU 爆掉问题 4.6.8 dbc7935
    •   JWT 模块自动刷新 Token 达到临界值时导致自动刷新失败,并返回错误的 401 状态码 4.6.8 #I5WXHZ
    •   自动生成 vue/react/angular 客户端工具库错误处理 Token 问题 4.6.8 #I5WXHZ
    •   远程请求没有正确处理 数组和集合 类型的 url 参数 4.6.9 #I5XIQ4
    •   自定义 Tenant 实体且包含 TenantId 属性且没有继承 EntityBase/Entity 基类出现 The entity type 'Tenant' requires a primary key to be defined 4.6.9 #I4UM3E
  • 其他更改

    •   LoggingMonitor 返回值类型是 泛型 时获取 FullName 带程序集签名问题 4.6.2 f0aaec6
    •   优化远程请求性能,添加复用池的机制,避免频繁销毁创建 4.6.4 7384c9c
  • 文档

    •   远程请求设置客户端生命周期配置文档和新超时配置文档
    •   JSON 序列化处理 long 类型说明文档
    •   JSON 反序列化 DateTimeOffset 类型个别格式出错问题解决方案文档
    •   Worker Service 实现 串行 操作文档
    •   关闭 .NET Core 底层日志和远程请求日志文档
    •   规范化结果支持特定接口配置独立序列化配置文档
    •   日志记录文档、事件总线文档、数据库入门文档、JSON 序列化文档、远程请求文档、安全授权文档、生成前端请求代理文档

v4.5.9(已发布)

版本细节
  • 新特性

    •   .AddConsoleFormatter() 拓展简化控制台日志模板配置 4.5.0 #I5TCMO
    •   控制台和文件日志时间默认显示 星期几 4.5.1 #I5TKL5
    •   控制台和文件日志支持配置 options.DateFormat 日期格式化 4.5.1 #I5TKL5
    •   控制台日志带颜色输出,比如高亮 日志级别 4.5.1 #I5TKL5
    •   控制台格式化配置 options.WriteHandler 完全自定义配置 4.5.2 7fb3036
    •   日志输出 JSON 格式化配置 4.5.2 #I5TWC1 #I5OUT1
    •   数据库日志写入独立日志模板配置、独立日期格式配置 4.5.2 #I5TWC1
    •   LogMessage 结构类 LogDateTimeThreadIdState 属性 4.5.2 #I5TWC1
    •   LoggingMonitor 可配置 JsonWriterOptions 属性 4.5.4 #I5U375
    •   Log.ScopeContext"some log".ScopeContext 拓展 4.5.4 8129693
    •   新增 HttpContext.SetTokensOfResponseHeaders 拓展 4.5.7 3775e65
    •   新增远程请求支持 Stream 文件格式上传 4.5.8 #I5UF3I
    •   日志模块可配置是否启用上下文功能 IncludeScopes 属性 4.5.9 #I5UJRS
    •   LoggingMonitor 日志筛选 WriteFilter 配置 4.5.9 6f06f12
  • 突破性变化

    •   😊 Furion 框架文档地址为 https://furion.baiqian.ltd 4.5.4 2e3d80e
    •   LoggingMonitor 底层逻辑,移除原来的 .ScopeContext 存储监听信息设计 4.5.2 #I5TWC1
    •   主机未启动时构建服务的操作权限,此操作会导致内存激增,受影响方法: App.GetOptions 系列和 App.GetServiceScoped.Create 4.5.4 #I5U0A4 8129693
查看更改

近期发现许多开发者在主机还未启动时解析服务,这是非常不正确的行为,会导致启动时内存激增甚至溢出,常见的错误有:

  • 在启动的时候通过 Scoped.Create 创建作用域
  • 在启动的时候通过 App.GetOptions 获取选项对象
  • 在启动的时候通过 App.GetService<T> 解析服务

正确的做法是,启动的时候禁止使用 Scoped.CreateApp.GetService<T>

如需启动时获取配置应该通过:App.GetConfig<TOptions>("配置节点", true) 替代 App.GetOptions<TOptions>()

  • 问题修复

    •   字符串日志拓展带泛型方法不能正确显示 CategoryName 日志类别 4.5.0 #I5TBKL
    •   控制台日志设置了 .ScopeContext 无效问题 4.5.2 7fb3036
    •   LoggingMonitor 同时配置了局部和全局日志监听触发两次问题 4.5.2 a1a97e8
    •   v4.4.8+ 版本更新导致远程请求在个别情况下出现并发问题 4.5.2 #I5TWL3
    •   LoggingMonitor 配置了 ReturnValueThreshold 之后 Json 被截断引发有效性检测异常 4.5.4 #I5U375
    •   LoggingMonitor 不支持 DataTableDataSetTuple 等类型问题 4.5.5 #I5U3VO
    •   v4.5.2+ 版本升级后出现启动时使用 App.GetOptons<TOptions> 异常问题 4.5.6 #I5U4OC f9a6587
    •   app.UseInject(action) 导致死循环 4.5.7 !608
    •   LoggingMonitor 报空引用异常问题 4.5.8 #I5UGCA !610
    •   并发情况下设置日志上下文出现偶然性空引用问题 4.5.9 #I5UJRS
  • 其他更改

    •   文件日志默认模板,默认对日志时间进行格式化并显示星期几 4.5.1 #I5TKL5
    •   脚手架代码,默认启用 services.AddConsoleFormatter() 4.5.1 #I5TLI6
    •   Serve.Run() 代码,默认启用 services.AddConsoleFormatter() 4.5.1 #I5TLI6
    •   减少 MiniProfile 不必要的监听,只在 Swagger 页面请求才监听 4.5.7 697ef51
    •   日志模块所有日志时间默认为 24小时制,过去是 12小时制 4.5.9 !612
  • 文档

    •   选项监听出现触发多次的解决方案 #I5T9PR
    •   日志记录文档、动态 WebAPI 文档、选项文档、HttpContext 文档、远程请求文档
  • 本期亮点

    1. 支持日志配置 JSON 格式化输出
查看更改
// 控制台
services.AddConsoleFormatter(options =>
{
options.MessageFormat = LoggerFormatter.Json;
});

// 文件
services.AddFileLogging("mytemplate.log", options =>
{
options.MessageFormat = LoggerFormatter.Json;
});

// 数据库
services.AddDatabaseLogging<DatabaseLoggingWriter>(options =>
{
options.MessageFormat = LoggerFormatter.Json;
});
    1. 支持 LoggingMonitor 输出 JSON 格式
查看更改
  1. 全局/局部启用 Json 输出配置
// 全局
services.AddMonitorLogging(options =>
{
options.JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson;
});

// 局部
[LoggingMonitor(JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson)]
关于 JsonBehavior

只有设置为 JsonBehavior.OnlyJson 时才不会输出美观的日志。

  1. 写入存储介质
using Furion.Logging;

namespace Your.Core;

public class DatabaseLoggingWriter : IDatabaseLoggingWriter
{
// 支持构造函数注入任何实例,会自动释放任何服务,比如注入 IRepository,或者 SqlSugarClient
public DatabaseLoggingWriter()
{
}

public void Write(LogMessage logMsg, bool flush)
{
// 如果 JsonBehavior 配置为 OnlyJson 或者 All,那么 Context 就包含 loggingMonitor 的值
// 如果 JsonBehavior 配置为 OnlyJson,那么可直接通过 logMsg.Message 获取结果就是 json 格式
if (logMsg.LogName == "System.Logging.LoggingMonitor")
{
var jsonString = logMsg.Context.Get("loggingMonitor");
}

// 这里写你任何插入数据库的操作,无需 try catch
}
}

Json 输出格式如下:

{
"controllerName": "test-logger",
"controllerTypeName": "TestLoggerServices",
"actionName": "person",
"actionTypeName": "GetPerson",
"areaName": null,
"displayName": "Furion.Application.TestLoggerServices.GetPerson (Furion.Application)",
"localIPv4": "0.0.0.1",
"remoteIPv4": "0.0.0.1",
"httpMethod": "GET",
"requestUrl": "https://localhost:5001/api/test-logger/person/2",
"refererUrl": "https://localhost:5001/api/index.html?urls.primaryName=数据库操作演示",
"environment": "Development",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.53",
"requestHeaderAuthorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY2NDQ1MDUwNSwibmJmIjoxNjY0NDUwNTA1LCJleHAiOjE2NjQ0NTE3MDUsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.-xocNcDQGoXClceoVU5QAHIkTcOZ7ZXo0hEbzghDfFI",
"timeOperationElapsedMilliseconds": 55,
"authorizationClaims": [
{
"type": "UserId",
"valueType": "integer",
"value": "1"
},
{
"type": "Account",
"valueType": "string",
"value": "admin"
},
{
"type": "iat",
"valueType": "integer",
"value": "1664450505"
},
{
"type": "nbf",
"valueType": "integer",
"value": "1664450505"
},
{
"type": "exp",
"valueType": "integer",
"value": "1664451705"
},
{
"type": "iss",
"valueType": "string",
"value": "dotnetchina"
},
{
"type": "aud",
"valueType": "string",
"value": "powerby Furion"
}
],
"parameters": [
{
"name": "id",
"type": "System.Int32",
"value": 2
}
],
"returnInformation": {
"type": "Furion.UnifyResult.RESTfulResult`1[[System.Object, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]",
"actType": "Furion.Application.Persons.PersonDto",
"value": {
"StatusCode": 200,
"Data": {
"Id": 2,
"Name": null,
"Age": 0,
"Address": null,
"PhoneNumber": null,
"QQ": null,
"CreatedTime": "0001-01-01T00:00:00+00:00",
"Childrens": null,
"Posts": null
},
"Succeeded": true,
"Errors": null,
"Extras": null,
"Timestamp": 1664450517341
}
},
"exception": {
"type": "System.DivideByZeroException",
"message": "Attempted to divide by zero.",
"stackTrace": " at Furion.Application.TestLoggerServices.测试日志监听8(Int32 id) in D:\\Workplaces\\OpenSources\\Furion\\samples\\Furion.Application\\TestLoggerServices.cs:line 78\r\n at lambda_method103(Closure , Object , Object[] )\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)\r\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)"
},
"validation": {
"errorCode": null,
"originErrorCode": null,
"message": "出错了啊。。。。"
}
}
    1. 支持远程请求上传文件 Stream
查看更改
  1. 单文件上传
  • 字符串方式
var fileStream = new FileStream("image.png", FileMode.Open);

var result = await "https://localhost:44316/api/test-module/upload-file"
.SetContentType("multipart/form-data")
.SetFiles(HttpFile.Create("file", fileStream, "image.png")).PostAsync();

var fileName = await result.Content.ReadAsStringAsync();

await fileStream.DisposeAsync();
  • 代理方式
var fileStream = new FileStream("image.png", FileMode.Open);

var result = await _http.TestSingleFileProxyAsync(HttpFile.Create("file", fileStream, "image.png"));
var fileName = await result.Content.ReadAsStringAsync();

await fileStream.DisposeAsync();
  1. 多文件上传
  • 字符串方式
var fileStream = new FileStream("image.png", FileMode.Open);

var result = await "https://localhost:44316/api/test-module/upload-muliti-file"
.SetContentType("multipart/form-data")
.SetFiles(HttpFile.CreateMultiple("files", (fileStream, "image1.png"), (fileStream, "image2.png"))).PostAsync();
var fileName = await result.Content.ReadAsStringAsync();

await fileStream.DisposeAsync();
  • 代理方式
var fileStream = new FileStream("image.png", FileMode.Open);

var result = await _http.TestMultiFileProxyAsync(HttpFile.CreateMultiple("files", (fileStream, "image1.png"), (fileStream, "image2.png")));
var fileName = await result.Content.ReadAsStringAsync();

await fileStream.DisposeAsync();
  1. 还支持 BytesStream 混合
var fileStream = new FileStream("image.png", FileMode.Open);
var bytes = File.ReadAllBytes("image.png");

var httpFile = new HttpFile
{
Name = name,
Bytes = bytes,
FileStream = fileStream,
FileName = fileName
};

var result = await "https://localhost:44316/api/test-module/upload-file"
.SetContentType("multipart/form-data")
.SetFiles(httpFile).PostAsync();

var fileName = await result.Content.ReadAsStringAsync();

await fileStream.DisposeAsync();
    1. LoggingMonitor 全局过滤
查看更改
services.AddMonitorLogging(options =>
{
options.WriteFilter = (context) =>
{
// 获取控制器/操作描述器
var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;

// 你的逻辑....,不需要拦截返回 false,否则 true

return true;
};
});

v4.4.9(已发布)

版本细节
  • 新特性

    •   友好异常可控制是否输出错误日志配置 LogError: true 4.4.0 #I5PKJH
    •   DateOnlyJsonConverterDateOnlyOffsetJsonConverter 序列化转换器 !565
    •   事件总线 LogEnabled 配置,可控制是否输出服务日志 #I5QLY5
    •   可实现任何多套规范化结果功能,支持特定控制器,特定方法 #I5QZ37
    •   ILoggerFactory 日志工厂动态批量添加文件日志拓展 #I5R9PO
    •   App.GetCommandLineConfiguration(args) 解析命令行参数静态方法 803542c
    •   Sql 代理支持返回受影响行数 #I5REJ9
    •   任意自定义日志文件名支持滚动日志删除功能 #I5RFBQ
    •   .pcd 图片类型 MIMEimage/x-photo-cd 支持 5fafc84
    •   默认日志输出当前线程 Environment.CurrentManagedThreadId b8fe2cd
    •   app.UseInject(Action<UseInjectOptions>) 重载方法,简化配置 4.4.8 0b645fe
  • 突破性变化

    •   框架适配 .NET 6.0.9.NET 7.0 RC1 be5b40 1eee77b
    •   远程请求 .SetBodyBytes.SetFiles #I5PMS5 #I5PIYI
    •   FS.InitialContentTypeProvider() 名称为 FS.GetFileExtensionContentTypeProvider() 5fafc84
    •   远程请求 [BodyBytes] 设计,采用 HttpFile 方式 #I5PMS5 #I5PIYI
查看更改
public interface IHttp : IHttpDispatchProxy
{
[Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]
Task<HttpResponseMessage> PostXXXAsync(HttpFile file);

// 支持多个文件
[Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]
Task<HttpResponseMessage> PostXXXAsync(HttpFile[] files);

// 支持多个文件
[Post("https://www.furion.icu/upload", ContentType = "multipart/form-data")]
Task<HttpResponseMessage> PostXXXAsync(IList<HttpFile> files);
}
// bytes 可以通过 File.ReadAllBytes(文件路径) 获取
var res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")
.SetFiles(HttpFile.Create("file", bytes, "image.png")).PostAsync();

// 支持多个文件
var res = await "https://www.furion.icu/upload".SetContentType("multipart/form-data")
.SetFiles(HttpFile.CreateMultiple("files", (bytes, "image1.png"), (bytes, "image2.png"))).PostAsync();
    •   所有的 AddInjectUseInject 参数设计 #I5QCF0
查看更改
public void ConfigureServices(IServiceCollection services)
{
services.AddInject(options =>
{
options.ConfigureSwaggerGen(gen =>
{
// ...
});
});
}
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseInject(configure: options =>
{
options.ConfigureSwagger(swg =>
{
// ...
});

options.ConfigureSwaggerUI(ui =>
{
// ...
});
});
}
    •   远程请求所有 xxxAsStreamAsync 返回值 #I5QVEB
查看更改

由:

var stream = await "https://www.furion.icu/".GetAsStreamAsync();

改为:

var (stream, encoding) = await "https://www.furion.icu/".GetAsStreamAsync();
    •   .Inject() 支持配置更多参数,开放底层更多权限 4.4.9 1182283
查看更改
.Inject((builder, options) => {
options.ConfigureAppConfiguration((context, config) =>
{

});
options.ConfigureServices((context, services) =>
{

});
});
  • 问题修复

    •   远程请求代理模式非泛型参数导致数组溢出问题 #I5Q3SN
    •   LoggingMonitor 客户端 IP 记录错误 #I5QCU1 !562
    •   远程请求响应报文中包含 charset=gbk 进行序列化后乱码问题 #I5QVEB
    •   文件日志断电时丢失日志问题 db7d51b
    •   动态 WebAPI 或控制台贴了 [ApiDescriptionSettings(Tag = "")] 标签之后导致注释丢失 #I5REVF #I5RE4J
    •   启用数据库日志但是没有配置配置文件出现空异常问题 33817be
    •   控制台日志过滤无法过滤默认主机日志问题 33817be
    •   脚手架错误的日志配置问题 33817be
    •   高频压测情况下写日志并设置日志上下文导致并发更新出现 System.AggregateException 异常问题 #I5RFBQ
    •   日志文件名因 WindowsLinux 路径分隔符不一致导致日志文件创建失败问题,Linux 只支持 / 不支持 \ #I5RFBQ
    •   Oops.Oh/Bah 设置 .WithData 之后无效问题 !580
    •   基于 Redis 重写事件存储器序列化 IEventSource 实例异常问题 4.4.7 3e45020
    •   使用 Log 静态类超高频率下写日志导致 CPU 激增问题 4.4.7 #I5SDK5
    •   远程请求超高频率下发送请求导致 CPU 激增问题和异常问题 4.4.8 #I5SJJR
    •   集成第三方配置中心时获取的不是最新数据问题 4.4.9 2cdef6b
  • 其他更改

    •   JWTEncryption 静态类,支持无需注册 services.AddJwt() 使用 #I5PPKE #I5POLZ
    •   事件总线默认日志类名为 System.Logging.EventBusService #I5QLY5
  • 文档

    •   .NET6 升级 .NET7 文档
    •   ASP.NET 7 集成文档
    •   集成第三方配置中心文档 4.4.9
    •   第三方事件总线和 Furion 集成文档 4.4.9
    •   事件总线集成 Kafka 文档 #I5P5UG
    •   友好异常文档、日志记录文档、远程请求文档、依赖注入文档、即时通讯文档、事件总线文档、Worker Service 文档、单元测试文档、入门指南文档、数据库新增文档

v4.3.9(已发布)

版本细节
  • 新特性

    •   AppSettings 配置的 ExcludeAssemblies 属性,支持忽略指定程序集扫描 7b7747f
    •   Oops.OhOops.Bah 支持设置额外数据 .WithData(data) #I5O38E
    •   定时任务 Crontab.GetSleepMilliseconds(baseTime) 获取下一个发生时间的时间差 d024fae
    •   友好异常默认打印异常日志,避免生产环境漏掉重要异常信息 6e3a5bd
    •   日志静态类 Log.CreateLoggerFactory() 静态方法 75c672a
    •   多语言 SharedResource 模式,避免硬编程 18e80c7
    •   事件总线 MessageCenter 静态类,解决从 Fur v1.x 版本升级问题 a29fc7c
    •   组件化 IWebComponent 模式,支持 .NET5+ 08a44c3
    •   远程请求设置自己的 HttpClient 功能 #I5PBR3 !545
    •   LoggingMonitor 支持添加更多自定义配置 #I5PEPA
    •   LoggingMonitor 可配置 WithReturnValueReturnValueThreshold #I5PFJ1 #I5PFOW
    •   LoggingMonitor 可配置 MethodsSettings 更多信息 #I5PFJ1 #I5PFOW
查看更改
Serve.Run(RunOptions.Default
.AddWebComponent<XXXWebComponent>());

public class XXXWebComponent : IWebComponent
{
public void Load(WebApplicationBuilder builder, ComponentContext componentContext)
{
// ....
}
}
  • 突破性变化

    •   Furion 程序集 PublicKeyToken 强签名 26b12c0
    •   事件总线 IEventBusFactory 事件工厂方法 AddSubscriber -> SubscribeRemoveSubscriber -> Unsubscribe a29fc7c
    •   .AddInject().UseInject() 配置选项名称,移除 Configure 后缀 b6953cd
    •   远程请求 请求拦截响应拦截异常拦截 委托签名,新增 HttpClient 参数 #I5OWBO
查看更改
[Interceptor(InterceptorTypes.Request)]
static void OnRequest(HttpClient client, HttpRequestMessage req)
{
}

[Interceptor(InterceptorTypes.Response)]
static void OnResponsing(HttpClien client, HttpResponseMessage res)
{
}

[Interceptor(InterceptorTypes.Exception)]
static void OnException(HttpClient client, HttpResponseMessage res, string errors)
{
}
  • 问题修复

    •   生成包含 中文JWT Token 解密后出现乱码问题 #I5O397
    •   HttpRequestMessage 拓展中追加查询参数时的空引用异常 #I5PENW !547
    •   日志模块配置多个 IDatabaseLoggingWriter 只有一个生效 #I5PFQ2 #I5PFJ1
  • 其他更改

    •   默认输出文件日志模板,使其更加美观 #1518cf3
    •   默认规范化结果验证处理也支持状态码设置 2eb9390
    •   SqlSugarCore 拓展包和脚手架至 5.1.2.6 版本 #I5PCXK
    •   JSON Schema 关于 LoggingMonitor 更多配置 #I5PFJ1
  • 文档

    •   RabbitMQ 事件总线文档
    •   AppSettings 配置文档、事件总线文档、多数据库配置文档、日志文档、定时任务文档、MessageCenter 文档、远程请求文档、组件化文档、入门指南、多语言文档。

v4.2.13(已发布)

  • 新特性

    •   事件总线工厂,支持运行时动态添加订阅程序和移除订阅程序 #I5NNQX
    •   事件总线 [EventSubscribe] 事件 Id 支持正则表达式匹配 #I5NNQX
    •   事件总线 [EventSubscribe] 支持局部失败重试配置 #I5NNQX
    •   Log 全局静态类,方便随时随地记录日志 ba9b1f1
    •   事件总线 options.AddSubscriber(Type) 重载 42446078
    •   ValidationMetadata 类型 FirstErrorPropertyFirstErrorMessage 属性 #I5MFJT
    •   Serve.Run() 模式 WithArgs(args) 方法 #I5MOJB
    •   [UnitOfWork] 分布式事务 TransactionScope 支持 #I5MRTY
    •   16 位 MD5 加密支持 #I5N8RC
  • 突破性变化

    •   Scoped.Create(async (f,s) => {}) 异步创建作用域方法名称为 CreateAsync,避免一些情况下无法区分,同步方法不变 #I5N9XY
查看更改

由:

// Scoped.CreateUow 一样
await Scoped.Create(async (f, s) => {});

改为:

// Scoped.CreateUowAsync 一样
await Scoped.CreateAsync(async (f, s) => {});
    •   .NET 6.0.8.NET 7 Preview 7 842d4f7
    •   [LoggingMonitor] 命名空间为 System,因为使用频率越来越高 b879861
    •   在非 Web 环境中不正确使用字符串拓展方法检测机制 6389cbd
    •   所有 .Default 静态属性为 .Default() 方法 6389cbd
    •   工作单元 IUnitOfWork 所有方法参数类型,由 ActionExecutingContextActionExecutedContext 改为 FilterContext #I5MHX5
查看更改
public interface IUnitOfWork
{
void BeginTransaction(FilterContext context, UnitOfWorkAttribute unitOfWork);

void CommitTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork);

void RollbackTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork);

void OnCompleted(FilterContext context, FilterContext resultContext);
}
  • 问题修复

    •   日志上下文数据多次写入被清空问题以及数据库日志出现异常后停止写入 #I5LIWF
    •   个别情况下跨域默认配置的响应缓存导致嵌入式资源异常问题 7a57efe
    •   远程请求传入不合法的请求报文头数据触发校验失败问题 #I5LPFE
    •   多线程中使用静态日志写数据库日志导致连接池耗光问题 8d5cdd6
    •   EFCore 6.0 之后 IModelCacheKeyFactory 接口方法改变导致分表分库异常问题 #I5MCZ6 EFCore#25154 EFCore!3305
    •   ValidationMetadata 对象 Message 字符串类型出现 \"\" 问题 #I5MFJT
    •   [IfException] 覆盖 Oops.Oh/Bah 错误消息问题 4bbd854
    •   数据库日志写入循环写入和频繁创建数据库连接池问题 9ce214c
    •   Razor Pages 不支持全局异常拦截问题 #I5MHX5
    •   Razor Pages 不支持全局数据验证问题 #I5MHX5
    •   Razor Pages 不支持工作单元 [UnitOfWork] 问题 #I5MHX5
    •   Razor Pages 不支持 EFCore 自动 SaveChanges 问题 #I5MHX5
    •   Blazor Serverv4.2.2 版本更新导致的问题 #I5MNFN
    •   [IfException] 不支持多语言配置问题 #I5MPN7
    •   通过 services.AddMvcFilter<LoggingMonitorAttribute>() 方式注册无效问题 8d1477d
    •   事件总线默认 Channel 管道初始化时机过晚问题,解决部分第三方依赖使用问题 #I5MM3O
    •   主机停止时写入日志异常问题 #I5N7S2
    •   数据库上下文手动释放导致 AutoSaveChange 特性出现释放异常问题 #I5NFWC
    •   [LoggingMonitor] 循环引用序列化问题 #I5NRT9
    •   远程请求传入 null Body 参数抛出空异常问题 #I5NTUE
    •   事件总线默认开启模糊匹配(正则表达式)导致不必要的订阅 #I5NVOP
  • 其他更改

    •   事件总线默认 Channel 管道初始化时机,解决部分第三方依赖使用问题 #I5MM3O
    •   底层迭代改进优化
    •   规范化文档获取控制器、方法分组、标签信息 66d8d54
  • 文档

    •   全局日志静态类 Log 文档 ba9b1f1
    •   Nuget 本地测试包文档
    •   日志文档、静态类文档、数据校验文档、Worker Service 文档、工作单元文档、依赖注入文档

v4.1.14(已发布)

  • 新特性

    •   Furion.Xunit 拓展包,正式实现 Xunit 单元测试完整支持 Furion 063a034e
    •   services.AddMonitorLogging() 日志监视器服务,支持非常灵活的日志操作 81df742
    •   Serve.Run(silence: true) 等一系列强大的静默启动功能 #I5JBSQ #I5J98T 7cced4
    •   SpecificationDocumentBuilder.GetOpenApiGroups() 方法获取底层的规范化接口分组信息 4ff03c5
    •   logger.ScopeContext() 配置日志上下文功能 #I5JC0D
    •   跨域配置 CorsAccessorSettings.SignalRSupport 配置选项,支持配置 SignalR 跨域 #I5JREM
    •   事件总线 UseUtcTimestamp 选项配置,可选择使用 DateTime.UtcNow 还是 DateTime.Now,默认是 DateTime.Now #I5JSEU
    •   规范化文档 [OperationId] 配置,解决自定义 Swagger UI 不能正确显示路由问题 #I5K1IB
    •   远程请求 IHttpDispatchProxy 方式全局拦截支持多态(继承) #I5K8FS
  • 突破性变化

    •   Furion.Xunit 拓展包,正式实现 Xunit 单元测试完整支持 Furion 063a034e
    •   Furion.Extras.DatabaseAccessor.SqlSugar 拓展插件中的 [SqlSugarUnitOfWork] 工作单元特性,将使用通用工作单元替换** 查看最新实现文档**
    •   Inject.Create() 方法,再也不需要了,框架提供了无敌强大的 Serve.Run() 静默启动方式 200848e
    •   Serve.RunConfigureConfiguration 方法参数,由 configuration => {} 改为 (environment, configuration) => {} 83c97bb
查看更改
// 由
Serve.Run(RunOptions.Default.ConfigureConfiguration(configuration => {

}));
// 改为:
Serve.Run(RunOptions.Default.ConfigureConfiguration((environment, configuration) => {

}));
  • 问题修复

    •   [LoggingMonitor] 异常消息日志级别为 Information 错误问题 ab46cdf
    •   新版本日志组件频繁提示文件占用问题,将文件独占锁改为共享锁 #I5J3S6
    •   配置数据库日志读写器为 EFCore 时控制台出现无限打印问题 #I5J474
    •   [LoggingMonitor] 针对 byte[] 类型参数输出过大问题 5380f35
    •   友好异常和规范化结果丢失了原始 ErrorCode 问题 #I5IX2R
    •   新版本日志组件自定义数据库读写器注入 IRepository 仓储导致死循环问题 #I5IX2R
    •   Mvc 默认手动验证和 Furion 全局验证冲突问题 2a06c39
    •   Serve.Run() 模式不支持 SuperSocket 第三方包问题,原生是支持的。186ca0a
    •   SignalR 跨域错误问题 #I5JREM
    •   [LoggingMonitor]Oops.OhOops.Bah 记录到了错误日志中,默认应该是 Information 且提供可配置 #I5JZ1H
    •   自定义 Swagger UI 之后个别 UI 要求必须配置 operationId,否则出现 guid 序号 #I5K1IB
    •   主动抛出 NotFoundResultNotFoundObjectResult 无效问题 #I5KALZ
    •   [LoggingMonitor] 解析方法参数但前端未传入时出现错误问题 #I5KC5P
    •   [LoggingMonitor] 无法序列化 IQueryable 返回值问题 #I5KJD1
    •   [LoggingMonitor] 不能记录全局验证错误问题 b44087d
    •   [LoggingMonitor] 存在注册顺序差异问题 b44087d
  • 其他更改

    •   底层的规范化文档 SpecificationDocumentBuilder 部分方法,提供更加便捷的第三方 Swagger UI 集成 10f0f01
  • 文档

    •   单元测试文档、入门指南文档、Worker Services 文档
  • 本期亮点

  1. Serve.Run() 彻彻底底支持全平台,提供非常强大的静默模式

启用静默模式可以实现无阻塞方式执行程序,而且还能体验完整的 Furion 功能。

查看更改
大革命

有了 Serve.Run() 静默模式后,Furion 彻彻底底支持全平台,不管你是 控制台、Web、桌面、移动、单元测试,集成测试,基准测试等等应用程序

Serve.Run(silence: true);

// 不会阻塞执行哦,而且从这里开始可以使用 Furion 任何功能,比如 App.Configuration....
Console.WriteLine("Hello, World!");
Console.ReadKey();

还有更多静默模式。

// RunOptions 方式
Serve.Run(RunOptions.DefaultSilence);

// LegacyRunOptions 方式
Serve.Run(LegacyRunOptions.DefaultSilence);

// GenericRunOptions 方式
Serve.Run(GenericRunOptions.DefaultSilence);
  1. 强大的 Furion.Xunit 单元测试、集成测试
查看更改
大革命

单元测试和集成测试是保证一个系统能够持续维护和稳定运行的必备技能,但是目前现有的单元测试组件无法直接集成 Furion 的功能,最常用的就是如何在单元测试中读取配置,以及如何进行依赖注入

在过去,Furion 只能不断的去调整,以至于适配第三方单元测试写法,搞得不伦不类!

所以,这一次不再妥协,Furion 推出自己的单元测试工具,可以让现有的单元测试如 Xunit 100% 支持 Furion 所有功能,全部保证一致的写法。

单元测试中初始化 Furion

using Furion.Xunit;
using Xunit.Abstractions;
using Xunit.Sdk;

// 配置启动类类型,第一个参数是 TestProgram 类完整限定名,第二个参数是当前项目程序集名称
[assembly: TestFramework("TestProject1.TestProgram", "TestProject1")]

namespace TestProject1;

/// <summary>
/// 单元测试启动类
/// </summary>
public class TestProgram : TestStartup
{
public TestProgram(IMessageSink messageSink) : base(messageSink)
{
// 初始化 Furion
Serve.Run(silence: true);
}
}

测试类支持完整依赖注入

using TestProject1.Services;
using Xunit;

namespace TestProject1;

public class UnitTest1
{
private readonly ICalcService _calcService;
public UnitTest1(ICalcService calcService)
{
_calcService = calcService;
}

[Fact]
public void 测试两个数的和()
{
Assert.Equal(3, _calcService.Plus(1, 2));
}
}

查看新版本单元测试文档

  1. 开放底层规范化文档分组接口,使得集成第三方 Swagger UI 更加容易,如集成 IGeekFan.AspNetCore.Knife4jUI 拓展:
查看更改
安装包

只需要在 YourPoject.Web.Core 层安装 IGeekFan.AspNetCore.Knife4jUI 即可。

3.1.1 Knife4jUI 独立版本配置

var routePrefix = "api";    // 定义 swagger 路由地址,如果是跟目录,设置 string.Empty 即可

app.UseKnife4UI(options =>
{
options.RoutePrefix = routePrefix; // 配置 Knife4UI 路由地址
foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups())
{
options.SwaggerEndpoint("/" + groupInfo.RouteTemplate, groupInfo.Title);
}
});

app.UseInject(routePrefix); // 配置 Furion 路由地址

3.1.2 Knife4jUISwagger 共存版本配置

app.UseKnife4UI(options =>
{
options.RoutePrefix = "newapi"; // 配置 Knife4UI 路由地址,现在是 /newapi
foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups())
{
options.SwaggerEndpoint("/" + groupInfo.RouteTemplate, groupInfo.Title);
}
});

app.UseInject(); // Furion 默认 api 地址为 /api

如需实现登录之后自动将 token 添加到头部可在登录接口 AfterScript 执行以下代码:

ke.global.setAllHeader(
"Authorization",
"Bearer " + ke.response.headers["access-token"]
);
  1. 提供强大的日志上下文功能
// 写法一
_logger.ScopeContext(ctx => ctx.Set("Name", "Furion").Set("UserId", 10))
.LogInformation("我是一个日志 {id}", 20);

// 写法二
_logger.ScopeContext(new Dictionary<object, object> {
{ "Name", "Furion" },
{ "UserId", 10 }
}).LogInformation("我是一个日志 {id}", 20);

// 写法三
_logger.ScopeContext(new LogContext {
// ....
}).LogInformation("我是一个日志 {id}", 20)

v4.0.0(重新起航)💖

不忘初心,感恩遇见,感恩信任

2020 年 09 月 01 日,一个叫 Fur 的开源项目在 Gitee 的襁褓中悄然诞生,她的出生仿佛带着某种使命,没有包袱,无限可能。

她缓缓的张开双眼,干净雪亮的眼睛似乎对这个世界充满了好奇,任何事物在她眼前晃过都像是直击灵魂的思想碰撞,这些在她看来都是非常宝贵的财富。她貌似有用不完的精力,一路汲取知识,升级打怪,不断奔跑,乐此不疲。

记得 2020 年 11 月 11 日的单身节,她迎来了“一岁(v1.0.0)”生日,自那以后,IT 这个大银幕上频繁出现她的身影,越来越多 .NET5 开发者转粉,像是告诉这个世界,她就是 IT 界大明星。

每一个明星都有一个好听的艺名,她当然也不例外,2020 年 11 月 20 日,经纪人百小僧为她起名为 Furion

2021 年 11 月 09 日起,她进入了每个孩子都经历过的叛逆期,年少轻狂喜新厌旧,抛弃了曾经支持她的 .NET5 粉丝们,投入到新的 .NET6 拥趸者怀抱中,自此过上了奢靡富足的生活。

但她过的不开心,时常在夜里想起 .NET5 的粉丝们,内心非常自责,但在双重工作压力下她毅然选择了忽视他们的诉求,仿佛他们就是累赘。

时间真的是好东西,曾经认为是对的,经过岁月的蹉跎历磨,渐渐的明白:不忘初心,方能始终。

这一次,不落下一人(.NET5.NET6,...,.NET N),携手共进,重新起航,感恩遇见,感恩信任。

  • 新特性

    • v4.0.0 支持 .NET5.NET6,...,.NET N,所有的 Furion 项目都能够升级到该版本,重新起航,实现大统。

v3.9.2(已发布,全新日志组件)

关于日志

日志模块是任何应用系统都必备的功能,可以说是最重要的模块!在 .NET 社区中有 Log4NETNLogSerilog 等日志组件,它们无一不是优秀的开源项目。

但由于这些日志组件历史悠久,内部兼容的 .NET 版本非常多,功能随着时间推移变得极其强大复杂,在实际项目使用中,发现每一个日志组件配置总是不那么友好,特别是在使用上不够简单

Furion 作为全栈开发框架,在过去版本并没有提供足以满足开发者需求的日志模块,转而推荐大家集成第三方组件,如 Serilog导致后续无法实现自定义功能和也增加了不少维护成本。

这一次,Furion 不再妥协,彻底重构了日志模块,实现日志功能/需求完全自主可控,提供给开发者几乎所有日志功能的需求!

Furion 的使用者们,是时候“更换”掉第三方日志组件,让我们一起迭代出更强更好的日志组件吧! 🍖

  • 新特性

    •   日志模块,内置写入控制台、文件、数据库功能,再也无需引入第三方日志了!日志源码
    •   强大的调试日志 [LoggingMonitor] 32dfc1
  • 突破性变化

    •   日志模块,内置写入控制台、文件、数据库功能,再也无需引入第三方日志了!日志源码
    •   TP.Wrapper 规范化日志模板算法,由过去的 [属性] 改为 ##属性##,解决 JSON 内容冲突问题 394ecec
    •   未来 Furion.Extras.Logging.Serilog 拓展将不再继续维护,因为 Furion 有强大的日志组件了!
  • 问题修复

    •   修复脱敏模块模型绑定个别情况下空异常问题 #I5IM5C
  • 文档

    •   日志文档、静态类文档、数据校验文档
  • 本期亮点

  1. 极易使用且强大的日志模块
查看更改
// 写入文件
services.AddFileLogging("logs/application.log");

// 写入数据库
services.AddDatabaseLogging<DatabaseLoggingWriter>();

查看更多日志文档

  1. 强大的 [LoggingMonitor] 调试日志
查看更改
using Furion.Logging;

namespace Furion.Application;

public class TestLoggerServices : IDynamicApiController
{
[LoggingMonitor]
public PersonDto GetPerson(int id)
{
return new PersonDto
{
Id = id
};
}
}

支持控制器、操作或全局注册拦截

输出日志为:

┏━━━━━━━━━━━  Logging Monitor ━━━━━━━━━━━
┣ Furion.Application.TestLoggerServices.GetPerson (Furion.Application)

┣ 控制器名称: TestLoggerServices
┣ 操作名称: GetPerson
┣ 路由信息: [area]: ; [controller]: test-logger; [action]: person
┣ 请求地址: https://localhost:44316/api/test-logger/person/11
┣ 来源地址: https://localhost:44316/api/index.html
┣ 浏览器标识: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62
┣ 客户端 IP 地址: 0.0.0.1
┣ 服务端 IP 地址: 0.0.0.1
┣ 服务端运行环境: Development
┣ 执行耗时: 31ms
┣ ━━━━━━━━━━━━━━━ 授权信息 ━━━━━━━━━━━━━━━
┣ JWT Token: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY1ODcxNjc5NywibmJmIjoxNjU4NzE2Nzk3LCJleHAiOjE2NTg3MTc5OTcsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.VYZkwwqCwlUy3aJjuL-og62I0rkxNQ96kSjEm3VgXtg

┣ UserId (integer)1
┣ Account (string): admin
┣ iat (integer)1658716797
┣ nbf (integer)1658716797
┣ exp (integer)1658717997
┣ iss (string): dotnetchina
┣ aud (string): powerby Furion
┣ ━━━━━━━━━━━━━━━ 参数列表 ━━━━━━━━━━━━━━━
┣ Content-Type:

id (Int32)11
┣ ━━━━━━━━━━━━━━━ 返回信息 ━━━━━━━━━━━━━━━
┣ 类型: Furion.Application.Persons.PersonDto
┣ 返回值: {"Id":11,"Name":null,"Age":0,"Address":null,"PhoneNumber":null,"QQ":null,"CreatedTime":"0001-01-01T00:00:00+00:00","Childrens":null,"Posts":null}
┗━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━

v3.8.9(已发布)

  • 新特性

    •   规范化结果 ExceptionMetadataValidationMetadata 都可以获取 ErrorCode 属性 #I5GJ6D
    •   ValidationMetadataStatusCode 属性 #I5HB5L
    •   远程请求对 Url 是否编码设置,[Get(WithEncodeUrl = false)]WithEncodeUrl(false) #I5GOBC
    •   更强大的 JWTEncryption.SecurityReadJwtToken('token') 读取解析 Token 静态方法 574eeb6
    •   ValiationTypes.Html 验证 Html 标签 #I5HBKC
    •   EFCore.NamingConventions 支持,可自定义生成表名,字段名风格,比如小驼峰,蛇形命名等 #I5HBEI
    •   INamedServiceProvider 命名服务提供器,可解析接口多实现 #I5HF98
    •   脱敏处理模块方法参数单个值处理 a22ec3c
    •   脱敏词库支持 | 分割词语 3106b1d
  • 突破性变化

    •   所有 .NET 依赖包至 6.0.7 版本
    •   Serilog.AspNetCore 包至 6.0.0 版本
    •   JWT Token 刷新逻辑 #I5GXML 574eeb6
    •   ExceptionMetadata 命名空间为 Furion.FriendlyException 3105d16
    •   Retry.Invoke(Func<Task>...) 为:Retry.InvokeAsync(Func<Task>...) 3b78999
    •   脱敏处理模块,大大提高性能和准确率,同时支持方法参数单个值处理 a22ec3c
  • 问题修复

    •   Rider 开发工具对同名脚手架 (EFCoreSqlSugar) 只显示一个问题 !518
    •   UnitOfWork 工作单元在 EFCore 中失效问题 #I5H0T3
    •   JWTToken 如果存在数组类型的值时,刷新 Token 后丢失了历史值 #I5GXML
    •   远程请求 WithEncodeUrl 无法在 [HttpMethod] 设置问题 574eeb6
    •   Serve.Run() 模式下添加自定义配置导致 EFCore 无法获取自定义配置文件问题 #I5GZ0F
    •   Oops.Bah 进入全局异常拦截器问题 #I5H47S
    •   AddDbPool/AddDb 扩展未根据配置 Key 路径读取问题 #I5H6S4 !520
    •   ValiationTypes.Url 正则表达式覆盖不全问题 #I5HBKC
    •   v3.5.x 版本导致集成 EFCore.NamingConventions 失效问题 #I5HBEI
    •   Swagger 长路由不支持问题以及 [Required] 配置 AllowEmptyStrings 无效问题 c014330
    •   远程请求上传文件时请求报文 boundaryContent-Disposition 设置不正确问题 #I5HEF0
    •   脱敏模块替换敏感词汇出现多替换问题 a22ec3c
  • 其他更改

    •   多语言默认处理逻辑,允许不配置任何语言,过去版本会报错 #I5GRD9 5077c5d
    •   规范化文档 Swagger 性能
    •   调整 MongoDB 仓储 TDocument 泛型约束 3f49055
  • 文档

    •   远程请求文档,日志记录文档、多数据库文档、PM2 部署文档、Visual Studio 高效率文档

v3.7.11(已发布)

  • 新特性

    •   Minimal API 应用支持:.AddInjectMini() #I4KOQ5
    •   跨域 WithExposedHeaders 默认配置 access-tokenx-access-token 42ebdfd
    •   脚手架默认启用 app.UseHttpLogging() HTTP 日志 42ebdfd
    •   FurionASP.NET Core 完整 json 配置的 JSON Schema 架构 JSON Schema
    •   Sql 代理支持返回单个类类型参数 1d7fb5b
    •   Sql 代理支持返回 ValueTuple 单个类类型参数 876a2f5
    •   组件化设计模块,支持比 AppStartup 更灵活便捷的设计 #components
    •   独立工作单元模块,支持任何第三方 ORM a02413d
    •   跨域 FixedClientToken 配置参数 bd01638
    •   throw Oops.Bah 可以手动触发规范化验证失败处理 83f0036
    •   FriendlyExceptionSettingsThrowBah 配置,可标记 Oops.Oh 不进入异常处理 76ffa7f
  • 突破性变化

    •   Minimal API 应用支持:.AddInjectMini() #I4KOQ5
    •   FurionASP.NET Core 完整 json 配置的 JSON Schema 架构 JSON Schema
    •   组件化设计模块,支持比 AppStartup 更灵活便捷的设计 #components
    •   独立工作单元单元模块,支持任何第三方 ORM a02413d
    •   DataValidationFilterFriendlyExceptionFilter,解决不支持手动抛出业务异常问题 83f0036
    •   .AddDb<>.AddDbPool<> 自定义委托参数签名,由 Action<DbContextOptionsBuilder> 改为:Action<IServiceProvider, DbContextOptionsBuilder>
查看更改
// 由:
options.AddDbPool<TDbContext>(DbProvider.MySql, opt => {
});
// 改为
options.AddDbPool<TDbContext>(DbProvider.MySql, (services, opt)=> {
})
  • 问题修复

    •  v3.6.3 版本依赖,执行原生 Sql 添加了参数校验导致存储过程执行错误问题 #I5ERMQ
    •   tools/cli.ps1 脚本工具出现数据库链接被占用问题
    •   JWTSettings 算法配置 JSON Schema 错误问题,感谢 @gitwentao #I5G27B !516
    •   基于策略授权在不配置 Policy 的情况下出现空异常问题 #I5EVF2
    •   启用数据库实体跟踪时导致新增实体多次查询数据库问题 #I4J2LZ
    •   不启用规范化结果导致验证失效,异常失效问题 cdb3f57
    •   验证异常和友好异常冲突问题 83f0036
    •   CentOS 7.9 系统部署无法指定命令 --urls 参数问题 8cc8ee
  • 其他更改

    •   脚手架所有 .json 文件,默认添加 JSON Schema 支持
  • 文档

    •   组件化启动文档
    •   Vue/React/Angular 请求代理文档
    •   JSON Schema 文档,支持配置智能提示和验证
    •   跨域文档、规范化文档、配置文档、日志文档、IIS 部署文档
  • 本期亮点

  1. 新增 JSON Schema 支持,所有 .json 文件支持智能提示和验证
查看更改
{
"$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",

"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.EntityFrameworkCore": "Information"
}
},
"AllowedHosts": "*"
}

查看更多 JSON Schema 文档

  1. 根据 Swagger 生成 Vue/React/Angular 前端请求代码

查看文档

  1. Sql 代理支持返回单个类类型参数
查看更改
public interface ISql : ISqlDispatchProxy
{
// 集合类型
[SqlExecute("select * from person")]
List<Person> GetPersons();

// 自 v3.7.3+ 版本支持返回单个类类型参数
[SqlExecute("select * from person where id=@id")]
Person GetPerson(int id);
}
  1. Sql 代理支持返回 ValueTuple 单个类类型参数
查看更改
public interface ISql : ISqlDispatchProxy
{
[SqlExecute(@"
select * from person where id =@id;
select * from person")]
(Person, List<Person>) GetData(int id); // 注意返回值是 `(Person, List<Person>)` 组合
}
  1. 支持 Minimal API 应用
查看更改

了解 Minimal API 应用

var builder = WebApplication.CreateBuilder(args).Inject();

// 注册 Minimal 服务
builder.Services.AddInjectMini();

var app = builder.Build();

app.UseHttpsRedirection();

app.UseInject(string.Empty);

app.MapGet("/hello", () =>
{
return "Hello, Furion";
});

app.Run();

v3.6.9(已发布,全新入口组件)

  • 新特性

    •   Serve.Run() 极简主机模式,真正实现极速入门。95cac5b
    •   TP.Wrapper(...) 拓展方法,主要用来生成规范化的日志模板 427999a
    •   项目类型为 <Project Sdk="Microsoft.NET.Sdk"> 的控制台项目 fb08a65
    •   BadPageResult 错误页面类型 !494
    •   [SchemaId] 特性,解决不同程序集相同的类名生成 SwaggerSchemaId 冲突问题 #I5D3CU
    •   远程请求 options.ApproveAllCerts() 忽略所有客户端证书拓展 eb7d18a
    •   判断是否是单文件环境部署静态属性 App.SingleFileEnvironment de556f0
    •   WebApplicationBuilder.UseSerilogDefault() 拓展 e02524c
  • 突破性变化

    •   项目类型为 <Project Sdk="Microsoft.NET.Sdk"> 的控制台项目 fb08a65
    •   Serve.Run() 极简主机模式,真正实现极速入门。95cac5b
    •   未启用规范化结果时,MVC 验证失败返回 BadPageResult() 页面类型 !494
  • 问题修复

    •   修复默认注册的 services.AddResponseCaching(); 服务导致 .axd 内嵌资源请求错误问题 !495
    •   Oracle 数据库执行 sql 必须要求命令参数和 sql 语言参数数量一致 #I5D057
    •   IHostService 类型不能自动注册问题,之前只扫描了 BackgroundService 派生类 968344
    •   国产芯片主机不能识别 dotnet run --urls 参数问题 6d4398
    •   远程请求上传文件不支持特定文件后缀问题,如 .pem 文件 ba42198
    •   一些程序集已破坏或程序集不完整导致主机无法启动问题 d2dc3e4
    •   远程请求传入 headers 时类型为 Dictionary<string, string> 导致转换异常问题 #I5DHL9
    •   Serilog 单文件发布不生成日志文件 I5DQ2B
  • 其他更改

    •   远程请求默认客户端不检查 SSL 证书 eb7d18a
    •   开放验证服务选项 SuppressModelStateInvalidFilter 属性为可配置 !494
  • 文档

    •   Serve.Run() 文档
    •   HttpContext 文档
    •   GlobalUsings 文档
    •   TP 全局静态类文档
    •   中间件文档、筛选器文档、审计日志文档
    •   跨域文档、远程请求文档
  • 精彩贡献

    • !494 优秀 Pull Request 辩论典范
  • 本期亮点

  1. 极速入门
查看更改
Program.cs
Serve.Run();

[DynamicApiController]
public class HelloService
{
public string Say()
{
return "Hello, Furion";
}
}

启动浏览器查看效果,惊呆了吗!

  1. 内置错误页
查看更改
using Furion.FriendlyException;

public IActionResult Add(Person person)
{
if(!ModelState.IsValid)
{
return new BadPageResult();
}
}
  1. Swagger 支持 Markdown
查看更改
/// <summary>
/// 测试 Markdown
/// </summary>
/// <remarks>
/// # 测试 `Markdown` 注释
///
/// ![](https://localhost:44316/images/logo.png)
///
/// ```cs
/// Serve.Run();
///
/// [DynamicApiController
/// public class HelloService
/// {
/// public string Say()
/// {
/// return nameof(Furion);
/// }
/// }
/// ```
///
/// 功能还不错!!!
///
/// | 商品 | 价格 | # 其他 |
/// |--------------|-----------|------------|
/// | Juicy Apples | 1.99 | *7* |
/// | Bananas | **1.89** | 5234 |
/// | Bananas | **1.89** | 5234 |
/// | Bananas | **1.89** | 5234 |
///
/// -----
///
/// # Furion 探索版
///
/// > 在过去一年,实现 `Furion` 从无到有,编写文档已逾百万字,过程心酸开源人自知。
/// >
/// > 这一路日夜兼程,嘲讽批评常伴眼耳,即便辛苦无奈、想过放弃,但为了那微不足道的存在感依然努力着。
/// >
/// > 当然,也收获了不少...越来越多拥趸者,越发精湛技术能力,更高层次思维模式,还有许多跨界跨行朋友。
/// >
/// > 在 《[开源指北] (https://gitee.com/opensource-guide/comments/)》中,我曾说道:“开源如同人的脸,好坏一面便知,缺点可能会受到嘲讽批评,优点也会收获赞扬尊重。别担心,他们正在塑造更好的你。”
/// >
/// > 所以,这一次重新起航,重塑 `Furion` 重塑自己。也许未来在某个 IT 圈但凡有人谈起 `.NET` 还能瞟到 `Furion` 的身影。
///
/// ---
///
/// 🎉 探索 Furion 未来更多可能性,实现无第三方依赖的版本,所有模块功能按需安装,按需加载。
///
/// - 作者:[百小僧] (https://gitee.com/monksoul)
/// - 日期:2021 年 08 月 30 日
///
/// ## 环境
///
/// - IDE :[Microsoft Visual Studio Enterprise 2022 Preview(64 位) 版本 17.0.0 Preview 3.1] (https://visualstudio.microsoft.com/zh-hans/vs/preview/)
/// - SDK :[.NET SDK 6] (https://dotnet.microsoft.com/download/dotnet/6.0)
/// - 语言:[C# 10](https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-10)
///
/// ## 包说明
///
/// - `Furion.Core`:无第三方依赖,可在 `.NET 6` 所有项目类型中运行。
/// - `Furion`:内部依赖 `Furion.Core` 且无第三方依赖,**聚焦 `Web` 应用**,采用共享框架 `<FrameworkReference Include="Microsoft.AspNetCore.App" />` 模式
/// </remarks>
public void MarkdownTest()
{
// ....
}

v3.5.7(已发布)

  • 新特性

    •   Options 选项属性支持自定义 Key 名称,[MapSettings("key")] #I5B2HN
    •   EventBus 模块事件 Id 支持枚举类型 2f328aa
    •   EventBus 模块发布者 PublishAsyncPublishDelayAsync 重载 2f328aa
    •   EventBus 模块拓展方法:Enum.ParseToString()String.ParseToEnum() 2f328aa
    •   FurionSqlSugar 脚手架 🆕🆕🆕 8d9293d
    •   Dapper 拓展全局配置委托 #I5AYFX
    •   sql 转实体支持多种命名策略(纯大写,纯小写,带下划线分割等等),如 Oracle 数据库 a90e245
    •   FS.InitalContentTypeProvider() 拓展方法,获取系统内所有支持的 Content-Type 文件提供器 6099900
  • 突破性变化

    •   彻底解决了 Furion 不能单文件发布的问题 7e8e0b7
  • 问题修复

    •   框架规范化文档 Swagger 不支持 Controller 派生类 api 路由问题,原生 ASP.NET 是支持的 29e47bc
    •   基于 Schema 多租户配置无效问题 6f820ce
    •   指定实体 [Table(schema:"dbo")] 特性后 Schema 无效问题 6f820ce
    •   数据库视图不支持 Schema 配置问题 6f820ce
    •   规范化结果极端情况下出现 空异常 问题 c9b0ef
  • 其他更改

    •   axios-utils.tsangular-utils.ts ,新增请求拦截携带刷新 Token 的时机判断 82f89bd
    •   规范化文档 Swagger 加载继承注释 <inheritoc /> 性能小优化 5f06880
    •   脚手架模板,新增 GlobalUsings.cs 模式
    •   对象映射默认支持忽略大小写 !486
  • 文档

    •   Furion 单文件发布文档
    •   Furion + SqlSugar 脚手架文档
    •   事件总线文档、选项文档、即时通讯文档、.NET5 升级 .NET6 文档、依赖注入文档、跨域文档、数据加解密文档
  • 本期亮点

  1. 事件总线 Id 支持枚举类型
查看更改
EventSubscribe("TO:DO")]  // 字符串类型
public async Task EventHandler1(EventHandlerExecutingContext context)
{
// ....
}

[EventSubscribe(YourEnum.Some)] // 枚举类型
public async Task EventHandler2(EventHandlerExecutingContext context)
{
var eventEnum = context.Source.EventId.ParseToEnum(); // 将事件 Id 转换成枚举对象
// ....
}
  1. 事件总线发布支持更简单调用
查看更改
// 旧版本
await _eventPublisher.PublishAsync(new ChannelEventSource("ToDo:Create", name));

// 新版本
await _eventPublisher.PublishAsync("ToDo:Create", name);
await _eventPublisher.PublishAsync(YourEnum.Some); // 也支持枚举
  1. 选项支持属性自定义配置 Key
查看更改
"AppInfo": {
"Name": "Furion",
"Version": "1.0.0",
"Company_Name": "Baiqian" // 可以和属性不一样
}
public class AppInfoOptions : IConfigurableOptions
{
public string Name { get; set; }
public string Version { get; set; }

[MapSettings("Company_Name")] // 支持自定义
public string Company { get; set; }
}
  1. 日志规范化模板
查看更改
// 生成模板字符串
var template = TP.Wrapper("Furion 框架", "让 .NET 开发更简单,更通用,更流行。",
"[作者] 百小僧",
"[当前版本] v3.5.3",
"[文档地址] https://furion.icu",
"[Copyright] 百小僧, Baiqian Co.,Ltd.");
Console.WriteLine(template);

输出结果

┏━━━━━━━━━━━  Furion 框架 ━━━━━━━━━━━
┣ 让 .NET 开发更简单,更通用,更流行。

┣ 作者: 百小僧
┣ 当前版本: v3.5.3
┣ 文档地址: https://furion.icu
┣ Copyright: 百小僧, Baiqian Co.,Ltd.
┗━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━


v3.4.2(已发布)

  • 新特性

    •   规范化文件 EnableAllGroups 功能,可以将多个分组合并到一个分组中 9277b98
    •   angular-utils 客户端工具库,专门处理 angular 项目接口代理问题 6c70584
    •   Swagger 支持单个接口更多描述功能(支持 htmle5e1db0
    •   Swagger 接口 [Obsolete] 过时支持功能 e5e1db0
    •   动态 API[ApiDescriptionSettings] 特性 和DynamicApiControllerSettings 配置 的 ForceWithRoutePrefix 参数,支持强制复写 [Route] 特性并添加 DefaultRoutePrefix #I59B74
  • 突破性变化

    •   默认内置 GBKWindows-1252, Shift-JIS, GB2312 等编码支持 c456ecb
    •   FurionSqlSugar 脚手架
  • 问题修复

    •   <inheritdoc /> 不能跨程序集问题 3b9d39c
    •   <inheritdoc /> 不支持带参数,不支持隐式实现接口注释问题 #I59A6W#note_10699021
    •   v3.3.1 版本导致 Swagger 不能显示问题 6763352
    •   远程请求、JSON以及 Web 页面不支持 GBKGB2312 等国标编码问题 c456ecb
    •   远程请求响应报文设置了 Content-Type:charset= 不能自动转换编码问题 c456ecb
  • 其他更改

    •   axios-utils.tsangular-utils.ts 多客户端支持
  • 文档

    •   GlobalUsings 文档 文档地址
    •   请求大小/上传大小限制文档 文档地址
    •   规范化文档,Worker Service 文档,动态 API 文档
  • 本期亮点

  1. 启用 All Groups 分组功能
查看更改

有时候我们为了更好的对接口进行归类,配置了 Swagger 多个分组的功能,但这样也对生成客户端请求代码造成了困扰,所以添加了新的配置:

{
"SpecificationDocumentSettings": {
"EnableAllGroups": true
}
}
  1. 接口过时控制
查看更改

当我们某个接口已经过时,提示尽早调用最新接口,只需要在方法上面贴 [Obsolete] 即可,如:

[Obsolete("GetName() 已经过时,请调用 GetFrameworkName() 替代")]
public string GetName()
{
return nameof(Furion);
}

[Obsolete]
public string Other()
{
// ...
}
  1. 单一接口更多描述
查看更改

在该版本新增了 [ApiDescriptionSettings]Description 属性,支持定义更多描述,如:

[ApiDescriptionSettings(Description = "我是一段描述,显示更多内容 <button>我是按钮</button>")]
public string add()
{
//....
}

v3.3.3(已发布)

  • 新特性

    •   远程请求文件上传自动识别 Content-TypeMime #I57ZMN
    •   远程请求方法支持设置 Content-TypeEncoding #I57ZMN
    •   根据文件名获取 Content-TypeMime 类型 #8f78184
    •   规范化文档支持授权访问 #32aa3b6
    •   代码注释,规范化文档注释 inheritdoc 语法支持 ❤️️️️ #159A6W
    •   新增 Vue2/3React 16.8+Angular 9+ 前端请求工具库,实现后端 API 代理 axios-utils
  • 突破性变化

    •   代码注释,规范化文档注释 inheritdoc 语法支持 ❤️️️️ #159A6W
    •   .NET 所有依赖包至 v6.0.5 版本
  • 问题修复

    •   自定义全局异常 Exception 后导致获取错误行号,文件空异常问题 #I53EGM
    •   配置数据库上下文传递空委托导致空引用异常问题 #I519AW
    •   字符串模板模板 Render 拓展方法返回 void 问题,应该返回 string Github-#99
    •   远程请求文件上传出现空情况问题(原因是缺失 Content-TypeI57ZMN
  • 其他更改

    •   框架源码引入 GlobalUsings 机制,减少代码体积 #7e9cc1c
    •   跨域请求的预检设置,如果未设置,则默认为 24 小时,主要解决前端多次发送 204 预检问题 4a11e7c
    •   视图引擎反射性能
  • 文档

    •   粘土对象序列化 JSON 配置文档
    •   前端解密 JWT 文档
    •  byte[]url 文档
    •   二级虚拟目录部署文档,远程请求文档,文件上传文档,安全授权文档、规范化文档
  • 本期亮点

    • ❤️️️️ 根据文件名获取 MIMEContent-Type 类型
查看更改
var success = FS.TryGetContentType("image.png", out var contentType);  // image/png
  • ❤️️️️ 支持 Swagger 配置登录后才能访问
{
"SpecificationDocumentSettings": {
"LoginInfo": {
"Enabled": true,
"CheckUrl": "检查登录地址",
"SubmitUrl": "提交登录地址"
}
}
}

查看详细文档

  • ❤️️️️ 支持代码注释继承,Swagger 文档注释也支持
查看更改
/// <inheritdoc cref="ITestInheritdoc" />
public class TestInheritdoc : ITestInheritdoc, IDynamicApiController
{
/// <inheritdoc cref="ITestInheritdoc.GetName"/>
public string GetName()
{
return "Furion";
}

/// <inheritdoc />
public string GetVersion()
{
return "3.3.3";
}
}

/// <summary>
/// 测试注释继承
/// </summary>
public interface ITestInheritdoc
{
/// <summary>
/// 获取名称
/// </summary>
/// <returns></returns>
string GetName();

/// <summary>
/// 获取版本
/// </summary>
/// <returns></returns>
string GetVersion();
}

查看详细文档


v3.2.0(已发布)

  • 新特性

    •   IFormFile 拓展方法 ToByteArray() da69640
    •   规范化文档 ServeDir 虚拟目录配置功能,支持一键将一级目录切换至二级目录部署(IIS)8718392
  • 突破性变化

    •   所有依赖包至最新版
    •   依赖注入模块核心代码,移除注册服务采用反射机制,减少反射性能损耗 acdb315
  • 问题修复

    •   Swaggerschema 类型如果是 C# Object 类型无法正确生成前端代码问题 Swagger 官方 Issue 1a25274
    •   Worker Service 发布成 Windows Services 时日志绝对路径问题 感谢 @jacoat !467
    •   NginxIIS 对二级虚拟目录配置不同导致 404 问题 8718392
    •   远程请求模块未初始化 OnRequestFailded 导致空异常问题 #I54PK7
    •   依赖注入反射出现 Not found Method bug #I546L1
  • 其他更改

    •   定时任务失败后异常处理逻辑,感谢 @程小胜 !463
  • 文档

    •   定时任务文档,日志文档
    •   文件上传/下载 文档,包含单文件/多文件/Base64/Byte[]

v3.1.0(已发布)

  • 新特性

    •   远程请求模块异常 Http 状态码 !462
    •   动态 WebAPI 支持小驼峰配置 #I4W1R4
    •   远程请求 SendAsByteArrayAsync 等一系列方法,支持返回 byte[] !452
    •   远程请求 GZip 压缩支持 #I506S5
  • 突破性变化

    •   .NET6 依赖包全部升级至 Nuget 最新版 v6.0.3
  • 问题修复

    •   .NET6 WebApplication 模式二级虚拟目录问题 #I4UZLM #I4PZ0C
    •   日期验证不支持 2022-03-01 0:00:00(现在支持小时域 000) 问题 #I4Y3NT
    •   环境配置和文件配置优先级问题
    •   脱敏模块替换敏感词汇只替换最后一个 bug #I4YFA0
    •   远程请求返回字符串个别情况出现中文乱码问题 #I50GBD
    •   [DataValidate] 配置 AllowNullValueAllowEmptyString 无效问题 #I4ZZBE
  • 其他更改

    • [过时] 标记 Furion.Extras.Logging.Serilog 拓展包 IWebHost 拓展为过时状态
  • 文档

    •   优化文档体验,新增面包屑导航,重写文档缓存,提升文档访问速度
    •   更新动态 API 文档、配置文档、远程请求文档
    •   更新二级虚拟目录文档
  • 本期亮点

  1. 新增动态 WebApi 支持小驼峰路径,如 GetMyName -> getMyName
查看更改
{
"DynamicApiControllerSettings": {
"LowercaseRoute": false,
"KeepName": true,
"AsLowerCamelCase": true
}
}
  1. 支持 .NET6 WebApplication 模式二级虚拟目录配置:
查看更改
Progame.cs
app.UseVirtualPath(app =>
{
app.UseInject(String.Empty); // 注意 String.Empty 只是例子,可以不填或填其他的,见一分钟入门
app.MapRouteControllers();
});

v3.0.0(已发布)

v3+ 版本说明

Furion v3.x 版本采用 .NET6 构建。

  • 新特性

    •   远程请求支持 GET 请求自动转换 类类型 类型对象 #I4HR5Q
  • 突破性变化

    •   全面支持 .NET6 版本
  • 问题修复

    •   开启规范化结果并自定义全局异常导致异常经过 OnSucceeded 过滤器 bug #I4DTVL
    •   .NET5.0.5+.NET6 微软底层修改了 [ApiController] 验证失败返回 IActionResult 类型 #I4ISOK
    •   EFCore 6.0 适配 SqlServer 2005+ 出错 #I4ILA5
    •   .NET6 获取配置对象如果不存在返回 null 问题,.NET5 则返回初始对象 94ae4d
    •   Sql 命令参数传入 Clay 类型异常问题 #I4D21Q
    •   Cron 定时任务特性方式 bug #I4OJQI
  • 其他更改

    •   ToPagedList 泛型约束 d0244d
  • 文档

  • 特别鸣谢


v2.20(已发布,全新事件总线)

v2.20+ 版本说明

Furion v2.20+ 版本后采用 Jaina 事件总线替换原有的 EventBus

  • 新特性

    •   远程请求支持 GET 请求自动转换 类类型 类型对象 #I4HR5Q
  • 突破性变化

    •   EventBus 模块,采用 Jaina 方式
  • 问题修复

    •   开启规范化结果并自定义全局异常导致异常经过 OnSucceeded 过滤器 bug #I4DTVL
    •   .NET5.0.5+ 微软底层修改了 [ApiController] 验证失败返回 IActionResult 类型 #I4ISOK
    •   远程请求上传文件异常 0c0752
    •   框架启动不支持环境变量 ASPNETCORE_HOSTINGSTARTUPASSEMBLIES 配置 !438
    •   定时任务内存和 CPU 占用及特殊情况下空异常问题 12c65de
    •   默认控制器启用规范化结果无效 bugc7a4a5e
    •   依赖注入 InjectionAttribute 特性的 ExceptInterfaces 单词拼写错误问题 !436
    •   Sql 命令参数传入 Clay 类型异常问题 #I4D21Q
  • 其他更改

    •   InjectionAttribute 代码 !435
    •   ToPagedList 泛型约束 d0244d
  • 文档

    •   事件总线新文档

v2.19(已发布)

  • 新特性

    •   定时任务监听器 ISpareTimeListener #I468Q1
    •   执行 Sql 支持 JsonElement 参数 61985d6
    •   Swagger 配置枚举及标签排序过滤器 #I46LON !404
    •   远程请求 application/octet-stream 类型默认支持 d9bad03
    •   远程请求代理模式请求报文头支持 IDictionary<string ,object> 类型。0204c0a
    •   MongoDB 拓展类,添加更多常用操作方法 !423
    •   DateTimeOffset? 转换 DateTime 拓展(包含互换) !432
  • 问题修复

    •   Scoped.CreateEFCore 进行 Add-Migration 时候报空异常问题,原因是在 PM 环境中不存在根服务0853e74
    •   定时任务执行异常后异常一直驻留内存问题,修正为执行成功自动清空过去异常 197a62b
    •   Jwt 拓展包不正确的代码导致 IOptions 失效#I46LUP
    •   Swagger 枚举 Schema 过滤器不输出值问题 #I46LON !404
    •   Swagger 处理非 int 类型枚举转换 bug #I46QJ9
    •   视图引擎编译模板生成 dll 后再次加载出现 IL 格式化错误问题 ff52d38
    •   管道 Channel 读取器无法释放 Handler 对象问题 10f4a90
    •   Worker Services 下日志不输出问题 c482548
    •   远程请求 multipart/form-data 类型对接微信小程序上传文件 问题 d9bad03
    •   工作单元上下文在某些情况下共享事务失效问题 006d439
    •   Swagger 枚举值在 GET 请求中 Schema 显示不正确问题 fb72fd7
    •   远程请求 404 不走异常过滤器问题 !426
    •   自定义事件总线并发情况下调用完成后无法正确处理队列数据 !429
    •   v2.19+ 版本之后模块化开发加载外部程序集失效问题 !433
    •   定时任务 SpareTime 频繁检查导致 CPU 增高问题 aa0a2ee
  • 特别鸣谢


v2.18(已发布)

  • 新特性

    •   Furion.Tools.CommandLine 拓展库 查看源码
    •   基于 AsyncLocal<T>CallContext 实现 9057a21
    •   远程请求可配置请求异常重试策略 656da87
    •   远程请求 OnRequestFailded 事件 4a3da4b
  • 突破性变化

    •   Scoped 所有带返回值方法 656da87 -   ConfigureService 中调用 App.GetOptions<>() 获取配置逻辑 afa4ac3

在过去,很多开发者总是喜欢在 Startup.cs 配置服务的 ConfigureService 方法中解析服务,这样导致内存存在溢出风险,GC 无法回收。 +正确的方式是尽可能的避免 ConfigureService 中解析服务。如果需要在【启动时】获取 配置选项,请使用 App.GetConfig<TOptions>(路径, true) 代替 App.GetOptions<TOption>

  • 问题修复

    •   v2.16+ 版本重构 AppDbContextBuilder 之后写错实体类型 #I45E6M
    •   远程请求单个值序列化错误处理方式 3282eba
    •   v2.17.3+ 单元测试创建 TestServer bug #I45JR3
    •   Retry.Invoke 正常方法死循环 bug !392
    •   刷新 Token 生成新 Token 存在数组/集合类型导致 Key 重复异常问题 aeea2b1
    •   远程请求序列化引用类型对象(不含 string)不正确的处理 93cf63a
    •   AppDbContext 默认租户属性受工作单元影响问题 e51557f
  • 文档

    •   包管理工具文档
    •   模板引擎、Sql 操作,数据库上下文 等等文档

v2.17(已发布)

  • 新特性

    •   IPC(Inter-Process Communication,进程间通信) 模块功能,目前提供进程内通信和共享内存进程外通讯 ProcessChannel
    •   远程请求 application/xmltext/xml 默认支持 4753a1a
    •   控制台全局异常拦截 4a4fe1f
    •   支持自定义 .json 配置文件扫描目录 3e2910a
    •   支持数据库实体接口显式实现接口配置 9610a0a
    •   控制台应用程序全局拦截 [IfException] 支持 4a4fe1f
    •   依赖注入模块接口可以限制实现类生存周期,实现类也支持复写生存周期 d2ce089
  • 突破性变化

    •   Oops.Retry() 重试策略功能至新类:Retry.Invoke() 6a7bbd0
    •   IHttpContextAccessor.SigninToSwagger() 拓展,请使用 IHttpContextAccessor.HttpContext.SigninToSwagger(),退出也一样
    •   全局处理 Request Body 重复读处理 Request.EnableBuffering() d92c24b
  • 问题修复

    •   规范化状态码过滤逻辑错误问题 #I44JYS
    •   非关系型数据库(内存数据库)注册及操作异常 e167651
    •   远程请求默认序列化问题 a55603b
    •   定时任务零点/整点提前一秒触发问题 #I4321L
    •   友好异常在子类重写抽象类方法内部抛异常无法获取的问题 4a4fe1f
    •   修复非 Web 项目抛异常问题 4a4fe1f
    •   数据库实体模型贴 [NotMapper] 特性无效 #I44MNO
  • 其他更改

    •   Swagger 生成泛型 SchemaIds 默认连接符,由 Of 改为 _ 81946b6

v2.16(已发布)

  • 新特性

    •   MVC 控制器支持规范化处理 #I427Z2
    •   throw Oops.Bah() 抛出业务异常(状态码 400
    •   UnifyResultSettings 规范化 json 配置选项 #I42NY7
    •   多语言自定义配置资源文件名及自定义程序集 #I434YJ
  • 突破性变化

    •   规范化结果 IUnifyResultProvider 参数 (破坏性更改) #I427Z2
    •   IJsonSerializerProvider 接口参数,去掉 inherit 参数 a55603b
查看更改
新版本自定义规范化结果
using Furion.DataValidation;
using Furion.DependencyInjection;
using Furion.UnifyResult.Internal;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Threading.Tasks;

namespace Furion.UnifyResult
{
/// <summary>
/// RESTful 风格返回值
/// </summary>
[SuppressSniffer, UnifyModel(typeof(RESTfulResult<>))]
public class RESTfulResultProvider : IUnifyResultProvider
{
/// <summary>
/// 异常返回值
/// </summary>
/// <param name="context"></param>
/// <param name="metadata"></param>
/// <returns></returns>
public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata)
{
return new JsonResult(RESTfulResult(metadata.StatusCode, errors: metadata.Errors));
}

/// <summary>
/// 成功返回值
/// </summary>
/// <param name="context"></param>
/// <param name="data"></param>
/// <returns></returns>
public IActionResult OnSucceeded(ActionExecutedContext context, object data)
{
return new JsonResult(RESTfulResult(StatusCodes.Status200OK, true, data));
}

/// <summary>
/// 验证失败返回值
/// </summary>
/// <param name="context"></param>
/// <param name="metadata"></param>
/// <returns></returns>
public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata)
{
return new JsonResult(RESTfulResult(StatusCodes.Status400BadRequest, errors: metadata.ValidationResult));
}

/// <summary>
/// 特定状态码返回值
/// </summary>
/// <param name="context"></param>
/// <param name="statusCode"></param>
/// <param name="unifyResultSettings"></param>
/// <returns></returns>
public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings)
{
// 设置响应状态码
UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings);

switch (statusCode)
{
// 处理 401 状态码
case StatusCodes.Status401Unauthorized:
await context.Response.WriteAsJsonAsync(RESTfulResult(statusCode, errors: "401 Unauthorized")
, App.GetOptions<JsonOptions>()?.JsonSerializerOptions);
break;
// 处理 403 状态码
case StatusCodes.Status403Forbidden:
await context.Response.WriteAsJsonAsync(RESTfulResult(statusCode, errors: "403 Forbidden")
, App.GetOptions<JsonOptions>()?.JsonSerializerOptions);
break;
default: break;
}
}

/// <summary>
/// 返回 RESTful 风格结果集
/// </summary>
/// <param name="statusCode"></param>
/// <param name="succeeded"></param>
/// <param name="data"></param>
/// <param name="errors"></param>
/// <returns></returns>
private static RESTfulResult<object> RESTfulResult(int statusCode, bool succeeded = default, object data = default, object errors = default)
{
return new RESTfulResult<object>
{
StatusCode = statusCode,
Succeeded = succeeded,
Data = data,
Errors = errors,
Extras = UnifyContext.Take(),
Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
};
}
}
}
  • 问题修复

    •   MVC 控制器启用规范化处理后返回 new Json({}) 对象为 null 问题 #I4354S
  • 其他更改

    •   多语言底层设计,取消需要创建 Lang.cs 空类的要求 #I434YJ
    •   MiniProfiler 性能,减少不必要的监听

v2.15(已发布)

  • 新特性

    •   Db.GetDbRepository<定位器>() 静态方法 #I41MZP
    •   远程请求缺省序列化配置选项 #I41PBW
  • 问题修复

    •   自动扫描接口进行依赖注入获取首个接口错误 bug #I41D1M
    •   IRepository<TEntity> 没有实现 IRepository<TEntity, TDbContextLocator> 问题 #I41MZP
    •   远程请求缺省序列化 bug #I41PBW
    •   修复 AppDbContext.Tenant 多租户空异常问题 #I421DA
    •   Worker Service 多个 Worker 定时任务阻塞问题 82a79cc
    •   Jwt 自动刷新机制时区处理问题,主要针对国外用户 #I41UB1 82a79cc
  • 其他更改

    •   系统启动性能,从 106M 减少到 84M
    •   大量底层代码,包大小从 391Kb 减少到 350Kb(不带注释版本仅 64Kb)

v2.13/v2.14(已发布)

  • 新特性

    •   简易字符串模板功能,支持远程请求、数据库模块、日志模块、事件总线模块、定时任务模块、异常模块、数据校验模块 #I402BL
    •   404 状态码规范化默认处理 #I408F5
    •   定时任务 ISpareTimeWorker 声明方式支持异步方法 #I40KWR
    •   自动配置二级虚拟目录 !354
  • 突破性变化

    •   框架依赖 SDK.NET 5.0.8 版本
    •   Db.GetNewDbContext() 静态方法 #I400BK
    •   数据库模块时态表拓展支持 #I405HI
    •   IJsonSerializerProvider 接口参数,新增 inherit 参数 #I3ZQU5
    •   AppSettings 配置的 LogEntityFrameworkCoreSqlExecuteCommand 名称为 OutputOriginalSqlExecuteLog #I40VVE
  • 问题修复

    •   Worker Services 定时任务边界值问题导致跳过单次任务 #I405NI
    •   Worker Services 独立发布后程序集扫描失效 bug #I3ZH3X
    •   远程请求如果配置了 Client 客户端但传入了空 RequestUrl 地址导致异常问题 #I40BC6
    •   规范化结果篡改非短路端状态码出现异常 bug #I408F5
  • 其他更改

    •   App.GetServiceProvider(type) 解析服务性能 #I40KXN
    •   视图引擎保存成文件流默认缓存区大小,从 4096 提升至 8192 #I40KH5

v2.10/2.11/2.12 (已发布)

该版本有多个破坏性更改,更新时请认真查看。

  • 新特性

    •   App.Configuration.Reload() 拓展 #I3XYI8
    •   ISubscribeHandler 支持异步方法定义 #I3XYHJ
    •   app.UseUnifyResultStatusCodes() 可配置修改返回状态码 #I3VZQH
    •   远程请求添加默认 User-Agent#I3W17C
    •   支持 Sql 高级代理切换数据库上下文定位器 #I3XFP6 #I3XDCR
    •   定时任务 CronFormat 自动识别 #I3Y7GT
    •   Sql 高级代理 拦截功能 #I3YHG4
    •   拦截远程请求所有异常处理 #I3YPDE
    •   远程请求配置 Timeout 超时时间 #I3YPPK
    •   新增 RSA 加密算法 #I3YZNU !345
    •   DataTableDataSet 支持不指定强类型返回 #I3Z6RI
    •   Sql 字符串拓展方法设置 Timeout 超时时间 #I3ZKWF
    •   Sql 高级代理 [Timeout] 特性,设置超时时间 #I3ZKWF
  • 突破性变化

    •   FakeDelete 假删除/软删除所有功能 #I3XKII
    •   移除 PBKDF2 加密算法 #I3Z0IO
    •   远程请求设置超时时间单位由 分钟 改为 #I3YPPK
    •   IJsonSerializerProvider 接口参数,新增 inherit 参数 #I3ZQU5
    •   [NonAutomatic] 特性名称为 [Manual] #I3XKKX
    •   [NotChangedListener] 特性名称为 [SuppressChangedListener] #I3XKLZ
    •   [ManualSaveChanges] 名称为 [ManualCommit] #I3XKNP
    •   DbContext.TenantIdQueryFilterExpression 名称为 DbContext.BuildTenantQueryFilter #I3XKTB
    •   [SkipScan] 名称为 [SuppressSniffer] #I3XN5N
    •   [SkipProxy] 名称为 [SuppressProxy] #I3XN7O
    •   Sql 执行,性能提升 20% #I3W33U
  • 问题修复

    •   动态 WebAPI 扫描控制器没有屏蔽没有注册的第三方控制器 #I3Y7TJ
    •   AppDbContext 设置 TablePrefix 无效: #I3Y57Q
    •   修复定时任务使用异步委托导致程序终止 bug #I3XVZ0
    •   事件总线一个 消息id 对应多个 Handler 只触发第一个#I3XYP0
    •   .ToPagedList() 分页方法传入小于或等于 0 的页码 #I3XNAN
    •   JSON 序列化默认 DateTimeOffset 异常 #I3XMOL
    •   继承 Serilog 日志在 Worker Service 生成重复日志 bug #I3WA0L !331
    •   粘土对象 动态添加 Clay 类型 bug #I3W9LW
    •   ValidationTypes.Numeric 校验数值类型正则表达式错误 #I3WADS
    •   数据库命令参数 DbParameterValueobject 类型的时候且不指定 #I3YKM6
    •   Oracle 数据库存储过程 游标参数 报错问题 #I3ZBYE
    •   Worker Services 采用独立发布后无法执行问题 #I3ZH3X
    •   修复远程请求如果无返回值序列化异常问题 !348
  • 其他更改

    •   支持 appsettings.json 等自定义配置文件中文命名 #I3YBFD
    •   远程请求配置命名客户端 BaseAddress 地址兼容处理 #I3YCRH
    •   框架无用代码、优化代码
    •   Furion非 Web 环境下性能
  • 文档变化

    •   会话和状态管理 文档 #I3YI3G
    •   远程请求、日志、数据库上下文、远程请求、Sql 高级代理文档
    •   配置文件 #I3Y2EV
  • 问答答疑

    •   dapper 多个数据源如何继承 #I3WUOI
    •   关于 SpareTime 多次执行问题#I3XEQU
    •   选项更改通知(热更新):数据库里的数据更改了如何通知选项进行改变? #I3XYI8
    •   SaaS 多租户添加时无法获取租户Id #I3Y5CF
    •   获取 _httpContextAccessor.HttpContext 为空#I3Y6BI
    •   Ubuntu 中使用 App.Configuration 方法读取不到值 #I3Y74H
    •   数据库上下文作用域问题 #I3YHXP
    •   使用 UnitofWork 提交事务,可以提交成功,但是系统会有错误 #I3YIWU
    •   数据库读写分离--非默认主库的从库随机该如何配置? #I3YVR7

v2.9.0 (已发布)

  • 新特性

    •   应用全局未托管资源监听,并实现特定时机释放非托管资源 #I3VXAU
    •   不包含 EntityFramework.Core 版本的 Furion.Pure#I3VGW8
    •   swagger 支持设置多语言方式,设置的语言自动添加到 api 地址后面 #I3VDTD
    •   动态 WebAPI 支持 [FromRoute] 非必填(选填)参数设置 #I3VFIM
    •   动态 WebAPI 参数支持配置路由约束 #I3VFIR
    •   MD5DESC 加密支持 大写 输出 #326
  • 突破性变化

    •   Furion 所有包生成 .snupkg 包,支持开发阶段直接调试 Furion 所有包源码 #I3VFIX
    •   repository.BuildChange() 方法的返回值,多返回一个 IServiceScope 对象 #I3VX3D
    •   JWT 刷新 Token 方法 AutoRefreshToken 参数 days 改为 minutes #I3VXNB
  • 问题修复

    •   App.GetOptionsSnapshot<> 从根服务解析异常 bug #I3VS2X
    •   修复远程请求如果出现异常,返回 Stream 为 null 导致异常的问题 #I3VSTU
    •   如果实体被跟踪后,无法执行删除操作 #I3W08P
  • 其他更改

    •   运行时内存,实现请求结束自动释放未托管资源 #I3VXAU
  • 文档变化

    •   App 静态类文档、远程请求文档、分表分库文档
  • 问答答疑

    •   动态 WebAPI,自定义根据方法名生成 [HttpMethod] 规则报错 #I3VKQG
    •   InsertAsync 的时候提示 ID 为空 #I3VS7E
    •   FirstOrDefault 自动过滤了 TanantId 字段 #I3W0VH
    •   对方接口返回 HttpConnectionResponseContent 远程请求拿不到返回值 #I3W17C
    •   查询方法 FindOrDefault 报错 #I3W830
    •   SqlNonQueryUnitOfWork 循环执行#I3W8WW
    •  Swagger 配置问题,导致 Swagger 中不能自动携带 token 授权的问题 #I3W934
    •   远程请求 SetBody 参数识别不了#I3WBM1
    •   Scoped.Create 里执行 sql.SqlNonQuery() 或者 obj.insert() 问题#I3WB5O
    •   调用函数或存储过程,怎么出参数据自定义对象?如 Oracle数据库的数组或记录 #I3W71W

v2.7.0/2.8.0 (已发布)

  • 新特性

    •   throw Oops.On("异常消息") 应用多语言支持 #I3UYC2
    •   Db.GetMSRepository() 获取主从库仓储静态方法 #I3UBSJ
    •   工作单元特性,支持静态类强制性开启共享事务 #I3S9N8
    •   EFCore 执行 sql 模式打印日志 #I3SE8X
    •   远程请求支持默认 HttpClient 配置 #I3SI17
    •   新增 短 ID 生成功能 #I3T7JP
    •   [SensitiveDetection] 支持配置替换敏感词汇 #I3THIA
    •   SpecificationDocumentBuilder.DocumentGroupsSpecificationDocumentBuilder.CheckApiDescriptionInCurrentGroup(currentGroup, apiDescription) 公开方法#I3UDSY
  • 突破性变化

    •   自动扫描 .json.xml 文件并加载到配置中的代码和规则,同时移除默认 .xml 文件加载,只保留 .json 文件 #I3UJ3L
    •   分布式连续 GUID 代码 #I3UBK0
    •   Scoped.CreateUnitOfWork 名称为 Scoped.CreateUow #I3SJPU
    •   JWTEncryption.Validate 返回值,支持返回 TokenValidationResult #I3S2ND
  • 问题修复

    •   [DataValidation][SensitiveDetection] 多语言应用失效 #I3UH6U
    •   Scoped 系列方法异步出现 Task is cancel 情况 #I3SJF6
    •   Mysql 数据库的 ToPagedList 方法返回的结果进行遍历出现 MySqlConnection is aleady use 问题 #I3SJQ3
    •   tool/cli.psl 没有包含项目名称 #I3S1T6
    •   远程请求做上传文件时,没有传入 Body,程序直接跳过 #I3TKFH
    •   远程请求 multipart/form-data 内容分割符缺失 #I3TNO9
    •   远程请求代理拦截方式返回 HttpResponseMessage 问题 #I3V161
    •   repository.Database.SetCommandTimeout(600) 无法生效#I3VAQS
  • 其他更改

    •   支持规范化结果中间件判断是否跳过规范化结果 #I3T2AA
    •   更新部分列 UpdateIncludeNowAsync 具有二义性 #I3RW9Q
    •   框架底层性能,大大减少内存占用和溢出情况,启动内存从之前 136M 下将到 86M
    •   删除无用代码,优化不规范命名等
  • 文档变化

    •   Inject 说明文档 #I3TITA
    •   4.2.9 的示例代码文档,方法没有放在 class 中 #I3S9T5
    •   规范化结果 6.5.6 多分组排序图片引用错误 #I3UBOQ
    •   静态类 Scoped 文档
  • 问答答疑

    •   默认 MasterDbContextLocator 不随自定义的参数生成 #I3SDBB
    •   事件总线中订阅处理程序类获取不到用户信息,这个正常吗 #I3SS0U
    •   在有多租户过滤器的情况下,是否有一种方式查询全量的数据 #I3T0VI
    •   mysql 使用 &"tools/cli.ps1" 页面化加载表结构失败 #I3T4F8
    •   其他 Web 层的 Startup 优先执行 #I3T8IP
    •   辅助角色服务实现建议 #I3T906
    •   开启 easy connection 后同一内网地址浏览器可以正常访问,远程请求则无法访问#I3TA2U
    •   scope.ServiceProvider.GetService<IOtherService>不存在 #I3TQMV
    •   能否在 WPF 项目中使用呢? #I3TMCC
    •   Dapper 多个数据源 #I3TM9B
    •   L.GetSelectCulture() 方法异常 #I3TQS4
    •   循环中使用 IDGen.NextID() 得到的结果并不是连续的 #I3UAF6
    •   模块化动态加载插件支持通配符匹配.dll #I3UDT8
    •   MVC 模式,在 Controller 里快捷方式创建 View 页面出错 #I3UFGB
    •   数据库迁移没有种子数据 #I3UI7G
    •   SpareTimeAttribute 中 根据 Cron 表达式 自动匹配 Cron 表达式格式化方式 #I3UTKQ
    •   使用 workService 集成 SqlSugar 报错 #I3V8HJ
    •   sqlserver 2008 分页报错如何解决呢 #I3VF96

v2.5.0/2.6.0 (已发布)

  • 新特性

    •   虚拟文件服务,支持物理文件和嵌入资源文件 #I3RBR9
    •   读写分离/主从复制仓储 IMSRepositoryIMSRepository<TMasterDbContextLocator> 仓储,可进行随机或自定义获取从库
    •   数据脱敏处理 #I3R5ZF
  • 突破性变化

    •   InsertOrUpdate 一系列数据库操作方法 #I3RI9L
    •   所有包含 Exists 单词的数据库操作方法 #I3RJ0T
    •   分布式 GUID IDGenerater 静态类名称为 IDGen #I3RGUA
  • 问题修复

    •   远程调用方法错误,请求报文头 Headers 不能添加到 IHttpDispatchProxy 的子接口上 #I3RAF7
  • 其他更改

    •   应用启动性能,减少内存分配
  • 文档变化

    •   脱敏处理文档 #I3R6WZ
    •   文件系统文档、FS 静态类文档 #I3RCC4
    •   读写分离/主从复制、数据库仓储文档、Db 静态类 #I3R3B6
  • 问答答疑

    •   关于 Furion 集群部署 #I3R3J4
    •   升级最新框架以后, 数据库生成模型报错 #I3R7TP
    •   数据库上下文事务执行中,SaveNow 执行后有警告 #I3RAJI
    •   Hangfire 使用事务出现错误 #I3ROQ5
    •   如何实现 cli 不执行某些表的迁移,web 请求可以正常操作呢? #I3ROU5
    •   在使用定时任务时候出现的问题:继承 ISpareTimeWorker #I3RRZS
    •   MySql 时间差 8 小时处理 #I3RSCO
    •   Db.GetRepository<> 方法结合 [UnitOfWork] 后不可用 #I3RUK5
    •   事务开启失败问题 #I3RYJY
    •   支持 DbProvider 可动态配置 #I3RYPE
    •   WorkService 依赖注入 ISingleton 问题 #I3RZ1L
    •   ISpareTimeWorker 运行期动态修改 #I3S33Q

v2.4.0 (已发布)

  • 新特性

    •   支持自动加载模块化/插件 .xml 注释文件 #I3Q7XY
    •   AppDbContext.FailedAutoRollback 属性,可配置事务是否自动回滚 #I3QOUS
  • 突破性变化

    •   .NET 5 SDK 为 5.0.6 版本
    •   IJsonSerializerProvider.GetSerializerOptions() 接口方法 #I3QIJN
  • 问题修复

    •   通过 services.AddInject() 方式注册,模块化/插件不加载 #I3Q7XH
    •   种子数据返回 null 报空异常 #I3QCM5
    •   通过 Clay.Object 创建粘土对象后属性变小写问题 #I3QRV3
  • 其他更改

    •   Furion 框架底层性能,减少内存占用,提高应用初始化速度 92f8cc1
  • 文档变化

    •   JSON 序列化文档、规范化结果文档、数据库上下文文档
  • 问答答疑

    •   InsertOrUpdateNowAsync 报错 #I3QKO5

v2.3.0 (已发布)

  • 新特性

    •   Furion.Extras.DatabaseAccessor.MongoDB 拓展包支持 #I3PKST
    •   动态粘土类型直接转 objectdynamic 类型 #I3OY27
    •   新增 Oops.Retry 方法,支持设置方法调用失败进行重试 #I3PJKQ
    •   JWTSettings 配置节点 Algorithm,用于配置加密算法 #I3PQGV
    •   repository.EnsureTransaction() 方法确保工作单元事务有效 #I3PVF1
  • 突破性变化

    •   支持 .NET 6.0.0 Preview 3 版本 #I3P2C7
  • 问题修复

    •   使用数据库生成模型 tools/cli.ps1,从数据库表生成的实体异常 #I3PL18
    •   贴了 [NonUntify] 特性后,SwaggerExample Value 没有匹配正确 #I3PK0L
    •   SpareTimer.TallyCron 表达式中计数无效 #I3PWSE
  • 其他更改

    •   框架默认序列化应该从配置中读取,而非手动编写 #I3P1SJ
    •   SqlSugar 拓展库,支持非泛型仓储获取上下文操作对象 #I3PK2N
    •   支持分布式内存缓存可配置化 #I3POKD
  • 文档变化

    •   添加 JWTSettings 配置独立文档 #I3PQGW
  • 问答答疑

    •   软删除如果数据不存在,则报错 #I3PTVB
    •   多个类集成测试会造成数据库定位器多次注册,无法运行所有测试,只能一个类一个类的运行 #I3PXGY

v2.2.0 (已发布)

  • 新特性

    •   Clay 粘土类型,支持让 C# 创建一个弱类型对象并操作弱类型 #I3O2QQ
    •   新增 Scoped.Create 带返回值重载 #I3O47J
    •   支持 Scoped.Create() 一系列方法支持传入作用域工厂 #I3OAP5
    •   支持事件总线同步执行方式 #I3OAW2
    •   [DataValidation] 跳过空字符串和空值验证 #I3OGEN
    •   Worker Service 可配置是否自动注册 Worker #I3OLW4
  • 突破性变化

  • 问题修复

    •   定时任务设置 cancelInNoneNextTime: false 一次也不执行 #I3O3N0
    •   SpareTime 自定义下次执行时间出现空异常 #I3O46X
    •   MiniProfiler 设置为 false 时,数据库上下文提交拦截器未添加 #I3OAWX
    •   [Consumes("application/x-www-form-urlencoded")]ModelQuery 配置同时配置导致空引用问题 #I3ODUR
    •   在 Grpc 中使用 jwt 授权出现空异常 #I3OW3I
  • 其他更改

    •   支持发布后代码精简配置,减少不必要的文件夹输出 #I3OAPF
    •   自动刷新 Token 机制,新增容错值处理,解决并发 Token 刷新失败问题 #I3OGYF
  • 文档变化

    •   粘土对象文档 #I3OG18
  • 问答答疑

    •   动态 WebAPI 如何获取接收文件 #I3O29B
    •   定时任务使用 Scope.CreateUow 引发的问题 #I3O2CD
    •   单文件发布程序工作不正常 #I3O4D8
    •   同时配置租户过滤器和软删除过滤器,最终的 sql 只生成了一种过滤条件 #I3OB0A
    •   HTTP 重定向 HTTPS 后跨域失效 #I3OB8R
    •   在 PostgreSql 数据库使用 rep.FirstOrDefault(u => u.Id == UserId); 引起异常 #I3O5OF
    •   定时任务有时能触发有时不能触发 #I3ORBE

v2.1.0 (已发布)

  • 新特性

    •   新增定时任务 ISpareTimeWorker 方式支持 [SpareTime("{配置路径}}] 方式 #I3NTUX
    •   定时任务支持异步委托 #I3NP96
    •   轻量级分布式连续 GUID 生成器 #I3NKLZ
    •   ClayObject 模块,处理 ExpandoObjectIDictionary<string,object> 类型 #I3N3J4
    •   Scoped.CreateUow(handler) 创建作用域并自动提交数据库更改方法 #I3NU3G
  • 突破性变化

    •   规范化结果接口 OnResponseStatusCodes 方法,新增 UnifyResultStatusCodesOptions 参数 #I3NDB9
    •   雪花 ID 实现代码 #I3NKLZ
  • 问题修复

    •   Swagger 不能支持非 int 类型的枚举 #I3NQM8
    •   数据库线程池多线程并发问题 #I3NR4L
    •   自定义控制器路由后且为方法参数指定了 [ApiSeat] 后生成路由重复 #I3NRF6
  • 其他更改

    •   支持应用启动的时候迁移种子数据 #I3NH3M
  • 文档变化

    •   分布式 ID 生成文档 #I3B6CX
    •   新增模块化开发文档 #I3NSUS
    •   20.4 字符串拓展方式 > 错误ToAESDecrypt 写成了 ToToAESDecrypt #
  • 问答答疑

    •   有关【定时任务/委托】的疑问 #I3N3EW
    •   统一返回格式支持自定义 #I3NU1G

v2.0.0 (已发布)

  • 新特性

    •   控制台应用程序及 Worker Services 支持 #I3K4DG
    •   完整任务调度功能 #I3IRUX
    •   Cron 表达式解析 #I3IQ9Y
    •   支持 Swagger 自定义配置 swagger.json 地址模板 #I3IHMX
    •   支持配置动态 WebApi 区域 #I3IJAZ
    •   远程请求新增支持传入服务提供器 IServiceProvider #I3IVBL
    •   全局配置选型 SupportPackageNamePrefixs 配置,支持配置包前缀 #I3K0SN
    •   应用启动时支持 referenceassembly 类型程序集扫描 #I3K0SN
    •   依赖注入 AOP 拦截获取方法真实特性 #I3LZBX
    •   EFCore 手动 SaveChanges() 特性 #I3N01Y
    •   支持 Cors 跨域更多配置 #I3N2J0
  • 突破性变化

    •   完整任务调度功能 #I3IRUX
    •   日志模块功能 #I3J2K0
    •   模板引擎功能 #I3J46E
    •   底层 EFCoreRepository 仓储 #I3J6W5
    •   sql 字符串拓展底层代码 #I3IVCE
    •   底层 SqlRepository 所有逻辑代码 #I3J6V6
    •   数据库实体拓展方法 #I3J609
    •   事件事件总线同步执行为异步方式执行 #I3J0WA
    •   框架底层 HttpContext.IsAjaxRequest() 拓展 #I3IVAA
    •   ValidationTypes.Required 验证 #I3KR85
  • 问题修复

    •   关闭 InjectMiniProfiler 参数后内存缓存无效 #I3IHLR
    •   在多租户中调用 Tenant 属性出现偶然性数据库上下文被释放的情况 #I3IC70
    •   Sql 代理中如果返回基元类型抛出不能将 object 转换成对应类型的异常 #I3IC84
    •   存储过程多返回值的时候,outputvalues 的 name 不是定义的 MSG 的 name,是 Msg 类型。 #I3IC7Y
    •   PhoneNumber 手机号验证正则表达式错误 #I3ID10
    •   依赖注入 AOP 拦截无法捕获内部异常 #I3IGCC
    •   全局拦截标记异常已被处理后异常过滤器依然执行 #I3J463
    •   自定义全局异常拦截器不起作用 #I3K1SJ
    •   在 WorkerService 模式下,还是使用 WebHostEnvironment 来判断 Host 环境,会导致错误 #I3LCQY
    •   定时任务 DoOnce 抛空异常 bug #I3M0ZT
  • 其他更改

    •   启动时程序集扫描类型 #I3K0SN
    •   App.GetConfig<>("key") 不支持获取单个值问题 #I3ILF1
    •   UrlEncode 应该用 Uri.EscapeDataString() 而不是 HttpUtility.UrlEncode #I3ICTK
  • 文档变化

    •   定位任务、后台任务文档 #I3JHHG
    •   辅助角色服务文档 #I3K5GN
    •   动态 WebAPI、规范化文档、数据库上下文文档
  • 问答答疑

    •   数据校验,自定义 ErrorMessage 无效问题 #I3ICL3
    •   最新 issue 中新增的“新增常用的 JSON 序列化方法” 会导致 AOP 拦截异常 #I3I7VE
    •   Furion.DatabaseAccessor.PrivateEntityBase 中的 TenantId 数据类型设置为 object #I3IQV6
    •   有关异常拦截和处理的疑问 #I3IUFZ
    •   DataValidation 在空值的情况下被忽略掉了#I3IWSM
    •   日志文档没有更新 #I3J1DX
    •   对于 webapi 简单类型参数,是否可以以 json 方式提交 #I3J18I
    •   IUnifyResultProvider 实现中如果 UnifyModel 的 type 不是范型会报错 #I3JBXF
    •   如何模块化开发新功能? #I3J7ZZ
    •   建议增加微服务中间件的集成 #I3JTZQ
    •   二级虚拟目录部署的 swagger 的 MiniProfiler js 报错 #I3IWLR

v1.19.0 (已发布)

  • 新特性

    •   EFCore 5.0 支持 SqlServer 2005-2008 数据库 #I3HZZ6
    •   Sql 高级代理支持模板替换了 #I3HHWU #I3HH2T
    •   PBKDF2 加密 #I3HN7A
    •   常用的 JSON 操作方法 #I3HUYO
    •   所有解析服务的方法都支持传入 IServiceProvidier 参数 #I3HXEU
  • 突破性变化

    •   .NET 5 SDK 至 5.0.5 版本
  • 问题修复

    •   远程请求 application/x-www-form-urlencoded 自动被转码了 #I3HDPC
    •   ISqlDispatchProxy 调用带返回值的存储过程出错 #I3HISS
    •   多数据库工作单元异常无法回滚数据 #I3I2KN #I3HYN5
    •   Serilog 日志生成太多文件 #I3I2PN
    •   1.18.0 版本数据库连接池存在连接泄漏问题 #I3I5KO
    •   Sqlite 提示事务已完成异常 #I3I9F2
  • 其他更改

    •   视图模板功能,默认支持可枚举泛型类型 #I3GYEE
    •   开发阶段 MiniProfiler 打印数据库相关信息 #I3I8VQ
    •   EFCore 5.0 未提供 Sqlite 数据库 DataAdapter 的支持 #I3I9FC
  • 文档变化

    •   数据库上下文、多租户、仓储、日志、序列化等文档。
  • 问答答疑

    •   建议 MVC 模式下增加 Furion 的功能 #I3GY4R
    •   数据库关联操作 #I3H5QP
    •   1.17.5 版本 suagger 无法生成 swagger.json #I3HGPZ
    •   Serilog 扩展+dll 启动与 swagger 的 MiniProfiler 冲突 #I3HWJM
    •   Sql 高级代理返回 DataTable 时,结果为空取不到记录 #I3HUWG
    •   Task.Run 操作数据库问题 #I3HZ9D

v1.18.0 (已发布)

  • 新特性

    •   Oracle 11 版本支持 #I3EVL5
    •   Mysql 官方包 MySql.EntityFrameworkCore 支持 #I3E6J1
    •   全局配置 WebApi 参数 [FromQury]#I3EFYJ
    •   公开框架底层依赖注入扫描注册拓展 services.AddRisterTypes(types) #I3EIV3
    •   SqlSugar 工作单元特性 #I3EJO5
  • 突破性变化

  • 问题修复

    •   数据库上下文池一旦有上下文操作失败还数据库上下文出现二次提交数据库的问题 #I3EIJJ
    •   不同数据库命令参数前缀都添加了 @ 处理 #I3EBJP
    •   尝试修复事件总线线程安全问题 #I3EGSB #PR236
    •   HttpContextExtensionsSignoutToSwagger 方法无效 #I3EHNQ
    •   如果动态 WebApi 贴了 [ApiController] 特性后,导致路由参数重复生成 #I3EOQQ
    •   如果没有任何 webapi 控制器时,文档报错 #I3EVLB
    •   依赖注入泛型类型注册失败 #I3EX66
  • 其他更改

    •   SqlSugar 拓展库仓储 Context 属性类型未 SqlSugarClient #I3EHXA
    •   刷新 Token 黑名单 Redis 中分组 #I3EQWO
    •   远程请求在请求拦截次发起二次请求导致异常问题 #I3ER71
    •   多租户默认缓存改为分布式缓存 #I3EXEU
  • 文档变化

    •   数据库操作文档 #I3E84X
  • 问答答疑

    •   如何方便的获取 IDynamicApiController API 产生的 url 和 谓词 #I3ED17
    •   Code First -执行命令 Add-Migration 遇到了问题 #I3EHD0
    •   tools v1.16.0 无法生成实体,一直提示 Missing required argument <PROVIDER>. #I3ENZ8
    •   Authorize 的 Logout 按钮,无法实时请空 token#I3EOF9

v1.17.0 (已发布)

  • 新特性

    •   动态 WebAPI 支持继承基类配置特性 #I3D5PX
    •   远程请求支持 multipart/form-data 内容类型处理 #I3D7KG
    •   字符串加密拓展 #I3DHBW
    •   新增远程请求可直接下载返回值内容转为 string 类型 #I3DIGR
    •   远程请求地址支持模板引擎 #I3D5Y8
    •   [DataValidation] 错误消息支持 string.Format 操作 #I3E08W
    •   远程请求 HttpRequestMessage 拓展方法 AppendQueries() 追加更多 query 参数拓展 #I3E3DI
  • 突破性变化

    •   IRepository.AsAsyncEnumerable() 返回值 #I3DIQ1,调整为:rep.AsQueryable().ToListAsync()
  • 问题修复

    •   数据验证失败后也打印了成功的字段 #I3CVBS
    •   远程请求配置 contentTypeapplication/x-www-form-urlencoded 无效问题#I3CWBS
    •   远程请求无法打印完整的请求地址,比如配置了 HttpClient 之后 #I3CY42
    •   程序启动时排除默认配置文件算法不对,应该采用正则表达式匹配 #I3D9E7
    •   远程请求成功请求拦截不生效 #I3DOE4
    •   Dapper 拓展数据库切换为 oracle 时,系统找不到指定的文件 Oracle.ManagedDataAccess.Core #I3DYM3
  • 其他更改

    •   获取 JWT token 信息支持配置 Token 前缀,如 Bearer #I3DJIV
    •   刷新 Token 黑名单存储方式,将内存缓存调整为分布式缓存 #I3DPBR
  • 文档变化

    •   远程请求文档 #I3CPJO
  • 问答答疑

    •   LinqExpression.And 没有 2 个参数的方法 #I3CXKZ
    •   异常信息 如何记录到数据库中:) #I3DDGO
    •   无键实体选用 IEntityNotKey #I3DWRF
    •   根据主键删除一条记录不成功,无错误信息 #I3DWWF
    •   如何自定义接口返回格式 #I3DZN6
    •   DynamicApiController 如何在运行时决定是否公开一个 Action #I3D5UL
    •   Furion.DatabaseAccessor.DbHelpers 方法:ConvertToDbParameters 是不是应该过滤掉贴 NotMapped 的特性 #I3E2XS

v1.16.0 (已发布)

  • 新特性

    •   IDGenerator 雪花 ID 算法,感谢 idgenerator 作者提交 PR #PR204 #I3B60S
    •   DbContext 刷新多租户缓存拓展方法 #I39N5U
    •   自定义配置单个控制器名称规范,如小写路由 #I3A5XL
    •   获取当前选择区域语言方法 #I3BSDH
  • 突破性变化

    •   .NET 5 SDK 至 5.0.4 版本 #I3ASTL
    •   远程请求所有功能 #I2LB7M
    •   JSON 序列化功能,提供统一的抽象接口,方便自由替换 JSON#I39GT9
    •   验证失败返回消息模型及规范化接口验证参数 #I3AFQW
    •   插件式开发热插拔功能,实现动态加载卸载 #PR200, 感谢 @SamWangCoder
    •   移除 JsonSerializerUtility 静态类及移除属性大写序列化拓展配置 #I3AFRJ
  • 问题修复

    •   MVC 模式下不支持验证自定义验证逻辑 #I39LM5
    •   验证数值类型正则表达式不支持负数 bug #I39YUV
    •   框架启动时无法加载未被引用的程序集 bug #I3A3Z4
    •   EFCoreRepository.IsAttached() 方法判断错误 bug #I3A824
    •   动态API 驼峰显示配置无效 bug #I3AF32
    •   cli.ps1 不支持新版本 EFCore bug #I3APO9
    •   EFCore 实体配置 [Table] 特性无效 bug #I3BAYH
    •   动态 WebAPI CheckIsSplitCamelCase bug #I3BLKX
    •   修复动态 WebAPI 配置保留 Action 的 Async 后缀无效问题 #I3C3DA
    •   JWT Token 刷新后旧的刷新 Token 依旧可用 bug #I3C8ZH
    •   多语言 Razor 视图变量多语言乱码问题 #I3CBMU
  • 其他更改

    •   默认序列化提供器 System.Text.Json 反序列化字符串时区分大小写问题 #I3BSXV
    •   优化 MessageCenter 性能问题 #I39PRR
    •   数据库上下文池小性能优化
  • 文档变化

    •   Docker 环境下自动化部署 #PR209
    •   JSON 序列化 文档 #I3B6D8
    •   跨域、安全授权、即时通信文档、多语言、规范化文档
  • 问答答疑

    •   Furion.Extras.DatabaseAccessor.SqlSugar 配置多个数据库打印 SQL 语句问题 #I39PDC
    •   ORACLE 数据库多租户模式下返回值为指定类型时系统卡死 #I39RNH
    •   假删除指向异常 #I39XZA
    •   Furion 多语言配置节是放在 AppSettings 里面还是外面呢? #I3A4SB
    •   没找到数据库上下文 #I3A5HS
    •  QQ 交流群吗? #I3AAM7
    •   Vue3 环境下配置 SignalR 跨域出错 #I3ALQ7
    •   设置 Swagger 参数非必填 #I3AT02
    •   EFCore 调用 Insert 时报 Unknown column 'Discriminator' in 'field list' 异常 #I3B2LC
    •   逆向 mysql 数据库时 cli 出现错误 #I3B64F
    •   Sql 高级代理使用过程中 DateTime 类型的参数序列化失败 #I3AZXK
    •   使用 Mysql 执行 Add-Migration 报错 #I3B8EW
    •   Saas 多租户模式-独立 Database 模式下无法获取 Tenant, 导致无法自动切换的问题#I3AVXU
    •   如何自定义 WebAPI 统一结果模型 #I3BBYW #I3BBYV
    •  Web.Entry 项目新建了一个 Controller,多了未知方法 #I3BKH5
    •   AOP 拦截如何解析服务 #I3BUM3
    •   动态 WebAPI 返回参数被省略 #I3C2XR
    •   如何设置某一个接口响应数据不自动转小写,按原始字段名返回 #I38L9B
    •   code first 如何配置自动迁移 #I3CCR0
    •   webapi 混合授权如何区分不同系统 #I3CJCY
    •   EFCore 不支持递归无限级遍历关系 #I3CET9

v1.15.0 (已发布)

  • 新特性

    •   跳过特定实体数据库操作监听特性 #I386LB
    •   IEntityChangedListener 增加对 OldEntity 的支持 #I385X2
    •   实时通信自动配置集线器拓展及特性 #I387QX
    •   Mapster 拓展支持 IMapper 依赖注入方式 #I38C7C
    •   [AppDbContext] 特性默认构造函数 #I38J97
    •   UnifyContext.GetExceptionMetadata(context) 返回错误码支持 #I38ONX
  • 突破性变化

  • 问题修复

    •   多次循环中调用 Db.GetNewDbContext() 还是获取到同一个对象 #I38NNP
    •   Swagger 过滤掉 object 类型属性问题 #I38FHL
    •   同一类不支持多继承 IEntityChangedListener 问题 #I38UQJ
    •   自定义序列化属性名称导致验证失败属性不匹配问题 #I38W8Z
  • 其他更改

    •   代码不规范命名导致开发者阅读代码时产生歧义
  • 文档变化

    •   FluentValidation 集成文档 #I38IOT
  • 问答答疑

    •   Furion 框架版本向下兼容问题 #I38WMZ

v1.14.0(已发布)

  • 新特性

    •   EFCore 5.0 的 Oracle 数据库支持 #I37Z8E
    •   控制是否在开发环境下显示数据库连接信息 #I37YQ2
    •   [NonUnify] 支持在类中贴此特性 #I359Q6
    •   网络请求 字符串 HttpClient 拦截器 #I35F3E
    •   HttpContextHttpRequest 获取远程地址拓展 #I3688Z
    •   services.AddMvcFilter<> 添加 Mvc 过滤器拓展 #I368BH
  • 突破性变化

    •   框架依赖的 .NET 5 SDK 至最新版 5.0.3 #I37YQQ
    •   Swashbuckle.AspNetCore 组件包到 6.0.x 版本 #I37EZK
    •   Furion 框架 JWT 拓展类,只在 Furion.Extras.Authentication.JwtBearer 中保留 #I35D59
  • 问题修复

    •   传入错误 JWT Token 字符串导致自动刷新 Token 出现字符串边界值异常 bug #I34ZE5
    •   瞬时作用域数据库上下文也会自动加入工作单元导致写日志时连锁异常 bug #I37WTV
  • 其他更改

    •   获取系统环境参数的性能 #I36SR5
    •   Furion 底层添加 Mvc 过滤器代码 #I36SKA
    •   添加默认 Json 序列化时间默认时间格式 #I36SL0
    •   升级 SqlSugar 拓展包到 5.0.2.6 版本 #I36SIG
  • 文档变化

    •   数据库入门文档 #I37Z8S
    •   更新日志文档 #I36PI0
    •   请求审计日志、执行 Sql 更新日志文档 #I36PIK
    •   前端使用 axios 跨域配置文档 #I36PIT
    •   App 静态类获取应用、环境更多信息数据 #I36SOV
    •   英文版 README.md 介绍 #I37QHP

v1.13.0(已发布)

  • 新特性

    •   多语言功能及拓展 #I2DOCL
    •   事件总线功能及消息中心 #I23BKN
    •   Swagger 分组显示隐藏配置 #I2AHH8
    •   Furion.Extras.Logging.Serilog 拓展插件 #I2AAN8
    •   cli.ps 支持 -Namespace 命名空间指定 #I2A175
    •   Swagger 规范化化文档授权失效后自动取消授权锁 #I2AIWC
    •   Request.Body 支持重复读功能,主要解决微信 SDK 问题 #I2AMG0
    •   网络请求功能及文档 #I2APGJ
    •   SqlSugar 拓展包支持打印 sqlMiniProfiler#I2ASLS
    •   Furion.Extras.DatabaseAccesssor.Dapper 拓展插件 #I2ASYA
    •   Furion.Extras.DatabaseAccessor.PetaPoco 拓展插件 #I2AUGA
    •   网络请求字符串拓展方法 #I2CPQ0
    •   SqlSugar 拓展新增 PagedList 拓展 #I2CW99
    •   远程请求支持参数特性验证 #I2CX5L
    •   App.User 获取当前授权用户信息便捷方法 #I2CZLO
    •   规范化文档可配置功能,支持 appsettings.json 配置 #I2D1K9
    •   远程请求拦截器添加方法和方法参数 #I2D2CM
    •   远程请求出错返回默认值支持 #I2D44M
    •   远程请求 body 参数序列化支持设置 PropertyNamingPolicy #I2D685
    •   远程服务接口客户端配置 #I2D7PS
    •   AddInjectUseInject 允许自定义 SecurityDefinitionsSwaggerUI #I2DIMG
    •   [SecurityDefine] 默认构造函数 #I2DNXT
    •   AspectDispatchProxy 动态代理类 #I2DO6I
    •   [QueryParameters] 特性,支持一键将 Action 参数添加 [FromQuery] 特性 #I2G8TF
    •   动态日志配置及拓展方法 #I2GDGD
    •   WebApi 请求谓词默认规则配置功能 #I2M70X
  • 突破性变化

    •   .NET 5 SDK 到 .NET 5.0.2 版本 #I2D0PZ
    •   框架内所有拓展类命名空间,全部迁移到 Furion.模块.Extensions#I2AH54
    •   Swagger 记住授权存储方式,替换 Session 存储方式为 LocalStorage 方式 #I2AKUA
    •   Furion 框架包描述文件,减少框架体积 #I2APAU
    •   App.CanBeScanTypesApp.EffectiveTypes #I2B0ZR
    •   App.ServiceProvider 属性并移除 App.GetDuplicateXXX 方法 #I2CYZE
    •   Db.GetDuplicateDbContextDb.GetNewDbContext #I2CZ04
    •   Db.GetSqlDispatchProxyDb.GetSqlProxy #I2DO9T
    •   Aop 服务拦截器,支持异步、同步两种方式 #I2B9HQ
    •   网络请求所有功能 #I2BMR7
  • 问题修复

    •   Swagger 规范化化结果不一致 bug #I2ACF3
    •   数据库新增或更新忽略空值操作方法报空异常 #I2AB6C
    •   Startup.cs Aop 全局拦截无效 #I2A7T2
    •   Token 过期后自动刷新 Token 无法获取最新的用户信息 bug #I2AWQI
    •   [ApiDescriptionSettings(Tag="xx")] 导致 swagger.json 报错 bug #I2B47R
    •   Mysql sql 数据库查询结果 tinyint 类型转换出错 bug #I2BEBM
    •   规范化结果多次包裹类型 bug #I2BHHZ
    •   动态 Api 基元类型数组问题 #I2BMS5
    •   sql 查询枚举类型转换异常 bug #I2BS2Y
    •   string.SqlQuerizeAsync<T1>() 拓展返回错误 bug #I2BSTS
    •   动态 Api 子类重写父类方法并取别名后 Swagger 异常 bug #I2C9VP
    •   网络请求 application/json 序列化大小写问题 #I2CRJC
    •   多数据库定位器实体嵌套关联 bug #I2CVN0
    •   跨域响应头设置无效 bug #I2CW5T
    •   远程网络请求代理打印到 MiniProfiler bug #I2CZBC
    •   远程请求响应拦截器 bug #I2D4DG
    •   SqlSugar 框架 AsQueryable() 一直追加参数 #I2DH1D
    •   自动刷新 Token 空异常 bug #I2DO29
    •   生成 JWT Token 不传过期时间出现验证 401 bug #I2DO8L
    •   AppStartup 排序无效 #I2DVD2
    •   未启用多语言服务时友好异常和验证出现空异常 #I2ECUJ
    •   数据校验字母和数字组合无法匹配 bug #I2EF2Q
    •   数据校验手机或固话无效 bug #I2M5IZ
    •   Dapper 拓展解析 SqlConnection 异常 bug #I2M5P2
    •   开启多语言后,EF 迁移异常 bug #I2M7DT
    •   IEntityTypeBuilder 不支持多重继承 bug #I2PAOD
    •   JwtHandler 设置自动刷新后,匿名访问无法通过 bug #I2SDOX
    •   Dapper 拓展中 SqlServer 数据库获取连接对象类型 bug #PR159
  • 其他更改

    •   移除 Sql 查询结果映射检查 [NotMapper] 特性机制 #I34XD0
    •   依赖注入时排除 IDynamicApiController 接口 #I2ECTG
    •   MD5 加密性能 #PR158
  • 文档变化

    •   文档首页 #I34XBR
    •   网络请求文档 #I2APGJ
    •   多语言文档 #I2DOCL
    •   文档全文搜索引擎 #I34XAW
    •   全局静态类类型 #I34XB4
    •   框架可配置选项文档 #I34XB9
    •   事件总线文档 #I34XBI
    •   数据加解密文档 #I34XC0
    •   贡献指南文档 #I34XC8
    •   HttpContext文件上传下载 博客文章 #I34XCB
    •   文档小调整,小优化
  • 问答答疑

    •   跨域设置无效 #I2ASNJ
    •   MVC 视图无效,原因是 .cshtml 文件没有设置为 内容 #I2AXUU
    •   Sql 操作可以实现事务吗?#I2B0NX
    •   IRepository 操作数据库会打开多次数据库连接 #I2BB7B
    •   如何进入自定义 AppAuthorizeHandler 断点 #I2BGXY
    •   SqlSugar 注入问题 #I2C2AQ
    •   建议增加 API 签名验证,时效验证 #I2C6ET
    •   多数据库多租户同时使用 Add-Migration 报错 #I2CEHS
    •   ISqlSugarRepository 没有 Getxxx 方法 #I2CJLZ
    •   cli.ps1 如何将 sql 里的表导出成 model#I2CSUL
    •   手动修改 Swagger 终结点路径无效 #I2D608
    •   DefaultDbContext 不能识别 #I2DCZX
    •   各分层项目 Startup.cs 支持 Configuration #I2DDUP
    •   Aop 无法拦截,无效 #I2DEY8
    •   mysql 执行 Add-Migration 报错 #I2DSB8\
    •   Entity 创建时间和是否删除添加默认值 #I2E04H
    •   swagger 中多个 servers 设置 #I2E0IF
    •   全局筛选器 没有执行 #I2E5R4
    •   多数据库定位器疑问 #I2E77T
    •   cli.ps 逆向工程 Mysql 数据库报错 #I2E7I5
    •   Swagger 开发环境 applicationsettings.json 中文乱码 #I2EAG1
    •   增加指定路径程序集映射 #I2EEO2
    •   动态编译 cs 脚本文件 #I2EH66
    •   自定义中间件,返回的错误没有规范化结果 #I2NV8S
    •   Swagger 循环引用设置生成文档层级无效 #I2PLQQ
    •   配置文件支持 yaml 文件吗? #I2TJ3N
    •   修改数据库未 mysql 执行 Add-Migration 报错 #I2VR64
    •   多数据库使用定位器时报错 #I2VR8F
    •   Migration To Oracle 异常 #I2WBYQ
    •   开发时显示 Swagger,上线时关闭 Swagger,这需要怎么配置 #I2WOYV
    •   兼容 Mvc 复杂验证没有试验成功 #I2X3GV
    •   Aop 能不能支持无接口的类 #I2X8AS
    •   关于 JWT Token 自动刷新问题 #I2YD4K
    •   能否增加一个拓展的 Entity,增加一些拓展的属性 #I2YDKT
    •   Furion 无法还原包,使用Nuget 下载和通过最新的的脚手架下载都提示这个问题 #I30446
    •   复杂校验与特性验证不能并行 #I3046U

v1.7.0(已发布)

  • 新特性

    •   Furion.Extras.ObjectMapper.Mapster 拓展包 #I29LSJ
    •   Furion.Extras.Logging.Serilog 拓展包 #I2AAN8
    •   Furion.Extras.Web.HttpContext 拓展包 #I29LSM
    •   内置 Token 刷新机制支持 #I29K57
    •   动态数据库上下文,支持运行时执行 OnModelCreating #I28UDT
    •   支持依赖注入排除指定接口 #I29693
    •   规范化结果返回时间戳字段 #I29697
    •   基础 CURD 父类操作例子 #I296SR
    •   sql.Change("定位器完整类型名称") 支持 #I29LAB
    •   UpdateIncludeUpdateExclude 忽略空参数支持 #I29VUG
    •   数据库上下文内置假删除查询过滤器支持 #I29Y2R
    •   忽略空值排除默认时间格式 #I29VUV
    •   MiniProfiler 组件 #I297R9
  • 突破性变化

    •   AppAuthorizeHandler 授权管道为异步处理 #I29MD9
    •   Swagger 默认启用 JWT 授权支持 #I29LI4
    •   HttpContextUtilities 名称改为 HttpContextLocal #I29KQE
    •   UnifyResultContext 名称改为 UnifyContext #I29LLZ
    •   只有执行迁移命令才扫描种子数据 #I29E6P
    •   规范化结果 Successed 属性名为 Succeeded #I29NMV
    •   Mapster 对象组件,采用提供拓展方式 #I29D2M
    •   CacheManager 拓展类 #I29LU1
    •   SaveChanges 拦截器 #I292LO
  • 问题修复

    •   未注册的数据库上下文也被引用全局查询拦截器 bug #I29ZXJ
    •   手动返回 BadObjectResultValidationProblemDetails 结果类型时规范化结果失效 bug #I29ZU9
    •   动态 WebApi KeepNameKeepVerbSplitCamelCase 无效 bug #I29X90
    •   Sql代理 返回 元组 类型出错 bug #I29SMV
    •   401,403 状态码规范化返回值属性变大写 bug #I29M8Y
    •   HttpContext 空异常 bug #I29LU4
    •   接口无返回值没有应用规范化结果 bug #I29GT7
    •   前端 Less 配置文件导致主机启动失败 bug #I29E7P
    •   执行 sql 结果转泛型后属性重复赋值 bug #I29BUO
    •   Swagger 关闭 MiniProfiler 之后 组中组 失效 #I29789
    •   未启用规范化结果时异常返回 System.Object 字符 #I2969A
    •   正数数据验证 0 也验证通过 bug #I2955T
    •   非泛型类集成泛型接口依赖注入 bug #I294YT
    •   Swagger 不支持 new 覆盖父类的 bug #I28Z1A
    •   JsonSerializerUtility 没有公开 bug #I28WMI
    •   SqlSugar 拓展查询泛型类型注册异常 bug #I28VMT
    •   Furion Tools 不支持生成不同命名空间的实体 bug #I2A175
    •   全局拦截器无效 bug #I2A7T2
    •   新增或更新忽略空值空异常 bug #I2AB6C
  • 其他更改

    •   Token 生成加密算法 #I29KIH
  • 文档变化

    •   日志文档 #I28Y9D
    •   数据库上下文、实体拦截器、配置、一分钟入门等等文档
  • 问答答疑

    •   Swagger 如何实现授权访问 #I294F2
    •   如何实现多个数据库多对多实体配置 #I29G6S
    •   动态 WebApi 支持文件上传吗 #I29R5E
    •   多个数据库上下文无法生成迁移代码 #I2A6II

v1.4.0(已发布)

  • 新特性

    •   Furion 支持二级虚拟目录部署功能 #I28B77
    •   Furion.Template.RazorWithWebApi 脚手架 #I28QGI
    •   Furion.Template.BlazorWithWebApi 脚手架 #I27Z3O
    •   EFCore 时态查询拓展 #I28AJ
    •   [AppDbContext(连接字符串,数据库类型)] 配置支持 #I28QTB
    •   DateTimeOffsetDateTime 拓展方法 #I27MQA
    •   ValidationTypes 验证正则表达式智能提示 #I2801V
    •   ValiationTypes.WordWithNumber 验证 #I2805
    •   获取客户端和服务端 IP 地址 #I28QV9
  • 突破性变化

    •   .NET 5.0 版本至 .NET 5.0.1 版本 #I28QU
    •   视图引擎功能,优化不规范命名和新增字符串模板编译 #I28G0S
    •   数据库实体查找算法,并优化性能 #I28QUQ
    •   应用启动初始化性能和数据库第一次自动配置 DbSet 性能
  • 问题修复

    •   多数据库上下文配置定位器后实体无法正确生成 bug #I2888L
    •   多租户数据库上下文实体生成 bug #I2891G
    •   对象验证失败提示消息没有应用 JSON 大小写配置 bug #I27UTX
    •   仓储 InsertUpdate 方法指定 ignoreNullValues 无效 bug #I27UN6
    •   Controller 派生类如果贴了 [Route] 特性后出现在 Swagger 中 bug #I27TN7
    •   SqlScalar 执行 sql 返回 Nullable 类型出现转换失败 bug #I27S2N
    •   [UnitOfWork] 特性异常 bug #I27MLM
    •   sql 静态执行方式和 sql 高级代理无法监听数据库连接状态 bug #I27M4F
    •   修复更换 Json 序列化库无效 bug,如替换为 Microsoft.AspNetCore.Mvc.NewtonsoftJson #I27M43
    •   Furion Tools 工具生成模型 bug #I27XI5
    •   软删除没有生效 bug #I2804I
    •   Furion Tools 识别带多个 \\ 的连接字符串识别 bug #I280TS#PR91
    •   Furion Tools 无法取消生成 bug #I2816M
    •   DateTimeOffset 转本地时间差 8 小时 bug #I28BA9
    •   启用 bundle js&css 压缩后启动异常 bug #I28KR
    •   ValidationTypes.Required 无效 bug #PR98
    •   规范化结果OnValidateFailed 参数名拼写错误 bug #PR93#PR92
    •   授权管道验证失败还显示结果 bug #PR89
  • 其他更改

    •   README.md 友情连接地址 #PR88
    •   模板脚手架源码,添加 EFCore Tools#PR87
    •   README.md Nuget 图标 #PR85
    •  List<T>DateTable #PR97
  • 文档变化

    •   视图引擎模板文档 #I27ZVA
    •   EFCore 时态查询文档 #I28AJ, DOC
    •   仓储文档书写纰漏 bug #PR90
    •   选项文档错误 bug #PR86
    •   实体数据监听器 文档书写错误 bug #PR83
    •   数据库上下文、多数据库、脚手架等文档
  • 问答答疑

    •   希望 api 返回的值自动将 null 转为 ''[] #I286IJ
    •   添加网关功能 #I27TP7,【已关闭】
    •   新增 SqlQuery<T> 获取单条记录方法 #I28M1V
    •   希望可以提供集成 Serilog 例子 #I282J4
    •   如何通过特性配置唯一约束 #I2891L
    •   怎么读取 appsettings.json 数组 #I27WU
    •   IRepository<TEntity> 出现空异常 #I281IE
    •   规范化接口问题问题 #I28NMZ
    •   统一返回值模型中 OnResponseStatusCodes 未执行 #I28NNL

v1.2.0(已发布)

  • 新特性

    •   雪花算法 #I26OXG, #PR78
    •   [AppDbContext] 配置数据库提供器支持 #I27G3T
    •   实体表数据更改监听接口 IEntityDataChangedListener #I278DD, #I278LQ
    •   全局服务接口 AOP 拦截功能 #I278CP
    •   定位器仓储 IDbRepository<TDbContextLocator> #I276Q3
    •   数据库操作 InsertOrUpdate 支持排除空字符串功能 #I272OG
    •   数据库操作 UpdateIncludeUpdateExclude 匿名对象支持 #I271X0
    •   数据验证传入空对象跳过验证支持 #I273R4
    •   应用启动时支持排除特定配置文件自动加载 #I26U0A
    •   单个实体表名前缀支持 #I26LX0
    •   MySql 数据库自动配置默认版本号 #I26XQ6
    •   授权处理程序代码
  • 突破性变化

    •   实体表数据更改监听接口 IEntityDataChangedListener #I278DD, #I278LQ
    •   全局服务接口 AOP 拦截功能 #I278CP
    •   雪花算法 #I26OXG, #PR78
  • 问题修复

    •   视图引擎加载外部程序集出错 bug
    •   依赖注入代理接口报空对象异常 bug
    •   EFCore 取消附加实体出错 bug
    •   数据库仓储在非 Web 请求下出现空异常 bug
    •   多个授权策略共存问题出现无效 bug
    •   友好异常 Oop.Oh 不支持普通方法 bug
    •   获取多租户对象时数据库上下文出现作用域验证失败 bug
    •   工作单元不支持 Sql代理 拦截 bug #I27GST
  • 文档变化

    •   实体数据监听器 文档
    •   一分钟入门、应用启动、官方脚手架、数据库操作指南、对象映射、规范化文档、异常处理、鉴权授权文档

v1.1.0(已发布)

  • 新特性

    •   Db.GetDbContext() 获取默认数据库上下文方法
    •   HttpContextUtility.GetCurrentHttpContext() 获取全局 HttpContext 上下文
    •   App.GetRequiredService<> 解析服务方法
    •   object.GetService<> 对象拓展方法
    •   策略授权 PolicyPipeline 基类方法,支持多重判断授权
    •   JWTEncryption.ValidateJwtBearerToken 手动验证静态方法
    •   全局数据库上下文 InsertOrUpdateIgnoreNullValuesEnabledEntityStateTracked 全局配置
    •   Swagger Jwt授权 全局授权参数 #I26GLR
    •   InsertOrUpdate 支持自定义判断条件功能 #I269Q1
    •   字符串字段小写命名支持 #I2695D
    •   字符串文本对比功能 #I268LE
    •   全局异常特性消息功能 #I2662O
    •   InsertUpdate 数据库忽略空值功能 #I264Q4
  • 突破性变化

    •   Fur 项目名为 Furion
    •   Db.GetRequestDbContext<>() 命名为 Db.GetDbContext<>()
    •   Db.GetDbContext<>() 命名为 Db.GetDuplicateDbContext<>()
    •   App.GetService<> 解析服务的底层逻辑,大大提高了解析服务的性能
    •   授权核心代码,保持和微软一致的授权规范 #I26DCB
    •   App.GetRequestService<> 方法
    •   ValidateJwtBearer Jwt 授权方法,无需手动判断了
  • 问题修复

    •   Furion 官方脚手架生成后编译异常 bug
    •   Tenant 内置属性不是 virtual 修饰 bug
    •   dockerfile 新命名构建失败 bug
    •   自定义角色授权和多个授权共存出现 403 bug #I26H1L
    •   httpContext.GetEndpoint() 空异常 bug #PR73
    •   Oops.Oh 空异常和不支持服务抛异常 bug #I26EFU#I26GM4
    •   cli.ps 生成文件编码乱码 bug #I26DVT
    •   Swagger 文件上传按钮不显示 #I26B6U
    •   规范化结果授权状态码序列化大小写不一致问题 #I26B26
    •   未启用规范化结果时中文乱码 bug #I268T5
    •   MySql 异步异常捕获不到 bug #I265SO
    •   cli.ps1 提示找不到数据库连接字符串 bug #I2647U
  • 其他更改

    •   代码性能小优化和小调整
  • 文档变化

    •   一分钟入门、安全鉴权、数据库等文档

v1.0.3(已发布)

  • 新特性

    •   Mvc 模板脚手架:Fur.Template.Mvc
    •   WebApi 模板:Fur.Template.Api
    •   Mvc/WebApi 模板:Fur.Template.App
    •   Razar Pages 模板:Fur.Template.Razor
    •   Blazor 模板:Fur.Template.Blazor
  • 突破性变化

    •   PagedListSystem.Collections.Generic 命名空间下
    •   解析服务性能问题,底层代码大量优化
  • 问题修复

    •   ApiSears.ControllerEnd不起作用 bug #I25KH6
    •   RemoteRequest 请求完成结果序列化属性大小写问题 #I25I8R
    •   HttpContext.GetEndpoinet() 空异常 bug #PR73
  • 文档变化

    •   入门文档、数据库上下文文档、多数据库操作文档

v1.0.2(已发布)

  • 新特性

    •   Pomelo.EntityFrameworkCore.MySql 最新 .NET 5 包配置 #I24ZQK
    •   .AddDateTimeJsonConverter(format) 时间格式序列化配置
    •   DateTimeDateTimeOffset 类型序列化格式配置 #I253FI
  • 突破性变化

    •   Mapster 包至 7.0.0
    •   App.Services 名为 App.ServiceProvider
    •   App.ApplicationServicesApp.GetRequestService<>()
    •   非 Web 主机注入拓展
  • 问题修复

    •   services.AddFriendlyException() 缺少配置注入 bug
    •   数据库上下文池被释放和高并发下内存溢出 bug #I2524K#I24UMN
    •   Sql代理 返回空数据时异常 bug #I24TCK
    •   工作单元 [UnitOfWork] 多数据库被释放 bug #I24Q6W
  • 其他更改

    •   EntityBaseEntity 所有属性为 vitural 修饰
    •   Jwt 读取和解析性能
    •   优化代码支持 C# 9.0 最新语法
    •   MD5 加密性能 #PR71
    •   无用或未使用代码
  • 文档

    •   数据库上下文、多数据库、一分钟入门文档

v1.0.0(已发布)

  • 新特性

    •   网络请求 RemoteRequest 组件 #I1YYWD
    •   .AddInjectBase() 注入,只包含基础服务注入
    •   所有服务都支持 IServiceCollectionIMvcBuilder 注入
    •   抛异常状态码设置功能 StatusCode
    •   Swagger 序列化支持 Pascal 属性命名方式
  • 突破性变化

    •   所有的包为 .NET 5 正式版
  • 问题修复

    •   SqlProxy 代理异步处理 bug
    •   数据库类型 DatetimeDateTimeOffset bug
    •   属性首字母大小写序列化不匹配出现 null bug
    •   对象序列化中文出现乱码 bug
    •   默认序列化配置无效 bug
    •   数据库非依赖注入方式提交无效 bug
    •   应用程序池提交所有 DbContext 空异常 bug
    •   Saas 多租户 Tenant 类型字符串属性在 MySql 数据库下出现 longtext 类型 bug
    •   Mvc 自动验证字符串空值 bug #I24M2T
    •   枚举注释被覆盖 bug #I24N6J
    •   忽略规范化结果无效 bug #I24B8P
    •   Swagger 默认 ContentType 不是 applicaiton/json bug #I24F3U
    •   内置 System.Text.JsonNewtonsoft.Json 冲突 bug #I24F3U
  • 其他更改

    •   Fur 框架域名为:https://furion.icu
    •   仓储 FromSqlRawFromSqlInterpolated 接口位置
    •   数据加解密性能,#PR70
  • 文档

    •   README.md、框架介绍、数据库上下文、配置选项、多租户、跨域文档
+ + + + \ No newline at end of file diff --git a/handbook/build/docs/view-engine/index.html b/handbook/build/docs/view-engine/index.html new file mode 100644 index 00000000000..bf4e6d76d31 --- /dev/null +++ b/handbook/build/docs/view-engine/index.html @@ -0,0 +1,17 @@ + + + + + +17. 视图引擎 | Furion + + + + + +
+

17. 视图引擎

17.1 关于视图引擎

视图引擎负责根据视图模板创建 HTML。视图通常是 HTML 和编程语言的某种混合。支持变量定义、方法调用及逻辑编写。

Furion 框架中,底层集成了微软提供的 Razor 视图引擎组件并提供更加灵活方便的语法糖。

17.2 视图引擎作用

  • 支持 ASP.NET Core 完整的 Razor 语法
  • 根据不同的数据编译模板产生不同的输出
  • 实现强大的插件化机制
  • 实现全站页面静态化
  • 可以用作邮件模板、短信模板、优惠券信息模板等

17.3 基础使用

17.3.1 注册服务

使用之前需在 Startup.cs 中注册 视图引擎服务

public void ConfigureServices(IServiceCollection services)
{
services.AddViewEngine();
}

17.3.2 使用方式

  • 构造函数注入 IViewEngine
using Furion.DynamicApiController;
using Furion.ViewEngine;

namespace Furion.Application
{
public class ViewEngineService : IDynamicApiController
{
private readonly IViewEngine _viewEngine;
public ViewEngineService(IViewEngine viewEngine)
{
_viewEngine = viewEngine;
var result = _viewEngine.RunCompile("Hello @Model.Name", new { Name = "Furion" });
}
}
}
  • 字符串方式
var result = "Hello @Model.Name".RunCompile(new { Name = "Furion" });

17.3.3 弱类型模板

var result = _viewEngine.RunCompile("Hello @Model.Name", new { Name = "Furion" });

结果:

Hello Furion

支持异步 RunCompileAsync

17.3.4 强类型模板

var result = _viewEngine.RunCompile(@"
Hello @Model.Name
@foreach(var item in Model.Items)
{
<p>@item</p>
}
", new TestModel
{
Name = "Furion",
Items = new[] { 3, 1, 2 }
});

结果:

Hello Furion
<p>3</p>
<p>1</p>
<p>2</p>

支持异步 RunCompileAsync

17.3.5 高性能模板缓存 🥇

由于模板编译需要消耗大量的性能,所以建议使用带 FromCached 结尾的 RunCompileFromCached 替代。调用该方法后会自动将模板编译成 .dll 以便下次使用。减少第二次之后使用模板的性能损耗。

如,强类型模板:

var result = _viewEngine.RunCompileFromCached(@"
Hello @Model.Name
@foreach(var item in Model.Items)
{
<p>@item</p>
}
", new TestModel
{
Name = "Furion",
Items = new[] { 3, 1, 2 }
});

结果:

Hello Furion
<p>3</p>
<p>1</p>
<p>2</p>

调用 RunCompileFromCached 方法之后将会使用 MD5 加密模板并生成 MD5字符串的 .dll 存放在网站根目录下的 templates 目录中。只要模板内容不变,数据发生改变也不会重新编译模板。这样大大的提高了首次之后的性能。

如,传入新的数据:

var result = _viewEngine.RunCompileFromCached(@"
Hello @Model.Name
@foreach(var item in Model.Items)
{
<p>@item</p>
}
", new TestModel
{
Name = "Furion",
Items = new[] { 5,6,7,8 }
});

结果:

Hello Furion
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>

模板不再重新编译,只是重新替换数据。

17.4 高级用法

高级用法支持将特定程序集、特定命名空间、特定类型引入到模板中使用。

17.4.1 添加程序集

比如这里添加 System.IO 程序集:

var result = _viewEngine.RunCompileFromCached(@"<div>@System.IO.Path.Combine(""Furion"", ""ViewEngine"")</div>", builderAction: builder =>
{
builder.AddAssemblyReferenceByName("System.IO");
});

结果:

<div>Furion\\ViewEngine</div>

另外,Furion 提供多种方式加载程序集:

builder.AddAssemblyReferenceByName("System.Security"); // 通过名称
builder.AddAssemblyReference(typeof(System.IO.File)); // 通过类型
builder.AddAssemblyReference(Assembly.Load("source")); // 通过元数据引用

17.4.2 添加命名空间

var result = _viewEngine.RunCompileFromCached(@"<div>@Path.Combine(""Furion"", ""ViewEngine"")</div>", builderAction: builder =>
{
builder.AddUsing("System.IO");
builder.AddAssemblyReferenceByName("System.IO");
});

结果:

<div>Furion\\ViewEngine</div>

也支持加入多个 using

builder.AddUsing("System.IO");
builder.AddUsing("Furion");

17.4.3 定义模板方法

var result = _viewEngine.RunCompileFromCached(@"
<area>
@{ RecursionTest(3); }
</area>

@{
void RecursionTest(int level)
{
if (level <= 0)
{
return;
}

<div>LEVEL: @level</div>
@{ RecursionTest(level - 1); }
}
}
");

结果:

<area>
<div>LEVEL: 3</div>
<div>LEVEL: 2</div>
<div>LEVEL: 1</div>
</area>

17.4.4 调用类方法

定义 CustomModel 类并继承 ViewEngineModel 基类

public class CustomModel : ViewEngineModel
{
public int A { get; set; }
public string B { get; set; }
public string Decorator(object value)
{
return "-=" + value + "=-";
}
}

在模板中调用 Decorator(value) 方法:

var content = @"Hello @A, @B, @Decorator(123)";

var template = _viewEngine.Compile<CustomModel>(content);

var result = template.Run(instance =>
{
instance.A = 10;
instance.B = "Alex";
});

结果:

Hello 10, Alex, -=123=-

17.5 IViewEngine 接口

IViewEngine 提供了简单方便的 RunCompile 方法,也提供了最原始化的 CompileRun 方法。

通过原始的 CompileRun 方法可以实现很多复杂的逻辑和自定义指令集。

/// <summary>
/// 编译模板
/// </summary>
/// <param name="content"></param>
/// <param name="builderAction"></param>
/// <returns></returns>
IViewEngineTemplate Compile(string content, Action<IViewEngineOptionsBuilder> builderAction = null);
/// <summary>
/// 编译模板
/// </summary>
/// <param name="content"></param>
/// <param name="builderAction"></param>
/// <returns></returns>
Task<IViewEngineTemplate> CompileAsync(string content, Action<IViewEngineOptionsBuilder> builderAction = null);
/// <summary>
/// 编译模板
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="content"></param>
/// <param name="builderAction"></param>
/// <returns></returns>
IViewEngineTemplate<T> Compile<T>(string content, Action<IViewEngineOptionsBuilder> builderAction = null)
where T : IViewEngineModel;
/// <summary>
/// 编译模板
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="content"></param>
/// <param name="builderAction"></param>
/// <returns></returns>
Task<IViewEngineTemplate<T>> CompileAsync<T>(string content, Action<IViewEngineOptionsBuilder> builderAction = null)
where T : IViewEngineModel;

17.6 字符串模板替换引擎

Furion 除了内置视图引擎之外,还支持以下几种模板替换,如:

// 提供数据模板方式
var str = "我叫{name}".Render(new Dictionary{ {"name", "Furion"} });
var str = "我叫{Name}".Render(new { Name = "Furion" });
var str = "我叫{Detail.Name}".Render(new { Detail = new { Name = "Furoin" } });

// 从配置读取方式
var str = "我叫#(Furion:Address)".Render();
{
"Furion": {
"Address": "https://www.furion.icu"
}
}

17.7 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/virtual-deploy/index.html b/handbook/build/docs/virtual-deploy/index.html new file mode 100644 index 00000000000..7812ea90d97 --- /dev/null +++ b/handbook/build/docs/virtual-deploy/index.html @@ -0,0 +1,17 @@ + + + + + +34.4 二级虚拟目录部署 | Furion + + + + + +
+

34.4 二级虚拟目录部署

34.4.1 关于二级虚拟目录

通常我们的站点都是部署在网站的根目录下的,但是有些时候,我们可能将网站根目录下的目录作为二级站点或子站点,这个时候,就会出现 404 错误了。

这个时候就需要进行一些特殊配置了。

34.4.2 针对在 IIS 网站下添加 Application 情况

版本说明

以下内容仅限 Furion 3.2.0 + 版本使用。

如果网站是在 Site 下面添加 Application 下部署,则遵循以下步骤:

  1. 添加 Application Pool 应用程序池,并设置为非托管模式
  1. 添加 Application 并选择刚刚创建的应用程序池


  1. 添加应用配置:
{
"SpecificationDocumentSettings": {
"ServerDir": "IIS中应用程序名(Applicaiton)"
}
}

该配置主要是解决 Swagger 出现 404 问题。

个别情况

如果配置之后还 Swagger 还出现不能加载 swagger.json 文件问题,那么需修改启动注册代码:

app.UseInject(string.Empty);  // 确保参数是 strng.Empty

34.4.3 针对非 IIS 下部署情况

注意事项

这里是针对 非 IIS 部署使用的!!!

34.4.3.1 配置 AppSettings

我们只需要配置 AppSettings 即可:

{
"AppSettings": {
"VirtualPath": "/虚拟目录"
}
}

34.4.3.2 .NET6 WebApplication 模式下虚拟目录配置

版本说明

以下内容仅限 Furion 3.2.0 + 版本使用。

由于在 .NET6WebApplication 模式下微软底层发生了改变,所以需要使用 app.UseVirtualPath() 包裹 app.UseInject()app.MapRouteControllers()

app.UseVirtualPath(app =>
{
app.UseInject(String.Empty); // 注意 String.Empty 只是例子,可以不填或填其他的,见一分钟入门
app.MapRouteControllers();
});

注意,app.MapRouteControllers() 是替换 app.MapControllers() 的!

34.4.4 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/docs/vsfast/index.html b/handbook/build/docs/vsfast/index.html new file mode 100644 index 00000000000..d74d9d23e2b --- /dev/null +++ b/handbook/build/docs/vsfast/index.html @@ -0,0 +1,17 @@ + + + + + +2.8 Visual Studio 高效率 | Furion + + + + + +
+

2.8 Visual Studio 高效率

工欲善其事必先利其器!

Visual Studio 提供了非常多代码辅助功能,启用这些功能将大大提高开发效率,这里列举一些常见的配置,后续不断完善。

2.8.1 开启内联参数提示

2.8.2 开启全局智能提示

2.8.3 实时显示诊断错误

在过去,我们需要写完代码编译才能知道具体的错误,最新版的 Visual Studio 支持 内联诊断错误,开启如下:

2.8.4 中文智能提示

打开网站 https://dotnet.microsoft.com/zh-cn/download/intellisense 下载对应的语言版本。

配置教程

如果配置了不能显示中文,可以查看此篇教程 https://blog.csdn.net/sD7O95O/article/details/103776077

关于 NET6 的中文智能提示

因为官方不再提供本地化包了,详情可查看相关 Issue https://github.com/dotnet/docs/issues/27283

可以使用博客园网友 @internalnet 制作的本地化包 https://www.cnblogs.com/internalnet/p/16185298.html

2.8.5 代码搜索

Visual Studio 2022 提供了非常强大的 代码搜索和功能搜索,只需要快捷键 Ctrl + T 呼出,如:

退出搜索只需快捷键 ESC 即可。

2.8.6 反馈与建议

与我们交流

给 Furion 提 Issue

+ + + + \ No newline at end of file diff --git a/handbook/build/img/01.png b/handbook/build/img/01.png new file mode 100644 index 00000000000..f03ec280f0c Binary files /dev/null and b/handbook/build/img/01.png differ diff --git a/handbook/build/img/02.png b/handbook/build/img/02.png new file mode 100644 index 00000000000..96a1846d805 Binary files /dev/null and b/handbook/build/img/02.png differ diff --git a/handbook/build/img/03.png b/handbook/build/img/03.png new file mode 100644 index 00000000000..da3f056c353 Binary files /dev/null and b/handbook/build/img/03.png differ diff --git a/handbook/build/img/04.png b/handbook/build/img/04.png new file mode 100644 index 00000000000..40514842c80 Binary files /dev/null and b/handbook/build/img/04.png differ diff --git a/handbook/build/img/05.png b/handbook/build/img/05.png new file mode 100644 index 00000000000..54a333caa4c Binary files /dev/null and b/handbook/build/img/05.png differ diff --git a/handbook/build/img/06.png b/handbook/build/img/06.png new file mode 100644 index 00000000000..2f476636b3d Binary files /dev/null and b/handbook/build/img/06.png differ diff --git a/handbook/build/img/07.png b/handbook/build/img/07.png new file mode 100644 index 00000000000..52514d993ed Binary files /dev/null and b/handbook/build/img/07.png differ diff --git a/handbook/build/img/08.png b/handbook/build/img/08.png new file mode 100644 index 00000000000..b8eef901483 Binary files /dev/null and b/handbook/build/img/08.png differ diff --git a/handbook/build/img/09.png b/handbook/build/img/09.png new file mode 100644 index 00000000000..c1337f97961 Binary files /dev/null and b/handbook/build/img/09.png differ diff --git a/handbook/build/img/Admin.NET.png b/handbook/build/img/Admin.NET.png new file mode 100644 index 00000000000..760a14a37e7 Binary files /dev/null and b/handbook/build/img/Admin.NET.png differ diff --git a/handbook/build/img/Anno.Core.png b/handbook/build/img/Anno.Core.png new file mode 100644 index 00000000000..3f7652099d5 Binary files /dev/null and b/handbook/build/img/Anno.Core.png differ diff --git a/handbook/build/img/BootstrapBlazor.png b/handbook/build/img/BootstrapBlazor.png new file mode 100644 index 00000000000..7cdc21717d4 Binary files /dev/null and b/handbook/build/img/BootstrapBlazor.png differ diff --git a/handbook/build/img/CCFlow.png b/handbook/build/img/CCFlow.png new file mode 100644 index 00000000000..a598574f687 Binary files /dev/null and b/handbook/build/img/CCFlow.png differ diff --git a/handbook/build/img/CoreShop.png b/handbook/build/img/CoreShop.png new file mode 100644 index 00000000000..ee65ab238f5 Binary files /dev/null and b/handbook/build/img/CoreShop.png differ diff --git a/handbook/build/img/FastTunnel.png b/handbook/build/img/FastTunnel.png new file mode 100644 index 00000000000..c226200ea21 Binary files /dev/null and b/handbook/build/img/FastTunnel.png differ diff --git a/handbook/build/img/Furion_Share.png b/handbook/build/img/Furion_Share.png new file mode 100644 index 00000000000..06ff26e96d2 Binary files /dev/null and b/handbook/build/img/Furion_Share.png differ diff --git a/handbook/build/img/HandyControl.png b/handbook/build/img/HandyControl.png new file mode 100644 index 00000000000..cdf5dd08881 Binary files /dev/null and b/handbook/build/img/HandyControl.png differ diff --git a/handbook/build/img/IoTSharp.png b/handbook/build/img/IoTSharp.png new file mode 100644 index 00000000000..942eda53d97 Binary files /dev/null and b/handbook/build/img/IoTSharp.png differ diff --git a/handbook/build/img/MiniExcel.png b/handbook/build/img/MiniExcel.png new file mode 100644 index 00000000000..082dfec3761 Binary files /dev/null and b/handbook/build/img/MiniExcel.png differ diff --git a/handbook/build/img/OpenAuth.NET.png b/handbook/build/img/OpenAuth.NET.png new file mode 100644 index 00000000000..c5a5405b4d5 Binary files /dev/null and b/handbook/build/img/OpenAuth.NET.png differ diff --git a/handbook/build/img/SqlSugar.png b/handbook/build/img/SqlSugar.png new file mode 100644 index 00000000000..616816794c7 Binary files /dev/null and b/handbook/build/img/SqlSugar.png differ diff --git a/handbook/build/img/SunnyUI.png b/handbook/build/img/SunnyUI.png new file mode 100644 index 00000000000..7b3c882731b Binary files /dev/null and b/handbook/build/img/SunnyUI.png differ diff --git a/handbook/build/img/allrl.png b/handbook/build/img/allrl.png new file mode 100644 index 00000000000..286510bc0d0 Binary files /dev/null and b/handbook/build/img/allrl.png differ diff --git a/handbook/build/img/bgs.jpg b/handbook/build/img/bgs.jpg new file mode 100644 index 00000000000..047207736a5 Binary files /dev/null and b/handbook/build/img/bgs.jpg differ diff --git a/handbook/build/img/bm1.png b/handbook/build/img/bm1.png new file mode 100644 index 00000000000..21ce36d9314 Binary files /dev/null and b/handbook/build/img/bm1.png differ diff --git a/handbook/build/img/c10.jpg b/handbook/build/img/c10.jpg new file mode 100644 index 00000000000..d6ab0cb1401 Binary files /dev/null and b/handbook/build/img/c10.jpg differ diff --git a/handbook/build/img/cd2223.png b/handbook/build/img/cd2223.png new file mode 100644 index 00000000000..4d55bda5742 Binary files /dev/null and b/handbook/build/img/cd2223.png differ diff --git a/handbook/build/img/cdr22.png b/handbook/build/img/cdr22.png new file mode 100644 index 00000000000..e84d8bcf5c0 Binary files /dev/null and b/handbook/build/img/cdr22.png differ diff --git a/handbook/build/img/chinadotnet.png b/handbook/build/img/chinadotnet.png new file mode 100644 index 00000000000..cbe49d197cf Binary files /dev/null and b/handbook/build/img/chinadotnet.png differ diff --git a/handbook/build/img/codefirst1.png b/handbook/build/img/codefirst1.png new file mode 100644 index 00000000000..0e0d8dbf806 Binary files /dev/null and b/handbook/build/img/codefirst1.png differ diff --git a/handbook/build/img/codefirst2.png b/handbook/build/img/codefirst2.png new file mode 100644 index 00000000000..5d3edd4941a Binary files /dev/null and b/handbook/build/img/codefirst2.png differ diff --git a/handbook/build/img/codefirst3.png b/handbook/build/img/codefirst3.png new file mode 100644 index 00000000000..ee1f054dec4 Binary files /dev/null and b/handbook/build/img/codefirst3.png differ diff --git a/handbook/build/img/coreshop.gif b/handbook/build/img/coreshop.gif new file mode 100644 index 00000000000..834ca6defb3 Binary files /dev/null and b/handbook/build/img/coreshop.gif differ diff --git a/handbook/build/img/coreshop_ad.png b/handbook/build/img/coreshop_ad.png new file mode 100644 index 00000000000..8ba92271ff0 Binary files /dev/null and b/handbook/build/img/coreshop_ad.png differ diff --git a/handbook/build/img/crmeb.jpg b/handbook/build/img/crmeb.jpg new file mode 100644 index 00000000000..962f375bf15 Binary files /dev/null and b/handbook/build/img/crmeb.jpg differ diff --git a/handbook/build/img/cron.png b/handbook/build/img/cron.png new file mode 100644 index 00000000000..f3b8d7e3133 Binary files /dev/null and b/handbook/build/img/cron.png differ diff --git a/handbook/build/img/cswz.png b/handbook/build/img/cswz.png new file mode 100644 index 00000000000..8b7c43f5bdf Binary files /dev/null and b/handbook/build/img/cswz.png differ diff --git a/handbook/build/img/custom1.png b/handbook/build/img/custom1.png new file mode 100644 index 00000000000..c7bd3e2eee9 Binary files /dev/null and b/handbook/build/img/custom1.png differ diff --git a/handbook/build/img/custom10.png b/handbook/build/img/custom10.png new file mode 100644 index 00000000000..a1d27034ee5 Binary files /dev/null and b/handbook/build/img/custom10.png differ diff --git a/handbook/build/img/custom11.png b/handbook/build/img/custom11.png new file mode 100644 index 00000000000..e8b5f16dffc Binary files /dev/null and b/handbook/build/img/custom11.png differ diff --git a/handbook/build/img/custom2.png b/handbook/build/img/custom2.png new file mode 100644 index 00000000000..badb16c2e0d Binary files /dev/null and b/handbook/build/img/custom2.png differ diff --git a/handbook/build/img/custom3.png b/handbook/build/img/custom3.png new file mode 100644 index 00000000000..065526127bd Binary files /dev/null and b/handbook/build/img/custom3.png differ diff --git a/handbook/build/img/custom4.jpg b/handbook/build/img/custom4.jpg new file mode 100644 index 00000000000..78d2647b00b Binary files /dev/null and b/handbook/build/img/custom4.jpg differ diff --git a/handbook/build/img/custom5.png b/handbook/build/img/custom5.png new file mode 100644 index 00000000000..7aa9ff30acb Binary files /dev/null and b/handbook/build/img/custom5.png differ diff --git a/handbook/build/img/custom6.png b/handbook/build/img/custom6.png new file mode 100644 index 00000000000..91235e611a9 Binary files /dev/null and b/handbook/build/img/custom6.png differ diff --git a/handbook/build/img/dbcopy1.png b/handbook/build/img/dbcopy1.png new file mode 100644 index 00000000000..762f989529c Binary files /dev/null and b/handbook/build/img/dbcopy1.png differ diff --git a/handbook/build/img/dbcopy10.png b/handbook/build/img/dbcopy10.png new file mode 100644 index 00000000000..878ef97a75e Binary files /dev/null and b/handbook/build/img/dbcopy10.png differ diff --git a/handbook/build/img/dbcopy11.png b/handbook/build/img/dbcopy11.png new file mode 100644 index 00000000000..5ef5edcc70d Binary files /dev/null and b/handbook/build/img/dbcopy11.png differ diff --git a/handbook/build/img/dbcopy12.png b/handbook/build/img/dbcopy12.png new file mode 100644 index 00000000000..6b11a863016 Binary files /dev/null and b/handbook/build/img/dbcopy12.png differ diff --git a/handbook/build/img/dbcopy2.png b/handbook/build/img/dbcopy2.png new file mode 100644 index 00000000000..e3b4301bfe5 Binary files /dev/null and b/handbook/build/img/dbcopy2.png differ diff --git a/handbook/build/img/dbcopy3.png b/handbook/build/img/dbcopy3.png new file mode 100644 index 00000000000..33dfb67fbbc Binary files /dev/null and b/handbook/build/img/dbcopy3.png differ diff --git a/handbook/build/img/dbcopy4.png b/handbook/build/img/dbcopy4.png new file mode 100644 index 00000000000..b2420884053 Binary files /dev/null and b/handbook/build/img/dbcopy4.png differ diff --git a/handbook/build/img/dbcopy5.png b/handbook/build/img/dbcopy5.png new file mode 100644 index 00000000000..7834f52a7a8 Binary files /dev/null and b/handbook/build/img/dbcopy5.png differ diff --git a/handbook/build/img/dbcopy6.png b/handbook/build/img/dbcopy6.png new file mode 100644 index 00000000000..ce9e11bf5d5 Binary files /dev/null and b/handbook/build/img/dbcopy6.png differ diff --git a/handbook/build/img/dbcopy7.png b/handbook/build/img/dbcopy7.png new file mode 100644 index 00000000000..118da3e726d Binary files /dev/null and b/handbook/build/img/dbcopy7.png differ diff --git a/handbook/build/img/dbcopy8.png b/handbook/build/img/dbcopy8.png new file mode 100644 index 00000000000..1e5cb904b85 Binary files /dev/null and b/handbook/build/img/dbcopy8.png differ diff --git a/handbook/build/img/dbcopy9.png b/handbook/build/img/dbcopy9.png new file mode 100644 index 00000000000..278a8d0df5a Binary files /dev/null and b/handbook/build/img/dbcopy9.png differ diff --git a/handbook/build/img/dbfirst1.png b/handbook/build/img/dbfirst1.png new file mode 100644 index 00000000000..f24f9389011 Binary files /dev/null and b/handbook/build/img/dbfirst1.png differ diff --git a/handbook/build/img/dbfirst2.png b/handbook/build/img/dbfirst2.png new file mode 100644 index 00000000000..8c2638911f1 Binary files /dev/null and b/handbook/build/img/dbfirst2.png differ diff --git a/handbook/build/img/dbfirst3.png b/handbook/build/img/dbfirst3.png new file mode 100644 index 00000000000..08fcdf3e31c Binary files /dev/null and b/handbook/build/img/dbfirst3.png differ diff --git a/handbook/build/img/dbfirst4.png b/handbook/build/img/dbfirst4.png new file mode 100644 index 00000000000..01ddf84c120 Binary files /dev/null and b/handbook/build/img/dbfirst4.png differ diff --git a/handbook/build/img/dbfirst5.png b/handbook/build/img/dbfirst5.png new file mode 100644 index 00000000000..7ffff7178ba Binary files /dev/null and b/handbook/build/img/dbfirst5.png differ diff --git a/handbook/build/img/dbfirst6.png b/handbook/build/img/dbfirst6.png new file mode 100644 index 00000000000..2d98ca1e4aa Binary files /dev/null and b/handbook/build/img/dbfirst6.png differ diff --git a/handbook/build/img/dbfirst7.png b/handbook/build/img/dbfirst7.png new file mode 100644 index 00000000000..9aafa25e02b Binary files /dev/null and b/handbook/build/img/dbfirst7.png differ diff --git a/handbook/build/img/dbfirst8.png b/handbook/build/img/dbfirst8.png new file mode 100644 index 00000000000..0435a5d2b54 Binary files /dev/null and b/handbook/build/img/dbfirst8.png differ diff --git a/handbook/build/img/dbfirst9.png b/handbook/build/img/dbfirst9.png new file mode 100644 index 00000000000..9a7a9798194 Binary files /dev/null and b/handbook/build/img/dbfirst9.png differ diff --git a/handbook/build/img/dbrece1.png b/handbook/build/img/dbrece1.png new file mode 100644 index 00000000000..ac94417a3a2 Binary files /dev/null and b/handbook/build/img/dbrece1.png differ diff --git a/handbook/build/img/dbrece10.png b/handbook/build/img/dbrece10.png new file mode 100644 index 00000000000..9bca161744c Binary files /dev/null and b/handbook/build/img/dbrece10.png differ diff --git a/handbook/build/img/dbrece11.png b/handbook/build/img/dbrece11.png new file mode 100644 index 00000000000..687c9b1bb88 Binary files /dev/null and b/handbook/build/img/dbrece11.png differ diff --git a/handbook/build/img/dbrece2.png b/handbook/build/img/dbrece2.png new file mode 100644 index 00000000000..e4448a70d4a Binary files /dev/null and b/handbook/build/img/dbrece2.png differ diff --git a/handbook/build/img/dbrece3.png b/handbook/build/img/dbrece3.png new file mode 100644 index 00000000000..6950292ffa3 Binary files /dev/null and b/handbook/build/img/dbrece3.png differ diff --git a/handbook/build/img/dbrece4.png b/handbook/build/img/dbrece4.png new file mode 100644 index 00000000000..a1c20a7d211 Binary files /dev/null and b/handbook/build/img/dbrece4.png differ diff --git a/handbook/build/img/dbrece5.png b/handbook/build/img/dbrece5.png new file mode 100644 index 00000000000..52ee3f91f39 Binary files /dev/null and b/handbook/build/img/dbrece5.png differ diff --git a/handbook/build/img/dbrece6.png b/handbook/build/img/dbrece6.png new file mode 100644 index 00000000000..ad906781b7b Binary files /dev/null and b/handbook/build/img/dbrece6.png differ diff --git a/handbook/build/img/dbrece7.png b/handbook/build/img/dbrece7.png new file mode 100644 index 00000000000..ddf1280f378 Binary files /dev/null and b/handbook/build/img/dbrece7.png differ diff --git a/handbook/build/img/dbrece8.png b/handbook/build/img/dbrece8.png new file mode 100644 index 00000000000..ba83d61c7fd Binary files /dev/null and b/handbook/build/img/dbrece8.png differ diff --git a/handbook/build/img/dbrece9.png b/handbook/build/img/dbrece9.png new file mode 100644 index 00000000000..3a454d5ea8c Binary files /dev/null and b/handbook/build/img/dbrece9.png differ diff --git a/handbook/build/img/dbsplit1.jpg b/handbook/build/img/dbsplit1.jpg new file mode 100644 index 00000000000..20c321a5a21 Binary files /dev/null and b/handbook/build/img/dbsplit1.jpg differ diff --git a/handbook/build/img/dbsplit2.jpg b/handbook/build/img/dbsplit2.jpg new file mode 100644 index 00000000000..e3eb2596c40 Binary files /dev/null and b/handbook/build/img/dbsplit2.jpg differ diff --git a/handbook/build/img/dbsplit3.jpg b/handbook/build/img/dbsplit3.jpg new file mode 100644 index 00000000000..b63900c4e51 Binary files /dev/null and b/handbook/build/img/dbsplit3.jpg differ diff --git a/handbook/build/img/dbsplit4.jpg b/handbook/build/img/dbsplit4.jpg new file mode 100644 index 00000000000..69ccfbbb9b8 Binary files /dev/null and b/handbook/build/img/dbsplit4.jpg differ diff --git a/handbook/build/img/dbsplit5.jpg b/handbook/build/img/dbsplit5.jpg new file mode 100644 index 00000000000..21df07259b4 Binary files /dev/null and b/handbook/build/img/dbsplit5.jpg differ diff --git a/handbook/build/img/dbsplit6.jpg b/handbook/build/img/dbsplit6.jpg new file mode 100644 index 00000000000..c58846b9f10 Binary files /dev/null and b/handbook/build/img/dbsplit6.jpg differ diff --git a/handbook/build/img/dcsff.gif b/handbook/build/img/dcsff.gif new file mode 100644 index 00000000000..374213aa545 Binary files /dev/null and b/handbook/build/img/dcsff.gif differ diff --git a/handbook/build/img/demo.gif b/handbook/build/img/demo.gif new file mode 100644 index 00000000000..e1c8ec164d9 Binary files /dev/null and b/handbook/build/img/demo.gif differ diff --git a/handbook/build/img/df10.png b/handbook/build/img/df10.png new file mode 100644 index 00000000000..05b4c18a99f Binary files /dev/null and b/handbook/build/img/df10.png differ diff --git a/handbook/build/img/dfz.gif b/handbook/build/img/dfz.gif new file mode 100644 index 00000000000..897be33d0d6 Binary files /dev/null and b/handbook/build/img/dfz.gif differ diff --git a/handbook/build/img/dgqqwc.png b/handbook/build/img/dgqqwc.png new file mode 100644 index 00000000000..2206d4d94d2 Binary files /dev/null and b/handbook/build/img/dgqqwc.png differ diff --git a/handbook/build/img/dgwc.png b/handbook/build/img/dgwc.png new file mode 100644 index 00000000000..8d5eb056fde Binary files /dev/null and b/handbook/build/img/dgwc.png differ diff --git a/handbook/build/img/di1.gif b/handbook/build/img/di1.gif new file mode 100644 index 00000000000..a1add7bb0ef Binary files /dev/null and b/handbook/build/img/di1.gif differ diff --git a/handbook/build/img/di2.gif b/handbook/build/img/di2.gif new file mode 100644 index 00000000000..20875d63ff6 Binary files /dev/null and b/handbook/build/img/di2.gif differ diff --git a/handbook/build/img/dlrzh.gif b/handbook/build/img/dlrzh.gif new file mode 100644 index 00000000000..e418ec8bf2c Binary files /dev/null and b/handbook/build/img/dlrzh.gif differ diff --git a/handbook/build/img/domyself.png b/handbook/build/img/domyself.png new file mode 100644 index 00000000000..739c02fe106 Binary files /dev/null and b/handbook/build/img/domyself.png differ diff --git a/handbook/build/img/dotnetchina.jpg b/handbook/build/img/dotnetchina.jpg new file mode 100644 index 00000000000..6ce5c0f9c51 Binary files /dev/null and b/handbook/build/img/dotnetchina.jpg differ diff --git a/handbook/build/img/dotnetchina2.jpg b/handbook/build/img/dotnetchina2.jpg new file mode 100644 index 00000000000..5161deddd8d Binary files /dev/null and b/handbook/build/img/dotnetchina2.jpg differ diff --git a/handbook/build/img/dp1.png b/handbook/build/img/dp1.png new file mode 100644 index 00000000000..9c536419f00 Binary files /dev/null and b/handbook/build/img/dp1.png differ diff --git a/handbook/build/img/dp3.png b/handbook/build/img/dp3.png new file mode 100644 index 00000000000..aa168eb4da1 Binary files /dev/null and b/handbook/build/img/dp3.png differ diff --git a/handbook/build/img/dp4.png b/handbook/build/img/dp4.png new file mode 100644 index 00000000000..bd5721bb4f7 Binary files /dev/null and b/handbook/build/img/dp4.png differ diff --git a/handbook/build/img/ds1.png b/handbook/build/img/ds1.png new file mode 100644 index 00000000000..5f3684b6254 Binary files /dev/null and b/handbook/build/img/ds1.png differ diff --git a/handbook/build/img/ds2.png b/handbook/build/img/ds2.png new file mode 100644 index 00000000000..ade539f7698 Binary files /dev/null and b/handbook/build/img/ds2.png differ diff --git a/handbook/build/img/ds3.png b/handbook/build/img/ds3.png new file mode 100644 index 00000000000..1076c95ed42 Binary files /dev/null and b/handbook/build/img/ds3.png differ diff --git a/handbook/build/img/ds4.png b/handbook/build/img/ds4.png new file mode 100644 index 00000000000..601710306fb Binary files /dev/null and b/handbook/build/img/ds4.png differ diff --git a/handbook/build/img/dy2.png b/handbook/build/img/dy2.png new file mode 100644 index 00000000000..ce418fe7f9c Binary files /dev/null and b/handbook/build/img/dy2.png differ diff --git a/handbook/build/img/dyglz.gif b/handbook/build/img/dyglz.gif new file mode 100644 index 00000000000..93062451684 Binary files /dev/null and b/handbook/build/img/dyglz.gif differ diff --git a/handbook/build/img/dzffbb.png b/handbook/build/img/dzffbb.png new file mode 100644 index 00000000000..ef70ffbd493 Binary files /dev/null and b/handbook/build/img/dzffbb.png differ diff --git a/handbook/build/img/dzffrl.png b/handbook/build/img/dzffrl.png new file mode 100644 index 00000000000..2cc00768ad1 Binary files /dev/null and b/handbook/build/img/dzffrl.png differ diff --git a/handbook/build/img/dzmc.png b/handbook/build/img/dzmc.png new file mode 100644 index 00000000000..77e929903e9 Binary files /dev/null and b/handbook/build/img/dzmc.png differ diff --git a/handbook/build/img/ebs.png b/handbook/build/img/ebs.png new file mode 100644 index 00000000000..273126da92c Binary files /dev/null and b/handbook/build/img/ebs.png differ diff --git a/handbook/build/img/ebus1.png b/handbook/build/img/ebus1.png new file mode 100644 index 00000000000..273126da92c Binary files /dev/null and b/handbook/build/img/ebus1.png differ diff --git a/handbook/build/img/enablepz.png b/handbook/build/img/enablepz.png new file mode 100644 index 00000000000..dff90f987c3 Binary files /dev/null and b/handbook/build/img/enablepz.png differ diff --git a/handbook/build/img/er1.png b/handbook/build/img/er1.png new file mode 100644 index 00000000000..75be6e6e279 Binary files /dev/null and b/handbook/build/img/er1.png differ diff --git a/handbook/build/img/erp.jpg b/handbook/build/img/erp.jpg new file mode 100644 index 00000000000..f2508b359c9 Binary files /dev/null and b/handbook/build/img/erp.jpg differ diff --git a/handbook/build/img/event1.png b/handbook/build/img/event1.png new file mode 100644 index 00000000000..ad192e11400 Binary files /dev/null and b/handbook/build/img/event1.png differ diff --git a/handbook/build/img/event2.png b/handbook/build/img/event2.png new file mode 100644 index 00000000000..d532dba92cc Binary files /dev/null and b/handbook/build/img/event2.png differ diff --git a/handbook/build/img/evs1.png b/handbook/build/img/evs1.png new file mode 100644 index 00000000000..942d48bdc5b Binary files /dev/null and b/handbook/build/img/evs1.png differ diff --git a/handbook/build/img/f1.png b/handbook/build/img/f1.png new file mode 100644 index 00000000000..e50715d29c0 Binary files /dev/null and b/handbook/build/img/f1.png differ diff --git a/handbook/build/img/favicon.ico b/handbook/build/img/favicon.ico new file mode 100644 index 00000000000..407a025af4c Binary files /dev/null and b/handbook/build/img/favicon.ico differ diff --git a/handbook/build/img/fgl.png b/handbook/build/img/fgl.png new file mode 100644 index 00000000000..4c3b6720529 Binary files /dev/null and b/handbook/build/img/fgl.png differ diff --git a/handbook/build/img/fhzlx.png b/handbook/build/img/fhzlx.png new file mode 100644 index 00000000000..ec31a03d914 Binary files /dev/null and b/handbook/build/img/fhzlx.png differ diff --git a/handbook/build/img/firstui.jpeg b/handbook/build/img/firstui.jpeg new file mode 100644 index 00000000000..cfa6db99c0b Binary files /dev/null and b/handbook/build/img/firstui.jpeg differ diff --git a/handbook/build/img/fn1.png b/handbook/build/img/fn1.png new file mode 100644 index 00000000000..e1a3d3ec8e7 Binary files /dev/null and b/handbook/build/img/fn1.png differ diff --git a/handbook/build/img/functions.en.png b/handbook/build/img/functions.en.png new file mode 100644 index 00000000000..a5e27e42196 Binary files /dev/null and b/handbook/build/img/functions.en.png differ diff --git a/handbook/build/img/functions.png b/handbook/build/img/functions.png new file mode 100644 index 00000000000..ec4c38283e8 Binary files /dev/null and b/handbook/build/img/functions.png differ diff --git a/handbook/build/img/furionlogo.png b/handbook/build/img/furionlogo.png new file mode 100644 index 00000000000..166b80180fb Binary files /dev/null and b/handbook/build/img/furionlogo.png differ diff --git a/handbook/build/img/furionlogo_min.png b/handbook/build/img/furionlogo_min.png new file mode 100644 index 00000000000..82da36b64c9 Binary files /dev/null and b/handbook/build/img/furionlogo_min.png differ diff --git a/handbook/build/img/getstart1.png b/handbook/build/img/getstart1.png new file mode 100644 index 00000000000..162a94dcf7f Binary files /dev/null and b/handbook/build/img/getstart1.png differ diff --git a/handbook/build/img/getstart2.gif b/handbook/build/img/getstart2.gif new file mode 100644 index 00000000000..5dc7423899a Binary files /dev/null and b/handbook/build/img/getstart2.gif differ diff --git a/handbook/build/img/getstart3.png b/handbook/build/img/getstart3.png new file mode 100644 index 00000000000..7aa49abe89d Binary files /dev/null and b/handbook/build/img/getstart3.png differ diff --git a/handbook/build/img/getstart4.png b/handbook/build/img/getstart4.png new file mode 100644 index 00000000000..f753b6035b7 Binary files /dev/null and b/handbook/build/img/getstart4.png differ diff --git a/handbook/build/img/getstart5.png b/handbook/build/img/getstart5.png new file mode 100644 index 00000000000..0356d7be39a Binary files /dev/null and b/handbook/build/img/getstart5.png differ diff --git a/handbook/build/img/getstart6.png b/handbook/build/img/getstart6.png new file mode 100644 index 00000000000..cb208395ee6 Binary files /dev/null and b/handbook/build/img/getstart6.png differ diff --git a/handbook/build/img/getstart7.png b/handbook/build/img/getstart7.png new file mode 100644 index 00000000000..a753214b32c Binary files /dev/null and b/handbook/build/img/getstart7.png differ diff --git a/handbook/build/img/getstart8.gif b/handbook/build/img/getstart8.gif new file mode 100644 index 00000000000..70ad52871a4 Binary files /dev/null and b/handbook/build/img/getstart8.gif differ diff --git a/handbook/build/img/getyycs.png b/handbook/build/img/getyycs.png new file mode 100644 index 00000000000..5294dc486db Binary files /dev/null and b/handbook/build/img/getyycs.png differ diff --git a/handbook/build/img/gvp.png b/handbook/build/img/gvp.png new file mode 100644 index 00000000000..4cb25d2f32f Binary files /dev/null and b/handbook/build/img/gvp.png differ diff --git a/handbook/build/img/hl1.png b/handbook/build/img/hl1.png new file mode 100644 index 00000000000..bbfb1f2a8a5 Binary files /dev/null and b/handbook/build/img/hl1.png differ diff --git a/handbook/build/img/icon.png b/handbook/build/img/icon.png new file mode 100644 index 00000000000..166b80180fb Binary files /dev/null and b/handbook/build/img/icon.png differ diff --git a/handbook/build/img/iis2.png b/handbook/build/img/iis2.png new file mode 100644 index 00000000000..a04b025da8b Binary files /dev/null and b/handbook/build/img/iis2.png differ diff --git a/handbook/build/img/iis3.png b/handbook/build/img/iis3.png new file mode 100644 index 00000000000..e4d9d02db5b Binary files /dev/null and b/handbook/build/img/iis3.png differ diff --git a/handbook/build/img/iis4.jpg b/handbook/build/img/iis4.jpg new file mode 100644 index 00000000000..3d87ea94fc2 Binary files /dev/null and b/handbook/build/img/iis4.jpg differ diff --git a/handbook/build/img/iis5.png b/handbook/build/img/iis5.png new file mode 100644 index 00000000000..b0d44d8c8ee Binary files /dev/null and b/handbook/build/img/iis5.png differ diff --git a/handbook/build/img/iis6.png b/handbook/build/img/iis6.png new file mode 100644 index 00000000000..4880e4575d5 Binary files /dev/null and b/handbook/build/img/iis6.png differ diff --git a/handbook/build/img/iis7.png b/handbook/build/img/iis7.png new file mode 100644 index 00000000000..462cd960246 Binary files /dev/null and b/handbook/build/img/iis7.png differ diff --git a/handbook/build/img/iis8.png b/handbook/build/img/iis8.png new file mode 100644 index 00000000000..9e19ea1a60f Binary files /dev/null and b/handbook/build/img/iis8.png differ diff --git a/handbook/build/img/iis9.png b/handbook/build/img/iis9.png new file mode 100644 index 00000000000..7bc9379a582 Binary files /dev/null and b/handbook/build/img/iis9.png differ diff --git a/handbook/build/img/iishuishou.jpg b/handbook/build/img/iishuishou.jpg new file mode 100644 index 00000000000..0887c865d90 Binary files /dev/null and b/handbook/build/img/iishuishou.jpg differ diff --git a/handbook/build/img/jjd.png b/handbook/build/img/jjd.png new file mode 100644 index 00000000000..3af4be91a32 Binary files /dev/null and b/handbook/build/img/jjd.png differ diff --git a/handbook/build/img/jnpfsoft.png b/handbook/build/img/jnpfsoft.png new file mode 100644 index 00000000000..1ab5ef35a7a Binary files /dev/null and b/handbook/build/img/jnpfsoft.png differ diff --git a/handbook/build/img/js1.png b/handbook/build/img/js1.png new file mode 100644 index 00000000000..49cdf5b89d7 Binary files /dev/null and b/handbook/build/img/js1.png differ diff --git a/handbook/build/img/js10.png b/handbook/build/img/js10.png new file mode 100644 index 00000000000..46751b794a2 Binary files /dev/null and b/handbook/build/img/js10.png differ diff --git a/handbook/build/img/js11.png b/handbook/build/img/js11.png new file mode 100644 index 00000000000..47b73cb7593 Binary files /dev/null and b/handbook/build/img/js11.png differ diff --git a/handbook/build/img/js2.png b/handbook/build/img/js2.png new file mode 100644 index 00000000000..15689d1f5a2 Binary files /dev/null and b/handbook/build/img/js2.png differ diff --git a/handbook/build/img/js3.png b/handbook/build/img/js3.png new file mode 100644 index 00000000000..f3ef7ca872b Binary files /dev/null and b/handbook/build/img/js3.png differ diff --git a/handbook/build/img/js4.png b/handbook/build/img/js4.png new file mode 100644 index 00000000000..61762e9e0b0 Binary files /dev/null and b/handbook/build/img/js4.png differ diff --git a/handbook/build/img/js5.png b/handbook/build/img/js5.png new file mode 100644 index 00000000000..d556d42f871 Binary files /dev/null and b/handbook/build/img/js5.png differ diff --git a/handbook/build/img/js6.png b/handbook/build/img/js6.png new file mode 100644 index 00000000000..da55ff51e64 Binary files /dev/null and b/handbook/build/img/js6.png differ diff --git a/handbook/build/img/js7.png b/handbook/build/img/js7.png new file mode 100644 index 00000000000..a72bac34d16 Binary files /dev/null and b/handbook/build/img/js7.png differ diff --git a/handbook/build/img/js8.png b/handbook/build/img/js8.png new file mode 100644 index 00000000000..921a5d9544a Binary files /dev/null and b/handbook/build/img/js8.png differ diff --git a/handbook/build/img/js9.png b/handbook/build/img/js9.png new file mode 100644 index 00000000000..4ffe16e8435 Binary files /dev/null and b/handbook/build/img/js9.png differ diff --git a/handbook/build/img/keepnamepz.png b/handbook/build/img/keepnamepz.png new file mode 100644 index 00000000000..17afcd3696b Binary files /dev/null and b/handbook/build/img/keepnamepz.png differ diff --git a/handbook/build/img/keepverbpz.png b/handbook/build/img/keepverbpz.png new file mode 100644 index 00000000000..9da97b4a4cf Binary files /dev/null and b/handbook/build/img/keepverbpz.png differ diff --git a/handbook/build/img/kni.jpg b/handbook/build/img/kni.jpg new file mode 100644 index 00000000000..eee62d89af8 Binary files /dev/null and b/handbook/build/img/kni.jpg differ diff --git a/handbook/build/img/ksh.png b/handbook/build/img/ksh.png new file mode 100644 index 00000000000..619f27ec760 Binary files /dev/null and b/handbook/build/img/ksh.png differ diff --git a/handbook/build/img/kzq.png b/handbook/build/img/kzq.png new file mode 100644 index 00000000000..72597dfb135 Binary files /dev/null and b/handbook/build/img/kzq.png differ diff --git a/handbook/build/img/kzqbb.png b/handbook/build/img/kzqbb.png new file mode 100644 index 00000000000..3a5d52dddf4 Binary files /dev/null and b/handbook/build/img/kzqbb.png differ diff --git a/handbook/build/img/kzqrl.png b/handbook/build/img/kzqrl.png new file mode 100644 index 00000000000..d4ff155d443 Binary files /dev/null and b/handbook/build/img/kzqrl.png differ diff --git a/handbook/build/img/lang1.png b/handbook/build/img/lang1.png new file mode 100644 index 00000000000..f3e12d1a5c7 Binary files /dev/null and b/handbook/build/img/lang1.png differ diff --git a/handbook/build/img/lang2.png b/handbook/build/img/lang2.png new file mode 100644 index 00000000000..87eb3cfaee0 Binary files /dev/null and b/handbook/build/img/lang2.png differ diff --git a/handbook/build/img/lang3.png b/handbook/build/img/lang3.png new file mode 100644 index 00000000000..617c3f6021c Binary files /dev/null and b/handbook/build/img/lang3.png differ diff --git a/handbook/build/img/lang4.gif b/handbook/build/img/lang4.gif new file mode 100644 index 00000000000..2151042d9d7 Binary files /dev/null and b/handbook/build/img/lang4.gif differ diff --git a/handbook/build/img/lang5.gif b/handbook/build/img/lang5.gif new file mode 100644 index 00000000000..34ee9e4bf64 Binary files /dev/null and b/handbook/build/img/lang5.gif differ diff --git a/handbook/build/img/lang6.png b/handbook/build/img/lang6.png new file mode 100644 index 00000000000..96eaf3eba1b Binary files /dev/null and b/handbook/build/img/lang6.png differ diff --git a/handbook/build/img/layui.png b/handbook/build/img/layui.png new file mode 100644 index 00000000000..16b9e713f41 Binary files /dev/null and b/handbook/build/img/layui.png differ diff --git a/handbook/build/img/lognone.png b/handbook/build/img/lognone.png new file mode 100644 index 00000000000..eb2ad565aa7 Binary files /dev/null and b/handbook/build/img/lognone.png differ diff --git a/handbook/build/img/logo.png b/handbook/build/img/logo.png new file mode 100644 index 00000000000..166b80180fb Binary files /dev/null and b/handbook/build/img/logo.png differ diff --git a/handbook/build/img/mdx.png b/handbook/build/img/mdx.png new file mode 100644 index 00000000000..ab1f1bb72f9 Binary files /dev/null and b/handbook/build/img/mdx.png differ diff --git a/handbook/build/img/mdx2.png b/handbook/build/img/mdx2.png new file mode 100644 index 00000000000..26793ecf5de Binary files /dev/null and b/handbook/build/img/mdx2.png differ diff --git a/handbook/build/img/mip.png b/handbook/build/img/mip.png new file mode 100644 index 00000000000..a4cd1eab17d Binary files /dev/null and b/handbook/build/img/mip.png differ diff --git a/handbook/build/img/mipr.png b/handbook/build/img/mipr.png new file mode 100644 index 00000000000..93dda72d04a Binary files /dev/null and b/handbook/build/img/mipr.png differ diff --git a/handbook/build/img/modeltoquery.png b/handbook/build/img/modeltoquery.png new file mode 100644 index 00000000000..358a435e52d Binary files /dev/null and b/handbook/build/img/modeltoquery.png differ diff --git a/handbook/build/img/modulepz.png b/handbook/build/img/modulepz.png new file mode 100644 index 00000000000..d2724ea9642 Binary files /dev/null and b/handbook/build/img/modulepz.png differ diff --git a/handbook/build/img/monksoul.jpg b/handbook/build/img/monksoul.jpg new file mode 100644 index 00000000000..e6c65fc8fb8 Binary files /dev/null and b/handbook/build/img/monksoul.jpg differ diff --git a/handbook/build/img/mulan.png b/handbook/build/img/mulan.png new file mode 100644 index 00000000000..79d55c2eb6b Binary files /dev/null and b/handbook/build/img/mulan.png differ diff --git a/handbook/build/img/namepz.png b/handbook/build/img/namepz.png new file mode 100644 index 00000000000..a26156b8c75 Binary files /dev/null and b/handbook/build/img/namepz.png differ diff --git a/handbook/build/img/net71.png b/handbook/build/img/net71.png new file mode 100644 index 00000000000..c1ebd9d2e03 Binary files /dev/null and b/handbook/build/img/net71.png differ diff --git a/handbook/build/img/net72.png b/handbook/build/img/net72.png new file mode 100644 index 00000000000..d6db76e3002 Binary files /dev/null and b/handbook/build/img/net72.png differ diff --git a/handbook/build/img/net73.png b/handbook/build/img/net73.png new file mode 100644 index 00000000000..fbdcb7beba1 Binary files /dev/null and b/handbook/build/img/net73.png differ diff --git a/handbook/build/img/net74.png b/handbook/build/img/net74.png new file mode 100644 index 00000000000..5d7e904c6aa Binary files /dev/null and b/handbook/build/img/net74.png differ diff --git a/handbook/build/img/net75.png b/handbook/build/img/net75.png new file mode 100644 index 00000000000..f2bdc6420ba Binary files /dev/null and b/handbook/build/img/net75.png differ diff --git a/handbook/build/img/ng1.png b/handbook/build/img/ng1.png new file mode 100644 index 00000000000..53a31ec4a2c Binary files /dev/null and b/handbook/build/img/ng1.png differ diff --git a/handbook/build/img/ng2.png b/handbook/build/img/ng2.png new file mode 100644 index 00000000000..58c9219f34d Binary files /dev/null and b/handbook/build/img/ng2.png differ diff --git a/handbook/build/img/ng3.png b/handbook/build/img/ng3.png new file mode 100644 index 00000000000..286754ddb86 Binary files /dev/null and b/handbook/build/img/ng3.png differ diff --git a/handbook/build/img/ng4.png b/handbook/build/img/ng4.png new file mode 100644 index 00000000000..fa5c366c6ac Binary files /dev/null and b/handbook/build/img/ng4.png differ diff --git a/handbook/build/img/ng5.png b/handbook/build/img/ng5.png new file mode 100644 index 00000000000..4d98dd6db62 Binary files /dev/null and b/handbook/build/img/ng5.png differ diff --git a/handbook/build/img/ng6.png b/handbook/build/img/ng6.png new file mode 100644 index 00000000000..cedacfb7d24 Binary files /dev/null and b/handbook/build/img/ng6.png differ diff --git a/handbook/build/img/ng7.png b/handbook/build/img/ng7.png new file mode 100644 index 00000000000..2dd78588154 Binary files /dev/null and b/handbook/build/img/ng7.png differ diff --git a/handbook/build/img/ng8.png b/handbook/build/img/ng8.png new file mode 100644 index 00000000000..d468c599e33 Binary files /dev/null and b/handbook/build/img/ng8.png differ diff --git a/handbook/build/img/nrs.png b/handbook/build/img/nrs.png new file mode 100644 index 00000000000..d7b6f75c969 Binary files /dev/null and b/handbook/build/img/nrs.png differ diff --git a/handbook/build/img/pm2err.png b/handbook/build/img/pm2err.png new file mode 100644 index 00000000000..30fd3da1d7d Binary files /dev/null and b/handbook/build/img/pm2err.png differ diff --git a/handbook/build/img/processon1.png b/handbook/build/img/processon1.png new file mode 100644 index 00000000000..488102ff7ec Binary files /dev/null and b/handbook/build/img/processon1.png differ diff --git a/handbook/build/img/processon2.png b/handbook/build/img/processon2.png new file mode 100644 index 00000000000..cf851043bbf Binary files /dev/null and b/handbook/build/img/processon2.png differ diff --git a/handbook/build/img/readwrite.png b/handbook/build/img/readwrite.png new file mode 100644 index 00000000000..84e5d64901e Binary files /dev/null and b/handbook/build/img/readwrite.png differ diff --git a/handbook/build/img/readwrite1.png b/handbook/build/img/readwrite1.png new file mode 100644 index 00000000000..045f7bc0160 Binary files /dev/null and b/handbook/build/img/readwrite1.png differ diff --git a/handbook/build/img/readwrite2.png b/handbook/build/img/readwrite2.png new file mode 100644 index 00000000000..bf15bd12f84 Binary files /dev/null and b/handbook/build/img/readwrite2.png differ diff --git a/handbook/build/img/rjs.jpg b/handbook/build/img/rjs.jpg new file mode 100644 index 00000000000..9fa649d35cb Binary files /dev/null and b/handbook/build/img/rjs.jpg differ diff --git a/handbook/build/img/rm1.png b/handbook/build/img/rm1.png new file mode 100644 index 00000000000..33011d5aeb7 Binary files /dev/null and b/handbook/build/img/rm1.png differ diff --git a/handbook/build/img/rm2.png b/handbook/build/img/rm2.png new file mode 100644 index 00000000000..267dfc48c69 Binary files /dev/null and b/handbook/build/img/rm2.png differ diff --git a/handbook/build/img/rm3.png b/handbook/build/img/rm3.png new file mode 100644 index 00000000000..0a9c4da3600 Binary files /dev/null and b/handbook/build/img/rm3.png differ diff --git a/handbook/build/img/rm4.png b/handbook/build/img/rm4.png new file mode 100644 index 00000000000..3b5f98ef015 Binary files /dev/null and b/handbook/build/img/rm4.png differ diff --git a/handbook/build/img/rm5.png b/handbook/build/img/rm5.png new file mode 100644 index 00000000000..ad866292c22 Binary files /dev/null and b/handbook/build/img/rm5.png differ diff --git a/handbook/build/img/rm6.png b/handbook/build/img/rm6.png new file mode 100644 index 00000000000..206f3b0d273 Binary files /dev/null and b/handbook/build/img/rm6.png differ diff --git a/handbook/build/img/rmn1.png b/handbook/build/img/rmn1.png new file mode 100644 index 00000000000..99b136c2f88 Binary files /dev/null and b/handbook/build/img/rmn1.png differ diff --git a/handbook/build/img/rmn2.png b/handbook/build/img/rmn2.png new file mode 100644 index 00000000000..6805b510208 Binary files /dev/null and b/handbook/build/img/rmn2.png differ diff --git a/handbook/build/img/rmn3.png b/handbook/build/img/rmn3.png new file mode 100644 index 00000000000..8d32cc9d0ed Binary files /dev/null and b/handbook/build/img/rmn3.png differ diff --git a/handbook/build/img/rmn4.png b/handbook/build/img/rmn4.png new file mode 100644 index 00000000000..f07d5e68b28 Binary files /dev/null and b/handbook/build/img/rmn4.png differ diff --git a/handbook/build/img/rmn5.png b/handbook/build/img/rmn5.png new file mode 100644 index 00000000000..70da7d47137 Binary files /dev/null and b/handbook/build/img/rmn5.png differ diff --git a/handbook/build/img/rmn6.png b/handbook/build/img/rmn6.png new file mode 100644 index 00000000000..818e5d0ec00 Binary files /dev/null and b/handbook/build/img/rmn6.png differ diff --git a/handbook/build/img/rust.png b/handbook/build/img/rust.png new file mode 100644 index 00000000000..bf2fdc4bfd7 Binary files /dev/null and b/handbook/build/img/rust.png differ diff --git a/handbook/build/img/saas1.png b/handbook/build/img/saas1.png new file mode 100644 index 00000000000..bdbebeb872f Binary files /dev/null and b/handbook/build/img/saas1.png differ diff --git a/handbook/build/img/saas2.png b/handbook/build/img/saas2.png new file mode 100644 index 00000000000..8e33117db12 Binary files /dev/null and b/handbook/build/img/saas2.png differ diff --git a/handbook/build/img/scdr.png b/handbook/build/img/scdr.png new file mode 100644 index 00000000000..75f90f90185 Binary files /dev/null and b/handbook/build/img/scdr.png differ diff --git a/handbook/build/img/sd20.png b/handbook/build/img/sd20.png new file mode 100644 index 00000000000..f7a373bb688 Binary files /dev/null and b/handbook/build/img/sd20.png differ diff --git a/handbook/build/img/sf1.png b/handbook/build/img/sf1.png new file mode 100644 index 00000000000..4f2cebe58c2 Binary files /dev/null and b/handbook/build/img/sf1.png differ diff --git a/handbook/build/img/sf2.png b/handbook/build/img/sf2.png new file mode 100644 index 00000000000..6b6db1be07b Binary files /dev/null and b/handbook/build/img/sf2.png differ diff --git a/handbook/build/img/sf3.png b/handbook/build/img/sf3.png new file mode 100644 index 00000000000..cca0c88c628 Binary files /dev/null and b/handbook/build/img/sf3.png differ diff --git a/handbook/build/img/sf30.png b/handbook/build/img/sf30.png new file mode 100644 index 00000000000..cd8180a4632 Binary files /dev/null and b/handbook/build/img/sf30.png differ diff --git a/handbook/build/img/sf4.png b/handbook/build/img/sf4.png new file mode 100644 index 00000000000..e8d05ebba09 Binary files /dev/null and b/handbook/build/img/sf4.png differ diff --git a/handbook/build/img/sf5.png b/handbook/build/img/sf5.png new file mode 100644 index 00000000000..5e1c30ec026 Binary files /dev/null and b/handbook/build/img/sf5.png differ diff --git a/handbook/build/img/sf6.png b/handbook/build/img/sf6.png new file mode 100644 index 00000000000..a84a7471901 Binary files /dev/null and b/handbook/build/img/sf6.png differ diff --git a/handbook/build/img/sg1.png b/handbook/build/img/sg1.png new file mode 100644 index 00000000000..e50214158eb Binary files /dev/null and b/handbook/build/img/sg1.png differ diff --git a/handbook/build/img/sg10.png b/handbook/build/img/sg10.png new file mode 100644 index 00000000000..b95b1721261 Binary files /dev/null and b/handbook/build/img/sg10.png differ diff --git a/handbook/build/img/sg11.png b/handbook/build/img/sg11.png new file mode 100644 index 00000000000..05e47a7a40d Binary files /dev/null and b/handbook/build/img/sg11.png differ diff --git a/handbook/build/img/sg12.png b/handbook/build/img/sg12.png new file mode 100644 index 00000000000..1891d03d1a9 Binary files /dev/null and b/handbook/build/img/sg12.png differ diff --git a/handbook/build/img/sg13.png b/handbook/build/img/sg13.png new file mode 100644 index 00000000000..071a2486ee8 Binary files /dev/null and b/handbook/build/img/sg13.png differ diff --git a/handbook/build/img/sg14.png b/handbook/build/img/sg14.png new file mode 100644 index 00000000000..4603679030f Binary files /dev/null and b/handbook/build/img/sg14.png differ diff --git a/handbook/build/img/sg15.png b/handbook/build/img/sg15.png new file mode 100644 index 00000000000..8d18c2218b7 Binary files /dev/null and b/handbook/build/img/sg15.png differ diff --git a/handbook/build/img/sg16.png b/handbook/build/img/sg16.png new file mode 100644 index 00000000000..e3c04b29bb2 Binary files /dev/null and b/handbook/build/img/sg16.png differ diff --git a/handbook/build/img/sg17.png b/handbook/build/img/sg17.png new file mode 100644 index 00000000000..6a9b4e370fb Binary files /dev/null and b/handbook/build/img/sg17.png differ diff --git a/handbook/build/img/sg2.png b/handbook/build/img/sg2.png new file mode 100644 index 00000000000..28a3124da7a Binary files /dev/null and b/handbook/build/img/sg2.png differ diff --git a/handbook/build/img/sg20.png b/handbook/build/img/sg20.png new file mode 100644 index 00000000000..30d5a590735 Binary files /dev/null and b/handbook/build/img/sg20.png differ diff --git a/handbook/build/img/sg3.png b/handbook/build/img/sg3.png new file mode 100644 index 00000000000..39f9c486bda Binary files /dev/null and b/handbook/build/img/sg3.png differ diff --git a/handbook/build/img/sg4.png b/handbook/build/img/sg4.png new file mode 100644 index 00000000000..08cf26253ca Binary files /dev/null and b/handbook/build/img/sg4.png differ diff --git a/handbook/build/img/sg5.png b/handbook/build/img/sg5.png new file mode 100644 index 00000000000..4242e970531 Binary files /dev/null and b/handbook/build/img/sg5.png differ diff --git a/handbook/build/img/sg6.png b/handbook/build/img/sg6.png new file mode 100644 index 00000000000..44f74d3483d Binary files /dev/null and b/handbook/build/img/sg6.png differ diff --git a/handbook/build/img/sg7.png b/handbook/build/img/sg7.png new file mode 100644 index 00000000000..97f100123ce Binary files /dev/null and b/handbook/build/img/sg7.png differ diff --git a/handbook/build/img/sg8.png b/handbook/build/img/sg8.png new file mode 100644 index 00000000000..7079968d396 Binary files /dev/null and b/handbook/build/img/sg8.png differ diff --git a/handbook/build/img/sg9.png b/handbook/build/img/sg9.png new file mode 100644 index 00000000000..c38588ad8cd Binary files /dev/null and b/handbook/build/img/sg9.png differ diff --git a/handbook/build/img/sjl1.png b/handbook/build/img/sjl1.png new file mode 100644 index 00000000000..daf68e0aeb9 Binary files /dev/null and b/handbook/build/img/sjl1.png differ diff --git a/handbook/build/img/sjl2.png b/handbook/build/img/sjl2.png new file mode 100644 index 00000000000..1aafa8e0929 Binary files /dev/null and b/handbook/build/img/sjl2.png differ diff --git a/handbook/build/img/sjl3.png b/handbook/build/img/sjl3.png new file mode 100644 index 00000000000..89eab0e2216 Binary files /dev/null and b/handbook/build/img/sjl3.png differ diff --git a/handbook/build/img/sjl4.png b/handbook/build/img/sjl4.png new file mode 100644 index 00000000000..5c850bd7442 Binary files /dev/null and b/handbook/build/img/sjl4.png differ diff --git a/handbook/build/img/sjl5.png b/handbook/build/img/sjl5.png new file mode 100644 index 00000000000..2789c2a3440 Binary files /dev/null and b/handbook/build/img/sjl5.png differ diff --git a/handbook/build/img/sjl6.png b/handbook/build/img/sjl6.png new file mode 100644 index 00000000000..78383b10842 Binary files /dev/null and b/handbook/build/img/sjl6.png differ diff --git a/handbook/build/img/sjyz1.gif b/handbook/build/img/sjyz1.gif new file mode 100644 index 00000000000..dc53cfd151a Binary files /dev/null and b/handbook/build/img/sjyz1.gif differ diff --git a/handbook/build/img/sjyz2.gif b/handbook/build/img/sjyz2.gif new file mode 100644 index 00000000000..5b4df54c3d3 Binary files /dev/null and b/handbook/build/img/sjyz2.gif differ diff --git a/handbook/build/img/sjyz3.gif b/handbook/build/img/sjyz3.gif new file mode 100644 index 00000000000..ced5559c481 Binary files /dev/null and b/handbook/build/img/sjyz3.gif differ diff --git a/handbook/build/img/sjyz4.png b/handbook/build/img/sjyz4.png new file mode 100644 index 00000000000..be638a6da70 Binary files /dev/null and b/handbook/build/img/sjyz4.png differ diff --git a/handbook/build/img/sjyz5.png b/handbook/build/img/sjyz5.png new file mode 100644 index 00000000000..35ff9c16e31 Binary files /dev/null and b/handbook/build/img/sjyz5.png differ diff --git a/handbook/build/img/sperr.png b/handbook/build/img/sperr.png new file mode 100644 index 00000000000..8107ee17aa7 Binary files /dev/null and b/handbook/build/img/sperr.png differ diff --git a/handbook/build/img/sperr2.png b/handbook/build/img/sperr2.png new file mode 100644 index 00000000000..7fdac9e82bd Binary files /dev/null and b/handbook/build/img/sperr2.png differ diff --git a/handbook/build/img/splitnamepz.png b/handbook/build/img/splitnamepz.png new file mode 100644 index 00000000000..a5f65e77224 Binary files /dev/null and b/handbook/build/img/splitnamepz.png differ diff --git a/handbook/build/img/support.png b/handbook/build/img/support.png new file mode 100644 index 00000000000..d93997a9855 Binary files /dev/null and b/handbook/build/img/support.png differ diff --git a/handbook/build/img/sw22.png b/handbook/build/img/sw22.png new file mode 100644 index 00000000000..3945eb15360 Binary files /dev/null and b/handbook/build/img/sw22.png differ diff --git a/handbook/build/img/sw23.png b/handbook/build/img/sw23.png new file mode 100644 index 00000000000..58e45d70117 Binary files /dev/null and b/handbook/build/img/sw23.png differ diff --git a/handbook/build/img/swagger1.png b/handbook/build/img/swagger1.png new file mode 100644 index 00000000000..89eada63f4d Binary files /dev/null and b/handbook/build/img/swagger1.png differ diff --git a/handbook/build/img/swagger2.png b/handbook/build/img/swagger2.png new file mode 100644 index 00000000000..5cba3dcfbf8 Binary files /dev/null and b/handbook/build/img/swagger2.png differ diff --git a/handbook/build/img/swagger3.gif b/handbook/build/img/swagger3.gif new file mode 100644 index 00000000000..ee0c1ab2086 Binary files /dev/null and b/handbook/build/img/swagger3.gif differ diff --git a/handbook/build/img/swagger4.png b/handbook/build/img/swagger4.png new file mode 100644 index 00000000000..2c225eb64e7 Binary files /dev/null and b/handbook/build/img/swagger4.png differ diff --git a/handbook/build/img/swagger5.png b/handbook/build/img/swagger5.png new file mode 100644 index 00000000000..2119bb7856e Binary files /dev/null and b/handbook/build/img/swagger5.png differ diff --git a/handbook/build/img/swagger6.gif b/handbook/build/img/swagger6.gif new file mode 100644 index 00000000000..3222d9dc56e Binary files /dev/null and b/handbook/build/img/swagger6.gif differ diff --git a/handbook/build/img/swagger7.png b/handbook/build/img/swagger7.png new file mode 100644 index 00000000000..19783331377 Binary files /dev/null and b/handbook/build/img/swagger7.png differ diff --git a/handbook/build/img/swagger8.gif b/handbook/build/img/swagger8.gif new file mode 100644 index 00000000000..e6ed6e5da2f Binary files /dev/null and b/handbook/build/img/swagger8.gif differ diff --git a/handbook/build/img/swerror.png b/handbook/build/img/swerror.png new file mode 100644 index 00000000000..bd1ba094d70 Binary files /dev/null and b/handbook/build/img/swerror.png differ diff --git a/handbook/build/img/swg1.png b/handbook/build/img/swg1.png new file mode 100644 index 00000000000..79204a50232 Binary files /dev/null and b/handbook/build/img/swg1.png differ diff --git a/handbook/build/img/swg2.png b/handbook/build/img/swg2.png new file mode 100644 index 00000000000..2af82a30088 Binary files /dev/null and b/handbook/build/img/swg2.png differ diff --git a/handbook/build/img/swgdl.png b/handbook/build/img/swgdl.png new file mode 100644 index 00000000000..2512fd9de4e Binary files /dev/null and b/handbook/build/img/swgdl.png differ diff --git a/handbook/build/img/tag1.png b/handbook/build/img/tag1.png new file mode 100644 index 00000000000..963ffde16e2 Binary files /dev/null and b/handbook/build/img/tag1.png differ diff --git a/handbook/build/img/tag2.png b/handbook/build/img/tag2.png new file mode 100644 index 00000000000..e89511797f3 Binary files /dev/null and b/handbook/build/img/tag2.png differ diff --git a/handbook/build/img/tm.png b/handbook/build/img/tm.png new file mode 100644 index 00000000000..54a8286e259 Binary files /dev/null and b/handbook/build/img/tm.png differ diff --git a/handbook/build/img/ts1.png b/handbook/build/img/ts1.png new file mode 100644 index 00000000000..88519a65d36 Binary files /dev/null and b/handbook/build/img/ts1.png differ diff --git a/handbook/build/img/ts10.png b/handbook/build/img/ts10.png new file mode 100644 index 00000000000..f652096c52b Binary files /dev/null and b/handbook/build/img/ts10.png differ diff --git a/handbook/build/img/ts11.png b/handbook/build/img/ts11.png new file mode 100644 index 00000000000..6ba87979d8a Binary files /dev/null and b/handbook/build/img/ts11.png differ diff --git a/handbook/build/img/ts12.png b/handbook/build/img/ts12.png new file mode 100644 index 00000000000..7b55dd191d7 Binary files /dev/null and b/handbook/build/img/ts12.png differ diff --git a/handbook/build/img/ts13.png b/handbook/build/img/ts13.png new file mode 100644 index 00000000000..67e94176476 Binary files /dev/null and b/handbook/build/img/ts13.png differ diff --git a/handbook/build/img/ts14.png b/handbook/build/img/ts14.png new file mode 100644 index 00000000000..4b16c1accee Binary files /dev/null and b/handbook/build/img/ts14.png differ diff --git a/handbook/build/img/ts2.png b/handbook/build/img/ts2.png new file mode 100644 index 00000000000..1694c547840 Binary files /dev/null and b/handbook/build/img/ts2.png differ diff --git a/handbook/build/img/ts3.png b/handbook/build/img/ts3.png new file mode 100644 index 00000000000..23418c11aee Binary files /dev/null and b/handbook/build/img/ts3.png differ diff --git a/handbook/build/img/ts4.png b/handbook/build/img/ts4.png new file mode 100644 index 00000000000..5469ff71d59 Binary files /dev/null and b/handbook/build/img/ts4.png differ diff --git a/handbook/build/img/ts5.png b/handbook/build/img/ts5.png new file mode 100644 index 00000000000..6e9c04730fd Binary files /dev/null and b/handbook/build/img/ts5.png differ diff --git a/handbook/build/img/ts6.png b/handbook/build/img/ts6.png new file mode 100644 index 00000000000..efa4533592d Binary files /dev/null and b/handbook/build/img/ts6.png differ diff --git a/handbook/build/img/ts7.png b/handbook/build/img/ts7.png new file mode 100644 index 00000000000..767e7cc863d Binary files /dev/null and b/handbook/build/img/ts7.png differ diff --git a/handbook/build/img/ts8.png b/handbook/build/img/ts8.png new file mode 100644 index 00000000000..6a207b297d4 Binary files /dev/null and b/handbook/build/img/ts8.png differ diff --git a/handbook/build/img/ts9.png b/handbook/build/img/ts9.png new file mode 100644 index 00000000000..3e84879584f Binary files /dev/null and b/handbook/build/img/ts9.png differ diff --git a/handbook/build/img/un1.png b/handbook/build/img/un1.png new file mode 100644 index 00000000000..2e43e2fa76c Binary files /dev/null and b/handbook/build/img/un1.png differ diff --git a/handbook/build/img/un3.png b/handbook/build/img/un3.png new file mode 100644 index 00000000000..8a7f3bafdfc Binary files /dev/null and b/handbook/build/img/un3.png differ diff --git a/handbook/build/img/undraw_docusaurus_mountain.svg b/handbook/build/img/undraw_docusaurus_mountain.svg new file mode 100644 index 00000000000..431cef2f7fe --- /dev/null +++ b/handbook/build/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/handbook/build/img/undraw_docusaurus_react.svg b/handbook/build/img/undraw_docusaurus_react.svg new file mode 100644 index 00000000000..e4170504333 --- /dev/null +++ b/handbook/build/img/undraw_docusaurus_react.svg @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/handbook/build/img/undraw_docusaurus_tree.svg b/handbook/build/img/undraw_docusaurus_tree.svg new file mode 100644 index 00000000000..a05cc03dda9 --- /dev/null +++ b/handbook/build/img/undraw_docusaurus_tree.svg @@ -0,0 +1 @@ +docu_tree \ No newline at end of file diff --git a/handbook/build/img/ut1.png b/handbook/build/img/ut1.png new file mode 100644 index 00000000000..6aa3ec3e968 Binary files /dev/null and b/handbook/build/img/ut1.png differ diff --git a/handbook/build/img/ut10.png b/handbook/build/img/ut10.png new file mode 100644 index 00000000000..0780a541cb7 Binary files /dev/null and b/handbook/build/img/ut10.png differ diff --git a/handbook/build/img/ut11.png b/handbook/build/img/ut11.png new file mode 100644 index 00000000000..8e0437692c5 Binary files /dev/null and b/handbook/build/img/ut11.png differ diff --git a/handbook/build/img/ut12.png b/handbook/build/img/ut12.png new file mode 100644 index 00000000000..fd6f39e29f1 Binary files /dev/null and b/handbook/build/img/ut12.png differ diff --git a/handbook/build/img/ut13.png b/handbook/build/img/ut13.png new file mode 100644 index 00000000000..93edbed2244 Binary files /dev/null and b/handbook/build/img/ut13.png differ diff --git a/handbook/build/img/ut14.png b/handbook/build/img/ut14.png new file mode 100644 index 00000000000..85812a3718c Binary files /dev/null and b/handbook/build/img/ut14.png differ diff --git a/handbook/build/img/ut15.png b/handbook/build/img/ut15.png new file mode 100644 index 00000000000..978efdf4b96 Binary files /dev/null and b/handbook/build/img/ut15.png differ diff --git a/handbook/build/img/ut16.png b/handbook/build/img/ut16.png new file mode 100644 index 00000000000..c2e8d00d36e Binary files /dev/null and b/handbook/build/img/ut16.png differ diff --git a/handbook/build/img/ut2.png b/handbook/build/img/ut2.png new file mode 100644 index 00000000000..95960522837 Binary files /dev/null and b/handbook/build/img/ut2.png differ diff --git a/handbook/build/img/ut3.png b/handbook/build/img/ut3.png new file mode 100644 index 00000000000..fdd6b49c1c0 Binary files /dev/null and b/handbook/build/img/ut3.png differ diff --git a/handbook/build/img/ut4.png b/handbook/build/img/ut4.png new file mode 100644 index 00000000000..78a343c0b9b Binary files /dev/null and b/handbook/build/img/ut4.png differ diff --git a/handbook/build/img/ut5.png b/handbook/build/img/ut5.png new file mode 100644 index 00000000000..ece7282cea3 Binary files /dev/null and b/handbook/build/img/ut5.png differ diff --git a/handbook/build/img/ut6.png b/handbook/build/img/ut6.png new file mode 100644 index 00000000000..441d37ceeec Binary files /dev/null and b/handbook/build/img/ut6.png differ diff --git a/handbook/build/img/ut7.png b/handbook/build/img/ut7.png new file mode 100644 index 00000000000..59272a901ea Binary files /dev/null and b/handbook/build/img/ut7.png differ diff --git a/handbook/build/img/ut8.png b/handbook/build/img/ut8.png new file mode 100644 index 00000000000..a3b3e483376 Binary files /dev/null and b/handbook/build/img/ut8.png differ diff --git a/handbook/build/img/ut9.png b/handbook/build/img/ut9.png new file mode 100644 index 00000000000..f198535b644 Binary files /dev/null and b/handbook/build/img/ut9.png differ diff --git a/handbook/build/img/versionpz.png b/handbook/build/img/versionpz.png new file mode 100644 index 00000000000..ce4eb3fd791 Binary files /dev/null and b/handbook/build/img/versionpz.png differ diff --git a/handbook/build/img/vr1.png b/handbook/build/img/vr1.png new file mode 100644 index 00000000000..b16cd9ef721 Binary files /dev/null and b/handbook/build/img/vr1.png differ diff --git a/handbook/build/img/vr2.png b/handbook/build/img/vr2.png new file mode 100644 index 00000000000..9ee87889dbb Binary files /dev/null and b/handbook/build/img/vr2.png differ diff --git a/handbook/build/img/vr3.png b/handbook/build/img/vr3.png new file mode 100644 index 00000000000..ca93ef13add Binary files /dev/null and b/handbook/build/img/vr3.png differ diff --git a/handbook/build/img/vr4.png b/handbook/build/img/vr4.png new file mode 100644 index 00000000000..dca318c63b8 Binary files /dev/null and b/handbook/build/img/vr4.png differ diff --git a/handbook/build/img/vs1.png b/handbook/build/img/vs1.png new file mode 100644 index 00000000000..b2afd2931d9 Binary files /dev/null and b/handbook/build/img/vs1.png differ diff --git a/handbook/build/img/vs10.png b/handbook/build/img/vs10.png new file mode 100644 index 00000000000..3aed57a4cc5 Binary files /dev/null and b/handbook/build/img/vs10.png differ diff --git a/handbook/build/img/vs2.png b/handbook/build/img/vs2.png new file mode 100644 index 00000000000..6db85240993 Binary files /dev/null and b/handbook/build/img/vs2.png differ diff --git a/handbook/build/img/vs3.png b/handbook/build/img/vs3.png new file mode 100644 index 00000000000..ab08a8e2745 Binary files /dev/null and b/handbook/build/img/vs3.png differ diff --git a/handbook/build/img/vs4.png b/handbook/build/img/vs4.png new file mode 100644 index 00000000000..b9503acbda7 Binary files /dev/null and b/handbook/build/img/vs4.png differ diff --git a/handbook/build/img/vs5.png b/handbook/build/img/vs5.png new file mode 100644 index 00000000000..67d25f8d73b Binary files /dev/null and b/handbook/build/img/vs5.png differ diff --git a/handbook/build/img/vs6.png b/handbook/build/img/vs6.png new file mode 100644 index 00000000000..59b10493103 Binary files /dev/null and b/handbook/build/img/vs6.png differ diff --git a/handbook/build/img/vs7.png b/handbook/build/img/vs7.png new file mode 100644 index 00000000000..6697063d648 Binary files /dev/null and b/handbook/build/img/vs7.png differ diff --git a/handbook/build/img/vs8.png b/handbook/build/img/vs8.png new file mode 100644 index 00000000000..9dce61f117b Binary files /dev/null and b/handbook/build/img/vs8.png differ diff --git a/handbook/build/img/vs9.png b/handbook/build/img/vs9.png new file mode 100644 index 00000000000..c0046eb1d19 Binary files /dev/null and b/handbook/build/img/vs9.png differ diff --git a/handbook/build/img/wcrl.png b/handbook/build/img/wcrl.png new file mode 100644 index 00000000000..12c4dff8ba6 Binary files /dev/null and b/handbook/build/img/wcrl.png differ diff --git a/handbook/build/img/wk.png b/handbook/build/img/wk.png new file mode 100644 index 00000000000..fc2b16c8543 Binary files /dev/null and b/handbook/build/img/wk.png differ diff --git a/handbook/build/img/xncs.png b/handbook/build/img/xncs.png new file mode 100644 index 00000000000..cc4ffad2456 Binary files /dev/null and b/handbook/build/img/xncs.png differ diff --git a/handbook/build/img/yhyc1.gif b/handbook/build/img/yhyc1.gif new file mode 100644 index 00000000000..7e2ce122ea5 Binary files /dev/null and b/handbook/build/img/yhyc1.gif differ diff --git a/handbook/build/img/yhyc2.png b/handbook/build/img/yhyc2.png new file mode 100644 index 00000000000..b27b5f8784f Binary files /dev/null and b/handbook/build/img/yhyc2.png differ diff --git a/handbook/build/img/yhyc3.gif b/handbook/build/img/yhyc3.gif new file mode 100644 index 00000000000..e7d63933493 Binary files /dev/null and b/handbook/build/img/yhyc3.gif differ diff --git a/handbook/build/img/yhyc4.png b/handbook/build/img/yhyc4.png new file mode 100644 index 00000000000..c9d115da462 Binary files /dev/null and b/handbook/build/img/yhyc4.png differ diff --git a/handbook/build/img/yhyc5.png b/handbook/build/img/yhyc5.png new file mode 100644 index 00000000000..9bc44a53cc5 Binary files /dev/null and b/handbook/build/img/yhyc5.png differ diff --git a/handbook/build/img/zdywc.png b/handbook/build/img/zdywc.png new file mode 100644 index 00000000000..7e25c521b94 Binary files /dev/null and b/handbook/build/img/zdywc.png differ diff --git a/handbook/build/img/zjj1.png b/handbook/build/img/zjj1.png new file mode 100644 index 00000000000..2ab6ecb2036 Binary files /dev/null and b/handbook/build/img/zjj1.png differ diff --git a/handbook/build/index.html b/handbook/build/index.html new file mode 100644 index 00000000000..140846e50d1 --- /dev/null +++ b/handbook/build/index.html @@ -0,0 +1,17 @@ + + + + + +让 .NET 开发更简单,更通用,更流行。 Furion | Furion + + + + + +
+
Furion [fu:rɪən]
您的痛点,Furion 已阅已历;Furion 的惊喜,您且慢慢享受。
让 .NET 开发更简单,更通用,更流行。
  • MIT 开源协议,商业无需授权
  • 支持 .NET5/6/7+ 平台,没有历史包袱
  • 极少依赖,只依赖两个第三方包
  • 极速上手,一个 Inject() 完成配置
  • 代码无侵入性,100% 兼容原生写法
受支持平台:
Serve.Run();

public class FurionAppService : IDynamicApiController
{
private readonly IRepository<User> _userRepository;
public FurionAppService(IRepository<User> userRepository)
{
_userRepository = userRepository;
}

[IfException(1000, ErrorMessage = "用户ID: {0} 不存在")]
public async Task<UserDto> GetUser([Range(1, int.MaxValue)] int userId)
{
var user = await _userRepository.FindOrDefaultAsync(userId);
_ = user ?? throw Oops.Oh(1000, userId);
return user.Adapt<UserDto>();
}

public async Task<RemoteData> GetRemote(string id)
{
var data = await $"https://www.furion.icu/data?id={id}".GetAsAsync<RemoteData>();
return data;
}
}

开源免费/商业无需授权

⭐️ MIT 开源协议,代码在 Gitee/Github 平台托管 ⭐️

10000 +
Stars
4000 +
Forks
4,705,265
Downloads

他们都在用

Furion 已在全球超过470个项目中使用。从小型企业到企业的解决方案及知名企业。他们在简单软件和复杂管理系统的开发方面都信任我们。

立即添加您的公司
Furion历经两年打磨
网友笔伐过
用户捧杀过
内心反复放弃
最终化茧成蝶
祖国信创添砖加瓦
+ + + + \ No newline at end of file diff --git a/handbook/build/script/baidutongji.js b/handbook/build/script/baidutongji.js new file mode 100644 index 00000000000..8d04c18c3b8 --- /dev/null +++ b/handbook/build/script/baidutongji.js @@ -0,0 +1,7 @@ +var _hmt = _hmt || []; +(function () { + var hm = document.createElement("script"); + hm.src = "https://hm.baidu.com/hm.js?91e98d00c5024e8d87b0bb3c10281d59"; + var s = document.getElementsByTagName("script")[0]; + s.parentNode.insertBefore(hm, s); +})(); diff --git a/handbook/build/search-index.json b/handbook/build/search-index.json new file mode 100644 index 00000000000..3d824ecbc7c --- /dev/null +++ b/handbook/build/search-index.json @@ -0,0 +1 @@ +[{"documents":[{"i":1,"t":"","u":"/blog/archive","b":["博客"]},{"i":2,"t":"5. 在控制台中使用","u":"/blog/console","b":["博客"]},{"i":4,"t":"7. GlobalUsings 的使用","u":"/blog/global-usings","b":["博客"]},{"i":14,"t":"2. 文件上传下载","u":"/blog/fileupload-download","b":["博客"]},{"i":20,"t":"1. HttpContext 应用","u":"/blog/httpcontext","b":["博客"]},{"i":43,"t":"6. .NET 6 Preview 7 尝鲜","u":"/blog/net6-preview7","b":["博客"]},{"i":56,"t":"3. .NET 6 Preview 5 尝鲜","u":"/blog/net6-preview5","b":["博客"]},{"i":67,"t":"4. .NET 6 Preview 6 尝鲜","u":"/blog/net6-preview6","b":["博客"]},{"i":80,"t":"1.1 介绍","u":"/docs/","b":["文档","1. 序言"]},{"i":107,"t":"5.4 请求审计日志","u":"/docs/audit","b":["文档","5. Web 应用开发"]},{"i":117,"t":"15. 安全鉴权","u":"/docs/auth-control","b":["文档"]},{"i":155,"t":"1.2 关于作者","u":"/docs/author","b":["文档","1. 序言"]},{"i":177,"t":"36.3 基准测试","u":"/docs/benchmark","b":["文档","36. 测试指南"]},{"i":195,"t":"36.4 并发测试","u":"/docs/bingfa","b":["文档","36. 测试指南"]},{"i":197,"t":"1.4 框架案例","u":"/docs/case","b":["文档","1. 序言"]},{"i":200,"t":"3.1 AppStartup 启动","u":"/docs/appstartup","b":["文档","3. 应用启动"]},{"i":223,"t":"14. 分布式缓存","u":"/docs/cache","b":["文档"]},{"i":258,"t":"29. 粘土对象","u":"/docs/clayobj","b":["文档"]},{"i":297,"t":"5.6 Vue/React/Angular 接口代理","u":"/docs/clientapi","b":["文档","5. Web 应用开发"]},{"i":334,"t":"3.2 组件化启动","u":"/docs/component","b":["文档","3. 应用启动"]},{"i":376,"t":"38. 贡献指南","u":"/docs/contribute","b":["文档"]},{"i":395,"t":"1.7 发展大事记","u":"/docs/course","b":["文档","1. 序言"]},{"i":402,"t":"16. CORS 跨域","u":"/docs/cors","b":["文档"]},{"i":426,"t":"4.1 配置","u":"/docs/configuration","b":["文档","4. 配置与选项"]},{"i":466,"t":"26.2 Cron 表达式","u":"/docs/cron","b":["文档","26. 定时任务 (Schedule)"]},{"i":497,"t":"9.1 数据库上下文","u":"/docs/dbcontext","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":537,"t":"10.2 Dapper 集成","u":"/docs/dapper","b":["文档","10. SqlSugar 或其他 ORM"]},{"i":563,"t":"9.22 审计日志","u":"/docs/dbcontext-audit","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":577,"t":"8. 数据校验","u":"/docs/data-validation","b":["文档"]},{"i":642,"t":"9.5 新增操作","u":"/docs/dbcontext-add","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":658,"t":"9.7 新增或更新操作","u":"/docs/dbcontext-add-or-update","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":674,"t":"9.19 数据库生成模型","u":"/docs/dbcontext-db-first","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":701,"t":"9.20 模型生成数据库","u":"/docs/dbcontext-code-first","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":737,"t":"9.25. 实体数据监听器","u":"/docs/dbcontext-entitytrigger","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":754,"t":"9.9 批量操作","u":"/docs/dbcontext-batch","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":776,"t":"9.8 删除操作","u":"/docs/dbcontext-delete","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":798,"t":"9.14 函数操作","u":"/docs/dbcontext-function","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":839,"t":"9.23 实体/全局查询筛选器","u":"/docs/dbcontext-filter","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":849,"t":"9.11 高级查询操作","u":"/docs/dbcontext-hight-query","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":892,"t":"9.18 多种数据库操作","u":"/docs/dbcontext-multi-database","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":922,"t":"9.24 数据库操作拦截器","u":"/docs/dbcontext-Interceptor","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":938,"t":"9.2 数据库上下文定位器","u":"/docs/dbcontext-locator","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":952,"t":"9.10 查询操作","u":"/docs/dbcontext-query","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":984,"t":"9.4 仓储模式","u":"/docs/dbcontext-repository","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1044,"t":"9.27 读写分离/主从复制","u":"/docs/dbcontext-read-write","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1100,"t":"9.13 存储过程操作","u":"/docs/dbcontext-proc","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1138,"t":"9.21 实体种子数据","u":"/docs/dbcontext-seed-data","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1154,"t":"9.15 Sql 操作","u":"/docs/dbcontext-sql","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1219,"t":"9.17 Sql 高级代理","u":"/docs/dbcontext-sql-proxy","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1284,"t":"9.16 Sql 模板","u":"/docs/dbcontext-sql-template","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1305,"t":"9.0 入门简要","u":"/docs/dbcontext-start","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1322,"t":"9.6 更新操作","u":"/docs/dbcontext-update","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1356,"t":"9.12 视图操作","u":"/docs/dbcontext-view","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1371,"t":"34.2 在 Docker 部署","u":"/docs/deploy-docker","b":["文档","34. 托管/部署/发布"]},{"i":1382,"t":"12. 依赖注入/控制反转","u":"/docs/dependency-injection","b":["文档"]},{"i":1443,"t":"34.1 在 IIS 部署","u":"/docs/deploy-iis","b":["文档","34. 托管/部署/发布"]},{"i":1477,"t":"35.1 Docker 环境持续部署","u":"/docs/deploy-docker-auto","b":["文档","35. 持续部署集成"]},{"i":1502,"t":"34.3 在 Nginx 部署","u":"/docs/deploy-nginx","b":["文档","34. 托管/部署/发布"]},{"i":1504,"t":"35.2 持续部署集成","u":"/docs/devops","b":["文档","35. 持续部署集成"]},{"i":1506,"t":"1.5 支持 Furion","u":"/docs/donate","b":["文档","1. 序言"]},{"i":1514,"t":"37. 编写包管理工具","u":"/docs/dotnet-tools","b":["文档"]},{"i":1564,"t":"9.29 EFCore 最佳实践","u":"/docs/efcore-recommend","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1569,"t":"5.1 动态 WebAPI","u":"/docs/dynamic-api-controller","b":["文档","5. Web 应用开发"]},{"i":1670,"t":"20. 数据加解密","u":"/docs/encryption","b":["文档"]},{"i":1694,"t":"22. 事件总线","u":"/docs/event-bus-old","b":["文档"]},{"i":1714,"t":"31. 虚拟文件系统","u":"/docs/file-provider","b":["文档"]},{"i":1758,"t":"9.3 数据库实体","u":"/docs/entity","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":1790,"t":"22. 事件总线","u":"/docs/event-bus","b":["文档"]},{"i":1830,"t":"7. 友好异常处理","u":"/docs/friendly-exception","b":["文档"]},{"i":1890,"t":"5.3 筛选器/拦截器/过滤器/AOP","u":"/docs/filter","b":["文档","5. Web 应用开发"]},{"i":1968,"t":"2.1 ASP.NET 5 集成","u":"/docs/get-start","b":["文档","2. 入门指南"]},{"i":1982,"t":"2.1 ASP.NET 6 集成","u":"/docs/get-start-net6","b":["文档","2. 入门指南"]},{"i":1996,"t":"3. DataValidator 静态类","u":"/docs/global/datavalidator","b":["文档"]},{"i":2005,"t":"2.1 ASP.NET 7 集成","u":"/docs/get-start-net7","b":["文档","2. 入门指南"]},{"i":2019,"t":"1. App 静态类","u":"/docs/global/app","b":["文档"]},{"i":2066,"t":"10. JSON 静态类","u":"/docs/global/json","b":["文档"]},{"i":2076,"t":"7. JsonSerializerUtility 静态类","u":"/docs/global/jsonserializer","b":["文档"]},{"i":2088,"t":"13. FS 静态类","u":"/docs/global/fs","b":["文档"]},{"i":2101,"t":"2. Db 静态类","u":"/docs/global/db","b":["文档"]},{"i":2130,"t":"14. JWTEncryption 静态类","u":"/docs/global/jwt","b":["文档"]},{"i":2145,"t":"8. L 静态类","u":"/docs/global/l","b":["文档"]},{"i":2156,"t":"9. MessageCenter 静态类","u":"/docs/global/messagecenter","b":["文档"]},{"i":2163,"t":"5. LinqExpression 静态类","u":"/docs/global/linqexpression","b":["文档"]},{"i":2168,"t":"16. Log 静态类","u":"/docs/global/log","b":["文档"]},{"i":2172,"t":"17. Schedular 静态类","u":"/docs/global/schedular","b":["文档"]},{"i":2180,"t":"11. Scoped 静态类","u":"/docs/global/scoped","b":["文档"]},{"i":2189,"t":"4. Oops 静态类","u":"/docs/global/oops","b":["文档"]},{"i":2202,"t":"6. Http 静态类","u":"/docs/global/shttp","b":["文档"]},{"i":2205,"t":"12. SpareTime 静态类","u":"/docs/global/sparetime","b":["文档"]},{"i":2229,"t":"5.2 HttpContext","u":"/docs/httpcontext","b":["文档","5. Web 应用开发"]},{"i":2258,"t":"15. TP 静态类","u":"/docs/global/tp","b":["文档"]},{"i":2262,"t":"2.4 神奇的 Inject","u":"/docs/inject","b":["文档","2. 入门指南"]},{"i":2288,"t":"2.6 GlobalUsing 使用","u":"/docs/globalusing","b":["文档","2. 入门指南"]},{"i":2301,"t":"33. IPC 进程通信","u":"/docs/ipc","b":["文档"]},{"i":2324,"t":"27. 分布式 ID 生成","u":"/docs/idgenerator","b":["文档"]},{"i":2338,"t":"23. JSON 序列化","u":"/docs/json-serialization","b":["文档"]},{"i":2390,"t":"26. 定时任务/后台任务","u":"/docs/job-old","b":["文档"]},{"i":2493,"t":"2.7 JSON Schema 使用","u":"/docs/jsonschema","b":["文档","2. 入门指南"]},{"i":2515,"t":"21. 全球化和本地化","u":"/docs/local-language","b":["文档"]},{"i":2562,"t":"5.5 中间件 (Middleware)","u":"/docs/middleware","b":["文档","5. Web 应用开发"]},{"i":2596,"t":"10.3 MongoDB 操作","u":"/docs/mongodb","b":["文档","10. SqlSugar 或其他 ORM"]},{"i":2612,"t":"28. 模块化开发","u":"/docs/module-dev","b":["文档"]},{"i":2632,"t":"2.5 .NET6 升级 .NET7","u":"/docs/net6-to-net7","b":["文档","2. 入门指南"]},{"i":2644,"t":"2.9 Nuget 本地调试包","u":"/docs/nuget-local","b":["文档","2. 入门指南"]},{"i":2660,"t":"2.5 .NET5 升级 .NET6","u":"/docs/net5-to-net6","b":["文档","2. 入门指南"]},{"i":2677,"t":"36.2 负载压测","u":"/docs/performance","b":["文档","36. 测试指南"]},{"i":2679,"t":"13. 对象数据映射","u":"/docs/object-mapper","b":["文档"]},{"i":2699,"t":"4.2 选项","u":"/docs/options","b":["文档","4. 配置与选项"]},{"i":2738,"t":"34.6 pm2 部署","u":"/docs/pm2","b":["文档","34. 托管/部署/发布"]},{"i":2767,"t":"1.10 耻辱柱","u":"/docs/pillar-of-humiliation","b":["文档"]},{"i":2769,"t":"1.9 关于框架定位","u":"/docs/position","b":["文档","1. 序言"]},{"i":2771,"t":"2.3 手动搭建分层","u":"/docs/reference","b":["文档","2. 入门指南"]},{"i":2779,"t":"30. 脱敏处理","u":"/docs/sensitive-detection","b":["文档"]},{"i":2801,"t":"25. 辅助角色服务","u":"/docs/process-service","b":["文档"]},{"i":2841,"t":"32. 会话和状态管理","u":"/docs/sesssion-state","b":["文档"]},{"i":2859,"t":"2.0 入门指南","u":"/docs/serverun","b":["文档","2. 入门指南"]},{"i":2908,"t":"11. SaaS 多租户","u":"/docs/saas","b":["文档"]},{"i":2976,"t":"1. 应用配置","u":"/docs/settings/appsettings","b":["文档"]},{"i":2986,"t":"2. 跨域配置","u":"/docs/settings/corsaccessorsettings","b":["文档"]},{"i":2996,"t":"4. 依赖注入配置","u":"/docs/settings/dependencyinjectionsettings","b":["文档"]},{"i":3004,"t":"6. 友好异常配置","u":"/docs/settings/friendlyexceptionsettings","b":["文档"]},{"i":3018,"t":"5. 动态API配置","u":"/docs/settings/dynamicapicontrollersettings","b":["文档"]},{"i":3026,"t":"8. 多语言配置","u":"/docs/settings/localizationsettings","b":["文档"]},{"i":3034,"t":"9. JWT 配置","u":"/docs/settings/jwtsettings","b":["文档"]},{"i":3042,"t":"10. 规范化结果配置","u":"/docs/settings/unifyresultsettings","b":["文档"]},{"i":3050,"t":"3. 验证消息配置","u":"/docs/settings/validationTypemessagesettings","b":["文档"]},{"i":3058,"t":"7. 规范化文档配置","u":"/docs/settings/specificationdocumentsettings","b":["文档"]},{"i":3066,"t":"34.5. 单文件发布","u":"/docs/singlefile","b":["文档","34. 托管/部署/发布"]},{"i":3085,"t":"9.28 分表分库","u":"/docs/split-db","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":3129,"t":"1.3 示例架构说明","u":"/docs/source","b":["文档","1. 序言"]},{"i":3134,"t":"24. 即时通讯","u":"/docs/signalr","b":["文档"]},{"i":3206,"t":"10.1 SqlSugar 集成","u":"/docs/sqlsugar","b":["文档","10. SqlSugar 或其他 ORM"]},{"i":3241,"t":"1.8 路线图","u":"/docs/target","b":["文档","1. 序言"]},{"i":3247,"t":"10.1. SqlSugar 集成","u":"/docs/sqlsugar-old","b":["文档"]},{"i":3280,"t":"9.26 事务和工作单元","u":"/docs/tran","b":["文档","9. 数据库操作指南(EFCore)"]},{"i":3299,"t":"2.8 Visual Studio 高效率","u":"/docs/vsfast","b":["文档","2. 入门指南"]},{"i":3312,"t":"2.2 官方脚手架","u":"/docs/template","b":["文档","2. 入门指南"]},{"i":3334,"t":"34.4 二级虚拟目录部署","u":"/docs/virtual-deploy","b":["文档","34. 托管/部署/发布"]},{"i":3348,"t":"36.1 单元/集成测试","u":"/docs/unittest","b":["文档","36. 测试指南"]},{"i":3410,"t":"18. 日志记录","u":"/docs/logging","b":["文档"]},{"i":3473,"t":"19. 远程请求","u":"/docs/http","b":["文档"]},{"i":3606,"t":"6. 规范化接口文档","u":"/docs/specification-document","b":["文档"]},{"i":3725,"t":"17. 视图引擎","u":"/docs/view-engine","b":["文档"]},{"i":3757,"t":"26.1 调度作业","u":"/docs/job","b":["文档","26. 定时任务 (Schedule)"]},{"i":3907,"t":"1.6 更新日志","u":"/docs/upgrade","b":["文档","1. 序言"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[]],["t/2",[0,2.215,1,4.651,2,4.651,3,3.535]],["t/4",[3,3.927,4,3.084,5,4.591]],["t/14",[6,1.926,7,4.591,8,5.167]],["t/20",[9,1.926,10,4.591,11,4.591]],["t/43",[4,2.313,12,3.005,13,2.635,14,3.159,15,3.159]],["t/56",[0,1.846,12,2.081,13,2.635,14,3.159,15,3.159,16,2.081]],["t/67",[12,3.005,13,2.635,14,3.159,15,3.159,17,2.152]],["t/80",[9,2.546,18,5.167]],["t/107",[0,2.014,17,2.347,19,3.756,20,3.756,21,3.214]],["t/117",[22,3.79,23,4.651,24,4.651,25,4.651]],["t/155",[6,1.734,9,1.734,26,4.132,27,4.651]],["t/177",[16,2.497,28,3.535,29,4.651,30,3.79]],["t/195",[17,2.582,28,3.535,30,3.79,31,4.651]],["t/197",[9,1.734,17,2.582,32,4.132,33,4.651]],["t/200",[9,1.734,16,2.497,34,4.651,35,4.132]],["t/223",[36,4.211,37,4.591,38,5.167]],["t/258",[39,4.591,40,5.167,41,4.591]],["t/297",[0,1.704,12,1.921,42,3.578,43,3.578,44,3.578,45,3.179,46,3.179]],["t/334",[6,1.576,16,2.27,35,3.756,47,4.228,48,4.228]],["t/376",[49,5.167,50,5.167,51,4.591]],["t/395",[4,2.776,9,1.734,52,4.651,53,4.651]],["t/402",[54,3.79,55,4.651,56,4.132,57,4.132]],["t/426",[9,1.926,17,2.868,58,2.868]],["t/466",[6,1.734,59,3.535,60,4.651,61,4.651]],["t/497",[9,1.734,62,1.466,63,3.016,64,4.132]],["t/537",[6,1.734,65,2.889,66,4.651,67,2.889]],["t/563",[20,4.132,21,3.535,62,1.466,68,3.79]],["t/577",[69,3.512,70,3.701,71,5.167]],["t/642",[0,2.215,62,1.466,72,4.132,73,2.346]],["t/658",[4,2.523,62,1.332,72,3.756,73,2.133,74,3.446]],["t/674",[62,1.332,63,2.742,75,3.756,76,3.446,77,3.756]],["t/701",[62,1.332,63,2.742,76,3.446,77,3.756,78,3.756]],["t/737",[62,1.332,70,3.028,79,3.756,80,3.214,81,4.228]],["t/754",[62,2.005,73,2.346,82,4.651]],["t/776",[62,1.466,69,3.161,73,2.346,83,4.651]],["t/798",[36,3.79,62,1.466,73,2.346,84,4.651]],["t/839",[62,1.127,80,2.719,85,3.179,86,3.578,87,2.916,88,3.179,89,3.179]],["t/849",[62,1.332,73,2.133,87,3.446,90,3.446,91,3.756]],["t/892",[62,1.332,63,2.742,73,2.133,92,3.756,93,4.228]],["t/922",[62,1.332,63,2.742,73,2.133,94,3.756,95,3.756]],["t/938",[6,1.576,62,1.332,63,2.742,64,3.756,96,4.228]],["t/952",[62,1.466,65,2.889,73,2.346,87,3.79]],["t/984",[17,2.582,62,1.466,97,4.651,98,4.651]],["t/1044",[62,1.332,99,3.756,100,4.228,101,4.228,102,4.228]],["t/1100",[62,1.332,73,2.133,103,3.446,104,4.228,105,4.228]],["t/1138",[62,1.332,70,3.028,80,3.214,106,3.756,107,4.228]],["t/1154",[22,3.79,62,1.466,73,2.346,108,3.79]],["t/1219",[46,3.756,62,1.332,91,3.756,108,3.446,109,3.446]],["t/1284",[54,3.79,62,1.466,108,3.79,110,4.651]],["t/1305",[62,1.466,111,4.132,112,4.132,113,4.651]],["t/1322",[12,2.497,62,1.466,73,2.346,74,3.79]],["t/1356",[62,1.466,73,2.346,114,3.79,115,4.132]],["t/1371",[6,1.734,116,3.161,117,4.132,118,3.016]],["t/1382",[114,3.446,119,3.756,120,3.756,121,4.228,122,4.228]],["t/1443",[9,1.734,116,3.161,118,3.016,123,4.651]],["t/1477",[9,1.445,117,3.444,118,2.513,124,3.444,125,3.876,126,3.444]],["t/1502",[16,2.497,116,3.161,118,3.016,127,4.651]],["t/1504",[6,1.576,67,2.626,118,2.742,124,3.756,126,3.756]],["t/1506",[0,2.215,9,1.734,128,4.651,129,4.651]],["t/1514",[130,4.651,131,4.651,132,4.132,133,4.651]],["t/1564",[39,3.756,62,1.332,134,4.228,135,4.228,136,4.228]],["t/1569",[0,2.215,9,1.734,137,4.132,138,4.651]],["t/1670",[70,3.701,78,4.591,139,5.167]],["t/1694",[68,4.211,140,4.591,141,4.591]],["t/1714",[142,5.167,143,5.167,144,5.167]],["t/1758",[16,2.497,62,1.466,63,3.016,80,3.535]],["t/1790",[68,4.211,140,4.591,141,4.591]],["t/1830",[4,2.776,145,4.132,146,4.132,147,4.132]],["t/1890",[0,1.704,16,1.921,88,3.179,89,3.179,95,3.179,148,3.578,149,3.578]],["t/1968",[0,1.846,6,1.445,9,1.445,13,2.635,67,2.407,150,3.159]],["t/1982",[6,1.445,9,1.445,12,2.081,13,2.635,67,2.407,150,3.159]],["t/1996",[16,2.497,151,4.651,152,2.155,153,2.155]],["t/2005",[4,2.313,6,1.445,9,1.445,13,2.635,67,2.407,150,3.159]],["t/2019",[9,1.734,152,2.155,153,2.155,154,4.651]],["t/2066",[65,2.889,152,2.155,153,2.155,155,3.79]],["t/2076",[4,2.776,152,2.155,153,2.155,156,4.651]],["t/2088",[103,3.79,152,2.155,153,2.155,157,4.651]],["t/2101",[6,1.734,152,2.155,153,2.155,158,4.651]],["t/2130",[36,3.79,152,2.155,153,2.155,159,4.651]],["t/2145",[69,3.161,152,2.155,153,2.155,160,4.651]],["t/2156",[62,1.466,152,2.155,153,2.155,161,4.651]],["t/2163",[0,2.215,152,2.155,153,2.155,162,4.651]],["t/2168",[54,3.79,152,2.155,153,2.155,163,4.651]],["t/2172",[109,3.79,152,2.155,153,2.155,164,4.651]],["t/2180",[90,3.79,152,2.155,153,2.155,165,4.651]],["t/2189",[17,2.582,152,2.155,153,2.155,166,4.651]],["t/2202",[12,2.497,152,2.155,153,2.155,167,4.651]],["t/2205",[114,3.79,152,2.155,153,2.155,168,4.651]],["t/2229",[0,2.461,6,1.926,10,4.591]],["t/2258",[22,3.79,152,2.155,153,2.155,169,4.651]],["t/2262",[6,1.734,17,2.582,170,4.651,171,4.651]],["t/2288",[3,3.535,5,4.132,6,1.734,12,2.497]],["t/2301",[172,4.651,173,4.651,174,4.651,175,4.651]],["t/2324",[37,4.132,76,3.79,99,4.132,176,4.651]],["t/2338",[85,4.591,155,4.211,177,5.167]],["t/2390",[59,3.535,178,4.651,179,4.651,180,4.651]],["t/2493",[3,3.214,4,2.523,6,1.576,155,3.446,181,4.228]],["t/2515",[106,4.591,182,5.167,183,5.167]],["t/2562",[0,3.03,184,4.651,185,4.651]],["t/2596",[16,2.497,65,2.889,73,2.346,186,4.651]],["t/2612",[187,4.591,188,5.167,189,5.167]],["t/2632",[0,2.014,6,1.576,190,3.756,191,3.756,192,4.228]],["t/2644",[6,1.445,62,1.221,132,3.444,193,3.876,194,3.876,195,3.876]],["t/2660",[0,2.014,6,1.576,190,3.756,191,3.756,196,4.228]],["t/2677",[6,1.576,28,3.214,197,4.228,198,4.228,199,4.228]],["t/2679",[41,4.132,70,3.331,103,3.79,200,4.651]],["t/2699",[6,1.926,17,2.868,201,5.167]],["t/2738",[12,2.497,116,3.161,118,3.016,202,4.651]],["t/2767",[9,1.926,65,3.209,203,5.167]],["t/2769",[9,1.576,26,3.756,32,3.756,62,1.332,204,4.228]],["t/2771",[6,1.576,16,2.27,205,4.228,206,4.228,207,4.228]],["t/2779",[147,4.591,208,5.167,209,5.167]],["t/2801",[79,4.132,210,4.651,211,4.651,212,4.651]],["t/2841",[213,4.228,214,4.228,215,4.228,216,4.228,217,4.228]],["t/2859",[6,1.734,51,4.132,111,4.132,112,4.132]],["t/2908",[90,3.79,218,4.651,219,4.132,220,4.651]],["t/2976",[9,1.926,11,4.591,58,2.868]],["t/2986",[6,1.734,56,4.132,57,4.132,58,2.582]],["t/2996",[17,2.582,58,2.582,119,4.132,120,4.132]],["t/3004",[12,2.497,58,2.582,145,4.132,146,4.132]],["t/3018",[0,2.215,58,2.582,137,4.132,221,4.651]],["t/3026",[58,2.582,69,3.161,219,4.132,222,4.651]],["t/3034",[58,2.868,62,1.628,223,5.167]],["t/3042",[58,2.582,65,2.889,224,3.79,225,4.651]],["t/3050",[16,2.497,58,2.582,226,4.651,227,4.651]],["t/3058",[4,2.776,58,2.582,224,3.79,228,4.132]],["t/3066",[0,2.014,7,3.756,116,2.874,229,4.228,230,4.228]],["t/3085",[62,1.466,187,4.132,231,4.651,232,4.651]],["t/3129",[9,1.576,16,2.27,233,4.228,234,4.228,235,4.228]],["t/3134",[94,5.164,236,5.812]],["t/3206",[9,1.734,65,2.889,67,2.889,237,4.132]],["t/3241",[9,1.926,69,3.512,238,5.167]],["t/3247",[9,1.734,65,2.889,67,2.889,237,4.132]],["t/3280",[59,3.214,62,1.332,239,4.228,240,4.228,241,3.756]],["t/3299",[6,1.576,69,2.874,242,4.228,243,4.228,244,4.228]],["t/3312",[6,2.372,245,4.651,246,4.651]],["t/3334",[17,2.347,116,2.874,118,2.742,247,4.228,248,4.228]],["t/3348",[9,1.576,28,3.214,30,3.446,67,2.626,241,3.756]],["t/3410",[21,3.927,92,4.591,249,5.167]],["t/3473",[19,4.591,75,4.591,250,5.167]],["t/3606",[12,2.497,45,4.132,224,3.79,228,4.132]],["t/3725",[109,4.211,115,4.591,251,5.167]],["t/3757",[9,1.734,59,3.535,252,4.651,253,4.651]],["t/3907",[9,1.734,12,2.497,21,3.535,74,3.79]]],"invertedIndex":[["0",{"_index":111,"t":{"1305":{"position":[[2,1]]},"2859":{"position":[[2,1]]}}}],["1",{"_index":9,"t":{"20":{"position":[[0,1]]},"80":{"position":[[0,1],[2,1]]},"155":{"position":[[0,1]]},"197":{"position":[[0,1]]},"200":{"position":[[2,1]]},"395":{"position":[[0,1]]},"426":{"position":[[2,1]]},"497":{"position":[[2,1]]},"1443":{"position":[[3,1]]},"1477":{"position":[[3,1]]},"1506":{"position":[[0,1]]},"1569":{"position":[[2,1]]},"1968":{"position":[[2,1]]},"1982":{"position":[[2,1]]},"2005":{"position":[[2,1]]},"2019":{"position":[[0,1]]},"2767":{"position":[[0,1]]},"2769":{"position":[[0,1]]},"2976":{"position":[[0,1]]},"3129":{"position":[[0,1]]},"3206":{"position":[[3,1]]},"3241":{"position":[[0,1]]},"3247":{"position":[[3,1]]},"3348":{"position":[[3,1]]},"3757":{"position":[[3,1]]},"3907":{"position":[[0,1]]}}}],["10",{"_index":65,"t":{"537":{"position":[[0,2]]},"952":{"position":[[2,2]]},"2066":{"position":[[0,2]]},"2596":{"position":[[0,2]]},"2767":{"position":[[2,2]]},"3042":{"position":[[0,2]]},"3206":{"position":[[0,2]]},"3247":{"position":[[0,2]]}}}],["11",{"_index":90,"t":{"849":{"position":[[2,2]]},"2180":{"position":[[0,2]]},"2908":{"position":[[0,2]]}}}],["12",{"_index":114,"t":{"1356":{"position":[[2,2]]},"1382":{"position":[[0,2]]},"2205":{"position":[[0,2]]}}}],["13",{"_index":103,"t":{"1100":{"position":[[2,2]]},"2088":{"position":[[0,2]]},"2679":{"position":[[0,2]]}}}],["14",{"_index":36,"t":{"223":{"position":[[0,2]]},"798":{"position":[[2,2]]},"2130":{"position":[[0,2]]}}}],["15",{"_index":22,"t":{"117":{"position":[[0,2]]},"1154":{"position":[[2,2]]},"2258":{"position":[[0,2]]}}}],["16",{"_index":54,"t":{"402":{"position":[[0,2]]},"1284":{"position":[[2,2]]},"2168":{"position":[[0,2]]}}}],["17",{"_index":109,"t":{"1219":{"position":[[2,2]]},"2172":{"position":[[0,2]]},"3725":{"position":[[0,2]]}}}],["18",{"_index":92,"t":{"892":{"position":[[2,2]]},"3410":{"position":[[0,2]]}}}],["19",{"_index":75,"t":{"674":{"position":[[2,2]]},"3473":{"position":[[0,2]]}}}],["2",{"_index":6,"t":{"14":{"position":[[0,1]]},"155":{"position":[[2,1]]},"334":{"position":[[2,1]]},"466":{"position":[[3,1]]},"537":{"position":[[3,1]]},"938":{"position":[[2,1]]},"1371":{"position":[[3,1]]},"1504":{"position":[[3,1]]},"1968":{"position":[[0,1]]},"1982":{"position":[[0,1]]},"2005":{"position":[[0,1]]},"2101":{"position":[[0,1]]},"2229":{"position":[[2,1]]},"2262":{"position":[[0,1]]},"2288":{"position":[[0,1]]},"2493":{"position":[[0,1]]},"2632":{"position":[[0,1]]},"2644":{"position":[[0,1]]},"2660":{"position":[[0,1]]},"2677":{"position":[[3,1]]},"2699":{"position":[[2,1]]},"2771":{"position":[[0,1]]},"2859":{"position":[[0,1]]},"2986":{"position":[[0,1]]},"3299":{"position":[[0,1]]},"3312":{"position":[[0,1],[2,1]]}}}],["20",{"_index":78,"t":{"701":{"position":[[2,2]]},"1670":{"position":[[0,2]]}}}],["21",{"_index":106,"t":{"1138":{"position":[[2,2]]},"2515":{"position":[[0,2]]}}}],["22",{"_index":68,"t":{"563":{"position":[[2,2]]},"1694":{"position":[[0,2]]},"1790":{"position":[[0,2]]}}}],["23",{"_index":85,"t":{"839":{"position":[[2,2]]},"2338":{"position":[[0,2]]}}}],["24",{"_index":94,"t":{"922":{"position":[[2,2]]},"3134":{"position":[[0,2]]}}}],["25",{"_index":79,"t":{"737":{"position":[[2,2]]},"2801":{"position":[[0,2]]}}}],["26",{"_index":59,"t":{"466":{"position":[[0,2]]},"2390":{"position":[[0,2]]},"3280":{"position":[[2,2]]},"3757":{"position":[[0,2]]}}}],["27",{"_index":99,"t":{"1044":{"position":[[2,2]]},"2324":{"position":[[0,2]]}}}],["28",{"_index":187,"t":{"2612":{"position":[[0,2]]},"3085":{"position":[[2,2]]}}}],["29",{"_index":39,"t":{"258":{"position":[[0,2]]},"1564":{"position":[[2,2]]}}}],["3",{"_index":16,"t":{"56":{"position":[[0,1]]},"177":{"position":[[3,1]]},"200":{"position":[[0,1]]},"334":{"position":[[0,1]]},"1502":{"position":[[3,1]]},"1758":{"position":[[2,1]]},"1890":{"position":[[2,1]]},"1996":{"position":[[0,1]]},"2596":{"position":[[3,1]]},"2771":{"position":[[2,1]]},"3050":{"position":[[0,1]]},"3129":{"position":[[2,1]]}}}],["30",{"_index":208,"t":{"2779":{"position":[[0,2]]}}}],["31",{"_index":142,"t":{"1714":{"position":[[0,2]]}}}],["32",{"_index":213,"t":{"2841":{"position":[[0,2]]}}}],["33",{"_index":172,"t":{"2301":{"position":[[0,2]]}}}],["34",{"_index":116,"t":{"1371":{"position":[[0,2]]},"1443":{"position":[[0,2]]},"1502":{"position":[[0,2]]},"2738":{"position":[[0,2]]},"3066":{"position":[[0,2]]},"3334":{"position":[[0,2]]}}}],["35",{"_index":124,"t":{"1477":{"position":[[0,2]]},"1504":{"position":[[0,2]]}}}],["36",{"_index":28,"t":{"177":{"position":[[0,2]]},"195":{"position":[[0,2]]},"2677":{"position":[[0,2]]},"3348":{"position":[[0,2]]}}}],["37",{"_index":130,"t":{"1514":{"position":[[0,2]]}}}],["38",{"_index":49,"t":{"376":{"position":[[0,2]]}}}],["4",{"_index":17,"t":{"67":{"position":[[0,1]]},"107":{"position":[[2,1]]},"195":{"position":[[3,1]]},"197":{"position":[[2,1]]},"426":{"position":[[0,1]]},"984":{"position":[[2,1]]},"2189":{"position":[[0,1]]},"2262":{"position":[[2,1]]},"2699":{"position":[[0,1]]},"2996":{"position":[[0,1]]},"3334":{"position":[[3,1]]}}}],["5",{"_index":0,"t":{"2":{"position":[[0,1]]},"56":{"position":[[18,1]]},"107":{"position":[[0,1]]},"297":{"position":[[0,1]]},"642":{"position":[[2,1]]},"1506":{"position":[[2,1]]},"1569":{"position":[[0,1]]},"1890":{"position":[[0,1]]},"1968":{"position":[[12,1]]},"2163":{"position":[[0,1]]},"2229":{"position":[[0,1]]},"2562":{"position":[[0,1],[2,1]]},"2632":{"position":[[2,1]]},"2660":{"position":[[2,1]]},"3018":{"position":[[0,1]]},"3066":{"position":[[3,1]]}}}],["6",{"_index":12,"t":{"43":{"position":[[0,1],[8,1]]},"56":{"position":[[8,1]]},"67":{"position":[[8,1],[18,1]]},"297":{"position":[[2,1]]},"1322":{"position":[[2,1]]},"1982":{"position":[[12,1]]},"2202":{"position":[[0,1]]},"2288":{"position":[[2,1]]},"2738":{"position":[[3,1]]},"3004":{"position":[[0,1]]},"3606":{"position":[[0,1]]},"3907":{"position":[[2,1]]}}}],["7",{"_index":4,"t":{"4":{"position":[[0,1]]},"43":{"position":[[18,1]]},"395":{"position":[[2,1]]},"658":{"position":[[2,1]]},"1830":{"position":[[0,1]]},"2005":{"position":[[12,1]]},"2076":{"position":[[0,1]]},"2493":{"position":[[2,1]]},"3058":{"position":[[0,1]]}}}],["8",{"_index":69,"t":{"577":{"position":[[0,1]]},"776":{"position":[[2,1]]},"2145":{"position":[[0,1]]},"3026":{"position":[[0,1]]},"3241":{"position":[[2,1]]},"3299":{"position":[[2,1]]}}}],["9",{"_index":62,"t":{"497":{"position":[[0,1]]},"563":{"position":[[0,1]]},"642":{"position":[[0,1]]},"658":{"position":[[0,1]]},"674":{"position":[[0,1]]},"701":{"position":[[0,1]]},"737":{"position":[[0,1]]},"754":{"position":[[0,1],[2,1]]},"776":{"position":[[0,1]]},"798":{"position":[[0,1]]},"839":{"position":[[0,1]]},"849":{"position":[[0,1]]},"892":{"position":[[0,1]]},"922":{"position":[[0,1]]},"938":{"position":[[0,1]]},"952":{"position":[[0,1]]},"984":{"position":[[0,1]]},"1044":{"position":[[0,1]]},"1100":{"position":[[0,1]]},"1138":{"position":[[0,1]]},"1154":{"position":[[0,1]]},"1219":{"position":[[0,1]]},"1284":{"position":[[0,1]]},"1305":{"position":[[0,1]]},"1322":{"position":[[0,1]]},"1356":{"position":[[0,1]]},"1564":{"position":[[0,1]]},"1758":{"position":[[0,1]]},"2156":{"position":[[0,1]]},"2644":{"position":[[2,1]]},"2769":{"position":[[2,1]]},"3034":{"position":[[0,1]]},"3085":{"position":[[0,1]]},"3280":{"position":[[0,1]]}}}],["angular",{"_index":44,"t":{"297":{"position":[[14,7]]}}}],["aop",{"_index":149,"t":{"1890":{"position":[[16,3]]}}}],["api",{"_index":221,"t":{"3018":{"position":[[5,3]]}}}],["app",{"_index":154,"t":{"2019":{"position":[[3,3]]}}}],["appstartup",{"_index":34,"t":{"200":{"position":[[4,10]]}}}],["asp",{"_index":150,"t":{"1968":{"position":[[4,3]]},"1982":{"position":[[4,3]]},"2005":{"position":[[4,3]]}}}],["cor",{"_index":55,"t":{"402":{"position":[[4,4]]}}}],["cron",{"_index":60,"t":{"466":{"position":[[5,4]]}}}],["dapper",{"_index":66,"t":{"537":{"position":[[5,6]]}}}],["datavalid",{"_index":151,"t":{"1996":{"position":[[3,13]]}}}],["db",{"_index":158,"t":{"2101":{"position":[[3,2]]}}}],["docker",{"_index":117,"t":{"1371":{"position":[[7,6]]},"1477":{"position":[[5,6]]}}}],["efcor",{"_index":134,"t":{"1564":{"position":[[5,6]]}}}],["fs",{"_index":157,"t":{"2088":{"position":[[4,2]]}}}],["furion",{"_index":129,"t":{"1506":{"position":[[7,6]]}}}],["globalus",{"_index":5,"t":{"4":{"position":[[3,12]]},"2288":{"position":[[4,11]]}}}],["http",{"_index":167,"t":{"2202":{"position":[[3,4]]}}}],["httpcontext",{"_index":10,"t":{"20":{"position":[[3,11]]},"2229":{"position":[[4,11]]}}}],["id",{"_index":176,"t":{"2324":{"position":[[8,2]]}}}],["ii",{"_index":123,"t":{"1443":{"position":[[7,3]]}}}],["inject",{"_index":171,"t":{"2262":{"position":[[8,6]]}}}],["ipc",{"_index":173,"t":{"2301":{"position":[[4,3]]}}}],["json",{"_index":155,"t":{"2066":{"position":[[4,4]]},"2338":{"position":[[4,4]]},"2493":{"position":[[4,4]]}}}],["jsonserializerutil",{"_index":156,"t":{"2076":{"position":[[3,21]]}}}],["jwt",{"_index":223,"t":{"3034":{"position":[[3,3]]}}}],["jwtencrypt",{"_index":159,"t":{"2130":{"position":[[4,13]]}}}],["l",{"_index":160,"t":{"2145":{"position":[[3,1]]}}}],["linqexpress",{"_index":162,"t":{"2163":{"position":[[3,14]]}}}],["log",{"_index":163,"t":{"2168":{"position":[[4,3]]}}}],["messagecent",{"_index":161,"t":{"2156":{"position":[[3,13]]}}}],["middlewar",{"_index":185,"t":{"2562":{"position":[[9,10]]}}}],["mongodb",{"_index":186,"t":{"2596":{"position":[[5,7]]}}}],["net",{"_index":13,"t":{"43":{"position":[[4,3]]},"56":{"position":[[4,3]]},"67":{"position":[[4,3]]},"1968":{"position":[[8,3]]},"1982":{"position":[[8,3]]},"2005":{"position":[[8,3]]}}}],["net5",{"_index":196,"t":{"2660":{"position":[[5,4]]}}}],["net6",{"_index":190,"t":{"2632":{"position":[[5,4]]},"2660":{"position":[[14,4]]}}}],["net7",{"_index":192,"t":{"2632":{"position":[[14,4]]}}}],["nginx",{"_index":127,"t":{"1502":{"position":[[7,5]]}}}],["nuget",{"_index":193,"t":{"2644":{"position":[[4,5]]}}}],["oop",{"_index":166,"t":{"2189":{"position":[[3,4]]}}}],["pm2",{"_index":202,"t":{"2738":{"position":[[5,3]]}}}],["preview",{"_index":14,"t":{"43":{"position":[[10,7]]},"56":{"position":[[10,7]]},"67":{"position":[[10,7]]}}}],["react",{"_index":43,"t":{"297":{"position":[[8,5]]}}}],["saa",{"_index":218,"t":{"2908":{"position":[[4,4]]}}}],["schedular",{"_index":164,"t":{"2172":{"position":[[4,9]]}}}],["schema",{"_index":181,"t":{"2493":{"position":[[9,6]]}}}],["scope",{"_index":165,"t":{"2180":{"position":[[4,6]]}}}],["sparetim",{"_index":168,"t":{"2205":{"position":[[4,9]]}}}],["sql",{"_index":108,"t":{"1154":{"position":[[5,3]]},"1219":{"position":[[5,3]]},"1284":{"position":[[5,3]]}}}],["sqlsugar",{"_index":237,"t":{"3206":{"position":[[5,8]]},"3247":{"position":[[6,8]]}}}],["studio",{"_index":243,"t":{"3299":{"position":[[11,6]]}}}],["tp",{"_index":169,"t":{"2258":{"position":[[4,2]]}}}],["visual",{"_index":242,"t":{"3299":{"position":[[4,6]]}}}],["vue",{"_index":42,"t":{"297":{"position":[[4,3]]}}}],["webapi",{"_index":138,"t":{"1569":{"position":[[7,6]]}}}],["上下文",{"_index":64,"t":{"497":{"position":[[7,3]]},"938":{"position":[[7,3]]}}}],["上传下载",{"_index":8,"t":{"14":{"position":[[5,4]]}}}],["中",{"_index":2,"t":{"2":{"position":[[7,1]]}}}],["中间件",{"_index":184,"t":{"2562":{"position":[[4,3]]}}}],["主从复制",{"_index":102,"t":{"1044":{"position":[[10,4]]}}}],["事件",{"_index":140,"t":{"1694":{"position":[[4,2]]},"1790":{"position":[[4,2]]}}}],["事务",{"_index":239,"t":{"3280":{"position":[[5,2]]}}}],["二级",{"_index":247,"t":{"3334":{"position":[[5,2]]}}}],["介绍",{"_index":18,"t":{"80":{"position":[[4,2]]}}}],["仓储",{"_index":97,"t":{"984":{"position":[[4,2]]}}}],["代理",{"_index":46,"t":{"297":{"position":[[24,2]]},"1219":{"position":[[11,2]]}}}],["任务",{"_index":179,"t":{"2390":{"position":[[6,2]]}}}],["会",{"_index":214,"t":{"2841":{"position":[[4,1]]}}}],["作业",{"_index":253,"t":{"3757":{"position":[[7,2]]}}}],["作者",{"_index":27,"t":{"155":{"position":[[6,2]]}}}],["使用",{"_index":3,"t":{"2":{"position":[[8,2]]},"4":{"position":[[17,2]]},"2288":{"position":[[16,2]]},"2493":{"position":[[16,2]]}}}],["依赖",{"_index":119,"t":{"1382":{"position":[[4,2]]},"2996":{"position":[[3,2]]}}}],["入门",{"_index":112,"t":{"1305":{"position":[[4,2]]},"2859":{"position":[[4,2]]}}}],["全局",{"_index":86,"t":{"839":{"position":[[8,2]]}}}],["全球化",{"_index":182,"t":{"2515":{"position":[[4,3]]}}}],["关于",{"_index":26,"t":{"155":{"position":[[4,2]]},"2769":{"position":[[4,2]]}}}],["函数",{"_index":84,"t":{"798":{"position":[[5,2]]}}}],["分层",{"_index":207,"t":{"2771":{"position":[[8,2]]}}}],["分布式",{"_index":37,"t":{"223":{"position":[[4,3]]},"2324":{"position":[[4,3]]}}}],["分库",{"_index":232,"t":{"3085":{"position":[[7,2]]}}}],["分离",{"_index":101,"t":{"1044":{"position":[[7,2]]}}}],["分表",{"_index":231,"t":{"3085":{"position":[[5,2]]}}}],["删除",{"_index":83,"t":{"776":{"position":[[4,2]]}}}],["加解密",{"_index":139,"t":{"1670":{"position":[[6,3]]}}}],["动态",{"_index":137,"t":{"1569":{"position":[[4,2]]},"3018":{"position":[[3,2]]}}}],["包",{"_index":132,"t":{"1514":{"position":[[6,1]]},"2644":{"position":[[14,1]]}}}],["化",{"_index":48,"t":{"334":{"position":[[6,1]]}}}],["升级",{"_index":191,"t":{"2632":{"position":[[10,2]]},"2660":{"position":[[10,2]]}}}],["单",{"_index":229,"t":{"3066":{"position":[[6,1]]}}}],["单元",{"_index":241,"t":{"3280":{"position":[[10,2]]},"3348":{"position":[[5,2]]}}}],["即时通讯",{"_index":236,"t":{"3134":{"position":[[4,4]]}}}],["压",{"_index":198,"t":{"2677":{"position":[[7,1]]}}}],["友好",{"_index":145,"t":{"1830":{"position":[[3,2]]},"3004":{"position":[[3,2]]}}}],["反转",{"_index":122,"t":{"1382":{"position":[[11,2]]}}}],["发展",{"_index":52,"t":{"395":{"position":[[4,2]]}}}],["发布",{"_index":230,"t":{"3066":{"position":[[9,2]]}}}],["后台任务",{"_index":180,"t":{"2390":{"position":[[9,4]]}}}],["启动",{"_index":35,"t":{"200":{"position":[[15,2]]},"334":{"position":[[7,2]]}}}],["器",{"_index":89,"t":{"839":{"position":[[14,1]]},"1890":{"position":[[6,1]]}}}],["域",{"_index":57,"t":{"402":{"position":[[10,1]]},"2986":{"position":[[4,1]]}}}],["基准",{"_index":29,"t":{"177":{"position":[[5,2]]}}}],["处理",{"_index":147,"t":{"1830":{"position":[[7,2]]},"2779":{"position":[[6,2]]}}}],["多",{"_index":219,"t":{"2908":{"position":[[9,1]]},"3026":{"position":[[3,1]]}}}],["多种",{"_index":93,"t":{"892":{"position":[[5,2]]}}}],["大事记",{"_index":53,"t":{"395":{"position":[[6,3]]}}}],["存储",{"_index":104,"t":{"1100":{"position":[[5,2]]}}}],["安全",{"_index":23,"t":{"117":{"position":[[4,2]]}}}],["官方",{"_index":245,"t":{"3312":{"position":[[4,2]]}}}],["定位",{"_index":204,"t":{"2769":{"position":[[8,2]]}}}],["定位器",{"_index":96,"t":{"938":{"position":[[10,3]]}}}],["定时",{"_index":178,"t":{"2390":{"position":[[4,2]]}}}],["实体",{"_index":80,"t":{"737":{"position":[[6,2]]},"839":{"position":[[5,2]]},"1138":{"position":[[5,2]]},"1758":{"position":[[7,2]]}}}],["实践",{"_index":136,"t":{"1564":{"position":[[14,2]]}}}],["审计",{"_index":20,"t":{"107":{"position":[[6,2]]},"563":{"position":[[5,2]]}}}],["对象",{"_index":41,"t":{"258":{"position":[[6,2]]},"2679":{"position":[[4,2]]}}}],["尝鲜",{"_index":15,"t":{"43":{"position":[[20,2]]},"56":{"position":[[20,2]]},"67":{"position":[[20,2]]}}}],["工作",{"_index":240,"t":{"3280":{"position":[[8,2]]}}}],["并发",{"_index":31,"t":{"195":{"position":[[5,2]]}}}],["序列化",{"_index":177,"t":{"2338":{"position":[[9,3]]}}}],["应用",{"_index":11,"t":{"20":{"position":[[15,2]]},"2976":{"position":[[3,2]]}}}],["开发",{"_index":189,"t":{"2612":{"position":[[7,2]]}}}],["异常",{"_index":146,"t":{"1830":{"position":[[5,2]]},"3004":{"position":[[5,2]]}}}],["引擎",{"_index":251,"t":{"3725":{"position":[[6,2]]}}}],["总线",{"_index":141,"t":{"1694":{"position":[[6,2]]},"1790":{"position":[[6,2]]}}}],["手动",{"_index":205,"t":{"2771":{"position":[[4,2]]}}}],["批量",{"_index":82,"t":{"754":{"position":[[4,2]]}}}],["拦截器",{"_index":95,"t":{"922":{"position":[[10,3]]},"1890":{"position":[[8,3]]}}}],["持续",{"_index":126,"t":{"1477":{"position":[[14,2]]},"1504":{"position":[[5,2]]}}}],["指南",{"_index":51,"t":{"376":{"position":[[6,2]]},"2859":{"position":[[6,2]]}}}],["接口",{"_index":45,"t":{"297":{"position":[[22,2]]},"3606":{"position":[[6,2]]}}}],["控制",{"_index":121,"t":{"1382":{"position":[[9,2]]}}}],["控制台",{"_index":1,"t":{"2":{"position":[[4,3]]}}}],["搭建",{"_index":206,"t":{"2771":{"position":[[6,2]]}}}],["操作",{"_index":73,"t":{"642":{"position":[[6,2]]},"658":{"position":[[9,2]]},"754":{"position":[[6,2]]},"776":{"position":[[6,2]]},"798":{"position":[[7,2]]},"849":{"position":[[9,2]]},"892":{"position":[[10,2]]},"922":{"position":[[8,2]]},"952":{"position":[[7,2]]},"1100":{"position":[[9,2]]},"1154":{"position":[[9,2]]},"1322":{"position":[[6,2]]},"1356":{"position":[[7,2]]},"2596":{"position":[[13,2]]}}}],["支持",{"_index":128,"t":{"1506":{"position":[[4,2]]}}}],["数据",{"_index":70,"t":{"577":{"position":[[3,2]]},"737":{"position":[[8,2]]},"1138":{"position":[[9,2]]},"1670":{"position":[[4,2]]},"2679":{"position":[[6,2]]}}}],["数据库",{"_index":63,"t":{"497":{"position":[[4,3]]},"674":{"position":[[5,3]]},"701":{"position":[[9,3]]},"892":{"position":[[7,3]]},"922":{"position":[[5,3]]},"938":{"position":[[4,3]]},"1758":{"position":[[4,3]]}}}],["文件",{"_index":7,"t":{"14":{"position":[[3,2]]},"3066":{"position":[[7,2]]}}}],["文件系统",{"_index":144,"t":{"1714":{"position":[[6,4]]}}}],["文档",{"_index":228,"t":{"3058":{"position":[[6,2]]},"3606":{"position":[[8,2]]}}}],["新增",{"_index":72,"t":{"642":{"position":[[4,2]]},"658":{"position":[[4,2]]}}}],["日志",{"_index":21,"t":{"107":{"position":[[8,2]]},"563":{"position":[[7,2]]},"3410":{"position":[[4,2]]},"3907":{"position":[[6,2]]}}}],["映射",{"_index":200,"t":{"2679":{"position":[[8,2]]}}}],["更新",{"_index":74,"t":{"658":{"position":[[7,2]]},"1322":{"position":[[4,2]]},"3907":{"position":[[4,2]]}}}],["最佳",{"_index":135,"t":{"1564":{"position":[[12,2]]}}}],["服务",{"_index":212,"t":{"2801":{"position":[[8,2]]}}}],["本地",{"_index":194,"t":{"2644":{"position":[[10,2]]}}}],["本地化",{"_index":183,"t":{"2515":{"position":[[8,3]]}}}],["权",{"_index":25,"t":{"117":{"position":[[7,1]]}}}],["架构",{"_index":234,"t":{"3129":{"position":[[6,2]]}}}],["查询",{"_index":87,"t":{"839":{"position":[[10,2]]},"849":{"position":[[7,2]]},"952":{"position":[[5,2]]}}}],["校验",{"_index":71,"t":{"577":{"position":[[5,2]]}}}],["框架",{"_index":32,"t":{"197":{"position":[[4,2]]},"2769":{"position":[[6,2]]}}}],["案例",{"_index":33,"t":{"197":{"position":[[6,2]]}}}],["模块化",{"_index":188,"t":{"2612":{"position":[[4,3]]}}}],["模型",{"_index":77,"t":{"674":{"position":[[10,2]]},"701":{"position":[[5,2]]}}}],["模式",{"_index":98,"t":{"984":{"position":[[6,2]]}}}],["模板",{"_index":110,"t":{"1284":{"position":[[9,2]]}}}],["注入",{"_index":120,"t":{"1382":{"position":[[6,2]]},"2996":{"position":[[5,2]]}}}],["测",{"_index":199,"t":{"2677":{"position":[[8,1]]}}}],["测试",{"_index":30,"t":{"177":{"position":[[7,2]]},"195":{"position":[[7,2]]},"3348":{"position":[[10,2]]}}}],["消息",{"_index":227,"t":{"3050":{"position":[[5,2]]}}}],["状态",{"_index":216,"t":{"2841":{"position":[[7,2]]}}}],["环境",{"_index":125,"t":{"1477":{"position":[[12,2]]}}}],["生成",{"_index":76,"t":{"674":{"position":[[8,2]]},"701":{"position":[[7,2]]},"2324":{"position":[[11,2]]}}}],["监听器",{"_index":81,"t":{"737":{"position":[[10,3]]}}}],["示例",{"_index":233,"t":{"3129":{"position":[[4,2]]}}}],["神奇",{"_index":170,"t":{"2262":{"position":[[4,2]]}}}],["种子",{"_index":107,"t":{"1138":{"position":[[7,2]]}}}],["租户",{"_index":220,"t":{"2908":{"position":[[10,2]]}}}],["筛选",{"_index":88,"t":{"839":{"position":[[12,2]]},"1890":{"position":[[4,2]]}}}],["简要",{"_index":113,"t":{"1305":{"position":[[6,2]]}}}],["管理",{"_index":217,"t":{"2841":{"position":[[9,2]]}}}],["管理工具",{"_index":133,"t":{"1514":{"position":[[7,4]]}}}],["类",{"_index":153,"t":{"1996":{"position":[[19,1]]},"2019":{"position":[[9,1]]},"2066":{"position":[[11,1]]},"2076":{"position":[[27,1]]},"2088":{"position":[[9,1]]},"2101":{"position":[[8,1]]},"2130":{"position":[[20,1]]},"2145":{"position":[[7,1]]},"2156":{"position":[[19,1]]},"2163":{"position":[[20,1]]},"2168":{"position":[[10,1]]},"2172":{"position":[[16,1]]},"2180":{"position":[[13,1]]},"2189":{"position":[[10,1]]},"2202":{"position":[[10,1]]},"2205":{"position":[[16,1]]},"2258":{"position":[[9,1]]}}}],["粘土",{"_index":40,"t":{"258":{"position":[[4,2]]}}}],["组件",{"_index":47,"t":{"334":{"position":[[4,2]]}}}],["结果",{"_index":225,"t":{"3042":{"position":[[7,2]]}}}],["缓存",{"_index":38,"t":{"223":{"position":[[7,2]]}}}],["编写",{"_index":131,"t":{"1514":{"position":[[4,2]]}}}],["耻辱柱",{"_index":203,"t":{"2767":{"position":[[5,3]]}}}],["脚手架",{"_index":246,"t":{"3312":{"position":[[6,3]]}}}],["脱敏",{"_index":209,"t":{"2779":{"position":[[4,2]]}}}],["虚拟",{"_index":143,"t":{"1714":{"position":[[4,2]]}}}],["虚拟目录",{"_index":248,"t":{"3334":{"position":[[7,4]]}}}],["表达式",{"_index":61,"t":{"466":{"position":[[10,3]]}}}],["规范化",{"_index":224,"t":{"3042":{"position":[[4,3]]},"3058":{"position":[[3,3]]},"3606":{"position":[[3,3]]}}}],["视图",{"_index":115,"t":{"1356":{"position":[[5,2]]},"3725":{"position":[[4,2]]}}}],["角色",{"_index":211,"t":{"2801":{"position":[[6,2]]}}}],["记录",{"_index":249,"t":{"3410":{"position":[[6,2]]}}}],["话",{"_index":215,"t":{"2841":{"position":[[5,1]]}}}],["语言",{"_index":222,"t":{"3026":{"position":[[4,2]]}}}],["说明",{"_index":235,"t":{"3129":{"position":[[8,2]]}}}],["请求",{"_index":19,"t":{"107":{"position":[[4,2]]},"3473":{"position":[[6,2]]}}}],["读写",{"_index":100,"t":{"1044":{"position":[[5,2]]}}}],["调度",{"_index":252,"t":{"3757":{"position":[[5,2]]}}}],["调试",{"_index":195,"t":{"2644":{"position":[[12,2]]}}}],["负载",{"_index":197,"t":{"2677":{"position":[[5,2]]}}}],["贡献",{"_index":50,"t":{"376":{"position":[[4,2]]}}}],["跨",{"_index":56,"t":{"402":{"position":[[9,1]]},"2986":{"position":[[3,1]]}}}],["路线图",{"_index":238,"t":{"3241":{"position":[[4,3]]}}}],["辅助",{"_index":210,"t":{"2801":{"position":[[4,2]]}}}],["过滤器",{"_index":148,"t":{"1890":{"position":[[12,3]]}}}],["过程",{"_index":105,"t":{"1100":{"position":[[7,2]]}}}],["进程",{"_index":174,"t":{"2301":{"position":[[8,2]]}}}],["远程",{"_index":250,"t":{"3473":{"position":[[4,2]]}}}],["选项",{"_index":201,"t":{"2699":{"position":[[4,2]]}}}],["通信",{"_index":175,"t":{"2301":{"position":[[10,2]]}}}],["部署",{"_index":118,"t":{"1371":{"position":[[14,2]]},"1443":{"position":[[11,2]]},"1477":{"position":[[16,2]]},"1502":{"position":[[13,2]]},"1504":{"position":[[7,2]]},"2738":{"position":[[9,2]]},"3334":{"position":[[11,2]]}}}],["配置",{"_index":58,"t":{"426":{"position":[[4,2]]},"2976":{"position":[[5,2]]},"2986":{"position":[[5,2]]},"2996":{"position":[[7,2]]},"3004":{"position":[[7,2]]},"3018":{"position":[[8,2]]},"3026":{"position":[[6,2]]},"3034":{"position":[[7,2]]},"3042":{"position":[[9,2]]},"3050":{"position":[[7,2]]},"3058":{"position":[[8,2]]}}}],["鉴",{"_index":24,"t":{"117":{"position":[[6,1]]}}}],["集成",{"_index":67,"t":{"537":{"position":[[12,2]]},"1504":{"position":[[9,2]]},"1968":{"position":[[14,2]]},"1982":{"position":[[14,2]]},"2005":{"position":[[14,2]]},"3206":{"position":[[14,2]]},"3247":{"position":[[15,2]]},"3348":{"position":[[8,2]]}}}],["静态",{"_index":152,"t":{"1996":{"position":[[17,2]]},"2019":{"position":[[7,2]]},"2066":{"position":[[9,2]]},"2076":{"position":[[25,2]]},"2088":{"position":[[7,2]]},"2101":{"position":[[6,2]]},"2130":{"position":[[18,2]]},"2145":{"position":[[5,2]]},"2156":{"position":[[17,2]]},"2163":{"position":[[18,2]]},"2168":{"position":[[8,2]]},"2172":{"position":[[14,2]]},"2180":{"position":[[11,2]]},"2189":{"position":[[8,2]]},"2202":{"position":[[8,2]]},"2205":{"position":[[14,2]]},"2258":{"position":[[7,2]]}}}],["验证",{"_index":226,"t":{"3050":{"position":[[3,2]]}}}],["高效率",{"_index":244,"t":{"3299":{"position":[[18,3]]}}}],["高级",{"_index":91,"t":{"849":{"position":[[5,2]]},"1219":{"position":[[9,2]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":6,"t":"简介","u":"/blog/global-usings","h":"#简介","p":4},{"i":8,"t":"必要配置","u":"/blog/global-usings","h":"#必要配置","p":4},{"i":10,"t":"基本使用","u":"/blog/global-usings","h":"#基本使用","p":4},{"i":12,"t":"默认全局 using","u":"/blog/global-usings","h":"#默认全局-using","p":4},{"i":16,"t":"文件下载","u":"/blog/fileupload-download","h":"#文件下载","p":14},{"i":18,"t":"文件上传","u":"/blog/fileupload-download","h":"#文件上传","p":14},{"i":22,"t":"HttpContext 重大调整","u":"/blog/httpcontext","h":"#httpcontext-重大调整","p":20},{"i":24,"t":"HttpContext 多种获取方式","u":"/blog/httpcontext","h":"#httpcontext-多种获取方式","p":20},{"i":25,"t":"在 ControllerBase 派生类中","u":"/blog/httpcontext","h":"#在-controllerbase-派生类中","p":20},{"i":27,"t":"通过注入 IHttpContextAccessor","u":"/blog/httpcontext","h":"#通过注入-ihttpcontextaccessor","p":20},{"i":29,"t":"通过 App.HttpContext","u":"/blog/httpcontext","h":"#通过-apphttpcontext","p":20},{"i":31,"t":"HttpContext 拓展方法","u":"/blog/httpcontext","h":"#httpcontext-拓展方法","p":20},{"i":33,"t":"获取当前请求的特性","u":"/blog/httpcontext","h":"#获取当前请求的特性","p":20},{"i":35,"t":"设置 Swagger 自动授权","u":"/blog/httpcontext","h":"#设置-swagger-自动授权","p":20},{"i":37,"t":"退出 Swagger 授权","u":"/blog/httpcontext","h":"#退出-swagger-授权","p":20},{"i":39,"t":"获取本地 IP 地址","u":"/blog/httpcontext","h":"#获取本地-ip-地址","p":20},{"i":41,"t":"获取客户端 IP 地址","u":"/blog/httpcontext","h":"#获取客户端-ip-地址","p":20},{"i":45,"t":"安装 .NET 6 Preview 6 SDK","u":"/blog/net6-preview7","h":"#安装-net-6-preview-6-sdk","p":43},{"i":47,"t":"旧项目升级","u":"/blog/net6-preview7","h":"#旧项目升级","p":43},{"i":49,"t":"新项目使用","u":"/blog/net6-preview7","h":"#新项目使用","p":43},{"i":50,"t":"升级 Visual Studio 2019","u":"/blog/net6-preview7","h":"#升级-visual-studio-2019","p":43},{"i":52,"t":"第一个例子","u":"/blog/net6-preview7","h":"#第一个例子","p":43},{"i":54,"t":"打开并启动项目","u":"/blog/net6-preview7","h":"#打开并启动项目","p":43},{"i":58,"t":"等不及尝鲜了","u":"/blog/net6-preview5","h":"#等不及尝鲜了","p":56},{"i":59,"t":"安装 .NET 6 Preview 5 SDK","u":"/blog/net6-preview5","h":"#安装-net-6-preview-5-sdk","p":56},{"i":61,"t":"升级 Visual Studio 2019","u":"/blog/net6-preview5","h":"#升级-visual-studio-2019","p":56},{"i":63,"t":"第一个例子","u":"/blog/net6-preview5","h":"#第一个例子","p":56},{"i":65,"t":"打开并启动项目","u":"/blog/net6-preview5","h":"#打开并启动项目","p":56},{"i":69,"t":"安装 .NET 6 Preview 6 SDK","u":"/blog/net6-preview6","h":"#安装-net-6-preview-6-sdk","p":67},{"i":71,"t":"旧项目升级","u":"/blog/net6-preview6","h":"#旧项目升级","p":67},{"i":73,"t":"新项目使用","u":"/blog/net6-preview6","h":"#新项目使用","p":67},{"i":74,"t":"升级 Visual Studio 2019","u":"/blog/net6-preview6","h":"#升级-visual-studio-2019","p":67},{"i":76,"t":"第一个例子","u":"/blog/net6-preview6","h":"#第一个例子","p":67},{"i":78,"t":"打开并启动项目","u":"/blog/net6-preview6","h":"#打开并启动项目","p":67},{"i":82,"t":"💐 序言","u":"/docs/","h":"#-序言","p":80},{"i":84,"t":"🍕 名字的由来","u":"/docs/","h":"#-名字的由来","p":80},{"i":86,"t":"🍟 文档地址","u":"/docs/","h":"#-文档地址","p":80},{"i":88,"t":"🌭 开源地址","u":"/docs/","h":"#-开源地址","p":80},{"i":90,"t":"🥥 框架拓展包","u":"/docs/","h":"#-框架拓展包","p":80},{"i":92,"t":"🍄 框架脚手架","u":"/docs/","h":"#-框架脚手架","p":80},{"i":94,"t":"🍎 框架特点","u":"/docs/","h":"#-框架特点","p":80},{"i":96,"t":"🥝 功能模块","u":"/docs/","h":"#-功能模块","p":80},{"i":97,"t":"🥐 框架依赖","u":"/docs/","h":"#-框架依赖","p":80},{"i":99,"t":"🥗 环境要求","u":"/docs/","h":"#-环境要求","p":80},{"i":101,"t":"🥪 支持平台","u":"/docs/","h":"#-支持平台","p":80},{"i":103,"t":"🍖 关于性能","u":"/docs/","h":"#-关于性能","p":80},{"i":105,"t":"🍻 贡献代码","u":"/docs/","h":"#-贡献代码","p":80},{"i":109,"t":"5.4.1 审计日志","u":"/docs/audit","h":"#541-审计日志","p":107},{"i":111,"t":"5.4.2 请求审计日志","u":"/docs/audit","h":"#542-请求审计日志","p":107},{"i":113,"t":"5.4.3 LoggingMonitor 审计日志","u":"/docs/audit","h":"#543-loggingmonitor-审计日志","p":107},{"i":115,"t":"5.4.4 反馈与建议","u":"/docs/audit","h":"#544-反馈与建议","p":107},{"i":118,"t":"15.1 什么是鉴权","u":"/docs/auth-control","h":"#151-什么是鉴权","p":117},{"i":120,"t":"15.1.1 常见的鉴权方式","u":"/docs/auth-control","h":"#1511-常见的鉴权方式","p":117},{"i":122,"t":"15.2 如何使用","u":"/docs/auth-control","h":"#152-如何使用","p":117},{"i":124,"t":"15.2.1 添加 Cookie 身份验证","u":"/docs/auth-control","h":"#1521-添加-cookie-身份验证","p":117},{"i":126,"t":"15.2.2 添加 Jwt 身份验证","u":"/docs/auth-control","h":"#1522-添加-jwt-身份验证","p":117},{"i":128,"t":"15.2.3 混合身份验证","u":"/docs/auth-control","h":"#1523-混合身份验证","p":117},{"i":130,"t":"15.3 高级自定义授权","u":"/docs/auth-control","h":"#153-高级自定义授权","p":117},{"i":132,"t":"15.3.1 AppAuthorizeHandler","u":"/docs/auth-control","h":"#1531-appauthorizehandler","p":117},{"i":134,"t":"15.3.2 完全自定义授权","u":"/docs/auth-control","h":"#1532-完全自定义授权","p":117},{"i":136,"t":"15.4 授权特性及全局授权","u":"/docs/auth-control","h":"#154-授权特性及全局授权","p":117},{"i":138,"t":"15.4.1 全局授权","u":"/docs/auth-control","h":"#1541-全局授权","p":117},{"i":140,"t":"15.4.2 匿名访问","u":"/docs/auth-control","h":"#1542-匿名访问","p":117},{"i":142,"t":"15.5 自动刷新 Token","u":"/docs/auth-control","h":"#155-自动刷新-token","p":117},{"i":143,"t":"15.5.1 后端登录部分","u":"/docs/auth-control","h":"#1551-后端登录部分","p":117},{"i":145,"t":"15.5.2 后端授权 Handler 部分","u":"/docs/auth-control","h":"#1552-后端授权-handler-部分","p":117},{"i":147,"t":"15.5.3 客户端部分","u":"/docs/auth-control","h":"#1553-客户端部分","p":117},{"i":149,"t":"15.6 获取 Jwt 存储的信息","u":"/docs/auth-control","h":"#156-获取-jwt-存储的信息","p":117},{"i":151,"t":"15.7 前端解密 JWT 信息","u":"/docs/auth-control","h":"#157-前端解密-jwt-信息","p":117},{"i":153,"t":"15.8 反馈与建议","u":"/docs/auth-control","h":"#158-反馈与建议","p":117},{"i":157,"t":"网名","u":"/docs/author","h":"#网名","p":155},{"i":159,"t":"专属头像","u":"/docs/author","h":"#专属头像","p":155},{"i":161,"t":"个性签名","u":"/docs/author","h":"#个性签名","p":155},{"i":163,"t":"奉献宣言","u":"/docs/author","h":"#奉献宣言","p":155},{"i":165,"t":"开源初衷","u":"/docs/author","h":"#开源初衷","p":155},{"i":167,"t":"兴趣爱好","u":"/docs/author","h":"#兴趣爱好","p":155},{"i":169,"t":"个人主页","u":"/docs/author","h":"#个人主页","p":155},{"i":171,"t":"技术能力","u":"/docs/author","h":"#技术能力","p":155},{"i":173,"t":"常用工具","u":"/docs/author","h":"#常用工具","p":155},{"i":175,"t":"领域兴趣","u":"/docs/author","h":"#领域兴趣","p":155},{"i":178,"t":"36.3.1 基准测试","u":"/docs/benchmark","h":"#3631-基准测试","p":177},{"i":180,"t":"36.3.2 基准测试特质及意义","u":"/docs/benchmark","h":"#3632-基准测试特质及意义","p":177},{"i":181,"t":"36.3.2.1 特质","u":"/docs/benchmark","h":"#36321-特质","p":177},{"i":183,"t":"36.3.2.2 意义","u":"/docs/benchmark","h":"#36322-意义","p":177},{"i":185,"t":"36.3.3 BenchmarkDotNet","u":"/docs/benchmark","h":"#3633-benchmarkdotnet","p":177},{"i":187,"t":"36.3.3.1 如何使用","u":"/docs/benchmark","h":"#36331-如何使用","p":177},{"i":189,"t":"36.3.3.2 查看结果","u":"/docs/benchmark","h":"#36332-查看结果","p":177},{"i":191,"t":"36.3.3.3 导出报表","u":"/docs/benchmark","h":"#36333-导出报表","p":177},{"i":193,"t":"36.3.4 反馈与建议","u":"/docs/benchmark","h":"#3634-反馈与建议","p":177},{"i":198,"t":"1.4.1 开源案例","u":"/docs/case","h":"#141-开源案例","p":197},{"i":201,"t":"3.1.1 Startup 类","u":"/docs/appstartup","h":"#311-startup-类","p":200},{"i":203,"t":"3.1.1.1 Startup 两个重要方法","u":"/docs/appstartup","h":"#3111-startup-两个重要方法","p":200},{"i":205,"t":"3.1.2 AppStartup","u":"/docs/appstartup","h":"#312-appstartup","p":200},{"i":207,"t":"3.1.2.1 如何配置 AppStartup","u":"/docs/appstartup","h":"#3121-如何配置-appstartup","p":200},{"i":209,"t":"3.1.2.2 AppStartup 约定","u":"/docs/appstartup","h":"#3122-appstartup-约定","p":200},{"i":211,"t":"3.1.2.3 AppStartup 配置顺序","u":"/docs/appstartup","h":"#3123-appstartup-配置顺序","p":200},{"i":213,"t":"3.1.2.4 AppStartup 方法调用顺序","u":"/docs/appstartup","h":"#3124-appstartup-方法调用顺序","p":200},{"i":215,"t":"3.1.3 Startup 配置最佳实践","u":"/docs/appstartup","h":"#313-startup-配置最佳实践","p":200},{"i":217,"t":"3.1.4 构造函数注入说明","u":"/docs/appstartup","h":"#314-构造函数注入说明","p":200},{"i":219,"t":"3.1.5 关于 appsettings.json","u":"/docs/appstartup","h":"#315-关于-appsettingsjson","p":200},{"i":221,"t":"3.1.6 反馈与建议","u":"/docs/appstartup","h":"#316-反馈与建议","p":200},{"i":224,"t":"14.1 什么是缓存","u":"/docs/cache","h":"#141-什么是缓存","p":223},{"i":226,"t":"14.2 缓存类型","u":"/docs/cache","h":"#142-缓存类型","p":223},{"i":228,"t":"14.3 内存缓存使用","u":"/docs/cache","h":"#143-内存缓存使用","p":223},{"i":230,"t":"14.3.1 基本使用","u":"/docs/cache","h":"#1431-基本使用","p":223},{"i":232,"t":"14.3.2 设置缓存选项","u":"/docs/cache","h":"#1432-设置缓存选项","p":223},{"i":234,"t":"14.3.3 手动设置缓存选项","u":"/docs/cache","h":"#1433-手动设置缓存选项","p":223},{"i":236,"t":"14.3.4 缓存依赖关系","u":"/docs/cache","h":"#1434-缓存依赖关系","p":223},{"i":238,"t":"14.4 分布式缓存","u":"/docs/cache","h":"#144-分布式缓存","p":223},{"i":240,"t":"14.4.1 使用条件","u":"/docs/cache","h":"#1441-使用条件","p":223},{"i":242,"t":"14.4.2 IDistributedCache","u":"/docs/cache","h":"#1442-idistributedcache","p":223},{"i":244,"t":"14.4.3 分布式内存缓存","u":"/docs/cache","h":"#1443-分布式内存缓存","p":223},{"i":246,"t":"14.4.4 分布式 SQL Server 缓存","u":"/docs/cache","h":"#1444-分布式-sql-server-缓存","p":223},{"i":248,"t":"14.4.5 分布式 Redis 缓存","u":"/docs/cache","h":"#1445-分布式-redis-缓存","p":223},{"i":250,"t":"14.4.6 分布式 NCache 缓存","u":"/docs/cache","h":"#1446-分布式-ncache-缓存","p":223},{"i":252,"t":"14.5 分布式缓存使用","u":"/docs/cache","h":"#145-分布式缓存使用","p":223},{"i":254,"t":"14.6 分布式缓存建议","u":"/docs/cache","h":"#146-分布式缓存建议","p":223},{"i":256,"t":"14.7 反馈与建议","u":"/docs/cache","h":"#147-反馈与建议","p":223},{"i":260,"t":"29.1 关于粘土对象","u":"/docs/clayobj","h":"#291-关于粘土对象","p":258},{"i":262,"t":"29.1.1 使用场景","u":"/docs/clayobj","h":"#2911-使用场景","p":258},{"i":264,"t":"29.1.2 关于性能","u":"/docs/clayobj","h":"#2912-关于性能","p":258},{"i":266,"t":"29.2 Clay 对象","u":"/docs/clayobj","h":"#292-clay-对象","p":258},{"i":268,"t":"29.3 如何使用","u":"/docs/clayobj","h":"#293-如何使用","p":258},{"i":269,"t":"29.3.1 创建一个对象","u":"/docs/clayobj","h":"#2931-创建一个对象","p":258},{"i":271,"t":"29.3.2 读取/获取属性","u":"/docs/clayobj","h":"#2932-读取获取属性","p":258},{"i":273,"t":"29.3.3 新增属性","u":"/docs/clayobj","h":"#2933-新增属性","p":258},{"i":275,"t":"29.3.4 更新属性值","u":"/docs/clayobj","h":"#2934-更新属性值","p":258},{"i":277,"t":"29.3.5 删除属性","u":"/docs/clayobj","h":"#2935-删除属性","p":258},{"i":279,"t":"29.3.6 判断属性是否存在","u":"/docs/clayobj","h":"#2936-判断属性是否存在","p":258},{"i":281,"t":"29.3.7 遍历对象","u":"/docs/clayobj","h":"#2937-遍历对象","p":258},{"i":283,"t":"29.3.8 转换成具体对象","u":"/docs/clayobj","h":"#2938-转换成具体对象","p":258},{"i":285,"t":"29.3.9 固化粘土","u":"/docs/clayobj","h":"#2939-固化粘土","p":258},{"i":287,"t":"29.3.10 输出 JSON","u":"/docs/clayobj","h":"#29310-输出-json","p":258},{"i":289,"t":"29.3.11 输出 XML 对象","u":"/docs/clayobj","h":"#29311-输出-xml-对象","p":258},{"i":291,"t":"29.3.12 关键字处理","u":"/docs/clayobj","h":"#29312-关键字处理","p":258},{"i":293,"t":"29.3.13 转换成字典类型","u":"/docs/clayobj","h":"#29313-转换成字典类型","p":258},{"i":295,"t":"29.4 反馈与建议","u":"/docs/clayobj","h":"#294-反馈与建议","p":258},{"i":299,"t":"5.6.1 历史背景","u":"/docs/clientapi","h":"#561-历史背景","p":297},{"i":301,"t":"5.6.2 如何解决?","u":"/docs/clientapi","h":"#562-如何解决","p":297},{"i":303,"t":"5.6.3 生成客户端请求代码","u":"/docs/clientapi","h":"#563-生成客户端请求代码","p":297},{"i":305,"t":"5.3.3.1 生成客户端代码","u":"/docs/clientapi","h":"#5331-生成客户端代码","p":297},{"i":307,"t":"5.6.3.2 Vue/React 配置","u":"/docs/clientapi","h":"#5632-vuereact-配置","p":297},{"i":309,"t":"5.6.3.3 Angular 配置","u":"/docs/clientapi","h":"#5633-angular-配置","p":297},{"i":311,"t":"5.6.4 初始配置","u":"/docs/clientapi","h":"#564-初始配置","p":297},{"i":313,"t":"5.6.4.1 Vue/React 配置","u":"/docs/clientapi","h":"#5641-vuereact-配置","p":297},{"i":315,"t":"5.6.4.2 Angular 配置","u":"/docs/clientapi","h":"#5642-angular-配置","p":297},{"i":317,"t":"5.6.5 基本使用","u":"/docs/clientapi","h":"#565-基本使用","p":297},{"i":318,"t":"5.6.5.1 Vue/React 中使用","u":"/docs/clientapi","h":"#5651-vuereact-中使用","p":297},{"i":320,"t":"5.6.5.2 Angular 中使用","u":"/docs/clientapi","h":"#5652-angular-中使用","p":297},{"i":322,"t":"5.6.6 重新生成代码","u":"/docs/clientapi","h":"#566-重新生成代码","p":297},{"i":324,"t":"5.6.7 Swagger 多分组生成","u":"/docs/clientapi","h":"#567-swagger-多分组生成","p":297},{"i":326,"t":"5.6.8 自定义生成前端方法名","u":"/docs/clientapi","h":"#568-自定义生成前端方法名","p":297},{"i":328,"t":"5.6.9 框架客户端工具库介绍","u":"/docs/clientapi","h":"#569-框架客户端工具库介绍","p":297},{"i":330,"t":"5.6.10 无法连接外网/内网情况/离线包","u":"/docs/clientapi","h":"#5610-无法连接外网内网情况离线包","p":297},{"i":332,"t":"5.6.11 反馈与建议","u":"/docs/clientapi","h":"#5611-反馈与建议","p":297},{"i":335,"t":"3.2.1 历史背景","u":"/docs/component","h":"#321-历史背景","p":334},{"i":337,"t":"3.2.2 先看一个例子","u":"/docs/component","h":"#322-先看一个例子","p":334},{"i":339,"t":"3.2.3 当然有解","u":"/docs/component","h":"#323-当然有解","p":334},{"i":341,"t":"3.2.4 IComponent","u":"/docs/component","h":"#324-icomponent","p":334},{"i":343,"t":"3.2.4.1 IServiceComponent","u":"/docs/component","h":"#3241-iservicecomponent","p":334},{"i":345,"t":"3.2.4.2 IApplicationComponent","u":"/docs/component","h":"#3242-iapplicationcomponent","p":334},{"i":347,"t":"3.2.4.3 IWebComponent","u":"/docs/component","h":"#3243-iwebcomponent","p":334},{"i":349,"t":"3.2.4.3 注册组件","u":"/docs/component","h":"#3243-注册组件","p":334},{"i":351,"t":"3.2.5 组件设计原则","u":"/docs/component","h":"#325-组件设计原则","p":334},{"i":352,"t":"3.2.5.1 职责单一性","u":"/docs/component","h":"#3251-职责单一性","p":334},{"i":354,"t":"3.2.5.2 约定大于配置","u":"/docs/component","h":"#3252-约定大于配置","p":334},{"i":356,"t":"3.2.6 [DependsOn] 详解","u":"/docs/component","h":"#326-dependson-详解","p":334},{"i":358,"t":"3.2.6.1 配置介绍","u":"/docs/component","h":"#3261-配置介绍","p":334},{"i":360,"t":"3.2.6.2 重复依赖问题","u":"/docs/component","h":"#3262-重复依赖问题","p":334},{"i":362,"t":"3.2.6.3 循环依赖问题","u":"/docs/component","h":"#3263-循环依赖问题","p":334},{"i":364,"t":"3.2.7 ComponentContext 详解","u":"/docs/component","h":"#327-componentcontext-详解","p":334},{"i":366,"t":"3.2.7.1 属性介绍","u":"/docs/component","h":"#3271-属性介绍","p":334},{"i":368,"t":"3.2.7.2 参数配置/获取","u":"/docs/component","h":"#3272-参数配置获取","p":334},{"i":370,"t":"3.2.8 实现 Startup.cs 模式","u":"/docs/component","h":"#328-实现-startupcs-模式","p":334},{"i":372,"t":"3.2.9 最佳实践?","u":"/docs/component","h":"#329-最佳实践","p":334},{"i":374,"t":"3.2.10 反馈与建议","u":"/docs/component","h":"#3210-反馈与建议","p":334},{"i":377,"t":"38.1 提交错误报告","u":"/docs/contribute","h":"#381-提交错误报告","p":376},{"i":379,"t":"38.2 安全问题处理","u":"/docs/contribute","h":"#382-安全问题处理","p":376},{"i":381,"t":"38.3 解决现有问题","u":"/docs/contribute","h":"#383-解决现有问题","p":376},{"i":383,"t":"38.4 如何提出新功能","u":"/docs/contribute","h":"#384-如何提出新功能","p":376},{"i":385,"t":"38.5 如何设置开发环境并运行测试","u":"/docs/contribute","h":"#385-如何设置开发环境并运行测试","p":376},{"i":387,"t":"38.6 变更日志填写规则","u":"/docs/contribute","h":"#386-变更日志填写规则","p":376},{"i":389,"t":"38.7 编码约定","u":"/docs/contribute","h":"#387-编码约定","p":376},{"i":391,"t":"38.8 分支处理约定","u":"/docs/contribute","h":"#388-分支处理约定","p":376},{"i":393,"t":"38.9 合并 PR 的形式","u":"/docs/contribute","h":"#389-合并-pr-的形式","p":376},{"i":396,"t":"2020 年","u":"/docs/course","h":"#2020-年","p":395},{"i":398,"t":"2021 年","u":"/docs/course","h":"#2021-年","p":395},{"i":400,"t":"2022 年","u":"/docs/course","h":"#2022-年","p":395},{"i":403,"t":"16.1 什么是跨域","u":"/docs/cors","h":"#161-什么是跨域","p":402},{"i":405,"t":"16.2 有跨域行为示例","u":"/docs/cors","h":"#162-有跨域行为示例","p":402},{"i":407,"t":"16.3 什么是 CORS","u":"/docs/cors","h":"#163-什么是-cors","p":402},{"i":409,"t":"16.4 如何使用","u":"/docs/cors","h":"#164-如何使用","p":402},{"i":410,"t":"16.4.1 添加 CORS 服务","u":"/docs/cors","h":"#1641-添加-cors-服务","p":402},{"i":412,"t":"16.4.2 配置允许跨域域名","u":"/docs/cors","h":"#1642-配置允许跨域域名","p":402},{"i":414,"t":"16.5 CorsAccessorSettings 配置","u":"/docs/cors","h":"#165-corsaccessorsettings-配置","p":402},{"i":416,"t":"16.6 前端不能读取响应头注意事项","u":"/docs/cors","h":"#166-前端不能读取响应头注意事项","p":402},{"i":418,"t":"16.7 使用 $.ajax 前端注意事项","u":"/docs/cors","h":"#167-使用-ajax-前端注意事项","p":402},{"i":420,"t":"16.8 禁用跨域","u":"/docs/cors","h":"#168-禁用跨域","p":402},{"i":422,"t":"16.9 SignalR 跨域问题","u":"/docs/cors","h":"#169-signalr-跨域问题","p":402},{"i":424,"t":"16.10 反馈与建议","u":"/docs/cors","h":"#1610-反馈与建议","p":402},{"i":428,"t":"4.1.1 什么是配置","u":"/docs/configuration","h":"#411-什么是配置","p":426},{"i":430,"t":"4.1.2 配置的使用","u":"/docs/configuration","h":"#412-配置的使用","p":426},{"i":432,"t":"4.1.2.1 配置 appsettings.json 信息","u":"/docs/configuration","h":"#4121-配置-appsettingsjson-信息","p":426},{"i":434,"t":"4.1.2.2 读取 appsettings.json 信息","u":"/docs/configuration","h":"#4122-读取-appsettingsjson-信息","p":426},{"i":436,"t":"4.1.2.3 如何选择读取方式","u":"/docs/configuration","h":"#4123-如何选择读取方式","p":426},{"i":438,"t":"4.1.2.4 读取配置并转换成特定类型","u":"/docs/configuration","h":"#4124-读取配置并转换成特定类型","p":426},{"i":440,"t":"4.1.3 路径符 查找节点","u":"/docs/configuration","h":"#413-路径符-查找节点","p":426},{"i":442,"t":"4.1.3.1 查找数组节点","u":"/docs/configuration","h":"#4131-查找数组节点","p":426},{"i":444,"t":"4.1.4 自定义配置文件","u":"/docs/configuration","h":"#414-自定义配置文件","p":426},{"i":446,"t":"4.1.4.1 读取 emailsetting.json 配置","u":"/docs/configuration","h":"#4141-读取-emailsettingjson-配置","p":426},{"i":448,"t":"4.1.4.2 排除特定配置文件","u":"/docs/configuration","h":"#4142-排除特定配置文件","p":426},{"i":450,"t":"4.1.5 不同环境读取","u":"/docs/configuration","h":"#415-不同环境读取","p":426},{"i":452,"t":"4.1.6 配置更改通知(热更新)","u":"/docs/configuration","h":"#416-配置更改通知热更新","p":426},{"i":454,"t":"4.1.7 手动添加配置文件","u":"/docs/configuration","h":"#417-手动添加配置文件","p":426},{"i":456,"t":"4.1.8 配置的优缺点","u":"/docs/configuration","h":"#418-配置的优缺点","p":426},{"i":458,"t":"4.1.9 配置使用场景","u":"/docs/configuration","h":"#419-配置使用场景","p":426},{"i":460,"t":"4.1.10 实现配置中心","u":"/docs/configuration","h":"#4110-实现配置中心","p":426},{"i":462,"t":"4.1.11 重载配置","u":"/docs/configuration","h":"#4111-重载配置","p":426},{"i":464,"t":"4.1.12 反馈与建议","u":"/docs/configuration","h":"#4112-反馈与建议","p":426},{"i":468,"t":"26.2.1 关于 Cron 表达式","u":"/docs/cron","h":"#2621-关于-cron-表达式","p":466},{"i":470,"t":"26.2.2 快速入门","u":"/docs/cron","h":"#2622-快速入门","p":466},{"i":471,"t":"26.2.2.1 常规格式","u":"/docs/cron","h":"#26221-常规格式","p":466},{"i":473,"t":"26.2.2.2 支持年份","u":"/docs/cron","h":"#26222-支持年份","p":466},{"i":475,"t":"26.2.2.3 支持秒数","u":"/docs/cron","h":"#26223-支持秒数","p":466},{"i":477,"t":"26.2.2.4 支持秒和年","u":"/docs/cron","h":"#26224-支持秒和年","p":466},{"i":479,"t":"26.2.2.5 Macro 标识符和静态属性","u":"/docs/cron","h":"#26225-macro-标识符和静态属性","p":466},{"i":481,"t":"26.2.3 Cron 各字段说明","u":"/docs/cron","h":"#2623-cron-各字段说明","p":466},{"i":483,"t":"26.2.4 CronStringFormat 格式化","u":"/docs/cron","h":"#2624-cronstringformat-格式化","p":466},{"i":485,"t":"26.2.5 在线生成 Cron 表达式","u":"/docs/cron","h":"#2625-在线生成-cron-表达式","p":466},{"i":487,"t":"26.2.6 实现简单定时任务","u":"/docs/cron","h":"#2626-实现简单定时任务","p":466},{"i":489,"t":"26.2.6.1 while + Task 方式","u":"/docs/cron","h":"#26261-while--task-方式","p":466},{"i":491,"t":"26.2.6.2 BackgroundService 方式","u":"/docs/cron","h":"#26262-backgroundservice-方式","p":466},{"i":493,"t":"26.2.7 Crontab 对象属性和方法","u":"/docs/cron","h":"#2627-crontab-对象属性和方法","p":466},{"i":495,"t":"26.2.8 反馈与建议","u":"/docs/cron","h":"#2628-反馈与建议","p":466},{"i":499,"t":"9.1.1 数据库上下文","u":"/docs/dbcontext","h":"#911-数据库上下文","p":497},{"i":501,"t":"9.1.2 AppDbContext","u":"/docs/dbcontext","h":"#912-appdbcontext","p":497},{"i":503,"t":"9.1.3 AppDbContext 和 DbContext 区别","u":"/docs/dbcontext","h":"#913-appdbcontext-和-dbcontext-区别","p":497},{"i":505,"t":"9.1.4 如何定义数据库上下文","u":"/docs/dbcontext","h":"#914-如何定义数据库上下文","p":497},{"i":507,"t":"9.1.4.1 创建默认数据库上下文","u":"/docs/dbcontext","h":"#9141-创建默认数据库上下文","p":497},{"i":509,"t":"9.1.4.2 创建其他数据库上下文","u":"/docs/dbcontext","h":"#9142-创建其他数据库上下文","p":497},{"i":511,"t":"9.1.5 配置连接字符串","u":"/docs/dbcontext","h":"#915-配置连接字符串","p":497},{"i":513,"t":"9.1.5.1 在注册数据库服务时配置","u":"/docs/dbcontext","h":"#9151-在注册数据库服务时配置","p":497},{"i":515,"t":"9.1.5.2 [AppDbContext] 方式配置","u":"/docs/dbcontext","h":"#9152-appdbcontext-方式配置","p":497},{"i":517,"t":"9.1.5.3 OnConfiguring 方式配置","u":"/docs/dbcontext","h":"#9153-onconfiguring-方式配置","p":497},{"i":519,"t":"9.1.5.4 各类数据库连接字符串配置示例","u":"/docs/dbcontext","h":"#9154-各类数据库连接字符串配置示例","p":497},{"i":521,"t":"9.1.6 数据库上下文定义位置","u":"/docs/dbcontext","h":"#916-数据库上下文定义位置","p":497},{"i":523,"t":"9.1.7 数据库上下文注册","u":"/docs/dbcontext","h":"#917-数据库上下文注册","p":497},{"i":525,"t":"9.1.8 自定义高级注册","u":"/docs/dbcontext","h":"#918-自定义高级注册","p":497},{"i":527,"t":"9.1.9 动态数据库上下文对象","u":"/docs/dbcontext","h":"#919-动态数据库上下文对象","p":497},{"i":529,"t":"9.1.10 在后台任务中使用","u":"/docs/dbcontext","h":"#9110-在后台任务中使用","p":497},{"i":531,"t":"9.1.11 AppDbContext 全局配置属性","u":"/docs/dbcontext","h":"#9111-appdbcontext-全局配置属性","p":497},{"i":533,"t":"9.1.12 配置实体 懒加载","u":"/docs/dbcontext","h":"#9112-配置实体-懒加载","p":497},{"i":535,"t":"9.1.13 反馈与建议","u":"/docs/dbcontext","h":"#9113-反馈与建议","p":497},{"i":539,"t":"10.2.1 关于 Dapper","u":"/docs/dapper","h":"#1021-关于-dapper","p":537},{"i":541,"t":"10.2.2 如何集成","u":"/docs/dapper","h":"#1022-如何集成","p":537},{"i":543,"t":"10.2.2.1 注册 Dapper 服务","u":"/docs/dapper","h":"#10221-注册-dapper-服务","p":537},{"i":545,"t":"10.2.2.2 安装对应的数据库提供器","u":"/docs/dapper","h":"#10222-安装对应的数据库提供器","p":537},{"i":547,"t":"10.2.3 基本使用","u":"/docs/dapper","h":"#1023-基本使用","p":537},{"i":549,"t":"10.2.3.1 sql 操作","u":"/docs/dapper","h":"#10231-sql-操作","p":537},{"i":551,"t":"10.2.3.2 操作","u":"/docs/dapper","h":"#10232-tentity-操作","p":537},{"i":553,"t":"10.2.4 高级使用","u":"/docs/dapper","h":"#1024-高级使用","p":537},{"i":555,"t":"10.2.4.1 查询一对一","u":"/docs/dapper","h":"#10241-查询一对一","p":537},{"i":557,"t":"10.2.4.2 查询多个结果","u":"/docs/dapper","h":"#10242-查询多个结果","p":537},{"i":559,"t":"10.2.4.3 更多操作","u":"/docs/dapper","h":"#10243-更多操作","p":537},{"i":561,"t":"10.2.5 反馈与建议","u":"/docs/dapper","h":"#1025-反馈与建议","p":537},{"i":564,"t":"9.22.1 审计日志","u":"/docs/dbcontext-audit","h":"#9221-审计日志","p":563},{"i":566,"t":"9.22.2 关于 SaveChanges 事件","u":"/docs/dbcontext-audit","h":"#9222-关于-savechanges-事件","p":563},{"i":568,"t":"9.22.3 如何实现","u":"/docs/dbcontext-audit","h":"#9223-如何实现","p":563},{"i":569,"t":"9.22.3.1 数据库审计日志","u":"/docs/dbcontext-audit","h":"#92231-数据库审计日志","p":563},{"i":571,"t":"9.22.3.2 执行 sql 审计日志","u":"/docs/dbcontext-audit","h":"#92232-执行-sql-审计日志","p":563},{"i":573,"t":"9.22.3.3 请求审计日志","u":"/docs/dbcontext-audit","h":"#92233-请求审计日志","p":563},{"i":575,"t":"9.22.4 反馈与建议","u":"/docs/dbcontext-audit","h":"#9224-反馈与建议","p":563},{"i":578,"t":"8.1 关于数据校验","u":"/docs/data-validation","h":"#81-关于数据校验","p":577},{"i":580,"t":"8.2 数据校验的好处","u":"/docs/data-validation","h":"#82-数据校验的好处","p":577},{"i":582,"t":"8.3 数据校验方式","u":"/docs/data-validation","h":"#83-数据校验方式","p":577},{"i":584,"t":"8.3.1 传统方式","u":"/docs/data-validation","h":"#831-传统方式","p":577},{"i":586,"t":"8.3.2 Mvc 特性方式","u":"/docs/data-validation","h":"#832-mvc-特性方式","p":577},{"i":588,"t":"8.4 DataValidation 验证 🤗","u":"/docs/data-validation","h":"#84-datavalidation-验证-","p":577},{"i":590,"t":"8.4.1 DataValidation 优点","u":"/docs/data-validation","h":"#841-datavalidation-优点","p":577},{"i":592,"t":"8.5 DataValidation 使用","u":"/docs/data-validation","h":"#85-datavalidation-使用","p":577},{"i":594,"t":"8.5.1 注册验证服务","u":"/docs/data-validation","h":"#851-注册验证服务","p":577},{"i":596,"t":"8.5.2 兼容 Mvc 特性验证","u":"/docs/data-validation","h":"#852-兼容-mvc-特性验证","p":577},{"i":598,"t":"8.5.3 兼容 Mvc 复杂验证","u":"/docs/data-validation","h":"#853-兼容-mvc-复杂验证","p":577},{"i":600,"t":"8.6 手动验证","u":"/docs/data-validation","h":"#86-手动验证","p":577},{"i":601,"t":"8.6.1 验证模型","u":"/docs/data-validation","h":"#861-验证模型","p":577},{"i":603,"t":"8.6.2 TryValidate 和 Validate","u":"/docs/data-validation","h":"#862-tryvalidate-和-validate","p":577},{"i":605,"t":"8.6.3 ValidationTypes 常见验证","u":"/docs/data-validation","h":"#863-validationtypes-常见验证","p":577},{"i":607,"t":"8.6.4 [DataValidation] 特性","u":"/docs/data-validation","h":"#864-datavalidation-特性","p":577},{"i":609,"t":"8.6.5 [ModelBinder] 特性","u":"/docs/data-validation","h":"#865-modelbinder-特性","p":577},{"i":611,"t":"8.7 [NonValidation] 跳过验证","u":"/docs/data-validation","h":"#87-nonvalidation-跳过验证","p":577},{"i":613,"t":"8.8 高级自定义操作","u":"/docs/data-validation","h":"#88-高级自定义操作","p":577},{"i":614,"t":"8.8.1 自定义 ValidationTypes 类型","u":"/docs/data-validation","h":"#881-自定义-validationtypes-类型","p":577},{"i":616,"t":"8.8.2 自定义 ValidationTypes 失败消息","u":"/docs/data-validation","h":"#882-自定义-validationtypes-失败消息","p":577},{"i":618,"t":"8.9 模型验证范围","u":"/docs/data-validation","h":"#89-模型验证范围","p":577},{"i":620,"t":"8.9.1 全局验证","u":"/docs/data-validation","h":"#891-全局验证","p":577},{"i":622,"t":"8.9.2 [NonValidation] 跳过验证","u":"/docs/data-validation","h":"#892-nonvalidation-跳过验证","p":577},{"i":624,"t":"8.9.3 [TypeFilter(typeof(DataValidationFilter))] 局部验证","u":"/docs/data-validation","h":"#893-typefiltertypeofdatavalidationfilter-局部验证","p":577},{"i":626,"t":"8.9.4 [ApiController] 控制器范围验证","u":"/docs/data-validation","h":"#894-apicontroller-控制器范围验证","p":577},{"i":628,"t":"8.10 MiniProfiler 查看","u":"/docs/data-validation","h":"#810-miniprofiler-查看","p":577},{"i":630,"t":"8.11 多语言支持","u":"/docs/data-validation","h":"#811-多语言支持","p":577},{"i":632,"t":"8.12 集成 FluentValidation 第三方校验","u":"/docs/data-validation","h":"#812-集成-fluentvalidation-第三方校验","p":577},{"i":634,"t":"8.12.1 安装 FluentValidation.AspNetCore 拓展包","u":"/docs/data-validation","h":"#8121-安装-fluentvalidationaspnetcore-拓展包","p":577},{"i":636,"t":"8.12.2 在 Startup.cs 中注册","u":"/docs/data-validation","h":"#8122-在-startupcs-中注册","p":577},{"i":638,"t":"8.12.3 使用例子","u":"/docs/data-validation","h":"#8123-使用例子","p":577},{"i":640,"t":"8.13 反馈与建议","u":"/docs/data-validation","h":"#813-反馈与建议","p":577},{"i":644,"t":"9.5.1 新增一条,无返回值","u":"/docs/dbcontext-add","h":"#951-新增一条无返回值","p":642},{"i":646,"t":"9.5.2 新增一条,返回最新数据","u":"/docs/dbcontext-add","h":"#952-新增一条返回最新数据","p":642},{"i":648,"t":"9.5.3 新增多条(不立即提交)","u":"/docs/dbcontext-add","h":"#953-新增多条不立即提交","p":642},{"i":650,"t":"9.5.4 新增多条(立即提交)","u":"/docs/dbcontext-add","h":"#954-新增多条立即提交","p":642},{"i":652,"t":"9.5.5 忽略空值新增","u":"/docs/dbcontext-add","h":"#955-忽略空值新增","p":642},{"i":654,"t":"9.5.6 表带触发器异常解决","u":"/docs/dbcontext-add","h":"#956-表带触发器异常解决","p":642},{"i":656,"t":"9.5.7 反馈与建议","u":"/docs/dbcontext-add","h":"#957-反馈与建议","p":642},{"i":660,"t":"9.7.1 新增或更新(不立即提交)","u":"/docs/dbcontext-add-or-update","h":"#971-新增或更新不立即提交","p":658},{"i":662,"t":"9.7.2 新增或更新(立即提交)","u":"/docs/dbcontext-add-or-update","h":"#972-新增或更新立即提交","p":658},{"i":664,"t":"9.7.3 新增或更新部分列(不立即提交)","u":"/docs/dbcontext-add-or-update","h":"#973-新增或更新部分列不立即提交","p":658},{"i":666,"t":"9.7.4 新增或更新部分列(立即提交)","u":"/docs/dbcontext-add-or-update","h":"#974-新增或更新部分列立即提交","p":658},{"i":668,"t":"9.7.5 新增或更新排除特定列(不立即提交)","u":"/docs/dbcontext-add-or-update","h":"#975-新增或更新排除特定列不立即提交","p":658},{"i":670,"t":"9.7.6 新增或更新排除特定列(立即提交)","u":"/docs/dbcontext-add-or-update","h":"#976-新增或更新排除特定列立即提交","p":658},{"i":672,"t":"9.7.7 反馈与建议","u":"/docs/dbcontext-add-or-update","h":"#977-反馈与建议","p":658},{"i":676,"t":"9.19.1 数据库开发方式","u":"/docs/dbcontext-db-first","h":"#9191-数据库开发方式","p":674},{"i":678,"t":"9.19.2 操作指南","u":"/docs/dbcontext-db-first","h":"#9192-操作指南","p":674},{"i":680,"t":"9.19.2.1 打开 程序包管理控制台","u":"/docs/dbcontext-db-first","h":"#91921-打开-程序包管理控制台","p":674},{"i":682,"t":"9.19.2.2 切换默认项目","u":"/docs/dbcontext-db-first","h":"#91922-切换默认项目","p":674},{"i":684,"t":"9.19.2.3 输入 cli.ps1 命令","u":"/docs/dbcontext-db-first","h":"#91923-输入-clips1-命令","p":674},{"i":686,"t":"9.19.3 界面操作模式","u":"/docs/dbcontext-db-first","h":"#9193-界面操作模式","p":674},{"i":687,"t":"9.19.3.1 启动界面操作","u":"/docs/dbcontext-db-first","h":"#91931-启动界面操作","p":674},{"i":689,"t":"9.19.3.2 加载数据库表","u":"/docs/dbcontext-db-first","h":"#91932-加载数据库表","p":674},{"i":691,"t":"9.19.3.3 选择表或视图生成","u":"/docs/dbcontext-db-first","h":"#91933-选择表或视图生成","p":674},{"i":693,"t":"9.19.3.4 选择保存目录","u":"/docs/dbcontext-db-first","h":"#91934-选择保存目录","p":674},{"i":695,"t":"9.19.3.5 生成最终实体代码","u":"/docs/dbcontext-db-first","h":"#91935-生成最终实体代码","p":674},{"i":697,"t":"9.19.4 命令参数配置","u":"/docs/dbcontext-db-first","h":"#9194-命令参数配置","p":674},{"i":699,"t":"9.19.5 反馈与建议","u":"/docs/dbcontext-db-first","h":"#9195-反馈与建议","p":674},{"i":703,"t":"9.20.1 数据库开发方式","u":"/docs/dbcontext-code-first","h":"#9201-数据库开发方式","p":701},{"i":705,"t":"9.20.2 操作指南","u":"/docs/dbcontext-code-first","h":"#9202-操作指南","p":701},{"i":707,"t":"9.20.2.1 创建实体模型 Person","u":"/docs/dbcontext-code-first","h":"#92021-创建实体模型-person","p":701},{"i":709,"t":"9.20.2.2 打开 程序包管理控制台","u":"/docs/dbcontext-code-first","h":"#92022-打开-程序包管理控制台","p":701},{"i":710,"t":"9.20.2.3 切换默认项目","u":"/docs/dbcontext-code-first","h":"#92023-切换默认项目","p":701},{"i":712,"t":"9.20.2.4 创建模型版本","u":"/docs/dbcontext-code-first","h":"#92024-创建模型版本","p":701},{"i":714,"t":"9.20.2.5 更新到数据库","u":"/docs/dbcontext-code-first","h":"#92025-更新到数据库","p":701},{"i":716,"t":"9.20.3 更新模型","u":"/docs/dbcontext-code-first","h":"#9203-更新模型","p":701},{"i":718,"t":"9.20.4 导出 Sql","u":"/docs/dbcontext-code-first","h":"#9204-导出-sql","p":701},{"i":720,"t":"9.20.5 VS Code/Rider/任何IDE/操作系统 方式","u":"/docs/dbcontext-code-first","h":"#9205-vs-coderider任何ide操作系统-方式","p":701},{"i":721,"t":"9.20.5.1 安装 dotnet ef","u":"/docs/dbcontext-code-first","h":"#92051-安装-dotnet-ef","p":701},{"i":723,"t":"9.20.5.2 cd 目录","u":"/docs/dbcontext-code-first","h":"#92052-cd-目录","p":701},{"i":725,"t":"9.20.5.3 执行命令","u":"/docs/dbcontext-code-first","h":"#92053-执行命令","p":701},{"i":727,"t":"9.20.6 应用启动时自动生成数据库","u":"/docs/dbcontext-code-first","h":"#9206-应用启动时自动生成数据库","p":701},{"i":729,"t":"9.20.6.1 对已经生成 Migrations 文件情况","u":"/docs/dbcontext-code-first","h":"#92061-对已经生成-migrations-文件情况","p":701},{"i":731,"t":"9.20.6.2 如果没有生成过 Migrations 文件情况","u":"/docs/dbcontext-code-first","h":"#92062-如果没有生成过-migrations-文件情况","p":701},{"i":733,"t":"9.20.7 MySql.EntityFrameworkCore 在 .NET 6.0.8+ 问题","u":"/docs/dbcontext-code-first","h":"#9207-mysqlentityframeworkcore-在-net-608-问题","p":701},{"i":735,"t":"9.20.8 反馈与建议","u":"/docs/dbcontext-code-first","h":"#9208-反馈与建议","p":701},{"i":738,"t":"9.25.1 实体数据监听器","u":"/docs/dbcontext-entitytrigger","h":"#9251-实体数据监听器","p":737},{"i":740,"t":"9.25.2 有何作用","u":"/docs/dbcontext-entitytrigger","h":"#9252-有何作用","p":737},{"i":742,"t":"9.25.3 如何使用","u":"/docs/dbcontext-entitytrigger","h":"#9253-如何使用","p":737},{"i":744,"t":"9.25.3.1 启用数据监听","u":"/docs/dbcontext-entitytrigger","h":"#92531-启用数据监听","p":737},{"i":746,"t":"9.25.3.2 监听特定实体数据","u":"/docs/dbcontext-entitytrigger","h":"#92532-监听特定实体数据","p":737},{"i":748,"t":"9.25.4 IEntityChangedListener 定义","u":"/docs/dbcontext-entitytrigger","h":"#9254-ientitychangedlistener-定义","p":737},{"i":750,"t":"9.25.5 [SuppressChangedListener] 跳过监听","u":"/docs/dbcontext-entitytrigger","h":"#9255-suppresschangedlistener-跳过监听","p":737},{"i":752,"t":"9.25.6 反馈与建议","u":"/docs/dbcontext-entitytrigger","h":"#9256-反馈与建议","p":737},{"i":755,"t":"9.9.1 关于批量操作","u":"/docs/dbcontext-batch","h":"#991-关于批量操作","p":754},{"i":757,"t":"9.9.2 Zack.EFCore.Batch 使用","u":"/docs/dbcontext-batch","h":"#992-zackefcorebatch-使用","p":754},{"i":758,"t":"9.9.2.1 安装对应的数据库 Nuget 包","u":"/docs/dbcontext-batch","h":"#9921-安装对应的数据库-nuget-包","p":754},{"i":760,"t":"9.9.2.2 注册并配置服务","u":"/docs/dbcontext-batch","h":"#9922-注册并配置服务","p":754},{"i":762,"t":"9.9.2.3 基本使用","u":"/docs/dbcontext-batch","h":"#9923-基本使用","p":754},{"i":764,"t":"9.9.3 EFCore.BulkExtensions 使用","u":"/docs/dbcontext-batch","h":"#993-efcorebulkextensions-使用","p":754},{"i":766,"t":"9.9.3.1 常见批量操作","u":"/docs/dbcontext-batch","h":"#9931-常见批量操作","p":754},{"i":768,"t":"9.9.3.2 查询后批量操作","u":"/docs/dbcontext-batch","h":"#9932-查询后批量操作","p":754},{"i":770,"t":"9.9.3.3 批量操作性能","u":"/docs/dbcontext-batch","h":"#9933-批量操作性能","p":754},{"i":772,"t":"9.9.4 EFCore 7 内置批量操作","u":"/docs/dbcontext-batch","h":"#994-efcore-7-内置批量操作","p":754},{"i":774,"t":"9.9.5 反馈与建议","u":"/docs/dbcontext-batch","h":"#995-反馈与建议","p":754},{"i":778,"t":"9.8.1 删除一个实体(不立即提交)","u":"/docs/dbcontext-delete","h":"#981-删除一个实体不立即提交","p":776},{"i":780,"t":"9.8.2 删除一个实体(立即提交)","u":"/docs/dbcontext-delete","h":"#982-删除一个实体立即提交","p":776},{"i":782,"t":"9.8.3 根据主键删除记录(不立即提交)","u":"/docs/dbcontext-delete","h":"#983-根据主键删除记录不立即提交","p":776},{"i":784,"t":"9.8.4 根据主键删除记录(立即提交)","u":"/docs/dbcontext-delete","h":"#984-根据主键删除记录立即提交","p":776},{"i":786,"t":"9.8.5 数据存在才根据主键删除(不立即提交)","u":"/docs/dbcontext-delete","h":"#985-数据存在才根据主键删除不立即提交","p":776},{"i":788,"t":"9.8.6 数据存在才根据主键删除(立即提交)","u":"/docs/dbcontext-delete","h":"#986-数据存在才根据主键删除立即提交","p":776},{"i":790,"t":"9.8.7 假删除/软删除","u":"/docs/dbcontext-delete","h":"#987-假删除软删除","p":776},{"i":792,"t":"9.8.7.1 添加 [FakeDelete] 标记","u":"/docs/dbcontext-delete","h":"#9871-添加-fakedelete-标记","p":776},{"i":794,"t":"9.8.7.2 假删除使用","u":"/docs/dbcontext-delete","h":"#9872-假删除使用","p":776},{"i":796,"t":"9.8.8 反馈与建议","u":"/docs/dbcontext-delete","h":"#988-反馈与建议","p":776},{"i":800,"t":"9.14.1 数据库函数","u":"/docs/dbcontext-function","h":"#9141-数据库函数","p":798},{"i":802,"t":"9.14.1.1 支持标量函数的数据库","u":"/docs/dbcontext-function","h":"#91411-支持标量函数的数据库","p":798},{"i":804,"t":"9.14.1.2 支持表值函数的数据库","u":"/docs/dbcontext-function","h":"#91412-支持表值函数的数据库","p":798},{"i":806,"t":"9.14.2 数据库函数类型","u":"/docs/dbcontext-function","h":"#9142-数据库函数类型","p":798},{"i":808,"t":"9.14.3 函数的使用","u":"/docs/dbcontext-function","h":"#9143-函数的使用","p":798},{"i":809,"t":"9.14.3.1 标量函数返回 object","u":"/docs/dbcontext-function","h":"#91431-标量函数返回-object","p":798},{"i":811,"t":"9.14.3.2 标量函数返回 T","u":"/docs/dbcontext-function","h":"#91432-标量函数返回-t","p":798},{"i":813,"t":"9.14.3.3 表值函数返回 DataTable","u":"/docs/dbcontext-function","h":"#91433-表值函数返回-datatable","p":798},{"i":815,"t":"9.14.3.4 表值函数返回 List","u":"/docs/dbcontext-function","h":"#91434-表值函数返回-listt","p":798},{"i":817,"t":"9.14.4 在 Linq 中使用 标量函数","u":"/docs/dbcontext-function","h":"#9144-在-linq-中使用-标量函数","p":798},{"i":819,"t":"9.14.4.1 创建标量函数","u":"/docs/dbcontext-function","h":"#91441-创建标量函数","p":798},{"i":821,"t":"9.14.4.2 创建静态类和静态方法","u":"/docs/dbcontext-function","h":"#91442-创建静态类和静态方法","p":798},{"i":823,"t":"9.14.4.3 在 Linq 中使用","u":"/docs/dbcontext-function","h":"#91443-在-linq-中使用","p":798},{"i":825,"t":"9.14.5 在 Linq 中使用 表值函数","u":"/docs/dbcontext-function","h":"#9145-在-linq-中使用-表值函数","p":798},{"i":827,"t":"9.14.5.1 创建表值函数","u":"/docs/dbcontext-function","h":"#91451-创建表值函数","p":798},{"i":829,"t":"9.14.5.2 创建表值函数模型","u":"/docs/dbcontext-function","h":"#91452-创建表值函数模型","p":798},{"i":831,"t":"9.14.5.3 表值函数配置","u":"/docs/dbcontext-function","h":"#91453-表值函数配置","p":798},{"i":833,"t":"9.14.5.4 在 Linq 中使用","u":"/docs/dbcontext-function","h":"#91454-在-linq-中使用","p":798},{"i":835,"t":"9.14.6 在 EF Core 内置函数","u":"/docs/dbcontext-function","h":"#9146-在-ef-core-内置函数","p":798},{"i":837,"t":"9.14.7 反馈与建议","u":"/docs/dbcontext-function","h":"#9147-反馈与建议","p":798},{"i":840,"t":"9.23.1 查询筛选器","u":"/docs/dbcontext-filter","h":"#9231-查询筛选器","p":839},{"i":842,"t":"9.23.2 多种筛选器配置","u":"/docs/dbcontext-filter","h":"#9232-多种筛选器配置","p":839},{"i":843,"t":"9.23.2.1 单表筛选器","u":"/docs/dbcontext-filter","h":"#92321-单表筛选器","p":839},{"i":845,"t":"9.23.2.2 全局筛选器","u":"/docs/dbcontext-filter","h":"#92322-全局筛选器","p":839},{"i":847,"t":"9.23.3 反馈与建议","u":"/docs/dbcontext-filter","h":"#9233-反馈与建议","p":839},{"i":850,"t":"9.11.1 关联数据模型","u":"/docs/dbcontext-hight-query","h":"#9111-关联数据模型","p":849},{"i":852,"t":"9.11.2 一对一查询","u":"/docs/dbcontext-hight-query","h":"#9112-一对一查询","p":849},{"i":854,"t":"9.11.3 一对多查询","u":"/docs/dbcontext-hight-query","h":"#9113-一对多查询","p":849},{"i":856,"t":"9.11.4 多对多查询","u":"/docs/dbcontext-hight-query","h":"#9114-多对多查询","p":849},{"i":858,"t":"9.11.5 联表查询","u":"/docs/dbcontext-hight-query","h":"#9115-联表查询","p":849},{"i":859,"t":"9.11.5.1 内连接 Inner Join","u":"/docs/dbcontext-hight-query","h":"#91151-内连接-inner-join","p":849},{"i":861,"t":"9.11.5.2 左连接 Left Join","u":"/docs/dbcontext-hight-query","h":"#91152-左连接-left-join","p":849},{"i":863,"t":"9.11.5.3 右连接 Right Join","u":"/docs/dbcontext-hight-query","h":"#91153-右连接-right-join","p":849},{"i":865,"t":"9.11.6 分组查询","u":"/docs/dbcontext-hight-query","h":"#9116-分组查询","p":849},{"i":867,"t":"9.11.7 合并结果集","u":"/docs/dbcontext-hight-query","h":"#9117-合并结果集","p":849},{"i":869,"t":"9.11.8 查询排序","u":"/docs/dbcontext-hight-query","h":"#9118-查询排序","p":849},{"i":870,"t":"9.11.8.1 正序","u":"/docs/dbcontext-hight-query","h":"#91181-正序","p":849},{"i":872,"t":"9.11.8.2 倒序","u":"/docs/dbcontext-hight-query","h":"#91182-倒序","p":849},{"i":874,"t":"9.11.8.3 混合倒序","u":"/docs/dbcontext-hight-query","h":"#91183-混合倒序","p":849},{"i":876,"t":"9.11.9 递归查询","u":"/docs/dbcontext-hight-query","h":"#9119-递归查询","p":849},{"i":878,"t":"9.11.10 动态 Sql 查询","u":"/docs/dbcontext-hight-query","h":"#91110-动态-sql-查询","p":849},{"i":880,"t":"9.11.10.1 动态 Sql","u":"/docs/dbcontext-hight-query","h":"#911101-动态-sql","p":849},{"i":882,"t":"9.11.10.2 动态 Lambda","u":"/docs/dbcontext-hight-query","h":"#911102-动态-lambda","p":849},{"i":884,"t":"9.11.11 时态查询","u":"/docs/dbcontext-hight-query","h":"#91111-时态查询","p":849},{"i":886,"t":"9.11.12 性能优化","u":"/docs/dbcontext-hight-query","h":"#91112-性能优化","p":849},{"i":888,"t":"9.11.13 分表查询小例子","u":"/docs/dbcontext-hight-query","h":"#91113-分表查询小例子","p":849},{"i":890,"t":"9.11.14 反馈与建议","u":"/docs/dbcontext-hight-query","h":"#91114-反馈与建议","p":849},{"i":894,"t":"9.18.1 Furion 支持数据库提供器","u":"/docs/dbcontext-multi-database","h":"#9181-furion-支持数据库提供器","p":892},{"i":896,"t":"9.18.1.1 数据库提供器对应包","u":"/docs/dbcontext-multi-database","h":"#91811-数据库提供器对应包","p":892},{"i":898,"t":"9.18.2 多数据库服务注册","u":"/docs/dbcontext-multi-database","h":"#9182-多数据库服务注册","p":892},{"i":900,"t":"9.18.3 各类数据库连接字符串配置示例","u":"/docs/dbcontext-multi-database","h":"#9183-各类数据库连接字符串配置示例","p":892},{"i":902,"t":"9.18.4 多数据库使用方式","u":"/docs/dbcontext-multi-database","h":"#9184-多数据库使用方式","p":892},{"i":904,"t":"9.18.4.1 实体仓储方式","u":"/docs/dbcontext-multi-database","h":"#91841-实体仓储方式","p":892},{"i":906,"t":"9.18.4.2 非泛型仓储方式","u":"/docs/dbcontext-multi-database","h":"#91842-非泛型仓储方式","p":892},{"i":908,"t":"9.18.4.3 Sql 仓储方式","u":"/docs/dbcontext-multi-database","h":"#91843-sql-仓储方式","p":892},{"i":910,"t":"9.18.4.4 实体定义方式","u":"/docs/dbcontext-multi-database","h":"#91844-实体定义方式","p":892},{"i":912,"t":"9.18.4.5 Linq 函数方式","u":"/docs/dbcontext-multi-database","h":"#91845-linq-函数方式","p":892},{"i":914,"t":"9.18.5 SqlServer 低版本支持动态配置","u":"/docs/dbcontext-multi-database","h":"#9185-sqlserver-低版本支持动态配置","p":892},{"i":916,"t":"9.18.6 MySql 时区问题/少 8 小时问题","u":"/docs/dbcontext-multi-database","h":"#9186-mysql-时区问题少-8-小时问题","p":892},{"i":918,"t":"9.18.7 snake_case 风格表名和字段","u":"/docs/dbcontext-multi-database","h":"#9187-snake_case-风格表名和字段","p":892},{"i":920,"t":"9.18.8 反馈与建议","u":"/docs/dbcontext-multi-database","h":"#9188-反馈与建议","p":892},{"i":923,"t":"9.24.1 数据库拦截器","u":"/docs/dbcontext-Interceptor","h":"#9241-数据库拦截器","p":922},{"i":925,"t":"9.24.2 支持拦截类型","u":"/docs/dbcontext-Interceptor","h":"#9242-支持拦截类型","p":922},{"i":926,"t":"9.24.2.1 DbConnectionInterceptor","u":"/docs/dbcontext-Interceptor","h":"#92421-dbconnectioninterceptor","p":922},{"i":928,"t":"9.24.2.2 DbCommandInterceptor","u":"/docs/dbcontext-Interceptor","h":"#92422-dbcommandinterceptor","p":922},{"i":930,"t":"9.24.2.3 SaveChangesInterceptor","u":"/docs/dbcontext-Interceptor","h":"#92423-savechangesinterceptor","p":922},{"i":932,"t":"9.24.2.4 SavedChangesEvent 拦截","u":"/docs/dbcontext-Interceptor","h":"#92424-savedchangesevent-拦截","p":922},{"i":934,"t":"9.24.3 注册自定义筛选器","u":"/docs/dbcontext-Interceptor","h":"#9243-注册自定义筛选器","p":922},{"i":936,"t":"9.24.4 反馈与建议","u":"/docs/dbcontext-Interceptor","h":"#9244-反馈与建议","p":922},{"i":940,"t":"9.2.1 数据库上下文定位器","u":"/docs/dbcontext-locator","h":"#921-数据库上下文定位器","p":938},{"i":942,"t":"9.2.2 数据库上下文定位器作用","u":"/docs/dbcontext-locator","h":"#922-数据库上下文定位器作用","p":938},{"i":944,"t":"9.2.3 如何定义数据库上下文定位器","u":"/docs/dbcontext-locator","h":"#923-如何定义数据库上下文定位器","p":938},{"i":946,"t":"9.2.4 默认数据库上下文定位器","u":"/docs/dbcontext-locator","h":"#924-默认数据库上下文定位器","p":938},{"i":948,"t":"9.2.5 数据库上下文定位器支持对象","u":"/docs/dbcontext-locator","h":"#925-数据库上下文定位器支持对象","p":938},{"i":950,"t":"9.2.6 反馈与建议","u":"/docs/dbcontext-locator","h":"#926-反馈与建议","p":938},{"i":953,"t":"9.10.1 根据主键查询一条","u":"/docs/dbcontext-query","h":"#9101-根据主键查询一条","p":952},{"i":955,"t":"9.10.2 根据条件查询一条","u":"/docs/dbcontext-query","h":"#9102-根据条件查询一条","p":952},{"i":957,"t":"9.10.3 查询所有数据","u":"/docs/dbcontext-query","h":"#9103-查询所有数据","p":952},{"i":959,"t":"9.10.4 根据条件查询所有数据","u":"/docs/dbcontext-query","h":"#9104-根据条件查询所有数据","p":952},{"i":961,"t":"9.10.5 分页查询","u":"/docs/dbcontext-query","h":"#9105-分页查询","p":952},{"i":963,"t":"9.10.6 其他查询","u":"/docs/dbcontext-query","h":"#9106-其他查询","p":952},{"i":964,"t":"9.10.6.1 查看记录是否存在","u":"/docs/dbcontext-query","h":"#91061-查看记录是否存在","p":952},{"i":966,"t":"9.10.6.2 查询记录数","u":"/docs/dbcontext-query","h":"#91062-查询记录数","p":952},{"i":968,"t":"9.10.6.3 查询最大值","u":"/docs/dbcontext-query","h":"#91063-查询最大值","p":952},{"i":970,"t":"9.10.6.4 查询最小值","u":"/docs/dbcontext-query","h":"#91064-查询最小值","p":952},{"i":972,"t":"9.10.6.5 求和查询","u":"/docs/dbcontext-query","h":"#91065-求和查询","p":952},{"i":974,"t":"9.10.6.6 求平均值查询","u":"/docs/dbcontext-query","h":"#91066-求平均值查询","p":952},{"i":976,"t":"9.10.6.7 时间查询","u":"/docs/dbcontext-query","h":"#91067-时间查询","p":952},{"i":978,"t":"9.10.6.8 模糊查询","u":"/docs/dbcontext-query","h":"#91068-模糊查询","p":952},{"i":980,"t":"9.10.6.9 Case When","u":"/docs/dbcontext-query","h":"#91069-case-when","p":952},{"i":982,"t":"9.10.7 反馈与建议","u":"/docs/dbcontext-query","h":"#9107-反馈与建议","p":952},{"i":985,"t":"9.4.1 什么是仓储","u":"/docs/dbcontext-repository","h":"#941-什么是仓储","p":984},{"i":987,"t":"9.4.2 内置仓储","u":"/docs/dbcontext-repository","h":"#942-内置仓储","p":984},{"i":989,"t":"9.4.2.1 非泛型超级仓储","u":"/docs/dbcontext-repository","h":"#9421-非泛型超级仓储","p":984},{"i":991,"t":"9.4.2.2 泛型实体仓储","u":"/docs/dbcontext-repository","h":"#9422-泛型实体仓储","p":984},{"i":993,"t":"9.4.2.3 泛型多数据库实体仓储","u":"/docs/dbcontext-repository","h":"#9423-泛型多数据库实体仓储","p":984},{"i":995,"t":"9.4.2.4 Sql 操作仓储","u":"/docs/dbcontext-repository","h":"#9424-sql-操作仓储","p":984},{"i":997,"t":"9.4.2.5 多数据库 Sql 操作仓储","u":"/docs/dbcontext-repository","h":"#9425-多数据库-sql-操作仓储","p":984},{"i":999,"t":"9.4.2.6 只读实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#9426-只读实体仓储支持多库","p":984},{"i":1001,"t":"9.4.2.7 只写实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#9427-只写实体仓储支持多库","p":984},{"i":1003,"t":"9.4.2.8 只允许新增实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#9428-只允许新增实体仓储支持多库","p":984},{"i":1005,"t":"9.4.2.9 只允许更新实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#9429-只允许更新实体仓储支持多库","p":984},{"i":1007,"t":"9.4.2.10 只允许删除实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#94210-只允许删除实体仓储支持多库","p":984},{"i":1009,"t":"9.4.2.11 只允许拓展操作实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#94211-只允许拓展操作实体仓储支持多库","p":984},{"i":1011,"t":"9.4.2.12 只允许 Sql 查询仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#94212-只允许-sql-查询仓储支持多库","p":984},{"i":1013,"t":"9.4.2.13 只允许 Sql 非查询仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#94213-只允许-sql-非查询仓储支持多库","p":984},{"i":1015,"t":"9.4.2.14 读写分离仓储","u":"/docs/dbcontext-repository","h":"#94214-读写分离仓储","p":984},{"i":1017,"t":"9.4.2.15 定位器仓储","u":"/docs/dbcontext-repository","h":"#94215-定位器仓储","p":984},{"i":1019,"t":"9.4.3 仓储使用","u":"/docs/dbcontext-repository","h":"#943-仓储使用","p":984},{"i":1021,"t":"9.4.3.1 构造函数注入","u":"/docs/dbcontext-repository","h":"#9431-构造函数注入","p":984},{"i":1023,"t":"9.4.3.2 方法参数注入","u":"/docs/dbcontext-repository","h":"#9432-方法参数注入","p":984},{"i":1025,"t":"9.4.3.3 Db.GetRepository 获取","u":"/docs/dbcontext-repository","h":"#9433-dbgetrepository-获取","p":984},{"i":1027,"t":"9.4.4 仓储高级用法","u":"/docs/dbcontext-repository","h":"#944-仓储高级用法","p":984},{"i":1028,"t":"9.4.4.1 动态切换实体仓储","u":"/docs/dbcontext-repository","h":"#9441-动态切换实体仓储","p":984},{"i":1030,"t":"9.4.4.2 动态切换仓储类型","u":"/docs/dbcontext-repository","h":"#9442-动态切换仓储类型","p":984},{"i":1032,"t":"9.4.4.3 获取 Sql 操作仓储","u":"/docs/dbcontext-repository","h":"#9443-获取-sql-操作仓储","p":984},{"i":1034,"t":"9.4.5 多数据库操作","u":"/docs/dbcontext-repository","h":"#945-多数据库操作","p":984},{"i":1036,"t":"9.4.5.1 动态切换多个数据库","u":"/docs/dbcontext-repository","h":"#9451-动态切换多个数据库","p":984},{"i":1038,"t":"9.4.6 在后台任务中使用","u":"/docs/dbcontext-repository","h":"#946-在后台任务中使用","p":984},{"i":1040,"t":"9.4.7 自定义仓储","u":"/docs/dbcontext-repository","h":"#947-自定义仓储","p":984},{"i":1042,"t":"9.4.8 反馈与建议","u":"/docs/dbcontext-repository","h":"#948-反馈与建议","p":984},{"i":1045,"t":"9.27.1 读写分离","u":"/docs/dbcontext-read-write","h":"#9271-读写分离","p":1044},{"i":1047,"t":"9.27.1.1 解决了什么问题","u":"/docs/dbcontext-read-write","h":"#92711-解决了什么问题","p":1044},{"i":1049,"t":"9.27.1.2 注意事项","u":"/docs/dbcontext-read-write","h":"#92712-注意事项","p":1044},{"i":1051,"t":"9.27.2 如何实现","u":"/docs/dbcontext-read-write","h":"#9272-如何实现","p":1044},{"i":1053,"t":"9.27.2.1 创建 主库 数据库上下文","u":"/docs/dbcontext-read-write","h":"#92721-创建-主库-数据库上下文","p":1044},{"i":1055,"t":"9.27.2.2 创建 从库 数据库上下文","u":"/docs/dbcontext-read-write","h":"#92722-创建-从库-数据库上下文","p":1044},{"i":1057,"t":"9.27.2.3 注册 主从库 数据库上下文","u":"/docs/dbcontext-read-write","h":"#92723-注册-主从库-数据库上下文","p":1044},{"i":1059,"t":"9.27.2.4 创建 Person 实体","u":"/docs/dbcontext-read-write","h":"#92724-创建-person-实体","p":1044},{"i":1061,"t":"9.27.2.5 将 Person 转换成数据库表","u":"/docs/dbcontext-read-write","h":"#92725-将-person-转换成数据库表","p":1044},{"i":1063,"t":"9.27.2.6 固定主从库使用例子","u":"/docs/dbcontext-read-write","h":"#92726-固定主从库使用例子","p":1044},{"i":1065,"t":"9.27.2.7 随机或 自定义返回从库 ✨","u":"/docs/dbcontext-read-write","h":"#92727-随机或-自定义返回从库-","p":1044},{"i":1067,"t":"9.27.3 主从复制","u":"/docs/dbcontext-read-write","h":"#9273-主从复制","p":1044},{"i":1069,"t":"9.27.4 主从复制几种方式","u":"/docs/dbcontext-read-write","h":"#9274-主从复制几种方式","p":1044},{"i":1070,"t":"9.27.4.1 同步复制","u":"/docs/dbcontext-read-write","h":"#92741-同步复制","p":1044},{"i":1072,"t":"9.27.4.2 异步复制","u":"/docs/dbcontext-read-write","h":"#92742-异步复制","p":1044},{"i":1074,"t":"9.27.4.3 半同步复制","u":"/docs/dbcontext-read-write","h":"#92743-半同步复制","p":1044},{"i":1076,"t":"9.27.5 SqlServer 主库配置","u":"/docs/dbcontext-read-write","h":"#9275-sqlserver-主库配置","p":1044},{"i":1077,"t":"9.27.5.1 添加 本地发布","u":"/docs/dbcontext-read-write","h":"#92751-添加-本地发布","p":1044},{"i":1078,"t":"9.27.5.2 选择 分发服务器","u":"/docs/dbcontext-read-write","h":"#92752-选择-分发服务器","p":1044},{"i":1079,"t":"9.27.5.3 启用 代理","u":"/docs/dbcontext-read-write","h":"#92753-启用-代理","p":1044},{"i":1080,"t":"9.27.5.4 发布数据库","u":"/docs/dbcontext-read-write","h":"#92754-发布数据库","p":1044},{"i":1081,"t":"9.27.5.5 快照发布","u":"/docs/dbcontext-read-write","h":"#92755-快照发布","p":1044},{"i":1083,"t":"9.27.5.6 选择发布项目","u":"/docs/dbcontext-read-write","h":"#92756-选择发布项目","p":1044},{"i":1084,"t":"9.27.5.7 配置分发计划","u":"/docs/dbcontext-read-write","h":"#92757-配置分发计划","p":1044},{"i":1085,"t":"9.27.5.8 配置安全设置","u":"/docs/dbcontext-read-write","h":"#92758-配置安全设置","p":1044},{"i":1086,"t":"9.27.5.9 完成配置","u":"/docs/dbcontext-read-write","h":"#92759-完成配置","p":1044},{"i":1087,"t":"9.27.6 SqlServer 从库配置","u":"/docs/dbcontext-read-write","h":"#9276-sqlserver-从库配置","p":1044},{"i":1088,"t":"9.27.6.1 添加 本地订阅","u":"/docs/dbcontext-read-write","h":"#92761-添加-本地订阅","p":1044},{"i":1089,"t":"9.27.6.2 选择 分发服务器","u":"/docs/dbcontext-read-write","h":"#92762-选择-分发服务器","p":1044},{"i":1090,"t":"9.27.6.3 选择 分发代理位置","u":"/docs/dbcontext-read-write","h":"#92763-选择-分发代理位置","p":1044},{"i":1091,"t":"9.27.6.4 选择 订阅数据库","u":"/docs/dbcontext-read-write","h":"#92764-选择-订阅数据库","p":1044},{"i":1092,"t":"9.27.6.5 选择 分发安全设置","u":"/docs/dbcontext-read-write","h":"#92765-选择-分发安全设置","p":1044},{"i":1093,"t":"9.27.6.6 选择 同步计划","u":"/docs/dbcontext-read-write","h":"#92766-选择-同步计划","p":1044},{"i":1094,"t":"9.27.6.7 完成订阅","u":"/docs/dbcontext-read-write","h":"#92767-完成订阅","p":1044},{"i":1095,"t":"9.27.7 分发定义监视","u":"/docs/dbcontext-read-write","h":"#9277-分发定义监视","p":1044},{"i":1096,"t":"9.27.8 查看主从复制结果","u":"/docs/dbcontext-read-write","h":"#9278-查看主从复制结果","p":1044},{"i":1098,"t":"9.27.9 反馈与建议","u":"/docs/dbcontext-read-write","h":"#9279-反馈与建议","p":1044},{"i":1102,"t":"9.13.1 关于存储过程","u":"/docs/dbcontext-proc","h":"#9131-关于存储过程","p":1100},{"i":1104,"t":"9.13.2.0 支持存储过程的数据库","u":"/docs/dbcontext-proc","h":"#91320-支持存储过程的数据库","p":1100},{"i":1106,"t":"9.13.2 存储过程使用","u":"/docs/dbcontext-proc","h":"#9132-存储过程使用","p":1100},{"i":1108,"t":"9.13.2.1 初始化方式","u":"/docs/dbcontext-proc","h":"#91321-初始化方式","p":1100},{"i":1110,"t":"9.13.2.2 返回 DataTable","u":"/docs/dbcontext-proc","h":"#91322-返回-datatable","p":1100},{"i":1112,"t":"9.13.2.3 返回 DataSet","u":"/docs/dbcontext-proc","h":"#91323-返回-dataset","p":1100},{"i":1114,"t":"9.13.2.4 返回 List","u":"/docs/dbcontext-proc","h":"#91324-返回-listt","p":1100},{"i":1116,"t":"9.13.2.5 返回 Tuple","u":"/docs/dbcontext-proc","h":"#91325-返回-tuplet1t8","p":1100},{"i":1118,"t":"9.13.2.6 返回 单行单列 object","u":"/docs/dbcontext-proc","h":"#91326-返回-单行单列-object","p":1100},{"i":1120,"t":"9.13.2.7 返回 单行单列 ","u":"/docs/dbcontext-proc","h":"#91327-返回-单行单列-t","p":1100},{"i":1122,"t":"9.13.2.8 执行但无返回","u":"/docs/dbcontext-proc","h":"#91328-执行但无返回","p":1100},{"i":1124,"t":"9.13.3 执行复杂存储过程","u":"/docs/dbcontext-proc","h":"#9133-执行复杂存储过程","p":1100},{"i":1126,"t":"9.13.3.1 创建参数模型","u":"/docs/dbcontext-proc","h":"#91331-创建参数模型","p":1100},{"i":1128,"t":"9.13.3.2 执行复杂存储过程","u":"/docs/dbcontext-proc","h":"#91332-执行复杂存储过程","p":1100},{"i":1130,"t":"9.13.3 关于 [DbParameter]","u":"/docs/dbcontext-proc","h":"#9133-关于-dbparameter","p":1100},{"i":1132,"t":"9.13.4 关于 ProcedureOutputResult","u":"/docs/dbcontext-proc","h":"#9134-关于-procedureoutputresult","p":1100},{"i":1134,"t":"9.13.5 存储过程参数","u":"/docs/dbcontext-proc","h":"#9135-存储过程参数","p":1100},{"i":1136,"t":"9.13.6 反馈与建议","u":"/docs/dbcontext-proc","h":"#9136-反馈与建议","p":1100},{"i":1140,"t":"9.21.1 什么是种子数据","u":"/docs/dbcontext-seed-data","h":"#9211-什么是种子数据","p":1138},{"i":1142,"t":"9.21.2 如何配置","u":"/docs/dbcontext-seed-data","h":"#9212-如何配置","p":1138},{"i":1144,"t":"9.21.2.1 在实体定义中使用","u":"/docs/dbcontext-seed-data","h":"#92121-在实体定义中使用","p":1138},{"i":1146,"t":"9.21.2.2 在任意对象类中使用","u":"/docs/dbcontext-seed-data","h":"#92122-在任意对象类中使用","p":1138},{"i":1148,"t":"9.21.3 导航属性","u":"/docs/dbcontext-seed-data","h":"#9213-导航属性","p":1138},{"i":1150,"t":"9.21.4 多个数据库种子数据","u":"/docs/dbcontext-seed-data","h":"#9214-多个数据库种子数据","p":1138},{"i":1152,"t":"9.21.5 反馈与建议","u":"/docs/dbcontext-seed-data","h":"#9215-反馈与建议","p":1138},{"i":1156,"t":"9.15.1 关于 Sql","u":"/docs/dbcontext-sql","h":"#9151-关于-sql","p":1154},{"i":1158,"t":"9.15.2 懒人无敌 Sql 🐮","u":"/docs/dbcontext-sql","h":"#9152-懒人无敌-sql-","p":1154},{"i":1159,"t":"9.15.2.1 返回 DataTable","u":"/docs/dbcontext-sql","h":"#91521-返回-datatable","p":1154},{"i":1161,"t":"9.15.2.2 返回 List","u":"/docs/dbcontext-sql","h":"#91522-返回-listt","p":1154},{"i":1163,"t":"9.15.2.3 返回 DataSet","u":"/docs/dbcontext-sql","h":"#91523-返回-dataset","p":1154},{"i":1165,"t":"9.15.2.4 返回 Tuple","u":"/docs/dbcontext-sql","h":"#91524-返回-tuplet1t8","p":1154},{"i":1167,"t":"9.15.2.5 返回 单行单列","u":"/docs/dbcontext-sql","h":"#91525-返回-单行单列","p":1154},{"i":1169,"t":"9.15.2.6 返回 受影响行数","u":"/docs/dbcontext-sql","h":"#91526-返回-受影响行数","p":1154},{"i":1171,"t":"9.15.3 懒人无敌 存储过程 🐮","u":"/docs/dbcontext-sql","h":"#9153-懒人无敌-存储过程-","p":1154},{"i":1172,"t":"9.15.3.1 返回 DataTable","u":"/docs/dbcontext-sql","h":"#91531-返回-datatable","p":1154},{"i":1174,"t":"9.15.3.2 返回 List","u":"/docs/dbcontext-sql","h":"#91532-返回-listt","p":1154},{"i":1176,"t":"9.15.3.3 返回 DataSet","u":"/docs/dbcontext-sql","h":"#91533-返回-dataset","p":1154},{"i":1178,"t":"9.15.3.4 返回 Tuple","u":"/docs/dbcontext-sql","h":"#91534-返回-tuplet1t8","p":1154},{"i":1180,"t":"9.15.3.5 返回 单行单列","u":"/docs/dbcontext-sql","h":"#91535-返回-单行单列","p":1154},{"i":1182,"t":"9.15.3.6 返回 受影响行数","u":"/docs/dbcontext-sql","h":"#91536-返回-受影响行数","p":1154},{"i":1184,"t":"9.15.3.7 带 OUTPUT/RETURN 返回","u":"/docs/dbcontext-sql","h":"#91537-带-outputreturn-返回","p":1154},{"i":1186,"t":"9.15.4 懒人无敌 函数 🐮","u":"/docs/dbcontext-sql","h":"#9154-懒人无敌-函数-","p":1154},{"i":1187,"t":"9.15.4.1 标量函数","u":"/docs/dbcontext-sql","h":"#91541-标量函数","p":1154},{"i":1189,"t":"9.15.4.2 表值函数","u":"/docs/dbcontext-sql","h":"#91542-表值函数","p":1154},{"i":1191,"t":"9.15.5 设置超时时间","u":"/docs/dbcontext-sql","h":"#9155-设置超时时间","p":1154},{"i":1193,"t":"9.15.6 ISqlRepository 操作","u":"/docs/dbcontext-sql","h":"#9156-isqlrepository-操作","p":1154},{"i":1195,"t":"9.15.7 IRepository 操作","u":"/docs/dbcontext-sql","h":"#9157-irepository-操作","p":1154},{"i":1197,"t":"9.15.8 IRepository 操作","u":"/docs/dbcontext-sql","h":"#9158-irepositorytentity-操作","p":1154},{"i":1199,"t":"9.15.9 关于 Sql 参数","u":"/docs/dbcontext-sql","h":"#9159-关于-sql-参数","p":1154},{"i":1201,"t":"9.15.10 多数据库 Sql 操作 💯 💛","u":"/docs/dbcontext-sql","h":"#91510-多数据库-sql-操作--","p":1154},{"i":1203,"t":"9.15.10.1 懒人无敌 🐮 方式","u":"/docs/dbcontext-sql","h":"#915101-懒人无敌--方式","p":1154},{"i":1205,"t":"9.15.10.2 ISqlRepository 方式","u":"/docs/dbcontext-sql","h":"#915102-isqlrepository-方式","p":1154},{"i":1207,"t":"9.15.10.3 IRepository 方式","u":"/docs/dbcontext-sql","h":"#915103-irepository-方式","p":1154},{"i":1209,"t":"9.15.10.4 IRepository 方式","u":"/docs/dbcontext-sql","h":"#915104-irepositorytentity-方式","p":1154},{"i":1211,"t":"9.15.11 切换数据库","u":"/docs/dbcontext-sql","h":"#91511-切换数据库","p":1154},{"i":1213,"t":"9.15.12 多线程共享作用域","u":"/docs/dbcontext-sql","h":"#91512-多线程共享作用域","p":1154},{"i":1215,"t":"9.15.13 静态 Default 方式构建","u":"/docs/dbcontext-sql","h":"#91513-静态-default-方式构建","p":1154},{"i":1217,"t":"9.15.14 反馈与建议","u":"/docs/dbcontext-sql","h":"#91514-反馈与建议","p":1154},{"i":1220,"t":"9.17.1 关于 Sql 代理","u":"/docs/dbcontext-sql-proxy","h":"#9171-关于-sql-代理","p":1219},{"i":1222,"t":"9.17.2 了解 ISqlDispatchProxy","u":"/docs/dbcontext-sql-proxy","h":"#9172-了解-isqldispatchproxy","p":1219},{"i":1224,"t":"9.17.3 开始领略 Sql 代理","u":"/docs/dbcontext-sql-proxy","h":"#9173-开始领略-sql-代理","p":1219},{"i":1226,"t":"9.17.3.1 构造函数方式","u":"/docs/dbcontext-sql-proxy","h":"#91731-构造函数方式","p":1219},{"i":1228,"t":"9.17.3.2 方法参数注入","u":"/docs/dbcontext-sql-proxy","h":"#91732-方法参数注入","p":1219},{"i":1230,"t":"9.17.3.3 Db.GetSqlDispatchProxy()","u":"/docs/dbcontext-sql-proxy","h":"#91733-dbgetsqldispatchproxyisql","p":1219},{"i":1232,"t":"9.17.4 Sql 操作","u":"/docs/dbcontext-sql-proxy","h":"#9174-sql-操作","p":1219},{"i":1233,"t":"9.17.4.1 返回 DataTable","u":"/docs/dbcontext-sql-proxy","h":"#91741-返回-datatable","p":1219},{"i":1235,"t":"9.17.4.2 返回 List","u":"/docs/dbcontext-sql-proxy","h":"#91742-返回-listt","p":1219},{"i":1237,"t":"9.17.4.3 返回 DataSet","u":"/docs/dbcontext-sql-proxy","h":"#91743-返回-dataset","p":1219},{"i":1239,"t":"9.17.4.4 返回 Tuple","u":"/docs/dbcontext-sql-proxy","h":"#91744-返回-tuplet1t8","p":1219},{"i":1241,"t":"9.17.4.5 返回 单行单列","u":"/docs/dbcontext-sql-proxy","h":"#91745-返回-单行单列","p":1219},{"i":1243,"t":"9.17.4.6 无返回值","u":"/docs/dbcontext-sql-proxy","h":"#91746-无返回值","p":1219},{"i":1245,"t":"9.17.4.7 返回单个类类型参数","u":"/docs/dbcontext-sql-proxy","h":"#91747-返回单个类类型参数","p":1219},{"i":1247,"t":"9.17.4.8 返回受影响行数","u":"/docs/dbcontext-sql-proxy","h":"#91748-返回受影响行数","p":1219},{"i":1249,"t":"9.17.5 存储过程 操作","u":"/docs/dbcontext-sql-proxy","h":"#9175-存储过程-操作","p":1219},{"i":1250,"t":"9.17.5.1 返回 DataTable","u":"/docs/dbcontext-sql-proxy","h":"#91751-返回-datatable","p":1219},{"i":1252,"t":"9.17.5.2 返回 List","u":"/docs/dbcontext-sql-proxy","h":"#91752-返回-listt","p":1219},{"i":1254,"t":"9.17.5.3 返回 DataSet","u":"/docs/dbcontext-sql-proxy","h":"#91753-返回-dataset","p":1219},{"i":1256,"t":"9.17.5.4 返回 Tuple(T1,...T8)","u":"/docs/dbcontext-sql-proxy","h":"#91754-返回-tuplet1t8","p":1219},{"i":1258,"t":"9.17.5.5 返回 单行单列","u":"/docs/dbcontext-sql-proxy","h":"#91755-返回-单行单列","p":1219},{"i":1260,"t":"9.17.5.6 无返回值","u":"/docs/dbcontext-sql-proxy","h":"#91756-无返回值","p":1219},{"i":1262,"t":"9.17.5.7 带 OUTPUT/RETURN 返回","u":"/docs/dbcontext-sql-proxy","h":"#91757-带-outputreturn-返回","p":1219},{"i":1264,"t":"9.17.5.8 返回单个类类型参数","u":"/docs/dbcontext-sql-proxy","h":"#91758-返回单个类类型参数","p":1219},{"i":1266,"t":"9.17.6 函数 操作","u":"/docs/dbcontext-sql-proxy","h":"#9176-函数-操作","p":1219},{"i":1268,"t":"9.17.7 Sql 模板替换","u":"/docs/dbcontext-sql-proxy","h":"#9177-sql-模板替换","p":1219},{"i":1270,"t":"9.17.8 切换数据库","u":"/docs/dbcontext-sql-proxy","h":"#9178-切换数据库","p":1219},{"i":1272,"t":"9.17.8.1 单个方法方式","u":"/docs/dbcontext-sql-proxy","h":"#91781-单个方法方式","p":1219},{"i":1274,"t":"9.17.8.2 接口方式","u":"/docs/dbcontext-sql-proxy","h":"#91782-接口方式","p":1219},{"i":1276,"t":"9.17.8.3 运行时 .Change 方法切换","u":"/docs/dbcontext-sql-proxy","h":"#91783-运行时-change-方法切换","p":1219},{"i":1278,"t":"9.17.9 Sql 代理拦截","u":"/docs/dbcontext-sql-proxy","h":"#9179-sql-代理拦截","p":1219},{"i":1280,"t":"9.17.10 设置超时时间","u":"/docs/dbcontext-sql-proxy","h":"#91710-设置超时时间","p":1219},{"i":1282,"t":"9.17.11 反馈与建议","u":"/docs/dbcontext-sql-proxy","h":"#91711-反馈与建议","p":1219},{"i":1285,"t":"9.16.1 Sql 模板","u":"/docs/dbcontext-sql-template","h":"#9161-sql-模板","p":1284},{"i":1287,"t":"9.16.2 Sql 模板优缺点","u":"/docs/dbcontext-sql-template","h":"#9162-sql-模板优缺点","p":1284},{"i":1288,"t":"9.16.2.1 优点","u":"/docs/dbcontext-sql-template","h":"#91621-优点","p":1284},{"i":1290,"t":"9.16.2.2 缺点","u":"/docs/dbcontext-sql-template","h":"#91622-缺点","p":1284},{"i":1292,"t":"9.16.3 如何使用","u":"/docs/dbcontext-sql-template","h":"#9163-如何使用","p":1284},{"i":1294,"t":"9.16.3.1 常规使用","u":"/docs/dbcontext-sql-template","h":"#91631-常规使用","p":1284},{"i":1296,"t":"9.16.3.2 高级嵌套","u":"/docs/dbcontext-sql-template","h":"#91632-高级嵌套","p":1284},{"i":1298,"t":"9.16.4 Sql 模板配置","u":"/docs/dbcontext-sql-template","h":"#9164-sql-模板配置","p":1284},{"i":1299,"t":"9.16.4.1 普通模式","u":"/docs/dbcontext-sql-template","h":"#91641-普通模式","p":1284},{"i":1301,"t":"9.16.4.2 更多配置","u":"/docs/dbcontext-sql-template","h":"#91642-更多配置","p":1284},{"i":1303,"t":"9.16.5 反馈与建议","u":"/docs/dbcontext-sql-template","h":"#9165-反馈与建议","p":1284},{"i":1306,"t":"9.0.1 入门准备","u":"/docs/dbcontext-start","h":"#901-入门准备","p":1305},{"i":1308,"t":"9.0.1.1 安装对应数据库包","u":"/docs/dbcontext-start","h":"#9011-安装对应数据库包","p":1305},{"i":1310,"t":"9.0.1.2 创建数据库上下文","u":"/docs/dbcontext-start","h":"#9012-创建数据库上下文","p":1305},{"i":1312,"t":"9.0.1.3 配置连接字符串","u":"/docs/dbcontext-start","h":"#9013-配置连接字符串","p":1305},{"i":1314,"t":"9.0.1.4 各类数据库连接字符串配置示例","u":"/docs/dbcontext-start","h":"#9014-各类数据库连接字符串配置示例","p":1305},{"i":1316,"t":"9.0.1.5 注册数据库上下文","u":"/docs/dbcontext-start","h":"#9015-注册数据库上下文","p":1305},{"i":1318,"t":"9.0.1.6 Code First 说明","u":"/docs/dbcontext-start","h":"#9016-code-first-说明","p":1305},{"i":1320,"t":"9.0.2 反馈与建议","u":"/docs/dbcontext-start","h":"#902-反馈与建议","p":1305},{"i":1324,"t":"9.6.1 更新全部列(不立即提交)","u":"/docs/dbcontext-update","h":"#961-更新全部列不立即提交","p":1322},{"i":1326,"t":"9.6.2 更新全部列(立即提交)","u":"/docs/dbcontext-update","h":"#962-更新全部列立即提交","p":1322},{"i":1328,"t":"9.6.3 更新部分列(不立即提交)","u":"/docs/dbcontext-update","h":"#963-更新部分列不立即提交","p":1322},{"i":1330,"t":"9.6.4 更新部分列(立即提交)","u":"/docs/dbcontext-update","h":"#964-更新部分列立即提交","p":1322},{"i":1332,"t":"9.6.5 排除特定列更新(不立即提交)","u":"/docs/dbcontext-update","h":"#965-排除特定列更新不立即提交","p":1322},{"i":1334,"t":"9.6.6 排除特定列更新(立即提交)","u":"/docs/dbcontext-update","h":"#966-排除特定列更新立即提交","p":1322},{"i":1336,"t":"9.6.7 数据存在才更新所有列(不立即提交)","u":"/docs/dbcontext-update","h":"#967-数据存在才更新所有列不立即提交","p":1322},{"i":1338,"t":"9.6.8 数据存在才更新所有列(立即提交)","u":"/docs/dbcontext-update","h":"#968-数据存在才更新所有列立即提交","p":1322},{"i":1340,"t":"9.6.9 数据存在才更新部分列(不立即提交)","u":"/docs/dbcontext-update","h":"#969-数据存在才更新部分列不立即提交","p":1322},{"i":1342,"t":"9.6.10 数据存在才更新部分列(立即提交)","u":"/docs/dbcontext-update","h":"#9610-数据存在才更新部分列立即提交","p":1322},{"i":1344,"t":"9.6.11 数据存在才排除特定部分列更新(不立即提交)","u":"/docs/dbcontext-update","h":"#9611-数据存在才排除特定部分列更新不立即提交","p":1322},{"i":1346,"t":"9.6.12 数据存在才排除特定部分列更新(立即提交)","u":"/docs/dbcontext-update","h":"#9612-数据存在才排除特定部分列更新立即提交","p":1322},{"i":1348,"t":"9.6.13 更新多条记录(不立即提交)","u":"/docs/dbcontext-update","h":"#9613-更新多条记录不立即提交","p":1322},{"i":1350,"t":"9.6.14 更新多条记录(立即提交)","u":"/docs/dbcontext-update","h":"#9614-更新多条记录立即提交","p":1322},{"i":1352,"t":"9.6.15 忽略空值更新","u":"/docs/dbcontext-update","h":"#9615-忽略空值更新","p":1322},{"i":1354,"t":"9.6.16 反馈与建议","u":"/docs/dbcontext-update","h":"#9616-反馈与建议","p":1322},{"i":1357,"t":"9.12.1 关于视图","u":"/docs/dbcontext-view","h":"#9121-关于视图","p":1356},{"i":1359,"t":"9.12.2 视图的使用","u":"/docs/dbcontext-view","h":"#9122-视图的使用","p":1356},{"i":1361,"t":"9.12.2.1 创建视图 SQL","u":"/docs/dbcontext-view","h":"#91221-创建视图-sql","p":1356},{"i":1363,"t":"9.12.2.2 视图模型","u":"/docs/dbcontext-view","h":"#91222-视图模型","p":1356},{"i":1365,"t":"9.12.3 视图使用","u":"/docs/dbcontext-view","h":"#9123-视图使用","p":1356},{"i":1367,"t":"9.12.4 视图最佳读取方式 ✔","u":"/docs/dbcontext-view","h":"#9124-视图最佳读取方式-","p":1356},{"i":1369,"t":"9.12.5 反馈与建议","u":"/docs/dbcontext-view","h":"#9125-反馈与建议","p":1356},{"i":1373,"t":"34.2.1 关于 Docker 部署","u":"/docs/deploy-docker","h":"#3421-关于-docker-部署","p":1371},{"i":1375,"t":"34.2.2 两种方式构建","u":"/docs/deploy-docker","h":"#3422-两种方式构建","p":1371},{"i":1376,"t":"34.2.2.1 发布后构建","u":"/docs/deploy-docker","h":"#34221-发布后构建","p":1371},{"i":1378,"t":"34.2.2.2 编译+构建+发布","u":"/docs/deploy-docker","h":"#34222-编译构建发布","p":1371},{"i":1380,"t":"34.2.3 反馈与建议","u":"/docs/deploy-docker","h":"#3423-反馈与建议","p":1371},{"i":1384,"t":"12.1 依赖注入","u":"/docs/dependency-injection","h":"#121-依赖注入","p":1382},{"i":1386,"t":"12.2 控制反转","u":"/docs/dependency-injection","h":"#122-控制反转","p":1382},{"i":1388,"t":"12.3 IOC/DI 优缺点","u":"/docs/dependency-injection","h":"#123-iocdi-优缺点","p":1382},{"i":1390,"t":"12.4 依赖注入的三种方式","u":"/docs/dependency-injection","h":"#124-依赖注入的三种方式","p":1382},{"i":1391,"t":"12.4.1 构造方法注入","u":"/docs/dependency-injection","h":"#1241-构造方法注入","p":1382},{"i":1393,"t":"12.4.2 属性方式注入","u":"/docs/dependency-injection","h":"#1242-属性方式注入","p":1382},{"i":1395,"t":"12.4.3 方法参数注入","u":"/docs/dependency-injection","h":"#1243-方法参数注入","p":1382},{"i":1397,"t":"12.5 注册对象生存期","u":"/docs/dependency-injection","h":"#125-注册对象生存期","p":1382},{"i":1398,"t":"12.5.1 暂时/瞬时 生存期","u":"/docs/dependency-injection","h":"#1251-暂时瞬时-生存期","p":1382},{"i":1400,"t":"12.5.2 作用域 生存期","u":"/docs/dependency-injection","h":"#1252-作用域-生存期","p":1382},{"i":1402,"t":"12.5.3 单例 生存期","u":"/docs/dependency-injection","h":"#1253-单例-生存期","p":1382},{"i":1404,"t":"12.6 内置依赖接口","u":"/docs/dependency-injection","h":"#126-内置依赖接口","p":1382},{"i":1406,"t":"12.7 常见使用","u":"/docs/dependency-injection","h":"#127-常见使用","p":1382},{"i":1407,"t":"12.7.1 第一个例子","u":"/docs/dependency-injection","h":"#1271-第一个例子","p":1382},{"i":1409,"t":"12.7.2 注册泛型实例","u":"/docs/dependency-injection","h":"#1272-注册泛型实例","p":1382},{"i":1411,"t":"12.7.3 一个接口多个实现","u":"/docs/dependency-injection","h":"#1273-一个接口多个实现","p":1382},{"i":1413,"t":"12.7.4 无接口方式","u":"/docs/dependency-injection","h":"#1274-无接口方式","p":1382},{"i":1415,"t":"12.8 [Injection] 特性配置","u":"/docs/dependency-injection","h":"#128-injection-特性配置","p":1382},{"i":1417,"t":"12.9 自定义高级注册","u":"/docs/dependency-injection","h":"#129-自定义高级注册","p":1382},{"i":1419,"t":"12.10 appsettings.json 配置注册","u":"/docs/dependency-injection","h":"#1210-appsettingsjson-配置注册","p":1382},{"i":1421,"t":"12.11 注册顺序和优先级","u":"/docs/dependency-injection","h":"#1211-注册顺序和优先级","p":1382},{"i":1423,"t":"12.12 Aop 注册拦截","u":"/docs/dependency-injection","h":"#1212-aop-注册拦截","p":1382},{"i":1425,"t":"12.12.1 全局Aop拦截","u":"/docs/dependency-injection","h":"#12121-全局aop拦截","p":1382},{"i":1427,"t":"12.12.2 AOP 注入解析服务","u":"/docs/dependency-injection","h":"#12122-aop-注入解析服务","p":1382},{"i":1429,"t":"12.12.3 AOP 的作用","u":"/docs/dependency-injection","h":"#12123-aop-的作用","p":1382},{"i":1431,"t":"12.13 在非 Web 或多线程解析服务","u":"/docs/dependency-injection","h":"#1213-在非-web-或多线程解析服务","p":1382},{"i":1433,"t":"12.13.1 IServiceProvider 方式","u":"/docs/dependency-injection","h":"#12131-iserviceprovider-方式","p":1382},{"i":1435,"t":"12.13.2 IServiceScopeFactory 方式","u":"/docs/dependency-injection","h":"#12132-iservicescopefactory-方式","p":1382},{"i":1437,"t":"12.13.3 Scoped 静态类","u":"/docs/dependency-injection","h":"#12133-scoped-静态类","p":1382},{"i":1439,"t":"12.14 自定义扫描/筛选注册服务","u":"/docs/dependency-injection","h":"#1214-自定义扫描筛选注册服务","p":1382},{"i":1441,"t":"12.15 反馈与建议","u":"/docs/dependency-injection","h":"#1215-反馈与建议","p":1382},{"i":1445,"t":"34.1.1 发布网站","u":"/docs/deploy-iis","h":"#3411-发布网站","p":1443},{"i":1446,"t":"34.1.1.1 选择启动项发布","u":"/docs/deploy-iis","h":"#34111-选择启动项发布","p":1443},{"i":1447,"t":"34.1.1.2 选择发布到文件夹","u":"/docs/deploy-iis","h":"#34112-选择发布到文件夹","p":1443},{"i":1448,"t":"34.1.1.3 配置发布后路径","u":"/docs/deploy-iis","h":"#34113-配置发布后路径","p":1443},{"i":1449,"t":"34.1.1.4 点击发布","u":"/docs/deploy-iis","h":"#34114-点击发布","p":1443},{"i":1450,"t":"34.1.2 服务器环境配置","u":"/docs/deploy-iis","h":"#3412-服务器环境配置","p":1443},{"i":1451,"t":"34.1.2.1 第一步","u":"/docs/deploy-iis","h":"#34121-第一步","p":1443},{"i":1453,"t":"34.1.2.2 第二步(命令)","u":"/docs/deploy-iis","h":"#34122-第二步命令","p":1443},{"i":1455,"t":"34.1.2.3 第三步(命令)","u":"/docs/deploy-iis","h":"#34123-第三步命令","p":1443},{"i":1457,"t":"34.1.2.4 第四步(命令)","u":"/docs/deploy-iis","h":"#34124-第四步命令","p":1443},{"i":1459,"t":"34.1.3 部署到 IIS","u":"/docs/deploy-iis","h":"#3413-部署到-iis","p":1443},{"i":1460,"t":"34.1.3.1 添加新网站","u":"/docs/deploy-iis","h":"#34131-添加新网站","p":1443},{"i":1461,"t":"34.1.3.2 配置网站信息","u":"/docs/deploy-iis","h":"#34132-配置网站信息","p":1443},{"i":1462,"t":"34.1.3.3 配置应用程序池","u":"/docs/deploy-iis","h":"#34133-配置应用程序池","p":1443},{"i":1463,"t":"34.1.3.4 设置为 非托管","u":"/docs/deploy-iis","h":"#34134-设置为-非托管","p":1443},{"i":1464,"t":"34.1.3.5 重启网站","u":"/docs/deploy-iis","h":"#34135-重启网站","p":1443},{"i":1466,"t":"34.1.4 常见问题","u":"/docs/deploy-iis","h":"#3414-常见问题","p":1443},{"i":1467,"t":"34.1.4.1 405 状态码,不支持 PUT,DELETE 请求","u":"/docs/deploy-iis","h":"#34141-405-状态码不支持-putdelete-请求","p":1443},{"i":1469,"t":"34.1.4.2 WebSocket/ SignalR 连接报错","u":"/docs/deploy-iis","h":"#34142-websocket-signalr-连接报错","p":1443},{"i":1471,"t":"34.1.4.3 部署之后缺失 api-ms-win.xxxx.dll 问题","u":"/docs/deploy-iis","h":"#34143-部署之后缺失-api-ms-winxxxxdll-问题","p":1443},{"i":1473,"t":"34.1.5 IIS 回收问题和配置","u":"/docs/deploy-iis","h":"#3415-iis-回收问题和配置","p":1443},{"i":1475,"t":"34.1.6 反馈与建议","u":"/docs/deploy-iis","h":"#3416-反馈与建议","p":1443},{"i":1478,"t":"35.1.1 关于全 Docker 环境部署","u":"/docs/deploy-docker-auto","h":"#3511-关于全-docker-环境部署","p":1477},{"i":1480,"t":"35.1.2 安装 Docker 版 Jenkins","u":"/docs/deploy-docker-auto","h":"#3512-安装-docker-版-jenkins","p":1477},{"i":1482,"t":"35.1.2.1 使用 Dockerfile 制作镜像","u":"/docs/deploy-docker-auto","h":"#35121-使用-dockerfile-制作镜像","p":1477},{"i":1484,"t":"35.1.2.2 运行 Jenkins:dotnet 镜像","u":"/docs/deploy-docker-auto","h":"#35122-运行-jenkinsdotnet-镜像","p":1477},{"i":1486,"t":"35.1.3 Jenkins 的自动化部署","u":"/docs/deploy-docker-auto","h":"#3513-jenkins-的自动化部署","p":1477},{"i":1487,"t":"35.1.3.1 编写 Shell 脚本","u":"/docs/deploy-docker-auto","h":"#35131-编写-shell-脚本","p":1477},{"i":1489,"t":"35.1.4 Jenkins 的自动化远程部署","u":"/docs/deploy-docker-auto","h":"#3514-jenkins-的自动化远程部署","p":1477},{"i":1490,"t":"35.1.4.1 安装插件","u":"/docs/deploy-docker-auto","h":"#35141-安装插件","p":1477},{"i":1492,"t":"35.1.4.2 配置","u":"/docs/deploy-docker-auto","h":"#35142-配置","p":1477},{"i":1494,"t":"35.1.4.3 写脚本","u":"/docs/deploy-docker-auto","h":"#35143-写脚本","p":1477},{"i":1496,"t":"35.1.4.4 构建后操作(关键)","u":"/docs/deploy-docker-auto","h":"#35144-构建后操作关键","p":1477},{"i":1498,"t":"35.1.4.5 远程执行","u":"/docs/deploy-docker-auto","h":"#35145-远程执行","p":1477},{"i":1500,"t":"35.1.5 反馈与建议","u":"/docs/deploy-docker-auto","h":"#3515-反馈与建议","p":1477},{"i":1508,"t":"1.5.1 作为企业赞助","u":"/docs/donate","h":"#151-作为企业赞助","p":1506},{"i":1510,"t":"1.5.2 作为个人赞助","u":"/docs/donate","h":"#152-作为个人赞助","p":1506},{"i":1512,"t":"1.5.3 帮助推广支持","u":"/docs/donate","h":"#153-帮助推广支持","p":1506},{"i":1515,"t":"37.1 关于包管理工具","u":"/docs/dotnet-tools","h":"#371-关于包管理工具","p":1514},{"i":1517,"t":"37.1.2 dotnet tools 包管理好处","u":"/docs/dotnet-tools","h":"#3712-dotnet-tools-包管理好处","p":1514},{"i":1519,"t":"37.2 了解包命令语法","u":"/docs/dotnet-tools","h":"#372-了解包命令语法","p":1514},{"i":1521,"t":"37.2.1 短参数例子","u":"/docs/dotnet-tools","h":"#3721-短参数例子","p":1514},{"i":1523,"t":"37.2.2 长参数例子","u":"/docs/dotnet-tools","h":"#3722-长参数例子","p":1514},{"i":1525,"t":"37.2.3 混合参数例子","u":"/docs/dotnet-tools","h":"#3723-混合参数例子","p":1514},{"i":1527,"t":"37.2.4 多个值参数","u":"/docs/dotnet-tools","h":"#3724-多个值参数","p":1514},{"i":1529,"t":"37.2.5 操作符","u":"/docs/dotnet-tools","h":"#3725-操作符","p":1514},{"i":1531,"t":"37.3 编写第一个包","u":"/docs/dotnet-tools","h":"#373-编写第一个包","p":1514},{"i":1533,"t":"37.3.1 创建 HelloTools 控制台应用","u":"/docs/dotnet-tools","h":"#3731-创建-hellotools-控制台应用","p":1514},{"i":1534,"t":"37.3.2 编辑 HelloTools.csproj","u":"/docs/dotnet-tools","h":"#3732-编辑-hellotoolscsproj","p":1514},{"i":1536,"t":"37.3.3 安装 Furion.Tools.CommandLine 包","u":"/docs/dotnet-tools","h":"#3733-安装-furiontoolscommandline-包","p":1514},{"i":1538,"t":"37.3.4 编写逻辑代码","u":"/docs/dotnet-tools","h":"#3734-编写逻辑代码","p":1514},{"i":1540,"t":"37.3.5 如何调试包工具 👏","u":"/docs/dotnet-tools","h":"#3735-如何调试包工具-","p":1514},{"i":1542,"t":"37.3.6 测试各个参数情况","u":"/docs/dotnet-tools","h":"#3736-测试各个参数情况","p":1514},{"i":1544,"t":"37.4 打包(本机)测试","u":"/docs/dotnet-tools","h":"#374-打包本机测试","p":1514},{"i":1546,"t":"37.4.1 全局打包安装","u":"/docs/dotnet-tools","h":"#3741-全局打包安装","p":1514},{"i":1548,"t":"37.4.2 本地打包安装","u":"/docs/dotnet-tools","h":"#3742-本地打包安装","p":1514},{"i":1550,"t":"37.5 发布到 Nuget 平台 👏","u":"/docs/dotnet-tools","h":"#375-发布到-nuget-平台-","p":1514},{"i":1552,"t":"37.6 Cli 静态类说明","u":"/docs/dotnet-tools","h":"#376-cli-静态类说明","p":1514},{"i":1554,"t":"37.6.1 消息类","u":"/docs/dotnet-tools","h":"#3761-消息类","p":1514},{"i":1556,"t":"37.6.2 工具类","u":"/docs/dotnet-tools","h":"#3762-工具类","p":1514},{"i":1558,"t":"37.6.2 信息类","u":"/docs/dotnet-tools","h":"#3762-信息类","p":1514},{"i":1560,"t":"37.6.3 其他类","u":"/docs/dotnet-tools","h":"#3763-其他类","p":1514},{"i":1562,"t":"37.7 反馈与建议","u":"/docs/dotnet-tools","h":"#377-反馈与建议","p":1514},{"i":1565,"t":"9.29.1 EFCore 高性能","u":"/docs/efcore-recommend","h":"#9291-efcore-高性能","p":1564},{"i":1567,"t":"9.29.2 反馈与建议","u":"/docs/efcore-recommend","h":"#9292-反馈与建议","p":1564},{"i":1571,"t":"5.1.1 什么是控制器","u":"/docs/dynamic-api-controller","h":"#511-什么是控制器","p":1569},{"i":1573,"t":"5.1.2 Mvc 控制器 约定和缺点","u":"/docs/dynamic-api-controller","h":"#512-mvc-控制器-约定和缺点","p":1569},{"i":1575,"t":"5.1.2.1 WebAPI 约定","u":"/docs/dynamic-api-controller","h":"#5121-webapi-约定","p":1569},{"i":1577,"t":"5.1.2.2 .NET Core WebAPI 缺点","u":"/docs/dynamic-api-controller","h":"#5122-net-core-webapi-缺点","p":1569},{"i":1579,"t":"5.1.3 动态 WebAPI 控制器","u":"/docs/dynamic-api-controller","h":"#513-动态-webapi-控制器","p":1569},{"i":1581,"t":"5.1.4 注册动态 WebAPI 服务","u":"/docs/dynamic-api-controller","h":"#514-注册动态-webapi-服务","p":1569},{"i":1583,"t":"5.1.5 第一个例子","u":"/docs/dynamic-api-controller","h":"#515-第一个例子","p":1569},{"i":1585,"t":"5.1.6 动态 WebAPI 原理解析","u":"/docs/dynamic-api-controller","h":"#516-动态-webapi-原理解析","p":1569},{"i":1586,"t":"5.1.6.1 控制器特性提供器","u":"/docs/dynamic-api-controller","h":"#5161-控制器特性提供器","p":1569},{"i":1588,"t":"5.1.6.2 应用模型转换器","u":"/docs/dynamic-api-controller","h":"#5162-应用模型转换器","p":1569},{"i":1590,"t":"5.1.7 动态 WebAPI 配置约定","u":"/docs/dynamic-api-controller","h":"#517-动态-webapi-配置约定","p":1569},{"i":1591,"t":"5.1.7.1 控制器默认约定","u":"/docs/dynamic-api-controller","h":"#5171-控制器默认约定","p":1569},{"i":1593,"t":"5.1.7.2 动作方法默认约定","u":"/docs/dynamic-api-controller","h":"#5172-动作方法默认约定","p":1569},{"i":1595,"t":"5.1.7.3 请求谓词默认约定","u":"/docs/dynamic-api-controller","h":"#5173-请求谓词默认约定","p":1569},{"i":1597,"t":"5.1.7.4 路由地址默认约定","u":"/docs/dynamic-api-controller","h":"#5174-路由地址默认约定","p":1569},{"i":1599,"t":"5.1.7.5 其他约定","u":"/docs/dynamic-api-controller","h":"#5175-其他约定","p":1569},{"i":1601,"t":"5.1.8 更多例子","u":"/docs/dynamic-api-controller","h":"#518-更多例子","p":1569},{"i":1602,"t":"5.1.8.1 多种请求谓词方法","u":"/docs/dynamic-api-controller","h":"#5181-多种请求谓词方法","p":1569},{"i":1604,"t":"5.1.8.2 多个自定义动作方法","u":"/docs/dynamic-api-controller","h":"#5182-多个自定义动作方法","p":1569},{"i":1606,"t":"5.1.8.3 带参数动作方法","u":"/docs/dynamic-api-controller","h":"#5183-带参数动作方法","p":1569},{"i":1608,"t":"5.1.8.4 GET/HEAD 类类型参数","u":"/docs/dynamic-api-controller","h":"#5184-gethead-类类型参数","p":1569},{"i":1610,"t":"5.1.8.5 自定义参数位置","u":"/docs/dynamic-api-controller","h":"#5185-自定义参数位置","p":1569},{"i":1612,"t":"5.1.8.6 自定义请求谓词","u":"/docs/dynamic-api-controller","h":"#5186-自定义请求谓词","p":1569},{"i":1614,"t":"5.1.8.7 支持多个谓词","u":"/docs/dynamic-api-controller","h":"#5187-支持多个谓词","p":1569},{"i":1616,"t":"5.1.8.8 支持自定义路由","u":"/docs/dynamic-api-controller","h":"#5188-支持自定义路由","p":1569},{"i":1618,"t":"5.1.8.9 多路由随意组合","u":"/docs/dynamic-api-controller","h":"#5189-多路由随意组合","p":1569},{"i":1620,"t":"5.1.8.10 支持版本控制","u":"/docs/dynamic-api-controller","h":"#51810-支持版本控制","p":1569},{"i":1622,"t":"5.1.8.11 不公开控制器或动作方法","u":"/docs/dynamic-api-controller","h":"#51811-不公开控制器或动作方法","p":1569},{"i":1624,"t":"5.1.8.12 保持控制器和方法命名","u":"/docs/dynamic-api-controller","h":"#51812-保持控制器和方法命名","p":1569},{"i":1626,"t":"5.1.8.13 方法参数 [FromQuery] 化/参数非必填/参数可选","u":"/docs/dynamic-api-controller","h":"#51813-方法参数-fromquery-化参数非必填参数可选","p":1569},{"i":1628,"t":"5.1.8.14 参数绑定配置","u":"/docs/dynamic-api-controller","h":"#51814-参数绑定配置","p":1569},{"i":1630,"t":"5.1.8.15 自定义根据方法名生成 [HttpMethod] 规则","u":"/docs/dynamic-api-controller","h":"#51815-自定义根据方法名生成-httpmethod-规则","p":1569},{"i":1632,"t":"5.1.8.16 路由参数非必填/选填","u":"/docs/dynamic-api-controller","h":"#51816-路由参数非必填选填","p":1569},{"i":1634,"t":"5.1.8.17 [FormRoute] 路由约束","u":"/docs/dynamic-api-controller","h":"#51817-formroute-路由约束","p":1569},{"i":1636,"t":"5.1.8.18 小驼峰 路由路径","u":"/docs/dynamic-api-controller","h":"#51818-小驼峰-路由路径","p":1569},{"i":1638,"t":"5.1.9 [ApiDescriptionSettings]","u":"/docs/dynamic-api-controller","h":"#519-apidescriptionsettings","p":1569},{"i":1640,"t":"5.1.9.1 内置配置","u":"/docs/dynamic-api-controller","h":"#5191-内置配置","p":1569},{"i":1642,"t":"5.1.9.2 Name 配置","u":"/docs/dynamic-api-controller","h":"#5192-name-配置","p":1569},{"i":1644,"t":"5.1.9.3 KeepName 配置","u":"/docs/dynamic-api-controller","h":"#5193-keepname-配置","p":1569},{"i":1646,"t":"5.1.9.4 SplitCamelCase 配置","u":"/docs/dynamic-api-controller","h":"#5194-splitcamelcase-配置","p":1569},{"i":1648,"t":"5.1.9.5 KeepVerb 配置","u":"/docs/dynamic-api-controller","h":"#5195-keepverb-配置","p":1569},{"i":1650,"t":"5.1.9.6 Enabled 配置","u":"/docs/dynamic-api-controller","h":"#5196-enabled-配置","p":1569},{"i":1652,"t":"5.1.9.7 Module 配置","u":"/docs/dynamic-api-controller","h":"#5197-module-配置","p":1569},{"i":1654,"t":"5.1.9.8 Version 配置","u":"/docs/dynamic-api-controller","h":"#5198-version-配置","p":1569},{"i":1656,"t":"5.1.9.9 Groups 配置","u":"/docs/dynamic-api-controller","h":"#5199-groups-配置","p":1569},{"i":1658,"t":"5.1.9.10 Tag 配置","u":"/docs/dynamic-api-controller","h":"#51910-tag-配置","p":1569},{"i":1660,"t":"5.1.10 DynamicApiControllerSettings 配置","u":"/docs/dynamic-api-controller","h":"#5110-dynamicapicontrollersettings-配置","p":1569},{"i":1662,"t":"5.1.10.1 支持 Mvc 控制器 动态配置","u":"/docs/dynamic-api-controller","h":"#51101-支持-mvc-控制器-动态配置","p":1569},{"i":1664,"t":"5.1.11 关于 AOP 拦截","u":"/docs/dynamic-api-controller","h":"#5111-关于-aop-拦截","p":1569},{"i":1666,"t":"5.1.12 设置 api 超时请求时间","u":"/docs/dynamic-api-controller","h":"#5112-设置-api-超时请求时间","p":1569},{"i":1668,"t":"5.1.13 反馈与建议","u":"/docs/dynamic-api-controller","h":"#5113-反馈与建议","p":1569},{"i":1671,"t":"20.1 数据加解密","u":"/docs/encryption","h":"#201-数据加解密","p":1670},{"i":1673,"t":"20.2 内置加密算法","u":"/docs/encryption","h":"#202-内置加密算法","p":1670},{"i":1675,"t":"20.3 加解密使用","u":"/docs/encryption","h":"#203-加解密使用","p":1670},{"i":1676,"t":"20.3.1 MD5 加密","u":"/docs/encryption","h":"#2031-md5-加密","p":1670},{"i":1678,"t":"20.3.2 DESC 加解密","u":"/docs/encryption","h":"#2032-desc-加解密","p":1670},{"i":1680,"t":"20.3.3 AES 加解密","u":"/docs/encryption","h":"#2033-aes-加解密","p":1670},{"i":1682,"t":"20.3.4 JWT 加解密","u":"/docs/encryption","h":"#2034-jwt-加解密","p":1670},{"i":1684,"t":"20.3.5 PBKDF2 加密","u":"/docs/encryption","h":"#2035-pbkdf2-加密","p":1670},{"i":1686,"t":"20.3.6 RSA 加密","u":"/docs/encryption","h":"#2036-rsa-加密","p":1670},{"i":1688,"t":"20.4 字符串拓展方式","u":"/docs/encryption","h":"#204-字符串拓展方式","p":1670},{"i":1690,"t":"20.5 SM2、SM3,SM4 国密","u":"/docs/encryption","h":"#205-sm2sm3sm4-国密","p":1670},{"i":1692,"t":"20.6 反馈与建议","u":"/docs/encryption","h":"#206-反馈与建议","p":1670},{"i":1696,"t":"22.1 什么是事件总线","u":"/docs/event-bus-old","h":"#221-什么是事件总线","p":1694},{"i":1698,"t":"22.2 MessageCenter 消息中心","u":"/docs/event-bus-old","h":"#222-messagecenter-消息中心","p":1694},{"i":1700,"t":"22.2.1 注册 轻量级事件总线服务","u":"/docs/event-bus-old","h":"#2221-注册-轻量级事件总线服务","p":1694},{"i":1702,"t":"22.2.2 定义订阅处理程序","u":"/docs/event-bus-old","h":"#2222-定义订阅处理程序","p":1694},{"i":1704,"t":"22.2.3 发布消息","u":"/docs/event-bus-old","h":"#2223-发布消息","p":1694},{"i":1706,"t":"22.2.4 直接订阅消息","u":"/docs/event-bus-old","h":"#2224-直接订阅消息","p":1694},{"i":1708,"t":"22.3 同步方式执行","u":"/docs/event-bus-old","h":"#223-同步方式执行","p":1694},{"i":1710,"t":"22.4 关于依赖注入","u":"/docs/event-bus-old","h":"#224-关于依赖注入","p":1694},{"i":1712,"t":"22.5 反馈与建议","u":"/docs/event-bus-old","h":"#225-反馈与建议","p":1694},{"i":1716,"t":"31.1 关于文件系统","u":"/docs/file-provider","h":"#311-关于文件系统","p":1714},{"i":1718,"t":"31.1.1 文件系统类型","u":"/docs/file-provider","h":"#3111-文件系统类型","p":1714},{"i":1720,"t":"31.2 注册虚拟文件系统服务","u":"/docs/file-provider","h":"#312-注册虚拟文件系统服务","p":1714},{"i":1722,"t":"31.3 获取文件系统 IFileProvider 实例","u":"/docs/file-provider","h":"#313-获取文件系统-ifileprovider-实例","p":1714},{"i":1723,"t":"31.3.1 Func 方式","u":"/docs/file-provider","h":"#3131-funcfileprovidertypes-object-ifileprovider-方式","p":1714},{"i":1725,"t":"31.3.2 FS 静态类方式","u":"/docs/file-provider","h":"#3132-fs-静态类方式","p":1714},{"i":1727,"t":"31.4 IFileProvider 常见操作","u":"/docs/file-provider","h":"#314-ifileprovider-常见操作","p":1714},{"i":1728,"t":"31.4.1 读取文件内容","u":"/docs/file-provider","h":"#3141-读取文件内容","p":1714},{"i":1730,"t":"31.4.2 获取文件目录内容(需递归查找)","u":"/docs/file-provider","h":"#3142-获取文件目录内容需递归查找","p":1714},{"i":1732,"t":"31.4.4 监听文件变化","u":"/docs/file-provider","h":"#3144-监听文件变化","p":1714},{"i":1734,"t":"31.5 模块化静态资源配置","u":"/docs/file-provider","h":"#315-模块化静态资源配置","p":1714},{"i":1736,"t":"31.6 文件上传下载","u":"/docs/file-provider","h":"#316-文件上传下载","p":1714},{"i":1738,"t":"31.6.1 文件下载","u":"/docs/file-provider","h":"#3161-文件下载","p":1714},{"i":1740,"t":"31.6.2 文件上传","u":"/docs/file-provider","h":"#3162-文件上传","p":1714},{"i":1742,"t":"31.6.3 将 IFormFile 转 byte[]","u":"/docs/file-provider","h":"#3163-将-iformfile-转-byte","p":1714},{"i":1744,"t":"31.6.4 将 byte[] 输出为 Url 地址","u":"/docs/file-provider","h":"#3164-将-byte-输出为-url-地址","p":1714},{"i":1746,"t":"31.7 请求大小控制(上传文件大小控制)","u":"/docs/file-provider","h":"#317-请求大小控制上传文件大小控制","p":1714},{"i":1748,"t":"31.7.1 对特定的接口进行控制","u":"/docs/file-provider","h":"#3171-对特定的接口进行控制","p":1714},{"i":1750,"t":"31.7.2 对特定接口取消限制","u":"/docs/file-provider","h":"#3172-对特定接口取消限制","p":1714},{"i":1752,"t":"31.7.3 通用中间件进行控制","u":"/docs/file-provider","h":"#3173-通用中间件进行控制","p":1714},{"i":1754,"t":"31.7.4 全局配置","u":"/docs/file-provider","h":"#3174-全局配置","p":1714},{"i":1756,"t":"31.8 反馈与建议","u":"/docs/file-provider","h":"#318-反馈与建议","p":1714},{"i":1760,"t":"9.3.1 数据库实体","u":"/docs/entity","h":"#931-数据库实体","p":1758},{"i":1762,"t":"9.3.2 如何定义实体","u":"/docs/entity","h":"#932-如何定义实体","p":1758},{"i":1764,"t":"9.3.2.1 实体继承选用原则","u":"/docs/entity","h":"#9321-实体继承选用原则","p":1758},{"i":1766,"t":"9.3.2.2 IEntity 示范:","u":"/docs/entity","h":"#9322-ientity-示范","p":1758},{"i":1768,"t":"9.3.2.3 EntityBase 示范:","u":"/docs/entity","h":"#9323-entitybase-示范","p":1758},{"i":1770,"t":"9.3.2.4 Entity 示范:","u":"/docs/entity","h":"#9324-entity-示范","p":1758},{"i":1772,"t":"9.3.2.5 EntityNotKey 示范:","u":"/docs/entity","h":"#9325-entitynotkey-示范","p":1758},{"i":1774,"t":"9.3.3 自定义公共实体","u":"/docs/entity","h":"#933-自定义公共实体","p":1758},{"i":1776,"t":"9.3.4 数据库实体配置","u":"/docs/entity","h":"#934-数据库实体配置","p":1758},{"i":1778,"t":"9.3.4.1 在数据库实体中配置","u":"/docs/entity","h":"#9341-在数据库实体中配置","p":1758},{"i":1780,"t":"9.3.4.2 在任何实例类中配置","u":"/docs/entity","h":"#9342-在任何实例类中配置","p":1758},{"i":1782,"t":"9.3.5 数据库实体配置说明","u":"/docs/entity","h":"#935-数据库实体配置说明","p":1758},{"i":1784,"t":"9.3.6 配置列名及列类型","u":"/docs/entity","h":"#936-配置列名及列类型","p":1758},{"i":1786,"t":"9.3.7 配置数据库表名和 Schema","u":"/docs/entity","h":"#937-配置数据库表名和-schema","p":1758},{"i":1788,"t":"9.3.8 反馈与建议","u":"/docs/entity","h":"#938-反馈与建议","p":1758},{"i":1792,"t":"22.1 关于事件总线","u":"/docs/event-bus","h":"#221-关于事件总线","p":1790},{"i":1794,"t":"22.2 快速入门","u":"/docs/event-bus","h":"#222-快速入门","p":1790},{"i":1796,"t":"22.3 自定义事件源","u":"/docs/event-bus","h":"#223-自定义事件源","p":1790},{"i":1798,"t":"22.4 自定义事件源存储器","u":"/docs/event-bus","h":"#224-自定义事件源存储器","p":1790},{"i":1800,"t":"22.4.1 RabbitMQ 自定义指南","u":"/docs/event-bus","h":"#2241-rabbitmq-自定义指南","p":1790},{"i":1802,"t":"22.4.2 Kafka 自定义指南","u":"/docs/event-bus","h":"#2242-kafka-自定义指南","p":1790},{"i":1804,"t":"22.5 自定义事件发布者","u":"/docs/event-bus","h":"#225-自定义事件发布者","p":1790},{"i":1806,"t":"22.6 添加事件执行监视器","u":"/docs/event-bus","h":"#226-添加事件执行监视器","p":1790},{"i":1808,"t":"22.7 添加事件执行器","u":"/docs/event-bus","h":"#227-添加事件执行器","p":1790},{"i":1810,"t":"22.8 使用有作用域的服务","u":"/docs/event-bus","h":"#228-使用有作用域的服务","p":1790},{"i":1812,"t":"22.9 订阅执行任务意外异常","u":"/docs/event-bus","h":"#229-订阅执行任务意外异常","p":1790},{"i":1814,"t":"22.10 事件总线工厂","u":"/docs/event-bus","h":"#2210-事件总线工厂","p":1790},{"i":1816,"t":"22.11 MessageCenter 静态类","u":"/docs/event-bus","h":"#2211-messagecenter-静态类","p":1790},{"i":1818,"t":"22.12 配置重试失败回调","u":"/docs/event-bus","h":"#2212-配置重试失败回调","p":1790},{"i":1820,"t":"22.13 EventBusOptionsBuilder 配置","u":"/docs/event-bus","h":"#2213-eventbusoptionsbuilder-配置","p":1790},{"i":1822,"t":"22.14 关于高频消息处理方式","u":"/docs/event-bus","h":"#2214-关于高频消息处理方式","p":1790},{"i":1824,"t":"22.15 IIS 部署回收设置","u":"/docs/event-bus","h":"#2215-iis-部署回收设置","p":1790},{"i":1826,"t":"22.16 使用第三方事件总线 CAP 示例","u":"/docs/event-bus","h":"#2216-使用第三方事件总线-cap-示例","p":1790},{"i":1828,"t":"22.17 反馈与建议","u":"/docs/event-bus","h":"#2217-反馈与建议","p":1790},{"i":1831,"t":"7.1 什么是异常","u":"/docs/friendly-exception","h":"#71-什么是异常","p":1830},{"i":1833,"t":"7.2 处理异常方式","u":"/docs/friendly-exception","h":"#72-处理异常方式","p":1830},{"i":1835,"t":"7.3 什么是友好异常处理","u":"/docs/friendly-exception","h":"#73-什么是友好异常处理","p":1830},{"i":1836,"t":"7.3.1 非友好异常处理","u":"/docs/friendly-exception","h":"#731-非友好异常处理","p":1830},{"i":1838,"t":"7.3.2 友好异常处理","u":"/docs/friendly-exception","h":"#732-友好异常处理","p":1830},{"i":1840,"t":"7.4 友好异常处理使用示例","u":"/docs/friendly-exception","h":"#74-友好异常处理使用示例","p":1830},{"i":1842,"t":"7.4.1 注册友好异常服务","u":"/docs/friendly-exception","h":"#741-注册友好异常服务","p":1830},{"i":1844,"t":"7.4.2 两个例子","u":"/docs/friendly-exception","h":"#742-两个例子","p":1830},{"i":1846,"t":"7.5 关于 Oops.Oh","u":"/docs/friendly-exception","h":"#75-关于-oopsoh","p":1830},{"i":1848,"t":"7.5.1 为什么起这个名字?","u":"/docs/friendly-exception","h":"#751-为什么起这个名字","p":1830},{"i":1850,"t":"7.5.2 Oops.Oh 重载方法","u":"/docs/friendly-exception","h":"#752-oopsoh-重载方法","p":1830},{"i":1852,"t":"7.6 最佳实践 🤗","u":"/docs/friendly-exception","h":"#76-最佳实践-","p":1830},{"i":1854,"t":"7.6.1 创建异常信息类型","u":"/docs/friendly-exception","h":"#761-创建异常信息类型","p":1830},{"i":1856,"t":"7.6.2 关于 [ErrorCodeItemMetadata]","u":"/docs/friendly-exception","h":"#762-关于-errorcodeitemmetadata","p":1830},{"i":1858,"t":"7.6.3 静态异常类使用","u":"/docs/friendly-exception","h":"#763-静态异常类使用","p":1830},{"i":1860,"t":"7.6.4 异常方法重试","u":"/docs/friendly-exception","h":"#764-异常方法重试","p":1830},{"i":1862,"t":"7.6.5 更多例子","u":"/docs/friendly-exception","h":"#765-更多例子","p":1830},{"i":1864,"t":"7.7 多个异常信息类型","u":"/docs/friendly-exception","h":"#77-多个异常信息类型","p":1830},{"i":1866,"t":"7.8 IErrorCodeTypeProvider 提供器","u":"/docs/friendly-exception","h":"#78-ierrorcodetypeprovider-提供器","p":1830},{"i":1868,"t":"7.9 appsetting.json 中配置","u":"/docs/friendly-exception","h":"#79-appsettingjson-中配置","p":1830},{"i":1870,"t":"7.10 [IfException] 使用","u":"/docs/friendly-exception","h":"#710-ifexception-使用","p":1830},{"i":1872,"t":"7.10.1 使用示例","u":"/docs/friendly-exception","h":"#7101-使用示例","p":1830},{"i":1874,"t":"7.10.2 更多例子","u":"/docs/friendly-exception","h":"#7102-更多例子","p":1830},{"i":1876,"t":"7.11 异常消息优先级","u":"/docs/friendly-exception","h":"#711-异常消息优先级","p":1830},{"i":1878,"t":"7.12 多语言支持","u":"/docs/friendly-exception","h":"#712-多语言支持","p":1830},{"i":1880,"t":"7.13 规范化结果异常处理","u":"/docs/friendly-exception","h":"#713-规范化结果异常处理","p":1830},{"i":1882,"t":"7.14 全局异常处理提供器","u":"/docs/friendly-exception","h":"#714-全局异常处理提供器","p":1830},{"i":1884,"t":"7.15 FriendlyExceptionSettings 配置","u":"/docs/friendly-exception","h":"#715-friendlyexceptionsettings-配置","p":1830},{"i":1886,"t":"7.16 BadPageResult 错误页","u":"/docs/friendly-exception","h":"#716-badpageresult-错误页","p":1830},{"i":1888,"t":"7.17 反馈与建议","u":"/docs/friendly-exception","h":"#717-反馈与建议","p":1830},{"i":1891,"t":"5.3.1 关于筛选器","u":"/docs/filter","h":"#531-关于筛选器","p":1890},{"i":1893,"t":"5.3.2 应用场景","u":"/docs/filter","h":"#532-应用场景","p":1890},{"i":1895,"t":"5.3.2.1 筛选器优点","u":"/docs/filter","h":"#5321-筛选器优点","p":1890},{"i":1897,"t":"5.3.3 支持拦截应用","u":"/docs/filter","h":"#533-支持拦截应用","p":1890},{"i":1899,"t":"5.3.4 筛选器类型","u":"/docs/filter","h":"#534-筛选器类型","p":1890},{"i":1900,"t":"5.3.4.1 接口类型","u":"/docs/filter","h":"#5341-接口类型","p":1890},{"i":1902,"t":"5.3.4.2 特性 Attribute 类型","u":"/docs/filter","h":"#5342-特性-attribute-类型","p":1890},{"i":1904,"t":"5.3.5 筛选器注册","u":"/docs/filter","h":"#535-筛选器注册","p":1890},{"i":1906,"t":"5.3.5.1 在 Startup.cs 中注册","u":"/docs/filter","h":"#5351-在-startupcs-中注册","p":1890},{"i":1908,"t":"5.3.5.2 特性方式注册","u":"/docs/filter","h":"#5352-特性方式注册","p":1890},{"i":1910,"t":"5.3.6 授权筛选器","u":"/docs/filter","h":"#536-授权筛选器","p":1890},{"i":1912,"t":"5.3.6.1 接口定义方式","u":"/docs/filter","h":"#5361-接口定义方式","p":1890},{"i":1914,"t":"5.3.6.2 特性定义方式(组合)","u":"/docs/filter","h":"#5362-特性定义方式组合","p":1890},{"i":1916,"t":"5.3.7 资源筛选器","u":"/docs/filter","h":"#537-资源筛选器","p":1890},{"i":1918,"t":"5.3.7.1 接口定义方式","u":"/docs/filter","h":"#5371-接口定义方式","p":1890},{"i":1920,"t":"5.3.7.2 特性定义方式(组合)","u":"/docs/filter","h":"#5372-特性定义方式组合","p":1890},{"i":1922,"t":"5.3.8 操作筛选器","u":"/docs/filter","h":"#538-操作筛选器","p":1890},{"i":1924,"t":"5.3.8.1 接口定义方式","u":"/docs/filter","h":"#5381-接口定义方式","p":1890},{"i":1926,"t":"5.3.8.2 ActionFilterAttribute 方式","u":"/docs/filter","h":"#5382-actionfilterattribute-方式","p":1890},{"i":1928,"t":"5.3.8.3 特性定义方式(组合)","u":"/docs/filter","h":"#5383-特性定义方式组合","p":1890},{"i":1930,"t":"5.3.9 异常筛选器","u":"/docs/filter","h":"#539-异常筛选器","p":1890},{"i":1932,"t":"5.3.9.1 接口定义方式","u":"/docs/filter","h":"#5391-接口定义方式","p":1890},{"i":1934,"t":"5.3.9.2 ExceptionFilterAttribute 方式","u":"/docs/filter","h":"#5392-exceptionfilterattribute-方式","p":1890},{"i":1936,"t":"5.3.9.3 特性定义方式(组合)","u":"/docs/filter","h":"#5393-特性定义方式组合","p":1890},{"i":1938,"t":"5.3.10 结果筛选器","u":"/docs/filter","h":"#5310-结果筛选器","p":1890},{"i":1940,"t":"5.3.10.1 接口定义方式","u":"/docs/filter","h":"#53101-接口定义方式","p":1890},{"i":1942,"t":"5.3.10.2 ResultFilterAttribute 方式","u":"/docs/filter","h":"#53102-resultfilterattribute-方式","p":1890},{"i":1944,"t":"5.3.10.3 特性定义方式(组合)","u":"/docs/filter","h":"#53103-特性定义方式组合","p":1890},{"i":1946,"t":"5.3.10.4 IAlwaysRunResultFilter","u":"/docs/filter","h":"#53104-ialwaysrunresultfilter","p":1890},{"i":1948,"t":"5.3.11 RazorPages 筛选器","u":"/docs/filter","h":"#5311-razorpages-筛选器","p":1890},{"i":1950,"t":"5.3.11.1 接口定义方式","u":"/docs/filter","h":"#53111-接口定义方式","p":1890},{"i":1952,"t":"5.3.11.2 ResultFilterAttribute 方式","u":"/docs/filter","h":"#53112-resultfilterattribute-方式","p":1890},{"i":1954,"t":"5.3.12 筛选器取消和短路","u":"/docs/filter","h":"#5312-筛选器取消和短路","p":1890},{"i":1956,"t":"5.3.13 筛选器执行顺序控制","u":"/docs/filter","h":"#5313-筛选器执行顺序控制","p":1890},{"i":1958,"t":"5.3.13.1 不同类型筛选器执行顺序","u":"/docs/filter","h":"#53131-不同类型筛选器执行顺序","p":1890},{"i":1960,"t":"5.3.13.2 相同类型筛选器执行顺序","u":"/docs/filter","h":"#53132-相同类型筛选器执行顺序","p":1890},{"i":1962,"t":"5.3.4 筛选器依赖注入","u":"/docs/filter","h":"#534-筛选器依赖注入","p":1890},{"i":1964,"t":"5.3.15 了解更多","u":"/docs/filter","h":"#5315-了解更多","p":1890},{"i":1966,"t":"5.3.16 反馈与建议","u":"/docs/filter","h":"#5316-反馈与建议","p":1890},{"i":1970,"t":"2.1 创建 Web 项目","u":"/docs/get-start","h":"#21-创建-web-项目","p":1968},{"i":1972,"t":"2.1.1 创建 ASP.NET Core Web 应用程序","u":"/docs/get-start","h":"#211-创建-aspnet-core-web-应用程序","p":1968},{"i":1974,"t":"2.2 添加 Furion 依赖包","u":"/docs/get-start","h":"#22-添加-furion-依赖包","p":1968},{"i":1975,"t":"2.3 Furion 基本配置","u":"/docs/get-start","h":"#23-furion-基本配置","p":1968},{"i":1976,"t":"2.3.1 Program.cs 添加 Inject()","u":"/docs/get-start","h":"#231-programcs-添加-inject","p":1968},{"i":1978,"t":"2.3.2 在 Startup.cs 中添加两个 Inject()","u":"/docs/get-start","h":"#232-在-startupcs-中添加两个-inject","p":1968},{"i":1980,"t":"2.4 启动浏览器","u":"/docs/get-start","h":"#24-启动浏览器","p":1968},{"i":1984,"t":"2.1 创建 Web 项目","u":"/docs/get-start-net6","h":"#21-创建-web-项目","p":1982},{"i":1986,"t":"2.1.1 创建 ASP.NET Core Web 应用程序","u":"/docs/get-start-net6","h":"#211-创建-aspnet-core-web-应用程序","p":1982},{"i":1988,"t":"2.2 添加 Furion 依赖包","u":"/docs/get-start-net6","h":"#22-添加-furion-依赖包","p":1982},{"i":1989,"t":"2.3 Furion 基本配置","u":"/docs/get-start-net6","h":"#23-furion-基本配置","p":1982},{"i":1990,"t":"2.3.1 Program.cs 添加 Inject()","u":"/docs/get-start-net6","h":"#231-programcs-添加-inject","p":1982},{"i":1992,"t":"2.4 启动浏览器","u":"/docs/get-start-net6","h":"#24-启动浏览器","p":1982},{"i":1994,"t":"2.5 WebApplication 说明 🎃","u":"/docs/get-start-net6","h":"#25-webapplication-说明-","p":1982},{"i":1997,"t":"3.1 验证对象数据","u":"/docs/global/datavalidator","h":"#31-验证对象数据","p":1996},{"i":1999,"t":"3.2 验证单个值","u":"/docs/global/datavalidator","h":"#32-验证单个值","p":1996},{"i":2001,"t":"3.3 正则表达式验证单个值","u":"/docs/global/datavalidator","h":"#33-正则表达式验证单个值","p":1996},{"i":2003,"t":"3.4 验证类型验证单个值","u":"/docs/global/datavalidator","h":"#34-验证类型验证单个值","p":1996},{"i":2007,"t":"2.1 创建 Web 项目","u":"/docs/get-start-net7","h":"#21-创建-web-项目","p":2005},{"i":2009,"t":"2.1.1 创建 ASP.NET Core Web 应用程序","u":"/docs/get-start-net7","h":"#211-创建-aspnet-core-web-应用程序","p":2005},{"i":2011,"t":"2.2 添加 Furion 依赖包","u":"/docs/get-start-net7","h":"#22-添加-furion-依赖包","p":2005},{"i":2012,"t":"2.3 Furion 基本配置","u":"/docs/get-start-net7","h":"#23-furion-基本配置","p":2005},{"i":2013,"t":"2.3.1 Program.cs 添加 Inject()","u":"/docs/get-start-net7","h":"#231-programcs-添加-inject","p":2005},{"i":2015,"t":"2.4 启动浏览器","u":"/docs/get-start-net7","h":"#24-启动浏览器","p":2005},{"i":2017,"t":"2.5 WebApplication 说明 🎃","u":"/docs/get-start-net7","h":"#25-webapplication-说明-","p":2005},{"i":2020,"t":"1.1 获取全局配置","u":"/docs/global/app","h":"#11-获取全局配置","p":2019},{"i":2022,"t":"1.2 获取配置对象","u":"/docs/global/app","h":"#12-获取配置对象","p":2019},{"i":2024,"t":"1.3 获取环境对象","u":"/docs/global/app","h":"#13-获取环境对象","p":2019},{"i":2026,"t":"1.4 获取项目所有程序集","u":"/docs/global/app","h":"#14-获取项目所有程序集","p":2019},{"i":2028,"t":"1.5 获取项目所有有效类型","u":"/docs/global/app","h":"#15-获取项目所有有效类型","p":2019},{"i":2030,"t":"1.6 获取 HttpContext","u":"/docs/global/app","h":"#16-获取-httpcontext","p":2019},{"i":2032,"t":"1.7 获取登录的 User 对象","u":"/docs/global/app","h":"#17-获取登录的-user-对象","p":2019},{"i":2034,"t":"1.8 获取服务提供器","u":"/docs/global/app","h":"#18-获取服务提供器","p":2019},{"i":2036,"t":"1.9 解析服务","u":"/docs/global/app","h":"#19-解析服务","p":2019},{"i":2038,"t":"1.10 获取选项配置","u":"/docs/global/app","h":"#110-获取选项配置","p":2019},{"i":2040,"t":"1.11 打印数据到 MiniProfiler","u":"/docs/global/app","h":"#111-打印数据到-miniprofiler","p":2019},{"i":2042,"t":"1.12 获取应用名称","u":"/docs/global/app","h":"#112-获取应用名称","p":2019},{"i":2044,"t":"1.13 获取启动项目根目录","u":"/docs/global/app","h":"#113-获取启动项目根目录","p":2019},{"i":2046,"t":"1.14 获取网站根目录 wwwroot 目录","u":"/docs/global/app","h":"#114-获取网站根目录-wwwroot-目录","p":2019},{"i":2048,"t":"1.15 获取启动项目所在程序集","u":"/docs/global/app","h":"#115-获取启动项目所在程序集","p":2019},{"i":2050,"t":"1.16 获取启动项目 bin 目录","u":"/docs/global/app","h":"#116-获取启动项目-bin-目录","p":2019},{"i":2052,"t":"1.17 获取环境变量名","u":"/docs/global/app","h":"#117-获取环境变量名","p":2019},{"i":2054,"t":"1.18 判断系统环境","u":"/docs/global/app","h":"#118-判断系统环境","p":2019},{"i":2056,"t":"1.19 获取服务器信息","u":"/docs/global/app","h":"#119-获取服务器信息","p":2019},{"i":2058,"t":"1.20 获取框架底层所有未托管对象","u":"/docs/global/app","h":"#120-获取框架底层所有未托管对象","p":2019},{"i":2060,"t":"1.21 手动释放非托管对象","u":"/docs/global/app","h":"#121-手动释放非托管对象","p":2019},{"i":2062,"t":"1.22 判断是否是单文件环境","u":"/docs/global/app","h":"#122-判断是否是单文件环境","p":2019},{"i":2064,"t":"1.23 解析命令行参数","u":"/docs/global/app","h":"#123-解析命令行参数","p":2019},{"i":2068,"t":"10.1 获取序列化提供器","u":"/docs/global/json","h":"#101-获取序列化提供器","p":2066},{"i":2070,"t":"10.2 序列化","u":"/docs/global/json","h":"#102-序列化","p":2066},{"i":2072,"t":"10.3 反序列化","u":"/docs/global/json","h":"#103-反序列化","p":2066},{"i":2074,"t":"10.4 获取全局配置","u":"/docs/global/json","h":"#104-获取全局配置","p":2066},{"i":2078,"t":"7.1 序列化","u":"/docs/global/jsonserializer","h":"#71-序列化","p":2076},{"i":2080,"t":"7.2 反序列化","u":"/docs/global/jsonserializer","h":"#72-反序列化","p":2076},{"i":2082,"t":"7.3 获取默认序列化配置","u":"/docs/global/jsonserializer","h":"#73-获取默认序列化配置","p":2076},{"i":2084,"t":"7.4 设置序列化属性首字母大写","u":"/docs/global/jsonserializer","h":"#74-设置序列化属性首字母大写","p":2076},{"i":2086,"t":"7.5 设置时间输出统一格式化","u":"/docs/global/jsonserializer","h":"#75-设置时间输出统一格式化","p":2076},{"i":2089,"t":"13.1 获取物理文件提供器","u":"/docs/global/fs","h":"#131-获取物理文件提供器","p":2088},{"i":2091,"t":"13.2 获取嵌入资源文件提供器","u":"/docs/global/fs","h":"#132-获取嵌入资源文件提供器","p":2088},{"i":2093,"t":"13.3 获取文件提供器","u":"/docs/global/fs","h":"#133-获取文件提供器","p":2088},{"i":2095,"t":"13.4 特别注意","u":"/docs/global/fs","h":"#134-特别注意","p":2088},{"i":2097,"t":"13.5 获取文件 ContentType 或 Mime","u":"/docs/global/fs","h":"#135-获取文件-contenttype-或-mime","p":2088},{"i":2099,"t":"13.6 解决不受支持的文件 MIME 类型","u":"/docs/global/fs","h":"#136-解决不受支持的文件-mime-类型","p":2088},{"i":2102,"t":"2.1 获取非泛型仓储","u":"/docs/global/db","h":"#21-获取非泛型仓储","p":2101},{"i":2104,"t":"2.2 获取泛型仓储","u":"/docs/global/db","h":"#22-获取泛型仓储","p":2101},{"i":2106,"t":"2.3 获取带定位器泛型仓储","u":"/docs/global/db","h":"#23-获取带定位器泛型仓储","p":2101},{"i":2108,"t":"2.4 获取 Sql 仓储","u":"/docs/global/db","h":"#24-获取-sql-仓储","p":2101},{"i":2110,"t":"2.5 获取 Sql 定位器仓储","u":"/docs/global/db","h":"#25-获取-sql-定位器仓储","p":2101},{"i":2112,"t":"2.6 获取 Sql 代理对象","u":"/docs/global/db","h":"#26-获取-sql-代理对象","p":2101},{"i":2114,"t":"2.7 获取默认数据库上下文","u":"/docs/global/db","h":"#27-获取默认数据库上下文","p":2101},{"i":2116,"t":"2.8 获取定位器数据库上下文","u":"/docs/global/db","h":"#28-获取定位器数据库上下文","p":2101},{"i":2118,"t":"2.9 创建新的默认数据库上下文","u":"/docs/global/db","h":"#29-创建新的默认数据库上下文","p":2101},{"i":2120,"t":"2.10 创建新的定位器数据库上下文","u":"/docs/global/db","h":"#210-创建新的定位器数据库上下文","p":2101},{"i":2122,"t":"2.11 根据定位器类型获取仓储","u":"/docs/global/db","h":"#211-根据定位器类型获取仓储","p":2101},{"i":2124,"t":"2.12 获取 主从库 仓储","u":"/docs/global/db","h":"#212-获取-主从库-仓储","p":2101},{"i":2126,"t":"2.13 获取 Sql 主库定位器仓储","u":"/docs/global/db","h":"#213-获取-sql-主库定位器仓储","p":2101},{"i":2128,"t":"2.14 获取特定定位器仓储","u":"/docs/global/db","h":"#214-获取特定定位器仓储","p":2101},{"i":2131,"t":"14.1 生成 Token","u":"/docs/global/jwt","h":"#141-生成-token","p":2130},{"i":2133,"t":"14.2 生成刷新 Token","u":"/docs/global/jwt","h":"#142-生成刷新-token","p":2130},{"i":2135,"t":"14.3 根据过期 Token 交换新 Token","u":"/docs/global/jwt","h":"#143-根据过期-token-交换新-token","p":2130},{"i":2137,"t":"14.4 授权处理程序自动刷新 Token","u":"/docs/global/jwt","h":"#144-授权处理程序自动刷新-token","p":2130},{"i":2139,"t":"14.5 验证 Token 有效性","u":"/docs/global/jwt","h":"#145-验证-token-有效性","p":2130},{"i":2141,"t":"14.6 验证请求中 Token 有效性","u":"/docs/global/jwt","h":"#146-验证请求中-token-有效性","p":2130},{"i":2143,"t":"14.7 读取 Token 信息(不含验证)","u":"/docs/global/jwt","h":"#147-读取-token-信息不含验证","p":2130},{"i":2146,"t":"8.1 转换文本多语言","u":"/docs/global/l","h":"#81-转换文本多语言","p":2145},{"i":2148,"t":"8.2 转换 Html 多语言","u":"/docs/global/l","h":"#82-转换-html-多语言","p":2145},{"i":2150,"t":"8.3 设置当前语言","u":"/docs/global/l","h":"#83-设置当前语言","p":2145},{"i":2152,"t":"8.4 获取系统语言列表","u":"/docs/global/l","h":"#84-获取系统语言列表","p":2145},{"i":2154,"t":"8.5 获取当前选中语言","u":"/docs/global/l","h":"#85-获取当前选中语言","p":2145},{"i":2157,"t":"9.1 动态订阅消息","u":"/docs/global/messagecenter","h":"#91-动态订阅消息","p":2156},{"i":2159,"t":"9.2 发送消息","u":"/docs/global/messagecenter","h":"#92-发送消息","p":2156},{"i":2161,"t":"9.3 取消订阅","u":"/docs/global/messagecenter","h":"#93-取消订阅","p":2156},{"i":2164,"t":"5.1 创建一个表达式","u":"/docs/global/linqexpression","h":"#51-创建一个表达式","p":2163},{"i":2166,"t":"5.2 拼接两个表达式","u":"/docs/global/linqexpression","h":"#52-拼接两个表达式","p":2163},{"i":2170,"t":"16.1 常见操作","u":"/docs/global/log","h":"#161-常见操作","p":2168},{"i":2174,"t":"17.1 启动调度作业服务","u":"/docs/global/schedular","h":"#171-启动调度作业服务","p":2172},{"i":2176,"t":"17.2 获取作业调度计划工厂","u":"/docs/global/schedular","h":"#172-获取作业调度计划工厂","p":2172},{"i":2178,"t":"17.3 获取作业","u":"/docs/global/schedular","h":"#173-获取作业","p":2172},{"i":2181,"t":"11.1 创建一个依赖注入作用域范围","u":"/docs/global/scoped","h":"#111-创建一个依赖注入作用域范围","p":2180},{"i":2183,"t":"11.2 创建一个带工作单元的作用域","u":"/docs/global/scoped","h":"#112-创建一个带工作单元的作用域","p":2180},{"i":2185,"t":"11.3 创建一个依赖注入作用域范围(带返回值)","u":"/docs/global/scoped","h":"#113-创建一个依赖注入作用域范围带返回值","p":2180},{"i":2187,"t":"11.4 创建一个带工作单元的作用域(带返回值)","u":"/docs/global/scoped","h":"#114-创建一个带工作单元的作用域带返回值","p":2180},{"i":2190,"t":"4.1 抛出字符串异常","u":"/docs/global/oops","h":"#41-抛出字符串异常","p":2189},{"i":2192,"t":"4.2 指定类型的异常","u":"/docs/global/oops","h":"#42-指定类型的异常","p":2189},{"i":2194,"t":"4.3 状态码异常","u":"/docs/global/oops","h":"#43-状态码异常","p":2189},{"i":2196,"t":"4.4 状态码异常","u":"/docs/global/oops","h":"#44-状态码异常","p":2189},{"i":2198,"t":"4.5 异常方法重试","u":"/docs/global/oops","h":"#45-异常方法重试","p":2189},{"i":2200,"t":"4.6 抛出业务异常","u":"/docs/global/oops","h":"#46-抛出业务异常","p":2189},{"i":2203,"t":"6.1 获取远程代理服务","u":"/docs/global/shttp","h":"#61-获取远程代理服务","p":2202},{"i":2207,"t":"12.1 初始化任务","u":"/docs/global/sparetime","h":"#121-初始化任务","p":2205},{"i":2209,"t":"12.2 实现后台执行","u":"/docs/global/sparetime","h":"#122-实现后台执行","p":2205},{"i":2211,"t":"12.3 开始一个任务","u":"/docs/global/sparetime","h":"#123-开始一个任务","p":2205},{"i":2213,"t":"12.4 暂停一个任务","u":"/docs/global/sparetime","h":"#124-暂停一个任务","p":2205},{"i":2215,"t":"12.5 取消一个任务","u":"/docs/global/sparetime","h":"#125-取消一个任务","p":2205},{"i":2217,"t":"12.6 销毁所有任务","u":"/docs/global/sparetime","h":"#126-销毁所有任务","p":2205},{"i":2219,"t":"12.7 获取所有任务","u":"/docs/global/sparetime","h":"#127-获取所有任务","p":2205},{"i":2221,"t":"12.8 获取单个任务","u":"/docs/global/sparetime","h":"#128-获取单个任务","p":2205},{"i":2223,"t":"12.9 解析 Cron 表达式","u":"/docs/global/sparetime","h":"#129-解析-cron-表达式","p":2205},{"i":2225,"t":"12.10 BackgroundService 间隔定时任务","u":"/docs/global/sparetime","h":"#1210-backgroundservice-间隔定时任务","p":2205},{"i":2227,"t":"12.11 BackgroundService Cron 定时任务","u":"/docs/global/sparetime","h":"#1211-backgroundservice-cron-定时任务","p":2205},{"i":2230,"t":"5.2.1 关于 HttpContext","u":"/docs/httpcontext","h":"#521-关于-httpcontext","p":2229},{"i":2232,"t":"5.2.2 获取 HttpContext","u":"/docs/httpcontext","h":"#522-获取-httpcontext","p":2229},{"i":2234,"t":"5.2.2.1 在 ControllerBase 派生类中","u":"/docs/httpcontext","h":"#5221-在-controllerbase-派生类中","p":2229},{"i":2236,"t":"5.2.2.2 注入 IHttpContextAccessor","u":"/docs/httpcontext","h":"#5222-注入-ihttpcontextaccessor","p":2229},{"i":2238,"t":"5.2.2.3 通过 App.HttpContext","u":"/docs/httpcontext","h":"#5223-通过-apphttpcontext","p":2229},{"i":2240,"t":"5.2.3 HttpContext 拓展方法","u":"/docs/httpcontext","h":"#523-httpcontext-拓展方法","p":2229},{"i":2242,"t":"5.2.3.1 获取当前请求的特性 Attribute","u":"/docs/httpcontext","h":"#5231-获取当前请求的特性-attribute","p":2229},{"i":2244,"t":"5.2.3.2 设置 Swagger 自动授权","u":"/docs/httpcontext","h":"#5232-设置-swagger-自动授权","p":2229},{"i":2246,"t":"5.2.3.3 退出 Swagger 授权","u":"/docs/httpcontext","h":"#5233-退出-swagger-授权","p":2229},{"i":2248,"t":"5.2.3.4 获取本地 IP 地址","u":"/docs/httpcontext","h":"#5234-获取本地-ip-地址","p":2229},{"i":2250,"t":"5.2.3.5 获取客户端 IP 地址","u":"/docs/httpcontext","h":"#5235-获取客户端-ip-地址","p":2229},{"i":2252,"t":"5.2.3.6 设置响应头 Token","u":"/docs/httpcontext","h":"#5236-设置响应头-token","p":2229},{"i":2254,"t":"5.2.4 读取 Body 内容(重复读)","u":"/docs/httpcontext","h":"#524-读取-body-内容重复读","p":2229},{"i":2256,"t":"5.2.5 反馈与建议","u":"/docs/httpcontext","h":"#525-反馈与建议","p":2229},{"i":2260,"t":"15.1 生成规范的日志模板","u":"/docs/global/tp","h":"#151-生成规范的日志模板","p":2258},{"i":2263,"t":"2.4.1 Inject 设计","u":"/docs/inject","h":"#241-inject-设计","p":2262},{"i":2265,"t":"2.4.2 Inject 方法有哪些","u":"/docs/inject","h":"#242-inject-方法有哪些","p":2262},{"i":2267,"t":"2.4.3 在 Program.cs 中使用","u":"/docs/inject","h":"#243-在-programcs-中使用","p":2262},{"i":2268,"t":"2.4.3.1 Inject() 方法","u":"/docs/inject","h":"#2431-inject-方法","p":2262},{"i":2270,"t":"2.4.4 Startup.ConfigureServices 使用","u":"/docs/inject","h":"#244-startupconfigureservices-使用","p":2262},{"i":2271,"t":"2.4.4.1 AddInject() 方法","u":"/docs/inject","h":"#2441-addinject-方法","p":2262},{"i":2273,"t":"2.4.4.2 AddInjectBase() 方法","u":"/docs/inject","h":"#2442-addinjectbase-方法","p":2262},{"i":2275,"t":"2.4.4.3 AddInjectMini() 方法","u":"/docs/inject","h":"#2443-addinjectmini-方法","p":2262},{"i":2277,"t":"2.4.4.4 AddInjectWithUnifyResult() 方法","u":"/docs/inject","h":"#2444-addinjectwithunifyresult-方法","p":2262},{"i":2279,"t":"2.4.5 Startup.Configure 使用","u":"/docs/inject","h":"#245-startupconfigure-使用","p":2262},{"i":2280,"t":"2.4.5.1 UseInject() 方法","u":"/docs/inject","h":"#2451-useinject-方法","p":2262},{"i":2282,"t":"2.4.5.2 UseInjectBase() 方法","u":"/docs/inject","h":"#2452-useinjectbase-方法","p":2262},{"i":2284,"t":"2.4.6 配置 Inject() 默认注册服务","u":"/docs/inject","h":"#246-配置-inject-默认注册服务","p":2262},{"i":2286,"t":"2.4.7 反馈与建议","u":"/docs/inject","h":"#247-反馈与建议","p":2262},{"i":2289,"t":"2.6.1 关于 GlobalUsing","u":"/docs/globalusing","h":"#261-关于-globalusing","p":2288},{"i":2291,"t":"2.6.2 必要配置","u":"/docs/globalusing","h":"#262-必要配置","p":2288},{"i":2293,"t":"2.6.3 基本使用","u":"/docs/globalusing","h":"#263-基本使用","p":2288},{"i":2295,"t":"2.6.3.1 默认全局 using","u":"/docs/globalusing","h":"#2631-默认全局-using","p":2288},{"i":2297,"t":"2.6.4 .NET5 项目开启支持","u":"/docs/globalusing","h":"#264-net5-项目开启支持","p":2288},{"i":2299,"t":"2.6.5 反馈与建议","u":"/docs/globalusing","h":"#265-反馈与建议","p":2288},{"i":2302,"t":"33.1 什么是 IPC","u":"/docs/ipc","h":"#331-什么是-ipc","p":2301},{"i":2304,"t":"33.2 实现 IPC 通信方式","u":"/docs/ipc","h":"#332-实现-ipc-通信方式","p":2301},{"i":2306,"t":"33.3 IPC 通信模式","u":"/docs/ipc","h":"#333-ipc-通信模式","p":2301},{"i":2308,"t":"33.4 进程内通信(线程间)","u":"/docs/ipc","h":"#334-进程内通信线程间","p":2301},{"i":2310,"t":"33.4.1 了解 Channel","u":"/docs/ipc","h":"#3341-了解-channel","p":2301},{"i":2312,"t":"33.4.2 常规使用","u":"/docs/ipc","h":"#3342-常规使用","p":2301},{"i":2314,"t":"33.4.3 实现多订阅","u":"/docs/ipc","h":"#3343-实现多订阅","p":2301},{"i":2316,"t":"33.4.4 更多 Channel 知识","u":"/docs/ipc","h":"#3344-更多-channel-知识","p":2301},{"i":2318,"t":"33.4.5 CallContext 方式","u":"/docs/ipc","h":"#3345-callcontext-方式","p":2301},{"i":2320,"t":"34.5 进程外通信(共享内存)","u":"/docs/ipc","h":"#345-进程外通信共享内存","p":2301},{"i":2322,"t":"33.6 反馈与建议","u":"/docs/ipc","h":"#336-反馈与建议","p":2301},{"i":2325,"t":"27.1 为什么需要分布式 ID","u":"/docs/idgenerator","h":"#271-为什么需要分布式-id","p":2324},{"i":2327,"t":"27.2 分布式 ID 有哪些","u":"/docs/idgenerator","h":"#272-分布式-id-有哪些","p":2324},{"i":2329,"t":"27.3 如何使用","u":"/docs/idgenerator","h":"#273-如何使用","p":2324},{"i":2330,"t":"27.3.1 连续 GUID 方式","u":"/docs/idgenerator","h":"#2731-连续-guid-方式","p":2324},{"i":2332,"t":"27.3.2 短 ID","u":"/docs/idgenerator","h":"#2732-短-id","p":2324},{"i":2334,"t":"27.3.3 雪花算法 ID","u":"/docs/idgenerator","h":"#2733-雪花算法-id","p":2324},{"i":2336,"t":"27.4 反馈与建议","u":"/docs/idgenerator","h":"#274-反馈与建议","p":2324},{"i":2340,"t":"23.1 什么是 JSON","u":"/docs/json-serialization","h":"#231-什么是-json","p":2338},{"i":2342,"t":"23.2 关于序列化库","u":"/docs/json-serialization","h":"#232-关于序列化库","p":2338},{"i":2344,"t":"23.3 IJsonSerializerProvider 接口","u":"/docs/json-serialization","h":"#233-ijsonserializerprovider-接口","p":2338},{"i":2346,"t":"23.4 如何使用","u":"/docs/json-serialization","h":"#234-如何使用","p":2338},{"i":2347,"t":"23.4.1 获取序列化对象","u":"/docs/json-serialization","h":"#2341-获取序列化对象","p":2338},{"i":2349,"t":"23.4.2 序列化对象","u":"/docs/json-serialization","h":"#2342-序列化对象","p":2338},{"i":2351,"t":"23.4.3 反序列化字符串","u":"/docs/json-serialization","h":"#2343-反序列化字符串","p":2338},{"i":2353,"t":"23.4.4 序列化更多配置","u":"/docs/json-serialization","h":"#2344-序列化更多配置","p":2338},{"i":2355,"t":"23.5 高级用法","u":"/docs/json-serialization","h":"#235-高级用法","p":2338},{"i":2356,"t":"23.5.1 自定义序列化提供器","u":"/docs/json-serialization","h":"#2351-自定义序列化提供器","p":2338},{"i":2358,"t":"23.5.2 序列化属性名大写(属性原样输出)","u":"/docs/json-serialization","h":"#2352-序列化属性名大写属性原样输出","p":2338},{"i":2360,"t":"23.5.3 时间格式化","u":"/docs/json-serialization","h":"#2353-时间格式化","p":2338},{"i":2362,"t":"23.5.4 忽略循环引用","u":"/docs/json-serialization","h":"#2354-忽略循环引用","p":2338},{"i":2364,"t":"23.5.5 包含成员字段序列化","u":"/docs/json-serialization","h":"#2355-包含成员字段序列化","p":2338},{"i":2366,"t":"23.5.6 允许尾随逗号","u":"/docs/json-serialization","h":"#2356-允许尾随逗号","p":2338},{"i":2368,"t":"23.5.7 允许注释","u":"/docs/json-serialization","h":"#2357-允许注释","p":2338},{"i":2370,"t":"23.5.8 处理乱码问题","u":"/docs/json-serialization","h":"#2358-处理乱码问题","p":2338},{"i":2372,"t":"23.5.9 不区分大小写","u":"/docs/json-serialization","h":"#2359-不区分大小写","p":2338},{"i":2374,"t":"23.5.10 忽略特定属性序列化","u":"/docs/json-serialization","h":"#23510-忽略特定属性序列化","p":2338},{"i":2376,"t":"23.5.11 动态对象属性名大写问题","u":"/docs/json-serialization","h":"#23511-动态对象属性名大写问题","p":2338},{"i":2378,"t":"23.5.12 long 类型序列化时转 string","u":"/docs/json-serialization","h":"#23512-long-类型序列化时转-string","p":2338},{"i":2380,"t":"23.5.13 DateOnly 和 TimeOnly 类型序列化支持","u":"/docs/json-serialization","h":"#23513-dateonly-和-timeonly-类型序列化支持","p":2338},{"i":2382,"t":"23.5.14 DateTimeOffset 反序列化异常","u":"/docs/json-serialization","h":"#23514-datetimeoffset-反序列化异常","p":2338},{"i":2384,"t":"23.6 DataTable、DataSet、Tuple 元组等序列化问题","u":"/docs/json-serialization","h":"#236-datatabledatasettuple-元组等序列化问题","p":2338},{"i":2386,"t":"23.7 System.Text.Json 和 Newtonsoft.Json 完整差异化对比","u":"/docs/json-serialization","h":"#237-systemtextjson-和-newtonsoftjson-完整差异化对比","p":2338},{"i":2388,"t":"23.8 反馈与建议","u":"/docs/json-serialization","h":"#238-反馈与建议","p":2338},{"i":2392,"t":"26.1 关于定时任务","u":"/docs/job-old","h":"#261-关于定时任务","p":2390},{"i":2394,"t":"26.2 如何实现","u":"/docs/job-old","h":"#262-如何实现","p":2390},{"i":2396,"t":"26.3 缓隔方式使用","u":"/docs/job-old","h":"#263-缓隔方式使用","p":2390},{"i":2397,"t":"26.3.1 特定时间后执行","u":"/docs/job-old","h":"#2631-特定时间后执行","p":2390},{"i":2399,"t":"26.3.2 配置任务信息","u":"/docs/job-old","h":"#2632-配置任务信息","p":2390},{"i":2401,"t":"26.3.3 手动启动执行","u":"/docs/job-old","h":"#2633-手动启动执行","p":2390},{"i":2403,"t":"26.3.4 模拟后台执行","u":"/docs/job-old","h":"#2634-模拟后台执行","p":2390},{"i":2405,"t":"26.3.5 ISpareTimeWorker 方式","u":"/docs/job-old","h":"#2635-isparetimeworker-方式","p":2390},{"i":2407,"t":"26.4 间隔方式使用","u":"/docs/job-old","h":"#264-间隔方式使用","p":2390},{"i":2408,"t":"26.4.1 每隔一段时间执行","u":"/docs/job-old","h":"#2641-每隔一段时间执行","p":2390},{"i":2410,"t":"26.4.2 配置任务信息","u":"/docs/job-old","h":"#2642-配置任务信息","p":2390},{"i":2412,"t":"26.4.3 手动启动执行","u":"/docs/job-old","h":"#2643-手动启动执行","p":2390},{"i":2414,"t":"26.4.4 ISpareTimeWorker 方式","u":"/docs/job-old","h":"#2644-isparetimeworker-方式","p":2390},{"i":2416,"t":"26.5 Cron 表达式使用","u":"/docs/job-old","h":"#265-cron-表达式使用","p":2390},{"i":2417,"t":"26.5.1 什么是 Cron 表达式","u":"/docs/job-old","h":"#2651-什么是-cron-表达式","p":2390},{"i":2419,"t":"26.5.2 常见 Cron 表达式","u":"/docs/job-old","h":"#2652-常见-cron-表达式","p":2390},{"i":2421,"t":"26.5.3 在线生成 Cron 表达式","u":"/docs/job-old","h":"#2653-在线生成-cron-表达式","p":2390},{"i":2423,"t":"26.5.4 Macro 标识符","u":"/docs/job-old","h":"#2654-macro-标识符","p":2390},{"i":2425,"t":"26.5.5 使用 Cron 表达式","u":"/docs/job-old","h":"#2655-使用-cron-表达式","p":2390},{"i":2427,"t":"26.5.6 使用 Macro 占位符","u":"/docs/job-old","h":"#2656-使用-macro-占位符","p":2390},{"i":2429,"t":"26.5.7 配置任务信息","u":"/docs/job-old","h":"#2657-配置任务信息","p":2390},{"i":2431,"t":"26.5.8 手动启动执行","u":"/docs/job-old","h":"#2658-手动启动执行","p":2390},{"i":2433,"t":"26.5.9 ISpareTimeWorker 方式","u":"/docs/job-old","h":"#2659-isparetimeworker-方式","p":2390},{"i":2435,"t":"26.6 自定义下次执行时间","u":"/docs/job-old","h":"#266-自定义下次执行时间","p":2390},{"i":2437,"t":"26.6.1 高级自定义间隔方式","u":"/docs/job-old","h":"#2661-高级自定义间隔方式","p":2390},{"i":2439,"t":"26.6.2 高级自定义 Cron 表达式","u":"/docs/job-old","h":"#2662-高级自定义-cron-表达式","p":2390},{"i":2441,"t":"26.7 ISpareTimeWorker 说明","u":"/docs/job-old","h":"#267-isparetimeworker-说明","p":2390},{"i":2443,"t":"26.7.1 [SpareTime] 特性","u":"/docs/job-old","h":"#2671-sparetime-特性","p":2390},{"i":2445,"t":"26.8 SpareTime 静态类","u":"/docs/job-old","h":"#268-sparetime-静态类","p":2390},{"i":2447,"t":"26.8.1 初始化任务","u":"/docs/job-old","h":"#2681-初始化任务","p":2390},{"i":2449,"t":"26.8.2 实现后台执行","u":"/docs/job-old","h":"#2682-实现后台执行","p":2390},{"i":2451,"t":"26.8.3 开始一个任务","u":"/docs/job-old","h":"#2683-开始一个任务","p":2390},{"i":2453,"t":"26.8.4 暂停一个任务","u":"/docs/job-old","h":"#2684-暂停一个任务","p":2390},{"i":2455,"t":"26.8.5 取消一个任务","u":"/docs/job-old","h":"#2685-取消一个任务","p":2390},{"i":2457,"t":"26.8.6 销毁所有任务","u":"/docs/job-old","h":"#2686-销毁所有任务","p":2390},{"i":2459,"t":"26.8.7 获取所有任务","u":"/docs/job-old","h":"#2687-获取所有任务","p":2390},{"i":2461,"t":"26.8.8 获取单个任务","u":"/docs/job-old","h":"#2688-获取单个任务","p":2390},{"i":2463,"t":"26.8.9 解析 Cron 表达式","u":"/docs/job-old","h":"#2689-解析-cron-表达式","p":2390},{"i":2465,"t":"26.9 并行和串行执行方式","u":"/docs/job-old","h":"#269-并行和串行执行方式","p":2390},{"i":2467,"t":"26.9.1 SpareTime 静态方式指定","u":"/docs/job-old","h":"#2691-sparetime-静态方式指定","p":2390},{"i":2469,"t":"26.9.2 ISpareTimeWorker 方式","u":"/docs/job-old","h":"#2692-isparetimeworker-方式","p":2390},{"i":2471,"t":"26.10 任务异常处理","u":"/docs/job-old","h":"#2610-任务异常处理","p":2390},{"i":2473,"t":"26.11 如何在任务中解析对象","u":"/docs/job-old","h":"#2611-如何在任务中解析对象","p":2390},{"i":2475,"t":"26.11.1 SpareTime 静态类中","u":"/docs/job-old","h":"#26111-sparetime-静态类中","p":2390},{"i":2477,"t":"26.11.2 ISpareTimeWorker 方式","u":"/docs/job-old","h":"#26112-isparetimeworker-方式","p":2390},{"i":2479,"t":"26.12 在 BackgroundService 中使用","u":"/docs/job-old","h":"#2612-在-backgroundservice-中使用","p":2390},{"i":2481,"t":"26.12.1 间隔执行方式","u":"/docs/job-old","h":"#26121-间隔执行方式","p":2390},{"i":2483,"t":"26.12.2 Cron 表达式执行方式","u":"/docs/job-old","h":"#26122-cron-表达式执行方式","p":2390},{"i":2485,"t":"26.13 定时任务监听器","u":"/docs/job-old","h":"#2613-定时任务监听器","p":2390},{"i":2487,"t":"26.13.1 SpareTimerExecuter 属性说明","u":"/docs/job-old","h":"#26131-sparetimerexecuter-属性说明","p":2390},{"i":2489,"t":"26.14 IIS 部署回收设置","u":"/docs/job-old","h":"#2614-iis-部署回收设置","p":2390},{"i":2491,"t":"26.15 反馈与建议","u":"/docs/job-old","h":"#2615-反馈与建议","p":2390},{"i":2494,"t":"2.7.1 关于 JSON Schema","u":"/docs/jsonschema","h":"#271-关于-json-schema","p":2493},{"i":2496,"t":"2.7.2 学习 JSON Schema 编写","u":"/docs/jsonschema","h":"#272-学习-json-schema-编写","p":2493},{"i":2498,"t":"2.7.3 框架提供","u":"/docs/jsonschema","h":"#273-框架提供","p":2493},{"i":2500,"t":"2.7.4 如何使用","u":"/docs/jsonschema","h":"#274-如何使用","p":2493},{"i":2502,"t":"2.7.5 JSON Schema 失效解决","u":"/docs/jsonschema","h":"#275-json-schema-失效解决","p":2493},{"i":2504,"t":"2.7.5.1 Visual Studio","u":"/docs/jsonschema","h":"#2751-visual-studio","p":2493},{"i":2505,"t":"2.7.5.2 Visual Studio Code","u":"/docs/jsonschema","h":"#2752-visual-studio-code","p":2493},{"i":2507,"t":"2.7.6 如何更新 JSON Schema","u":"/docs/jsonschema","h":"#276-如何更新-json-schema","p":2493},{"i":2509,"t":"2.7.6.1 Visual Studio","u":"/docs/jsonschema","h":"#2761-visual-studio","p":2493},{"i":2511,"t":"2.7.6.2 Visual Studio Code","u":"/docs/jsonschema","h":"#2762-visual-studio-code","p":2493},{"i":2513,"t":"2.7.7 反馈与建议","u":"/docs/jsonschema","h":"#277-反馈与建议","p":2493},{"i":2516,"t":"21.1 全球化和本地化","u":"/docs/local-language","h":"#211-全球化和本地化","p":2515},{"i":2518,"t":"21.2 注册服务","u":"/docs/local-language","h":"#212-注册服务","p":2515},{"i":2520,"t":"21.3 如何使用","u":"/docs/local-language","h":"#213-如何使用","p":2515},{"i":2521,"t":"21.3.1 配置 LocalizationSettings","u":"/docs/local-language","h":"#2131-配置-localizationsettings","p":2515},{"i":2523,"t":"21.3.2 创建 Resources 文件夹","u":"/docs/local-language","h":"#2132-创建-resources-文件夹","p":2515},{"i":2525,"t":"21.4 L 静态类","u":"/docs/local-language","h":"#214-l-静态类","p":2515},{"i":2527,"t":"21.5 使用例子","u":"/docs/local-language","h":"#215-使用例子","p":2515},{"i":2529,"t":"21.5.1 在类中使用","u":"/docs/local-language","h":"#2151-在类中使用","p":2515},{"i":2531,"t":"21.5.2 在视图中使用","u":"/docs/local-language","h":"#2152-在视图中使用","p":2515},{"i":2533,"t":"21.5.3 在验证特性中使用","u":"/docs/local-language","h":"#2153-在验证特性中使用","p":2515},{"i":2535,"t":"21.5.4 在异常消息中使用","u":"/docs/local-language","h":"#2154-在异常消息中使用","p":2515},{"i":2537,"t":"21.5.5 SharedResource 模式","u":"/docs/local-language","h":"#2155-sharedresource-模式","p":2515},{"i":2539,"t":"21.6 创建语言翻译文件","u":"/docs/local-language","h":"#216-创建语言翻译文件","p":2515},{"i":2541,"t":"21.6.1 在 Resources 文件夹中创建语言文件","u":"/docs/local-language","h":"#2161-在-resources-文件夹中创建语言文件","p":2515},{"i":2543,"t":"21.7 切换语言","u":"/docs/local-language","h":"#217-切换语言","p":2515},{"i":2545,"t":"21.7.1 URL 参数 方式","u":"/docs/local-language","h":"#2171-url-参数-方式","p":2515},{"i":2546,"t":"21.7.2 Cookies 方式","u":"/docs/local-language","h":"#2172-cookies-方式","p":2515},{"i":2548,"t":"21.7.3 客户端浏览器语言自动切换","u":"/docs/local-language","h":"#2173-客户端浏览器语言自动切换","p":2515},{"i":2550,"t":"21.8 依赖注入方式使用","u":"/docs/local-language","h":"#218-依赖注入方式使用","p":2515},{"i":2552,"t":"21.9 LocalizationSettings 配置","u":"/docs/local-language","h":"#219-localizationsettings-配置","p":2515},{"i":2554,"t":"21.10 关于中文不能切换问题","u":"/docs/local-language","h":"#2110-关于中文不能切换问题","p":2515},{"i":2556,"t":"21.11 Json 或 数据库 多语言实现","u":"/docs/local-language","h":"#2111-json-或-数据库-多语言实现","p":2515},{"i":2558,"t":"21.12 区域码列表","u":"/docs/local-language","h":"#2112-区域码列表","p":2515},{"i":2560,"t":"21.13 反馈与建议","u":"/docs/local-language","h":"#2113-反馈与建议","p":2515},{"i":2563,"t":"5.5.1 关于中间件","u":"/docs/middleware","h":"#551-关于中间件","p":2562},{"i":2565,"t":"5.5.2 常见中间件","u":"/docs/middleware","h":"#552-常见中间件","p":2562},{"i":2566,"t":"5.5.2.1 所有请求返回同一个结果","u":"/docs/middleware","h":"#5521-所有请求返回同一个结果","p":2562},{"i":2568,"t":"5.5.2.2 拦截所有请求(可多个)","u":"/docs/middleware","h":"#5522-拦截所有请求可多个","p":2562},{"i":2570,"t":"5.5.2.3 特定路由中间件(可多个)","u":"/docs/middleware","h":"#5523-特定路由中间件可多个","p":2562},{"i":2572,"t":"5.5.2.4 嵌套路由中间件(可多个)","u":"/docs/middleware","h":"#5524-嵌套路由中间件可多个","p":2562},{"i":2574,"t":"5.5.3 自定义中间件","u":"/docs/middleware","h":"#553-自定义中间件","p":2562},{"i":2576,"t":"5.5.3.1 app.Use 方式 (不推荐)","u":"/docs/middleware","h":"#5531-appuse-方式-不推荐","p":2562},{"i":2578,"t":"5.5.3.2 独立类 方式(推荐)","u":"/docs/middleware","h":"#5532-独立类-方式推荐","p":2562},{"i":2580,"t":"5.5.3.3 配置更多参数","u":"/docs/middleware","h":"#5533-配置更多参数","p":2562},{"i":2582,"t":"5.5.4 中间件顺序","u":"/docs/middleware","h":"#554-中间件顺序","p":2562},{"i":2584,"t":"5.5.5 依赖注入/解析服务","u":"/docs/middleware","h":"#555-依赖注入解析服务","p":2562},{"i":2586,"t":"5.5.5.1 构造函数方式","u":"/docs/middleware","h":"#5551-构造函数方式","p":2562},{"i":2588,"t":"5.5.5.2 httpContext.RequestServices 方式","u":"/docs/middleware","h":"#5552-httpcontextrequestservices-方式","p":2562},{"i":2590,"t":"5.5.6 常见问题","u":"/docs/middleware","h":"#556-常见问题","p":2562},{"i":2592,"t":"5.5.7 了解更多","u":"/docs/middleware","h":"#557-了解更多","p":2562},{"i":2594,"t":"5.5.8 反馈与建议","u":"/docs/middleware","h":"#558-反馈与建议","p":2562},{"i":2598,"t":"10.3.1 关于 MongoDB","u":"/docs/mongodb","h":"#1031-关于-mongodb","p":2596},{"i":2600,"t":"10.3.2 如何集成","u":"/docs/mongodb","h":"#1032-如何集成","p":2596},{"i":2602,"t":"10.3.2.1 注册 MongoDB 服务","u":"/docs/mongodb","h":"#10321-注册-mongodb-服务","p":2596},{"i":2604,"t":"10.3.3 基本使用","u":"/docs/mongodb","h":"#1033-基本使用","p":2596},{"i":2606,"t":"10.3.3.1 常见例子","u":"/docs/mongodb","h":"#10331-常见例子","p":2596},{"i":2608,"t":"10.3.3.2 获取 MongoClient 对象","u":"/docs/mongodb","h":"#10332-获取-mongoclient-对象","p":2596},{"i":2610,"t":"10.3.4 反馈与建议","u":"/docs/mongodb","h":"#1034-反馈与建议","p":2596},{"i":2614,"t":"28.1 关于模块化开发","u":"/docs/module-dev","h":"#281-关于模块化开发","p":2612},{"i":2616,"t":"28.1.1 模块化开发好处","u":"/docs/module-dev","h":"#2811-模块化开发好处","p":2612},{"i":2618,"t":"28.2 模块分类","u":"/docs/module-dev","h":"#282-模块分类","p":2612},{"i":2620,"t":"28.3 如何进行模块化开发","u":"/docs/module-dev","h":"#283-如何进行模块化开发","p":2612},{"i":2622,"t":"28.3.1 启用模块化支持","u":"/docs/module-dev","h":"#2831-启用模块化支持","p":2612},{"i":2624,"t":"28.3.2 各种添加模块配置方式","u":"/docs/module-dev","h":"#2832-各种添加模块配置方式","p":2612},{"i":2626,"t":"28.4 模块化开发注意事项","u":"/docs/module-dev","h":"#284-模块化开发注意事项","p":2612},{"i":2628,"t":"28.5 关于热插拔机制","u":"/docs/module-dev","h":"#285-关于热插拔机制","p":2612},{"i":2630,"t":"28.6 反馈与建议","u":"/docs/module-dev","h":"#286-反馈与建议","p":2612},{"i":2634,"t":"2.5.1 升级注意事项","u":"/docs/net6-to-net7","h":"#251-升级注意事项","p":2632},{"i":2636,"t":"2.5.1.1 安装 .NET7 SDK","u":"/docs/net6-to-net7","h":"#2511-安装-net7-sdk","p":2632},{"i":2638,"t":"2.5.1.2 编辑 .csproj 文件","u":"/docs/net6-to-net7","h":"#2512-编辑-csproj-文件","p":2632},{"i":2640,"t":"2.5.1.3 升级 Nuget 包","u":"/docs/net6-to-net7","h":"#2513-升级-nuget-包","p":2632},{"i":2642,"t":"2.5.1.4 重新编译整个解决方案","u":"/docs/net6-to-net7","h":"#2514-重新编译整个解决方案","p":2632},{"i":2645,"t":"2.9.1 关于本地测试包","u":"/docs/nuget-local","h":"#291-关于本地测试包","p":2644},{"i":2647,"t":"2.9.2 如何配置","u":"/docs/nuget-local","h":"#292-如何配置","p":2644},{"i":2648,"t":"2.9.2.1 测试包命名规则","u":"/docs/nuget-local","h":"#2921-测试包命名规则","p":2644},{"i":2650,"t":"2.9.2.2 配置本地包路径","u":"/docs/nuget-local","h":"#2922-配置本地包路径","p":2644},{"i":2652,"t":"2.9.2.3 在 Visual Studio 中配置路径","u":"/docs/nuget-local","h":"#2923-在-visual-studio-中配置路径","p":2644},{"i":2654,"t":"2.9.2.4 选择测试版安装或更新","u":"/docs/nuget-local","h":"#2924-选择测试版安装或更新","p":2644},{"i":2656,"t":"2.9.3 Visual Studio 调试 Nuget 包","u":"/docs/nuget-local","h":"#293-visual-studio-调试-nuget-包","p":2644},{"i":2658,"t":"2.9.4 反馈与建议","u":"/docs/nuget-local","h":"#294-反馈与建议","p":2644},{"i":2661,"t":"2.5.1 升级注意事项","u":"/docs/net5-to-net6","h":"#251-升级注意事项","p":2660},{"i":2663,"t":"2.5.1.1 安装 .NET6 SDK","u":"/docs/net5-to-net6","h":"#2511-安装-net6-sdk","p":2660},{"i":2665,"t":"2.5.1.2 编辑 .csproj 文件","u":"/docs/net5-to-net6","h":"#2512-编辑-csproj-文件","p":2660},{"i":2667,"t":"2.5.1.3 升级 Nuget 包","u":"/docs/net5-to-net6","h":"#2513-升级-nuget-包","p":2660},{"i":2669,"t":"2.5.1.4 删除 Startup.cs 文件","u":"/docs/net5-to-net6","h":"#2514-删除-startupcs-文件","p":2660},{"i":2671,"t":"2.5.1.5 编辑 Web 启动层 .csproj","u":"/docs/net5-to-net6","h":"#2515-编辑-web-启动层-csproj","p":2660},{"i":2673,"t":"2.5.1.6 替换 Program.cs 内容为:","u":"/docs/net5-to-net6","h":"#2516-替换-programcs-内容为","p":2660},{"i":2675,"t":"2.5.1.7 重新编译整个解决方案","u":"/docs/net5-to-net6","h":"#2517-重新编译整个解决方案","p":2660},{"i":2681,"t":"13.1 对象映射","u":"/docs/object-mapper","h":"#131-对象映射","p":2679},{"i":2683,"t":"13.2 先看例子","u":"/docs/object-mapper","h":"#132-先看例子","p":2679},{"i":2685,"t":"13.3 Mapster 使用","u":"/docs/object-mapper","h":"#133-mapster-使用","p":2679},{"i":2687,"t":"13.3.1 快速入门","u":"/docs/object-mapper","h":"#1331-快速入门","p":2679},{"i":2689,"t":"13.3.2 自定义映射规则","u":"/docs/object-mapper","h":"#1332-自定义映射规则","p":2679},{"i":2691,"t":"13.3.3 依赖注入方式","u":"/docs/object-mapper","h":"#1333-依赖注入方式","p":2679},{"i":2693,"t":"13.3.4 和 EFCore 配合","u":"/docs/object-mapper","h":"#1334-和-efcore-配合","p":2679},{"i":2695,"t":"13.4 全局默认配置","u":"/docs/object-mapper","h":"#134-全局默认配置","p":2679},{"i":2697,"t":"13.5 反馈与建议","u":"/docs/object-mapper","h":"#135-反馈与建议","p":2679},{"i":2700,"t":"4.2.1 什么是选项","u":"/docs/options","h":"#421-什么是选项","p":2699},{"i":2702,"t":"4.2.2 与配置的区别","u":"/docs/options","h":"#422-与配置的区别","p":2699},{"i":2704,"t":"4.2.3 选项的使用","u":"/docs/options","h":"#423-选项的使用","p":2699},{"i":2706,"t":"4.2.3.1 配置 appsettings.json 信息","u":"/docs/options","h":"#4231-配置-appsettingsjson-信息","p":2699},{"i":2708,"t":"4.2.3.2 创建 AppInfoOptions 强类型类","u":"/docs/options","h":"#4232-创建-appinfooptions-强类型类","p":2699},{"i":2710,"t":"4.2.3.3 注册 AppInfoOptions 服务","u":"/docs/options","h":"#4233-注册-appinfooptions-服务","p":2699},{"i":2712,"t":"4.2.3.4 读取 AppInfoOptions 信息","u":"/docs/options","h":"#4234-读取-appinfooptions-信息","p":2699},{"i":2714,"t":"4.2.3.5 如何选择读取方式","u":"/docs/options","h":"#4235-如何选择读取方式","p":2699},{"i":2716,"t":"4.2.4 选项接口说明","u":"/docs/options","h":"#424-选项接口说明","p":2699},{"i":2718,"t":"4.2.5 选项自定义配置","u":"/docs/options","h":"#425-选项自定义配置","p":2699},{"i":2720,"t":"4.2.5.1 选项查找键流程","u":"/docs/options","h":"#4251-选项查找键流程","p":2699},{"i":2722,"t":"4.2.6 [OptionsSettings] 说明","u":"/docs/options","h":"#426-optionssettings-说明","p":2699},{"i":2724,"t":"4.2.7 选项验证","u":"/docs/options","h":"#427-选项验证","p":2699},{"i":2726,"t":"4.2.8 选项后期配置","u":"/docs/options","h":"#428-选项后期配置","p":2699},{"i":2728,"t":"4.2.9 选项更改通知(热更新)","u":"/docs/options","h":"#429-选项更改通知热更新","p":2699},{"i":2730,"t":"4.2.9.1 关于多次触发问题","u":"/docs/options","h":"#4291-关于多次触发问题","p":2699},{"i":2732,"t":"4.2.10 选项的优缺点","u":"/docs/options","h":"#4210-选项的优缺点","p":2699},{"i":2734,"t":"4.2.11 自定义属性 Key 映射","u":"/docs/options","h":"#4211-自定义属性-key-映射","p":2699},{"i":2736,"t":"4.2.12 反馈与建议","u":"/docs/options","h":"#4212-反馈与建议","p":2699},{"i":2739,"t":"34.6.1 关于 pm2","u":"/docs/pm2","h":"#3461-关于-pm2","p":2738},{"i":2741,"t":"34.6.2 如何安装","u":"/docs/pm2","h":"#3462-如何安装","p":2738},{"i":2743,"t":"34.6.3 托管 .NET5/6 应用程序","u":"/docs/pm2","h":"#3463-托管-net56-应用程序","p":2738},{"i":2744,"t":"34.6.3.1 非单文件/非独立发布模式","u":"/docs/pm2","h":"#34631-非单文件非独立发布模式","p":2738},{"i":2746,"t":"34.6.3.2 单文件/独立发布模式","u":"/docs/pm2","h":"#34632-单文件独立发布模式","p":2738},{"i":2748,"t":"34.6.3.3 启用应用程序","u":"/docs/pm2","h":"#34633-启用应用程序","p":2738},{"i":2750,"t":"34.6.3.4 json 配置/启动方式","u":"/docs/pm2","h":"#34634-json-配置启动方式","p":2738},{"i":2752,"t":"34.6.4 pm2 常见操作","u":"/docs/pm2","h":"#3464-pm2-常见操作","p":2738},{"i":2753,"t":"34.6.4.1 实时监听运行状态","u":"/docs/pm2","h":"#34641-实时监听运行状态","p":2738},{"i":2755,"t":"34.6.4.2 显示运行日志","u":"/docs/pm2","h":"#34642-显示运行日志","p":2738},{"i":2757,"t":"34.6.4.3 查看应用信息","u":"/docs/pm2","h":"#34643-查看应用信息","p":2738},{"i":2759,"t":"34.6.4.4 随机启动","u":"/docs/pm2","h":"#34644-随机启动","p":2738},{"i":2761,"t":"34.6.4.5 集群模式(负载均衡)","u":"/docs/pm2","h":"#34645-集群模式负载均衡","p":2738},{"i":2763,"t":"34.6.4.6 其他操作","u":"/docs/pm2","h":"#34646-其他操作","p":2738},{"i":2765,"t":"34.6.5 反馈与建议","u":"/docs/pm2","h":"#3465-反馈与建议","p":2738},{"i":2773,"t":"2.3.1 推荐分层设计","u":"/docs/reference","h":"#231-推荐分层设计","p":2771},{"i":2775,"t":"2.3.2 集成 Furion 功能","u":"/docs/reference","h":"#232-集成-furion-功能","p":2771},{"i":2777,"t":"2.3.3 反馈与建议","u":"/docs/reference","h":"#233-反馈与建议","p":2771},{"i":2781,"t":"30.1 关于脱敏","u":"/docs/sensitive-detection","h":"#301-关于脱敏","p":2779},{"i":2783,"t":"30.2 如何使用","u":"/docs/sensitive-detection","h":"#302-如何使用","p":2779},{"i":2785,"t":"30.2.1 注册 脱敏词汇检测 服务","u":"/docs/sensitive-detection","h":"#3021-注册-脱敏词汇检测-服务","p":2779},{"i":2787,"t":"30.2.2 创建 sensitive-words.txt 文件","u":"/docs/sensitive-detection","h":"#3022-创建-sensitive-wordstxt-文件","p":2779},{"i":2789,"t":"30.2.3 使用脱敏检测","u":"/docs/sensitive-detection","h":"#3023-使用脱敏检测","p":2779},{"i":2791,"t":"30.2.4 脱敏词汇替换","u":"/docs/sensitive-detection","h":"#3024-脱敏词汇替换","p":2779},{"i":2793,"t":"30.3 自定义脱敏词汇处理","u":"/docs/sensitive-detection","h":"#303-自定义脱敏词汇处理","p":2779},{"i":2795,"t":"30.3.1 自定义 ISensitiveDetectionProvider 程序,如:","u":"/docs/sensitive-detection","h":"#3031-自定义-isensitivedetectionprovider-程序如","p":2779},{"i":2797,"t":"30.3.2 注册自定义脱敏提供器","u":"/docs/sensitive-detection","h":"#3032-注册自定义脱敏提供器","p":2779},{"i":2799,"t":"30.4 反馈与建议","u":"/docs/sensitive-detection","h":"#304-反馈与建议","p":2779},{"i":2802,"t":"25.1 关于辅助角色服务","u":"/docs/process-service","h":"#251-关于辅助角色服务","p":2801},{"i":2804,"t":"25.2 共宿主方式","u":"/docs/process-service","h":"#252-共宿主方式","p":2801},{"i":2806,"t":"25.2.1 最佳实践","u":"/docs/process-service","h":"#2521-最佳实践","p":2801},{"i":2808,"t":"25.3 独立 Worker Service 方式","u":"/docs/process-service","h":"#253-独立-worker-service-方式","p":2801},{"i":2810,"t":"25.3.1 如何创建 Worker Service","u":"/docs/process-service","h":"#2531-如何创建-worker-service","p":2801},{"i":2812,"t":"25.3.2 创建 Worker","u":"/docs/process-service","h":"#2532-创建-worker","p":2801},{"i":2814,"t":"25.3.3 多个 Worker","u":"/docs/process-service","h":"#2533-多个-worker","p":2801},{"i":2816,"t":"25.3.4 生命周期","u":"/docs/process-service","h":"#2534-生命周期","p":2801},{"i":2818,"t":"25.3.5 集成 Furion","u":"/docs/process-service","h":"#2535-集成-furion","p":2801},{"i":2820,"t":"25.3.6 注册服务","u":"/docs/process-service","h":"#2536-注册服务","p":2801},{"i":2822,"t":"25.4 实现定时任务","u":"/docs/process-service","h":"#254-实现定时任务","p":2801},{"i":2824,"t":"25.4.1 间隔执行方式","u":"/docs/process-service","h":"#2541-间隔执行方式","p":2801},{"i":2826,"t":"25.4.2 Cron 表达式执行方式","u":"/docs/process-service","h":"#2542-cron-表达式执行方式","p":2801},{"i":2828,"t":"25.4.3 实现 串行 操作","u":"/docs/process-service","h":"#2543-实现-串行-操作","p":2801},{"i":2830,"t":"25.5 依赖注入使用","u":"/docs/process-service","h":"#255-依赖注入使用","p":2801},{"i":2832,"t":"25.6 如何部署","u":"/docs/process-service","h":"#256-如何部署","p":2801},{"i":2833,"t":"25.6.1 共宿主方式","u":"/docs/process-service","h":"#2561-共宿主方式","p":2801},{"i":2835,"t":"25.6.2 独立 Worker Service 方式","u":"/docs/process-service","h":"#2562-独立-worker-service-方式","p":2801},{"i":2837,"t":"25.7 关于 Windows 部署日志问题","u":"/docs/process-service","h":"#257-关于-windows-部署日志问题","p":2801},{"i":2839,"t":"25.8 反馈与建议","u":"/docs/process-service","h":"#258-反馈与建议","p":2801},{"i":2842,"t":"32.1 关于会话和状态管理","u":"/docs/sesssion-state","h":"#321-关于会话和状态管理","p":2841},{"i":2844,"t":"32.2 如何使用","u":"/docs/sesssion-state","h":"#322-如何使用","p":2841},{"i":2845,"t":"32.2.1 Cookie 使用","u":"/docs/sesssion-state","h":"#3221-cookie-使用","p":2841},{"i":2847,"t":"32.2.2 Session 使用","u":"/docs/sesssion-state","h":"#3222-session-使用","p":2841},{"i":2849,"t":"32.2.3 Query Strings 使用","u":"/docs/sesssion-state","h":"#3223-query-strings-使用","p":2841},{"i":2851,"t":"32.2.4 HttpContext.Items 使用","u":"/docs/sesssion-state","h":"#3224-httpcontextitems-使用","p":2841},{"i":2853,"t":"32.2.5 Cache 方式","u":"/docs/sesssion-state","h":"#3225-cache-方式","p":2841},{"i":2855,"t":"32.2.6 AsyncLocal 方式","u":"/docs/sesssion-state","h":"#3226-asynclocalt-方式","p":2841},{"i":2857,"t":"32.3 反馈与建议","u":"/docs/sesssion-state","h":"#323-反馈与建议","p":2841},{"i":2861,"t":"2.0.1 历史背景","u":"/docs/serverun","h":"#201-历史背景","p":2859},{"i":2863,"t":"2.0.2 创建 控制台 项目","u":"/docs/serverun","h":"#202-创建-控制台-项目","p":2859},{"i":2865,"t":"2.0.3 添加 Furion 依赖包","u":"/docs/serverun","h":"#203-添加-furion-依赖包","p":2859},{"i":2867,"t":"2.0.4 一句话搞定","u":"/docs/serverun","h":"#204-一句话搞定","p":2859},{"i":2869,"t":"2.0.5 启动浏览器","u":"/docs/serverun","h":"#205-启动浏览器","p":2859},{"i":2871,"t":"2.0.6 编写第一个 API","u":"/docs/serverun","h":"#206-编写第一个-api","p":2859},{"i":2873,"t":"2.0.7 Serve.Run() 更多配置","u":"/docs/serverun","h":"#207-serverun-更多配置","p":2859},{"i":2874,"t":"2.0.7.1 配置默认端口","u":"/docs/serverun","h":"#2071-配置默认端口","p":2859},{"i":2876,"t":"2.0.7.2 便捷服务注册","u":"/docs/serverun","h":"#2072-便捷服务注册","p":2859},{"i":2878,"t":"2.0.7.3 自定义配置","u":"/docs/serverun","h":"#2073-自定义配置","p":2859},{"i":2880,"t":"2.0.7.4 Serve.Run 和 Startup 最佳组合","u":"/docs/serverun","h":"#2074-serverun-和-startup-最佳组合","p":2859},{"i":2882,"t":"2.0.7.5 更多配置","u":"/docs/serverun","h":"#2075-更多配置","p":2859},{"i":2884,"t":"2.0.8 支持 Furion 所有功能","u":"/docs/serverun","h":"#208-支持-furion-所有功能","p":2859},{"i":2886,"t":"2.0.8.1 添加 appsettings.json","u":"/docs/serverun","h":"#2081-添加-appsettingsjson","p":2859},{"i":2888,"t":"2.0.8.2 添加自定义 Startup","u":"/docs/serverun","h":"#2082-添加自定义-startup","p":2859},{"i":2890,"t":"2.0.8.3 将控制台项目变成 Web 项目","u":"/docs/serverun","h":"#2083-将控制台项目变成-web-项目","p":2859},{"i":2892,"t":"2.0.8.4 添加 args 启动参数","u":"/docs/serverun","h":"#2084-添加-args-启动参数","p":2859},{"i":2894,"t":"2.0.8.5 还没看够?","u":"/docs/serverun","h":"#2085-还没看够","p":2859},{"i":2896,"t":"2.0.9 RunOptions,LegacyRunOptions 和 GenericRunOptions","u":"/docs/serverun","h":"#209-runoptionslegacyrunoptions-和-genericrunoptions","p":2859},{"i":2898,"t":"2.0.10 在 Winform/WPF 桌面中使用","u":"/docs/serverun","h":"#2010-在-winformwpf-桌面中使用","p":2859},{"i":2900,"t":"2.0.10.1 添加更多服务","u":"/docs/serverun","h":"#20101-添加更多服务","p":2859},{"i":2902,"t":"2.0.11 静默启动","u":"/docs/serverun","h":"#2011-静默启动","p":2859},{"i":2904,"t":"2.0.12 .NET5 模式找不到 Views 视图路径","u":"/docs/serverun","h":"#2012-net5-模式找不到-views-视图路径","p":2859},{"i":2906,"t":"2.0.13 反馈与建议","u":"/docs/serverun","h":"#2013-反馈与建议","p":2859},{"i":2909,"t":"11.1 什么是 SaaS","u":"/docs/saas","h":"#111-什么是-saas","p":2908},{"i":2911,"t":"11.2 什么是多租户","u":"/docs/saas","h":"#112-什么是多租户","p":2908},{"i":2913,"t":"11.3 实现多租户方案","u":"/docs/saas","h":"#113-实现多租户方案","p":2908},{"i":2914,"t":"11.3.1 独立数据库(基于 Database 的方式)","u":"/docs/saas","h":"#1131-独立数据库基于-database-的方式","p":2908},{"i":2916,"t":"11.3.2 共享数据库,独立 Schema (基于 Schema 的方式)","u":"/docs/saas","h":"#1132-共享数据库独立-schema-基于-schema-的方式","p":2908},{"i":2918,"t":"11.3.3 共享数据库,共享 Schema (基于 TenantId 的方式)","u":"/docs/saas","h":"#1133-共享数据库共享-schema-基于-tenantid-的方式","p":2908},{"i":2920,"t":"11.4 多租户使用方案","u":"/docs/saas","h":"#114-多租户使用方案","p":2908},{"i":2922,"t":"11.5 基于 TenantId 的方式","u":"/docs/saas","h":"#115-基于-tenantid-的方式","p":2908},{"i":2924,"t":"11.5.1 创建租户数据库上下文","u":"/docs/saas","h":"#1151-创建租户数据库上下文","p":2908},{"i":2926,"t":"11.5.2 注册多租户数据库上下文","u":"/docs/saas","h":"#1152-注册多租户数据库上下文","p":2908},{"i":2928,"t":"11.5.3 添加 Tenant 种子数据","u":"/docs/saas","h":"#1153-添加-tenant-种子数据","p":2908},{"i":2930,"t":"11.5.4 根据模型创建 Tenant 表","u":"/docs/saas","h":"#1154-根据模型创建-tenant-表","p":2908},{"i":2932,"t":"11.5.5 实现 IMultiTenantOnTable 接口","u":"/docs/saas","h":"#1155-实现-imultitenantontable-接口","p":2908},{"i":2934,"t":"11.5.6 实现 IModelBuilderFilter 接口","u":"/docs/saas","h":"#1156-实现-imodelbuilderfilter-接口","p":2908},{"i":2936,"t":"11.5.7 重写 SavingChangesEvent 事件方法","u":"/docs/saas","h":"#1157-重写-savingchangesevent-事件方法","p":2908},{"i":2938,"t":"11.6 基于 Database 的方式","u":"/docs/saas","h":"#116-基于-database-的方式","p":2908},{"i":2940,"t":"11.6.1 创建租户数据库上下文","u":"/docs/saas","h":"#1161-创建租户数据库上下文","p":2908},{"i":2942,"t":"11.6.2 注册多租户数据库上下文","u":"/docs/saas","h":"#1162-注册多租户数据库上下文","p":2908},{"i":2944,"t":"11.6.3 添加 Tenant 种子数据","u":"/docs/saas","h":"#1163-添加-tenant-种子数据","p":2908},{"i":2946,"t":"11.6.4 根据模型创建 Tenant 表","u":"/docs/saas","h":"#1164-根据模型创建-tenant-表","p":2908},{"i":2948,"t":"11.6.5 实现 IMultiTenantOnDatabase 接口","u":"/docs/saas","h":"#1165-实现-imultitenantondatabase-接口","p":2908},{"i":2950,"t":"11.6.6 重写 OnConfiguring 方法","u":"/docs/saas","h":"#1166-重写-onconfiguring-方法","p":2908},{"i":2952,"t":"11.7 基于 Schema 的方式","u":"/docs/saas","h":"#117-基于-schema-的方式","p":2908},{"i":2954,"t":"11.7.1 创建租户数据库上下文","u":"/docs/saas","h":"#1171-创建租户数据库上下文","p":2908},{"i":2956,"t":"11.7.2 注册多租户数据库上下文","u":"/docs/saas","h":"#1172-注册多租户数据库上下文","p":2908},{"i":2958,"t":"11.7.3 添加 Tenant 种子数据","u":"/docs/saas","h":"#1173-添加-tenant-种子数据","p":2908},{"i":2960,"t":"11.7.4 根据模型创建 Tenant 表","u":"/docs/saas","h":"#1174-根据模型创建-tenant-表","p":2908},{"i":2962,"t":"11.7.5 实现 IMultiTenantOnSchema 接口","u":"/docs/saas","h":"#1175-实现-imultitenantonschema-接口","p":2908},{"i":2964,"t":"11.7.6 关于 Code First 数据迁移","u":"/docs/saas","h":"#1176-关于-code-first-数据迁移","p":2908},{"i":2966,"t":"11.8 自定义 Tenant 类型","u":"/docs/saas","h":"#118-自定义-tenant-类型","p":2908},{"i":2968,"t":"11.8.1 启动自定义多租户类型配置","u":"/docs/saas","h":"#1181-启动自定义多租户类型配置","p":2908},{"i":2970,"t":"11.8.2 自定义租户类","u":"/docs/saas","h":"#1182-自定义租户类","p":2908},{"i":2972,"t":"11.9 刷新租户缓存","u":"/docs/saas","h":"#119-刷新租户缓存","p":2908},{"i":2974,"t":"11.10 反馈与建议","u":"/docs/saas","h":"#1110-反馈与建议","p":2908},{"i":2978,"t":"1.1 关于配置","u":"/docs/settings/appsettings","h":"#11-关于配置","p":2976},{"i":2980,"t":"1.2 配置信息","u":"/docs/settings/appsettings","h":"#12-配置信息","p":2976},{"i":2982,"t":"1.3 配置示例","u":"/docs/settings/appsettings","h":"#13-配置示例","p":2976},{"i":2984,"t":"1.4 特别注意","u":"/docs/settings/appsettings","h":"#14-特别注意","p":2976},{"i":2988,"t":"2.1 关于配置","u":"/docs/settings/corsaccessorsettings","h":"#21-关于配置","p":2986},{"i":2990,"t":"2.2 配置信息","u":"/docs/settings/corsaccessorsettings","h":"#22-配置信息","p":2986},{"i":2992,"t":"2.3 配置示例","u":"/docs/settings/corsaccessorsettings","h":"#23-配置示例","p":2986},{"i":2994,"t":"2.4 使用 axios 前端注意事项","u":"/docs/settings/corsaccessorsettings","h":"#24-使用-axios-前端注意事项","p":2986},{"i":2998,"t":"4.1 关于配置","u":"/docs/settings/dependencyinjectionsettings","h":"#41-关于配置","p":2996},{"i":3000,"t":"4.2 配置信息","u":"/docs/settings/dependencyinjectionsettings","h":"#42-配置信息","p":2996},{"i":3002,"t":"4.3 配置示例","u":"/docs/settings/dependencyinjectionsettings","h":"#43-配置示例","p":2996},{"i":3006,"t":"6.1 关于配置","u":"/docs/settings/friendlyexceptionsettings","h":"#61-关于配置","p":3004},{"i":3008,"t":"6.2 配置信息","u":"/docs/settings/friendlyexceptionsettings","h":"#62-配置信息","p":3004},{"i":3010,"t":"6.3 配置示例","u":"/docs/settings/friendlyexceptionsettings","h":"#63-配置示例","p":3004},{"i":3012,"t":"6.4 异常消息配置","u":"/docs/settings/friendlyexceptionsettings","h":"#64-异常消息配置","p":3004},{"i":3014,"t":"6.4.1 配置信息","u":"/docs/settings/friendlyexceptionsettings","h":"#641-配置信息","p":3004},{"i":3016,"t":"6.4.2 配置示例","u":"/docs/settings/friendlyexceptionsettings","h":"#642-配置示例","p":3004},{"i":3020,"t":"5.1 关于配置","u":"/docs/settings/dynamicapicontrollersettings","h":"#51-关于配置","p":3018},{"i":3022,"t":"5.2 配置信息","u":"/docs/settings/dynamicapicontrollersettings","h":"#52-配置信息","p":3018},{"i":3024,"t":"5.3 配置示例","u":"/docs/settings/dynamicapicontrollersettings","h":"#53-配置示例","p":3018},{"i":3028,"t":"8.1 关于配置","u":"/docs/settings/localizationsettings","h":"#81-关于配置","p":3026},{"i":3030,"t":"8.2 配置信息","u":"/docs/settings/localizationsettings","h":"#82-配置信息","p":3026},{"i":3032,"t":"8.3 配置示例","u":"/docs/settings/localizationsettings","h":"#83-配置示例","p":3026},{"i":3036,"t":"9.1 关于配置","u":"/docs/settings/jwtsettings","h":"#91-关于配置","p":3034},{"i":3038,"t":"9.2 配置信息","u":"/docs/settings/jwtsettings","h":"#92-配置信息","p":3034},{"i":3040,"t":"9.3 配置示例","u":"/docs/settings/jwtsettings","h":"#93-配置示例","p":3034},{"i":3044,"t":"10.1 关于配置","u":"/docs/settings/unifyresultsettings","h":"#101-关于配置","p":3042},{"i":3046,"t":"10.2 配置信息","u":"/docs/settings/unifyresultsettings","h":"#102-配置信息","p":3042},{"i":3048,"t":"10.3 配置示例","u":"/docs/settings/unifyresultsettings","h":"#103-配置示例","p":3042},{"i":3052,"t":"3.1 关于配置","u":"/docs/settings/validationTypemessagesettings","h":"#31-关于配置","p":3050},{"i":3054,"t":"3.2 配置信息","u":"/docs/settings/validationTypemessagesettings","h":"#32-配置信息","p":3050},{"i":3056,"t":"3.3 配置示例","u":"/docs/settings/validationTypemessagesettings","h":"#33-配置示例","p":3050},{"i":3060,"t":"7.1 关于配置","u":"/docs/settings/specificationdocumentsettings","h":"#71-关于配置","p":3058},{"i":3062,"t":"7.2 配置信息","u":"/docs/settings/specificationdocumentsettings","h":"#72-配置信息","p":3058},{"i":3064,"t":"7.3 配置示例","u":"/docs/settings/specificationdocumentsettings","h":"#73-配置示例","p":3058},{"i":3068,"t":"34.5.1 历史背景","u":"/docs/singlefile","h":"#3451-历史背景","p":3066},{"i":3070,"t":"34.5.2 必要配置","u":"/docs/singlefile","h":"#3452-必要配置","p":3066},{"i":3072,"t":"34.5.3 发布","u":"/docs/singlefile","h":"#3453-发布","p":3066},{"i":3074,"t":"34.5.4 自定义启动端口","u":"/docs/singlefile","h":"#3454-自定义启动端口","p":3066},{"i":3076,"t":"34.5.5 pm2 守护进程部署","u":"/docs/singlefile","h":"#3455-pm2-守护进程部署","p":3066},{"i":3077,"t":"34.5.5.1 运行弊端","u":"/docs/singlefile","h":"#34551-运行弊端","p":3066},{"i":3079,"t":"34.5.5.2 pm2 守护进程部署","u":"/docs/singlefile","h":"#34552-pm2-守护进程部署","p":3066},{"i":3081,"t":"34.5.5.3 pm2 常见操作","u":"/docs/singlefile","h":"#34553-pm2-常见操作","p":3066},{"i":3083,"t":"34.5.6 反馈与建议","u":"/docs/singlefile","h":"#3456-反馈与建议","p":3066},{"i":3087,"t":"9.28.1 应用场景","u":"/docs/split-db","h":"#9281-应用场景","p":3085},{"i":3089,"t":"9.28.2 垂直切分","u":"/docs/split-db","h":"#9282-垂直切分","p":3085},{"i":3091,"t":"9.28.2.1 垂直分库","u":"/docs/split-db","h":"#92821-垂直分库","p":3085},{"i":3093,"t":"9.28.2.2 垂直分表","u":"/docs/split-db","h":"#92822-垂直分表","p":3085},{"i":3095,"t":"9.28.2.3 优缺点","u":"/docs/split-db","h":"#92823-优缺点","p":3085},{"i":3097,"t":"9.28.3 水平切分","u":"/docs/split-db","h":"#9283-水平切分","p":3085},{"i":3099,"t":"9.28.3.1 水平分库","u":"/docs/split-db","h":"#92831-水平分库","p":3085},{"i":3101,"t":"9.28.3.2 水平分表","u":"/docs/split-db","h":"#92832-水平分表","p":3085},{"i":3103,"t":"9.28.3.3 优缺点","u":"/docs/split-db","h":"#92833-优缺点","p":3085},{"i":3105,"t":"9.28.4 数据分片规则","u":"/docs/split-db","h":"#9284-数据分片规则","p":3085},{"i":3107,"t":"9.28.4.1 Hash 取模分表","u":"/docs/split-db","h":"#92841-hash-取模分表","p":3085},{"i":3109,"t":"9.28.4.2 数值 Range 分表","u":"/docs/split-db","h":"#92842-数值-range-分表","p":3085},{"i":3111,"t":"9.28.4.3 一致性 Hash 算法","u":"/docs/split-db","h":"#92843-一致性-hash-算法","p":3085},{"i":3113,"t":"9.28.5 分库分表带来的问题","u":"/docs/split-db","h":"#9285-分库分表带来的问题","p":3085},{"i":3115,"t":"9.28.5.1 分布式事务问题","u":"/docs/split-db","h":"#92851-分布式事务问题","p":3085},{"i":3117,"t":"9.28.5.2 跨节点关联查询 Join 问题","u":"/docs/split-db","h":"#92852-跨节点关联查询-join-问题","p":3085},{"i":3119,"t":"9.28.5.3 跨节点分页、排序、函数问题","u":"/docs/split-db","h":"#92853-跨节点分页排序函数问题","p":3085},{"i":3121,"t":"9.28.5.4 全局主键避重问题","u":"/docs/split-db","h":"#92854-全局主键避重问题","p":3085},{"i":3123,"t":"9.28.5.5 数据迁移问题","u":"/docs/split-db","h":"#92855-数据迁移问题","p":3085},{"i":3125,"t":"9.28.6 如何实现","u":"/docs/split-db","h":"#9286-如何实现","p":3085},{"i":3127,"t":"9.28.7 反馈与建议","u":"/docs/split-db","h":"#9287-反馈与建议","p":3085},{"i":3130,"t":"1.3.1 示例架构","u":"/docs/source","h":"#131-示例架构","p":3129},{"i":3132,"t":"1.3.2 反馈与建议","u":"/docs/source","h":"#132-反馈与建议","p":3129},{"i":3135,"t":"24.1 什么是即时通讯","u":"/docs/signalr","h":"#241-什么是即时通讯","p":3134},{"i":3137,"t":"24.2 即时通讯应用场景","u":"/docs/signalr","h":"#242-即时通讯应用场景","p":3134},{"i":3139,"t":"24.3 关于 SignalR","u":"/docs/signalr","h":"#243-关于-signalr","p":3134},{"i":3141,"t":"24.3.1 微软官方介绍","u":"/docs/signalr","h":"#2431-微软官方介绍","p":3134},{"i":3143,"t":"24.4 注册 SignalR 服务","u":"/docs/signalr","h":"#244-注册-signalr-服务","p":3134},{"i":3145,"t":"24.5 SignalR 长连接和集线器","u":"/docs/signalr","h":"#245-signalr-长连接和集线器","p":3134},{"i":3147,"t":"24.5.1 持久性连接","u":"/docs/signalr","h":"#2451-持久性连接","p":3134},{"i":3149,"t":"24.5.2 集线器","u":"/docs/signalr","h":"#2452-集线器","p":3134},{"i":3151,"t":"24.6 集线器 Hub 定义","u":"/docs/signalr","h":"#246-集线器-hub-定义","p":3134},{"i":3153,"t":"24.6.1 两种定义方式","u":"/docs/signalr","h":"#2461-两种定义方式","p":3134},{"i":3155,"t":"24.6.2 [MapHub] 配置连接地址","u":"/docs/signalr","h":"#2462-maphub-配置连接地址","p":3134},{"i":3157,"t":"24.6.3 Hub 注册更多配置","u":"/docs/signalr","h":"#2463-hub-注册更多配置","p":3134},{"i":3159,"t":"24.7 获取 Hub 实例方式","u":"/docs/signalr","h":"#247-获取-hub-实例方式","p":3134},{"i":3161,"t":"24.7.1 IHubContext 注入方式","u":"/docs/signalr","h":"#2471-ihubcontext-注入方式","p":3134},{"i":3163,"t":"24.7.2 HttpContext 解析方式","u":"/docs/signalr","h":"#2472-httpcontext-解析方式","p":3134},{"i":3165,"t":"24.7.3 IHost 中解析方式","u":"/docs/signalr","h":"#2473-ihost-中解析方式","p":3134},{"i":3167,"t":"24.7.4 强类型 IHubContext 注入方式","u":"/docs/signalr","h":"#2474-强类型-ihubcontext-注入方式","p":3134},{"i":3169,"t":"24.7.5 IHubContext 泛型转换","u":"/docs/signalr","h":"#2475-ihubcontext-泛型转换","p":3134},{"i":3171,"t":"24.8 服务端和客户端双工通信","u":"/docs/signalr","h":"#248-服务端和客户端双工通信","p":3134},{"i":3172,"t":"24.8.1 触发所有客户端代码","u":"/docs/signalr","h":"#2481-触发所有客户端代码","p":3134},{"i":3174,"t":"24.8.2 触发调用者客户端","u":"/docs/signalr","h":"#2482-触发调用者客户端","p":3134},{"i":3176,"t":"24.8.3 触发除了调用者以外的客户端","u":"/docs/signalr","h":"#2483-触发除了调用者以外的客户端","p":3134},{"i":3178,"t":"24.8.4 触发特定用户客户端","u":"/docs/signalr","h":"#2484-触发特定用户客户端","p":3134},{"i":3180,"t":"24.8.5 触发多个用户客户端","u":"/docs/signalr","h":"#2485-触发多个用户客户端","p":3134},{"i":3182,"t":"24.8.6 触发分组内客户端","u":"/docs/signalr","h":"#2486-触发分组内客户端","p":3134},{"i":3184,"t":"24.8.7 触发多个分组客户端","u":"/docs/signalr","h":"#2487-触发多个分组客户端","p":3134},{"i":3186,"t":"24.8.8 触发分组外的客户端","u":"/docs/signalr","h":"#2488-触发分组外的客户端","p":3134},{"i":3188,"t":"24.9 自定义用户唯一标识","u":"/docs/signalr","h":"#249-自定义用户唯一标识","p":3134},{"i":3190,"t":"24.10 分组管理","u":"/docs/signalr","h":"#2410-分组管理","p":3134},{"i":3191,"t":"24.11 各个客户端连接 API","u":"/docs/signalr","h":"#2411-各个客户端连接-api","p":3134},{"i":3192,"t":"24.11.1 Javascript 客户端","u":"/docs/signalr","h":"#24111-javascript-客户端","p":3134},{"i":3193,"t":"24.11.2 Typescript 客户端","u":"/docs/signalr","h":"#24112-typescript-客户端","p":3134},{"i":3195,"t":"24.11.3 .NET 客户端","u":"/docs/signalr","h":"#24113-net-客户端","p":3134},{"i":3196,"t":"24.11.4 Java 客户端","u":"/docs/signalr","h":"#24114-java-客户端","p":3134},{"i":3197,"t":"24.12 常见例子","u":"/docs/signalr","h":"#2412-常见例子","p":3134},{"i":3198,"t":"24.12.1 实现消息广播、推送","u":"/docs/signalr","h":"#24121-实现消息广播推送","p":3134},{"i":3200,"t":"24.12.2 实现聊天功能","u":"/docs/signalr","h":"#24122-实现聊天功能","p":3134},{"i":3202,"t":"24.12.3 实现 你画我来猜","u":"/docs/signalr","h":"#24123-实现-你画我来猜","p":3134},{"i":3204,"t":"24.13 反馈与建议","u":"/docs/signalr","h":"#2413-反馈与建议","p":3134},{"i":3208,"t":"10.1.1 SqlSugar ORM","u":"/docs/sqlsugar","h":"#1011-sqlsugar-orm","p":3206},{"i":3210,"t":"10.1.2 功能介绍","u":"/docs/sqlsugar","h":"#1012-功能介绍","p":3206},{"i":3212,"t":"10.1.3 官网文档","u":"/docs/sqlsugar","h":"#1013-官网文档","p":3206},{"i":3214,"t":"10.1.4 Furion 集成","u":"/docs/sqlsugar","h":"#1014-furion-集成","p":3206},{"i":3216,"t":"10.1.5 特色功能","u":"/docs/sqlsugar","h":"#1015-特色功能","p":3206},{"i":3217,"t":"10.1.5.1 联表查询","u":"/docs/sqlsugar","h":"#10151-联表查询","p":3206},{"i":3219,"t":"10.1.5.2 分页查询","u":"/docs/sqlsugar","h":"#10152-分页查询","p":3206},{"i":3221,"t":"10.1.5.3 动态表达式","u":"/docs/sqlsugar","h":"#10153-动态表达式","p":3206},{"i":3223,"t":"10.1.5.4 仓储方法","u":"/docs/sqlsugar","h":"#10154-仓储方法","p":3206},{"i":3225,"t":"10.1.5.5 多库事务","u":"/docs/sqlsugar","h":"#10155-多库事务","p":3206},{"i":3227,"t":"10.1.5.6 单例模式","u":"/docs/sqlsugar","h":"#10156-单例模式","p":3206},{"i":3229,"t":"10.1.5.7 全局过滤器","u":"/docs/sqlsugar","h":"#10157-全局过滤器","p":3206},{"i":3231,"t":"10.1.5.8 添加或者更新","u":"/docs/sqlsugar","h":"#10158-添加或者更新","p":3206},{"i":3233,"t":"10.1.5.9 自动分表","u":"/docs/sqlsugar","h":"#10159-自动分表","p":3206},{"i":3235,"t":"10.1.5.10 大数据插入,更新,插入或者更新","u":"/docs/sqlsugar","h":"#101510-大数据插入更新插入或者更新","p":3206},{"i":3237,"t":"10.1.5.11 更多功能","u":"/docs/sqlsugar","h":"#101511-更多功能","p":3206},{"i":3239,"t":"10.1.6 反馈与建议","u":"/docs/sqlsugar","h":"#1016-反馈与建议","p":3206},{"i":3243,"t":"状态","u":"/docs/target","h":"#状态","p":3241},{"i":3245,"t":"计划","u":"/docs/target","h":"#计划","p":3241},{"i":3249,"t":"10.1.1 关于 SqlSugar","u":"/docs/sqlsugar-old","h":"#1011-关于-sqlsugar","p":3247},{"i":3251,"t":"10.1.2 如何集成","u":"/docs/sqlsugar-old","h":"#1012-如何集成","p":3247},{"i":3253,"t":"10.1.2.1 注册 SqlSugar 服务","u":"/docs/sqlsugar-old","h":"#10121-注册-sqlsugar-服务","p":3247},{"i":3255,"t":"10.1.3 基本使用","u":"/docs/sqlsugar-old","h":"#1013-基本使用","p":3247},{"i":3257,"t":"10.1.4 数据库操作示例","u":"/docs/sqlsugar-old","h":"#1014-数据库操作示例","p":3247},{"i":3259,"t":"10.1.5 SqlSugarClient 操作示例","u":"/docs/sqlsugar-old","h":"#1015-sqlsugarclient-操作示例","p":3247},{"i":3260,"t":"10.1.5.1 基础查询","u":"/docs/sqlsugar-old","h":"#10151-基础查询","p":3247},{"i":3262,"t":"10.1.5.2 联表查询","u":"/docs/sqlsugar-old","h":"#10152-联表查询","p":3247},{"i":3264,"t":"10.1.5.3 分页查询","u":"/docs/sqlsugar-old","h":"#10153-分页查询","p":3247},{"i":3266,"t":"10.1.5.4 插入","u":"/docs/sqlsugar-old","h":"#10154-插入","p":3247},{"i":3268,"t":"10.1.5.5 更新","u":"/docs/sqlsugar-old","h":"#10155-更新","p":3247},{"i":3270,"t":"10.1.5.6 删除","u":"/docs/sqlsugar-old","h":"#10156-删除","p":3247},{"i":3272,"t":"10.1.6 Sql 查询","u":"/docs/sqlsugar-old","h":"#1016-sql-查询","p":3247},{"i":3274,"t":"10.1.7 打印 sql 到 Swagger","u":"/docs/sqlsugar-old","h":"#1017-打印-sql-到-swagger","p":3247},{"i":3276,"t":"10.1.8 Oracle注意事项","u":"/docs/sqlsugar-old","h":"#1018-oracle注意事项","p":3247},{"i":3278,"t":"10.1.9 反馈与建议","u":"/docs/sqlsugar-old","h":"#1019-反馈与建议","p":3247},{"i":3281,"t":"9.26.1 事务","u":"/docs/tran","h":"#9261-事务","p":3280},{"i":3283,"t":"9.26.2 工作单元","u":"/docs/tran","h":"#9262-工作单元","p":3280},{"i":3285,"t":"9.26.3 如何使用","u":"/docs/tran","h":"#9263-如何使用","p":3280},{"i":3286,"t":"9.26.3.1 [UnitOfWork] 自动管理","u":"/docs/tran","h":"#92631-unitofwork-自动管理","p":3280},{"i":3288,"t":"9.26.3.2 EnsureTransaction() 方法 ✨","u":"/docs/tran","h":"#92632-ensuretransaction-方法-","p":3280},{"i":3290,"t":"9.26.3.2 手动管理","u":"/docs/tran","h":"#92632-手动管理","p":3280},{"i":3292,"t":"9.26.4 工作单元特性说明","u":"/docs/tran","h":"#9264-工作单元特性说明","p":3280},{"i":3293,"t":"9.26.4.1 [UnitOfWork] 特性","u":"/docs/tran","h":"#92641-unitofwork-特性","p":3280},{"i":3295,"t":"9.26.4.2 [ManualCommit] 特性","u":"/docs/tran","h":"#92642-manualcommit-特性","p":3280},{"i":3297,"t":"9.26.5 反馈与建议","u":"/docs/tran","h":"#9265-反馈与建议","p":3280},{"i":3300,"t":"工欲善其事必先利其器!","u":"/docs/vsfast","h":"#工欲善其事必先利其器","p":3299},{"i":3302,"t":"2.8.1 开启内联参数提示","u":"/docs/vsfast","h":"#281-开启内联参数提示","p":3299},{"i":3303,"t":"2.8.2 开启全局智能提示","u":"/docs/vsfast","h":"#282-开启全局智能提示","p":3299},{"i":3304,"t":"2.8.3 实时显示诊断错误","u":"/docs/vsfast","h":"#283-实时显示诊断错误","p":3299},{"i":3306,"t":"2.8.4 中文智能提示","u":"/docs/vsfast","h":"#284-中文智能提示","p":3299},{"i":3308,"t":"2.8.5 代码搜索","u":"/docs/vsfast","h":"#285-代码搜索","p":3299},{"i":3310,"t":"2.8.6 反馈与建议","u":"/docs/vsfast","h":"#286-反馈与建议","p":3299},{"i":3314,"t":"2.2.1 脚手架","u":"/docs/template","h":"#221-脚手架","p":3312},{"i":3316,"t":"2.2.1.1 Furion + EFCore","u":"/docs/template","h":"#2211-furion--efcore","p":3312},{"i":3318,"t":"2.2.1.2 Furion + SqlSugar","u":"/docs/template","h":"#2212-furion--sqlsugar","p":3312},{"i":3320,"t":"2.2.2 安装脚手架","u":"/docs/template","h":"#222-安装脚手架","p":3312},{"i":3322,"t":"2.2.3 使用脚手架","u":"/docs/template","h":"#223-使用脚手架","p":3312},{"i":3324,"t":"2.2.4 脚手架更新","u":"/docs/template","h":"#224-脚手架更新","p":3312},{"i":3326,"t":"2.2.5 Visual Studio 集成","u":"/docs/template","h":"#225-visual-studio-集成","p":3312},{"i":3328,"t":"2.2.6 关于 MVC 添加区域出错问题","u":"/docs/template","h":"#226-关于-mvc-添加区域出错问题","p":3312},{"i":3330,"t":"2.2.7 搭建脚手架","u":"/docs/template","h":"#227-搭建脚手架","p":3312},{"i":3332,"t":"2.2.8 反馈与建议","u":"/docs/template","h":"#228-反馈与建议","p":3312},{"i":3336,"t":"34.4.1 关于二级虚拟目录","u":"/docs/virtual-deploy","h":"#3441-关于二级虚拟目录","p":3334},{"i":3338,"t":"34.4.2 针对在 IIS 网站下添加 Application 情况","u":"/docs/virtual-deploy","h":"#3442-针对在-iis-网站下添加-application-情况","p":3334},{"i":3340,"t":"34.4.3 针对非 IIS 下部署情况","u":"/docs/virtual-deploy","h":"#3443-针对非-iis-下部署情况","p":3334},{"i":3342,"t":"34.4.3.1 配置 AppSettings","u":"/docs/virtual-deploy","h":"#34431-配置-appsettings","p":3334},{"i":3344,"t":"34.4.3.2 .NET6 WebApplication 模式下虚拟目录配置","u":"/docs/virtual-deploy","h":"#34432-net6-webapplication-模式下虚拟目录配置","p":3334},{"i":3346,"t":"34.4.4 反馈与建议","u":"/docs/virtual-deploy","h":"#3444-反馈与建议","p":3334},{"i":3349,"t":"36.1.1 关于单元测试","u":"/docs/unittest","h":"#3611-关于单元测试","p":3348},{"i":3351,"t":"36.1.2 单元测试好处","u":"/docs/unittest","h":"#3612-单元测试好处","p":3348},{"i":3353,"t":"36.1.3 单元测试类型","u":"/docs/unittest","h":"#3613-单元测试类型","p":3348},{"i":3355,"t":"36.1.4 主流的单元测试库","u":"/docs/unittest","h":"#3614-主流的单元测试库","p":3348},{"i":3357,"t":"36.1.5 第一个例子","u":"/docs/unittest","h":"#3615-第一个例子","p":3348},{"i":3358,"t":"36.1.5.1 创建 xUnit 单元测试项目","u":"/docs/unittest","h":"#36151-创建-xunit-单元测试项目","p":3348},{"i":3359,"t":"36.1.5.2 第一个测试方法","u":"/docs/unittest","h":"#36152-第一个测试方法","p":3348},{"i":3361,"t":"36.1.5.3 运行测试","u":"/docs/unittest","h":"#36153-运行测试","p":3348},{"i":3363,"t":"36.1.5.4 多个测试方法测试","u":"/docs/unittest","h":"#36154-多个测试方法测试","p":3348},{"i":3364,"t":"36.1.5.5 重复/回归测试","u":"/docs/unittest","h":"#36155-重复回归测试","p":3348},{"i":3366,"t":"36.1.6 集成 Furion 强大功能","u":"/docs/unittest","h":"#3616-集成-furion-强大功能","p":3348},{"i":3368,"t":"36.1.6.1 安装 Furion.Xunit 包","u":"/docs/unittest","h":"#36161-安装-furionxunit-包","p":3348},{"i":3370,"t":"36.1.6.2 添加初始配置类","u":"/docs/unittest","h":"#36162-添加初始配置类","p":3348},{"i":3372,"t":"36.1.6.3 使用 Furion 完整功能","u":"/docs/unittest","h":"#36163-使用-furion-完整功能","p":3348},{"i":3374,"t":"36.1.7 带参数的测试方法","u":"/docs/unittest","h":"#3617-带参数的测试方法","p":3348},{"i":3376,"t":"36.1.8 如何进行依赖注入","u":"/docs/unittest","h":"#3618-如何进行依赖注入","p":3348},{"i":3378,"t":"36.1.8.1 编写一个 ICalcService 接口及实现类","u":"/docs/unittest","h":"#36181-编写一个-icalcservice-接口及实现类","p":3348},{"i":3380,"t":"36.1.8.2 在测试类中调用","u":"/docs/unittest","h":"#36182-在测试类中调用","p":3348},{"i":3382,"t":"36.1.8.3 输出日志","u":"/docs/unittest","h":"#36183-输出日志","p":3348},{"i":3384,"t":"36.1.8.4 关于依赖注入作用域释放","u":"/docs/unittest","h":"#36184-关于依赖注入作用域释放","p":3348},{"i":3386,"t":"36.1.8.5 测试释放资源","u":"/docs/unittest","h":"#36185-测试释放资源","p":3348},{"i":3388,"t":"36.1.8.6 [AssemblyFixture] 特性","u":"/docs/unittest","h":"#36186-assemblyfixture-特性","p":3348},{"i":3390,"t":"36.1.8.7 IClassFixture<> 单个注入","u":"/docs/unittest","h":"#36187-iclassfixture-单个注入","p":3348},{"i":3392,"t":"36.1.8.8 ICollectionFixture<> 多个注入","u":"/docs/unittest","h":"#36188-icollectionfixture-多个注入","p":3348},{"i":3394,"t":"36.1.9 Web 集成测试","u":"/docs/unittest","h":"#3619-web-集成测试","p":3348},{"i":3396,"t":"36.1.9.1 对现有项目进行集成测试","u":"/docs/unittest","h":"#36191-对现有项目进行集成测试","p":3348},{"i":3398,"t":"36.1.9.2 独立主机方式测试","u":"/docs/unittest","h":"#36192-独立主机方式测试","p":3348},{"i":3400,"t":"36.1.9.3 系统集成/环境/配置部署测试","u":"/docs/unittest","h":"#36193-系统集成环境配置部署测试","p":3348},{"i":3402,"t":"36.1.9.4 集成 Furion.Xunit 拓展","u":"/docs/unittest","h":"#36194-集成-furionxunit-拓展","p":3348},{"i":3404,"t":"36.1.10 Assert 断言","u":"/docs/unittest","h":"#36110-assert-断言","p":3348},{"i":3406,"t":"36.1.11 单元测试覆盖率","u":"/docs/unittest","h":"#36111-单元测试覆盖率","p":3348},{"i":3408,"t":"36.1.12 反馈与建议","u":"/docs/unittest","h":"#36112-反馈与建议","p":3348},{"i":3411,"t":"18.1 关于日志","u":"/docs/logging","h":"#181-关于日志","p":3410},{"i":3413,"t":"18.2 日志作用","u":"/docs/logging","h":"#182-日志作用","p":3410},{"i":3415,"t":"18.3 日志级别","u":"/docs/logging","h":"#183-日志级别","p":3410},{"i":3417,"t":"18.4 如何使用","u":"/docs/logging","h":"#184-如何使用","p":3410},{"i":3419,"t":"18.4.1 ILogger 泛型方式","u":"/docs/logging","h":"#1841-iloggert-泛型方式","p":3410},{"i":3421,"t":"18.4.2 ILoggerFactory 工厂方式","u":"/docs/logging","h":"#1842-iloggerfactory-工厂方式","p":3410},{"i":3423,"t":"18.4.3 Log 静态类方式","u":"/docs/logging","h":"#1843-log-静态类方式","p":3410},{"i":3425,"t":"18.4.4 懒人模式 😁","u":"/docs/logging","h":"#1844-懒人模式-","p":3410},{"i":3427,"t":"18.5 配置日志输出介质","u":"/docs/logging","h":"#185-配置日志输出介质","p":3410},{"i":3429,"t":"18.5.1 输出到控制台","u":"/docs/logging","h":"#1851-输出到控制台","p":3410},{"i":3431,"t":"18.5.2 输出到文件","u":"/docs/logging","h":"#1852-输出到文件","p":3410},{"i":3433,"t":"18.5.3 输出到数据库/其他存储介质","u":"/docs/logging","h":"#1853-输出到数据库其他存储介质","p":3410},{"i":3435,"t":"18.5.4 ILoggerFactory 方式","u":"/docs/logging","h":"#1854-iloggerfactory-方式","p":3410},{"i":3437,"t":"18.5.5 ILoggingBuilder 方式","u":"/docs/logging","h":"#1855-iloggingbuilder-方式","p":3410},{"i":3439,"t":"18.5.6 记录请求日志","u":"/docs/logging","h":"#1856-记录请求日志","p":3410},{"i":3441,"t":"18.5.7 Debug 和 Trace 默认不输出问题","u":"/docs/logging","h":"#1857-debug-和-trace-默认不输出问题","p":3410},{"i":3443,"t":"18.6 [LoggingMonitor] 监听日志","u":"/docs/logging","h":"#186-loggingmonitor-监听日志","p":3410},{"i":3445,"t":"18.6.1 特性配置","u":"/docs/logging","h":"#1861-特性配置","p":3410},{"i":3447,"t":"18.6.2 全局配置","u":"/docs/logging","h":"#1862-全局配置","p":3410},{"i":3449,"t":"18.6.3 更多配置","u":"/docs/logging","h":"#1863-更多配置","p":3410},{"i":3451,"t":"18.6.4 JSON 格式","u":"/docs/logging","h":"#1864-json-格式","p":3410},{"i":3453,"t":"18.6.5 全局过滤 WriteFilter","u":"/docs/logging","h":"#1865-全局过滤-writefilter","p":3410},{"i":3455,"t":"18.6.6 输出 JSON 支持忽略属性名或属性类型","u":"/docs/logging","h":"#1866-输出-json-支持忽略属性名或属性类型","p":3410},{"i":3457,"t":"18.6.7 将 LoggingMonitor 写入数据库","u":"/docs/logging","h":"#1867-将-loggingmonitor-写入数据库","p":3410},{"i":3459,"t":"18.7 打印日志到 Swagger 中","u":"/docs/logging","h":"#187-打印日志到-swagger-中","p":3410},{"i":3461,"t":"18.8 静态 Default() 方式构建","u":"/docs/logging","h":"#188-静态-default-方式构建","p":3410},{"i":3463,"t":"18.9 规范日志模板","u":"/docs/logging","h":"#189-规范日志模板","p":3410},{"i":3465,"t":"18.10 日志上下文","u":"/docs/logging","h":"#1810-日志上下文","p":3410},{"i":3467,"t":"18.11 关闭 .NET Core 底层的日志","u":"/docs/logging","h":"#1811-关闭-net-core-底层的日志","p":3410},{"i":3469,"t":"18.12 关于数据库日志循环输出日志","u":"/docs/logging","h":"#1812-关于数据库日志循环输出日志","p":3410},{"i":3471,"t":"18.13 反馈与建议","u":"/docs/logging","h":"#1813-反馈与建议","p":3410},{"i":3475,"t":"19.1 关于远程请求","u":"/docs/http","h":"#191-关于远程请求","p":3473},{"i":3477,"t":"19.2 远程请求的作用","u":"/docs/http","h":"#192-远程请求的作用","p":3473},{"i":3479,"t":"19.3 基础使用","u":"/docs/http","h":"#193-基础使用","p":3473},{"i":3480,"t":"19.3.1 注册服务","u":"/docs/http","h":"#1931-注册服务","p":3473},{"i":3482,"t":"19.3.2 使用方式","u":"/docs/http","h":"#1932-使用方式","p":3473},{"i":3484,"t":"19.4 字符串方式使用示例","u":"/docs/http","h":"#194-字符串方式使用示例","p":3473},{"i":3485,"t":"19.4.1 内置请求方式","u":"/docs/http","h":"#1941-内置请求方式","p":3473},{"i":3487,"t":"19.4.2 设置请求地址","u":"/docs/http","h":"#1942-设置请求地址","p":3473},{"i":3489,"t":"19.4.3 设置请求方式","u":"/docs/http","h":"#1943-设置请求方式","p":3473},{"i":3491,"t":"19.4.4 设置地址模板","u":"/docs/http","h":"#1944-设置地址模板","p":3473},{"i":3493,"t":"19.4.5 设置请求报文头","u":"/docs/http","h":"#1945-设置请求报文头","p":3473},{"i":3495,"t":"19.4.6 设置 URL 地址参数","u":"/docs/http","h":"#1946-设置-url-地址参数","p":3473},{"i":3497,"t":"19.4.7 设置请求客户端","u":"/docs/http","h":"#1947-设置请求客户端","p":3473},{"i":3499,"t":"19.4.8 设置 Body 参数","u":"/docs/http","h":"#1948-设置-body-参数","p":3473},{"i":3501,"t":"19.4.9 设置 Content-Type","u":"/docs/http","h":"#1949-设置-content-type","p":3473},{"i":3503,"t":"19.4.10 设置内容编码","u":"/docs/http","h":"#19410-设置内容编码","p":3473},{"i":3505,"t":"19.4.11 设置 JSON 序列化提供程序","u":"/docs/http","h":"#19411-设置-json-序列化提供程序","p":3473},{"i":3507,"t":"19.4.12 启用 Body 参数验证","u":"/docs/http","h":"#19412-启用-body-参数验证","p":3473},{"i":3509,"t":"19.4.13 请求拦截","u":"/docs/http","h":"#19413-请求拦截","p":3473},{"i":3511,"t":"19.4.14 HttpClient 拦截","u":"/docs/http","h":"#19414-httpclient-拦截","p":3473},{"i":3513,"t":"19.4.15 请求之前拦截","u":"/docs/http","h":"#19415-请求之前拦截","p":3473},{"i":3515,"t":"19.4.16 成功请求拦截","u":"/docs/http","h":"#19416-成功请求拦截","p":3473},{"i":3517,"t":"19.4.17 请求异常拦截","u":"/docs/http","h":"#19417-请求异常拦截","p":3473},{"i":3519,"t":"19.4.18 各种返回值处理","u":"/docs/http","h":"#19418-各种返回值处理","p":3473},{"i":3521,"t":"19.4.19 设置 Byte[]/Stream 类型/上传文件","u":"/docs/http","h":"#19419-设置-bytestream-类型上传文件","p":3473},{"i":3523,"t":"19.4.20 设置 IServiceProvider","u":"/docs/http","h":"#19420-设置-iserviceprovider","p":3473},{"i":3525,"t":"19.4.21 支持模板配置","u":"/docs/http","h":"#19421-支持模板配置","p":3473},{"i":3527,"t":"19.4.22 重试策略","u":"/docs/http","h":"#19422-重试策略","p":3473},{"i":3529,"t":"19.4.23 支持 GZip 压缩","u":"/docs/http","h":"#19423-支持-gzip-压缩","p":3473},{"i":3531,"t":"19.4.24 设置 Url 转码","u":"/docs/http","h":"#19424-设置-url-转码","p":3473},{"i":3533,"t":"19.5 IHttpDispatchProxy 代理方式","u":"/docs/http","h":"#195-ihttpdispatchproxy-代理方式","p":3473},{"i":3534,"t":"19.5.1 支持多种代理方式","u":"/docs/http","h":"#1951-支持多种代理方式","p":3473},{"i":3536,"t":"19.5.2 设置地址模板","u":"/docs/http","h":"#1952-设置地址模板","p":3473},{"i":3538,"t":"19.5.3 设置请求报文头","u":"/docs/http","h":"#1953-设置请求报文头","p":3473},{"i":3540,"t":"19.5.4 设置 URL 地址参数","u":"/docs/http","h":"#1954-设置-url-地址参数","p":3473},{"i":3542,"t":"19.5.5 设置请求客户端","u":"/docs/http","h":"#1955-设置请求客户端","p":3473},{"i":3544,"t":"19.5.6 设置 Body 参数","u":"/docs/http","h":"#1956-设置-body-参数","p":3473},{"i":3546,"t":"19.5.7 设置 JSON 序列化提供程序","u":"/docs/http","h":"#1957-设置-json-序列化提供程序","p":3473},{"i":3548,"t":"19.5.8 参数验证","u":"/docs/http","h":"#1958-参数验证","p":3473},{"i":3550,"t":"19.5.9 请求拦截","u":"/docs/http","h":"#1959-请求拦截","p":3473},{"i":3552,"t":"19.5.10 HttpClient 拦截","u":"/docs/http","h":"#19510-httpclient-拦截","p":3473},{"i":3554,"t":"19.5.11 请求之前拦截","u":"/docs/http","h":"#19511-请求之前拦截","p":3473},{"i":3556,"t":"19.5.12 成功请求拦截","u":"/docs/http","h":"#19512-成功请求拦截","p":3473},{"i":3558,"t":"19.5.13 请求异常拦截","u":"/docs/http","h":"#19513-请求异常拦截","p":3473},{"i":3560,"t":"19.5.14 各种返回值处理","u":"/docs/http","h":"#19514-各种返回值处理","p":3473},{"i":3562,"t":"19.5.15 设置 Byte[]/Stream 类型/上传文件","u":"/docs/http","h":"#19515-设置-bytestream-类型上传文件","p":3473},{"i":3564,"t":"19.5.16 支持模板配置","u":"/docs/http","h":"#19516-支持模板配置","p":3473},{"i":3566,"t":"19.5.17 重试策略","u":"/docs/http","h":"#19517-重试策略","p":3473},{"i":3568,"t":"19.5.18 支持 GZip","u":"/docs/http","h":"#19518-支持-gzip","p":3473},{"i":3570,"t":"19.5.19 设置 Url 转码","u":"/docs/http","h":"#19519-设置-url-转码","p":3473},{"i":3572,"t":"19.6 请求客户端配置","u":"/docs/http","h":"#196-请求客户端配置","p":3473},{"i":3574,"t":"19.6.1 Startup.cs 统一配置","u":"/docs/http","h":"#1961-startupcs-统一配置","p":3473},{"i":3576,"t":"19.6.2 配置客户端 Timeout","u":"/docs/http","h":"#1962-配置客户端-timeout","p":3473},{"i":3578,"t":"19.6.3 配置客户端生存期","u":"/docs/http","h":"#1963-配置客户端生存期","p":3473},{"i":3580,"t":"19.6.4 自定义 Client 类方式","u":"/docs/http","h":"#1964-自定义-client-类方式","p":3473},{"i":3582,"t":"19.6.5 自定义 Client 类 + 接口方式","u":"/docs/http","h":"#1965-自定义-client-类--接口方式","p":3473},{"i":3584,"t":"19.7 SSL/https 证书配置","u":"/docs/http","h":"#197-sslhttps-证书配置","p":3473},{"i":3586,"t":"19.7.1 使用默认 SSL 证书","u":"/docs/http","h":"#1971-使用默认-ssl-证书","p":3473},{"i":3588,"t":"19.7.2 忽略特定客户端 SSL 证书检查","u":"/docs/http","h":"#1972-忽略特定客户端-ssl-证书检查","p":3473},{"i":3590,"t":"19.7.3 手动指定 SSL 证书","u":"/docs/http","h":"#1973-手动指定-ssl-证书","p":3473},{"i":3592,"t":"19.7.4 忽略所有客户端证书检查","u":"/docs/http","h":"#1974-忽略所有客户端证书检查","p":3473},{"i":3594,"t":"19.8 关于返回值非 200 时忽略 Http状态","u":"/docs/http","h":"#198-关于返回值非-200-时忽略-http状态","p":3473},{"i":3596,"t":"19.9 关于同步请求","u":"/docs/http","h":"#199-关于同步请求","p":3473},{"i":3598,"t":"19.10 静态 Default 方式构建","u":"/docs/http","h":"#1910-静态-default-方式构建","p":3473},{"i":3600,"t":"19.11 关闭 Http 请求日志","u":"/docs/http","h":"#1911-关闭-http-请求日志","p":3473},{"i":3602,"t":"19.12 获取 Cookies","u":"/docs/http","h":"#1912-获取-cookies","p":3473},{"i":3604,"t":"19.13 反馈与建议","u":"/docs/http","h":"#1913-反馈与建议","p":3473},{"i":3607,"t":"6.1 什么是接口文档","u":"/docs/specification-document","h":"#61-什么是接口文档","p":3606},{"i":3609,"t":"6.2 为什么要写接口文档","u":"/docs/specification-document","h":"#62-为什么要写接口文档","p":3606},{"i":3611,"t":"6.3 为什么需要规范化文档","u":"/docs/specification-document","h":"#63-为什么需要规范化文档","p":3606},{"i":3613,"t":"6.3.1 协议规范","u":"/docs/specification-document","h":"#631-协议规范","p":3606},{"i":3615,"t":"6.3.2 接口路径规范","u":"/docs/specification-document","h":"#632-接口路径规范","p":3606},{"i":3617,"t":"6.3.3 版本控制规范","u":"/docs/specification-document","h":"#633-版本控制规范","p":3606},{"i":3619,"t":"6.3.4 接口命名规范","u":"/docs/specification-document","h":"#634-接口命名规范","p":3606},{"i":3621,"t":"6.3.5 请求参数规范","u":"/docs/specification-document","h":"#635-请求参数规范","p":3606},{"i":3623,"t":"6.3.6 返回数据规范","u":"/docs/specification-document","h":"#636-返回数据规范","p":3606},{"i":3625,"t":"6.4 什么是 Swagger","u":"/docs/specification-document","h":"#64-什么是-swagger","p":3606},{"i":3627,"t":"6.5 Swagger 使用","u":"/docs/specification-document","h":"#65-swagger-使用","p":3606},{"i":3629,"t":"6.5.1 注册服务","u":"/docs/specification-document","h":"#651-注册服务","p":3606},{"i":3631,"t":"6.5.2 默认地址","u":"/docs/specification-document","h":"#652-默认地址","p":3606},{"i":3633,"t":"6.5.3 默认分组","u":"/docs/specification-document","h":"#653-默认分组","p":3606},{"i":3635,"t":"6.5.4 文档注释","u":"/docs/specification-document","h":"#654-文档注释","p":3606},{"i":3637,"t":"6.5.5 多分组支持","u":"/docs/specification-document","h":"#655-多分组支持","p":3606},{"i":3639,"t":"6.5.6 多分组排序","u":"/docs/specification-document","h":"#656-多分组排序","p":3606},{"i":3641,"t":"6.5.7 多分组信息配置","u":"/docs/specification-document","h":"#657-多分组信息配置","p":3606},{"i":3643,"t":"6.5.8 组中组(标签)","u":"/docs/specification-document","h":"#658-组中组标签","p":3606},{"i":3645,"t":"6.5.9 默认展开所有文档","u":"/docs/specification-document","h":"#659-默认展开所有文档","p":3606},{"i":3647,"t":"6.5.10 配置文档标题","u":"/docs/specification-document","h":"#6510-配置文档标题","p":3606},{"i":3649,"t":"6.5.11 授权控制","u":"/docs/specification-document","h":"#6511-授权控制","p":3606},{"i":3651,"t":"6.5.12 在线测试","u":"/docs/specification-document","h":"#6512-在线测试","p":3606},{"i":3653,"t":"6.5.13 性能监视 MiniProfiler","u":"/docs/specification-document","h":"#6513-性能监视-miniprofiler","p":3606},{"i":3655,"t":"6.5.14 定义接口输出类型","u":"/docs/specification-document","h":"#6514-定义接口输出类型","p":3606},{"i":3657,"t":"6.5.15 隐藏特定分组","u":"/docs/specification-document","h":"#6515-隐藏特定分组","p":3606},{"i":3659,"t":"6.5.16 中文乱码问题","u":"/docs/specification-document","h":"#6516-中文乱码问题","p":3606},{"i":3661,"t":"6.5.17 生产环境中关闭 Swagger","u":"/docs/specification-document","h":"#6517-生产环境中关闭-swagger","p":3606},{"i":3663,"t":"6.5.18 设置 Example Value 默认值","u":"/docs/specification-document","h":"#6518-设置-example-value-默认值","p":3606},{"i":3665,"t":"6.5.19 自定义 Swagger 配置","u":"/docs/specification-document","h":"#6519-自定义-swagger-配置","p":3606},{"i":3667,"t":"6.5.20 配置 Swagger的 Schemes","u":"/docs/specification-document","h":"#6520-配置-swagger的-schemes","p":3606},{"i":3669,"t":"6.5.21 自定义 swagger.json 路由模板","u":"/docs/specification-document","h":"#6521-自定义-swaggerjson-路由模板","p":3606},{"i":3671,"t":"6.5.22 关于 application/x-www-form-urlencoded 请求","u":"/docs/specification-document","h":"#6522-关于-applicationx-www-form-urlencoded-请求","p":3606},{"i":3673,"t":"6.5.23 Swagger 出现 CORS 问题解决","u":"/docs/specification-document","h":"#6523-swagger-出现-cors-问题解决","p":3606},{"i":3675,"t":"6.5.24 Swagger 出现默认 xml 参数问题解决","u":"/docs/specification-document","h":"#6524-swagger-出现默认-xml-参数问题解决","p":3606},{"i":3677,"t":"6.5.25 Swagger 多语言支持","u":"/docs/specification-document","h":"#6525-swagger-多语言支持","p":3606},{"i":3679,"t":"6.5.26 自定义逻辑控制 Swagger 每一个 api 可见性","u":"/docs/specification-document","h":"#6526-自定义逻辑控制-swagger-每一个-api-可见性","p":3606},{"i":3681,"t":"6.5.27 配置 MVC 控制器支持规范化处理","u":"/docs/specification-document","h":"#6527-配置-mvc-控制器支持规范化处理","p":3606},{"i":3683,"t":"6.5.28 Swagger 刷新记住授权状态","u":"/docs/specification-document","h":"#6528-swagger-刷新记住授权状态","p":3606},{"i":3685,"t":"6.5.29 带登录的 Swagger 文档","u":"/docs/specification-document","h":"#6529-带登录的-swagger-文档","p":3606},{"i":3687,"t":"6.5.30 inheritdoc 实现注释继承","u":"/docs/specification-document","h":"#6530-inheritdoc-实现注释继承","p":3606},{"i":3689,"t":"6.5.31 启用 All Groups 分组功能","u":"/docs/specification-document","h":"#6531-启用-all-groups-分组功能","p":3606},{"i":3691,"t":"6.5.32 接口过时控制","u":"/docs/specification-document","h":"#6532-接口过时控制","p":3606},{"i":3693,"t":"6.5.33 单一接口更多描述","u":"/docs/specification-document","h":"#6533-单一接口更多描述","p":3606},{"i":3695,"t":"6.5.34 Swagger 异常/不能显示/错误处理","u":"/docs/specification-document","h":"#6534-swagger-异常不能显示错误处理","p":3606},{"i":3697,"t":"6.5.35 自定义 Swagger 的 SchemaId","u":"/docs/specification-document","h":"#6535-自定义-swagger-的-schemaid","p":3606},{"i":3699,"t":"6.5.36 自定义 Swagger 的 OperationId","u":"/docs/specification-document","h":"#6536-自定义-swagger-的-operationid","p":3606},{"i":3701,"t":"6.5.37 Swagger 接口文档支持完整的 Markdown","u":"/docs/specification-document","h":"#6537-swagger-接口文档支持完整的-markdown","p":3606},{"i":3703,"t":"6.5.38 第三方 UI 集成,如 Knife4jUI","u":"/docs/specification-document","h":"#6538-第三方-ui-集成如-knife4jui","p":3606},{"i":3705,"t":"6.6 SpecificationDocumentSettings 配置","u":"/docs/specification-document","h":"#66-specificationdocumentsettings-配置","p":3606},{"i":3707,"t":"6.7 统一返回值模型/规范化结果/API 返回值","u":"/docs/specification-document","h":"#67-统一返回值模型规范化结果api-返回值","p":3606},{"i":3709,"t":"6.7.1 排除规范化处理","u":"/docs/specification-document","h":"#671-排除规范化处理","p":3606},{"i":3711,"t":"6.7.2 规范化结果添加额外数据","u":"/docs/specification-document","h":"#672-规范化结果添加额外数据","p":3606},{"i":3713,"t":"6.7.3 自定义特别接口规范化结果","u":"/docs/specification-document","h":"#673-自定义特别接口规范化结果","p":3606},{"i":3715,"t":"6.8 支持多套规范化配置","u":"/docs/specification-document","h":"#68-支持多套规范化配置","p":3606},{"i":3717,"t":"6.9 针对特定控制器或特定方法配置序列化选项","u":"/docs/specification-document","h":"#69-针对特定控制器或特定方法配置序列化选项","p":3606},{"i":3719,"t":"6.9.1 通过 JsonResult 设置第二个参数","u":"/docs/specification-document","h":"#691-通过-jsonresult-设置第二个参数","p":3606},{"i":3721,"t":"6.9.2 注册多套序列化配置选项 (推荐)","u":"/docs/specification-document","h":"#692-注册多套序列化配置选项-推荐","p":3606},{"i":3723,"t":"6.10 反馈与建议","u":"/docs/specification-document","h":"#610-反馈与建议","p":3606},{"i":3726,"t":"17.1 关于视图引擎","u":"/docs/view-engine","h":"#171-关于视图引擎","p":3725},{"i":3728,"t":"17.2 视图引擎作用","u":"/docs/view-engine","h":"#172-视图引擎作用","p":3725},{"i":3730,"t":"17.3 基础使用","u":"/docs/view-engine","h":"#173-基础使用","p":3725},{"i":3731,"t":"17.3.1 注册服务","u":"/docs/view-engine","h":"#1731-注册服务","p":3725},{"i":3733,"t":"17.3.2 使用方式","u":"/docs/view-engine","h":"#1732-使用方式","p":3725},{"i":3735,"t":"17.3.3 弱类型模板","u":"/docs/view-engine","h":"#1733-弱类型模板","p":3725},{"i":3737,"t":"17.3.4 强类型模板","u":"/docs/view-engine","h":"#1734-强类型模板","p":3725},{"i":3739,"t":"17.3.5 高性能模板缓存 🥇","u":"/docs/view-engine","h":"#1735-高性能模板缓存-","p":3725},{"i":3741,"t":"17.4 高级用法","u":"/docs/view-engine","h":"#174-高级用法","p":3725},{"i":3743,"t":"17.4.1 添加程序集","u":"/docs/view-engine","h":"#1741-添加程序集","p":3725},{"i":3745,"t":"17.4.2 添加命名空间","u":"/docs/view-engine","h":"#1742-添加命名空间","p":3725},{"i":3747,"t":"17.4.3 定义模板方法","u":"/docs/view-engine","h":"#1743-定义模板方法","p":3725},{"i":3749,"t":"17.4.4 调用类方法","u":"/docs/view-engine","h":"#1744-调用类方法","p":3725},{"i":3751,"t":"17.5 IViewEngine 接口","u":"/docs/view-engine","h":"#175-iviewengine-接口","p":3725},{"i":3753,"t":"17.6 字符串模板替换引擎","u":"/docs/view-engine","h":"#176-字符串模板替换引擎","p":3725},{"i":3755,"t":"17.7 反馈与建议","u":"/docs/view-engine","h":"#177-反馈与建议","p":3725},{"i":3759,"t":"26.1.1 关于调度作业","u":"/docs/job","h":"#2611-关于调度作业","p":3757},{"i":3761,"t":"26.1.2 快速入门","u":"/docs/job","h":"#2612-快速入门","p":3757},{"i":3763,"t":"26.1.2.1 指定作业 Id","u":"/docs/job","h":"#26121-指定作业-id","p":3757},{"i":3765,"t":"26.1.2.2 多个作业触发器","u":"/docs/job","h":"#26122-多个作业触发器","p":3757},{"i":3767,"t":"26.1.2.3 串行 执行","u":"/docs/job","h":"#26123-串行-执行","p":3757},{"i":3769,"t":"26.1.2.4 打印作业完整信息","u":"/docs/job","h":"#26124-打印作业完整信息","p":3757},{"i":3771,"t":"26.1.2.5 运行时(动态)操作作业","u":"/docs/job","h":"#26125-运行时动态操作作业","p":3757},{"i":3773,"t":"26.1.2.6 作业触发器特性","u":"/docs/job","h":"#26126-作业触发器特性","p":3757},{"i":3775,"t":"26.1.3 作业信息 JobDetail 及构建器","u":"/docs/job","h":"#2613-作业信息-jobdetail-及构建器","p":3757},{"i":3776,"t":"26.1.3.1 关于作业信息","u":"/docs/job","h":"#26131-关于作业信息","p":3757},{"i":3778,"t":"26.1.3.2 关于作业信息构建器","u":"/docs/job","h":"#26132-关于作业信息构建器","p":3757},{"i":3780,"t":"26.1.3.3 设置作业信息构建器","u":"/docs/job","h":"#26133-设置作业信息构建器","p":3757},{"i":3782,"t":"26.1.3.4 作业信息/构建器额外数据","u":"/docs/job","h":"#26134-作业信息构建器额外数据","p":3757},{"i":3784,"t":"26.1.3.5 多种格式字符串输出","u":"/docs/job","h":"#26135-多种格式字符串输出","p":3757},{"i":3786,"t":"26.1.4 作业处理程序 IJob","u":"/docs/job","h":"#2614-作业处理程序-ijob","p":3757},{"i":3788,"t":"26.1.4.1 如何定义","u":"/docs/job","h":"#26141-如何定义","p":3757},{"i":3790,"t":"26.1.4.2 依赖注入","u":"/docs/job","h":"#26142-依赖注入","p":3757},{"i":3792,"t":"26.1.4.3 JobExecutingContext 上下文","u":"/docs/job","h":"#26143-jobexecutingcontext-上下文","p":3757},{"i":3794,"t":"26.1.4.4 作业被取消处理","u":"/docs/job","h":"#26144-作业被取消处理","p":3757},{"i":3796,"t":"26.1.5 作业触发器 Trigger 及构建器","u":"/docs/job","h":"#2615-作业触发器-trigger-及构建器","p":3757},{"i":3797,"t":"26.1.5.1 关于作业触发器","u":"/docs/job","h":"#26151-关于作业触发器","p":3757},{"i":3799,"t":"26.1.5.2 作业触发器状态","u":"/docs/job","h":"#26152-作业触发器状态","p":3757},{"i":3801,"t":"26.1.5.3 关于作业触发器构建器","u":"/docs/job","h":"#26153-关于作业触发器构建器","p":3757},{"i":3803,"t":"26.1.5.4 内置作业触发器构建器","u":"/docs/job","h":"#26154-内置作业触发器构建器","p":3757},{"i":3805,"t":"26.1.5.5 自定义作业触发器","u":"/docs/job","h":"#26155-自定义作业触发器","p":3757},{"i":3807,"t":"26.1.5.6 作业触发器特性","u":"/docs/job","h":"#26156-作业触发器特性","p":3757},{"i":3809,"t":"26.1.5.7 设置作业触发器构建器","u":"/docs/job","h":"#26157-设置作业触发器构建器","p":3757},{"i":3811,"t":"26.1.5.8 多种格式字符串输出","u":"/docs/job","h":"#26158-多种格式字符串输出","p":3757},{"i":3813,"t":"26.1.6 作业计划 Scheduler 及构建器","u":"/docs/job","h":"#2616-作业计划-scheduler-及构建器","p":3757},{"i":3814,"t":"26.1.6.1 关于作业计划","u":"/docs/job","h":"#26161-关于作业计划","p":3757},{"i":3816,"t":"26.1.6.2 关于作业计划构建器","u":"/docs/job","h":"#26162-关于作业计划构建器","p":3757},{"i":3818,"t":"26.1.6.3 设置作业计划构建器","u":"/docs/job","h":"#26163-设置作业计划构建器","p":3757},{"i":3820,"t":"26.1.6.4 多种格式字符串输出","u":"/docs/job","h":"#26164-多种格式字符串输出","p":3757},{"i":3822,"t":"26.1.7 作业调度器 ScheduleOptionsBuilder 配置选项","u":"/docs/job","h":"#2617-作业调度器-scheduleoptionsbuilder-配置选项","p":3757},{"i":3823,"t":"26.1.7.1 关于 ScheduleOptionsBuilder","u":"/docs/job","h":"#26171-关于-scheduleoptionsbuilder","p":3757},{"i":3825,"t":"26.1.7.2 ScheduleOptionsBuilder 内置属性和方法","u":"/docs/job","h":"#26172-scheduleoptionsbuilder-内置属性和方法","p":3757},{"i":3827,"t":"26.1.8 作业监视器 IJobMonitor","u":"/docs/job","h":"#2618-作业监视器-ijobmonitor","p":3757},{"i":3829,"t":"26.1.8.1 关于参数 JobExecutionContext","u":"/docs/job","h":"#26181-关于参数-jobexecutioncontext","p":3757},{"i":3831,"t":"26.1.9 作业执行器 IJobExecutor","u":"/docs/job","h":"#2619-作业执行器-ijobexecutor","p":3757},{"i":3833,"t":"26.1.10 作业计划工厂 ISchedulerFactory","u":"/docs/job","h":"#26110-作业计划工厂-ischedulerfactory","p":3757},{"i":3835,"t":"26.1.10.1 查找所有作业","u":"/docs/job","h":"#261101-查找所有作业","p":3757},{"i":3837,"t":"26.1.10.2 查找下一个触发的作业","u":"/docs/job","h":"#261102-查找下一个触发的作业","p":3757},{"i":3839,"t":"26.1.10.3 获取单个作业","u":"/docs/job","h":"#261103-获取单个作业","p":3757},{"i":3841,"t":"26.1.10.4 添加作业","u":"/docs/job","h":"#261104-添加作业","p":3757},{"i":3843,"t":"26.1.10.5 更新作业","u":"/docs/job","h":"#261105-更新作业","p":3757},{"i":3845,"t":"26.1.10.6 删除作业","u":"/docs/job","h":"#261106-删除作业","p":3757},{"i":3847,"t":"26.1.10.7 检查作业是否存在","u":"/docs/job","h":"#261107-检查作业是否存在","p":3757},{"i":3849,"t":"26.1.10.8 启动所有作业","u":"/docs/job","h":"#261108-启动所有作业","p":3757},{"i":3851,"t":"26.1.10.9 暂停所有作业","u":"/docs/job","h":"#261109-暂停所有作业","p":3757},{"i":3853,"t":"26.1.10.10 删除所有作业","u":"/docs/job","h":"#2611010-删除所有作业","p":3757},{"i":3855,"t":"26.1.10.11 强制唤醒作业调度器","u":"/docs/job","h":"#2611011-强制唤醒作业调度器","p":3757},{"i":3857,"t":"26.1.10.12 强制触发所有作业持久化","u":"/docs/job","h":"#2611012-强制触发所有作业持久化","p":3757},{"i":3859,"t":"26.1.11 作业计划 IScheduler","u":"/docs/job","h":"#26111-作业计划-ischeduler","p":3757},{"i":3861,"t":"26.1.11.1 获取 IScheduler 实例","u":"/docs/job","h":"#261111-获取-ischeduler-实例","p":3757},{"i":3863,"t":"26.1.11.2 获取 SchedulerModel 实例","u":"/docs/job","h":"#261112-获取-schedulermodel-实例","p":3757},{"i":3865,"t":"26.1.11.3 获取 SchedulerBuilder","u":"/docs/job","h":"#261113-获取-schedulerbuilder","p":3757},{"i":3867,"t":"26.1.11.4 获取 JobBuilder","u":"/docs/job","h":"#261114-获取-jobbuilder","p":3757},{"i":3869,"t":"26.1.11.5 获取 TriggerBuilders","u":"/docs/job","h":"#261115-获取-triggerbuilders","p":3757},{"i":3871,"t":"26.1.11.6 获取单个 TriggerBuilder","u":"/docs/job","h":"#261116-获取单个-triggerbuilder","p":3757},{"i":3873,"t":"26.1.11.7 启动当前作业","u":"/docs/job","h":"#261117-启动当前作业","p":3757},{"i":3875,"t":"26.1.11.8 暂停当前作业","u":"/docs/job","h":"#261118-暂停当前作业","p":3757},{"i":3877,"t":"26.1.11.9 启动作业特定触发器","u":"/docs/job","h":"#261119-启动作业特定触发器","p":3757},{"i":3879,"t":"26.1.11.10 暂停作业特定触发器","u":"/docs/job","h":"#2611110-暂停作业特定触发器","p":3757},{"i":3881,"t":"26.1.11.11 更新作业信息","u":"/docs/job","h":"#2611111-更新作业信息","p":3757},{"i":3883,"t":"26.1.11.12 获取作业单个触发器","u":"/docs/job","h":"#2611112-获取作业单个触发器","p":3757},{"i":3885,"t":"26.1.11.13 添加作业单个触发器","u":"/docs/job","h":"#2611113-添加作业单个触发器","p":3757},{"i":3887,"t":"26.1.11.14 删除作业单个触发器","u":"/docs/job","h":"#2611114-删除作业单个触发器","p":3757},{"i":3889,"t":"26.1.11.15 判断作业是否包含特定触发器","u":"/docs/job","h":"#2611115-判断作业是否包含特定触发器","p":3757},{"i":3891,"t":"26.1.11.16 删除当前作业","u":"/docs/job","h":"#2611116-删除当前作业","p":3757},{"i":3893,"t":"26.1.11.17 强制触发所有作业持久化","u":"/docs/job","h":"#2611117-强制触发所有作业持久化","p":3757},{"i":3895,"t":"26.1.11.18 输出 JSON 字符串","u":"/docs/job","h":"#2611118-输出-json-字符串","p":3757},{"i":3897,"t":"26.1.12 作业持久化器 IJobPersistence","u":"/docs/job","h":"#26112-作业持久化器-ijobpersistence","p":3757},{"i":3899,"t":"26.1.13 作业集群控制","u":"/docs/job","h":"#26113-作业集群控制","p":3757},{"i":3901,"t":"26.1.14 如何部署","u":"/docs/job","h":"#26114-如何部署","p":3757},{"i":3903,"t":"26.1.15 常见问题","u":"/docs/job","h":"#26115-常见问题","p":3757},{"i":3905,"t":"26.1.15 反馈与建议","u":"/docs/job","h":"#26115-反馈与建议","p":3757},{"i":3909,"t":"v4.8.0(未发布,全新定时任务)","u":"/docs/upgrade","h":"#v480未发布全新定时任务","p":3907},{"i":3911,"t":"v4.7.9(当前版本)","u":"/docs/upgrade","h":"#v479当前版本","p":3907},{"i":3913,"t":"v4.6.9(已发布)","u":"/docs/upgrade","h":"#v469已发布","p":3907},{"i":3915,"t":"v4.5.9(已发布)","u":"/docs/upgrade","h":"#v459已发布","p":3907},{"i":3917,"t":"v4.4.9(已发布)","u":"/docs/upgrade","h":"#v449已发布","p":3907},{"i":3919,"t":"v4.3.9(已发布)","u":"/docs/upgrade","h":"#v439已发布","p":3907},{"i":3921,"t":"v4.2.13(已发布)","u":"/docs/upgrade","h":"#v4213已发布","p":3907},{"i":3923,"t":"v4.1.14(已发布)","u":"/docs/upgrade","h":"#v4114已发布","p":3907},{"i":3925,"t":"v4.0.0(重新起航)💖","u":"/docs/upgrade","h":"#v400重新起航","p":3907},{"i":3927,"t":"v3.9.2(已发布,全新日志组件)","u":"/docs/upgrade","h":"#v392已发布全新日志组件","p":3907},{"i":3929,"t":"v3.8.9(已发布)","u":"/docs/upgrade","h":"#v389已发布","p":3907},{"i":3931,"t":"v3.7.11(已发布)","u":"/docs/upgrade","h":"#v3711已发布","p":3907},{"i":3933,"t":"v3.6.9(已发布,全新入口组件)","u":"/docs/upgrade","h":"#v369已发布全新入口组件","p":3907},{"i":3935,"t":"v3.5.7(已发布)","u":"/docs/upgrade","h":"#v357已发布","p":3907},{"i":3937,"t":"v3.4.2(已发布)","u":"/docs/upgrade","h":"#v342已发布","p":3907},{"i":3939,"t":"v3.3.3(已发布)","u":"/docs/upgrade","h":"#v333已发布","p":3907},{"i":3941,"t":"v3.2.0(已发布)","u":"/docs/upgrade","h":"#v320已发布","p":3907},{"i":3943,"t":"v3.1.0(已发布)","u":"/docs/upgrade","h":"#v310已发布","p":3907},{"i":3945,"t":"v3.0.0(已发布)","u":"/docs/upgrade","h":"#v300已发布","p":3907},{"i":3947,"t":"v2.20(已发布,全新事件总线)","u":"/docs/upgrade","h":"#v220已发布全新事件总线","p":3907},{"i":3949,"t":"v2.19(已发布)","u":"/docs/upgrade","h":"#v219已发布","p":3907},{"i":3951,"t":"v2.18(已发布)","u":"/docs/upgrade","h":"#v218已发布","p":3907},{"i":3953,"t":"v2.17(已发布)","u":"/docs/upgrade","h":"#v217已发布","p":3907},{"i":3955,"t":"v2.16(已发布)","u":"/docs/upgrade","h":"#v216已发布","p":3907},{"i":3957,"t":"v2.15(已发布)","u":"/docs/upgrade","h":"#v215已发布","p":3907},{"i":3959,"t":"v2.13/v2.14(已发布)","u":"/docs/upgrade","h":"#v213v214已发布","p":3907},{"i":3961,"t":"v2.10/2.11/2.12 (已发布)","u":"/docs/upgrade","h":"#v210211212-已发布","p":3907},{"i":3963,"t":"v2.9.0 (已发布)","u":"/docs/upgrade","h":"#v290-已发布","p":3907},{"i":3965,"t":"v2.7.0/2.8.0 (已发布)","u":"/docs/upgrade","h":"#v270280-已发布","p":3907},{"i":3967,"t":"v2.5.0/2.6.0 (已发布)","u":"/docs/upgrade","h":"#v250260-已发布","p":3907},{"i":3969,"t":"v2.4.0 (已发布)","u":"/docs/upgrade","h":"#v240-已发布","p":3907},{"i":3971,"t":"v2.3.0 (已发布)","u":"/docs/upgrade","h":"#v230-已发布","p":3907},{"i":3973,"t":"v2.2.0 (已发布)","u":"/docs/upgrade","h":"#v220-已发布","p":3907},{"i":3975,"t":"v2.1.0 (已发布)","u":"/docs/upgrade","h":"#v210-已发布","p":3907},{"i":3977,"t":"v2.0.0 (已发布)","u":"/docs/upgrade","h":"#v200-已发布","p":3907},{"i":3979,"t":"v1.19.0 (已发布)","u":"/docs/upgrade","h":"#v1190-已发布","p":3907},{"i":3981,"t":"v1.18.0 (已发布)","u":"/docs/upgrade","h":"#v1180-已发布","p":3907},{"i":3983,"t":"v1.17.0 (已发布)","u":"/docs/upgrade","h":"#v1170-已发布","p":3907},{"i":3985,"t":"v1.16.0 (已发布)","u":"/docs/upgrade","h":"#v1160-已发布","p":3907},{"i":3987,"t":"v1.15.0 (已发布)","u":"/docs/upgrade","h":"#v1150-已发布","p":3907},{"i":3989,"t":"v1.14.0(已发布)","u":"/docs/upgrade","h":"#v1140已发布","p":3907},{"i":3991,"t":"v1.13.0(已发布)","u":"/docs/upgrade","h":"#v1130已发布","p":3907},{"i":3993,"t":"v1.7.0(已发布)","u":"/docs/upgrade","h":"#v170已发布","p":3907},{"i":3995,"t":"v1.4.0(已发布)","u":"/docs/upgrade","h":"#v140已发布","p":3907},{"i":3997,"t":"v1.2.0(已发布)","u":"/docs/upgrade","h":"#v120已发布","p":3907},{"i":3999,"t":"v1.1.0(已发布)","u":"/docs/upgrade","h":"#v110已发布","p":3907},{"i":4001,"t":"v1.0.3(已发布)","u":"/docs/upgrade","h":"#v103已发布","p":3907},{"i":4003,"t":"v1.0.2(已发布)","u":"/docs/upgrade","h":"#v102已发布","p":3907},{"i":4005,"t":"v1.0.0(已发布)","u":"/docs/upgrade","h":"#v100已发布","p":3907}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/6",[0,10.899]],["t/8",[1,8.721,2,3.34]],["t/10",[3,7.081,4,4.092]],["t/12",[5,5.633,6,5.814,7,7.981]],["t/16",[8,5.93,9,9.185]],["t/18",[8,5.93,10,8.098]],["t/22",[11,6.375,12,9.05,13,9.05]],["t/24",[11,5.877,14,6.471,15,3.832,16,3.281]],["t/25",[17,8.406,18,8.406,19,5.058]],["t/27",[20,7.664,21,5.38,22,8.406]],["t/29",[11,6.375,20,7.664,23,7.981]],["t/31",[11,6.375,24,7.019,25,4.956]],["t/33",[15,3.832,26,6.325,27,4.599,28,5.047]],["t/35",[29,4.426,30,5.142,31,6.325,32,5.787]],["t/37",[30,5.579,32,6.278,33,8.406]],["t/39",[15,3.832,34,6.471,35,7.065,36,5.626]],["t/41",[15,3.832,35,7.065,36,5.626,37,4.918]],["t/45",[38,4.635,39,5.257,40,2.554,41,6.362,42,5.907]],["t/47",[43,8.406,44,5.579,45,6.721]],["t/49",[4,3.745,44,5.579,46,7.019]],["t/50",[45,6.196,47,6.079,48,6.079,49,7.357]],["t/52",[50,7.344,51,6.218]],["t/54",[44,5.579,52,7.411,53,5.427]],["t/58",[54,9.889,55,9.889]],["t/59",[38,4.635,39,5.257,40,1.861,41,6.362,42,5.907,56,1.383]],["t/61",[45,6.196,47,6.079,48,6.079,49,7.357]],["t/63",[50,7.344,51,6.218]],["t/65",[44,5.579,52,7.411,53,5.427]],["t/69",[38,4.635,39,5.257,40,2.554,41,6.362,42,5.907]],["t/71",[43,8.406,44,5.579,45,6.721]],["t/73",[4,3.745,44,5.579,46,7.019]],["t/74",[45,6.196,47,6.079,48,6.079,49,7.357]],["t/76",[50,7.344,51,6.218]],["t/78",[44,5.579,52,7.411,53,5.427]],["t/82",[57,10.899]],["t/84",[58,10.123]],["t/86",[36,6.669,59,7.206]],["t/88",[36,6.669,60,8.721]],["t/90",[24,7.019,61,7.019,62,5.579]],["t/92",[61,7.67,63,7.867]],["t/94",[61,7.67,64,9.889]],["t/96",[65,10.899]],["t/97",[61,7.67,66,6.156]],["t/99",[67,7.206,68,9.889]],["t/101",[69,5.215,70,9.185]],["t/103",[71,4.451,72,8.098]],["t/105",[73,9.889,74,7.498]],["t/109",[56,1.483,75,1.666,76,1.187,77,6.001,78,4.724]],["t/111",[27,3.977,56,1.383,75,1.553,77,5.596,78,4.405,79,1.148]],["t/113",[56,1.383,75,1.553,77,5.596,78,4.405,80,1.383,81,6.362]],["t/115",[56,1.483,75,2.236,82,3.303,83,3.291]],["t/118",[76,1.187,84,3.584,85,4.865,86,7.186,87,7.186]],["t/120",[16,2.657,76,1.452,84,3.13,86,6.276,87,6.276,88,4.76]],["t/122",[4,3.452,79,1.328,84,3.865,89,4.453]],["t/124",[76,1.107,79,1.148,84,3.342,90,4.061,91,6.109,92,6.362]],["t/126",[79,1.576,84,3.342,90,4.061,92,6.362,93,6.109]],["t/128",[79,1.231,80,1.483,84,3.584,92,6.823,94,6.823]],["t/130",[32,5.367,80,1.483,84,3.584,95,5.54,96,3.923]],["t/132",[76,1.28,80,1.599,84,3.865,97,8.342]],["t/134",[32,5.004,79,1.148,80,1.383,84,3.342,96,3.658,98,7.214]],["t/136",[6,4.635,28,4.365,32,6.869,75,1.553,84,3.342]],["t/138",[6,4.971,32,5.367,75,1.666,76,1.187,84,3.584]],["t/140",[75,1.666,79,1.231,84,3.584,99,7.737,100,7.737]],["t/142",[31,5.866,56,1.483,84,3.584,101,6.336,102,5.746]],["t/143",[56,1.383,76,1.107,84,3.342,103,6.7,104,6.362,105,5.166]],["t/145",[32,4.687,56,1.295,79,1.075,84,3.13,103,6.276,105,4.838,106,6.757]],["t/147",[37,4.561,56,1.483,80,1.483,84,3.584,105,5.54]],["t/149",[15,3.314,40,1.861,84,3.342,93,6.109,107,5.358,108,4.032]],["t/151",[84,3.342,93,6.109,108,4.032,109,2.342,110,5.907,111,7.214]],["t/153",[82,3.561,83,3.549,84,3.865,112,2.765]],["t/157",[113,10.899]],["t/159",[114,9.889,115,9.889]],["t/161",[116,9.889,117,9.889]],["t/163",[118,9.889,119,9.889]],["t/165",[60,8.721,120,9.889]],["t/167",[121,10.899]],["t/169",[122,10.899]],["t/171",[123,9.889,124,9.889]],["t/173",[125,10.899]],["t/175",[126,9.889,127,9.889]],["t/178",[76,1.187,80,1.483,128,4.13,129,7.186,130,5.087]],["t/180",[79,1.075,80,1.295,128,3.607,129,6.276,130,4.443,131,6.276,132,6.276]],["t/181",[76,1.187,79,1.231,80,1.483,128,4.13,131,7.186]],["t/183",[79,1.653,80,1.483,128,4.13,132,7.186]],["t/185",[80,2.092,128,4.453,133,8.342]],["t/187",[4,2.985,76,1.107,80,1.898,89,3.851,128,3.851]],["t/189",[79,1.148,80,1.898,128,3.851,134,5.907,135,5.257]],["t/191",[80,2.167,128,3.851,136,6.7,137,7.214]],["t/193",[75,1.666,80,1.483,82,3.303,83,3.291,128,4.13]],["t/198",[60,6.823,75,1.666,76,1.594,138,7.737]],["t/201",[76,1.594,80,1.483,139,5.367,140,4.488]],["t/203",[25,3.48,76,1.621,80,1.218,139,4.408,141,5.381,142,6.355]],["t/205",[76,1.28,79,1.328,80,1.599,143,6.831]],["t/207",[2,2.282,76,1.452,79,1.075,80,1.295,89,3.607,143,5.533]],["t/209",[76,1.107,79,1.576,80,1.383,143,5.907,144,5.082]],["t/211",[2,2.282,76,1.037,79,1.075,80,1.814,143,5.533,145,5.376]],["t/213",[25,3.48,75,1.368,76,0.975,79,1.011,80,1.218,143,5.204,145,5.056,146,5.604]],["t/215",[2,2.282,76,1.037,80,1.814,139,4.687,147,5.376,148,5.722]],["t/217",[21,4.289,75,1.553,76,1.107,80,1.383,149,6.109,150,5.082]],["t/219",[56,1.383,71,3.247,76,1.107,80,1.383,151,5.47,152,4.447]],["t/221",[40,1.996,76,1.187,80,1.483,82,3.303,83,3.291]],["t/224",[76,1.28,85,5.246,153,3.968,154,5.626]],["t/226",[79,1.328,153,3.968,154,5.626,155,4.63]],["t/228",[4,3.202,80,1.483,153,3.68,154,5.218,156,7.186]],["t/230",[3,5.54,4,3.202,76,1.187,80,1.483,153,3.68]],["t/232",[29,3.828,79,1.148,80,1.383,153,3.431,154,4.865,157,4.865]],["t/234",[29,3.585,80,1.814,153,3.214,154,4.557,157,4.557,158,5.018]],["t/236",[66,4.491,75,1.553,80,1.383,153,3.431,154,4.865,159,7.214]],["t/238",[75,1.796,153,3.968,154,5.626,160,6.079]],["t/240",[4,3.202,75,1.666,76,1.187,153,3.68,161,6.823]],["t/242",[75,1.796,79,1.328,153,3.968,162,8.342]],["t/244",[75,1.553,80,1.383,153,3.431,154,4.865,156,6.7,160,5.257]],["t/246",[75,2.037,153,3.214,154,4.557,160,4.924,163,3.889,164,6.757]],["t/248",[56,1.383,75,1.553,153,3.431,154,4.865,160,5.257,165,7.214]],["t/250",[40,1.861,75,1.553,153,3.431,154,4.865,160,5.257,166,7.214]],["t/252",[4,3.202,56,1.483,153,3.68,154,5.218,160,5.638]],["t/254",[40,1.996,83,3.291,153,3.68,154,5.218,160,5.638]],["t/256",[82,3.561,83,3.549,109,2.709,153,3.968]],["t/260",[71,3.482,76,1.187,167,4.816,168,7.186,169,4.724]],["t/262",[4,3.202,76,1.594,167,4.816,170,6.336]],["t/264",[71,3.482,72,6.336,76,1.187,79,1.231,167,4.816]],["t/266",[79,1.328,167,5.193,169,5.094,171,8.342]],["t/268",[4,3.452,80,1.599,89,4.453,167,5.193]],["t/269",[76,1.107,80,1.383,167,4.491,169,4.405,172,3.782,173,4.635]],["t/271",[15,3.314,79,1.148,80,1.383,167,4.491,174,5.004,175,4.635]],["t/273",[80,1.991,167,4.816,175,4.971,176,5.367]],["t/275",[75,1.553,80,1.383,167,4.491,175,4.635,177,4.032,178,5.004]],["t/277",[56,1.483,80,1.483,167,4.816,175,4.971,179,5.151]],["t/279",[40,1.743,80,1.295,167,4.206,175,4.341,180,5.722,181,5.722,182,4.838]],["t/281",[80,1.483,109,2.512,167,4.816,169,4.724,183,7.737]],["t/283",[80,1.383,112,2.391,167,4.491,169,4.405,184,6.109,185,7.214]],["t/285",[80,1.483,167,4.816,168,7.186,186,1.418,187,7.737]],["t/287",[80,1.483,152,4.769,167,4.816,188,2.841,189,5.087]],["t/289",[80,1.383,167,4.491,169,4.405,189,4.743,190,2.795,191,6.7]],["t/291",[80,1.483,167,4.816,192,3.339,193,7.737,194,4.971]],["t/293",[80,1.383,155,4.004,167,4.491,184,6.109,195,3.356,196,7.214]],["t/295",[75,1.796,82,3.561,83,3.549,167,5.193]],["t/299",[40,2.152,56,1.599,76,1.28,197,7.065]],["t/301",[40,1.996,56,1.483,79,1.231,89,4.13,198,5.866]],["t/303",[27,3.725,37,3.984,40,1.743,56,1.295,74,5.123,80,1.295,199,4.498]],["t/305",[37,3.984,56,1.295,74,5.123,76,1.037,80,1.814,199,4.498]],["t/307",[2,2.282,40,1.743,56,1.295,79,1.075,80,1.295,200,5.959,201,5.959]],["t/309",[2,2.436,40,1.861,56,1.383,80,1.898,202,6.362]],["t/311",[2,2.613,40,1.996,56,1.483,75,1.666,203,7.186]],["t/313",[2,2.282,40,1.743,56,1.295,75,1.455,76,1.037,200,5.959,201,5.959]],["t/315",[2,2.436,40,1.861,56,1.383,75,1.553,79,1.148,202,6.362]],["t/317",[3,5.54,4,3.202,40,1.996,56,1.991]],["t/318",[4,2.63,19,3.552,40,1.639,56,1.737,76,0.975,200,5.604,201,5.604]],["t/320",[4,2.796,19,3.777,40,1.743,56,1.814,79,1.075,202,5.959]],["t/322",[40,2.554,56,1.383,74,5.47,199,4.803,204,6.109]],["t/324",[30,4.165,40,1.743,56,1.295,109,2.194,199,4.498,205,3.426,206,4.76]],["t/326",[25,3.48,40,1.639,56,1.218,96,3.222,110,5.204,112,2.106,199,4.23,207,4.818]],["t/328",[37,3.746,40,1.639,56,1.218,61,4.929,186,1.164,208,5.604,209,4.129,210,5.204]],["t/330",[40,1.324,56,0.984,62,3.163,188,1.884,211,5.132,212,3.509,213,4.526,214,7.194,215,4.346,216,4.083,217,5.132]],["t/332",[40,1.996,56,1.483,82,3.303,83,3.291,190,2.997]],["t/335",[76,1.28,79,1.328,80,1.599,197,7.065]],["t/337",[51,4.536,79,1.576,80,1.383,173,4.635,218,6.7]],["t/339",[79,1.231,80,1.991,219,7.737,220,7.737]],["t/341",[75,1.796,79,1.328,80,1.599,221,8.342]],["t/343",[75,1.666,76,1.187,79,1.231,80,1.483,222,7.737]],["t/345",[75,1.666,79,1.653,80,1.483,223,7.737]],["t/347",[75,1.666,79,1.231,80,1.991,224,7.737]],["t/349",[75,1.553,79,1.148,80,1.898,225,3.805,226,6.109]],["t/351",[56,1.383,79,1.148,80,1.383,226,6.109,227,6.362,228,6.7]],["t/352",[56,1.383,76,1.107,79,1.148,80,1.383,229,7.214,230,7.214]],["t/354",[2,2.282,56,1.295,79,1.506,80,1.295,144,4.76,231,6.757]],["t/356",[40,1.996,79,1.231,80,1.483,232,7.737,233,7.186]],["t/358",[2,2.436,40,1.861,76,1.107,79,1.148,80,1.383,210,5.907]],["t/360",[40,1.743,66,4.206,79,1.506,80,1.295,234,5.959,235,4.017]],["t/362",[40,1.743,66,4.206,79,1.075,80,1.814,235,4.017,236,5.959]],["t/364",[79,1.231,80,1.483,109,2.512,233,7.186,237,7.737]],["t/366",[76,1.107,79,1.148,80,1.383,109,2.342,175,4.635,210,5.907]],["t/368",[2,2.282,15,3.104,79,1.506,80,1.295,109,2.194,238,3.725]],["t/370",[79,1.075,80,1.295,112,2.24,139,4.687,239,4.088,240,4.838,241,4.76]],["t/372",[79,1.231,80,1.483,147,6.156,148,6.552,186,1.418]],["t/374",[79,1.231,80,1.483,82,3.303,83,3.291,188,2.841]],["t/377",[76,1.28,242,6.079,243,4.878,244,8.342]],["t/379",[79,1.231,194,4.971,235,4.6,242,5.638,245,6.823]],["t/381",[80,1.483,198,5.866,235,4.6,242,5.638,246,7.186]],["t/383",[46,5.596,75,1.553,89,3.851,242,5.257,247,7.214,248,5.358]],["t/385",[29,3.372,56,1.218,67,4.631,89,3.392,130,4.178,242,4.631,249,5.204,250,4.929]],["t/387",[40,1.861,78,4.405,242,5.257,251,7.214,252,7.214,253,5.907]],["t/389",[109,2.709,144,5.877,242,6.079,254,7.748]],["t/391",[112,2.564,144,5.45,194,4.971,242,5.638,255,7.737]],["t/393",[186,1.418,242,5.638,256,7.186,257,7.737,258,7.737]],["t/396",[259,9.889,260,8.374]],["t/398",[260,8.374,261,9.889]],["t/400",[260,8.374,262,9.889]],["t/403",[76,1.187,85,4.865,263,4.294,264,6.001,265,6.336]],["t/405",[79,1.148,263,4.004,264,5.596,265,5.907,266,7.214,267,4.491]],["t/407",[80,1.599,85,5.246,263,4.63,268,7.357]],["t/409",[4,3.452,75,1.796,89,4.453,263,4.63]],["t/410",[75,1.553,76,1.107,90,4.061,263,4.004,268,6.362,269,4.121]],["t/412",[2,2.146,75,1.368,79,1.011,263,3.527,264,4.929,265,5.204,270,4.72,271,6.355]],["t/414",[2,2.817,56,1.599,263,4.63,272,8.342]],["t/416",[40,1.639,110,5.204,174,4.408,263,3.527,273,5.604,274,5.902,275,5.381,276,4.818]],["t/418",[4,2.985,109,2.342,110,5.907,263,4.004,276,5.47,277,7.214]],["t/420",[112,2.564,263,4.294,264,6.001,265,6.336,278,7.737]],["t/422",[186,1.322,235,4.289,263,4.004,264,5.596,265,5.907,279,5.907]],["t/424",[82,3.561,83,3.549,188,3.063,263,4.63]],["t/428",[2,2.613,75,1.666,76,1.594,85,4.865]],["t/430",[2,2.613,4,3.202,75,1.666,76,1.187,79,1.231]],["t/432",[2,2.146,75,1.368,76,1.391,79,1.011,108,3.552,151,4.818,152,3.917]],["t/434",[75,1.368,76,0.975,79,1.442,108,3.552,151,4.818,152,3.917,174,4.408]],["t/436",[16,2.499,75,1.368,76,0.975,79,1.011,80,1.218,89,3.392,174,4.408,280,4.345]],["t/438",[2,2.025,75,1.871,76,0.92,79,0.955,155,3.329,174,4.16,184,5.079,281,3.733]],["t/440",[75,1.455,76,1.037,80,1.295,282,5.241,283,6.276,284,5.376,285,5.722]],["t/442",[75,1.455,76,1.452,80,1.295,284,5.376,285,5.722,286,6.757]],["t/444",[75,2.236,76,1.187,96,3.923,287,6.823]],["t/446",[2,2.146,75,1.951,76,1.391,152,3.917,174,4.408,288,6.355]],["t/448",[75,2.037,76,1.037,79,1.075,281,4.206,287,5.959,289,5.123]],["t/450",[56,1.383,67,5.257,75,1.553,76,1.107,174,5.004,290,6.7]],["t/452",[2,2.146,40,1.639,75,1.368,76,0.975,177,3.552,291,5.902,292,5.902,293,5.902]],["t/454",[75,1.553,76,1.107,90,4.061,109,2.342,158,5.358,287,6.362]],["t/456",[2,2.613,75,1.666,76,1.187,112,2.564,294,6.156]],["t/458",[2,2.436,4,2.985,75,1.553,76,1.107,170,5.907,186,1.322]],["t/460",[2,2.436,75,1.553,76,1.107,188,2.648,239,4.365,295,6.7]],["t/462",[2,2.613,75,1.666,76,1.187,190,2.997,296,7.186]],["t/464",[75,1.666,76,1.187,82,3.303,83,3.291,192,3.339]],["t/468",[71,3.247,76,1.107,79,1.148,297,2.553,298,4.932,299,4.865]],["t/470",[79,1.653,297,2.738,300,6.552,301,6.336]],["t/471",[76,1.107,79,1.576,297,2.553,302,6.362,303,5.907]],["t/473",[69,3.805,79,1.799,297,2.553,304,7.214]],["t/475",[69,3.805,79,1.576,80,1.383,297,2.553,305,7.214]],["t/477",[69,3.564,75,1.455,79,1.506,260,5.722,297,2.391,306,6.757]],["t/479",[56,1.218,79,1.442,175,4.082,297,2.249,307,5.604,308,5.902,309,4.23]],["t/481",[79,1.075,80,1.295,150,4.76,297,2.391,298,4.62,310,5.959,311,5.959]],["t/483",[75,1.666,79,1.231,297,2.738,312,7.737,313,6.823]],["t/485",[56,1.295,79,1.075,199,4.498,297,2.391,298,4.62,299,4.557,314,5.959]],["t/487",[40,1.743,79,1.075,239,4.088,297,2.391,315,6.757,316,5.241,317,4.017]],["t/489",[16,2.837,40,1.861,76,1.107,79,1.148,297,2.553,318,7.214]],["t/491",[16,2.837,40,1.861,79,1.576,297,2.553,319,6.109]],["t/493",[25,3.7,79,1.075,109,2.194,169,4.126,175,4.341,297,2.391,320,6.757]],["t/495",[79,1.231,82,3.303,83,3.291,112,2.564,297,2.738]],["t/499",[76,1.594,186,1.418,321,3.525,322,4.524]],["t/501",[76,1.28,79,1.328,186,1.529,323,7.065]],["t/503",[76,1.107,80,1.383,186,1.322,323,6.109,324,7.214,325,6.7]],["t/505",[75,1.455,76,1.037,89,3.607,186,1.238,321,3.078,322,3.951,326,4.341]],["t/507",[5,3.956,75,1.368,76,1.391,172,3.332,186,1.164,321,2.895,322,3.716]],["t/509",[75,1.368,76,0.975,79,1.011,172,3.332,186,1.164,321,2.895,322,3.716,327,5.056]],["t/511",[2,2.436,56,1.383,76,1.107,186,1.322,212,4.932,328,4.932]],["t/513",[2,2.025,56,1.15,76,1.334,186,1.099,225,3.163,269,3.426,321,2.732,329,4.652]],["t/515",[2,2.282,16,2.657,56,1.295,76,1.037,79,1.075,186,1.238,323,5.722]],["t/517",[2,2.282,16,2.657,56,1.295,76,1.037,80,1.295,186,1.238,330,6.276]],["t/519",[2,1.918,56,1.089,75,1.223,76,0.871,186,1.04,212,3.882,267,3.535,321,2.587,328,3.882,331,5.008]],["t/521",[40,1.743,76,1.037,186,1.238,321,3.078,322,3.951,326,4.341,332,5.959]],["t/523",[76,1.107,109,2.342,186,1.322,225,3.805,321,3.287,322,4.218]],["t/525",[76,1.107,95,5.166,96,3.658,112,2.391,186,1.322,225,3.805]],["t/527",[76,1.037,169,4.126,186,1.734,321,3.078,322,3.951,333,4.443]],["t/529",[4,2.985,19,4.032,76,1.107,186,1.322,188,2.648,334,6.7]],["t/531",[2,2.282,6,4.341,76,1.037,175,4.341,186,1.238,190,2.618,323,5.722]],["t/533",[2,2.282,76,1.037,186,1.238,192,2.916,335,4.052,336,6.757,337,6.276]],["t/535",[76,1.187,82,3.303,83,3.291,186,1.418,195,3.6]],["t/539",[71,3.482,76,1.187,79,1.231,188,2.841,338,7.186]],["t/541",[79,1.653,89,4.13,188,2.841,339,5.367]],["t/543",[76,1.037,79,1.506,188,2.481,225,3.564,269,3.86,338,6.276]],["t/545",[38,3.853,79,1.627,188,2.202,321,2.732,340,5.079,341,3.993,342,3.126]],["t/547",[3,5.54,4,3.202,79,1.231,80,1.483,188,2.841]],["t/549",[76,1.107,79,1.148,80,1.383,163,4.152,188,2.648,343,4.004]],["t/551",[79,1.576,80,1.383,188,2.648,343,4.004,344,6.362]],["t/553",[4,3.202,75,1.666,79,1.231,95,5.54,188,2.841]],["t/555",[75,1.553,76,1.107,79,1.148,188,2.648,345,4.004,346,6.7]],["t/557",[75,1.455,79,1.506,135,4.924,188,2.481,345,3.75,347,4.443]],["t/559",[75,1.455,79,1.075,80,1.295,188,2.481,205,3.426,343,3.75,348,4.443]],["t/561",[56,1.483,79,1.231,82,3.303,83,3.291,188,2.841]],["t/564",[76,1.187,77,6.001,78,4.724,186,1.418,349,4.237]],["t/566",[71,3.247,79,1.148,186,1.322,349,3.95,350,7.214,351,5.004]],["t/568",[80,1.483,89,4.13,186,1.418,239,4.681,349,4.237]],["t/569",[76,1.037,77,5.241,78,4.126,80,1.295,186,1.238,321,3.078,349,3.7]],["t/571",[77,4.929,78,3.88,79,1.011,80,1.218,163,3.658,186,1.164,349,3.48,352,3.811]],["t/573",[27,3.725,77,5.241,78,4.126,80,1.814,186,1.238,349,3.7]],["t/575",[75,1.666,82,3.303,83,3.291,186,1.418,349,4.237]],["t/578",[71,3.482,76,1.187,112,2.564,353,4.42,354,6.552]],["t/580",[79,1.231,112,2.564,353,4.42,354,6.552,355,6.552]],["t/582",[16,3.043,80,1.483,112,2.564,353,4.42,354,6.552]],["t/584",[16,3.043,76,1.187,80,1.483,112,2.564,356,7.737]],["t/586",[16,2.837,28,4.365,79,1.148,80,1.383,112,2.391,357,5.596]],["t/588",[75,1.796,112,2.765,358,7.065,359,5.094]],["t/590",[75,1.666,76,1.187,112,2.564,358,6.552,360,6.823]],["t/592",[4,3.452,56,1.599,112,2.765,358,7.065]],["t/594",[56,1.383,76,1.107,112,2.391,225,3.805,269,4.121,359,4.405]],["t/596",[28,4.088,56,1.295,79,1.075,112,2.24,357,5.241,359,4.126,361,6.276]],["t/598",[56,1.295,80,1.295,112,2.24,357,5.241,359,4.126,361,6.276,362,5.959]],["t/600",[40,2.152,112,2.765,158,6.196,359,5.094]],["t/601",[40,1.996,76,1.187,112,2.564,359,4.724,363,5.45]],["t/603",[40,1.996,79,1.231,112,2.564,364,7.737,365,7.737]],["t/605",[40,1.861,80,1.383,88,5.082,112,2.391,359,4.405,366,6.362]],["t/607",[28,4.681,40,1.996,75,1.666,112,2.564,358,6.552]],["t/609",[28,4.681,40,1.996,56,1.483,112,2.564,367,7.737]],["t/611",[109,2.342,112,2.391,359,4.405,368,6.7,369,6.362,370,6.109]],["t/613",[95,5.54,96,3.923,112,3.441,343,4.294]],["t/614",[76,1.107,96,3.658,112,3.282,155,4.004,366,6.362]],["t/616",[79,1.075,96,3.426,112,3.136,366,5.959,371,6.276,372,4.76]],["t/618",[112,2.564,186,1.418,359,4.724,363,5.45,373,6.552]],["t/620",[6,4.971,76,1.187,112,2.564,186,1.418,359,4.724]],["t/622",[79,1.075,112,2.24,186,1.238,359,4.126,368,6.276,369,5.959,370,5.722]],["t/624",[80,1.218,112,2.106,186,1.164,359,3.88,374,6.355,375,6.355,376,6.355,377,6.355]],["t/626",[75,1.455,112,2.24,186,1.238,359,4.126,373,5.722,378,6.757,379,4.838]],["t/628",[112,2.765,134,6.831,188,3.063,380,7.357]],["t/630",[69,4.081,112,2.564,190,2.997,205,3.923,381,5.367]],["t/632",[112,2.391,192,3.113,339,5.004,354,6.109,382,6.7,383,6.362]],["t/634",[24,4.929,38,4.082,62,3.917,76,0.975,112,2.106,192,2.742,382,5.902,384,6.355]],["t/636",[19,3.777,79,1.075,112,2.24,139,4.687,192,2.916,225,3.564,240,4.838]],["t/638",[4,3.202,51,4.865,80,1.483,112,2.564,192,3.339]],["t/640",[82,3.561,83,3.549,112,2.765,195,3.881]],["t/644",[56,1.383,76,1.107,176,5.004,186,1.322,385,6.109,386,5.358]],["t/646",[56,1.218,79,1.011,176,4.408,186,1.164,353,3.63,385,5.381,387,3.392,388,6.355]],["t/648",[56,1.295,80,1.295,176,4.687,186,1.238,243,3.951,389,5.722,390,3.984]],["t/650",[56,1.295,75,1.455,176,4.687,186,1.238,243,3.951,389,5.722,390,3.984]],["t/652",[56,1.898,176,5.004,186,1.322,391,5.47,392,6.7]],["t/654",[40,1.743,56,1.295,186,1.238,198,5.123,393,6.757,394,4.443,395,3.92]],["t/656",[56,1.483,82,3.303,83,3.291,109,2.512,186,1.418]],["t/660",[76,1.037,109,2.194,176,4.687,177,3.777,186,1.238,243,3.951,390,3.984]],["t/662",[79,1.075,109,2.194,176,4.687,177,3.777,186,1.238,243,3.951,390,3.984]],["t/664",[80,1.15,105,4.294,109,1.947,176,4.16,177,3.352,186,1.099,243,3.507,390,3.536,396,4.045]],["t/666",[75,1.291,105,4.294,109,1.947,176,4.16,177,3.352,186,1.099,243,3.507,390,3.536,396,4.045]],["t/668",[56,1.089,109,1.844,176,3.939,177,3.174,186,1.04,243,3.32,281,3.535,289,4.305,390,3.347,396,3.83]],["t/670",[40,1.465,109,1.844,176,3.939,177,3.174,186,1.04,243,3.32,281,3.535,289,4.305,390,3.347,396,3.83]],["t/672",[82,3.303,83,3.291,109,3.371,186,1.418]],["t/676",[76,1.187,186,1.418,321,3.525,397,3.389,398,7.186]],["t/678",[79,1.231,186,1.418,343,4.294,397,3.389,399,6.552]],["t/680",[52,5.204,76,0.975,79,1.011,186,1.164,397,2.783,400,5.902,401,4.929,402,5.056]],["t/682",[5,4.206,44,4.165,79,1.506,186,1.238,397,2.96,403,4.838]],["t/684",[79,1.011,80,1.218,186,1.164,397,2.783,404,6.355,405,5.902,406,6.355,407,5.056]],["t/686",[80,1.383,186,1.322,241,5.082,343,4.004,397,3.16,408,6.7]],["t/687",[53,4.052,76,1.037,80,1.295,186,1.238,343,3.75,397,2.96,408,6.276]],["t/689",[79,1.075,80,1.295,186,1.238,321,3.078,337,6.276,397,2.96,409,4.294]],["t/691",[80,1.737,186,1.164,199,4.23,280,4.345,397,2.783,409,4.038,410,4.55]],["t/693",[75,1.455,80,1.295,186,1.238,280,4.62,397,2.96,411,6.757,412,5.722]],["t/695",[56,1.218,74,4.818,80,1.218,186,1.164,199,4.23,335,3.811,397,2.783,413,6.355]],["t/697",[2,2.436,75,1.553,186,1.322,238,3.977,397,3.16,407,5.739]],["t/699",[56,1.483,82,3.303,83,3.291,186,1.418,397,3.389]],["t/703",[76,1.187,186,1.418,321,3.525,398,7.186,414,4.355]],["t/705",[79,1.231,186,1.418,343,4.294,399,6.552,414,4.355]],["t/707",[76,1.037,79,1.075,172,3.543,186,1.238,414,3.804,415,6.757,416,5.959]],["t/709",[52,5.204,79,1.442,186,1.164,400,5.902,401,4.929,402,5.056,414,3.577]],["t/710",[5,4.206,44,4.165,79,1.075,80,1.295,186,1.238,403,4.838,414,3.804]],["t/712",[75,1.455,79,1.075,172,3.543,186,1.238,363,4.76,414,3.804,417,6.276]],["t/714",[56,1.383,79,1.148,177,4.032,186,1.322,321,3.287,414,4.061]],["t/716",[80,1.483,177,4.324,186,1.418,363,5.45,414,4.355]],["t/718",[75,1.666,136,7.186,163,4.453,186,1.418,414,4.355]],["t/720",[16,2.233,56,1.089,186,1.04,414,3.196,418,5.678,419,4.65,420,5.678,421,5.274,422,4.518,423,5.678]],["t/721",[38,4.341,56,1.295,76,1.037,186,1.238,414,3.804,424,5.959,425,6.276]],["t/723",[56,1.383,79,1.148,186,1.322,412,6.109,414,4.061,426,7.214]],["t/725",[56,1.483,80,1.483,186,1.418,414,4.355,427,7.737]],["t/727",[31,4.547,40,1.547,53,3.596,186,1.099,199,3.993,321,2.732,329,4.652,414,3.376,428,4.454]],["t/729",[8,3.405,40,1.465,76,0.871,186,1.04,199,3.78,216,4.518,414,3.196,429,4.65,430,5.678,431,5.274]],["t/731",[8,3.233,40,1.391,79,0.858,186,0.988,199,3.589,216,4.289,370,4.566,414,3.035,431,5.007,432,5.391,433,5.391]],["t/733",[39,4.138,40,1.465,109,1.844,112,1.882,186,1.04,235,3.376,414,3.196,434,5.274,435,5.678,436,2.739]],["t/735",[82,3.303,83,3.291,112,2.564,186,1.418,414,4.355]],["t/738",[76,1.107,186,1.322,335,4.326,353,4.121,437,4.218,438,6.7]],["t/740",[79,1.328,186,1.529,437,4.878,439,6.637]],["t/742",[4,3.202,80,1.483,89,4.13,186,1.418,437,4.524]],["t/744",[76,1.037,80,1.295,186,1.238,353,3.86,437,3.951,440,5.376,441,5.376]],["t/746",[79,1.011,80,1.218,186,1.164,281,3.956,335,3.811,353,3.63,437,3.716,441,5.056]],["t/748",[75,1.666,186,1.418,326,4.971,437,4.524,442,7.737]],["t/750",[56,1.295,186,1.238,369,5.959,370,5.722,437,3.951,441,5.376,443,6.757]],["t/752",[40,1.996,82,3.303,83,3.291,186,1.418,437,4.524]],["t/755",[71,3.247,76,1.107,186,1.814,343,4.004,444,5.907]],["t/757",[4,2.796,79,1.075,186,1.734,445,6.757,446,5.376,447,6.757]],["t/758",[38,3.853,62,3.697,76,0.92,79,0.955,186,1.593,321,2.732,340,5.079,448,4.911]],["t/760",[2,2.282,79,1.506,186,1.734,225,3.564,269,3.86]],["t/762",[3,5.166,4,2.985,79,1.148,80,1.383,186,1.814]],["t/764",[4,2.985,80,1.383,186,1.814,446,5.739,449,7.214]],["t/766",[76,1.037,80,1.295,88,4.76,186,1.734,343,3.75,444,5.533]],["t/768",[79,1.075,80,1.295,186,1.734,343,3.75,345,3.75,444,5.533]],["t/770",[72,5.533,80,1.814,186,1.734,343,3.75,444,5.533]],["t/772",[75,1.368,109,2.063,186,1.66,343,3.527,444,5.204,446,5.056,450,4.72]],["t/774",[56,1.483,82,3.303,83,3.291,186,1.903]],["t/778",[76,0.975,112,2.106,173,4.082,179,4.23,186,1.164,243,3.716,335,3.811,390,3.746]],["t/780",[79,1.011,112,2.106,173,4.082,179,4.23,186,1.164,243,3.716,335,3.811,390,3.746]],["t/782",[80,1.15,112,1.988,179,3.993,186,1.099,243,3.507,390,3.536,451,4.16,452,4.771,453,4.652]],["t/784",[75,1.291,112,1.988,179,3.993,186,1.099,243,3.507,390,3.536,451,4.16,452,4.771,453,4.652]],["t/786",[56,1.034,112,1.787,179,3.589,182,3.86,186,0.988,243,3.152,353,3.08,390,3.178,451,3.74,452,4.289,454,4.088]],["t/788",[40,1.391,112,1.787,179,3.589,182,3.86,186,0.988,243,3.152,353,3.08,390,3.178,451,3.74,452,4.289,454,4.088]],["t/790",[109,2.194,112,2.24,179,6.299,186,1.238,455,6.276,456,6.757]],["t/792",[76,1.037,90,3.804,109,2.194,112,2.24,186,1.238,457,6.757,458,6.757]],["t/794",[4,2.796,79,1.075,109,2.194,112,2.24,179,4.498,186,1.238,455,6.276]],["t/796",[82,3.303,83,3.291,112,3.441,186,1.418]],["t/800",[76,1.187,153,3.68,186,1.418,321,3.525,459,4.816]],["t/802",[69,3.352,76,1.391,153,3.023,186,1.164,321,2.895,459,3.956,460,5.056]],["t/804",[69,3.163,76,0.92,79,0.955,153,2.853,178,4.16,186,1.099,321,2.732,409,3.811,459,3.733]],["t/806",[79,1.148,153,3.431,155,4.004,186,1.322,321,3.287,459,4.491]],["t/808",[4,3.202,80,1.483,153,3.68,186,1.418,459,4.816]],["t/809",[76,0.975,80,1.218,153,3.023,186,1.164,387,3.392,459,3.956,460,5.056,461,5.604]],["t/811",[79,1.011,80,1.218,153,3.023,186,1.164,387,3.392,459,3.956,460,5.056,462,4.631]],["t/813",[80,1.666,153,2.853,178,4.16,186,1.099,387,3.202,409,3.811,459,3.733,463,4.652]],["t/815",[75,1.223,80,1.089,153,2.701,178,3.939,186,1.04,387,3.031,409,3.608,459,3.535,462,4.138,464,4.518]],["t/817",[4,2.63,19,3.552,75,1.368,153,3.023,186,1.164,459,3.956,460,5.056,465,5.204]],["t/819",[75,1.455,76,1.037,153,3.214,172,3.543,186,1.238,459,4.206,460,5.376]],["t/821",[75,1.368,79,1.011,140,3.686,153,3.023,172,3.332,186,1.164,309,4.23,466,6.355]],["t/823",[4,2.796,19,3.777,75,1.455,80,1.295,153,3.214,186,1.238,465,5.533]],["t/825",[4,2.482,19,3.352,56,1.15,153,2.853,178,4.16,186,1.099,409,3.811,459,3.733,465,4.911]],["t/827",[56,1.218,76,0.975,153,3.023,172,3.332,178,4.408,186,1.164,409,4.038,459,3.956]],["t/829",[56,1.15,79,0.955,153,2.853,172,3.145,178,4.16,186,1.099,363,4.225,409,3.811,459,3.733]],["t/831",[2,2.146,56,1.218,80,1.218,153,3.023,178,4.408,186,1.164,409,4.038,459,3.956]],["t/833",[4,2.796,19,3.777,56,1.295,75,1.455,153,3.214,186,1.238,465,5.533]],["t/835",[40,1.743,153,3.214,186,1.238,425,6.276,450,5.018,459,4.206,467,5.376]],["t/837",[82,3.303,83,3.291,109,2.512,153,3.68,186,1.418]],["t/840",[76,1.107,186,1.322,342,3.761,345,4.004,468,4.061,469,4.536]],["t/842",[2,2.282,14,5.241,79,1.075,186,1.238,342,3.522,468,3.804,469,4.249]],["t/843",[76,0.975,79,1.011,186,1.164,342,3.313,409,4.038,468,3.577,469,3.996,470,5.056]],["t/845",[6,4.341,79,1.506,186,1.238,342,3.522,468,3.804,469,4.249]],["t/847",[80,1.483,82,3.303,83,3.291,186,1.418,468,4.355]],["t/850",[76,1.187,186,1.418,190,2.997,471,7.186,472,7.737]],["t/852",[79,1.231,186,1.418,190,2.997,345,4.294,346,7.186]],["t/854",[80,1.383,186,1.322,190,2.795,205,3.658,345,4.004,473,7.214]],["t/856",[75,1.455,186,1.238,190,2.618,205,4.798,345,3.75,429,5.533]],["t/858",[56,1.383,186,1.322,190,2.795,345,4.004,409,4.584,474,6.362]],["t/859",[56,1.218,76,0.975,186,1.164,190,2.462,212,4.345,215,5.381,475,6.355,476,5.381]],["t/861",[56,1.218,79,1.011,186,1.164,190,2.462,212,4.345,476,5.381,477,6.355,478,6.355]],["t/863",[56,1.218,80,1.218,186,1.164,190,2.462,212,4.345,476,5.381,479,6.355,480,6.355]],["t/865",[40,1.996,186,1.418,190,2.997,206,5.45,345,4.294]],["t/867",[109,2.342,135,5.257,186,1.322,190,2.795,256,6.7,481,6.109]],["t/869",[112,2.564,186,1.418,190,2.997,345,4.294,482,6.823]],["t/870",[76,1.107,112,2.391,186,1.322,190,2.795,483,7.214,484,7.214]],["t/872",[79,1.231,112,2.564,186,1.418,190,2.997,485,7.186]],["t/874",[80,1.383,94,6.362,112,2.391,186,1.322,190,2.795,485,6.7]],["t/876",[186,1.903,190,2.997,345,4.294,486,7.186]],["t/878",[163,4.152,186,1.322,188,2.648,190,2.795,333,4.743,345,4.004]],["t/880",[76,1.107,163,4.152,186,1.322,188,2.648,190,2.795,333,4.743]],["t/882",[79,1.148,186,1.322,188,2.648,190,2.795,333,4.743,487,7.214]],["t/884",[186,1.418,190,4.022,345,4.294,488,7.737]],["t/886",[72,6.336,186,1.418,190,2.997,192,3.339,489,7.737]],["t/888",[51,4.536,186,1.322,190,2.795,195,3.356,345,4.004,490,5.596]],["t/890",[82,3.303,83,3.291,153,3.68,186,1.418,190,2.997]],["t/894",[69,3.352,76,0.975,186,1.164,321,2.895,341,4.23,342,3.313,491,3.188,492,4.082]],["t/896",[62,3.697,76,1.334,186,1.099,321,2.732,340,5.079,341,3.993,342,3.126,491,3.009]],["t/898",[79,1.075,186,1.238,205,3.426,225,3.564,269,3.86,321,3.078,491,3.39]],["t/900",[2,2.025,80,1.15,186,1.099,212,4.101,267,3.733,321,2.732,328,4.101,331,5.289,491,3.009]],["t/902",[4,2.796,16,2.657,75,1.455,186,1.238,205,3.426,321,3.078,491,3.39]],["t/904",[16,2.657,75,1.455,76,1.037,186,1.238,335,4.052,491,3.39,493,3.75]],["t/906",[16,2.358,75,1.291,79,0.955,186,1.099,491,3.009,493,3.329,494,4.16,495,4.371,496,4.371]],["t/908",[16,2.657,75,1.455,80,1.295,163,3.889,186,1.238,491,3.39,493,3.75]],["t/910",[16,2.657,75,2.037,186,1.238,326,4.341,335,4.052,491,3.39]],["t/912",[16,2.657,56,1.295,75,1.455,186,1.238,459,4.206,465,5.533,491,3.39]],["t/914",[2,2.146,56,1.218,69,3.352,186,1.164,333,4.178,491,3.188,497,5.604,498,6.355]],["t/916",[40,1.391,112,1.787,186,0.988,235,4.778,329,4.182,434,5.007,491,2.705,499,5.391,500,5.391,501,5.391]],["t/918",[109,1.75,186,0.988,207,4.088,310,4.755,311,4.755,409,3.426,491,2.705,502,5.391,503,5.391,504,5.007,505,5.391]],["t/920",[82,3.303,83,3.291,112,2.564,186,1.418,491,3.882]],["t/923",[76,1.187,186,1.418,321,3.525,506,3.966,507,7.737]],["t/925",[69,3.805,79,1.148,155,4.004,186,1.322,506,3.698,508,4.687]],["t/926",[76,1.187,79,1.231,186,1.418,506,3.966,509,7.737]],["t/928",[79,1.653,186,1.418,506,3.966,510,7.737]],["t/930",[79,1.231,80,1.483,186,1.418,506,3.966,511,7.737]],["t/932",[75,1.553,79,1.148,186,1.322,506,3.698,508,4.687,512,7.214]],["t/934",[80,1.295,96,3.426,186,1.238,225,3.564,342,3.522,469,4.249,506,3.463]],["t/936",[75,1.666,82,3.303,83,3.291,186,1.418,506,3.966]],["t/940",[76,1.107,79,1.148,186,1.322,321,3.287,322,4.218,513,5.004]],["t/942",[79,1.506,186,1.238,321,3.078,322,3.951,439,5.376,513,4.687]],["t/944",[79,1.011,80,1.218,89,3.392,186,1.164,321,2.895,322,3.716,326,4.082,513,4.408]],["t/946",[5,4.206,75,1.455,79,1.075,186,1.238,321,3.078,322,3.951,513,4.687]],["t/948",[56,1.218,69,3.352,79,1.011,169,3.88,186,1.164,321,2.895,322,3.716,513,4.408]],["t/950",[40,1.996,79,1.231,82,3.303,83,3.291,186,1.418]],["t/953",[76,1.037,186,1.238,188,2.481,345,3.75,385,5.722,451,4.687,452,5.376]],["t/955",[79,1.075,161,5.959,186,1.238,188,2.481,345,3.75,385,5.722,451,4.687]],["t/957",[80,1.383,186,1.322,188,2.648,345,4.004,353,4.121,514,4.447]],["t/959",[75,1.368,161,5.604,186,1.164,188,2.333,345,3.527,353,3.63,451,4.408,514,3.917]],["t/961",[56,1.483,186,1.418,188,2.841,345,4.294,515,6.552]],["t/963",[40,1.996,186,1.418,188,2.841,327,6.156,345,4.294]],["t/964",[40,1.639,76,0.975,134,5.204,181,5.381,182,4.55,186,1.164,188,2.333,453,4.929]],["t/966",[40,1.743,79,1.075,186,1.238,188,2.481,345,3.75,453,5.241,516,5.722]],["t/968",[40,1.861,80,1.383,186,1.322,188,2.648,345,4.004,517,7.214]],["t/970",[40,1.861,75,1.553,186,1.322,188,2.648,345,4.004,518,7.214]],["t/972",[40,1.861,56,1.383,186,1.322,188,2.648,345,4.004,519,7.214]],["t/974",[40,2.441,186,1.238,188,2.481,345,3.75,520,6.757,521,6.757]],["t/976",[40,1.861,109,2.342,186,1.322,188,2.648,345,4.004,522,5.47]],["t/978",[40,1.861,112,2.391,186,1.322,188,2.648,345,4.004,523,7.214]],["t/980",[40,1.996,186,1.903,188,2.841,504,7.186]],["t/982",[82,3.303,83,3.291,109,2.512,186,1.418,188,2.841]],["t/985",[75,1.666,76,1.187,85,4.865,186,1.418,493,4.294]],["t/987",[75,1.666,79,1.231,186,1.418,450,5.746,493,4.294]],["t/989",[75,1.291,76,0.92,79,0.955,186,1.099,493,3.329,494,4.16,495,4.371,496,4.371,524,5.997]],["t/991",[75,1.368,79,1.442,186,1.164,335,3.811,493,3.527,495,4.631,496,4.631]],["t/993",[75,1.223,79,0.904,80,1.089,186,1.04,205,2.879,321,2.587,335,3.405,493,3.152,495,4.138,496,4.138]],["t/995",[75,2.037,79,1.075,163,3.889,186,1.238,343,3.75,493,3.75]],["t/997",[56,1.15,75,1.291,79,0.955,163,3.452,186,1.099,205,3.041,321,2.732,343,3.329,493,3.329]],["t/999",[40,1.465,69,2.995,75,1.223,79,0.904,186,1.04,205,2.879,209,3.69,335,3.405,493,3.152,525,5.678]],["t/1001",[69,2.995,75,1.223,79,0.904,109,1.844,186,1.04,205,2.879,209,3.69,335,3.405,493,3.152,526,5.008]],["t/1003",[69,2.843,75,1.161,79,0.858,112,1.787,176,3.74,186,0.988,205,2.734,209,3.503,270,4.004,335,3.233,493,2.992]],["t/1005",[69,2.843,75,1.161,79,0.858,177,3.013,186,1.473,205,2.734,209,3.503,270,4.004,335,3.233,493,2.992]],["t/1007",[69,2.843,75,1.161,79,0.858,179,3.589,186,0.988,188,1.979,205,2.734,209,3.503,270,4.004,335,3.233,493,2.992]],["t/1009",[24,3.981,69,2.707,75,1.105,79,0.817,186,0.94,190,1.988,205,2.602,209,3.335,270,3.811,335,3.077,343,2.848,493,2.848]],["t/1011",[69,2.843,75,1.161,79,0.858,163,3.103,186,0.988,192,2.327,205,2.734,209,3.503,270,4.004,345,2.992,493,2.992]],["t/1013",[69,2.707,75,1.105,79,0.817,163,2.954,186,0.94,195,2.388,205,2.602,209,3.335,270,3.811,345,2.848,493,2.848,494,3.56]],["t/1015",[75,1.455,79,1.075,153,3.214,186,1.238,493,3.75,527,6.276,528,6.276]],["t/1017",[75,1.553,79,1.148,84,3.342,186,1.322,493,4.004,513,5.004]],["t/1019",[4,3.202,75,1.666,80,1.483,186,1.418,493,4.294]],["t/1021",[21,4.289,75,1.553,76,1.107,80,1.383,149,6.109,186,1.322]],["t/1023",[21,4.017,25,3.7,75,1.455,79,1.075,80,1.295,186,1.238,238,3.725]],["t/1025",[15,3.104,75,1.455,80,1.814,186,1.238,529,6.276,530,6.757]],["t/1027",[75,2.132,95,5.166,186,1.322,493,4.004,531,6.362]],["t/1028",[75,1.951,76,0.975,186,1.164,333,4.178,335,3.811,403,4.55,493,3.527]],["t/1030",[75,1.951,79,1.011,155,3.527,186,1.164,333,4.178,403,4.55,493,3.527]],["t/1032",[15,2.919,75,1.951,80,1.218,163,3.658,186,1.164,343,3.527,493,3.527]],["t/1034",[56,1.383,75,1.553,186,1.322,205,3.658,321,3.287,343,4.004]],["t/1036",[56,1.218,75,1.368,76,0.975,186,1.164,321,2.895,333,4.178,347,4.178,403,4.55]],["t/1038",[4,2.985,19,4.032,40,1.861,75,1.553,186,1.322,334,6.7]],["t/1040",[75,1.666,96,3.923,109,2.512,186,1.418,493,4.294]],["t/1042",[75,1.666,82,3.303,83,3.291,112,2.564,186,1.418]],["t/1045",[76,1.187,186,1.418,527,7.186,528,7.186,532,4.057]],["t/1047",[76,1.452,85,4.249,186,1.238,198,5.123,235,4.017,532,3.543]],["t/1049",[76,1.187,79,1.231,186,1.418,276,5.866,532,4.057]],["t/1051",[79,1.231,89,4.13,186,1.418,239,4.681,532,4.057]],["t/1053",[76,0.975,79,1.011,172,3.332,186,1.164,321,2.895,322,3.716,532,3.332,533,5.604]],["t/1055",[79,1.442,172,3.332,186,1.164,209,4.129,321,2.895,322,3.716,532,3.332]],["t/1057",[79,0.955,80,1.15,186,1.099,209,3.897,225,3.163,321,2.732,322,3.507,532,3.145,534,5.289]],["t/1059",[75,1.455,79,1.075,172,3.543,186,1.238,335,4.052,416,5.959,532,3.543]],["t/1061",[56,1.15,79,0.955,184,5.079,186,1.099,321,2.732,409,3.811,416,5.289,532,3.145,535,4.911]],["t/1063",[4,2.482,40,1.547,51,3.771,79,0.955,186,1.099,209,3.897,532,3.145,534,5.289,536,5.997]],["t/1065",[79,1.011,96,3.222,109,2.063,186,1.164,209,4.129,387,3.392,532,3.332,537,5.902]],["t/1067",[80,1.599,186,1.529,532,4.374,538,7.357]],["t/1069",[16,2.837,75,1.553,186,1.322,532,3.782,538,6.362,539,7.214]],["t/1070",[75,1.553,76,1.107,186,1.322,532,3.782,540,5.907,541,6.362]],["t/1072",[75,1.553,79,1.148,186,1.322,532,3.782,541,6.362,542,7.214]],["t/1074",[75,1.455,80,1.295,186,1.238,532,3.543,540,5.533,541,5.959,543,6.757]],["t/1076",[2,2.436,56,1.383,186,1.322,497,6.362,532,3.782,533,6.362]],["t/1077",[34,5.241,56,1.295,76,1.037,90,3.804,186,1.238,532,3.543,544,3.229]],["t/1078",[56,1.295,79,1.075,186,1.238,280,4.62,532,3.543,545,5.376,546,5.722]],["t/1079",[56,1.383,80,1.383,186,1.322,440,5.739,532,3.782,547,5.47]],["t/1080",[56,1.383,75,1.553,186,1.322,321,3.287,532,3.782,544,3.447]],["t/1081",[56,1.898,186,1.322,532,3.782,544,3.447,548,7.214]],["t/1083",[40,1.743,44,4.165,56,1.295,186,1.238,280,4.62,532,3.543,544,3.229]],["t/1084",[2,2.282,56,1.295,109,2.194,186,1.238,532,3.543,545,5.376,549,4.924]],["t/1085",[2,2.282,29,3.585,56,1.295,112,2.24,186,1.238,245,5.959,532,3.543]],["t/1086",[2,2.436,56,1.383,186,1.814,532,3.782,550,6.7]],["t/1087",[2,2.436,40,1.861,186,1.322,209,4.687,497,6.362,532,3.782]],["t/1088",[34,5.241,40,1.743,76,1.037,90,3.804,186,1.238,532,3.543,551,5.018]],["t/1089",[40,1.743,79,1.075,186,1.238,280,4.62,532,3.543,545,5.376,546,5.722]],["t/1090",[40,1.639,80,1.218,186,1.164,280,4.345,332,5.604,532,3.332,545,5.056,547,4.818]],["t/1091",[40,1.743,75,1.455,186,1.238,280,4.62,321,3.078,532,3.543,551,5.018]],["t/1092",[29,3.372,40,1.639,56,1.218,186,1.164,245,5.604,280,4.345,532,3.332,545,5.056]],["t/1093",[40,2.441,186,1.238,280,4.62,532,3.543,540,5.533,549,4.924]],["t/1094",[40,1.861,109,2.342,186,1.322,532,3.782,550,6.7,551,5.358]],["t/1095",[109,2.342,186,1.322,326,4.635,532,3.782,545,5.739,552,6.7]],["t/1096",[112,2.391,134,5.907,135,5.257,186,1.322,532,3.782,538,6.362]],["t/1098",[82,3.303,83,3.291,186,1.903,532,4.057]],["t/1102",[71,3.247,76,1.107,107,5.358,186,1.322,195,3.356,553,5.47]],["t/1104",[69,3.352,79,1.011,107,4.72,186,1.164,195,2.957,321,2.895,436,3.065,553,4.818]],["t/1106",[4,2.985,79,1.148,107,5.358,186,1.322,195,3.356,553,5.47]],["t/1108",[16,2.837,76,1.107,79,1.148,186,1.322,195,3.356,554,6.362]],["t/1110",[79,1.576,186,1.322,195,3.356,387,3.851,463,5.596]],["t/1112",[79,1.148,80,1.383,186,1.322,195,3.356,387,3.851,555,5.739]],["t/1114",[75,1.455,79,1.075,186,1.238,195,3.144,387,3.607,462,4.924,464,5.376]],["t/1116",[56,1.218,79,1.011,186,1.164,195,2.957,387,3.392,556,5.056,557,5.204,558,5.204]],["t/1118",[40,1.639,79,1.011,186,1.164,195,2.957,387,3.392,461,5.604,559,5.056,560,5.056]],["t/1120",[79,1.011,109,2.063,186,1.164,195,2.957,387,3.392,462,4.631,559,5.056,560,5.056]],["t/1122",[79,1.148,112,2.391,186,1.322,195,3.356,352,4.326,387,3.851]],["t/1124",[80,1.295,107,5.018,186,1.238,195,3.144,352,4.052,362,5.959,553,5.123]],["t/1126",[76,1.037,80,1.295,172,3.543,186,1.238,195,3.144,238,3.725,363,4.76]],["t/1128",[79,1.011,80,1.218,107,4.72,186,1.164,195,2.957,352,3.811,362,5.604,553,4.818]],["t/1130",[71,3.482,80,1.483,186,1.418,195,3.6,561,7.737]],["t/1132",[71,3.482,75,1.666,186,1.418,195,3.6,562,7.737]],["t/1134",[56,1.383,107,5.358,186,1.322,195,3.356,238,3.977,553,5.47]],["t/1136",[40,1.996,82,3.303,83,3.291,186,1.418,195,3.6]],["t/1140",[76,1.107,85,4.536,186,1.322,353,4.121,563,4.061,564,5.907]],["t/1142",[2,2.613,79,1.231,89,4.13,186,1.418,563,4.355]],["t/1144",[4,2.63,19,3.552,76,0.975,79,1.011,186,1.164,326,4.082,335,3.811,563,3.577]],["t/1146",[4,2.482,19,3.352,79,1.383,140,3.479,169,3.662,186,1.099,563,3.376,565,5.997]],["t/1148",[80,1.483,175,4.971,186,1.418,563,4.355,566,7.737]],["t/1150",[75,1.455,186,1.238,321,3.078,347,4.443,353,3.86,563,3.804,564,5.533]],["t/1152",[56,1.483,82,3.303,83,3.291,186,1.418,563,4.355]],["t/1156",[71,3.482,76,1.187,84,3.584,163,4.453,186,1.418]],["t/1158",[79,1.148,84,3.342,163,4.152,186,1.322,567,5.907,568,6.109]],["t/1159",[76,1.107,79,1.148,84,3.342,186,1.322,387,3.851,463,5.596]],["t/1161",[79,1.506,84,3.13,186,1.238,387,3.607,462,4.924,464,5.376]],["t/1163",[79,1.148,80,1.383,84,3.342,186,1.322,387,3.851,555,5.739]],["t/1165",[75,1.368,79,1.011,84,2.944,186,1.164,387,3.392,556,5.056,557,5.204,558,5.204]],["t/1167",[56,1.295,79,1.075,84,3.13,186,1.238,387,3.607,559,5.376,560,5.376]],["t/1169",[40,1.547,79,0.955,84,2.778,186,1.099,387,3.202,516,5.079,569,5.079,570,5.289,571,5.289]],["t/1171",[80,1.295,84,3.13,107,5.018,186,1.238,553,5.123,567,5.533,568,5.722]],["t/1172",[76,1.107,80,1.383,84,3.342,186,1.322,387,3.851,463,5.596]],["t/1174",[79,1.075,80,1.295,84,3.13,186,1.238,387,3.607,462,4.924,464,5.376]],["t/1176",[80,1.898,84,3.342,186,1.322,387,3.851,555,5.739]],["t/1178",[75,1.368,80,1.218,84,2.944,186,1.164,387,3.392,556,5.056,557,5.204,558,5.204]],["t/1180",[56,1.295,80,1.295,84,3.13,186,1.238,387,3.607,559,5.376,560,5.376]],["t/1182",[40,1.547,80,1.15,84,2.778,186,1.099,387,3.202,516,5.079,569,5.079,570,5.289,571,5.289]],["t/1184",[80,1.218,84,2.944,109,2.063,186,1.164,387,3.392,572,4.72,573,5.902,574,5.902]],["t/1186",[75,1.553,84,3.342,186,1.322,459,4.491,567,5.907,568,6.109]],["t/1187",[75,1.553,76,1.107,84,3.342,186,1.322,459,4.491,460,5.739]],["t/1189",[75,1.455,79,1.075,84,3.13,178,4.687,186,1.238,409,4.294,459,4.206]],["t/1191",[29,3.828,56,1.383,84,3.342,186,1.322,522,5.47,575,6.362]],["t/1193",[40,1.996,84,3.584,186,1.418,343,4.294,576,7.186]],["t/1195",[84,3.584,109,2.512,186,1.418,343,4.294,577,6.552]],["t/1197",[84,3.342,112,2.391,186,1.322,343,4.004,344,6.362,577,6.109]],["t/1199",[71,3.247,84,3.342,163,4.152,186,1.814,238,3.977]],["t/1201",[84,3.13,163,3.889,186,1.238,188,2.481,205,3.426,321,3.078,343,3.75]],["t/1203",[16,2.657,76,1.037,84,3.13,186,1.238,188,2.481,567,5.533,568,5.722]],["t/1205",[16,2.837,79,1.148,84,3.342,186,1.322,188,2.648,576,6.7]],["t/1207",[16,2.837,80,1.383,84,3.342,186,1.322,188,2.648,577,6.109]],["t/1209",[16,2.657,75,1.455,84,3.13,186,1.238,188,2.481,344,5.959,577,5.722]],["t/1211",[84,3.584,186,1.418,190,2.997,321,3.525,403,5.54]],["t/1213",[84,3.342,186,1.322,192,3.113,578,6.7,579,6.362,580,5.47]],["t/1215",[16,2.657,84,3.13,186,1.238,195,3.144,309,4.498,581,5.959,582,4.391]],["t/1217",[82,3.303,83,3.291,84,3.584,153,3.68,186,1.418]],["t/1220",[71,3.247,76,1.107,163,4.152,186,1.322,547,5.47,583,3.463]],["t/1222",[79,1.231,186,1.418,583,3.714,584,6.336,585,7.737]],["t/1224",[80,1.295,163,3.889,186,1.238,547,5.123,583,3.244,586,5.959,587,6.757]],["t/1226",[16,2.837,76,1.107,80,1.383,149,6.109,186,1.322,583,3.463]],["t/1228",[21,4.017,25,3.7,79,1.075,80,1.295,186,1.238,238,3.725,583,3.244]],["t/1230",[80,1.814,186,1.238,529,6.276,583,3.244,588,6.757,589,6.757]],["t/1232",[75,1.666,163,4.453,186,1.418,343,4.294,583,3.714]],["t/1233",[75,1.553,76,1.107,186,1.322,387,3.851,463,5.596,583,3.463]],["t/1235",[75,1.455,79,1.075,186,1.238,387,3.607,462,4.924,464,5.376,583,3.244]],["t/1237",[75,1.553,80,1.383,186,1.322,387,3.851,555,5.739,583,3.463]],["t/1239",[75,1.951,186,1.164,387,3.392,556,5.056,557,5.204,558,5.204,583,3.051]],["t/1241",[56,1.295,75,1.455,186,1.238,387,3.607,559,5.376,560,5.376,583,3.244]],["t/1243",[40,1.996,75,1.666,186,1.418,386,5.746,583,3.714]],["t/1245",[75,1.291,109,1.947,140,3.479,155,3.329,186,1.099,238,3.306,387,3.202,583,2.879,590,4.101]],["t/1247",[75,1.291,112,1.988,186,1.099,387,3.202,516,5.079,569,5.079,570,5.289,571,5.289,583,2.879]],["t/1249",[56,1.383,107,5.358,186,1.322,343,4.004,553,5.47,583,3.463]],["t/1250",[56,1.383,76,1.107,186,1.322,387,3.851,463,5.596,583,3.463]],["t/1252",[56,1.295,79,1.075,186,1.238,387,3.607,462,4.924,464,5.376,583,3.244]],["t/1254",[56,1.383,80,1.383,186,1.322,387,3.851,555,5.739,583,3.463]],["t/1256",[56,1.218,75,1.368,186,1.164,387,3.392,556,5.056,557,5.204,558,5.204,583,3.051]],["t/1258",[56,1.814,186,1.238,387,3.607,559,5.376,560,5.376,583,3.244]],["t/1260",[40,1.996,56,1.483,186,1.418,386,5.746,583,3.714]],["t/1262",[56,1.218,109,2.063,186,1.164,387,3.392,572,4.72,573,5.902,574,5.902,583,3.051]],["t/1264",[56,1.15,112,1.988,140,3.479,155,3.329,186,1.099,238,3.306,387,3.202,583,2.879,590,4.101]],["t/1266",[40,1.996,186,1.418,343,4.294,459,4.816,583,3.714]],["t/1268",[109,2.342,163,4.152,186,1.322,583,3.463,591,4.803,592,6.109]],["t/1270",[112,2.564,186,1.418,321,3.525,403,5.54,583,3.714]],["t/1272",[16,2.657,25,3.7,76,1.037,112,2.24,186,1.238,583,3.244,590,4.62]],["t/1274",[79,1.231,112,2.564,186,1.418,583,3.714,593,6.823]],["t/1276",[25,3.284,80,1.15,112,1.988,186,1.099,250,4.652,329,4.652,403,4.294,583,2.879,594,5.997]],["t/1278",[163,4.152,186,1.814,508,4.687,547,5.47,583,3.463]],["t/1280",[29,3.828,186,1.322,188,2.648,522,5.47,575,6.362,583,3.463]],["t/1282",[82,3.303,83,3.291,186,1.418,190,2.997,583,3.714]],["t/1285",[76,1.187,163,4.453,186,1.418,263,4.294,591,5.151]],["t/1287",[79,1.148,163,4.152,186,1.322,263,4.004,294,5.739,591,4.803]],["t/1288",[76,1.187,79,1.231,186,1.418,263,4.294,360,6.823]],["t/1290",[79,1.653,186,1.418,263,4.294,595,6.823]],["t/1292",[4,3.202,80,1.483,89,4.13,186,1.418,263,4.294]],["t/1294",[4,2.985,76,1.107,80,1.383,186,1.322,263,4.004,302,6.362]],["t/1296",[79,1.148,80,1.383,95,5.166,186,1.322,263,4.004,596,6.7]],["t/1298",[2,2.436,75,1.553,163,4.152,186,1.322,263,4.004,591,4.803]],["t/1299",[75,1.553,76,1.107,186,1.322,241,5.082,263,4.004,597,7.214]],["t/1301",[2,2.282,75,1.455,79,1.075,186,1.238,205,3.426,263,3.75,348,4.443]],["t/1303",[56,1.483,82,3.303,83,3.291,186,1.418,263,4.294]],["t/1306",[76,1.187,186,1.418,301,6.336,436,3.732,598,7.737]],["t/1308",[38,4.082,62,3.917,76,1.391,186,1.164,321,2.895,340,5.381,436,3.065]],["t/1310",[76,1.037,79,1.075,172,3.543,186,1.238,321,3.078,322,3.951,436,3.259]],["t/1312",[2,2.282,76,1.037,80,1.295,186,1.238,212,4.62,328,4.62,436,3.259]],["t/1314",[2,1.918,75,1.223,76,0.871,186,1.04,212,3.882,267,3.535,321,2.587,328,3.882,331,5.008,436,2.739]],["t/1316",[56,1.295,76,1.037,186,1.238,225,3.564,321,3.078,322,3.951,436,3.259]],["t/1318",[40,1.743,76,1.037,150,4.76,186,1.238,419,5.533,436,3.259,599,6.276]],["t/1320",[79,1.231,82,3.303,83,3.291,186,1.418,436,3.732]],["t/1324",[40,1.743,76,1.037,177,3.777,186,1.238,243,3.951,390,3.984,600,6.276]],["t/1326",[40,1.743,79,1.075,177,3.777,186,1.238,243,3.951,390,3.984,600,6.276]],["t/1328",[40,1.639,80,1.218,105,4.55,177,3.552,186,1.164,243,3.716,390,3.746,396,4.286]],["t/1330",[40,1.639,75,1.368,105,4.55,177,3.552,186,1.164,243,3.716,390,3.746,396,4.286]],["t/1332",[40,1.547,56,1.15,177,3.352,186,1.099,243,3.507,281,3.733,289,4.547,390,3.536,396,4.045]],["t/1334",[40,2.242,177,3.352,186,1.099,243,3.507,281,3.733,289,4.547,390,3.536,396,4.045]],["t/1336",[40,1.391,109,1.75,177,3.013,182,3.86,186,0.988,243,3.152,353,3.08,390,3.178,396,3.636,454,4.088,514,3.323]],["t/1338",[40,1.391,112,1.787,177,3.013,182,3.86,186,0.988,243,3.152,353,3.08,390,3.178,396,3.636,454,4.088,514,3.323]],["t/1340",[40,1.391,105,3.86,177,3.013,182,3.86,186,1.473,243,3.152,353,3.08,390,3.178,396,3.636,454,4.088]],["t/1342",[40,1.391,105,3.86,177,3.013,182,3.86,186,0.988,188,1.979,243,3.152,353,3.08,390,3.178,396,3.636,454,4.088]],["t/1344",[40,1.263,105,3.506,177,2.737,182,3.506,186,0.897,190,1.897,243,2.863,281,3.048,289,3.712,353,2.797,390,2.887,396,3.302,454,3.712]],["t/1346",[40,1.263,105,3.506,177,2.737,182,3.506,186,0.897,192,2.113,243,2.863,281,3.048,289,3.712,353,2.797,390,2.887,396,3.302,454,3.712]],["t/1348",[40,1.639,177,3.552,186,1.164,195,2.957,243,3.716,389,5.381,390,3.746,453,4.929]],["t/1350",[40,1.639,153,3.023,177,3.552,186,1.164,243,3.716,389,5.381,390,3.746,453,4.929]],["t/1352",[40,1.861,84,3.342,177,4.032,186,1.322,391,5.47,392,6.7]],["t/1354",[40,1.996,82,3.303,83,3.291,186,1.418,263,4.294]],["t/1357",[71,3.482,76,1.187,186,1.418,192,3.339,410,5.54]],["t/1359",[4,3.202,79,1.231,186,1.418,192,3.339,410,5.54]],["t/1361",[76,1.037,79,1.075,163,3.889,172,3.543,186,1.238,192,2.916,410,4.838]],["t/1363",[79,1.576,186,1.322,192,3.113,363,5.082,410,5.166]],["t/1365",[4,3.202,80,1.483,186,1.418,192,3.339,410,5.54]],["t/1367",[16,2.657,75,1.455,147,5.376,174,4.687,186,1.238,192,2.916,410,4.838]],["t/1369",[56,1.483,82,3.303,83,3.291,186,1.418,192,3.339]],["t/1373",[71,3.247,76,1.107,79,1.148,601,3.513,602,6.362,603,4.865]],["t/1375",[16,2.837,79,1.576,582,4.687,601,3.513,604,6.7]],["t/1376",[76,1.107,79,1.576,544,3.447,582,4.687,601,3.513]],["t/1378",[79,1.738,544,3.229,582,4.391,601,3.29,605,5.959]],["t/1380",[79,1.231,80,1.483,82,3.303,83,3.291,601,3.767]],["t/1384",[21,4.96,66,5.193,76,1.28,192,3.6]],["t/1386",[79,1.328,192,3.6,606,6.325,607,8.342]],["t/1388",[80,1.483,192,3.339,294,6.156,608,7.737,609,7.737]],["t/1390",[16,2.837,21,4.289,66,4.491,75,1.553,192,3.113,610,7.214]],["t/1391",[21,4.6,75,1.666,76,1.187,192,3.339,611,7.737]],["t/1393",[16,2.837,21,4.289,75,1.553,79,1.148,175,4.635,192,3.113]],["t/1395",[21,4.289,25,3.95,75,1.553,80,1.383,192,3.113,238,3.977]],["t/1397",[56,1.483,169,4.724,192,3.339,225,4.081,612,6.336]],["t/1398",[56,1.383,76,1.107,192,3.113,612,5.907,613,7.214,614,7.214]],["t/1400",[56,1.483,79,1.231,192,3.339,580,5.866,612,6.336]],["t/1402",[56,1.383,80,1.383,192,3.113,470,5.739,612,5.907,615,6.7]],["t/1404",[40,1.996,66,4.816,192,3.339,450,5.746,616,4.865]],["t/1406",[4,3.452,88,5.877,109,2.709,192,3.6]],["t/1407",[50,5.746,51,4.865,76,1.187,109,2.512,192,3.339]],["t/1409",[79,1.075,109,2.194,192,2.916,225,3.564,495,4.924,496,4.924,617,5.376]],["t/1411",[80,1.295,109,2.194,173,4.341,192,2.916,239,4.088,347,4.443,616,4.249]],["t/1413",[75,1.796,109,2.709,192,3.6,593,7.357]],["t/1415",[2,2.613,28,4.681,112,2.564,192,3.339,618,5.746]],["t/1417",[95,5.54,96,3.923,186,1.418,192,3.339,225,4.081]],["t/1419",[2,2.436,151,5.47,152,4.447,188,2.648,192,3.113,225,3.805]],["t/1421",[145,6.156,190,2.997,192,3.339,225,4.081,619,7.186]],["t/1423",[192,4.481,225,4.081,508,5.027,620,6.336]],["t/1425",[6,4.635,76,1.107,192,4.273,508,4.687,620,5.907]],["t/1427",[21,4.017,79,1.075,192,4.084,269,3.86,620,5.533,621,4.838]],["t/1429",[80,1.483,192,4.481,439,6.156,620,6.336]],["t/1431",[192,2.916,195,3.144,269,3.86,494,4.687,578,6.276,621,4.838,622,4.924]],["t/1433",[16,3.043,76,1.187,192,3.339,195,3.6,623,7.186]],["t/1435",[16,3.043,79,1.231,192,3.339,195,3.6,624,7.737]],["t/1437",[80,1.383,140,4.185,192,3.113,195,3.356,309,4.803,625,7.214]],["t/1439",[96,3.426,153,3.214,192,2.916,225,3.564,269,3.86,469,4.249,626,6.757]],["t/1441",[82,3.561,83,3.549,84,3.865,192,3.6]],["t/1445",[76,1.594,544,3.697,601,3.767,627,6.156]],["t/1446",[76,1.676,280,4.62,544,3.229,601,3.29,628,6.757]],["t/1447",[76,1.452,79,1.075,280,4.62,544,3.229,601,3.29,629,5.959]],["t/1448",[2,2.282,76,1.452,80,1.295,282,5.241,544,3.229,601,3.29]],["t/1449",[75,1.553,76,1.52,544,3.447,601,3.513,630,7.214]],["t/1450",[2,2.436,67,5.257,76,1.107,79,1.148,546,6.109,601,3.513]],["t/1451",[76,1.594,79,1.231,601,3.767,631,7.737]],["t/1453",[76,1.107,79,1.576,407,5.739,601,3.513,632,7.214]],["t/1455",[76,1.107,79,1.148,80,1.383,407,5.739,601,3.513,633,7.214]],["t/1457",[75,1.553,76,1.107,79,1.148,407,5.739,601,3.513,634,7.214]],["t/1459",[76,1.187,80,1.483,601,3.767,603,5.218,635,6.156]],["t/1460",[46,5.241,76,1.452,80,1.295,90,3.804,601,3.29,627,5.376]],["t/1461",[2,2.282,76,1.037,79,1.075,80,1.295,108,3.777,601,3.29,627,5.376]],["t/1462",[2,2.282,76,1.037,80,1.814,601,3.29,636,5.376,637,6.757]],["t/1463",[29,3.585,75,1.455,76,1.037,80,1.295,494,4.687,601,3.29,638,5.722]],["t/1464",[56,1.383,76,1.107,80,1.383,601,3.513,627,5.739,639,7.214]],["t/1466",[75,1.796,76,1.28,601,4.062,640,7.357]],["t/1467",[27,2.972,69,2.843,75,1.161,76,1.233,601,2.625,641,5.391,642,4.004,643,4.566,644,5.391,645,5.391]],["t/1469",[75,1.368,76,0.975,79,1.011,212,4.345,279,5.204,601,3.094,646,6.355,647,6.355]],["t/1471",[75,1.054,76,0.751,80,0.939,235,2.911,601,2.384,603,3.302,648,4.896,649,4.896,650,3.896,651,4.896,652,4.896,653,4.896,654,4.896]],["t/1473",[2,2.282,56,1.295,76,1.037,235,4.017,601,3.29,635,5.376,655,5.959]],["t/1475",[40,1.996,76,1.187,82,3.303,83,3.291,601,3.767]],["t/1478",[67,4.631,71,2.86,76,1.391,602,5.604,603,4.286,656,4.345,657,6.355]],["t/1480",[38,4.341,76,1.037,79,1.075,602,5.959,656,4.62,658,6.757,659,5.722]],["t/1482",[4,2.63,76,1.391,79,1.011,656,4.345,660,6.355,661,6.355,662,5.902]],["t/1484",[76,0.975,79,1.442,250,4.929,424,5.604,656,4.345,659,5.381,662,5.902]],["t/1486",[76,1.107,80,1.383,603,4.865,656,4.932,659,6.109,663,6.7]],["t/1487",[76,1.452,80,1.295,656,4.62,664,5.376,665,6.757,666,6.276]],["t/1489",[75,1.455,76,1.037,603,4.557,656,4.62,659,5.722,663,6.276,667,5.533]],["t/1490",[38,4.635,75,1.553,76,1.52,656,4.932,668,7.214]],["t/1492",[2,2.613,75,1.666,76,1.187,79,1.231,656,5.29]],["t/1494",[75,1.553,76,1.107,80,1.383,526,6.362,656,4.932,666,6.7]],["t/1496",[75,2.037,76,1.037,343,3.75,582,4.391,656,4.62,669,6.757]],["t/1498",[56,1.383,75,1.553,76,1.107,352,4.326,656,4.932,667,5.907]],["t/1500",[56,1.483,76,1.187,82,3.303,83,3.291,656,5.29]],["t/1508",[56,1.383,76,1.52,670,6.7,671,7.214,672,6.7]],["t/1510",[56,1.383,76,1.107,79,1.148,670,6.7,672,6.7,673,7.214]],["t/1512",[56,1.383,69,3.805,76,1.107,80,1.383,674,7.214,675,7.214]],["t/1515",[62,4.769,71,3.482,76,1.187,676,4.64,677,7.737]],["t/1517",[62,3.917,76,0.975,79,1.011,355,5.381,401,4.929,424,5.604,676,3.811,678,5.902]],["t/1519",[62,4.447,79,1.148,407,5.739,584,5.907,676,4.326,679,7.214]],["t/1521",[51,4.536,76,1.107,79,1.148,238,3.977,676,4.326,680,6.7]],["t/1523",[51,4.536,79,1.576,238,3.977,676,4.326,681,6.7]],["t/1525",[51,4.536,79,1.148,80,1.383,94,6.362,238,3.977,676,4.326]],["t/1527",[75,1.553,79,1.148,178,5.004,238,3.977,347,4.743,676,4.326]],["t/1529",[56,1.599,79,1.328,676,5.003,682,8.342]],["t/1531",[50,5.746,62,4.769,80,1.483,664,6.156,676,4.64]],["t/1533",[76,1.037,80,1.295,172,3.543,402,5.376,428,5.018,676,4.052,683,6.276]],["t/1534",[79,1.148,80,1.383,676,4.326,683,6.7,684,6.109,685,6.109]],["t/1536",[38,4.082,62,3.917,80,1.737,492,4.082,676,3.811,678,5.902,686,6.355]],["t/1538",[74,5.47,75,1.553,80,1.383,664,5.739,676,4.326,687,6.7]],["t/1540",[56,1.295,62,4.165,80,1.295,89,3.607,208,5.959,676,4.052,688,6.276]],["t/1542",[40,1.743,80,1.295,130,4.443,216,5.376,238,3.725,676,4.052,689,6.276]],["t/1544",[75,1.553,130,4.743,676,4.326,690,6.362,691,7.214,692,7.214]],["t/1546",[6,4.635,38,4.635,75,1.553,76,1.107,676,4.326,690,6.362]],["t/1548",[34,5.596,38,4.635,75,1.553,79,1.148,676,4.326,690,6.362]],["t/1550",[56,1.483,70,7.186,448,6.336,544,3.697,676,4.64]],["t/1552",[40,1.861,140,4.185,150,5.082,309,4.803,405,6.7,676,4.326]],["t/1554",[40,1.996,76,1.187,140,4.488,372,5.45,676,4.64]],["t/1556",[40,1.996,79,1.231,140,4.488,208,6.823,676,4.64]],["t/1558",[40,1.996,79,1.231,108,4.324,140,4.488,676,4.64]],["t/1560",[40,1.996,80,1.483,140,4.488,327,6.156,676,4.64]],["t/1562",[82,3.561,83,3.549,109,2.709,676,5.003]],["t/1565",[76,1.187,167,4.816,186,1.418,446,6.156,693,7.186]],["t/1567",[79,1.231,82,3.303,83,3.291,167,4.816,186,1.418]],["t/1571",[56,1.483,76,1.594,85,4.865,379,5.54]],["t/1573",[56,1.295,76,1.037,79,1.075,144,4.76,357,5.241,379,4.838,595,5.959]],["t/1575",[56,1.383,76,1.52,79,1.148,144,5.082,694,5.739]],["t/1577",[39,4.631,56,1.218,76,0.975,79,1.442,467,5.056,595,5.604,694,5.056]],["t/1579",[56,1.383,76,1.107,80,1.383,333,4.743,379,5.166,694,5.739]],["t/1581",[56,1.295,75,1.455,76,1.037,225,3.564,269,3.86,333,4.443,694,5.376]],["t/1583",[50,5.746,51,4.865,56,1.991,76,1.187]],["t/1585",[40,1.743,56,1.295,76,1.037,333,4.443,621,4.838,694,5.376,695,6.757]],["t/1586",[28,3.845,40,1.639,56,1.218,76,1.391,341,4.23,342,3.313,379,4.55]],["t/1588",[40,1.743,56,1.295,76,1.037,79,1.075,363,4.76,428,5.018,696,6.757]],["t/1590",[2,2.282,56,1.295,76,1.037,109,2.194,144,4.76,333,4.443,694,5.376]],["t/1591",[5,4.206,56,1.295,76,1.452,109,2.194,144,4.76,379,4.838]],["t/1593",[5,3.956,25,3.48,56,1.218,76,0.975,79,1.011,109,2.063,144,4.476,697,5.381]],["t/1595",[5,3.956,27,3.503,56,1.218,76,0.975,80,1.218,109,2.063,144,4.476,698,5.381]],["t/1597",[5,3.956,36,4.286,56,1.218,75,1.368,76,0.975,109,2.063,144,4.476,699,4.818]],["t/1599",[56,1.898,76,1.107,109,2.342,144,5.082,327,5.739]],["t/1601",[51,4.536,56,1.383,76,1.107,112,2.391,205,3.658,348,4.743]],["t/1602",[14,4.929,25,3.48,27,3.503,56,1.218,76,1.391,112,2.106,698,5.381]],["t/1604",[25,3.48,56,1.218,76,0.975,79,1.011,96,3.222,112,2.106,347,4.178,697,5.381]],["t/1606",[25,3.48,56,1.218,76,0.975,80,1.218,112,2.106,238,3.503,572,4.72,697,5.381]],["t/1608",[56,1.218,75,1.368,76,0.975,112,2.106,140,3.686,155,3.527,238,3.503,700,6.355]],["t/1610",[56,1.814,76,1.037,96,3.426,112,2.24,238,3.725,332,5.959]],["t/1612",[27,3.725,40,1.743,56,1.295,76,1.037,96,3.426,112,2.24,698,5.722]],["t/1614",[56,1.295,69,3.564,76,1.037,109,2.194,112,2.24,347,4.443,698,5.722]],["t/1616",[56,1.295,69,3.564,76,1.037,96,3.426,112,3.136,699,5.123]],["t/1618",[56,1.295,76,1.037,112,2.24,186,1.238,701,6.757,702,6.757,703,5.241]],["t/1620",[56,1.383,69,3.805,76,1.107,112,2.391,188,2.648,704,6.7]],["t/1622",[25,3.48,56,1.218,76,0.975,112,2.106,190,2.462,379,4.55,697,5.381,705,6.355]],["t/1624",[25,3.48,56,1.218,76,0.975,112,2.106,192,2.742,379,4.55,706,6.355,707,5.381]],["t/1626",[25,2.681,56,0.939,76,0.751,112,1.623,195,2.278,238,4.997,494,3.397,708,4.896,709,4.318,710,4.548,711,4.548]],["t/1628",[2,2.282,56,1.295,76,1.037,112,2.24,153,3.214,238,3.725,712,6.757]],["t/1630",[25,2.952,56,1.034,76,0.827,84,2.498,96,2.734,112,1.787,199,3.589,207,4.088,253,4.415,451,3.74,713,5.391]],["t/1632",[56,1.089,76,0.871,112,1.882,238,3.13,263,3.152,494,3.939,699,4.305,710,5.274,711,5.274,714,5.678]],["t/1634",[56,1.295,76,1.037,112,2.24,583,3.244,699,5.123,715,6.757,716,6.757]],["t/1636",[56,1.295,76,1.037,112,2.24,282,5.241,491,3.39,699,5.123,717,6.757]],["t/1638",[56,1.599,76,1.28,186,1.529,718,8.342]],["t/1640",[2,2.436,56,1.383,76,1.52,186,1.322,450,5.358]],["t/1642",[2,2.436,56,1.383,76,1.107,79,1.148,186,1.322,719,7.214]],["t/1644",[2,2.436,56,1.383,76,1.107,80,1.383,186,1.322,720,7.214]],["t/1646",[2,2.436,56,1.383,75,1.553,76,1.107,186,1.322,721,7.214]],["t/1648",[2,2.436,56,1.898,76,1.107,186,1.322,722,7.214]],["t/1650",[2,2.436,40,1.861,56,1.383,76,1.107,186,1.322,723,7.214]],["t/1652",[2,2.436,56,1.383,76,1.107,109,2.342,186,1.322,724,7.214]],["t/1654",[2,2.436,56,1.383,76,1.107,112,2.391,186,1.322,725,7.214]],["t/1656",[2,2.436,56,1.383,76,1.107,186,1.814,726,6.7]],["t/1658",[2,2.436,56,1.383,76,1.107,186,1.322,188,2.648,727,7.214]],["t/1660",[2,2.613,56,1.483,76,1.187,188,2.841,728,7.737]],["t/1662",[2,2.025,56,1.15,69,3.163,76,1.334,188,2.202,333,3.943,357,4.652,379,4.294]],["t/1664",[56,1.383,71,3.247,76,1.107,190,2.795,508,4.687,620,5.907]],["t/1666",[27,3.503,29,3.372,56,1.218,76,0.975,192,2.742,522,4.818,575,5.604,650,5.056]],["t/1668",[56,1.483,76,1.187,82,3.303,83,3.291,195,3.6]],["t/1671",[76,1.28,353,4.765,414,4.696,729,6.831]],["t/1673",[79,1.328,414,4.696,450,6.196,730,8.342]],["t/1675",[4,3.452,80,1.599,414,4.696,729,6.831]],["t/1676",[76,1.187,80,1.483,414,4.355,731,7.737,732,6.823]],["t/1678",[79,1.231,80,1.483,414,4.355,729,6.336,733,7.737]],["t/1680",[80,1.991,414,4.355,729,6.336,734,7.737]],["t/1682",[75,1.666,80,1.483,93,6.552,414,4.355,729,6.336]],["t/1684",[56,1.483,80,1.483,414,4.355,732,6.823,735,7.737]],["t/1686",[40,1.996,80,1.483,414,4.355,732,6.823,736,7.737]],["t/1688",[16,3.043,24,6.001,75,1.666,328,5.29,414,4.355]],["t/1690",[56,1.295,414,3.804,737,6.757,738,6.757,739,6.757,740,6.757,741,6.757]],["t/1692",[40,2.152,82,3.561,83,3.549,414,4.696]],["t/1696",[76,1.187,85,4.865,349,4.237,351,5.367,742,6.156]],["t/1698",[79,1.231,295,7.186,349,4.237,372,5.45,743,7.186]],["t/1700",[76,0.975,79,1.011,225,3.352,269,3.63,349,3.48,351,4.408,742,5.056,744,6.355]],["t/1702",[79,1.576,326,4.635,349,3.95,551,5.358,745,6.362]],["t/1704",[79,1.231,80,1.483,349,4.237,372,5.45,544,3.697]],["t/1706",[75,1.553,79,1.148,349,3.95,372,5.082,551,5.358,746,7.214]],["t/1708",[16,3.043,80,1.483,349,4.237,352,4.64,540,6.336]],["t/1710",[21,4.6,66,4.816,71,3.482,75,1.666,349,4.237]],["t/1712",[56,1.599,82,3.561,83,3.549,349,4.568]],["t/1716",[71,3.755,76,1.28,747,5.142,748,7.065]],["t/1718",[76,1.594,155,4.294,747,4.769,748,6.552]],["t/1720",[79,1.148,225,3.805,269,4.121,747,4.447,748,6.109,749,7.214]],["t/1722",[15,3.314,80,1.383,617,5.739,747,4.447,748,6.109,750,6.362]],["t/1723",[16,2.499,76,0.975,80,1.218,461,5.604,747,3.917,750,5.604,751,6.355,752,6.355]],["t/1725",[16,2.657,79,1.075,80,1.295,140,3.92,309,4.498,747,4.165,753,6.757]],["t/1727",[75,1.666,88,5.45,343,4.294,747,4.769,750,6.823]],["t/1728",[8,4.326,75,1.553,76,1.107,174,5.004,747,4.447,754,5.907]],["t/1730",[15,2.755,75,1.291,79,0.955,284,4.771,486,5.57,747,3.697,754,4.911,755,5.997,756,5.997]],["t/1732",[8,4.326,75,2.132,441,5.739,747,4.447,757,7.214]],["t/1734",[56,1.483,309,5.151,747,4.769,758,6.156,759,7.737]],["t/1736",[8,5.003,40,2.152,747,5.142,760,8.342]],["t/1738",[8,4.64,9,7.186,40,1.996,76,1.187,747,4.769]],["t/1740",[8,4.64,10,6.336,40,1.996,79,1.231,747,4.769]],["t/1742",[40,1.743,80,1.295,535,5.533,747,4.165,761,6.757,762,6.276,763,5.722]],["t/1744",[36,4.286,40,1.639,75,1.368,189,4.178,535,5.204,747,3.917,763,5.381,764,5.056]],["t/1746",[10,5.204,27,3.503,109,2.063,606,6.87,747,3.917,765,6.355,766,6.355]],["t/1748",[76,0.975,109,2.063,281,3.956,429,5.204,606,4.818,616,3.996,747,3.917,767,5.204]],["t/1750",[79,1.011,109,2.063,281,3.956,429,5.204,616,3.996,747,3.917,768,5.056,769,6.355]],["t/1752",[80,1.295,109,2.194,606,5.123,747,4.165,767,5.533,770,6.757,771,5.241]],["t/1754",[2,2.613,6,4.971,75,1.666,109,2.512,747,4.769]],["t/1756",[82,3.561,83,3.549,112,2.765,747,5.142]],["t/1760",[76,1.187,80,1.483,186,1.418,321,3.525,335,4.64]],["t/1762",[79,1.148,80,1.383,89,3.851,186,1.322,326,4.635,335,4.326]],["t/1764",[76,0.975,79,1.011,80,1.218,186,1.164,228,5.902,335,3.811,772,5.902,773,6.355]],["t/1766",[79,1.576,80,1.383,186,1.322,774,7.214,775,6.109]],["t/1768",[79,1.148,80,1.898,186,1.322,775,6.109,776,7.214]],["t/1770",[75,1.553,79,1.148,80,1.383,186,1.322,775,6.109,777,7.214]],["t/1772",[56,1.383,79,1.148,80,1.383,186,1.322,775,6.109,778,7.214]],["t/1774",[80,1.898,96,3.658,186,1.322,335,4.326,779,7.214]],["t/1776",[2,2.436,75,1.553,80,1.383,186,1.322,321,3.287,335,4.326]],["t/1778",[2,2.146,19,3.552,75,1.368,76,0.975,80,1.218,186,1.164,321,2.895,335,3.811]],["t/1780",[2,2.025,19,3.352,75,1.291,79,0.955,80,1.15,140,3.479,186,1.099,421,5.57,617,4.771]],["t/1782",[2,2.282,56,1.295,80,1.295,150,4.76,186,1.238,321,3.078,335,4.052]],["t/1784",[2,2.282,40,1.743,80,1.295,155,3.75,186,1.238,396,4.557,780,6.757]],["t/1786",[2,2.146,80,1.218,109,2.063,186,1.164,207,4.818,321,2.895,409,4.038,781,4.818]],["t/1788",[80,1.483,82,3.303,83,3.291,112,2.564,186,1.418]],["t/1792",[71,3.482,76,1.187,349,4.237,351,5.367,742,6.156]],["t/1794",[79,1.328,300,7.065,301,6.831,349,4.568]],["t/1796",[80,1.483,96,3.923,349,4.237,351,5.367,782,7.186]],["t/1798",[75,1.553,96,3.658,349,3.95,351,5.004,782,6.7,783,7.214]],["t/1800",[75,1.553,76,1.107,96,3.658,349,3.95,399,6.109,784,7.214]],["t/1802",[75,1.553,79,1.148,96,3.658,349,3.95,399,6.109,785,7.214]],["t/1804",[56,1.483,96,3.923,349,4.237,351,5.367,786,7.737]],["t/1806",[40,1.861,90,4.061,349,3.95,351,5.004,352,4.326,787,6.7]],["t/1808",[90,4.355,109,2.512,349,4.237,351,5.367,788,7.186]],["t/1810",[4,3.202,112,2.564,269,4.42,349,4.237,580,5.866]],["t/1812",[186,1.238,317,4.017,349,3.7,352,4.052,395,3.92,551,5.018,789,6.757]],["t/1814",[188,2.841,349,4.237,351,5.367,742,6.156,790,6.552]],["t/1816",[140,4.488,190,2.997,309,5.151,349,4.237,743,7.186]],["t/1818",[2,2.436,192,3.113,349,3.95,371,6.7,791,5.907,792,7.214]],["t/1820",[2,2.817,195,3.881,349,4.568,793,8.342]],["t/1822",[16,2.657,71,3.041,153,3.214,194,4.341,349,3.7,372,4.76,794,6.757]],["t/1824",[29,3.828,84,3.342,349,3.95,603,4.865,635,5.739,655,6.362]],["t/1826",[4,2.63,263,3.527,267,3.956,349,3.48,351,4.408,383,5.604,742,5.056,795,6.355]],["t/1828",[82,3.561,83,3.549,349,4.568,583,4.005]],["t/1831",[76,1.28,85,5.246,109,2.709,395,4.839]],["t/1833",[16,3.043,79,1.231,109,2.512,194,4.971,395,4.488]],["t/1835",[80,1.383,85,4.536,109,2.342,194,4.635,395,4.185,796,5.907]],["t/1836",[76,1.037,80,1.295,109,2.194,194,4.341,395,3.92,494,4.687,796,5.533]],["t/1838",[79,1.148,80,1.383,109,2.342,194,4.635,395,4.185,796,5.907]],["t/1840",[4,2.796,75,1.455,109,2.194,194,4.341,267,4.206,395,3.92,796,5.533]],["t/1842",[75,1.455,76,1.037,109,2.194,225,3.564,269,3.86,395,3.92,796,5.533]],["t/1844",[51,4.865,75,1.666,79,1.231,109,2.512,141,6.552]],["t/1846",[56,1.483,71,3.482,109,2.512,797,7.186,798,7.186]],["t/1848",[56,1.383,58,6.7,76,1.107,109,2.342,799,6.109,800,7.214]],["t/1850",[25,3.7,56,1.295,79,1.075,109,2.194,296,6.276,797,6.276,798,6.276]],["t/1852",[40,2.152,109,2.709,147,6.637,148,7.065]],["t/1854",[40,1.743,76,1.037,108,3.777,109,2.194,155,3.75,172,3.543,395,3.92]],["t/1856",[40,1.996,71,3.482,79,1.231,109,2.512,801,7.737]],["t/1858",[4,2.796,40,1.743,80,1.295,109,2.194,140,3.92,309,4.498,395,3.92]],["t/1860",[25,3.95,40,1.861,75,1.553,109,2.342,395,4.185,791,5.907]],["t/1862",[40,1.861,51,4.536,56,1.383,109,2.342,205,3.658,348,4.743]],["t/1864",[108,4.032,109,3.215,155,4.004,347,4.743,395,4.185]],["t/1866",[109,2.512,112,2.564,341,5.151,342,4.033,802,7.737]],["t/1868",[2,2.436,19,4.032,109,2.342,151,5.47,152,4.447,186,1.322]],["t/1870",[4,3.452,109,2.709,188,3.063,803,8.342]],["t/1872",[4,3.202,76,1.187,109,2.512,188,2.841,267,4.816]],["t/1874",[51,4.536,79,1.148,109,2.342,188,2.648,205,3.658,348,4.743]],["t/1876",[109,2.512,190,2.997,372,5.45,395,4.488,619,7.186]],["t/1878",[69,4.081,109,2.512,192,3.339,205,3.923,381,5.367]],["t/1880",[109,2.342,135,5.257,194,4.635,195,3.356,395,4.185,804,5.47]],["t/1882",[6,4.341,109,2.194,153,3.214,194,4.341,341,4.498,342,3.522,395,3.92]],["t/1884",[2,2.817,84,3.865,109,2.709,805,8.342]],["t/1886",[109,2.512,263,4.294,806,7.737,807,7.186,808,7.737]],["t/1888",[82,3.561,83,3.549,109,2.709,583,4.005]],["t/1891",[56,1.383,71,3.247,76,1.107,80,1.383,342,3.761,469,4.536]],["t/1893",[56,1.483,79,1.231,80,1.483,170,6.336,428,5.746]],["t/1895",[56,1.295,76,1.037,79,1.075,80,1.295,342,3.522,360,5.959,469,4.249]],["t/1897",[56,1.383,69,3.805,80,1.898,428,5.358,508,4.687]],["t/1899",[56,1.383,75,1.553,80,1.383,155,4.004,342,3.761,469,4.536]],["t/1900",[56,1.483,75,1.666,76,1.187,80,1.483,809,7.737]],["t/1902",[28,4.088,56,1.295,75,1.455,79,1.075,80,1.295,155,3.75,810,6.276]],["t/1904",[56,1.898,80,1.383,225,3.805,342,3.761,469,4.536]],["t/1906",[19,3.552,56,1.737,76,0.975,80,1.218,139,4.408,225,3.352,240,4.55]],["t/1908",[16,2.657,28,4.088,56,1.814,79,1.075,80,1.295,225,3.564]],["t/1910",[32,5.004,40,1.861,56,1.383,80,1.383,342,3.761,469,4.536]],["t/1912",[16,2.837,40,1.861,56,1.383,76,1.107,80,1.383,811,5.739]],["t/1914",[16,2.499,28,3.845,40,1.639,56,1.218,79,1.011,80,1.218,326,4.082,703,4.929]],["t/1916",[56,1.383,80,1.383,109,2.342,342,3.761,469,4.536,812,6.362]],["t/1918",[16,2.837,56,1.383,76,1.107,80,1.383,109,2.342,811,5.739]],["t/1920",[16,2.499,28,3.845,56,1.218,79,1.011,80,1.218,109,2.063,326,4.082,703,4.929]],["t/1922",[56,1.383,80,1.383,112,2.391,342,3.761,343,4.004,469,4.536]],["t/1924",[16,2.837,56,1.383,76,1.107,80,1.383,112,2.391,811,5.739]],["t/1926",[16,2.837,56,1.383,79,1.148,80,1.383,112,2.391,813,7.214]],["t/1928",[16,2.499,28,3.845,56,1.218,80,1.737,112,2.106,326,4.082,703,4.929]],["t/1930",[56,1.383,80,1.383,186,1.322,342,3.761,395,4.185,469,4.536]],["t/1932",[16,2.837,56,1.383,76,1.107,80,1.383,186,1.322,811,5.739]],["t/1934",[16,2.837,56,1.383,79,1.148,80,1.383,186,1.322,814,7.214]],["t/1936",[16,2.499,28,3.845,56,1.218,80,1.737,186,1.164,326,4.082,703,4.929]],["t/1938",[56,1.383,80,1.383,135,5.257,188,2.648,342,3.761,469,4.536]],["t/1940",[16,2.837,56,1.383,76,1.107,80,1.383,188,2.648,811,5.739]],["t/1942",[16,2.837,56,1.383,79,1.148,80,1.383,188,2.648,815,6.7]],["t/1944",[16,2.499,28,3.845,56,1.218,80,1.737,188,2.333,326,4.082,703,4.929]],["t/1946",[56,1.483,75,1.666,80,1.483,188,2.841,816,7.737]],["t/1948",[56,1.383,80,1.383,190,2.795,342,3.761,469,4.536,817,7.214]],["t/1950",[16,2.837,56,1.383,76,1.107,80,1.383,190,2.795,811,5.739]],["t/1952",[16,2.837,56,1.383,79,1.148,80,1.383,190,2.795,815,6.7]],["t/1954",[56,1.295,80,1.295,192,2.916,342,3.522,469,4.249,768,5.376,818,6.757]],["t/1956",[56,1.295,80,1.295,195,3.144,342,3.522,352,4.052,469,4.249,819,6.757]],["t/1958",[56,1.089,76,0.871,80,1.089,145,4.518,155,3.152,195,2.642,290,5.274,342,2.96,352,3.405,469,3.571]],["t/1960",[56,1.089,79,0.904,80,1.089,145,4.518,155,3.152,195,2.642,342,2.96,352,3.405,469,3.571,820,5.678]],["t/1962",[21,4.017,56,1.295,66,4.206,75,1.455,80,1.295,342,3.522,469,4.249]],["t/1964",[56,1.383,80,1.383,84,3.342,205,3.658,348,4.743,584,5.907]],["t/1966",[56,1.483,80,1.483,82,3.303,83,3.291,263,4.294]],["t/1970",[44,4.769,76,1.187,79,1.231,172,4.057,622,5.638]],["t/1972",[39,4.371,76,1.334,79,0.955,172,3.145,467,4.771,622,4.371,636,4.771,821,5.289]],["t/1974",[62,4.447,66,4.491,79,1.576,90,4.061,492,4.635]],["t/1975",[2,2.613,3,5.54,79,1.231,80,1.483,492,4.971]],["t/1976",[76,1.037,79,1.075,80,1.295,90,3.804,240,4.838,618,5.018,822,5.533]],["t/1978",[19,3.352,79,1.383,80,1.15,90,3.376,139,4.16,141,5.079,240,4.294,618,4.454]],["t/1980",[53,5.003,75,1.796,79,1.328,823,6.831]],["t/1984",[44,4.769,76,1.187,79,1.231,172,4.057,622,5.638]],["t/1986",[39,4.371,76,1.334,79,0.955,172,3.145,467,4.771,622,4.371,636,4.771,821,5.289]],["t/1988",[62,4.447,66,4.491,79,1.576,90,4.061,492,4.635]],["t/1989",[2,2.613,3,5.54,79,1.231,80,1.483,492,4.971]],["t/1990",[76,1.037,79,1.075,80,1.295,90,3.804,240,4.838,618,5.018,822,5.533]],["t/1992",[53,5.003,75,1.796,79,1.328,823,6.831]],["t/1994",[56,1.599,79,1.328,150,5.877,824,7.357]],["t/1997",[76,1.187,80,1.483,169,4.724,353,4.42,359,4.724]],["t/1999",[79,1.231,80,1.483,178,5.367,359,4.724,590,5.29]],["t/2001",[80,1.898,178,5.004,359,4.405,590,4.932,825,7.214]],["t/2003",[75,1.455,80,1.295,155,3.75,178,4.687,359,5.778,590,4.62]],["t/2007",[44,4.769,76,1.187,79,1.231,172,4.057,622,5.638]],["t/2009",[39,4.371,76,1.334,79,0.955,172,3.145,467,4.771,622,4.371,636,4.771,821,5.289]],["t/2011",[62,4.447,66,4.491,79,1.576,90,4.061,492,4.635]],["t/2012",[2,2.613,3,5.54,79,1.231,80,1.483,492,4.971]],["t/2013",[76,1.037,79,1.075,80,1.295,90,3.804,240,4.838,618,5.018,822,5.533]],["t/2015",[53,5.003,75,1.796,79,1.328,823,6.831]],["t/2017",[56,1.599,79,1.328,150,5.877,824,7.357]],["t/2020",[2,2.613,6,4.971,15,3.554,76,1.594]],["t/2022",[2,2.613,15,3.554,76,1.187,79,1.231,169,4.724]],["t/2024",[15,3.554,67,5.638,76,1.187,80,1.483,169,4.724]],["t/2026",[15,3.104,44,4.165,75,1.455,76,1.037,481,5.722,514,4.165,826,5.533]],["t/2028",[15,3.104,44,4.165,56,1.295,76,1.037,155,3.75,514,4.165,827,6.757]],["t/2030",[11,5.877,15,3.832,40,2.152,76,1.28]],["t/2032",[15,3.314,76,1.107,104,6.362,109,2.342,169,4.405,828,7.214]],["t/2034",[15,3.314,76,1.107,112,2.391,269,4.121,341,4.803,342,3.761]],["t/2036",[76,1.28,186,1.529,269,4.765,621,5.973]],["t/2038",[2,2.613,15,3.554,76,1.187,157,5.218,188,2.841]],["t/2040",[76,1.187,190,2.997,353,4.42,380,6.823,829,6.552]],["t/2042",[15,3.554,76,1.187,192,3.339,428,5.746,830,7.737]],["t/2044",[15,3.314,44,4.447,53,4.326,76,1.107,195,3.356,831,6.7]],["t/2046",[15,3.104,76,1.037,153,3.214,412,5.722,627,5.376,831,6.276,832,6.757]],["t/2048",[15,2.919,44,3.917,53,3.811,76,0.975,84,2.944,481,5.381,826,5.204,833,6.355]],["t/2050",[15,3.104,44,4.165,53,4.052,76,1.037,263,3.75,412,5.722,834,6.757]],["t/2052",[15,3.554,76,1.187,207,5.866,583,3.714,835,7.737]],["t/2054",[67,5.638,76,1.187,180,6.552,491,3.882,836,7.186]],["t/2056",[15,3.554,76,1.187,108,4.324,397,3.389,546,6.552]],["t/2058",[15,2.755,61,4.652,76,0.92,169,3.662,414,3.376,514,3.697,638,5.079,837,5.57,838,5.57]],["t/2060",[76,1.037,158,5.018,169,4.126,494,4.687,563,3.804,638,5.722,839,5.959]],["t/2062",[8,4.052,67,4.924,76,1.037,180,5.722,349,3.7,470,5.376,840,6.757]],["t/2064",[76,1.187,238,4.265,468,4.355,621,5.54,841,7.737]],["t/2068",[15,3.314,76,1.107,188,2.648,341,4.803,342,3.761,842,4.405]],["t/2070",[79,1.44,188,3.322,842,5.526]],["t/2072",[80,1.599,188,3.063,842,5.094,843,7.065]],["t/2074",[2,2.613,6,4.971,15,3.554,75,1.666,188,2.841]],["t/2078",[76,1.389,109,2.938,842,5.526]],["t/2080",[79,1.328,109,2.709,842,5.094,843,7.065]],["t/2082",[2,2.436,5,4.491,15,3.314,80,1.383,109,2.342,842,4.405]],["t/2084",[29,3.585,75,1.455,109,2.194,175,4.341,842,4.126,844,6.757,845,5.959]],["t/2086",[29,3.585,56,1.295,109,2.194,189,4.443,313,5.959,522,5.123,846,5.959]],["t/2089",[8,4.052,15,3.104,76,1.037,195,3.144,341,4.498,342,3.522,847,6.757]],["t/2091",[8,3.811,15,2.919,79,1.011,195,2.957,341,4.23,342,3.313,812,5.604,848,6.355]],["t/2093",[8,4.326,15,3.314,80,1.383,195,3.356,341,4.803,342,3.761]],["t/2095",[75,1.796,195,3.881,849,7.357,850,7.748]],["t/2097",[8,4.326,15,3.314,56,1.383,195,3.356,851,7.214,852,6.7]],["t/2099",[8,3.811,40,1.639,69,3.352,155,3.527,195,2.957,198,4.818,569,5.381,852,5.902]],["t/2102",[15,3.104,76,1.037,79,1.075,493,3.75,494,4.687,495,4.924,496,4.924]],["t/2104",[15,3.314,79,1.576,493,4.004,495,5.257,496,5.257]],["t/2106",[15,2.919,79,1.011,80,1.218,493,3.527,495,4.631,496,4.631,513,4.408,572,4.72]],["t/2108",[15,3.554,75,1.666,79,1.231,163,4.453,493,4.294]],["t/2110",[15,3.314,56,1.383,79,1.148,163,4.152,493,4.004,513,5.004]],["t/2112",[15,3.314,40,1.861,79,1.148,163,4.152,169,4.405,547,5.47]],["t/2114",[5,4.491,15,3.314,79,1.148,109,2.342,321,3.287,322,4.218]],["t/2116",[15,3.314,79,1.148,112,2.391,321,3.287,322,4.218,513,5.004]],["t/2118",[5,4.206,46,5.241,79,1.075,172,3.543,186,1.238,321,3.078,322,3.951]],["t/2120",[46,5.241,79,1.075,172,3.543,188,2.481,321,3.078,322,3.951,513,4.687]],["t/2122",[15,3.104,79,1.075,155,3.75,190,2.618,451,4.687,493,3.75,513,4.687]],["t/2124",[15,3.314,79,1.148,192,3.113,209,4.687,493,4.004,534,6.362]],["t/2126",[15,3.104,79,1.075,163,3.889,195,3.144,493,3.75,513,4.687,533,5.959]],["t/2128",[15,3.314,79,1.148,153,3.431,281,4.491,493,4.004,513,5.004]],["t/2131",[76,1.28,102,6.196,153,3.968,199,5.554]],["t/2133",[79,1.231,101,6.336,102,5.746,153,3.68,199,5.151]],["t/2135",[46,4.929,80,1.218,102,6.729,153,3.023,451,4.408,853,6.355,854,6.355]],["t/2137",[31,5.123,32,4.687,75,1.455,101,5.533,102,5.018,153,3.214,745,5.959]],["t/2139",[56,1.483,102,5.746,153,3.68,359,4.724,855,7.186]],["t/2141",[19,3.777,27,3.725,40,1.743,102,5.018,153,3.214,359,4.126,855,6.276]],["t/2143",[102,5.018,108,3.777,109,2.194,153,3.214,174,4.687,359,4.126,856,6.757]],["t/2146",[76,1.107,112,2.391,205,3.658,381,5.004,857,6.362,858,7.214]],["t/2148",[79,1.148,112,2.391,205,3.658,381,5.004,857,6.362,859,7.214]],["t/2150",[26,5.866,29,4.105,80,1.483,112,2.564,381,5.367]],["t/2152",[15,3.314,75,1.553,112,2.391,381,5.004,836,6.7,860,6.7]],["t/2154",[15,3.314,26,5.47,56,1.383,112,2.391,381,5.004,861,7.214]],["t/2157",[76,1.187,186,1.418,333,5.087,372,5.45,551,5.746]],["t/2159",[79,1.328,186,1.529,372,5.877,862,8.342]],["t/2161",[80,1.599,186,1.529,551,6.196,768,6.637]],["t/2164",[56,1.483,76,1.187,172,4.057,173,4.971,299,5.218]],["t/2166",[56,1.483,79,1.231,141,6.552,299,5.218,863,7.737]],["t/2170",[76,1.28,88,5.877,263,4.63,343,4.63]],["t/2174",[53,4.326,76,1.107,269,4.121,583,3.463,864,5.907,865,3.53]],["t/2176",[15,3.104,79,1.075,549,4.924,583,3.244,790,5.722,864,5.533,865,3.306]],["t/2178",[15,3.832,80,1.599,583,4.005,865,4.082]],["t/2181",[21,3.778,66,3.956,76,0.975,172,3.332,173,4.082,190,2.462,373,5.381,580,4.818]],["t/2183",[79,1.011,172,3.332,173,4.082,190,2.462,572,4.72,580,4.818,866,5.381,867,5.381]],["t/2185",[21,3.376,66,3.535,80,1.089,172,2.977,173,3.648,190,2.2,373,4.809,386,4.217,572,4.217,580,4.305]],["t/2187",[75,1.223,172,2.977,173,3.648,190,2.2,386,4.217,572,6.202,580,4.305,866,4.809,867,4.809]],["t/2190",[75,1.666,76,1.187,328,5.29,395,4.488,868,7.186]],["t/2192",[75,1.666,79,1.231,155,4.294,395,4.488,869,6.552]],["t/2194",[75,1.666,80,1.483,395,4.488,642,5.746,643,6.552]],["t/2196",[75,2.236,395,4.488,642,5.746,643,6.552]],["t/2198",[25,4.237,56,1.483,75,1.666,395,4.488,791,6.336]],["t/2200",[40,1.996,75,1.666,395,4.488,868,7.186,870,7.737]],["t/2203",[15,3.554,40,1.996,76,1.187,667,6.336,871,7.737]],["t/2207",[76,1.28,192,3.6,317,4.96,554,7.357]],["t/2209",[79,1.231,192,3.339,239,4.681,352,4.64,872,6.823]],["t/2211",[80,1.483,173,4.971,192,3.339,317,4.6,586,6.823]],["t/2213",[75,1.666,173,4.971,192,3.339,317,4.6,873,6.336]],["t/2215",[56,1.483,173,4.971,192,3.339,317,4.6,768,6.156]],["t/2217",[40,1.996,192,3.339,317,4.6,514,4.769,874,7.186]],["t/2219",[15,3.554,109,2.512,192,3.339,317,4.6,514,4.769]],["t/2221",[15,3.554,112,2.564,192,3.339,317,4.6,590,5.29]],["t/2223",[186,1.418,192,3.339,298,5.29,299,5.218,621,5.54]],["t/2225",[188,2.648,192,3.113,316,5.596,317,4.289,319,6.109,875,5.907]],["t/2227",[190,2.795,192,3.113,298,4.932,316,5.596,317,4.289,319,6.109]],["t/2230",[11,5.45,56,1.483,71,3.482,76,1.187,79,1.231]],["t/2232",[11,5.45,15,3.554,56,1.483,79,1.653]],["t/2234",[17,6.276,18,6.276,19,3.777,56,1.295,76,1.037,79,1.506]],["t/2236",[21,4.289,22,6.7,56,1.383,79,1.799]],["t/2238",[11,4.76,20,5.722,23,5.959,56,1.295,79,1.506,80,1.295]],["t/2240",[11,5.082,24,5.596,25,3.95,56,1.383,79,1.148,80,1.383]],["t/2242",[15,2.755,26,4.547,27,3.306,28,3.629,56,1.15,76,0.92,79,0.955,80,1.15,810,5.57]],["t/2244",[29,3.372,30,3.917,31,4.818,32,4.408,56,1.218,79,1.442,80,1.218]],["t/2246",[30,4.165,32,4.687,33,6.276,56,1.295,79,1.075,80,1.814]],["t/2248",[15,2.919,34,4.929,35,5.381,36,4.286,56,1.218,75,1.368,79,1.011,80,1.218]],["t/2250",[15,2.919,35,5.381,36,4.286,37,3.746,56,1.737,79,1.011,80,1.218]],["t/2252",[29,3.372,40,1.639,56,1.218,79,1.011,80,1.218,102,4.72,274,5.902,275,5.381]],["t/2254",[56,1.218,75,1.368,79,1.011,174,4.408,234,5.604,754,5.204,876,5.381,877,6.355]],["t/2256",[56,1.991,79,1.231,82,3.303,83,3.291]],["t/2260",[76,1.107,78,4.405,84,3.342,199,4.803,591,4.803,878,5.47]],["t/2263",[75,1.666,76,1.187,79,1.231,227,6.823,618,5.746]],["t/2265",[25,3.95,75,1.553,79,1.576,618,5.358,879,6.7]],["t/2267",[4,2.796,19,3.777,75,1.455,79,1.075,80,1.295,240,4.838,822,5.533]],["t/2268",[25,3.95,75,1.553,76,1.107,79,1.148,80,1.383,618,5.358]],["t/2270",[4,2.985,75,2.132,79,1.148,139,5.004,880,7.214]],["t/2271",[25,3.95,75,2.132,76,1.107,79,1.148,881,7.214]],["t/2273",[25,3.95,75,2.132,79,1.576,882,7.214]],["t/2275",[25,3.95,75,2.132,79,1.148,80,1.383,883,7.214]],["t/2277",[25,3.95,75,2.434,79,1.148,884,7.214]],["t/2279",[4,2.985,56,1.383,75,1.553,79,1.148,139,5.004,885,7.214]],["t/2280",[25,3.95,56,1.383,75,1.553,76,1.107,79,1.148,886,7.214]],["t/2282",[25,3.95,56,1.383,75,1.553,79,1.576,887,7.214]],["t/2284",[2,2.146,5,3.956,40,1.639,75,1.368,79,1.011,225,3.352,269,3.63,618,4.72]],["t/2286",[75,1.666,79,1.231,82,3.303,83,3.291,109,2.512]],["t/2289",[40,1.996,71,3.482,76,1.187,79,1.231,888,7.737]],["t/2291",[1,6.823,2,2.613,40,1.996,79,1.653]],["t/2293",[3,5.54,4,3.202,40,1.996,79,1.231,80,1.483]],["t/2295",[5,4.206,6,4.341,7,5.959,40,1.743,76,1.037,79,1.075,80,1.295]],["t/2297",[40,1.743,44,4.165,69,3.564,75,1.455,79,1.075,889,5.959,890,5.959]],["t/2299",[40,1.996,56,1.483,79,1.231,82,3.303,83,3.291]],["t/2302",[76,1.28,85,5.246,891,5.973,892,7.357]],["t/2304",[16,2.837,79,1.148,239,4.365,891,5.166,892,6.362,893,5.907]],["t/2306",[80,1.483,241,5.45,891,5.54,892,6.823,893,6.336]],["t/2308",[75,1.455,215,5.722,891,4.838,893,5.533,894,5.722,895,6.757,896,6.757]],["t/2310",[75,1.666,76,1.187,584,6.336,891,5.54,897,7.186]],["t/2312",[4,3.202,75,1.666,79,1.231,302,6.823,891,5.54]],["t/2314",[75,1.553,80,1.383,205,3.658,239,4.365,551,5.358,891,5.166]],["t/2316",[75,2.037,205,3.426,348,4.443,891,4.838,897,6.276,898,6.757]],["t/2318",[16,3.043,56,1.483,75,1.666,891,5.54,899,7.737]],["t/2320",[56,1.383,213,6.362,601,3.513,893,5.907,894,6.109,900,7.214]],["t/2322",[40,2.152,82,3.561,83,3.549,891,5.973]],["t/2325",[76,1.107,160,5.257,422,5.739,532,3.782,799,6.109,901,6.7]],["t/2327",[79,1.231,160,5.638,422,6.156,532,4.057,879,7.186]],["t/2329",[4,3.452,80,1.599,89,4.453,532,4.374]],["t/2330",[16,2.837,76,1.107,80,1.383,532,3.782,902,7.214,903,7.214]],["t/2332",[79,1.231,80,1.483,422,6.156,532,4.057,680,7.186]],["t/2334",[80,1.898,422,5.739,532,3.782,904,7.214,905,6.7]],["t/2336",[75,1.796,82,3.561,83,3.549,532,4.374]],["t/2340",[76,1.28,85,5.246,152,5.142,468,4.696]],["t/2342",[71,3.482,79,1.231,209,5.027,468,4.355,842,4.724]],["t/2344",[80,1.599,468,4.696,616,5.246,906,8.342]],["t/2346",[4,3.452,75,1.796,89,4.453,468,4.696]],["t/2347",[15,3.314,75,1.553,76,1.107,169,4.405,468,4.061,842,4.405]],["t/2349",[75,1.666,79,1.231,169,4.724,468,4.355,842,4.724]],["t/2351",[75,1.553,80,1.383,328,4.932,468,4.061,842,4.405,843,6.109]],["t/2353",[2,2.282,75,2.037,205,3.426,348,4.443,468,3.804,842,4.126]],["t/2355",[56,1.599,95,5.973,468,4.696,531,7.357]],["t/2356",[56,1.295,76,1.037,96,3.426,341,4.498,342,3.522,468,3.804,842,4.126]],["t/2358",[56,1.089,79,0.904,175,5.365,189,3.734,207,4.305,468,3.196,842,3.467,845,5.008,907,5.678]],["t/2360",[56,1.483,80,1.483,313,6.823,468,4.355,522,5.866]],["t/2362",[56,1.383,75,1.553,236,6.362,391,5.47,468,4.061,908,7.214]],["t/2364",[56,1.737,310,5.604,311,5.604,468,3.577,842,3.88,909,5.902,910,6.355]],["t/2366",[40,1.861,56,1.383,270,5.358,468,4.061,911,7.214,912,7.214]],["t/2368",[56,1.483,109,2.512,270,5.746,468,4.355,913,6.823]],["t/2370",[56,1.383,112,2.391,194,4.635,235,4.289,468,4.061,914,6.7]],["t/2372",[56,1.483,186,1.418,468,4.355,915,7.737,916,7.737]],["t/2374",[56,1.295,175,4.341,188,2.481,281,4.206,391,5.123,468,3.804,842,4.126]],["t/2376",[56,1.15,169,3.662,175,3.853,190,2.323,207,4.547,235,3.566,333,3.943,468,3.376,845,5.289]],["t/2378",[56,1.15,155,3.329,192,2.588,329,4.652,468,3.376,762,5.57,842,3.662,917,5.997,918,5.57]],["t/2380",[56,1.218,69,3.352,155,3.527,195,2.957,468,3.577,842,3.88,919,6.355,920,6.355]],["t/2382",[56,1.295,153,3.214,395,3.92,468,3.804,842,4.126,843,5.722,921,6.757]],["t/2384",[40,1.547,235,3.566,463,4.652,468,3.376,555,4.771,556,4.771,842,3.662,922,5.997,923,5.997]],["t/2386",[109,1.844,152,5.148,468,3.196,924,5.678,925,5.678,926,5.678,927,4.809,928,5.678,929,5.678]],["t/2388",[82,3.561,83,3.549,112,2.765,468,4.696]],["t/2392",[71,3.482,76,1.187,297,2.738,316,6.001,317,4.6]],["t/2394",[79,1.328,89,4.453,239,5.047,297,2.952]],["t/2396",[4,2.985,16,2.837,80,1.383,297,2.553,930,7.214,931,7.214]],["t/2397",[76,1.107,80,1.383,281,4.491,297,2.553,352,4.326,522,5.47]],["t/2399",[2,2.436,79,1.148,80,1.383,108,4.032,297,2.553,317,4.289]],["t/2401",[53,4.326,80,1.898,158,5.358,297,2.553,352,4.326]],["t/2403",[75,1.553,80,1.383,297,2.553,352,4.326,872,6.362,932,7.214]],["t/2405",[16,3.043,56,1.483,80,1.483,297,2.738,933,6.156]],["t/2407",[4,3.202,16,3.043,75,1.666,297,2.738,875,6.336]],["t/2408",[75,1.553,76,1.107,297,2.553,352,4.326,934,7.214,935,7.214]],["t/2410",[2,2.436,75,1.553,79,1.148,108,4.032,297,2.553,317,4.289]],["t/2412",[53,4.326,75,1.553,80,1.383,158,5.358,297,2.553,352,4.326]],["t/2414",[16,3.043,75,2.236,297,2.738,933,6.156]],["t/2416",[4,3.202,56,1.483,297,2.738,298,5.29,299,5.218]],["t/2417",[56,1.383,76,1.107,85,4.536,297,2.553,298,4.932,299,4.865]],["t/2419",[56,1.383,79,1.148,88,5.082,297,2.553,298,4.932,299,4.865]],["t/2421",[56,1.295,80,1.295,199,4.498,297,2.391,298,4.62,299,4.557,314,5.959]],["t/2423",[56,1.483,75,1.666,297,2.738,307,6.823,308,7.186]],["t/2425",[4,2.985,56,1.898,297,2.553,298,4.932,299,4.865]],["t/2427",[4,2.796,40,1.743,56,1.295,283,6.276,297,2.391,307,5.959,936,6.757]],["t/2429",[2,2.436,56,1.383,108,4.032,109,2.342,297,2.553,317,4.289]],["t/2431",[53,4.326,56,1.383,112,2.391,158,5.358,297,2.553,352,4.326]],["t/2433",[16,3.043,56,1.483,186,1.418,297,2.738,933,6.156]],["t/2435",[40,1.861,96,3.658,297,2.553,352,4.326,522,5.47,937,7.214]],["t/2437",[16,2.657,40,1.743,76,1.037,95,4.838,96,3.426,297,2.391,875,5.533]],["t/2439",[40,1.743,79,1.075,95,4.838,96,3.426,297,2.391,298,4.62,299,4.557]],["t/2441",[109,2.709,150,5.877,297,2.952,933,6.637]],["t/2443",[28,4.681,76,1.187,109,2.512,297,2.738,938,6.552]],["t/2445",[112,2.564,140,4.488,297,2.738,309,5.151,938,6.552]],["t/2447",[76,1.187,112,2.564,297,2.738,317,4.6,554,6.823]],["t/2449",[79,1.148,112,2.391,239,4.365,297,2.553,352,4.326,872,6.362]],["t/2451",[80,1.383,112,2.391,173,4.635,297,2.553,317,4.289,586,6.362]],["t/2453",[75,1.553,112,2.391,173,4.635,297,2.553,317,4.289,873,5.907]],["t/2455",[56,1.383,112,2.391,173,4.635,297,2.553,317,4.289,768,5.739]],["t/2457",[40,1.861,112,2.391,297,2.553,317,4.289,514,4.447,874,6.7]],["t/2459",[15,3.314,109,2.342,112,2.391,297,2.553,317,4.289,514,4.447]],["t/2461",[15,3.314,112,3.282,297,2.553,317,4.289,590,4.932]],["t/2463",[112,2.391,186,1.322,297,2.553,298,4.932,299,4.865,621,5.166]],["t/2465",[16,2.837,186,1.322,297,2.553,352,4.326,939,7.214,940,6.362]],["t/2467",[16,2.657,76,1.037,186,1.238,297,2.391,309,4.498,869,5.722,938,5.722]],["t/2469",[16,3.043,79,1.231,186,1.418,297,2.738,933,6.156]],["t/2471",[188,2.841,194,4.971,297,2.738,317,4.6,395,4.488]],["t/2473",[19,3.777,89,3.607,169,4.126,190,2.618,297,2.391,317,4.017,621,4.838]],["t/2475",[19,3.777,76,1.037,140,3.92,190,2.618,297,2.391,309,4.498,938,5.722]],["t/2477",[16,3.043,79,1.231,190,2.997,297,2.738,933,6.156]],["t/2479",[4,3.202,19,4.324,192,3.339,297,2.738,319,6.552]],["t/2481",[16,2.837,76,1.107,192,3.113,297,2.553,352,4.326,875,5.907]],["t/2483",[16,2.657,79,1.075,192,2.916,297,2.391,298,4.62,299,4.557,352,4.052]],["t/2485",[195,3.6,297,2.738,316,6.001,317,4.6,438,7.186]],["t/2487",[76,1.107,150,5.082,175,4.635,195,3.356,297,2.553,941,7.214]],["t/2489",[29,3.828,153,3.431,297,2.553,603,4.865,635,5.739,655,6.362]],["t/2491",[82,3.561,83,3.549,84,3.865,297,2.952]],["t/2494",[71,3.247,76,1.107,79,1.148,109,2.342,152,4.447,781,5.47]],["t/2496",[79,1.506,109,2.194,152,4.165,664,5.376,781,5.123,942,6.757]],["t/2498",[61,6.001,79,1.231,80,1.483,109,2.512,341,5.151]],["t/2500",[4,3.202,75,1.666,79,1.231,89,4.13,109,2.512]],["t/2502",[56,1.295,79,1.075,109,2.194,152,4.165,198,5.123,781,5.123,943,6.757]],["t/2504",[47,5.257,48,5.257,56,1.383,76,1.107,79,1.148,109,2.342]],["t/2505",[47,4.924,48,4.924,56,1.295,79,1.506,109,2.194,419,5.533]],["t/2507",[40,1.743,79,1.075,89,3.607,109,2.194,152,4.165,177,3.777,781,5.123]],["t/2509",[40,1.861,47,5.257,48,5.257,76,1.107,79,1.148,109,2.342]],["t/2511",[40,1.743,47,4.924,48,4.924,79,1.506,109,2.194,419,5.533]],["t/2513",[79,1.231,82,3.303,83,3.291,109,3.371]],["t/2516",[76,1.28,563,4.696,944,8.342,945,8.342]],["t/2518",[79,1.328,225,4.4,269,4.765,563,4.696]],["t/2520",[4,3.452,80,1.599,89,4.453,563,4.696]],["t/2521",[2,2.613,76,1.187,80,1.483,563,4.355,946,7.186]],["t/2523",[79,1.148,80,1.383,172,3.782,563,4.061,629,6.362,947,6.7]],["t/2525",[75,1.666,140,4.488,309,5.151,563,4.355,948,7.737]],["t/2527",[4,3.452,51,5.246,56,1.599,563,4.696]],["t/2529",[4,2.985,19,4.032,56,1.383,76,1.107,140,4.185,563,4.061]],["t/2531",[4,2.985,19,4.032,56,1.383,79,1.148,410,5.166,563,4.061]],["t/2533",[4,2.796,19,3.777,28,4.088,56,1.295,80,1.295,359,4.126,563,3.804]],["t/2535",[4,2.796,19,3.777,56,1.295,75,1.455,372,4.76,395,3.92,563,3.804]],["t/2537",[56,1.991,241,5.45,563,4.355,949,7.737]],["t/2539",[8,4.326,40,1.861,172,3.782,381,5.004,563,4.061,950,7.214]],["t/2541",[8,3.596,19,3.352,40,1.547,76,0.92,172,3.145,381,4.16,563,3.376,629,5.289,947,5.57]],["t/2543",[109,2.709,381,5.787,403,5.973,563,4.696]],["t/2545",[16,2.837,76,1.107,109,2.342,238,3.977,563,4.061,764,5.739]],["t/2546",[16,3.043,79,1.231,91,6.552,109,2.512,563,4.355]],["t/2548",[31,4.818,37,3.746,80,1.218,109,2.063,381,4.408,403,4.55,563,3.577,823,5.204]],["t/2550",[4,2.985,16,2.837,21,4.289,66,4.491,112,2.391,563,4.061]],["t/2552",[2,2.817,186,1.529,563,4.696,946,7.748]],["t/2554",[71,3.041,188,2.481,235,4.017,273,5.959,403,4.838,563,3.804,951,5.959]],["t/2556",[152,4.165,190,2.618,205,3.426,239,4.088,321,3.078,381,4.687,563,3.804]],["t/2558",[192,3.339,563,4.355,643,6.552,860,7.186,952,7.186]],["t/2560",[82,3.561,83,3.549,195,3.881,563,4.696]],["t/2563",[56,1.991,71,3.482,76,1.187,771,6.001]],["t/2565",[56,1.991,79,1.231,88,5.45,771,6.001]],["t/2566",[27,3.306,56,1.666,76,0.92,79,0.955,135,4.371,387,3.202,514,3.697,953,5.997]],["t/2568",[27,3.503,56,1.737,79,1.442,347,4.178,508,4.129,514,3.917]],["t/2570",[56,1.737,79,1.011,80,1.218,281,3.956,347,4.178,699,4.818,771,4.929]],["t/2572",[56,1.737,75,1.368,79,1.011,347,4.178,596,5.902,699,4.818,771,4.929]],["t/2574",[56,1.991,80,1.483,96,3.923,771,6.001]],["t/2576",[7,5.604,16,2.499,23,5.604,56,1.737,76,0.975,80,1.218,954,5.381]],["t/2578",[16,2.499,56,1.737,79,1.011,80,1.218,140,3.686,954,5.381,955,4.818]],["t/2580",[2,2.146,56,1.737,80,1.737,205,3.222,238,3.503,348,4.178]],["t/2582",[56,1.991,75,1.666,145,6.156,771,6.001]],["t/2584",[21,4.017,56,2.093,66,4.206,269,3.86,621,4.838]],["t/2586",[16,2.837,56,2.167,76,1.107,149,6.109]],["t/2588",[11,4.76,16,2.657,56,2.093,79,1.075,956,6.757]],["t/2590",[40,2.152,56,2.092,640,7.357]],["t/2592",[56,1.898,109,2.342,205,3.658,348,4.743,584,5.907]],["t/2594",[56,1.991,82,3.303,83,3.291,112,2.564]],["t/2598",[71,3.482,76,1.187,80,1.483,188,2.841,957,7.186]],["t/2600",[79,1.231,80,1.483,89,4.13,188,2.841,339,5.367]],["t/2602",[76,1.037,79,1.075,80,1.295,188,2.481,225,3.564,269,3.86,957,6.276]],["t/2604",[3,5.54,4,3.202,80,1.991,188,2.841]],["t/2606",[51,4.536,76,1.107,80,1.898,88,5.082,188,2.648]],["t/2608",[15,3.104,79,1.075,80,1.814,169,4.126,188,2.481,958,6.757]],["t/2610",[75,1.666,80,1.483,82,3.303,83,3.291,188,2.841]],["t/2614",[71,3.482,76,1.187,249,6.336,758,6.156,959,4.453]],["t/2616",[76,1.52,249,5.907,355,6.109,758,5.739,959,4.152]],["t/2618",[79,1.328,959,4.802,960,7.748,961,8.342]],["t/2620",[80,1.383,89,3.851,249,5.907,758,5.739,767,5.907,959,4.152]],["t/2622",[69,3.805,76,1.107,80,1.383,440,5.739,758,5.739,959,4.152]],["t/2624",[2,2.146,16,2.499,79,1.011,80,1.218,90,3.577,959,3.658,960,5.902,962,5.604]],["t/2626",[75,1.666,249,6.336,276,5.866,758,6.156,959,4.453]],["t/2628",[56,1.483,71,3.482,959,4.453,963,7.737,964,7.737]],["t/2630",[40,2.152,82,3.561,83,3.549,959,4.802]],["t/2634",[45,5.746,56,1.483,76,1.187,79,1.231,276,5.866]],["t/2636",[38,4.341,42,5.533,56,1.295,76,1.452,79,1.075,965,6.757]],["t/2638",[8,4.052,56,1.295,76,1.037,79,1.506,684,5.722,685,5.722]],["t/2640",[45,5.018,56,1.295,62,4.165,76,1.037,79,1.075,80,1.295,448,5.533]],["t/2642",[56,1.218,75,1.368,76,0.975,79,1.011,204,5.381,605,5.604,966,5.902,967,5.902]],["t/2645",[34,5.241,62,4.165,71,3.041,76,1.037,79,1.075,130,4.443,186,1.238]],["t/2647",[2,2.613,79,1.653,89,4.13,186,1.418]],["t/2648",[62,3.917,76,0.975,79,1.442,130,4.178,186,1.164,253,5.204,707,5.381]],["t/2650",[2,2.146,34,4.929,62,3.917,79,1.681,186,1.164,282,4.929]],["t/2652",[2,2.025,19,3.352,47,4.371,48,4.371,79,1.383,80,1.15,186,1.099,282,4.652]],["t/2654",[38,4.082,75,1.368,79,1.442,177,3.552,186,1.164,280,4.345,968,6.355]],["t/2656",[47,4.631,48,4.631,62,3.917,79,1.011,80,1.218,186,1.164,448,5.204,688,5.902]],["t/2658",[75,1.666,79,1.231,82,3.303,83,3.291,186,1.418]],["t/2661",[45,5.746,56,1.483,76,1.187,79,1.231,276,5.866]],["t/2663",[38,4.341,42,5.533,56,1.295,76,1.452,79,1.075,969,6.276]],["t/2665",[8,4.052,56,1.295,76,1.037,79,1.506,684,5.722,685,5.722]],["t/2667",[45,5.018,56,1.295,62,4.165,76,1.037,79,1.075,80,1.295,448,5.533]],["t/2669",[8,3.811,56,1.218,75,1.368,76,0.975,79,1.011,139,4.408,179,4.23,240,4.55]],["t/2671",[53,3.596,56,1.666,76,0.92,79,0.955,622,4.371,684,5.079,685,5.079,970,5.997]],["t/2673",[40,1.639,56,1.218,76,0.975,79,1.011,240,4.55,592,5.381,754,5.204,822,5.204]],["t/2675",[56,1.218,76,0.975,79,1.011,109,2.063,204,5.381,605,5.604,966,5.902,967,5.902]],["t/2681",[76,1.28,169,5.094,195,3.881,971,7.357]],["t/2683",[51,5.246,79,1.328,195,3.881,218,7.748]],["t/2685",[4,3.452,80,1.599,195,3.881,972,8.342]],["t/2687",[76,1.187,80,1.483,195,3.6,300,6.552,301,6.336]],["t/2689",[79,1.148,80,1.383,96,3.658,195,3.356,253,5.907,971,6.362]],["t/2691",[16,2.837,21,4.289,66,4.491,80,1.898,195,3.356]],["t/2693",[75,1.666,80,1.483,195,3.6,446,6.156,973,7.737]],["t/2695",[2,2.613,5,4.816,6,4.971,75,1.666,195,3.6]],["t/2697",[56,1.599,82,3.561,83,3.549,195,3.881]],["t/2700",[75,1.666,76,1.187,79,1.231,85,4.865,157,5.218]],["t/2702",[2,2.613,75,1.666,79,1.653,325,7.186]],["t/2704",[4,3.202,75,1.666,79,1.231,80,1.483,157,5.218]],["t/2706",[2,2.146,75,1.368,76,0.975,79,1.011,80,1.218,108,3.552,151,4.818,152,3.917]],["t/2708",[75,1.291,79,1.383,80,1.15,140,3.479,155,3.329,172,3.145,974,5.289,975,5.289]],["t/2710",[75,1.455,79,1.075,80,1.814,225,3.564,269,3.86,974,5.959]],["t/2712",[75,2.037,79,1.075,80,1.295,108,3.777,174,4.687,974,5.959]],["t/2714",[16,2.499,56,1.218,75,1.368,79,1.011,80,1.218,89,3.392,174,4.408,280,4.345]],["t/2716",[75,2.132,79,1.148,150,5.082,157,4.865,616,4.536]],["t/2718",[2,2.436,56,1.383,75,1.553,79,1.148,96,3.658,157,4.865]],["t/2720",[56,1.218,75,1.368,76,0.975,79,1.011,157,4.286,284,5.056,976,6.355,977,6.355]],["t/2722",[40,1.996,75,1.666,79,1.231,150,5.45,978,7.737]],["t/2724",[75,1.666,79,1.231,109,2.512,157,5.218,359,4.724]],["t/2726",[2,2.436,75,1.553,79,1.148,112,2.391,157,4.865,979,7.214]],["t/2728",[75,1.368,79,1.011,157,4.286,177,3.552,186,1.164,291,5.902,292,5.902,293,5.902]],["t/2730",[71,2.86,75,1.368,76,0.975,79,1.011,186,1.164,235,3.778,980,6.355,981,4.476]],["t/2732",[75,1.666,79,1.231,157,5.218,188,2.841,294,6.156]],["t/2734",[75,1.455,79,1.075,96,3.426,175,4.341,190,2.618,971,5.959,982,6.757]],["t/2736",[75,1.666,79,1.231,82,3.303,83,3.291,192,3.339]],["t/2739",[40,1.996,71,3.482,76,1.187,601,3.767,983,6.336]],["t/2741",[38,4.971,40,1.996,79,1.231,89,4.13,601,3.767]],["t/2743",[40,2.441,80,1.295,601,3.29,636,5.376,638,5.722,889,5.959]],["t/2744",[8,3.233,40,1.391,76,0.827,80,1.034,241,3.798,470,4.289,494,5.575,544,2.576,601,2.625,955,4.088]],["t/2746",[8,3.596,40,1.547,79,0.955,80,1.15,241,4.225,470,4.771,544,2.866,601,2.92,955,4.547]],["t/2748",[40,1.861,80,1.898,440,5.739,601,3.513,636,5.739]],["t/2750",[2,2.146,16,2.499,40,1.639,53,3.811,75,1.368,80,1.218,152,3.917,601,3.094]],["t/2752",[40,1.861,75,1.553,88,5.082,343,4.004,601,3.513,983,5.907]],["t/2753",[40,1.639,75,1.368,76,0.975,250,4.929,441,5.056,601,3.094,642,4.72,984,5.902]],["t/2755",[40,1.861,75,1.553,79,1.148,601,3.513,985,6.362,986,7.214]],["t/2757",[40,1.743,75,1.455,80,1.295,108,3.777,134,5.533,428,5.018,601,3.29]],["t/2759",[40,1.861,53,4.326,75,2.132,537,6.7,601,3.513]],["t/2761",[40,1.639,56,1.218,75,1.368,241,4.476,601,3.094,987,5.902,988,6.355,989,6.355]],["t/2763",[40,2.554,75,1.553,327,5.739,343,4.004,601,3.513]],["t/2765",[40,1.996,56,1.483,82,3.303,83,3.291,601,3.767]],["t/2773",[76,1.107,79,1.148,80,1.383,227,6.362,954,6.109,990,7.214]],["t/2775",[79,1.576,80,1.383,248,5.358,339,5.004,492,4.635]],["t/2777",[79,1.231,80,1.991,82,3.303,83,3.291]],["t/2781",[71,3.755,76,1.28,991,5.973,992,6.637]],["t/2783",[4,3.452,79,1.328,89,4.453,991,5.973]],["t/2785",[76,0.975,79,1.011,225,3.352,269,3.63,991,4.55,992,5.056,993,5.604,994,5.902]],["t/2787",[8,3.811,79,1.442,172,3.332,991,4.55,995,6.355,996,6.355,997,6.355]],["t/2789",[4,2.985,79,1.148,80,1.383,991,5.166,992,5.739,994,6.7]],["t/2791",[75,1.553,79,1.148,592,6.109,991,5.166,992,5.739,993,6.362]],["t/2793",[80,1.383,96,3.658,194,4.635,991,5.166,992,5.739,993,6.362]],["t/2795",[76,1.107,80,1.383,96,3.658,826,5.907,991,5.166,998,7.214]],["t/2797",[79,1.011,80,1.218,96,3.222,225,3.352,341,4.23,342,3.313,991,4.55,992,5.056]],["t/2799",[75,1.796,82,3.561,83,3.549,991,5.973]],["t/2802",[71,3.247,76,1.107,269,4.121,437,4.218,999,7.214,1000,7.214]],["t/2804",[16,3.043,79,1.231,437,4.524,1001,7.186,1002,7.186]],["t/2806",[76,1.187,79,1.231,147,6.156,148,6.552,437,4.524]],["t/2808",[16,2.837,80,1.383,437,4.218,955,5.47,1003,5.907,1004,6.362]],["t/2810",[76,1.037,80,1.295,89,3.607,172,3.543,437,3.951,1003,5.533,1004,5.959]],["t/2812",[79,1.231,80,1.483,172,4.057,437,4.524,1003,6.336]],["t/2814",[80,1.991,347,5.087,437,4.524,1003,6.336]],["t/2816",[75,1.796,80,1.599,437,4.878,1005,8.342]],["t/2818",[56,1.483,80,1.483,339,5.367,437,4.524,492,4.971]],["t/2820",[40,1.996,80,1.483,225,4.081,269,4.42,437,4.524]],["t/2822",[75,1.666,239,4.681,316,6.001,317,4.6,437,4.524]],["t/2824",[16,2.837,75,1.553,76,1.107,352,4.326,437,4.218,875,5.907]],["t/2826",[16,2.657,75,1.455,79,1.075,298,4.62,299,4.557,352,4.052,437,3.951]],["t/2828",[75,1.553,80,1.383,239,4.365,343,4.004,437,4.218,940,6.362]],["t/2830",[4,3.202,21,4.6,56,1.483,66,4.816,437,4.524]],["t/2832",[40,2.152,89,4.453,437,4.878,603,5.626]],["t/2833",[16,2.837,40,1.861,76,1.107,437,4.218,1001,6.7,1002,6.7]],["t/2835",[16,2.657,40,1.743,79,1.075,437,3.951,955,5.123,1003,5.533,1004,5.959]],["t/2837",[71,3.041,78,4.126,109,2.194,235,4.017,437,3.951,603,4.557,1006,6.757]],["t/2839",[82,3.561,83,3.549,112,2.765,437,4.878]],["t/2842",[71,3.041,76,1.037,401,5.241,642,5.018,1007,4.924,1008,6.757,1009,6.276]],["t/2844",[4,3.452,79,1.328,89,4.453,1007,6.079]],["t/2845",[4,3.202,76,1.187,79,1.231,91,6.552,1007,5.638]],["t/2847",[4,3.202,79,1.653,1007,5.638,1010,7.737]],["t/2849",[4,2.985,79,1.148,80,1.383,918,6.7,1007,5.257,1011,7.214]],["t/2851",[4,2.985,11,5.082,75,1.553,79,1.148,1007,5.257,1012,7.214]],["t/2853",[16,3.043,56,1.483,79,1.231,1007,5.638,1013,7.737]],["t/2855",[16,2.837,40,1.861,79,1.148,462,5.257,1007,5.257,1014,7.214]],["t/2857",[80,1.599,82,3.561,83,3.549,1007,6.079]],["t/2861",[76,1.28,79,1.328,197,7.065,436,4.024]],["t/2863",[44,4.447,79,1.576,172,3.782,402,5.739,436,3.479]],["t/2865",[62,4.165,66,4.206,79,1.075,80,1.295,90,3.804,436,3.259,492,4.341]],["t/2867",[75,1.553,79,1.148,436,3.479,1009,6.7,1015,7.214,1016,7.214]],["t/2869",[53,4.64,56,1.483,79,1.231,436,3.732,823,6.336]],["t/2871",[40,1.861,50,5.358,79,1.148,436,3.479,650,5.739,664,5.739]],["t/2873",[2,2.146,79,1.011,109,2.063,205,3.222,348,4.178,436,3.065,1017,5.902,1018,5.902]],["t/2874",[2,2.282,5,4.206,76,1.037,79,1.075,109,2.194,436,3.259,1019,6.276]],["t/2876",[79,1.506,109,2.194,225,3.564,269,3.86,436,3.259,1020,6.757]],["t/2878",[2,2.436,79,1.148,80,1.383,96,3.658,109,2.342,436,3.479]],["t/2880",[75,1.291,79,0.955,109,1.947,139,4.16,147,4.771,436,2.893,703,4.652,1017,5.57,1018,5.57]],["t/2882",[2,2.282,56,1.295,79,1.075,109,2.194,205,3.426,348,4.443,436,3.259]],["t/2884",[69,3.564,79,1.075,112,2.24,248,5.018,436,3.259,492,4.341,514,4.165]],["t/2886",[76,1.037,79,1.075,90,3.804,112,2.24,151,5.123,152,4.165,436,3.259]],["t/2888",[79,1.506,90,3.804,96,3.426,112,2.24,139,4.687,436,3.259]],["t/2890",[44,5.148,79,0.904,80,1.089,112,1.882,402,4.518,436,2.739,535,4.65,622,4.138,1021,5.678]],["t/2892",[53,3.811,75,1.368,79,1.011,90,3.577,112,2.106,238,3.503,436,3.065,1022,6.355]],["t/2894",[56,1.383,79,1.148,112,2.391,436,3.479,1023,7.214,1024,7.214]],["t/2896",[79,1.148,186,1.322,436,3.479,1025,7.214,1026,7.214,1027,7.214]],["t/2898",[4,2.63,19,3.552,79,1.011,188,2.333,436,3.065,1028,6.355,1029,6.355,1030,6.355]],["t/2900",[76,0.975,79,1.011,90,3.577,188,2.333,205,3.222,269,3.63,348,4.178,436,3.065]],["t/2902",[53,4.64,79,1.231,190,2.997,436,3.732,1031,7.737]],["t/2904",[79,0.904,192,2.451,241,4,282,4.404,410,4.066,436,2.739,889,5.008,1032,5.678,1033,5.678,1034,5.678]],["t/2906",[79,1.231,82,3.303,83,3.291,195,3.6,436,3.732]],["t/2909",[76,1.28,85,5.246,190,3.232,1035,8.342]],["t/2911",[79,1.231,85,4.865,190,2.997,205,3.923,1036,5.45]],["t/2913",[80,1.383,190,2.795,205,3.658,239,4.365,1036,5.082,1037,6.7]],["t/2914",[16,2.499,76,0.975,80,1.218,190,2.462,321,2.895,955,4.818,1038,5.056,1039,5.902]],["t/2916",[16,2.233,79,0.904,80,1.089,190,2.2,321,2.587,579,5.008,781,6.332,955,4.305,1038,4.518]],["t/2918",[16,2.233,80,1.601,190,2.2,321,2.587,579,7.365,781,4.305,1038,4.518,1040,5.274]],["t/2920",[4,2.985,75,1.553,190,2.795,205,3.658,1036,5.082,1037,6.7]],["t/2922",[16,3.043,56,1.483,190,2.997,1038,6.156,1040,7.186]],["t/2924",[56,1.295,76,1.037,172,3.543,190,2.618,321,3.078,322,3.951,1036,4.76]],["t/2926",[56,1.218,79,1.011,190,2.462,205,3.222,225,3.352,321,2.895,322,3.716,1036,4.476]],["t/2928",[56,1.295,80,1.295,90,3.804,190,2.618,353,3.86,564,5.533,1041,5.241]],["t/2930",[56,1.218,75,1.368,172,3.332,190,2.462,363,4.476,409,4.038,451,4.408,1041,4.929]],["t/2932",[56,1.898,190,2.795,239,4.365,616,4.536,1042,7.214]],["t/2934",[40,1.861,56,1.383,190,2.795,239,4.365,616,4.536,1043,7.214]],["t/2936",[25,3.7,56,1.295,109,2.194,190,2.618,351,4.687,1044,6.276,1045,6.757]],["t/2938",[16,3.043,40,1.996,190,2.997,1038,6.156,1039,7.186]],["t/2940",[40,1.743,76,1.037,172,3.543,190,2.618,321,3.078,322,3.951,1036,4.76]],["t/2942",[40,1.639,79,1.011,190,2.462,205,3.222,225,3.352,321,2.895,322,3.716,1036,4.476]],["t/2944",[40,1.743,80,1.295,90,3.804,190,2.618,353,3.86,564,5.533,1041,5.241]],["t/2946",[40,1.639,75,1.368,172,3.332,190,2.462,363,4.476,409,4.038,451,4.408,1041,4.929]],["t/2948",[40,1.861,56,1.383,190,2.795,239,4.365,616,4.536,1046,7.214]],["t/2950",[25,3.95,40,2.554,190,2.795,330,6.7,1044,6.7]],["t/2952",[16,3.043,109,2.512,190,2.997,781,5.866,1038,6.156]],["t/2954",[76,1.037,109,2.194,172,3.543,190,2.618,321,3.078,322,3.951,1036,4.76]],["t/2956",[79,1.011,109,2.063,190,2.462,205,3.222,225,3.352,321,2.895,322,3.716,1036,4.476]],["t/2958",[80,1.295,90,3.804,109,2.194,190,2.618,353,3.86,564,5.533,1041,5.241]],["t/2960",[75,1.368,109,2.063,172,3.332,190,2.462,363,4.476,409,4.038,451,4.408,1041,4.929]],["t/2962",[56,1.383,109,2.342,190,2.795,239,4.365,616,4.536,1047,7.214]],["t/2964",[40,1.639,71,2.86,109,2.063,190,2.462,353,3.63,419,5.204,599,5.902,1048,5.902]],["t/2966",[96,3.923,112,2.564,155,4.294,190,2.997,1041,6.001]],["t/2968",[2,2.025,53,3.596,76,0.92,96,3.041,112,1.988,155,3.329,190,2.323,205,3.041,1036,4.225]],["t/2970",[79,1.148,96,3.658,112,2.391,140,4.185,190,2.795,1036,5.082]],["t/2972",[101,6.336,154,5.218,186,1.418,190,2.997,1036,5.45]],["t/2974",[82,3.561,83,3.549,188,3.063,190,3.232]],["t/2978",[2,2.817,71,3.755,76,1.675]],["t/2980",[2,2.817,76,1.28,79,1.328,108,4.663]],["t/2982",[2,2.817,76,1.28,80,1.599,267,5.193]],["t/2984",[75,1.796,76,1.28,849,7.357,850,7.748]],["t/2988",[2,2.817,71,3.755,76,1.28,79,1.328]],["t/2990",[2,2.817,79,1.737,108,4.663]],["t/2992",[2,2.817,79,1.328,80,1.599,267,5.193]],["t/2994",[4,2.985,75,1.553,79,1.148,110,5.907,276,5.47,1049,7.214]],["t/2998",[2,2.817,71,3.755,75,1.796,76,1.28]],["t/3000",[2,2.817,75,1.796,79,1.328,108,4.663]],["t/3002",[2,2.817,75,1.796,80,1.599,267,5.193]],["t/3006",[2,2.817,40,2.152,71,3.755,76,1.28]],["t/3008",[2,2.817,40,2.152,79,1.328,108,4.663]],["t/3010",[2,2.817,40,2.152,80,1.599,267,5.193]],["t/3012",[2,2.613,40,1.996,75,1.666,372,5.45,395,4.488]],["t/3014",[2,2.613,40,1.996,75,1.666,76,1.187,108,4.324]],["t/3016",[2,2.613,40,1.996,75,1.666,79,1.231,267,4.816]],["t/3020",[2,2.817,56,1.599,71,3.755,76,1.28]],["t/3022",[2,2.817,56,1.599,79,1.328,108,4.663]],["t/3024",[2,2.817,56,1.599,80,1.599,267,5.193]],["t/3028",[2,2.817,71,3.755,76,1.28,112,2.765]],["t/3030",[2,2.817,79,1.328,108,4.663,112,2.765]],["t/3032",[2,2.817,80,1.599,112,2.765,267,5.193]],["t/3036",[2,2.817,71,3.755,76,1.28,186,1.529]],["t/3038",[2,2.817,79,1.328,108,4.663,186,1.529]],["t/3040",[2,2.817,80,1.599,186,1.529,267,5.193]],["t/3044",[2,2.817,71,3.755,76,1.28,188,3.063]],["t/3046",[2,2.817,79,1.328,108,4.663,188,3.063]],["t/3048",[2,2.817,80,1.599,188,3.063,267,5.193]],["t/3052",[2,2.817,71,3.755,76,1.28,80,1.599]],["t/3054",[2,2.817,79,1.328,80,1.599,108,4.663]],["t/3056",[2,2.817,80,2.092,267,5.193]],["t/3060",[2,2.817,71,3.755,76,1.28,109,2.709]],["t/3062",[2,2.817,79,1.328,108,4.663,109,2.709]],["t/3064",[2,2.817,80,1.599,109,2.709,267,5.193]],["t/3068",[56,1.599,76,1.28,197,7.065,601,4.062]],["t/3070",[1,6.823,2,2.613,56,1.483,79,1.231,601,3.767]],["t/3072",[56,1.599,80,1.599,544,3.986,601,4.062]],["t/3074",[53,4.326,56,1.383,75,1.553,96,3.658,601,3.513,1019,6.7]],["t/3076",[56,1.814,601,3.29,603,4.557,894,5.722,983,5.533,1050,6.276]],["t/3077",[56,1.898,76,1.107,250,5.596,601,3.513,1051,7.214]],["t/3079",[56,1.737,79,1.011,601,3.094,603,4.286,894,5.381,983,5.204,1050,5.902]],["t/3081",[56,1.814,80,1.295,88,4.76,343,3.75,601,3.29,983,5.533]],["t/3083",[40,1.996,56,1.483,82,3.303,83,3.291,601,3.767]],["t/3087",[76,1.187,170,6.336,186,1.418,428,5.746,959,4.453]],["t/3089",[79,1.231,186,1.418,959,4.453,1052,6.823,1053,7.186]],["t/3091",[76,1.107,79,1.148,186,1.322,959,4.152,1052,6.362,1054,6.362]],["t/3093",[79,1.576,186,1.322,490,5.596,959,4.152,1052,6.362]],["t/3095",[79,1.231,80,1.483,186,1.418,294,6.156,959,4.453]],["t/3097",[80,1.483,186,1.418,959,4.453,1053,7.186,1055,6.823]],["t/3099",[76,1.107,80,1.383,186,1.322,959,4.152,1054,6.362,1055,6.362]],["t/3101",[79,1.148,80,1.383,186,1.322,490,5.596,959,4.152,1055,6.362]],["t/3103",[80,1.991,186,1.418,294,6.156,959,4.453]],["t/3105",[75,1.553,186,1.322,253,5.907,353,4.121,959,4.152,1056,7.214]],["t/3107",[75,1.368,76,0.975,186,1.164,490,4.929,959,3.658,1057,5.902,1058,6.355,1059,6.355]],["t/3109",[75,1.455,79,1.075,186,1.238,490,5.241,959,3.889,1060,6.757,1061,6.757]],["t/3111",[75,1.455,80,1.295,186,1.238,905,6.276,959,3.889,1057,6.276,1062,6.757]],["t/3113",[56,1.295,186,1.238,235,4.017,490,5.241,959,3.889,1054,5.959,1063,6.757]],["t/3115",[56,1.295,76,1.037,160,4.924,186,1.238,235,4.017,959,3.889,1064,5.959]],["t/3117",[56,1.089,79,0.904,186,1.04,235,3.376,264,4.404,285,4.809,345,3.152,471,5.274,476,4.809,959,3.268]],["t/3119",[56,1.089,80,1.089,186,1.04,235,3.376,264,4.404,285,4.809,459,3.535,482,5.008,515,4.809,959,3.268]],["t/3121",[6,3.853,56,1.15,75,1.291,186,1.099,235,3.566,452,4.771,959,3.452,1065,5.997,1066,5.997]],["t/3123",[56,1.814,186,1.238,235,4.017,353,3.86,959,3.889,1048,6.276]],["t/3125",[40,1.996,89,4.13,186,1.418,239,4.681,959,4.453]],["t/3127",[82,3.303,83,3.291,109,2.512,186,1.418,959,4.453]],["t/3130",[76,1.594,80,1.483,267,4.816,1067,7.737]],["t/3132",[76,1.187,79,1.231,80,1.483,82,3.303,83,3.291]],["t/3135",[76,1.28,85,5.246,506,4.276,1068,7.748]],["t/3137",[79,1.231,170,6.336,428,5.746,506,3.966,1068,7.186]],["t/3139",[71,3.755,80,1.599,279,6.831,506,4.276]],["t/3141",[76,1.107,80,1.383,210,5.907,506,3.698,1069,7.214,1070,7.214]],["t/3143",[75,1.666,225,4.081,269,4.42,279,6.336,506,3.966]],["t/3145",[56,1.383,212,4.932,279,5.907,506,3.698,681,6.7,1071,6.362]],["t/3147",[56,1.483,76,1.187,212,5.29,506,3.966,1072,7.737]],["t/3149",[56,1.599,79,1.328,506,4.276,1071,7.357]],["t/3151",[40,1.996,326,4.971,506,3.966,1071,6.823,1073,6.823]],["t/3153",[16,2.837,40,1.861,76,1.107,326,4.635,506,3.698,604,6.7]],["t/3155",[2,2.282,36,4.557,40,1.743,79,1.075,212,4.62,506,3.463,1074,6.757]],["t/3157",[2,2.146,40,1.639,80,1.218,205,3.222,225,3.352,348,4.178,506,3.257,1073,5.604]],["t/3159",[15,3.314,16,2.837,109,2.342,506,3.698,617,5.739,1073,6.362]],["t/3161",[16,2.837,21,4.289,76,1.107,109,2.342,506,3.698,1075,6.362]],["t/3163",[11,5.082,16,2.837,79,1.148,109,2.342,506,3.698,621,5.166]],["t/3165",[16,2.657,19,3.777,80,1.295,109,2.194,506,3.463,621,4.838,1076,6.757]],["t/3167",[16,2.499,21,3.778,75,1.368,109,2.063,155,3.527,506,3.257,975,5.604,1075,5.604]],["t/3169",[56,1.295,109,2.194,495,4.924,496,4.924,506,3.463,857,5.959,1075,5.959]],["t/3171",[37,4.253,112,2.391,506,3.698,893,5.907,1077,7.214,1078,7.214]],["t/3172",[37,3.984,74,5.123,76,1.037,112,2.24,506,3.463,514,4.165,981,4.76]],["t/3174",[37,4.253,79,1.148,112,2.391,506,3.698,981,5.082,1079,6.7]],["t/3176",[37,3.746,80,1.218,112,2.106,506,3.257,981,4.476,1079,5.902,1080,6.355,1081,6.355]],["t/3178",[37,3.984,75,1.455,112,2.24,281,4.206,506,3.463,981,4.76,1082,5.959]],["t/3180",[37,3.984,56,1.295,112,2.24,347,4.443,506,3.463,981,4.76,1082,5.959]],["t/3182",[37,3.984,40,1.743,112,2.24,206,4.76,215,5.722,506,3.463,981,4.76]],["t/3184",[37,3.984,109,2.194,112,2.24,206,4.76,347,4.443,506,3.463,981,4.76]],["t/3186",[37,3.984,112,3.136,206,4.76,213,5.959,506,3.463,981,4.76]],["t/3188",[96,3.658,186,1.322,506,3.698,1082,6.362,1083,7.214,1084,7.214]],["t/3190",[188,3.063,206,5.877,401,6.471,506,4.276]],["t/3191",[37,4.253,190,2.795,212,4.932,506,3.698,650,5.739,689,6.7]],["t/3192",[37,4.561,76,1.187,190,2.997,506,3.966,1085,7.737]],["t/3193",[37,4.561,79,1.231,190,2.997,506,3.966,1086,7.737]],["t/3195",[37,4.561,39,5.638,80,1.483,190,2.997,506,3.966]],["t/3196",[37,4.561,75,1.666,190,2.997,506,3.966,1087,7.737]],["t/3197",[51,5.246,88,5.877,192,3.6,506,4.276]],["t/3198",[76,1.037,192,2.916,239,4.088,372,4.76,506,3.463,1088,6.757,1089,6.757]],["t/3200",[79,1.148,192,3.113,239,4.365,248,5.358,506,3.698,1090,7.214]],["t/3202",[80,1.383,192,3.113,239,4.365,506,3.698,1091,7.214,1092,7.214]],["t/3204",[82,3.561,83,3.549,195,3.881,506,4.276]],["t/3208",[76,1.594,188,2.841,1093,6.552,1094,7.737]],["t/3210",[76,1.187,79,1.231,188,2.841,210,6.336,248,5.746]],["t/3212",[59,5.257,76,1.107,80,1.383,188,2.648,214,6.7,1095,7.214]],["t/3214",[75,1.666,76,1.187,188,2.841,339,5.367,492,4.971]],["t/3216",[56,1.483,76,1.187,188,2.841,248,5.746,1096,7.737]],["t/3217",[56,1.295,76,1.452,188,2.481,345,3.75,409,4.294,474,5.959]],["t/3219",[56,1.383,76,1.107,79,1.148,188,2.648,345,4.004,515,6.109]],["t/3221",[56,1.383,76,1.107,80,1.383,188,2.648,299,4.865,333,4.743]],["t/3223",[25,3.95,56,1.383,75,1.553,76,1.107,188,2.648,493,4.004]],["t/3225",[56,1.814,76,1.037,188,2.481,205,3.426,209,4.391,1064,5.959]],["t/3227",[40,1.743,56,1.295,76,1.037,188,2.481,241,4.76,470,5.376,615,6.276]],["t/3229",[6,4.635,56,1.383,76,1.107,109,2.342,188,2.648,1097,7.214]],["t/3231",[56,1.295,76,1.037,90,3.804,112,2.24,177,3.777,188,2.481,1098,6.276]],["t/3233",[31,5.47,56,1.383,76,1.107,186,1.322,188,2.648,490,5.596]],["t/3235",[56,1.034,76,0.827,177,4.492,188,2.951,353,3.08,1098,5.007,1099,5.391,1100,7.465]],["t/3237",[56,1.383,76,1.107,188,2.648,190,2.795,348,4.743,1101,7.214]],["t/3239",[40,1.996,76,1.187,82,3.303,83,3.291,188,2.841]],["t/3243",[642,8.095]],["t/3245",[549,7.942]],["t/3249",[71,3.482,76,1.594,188,2.841,1093,6.552]],["t/3251",[76,1.187,79,1.231,89,4.13,188,2.841,339,5.367]],["t/3253",[76,1.452,79,1.075,188,2.481,225,3.564,269,3.86,1093,5.722]],["t/3255",[3,5.54,4,3.202,76,1.187,80,1.483,188,2.841]],["t/3257",[75,1.553,76,1.107,188,2.648,267,4.491,321,3.287,343,4.004]],["t/3259",[56,1.383,76,1.107,188,2.648,267,4.491,343,4.004,1102,7.214]],["t/3260",[56,1.383,76,1.52,188,2.648,345,4.004,1103,6.362]],["t/3262",[56,1.295,76,1.037,79,1.075,188,2.481,345,3.75,409,4.294,474,5.959]],["t/3264",[56,1.383,76,1.107,80,1.383,188,2.648,345,4.004,515,6.109]],["t/3266",[56,1.483,75,1.666,76,1.187,188,2.841,1100,7.186]],["t/3268",[56,1.991,76,1.187,177,4.324,188,2.841]],["t/3270",[40,1.996,56,1.483,76,1.187,179,5.151,188,2.841]],["t/3272",[40,1.996,76,1.187,163,4.453,188,2.841,345,4.294]],["t/3274",[30,4.447,76,1.107,109,2.342,163,4.152,188,2.648,829,6.109]],["t/3276",[76,1.187,112,2.564,188,2.841,276,5.866,1104,7.737]],["t/3278",[76,1.187,82,3.303,83,3.291,186,1.418,188,2.841]],["t/3281",[76,1.28,186,1.529,297,2.952,1064,7.357]],["t/3283",[79,1.231,186,1.418,297,2.738,866,6.552,867,6.552]],["t/3285",[4,3.202,80,1.483,89,4.13,186,1.418,297,2.738]],["t/3286",[31,5.123,76,1.037,80,1.295,186,1.238,297,2.391,401,5.241,1105,6.276]],["t/3288",[25,3.95,79,1.148,80,1.383,186,1.322,297,2.553,1106,7.214]],["t/3290",[79,1.148,80,1.383,158,5.358,186,1.322,297,2.553,401,5.596]],["t/3292",[28,4.088,75,1.455,150,4.76,186,1.238,297,2.391,866,5.722,867,5.722]],["t/3293",[28,4.365,75,1.553,76,1.107,186,1.322,297,2.553,1105,6.7]],["t/3295",[28,4.365,75,1.553,79,1.148,186,1.322,297,2.553,1107,7.214]],["t/3297",[56,1.483,82,3.303,83,3.291,186,1.418,297,2.738]],["t/3300",[1108,9.889,1109,9.889]],["t/3302",[76,1.037,79,1.075,112,2.24,238,3.725,890,5.959,1110,6.757,1111,5.959]],["t/3303",[6,4.341,79,1.506,112,2.24,890,5.959,1111,5.959,1112,6.276]],["t/3304",[79,1.075,80,1.295,112,2.24,807,6.276,984,6.276,985,5.959,1113,6.757]],["t/3306",[75,1.553,79,1.148,112,2.391,951,6.362,1111,6.362,1112,6.7]],["t/3308",[56,1.483,74,5.866,79,1.231,112,2.564,1114,7.737]],["t/3310",[40,1.996,79,1.231,82,3.303,83,3.291,112,2.564]],["t/3314",[63,6.637,76,1.28,79,1.737]],["t/3316",[76,1.52,79,1.576,446,5.739,492,4.635]],["t/3318",[76,1.107,79,1.799,492,4.635,1093,6.109]],["t/3320",[38,4.971,63,6.156,79,1.865]],["t/3322",[4,3.202,63,6.156,79,1.653,80,1.483]],["t/3324",[63,6.156,75,1.666,79,1.653,177,4.324]],["t/3326",[47,5.257,48,5.257,56,1.383,79,1.576,339,5.004]],["t/3328",[40,1.547,71,2.699,79,1.383,90,3.376,235,3.566,357,4.652,952,5.57,1115,5.997]],["t/3330",[63,6.156,79,1.653,109,2.512,1116,7.737]],["t/3332",[79,1.653,82,3.303,83,3.291,112,2.564]],["t/3336",[71,3.247,75,1.553,76,1.107,601,3.513,1117,7.214,1118,6.7]],["t/3338",[75,1.291,79,0.955,90,3.376,216,4.771,601,2.92,627,4.771,635,4.771,1119,5.289,1120,5.57]],["t/3340",[75,1.368,80,1.218,216,5.056,494,4.408,601,3.094,603,4.286,635,5.056,1119,5.604]],["t/3342",[2,2.436,75,1.553,76,1.107,80,1.383,151,5.47,601,3.513]],["t/3344",[2,2.025,75,1.291,79,0.955,80,1.15,241,4.225,601,2.92,824,5.289,969,5.57,1118,5.57]],["t/3346",[75,2.236,82,3.303,83,3.291,601,3.767]],["t/3349",[71,3.482,76,1.594,128,4.13,1121,6.156]],["t/3351",[76,1.187,79,1.231,128,4.13,355,6.552,1121,6.156]],["t/3353",[76,1.187,80,1.483,128,4.13,155,4.294,1121,6.156]],["t/3355",[75,1.553,76,1.107,128,3.851,209,4.687,1121,5.739,1122,7.214]],["t/3357",[50,5.746,51,4.865,56,1.483,76,1.187,128,4.13]],["t/3358",[44,3.917,56,1.218,76,1.391,128,3.392,172,3.332,1121,5.056,1123,5.604]],["t/3359",[50,5.358,56,1.383,76,1.107,79,1.148,128,3.851,1124,6.362]],["t/3361",[56,1.383,76,1.107,80,1.383,128,3.851,130,4.743,250,5.596]],["t/3363",[56,1.295,75,1.455,76,1.037,128,3.607,130,4.443,347,4.443,1124,5.959]],["t/3364",[56,1.814,76,1.037,128,3.607,130,4.443,234,5.959,1125,6.757]],["t/3366",[40,1.743,76,1.037,128,3.607,248,5.018,339,4.687,492,4.341,1126,6.757]],["t/3368",[38,4.082,40,1.639,62,3.917,76,1.391,128,3.392,492,4.082,1123,5.604]],["t/3370",[2,2.146,40,1.639,76,0.975,79,1.011,90,3.577,128,3.392,140,3.686,203,5.902]],["t/3372",[4,2.63,40,1.639,76,0.975,80,1.218,128,3.392,248,4.72,492,4.082,927,5.381]],["t/3374",[76,1.107,109,2.342,128,3.851,238,3.977,572,5.358,1124,6.362]],["t/3376",[21,4.017,66,4.206,76,1.037,89,3.607,112,2.24,128,3.607,767,5.533]],["t/3378",[76,1.282,112,1.882,128,3.031,140,3.294,173,3.648,239,3.436,616,3.571,664,4.518,1127,5.678]],["t/3380",[19,3.552,76,0.975,79,1.011,112,2.106,128,3.392,130,4.178,140,3.686,146,5.604]],["t/3382",[76,1.107,78,4.405,80,1.383,112,2.391,128,3.851,189,4.743]],["t/3384",[21,3.566,66,3.733,71,2.699,75,1.291,76,0.92,112,1.988,128,3.202,580,4.547,839,5.289]],["t/3386",[56,1.295,76,1.037,112,2.24,128,3.607,130,4.443,812,5.959,839,5.959]],["t/3388",[28,4.365,40,1.861,76,1.107,112,2.391,128,3.851,1128,7.214]],["t/3390",[21,4.017,76,1.037,109,2.194,112,2.24,128,3.607,590,4.62,1129,6.757]],["t/3392",[21,4.017,76,1.037,112,3.136,128,3.607,347,4.443,1130,6.757]],["t/3394",[76,1.107,128,3.851,130,4.743,186,1.322,339,5.004,622,5.257]],["t/3396",[44,3.5,76,1.282,128,3.031,130,3.734,186,1.04,246,5.274,339,3.939,429,4.65,767,4.65]],["t/3398",[16,2.499,76,0.975,79,1.011,128,3.392,130,4.178,186,1.164,955,4.818,1131,6.355]],["t/3400",[2,2.025,67,4.371,76,0.92,80,1.15,128,3.202,130,3.943,186,1.099,603,4.045,1132,5.997]],["t/3402",[24,4.929,75,1.368,76,0.975,128,3.392,186,1.164,339,4.408,492,4.082,1123,5.604]],["t/3404",[76,1.187,128,4.13,188,2.841,1133,7.737,1134,7.737]],["t/3406",[76,1.187,128,4.13,190,2.997,1121,6.156,1135,7.737]],["t/3408",[76,1.187,82,3.303,83,3.291,128,4.13,192,3.339]],["t/3411",[71,3.755,76,1.28,78,5.094,491,4.186]],["t/3413",[78,5.094,79,1.328,439,6.637,491,4.186]],["t/3415",[78,5.094,80,1.599,491,4.186,1136,8.342]],["t/3417",[4,3.452,75,1.796,89,4.453,491,4.186]],["t/3419",[16,2.499,75,1.368,76,0.975,462,4.631,491,3.188,495,4.631,496,4.631,1137,6.355]],["t/3421",[16,2.837,75,1.553,79,1.148,491,3.62,790,6.109,1138,6.7]],["t/3423",[16,2.657,75,1.455,80,1.295,140,3.92,309,4.498,491,3.39,1139,6.757]],["t/3425",[75,2.236,241,5.45,491,3.882,567,6.336]],["t/3427",[2,2.613,56,1.483,78,4.724,491,3.882,1140,7.737]],["t/3429",[56,1.483,76,1.187,189,5.087,402,6.156,491,3.882]],["t/3431",[8,4.64,56,1.483,79,1.231,189,5.087,491,3.882]],["t/3433",[56,1.295,80,1.295,189,4.443,321,3.078,327,5.376,491,3.39,1141,6.757]],["t/3435",[16,3.043,56,1.483,75,1.666,491,3.882,1138,7.186]],["t/3437",[16,3.043,56,1.991,491,3.882,1142,7.737]],["t/3439",[27,3.977,40,1.861,56,1.383,78,4.405,453,5.596,491,3.62]],["t/3441",[5,3.956,56,1.218,109,2.063,189,4.178,235,3.778,491,3.188,1143,6.355,1144,6.355]],["t/3443",[40,1.996,78,4.724,81,6.823,441,6.156,491,3.882]],["t/3445",[2,2.613,28,4.681,40,1.996,76,1.187,491,3.882]],["t/3447",[2,2.613,6,4.971,40,1.996,79,1.231,491,3.882]],["t/3449",[2,2.436,40,1.861,80,1.383,205,3.658,348,4.743,491,3.62]],["t/3451",[40,1.996,75,1.666,152,4.769,303,6.336,491,3.882]],["t/3453",[6,4.635,40,1.861,56,1.383,491,3.62,1145,7.214,1146,7.214]],["t/3455",[40,2.073,69,2.843,152,3.323,155,2.992,175,5.163,189,3.545,207,4.088,391,4.088,491,2.705]],["t/3457",[40,1.743,81,5.959,109,2.194,321,3.078,491,3.39,535,5.533,1147,6.757]],["t/3459",[19,4.032,30,4.447,78,4.405,109,2.342,491,3.62,829,6.109]],["t/3461",[16,2.837,112,2.391,309,4.803,491,3.62,581,6.362,582,4.687]],["t/3463",[78,4.724,186,1.418,491,3.882,591,5.151,878,5.866]],["t/3465",[78,5.094,188,3.063,322,4.878,491,4.186]],["t/3467",[39,4.924,78,4.126,190,2.618,467,5.376,491,3.39,837,6.276,1148,5.959]],["t/3469",[71,2.86,78,5.533,189,4.178,192,2.742,236,5.604,321,2.895,491,3.188]],["t/3471",[82,3.561,83,3.549,195,3.881,491,4.186]],["t/3475",[27,4.265,71,3.482,76,1.187,397,3.389,667,6.336]],["t/3477",[27,4.265,79,1.231,397,3.389,439,6.156,667,6.336]],["t/3479",[4,3.452,80,1.599,397,3.654,1103,7.357]],["t/3480",[76,1.187,80,1.483,225,4.081,269,4.42,397,3.389]],["t/3482",[4,3.202,16,3.043,79,1.231,80,1.483,397,3.389]],["t/3484",[4,2.985,16,2.837,75,1.553,267,4.491,328,4.932,397,3.16]],["t/3485",[16,2.837,27,3.977,75,1.553,76,1.107,397,3.16,450,5.358]],["t/3487",[27,3.977,29,3.828,36,4.865,75,1.553,79,1.148,397,3.16]],["t/3489",[16,2.837,27,3.977,29,3.828,75,1.553,80,1.383,397,3.16]],["t/3491",[29,3.828,36,4.865,75,2.132,397,3.16,591,4.803]],["t/3493",[27,3.725,29,3.585,56,1.295,75,1.455,275,5.722,397,2.96,1149,6.276]],["t/3495",[29,3.585,36,4.557,40,1.743,75,1.455,238,3.725,397,2.96,764,5.376]],["t/3497",[27,3.977,29,3.828,37,4.253,75,1.553,109,2.342,397,3.16]],["t/3499",[29,3.828,75,1.553,112,2.391,238,3.977,397,3.16,876,6.109]],["t/3501",[29,3.828,75,1.553,186,1.322,397,3.16,1150,7.214,1151,7.214]],["t/3503",[29,3.828,75,1.553,188,2.648,254,6.7,397,3.16,754,5.907]],["t/3505",[29,3.372,75,1.368,152,3.917,190,2.462,341,4.23,397,2.783,826,5.204,842,3.88]],["t/3507",[75,1.455,192,2.916,238,3.725,359,4.126,397,2.96,440,5.376,876,5.722]],["t/3509",[27,4.265,75,1.666,195,3.6,397,3.389,508,5.027]],["t/3511",[75,1.666,153,3.68,397,3.389,508,5.027,1152,7.186]],["t/3513",[27,3.977,75,1.553,84,3.342,397,3.16,508,4.687,1153,6.7]],["t/3515",[27,3.977,75,1.553,263,4.004,397,3.16,508,4.687,1154,6.7]],["t/3517",[27,3.977,75,1.553,395,4.185,397,3.16,508,4.687,583,3.463]],["t/3519",[75,1.553,194,4.635,386,5.358,397,3.16,491,3.62,962,6.362]],["t/3521",[8,3.596,10,4.911,29,3.182,75,1.291,155,3.329,397,3.807,763,5.079,1155,5.57]],["t/3523",[29,4.105,75,1.666,397,3.389,414,4.355,623,7.186]],["t/3525",[2,2.436,69,3.805,75,1.553,397,3.16,563,4.061,591,4.803]],["t/3527",[75,1.666,349,4.237,397,3.389,791,6.336,1156,7.186]],["t/3529",[69,3.805,75,1.553,397,3.16,468,4.061,1157,6.7,1158,7.214]],["t/3531",[29,3.828,75,1.553,397,3.16,506,3.698,764,5.739,1159,6.7]],["t/3533",[16,3.043,56,1.483,397,3.389,547,5.866,1160,7.737]],["t/3534",[14,5.241,16,2.657,56,1.295,69,3.564,76,1.037,397,2.96,547,5.123]],["t/3536",[29,3.828,36,4.865,56,1.383,79,1.148,397,3.16,591,4.803]],["t/3538",[27,3.725,29,3.585,56,1.295,80,1.295,275,5.722,397,2.96,1149,6.276]],["t/3540",[29,3.585,36,4.557,56,1.295,75,1.455,238,3.725,397,2.96,764,5.376]],["t/3542",[27,3.977,29,3.828,37,4.253,56,1.898,397,3.16]],["t/3544",[29,3.828,40,1.861,56,1.383,238,3.977,397,3.16,876,6.109]],["t/3546",[29,3.372,56,1.218,109,2.063,152,3.917,341,4.23,397,2.783,826,5.204,842,3.88]],["t/3548",[56,1.483,112,2.564,238,4.265,359,4.724,397,3.389]],["t/3550",[27,4.265,56,1.483,186,1.418,397,3.389,508,5.027]],["t/3552",[56,1.483,188,2.841,397,3.389,508,5.027,1152,7.186]],["t/3554",[27,3.977,56,1.383,190,2.795,397,3.16,508,4.687,1153,6.7]],["t/3556",[27,3.977,56,1.383,192,3.113,397,3.16,508,4.687,1154,6.7]],["t/3558",[27,3.977,56,1.383,195,3.356,395,4.185,397,3.16,508,4.687]],["t/3560",[56,1.383,153,3.431,194,4.635,386,5.358,397,3.16,962,6.362]],["t/3562",[8,3.596,10,4.911,29,3.182,56,1.15,84,2.778,155,3.329,397,2.627,763,5.079,1155,5.57]],["t/3564",[2,2.436,56,1.383,69,3.805,263,4.004,397,3.16,591,4.803]],["t/3566",[56,1.483,397,3.389,583,3.714,791,6.336,1156,7.186]],["t/3568",[56,1.483,69,4.081,397,3.389,491,3.882,1157,7.186]],["t/3570",[29,3.828,56,1.383,397,4.337,764,5.739,1159,6.7]],["t/3572",[2,2.613,27,4.265,37,4.561,40,1.996,397,3.389]],["t/3574",[2,2.282,40,1.743,76,1.037,139,4.687,240,4.838,397,2.96,846,5.959]],["t/3576",[2,2.436,37,4.253,40,1.861,79,1.148,397,3.16,1161,7.214]],["t/3578",[2,2.436,37,4.253,40,1.861,80,1.383,397,3.16,612,5.907]],["t/3580",[16,2.657,40,1.743,75,1.455,96,3.426,140,3.92,397,2.96,1162,6.276]],["t/3582",[40,1.743,56,1.295,96,3.426,140,3.92,397,2.96,593,5.959,1162,6.276]],["t/3584",[2,2.436,109,2.342,397,3.16,1163,6.109,1164,6.362,1165,5.907]],["t/3586",[4,2.796,5,4.206,76,1.037,109,2.194,397,2.96,1163,5.722,1165,5.533]],["t/3588",[37,3.536,79,0.955,109,1.947,281,3.733,391,4.547,397,2.627,1163,5.079,1165,4.911,1166,5.289]],["t/3590",[80,1.295,109,2.194,158,5.018,397,2.96,869,5.722,1163,5.722,1165,5.533]],["t/3592",[37,3.746,75,1.368,109,2.063,391,4.818,397,2.783,514,3.917,1165,5.204,1166,5.604]],["t/3594",[71,2.556,112,1.882,329,4.404,386,4.217,391,4.305,397,2.487,494,3.939,642,4.217,1164,5.008,1167,5.678]],["t/3596",[27,4.265,71,3.482,186,1.418,397,3.389,540,6.336]],["t/3598",[16,2.837,188,2.648,309,4.803,397,3.16,581,6.362,582,4.687]],["t/3600",[27,3.977,78,4.405,190,2.795,397,3.16,1148,6.362,1164,6.362]],["t/3602",[15,3.832,91,7.065,192,3.6,397,3.654]],["t/3604",[82,3.561,83,3.549,195,3.881,397,3.654]],["t/3607",[40,1.996,59,5.638,76,1.187,85,4.865,616,4.865]],["t/3609",[40,1.743,59,4.924,79,1.075,526,5.959,616,4.249,799,5.722,1168,6.757]],["t/3611",[40,1.861,59,5.257,80,1.383,799,6.109,804,5.47,901,6.7]],["t/3613",[40,1.996,76,1.187,80,1.483,878,5.866,1169,7.737]],["t/3615",[40,1.861,79,1.148,80,1.383,282,5.596,616,4.536,878,5.47]],["t/3617",[40,1.996,80,1.991,704,7.186,878,5.866]],["t/3619",[40,1.861,75,1.553,80,1.383,616,4.536,707,6.109,878,5.47]],["t/3621",[27,3.977,40,1.861,56,1.383,80,1.383,238,3.977,878,5.47]],["t/3623",[40,2.554,80,1.383,353,4.121,387,3.851,878,5.47]],["t/3625",[30,5.142,40,2.152,75,1.796,85,5.246]],["t/3627",[4,3.452,30,5.142,40,2.152,56,1.599]],["t/3629",[40,1.996,56,1.483,76,1.187,225,4.081,269,4.42]],["t/3631",[5,4.816,36,5.218,40,1.996,56,1.483,79,1.231]],["t/3633",[5,4.816,40,1.996,56,1.483,80,1.483,206,5.45]],["t/3635",[40,1.996,56,1.483,59,5.638,75,1.666,913,6.823]],["t/3637",[40,1.861,56,1.898,69,3.805,205,3.658,206,5.082]],["t/3639",[40,2.554,56,1.383,205,3.658,206,5.082,482,6.362]],["t/3641",[2,2.282,40,1.743,56,1.295,108,3.777,109,2.194,205,3.426,206,4.76]],["t/3643",[19,3.777,40,1.743,56,1.295,112,2.24,1170,9.463,1171,6.757]],["t/3645",[5,4.206,40,1.743,56,1.295,59,4.924,186,1.238,514,4.165,1172,6.757]],["t/3647",[2,2.436,40,1.861,56,1.383,59,5.257,188,2.648,1173,7.214]],["t/3649",[32,5.367,40,1.996,56,1.483,190,2.997,606,5.866]],["t/3651",[40,1.996,56,1.483,130,5.087,192,3.339,314,6.823]],["t/3653",[40,1.861,56,1.383,72,5.907,195,3.356,380,6.362,552,6.7]],["t/3655",[40,1.743,56,1.295,153,3.214,155,3.75,189,4.443,326,4.341,616,4.249]],["t/3657",[40,1.861,56,1.383,84,3.342,206,5.082,281,4.491,1174,7.214]],["t/3659",[40,1.861,56,1.383,235,4.289,263,4.004,914,6.7,951,6.362]],["t/3661",[19,3.552,30,3.917,40,1.639,56,1.218,67,4.631,583,3.051,1148,5.604,1175,6.355]],["t/3663",[29,3.585,40,1.743,56,1.295,491,3.39,1176,6.757,1177,6.757,1178,6.757]],["t/3665",[2,2.436,30,4.447,40,1.861,56,1.383,96,3.658,397,3.16]],["t/3667",[2,2.436,30,4.447,40,1.861,56,1.383,414,4.061,1179,7.214]],["t/3669",[30,3.917,40,1.639,56,1.218,96,3.222,152,3.917,563,3.577,591,4.23,699,4.818]],["t/3671",[27,3.13,40,1.465,56,1.089,71,2.556,349,3.109,1120,5.274,1180,5.678,1181,5.678,1182,5.678,1183,5.678]],["t/3673",[30,3.917,40,1.639,56,1.218,198,4.818,235,3.778,268,5.604,468,3.577,1184,5.902]],["t/3675",[5,3.535,30,3.5,40,1.465,56,1.089,191,5.274,198,4.305,235,3.376,238,3.13,506,2.91,1184,5.274]],["t/3677",[30,4.165,40,1.743,56,1.295,69,3.564,205,3.426,381,4.687,437,3.951]],["t/3679",[30,3.323,40,1.391,56,1.034,96,2.734,173,3.464,297,1.908,606,4.088,650,4.289,687,5.007,1185,5.391,1186,5.391]],["t/3681",[2,2.025,40,1.547,56,1.15,69,3.163,194,3.853,357,4.652,379,4.294,532,3.145,804,4.547]],["t/3683",[30,3.917,32,4.408,40,1.639,56,1.218,101,5.204,642,4.72,959,3.658,1187,6.355]],["t/3685",[30,4.165,40,1.743,56,1.295,59,4.924,104,5.959,167,4.206,572,5.018]],["t/3687",[40,1.743,56,1.295,239,4.088,772,6.276,913,5.959,991,4.838,1188,6.757]],["t/3689",[40,1.743,56,1.295,206,4.76,248,5.018,440,5.376,726,6.276,747,4.165]],["t/3691",[40,1.861,56,1.383,606,5.47,616,4.536,1007,5.257,1189,7.214]],["t/3693",[40,1.639,56,1.218,205,3.222,348,4.178,616,3.996,891,4.55,1190,6.355,1191,6.355]],["t/3695",[30,3.917,40,1.639,56,1.218,273,5.604,395,3.686,601,3.094,985,5.604,1192,6.355]],["t/3697",[30,4.447,40,1.861,56,1.383,96,3.658,656,4.932,1193,7.214]],["t/3699",[30,4.447,40,1.861,56,1.383,96,3.658,128,3.851,1194,7.214]],["t/3701",[30,3.697,40,1.547,56,1.15,59,4.371,69,3.163,616,3.771,676,3.596,927,5.079,1195,5.997]],["t/3703",[40,1.743,56,1.295,242,4.924,339,4.687,383,5.959,1196,6.757,1197,6.757]],["t/3705",[2,2.817,40,2.815,1198,8.342]],["t/3707",[40,1.547,109,1.947,135,4.371,363,4.225,386,6.455,650,4.771,804,4.547,846,5.289]],["t/3709",[40,1.861,76,1.107,109,2.342,194,4.635,289,5.47,804,5.47]],["t/3711",[40,1.639,79,1.011,90,3.577,109,2.063,135,4.631,353,3.63,804,4.818,1199,5.902]],["t/3713",[40,1.639,80,1.218,96,3.222,109,2.063,135,4.631,616,3.996,804,4.818,849,5.604]],["t/3715",[2,2.436,40,1.861,69,3.805,112,2.391,804,5.47,1200,6.7]],["t/3717",[2,1.918,25,3.109,40,1.465,157,3.83,186,1.04,281,5.199,379,4.066,842,3.467,1119,5.008]],["t/3719",[20,5.381,29,3.372,40,1.639,76,0.975,186,1.164,238,3.503,1201,6.355,1202,6.355]],["t/3721",[2,2.025,40,1.547,79,0.955,157,4.045,186,1.099,225,3.163,842,3.662,954,5.079,1200,5.57]],["t/3723",[40,2.152,82,3.561,83,3.549,188,3.063]],["t/3726",[71,3.482,76,1.187,410,5.54,583,3.714,1203,6.823]],["t/3728",[79,1.231,410,5.54,439,6.156,583,3.714,1203,6.823]],["t/3730",[4,3.452,80,1.599,583,4.005,1103,7.357]],["t/3731",[76,1.187,80,1.483,225,4.081,269,4.42,583,3.714]],["t/3733",[4,3.202,16,3.043,79,1.231,80,1.483,583,3.714]],["t/3735",[80,1.898,155,4.004,583,3.463,591,4.803,1204,7.214]],["t/3737",[75,1.553,80,1.383,155,4.004,583,3.463,591,4.803,975,6.362]],["t/3739",[56,1.383,80,1.383,154,4.865,583,3.463,591,4.803,693,6.7]],["t/3741",[75,1.796,95,5.973,531,7.357,583,4.005]],["t/3743",[75,1.666,76,1.187,481,6.552,583,3.714,1205,7.737]],["t/3745",[75,1.553,79,1.148,90,4.061,583,3.463,707,6.109,1206,7.214]],["t/3747",[25,3.95,75,1.553,80,1.383,326,4.635,583,3.463,591,4.803]],["t/3749",[25,3.95,75,2.132,140,4.185,146,6.362,583,3.463]],["t/3751",[56,1.599,583,4.005,616,5.246,1207,8.342]],["t/3753",[40,1.861,328,4.932,583,3.463,591,4.803,592,6.109,1203,6.362]],["t/3755",[82,3.561,83,3.549,109,2.709,583,4.005]],["t/3759",[71,3.247,76,1.52,297,2.553,864,5.907,865,3.53]],["t/3761",[76,1.187,79,1.231,297,2.738,300,6.552,301,6.336]],["t/3763",[76,1.452,79,1.075,297,2.391,422,5.376,865,3.306,869,5.722]],["t/3765",[76,1.037,79,1.506,297,2.391,347,4.443,394,4.443,865,3.306]],["t/3767",[76,1.107,79,1.148,80,1.383,297,2.553,352,4.326,940,6.362]],["t/3769",[75,1.368,76,0.975,79,1.011,108,3.552,297,2.249,829,5.381,865,3.109,927,5.381]],["t/3771",[56,1.15,76,0.92,79,0.955,250,4.652,297,2.122,329,4.652,333,3.943,343,3.329,865,2.934]],["t/3773",[28,4.088,40,1.743,76,1.037,79,1.075,297,2.391,394,4.443,865,3.306]],["t/3775",[76,0.975,80,1.218,108,3.552,297,2.249,342,3.313,582,4.129,865,3.109,1208,6.355]],["t/3776",[71,3.041,76,1.452,80,1.295,108,3.777,297,2.391,865,3.306]],["t/3778",[71,2.699,76,0.92,79,0.955,80,1.15,108,3.352,297,2.122,342,3.126,582,3.897,865,2.934]],["t/3780",[29,3.182,76,0.92,80,1.666,108,3.352,297,2.122,342,3.126,582,3.897,865,2.934]],["t/3782",[75,1.223,76,0.871,80,1.089,108,3.174,297,2.009,342,2.96,353,3.244,582,3.69,865,2.778,1199,5.274]],["t/3784",[14,4.929,56,1.218,76,0.975,80,1.218,189,4.178,297,2.249,303,5.204,328,4.345]],["t/3786",[75,1.553,76,1.107,297,2.553,745,6.362,865,3.53,1209,7.214]],["t/3788",[75,1.553,76,1.52,89,3.851,297,2.553,326,4.635]],["t/3790",[21,4.289,66,4.491,75,1.553,76,1.107,79,1.148,297,2.553]],["t/3792",[75,1.553,76,1.107,80,1.383,297,2.553,322,4.218,1210,7.214]],["t/3794",[75,2.037,76,1.037,194,4.341,297,2.391,768,5.376,865,3.306]],["t/3796",[56,1.218,76,0.975,297,2.249,342,3.313,394,4.178,582,4.129,865,3.109,1211,6.355]],["t/3797",[56,1.295,71,3.041,76,1.452,297,2.391,394,4.443,865,3.306]],["t/3799",[56,1.295,76,1.037,79,1.075,297,2.391,394,4.443,642,5.018,865,3.306]],["t/3801",[56,1.15,71,2.699,76,0.92,80,1.15,297,2.122,342,3.126,394,3.943,582,3.897,865,2.934]],["t/3803",[56,1.15,75,1.291,76,0.92,297,2.122,342,3.126,394,3.943,450,4.454,582,3.897,865,2.934]],["t/3805",[56,1.814,76,1.037,96,3.426,297,2.391,394,4.443,865,3.306]],["t/3807",[28,4.088,40,1.743,56,1.295,76,1.037,297,2.391,394,4.443,865,3.306]],["t/3809",[29,3.182,56,1.15,76,0.92,109,1.947,297,2.122,342,3.126,394,3.943,582,3.897,865,2.934]],["t/3811",[14,4.929,56,1.218,76,0.975,112,2.106,189,4.178,297,2.249,303,5.204,328,4.345]],["t/3813",[40,1.639,76,0.975,297,2.249,342,3.313,549,4.631,582,4.129,865,3.109,1212,6.355]],["t/3814",[40,1.743,71,3.041,76,1.452,297,2.391,549,4.924,865,3.306]],["t/3816",[40,1.547,71,2.699,76,0.92,79,0.955,297,2.122,342,3.126,549,4.371,582,3.897,865,2.934]],["t/3818",[29,3.182,40,1.547,76,0.92,80,1.15,297,2.122,342,3.126,549,4.371,582,3.897,865,2.934]],["t/3820",[14,4.929,40,1.639,75,1.368,76,0.975,189,4.178,297,2.249,303,5.204,328,4.345]],["t/3822",[2,2.025,76,0.92,109,1.947,157,4.045,297,2.122,342,3.126,864,4.911,865,2.934,1213,5.289]],["t/3823",[71,3.247,76,1.52,109,2.342,297,2.553,1213,6.362]],["t/3825",[25,3.48,76,0.975,79,1.011,109,2.063,175,4.082,297,2.249,450,4.72,1213,5.604]],["t/3827",[76,1.107,112,2.391,297,2.553,787,6.7,865,3.53,1214,7.214]],["t/3829",[71,3.041,76,1.452,112,2.24,238,3.725,297,2.391,1215,6.757]],["t/3831",[76,1.107,186,1.322,297,2.553,788,6.7,865,3.53,1216,7.214]],["t/3833",[76,1.037,188,2.481,297,2.391,549,4.924,790,5.722,865,3.306,1217,6.757]],["t/3835",[76,1.452,188,2.481,284,5.376,297,2.391,514,4.165,865,3.306]],["t/3837",[76,0.975,79,1.011,173,4.082,188,2.333,284,5.056,297,2.249,865,3.109,981,4.476]],["t/3839",[15,3.104,76,1.037,80,1.295,188,2.481,297,2.391,590,4.62,865,3.306]],["t/3841",[75,1.553,76,1.107,90,4.061,188,2.648,297,2.553,865,3.53]],["t/3843",[56,1.383,76,1.107,177,4.032,188,2.648,297,2.553,865,3.53]],["t/3845",[40,1.861,76,1.107,179,4.803,188,2.648,297,2.553,865,3.53]],["t/3847",[76,0.975,109,2.063,181,5.381,182,4.55,188,2.333,297,2.249,865,3.109,1166,5.604]],["t/3849",[53,4.052,76,1.037,112,2.24,188,2.481,297,2.391,514,4.165,865,3.306]],["t/3851",[76,1.037,186,1.238,188,2.481,297,2.391,514,4.165,865,3.306,873,5.533]],["t/3853",[76,1.037,179,4.498,188,3.474,297,2.391,514,4.165,865,3.306]],["t/3855",[76,0.92,188,2.202,190,2.323,297,2.122,342,3.126,864,4.911,865,2.934,1218,5.289,1219,5.997]],["t/3857",[76,0.871,188,2.085,192,2.451,297,2.009,514,3.5,709,5.008,865,2.778,981,4,1218,5.008,1220,5.008]],["t/3859",[76,1.107,190,2.795,297,2.553,549,5.257,865,3.53,1221,6.7]],["t/3861",[15,3.104,76,1.452,190,2.618,297,2.391,617,5.376,1221,6.276]],["t/3863",[15,3.104,76,1.037,79,1.075,190,2.618,297,2.391,617,5.376,1222,6.757]],["t/3865",[15,3.314,76,1.107,80,1.383,190,2.795,297,2.553,1223,7.214]],["t/3867",[15,3.314,75,1.553,76,1.107,190,2.795,297,2.553,1224,7.214]],["t/3869",[15,3.314,56,1.383,76,1.107,190,2.795,297,2.553,1225,6.7]],["t/3871",[15,3.104,40,1.743,76,1.037,190,2.618,297,2.391,590,4.62,1225,6.276]],["t/3873",[26,5.123,53,4.052,76,1.037,109,2.194,190,2.618,297,2.391,865,3.306]],["t/3875",[26,5.123,76,1.037,112,2.24,190,2.618,297,2.391,865,3.306,873,5.533]],["t/3877",[53,3.811,76,0.975,186,1.164,190,2.462,281,3.956,297,2.249,394,4.178,865,3.109]],["t/3879",[76,0.975,188,2.333,190,2.462,281,3.956,297,2.249,394,4.178,865,3.109,873,5.204]],["t/3881",[76,1.037,108,3.777,177,3.777,190,3.666,297,2.391,865,3.306]],["t/3883",[15,2.919,76,0.975,190,2.462,192,2.742,297,2.249,394,4.178,590,4.345,865,3.109]],["t/3885",[76,0.975,90,3.577,190,2.462,195,2.957,297,2.249,394,4.178,590,4.345,865,3.109]],["t/3887",[76,0.975,153,3.023,179,4.23,190,2.462,297,2.249,394,4.178,590,4.345,865,3.109]],["t/3889",[76,0.871,84,2.631,180,4.809,181,4.809,190,2.2,281,3.535,297,2.009,394,3.734,865,2.778,909,5.274]],["t/3891",[26,5.123,76,1.037,179,4.498,190,2.618,263,3.75,297,2.391,865,3.306]],["t/3893",[76,0.871,190,2.2,297,2.009,514,3.5,583,2.726,709,5.008,865,2.778,981,4,1218,5.008,1220,5.008]],["t/3895",[76,1.037,152,4.165,189,4.443,190,2.618,297,2.391,328,4.62,491,3.39]],["t/3897",[76,1.037,192,2.916,297,2.391,865,3.306,1220,5.959,1226,6.757,1227,6.757]],["t/3899",[76,1.107,195,3.356,297,2.553,606,5.47,865,3.53,987,6.7]],["t/3901",[76,1.187,89,4.13,153,3.68,297,2.738,603,5.218]],["t/3903",[76,1.28,84,3.865,297,2.952,640,7.357]],["t/3905",[76,1.187,82,3.303,83,3.291,84,3.584,297,2.738]],["t/3909",[112,2.106,316,4.929,317,3.778,436,3.065,544,3.037,838,5.902,1228,4.72,1229,5.381]],["t/3911",[26,5.866,109,2.512,186,1.418,417,7.186,1228,5.746]],["t/3913",[40,2.152,186,1.529,544,3.986,1228,6.196]],["t/3915",[56,1.599,186,1.529,544,3.986,1228,6.196]],["t/3917",[75,1.796,186,1.529,544,3.986,1228,6.196]],["t/3919",[80,1.599,186,1.529,544,3.986,1228,6.196]],["t/3921",[79,1.328,195,3.881,544,3.986,1228,6.196]],["t/3923",[76,1.28,153,3.968,544,3.986,1228,6.196]],["t/3925",[204,6.552,436,5.008,1228,5.746,1230,7.737]],["t/3927",[78,4.126,79,1.075,186,1.238,226,5.722,544,3.229,1229,5.722,1231,4.924]],["t/3929",[112,2.765,186,1.529,544,3.986,1231,6.079]],["t/3931",[109,2.709,190,3.232,544,3.986,1231,6.079]],["t/3933",[40,1.743,186,1.238,226,5.722,544,3.229,1229,5.722,1231,4.924,1232,6.757]],["t/3935",[56,1.599,109,2.709,544,3.986,1231,6.079]],["t/3937",[75,1.796,79,1.328,544,3.986,1231,6.079]],["t/3939",[80,2.092,544,3.986,1231,6.079]],["t/3941",[79,1.328,436,4.024,544,3.986,1231,6.079]],["t/3943",[76,1.28,436,4.024,544,3.986,1231,6.079]],["t/3945",[436,5.264,544,3.986,1231,6.079]],["t/3947",[351,5.004,414,4.061,544,3.447,742,5.739,1229,6.109,1233,4.803]],["t/3949",[397,3.964,544,4.324,1233,6.025]],["t/3951",[491,4.541,544,4.324,1233,6.025]],["t/3953",[544,4.324,583,4.344,1233,6.025]],["t/3955",[263,5.023,544,4.324,1233,6.025]],["t/3957",[84,4.192,544,4.324,1233,6.025]],["t/3959",[153,3.68,195,3.6,544,3.697,1233,6.913]],["t/3961",[79,1.506,188,2.481,190,2.618,192,2.916,544,3.229,1233,4.498]],["t/3963",[186,1.529,436,4.024,544,3.986,1233,5.554]],["t/3965",[79,1.075,109,2.194,112,2.24,436,4.564,544,3.229,1233,4.498]],["t/3967",[40,1.743,56,1.295,79,1.075,436,4.564,544,3.229,1233,4.498]],["t/3969",[75,1.796,436,4.024,544,3.986,1233,5.554]],["t/3971",[80,1.599,436,4.024,544,3.986,1233,5.554]],["t/3973",[79,1.328,436,4.024,544,3.986,1233,5.554]],["t/3975",[76,1.28,436,4.024,544,3.986,1233,5.554]],["t/3977",[436,5.264,544,3.986,1233,5.554]],["t/3979",[397,3.654,436,4.024,544,3.986,1234,5.704]],["t/3981",[436,4.024,491,4.186,544,3.986,1234,5.704]],["t/3983",[436,4.024,544,3.986,583,4.005,1234,5.704]],["t/3985",[263,4.63,436,4.024,544,3.986,1234,5.704]],["t/3987",[84,3.865,436,4.024,544,3.986,1234,5.704]],["t/3989",[153,3.968,436,4.024,544,3.986,1234,5.704]],["t/3991",[195,3.881,436,4.024,544,3.986,1234,5.704]],["t/3993",[109,2.709,436,4.024,544,3.986,1234,5.704]],["t/3995",[75,1.796,436,4.024,544,3.986,1234,5.704]],["t/3997",[79,1.328,436,4.024,544,3.986,1234,5.704]],["t/3999",[76,1.28,436,4.024,544,3.986,1234,5.704]],["t/4001",[80,1.599,436,4.024,544,3.986,1234,5.704]],["t/4003",[79,1.328,436,4.024,544,3.986,1234,5.704]],["t/4005",[436,5.264,544,3.986,1234,5.704]]],"invertedIndex":[["0",{"_index":436,"t":{"733":{"position":[[42,1]]},"1104":{"position":[[7,1]]},"1306":{"position":[[2,1]]},"1308":{"position":[[2,1]]},"1310":{"position":[[2,1]]},"1312":{"position":[[2,1]]},"1314":{"position":[[2,1]]},"1316":{"position":[[2,1]]},"1318":{"position":[[2,1]]},"1320":{"position":[[2,1]]},"2861":{"position":[[2,1]]},"2863":{"position":[[2,1]]},"2865":{"position":[[2,1]]},"2867":{"position":[[2,1]]},"2869":{"position":[[2,1]]},"2871":{"position":[[2,1]]},"2873":{"position":[[2,1]]},"2874":{"position":[[2,1]]},"2876":{"position":[[2,1]]},"2878":{"position":[[2,1]]},"2880":{"position":[[2,1]]},"2882":{"position":[[2,1]]},"2884":{"position":[[2,1]]},"2886":{"position":[[2,1]]},"2888":{"position":[[2,1]]},"2890":{"position":[[2,1]]},"2892":{"position":[[2,1]]},"2894":{"position":[[2,1]]},"2896":{"position":[[2,1]]},"2898":{"position":[[2,1]]},"2900":{"position":[[2,1]]},"2902":{"position":[[2,1]]},"2904":{"position":[[2,1]]},"2906":{"position":[[2,1]]},"3909":{"position":[[5,1]]},"3925":{"position":[[3,1],[5,1]]},"3941":{"position":[[5,1]]},"3943":{"position":[[5,1]]},"3945":{"position":[[3,1],[5,1]]},"3963":{"position":[[5,1]]},"3965":{"position":[[5,1],[11,1]]},"3967":{"position":[[5,1],[11,1]]},"3969":{"position":[[5,1]]},"3971":{"position":[[5,1]]},"3973":{"position":[[5,1]]},"3975":{"position":[[5,1]]},"3977":{"position":[[3,1],[5,1]]},"3979":{"position":[[6,1]]},"3981":{"position":[[6,1]]},"3983":{"position":[[6,1]]},"3985":{"position":[[6,1]]},"3987":{"position":[[6,1]]},"3989":{"position":[[6,1]]},"3991":{"position":[[6,1]]},"3993":{"position":[[5,1]]},"3995":{"position":[[5,1]]},"3997":{"position":[[5,1]]},"3999":{"position":[[5,1]]},"4001":{"position":[[3,1]]},"4003":{"position":[[3,1]]},"4005":{"position":[[3,1],[5,1]]}}}],["1",{"_index":76,"t":{"109":{"position":[[4,1]]},"118":{"position":[[3,1]]},"120":{"position":[[3,1],[5,1]]},"124":{"position":[[5,1]]},"132":{"position":[[5,1]]},"138":{"position":[[5,1]]},"143":{"position":[[5,1]]},"178":{"position":[[5,1]]},"181":{"position":[[7,1]]},"187":{"position":[[7,1]]},"198":{"position":[[0,1],[4,1]]},"201":{"position":[[2,1],[4,1]]},"203":{"position":[[2,1],[4,1],[6,1]]},"205":{"position":[[2,1]]},"207":{"position":[[2,1],[6,1]]},"209":{"position":[[2,1]]},"211":{"position":[[2,1]]},"213":{"position":[[2,1]]},"215":{"position":[[2,1]]},"217":{"position":[[2,1]]},"219":{"position":[[2,1]]},"221":{"position":[[2,1]]},"224":{"position":[[3,1]]},"230":{"position":[[5,1]]},"240":{"position":[[5,1]]},"260":{"position":[[3,1]]},"262":{"position":[[3,1],[5,1]]},"264":{"position":[[3,1]]},"269":{"position":[[5,1]]},"299":{"position":[[4,1]]},"305":{"position":[[6,1]]},"313":{"position":[[6,1]]},"318":{"position":[[6,1]]},"335":{"position":[[4,1]]},"343":{"position":[[6,1]]},"352":{"position":[[6,1]]},"358":{"position":[[6,1]]},"366":{"position":[[6,1]]},"377":{"position":[[3,1]]},"403":{"position":[[3,1]]},"410":{"position":[[5,1]]},"428":{"position":[[2,1],[4,1]]},"430":{"position":[[2,1]]},"432":{"position":[[2,1],[6,1]]},"434":{"position":[[2,1]]},"436":{"position":[[2,1]]},"438":{"position":[[2,1]]},"440":{"position":[[2,1]]},"442":{"position":[[2,1],[6,1]]},"444":{"position":[[2,1]]},"446":{"position":[[2,1],[6,1]]},"448":{"position":[[2,1]]},"450":{"position":[[2,1]]},"452":{"position":[[2,1]]},"454":{"position":[[2,1]]},"456":{"position":[[2,1]]},"458":{"position":[[2,1]]},"460":{"position":[[2,1]]},"462":{"position":[[2,1]]},"464":{"position":[[2,1]]},"468":{"position":[[5,1]]},"471":{"position":[[7,1]]},"489":{"position":[[7,1]]},"499":{"position":[[2,1],[4,1]]},"501":{"position":[[2,1]]},"503":{"position":[[2,1]]},"505":{"position":[[2,1]]},"507":{"position":[[2,1],[6,1]]},"509":{"position":[[2,1]]},"511":{"position":[[2,1]]},"513":{"position":[[2,1],[6,1]]},"515":{"position":[[2,1]]},"517":{"position":[[2,1]]},"519":{"position":[[2,1]]},"521":{"position":[[2,1]]},"523":{"position":[[2,1]]},"525":{"position":[[2,1]]},"527":{"position":[[2,1]]},"529":{"position":[[2,1]]},"531":{"position":[[2,1]]},"533":{"position":[[2,1]]},"535":{"position":[[2,1]]},"539":{"position":[[5,1]]},"543":{"position":[[7,1]]},"549":{"position":[[7,1]]},"555":{"position":[[7,1]]},"564":{"position":[[5,1]]},"569":{"position":[[7,1]]},"578":{"position":[[2,1]]},"584":{"position":[[4,1]]},"590":{"position":[[4,1]]},"594":{"position":[[4,1]]},"601":{"position":[[4,1]]},"614":{"position":[[4,1]]},"620":{"position":[[4,1]]},"634":{"position":[[5,1]]},"644":{"position":[[4,1]]},"660":{"position":[[4,1]]},"676":{"position":[[5,1]]},"680":{"position":[[7,1]]},"687":{"position":[[7,1]]},"703":{"position":[[5,1]]},"707":{"position":[[7,1]]},"721":{"position":[[7,1]]},"729":{"position":[[7,1]]},"738":{"position":[[5,1]]},"744":{"position":[[7,1]]},"755":{"position":[[4,1]]},"758":{"position":[[6,1]]},"766":{"position":[[6,1]]},"778":{"position":[[4,1]]},"792":{"position":[[6,1]]},"800":{"position":[[5,1]]},"802":{"position":[[5,1],[7,1]]},"804":{"position":[[5,1]]},"809":{"position":[[7,1]]},"819":{"position":[[7,1]]},"827":{"position":[[7,1]]},"840":{"position":[[5,1]]},"843":{"position":[[7,1]]},"850":{"position":[[5,1]]},"859":{"position":[[7,1]]},"870":{"position":[[7,1]]},"880":{"position":[[8,1]]},"894":{"position":[[5,1]]},"896":{"position":[[5,1],[7,1]]},"904":{"position":[[7,1]]},"923":{"position":[[5,1]]},"926":{"position":[[7,1]]},"940":{"position":[[4,1]]},"953":{"position":[[5,1]]},"964":{"position":[[7,1]]},"985":{"position":[[4,1]]},"989":{"position":[[6,1]]},"1021":{"position":[[6,1]]},"1028":{"position":[[6,1]]},"1036":{"position":[[6,1]]},"1045":{"position":[[5,1]]},"1047":{"position":[[5,1],[7,1]]},"1049":{"position":[[5,1]]},"1053":{"position":[[7,1]]},"1070":{"position":[[7,1]]},"1077":{"position":[[7,1]]},"1088":{"position":[[7,1]]},"1102":{"position":[[5,1]]},"1108":{"position":[[7,1]]},"1126":{"position":[[7,1]]},"1140":{"position":[[5,1]]},"1144":{"position":[[7,1]]},"1156":{"position":[[5,1]]},"1159":{"position":[[7,1]]},"1172":{"position":[[7,1]]},"1187":{"position":[[7,1]]},"1203":{"position":[[8,1]]},"1220":{"position":[[5,1]]},"1226":{"position":[[7,1]]},"1233":{"position":[[7,1]]},"1250":{"position":[[7,1]]},"1272":{"position":[[7,1]]},"1285":{"position":[[5,1]]},"1288":{"position":[[7,1]]},"1294":{"position":[[7,1]]},"1299":{"position":[[7,1]]},"1306":{"position":[[4,1]]},"1308":{"position":[[4,1],[6,1]]},"1310":{"position":[[4,1]]},"1312":{"position":[[4,1]]},"1314":{"position":[[4,1]]},"1316":{"position":[[4,1]]},"1318":{"position":[[4,1]]},"1324":{"position":[[4,1]]},"1357":{"position":[[5,1]]},"1361":{"position":[[7,1]]},"1373":{"position":[[5,1]]},"1376":{"position":[[7,1]]},"1384":{"position":[[3,1]]},"1391":{"position":[[5,1]]},"1398":{"position":[[5,1]]},"1407":{"position":[[5,1]]},"1425":{"position":[[6,1]]},"1433":{"position":[[6,1]]},"1445":{"position":[[3,1],[5,1]]},"1446":{"position":[[3,1],[5,1],[7,1]]},"1447":{"position":[[3,1],[5,1]]},"1448":{"position":[[3,1],[5,1]]},"1449":{"position":[[3,1],[5,1]]},"1450":{"position":[[3,1]]},"1451":{"position":[[3,1],[7,1]]},"1453":{"position":[[3,1]]},"1455":{"position":[[3,1]]},"1457":{"position":[[3,1]]},"1459":{"position":[[3,1]]},"1460":{"position":[[3,1],[7,1]]},"1461":{"position":[[3,1]]},"1462":{"position":[[3,1]]},"1463":{"position":[[3,1]]},"1464":{"position":[[3,1]]},"1466":{"position":[[3,1]]},"1467":{"position":[[3,1],[7,1]]},"1469":{"position":[[3,1]]},"1471":{"position":[[3,1]]},"1473":{"position":[[3,1]]},"1475":{"position":[[3,1]]},"1478":{"position":[[3,1],[5,1]]},"1480":{"position":[[3,1]]},"1482":{"position":[[3,1],[7,1]]},"1484":{"position":[[3,1]]},"1486":{"position":[[3,1]]},"1487":{"position":[[3,1],[7,1]]},"1489":{"position":[[3,1]]},"1490":{"position":[[3,1],[7,1]]},"1492":{"position":[[3,1]]},"1494":{"position":[[3,1]]},"1496":{"position":[[3,1]]},"1498":{"position":[[3,1]]},"1500":{"position":[[3,1]]},"1508":{"position":[[0,1],[4,1]]},"1510":{"position":[[0,1]]},"1512":{"position":[[0,1]]},"1515":{"position":[[3,1]]},"1517":{"position":[[3,1]]},"1521":{"position":[[5,1]]},"1533":{"position":[[5,1]]},"1546":{"position":[[5,1]]},"1554":{"position":[[5,1]]},"1565":{"position":[[5,1]]},"1571":{"position":[[2,1],[4,1]]},"1573":{"position":[[2,1]]},"1575":{"position":[[2,1],[6,1]]},"1577":{"position":[[2,1]]},"1579":{"position":[[2,1]]},"1581":{"position":[[2,1]]},"1583":{"position":[[2,1]]},"1585":{"position":[[2,1]]},"1586":{"position":[[2,1],[6,1]]},"1588":{"position":[[2,1]]},"1590":{"position":[[2,1]]},"1591":{"position":[[2,1],[6,1]]},"1593":{"position":[[2,1]]},"1595":{"position":[[2,1]]},"1597":{"position":[[2,1]]},"1599":{"position":[[2,1]]},"1601":{"position":[[2,1]]},"1602":{"position":[[2,1],[6,1]]},"1604":{"position":[[2,1]]},"1606":{"position":[[2,1]]},"1608":{"position":[[2,1]]},"1610":{"position":[[2,1]]},"1612":{"position":[[2,1]]},"1614":{"position":[[2,1]]},"1616":{"position":[[2,1]]},"1618":{"position":[[2,1]]},"1620":{"position":[[2,1]]},"1622":{"position":[[2,1]]},"1624":{"position":[[2,1]]},"1626":{"position":[[2,1]]},"1628":{"position":[[2,1]]},"1630":{"position":[[2,1]]},"1632":{"position":[[2,1]]},"1634":{"position":[[2,1]]},"1636":{"position":[[2,1]]},"1638":{"position":[[2,1]]},"1640":{"position":[[2,1],[6,1]]},"1642":{"position":[[2,1]]},"1644":{"position":[[2,1]]},"1646":{"position":[[2,1]]},"1648":{"position":[[2,1]]},"1650":{"position":[[2,1]]},"1652":{"position":[[2,1]]},"1654":{"position":[[2,1]]},"1656":{"position":[[2,1]]},"1658":{"position":[[2,1]]},"1660":{"position":[[2,1]]},"1662":{"position":[[2,1],[7,1]]},"1664":{"position":[[2,1]]},"1666":{"position":[[2,1]]},"1668":{"position":[[2,1]]},"1671":{"position":[[3,1]]},"1676":{"position":[[5,1]]},"1696":{"position":[[3,1]]},"1700":{"position":[[5,1]]},"1716":{"position":[[3,1]]},"1718":{"position":[[3,1],[5,1]]},"1723":{"position":[[5,1]]},"1728":{"position":[[5,1]]},"1738":{"position":[[5,1]]},"1748":{"position":[[5,1]]},"1760":{"position":[[4,1]]},"1764":{"position":[[6,1]]},"1778":{"position":[[6,1]]},"1792":{"position":[[3,1]]},"1800":{"position":[[5,1]]},"1831":{"position":[[2,1]]},"1836":{"position":[[4,1]]},"1842":{"position":[[4,1]]},"1848":{"position":[[4,1]]},"1854":{"position":[[4,1]]},"1872":{"position":[[5,1]]},"1891":{"position":[[4,1]]},"1895":{"position":[[6,1]]},"1900":{"position":[[6,1]]},"1906":{"position":[[6,1]]},"1912":{"position":[[6,1]]},"1918":{"position":[[6,1]]},"1924":{"position":[[6,1]]},"1932":{"position":[[6,1]]},"1940":{"position":[[7,1]]},"1950":{"position":[[7,1]]},"1958":{"position":[[7,1]]},"1970":{"position":[[2,1]]},"1972":{"position":[[2,1],[4,1]]},"1976":{"position":[[4,1]]},"1984":{"position":[[2,1]]},"1986":{"position":[[2,1],[4,1]]},"1990":{"position":[[4,1]]},"1997":{"position":[[2,1]]},"2007":{"position":[[2,1]]},"2009":{"position":[[2,1],[4,1]]},"2013":{"position":[[4,1]]},"2020":{"position":[[0,1],[2,1]]},"2022":{"position":[[0,1]]},"2024":{"position":[[0,1]]},"2026":{"position":[[0,1]]},"2028":{"position":[[0,1]]},"2030":{"position":[[0,1]]},"2032":{"position":[[0,1]]},"2034":{"position":[[0,1]]},"2036":{"position":[[0,1]]},"2038":{"position":[[0,1]]},"2040":{"position":[[0,1]]},"2042":{"position":[[0,1]]},"2044":{"position":[[0,1]]},"2046":{"position":[[0,1]]},"2048":{"position":[[0,1]]},"2050":{"position":[[0,1]]},"2052":{"position":[[0,1]]},"2054":{"position":[[0,1]]},"2056":{"position":[[0,1]]},"2058":{"position":[[0,1]]},"2060":{"position":[[0,1]]},"2062":{"position":[[0,1]]},"2064":{"position":[[0,1]]},"2068":{"position":[[3,1]]},"2078":{"position":[[2,1]]},"2089":{"position":[[3,1]]},"2102":{"position":[[2,1]]},"2131":{"position":[[3,1]]},"2146":{"position":[[2,1]]},"2157":{"position":[[2,1]]},"2164":{"position":[[2,1]]},"2170":{"position":[[3,1]]},"2174":{"position":[[3,1]]},"2181":{"position":[[3,1]]},"2190":{"position":[[2,1]]},"2203":{"position":[[2,1]]},"2207":{"position":[[3,1]]},"2230":{"position":[[4,1]]},"2234":{"position":[[6,1]]},"2242":{"position":[[6,1]]},"2260":{"position":[[3,1]]},"2263":{"position":[[4,1]]},"2268":{"position":[[6,1]]},"2271":{"position":[[6,1]]},"2280":{"position":[[6,1]]},"2289":{"position":[[4,1]]},"2295":{"position":[[6,1]]},"2302":{"position":[[3,1]]},"2310":{"position":[[5,1]]},"2325":{"position":[[3,1]]},"2330":{"position":[[5,1]]},"2340":{"position":[[3,1]]},"2347":{"position":[[5,1]]},"2356":{"position":[[5,1]]},"2392":{"position":[[3,1]]},"2397":{"position":[[5,1]]},"2408":{"position":[[5,1]]},"2417":{"position":[[5,1]]},"2437":{"position":[[5,1]]},"2443":{"position":[[5,1]]},"2447":{"position":[[5,1]]},"2467":{"position":[[5,1]]},"2475":{"position":[[6,1]]},"2481":{"position":[[6,1]]},"2487":{"position":[[6,1]]},"2494":{"position":[[4,1]]},"2504":{"position":[[6,1]]},"2509":{"position":[[6,1]]},"2516":{"position":[[3,1]]},"2521":{"position":[[5,1]]},"2529":{"position":[[5,1]]},"2541":{"position":[[5,1]]},"2545":{"position":[[5,1]]},"2563":{"position":[[4,1]]},"2566":{"position":[[6,1]]},"2576":{"position":[[6,1]]},"2586":{"position":[[6,1]]},"2598":{"position":[[5,1]]},"2602":{"position":[[7,1]]},"2606":{"position":[[7,1]]},"2614":{"position":[[3,1]]},"2616":{"position":[[3,1],[5,1]]},"2622":{"position":[[5,1]]},"2634":{"position":[[4,1]]},"2636":{"position":[[4,1],[6,1]]},"2638":{"position":[[4,1]]},"2640":{"position":[[4,1]]},"2642":{"position":[[4,1]]},"2645":{"position":[[4,1]]},"2648":{"position":[[6,1]]},"2661":{"position":[[4,1]]},"2663":{"position":[[4,1],[6,1]]},"2665":{"position":[[4,1]]},"2667":{"position":[[4,1]]},"2669":{"position":[[4,1]]},"2671":{"position":[[4,1]]},"2673":{"position":[[4,1]]},"2675":{"position":[[4,1]]},"2681":{"position":[[3,1]]},"2687":{"position":[[5,1]]},"2700":{"position":[[4,1]]},"2706":{"position":[[6,1]]},"2720":{"position":[[6,1]]},"2730":{"position":[[6,1]]},"2739":{"position":[[5,1]]},"2744":{"position":[[7,1]]},"2753":{"position":[[7,1]]},"2773":{"position":[[4,1]]},"2781":{"position":[[3,1]]},"2785":{"position":[[5,1]]},"2795":{"position":[[5,1]]},"2802":{"position":[[3,1]]},"2806":{"position":[[5,1]]},"2810":{"position":[[5,1]]},"2824":{"position":[[5,1]]},"2833":{"position":[[5,1]]},"2842":{"position":[[3,1]]},"2845":{"position":[[5,1]]},"2861":{"position":[[4,1]]},"2874":{"position":[[6,1]]},"2886":{"position":[[6,1]]},"2900":{"position":[[7,1]]},"2909":{"position":[[3,1]]},"2914":{"position":[[5,1]]},"2924":{"position":[[5,1]]},"2940":{"position":[[5,1]]},"2954":{"position":[[5,1]]},"2968":{"position":[[5,1]]},"2978":{"position":[[0,1],[2,1]]},"2980":{"position":[[0,1]]},"2982":{"position":[[0,1]]},"2984":{"position":[[0,1]]},"2988":{"position":[[2,1]]},"2998":{"position":[[2,1]]},"3006":{"position":[[2,1]]},"3014":{"position":[[4,1]]},"3020":{"position":[[2,1]]},"3028":{"position":[[2,1]]},"3036":{"position":[[2,1]]},"3044":{"position":[[3,1]]},"3052":{"position":[[2,1]]},"3060":{"position":[[2,1]]},"3068":{"position":[[5,1]]},"3077":{"position":[[7,1]]},"3087":{"position":[[5,1]]},"3091":{"position":[[7,1]]},"3099":{"position":[[7,1]]},"3107":{"position":[[7,1]]},"3115":{"position":[[7,1]]},"3130":{"position":[[0,1],[4,1]]},"3132":{"position":[[0,1]]},"3135":{"position":[[3,1]]},"3141":{"position":[[5,1]]},"3147":{"position":[[5,1]]},"3153":{"position":[[5,1]]},"3161":{"position":[[5,1]]},"3172":{"position":[[5,1]]},"3192":{"position":[[6,1]]},"3198":{"position":[[6,1]]},"3208":{"position":[[3,1],[5,1]]},"3210":{"position":[[3,1]]},"3212":{"position":[[3,1]]},"3214":{"position":[[3,1]]},"3216":{"position":[[3,1]]},"3217":{"position":[[3,1],[7,1]]},"3219":{"position":[[3,1]]},"3221":{"position":[[3,1]]},"3223":{"position":[[3,1]]},"3225":{"position":[[3,1]]},"3227":{"position":[[3,1]]},"3229":{"position":[[3,1]]},"3231":{"position":[[3,1]]},"3233":{"position":[[3,1]]},"3235":{"position":[[3,1]]},"3237":{"position":[[3,1]]},"3239":{"position":[[3,1]]},"3249":{"position":[[3,1],[5,1]]},"3251":{"position":[[3,1]]},"3253":{"position":[[3,1],[7,1]]},"3255":{"position":[[3,1]]},"3257":{"position":[[3,1]]},"3259":{"position":[[3,1]]},"3260":{"position":[[3,1],[7,1]]},"3262":{"position":[[3,1]]},"3264":{"position":[[3,1]]},"3266":{"position":[[3,1]]},"3268":{"position":[[3,1]]},"3270":{"position":[[3,1]]},"3272":{"position":[[3,1]]},"3274":{"position":[[3,1]]},"3276":{"position":[[3,1]]},"3278":{"position":[[3,1]]},"3281":{"position":[[5,1]]},"3286":{"position":[[7,1]]},"3293":{"position":[[7,1]]},"3302":{"position":[[4,1]]},"3314":{"position":[[4,1]]},"3316":{"position":[[4,1],[6,1]]},"3318":{"position":[[4,1]]},"3336":{"position":[[5,1]]},"3342":{"position":[[7,1]]},"3349":{"position":[[3,1],[5,1]]},"3351":{"position":[[3,1]]},"3353":{"position":[[3,1]]},"3355":{"position":[[3,1]]},"3357":{"position":[[3,1]]},"3358":{"position":[[3,1],[7,1]]},"3359":{"position":[[3,1]]},"3361":{"position":[[3,1]]},"3363":{"position":[[3,1]]},"3364":{"position":[[3,1]]},"3366":{"position":[[3,1]]},"3368":{"position":[[3,1],[7,1]]},"3370":{"position":[[3,1]]},"3372":{"position":[[3,1]]},"3374":{"position":[[3,1]]},"3376":{"position":[[3,1]]},"3378":{"position":[[3,1],[7,1]]},"3380":{"position":[[3,1]]},"3382":{"position":[[3,1]]},"3384":{"position":[[3,1]]},"3386":{"position":[[3,1]]},"3388":{"position":[[3,1]]},"3390":{"position":[[3,1]]},"3392":{"position":[[3,1]]},"3394":{"position":[[3,1]]},"3396":{"position":[[3,1],[7,1]]},"3398":{"position":[[3,1]]},"3400":{"position":[[3,1]]},"3402":{"position":[[3,1]]},"3404":{"position":[[3,1]]},"3406":{"position":[[3,1]]},"3408":{"position":[[3,1]]},"3411":{"position":[[3,1]]},"3419":{"position":[[5,1]]},"3429":{"position":[[5,1]]},"3445":{"position":[[5,1]]},"3475":{"position":[[3,1]]},"3480":{"position":[[5,1]]},"3485":{"position":[[5,1]]},"3534":{"position":[[5,1]]},"3574":{"position":[[5,1]]},"3586":{"position":[[5,1]]},"3607":{"position":[[2,1]]},"3613":{"position":[[4,1]]},"3629":{"position":[[4,1]]},"3709":{"position":[[4,1]]},"3719":{"position":[[4,1]]},"3726":{"position":[[3,1]]},"3731":{"position":[[5,1]]},"3743":{"position":[[5,1]]},"3759":{"position":[[3,1],[5,1]]},"3761":{"position":[[3,1]]},"3763":{"position":[[3,1],[7,1]]},"3765":{"position":[[3,1]]},"3767":{"position":[[3,1]]},"3769":{"position":[[3,1]]},"3771":{"position":[[3,1]]},"3773":{"position":[[3,1]]},"3775":{"position":[[3,1]]},"3776":{"position":[[3,1],[7,1]]},"3778":{"position":[[3,1]]},"3780":{"position":[[3,1]]},"3782":{"position":[[3,1]]},"3784":{"position":[[3,1]]},"3786":{"position":[[3,1]]},"3788":{"position":[[3,1],[7,1]]},"3790":{"position":[[3,1]]},"3792":{"position":[[3,1]]},"3794":{"position":[[3,1]]},"3796":{"position":[[3,1]]},"3797":{"position":[[3,1],[7,1]]},"3799":{"position":[[3,1]]},"3801":{"position":[[3,1]]},"3803":{"position":[[3,1]]},"3805":{"position":[[3,1]]},"3807":{"position":[[3,1]]},"3809":{"position":[[3,1]]},"3811":{"position":[[3,1]]},"3813":{"position":[[3,1]]},"3814":{"position":[[3,1],[7,1]]},"3816":{"position":[[3,1]]},"3818":{"position":[[3,1]]},"3820":{"position":[[3,1]]},"3822":{"position":[[3,1]]},"3823":{"position":[[3,1],[7,1]]},"3825":{"position":[[3,1]]},"3827":{"position":[[3,1]]},"3829":{"position":[[3,1],[7,1]]},"3831":{"position":[[3,1]]},"3833":{"position":[[3,1]]},"3835":{"position":[[3,1],[8,1]]},"3837":{"position":[[3,1]]},"3839":{"position":[[3,1]]},"3841":{"position":[[3,1]]},"3843":{"position":[[3,1]]},"3845":{"position":[[3,1]]},"3847":{"position":[[3,1]]},"3849":{"position":[[3,1]]},"3851":{"position":[[3,1]]},"3853":{"position":[[3,1]]},"3855":{"position":[[3,1]]},"3857":{"position":[[3,1]]},"3859":{"position":[[3,1]]},"3861":{"position":[[3,1],[8,1]]},"3863":{"position":[[3,1]]},"3865":{"position":[[3,1]]},"3867":{"position":[[3,1]]},"3869":{"position":[[3,1]]},"3871":{"position":[[3,1]]},"3873":{"position":[[3,1]]},"3875":{"position":[[3,1]]},"3877":{"position":[[3,1]]},"3879":{"position":[[3,1]]},"3881":{"position":[[3,1]]},"3883":{"position":[[3,1]]},"3885":{"position":[[3,1]]},"3887":{"position":[[3,1]]},"3889":{"position":[[3,1]]},"3891":{"position":[[3,1]]},"3893":{"position":[[3,1]]},"3895":{"position":[[3,1]]},"3897":{"position":[[3,1]]},"3899":{"position":[[3,1]]},"3901":{"position":[[3,1]]},"3903":{"position":[[3,1]]},"3905":{"position":[[3,1]]},"3923":{"position":[[3,1]]},"3943":{"position":[[3,1]]},"3975":{"position":[[3,1]]},"3999":{"position":[[3,1]]}}}],["10",{"_index":188,"t":{"287":{"position":[[5,2]]},"330":{"position":[[4,2]]},"374":{"position":[[4,2]]},"424":{"position":[[3,2]]},"460":{"position":[[4,2]]},"529":{"position":[[4,2]]},"539":{"position":[[0,2]]},"541":{"position":[[0,2]]},"543":{"position":[[0,2]]},"545":{"position":[[0,2]]},"547":{"position":[[0,2]]},"549":{"position":[[0,2]]},"551":{"position":[[0,2]]},"553":{"position":[[0,2]]},"555":{"position":[[0,2]]},"557":{"position":[[0,2]]},"559":{"position":[[0,2]]},"561":{"position":[[0,2]]},"628":{"position":[[2,2]]},"878":{"position":[[5,2]]},"880":{"position":[[5,2]]},"882":{"position":[[5,2]]},"953":{"position":[[2,2]]},"955":{"position":[[2,2]]},"957":{"position":[[2,2]]},"959":{"position":[[2,2]]},"961":{"position":[[2,2]]},"963":{"position":[[2,2]]},"964":{"position":[[2,2]]},"966":{"position":[[2,2]]},"968":{"position":[[2,2]]},"970":{"position":[[2,2]]},"972":{"position":[[2,2]]},"974":{"position":[[2,2]]},"976":{"position":[[2,2]]},"978":{"position":[[2,2]]},"980":{"position":[[2,2]]},"982":{"position":[[2,2]]},"1007":{"position":[[6,2]]},"1201":{"position":[[5,2]]},"1203":{"position":[[5,2]]},"1205":{"position":[[5,2]]},"1207":{"position":[[5,2]]},"1209":{"position":[[5,2]]},"1280":{"position":[[5,2]]},"1342":{"position":[[4,2]]},"1419":{"position":[[3,2]]},"1620":{"position":[[6,2]]},"1658":{"position":[[6,2]]},"1660":{"position":[[4,2]]},"1662":{"position":[[4,2]]},"1814":{"position":[[3,2]]},"1870":{"position":[[2,2]]},"1872":{"position":[[2,2]]},"1874":{"position":[[2,2]]},"1938":{"position":[[4,2]]},"1940":{"position":[[4,2]]},"1942":{"position":[[4,2]]},"1944":{"position":[[4,2]]},"1946":{"position":[[4,2]]},"2038":{"position":[[2,2]]},"2068":{"position":[[0,2]]},"2070":{"position":[[0,2]]},"2072":{"position":[[0,2]]},"2074":{"position":[[0,2]]},"2120":{"position":[[2,2]]},"2225":{"position":[[3,2]]},"2374":{"position":[[5,2]]},"2471":{"position":[[3,2]]},"2554":{"position":[[3,2]]},"2598":{"position":[[0,2]]},"2600":{"position":[[0,2]]},"2602":{"position":[[0,2]]},"2604":{"position":[[0,2]]},"2606":{"position":[[0,2]]},"2608":{"position":[[0,2]]},"2610":{"position":[[0,2]]},"2732":{"position":[[4,2]]},"2898":{"position":[[4,2]]},"2900":{"position":[[4,2]]},"2974":{"position":[[3,2]]},"3044":{"position":[[0,2]]},"3046":{"position":[[0,2]]},"3048":{"position":[[0,2]]},"3190":{"position":[[3,2]]},"3208":{"position":[[0,2]]},"3210":{"position":[[0,2]]},"3212":{"position":[[0,2]]},"3214":{"position":[[0,2]]},"3216":{"position":[[0,2]]},"3217":{"position":[[0,2]]},"3219":{"position":[[0,2]]},"3221":{"position":[[0,2]]},"3223":{"position":[[0,2]]},"3225":{"position":[[0,2]]},"3227":{"position":[[0,2]]},"3229":{"position":[[0,2]]},"3231":{"position":[[0,2]]},"3233":{"position":[[0,2]]},"3235":{"position":[[0,2],[7,2]]},"3237":{"position":[[0,2]]},"3239":{"position":[[0,2]]},"3249":{"position":[[0,2]]},"3251":{"position":[[0,2]]},"3253":{"position":[[0,2]]},"3255":{"position":[[0,2]]},"3257":{"position":[[0,2]]},"3259":{"position":[[0,2]]},"3260":{"position":[[0,2]]},"3262":{"position":[[0,2]]},"3264":{"position":[[0,2]]},"3266":{"position":[[0,2]]},"3268":{"position":[[0,2]]},"3270":{"position":[[0,2]]},"3272":{"position":[[0,2]]},"3274":{"position":[[0,2]]},"3276":{"position":[[0,2]]},"3278":{"position":[[0,2]]},"3404":{"position":[[5,2]]},"3465":{"position":[[3,2]]},"3503":{"position":[[5,2]]},"3552":{"position":[[5,2]]},"3598":{"position":[[3,2]]},"3647":{"position":[[4,2]]},"3723":{"position":[[2,2]]},"3833":{"position":[[5,2]]},"3835":{"position":[[5,2]]},"3837":{"position":[[5,2]]},"3839":{"position":[[5,2]]},"3841":{"position":[[5,2]]},"3843":{"position":[[5,2]]},"3845":{"position":[[5,2]]},"3847":{"position":[[5,2]]},"3849":{"position":[[5,2]]},"3851":{"position":[[5,2]]},"3853":{"position":[[5,2],[8,2]]},"3855":{"position":[[5,2]]},"3857":{"position":[[5,2]]},"3879":{"position":[[8,2]]},"3961":{"position":[[3,2]]}}}],["11",{"_index":190,"t":{"289":{"position":[[5,2]]},"332":{"position":[[4,2]]},"462":{"position":[[4,2]]},"531":{"position":[[4,2]]},"630":{"position":[[2,2]]},"850":{"position":[[2,2]]},"852":{"position":[[2,2]]},"854":{"position":[[2,2]]},"856":{"position":[[2,2]]},"858":{"position":[[2,2]]},"859":{"position":[[2,2]]},"861":{"position":[[2,2]]},"863":{"position":[[2,2]]},"865":{"position":[[2,2]]},"867":{"position":[[2,2]]},"869":{"position":[[2,2]]},"870":{"position":[[2,2]]},"872":{"position":[[2,2]]},"874":{"position":[[2,2]]},"876":{"position":[[2,2]]},"878":{"position":[[2,2]]},"880":{"position":[[2,2]]},"882":{"position":[[2,2]]},"884":{"position":[[2,2],[5,2]]},"886":{"position":[[2,2]]},"888":{"position":[[2,2]]},"890":{"position":[[2,2]]},"1009":{"position":[[6,2]]},"1211":{"position":[[5,2]]},"1282":{"position":[[5,2]]},"1344":{"position":[[4,2]]},"1421":{"position":[[3,2]]},"1622":{"position":[[6,2]]},"1664":{"position":[[4,2]]},"1816":{"position":[[3,2]]},"1876":{"position":[[2,2]]},"1948":{"position":[[4,2]]},"1950":{"position":[[4,2]]},"1952":{"position":[[4,2]]},"2040":{"position":[[2,2]]},"2122":{"position":[[2,2]]},"2181":{"position":[[0,2]]},"2183":{"position":[[0,2]]},"2185":{"position":[[0,2]]},"2187":{"position":[[0,2]]},"2227":{"position":[[3,2]]},"2376":{"position":[[5,2]]},"2473":{"position":[[3,2]]},"2475":{"position":[[3,2]]},"2477":{"position":[[3,2]]},"2556":{"position":[[3,2]]},"2734":{"position":[[4,2]]},"2902":{"position":[[4,2]]},"2909":{"position":[[0,2]]},"2911":{"position":[[0,2]]},"2913":{"position":[[0,2]]},"2914":{"position":[[0,2]]},"2916":{"position":[[0,2]]},"2918":{"position":[[0,2]]},"2920":{"position":[[0,2]]},"2922":{"position":[[0,2]]},"2924":{"position":[[0,2]]},"2926":{"position":[[0,2]]},"2928":{"position":[[0,2]]},"2930":{"position":[[0,2]]},"2932":{"position":[[0,2]]},"2934":{"position":[[0,2]]},"2936":{"position":[[0,2]]},"2938":{"position":[[0,2]]},"2940":{"position":[[0,2]]},"2942":{"position":[[0,2]]},"2944":{"position":[[0,2]]},"2946":{"position":[[0,2]]},"2948":{"position":[[0,2]]},"2950":{"position":[[0,2]]},"2952":{"position":[[0,2]]},"2954":{"position":[[0,2]]},"2956":{"position":[[0,2]]},"2958":{"position":[[0,2]]},"2960":{"position":[[0,2]]},"2962":{"position":[[0,2]]},"2964":{"position":[[0,2]]},"2966":{"position":[[0,2]]},"2968":{"position":[[0,2]]},"2970":{"position":[[0,2]]},"2972":{"position":[[0,2]]},"2974":{"position":[[0,2]]},"3191":{"position":[[3,2]]},"3192":{"position":[[3,2]]},"3193":{"position":[[3,2]]},"3195":{"position":[[3,2]]},"3196":{"position":[[3,2]]},"3237":{"position":[[7,2]]},"3406":{"position":[[5,2]]},"3467":{"position":[[3,2]]},"3505":{"position":[[5,2]]},"3554":{"position":[[5,2]]},"3600":{"position":[[3,2]]},"3649":{"position":[[4,2]]},"3855":{"position":[[8,2]]},"3859":{"position":[[5,2]]},"3861":{"position":[[5,2]]},"3863":{"position":[[5,2]]},"3865":{"position":[[5,2]]},"3867":{"position":[[5,2]]},"3869":{"position":[[5,2]]},"3871":{"position":[[5,2]]},"3873":{"position":[[5,2]]},"3875":{"position":[[5,2]]},"3877":{"position":[[5,2]]},"3879":{"position":[[5,2]]},"3881":{"position":[[5,2],[8,2]]},"3883":{"position":[[5,2]]},"3885":{"position":[[5,2]]},"3887":{"position":[[5,2]]},"3889":{"position":[[5,2]]},"3891":{"position":[[5,2]]},"3893":{"position":[[5,2]]},"3895":{"position":[[5,2]]},"3931":{"position":[[5,2]]},"3961":{"position":[[8,2]]}}}],["12",{"_index":192,"t":{"291":{"position":[[5,2]]},"464":{"position":[[4,2]]},"533":{"position":[[4,2]]},"632":{"position":[[2,2]]},"634":{"position":[[2,2]]},"636":{"position":[[2,2]]},"638":{"position":[[2,2]]},"886":{"position":[[5,2]]},"1011":{"position":[[6,2]]},"1213":{"position":[[5,2]]},"1346":{"position":[[4,2]]},"1357":{"position":[[2,2]]},"1359":{"position":[[2,2]]},"1361":{"position":[[2,2]]},"1363":{"position":[[2,2]]},"1365":{"position":[[2,2]]},"1367":{"position":[[2,2]]},"1369":{"position":[[2,2]]},"1384":{"position":[[0,2]]},"1386":{"position":[[0,2]]},"1388":{"position":[[0,2]]},"1390":{"position":[[0,2]]},"1391":{"position":[[0,2]]},"1393":{"position":[[0,2]]},"1395":{"position":[[0,2]]},"1397":{"position":[[0,2]]},"1398":{"position":[[0,2]]},"1400":{"position":[[0,2]]},"1402":{"position":[[0,2]]},"1404":{"position":[[0,2]]},"1406":{"position":[[0,2]]},"1407":{"position":[[0,2]]},"1409":{"position":[[0,2]]},"1411":{"position":[[0,2]]},"1413":{"position":[[0,2]]},"1415":{"position":[[0,2]]},"1417":{"position":[[0,2]]},"1419":{"position":[[0,2]]},"1421":{"position":[[0,2]]},"1423":{"position":[[0,2],[3,2]]},"1425":{"position":[[0,2],[3,2]]},"1427":{"position":[[0,2],[3,2]]},"1429":{"position":[[0,2],[3,2]]},"1431":{"position":[[0,2]]},"1433":{"position":[[0,2]]},"1435":{"position":[[0,2]]},"1437":{"position":[[0,2]]},"1439":{"position":[[0,2]]},"1441":{"position":[[0,2]]},"1624":{"position":[[6,2]]},"1666":{"position":[[4,2]]},"1818":{"position":[[3,2]]},"1878":{"position":[[2,2]]},"1954":{"position":[[4,2]]},"2042":{"position":[[2,2]]},"2124":{"position":[[2,2]]},"2207":{"position":[[0,2]]},"2209":{"position":[[0,2]]},"2211":{"position":[[0,2]]},"2213":{"position":[[0,2]]},"2215":{"position":[[0,2]]},"2217":{"position":[[0,2]]},"2219":{"position":[[0,2]]},"2221":{"position":[[0,2]]},"2223":{"position":[[0,2]]},"2225":{"position":[[0,2]]},"2227":{"position":[[0,2]]},"2378":{"position":[[5,2]]},"2479":{"position":[[3,2]]},"2481":{"position":[[3,2]]},"2483":{"position":[[3,2]]},"2558":{"position":[[3,2]]},"2736":{"position":[[4,2]]},"2904":{"position":[[4,2]]},"3197":{"position":[[3,2]]},"3198":{"position":[[3,2]]},"3200":{"position":[[3,2]]},"3202":{"position":[[3,2]]},"3408":{"position":[[5,2]]},"3469":{"position":[[3,2]]},"3507":{"position":[[5,2]]},"3556":{"position":[[5,2]]},"3602":{"position":[[3,2]]},"3651":{"position":[[4,2]]},"3857":{"position":[[8,2]]},"3883":{"position":[[8,2]]},"3897":{"position":[[5,2]]},"3961":{"position":[[13,2]]}}}],["13",{"_index":195,"t":{"293":{"position":[[5,2]]},"535":{"position":[[4,2]]},"640":{"position":[[2,2]]},"888":{"position":[[5,2]]},"1013":{"position":[[6,2]]},"1102":{"position":[[2,2]]},"1104":{"position":[[2,2]]},"1106":{"position":[[2,2]]},"1108":{"position":[[2,2]]},"1110":{"position":[[2,2]]},"1112":{"position":[[2,2]]},"1114":{"position":[[2,2]]},"1116":{"position":[[2,2]]},"1118":{"position":[[2,2]]},"1120":{"position":[[2,2]]},"1122":{"position":[[2,2]]},"1124":{"position":[[2,2]]},"1126":{"position":[[2,2]]},"1128":{"position":[[2,2]]},"1130":{"position":[[2,2]]},"1132":{"position":[[2,2]]},"1134":{"position":[[2,2]]},"1136":{"position":[[2,2]]},"1215":{"position":[[5,2]]},"1348":{"position":[[4,2]]},"1431":{"position":[[3,2]]},"1433":{"position":[[3,2]]},"1435":{"position":[[3,2]]},"1437":{"position":[[3,2]]},"1626":{"position":[[6,2]]},"1668":{"position":[[4,2]]},"1820":{"position":[[3,2]]},"1880":{"position":[[2,2]]},"1956":{"position":[[4,2]]},"1958":{"position":[[4,2]]},"1960":{"position":[[4,2]]},"2044":{"position":[[2,2]]},"2089":{"position":[[0,2]]},"2091":{"position":[[0,2]]},"2093":{"position":[[0,2]]},"2095":{"position":[[0,2]]},"2097":{"position":[[0,2]]},"2099":{"position":[[0,2]]},"2126":{"position":[[2,2]]},"2380":{"position":[[5,2]]},"2485":{"position":[[3,2]]},"2487":{"position":[[3,2]]},"2560":{"position":[[3,2]]},"2681":{"position":[[0,2]]},"2683":{"position":[[0,2]]},"2685":{"position":[[0,2]]},"2687":{"position":[[0,2]]},"2689":{"position":[[0,2]]},"2691":{"position":[[0,2]]},"2693":{"position":[[0,2]]},"2695":{"position":[[0,2]]},"2697":{"position":[[0,2]]},"2906":{"position":[[4,2]]},"3204":{"position":[[3,2]]},"3471":{"position":[[3,2]]},"3509":{"position":[[5,2]]},"3558":{"position":[[5,2]]},"3604":{"position":[[3,2]]},"3653":{"position":[[4,2]]},"3885":{"position":[[8,2]]},"3899":{"position":[[5,2]]},"3921":{"position":[[5,2]]},"3959":{"position":[[3,2]]},"3991":{"position":[[3,2]]}}}],["14",{"_index":153,"t":{"224":{"position":[[0,2]]},"226":{"position":[[0,2]]},"228":{"position":[[0,2]]},"230":{"position":[[0,2]]},"232":{"position":[[0,2]]},"234":{"position":[[0,2]]},"236":{"position":[[0,2]]},"238":{"position":[[0,2]]},"240":{"position":[[0,2]]},"242":{"position":[[0,2]]},"244":{"position":[[0,2]]},"246":{"position":[[0,2]]},"248":{"position":[[0,2]]},"250":{"position":[[0,2]]},"252":{"position":[[0,2]]},"254":{"position":[[0,2]]},"256":{"position":[[0,2]]},"800":{"position":[[2,2]]},"802":{"position":[[2,2]]},"804":{"position":[[2,2]]},"806":{"position":[[2,2]]},"808":{"position":[[2,2]]},"809":{"position":[[2,2]]},"811":{"position":[[2,2]]},"813":{"position":[[2,2]]},"815":{"position":[[2,2]]},"817":{"position":[[2,2]]},"819":{"position":[[2,2]]},"821":{"position":[[2,2]]},"823":{"position":[[2,2]]},"825":{"position":[[2,2]]},"827":{"position":[[2,2]]},"829":{"position":[[2,2]]},"831":{"position":[[2,2]]},"833":{"position":[[2,2]]},"835":{"position":[[2,2]]},"837":{"position":[[2,2]]},"890":{"position":[[5,2]]},"1015":{"position":[[6,2]]},"1217":{"position":[[5,2]]},"1350":{"position":[[4,2]]},"1439":{"position":[[3,2]]},"1628":{"position":[[6,2]]},"1822":{"position":[[3,2]]},"1882":{"position":[[2,2]]},"2046":{"position":[[2,2]]},"2128":{"position":[[2,2]]},"2131":{"position":[[0,2]]},"2133":{"position":[[0,2]]},"2135":{"position":[[0,2]]},"2137":{"position":[[0,2]]},"2139":{"position":[[0,2]]},"2141":{"position":[[0,2]]},"2143":{"position":[[0,2]]},"2382":{"position":[[5,2]]},"2489":{"position":[[3,2]]},"3511":{"position":[[5,2]]},"3560":{"position":[[5,2]]},"3655":{"position":[[4,2]]},"3887":{"position":[[8,2]]},"3901":{"position":[[5,2]]},"3923":{"position":[[5,2]]},"3959":{"position":[[9,2]]},"3989":{"position":[[3,2]]}}}],["15",{"_index":84,"t":{"118":{"position":[[0,2]]},"120":{"position":[[0,2]]},"122":{"position":[[0,2]]},"124":{"position":[[0,2]]},"126":{"position":[[0,2]]},"128":{"position":[[0,2]]},"130":{"position":[[0,2]]},"132":{"position":[[0,2]]},"134":{"position":[[0,2]]},"136":{"position":[[0,2]]},"138":{"position":[[0,2]]},"140":{"position":[[0,2]]},"142":{"position":[[0,2]]},"143":{"position":[[0,2]]},"145":{"position":[[0,2]]},"147":{"position":[[0,2]]},"149":{"position":[[0,2]]},"151":{"position":[[0,2]]},"153":{"position":[[0,2]]},"1017":{"position":[[6,2]]},"1156":{"position":[[2,2]]},"1158":{"position":[[2,2]]},"1159":{"position":[[2,2]]},"1161":{"position":[[2,2]]},"1163":{"position":[[2,2]]},"1165":{"position":[[2,2]]},"1167":{"position":[[2,2]]},"1169":{"position":[[2,2]]},"1171":{"position":[[2,2]]},"1172":{"position":[[2,2]]},"1174":{"position":[[2,2]]},"1176":{"position":[[2,2]]},"1178":{"position":[[2,2]]},"1180":{"position":[[2,2]]},"1182":{"position":[[2,2]]},"1184":{"position":[[2,2]]},"1186":{"position":[[2,2]]},"1187":{"position":[[2,2]]},"1189":{"position":[[2,2]]},"1191":{"position":[[2,2]]},"1193":{"position":[[2,2]]},"1195":{"position":[[2,2]]},"1197":{"position":[[2,2]]},"1199":{"position":[[2,2]]},"1201":{"position":[[2,2]]},"1203":{"position":[[2,2]]},"1205":{"position":[[2,2]]},"1207":{"position":[[2,2]]},"1209":{"position":[[2,2]]},"1211":{"position":[[2,2]]},"1213":{"position":[[2,2]]},"1215":{"position":[[2,2]]},"1217":{"position":[[2,2]]},"1352":{"position":[[4,2]]},"1441":{"position":[[3,2]]},"1630":{"position":[[6,2]]},"1824":{"position":[[3,2]]},"1884":{"position":[[2,2]]},"1964":{"position":[[4,2]]},"2048":{"position":[[2,2]]},"2260":{"position":[[0,2]]},"2491":{"position":[[3,2]]},"3513":{"position":[[5,2]]},"3562":{"position":[[5,2]]},"3657":{"position":[[4,2]]},"3889":{"position":[[8,2]]},"3903":{"position":[[5,2]]},"3905":{"position":[[5,2]]},"3957":{"position":[[3,2]]},"3987":{"position":[[3,2]]}}}],["16",{"_index":263,"t":{"403":{"position":[[0,2]]},"405":{"position":[[0,2]]},"407":{"position":[[0,2]]},"409":{"position":[[0,2]]},"410":{"position":[[0,2]]},"412":{"position":[[0,2]]},"414":{"position":[[0,2]]},"416":{"position":[[0,2]]},"418":{"position":[[0,2]]},"420":{"position":[[0,2]]},"422":{"position":[[0,2]]},"424":{"position":[[0,2]]},"1285":{"position":[[2,2]]},"1287":{"position":[[2,2]]},"1288":{"position":[[2,2]]},"1290":{"position":[[2,2]]},"1292":{"position":[[2,2]]},"1294":{"position":[[2,2]]},"1296":{"position":[[2,2]]},"1298":{"position":[[2,2]]},"1299":{"position":[[2,2]]},"1301":{"position":[[2,2]]},"1303":{"position":[[2,2]]},"1354":{"position":[[4,2]]},"1632":{"position":[[6,2]]},"1826":{"position":[[3,2]]},"1886":{"position":[[2,2]]},"1966":{"position":[[4,2]]},"2050":{"position":[[2,2]]},"2170":{"position":[[0,2]]},"3515":{"position":[[5,2]]},"3564":{"position":[[5,2]]},"3659":{"position":[[4,2]]},"3891":{"position":[[8,2]]},"3955":{"position":[[3,2]]},"3985":{"position":[[3,2]]}}}],["17",{"_index":583,"t":{"1220":{"position":[[2,2]]},"1222":{"position":[[2,2]]},"1224":{"position":[[2,2]]},"1226":{"position":[[2,2]]},"1228":{"position":[[2,2]]},"1230":{"position":[[2,2]]},"1232":{"position":[[2,2]]},"1233":{"position":[[2,2]]},"1235":{"position":[[2,2]]},"1237":{"position":[[2,2]]},"1239":{"position":[[2,2]]},"1241":{"position":[[2,2]]},"1243":{"position":[[2,2]]},"1245":{"position":[[2,2]]},"1247":{"position":[[2,2]]},"1249":{"position":[[2,2]]},"1250":{"position":[[2,2]]},"1252":{"position":[[2,2]]},"1254":{"position":[[2,2]]},"1256":{"position":[[2,2]]},"1258":{"position":[[2,2]]},"1260":{"position":[[2,2]]},"1262":{"position":[[2,2]]},"1264":{"position":[[2,2]]},"1266":{"position":[[2,2]]},"1268":{"position":[[2,2]]},"1270":{"position":[[2,2]]},"1272":{"position":[[2,2]]},"1274":{"position":[[2,2]]},"1276":{"position":[[2,2]]},"1278":{"position":[[2,2]]},"1280":{"position":[[2,2]]},"1282":{"position":[[2,2]]},"1634":{"position":[[6,2]]},"1828":{"position":[[3,2]]},"1888":{"position":[[2,2]]},"2052":{"position":[[2,2]]},"2174":{"position":[[0,2]]},"2176":{"position":[[0,2]]},"2178":{"position":[[0,2]]},"3517":{"position":[[5,2]]},"3566":{"position":[[5,2]]},"3661":{"position":[[4,2]]},"3726":{"position":[[0,2]]},"3728":{"position":[[0,2]]},"3730":{"position":[[0,2]]},"3731":{"position":[[0,2]]},"3733":{"position":[[0,2]]},"3735":{"position":[[0,2]]},"3737":{"position":[[0,2]]},"3739":{"position":[[0,2]]},"3741":{"position":[[0,2]]},"3743":{"position":[[0,2]]},"3745":{"position":[[0,2]]},"3747":{"position":[[0,2]]},"3749":{"position":[[0,2]]},"3751":{"position":[[0,2]]},"3753":{"position":[[0,2]]},"3755":{"position":[[0,2]]},"3893":{"position":[[8,2]]},"3953":{"position":[[3,2]]},"3983":{"position":[[3,2]]}}}],["18",{"_index":491,"t":{"894":{"position":[[2,2]]},"896":{"position":[[2,2]]},"898":{"position":[[2,2]]},"900":{"position":[[2,2]]},"902":{"position":[[2,2]]},"904":{"position":[[2,2]]},"906":{"position":[[2,2]]},"908":{"position":[[2,2]]},"910":{"position":[[2,2]]},"912":{"position":[[2,2]]},"914":{"position":[[2,2]]},"916":{"position":[[2,2]]},"918":{"position":[[2,2]]},"920":{"position":[[2,2]]},"1636":{"position":[[6,2]]},"2054":{"position":[[2,2]]},"3411":{"position":[[0,2]]},"3413":{"position":[[0,2]]},"3415":{"position":[[0,2]]},"3417":{"position":[[0,2]]},"3419":{"position":[[0,2]]},"3421":{"position":[[0,2]]},"3423":{"position":[[0,2]]},"3425":{"position":[[0,2]]},"3427":{"position":[[0,2]]},"3429":{"position":[[0,2]]},"3431":{"position":[[0,2]]},"3433":{"position":[[0,2]]},"3435":{"position":[[0,2]]},"3437":{"position":[[0,2]]},"3439":{"position":[[0,2]]},"3441":{"position":[[0,2]]},"3443":{"position":[[0,2]]},"3445":{"position":[[0,2]]},"3447":{"position":[[0,2]]},"3449":{"position":[[0,2]]},"3451":{"position":[[0,2]]},"3453":{"position":[[0,2]]},"3455":{"position":[[0,2]]},"3457":{"position":[[0,2]]},"3459":{"position":[[0,2]]},"3461":{"position":[[0,2]]},"3463":{"position":[[0,2]]},"3465":{"position":[[0,2]]},"3467":{"position":[[0,2]]},"3469":{"position":[[0,2]]},"3471":{"position":[[0,2]]},"3519":{"position":[[5,2]]},"3568":{"position":[[5,2]]},"3663":{"position":[[4,2]]},"3895":{"position":[[8,2]]},"3951":{"position":[[3,2]]},"3981":{"position":[[3,2]]}}}],["19",{"_index":397,"t":{"676":{"position":[[2,2]]},"678":{"position":[[2,2]]},"680":{"position":[[2,2]]},"682":{"position":[[2,2]]},"684":{"position":[[2,2]]},"686":{"position":[[2,2]]},"687":{"position":[[2,2]]},"689":{"position":[[2,2]]},"691":{"position":[[2,2]]},"693":{"position":[[2,2]]},"695":{"position":[[2,2]]},"697":{"position":[[2,2]]},"699":{"position":[[2,2]]},"2056":{"position":[[2,2]]},"3475":{"position":[[0,2]]},"3477":{"position":[[0,2]]},"3479":{"position":[[0,2]]},"3480":{"position":[[0,2]]},"3482":{"position":[[0,2]]},"3484":{"position":[[0,2]]},"3485":{"position":[[0,2]]},"3487":{"position":[[0,2]]},"3489":{"position":[[0,2]]},"3491":{"position":[[0,2]]},"3493":{"position":[[0,2]]},"3495":{"position":[[0,2]]},"3497":{"position":[[0,2]]},"3499":{"position":[[0,2]]},"3501":{"position":[[0,2]]},"3503":{"position":[[0,2]]},"3505":{"position":[[0,2]]},"3507":{"position":[[0,2]]},"3509":{"position":[[0,2]]},"3511":{"position":[[0,2]]},"3513":{"position":[[0,2]]},"3515":{"position":[[0,2]]},"3517":{"position":[[0,2]]},"3519":{"position":[[0,2]]},"3521":{"position":[[0,2],[5,2]]},"3523":{"position":[[0,2]]},"3525":{"position":[[0,2]]},"3527":{"position":[[0,2]]},"3529":{"position":[[0,2]]},"3531":{"position":[[0,2]]},"3533":{"position":[[0,2]]},"3534":{"position":[[0,2]]},"3536":{"position":[[0,2]]},"3538":{"position":[[0,2]]},"3540":{"position":[[0,2]]},"3542":{"position":[[0,2]]},"3544":{"position":[[0,2]]},"3546":{"position":[[0,2]]},"3548":{"position":[[0,2]]},"3550":{"position":[[0,2]]},"3552":{"position":[[0,2]]},"3554":{"position":[[0,2]]},"3556":{"position":[[0,2]]},"3558":{"position":[[0,2]]},"3560":{"position":[[0,2]]},"3562":{"position":[[0,2]]},"3564":{"position":[[0,2]]},"3566":{"position":[[0,2]]},"3568":{"position":[[0,2]]},"3570":{"position":[[0,2],[5,2]]},"3572":{"position":[[0,2]]},"3574":{"position":[[0,2]]},"3576":{"position":[[0,2]]},"3578":{"position":[[0,2]]},"3580":{"position":[[0,2]]},"3582":{"position":[[0,2]]},"3584":{"position":[[0,2]]},"3586":{"position":[[0,2]]},"3588":{"position":[[0,2]]},"3590":{"position":[[0,2]]},"3592":{"position":[[0,2]]},"3594":{"position":[[0,2]]},"3596":{"position":[[0,2]]},"3598":{"position":[[0,2]]},"3600":{"position":[[0,2]]},"3602":{"position":[[0,2]]},"3604":{"position":[[0,2]]},"3665":{"position":[[4,2]]},"3949":{"position":[[3,2]]},"3979":{"position":[[3,2]]}}}],["2",{"_index":79,"t":{"111":{"position":[[4,1]]},"122":{"position":[[3,1]]},"124":{"position":[[3,1]]},"126":{"position":[[3,1],[5,1]]},"128":{"position":[[3,1]]},"134":{"position":[[5,1]]},"140":{"position":[[5,1]]},"145":{"position":[[5,1]]},"180":{"position":[[5,1]]},"181":{"position":[[5,1]]},"183":{"position":[[5,1],[7,1]]},"189":{"position":[[7,1]]},"205":{"position":[[4,1]]},"207":{"position":[[4,1]]},"209":{"position":[[4,1],[6,1]]},"211":{"position":[[4,1]]},"213":{"position":[[4,1]]},"226":{"position":[[3,1]]},"232":{"position":[[5,1]]},"242":{"position":[[5,1]]},"264":{"position":[[5,1]]},"266":{"position":[[3,1]]},"271":{"position":[[5,1]]},"301":{"position":[[4,1]]},"307":{"position":[[6,1]]},"315":{"position":[[6,1]]},"320":{"position":[[6,1]]},"335":{"position":[[2,1]]},"337":{"position":[[2,1],[4,1]]},"339":{"position":[[2,1]]},"341":{"position":[[2,1]]},"343":{"position":[[2,1]]},"345":{"position":[[2,1],[6,1]]},"347":{"position":[[2,1]]},"349":{"position":[[2,1]]},"351":{"position":[[2,1]]},"352":{"position":[[2,1]]},"354":{"position":[[2,1],[6,1]]},"356":{"position":[[2,1]]},"358":{"position":[[2,1]]},"360":{"position":[[2,1],[6,1]]},"362":{"position":[[2,1]]},"364":{"position":[[2,1]]},"366":{"position":[[2,1]]},"368":{"position":[[2,1],[6,1]]},"370":{"position":[[2,1]]},"372":{"position":[[2,1]]},"374":{"position":[[2,1]]},"379":{"position":[[3,1]]},"405":{"position":[[3,1]]},"412":{"position":[[5,1]]},"430":{"position":[[4,1]]},"432":{"position":[[4,1]]},"434":{"position":[[4,1],[6,1]]},"436":{"position":[[4,1]]},"438":{"position":[[4,1]]},"448":{"position":[[6,1]]},"468":{"position":[[3,1]]},"470":{"position":[[3,1],[5,1]]},"471":{"position":[[3,1],[5,1]]},"473":{"position":[[3,1],[5,1],[7,1]]},"475":{"position":[[3,1],[5,1]]},"477":{"position":[[3,1],[5,1]]},"479":{"position":[[3,1],[5,1]]},"481":{"position":[[3,1]]},"483":{"position":[[3,1]]},"485":{"position":[[3,1]]},"487":{"position":[[3,1]]},"489":{"position":[[3,1]]},"491":{"position":[[3,1],[7,1]]},"493":{"position":[[3,1]]},"495":{"position":[[3,1]]},"501":{"position":[[4,1]]},"509":{"position":[[6,1]]},"515":{"position":[[6,1]]},"539":{"position":[[3,1]]},"541":{"position":[[3,1],[5,1]]},"543":{"position":[[3,1],[5,1]]},"545":{"position":[[3,1],[5,1],[7,1]]},"547":{"position":[[3,1]]},"549":{"position":[[3,1]]},"551":{"position":[[3,1],[7,1]]},"553":{"position":[[3,1]]},"555":{"position":[[3,1]]},"557":{"position":[[3,1],[7,1]]},"559":{"position":[[3,1]]},"561":{"position":[[3,1]]},"566":{"position":[[5,1]]},"571":{"position":[[7,1]]},"580":{"position":[[2,1]]},"586":{"position":[[4,1]]},"596":{"position":[[4,1]]},"603":{"position":[[4,1]]},"616":{"position":[[4,1]]},"622":{"position":[[4,1]]},"636":{"position":[[5,1]]},"646":{"position":[[4,1]]},"662":{"position":[[4,1]]},"678":{"position":[[5,1]]},"680":{"position":[[5,1]]},"682":{"position":[[5,1],[7,1]]},"684":{"position":[[5,1]]},"689":{"position":[[7,1]]},"705":{"position":[[5,1]]},"707":{"position":[[5,1]]},"709":{"position":[[5,1],[7,1]]},"710":{"position":[[5,1]]},"712":{"position":[[5,1]]},"714":{"position":[[5,1]]},"723":{"position":[[7,1]]},"731":{"position":[[7,1]]},"740":{"position":[[5,1]]},"746":{"position":[[7,1]]},"757":{"position":[[4,1]]},"758":{"position":[[4,1]]},"760":{"position":[[4,1],[6,1]]},"762":{"position":[[4,1]]},"768":{"position":[[6,1]]},"780":{"position":[[4,1]]},"794":{"position":[[6,1]]},"804":{"position":[[7,1]]},"806":{"position":[[5,1]]},"811":{"position":[[7,1]]},"821":{"position":[[7,1]]},"829":{"position":[[7,1]]},"842":{"position":[[5,1]]},"843":{"position":[[5,1]]},"845":{"position":[[5,1],[7,1]]},"852":{"position":[[5,1]]},"861":{"position":[[7,1]]},"872":{"position":[[7,1]]},"882":{"position":[[8,1]]},"898":{"position":[[5,1]]},"906":{"position":[[7,1]]},"925":{"position":[[5,1]]},"926":{"position":[[5,1]]},"928":{"position":[[5,1],[7,1]]},"930":{"position":[[5,1]]},"932":{"position":[[5,1]]},"940":{"position":[[2,1]]},"942":{"position":[[2,1],[4,1]]},"944":{"position":[[2,1]]},"946":{"position":[[2,1]]},"948":{"position":[[2,1]]},"950":{"position":[[2,1]]},"955":{"position":[[5,1]]},"966":{"position":[[7,1]]},"987":{"position":[[4,1]]},"989":{"position":[[4,1]]},"991":{"position":[[4,1],[6,1]]},"993":{"position":[[4,1]]},"995":{"position":[[4,1]]},"997":{"position":[[4,1]]},"999":{"position":[[4,1]]},"1001":{"position":[[4,1]]},"1003":{"position":[[4,1]]},"1005":{"position":[[4,1]]},"1007":{"position":[[4,1]]},"1009":{"position":[[4,1]]},"1011":{"position":[[4,1]]},"1013":{"position":[[4,1]]},"1015":{"position":[[4,1]]},"1017":{"position":[[4,1]]},"1023":{"position":[[6,1]]},"1030":{"position":[[6,1]]},"1049":{"position":[[7,1]]},"1051":{"position":[[5,1]]},"1053":{"position":[[5,1]]},"1055":{"position":[[5,1],[7,1]]},"1057":{"position":[[5,1]]},"1059":{"position":[[5,1]]},"1061":{"position":[[5,1]]},"1063":{"position":[[5,1]]},"1065":{"position":[[5,1]]},"1072":{"position":[[7,1]]},"1078":{"position":[[7,1]]},"1089":{"position":[[7,1]]},"1104":{"position":[[5,1]]},"1106":{"position":[[5,1]]},"1108":{"position":[[5,1]]},"1110":{"position":[[5,1],[7,1]]},"1112":{"position":[[5,1]]},"1114":{"position":[[5,1]]},"1116":{"position":[[5,1]]},"1118":{"position":[[5,1]]},"1120":{"position":[[5,1]]},"1122":{"position":[[5,1]]},"1128":{"position":[[7,1]]},"1142":{"position":[[5,1]]},"1144":{"position":[[5,1]]},"1146":{"position":[[5,1],[7,1]]},"1158":{"position":[[5,1]]},"1159":{"position":[[5,1]]},"1161":{"position":[[5,1],[7,1]]},"1163":{"position":[[5,1]]},"1165":{"position":[[5,1]]},"1167":{"position":[[5,1]]},"1169":{"position":[[5,1]]},"1174":{"position":[[7,1]]},"1189":{"position":[[7,1]]},"1205":{"position":[[8,1]]},"1222":{"position":[[5,1]]},"1228":{"position":[[7,1]]},"1235":{"position":[[7,1]]},"1252":{"position":[[7,1]]},"1274":{"position":[[7,1]]},"1287":{"position":[[5,1]]},"1288":{"position":[[5,1]]},"1290":{"position":[[5,1],[7,1]]},"1296":{"position":[[7,1]]},"1301":{"position":[[7,1]]},"1310":{"position":[[6,1]]},"1320":{"position":[[4,1]]},"1326":{"position":[[4,1]]},"1359":{"position":[[5,1]]},"1361":{"position":[[5,1]]},"1363":{"position":[[5,1],[7,1]]},"1373":{"position":[[3,1]]},"1375":{"position":[[3,1],[5,1]]},"1376":{"position":[[3,1],[5,1]]},"1378":{"position":[[3,1],[5,1],[7,1]]},"1380":{"position":[[3,1]]},"1386":{"position":[[3,1]]},"1393":{"position":[[5,1]]},"1400":{"position":[[5,1]]},"1409":{"position":[[5,1]]},"1427":{"position":[[6,1]]},"1435":{"position":[[6,1]]},"1447":{"position":[[7,1]]},"1450":{"position":[[5,1]]},"1451":{"position":[[5,1]]},"1453":{"position":[[5,1],[7,1]]},"1455":{"position":[[5,1]]},"1457":{"position":[[5,1]]},"1461":{"position":[[7,1]]},"1469":{"position":[[7,1]]},"1480":{"position":[[5,1]]},"1482":{"position":[[5,1]]},"1484":{"position":[[5,1],[7,1]]},"1492":{"position":[[7,1]]},"1510":{"position":[[4,1]]},"1517":{"position":[[5,1]]},"1519":{"position":[[3,1]]},"1521":{"position":[[3,1]]},"1523":{"position":[[3,1],[5,1]]},"1525":{"position":[[3,1]]},"1527":{"position":[[3,1]]},"1529":{"position":[[3,1]]},"1534":{"position":[[5,1]]},"1548":{"position":[[5,1]]},"1556":{"position":[[5,1]]},"1558":{"position":[[5,1]]},"1567":{"position":[[5,1]]},"1573":{"position":[[4,1]]},"1575":{"position":[[4,1]]},"1577":{"position":[[4,1],[6,1]]},"1588":{"position":[[6,1]]},"1593":{"position":[[6,1]]},"1604":{"position":[[6,1]]},"1642":{"position":[[6,1]]},"1673":{"position":[[3,1]]},"1678":{"position":[[5,1]]},"1698":{"position":[[3,1]]},"1700":{"position":[[3,1]]},"1702":{"position":[[3,1],[5,1]]},"1704":{"position":[[3,1]]},"1706":{"position":[[3,1]]},"1720":{"position":[[3,1]]},"1725":{"position":[[5,1]]},"1730":{"position":[[5,1]]},"1740":{"position":[[5,1]]},"1750":{"position":[[5,1]]},"1762":{"position":[[4,1]]},"1764":{"position":[[4,1]]},"1766":{"position":[[4,1],[6,1]]},"1768":{"position":[[4,1]]},"1770":{"position":[[4,1]]},"1772":{"position":[[4,1]]},"1780":{"position":[[6,1]]},"1794":{"position":[[3,1]]},"1802":{"position":[[5,1]]},"1833":{"position":[[2,1]]},"1838":{"position":[[4,1]]},"1844":{"position":[[4,1]]},"1850":{"position":[[4,1]]},"1856":{"position":[[4,1]]},"1874":{"position":[[5,1]]},"1893":{"position":[[4,1]]},"1895":{"position":[[4,1]]},"1902":{"position":[[6,1]]},"1908":{"position":[[6,1]]},"1914":{"position":[[6,1]]},"1920":{"position":[[6,1]]},"1926":{"position":[[6,1]]},"1934":{"position":[[6,1]]},"1942":{"position":[[7,1]]},"1952":{"position":[[7,1]]},"1960":{"position":[[7,1]]},"1970":{"position":[[0,1]]},"1972":{"position":[[0,1]]},"1974":{"position":[[0,1],[2,1]]},"1975":{"position":[[0,1]]},"1976":{"position":[[0,1]]},"1978":{"position":[[0,1],[4,1]]},"1980":{"position":[[0,1]]},"1984":{"position":[[0,1]]},"1986":{"position":[[0,1]]},"1988":{"position":[[0,1],[2,1]]},"1989":{"position":[[0,1]]},"1990":{"position":[[0,1]]},"1992":{"position":[[0,1]]},"1994":{"position":[[0,1]]},"1999":{"position":[[2,1]]},"2007":{"position":[[0,1]]},"2009":{"position":[[0,1]]},"2011":{"position":[[0,1],[2,1]]},"2012":{"position":[[0,1]]},"2013":{"position":[[0,1]]},"2015":{"position":[[0,1]]},"2017":{"position":[[0,1]]},"2022":{"position":[[2,1]]},"2070":{"position":[[3,1]]},"2080":{"position":[[2,1]]},"2091":{"position":[[3,1]]},"2102":{"position":[[0,1]]},"2104":{"position":[[0,1],[2,1]]},"2106":{"position":[[0,1]]},"2108":{"position":[[0,1]]},"2110":{"position":[[0,1]]},"2112":{"position":[[0,1]]},"2114":{"position":[[0,1]]},"2116":{"position":[[0,1]]},"2118":{"position":[[0,1]]},"2120":{"position":[[0,1]]},"2122":{"position":[[0,1]]},"2124":{"position":[[0,1]]},"2126":{"position":[[0,1]]},"2128":{"position":[[0,1]]},"2133":{"position":[[3,1]]},"2148":{"position":[[2,1]]},"2159":{"position":[[2,1]]},"2166":{"position":[[2,1]]},"2176":{"position":[[3,1]]},"2183":{"position":[[3,1]]},"2192":{"position":[[2,1]]},"2209":{"position":[[3,1]]},"2230":{"position":[[2,1]]},"2232":{"position":[[2,1],[4,1]]},"2234":{"position":[[2,1],[4,1]]},"2236":{"position":[[2,1],[4,1],[6,1]]},"2238":{"position":[[2,1],[4,1]]},"2240":{"position":[[2,1]]},"2242":{"position":[[2,1]]},"2244":{"position":[[2,1],[6,1]]},"2246":{"position":[[2,1]]},"2248":{"position":[[2,1]]},"2250":{"position":[[2,1]]},"2252":{"position":[[2,1]]},"2254":{"position":[[2,1]]},"2256":{"position":[[2,1]]},"2263":{"position":[[0,1]]},"2265":{"position":[[0,1],[4,1]]},"2267":{"position":[[0,1]]},"2268":{"position":[[0,1]]},"2270":{"position":[[0,1]]},"2271":{"position":[[0,1]]},"2273":{"position":[[0,1],[6,1]]},"2275":{"position":[[0,1]]},"2277":{"position":[[0,1]]},"2279":{"position":[[0,1]]},"2280":{"position":[[0,1]]},"2282":{"position":[[0,1],[6,1]]},"2284":{"position":[[0,1]]},"2286":{"position":[[0,1]]},"2289":{"position":[[0,1]]},"2291":{"position":[[0,1],[4,1]]},"2293":{"position":[[0,1]]},"2295":{"position":[[0,1]]},"2297":{"position":[[0,1]]},"2299":{"position":[[0,1]]},"2304":{"position":[[3,1]]},"2312":{"position":[[5,1]]},"2327":{"position":[[3,1]]},"2332":{"position":[[5,1]]},"2342":{"position":[[3,1]]},"2349":{"position":[[5,1]]},"2358":{"position":[[5,1]]},"2394":{"position":[[3,1]]},"2399":{"position":[[5,1]]},"2410":{"position":[[5,1]]},"2419":{"position":[[5,1]]},"2439":{"position":[[5,1]]},"2449":{"position":[[5,1]]},"2469":{"position":[[5,1]]},"2477":{"position":[[6,1]]},"2483":{"position":[[6,1]]},"2494":{"position":[[0,1]]},"2496":{"position":[[0,1],[4,1]]},"2498":{"position":[[0,1]]},"2500":{"position":[[0,1]]},"2502":{"position":[[0,1]]},"2504":{"position":[[0,1]]},"2505":{"position":[[0,1],[6,1]]},"2507":{"position":[[0,1]]},"2509":{"position":[[0,1]]},"2511":{"position":[[0,1],[6,1]]},"2513":{"position":[[0,1]]},"2518":{"position":[[3,1]]},"2523":{"position":[[5,1]]},"2531":{"position":[[5,1]]},"2546":{"position":[[5,1]]},"2565":{"position":[[4,1]]},"2566":{"position":[[4,1]]},"2568":{"position":[[4,1],[6,1]]},"2570":{"position":[[4,1]]},"2572":{"position":[[4,1]]},"2578":{"position":[[6,1]]},"2588":{"position":[[6,1]]},"2600":{"position":[[5,1]]},"2602":{"position":[[5,1]]},"2608":{"position":[[7,1]]},"2618":{"position":[[3,1]]},"2624":{"position":[[5,1]]},"2634":{"position":[[0,1]]},"2636":{"position":[[0,1]]},"2638":{"position":[[0,1],[6,1]]},"2640":{"position":[[0,1]]},"2642":{"position":[[0,1]]},"2645":{"position":[[0,1]]},"2647":{"position":[[0,1],[4,1]]},"2648":{"position":[[0,1],[4,1]]},"2650":{"position":[[0,1],[4,1],[6,1]]},"2652":{"position":[[0,1],[4,1]]},"2654":{"position":[[0,1],[4,1]]},"2656":{"position":[[0,1]]},"2658":{"position":[[0,1]]},"2661":{"position":[[0,1]]},"2663":{"position":[[0,1]]},"2665":{"position":[[0,1],[6,1]]},"2667":{"position":[[0,1]]},"2669":{"position":[[0,1]]},"2671":{"position":[[0,1]]},"2673":{"position":[[0,1]]},"2675":{"position":[[0,1]]},"2683":{"position":[[3,1]]},"2689":{"position":[[5,1]]},"2700":{"position":[[2,1]]},"2702":{"position":[[2,1],[4,1]]},"2704":{"position":[[2,1]]},"2706":{"position":[[2,1]]},"2708":{"position":[[2,1],[6,1]]},"2710":{"position":[[2,1]]},"2712":{"position":[[2,1]]},"2714":{"position":[[2,1]]},"2716":{"position":[[2,1]]},"2718":{"position":[[2,1]]},"2720":{"position":[[2,1]]},"2722":{"position":[[2,1]]},"2724":{"position":[[2,1]]},"2726":{"position":[[2,1]]},"2728":{"position":[[2,1]]},"2730":{"position":[[2,1]]},"2732":{"position":[[2,1]]},"2734":{"position":[[2,1]]},"2736":{"position":[[2,1]]},"2741":{"position":[[5,1]]},"2746":{"position":[[7,1]]},"2755":{"position":[[7,1]]},"2773":{"position":[[0,1]]},"2775":{"position":[[0,1],[4,1]]},"2777":{"position":[[0,1]]},"2783":{"position":[[3,1]]},"2785":{"position":[[3,1]]},"2787":{"position":[[3,1],[5,1]]},"2789":{"position":[[3,1]]},"2791":{"position":[[3,1]]},"2797":{"position":[[5,1]]},"2804":{"position":[[3,1]]},"2806":{"position":[[3,1]]},"2812":{"position":[[5,1]]},"2826":{"position":[[5,1]]},"2835":{"position":[[5,1]]},"2844":{"position":[[3,1]]},"2845":{"position":[[3,1]]},"2847":{"position":[[3,1],[5,1]]},"2849":{"position":[[3,1]]},"2851":{"position":[[3,1]]},"2853":{"position":[[3,1]]},"2855":{"position":[[3,1]]},"2861":{"position":[[0,1]]},"2863":{"position":[[0,1],[4,1]]},"2865":{"position":[[0,1]]},"2867":{"position":[[0,1]]},"2869":{"position":[[0,1]]},"2871":{"position":[[0,1]]},"2873":{"position":[[0,1]]},"2874":{"position":[[0,1]]},"2876":{"position":[[0,1],[6,1]]},"2878":{"position":[[0,1]]},"2880":{"position":[[0,1]]},"2882":{"position":[[0,1]]},"2884":{"position":[[0,1]]},"2886":{"position":[[0,1]]},"2888":{"position":[[0,1],[6,1]]},"2890":{"position":[[0,1]]},"2892":{"position":[[0,1]]},"2894":{"position":[[0,1]]},"2896":{"position":[[0,1]]},"2898":{"position":[[0,1]]},"2900":{"position":[[0,1]]},"2902":{"position":[[0,1]]},"2904":{"position":[[0,1]]},"2906":{"position":[[0,1]]},"2911":{"position":[[3,1]]},"2916":{"position":[[5,1]]},"2926":{"position":[[5,1]]},"2942":{"position":[[5,1]]},"2956":{"position":[[5,1]]},"2970":{"position":[[5,1]]},"2980":{"position":[[2,1]]},"2988":{"position":[[0,1]]},"2990":{"position":[[0,1],[2,1]]},"2992":{"position":[[0,1]]},"2994":{"position":[[0,1]]},"3000":{"position":[[2,1]]},"3008":{"position":[[2,1]]},"3016":{"position":[[4,1]]},"3022":{"position":[[2,1]]},"3030":{"position":[[2,1]]},"3038":{"position":[[2,1]]},"3046":{"position":[[3,1]]},"3054":{"position":[[2,1]]},"3062":{"position":[[2,1]]},"3070":{"position":[[5,1]]},"3079":{"position":[[7,1]]},"3089":{"position":[[5,1]]},"3091":{"position":[[5,1]]},"3093":{"position":[[5,1],[7,1]]},"3095":{"position":[[5,1]]},"3101":{"position":[[7,1]]},"3109":{"position":[[7,1]]},"3117":{"position":[[7,1]]},"3132":{"position":[[4,1]]},"3137":{"position":[[3,1]]},"3149":{"position":[[5,1]]},"3155":{"position":[[5,1]]},"3163":{"position":[[5,1]]},"3174":{"position":[[5,1]]},"3193":{"position":[[6,1]]},"3200":{"position":[[6,1]]},"3210":{"position":[[5,1]]},"3219":{"position":[[7,1]]},"3251":{"position":[[5,1]]},"3253":{"position":[[5,1]]},"3262":{"position":[[7,1]]},"3283":{"position":[[5,1]]},"3288":{"position":[[7,1]]},"3290":{"position":[[7,1]]},"3295":{"position":[[7,1]]},"3302":{"position":[[0,1]]},"3303":{"position":[[0,1],[4,1]]},"3304":{"position":[[0,1]]},"3306":{"position":[[0,1]]},"3308":{"position":[[0,1]]},"3310":{"position":[[0,1]]},"3314":{"position":[[0,1],[2,1]]},"3316":{"position":[[0,1],[2,1]]},"3318":{"position":[[0,1],[2,1],[6,1]]},"3320":{"position":[[0,1],[2,1],[4,1]]},"3322":{"position":[[0,1],[2,1]]},"3324":{"position":[[0,1],[2,1]]},"3326":{"position":[[0,1],[2,1]]},"3328":{"position":[[0,1],[2,1]]},"3330":{"position":[[0,1],[2,1]]},"3332":{"position":[[0,1],[2,1]]},"3338":{"position":[[5,1]]},"3344":{"position":[[7,1]]},"3351":{"position":[[5,1]]},"3359":{"position":[[7,1]]},"3370":{"position":[[7,1]]},"3380":{"position":[[7,1]]},"3398":{"position":[[7,1]]},"3413":{"position":[[3,1]]},"3421":{"position":[[5,1]]},"3431":{"position":[[5,1]]},"3447":{"position":[[5,1]]},"3477":{"position":[[3,1]]},"3482":{"position":[[5,1]]},"3487":{"position":[[5,1]]},"3536":{"position":[[5,1]]},"3576":{"position":[[5,1]]},"3588":{"position":[[5,1]]},"3609":{"position":[[2,1]]},"3615":{"position":[[4,1]]},"3631":{"position":[[4,1]]},"3711":{"position":[[4,1]]},"3721":{"position":[[4,1]]},"3728":{"position":[[3,1]]},"3733":{"position":[[5,1]]},"3745":{"position":[[5,1]]},"3761":{"position":[[5,1]]},"3763":{"position":[[5,1]]},"3765":{"position":[[5,1],[7,1]]},"3767":{"position":[[5,1]]},"3769":{"position":[[5,1]]},"3771":{"position":[[5,1]]},"3773":{"position":[[5,1]]},"3778":{"position":[[7,1]]},"3790":{"position":[[7,1]]},"3799":{"position":[[7,1]]},"3816":{"position":[[7,1]]},"3825":{"position":[[7,1]]},"3837":{"position":[[8,1]]},"3863":{"position":[[8,1]]},"3921":{"position":[[3,1]]},"3927":{"position":[[5,1]]},"3937":{"position":[[5,1]]},"3941":{"position":[[3,1]]},"3961":{"position":[[6,1],[11,1]]},"3965":{"position":[[7,1]]},"3967":{"position":[[7,1]]},"3973":{"position":[[3,1]]},"3997":{"position":[[3,1]]},"4003":{"position":[[5,1]]}}}],["20",{"_index":414,"t":{"703":{"position":[[2,2]]},"705":{"position":[[2,2]]},"707":{"position":[[2,2]]},"709":{"position":[[2,2]]},"710":{"position":[[2,2]]},"712":{"position":[[2,2]]},"714":{"position":[[2,2]]},"716":{"position":[[2,2]]},"718":{"position":[[2,2]]},"720":{"position":[[2,2]]},"721":{"position":[[2,2]]},"723":{"position":[[2,2]]},"725":{"position":[[2,2]]},"727":{"position":[[2,2]]},"729":{"position":[[2,2]]},"731":{"position":[[2,2]]},"733":{"position":[[2,2]]},"735":{"position":[[2,2]]},"1671":{"position":[[0,2]]},"1673":{"position":[[0,2]]},"1675":{"position":[[0,2]]},"1676":{"position":[[0,2]]},"1678":{"position":[[0,2]]},"1680":{"position":[[0,2]]},"1682":{"position":[[0,2]]},"1684":{"position":[[0,2]]},"1686":{"position":[[0,2]]},"1688":{"position":[[0,2]]},"1690":{"position":[[0,2]]},"1692":{"position":[[0,2]]},"2058":{"position":[[2,2]]},"3523":{"position":[[5,2]]},"3667":{"position":[[4,2]]},"3947":{"position":[[3,2]]}}}],["200",{"_index":1167,"t":{"3594":{"position":[[12,3]]}}}],["2019",{"_index":49,"t":{"50":{"position":[[17,4]]},"61":{"position":[[17,4]]},"74":{"position":[[17,4]]}}}],["2020",{"_index":259,"t":{"396":{"position":[[0,4]]}}}],["2021",{"_index":261,"t":{"398":{"position":[[0,4]]}}}],["2022",{"_index":262,"t":{"400":{"position":[[0,4]]}}}],["21",{"_index":563,"t":{"1140":{"position":[[2,2]]},"1142":{"position":[[2,2]]},"1144":{"position":[[2,2]]},"1146":{"position":[[2,2]]},"1148":{"position":[[2,2]]},"1150":{"position":[[2,2]]},"1152":{"position":[[2,2]]},"2060":{"position":[[2,2]]},"2516":{"position":[[0,2]]},"2518":{"position":[[0,2]]},"2520":{"position":[[0,2]]},"2521":{"position":[[0,2]]},"2523":{"position":[[0,2]]},"2525":{"position":[[0,2]]},"2527":{"position":[[0,2]]},"2529":{"position":[[0,2]]},"2531":{"position":[[0,2]]},"2533":{"position":[[0,2]]},"2535":{"position":[[0,2]]},"2537":{"position":[[0,2]]},"2539":{"position":[[0,2]]},"2541":{"position":[[0,2]]},"2543":{"position":[[0,2]]},"2545":{"position":[[0,2]]},"2546":{"position":[[0,2]]},"2548":{"position":[[0,2]]},"2550":{"position":[[0,2]]},"2552":{"position":[[0,2]]},"2554":{"position":[[0,2]]},"2556":{"position":[[0,2]]},"2558":{"position":[[0,2]]},"2560":{"position":[[0,2]]},"3525":{"position":[[5,2]]},"3669":{"position":[[4,2]]}}}],["22",{"_index":349,"t":{"564":{"position":[[2,2]]},"566":{"position":[[2,2]]},"568":{"position":[[2,2]]},"569":{"position":[[2,2]]},"571":{"position":[[2,2]]},"573":{"position":[[2,2]]},"575":{"position":[[2,2]]},"1696":{"position":[[0,2]]},"1698":{"position":[[0,2]]},"1700":{"position":[[0,2]]},"1702":{"position":[[0,2]]},"1704":{"position":[[0,2]]},"1706":{"position":[[0,2]]},"1708":{"position":[[0,2]]},"1710":{"position":[[0,2]]},"1712":{"position":[[0,2]]},"1792":{"position":[[0,2]]},"1794":{"position":[[0,2]]},"1796":{"position":[[0,2]]},"1798":{"position":[[0,2]]},"1800":{"position":[[0,2]]},"1802":{"position":[[0,2]]},"1804":{"position":[[0,2]]},"1806":{"position":[[0,2]]},"1808":{"position":[[0,2]]},"1810":{"position":[[0,2]]},"1812":{"position":[[0,2]]},"1814":{"position":[[0,2]]},"1816":{"position":[[0,2]]},"1818":{"position":[[0,2]]},"1820":{"position":[[0,2]]},"1822":{"position":[[0,2]]},"1824":{"position":[[0,2]]},"1826":{"position":[[0,2]]},"1828":{"position":[[0,2]]},"2062":{"position":[[2,2]]},"3527":{"position":[[5,2]]},"3671":{"position":[[4,2]]}}}],["23",{"_index":468,"t":{"840":{"position":[[2,2]]},"842":{"position":[[2,2]]},"843":{"position":[[2,2]]},"845":{"position":[[2,2]]},"847":{"position":[[2,2]]},"2064":{"position":[[2,2]]},"2340":{"position":[[0,2]]},"2342":{"position":[[0,2]]},"2344":{"position":[[0,2]]},"2346":{"position":[[0,2]]},"2347":{"position":[[0,2]]},"2349":{"position":[[0,2]]},"2351":{"position":[[0,2]]},"2353":{"position":[[0,2]]},"2355":{"position":[[0,2]]},"2356":{"position":[[0,2]]},"2358":{"position":[[0,2]]},"2360":{"position":[[0,2]]},"2362":{"position":[[0,2]]},"2364":{"position":[[0,2]]},"2366":{"position":[[0,2]]},"2368":{"position":[[0,2]]},"2370":{"position":[[0,2]]},"2372":{"position":[[0,2]]},"2374":{"position":[[0,2]]},"2376":{"position":[[0,2]]},"2378":{"position":[[0,2]]},"2380":{"position":[[0,2]]},"2382":{"position":[[0,2]]},"2384":{"position":[[0,2]]},"2386":{"position":[[0,2]]},"2388":{"position":[[0,2]]},"3529":{"position":[[5,2]]},"3673":{"position":[[4,2]]}}}],["24",{"_index":506,"t":{"923":{"position":[[2,2]]},"925":{"position":[[2,2]]},"926":{"position":[[2,2]]},"928":{"position":[[2,2]]},"930":{"position":[[2,2]]},"932":{"position":[[2,2]]},"934":{"position":[[2,2]]},"936":{"position":[[2,2]]},"3135":{"position":[[0,2]]},"3137":{"position":[[0,2]]},"3139":{"position":[[0,2]]},"3141":{"position":[[0,2]]},"3143":{"position":[[0,2]]},"3145":{"position":[[0,2]]},"3147":{"position":[[0,2]]},"3149":{"position":[[0,2]]},"3151":{"position":[[0,2]]},"3153":{"position":[[0,2]]},"3155":{"position":[[0,2]]},"3157":{"position":[[0,2]]},"3159":{"position":[[0,2]]},"3161":{"position":[[0,2]]},"3163":{"position":[[0,2]]},"3165":{"position":[[0,2]]},"3167":{"position":[[0,2]]},"3169":{"position":[[0,2]]},"3171":{"position":[[0,2]]},"3172":{"position":[[0,2]]},"3174":{"position":[[0,2]]},"3176":{"position":[[0,2]]},"3178":{"position":[[0,2]]},"3180":{"position":[[0,2]]},"3182":{"position":[[0,2]]},"3184":{"position":[[0,2]]},"3186":{"position":[[0,2]]},"3188":{"position":[[0,2]]},"3190":{"position":[[0,2]]},"3191":{"position":[[0,2]]},"3192":{"position":[[0,2]]},"3193":{"position":[[0,2]]},"3195":{"position":[[0,2]]},"3196":{"position":[[0,2]]},"3197":{"position":[[0,2]]},"3198":{"position":[[0,2]]},"3200":{"position":[[0,2]]},"3202":{"position":[[0,2]]},"3204":{"position":[[0,2]]},"3531":{"position":[[5,2]]},"3675":{"position":[[4,2]]}}}],["25",{"_index":437,"t":{"738":{"position":[[2,2]]},"740":{"position":[[2,2]]},"742":{"position":[[2,2]]},"744":{"position":[[2,2]]},"746":{"position":[[2,2]]},"748":{"position":[[2,2]]},"750":{"position":[[2,2]]},"752":{"position":[[2,2]]},"2802":{"position":[[0,2]]},"2804":{"position":[[0,2]]},"2806":{"position":[[0,2]]},"2808":{"position":[[0,2]]},"2810":{"position":[[0,2]]},"2812":{"position":[[0,2]]},"2814":{"position":[[0,2]]},"2816":{"position":[[0,2]]},"2818":{"position":[[0,2]]},"2820":{"position":[[0,2]]},"2822":{"position":[[0,2]]},"2824":{"position":[[0,2]]},"2826":{"position":[[0,2]]},"2828":{"position":[[0,2]]},"2830":{"position":[[0,2]]},"2832":{"position":[[0,2]]},"2833":{"position":[[0,2]]},"2835":{"position":[[0,2]]},"2837":{"position":[[0,2]]},"2839":{"position":[[0,2]]},"3677":{"position":[[4,2]]}}}],["26",{"_index":297,"t":{"468":{"position":[[0,2]]},"470":{"position":[[0,2]]},"471":{"position":[[0,2]]},"473":{"position":[[0,2]]},"475":{"position":[[0,2]]},"477":{"position":[[0,2]]},"479":{"position":[[0,2]]},"481":{"position":[[0,2]]},"483":{"position":[[0,2]]},"485":{"position":[[0,2]]},"487":{"position":[[0,2]]},"489":{"position":[[0,2]]},"491":{"position":[[0,2]]},"493":{"position":[[0,2]]},"495":{"position":[[0,2]]},"2392":{"position":[[0,2]]},"2394":{"position":[[0,2]]},"2396":{"position":[[0,2]]},"2397":{"position":[[0,2]]},"2399":{"position":[[0,2]]},"2401":{"position":[[0,2]]},"2403":{"position":[[0,2]]},"2405":{"position":[[0,2]]},"2407":{"position":[[0,2]]},"2408":{"position":[[0,2]]},"2410":{"position":[[0,2]]},"2412":{"position":[[0,2]]},"2414":{"position":[[0,2]]},"2416":{"position":[[0,2]]},"2417":{"position":[[0,2]]},"2419":{"position":[[0,2]]},"2421":{"position":[[0,2]]},"2423":{"position":[[0,2]]},"2425":{"position":[[0,2]]},"2427":{"position":[[0,2]]},"2429":{"position":[[0,2]]},"2431":{"position":[[0,2]]},"2433":{"position":[[0,2]]},"2435":{"position":[[0,2]]},"2437":{"position":[[0,2]]},"2439":{"position":[[0,2]]},"2441":{"position":[[0,2]]},"2443":{"position":[[0,2]]},"2445":{"position":[[0,2]]},"2447":{"position":[[0,2]]},"2449":{"position":[[0,2]]},"2451":{"position":[[0,2]]},"2453":{"position":[[0,2]]},"2455":{"position":[[0,2]]},"2457":{"position":[[0,2]]},"2459":{"position":[[0,2]]},"2461":{"position":[[0,2]]},"2463":{"position":[[0,2]]},"2465":{"position":[[0,2]]},"2467":{"position":[[0,2]]},"2469":{"position":[[0,2]]},"2471":{"position":[[0,2]]},"2473":{"position":[[0,2]]},"2475":{"position":[[0,2]]},"2477":{"position":[[0,2]]},"2479":{"position":[[0,2]]},"2481":{"position":[[0,2]]},"2483":{"position":[[0,2]]},"2485":{"position":[[0,2]]},"2487":{"position":[[0,2]]},"2489":{"position":[[0,2]]},"2491":{"position":[[0,2]]},"3281":{"position":[[2,2]]},"3283":{"position":[[2,2]]},"3285":{"position":[[2,2]]},"3286":{"position":[[2,2]]},"3288":{"position":[[2,2]]},"3290":{"position":[[2,2]]},"3292":{"position":[[2,2]]},"3293":{"position":[[2,2]]},"3295":{"position":[[2,2]]},"3297":{"position":[[2,2]]},"3679":{"position":[[4,2]]},"3759":{"position":[[0,2]]},"3761":{"position":[[0,2]]},"3763":{"position":[[0,2]]},"3765":{"position":[[0,2]]},"3767":{"position":[[0,2]]},"3769":{"position":[[0,2]]},"3771":{"position":[[0,2]]},"3773":{"position":[[0,2]]},"3775":{"position":[[0,2]]},"3776":{"position":[[0,2]]},"3778":{"position":[[0,2]]},"3780":{"position":[[0,2]]},"3782":{"position":[[0,2]]},"3784":{"position":[[0,2]]},"3786":{"position":[[0,2]]},"3788":{"position":[[0,2]]},"3790":{"position":[[0,2]]},"3792":{"position":[[0,2]]},"3794":{"position":[[0,2]]},"3796":{"position":[[0,2]]},"3797":{"position":[[0,2]]},"3799":{"position":[[0,2]]},"3801":{"position":[[0,2]]},"3803":{"position":[[0,2]]},"3805":{"position":[[0,2]]},"3807":{"position":[[0,2]]},"3809":{"position":[[0,2]]},"3811":{"position":[[0,2]]},"3813":{"position":[[0,2]]},"3814":{"position":[[0,2]]},"3816":{"position":[[0,2]]},"3818":{"position":[[0,2]]},"3820":{"position":[[0,2]]},"3822":{"position":[[0,2]]},"3823":{"position":[[0,2]]},"3825":{"position":[[0,2]]},"3827":{"position":[[0,2]]},"3829":{"position":[[0,2]]},"3831":{"position":[[0,2]]},"3833":{"position":[[0,2]]},"3835":{"position":[[0,2]]},"3837":{"position":[[0,2]]},"3839":{"position":[[0,2]]},"3841":{"position":[[0,2]]},"3843":{"position":[[0,2]]},"3845":{"position":[[0,2]]},"3847":{"position":[[0,2]]},"3849":{"position":[[0,2]]},"3851":{"position":[[0,2]]},"3853":{"position":[[0,2]]},"3855":{"position":[[0,2]]},"3857":{"position":[[0,2]]},"3859":{"position":[[0,2]]},"3861":{"position":[[0,2]]},"3863":{"position":[[0,2]]},"3865":{"position":[[0,2]]},"3867":{"position":[[0,2]]},"3869":{"position":[[0,2]]},"3871":{"position":[[0,2]]},"3873":{"position":[[0,2]]},"3875":{"position":[[0,2]]},"3877":{"position":[[0,2]]},"3879":{"position":[[0,2]]},"3881":{"position":[[0,2]]},"3883":{"position":[[0,2]]},"3885":{"position":[[0,2]]},"3887":{"position":[[0,2]]},"3889":{"position":[[0,2]]},"3891":{"position":[[0,2]]},"3893":{"position":[[0,2]]},"3895":{"position":[[0,2]]},"3897":{"position":[[0,2]]},"3899":{"position":[[0,2]]},"3901":{"position":[[0,2]]},"3903":{"position":[[0,2]]},"3905":{"position":[[0,2]]}}}],["27",{"_index":532,"t":{"1045":{"position":[[2,2]]},"1047":{"position":[[2,2]]},"1049":{"position":[[2,2]]},"1051":{"position":[[2,2]]},"1053":{"position":[[2,2]]},"1055":{"position":[[2,2]]},"1057":{"position":[[2,2]]},"1059":{"position":[[2,2]]},"1061":{"position":[[2,2]]},"1063":{"position":[[2,2]]},"1065":{"position":[[2,2]]},"1067":{"position":[[2,2]]},"1069":{"position":[[2,2]]},"1070":{"position":[[2,2]]},"1072":{"position":[[2,2]]},"1074":{"position":[[2,2]]},"1076":{"position":[[2,2]]},"1077":{"position":[[2,2]]},"1078":{"position":[[2,2]]},"1079":{"position":[[2,2]]},"1080":{"position":[[2,2]]},"1081":{"position":[[2,2]]},"1083":{"position":[[2,2]]},"1084":{"position":[[2,2]]},"1085":{"position":[[2,2]]},"1086":{"position":[[2,2]]},"1087":{"position":[[2,2]]},"1088":{"position":[[2,2]]},"1089":{"position":[[2,2]]},"1090":{"position":[[2,2]]},"1091":{"position":[[2,2]]},"1092":{"position":[[2,2]]},"1093":{"position":[[2,2]]},"1094":{"position":[[2,2]]},"1095":{"position":[[2,2]]},"1096":{"position":[[2,2]]},"1098":{"position":[[2,2]]},"2325":{"position":[[0,2]]},"2327":{"position":[[0,2]]},"2329":{"position":[[0,2]]},"2330":{"position":[[0,2]]},"2332":{"position":[[0,2]]},"2334":{"position":[[0,2]]},"2336":{"position":[[0,2]]},"3681":{"position":[[4,2]]}}}],["28",{"_index":959,"t":{"2614":{"position":[[0,2]]},"2616":{"position":[[0,2]]},"2618":{"position":[[0,2]]},"2620":{"position":[[0,2]]},"2622":{"position":[[0,2]]},"2624":{"position":[[0,2]]},"2626":{"position":[[0,2]]},"2628":{"position":[[0,2]]},"2630":{"position":[[0,2]]},"3087":{"position":[[2,2]]},"3089":{"position":[[2,2]]},"3091":{"position":[[2,2]]},"3093":{"position":[[2,2]]},"3095":{"position":[[2,2]]},"3097":{"position":[[2,2]]},"3099":{"position":[[2,2]]},"3101":{"position":[[2,2]]},"3103":{"position":[[2,2]]},"3105":{"position":[[2,2]]},"3107":{"position":[[2,2]]},"3109":{"position":[[2,2]]},"3111":{"position":[[2,2]]},"3113":{"position":[[2,2]]},"3115":{"position":[[2,2]]},"3117":{"position":[[2,2]]},"3119":{"position":[[2,2]]},"3121":{"position":[[2,2]]},"3123":{"position":[[2,2]]},"3125":{"position":[[2,2]]},"3127":{"position":[[2,2]]},"3683":{"position":[[4,2]]}}}],["29",{"_index":167,"t":{"260":{"position":[[0,2]]},"262":{"position":[[0,2]]},"264":{"position":[[0,2]]},"266":{"position":[[0,2]]},"268":{"position":[[0,2]]},"269":{"position":[[0,2]]},"271":{"position":[[0,2]]},"273":{"position":[[0,2]]},"275":{"position":[[0,2]]},"277":{"position":[[0,2]]},"279":{"position":[[0,2]]},"281":{"position":[[0,2]]},"283":{"position":[[0,2]]},"285":{"position":[[0,2]]},"287":{"position":[[0,2]]},"289":{"position":[[0,2]]},"291":{"position":[[0,2]]},"293":{"position":[[0,2]]},"295":{"position":[[0,2]]},"1565":{"position":[[2,2]]},"1567":{"position":[[2,2]]},"3685":{"position":[[4,2]]}}}],["3",{"_index":80,"t":{"113":{"position":[[4,1]]},"128":{"position":[[5,1]]},"130":{"position":[[3,1]]},"132":{"position":[[3,1]]},"134":{"position":[[3,1]]},"147":{"position":[[5,1]]},"178":{"position":[[3,1]]},"180":{"position":[[3,1]]},"181":{"position":[[3,1]]},"183":{"position":[[3,1]]},"185":{"position":[[3,1],[5,1]]},"187":{"position":[[3,1],[5,1]]},"189":{"position":[[3,1],[5,1]]},"191":{"position":[[3,1],[5,1],[7,1]]},"193":{"position":[[3,1]]},"201":{"position":[[0,1]]},"203":{"position":[[0,1]]},"205":{"position":[[0,1]]},"207":{"position":[[0,1]]},"209":{"position":[[0,1]]},"211":{"position":[[0,1],[6,1]]},"213":{"position":[[0,1]]},"215":{"position":[[0,1],[4,1]]},"217":{"position":[[0,1]]},"219":{"position":[[0,1]]},"221":{"position":[[0,1]]},"228":{"position":[[3,1]]},"230":{"position":[[3,1]]},"232":{"position":[[3,1]]},"234":{"position":[[3,1],[5,1]]},"236":{"position":[[3,1]]},"244":{"position":[[5,1]]},"268":{"position":[[3,1]]},"269":{"position":[[3,1]]},"271":{"position":[[3,1]]},"273":{"position":[[3,1],[5,1]]},"275":{"position":[[3,1]]},"277":{"position":[[3,1]]},"279":{"position":[[3,1]]},"281":{"position":[[3,1]]},"283":{"position":[[3,1]]},"285":{"position":[[3,1]]},"287":{"position":[[3,1]]},"289":{"position":[[3,1]]},"291":{"position":[[3,1]]},"293":{"position":[[3,1]]},"303":{"position":[[4,1]]},"305":{"position":[[2,1],[4,1]]},"307":{"position":[[4,1]]},"309":{"position":[[4,1],[6,1]]},"335":{"position":[[0,1]]},"337":{"position":[[0,1]]},"339":{"position":[[0,1],[4,1]]},"341":{"position":[[0,1]]},"343":{"position":[[0,1]]},"345":{"position":[[0,1]]},"347":{"position":[[0,1],[6,1]]},"349":{"position":[[0,1],[6,1]]},"351":{"position":[[0,1]]},"352":{"position":[[0,1]]},"354":{"position":[[0,1]]},"356":{"position":[[0,1]]},"358":{"position":[[0,1]]},"360":{"position":[[0,1]]},"362":{"position":[[0,1],[6,1]]},"364":{"position":[[0,1]]},"366":{"position":[[0,1]]},"368":{"position":[[0,1]]},"370":{"position":[[0,1]]},"372":{"position":[[0,1]]},"374":{"position":[[0,1]]},"381":{"position":[[3,1]]},"407":{"position":[[3,1]]},"436":{"position":[[6,1]]},"440":{"position":[[4,1]]},"442":{"position":[[4,1]]},"475":{"position":[[7,1]]},"481":{"position":[[5,1]]},"503":{"position":[[4,1]]},"517":{"position":[[6,1]]},"547":{"position":[[5,1]]},"549":{"position":[[5,1]]},"551":{"position":[[5,1]]},"559":{"position":[[7,1]]},"568":{"position":[[5,1]]},"569":{"position":[[5,1]]},"571":{"position":[[5,1]]},"573":{"position":[[5,1],[7,1]]},"582":{"position":[[2,1]]},"584":{"position":[[2,1]]},"586":{"position":[[2,1]]},"598":{"position":[[4,1]]},"605":{"position":[[4,1]]},"624":{"position":[[4,1]]},"638":{"position":[[5,1]]},"648":{"position":[[4,1]]},"664":{"position":[[4,1]]},"684":{"position":[[7,1]]},"686":{"position":[[5,1]]},"687":{"position":[[5,1]]},"689":{"position":[[5,1]]},"691":{"position":[[5,1],[7,1]]},"693":{"position":[[5,1]]},"695":{"position":[[5,1]]},"710":{"position":[[7,1]]},"716":{"position":[[5,1]]},"725":{"position":[[7,1]]},"742":{"position":[[5,1]]},"744":{"position":[[5,1]]},"746":{"position":[[5,1]]},"762":{"position":[[6,1]]},"764":{"position":[[4,1]]},"766":{"position":[[4,1]]},"768":{"position":[[4,1]]},"770":{"position":[[4,1],[6,1]]},"782":{"position":[[4,1]]},"808":{"position":[[5,1]]},"809":{"position":[[5,1]]},"811":{"position":[[5,1]]},"813":{"position":[[5,1],[7,1]]},"815":{"position":[[5,1]]},"823":{"position":[[7,1]]},"831":{"position":[[7,1]]},"847":{"position":[[5,1]]},"854":{"position":[[5,1]]},"863":{"position":[[7,1]]},"874":{"position":[[7,1]]},"900":{"position":[[5,1]]},"908":{"position":[[7,1]]},"930":{"position":[[7,1]]},"934":{"position":[[5,1]]},"944":{"position":[[4,1]]},"957":{"position":[[5,1]]},"968":{"position":[[7,1]]},"993":{"position":[[6,1]]},"1019":{"position":[[4,1]]},"1021":{"position":[[4,1]]},"1023":{"position":[[4,1]]},"1025":{"position":[[4,1],[6,1]]},"1032":{"position":[[6,1]]},"1057":{"position":[[7,1]]},"1067":{"position":[[5,1]]},"1074":{"position":[[7,1]]},"1079":{"position":[[7,1]]},"1090":{"position":[[7,1]]},"1112":{"position":[[7,1]]},"1124":{"position":[[5,1]]},"1126":{"position":[[5,1]]},"1128":{"position":[[5,1]]},"1130":{"position":[[5,1]]},"1148":{"position":[[5,1]]},"1163":{"position":[[7,1]]},"1171":{"position":[[5,1]]},"1172":{"position":[[5,1]]},"1174":{"position":[[5,1]]},"1176":{"position":[[5,1],[7,1]]},"1178":{"position":[[5,1]]},"1180":{"position":[[5,1]]},"1182":{"position":[[5,1]]},"1184":{"position":[[5,1]]},"1207":{"position":[[8,1]]},"1224":{"position":[[5,1]]},"1226":{"position":[[5,1]]},"1228":{"position":[[5,1]]},"1230":{"position":[[5,1],[7,1]]},"1237":{"position":[[7,1]]},"1254":{"position":[[7,1]]},"1276":{"position":[[7,1]]},"1292":{"position":[[5,1]]},"1294":{"position":[[5,1]]},"1296":{"position":[[5,1]]},"1312":{"position":[[6,1]]},"1328":{"position":[[4,1]]},"1365":{"position":[[5,1]]},"1380":{"position":[[5,1]]},"1388":{"position":[[3,1]]},"1395":{"position":[[5,1]]},"1402":{"position":[[5,1]]},"1411":{"position":[[5,1]]},"1429":{"position":[[6,1]]},"1437":{"position":[[6,1]]},"1448":{"position":[[7,1]]},"1455":{"position":[[7,1]]},"1459":{"position":[[5,1]]},"1460":{"position":[[5,1]]},"1461":{"position":[[5,1]]},"1462":{"position":[[5,1],[7,1]]},"1463":{"position":[[5,1]]},"1464":{"position":[[5,1]]},"1471":{"position":[[7,1]]},"1486":{"position":[[5,1]]},"1487":{"position":[[5,1]]},"1494":{"position":[[7,1]]},"1512":{"position":[[4,1]]},"1525":{"position":[[5,1]]},"1531":{"position":[[3,1]]},"1533":{"position":[[3,1]]},"1534":{"position":[[3,1]]},"1536":{"position":[[3,1],[5,1]]},"1538":{"position":[[3,1]]},"1540":{"position":[[3,1]]},"1542":{"position":[[3,1]]},"1560":{"position":[[5,1]]},"1579":{"position":[[4,1]]},"1595":{"position":[[6,1]]},"1606":{"position":[[6,1]]},"1644":{"position":[[6,1]]},"1675":{"position":[[3,1]]},"1676":{"position":[[3,1]]},"1678":{"position":[[3,1]]},"1680":{"position":[[3,1],[5,1]]},"1682":{"position":[[3,1]]},"1684":{"position":[[3,1]]},"1686":{"position":[[3,1]]},"1704":{"position":[[5,1]]},"1708":{"position":[[3,1]]},"1722":{"position":[[3,1]]},"1723":{"position":[[3,1]]},"1725":{"position":[[3,1]]},"1742":{"position":[[5,1]]},"1752":{"position":[[5,1]]},"1760":{"position":[[2,1]]},"1762":{"position":[[2,1]]},"1764":{"position":[[2,1]]},"1766":{"position":[[2,1]]},"1768":{"position":[[2,1],[6,1]]},"1770":{"position":[[2,1]]},"1772":{"position":[[2,1]]},"1774":{"position":[[2,1],[4,1]]},"1776":{"position":[[2,1]]},"1778":{"position":[[2,1]]},"1780":{"position":[[2,1]]},"1782":{"position":[[2,1]]},"1784":{"position":[[2,1]]},"1786":{"position":[[2,1]]},"1788":{"position":[[2,1]]},"1796":{"position":[[3,1]]},"1835":{"position":[[2,1]]},"1836":{"position":[[2,1]]},"1838":{"position":[[2,1]]},"1858":{"position":[[4,1]]},"1891":{"position":[[2,1]]},"1893":{"position":[[2,1]]},"1895":{"position":[[2,1]]},"1897":{"position":[[2,1],[4,1]]},"1899":{"position":[[2,1]]},"1900":{"position":[[2,1]]},"1902":{"position":[[2,1]]},"1904":{"position":[[2,1]]},"1906":{"position":[[2,1]]},"1908":{"position":[[2,1]]},"1910":{"position":[[2,1]]},"1912":{"position":[[2,1]]},"1914":{"position":[[2,1]]},"1916":{"position":[[2,1]]},"1918":{"position":[[2,1]]},"1920":{"position":[[2,1]]},"1922":{"position":[[2,1]]},"1924":{"position":[[2,1]]},"1926":{"position":[[2,1]]},"1928":{"position":[[2,1],[6,1]]},"1930":{"position":[[2,1]]},"1932":{"position":[[2,1]]},"1934":{"position":[[2,1]]},"1936":{"position":[[2,1],[6,1]]},"1938":{"position":[[2,1]]},"1940":{"position":[[2,1]]},"1942":{"position":[[2,1]]},"1944":{"position":[[2,1],[7,1]]},"1946":{"position":[[2,1]]},"1948":{"position":[[2,1]]},"1950":{"position":[[2,1]]},"1952":{"position":[[2,1]]},"1954":{"position":[[2,1]]},"1956":{"position":[[2,1]]},"1958":{"position":[[2,1]]},"1960":{"position":[[2,1]]},"1962":{"position":[[2,1]]},"1964":{"position":[[2,1]]},"1966":{"position":[[2,1]]},"1975":{"position":[[2,1]]},"1976":{"position":[[2,1]]},"1978":{"position":[[2,1]]},"1989":{"position":[[2,1]]},"1990":{"position":[[2,1]]},"1997":{"position":[[0,1]]},"1999":{"position":[[0,1]]},"2001":{"position":[[0,1],[2,1]]},"2003":{"position":[[0,1]]},"2012":{"position":[[2,1]]},"2013":{"position":[[2,1]]},"2024":{"position":[[2,1]]},"2072":{"position":[[3,1]]},"2082":{"position":[[2,1]]},"2093":{"position":[[3,1]]},"2106":{"position":[[2,1]]},"2135":{"position":[[3,1]]},"2150":{"position":[[2,1]]},"2161":{"position":[[2,1]]},"2178":{"position":[[3,1]]},"2185":{"position":[[3,1]]},"2194":{"position":[[2,1]]},"2211":{"position":[[3,1]]},"2238":{"position":[[6,1]]},"2240":{"position":[[4,1]]},"2242":{"position":[[4,1]]},"2244":{"position":[[4,1]]},"2246":{"position":[[4,1],[6,1]]},"2248":{"position":[[4,1]]},"2250":{"position":[[4,1]]},"2252":{"position":[[4,1]]},"2267":{"position":[[4,1]]},"2268":{"position":[[4,1]]},"2275":{"position":[[6,1]]},"2293":{"position":[[4,1]]},"2295":{"position":[[4,1]]},"2306":{"position":[[3,1]]},"2314":{"position":[[5,1]]},"2329":{"position":[[3,1]]},"2330":{"position":[[3,1]]},"2332":{"position":[[3,1]]},"2334":{"position":[[3,1],[5,1]]},"2344":{"position":[[3,1]]},"2351":{"position":[[5,1]]},"2360":{"position":[[5,1]]},"2396":{"position":[[3,1]]},"2397":{"position":[[3,1]]},"2399":{"position":[[3,1]]},"2401":{"position":[[3,1],[5,1]]},"2403":{"position":[[3,1]]},"2405":{"position":[[3,1]]},"2412":{"position":[[5,1]]},"2421":{"position":[[5,1]]},"2451":{"position":[[5,1]]},"2498":{"position":[[4,1]]},"2520":{"position":[[3,1]]},"2521":{"position":[[3,1]]},"2523":{"position":[[3,1]]},"2533":{"position":[[5,1]]},"2548":{"position":[[5,1]]},"2570":{"position":[[6,1]]},"2574":{"position":[[4,1]]},"2576":{"position":[[4,1]]},"2578":{"position":[[4,1]]},"2580":{"position":[[4,1],[6,1]]},"2598":{"position":[[3,1]]},"2600":{"position":[[3,1]]},"2602":{"position":[[3,1]]},"2604":{"position":[[3,1],[5,1]]},"2606":{"position":[[3,1],[5,1]]},"2608":{"position":[[3,1],[5,1]]},"2610":{"position":[[3,1]]},"2620":{"position":[[3,1]]},"2622":{"position":[[3,1]]},"2624":{"position":[[3,1]]},"2640":{"position":[[6,1]]},"2652":{"position":[[6,1]]},"2656":{"position":[[4,1]]},"2667":{"position":[[6,1]]},"2685":{"position":[[3,1]]},"2687":{"position":[[3,1]]},"2689":{"position":[[3,1]]},"2691":{"position":[[3,1],[5,1]]},"2693":{"position":[[3,1]]},"2704":{"position":[[4,1]]},"2706":{"position":[[4,1]]},"2708":{"position":[[4,1]]},"2710":{"position":[[4,1],[6,1]]},"2712":{"position":[[4,1]]},"2714":{"position":[[4,1]]},"2743":{"position":[[5,1]]},"2744":{"position":[[5,1]]},"2746":{"position":[[5,1]]},"2748":{"position":[[5,1],[7,1]]},"2750":{"position":[[5,1]]},"2757":{"position":[[7,1]]},"2773":{"position":[[2,1]]},"2775":{"position":[[2,1]]},"2777":{"position":[[2,1],[4,1]]},"2789":{"position":[[5,1]]},"2793":{"position":[[3,1]]},"2795":{"position":[[3,1]]},"2797":{"position":[[3,1]]},"2808":{"position":[[3,1]]},"2810":{"position":[[3,1]]},"2812":{"position":[[3,1]]},"2814":{"position":[[3,1],[5,1]]},"2816":{"position":[[3,1]]},"2818":{"position":[[3,1]]},"2820":{"position":[[3,1]]},"2828":{"position":[[5,1]]},"2849":{"position":[[5,1]]},"2857":{"position":[[3,1]]},"2865":{"position":[[4,1]]},"2878":{"position":[[6,1]]},"2890":{"position":[[6,1]]},"2913":{"position":[[3,1]]},"2914":{"position":[[3,1]]},"2916":{"position":[[3,1]]},"2918":{"position":[[3,1],[5,1]]},"2928":{"position":[[5,1]]},"2944":{"position":[[5,1]]},"2958":{"position":[[5,1]]},"2982":{"position":[[2,1]]},"2992":{"position":[[2,1]]},"3002":{"position":[[2,1]]},"3010":{"position":[[2,1]]},"3024":{"position":[[2,1]]},"3032":{"position":[[2,1]]},"3040":{"position":[[2,1]]},"3048":{"position":[[3,1]]},"3052":{"position":[[0,1]]},"3054":{"position":[[0,1]]},"3056":{"position":[[0,1],[2,1]]},"3064":{"position":[[2,1]]},"3072":{"position":[[5,1]]},"3081":{"position":[[7,1]]},"3095":{"position":[[7,1]]},"3097":{"position":[[5,1]]},"3099":{"position":[[5,1]]},"3101":{"position":[[5,1]]},"3103":{"position":[[5,1],[7,1]]},"3111":{"position":[[7,1]]},"3119":{"position":[[7,1]]},"3130":{"position":[[2,1]]},"3132":{"position":[[2,1]]},"3139":{"position":[[3,1]]},"3141":{"position":[[3,1]]},"3157":{"position":[[5,1]]},"3165":{"position":[[5,1]]},"3176":{"position":[[5,1]]},"3195":{"position":[[6,1]]},"3202":{"position":[[6,1]]},"3212":{"position":[[5,1]]},"3221":{"position":[[7,1]]},"3255":{"position":[[5,1]]},"3264":{"position":[[7,1]]},"3285":{"position":[[5,1]]},"3286":{"position":[[5,1]]},"3288":{"position":[[5,1]]},"3290":{"position":[[5,1]]},"3304":{"position":[[4,1]]},"3322":{"position":[[4,1]]},"3340":{"position":[[5,1]]},"3342":{"position":[[5,1]]},"3344":{"position":[[5,1]]},"3353":{"position":[[5,1]]},"3361":{"position":[[7,1]]},"3372":{"position":[[7,1]]},"3382":{"position":[[7,1]]},"3400":{"position":[[7,1]]},"3415":{"position":[[3,1]]},"3423":{"position":[[5,1]]},"3433":{"position":[[5,1]]},"3449":{"position":[[5,1]]},"3479":{"position":[[3,1]]},"3480":{"position":[[3,1]]},"3482":{"position":[[3,1]]},"3489":{"position":[[5,1]]},"3538":{"position":[[5,1]]},"3578":{"position":[[5,1]]},"3590":{"position":[[5,1]]},"3611":{"position":[[2,1]]},"3613":{"position":[[2,1]]},"3615":{"position":[[2,1]]},"3617":{"position":[[2,1],[4,1]]},"3619":{"position":[[2,1]]},"3621":{"position":[[2,1]]},"3623":{"position":[[2,1]]},"3633":{"position":[[4,1]]},"3713":{"position":[[4,1]]},"3730":{"position":[[3,1]]},"3731":{"position":[[3,1]]},"3733":{"position":[[3,1]]},"3735":{"position":[[3,1],[5,1]]},"3737":{"position":[[3,1]]},"3739":{"position":[[3,1]]},"3747":{"position":[[5,1]]},"3767":{"position":[[7,1]]},"3775":{"position":[[5,1]]},"3776":{"position":[[5,1]]},"3778":{"position":[[5,1]]},"3780":{"position":[[5,1],[7,1]]},"3782":{"position":[[5,1]]},"3784":{"position":[[5,1]]},"3792":{"position":[[7,1]]},"3801":{"position":[[7,1]]},"3818":{"position":[[7,1]]},"3839":{"position":[[8,1]]},"3865":{"position":[[8,1]]},"3919":{"position":[[3,1]]},"3939":{"position":[[3,1],[5,1]]},"3971":{"position":[[3,1]]},"4001":{"position":[[5,1]]}}}],["30",{"_index":991,"t":{"2781":{"position":[[0,2]]},"2783":{"position":[[0,2]]},"2785":{"position":[[0,2]]},"2787":{"position":[[0,2]]},"2789":{"position":[[0,2]]},"2791":{"position":[[0,2]]},"2793":{"position":[[0,2]]},"2795":{"position":[[0,2]]},"2797":{"position":[[0,2]]},"2799":{"position":[[0,2]]},"3687":{"position":[[4,2]]}}}],["31",{"_index":747,"t":{"1716":{"position":[[0,2]]},"1718":{"position":[[0,2]]},"1720":{"position":[[0,2]]},"1722":{"position":[[0,2]]},"1723":{"position":[[0,2]]},"1725":{"position":[[0,2]]},"1727":{"position":[[0,2]]},"1728":{"position":[[0,2]]},"1730":{"position":[[0,2]]},"1732":{"position":[[0,2]]},"1734":{"position":[[0,2]]},"1736":{"position":[[0,2]]},"1738":{"position":[[0,2]]},"1740":{"position":[[0,2]]},"1742":{"position":[[0,2]]},"1744":{"position":[[0,2]]},"1746":{"position":[[0,2]]},"1748":{"position":[[0,2]]},"1750":{"position":[[0,2]]},"1752":{"position":[[0,2]]},"1754":{"position":[[0,2]]},"1756":{"position":[[0,2]]},"3689":{"position":[[4,2]]}}}],["32",{"_index":1007,"t":{"2842":{"position":[[0,2]]},"2844":{"position":[[0,2]]},"2845":{"position":[[0,2]]},"2847":{"position":[[0,2]]},"2849":{"position":[[0,2]]},"2851":{"position":[[0,2]]},"2853":{"position":[[0,2]]},"2855":{"position":[[0,2]]},"2857":{"position":[[0,2]]},"3691":{"position":[[4,2]]}}}],["33",{"_index":891,"t":{"2302":{"position":[[0,2]]},"2304":{"position":[[0,2]]},"2306":{"position":[[0,2]]},"2308":{"position":[[0,2]]},"2310":{"position":[[0,2]]},"2312":{"position":[[0,2]]},"2314":{"position":[[0,2]]},"2316":{"position":[[0,2]]},"2318":{"position":[[0,2]]},"2322":{"position":[[0,2]]},"3693":{"position":[[4,2]]}}}],["34",{"_index":601,"t":{"1373":{"position":[[0,2]]},"1375":{"position":[[0,2]]},"1376":{"position":[[0,2]]},"1378":{"position":[[0,2]]},"1380":{"position":[[0,2]]},"1445":{"position":[[0,2]]},"1446":{"position":[[0,2]]},"1447":{"position":[[0,2]]},"1448":{"position":[[0,2]]},"1449":{"position":[[0,2]]},"1450":{"position":[[0,2]]},"1451":{"position":[[0,2]]},"1453":{"position":[[0,2]]},"1455":{"position":[[0,2]]},"1457":{"position":[[0,2]]},"1459":{"position":[[0,2]]},"1460":{"position":[[0,2]]},"1461":{"position":[[0,2]]},"1462":{"position":[[0,2]]},"1463":{"position":[[0,2]]},"1464":{"position":[[0,2]]},"1466":{"position":[[0,2]]},"1467":{"position":[[0,2]]},"1469":{"position":[[0,2]]},"1471":{"position":[[0,2]]},"1473":{"position":[[0,2]]},"1475":{"position":[[0,2]]},"2320":{"position":[[0,2]]},"2739":{"position":[[0,2]]},"2741":{"position":[[0,2]]},"2743":{"position":[[0,2]]},"2744":{"position":[[0,2]]},"2746":{"position":[[0,2]]},"2748":{"position":[[0,2]]},"2750":{"position":[[0,2]]},"2752":{"position":[[0,2]]},"2753":{"position":[[0,2]]},"2755":{"position":[[0,2]]},"2757":{"position":[[0,2]]},"2759":{"position":[[0,2]]},"2761":{"position":[[0,2]]},"2763":{"position":[[0,2]]},"2765":{"position":[[0,2]]},"3068":{"position":[[0,2]]},"3070":{"position":[[0,2]]},"3072":{"position":[[0,2]]},"3074":{"position":[[0,2]]},"3076":{"position":[[0,2]]},"3077":{"position":[[0,2]]},"3079":{"position":[[0,2]]},"3081":{"position":[[0,2]]},"3083":{"position":[[0,2]]},"3336":{"position":[[0,2]]},"3338":{"position":[[0,2]]},"3340":{"position":[[0,2]]},"3342":{"position":[[0,2]]},"3344":{"position":[[0,2]]},"3346":{"position":[[0,2]]},"3695":{"position":[[4,2]]}}}],["35",{"_index":656,"t":{"1478":{"position":[[0,2]]},"1480":{"position":[[0,2]]},"1482":{"position":[[0,2]]},"1484":{"position":[[0,2]]},"1486":{"position":[[0,2]]},"1487":{"position":[[0,2]]},"1489":{"position":[[0,2]]},"1490":{"position":[[0,2]]},"1492":{"position":[[0,2]]},"1494":{"position":[[0,2]]},"1496":{"position":[[0,2]]},"1498":{"position":[[0,2]]},"1500":{"position":[[0,2]]},"3697":{"position":[[4,2]]}}}],["36",{"_index":128,"t":{"178":{"position":[[0,2]]},"180":{"position":[[0,2]]},"181":{"position":[[0,2]]},"183":{"position":[[0,2]]},"185":{"position":[[0,2]]},"187":{"position":[[0,2]]},"189":{"position":[[0,2]]},"191":{"position":[[0,2]]},"193":{"position":[[0,2]]},"3349":{"position":[[0,2]]},"3351":{"position":[[0,2]]},"3353":{"position":[[0,2]]},"3355":{"position":[[0,2]]},"3357":{"position":[[0,2]]},"3358":{"position":[[0,2]]},"3359":{"position":[[0,2]]},"3361":{"position":[[0,2]]},"3363":{"position":[[0,2]]},"3364":{"position":[[0,2]]},"3366":{"position":[[0,2]]},"3368":{"position":[[0,2]]},"3370":{"position":[[0,2]]},"3372":{"position":[[0,2]]},"3374":{"position":[[0,2]]},"3376":{"position":[[0,2]]},"3378":{"position":[[0,2]]},"3380":{"position":[[0,2]]},"3382":{"position":[[0,2]]},"3384":{"position":[[0,2]]},"3386":{"position":[[0,2]]},"3388":{"position":[[0,2]]},"3390":{"position":[[0,2]]},"3392":{"position":[[0,2]]},"3394":{"position":[[0,2]]},"3396":{"position":[[0,2]]},"3398":{"position":[[0,2]]},"3400":{"position":[[0,2]]},"3402":{"position":[[0,2]]},"3404":{"position":[[0,2]]},"3406":{"position":[[0,2]]},"3408":{"position":[[0,2]]},"3699":{"position":[[4,2]]}}}],["37",{"_index":676,"t":{"1515":{"position":[[0,2]]},"1517":{"position":[[0,2]]},"1519":{"position":[[0,2]]},"1521":{"position":[[0,2]]},"1523":{"position":[[0,2]]},"1525":{"position":[[0,2]]},"1527":{"position":[[0,2]]},"1529":{"position":[[0,2]]},"1531":{"position":[[0,2]]},"1533":{"position":[[0,2]]},"1534":{"position":[[0,2]]},"1536":{"position":[[0,2]]},"1538":{"position":[[0,2]]},"1540":{"position":[[0,2]]},"1542":{"position":[[0,2]]},"1544":{"position":[[0,2]]},"1546":{"position":[[0,2]]},"1548":{"position":[[0,2]]},"1550":{"position":[[0,2]]},"1552":{"position":[[0,2]]},"1554":{"position":[[0,2]]},"1556":{"position":[[0,2]]},"1558":{"position":[[0,2]]},"1560":{"position":[[0,2]]},"1562":{"position":[[0,2]]},"3701":{"position":[[4,2]]}}}],["38",{"_index":242,"t":{"377":{"position":[[0,2]]},"379":{"position":[[0,2]]},"381":{"position":[[0,2]]},"383":{"position":[[0,2]]},"385":{"position":[[0,2]]},"387":{"position":[[0,2]]},"389":{"position":[[0,2]]},"391":{"position":[[0,2]]},"393":{"position":[[0,2]]},"3703":{"position":[[4,2]]}}}],["4",{"_index":75,"t":{"109":{"position":[[2,1]]},"111":{"position":[[2,1]]},"113":{"position":[[2,1]]},"115":{"position":[[2,1],[4,1]]},"136":{"position":[[3,1]]},"138":{"position":[[3,1]]},"140":{"position":[[3,1]]},"193":{"position":[[5,1]]},"198":{"position":[[2,1]]},"213":{"position":[[6,1]]},"217":{"position":[[4,1]]},"236":{"position":[[5,1]]},"238":{"position":[[3,1]]},"240":{"position":[[3,1]]},"242":{"position":[[3,1]]},"244":{"position":[[3,1]]},"246":{"position":[[3,1],[5,1]]},"248":{"position":[[3,1]]},"250":{"position":[[3,1]]},"275":{"position":[[5,1]]},"295":{"position":[[3,1]]},"311":{"position":[[4,1]]},"313":{"position":[[4,1]]},"315":{"position":[[4,1]]},"341":{"position":[[4,1]]},"343":{"position":[[4,1]]},"345":{"position":[[4,1]]},"347":{"position":[[4,1]]},"349":{"position":[[4,1]]},"383":{"position":[[3,1]]},"409":{"position":[[3,1]]},"410":{"position":[[3,1]]},"412":{"position":[[3,1]]},"428":{"position":[[0,1]]},"430":{"position":[[0,1]]},"432":{"position":[[0,1]]},"434":{"position":[[0,1]]},"436":{"position":[[0,1]]},"438":{"position":[[0,1],[6,1]]},"440":{"position":[[0,1]]},"442":{"position":[[0,1]]},"444":{"position":[[0,1],[4,1]]},"446":{"position":[[0,1],[4,1]]},"448":{"position":[[0,1],[4,1]]},"450":{"position":[[0,1]]},"452":{"position":[[0,1]]},"454":{"position":[[0,1]]},"456":{"position":[[0,1]]},"458":{"position":[[0,1]]},"460":{"position":[[0,1]]},"462":{"position":[[0,1]]},"464":{"position":[[0,1]]},"477":{"position":[[7,1]]},"483":{"position":[[5,1]]},"505":{"position":[[4,1]]},"507":{"position":[[4,1]]},"509":{"position":[[4,1]]},"519":{"position":[[6,1]]},"553":{"position":[[5,1]]},"555":{"position":[[5,1]]},"557":{"position":[[5,1]]},"559":{"position":[[5,1]]},"575":{"position":[[5,1]]},"588":{"position":[[2,1]]},"590":{"position":[[2,1]]},"607":{"position":[[4,1]]},"626":{"position":[[4,1]]},"650":{"position":[[4,1]]},"666":{"position":[[4,1]]},"693":{"position":[[7,1]]},"697":{"position":[[5,1]]},"712":{"position":[[7,1]]},"718":{"position":[[5,1]]},"748":{"position":[[5,1]]},"772":{"position":[[4,1]]},"784":{"position":[[4,1]]},"815":{"position":[[7,1]]},"817":{"position":[[5,1]]},"819":{"position":[[5,1]]},"821":{"position":[[5,1]]},"823":{"position":[[5,1]]},"833":{"position":[[7,1]]},"856":{"position":[[5,1]]},"902":{"position":[[5,1]]},"904":{"position":[[5,1]]},"906":{"position":[[5,1]]},"908":{"position":[[5,1]]},"910":{"position":[[5,1],[7,1]]},"912":{"position":[[5,1]]},"932":{"position":[[7,1]]},"936":{"position":[[5,1]]},"946":{"position":[[4,1]]},"959":{"position":[[5,1]]},"970":{"position":[[7,1]]},"985":{"position":[[2,1]]},"987":{"position":[[2,1]]},"989":{"position":[[2,1]]},"991":{"position":[[2,1]]},"993":{"position":[[2,1]]},"995":{"position":[[2,1],[6,1]]},"997":{"position":[[2,1]]},"999":{"position":[[2,1]]},"1001":{"position":[[2,1]]},"1003":{"position":[[2,1]]},"1005":{"position":[[2,1]]},"1007":{"position":[[2,1]]},"1009":{"position":[[2,1]]},"1011":{"position":[[2,1]]},"1013":{"position":[[2,1]]},"1015":{"position":[[2,1]]},"1017":{"position":[[2,1]]},"1019":{"position":[[2,1]]},"1021":{"position":[[2,1]]},"1023":{"position":[[2,1]]},"1025":{"position":[[2,1]]},"1027":{"position":[[2,1],[4,1]]},"1028":{"position":[[2,1],[4,1]]},"1030":{"position":[[2,1],[4,1]]},"1032":{"position":[[2,1],[4,1]]},"1034":{"position":[[2,1]]},"1036":{"position":[[2,1]]},"1038":{"position":[[2,1]]},"1040":{"position":[[2,1]]},"1042":{"position":[[2,1]]},"1059":{"position":[[7,1]]},"1069":{"position":[[5,1]]},"1070":{"position":[[5,1]]},"1072":{"position":[[5,1]]},"1074":{"position":[[5,1]]},"1080":{"position":[[7,1]]},"1091":{"position":[[7,1]]},"1114":{"position":[[7,1]]},"1132":{"position":[[5,1]]},"1150":{"position":[[5,1]]},"1165":{"position":[[7,1]]},"1178":{"position":[[7,1]]},"1186":{"position":[[5,1]]},"1187":{"position":[[5,1]]},"1189":{"position":[[5,1]]},"1209":{"position":[[8,1]]},"1232":{"position":[[5,1]]},"1233":{"position":[[5,1]]},"1235":{"position":[[5,1]]},"1237":{"position":[[5,1]]},"1239":{"position":[[5,1],[7,1]]},"1241":{"position":[[5,1]]},"1243":{"position":[[5,1]]},"1245":{"position":[[5,1]]},"1247":{"position":[[5,1]]},"1256":{"position":[[7,1]]},"1298":{"position":[[5,1]]},"1299":{"position":[[5,1]]},"1301":{"position":[[5,1]]},"1314":{"position":[[6,1]]},"1330":{"position":[[4,1]]},"1367":{"position":[[5,1]]},"1390":{"position":[[3,1]]},"1391":{"position":[[3,1]]},"1393":{"position":[[3,1]]},"1395":{"position":[[3,1]]},"1413":{"position":[[5,1]]},"1449":{"position":[[7,1]]},"1457":{"position":[[7,1]]},"1463":{"position":[[7,1]]},"1466":{"position":[[5,1]]},"1467":{"position":[[5,1]]},"1469":{"position":[[5,1]]},"1471":{"position":[[5,1]]},"1489":{"position":[[5,1]]},"1490":{"position":[[5,1]]},"1492":{"position":[[5,1]]},"1494":{"position":[[5,1]]},"1496":{"position":[[5,1],[7,1]]},"1498":{"position":[[5,1]]},"1527":{"position":[[5,1]]},"1538":{"position":[[5,1]]},"1544":{"position":[[3,1]]},"1546":{"position":[[3,1]]},"1548":{"position":[[3,1]]},"1581":{"position":[[4,1]]},"1597":{"position":[[6,1]]},"1608":{"position":[[6,1]]},"1646":{"position":[[6,1]]},"1682":{"position":[[5,1]]},"1688":{"position":[[3,1]]},"1706":{"position":[[5,1]]},"1710":{"position":[[3,1]]},"1727":{"position":[[3,1]]},"1728":{"position":[[3,1]]},"1730":{"position":[[3,1]]},"1732":{"position":[[3,1],[5,1]]},"1744":{"position":[[5,1]]},"1754":{"position":[[5,1]]},"1770":{"position":[[6,1]]},"1776":{"position":[[4,1]]},"1778":{"position":[[4,1]]},"1780":{"position":[[4,1]]},"1798":{"position":[[3,1]]},"1800":{"position":[[3,1]]},"1802":{"position":[[3,1]]},"1840":{"position":[[2,1]]},"1842":{"position":[[2,1]]},"1844":{"position":[[2,1]]},"1860":{"position":[[4,1]]},"1899":{"position":[[4,1]]},"1900":{"position":[[4,1]]},"1902":{"position":[[4,1]]},"1946":{"position":[[7,1]]},"1962":{"position":[[4,1]]},"1980":{"position":[[2,1]]},"1992":{"position":[[2,1]]},"2003":{"position":[[2,1]]},"2015":{"position":[[2,1]]},"2026":{"position":[[2,1]]},"2074":{"position":[[3,1]]},"2084":{"position":[[2,1]]},"2095":{"position":[[3,1]]},"2108":{"position":[[2,1]]},"2137":{"position":[[3,1]]},"2152":{"position":[[2,1]]},"2187":{"position":[[3,1]]},"2190":{"position":[[0,1]]},"2192":{"position":[[0,1]]},"2194":{"position":[[0,1]]},"2196":{"position":[[0,1],[2,1]]},"2198":{"position":[[0,1]]},"2200":{"position":[[0,1]]},"2213":{"position":[[3,1]]},"2248":{"position":[[6,1]]},"2254":{"position":[[4,1]]},"2263":{"position":[[2,1]]},"2265":{"position":[[2,1]]},"2267":{"position":[[2,1]]},"2268":{"position":[[2,1]]},"2270":{"position":[[2,1],[4,1]]},"2271":{"position":[[2,1],[4,1]]},"2273":{"position":[[2,1],[4,1]]},"2275":{"position":[[2,1],[4,1]]},"2277":{"position":[[2,1],[4,1],[6,1]]},"2279":{"position":[[2,1]]},"2280":{"position":[[2,1]]},"2282":{"position":[[2,1]]},"2284":{"position":[[2,1]]},"2286":{"position":[[2,1]]},"2297":{"position":[[4,1]]},"2308":{"position":[[3,1]]},"2310":{"position":[[3,1]]},"2312":{"position":[[3,1]]},"2314":{"position":[[3,1]]},"2316":{"position":[[3,1],[5,1]]},"2318":{"position":[[3,1]]},"2336":{"position":[[3,1]]},"2346":{"position":[[3,1]]},"2347":{"position":[[3,1]]},"2349":{"position":[[3,1]]},"2351":{"position":[[3,1]]},"2353":{"position":[[3,1],[5,1]]},"2362":{"position":[[5,1]]},"2403":{"position":[[5,1]]},"2407":{"position":[[3,1]]},"2408":{"position":[[3,1]]},"2410":{"position":[[3,1]]},"2412":{"position":[[3,1]]},"2414":{"position":[[3,1],[5,1]]},"2423":{"position":[[5,1]]},"2453":{"position":[[5,1]]},"2500":{"position":[[4,1]]},"2525":{"position":[[3,1]]},"2535":{"position":[[5,1]]},"2572":{"position":[[6,1]]},"2582":{"position":[[4,1]]},"2610":{"position":[[5,1]]},"2626":{"position":[[3,1]]},"2642":{"position":[[6,1]]},"2654":{"position":[[6,1]]},"2658":{"position":[[4,1]]},"2669":{"position":[[6,1]]},"2693":{"position":[[5,1]]},"2695":{"position":[[3,1]]},"2700":{"position":[[0,1]]},"2702":{"position":[[0,1]]},"2704":{"position":[[0,1]]},"2706":{"position":[[0,1]]},"2708":{"position":[[0,1]]},"2710":{"position":[[0,1]]},"2712":{"position":[[0,1],[6,1]]},"2714":{"position":[[0,1]]},"2716":{"position":[[0,1],[4,1]]},"2718":{"position":[[0,1]]},"2720":{"position":[[0,1]]},"2722":{"position":[[0,1]]},"2724":{"position":[[0,1]]},"2726":{"position":[[0,1]]},"2728":{"position":[[0,1]]},"2730":{"position":[[0,1]]},"2732":{"position":[[0,1]]},"2734":{"position":[[0,1]]},"2736":{"position":[[0,1]]},"2750":{"position":[[7,1]]},"2752":{"position":[[5,1]]},"2753":{"position":[[5,1]]},"2755":{"position":[[5,1]]},"2757":{"position":[[5,1]]},"2759":{"position":[[5,1],[7,1]]},"2761":{"position":[[5,1]]},"2763":{"position":[[5,1]]},"2791":{"position":[[5,1]]},"2799":{"position":[[3,1]]},"2816":{"position":[[5,1]]},"2822":{"position":[[3,1]]},"2824":{"position":[[3,1]]},"2826":{"position":[[3,1]]},"2828":{"position":[[3,1]]},"2851":{"position":[[5,1]]},"2867":{"position":[[4,1]]},"2880":{"position":[[6,1]]},"2892":{"position":[[6,1]]},"2920":{"position":[[3,1]]},"2930":{"position":[[5,1]]},"2946":{"position":[[5,1]]},"2960":{"position":[[5,1]]},"2984":{"position":[[2,1]]},"2994":{"position":[[2,1]]},"2998":{"position":[[0,1]]},"3000":{"position":[[0,1]]},"3002":{"position":[[0,1]]},"3012":{"position":[[2,1]]},"3014":{"position":[[2,1]]},"3016":{"position":[[2,1]]},"3074":{"position":[[5,1]]},"3105":{"position":[[5,1]]},"3107":{"position":[[5,1]]},"3109":{"position":[[5,1]]},"3111":{"position":[[5,1]]},"3121":{"position":[[7,1]]},"3143":{"position":[[3,1]]},"3167":{"position":[[5,1]]},"3178":{"position":[[5,1]]},"3196":{"position":[[6,1]]},"3214":{"position":[[5,1]]},"3223":{"position":[[7,1]]},"3257":{"position":[[5,1]]},"3266":{"position":[[7,1]]},"3292":{"position":[[5,1]]},"3293":{"position":[[5,1]]},"3295":{"position":[[5,1]]},"3306":{"position":[[4,1]]},"3324":{"position":[[4,1]]},"3336":{"position":[[3,1]]},"3338":{"position":[[3,1]]},"3340":{"position":[[3,1]]},"3342":{"position":[[3,1]]},"3344":{"position":[[3,1]]},"3346":{"position":[[3,1],[5,1]]},"3355":{"position":[[5,1]]},"3363":{"position":[[7,1]]},"3384":{"position":[[7,1]]},"3402":{"position":[[7,1]]},"3417":{"position":[[3,1]]},"3419":{"position":[[3,1]]},"3421":{"position":[[3,1]]},"3423":{"position":[[3,1]]},"3425":{"position":[[3,1],[5,1]]},"3435":{"position":[[5,1]]},"3451":{"position":[[5,1]]},"3484":{"position":[[3,1]]},"3485":{"position":[[3,1]]},"3487":{"position":[[3,1]]},"3489":{"position":[[3,1]]},"3491":{"position":[[3,1],[5,1]]},"3493":{"position":[[3,1]]},"3495":{"position":[[3,1]]},"3497":{"position":[[3,1]]},"3499":{"position":[[3,1]]},"3501":{"position":[[3,1]]},"3503":{"position":[[3,1]]},"3505":{"position":[[3,1]]},"3507":{"position":[[3,1]]},"3509":{"position":[[3,1]]},"3511":{"position":[[3,1]]},"3513":{"position":[[3,1]]},"3515":{"position":[[3,1]]},"3517":{"position":[[3,1]]},"3519":{"position":[[3,1]]},"3521":{"position":[[3,1]]},"3523":{"position":[[3,1]]},"3525":{"position":[[3,1]]},"3527":{"position":[[3,1]]},"3529":{"position":[[3,1]]},"3531":{"position":[[3,1]]},"3540":{"position":[[5,1]]},"3580":{"position":[[5,1]]},"3592":{"position":[[5,1]]},"3619":{"position":[[4,1]]},"3625":{"position":[[2,1]]},"3635":{"position":[[4,1]]},"3737":{"position":[[5,1]]},"3741":{"position":[[3,1]]},"3743":{"position":[[3,1]]},"3745":{"position":[[3,1]]},"3747":{"position":[[3,1]]},"3749":{"position":[[3,1],[5,1]]},"3769":{"position":[[7,1]]},"3782":{"position":[[7,1]]},"3786":{"position":[[5,1]]},"3788":{"position":[[5,1]]},"3790":{"position":[[5,1]]},"3792":{"position":[[5,1]]},"3794":{"position":[[5,1],[7,1]]},"3803":{"position":[[7,1]]},"3820":{"position":[[7,1]]},"3841":{"position":[[8,1]]},"3867":{"position":[[8,1]]},"3917":{"position":[[3,1]]},"3937":{"position":[[3,1]]},"3969":{"position":[[3,1]]},"3995":{"position":[[3,1]]}}}],["405",{"_index":641,"t":{"1467":{"position":[[9,3]]}}}],["5",{"_index":56,"t":{"59":{"position":[[18,1]]},"109":{"position":[[0,1]]},"111":{"position":[[0,1]]},"113":{"position":[[0,1]]},"115":{"position":[[0,1]]},"142":{"position":[[3,1]]},"143":{"position":[[3,1]]},"145":{"position":[[3,1]]},"147":{"position":[[3,1]]},"219":{"position":[[4,1]]},"248":{"position":[[5,1]]},"252":{"position":[[3,1]]},"277":{"position":[[5,1]]},"299":{"position":[[0,1]]},"301":{"position":[[0,1]]},"303":{"position":[[0,1]]},"305":{"position":[[0,1]]},"307":{"position":[[0,1]]},"309":{"position":[[0,1]]},"311":{"position":[[0,1]]},"313":{"position":[[0,1]]},"315":{"position":[[0,1]]},"317":{"position":[[0,1],[4,1]]},"318":{"position":[[0,1],[4,1]]},"320":{"position":[[0,1],[4,1]]},"322":{"position":[[0,1]]},"324":{"position":[[0,1]]},"326":{"position":[[0,1]]},"328":{"position":[[0,1]]},"330":{"position":[[0,1]]},"332":{"position":[[0,1]]},"351":{"position":[[4,1]]},"352":{"position":[[4,1]]},"354":{"position":[[4,1]]},"385":{"position":[[3,1]]},"414":{"position":[[3,1]]},"450":{"position":[[4,1]]},"479":{"position":[[7,1]]},"485":{"position":[[5,1]]},"511":{"position":[[4,1]]},"513":{"position":[[4,1]]},"515":{"position":[[4,1]]},"517":{"position":[[4,1]]},"519":{"position":[[4,1]]},"561":{"position":[[5,1]]},"592":{"position":[[2,1]]},"594":{"position":[[2,1]]},"596":{"position":[[2,1]]},"598":{"position":[[2,1]]},"609":{"position":[[4,1]]},"644":{"position":[[2,1]]},"646":{"position":[[2,1]]},"648":{"position":[[2,1]]},"650":{"position":[[2,1]]},"652":{"position":[[2,1],[4,1]]},"654":{"position":[[2,1]]},"656":{"position":[[2,1]]},"668":{"position":[[4,1]]},"695":{"position":[[7,1]]},"699":{"position":[[5,1]]},"714":{"position":[[7,1]]},"720":{"position":[[5,1]]},"721":{"position":[[5,1]]},"723":{"position":[[5,1]]},"725":{"position":[[5,1]]},"750":{"position":[[5,1]]},"774":{"position":[[4,1]]},"786":{"position":[[4,1]]},"825":{"position":[[5,1]]},"827":{"position":[[5,1]]},"829":{"position":[[5,1]]},"831":{"position":[[5,1]]},"833":{"position":[[5,1]]},"858":{"position":[[5,1]]},"859":{"position":[[5,1]]},"861":{"position":[[5,1]]},"863":{"position":[[5,1]]},"912":{"position":[[7,1]]},"914":{"position":[[5,1]]},"948":{"position":[[4,1]]},"961":{"position":[[5,1]]},"972":{"position":[[7,1]]},"997":{"position":[[6,1]]},"1034":{"position":[[4,1]]},"1036":{"position":[[4,1]]},"1061":{"position":[[7,1]]},"1076":{"position":[[5,1]]},"1077":{"position":[[5,1]]},"1078":{"position":[[5,1]]},"1079":{"position":[[5,1]]},"1080":{"position":[[5,1]]},"1081":{"position":[[5,1],[7,1]]},"1083":{"position":[[5,1]]},"1084":{"position":[[5,1]]},"1085":{"position":[[5,1]]},"1086":{"position":[[5,1]]},"1092":{"position":[[7,1]]},"1116":{"position":[[7,1]]},"1134":{"position":[[5,1]]},"1152":{"position":[[5,1]]},"1167":{"position":[[7,1]]},"1180":{"position":[[7,1]]},"1191":{"position":[[5,1]]},"1241":{"position":[[7,1]]},"1249":{"position":[[5,1]]},"1250":{"position":[[5,1]]},"1252":{"position":[[5,1]]},"1254":{"position":[[5,1]]},"1256":{"position":[[5,1]]},"1258":{"position":[[5,1],[7,1]]},"1260":{"position":[[5,1]]},"1262":{"position":[[5,1]]},"1264":{"position":[[5,1]]},"1303":{"position":[[5,1]]},"1316":{"position":[[6,1]]},"1332":{"position":[[4,1]]},"1369":{"position":[[5,1]]},"1397":{"position":[[3,1]]},"1398":{"position":[[3,1]]},"1400":{"position":[[3,1]]},"1402":{"position":[[3,1]]},"1464":{"position":[[7,1]]},"1473":{"position":[[5,1]]},"1498":{"position":[[7,1]]},"1500":{"position":[[5,1]]},"1508":{"position":[[2,1]]},"1510":{"position":[[2,1]]},"1512":{"position":[[2,1]]},"1529":{"position":[[5,1]]},"1540":{"position":[[5,1]]},"1550":{"position":[[3,1]]},"1571":{"position":[[0,1]]},"1573":{"position":[[0,1]]},"1575":{"position":[[0,1]]},"1577":{"position":[[0,1]]},"1579":{"position":[[0,1]]},"1581":{"position":[[0,1]]},"1583":{"position":[[0,1],[4,1]]},"1585":{"position":[[0,1]]},"1586":{"position":[[0,1]]},"1588":{"position":[[0,1]]},"1590":{"position":[[0,1]]},"1591":{"position":[[0,1]]},"1593":{"position":[[0,1]]},"1595":{"position":[[0,1]]},"1597":{"position":[[0,1]]},"1599":{"position":[[0,1],[6,1]]},"1601":{"position":[[0,1]]},"1602":{"position":[[0,1]]},"1604":{"position":[[0,1]]},"1606":{"position":[[0,1]]},"1608":{"position":[[0,1]]},"1610":{"position":[[0,1],[6,1]]},"1612":{"position":[[0,1]]},"1614":{"position":[[0,1]]},"1616":{"position":[[0,1]]},"1618":{"position":[[0,1]]},"1620":{"position":[[0,1]]},"1622":{"position":[[0,1]]},"1624":{"position":[[0,1]]},"1626":{"position":[[0,1]]},"1628":{"position":[[0,1]]},"1630":{"position":[[0,1]]},"1632":{"position":[[0,1]]},"1634":{"position":[[0,1]]},"1636":{"position":[[0,1]]},"1638":{"position":[[0,1]]},"1640":{"position":[[0,1]]},"1642":{"position":[[0,1]]},"1644":{"position":[[0,1]]},"1646":{"position":[[0,1]]},"1648":{"position":[[0,1],[6,1]]},"1650":{"position":[[0,1]]},"1652":{"position":[[0,1]]},"1654":{"position":[[0,1]]},"1656":{"position":[[0,1]]},"1658":{"position":[[0,1]]},"1660":{"position":[[0,1]]},"1662":{"position":[[0,1]]},"1664":{"position":[[0,1]]},"1666":{"position":[[0,1]]},"1668":{"position":[[0,1]]},"1684":{"position":[[5,1]]},"1690":{"position":[[3,1]]},"1712":{"position":[[3,1]]},"1734":{"position":[[3,1]]},"1772":{"position":[[6,1]]},"1782":{"position":[[4,1]]},"1804":{"position":[[3,1]]},"1846":{"position":[[2,1]]},"1848":{"position":[[2,1]]},"1850":{"position":[[2,1]]},"1862":{"position":[[4,1]]},"1891":{"position":[[0,1]]},"1893":{"position":[[0,1]]},"1895":{"position":[[0,1]]},"1897":{"position":[[0,1]]},"1899":{"position":[[0,1]]},"1900":{"position":[[0,1]]},"1902":{"position":[[0,1]]},"1904":{"position":[[0,1],[4,1]]},"1906":{"position":[[0,1],[4,1]]},"1908":{"position":[[0,1],[4,1]]},"1910":{"position":[[0,1]]},"1912":{"position":[[0,1]]},"1914":{"position":[[0,1]]},"1916":{"position":[[0,1]]},"1918":{"position":[[0,1]]},"1920":{"position":[[0,1]]},"1922":{"position":[[0,1]]},"1924":{"position":[[0,1]]},"1926":{"position":[[0,1]]},"1928":{"position":[[0,1]]},"1930":{"position":[[0,1]]},"1932":{"position":[[0,1]]},"1934":{"position":[[0,1]]},"1936":{"position":[[0,1]]},"1938":{"position":[[0,1]]},"1940":{"position":[[0,1]]},"1942":{"position":[[0,1]]},"1944":{"position":[[0,1]]},"1946":{"position":[[0,1]]},"1948":{"position":[[0,1]]},"1950":{"position":[[0,1]]},"1952":{"position":[[0,1]]},"1954":{"position":[[0,1]]},"1956":{"position":[[0,1]]},"1958":{"position":[[0,1]]},"1960":{"position":[[0,1]]},"1962":{"position":[[0,1]]},"1964":{"position":[[0,1]]},"1966":{"position":[[0,1]]},"1994":{"position":[[2,1]]},"2017":{"position":[[2,1]]},"2028":{"position":[[2,1]]},"2086":{"position":[[2,1]]},"2097":{"position":[[3,1]]},"2110":{"position":[[2,1]]},"2139":{"position":[[3,1]]},"2154":{"position":[[2,1]]},"2164":{"position":[[0,1]]},"2166":{"position":[[0,1]]},"2198":{"position":[[2,1]]},"2215":{"position":[[3,1]]},"2230":{"position":[[0,1]]},"2232":{"position":[[0,1]]},"2234":{"position":[[0,1]]},"2236":{"position":[[0,1]]},"2238":{"position":[[0,1]]},"2240":{"position":[[0,1]]},"2242":{"position":[[0,1]]},"2244":{"position":[[0,1]]},"2246":{"position":[[0,1]]},"2248":{"position":[[0,1]]},"2250":{"position":[[0,1],[6,1]]},"2252":{"position":[[0,1]]},"2254":{"position":[[0,1]]},"2256":{"position":[[0,1],[4,1]]},"2279":{"position":[[4,1]]},"2280":{"position":[[4,1]]},"2282":{"position":[[4,1]]},"2299":{"position":[[4,1]]},"2318":{"position":[[5,1]]},"2320":{"position":[[3,1]]},"2355":{"position":[[3,1]]},"2356":{"position":[[3,1]]},"2358":{"position":[[3,1]]},"2360":{"position":[[3,1]]},"2362":{"position":[[3,1]]},"2364":{"position":[[3,1],[5,1]]},"2366":{"position":[[3,1]]},"2368":{"position":[[3,1]]},"2370":{"position":[[3,1]]},"2372":{"position":[[3,1]]},"2374":{"position":[[3,1]]},"2376":{"position":[[3,1]]},"2378":{"position":[[3,1]]},"2380":{"position":[[3,1]]},"2382":{"position":[[3,1]]},"2405":{"position":[[5,1]]},"2416":{"position":[[3,1]]},"2417":{"position":[[3,1]]},"2419":{"position":[[3,1]]},"2421":{"position":[[3,1]]},"2423":{"position":[[3,1]]},"2425":{"position":[[3,1],[5,1]]},"2427":{"position":[[3,1]]},"2429":{"position":[[3,1]]},"2431":{"position":[[3,1]]},"2433":{"position":[[3,1]]},"2455":{"position":[[5,1]]},"2502":{"position":[[4,1]]},"2504":{"position":[[4,1]]},"2505":{"position":[[4,1]]},"2527":{"position":[[3,1]]},"2529":{"position":[[3,1]]},"2531":{"position":[[3,1]]},"2533":{"position":[[3,1]]},"2535":{"position":[[3,1]]},"2537":{"position":[[3,1],[5,1]]},"2563":{"position":[[0,1],[2,1]]},"2565":{"position":[[0,1],[2,1]]},"2566":{"position":[[0,1],[2,1]]},"2568":{"position":[[0,1],[2,1]]},"2570":{"position":[[0,1],[2,1]]},"2572":{"position":[[0,1],[2,1]]},"2574":{"position":[[0,1],[2,1]]},"2576":{"position":[[0,1],[2,1]]},"2578":{"position":[[0,1],[2,1]]},"2580":{"position":[[0,1],[2,1]]},"2582":{"position":[[0,1],[2,1]]},"2584":{"position":[[0,1],[2,1],[4,1]]},"2586":{"position":[[0,1],[2,1],[4,1]]},"2588":{"position":[[0,1],[2,1],[4,1]]},"2590":{"position":[[0,1],[2,1]]},"2592":{"position":[[0,1],[2,1]]},"2594":{"position":[[0,1],[2,1]]},"2628":{"position":[[3,1]]},"2634":{"position":[[2,1]]},"2636":{"position":[[2,1]]},"2638":{"position":[[2,1]]},"2640":{"position":[[2,1]]},"2642":{"position":[[2,1]]},"2661":{"position":[[2,1]]},"2663":{"position":[[2,1]]},"2665":{"position":[[2,1]]},"2667":{"position":[[2,1]]},"2669":{"position":[[2,1]]},"2671":{"position":[[2,1],[6,1]]},"2673":{"position":[[2,1]]},"2675":{"position":[[2,1]]},"2697":{"position":[[3,1]]},"2714":{"position":[[6,1]]},"2718":{"position":[[4,1]]},"2720":{"position":[[4,1]]},"2761":{"position":[[7,1]]},"2765":{"position":[[5,1]]},"2818":{"position":[[5,1]]},"2830":{"position":[[3,1]]},"2853":{"position":[[5,1]]},"2869":{"position":[[4,1]]},"2882":{"position":[[6,1]]},"2894":{"position":[[6,1]]},"2922":{"position":[[3,1]]},"2924":{"position":[[3,1]]},"2926":{"position":[[3,1]]},"2928":{"position":[[3,1]]},"2930":{"position":[[3,1]]},"2932":{"position":[[3,1],[5,1]]},"2934":{"position":[[3,1]]},"2936":{"position":[[3,1]]},"2948":{"position":[[5,1]]},"2962":{"position":[[5,1]]},"3020":{"position":[[0,1]]},"3022":{"position":[[0,1]]},"3024":{"position":[[0,1]]},"3068":{"position":[[3,1]]},"3070":{"position":[[3,1]]},"3072":{"position":[[3,1]]},"3074":{"position":[[3,1]]},"3076":{"position":[[3,1],[5,1]]},"3077":{"position":[[3,1],[5,1]]},"3079":{"position":[[3,1],[5,1]]},"3081":{"position":[[3,1],[5,1]]},"3083":{"position":[[3,1]]},"3113":{"position":[[5,1]]},"3115":{"position":[[5,1]]},"3117":{"position":[[5,1]]},"3119":{"position":[[5,1]]},"3121":{"position":[[5,1]]},"3123":{"position":[[5,1],[7,1]]},"3145":{"position":[[3,1]]},"3147":{"position":[[3,1]]},"3149":{"position":[[3,1]]},"3169":{"position":[[5,1]]},"3180":{"position":[[5,1]]},"3216":{"position":[[5,1]]},"3217":{"position":[[5,1]]},"3219":{"position":[[5,1]]},"3221":{"position":[[5,1]]},"3223":{"position":[[5,1]]},"3225":{"position":[[5,1],[7,1]]},"3227":{"position":[[5,1]]},"3229":{"position":[[5,1]]},"3231":{"position":[[5,1]]},"3233":{"position":[[5,1]]},"3235":{"position":[[5,1]]},"3237":{"position":[[5,1]]},"3259":{"position":[[5,1]]},"3260":{"position":[[5,1]]},"3262":{"position":[[5,1]]},"3264":{"position":[[5,1]]},"3266":{"position":[[5,1]]},"3268":{"position":[[5,1],[7,1]]},"3270":{"position":[[5,1]]},"3297":{"position":[[5,1]]},"3308":{"position":[[4,1]]},"3326":{"position":[[4,1]]},"3357":{"position":[[5,1]]},"3358":{"position":[[5,1]]},"3359":{"position":[[5,1]]},"3361":{"position":[[5,1]]},"3363":{"position":[[5,1]]},"3364":{"position":[[5,1],[7,1]]},"3386":{"position":[[7,1]]},"3427":{"position":[[3,1]]},"3429":{"position":[[3,1]]},"3431":{"position":[[3,1]]},"3433":{"position":[[3,1]]},"3435":{"position":[[3,1]]},"3437":{"position":[[3,1],[5,1]]},"3439":{"position":[[3,1]]},"3441":{"position":[[3,1]]},"3453":{"position":[[5,1]]},"3493":{"position":[[5,1]]},"3533":{"position":[[3,1]]},"3534":{"position":[[3,1]]},"3536":{"position":[[3,1]]},"3538":{"position":[[3,1]]},"3540":{"position":[[3,1]]},"3542":{"position":[[3,1],[5,1]]},"3544":{"position":[[3,1]]},"3546":{"position":[[3,1]]},"3548":{"position":[[3,1]]},"3550":{"position":[[3,1]]},"3552":{"position":[[3,1]]},"3554":{"position":[[3,1]]},"3556":{"position":[[3,1]]},"3558":{"position":[[3,1]]},"3560":{"position":[[3,1]]},"3562":{"position":[[3,1]]},"3564":{"position":[[3,1]]},"3566":{"position":[[3,1]]},"3568":{"position":[[3,1]]},"3570":{"position":[[3,1]]},"3582":{"position":[[5,1]]},"3621":{"position":[[4,1]]},"3627":{"position":[[2,1]]},"3629":{"position":[[2,1]]},"3631":{"position":[[2,1]]},"3633":{"position":[[2,1]]},"3635":{"position":[[2,1]]},"3637":{"position":[[2,1],[4,1]]},"3639":{"position":[[2,1]]},"3641":{"position":[[2,1]]},"3643":{"position":[[2,1]]},"3645":{"position":[[2,1]]},"3647":{"position":[[2,1]]},"3649":{"position":[[2,1]]},"3651":{"position":[[2,1]]},"3653":{"position":[[2,1]]},"3655":{"position":[[2,1]]},"3657":{"position":[[2,1]]},"3659":{"position":[[2,1]]},"3661":{"position":[[2,1]]},"3663":{"position":[[2,1]]},"3665":{"position":[[2,1]]},"3667":{"position":[[2,1]]},"3669":{"position":[[2,1]]},"3671":{"position":[[2,1]]},"3673":{"position":[[2,1]]},"3675":{"position":[[2,1]]},"3677":{"position":[[2,1]]},"3679":{"position":[[2,1]]},"3681":{"position":[[2,1]]},"3683":{"position":[[2,1]]},"3685":{"position":[[2,1]]},"3687":{"position":[[2,1]]},"3689":{"position":[[2,1]]},"3691":{"position":[[2,1]]},"3693":{"position":[[2,1]]},"3695":{"position":[[2,1]]},"3697":{"position":[[2,1]]},"3699":{"position":[[2,1]]},"3701":{"position":[[2,1]]},"3703":{"position":[[2,1]]},"3739":{"position":[[5,1]]},"3751":{"position":[[3,1]]},"3771":{"position":[[7,1]]},"3784":{"position":[[7,1]]},"3796":{"position":[[5,1]]},"3797":{"position":[[5,1]]},"3799":{"position":[[5,1]]},"3801":{"position":[[5,1]]},"3803":{"position":[[5,1]]},"3805":{"position":[[5,1],[7,1]]},"3807":{"position":[[5,1]]},"3809":{"position":[[5,1]]},"3811":{"position":[[5,1]]},"3843":{"position":[[8,1]]},"3869":{"position":[[8,1]]},"3915":{"position":[[3,1]]},"3935":{"position":[[3,1]]},"3967":{"position":[[3,1]]}}}],["6",{"_index":40,"t":{"45":{"position":[[8,1],[18,1]]},"59":{"position":[[8,1]]},"69":{"position":[[8,1],[18,1]]},"149":{"position":[[3,1]]},"221":{"position":[[4,1]]},"250":{"position":[[5,1]]},"254":{"position":[[3,1]]},"279":{"position":[[5,1]]},"299":{"position":[[2,1]]},"301":{"position":[[2,1]]},"303":{"position":[[2,1]]},"307":{"position":[[2,1]]},"309":{"position":[[2,1]]},"311":{"position":[[2,1]]},"313":{"position":[[2,1]]},"315":{"position":[[2,1]]},"317":{"position":[[2,1]]},"318":{"position":[[2,1]]},"320":{"position":[[2,1]]},"322":{"position":[[2,1],[4,1]]},"324":{"position":[[2,1]]},"326":{"position":[[2,1]]},"328":{"position":[[2,1]]},"330":{"position":[[2,1]]},"332":{"position":[[2,1]]},"356":{"position":[[4,1]]},"358":{"position":[[4,1]]},"360":{"position":[[4,1]]},"362":{"position":[[4,1]]},"387":{"position":[[3,1]]},"416":{"position":[[3,1]]},"452":{"position":[[4,1]]},"487":{"position":[[5,1]]},"489":{"position":[[5,1]]},"491":{"position":[[5,1]]},"521":{"position":[[4,1]]},"600":{"position":[[2,1]]},"601":{"position":[[2,1]]},"603":{"position":[[2,1]]},"605":{"position":[[2,1]]},"607":{"position":[[2,1]]},"609":{"position":[[2,1]]},"654":{"position":[[4,1]]},"670":{"position":[[4,1]]},"727":{"position":[[5,1]]},"729":{"position":[[5,1]]},"731":{"position":[[5,1]]},"733":{"position":[[40,1]]},"752":{"position":[[5,1]]},"788":{"position":[[4,1]]},"835":{"position":[[5,1]]},"865":{"position":[[5,1]]},"916":{"position":[[5,1]]},"950":{"position":[[4,1]]},"963":{"position":[[5,1]]},"964":{"position":[[5,1]]},"966":{"position":[[5,1]]},"968":{"position":[[5,1]]},"970":{"position":[[5,1]]},"972":{"position":[[5,1]]},"974":{"position":[[5,1],[7,1]]},"976":{"position":[[5,1]]},"978":{"position":[[5,1]]},"980":{"position":[[5,1]]},"999":{"position":[[6,1]]},"1038":{"position":[[4,1]]},"1063":{"position":[[7,1]]},"1083":{"position":[[7,1]]},"1087":{"position":[[5,1]]},"1088":{"position":[[5,1]]},"1089":{"position":[[5,1]]},"1090":{"position":[[5,1]]},"1091":{"position":[[5,1]]},"1092":{"position":[[5,1]]},"1093":{"position":[[5,1],[7,1]]},"1094":{"position":[[5,1]]},"1118":{"position":[[7,1]]},"1136":{"position":[[5,1]]},"1169":{"position":[[7,1]]},"1182":{"position":[[7,1]]},"1193":{"position":[[5,1]]},"1243":{"position":[[7,1]]},"1260":{"position":[[7,1]]},"1266":{"position":[[5,1]]},"1318":{"position":[[6,1]]},"1324":{"position":[[2,1]]},"1326":{"position":[[2,1]]},"1328":{"position":[[2,1]]},"1330":{"position":[[2,1]]},"1332":{"position":[[2,1]]},"1334":{"position":[[2,1],[4,1]]},"1336":{"position":[[2,1]]},"1338":{"position":[[2,1]]},"1340":{"position":[[2,1]]},"1342":{"position":[[2,1]]},"1344":{"position":[[2,1]]},"1346":{"position":[[2,1]]},"1348":{"position":[[2,1]]},"1350":{"position":[[2,1]]},"1352":{"position":[[2,1]]},"1354":{"position":[[2,1]]},"1404":{"position":[[3,1]]},"1475":{"position":[[5,1]]},"1542":{"position":[[5,1]]},"1552":{"position":[[3,1]]},"1554":{"position":[[3,1]]},"1556":{"position":[[3,1]]},"1558":{"position":[[3,1]]},"1560":{"position":[[3,1]]},"1585":{"position":[[4,1]]},"1586":{"position":[[4,1]]},"1588":{"position":[[4,1]]},"1612":{"position":[[6,1]]},"1650":{"position":[[6,1]]},"1686":{"position":[[5,1]]},"1692":{"position":[[3,1]]},"1736":{"position":[[3,1]]},"1738":{"position":[[3,1]]},"1740":{"position":[[3,1]]},"1742":{"position":[[3,1]]},"1744":{"position":[[3,1]]},"1784":{"position":[[4,1]]},"1806":{"position":[[3,1]]},"1852":{"position":[[2,1]]},"1854":{"position":[[2,1]]},"1856":{"position":[[2,1]]},"1858":{"position":[[2,1]]},"1860":{"position":[[2,1]]},"1862":{"position":[[2,1]]},"1910":{"position":[[4,1]]},"1912":{"position":[[4,1]]},"1914":{"position":[[4,1]]},"2030":{"position":[[2,1]]},"2099":{"position":[[3,1]]},"2112":{"position":[[2,1]]},"2141":{"position":[[3,1]]},"2200":{"position":[[2,1]]},"2203":{"position":[[0,1]]},"2217":{"position":[[3,1]]},"2252":{"position":[[6,1]]},"2284":{"position":[[4,1]]},"2289":{"position":[[2,1]]},"2291":{"position":[[2,1]]},"2293":{"position":[[2,1]]},"2295":{"position":[[2,1]]},"2297":{"position":[[2,1]]},"2299":{"position":[[2,1]]},"2322":{"position":[[3,1]]},"2366":{"position":[[5,1]]},"2384":{"position":[[3,1]]},"2427":{"position":[[5,1]]},"2435":{"position":[[3,1]]},"2437":{"position":[[3,1]]},"2439":{"position":[[3,1]]},"2457":{"position":[[5,1]]},"2507":{"position":[[4,1]]},"2509":{"position":[[4,1]]},"2511":{"position":[[4,1]]},"2539":{"position":[[3,1]]},"2541":{"position":[[3,1]]},"2590":{"position":[[4,1]]},"2630":{"position":[[3,1]]},"2673":{"position":[[6,1]]},"2722":{"position":[[4,1]]},"2739":{"position":[[3,1]]},"2741":{"position":[[3,1]]},"2743":{"position":[[3,1],[16,1]]},"2744":{"position":[[3,1]]},"2746":{"position":[[3,1]]},"2748":{"position":[[3,1]]},"2750":{"position":[[3,1]]},"2752":{"position":[[3,1]]},"2753":{"position":[[3,1]]},"2755":{"position":[[3,1]]},"2757":{"position":[[3,1]]},"2759":{"position":[[3,1]]},"2761":{"position":[[3,1]]},"2763":{"position":[[3,1],[7,1]]},"2765":{"position":[[3,1]]},"2820":{"position":[[5,1]]},"2832":{"position":[[3,1]]},"2833":{"position":[[3,1]]},"2835":{"position":[[3,1]]},"2855":{"position":[[5,1]]},"2871":{"position":[[4,1]]},"2934":{"position":[[5,1]]},"2938":{"position":[[3,1]]},"2940":{"position":[[3,1]]},"2942":{"position":[[3,1]]},"2944":{"position":[[3,1]]},"2946":{"position":[[3,1]]},"2948":{"position":[[3,1]]},"2950":{"position":[[3,1],[5,1]]},"2964":{"position":[[5,1]]},"3006":{"position":[[0,1]]},"3008":{"position":[[0,1]]},"3010":{"position":[[0,1]]},"3012":{"position":[[0,1]]},"3014":{"position":[[0,1]]},"3016":{"position":[[0,1]]},"3083":{"position":[[5,1]]},"3125":{"position":[[5,1]]},"3151":{"position":[[3,1]]},"3153":{"position":[[3,1]]},"3155":{"position":[[3,1]]},"3157":{"position":[[3,1]]},"3182":{"position":[[5,1]]},"3227":{"position":[[7,1]]},"3239":{"position":[[5,1]]},"3270":{"position":[[7,1]]},"3272":{"position":[[5,1]]},"3310":{"position":[[4,1]]},"3328":{"position":[[4,1]]},"3366":{"position":[[5,1]]},"3368":{"position":[[5,1]]},"3370":{"position":[[5,1]]},"3372":{"position":[[5,1]]},"3388":{"position":[[7,1]]},"3439":{"position":[[5,1]]},"3443":{"position":[[3,1]]},"3445":{"position":[[3,1]]},"3447":{"position":[[3,1]]},"3449":{"position":[[3,1]]},"3451":{"position":[[3,1]]},"3453":{"position":[[3,1]]},"3455":{"position":[[3,1],[5,1]]},"3457":{"position":[[3,1]]},"3495":{"position":[[5,1]]},"3544":{"position":[[5,1]]},"3572":{"position":[[3,1]]},"3574":{"position":[[3,1]]},"3576":{"position":[[3,1]]},"3578":{"position":[[3,1]]},"3580":{"position":[[3,1]]},"3582":{"position":[[3,1]]},"3607":{"position":[[0,1]]},"3609":{"position":[[0,1]]},"3611":{"position":[[0,1]]},"3613":{"position":[[0,1]]},"3615":{"position":[[0,1]]},"3617":{"position":[[0,1]]},"3619":{"position":[[0,1]]},"3621":{"position":[[0,1]]},"3623":{"position":[[0,1],[4,1]]},"3625":{"position":[[0,1]]},"3627":{"position":[[0,1]]},"3629":{"position":[[0,1]]},"3631":{"position":[[0,1]]},"3633":{"position":[[0,1]]},"3635":{"position":[[0,1]]},"3637":{"position":[[0,1]]},"3639":{"position":[[0,1],[4,1]]},"3641":{"position":[[0,1]]},"3643":{"position":[[0,1]]},"3645":{"position":[[0,1]]},"3647":{"position":[[0,1]]},"3649":{"position":[[0,1]]},"3651":{"position":[[0,1]]},"3653":{"position":[[0,1]]},"3655":{"position":[[0,1]]},"3657":{"position":[[0,1]]},"3659":{"position":[[0,1]]},"3661":{"position":[[0,1]]},"3663":{"position":[[0,1]]},"3665":{"position":[[0,1]]},"3667":{"position":[[0,1]]},"3669":{"position":[[0,1]]},"3671":{"position":[[0,1]]},"3673":{"position":[[0,1]]},"3675":{"position":[[0,1]]},"3677":{"position":[[0,1]]},"3679":{"position":[[0,1]]},"3681":{"position":[[0,1]]},"3683":{"position":[[0,1]]},"3685":{"position":[[0,1]]},"3687":{"position":[[0,1]]},"3689":{"position":[[0,1]]},"3691":{"position":[[0,1]]},"3693":{"position":[[0,1]]},"3695":{"position":[[0,1]]},"3697":{"position":[[0,1]]},"3699":{"position":[[0,1]]},"3701":{"position":[[0,1]]},"3703":{"position":[[0,1]]},"3705":{"position":[[0,1],[2,1]]},"3707":{"position":[[0,1]]},"3709":{"position":[[0,1]]},"3711":{"position":[[0,1]]},"3713":{"position":[[0,1]]},"3715":{"position":[[0,1]]},"3717":{"position":[[0,1]]},"3719":{"position":[[0,1]]},"3721":{"position":[[0,1]]},"3723":{"position":[[0,1]]},"3753":{"position":[[3,1]]},"3773":{"position":[[7,1]]},"3807":{"position":[[7,1]]},"3813":{"position":[[5,1]]},"3814":{"position":[[5,1]]},"3816":{"position":[[5,1]]},"3818":{"position":[[5,1]]},"3820":{"position":[[5,1]]},"3845":{"position":[[8,1]]},"3871":{"position":[[8,1]]},"3913":{"position":[[3,1]]},"3933":{"position":[[3,1]]},"3967":{"position":[[9,1]]}}}],["7",{"_index":109,"t":{"151":{"position":[[3,1]]},"256":{"position":[[3,1]]},"281":{"position":[[5,1]]},"324":{"position":[[4,1]]},"364":{"position":[[4,1]]},"366":{"position":[[4,1]]},"368":{"position":[[4,1]]},"389":{"position":[[3,1]]},"418":{"position":[[3,1]]},"454":{"position":[[4,1]]},"493":{"position":[[5,1]]},"523":{"position":[[4,1]]},"611":{"position":[[2,1]]},"656":{"position":[[4,1]]},"660":{"position":[[2,1]]},"662":{"position":[[2,1]]},"664":{"position":[[2,1]]},"666":{"position":[[2,1]]},"668":{"position":[[2,1]]},"670":{"position":[[2,1]]},"672":{"position":[[2,1],[4,1]]},"733":{"position":[[5,1]]},"772":{"position":[[13,1]]},"790":{"position":[[4,1]]},"792":{"position":[[4,1]]},"794":{"position":[[4,1]]},"837":{"position":[[5,1]]},"867":{"position":[[5,1]]},"918":{"position":[[5,1]]},"976":{"position":[[7,1]]},"982":{"position":[[5,1]]},"1001":{"position":[[6,1]]},"1040":{"position":[[4,1]]},"1065":{"position":[[7,1]]},"1084":{"position":[[7,1]]},"1094":{"position":[[7,1]]},"1095":{"position":[[5,1]]},"1120":{"position":[[7,1]]},"1184":{"position":[[7,1]]},"1195":{"position":[[5,1]]},"1245":{"position":[[7,1]]},"1262":{"position":[[7,1]]},"1268":{"position":[[5,1]]},"1336":{"position":[[4,1]]},"1406":{"position":[[3,1]]},"1407":{"position":[[3,1]]},"1409":{"position":[[3,1]]},"1411":{"position":[[3,1]]},"1413":{"position":[[3,1]]},"1562":{"position":[[3,1]]},"1590":{"position":[[4,1]]},"1591":{"position":[[4,1]]},"1593":{"position":[[4,1]]},"1595":{"position":[[4,1]]},"1597":{"position":[[4,1]]},"1599":{"position":[[4,1]]},"1614":{"position":[[6,1]]},"1652":{"position":[[6,1]]},"1746":{"position":[[3,1]]},"1748":{"position":[[3,1]]},"1750":{"position":[[3,1]]},"1752":{"position":[[3,1]]},"1754":{"position":[[3,1]]},"1786":{"position":[[4,1]]},"1808":{"position":[[3,1]]},"1831":{"position":[[0,1]]},"1833":{"position":[[0,1]]},"1835":{"position":[[0,1]]},"1836":{"position":[[0,1]]},"1838":{"position":[[0,1]]},"1840":{"position":[[0,1]]},"1842":{"position":[[0,1]]},"1844":{"position":[[0,1]]},"1846":{"position":[[0,1]]},"1848":{"position":[[0,1]]},"1850":{"position":[[0,1]]},"1852":{"position":[[0,1]]},"1854":{"position":[[0,1]]},"1856":{"position":[[0,1]]},"1858":{"position":[[0,1]]},"1860":{"position":[[0,1]]},"1862":{"position":[[0,1]]},"1864":{"position":[[0,1],[2,1]]},"1866":{"position":[[0,1]]},"1868":{"position":[[0,1]]},"1870":{"position":[[0,1]]},"1872":{"position":[[0,1]]},"1874":{"position":[[0,1]]},"1876":{"position":[[0,1]]},"1878":{"position":[[0,1]]},"1880":{"position":[[0,1]]},"1882":{"position":[[0,1]]},"1884":{"position":[[0,1]]},"1886":{"position":[[0,1]]},"1888":{"position":[[0,1]]},"1916":{"position":[[4,1]]},"1918":{"position":[[4,1]]},"1920":{"position":[[4,1]]},"2032":{"position":[[2,1]]},"2078":{"position":[[0,1]]},"2080":{"position":[[0,1]]},"2082":{"position":[[0,1]]},"2084":{"position":[[0,1]]},"2086":{"position":[[0,1]]},"2114":{"position":[[2,1]]},"2143":{"position":[[3,1]]},"2219":{"position":[[3,1]]},"2286":{"position":[[4,1]]},"2368":{"position":[[5,1]]},"2386":{"position":[[3,1]]},"2429":{"position":[[5,1]]},"2441":{"position":[[3,1]]},"2443":{"position":[[3,1]]},"2459":{"position":[[5,1]]},"2494":{"position":[[2,1]]},"2496":{"position":[[2,1]]},"2498":{"position":[[2,1]]},"2500":{"position":[[2,1]]},"2502":{"position":[[2,1]]},"2504":{"position":[[2,1]]},"2505":{"position":[[2,1]]},"2507":{"position":[[2,1]]},"2509":{"position":[[2,1]]},"2511":{"position":[[2,1]]},"2513":{"position":[[2,1],[4,1]]},"2543":{"position":[[3,1]]},"2545":{"position":[[3,1]]},"2546":{"position":[[3,1]]},"2548":{"position":[[3,1]]},"2592":{"position":[[4,1]]},"2675":{"position":[[6,1]]},"2724":{"position":[[4,1]]},"2837":{"position":[[3,1]]},"2873":{"position":[[4,1]]},"2874":{"position":[[4,1]]},"2876":{"position":[[4,1]]},"2878":{"position":[[4,1]]},"2880":{"position":[[4,1]]},"2882":{"position":[[4,1]]},"2936":{"position":[[5,1]]},"2952":{"position":[[3,1]]},"2954":{"position":[[3,1]]},"2956":{"position":[[3,1]]},"2958":{"position":[[3,1]]},"2960":{"position":[[3,1]]},"2962":{"position":[[3,1]]},"2964":{"position":[[3,1]]},"3060":{"position":[[0,1]]},"3062":{"position":[[0,1]]},"3064":{"position":[[0,1]]},"3127":{"position":[[5,1]]},"3159":{"position":[[3,1]]},"3161":{"position":[[3,1]]},"3163":{"position":[[3,1]]},"3165":{"position":[[3,1]]},"3167":{"position":[[3,1]]},"3169":{"position":[[3,1]]},"3184":{"position":[[5,1]]},"3229":{"position":[[7,1]]},"3274":{"position":[[5,1]]},"3330":{"position":[[4,1]]},"3374":{"position":[[5,1]]},"3390":{"position":[[7,1]]},"3441":{"position":[[5,1]]},"3457":{"position":[[5,1]]},"3459":{"position":[[3,1]]},"3497":{"position":[[5,1]]},"3546":{"position":[[5,1]]},"3584":{"position":[[3,1]]},"3586":{"position":[[3,1]]},"3588":{"position":[[3,1]]},"3590":{"position":[[3,1]]},"3592":{"position":[[3,1]]},"3641":{"position":[[4,1]]},"3707":{"position":[[2,1]]},"3709":{"position":[[2,1]]},"3711":{"position":[[2,1]]},"3713":{"position":[[2,1]]},"3755":{"position":[[3,1]]},"3809":{"position":[[7,1]]},"3822":{"position":[[5,1]]},"3823":{"position":[[5,1]]},"3825":{"position":[[5,1]]},"3847":{"position":[[8,1]]},"3873":{"position":[[8,1]]},"3911":{"position":[[3,1]]},"3931":{"position":[[3,1]]},"3935":{"position":[[5,1]]},"3965":{"position":[[3,1]]},"3993":{"position":[[3,1]]}}}],["8",{"_index":112,"t":{"153":{"position":[[3,1]]},"283":{"position":[[5,1]]},"326":{"position":[[4,1]]},"370":{"position":[[4,1]]},"391":{"position":[[3,1]]},"420":{"position":[[3,1]]},"456":{"position":[[4,1]]},"495":{"position":[[5,1]]},"525":{"position":[[4,1]]},"578":{"position":[[0,1]]},"580":{"position":[[0,1]]},"582":{"position":[[0,1]]},"584":{"position":[[0,1]]},"586":{"position":[[0,1]]},"588":{"position":[[0,1]]},"590":{"position":[[0,1]]},"592":{"position":[[0,1]]},"594":{"position":[[0,1]]},"596":{"position":[[0,1]]},"598":{"position":[[0,1]]},"600":{"position":[[0,1]]},"601":{"position":[[0,1]]},"603":{"position":[[0,1]]},"605":{"position":[[0,1]]},"607":{"position":[[0,1]]},"609":{"position":[[0,1]]},"611":{"position":[[0,1]]},"613":{"position":[[0,1],[2,1]]},"614":{"position":[[0,1],[2,1]]},"616":{"position":[[0,1],[2,1]]},"618":{"position":[[0,1]]},"620":{"position":[[0,1]]},"622":{"position":[[0,1]]},"624":{"position":[[0,1]]},"626":{"position":[[0,1]]},"628":{"position":[[0,1]]},"630":{"position":[[0,1]]},"632":{"position":[[0,1]]},"634":{"position":[[0,1]]},"636":{"position":[[0,1]]},"638":{"position":[[0,1]]},"640":{"position":[[0,1]]},"733":{"position":[[44,1]]},"735":{"position":[[5,1]]},"778":{"position":[[2,1]]},"780":{"position":[[2,1]]},"782":{"position":[[2,1]]},"784":{"position":[[2,1]]},"786":{"position":[[2,1]]},"788":{"position":[[2,1]]},"790":{"position":[[2,1]]},"792":{"position":[[2,1]]},"794":{"position":[[2,1]]},"796":{"position":[[2,1],[4,1]]},"869":{"position":[[5,1]]},"870":{"position":[[5,1]]},"872":{"position":[[5,1]]},"874":{"position":[[5,1]]},"916":{"position":[[20,1]]},"920":{"position":[[5,1]]},"978":{"position":[[7,1]]},"1003":{"position":[[6,1]]},"1042":{"position":[[4,1]]},"1085":{"position":[[7,1]]},"1096":{"position":[[5,1]]},"1122":{"position":[[7,1]]},"1197":{"position":[[5,1]]},"1247":{"position":[[7,1]]},"1264":{"position":[[7,1]]},"1270":{"position":[[5,1]]},"1272":{"position":[[5,1]]},"1274":{"position":[[5,1]]},"1276":{"position":[[5,1]]},"1338":{"position":[[4,1]]},"1415":{"position":[[3,1]]},"1601":{"position":[[4,1]]},"1602":{"position":[[4,1]]},"1604":{"position":[[4,1]]},"1606":{"position":[[4,1]]},"1608":{"position":[[4,1]]},"1610":{"position":[[4,1]]},"1612":{"position":[[4,1]]},"1614":{"position":[[4,1]]},"1616":{"position":[[4,1],[6,1]]},"1618":{"position":[[4,1]]},"1620":{"position":[[4,1]]},"1622":{"position":[[4,1]]},"1624":{"position":[[4,1]]},"1626":{"position":[[4,1]]},"1628":{"position":[[4,1]]},"1630":{"position":[[4,1]]},"1632":{"position":[[4,1]]},"1634":{"position":[[4,1]]},"1636":{"position":[[4,1]]},"1654":{"position":[[6,1]]},"1756":{"position":[[3,1]]},"1788":{"position":[[4,1]]},"1810":{"position":[[3,1]]},"1866":{"position":[[2,1]]},"1922":{"position":[[4,1]]},"1924":{"position":[[4,1]]},"1926":{"position":[[4,1]]},"1928":{"position":[[4,1]]},"2034":{"position":[[2,1]]},"2116":{"position":[[2,1]]},"2146":{"position":[[0,1]]},"2148":{"position":[[0,1]]},"2150":{"position":[[0,1]]},"2152":{"position":[[0,1]]},"2154":{"position":[[0,1]]},"2221":{"position":[[3,1]]},"2370":{"position":[[5,1]]},"2388":{"position":[[3,1]]},"2431":{"position":[[5,1]]},"2445":{"position":[[3,1]]},"2447":{"position":[[3,1]]},"2449":{"position":[[3,1]]},"2451":{"position":[[3,1]]},"2453":{"position":[[3,1]]},"2455":{"position":[[3,1]]},"2457":{"position":[[3,1]]},"2459":{"position":[[3,1]]},"2461":{"position":[[3,1],[5,1]]},"2463":{"position":[[3,1]]},"2550":{"position":[[3,1]]},"2594":{"position":[[4,1]]},"2726":{"position":[[4,1]]},"2839":{"position":[[3,1]]},"2884":{"position":[[4,1]]},"2886":{"position":[[4,1]]},"2888":{"position":[[4,1]]},"2890":{"position":[[4,1]]},"2892":{"position":[[4,1]]},"2894":{"position":[[4,1]]},"2966":{"position":[[3,1]]},"2968":{"position":[[3,1]]},"2970":{"position":[[3,1]]},"3028":{"position":[[0,1]]},"3030":{"position":[[0,1]]},"3032":{"position":[[0,1]]},"3171":{"position":[[3,1]]},"3172":{"position":[[3,1]]},"3174":{"position":[[3,1]]},"3176":{"position":[[3,1]]},"3178":{"position":[[3,1]]},"3180":{"position":[[3,1]]},"3182":{"position":[[3,1]]},"3184":{"position":[[3,1]]},"3186":{"position":[[3,1],[5,1]]},"3231":{"position":[[7,1]]},"3276":{"position":[[5,1]]},"3302":{"position":[[2,1]]},"3303":{"position":[[2,1]]},"3304":{"position":[[2,1]]},"3306":{"position":[[2,1]]},"3308":{"position":[[2,1]]},"3310":{"position":[[2,1]]},"3332":{"position":[[4,1]]},"3376":{"position":[[5,1]]},"3378":{"position":[[5,1]]},"3380":{"position":[[5,1]]},"3382":{"position":[[5,1]]},"3384":{"position":[[5,1]]},"3386":{"position":[[5,1]]},"3388":{"position":[[5,1]]},"3390":{"position":[[5,1]]},"3392":{"position":[[5,1],[7,1]]},"3461":{"position":[[3,1]]},"3499":{"position":[[5,1]]},"3548":{"position":[[5,1]]},"3594":{"position":[[3,1]]},"3643":{"position":[[4,1]]},"3715":{"position":[[2,1]]},"3811":{"position":[[7,1]]},"3827":{"position":[[5,1]]},"3829":{"position":[[5,1]]},"3849":{"position":[[8,1]]},"3875":{"position":[[8,1]]},"3909":{"position":[[3,1]]},"3929":{"position":[[3,1]]},"3965":{"position":[[9,1]]}}}],["9",{"_index":186,"t":{"285":{"position":[[5,1]]},"328":{"position":[[4,1]]},"372":{"position":[[4,1]]},"393":{"position":[[3,1]]},"422":{"position":[[3,1]]},"458":{"position":[[4,1]]},"499":{"position":[[0,1]]},"501":{"position":[[0,1]]},"503":{"position":[[0,1]]},"505":{"position":[[0,1]]},"507":{"position":[[0,1]]},"509":{"position":[[0,1]]},"511":{"position":[[0,1]]},"513":{"position":[[0,1]]},"515":{"position":[[0,1]]},"517":{"position":[[0,1]]},"519":{"position":[[0,1]]},"521":{"position":[[0,1]]},"523":{"position":[[0,1]]},"525":{"position":[[0,1]]},"527":{"position":[[0,1],[4,1]]},"529":{"position":[[0,1]]},"531":{"position":[[0,1]]},"533":{"position":[[0,1]]},"535":{"position":[[0,1]]},"564":{"position":[[0,1]]},"566":{"position":[[0,1]]},"568":{"position":[[0,1]]},"569":{"position":[[0,1]]},"571":{"position":[[0,1]]},"573":{"position":[[0,1]]},"575":{"position":[[0,1]]},"618":{"position":[[2,1]]},"620":{"position":[[2,1]]},"622":{"position":[[2,1]]},"624":{"position":[[2,1]]},"626":{"position":[[2,1]]},"644":{"position":[[0,1]]},"646":{"position":[[0,1]]},"648":{"position":[[0,1]]},"650":{"position":[[0,1]]},"652":{"position":[[0,1]]},"654":{"position":[[0,1]]},"656":{"position":[[0,1]]},"660":{"position":[[0,1]]},"662":{"position":[[0,1]]},"664":{"position":[[0,1]]},"666":{"position":[[0,1]]},"668":{"position":[[0,1]]},"670":{"position":[[0,1]]},"672":{"position":[[0,1]]},"676":{"position":[[0,1]]},"678":{"position":[[0,1]]},"680":{"position":[[0,1]]},"682":{"position":[[0,1]]},"684":{"position":[[0,1]]},"686":{"position":[[0,1]]},"687":{"position":[[0,1]]},"689":{"position":[[0,1]]},"691":{"position":[[0,1]]},"693":{"position":[[0,1]]},"695":{"position":[[0,1]]},"697":{"position":[[0,1]]},"699":{"position":[[0,1]]},"703":{"position":[[0,1]]},"705":{"position":[[0,1]]},"707":{"position":[[0,1]]},"709":{"position":[[0,1]]},"710":{"position":[[0,1]]},"712":{"position":[[0,1]]},"714":{"position":[[0,1]]},"716":{"position":[[0,1]]},"718":{"position":[[0,1]]},"720":{"position":[[0,1]]},"721":{"position":[[0,1]]},"723":{"position":[[0,1]]},"725":{"position":[[0,1]]},"727":{"position":[[0,1]]},"729":{"position":[[0,1]]},"731":{"position":[[0,1]]},"733":{"position":[[0,1]]},"735":{"position":[[0,1]]},"738":{"position":[[0,1]]},"740":{"position":[[0,1]]},"742":{"position":[[0,1]]},"744":{"position":[[0,1]]},"746":{"position":[[0,1]]},"748":{"position":[[0,1]]},"750":{"position":[[0,1]]},"752":{"position":[[0,1]]},"755":{"position":[[0,1],[2,1]]},"757":{"position":[[0,1],[2,1]]},"758":{"position":[[0,1],[2,1]]},"760":{"position":[[0,1],[2,1]]},"762":{"position":[[0,1],[2,1]]},"764":{"position":[[0,1],[2,1]]},"766":{"position":[[0,1],[2,1]]},"768":{"position":[[0,1],[2,1]]},"770":{"position":[[0,1],[2,1]]},"772":{"position":[[0,1],[2,1]]},"774":{"position":[[0,1],[2,1]]},"778":{"position":[[0,1]]},"780":{"position":[[0,1]]},"782":{"position":[[0,1]]},"784":{"position":[[0,1]]},"786":{"position":[[0,1]]},"788":{"position":[[0,1]]},"790":{"position":[[0,1]]},"792":{"position":[[0,1]]},"794":{"position":[[0,1]]},"796":{"position":[[0,1]]},"800":{"position":[[0,1]]},"802":{"position":[[0,1]]},"804":{"position":[[0,1]]},"806":{"position":[[0,1]]},"808":{"position":[[0,1]]},"809":{"position":[[0,1]]},"811":{"position":[[0,1]]},"813":{"position":[[0,1]]},"815":{"position":[[0,1]]},"817":{"position":[[0,1]]},"819":{"position":[[0,1]]},"821":{"position":[[0,1]]},"823":{"position":[[0,1]]},"825":{"position":[[0,1]]},"827":{"position":[[0,1]]},"829":{"position":[[0,1]]},"831":{"position":[[0,1]]},"833":{"position":[[0,1]]},"835":{"position":[[0,1]]},"837":{"position":[[0,1]]},"840":{"position":[[0,1]]},"842":{"position":[[0,1]]},"843":{"position":[[0,1]]},"845":{"position":[[0,1]]},"847":{"position":[[0,1]]},"850":{"position":[[0,1]]},"852":{"position":[[0,1]]},"854":{"position":[[0,1]]},"856":{"position":[[0,1]]},"858":{"position":[[0,1]]},"859":{"position":[[0,1]]},"861":{"position":[[0,1]]},"863":{"position":[[0,1]]},"865":{"position":[[0,1]]},"867":{"position":[[0,1]]},"869":{"position":[[0,1]]},"870":{"position":[[0,1]]},"872":{"position":[[0,1]]},"874":{"position":[[0,1]]},"876":{"position":[[0,1],[5,1]]},"878":{"position":[[0,1]]},"880":{"position":[[0,1]]},"882":{"position":[[0,1]]},"884":{"position":[[0,1]]},"886":{"position":[[0,1]]},"888":{"position":[[0,1]]},"890":{"position":[[0,1]]},"894":{"position":[[0,1]]},"896":{"position":[[0,1]]},"898":{"position":[[0,1]]},"900":{"position":[[0,1]]},"902":{"position":[[0,1]]},"904":{"position":[[0,1]]},"906":{"position":[[0,1]]},"908":{"position":[[0,1]]},"910":{"position":[[0,1]]},"912":{"position":[[0,1]]},"914":{"position":[[0,1]]},"916":{"position":[[0,1]]},"918":{"position":[[0,1]]},"920":{"position":[[0,1]]},"923":{"position":[[0,1]]},"925":{"position":[[0,1]]},"926":{"position":[[0,1]]},"928":{"position":[[0,1]]},"930":{"position":[[0,1]]},"932":{"position":[[0,1]]},"934":{"position":[[0,1]]},"936":{"position":[[0,1]]},"940":{"position":[[0,1]]},"942":{"position":[[0,1]]},"944":{"position":[[0,1]]},"946":{"position":[[0,1]]},"948":{"position":[[0,1]]},"950":{"position":[[0,1]]},"953":{"position":[[0,1]]},"955":{"position":[[0,1]]},"957":{"position":[[0,1]]},"959":{"position":[[0,1]]},"961":{"position":[[0,1]]},"963":{"position":[[0,1]]},"964":{"position":[[0,1]]},"966":{"position":[[0,1]]},"968":{"position":[[0,1]]},"970":{"position":[[0,1]]},"972":{"position":[[0,1]]},"974":{"position":[[0,1]]},"976":{"position":[[0,1]]},"978":{"position":[[0,1]]},"980":{"position":[[0,1],[7,1]]},"982":{"position":[[0,1]]},"985":{"position":[[0,1]]},"987":{"position":[[0,1]]},"989":{"position":[[0,1]]},"991":{"position":[[0,1]]},"993":{"position":[[0,1]]},"995":{"position":[[0,1]]},"997":{"position":[[0,1]]},"999":{"position":[[0,1]]},"1001":{"position":[[0,1]]},"1003":{"position":[[0,1]]},"1005":{"position":[[0,1],[6,1]]},"1007":{"position":[[0,1]]},"1009":{"position":[[0,1]]},"1011":{"position":[[0,1]]},"1013":{"position":[[0,1]]},"1015":{"position":[[0,1]]},"1017":{"position":[[0,1]]},"1019":{"position":[[0,1]]},"1021":{"position":[[0,1]]},"1023":{"position":[[0,1]]},"1025":{"position":[[0,1]]},"1027":{"position":[[0,1]]},"1028":{"position":[[0,1]]},"1030":{"position":[[0,1]]},"1032":{"position":[[0,1]]},"1034":{"position":[[0,1]]},"1036":{"position":[[0,1]]},"1038":{"position":[[0,1]]},"1040":{"position":[[0,1]]},"1042":{"position":[[0,1]]},"1045":{"position":[[0,1]]},"1047":{"position":[[0,1]]},"1049":{"position":[[0,1]]},"1051":{"position":[[0,1]]},"1053":{"position":[[0,1]]},"1055":{"position":[[0,1]]},"1057":{"position":[[0,1]]},"1059":{"position":[[0,1]]},"1061":{"position":[[0,1]]},"1063":{"position":[[0,1]]},"1065":{"position":[[0,1]]},"1067":{"position":[[0,1]]},"1069":{"position":[[0,1]]},"1070":{"position":[[0,1]]},"1072":{"position":[[0,1]]},"1074":{"position":[[0,1]]},"1076":{"position":[[0,1]]},"1077":{"position":[[0,1]]},"1078":{"position":[[0,1]]},"1079":{"position":[[0,1]]},"1080":{"position":[[0,1]]},"1081":{"position":[[0,1]]},"1083":{"position":[[0,1]]},"1084":{"position":[[0,1]]},"1085":{"position":[[0,1]]},"1086":{"position":[[0,1],[7,1]]},"1087":{"position":[[0,1]]},"1088":{"position":[[0,1]]},"1089":{"position":[[0,1]]},"1090":{"position":[[0,1]]},"1091":{"position":[[0,1]]},"1092":{"position":[[0,1]]},"1093":{"position":[[0,1]]},"1094":{"position":[[0,1]]},"1095":{"position":[[0,1]]},"1096":{"position":[[0,1]]},"1098":{"position":[[0,1],[5,1]]},"1102":{"position":[[0,1]]},"1104":{"position":[[0,1]]},"1106":{"position":[[0,1]]},"1108":{"position":[[0,1]]},"1110":{"position":[[0,1]]},"1112":{"position":[[0,1]]},"1114":{"position":[[0,1]]},"1116":{"position":[[0,1]]},"1118":{"position":[[0,1]]},"1120":{"position":[[0,1]]},"1122":{"position":[[0,1]]},"1124":{"position":[[0,1]]},"1126":{"position":[[0,1]]},"1128":{"position":[[0,1]]},"1130":{"position":[[0,1]]},"1132":{"position":[[0,1]]},"1134":{"position":[[0,1]]},"1136":{"position":[[0,1]]},"1140":{"position":[[0,1]]},"1142":{"position":[[0,1]]},"1144":{"position":[[0,1]]},"1146":{"position":[[0,1]]},"1148":{"position":[[0,1]]},"1150":{"position":[[0,1]]},"1152":{"position":[[0,1]]},"1156":{"position":[[0,1]]},"1158":{"position":[[0,1]]},"1159":{"position":[[0,1]]},"1161":{"position":[[0,1]]},"1163":{"position":[[0,1]]},"1165":{"position":[[0,1]]},"1167":{"position":[[0,1]]},"1169":{"position":[[0,1]]},"1171":{"position":[[0,1]]},"1172":{"position":[[0,1]]},"1174":{"position":[[0,1]]},"1176":{"position":[[0,1]]},"1178":{"position":[[0,1]]},"1180":{"position":[[0,1]]},"1182":{"position":[[0,1]]},"1184":{"position":[[0,1]]},"1186":{"position":[[0,1]]},"1187":{"position":[[0,1]]},"1189":{"position":[[0,1]]},"1191":{"position":[[0,1]]},"1193":{"position":[[0,1]]},"1195":{"position":[[0,1]]},"1197":{"position":[[0,1]]},"1199":{"position":[[0,1],[5,1]]},"1201":{"position":[[0,1]]},"1203":{"position":[[0,1]]},"1205":{"position":[[0,1]]},"1207":{"position":[[0,1]]},"1209":{"position":[[0,1]]},"1211":{"position":[[0,1]]},"1213":{"position":[[0,1]]},"1215":{"position":[[0,1]]},"1217":{"position":[[0,1]]},"1220":{"position":[[0,1]]},"1222":{"position":[[0,1]]},"1224":{"position":[[0,1]]},"1226":{"position":[[0,1]]},"1228":{"position":[[0,1]]},"1230":{"position":[[0,1]]},"1232":{"position":[[0,1]]},"1233":{"position":[[0,1]]},"1235":{"position":[[0,1]]},"1237":{"position":[[0,1]]},"1239":{"position":[[0,1]]},"1241":{"position":[[0,1]]},"1243":{"position":[[0,1]]},"1245":{"position":[[0,1]]},"1247":{"position":[[0,1]]},"1249":{"position":[[0,1]]},"1250":{"position":[[0,1]]},"1252":{"position":[[0,1]]},"1254":{"position":[[0,1]]},"1256":{"position":[[0,1]]},"1258":{"position":[[0,1]]},"1260":{"position":[[0,1]]},"1262":{"position":[[0,1]]},"1264":{"position":[[0,1]]},"1266":{"position":[[0,1]]},"1268":{"position":[[0,1]]},"1270":{"position":[[0,1]]},"1272":{"position":[[0,1]]},"1274":{"position":[[0,1]]},"1276":{"position":[[0,1]]},"1278":{"position":[[0,1],[5,1]]},"1280":{"position":[[0,1]]},"1282":{"position":[[0,1]]},"1285":{"position":[[0,1]]},"1287":{"position":[[0,1]]},"1288":{"position":[[0,1]]},"1290":{"position":[[0,1]]},"1292":{"position":[[0,1]]},"1294":{"position":[[0,1]]},"1296":{"position":[[0,1]]},"1298":{"position":[[0,1]]},"1299":{"position":[[0,1]]},"1301":{"position":[[0,1]]},"1303":{"position":[[0,1]]},"1306":{"position":[[0,1]]},"1308":{"position":[[0,1]]},"1310":{"position":[[0,1]]},"1312":{"position":[[0,1]]},"1314":{"position":[[0,1]]},"1316":{"position":[[0,1]]},"1318":{"position":[[0,1]]},"1320":{"position":[[0,1]]},"1324":{"position":[[0,1]]},"1326":{"position":[[0,1]]},"1328":{"position":[[0,1]]},"1330":{"position":[[0,1]]},"1332":{"position":[[0,1]]},"1334":{"position":[[0,1]]},"1336":{"position":[[0,1]]},"1338":{"position":[[0,1]]},"1340":{"position":[[0,1],[4,1]]},"1342":{"position":[[0,1]]},"1344":{"position":[[0,1]]},"1346":{"position":[[0,1]]},"1348":{"position":[[0,1]]},"1350":{"position":[[0,1]]},"1352":{"position":[[0,1]]},"1354":{"position":[[0,1]]},"1357":{"position":[[0,1]]},"1359":{"position":[[0,1]]},"1361":{"position":[[0,1]]},"1363":{"position":[[0,1]]},"1365":{"position":[[0,1]]},"1367":{"position":[[0,1]]},"1369":{"position":[[0,1]]},"1417":{"position":[[3,1]]},"1565":{"position":[[0,1]]},"1567":{"position":[[0,1]]},"1618":{"position":[[6,1]]},"1638":{"position":[[4,1]]},"1640":{"position":[[4,1]]},"1642":{"position":[[4,1]]},"1644":{"position":[[4,1]]},"1646":{"position":[[4,1]]},"1648":{"position":[[4,1]]},"1650":{"position":[[4,1]]},"1652":{"position":[[4,1]]},"1654":{"position":[[4,1]]},"1656":{"position":[[4,1],[6,1]]},"1658":{"position":[[4,1]]},"1760":{"position":[[0,1]]},"1762":{"position":[[0,1]]},"1764":{"position":[[0,1]]},"1766":{"position":[[0,1]]},"1768":{"position":[[0,1]]},"1770":{"position":[[0,1]]},"1772":{"position":[[0,1]]},"1774":{"position":[[0,1]]},"1776":{"position":[[0,1]]},"1778":{"position":[[0,1]]},"1780":{"position":[[0,1]]},"1782":{"position":[[0,1]]},"1784":{"position":[[0,1]]},"1786":{"position":[[0,1]]},"1788":{"position":[[0,1]]},"1812":{"position":[[3,1]]},"1868":{"position":[[2,1]]},"1930":{"position":[[4,1]]},"1932":{"position":[[4,1]]},"1934":{"position":[[4,1]]},"1936":{"position":[[4,1]]},"2036":{"position":[[2,1]]},"2118":{"position":[[2,1]]},"2157":{"position":[[0,1]]},"2159":{"position":[[0,1]]},"2161":{"position":[[0,1]]},"2223":{"position":[[3,1]]},"2372":{"position":[[5,1]]},"2433":{"position":[[5,1]]},"2463":{"position":[[5,1]]},"2465":{"position":[[3,1]]},"2467":{"position":[[3,1]]},"2469":{"position":[[3,1]]},"2552":{"position":[[3,1]]},"2645":{"position":[[2,1]]},"2647":{"position":[[2,1]]},"2648":{"position":[[2,1]]},"2650":{"position":[[2,1]]},"2652":{"position":[[2,1]]},"2654":{"position":[[2,1]]},"2656":{"position":[[2,1]]},"2658":{"position":[[2,1]]},"2728":{"position":[[4,1]]},"2730":{"position":[[4,1]]},"2896":{"position":[[4,1]]},"2972":{"position":[[3,1]]},"3036":{"position":[[0,1]]},"3038":{"position":[[0,1]]},"3040":{"position":[[0,1]]},"3087":{"position":[[0,1]]},"3089":{"position":[[0,1]]},"3091":{"position":[[0,1]]},"3093":{"position":[[0,1]]},"3095":{"position":[[0,1]]},"3097":{"position":[[0,1]]},"3099":{"position":[[0,1]]},"3101":{"position":[[0,1]]},"3103":{"position":[[0,1]]},"3105":{"position":[[0,1]]},"3107":{"position":[[0,1]]},"3109":{"position":[[0,1]]},"3111":{"position":[[0,1]]},"3113":{"position":[[0,1]]},"3115":{"position":[[0,1]]},"3117":{"position":[[0,1]]},"3119":{"position":[[0,1]]},"3121":{"position":[[0,1]]},"3123":{"position":[[0,1]]},"3125":{"position":[[0,1]]},"3127":{"position":[[0,1]]},"3188":{"position":[[3,1]]},"3233":{"position":[[7,1]]},"3278":{"position":[[5,1]]},"3281":{"position":[[0,1]]},"3283":{"position":[[0,1]]},"3285":{"position":[[0,1]]},"3286":{"position":[[0,1]]},"3288":{"position":[[0,1]]},"3290":{"position":[[0,1]]},"3292":{"position":[[0,1]]},"3293":{"position":[[0,1]]},"3295":{"position":[[0,1]]},"3297":{"position":[[0,1]]},"3394":{"position":[[5,1]]},"3396":{"position":[[5,1]]},"3398":{"position":[[5,1]]},"3400":{"position":[[5,1]]},"3402":{"position":[[5,1]]},"3463":{"position":[[3,1]]},"3501":{"position":[[5,1]]},"3550":{"position":[[5,1]]},"3596":{"position":[[3,1]]},"3645":{"position":[[4,1]]},"3717":{"position":[[2,1]]},"3719":{"position":[[2,1]]},"3721":{"position":[[2,1]]},"3831":{"position":[[5,1]]},"3851":{"position":[[8,1]]},"3877":{"position":[[8,1]]},"3911":{"position":[[5,1]]},"3913":{"position":[[5,1]]},"3915":{"position":[[5,1]]},"3917":{"position":[[5,1]]},"3919":{"position":[[5,1]]},"3927":{"position":[[3,1]]},"3929":{"position":[[5,1]]},"3933":{"position":[[5,1]]},"3963":{"position":[[3,1]]}}}],["actionfilterattribut",{"_index":813,"t":{"1926":{"position":[[8,21]]}}}],["addinject",{"_index":881,"t":{"2271":{"position":[[8,9]]}}}],["addinjectbas",{"_index":882,"t":{"2273":{"position":[[8,13]]}}}],["addinjectmini",{"_index":883,"t":{"2275":{"position":[[8,13]]}}}],["addinjectwithunifyresult",{"_index":884,"t":{"2277":{"position":[[8,24]]}}}],["ae",{"_index":734,"t":{"1680":{"position":[[7,3]]}}}],["ajax",{"_index":277,"t":{"418":{"position":[[10,4]]}}}],["angular",{"_index":202,"t":{"309":{"position":[[8,7]]},"315":{"position":[[8,7]]},"320":{"position":[[8,7]]}}}],["aop",{"_index":620,"t":{"1423":{"position":[[6,3]]},"1425":{"position":[[10,3]]},"1427":{"position":[[8,3]]},"1429":{"position":[[8,3]]},"1664":{"position":[[10,3]]}}}],["api",{"_index":650,"t":{"1471":{"position":[[16,3]]},"1666":{"position":[[10,3]]},"2871":{"position":[[12,3]]},"3191":{"position":[[14,3]]},"3679":{"position":[[27,3]]},"3707":{"position":[[18,3]]}}}],["apicontrol",{"_index":378,"t":{"626":{"position":[[7,13]]}}}],["apidescriptionset",{"_index":718,"t":{"1638":{"position":[[7,22]]}}}],["app",{"_index":23,"t":{"29":{"position":[[3,3]]},"2238":{"position":[[11,3]]},"2576":{"position":[[8,3]]}}}],["appauthorizehandl",{"_index":97,"t":{"132":{"position":[[7,19]]}}}],["appdbcontext",{"_index":323,"t":{"501":{"position":[[6,12]]},"503":{"position":[[6,12]]},"515":{"position":[[9,12]]},"531":{"position":[[7,12]]}}}],["appinfoopt",{"_index":974,"t":{"2708":{"position":[[11,14]]},"2710":{"position":[[11,14]]},"2712":{"position":[[11,14]]}}}],["applic",{"_index":1120,"t":{"3338":{"position":[[21,11]]},"3671":{"position":[[10,11]]}}}],["appset",{"_index":151,"t":{"219":{"position":[[9,11]]},"432":{"position":[[11,11]]},"434":{"position":[[11,11]]},"1419":{"position":[[6,11]]},"1868":{"position":[[4,10]]},"2706":{"position":[[11,11]]},"2886":{"position":[[11,11]]},"3342":{"position":[[12,11]]}}}],["appstartup",{"_index":143,"t":{"205":{"position":[[6,10]]},"207":{"position":[[13,10]]},"209":{"position":[[8,10]]},"211":{"position":[[8,10]]},"213":{"position":[[8,10]]}}}],["arg",{"_index":1022,"t":{"2892":{"position":[[11,4]]}}}],["asp",{"_index":821,"t":{"1972":{"position":[[9,3]]},"1986":{"position":[[9,3]]},"2009":{"position":[[9,3]]}}}],["aspnetcor",{"_index":384,"t":{"634":{"position":[[27,10]]}}}],["assemblyfixtur",{"_index":1128,"t":{"3388":{"position":[[10,15]]}}}],["assert",{"_index":1133,"t":{"3404":{"position":[[8,6]]}}}],["asyncloc",{"_index":1014,"t":{"2855":{"position":[[7,10]]}}}],["attribut",{"_index":810,"t":{"1902":{"position":[[11,9]]},"2242":{"position":[[18,9]]}}}],["axio",{"_index":1049,"t":{"2994":{"position":[[7,5]]}}}],["backgroundservic",{"_index":319,"t":{"491":{"position":[[9,17]]},"2225":{"position":[[6,17]]},"2227":{"position":[[6,17]]},"2479":{"position":[[8,17]]}}}],["badpageresult",{"_index":806,"t":{"1886":{"position":[[5,13]]}}}],["batch",{"_index":447,"t":{"757":{"position":[[18,5]]}}}],["benchmarkdotnet",{"_index":133,"t":{"185":{"position":[[7,15]]}}}],["bin",{"_index":834,"t":{"2050":{"position":[[12,3]]}}}],["bodi",{"_index":876,"t":{"2254":{"position":[[9,4]]},"3499":{"position":[[10,4]]},"3507":{"position":[[11,4]]},"3544":{"position":[[10,4]]}}}],["bulkextens",{"_index":449,"t":{"764":{"position":[[13,14]]}}}],["byte",{"_index":763,"t":{"1742":{"position":[[21,4]]},"1744":{"position":[[9,4]]},"3521":{"position":[[11,4]]},"3562":{"position":[[11,4]]}}}],["cach",{"_index":1013,"t":{"2853":{"position":[[7,5]]}}}],["callcontext",{"_index":899,"t":{"2318":{"position":[[7,11]]}}}],["cap",{"_index":795,"t":{"1826":{"position":[[16,3]]}}}],["case",{"_index":504,"t":{"918":{"position":[[13,4]]},"980":{"position":[[9,4]]}}}],["cd",{"_index":426,"t":{"723":{"position":[[9,2]]}}}],["chang",{"_index":594,"t":{"1276":{"position":[[14,6]]}}}],["channel",{"_index":897,"t":{"2310":{"position":[[10,7]]},"2316":{"position":[[10,7]]}}}],["clay",{"_index":171,"t":{"266":{"position":[[5,4]]}}}],["cli",{"_index":405,"t":{"684":{"position":[[12,3]]},"1552":{"position":[[5,3]]}}}],["client",{"_index":1162,"t":{"3580":{"position":[[11,6]]},"3582":{"position":[[11,6]]}}}],["code",{"_index":419,"t":{"720":{"position":[[10,4]]},"1318":{"position":[[8,4]]},"2505":{"position":[[22,4]]},"2511":{"position":[[22,4]]},"2964":{"position":[[10,4]]}}}],["commandlin",{"_index":686,"t":{"1536":{"position":[[23,11]]}}}],["componentcontext",{"_index":237,"t":{"364":{"position":[[6,16]]}}}],["configur",{"_index":885,"t":{"2279":{"position":[[14,9]]}}}],["configureservic",{"_index":880,"t":{"2270":{"position":[[14,17]]}}}],["content",{"_index":1150,"t":{"3501":{"position":[[10,7]]}}}],["contenttyp",{"_index":851,"t":{"2097":{"position":[[10,11]]}}}],["controllerbas",{"_index":17,"t":{"25":{"position":[[2,14]]},"2234":{"position":[[10,14]]}}}],["cooki",{"_index":91,"t":{"124":{"position":[[10,6]]},"2546":{"position":[[7,7]]},"2845":{"position":[[7,6]]},"3602":{"position":[[9,7]]}}}],["cor",{"_index":268,"t":{"407":{"position":[[9,4]]},"410":{"position":[[10,4]]},"3673":{"position":[[18,4]]}}}],["core",{"_index":467,"t":{"835":{"position":[[12,4]]},"1577":{"position":[[13,4]]},"1972":{"position":[[17,4]]},"1986":{"position":[[17,4]]},"2009":{"position":[[17,4]]},"3467":{"position":[[14,4]]}}}],["corsaccessorset",{"_index":272,"t":{"414":{"position":[[5,20]]}}}],["cron",{"_index":298,"t":{"468":{"position":[[10,4]]},"481":{"position":[[7,4]]},"485":{"position":[[12,4]]},"2223":{"position":[[8,4]]},"2227":{"position":[[24,4]]},"2416":{"position":[[5,4]]},"2417":{"position":[[11,4]]},"2419":{"position":[[10,4]]},"2421":{"position":[[12,4]]},"2425":{"position":[[10,4]]},"2439":{"position":[[13,4]]},"2463":{"position":[[10,4]]},"2483":{"position":[[8,4]]},"2826":{"position":[[7,4]]}}}],["cronstringformat",{"_index":312,"t":{"483":{"position":[[7,16]]}}}],["crontab",{"_index":320,"t":{"493":{"position":[[7,7]]}}}],["cs",{"_index":240,"t":{"370":{"position":[[17,2]]},"636":{"position":[[17,2]]},"1906":{"position":[[18,2]]},"1976":{"position":[[14,2]]},"1978":{"position":[[16,2]]},"1990":{"position":[[14,2]]},"2013":{"position":[[14,2]]},"2267":{"position":[[16,2]]},"2669":{"position":[[19,2]]},"2673":{"position":[[19,2]]},"3574":{"position":[[15,2]]}}}],["csproj",{"_index":685,"t":{"1534":{"position":[[21,6]]},"2638":{"position":[[12,6]]},"2665":{"position":[[12,6]]},"2671":{"position":[[20,6]]}}}],["dapper",{"_index":338,"t":{"539":{"position":[[10,6]]},"543":{"position":[[12,6]]}}}],["databas",{"_index":1039,"t":{"2914":{"position":[[16,8]]},"2938":{"position":[[8,8]]}}}],["dataset",{"_index":555,"t":{"1112":{"position":[[12,7]]},"1163":{"position":[[12,7]]},"1176":{"position":[[12,7]]},"1237":{"position":[[12,7]]},"1254":{"position":[[12,7]]},"2384":{"position":[[15,7]]}}}],["datat",{"_index":463,"t":{"813":{"position":[[16,9]]},"1110":{"position":[[12,9]]},"1159":{"position":[[12,9]]},"1172":{"position":[[12,9]]},"1233":{"position":[[12,9]]},"1250":{"position":[[12,9]]},"2384":{"position":[[5,9]]}}}],["datavalid",{"_index":358,"t":{"588":{"position":[[4,14]]},"590":{"position":[[6,14]]},"592":{"position":[[4,14]]},"607":{"position":[[7,14]]}}}],["datavalidationfilt",{"_index":376,"t":{"624":{"position":[[25,20]]}}}],["dateonli",{"_index":919,"t":{"2380":{"position":[[8,8]]}}}],["datetimeoffset",{"_index":921,"t":{"2382":{"position":[[8,14]]}}}],["db",{"_index":529,"t":{"1025":{"position":[[8,2]]},"1230":{"position":[[9,2]]}}}],["dbcommandinterceptor",{"_index":510,"t":{"928":{"position":[[9,20]]}}}],["dbconnectioninterceptor",{"_index":509,"t":{"926":{"position":[[9,23]]}}}],["dbcontext",{"_index":324,"t":{"503":{"position":[[21,9]]}}}],["dbparamet",{"_index":561,"t":{"1130":{"position":[[11,11]]}}}],["debug",{"_index":1143,"t":{"3441":{"position":[[7,5]]}}}],["default",{"_index":581,"t":{"1215":{"position":[[11,7]]},"3461":{"position":[[8,7]]},"3598":{"position":[[9,7]]}}}],["delet",{"_index":645,"t":{"1467":{"position":[[25,6]]}}}],["dependson",{"_index":232,"t":{"356":{"position":[[7,9]]}}}],["desc",{"_index":733,"t":{"1678":{"position":[[7,4]]}}}],["di",{"_index":609,"t":{"1388":{"position":[[9,2]]}}}],["dll",{"_index":654,"t":{"1471":{"position":[[32,3]]}}}],["docker",{"_index":602,"t":{"1373":{"position":[[10,6]]},"1478":{"position":[[11,6]]},"1480":{"position":[[10,6]]}}}],["dockerfil",{"_index":660,"t":{"1482":{"position":[[12,10]]}}}],["dotnet",{"_index":424,"t":{"721":{"position":[[12,6]]},"1484":{"position":[[20,6]]},"1517":{"position":[[7,6]]}}}],["dynamicapicontrollerset",{"_index":728,"t":{"1660":{"position":[[7,28]]}}}],["ef",{"_index":425,"t":{"721":{"position":[[19,2]]},"835":{"position":[[9,2]]}}}],["efcor",{"_index":446,"t":{"757":{"position":[[11,6]]},"764":{"position":[[6,6]]},"772":{"position":[[6,6]]},"1565":{"position":[[7,6]]},"2693":{"position":[[9,6]]},"3316":{"position":[[17,6]]}}}],["emailset",{"_index":288,"t":{"446":{"position":[[11,12]]}}}],["enabl",{"_index":723,"t":{"1650":{"position":[[8,7]]}}}],["ensuretransact",{"_index":1106,"t":{"3288":{"position":[[9,17]]}}}],["entiti",{"_index":777,"t":{"1770":{"position":[[8,6]]}}}],["entitybas",{"_index":776,"t":{"1768":{"position":[[8,10]]}}}],["entityframeworkcor",{"_index":435,"t":{"733":{"position":[[13,19]]}}}],["entitynotkey",{"_index":778,"t":{"1772":{"position":[[8,12]]}}}],["errorcodeitemmetadata",{"_index":801,"t":{"1856":{"position":[[10,21]]}}}],["eventbusoptionsbuild",{"_index":793,"t":{"1820":{"position":[[6,22]]}}}],["exampl",{"_index":1176,"t":{"3663":{"position":[[10,7]]}}}],["exceptionfilterattribut",{"_index":814,"t":{"1934":{"position":[[8,24]]}}}],["fakedelet",{"_index":457,"t":{"792":{"position":[[12,10]]}}}],["fileprovidertyp",{"_index":752,"t":{"1723":{"position":[[12,17]]}}}],["first",{"_index":599,"t":{"1318":{"position":[[13,5]]},"2964":{"position":[[15,5]]}}}],["fluentvalid",{"_index":382,"t":{"632":{"position":[[8,16]]},"634":{"position":[[10,16]]}}}],["form",{"_index":1182,"t":{"3671":{"position":[[28,4]]}}}],["formrout",{"_index":715,"t":{"1634":{"position":[[10,9]]}}}],["friendlyexceptionset",{"_index":805,"t":{"1884":{"position":[[5,25]]}}}],["fromqueri",{"_index":708,"t":{"1626":{"position":[[15,9]]}}}],["fs",{"_index":753,"t":{"1725":{"position":[[7,2]]}}}],["func",{"_index":751,"t":{"1723":{"position":[[7,4]]}}}],["furion",{"_index":492,"t":{"894":{"position":[[7,6]]},"1536":{"position":[[10,6]]},"1974":{"position":[[7,6]]},"1975":{"position":[[4,6]]},"1988":{"position":[[7,6]]},"1989":{"position":[[4,6]]},"2011":{"position":[[7,6]]},"2012":{"position":[[4,6]]},"2775":{"position":[[9,6]]},"2818":{"position":[[10,6]]},"2865":{"position":[[9,6]]},"2884":{"position":[[9,6]]},"3214":{"position":[[7,6]]},"3316":{"position":[[8,6]]},"3318":{"position":[[8,6]]},"3366":{"position":[[10,6]]},"3368":{"position":[[12,6]]},"3372":{"position":[[12,6]]},"3402":{"position":[[12,6]]}}}],["genericrunopt",{"_index":1027,"t":{"2896":{"position":[[36,17]]}}}],["getrepositori",{"_index":530,"t":{"1025":{"position":[[11,13]]}}}],["getsqldispatchproxi",{"_index":588,"t":{"1230":{"position":[[12,19]]}}}],["globalus",{"_index":888,"t":{"2289":{"position":[[9,11]]}}}],["group",{"_index":726,"t":{"1656":{"position":[[8,6]]},"3689":{"position":[[14,6]]}}}],["guid",{"_index":903,"t":{"2330":{"position":[[10,4]]}}}],["gzip",{"_index":1157,"t":{"3529":{"position":[[11,4]]},"3568":{"position":[[11,4]]}}}],["handler",{"_index":106,"t":{"145":{"position":[[12,7]]}}}],["hash",{"_index":1057,"t":{"3107":{"position":[[9,4]]},"3111":{"position":[[13,4]]}}}],["head",{"_index":700,"t":{"1608":{"position":[[12,4]]}}}],["hellotool",{"_index":683,"t":{"1533":{"position":[[10,10]]},"1534":{"position":[[10,10]]}}}],["html",{"_index":859,"t":{"2148":{"position":[[7,4]]}}}],["http",{"_index":1164,"t":{"3584":{"position":[[9,5]]},"3594":{"position":[[20,4]]},"3600":{"position":[[9,4]]}}}],["httpclient",{"_index":1152,"t":{"3511":{"position":[[8,10]]},"3552":{"position":[[8,10]]}}}],["httpcontext",{"_index":11,"t":{"22":{"position":[[0,11]]},"24":{"position":[[0,11]]},"29":{"position":[[7,11]]},"31":{"position":[[0,11]]},"2030":{"position":[[7,11]]},"2230":{"position":[[9,11]]},"2232":{"position":[[9,11]]},"2238":{"position":[[15,11]]},"2240":{"position":[[6,11]]},"2588":{"position":[[8,11]]},"2851":{"position":[[7,11]]},"3163":{"position":[[7,11]]}}}],["httpmethod",{"_index":713,"t":{"1630":{"position":[[21,10]]}}}],["hub",{"_index":1073,"t":{"3151":{"position":[[9,3]]},"3157":{"position":[[7,3]]},"3159":{"position":[[8,3]]}}}],["ialwaysrunresultfilt",{"_index":816,"t":{"1946":{"position":[[9,22]]}}}],["iapplicationcompon",{"_index":223,"t":{"345":{"position":[[8,21]]}}}],["icalcservic",{"_index":1127,"t":{"3378":{"position":[[14,12]]}}}],["iclassfixtur",{"_index":1129,"t":{"3390":{"position":[[9,13]]}}}],["icollectionfixtur",{"_index":1130,"t":{"3392":{"position":[[9,18]]}}}],["icompon",{"_index":221,"t":{"341":{"position":[[6,10]]}}}],["id",{"_index":422,"t":{"720":{"position":[[23,3]]},"2325":{"position":[[14,2]]},"2327":{"position":[[9,2]]},"2332":{"position":[[9,2]]},"2334":{"position":[[12,2]]},"3763":{"position":[[14,2]]}}}],["idistributedcach",{"_index":162,"t":{"242":{"position":[[7,17]]}}}],["ientiti",{"_index":774,"t":{"1766":{"position":[[8,7]]}}}],["ientitychangedlisten",{"_index":442,"t":{"748":{"position":[[7,22]]}}}],["ierrorcodetypeprovid",{"_index":802,"t":{"1866":{"position":[[4,22]]}}}],["ifexcept",{"_index":803,"t":{"1870":{"position":[[6,11]]}}}],["ifileprovid",{"_index":750,"t":{"1722":{"position":[[12,13]]},"1723":{"position":[[39,13]]},"1727":{"position":[[5,13]]}}}],["iformfil",{"_index":761,"t":{"1742":{"position":[[9,9]]}}}],["ihost",{"_index":1076,"t":{"3165":{"position":[[7,5]]}}}],["ihttpcontextaccessor",{"_index":22,"t":{"27":{"position":[[5,20]]},"2236":{"position":[[11,20]]}}}],["ihttpdispatchproxi",{"_index":1160,"t":{"3533":{"position":[[5,18]]}}}],["ihubcontext",{"_index":1075,"t":{"3161":{"position":[[7,11]]},"3167":{"position":[[11,11]]},"3169":{"position":[[7,11]]}}}],["ii",{"_index":635,"t":{"1459":{"position":[[11,3]]},"1473":{"position":[[7,3]]},"1824":{"position":[[6,3]]},"2489":{"position":[[6,3]]},"3338":{"position":[[11,3]]},"3340":{"position":[[11,3]]}}}],["ijob",{"_index":1209,"t":{"3786":{"position":[[14,4]]}}}],["ijobexecutor",{"_index":1216,"t":{"3831":{"position":[[13,12]]}}}],["ijobmonitor",{"_index":1214,"t":{"3827":{"position":[[13,11]]}}}],["ijobpersist",{"_index":1227,"t":{"3897":{"position":[[15,15]]}}}],["ijsonserializerprovid",{"_index":906,"t":{"2344":{"position":[[5,23]]}}}],["ilogg",{"_index":1137,"t":{"3419":{"position":[[7,7]]}}}],["iloggerfactori",{"_index":1138,"t":{"3421":{"position":[[7,14]]},"3435":{"position":[[7,14]]}}}],["iloggingbuild",{"_index":1142,"t":{"3437":{"position":[[7,15]]}}}],["imodelbuilderfilt",{"_index":1043,"t":{"2934":{"position":[[10,19]]}}}],["imultitenantondatabas",{"_index":1046,"t":{"2948":{"position":[[10,22]]}}}],["imultitenantonschema",{"_index":1047,"t":{"2962":{"position":[[10,20]]}}}],["imultitenantont",{"_index":1042,"t":{"2932":{"position":[[10,19]]}}}],["inheritdoc",{"_index":1188,"t":{"3687":{"position":[[7,10]]}}}],["inject",{"_index":618,"t":{"1415":{"position":[[6,9]]},"1976":{"position":[[20,6]]},"1978":{"position":[[25,6]]},"1990":{"position":[[20,6]]},"2013":{"position":[[20,6]]},"2263":{"position":[[6,6]]},"2265":{"position":[[6,6]]},"2268":{"position":[[8,6]]},"2284":{"position":[[9,6]]}}}],["inner",{"_index":475,"t":{"859":{"position":[[13,5]]}}}],["ioc",{"_index":608,"t":{"1388":{"position":[[5,3]]}}}],["ip",{"_index":35,"t":{"39":{"position":[[5,2]]},"41":{"position":[[6,2]]},"2248":{"position":[[13,2]]},"2250":{"position":[[14,2]]}}}],["ipc",{"_index":892,"t":{"2302":{"position":[[9,3]]},"2304":{"position":[[8,3]]},"2306":{"position":[[5,3]]}}}],["irepositori",{"_index":577,"t":{"1195":{"position":[[7,11]]},"1197":{"position":[[7,11]]},"1207":{"position":[[10,11]]},"1209":{"position":[[10,11]]}}}],["ischedul",{"_index":1221,"t":{"3859":{"position":[[13,10]]},"3861":{"position":[[13,10]]}}}],["ischedulerfactori",{"_index":1217,"t":{"3833":{"position":[[15,17]]}}}],["isensitivedetectionprovid",{"_index":998,"t":{"2795":{"position":[[11,27]]}}}],["iservicecompon",{"_index":222,"t":{"343":{"position":[[8,17]]}}}],["iserviceprovid",{"_index":623,"t":{"1433":{"position":[[8,16]]},"3523":{"position":[[11,16]]}}}],["iservicescopefactori",{"_index":624,"t":{"1435":{"position":[[8,20]]}}}],["isparetimework",{"_index":933,"t":{"2405":{"position":[[7,16]]},"2414":{"position":[[7,16]]},"2433":{"position":[[7,16]]},"2441":{"position":[[5,16]]},"2469":{"position":[[7,16]]},"2477":{"position":[[8,16]]}}}],["isql",{"_index":589,"t":{"1230":{"position":[[32,4]]}}}],["isqldispatchproxi",{"_index":585,"t":{"1222":{"position":[[10,17]]}}}],["isqlrepositori",{"_index":576,"t":{"1193":{"position":[[7,14]]},"1205":{"position":[[10,14]]}}}],["item",{"_index":1012,"t":{"2851":{"position":[[19,5]]}}}],["iviewengin",{"_index":1207,"t":{"3751":{"position":[[5,11]]}}}],["iwebcompon",{"_index":224,"t":{"347":{"position":[[8,13]]}}}],["java",{"_index":1087,"t":{"3196":{"position":[[8,4]]}}}],["javascript",{"_index":1085,"t":{"3192":{"position":[[8,10]]}}}],["jenkin",{"_index":659,"t":{"1480":{"position":[[19,7]]},"1484":{"position":[[12,7]]},"1486":{"position":[[7,7]]},"1489":{"position":[[7,7]]}}}],["jobbuild",{"_index":1224,"t":{"3867":{"position":[[13,10]]}}}],["jobdetail",{"_index":1208,"t":{"3775":{"position":[[12,9]]}}}],["jobexecutingcontext",{"_index":1210,"t":{"3792":{"position":[[9,19]]}}}],["jobexecutioncontext",{"_index":1215,"t":{"3829":{"position":[[14,19]]}}}],["join",{"_index":476,"t":{"859":{"position":[[19,4]]},"861":{"position":[[18,4]]},"863":{"position":[[19,4]]},"3117":{"position":[[17,4]]}}}],["json",{"_index":152,"t":{"219":{"position":[[21,4]]},"287":{"position":[[11,4]]},"432":{"position":[[23,4]]},"434":{"position":[[23,4]]},"446":{"position":[[24,4]]},"1419":{"position":[[18,4]]},"1868":{"position":[[15,4]]},"2340":{"position":[[9,4]]},"2386":{"position":[[17,4],[35,4]]},"2494":{"position":[[9,4]]},"2496":{"position":[[9,4]]},"2502":{"position":[[6,4]]},"2507":{"position":[[11,4]]},"2556":{"position":[[6,4]]},"2706":{"position":[[23,4]]},"2750":{"position":[[9,4]]},"2886":{"position":[[23,4]]},"3451":{"position":[[7,4]]},"3455":{"position":[[10,4]]},"3505":{"position":[[11,4]]},"3546":{"position":[[10,4]]},"3669":{"position":[[19,4]]},"3895":{"position":[[14,4]]}}}],["jsonresult",{"_index":1201,"t":{"3719":{"position":[[9,10]]}}}],["jwt",{"_index":93,"t":{"126":{"position":[[10,3]]},"149":{"position":[[8,3]]},"151":{"position":[[10,3]]},"1682":{"position":[[7,3]]}}}],["kafka",{"_index":785,"t":{"1802":{"position":[[7,5]]}}}],["keepnam",{"_index":720,"t":{"1644":{"position":[[8,8]]}}}],["keepverb",{"_index":722,"t":{"1648":{"position":[[8,8]]}}}],["key",{"_index":982,"t":{"2734":{"position":[[13,3]]}}}],["knife4jui",{"_index":1197,"t":{"3703":{"position":[[19,9]]}}}],["l",{"_index":948,"t":{"2525":{"position":[[5,1]]}}}],["lambda",{"_index":487,"t":{"882":{"position":[[13,6]]}}}],["left",{"_index":478,"t":{"861":{"position":[[13,4]]}}}],["legacyrunopt",{"_index":1026,"t":{"2896":{"position":[[17,16]]}}}],["linq",{"_index":465,"t":{"817":{"position":[[9,4]]},"823":{"position":[[11,4]]},"825":{"position":[[9,4]]},"833":{"position":[[11,4]]},"912":{"position":[[9,4]]}}}],["list",{"_index":464,"t":{"815":{"position":[[16,4]]},"1114":{"position":[[12,4]]},"1161":{"position":[[12,4]]},"1174":{"position":[[12,4]]},"1235":{"position":[[12,4]]},"1252":{"position":[[12,4]]}}}],["localizationset",{"_index":946,"t":{"2521":{"position":[[10,20]]},"2552":{"position":[[5,20]]}}}],["log",{"_index":1139,"t":{"3423":{"position":[[7,3]]}}}],["loggingmonitor",{"_index":81,"t":{"113":{"position":[[6,14]]},"3443":{"position":[[6,14]]},"3457":{"position":[[9,14]]}}}],["long",{"_index":917,"t":{"2378":{"position":[[8,4]]}}}],["macro",{"_index":307,"t":{"479":{"position":[[9,5]]},"2423":{"position":[[7,5]]},"2427":{"position":[[10,5]]}}}],["manualcommit",{"_index":1107,"t":{"3295":{"position":[[10,12]]}}}],["maphub",{"_index":1074,"t":{"3155":{"position":[[8,6]]}}}],["mapster",{"_index":972,"t":{"2685":{"position":[[5,7]]}}}],["markdown",{"_index":1195,"t":{"3701":{"position":[[25,8]]}}}],["md5",{"_index":731,"t":{"1676":{"position":[[7,3]]}}}],["messagecent",{"_index":743,"t":{"1698":{"position":[[5,13]]},"1816":{"position":[[6,13]]}}}],["migrat",{"_index":431,"t":{"729":{"position":[[15,10]]},"731":{"position":[[17,10]]}}}],["mime",{"_index":852,"t":{"2097":{"position":[[24,4]]},"2099":{"position":[[15,4]]}}}],["miniprofil",{"_index":380,"t":{"628":{"position":[[5,12]]},"2040":{"position":[[11,12]]},"3653":{"position":[[12,12]]}}}],["modelbind",{"_index":367,"t":{"609":{"position":[[7,11]]}}}],["modul",{"_index":724,"t":{"1652":{"position":[[8,6]]}}}],["mongocli",{"_index":958,"t":{"2608":{"position":[[12,11]]}}}],["mongodb",{"_index":957,"t":{"2598":{"position":[[10,7]]},"2602":{"position":[[12,7]]}}}],["ms",{"_index":651,"t":{"1471":{"position":[[20,2]]}}}],["mvc",{"_index":357,"t":{"586":{"position":[[6,3]]},"596":{"position":[[9,3]]},"598":{"position":[[9,3]]},"1573":{"position":[[6,3]]},"1662":{"position":[[12,3]]},"3328":{"position":[[9,3]]},"3681":{"position":[[10,3]]}}}],["mysql",{"_index":434,"t":{"733":{"position":[[7,5]]},"916":{"position":[[7,5]]}}}],["name",{"_index":719,"t":{"1642":{"position":[[8,4]]}}}],["ncach",{"_index":166,"t":{"250":{"position":[[11,6]]}}}],["net",{"_index":39,"t":{"45":{"position":[[4,3]]},"59":{"position":[[4,3]]},"69":{"position":[[4,3]]},"733":{"position":[[36,3]]},"1577":{"position":[[9,3]]},"1972":{"position":[[13,3]]},"1986":{"position":[[13,3]]},"2009":{"position":[[13,3]]},"3195":{"position":[[9,3]]},"3467":{"position":[[10,3]]}}}],["net5",{"_index":889,"t":{"2297":{"position":[[7,4]]},"2743":{"position":[[11,4]]},"2904":{"position":[[8,4]]}}}],["net6",{"_index":969,"t":{"2663":{"position":[[12,4]]},"3344":{"position":[[10,4]]}}}],["net7",{"_index":965,"t":{"2636":{"position":[[12,4]]}}}],["newtonsoft",{"_index":926,"t":{"2386":{"position":[[24,10]]}}}],["nonvalid",{"_index":368,"t":{"611":{"position":[[5,13]]},"622":{"position":[[7,13]]}}}],["nuget",{"_index":448,"t":{"758":{"position":[[17,5]]},"1550":{"position":[[9,5]]},"2640":{"position":[[11,5]]},"2656":{"position":[[23,5]]},"2667":{"position":[[11,5]]}}}],["object",{"_index":461,"t":{"809":{"position":[[16,6]]},"1118":{"position":[[17,6]]},"1723":{"position":[[31,6]]}}}],["oh",{"_index":798,"t":{"1846":{"position":[[12,2]]},"1850":{"position":[[11,2]]}}}],["onconfigur",{"_index":330,"t":{"517":{"position":[[8,13]]},"2950":{"position":[[10,13]]}}}],["oop",{"_index":797,"t":{"1846":{"position":[[7,4]]},"1850":{"position":[[6,4]]}}}],["operationid",{"_index":1194,"t":{"3699":{"position":[[21,11]]}}}],["optionsset",{"_index":978,"t":{"2722":{"position":[[7,15]]}}}],["oracl",{"_index":1104,"t":{"3276":{"position":[[7,6]]}}}],["orm",{"_index":1094,"t":{"3208":{"position":[[16,3]]}}}],["output",{"_index":573,"t":{"1184":{"position":[[11,6]]},"1262":{"position":[[11,6]]}}}],["pbkdf2",{"_index":735,"t":{"1684":{"position":[[7,6]]}}}],["person",{"_index":416,"t":{"707":{"position":[[16,6]]},"1059":{"position":[[12,6]]},"1061":{"position":[[11,6]]}}}],["pm2",{"_index":983,"t":{"2739":{"position":[[10,3]]},"2752":{"position":[[7,3]]},"3076":{"position":[[7,3]]},"3079":{"position":[[9,3]]},"3081":{"position":[[9,3]]}}}],["pr",{"_index":257,"t":{"393":{"position":[[8,2]]}}}],["preview",{"_index":41,"t":{"45":{"position":[[10,7]]},"59":{"position":[[10,7]]},"69":{"position":[[10,7]]}}}],["procedureoutputresult",{"_index":562,"t":{"1132":{"position":[[10,21]]}}}],["program",{"_index":822,"t":{"1976":{"position":[[6,7]]},"1990":{"position":[[6,7]]},"2013":{"position":[[6,7]]},"2267":{"position":[[8,7]]},"2673":{"position":[[11,7]]}}}],["ps1",{"_index":406,"t":{"684":{"position":[[16,3]]}}}],["put",{"_index":644,"t":{"1467":{"position":[[21,3]]}}}],["queri",{"_index":1011,"t":{"2849":{"position":[[7,5]]}}}],["rabbitmq",{"_index":784,"t":{"1800":{"position":[[7,8]]}}}],["rang",{"_index":1061,"t":{"3109":{"position":[[12,5]]}}}],["razorpag",{"_index":817,"t":{"1948":{"position":[[7,10]]}}}],["react",{"_index":201,"t":{"307":{"position":[[12,5]]},"313":{"position":[[12,5]]},"318":{"position":[[12,5]]}}}],["redi",{"_index":165,"t":{"248":{"position":[[11,5]]}}}],["requestservic",{"_index":956,"t":{"2588":{"position":[[20,15]]}}}],["resourc",{"_index":947,"t":{"2523":{"position":[[10,9]]},"2541":{"position":[[9,9]]}}}],["resultfilterattribut",{"_index":815,"t":{"1942":{"position":[[9,21]]},"1952":{"position":[[9,21]]}}}],["return",{"_index":574,"t":{"1184":{"position":[[18,6]]},"1262":{"position":[[18,6]]}}}],["rider",{"_index":420,"t":{"720":{"position":[[15,5]]}}}],["right",{"_index":480,"t":{"863":{"position":[[13,5]]}}}],["rsa",{"_index":736,"t":{"1686":{"position":[[7,3]]}}}],["run",{"_index":1018,"t":{"2873":{"position":[[12,3]]},"2880":{"position":[[14,3]]}}}],["runopt",{"_index":1025,"t":{"2896":{"position":[[6,10]]}}}],["saa",{"_index":1035,"t":{"2909":{"position":[[9,4]]}}}],["savechang",{"_index":350,"t":{"566":{"position":[[10,11]]}}}],["savechangesinterceptor",{"_index":511,"t":{"930":{"position":[[9,22]]}}}],["savedchangesev",{"_index":512,"t":{"932":{"position":[[9,17]]}}}],["savingchangesev",{"_index":1045,"t":{"2936":{"position":[[10,18]]}}}],["schedul",{"_index":1212,"t":{"3813":{"position":[[12,9]]}}}],["scheduleoptionsbuild",{"_index":1213,"t":{"3822":{"position":[[13,22]]},"3823":{"position":[[12,22]]},"3825":{"position":[[9,22]]}}}],["schedulerbuild",{"_index":1223,"t":{"3865":{"position":[[13,16]]}}}],["schedulermodel",{"_index":1222,"t":{"3863":{"position":[[13,14]]}}}],["schema",{"_index":781,"t":{"1786":{"position":[[15,6]]},"2494":{"position":[[14,6]]},"2496":{"position":[[14,6]]},"2502":{"position":[[11,6]]},"2507":{"position":[[16,6]]},"2916":{"position":[[16,6],[27,6]]},"2918":{"position":[[16,6]]},"2952":{"position":[[8,6]]}}}],["schemaid",{"_index":1193,"t":{"3697":{"position":[[21,8]]}}}],["scheme",{"_index":1179,"t":{"3667":{"position":[[19,7]]}}}],["scope",{"_index":625,"t":{"1437":{"position":[[8,6]]}}}],["sdk",{"_index":42,"t":{"45":{"position":[[20,3]]},"59":{"position":[[20,3]]},"69":{"position":[[20,3]]},"2636":{"position":[[17,3]]},"2663":{"position":[[17,3]]}}}],["sensit",{"_index":995,"t":{"2787":{"position":[[10,9]]}}}],["serv",{"_index":1017,"t":{"2873":{"position":[[6,5]]},"2880":{"position":[[8,5]]}}}],["server",{"_index":164,"t":{"246":{"position":[[15,6]]}}}],["servic",{"_index":1004,"t":{"2808":{"position":[[15,7]]},"2810":{"position":[[19,7]]},"2835":{"position":[[17,7]]}}}],["session",{"_index":1010,"t":{"2847":{"position":[[7,7]]}}}],["sharedresourc",{"_index":949,"t":{"2537":{"position":[[7,14]]}}}],["shell",{"_index":665,"t":{"1487":{"position":[[12,5]]}}}],["signalr",{"_index":279,"t":{"422":{"position":[[5,7]]},"1469":{"position":[[20,7]]},"3139":{"position":[[8,7]]},"3143":{"position":[[8,7]]},"3145":{"position":[[5,7]]}}}],["sm2",{"_index":737,"t":{"1690":{"position":[[5,3]]}}}],["sm3",{"_index":738,"t":{"1690":{"position":[[9,3]]}}}],["sm4",{"_index":739,"t":{"1690":{"position":[[13,3]]}}}],["snake",{"_index":503,"t":{"918":{"position":[[7,5]]}}}],["snake_cas",{"_index":502,"t":{"918":{"position":[[7,10]]}}}],["sparetim",{"_index":938,"t":{"2443":{"position":[[8,9]]},"2445":{"position":[[5,9]]},"2467":{"position":[[7,9]]},"2475":{"position":[[8,9]]}}}],["sparetimerexecut",{"_index":941,"t":{"2487":{"position":[[8,18]]}}}],["specificationdocumentset",{"_index":1198,"t":{"3705":{"position":[[4,29]]}}}],["splitcamelcas",{"_index":721,"t":{"1646":{"position":[[8,14]]}}}],["sql",{"_index":163,"t":{"246":{"position":[[11,3]]},"549":{"position":[[9,3]]},"571":{"position":[[12,3]]},"718":{"position":[[10,3]]},"878":{"position":[[11,3]]},"880":{"position":[[13,3]]},"908":{"position":[[9,3]]},"995":{"position":[[8,3]]},"997":{"position":[[13,3]]},"1011":{"position":[[13,3]]},"1013":{"position":[[13,3]]},"1032":{"position":[[11,3]]},"1156":{"position":[[10,3]]},"1158":{"position":[[12,3]]},"1199":{"position":[[10,3]]},"1201":{"position":[[13,3]]},"1220":{"position":[[10,3]]},"1224":{"position":[[12,3]]},"1232":{"position":[[7,3]]},"1268":{"position":[[7,3]]},"1278":{"position":[[7,3]]},"1285":{"position":[[7,3]]},"1287":{"position":[[7,3]]},"1298":{"position":[[7,3]]},"1361":{"position":[[14,3]]},"2108":{"position":[[7,3]]},"2110":{"position":[[7,3]]},"2112":{"position":[[7,3]]},"2126":{"position":[[8,3]]},"3272":{"position":[[7,3]]},"3274":{"position":[[10,3]]}}}],["sqlserver",{"_index":497,"t":{"914":{"position":[[7,9]]},"1076":{"position":[[7,9]]},"1087":{"position":[[7,9]]}}}],["sqlsugar",{"_index":1093,"t":{"3208":{"position":[[7,8]]},"3249":{"position":[[10,8]]},"3253":{"position":[[12,8]]},"3318":{"position":[[17,8]]}}}],["sqlsugarcli",{"_index":1102,"t":{"3259":{"position":[[7,14]]}}}],["ssl",{"_index":1163,"t":{"3584":{"position":[[5,3]]},"3586":{"position":[[12,3]]},"3588":{"position":[[15,3]]},"3590":{"position":[[12,3]]}}}],["startup",{"_index":139,"t":{"201":{"position":[[6,7]]},"203":{"position":[[8,7]]},"215":{"position":[[6,7]]},"370":{"position":[[9,7]]},"636":{"position":[[9,7]]},"1906":{"position":[[10,7]]},"1978":{"position":[[8,7]]},"2270":{"position":[[6,7]]},"2279":{"position":[[6,7]]},"2669":{"position":[[11,7]]},"2880":{"position":[[20,7]]},"2888":{"position":[[14,7]]},"3574":{"position":[[7,7]]}}}],["stream",{"_index":1155,"t":{"3521":{"position":[[18,6]]},"3562":{"position":[[18,6]]}}}],["string",{"_index":918,"t":{"2378":{"position":[[21,6]]},"2849":{"position":[[13,7]]}}}],["studio",{"_index":48,"t":{"50":{"position":[[10,6]]},"61":{"position":[[10,6]]},"74":{"position":[[10,6]]},"2504":{"position":[[15,6]]},"2505":{"position":[[15,6]]},"2509":{"position":[[15,6]]},"2511":{"position":[[15,6]]},"2652":{"position":[[17,6]]},"2656":{"position":[[13,6]]},"3326":{"position":[[13,6]]}}}],["suppresschangedlisten",{"_index":443,"t":{"750":{"position":[[8,23]]}}}],["swagger",{"_index":30,"t":{"35":{"position":[[3,7]]},"37":{"position":[[3,7]]},"324":{"position":[[6,7]]},"2244":{"position":[[11,7]]},"2246":{"position":[[11,7]]},"3274":{"position":[[16,7]]},"3459":{"position":[[11,7]]},"3625":{"position":[[8,7]]},"3627":{"position":[[4,7]]},"3661":{"position":[[15,7]]},"3665":{"position":[[11,7]]},"3667":{"position":[[10,7]]},"3669":{"position":[[11,7]]},"3673":{"position":[[7,7]]},"3675":{"position":[[7,7]]},"3677":{"position":[[7,7]]},"3679":{"position":[[15,7]]},"3683":{"position":[[7,7]]},"3685":{"position":[[12,7]]},"3695":{"position":[[7,7]]},"3697":{"position":[[11,7]]},"3699":{"position":[[11,7]]},"3701":{"position":[[7,7]]}}}],["system",{"_index":924,"t":{"2386":{"position":[[5,6]]}}}],["t",{"_index":462,"t":{"811":{"position":[[16,1]]},"815":{"position":[[21,1]]},"1114":{"position":[[17,1]]},"1120":{"position":[[18,1]]},"1161":{"position":[[17,1]]},"1174":{"position":[[17,1]]},"1235":{"position":[[17,1]]},"1252":{"position":[[17,1]]},"2855":{"position":[[18,1]]},"3419":{"position":[[15,1]]}}}],["t1",{"_index":557,"t":{"1116":{"position":[[18,2]]},"1165":{"position":[[18,2]]},"1178":{"position":[[18,2]]},"1239":{"position":[[18,2]]},"1256":{"position":[[18,2]]}}}],["t8",{"_index":558,"t":{"1116":{"position":[[24,2]]},"1165":{"position":[[24,2]]},"1178":{"position":[[24,2]]},"1239":{"position":[[24,2]]},"1256":{"position":[[24,2]]}}}],["tag",{"_index":727,"t":{"1658":{"position":[[9,3]]}}}],["task",{"_index":318,"t":{"489":{"position":[[17,4]]}}}],["tenant",{"_index":1041,"t":{"2928":{"position":[[10,6]]},"2930":{"position":[[14,6]]},"2944":{"position":[[10,6]]},"2946":{"position":[[14,6]]},"2958":{"position":[[10,6]]},"2960":{"position":[[14,6]]},"2966":{"position":[[9,6]]}}}],["tenantid",{"_index":1040,"t":{"2918":{"position":[[27,8]]},"2922":{"position":[[8,8]]}}}],["tentiti",{"_index":344,"t":{"551":{"position":[[10,7]]},"1197":{"position":[[19,7]]},"1209":{"position":[[22,7]]}}}],["text",{"_index":925,"t":{"2386":{"position":[[12,4]]}}}],["timeonli",{"_index":920,"t":{"2380":{"position":[[19,8]]}}}],["timeout",{"_index":1161,"t":{"3576":{"position":[[13,7]]}}}],["token",{"_index":102,"t":{"142":{"position":[[10,5]]},"2131":{"position":[[8,5]]},"2133":{"position":[[10,5]]},"2135":{"position":[[10,5],[20,5]]},"2137":{"position":[[16,5]]},"2139":{"position":[[8,5]]},"2141":{"position":[[11,5]]},"2143":{"position":[[8,5]]},"2252":{"position":[[14,5]]}}}],["tool",{"_index":678,"t":{"1517":{"position":[[14,5]]},"1536":{"position":[[17,5]]}}}],["trace",{"_index":1144,"t":{"3441":{"position":[[15,5]]}}}],["trigger",{"_index":1211,"t":{"3796":{"position":[[13,7]]}}}],["triggerbuild",{"_index":1225,"t":{"3869":{"position":[[13,15]]},"3871":{"position":[[15,14]]}}}],["tryvalid",{"_index":364,"t":{"603":{"position":[[6,11]]}}}],["tupl",{"_index":556,"t":{"1116":{"position":[[12,5]]},"1165":{"position":[[12,5]]},"1178":{"position":[[12,5]]},"1239":{"position":[[12,5]]},"1256":{"position":[[12,5]]},"2384":{"position":[[23,5]]}}}],["txt",{"_index":997,"t":{"2787":{"position":[[26,3]]}}}],["type",{"_index":1151,"t":{"3501":{"position":[[18,4]]}}}],["typefilt",{"_index":374,"t":{"624":{"position":[[7,10]]}}}],["typeof",{"_index":375,"t":{"624":{"position":[[18,6]]}}}],["typescript",{"_index":1086,"t":{"3193":{"position":[[8,10]]}}}],["ui",{"_index":1196,"t":{"3703":{"position":[[11,2]]}}}],["unitofwork",{"_index":1105,"t":{"3286":{"position":[[10,10]]},"3293":{"position":[[10,10]]}}}],["url",{"_index":764,"t":{"1744":{"position":[[20,3]]},"2545":{"position":[[7,3]]},"3495":{"position":[[10,3]]},"3531":{"position":[[11,3]]},"3540":{"position":[[10,3]]},"3570":{"position":[[11,3]]}}}],["urlencod",{"_index":1183,"t":{"3671":{"position":[[33,10]]}}}],["us",{"_index":7,"t":{"12":{"position":[[5,5]]},"2295":{"position":[[13,5]]},"2576":{"position":[[12,3]]}}}],["useinject",{"_index":886,"t":{"2280":{"position":[[8,9]]}}}],["useinjectbas",{"_index":887,"t":{"2282":{"position":[[8,13]]}}}],["user",{"_index":828,"t":{"2032":{"position":[[10,4]]}}}],["v1",{"_index":1234,"t":{"3979":{"position":[[0,2]]},"3981":{"position":[[0,2]]},"3983":{"position":[[0,2]]},"3985":{"position":[[0,2]]},"3987":{"position":[[0,2]]},"3989":{"position":[[0,2]]},"3991":{"position":[[0,2]]},"3993":{"position":[[0,2]]},"3995":{"position":[[0,2]]},"3997":{"position":[[0,2]]},"3999":{"position":[[0,2]]},"4001":{"position":[[0,2]]},"4003":{"position":[[0,2]]},"4005":{"position":[[0,2]]}}}],["v2",{"_index":1233,"t":{"3947":{"position":[[0,2]]},"3949":{"position":[[0,2]]},"3951":{"position":[[0,2]]},"3953":{"position":[[0,2]]},"3955":{"position":[[0,2]]},"3957":{"position":[[0,2]]},"3959":{"position":[[0,2],[6,2]]},"3961":{"position":[[0,2]]},"3963":{"position":[[0,2]]},"3965":{"position":[[0,2]]},"3967":{"position":[[0,2]]},"3969":{"position":[[0,2]]},"3971":{"position":[[0,2]]},"3973":{"position":[[0,2]]},"3975":{"position":[[0,2]]},"3977":{"position":[[0,2]]}}}],["v3",{"_index":1231,"t":{"3927":{"position":[[0,2]]},"3929":{"position":[[0,2]]},"3931":{"position":[[0,2]]},"3933":{"position":[[0,2]]},"3935":{"position":[[0,2]]},"3937":{"position":[[0,2]]},"3939":{"position":[[0,2]]},"3941":{"position":[[0,2]]},"3943":{"position":[[0,2]]},"3945":{"position":[[0,2]]}}}],["v4",{"_index":1228,"t":{"3909":{"position":[[0,2]]},"3911":{"position":[[0,2]]},"3913":{"position":[[0,2]]},"3915":{"position":[[0,2]]},"3917":{"position":[[0,2]]},"3919":{"position":[[0,2]]},"3921":{"position":[[0,2]]},"3923":{"position":[[0,2]]},"3925":{"position":[[0,2]]}}}],["valid",{"_index":365,"t":{"603":{"position":[[20,8]]}}}],["validationtyp",{"_index":366,"t":{"605":{"position":[[6,15]]},"614":{"position":[[10,15]]},"616":{"position":[[10,15]]}}}],["valu",{"_index":1177,"t":{"3663":{"position":[[18,5]]}}}],["version",{"_index":725,"t":{"1654":{"position":[[8,7]]}}}],["view",{"_index":1034,"t":{"2904":{"position":[[19,5]]}}}],["visual",{"_index":47,"t":{"50":{"position":[[3,6]]},"61":{"position":[[3,6]]},"74":{"position":[[3,6]]},"2504":{"position":[[8,6]]},"2505":{"position":[[8,6]]},"2509":{"position":[[8,6]]},"2511":{"position":[[8,6]]},"2652":{"position":[[10,6]]},"2656":{"position":[[6,6]]},"3326":{"position":[[6,6]]}}}],["vs",{"_index":418,"t":{"720":{"position":[[7,2]]}}}],["vue",{"_index":200,"t":{"307":{"position":[[8,3]]},"313":{"position":[[8,3]]},"318":{"position":[[8,3]]}}}],["web",{"_index":622,"t":{"1431":{"position":[[9,3]]},"1970":{"position":[[7,3]]},"1972":{"position":[[22,3]]},"1984":{"position":[[7,3]]},"1986":{"position":[[22,3]]},"2007":{"position":[[7,3]]},"2009":{"position":[[22,3]]},"2671":{"position":[[11,3]]},"2890":{"position":[[17,3]]},"3394":{"position":[[7,3]]}}}],["webapi",{"_index":694,"t":{"1575":{"position":[[8,6]]},"1577":{"position":[[18,6]]},"1579":{"position":[[9,6]]},"1581":{"position":[[11,6]]},"1585":{"position":[[9,6]]},"1590":{"position":[[9,6]]}}}],["webappl",{"_index":824,"t":{"1994":{"position":[[4,14]]},"2017":{"position":[[4,14]]},"3344":{"position":[[15,14]]}}}],["websocket",{"_index":646,"t":{"1469":{"position":[[9,9]]}}}],["win",{"_index":652,"t":{"1471":{"position":[[23,3]]}}}],["window",{"_index":1006,"t":{"2837":{"position":[[8,7]]}}}],["winform",{"_index":1028,"t":{"2898":{"position":[[9,7]]}}}],["word",{"_index":996,"t":{"2787":{"position":[[20,5]]}}}],["worker",{"_index":1003,"t":{"2808":{"position":[[8,6]]},"2810":{"position":[[12,6]]},"2812":{"position":[[10,6]]},"2814":{"position":[[10,6]]},"2835":{"position":[[10,6]]}}}],["wpf",{"_index":1029,"t":{"2898":{"position":[[17,3]]}}}],["writefilt",{"_index":1146,"t":{"3453":{"position":[[12,11]]}}}],["www",{"_index":1181,"t":{"3671":{"position":[[24,3]]}}}],["wwwroot",{"_index":832,"t":{"2046":{"position":[[13,7]]}}}],["x",{"_index":1180,"t":{"3671":{"position":[[22,1]]}}}],["xml",{"_index":191,"t":{"289":{"position":[[11,3]]},"3675":{"position":[[20,3]]}}}],["xunit",{"_index":1123,"t":{"3358":{"position":[[12,5]]},"3368":{"position":[[19,5]]},"3402":{"position":[[19,5]]}}}],["xxxx",{"_index":653,"t":{"1471":{"position":[[27,4]]}}}],["zack",{"_index":445,"t":{"757":{"position":[[6,4]]}}}],["一个",{"_index":173,"t":{"269":{"position":[[9,2]]},"337":{"position":[[8,2]]},"778":{"position":[[8,2]]},"780":{"position":[[8,2]]},"1411":{"position":[[7,2]]},"2164":{"position":[[6,2]]},"2181":{"position":[[7,2]]},"2183":{"position":[[7,2]]},"2185":{"position":[[7,2]]},"2187":{"position":[[7,2]]},"2211":{"position":[[7,2]]},"2213":{"position":[[7,2]]},"2215":{"position":[[7,2]]},"2451":{"position":[[9,2]]},"2453":{"position":[[9,2]]},"2455":{"position":[[9,2]]},"3378":{"position":[[11,2]]},"3679":{"position":[[24,2]]},"3837":{"position":[[13,2]]}}}],["一句",{"_index":1015,"t":{"2867":{"position":[[6,2]]}}}],["一对",{"_index":473,"t":{"854":{"position":[[7,2]]}}}],["一对一",{"_index":346,"t":{"555":{"position":[[11,3]]},"852":{"position":[[7,3]]}}}],["一条",{"_index":385,"t":{"644":{"position":[[8,2]]},"646":{"position":[[8,2]]},"953":{"position":[[13,2]]},"955":{"position":[[13,2]]}}}],["一段时间",{"_index":935,"t":{"2408":{"position":[[9,4]]}}}],["一致性",{"_index":1062,"t":{"3111":{"position":[[9,3]]}}}],["三种",{"_index":610,"t":{"1390":{"position":[[10,2]]}}}],["上下文",{"_index":322,"t":{"499":{"position":[[9,3]]},"505":{"position":[[13,3]]},"507":{"position":[[15,3]]},"509":{"position":[[15,3]]},"521":{"position":[[9,3]]},"523":{"position":[[9,3]]},"527":{"position":[[11,3]]},"940":{"position":[[9,3]]},"942":{"position":[[9,3]]},"944":{"position":[[13,3]]},"946":{"position":[[11,3]]},"948":{"position":[[9,3]]},"1053":{"position":[[18,3]]},"1055":{"position":[[18,3]]},"1057":{"position":[[19,3]]},"1310":{"position":[[13,3]]},"1316":{"position":[[13,3]]},"2114":{"position":[[11,3]]},"2116":{"position":[[12,3]]},"2118":{"position":[[13,3]]},"2120":{"position":[[15,3]]},"2924":{"position":[[14,3]]},"2926":{"position":[[15,3]]},"2940":{"position":[[14,3]]},"2942":{"position":[[15,3]]},"2954":{"position":[[14,3]]},"2956":{"position":[[15,3]]},"3465":{"position":[[8,3]]},"3792":{"position":[[29,3]]}}}],["上传",{"_index":10,"t":{"18":{"position":[[2,2]]},"1740":{"position":[[9,2]]},"1746":{"position":[[12,2]]},"3521":{"position":[[28,2]]},"3562":{"position":[[28,2]]}}}],["上传下载",{"_index":760,"t":{"1736":{"position":[[7,4]]}}}],["下次",{"_index":937,"t":{"2435":{"position":[[8,2]]}}}],["下载",{"_index":9,"t":{"16":{"position":[[2,2]]},"1738":{"position":[[9,2]]}}}],["不到",{"_index":1033,"t":{"2904":{"position":[[16,2]]}}}],["不同",{"_index":290,"t":{"450":{"position":[[6,2]]},"1958":{"position":[[9,2]]}}}],["不能",{"_index":273,"t":{"416":{"position":[[7,2]]},"2554":{"position":[[10,2]]},"3695":{"position":[[18,2]]}}}],["专属",{"_index":114,"t":{"159":{"position":[[0,2]]}}}],["业务",{"_index":870,"t":{"2200":{"position":[[6,2]]}}}],["两个",{"_index":141,"t":{"203":{"position":[[16,2]]},"1844":{"position":[[6,2]]},"1978":{"position":[[22,2]]},"2166":{"position":[[6,2]]}}}],["两种",{"_index":604,"t":{"1375":{"position":[[7,2]]},"3153":{"position":[[7,2]]}}}],["个人",{"_index":673,"t":{"1510":{"position":[[8,2]]}}}],["个人主页",{"_index":122,"t":{"169":{"position":[[0,4]]}}}],["个性",{"_index":116,"t":{"161":{"position":[[0,2]]}}}],["中",{"_index":19,"t":{"25":{"position":[[20,1]]},"318":{"position":[[18,1]]},"320":{"position":[[16,1]]},"529":{"position":[[12,1]]},"636":{"position":[[20,1]]},"817":{"position":[[14,1]]},"823":{"position":[[16,1]]},"825":{"position":[[14,1]]},"833":{"position":[[16,1]]},"1038":{"position":[[11,1]]},"1144":{"position":[[14,1]]},"1146":{"position":[[15,1]]},"1778":{"position":[[14,1]]},"1780":{"position":[[14,1]]},"1868":{"position":[[20,1]]},"1906":{"position":[[21,1]]},"1978":{"position":[[19,1]]},"2141":{"position":[[9,1]]},"2234":{"position":[[28,1]]},"2267":{"position":[[19,1]]},"2473":{"position":[[11,1]]},"2475":{"position":[[21,1]]},"2479":{"position":[[26,1]]},"2529":{"position":[[9,1]]},"2531":{"position":[[10,1]]},"2533":{"position":[[12,1]]},"2535":{"position":[[12,1]]},"2541":{"position":[[22,1]]},"2652":{"position":[[24,1]]},"2898":{"position":[[23,1]]},"3165":{"position":[[13,1]]},"3380":{"position":[[13,1]]},"3459":{"position":[[19,1]]},"3643":{"position":[[7,1]]},"3661":{"position":[[11,1]]}}}],["中心",{"_index":295,"t":{"460":{"position":[[11,2]]},"1698":{"position":[[21,2]]}}}],["中文",{"_index":951,"t":{"2554":{"position":[[8,2]]},"3306":{"position":[[6,2]]},"3659":{"position":[[7,2]]}}}],["中间件",{"_index":771,"t":{"1752":{"position":[[9,3]]},"2563":{"position":[[8,3]]},"2565":{"position":[[8,3]]},"2570":{"position":[[12,3]]},"2572":{"position":[[12,3]]},"2574":{"position":[[9,3]]},"2582":{"position":[[6,3]]}}}],["串行",{"_index":940,"t":{"2465":{"position":[[8,2]]},"2828":{"position":[[10,2]]},"3767":{"position":[[9,2]]}}}],["为什么",{"_index":799,"t":{"1848":{"position":[[6,3]]},"2325":{"position":[[5,3]]},"3609":{"position":[[4,3]]},"3611":{"position":[[4,3]]}}}],["主从",{"_index":534,"t":{"1057":{"position":[[12,2]]},"1063":{"position":[[11,2]]},"2124":{"position":[[8,2]]}}}],["主从复制",{"_index":538,"t":{"1067":{"position":[[7,4]]},"1069":{"position":[[7,4]]},"1096":{"position":[[9,4]]}}}],["主库",{"_index":533,"t":{"1053":{"position":[[12,2]]},"1076":{"position":[[17,2]]},"2126":{"position":[[12,2]]}}}],["主机",{"_index":1131,"t":{"3398":{"position":[[11,2]]}}}],["主流",{"_index":1122,"t":{"3355":{"position":[[7,2]]}}}],["主键",{"_index":452,"t":{"782":{"position":[[8,2]]},"784":{"position":[[8,2]]},"786":{"position":[[13,2]]},"788":{"position":[[13,2]]},"953":{"position":[[9,2]]},"3121":{"position":[[11,2]]}}}],["之前",{"_index":1153,"t":{"3513":{"position":[[10,2]]},"3554":{"position":[[10,2]]}}}],["之后",{"_index":648,"t":{"1471":{"position":[[11,2]]}}}],["乱码",{"_index":914,"t":{"2370":{"position":[[9,2]]},"3659":{"position":[[9,2]]}}}],["了解",{"_index":584,"t":{"1222":{"position":[[7,2]]},"1519":{"position":[[5,2]]},"1964":{"position":[[7,2]]},"2310":{"position":[[7,2]]},"2592":{"position":[[6,2]]}}}],["事件",{"_index":351,"t":{"566":{"position":[[22,2]]},"1696":{"position":[[8,2]]},"1700":{"position":[[13,2]]},"1792":{"position":[[7,2]]},"1796":{"position":[[8,2]]},"1798":{"position":[[8,2]]},"1804":{"position":[[8,2]]},"1806":{"position":[[7,2]]},"1808":{"position":[[7,2]]},"1814":{"position":[[6,2]]},"1826":{"position":[[11,2]]},"2936":{"position":[[29,2]]},"3947":{"position":[[12,2]]}}}],["事务",{"_index":1064,"t":{"3115":{"position":[[12,2]]},"3225":{"position":[[11,2]]},"3281":{"position":[[7,2]]}}}],["二级",{"_index":1117,"t":{"3336":{"position":[[9,2]]}}}],["交换",{"_index":854,"t":{"2135":{"position":[[16,2]]}}}],["什么",{"_index":85,"t":{"118":{"position":[[5,2]]},"224":{"position":[[5,2]]},"403":{"position":[[5,2]]},"407":{"position":[[5,2]]},"428":{"position":[[6,2]]},"985":{"position":[[6,2]]},"1047":{"position":[[12,2]]},"1140":{"position":[[7,2]]},"1571":{"position":[[6,2]]},"1696":{"position":[[5,2]]},"1831":{"position":[[4,2]]},"1835":{"position":[[4,2]]},"2302":{"position":[[5,2]]},"2340":{"position":[[5,2]]},"2417":{"position":[[7,2]]},"2700":{"position":[[6,2]]},"2909":{"position":[[5,2]]},"2911":{"position":[[5,2]]},"3135":{"position":[[5,2]]},"3607":{"position":[[4,2]]},"3625":{"position":[[4,2]]}}}],["介绍",{"_index":210,"t":{"328":{"position":[[14,2]]},"358":{"position":[[10,2]]},"366":{"position":[[10,2]]},"3141":{"position":[[11,2]]},"3210":{"position":[[9,2]]}}}],["仓储",{"_index":493,"t":{"904":{"position":[[11,2]]},"906":{"position":[[12,2]]},"908":{"position":[[13,2]]},"985":{"position":[[9,2]]},"987":{"position":[[8,2]]},"989":{"position":[[13,2]]},"991":{"position":[[12,2]]},"993":{"position":[[16,2]]},"995":{"position":[[14,2]]},"997":{"position":[[19,2]]},"999":{"position":[[12,2]]},"1001":{"position":[[12,2]]},"1003":{"position":[[15,2]]},"1005":{"position":[[15,2]]},"1007":{"position":[[16,2]]},"1009":{"position":[[18,2]]},"1011":{"position":[[19,2]]},"1013":{"position":[[20,2]]},"1015":{"position":[[13,2]]},"1017":{"position":[[12,2]]},"1019":{"position":[[6,2]]},"1027":{"position":[[6,2]]},"1028":{"position":[[14,2]]},"1030":{"position":[[12,2]]},"1032":{"position":[[17,2]]},"1040":{"position":[[9,2]]},"2102":{"position":[[9,2]]},"2104":{"position":[[8,2]]},"2106":{"position":[[12,2]]},"2108":{"position":[[11,2]]},"2110":{"position":[[14,2]]},"2122":{"position":[[14,2]]},"2124":{"position":[[12,2]]},"2126":{"position":[[17,2]]},"2128":{"position":[[12,2]]},"3223":{"position":[[9,2]]}}}],["代理",{"_index":547,"t":{"1079":{"position":[[12,2]]},"1090":{"position":[[14,2]]},"1220":{"position":[[14,2]]},"1224":{"position":[[16,2]]},"1278":{"position":[[11,2]]},"2112":{"position":[[11,2]]},"3533":{"position":[[24,2]]},"3534":{"position":[[11,2]]}}}],["代理服务",{"_index":871,"t":{"2203":{"position":[[8,4]]}}}],["代码",{"_index":74,"t":{"105":{"position":[[5,2]]},"303":{"position":[[13,2]]},"305":{"position":[[13,2]]},"322":{"position":[[10,2]]},"695":{"position":[[15,2]]},"1538":{"position":[[11,2]]},"3172":{"position":[[14,2]]},"3308":{"position":[[6,2]]}}}],["以外",{"_index":1081,"t":{"3176":{"position":[[14,2]]}}}],["任何",{"_index":421,"t":{"720":{"position":[[21,2]]},"1780":{"position":[[9,2]]}}}],["任务",{"_index":317,"t":{"487":{"position":[[13,2]]},"1812":{"position":[[9,2]]},"2207":{"position":[[8,2]]},"2211":{"position":[[9,2]]},"2213":{"position":[[9,2]]},"2215":{"position":[[9,2]]},"2217":{"position":[[9,2]]},"2219":{"position":[[9,2]]},"2221":{"position":[[9,2]]},"2225":{"position":[[28,2]]},"2227":{"position":[[31,2]]},"2392":{"position":[[9,2]]},"2399":{"position":[[9,2]]},"2410":{"position":[[9,2]]},"2429":{"position":[[9,2]]},"2447":{"position":[[10,2]]},"2451":{"position":[[11,2]]},"2453":{"position":[[11,2]]},"2455":{"position":[[11,2]]},"2457":{"position":[[11,2]]},"2459":{"position":[[11,2]]},"2461":{"position":[[11,2]]},"2471":{"position":[[6,2]]},"2473":{"position":[[9,2]]},"2485":{"position":[[8,2]]},"2822":{"position":[[9,2]]},"3909":{"position":[[15,2]]}}}],["任意",{"_index":565,"t":{"1146":{"position":[[10,2]]}}}],["企业",{"_index":671,"t":{"1508":{"position":[[8,2]]}}}],["优先级",{"_index":619,"t":{"1421":{"position":[[11,3]]},"1876":{"position":[[9,3]]}}}],["优化",{"_index":489,"t":{"886":{"position":[[10,2]]}}}],["优点",{"_index":360,"t":{"590":{"position":[[21,2]]},"1288":{"position":[[9,2]]},"1895":{"position":[[11,2]]}}}],["优缺点",{"_index":294,"t":{"456":{"position":[[9,3]]},"1287":{"position":[[13,3]]},"1388":{"position":[[12,3]]},"2732":{"position":[[10,3]]},"3095":{"position":[[9,3]]},"3103":{"position":[[9,3]]}}}],["会",{"_index":1008,"t":{"2842":{"position":[[7,1]]}}}],["传统",{"_index":356,"t":{"584":{"position":[[6,2]]}}}],["位置",{"_index":332,"t":{"521":{"position":[[14,2]]},"1090":{"position":[[16,2]]},"1610":{"position":[[13,2]]}}}],["低版本",{"_index":498,"t":{"914":{"position":[[17,3]]}}}],["作业",{"_index":865,"t":{"2174":{"position":[[9,2]]},"2176":{"position":[[7,2]]},"2178":{"position":[[7,2]]},"3759":{"position":[[11,2]]},"3763":{"position":[[11,2]]},"3765":{"position":[[11,2]]},"3769":{"position":[[11,2]]},"3771":{"position":[[18,2]]},"3773":{"position":[[9,2]]},"3775":{"position":[[7,2]]},"3776":{"position":[[11,2]]},"3778":{"position":[[11,2]]},"3780":{"position":[[11,2]]},"3782":{"position":[[9,2]]},"3786":{"position":[[7,2]]},"3794":{"position":[[9,2]]},"3796":{"position":[[7,2]]},"3797":{"position":[[11,2]]},"3799":{"position":[[9,2]]},"3801":{"position":[[11,2]]},"3803":{"position":[[11,2]]},"3805":{"position":[[12,2]]},"3807":{"position":[[9,2]]},"3809":{"position":[[11,2]]},"3813":{"position":[[7,2]]},"3814":{"position":[[11,2]]},"3816":{"position":[[11,2]]},"3818":{"position":[[11,2]]},"3822":{"position":[[7,2]]},"3827":{"position":[[7,2]]},"3831":{"position":[[7,2]]},"3833":{"position":[[8,2]]},"3835":{"position":[[14,2]]},"3837":{"position":[[18,2]]},"3839":{"position":[[14,2]]},"3841":{"position":[[12,2]]},"3843":{"position":[[12,2]]},"3845":{"position":[[12,2]]},"3847":{"position":[[12,2]]},"3849":{"position":[[14,2]]},"3851":{"position":[[14,2]]},"3853":{"position":[[15,2]]},"3855":{"position":[[15,2]]},"3857":{"position":[[17,2]]},"3859":{"position":[[8,2]]},"3873":{"position":[[14,2]]},"3875":{"position":[[14,2]]},"3877":{"position":[[12,2]]},"3879":{"position":[[13,2]]},"3881":{"position":[[13,2]]},"3883":{"position":[[13,2]]},"3885":{"position":[[13,2]]},"3887":{"position":[[13,2]]},"3889":{"position":[[13,2]]},"3891":{"position":[[15,2]]},"3893":{"position":[[17,2]]},"3897":{"position":[[8,2]]},"3899":{"position":[[8,2]]}}}],["作为",{"_index":670,"t":{"1508":{"position":[[6,2]]},"1510":{"position":[[6,2]]}}}],["作用",{"_index":439,"t":{"740":{"position":[[9,2]]},"942":{"position":[[15,2]]},"1429":{"position":[[13,2]]},"3413":{"position":[[7,2]]},"3477":{"position":[[10,2]]},"3728":{"position":[[9,2]]}}}],["作用域",{"_index":580,"t":{"1213":{"position":[[13,3]]},"1400":{"position":[[7,3]]},"1810":{"position":[[8,3]]},"2181":{"position":[[13,3]]},"2183":{"position":[[15,3]]},"2185":{"position":[[13,3]]},"2187":{"position":[[15,3]]},"3384":{"position":[[15,3]]}}}],["使用",{"_index":4,"t":{"10":{"position":[[2,2]]},"49":{"position":[[3,2]]},"73":{"position":[[3,2]]},"122":{"position":[[7,2]]},"187":{"position":[[11,2]]},"228":{"position":[[9,2]]},"230":{"position":[[9,2]]},"240":{"position":[[7,2]]},"252":{"position":[[10,2]]},"262":{"position":[[7,2]]},"268":{"position":[[7,2]]},"317":{"position":[[8,2]]},"318":{"position":[[19,2]]},"320":{"position":[[17,2]]},"409":{"position":[[7,2]]},"418":{"position":[[5,2]]},"430":{"position":[[9,2]]},"458":{"position":[[8,2]]},"529":{"position":[[13,2]]},"547":{"position":[[9,2]]},"553":{"position":[[9,2]]},"592":{"position":[[19,2]]},"638":{"position":[[7,2]]},"742":{"position":[[9,2]]},"757":{"position":[[24,2]]},"762":{"position":[[10,2]]},"764":{"position":[[28,2]]},"794":{"position":[[11,2]]},"808":{"position":[[10,2]]},"817":{"position":[[15,2]]},"823":{"position":[[17,2]]},"825":{"position":[[15,2]]},"833":{"position":[[17,2]]},"902":{"position":[[11,2]]},"1019":{"position":[[8,2]]},"1038":{"position":[[12,2]]},"1063":{"position":[[14,2]]},"1106":{"position":[[11,2]]},"1144":{"position":[[15,2]]},"1146":{"position":[[16,2]]},"1292":{"position":[[9,2]]},"1294":{"position":[[11,2]]},"1359":{"position":[[10,2]]},"1365":{"position":[[9,2]]},"1406":{"position":[[7,2]]},"1482":{"position":[[9,2]]},"1675":{"position":[[8,2]]},"1810":{"position":[[5,2]]},"1826":{"position":[[6,2]]},"1840":{"position":[[10,2]]},"1858":{"position":[[11,2]]},"1870":{"position":[[19,2]]},"1872":{"position":[[7,2]]},"2267":{"position":[[20,2]]},"2270":{"position":[[32,2]]},"2279":{"position":[[24,2]]},"2293":{"position":[[8,2]]},"2312":{"position":[[9,2]]},"2329":{"position":[[7,2]]},"2346":{"position":[[7,2]]},"2396":{"position":[[9,2]]},"2407":{"position":[[9,2]]},"2416":{"position":[[13,2]]},"2425":{"position":[[7,2]]},"2427":{"position":[[7,2]]},"2479":{"position":[[27,2]]},"2500":{"position":[[8,2]]},"2520":{"position":[[7,2]]},"2527":{"position":[[5,2]]},"2529":{"position":[[10,2]]},"2531":{"position":[[11,2]]},"2533":{"position":[[13,2]]},"2535":{"position":[[13,2]]},"2550":{"position":[[11,2]]},"2604":{"position":[[9,2]]},"2685":{"position":[[13,2]]},"2704":{"position":[[9,2]]},"2783":{"position":[[7,2]]},"2789":{"position":[[7,2]]},"2830":{"position":[[9,2]]},"2844":{"position":[[7,2]]},"2845":{"position":[[14,2]]},"2847":{"position":[[15,2]]},"2849":{"position":[[21,2]]},"2851":{"position":[[25,2]]},"2898":{"position":[[24,2]]},"2920":{"position":[[8,2]]},"2994":{"position":[[4,2]]},"3255":{"position":[[9,2]]},"3285":{"position":[[9,2]]},"3322":{"position":[[6,2]]},"3372":{"position":[[9,2]]},"3417":{"position":[[7,2]]},"3479":{"position":[[7,2]]},"3482":{"position":[[7,2]]},"3484":{"position":[[10,2]]},"3586":{"position":[[7,2]]},"3627":{"position":[[12,2]]},"3730":{"position":[[7,2]]},"3733":{"position":[[7,2]]}}}],["例",{"_index":615,"t":{"1402":{"position":[[8,1]]},"3227":{"position":[[10,1]]}}}],["例子",{"_index":51,"t":{"52":{"position":[[3,2]]},"63":{"position":[[3,2]]},"76":{"position":[[3,2]]},"337":{"position":[[10,2]]},"638":{"position":[[9,2]]},"888":{"position":[[13,2]]},"1063":{"position":[[16,2]]},"1407":{"position":[[10,2]]},"1521":{"position":[[10,2]]},"1523":{"position":[[10,2]]},"1525":{"position":[[11,2]]},"1583":{"position":[[9,2]]},"1601":{"position":[[8,2]]},"1844":{"position":[[8,2]]},"1862":{"position":[[8,2]]},"1874":{"position":[[9,2]]},"2527":{"position":[[7,2]]},"2606":{"position":[[11,2]]},"2683":{"position":[[7,2]]},"3197":{"position":[[8,2]]},"3357":{"position":[[10,2]]}}}],["依赖",{"_index":66,"t":{"97":{"position":[[5,2]]},"236":{"position":[[9,2]]},"360":{"position":[[10,2]]},"362":{"position":[[10,2]]},"1384":{"position":[[5,2]]},"1390":{"position":[[5,2]]},"1404":{"position":[[7,2]]},"1710":{"position":[[7,2]]},"1962":{"position":[[9,2]]},"1974":{"position":[[14,2]]},"1988":{"position":[[14,2]]},"2011":{"position":[[14,2]]},"2181":{"position":[[9,2]]},"2185":{"position":[[9,2]]},"2550":{"position":[[5,2]]},"2584":{"position":[[6,2]]},"2691":{"position":[[7,2]]},"2830":{"position":[[5,2]]},"2865":{"position":[[16,2]]},"3376":{"position":[[11,2]]},"3384":{"position":[[11,2]]},"3790":{"position":[[9,2]]}}}],["便捷",{"_index":1020,"t":{"2876":{"position":[[8,2]]}}}],["保存",{"_index":411,"t":{"693":{"position":[[11,2]]}}}],["保持",{"_index":706,"t":{"1624":{"position":[[9,2]]}}}],["信息",{"_index":108,"t":{"149":{"position":[[15,2]]},"151":{"position":[[14,2]]},"432":{"position":[[28,2]]},"434":{"position":[[28,2]]},"1461":{"position":[[13,2]]},"1558":{"position":[[7,2]]},"1854":{"position":[[10,2]]},"1864":{"position":[[8,2]]},"2056":{"position":[[10,2]]},"2143":{"position":[[14,2]]},"2399":{"position":[[11,2]]},"2410":{"position":[[11,2]]},"2429":{"position":[[11,2]]},"2706":{"position":[[28,2]]},"2712":{"position":[[26,2]]},"2757":{"position":[[13,2]]},"2980":{"position":[[6,2]]},"2990":{"position":[[6,2]]},"3000":{"position":[[6,2]]},"3008":{"position":[[6,2]]},"3014":{"position":[[8,2]]},"3022":{"position":[[6,2]]},"3030":{"position":[[6,2]]},"3038":{"position":[[6,2]]},"3046":{"position":[[7,2]]},"3054":{"position":[[6,2]]},"3062":{"position":[[6,2]]},"3641":{"position":[[9,2]]},"3769":{"position":[[15,2]]},"3775":{"position":[[9,2]]},"3776":{"position":[[13,2]]},"3778":{"position":[[13,2]]},"3780":{"position":[[13,2]]},"3782":{"position":[[11,2]]},"3881":{"position":[[15,2]]}}}],["倒序",{"_index":485,"t":{"872":{"position":[[9,2]]},"874":{"position":[[11,2]]}}}],["值",{"_index":178,"t":{"275":{"position":[[11,1]]},"804":{"position":[[12,1]]},"813":{"position":[[10,1]]},"815":{"position":[[10,1]]},"825":{"position":[[19,1]]},"827":{"position":[[12,1]]},"829":{"position":[[12,1]]},"831":{"position":[[10,1]]},"1189":{"position":[[10,1]]},"1527":{"position":[[9,1]]},"1999":{"position":[[8,1]]},"2001":{"position":[[13,1]]},"2003":{"position":[[12,1]]}}}],["假",{"_index":455,"t":{"790":{"position":[[6,1]]},"794":{"position":[[8,1]]}}}],["允许",{"_index":270,"t":{"412":{"position":[[9,2]]},"1003":{"position":[[9,2]]},"1005":{"position":[[9,2]]},"1007":{"position":[[10,2]]},"1009":{"position":[[10,2]]},"1011":{"position":[[10,2]]},"1013":{"position":[[10,2]]},"2366":{"position":[[7,2]]},"2368":{"position":[[7,2]]}}}],["元组",{"_index":922,"t":{"2384":{"position":[[29,2]]}}}],["先",{"_index":218,"t":{"337":{"position":[[6,1]]},"2683":{"position":[[5,1]]}}}],["入口",{"_index":1232,"t":{"3933":{"position":[[13,2]]}}}],["入门",{"_index":301,"t":{"470":{"position":[[9,2]]},"1306":{"position":[[6,2]]},"1794":{"position":[[7,2]]},"2687":{"position":[[9,2]]},"3761":{"position":[[9,2]]}}}],["全",{"_index":657,"t":{"1478":{"position":[[9,1]]}}}],["全局",{"_index":6,"t":{"12":{"position":[[2,2]]},"136":{"position":[[10,2]]},"138":{"position":[[7,2]]},"531":{"position":[[20,2]]},"620":{"position":[[6,2]]},"845":{"position":[[9,2]]},"1425":{"position":[[8,2]]},"1546":{"position":[[7,2]]},"1754":{"position":[[7,2]]},"1882":{"position":[[5,2]]},"2020":{"position":[[6,2]]},"2074":{"position":[[7,2]]},"2295":{"position":[[10,2]]},"2695":{"position":[[5,2]]},"3121":{"position":[[9,2]]},"3229":{"position":[[9,2]]},"3303":{"position":[[8,2]]},"3447":{"position":[[7,2]]},"3453":{"position":[[7,2]]}}}],["全新",{"_index":1229,"t":{"3909":{"position":[[11,2]]},"3927":{"position":[[11,2]]},"3933":{"position":[[11,2]]},"3947":{"position":[[10,2]]}}}],["全球化",{"_index":944,"t":{"2516":{"position":[[5,3]]}}}],["全部列",{"_index":600,"t":{"1324":{"position":[[8,3]]},"1326":{"position":[[8,3]]}}}],["公共",{"_index":779,"t":{"1774":{"position":[[9,2]]}}}],["公开",{"_index":705,"t":{"1622":{"position":[[10,2]]}}}],["共",{"_index":1001,"t":{"2804":{"position":[[5,1]]},"2833":{"position":[[7,1]]}}}],["共享",{"_index":579,"t":{"1213":{"position":[[11,2]]},"2916":{"position":[[7,2]]},"2918":{"position":[[7,2],[13,2]]}}}],["共享内存",{"_index":900,"t":{"2320":{"position":[[11,4]]}}}],["关于",{"_index":71,"t":{"103":{"position":[[3,2]]},"219":{"position":[[6,2]]},"260":{"position":[[5,2]]},"264":{"position":[[7,2]]},"468":{"position":[[7,2]]},"539":{"position":[[7,2]]},"566":{"position":[[7,2]]},"578":{"position":[[4,2]]},"755":{"position":[[6,2]]},"1102":{"position":[[7,2]]},"1130":{"position":[[7,2]]},"1132":{"position":[[7,2]]},"1156":{"position":[[7,2]]},"1199":{"position":[[7,2]]},"1220":{"position":[[7,2]]},"1357":{"position":[[7,2]]},"1373":{"position":[[7,2]]},"1478":{"position":[[7,2]]},"1515":{"position":[[5,2]]},"1664":{"position":[[7,2]]},"1710":{"position":[[5,2]]},"1716":{"position":[[5,2]]},"1792":{"position":[[5,2]]},"1822":{"position":[[6,2]]},"1846":{"position":[[4,2]]},"1856":{"position":[[6,2]]},"1891":{"position":[[6,2]]},"2230":{"position":[[6,2]]},"2289":{"position":[[6,2]]},"2342":{"position":[[5,2]]},"2392":{"position":[[5,2]]},"2494":{"position":[[6,2]]},"2554":{"position":[[6,2]]},"2563":{"position":[[6,2]]},"2598":{"position":[[7,2]]},"2614":{"position":[[5,2]]},"2628":{"position":[[5,2]]},"2645":{"position":[[6,2]]},"2730":{"position":[[8,2]]},"2739":{"position":[[7,2]]},"2781":{"position":[[5,2]]},"2802":{"position":[[5,2]]},"2837":{"position":[[5,2]]},"2842":{"position":[[5,2]]},"2964":{"position":[[7,2]]},"2978":{"position":[[4,2]]},"2988":{"position":[[4,2]]},"2998":{"position":[[4,2]]},"3006":{"position":[[4,2]]},"3020":{"position":[[4,2]]},"3028":{"position":[[4,2]]},"3036":{"position":[[4,2]]},"3044":{"position":[[5,2]]},"3052":{"position":[[4,2]]},"3060":{"position":[[4,2]]},"3139":{"position":[[5,2]]},"3249":{"position":[[7,2]]},"3328":{"position":[[6,2]]},"3336":{"position":[[7,2]]},"3349":{"position":[[7,2]]},"3384":{"position":[[9,2]]},"3411":{"position":[[5,2]]},"3469":{"position":[[6,2]]},"3475":{"position":[[5,2]]},"3594":{"position":[[5,2]]},"3596":{"position":[[5,2]]},"3671":{"position":[[7,2]]},"3726":{"position":[[5,2]]},"3759":{"position":[[7,2]]},"3776":{"position":[[9,2]]},"3778":{"position":[[9,2]]},"3797":{"position":[[9,2]]},"3801":{"position":[[9,2]]},"3814":{"position":[[9,2]]},"3816":{"position":[[9,2]]},"3823":{"position":[[9,2]]},"3829":{"position":[[9,2]]}}}],["关系",{"_index":159,"t":{"236":{"position":[[11,2]]}}}],["关联",{"_index":471,"t":{"850":{"position":[[7,2]]},"3117":{"position":[[12,2]]}}}],["关键",{"_index":669,"t":{"1496":{"position":[[15,2]]}}}],["关键字",{"_index":193,"t":{"291":{"position":[[8,3]]}}}],["关闭",{"_index":1148,"t":{"3467":{"position":[[6,2]]},"3600":{"position":[[6,2]]},"3661":{"position":[[12,2]]}}}],["兴趣",{"_index":127,"t":{"175":{"position":[[2,2]]}}}],["兴趣爱好",{"_index":121,"t":{"167":{"position":[[0,4]]}}}],["其他",{"_index":327,"t":{"509":{"position":[[10,2]]},"963":{"position":[[7,2]]},"1560":{"position":[[7,2]]},"1599":{"position":[[8,2]]},"2763":{"position":[[9,2]]},"3433":{"position":[[14,2]]}}}],["具体",{"_index":185,"t":{"283":{"position":[[10,2]]}}}],["兼容",{"_index":361,"t":{"596":{"position":[[6,2]]},"598":{"position":[[6,2]]}}}],["内",{"_index":215,"t":{"330":{"position":[[14,1]]},"859":{"position":[[9,1]]},"2308":{"position":[[7,1]]},"3182":{"position":[[11,1]]}}}],["内存",{"_index":156,"t":{"228":{"position":[[5,2]]},"244":{"position":[[10,2]]}}}],["内容",{"_index":754,"t":{"1728":{"position":[[11,2]]},"1730":{"position":[[13,2]]},"2254":{"position":[[14,2]]},"2673":{"position":[[22,2]]},"3503":{"position":[[10,2]]}}}],["内置",{"_index":450,"t":{"772":{"position":[[15,2]]},"835":{"position":[[17,2]]},"987":{"position":[[6,2]]},"1404":{"position":[[5,2]]},"1640":{"position":[[8,2]]},"1673":{"position":[[5,2]]},"3485":{"position":[[7,2]]},"3803":{"position":[[9,2]]},"3825":{"position":[[32,2]]}}}],["内联",{"_index":1110,"t":{"3302":{"position":[[8,2]]}}}],["写",{"_index":526,"t":{"1001":{"position":[[9,1]]},"1494":{"position":[[9,1]]},"3609":{"position":[[8,1]]}}}],["写入",{"_index":1147,"t":{"3457":{"position":[[24,2]]}}}],["准备",{"_index":598,"t":{"1306":{"position":[[8,2]]}}}],["几种",{"_index":539,"t":{"1069":{"position":[[11,2]]}}}],["出现",{"_index":1184,"t":{"3673":{"position":[[15,2]]},"3675":{"position":[[15,2]]}}}],["出错",{"_index":1115,"t":{"3328":{"position":[[17,2]]}}}],["函数",{"_index":459,"t":{"800":{"position":[[10,2]]},"802":{"position":[[13,2]]},"804":{"position":[[13,2]]},"806":{"position":[[10,2]]},"808":{"position":[[7,2]]},"809":{"position":[[11,2]]},"811":{"position":[[11,2]]},"813":{"position":[[11,2]]},"815":{"position":[[11,2]]},"817":{"position":[[20,2]]},"819":{"position":[[13,2]]},"825":{"position":[[20,2]]},"827":{"position":[[13,2]]},"829":{"position":[[13,2]]},"831":{"position":[[11,2]]},"835":{"position":[[19,2]]},"912":{"position":[[14,2]]},"1186":{"position":[[12,2]]},"1187":{"position":[[11,2]]},"1189":{"position":[[11,2]]},"1266":{"position":[[7,2]]},"3119":{"position":[[18,2]]}}}],["分发",{"_index":545,"t":{"1078":{"position":[[12,2]]},"1084":{"position":[[11,2]]},"1089":{"position":[[12,2]]},"1090":{"position":[[12,2]]},"1092":{"position":[[12,2]]},"1095":{"position":[[7,2]]}}}],["分层",{"_index":990,"t":{"2773":{"position":[[8,2]]}}}],["分布式",{"_index":160,"t":{"238":{"position":[[5,3]]},"244":{"position":[[7,3]]},"246":{"position":[[7,3]]},"248":{"position":[[7,3]]},"250":{"position":[[7,3]]},"252":{"position":[[5,3]]},"254":{"position":[[5,3]]},"2325":{"position":[[10,3]]},"2327":{"position":[[5,3]]},"3115":{"position":[[9,3]]}}}],["分库",{"_index":1054,"t":{"3091":{"position":[[11,2]]},"3099":{"position":[[11,2]]},"3113":{"position":[[7,2]]}}}],["分支",{"_index":255,"t":{"391":{"position":[[5,2]]}}}],["分片",{"_index":1056,"t":{"3105":{"position":[[9,2]]}}}],["分离",{"_index":528,"t":{"1015":{"position":[[11,2]]},"1045":{"position":[[9,2]]}}}],["分类",{"_index":961,"t":{"2618":{"position":[[7,2]]}}}],["分组",{"_index":206,"t":{"324":{"position":[[15,2]]},"865":{"position":[[7,2]]},"3182":{"position":[[9,2]]},"3184":{"position":[[11,2]]},"3186":{"position":[[9,2]]},"3190":{"position":[[6,2]]},"3633":{"position":[[8,2]]},"3637":{"position":[[7,2]]},"3639":{"position":[[7,2]]},"3641":{"position":[[7,2]]},"3657":{"position":[[11,2]]},"3689":{"position":[[21,2]]}}}],["分表",{"_index":490,"t":{"888":{"position":[[8,2]]},"3093":{"position":[[11,2]]},"3101":{"position":[[11,2]]},"3107":{"position":[[16,2]]},"3109":{"position":[[18,2]]},"3113":{"position":[[9,2]]},"3233":{"position":[[11,2]]}}}],["分页",{"_index":515,"t":{"961":{"position":[[7,2]]},"3119":{"position":[[12,2]]},"3219":{"position":[[9,2]]},"3264":{"position":[[9,2]]}}}],["切分",{"_index":1053,"t":{"3089":{"position":[[9,2]]},"3097":{"position":[[9,2]]}}}],["切换",{"_index":403,"t":{"682":{"position":[[9,2]]},"710":{"position":[[9,2]]},"1028":{"position":[[10,2]]},"1030":{"position":[[10,2]]},"1036":{"position":[[10,2]]},"1211":{"position":[[8,2]]},"1270":{"position":[[7,2]]},"1276":{"position":[[23,2]]},"2543":{"position":[[5,2]]},"2548":{"position":[[17,2]]},"2554":{"position":[[12,2]]}}}],["列",{"_index":396,"t":{"664":{"position":[[13,1]]},"666":{"position":[[13,1]]},"668":{"position":[[15,1]]},"670":{"position":[[15,1]]},"1328":{"position":[[10,1]]},"1330":{"position":[[10,1]]},"1332":{"position":[[10,1]]},"1334":{"position":[[10,1]]},"1336":{"position":[[15,1]]},"1338":{"position":[[15,1]]},"1340":{"position":[[15,1]]},"1342":{"position":[[16,1]]},"1344":{"position":[[18,1]]},"1346":{"position":[[18,1]]},"1784":{"position":[[11,1]]}}}],["列名",{"_index":780,"t":{"1784":{"position":[[8,2]]}}}],["列表",{"_index":860,"t":{"2152":{"position":[[10,2]]},"2558":{"position":[[9,2]]}}}],["创建",{"_index":172,"t":{"269":{"position":[[7,2]]},"507":{"position":[[8,2]]},"509":{"position":[[8,2]]},"707":{"position":[[9,2]]},"712":{"position":[[9,2]]},"819":{"position":[[9,2]]},"821":{"position":[[9,2]]},"827":{"position":[[9,2]]},"829":{"position":[[9,2]]},"1053":{"position":[[9,2]]},"1055":{"position":[[9,2]]},"1059":{"position":[[9,2]]},"1126":{"position":[[9,2]]},"1310":{"position":[[8,2]]},"1361":{"position":[[9,2]]},"1533":{"position":[[7,2]]},"1854":{"position":[[6,2]]},"1970":{"position":[[4,2]]},"1972":{"position":[[6,2]]},"1984":{"position":[[4,2]]},"1986":{"position":[[6,2]]},"2007":{"position":[[4,2]]},"2009":{"position":[[6,2]]},"2118":{"position":[[4,2]]},"2120":{"position":[[5,2]]},"2164":{"position":[[4,2]]},"2181":{"position":[[5,2]]},"2183":{"position":[[5,2]]},"2185":{"position":[[5,2]]},"2187":{"position":[[5,2]]},"2523":{"position":[[7,2]]},"2539":{"position":[[5,2]]},"2541":{"position":[[23,2]]},"2708":{"position":[[8,2]]},"2787":{"position":[[7,2]]},"2810":{"position":[[9,2]]},"2812":{"position":[[7,2]]},"2863":{"position":[[6,2]]},"2924":{"position":[[7,2]]},"2930":{"position":[[11,2]]},"2940":{"position":[[7,2]]},"2946":{"position":[[11,2]]},"2954":{"position":[[7,2]]},"2960":{"position":[[11,2]]},"3358":{"position":[[9,2]]}}}],["初始",{"_index":203,"t":{"311":{"position":[[6,2]]},"3370":{"position":[[11,2]]}}}],["初始化",{"_index":554,"t":{"1108":{"position":[[9,3]]},"2207":{"position":[[5,3]]},"2447":{"position":[[7,3]]}}}],["初衷",{"_index":120,"t":{"165":{"position":[[2,2]]}}}],["删除",{"_index":179,"t":{"277":{"position":[[7,2]]},"778":{"position":[[6,2]]},"780":{"position":[[6,2]]},"782":{"position":[[10,2]]},"784":{"position":[[10,2]]},"786":{"position":[[15,2]]},"788":{"position":[[15,2]]},"790":{"position":[[7,2],[11,2]]},"794":{"position":[[9,2]]},"1007":{"position":[[12,2]]},"2669":{"position":[[8,2]]},"3270":{"position":[[9,2]]},"3845":{"position":[[10,2]]},"3853":{"position":[[11,2]]},"3887":{"position":[[11,2]]},"3891":{"position":[[11,2]]}}}],["判断",{"_index":180,"t":{"279":{"position":[[7,2]]},"2054":{"position":[[5,2]]},"2062":{"position":[[5,2]]},"3889":{"position":[[11,2]]}}}],["制作",{"_index":661,"t":{"1482":{"position":[[23,2]]}}}],["刷新",{"_index":101,"t":{"142":{"position":[[7,2]]},"2133":{"position":[[7,2]]},"2137":{"position":[[13,2]]},"2972":{"position":[[5,2]]},"3683":{"position":[[15,2]]}}}],["前端",{"_index":110,"t":{"151":{"position":[[5,2]]},"326":{"position":[[11,2]]},"416":{"position":[[5,2]]},"418":{"position":[[15,2]]},"2994":{"position":[[13,2]]}}}],["功能",{"_index":248,"t":{"383":{"position":[[10,2]]},"2775":{"position":[[16,2]]},"2884":{"position":[[18,2]]},"3200":{"position":[[12,2]]},"3210":{"position":[[7,2]]},"3216":{"position":[[9,2]]},"3366":{"position":[[19,2]]},"3372":{"position":[[21,2]]},"3689":{"position":[[23,2]]}}}],["功能模块",{"_index":65,"t":{"96":{"position":[[3,4]]}}}],["加密",{"_index":732,"t":{"1676":{"position":[[11,2]]},"1684":{"position":[[14,2]]},"1686":{"position":[[11,2]]}}}],["加密算法",{"_index":730,"t":{"1673":{"position":[[7,4]]}}}],["加解密",{"_index":729,"t":{"1671":{"position":[[7,3]]},"1675":{"position":[[5,3]]},"1678":{"position":[[12,3]]},"1680":{"position":[[11,3]]},"1682":{"position":[[11,3]]}}}],["加载",{"_index":337,"t":{"533":{"position":[[13,2]]},"689":{"position":[[9,2]]}}}],["动作",{"_index":697,"t":{"1593":{"position":[[8,2]]},"1604":{"position":[[13,2]]},"1606":{"position":[[11,2]]},"1622":{"position":[[16,2]]}}}],["动态",{"_index":333,"t":{"527":{"position":[[6,2]]},"878":{"position":[[8,2]]},"880":{"position":[[10,2]]},"882":{"position":[[10,2]]},"914":{"position":[[22,2]]},"1028":{"position":[[8,2]]},"1030":{"position":[[8,2]]},"1036":{"position":[[8,2]]},"1579":{"position":[[6,2]]},"1581":{"position":[[8,2]]},"1585":{"position":[[6,2]]},"1590":{"position":[[6,2]]},"1662":{"position":[[20,2]]},"2157":{"position":[[4,2]]},"2376":{"position":[[8,2]]},"3221":{"position":[[9,2]]},"3771":{"position":[[13,2]]}}}],["包",{"_index":62,"t":{"90":{"position":[[7,1]]},"330":{"position":[[21,1]]},"634":{"position":[[40,1]]},"758":{"position":[[23,1]]},"896":{"position":[[17,1]]},"1308":{"position":[[15,1]]},"1515":{"position":[[7,1]]},"1517":{"position":[[20,1]]},"1519":{"position":[[7,1]]},"1531":{"position":[[10,1]]},"1536":{"position":[[35,1]]},"1540":{"position":[[11,1]]},"1974":{"position":[[16,1]]},"1988":{"position":[[16,1]]},"2011":{"position":[[16,1]]},"2640":{"position":[[17,1]]},"2645":{"position":[[12,1]]},"2648":{"position":[[10,1]]},"2650":{"position":[[12,1]]},"2656":{"position":[[29,1]]},"2667":{"position":[[17,1]]},"2865":{"position":[[18,1]]},"3368":{"position":[[25,1]]}}}],["包含",{"_index":909,"t":{"2364":{"position":[[7,2]]},"3889":{"position":[[17,2]]}}}],["化",{"_index":709,"t":{"1626":{"position":[[26,1]]},"3857":{"position":[[21,1]]},"3893":{"position":[[21,1]]}}}],["化器",{"_index":1226,"t":{"3897":{"position":[[12,2]]}}}],["区",{"_index":499,"t":{"916":{"position":[[14,1]]}}}],["区分",{"_index":915,"t":{"2372":{"position":[[8,2]]}}}],["区别",{"_index":325,"t":{"503":{"position":[[31,2]]},"2702":{"position":[[10,2]]}}}],["区域",{"_index":952,"t":{"2558":{"position":[[6,2]]},"3328":{"position":[[15,2]]}}}],["匿名",{"_index":99,"t":{"140":{"position":[[7,2]]}}}],["升级",{"_index":45,"t":{"47":{"position":[[3,2]]},"50":{"position":[[0,2]]},"61":{"position":[[0,2]]},"71":{"position":[[3,2]]},"74":{"position":[[0,2]]},"2634":{"position":[[6,2]]},"2640":{"position":[[8,2]]},"2661":{"position":[[6,2]]},"2667":{"position":[[8,2]]}}}],["半",{"_index":543,"t":{"1074":{"position":[[9,1]]}}}],["协议",{"_index":1169,"t":{"3613":{"position":[[6,2]]}}}],["单",{"_index":470,"t":{"843":{"position":[[9,1]]},"1402":{"position":[[7,1]]},"2062":{"position":[[10,1]]},"2744":{"position":[[10,1]]},"2746":{"position":[[9,1]]},"3227":{"position":[[9,1]]}}}],["单一",{"_index":1190,"t":{"3693":{"position":[[7,2]]}}}],["单一性",{"_index":230,"t":{"352":{"position":[[10,3]]}}}],["单个",{"_index":590,"t":{"1245":{"position":[[11,2]]},"1264":{"position":[[11,2]]},"1272":{"position":[[9,2]]},"1999":{"position":[[6,2]]},"2001":{"position":[[11,2]]},"2003":{"position":[[10,2]]},"2221":{"position":[[7,2]]},"2461":{"position":[[9,2]]},"3390":{"position":[[25,2]]},"3839":{"position":[[12,2]]},"3871":{"position":[[12,2]]},"3883":{"position":[[15,2]]},"3885":{"position":[[15,2]]},"3887":{"position":[[15,2]]}}}],["单元",{"_index":867,"t":{"2183":{"position":[[12,2]]},"2187":{"position":[[12,2]]},"3283":{"position":[[9,2]]},"3292":{"position":[[9,2]]}}}],["单元测试",{"_index":1121,"t":{"3349":{"position":[[9,4]]},"3351":{"position":[[7,4]]},"3353":{"position":[[7,4]]},"3355":{"position":[[10,4]]},"3358":{"position":[[18,4]]},"3406":{"position":[[8,4]]}}}],["单列",{"_index":560,"t":{"1118":{"position":[[14,2]]},"1120":{"position":[[14,2]]},"1167":{"position":[[14,2]]},"1180":{"position":[[14,2]]},"1241":{"position":[[14,2]]},"1258":{"position":[[14,2]]}}}],["单行",{"_index":559,"t":{"1118":{"position":[[12,2]]},"1120":{"position":[[12,2]]},"1167":{"position":[[12,2]]},"1180":{"position":[[12,2]]},"1241":{"position":[[12,2]]},"1258":{"position":[[12,2]]}}}],["占位",{"_index":936,"t":{"2427":{"position":[[16,2]]}}}],["即时通讯",{"_index":1068,"t":{"3135":{"position":[[8,4]]},"3137":{"position":[[5,4]]}}}],["历史背景",{"_index":197,"t":{"299":{"position":[[6,4]]},"335":{"position":[[6,4]]},"2861":{"position":[[6,4]]},"3068":{"position":[[7,4]]}}}],["压缩",{"_index":1158,"t":{"3529":{"position":[[16,2]]}}}],["原则",{"_index":228,"t":{"351":{"position":[[10,2]]},"1764":{"position":[[14,2]]}}}],["原样",{"_index":907,"t":{"2358":{"position":[[18,2]]}}}],["原理",{"_index":695,"t":{"1585":{"position":[[16,2]]}}}],["参数",{"_index":238,"t":{"368":{"position":[[8,2]]},"697":{"position":[[9,2]]},"1023":{"position":[[10,2]]},"1126":{"position":[[11,2]]},"1134":{"position":[[11,2]]},"1199":{"position":[[14,2]]},"1228":{"position":[[11,2]]},"1245":{"position":[[16,2]]},"1264":{"position":[[16,2]]},"1395":{"position":[[9,2]]},"1521":{"position":[[8,2]]},"1523":{"position":[[8,2]]},"1525":{"position":[[9,2]]},"1527":{"position":[[10,2]]},"1542":{"position":[[11,2]]},"1606":{"position":[[9,2]]},"1608":{"position":[[20,2]]},"1610":{"position":[[11,2]]},"1626":{"position":[[11,2],[28,2],[34,2]]},"1628":{"position":[[9,2]]},"1632":{"position":[[11,2]]},"2064":{"position":[[10,2]]},"2545":{"position":[[11,2]]},"2580":{"position":[[12,2]]},"2892":{"position":[[18,2]]},"3302":{"position":[[10,2]]},"3374":{"position":[[8,2]]},"3495":{"position":[[16,2]]},"3499":{"position":[[15,2]]},"3507":{"position":[[16,2]]},"3540":{"position":[[16,2]]},"3544":{"position":[[15,2]]},"3548":{"position":[[7,2]]},"3621":{"position":[[8,2]]},"3675":{"position":[[24,2]]},"3719":{"position":[[25,2]]},"3829":{"position":[[11,2]]}}}],["友好",{"_index":796,"t":{"1835":{"position":[[7,2]]},"1836":{"position":[[7,2]]},"1838":{"position":[[6,2]]},"1840":{"position":[[4,2]]},"1842":{"position":[[8,2]]}}}],["双工",{"_index":1078,"t":{"3171":{"position":[[12,2]]}}}],["反",{"_index":843,"t":{"2072":{"position":[[5,1]]},"2080":{"position":[[4,1]]},"2351":{"position":[[7,1]]},"2382":{"position":[[23,1]]}}}],["反转",{"_index":607,"t":{"1386":{"position":[[7,2]]}}}],["反馈",{"_index":82,"t":{"115":{"position":[[6,2]]},"153":{"position":[[5,2]]},"193":{"position":[[7,2]]},"221":{"position":[[6,2]]},"256":{"position":[[5,2]]},"295":{"position":[[5,2]]},"332":{"position":[[7,2]]},"374":{"position":[[7,2]]},"424":{"position":[[6,2]]},"464":{"position":[[7,2]]},"495":{"position":[[7,2]]},"535":{"position":[[7,2]]},"561":{"position":[[7,2]]},"575":{"position":[[7,2]]},"640":{"position":[[5,2]]},"656":{"position":[[6,2]]},"672":{"position":[[6,2]]},"699":{"position":[[7,2]]},"735":{"position":[[7,2]]},"752":{"position":[[7,2]]},"774":{"position":[[6,2]]},"796":{"position":[[6,2]]},"837":{"position":[[7,2]]},"847":{"position":[[7,2]]},"890":{"position":[[8,2]]},"920":{"position":[[7,2]]},"936":{"position":[[7,2]]},"950":{"position":[[6,2]]},"982":{"position":[[7,2]]},"1042":{"position":[[6,2]]},"1098":{"position":[[7,2]]},"1136":{"position":[[7,2]]},"1152":{"position":[[7,2]]},"1217":{"position":[[8,2]]},"1282":{"position":[[8,2]]},"1303":{"position":[[7,2]]},"1320":{"position":[[6,2]]},"1354":{"position":[[7,2]]},"1369":{"position":[[7,2]]},"1380":{"position":[[7,2]]},"1441":{"position":[[6,2]]},"1475":{"position":[[7,2]]},"1500":{"position":[[7,2]]},"1562":{"position":[[5,2]]},"1567":{"position":[[7,2]]},"1668":{"position":[[7,2]]},"1692":{"position":[[5,2]]},"1712":{"position":[[5,2]]},"1756":{"position":[[5,2]]},"1788":{"position":[[6,2]]},"1828":{"position":[[6,2]]},"1888":{"position":[[5,2]]},"1966":{"position":[[7,2]]},"2256":{"position":[[6,2]]},"2286":{"position":[[6,2]]},"2299":{"position":[[6,2]]},"2322":{"position":[[5,2]]},"2336":{"position":[[5,2]]},"2388":{"position":[[5,2]]},"2491":{"position":[[6,2]]},"2513":{"position":[[6,2]]},"2560":{"position":[[6,2]]},"2594":{"position":[[6,2]]},"2610":{"position":[[7,2]]},"2630":{"position":[[5,2]]},"2658":{"position":[[6,2]]},"2697":{"position":[[5,2]]},"2736":{"position":[[7,2]]},"2765":{"position":[[7,2]]},"2777":{"position":[[6,2]]},"2799":{"position":[[5,2]]},"2839":{"position":[[5,2]]},"2857":{"position":[[5,2]]},"2906":{"position":[[7,2]]},"2974":{"position":[[6,2]]},"3083":{"position":[[7,2]]},"3127":{"position":[[7,2]]},"3132":{"position":[[6,2]]},"3204":{"position":[[6,2]]},"3239":{"position":[[7,2]]},"3278":{"position":[[7,2]]},"3297":{"position":[[7,2]]},"3310":{"position":[[6,2]]},"3332":{"position":[[6,2]]},"3346":{"position":[[7,2]]},"3408":{"position":[[8,2]]},"3471":{"position":[[6,2]]},"3604":{"position":[[6,2]]},"3723":{"position":[[5,2]]},"3755":{"position":[[5,2]]},"3905":{"position":[[8,2]]}}}],["发布",{"_index":544,"t":{"1077":{"position":[[14,2]]},"1080":{"position":[[9,2]]},"1081":{"position":[[11,2]]},"1083":{"position":[[11,2]]},"1376":{"position":[[9,2]]},"1378":{"position":[[15,2]]},"1445":{"position":[[7,2]]},"1446":{"position":[[14,2]]},"1447":{"position":[[11,2]]},"1448":{"position":[[11,2]]},"1449":{"position":[[11,2]]},"1550":{"position":[[5,2]]},"1704":{"position":[[7,2]]},"2744":{"position":[[17,2]]},"2746":{"position":[[15,2]]},"3072":{"position":[[7,2]]},"3909":{"position":[[8,2]]},"3913":{"position":[[8,2]]},"3915":{"position":[[8,2]]},"3917":{"position":[[8,2]]},"3919":{"position":[[8,2]]},"3921":{"position":[[9,2]]},"3923":{"position":[[9,2]]},"3927":{"position":[[8,2]]},"3929":{"position":[[8,2]]},"3931":{"position":[[9,2]]},"3933":{"position":[[8,2]]},"3935":{"position":[[8,2]]},"3937":{"position":[[8,2]]},"3939":{"position":[[8,2]]},"3941":{"position":[[8,2]]},"3943":{"position":[[8,2]]},"3945":{"position":[[8,2]]},"3947":{"position":[[7,2]]},"3949":{"position":[[7,2]]},"3951":{"position":[[7,2]]},"3953":{"position":[[7,2]]},"3955":{"position":[[7,2]]},"3957":{"position":[[7,2]]},"3959":{"position":[[13,2]]},"3961":{"position":[[18,2]]},"3963":{"position":[[9,2]]},"3965":{"position":[[15,2]]},"3967":{"position":[[15,2]]},"3969":{"position":[[9,2]]},"3971":{"position":[[9,2]]},"3973":{"position":[[9,2]]},"3975":{"position":[[9,2]]},"3977":{"position":[[9,2]]},"3979":{"position":[[10,2]]},"3981":{"position":[[10,2]]},"3983":{"position":[[10,2]]},"3985":{"position":[[10,2]]},"3987":{"position":[[10,2]]},"3989":{"position":[[9,2]]},"3991":{"position":[[9,2]]},"3993":{"position":[[8,2]]},"3995":{"position":[[8,2]]},"3997":{"position":[[8,2]]},"3999":{"position":[[8,2]]},"4001":{"position":[[8,2]]},"4003":{"position":[[8,2]]},"4005":{"position":[[8,2]]}}}],["发布者",{"_index":786,"t":{"1804":{"position":[[10,3]]}}}],["发送",{"_index":862,"t":{"2159":{"position":[[4,2]]}}}],["取",{"_index":1058,"t":{"3107":{"position":[[14,1]]}}}],["取消",{"_index":768,"t":{"1750":{"position":[[12,2]]},"1954":{"position":[[10,2]]},"2161":{"position":[[4,2]]},"2215":{"position":[[5,2]]},"2455":{"position":[[7,2]]},"3794":{"position":[[12,2]]}}}],["受",{"_index":569,"t":{"1169":{"position":[[12,1]]},"1182":{"position":[[12,1]]},"1247":{"position":[[11,1]]},"2099":{"position":[[8,1]]}}}],["变化",{"_index":757,"t":{"1732":{"position":[[11,2]]}}}],["变成",{"_index":1021,"t":{"2890":{"position":[[14,2]]}}}],["变更",{"_index":251,"t":{"387":{"position":[[5,2]]}}}],["只读",{"_index":525,"t":{"999":{"position":[[8,2]]}}}],["可见",{"_index":1185,"t":{"3679":{"position":[[31,2]]}}}],["右",{"_index":479,"t":{"863":{"position":[[9,1]]}}}],["各个",{"_index":689,"t":{"1542":{"position":[[9,2]]},"3191":{"position":[[6,2]]}}}],["各种",{"_index":962,"t":{"2624":{"position":[[7,2]]},"3519":{"position":[[8,2]]},"3560":{"position":[[8,2]]}}}],["各类",{"_index":331,"t":{"519":{"position":[[8,2]]},"900":{"position":[[7,2]]},"1314":{"position":[[8,2]]}}}],["合并",{"_index":256,"t":{"393":{"position":[[5,2]]},"867":{"position":[[7,2]]}}}],["同一个",{"_index":953,"t":{"2566":{"position":[[14,3]]}}}],["同步",{"_index":540,"t":{"1070":{"position":[[9,2]]},"1074":{"position":[[10,2]]},"1093":{"position":[[12,2]]},"1708":{"position":[[5,2]]},"3596":{"position":[[7,2]]}}}],["名",{"_index":207,"t":{"326":{"position":[[15,1]]},"918":{"position":[[21,1]]},"1630":{"position":[[16,1]]},"1786":{"position":[[12,1]]},"2052":{"position":[[11,1]]},"2358":{"position":[[12,1]]},"2376":{"position":[[14,1]]},"3455":{"position":[[21,1]]}}}],["名字",{"_index":58,"t":{"84":{"position":[[3,2]]},"1848":{"position":[[12,2]]}}}],["名称",{"_index":830,"t":{"2042":{"position":[[9,2]]}}}],["后台",{"_index":872,"t":{"2209":{"position":[[7,2]]},"2403":{"position":[[9,2]]},"2449":{"position":[[9,2]]}}}],["后台任务",{"_index":334,"t":{"529":{"position":[[8,4]]},"1038":{"position":[[7,4]]}}}],["后期",{"_index":979,"t":{"2726":{"position":[[8,2]]}}}],["含",{"_index":856,"t":{"2143":{"position":[[18,1]]}}}],["启动",{"_index":53,"t":{"54":{"position":[[3,2]]},"65":{"position":[[3,2]]},"78":{"position":[[3,2]]},"687":{"position":[[9,2]]},"727":{"position":[[9,2]]},"1980":{"position":[[4,2]]},"1992":{"position":[[4,2]]},"2015":{"position":[[4,2]]},"2044":{"position":[[7,2]]},"2048":{"position":[[7,2]]},"2050":{"position":[[7,2]]},"2174":{"position":[[5,2]]},"2401":{"position":[[9,2]]},"2412":{"position":[[9,2]]},"2431":{"position":[[9,2]]},"2671":{"position":[[15,2]]},"2750":{"position":[[17,2]]},"2759":{"position":[[11,2]]},"2869":{"position":[[6,2]]},"2892":{"position":[[16,2]]},"2902":{"position":[[9,2]]},"2968":{"position":[[7,2]]},"3074":{"position":[[10,2]]},"3849":{"position":[[10,2]]},"3873":{"position":[[10,2]]},"3877":{"position":[[10,2]]}}}],["启动项",{"_index":628,"t":{"1446":{"position":[[11,3]]}}}],["启用",{"_index":440,"t":{"744":{"position":[[9,2]]},"1079":{"position":[[9,2]]},"2622":{"position":[[7,2]]},"2748":{"position":[[9,2]]},"3507":{"position":[[8,2]]},"3689":{"position":[[7,2]]}}}],["命令",{"_index":407,"t":{"684":{"position":[[20,2]]},"697":{"position":[[7,2]]},"1453":{"position":[[13,2]]},"1455":{"position":[[13,2]]},"1457":{"position":[[13,2]]},"1519":{"position":[[8,2]]}}}],["命令行",{"_index":841,"t":{"2064":{"position":[[7,3]]}}}],["命名",{"_index":707,"t":{"1624":{"position":[[17,2]]},"2648":{"position":[[11,2]]},"3619":{"position":[[8,2]]},"3745":{"position":[[9,2]]}}}],["响应",{"_index":274,"t":{"416":{"position":[[11,2]]},"2252":{"position":[[10,2]]}}}],["哪些",{"_index":879,"t":{"2265":{"position":[[16,2]]},"2327":{"position":[[13,2]]}}}],["唤醒",{"_index":1219,"t":{"3855":{"position":[[13,2]]}}}],["唯一",{"_index":1083,"t":{"3188":{"position":[[10,2]]}}}],["器",{"_index":342,"t":{"545":{"position":[[19,1]]},"840":{"position":[[11,1]]},"842":{"position":[[11,1]]},"843":{"position":[[13,1]]},"845":{"position":[[13,1]]},"894":{"position":[[21,1]]},"896":{"position":[[14,1]]},"934":{"position":[[14,1]]},"1586":{"position":[[15,1]]},"1866":{"position":[[29,1]]},"1882":{"position":[[13,1]]},"1891":{"position":[[10,1]]},"1895":{"position":[[10,1]]},"1899":{"position":[[8,1]]},"1904":{"position":[[8,1]]},"1910":{"position":[[10,1]]},"1916":{"position":[[10,1]]},"1922":{"position":[[10,1]]},"1930":{"position":[[10,1]]},"1938":{"position":[[11,1]]},"1948":{"position":[[20,1]]},"1954":{"position":[[9,1]]},"1956":{"position":[[9,1]]},"1958":{"position":[[15,1]]},"1960":{"position":[[15,1]]},"1962":{"position":[[8,1]]},"2034":{"position":[[10,1]]},"2068":{"position":[[12,1]]},"2089":{"position":[[13,1]]},"2091":{"position":[[15,1]]},"2093":{"position":[[11,1]]},"2356":{"position":[[15,1]]},"2797":{"position":[[16,1]]},"3775":{"position":[[25,1]]},"3778":{"position":[[17,1]]},"3780":{"position":[[17,1]]},"3782":{"position":[[16,1]]},"3796":{"position":[[24,1]]},"3801":{"position":[[18,1]]},"3803":{"position":[[18,1]]},"3809":{"position":[[18,1]]},"3813":{"position":[[25,1]]},"3816":{"position":[[17,1]]},"3818":{"position":[[17,1]]},"3822":{"position":[[11,1]]},"3855":{"position":[[19,1]]}}}],["回归",{"_index":1125,"t":{"3364":{"position":[[12,2]]}}}],["回收",{"_index":655,"t":{"1473":{"position":[[11,2]]},"1824":{"position":[[12,2]]},"2489":{"position":[[12,2]]}}}],["回调",{"_index":792,"t":{"1818":{"position":[[12,2]]}}}],["固化",{"_index":187,"t":{"285":{"position":[[7,2]]}}}],["固定",{"_index":536,"t":{"1063":{"position":[[9,2]]}}}],["国",{"_index":740,"t":{"1690":{"position":[[17,1]]}}}],["在线",{"_index":314,"t":{"485":{"position":[[7,2]]},"2421":{"position":[[7,2]]},"3651":{"position":[[7,2]]}}}],["地址",{"_index":36,"t":{"39":{"position":[[8,2]]},"41":{"position":[[9,2]]},"86":{"position":[[5,2]]},"88":{"position":[[5,2]]},"1597":{"position":[[10,2]]},"1744":{"position":[[24,2]]},"2248":{"position":[[16,2]]},"2250":{"position":[[17,2]]},"3155":{"position":[[20,2]]},"3487":{"position":[[11,2]]},"3491":{"position":[[9,2]]},"3495":{"position":[[14,2]]},"3536":{"position":[[9,2]]},"3540":{"position":[[14,2]]},"3631":{"position":[[8,2]]}}}],["场景",{"_index":170,"t":{"262":{"position":[[9,2]]},"458":{"position":[[10,2]]},"1893":{"position":[[8,2]]},"3087":{"position":[[9,2]]},"3137":{"position":[[11,2]]}}}],["均衡",{"_index":989,"t":{"2761":{"position":[[16,2]]}}}],["垂直",{"_index":1052,"t":{"3089":{"position":[[7,2]]},"3091":{"position":[[9,2]]},"3093":{"position":[[9,2]]}}}],["型",{"_index":496,"t":{"906":{"position":[[11,1]]},"989":{"position":[[10,1]]},"991":{"position":[[9,1]]},"993":{"position":[[9,1]]},"1409":{"position":[[10,1]]},"2102":{"position":[[8,1]]},"2104":{"position":[[7,1]]},"2106":{"position":[[11,1]]},"3169":{"position":[[20,1]]},"3419":{"position":[[19,1]]}}}],["域",{"_index":265,"t":{"403":{"position":[[9,1]]},"405":{"position":[[7,1]]},"412":{"position":[[12,1]]},"420":{"position":[[8,1]]},"422":{"position":[[14,1]]}}}],["域名",{"_index":271,"t":{"412":{"position":[[13,2]]}}}],["基于",{"_index":1038,"t":{"2914":{"position":[[13,2]]},"2916":{"position":[[24,2]]},"2918":{"position":[[24,2]]},"2922":{"position":[[5,2]]},"2938":{"position":[[5,2]]},"2952":{"position":[[5,2]]}}}],["基准",{"_index":129,"t":{"178":{"position":[[7,2]]},"180":{"position":[[7,2]]}}}],["基本",{"_index":3,"t":{"10":{"position":[[0,2]]},"230":{"position":[[7,2]]},"317":{"position":[[6,2]]},"547":{"position":[[7,2]]},"762":{"position":[[8,2]]},"1975":{"position":[[11,2]]},"1989":{"position":[[11,2]]},"2012":{"position":[[11,2]]},"2293":{"position":[[6,2]]},"2604":{"position":[[7,2]]},"3255":{"position":[[7,2]]}}}],["基础",{"_index":1103,"t":{"3260":{"position":[[9,2]]},"3479":{"position":[[5,2]]},"3730":{"position":[[5,2]]}}}],["填",{"_index":714,"t":{"1632":{"position":[[18,1]]}}}],["填写",{"_index":252,"t":{"387":{"position":[[9,2]]}}}],["处理",{"_index":194,"t":{"291":{"position":[[11,2]]},"379":{"position":[[9,2]]},"391":{"position":[[7,2]]},"1822":{"position":[[12,2]]},"1833":{"position":[[4,2]]},"1835":{"position":[[11,2]]},"1836":{"position":[[11,2]]},"1838":{"position":[[10,2]]},"1840":{"position":[[8,2]]},"1880":{"position":[[12,2]]},"1882":{"position":[[9,2]]},"2370":{"position":[[7,2]]},"2471":{"position":[[10,2]]},"2793":{"position":[[12,2]]},"3519":{"position":[[13,2]]},"3560":{"position":[[13,2]]},"3681":{"position":[[22,2]]},"3709":{"position":[[11,2]]},"3794":{"position":[[14,2]]}}}],["处理程序",{"_index":745,"t":{"1702":{"position":[[11,4]]},"2137":{"position":[[7,4]]},"3786":{"position":[[9,4]]}}}],["复制",{"_index":541,"t":{"1070":{"position":[[11,2]]},"1072":{"position":[[11,2]]},"1074":{"position":[[12,2]]}}}],["复杂",{"_index":362,"t":{"598":{"position":[[13,2]]},"1124":{"position":[[9,2]]},"1128":{"position":[[11,2]]}}}],["外",{"_index":213,"t":{"330":{"position":[[11,1]]},"2320":{"position":[[7,1]]},"3186":{"position":[[11,1]]}}}],["多",{"_index":205,"t":{"324":{"position":[[14,1]]},"559":{"position":[[10,1]]},"630":{"position":[[5,1]]},"854":{"position":[[9,1]]},"856":{"position":[[7,1],[9,1]]},"898":{"position":[[7,1]]},"902":{"position":[[7,1]]},"993":{"position":[[10,1]]},"997":{"position":[[8,1]]},"999":{"position":[[17,1]]},"1001":{"position":[[17,1]]},"1003":{"position":[[20,1]]},"1005":{"position":[[20,1]]},"1007":{"position":[[21,1]]},"1009":{"position":[[23,1]]},"1011":{"position":[[24,1]]},"1013":{"position":[[25,1]]},"1034":{"position":[[6,1]]},"1201":{"position":[[8,1]]},"1301":{"position":[[10,1]]},"1601":{"position":[[7,1]]},"1862":{"position":[[7,1]]},"1874":{"position":[[8,1]]},"1878":{"position":[[5,1]]},"1964":{"position":[[10,1]]},"2146":{"position":[[8,1]]},"2148":{"position":[[12,1]]},"2314":{"position":[[9,1]]},"2316":{"position":[[8,1]]},"2353":{"position":[[11,1]]},"2556":{"position":[[17,1]]},"2580":{"position":[[11,1]]},"2592":{"position":[[9,1]]},"2873":{"position":[[19,1]]},"2882":{"position":[[9,1]]},"2900":{"position":[[12,1]]},"2911":{"position":[[8,1]]},"2913":{"position":[[7,1]]},"2920":{"position":[[5,1]]},"2926":{"position":[[9,1]]},"2942":{"position":[[9,1]]},"2956":{"position":[[9,1]]},"2968":{"position":[[12,1]]},"3157":{"position":[[14,1]]},"3225":{"position":[[9,1]]},"3449":{"position":[[8,1]]},"3637":{"position":[[6,1]]},"3639":{"position":[[6,1]]},"3641":{"position":[[6,1]]},"3677":{"position":[[15,1]]},"3693":{"position":[[12,1]]}}}],["多个",{"_index":347,"t":{"557":{"position":[[11,2]]},"1036":{"position":[[12,2]]},"1150":{"position":[[7,2]]},"1411":{"position":[[11,2]]},"1527":{"position":[[7,2]]},"1604":{"position":[[8,2]]},"1614":{"position":[[10,2]]},"1864":{"position":[[4,2]]},"2568":{"position":[[16,2]]},"2570":{"position":[[17,2]]},"2572":{"position":[[17,2]]},"2814":{"position":[[7,2]]},"3180":{"position":[[9,2]]},"3184":{"position":[[9,2]]},"3363":{"position":[[9,2]]},"3392":{"position":[[30,2]]},"3765":{"position":[[9,2]]}}}],["多功能",{"_index":1101,"t":{"3237":{"position":[[11,3]]}}}],["多套",{"_index":1200,"t":{"3715":{"position":[[6,2]]},"3721":{"position":[[8,2]]}}}],["多条",{"_index":389,"t":{"648":{"position":[[8,2]]},"650":{"position":[[8,2]]},"1348":{"position":[[9,2]]},"1350":{"position":[[9,2]]}}}],["多次",{"_index":980,"t":{"2730":{"position":[[10,2]]}}}],["多种",{"_index":14,"t":{"24":{"position":[[12,2]]},"842":{"position":[[7,2]]},"1602":{"position":[[8,2]]},"3534":{"position":[[9,2]]},"3784":{"position":[[9,2]]},"3811":{"position":[[9,2]]},"3820":{"position":[[9,2]]}}}],["多线程",{"_index":578,"t":{"1213":{"position":[[8,3]]},"1431":{"position":[[14,3]]}}}],["多路",{"_index":701,"t":{"1618":{"position":[[8,2]]}}}],["够",{"_index":1024,"t":{"2894":{"position":[[11,1]]}}}],["大",{"_index":1099,"t":{"3235":{"position":[[10,1]]}}}],["大于",{"_index":231,"t":{"354":{"position":[[10,2]]}}}],["大写",{"_index":845,"t":{"2084":{"position":[[14,2]]},"2358":{"position":[[13,2]]},"2376":{"position":[[15,2]]}}}],["大小",{"_index":765,"t":{"1746":{"position":[[7,2]]}}}],["大小写",{"_index":916,"t":{"2372":{"position":[[10,3]]}}}],["失效",{"_index":943,"t":{"2502":{"position":[[18,2]]}}}],["失败",{"_index":371,"t":{"616":{"position":[[26,2]]},"1818":{"position":[[10,2]]}}}],["头",{"_index":275,"t":{"416":{"position":[[13,1]]},"2252":{"position":[[12,1]]},"3493":{"position":[[13,1]]},"3538":{"position":[[13,1]]}}}],["头像",{"_index":115,"t":{"159":{"position":[[2,2]]}}}],["奉献",{"_index":118,"t":{"163":{"position":[[0,2]]}}}],["好处",{"_index":355,"t":{"580":{"position":[[9,2]]},"1517":{"position":[[23,2]]},"2616":{"position":[[12,2]]},"3351":{"position":[[11,2]]}}}],["如何",{"_index":89,"t":{"122":{"position":[[5,2]]},"187":{"position":[[9,2]]},"207":{"position":[[8,2]]},"268":{"position":[[5,2]]},"301":{"position":[[6,2]]},"383":{"position":[[5,2]]},"385":{"position":[[5,2]]},"409":{"position":[[5,2]]},"436":{"position":[[8,2]]},"505":{"position":[[6,2]]},"541":{"position":[[7,2]]},"568":{"position":[[7,2]]},"742":{"position":[[7,2]]},"944":{"position":[[6,2]]},"1051":{"position":[[7,2]]},"1142":{"position":[[7,2]]},"1292":{"position":[[7,2]]},"1540":{"position":[[7,2]]},"1762":{"position":[[6,2]]},"2329":{"position":[[5,2]]},"2346":{"position":[[5,2]]},"2394":{"position":[[5,2]]},"2473":{"position":[[6,2]]},"2500":{"position":[[6,2]]},"2507":{"position":[[6,2]]},"2520":{"position":[[5,2]]},"2600":{"position":[[7,2]]},"2620":{"position":[[5,2]]},"2647":{"position":[[6,2]]},"2714":{"position":[[8,2]]},"2741":{"position":[[7,2]]},"2783":{"position":[[5,2]]},"2810":{"position":[[7,2]]},"2832":{"position":[[5,2]]},"2844":{"position":[[5,2]]},"3125":{"position":[[7,2]]},"3251":{"position":[[7,2]]},"3285":{"position":[[7,2]]},"3376":{"position":[[7,2]]},"3417":{"position":[[5,2]]},"3788":{"position":[[9,2]]},"3901":{"position":[[8,2]]}}}],["如果",{"_index":432,"t":{"731":{"position":[[9,2]]}}}],["字",{"_index":310,"t":{"481":{"position":[[13,1]]},"918":{"position":[[23,1]]},"2364":{"position":[[11,1]]}}}],["字典",{"_index":196,"t":{"293":{"position":[[11,2]]}}}],["字符串",{"_index":328,"t":{"511":{"position":[[10,3]]},"519":{"position":[[15,3]]},"900":{"position":[[14,3]]},"1312":{"position":[[12,3]]},"1314":{"position":[[15,3]]},"1688":{"position":[[5,3]]},"2190":{"position":[[6,3]]},"2351":{"position":[[11,3]]},"3484":{"position":[[5,3]]},"3753":{"position":[[5,3]]},"3784":{"position":[[13,3]]},"3811":{"position":[[13,3]]},"3820":{"position":[[13,3]]},"3895":{"position":[[19,3]]}}}],["存储",{"_index":107,"t":{"149":{"position":[[12,2]]},"1102":{"position":[[9,2]]},"1104":{"position":[[11,2]]},"1106":{"position":[[7,2]]},"1124":{"position":[[11,2]]},"1128":{"position":[[13,2]]},"1134":{"position":[[7,2]]},"1171":{"position":[[12,2]]},"1249":{"position":[[7,2]]}}}],["存储介质",{"_index":1141,"t":{"3433":{"position":[[16,4]]}}}],["存储器",{"_index":783,"t":{"1798":{"position":[[11,3]]}}}],["存在",{"_index":182,"t":{"279":{"position":[[13,2]]},"786":{"position":[[8,2]]},"788":{"position":[[8,2]]},"964":{"position":[[15,2]]},"1336":{"position":[[8,2]]},"1338":{"position":[[8,2]]},"1340":{"position":[[8,2]]},"1342":{"position":[[9,2]]},"1344":{"position":[[9,2]]},"1346":{"position":[[9,2]]},"3847":{"position":[[16,2]]}}}],["学习",{"_index":942,"t":{"2496":{"position":[[6,2]]}}}],["守护",{"_index":1050,"t":{"3076":{"position":[[11,2]]},"3079":{"position":[[13,2]]}}}],["安全",{"_index":245,"t":{"379":{"position":[[5,2]]},"1085":{"position":[[11,2]]},"1092":{"position":[[14,2]]}}}],["安装",{"_index":38,"t":{"45":{"position":[[0,2]]},"59":{"position":[[0,2]]},"69":{"position":[[0,2]]},"545":{"position":[[9,2]]},"634":{"position":[[7,2]]},"721":{"position":[[9,2]]},"758":{"position":[[8,2]]},"1308":{"position":[[8,2]]},"1480":{"position":[[7,2]]},"1490":{"position":[[9,2]]},"1536":{"position":[[7,2]]},"1546":{"position":[[11,2]]},"1548":{"position":[[11,2]]},"2636":{"position":[[8,2]]},"2654":{"position":[[13,2]]},"2663":{"position":[[8,2]]},"2741":{"position":[[9,2]]},"3320":{"position":[[6,2]]},"3368":{"position":[[9,2]]}}}],["完全",{"_index":98,"t":{"134":{"position":[[7,2]]}}}],["完成",{"_index":550,"t":{"1086":{"position":[[9,2]]},"1094":{"position":[[9,2]]}}}],["完整",{"_index":927,"t":{"2386":{"position":[[40,2]]},"3372":{"position":[[19,2]]},"3701":{"position":[[21,2]]},"3769":{"position":[[13,2]]}}}],["官",{"_index":1095,"t":{"3212":{"position":[[7,1]]}}}],["官方",{"_index":1070,"t":{"3141":{"position":[[9,2]]}}}],["定义",{"_index":326,"t":{"505":{"position":[[8,2]]},"521":{"position":[[12,2]]},"748":{"position":[[30,2]]},"910":{"position":[[11,2]]},"944":{"position":[[8,2]]},"1095":{"position":[[9,2]]},"1144":{"position":[[12,2]]},"1702":{"position":[[7,2]]},"1762":{"position":[[8,2]]},"1914":{"position":[[10,2]]},"1920":{"position":[[10,2]]},"1928":{"position":[[10,2]]},"1936":{"position":[[10,2]]},"1944":{"position":[[11,2]]},"3151":{"position":[[13,2]]},"3153":{"position":[[9,2]]},"3655":{"position":[[7,2]]},"3747":{"position":[[7,2]]},"3788":{"position":[[11,2]]}}}],["定位器",{"_index":513,"t":{"940":{"position":[[12,3]]},"942":{"position":[[12,3]]},"944":{"position":[[16,3]]},"946":{"position":[[14,3]]},"948":{"position":[[12,3]]},"1017":{"position":[[9,3]]},"2106":{"position":[[7,3]]},"2110":{"position":[[11,3]]},"2116":{"position":[[6,3]]},"2120":{"position":[[9,3]]},"2122":{"position":[[7,3]]},"2126":{"position":[[14,3]]},"2128":{"position":[[9,3]]}}}],["定时",{"_index":316,"t":{"487":{"position":[[11,2]]},"2225":{"position":[[26,2]]},"2227":{"position":[[29,2]]},"2392":{"position":[[7,2]]},"2485":{"position":[[6,2]]},"2822":{"position":[[7,2]]},"3909":{"position":[[13,2]]}}}],["实体",{"_index":335,"t":{"533":{"position":[[9,2]]},"695":{"position":[[13,2]]},"738":{"position":[[7,2]]},"746":{"position":[[13,2]]},"778":{"position":[[10,2]]},"780":{"position":[[10,2]]},"904":{"position":[[9,2]]},"910":{"position":[[9,2]]},"991":{"position":[[10,2]]},"993":{"position":[[14,2]]},"999":{"position":[[10,2]]},"1001":{"position":[[10,2]]},"1003":{"position":[[13,2]]},"1005":{"position":[[13,2]]},"1007":{"position":[[14,2]]},"1009":{"position":[[16,2]]},"1028":{"position":[[12,2]]},"1059":{"position":[[19,2]]},"1144":{"position":[[10,2]]},"1760":{"position":[[9,2]]},"1762":{"position":[[10,2]]},"1764":{"position":[[8,2]]},"1774":{"position":[[11,2]]},"1776":{"position":[[9,2]]},"1778":{"position":[[12,2]]},"1782":{"position":[[9,2]]}}}],["实体模型",{"_index":415,"t":{"707":{"position":[[11,4]]}}}],["实例",{"_index":617,"t":{"1409":{"position":[[11,2]]},"1722":{"position":[[26,2]]},"1780":{"position":[[11,2]]},"3159":{"position":[[12,2]]},"3861":{"position":[[24,2]]},"3863":{"position":[[28,2]]}}}],["实时",{"_index":984,"t":{"2753":{"position":[[9,2]]},"3304":{"position":[[6,2]]}}}],["实现",{"_index":239,"t":{"370":{"position":[[6,2]]},"460":{"position":[[7,2]]},"487":{"position":[[7,2]]},"568":{"position":[[9,2]]},"1051":{"position":[[9,2]]},"1411":{"position":[[13,2]]},"2209":{"position":[[5,2]]},"2304":{"position":[[5,2]]},"2314":{"position":[[7,2]]},"2394":{"position":[[7,2]]},"2449":{"position":[[7,2]]},"2556":{"position":[[20,2]]},"2822":{"position":[[5,2]]},"2828":{"position":[[7,2]]},"2913":{"position":[[5,2]]},"2932":{"position":[[7,2]]},"2934":{"position":[[7,2]]},"2948":{"position":[[7,2]]},"2962":{"position":[[7,2]]},"3125":{"position":[[9,2]]},"3198":{"position":[[8,2]]},"3200":{"position":[[8,2]]},"3202":{"position":[[8,2]]},"3378":{"position":[[30,2]]},"3687":{"position":[[18,2]]}}}],["实践",{"_index":148,"t":{"215":{"position":[[18,2]]},"372":{"position":[[8,2]]},"1852":{"position":[[6,2]]},"2806":{"position":[[9,2]]}}}],["审计",{"_index":77,"t":{"109":{"position":[[6,2]]},"111":{"position":[[8,2]]},"113":{"position":[[21,2]]},"564":{"position":[[7,2]]},"569":{"position":[[12,2]]},"571":{"position":[[16,2]]},"573":{"position":[[11,2]]}}}],["客户端",{"_index":37,"t":{"41":{"position":[[2,3]]},"147":{"position":[[7,3]]},"303":{"position":[[8,3]]},"305":{"position":[[10,3]]},"328":{"position":[[8,3]]},"2250":{"position":[[10,3]]},"2548":{"position":[[7,3]]},"3171":{"position":[[9,3]]},"3172":{"position":[[11,3]]},"3174":{"position":[[12,3]]},"3176":{"position":[[17,3]]},"3178":{"position":[[13,3]]},"3180":{"position":[[13,3]]},"3182":{"position":[[12,3]]},"3184":{"position":[[13,3]]},"3186":{"position":[[13,3]]},"3191":{"position":[[8,3]]},"3192":{"position":[[19,3]]},"3193":{"position":[[19,3]]},"3195":{"position":[[13,3]]},"3196":{"position":[[13,3]]},"3497":{"position":[[11,3]]},"3542":{"position":[[11,3]]},"3572":{"position":[[7,3]]},"3576":{"position":[[9,3]]},"3578":{"position":[[9,3]]},"3588":{"position":[[11,3]]},"3592":{"position":[[11,3]]}}}],["宣言",{"_index":119,"t":{"163":{"position":[[2,2]]}}}],["宿主",{"_index":1002,"t":{"2804":{"position":[[6,2]]},"2833":{"position":[[8,2]]}}}],["密",{"_index":741,"t":{"1690":{"position":[[18,1]]}}}],["对",{"_index":429,"t":{"729":{"position":[[9,1]]},"856":{"position":[[8,1]]},"1748":{"position":[[7,1]]},"1750":{"position":[[7,1]]},"3396":{"position":[[9,1]]}}}],["对应",{"_index":340,"t":{"545":{"position":[[11,2]]},"758":{"position":[[10,2]]},"896":{"position":[[15,2]]},"1308":{"position":[[10,2]]}}}],["对比",{"_index":929,"t":{"2386":{"position":[[45,2]]}}}],["对象",{"_index":169,"t":{"260":{"position":[[9,2]]},"266":{"position":[[10,2]]},"269":{"position":[[11,2]]},"281":{"position":[[9,2]]},"283":{"position":[[12,2]]},"289":{"position":[[15,2]]},"493":{"position":[[15,2]]},"527":{"position":[[14,2]]},"948":{"position":[[17,2]]},"1146":{"position":[[12,2]]},"1397":{"position":[[7,2]]},"1997":{"position":[[6,2]]},"2022":{"position":[[8,2]]},"2024":{"position":[[8,2]]},"2032":{"position":[[15,2]]},"2058":{"position":[[16,2]]},"2060":{"position":[[12,2]]},"2112":{"position":[[13,2]]},"2347":{"position":[[12,2]]},"2349":{"position":[[10,2]]},"2376":{"position":[[10,2]]},"2473":{"position":[[14,2]]},"2608":{"position":[[24,2]]},"2681":{"position":[[5,2]]}}}],["导出",{"_index":136,"t":{"191":{"position":[[9,2]]},"718":{"position":[[7,2]]}}}],["导航",{"_index":566,"t":{"1148":{"position":[[7,2]]}}}],["将",{"_index":535,"t":{"1061":{"position":[[9,1]]},"1742":{"position":[[7,1]]},"1744":{"position":[[7,1]]},"2890":{"position":[[8,1]]},"3457":{"position":[[7,1]]}}}],["小时",{"_index":501,"t":{"916":{"position":[[22,2]]}}}],["少",{"_index":500,"t":{"916":{"position":[[18,1]]}}}],["尝鲜",{"_index":55,"t":{"58":{"position":[[3,2]]}}}],["尾随",{"_index":911,"t":{"2366":{"position":[[9,2]]}}}],["局部",{"_index":377,"t":{"624":{"position":[[49,2]]}}}],["层",{"_index":970,"t":{"2671":{"position":[[17,1]]}}}],["展开",{"_index":1172,"t":{"3645":{"position":[[8,2]]}}}],["属性",{"_index":175,"t":{"271":{"position":[[12,2]]},"273":{"position":[[9,2]]},"275":{"position":[[9,2]]},"277":{"position":[[9,2]]},"279":{"position":[[9,2]]},"366":{"position":[[8,2]]},"479":{"position":[[21,2]]},"493":{"position":[[17,2]]},"531":{"position":[[24,2]]},"1148":{"position":[[9,2]]},"1393":{"position":[[7,2]]},"2084":{"position":[[9,2]]},"2358":{"position":[[10,2],[16,2]]},"2374":{"position":[[12,2]]},"2376":{"position":[[12,2]]},"2487":{"position":[[27,2]]},"2734":{"position":[[10,2]]},"3455":{"position":[[19,2],[23,2]]},"3825":{"position":[[34,2]]}}}],["嵌入",{"_index":848,"t":{"2091":{"position":[[7,2]]}}}],["嵌套",{"_index":596,"t":{"1296":{"position":[[11,2]]},"2572":{"position":[[8,2]]}}}],["工作",{"_index":866,"t":{"2183":{"position":[[10,2]]},"2187":{"position":[[10,2]]},"3283":{"position":[[7,2]]},"3292":{"position":[[7,2]]}}}],["工具",{"_index":208,"t":{"328":{"position":[[11,2]]},"1540":{"position":[[12,2]]},"1556":{"position":[[7,2]]}}}],["工厂",{"_index":790,"t":{"1814":{"position":[[10,2]]},"2176":{"position":[[13,2]]},"3421":{"position":[[22,2]]},"3833":{"position":[[12,2]]}}}],["工欲善其事",{"_index":1108,"t":{"3300":{"position":[[0,5]]}}}],["左",{"_index":477,"t":{"861":{"position":[[9,1]]}}}],["差异化",{"_index":928,"t":{"2386":{"position":[[42,3]]}}}],["已经",{"_index":430,"t":{"729":{"position":[[10,2]]}}}],["带",{"_index":572,"t":{"1184":{"position":[[9,1]]},"1262":{"position":[[9,1]]},"1606":{"position":[[8,1]]},"2106":{"position":[[6,1]]},"2183":{"position":[[9,1]]},"2185":{"position":[[19,1]]},"2187":{"position":[[9,1],[19,1]]},"3374":{"position":[[7,1]]},"3685":{"position":[[7,1]]}}}],["带来",{"_index":1063,"t":{"3113":{"position":[[11,2]]}}}],["帮助",{"_index":674,"t":{"1512":{"position":[[6,2]]}}}],["常用工具",{"_index":125,"t":{"173":{"position":[[0,4]]}}}],["常见",{"_index":88,"t":{"120":{"position":[[7,2]]},"605":{"position":[[22,2]]},"766":{"position":[[8,2]]},"1406":{"position":[[5,2]]},"1727":{"position":[[19,2]]},"2170":{"position":[[5,2]]},"2419":{"position":[[7,2]]},"2565":{"position":[[6,2]]},"2606":{"position":[[9,2]]},"2752":{"position":[[11,2]]},"3081":{"position":[[13,2]]},"3197":{"position":[[6,2]]}}}],["常见问题",{"_index":640,"t":{"1466":{"position":[[7,4]]},"2590":{"position":[[6,4]]},"3903":{"position":[[8,4]]}}}],["常规",{"_index":302,"t":{"471":{"position":[[9,2]]},"1294":{"position":[[9,2]]},"2312":{"position":[[7,2]]}}}],["平台",{"_index":70,"t":{"101":{"position":[[5,2]]},"1550":{"position":[[15,2]]}}}],["平均值",{"_index":521,"t":{"974":{"position":[[10,3]]}}}],["年",{"_index":260,"t":{"396":{"position":[[5,1]]},"398":{"position":[[5,1]]},"400":{"position":[[5,1]]},"477":{"position":[[13,1]]}}}],["年份",{"_index":304,"t":{"473":{"position":[[11,2]]}}}],["并行",{"_index":939,"t":{"2465":{"position":[[5,2]]}}}],["广播",{"_index":1088,"t":{"3198":{"position":[[12,2]]}}}],["序",{"_index":484,"t":{"870":{"position":[[10,1]]}}}],["序列化",{"_index":842,"t":{"2068":{"position":[[7,3]]},"2070":{"position":[[5,3]]},"2072":{"position":[[6,3]]},"2078":{"position":[[4,3]]},"2080":{"position":[[5,3]]},"2082":{"position":[[8,3]]},"2084":{"position":[[6,3]]},"2342":{"position":[[7,3]]},"2347":{"position":[[9,3]]},"2349":{"position":[[7,3]]},"2351":{"position":[[8,3]]},"2353":{"position":[[7,3]]},"2356":{"position":[[10,3]]},"2358":{"position":[[7,3]]},"2364":{"position":[[13,3]]},"2374":{"position":[[14,3]]},"2378":{"position":[[15,3]]},"2380":{"position":[[30,3]]},"2382":{"position":[[24,3]]},"2384":{"position":[[32,3]]},"3505":{"position":[[16,3]]},"3546":{"position":[[15,3]]},"3717":{"position":[[18,3]]},"3721":{"position":[[10,3]]}}}],["序言",{"_index":57,"t":{"82":{"position":[[3,2]]}}}],["库",{"_index":209,"t":{"328":{"position":[[13,1]]},"999":{"position":[[18,1]]},"1001":{"position":[[18,1]]},"1003":{"position":[[21,1]]},"1005":{"position":[[21,1]]},"1007":{"position":[[22,1]]},"1009":{"position":[[24,1]]},"1011":{"position":[[25,1]]},"1013":{"position":[[26,1]]},"1055":{"position":[[13,1]]},"1057":{"position":[[14,1]]},"1063":{"position":[[13,1]]},"1065":{"position":[[19,1]]},"1087":{"position":[[18,1]]},"2124":{"position":[[10,1]]},"2342":{"position":[[10,1]]},"3225":{"position":[[10,1]]},"3355":{"position":[[14,1]]}}}],["应用",{"_index":428,"t":{"727":{"position":[[7,2]]},"1533":{"position":[[24,2]]},"1588":{"position":[[8,2]]},"1893":{"position":[[6,2]]},"1897":{"position":[[10,2]]},"2042":{"position":[[7,2]]},"2757":{"position":[[11,2]]},"3087":{"position":[[7,2]]},"3137":{"position":[[9,2]]}}}],["应用程序",{"_index":636,"t":{"1462":{"position":[[11,4]]},"1972":{"position":[[26,4]]},"1986":{"position":[[26,4]]},"2009":{"position":[[26,4]]},"2743":{"position":[[18,4]]},"2748":{"position":[[11,4]]}}}],["底层",{"_index":837,"t":{"2058":{"position":[[9,2]]},"3467":{"position":[[19,2]]}}}],["建议",{"_index":83,"t":{"115":{"position":[[9,2]]},"153":{"position":[[8,2]]},"193":{"position":[[10,2]]},"221":{"position":[[9,2]]},"254":{"position":[[10,2]]},"256":{"position":[[8,2]]},"295":{"position":[[8,2]]},"332":{"position":[[10,2]]},"374":{"position":[[10,2]]},"424":{"position":[[9,2]]},"464":{"position":[[10,2]]},"495":{"position":[[10,2]]},"535":{"position":[[10,2]]},"561":{"position":[[10,2]]},"575":{"position":[[10,2]]},"640":{"position":[[8,2]]},"656":{"position":[[9,2]]},"672":{"position":[[9,2]]},"699":{"position":[[10,2]]},"735":{"position":[[10,2]]},"752":{"position":[[10,2]]},"774":{"position":[[9,2]]},"796":{"position":[[9,2]]},"837":{"position":[[10,2]]},"847":{"position":[[10,2]]},"890":{"position":[[11,2]]},"920":{"position":[[10,2]]},"936":{"position":[[10,2]]},"950":{"position":[[9,2]]},"982":{"position":[[10,2]]},"1042":{"position":[[9,2]]},"1098":{"position":[[10,2]]},"1136":{"position":[[10,2]]},"1152":{"position":[[10,2]]},"1217":{"position":[[11,2]]},"1282":{"position":[[11,2]]},"1303":{"position":[[10,2]]},"1320":{"position":[[9,2]]},"1354":{"position":[[10,2]]},"1369":{"position":[[10,2]]},"1380":{"position":[[10,2]]},"1441":{"position":[[9,2]]},"1475":{"position":[[10,2]]},"1500":{"position":[[10,2]]},"1562":{"position":[[8,2]]},"1567":{"position":[[10,2]]},"1668":{"position":[[10,2]]},"1692":{"position":[[8,2]]},"1712":{"position":[[8,2]]},"1756":{"position":[[8,2]]},"1788":{"position":[[9,2]]},"1828":{"position":[[9,2]]},"1888":{"position":[[8,2]]},"1966":{"position":[[10,2]]},"2256":{"position":[[9,2]]},"2286":{"position":[[9,2]]},"2299":{"position":[[9,2]]},"2322":{"position":[[8,2]]},"2336":{"position":[[8,2]]},"2388":{"position":[[8,2]]},"2491":{"position":[[9,2]]},"2513":{"position":[[9,2]]},"2560":{"position":[[9,2]]},"2594":{"position":[[9,2]]},"2610":{"position":[[10,2]]},"2630":{"position":[[8,2]]},"2658":{"position":[[9,2]]},"2697":{"position":[[8,2]]},"2736":{"position":[[10,2]]},"2765":{"position":[[10,2]]},"2777":{"position":[[9,2]]},"2799":{"position":[[8,2]]},"2839":{"position":[[8,2]]},"2857":{"position":[[8,2]]},"2906":{"position":[[10,2]]},"2974":{"position":[[9,2]]},"3083":{"position":[[10,2]]},"3127":{"position":[[10,2]]},"3132":{"position":[[9,2]]},"3204":{"position":[[9,2]]},"3239":{"position":[[10,2]]},"3278":{"position":[[10,2]]},"3297":{"position":[[10,2]]},"3310":{"position":[[9,2]]},"3332":{"position":[[9,2]]},"3346":{"position":[[10,2]]},"3408":{"position":[[11,2]]},"3471":{"position":[[9,2]]},"3604":{"position":[[9,2]]},"3723":{"position":[[8,2]]},"3755":{"position":[[8,2]]},"3905":{"position":[[11,2]]}}}],["开发",{"_index":249,"t":{"385":{"position":[[9,2]]},"2614":{"position":[[10,2]]},"2616":{"position":[[10,2]]},"2620":{"position":[[12,2]]},"2626":{"position":[[8,2]]}}}],["开发方式",{"_index":398,"t":{"676":{"position":[[10,4]]},"703":{"position":[[10,4]]}}}],["开启",{"_index":890,"t":{"2297":{"position":[[14,2]]},"3302":{"position":[[6,2]]},"3303":{"position":[[6,2]]}}}],["开始",{"_index":586,"t":{"1224":{"position":[[7,2]]},"2211":{"position":[[5,2]]},"2451":{"position":[[7,2]]}}}],["开源",{"_index":60,"t":{"88":{"position":[[3,2]]},"165":{"position":[[0,2]]},"198":{"position":[[6,2]]}}}],["异常",{"_index":395,"t":{"654":{"position":[[11,2]]},"1812":{"position":[[13,2]]},"1831":{"position":[[7,2]]},"1833":{"position":[[6,2]]},"1835":{"position":[[9,2]]},"1836":{"position":[[9,2]]},"1838":{"position":[[8,2]]},"1840":{"position":[[6,2]]},"1842":{"position":[[10,2]]},"1854":{"position":[[8,2]]},"1858":{"position":[[8,2]]},"1860":{"position":[[6,2]]},"1864":{"position":[[6,2]]},"1876":{"position":[[5,2]]},"1880":{"position":[[10,2]]},"1882":{"position":[[7,2]]},"1930":{"position":[[6,2]]},"2190":{"position":[[9,2]]},"2192":{"position":[[9,2]]},"2194":{"position":[[7,2]]},"2196":{"position":[[7,2]]},"2198":{"position":[[4,2]]},"2200":{"position":[[8,2]]},"2382":{"position":[[27,2]]},"2471":{"position":[[8,2]]},"2535":{"position":[[8,2]]},"3012":{"position":[[4,2]]},"3517":{"position":[[10,2]]},"3558":{"position":[[10,2]]},"3695":{"position":[[15,2]]}}}],["异步",{"_index":542,"t":{"1072":{"position":[[9,2]]}}}],["弊端",{"_index":1051,"t":{"3077":{"position":[[11,2]]}}}],["引擎",{"_index":1203,"t":{"3726":{"position":[[9,2]]},"3728":{"position":[[7,2]]},"3753":{"position":[[12,2]]}}}],["引用",{"_index":908,"t":{"2362":{"position":[[11,2]]}}}],["弱",{"_index":1204,"t":{"3735":{"position":[[7,1]]}}}],["强",{"_index":975,"t":{"2708":{"position":[[26,1]]},"3167":{"position":[[7,1]]},"3737":{"position":[[7,1]]}}}],["强制",{"_index":1218,"t":{"3855":{"position":[[11,2]]},"3857":{"position":[[11,2]]},"3893":{"position":[[11,2]]}}}],["强大",{"_index":1126,"t":{"3366":{"position":[[17,2]]}}}],["当前",{"_index":26,"t":{"33":{"position":[[2,2]]},"2150":{"position":[[6,2]]},"2154":{"position":[[6,2]]},"2242":{"position":[[10,2]]},"3873":{"position":[[12,2]]},"3875":{"position":[[12,2]]},"3891":{"position":[[13,2]]},"3911":{"position":[[7,2]]}}}],["当然",{"_index":219,"t":{"339":{"position":[[6,2]]}}}],["形式",{"_index":258,"t":{"393":{"position":[[12,2]]}}}],["影响",{"_index":570,"t":{"1169":{"position":[[13,2]]},"1182":{"position":[[13,2]]},"1247":{"position":[[12,2]]}}}],["循环",{"_index":236,"t":{"362":{"position":[[8,2]]},"2362":{"position":[[9,2]]},"3469":{"position":[[13,2]]}}}],["微软",{"_index":1069,"t":{"3141":{"position":[[7,2]]}}}],["必先利其器",{"_index":1109,"t":{"3300":{"position":[[5,5]]}}}],["必填",{"_index":710,"t":{"1626":{"position":[[31,2]]},"1632":{"position":[[14,2]]}}}],["必要",{"_index":1,"t":{"8":{"position":[[0,2]]},"2291":{"position":[[6,2]]},"3070":{"position":[[7,2]]}}}],["快照",{"_index":548,"t":{"1081":{"position":[[9,2]]}}}],["快速",{"_index":300,"t":{"470":{"position":[[7,2]]},"1794":{"position":[[5,2]]},"2687":{"position":[[7,2]]},"3761":{"position":[[7,2]]}}}],["忽略",{"_index":391,"t":{"652":{"position":[[6,2]]},"1352":{"position":[[7,2]]},"2362":{"position":[[7,2]]},"2374":{"position":[[8,2]]},"3455":{"position":[[17,2]]},"3588":{"position":[[7,2]]},"3592":{"position":[[7,2]]},"3594":{"position":[[17,2]]}}}],["性",{"_index":1186,"t":{"3679":{"position":[[33,1]]}}}],["性能",{"_index":72,"t":{"103":{"position":[[5,2]]},"264":{"position":[[9,2]]},"770":{"position":[[12,2]]},"886":{"position":[[8,2]]},"3653":{"position":[[7,2]]}}}],["总线",{"_index":742,"t":{"1696":{"position":[[10,2]]},"1700":{"position":[[15,2]]},"1792":{"position":[[9,2]]},"1814":{"position":[[8,2]]},"1826":{"position":[[13,2]]},"3947":{"position":[[14,2]]}}}],["情况",{"_index":216,"t":{"330":{"position":[[16,2]]},"729":{"position":[[28,2]]},"731":{"position":[[30,2]]},"1542":{"position":[[13,2]]},"3338":{"position":[[33,2]]},"3340":{"position":[[18,2]]}}}],["意义",{"_index":132,"t":{"180":{"position":[[14,2]]},"183":{"position":[[9,2]]}}}],["意外",{"_index":789,"t":{"1812":{"position":[[11,2]]}}}],["懒",{"_index":336,"t":{"533":{"position":[[12,1]]}}}],["懒人",{"_index":567,"t":{"1158":{"position":[[7,2]]},"1171":{"position":[[7,2]]},"1186":{"position":[[7,2]]},"1203":{"position":[[10,2]]},"3425":{"position":[[7,2]]}}}],["成功",{"_index":1154,"t":{"3515":{"position":[[8,2]]},"3556":{"position":[[8,2]]}}}],["成员",{"_index":910,"t":{"2364":{"position":[[9,2]]}}}],["或者",{"_index":1098,"t":{"3231":{"position":[[11,2]]},"3235":{"position":[[21,2]]}}}],["所在",{"_index":833,"t":{"2048":{"position":[[11,2]]}}}],["所有",{"_index":514,"t":{"957":{"position":[[9,2]]},"959":{"position":[[13,2]]},"1336":{"position":[[13,2]]},"1338":{"position":[[13,2]]},"2026":{"position":[[8,2]]},"2028":{"position":[[8,2]]},"2058":{"position":[[11,2]]},"2217":{"position":[[7,2]]},"2219":{"position":[[7,2]]},"2457":{"position":[[9,2]]},"2459":{"position":[[9,2]]},"2566":{"position":[[8,2]]},"2568":{"position":[[10,2]]},"2884":{"position":[[16,2]]},"3172":{"position":[[9,2]]},"3592":{"position":[[9,2]]},"3645":{"position":[[10,2]]},"3835":{"position":[[12,2]]},"3849":{"position":[[12,2]]},"3851":{"position":[[12,2]]},"3853":{"position":[[13,2]]},"3857":{"position":[[15,2]]},"3893":{"position":[[15,2]]}}}],["手动",{"_index":158,"t":{"234":{"position":[[7,2]]},"454":{"position":[[6,2]]},"600":{"position":[[4,2]]},"2060":{"position":[[5,2]]},"2401":{"position":[[7,2]]},"2412":{"position":[[7,2]]},"2431":{"position":[[7,2]]},"3290":{"position":[[9,2]]},"3590":{"position":[[7,2]]}}}],["才",{"_index":454,"t":{"786":{"position":[[10,1]]},"788":{"position":[[10,1]]},"1336":{"position":[[10,1]]},"1338":{"position":[[10,1]]},"1340":{"position":[[10,1]]},"1342":{"position":[[11,1]]},"1344":{"position":[[11,1]]},"1346":{"position":[[11,1]]}}}],["打包",{"_index":690,"t":{"1544":{"position":[[5,2]]},"1546":{"position":[[9,2]]},"1548":{"position":[[9,2]]}}}],["打印",{"_index":829,"t":{"2040":{"position":[[5,2]]},"3274":{"position":[[7,2]]},"3459":{"position":[[5,2]]},"3769":{"position":[[9,2]]}}}],["打开",{"_index":52,"t":{"54":{"position":[[0,2]]},"65":{"position":[[0,2]]},"78":{"position":[[0,2]]},"680":{"position":[[9,2]]},"709":{"position":[[9,2]]}}}],["托管",{"_index":638,"t":{"1463":{"position":[[14,2]]},"2058":{"position":[[14,2]]},"2060":{"position":[[10,2]]},"2743":{"position":[[7,2]]}}}],["执行",{"_index":352,"t":{"571":{"position":[[9,2]]},"1122":{"position":[[9,2]]},"1124":{"position":[[7,2]]},"1128":{"position":[[9,2]]},"1498":{"position":[[11,2]]},"1708":{"position":[[9,2]]},"1806":{"position":[[9,2]]},"1812":{"position":[[7,2]]},"1956":{"position":[[10,2]]},"1958":{"position":[[16,2]]},"1960":{"position":[[16,2]]},"2209":{"position":[[9,2]]},"2397":{"position":[[12,2]]},"2401":{"position":[[11,2]]},"2403":{"position":[[11,2]]},"2408":{"position":[[13,2]]},"2412":{"position":[[11,2]]},"2431":{"position":[[11,2]]},"2435":{"position":[[10,2]]},"2449":{"position":[[11,2]]},"2465":{"position":[[10,2]]},"2481":{"position":[[10,2]]},"2483":{"position":[[16,2]]},"2824":{"position":[[9,2]]},"2826":{"position":[[15,2]]},"3767":{"position":[[12,2]]}}}],["执行命令",{"_index":427,"t":{"725":{"position":[[9,4]]}}}],["执行器",{"_index":788,"t":{"1808":{"position":[[9,3]]},"3831":{"position":[[9,3]]}}}],["扫描",{"_index":626,"t":{"1439":{"position":[[9,2]]}}}],["批量",{"_index":444,"t":{"755":{"position":[[8,2]]},"766":{"position":[[10,2]]},"768":{"position":[[11,2]]},"770":{"position":[[8,2]]},"772":{"position":[[17,2]]}}}],["找",{"_index":1032,"t":{"2904":{"position":[[15,1]]}}}],["技术",{"_index":123,"t":{"171":{"position":[[0,2]]}}}],["抛出",{"_index":868,"t":{"2190":{"position":[[4,2]]},"2200":{"position":[[4,2]]}}}],["报文",{"_index":1149,"t":{"3493":{"position":[[11,2]]},"3538":{"position":[[11,2]]}}}],["报表",{"_index":137,"t":{"191":{"position":[[11,2]]}}}],["报错",{"_index":647,"t":{"1469":{"position":[[30,2]]}}}],["拓展",{"_index":24,"t":{"31":{"position":[[12,2]]},"90":{"position":[[5,2]]},"634":{"position":[[38,2]]},"1009":{"position":[[12,2]]},"1688":{"position":[[8,2]]},"2240":{"position":[[18,2]]},"3402":{"position":[[25,2]]}}}],["拦截",{"_index":508,"t":{"925":{"position":[[9,2]]},"932":{"position":[[27,2]]},"1278":{"position":[[13,2]]},"1423":{"position":[[12,2]]},"1425":{"position":[[13,2]]},"1664":{"position":[[14,2]]},"1897":{"position":[[8,2]]},"2568":{"position":[[8,2]]},"3509":{"position":[[10,2]]},"3511":{"position":[[19,2]]},"3513":{"position":[[12,2]]},"3515":{"position":[[12,2]]},"3517":{"position":[[12,2]]},"3550":{"position":[[9,2]]},"3552":{"position":[[19,2]]},"3554":{"position":[[12,2]]},"3556":{"position":[[12,2]]},"3558":{"position":[[12,2]]}}}],["拦截器",{"_index":507,"t":{"923":{"position":[[10,3]]}}}],["拼接",{"_index":863,"t":{"2166":{"position":[[4,2]]}}}],["持久",{"_index":1220,"t":{"3857":{"position":[[19,2]]},"3893":{"position":[[19,2]]},"3897":{"position":[[10,2]]}}}],["持久性",{"_index":1072,"t":{"3147":{"position":[[7,3]]}}}],["指南",{"_index":399,"t":{"678":{"position":[[9,2]]},"705":{"position":[[9,2]]},"1800":{"position":[[19,2]]},"1802":{"position":[[16,2]]}}}],["指定",{"_index":869,"t":{"2192":{"position":[[4,2]]},"2467":{"position":[[21,2]]},"3590":{"position":[[9,2]]},"3763":{"position":[[9,2]]}}}],["授权",{"_index":32,"t":{"35":{"position":[[13,2]]},"37":{"position":[[11,2]]},"130":{"position":[[10,2]]},"134":{"position":[[12,2]]},"136":{"position":[[5,2],[12,2]]},"138":{"position":[[9,2]]},"145":{"position":[[9,2]]},"1910":{"position":[[6,2]]},"2137":{"position":[[5,2]]},"2244":{"position":[[21,2]]},"2246":{"position":[[19,2]]},"3649":{"position":[[7,2]]},"3683":{"position":[[19,2]]}}}],["排序",{"_index":482,"t":{"869":{"position":[[9,2]]},"3119":{"position":[[15,2]]},"3639":{"position":[[9,2]]}}}],["排除",{"_index":289,"t":{"448":{"position":[[8,2]]},"668":{"position":[[11,2]]},"670":{"position":[[11,2]]},"1332":{"position":[[6,2]]},"1334":{"position":[[6,2]]},"1344":{"position":[[12,2]]},"1346":{"position":[[12,2]]},"3709":{"position":[[6,2]]}}}],["接口",{"_index":616,"t":{"1404":{"position":[[9,2]]},"1411":{"position":[[9,2]]},"1748":{"position":[[11,2]]},"1750":{"position":[[10,2]]},"2344":{"position":[[29,2]]},"2716":{"position":[[8,2]]},"2932":{"position":[[30,2]]},"2934":{"position":[[30,2]]},"2948":{"position":[[33,2]]},"2962":{"position":[[31,2]]},"3378":{"position":[[27,2]]},"3607":{"position":[[7,2]]},"3609":{"position":[[9,2]]},"3615":{"position":[[6,2]]},"3619":{"position":[[6,2]]},"3655":{"position":[[9,2]]},"3691":{"position":[[7,2]]},"3693":{"position":[[9,2]]},"3701":{"position":[[15,2]]},"3713":{"position":[[11,2]]},"3751":{"position":[[17,2]]}}}],["接口定义",{"_index":811,"t":{"1912":{"position":[[8,4]]},"1918":{"position":[[8,4]]},"1924":{"position":[[8,4]]},"1932":{"position":[[8,4]]},"1940":{"position":[[9,4]]},"1950":{"position":[[9,4]]}}}],["接口方式",{"_index":593,"t":{"1274":{"position":[[9,4]]},"1413":{"position":[[8,4]]},"3582":{"position":[[22,4]]}}}],["接口类型",{"_index":809,"t":{"1900":{"position":[[8,4]]}}}],["控制",{"_index":606,"t":{"1386":{"position":[[5,2]]},"1746":{"position":[[9,2],[18,2]]},"1748":{"position":[[15,2]]},"1752":{"position":[[14,2]]},"3649":{"position":[[9,2]]},"3679":{"position":[[12,2]]},"3691":{"position":[[11,2]]},"3899":{"position":[[12,2]]}}}],["控制台",{"_index":402,"t":{"680":{"position":[[17,3]]},"709":{"position":[[17,3]]},"1533":{"position":[[21,3]]},"2863":{"position":[[9,3]]},"2890":{"position":[[9,3]]},"3429":{"position":[[10,3]]}}}],["控制器",{"_index":379,"t":{"626":{"position":[[22,3]]},"1571":{"position":[[9,3]]},"1573":{"position":[[10,3]]},"1579":{"position":[[16,3]]},"1586":{"position":[[8,3]]},"1591":{"position":[[8,3]]},"1622":{"position":[[12,3]]},"1624":{"position":[[11,3]]},"1662":{"position":[[16,3]]},"3681":{"position":[[14,3]]},"3717":{"position":[[8,3]]}}}],["推广",{"_index":675,"t":{"1512":{"position":[[8,2]]}}}],["推荐",{"_index":954,"t":{"2576":{"position":[[21,2]]},"2578":{"position":[[15,2]]},"2773":{"position":[[6,2]]},"3721":{"position":[[19,2]]}}}],["推送",{"_index":1089,"t":{"3198":{"position":[[15,2]]}}}],["描述",{"_index":1191,"t":{"3693":{"position":[[13,2]]}}}],["提交",{"_index":243,"t":{"377":{"position":[[5,2]]},"648":{"position":[[14,2]]},"650":{"position":[[13,2]]},"660":{"position":[[15,2]]},"662":{"position":[[14,2]]},"664":{"position":[[18,2]]},"666":{"position":[[17,2]]},"668":{"position":[[20,2]]},"670":{"position":[[19,2]]},"778":{"position":[[16,2]]},"780":{"position":[[15,2]]},"782":{"position":[[18,2]]},"784":{"position":[[17,2]]},"786":{"position":[[21,2]]},"788":{"position":[[20,2]]},"1324":{"position":[[15,2]]},"1326":{"position":[[14,2]]},"1328":{"position":[[15,2]]},"1330":{"position":[[14,2]]},"1332":{"position":[[17,2]]},"1334":{"position":[[16,2]]},"1336":{"position":[[20,2]]},"1338":{"position":[[19,2]]},"1340":{"position":[[20,2]]},"1342":{"position":[[20,2]]},"1344":{"position":[[25,2]]},"1346":{"position":[[24,2]]},"1348":{"position":[[17,2]]},"1350":{"position":[[16,2]]}}}],["提供",{"_index":341,"t":{"545":{"position":[[17,2]]},"894":{"position":[[19,2]]},"896":{"position":[[12,2]]},"1586":{"position":[[13,2]]},"1866":{"position":[[27,2]]},"1882":{"position":[[11,2]]},"2034":{"position":[[8,2]]},"2068":{"position":[[10,2]]},"2089":{"position":[[11,2]]},"2091":{"position":[[13,2]]},"2093":{"position":[[9,2]]},"2356":{"position":[[13,2]]},"2498":{"position":[[8,2]]},"2797":{"position":[[14,2]]},"3505":{"position":[[19,2]]},"3546":{"position":[[18,2]]}}}],["提出",{"_index":247,"t":{"383":{"position":[[7,2]]}}}],["提示",{"_index":1111,"t":{"3302":{"position":[[12,2]]},"3303":{"position":[[12,2]]},"3306":{"position":[[10,2]]}}}],["插件",{"_index":668,"t":{"1490":{"position":[[11,2]]}}}],["插入",{"_index":1100,"t":{"3235":{"position":[[13,2],[19,2]]},"3266":{"position":[[9,2]]}}}],["搜索",{"_index":1114,"t":{"3308":{"position":[[8,2]]}}}],["搞定",{"_index":1016,"t":{"2867":{"position":[[9,2]]}}}],["搭建",{"_index":1116,"t":{"3330":{"position":[[6,2]]}}}],["操作",{"_index":343,"t":{"549":{"position":[[13,2]]},"551":{"position":[[19,2]]},"559":{"position":[[11,2]]},"613":{"position":[[9,2]]},"678":{"position":[[7,2]]},"686":{"position":[[9,2]]},"687":{"position":[[13,2]]},"705":{"position":[[7,2]]},"755":{"position":[[10,2]]},"766":{"position":[[12,2]]},"768":{"position":[[13,2]]},"770":{"position":[[10,2]]},"772":{"position":[[19,2]]},"995":{"position":[[12,2]]},"997":{"position":[[17,2]]},"1009":{"position":[[14,2]]},"1032":{"position":[[15,2]]},"1034":{"position":[[10,2]]},"1193":{"position":[[22,2]]},"1195":{"position":[[19,2]]},"1197":{"position":[[28,2]]},"1201":{"position":[[17,2]]},"1232":{"position":[[11,2]]},"1249":{"position":[[12,2]]},"1266":{"position":[[10,2]]},"1496":{"position":[[12,2]]},"1727":{"position":[[21,2]]},"1922":{"position":[[6,2]]},"2170":{"position":[[7,2]]},"2752":{"position":[[13,2]]},"2763":{"position":[[11,2]]},"2828":{"position":[[13,2]]},"3081":{"position":[[15,2]]},"3257":{"position":[[10,2]]},"3259":{"position":[[22,2]]},"3771":{"position":[[16,2]]}}}],["操作符",{"_index":682,"t":{"1529":{"position":[[7,3]]}}}],["操作系统",{"_index":423,"t":{"720":{"position":[[27,4]]}}}],["支持",{"_index":69,"t":{"101":{"position":[[3,2]]},"473":{"position":[[9,2]]},"475":{"position":[[9,2]]},"477":{"position":[[9,2]]},"630":{"position":[[8,2]]},"802":{"position":[[9,2]]},"804":{"position":[[9,2]]},"894":{"position":[[14,2]]},"914":{"position":[[20,2]]},"925":{"position":[[7,2]]},"948":{"position":[[15,2]]},"999":{"position":[[15,2]]},"1001":{"position":[[15,2]]},"1003":{"position":[[18,2]]},"1005":{"position":[[18,2]]},"1007":{"position":[[19,2]]},"1009":{"position":[[21,2]]},"1011":{"position":[[22,2]]},"1013":{"position":[[23,2]]},"1104":{"position":[[9,2]]},"1467":{"position":[[18,2]]},"1512":{"position":[[10,2]]},"1614":{"position":[[8,2]]},"1616":{"position":[[8,2]]},"1620":{"position":[[9,2]]},"1662":{"position":[[9,2]]},"1878":{"position":[[8,2]]},"1897":{"position":[[6,2]]},"2099":{"position":[[9,2]]},"2297":{"position":[[16,2]]},"2380":{"position":[[33,2]]},"2622":{"position":[[12,2]]},"2884":{"position":[[6,2]]},"3455":{"position":[[15,2]]},"3525":{"position":[[8,2]]},"3529":{"position":[[8,2]]},"3534":{"position":[[7,2]]},"3564":{"position":[[8,2]]},"3568":{"position":[[8,2]]},"3637":{"position":[[9,2]]},"3677":{"position":[[18,2]]},"3681":{"position":[[17,2]]},"3701":{"position":[[19,2]]},"3715":{"position":[[4,2]]}}}],["数",{"_index":516,"t":{"966":{"position":[[13,1]]},"1169":{"position":[[16,1]]},"1182":{"position":[[16,1]]},"1247":{"position":[[15,1]]}}}],["数值",{"_index":1060,"t":{"3109":{"position":[[9,2]]}}}],["数据",{"_index":353,"t":{"578":{"position":[[6,2]]},"580":{"position":[[4,2]]},"582":{"position":[[4,2]]},"646":{"position":[[15,2]]},"738":{"position":[[9,2]]},"744":{"position":[[11,2]]},"746":{"position":[[15,2]]},"786":{"position":[[6,2]]},"788":{"position":[[6,2]]},"957":{"position":[[11,2]]},"959":{"position":[[15,2]]},"1140":{"position":[[12,2]]},"1150":{"position":[[14,2]]},"1336":{"position":[[6,2]]},"1338":{"position":[[6,2]]},"1340":{"position":[[6,2]]},"1342":{"position":[[7,2]]},"1344":{"position":[[7,2]]},"1346":{"position":[[7,2]]},"1671":{"position":[[5,2]]},"1997":{"position":[[8,2]]},"2040":{"position":[[7,2]]},"2928":{"position":[[19,2]]},"2944":{"position":[[19,2]]},"2958":{"position":[[19,2]]},"2964":{"position":[[21,2]]},"3105":{"position":[[7,2]]},"3123":{"position":[[9,2]]},"3235":{"position":[[11,2]]},"3623":{"position":[[8,2]]},"3711":{"position":[[15,2]]},"3782":{"position":[[19,2]]}}}],["数据库",{"_index":321,"t":{"499":{"position":[[6,3]]},"505":{"position":[[10,3]]},"507":{"position":[[12,3]]},"509":{"position":[[12,3]]},"513":{"position":[[11,3]]},"519":{"position":[[10,3]]},"521":{"position":[[6,3]]},"523":{"position":[[6,3]]},"527":{"position":[[8,3]]},"545":{"position":[[14,3]]},"569":{"position":[[9,3]]},"676":{"position":[[7,3]]},"689":{"position":[[11,3]]},"703":{"position":[[7,3]]},"714":{"position":[[12,3]]},"727":{"position":[[16,3]]},"758":{"position":[[13,3]]},"800":{"position":[[7,3]]},"802":{"position":[[16,3]]},"804":{"position":[[16,3]]},"806":{"position":[[7,3]]},"894":{"position":[[16,3]]},"896":{"position":[[9,3]]},"898":{"position":[[8,3]]},"900":{"position":[[9,3]]},"902":{"position":[[8,3]]},"923":{"position":[[7,3]]},"940":{"position":[[6,3]]},"942":{"position":[[6,3]]},"944":{"position":[[10,3]]},"946":{"position":[[8,3]]},"948":{"position":[[6,3]]},"993":{"position":[[11,3]]},"997":{"position":[[9,3]]},"1034":{"position":[[7,3]]},"1036":{"position":[[14,3]]},"1053":{"position":[[15,3]]},"1055":{"position":[[15,3]]},"1057":{"position":[[16,3]]},"1061":{"position":[[21,3]]},"1080":{"position":[[11,3]]},"1091":{"position":[[14,3]]},"1104":{"position":[[16,3]]},"1150":{"position":[[9,3]]},"1201":{"position":[[9,3]]},"1211":{"position":[[10,3]]},"1270":{"position":[[9,3]]},"1308":{"position":[[12,3]]},"1310":{"position":[[10,3]]},"1314":{"position":[[10,3]]},"1316":{"position":[[10,3]]},"1760":{"position":[[6,3]]},"1776":{"position":[[6,3]]},"1778":{"position":[[9,3]]},"1782":{"position":[[6,3]]},"1786":{"position":[[8,3]]},"2114":{"position":[[8,3]]},"2116":{"position":[[9,3]]},"2118":{"position":[[10,3]]},"2120":{"position":[[12,3]]},"2556":{"position":[[13,3]]},"2914":{"position":[[9,3]]},"2916":{"position":[[9,3]]},"2918":{"position":[[9,3]]},"2924":{"position":[[11,3]]},"2926":{"position":[[12,3]]},"2940":{"position":[[11,3]]},"2942":{"position":[[12,3]]},"2954":{"position":[[11,3]]},"2956":{"position":[[12,3]]},"3257":{"position":[[7,3]]},"3433":{"position":[[10,3]]},"3457":{"position":[[26,3]]},"3469":{"position":[[8,3]]}}}],["数据模型",{"_index":472,"t":{"850":{"position":[[9,4]]}}}],["数组",{"_index":286,"t":{"442":{"position":[[10,2]]}}}],["整个",{"_index":966,"t":{"2642":{"position":[[12,2]]},"2675":{"position":[[12,2]]}}}],["文件",{"_index":8,"t":{"16":{"position":[[0,2]]},"18":{"position":[[0,2]]},"729":{"position":[[26,2]]},"731":{"position":[[28,2]]},"1728":{"position":[[9,2]]},"1732":{"position":[[9,2]]},"1736":{"position":[[5,2]]},"1738":{"position":[[7,2]]},"1740":{"position":[[7,2]]},"2062":{"position":[[11,2]]},"2089":{"position":[[9,2]]},"2091":{"position":[[11,2]]},"2093":{"position":[[7,2]]},"2097":{"position":[[7,2]]},"2099":{"position":[[12,2]]},"2539":{"position":[[11,2]]},"2541":{"position":[[27,2]]},"2638":{"position":[[19,2]]},"2665":{"position":[[19,2]]},"2669":{"position":[[22,2]]},"2744":{"position":[[11,2]]},"2746":{"position":[[10,2]]},"2787":{"position":[[30,2]]},"3431":{"position":[[10,2]]},"3521":{"position":[[30,2]]},"3562":{"position":[[30,2]]}}}],["文件大小",{"_index":766,"t":{"1746":{"position":[[14,4]]}}}],["文件夹",{"_index":629,"t":{"1447":{"position":[[14,3]]},"2523":{"position":[[20,3]]},"2541":{"position":[[19,3]]}}}],["文件目录",{"_index":755,"t":{"1730":{"position":[[9,4]]}}}],["文件系统",{"_index":748,"t":{"1716":{"position":[[7,4]]},"1718":{"position":[[7,4]]},"1720":{"position":[[9,4]]},"1722":{"position":[[7,4]]}}}],["文本",{"_index":858,"t":{"2146":{"position":[[6,2]]}}}],["文档",{"_index":59,"t":{"86":{"position":[[3,2]]},"3212":{"position":[[9,2]]},"3607":{"position":[[9,2]]},"3609":{"position":[[11,2]]},"3611":{"position":[[12,2]]},"3635":{"position":[[6,2]]},"3645":{"position":[[12,2]]},"3647":{"position":[[9,2]]},"3685":{"position":[[20,2]]},"3701":{"position":[[17,2]]}}}],["断言",{"_index":1134,"t":{"3404":{"position":[[15,2]]}}}],["新",{"_index":46,"t":{"49":{"position":[[0,1]]},"73":{"position":[[0,1]]},"383":{"position":[[9,1]]},"1460":{"position":[[11,1]]},"2118":{"position":[[6,1]]},"2120":{"position":[[7,1]]},"2135":{"position":[[18,1]]}}}],["新增",{"_index":176,"t":{"273":{"position":[[7,2]]},"644":{"position":[[6,2]]},"646":{"position":[[6,2]]},"648":{"position":[[6,2]]},"650":{"position":[[6,2]]},"652":{"position":[[10,2]]},"660":{"position":[[6,2]]},"662":{"position":[[6,2]]},"664":{"position":[[6,2]]},"666":{"position":[[6,2]]},"668":{"position":[[6,2]]},"670":{"position":[[6,2]]},"1003":{"position":[[11,2]]}}}],["方式",{"_index":16,"t":{"24":{"position":[[16,2]]},"120":{"position":[[12,2]]},"436":{"position":[[14,2]]},"489":{"position":[[22,2]]},"491":{"position":[[27,2]]},"515":{"position":[[23,2]]},"517":{"position":[[22,2]]},"582":{"position":[[8,2]]},"584":{"position":[[8,2]]},"586":{"position":[[12,2]]},"720":{"position":[[32,2]]},"902":{"position":[[13,2]]},"904":{"position":[[13,2]]},"906":{"position":[[14,2]]},"908":{"position":[[15,2]]},"910":{"position":[[13,2]]},"912":{"position":[[16,2]]},"1069":{"position":[[13,2]]},"1108":{"position":[[12,2]]},"1203":{"position":[[18,2]]},"1205":{"position":[[25,2]]},"1207":{"position":[[22,2]]},"1209":{"position":[[31,2]]},"1215":{"position":[[19,2]]},"1226":{"position":[[13,2]]},"1272":{"position":[[13,2]]},"1367":{"position":[[13,2]]},"1375":{"position":[[9,2]]},"1390":{"position":[[12,2]]},"1393":{"position":[[9,2]]},"1433":{"position":[[25,2]]},"1435":{"position":[[29,2]]},"1688":{"position":[[10,2]]},"1708":{"position":[[7,2]]},"1723":{"position":[[54,2]]},"1725":{"position":[[13,2]]},"1822":{"position":[[14,2]]},"1833":{"position":[[8,2]]},"1908":{"position":[[10,2]]},"1912":{"position":[[12,2]]},"1914":{"position":[[12,2]]},"1918":{"position":[[12,2]]},"1920":{"position":[[12,2]]},"1924":{"position":[[12,2]]},"1926":{"position":[[30,2]]},"1928":{"position":[[12,2]]},"1932":{"position":[[12,2]]},"1934":{"position":[[33,2]]},"1936":{"position":[[12,2]]},"1940":{"position":[[13,2]]},"1942":{"position":[[31,2]]},"1944":{"position":[[13,2]]},"1950":{"position":[[13,2]]},"1952":{"position":[[31,2]]},"2304":{"position":[[14,2]]},"2318":{"position":[[19,2]]},"2330":{"position":[[15,2]]},"2396":{"position":[[7,2]]},"2405":{"position":[[24,2]]},"2407":{"position":[[7,2]]},"2414":{"position":[[24,2]]},"2433":{"position":[[24,2]]},"2437":{"position":[[14,2]]},"2465":{"position":[[12,2]]},"2467":{"position":[[19,2]]},"2469":{"position":[[24,2]]},"2477":{"position":[[25,2]]},"2481":{"position":[[12,2]]},"2483":{"position":[[18,2]]},"2545":{"position":[[14,2]]},"2546":{"position":[[15,2]]},"2550":{"position":[[9,2]]},"2576":{"position":[[16,2]]},"2578":{"position":[[12,2]]},"2586":{"position":[[12,2]]},"2588":{"position":[[36,2]]},"2624":{"position":[[15,2]]},"2691":{"position":[[11,2]]},"2714":{"position":[[14,2]]},"2750":{"position":[[19,2]]},"2804":{"position":[[8,2]]},"2808":{"position":[[23,2]]},"2824":{"position":[[11,2]]},"2826":{"position":[[17,2]]},"2833":{"position":[[10,2]]},"2835":{"position":[[25,2]]},"2853":{"position":[[13,2]]},"2855":{"position":[[21,2]]},"2914":{"position":[[26,2]]},"2916":{"position":[[35,2]]},"2918":{"position":[[37,2]]},"2922":{"position":[[18,2]]},"2938":{"position":[[18,2]]},"2952":{"position":[[16,2]]},"3153":{"position":[[11,2]]},"3159":{"position":[[14,2]]},"3161":{"position":[[21,2]]},"3163":{"position":[[21,2]]},"3165":{"position":[[16,2]]},"3167":{"position":[[25,2]]},"3398":{"position":[[13,2]]},"3419":{"position":[[20,2]]},"3421":{"position":[[24,2]]},"3423":{"position":[[14,2]]},"3435":{"position":[[22,2]]},"3437":{"position":[[23,2]]},"3461":{"position":[[18,2]]},"3482":{"position":[[9,2]]},"3484":{"position":[[8,2]]},"3485":{"position":[[11,2]]},"3489":{"position":[[11,2]]},"3533":{"position":[[26,2]]},"3534":{"position":[[13,2]]},"3580":{"position":[[19,2]]},"3598":{"position":[[17,2]]},"3733":{"position":[[9,2]]}}}],["方案",{"_index":1037,"t":{"2913":{"position":[[10,2]]},"2920":{"position":[[10,2]]}}}],["方法",{"_index":25,"t":{"31":{"position":[[14,2]]},"203":{"position":[[20,2]]},"213":{"position":[[19,2]]},"326":{"position":[[13,2]]},"493":{"position":[[20,2]]},"1023":{"position":[[8,2]]},"1228":{"position":[[9,2]]},"1272":{"position":[[11,2]]},"1276":{"position":[[21,2]]},"1395":{"position":[[7,2]]},"1593":{"position":[[10,2]]},"1602":{"position":[[14,2]]},"1604":{"position":[[15,2]]},"1606":{"position":[[13,2]]},"1622":{"position":[[18,2]]},"1624":{"position":[[15,2]]},"1626":{"position":[[9,2]]},"1630":{"position":[[14,2]]},"1850":{"position":[[16,2]]},"1860":{"position":[[8,2]]},"2198":{"position":[[6,2]]},"2240":{"position":[[20,2]]},"2265":{"position":[[13,2]]},"2268":{"position":[[17,2]]},"2271":{"position":[[20,2]]},"2273":{"position":[[24,2]]},"2275":{"position":[[24,2]]},"2277":{"position":[[35,2]]},"2280":{"position":[[20,2]]},"2282":{"position":[[24,2]]},"2936":{"position":[[31,2]]},"2950":{"position":[[24,2]]},"3223":{"position":[[11,2]]},"3288":{"position":[[29,2]]},"3717":{"position":[[14,2]]},"3747":{"position":[[11,2]]},"3749":{"position":[[10,2]]},"3825":{"position":[[37,2]]}}}],["无敌",{"_index":568,"t":{"1158":{"position":[[9,2]]},"1171":{"position":[[9,2]]},"1186":{"position":[[9,2]]},"1203":{"position":[[12,2]]}}}],["无法",{"_index":211,"t":{"330":{"position":[[7,2]]}}}],["日志",{"_index":78,"t":{"109":{"position":[[8,2]]},"111":{"position":[[10,2]]},"113":{"position":[[23,2]]},"387":{"position":[[7,2]]},"564":{"position":[[9,2]]},"569":{"position":[[14,2]]},"571":{"position":[[18,2]]},"573":{"position":[[13,2]]},"2260":{"position":[[10,2]]},"2837":{"position":[[18,2]]},"3382":{"position":[[11,2]]},"3411":{"position":[[7,2]]},"3413":{"position":[[5,2]]},"3415":{"position":[[5,2]]},"3427":{"position":[[7,2]]},"3439":{"position":[[11,2]]},"3443":{"position":[[24,2]]},"3459":{"position":[[7,2]]},"3463":{"position":[[7,2]]},"3465":{"position":[[6,2]]},"3467":{"position":[[22,2]]},"3469":{"position":[[11,2],[17,2]]},"3600":{"position":[[16,2]]},"3927":{"position":[[13,2]]}}}],["旧",{"_index":43,"t":{"47":{"position":[[0,1]]},"71":{"position":[[0,1]]}}}],["时",{"_index":329,"t":{"513":{"position":[[16,1]]},"727":{"position":[[11,1]]},"916":{"position":[[13,1]]},"1276":{"position":[[11,1]]},"2378":{"position":[[18,1]]},"3594":{"position":[[16,1]]},"3771":{"position":[[11,1]]}}}],["时态",{"_index":488,"t":{"884":{"position":[[8,2]]}}}],["时间",{"_index":522,"t":{"976":{"position":[[9,2]]},"1191":{"position":[[11,2]]},"1280":{"position":[[12,2]]},"1666":{"position":[[18,2]]},"2086":{"position":[[6,2]]},"2360":{"position":[[7,2]]},"2397":{"position":[[9,2]]},"2435":{"position":[[12,2]]}}}],["映射",{"_index":971,"t":{"2681":{"position":[[7,2]]},"2689":{"position":[[10,2]]},"2734":{"position":[[17,2]]}}}],["是否",{"_index":181,"t":{"279":{"position":[[11,2]]},"964":{"position":[[13,2]]},"3847":{"position":[[14,2]]},"3889":{"position":[[15,2]]}}}],["是否是",{"_index":840,"t":{"2062":{"position":[[7,3]]}}}],["显示",{"_index":985,"t":{"2755":{"position":[[9,2]]},"3304":{"position":[[8,2]]},"3695":{"position":[[20,2]]}}}],["普通",{"_index":597,"t":{"1299":{"position":[[9,2]]}}}],["智能",{"_index":1112,"t":{"3303":{"position":[[10,2]]},"3306":{"position":[[8,2]]}}}],["暂停",{"_index":873,"t":{"2213":{"position":[[5,2]]},"2453":{"position":[[7,2]]},"3851":{"position":[[10,2]]},"3875":{"position":[[10,2]]},"3879":{"position":[[11,2]]}}}],["暂时",{"_index":613,"t":{"1398":{"position":[[7,2]]}}}],["更",{"_index":348,"t":{"559":{"position":[[9,1]]},"1301":{"position":[[9,1]]},"1601":{"position":[[6,1]]},"1862":{"position":[[6,1]]},"1874":{"position":[[7,1]]},"1964":{"position":[[9,1]]},"2316":{"position":[[7,1]]},"2353":{"position":[[10,1]]},"2580":{"position":[[10,1]]},"2592":{"position":[[8,1]]},"2873":{"position":[[18,1]]},"2882":{"position":[[8,1]]},"2900":{"position":[[11,1]]},"3157":{"position":[[13,1]]},"3237":{"position":[[10,1]]},"3449":{"position":[[7,1]]},"3693":{"position":[[11,1]]}}}],["更改",{"_index":291,"t":{"452":{"position":[[8,2]]},"2728":{"position":[[8,2]]}}}],["更新",{"_index":177,"t":{"275":{"position":[[7,2]]},"452":{"position":[[14,2]]},"660":{"position":[[9,2]]},"662":{"position":[[9,2]]},"664":{"position":[[9,2]]},"666":{"position":[[9,2]]},"668":{"position":[[9,2]]},"670":{"position":[[9,2]]},"714":{"position":[[9,2]]},"716":{"position":[[7,2]]},"1005":{"position":[[11,2]]},"1324":{"position":[[6,2]]},"1326":{"position":[[6,2]]},"1328":{"position":[[6,2]]},"1330":{"position":[[6,2]]},"1332":{"position":[[11,2]]},"1334":{"position":[[11,2]]},"1336":{"position":[[11,2]]},"1338":{"position":[[11,2]]},"1340":{"position":[[11,2]]},"1342":{"position":[[12,2]]},"1344":{"position":[[19,2]]},"1346":{"position":[[19,2]]},"1348":{"position":[[7,2]]},"1350":{"position":[[7,2]]},"1352":{"position":[[11,2]]},"2507":{"position":[[8,2]]},"2654":{"position":[[16,2]]},"2728":{"position":[[14,2]]},"3231":{"position":[[13,2]]},"3235":{"position":[[16,2],[23,2]]},"3268":{"position":[[9,2]]},"3324":{"position":[[9,2]]},"3843":{"position":[[10,2]]},"3881":{"position":[[11,2]]}}}],["替换",{"_index":592,"t":{"1268":{"position":[[13,2]]},"2673":{"position":[[8,2]]},"2791":{"position":[[11,2]]},"3753":{"position":[[10,2]]}}}],["最佳",{"_index":147,"t":{"215":{"position":[[16,2]]},"372":{"position":[[6,2]]},"1367":{"position":[[9,2]]},"1852":{"position":[[4,2]]},"2806":{"position":[[7,2]]},"2880":{"position":[[28,2]]}}}],["最大值",{"_index":517,"t":{"968":{"position":[[11,3]]}}}],["最小值",{"_index":518,"t":{"970":{"position":[[11,3]]}}}],["最新",{"_index":388,"t":{"646":{"position":[[13,2]]}}}],["最终",{"_index":413,"t":{"695":{"position":[[11,2]]}}}],["有效",{"_index":827,"t":{"2028":{"position":[[10,2]]}}}],["有效性",{"_index":855,"t":{"2139":{"position":[[14,3]]},"2141":{"position":[[17,3]]}}}],["服务",{"_index":269,"t":{"410":{"position":[[15,2]]},"513":{"position":[[14,2]]},"543":{"position":[[19,2]]},"594":{"position":[[10,2]]},"760":{"position":[[13,2]]},"898":{"position":[[11,2]]},"1427":{"position":[[16,2]]},"1431":{"position":[[19,2]]},"1439":{"position":[[16,2]]},"1581":{"position":[[18,2]]},"1700":{"position":[[17,2]]},"1720":{"position":[[13,2]]},"1810":{"position":[[12,2]]},"1842":{"position":[[12,2]]},"2034":{"position":[[6,2]]},"2036":{"position":[[6,2]]},"2174":{"position":[[11,2]]},"2284":{"position":[[22,2]]},"2518":{"position":[[7,2]]},"2584":{"position":[[13,2]]},"2602":{"position":[[20,2]]},"2710":{"position":[[26,2]]},"2785":{"position":[[17,2]]},"2802":{"position":[[11,2]]},"2820":{"position":[[9,2]]},"2876":{"position":[[10,2]]},"2900":{"position":[[13,2]]},"3143":{"position":[[16,2]]},"3253":{"position":[[21,2]]},"3480":{"position":[[9,2]]},"3629":{"position":[[8,2]]},"3731":{"position":[[9,2]]}}}],["服务器",{"_index":546,"t":{"1078":{"position":[[14,3]]},"1089":{"position":[[14,3]]},"1450":{"position":[[7,3]]},"2056":{"position":[[7,3]]}}}],["服务端",{"_index":1077,"t":{"3171":{"position":[[5,3]]}}}],["未",{"_index":838,"t":{"2058":{"position":[[13,1]]},"3909":{"position":[[7,1]]}}}],["本",{"_index":691,"t":{"1544":{"position":[[8,1]]}}}],["本地",{"_index":34,"t":{"39":{"position":[[2,2]]},"1077":{"position":[[12,2]]},"1088":{"position":[[12,2]]},"1548":{"position":[[7,2]]},"2248":{"position":[[10,2]]},"2645":{"position":[[8,2]]},"2650":{"position":[[10,2]]}}}],["本地化",{"_index":945,"t":{"2516":{"position":[[9,3]]}}}],["机",{"_index":692,"t":{"1544":{"position":[[9,1]]}}}],["机制",{"_index":964,"t":{"2628":{"position":[[10,2]]}}}],["权",{"_index":87,"t":{"118":{"position":[[9,1]]},"120":{"position":[[11,1]]}}}],["条件",{"_index":161,"t":{"240":{"position":[[9,2]]},"955":{"position":[[9,2]]},"959":{"position":[[9,2]]}}}],["构建",{"_index":582,"t":{"1215":{"position":[[21,2]]},"1375":{"position":[[11,2]]},"1376":{"position":[[12,2]]},"1378":{"position":[[12,2]]},"1496":{"position":[[9,2]]},"3461":{"position":[[20,2]]},"3598":{"position":[[19,2]]},"3775":{"position":[[23,2]]},"3778":{"position":[[15,2]]},"3780":{"position":[[15,2]]},"3782":{"position":[[14,2]]},"3796":{"position":[[22,2]]},"3801":{"position":[[16,2]]},"3803":{"position":[[16,2]]},"3809":{"position":[[16,2]]},"3813":{"position":[[23,2]]},"3816":{"position":[[15,2]]},"3818":{"position":[[15,2]]}}}],["构造函数",{"_index":149,"t":{"217":{"position":[[6,4]]},"1021":{"position":[[8,4]]},"1226":{"position":[[9,4]]},"2586":{"position":[[8,4]]}}}],["构造方法",{"_index":611,"t":{"1391":{"position":[[7,4]]}}}],["架构",{"_index":1067,"t":{"3130":{"position":[[8,2]]}}}],["查找",{"_index":284,"t":{"440":{"position":[[10,2]]},"442":{"position":[[8,2]]},"1730":{"position":[[19,2]]},"2720":{"position":[[10,2]]},"3835":{"position":[[10,2]]},"3837":{"position":[[10,2]]}}}],["查看",{"_index":134,"t":{"189":{"position":[[9,2]]},"628":{"position":[[18,2]]},"964":{"position":[[9,2]]},"1096":{"position":[[7,2]]},"2757":{"position":[[9,2]]}}}],["查询",{"_index":345,"t":{"555":{"position":[[9,2]]},"557":{"position":[[9,2]]},"768":{"position":[[8,2]]},"840":{"position":[[7,2]]},"852":{"position":[[10,2]]},"854":{"position":[[10,2]]},"856":{"position":[[10,2]]},"858":{"position":[[9,2]]},"865":{"position":[[9,2]]},"869":{"position":[[7,2]]},"876":{"position":[[9,2]]},"878":{"position":[[15,2]]},"884":{"position":[[10,2]]},"888":{"position":[[10,2]]},"953":{"position":[[11,2]]},"955":{"position":[[11,2]]},"957":{"position":[[7,2]]},"959":{"position":[[11,2]]},"961":{"position":[[9,2]]},"963":{"position":[[9,2]]},"966":{"position":[[9,2]]},"968":{"position":[[9,2]]},"970":{"position":[[9,2]]},"972":{"position":[[11,2]]},"974":{"position":[[13,2]]},"976":{"position":[[11,2]]},"978":{"position":[[11,2]]},"1011":{"position":[[17,2]]},"1013":{"position":[[18,2]]},"3117":{"position":[[14,2]]},"3217":{"position":[[11,2]]},"3219":{"position":[[11,2]]},"3260":{"position":[[11,2]]},"3262":{"position":[[11,2]]},"3264":{"position":[[11,2]]},"3272":{"position":[[11,2]]}}}],["标签",{"_index":1171,"t":{"3643":{"position":[[10,2]]}}}],["标记",{"_index":458,"t":{"792":{"position":[[24,2]]}}}],["标识",{"_index":1084,"t":{"3188":{"position":[[12,2]]}}}],["标识符",{"_index":308,"t":{"479":{"position":[[15,3]]},"2423":{"position":[[13,3]]}}}],["标量",{"_index":460,"t":{"802":{"position":[[11,2]]},"809":{"position":[[9,2]]},"811":{"position":[[9,2]]},"817":{"position":[[18,2]]},"819":{"position":[[11,2]]},"1187":{"position":[[9,2]]}}}],["标题",{"_index":1173,"t":{"3647":{"position":[[11,2]]}}}],["校验",{"_index":354,"t":{"578":{"position":[[8,2]]},"580":{"position":[[6,2]]},"582":{"position":[[6,2]]},"632":{"position":[[28,2]]}}}],["根据",{"_index":451,"t":{"782":{"position":[[6,2]]},"784":{"position":[[6,2]]},"786":{"position":[[11,2]]},"788":{"position":[[11,2]]},"953":{"position":[[7,2]]},"955":{"position":[[7,2]]},"959":{"position":[[7,2]]},"1630":{"position":[[12,2]]},"2122":{"position":[[5,2]]},"2135":{"position":[[5,2]]},"2930":{"position":[[7,2]]},"2946":{"position":[[7,2]]},"2960":{"position":[[7,2]]}}}],["根目录",{"_index":831,"t":{"2044":{"position":[[11,3]]},"2046":{"position":[[9,3]]}}}],["格式",{"_index":303,"t":{"471":{"position":[[11,2]]},"3451":{"position":[[12,2]]},"3784":{"position":[[11,2]]},"3811":{"position":[[11,2]]},"3820":{"position":[[11,2]]}}}],["格式化",{"_index":313,"t":{"483":{"position":[[24,3]]},"2086":{"position":[[12,3]]},"2360":{"position":[[9,3]]}}}],["框架",{"_index":61,"t":{"90":{"position":[[3,2]]},"92":{"position":[[3,2]]},"94":{"position":[[3,2]]},"97":{"position":[[3,2]]},"328":{"position":[[6,2]]},"2058":{"position":[[7,2]]},"2498":{"position":[[6,2]]}}}],["案例",{"_index":138,"t":{"198":{"position":[[8,2]]}}}],["桌面",{"_index":1030,"t":{"2898":{"position":[[21,2]]}}}],["检查",{"_index":1166,"t":{"3588":{"position":[[21,2]]},"3592":{"position":[[16,2]]},"3847":{"position":[[10,2]]}}}],["检测",{"_index":994,"t":{"2785":{"position":[[14,2]]},"2789":{"position":[[11,2]]}}}],["模",{"_index":1059,"t":{"3107":{"position":[[15,1]]}}}],["模块",{"_index":960,"t":{"2618":{"position":[[5,2]]},"2624":{"position":[[11,2]]}}}],["模块化",{"_index":758,"t":{"1734":{"position":[[5,3]]},"2614":{"position":[[7,3]]},"2616":{"position":[[7,3]]},"2620":{"position":[[9,3]]},"2622":{"position":[[9,3]]},"2626":{"position":[[5,3]]}}}],["模型",{"_index":363,"t":{"601":{"position":[[8,2]]},"618":{"position":[[4,2]]},"712":{"position":[[11,2]]},"716":{"position":[[9,2]]},"829":{"position":[[15,2]]},"1126":{"position":[[13,2]]},"1363":{"position":[[11,2]]},"1588":{"position":[[10,2]]},"2930":{"position":[[9,2]]},"2946":{"position":[[9,2]]},"2960":{"position":[[9,2]]},"3707":{"position":[[9,2]]}}}],["模式",{"_index":241,"t":{"370":{"position":[[20,2]]},"686":{"position":[[11,2]]},"1299":{"position":[[11,2]]},"2306":{"position":[[11,2]]},"2537":{"position":[[22,2]]},"2744":{"position":[[19,2]]},"2746":{"position":[[17,2]]},"2761":{"position":[[11,2]]},"2904":{"position":[[13,2]]},"3227":{"position":[[11,2]]},"3344":{"position":[[30,2]]},"3425":{"position":[[9,2]]}}}],["模拟",{"_index":932,"t":{"2403":{"position":[[7,2]]}}}],["模板",{"_index":591,"t":{"1268":{"position":[[11,2]]},"1285":{"position":[[11,2]]},"1287":{"position":[[11,2]]},"1298":{"position":[[11,2]]},"2260":{"position":[[12,2]]},"3463":{"position":[[9,2]]},"3491":{"position":[[11,2]]},"3525":{"position":[[10,2]]},"3536":{"position":[[11,2]]},"3564":{"position":[[10,2]]},"3669":{"position":[[26,2]]},"3735":{"position":[[10,2]]},"3737":{"position":[[10,2]]},"3739":{"position":[[10,2]]},"3747":{"position":[[9,2]]},"3753":{"position":[[8,2]]}}}],["模糊",{"_index":523,"t":{"978":{"position":[[9,2]]}}}],["正",{"_index":483,"t":{"870":{"position":[[9,1]]}}}],["正则表达式",{"_index":825,"t":{"2001":{"position":[[4,5]]}}}],["段",{"_index":311,"t":{"481":{"position":[[14,1]]},"918":{"position":[[24,1]]},"2364":{"position":[[12,1]]}}}],["每隔",{"_index":934,"t":{"2408":{"position":[[7,2]]}}}],["水平",{"_index":1055,"t":{"3097":{"position":[[7,2]]},"3099":{"position":[[9,2]]},"3101":{"position":[[9,2]]}}}],["求",{"_index":520,"t":{"974":{"position":[[9,1]]}}}],["求和",{"_index":519,"t":{"972":{"position":[[9,2]]}}}],["池",{"_index":637,"t":{"1462":{"position":[[15,1]]}}}],["没",{"_index":1023,"t":{"2894":{"position":[[9,1]]}}}],["没有",{"_index":433,"t":{"731":{"position":[[11,2]]}}}],["泛",{"_index":495,"t":{"906":{"position":[[10,1]]},"989":{"position":[[9,1]]},"991":{"position":[[8,1]]},"993":{"position":[[8,1]]},"1409":{"position":[[9,1]]},"2102":{"position":[[7,1]]},"2104":{"position":[[6,1]]},"2106":{"position":[[10,1]]},"3169":{"position":[[19,1]]},"3419":{"position":[[18,1]]}}}],["注入",{"_index":21,"t":{"27":{"position":[[2,2]]},"217":{"position":[[10,2]]},"1021":{"position":[[12,2]]},"1023":{"position":[[12,2]]},"1228":{"position":[[13,2]]},"1384":{"position":[[7,2]]},"1390":{"position":[[7,2]]},"1391":{"position":[[11,2]]},"1393":{"position":[[11,2]]},"1395":{"position":[[11,2]]},"1427":{"position":[[12,2]]},"1710":{"position":[[9,2]]},"1962":{"position":[[11,2]]},"2181":{"position":[[11,2]]},"2185":{"position":[[11,2]]},"2236":{"position":[[8,2]]},"2550":{"position":[[7,2]]},"2584":{"position":[[8,2]]},"2691":{"position":[[9,2]]},"2830":{"position":[[7,2]]},"3161":{"position":[[19,2]]},"3167":{"position":[[23,2]]},"3376":{"position":[[13,2]]},"3384":{"position":[[13,2]]},"3390":{"position":[[27,2]]},"3392":{"position":[[32,2]]},"3790":{"position":[[11,2]]}}}],["注册",{"_index":225,"t":{"349":{"position":[[8,2]]},"513":{"position":[[9,2]]},"523":{"position":[[12,2]]},"525":{"position":[[11,2]]},"543":{"position":[[9,2]]},"594":{"position":[[6,2]]},"636":{"position":[[21,2]]},"760":{"position":[[8,2]]},"898":{"position":[[13,2]]},"934":{"position":[[7,2]]},"1057":{"position":[[9,2]]},"1316":{"position":[[8,2]]},"1397":{"position":[[5,2]]},"1409":{"position":[[7,2]]},"1417":{"position":[[10,2]]},"1419":{"position":[[25,2]]},"1421":{"position":[[6,2]]},"1423":{"position":[[10,2]]},"1439":{"position":[[14,2]]},"1581":{"position":[[6,2]]},"1700":{"position":[[7,2]]},"1720":{"position":[[5,2]]},"1842":{"position":[[6,2]]},"1904":{"position":[[9,2]]},"1906":{"position":[[22,2]]},"1908":{"position":[[12,2]]},"2284":{"position":[[20,2]]},"2518":{"position":[[5,2]]},"2602":{"position":[[9,2]]},"2710":{"position":[[8,2]]},"2785":{"position":[[7,2]]},"2797":{"position":[[7,2]]},"2820":{"position":[[7,2]]},"2876":{"position":[[12,2]]},"2926":{"position":[[7,2]]},"2942":{"position":[[7,2]]},"2956":{"position":[[7,2]]},"3143":{"position":[[5,2]]},"3157":{"position":[[11,2]]},"3253":{"position":[[9,2]]},"3480":{"position":[[7,2]]},"3629":{"position":[[6,2]]},"3721":{"position":[[6,2]]},"3731":{"position":[[7,2]]}}}],["注意",{"_index":850,"t":{"2095":{"position":[[7,2]]},"2984":{"position":[[6,2]]}}}],["注意事项",{"_index":276,"t":{"416":{"position":[[14,4]]},"418":{"position":[[17,4]]},"1049":{"position":[[9,4]]},"2626":{"position":[[10,4]]},"2634":{"position":[[8,4]]},"2661":{"position":[[8,4]]},"2994":{"position":[[15,4]]},"3276":{"position":[[13,4]]}}}],["注释",{"_index":913,"t":{"2368":{"position":[[9,2]]},"3635":{"position":[[8,2]]},"3687":{"position":[[20,2]]}}}],["派生类",{"_index":18,"t":{"25":{"position":[[17,3]]},"2234":{"position":[[25,3]]}}}],["流程",{"_index":977,"t":{"2720":{"position":[[13,2]]}}}],["测试",{"_index":130,"t":{"178":{"position":[[9,2]]},"180":{"position":[[9,2]]},"385":{"position":[[16,2]]},"1542":{"position":[[7,2]]},"1544":{"position":[[11,2]]},"2645":{"position":[[10,2]]},"2648":{"position":[[8,2]]},"3361":{"position":[[11,2]]},"3363":{"position":[[15,2]]},"3364":{"position":[[14,2]]},"3380":{"position":[[10,2]]},"3386":{"position":[[9,2]]},"3394":{"position":[[13,2]]},"3396":{"position":[[18,2]]},"3398":{"position":[[15,2]]},"3400":{"position":[[21,2]]},"3651":{"position":[[9,2]]}}}],["测试方法",{"_index":1124,"t":{"3359":{"position":[[12,4]]},"3363":{"position":[[11,4]]},"3374":{"position":[[11,4]]}}}],["测试版",{"_index":968,"t":{"2654":{"position":[[10,3]]}}}],["浏览器",{"_index":823,"t":{"1980":{"position":[[6,3]]},"1992":{"position":[[6,3]]},"2015":{"position":[[6,3]]},"2548":{"position":[[10,3]]},"2869":{"position":[[8,3]]}}}],["消息",{"_index":372,"t":{"616":{"position":[[28,2]]},"1554":{"position":[[7,2]]},"1698":{"position":[[19,2]]},"1704":{"position":[[9,2]]},"1706":{"position":[[11,2]]},"1822":{"position":[[10,2]]},"1876":{"position":[[7,2]]},"2157":{"position":[[8,2]]},"2159":{"position":[[6,2]]},"2535":{"position":[[10,2]]},"3012":{"position":[[6,2]]},"3198":{"position":[[10,2]]}}}],["混合",{"_index":94,"t":{"128":{"position":[[7,2]]},"874":{"position":[[9,2]]},"1525":{"position":[[7,2]]}}}],["添加",{"_index":90,"t":{"124":{"position":[[7,2]]},"126":{"position":[[7,2]]},"410":{"position":[[7,2]]},"454":{"position":[[8,2]]},"792":{"position":[[8,2]]},"1077":{"position":[[9,2]]},"1088":{"position":[[9,2]]},"1460":{"position":[[9,2]]},"1806":{"position":[[5,2]]},"1808":{"position":[[5,2]]},"1974":{"position":[[4,2]]},"1976":{"position":[[17,2]]},"1978":{"position":[[20,2]]},"1988":{"position":[[4,2]]},"1990":{"position":[[17,2]]},"2011":{"position":[[4,2]]},"2013":{"position":[[17,2]]},"2624":{"position":[[9,2]]},"2865":{"position":[[6,2]]},"2886":{"position":[[8,2]]},"2888":{"position":[[8,2]]},"2892":{"position":[[8,2]]},"2900":{"position":[[9,2]]},"2928":{"position":[[7,2]]},"2944":{"position":[[7,2]]},"2958":{"position":[[7,2]]},"3231":{"position":[[9,2]]},"3328":{"position":[[13,2]]},"3338":{"position":[[18,2]]},"3370":{"position":[[9,2]]},"3711":{"position":[[11,2]]},"3745":{"position":[[7,2]]},"3841":{"position":[[10,2]]},"3885":{"position":[[11,2]]}}}],["添加程序",{"_index":1205,"t":{"3743":{"position":[[7,4]]}}}],["源",{"_index":782,"t":{"1796":{"position":[[10,1]]},"1798":{"position":[[10,1]]}}}],["点击",{"_index":630,"t":{"1449":{"position":[[9,2]]}}}],["热",{"_index":293,"t":{"452":{"position":[[13,1]]},"2728":{"position":[[13,1]]}}}],["热插拔",{"_index":963,"t":{"2628":{"position":[[7,3]]}}}],["版",{"_index":658,"t":{"1480":{"position":[[17,1]]}}}],["版本",{"_index":417,"t":{"712":{"position":[[13,2]]},"3911":{"position":[[9,2]]}}}],["版本控制",{"_index":704,"t":{"1620":{"position":[[11,4]]},"3617":{"position":[[6,4]]}}}],["物理",{"_index":847,"t":{"2089":{"position":[[7,2]]}}}],["特别",{"_index":849,"t":{"2095":{"position":[[5,2]]},"2984":{"position":[[4,2]]},"3713":{"position":[[9,2]]}}}],["特定",{"_index":281,"t":{"438":{"position":[[16,2]]},"448":{"position":[[10,2]]},"668":{"position":[[13,2]]},"670":{"position":[[13,2]]},"746":{"position":[[11,2]]},"1332":{"position":[[8,2]]},"1334":{"position":[[8,2]]},"1344":{"position":[[14,2]]},"1346":{"position":[[14,2]]},"1748":{"position":[[8,2]]},"1750":{"position":[[8,2]]},"2128":{"position":[[7,2]]},"2374":{"position":[[10,2]]},"2397":{"position":[[7,2]]},"2570":{"position":[[8,2]]},"3178":{"position":[[9,2]]},"3588":{"position":[[9,2]]},"3657":{"position":[[9,2]]},"3717":{"position":[[6,2],[12,2]]},"3877":{"position":[[14,2]]},"3879":{"position":[[15,2]]},"3889":{"position":[[19,2]]}}}],["特性",{"_index":28,"t":{"33":{"position":[[7,2]]},"136":{"position":[[7,2]]},"586":{"position":[[10,2]]},"596":{"position":[[13,2]]},"607":{"position":[[23,2]]},"609":{"position":[[20,2]]},"1415":{"position":[[17,2]]},"1586":{"position":[[11,2]]},"1902":{"position":[[8,2]]},"1908":{"position":[[8,2]]},"1914":{"position":[[8,2]]},"1920":{"position":[[8,2]]},"1928":{"position":[[8,2]]},"1936":{"position":[[8,2]]},"1944":{"position":[[9,2]]},"2242":{"position":[[15,2]]},"2443":{"position":[[19,2]]},"2533":{"position":[[10,2]]},"3292":{"position":[[11,2]]},"3293":{"position":[[22,2]]},"3295":{"position":[[24,2]]},"3388":{"position":[[27,2]]},"3445":{"position":[[7,2]]},"3773":{"position":[[14,2]]},"3807":{"position":[[14,2]]}}}],["特点",{"_index":64,"t":{"94":{"position":[[5,2]]}}}],["特色",{"_index":1096,"t":{"3216":{"position":[[7,2]]}}}],["特质",{"_index":131,"t":{"180":{"position":[[11,2]]},"181":{"position":[[9,2]]}}}],["状态",{"_index":642,"t":{"1467":{"position":[[13,2]]},"2194":{"position":[[4,2]]},"2196":{"position":[[4,2]]},"2753":{"position":[[15,2]]},"2842":{"position":[[10,2]]},"3243":{"position":[[0,2]]},"3594":{"position":[[24,2]]},"3683":{"position":[[21,2]]},"3799":{"position":[[14,2]]}}}],["独立",{"_index":955,"t":{"2578":{"position":[[8,2]]},"2744":{"position":[[15,2]]},"2746":{"position":[[13,2]]},"2808":{"position":[[5,2]]},"2835":{"position":[[7,2]]},"2914":{"position":[[7,2]]},"2916":{"position":[[13,2]]},"3398":{"position":[[9,2]]}}}],["猜",{"_index":1092,"t":{"3202":{"position":[[15,1]]}}}],["环境",{"_index":67,"t":{"99":{"position":[[3,2]]},"385":{"position":[[11,2]]},"450":{"position":[[8,2]]},"1450":{"position":[[10,2]]},"1478":{"position":[[18,2]]},"2024":{"position":[[6,2]]},"2054":{"position":[[9,2]]},"2062":{"position":[[13,2]]},"3400":{"position":[[14,2]]},"3661":{"position":[[9,2]]}}}],["环境变量",{"_index":835,"t":{"2052":{"position":[[7,4]]}}}],["现有",{"_index":246,"t":{"381":{"position":[[7,2]]},"3396":{"position":[[10,2]]}}}],["生产",{"_index":1175,"t":{"3661":{"position":[[7,2]]}}}],["生命周期",{"_index":1005,"t":{"2816":{"position":[[7,4]]}}}],["生存期",{"_index":612,"t":{"1397":{"position":[[9,3]]},"1398":{"position":[[13,3]]},"1400":{"position":[[11,3]]},"1402":{"position":[[10,3]]},"3578":{"position":[[12,3]]}}}],["生成",{"_index":199,"t":{"303":{"position":[[6,2]]},"305":{"position":[[8,2]]},"322":{"position":[[8,2]]},"324":{"position":[[17,2]]},"326":{"position":[[9,2]]},"485":{"position":[[9,2]]},"691":{"position":[[15,2]]},"695":{"position":[[9,2]]},"727":{"position":[[14,2]]},"729":{"position":[[12,2]]},"731":{"position":[[13,2]]},"1630":{"position":[[17,2]]},"2131":{"position":[[5,2]]},"2133":{"position":[[5,2]]},"2260":{"position":[[5,2]]},"2421":{"position":[[9,2]]}}}],["用户",{"_index":1082,"t":{"3178":{"position":[[11,2]]},"3180":{"position":[[11,2]]},"3188":{"position":[[8,2]]}}}],["用法",{"_index":531,"t":{"1027":{"position":[[10,2]]},"2355":{"position":[[7,2]]},"3741":{"position":[[7,2]]}}}],["画",{"_index":1091,"t":{"3202":{"position":[[12,1]]}}}],["界面",{"_index":408,"t":{"686":{"position":[[7,2]]},"687":{"position":[[11,2]]}}}],["登录",{"_index":104,"t":{"143":{"position":[[9,2]]},"2032":{"position":[[6,2]]},"3685":{"position":[[8,2]]}}}],["监听",{"_index":441,"t":{"744":{"position":[[13,2]]},"746":{"position":[[9,2]]},"750":{"position":[[35,2]]},"1732":{"position":[[7,2]]},"2753":{"position":[[11,2]]},"3443":{"position":[[22,2]]}}}],["监听器",{"_index":438,"t":{"738":{"position":[[11,3]]},"2485":{"position":[[10,3]]}}}],["监视",{"_index":552,"t":{"1095":{"position":[[11,2]]},"3653":{"position":[[9,2]]}}}],["监视器",{"_index":787,"t":{"1806":{"position":[[11,3]]},"3827":{"position":[[9,3]]}}}],["目录",{"_index":412,"t":{"693":{"position":[[13,2]]},"723":{"position":[[12,2]]},"2046":{"position":[[21,2]]},"2050":{"position":[[16,2]]}}}],["直接",{"_index":746,"t":{"1706":{"position":[[7,2]]}}}],["相同",{"_index":820,"t":{"1960":{"position":[[9,2]]}}}],["瞬时",{"_index":614,"t":{"1398":{"position":[[10,2]]}}}],["知识",{"_index":898,"t":{"2316":{"position":[[18,2]]}}}],["短",{"_index":680,"t":{"1521":{"position":[[7,1]]},"2332":{"position":[[7,1]]}}}],["短路",{"_index":818,"t":{"1954":{"position":[[13,2]]}}}],["码",{"_index":643,"t":{"1467":{"position":[[15,1]]},"2194":{"position":[[6,1]]},"2196":{"position":[[6,1]]},"2558":{"position":[[8,1]]}}}],["示例",{"_index":267,"t":{"405":{"position":[[10,2]]},"519":{"position":[[20,2]]},"900":{"position":[[19,2]]},"1314":{"position":[[20,2]]},"1826":{"position":[[20,2]]},"1840":{"position":[[12,2]]},"1872":{"position":[[9,2]]},"2982":{"position":[[6,2]]},"2992":{"position":[[6,2]]},"3002":{"position":[[6,2]]},"3010":{"position":[[6,2]]},"3016":{"position":[[8,2]]},"3024":{"position":[[6,2]]},"3032":{"position":[[6,2]]},"3040":{"position":[[6,2]]},"3048":{"position":[[7,2]]},"3056":{"position":[[6,2]]},"3064":{"position":[[6,2]]},"3130":{"position":[[6,2]]},"3257":{"position":[[12,2]]},"3259":{"position":[[24,2]]},"3484":{"position":[[12,2]]}}}],["示范",{"_index":775,"t":{"1766":{"position":[[16,2]]},"1768":{"position":[[19,2]]},"1770":{"position":[[15,2]]},"1772":{"position":[[21,2]]}}}],["禁用",{"_index":278,"t":{"420":{"position":[[5,2]]}}}],["离线",{"_index":217,"t":{"330":{"position":[[19,2]]}}}],["种子",{"_index":564,"t":{"1140":{"position":[[10,2]]},"1150":{"position":[[12,2]]},"2928":{"position":[[17,2]]},"2944":{"position":[[17,2]]},"2958":{"position":[[17,2]]}}}],["秒",{"_index":306,"t":{"477":{"position":[[11,1]]}}}],["秒数",{"_index":305,"t":{"475":{"position":[[11,2]]}}}],["租户",{"_index":1036,"t":{"2911":{"position":[[9,2]]},"2913":{"position":[[8,2]]},"2920":{"position":[[6,2]]},"2924":{"position":[[9,2]]},"2926":{"position":[[10,2]]},"2940":{"position":[[9,2]]},"2942":{"position":[[10,2]]},"2954":{"position":[[9,2]]},"2956":{"position":[[10,2]]},"2968":{"position":[[13,2]]},"2970":{"position":[[10,2]]},"2972":{"position":[[7,2]]}}}],["程序",{"_index":826,"t":{"2026":{"position":[[10,2]]},"2048":{"position":[[13,2]]},"2795":{"position":[[39,2]]},"3505":{"position":[[21,2]]},"3546":{"position":[[20,2]]}}}],["程序包",{"_index":400,"t":{"680":{"position":[[12,3]]},"709":{"position":[[12,3]]}}}],["空值",{"_index":392,"t":{"652":{"position":[[8,2]]},"1352":{"position":[[9,2]]}}}],["空间",{"_index":1206,"t":{"3745":{"position":[[11,2]]}}}],["立即",{"_index":390,"t":{"648":{"position":[[12,2]]},"650":{"position":[[11,2]]},"660":{"position":[[13,2]]},"662":{"position":[[12,2]]},"664":{"position":[[16,2]]},"666":{"position":[[15,2]]},"668":{"position":[[18,2]]},"670":{"position":[[17,2]]},"778":{"position":[[14,2]]},"780":{"position":[[13,2]]},"782":{"position":[[16,2]]},"784":{"position":[[15,2]]},"786":{"position":[[19,2]]},"788":{"position":[[18,2]]},"1324":{"position":[[13,2]]},"1326":{"position":[[12,2]]},"1328":{"position":[[13,2]]},"1330":{"position":[[12,2]]},"1332":{"position":[[15,2]]},"1334":{"position":[[14,2]]},"1336":{"position":[[18,2]]},"1338":{"position":[[17,2]]},"1340":{"position":[[18,2]]},"1342":{"position":[[18,2]]},"1344":{"position":[[23,2]]},"1346":{"position":[[22,2]]},"1348":{"position":[[15,2]]},"1350":{"position":[[14,2]]}}}],["端",{"_index":103,"t":{"143":{"position":[[8,1]]},"145":{"position":[[8,1]]}}}],["端口",{"_index":1019,"t":{"2874":{"position":[[12,2]]},"3074":{"position":[[12,2]]}}}],["符",{"_index":283,"t":{"440":{"position":[[8,1]]},"2427":{"position":[[18,1]]}}}],["第一个",{"_index":50,"t":{"52":{"position":[[0,3]]},"63":{"position":[[0,3]]},"76":{"position":[[0,3]]},"1407":{"position":[[7,3]]},"1531":{"position":[[7,3]]},"1583":{"position":[[6,3]]},"2871":{"position":[[8,3]]},"3357":{"position":[[7,3]]},"3359":{"position":[[9,3]]}}}],["第一步",{"_index":631,"t":{"1451":{"position":[[9,3]]}}}],["第三方",{"_index":383,"t":{"632":{"position":[[25,3]]},"1826":{"position":[[8,3]]},"3703":{"position":[[7,3]]}}}],["第三步",{"_index":633,"t":{"1455":{"position":[[9,3]]}}}],["第二个",{"_index":1202,"t":{"3719":{"position":[[22,3]]}}}],["第二步",{"_index":632,"t":{"1453":{"position":[[9,3]]}}}],["第四步",{"_index":634,"t":{"1457":{"position":[[9,3]]}}}],["等",{"_index":923,"t":{"2384":{"position":[[31,1]]}}}],["等不及",{"_index":54,"t":{"58":{"position":[[0,3]]}}}],["策略",{"_index":1156,"t":{"3527":{"position":[[10,2]]},"3566":{"position":[[10,2]]}}}],["筛选",{"_index":469,"t":{"840":{"position":[[9,2]]},"842":{"position":[[9,2]]},"843":{"position":[[11,2]]},"845":{"position":[[11,2]]},"934":{"position":[[12,2]]},"1439":{"position":[[12,2]]},"1891":{"position":[[8,2]]},"1895":{"position":[[8,2]]},"1899":{"position":[[6,2]]},"1904":{"position":[[6,2]]},"1910":{"position":[[8,2]]},"1916":{"position":[[8,2]]},"1922":{"position":[[8,2]]},"1930":{"position":[[8,2]]},"1938":{"position":[[9,2]]},"1948":{"position":[[18,2]]},"1954":{"position":[[7,2]]},"1956":{"position":[[7,2]]},"1958":{"position":[[13,2]]},"1960":{"position":[[13,2]]},"1962":{"position":[[6,2]]}}}],["签名",{"_index":117,"t":{"161":{"position":[[2,2]]}}}],["简介",{"_index":0,"t":{"6":{"position":[[0,2]]}}}],["简单",{"_index":315,"t":{"487":{"position":[[9,2]]}}}],["算法",{"_index":905,"t":{"2334":{"position":[[9,2]]},"3111":{"position":[[18,2]]}}}],["管理",{"_index":401,"t":{"680":{"position":[[15,2]]},"709":{"position":[[15,2]]},"1517":{"position":[[21,2]]},"2842":{"position":[[12,2]]},"3190":{"position":[[8,2]]},"3286":{"position":[[24,2]]},"3290":{"position":[[11,2]]}}}],["管理工具",{"_index":677,"t":{"1515":{"position":[[8,4]]}}}],["类",{"_index":140,"t":{"201":{"position":[[14,1]]},"821":{"position":[[13,1]]},"1146":{"position":[[14,1]]},"1245":{"position":[[13,1]]},"1264":{"position":[[13,1]]},"1437":{"position":[[17,1]]},"1552":{"position":[[11,1]]},"1554":{"position":[[9,1]]},"1556":{"position":[[9,1]]},"1558":{"position":[[9,1]]},"1560":{"position":[[9,1]]},"1608":{"position":[[17,1]]},"1725":{"position":[[12,1]]},"1780":{"position":[[13,1]]},"1816":{"position":[[22,1]]},"1858":{"position":[[10,1]]},"2445":{"position":[[17,1]]},"2475":{"position":[[20,1]]},"2525":{"position":[[9,1]]},"2529":{"position":[[8,1]]},"2578":{"position":[[10,1]]},"2708":{"position":[[29,1]]},"2970":{"position":[[12,1]]},"3370":{"position":[[15,1]]},"3378":{"position":[[32,1]]},"3380":{"position":[[12,1]]},"3423":{"position":[[13,1]]},"3580":{"position":[[18,1]]},"3582":{"position":[[18,1]]},"3749":{"position":[[9,1]]}}}],["类型",{"_index":155,"t":{"226":{"position":[[7,2]]},"293":{"position":[[13,2]]},"438":{"position":[[18,2]]},"614":{"position":[[26,2]]},"806":{"position":[[12,2]]},"925":{"position":[[11,2]]},"1030":{"position":[[14,2]]},"1245":{"position":[[14,2]]},"1264":{"position":[[14,2]]},"1608":{"position":[[18,2]]},"1718":{"position":[[11,2]]},"1784":{"position":[[12,2]]},"1854":{"position":[[12,2]]},"1864":{"position":[[10,2]]},"1899":{"position":[[9,2]]},"1902":{"position":[[21,2]]},"1958":{"position":[[11,2]]},"1960":{"position":[[11,2]]},"2003":{"position":[[6,2]]},"2028":{"position":[[12,2]]},"2099":{"position":[[20,2]]},"2122":{"position":[[10,2]]},"2192":{"position":[[6,2]]},"2378":{"position":[[13,2]]},"2380":{"position":[[28,2]]},"2708":{"position":[[27,2]]},"2966":{"position":[[16,2]]},"2968":{"position":[[15,2]]},"3167":{"position":[[8,2]]},"3353":{"position":[[11,2]]},"3455":{"position":[[25,2]]},"3521":{"position":[[25,2]]},"3562":{"position":[[25,2]]},"3655":{"position":[[13,2]]},"3735":{"position":[[8,2]]},"3737":{"position":[[8,2]]}}}],["粘土",{"_index":168,"t":{"260":{"position":[[7,2]]},"285":{"position":[[9,2]]}}}],["系统",{"_index":836,"t":{"2054":{"position":[[7,2]]},"2152":{"position":[[6,2]]}}}],["系统集成",{"_index":1132,"t":{"3400":{"position":[[9,4]]}}}],["约定",{"_index":144,"t":{"209":{"position":[[19,2]]},"354":{"position":[[8,2]]},"389":{"position":[[7,2]]},"391":{"position":[[9,2]]},"1573":{"position":[[14,2]]},"1575":{"position":[[15,2]]},"1590":{"position":[[18,2]]},"1591":{"position":[[13,2]]},"1593":{"position":[[14,2]]},"1595":{"position":[[14,2]]},"1597":{"position":[[14,2]]},"1599":{"position":[[10,2]]}}}],["约束",{"_index":716,"t":{"1634":{"position":[[23,2]]}}}],["级别",{"_index":1136,"t":{"3415":{"position":[[7,2]]}}}],["线程",{"_index":895,"t":{"2308":{"position":[[11,2]]}}}],["组",{"_index":1170,"t":{"3643":{"position":[[6,1],[8,1]]}}}],["组件",{"_index":226,"t":{"349":{"position":[[10,2]]},"351":{"position":[[6,2]]},"3927":{"position":[[15,2]]},"3933":{"position":[[15,2]]}}}],["组合",{"_index":703,"t":{"1618":{"position":[[13,2]]},"1914":{"position":[[15,2]]},"1920":{"position":[[15,2]]},"1928":{"position":[[15,2]]},"1936":{"position":[[15,2]]},"1944":{"position":[[16,2]]},"2880":{"position":[[30,2]]}}}],["绑定",{"_index":712,"t":{"1628":{"position":[[11,2]]}}}],["结果",{"_index":135,"t":{"189":{"position":[[11,2]]},"557":{"position":[[13,2]]},"867":{"position":[[9,2]]},"1096":{"position":[[13,2]]},"1880":{"position":[[8,2]]},"1938":{"position":[[7,2]]},"2566":{"position":[[17,2]]},"3707":{"position":[[15,2]]},"3711":{"position":[[9,2]]},"3713":{"position":[[16,2]]}}}],["统一",{"_index":846,"t":{"2086":{"position":[[10,2]]},"3574":{"position":[[18,2]]},"3707":{"position":[[4,2]]}}}],["继承",{"_index":772,"t":{"1764":{"position":[[10,2]]},"3687":{"position":[[22,2]]}}}],["缓",{"_index":930,"t":{"2396":{"position":[[5,1]]}}}],["缓存",{"_index":154,"t":{"224":{"position":[[8,2]]},"226":{"position":[[5,2]]},"228":{"position":[[7,2]]},"232":{"position":[[9,2]]},"234":{"position":[[11,2]]},"236":{"position":[[7,2]]},"238":{"position":[[8,2]]},"244":{"position":[[12,2]]},"246":{"position":[[22,2]]},"248":{"position":[[17,2]]},"250":{"position":[[18,2]]},"252":{"position":[[8,2]]},"254":{"position":[[8,2]]},"2972":{"position":[[9,2]]},"3739":{"position":[[12,2]]}}}],["编写",{"_index":664,"t":{"1487":{"position":[[9,2]]},"1531":{"position":[[5,2]]},"1538":{"position":[[7,2]]},"2496":{"position":[[21,2]]},"2871":{"position":[[6,2]]},"3378":{"position":[[9,2]]}}}],["编码",{"_index":254,"t":{"389":{"position":[[5,2]]},"3503":{"position":[[12,2]]}}}],["编译",{"_index":605,"t":{"1378":{"position":[[9,2]]},"2642":{"position":[[10,2]]},"2675":{"position":[[10,2]]}}}],["编辑",{"_index":684,"t":{"1534":{"position":[[7,2]]},"2638":{"position":[[8,2]]},"2665":{"position":[[8,2]]},"2671":{"position":[[8,2]]}}}],["缺失",{"_index":649,"t":{"1471":{"position":[[13,2]]}}}],["缺点",{"_index":595,"t":{"1290":{"position":[[9,2]]},"1573":{"position":[[17,2]]},"1577":{"position":[[25,2]]}}}],["网",{"_index":214,"t":{"330":{"position":[[12,1],[15,1]]},"3212":{"position":[[8,1]]}}}],["网名",{"_index":113,"t":{"157":{"position":[[0,2]]}}}],["网站",{"_index":627,"t":{"1445":{"position":[[9,2]]},"1460":{"position":[[12,2]]},"1461":{"position":[[11,2]]},"1464":{"position":[[11,2]]},"2046":{"position":[[7,2]]},"3338":{"position":[[15,2]]}}}],["翻译",{"_index":950,"t":{"2539":{"position":[[9,2]]}}}],["聊天",{"_index":1090,"t":{"3200":{"position":[[10,2]]}}}],["职责",{"_index":229,"t":{"352":{"position":[[8,2]]}}}],["联",{"_index":474,"t":{"858":{"position":[[7,1]]},"3217":{"position":[[9,1]]},"3262":{"position":[[9,1]]}}}],["能力",{"_index":124,"t":{"171":{"position":[[2,2]]}}}],["脚手架",{"_index":63,"t":{"92":{"position":[[5,3]]},"3314":{"position":[[6,3]]},"3320":{"position":[[8,3]]},"3322":{"position":[[8,3]]},"3324":{"position":[[6,3]]},"3330":{"position":[[8,3]]}}}],["脚本",{"_index":666,"t":{"1487":{"position":[[18,2]]},"1494":{"position":[[10,2]]}}}],["脱敏",{"_index":992,"t":{"2781":{"position":[[7,2]]},"2785":{"position":[[10,2]]},"2789":{"position":[[9,2]]},"2791":{"position":[[7,2]]},"2793":{"position":[[8,2]]},"2797":{"position":[[12,2]]}}}],["自动",{"_index":31,"t":{"35":{"position":[[11,2]]},"142":{"position":[[5,2]]},"727":{"position":[[12,2]]},"2137":{"position":[[11,2]]},"2244":{"position":[[19,2]]},"2548":{"position":[[15,2]]},"3233":{"position":[[9,2]]},"3286":{"position":[[22,2]]}}}],["自动化",{"_index":663,"t":{"1486":{"position":[[16,3]]},"1489":{"position":[[16,3]]}}}],["自定义",{"_index":96,"t":{"130":{"position":[[7,3]]},"134":{"position":[[9,3]]},"326":{"position":[[6,3]]},"444":{"position":[[6,3]]},"525":{"position":[[6,3]]},"613":{"position":[[6,3]]},"614":{"position":[[6,3]]},"616":{"position":[[6,3]]},"934":{"position":[[9,3]]},"1040":{"position":[[6,3]]},"1065":{"position":[[13,3]]},"1417":{"position":[[5,3]]},"1439":{"position":[[6,3]]},"1604":{"position":[[10,3]]},"1610":{"position":[[8,3]]},"1612":{"position":[[8,3]]},"1616":{"position":[[10,3]]},"1630":{"position":[[9,3]]},"1774":{"position":[[6,3]]},"1796":{"position":[[5,3]]},"1798":{"position":[[5,3]]},"1800":{"position":[[16,3]]},"1802":{"position":[[13,3]]},"1804":{"position":[[5,3]]},"2356":{"position":[[7,3]]},"2435":{"position":[[5,3]]},"2437":{"position":[[9,3]]},"2439":{"position":[[9,3]]},"2574":{"position":[[6,3]]},"2689":{"position":[[7,3]]},"2718":{"position":[[8,3]]},"2734":{"position":[[7,3]]},"2793":{"position":[[5,3]]},"2795":{"position":[[7,3]]},"2797":{"position":[[9,3]]},"2878":{"position":[[8,3]]},"2888":{"position":[[10,3]]},"2966":{"position":[[5,3]]},"2968":{"position":[[9,3]]},"2970":{"position":[[7,3]]},"3074":{"position":[[7,3]]},"3188":{"position":[[5,3]]},"3580":{"position":[[7,3]]},"3582":{"position":[[7,3]]},"3665":{"position":[[7,3]]},"3669":{"position":[[7,3]]},"3679":{"position":[[7,3]]},"3697":{"position":[[7,3]]},"3699":{"position":[[7,3]]},"3713":{"position":[[6,3]]},"3805":{"position":[[9,3]]}}}],["节点",{"_index":285,"t":{"440":{"position":[[12,2]]},"442":{"position":[[12,2]]},"3117":{"position":[[10,2]]},"3119":{"position":[[10,2]]}}}],["范围",{"_index":373,"t":{"618":{"position":[[8,2]]},"626":{"position":[[25,2]]},"2181":{"position":[[16,2]]},"2185":{"position":[[16,2]]}}}],["获取",{"_index":15,"t":{"24":{"position":[[14,2]]},"33":{"position":[[0,2]]},"39":{"position":[[0,2]]},"41":{"position":[[0,2]]},"149":{"position":[[5,2]]},"271":{"position":[[10,2]]},"368":{"position":[[13,2]]},"1025":{"position":[[25,2]]},"1032":{"position":[[8,2]]},"1722":{"position":[[5,2]]},"1730":{"position":[[7,2]]},"2020":{"position":[[4,2]]},"2022":{"position":[[4,2]]},"2024":{"position":[[4,2]]},"2026":{"position":[[4,2]]},"2028":{"position":[[4,2]]},"2030":{"position":[[4,2]]},"2032":{"position":[[4,2]]},"2034":{"position":[[4,2]]},"2038":{"position":[[5,2]]},"2042":{"position":[[5,2]]},"2044":{"position":[[5,2]]},"2046":{"position":[[5,2]]},"2048":{"position":[[5,2]]},"2050":{"position":[[5,2]]},"2052":{"position":[[5,2]]},"2056":{"position":[[5,2]]},"2058":{"position":[[5,2]]},"2068":{"position":[[5,2]]},"2074":{"position":[[5,2]]},"2082":{"position":[[4,2]]},"2089":{"position":[[5,2]]},"2091":{"position":[[5,2]]},"2093":{"position":[[5,2]]},"2097":{"position":[[5,2]]},"2102":{"position":[[4,2]]},"2104":{"position":[[4,2]]},"2106":{"position":[[4,2]]},"2108":{"position":[[4,2]]},"2110":{"position":[[4,2]]},"2112":{"position":[[4,2]]},"2114":{"position":[[4,2]]},"2116":{"position":[[4,2]]},"2122":{"position":[[12,2]]},"2124":{"position":[[5,2]]},"2126":{"position":[[5,2]]},"2128":{"position":[[5,2]]},"2152":{"position":[[4,2]]},"2154":{"position":[[4,2]]},"2176":{"position":[[5,2]]},"2178":{"position":[[5,2]]},"2203":{"position":[[4,2]]},"2219":{"position":[[5,2]]},"2221":{"position":[[5,2]]},"2232":{"position":[[6,2]]},"2242":{"position":[[8,2]]},"2248":{"position":[[8,2]]},"2250":{"position":[[8,2]]},"2347":{"position":[[7,2]]},"2459":{"position":[[7,2]]},"2461":{"position":[[7,2]]},"2608":{"position":[[9,2]]},"3159":{"position":[[5,2]]},"3602":{"position":[[6,2]]},"3839":{"position":[[10,2]]},"3861":{"position":[[10,2]]},"3863":{"position":[[10,2]]},"3865":{"position":[[10,2]]},"3867":{"position":[[10,2]]},"3869":{"position":[[10,2]]},"3871":{"position":[[10,2]]},"3883":{"position":[[11,2]]}}}],["虚拟",{"_index":749,"t":{"1720":{"position":[[7,2]]}}}],["虚拟目录",{"_index":1118,"t":{"3336":{"position":[[11,4]]},"3344":{"position":[[33,4]]}}}],["行",{"_index":571,"t":{"1169":{"position":[[15,1]]},"1182":{"position":[[15,1]]},"1247":{"position":[[14,1]]}}}],["行为",{"_index":266,"t":{"405":{"position":[[8,2]]}}}],["表",{"_index":409,"t":{"689":{"position":[[14,1]]},"691":{"position":[[11,1]]},"804":{"position":[[11,1]]},"813":{"position":[[9,1]]},"815":{"position":[[9,1]]},"825":{"position":[[18,1]]},"827":{"position":[[11,1]]},"829":{"position":[[11,1]]},"831":{"position":[[9,1]]},"843":{"position":[[10,1]]},"858":{"position":[[8,1]]},"918":{"position":[[20,1]]},"1061":{"position":[[24,1]]},"1189":{"position":[[9,1]]},"1786":{"position":[[11,1]]},"2930":{"position":[[21,1]]},"2946":{"position":[[21,1]]},"2960":{"position":[[21,1]]},"3217":{"position":[[10,1]]},"3262":{"position":[[10,1]]}}}],["表带",{"_index":393,"t":{"654":{"position":[[6,2]]}}}],["表达式",{"_index":299,"t":{"468":{"position":[[15,3]]},"485":{"position":[[17,3]]},"2164":{"position":[[8,3]]},"2166":{"position":[[8,3]]},"2223":{"position":[[13,3]]},"2416":{"position":[[10,3]]},"2417":{"position":[[16,3]]},"2419":{"position":[[15,3]]},"2421":{"position":[[17,3]]},"2425":{"position":[[15,3]]},"2439":{"position":[[18,3]]},"2463":{"position":[[15,3]]},"2483":{"position":[[13,3]]},"2826":{"position":[[12,3]]},"3221":{"position":[[11,3]]}}}],["要",{"_index":1168,"t":{"3609":{"position":[[7,1]]}}}],["要求",{"_index":68,"t":{"99":{"position":[[5,2]]}}}],["覆盖率",{"_index":1135,"t":{"3406":{"position":[[12,3]]}}}],["规则",{"_index":253,"t":{"387":{"position":[[11,2]]},"1630":{"position":[[33,2]]},"2648":{"position":[[13,2]]},"2689":{"position":[[12,2]]},"3105":{"position":[[11,2]]}}}],["规范",{"_index":878,"t":{"2260":{"position":[[7,2]]},"3463":{"position":[[5,2]]},"3613":{"position":[[8,2]]},"3615":{"position":[[10,2]]},"3617":{"position":[[10,2]]},"3619":{"position":[[10,2]]},"3621":{"position":[[10,2]]},"3623":{"position":[[10,2]]}}}],["规范化",{"_index":804,"t":{"1880":{"position":[[5,3]]},"3611":{"position":[[9,3]]},"3681":{"position":[[19,3]]},"3707":{"position":[[12,3]]},"3709":{"position":[[8,3]]},"3711":{"position":[[6,3]]},"3713":{"position":[[13,3]]},"3715":{"position":[[8,3]]}}}],["视图",{"_index":410,"t":{"691":{"position":[[13,2]]},"1357":{"position":[[9,2]]},"1359":{"position":[[7,2]]},"1361":{"position":[[11,2]]},"1363":{"position":[[9,2]]},"1365":{"position":[[7,2]]},"1367":{"position":[[7,2]]},"2531":{"position":[[8,2]]},"2904":{"position":[[25,2]]},"3726":{"position":[[7,2]]},"3728":{"position":[[5,2]]}}}],["角色",{"_index":1000,"t":{"2802":{"position":[[9,2]]}}}],["解",{"_index":220,"t":{"339":{"position":[[9,1]]}}}],["解决",{"_index":198,"t":{"301":{"position":[[8,2]]},"381":{"position":[[5,2]]},"654":{"position":[[13,2]]},"1047":{"position":[[9,2]]},"2099":{"position":[[5,2]]},"2502":{"position":[[20,2]]},"3673":{"position":[[25,2]]},"3675":{"position":[[28,2]]}}}],["解决方案",{"_index":967,"t":{"2642":{"position":[[14,4]]},"2675":{"position":[[14,4]]}}}],["解密",{"_index":111,"t":{"151":{"position":[[7,2]]}}}],["解析",{"_index":621,"t":{"1427":{"position":[[14,2]]},"1431":{"position":[[17,2]]},"1585":{"position":[[18,2]]},"2036":{"position":[[4,2]]},"2064":{"position":[[5,2]]},"2223":{"position":[[5,2]]},"2463":{"position":[[7,2]]},"2473":{"position":[[12,2]]},"2584":{"position":[[11,2]]},"3163":{"position":[[19,2]]},"3165":{"position":[[14,2]]}}}],["触发",{"_index":981,"t":{"2730":{"position":[[12,2]]},"3172":{"position":[[7,2]]},"3174":{"position":[[7,2]]},"3176":{"position":[[7,2]]},"3178":{"position":[[7,2]]},"3180":{"position":[[7,2]]},"3182":{"position":[[7,2]]},"3184":{"position":[[7,2]]},"3186":{"position":[[7,2]]},"3837":{"position":[[15,2]]},"3857":{"position":[[13,2]]},"3893":{"position":[[13,2]]}}}],["触发器",{"_index":394,"t":{"654":{"position":[[8,3]]},"3765":{"position":[[13,3]]},"3773":{"position":[[11,3]]},"3796":{"position":[[9,3]]},"3797":{"position":[[13,3]]},"3799":{"position":[[11,3]]},"3801":{"position":[[13,3]]},"3803":{"position":[[13,3]]},"3805":{"position":[[14,3]]},"3807":{"position":[[11,3]]},"3809":{"position":[[13,3]]},"3877":{"position":[[16,3]]},"3879":{"position":[[17,3]]},"3883":{"position":[[17,3]]},"3885":{"position":[[17,3]]},"3887":{"position":[[17,3]]},"3889":{"position":[[21,3]]}}}],["计划",{"_index":549,"t":{"1084":{"position":[[13,2]]},"1093":{"position":[[14,2]]},"2176":{"position":[[11,2]]},"3245":{"position":[[0,2]]},"3813":{"position":[[9,2]]},"3814":{"position":[[13,2]]},"3816":{"position":[[13,2]]},"3818":{"position":[[13,2]]},"3833":{"position":[[10,2]]},"3859":{"position":[[10,2]]}}}],["订阅",{"_index":551,"t":{"1088":{"position":[[14,2]]},"1091":{"position":[[12,2]]},"1094":{"position":[[11,2]]},"1702":{"position":[[9,2]]},"1706":{"position":[[9,2]]},"1812":{"position":[[5,2]]},"2157":{"position":[[6,2]]},"2161":{"position":[[6,2]]},"2314":{"position":[[10,2]]}}}],["记住",{"_index":1187,"t":{"3683":{"position":[[17,2]]}}}],["记录",{"_index":453,"t":{"782":{"position":[[12,2]]},"784":{"position":[[12,2]]},"964":{"position":[[11,2]]},"966":{"position":[[11,2]]},"1348":{"position":[[11,2]]},"1350":{"position":[[11,2]]},"3439":{"position":[[7,2]]}}}],["设置",{"_index":29,"t":{"35":{"position":[[0,2]]},"232":{"position":[[7,2]]},"234":{"position":[[9,2]]},"385":{"position":[[7,2]]},"1085":{"position":[[13,2]]},"1092":{"position":[[16,2]]},"1191":{"position":[[7,2]]},"1280":{"position":[[8,2]]},"1463":{"position":[[9,2]]},"1666":{"position":[[7,2]]},"1824":{"position":[[14,2]]},"2084":{"position":[[4,2]]},"2086":{"position":[[4,2]]},"2150":{"position":[[4,2]]},"2244":{"position":[[8,2]]},"2252":{"position":[[8,2]]},"2489":{"position":[[14,2]]},"3487":{"position":[[7,2]]},"3489":{"position":[[7,2]]},"3491":{"position":[[7,2]]},"3493":{"position":[[7,2]]},"3495":{"position":[[7,2]]},"3497":{"position":[[7,2]]},"3499":{"position":[[7,2]]},"3501":{"position":[[7,2]]},"3503":{"position":[[8,2]]},"3505":{"position":[[8,2]]},"3521":{"position":[[8,2]]},"3523":{"position":[[8,2]]},"3531":{"position":[[8,2]]},"3536":{"position":[[7,2]]},"3538":{"position":[[7,2]]},"3540":{"position":[[7,2]]},"3542":{"position":[[7,2]]},"3544":{"position":[[7,2]]},"3546":{"position":[[7,2]]},"3562":{"position":[[8,2]]},"3570":{"position":[[8,2]]},"3663":{"position":[[7,2]]},"3719":{"position":[[20,2]]},"3780":{"position":[[9,2]]},"3809":{"position":[[9,2]]},"3818":{"position":[[9,2]]}}}],["设计",{"_index":227,"t":{"351":{"position":[[8,2]]},"2263":{"position":[[13,2]]},"2773":{"position":[[10,2]]}}}],["访问",{"_index":100,"t":{"140":{"position":[[9,2]]}}}],["证书",{"_index":1165,"t":{"3584":{"position":[[15,2]]},"3586":{"position":[[16,2]]},"3588":{"position":[[19,2]]},"3590":{"position":[[16,2]]},"3592":{"position":[[14,2]]}}}],["诊断",{"_index":1113,"t":{"3304":{"position":[[10,2]]}}}],["词汇",{"_index":993,"t":{"2785":{"position":[[12,2]]},"2791":{"position":[[9,2]]},"2793":{"position":[[10,2]]}}}],["话",{"_index":1009,"t":{"2842":{"position":[[8,1]]},"2867":{"position":[[8,1]]}}}],["详解",{"_index":233,"t":{"356":{"position":[[18,2]]},"364":{"position":[[23,2]]}}}],["语法",{"_index":679,"t":{"1519":{"position":[[10,2]]}}}],["语言",{"_index":381,"t":{"630":{"position":[[6,2]]},"1878":{"position":[[6,2]]},"2146":{"position":[[9,2]]},"2148":{"position":[[13,2]]},"2150":{"position":[[8,2]]},"2152":{"position":[[8,2]]},"2154":{"position":[[10,2]]},"2539":{"position":[[7,2]]},"2541":{"position":[[25,2]]},"2543":{"position":[[7,2]]},"2548":{"position":[[13,2]]},"2556":{"position":[[18,2]]},"3677":{"position":[[16,2]]}}}],["说明",{"_index":150,"t":{"217":{"position":[[12,2]]},"481":{"position":[[15,2]]},"1318":{"position":[[19,2]]},"1552":{"position":[[12,2]]},"1782":{"position":[[13,2]]},"1994":{"position":[[19,2]]},"2017":{"position":[[19,2]]},"2441":{"position":[[22,2]]},"2487":{"position":[[29,2]]},"2716":{"position":[[10,2]]},"2722":{"position":[[24,2]]},"3292":{"position":[[13,2]]}}}],["请求",{"_index":27,"t":{"33":{"position":[[4,2]]},"111":{"position":[[6,2]]},"303":{"position":[[11,2]]},"573":{"position":[[9,2]]},"1467":{"position":[[32,2]]},"1595":{"position":[[8,2]]},"1602":{"position":[[10,2]]},"1612":{"position":[[11,2]]},"1666":{"position":[[16,2]]},"1746":{"position":[[5,2]]},"2141":{"position":[[7,2]]},"2242":{"position":[[12,2]]},"2566":{"position":[[10,2]]},"2568":{"position":[[12,2]]},"3439":{"position":[[9,2]]},"3475":{"position":[[9,2]]},"3477":{"position":[[7,2]]},"3485":{"position":[[9,2]]},"3487":{"position":[[9,2]]},"3489":{"position":[[9,2]]},"3493":{"position":[[9,2]]},"3497":{"position":[[9,2]]},"3509":{"position":[[8,2]]},"3513":{"position":[[8,2]]},"3515":{"position":[[10,2]]},"3517":{"position":[[8,2]]},"3538":{"position":[[9,2]]},"3542":{"position":[[9,2]]},"3550":{"position":[[7,2]]},"3554":{"position":[[8,2]]},"3556":{"position":[[10,2]]},"3558":{"position":[[8,2]]},"3572":{"position":[[5,2]]},"3596":{"position":[[9,2]]},"3600":{"position":[[14,2]]},"3621":{"position":[[6,2]]},"3671":{"position":[[44,2]]}}}],["读",{"_index":877,"t":{"2254":{"position":[[19,1]]}}}],["读写",{"_index":527,"t":{"1015":{"position":[[9,2]]},"1045":{"position":[[7,2]]}}}],["读取",{"_index":174,"t":{"271":{"position":[[7,2]]},"416":{"position":[[9,2]]},"434":{"position":[[8,2]]},"436":{"position":[[12,2]]},"438":{"position":[[8,2]]},"446":{"position":[[8,2]]},"450":{"position":[[10,2]]},"1367":{"position":[[11,2]]},"1728":{"position":[[7,2]]},"2143":{"position":[[5,2]]},"2254":{"position":[[6,2]]},"2712":{"position":[[8,2]]},"2714":{"position":[[12,2]]}}}],["调度",{"_index":864,"t":{"2174":{"position":[[7,2]]},"2176":{"position":[[9,2]]},"3759":{"position":[[9,2]]},"3822":{"position":[[9,2]]},"3855":{"position":[[17,2]]}}}],["调整",{"_index":13,"t":{"22":{"position":[[14,2]]}}}],["调用",{"_index":146,"t":{"213":{"position":[[21,2]]},"3380":{"position":[[14,2]]},"3749":{"position":[[7,2]]}}}],["调用者",{"_index":1079,"t":{"3174":{"position":[[9,3]]},"3176":{"position":[[11,3]]}}}],["调试",{"_index":688,"t":{"1540":{"position":[[9,2]]},"2656":{"position":[[20,2]]}}}],["谓词",{"_index":698,"t":{"1595":{"position":[[10,2]]},"1602":{"position":[[12,2]]},"1612":{"position":[[13,2]]},"1614":{"position":[[12,2]]}}}],["负载",{"_index":988,"t":{"2761":{"position":[[14,2]]}}}],["贡献",{"_index":73,"t":{"105":{"position":[[3,2]]}}}],["资源",{"_index":812,"t":{"1916":{"position":[[6,2]]},"2091":{"position":[[9,2]]},"3386":{"position":[[13,2]]}}}],["资源配置",{"_index":759,"t":{"1734":{"position":[[10,4]]}}}],["赞助",{"_index":672,"t":{"1508":{"position":[[10,2]]},"1510":{"position":[[10,2]]}}}],["起航",{"_index":1230,"t":{"3925":{"position":[[9,2]]}}}],["超时",{"_index":575,"t":{"1191":{"position":[[9,2]]},"1280":{"position":[[10,2]]},"1666":{"position":[[14,2]]}}}],["超级",{"_index":524,"t":{"989":{"position":[[11,2]]}}}],["跨",{"_index":264,"t":{"403":{"position":[[8,1]]},"405":{"position":[[6,1]]},"412":{"position":[[11,1]]},"420":{"position":[[7,1]]},"422":{"position":[[13,1]]},"3117":{"position":[[9,1]]},"3119":{"position":[[9,1]]}}}],["路径",{"_index":282,"t":{"440":{"position":[[6,2]]},"1448":{"position":[[14,2]]},"1636":{"position":[[15,2]]},"2650":{"position":[[13,2]]},"2652":{"position":[[27,2]]},"2904":{"position":[[27,2]]},"3615":{"position":[[8,2]]}}}],["路由",{"_index":699,"t":{"1597":{"position":[[8,2]]},"1616":{"position":[[13,2]]},"1632":{"position":[[9,2]]},"1634":{"position":[[21,2]]},"1636":{"position":[[13,2]]},"2570":{"position":[[10,2]]},"2572":{"position":[[10,2]]},"3669":{"position":[[24,2]]}}}],["跳",{"_index":369,"t":{"611":{"position":[[20,1]]},"622":{"position":[[22,1]]},"750":{"position":[[33,1]]}}}],["身份验证",{"_index":92,"t":{"124":{"position":[[17,4]]},"126":{"position":[[14,4]]},"128":{"position":[[9,4]]}}}],["转",{"_index":762,"t":{"1742":{"position":[[19,1]]},"2378":{"position":[[19,1]]}}}],["转换",{"_index":857,"t":{"2146":{"position":[[4,2]]},"2148":{"position":[[4,2]]},"3169":{"position":[[21,2]]}}}],["转换器",{"_index":696,"t":{"1588":{"position":[[12,3]]}}}],["转换成",{"_index":184,"t":{"283":{"position":[[7,3]]},"293":{"position":[[8,3]]},"438":{"position":[[13,3]]},"1061":{"position":[[18,3]]}}}],["转码",{"_index":1159,"t":{"3531":{"position":[[15,2]]},"3570":{"position":[[15,2]]}}}],["软",{"_index":456,"t":{"790":{"position":[[10,1]]}}}],["轻量级",{"_index":744,"t":{"1700":{"position":[[10,3]]}}}],["辅助",{"_index":999,"t":{"2802":{"position":[[7,2]]}}}],["输入",{"_index":404,"t":{"684":{"position":[[9,2]]}}}],["输出",{"_index":189,"t":{"287":{"position":[[8,2]]},"289":{"position":[[8,2]]},"1744":{"position":[[16,2]]},"2086":{"position":[[8,2]]},"2358":{"position":[[20,2]]},"3382":{"position":[[9,2]]},"3429":{"position":[[7,2]]},"3431":{"position":[[7,2]]},"3433":{"position":[[7,2]]},"3441":{"position":[[24,2]]},"3455":{"position":[[7,2]]},"3469":{"position":[[15,2]]},"3655":{"position":[[11,2]]},"3784":{"position":[[16,2]]},"3811":{"position":[[16,2]]},"3820":{"position":[[16,2]]},"3895":{"position":[[11,2]]}}}],["输出介质",{"_index":1140,"t":{"3427":{"position":[[9,4]]}}}],["迁移",{"_index":1048,"t":{"2964":{"position":[[23,2]]},"3123":{"position":[[11,2]]}}}],["过",{"_index":370,"t":{"611":{"position":[[21,1]]},"622":{"position":[[23,1]]},"731":{"position":[[15,1]]},"750":{"position":[[34,1]]}}}],["过时",{"_index":1189,"t":{"3691":{"position":[[9,2]]}}}],["过期",{"_index":853,"t":{"2135":{"position":[[7,2]]}}}],["过滤",{"_index":1145,"t":{"3453":{"position":[[9,2]]}}}],["过滤器",{"_index":1097,"t":{"3229":{"position":[[11,3]]}}}],["过程",{"_index":553,"t":{"1102":{"position":[[11,2]]},"1104":{"position":[[13,2]]},"1106":{"position":[[9,2]]},"1124":{"position":[[13,2]]},"1128":{"position":[[15,2]]},"1134":{"position":[[9,2]]},"1171":{"position":[[14,2]]},"1249":{"position":[[9,2]]}}}],["运行",{"_index":250,"t":{"385":{"position":[[14,2]]},"1276":{"position":[[9,2]]},"1484":{"position":[[9,2]]},"2753":{"position":[[13,2]]},"3077":{"position":[[9,2]]},"3361":{"position":[[9,2]]},"3771":{"position":[[9,2]]}}}],["运行日志",{"_index":986,"t":{"2755":{"position":[[11,4]]}}}],["返回",{"_index":387,"t":{"646":{"position":[[11,2]]},"809":{"position":[[13,2]]},"811":{"position":[[13,2]]},"813":{"position":[[13,2]]},"815":{"position":[[13,2]]},"1065":{"position":[[16,2]]},"1110":{"position":[[9,2]]},"1112":{"position":[[9,2]]},"1114":{"position":[[9,2]]},"1116":{"position":[[9,2]]},"1118":{"position":[[9,2]]},"1120":{"position":[[9,2]]},"1122":{"position":[[13,2]]},"1159":{"position":[[9,2]]},"1161":{"position":[[9,2]]},"1163":{"position":[[9,2]]},"1165":{"position":[[9,2]]},"1167":{"position":[[9,2]]},"1169":{"position":[[9,2]]},"1172":{"position":[[9,2]]},"1174":{"position":[[9,2]]},"1176":{"position":[[9,2]]},"1178":{"position":[[9,2]]},"1180":{"position":[[9,2]]},"1182":{"position":[[9,2]]},"1184":{"position":[[25,2]]},"1233":{"position":[[9,2]]},"1235":{"position":[[9,2]]},"1237":{"position":[[9,2]]},"1239":{"position":[[9,2]]},"1241":{"position":[[9,2]]},"1245":{"position":[[9,2]]},"1247":{"position":[[9,2]]},"1250":{"position":[[9,2]]},"1252":{"position":[[9,2]]},"1254":{"position":[[9,2]]},"1256":{"position":[[9,2]]},"1258":{"position":[[9,2]]},"1262":{"position":[[25,2]]},"1264":{"position":[[9,2]]},"2566":{"position":[[12,2]]},"3623":{"position":[[6,2]]}}}],["返回值",{"_index":386,"t":{"644":{"position":[[12,3]]},"1243":{"position":[[10,3]]},"1260":{"position":[[10,3]]},"2185":{"position":[[20,3]]},"2187":{"position":[[20,3]]},"3519":{"position":[[10,3]]},"3560":{"position":[[10,3]]},"3594":{"position":[[7,3]]},"3707":{"position":[[6,3],[22,3]]}}}],["这个",{"_index":800,"t":{"1848":{"position":[[10,2]]}}}],["进程",{"_index":894,"t":{"2308":{"position":[[5,2]]},"2320":{"position":[[5,2]]},"3076":{"position":[[13,2]]},"3079":{"position":[[15,2]]}}}],["进行",{"_index":767,"t":{"1748":{"position":[[13,2]]},"1752":{"position":[[12,2]]},"2620":{"position":[[7,2]]},"3376":{"position":[[9,2]]},"3396":{"position":[[14,2]]}}}],["远程",{"_index":667,"t":{"1489":{"position":[[19,2]]},"1498":{"position":[[9,2]]},"2203":{"position":[[6,2]]},"3475":{"position":[[7,2]]},"3477":{"position":[[5,2]]}}}],["连接",{"_index":212,"t":{"330":{"position":[[9,2]]},"511":{"position":[[8,2]]},"519":{"position":[[13,2]]},"859":{"position":[[10,2]]},"861":{"position":[[10,2]]},"863":{"position":[[10,2]]},"900":{"position":[[12,2]]},"1312":{"position":[[10,2]]},"1314":{"position":[[13,2]]},"1469":{"position":[[28,2]]},"3145":{"position":[[14,2]]},"3147":{"position":[[10,2]]},"3155":{"position":[[18,2]]},"3191":{"position":[[11,2]]}}}],["连续",{"_index":902,"t":{"2330":{"position":[[7,2]]}}}],["退出",{"_index":33,"t":{"37":{"position":[[0,2]]},"2246":{"position":[[8,2]]}}}],["选",{"_index":711,"t":{"1626":{"position":[[37,1]]},"1632":{"position":[[17,1]]}}}],["选中",{"_index":861,"t":{"2154":{"position":[[8,2]]}}}],["选择",{"_index":280,"t":{"436":{"position":[[10,2]]},"691":{"position":[[9,2]]},"693":{"position":[[9,2]]},"1078":{"position":[[9,2]]},"1083":{"position":[[9,2]]},"1089":{"position":[[9,2]]},"1090":{"position":[[9,2]]},"1091":{"position":[[9,2]]},"1092":{"position":[[9,2]]},"1093":{"position":[[9,2]]},"1446":{"position":[[9,2]]},"1447":{"position":[[9,2]]},"2654":{"position":[[8,2]]},"2714":{"position":[[10,2]]}}}],["选用",{"_index":773,"t":{"1764":{"position":[[12,2]]}}}],["选项",{"_index":157,"t":{"232":{"position":[[11,2]]},"234":{"position":[[13,2]]},"2038":{"position":[[7,2]]},"2700":{"position":[[9,2]]},"2704":{"position":[[6,2]]},"2716":{"position":[[6,2]]},"2718":{"position":[[6,2]]},"2720":{"position":[[8,2]]},"2724":{"position":[[6,2]]},"2726":{"position":[[6,2]]},"2728":{"position":[[6,2]]},"2732":{"position":[[7,2]]},"3717":{"position":[[21,2]]},"3721":{"position":[[15,2]]},"3822":{"position":[[38,2]]}}}],["递归",{"_index":486,"t":{"876":{"position":[[7,2]]},"1730":{"position":[[17,2]]}}}],["逗号",{"_index":912,"t":{"2366":{"position":[[11,2]]}}}],["通信",{"_index":893,"t":{"2304":{"position":[[12,2]]},"2306":{"position":[[9,2]]},"2308":{"position":[[8,2]]},"2320":{"position":[[8,2]]},"3171":{"position":[[14,2]]}}}],["通用",{"_index":770,"t":{"1752":{"position":[[7,2]]}}}],["通知",{"_index":292,"t":{"452":{"position":[[10,2]]},"2728":{"position":[[10,2]]}}}],["通过",{"_index":20,"t":{"27":{"position":[[0,2]]},"29":{"position":[[0,2]]},"2238":{"position":[[8,2]]},"3719":{"position":[[6,2]]}}}],["逻辑",{"_index":687,"t":{"1538":{"position":[[9,2]]},"3679":{"position":[[10,2]]}}}],["遍历",{"_index":183,"t":{"281":{"position":[[7,2]]}}}],["避",{"_index":1065,"t":{"3121":{"position":[[13,1]]}}}],["部分",{"_index":105,"t":{"143":{"position":[[11,2]]},"145":{"position":[[20,2]]},"147":{"position":[[10,2]]},"664":{"position":[[11,2]]},"666":{"position":[[11,2]]},"1328":{"position":[[8,2]]},"1330":{"position":[[8,2]]},"1340":{"position":[[13,2]]},"1342":{"position":[[14,2]]},"1344":{"position":[[16,2]]},"1346":{"position":[[16,2]]}}}],["部署",{"_index":603,"t":{"1373":{"position":[[17,2]]},"1459":{"position":[[7,2]]},"1471":{"position":[[9,2]]},"1478":{"position":[[20,2]]},"1486":{"position":[[19,2]]},"1489":{"position":[[21,2]]},"1824":{"position":[[10,2]]},"2489":{"position":[[10,2]]},"2832":{"position":[[7,2]]},"2837":{"position":[[16,2]]},"3076":{"position":[[15,2]]},"3079":{"position":[[17,2]]},"3340":{"position":[[16,2]]},"3400":{"position":[[19,2]]},"3901":{"position":[[10,2]]}}}],["配合",{"_index":973,"t":{"2693":{"position":[[16,2]]}}}],["配置",{"_index":2,"t":{"8":{"position":[[2,2]]},"207":{"position":[[10,2]]},"211":{"position":[[19,2]]},"215":{"position":[[14,2]]},"307":{"position":[[18,2]]},"309":{"position":[[16,2]]},"311":{"position":[[8,2]]},"313":{"position":[[18,2]]},"315":{"position":[[16,2]]},"354":{"position":[[12,2]]},"358":{"position":[[8,2]]},"368":{"position":[[10,2]]},"412":{"position":[[7,2]]},"414":{"position":[[26,2]]},"428":{"position":[[9,2]]},"430":{"position":[[6,2]]},"432":{"position":[[8,2]]},"438":{"position":[[10,2]]},"446":{"position":[[29,2]]},"452":{"position":[[6,2]]},"456":{"position":[[6,2]]},"458":{"position":[[6,2]]},"460":{"position":[[9,2]]},"462":{"position":[[9,2]]},"511":{"position":[[6,2]]},"513":{"position":[[17,2]]},"515":{"position":[[25,2]]},"517":{"position":[[24,2]]},"519":{"position":[[18,2]]},"531":{"position":[[22,2]]},"533":{"position":[[7,2]]},"697":{"position":[[11,2]]},"760":{"position":[[11,2]]},"831":{"position":[[13,2]]},"842":{"position":[[12,2]]},"900":{"position":[[17,2]]},"914":{"position":[[24,2]]},"1076":{"position":[[19,2]]},"1084":{"position":[[9,2]]},"1085":{"position":[[9,2]]},"1086":{"position":[[11,2]]},"1087":{"position":[[19,2]]},"1142":{"position":[[9,2]]},"1298":{"position":[[13,2]]},"1301":{"position":[[11,2]]},"1312":{"position":[[8,2]]},"1314":{"position":[[18,2]]},"1415":{"position":[[19,2]]},"1419":{"position":[[23,2]]},"1448":{"position":[[9,2]]},"1450":{"position":[[12,2]]},"1461":{"position":[[9,2]]},"1462":{"position":[[9,2]]},"1473":{"position":[[16,2]]},"1492":{"position":[[9,2]]},"1590":{"position":[[16,2]]},"1628":{"position":[[13,2]]},"1640":{"position":[[10,2]]},"1642":{"position":[[13,2]]},"1644":{"position":[[17,2]]},"1646":{"position":[[23,2]]},"1648":{"position":[[17,2]]},"1650":{"position":[[16,2]]},"1652":{"position":[[15,2]]},"1654":{"position":[[16,2]]},"1656":{"position":[[15,2]]},"1658":{"position":[[13,2]]},"1660":{"position":[[36,2]]},"1662":{"position":[[22,2]]},"1754":{"position":[[9,2]]},"1776":{"position":[[11,2]]},"1778":{"position":[[15,2]]},"1780":{"position":[[15,2]]},"1782":{"position":[[11,2]]},"1784":{"position":[[6,2]]},"1786":{"position":[[6,2]]},"1818":{"position":[[6,2]]},"1820":{"position":[[29,2]]},"1868":{"position":[[21,2]]},"1884":{"position":[[31,2]]},"1975":{"position":[[13,2]]},"1989":{"position":[[13,2]]},"2012":{"position":[[13,2]]},"2020":{"position":[[8,2]]},"2022":{"position":[[6,2]]},"2038":{"position":[[9,2]]},"2074":{"position":[[9,2]]},"2082":{"position":[[11,2]]},"2284":{"position":[[6,2]]},"2291":{"position":[[8,2]]},"2353":{"position":[[12,2]]},"2399":{"position":[[7,2]]},"2410":{"position":[[7,2]]},"2429":{"position":[[7,2]]},"2521":{"position":[[7,2]]},"2552":{"position":[[26,2]]},"2580":{"position":[[8,2]]},"2624":{"position":[[13,2]]},"2647":{"position":[[8,2]]},"2650":{"position":[[8,2]]},"2652":{"position":[[25,2]]},"2695":{"position":[[9,2]]},"2702":{"position":[[7,2]]},"2706":{"position":[[8,2]]},"2718":{"position":[[11,2]]},"2726":{"position":[[10,2]]},"2750":{"position":[[14,2]]},"2873":{"position":[[20,2]]},"2874":{"position":[[8,2]]},"2878":{"position":[[11,2]]},"2882":{"position":[[10,2]]},"2968":{"position":[[17,2]]},"2978":{"position":[[6,2]]},"2980":{"position":[[4,2]]},"2982":{"position":[[4,2]]},"2988":{"position":[[6,2]]},"2990":{"position":[[4,2]]},"2992":{"position":[[4,2]]},"2998":{"position":[[6,2]]},"3000":{"position":[[4,2]]},"3002":{"position":[[4,2]]},"3006":{"position":[[6,2]]},"3008":{"position":[[4,2]]},"3010":{"position":[[4,2]]},"3012":{"position":[[8,2]]},"3014":{"position":[[6,2]]},"3016":{"position":[[6,2]]},"3020":{"position":[[6,2]]},"3022":{"position":[[4,2]]},"3024":{"position":[[4,2]]},"3028":{"position":[[6,2]]},"3030":{"position":[[4,2]]},"3032":{"position":[[4,2]]},"3036":{"position":[[6,2]]},"3038":{"position":[[4,2]]},"3040":{"position":[[4,2]]},"3044":{"position":[[7,2]]},"3046":{"position":[[5,2]]},"3048":{"position":[[5,2]]},"3052":{"position":[[6,2]]},"3054":{"position":[[4,2]]},"3056":{"position":[[4,2]]},"3060":{"position":[[6,2]]},"3062":{"position":[[4,2]]},"3064":{"position":[[4,2]]},"3070":{"position":[[9,2]]},"3155":{"position":[[16,2]]},"3157":{"position":[[15,2]]},"3342":{"position":[[9,2]]},"3344":{"position":[[37,2]]},"3370":{"position":[[13,2]]},"3400":{"position":[[17,2]]},"3427":{"position":[[5,2]]},"3445":{"position":[[9,2]]},"3447":{"position":[[9,2]]},"3449":{"position":[[9,2]]},"3525":{"position":[[12,2]]},"3564":{"position":[[12,2]]},"3572":{"position":[[10,2]]},"3574":{"position":[[20,2]]},"3576":{"position":[[7,2]]},"3578":{"position":[[7,2]]},"3584":{"position":[[17,2]]},"3641":{"position":[[11,2]]},"3647":{"position":[[7,2]]},"3665":{"position":[[19,2]]},"3667":{"position":[[7,2]]},"3681":{"position":[[7,2]]},"3705":{"position":[[34,2]]},"3715":{"position":[[11,2]]},"3717":{"position":[[16,2]]},"3721":{"position":[[13,2]]},"3822":{"position":[[36,2]]}}}],["配置文件",{"_index":287,"t":{"444":{"position":[[9,4]]},"448":{"position":[[12,4]]},"454":{"position":[[10,4]]}}}],["释放",{"_index":839,"t":{"2060":{"position":[[7,2]]},"3384":{"position":[[18,2]]},"3386":{"position":[[11,2]]}}}],["重",{"_index":1066,"t":{"3121":{"position":[[14,1]]}}}],["重写",{"_index":1044,"t":{"2936":{"position":[[7,2]]},"2950":{"position":[[7,2]]}}}],["重启",{"_index":639,"t":{"1464":{"position":[[9,2]]}}}],["重复",{"_index":234,"t":{"360":{"position":[[8,2]]},"2254":{"position":[[17,2]]},"3364":{"position":[[9,2]]}}}],["重大",{"_index":12,"t":{"22":{"position":[[12,2]]}}}],["重新",{"_index":204,"t":{"322":{"position":[[6,2]]},"2642":{"position":[[8,2]]},"2675":{"position":[[8,2]]},"3925":{"position":[[7,2]]}}}],["重要",{"_index":142,"t":{"203":{"position":[[18,2]]}}}],["重试",{"_index":791,"t":{"1818":{"position":[[8,2]]},"1860":{"position":[[10,2]]},"2198":{"position":[[8,2]]},"3527":{"position":[[8,2]]},"3566":{"position":[[8,2]]}}}],["重载",{"_index":296,"t":{"462":{"position":[[7,2]]},"1850":{"position":[[14,2]]}}}],["鉴",{"_index":86,"t":{"118":{"position":[[8,1]]},"120":{"position":[[10,1]]}}}],["针对",{"_index":1119,"t":{"3338":{"position":[[7,2]]},"3340":{"position":[[7,2]]},"3717":{"position":[[4,2]]}}}],["销毁",{"_index":874,"t":{"2217":{"position":[[5,2]]},"2457":{"position":[[7,2]]}}}],["错误",{"_index":807,"t":{"1886":{"position":[[19,2]]},"3304":{"position":[[12,2]]}}}],["错误处理",{"_index":1192,"t":{"3695":{"position":[[23,4]]}}}],["错误报告",{"_index":244,"t":{"377":{"position":[[7,4]]}}}],["键",{"_index":976,"t":{"2720":{"position":[[12,1]]}}}],["镜像",{"_index":662,"t":{"1482":{"position":[[25,2]]},"1484":{"position":[[27,2]]}}}],["长",{"_index":681,"t":{"1523":{"position":[[7,1]]},"3145":{"position":[[13,1]]}}}],["问题",{"_index":235,"t":{"360":{"position":[[12,2]]},"362":{"position":[[12,2]]},"379":{"position":[[7,2]]},"381":{"position":[[9,2]]},"422":{"position":[[15,2]]},"733":{"position":[[47,2]]},"916":{"position":[[15,2],[24,2]]},"1047":{"position":[[14,2]]},"1471":{"position":[[36,2]]},"1473":{"position":[[13,2]]},"2370":{"position":[[11,2]]},"2376":{"position":[[17,2]]},"2384":{"position":[[35,2]]},"2554":{"position":[[14,2]]},"2730":{"position":[[14,2]]},"2837":{"position":[[20,2]]},"3113":{"position":[[14,2]]},"3115":{"position":[[14,2]]},"3117":{"position":[[22,2]]},"3119":{"position":[[20,2]]},"3121":{"position":[[15,2]]},"3123":{"position":[[13,2]]},"3328":{"position":[[19,2]]},"3441":{"position":[[26,2]]},"3659":{"position":[[11,2]]},"3673":{"position":[[23,2]]},"3675":{"position":[[26,2]]}}}],["间",{"_index":896,"t":{"2308":{"position":[[13,1]]}}}],["间隔",{"_index":875,"t":{"2225":{"position":[[24,2]]},"2407":{"position":[[5,2]]},"2437":{"position":[[12,2]]},"2481":{"position":[[8,2]]},"2824":{"position":[[7,2]]}}}],["限制",{"_index":769,"t":{"1750":{"position":[[14,2]]}}}],["除了",{"_index":1080,"t":{"3176":{"position":[[9,2]]}}}],["随意",{"_index":702,"t":{"1618":{"position":[[11,2]]}}}],["随机",{"_index":537,"t":{"1065":{"position":[[9,2]]},"2759":{"position":[[9,2]]}}}],["隐藏",{"_index":1174,"t":{"3657":{"position":[[7,2]]}}}],["隔",{"_index":931,"t":{"2396":{"position":[[6,1]]}}}],["集",{"_index":481,"t":{"867":{"position":[[11,1]]},"2026":{"position":[[12,1]]},"2048":{"position":[[15,1]]},"3743":{"position":[[11,1]]}}}],["集成",{"_index":339,"t":{"541":{"position":[[9,2]]},"632":{"position":[[5,2]]},"2600":{"position":[[9,2]]},"2775":{"position":[[6,2]]},"2818":{"position":[[7,2]]},"3214":{"position":[[14,2]]},"3251":{"position":[[9,2]]},"3326":{"position":[[20,2]]},"3366":{"position":[[7,2]]},"3394":{"position":[[11,2]]},"3396":{"position":[[16,2]]},"3402":{"position":[[9,2]]},"3703":{"position":[[14,2]]}}}],["集线器",{"_index":1071,"t":{"3145":{"position":[[17,3]]},"3149":{"position":[[7,3]]},"3151":{"position":[[5,3]]}}}],["集群",{"_index":987,"t":{"2761":{"position":[[9,2]]},"3899":{"position":[[10,2]]}}}],["雪花",{"_index":904,"t":{"2334":{"position":[[7,2]]}}}],["需",{"_index":756,"t":{"1730":{"position":[[16,1]]}}}],["需要",{"_index":901,"t":{"2325":{"position":[[8,2]]},"3611":{"position":[[7,2]]}}}],["静态",{"_index":309,"t":{"479":{"position":[[19,2]]},"821":{"position":[[11,2]]},"1215":{"position":[[8,2]]},"1437":{"position":[[15,2]]},"1552":{"position":[[9,2]]},"1725":{"position":[[10,2]]},"1734":{"position":[[8,2]]},"1816":{"position":[[20,2]]},"1858":{"position":[[6,2]]},"2445":{"position":[[15,2]]},"2467":{"position":[[17,2]]},"2475":{"position":[[18,2]]},"2525":{"position":[[7,2]]},"3423":{"position":[[11,2]]},"3461":{"position":[[5,2]]},"3598":{"position":[[6,2]]}}}],["静态方法",{"_index":466,"t":{"821":{"position":[[15,4]]}}}],["静默",{"_index":1031,"t":{"2902":{"position":[[7,2]]}}}],["非",{"_index":494,"t":{"906":{"position":[[9,1]]},"989":{"position":[[8,1]]},"1013":{"position":[[17,1]]},"1431":{"position":[[7,1]]},"1463":{"position":[[13,1]]},"1626":{"position":[[30,1]]},"1632":{"position":[[13,1]]},"1836":{"position":[[6,1]]},"2060":{"position":[[9,1]]},"2102":{"position":[[6,1]]},"2744":{"position":[[9,1],[14,1]]},"3340":{"position":[[9,1]]},"3594":{"position":[[10,1]]}}}],["页",{"_index":808,"t":{"1886":{"position":[[21,1]]}}}],["项目",{"_index":44,"t":{"47":{"position":[[1,2]]},"49":{"position":[[1,2]]},"54":{"position":[[5,2]]},"65":{"position":[[5,2]]},"71":{"position":[[1,2]]},"73":{"position":[[1,2]]},"78":{"position":[[5,2]]},"682":{"position":[[13,2]]},"710":{"position":[[13,2]]},"1083":{"position":[[13,2]]},"1970":{"position":[[11,2]]},"1984":{"position":[[11,2]]},"2007":{"position":[[11,2]]},"2026":{"position":[[6,2]]},"2028":{"position":[[6,2]]},"2044":{"position":[[9,2]]},"2048":{"position":[[9,2]]},"2050":{"position":[[9,2]]},"2297":{"position":[[12,2]]},"2863":{"position":[[13,2]]},"2890":{"position":[[12,2],[21,2]]},"3358":{"position":[[22,2]]},"3396":{"position":[[12,2]]}}}],["顺序",{"_index":145,"t":{"211":{"position":[[21,2]]},"213":{"position":[[23,2]]},"1421":{"position":[[8,2]]},"1958":{"position":[[18,2]]},"1960":{"position":[[18,2]]},"2582":{"position":[[9,2]]}}}],["顺序控制",{"_index":819,"t":{"1956":{"position":[[12,4]]}}}],["领域",{"_index":126,"t":{"175":{"position":[[0,2]]}}}],["领略",{"_index":587,"t":{"1224":{"position":[[9,2]]}}}],["额外",{"_index":1199,"t":{"3711":{"position":[[13,2]]},"3782":{"position":[[17,2]]}}}],["风格",{"_index":505,"t":{"918":{"position":[[18,2]]}}}],["首字母",{"_index":844,"t":{"2084":{"position":[[11,3]]}}}],["驼峰",{"_index":717,"t":{"1636":{"position":[[10,2]]}}}],["验证",{"_index":359,"t":{"588":{"position":[[19,2]]},"594":{"position":[[8,2]]},"596":{"position":[[15,2]]},"598":{"position":[[15,2]]},"600":{"position":[[6,2]]},"601":{"position":[[6,2]]},"605":{"position":[[24,2]]},"611":{"position":[[22,2]]},"618":{"position":[[6,2]]},"620":{"position":[[8,2]]},"622":{"position":[[24,2]]},"624":{"position":[[51,2]]},"626":{"position":[[27,2]]},"1997":{"position":[[4,2]]},"1999":{"position":[[4,2]]},"2001":{"position":[[9,2]]},"2003":{"position":[[4,2],[8,2]]},"2139":{"position":[[5,2]]},"2141":{"position":[[5,2]]},"2143":{"position":[[19,2]]},"2533":{"position":[[8,2]]},"2724":{"position":[[8,2]]},"3507":{"position":[[18,2]]},"3548":{"position":[[9,2]]}}}],["高性能",{"_index":693,"t":{"1565":{"position":[[14,3]]},"3739":{"position":[[7,3]]}}}],["高级",{"_index":95,"t":{"130":{"position":[[5,2]]},"525":{"position":[[9,2]]},"553":{"position":[[7,2]]},"613":{"position":[[4,2]]},"1027":{"position":[[8,2]]},"1296":{"position":[[9,2]]},"1417":{"position":[[8,2]]},"2355":{"position":[[5,2]]},"2437":{"position":[[7,2]]},"2439":{"position":[[7,2]]},"3741":{"position":[[5,2]]}}}],["高频",{"_index":794,"t":{"1822":{"position":[[8,2]]}}}],["默认",{"_index":5,"t":{"12":{"position":[[0,2]]},"507":{"position":[[10,2]]},"682":{"position":[[11,2]]},"710":{"position":[[11,2]]},"946":{"position":[[6,2]]},"1591":{"position":[[11,2]]},"1593":{"position":[[12,2]]},"1595":{"position":[[12,2]]},"1597":{"position":[[12,2]]},"2082":{"position":[[6,2]]},"2114":{"position":[[6,2]]},"2118":{"position":[[8,2]]},"2284":{"position":[[18,2]]},"2295":{"position":[[8,2]]},"2695":{"position":[[7,2]]},"2874":{"position":[[10,2]]},"3441":{"position":[[21,2]]},"3586":{"position":[[9,2]]},"3631":{"position":[[6,2]]},"3633":{"position":[[6,2]]},"3645":{"position":[[6,2]]},"3675":{"position":[[17,2]]}}}],["默认值",{"_index":1178,"t":{"3663":{"position":[[24,3]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":3,"t":"Furion 从 v2.15.3+ 版本开始,支持全平台应用程序开发,包括 Web,控制台,WinForm,WPF,Xamarin/MAUI 等。 在控制台中使用示例: using Furion; using Furion.DependencyInjection; using Furion.RemoteRequest.Extensions; using Microsoft.Extensions.DependencyInjection; using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { // 创建一个服务容器 var services = Inject.Create(); // 注册服务 services.AddRemoteRequest(); // 所有服务注册完毕后调用 Build() 构建 services.Build(); // 使用 var helloService = App.GetService(); Console.WriteLine(helloService.SayHello()); Console.WriteLine(\"=============\"); var baidu = \"https://www.baidu.com\".GetAsStringAsync().GetAwaiter().GetResult(); Console.WriteLine(baidu); } } public interface IHelloService { string SayHello(); } public class HelloService : IHelloService, ITransient { public string SayHello() { return \"Hello Furion.\"; } } } 以上代码通过 var services = Inject.Create(); 创建一个服务集合,最后通过 services.Build() 即可完成初始化。","s":"5. 在控制台中使用","u":"/blog/console","h":"","p":2},{"i":5,"t":"简介​ 在 .NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。 这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。","s":"7. GlobalUsings 的使用","u":"/blog/global-usings","h":"","p":4},{"i":7,"t":"在 .NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。 这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。","s":"简介","u":"/blog/global-usings","h":"#简介","p":4},{"i":9,"t":"启用 GlobalUsings 机制需要以下两个步骤: 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs 编辑项目的 .csproj 文件,添加 enable,注意是在 中添加,通常和 同父同级","s":"必要配置","u":"/blog/global-usings","h":"#必要配置","p":4},{"i":11,"t":"配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下: Furion 推荐的全局命名空间 global using Furion; global using Furion.DatabaseAccessor; global using Furion.DataEncryption; global using Furion.DataValidation; global using Furion.DependencyInjection; global using Furion.DynamicApiController; global using Furion.Extensions; global using Furion.FriendlyException; global using Mapster; global using Microsoft.AspNetCore.Authorization; global using Microsoft.AspNetCore.Http; global using Microsoft.AspNetCore.Mvc; global using Microsoft.CodeAnalysis; global using Microsoft.EntityFrameworkCore; global using System.ComponentModel.DataAnnotations; 注意必须以 global 开头! 小知识 一般推荐把实体类的命名空间也放进去,因为仓储 IRepository 使用的频率非常高。 另外推荐大家在 Visual Studio 中安装 CodeMaid 插件哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒! 个别情况 可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如: global using global::Furion; 接下来在代码中使用: // 无需 using Furion 的命名空间了哦,清爽了不少 namespace Your.Application; public class DefaultAppService : IDynamicApiController { private readonly IRepository _boardCardRepository; private readonly IRepository _boardGroupRepository; private readonly IRepository _boardCardAttachmentRepository; private readonly IRepository _boardCardUserRepository; } // ....","s":"基本使用","u":"/blog/global-usings","h":"#基本使用","p":4},{"i":13,"t":"实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下: // global using global::System; global using global::System.Collections.Generic; global using global::System.IO; global using global::System.Linq; global using global::System.Net.Http; global using global::System.Threading; global using global::System.Threading.Tasks; 也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。","s":"默认全局 using","u":"/blog/global-usings","h":"#默认全局-using","p":4},{"i":15,"t":"文件下载​ [HttpGet, NonUnify] public IActionResult FileDownload(string path, string fileName) { string filePath = \"这里获取完整的文件下载路径\"; return new FileStreamResult(new FileStream(filePath, FileMode.Open), \"application/octet-stream\") { FileDownloadName = fileName }; } 关于前端获取文件名 如果前端获取不到文件夹,可添加以下配置: _httpContextAccessor.HttpContext.Response.Headers.Add(\"Content-Disposition\", $\"attachment; filename={文件名}\"); _httpContextAccessor.HttpContext.Response.Headers.Add(\"Access-Control-Expose-Headers\", \"Content-Disposition\");","s":"2. 文件上传下载","u":"/blog/fileupload-download","h":"","p":14},{"i":17,"t":"[HttpGet, NonUnify] public IActionResult FileDownload(string path, string fileName) { string filePath = \"这里获取完整的文件下载路径\"; return new FileStreamResult(new FileStream(filePath, FileMode.Open), \"application/octet-stream\") { FileDownloadName = fileName }; } 关于前端获取文件名 如果前端获取不到文件夹,可添加以下配置: _httpContextAccessor.HttpContext.Response.Headers.Add(\"Content-Disposition\", $\"attachment; filename={文件名}\"); _httpContextAccessor.HttpContext.Response.Headers.Add(\"Access-Control-Expose-Headers\", \"Content-Disposition\");","s":"文件下载","u":"/blog/fileupload-download","h":"#文件下载","p":14},{"i":19,"t":"[HttpPost, NonUnify] public async Task UploadFileAsync(List files) { // 保存到网站根目录下的 uploads 目录 var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, \"uploads\"); if(!Directory.Exists(savePath)) Directory.CreateDirectory(savePath); long size = files.Sum(f => f.Length); foreach (var formFile in files) { if (formFile.Length > 0) { // 避免文件名重复,采用 GUID 生成 var filePath = Path.Combine(savePath, Guid.NewGuid().ToString(\"N\") + Path.GetExtension(formFile.FileName)); // 可以替代为你需要存储的真实路径 using (var stream = System.IO.File.Create(filePath)) { await formFile.CopyToAsync(stream); } } } // 在动态 API 直接返回对象即可,无需 OK 和 IActionResult return Ok(new { count = files.Count, size }); } 关于使用axios上传文件,方法获取到参数files.Count=0 axios请求配置 let formData = new FormData(); formData.append(\"files\", this.file); //files需与方法里的参数files名称一样 let config = { headers: { \"Content-Type\": \"multipart/form-data\", }, }; axios.post(this.uploadURL, formData, config).then((res) => {//需引入axios console.log(res); });","s":"文件上传","u":"/blog/fileupload-download","h":"#文件上传","p":14},{"i":21,"t":"HttpContext 重大调整​ 在 ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。 虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。","s":"1. HttpContext 应用","u":"/blog/httpcontext","h":"","p":20},{"i":23,"t":"在 ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。 虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。","s":"HttpContext 重大调整","u":"/blog/httpcontext","h":"#httpcontext-重大调整","p":20},{"i":26,"t":"在 ControllerBase 派生类中,我们可以直接通过 HttpContext 属性获取 HttpContext 对象。","s":"在 ControllerBase 派生类中","u":"/blog/httpcontext","h":"#在-controllerbase-派生类中","p":20},{"i":28,"t":"在 Furion 框架中,默认已经注册了 IHttpContextAccessor 服务,所以我们可以通过构造函数注入该对象获取。 public class AppService { public AppService(IHttpContextAccessor httpContextAccessor) { var httpContext = httpContextAccessor.HttpContext; } }","s":"通过注入 IHttpContextAccessor","u":"/blog/httpcontext","h":"#通过注入-ihttpcontextaccessor","p":20},{"i":30,"t":"App 静态类也提供了 App.HttpContext 获取 HttpContext 对象。","s":"通过 App.HttpContext","u":"/blog/httpcontext","h":"#通过-apphttpcontext","p":20},{"i":32,"t":"Furion 框架也提供了一些常用的 HttpContext 拓展方法","s":"HttpContext 拓展方法","u":"/blog/httpcontext","h":"#httpcontext-拓展方法","p":20},{"i":34,"t":"var attribute = httpContext.GetMetadata();","s":"获取当前请求的特性","u":"/blog/httpcontext","h":"#获取当前请求的特性","p":20},{"i":36,"t":"httpContext.SigninToSwagger(\"你的token\");","s":"设置 Swagger 自动授权","u":"/blog/httpcontext","h":"#设置-swagger-自动授权","p":20},{"i":38,"t":"httpContext.SignoutToSwagger();","s":"退出 Swagger 授权","u":"/blog/httpcontext","h":"#退出-swagger-授权","p":20},{"i":40,"t":"var ipv4 = httpContext.GetLocalIpAddressToIPv4(); var ipv6 = httpContext.GetLocalIpAddressToIPv6();","s":"获取本地 IP 地址","u":"/blog/httpcontext","h":"#获取本地-ip-地址","p":20},{"i":42,"t":"var ipv4 = httpContext.GetRemoteIpAddressToIPv4(); var ipv6 = httpContext.GetRemoteIpAddressToIPv6();","s":"获取客户端 IP 地址","u":"/blog/httpcontext","h":"#获取客户端-ip-地址","p":20},{"i":44,"t":"2021 年 08 月 11 日,微软发布了 .NET 6 Preview 7 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.2 版本。 Furion .NET 6 Preview 7 源码地址","s":"6. .NET 6 Preview 7 尝鲜","u":"/blog/net6-preview7","h":"","p":43},{"i":46,"t":"尝鲜之前,首先先安装 .NET 6 Preview 7 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0 下载对应系统和处理器版本即可。","s":"安装 .NET 6 Preview 6 SDK","u":"/blog/net6-preview7","h":"#安装-net-6-preview-6-sdk","p":43},{"i":48,"t":"编辑所有 .csproj 项目,修改 net5.0net6.0。 同时升级所有 Microsoft 和 Furion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1。","s":"旧项目升级","u":"/blog/net6-preview7","h":"#旧项目升级","p":43},{"i":51,"t":"目前 .NET 6 Preview 7 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 4.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16 已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。 特别说明 如果使用 Visual Studio Code 开发,可忽略此选项。","s":"升级 Visual Studio 2019","u":"/blog/net6-preview7","h":"#升级-visual-studio-2019","p":43},{"i":53,"t":"Furion v3.0.0-rc.2 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.2。 安装脚手架,打开 CMD/Powershell 执行以下命令: dotnet new --install Furion.Template.Api::3.0.0-rc.2 创建项目 dotnet new furionapi -n FurionNET6","s":"第一个例子","u":"/blog/net6-preview7","h":"#第一个例子","p":43},{"i":55,"t":"打开浏览器查看效果即可。","s":"打开并启动项目","u":"/blog/net6-preview7","h":"#打开并启动项目","p":43},{"i":57,"t":"2021 年 06 月 18 日,微软发布了 .NET 6 Preview 5 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-preview.5.21301.9 版本。 Furion .NET 6 Preview 5 源码地址","s":"3. .NET 6 Preview 5 尝鲜","u":"/blog/net6-preview5","h":"","p":56},{"i":60,"t":"尝鲜之前,首先先安装 .NET 6 Preview 5 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0 下载对应系统和处理器版本即可。","s":"安装 .NET 6 Preview 5 SDK","u":"/blog/net6-preview5","h":"#安装-net-6-preview-5-sdk","p":56},{"i":62,"t":"目前 .NET 6 Preview 5 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 2.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16 已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。 特别说明 如果使用 Visual Studio Code 开发,可忽略此选项。","s":"升级 Visual Studio 2019","u":"/blog/net6-preview5","h":"#升级-visual-studio-2019","p":56},{"i":64,"t":"Furion v3.0.0-preview.5.21301.9 目前提供了所有类型的脚手架,版本号统一 3.0.0-preview.5.21301.9。 安装脚手架,打开 CMD/Powershell 执行以下命令: dotnet new --install Furion.Template.Api::3.0.0-preview.5.21301.9 创建项目 dotnet new furionapi -n FurionNET6","s":"第一个例子","u":"/blog/net6-preview5","h":"#第一个例子","p":56},{"i":66,"t":"打开浏览器查看效果即可。","s":"打开并启动项目","u":"/blog/net6-preview5","h":"#打开并启动项目","p":56},{"i":68,"t":"2021 年 07 月 15 日,微软发布了 .NET 6 Preview 6 版本,Furion 在当天第一时间适配了该版本,并发布 Furion v3.0.0-rc.1 版本。 Furion .NET 6 Preview 6 源码地址","s":"4. .NET 6 Preview 6 尝鲜","u":"/blog/net6-preview6","h":"","p":67},{"i":70,"t":"尝鲜之前,首先先安装 .NET 6 Preview 6 SDK,下载地址:https://dotnet.microsoft.com/download/dotnet/6.0 下载对应系统和处理器版本即可。","s":"安装 .NET 6 Preview 6 SDK","u":"/blog/net6-preview6","h":"#安装-net-6-preview-6-sdk","p":67},{"i":72,"t":"编辑所有 .csproj 项目,修改 net5.0net6.0。 同时升级所有 Microsoft 和 Furion 包为最新版本,Furion 最新版本为:v3.0.0-rc.1。","s":"旧项目升级","u":"/blog/net6-preview6","h":"#旧项目升级","p":67},{"i":75,"t":"目前 .NET 6 Preview 6 支持使用 Visual Studio 2019 Preview 16.11.0 Preview 3.0 版本,注意是 Preview 最新版本。下载地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=enterprise&ch=pre&rel=16 已经安装了 Visual Studio 2019 Preview 版本的朋友直接升级到最新版即可。 特别说明 如果使用 Visual Studio Code 开发,可忽略此选项。","s":"升级 Visual Studio 2019","u":"/blog/net6-preview6","h":"#升级-visual-studio-2019","p":67},{"i":77,"t":"Furion v3.0.0-rc.1 目前提供了所有类型的脚手架,版本号统一 3.0.0-rc.1。 安装脚手架,打开 CMD/Powershell 执行以下命令: dotnet new --install Furion.Template.Api::3.0.0-rc.1 创建项目 dotnet new furionapi -n FurionNET6","s":"第一个例子","u":"/blog/net6-preview6","h":"#第一个例子","p":67},{"i":79,"t":"打开浏览器查看效果即可。","s":"打开并启动项目","u":"/blog/net6-preview6","h":"#打开并启动项目","p":67},{"i":81,"t":"让 .NET 开发更简单,更通用,更流行。","s":"1.1 介绍","u":"/docs/","h":"","p":80},{"i":83,"t":"无私奉献不是天方夜谭,有时候,我们也可以做到。","s":"💐 序言","u":"/docs/","h":"#-序言","p":80},{"i":85,"t":"故事是这样子的: 自微软宣布 .NET 5 平台消息之后,就琢磨着开发一个基于 .NET 5 平台的开发框架,想做第一个吃 .NET 5 螃蟹尝鲜之人。 一开始想到了 Lazier 作为框架的名称,中文有 更懒 的意思。符合我的 “一切从简,只为了更懒” 的开发理念。 但是 更懒 和 更烂 中文读音相近且没有特色,而且寓意也不是很好,对此换名问题苦恼了好些天。 刚好有一次在 QQ 群中无意间刷到了群友发的 “先知” 单词:“Furion [fu:rɪən]”,就那一刻,就认定它了! Furion 中文有 先知 的意思,恰好符合我创造框架的初衷。所以,Furion 就诞生了。","s":"🍕 名字的由来","u":"/docs/","h":"#-名字的由来","p":80},{"i":87,"t":"国内文档:https://furion.baiqian.ltd 国外文档:https://furion.icu","s":"🍟 文档地址","u":"/docs/","h":"#-文档地址","p":80},{"i":89,"t":"Gitee:https://gitee.com/dotnetchina/Furion GitHub:https://github.com/monksoul/Furion Nuget:https://www.nuget.org/packages/Furion","s":"🌭 开源地址","u":"/docs/","h":"#-开源地址","p":80},{"i":91,"t":"包类型 名称 版本 描述 Furion Furion 核心包 Furion.Pure Furion 纯净版包(不含 EFCore) Furion.Extras.Authentication.JwtBearer Furion Jwt 拓展包 Furion.Extras.DependencyModel.CodeAnalysis Furion CodeAnalysis 拓展包 Furion.Extras.ObjectMapper.Mapster Furion Mapster 拓展包 Furion.Extras.DatabaseAccessor.SqlSugar Furion SqlSugar 拓展包 Furion.Extras.DatabaseAccessor.Dapper Furion Dapper 拓展包 Furion.Extras.DatabaseAccessor.MongoDB Furion MongoDB 拓展包 Furion.Extras.Logging.Serilog Furion Serilog 拓展包 Furion.Xunit Furion Xunit 单元测试拓展包 Furion.Pure.Xunit Furion 纯净版包 Xunit 单元测试拓展包(不含 EFCore) Furion.Tools.CommandLine Furion Tools 命令行参数解析","s":"🥥 框架拓展包","u":"/docs/","h":"#-框架拓展包","p":80},{"i":93,"t":"Furion + EFCore​ 模板类型 名称 版本 描述 Furion.Template.Mvc Mvc 模板 Furion.Template.Api WebApi 模板 Furion.Template.App Mvc/WebApi 模板 Furion.Template.Razor RazorPages 模板 Furion.Template.RazorWithWebApi RazorPages/WebApi 模板 Furion.Template.Blazor Blazor 模板 Furion.Template.BlazorWithWebApi Blazor/WebApi 模板 Furion + SqlSugar​ 模板类型 名称 版本 描述 Furion.SqlSugar.Template.Mvc Mvc 模板 Furion.SqlSugar.Template.Api WebApi 模板 Furion.SqlSugar.Template.App Mvc/WebApi 模板 Furion.SqlSugar.Template.Razor RazorPages 模板 Furion.SqlSugar.Template.RazorWithWebApi RazorPages/WebApi 模板 Furion.SqlSugar.Template.Blazor Blazor 模板 Furion.SqlSugar.Template.BlazorWithWebApi Blazor/WebApi 模板 如何使用脚手架","s":"🍄 框架脚手架","u":"/docs/","h":"#-框架脚手架","p":80},{"i":95,"t":"全新面貌:基于 .NET5/6/7+ 平台,没有历史包袱 极少依赖:框架只依赖两个第三方包 极易入门:只需要一个 Inject() 即可完成配置 极速开发:内置丰富的企业应用开发功能 极其灵活:轻松面对多变复杂的需求 极易维护:采用独特的架构思想,只为长久维护设计 完整文档:提供完善的开发文档 跨全平台:支持所有主流操作系统及 .NET 全部项目类型","s":"🍎 框架特点","u":"/docs/","h":"#-框架特点","p":80},{"i":98,"t":"Furion 为了追求极速入门,极致性能,尽可能的不使用或减少第三方依赖。目前 Furion 仅集成了以下两个依赖: MiniProfiler:性能分析和监听必备 Swashbuckle:Swagger 接口文档 麻雀虽小五脏俱全。Furion 即使只集成了这两个依赖,但是主流的 依赖注入/控制反转,AOP 面向切面编程,事件总线,数据验证,数据库操作 等等一个都不少。","s":"🥐 框架依赖","u":"/docs/","h":"#-框架依赖","p":80},{"i":100,"t":"Visual Studio 2019 16.8 + .NET 5 SDK + .Net Standard 2.1 +","s":"🥗 环境要求","u":"/docs/","h":"#-环境要求","p":80},{"i":102,"t":"运行环境 Windows Linux MacOS/MacOS M1 CPU Docker/K8S/K3S/Rancher Xamarin/MAUI 数据库 SqlServer Sqlite Azure Cosmos MySql MariaDB PostgreSQL InMemoryDatabase Oracle Firebird 达梦数据库 MongoDB 应用部署 Kestrel Nginx Jexus IIS Apache PM2 Supervisor 独立发布/单文件 容器(Docker/K8S/K3S/Rancher/PodMan)","s":"🥪 支持平台","u":"/docs/","h":"#-支持平台","p":80},{"i":104,"t":"Furion 目前采用 Visual Studio 2019 16.8 自带性能测试和 JMeter 进行测试,由于篇幅有限,只贴部分测试图,测试结果如下:","s":"🍖 关于性能","u":"/docs/","h":"#-关于性能","p":80},{"i":106,"t":"Furion 遵循 MIT 开源协议,欢迎大家提交 PR 或 Issue。 如果要为项目做出贡献,请查看 贡献指南。感谢每一位为 Furion 贡献代码的朋友。","s":"🍻 贡献代码","u":"/docs/","h":"#-贡献代码","p":80},{"i":108,"t":"小知识 Furion 提供了非常强大的 LoggingMonitor 审计日志功能,可直接使用:LoggingMonitor 文档","s":"5.4 请求审计日志","u":"/docs/audit","h":"","p":107},{"i":110,"t":"在一个企业应用系统中,用户对系统所有的操作包括请求、数据库操作等等都应该记录起来,那么这些日志我们称为操作日志,也可以说审计日志。 关于数据库操作审计日志 如需实现 sql 操作,数据库操作 的审计日志可查阅 【9.22 审计日志章节】","s":"5.4.1 审计日志","u":"/docs/audit","h":"#541-审计日志","p":107},{"i":112,"t":"实现原理 在这里,结合 【5.3 筛选器】 实现请求审计日志功能。 请求审计日志通常指的是记录请求地址,来源地址,操作人,传递参数等。这个主要是通过 IAsyncActionFilter 筛选器实现,如: 定义 RequestAuditFilter 并实现 IAsyncActionFilter using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Security.Claims; using System.Threading.Tasks; namespace Furion.Web.Core { public class RequestAuditFilter : IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { //============== 这里是执行方法之前获取数据 ==================== // 获取控制器、路由信息 var actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; // 获取请求的方法 var method = actionDescriptor.MethodInfo; // 获取 HttpContext 和 HttpRequest 对象 var httpContext = context.HttpContext; var httpRequest = httpContext.Request; // 获取客户端 Ipv4 地址 var remoteIPv4 = httpContext.GetRemoteIpAddressToIPv4(); // 获取请求的 Url 地址 var requestUrl = httpRequest.GetRequestUrlAddress(); // 获取来源 Url 地址 var refererUrl = httpRequest.GetRefererUrlAddress(); // 获取请求参数(写入日志,需序列化成字符串后存储) var parameters = context.ActionArguments; // 获取操作人(必须授权访问才有值)\"userId\" 为你存储的 claims type,jwt 授权对应的是 payload 中存储的键名 var userId = httpContext.User?.FindFirstValue(\"userId\"); // 请求时间 var requestedTime = DateTimeOffset.Now; //============== 这里是执行方法之后获取数据 ==================== var actionContext = await next(); // 获取返回的结果 var returnResult = actionContext.Result; // 判断是否请求成功,没有异常就是请求成功 var isRequestSucceed = actionContext.Exception == null; // 获取调用堆栈信息,提供更加简单明了的调用和异常堆栈 var stackTrace = EnhancedStackTrace.Current(); // 这里写入日志,或存储到数据库中!!!~~~~~~~~~~~~~~~~~~~~ } } } 注册 RequestAuditFilter 筛选器 services.AddMvcFilter();","s":"5.4.2 请求审计日志","u":"/docs/audit","h":"#542-请求审计日志","p":107},{"i":114,"t":"小知识 Furion 提供了非常强大的 LoggingMonitor 审计日志功能,可直接使用:LoggingMonitor 文档 ┏━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━ ┣ Furion.Application.TestLoggerServices.GetPerson (Furion.Application) ┣ ┣ 控制器名称: TestLoggerServices ┣ 操作名称: GetPerson ┣ 路由信息: [area]: ; [controller]: test-logger; [action]: person ┣ 请求方式: POST ┣ 请求地址: https://localhost:44316/api/test-logger/person/11 ┣ 来源地址: https://localhost:44316/api/index.html ┣ 浏览器标识: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62 ┣ 客户端 IP 地址: 0.0.0.1 ┣ 服务端 IP 地址: 0.0.0.1 ┣ 服务端运行环境: Development ┣ 执行耗时: 31ms ┣ ━━━━━━━━━━━━━━━ 授权信息 ━━━━━━━━━━━━━━━ ┣ JWT Token: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY1ODcxNjc5NywibmJmIjoxNjU4NzE2Nzk3LCJleHAiOjE2NTg3MTc5OTcsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.VYZkwwqCwlUy3aJjuL-og62I0rkxNQ96kSjEm3VgXtg ┣ ┣ UserId (integer): 1 ┣ Account (string): admin ┣ iat (integer): 1658716797 ┣ nbf (integer): 1658716797 ┣ exp (integer): 1658717997 ┣ iss (string): dotnetchina ┣ aud (string): powerby Furion ┣ ━━━━━━━━━━━━━━━ 参数列表 ━━━━━━━━━━━━━━━ ┣ Content-Type: ┣ ┣ id (Int32): 11 ┣ ━━━━━━━━━━━━━━━ 返回信息 ━━━━━━━━━━━━━━━ ┣ 类型: Furion.Application.Persons.PersonDto ┣ 返回值: {\"Id\":11,\"Name\":null,\"Age\":0,\"Address\":null,\"PhoneNumber\":null,\"QQ\":null,\"CreatedTime\":\"0001-01-01T00:00:00+00:00\",\"Childrens\":null,\"Posts\":null} ┗━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━","s":"5.4.3 LoggingMonitor 审计日志","u":"/docs/audit","h":"#543-loggingmonitor-审计日志","p":107},{"i":116,"t":"与我们交流 给 Furion 提 Issue。","s":"5.4.4 反馈与建议","u":"/docs/audit","h":"#544-反馈与建议","p":107},{"i":119,"t":"鉴权实际上就是一种身份认证。 由用户提供凭据,然后将其与存储在操作系统、数据库、应用或资源中的凭据进行比较。 在授权过程中,如果凭据匹配,则用户身份验证成功,可执行已向其授权的操作。 授权指判断允许用户执行的操作的过程。 也可以将身份验证理解为进入空间(例如服务器、数据库、应用或资源)的一种方式,而授权是用户可以对该空间(服务器、数据库或应用)内的哪些对象执行哪些操作。","s":"15.1 什么是鉴权","u":"/docs/auth-control","h":"#151-什么是鉴权","p":117},{"i":121,"t":"HTTP Basic Authentication 这是 HTTP 协议实现的基本认证方式,我们在浏览网页时,从浏览器正上方弹出的对话框要求我们输入账号密码,正是使用了这种认证方式 Session + Cookie 利用服务器端的 session(会话)和浏览器端的 cookie 来实现前后端的认证,由于 http 请求时是无状态的,服务器正常情况下是不知道当前请求之前有没有来过,这个时候我们如果要记录状态,就需要在服务器端创建一个会话(session),将同一个客户端的请求都维护在各自的会话中,每当请求到达服务器端的时候,先去查一下该客户端有没有在服务器端创建 session,如果有则已经认证成功了,否则就没有认证。 Token 客户端在首次登录以后,服务端再次接收 HTTP 请求的时候,就只认 Token 了,请求只要每次把 Token 带上就行了,服务器端会拦截所有的请求,然后校验 Token 的合法性,合法就放行,不合法就返回 401(鉴权失败) Token验证比较灵活,适用于大部分场景。常用的 Token 鉴权方式的解决方案是 JWT,JWT 是通过对带有相关用户信息的进行加密,加密的方式比较灵活,可以根据需求具体设计。 OAuth OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容,为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。我们常见的提供 OAuth 认证服务的厂商有支付宝、QQ 和微信。 OAuth 协议又有 1.0 和 2.0 两个版本。相比较 1.0 版,2.0 版整个授权验证流程更简单更安全,也是目前最主要的用户身份验证和授权方式。","s":"15.1.1 常见的鉴权方式","u":"/docs/auth-control","h":"#1511-常见的鉴权方式","p":117},{"i":123,"t":"配置之前 在添加授权服务之前,请先确保 Startup.cs 中 Configure 是否添加了以下两个中间件: app.UseAuthentication(); app.UseAuthorization();","s":"15.2 如何使用","u":"/docs/auth-control","h":"#152-如何使用","p":117},{"i":125,"t":"使用说明 如果您使用的是 WebAPI,则该小节可忽略,通常 WebAPI 使用的是 JWT 授权方式,而非 Cookie。 // Cookies单独身份验证 services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, b => { b.LoginPath = \"/Home/Login\"; });","s":"15.2.1 添加 Cookie 身份验证","u":"/docs/auth-control","h":"#1521-添加-cookie-身份验证","p":117},{"i":127,"t":"安装 Furion.Extras.Authentication.JwtBearer 拓展包 在 Startup.cs 中注册 AddJwt 服务,注意,必须在 .AddControllers() 之前注册!! // 默认授权机制,需授权的即可(方法)需贴 `[Authorize]` 特性 services.AddJwt(); // 启用全局授权,这样每个接口都必须授权才能访问,无需贴 `[Authorize]` 特性,推荐!!!!!!!!!❤️ // services.AddJwt(enableGlobalAuthorize:true); 注:如果项目使用了 services.AddSignalR(); 服务,那么该服务必须在 services.AddJwt 之后注册。 额外补充 默认 JwtHandler 代码: using Furion.Authorization; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using System.Threading.Tasks; namespace FurionApi.Web.Core; public class JwtHandler : AppAuthorizeHandler { public override Task PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext) { // 这里写您的授权判断逻辑,授权通过返回 true,否则返回 false return Task.FromResult(true); } } 自定义 Jwt 配置(默认无需配置) { \"JWTSettings\": { \"ValidateIssuerSigningKey\": true, // 是否验证密钥,bool 类型,默认true \"IssuerSigningKey\": \"你的密钥\", // 密钥,string 类型,必须是复杂密钥,长度大于16 \"ValidateIssuer\": true, // 是否验证签发方,bool 类型,默认true \"ValidIssuer\": \"签发方\", // 签发方,string 类型 \"ValidateAudience\": true, // 是否验证签收方,bool 类型,默认true \"ValidAudience\": \"签收方\", // 签收方,string 类型 \"ValidateLifetime\": true, // 是否验证过期时间,bool 类型,默认true,建议true \"ExpiredTime\": 20, // 过期时间,long 类型,单位分钟,默认20分钟 \"ClockSkew\": 5, // 过期时间容错值,long 类型,单位秒,默认 5秒 \"Algorithm\": \"HS256\" // 加密算法,string 类型,默认 HS256 } } 系统安全注意事项 Furion 框架为了方便开发,已经自动添加了 Jwt 默认配置。建议每个项目都应该单独配置 IssuerSigningKey,ValidIssuer,ValidAudience 这三个。否则同样用了 Furion 框架生成的 Token 可能存在相互访问各自系统的风险。 Algorithm 算法支持列表 目前支持的加密算法 HS256 HS384 HS512 PS256 PS384 PS512 RS256:需自行实现算法 RS384:需自行实现算法 RS512:需自行实现算法 ES256 ES256K ES384 ES512 EdDSA 详情请查阅 SecurityAlgorithms ❤️ ❤️ 生成 Token 通常我们需要在登录成功之后生成 JWT Token 并返回,可通过 JWTEncryption.Encrypt 静态方法生成,如: 关于 Token 的值 字典 Dictionary 中的值支持所有基元类型和基元类型组成的值,但应尽可能避免使用 数组 值。 // 生成 token var accessToken = JWTEncryption.Encrypt(new Dictionary() { { \"UserId\", user.Id }, // 存储Id { \"Account\",user.Account }, // 存储用户名 });","s":"15.2.2 添加 Jwt 身份验证","u":"/docs/auth-control","h":"#1522-添加-jwt-身份验证","p":117},{"i":129,"t":"// JWT 和 Cookies 混合身份验证 services.AddJwt(options => { options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme; }) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => { options.LoginPath = \"/Home/Login\"; }); 特别注意 如果启用了混合身份验证后,WebApi 需在控制器/Action 中指定 Scheme 类型为 JwtBearerDefaults.AuthenticationScheme,如: [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] public class ApiServices : IDynamicApiController { } 如果不设置 Scheme 那么在混合授权的 Swagger 中将默认采用 Cookie 方式,也就是授权失败会将整个 登录页面 内容返回。","s":"15.2.3 混合身份验证","u":"/docs/auth-control","h":"#1523-混合身份验证","p":117},{"i":131,"t":"Furion 框架提供了非常灵活的高级策略鉴权和授权方式,通过该策略授权方式可以实现任何自定义授权。","s":"15.3 高级自定义授权","u":"/docs/auth-control","h":"#153-高级自定义授权","p":117},{"i":133,"t":"Furion 框架提供了 AppAuthorizeHandler 策略授权处理程序提供基类,只需要创建自己的 Handler 继承它即可。如:JwtHandler: using Furion.Authorization; using Furion.Core; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.IdentityModel.JsonWebTokens; namespace Furion.Web.Core { /// /// JWT 授权自定义处理程序 /// public class JwtHandler : AppAuthorizeHandler { /// /// 请求管道 /// /// /// /// public override Task PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext) { // 此处已经自动验证 Jwt token的有效性了,无需手动验证 // 检查权限,如果方法是异步的就不用 Task.FromResult 包裹,直接使用 async/await 即可 return Task.FromResult(CheckAuthorzie(httpContext)); } /// /// 检查权限 /// /// /// private static bool CheckAuthorzie(DefaultHttpContext httpContext) { // 获取权限特性 var securityDefineAttribute = httpContext.GetMetadata(); if (securityDefineAttribute == null) return true; return \"查询数据库返回是否有权限\"; } } } 之后注册 JwtHandler 即可: services.AddJwt();","s":"15.3.1 AppAuthorizeHandler","u":"/docs/auth-control","h":"#1531-appauthorizehandler","p":117},{"i":135,"t":"有些时候可能针对不同的平台采用不一样的授权方式,比如合作信任的第三方机构可以免授权,这时候我们只需要重写 HandleAsync 方法即可。如: using Furion.Authorization; using Furion.Core; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using System.Threading.Tasks; namespace Furion.Web.Core { public class JwtHandler : AppAuthorizeHandler { public override async Task HandleAsync(AuthorizationHandlerContext context) { // 常规授权(可以判断是不是第三方) var isAuthenticated = context.User.Identity.IsAuthenticated; // 第三方授权自定义 if(是第三方){ foreach (var requirement in pendingRequirements) { // 授权成功 context.Succeed(requirement); } } // 授权失败 else context.Fail(); } } }","s":"15.3.2 完全自定义授权","u":"/docs/auth-control","h":"#1532-完全自定义授权","p":117},{"i":137,"t":"默认情况下,所有的路由都是允许匿名访问的,所以如果需要对某个 Action 或 Controller 设定授权访问,只需要在 Action 或 Controller 贴 [AppAuthorize] 或 [Authorize] 特性即可。 如果需要对特定的 Action 或 Controller 允许匿名访问,则贴 [AllowAnonymous] 即可。","s":"15.4 授权特性及全局授权","u":"/docs/auth-control","h":"#154-授权特性及全局授权","p":117},{"i":139,"t":"services.AddJwt(enableGlobalAuthorize:true);","s":"15.4.1 全局授权","u":"/docs/auth-control","h":"#1541-全局授权","p":117},{"i":141,"t":"如果需要对特定的 Action 或 Controller 允许匿名访问,则贴 [AllowAnonymous] 即可。","s":"15.4.2 匿名访问","u":"/docs/auth-control","h":"#1542-匿名访问","p":117},{"i":144,"t":"当用户登录成功之后,返回 accessToken 字符串,之后通过 JWTEncryption.GenerateRefreshToken() 获取 刷新Token,并通过响应报文头返回,如: // token var accessToken = JWTEncryption.Encrypt(new Dictionary() { { \"UserId\", user.Id }, // 存储Id { \"Account\",user.Account }, // 存储用户名 }); // 获取刷新 token var refreshToken = JWTEncryption.GenerateRefreshToken(accessToken, 43200); // 第二个参数是刷新 token 的有效期(分钟),默认三十天 // 设置响应报文头 httpContextAccessor.HttpContext.Response.Headers[\"access-token\"] = accessToken; httpContextAccessor.HttpContext.Response.Headers[\"x-access-token\"] = refreshToken; 用户登录成功之后把 accessToken 和 refreshToken 一起返回给客户端存储起来。","s":"15.5.1 后端登录部分","u":"/docs/auth-control","h":"#1551-后端登录部分","p":117},{"i":146,"t":"using Furion.Authorization; using Furion.Core; using Furion.DataEncryption; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using System.Threading.Tasks; namespace Furion.Web.Core { /// /// JWT 授权自定义处理程序 /// public class JwtHandler : AppAuthorizeHandler { /// /// 重写 Handler 添加自动刷新收取逻辑 /// /// /// public override async Task HandleAsync(AuthorizationHandlerContext context) { // 自动刷新 token if (JWTEncryption.AutoRefreshToken(context, context.GetCurrentHttpContext())) { await AuthorizeHandleAsync(context); } else context.Fail(); // 授权失败 } /// /// 验证管道,也就是验证核心代码 /// /// /// /// public override Task PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext) { // 检查权限,如果方法是异步的就不用 Task.FromResult 包裹,直接使用 async/await 即可 return Task.FromResult(true); } } }","s":"15.5.2 后端授权 Handler 部分","u":"/docs/auth-control","h":"#1552-后端授权-handler-部分","p":117},{"i":148,"t":"客户端每次请求需将 accessToken 和 refreshToken 放到请求报文头中传送到服务端,格式为: Authorization: Bearer 你的token X-Authorization: Bearer 你的刷新token Furion 框架提供了 vue/react/angular 客户端请求参考代码:https://gitee.com/dotnetchina/Furion/tree/v4/clients 小建议 建议使用自动生成 Vue/React/Angular 代理方式:5.6 Vue/React/Angular 接口代理 其他补充 在正常开发中,refreshToken 无需每次请求携带,而是 accessToken 即将过期之后携带即可。可以在客户端自行判断 accessToken 是否即将过期。 如果 Token 过期,那么 Furion 将自动根据有效期内的 refreshToken 自动生成新的 AccessToken,并在 响应报文头 中返回,如: access-token: 新的token x-access-token: 新的刷新token 存储新的 Token 前端需要获取 响应报文头 新的 token 和刷新 token 替换之前在客户处存储旧的 token 和刷新 token。","s":"15.5.3 客户端部分","u":"/docs/auth-control","h":"#1553-客户端部分","p":117},{"i":150,"t":"// 获取 `Jwt` 存储的信息 var userId = App.User?.FindFirstValue(\"键\"); 注意引入 System.Security.Claims 命名空间 获取不到 Token 信息说明 请确保 .AddJwt 服务已注册且启用了 全局授权 或该接口(方法)贴有 [Authorize] 特性。","s":"15.6 获取 Jwt 存储的信息","u":"/docs/auth-control","h":"#156-获取-jwt-存储的信息","p":117},{"i":152,"t":"通常在用户登录成功后我们会将 JWT Token 存储到浏览器中,这时候就需要在浏览器端解析 token 里面存储的信息,可以通过调用下面方法实现: TypeScript 版本 /** * 解密 JWT token 的信息 * @param token jwt token 字符串 * @returns object */ function decryptJWT(token: string): any { token = token.replace(/_/g, \"/\").replace(/-/g, \"+\"); var json = decodeURIComponent(escape(window.atob(token.split(\".\")[1]))); return JSON.parse(json); } JavaScript 版本 /** * 解密 JWT token 的信息 * @param token jwt token 字符串 * @returns object */ function decryptJWT(token) { token = token.replace(/_/g, \"/\").replace(/-/g, \"+\"); var json = decodeURIComponent(escape(window.atob(token.split(\".\")[1]))); return JSON.parse(json); } 这样就可以把后端放在 token 里面的信息解析出来了。 小知识 可以在解密之后读取 过期时间 exp 来解决请求时是否需要带刷新 Token,比如即将过期前 5 分钟。","s":"15.7 前端解密 JWT 信息","u":"/docs/auth-control","h":"#157-前端解密-jwt-信息","p":117},{"i":154,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 鉴权授权 知识可查阅 ASP.NET Core - 安全和标识 章节。","s":"15.8 反馈与建议","u":"/docs/auth-control","h":"#158-反馈与建议","p":117},{"i":156,"t":"孤芳自赏 纵你阅人何其多,再无一人恰似我。","s":"1.2 关于作者","u":"/docs/author","h":"","p":155},{"i":158,"t":"百小僧 MonkSoul Rustln","s":"网名","u":"/docs/author","h":"#网名","p":155},{"i":160,"t":"于 2016 年 07 月 14 日,亲自设计了该头像。","s":"专属头像","u":"/docs/author","h":"#专属头像","p":155},{"i":162,"t":"成在经营,败在管理,错在不学习。","s":"个性签名","u":"/docs/author","h":"#个性签名","p":155},{"i":164,"t":"无私奉献不是天方夜谭,有时候,我们也可以做到。","s":"奉献宣言","u":"/docs/author","h":"#奉献宣言","p":155},{"i":166,"t":"开源如同人的脸,好坏一面便知,缺点可能会受到嘲讽批评,优点也会收获赞扬尊重。别担心,他们正在塑造更好的你。","s":"开源初衷","u":"/docs/author","h":"#开源初衷","p":155},{"i":168,"t":"对新技术颇感兴趣,喜欢开源事业,喜欢分享技术,喜欢赛车,喜欢纹身文化,喜欢科技产品,喜欢穿越火线和我的世界游戏。 喜欢逛开源中国、IT 之家、Gitee/Github、刷抖音、看动漫、看美剧。","s":"兴趣爱好","u":"/docs/author","h":"#兴趣爱好","p":155},{"i":170,"t":"https://gitee.com/monksoul https://github.com/monksoul","s":"个人主页","u":"/docs/author","h":"#个人主页","p":155},{"i":172,"t":"小僧不才,自 2008 年 接触 IT 行业有十余载,对互联网主流技术略懂皮毛,最喜欢的编程技术是 Rust 和 React。","s":"技术能力","u":"/docs/author","h":"#技术能力","p":155},{"i":174,"t":"Vim/NeoVim,Visual Studio Code,PostgreSQL,Visual Studio 2022。","s":"常用工具","u":"/docs/author","h":"#常用工具","p":155},{"i":176,"t":"对软件工程、架构、底层、算法、嵌入式/单片机、网络编程等颇感兴趣。","s":"领域兴趣","u":"/docs/author","h":"#领域兴趣","p":155},{"i":179,"t":"基准测试(benchmarking)是一种测量和评估软件性能指标的活动。你可以在某个时候通过基准测试建立一个已知的性能水平(称为基准线),当系统的软硬件环境发生变化之后再进行一次基准测试以确定那些变化对性能的影响。这是基准测试最常见的用途。其他用途包括测定某种负载水平下的性能极限、管理系统或环境的变化、发现可能导致性能问题的条件,等等。","s":"36.3.1 基准测试","u":"/docs/benchmark","h":"#3631-基准测试","p":177},{"i":182,"t":"可重复性:可进行重复性的测试,这样做有利于比较每次的测试结果,得到性能结果的长期变化趋势,为系统调优和上线前的容量规划做参考。 可观测性:通过全方位的监控(包括测试开始到结束,执行机、服务器、数据库),及时了解和分析测试过程发生了什么。 可展示性:相关人员可以直观明了的了解测试结果(web 界面、仪表盘、折线图树状图等形式)。 真实性:测试的结果反映了客户体验到的真实的情况(真实准确的业务场景+与生产一致的配置+合理正确的测试方法)。 可执行性:相关人员可以快速的进行测试验证修改调优(可定位可分析)。","s":"36.3.2.1 特质","u":"/docs/benchmark","h":"#36321-特质","p":177},{"i":184,"t":"为容量规划确定系统和应用程序的极限; 为配置测试的参数和配置选项提供参考依据; 为验收测试确定系统是否具备自己所宣称的能力; 为性能基线的建立提供长期的数据统计来源以及比较基准;","s":"36.3.2.2 意义","u":"/docs/benchmark","h":"#36322-意义","p":177},{"i":186,"t":"BenchmarkDotNet 是 .NET 平台提供的基准测试工具,BenchmarkDotNet 可帮助您将方法转换为基准,跟踪其性能,并共享可重复的测量实验。BenchmarkDotNet 可保护您免受流行的基准测试错误,并在基准设计或获得的测量中出现问题时警告您。结果以用户友好的形式呈现,突出显示了有关实验的所有重要事实。","s":"36.3.3 BenchmarkDotNet","u":"/docs/benchmark","h":"#3633-benchmarkdotnet","p":177},{"i":188,"t":"创建一个 控制台 应用程序,并通过 Nuget 安装 BenchmarkDotNet 拓展包。编写测试: using System; using System.Security.Cryptography; using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Running; namespace MyBenchmarks { public class Md5VsSha256 { private const int N = 10000; private readonly byte[] data; private readonly SHA256 sha256 = SHA256.Create(); private readonly MD5 md5 = MD5.Create(); public Md5VsSha256() { data = new byte[N]; new Random(42).NextBytes(data); } [Benchmark] public byte[] Sha256() => sha256.ComputeHash(data); [Benchmark] public byte[] Md5() => md5.ComputeHash(data); } public class Program { public static void Main(string[] args) { var summary = BenchmarkRunner.Run(); } } }","s":"36.3.3.1 如何使用","u":"/docs/benchmark","h":"#36331-如何使用","p":177},{"i":190,"t":"运行控制器程序,将得到以下结果 BenchmarkDotNet=v0.12.0, OS=Windows 10.0.17763.805 (1809/October2018Update/Redstone5) Intel Core i7-7700K CPU 4.20GHz (Kaby Lake), 1 CPU, 8 logical and 4 physical cores [Host] : .NET Framework 4.7.2 (4.7.3468.0), X64 RyuJIT Net472 : .NET Framework 4.7.2 (4.7.3468.0), X64 RyuJIT NetCoreApp30 : .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), X64 RyuJIT CoreRt30 : .NET CoreRT 1.0.28236.02 @Commit: 741d61493c560ba96e8151f9e56876d4d3828489, X64 AOT Mono : Mono 6.4.0 (Visual Studio), X64 Method Runtime N Mean Error StdDev Ratio Sha256 .NET 4.7.2 1000 7.735 us 0.1913 us 0.4034 us 1.00 Sha256 .NET Core 3.0 1000 3.989 us 0.0796 us 0.0745 us 0.50 Sha256 CoreRt 3.0 1000 4.091 us 0.0811 us 0.1562 us 0.53 Sha256 Mono 1000 13.117 us 0.2485 us 0.5019 us 1.70 Md5 .NET 4.7.2 1000 2.872 us 0.0552 us 0.0737 us 1.00 Md5 .NET Core 3.0 1000 1.848 us 0.0348 us 0.0326 us 0.64 Md5 CoreRt 3.0 1000 1.817 us 0.0359 us 0.0427 us 0.63 Md5 Mono 1000 3.574 us 0.0678 us 0.0753 us 1.24 Sha256 .NET 4.7.2 10000 74.509 us 1.5787 us 4.6052 us 1.00 Sha256 .NET Core 3.0 10000 36.049 us 0.7151 us 1.0025 us 0.49 Sha256 CoreRt 3.0 10000 36.253 us 0.7076 us 0.7571 us 0.49 Sha256 Mono 10000 116.350 us 2.2555 us 3.0110 us 1.58 Md5 .NET 4.7.2 10000 17.308 us 0.3361 us 0.4250 us 1.00 Md5 .NET Core 3.0 10000 15.726 us 0.2064 us 0.1930 us 0.90 Md5 CoreRt 3.0 10000 15.627 us 0.2631 us 0.2461 us 0.89 Md5 Mono 10000 30.205 us 0.5868 us 0.6522 us 1.74","s":"36.3.3.2 查看结果","u":"/docs/benchmark","h":"#36332-查看结果","p":177},{"i":192,"t":"也可以导出各种图表","s":"36.3.3.3 导出报表","u":"/docs/benchmark","h":"#36333-导出报表","p":177},{"i":194,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 BenchmarkDotNet 知识可查阅 BenchmarkDotNet 官网。","s":"36.3.4 反馈与建议","u":"/docs/benchmark","h":"#3634-反馈与建议","p":177},{"i":196,"t":"视频教程 【并发测试视频教程】 文档紧急编写中,可以先看旧文档:https://monksoul.gitbook.io/hoa/","s":"36.4 并发测试","u":"/docs/bingfa","h":"","p":195},{"i":199,"t":"越来越多的开发者使用 Furion 框架进行开发,以下是已知且开源的案例: Admin.NET:基于 Furion 的通用权限管理平台 Abc.Mvc: 基于 NET7 RC1+ Furion + EFCore + Sqlsugar + Pear Layui admin 的 MVC 后台管理框架 🆕 BaseNet: 基于Furion + Pear Admin Layui 快速开发基础框架,包含前端、后台权限控制,到手即用 🆕 TulingMember: 基于 Furion + IView 开发的极简进销管理系统 🆕 WeiXinApi: 基于Furion + SenparcSdk 的微信公众号开发 Demo 🆕 Magic.NET:基于 Furion + Sqlsugar 的通用权限管理平台 🆕 NiuPi: 基于 Furion + Sqlsugar + Vue-Next-Admin 细粒度权限控制的快速开发框架 🆕 考试君:基于 Furion 的在线考试系统 园丁:基于 Furion + Blazor 的超简单后台管理系统 Queer:基于 Furion + Layui 的通用型管理系统 Pear Admin:基于 Furion + PearAdmin 管理系统 JoyAdmin:基于 Furion + iviewadmin 开发的管理系统 YShop:基于 Furion + Vue 开发的移动电商项目 Vboot: 基于 Furion + Vben 开发的快速开发管理平台 如果您使用了 Furion 进行项目开发,可以告诉我们,点击底部的 Edit this page 进行编辑添加。","s":"1.4.1 开源案例","u":"/docs/case","h":"#141-开源案例","p":197},{"i":202,"t":"Startup 类是 ASP.NET Core 应用程序启动默认调用的类,该类是在 Program.cs 中配置: .NET5 方式 Furion.Web.Entry\\Program.cs using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace Furion.Web.Entry { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) { return Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); } } } .NET6 方式 在 .NET6 中微软已不再推荐 UseStartup() 方式。","s":"3.1.1 Startup 类","u":"/docs/appstartup","h":"#311-startup-类","p":200},{"i":204,"t":"Startup 默认有两个重要的方法: ConfigureServices:配置应用所需服务,在该方法中可以添加应用所需要的功能或服务 Configure:配置应用请求处理管道 默认代码如下: Furion.Web.Entry\\Startup.cs using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; namespace Furion.Web.Entry { public class Startup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } } } 在这里,不打算详细讲 Startup 类的具体功能和作用。 了解更多 想了解更多 Startup 知识可查阅 ASP.NET Core - Startup 类 章节。","s":"3.1.1.1 Startup 两个重要方法","u":"/docs/appstartup","h":"#3111-startup-两个重要方法","p":200},{"i":206,"t":"在 Furion 框架中,提供了更为灵活的 Startup 类配置方式,无需在 Web 启用层 中配置,可将配置放到任何项目层。 可能会有读者有疑问,为什么要多此一举呢?原因有几点: Startup 类默认和 Web 应用层 绑定在一起,这样就会导致如果我创建了新的 Web 应用层,Startup 又要重新配置 随着业务的增长,需要集成越来越多的第三方服务,这时候 Startup 类就会变得越来越臃肿,难以维护 Startup 类无法与其他项目类型进行共用 所以,Furion 提供了更加灵活的配置方式:AppStartup。 注意事项 如果 AppStartup 的派生类所在的项目层没有被启动层直接或间接添加引用,那么这个 Startup.cs 就会被忽略,也就是不会自动载入注册。","s":"3.1.2 AppStartup","u":"/docs/appstartup","h":"#312-appstartup","p":200},{"i":208,"t":"AppStartup 是一个抽象的空类,没有任何定义成员。正是因为这样,才提供更加灵活的配置方式。","s":"3.1.2.1 如何配置 AppStartup","u":"/docs/appstartup","h":"#3121-如何配置-appstartup","p":200},{"i":210,"t":"AppStartup 派生类只有两个小约定: 任何公开、非静态、返回值为 void 且方法第一个参数是 IServiceCollection 类型,那么他就是一个 ConfigureServices 方法 任何公开、非静态、返回值为 void 且方法第一个参数是 IApplicationBuilder 类型,第二个参数是 IWebHostEnvironment 类型,那么他就是一个 Configure 方法 所以,我们可以自由的编写方法,只要遵循约定即可,如: using Microsoft.Extensions.DependencyInjection; namespace Furion.EntityFramework.Core { public class MyStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddDataValidation(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseSwagger(); } // 可以随意定义名字和方法 public void XXXXName(IServiceCollection services) { } // 可以随意定义名字和方法 public void ZZZName(IApplicationBuilder app, IWebHostEnvironment env) { } } }","s":"3.1.2.2 AppStartup 约定","u":"/docs/appstartup","h":"#3122-appstartup-约定","p":200},{"i":212,"t":"默认情况下,AppStartup 配置顺序由所在程序集的名称进行正序调用,如果我们需要配置执行顺序,只需要在 AppStartup 派生类中贴 [AppStartup(order)] 特性即可。 order 数值越大,越在前面调用,如: using Microsoft.Extensions.DependencyInjection; namespace Furion.EntityFramework.Core { [AppStartup(10)] public class FirstStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } } } using Microsoft.Extensions.DependencyInjection; namespace Furion.EntityFramework.Core { [AppStartup(9)] public class SecondStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } } } FirstStartup 会在 SecondStartup 之前调用。","s":"3.1.2.3 AppStartup 配置顺序","u":"/docs/appstartup","h":"#3123-appstartup-配置顺序","p":200},{"i":214,"t":"AppStartup 方法调用顺序和方法的书写先后有关,越在前面的方法越先调用。","s":"3.1.2.4 AppStartup 方法调用顺序","u":"/docs/appstartup","h":"#3124-appstartup-方法调用顺序","p":200},{"i":216,"t":"v3.6.3+ 说明 在 Furion v3.6.3+ 版本之后无需创建空 Startup.cs 类,内部已实现 FakeStartup 模式。 建议 Web 启动层的 Startup.cs 保持为空方法体,如: Furion.Web.Entry\\Startup.cs using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; namespace Furion.Web.Entry { public class Startup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } } } 将所有 Web 应用层 配置迁移到 Furion.Web.Core.Startup.cs 中,如: Furion.Web.Core\\Startup.cs using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Furion.Web.Core { public sealed class FurWebCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddCorsAccessor(); services.AddControllers().AddInject(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseCorsAccessor(); app.UseAuthentication(); app.UseAuthorization(); app.UseInject(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } } 这样,后续更换 Web 应用层 也无需重新配置 Startup.cs","s":"3.1.3 Startup 配置最佳实践","u":"/docs/appstartup","h":"#313-startup-配置最佳实践","p":200},{"i":218,"t":"AppStartup 的派生类并未提供依赖注入的功能,也即是无法通过构造函数进行注入服务。原因是 AppStartup 是个空类,目的是用来查找 Startup 的。 那如何像 Startup.cs 一样使用服务呢? 获取配置 IConfiguration 实例:通过 App.Configuration 解析服务:通过 App.GetService() 或 app.ApplicationServices.GetService() 关于 Configure 方法注入 AppStartup 针对 Configure 方法提供了参数解析注入功能,也就是只要在方法中声明接口参数即可自动注入,如: // app 和 env 会自动注入 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { }","s":"3.1.4 构造函数注入说明","u":"/docs/appstartup","h":"#314-构造函数注入说明","p":200},{"i":220,"t":"在默认情况下,ASP.NET Core 配置放在 appsettings.json 中配置,但是这样的方式和 Startup.cs 配置一样的道理,一旦我们更换了 Web 应用层,那么 appsettings.json 又要重新配置一次。 所以,Furion 框架提供了更加灵活的方式配置 appsettings.json,只需要在任何项目层根目录下创建 .json 文件即可。Furion 框架最后会自动合并所有分散的配置文件。 如我们在 Furion.EntityFramework.Core 层创建 dbsettings.json 配置数据库连接字符串,如: Furion.EntityFramework.Core\\dbsettings.json { \"ConnectionStrings\": { \"DbConnectionString\": \"Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;\", \"Sqlite3ConnectionString\": \"Data Source=./Furion.db\" } } 无需在 appsettings.json 中配置,下面是 appsettings.json 默认代码: { \"Logging\": { \"LogLevel\": { \"Default\": \"Information\", \"Microsoft\": \"Warning\", \"Microsoft.Hosting.Lifetime\": \"Information\", \"Microsoft.EntityFrameworkCore\": \"Information\" } }, \"AllowedHosts\": \"*\" } 这样我们把配置文件分散在不同项目层之后,就可以实现共用和共享了。 特别注意 其他层的配置文件不能以 appsettings.json 命名,会导致覆盖启动层的配置。 另外,在其他层创建的 *.json 文件必须设置文件属性为 始终复制或较新复制。","s":"3.1.5 关于 appsettings.json","u":"/docs/appstartup","h":"#315-关于-appsettingsjson","p":200},{"i":222,"t":"与我们交流 给 Furion 提 Issue。","s":"3.1.6 反馈与建议","u":"/docs/appstartup","h":"#316-反馈与建议","p":200},{"i":225,"t":"缓存可以减少生成内容所需的工作,从而显著提高应用程序的性能和可伸缩性。 缓存适用于不经常更改的数据,因为生成成本很高。 通过缓存,可比从数据源返回数据的副本速度快得多。 应该对应用进行编写和测试,使其不要永远依赖于缓存的数据。","s":"14.1 什么是缓存","u":"/docs/cache","h":"#141-什么是缓存","p":223},{"i":227,"t":"内存缓存:顾名思义,就是缓存在应用部署所在服务器的内存中 分布式缓存:分布式缓存是由多个应用服务器共享的缓存 响应缓存:缓存服务器端 Not Modified 的数据","s":"14.2 缓存类型","u":"/docs/cache","h":"#142-缓存类型","p":223},{"i":229,"t":"内存缓存是最常用的缓存方式,具有存取快,效率高特点。 内存缓存通过注入 IMemoryCache 方式注入即可。 备注 在 Furion 框架中,内存缓存服务已经默认注册,无需手动注册。","s":"14.3 内存缓存使用","u":"/docs/cache","h":"#143-内存缓存使用","p":223},{"i":231,"t":"如,缓存当前时间: using Furion.DynamicApiController; using Microsoft.Extensions.Caching.Memory; using System; namespace Furion.Application { public class CacheServices : IDynamicApiController { private const string _timeCacheKey = \"cache_time\"; private readonly IMemoryCache _memoryCache; public CacheServices(IMemoryCache memoryCache) { _memoryCache = memoryCache; } [ApiDescriptionSettings(KeepName = true)] public DateTimeOffset GetOrCreate() { return _memoryCache.GetOrCreate(_timeCacheKey, entry => { return DateTimeOffset.UtcNow; }); } } }","s":"14.3.1 基本使用","u":"/docs/cache","h":"#1431-基本使用","p":223},{"i":233,"t":"内存缓存支持设置缓存时间、缓存大小、及绝对缓存过期时间等 _memoryCache.GetOrCreate(_timeCacheKey, entry => { entry.SlidingExpiration = TimeSpan.FromSeconds(3); // 滑动缓存时间 return DateTimeOffset.UtcNow; }); await _memoryCache.GetOrCreateAsync(_timeCacheKey, async entry => { // 这里可以使用异步~~ }); 关于缓存时间 具有可调过期的缓存项集存在过时的风险。 如果访问的时间比滑动过期时间间隔更频繁,则该项将永不过期。 将弹性过期与绝对过期组合在一起,以保证项目在其绝对过期时间通过后过期。 绝对过期会将项的上限设置为可缓存项的时间,同时仍允许项在可调整过期时间间隔内未请求时提前过期。 如果同时指定了绝对过期和可调过期时间,则过期时间以逻辑方式运算。 如果滑动过期时间间隔 或 绝对过期时间通过,则从缓存中逐出该项。 如: _memoryCache.GetOrCreate(_timeCacheKey, entry => { entry.SetSlidingExpiration(TimeSpan.FromSeconds(3)); entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(20); return DateTime.Now; }); 前面的代码保证数据的缓存时间不超过绝对时间。","s":"14.3.2 设置缓存选项","u":"/docs/cache","h":"#1432-设置缓存选项","p":223},{"i":235,"t":"除了上面的 Func 方式设置缓存选项,我们可以手动创建并设置,如: var cacheEntryOptions = new MemoryCacheEntryOptions() .SetSlidingExpiration(TimeSpan.FromSeconds(3)); _memoryCache.Set(_timeCacheKey, DateTimeOffset.UtcNow, cacheEntryOptions);","s":"14.3.3 手动设置缓存选项","u":"/docs/cache","h":"#1433-手动设置缓存选项","p":223},{"i":237,"t":"下面的示例演示如何在依赖条目过期后使缓存条目过期。 CancellationChangeToken 添加到缓存的项。 当 Cancel 在上调用时 CancellationTokenSource ,将逐出两个缓存项。 public IActionResult CreateDependentEntries() { var cts = new CancellationTokenSource(); _cache.Set(CacheKeys.DependentCTS, cts); using (var entry = _cache.CreateEntry(CacheKeys.Parent)) { // expire this entry if the dependant entry expires. entry.Value = DateTime.Now; entry.RegisterPostEvictionCallback(DependentEvictionCallback, this); _cache.Set(CacheKeys.Child, DateTime.Now, new CancellationChangeToken(cts.Token)); } return RedirectToAction(\"GetDependentEntries\"); } public IActionResult GetDependentEntries() { return View(\"Dependent\", new DependentViewModel { ParentCachedTime = _cache.Get(CacheKeys.Parent), ChildCachedTime = _cache.Get(CacheKeys.Child), Message = _cache.Get(CacheKeys.DependentMessage) }); } public IActionResult RemoveChildEntry() { _cache.Get(CacheKeys.DependentCTS).Cancel(); return RedirectToAction(\"GetDependentEntries\"); } private static void DependentEvictionCallback(object key, object value, EvictionReason reason, object state) { var message = $\"Parent entry was evicted. Reason: {reason}.\"; ((HomeController)state)._cache.Set(CacheKeys.DependentMessage, message); } 使用 CancellationTokenSource 允许将多个缓存条目作为一个组逐出。 using 在上面的代码中,在块中创建的缓存条目 using 将继承触发器和过期设置。 了解更多 想了解更多 内存中的缓存 知识可查阅 ASP.NET Core - 内存缓存 章节。","s":"14.3.4 缓存依赖关系","u":"/docs/cache","h":"#1434-缓存依赖关系","p":223},{"i":239,"t":"分布式缓存是由多个应用服务器共享的缓存,通常作为外部服务在访问它的应用服务器上维护。 分布式缓存可以提高 ASP.NET Core 应用程序的性能和可伸缩性,尤其是在应用程序由云服务或服务器场托管时。 与其他缓存方案相比,分布式缓存具有多项优势,其中缓存的数据存储在单个应用服务器上。 当分布式缓存数据时,数据将: (一致性) 跨多个 服务器的请求 存活在服务器重启和应用部署之间 不使用本地内存 分布式缓存配置是特定于实现的。 本文介绍如何配置 SQL Server 和 Redis 分布式缓存。 第三方实现也可用,例如 GitHub 上的 NCache (NCache) 。 无论选择哪种实现,应用都会使用接口与缓存交互 IDistributedCache 。","s":"14.4 分布式缓存","u":"/docs/cache","h":"#144-分布式缓存","p":223},{"i":241,"t":"若要使用 SQL Server 分布式缓存,则添加 Microsoft.Extensions.Caching.SqlServer 包 若要使用 Redis 分布式缓存,则添加 Microsoft.Extensions.Caching.StackExchangeRedis 包 若要使用 NCache 分布式缓存,则添加 NCache.Microsoft.Extensions.Caching.OpenSource 包","s":"14.4.1 使用条件","u":"/docs/cache","h":"#1441-使用条件","p":223},{"i":243,"t":"IDistributedCache 接口提供以下方法来处理分布式缓存实现中的项: Get/GetAsync:接受字符串键,并检索缓存项作为 byte[] 数组(如果在缓存中找到) Set/SetAsync:使用字符串键将项 (作为 byte[] 数组) 添加到缓存中 Refresh/RefreshAsync :根据项的键刷新缓存中的项,重置其滑动过期超时(如果有) Remove/RemoveAsync:根据缓存项的字符串键删除缓存项","s":"14.4.2 IDistributedCache","u":"/docs/cache","h":"#1442-idistributedcache","p":223},{"i":245,"t":"分布式内存缓存(AddDistributedMemoryCache)是一个框架提供的实现 IDistributedCache ,它将项存储在内存中。 分布式内存缓存不是实际的分布式缓存,缓存项由应用程序实例存储在运行应用程序的服务器上。 分布式内存缓存优点: 用于开发和测试方案。 在生产环境中使用单一服务器并且内存消耗不是问题。 实现分布式内存缓存会抽象化缓存的数据存储。 如果需要多个节点或容错,可以在将来实现真正的分布式缓存解决方案。 备注 在 Furion 框架中,分布式内存缓存服务已经默认注册,无需手动调用 services.AddDistributedMemoryCache(); 注册。","s":"14.4.3 分布式内存缓存","u":"/docs/cache","h":"#1443-分布式内存缓存","p":223},{"i":247,"t":"分布式 SQL Server 缓存实现 (AddDistributedSqlServerCache) 允许分布式缓存使用 SQL Server 数据库作为其后备存储。 若要在 SQL Server 实例中创建 SQL Server 缓存的项表,可以使用 sql-cache 工具。 该工具将创建一个表,其中包含指定的名称和架构。 通过运行命令 sql-cache create 创建一个表,提供 SQL Server 实例 (Data Source) 、数据库 (Initial Catalog) 、架构 (例如) dbo 和表名称。例如 TestCache: dotnet sql-cache create \"Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=DistCache;Integrated Security=True;\" dbo TestCache 创建成功后,在 Startup.cs 中注册即可: services.AddDistributedSqlServerCache(options => { options.ConnectionString = _config[\"DistCache_ConnectionString\"]; options.SchemaName = \"dbo\"; options.TableName = \"TestCache\"; });","s":"14.4.4 分布式 SQL Server 缓存","u":"/docs/cache","h":"#1444-分布式-sql-server-缓存","p":223},{"i":249,"t":"Redis 是内存中数据存储的开源数据存储,通常用作分布式缓存。在使用时通过 services.AddStackExchangeRedisCache() 中注册即可。 这里不细讲 Redis 相关内容,后续章节会使用基本例子演示。 Redis 基本配置: services.AddStackExchangeRedisCache(options => { // 连接字符串,这里也可以读取配置文件 options.Configuration = \"192.168.111.134,password=aW1HAyupRKmiZn3Q\"; // 键名前缀 options.InstanceName = \"furion_\"; });","s":"14.4.5 分布式 Redis 缓存","u":"/docs/cache","h":"#1445-分布式-redis-缓存","p":223},{"i":251,"t":"NCache 是在 .NET 和 .Net Core 中以本机方式开发的开源内存中分布式缓存。 NCache 在本地工作并配置为分布式缓存群集,适用于在 Azure 或其他托管平台上运行的 ASP.NET Core 应用。 若要在本地计算机上安装和配置 NCache,请参阅 适用于 Windows 的 NCache 入门指南。 NCache 基本配置: 安装 Alachisoft.NCache.OpenSource.SDK 包 在 ncconf 中配置缓存群集 注册 NCache 服务 services.AddNCacheDistributedCache(configuration => { configuration.CacheName = \"demoClusteredCache\"; configuration.EnableLogs = true; configuration.ExceptionsEnabled = true; });","s":"14.4.6 分布式 NCache 缓存","u":"/docs/cache","h":"#1446-分布式-ncache-缓存","p":223},{"i":253,"t":"若要使用 IDistributedCache 接口,请 IDistributedCache 通过构造函数依赖关系注入。 public class IndexModel : PageModel { private readonly IDistributedCache _cache; public IndexModel(IDistributedCache cache) { _cache = cache; } public string CachedTimeUTC { get; set; } public async Task OnGetAsync() { CachedTimeUTC = \"Cached Time Expired\"; // 获取分布式缓存 var encodedCachedTimeUTC = await _cache.GetAsync(\"cachedTimeUTC\"); if (encodedCachedTimeUTC != null) { CachedTimeUTC = Encoding.UTF8.GetString(encodedCachedTimeUTC); } } public async Task OnPostResetCachedTime() { var currentTimeUTC = DateTime.UtcNow.ToString(); byte[] encodedCurrentTimeUTC = Encoding.UTF8.GetBytes(currentTimeUTC); // 设置分布式缓存 var options = new DistributedCacheEntryOptions() .SetSlidingExpiration(TimeSpan.FromSeconds(20)); await _cache.SetAsync(\"cachedTimeUTC\", encodedCurrentTimeUTC, options); return RedirectToPage(); } }","s":"14.5 分布式缓存使用","u":"/docs/cache","h":"#145-分布式缓存使用","p":223},{"i":255,"t":"确定 IDistributedCache 最适合你的应用的实现时,请考虑以下事项: 现有基础结构 性能要求 成本 团队经验 缓存解决方案通常依赖于内存中的存储以快速检索缓存的数据,但是,内存是有限的资源,并且很昂贵。 仅将常用数据存储在缓存中。 通常,Redis 缓存提供比 SQL Server 缓存更高的吞吐量和更低的延迟。 但是,通常需要进行基准测试来确定缓存策略的性能特征。 当 SQL Server 用作分布式缓存后备存储时,对缓存使用同一数据库,并且应用的普通数据存储和检索会对这两种情况的性能产生负面影响。 建议使用分布式缓存后备存储的专用 SQL Server 实例。","s":"14.6 分布式缓存建议","u":"/docs/cache","h":"#146-分布式缓存建议","p":223},{"i":257,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 分布式缓存 知识可查阅 ASP.NET Core - 分布式缓存 章节。","s":"14.7 反馈与建议","u":"/docs/cache","h":"#147-反馈与建议","p":223},{"i":259,"t":"版本说明 以下内容仅限 Furion 2.1.12 + 版本使用。","s":"29. 粘土对象","u":"/docs/clayobj","h":"","p":258},{"i":261,"t":"粘土对象是 Furion 框架自创的一种概念,是一种可以模拟弱语言特性的对象,类似 Javascript 一样操作对象。只需通过 Clay 类初始化即可。 为什么起名为 “粘土” 呢?因为这个对象可以自由的添加属性,移除属性,又可以固化成任何对象,具有可拓展、可塑造的特点。","s":"29.1 关于粘土对象","u":"/docs/clayobj","h":"#291-关于粘土对象","p":258},{"i":263,"t":"粘土对象常用于需要动态构建对象的地方,如 CMS 系统的 ViewModel,或者运行时创建一个新的对象,或者请求第三方 API 情况。","s":"29.1.1 使用场景","u":"/docs/clayobj","h":"#2911-使用场景","p":258},{"i":265,"t":"粘土性能实际上并不高效,但是性能也并不低下,只不过略输于强类型调用。什么时候使用可以看以上的【使用场景】。","s":"29.1.2 关于性能","u":"/docs/clayobj","h":"#2912-关于性能","p":258},{"i":267,"t":"Clay 对象是继承自 DynamicObject 的一个特殊对象,提供了像弱语言一样操作对象的方法及索引。","s":"29.2 Clay 对象","u":"/docs/clayobj","h":"#292-clay-对象","p":258},{"i":270,"t":"// 创建一个空的粘土对象 dynamic clay = new Clay(); // 从现有的对象创建 dynamic clay2 = Clay.Object(new {}); // 从 json 字符串创建,可用于第三方 API 对接,非常有用 dynamic clay3 = Clay.Parse(@\"{\"\"foo\"\":\"\"json\"\", \"\"bar\"\":100, \"\"nest\"\":{ \"\"foobar\"\":true } }\");","s":"29.3.1 创建一个对象","u":"/docs/clayobj","h":"#2931-创建一个对象","p":258},{"i":272,"t":"dynamic clay = Clay.Object(new { Foo = \"json\", Bar = 100, Nest = new { Foobar = true } }); var r1 = clay.Foo; // \"json\" - string类型 var r2 = clay.Bar; // 100 - double类型 var r3 = clay.Nest.Foobar; // true - bool类型 var r4 = clay[\"Nest\"][\"Foobar\"]; // 还可以和 Javascript 一样通过索引器获取","s":"29.3.2 读取/获取属性","u":"/docs/clayobj","h":"#2932-读取获取属性","p":258},{"i":274,"t":"dynamic clay = Clay.Object(new { Foo = \"json\", Bar = 100, Nest = new { Foobar = true } }); // 新增 clay.Arr = new string[] { \"NOR\", \"XOR\" }; // 添加一个数组 clay.Obj1 = new City { }; // 新增一个实例对象 clay.Obj2 = new { Foo = \"abc\", Bar = 100 }; // 新增一个匿名类","s":"29.3.3 新增属性","u":"/docs/clayobj","h":"#2933-新增属性","p":258},{"i":276,"t":"dynamic clay = Clay.Object(new { Foo = \"json\", Bar = 100, Nest = new { Foobar = true } }); // 更新 clay.Foo = \"Furion\"; clay[\"Nest\"].Foobar = false; clay.Nest[\"Foobar\"] = true;","s":"29.3.4 更新属性值","u":"/docs/clayobj","h":"#2934-更新属性值","p":258},{"i":278,"t":"dynamic clay = Clay.Object(new { Foo = \"json\", Bar = 100, Nest = new { Foobar = true }, Arr = new string[] { \"NOR\", \"XOR\" } }); // 删除操作 clay.Delete(\"Foo\"); // 通过 Delete 方法删除 clay.Arr.Delete(0); // 支持数组 Delete 索引删除 clay(\"Bar\"); // 支持直接通过对象作为方法删除 clay.Arr(1); // 支持数组作为方法删除","s":"29.3.5 删除属性","u":"/docs/clayobj","h":"#2935-删除属性","p":258},{"i":280,"t":"dynamic clay = Clay.Object(new { Foo = \"json\", Bar = 100, Nest = new { Foobar = true }, Arr = new string[] { \"NOR\", \"XOR\" } }); // 判断属性是否存在 var a = clay.IsDefined(\"Foo\"); // true var b = clay.IsDefined(\"Foooo\"); // false var c = clay.Foo(); // true var d = clay.Foooo(); // false;","s":"29.3.6 判断属性是否存在","u":"/docs/clayobj","h":"#2936-判断属性是否存在","p":258},{"i":282,"t":"dynamic clay = Clay.Object(new { Foo = \"json\", Bar = 100, Nest = new { Foobar = true }, Arr = new string[] { \"NOR\", \"XOR\" } }); // 遍历数组 foreach (string item in clay.Arr) { Console.WriteLine(item); // NOR, XOR } // 遍历整个对象属性及值,类似 JavaScript 的 for (var p in obj) foreach (KeyValuePair item in clay) { Console.WriteLine(item.Key + \":\" + item.Value); // Foo:json, Bar: 100, Nest: { \"Foobar\":true}, Arr:[\"NOR\",\"XOR\"] }","s":"29.3.7 遍历对象","u":"/docs/clayobj","h":"#2937-遍历对象","p":258},{"i":284,"t":"dynamic clay = new Clay(); clay.Arr = new string[] { \"Furion\", \"Fur\" }; // 数组转换示例 var a1 = clay.Arr.Deserialize(); // 通过 Deserialize 方法 var a2 = (string[])clay.Arr; // 强制转换 string[] a3 = clay.Arr; // 声明方式 // 对象转换示例 clay.City = new City { Id = 1, Name = \"中山市\" }; var c1 = clay.City.Deserialize(); // 通过 Deserialize 方法 var c2 = (City)clay.City; // 强制转换 City c3 = clay.City; // 声明方式","s":"29.3.8 转换成具体对象","u":"/docs/clayobj","h":"#2938-转换成具体对象","p":258},{"i":286,"t":"固化粘土在很多时候和序列化很像,但是如果直接调用 Deserialize 或 Deserialize 无法返回实际类型,所以就有了固化类型的功能,如: // 返回 object var obj = clay.Solidify(); // 返回 dynamic var obj1 = clay.Solidify(); // 返回其他任意类型 var obj2 = clay.Solidify();","s":"29.3.9 固化粘土","u":"/docs/clayobj","h":"#2939-固化粘土","p":258},{"i":288,"t":"dynamic clay = Clay.Object(new { Foo = \"json\", Bar = 100, Nest = new { Foobar = true }, Arr = new string[] { \"NOR\", \"XOR\" } }); // 输出 JSON var json = clay.ToString(); // \"{\\\"Foo\\\":\\\"json\\\",\\\"Bar\\\":100,\\\"Nest\\\":{\\\"Foobar\\\":true},\\\"Arr\\\":[\\\"NOR\\\",\\\"XOR\\\"]}\" Clay 序列化成 JSON 键大小写控制 默认情况下,Clay 输出成 JSON 后将保持原样输出,如果需要实现键命名控制,则需要先转换成 Dictionary 然后再配置 AddJsonOptions 服务,如: public IActionResult OutputClay() { dynamic clay = Clay.Object(new { // .... }); // 转换成 dictionary var dic = clay.ToDictionary(); return new JsonResult(dic); } 配置序列化 Dictionary 键命名策略支持: services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase; // 配置 Dictionary 类型序列化输出 });","s":"29.3.10 输出 JSON","u":"/docs/clayobj","h":"#29310-输出-json","p":258},{"i":290,"t":"dynamic clay = Clay.Object(new { Foo = \"json\", Bar = 100, Nest = new { Foobar = true }, Arr = new string[] { \"NOR\", \"XOR\" } }); // 输出 XElement var xml = clay.XmlElement;","s":"29.3.11 输出 XML 对象","u":"/docs/clayobj","h":"#29311-输出-xml-对象","p":258},{"i":292,"t":"dynamic clay = new Clay(); clay.@int = 1; clay.@event = \"事件\";","s":"29.3.12 关键字处理","u":"/docs/clayobj","h":"#29312-关键字处理","p":258},{"i":294,"t":"dynamic clay = Clay.Object(new { name = \"张三\" }); clay.name = \"百小僧\"; Dictionary parms = clay.ToDictionary();","s":"29.3.13 转换成字典类型","u":"/docs/clayobj","h":"#29313-转换成字典类型","p":258},{"i":296,"t":"与我们交流 给 Furion 提 Issue。","s":"29.4 反馈与建议","u":"/docs/clayobj","h":"#294-反馈与建议","p":258},{"i":298,"t":"视频教程 https://www.bilibili.com/video/BV1EW4y1C71D","s":"5.6 Vue/React/Angular 接口代理","u":"/docs/clientapi","h":"","p":297},{"i":300,"t":"在现在主流的 Web 项目开发中,越来越多的开发者选择使用 Vue/React/Angular 三大框架进行开发,这三大框架和传统开发模式最大的不同是前者采用前后端分离的方式,而后者统一由后端程序员编写。 在前后端分离的模式中,前后端程序员各司其职,后端程序负责编写接口(API),前端程序员负责编写客户端请求后端接口(API)并进行数据绑定。 但这里暴露出了一个工作效率极低且易出错的问题,那就是前端程序需要将后端几百个甚至上千个接口进行一一对应编写,大多都是采用 $.ajax 或 axios 的方式。 一旦后端接口参数或返回值发生改变,前端程序员需要一一进行勘正,一旦出现纠正不完全就会导致系统无法响应或接收错误的用户消息从而造成不必要的维护工作和成本浪费。","s":"5.6.1 历史背景","u":"/docs/clientapi","h":"#561-历史背景","p":297},{"i":302,"t":"Furion 框架编写的所有后端接口都会生成规范化的 swagger.json 文件,使用该文件可以在 https://editor.swagger.io 生成任何支持标准 swagger 的界面或客户端代码。 自此,前端程序员再也无需自己手写 $.ajax 和 axios 代码,这部分代码全部自动生成,以后开发效率至少提高一半以上。","s":"5.6.2 如何解决?","u":"/docs/clientapi","h":"#562-如何解决","p":297},{"i":304,"t":"关于 TypeScript 和 JavaScript 以下教程仅适用于 Vue/React/Angular 的 TypeScript 类型项目,暂不支持 JavaScript。 为了项目良好的发展和维护,建议使用 TypeScript 进行编写。","s":"5.6.3 生成客户端请求代码","u":"/docs/clientapi","h":"#563-生成客户端请求代码","p":297},{"i":306,"t":"打开规范化文档(Swagger)首页,并点击顶部 /swagger/xxxx/swagger.json 到新窗口打开。 接着全选并复制全部内容 打开 https://editor.swagger.io 官网并粘贴进去 无法联网 Furion 也提供了 Swagger-Editor.rar 离线包,可直接下载解压并双击 index.html 即可。 最后点击顶部的 Generate Client 选择对应的语言/框架进行生成即可。","s":"5.3.3.1 生成客户端代码","u":"/docs/clientapi","h":"#5331-生成客户端代码","p":297},{"i":308,"t":"点击 Generate Client 顶部菜单并选择 typescript-axios 进行下载。 下载成功之后拷贝下图选择的目录和文件: 接着打开你的 Vue 或 React 项目,并在 src 目录下创建 api-services 目录并将刚刚复制的目录文件放在里面。 接下来通过 npm 或 yarn 安装 axios 包 # npm 方式 npm i axios@0.21.4 # yarn 方式 yarn add axios@0.21.4 axios 版本说明 注意 axios 版本必须是 0.21.4 版本,如果安装其他版本可能会出现无法编译的情况。 接着下载 Furion 提供的 Vue/React 工具库 axios-utils.ts 并拷贝到和 api-services 同级目录下: axios-utils.ts 下载地址 Vue3 项目不能编译问题 如果在 Vue3 项目中无法编译通过,则需要修改根目录下的 tsconfig.app.json 和 tsconfig.vite-config.json 和 tsconfig.vitest.json 文件并添加下列配置即可,如: \"compilerOptions\": { \"importsNotUsedAsValues\": \"remove\", \"preserveValueImports\": false }","s":"5.6.3.2 Vue/React 配置","u":"/docs/clientapi","h":"#5632-vuereact-配置","p":297},{"i":310,"t":"点击 Generate Client 顶部菜单并选择 typescript-angular 进行下载。 下载成功之后拷贝下图选择的目录和文件: 接着打开你的 Angular 项目,并在 src 目录下创建 api-services 目录并将刚刚复制的目录文件放在里面。 接着下载 Furion 提供的 Angular 工具库 angular-utils.ts 并拷贝到和 api-services 同级目录下: angular-utils.ts 下载地址 Angular 项目不能编译问题 如果在 Angular 项目中无法编译通过,则需要修改根目录下的 api-services/encoder.ts 文件,并在 encodeKey 和 encodeValue 前添加 override 即可,如: api-services/encoder.ts export class CustomHttpUrlEncodingCodec extends HttpUrlEncodingCodec { override encodeKey(k: string): string { k = super.encodeKey(k); return k.replace(/\\+/gi, \"%2B\"); } override encodeValue(v: string): string { v = super.encodeValue(v); return v.replace(/\\+/gi, \"%2B\"); } } 最后在 src/app/app.module.ts 中注册 ServeModule src/app/app.module.ts import { NgModule } from \"@angular/core\"; import { BrowserModule } from \"@angular/platform-browser\"; import { AppRoutingModule } from \"./app-routing.module\"; import { AppComponent } from \"./app.component\"; import { ServeModule } from \"src/angular-utils\"; @NgModule({ declarations: [AppComponent], imports: [ BrowserModule, AppRoutingModule, ServeModule, // 注册代理服务模块 ], providers: [], bootstrap: [AppComponent], }) export class AppModule {}","s":"5.6.3.3 Angular 配置","u":"/docs/clientapi","h":"#5633-angular-配置","p":297},{"i":312,"t":"完成上面步骤之后还需要最后一步,那就修改服务端(后端)接口(API)地址。","s":"5.6.4 初始配置","u":"/docs/clientapi","h":"#564-初始配置","p":297},{"i":314,"t":"在 Vue/React 项目中编辑 Furion 框架提供的 axios-utils.ts 文件,并将 serveConfig 修改为对应的后端地址即可,如: /** * 当前版本:v1.0.3 * 使用描述:https://editor.swagger.io 代码生成 typescript-axios 辅组工具库 * 依赖说明:适配 axios 版本:v0.21.1 * 视频教程:https://www.bilibili.com/video/BV1EW4y1C71D */ import globalAxios, { AxiosInstance } from \"axios\"; import { Configuration } from \"./api-services\"; import { BaseAPI, BASE_PATH } from \"./api-services/base\"; // 如果是 Angular 项目,则取消下面注释即可 // import { environment } from './environments/environment'; /** * 接口服务器配置 */ export const serveConfig = new Configuration({ // 如果是 Angular 项目,则取消下面注释,并删除 process.env.NODE_ENV !== \"production\" // basePath: !environment.production basePath: process.env.NODE_ENV !== \"production\" ? \"https://localhost:44342\" // 开发环境服务器接口地址 : \"https://furion.icu\", // 生产环境服务器接口地址 }); // ......","s":"5.6.4.1 Vue/React 配置","u":"/docs/clientapi","h":"#5641-vuereact-配置","p":297},{"i":316,"t":"如果是 Angular 项目则编辑 Furion 框架提供的 angular-utils.ts 文件,并将 serveConfig 修改为对应的后端地址即可,如: /** * 当前版本:v1.0.3 * 使用描述:https://editor.swagger.io 代码生成 typescript-angular 辅组工具库 */ import { HttpClientModule, HttpEvent, HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest, HttpResponse, HTTP_INTERCEPTORS, } from \"@angular/common/http\"; import { Injectable, NgModule } from \"@angular/core\"; import { finalize, Observable, tap } from \"rxjs\"; import { ApiModule, Configuration } from \"./api-services\"; import { environment } from \"./environments/environment\"; /** * 接口服务器配置 */ export const serveConfig = new Configuration({ basePath: !environment.production ? \"https://localhost:44316\" // 开发环境服务器接口地址 : \"https://furion.icu\", // 生产环境服务器接口地址 }); // ......","s":"5.6.4.2 Angular 配置","u":"/docs/clientapi","h":"#5642-angular-配置","p":297},{"i":319,"t":"在 Vue/React 中使用有两种方式,一种是 Promise,另外一种就是 async/await,推荐使用后者。 Promise 方式 import { getAPI } from \"../axios-utils\"; // 注意项目的路径 getAPI(SystemAPI) // SystemAPI 对应的是 Swagger 分组标签名称 + API .apiGetXXXX() .then((res) => { var data = res.data.data!; }) .catch((err) => { console.log(err); }) .finally(() => { console.log(\"api request completed.\"); }); async/await 方式 import { getAPI, feature } from \"../axios-utils\"; // 注意项目的路径 const [err, res] = await feature(getAPI(SystemAPI).apiGetXXX()); if (err) { console.log(err); } else { var data = res.data.data!; } console.log(\"api request completed.\"); 关于 关于文件流下载 对于文件流下载可能存在下载文件过大的情况,这时候需要添加 options 参数 responseType: \"blob\" 解决,如: getAPI(SystemAPI, { responseType: \"blob\" }).apiGetXXX();","s":"5.6.5.1 Vue/React 中使用","u":"/docs/clientapi","h":"#5651-vuereact-中使用","p":297},{"i":321,"t":"在 Angular 项目中,通过构造函数注入对应的服务即可 import { Component } from \"@angular/core\"; import { PersonService } from \"src/api-services\"; // 注意项目的路径 @Component({ selector: \"app-root\", templateUrl: \"./app.component.html\", styleUrls: [\"./app.component.css\"], }) export class AppComponent { title = \"angulars\"; // 注入 PersonService constructor(private personService: PersonService) {} ngOnInit(): void { // 使用 personService this.personService.apiPersonAllGet().subscribe({ next: (res) => { // 请求成功 console.log(res); }, error: (err) => { // 请求失败 }, complete: () => { // 请求完成 }, }); } }","s":"5.6.5.2 Angular 中使用","u":"/docs/clientapi","h":"#5652-angular-中使用","p":297},{"i":323,"t":"如果后端接口(API)发生改变,只需要删除 api-services 下所有目录文件并重新生成复制进去即可。 关于 Angular 项目 如果是 Angular 项目,可以保留 api-services/encoder.ts 文件并删除其他目录文件,新生成的目录文件无需复制 encoder.ts,这样可以避免每次修改 encoder.ts 文件。","s":"5.6.6 重新生成代码","u":"/docs/clientapi","h":"#566-重新生成代码","p":297},{"i":325,"t":"在很多大型系统中,为了方便对接口进行归类,往往使用了 Swagger 多分组功能,这样会使系统的接口散落在多个 swagger.json 中。 这个时候,需要在后端规范化文档中启用多分组配置: { \"SpecificationDocumentSettings\": { \"EnableAllGroups\": true } } 启用配置之后在 Swagger 导航栏顶部下拉分组将出现 All Groups 选项,这时候使用这个 All Groups 的 swagger.json 进行生成。","s":"5.6.7 Swagger 多分组生成","u":"/docs/clientapi","h":"#567-swagger-多分组生成","p":297},{"i":327,"t":"版本说明 以下内容仅限 Furion 4.1.7+ 版本使用。 通过我们根据 swagger.json 生成前端代码时,Swagger 会自动根据路由地址生成调用的 api 名称,但这样的名称往往不易读,这时候可自定义 [OperationId] 来配置生成的前端名称。 using Furion.SpecificationDocument; public class PersonDto { [OperationId(\"MyClientMethodName\")] public string TestMethod() { // ... } }","s":"5.6.8 自定义生成前端方法名","u":"/docs/clientapi","h":"#568-自定义生成前端方法名","p":297},{"i":329,"t":"axios-utils.ts 和 angular-utils.ts 是 Furion 框架专门针对 Furion 开发的 WebAPI 项目编写的客户端代理库,在这个代理库中已经处理了跨域,授权,自动刷新 token 以及解密客户端 JWT token 问题。 同时提供了非常方便的 feature 方法,可将异步方法进行同步化处理。","s":"5.6.9 框架客户端工具库介绍","u":"/docs/clientapi","h":"#569-框架客户端工具库介绍","p":297},{"i":331,"t":"在一些比较注重代码安全的组织或公司中,可能不能连接外网进行生成,这个时候只需要下载 https://github.com/swagger-api/swagger-editor 代码在本地部署即可。 Furion 官网也提供了 Swagger-Editor.rar 离线包下载:https://gitee.com/dotnetchina/Furion/blob/v4/clients/Swagger-Editor.rar 下载离线包后直接双击 index.html 启动即可","s":"5.6.10 无法连接外网/内网情况/离线包","u":"/docs/clientapi","h":"#5610-无法连接外网内网情况离线包","p":297},{"i":333,"t":"与我们交流 给 Furion 提 Issue。","s":"5.6.11 反馈与建议","u":"/docs/clientapi","h":"#5611-反馈与建议","p":297},{"i":336,"t":"在 .NET Core 2+ 之后,微软创造了 Startup.cs 模式,在这样的模式中,需要任何服务或者中间件处理,只需要在 Startup.cs 文件的两个方法(ConfigureServices 和 Configure)中配置即可。 但在 .NET6 之后,微软不再推荐使用 Startup.cs 模式。 在这里,不阐述 Startup.cs 的优点,就列举几个比较明显的缺点: 默认情况下必须放在启动层且主机启动时需通过 .UseStartup<> 进行注册,此问题在 Furion 已解决 AppStartup 配置服务很容易编写出又臭又长的 service.AddXXX() 和 app.AddXXX() 代码,不管是阅读性和灵活性大大减分 对服务注册和中间件注册有顺序要求,不同的顺序可能产生不同的效果,甚至出现异常 不能实现模块化自动装载注册,添加新的模块需要手动注册,注册又得考虑模块化之间依赖顺序问题 不能对模块注册进行监视,比如加载之前,加载失败,加载之后","s":"3.2.1 历史背景","u":"/docs/component","h":"#321-历史背景","p":334},{"i":338,"t":"在一个大型的 .NET Core 项目中,会经常看到这样的代码: using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Furion.Web.Core; public sealed class FurWebCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddCorsAccessor(); services.AddControllers().AddInject(); services.AddRemoteRequest(); services.AddEventBus(); services.AddAppLocalization(); services.AddViewEngine(); services.AddSensitiveDetection(); services.AddVirtualFileServer(); services.AddX(); services.AddXX(); services.AddXXX(); services.AddXXXX(); services.AddXXXXX(); services.AddXXXXXX(); // ..... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseCorsAccessor(); app.UseAuthentication(); app.UseAuthorization(); app.UseInject(); app.UseX(); app.UseXX(); app.UseXXX(); app.UseXXXX(); app.UseXXXXX(); app.UseXXXXXX(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } 可能对于大部分 .NET 开发者来说貌似没有任何问题,但是仔细瞧瞧,这里充斥着大量的 .AddXXXX() 和 .UseXXXX(),真的美观,真的好吗?而且稍有不慎移动了它们的注册顺序可能会引发灾难,还有可能多个服务之间相互依赖,要么全部移除,要么全部保留,未来替代你开发岗位的人知道吗? 试问,这个问题是无解吗?","s":"3.2.2 先看一个例子","u":"/docs/component","h":"#322-先看一个例子","p":334},{"i":340,"t":"在 Furion 3.7.3+ 版本之后,借助 Docker-Compose 的设计理念,推出了全新的 Component 组件化 模式,通过组件化开发可以实现组件之间相互依赖,相互链接,还可以共享参数,你仅仅需要编写一个入口组件即可。 先看一个例子: 创建 EntryServiceComponent 入口服务组件 // 创建入口服务组件实现 IServeComponent 接口 public sealed class EntryServiceComponent : IServiceComponent { public void Load(IServiceCollection services, ComponentContext componentContext) { // 做任何你想做的事情,如 service.AddYourInitService(); 如添加你的模块初始化配置 } } 通过 AddComponent<> 注册入口组件 // 通过 .AddComponent 注册一个入口服务组件 Serve.Run(RunOptions.Default.AddComponent()); 接下来,我们模拟实际项目的开发需求: 需要添加跨域服务,创建 CorsServiceComponent 组件 public sealed class CorsServiceComponent : IServiceComponent { public void Load(IServiceCollection services, ComponentContext componentContext) { services.AddCorsAccessor(); } } 需要添加动态 WebAPI 服务,创建 DynamicApiServiceComponent 组件 public sealed class DynamicApiServiceComponent : IServiceComponent { public void Load(IServiceCollection services, ComponentContext componentContext) { services.AddDynamicApiControllers(); } } 需要添加 XXX 第三方服务,创建 XXXServiceComponent 组件 public sealed class XXXServiceComponent : IServiceComponent { public void Load(IServiceCollection services, ComponentContext componentContext) { services.AddXXX(); } } 有了这么多服务组件,那怎么将它们关联起来呢,而且能够正确的处理它们的顺序呢?比如 AddXXX() 必须等 AddDynamicApiControllers() 注册才能注册,这时候只需要为 XXXServiceComponent 添加依赖即可,如: [DependsOn( typeof(DynamicApiServiceComponent) )] public sealed class XXXServiceComponent : IServiceComponent { // .... } 这样表示 XXXServiceComponent 依赖 DynamicApiServiceComponent 组件,只有 DynamicApiServiceComponent 完成注册才会注册 XXXServiceComponent。 那么最后的 EntryServiceComponent 的代码将会是: [DependsOn( typeof(CorsServiceComponent), typeof(XXXServiceComponent) )] public sealed class EntryServiceComponent : IServiceComponent { // .... } 最后生成的调用顺序为:AddCorsAccessor() -> AddDynamicApiControllers() -> AddXXX() -> AddEntry()。 看到这里,是否已找到答案:每一个项目只有一个入口组件,每个组件只做一件事,组件之间可以通过 DependsOn 配置依赖,组件之间还能共享上下文数据 ComponentContext。 没错,这就是 Furion 目前能够想到的最优解决方案。","s":"3.2.3 当然有解","u":"/docs/component","h":"#323-当然有解","p":334},{"i":342,"t":"在 Furion 3.7.3+ 版本,新增了 Components 模块,该模块的根接口为 IComponent,含有两个派生接口 IServiceComponent 和 IApplicationComponent。","s":"3.2.4 IComponent","u":"/docs/component","h":"#324-icomponent","p":334},{"i":344,"t":"IServiceComponent 接口简称服务组件对应的是 Startup.cs 中的 ConfigureService,接口签名为: namespace System; /// /// 服务组件依赖接口 /// public interface IServiceComponent : IComponent { /// /// 装载服务 /// /// /// 组件上下文 void Load(IServiceCollection services, ComponentContext componentContext); } 需要注册服务可在 Load 方法中注册即可。","s":"3.2.4.1 IServiceComponent","u":"/docs/component","h":"#3241-iservicecomponent","p":334},{"i":346,"t":"IApplicationComponent 接口简称中间件组件对应的是 Startup.cs 中的 Configure,接口签名为: namespace System; /// /// 应用中间件接口 /// public interface IApplicationComponent : IComponent { /// /// 装置中间件 /// /// /// /// 组件上下文 void Load(IApplicationBuilder app, IWebHostEnvironment env, ComponentContext componentContext); } 需要注册中间件可在 Load 方法中注册即可。","s":"3.2.4.2 IApplicationComponent","u":"/docs/component","h":"#3242-iapplicationcomponent","p":334},{"i":348,"t":"IWebComponent 接口简称 Web 组件对应的是 Program.cs 中的 WebApplicationBuilder,接口签名为: namespace System; /// /// WebApplicationBuilder 组件依赖接口 /// public interface IWebComponent : IComponent { /// /// 装置 Web 应用构建器 /// /// /// 组件上下文 void Load(WebApplicationBuilder builder, ComponentContext componentContext); } 需要注册中间件可在 Load 方法中注册即可。","s":"3.2.4.3 IWebComponent","u":"/docs/component","h":"#3243-iwebcomponent","p":334},{"i":350,"t":"Furion 提供了多种注册组件的方式: 方式一 通过 RunOptions,LegacyRunOptions,GenericRunOptions 方式: Serve.Run(RunOptions.Default .AddComponent() .UseComponent()); // .NET6+ 还支持 AddWebComponent(); Serve.Run(RunOptions.Default .AddWebComponent()); 方式二 通过 services.AddComponent 和 app.UseComponent 方式 // 服务组件 service.AddComponent(); // 中间件组件 app.UseComponent(); // .NET6+ 还支持 AddWebComponent(); builder.AddWebComponent(); 方式三 组件注册可以传递参数,通过最后的参数指定。 // 服务组件 service.AddComponent(options); // 中间件组件 app.UseComponent(options); // .NET6+ 还支持 AddWebComponent(); builder.AddWebComponent(options); 类型 Type 注册方式 除了提供泛型注册组件的方式,还提供了 .AddComponent(typeof(XXXComponent)) 和 .UseComponent(typeof(XXXComponent)) 方式。","s":"3.2.4.3 注册组件","u":"/docs/component","h":"#3243-注册组件","p":334},{"i":353,"t":"组件的设计理应遵循职责单一性原则,具有单一性又有职责明确性,通俗点说每一个组件尽可能的只做一件事,如果组件之间有依赖,通过 [DependsOn] 声明配置,如: [DependsOn( typeof(OtherServiceComponent), \"Other.Assembly;Other.Assembly.OtherServiceComponent\" )] public sealed class YourServiceComponent : IServiceComponent { public void Load(IServiceCollection services, ComponentContext componentContext) { services.AddXXX(); } }","s":"3.2.5.1 职责单一性","u":"/docs/component","h":"#3251-职责单一性","p":334},{"i":355,"t":"由于组件通常包含服务和中间件两个注册,所以推荐组件类的命名统一为:XXXComponent.cs,然后在 XXXComponent.cs 中分别写 IServiceComponent 和 IApplicationComponent 组件。 尽可能每一个服务组件(IServiceComponent)以 ServiceComponent 结尾,每一个中间件组件(IApplicationComponent)以 ApplicationComponent 结尾。如: XXXComponent.cs namespace Your.Components; // 服务组件 public sealed class XXXServiceComponent : IServiceComponent { // .... } // 中间件组件 public sealed class XXXApplicationComponent : IApplicationComponent { // .... } // WebApplicationBuilder 组件 public sealed class XXXWebComponent : IWebComponent { // .... } 小知识 如果没有 IServiceComponent 或 IApplicationComponent,则写其一即可。","s":"3.2.5.2 约定大于配置","u":"/docs/component","h":"#3252-约定大于配置","p":334},{"i":357,"t":"由于组件和组件之间存在依赖方式,甚至没有依赖关系但支持唤醒其他组件功能,所以 Furion 提供了 [DependsOn] 特性。","s":"3.2.6 [DependsOn] 详解","u":"/docs/component","h":"#326-dependson-详解","p":334},{"i":359,"t":"DependsOn DependComponents:配置组件依赖关系,Type[] 类型,一旦配置了依赖关系,那么被依赖的组件会先于当前组件注册 Links:配置组件链接关系,Type[] 类型,该配置主要解决一些组件并不是从 根组件 进行配置,而是处于和 根组件 平行的情况,类似多入口组件 构造函数说明 DependComponents 是 DependsOnAttribute 特性的默认构造函数,支持 Type 和 String 类型,如: [DependsOn( typeof(XXXComponent), typeof(XXXXComponent), \"程序集;类型完整限定名\" // 会自动加载程序集中特定的组件,后续模块化开发非常方便 )] 如需配置 Links,只需要这样接口: [DependsOn( typeof(XXXComponent), Links = new object[]{ typeof(XXXComponent), typeof(XXXXComponent) } )]","s":"3.2.6.1 配置介绍","u":"/docs/component","h":"#3261-配置介绍","p":334},{"i":361,"t":"Furion 框架中已经处理了组件重复依赖问题,会自动生成好最佳的注册顺序并去除重复依赖注册问题。","s":"3.2.6.2 重复依赖问题","u":"/docs/component","h":"#3262-重复依赖问题","p":334},{"i":363,"t":"循环依赖实际上是一种错误注册组件的方式,会导致出现内存溢出情况,早期组件化版本框架处理了循环依赖问题,也就是主动忽略或报错,但是考虑此行为本身带有潜在的安全问题,所以移除了循环依赖处理,而是选择在开发阶段抛出异常方式。","s":"3.2.6.3 循环依赖问题","u":"/docs/component","h":"#3263-循环依赖问题","p":334},{"i":365,"t":"ComponentContext 是组件注册 Load 方法的最后参数,该参数提供了组件之间的一些元数据。","s":"3.2.7 ComponentContext 详解","u":"/docs/component","h":"#327-componentcontext-详解","p":334},{"i":367,"t":"ComponentContext ComponentType:组件类型,Type 类型 CalledContext:上级组件,ComponentContext 类型,也就是 DependsOn 中的组件上下文,如果没有则是前一个组件的上下文 RootContext:根组件/入口组件,ComponentContext 类型 DependComponents:组件依赖的所有组件列表,Type[] 类型 LinkComponents:组件链接的所有组件列表,Type[] 类型","s":"3.2.7.1 属性介绍","u":"/docs/component","h":"#3271-属性介绍","p":334},{"i":369,"t":"在注册组件小节中,我们可以通过 .AddComponent 和 .UseComponent 最后的参数来指定组件的参数,那么如何在组件中获取你传递的参数呢? ComponentContext 提供了多种方法: GetProperty():获取组件的参数 GetProperty(Type):通过类型获取组件参数 GetProperty(string):通过指定 key 获取 GetProperties():获取组件所有参数列表(包括依赖,链接等) SetProperty(object):设置特定组件参数 SetProperty(Type, object):设置特定类型组件的参数 SetProperty(string, object):设置指定 key 的参数值 例子说明​ 注册时传入 EntryOption 参数 service.AddComponent(new EntryOption {}); 在组件内部获取: public sealed class EntryServiceComponent : IServiceComponent { public void Load(IServiceCollection services, ComponentContext componentContext) { var options = componentContext.GetProperty(); services.AddXXXX(options); } } 除此之外,还可以通过 componentContext.SetProperty(new xxxOptions{}) 来设置下游组件的参数。","s":"3.2.7.2 参数配置/获取","u":"/docs/component","h":"#3272-参数配置获取","p":334},{"i":371,"t":"组件模式是非常强大且灵活的,我们也可以通过组件的模式模拟出传统的 Startup.cs,如: StartupComponent // 模拟 ConfigureService public sealed class StartupServiceComponent : IServiceComponent { public void Load(IServiceCollection services, ComponentContext componentContext) { services.AddControllers() .AddInject(); } } // 模拟 Configure public sealed class StartupApplicationComponent : IApplicationComponent { public void Load(IApplicationBuilder app, IWebHostEnvironment env, ComponentContext componentContext) { app.UseRouting(); app.UseInject(string.Empty); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } 只需要通过 service.AddComponent() 注册即可,如果使用 Serve.Run() 模式将更简单,如: Serve.Run(RunOptions.Default .AddComponent() .UseComponent()); 是不是很灵活啊~","s":"3.2.8 实现 Startup.cs 模式","u":"/docs/component","h":"#328-实现-startupcs-模式","p":334},{"i":373,"t":"在写最佳实践时是最痛苦的,因为最佳实践应该是把微软底层所有的 service.AddXXX 和 app.AddXXX 独立成一个个组件,比如 servers.AddControllers() 对应一个 ControllersServiceComponent。 这样做的话工作量是非常大的,但如果不这样做,组件化就无法彻底。 所以现阶段暂时采用自由定制组件方式,比如自己在项目中编写 ControllersServiceComponent 这类组件。","s":"3.2.9 最佳实践?","u":"/docs/component","h":"#329-最佳实践","p":334},{"i":375,"t":"与我们交流 给 Furion 提 Issue。","s":"3.2.10 反馈与建议","u":"/docs/component","h":"#3210-反馈与建议","p":334},{"i":378,"t":"如果您在 Furion 中发现了一个不存在安全问题的漏洞,请在 Furion 仓库中的 Issues 中搜索,以防该漏洞已被提交,如果找不到漏洞可以创建一个新的 Issues,如果发现了一个安全问题请不要将其公开,请参阅安全问题处理方式,提交错误报告时应该详尽。","s":"38.1 提交错误报告","u":"/docs/contribute","h":"#381-提交错误报告","p":376},{"i":380,"t":"本项目中对安全问题处理的形式,项目核心人员确认编辑,该部分内容可以根据项目情况添加。","s":"38.2 安全问题处理","u":"/docs/contribute","h":"#382-安全问题处理","p":376},{"i":382,"t":"通过查看仓库的 Issues 列表可以发现需要处理的问题信息,可以尝试解决其中的某个问题。","s":"38.3 解决现有问题","u":"/docs/contribute","h":"#383-解决现有问题","p":376},{"i":384,"t":"提出新功能有些项目使用 Issues 的 Feature 标签进行管理,有些则通过邮件的形式统一收集,在收集后项目内人员会进行确认开发,一般将确认开发的功能会放入下一个版本的任务列表。","s":"38.4 如何提出新功能","u":"/docs/contribute","h":"#384-如何提出新功能","p":376},{"i":386,"t":"如果是通过 Git 管理可以从 git clone https://gitee.com/dotnetchina/Furion.git 开始编写,将开发环境的配置信息,IDE 的设置等信息配置文档编写。","s":"38.5 如何设置开发环境并运行测试","u":"/docs/contribute","h":"#385-如何设置开发环境并运行测试","p":376},{"i":388,"t":"使用现在时态 第一行字数限制 提交内容的约束","s":"38.6 变更日志填写规则","u":"/docs/contribute","h":"#386-变更日志填写规则","p":376},{"i":390,"t":"项目内编码约定文件:.editorconfig","s":"38.7 编码约定","u":"/docs/contribute","h":"#387-编码约定","p":376},{"i":392,"t":"分支处理形式,如 gitFlow","s":"38.8 分支处理约定","u":"/docs/contribute","h":"#388-分支处理约定","p":376},{"i":394,"t":"在什么情况下可以合并到 master/main: 通过 CI 两个及以上的维护者通过. 最新版本","s":"38.9 合并 PR 的形式","u":"/docs/contribute","h":"#389-合并-pr-的形式","p":376},{"i":397,"t":"2020 年 06 月 29 日,Fur 在 Gitee 平台创建空仓库。 2020 年 09 月 01 日,Fur 正式写下第一行代码。 2020 年 10 月 01 日,Fur 获得 Gitee 最有价值开源项目 GVP 证书。 2020 年 10 月 22 日,Fur 在 Gitee 平台获得 1000 stars. 2020 年 11 月 11 日,Fur 单身节当天发布了 1.0.0 正式版。 2020 年 11 月 20 日,Fur 改名为 Furion。 2020 年 11 月 23 日,Furion Logo 由之前的 奶牛 更换为 袋鼠。 2020 年 12 月 22 日,Furion 在 Gitee 平台获得 2000 stars。","s":"2020 年","u":"/docs/course","h":"#2020-年","p":395},{"i":399,"t":"2021 年 03 月 01 日,Furion 捐赠项目到 dotNET China 组织。 2021 年 03 月 05 日,Furion 在 Gitee 平台获得 3000 stars。 2021 年 04 月 01 日,Furion 所在群 dotNET China 突破 5000 人。 2021 年 04 月 06 日,Furion 在 Gitee 平台获得 4000 stars。 2021 年 04 月 19 日,Furion 正式发布 2.0.0 版本,并支持控制台应用开发。 2021 年 04 月 29 日,Furion 所在群 dotNET China 突破 6000 人。 2021 年 05 月 13 日,Furion 在 Gitee 平台获得 5000 stars。 2021 年 06 月 01 日,Furion 所在群 dotNET China 突破 7000 人。 2021 年 06 月 22 日,Furion 在 Gitee 平台获得 6000 stars。 2021 年 07 月 04 日,Furion 登顶 Gitee 平台 C# 语言板块第一名。 2021 年 07 月 16 日,Furion 采用 百小僧 头像作为 Logo。 2021 年 07 月 20 日,Furion 将 Apache 2.0 开源协议修改为 MulanPSL-2.0 (木兰宽松许可证) 2021 年 07 月 27 日,Furion 正式支持全平台、.NET 全平台项目开发。 2021 年 08 月 11 日,Furion 加入 木兰开源社区 重点孵化。 2021 年 08 月 21 日,Furion 在 Nuget 平台突破 100万 安装量。 2021 年 08 月 30 日,Furion 在 Gitee 平台获得 7000 stars。 2021 年 09 月 01 日,Furion 诞生一周年。 2021 年 11 月 09 日,Furion 正式发布 3.0.0 版本,全新的 .NET6 架构。 2021 年 11 月 22 日,Furion 迎来了第一个赞助商 JNPF。","s":"2021 年","u":"/docs/course","h":"#2021-年","p":395},{"i":401,"t":"2022 年 05 月 20 日,Furion 在 Gitee 平台获得 8000 Stars。 2022 年 06 月 18 日,Furion 有了自己的入口函数 Serve.Run() 和错误页。 2022 年 06 月 20 日,Furion 项目贡献者突破 200 人。 2022 年 07 月 25 日,Furion 正式发布 4.0.0 版本,彻底实现大一统(.NET5-.NET N)都可以升级。 2022 年 08 月 01 日,Furion 将 MulanPSL-2.0 开源协议修改为 MIT。 2022 年 08 月 18 日,Furion 在 Nuget 平台突破 300万 安装量。 2022 年 09 月 01 日,Furion 诞生两周年。 2022 年 09 月 18 日,Furion 解散 QQ 群,回归最初的开源协作模式,了解更多。 2022 年 10 月 29 日,Furion 在 Nuget 平台突破 400万 安装量。","s":"2022 年","u":"/docs/course","h":"#2022-年","p":395},{"i":404,"t":"简单来说,当一个请求 url 的协议、域名、端口三者之间任意一个与当前页面 url 不同即为跨域。那为什么会出现跨域问题呢? 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说 Web 是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的 javascript 脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)","s":"16.1 什么是跨域","u":"/docs/cors","h":"#161-什么是跨域","p":402},{"i":406,"t":"当前页面 url 被请求页面 url 是否跨域 原因 http://www.furion.icu/ http://www.furion.icu/index.html 否 同源(协议、域名、端口号相同) http://www.furion.icu/ https://www.furion.icu/index.html 跨域 协议不同(http/https) http://www.furion.icu/ http://www.baidu.com/ 跨域 主域名不同(chinadot/baidu) http://www.furion.icu/ http://blog.furion.icu/ 跨域 子域名不同(www/blog) http://www.furion.icu:8080/ http://www.furion.icu:7001/ 跨域 端口号不同(8080/7001)","s":"16.2 有跨域行为示例","u":"/docs/cors","h":"#162-有跨域行为示例","p":402},{"i":408,"t":"跨源资源共享 (CORS) : 是一种 W3C 标准,可让服务器放宽相同的源策略。 不是一项安全功能,CORS 放宽 security。 API 不能通过允许 CORS 来更安全。 有关详细信息,请参阅 CORS 工作原理。 允许服务器明确允许一些跨源请求,同时拒绝其他请求。 比早期的技术(如 JSONP)更安全且更灵活。","s":"16.3 什么是 CORS","u":"/docs/cors","h":"#163-什么是-cors","p":402},{"i":411,"t":"启用跨域 Cors 支持首先添加 CorsAccessor 服务,如: using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Furion.Web.Core { [AppStartup(700)] public sealed class FurWebCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddCorsAccessor(); // ... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { //... app.UseCorsAccessor(); // ... } } } 特别注意 services.AddCorsAccessor(); 需在 services.AddControllers() 之前注册。 app.UseCorsAccessor(); 需在 app.UseRouting(); 和 app.UseAuthentication(); 之间注册。","s":"16.4.1 添加 CORS 服务","u":"/docs/cors","h":"#1641-添加-cors-服务","p":402},{"i":413,"t":"小提醒 默认情况下,Furion 允许所有域名来源访问,也就是无需配置任何来源域名,另外前端也需要设置请求参数:withCredentials:false 如果需要指定特定域名,则添加以下配置即可: { \"CorsAccessorSettings\": { \"PolicyName\": \"自定义跨域策略名\", \"WithOrigins\": [\"http://localhost:4200\", \"https://furion.icu\"] } }","s":"16.4.2 配置允许跨域域名","u":"/docs/cors","h":"#1642-配置允许跨域域名","p":402},{"i":415,"t":"CorsAccessorSettings PolicyName:跨域策略名,string 类型,必填,默认 App.Cors.Policy WithOrigins:允许跨域的域名列表,string[] 类型,默认 * WithHeaders:请求表头,没有配置则允许所有表头,string[] 类型 WithExposedHeaders:设置客户端可获取的响应标头,string[] 类型,默认 [\"access-token\", \"x-access-token\"] WithMethods:设置跨域允许请求谓词,没有配置则允许所有,string[] 类型 AllowCredentials:是否允许跨域请求中的凭据,bool 类型,默认值 true SetPreflightMaxAge:设置预检过期时间,int 类型,默认值 24小时 FixedClientToken:是否默认配置 WithExposedHeaders,bool 类型,默认 true SignalRSupport:是否启用 SignalR 跨域支持,bool 类型,默认 false","s":"16.5 CorsAccessorSettings 配置","u":"/docs/cors","h":"#165-corsaccessorsettings-配置","p":402},{"i":417,"t":"有时候,我们通过 ajax 或者 axios 第三方库无法读取响应头自定义信息,这时需要响应报文中公开特定 Header 才能放行,如:Access-Control-Expose-Headers: xxxxx,所以,需要添加以下配置: appsettings.json { \"CorsAccessorSettings\": { \"WithExposedHeaders\": [\"access-token\",\"x-access-token\"] } } 需要获取哪个头,就在 WithExposedHeaders 数组中配置即可。如果使用 ajax 可以通过 xhr.getResponseHeader(key) 或 xhr.getAllResponseHeaders() 获取配置的 key。 特别情况下不能请求,可以考虑设置 withCredentials: false 。","s":"16.6 前端不能读取响应头注意事项","u":"/docs/cors","h":"#166-前端不能读取响应头注意事项","p":402},{"i":419,"t":"使用 Jquery 前端请求可以参考以下配置: $.ajax({ url: \"https://localhost:5001/api/system/getdata\", type: \"GET\", xhrFields: { withCredentials: false // 如果是https请求,可以试试 true }, crossDomain: true, success: function (res) { render(res); } }); 特别注意 在本地开发阶段,请求如果出现 Access to XMLHttpRequest...has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header... 错误,请确保 ajax 的 url 参数是正确的,通常错误的做法是: 使用了 127.0.0.1 而不是 localhost 主机地址 使用 http 而不是 https 主机协议 使用了 5000 而不是 5001 主机端口","s":"16.7 使用 $.ajax 前端注意事项","u":"/docs/cors","h":"#167-使用-ajax-前端注意事项","p":402},{"i":421,"t":"有时候,我们希望某个方法不检查跨域请求,可以在 Action 中贴 [DisableCors] 特性即可。","s":"16.8 禁用跨域","u":"/docs/cors","h":"#168-禁用跨域","p":402},{"i":423,"t":"SignalR 实现跨域需要满足下面几个条件: 允许特定的预期来源,允许任何来源是可行的,但不安全或不推荐使用 必须允许使用 HTTP 方法 GET 和 POST 为了使基于 cookie 的粘滞会话正常工作,必须允许使用凭据,即使未使用身份验证,也必须启用它们。 官方文档说明 https://docs.microsoft.com/zh-cn/aspnet/core/signalr/security?view=aspnetcore-6.0 在 Furion 4.1.4+ 版本已修正 SignalR 跨域问题,只需要启用 SignalRSupport 配置即可,如: { \"CorsAccessorSettings\": { \"SignalRSupport\": true } }","s":"16.9 SignalR 跨域问题","u":"/docs/cors","h":"#169-signalr-跨域问题","p":402},{"i":425,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 跨域请求 知识可查阅 ASP.NET Core - 启用跨域请求 章节。","s":"16.10 反馈与建议","u":"/docs/cors","h":"#1610-反馈与建议","p":402},{"i":427,"t":"自定义配置特别注意 如:xxxx.json,必须在 VS Studio 中右键属性设置 复制输出目录为如果较新则复制,生成操作为:内容。 如果 .json 文件配置在多个项目层,也必须保证命名唯一,不然编译后出现相互覆盖的情况。 中文乱码问题 默认情况下,.json 文件并未采用 utf-8 编码,所以如果存在中文读取后就会出现乱码情况,这时候,只需要修改 .json 文件编码为 utf-8 即可。","s":"4.1 配置","u":"/docs/configuration","h":"","p":426},{"i":429,"t":"简单来说,配置将系统应用可动态调配的选项放在统一地方管理,通过不同的配置让系统做出动态调整。 在 ASP.NET Core 应用程序启动时默认加载 启动项目 下的 appsettings.json 作为应用配置。同时还支持不同的运行环境加载对应的配置文件,如: Development:加载 appsettings.Development.json Staging:加载 appsettings.Staging.json {Environment}:appsettings.{Environment}.json","s":"4.1.1 什么是配置","u":"/docs/configuration","h":"#411-什么是配置","p":426},{"i":431,"t":"假设我们需要在系统运行时获取系统名称、版本号及版权信息,这些信息可能随时变化而且需要在多个地方使用。这时就需要将这些信息配置起来。具体步骤如下:","s":"4.1.2 配置的使用","u":"/docs/configuration","h":"#412-配置的使用","p":426},{"i":433,"t":"{ \"AppInfo\": { \"Name\": \"Furion\", \"Version\": \"1.0.0\", \"Company\": \"Baiqian\" } } 特别注意 appsettings.json 复制输出目录为如果较新则复制,生成操作为:内容。 另外,某些 linux 系统不支持读取带 注释 的 json 文件,直接读取将会报错。需要将 json 内的注释全部 删除 才能正常读取。","s":"4.1.2.1 配置 appsettings.json 信息","u":"/docs/configuration","h":"#4121-配置-appsettingsjson-信息","p":426},{"i":435,"t":"在 Furion 框架中,提供了两种读取方式: 依赖注入 IConfiguration 对象读取 通过 App.Configuration[path] 读取 App.Configuration[path] 依赖注入方式 using Microsoft.AspNetCore.Mvc; namespace Furion.Web.Entry.Controllers { [Route(\"api/[controller]\")] public class DefaultController : ControllerBase { [HttpGet] public string Get() { return $@\"名称:{App.Configuration[\"AppInfo:Name\"]}, 版本:{App.Configuration[\"AppInfo:Version\"]}, 公司:{App.Configuration[\"AppInfo:Company\"]}\"; } } } using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; namespace Furion.Web.Entry.Controllers { [Route(\"api/[controller]\")] public class DefaultController : ControllerBase { [HttpGet] public string Get([FromServices] IConfiguration configuration) { return $@\"名称:{configuration[\"AppInfo:Name\"]}, 版本:{configuration[\"AppInfo:Version\"]}, 公司:{configuration[\"AppInfo:Company\"]}\"; } } } 依赖注入的方式 通过依赖注入注入实例有几种方式: 构造函数注入方式 private readonly IConfiguration _configuration; public DefaultController(IConfiguration configuration) { _configuration = configuration; } 参数注入方式 [FromServices] public string Get([FromServices] IConfiguration configuration) { } 属性注入方式 public IConfiguration Configuration { get; set; } 想了解更多关于《ASP.NET Core - 依赖注入》 知识","s":"4.1.2.2 读取 appsettings.json 信息","u":"/docs/configuration","h":"#4122-读取-appsettingsjson-信息","p":426},{"i":437,"t":"在可依赖注入类中,依赖注入 IConfiguration 读取 在静态类/非依赖注入类中,选择 App.Configuration[path] 读取","s":"4.1.2.3 如何选择读取方式","u":"/docs/configuration","h":"#4123-如何选择读取方式","p":426},{"i":439,"t":"ASP.NET Core 和 Furion 提供了多种配置类型读取并转换成特定类型,包括基础类型,对象类型,数组,集合,字典等等,如: // ASP.NET Core var data = Configuration.GetSection(\"配置节点\").Get<类型>(); // Furion,推荐!!! var data = App.GetConfig<类型>(\"配置节点\");","s":"4.1.2.4 读取配置并转换成特定类型","u":"/docs/configuration","h":"#4124-读取配置并转换成特定类型","p":426},{"i":441,"t":"在 ASP.NET Core 中,配置采用 : 分隔符来读取分层配置数据。如上述例子中的 AppInfo:Name。如有更多层级数据则只需要通过 : 进入下一层节点即可。 假设我们有以下配置信息: { \"AppInfo\": { \"Name\": \"Furion\", \"Version\": \"1.0.0\", \"Company\": { \"Name\": \"Baiqian\", \"Address\": { \"City\": \"中国\", \"Province\": \"广东省\", \"Detail\": \"中山市东区紫马公园西门\" } } } } 读取第二层 读取第三层 读取第四层 读取第N层 var companyName = App.Configuration[\"AppInfo:Name\"]; // => Furion var companyName = App.Configuration[\"AppInfo:Company:Name\"]; // => Baiqian var companyName = App.Configuration[\"AppInfo:Company:Address:Detail\"]; // => 中山市东区紫马公园西门 var companyName = App.Configuration[\"AppInfo:Tier2:Tier3:Tier4...Tiern1:Tiern3...\"]; // => 中山市东区紫马公园西门","s":"4.1.3 路径符 查找节点","u":"/docs/configuration","h":"#413-路径符-查找节点","p":426},{"i":443,"t":"有些时候我们需要或者数组特定的某些,可以通过 App.Configuration[\"array:0\"] 获取,0 是索引数字。","s":"4.1.3.1 查找数组节点","u":"/docs/configuration","h":"#4131-查找数组节点","p":426},{"i":445,"t":"XML 配置说明 Furion v2.8.0 版本移除了 .xml 文件自动扫描配置了,改为手动添加配置。 大多情况下,我们的配置只需要在 appsettings.json 中配置即可,但一些特殊情况下,我们希望某些组件或功能拥有独立的配置,这个时候就需要用到自定义配置,Furion 目前支持 .json 和 .xml 两种方式配置,如: Furion.Web.Entry/emailsetting.json { \"outlook\": { \"smtp\": { \"server\": \"smtp.office365.com\", \"port\": \"587\", \"ssl\": \"STARTTLS\" }, \"pop\": { \"server\": \"outlook.office365.com\", \"port\": \"995\", \"ssl\": \"TLS\" } } } MyXMLFile Value Title from MyXMLFile Name from MyXMLFile Information Warning xml 配置事项 如果采用 xml 配置,那么文件名必须以 .config.xml 结尾(不区分大小写)。 特别说明 Furion 框架会在启动时自动扫描每一个项目层根目录下的 *.json 文件加入配置中,所以无需手工配置。 新增 *.json 文件的属性 复制到输出目录 设置为始终复制或较新复制,否则不会载入。另外配置文件不能出现重名,也就是保证整个项目中配置文件名字唯一。比如不能在非 Web 其他层定义 appsettings.json 文件。 在 v2.16.7+ 版本版本之后,支持自定义配置扫描目录: { \"ConfigurationScanDirectories\": [\"目录1名称\", \"目录1名称/子目录名称\"] } 同时 Furion 提供了非常灵活的方式支持自定义配置文件读取,如:","s":"4.1.4 自定义配置文件","u":"/docs/configuration","h":"#414-自定义配置文件","p":426},{"i":447,"t":"读取自定义配置文件和读取 appsettings.json 一致,系统会自动从多个配置文件中读取输入,如: App.Configuration[path] 依赖注入方式 var smtpServer = App.Configuration[\"outlook:smtp:server\"]; // => smtp.office365.com var smtpServer = _configuration[\"outlook:smtp:server\"]; // => smtp.office365.com","s":"4.1.4.1 读取 emailsetting.json 配置","u":"/docs/configuration","h":"#4141-读取-emailsettingjson-配置","p":426},{"i":449,"t":"有些时候,我们不需要 .json 或 .xml 自动载入配置中,我们只需要在启动层 appsettings.json 中添加 IgnoreConfigurationFiles 节点即可: { \"IgnoreConfigurationFiles\": [\"runtime.json\"] }","s":"4.1.4.2 排除特定配置文件","u":"/docs/configuration","h":"#4142-排除特定配置文件","p":426},{"i":451,"t":"在实际应用开发中,我们可能会根据不同的环境加载不同的配置文件,如 数据库连接字符串。 这时我们只需要遵循特定命名规范 {name}.{Environment}.json 即可。如: appsettings.Development.json appsettings.Staging.json appsettings.Production.json emailsetting.Development.json emailsetting.Staging.json emailsetting.Production.json 这时,ASP.NET Core 会在应用启动时自动加载不同环境的配置文件。","s":"4.1.5 不同环境读取","u":"/docs/configuration","h":"#415-不同环境读取","p":426},{"i":453,"t":"在 .NET Core 应用程序中,配置支持更改通知,也就是热更新操作。一旦监听到 appsetting.json 或自定义配置文件发生变动,就会触发 OnChange 方法。代码如下: var appInfoConfiguration = App.Configuration.GetSection(\"AppInfo\"); ChangeToken.OnChange(() => App.Configuration.GetReloadToken(), () => { var name = appInfoConfiguration[\"Name\"]; // 实时的最新值 var version = appInfoConfiguration[\"Version\"]; // 实时的最新值 }); 监听对象 如果监听全局配置文件传入 App.Configuration.GetReloadToken(),如果只需要监听特定节点,传入 App.Configuration.GetSection(\"AppInfo\")","s":"4.1.6 配置更改通知(热更新)","u":"/docs/configuration","h":"#416-配置更改通知热更新","p":426},{"i":455,"t":"获取路径说明 获取项目目录:AppContext.BaseDirectory 获取网站根目录:Directory.GetCurrentDirectory() 有些时候,我们的配置文件没有放在项目的根目录下,这时候我们需要手动载入自定义配置文件,有以下几种方式: 方式一:appsettings.json 中 (推荐) 支持版本 在 v2.16.7+ 版本有效 { \"ConfigurationScanDirectories\": [\"目录1名称\", \"目录1名称/子目录名称\"] } 方式二:.NET5 中 Program.cs 中配置 public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { // 加载自定义配置 config.AddJsonFile(\"MyConfig.json\", optional: true, reloadOnChange: true); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); } 方式三:.NET6 中 Program.cs 中配置 var builder = WebApplication.CreateBuilder(args) builder.Configuration.AddJsonFile(\"MyConfig.json\", optional: true, reloadOnChange: true); // 注意先添加配置再初始化 Furion builder.Inject(); var app = builder.Build(); app.Run(); 如果使用 Serve.Run() 模式可使用下列代码配置: Serve.Run(RunOptions.Default.ConfigureConfiguration((env, configuration) => { configuration.AddJsonFile(\"MyConfig.json\", optional: true, reloadOnChange: true); }));","s":"4.1.7 手动添加配置文件","u":"/docs/configuration","h":"#417-手动添加配置文件","p":426},{"i":457,"t":"优点 能够在系统运行时快速读取 无需额外配置 缺点 存在重复读取 通过硬编码字符串读取,容易出错 不能设置默认值 不能在运行环境中动态配置 不能验证配置有效性 不支持更改通知","s":"4.1.8 配置的优缺点","u":"/docs/configuration","h":"#418-配置的优缺点","p":426},{"i":459,"t":"如果只需要一次性读取配置信息,则使用配置,否则应该使用 《4.2 选项》代替。","s":"4.1.9 配置使用场景","u":"/docs/configuration","h":"#419-配置使用场景","p":426},{"i":461,"t":"ASP.NET Core 除了通过配置文件读取配置信息外,还支持自定义 配置提供程序,通过 配置提供程序 可以实现配置中心,比如通过数据库提供配置。 具体实现查看微软官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0#custom-configuration-provider 下面给出集成 AliginConfig 例子: 版本说明 以下内容仅限 Furion 4.4.9 + 版本使用。 Serve.Run 方式: Serve.Run(RunOptions.Default.WithArgs(args) .ConfigureInject((builder, options) => { options.ConfigureAppConfiguration((_, cfb) => { cfb.AddAgileConfig(new AgileConfig.Client.ConfigClient(builder.Configuration), obj => { Console.WriteLine($\"{obj}\"); }); }); options.ConfigureWebServices((_, services) => { services.AddAgileConfig(); }); }) ); .NET6+ 方式 var builder = WebApplication.CreateBuilder(args) .Inject((builder, options) => { options.ConfigureAppConfiguration((_, cfb) => { cfb.AddAgileConfig(new AgileConfig.Client.ConfigClient(builder.Configuration), obj => { Console.WriteLine($\"{obj}\"); }); }); options.ConfigureWebServices((_, services) => { services.AddAgileConfig(); }); }); .NET5 方式: public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder .Inject((builder, options) => { options.ConfigureAppConfiguration((_, cfb) => { cfb.AddAgileConfig(new AgileConfig.Client.ConfigClient(cfb.Build()), obj => { Console.WriteLine($\"{obj}\"); }); }); options.ConfigureWebServices((_, services) => { services.AddAgileConfig(); }); }) .UseStartup(); }); }","s":"4.1.10 实现配置中心","u":"/docs/configuration","h":"#4110-实现配置中心","p":426},{"i":463,"t":"Furion 会在应用启动的时候对 IConfiguration 进行静态缓存,如果使用了 App.Configuration 静态属性且配置数据已发生变更,则调用以下方法刷新即可: App.Configuration.Reload();","s":"4.1.11 重载配置","u":"/docs/configuration","h":"#4111-重载配置","p":426},{"i":465,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 配置 知识可查阅 ASP.NET Core - 配置 章节。","s":"4.1.12 反馈与建议","u":"/docs/configuration","h":"#4112-反馈与建议","p":426},{"i":467,"t":"版本说明 在 Furion 4.8.0+ 版本采用 TimeCrontab 作为 Cron 表达式解析。 版本说明 以下内容仅限 Furion 4.8.0 + 版本使用。","s":"26.2 Cron 表达式","u":"/docs/cron","h":"","p":466},{"i":469,"t":"Cron 表达式是一个字符串,字符串以 5 或 6 个空格隔开,分为 6 或 7 个域,每一个域代表一个含义,Cron 表达式通常是作为实现定时任务的基石。","s":"26.2.1 关于 Cron 表达式","u":"/docs/cron","h":"#2621-关于-cron-表达式","p":466},{"i":472,"t":"常规格式:分 时 天 月 周 var crontab = Crontab.Parse(\"* * * * *\"); var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);","s":"26.2.2.1 常规格式","u":"/docs/cron","h":"#26221-常规格式","p":466},{"i":474,"t":"支持年份:分 时 天 月 周 年 var crontab = Crontab.Parse(\"* * * * * *\", CronStringFormat.WithYears); var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);","s":"26.2.2.2 支持年份","u":"/docs/cron","h":"#26222-支持年份","p":466},{"i":476,"t":"支持秒数:秒 分 时 天 月 周 var crontab = Crontab.Parse(\"* * * * * *\", CronStringFormat.WithSeconds); var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);","s":"26.2.2.3 支持秒数","u":"/docs/cron","h":"#26223-支持秒数","p":466},{"i":478,"t":"支持秒和年:秒 分 时 天 月 周 年 var crontab = Crontab.Parse(\"* * * * * * *\", CronStringFormat.WithSecondsAndYears); var nextOccurrence = crontab.GetNextOccurrence(DateTime.Now);","s":"26.2.2.4 支持秒和年","u":"/docs/cron","h":"#26224-支持秒和年","p":466},{"i":480,"t":"为了方便常见的 Cron 表达式,如 每天,每月,每小时 等等,所以提供了 Macro 标识符和静态属性: // macro 字符串 var secondly = Crontab.Parse(\"@secondly\"); // 每秒 .0000000 var minutely = Crontab.Parse(\"@minutely\"); // 每分钟 00 var hourly = Crontab.Parse(\"@hourly\"); // 每小时 00:00 var daily = Crontab.Parse(\"@daily\"); // 每天 00:00:00 var monthly = Crontab.Parse(\"@monthly\"); // 每月 1 号 00:00:00 var weekly = Crontab.Parse(\"@weekly\"); // 每周日 00:00:00 var yearly = Crontab.Parse(\"@yearly\"); // 每年 1 月 1 号 00:00:00 // 静态属性 var secondly = Crontab.Secondly; // 每秒 .0000000 var minutely = Crontab.Minutely; // 每分钟 00 var hourly = Crontab.Hourly; // 每小时 00:00 var daily = Crontab.Daily; // 每天 00:00:00 var monthly = Crontab.Monthly; // 每月 1 号 00:00:00 var weekly = Crontab.Weekly; // 每周日 00:00:00 var yearly = Crontab.Yearly; // 每年 1 月 1 号 00:00:00","s":"26.2.2.5 Macro 标识符和静态属性","u":"/docs/cron","h":"#26225-macro-标识符和静态属性","p":466},{"i":482,"t":"字段 允许值 允许特别符号 格式化 秒 0-59 \\* , - / CronStringFormat.WithSeconds 或 CronStringFormat.WithSecondsAndYears 分钟 0-59 \\* , - / ALL 小时 0-23 \\* , - / ALL 天 1-31 \\* , - / ? L W ALL 月份 1-12 or JAN-DEC \\* , - / ALL 星期 0-6 or SUN-SAT \\* , - / ? L # ALL 年份 0001–9999 \\* , - / CronStringFormat.WithYears 或 CronStringFormat.WithSecondsAndYears *:表示匹配该域的任意值,假如在 分钟 域使用 *,即表示每分钟都会触发事件。 ?:只能用在 天 和 星期 两个域。它也匹配域的任意值,但实际不会。因为 天 和 星期 会相互影响。例如想在 每月的20日 触发调度,不管 20 日到底是星期几,则只能使用如下写法:13 13 15 20 * ?, 其中最后一位只能用 ?,而不能使用 *,如果使用 * 表示不管星期几都会触发,实际上并不是这样。 -:表示范围,例如在 分钟 域使用 5-20,表示从 5分 到20分钟 每分钟触发一次。 /:表示起始时间开始触发,然后每隔固定时间触发一次,例如在 分钟 域使用 5/20,则意味着 5分钟 触发一次,而 25,45 等分别触发一次。 ,:表示列出枚举值。例如:在 分钟 域使用 5,20,则意味着在 第5 和 第20分钟 分别触发一次。 L:表示最后,只能出现在 星期 和 月份 域,如果在 星期 域使用 5L,意味着在 最后的一个星期四 触发。 W:表示有效工作日(周一到周五),只能出现在 天 域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 天 使用 5W,如果 5日是星期六,则将在最近的工作日:星期五,即 4日 触发。如果 5日是星期天,则在6日(周一)触发;如果 5日在星期一到星期五中的一天,则就在 5日 触发。另外一点,W 的最近寻找不会跨过月份。 LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个非周六周末的日期。 #:用于确定每个月第几个星期几,只能出现在 星期 域。例如在 4#2,表示某月的第二个星期三。","s":"26.2.3 Cron 各字段说明","u":"/docs/cron","h":"#2623-cron-各字段说明","p":466},{"i":484,"t":"默认情况下,Cron 表达式不支持 秒 和 年 的,如有需求,可配置 CronStringFormat 枚举参数。 CronStringFormat 提供以下枚举值: CronStringFormat.Default:默认格式,书写顺序:分 时 天 月 周 CronStringFormat.WithYears:带年份格式,书写顺序:分 时 天 月 周 年 CronStringFormat.WithSeconds:带秒格式,书写顺序:秒 分 时 天 月 周 CronStringFormat.WithSecondsAndYears:带秒和年格式,书写顺序:秒 分 时 天 月 周 年","s":"26.2.4 CronStringFormat 格式化","u":"/docs/cron","h":"#2624-cronstringformat-格式化","p":466},{"i":486,"t":"对于大多数开发者来说,编写 Cron 表达式是有难度的,所以推荐使用在线 Cron 表达式生成器。 https://cron.qqe2.com/","s":"26.2.5 在线生成 Cron 表达式","u":"/docs/cron","h":"#2625-在线生成-cron-表达式","p":466},{"i":488,"t":"小建议 建议使用 【26.1 调度作业】 章节内容实现强大的分布式定时任务。 通过 Cron 表达式解析和 while 循环可以实现简单的定时任务。","s":"26.2.6 实现简单定时任务","u":"/docs/cron","h":"#2626-实现简单定时任务","p":466},{"i":490,"t":"// 阻塞方式 var crontab = Crontab.Parse(\"* * * * * *\", CronStringFormat.WithSeconds); while(true) { Thread.Sleep(crontab.GetSleepMilliseconds(DateTime.Now)); Console.WriteLine(DateTime.Now.ToString(\"G\")); } // 无阻塞方式 var crontab = Crontab.Parse(\"* * * * * *\", CronStringFormat.WithSeconds); Task.Factory.StartNew(async () => { while (true) { await Task.Delay(crontab.GetSleepMilliseconds(DateTime.Now)); Console.WriteLine(DateTime.Now.ToString(\"G\")); } }, TaskCreationOptions.LongRunning);","s":"26.2.6.1 while + Task 方式","u":"/docs/cron","h":"#26261-while--task-方式","p":466},{"i":492,"t":"using Furion.TimeCrontab; namespace WorkerService; public class Worker : BackgroundService { private readonly ILogger _logger; private readonly Crontab _crontab; public Worker(ILogger logger) { _logger = logger; _crontab = Crontab.Parse(\"* * * * * *\", CronStringFormat.WithSeconds); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current); await taskFactory.StartNew(async () => { // 你的业务代码写到这里面 _logger.LogInformation(\"Worker running at: {time}\", DateTime.Now); await Task.CompletedTask; }, stoppingToken); await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.Now), stoppingToken); } } }","s":"26.2.6.2 BackgroundService 方式","u":"/docs/cron","h":"#26262-backgroundservice-方式","p":466},{"i":494,"t":"// 实例属性 var format = crontab.Format; // 获取当前格式化配置 // 静态属性 var secondly = Crontab.Secondly; // 每秒 .0000000 var minutely = Crontab.Minutely; // 每分钟 00 var hourly = Crontab.Hourly; // 每小时 00:00 var daily = Crontab.Daily; // 每天 00:00:00 var monthly = Crontab.Monthly; // 每月 1 号 00:00:00 var weekly = Crontab.Weekly; // 每周日 00:00:00 var yearly = Crontab.Yearly; // 每年 1 月 1 号 00:00:00 // 实例方法 // 获取下一个执行时间 var nextOccurrence = crontab.GetNextOccurrence(起始时间); var nextOccurrence = crontab.GetNewDbContext(起始时间, 结束时间); // 获取特定时间所有执行执行时间 var nextOccurrences = crontab.GetNextOccurrences(起始时间, 结束时间); // 获取当前时间和下一个发生时间相差毫秒数 var sleepMilliseconds = crontab.GetSleepMilliseconds(起始时间); // 将 crontab 对象转换成 cron 表达式 var expression = crontab.ToString(); // 静态方法 // 解析表达式 var crontab = Crontab.Parse(\"表达式\", CronStringFormat.Default); // 转换表达式为 Crontab 对象 var crontab = Crontab.TryParse(\"表达式\", CronStringFormat.Default); // 转换表达式为 Crontab 对象","s":"26.2.7 Crontab 对象属性和方法","u":"/docs/cron","h":"#2627-crontab-对象属性和方法","p":466},{"i":496,"t":"与我们交流 给 Furion 提 Issue。","s":"26.2.8 反馈与建议","u":"/docs/cron","h":"#2628-反馈与建议","p":466},{"i":498,"t":"连接字符串配置注意事项 如果连接字符串是配置在自定义的 .json 文件中,那么必须在 Visual Studio 中配置 .json 右键属性,设置 复制 输出目录为 如果较新则复制,生成操作为:内容。 否则就会提示找不到配置或连接字符串的错误。","s":"9.1 数据库上下文","u":"/docs/dbcontext","h":"","p":497},{"i":500,"t":"简单来说,数据库上下文是负责和数据库交互的对象,提供程序对数据库存取提供了大量的方法。 在 Furion 框架中,默认集成了微软亲儿子:EntityFramework Core ,也就是通常数据库上下文指的是 DbContext 类或它的实现类。","s":"9.1.1 数据库上下文","u":"/docs/dbcontext","h":"#911-数据库上下文","p":497},{"i":502,"t":"在我们实际项目开发过程中,使用 EFCore 提供的 DbContext 操作对象操作数据库有些繁琐和复杂,且默认不具备读写分离、多库等操作功能。 所以,Furion 框架提供了 AppDbContext 数据库上下文,该上下文继承自 DbContext。 特别说明 后续章节,皆采用 EFCore 代替 EntityFramework Core。","s":"9.1.2 AppDbContext","u":"/docs/dbcontext","h":"#912-appdbcontext","p":497},{"i":504,"t":"AppDbContext 继承自 DbContext,具备 DbContext 所有功能。 AppDbContext 支持多数据库操作泛型版本,如:AppDbContext AppDbContext 自动配置实体信息,无需在 OnModelCreating 中配置 AppDbContext 支持内置多租户支持 AppDbContext 支持全局模型配置拦截器 AppDbContext 支持数据提交更改多个事件 AppDbContext 提供更加强大的模型操作能力,如 Sql 操作,读写分离等 AppDbContext 能够得到 Furion 框架更多的功能支持","s":"9.1.3 AppDbContext 和 DbContext 区别","u":"/docs/dbcontext","h":"#913-appdbcontext-和-dbcontext-区别","p":497},{"i":506,"t":"在 Furion 框架中了,提供了两种 AppDbContext 定义方式: AppDbContext 操作默认数据库 AppDbContext 操作 N 个数据库 其中 AppDbContext 默认继承自 AppDbContext。 下面是数据库上下文创建的多个例子:","s":"9.1.4 如何定义数据库上下文","u":"/docs/dbcontext","h":"#914-如何定义数据库上下文","p":497},{"i":508,"t":"using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"连接字符串或appsetting.json 键\")] public class FurionDbContext : AppDbContext // 继承 AppDbContext<> 类 { /// /// 继承父类构造函数 /// /// public FurionDbContext(DbContextOptions options) : base(options) { } } }","s":"9.1.4.1 创建默认数据库上下文","u":"/docs/dbcontext","h":"#9141-创建默认数据库上下文","p":497},{"i":510,"t":"using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"连接字符串或appsetting.json 键\")] public class FurOtherDbContext : AppDbContext // 继承 AppDbContext<> 类 { /// /// 继承父类构造函数 /// /// public FurOtherDbContext(DbContextOptions options) : base(options) { } } } 特别注意 所有数据库上下文都应该在 Furion.EntityFramework.Core 项目中创建。另外如果系统用到了多个数据库,那么从第二个开始必须指定数据库上下文定位器。关于 TDbContextLocator 将在下一章节 《9.2 数据库上下文定位器》阐述。","s":"9.1.4.2 创建其他数据库上下文","u":"/docs/dbcontext","h":"#9142-创建其他数据库上下文","p":497},{"i":512,"t":"Furion 框架提供多种数据库连接字符串配置方式: 在注册数据库服务时配置:AddDbPool(\"连接字符串\") 方式 使用 [AppDbContext(\"连接字符串/Key\")] 特性方式(只在 AppDbContext 实现类有效)推荐 通过重写 OnConfiguring(DbContextOptionsBuilder optionsBuilder) 配置","s":"9.1.5 配置连接字符串","u":"/docs/dbcontext","h":"#915-配置连接字符串","p":497},{"i":514,"t":"Furion.EntityFramework.Core\\Startup.cs using Furion.DependencyInjection; using Microsoft.Extensions.DependencyInjection; namespace Furion.EntityFramework.Core { [AppStartup(600)] public sealed class FurEntityFrameworkCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { // 配置数据库上下文,支持N个数据库 services.AddDatabaseAccessor(options => { // 配置默认数据库 options.AddDbPool(DbProvider.SqlServer, connectionMetadata:\"连接字符串\"); // 配置多个数据库,多个数据库必须指定数据库上下文定位器 options.AddDbPool(DbProvider.Sqlite, connectionMetadata:\"连接字符串\"); }); } } } 新版 MySQL 注意 MySQL 在新版本包中注册有所修改,所以注册方式为: services.AddDatabaseAccessor(options => { options.AddDbPool($\"{DbProvider.MySql}@8.0.22\"); });","s":"9.1.5.1 在注册数据库服务时配置","u":"/docs/dbcontext","h":"#9151-在注册数据库服务时配置","p":497},{"i":516,"t":"using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"DbConnectionString\")] // 支持 `appsetting.json` 名或 连接字符串 public class FurionDbContext : AppDbContext { /// /// 继承父类构造函数 /// /// public FurionDbContext(DbContextOptions options) : base(options) { } } } 小提示 Furion 推荐使用此方式配置数据库连接字符串。 [AppDbContext] 内置属性: ConnectionMetadata:支持数据库连接字符串,配置文件的 ConnectionStrings 中的 Key 或配置文件的完整的配置路径,如果是内存数据库,则为数据库名称。 TablePrefix:当前数据库上下文表统一前缀 TableSuffix:当前数据库上下文表统一后缀 ProviderName:配置数据库提供器类型,传入 DbProvider.Xxx Mode:配置数据库上下文模式,DbContextMode 枚举类型,取值: Cached:缓存模型数据库上下文,默认值 Dynamic:动态模型数据库上下文 SlaveDbContextLocators:主从库配置,设置多个从库定位器,Type[] 类型","s":"9.1.5.2 [AppDbContext] 方式配置","u":"/docs/dbcontext","h":"#9152-appdbcontext-方式配置","p":497},{"i":518,"t":"using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { public class FurionDbContext : AppDbContext { /// /// 继承父类构造函数 /// /// public FurionDbContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder); optionsBuilder.UseSqlServer(\"数据库连接字符串\"); } } } 特别注意 这三种方式可以同时使用,但是有优先级:[AppDbContext] -> 在注册数据库服务时配置 -> OnConfiguring(低到高) 也就是 OnConfiguring 配置会覆盖 在注册数据库服务时配置 配置,在注册数据库服务时配置 配置会覆盖 [AppDbContext] 配置所配置的连接字符串。","s":"9.1.5.3 OnConfiguring 方式配置","u":"/docs/dbcontext","h":"#9153-onconfiguring-方式配置","p":497},{"i":520,"t":"Sqlite:Data Source=./Furion.db MySql:Data Source=localhost;Database=Furion;User ID=root;Password=000000;pooling=true;port=3306;sslmode=none;CharSet=utf8; SqlServer:Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True; Oracle:User Id=orcl;Password=orcl;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl))) PostgreSQL:PORT=5432;DATABASE=postgres;HOST=127.0.0.1;PASSWORD=postgres;USER ID=postgres;","s":"9.1.5.4 各类数据库连接字符串配置示例","u":"/docs/dbcontext","h":"#9154-各类数据库连接字符串配置示例","p":497},{"i":522,"t":"特别注意 在 Furion 框架中,数据库上下文需定义在 Furion.EntityFramework.Core 中,且每一个数据库上下文都必须拥有唯一的 DbContextLocator 定位器","s":"9.1.6 数据库上下文定义位置","u":"/docs/dbcontext","h":"#916-数据库上下文定义位置","p":497},{"i":524,"t":"数据库上下文配置好数据库连接字符串后,需要注册该数据库上下文,并指定数据库类型,如: Furion\\framework\\Furion.EntityFramework.Core\\FurEntityFrameworkCoreStartup.cs using Furion.DatabaseAccessor; using Microsoft.Extensions.DependencyInjection; namespace Furion.EntityFramework.Core { [AppStartup(600)] public sealed class FurEntityFrameworkCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddDatabaseAccessor(options => { options.AddDbPool(DbProvider.Sqlite); }); } } } 如果有多个数据库操作,那么从第二个起,就需要绑定数据库上下文定位器,如: options.AddDbPool(DbProvider.Sqlite); // 第一个数据库 options.AddDbPool(DbProvider.SqlServer); // 第二个数据库 options.AddDbPool(DbProvider.SqlServer); // 第三个数据库","s":"9.1.7 数据库上下文注册","u":"/docs/dbcontext","h":"#917-数据库上下文注册","p":497},{"i":526,"t":"在 Furion 框架中,为了能够实现数据库的简单使用进行了注册封装,但有些时候,我们可能需要添加更多配置,这时就需要使用原生自定义配置方式,如: services.AddDatabaseAccessor(options => { // 自定义原生配置 options.AddDb((services, builder) => { builder.UseSqlite(...); } }); 小知识 Furion 框架提供了快速解析连接字符串的静态方法,自动根据名称读取配置,自动解析 [AppContext(\"...\")] 信息,如: // 获取连接字符串 var connStr = DbProvider.GetConnectionString(/*这里可写可不写*/); options.AddDb((services, builder) => { builder.UseSqlite(connStr, ...); }","s":"9.1.8 自定义高级注册","u":"/docs/dbcontext","h":"#918-自定义高级注册","p":497},{"i":528,"t":"在 Furion 框架中,数据库上下文是定义在 Furion.EntityFramework.Core 项目层,并且该层不被 Furion.Application 和 Furion.Core 等层引用。 所以就不能直接在 Furion.Application 项目层直接使用 Furion.EntityFramework.Core 定义的数据库上下文。 Furion 为了解决这个问题,提供了两种方式处理: repository.Context :当前数据库上下文对象,返回是 DbContext 抽象类型 repository.DynamicContext:当前数据库上下文对象,返回的是 dynamic 类型 如果你只是想使用 DbContext 的功能,直接使用 repository.Context 即可,如: repository.Context.SaveChanges(); 如果你想能够获取具体的数据库上下文类型,如 MyDbContext,那么使用 repository.DynamicContext 就可以获取到具体的 MyDbContext 类型。如: var persons = repository.DynamicContext.Persons.Find(1); var users = repository.DynamicContext.Users; 这样就可以直接操作 MyDbContext 定义的属性和方法了。","s":"9.1.9 动态数据库上下文对象","u":"/docs/dbcontext","h":"#919-动态数据库上下文对象","p":497},{"i":530,"t":"由于 DbContext 默认注册为 Scoped 生存周期,所以在后台任务中使用 IServiceScopeFactory 获取所有服务,如: public class JobService : BackgroundService { // 日志对象 private readonly ILogger _logger; // 服务工厂 private readonly IServiceScopeFactory _scopeFactory; public JobService(ILogger logger , IServiceScopeFactory scopeFactory) { _logger = logger; _scopeFactory = scopeFactory; } protected override Task ExecuteAsync(CancellationToken stoppingToken) { _logger.LogInformation(\"写日志~~\"); using (var scope = _scopeFactory.CreateScope()) { var services = scope.ServiceProvider; // 获取数据库上下文 var dbContext = Db.GetDbContext(services); // 获取仓储 var repository = Db.GetRepository(services); // 解析其他服务 var otherService = services.GetService(); } return Task.CompletedTask; } } 数据库操作注意 如果作用域中对数据库有任何变更操作,需手动调用 SaveChanges 或带 Now 结尾的方法。也可以使用 Scoped.CreateUow(handler) 代替。","s":"9.1.10 在后台任务中使用","u":"/docs/dbcontext","h":"#9110-在后台任务中使用","p":497},{"i":532,"t":"InsertOrUpdateIgnoreNullValues:新增或更新忽略空值,默认 false,在构造函数中配置 EnabledEntityStateTracked:启用实体跟踪,默认 true,在构造函数中配置 EnabledEntityChangedListener:启用实体数据更改监听,默认 false,在构造函数中配置 Tenant:默认内置多租户 FailedAutoRollback:是否启用保存失败后事务自动回滚,默认 true,可以在任何地方配置","s":"9.1.11 AppDbContext 全局配置属性","u":"/docs/dbcontext","h":"#9111-appdbcontext-全局配置属性","p":497},{"i":534,"t":"第一步:安装 EFCore 拓展包 在数据库上下文定义所在的层安装 Microsoft.EntityFrameworkCore.Proxies 拓展包 第二步:采用 AddDb 方式注册 确保数据库上下文采用 AddDb 注册而非 AddDbPool。 第三步:重写 OnConfiguring 方法 using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class DefaultDbContext : AppDbContext { public DefaultDbContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseLazyLoadingProxies() .UseSqlite(DbProvider.GetConnectionString()); base.OnConfiguring(optionsBuilder); } } } 小知识 更多 EFCore 懒加载可查看 【EFCore - 延迟加载】 文档。","s":"9.1.12 配置实体 懒加载","u":"/docs/dbcontext","h":"#9112-配置实体-懒加载","p":497},{"i":536,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 数据库上下文 知识可查阅 EF Core - 配置 DbContext 章节。","s":"9.1.13 反馈与建议","u":"/docs/dbcontext","h":"#9113-反馈与建议","p":497},{"i":538,"t":"温馨提醒 在 Furion 包中默认集成了 EFCore,如果不使用 EFCore,可安装纯净版 Furion.Pure 代替 Furion。","s":"10.2 Dapper 集成","u":"/docs/dapper","h":"","p":537},{"i":540,"t":"Dapper 是 .NET/C# 平台非常优秀的 微型 ORM 框架,主要是为 ADO.NET 操作对象提供拓展能力,推崇原生 sql 操作法。 Dapper 官方仓库地址:https://github.com/StackExchange/Dapper","s":"10.2.1 关于 Dapper","u":"/docs/dapper","h":"#1021-关于-dapper","p":537},{"i":542,"t":"在 Furion 框架中,已经推出 Dapper 拓展包 Furion.Extras.DatabaseAccessor.Dapper。","s":"10.2.2 如何集成","u":"/docs/dapper","h":"#1022-如何集成","p":537},{"i":544,"t":"使用非常简单,只需要在 Startup.cs 中添加 services.AddDapper(connStr, SqlProvider) 即可。如: services.AddDapper(\"Data Source=./Furion.db\", SqlProvider.Sqlite); // 更多配置,仅 v3.4.3+ 版本有效 servers.AddDapper(\"Data Source=./Furion.db\", SqlProvider.Sqlite, () => { DefaultTypeMap.MatchNamesWithUnderscores = true; })","s":"10.2.2.1 注册 Dapper 服务","u":"/docs/dapper","h":"#10221-注册-dapper-服务","p":537},{"i":546,"t":"SqlServer:Microsoft.Data.SqlClient Sqlite:Microsoft.Data.Sqlite MySql:MySql.Data Npgsql:Npgsql Oracle:Oracle.ManagedDataAccess.Core Firebird:FirebirdSql.Data.FirebirdClient 安装拓展包位置 在 Furion 框架中,推荐将拓展包 Furion.Extras.DatabaseAccessor.Dapper 安装到 Furion.Core 层中。","s":"10.2.2.2 安装对应的数据库提供器","u":"/docs/dapper","h":"#10222-安装对应的数据库提供器","p":537},{"i":548,"t":"在使用之前,我们可以通过构造函数注入 IDapperRepository 或 IDapperRepository 接口,如: 非泛型版本 private readonly IDapperRepository _dapperRepository; public PersonService(IDapperRepository dapperRepository) { _dapperRepository = dapperRepository; } 泛型版本 private readonly IDapperRepository _personRepository; public PersonService(IDapperRepository personRepository) { _personRepository = personRepository; }","s":"10.2.3 基本使用","u":"/docs/dapper","h":"#1023-基本使用","p":537},{"i":550,"t":"var data = _dapperRepository.Query(\"select * from person\"); var data = await _dapperRepository.QueryAsync(\"select * from person\"); var data = _dapperRepository.Query(\"select * from person\"); var guid = Guid.NewGuid(); var dog = _dapperRepository.Query(\"select Age = @Age, Id = @Id\", new { Age = (int?)null, Id = guid }); var count = _dapperRepository.Execute(@\"insert MyTable(colA, colB) values (@a, @b)\", new[] { new { a=1, b=1 }, new { a=2, b=2 }, new { a=3, b=3 } } ); var user = _dapperRepository.Query(\"spGetUser\", new {Id = 1}, commandType: CommandType.StoredProcedure).SingleOrDefault(); 用法和官方一致,此处不再举更多例子。","s":"10.2.3.1 sql 操作","u":"/docs/dapper","h":"#10231-sql-操作","p":537},{"i":552,"t":"Furion 框架提供了 IDapperRepository 和 IDapperRepository 两个操作仓储,后者继承前者。使用如下: var person = personRepository.Get(1); var persons = personRepository.GetAll(); var effects = personRepository.Insert(person); var effects = personRepository.Update(person); var effects = personRepository.Delete(person); var effects = personRepository.Insert(persons); // 插入多个 var effects = personRepository.Update(persons); // 更新多个 var effects = personRepository.Delete(persons); // 删除多个 var effects = await personRepository.InsertAsync(person);","s":"10.2.3.2 操作","u":"/docs/dapper","h":"#10232-tentity-操作","p":537},{"i":554,"t":"IDapperRepository 和 IDapperRepository 仓储提供了 Context 和 DynamicContext 属性,该属性返回 IDbConnection 对象。 拿到该对象后,我们就可以操作 Dapper 提供的所有操作了,如:","s":"10.2.4 高级使用","u":"/docs/dapper","h":"#1024-高级使用","p":537},{"i":556,"t":"var sql = @\"select * from #Posts p left join #Users u on u.Id = p.OwnerId Order by p.Id\"; var data = dapperRepository.Context.Query(sql, (post, user) => { post.Owner = user; return post;}); var post = data.First();","s":"10.2.4.1 查询一对一","u":"/docs/dapper","h":"#10241-查询一对一","p":537},{"i":558,"t":"var sql = @\" select * from Customers where CustomerId = @id select * from Orders where CustomerId = @id select * from Returns where CustomerId = @id\"; using (var multi = dapperRepository.Context.QueryMultiple(sql, new {id=selectedId})) { var customer = multi.Read().Single(); var orders = multi.Read().ToList(); var returns = multi.Read().ToList(); // ... }","s":"10.2.4.2 查询多个结果","u":"/docs/dapper","h":"#10242-查询多个结果","p":537},{"i":560,"t":"var shapes = new List(); using (var reader = dapperRepository.Context.ExecuteReader(\"select * from Shapes\")) { var circleParser = reader.GetRowParser(typeof(Circle)); var squareParser = reader.GetRowParser(typeof(Square)); var triangleParser = reader.GetRowParser(typeof(Triangle)); var typeColumnIndex = reader.GetOrdinal(\"Type\"); while (reader.Read()) { IShape shape; var type = (ShapeType)reader.GetInt32(typeColumnIndex); switch (type) { case ShapeType.Circle: shape = circleParser(reader); break; case ShapeType.Square: shape = squareParser(reader); break; case ShapeType.Triangle: shape = triangleParser(reader); break; default: throw new NotImplementedException(); } shapes.Add(shape); } }","s":"10.2.4.3 更多操作","u":"/docs/dapper","h":"#10243-更多操作","p":537},{"i":562,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 Dapper 知识可查阅 Dapper 官网。","s":"10.2.5 反馈与建议","u":"/docs/dapper","h":"#1025-反馈与建议","p":537},{"i":565,"t":"在一个企业应用系统中,用户对系统所有的操作包括请求、数据库操作等等都应该记录起来,那么这些日志我们称为操作日志,也可以说审计日志。 通常来说,我们审计日志更多指的是数据库的操作记录。 审计日志一般会记录以下三个操作: 新增操作:记录某某人在某某时间对哪个表新增了什么数据 更新操作:记录某某人在某某时间对哪个表的哪些数据做了更改,记录更改前的值和更改后的值 删除操作:记录某某人在某某时间对哪个表删除了什么数据","s":"9.22.1 审计日志","u":"/docs/dbcontext-audit","h":"#9221-审计日志","p":563},{"i":567,"t":"Furion 框架中为所有 AppDbContext 子类都提供了三个可重写的方法,这三个方法分别由三个事件触发: 提交更改之前 SavingChanges 事件:触发 void SavingChangesEvent(DbContextEventData eventData, InterceptionResult result) 方法 提交更改之后 SavedChanges 事件:触发 void SavedChangesEvent(SaveChangesCompletedEventData eventData, int result) 方法 提交更改失败 SaveChangesFailed 事件:触发 void SaveChangesFailedEvent(DbContextErrorEventData eventData) 方法 通过这三个事件我们就可以捕获所有更改的实体然后保存到数据库审计日志中。","s":"9.22.2 关于 SaveChanges 事件","u":"/docs/dbcontext-audit","h":"#9222-关于-savechanges-事件","p":563},{"i":570,"t":"我们只需要在 AppDbContext 子类中重写 SavingChanges 事件对应方法即可: using Furion.DatabaseAccessor; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using System; using System.Linq; using System.Security.AccessControl; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\")] public class FurionDbContext : AppDbContext { public FurionDbContext(DbContextOptions options) : base(options) { } /// /// 重写保存之前事件 /// /// /// protected override void SavingChangesEvent(DbContextEventData eventData, InterceptionResult result) { // 获取当前事件对应上下文 var dbContext = eventData.Context; // 强制重新检查一边实体更改信息 // dbContext.ChangeTracker.DetectChanges(); // 获取所有更改,删除,新增的实体,但排除审计实体(避免死循环) var entities = dbContext.ChangeTracker.Entries() .Where(u => u.Entity.GetType() != typeof(Audit) && (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added)) .ToList(); // 通过请求中获取当前操作人 var userId = App.GetService().HttpContext.Items[\"UserId\"]; // 获取所有已更改的实体 foreach (var entity in entities) { // 获取实体类型 var entityType = entity.Entity.GetType(); // 获取所有实体有效属性,排除 [NotMapper] 属性 var props = entity.OriginalValues.Properties; // 获取实体当前(现在)的值 var currentValues = entity.CurrentValues; // 获取数据库中实体的值 var databaseValues = entity.GetDatabaseValues(); // 遍历所有属性 foreach (var prop in props) { // 获取属性名 var propName = prop.Name; // 获取现在的实体值 var newValue = currentValues[propName]; object oldValue = null; // 如果是新增数据,则 databaseValues 为空,所以需要判断一下 if (databaseValues != null) { oldValue = databaseValues[propName]; } // 插入审计日志表,Audit 是你自定义的实体 dbContext.Set().Add(new Audit { Table = entityType.Name, // 表名 Column = propName, // 更新的列 NewValue = newValue, // 新值 OldValue = oldValue, // 旧值 CreatedTime = DateTime.Now, // 操作时间 UserId = userId, // 操作人 Operate = entity.State.ToString() // 操作方式:新增、更新、删除 }); } } } } } 小知识 如果对性能有所要求,那么建议审计日志通过 日志组件 写入数据库,如通过 Nlog、Log4Net 这些等: // 插入审计日志表 dbContext.Set().Add(new Audit { Table = entityType.Name, // 表名 Column = propName, // 更新的列 newValue = newValue, // 新值 OldValue = oldValue, // 旧值 CreatedTime = DateTime.Now, // 操作时间 UserId = userId, // 操作人 Operate = entity.State.ToString() // 操作方式:新增、更新、删除 }); 替换为: logger.Information(JsonConvert.SerializeObject(new Audit { Table = entityType.Name, // 表名 Column = propName, // 更新的列 newValue = newValue, // 新值 OldValue = oldValue, // 旧值 CreatedTime = DateTime.Now, // 操作时间 UserId = userId, // 操作人 Operate = entity.State.ToString() // 操作方式:新增、更新、删除 })); 通过上面的例子,我们就可以对数据库所有的新增、更新、删除进行监控了。","s":"9.22.3.1 数据库审计日志","u":"/docs/dbcontext-audit","h":"#92231-数据库审计日志","p":563},{"i":572,"t":"主要通过 DbCommandInterceptor 拦截实现,具体使用可查看 数据库拦截器 - DbCommandInterceptor,如: using Microsoft.EntityFrameworkCore.Diagnostics; using System.Data.Common; using System.Threading; using System.Threading.Tasks; namespace Furion.Web.Core { /// /// 执行 sql 审计 /// public sealed class SqlCommandAuditInterceptor : DbCommandInterceptor { public override InterceptionResult NonQueryExecuting(DbCommand command, CommandEventData eventData, InterceptionResult result) { // 获取执行的 sql 语句 var sql = command.CommandText; // 获取执行的 sql 类型,是 sql 语句,还是存储过程,还是其他 var type = command.CommandType; // 获取 sql 传递的命令参数 var parameters = command.Parameters; // 写日志~~~~ return base.NonQueryExecuting(command, eventData, result); } public override ValueTask> NonQueryExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { // 获取执行的 sql 语句 var sql = command.CommandText; // 获取执行的 sql 类型,是 sql 语句,还是存储过程,还是其他 var type = command.CommandType; // 获取 sql 传递的命令参数 var parameters = command.Parameters; // 写日志~~~~ return base.NonQueryExecutingAsync(command, eventData, result, cancellationToken); } // 其他 override } } 注册审计日志 只需要在注册数据库上下文中指定 interceptors 参数即可 // services.AddDb 一样 services.AddDbPool(interceptors: new IInterceptor[] { new SqlCommandAuditInterceptor() });","s":"9.22.3.2 执行 sql 审计日志","u":"/docs/dbcontext-audit","h":"#92232-执行-sql-审计日志","p":563},{"i":574,"t":"关于请求审计日志 如需实现请求审计日志可查阅 【5.4 请求审计日志章节】","s":"9.22.3.3 请求审计日志","u":"/docs/dbcontext-audit","h":"#92233-请求审计日志","p":563},{"i":576,"t":"与我们交流 给 Furion 提 Issue。","s":"9.22.4 反馈与建议","u":"/docs/dbcontext-audit","h":"#9224-反馈与建议","p":563},{"i":579,"t":"数据校验字面上的意思就是对使用者提交过来的数据进行合法性验证。在一套完善的应用系统中,数据有效性校验是必不可少的业务处理第一道关卡。","s":"8.1 关于数据校验","u":"/docs/data-validation","h":"#81-关于数据校验","p":577},{"i":581,"t":"过滤不安全数据,提高系统的安全性 减少不必要的业务异常处理,提高系统的响应速度 大大提高系统稳定性 大数据并发时起着一定的缓冲作用","s":"8.2 数据校验的好处","u":"/docs/data-validation","h":"#82-数据校验的好处","p":577},{"i":583,"t":"传统方式,在业务代码之前手动验证 Mvc 特性方式,Mvc 内置的 DataAnnotations 方式 推荐方式,Furion 框架内置的 DataValidation 验证 其他方式,使用第三方验证库,如 FluentValidation","s":"8.3 数据校验方式","u":"/docs/data-validation","h":"#83-数据校验方式","p":577},{"i":585,"t":"在很多老项目中,我们经常看到这样的代码: public bool Insert(Person person) { // 验证参数 if(string.IsNullOrEmty(person.Name)) { throw new System.Exception(\"名字不能为空\"); } if(person.Age < 18) { throw new System.Exception(\"年龄不能小于 18 岁\"); } if(!person.Password.Equals(person.ConfirmPassword) { throw new System.Exception(\"两次密码不一致\"); } // 业务代码 _repository.Insert(person.Adapt()); // ... } 从上面的代码看起来,似乎没有什么不妥,但是从一个程序可维护性来说,这是一个糟糕的代码,因为该业务代码中包含了太多与业务无关的数据验证。 试想一下,如果这个 Person 有 几十个参数都需要验证呢?可想而知,这是一个庞大的业务代码。 再者,如果其他地方也需要用到这个 Person 类验证呢?那代码好比老鼠啃过的面包屑一样,到处都是。 如此得知,这样的方式是极其不推荐的,不但污染了业务代码,也破坏了业务职责单一性原理,也让验证逻辑无法实现通用,后续维护难度大大升级。","s":"8.3.1 传统方式","u":"/docs/data-validation","h":"#831-传统方式","p":577},{"i":587,"t":"在 ASP.NET Core 中,微软为我们提供了全新的 特性 验证方式,可通过对对象贴特性实现数据验证。这种方式有效的将数据校验和业务代码剥离开来,而且容易使用和拓展。 在模型中验证 using System.ComponentModel.DataAnnotations; namespace Hoa.Application.Authorization.Dtos { public class SignInInput { [Required] // 必填验证 [MinLength(4)] // 最小长度验证 public string Account { get; set; } [Required] // 必填验证 [MaxLength(32)] // 最大长度验证 public string Password { get; set; } } } 在参数中验证 public void CheckMethodParameterValid( [Required] // 必填验证 [MinLength(4)] // 最小长度验证 string name, int age, [Required] // 必填验证 [RegularExpression(\"[a-zA-Z0-9_]{8,30}\") // 正则表达式验证 string password, [Required] // 必填验证 [RegularExpression(\"[a-zA-Z0-9_]{8,30}\") // 正则表达式验证 string confirmPassword ) { // TODO } 小提醒 如果函数的参数大于或等于 3 个,建议抽离出模型类,也就是不建议上面的方式。 Mvc 内置特性 [ValidateNever]:指示熟悉或参数从验证中排除 [CreditCard]:信用卡格式验证 [Compare]:验证两个属性值是否匹配 [EmailAddress]:验证电子邮箱 [Phone]:验证电话号码 [Range]:验证指定范围 [RegularExpression]:验证属性值是否匹配正则表达式 [Required]:验证不为 null [StringLength]:验证字符串长度 [URL]:验证是否有效的 URL 格式 [Remote]:调用远程服务地址进行客户端验证 Mvc 内置特性 想了解 Mvc 内置特性列表可查看官方文档 ASP.NET Core - 模型验证 自定义特性验证 public class ClassicMovieAttribute : ValidationAttribute { public ClassicMovieAttribute(int year) { Year = year; } public int Year { get; } public string GetErrorMessage() => $\"Classic movies must have a release year no later than {Year}.\"; protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var movie = (Movie)validationContext.ObjectInstance; var releaseYear = ((DateTime)value).Year; if (movie.Genre == Genre.Classic && releaseYear > Year) { return new ValidationResult(GetErrorMessage()); } return ValidationResult.Success; } } IValidatableObject 复杂验证 using System.Collections.Generic; public class DtoModel : IValidatableObject { [Required] [StringLength(100)] public string Title { get; set; } // 你的验证逻辑 public IEnumerable Validate(ValidationContext validationContext) { // 还可以解析服务 var service = validationContext.GetService(typeof(类型)); if (你的逻辑代码) { yield return new ValidationResult( \"错误消息\" ,new[] { nameof(Title) } // 验证失败的属性 ); } } } Mvc 特性方式极大的将业务逻辑和验证进行了剥离和解耦,而且还能实现自定义复杂验证。 但是 Mvc 特性验证方式有几个明显的缺点: 只能在 控制器 中的 Action(动作方法)中使用 无法在任意类、任意方法中使用 内置的验证类型非常有限,且不易拓展 不支持验证消息后期配置 所以,Furion 提供了新的验证引擎 DataValidation,在完全兼容 Mvc 内置验证的同时提供了大量常见验证、复杂验证、自定义验证等能力。","s":"8.3.2 Mvc 特性方式","u":"/docs/data-validation","h":"#832-mvc-特性方式","p":577},{"i":589,"t":"DataValidation 是 Furion 框架提供了全新的验证方式,完全兼容 Mvc 内置验证,并且赋予了超能。","s":"8.4 DataValidation 验证 🤗","u":"/docs/data-validation","h":"#84-datavalidation-验证-","p":577},{"i":591,"t":"完全兼容 Mvc 内置验证引擎 内置常见验证类型及可自定义验证类型功能 提供全局对象拓展验证方式 支持验证消息后期配置,支持实时更新 支持在任何类,任何方法、任何位置实现手动验证、特性方式验证等 支持设置验证结果模型","s":"8.4.1 DataValidation 优点","u":"/docs/data-validation","h":"#841-datavalidation-优点","p":577},{"i":593,"t":"备注 .AddDataValidation() 默认已经集成在 AddInject() 中了,无需再次注册。也就是 8.5.1 章节可不配置。","s":"8.5 DataValidation 使用","u":"/docs/data-validation","h":"#85-datavalidation-使用","p":577},{"i":595,"t":"Furion.Web.Core\\FurWebCoreStartup.cs using Microsoft.Extensions.DependencyInjection; namespace Furion.Web.Core { [AppStartup(800)] public sealed class FurWebCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddDataValidation(); } } } 特别注意 .AddDataValidation() 需在 services.AddControllers() 之后注册。","s":"8.5.1 注册验证服务","u":"/docs/data-validation","h":"#851-注册验证服务","p":577},{"i":597,"t":"TestDto FurionAppService using System.ComponentModel.DataAnnotations; namespace Furion.Application { public class TestDto { [Range(10, 20, ErrorMessage = \"Id 只能在 10-20 区间取值\")] public int Id { get; set; } [Required(ErrorMessage = \"必填\"), MinLength(3, ErrorMessage = \"字符串长度不能少于3位\")] public string Name { get; set; } } } using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { /// /// 值类型验证 /// /// /// public int Get(int id) { return id; } /// /// 对象类型验证 /// /// /// public TestDto Post(TestDto testDto) { return testDto; } } } 如下图所示:","s":"8.5.2 兼容 Mvc 特性验证","u":"/docs/data-validation","h":"#852-兼容-mvc-特性验证","p":577},{"i":599,"t":"using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace Furion.Application { public class TestDto : IValidatableObject { [Range(10, 20, ErrorMessage = \"Id 只能在 10-20 区间取值\")] public int Id { get; set; } [Required(ErrorMessage = \"必填\"), MinLength(3, ErrorMessage = \"字符串长度不能少于3位\")] public string Name { get; set; } public IEnumerable Validate(ValidationContext validationContext) { // 还可以解析服务 var service = validationContext.GetService(typeof(类型)); if (Name.StartsWith(\"Furion\")) { yield return new ValidationResult( \"不能以 Furion 开头\" , new[] { nameof(Name) } ); } } } } 如下图所示:","s":"8.5.3 兼容 Mvc 复杂验证","u":"/docs/data-validation","h":"#853-兼容-mvc-复杂验证","p":577},{"i":602,"t":"using Furion.DataValidation; using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { [NonValidation] // 跳过全局验证 public DataValidationResult Post(TestDto testDto) { return testDto.TryValidate(); } } } 如下图所示: note 支持 Mvc 内置的特性验证、属性验证及复杂的 IValidatableObject 验证。","s":"8.6.1 验证模型","u":"/docs/data-validation","h":"#861-验证模型","p":577},{"i":604,"t":"Furion 提供了 TryValidate() 和 Validate() 两个验证拓展方法,唯一的区别就是后者验证失败将自动抛出异常消息。","s":"8.6.2 TryValidate 和 Validate","u":"/docs/data-validation","h":"#862-tryvalidate-和-validate","p":577},{"i":606,"t":"Furion 内置了很多常用类型的数据验证,包括: Numeric:数值类型 PositiveNumber:正数类型 NegativeNumber:负数类型 Integer:整数类型 Money:金钱类型 Date:日期类型 Time:时间类型 IDCard:身份证类型 PostCode:邮编类型 PhoneNumber:手机号类型 Telephone:固话类型 PhoneOrTelNumber:手机或固话类型 EmailAddress:邮件地址类型 Url:网址类型 Color:颜色值类型 Chinese:中文类型 IPv4:IPv4 地址类型 IPv6:IPv6 地址类型 Age:年龄类型 ChineseName:中文名类型 EnglishName:英文名类型 Capital:纯大写英文类型 Lowercase:纯小写英文类型 Ascii:Ascii 类型 Md5:Md5 字符串类型 Zip:压缩包格式类型 Image:图片格式类型 Document:文档格式类型 MP3:Mp3 格式类型 Flash:Flash 格式类型 Video:视频文件格式类型 Html:Html 标签格式 使用示例 单个类型验证 多个组合类型验证 // 验证中文 \"我叫 MonK\".TryValidate(ValidationTypes.Chinese); // => false // 验证数值 2.TryValidate(ValidationTypes.Numeric); // => true // 验证整数 true.TryValidate(ValidationTypes.Integer); // => false // 验证邮箱 \"monksoul@outlook.com\".TryValidate(ValidationTypes.EmailAddress); // => true // 验证负数 2.0m.TryValidate(ValidationTypes.NegativeNumber); // => false // 自定义正则表达式验证 \"Furion\".TryValidate(\"/^Furion$\"); // => true // 验证数值类型且是整数 \"20\".TryValidate(ValidationTypes.Numeric, ValidationTypes.Integer); // => true // 验证时日期或时间格式 \"2020-05-20\".TryValidate(ValidationPattern.AtLeastOne, ValidationTypes.Date, ValidationTypes.Time); // => true \"23:45:20\".TryValidate(ValidationPattern.AtLeastOne, ValidationTypes.Date, ValidationTypes.Time); // => true 小知识 可通过设置 TryValidate([ValidationPattern], params object[] validationTypes) 方法的 ValidationPattern 参数配置验证逻辑,如:同时成立 或 只要一个成立 即可验证通过","s":"8.6.3 ValidationTypes 常见验证","u":"/docs/data-validation","h":"#863-validationtypes-常见验证","p":577},{"i":608,"t":"Furion 还提供了 [DataValidation] 特性方便在模型参数中使用 ValidationTypes 常见验证或自定义验证。 using Furion.DataValidation; namespace Furion.Application { public class TestDto { [DataValidation(ValidationTypes.Integer)] public int Id { get; set; } [DataValidation(ValidationTypes.Numeric, ValidationTypes.Integer)] public int Cost { get; set; } [DataValidation(ValidationPattern.AtLeastOne, ValidationTypes.Chinese, ValidationTypes.Date)] public string Name { get; set; } // 可以和Mvc特性共存 [Required, DataValidation(ValidationTypes.Age)] public int Age { get; set; } [DataValidation(ValidationTypes.IDCard, ErrorMessage = \"自定义身份证提示消息\")] public string IDCard { get; set; } } } [DataValidation] 特性具备 ValidationAttribute 特性的所有配置以外还提供了以下配置: ValidationTypes:验证类型,Enum[] 类型, ValidationPattern:验证逻辑,ValidationPattern 类型,可选 AllOfThem(全部验证通过) 和 AtleastOne(至少一个验证通过) AllowNullValue:是否允许空值,bool 类型,默认 false AllowEmptyStrings:是否允许空字符串,bool 类型,默认 false","s":"8.6.4 [DataValidation] 特性","u":"/docs/data-validation","h":"#864-datavalidation-特性","p":577},{"i":610,"t":"默认情况下,验证失败信息会根据属性名进行序列化,但是如果属性序列化自定义了 [JsonPropertyName] 特性,那么验证失败的消息就不匹配了,这时我们需要添加 [ModelBinder(Name = \"序列化对应名字\")] 进行纠正。如下图所示: [JsonPropertyName(\"phone_number\"), ModelBinder(Name = \"phone_number\")] public string PhoneNumber { get; set; }","s":"8.6.5 [ModelBinder] 特性","u":"/docs/data-validation","h":"#865-modelbinder-特性","p":577},{"i":612,"t":"Furion 框架提供了对象模型跳过验证特性 [NonValidation],支持在 控制器,动作方法,类 中使用。 一旦贴了此特性,那么将不会执行验证操作。 note [NonValidation] 只对对象类型有效,值类型无效。","s":"8.7 [NonValidation] 跳过验证","u":"/docs/data-validation","h":"#87-nonvalidation-跳过验证","p":577},{"i":615,"t":"除了 Furion 内置的验证类型以外,Furion 还提供了非常灵活的自定义验证类型机制。 实现自定义验证类型必须遵循以下配置: 验证类型必须是公开且是 Enum 枚举类型 枚举类型必须贴有 [ValidationType] 特性 枚举中每一项必须贴有 [ValidationItemMetadata] 特性 如: using Furion.DataValidation; using System.Text.RegularExpressions; namespace Furion.Application { [ValidationType] public enum MyValidationTypes { /// /// 强密码类型 /// [ValidationItemMetadata(@\"^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$\", \"必须须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间\")] StrongPassword, /// /// 以 Furion 字符串开头,忽略大小写 /// [ValidationItemMetadata(@\"^(furion).*\", \"默认提示:必须以Fur字符串开头,忽略大小写\", RegexOptions.IgnoreCase)] StartWithFurString } } 小知识 Any-Rule 是国人记录的正则表达式大全,如需查找正则表达式可查阅 https://any86.github.io/any-rule/ 使用 手动使用 \"q1w2e3\".TryValidate(MyValidationTypes.StrongPassword); // => false \"furos\".TryValidate(MyValidationTypes.StartWithFurString); // => true [DataValidation] 中使用 [DataValidation(MyValidationTypes.StrongPassword)] public string Password { get; set; } 多个自定义类型混用 \"Q1w2e3r4t5!*\".TryValidate(MyValidationTypes.StrongPassword, ValidationTypes.EmailAddress); // => true 特别注意 自定义的验证类型也要保证名称全局唯一,也就是多个验证类型不能出现一样的名字。","s":"8.8.1 自定义 ValidationTypes 类型","u":"/docs/data-validation","h":"#881-自定义-validationtypes-类型","p":577},{"i":617,"t":"Furion 内置的 ValidationTypes 已有默认的失败消息: Numeric:The value is not a numeric type. PositiveNumber:The value is not a positive number type. NegativeNumber:The value is not a negative number type. Integer:The value is not a integer type. Money:The value is not a money type. Date:The value is not a date type. Time:The value is not a time type. IDCard:The value is not a idcard type. PostCode:The value is not a postcode type. PhoneNumber:The value is not a phone number type. Telephone:The value is not a telephone type. PhoneOrTelNumber:The value is not a phone number or telephone type. EmailAddress:The value is not a email address type. Url:The value is not a url address type. Color:The value is not a color type. Chinese:The value is not a chinese type. IPv4:The value is not a IPv4 type. IPv6:The value is not a IPv6 type. Age:The value is not a age type. ChineseName:The value is not a chinese name type. EnglishName:The value is not a english name type. Capital:The value is not a capital type. Lowercase:The value is not a lowercase type. Ascii:The value is not a ascii type. Md5:The value is not a md5 type. Zip:The value is not a zip type. Image:The value is not a image type. Document:The value is not a document type. MP3:The value is not a mp3 type. Flash:The value is not a flash type. Video:The value is not a video type. Html:The value is not a html type. 我们可以通过创建继承 IValidationMessageTypeProvider 验证消息提供器类型,或通过 appsettings.json 配置。 [ValidationMessageType] 方式 using Furion.DataValidation; namespace Furion.Application { [ValidationMessageType] public enum MyValidationMessageType { [ValidationMessage(\"必须是数值类型\")] Numeric, [ValidationMessage(\"必须是正数\")] PositiveNumber, // 修改自定义类型验证失败消息 [ValidationMessage(\"密码太简单了\")] StrongPassword, [ValidationMessage(\"必须以 Furion 开头\")] StartWithFurString } } 小知识 除了贴 [ValidationMessageType] 特性外,Furion 框架还提供了 IValidationMessageTypeProvider 方式查找验证消息类型,如下图所示: using Furion.DataValidation; using System; namespace Furion.Application { public class MyValidationTypeMessageProvider : IValidationMessageTypeProvider { public Type[] Definitions => new[] { typeof(MyValidationMessageType), typeof(MyValidationMessageType2) }; } } 注册验证消息提供器 Furion.Web.Core\\FurWebCoreStartup.cs using Microsoft.Extensions.DependencyInjection; namespace Furion.Web.Core { [AppStartup(800)] public sealed class FurWebCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddDataValidation(); } } } 如下图所示: appsettings.json 方式 Furion.Web.Entry/appsettings.json { \"ValidationTypeMessageSettings\": { \"Definitions\": [ [\"Numeric\", \"必须是数值类型\"], [\"StrongPassword\", \"密码太简单了!!!\"] ] } } info appsettings.json 中相同的 Key 会覆盖 IValidationMessageTypeProvider 提供相同 Key 的值。 错误消息查找优先级​ DefaultErrorMessage -> IValidationMessageTypeProvider -> appsettings.json (低 -> 高)","s":"8.8.2 自定义 ValidationTypes 失败消息","u":"/docs/data-validation","h":"#882-自定义-validationtypes-失败消息","p":577},{"i":619,"t":"Furion 提供多种模型验证范围设置: 全局验证(默认) [NonValidation] 跳过验证 [TypeFilter(typeof(DataValidationFilter))] 局部验证 [ApiController] 控制器范围验证","s":"8.9 模型验证范围","u":"/docs/data-validation","h":"#89-模型验证范围","p":577},{"i":621,"t":"默认情况下,通过 .AddDataValidation() 注册数据验证服务已经启用了全局验证,如若不想启用全局验证,则传入 false 即可,如:.AddDataValidation(false)。","s":"8.9.1 全局验证","u":"/docs/data-validation","h":"#891-全局验证","p":577},{"i":623,"t":"可通过 [NonValidation] 贴在 控制器,动作方法,类 中跳过全局验证或不需要验证","s":"8.9.2 [NonValidation] 跳过验证","u":"/docs/data-validation","h":"#892-nonvalidation-跳过验证","p":577},{"i":625,"t":"我们也可以无需注册 .AddDataValidation() 服务,直接在 动作方法 上贴 [TypeFilter(typeof(DataValidationFilter))] 可启用局部验证。如: using Furion.DataValidation; using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; namespace Furion.Application { public class FurionAppService : IDynamicApiController { [TypeFilter(typeof(DataValidationFilter))] public TestDto Post(TestDto testDto) { return testDto; } } }","s":"8.9.3 [TypeFilter(typeof(DataValidationFilter))] 局部验证","u":"/docs/data-validation","h":"#893-typefiltertypeofdatavalidationfilter-局部验证","p":577},{"i":627,"t":"[ApiController] 是 Mvc 提供的控制器范围(含所有动作方法)的验证。 using Microsoft.AspNetCore.Mvc; namespace Furion.Web.Entry.Controllers { [ApiController] public class MvcController : Controller { public IActionResult Index() { return View(); } } }","s":"8.9.4 [ApiController] 控制器范围验证","u":"/docs/data-validation","h":"#894-apicontroller-控制器范围验证","p":577},{"i":629,"t":"如下图所示:","s":"8.10 MiniProfiler 查看","u":"/docs/data-validation","h":"#810-miniprofiler-查看","p":577},{"i":631,"t":"参见 【全球化和本地化(多语言)】 章节","s":"8.11 多语言支持","u":"/docs/data-validation","h":"#811-多语言支持","p":577},{"i":633,"t":"Furion 内置的验证已经可以满足绝大多数校验情况,但是对于 场景 验证目前暂未支持。这里推荐集成 FluentValidation 第三方校验组件。","s":"8.12 集成 FluentValidation 第三方校验","u":"/docs/data-validation","h":"#812-集成-fluentvalidation-第三方校验","p":577},{"i":635,"t":"dotnet add package FluentValidation.AspNetCore","s":"8.12.1 安装 FluentValidation.AspNetCore 拓展包","u":"/docs/data-validation","h":"#8121-安装-fluentvalidationaspnetcore-拓展包","p":577},{"i":637,"t":"services.AddControllers() .AddFluentValidation(fv => { fv.RegisterValidatorsFromAssemblies(App.Assemblies); });","s":"8.12.2 在 Startup.cs 中注册","u":"/docs/data-validation","h":"#8122-在-startupcs-中注册","p":577},{"i":639,"t":"public class Person { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public int Age { get; set; } } public class PersonValidator : AbstractValidator { public PersonValidator() { RuleFor(x => x.Id).NotNull(); RuleFor(x => x.Name).Length(0, 10); RuleFor(x => x.Email).EmailAddress(); RuleFor(x => x.Age).InclusiveBetween(18, 60); } } 在控制器中使用无需手动调用 ModelState.IsValid 进行判断,Furion 会自动执行该操作。 如需了解更多 FluentValidation 知识可查阅官方文档:https://fluentvalidation.net/","s":"8.12.3 使用例子","u":"/docs/data-validation","h":"#8123-使用例子","p":577},{"i":641,"t":"与我们交流 给 Furion 提 Issue。","s":"8.13 反馈与建议","u":"/docs/data-validation","h":"#813-反馈与建议","p":577},{"i":643,"t":"Furion 框架提供非常多的语法糖进行数据库操作。","s":"9.5 新增操作","u":"/docs/dbcontext-add","h":"","p":642},{"i":645,"t":"var user = new User { Name = \"百小僧\", Age = 27 }; // ==== 同步操作 ==== // 示例一 repository.Insert(user); // 示例二 user.Insert(); // 示例三 repository.Entities.Add(user); // 示例四 repository.ChangeEntityState(user, EntityState.Added); // ==== 异步操作 ==== // 示例一 await repository.InsertAsync(user); // 示例二 await user.InsertAsync(); // 示例三 await repository.Entities.AddAsync(user);","s":"9.5.1 新增一条,无返回值","u":"/docs/dbcontext-add","h":"#951-新增一条无返回值","p":642},{"i":647,"t":"// ==== 同步操作 ==== // 示例一 var newEntity = repository.InsertNow(user); // 示例三 var newEntity = user.InsertNow(); // ==== 异步操作 ==== // 示例二 var newEntity = await repository.InsertNowAsync(user); // 有三个重载 // 示例四 var newEntity = await user.InsertNowAsync(); // 有三个重载","s":"9.5.2 新增一条,返回最新数据","u":"/docs/dbcontext-add","h":"#952-新增一条返回最新数据","p":642},{"i":649,"t":"// ==== 同步操作 ==== // 示例一 repository.Insert(user, user2); // 示例二 repository.Insert(new List { user, user2 }); // 示例三 repository.Insert(new[] {user, user2 }); // ==== 异步操作 ==== // 示例一 await repository.InsertAsync(user, user2); // 示例二 await repository.InsertAsync(new List { user, user2 }); // 示例三 await repository.InsertAsync(new[] {user, user2 });","s":"9.5.3 新增多条(不立即提交)","u":"/docs/dbcontext-add","h":"#953-新增多条不立即提交","p":642},{"i":651,"t":"// ==== 同步操作 ==== // 示例一 repository.InsertNow(user, user2); // 示例二 repository.InsertNow(new List { user, user2 }); // 示例三 repository.InsertNow(new[] {user, user2 }); // ==== 异步操作 ==== // 示例一 await repository.InsertNowAsync(user, user2); // 示例二 await repository.InsertNowAsync(new List { user, user2 }); // 示例三 await repository.InsertNowAsync(new[] {user, user2 }); 小知识 所有带 Now 结尾的表示立即提交到数据库,也就是立即调用 SaveChanges 或 SaveChangesAsync。","s":"9.5.4 新增多条(立即提交)","u":"/docs/dbcontext-add","h":"#954-新增多条立即提交","p":642},{"i":653,"t":"默认情况下,EFCore 新增会插入全部列(除实体跟踪方式以外),有些时候我们希望 Null 值无需插入,这是我们只需要在更新时候配置 ignoreNullValues 参数即可,如: repository.Insert(entity, ignoreNullValues: true); 注意:EFCore 还是会对 NULL 值列生成 SQL 语句。 也可以全局配置,在 AppDbContext 的派生类的构造函数中启用即可: using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class DefaultDbContext : AppDbContext { public DefaultDbContext(DbContextOptions options) : base(options) { InsertOrUpdateIgnoreNullValues = true; } } }","s":"9.5.5 忽略空值新增","u":"/docs/dbcontext-add","h":"#955-忽略空值新增","p":642},{"i":655,"t":"在某些情况下,数据库表存在触发器,这时候可能会出现下列异常: Microsoft.EntityFrameworkCore.DbUpdateException: Could not save changes because the target table has database triggers. Please configure your entity type accordingly, see https://aka.ms/efcore-docs-sqlserver-save-changes-and-triggers for more information. 这时我们只需要添加 HasTrigger 即可,如: public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder.ToTable(tb => tb.HasTrigger(\"TriggerName\")); // 标记数据库表存在触发器,触发器名称可随意 } 相关 Issue https://gitee.com/dotnetchina/Furion/issues/I5S4EC","s":"9.5.6 表带触发器异常解决","u":"/docs/dbcontext-add","h":"#956-表带触发器异常解决","p":642},{"i":657,"t":"与我们交流 给 Furion 提 Issue。","s":"9.5.7 反馈与建议","u":"/docs/dbcontext-add","h":"#957-反馈与建议","p":642},{"i":659,"t":"功能移除声明 以下内容在 Furion 2.5.1 + 版本中已移除。此操作让很多不了解 EFCore 的开发者产生了很大的误解,不知何时新增或何时更新,故移除此功能。","s":"9.7 新增或更新操作","u":"/docs/dbcontext-add-or-update","h":"","p":658},{"i":661,"t":"// ==== 同步操作 ==== // 示例一 repository.InsertOrUpdate(user); // 示例二 user.InsertOrUpdate(); // ==== 异步操作 ==== // 示例一 await repository.InsertOrUpdateAsync(user); // 示例二 await user.InsertOrUpdateAsync();","s":"9.7.1 新增或更新(不立即提交)","u":"/docs/dbcontext-add-or-update","h":"#971-新增或更新不立即提交","p":658},{"i":663,"t":"// ==== 同步操作 ==== // 示例一 repository.InsertOrUpdateNow(user); // 示例二 user.InsertOrUpdateNow(); // ==== 异步操作 ==== // 示例一 await repository.InsertOrUpdateNowAsync(user); // 示例二 await user.InsertOrUpdateNowAsync();","s":"9.7.2 新增或更新(立即提交)","u":"/docs/dbcontext-add-or-update","h":"#972-新增或更新立即提交","p":658},{"i":665,"t":"// ==== 同步操作 ==== // 示例一 repository.InsertOrUpdateInclude(user, u=>u.Name, u=>u.Age); // 示例二 repository.InsertOrUpdateInclude(user, \"Age\", \"Name\"); // 示例三 repository.InsertOrUpdateInclude(user, new[] { u=>u.Name, u=>u.Age}); // 示例四 repository.InsertOrUpdateInclude(user, new[] {\"Age\", \"Name\"}); // 示例五 user.InsertOrUpdateInclude(u=>u.Name, u=>u.Age); // 示例六 user.InsertOrUpdateInclude(\"Age\", \"Name\"); // 示例七 user.InsertOrUpdateInclude(new[] { u=>u.Name, u=>u.Age}); // 示例八 user.InsertOrUpdateInclude(new[] {\"Age\", \"Name\"}); // ==== 异步操作 ==== // 示例一 await repository.InsertOrUpdateIncludeAsync(user, u=>u.Name, u=>u.Age); // 示例二 await repository.InsertOrUpdateIncludeAsync(user, \"Age\", \"Name\"); // 示例三 await repository.InsertOrUpdateIncludeAsync(user, new[] { u=>u.Name, u=>u.Age}); // 示例四 await repository.InsertOrUpdateIncludeAsync(user, new[] {\"Age\", \"Name\"}); // 示例五 await user.InsertOrUpdateIncludeAsync(u=>u.Name, u=>u.Age); // 示例六 await user.InsertOrUpdateIncludeAsync(\"Age\", \"Name\"); // 示例七 await user.InsertOrUpdateIncludeAsync(new[] { u=>u.Name, u=>u.Age}); // 示例八 await user.InsertOrUpdateIncludeAsync(new[] {\"Age\", \"Name\"});","s":"9.7.3 新增或更新部分列(不立即提交)","u":"/docs/dbcontext-add-or-update","h":"#973-新增或更新部分列不立即提交","p":658},{"i":667,"t":"// ==== 同步操作 ==== // 示例一 repository.InsertOrUpdateIncludeNow(user, u=>u.Name, u=>u.Age); // 示例二 repository.InsertOrUpdateIncludeNow(user, \"Age\", \"Name\"); // 示例三 repository.InsertOrUpdateIncludeNow(user, new[] { u=>u.Name, u=>u.Age}); // 示例四 repository.InsertOrUpdateIncludeNow(user, new[] {\"Age\", \"Name\"}); // 示例五 user.InsertOrUpdateIncludeNow(u=>u.Name, u=>u.Age); // 示例六 user.InsertOrUpdateIncludeNow(\"Age\", \"Name\"); // 示例七 user.InsertOrUpdateIncludeNow(new[] { u=>u.Name, u=>u.Age}); // 示例八 user.InsertOrUpdateIncludeNow(new[] {\"Age\", \"Name\"}); // ==== 异步操作 ==== // 示例一 await repository.InsertOrUpdateIncludeNowAsync(user, u=>u.Name, u=>u.Age); // 示例二 await repository.InsertOrUpdateIncludeNowAsync(user, \"Age\", \"Name\"); // 示例三 await repository.InsertOrUpdateIncludeNowAsync(user, new[] { u=>u.Name, u=>u.Age}); // 示例四 await repository.InsertOrUpdateIncludeNowAsync(user, new[] {\"Age\", \"Name\"}); // 示例五 await user.InsertOrUpdateIncludeNowAsync(u=>u.Name, u=>u.Age); // 示例六 await user.InsertOrUpdateIncludeNowAsync(\"Age\", \"Name\"); // 示例七 await user.InsertOrUpdateIncludeNowAsync(new[] { u=>u.Name, u=>u.Age}); // 示例八 await user.InsertOrUpdateIncludeNowAsync(new[] {\"Age\", \"Name\"});","s":"9.7.4 新增或更新部分列(立即提交)","u":"/docs/dbcontext-add-or-update","h":"#974-新增或更新部分列立即提交","p":658},{"i":669,"t":"// ==== 同步操作 ==== // 示例一 repository.InsertOrUpdateExclude(user, u=>u.Name, u=>u.Age); // 示例二 repository.InsertOrUpdateExclude(user, \"Age\", \"Name\"); // 示例三 repository.InsertOrUpdateExclude(user, new[] { u=>u.Name, u=>u.Age}); // 示例四 repository.InsertOrUpdateExclude(user, new[] {\"Age\", \"Name\"}); // 示例五 user.InsertOrUpdateExclude(u=>u.Name, u=>u.Age); // 示例六 user.InsertOrUpdateExclude(\"Age\", \"Name\"); // 示例七 user.InsertOrUpdateExclude(new[] { u=>u.Name, u=>u.Age}); // 示例八 user.InsertOrUpdateExclude(new[] {\"Age\", \"Name\"}); // ==== 异步操作 ==== // 示例一 await repository.InsertOrUpdateExcludeAsync(user, u=>u.Name, u=>u.Age); // 示例二 await repository.InsertOrUpdateExcludeAsync(user, \"Age\", \"Name\"); // 示例三 await repository.InsertOrUpdateExcludeAsync(user, new[] { u=>u.Name, u=>u.Age}); // 示例四 await repository.InsertOrUpdateExcludeAsync(user, new[] {\"Age\", \"Name\"}); // 示例五 await user.InsertOrUpdateExcludeAsync(u=>u.Name, u=>u.Age); // 示例六 await user.InsertOrUpdateExcludeAsync(\"Age\", \"Name\"); // 示例七 await user.InsertOrUpdateExcludeAsync(new[] { u=>u.Name, u=>u.Age}); // 示例八 await user.InsertOrUpdateExcludeAsync(new[] {\"Age\", \"Name\"});","s":"9.7.5 新增或更新排除特定列(不立即提交)","u":"/docs/dbcontext-add-or-update","h":"#975-新增或更新排除特定列不立即提交","p":658},{"i":671,"t":"// ==== 同步操作 ==== // 示例一 repository.InsertOrUpdateExcludeNow(user, u=>u.Name, u=>u.Age); // 示例二 repository.InsertOrUpdateExcludeNow(user, \"Age\", \"Name\"); // 示例三 repository.InsertOrUpdateExcludeNow(user, new[] { u=>u.Name, u=>u.Age}); // 示例四 repository.InsertOrUpdateExcludeNow(user, new[] {\"Age\", \"Name\"}); // 示例五 user.InsertOrUpdateExcludeNow(u=>u.Name, u=>u.Age); // 示例六 user.InsertOrUpdateExcludeNow(\"Age\", \"Name\"); // 示例七 user.InsertOrUpdateExcludeNow(new[] { u=>u.Name, u=>u.Age}); // 示例八 user.InsertOrUpdateExcludeNow(new[] {\"Age\", \"Name\"}); // ==== 异步操作 ==== // 示例一 await repository.InsertOrUpdateExcludeNowAsync(user, u=>u.Name, u=>u.Age); // 示例二 await repository.InsertOrUpdateExcludeNowAsync(user, \"Age\", \"Name\"); // 示例三 await repository.InsertOrUpdateExcludeNowAsync(user, new[] { u=>u.Name, u=>u.Age}); // 示例四 await repository.InsertOrUpdateExcludeNowAsync(user, new[] {\"Age\", \"Name\"}); // 示例五 await user.InsertOrUpdateExcludeNowAsync(u=>u.Name, u=>u.Age); // 示例六 await user.InsertOrUpdateExcludeNowAsync(\"Age\", \"Name\"); // 示例七 await user.InsertOrUpdateExcludeNowAsync(new[] { u=>u.Name, u=>u.Age}); // 示例八 await user.InsertOrUpdateExcludeNowAsync(new[] {\"Age\", \"Name\"});","s":"9.7.6 新增或更新排除特定列(立即提交)","u":"/docs/dbcontext-add-or-update","h":"#976-新增或更新排除特定列立即提交","p":658},{"i":673,"t":"与我们交流 给 Furion 提 Issue。","s":"9.7.7 反馈与建议","u":"/docs/dbcontext-add-or-update","h":"#977-反馈与建议","p":658},{"i":675,"t":"视频教程 https://www.bilibili.com/video/BV1Rt4y1W7oJ 关于脚本 在阅读下面文档之前,必须把Furion 源码文件夹下的 tools/cli.ps1 文件拷贝到本地中。而且 Fur.Web.Entry 层需要安装 Microsoft.EntityFrameworkCore.Tools 包。 系统提示禁止运行脚本解决 如果出现 cli.ps1 无法运行的情况,如提示:“因为在此系统上禁止运行脚本”,只需要打开系统管理员 CMD/Powershell 执行:set-ExecutionPolicy RemoteSigned 命令并根据操作提示输入 A 即可。 之后重启 Visual Studio 工具。","s":"9.19 数据库生成模型","u":"/docs/dbcontext-db-first","h":"","p":674},{"i":677,"t":"Furion 提供两种主要方法来 保持实体模型和数据库架构同步。 至于我们应该选用哪个方法,请确定你是希望以实体模型为准还是以数据库为准: 如果希望 以实体模型为准,请使用正向工程(Code First)。 对实体模型进行更改时,此方法会以增量方式将相应架构更改应用到数据库,以使数据库保持与实体模型兼容。 如果希望 以数据库架构为准,请使用反向工程(Database First)。 使用此方法,可通过将数据库架构反向工程到实体模型来生成相应的实体类型。 本章节是 反向工程(Database First) 的相关内容。","s":"9.19.1 数据库开发方式","u":"/docs/dbcontext-db-first","h":"#9191-数据库开发方式","p":674},{"i":679,"t":"操作之前注意事项 目前 Furion Tools 生成工具默认不支持任何数据库生成,所以如需生成特定数据库的代码,只需要在 Furion.EntityFrameworkCore.Core 安装对应的数据库包即可: 各个数据库的包可查阅:多数据库操作-数据库提供器对应包 另外,只有 SqlServer 数据库支持可视化 GUI 操作,其他的只能命令行操作。","s":"9.19.2 操作指南","u":"/docs/dbcontext-db-first","h":"#9192-操作指南","p":674},{"i":681,"t":"注意:开始之前先把 Furion.Web.Entry 设为启动项目。","s":"9.19.2.1 打开 程序包管理控制台","u":"/docs/dbcontext-db-first","h":"#91921-打开-程序包管理控制台","p":674},{"i":683,"t":"将 程序包管理控制台 默认项目设置为 Furion.Core,如果您是其他名字,则切换对应即可。","s":"9.19.2.2 切换默认项目","u":"/docs/dbcontext-db-first","h":"#91922-切换默认项目","p":674},{"i":685,"t":"PM> Show-Command ../tools/cli.ps1 全命令方式(推荐)❤️ 除了采用 Show-Command 方式以外,还可以直接执行命令,如: &\"./tools/cli.ps1\" -DbProvider \"Microsoft.EntityFrameworkCore.SqlServer\" -CoreProject \"XXX.Core\" -EntryProject \"XXX.Web.Entry\" -ConnectionName \"Default\" 小提示 如果使用的是 SqlServer 数据库,则默认不需要指定 -DbProvider 参数。 如果不清楚当前运行环境的路径,可以输入 pwd 查看。 关于数据库命名 如果需要保持和数据库一模一样的命名,则使用 -UseDatabaseNames 参数指定,如: &\"../tools/cli.ps1\" -UseDatabaseNames 等待输入 执行上面命令后,此时 Cli 有一个等待输入提示: Furion Tools v1.0.0 请键入操作类型:[G] 界面操作,[任意字符] 命令行操作 Furion Tools v1.0.0 您的输入是: 输入大写 G 进入界面操作模式,其他任意字符进入命令行操作模式。 注意事项 目前只有 Sql Server 数据库才支持 GUI 界面操作模式,其他数据库请使用命令行模式。","s":"9.19.2.3 输入 cli.ps1 命令","u":"/docs/dbcontext-db-first","h":"#91923-输入-clips1-命令","p":674},{"i":688,"t":"当我们输入 G 时,将打开 GUI 界面操作模式,如: 这时,Furion Tools 会自动查找所有数据库配置连接字符串的 .json 文件: 注意事项 数据库连接字符串配置项需写到 json 配置文件中,且根节点需要写为 ConnectionStrings 。 { \"Logging\": { \"LogLevel\": { \"Default\": \"Information\", \"Microsoft\": \"Warning\", \"Microsoft.Hosting.Lifetime\": \"Information\", \"Microsoft.EntityFrameworkCore\": \"Information\" } }, \"AllowedHosts\": \"*\", \"ConnectionStrings\": { \"DbConnectionString\": \"Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;\", \"Sqlite3ConnectionString\": \"Data Source=./Furion.db\" } }","s":"9.19.3.1 启动界面操作","u":"/docs/dbcontext-db-first","h":"#91931-启动界面操作","p":674},{"i":690,"t":"选择连接字符串之后,点击 加载数据库表和视图 按钮加载。","s":"9.19.3.2 加载数据库表","u":"/docs/dbcontext-db-first","h":"#91932-加载数据库表","p":674},{"i":692,"t":"加载表完成后,可以选择您要生成的表或视图,支持多选 点击底部按钮 立即生成","s":"9.19.3.3 选择表或视图生成","u":"/docs/dbcontext-db-first","h":"#91933-选择表或视图生成","p":674},{"i":694,"t":"点击 立即生成 按钮后,会弹出实体保存选择目录资源管理器,默认实体只能保存在 Furion.Core 层: 点击确定后就可完成所有生成操作。","s":"9.19.3.4 选择保存目录","u":"/docs/dbcontext-db-first","h":"#91934-选择保存目录","p":674},{"i":696,"t":"最终脚本如下: PM> &\"../tools/cli.ps1\" // ----------------------------------------------------------------------------- // ______ _______ _ // | ____| |__ __| | | // | |__ _ _ _ __ | | ___ ___ | |___ // | __| | | | '__| | |/ _ \\ / _ \\| / __| // | | | |_| | | | | (_) | (_) | \\__ \\ // |_| \\__,_|_| |_|\\___/ \\___/|_|___/ // // ----------------------------------------------------------------------------- Furion Tools v1.0.0 启动中...... Furion Tools v1.0.0 启动成功! Furion Tools v1.0.0 请键入操作类型:[G] 界面操作,[任意字符] 命令行操作 Furion Tools v1.0.0 您的输入是: G Furion Tools v1.0.0 正在加载数据库表和视图...... Furion Tools v1.0.0 加载成功! Furion Tools v1.0.0 正在编译解决方案代码...... Build started... Build succeeded. For foreign key FK_PersonDetail_Person_PersonId on table dbo.PersonDetail, unable to model the end of the foreign key on principal table dbo.Person. This is usually because the principal table was not included in the selection set. Furion Tools v1.0.0 编译成功! Furion Tools v1.0.0 开始生成实体文件...... Furion Tools v1.0.0 正在生成 City.cs 实体代码...... Furion Tools v1.0.0 成功生成 City.cs 实体代码 // ----------------------------------------------------------------------------- // 以下代码由 Furion Tools v1.0.0 生成 // ----------------------------------------------------------------------------- using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Collections.Generic; #nullable disable namespace Furion.Core { public partial class City : IEntity, IEntityTypeBuilder { public City() { InverseParent = new HashSet(); } public int Id { get; set; } public string Name { get; set; } public int? ParentId { get; set; } public DateTime CreatedTime { get; set; } public DateTime? UpdatedTime { get; set; } public bool IsDeleted { get; set; } public virtual City Parent { get; set; } public virtual ICollection InverseParent { get; set; } public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder.HasIndex(e => e.ParentId, \"IX_City_ParentId\"); entityBuilder.HasOne(d => d.Parent) .WithMany(p => p.InverseParent) .HasForeignKey(d => d.ParentId); } } } Furion Tools v1.0.0 正在生成 PersonDetail.cs 实体代码...... Furion Tools v1.0.0 成功生成 PersonDetail.cs 实体代码 // ----------------------------------------------------------------------------- // 以下代码由 Furion Tools v1.0.0 生成 // ----------------------------------------------------------------------------- using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Collections.Generic; #nullable disable namespace Furion.Core { public partial class PersonDetail : IEntity, IEntityTypeBuilder { public int Id { get; set; } public string PhoneNumber { get; set; } public string Qq { get; set; } public int PersonId { get; set; } public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder.HasIndex(e => e.PersonId, \"IX_PersonDetail_PersonId\") .IsUnique(); entityBuilder.Property(e => e.Qq).HasColumnName(\"QQ\"); } } } Furion Tools v1.0.0 正在生成 Post.cs 实体代码...... Furion Tools v1.0.0 成功生成 Post.cs 实体代码 // ----------------------------------------------------------------------------- // 以下代码由 Furion Tools v1.0.0 生成 // ----------------------------------------------------------------------------- using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Collections.Generic; #nullable disable namespace Furion.Core { public partial class Post : IEntity { public int Id { get; set; } public string Name { get; set; } public DateTime CreatedTime { get; set; } public DateTime? UpdatedTime { get; set; } public bool IsDeleted { get; set; } } } Furion Tools v1.0.0 正在生成 VPerson.cs 实体代码...... Furion Tools v1.0.0 成功生成 VPerson.cs 实体代码 // ----------------------------------------------------------------------------- // 以下代码由 Furion Tools v1.0.0 生成 // ----------------------------------------------------------------------------- using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Collections.Generic; #nullable disable namespace Furion.Core { public partial class VPerson : IEntity, IEntityTypeBuilder { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string Address { get; set; } public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder.HasNoKey(); entityBuilder.ToView(\"V_Person\"); entityBuilder.Property(e => e.Id).ValueGeneratedOnAdd(); entityBuilder.Property(e => e.Name).HasMaxLength(32); } } } Furion Tools v1.0.0 全部实体生成成功! PM>","s":"9.19.3.5 生成最终实体代码","u":"/docs/dbcontext-db-first","h":"#91935-生成最终实体代码","p":674},{"i":698,"t":"Furion Tools Cli 支持多个参数配置,使用方法只需要在命令后面添加即可,如: &\"../tools/cli.ps1\" -Context 数据库上下文名 -ConnectionName 连接字符串Key 支持参数如下: -Tables:配置要生成的数据库表,数组类型,如果为空,则生成数据库所有表和视图。如:-Tables Person,PersonDetails -Context:配置数据库上下文,默认 FurionDbContext,如果有多个数据库上下文,则此参数必须配置 -ConnectionName:配置数据库连接字符串,对应 appsetting.json 中的 ConnectionStrings 定义的 Key -OutputDir:生成实体代码输出目录,默认为:./Furion.Core/Entities/ -DbProvider:数据库提供器,默认是 Microsoft.EntityFrameworkCore.SqlServer,其他数据库请指定对应程序集 SqlServer:Microsoft.EntityFrameworkCore.SqlServer Sqlite:Microsoft.EntityFrameworkCore.Sqlite Cosmos:Microsoft.EntityFrameworkCore.Cosmos InMemoryDatabase:Microsoft.EntityFrameworkCore.InMemory MySql:Pomelo.EntityFrameworkCore.MySql 或 MySql.EntityFrameworkCore PostgreSQL:Npgsql.EntityFrameworkCore.PostgreSQL Oracle:Oracle.EntityFrameworkCore Dm:Microsoft.EntityFrameworkCore.Dm -EntryProject:Web 启用项目层名,默认 Furion.Web.Entry -CoreProject:实体项目层名,默认 Furion.Core -DbContextLocators:多数据库上下文定位器,默认 MasterDbContextLocator,支持多个,如:MasterDbContextLocator,MySqlDbContextLocator -Product:解决方案默认前缀,如 Furion -UseDatabaseNames:是否保持生成和数据库、表一致的名称 -Namespace:指定实体命名空间","s":"9.19.4 命令参数配置","u":"/docs/dbcontext-db-first","h":"#9194-命令参数配置","p":674},{"i":700,"t":"与我们交流 给 Furion 提 Issue。","s":"9.19.5 反馈与建议","u":"/docs/dbcontext-db-first","h":"#9195-反馈与建议","p":674},{"i":702,"t":"开始之前 Fur.Web.Entry 层需要安装 Microsoft.EntityFrameworkCore.Tools 包。","s":"9.20 模型生成数据库","u":"/docs/dbcontext-code-first","h":"","p":701},{"i":704,"t":"Furion 提供两种主要方法来 保持实体模型和数据库架构同步。 至于我们应该选用哪个方法,请确定你是希望以实体模型为准还是以数据库为准: 如果希望 以实体模型为准,请使用正向工程(Code First)。 对实体模型进行更改时,此方法会以增量方式将相应架构更改应用到数据库,以使数据库保持与实体模型兼容。 如果希望 以数据库架构为准,请使用反向工程(Database First)。 使用此方法,可通过将数据库架构反向工程到实体模型来生成相应的实体类型。 本章节是 正向工程(Code First) 的相关内容。","s":"9.20.1 数据库开发方式","u":"/docs/dbcontext-code-first","h":"#9201-数据库开发方式","p":701},{"i":706,"t":"特别注意 Furion 框架默认数据迁移的程序集为:Furion.Database.Migrations,所以如果您改了程序集名称或通过 Nuget 方式安装的 Furion 包,则需要配置迁移程序集名称: services.AddDatabaseAccessor(options => { options.AddDbPool(DbProvider.Sqlite); }, \"存放迁移文件的项目名称\"); 另外,如果应用中配置了多个数据库上下文,那么所有的 迁移命令 都需要指定 -Context 数据库上下文名称 参数。如: Add-Migration v1.0.0 -Context FurionDbContext","s":"9.20.2 操作指南","u":"/docs/dbcontext-code-first","h":"#9202-操作指南","p":701},{"i":708,"t":"using Furion.DatabaseAccessor; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace Furion.Core { public class Person : Entity { /// /// 构造函数 /// public Person() { CreatedTime = DateTime.Now; IsDeleted = false; } /// /// 姓名 /// [MaxLength(32)] public string Name { get; set; } /// /// 年龄 /// public int Age { get; set; } /// /// 住址 /// public string Address { get; set; } } } 实体约定 所有数据库实体必须直接或间接继承 IEntity 接口。","s":"9.20.2.1 创建实体模型 Person","u":"/docs/dbcontext-code-first","h":"#92021-创建实体模型-person","p":701},{"i":711,"t":"将 程序包管理控制台 默认项目设置为 Furion.Database.Migrations","s":"9.20.2.3 切换默认项目","u":"/docs/dbcontext-code-first","h":"#92023-切换默认项目","p":701},{"i":713,"t":"Add-Migration v1.0.0 特别说明 v1.0.0 是此处数据库更改的版本号,可以写任何字符串,但推荐写版本号,每次 +1。 最终命令如下: PM> Add-Migration v1.0.0 Build started... Build succeeded. Microsoft.EntityFrameworkCore.Model.Validation[10400] Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data, this mode should only be enabled during development. Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 5.0.0-rc.1.20451.13 initialized 'FurionDbContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: SensitiveDataLoggingEnabled DetailedErrorsEnabled MaxPoolSize=100 MigrationsAssembly=Furion.Database.Migrations To undo this action, use Remove-Migration. PM> 生成成功后,Furion.Database.Migrations 项目下会新增 Migrations 文件夹(如果没有),同时本次的架构生成文件,如:","s":"9.20.2.4 创建模型版本","u":"/docs/dbcontext-code-first","h":"#92024-创建模型版本","p":701},{"i":715,"t":"Update-Database 执行该命令后,数据库就会自动根据模型生成对应的表。 小知识 如果 Update-Database 后面带字符串参数,则会自动还原数据库到指定版本,如: Update-Database v0.0.3 将数据库还原到 v0.0.3 版本","s":"9.20.2.5 更新到数据库","u":"/docs/dbcontext-code-first","h":"#92025-更新到数据库","p":701},{"i":717,"t":"如果模型改变了,重复上面操作即可,如: Add-Migration v1.0.1 Update-Database","s":"9.20.3 更新模型","u":"/docs/dbcontext-code-first","h":"#9203-更新模型","p":701},{"i":719,"t":"有些时候,我们没有直接更新数据库的权限,或者怕出问题,我们都会先生成 Sql 看看,这时候只需要通过 Script-Migration 导出即可,如: Script-Migration","s":"9.20.4 导出 Sql","u":"/docs/dbcontext-code-first","h":"#9204-导出-sql","p":701},{"i":722,"t":"dotnet tool install --global dotnet-ef --version 5.0.0-rc.2.20475.6","s":"9.20.5.1 安装 dotnet ef","u":"/docs/dbcontext-code-first","h":"#92051-安装-dotnet-ef","p":701},{"i":724,"t":"通过 VS Code 打开 .sln 所在的目录,如:framework。 之后进入 Furion.Database.Migrations 目录 cd Furion.Database.Migrations","s":"9.20.5.2 cd 目录","u":"/docs/dbcontext-code-first","h":"#92052-cd-目录","p":701},{"i":726,"t":"dotnet ef migrations add v1.0.0 -s \"../Furion.Web.Entry\" dotnet ef database update -s \"../Furion.Web.Entry\"","s":"9.20.5.3 执行命令","u":"/docs/dbcontext-code-first","h":"#92053-执行命令","p":701},{"i":728,"t":"Furion 框架建议大家使用命令方式操作数据库,完全不推荐自动化生成数据库,但是有些特殊情况下,有这个必要,故将此功能写出:","s":"9.20.6 应用启动时自动生成数据库","u":"/docs/dbcontext-code-first","h":"#9206-应用启动时自动生成数据库","p":701},{"i":730,"t":"如果已经生成 Migrations 文件,那么可以直接在 Startup.cs 代码中实现程序启动时自动执行 update-database 命令,如: public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // 判断开发环境!!!必须!!!! if (env.IsDevelopment()) { Scoped.Create((_, scope) => { var context = scope.ServiceProvider.GetRequiredService(); context.Database.Migrate(); }); } // 其他代码 }","s":"9.20.6.1 对已经生成 Migrations 文件情况","u":"/docs/dbcontext-code-first","h":"#92061-对已经生成-migrations-文件情况","p":701},{"i":732,"t":"public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // 判断开发环境!!!必须!!!! if (env.IsDevelopment()) { Scoped.Create((_, scope) => { var context = scope.ServiceProvider.GetRequiredService(); context.Database.EnsureCreated(); }); } // 其他代码 } 如果需要在创建数据库之前先删除旧的,可先调用 context.Database.EnsureDeleted(); 代码。慎重!!!!!!!!!!!!","s":"9.20.6.2 如果没有生成过 Migrations 文件情况","u":"/docs/dbcontext-code-first","h":"#92062-如果没有生成过-migrations-文件情况","p":701},{"i":734,"t":"在 .NET 6.0.8+ 版本,微软底层修改了 IDesignTimeServices 逻辑导致 MySql.EntityFrameworkCore 版本没有及时更新导致一下错误: PM> Add-Migration v0.0.1 Build started... Build succeeded. Microsoft.EntityFrameworkCore.Model.Validation[10400] Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data; this mode should only be enabled during development. Microsoft.EntityFrameworkCore.Infrastructure[10403] Entity Framework Core 6.0.8 initialized 'DefaultDbContext' using provider 'MySql.EntityFrameworkCore:6.0.4+MySQL8.0.30' with options: SensitiveDataLoggingEnabled DetailedErrorsEnabled MaxPoolSize=100 MigrationsAssembly=Furion.TestMS.Database.Migrations System.InvalidOperationException: Unable to resolve service for type 'Microsoft.EntityFrameworkCore.Storage.TypeMappingSourceDependencies' while attempting to activate 'MySql.EntityFrameworkCore.Storage.Internal.MySQLTypeMappingSource'. at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateEnumerable(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(Type implementationType, CallSiteChain callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache lifetime, Type serviceType, Type implementationType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor descriptor, Type serviceType, CallSiteChain callSiteChain, Int32 slot) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite(Type serviceType, CallSiteChain callSiteChain) at Microsoft.Extensions.DependencyInjection.ServiceProvider.CreateServiceAccessor(Type serviceType) at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope) at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType, String namespace) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType, String namespace) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_0.<.ctor>b__0() at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.b__0() at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action) Unable to resolve service for type 'Microsoft.EntityFrameworkCore.Storage.TypeMappingSourceDependencies' while attempting to activate 'MySql.EntityFrameworkCore.Storage.Internal.MySQLTypeMappingSource'. PM> 解决办法也很简单,只需要在启动层添加 MysqlEntityFrameworkDesignTimeServices.cs 并写入以下内容即可: using Microsoft.EntityFrameworkCore.Design; using MySql.EntityFrameworkCore.Extensions; namespace YourProject.Web.Entry; public class MysqlEntityFrameworkDesignTimeServices : IDesignTimeServices { public void ConfigureDesignTimeServices(IServiceCollection serviceCollection) { serviceCollection.AddEntityFrameworkMySQL(); new EntityFrameworkRelationalDesignServicesBuilder(serviceCollection) .TryAddCoreServices(); } } 相关 Issue 讨论:https://gitee.com/dotnetchina/Furion/issues/I5O5ER","s":"9.20.7 MySql.EntityFrameworkCore 在 .NET 6.0.8+ 问题","u":"/docs/dbcontext-code-first","h":"#9207-mysqlentityframeworkcore-在-net-608-问题","p":701},{"i":736,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 正向工厂 知识可查阅 EF Core - 管理数据库架构 章节。","s":"9.20.8 反馈与建议","u":"/docs/dbcontext-code-first","h":"#9208-反馈与建议","p":701},{"i":739,"t":"在最新的 Furion 的 1.1.6+ 版本中,新增了 IEntityChangedListener 实体数据监听接口,可以监听 EFCore 任何实体表 增删改 操作。","s":"9.25.1 实体数据监听器","u":"/docs/dbcontext-entitytrigger","h":"#9251-实体数据监听器","p":737},{"i":741,"t":"类似数据库 触发器 功能,可实现 增删改 监听 可以实现特殊操作,比如刷新缓存,记录日志等","s":"9.25.2 有何作用","u":"/docs/dbcontext-entitytrigger","h":"#9252-有何作用","p":737},{"i":743,"t":"在 Furion 框架中,默认不启用实体数据监听器,如想启用,只需要在 数据库上下文 构造函数中启用即可:","s":"9.25.3 如何使用","u":"/docs/dbcontext-entitytrigger","h":"#9253-如何使用","p":737},{"i":745,"t":"using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\")] public class DefaultDbContext : AppDbContext { public DefaultDbContext(DbContextOptions options) : base(options) { EnabledEntityChangedListener = true; } } }","s":"9.25.3.1 启用数据监听","u":"/docs/dbcontext-entitytrigger","h":"#92531-启用数据监听","p":737},{"i":747,"t":"using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; using System; using System.Collections.Generic; namespace Furion.Core { public class Post : Entity, IEntityChangedListener { /// /// 构造函数 /// public Post() { CreatedTime = DateTimeOffset.UtcNow; IsDeleted = false; } /// /// 名称 /// public string Name { get; set; } /// /// Person 集合 /// public ICollection Persons { get; set; } /// /// 实体更改后触发 /// /// 新数据 /// 旧数据 /// 数据库上下文 /// 数据库上下文定位器 /// 实体状态 public void OnChanged(Post entity, Post oldEntity, DbContext dbContext, Type dbContextLocator, EntityState state) { // 刷新缓存 App.GetService().Set(\"Key\", \"Value\"); } } }","s":"9.25.3.2 监听特定实体数据","u":"/docs/dbcontext-entitytrigger","h":"#92532-监听特定实体数据","p":737},{"i":749,"t":"/// /// 实体数据改变监听依赖接口 /// /// public interface IEntityChangedListener where TEntity : class, IPrivateEntity, new() { /// /// 监听数据改变之前(仅支持EFCore操作) /// /// /// /// /// void OnChanging(TEntity entity, DbContext dbContext, Type dbContextLocator, EntityState state) { } /// /// 监听数据改变之后(仅支持EFCore操作) /// /// 新值 /// 旧值 /// /// /// void OnChanged(TEntity newEntity, TEntity oldEntity, DbContext dbContext, Type dbContextLocator, EntityState state); /// /// 监听数据改变失败(仅支持EFCore操作) /// /// /// /// /// void OnChangeFailed(TEntity entity, DbContext dbContext, Type dbContextLocator, EntityState state) { } }","s":"9.25.4 IEntityChangedListener 定义","u":"/docs/dbcontext-entitytrigger","h":"#9254-ientitychangedlistener-定义","p":737},{"i":751,"t":"默认情况下,Furion 框架会对所有新增、更新、编辑的实体进行监听,有些时候我们无需监听特定实体,只需要在实体上贴 [SuppressChangedListener] 特性即可。","s":"9.25.5 [SuppressChangedListener] 跳过监听","u":"/docs/dbcontext-entitytrigger","h":"#9255-suppresschangedlistener-跳过监听","p":737},{"i":753,"t":"与我们交流 给 Furion 提 Issue。","s":"9.25.6 反馈与建议","u":"/docs/dbcontext-entitytrigger","h":"#9256-反馈与建议","p":737},{"i":756,"t":"Furion 框架中,默认只提供小数据(100 条 以内)批量数据操作,如果需要更大的数据批量处理,推荐使用第三方包 Zack.EFCore.Batch,支持和 Furion 无缝衔接。","s":"9.9.1 关于批量操作","u":"/docs/dbcontext-batch","h":"#991-关于批量操作","p":754},{"i":759,"t":"MSSQL:Zack.EFCore.Batch.MSSQL MySql:Zack.EFCore.Batch.MySQL.Pomelo Npgsql:Zack.EFCore.Batch.Npgsql Oracle:Zack.EFCore.Batch.Oracle Sqlite:Zack.EFCore.Batch.Sqlite","s":"9.9.2.1 安装对应的数据库 Nuget 包","u":"/docs/dbcontext-batch","h":"#9921-安装对应的数据库-nuget-包","p":754},{"i":761,"t":"services.AddDatabaseAccessor(options => { options.AddDbPool(providerName: default, optionBuilder: (services, opt) => // 如果是 v3.7.11 之前,使用 opt => { opt.UseBatchEF_Sqlite(); // SQlite 数据库包 }); });","s":"9.9.2.2 注册并配置服务","u":"/docs/dbcontext-batch","h":"#9922-注册并配置服务","p":754},{"i":763,"t":"// 批量更新 await repository.Context.BatchUpdate() .Set(b => b.Price, b => b.Price + 3) .Set(b => b.Title, b => s) .Set(b => b.AuthorName,b=>b.Title.Substring(3,2)+b.AuthorName.ToUpper()) .Set(b => b.PubTime, b => DateTime.Now) .Where(b => b.Id > n || b.AuthorName.StartsWith(\"Zack\")) .ExecuteAsync(); // 批量删除 await repository.Context.DeleteRangeAsync(b => b.Price > n || b.AuthorName == \"zack yang\");","s":"9.9.2.3 基本使用","u":"/docs/dbcontext-batch","h":"#9923-基本使用","p":754},{"i":765,"t":"通过 Nuget 安装 EFCore.BulkExtensions 包即可。","s":"9.9.3 EFCore.BulkExtensions 使用","u":"/docs/dbcontext-batch","h":"#993-efcorebulkextensions-使用","p":754},{"i":767,"t":"// 批量插入 repository.Context.BulkInsert(entitiesList); repository.Context.BulkInsertAsync(entitiesList); // 批量更新 repository.Context.BulkUpdate(entitiesList); repository.Context.BulkUpdateAsync(entitiesList); // 批量删除 repository.Context.BulkDelete(entitiesList); repository.Context.BulkDeleteAsync(entitiesList); // 批量插入或更新 repository.Context.BulkInsertOrUpdate(entitiesList); repository.Context.BulkInsertOrUpdateAsync(entitiesList); // 批量插入或更新或删除 repository.Context.BulkInsertOrUpdateOrDelete(entitiesList); repository.Context.BulkInsertOrUpdateOrDeleteAsync(entitiesList); // 批量读取多个实体 repository.Context.BulkRead(entitiesList); repository.Context.BulkReadAsync(entitiesList); // 批量清空表(慎用!!!!!) repository.Context.Truncate(); repository.Context.TruncateAsync();","s":"9.9.3.1 常见批量操作","u":"/docs/dbcontext-batch","h":"#9931-常见批量操作","p":754},{"i":769,"t":"// 根据条件批量删除 repository.Where(a => a.ItemId > 500).BatchDelete(); await repository.Where(a => a.ItemId > 500).BatchDeleteAsync(); // 根据条件批量更新 repository.Where(a => a.ItemId <= 500).BatchUpdate(a => new Item { Quantity = a.Quantity + 100 }); repository.Where(a => a.ItemId <= 500).BatchUpdate(new Item { Description = \"Updated\" }); await repository.Where(a => a.ItemId <= 500).BatchUpdateAsync(new Item { Description = \"Updated\" }); // 批量更新指定列 var updateColumns = new List { nameof(Item.Quantity) }; var q = repository.Where(a => a.ItemId <= 500); int affected = q.BatchUpdate(new Item { Description = \"Updated\" }, updateColumns);","s":"9.9.3.2 查询后批量操作","u":"/docs/dbcontext-batch","h":"#9932-查询后批量操作","p":754},{"i":771,"t":"Operations\\Rows 100,000 EF 100,000 EFBulk 1,000,000 EFBulk Insert 38.98 s 2.10 s 17.99 s Update 109.25 s 3.96 s 31.45 s Delete 7.26 s 2.04 s 12.18 s ----------------- ------------ ---------------- ------------------ Together 70.70 s 5.88 s 56.84 s","s":"9.9.3.3 批量操作性能","u":"/docs/dbcontext-batch","h":"#9933-批量操作性能","p":754},{"i":773,"t":"非微软支持数据库适配问题 如果使用的是非微软支持的数据库,如 Oracle,MySQL,PostgreSQL 等,可能适配 EFCore 7 不及时会出现找不到方法异常。 https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-7.0/whatsnew#executeupdate-and-executedelete-bulk-updates // 批量删除 await repository.Entities.ExecuteDeleteAsync(); await repository.Entities.Where(t => t.Text.Contains(\".NET\")).ExecuteDeleteAsync(); await repository.Entities.Where(t => t.Posts.All(e => e.PublishedOn.Year < 2022)).ExecuteDeleteAsync(); // 批量更新 await repository.Entities.ExecuteUpdateAsync( s => s.SetProperty(b => b.Name, b => b.Name + \" *Featured!*\")); await repository.Entities .Where(p => p.PublishedOn.Year < 2022) .ExecuteUpdateAsync(s => s .SetProperty(b => b.Title, b => b.Title + \" (\" + b.PublishedOn.Year + \")\") .SetProperty(b => b.Content, b => b.Content + \" ( This content was published in \" + b.PublishedOn.Year + \")\")); await repository.Entities .Where(t => t.Posts.All(e => e.PublishedOn.Year < 2022)) .ExecuteUpdateAsync(s => s.SetProperty(t => t.Text, t => t.Text + \" (old)\"));","s":"9.9.4 EFCore 7 内置批量操作","u":"/docs/dbcontext-batch","h":"#994-efcore-7-内置批量操作","p":754},{"i":775,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 EFCore.BulkExtensions 知识可查阅 EFCore.BulkExtensions 开源仓库。","s":"9.9.5 反馈与建议","u":"/docs/dbcontext-batch","h":"#995-反馈与建议","p":754},{"i":777,"t":"功能移除声明 以下内容包含 Exists 单词的在 Furion 2.6.0 + 版本中已移除。","s":"9.8 删除操作","u":"/docs/dbcontext-delete","h":"","p":776},{"i":779,"t":"// ==== 同步操作 ==== // 示例一 repository.Delete(user); // 示例二 user.Delete(); // 示例三 repository.ChangeEntityState(user, EntityState.Deleted); // 示例四 repository.Entities.Remove(user); // ==== 异步操作 ==== // 示例一 await repository.DeleteAsync(user); // 示例二 await user.DeleteAsync();","s":"9.8.1 删除一个实体(不立即提交)","u":"/docs/dbcontext-delete","h":"#981-删除一个实体不立即提交","p":776},{"i":781,"t":"// ==== 同步操作 ==== // 示例一 repository.DeleteNow(user); // 示例二 user.DeleteNow(); // ==== 异步操作 ==== // 示例一 await repository.DeleteNowAsync(user); // 示例二 await user.DeleteNowAsync();","s":"9.8.2 删除一个实体(立即提交)","u":"/docs/dbcontext-delete","h":"#982-删除一个实体立即提交","p":776},{"i":783,"t":"// ==== 同步操作 ==== // 示例一 repository.Delete(1); // 示例二 user.Delete(1); // ==== 异步操作 ==== // 示例一 await repository.DeleteAsync(1); // 示例二 await user.DeleteAsync(1);","s":"9.8.3 根据主键删除记录(不立即提交)","u":"/docs/dbcontext-delete","h":"#983-根据主键删除记录不立即提交","p":776},{"i":785,"t":"// ==== 同步操作 ==== // 示例一 repository.DeleteNow(1); // 示例二 user.DeleteNow(1); // ==== 异步操作 ==== // 示例一 await repository.DeleteNowAsync(1); // 示例二 await user.DeleteNowAsync(1);","s":"9.8.4 根据主键删除记录(立即提交)","u":"/docs/dbcontext-delete","h":"#984-根据主键删除记录立即提交","p":776},{"i":787,"t":"// ==== 同步操作 ==== // 示例一 repository.DeleteExists(1); // 示例二 user.DeleteExists(1); // ==== 异步操作 ==== // 示例一 await repository.DeleteExistsAsync(1); // 示例二 await user.DeleteExistsAsync(1);","s":"9.8.5 数据存在才根据主键删除(不立即提交)","u":"/docs/dbcontext-delete","h":"#985-数据存在才根据主键删除不立即提交","p":776},{"i":789,"t":"// ==== 同步操作 ==== // 示例一 repository.DeleteExistsNow(1); // 示例二 user.DeleteExistsNow(1); // ==== 异步操作 ==== // 示例一 await repository.DeleteExistsNowAsync(1); // 示例二 await user.DeleteExistsNowAsync(1); 小知识 所有带 Now 结尾的表示立即提交到数据库,也就是立即调用 SaveChanges 或 SaveChangesAsync。","s":"9.8.6 数据存在才根据主键删除(立即提交)","u":"/docs/dbcontext-delete","h":"#986-数据存在才根据主键删除立即提交","p":776},{"i":791,"t":"功能移除声明 以下内容在 Furion 2.10 + 版本中已移除。 Furion 框架中可以通过 [FakeDelete] 特性标记假删除特性,如:","s":"9.8.7 假删除/软删除","u":"/docs/dbcontext-delete","h":"#987-假删除软删除","p":776},{"i":793,"t":"public class Model: IEntity { [FakeDelete(true)] // 设置假删除的值 public bool IsDeleted { get; set; } } [FakeDelete] [FakeDelete] 属性拥有带一个参数的构造函数,这个参数是假删除的值","s":"9.8.7.1 添加 [FakeDelete] 标记","u":"/docs/dbcontext-delete","h":"#9871-添加-fakedelete-标记","p":776},{"i":795,"t":"// ==== 同步操作 ==== // 示例一 repository.FakeDelete(entity); // 示例二 repository.FakeDeleteNow(entity); // 示例三 repository.FakeDelete(1); // 示例四 repository.FakeDeleteNow(1); // 示例五 entity.FakeDelete(); // 示例六 repository.UpdateInclude(user, u => u.IsDeleted); // ==== 异步操作 ==== // 示例一 await repository.FakeDeleteAsync(entity); // 示例二 await repository.FakeDeleteNowAsync(entity); // 示例三 await repository.FakeDeleteAsync(1); // 示例四 await repository.FakeDeleteNowAsync(1); // 示例五 await entity.FakeDeleteAsync(); // 示例六 await repository.UpdateIncludeAsync(user, u => u.IsDeleted);","s":"9.8.7.2 假删除使用","u":"/docs/dbcontext-delete","h":"#9872-假删除使用","p":776},{"i":797,"t":"与我们交流 给 Furion 提 Issue。","s":"9.8.8 反馈与建议","u":"/docs/dbcontext-delete","h":"#988-反馈与建议","p":776},{"i":799,"t":"温馨提示 推荐使用 《9.17 Sql 高级代理》代替本章节功能。Sql 高级代理 能够提供更容易且更易维护的方式。","s":"9.14 函数操作","u":"/docs/dbcontext-function","h":"","p":798},{"i":801,"t":"引用百度百科: 数据库函数是指当需要分析数据清单中的数值是否符合特定条件时,使用数据库工作表函数。 简单来说,数据库函数就是用于子计算的函数。其计算的结果可以用于构建 sql 语句。","s":"9.14.1 数据库函数","u":"/docs/dbcontext-function","h":"#9141-数据库函数","p":798},{"i":803,"t":"SqlServer Sqlite Cosmos InMemoryDatabase MySql PostgreSQL Oracle Firebird Dm ✔ ✔ ✔ ✔ ✔","s":"9.14.1.1 支持标量函数的数据库","u":"/docs/dbcontext-function","h":"#91411-支持标量函数的数据库","p":798},{"i":805,"t":"SqlServer Sqlite Cosmos InMemoryDatabase MySql PostgreSQL Oracle Firebird Dm ✔ ✔ ✔ ✔","s":"9.14.1.2 支持表值函数的数据库","u":"/docs/dbcontext-function","h":"#91412-支持表值函数的数据库","p":798},{"i":807,"t":"在关系型数据库中,数据库函数有这两种类型: 标量函数:只能返回单个值 表值函数:只能返回一个结果集","s":"9.14.2 数据库函数类型","u":"/docs/dbcontext-function","h":"#9142-数据库函数类型","p":798},{"i":810,"t":"// ISqlRepository 方法 var value = _sqlRepository.SqlFunctionScalar(\"func_GetValue\"); // ISqlDispatchProxy 方式 var value = _sqlExecuteProxy.GetValue(); // 推荐方式 // 实体仓储方式 var value = _personRepository.SqlFunctionScalar(\"func_GetValue\"); // IRepository 非泛型方式 var value = _repository.Sql().SqlFunctionScalar(\"func_GetValue\"); // 变态懒人方式,直接通过函数名执行 var value = \"func_GetValue\".SqlFunctionScalar(); 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.14.3.1 标量函数返回 object","u":"/docs/dbcontext-function","h":"#91431-标量函数返回-object","p":798},{"i":812,"t":"// ISqlRepository 方法 var value = _sqlRepository.SqlFunctionScalar(\"func_GetValue\"); // ISqlDispatchProxy 方式 var value = _sqlExecuteProxy.GetValue(); // 推荐方式 // 实体仓储方式 var value = _personRepository.SqlFunctionScalar(\"func_GetValue\"); // IRepository 非泛型方式 var value = _repository.Sql().SqlFunctionScalar(\"func_GetValue\"); // 变态懒人方式,直接通过函数名执行 var value = \"func_GetValue\".SqlFunctionScalar(); 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.14.3.2 标量函数返回 T","u":"/docs/dbcontext-function","h":"#91432-标量函数返回-t","p":798},{"i":814,"t":"// ISqlRepository 方法 var value = _sqlRepository.SqlFunctionQuery(\"func_GetTable\"); // ISqlDispatchProxy 方式 var value = _sqlExecuteProxy.GetTable(); // 推荐方式 // 实体仓储方式 var value = _personRepository.SqlFunctionQuery(\"func_GetTable\"); // IRepository 非泛型方式 var value = _repository.Sql().SqlFunctionQuery(\"func_GetTable\"); // 变态懒人方式,直接通过函数名执行 var value = \"func_GetTable\".SqlFunctionQuery(); 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.14.3.3 表值函数返回 DataTable","u":"/docs/dbcontext-function","h":"#91433-表值函数返回-datatable","p":798},{"i":816,"t":"// ISqlRepository 方法 var value = _sqlRepository.SqlFunctionQuery(\"func_GetTable\"); // ISqlDispatchProxy 方式 var value = _sqlExecuteProxy.GetTable(); // 推荐方式 // 实体仓储方式 var value = _personRepository.SqlFunctionQuery(\"func_GetTable\"); // IRepository 非泛型方式 var value = _repository.Sql().SqlFunctionQuery(\"func_GetTable\"); // 变态懒人方式,直接通过函数名执行 var value = \"func_GetTable\".SqlFunctionQuery(); 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.14.3.4 表值函数返回 List","u":"/docs/dbcontext-function","h":"#91434-表值函数返回-listt","p":798},{"i":818,"t":"Furion 框架提供非常灵活的在 Linq 中使用标量函数的方法。如果像使用这样的方式,需要满足以下两个条件: 标量函数必须定义在公开静态类中,且自己也是公开静态方法 该公开静态方法必须贴有 [QueryableFunction] 特性 示例如下:","s":"9.14.4 在 Linq 中使用 标量函数","u":"/docs/dbcontext-function","h":"#9144-在-linq-中使用-标量函数","p":798},{"i":820,"t":"CREATE FUNCTION FN_GetId ( @id INT ) RETURNS INT AS BEGIN RETURN @id + 1; END;","s":"9.14.4.1 创建标量函数","u":"/docs/dbcontext-function","h":"#91441-创建标量函数","p":798},{"i":822,"t":"创建静态类,如 QueryFunctions,将该 标量函数 放在静态类中: using Furion.DatabaseAccessor; using System; namespace Furion.Application { // 必须是公开静态的 public static class QueryFunctions { // 必须是静态方法 [QueryableFunction(\"FN_GetId\", \"dbo\")] // 配置标量函数 public static int GetId(int id) => throw new NotSupportedException(); } }","s":"9.14.4.2 创建静态类和静态方法","u":"/docs/dbcontext-function","h":"#91442-创建静态类和静态方法","p":798},{"i":824,"t":"_personRepository.Where(u => u.Id > QueryFunctions.GetId(1)).ToList(); SELECT [p].[Id], [p].[Address], [p].[Age], [p].[CreatedTime], [p].[IsDeleted], [p].[Name], [p].[UpdatedTime] FROM [Person] AS [p] WHERE [p].[Id] > [dbo].[FN_GetId](1) // 💥 注意这里","s":"9.14.4.3 在 Linq 中使用","u":"/docs/dbcontext-function","h":"#91443-在-linq-中使用","p":798},{"i":826,"t":"EF Core 5.0 版本支持在 Linq 中操作 表值函数,操作有点类似 视图操作 示例如下:","s":"9.14.5 在 Linq 中使用 表值函数","u":"/docs/dbcontext-function","h":"#9145-在-linq-中使用-表值函数","p":798},{"i":828,"t":"CREATE FUNCTION dbo.GetPersons ( @id INT ) RETURNS TABLE AS RETURN ( SELECT Id, Name, Age, Address FROM dbo.Person WHERE Id > @id );","s":"9.14.5.1 创建表值函数","u":"/docs/dbcontext-function","h":"#91451-创建表值函数","p":798},{"i":830,"t":"namespace Furion.Core { public class F_Person { /// /// 主键Id /// public int Id { get; set; } /// /// 姓名 /// public string Name { get; set; } /// /// 年龄 /// public int Age { get; set; } /// /// 住址 /// public string Address { get; set; } } }","s":"9.14.5.2 创建表值函数模型","u":"/docs/dbcontext-function","h":"#91452-创建表值函数模型","p":798},{"i":832,"t":"在 DbContext 类中定义方法: using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using System.Linq; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\")] public class FurionDbContext : AppDbContext { public IQueryable GetPersons(int id) => FromExpression(() => GetPersons(id)); public FurionDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity(typeof(F_Person)).HasNoKey(); modelBuilder.HasDbFunction(() => GetPersons(default)); } } }","s":"9.14.5.3 表值函数配置","u":"/docs/dbcontext-function","h":"#91453-表值函数配置","p":798},{"i":834,"t":"IQueryable query = _repository.DynamicDbContext.GetPersons(1); var result = query.Where(u => u.Name.Equals(\"Furion\")).ToList(); 最终生成 Sql SELECT [g].Id, [g].Name, [g].Age, [g].Address FROM dbo.GetPersons(1) AS [g] WHERE [g].Name == N'Furion';","s":"9.14.5.4 在 Linq 中使用","u":"/docs/dbcontext-function","h":"#91454-在-linq-中使用","p":798},{"i":836,"t":"EF Core 为我们提供了很多常用的内置函数,可以在 Lambda 条件中使用,主要是通过 EF.Functions 调用,如: _repository.Where(u => EF.Functions.DateDiffHour(u.CreatedDt, DateTime.Now) > 8).FirstOrDefault(); 这个语句使用了 EF.Functions.DateDiffHour 最终生成的 Sql 如下: SELECT TOP(1) [a].* FROM [dbo].[TEST] AS [a] WHERE DATEDIFF(HOUR, [a].[CREATED_DT], GETDATE()) > 8 EF Core 内置函数就不一一列出了,可以通过 EF.Functions 查看更多,如果不能满足自己的需求,那么可以自定义 Linq 标量函数","s":"9.14.6 在 EF Core 内置函数","u":"/docs/dbcontext-function","h":"#9146-在-ef-core-内置函数","p":798},{"i":838,"t":"与我们交流 给 Furion 提 Issue。","s":"9.14.7 反馈与建议","u":"/docs/dbcontext-function","h":"#9147-反馈与建议","p":798},{"i":841,"t":"通常,我们系统中有一些维护字段,如 IsDeleted 字段,这个字段用来标识用户已经删除的数据,那么我们需要每次查询数据的时候带上这个字段,避免查询出不该出现的数据。 Furion 提供非常灵活方便的全局查询筛选器,能够应用到每一次查询中。","s":"9.23.1 查询筛选器","u":"/docs/dbcontext-filter","h":"#9231-查询筛选器","p":839},{"i":844,"t":"单表筛选器就是只针对特定实体进行筛选操作,使用简单,只需要在继承 IEntityTypeBuilder 接口并实现即可,如: using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; namespace Furion.Core { public class Person : Entity, IEntityTypeBuilder { public Person() { CreatedTime = DateTime.Now; IsDeleted = false; } public string Name { get; set; } public int Age { get; set; } public string Address { get; set; } public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder.HasQueryFilter(u => !u.IsDeleted); } } }","s":"9.23.2.1 单表筛选器","u":"/docs/dbcontext-filter","h":"#92321-单表筛选器","p":839},{"i":846,"t":"全局筛选器可以配置所有实体应用筛选器中,无需一个一个去配置。使用方法稍微有些复杂,需要动态构建 Lambda 表达式。 实现全局筛选器依赖于 IModelBuilderFilter 接口,该接口提供两个方法: OnCreating:实体构建之前 OnCreated:实体构建之后 通过实现这两个方法即可配置全局过滤器,如: using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Linq.Expressions; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\")] public class FurionDbContext : AppDbContext, IModelBuilderFilter { public FurionDbContext(DbContextOptions options) : base(options) { } public void OnCreating(ModelBuilder modelBuilder, EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { // 设置软删除表达式 var fakeDeleteQueryFilterExpression = FakeDeleteQueryFilterExpression(entityBuilder, dbContext); if (fakeDeleteQueryFilterExpression == null) return; entityBuilder.HasQueryFilter(fakeDeleteQueryFilterExpression); } } } 小建议 如果对动态构建 LambdaExpression 不熟悉的朋友,可以使用 System.Linq.Dynamic.Core 包 https://github.com/zzzprojects/System.Linq.Dynamic.Core","s":"9.23.2.2 全局筛选器","u":"/docs/dbcontext-filter","h":"#92322-全局筛选器","p":839},{"i":848,"t":"与我们交流 给 Furion 提 Issue。","s":"9.23.3 反馈与建议","u":"/docs/dbcontext-filter","h":"#9233-反馈与建议","p":839},{"i":851,"t":"Person PersonDetail Children Post using Furion.DatabaseAccessor; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace Furion.Core { public class Person : Entity { /// /// 构造函数 /// public Person() { CreatedTime = DateTime.Now; } /// /// 姓名 /// [MaxLength(32)] public string Name { get; set; } /// /// 年龄 /// public int Age { get; set; } /// /// 住址 /// public string Address { get; set; } /// /// 从表 /// public PersonDetail PersonDetail { get; set; } /// /// 一对多 /// public ICollection Childrens { get; set; } /// /// 多对多 /// public ICollection Posts { get; set; } } } using Furion.DatabaseAccessor; namespace Furion.Core { public class PersonDetail : EntityBase { /// /// 电话号码 /// public string PhoneNumber { get; set; } /// /// QQ 号码 /// public string QQ { get; set; } /// /// 外键 /// public int PersonId { get; set; } /// /// 主表 /// public Person Person { get; set; } } } using Furion.DatabaseAccessor; using System; namespace Furion.Core { public class Children : Entity { /// /// 构造函数 /// public Children() { CreatedTime = DateTime.Now; } /// /// 名称 /// public string Name { get; set; } /// /// 性别 /// public Gender Gender { get; set; } /// /// 外键 /// public int PersonId { get; set; } /// /// 主表 /// public Person Person { get; set; } } } using Furion.DatabaseAccessor; using System; using System.Collections.Generic; namespace Furion.Core { public class Post : Entity { /// /// 构造函数 /// public Post() { CreatedTime = DateTime.Now; } /// /// 名称 /// public string Name { get; set; } /// /// Person 集合 /// public ICollection Persons { get; set; } } }","s":"9.11.1 关联数据模型","u":"/docs/dbcontext-hight-query","h":"#9111-关联数据模型","p":849},{"i":853,"t":"// 示例一 var person = repository.Include(u => u.Detail); // 示例二 var person = repository.Include(u => u.Detail) .Include(u => u.Post); // 示例三 var person = repository.Include(u => u.Detail) .ThenInclude(d => d.Review) .Include(u => u.Post); // 示例四 var person = repository.Include(u => u.Detail.Where(d => d.Id > 10).OrderBy(d => d.Name)) .ThenInclude(d => d.Review) .Include(u => u.Post); // 示例五 var person = repository.Include(!string.IsNullOrEmpty(keyword), u => u.Detail); // 示例六 var person = repository.Include(!string.IsNullOrEmpty(keyword), u => u.Detail) .Include(age > 18, u => u.Detail.Where(d => d.Id > 10).OrderBy(d => d.Name)) .ThenInclude(d => d.Review) .Include(u => u.Post);","s":"9.11.2 一对一查询","u":"/docs/dbcontext-hight-query","h":"#9112-一对一查询","p":849},{"i":855,"t":"// 示例一 var person = repository.Include(u => u.Childrens); // 参考 一对一 例子 特别说明 一对一 和 一对多 查询方法一样,唯一的区别是:一对多 采用 ICollection 定义属性。","s":"9.11.3 一对多查询","u":"/docs/dbcontext-hight-query","h":"#9113-一对多查询","p":849},{"i":857,"t":"// 示例一 var person = repository.Include(u => u.Posts); // 参考 一对一 例子 特别说明 一对一 和 多对多 查询方法一样,唯一的区别是:多对多 采用 ICollection 定义属性。","s":"9.11.4 多对多查询","u":"/docs/dbcontext-hight-query","h":"#9114-多对多查询","p":849},{"i":860,"t":"var query = from p in _personRepository.AsQueryable() join d in _personDetailRepository.AsQueryable() on p.Id equals d.PersonId select new PersonDto { PhoneNumber = p.PersonDetail.PhoneNumber, Address = p.Address, Age = p.Age, Name = p.Name, Id = p.Id, QQ = p.PersonDetail.QQ };","s":"9.11.5.1 内连接 Inner Join","u":"/docs/dbcontext-hight-query","h":"#91151-内连接-inner-join","p":849},{"i":862,"t":"var query = from p in _personRepository.AsQueryable() join d in _personDetailRepository.AsQueryable() on p.Id equals d.PersonId into results from d in results.DefaultIfEmpty() select new PersonDto { PhoneNumber = p.PersonDetail.PhoneNumber, Address = p.Address, Age = p.Age, Name = p.Name, Id = p.Id, QQ = p.PersonDetail.QQ }; 小提示 Left Join 和 Inner Join 不同的是,Left Join 会先将结果 into 到新的结果集然后再查询,并调用 DefaultIfEmpty() 方法。","s":"9.11.5.2 左连接 Left Join","u":"/docs/dbcontext-hight-query","h":"#91152-左连接-left-join","p":849},{"i":864,"t":"Right Join 只需要将 Left Join 主从表位置更换即可。","s":"9.11.5.3 右连接 Right Join","u":"/docs/dbcontext-hight-query","h":"#91153-右连接-right-join","p":849},{"i":866,"t":"// 示例一 var query = repository.AsQueryable().GroupBy(x => new { x.Column1, x.Column2 }); // 示例二 var query = from student in repository.AsQueryable() group student by repository2.AsQueryable() into dateGroup select new ResultData() { Key = dateGroup.Key, Value = dateGroup.Count() }; // 示例三 var query = from a in repository.AsQueryable() join b in repository2.AsQueryable() on a.Id equals b.Aid join c in repository3.AsQueryable() on c.id equals b.Bid group a by new { a.Age, b.Sex } into g select new { Peo = g.Key, Count = g.Count() };","s":"9.11.6 分组查询","u":"/docs/dbcontext-hight-query","h":"#9116-分组查询","p":849},{"i":868,"t":"var query = repository.AsQueryable(u => u.Id > 10) .Union( repository2.AsQueryable(u => u.Id <= 10) );","s":"9.11.7 合并结果集","u":"/docs/dbcontext-hight-query","h":"#9117-合并结果集","p":849},{"i":871,"t":"// 示例一 var query = repository.AsQueryable() .OrderBy(u => u.Id); // 示例二 var query =repository.AsQueryable() .OrderBy(u => u.Id) .ThenBy(u => u.Name);","s":"9.11.8.1 正序","u":"/docs/dbcontext-hight-query","h":"#91181-正序","p":849},{"i":873,"t":"// 示例一 var query = repository.AsQueryable() .OrderByDescending(u => u.Id); // 示例二 var query =repository.AsQueryable() .OrderByDescending(u => u.Id) .ThenByDescending(u => u.Name);","s":"9.11.8.2 倒序","u":"/docs/dbcontext-hight-query","h":"#91182-倒序","p":849},{"i":875,"t":"// 示例一 var query = repository.AsQueryable() .OrderBy(u => u.Id) .OrderByDescending(u => u.Name) .ThenBy(u => u.Age);","s":"9.11.8.3 混合倒序","u":"/docs/dbcontext-hight-query","h":"#91183-混合倒序","p":849},{"i":877,"t":"City CityDto using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Collections.Generic; namespace Furion.Core { /// /// 城市 /// public class City : Entity, IEntityTypeBuilder, IEntitySeedData { /// /// 构造函数 /// public City() { CreatedTime = DateTime.Now; } /// /// 名称 /// public string Name { get; set; } /// /// 上级Id /// public int? ParentId { get; set; } /// /// 上级 /// public virtual City Parent { get; set; } /// /// 子集 /// public virtual ICollection Childrens { get; set; } /// /// 配置实体关系 /// /// /// /// public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder .HasMany(x => x.Childrens) .WithOne(x => x.Parent) .HasForeignKey(x => x.ParentId) .OnDelete(DeleteBehavior.ClientSetNull); // 必须设置这一行 } /// /// 种子数据 /// /// /// /// public IEnumerable HasData(DbContext dbContext, Type dbContextLocator) { return new List { new City { Id=1,CreatedTime =DateTime.Parse(\"2020-08-20 15:30:20\"),IsDeleted=false,Name=\"中国\" }, new City { Id=2,CreatedTime =DateTime.Parse(\"2020-08-20 15:30:20\"),IsDeleted=false,Name=\"广东省\",ParentId=1 }, new City { Id=3,CreatedTime =DateTime.Parse(\"2020-08-20 15:30:20\"),IsDeleted=false,Name=\"中山市\",ParentId=2 }, new City { Id=4,CreatedTime =DateTime.Parse(\"2020-08-20 15:30:20\"),IsDeleted=false,Name=\"珠海市\",ParentId=2 }, new City { Id=5,CreatedTime =DateTime.Parse(\"2020-08-20 15:30:20\"),IsDeleted=false,Name=\"浙江省\",ParentId=1 }, }; } } } using System.Collections.Generic; namespace Furion.Application.Persons { public class CityDto { /// /// 主键 /// public int Id { get; set; } /// /// 名称 /// public string Name { get; set; } /// /// 子集 /// public ICollection Childrens { get; set; } } } var cities = await repository.AsQueryable() .Include(u => u.Childrens) .Where(u => u.Id == 1) .ToListAsync(); var dtos = cities.Adapt>();","s":"9.11.9 递归查询","u":"/docs/dbcontext-hight-query","h":"#9119-递归查询","p":849},{"i":879,"t":"Furion 默认不支持 动态 Sql 查询功能,不过可以通过第三方实现: 在 Furion 项目层安装 System.Linq.Dynamic.Core 包 https://github.com/zzzprojects/System.Linq.Dynamic.Core","s":"9.11.10 动态 Sql 查询","u":"/docs/dbcontext-hight-query","h":"#91110-动态-sql-查询","p":849},{"i":881,"t":"// 示例一 var query = repository.AsQueryable() .Where(\"City == @0 and Orders.Count >= @1\", \"China\", 10) .OrderBy(\"CompanyName\") .Select(\"new(CompanyName as Name, Phone)\"); // 示例二 var list = repository.AsQueryable() .Where(\"Name.Contains(@0)\",\"Furion\") .ToList(); // 示例三,支持 ? 语法 var customers = repository.AsQueryable() .Include(c => c.Location) .Where(c => c.Location?.Name == \"test\") // 注意 Location?.Name .ToList();","s":"9.11.10.1 动态 Sql","u":"/docs/dbcontext-hight-query","h":"#911101-动态-sql","p":849},{"i":883,"t":"// 示例一 var x = Expression.Parameter(typeof(int), \"x\"); var y = Expression.Parameter(typeof(int), \"y\"); var e = DynamicExpressionParser .ParseLambda(new ParameterExpression[] { x, y }, null, \"(x + y) * 2\"); // 示例二 var e = DynamicExpressionParser.ParseLambda( typeof(Customer), typeof(bool), \"City = @0 and Orders.Count >= @1\", \"London\", 10);","s":"9.11.10.2 动态 Lambda","u":"/docs/dbcontext-hight-query","h":"#911102-动态-lambda","p":849},{"i":885,"t":"功能移除声明 以下内容在 Furion 2.13 + 版本中已移除。 Furion 框架还提供了时态查询功能,可以查询特定时间的数据,如: var result = rep.Entities .AsTemporalOf(DateTime.UtcNow.AddDays(-1)) .Include(i=> i.Company) .FirstOrDefault(i => i.Name == \"Furion\"); 另外提供了多个时态查询方法 AsTemporalAll() AsTemporalAsOf(date) AsTemporalFrom(startDate, endDate) AsTemporalBetween(startDate, endDate) AsTemporalContained(startDate, endDate)","s":"9.11.11 时态查询","u":"/docs/dbcontext-hight-query","h":"#91111-时态查询","p":849},{"i":887,"t":"默认情况下,EF Core 会跟踪所有实体,也就是任何数据改变都会引起数据检查,所以如果只做查询操作,建议关闭实体跟踪功能。 Furion 框架提供了以下高性能实体集合: DetachedEntities:脱轨/不追踪实体 AsQueryable(false):不追踪实体 Entities.AsNoTracking():手动关闭实体追踪 在 EF Core 中,复杂查询总是会生成一个 sql,也就是 AsSingleQuery(),我们也可以设置为 AsSplitQuery() 切割成多个查询。","s":"9.11.12 性能优化","u":"/docs/dbcontext-hight-query","h":"#91112-性能优化","p":849},{"i":889,"t":"using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Collections.Generic; namespace Furion.Core { public class Person : Entity, IEntityTypeBuilder { public string Name { get; set; } /// /// 配置实体关系 /// /// /// /// public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder.ToSqlQuery( @\"select * from dbo.person.2020-09-19 union all select * from dbo.person.2020-09-20\"); } } } var posts = repository.Where(u => u.Id > 10).ToList();","s":"9.11.13 分表查询小例子","u":"/docs/dbcontext-hight-query","h":"#91113-分表查询小例子","p":849},{"i":891,"t":"与我们交流 给 Furion 提 Issue。","s":"9.11.14 反馈与建议","u":"/docs/dbcontext-hight-query","h":"#91114-反馈与建议","p":849},{"i":893,"t":"连接字符串配置注意事项 如果连接字符串是配置在自定义的 .json 文件中,那么必须在 Visual Studio 中配置 .json 右键属性,设置 复制 输出目录为 如果较新则复制,生成操作为 内容。 否则就会提示找不到配置或连接字符串的错误。","s":"9.18 多种数据库操作","u":"/docs/dbcontext-multi-database","h":"","p":892},{"i":895,"t":"SqlServer Sqlite Cosmos InMemoryDatabase MySql PostgreSQL Oracle Firebird Dm ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔","s":"9.18.1 Furion 支持数据库提供器","u":"/docs/dbcontext-multi-database","h":"#9181-furion-支持数据库提供器","p":892},{"i":897,"t":"SqlServer:Microsoft.EntityFrameworkCore.SqlServer (支持 SqlServer 2005 +) Sqlite:Microsoft.EntityFrameworkCore.Sqlite Cosmos:Microsoft.EntityFrameworkCore.Cosmos InMemoryDatabase:Microsoft.EntityFrameworkCore.InMemory MySql Pomelo.EntityFrameworkCore.MySql:(支持 MySql 5.x +) MySql.EntityFrameworkCore:支持 (MySql 8.x +) PostgreSQL:Npgsql.EntityFrameworkCore.PostgreSQL Oracle:Oracle.EntityFrameworkCore (支持 Oracle 10 +) Firebird:FirebirdSql.EntityFrameworkCore.Firebird Dm:Microsoft.EntityFrameworkCore.Dm 小知识 这些数据库包应该安装在 Furion.EntityFramework.Core 层。特殊情况需安装在 Furion.Core 层中,如 Mysql HasCharset() 配置。","s":"9.18.1.1 数据库提供器对应包","u":"/docs/dbcontext-multi-database","h":"#91811-数据库提供器对应包","p":892},{"i":899,"t":"// 注册 SqlServer options.AddDbPool(DbProvider.SqlServer); options.AddDbPool($\"{DbProvider.SqlServer}@2005\"); // 支持 2005 数据库 options.AddDbPool($\"{DbProvider.SqlServer}@2008\"); // 支持 2008 数据库 // 注册 Sqlite options.AddDbPool(DbProvider.Sqlite); // 注册 Cosmos options.AddDbPool(DbProvider.Cosmos); // 注册 InMemoryDatabase options.AddDbPool(DbProvider.InMemoryDatabase); // 注册 MySql options.AddDbPool(DbProvider.MySql); options.AddDbPool($\"{DbProvider.MySql}@8.0.22\"); // 可以指定版本号 options.AddDbPool(DbProvider.MySqlOfficial); // 使用 MySql 官方包(MySql.EntityFrameworkCore) // 注册 PostgreSQL options.AddDbPool(DbProvider.Npgsql); // 注册 Oracle options.AddDbPool(DbProvider.Oracle); options.AddDbPool($\"{DbProvider.Oracle}@11\"); // 支持 Oracle 11 版本 // 注册 Firebird options.AddDbPool(DbProvider.Firebird); // 注册 Dm options.AddDbPool(DbProvider.Dm); 新版 SqlServer/MySQL/Oracle 注意 SqlServer 兼容 2005-2008 写法: services.AddDatabaseAccessor(options => { options.AddDbPool($\"{DbProvider.SqlServer}@2005\"); // 支持 2005 数据库 options.AddDbPool($\"{DbProvider.SqlServer}@2008\"); // 支持 2008 数据库 }); MySQL 兼容旧版本(带版本号)写法: services.AddDatabaseAccessor(options => { options.AddDbPool($\"{DbProvider.MySql}@8.0.22\"); }); 如果使用了 MySql.EntityFrameworkCore 包,则需改为以下注册: services.AddDatabaseAccessor(options => { options.AddDbPool(DbProvider.MySqlOfficial); }); Oracle 兼容 11 版本 services.AddDatabaseAccessor(options => { // 正常这样配置即可 options.AddDbPool($\"{DbProvider.Oracle}@11\"); // 如果依然出现 ORA-00933: SQL 错误,可以尝试以下配置: options.AddDbPool($\"{DbProvider.Oracle}@11\", optionBuilder: (ses, opt) => { opt.UseOracle(b => b.UseOracleSQLCompatibility(\"11\")); }); });","s":"9.18.2 多数据库服务注册","u":"/docs/dbcontext-multi-database","h":"#9182-多数据库服务注册","p":892},{"i":901,"t":"Sqlite:Data Source=./Furion.db MySql:Data Source=localhost;Database=Furion;User ID=root;Password=000000;pooling=true;port=3306;sslmode=none;CharSet=utf8; SqlServer:Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;TrustServerCertificate=True; Oracle:User Id=orcl;Password=orcl;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl))) PostgreSQL:PORT=5432;DATABASE=postgres;HOST=127.0.0.1;PASSWORD=postgres;USER ID=postgres;","s":"9.18.3 各类数据库连接字符串配置示例","u":"/docs/dbcontext-multi-database","h":"#9183-各类数据库连接字符串配置示例","p":892},{"i":903,"t":"Furion 通过独创的 数据库上下文定位器 实现多数据库灵活操作切换。只需要为每一种数据库绑定唯一的数据库上下文定位器即可。 以下是 Furion 支持多数据库操作的实例:","s":"9.18.4 多数据库使用方式","u":"/docs/dbcontext-multi-database","h":"#9184-多数据库使用方式","p":892},{"i":905,"t":"// 切换到 MSSQL 操作 Person表 var mssqlRepository = personRepository.Change(); // 切换到 MySql 操作 Person表 var mysqlRepository = personRepository.Change(); // 切换到 Sqlite 操作 Person表 var sqliteRepository = personRepository.Change();","s":"9.18.4.1 实体仓储方式","u":"/docs/dbcontext-multi-database","h":"#91841-实体仓储方式","p":892},{"i":907,"t":"// 切换到 MSSQL 操作 Person表 var mssqlRepository = repository.Change(); // 切换到 MySql 操作 Person表 var mysqlRepository = repository.Change(); // 切换到 Sqlite 操作 Person表 var sqliteRepository = repository.Change();","s":"9.18.4.2 非泛型仓储方式","u":"/docs/dbcontext-multi-database","h":"#91842-非泛型仓储方式","p":892},{"i":909,"t":"// 切换到 MSSQL 操作 Person表 var mssqlRepository = sqlRepository.Change(); // 切换到 MySql 操作 Person表 var mysqlRepository = sqlRepository.Change(); // 切换到 Sqlite 操作 Person表 var sqliteRepository = sqlRepository.Change();","s":"9.18.4.3 Sql 仓储方式","u":"/docs/dbcontext-multi-database","h":"#91843-sql-仓储方式","p":892},{"i":911,"t":"// 支持一个数据库 public class Person: IEntity { // .... } // 支持多个数据库 public class Person: IEntity { // .... } 小知识 所有的 实体依赖接口或抽象类 都支持泛型方式 指定 数据库上下文定位器,最多支持 8 个。","s":"9.18.4.4 实体定义方式","u":"/docs/dbcontext-multi-database","h":"#91844-实体定义方式","p":892},{"i":913,"t":"public static class QueryFunctions { [QueryableFunction(\"FN_GetId\", \"dbo\", typeof(MySqlDbContextLocator), typeof(SqliteDbContextLocator))] public static int GetId(int id) => throw new NotSupportedException(); }","s":"9.18.4.5 Linq 函数方式","u":"/docs/dbcontext-multi-database","h":"#91845-linq-函数方式","p":892},{"i":915,"t":"正常情况下,只需要在注册的时候指定 @2008 数据库即可,有些时候我们可能需要在 DbContext 的 OnConfigure 中配置,这个时候就需要添加以下代码: protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer(DbProvider.GetConnectionString()) .ReplaceService(); base.OnConfiguring(optionsBuilder); } 小知识 DbProvider.GetConnectionString() 是获取对应上下文配置的数据库链接字符串。","s":"9.18.5 SqlServer 低版本支持动态配置","u":"/docs/dbcontext-multi-database","h":"#9185-sqlserver-低版本支持动态配置","p":892},{"i":917,"t":"可查阅相关 Issue:https://gitee.com/dotnetchina/Furion/issues/I3RSCO","s":"9.18.6 MySql 时区问题/少 8 小时问题","u":"/docs/dbcontext-multi-database","h":"#9186-mysql-时区问题少-8-小时问题","p":892},{"i":919,"t":"默认情况下 EFCore 将使用和模型定义一致的方式定义表和字段,但可以通过 https://github.com/efcore/EFCore.NamingConventions 拓展插件改变此行为,如下图所示: builder.UseNpgsql() .UseLowerCaseNamingConvention(); 其他资料:https://www.npgsql.org/efcore/modeling/table-column-naming.html","s":"9.18.7 snake_case 风格表名和字段","u":"/docs/dbcontext-multi-database","h":"#9187-snake_case-风格表名和字段","p":892},{"i":921,"t":"与我们交流 给 Furion 提 Issue。","s":"9.18.8 反馈与建议","u":"/docs/dbcontext-multi-database","h":"#9188-反馈与建议","p":892},{"i":924,"t":"Furion 框架提供四种数据库操作拦截器,可以通过拦截器动态修改数据库连接字符串,动态修改 sql,动态更改参数等操作。 Furion 支持这四种拦截器: DbConnectionInterceptor:数据库连接拦截器 DbCommandInterceptor:数据库执行 Sql 拦截器 SaveChangesInterceptor:提交到数据库拦截器 在数据库上下文中重写 SavedChangesEvent 相关事件","s":"9.24.1 数据库拦截器","u":"/docs/dbcontext-Interceptor","h":"#9241-数据库拦截器","p":922},{"i":927,"t":"using Microsoft.EntityFrameworkCore.Diagnostics; using System.Data.Common; using System.Threading; using System.Threading.Tasks; namespace Furion.DatabaseAccessor.Interceptors { public class SqlConnectionInterceptor : DbConnectionInterceptor { // 数据库连接之前 public override InterceptionResult ConnectionOpening(DbConnection connection, ConnectionEventData eventData, InterceptionResult result) { return base.ConnectionOpening(connection, eventData, result); } // 数据库连接之前(异步) public override ValueTask ConnectionOpeningAsync(DbConnection connection, ConnectionEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { return base.ConnectionOpeningAsync(connection, eventData, result, cancellationToken); } // 数据库连接成功 public override void ConnectionOpened(DbConnection connection, ConnectionEndEventData eventData) { base.ConnectionOpened(connection, eventData); } // 数据库连接成功(异步) public override Task ConnectionOpenedAsync(DbConnection connection, ConnectionEndEventData eventData, CancellationToken cancellationToken = default) { return base.ConnectionOpenedAsync(connection, eventData, cancellationToken); } // 数据库连接关闭之前 public override InterceptionResult ConnectionClosing(DbConnection connection, ConnectionEventData eventData, InterceptionResult result) { return base.ConnectionClosing(connection, eventData, result); } // 数据库连接关闭之前(异步) public override ValueTask ConnectionClosingAsync(DbConnection connection, ConnectionEventData eventData, InterceptionResult result) { return base.ConnectionClosingAsync(connection, eventData, result); } // 数据库连接关闭成功 public override void ConnectionClosed(DbConnection connection, ConnectionEndEventData eventData) { base.ConnectionClosed(connection, eventData); } // 数据库连接关闭成功(异步) public override Task ConnectionClosedAsync(DbConnection connection, ConnectionEndEventData eventData) { return base.ConnectionClosedAsync(connection, eventData); } // 数据库连接失败 public override void ConnectionFailed(DbConnection connection, ConnectionErrorEventData eventData) { base.ConnectionFailed(connection, eventData); } // 数据库连接失败(异步) public override Task ConnectionFailedAsync(DbConnection connection, ConnectionErrorEventData eventData, CancellationToken cancellationToken = default) { return base.ConnectionFailedAsync(connection, eventData, cancellationToken); } } }","s":"9.24.2.1 DbConnectionInterceptor","u":"/docs/dbcontext-Interceptor","h":"#92421-dbconnectioninterceptor","p":922},{"i":929,"t":"using Microsoft.EntityFrameworkCore.Diagnostics; using System.Data.Common; using System.Threading; using System.Threading.Tasks; namespace Furion.DatabaseAccessor { internal sealed class SqlCommandProfilerInterceptor : DbCommandInterceptor { // 创建命令对象之前 public override InterceptionResult CommandCreating(CommandCorrelatedEventData eventData, InterceptionResult result) { return base.CommandCreating(eventData, result); } // 创建命令对象之后 public override DbCommand CommandCreated(CommandEndEventData eventData, DbCommand result) { return base.CommandCreated(eventData, result); } // 创建命令对象失败 public override void CommandFailed(DbCommand command, CommandErrorEventData eventData) { base.CommandFailed(command, eventData); } // 创建命令对象失败(异步) public override Task CommandFailedAsync(DbCommand command, CommandErrorEventData eventData, CancellationToken cancellationToken = default) { return base.CommandFailedAsync(command, eventData, cancellationToken); } // 读取数据之前 public override InterceptionResult ReaderExecuting(DbCommand command, CommandEventData eventData, InterceptionResult result) { return base.ReaderExecuting(command, eventData, result); } // 读取数据之前(异步) public override ValueTask> ReaderExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { return base.ReaderExecutingAsync(command, eventData, result, cancellationToken); } // 读取数据之后 public override DbDataReader ReaderExecuted(DbCommand command, CommandExecutedEventData eventData, DbDataReader result) { return base.ReaderExecuted(command, eventData, result); } // 读取数据之后(异步) public override ValueTask ReaderExecutedAsync(DbCommand command, CommandExecutedEventData eventData, DbDataReader result, CancellationToken cancellationToken = default) { return base.ReaderExecutedAsync(command, eventData, result, cancellationToken); } // DataReader 对象释放之前 public override InterceptionResult DataReaderDisposing(DbCommand command, DataReaderDisposingEventData eventData, InterceptionResult result) { return base.DataReaderDisposing(command, eventData, result); } // 无查询执行 sql 之前 public override InterceptionResult NonQueryExecuting(DbCommand command, CommandEventData eventData, InterceptionResult result) { return base.NonQueryExecuting(command, eventData, result); } // 无查询执行 sql 之前(异步) public override ValueTask> NonQueryExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { return base.NonQueryExecutingAsync(command, eventData, result, cancellationToken); } // 无查询执行 sql 之后 public override int NonQueryExecuted(DbCommand command, CommandExecutedEventData eventData, int result) { return base.NonQueryExecuted(command, eventData, result); } // 无查询执行 sql 之后(异步) public override ValueTask NonQueryExecutedAsync(DbCommand command, CommandExecutedEventData eventData, int result, CancellationToken cancellationToken = default) { return base.NonQueryExecutedAsync(command, eventData, result, cancellationToken); } // 执行 sql 返回单行单列之前 public override InterceptionResult ScalarExecuting(DbCommand command, CommandEventData eventData, InterceptionResult result) { return base.ScalarExecuting(command, eventData, result); } // 执行 sql 返回单行单列之前(异步) public override ValueTask> ScalarExecutingAsync(DbCommand command, CommandEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { return base.ScalarExecutingAsync(command, eventData, result, cancellationToken); } // 执行 sql 返回单行单列之后 public override object ScalarExecuted(DbCommand command, CommandExecutedEventData eventData, object result) { return base.ScalarExecuted(command, eventData, result); } // 执行 sql 返回单行单列之后(异步) public override ValueTask ScalarExecutedAsync(DbCommand command, CommandExecutedEventData eventData, object result, CancellationToken cancellationToken = default) { return base.ScalarExecutedAsync(command, eventData, result, cancellationToken); } } }","s":"9.24.2.2 DbCommandInterceptor","u":"/docs/dbcontext-Interceptor","h":"#92422-dbcommandinterceptor","p":922},{"i":931,"t":"using Microsoft.EntityFrameworkCore.Diagnostics; using System.Threading; using System.Threading.Tasks; namespace Furion.DatabaseAccessor { public class DbContextSaveChangesInterceptor : SaveChangesInterceptor { // 提交到数据库之前 public override InterceptionResult SavingChanges(DbContextEventData eventData, InterceptionResult result) { return base.SavingChanges(eventData, result); } // 提交到数据库之前(异步) public override ValueTask> SavingChangesAsync(DbContextEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { return base.SavingChangesAsync(eventData, result, cancellationToken); } // 提交到数据库之后 public override int SavedChanges(SaveChangesCompletedEventData eventData, int result) { return base.SavedChanges(eventData, result); } // 提交到数据库之后(异步) public override ValueTask SavedChangesAsync(SaveChangesCompletedEventData eventData, int result, CancellationToken cancellationToken = default) { return base.SavedChangesAsync(eventData, result, cancellationToken); } // 提交数据库失败 public override void SaveChangesFailed(DbContextErrorEventData eventData) { base.SaveChangesFailed(eventData); } // 提交数据库失败(异步) public override Task SaveChangesFailedAsync(DbContextErrorEventData eventData, CancellationToken cancellationToken = default) { return base.SaveChangesFailedAsync(eventData, cancellationToken); } } }","s":"9.24.2.3 SaveChangesInterceptor","u":"/docs/dbcontext-Interceptor","h":"#92423-savechangesinterceptor","p":922},{"i":933,"t":"Furion 框架中为所有 AppDbContext 子类都提供了三个可重写的方法,这三个方法分别由三个事件触发: 提交更改之前 SavingChanges 事件:触发 void SavingChangesEvent(DbContextEventData eventData, InterceptionResult result) 方法 提交更改之后 SavedChanges 事件:触发 void SavedChangesEvent(SaveChangesCompletedEventData eventData, int result) 方法 提交更改失败 SaveChangesFailed 事件:触发 void SaveChangesFailedEvent(DbContextErrorEventData eventData) 方法 通过这三个事件我们可以在数据库做增、删、改时候做拦截,比如设置创建时间、更新时间或其他默认操作。 如自动添加租户 Id: protected override void SavingChangesEvent(DbContextEventData eventData, InterceptionResult result) { // 获取当前事件对应上下文 var dbContext = eventData.Context; // 获取所有新增和更新的实体 var entities = dbContext.ChangeTracker.Entries() .Where(u => u.State == EntityState.Added || u.State == EntityState.Modified); foreach (var entity in entities) { switch (entity.State) { // 自动设置租户Id case EntityState.Added: entity.Property(nameof(Entity.TenantId)).CurrentValue = GetTenantId(); break; // 排除租户Id case EntityState.Modified: entity.Property(nameof(Entity.TenantId)).IsModified = false; break; } } }","s":"9.24.2.4 SavedChangesEvent 拦截","u":"/docs/dbcontext-Interceptor","h":"#92424-savedchangesevent-拦截","p":922},{"i":935,"t":"定义好过滤器之后,我们需要在数据库上下文中注册: // services.AddDb 也是一样用法 services.AddDbPool(interceptors: new IInterceptor[] { new YourSqlConnectionProfilerInterceptor(), new YourDbContextSaveChangesInterceptor(), new YourSqlCommandProfilerInterceptor() });","s":"9.24.3 注册自定义筛选器","u":"/docs/dbcontext-Interceptor","h":"#9243-注册自定义筛选器","p":922},{"i":937,"t":"与我们交流 给 Furion 提 Issue。","s":"9.24.4 反馈与建议","u":"/docs/dbcontext-Interceptor","h":"#9244-反馈与建议","p":922},{"i":939,"t":"小提醒 只要数据库上下文注册绑定了数据库上下文定位器,那么所有的仓储、实体、种子、配置、视图、函数等数据库相关的类、接口、方法都需要指定数据库上下文定位器,默认数据库上下文定位器除外。 如果改变了和数据库实体相关的所有配置接口的定位器,还需执行 Add-Migration 和 Update-Database 命令。","s":"9.2 数据库上下文定位器","u":"/docs/dbcontext-locator","h":"","p":938},{"i":941,"t":"在了解数据库上下文定位器之前,我们先了解什么是 定位器,定位器 就是给物体安装特殊配置,使其能够被实时追踪和定位。 那为什么需要 定位器? 由于 EF Core 本身支持多个数据库上下文操作,但是通过 依赖注入 的方式默认只初始化一个数据库上下文,也就是如果我们想要操作多个数据库上下文,那么 构造函数 注入方式就会变得复杂。 所以,Furion 实现了一套 定位器 功能,通过这个 定位器 ,我们就能够通过 依赖注入 等多个方式定位到数据库上下文并初始化。","s":"9.2.1 数据库上下文定位器","u":"/docs/dbcontext-locator","h":"#921-数据库上下文定位器","p":938},{"i":943,"t":"能够实现构造函数初始化多个数据库上下文 能够避免业务层直接引用 DbContext 能够实现动态切换数据库、读写分离、主从库等复杂操作","s":"9.2.2 数据库上下文定位器作用","u":"/docs/dbcontext-locator","h":"#922-数据库上下文定位器作用","p":938},{"i":945,"t":"定义数据库上下文定位器只需遵循三个原则即可: 必须是公开 class 类型同时具备无参构造函数 该类型必须继承 IDbContextLocator 接口 数据库上下文定位器和数据库上下文必须是一对一关系,也就是不能同时被多个数据库上下文使用 数据库上下文定位器定义代码如下: using Furion.DatabaseAccessor; namespace Furion.Core { public sealed class FurionDbContextLocator : IDbContextLocator { } }","s":"9.2.3 如何定义数据库上下文定位器","u":"/docs/dbcontext-locator","h":"#923-如何定义数据库上下文定位器","p":938},{"i":947,"t":"在 Furion 框架中已经提供了 MasterDbContextLocator 默认数据库上下文定位器,所以默认数据库上下文只需继承 AppDbContext 即可。 如:只有一个数据库上下文定义: using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class DefaultDbContext : AppDbContext // 无需指定定位器 { public DefaultDbContext(DbContextOptions options) : base(options) { } } } 关于多数据库定位器 默认数据库的定位器默认为 MasterDbContextLocator,所以无需显示指定定位器,但从第二个数据库开始,都必须指定数据库定位器。如: 注册上下文: options.AddDbPool(); 定义上下文 using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class OtherDbContext : AppDbContext // 需指定定位器 { public OtherDbContext(DbContextOptions options) : base(options) { } } } 另外,Entity/IEntity 和 IRepository 等都需要指定定位器,如:IEntity,IRepository 操作。","s":"9.2.4 默认数据库上下文定位器","u":"/docs/dbcontext-locator","h":"#924-默认数据库上下文定位器","p":938},{"i":949,"t":"目前数据库上下文支持以下多个对象: AppDbContext:数据上下文 IRepository:实体仓储 ISqlRepository: Sql 操作仓储 IDbRepository: 特定数据库操作仓储 IMSRepository: 读写分离仓储 Func:依赖注入获取数据库上下文 Entity :实体配置 EntityBase:实体配置 EntityNotKey:无键实体配置 IEntity:默认实体配置 IEntitySeedData:种子数据配置 IEntityTypeBuilder:实体类型构建器 IModelBuilderFilter:模型构建筛选器 [QueryableFunction(DbContextLocators=Type[])]:查询函数","s":"9.2.5 数据库上下文定位器支持对象","u":"/docs/dbcontext-locator","h":"#925-数据库上下文定位器支持对象","p":938},{"i":951,"t":"与我们交流 给 Furion 提 Issue。","s":"9.2.6 反馈与建议","u":"/docs/dbcontext-locator","h":"#926-反馈与建议","p":938},{"i":954,"t":"// ==== 同步操作 ==== // 示例一 var person = repository.Find(1); // 示例二 var person = repository.FindOrDefault(1); // 示例三 var person = repository.Entities.Find(1); // ==== 异步操作 ==== // 示例一 var person = await repository.FindAsync(1); // 示例二 var person = await repository.FindOrDefaultAsync(1); // 示例三 var person = await repository.Entities.FindAsync(1); 小提示 可以支持多个键查询,如主键、联合键。repository.Find(1, \"百小僧\");","s":"9.10.1 根据主键查询一条","u":"/docs/dbcontext-query","h":"#9101-根据主键查询一条","p":952},{"i":956,"t":"// ==== 同步操作 ==== // 示例一 var person = repository.Single(u => u.Name == \"Furion\"); // 示例二 var person = repository.SingleOrDefault(u => u.Name == \"Furion\"); // 示例三 var person = repository.First(u => u.Name == \"Furion\"); // 示例四 var person = repository.FirstOrDefault(u => u.Name == \"Furion\"); // 示例五 var person = repository.Last(u => u.Name == \"Furion\"); // 示例六 var person = repository.LastOrDefault(u => u.Name == \"Furion\"); // 示例七 var person = repository.Entities.Single(u => u.Name == \"Furion\"); // 示例八 var person = repository.Entities.First(u => u.Name == \"Furion\"); // 示例九 var person = repository.Entities.FirstOrDefault(u => u.Name == \"Furion\"); // 示例十 var person = repository.Entities.Last(u => u.Name == \"Furion\"); // 示例十一 var person = repository.Entities.LastOrDefault(u => u.Name == \"Furion\"); // ==== 异步操作 ==== // 示例一 var person = await repository.SingleAsync(u => u.Name == \"Furion\"); // 示例二 var person = await repository.SingleOrDefaultAsync(u => u.Name == \"Furion\"); // 示例三 var person = await repository.FirstAsync(u => u.Name == \"Furion\"); // 示例四 var person = await repository.FirstOrDefaultAsync(u => u.Name == \"Furion\"); // 示例五 var person = await repository.LastAsync(u => u.Name == \"Furion\"); // 示例六 var person = await repository.LastOrDefaultAsync(u => u.Name == \"Furion\"); // 示例七 var person = await repository.Entities.SingleAsync(u => u.Name == \"Furion\"); // 示例八 var person = await repository.Entities.FirstAsync(u => u.Name == \"Furion\"); // 示例九 var person = await repository.Entities.FirstOrDefaultAsync(u => u.Name == \"Furion\"); // 示例十 var person = await repository.Entities.LastAsync(u => u.Name == \"Furion\"); // 示例十一 var person = await repository.Entities.LastOrDefaultAsync(u => u.Name == \"Furion\");","s":"9.10.2 根据条件查询一条","u":"/docs/dbcontext-query","h":"#9102-根据条件查询一条","p":952},{"i":958,"t":"// ==== 同步操作 ==== // 示例一 var persons = repository.Entities; // 示例二 var persons = repository.DetachedEntities; // 示例三 var persons = repository.AsQueryable(); // 示例四 var persons = repository.AsEnumerable(); // 示例五 var persons = await repository.AsQueryable().ToListAsync();","s":"9.10.3 查询所有数据","u":"/docs/dbcontext-query","h":"#9103-查询所有数据","p":952},{"i":960,"t":"// 示例一 var persons = repository.Where(u => u.Id > 10); // 示例二 var persons = repository.Where(u => u.Id > 10 && u.Name.Equals(\"Furion\")); // 示例三 (多个 where 里是 \"并且\",Id>10 and Name == \"Furion\") var persons = repository.Where(u => u.Id > 10).Where(u => u.Name.Equals(\"Furion\")); // 示例四 (判断 name 是否有值,如果 name 是空的则不会执行 u => u.Id > 10 && u.Name.Equals(\"Furion\"),如果 name 有值就会执行 u => u.Id > 10 && u.Name.Equals(\"Furion\")) var persons = repository.Where(!string.IsNullOrEmpty(name), u => u.Id > 10 && u.Name.Equals(\"Furion\")); // 示例五 var persons = repository.Where(!string.IsNullOrEmpty(name), u => u.Id > 10) .Where(age > 18, u => u.Name.Contains(\"百小僧\")) .Where(u => u.Age > 18); // 示例六 (在一个 where 里用逗号分隔是 \"或者\",Name==\"Furion\" or Name == \"百小僧\" or Name == \"MonkSoul\") var persons = repository.Where(u => u.Name == \"Furion\", u => u.Name == \"百小僧\", u => u.Name == \"MonkSoul\"); // 示例七 var persons = repository.Where(u => u.Id > 10).Where(u => u.Name.Equals(\"Furion\")) .Where(age > 18, u => u.Name.Contains(\"百小僧\")) .Where(u => u.Name == \"Furion\", u => u.Name == \"百小僧\", u => u.Name == \"MonkSoul\"); // 示例八 var persons = repository.Where((age > 18, u => u.Name == \"Furion\"), (!string.IsNullOrEmpty(name), u => u.Id > 10)); // 示例九 var persons = repository.Where(u => u.Id > 10).Where(u => u.Name.Equals(\"Furion\")) .Where(age > 18, u => u.Name.Contains(\"百小僧\")) .Where(u => u.Name == \"Furion\", u => u.Name == \"百小僧\", u => u.Name == \"MonkSoul\") .Where((age > 18, u => u.Name == \"Furion\"), (!string.IsNullOrEmpty(name), u => u.Id > 10)); // 示例十 var persons = repository.Entities.Where(u => u.Id > 10) .Where(age > 18, u => u.Name.Contains(\"百小僧\")); // 示例十一 var persons = repository.DetachedEntities.Where(u => u.Id > 20); // 示例十二 var persons = repository.AsQueryable(u => u.Id > 20).Where(u => u.Name == \"Furion\");","s":"9.10.4 根据条件查询所有数据","u":"/docs/dbcontext-query","h":"#9104-根据条件查询所有数据","p":952},{"i":962,"t":"// ==== 同步操作 ==== // 示例一 var persons = repository.Where(u => u.Id > 10).ToPagedList(); // 示例二 var persons = repository.Where(u => u.Id > 10).ToPagedList(1, 10); // ==== 异步操作 ==== // 示例一 var persons = await repository.Where(u => u.Id > 10).ToPagedListAsync(); // 示例二 var persons = await repository.Where(u => u.Id > 10).ToPagedListAsync(1, 10);","s":"9.10.5 分页查询","u":"/docs/dbcontext-query","h":"#9105-分页查询","p":952},{"i":965,"t":"// ==== 同步操作 ==== // 示例一 var isExists = repository.Any(); // 示例二 var isExists = repository.Any(u => u.Id > 10); // 示例三 var isExists = repository.Entities.Any(); // 示例四 var isExists = repository.DetachedEntities.Any(u => u.Id > 10); // 示例五 var isExists = repository.Where(u => u.Id > 10).Any(); // ==== 异步操作 ==== // 示例一 var isExists = await repository.AnyAsync(); // 示例二 var isExists = await repository.AnyAsync(u => u.Id > 10); // 示例三 var isExists = await repository.Entities.AnyAsync(); // 示例四 var isExists = await repository.DetachedEntities.AnyAsync(u => u.Id > 10); // 示例五 var isExists = await repository.Where(u => u.Id > 10).AnyAsync();","s":"9.10.6.1 查看记录是否存在","u":"/docs/dbcontext-query","h":"#91061-查看记录是否存在","p":952},{"i":967,"t":"// ==== 同步操作 ==== // 示例一 var count = repository.Count(); // 示例二 var count = repository.Count(u => u.Id > 10); // 示例三 var count = repository.Entities.Count(u => u.Id > 10); // 示例四 var count = repository.Entities.DetachedEntities.Count(); // 示例五 var count = repository.Where(u => u.Id > 10).Count(); // ==== 异步操作 ==== // 示例一 var count = await repository.CountAsync(); // 示例二 var count = await repository.CountAsync(u => u.Id > 10); // 示例三 var count = await repository.Entities.CountAsync(u => u.Id > 10); // 示例四 var count = await repository.Entities.DetachedEntities.CountAsync(); // 示例五 var count = await repository.Where(u => u.Id > 10).CountAsync();","s":"9.10.6.2 查询记录数","u":"/docs/dbcontext-query","h":"#91062-查询记录数","p":952},{"i":969,"t":"// ==== 同步操作 ==== // 示例一 var entity = repository.Max(); // 示例二 var value = repository.Max(u => u.Id); // 示例三 var entity = repository.Entities.Max(); // 示例四 var value = repository.Entities.DetachedEntities.Max(u => u.Age); // 示例五 var value = repository.Where(u => u.Id > 10).Max(u => u.Age); // ==== 异步操作 ==== // 示例一 var entity = await repository.MaxAsync(); // 示例二 var value = await repository.MaxAsync(u => u.Id); // 示例三 var entity = await repository.Entities.MaxAsync(); // 示例四 var value = await repository.Entities.DetachedEntities.MaxAsync(u => u.Age); // 示例五 var value = await repository.Where(u => u.Id > 10).MaxAsync(u => u.Age);","s":"9.10.6.3 查询最大值","u":"/docs/dbcontext-query","h":"#91063-查询最大值","p":952},{"i":971,"t":"// ==== 同步操作 ==== // 示例一 var entity = repository.Min(); // 示例二 var value = repository.Min(u => u.Id); // 示例三 var entity = repository.Entities.Min(); // 示例四 var value = repository.Entities.DetachedEntities.Min(u => u.Age); // 示例五 var value = repository.Where(u => u.Id > 10).Min(u => u.Age); // ==== 异步操作 ==== // 示例一 var entity = await repository.MinAsync(); // 示例二 var value = await repository.MinAsync(u => u.Id); // 示例三 var entity = await repository.Entities.MinAsync(); // 示例四 var value = await repository.Entities.DetachedEntities.MinAsync(u => u.Age); // 示例五 var value = await repository.Where(u => u.Id > 10).MinAsync(u => u.Age);","s":"9.10.6.4 查询最小值","u":"/docs/dbcontext-query","h":"#91064-查询最小值","p":952},{"i":973,"t":"// ==== 同步操作 ==== // 示例一 var sum = repository.Entities.Sum(u => u.Cost); // 示例二 var sum = repository.AsQueryable().Sum(u => u.Cost); // 示例三 var sum = repository.DetachedEntities.Sum(u => u.Cost); // ==== 异步操作 ==== // 示例一 var sum = await repository.Entities.SumAsync(u => u.Cost); // 示例二 var sum = await repository.AsQueryable().SumAsync(u => u.Cost); // 示例三 var sum = await repository.DetachedEntities.SumAsync(u => u.Cost);","s":"9.10.6.5 求和查询","u":"/docs/dbcontext-query","h":"#91065-求和查询","p":952},{"i":975,"t":"// ==== 同步操作 ==== // 示例一 var sum = repository.Entities.Average(u => u.Cost); // 示例二 var sum = repository.AsQueryable().Average(u => u.Cost); // 示例三 var sum = repository.DetachedEntities.Average(u => u.Cost); // ==== 异步操作 ==== // 示例一 var sum = await repository.Entities.AverageAsync(u => u.Cost); // 示例二 var sum = await repository.AsQueryable().AverageAsync(u => u.Cost); // 示例三 var sum = await repository.DetachedEntities.AverageAsync(u => u.Cost);","s":"9.10.6.6 求平均值查询","u":"/docs/dbcontext-query","h":"#91066-求平均值查询","p":952},{"i":977,"t":"var starDate = DateTime.Parse(\"2020-09-10\"); var endDate = DateTime.Parse(\"2020-09-10\"); var query = repository.Where(u => u.CreatedDt >= starDate && u.CreatedDt <= endDate);","s":"9.10.6.7 时间查询","u":"/docs/dbcontext-query","h":"#91067-时间查询","p":952},{"i":979,"t":"// 示例一 repository.Where(u => u.Name.StartsWith(\"Furion\")); // 示例二 _testRepository.Where(u => u.Name.EndsWith(\"Furion\")); // 示例三 _testRepository.Where(u => u.Name.Contains(\"Furion\"));","s":"9.10.6.8 模糊查询","u":"/docs/dbcontext-query","h":"#91068-模糊查询","p":952},{"i":981,"t":"数据库中的 Case When 实际上对应的是我们程序中的 三元表达式 ,也就是使用 三元表达式 即可自动生成 Case When 语句。","s":"9.10.6.9 Case When","u":"/docs/dbcontext-query","h":"#91069-case-when","p":952},{"i":983,"t":"与我们交流 给 Furion 提 Issue。","s":"9.10.7 反馈与建议","u":"/docs/dbcontext-query","h":"#9107-反馈与建议","p":952},{"i":986,"t":"在领域层和数据映射层的中介,使用类似集合的接口来存取领域对象,实际上,仓储被用于领域对象在数据库上的操作(实体 Entity 和值对象 Value types)。一般来说,我们针对不同的实体(或聚合根 Aggregate Root)会创建相对应的仓储。 简单来说,仓储就是数据存取操作的载体,但不限定于数据库。","s":"9.4.1 什么是仓储","u":"/docs/dbcontext-repository","h":"#941-什么是仓储","p":984},{"i":988,"t":"Furion 框架内置了一个数据库操作的仓储,方便大家拓展和集成: 关于依赖注入说明 目前能够被依赖注入解析服务的仓储有: IRepository IRepository IRepository ISqlRepository ISqlRepository IMSRepository IMSRepository IMSRepository IDbRepository 还有两个私有仓储,也是所有仓储的基类(用于高级自定义开发) IPrivateRepository:所有实体仓储的基类 IPrivateSqlRepository:所有数据库操作的基类 除此之后的所有仓储只能通过 rep.Constraint() 进行约束创建,如,只读仓储: var readRepository = rep.Constraint>();","s":"9.4.2 内置仓储","u":"/docs/dbcontext-repository","h":"#942-内置仓储","p":984},{"i":990,"t":"IRepository:默认非泛型仓储接口,支持切换到任何仓储 EFCoreRepository:默认非泛型仓储实现","s":"9.4.2.1 非泛型超级仓储","u":"/docs/dbcontext-repository","h":"#9421-非泛型超级仓储","p":984},{"i":992,"t":"IRepository:默认数据库实体仓储接口 EFCoreRepository:默认数据库实体仓储实现","s":"9.4.2.2 泛型实体仓储","u":"/docs/dbcontext-repository","h":"#9422-泛型实体仓储","p":984},{"i":994,"t":"IRepository:任意数据库的实体仓储接口 EFCoreRepository:任意数据库的实体仓储实现","s":"9.4.2.3 泛型多数据库实体仓储","u":"/docs/dbcontext-repository","h":"#9423-泛型多数据库实体仓储","p":984},{"i":996,"t":"ISqlRepository:默认数据库 Sql 操作仓储接口 SqlRepository:默认数据库 Sql 操作仓储实现","s":"9.4.2.4 Sql 操作仓储","u":"/docs/dbcontext-repository","h":"#9424-sql-操作仓储","p":984},{"i":998,"t":"ISqlRepository:任意数据库的 Sql 操作仓储接口 SqlRepository:任意数据库的 Sql 操作仓储实现","s":"9.4.2.5 多数据库 Sql 操作仓储","u":"/docs/dbcontext-repository","h":"#9425-多数据库-sql-操作仓储","p":984},{"i":1000,"t":"IReadableRepository:默认数据库只读实体仓储接口 IReadableRepository:多数据库只读实体仓储实现","s":"9.4.2.6 只读实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#9426-只读实体仓储支持多库","p":984},{"i":1002,"t":"IWritableRepository:默认数据库只写实体仓储接口 IWritableRepository:多数据库只写实体仓储实现","s":"9.4.2.7 只写实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#9427-只写实体仓储支持多库","p":984},{"i":1004,"t":"IInsertableRepository:默认数据库只允许新增的实体仓储接口 IInsertableRepository:多数据库只允许新增的实体仓储实现","s":"9.4.2.8 只允许新增实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#9428-只允许新增实体仓储支持多库","p":984},{"i":1006,"t":"IUpdateableRepository:默认数据库只允许更新的实体仓储接口 IUpdateableRepository:多数据库只允许更新的实体仓储实现","s":"9.4.2.9 只允许更新实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#9429-只允许更新实体仓储支持多库","p":984},{"i":1008,"t":"IDeletableRepository:默认数据库只允许删除的实体仓储接口 IDeletableRepository:多数据库只允许删除的实体仓储实现","s":"9.4.2.10 只允许删除实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#94210-只允许删除实体仓储支持多库","p":984},{"i":1010,"t":"功能移除声明 该功能在 Furion 2.5.1 + 版本中已移除。此操作让很多不了解 EFCore 的开发者产生了很大的误解,不知何时新增或何时更新,故移除此功能。 IOperableRepository:默认数据库只允许拓展操作实体仓储接口 IOperableRepository:多数据库只允许拓展操作实体仓储实现","s":"9.4.2.11 只允许拓展操作实体仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#94211-只允许拓展操作实体仓储支持多库","p":984},{"i":1012,"t":"ISqlReaderRepository:默认数据库只允许 Sql 查询仓储接口 ISqlReaderRepository:多数据库只允许 Sql 查询仓储实现","s":"9.4.2.12 只允许 Sql 查询仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#94212-只允许-sql-查询仓储支持多库","p":984},{"i":1014,"t":"ISqlExecutableRepository:默认数据库只允许 Sql 非查询仓储接口 ISqlExecutableRepository:多数据库只允许 Sql 非查询仓储实现","s":"9.4.2.13 只允许 Sql 非查询仓储(支持多库)","u":"/docs/dbcontext-repository","h":"#94213-只允许-sql-非查询仓储支持多库","p":984},{"i":1016,"t":"IMSRepository:最多支持 一主 7 从 仓储","s":"9.4.2.14 读写分离仓储","u":"/docs/dbcontext-repository","h":"#94214-读写分离仓储","p":984},{"i":1018,"t":"IDbRepository:初始化特定数据库仓储","s":"9.4.2.15 定位器仓储","u":"/docs/dbcontext-repository","h":"#94215-定位器仓储","p":984},{"i":1020,"t":"Furion 提供了非常多的方式创建仓储,目的是为了让大家可以在不同的场景中使用。","s":"9.4.3 仓储使用","u":"/docs/dbcontext-repository","h":"#943-仓储使用","p":984},{"i":1022,"t":"private readonly IRepository _personRepository; public FurionService(IRepository personRepository) { _personRepository = personRepository; }","s":"9.4.3.1 构造函数注入","u":"/docs/dbcontext-repository","h":"#9431-构造函数注入","p":984},{"i":1024,"t":"public async Task> GetAll([FromServices] IRepository repository, string keyword) { var persons = await repository.AsQueryable().ToListAsync(); return persons.Adapt>(); }","s":"9.4.3.2 方法参数注入","u":"/docs/dbcontext-repository","h":"#9432-方法参数注入","p":984},{"i":1026,"t":"// 非泛型仓储 var repository = Db.GetRepository(); // 泛型仓储 var repository = Db.GetRepository(); // Sql 仓储 var sqlRepository = Db.GetSqlRepository(); 特别说明 不管采用哪种方式,Furion 都保证了仓储一次请求唯一性。同时 Db.GetRepository() 方式支持任何静态类中使用。","s":"9.4.3.3 Db.GetRepository 获取","u":"/docs/dbcontext-repository","h":"#9433-dbgetrepository-获取","p":984},{"i":1029,"t":"var userRepository = personRepository.Change();","s":"9.4.4.1 动态切换实体仓储","u":"/docs/dbcontext-repository","h":"#9441-动态切换实体仓储","p":984},{"i":1031,"t":"比如,读写分离/主从库仓储: // 只读仓储 var readRepository = personRepository.Constraint>(); // 只写仓储 var writeRepository = personRepository.Constraint>(); 小知识 .Constraint 支持切换任何仓储类型。","s":"9.4.4.2 动态切换仓储类型","u":"/docs/dbcontext-repository","h":"#9442-动态切换仓储类型","p":984},{"i":1033,"t":"var sqlRepository = repository.Sql();","s":"9.4.4.3 获取 Sql 操作仓储","u":"/docs/dbcontext-repository","h":"#9443-获取-sql-操作仓储","p":984},{"i":1035,"t":"Furion 通过 DbContextLocator 数据库上下文定位器实现多种数据库操作,可以随意切换数据库","s":"9.4.5 多数据库操作","u":"/docs/dbcontext-repository","h":"#945-多数据库操作","p":984},{"i":1037,"t":"动态切换数据库​ // 切换到 MSSQL 操作 Person表 var mssqlRepository = repository.Change(); // 切换到 MySql 操作 Person表 var mysqlRepository = repository.Change(); // 切换到 Sqlite 操作 Person表 var sqliteRepository = repository.Change(); // 其他更多数据库一样的操作 另外任何仓储或实体配置都支持多个数据库同时操作​ 仓储方式 IRepository mssqlRepository ISqlRepository mssqlRepository; 动态 sql 方式 \"select * from person\".Change().SqlQuery(); 实体配置方式 public class User:Entity { } Sql 代理方式 [SqlFunction(\"funcName\", DbContextLocator = typeof(MySqlDbContextLocator))] int GetAge(int id); Linq 中方式 [QueryableFunction(\"funcName\",\"dbo\", DbContextLocator = typeof(MySqlDbContextLocator))] string GetName()=> throw Oops.Oh(\"不支持该数据库操作\");","s":"9.4.5.1 动态切换多个数据库","u":"/docs/dbcontext-repository","h":"#9451-动态切换多个数据库","p":984},{"i":1039,"t":"由于 DbContext 默认注册为 Scoped 生存周期,所以在后台任务中使用 IServiceScopeFactory 获取所有服务,如: public class JobService : BackgroundService { // 日志对象 private readonly ILogger _logger; // 服务工厂 private readonly IServiceScopeFactory _scopeFactory; public JobService(ILogger logger , IServiceScopeFactory scopeFactory) { _logger = logger; _scopeFactory = scopeFactory; } protected override Task ExecuteAsync(CancellationToken stoppingToken) { _logger.LogInformation(\"写日志~~\"); using (var scope = _scopeFactory.CreateScope()) { var services = scope.ServiceProvider; // 获取数据库上下文 var dbContext = Db.GetDbContext(services); // 获取仓储 var respository = Db.GetRepository(services); // 解析其他服务 var otherService = services.GetService(); } return Task.CompletedTask; } } 数据库操作注意 如果作用域中对数据库有任何变更操作,需手动调用 SaveChanges 或带 Now 结尾的方法。也可以使用 Scoped.CreateUow(handler) 代替。","s":"9.4.6 在后台任务中使用","u":"/docs/dbcontext-repository","h":"#946-在后台任务中使用","p":984},{"i":1041,"t":"有些时候我们需要自定义仓储,拓展现有的仓储功能,可参考以下代码(含定位器仓储和默认仓储实现) /// /// 自定义仓储接口 /// /// /// public interface IMyRepository : IPrivateRepository where TEntity : class, IPrivateEntity, new() where TDbContextLocator : class, IDbContextLocator { /// /// 自定义方法 /// void MyMethod(); } /// /// 自定义仓储实现类 /// /// /// public class MyRepository : PrivateRepository, IMyRepository, IScoped where TEntity : class, IPrivateEntity, new() where TDbContextLocator : class, IDbContextLocator { /// /// 实现基类构造函数 /// /// public MyRepository(IServiceProvider serviceProvider) : base(typeof(TDbContextLocator), serviceProvider) { } /// /// 自定义方法 /// public void MyMethod() { throw new System.NotImplementedException(); } } /// /// 默认数据库自定义仓储接口 /// /// public interface IMyRepository : IMyRepository where TEntity : class, IPrivateEntity, new() { } /// /// 默认数据库自定义仓储实现 /// /// public class MyRepository : MyRepository, IMyRepository, IScoped where TEntity : class, IPrivateEntity, new() { public MyRepository(IServiceProvider serviceProvider) : base(serviceProvider) { } }","s":"9.4.7 自定义仓储","u":"/docs/dbcontext-repository","h":"#947-自定义仓储","p":984},{"i":1043,"t":"与我们交流 给 Furion 提 Issue。","s":"9.4.8 反馈与建议","u":"/docs/dbcontext-repository","h":"#948-反馈与建议","p":984},{"i":1046,"t":"其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。","s":"9.27.1 读写分离","u":"/docs/dbcontext-read-write","h":"#9271-读写分离","p":1044},{"i":1048,"t":"大多数互联网业务,往往读多写少,这时候,数据库的读会首先成为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用“分组架构”(读写分离架构)。 用一句话概括,读写分离是用来解决数据库的读性能瓶颈的。","s":"9.27.1.1 解决了什么问题","u":"/docs/dbcontext-read-write","h":"#92711-解决了什么问题","p":1044},{"i":1050,"t":"数据库连接池要进行区分,哪些是读连接池,哪个是写连接池,研发的难度会增加; 为了保证高可用,读连接池要能够实现故障自动转移; 主从的一致性问题需要考虑。","s":"9.27.1.2 注意事项","u":"/docs/dbcontext-read-write","h":"#92712-注意事项","p":1044},{"i":1052,"t":"Furion 在数据库模块设计之初,就考虑了读写分离这种情况,所以从底层就支持动态切换数据库上下文及读写操作方法约束。 读写分离操作主要使用 IMSRepository 仓储,该仓储已经为开发者提供方便的操作调用。当然也可以不使用该仓储。 下面就给大家演示如何读写多库读写操作。","s":"9.27.2 如何实现","u":"/docs/dbcontext-read-write","h":"#9272-如何实现","p":1044},{"i":1054,"t":"using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { /// /// 主库数据库上下文 /// [AppDbContext(\"MasterConnectionString\")] public class MasterDbContext : AppDbContext { public MasterDbContext(DbContextOptions options) : base(options) { } } } 数据库连接字符串: { \"ConnectionStrings\": { \"MasterConnectionString\": \"Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;\" } }","s":"9.27.2.1 创建 主库 数据库上下文","u":"/docs/dbcontext-read-write","h":"#92721-创建-主库-数据库上下文","p":1044},{"i":1056,"t":"using Furion.Core; using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { /// /// 从库数据库上下文 /// [AppDbContext(\"SlaveConnectionString\")] public class SlaveDbContext : AppDbContext { public SlaveDbContext(DbContextOptions options) : base(options) { } } } 特别注意 多数据库操作除了默认数据库无需自定义 数据库上下文定位器,其他数据库都需要有数据库上下文定位器。如 SlaveDbContextLocator 从库数据库上下文定位器: using Furion.DatabaseAccessor; namespace Furion.Core { /// /// 从库数据库上下文定位器 /// public class SlaveDbContextLocator : IDbContextLocator { } } 数据库连接字符串: { \"ConnectionStrings\": { \"SlaveConnectionString\": \"Server=localhost;Database=FurSlave;User=sa;Password=000000;MultipleActiveResultSets=True;\" } }","s":"9.27.2.2 创建 从库 数据库上下文","u":"/docs/dbcontext-read-write","h":"#92722-创建-从库-数据库上下文","p":1044},{"i":1058,"t":"using Furion.Core; using Microsoft.Extensions.DependencyInjection; namespace Furion.EntityFramework.Core { [AppStartup(600)] public sealed class FurEntityFrameworkCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddDatabaseAccessor(options => { services.AddDbPool(); services.AddDbPool(); }); } } }","s":"9.27.2.3 注册 主从库 数据库上下文","u":"/docs/dbcontext-read-write","h":"#92723-注册-主从库-数据库上下文","p":1044},{"i":1060,"t":"由于 主从库 具有相同的数据库结构,所以实体也必须声明 主从库: using Furion.DatabaseAccessor; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Furion.Core { public class Person : IEntity { /// /// 主键Id /// [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } /// /// 名称 /// public string Name { get; set; } /// /// 年龄 /// public int Age { get; set; } } }","s":"9.27.2.4 创建 Person 实体","u":"/docs/dbcontext-read-write","h":"#92724-创建-person-实体","p":1044},{"i":1062,"t":"创建主库数据库表: Add-Migration v0.0.1 -Context MasterDbContext Update-Database -Context MasterDbContext 创建从库数据库表: Add-Migration v0.0.1 -Context SlaveDbContext Update-Database -Context SlaveDbContext","s":"9.27.2.5 将 Person 转换成数据库表","u":"/docs/dbcontext-read-write","h":"#92725-将-person-转换成数据库表","p":1044},{"i":1064,"t":"using Furion.Core; using Furion.DatabaseAccessor; using Furion.DynamicApiController; using System.Collections.Generic; namespace Furion.Application { public class PersonService : IDynamicApiController { /// /// 可调配仓储(读写分离) /// private readonly IMSRepository _msRepository; /// /// 构造函数初始化 /// /// public PersonService(IMSRepository msRepository) { _msRepository = msRepository; } /// /// 新增走主库 /// /// /// public void Insert(Person person) { _msRepository.Master().Insert(person); } /// /// 查询走从库 /// /// public List Get() { return _msRepository.Slave1().AsEnumerable().ToList(); } } }","s":"9.27.2.6 固定主从库使用例子","u":"/docs/dbcontext-read-write","h":"#92726-固定主从库使用例子","p":1044},{"i":1066,"t":"在 Furion 2.4.1 + 版本新增了 IMSRepository 和 IMSRepository 仓储类型,可以获取随机仓储或自定义仓储。使用例子如下: 配置 主库 [AppDbContext] 特性的 SlaveDbContextLocators 属性,可通过构造函数最后参数传入,如: using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite, typeof(从库定位器1), typeof(从库定位器2), typeof(从库定位器3))] public class MasterDbContext : AppDbContext { public MasterDbContext(DbContextOptions options) : base(options) { } } } 使用 IMSRepository 或 IMSRepository using Furion.Core; using Furion.DatabaseAccessor; using Furion.DynamicApiController; using System.Collections.Generic; namespace Furion.Application { public class PersonService : IDynamicApiController { /// /// 可调配仓储(读写分离) /// private readonly IMSRepository _msRepository; // 不指定定位器,默认是 MasterDbContextLocator /// /// 构造函数初始化 /// /// public PersonService(IMSRepository msRepository) { _msRepository = msRepository; } /// /// 新增走主库 /// /// /// public void Insert(Person person) { _msRepository.Master().Insert(person); } /// /// 随机从库 /// /// public List Get() { return _msRepository.Slave().AsEnumerable().ToList(); } /// /// 自定义从库 /// /// public List Get() { return _msRepository.Slave(() => { // 这里写你的逻辑返回从库定位器 return 你的从库定位器; }).AsEnumerable().ToList(); } } } 特别说明 IMSRepository 不带泛型默认指的是 IMSRepository,如需泛型版本,则使用 IMSRepository<定位器>","s":"9.27.2.7 随机或 自定义返回从库 ✨","u":"/docs/dbcontext-read-write","h":"#92727-随机或-自定义返回从库-","p":1044},{"i":1068,"t":"主从复制:是一种数据备份的方案。 简单来说,是使用两个或两个以上相同的数据库,将一个数据库当做主数据库,而另一个数据库当做从数据库。在主数据库中进行相应操作时,从数据库记录下所有主数据库的操作,使其二者一模一样。","s":"9.27.3 主从复制","u":"/docs/dbcontext-read-write","h":"#9273-主从复制","p":1044},{"i":1071,"t":"所谓的同步复制,意思是 Master 的变化,必须等待 Slave-1,Slave-2,...,Slave-n 完成后才能返回。 这样,显然不可取,比如,在 Web 前端页面上,用户增加了条记录,需要等待很长时间。","s":"9.27.4.1 同步复制","u":"/docs/dbcontext-read-write","h":"#92741-同步复制","p":1044},{"i":1073,"t":"如同 AJAX 请求一样。Master 只需要完成自己的数据库操作即可。至于 Slaves 是否收到二进制日志,是否完成操作,不用关心。(推荐方式)","s":"9.27.4.2 异步复制","u":"/docs/dbcontext-read-write","h":"#92742-异步复制","p":1044},{"i":1075,"t":"Master 只保证 Slaves 中的一个操作成功,就返回,其他 Slave 不管。 下面将使用 SqlServer 简单配置主从复制功能。","s":"9.27.4.3 半同步复制","u":"/docs/dbcontext-read-write","h":"#92743-半同步复制","p":1044},{"i":1082,"t":"具体选择何种发布类型,视具体业务场景而定。","s":"9.27.5.5 快照发布","u":"/docs/dbcontext-read-write","h":"#92755-快照发布","p":1044},{"i":1097,"t":"特别特性 主从复制有一定迟延性,所以系统设计要有一定“容忍性\"。","s":"9.27.8 查看主从复制结果","u":"/docs/dbcontext-read-write","h":"#9278-查看主从复制结果","p":1044},{"i":1099,"t":"与我们交流 给 Furion 提 Issue。","s":"9.27.9 反馈与建议","u":"/docs/dbcontext-read-write","h":"#9279-反馈与建议","p":1044},{"i":1101,"t":"温馨提示 推荐使用 《9.17 Sql 高级代理》代替本章节功能。Sql 高级代理 能够提供更容易且更易维护的方式。","s":"9.13 存储过程操作","u":"/docs/dbcontext-proc","h":"","p":1100},{"i":1103,"t":"引用百度百科: 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的 SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。 简单来说,存储过程就是关系型数据库中(Sqlite 除外)中编写逻辑的函数/方法,通过这种方式,可以将 sql 编译缓存起来,大大提高存储过程的执行效率。 这里不讨论存储过程的优缺点。","s":"9.13.1 关于存储过程","u":"/docs/dbcontext-proc","h":"#9131-关于存储过程","p":1100},{"i":1105,"t":"SqlServer Sqlite Cosmos InMemoryDatabase MySql PostgreSQL Oracle Firebird Dm ✔ ✔ ✔ ✔ ✔ ✔ ✔","s":"9.13.2.0 支持存储过程的数据库","u":"/docs/dbcontext-proc","h":"#91320-支持存储过程的数据库","p":1100},{"i":1107,"t":"Furion 框架中提供了多种存储过程操作方式: ISqlRepository:Sql 操作仓储,可通过 依赖注入 ISqlDispatchProxy:Sql 代理方式(高级用法,推荐) 通过任意实体仓储操作:personRepository.SqlProcedureQuery(procName) 通过字符串拓展方法:procName.SqlProcedureQuery() 通过 repository.Sql().SqlProcedureQuery() 方式","s":"9.13.2 存储过程使用","u":"/docs/dbcontext-proc","h":"#9132-存储过程使用","p":1100},{"i":1109,"t":"ISqlRepository ISqlDispatchProxy 实体仓储方式 字符串拓展方式 using Furion.DatabaseAccessor; using Furion.DynamicApiController; namespace Furion.Application { [DynamicApiController] public class SqlService { private ISqlRepository _sqlRepository; public SqlService(ISqlRepository sqlRepository) { _sqlRepository = sqlRepository; } } } using Furion.Core; using Furion.DatabaseAccessor; using System.Collections.Generic; namespace Furion.Application { public interface ISqlExecuteProxy : ISqlDispatchProxy { [SqlProcedure(\"proc_GetPersons\")] List GetPersons(string keyword); } } using Furion.DatabaseAccessor; using Furion.DynamicApiController; namespace Furion.Application { [DynamicApiController] public class SqlService { private ISqlExecuteProxy _sqlExecuteProxy; public SqlService(ISqlExecuteProxy sqlExecuteProxy) { _sqlExecuteProxy = sqlExecuteProxy; } } } var persons = personRepository.SqlProcedureQuery(\"proc_GetPersons\"); var persons = \"proc_GetPersons\".SqlProcedureQuery();","s":"9.13.2.1 初始化方式","u":"/docs/dbcontext-proc","h":"#91321-初始化方式","p":1100},{"i":1111,"t":"// ISqlRepository 方法 var dataTable = _sqlRepository.SqlProcedureQuery(\"proc_GetPersons\"); // ISqlDispatchProxy 方式 var dataTable = _sqlExecuteProxy.GetPersons(); // 推荐方式 // 实体仓储方式 var dataTable = _personRepository.SqlProcedureQuery(\"proc_GetPersons\"); // IRepository 非泛型方式 var dataTable = _repository.Sql().SqlProcedureQuery(\"proc_GetPersons\"); // 变态懒人方式,直接通过存储过程名执行 var dataTable = \"proc_GetPersons\".SqlProcedureQuery(); 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.13.2.2 返回 DataTable","u":"/docs/dbcontext-proc","h":"#91322-返回-datatable","p":1100},{"i":1113,"t":"// ISqlRepository 方法 var dataSet = _sqlRepository.SqlProcedureQueries(\"proc_GetPersons\"); // ISqlDispatchProxy 方式 var dataSet = _sqlExecuteProxy.GetPersons(); // 推荐方式 // 实体仓储方式 var dataSet = _personRepository.SqlProcedureQueries(\"proc_GetPersons\"); // IRepository 非泛型方式 var dataSet = _repository.Sql().SqlProcedureQueries(\"proc_GetPersons\"); // 变态懒人方式,直接通过存储过程名执行 var dataSet = \"proc_GetPersons\".SqlProcedureQueries(); 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.13.2.3 返回 DataSet","u":"/docs/dbcontext-proc","h":"#91323-返回-dataset","p":1100},{"i":1115,"t":"// ISqlRepository 方法 var list = _sqlRepository.SqlProcedureQuery(\"proc_GetPersons\"); // ISqlDispatchProxy 方式 var list = _sqlExecuteProxy.GetPersons(); // 推荐方式 // 实体仓储方式 var list = _personRepository.SqlProcedureQuery(\"proc_GetPersons\"); // IRepository 非泛型方式 var list = _repository.Sql().SqlProcedureQuery(\"proc_GetPersons\"); // 变态懒人方式,直接通过存储过程名执行 var list = \"proc_GetPersons\".SqlProcedureQuery(); 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.13.2.4 返回 List","u":"/docs/dbcontext-proc","h":"#91324-返回-listt","p":1100},{"i":1117,"t":"Furion 框架大大利用了 Tuple 的特性,将返回多个结果集转成 Tuple 类型 // ISqlRepository 方法 // 返回一个结果集 var list1 = _sqlRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回两个结果集 var (list1, list2) = _sqlRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回三个结果集 var (list1, list2, list3) = _sqlRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回四个结果集 var (list1, list2, list3, list4) = _sqlRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回五个结果集 var (list1, list2, list3, list4, list5) = _sqlRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回六个结果集 var (list1, list2, list3, list4, list5, list6) = _sqlRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回七个结果集 var (list1, list2, list3, list4, list5, list6, list7) = _sqlRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回八个结果集 var (list1, list2, list3, list4, list5, list6, list7, list8) = _sqlRepository.SqlProcedureQueries(\"proc_GetPersons\"); // ================================== // ISqlDispatchProxy 方式,推荐方式,自动处理多个结果集 // 返回一个结果集 var list1 = _sqlRepository.GetDatas(); // 返回两个结果集 var (list1, list2) = _sqlRepository.GetDatas(); // 返回三个结果集 var (list1, list2, list3) = _sqlRepository.GetDatas(); // 返回四个结果集 var (list1, list2, list3, list4) = _sqlRepository.GetDatas(); // 返回五个结果集 var (list1, list2, list3, list4, list5) = _sqlRepository.GetDatas(); // 返回六个结果集 var (list1, list2, list3, list4, list5, list6) = _sqlRepository.GetDatas(); // 返回七个结果集 var (list1, list2, list3, list4, list5, list6, list7) = _sqlRepository.GetDatas(); // 返回八个结果集 var (list1, list2, list3, list4, list5, list6, list7, list8) = _sqlRepository.GetDatas(); // ================================== // 实体仓储方式 // 返回一个结果集 var list1 = _personRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回两个结果集 var (list1, list2) = _personRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回三个结果集 var (list1, list2, list3) = _personRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回四个结果集 var (list1, list2, list3, list4) = _personRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回五个结果集 var (list1, list2, list3, list4, list5) = _personRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回六个结果集 var (list1, list2, list3, list4, list5, list6) = _personRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回七个结果集 var (list1, list2, list3, list4, list5, list6, list7) = _personRepository.SqlProcedureQueries(\"proc_GetPersons\"); // 返回八个结果集 var (list1, list2, list3, list4, list5, list6, list7, list8) = _personRepository.SqlProcedureQueries(\"proc_GetPersons\"); // ================================== // IRepository 非泛型方式 // 返回一个结果集 var list1 = _repository.Sql().SqlProcedureQueries(\"proc_GetPersons\"); // 返回两个结果集 var (list1, list2) = _repository.Sql().SqlProcedureQueries(\"proc_GetPersons\"); // 返回三个结果集 var (list1, list2, list3) = _repository.Sql().SqlProcedureQueries(\"proc_GetPersons\"); // 返回四个结果集 var (list1, list2, list3, list4) = _repository.Sql().SqlProcedureQueries(\"proc_GetPersons\"); // 返回五个结果集 var (list1, list2, list3, list4, list5) = _repository.Sql().SqlProcedureQueries(\"proc_GetPersons\"); // 返回六个结果集 var (list1, list2, list3, list4, list5, list6) = _repository.Sql().SqlProcedureQueries(\"proc_GetPersons\"); // 返回七个结果集 var (list1, list2, list3, list4, list5, list6, list7) = _repository.Sql().SqlProcedureQueries(\"proc_GetPersons\"); // 返回八个结果集 var (list1, list2, list3, list4, list5, list6, list7, list8) = _repository.Sql().SqlProcedureQueries(\"proc_GetPersons\"); // ================================== // 变态懒人方式,直接通过存储过程名执行 // 返回一个结果集 var list1 = \"proc_GetPersons\".SqlProcedureQueries(); // 返回两个结果集 var (list1, list2) = \"proc_GetPersons\".SqlProcedureQueries(); // 返回三个结果集 var (list1, list2, list3) = \"proc_GetPersons\".SqlProcedureQueries(); // 返回四个结果集 var (list1, list2, list3, list4) = \"proc_GetPersons\".SqlProcedureQueries(); // 返回五个结果集 var (list1, list2, list3, list4, list5) = \"proc_GetPersons\".SqlProcedureQueries(); // 返回六个结果集 var (list1, list2, list3, list4, list5, list6) = \"proc_GetPersons\".SqlProcedureQueries(); // 返回七个结果集 var (list1, list2, list3, list4, list5, list6, list7) = \"proc_GetPersons\".SqlProcedureQueries(); // 返回八个结果集 var (list1, list2, list3, list4, list5, list6, list7, list8) = \"proc_GetPersons\".SqlProcedureQueries(); 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.13.2.5 返回 Tuple","u":"/docs/dbcontext-proc","h":"#91325-返回-tuplet1t8","p":1100},{"i":1119,"t":"// ISqlRepository 方法 var value = _sqlRepository.SqlProcedureScalar(\"proc_GetName\"); // ISqlDispatchProxy 方式 var value = _sqlExecuteProxy.GetName(); // 推荐方式 // 实体仓储方式 var value = _personRepository.SqlProcedureScalar(\"proc_GetName\"); // IRepository 非泛型方式 var value = _repository.Sql().SqlProcedureScalar(\"proc_GetName\"); // 变态懒人方式,直接通过存储过程名执行 var value = \"proc_GetName\".SqlProcedureScalar(); 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.13.2.6 返回 单行单列 object","u":"/docs/dbcontext-proc","h":"#91326-返回-单行单列-object","p":1100},{"i":1121,"t":"// ISqlRepository 方法 var value = _sqlRepository.SqlProcedureScalar(\"proc_GetName\"); // ISqlDispatchProxy 方式 var value = _sqlExecuteProxy.GetName(); // 推荐方式 // 实体仓储方式 var value = _personRepository.SqlProcedureScalar(\"proc_GetName\"); // IRepository 非泛型方式 var value = _repository.Sql().SqlProcedureScalar(\"proc_GetName\"); // 变态懒人方式,直接通过存储过程名执行 var value = \"proc_GetName\".SqlProcedureScalar(); 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.13.2.7 返回 单行单列 ","u":"/docs/dbcontext-proc","h":"#91327-返回-单行单列-t","p":1100},{"i":1123,"t":"// ISqlRepository 方法 _sqlRepository.SqlProcedureNonQuery(\"proc_UpdateData\"); // ISqlDispatchProxy 方式 _sqlExecuteProxy.UpdateData(); // 推荐方式 // 实体仓储方式 _personRepository.SqlProcedureNonQuery(\"proc_UpdateData\"); // IRepository 非泛型方式 _repository.Sql().SqlProcedureNonQuery(\"proc_UpdateData\"); // 变态懒人方式,直接通过存储过程名执行 \"proc_UpdateData\".SqlProcedureNonQuery(); 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.13.2.8 执行但无返回","u":"/docs/dbcontext-proc","h":"#91328-执行但无返回","p":1100},{"i":1125,"t":"在存储过程中,有一种例子非常复杂,那就是既有 INPUT 参数,又有 OUTPUT 参数,还有 RETURN 参数,同时还输出 结果集 💥,如: CREATE PROC PROC_Output @Id INT, // 输入参数 @Name NVARCHAR(32) OUTPUT, // 输出参数,还带长度 @Age INT OUTPUT // 输出参数 AS BEGIN SET @Name = 'Furion Output'; // 输出结果集 SELECT * FROM dbo.Test WHERE Id > @Id; // 输出结果集 SELECT TOP 10 * FROM dbo.Test; SET @Age = 27; // 带 RETURN 返回 RETURN 10; END;","s":"9.13.3 执行复杂存储过程","u":"/docs/dbcontext-proc","h":"#9133-执行复杂存储过程","p":1100},{"i":1127,"t":"using Furion.DatabaseAccessor; using System.Data; namespace Furion.Application { public class ProcOutputModel { public int Id { get; set; } // 输入参数 [DbParameter(ParameterDirection.Output, Size = 32)] public string Name { get; set; } // 输出参数 [DbParameter(ParameterDirection.Output)] public int Age { get; set; } // 输出参数 [DbParameter(ParameterDirection.ReturnValue)] public int ReturnValue { get; set; } // 返回值 } }","s":"9.13.3.1 创建参数模型","u":"/docs/dbcontext-proc","h":"#91331-创建参数模型","p":1100},{"i":1129,"t":"DataSet 方式 // ISqlRepository 方法 ProcedureOutputResult result = _sqlRepository.SqlProcedureOutput(\"proc_Complex\", new ProcOutputModel{}); // ISqlDispatchProxy 方式 ProcedureOutputResult result = _sqlExecuteProxy.Complex(new ProcOutputModel{}); // 推荐方式 // 实体仓储方式 ProcedureOutputResult result = _personRepository.SqlProcedureOutput(\"proc_Complex\", new ProcOutputModel{}); // IRepository 非泛型方式 ProcedureOutputResult result = _repository.Sql().SqlProcedureOutput(\"proc_Complex\", new ProcOutputModel{}); // 变态懒人方式,直接通过存储过程名执行 ProcedureOutputResult result = \"proc_Complex\".SqlProcedureOutput(new ProcOutputModel{}); // 获取 OUTPUT 参数值 var outputs = result.OutputValues; // 获取 RETURN 返回值 var reval = result.ReturnValue; // 获取返回结果集 var dataSet = result.Result; Tuple 方式 // ISqlRepository 方法 ProcedureOutputResult<(List, List)> result = _sqlRepository.SqlProcedureOutput<(List, List)>(\"proc_Complex\", new ProcOutputModel{}); // ISqlDispatchProxy 方式 ProcedureOutputResult<(List, List)> result = _sqlExecuteProxy.Complex(new ProcOutputModel{}); // 推荐方式 // 实体仓储方式 ProcedureOutputResult<(List, List)> result = _personRepository.SqlProcedureOutput<(List, List)>(\"proc_Complex\", new ProcOutputModel{}); // IRepository 非泛型方式 ProcedureOutputResult<(List, List)> result = _repository.Sql().SqlProcedureOutput<(List, List)>(\"proc_Complex\", new ProcOutputModel{}); // 变态懒人方式,直接通过存储过程名执行 ProcedureOutputResult<(List, List)> result = \"proc_Complex\".SqlProcedureOutput<(List, List)>(new ProcOutputModel{}); // 获取 OUTPUT 参数值 var outputs = result.OutputValues; // 获取 RETURN 返回值 var reval = result.ReturnValue; // 获取返回结果集 var (list1,list2) = result.Result; 关于异步 Furion 框架每一个数据库操作都支持异步方式,由于篇幅有限,就不列举异步方式了。","s":"9.13.3.2 执行复杂存储过程","u":"/docs/dbcontext-proc","h":"#91332-执行复杂存储过程","p":1100},{"i":1131,"t":"[DbParameter] 特性是用来标注 Sql,函数,存储过程 参数的,可配置属性: Direction:设置参数方向,ParameterDirection 枚举类型,默认 ParameterDirection.Input DbType:设置参数类型,DbType 枚举类型,无默认 Size:设置参数长度的,int 类型 其中 Direction 属性是默认构造函数参数。","s":"9.13.3 关于 [DbParameter]","u":"/docs/dbcontext-proc","h":"#9133-关于-dbparameter","p":1100},{"i":1133,"t":"ProcedureOutputResult 和 ProcedureOutputResult 是复杂存储过程执行返回模型类,有以下属性: OutputValues:多个输出值,ProcedureOutputValue 类型 ReturnValue:返回值,object 类型 Result:结果集,非泛型版本是 DataSet类型,否则是 泛型类型","s":"9.13.4 关于 ProcedureOutputResult","u":"/docs/dbcontext-proc","h":"#9134-关于-procedureoutputresult","p":1100},{"i":1135,"t":"所有 sql 参数都支持四种方式: DbParameter[]:数组类型 new {}:匿名类型 new Class{}:强类型类型(支持复杂存储过程参数) Dictionary 类型","s":"9.13.5 存储过程参数","u":"/docs/dbcontext-proc","h":"#9135-存储过程参数","p":1100},{"i":1137,"t":"与我们交流 给 Furion 提 Issue。","s":"9.13.6 反馈与建议","u":"/docs/dbcontext-proc","h":"#9136-反馈与建议","p":1100},{"i":1139,"t":"特别提醒 一旦定义了种子数据或改变了种子数据,需要重新执行 Add-Migration 和 Update-Database 命令。","s":"9.21 实体种子数据","u":"/docs/dbcontext-seed-data","h":"","p":1138},{"i":1141,"t":"在 Furion 框架中,种子数据通常指的是通过程序为数据库预先设置一些初始化数据,比如我们的数据字典表,我们可能希望在系统构建初期就自动将一些规范化数据保存到数据库中。 如性别:男/女,地区,行业信息等等。","s":"9.21.1 什么是种子数据","u":"/docs/dbcontext-seed-data","h":"#9211-什么是种子数据","p":1138},{"i":1143,"t":"Furion 提供非常灵活方便的 IEntitySeedData 依赖接口可以快速的构建种子数据,支持任何无参构造函数对象类中使用。如我们需要为 Person 表插入初始化数据:","s":"9.21.2 如何配置","u":"/docs/dbcontext-seed-data","h":"#9212-如何配置","p":1138},{"i":1145,"t":"using Furion.DatabaseAccessor; using System; using System.Collections.Generic; namespace Furion.Core { public class Person : EntityBase, IEntitySeedData { public string Name { get; set; } public int Age { get; set; } public string Address { get; set; } // 配置种子数据 public IEnumerable HasData(DbContext dbContext, Type dbContextLocator) { return new List { new Person { Id = 1, Name = \"百小僧\", Address = \"广东省中山市\" }, new Person { Id = 2, Name = \"新生帝\", Address = \"广东省珠海市\" } }; } } } 特别注意 主键 值必须手动插入,因为会自动关闭主键或自增标识检查。","s":"9.21.2.1 在实体定义中使用","u":"/docs/dbcontext-seed-data","h":"#92121-在实体定义中使用","p":1138},{"i":1147,"t":"using Furion.DatabaseAccessor; using System.Collections.Generic; namespace Furion.Application { public class PersonSeedData : IEntitySeedData { // 配置种子数据 public IEnumerable HasData(DbContext dbContext, Type dbContextLocator) { return new List { new Person { Id = 1, Name = \"百小僧\", Address = \"广东省中山市\" }, new Person { Id = 2, Name = \"新生帝\", Address = \"广东省珠海市\" } }; } } }","s":"9.21.2.2 在任意对象类中使用","u":"/docs/dbcontext-seed-data","h":"#92122-在任意对象类中使用","p":1138},{"i":1149,"t":"通常我们的实体有 一对多,多对多等外键关系,那么我们需要单独为每一个实体添加数据种子,而不是直接写在主表中。","s":"9.21.3 导航属性","u":"/docs/dbcontext-seed-data","h":"#9213-导航属性","p":1138},{"i":1151,"t":"Furion 提供泛型的方式支持多个数据库种子数据设定,如: using Furion.DatabaseAccessor; using System.Collections.Generic; namespace Furion.Application { public class PersonSeedData : IEntitySeedData { // 配置种子数据 public IEnumerable HasData(DbContext dbContext, Type dbContextLocator) { return new List { new Person { Id = 1, Name = \"百小僧\", Address = \"广东省中山市\" }, new Person { Id = 2, Name = \"新生帝\", Address = \"广东省珠海市\" } }; } } } 上面的例子表示同时为 MySqlDbContext 和 SqliteDbContext 创建种子数据。","s":"9.21.4 多个数据库种子数据","u":"/docs/dbcontext-seed-data","h":"#9214-多个数据库种子数据","p":1138},{"i":1153,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 数据种子 知识可查阅 EF Core - 数据种子设定 章节。","s":"9.21.5 反馈与建议","u":"/docs/dbcontext-seed-data","h":"#9215-反馈与建议","p":1138},{"i":1155,"t":"温馨提示 推荐使用 《9.17 Sql 高级代理》代替本章节功能。Sql 高级代理 能够提供更容易且更易维护的方式。 例子说明 本章节例子均以 sql server 数据库写的例子,命令参数统一用 @ 符号,但不同数据库的参数前缀有所不同,如:sql server 采用 @,oracle 采用 :,my sql 采用 ?。","s":"9.15 Sql 操作","u":"/docs/dbcontext-sql","h":"","p":1154},{"i":1157,"t":"Furion 框架提供非常多且灵活的 sql 操作方法,且性能不输于 dapper,同时逼近 ADO.NET 原生操作。","s":"9.15.1 关于 Sql","u":"/docs/dbcontext-sql","h":"#9151-关于-sql","p":1154},{"i":1160,"t":"// ==== 同步操作 ==== // 示例一 var dataTable = \"select * from person\".SqlQuery(); // 示例二 var dataTable = \"select top 10 * from person where id > @id\".SqlQuery(new {id = 10}); // 示例三 var dataTable = \"select Id, Name, Age from person where name like @name\".SqlQuery(new Dictionary{ {\"name\", \"%Furion%\"} }); // 示例四 var dataTable = \"select * from person where name=@name limit 1,10\".SqlQuery(new []{ new MySqlParameter(\"name\",\"Furion\") }); // 示例五 var dataTable = \"select * from person where id>@id and name like @name\".SqlQuery(new YourModel { Id = 1, Name = \"%Furion%\" }); // 示例六 var dataTable = \"exec PROC_GetPerson @id\".SqlQuery(new {id = 10}); // 示例七 var dataTable = \"select * from FN_GetPersons(@id)\".SqlQuery(new {id = 10}); // 示例八 var dataTable = @\" select * from person p left join personDetail pd on p.Id == pd.pid where p.Id > @id;\".SqlQuery(new {id = 10}); // ==== 异步操作 ==== // 示例一 var dataTable = await \"select * from person\".SqlQueryAsync(); // 示例二 var dataTable = await \"select top 10 * from person where id > @id\".SqlQueryAsync(new {id = 10}); // 示例三 var dataTable = await \"select Id, Name, Age from person where name like @name\".SqlQueryAsync(new Dictionary{ {\"name\", \"%Furion%\"} }); // 示例四 var dataTable = await \"select * from person where name=@name limit 1,10\".SqlQueryAsync(new []{ new MySqlParameter(\"name\",\"Furion\") }); // 示例五 var dataTable = await \"select * from person where id>@id and name like @name\".SqlQueryAsync(new YourModel { Id = 1, Name = \"%Furion%\" }); // 示例六 var dataTable = await \"exec PROC_GetPerson @id\".SqlQueryAsync(new {id = 10}); // 示例七 var dataTable = await \"select * from FN_GetPersons(@id)\".SqlQueryAsync(new {id = 10}); // 示例八 var dataTable = await @\" select * from person p left join personDetail pd on p.Id == pd.pid where p.Id > @id;\".SqlQueryAsync(new {id = 10});","s":"9.15.2.1 返回 DataTable","u":"/docs/dbcontext-sql","h":"#91521-返回-datatable","p":1154},{"i":1162,"t":"// ==== 同步操作 ==== // 示例一 var persons = \"select * from person\".SqlQuery(); // 示例二 var persons = \"select top 10 * from person where id > @id\".SqlQuery(new {id = 10}); // 示例三 var persons = \"select Id, Name, Age from person where name like @name\".SqlQuery(new Dictionary{ {\"name\", \"%Furion%\"} }); // 示例四 var persons = \"select * from person where name=@name limit 1,10\".SqlQuery(new []{ new MySqlParameter(\"name\",\"Furion\") }); // 示例五 var persons = \"select * from person where id>@id and name like @name\".SqlQuery(new YourModel { Id = 1, Name = \"%Furion%\" }); // 示例六 var persons = \"exec PROC_GetPerson @id\".SqlQuery(new {id = 10}); // 示例七 var persons = \"select * from FN_GetPersons(@id)\".SqlQuery(new {id = 10}); // 示例八 var persons = @\" select * from person p left join personDetail pd on p.Id == pd.pid where p.Id > @id;\".SqlQuery(new {id = 10}); // ==== 异步操作 ==== // 示例一 var persons = await \"select * from person\".SqlQueryAsync(); // 示例二 var persons = await \"select top 10 * from person where id > @id\".SqlQueryAsync(new {id = 10}); // 示例三 var persons = await \"select Id, Name, Age from person where name like @name\".SqlQueryAsync(new Dictionary{ {\"name\", \"%Furion%\"} }); // 示例四 var persons = await \"select * from person where name=@name limit 1,10\".SqlQueryAsync(new []{ new MySqlParameter(\"name\",\"Furion\") }); // 示例五 var persons = await \"select * from person where id>@id and name like @name\".SqlQueryAsync(new YourModel { Id = 1, Name = \"%Furion%\" }); // 示例六 var persons = await \"exec PROC_GetPerson @id\".SqlQueryAsync(new {id = 10}); // 示例七 var persons = await \"select * from FN_GetPersons(@id)\".SqlQueryAsync(new {id = 10}); // 示例八 var persons = await @\" select * from person p left join personDetail pd on p.Id == pd.pid where p.Id > @id;\".SqlQueryAsync(new {id = 10});","s":"9.15.2.2 返回 List","u":"/docs/dbcontext-sql","h":"#91522-返回-listt","p":1154},{"i":1164,"t":"// ==== 同步操作 ==== // 示例一 var dataSet = @\" select * from person; select * from student;\".SqlQueries(); // 示例二 var dataSet = @\" select * from person where Id > @id; select * from student where Name like @name;\".SqlQueries(new {id = 1, name = \"%furion%\"}); // 示例三 var dataSet = @\" select * from person; exec PROC_GetStudents(@id); select 'Furion'; select * from FN_GetPerson(@id);\".SqlQueries(new {id = 1}); // ==== 异步操作 ==== // 示例一 var dataSet = await @\" select * from person; select * from student;\".SqlQueriesAsync(); // 示例二 var dataSet = await @\" select * from person where Id > @id; select * from student where Name like @name;\".SqlQueriesAsync(new {id = 1, name = \"%furion%\"}); // 示例三 var dataSet = await @\" select * from person; exec PROC_GetStudents(@id); select 'Furion'; select * from FN_GetPerson(@id);\".SqlQueriesAsync(new {id = 1});","s":"9.15.2.3 返回 DataSet","u":"/docs/dbcontext-sql","h":"#91523-返回-dataset","p":1154},{"i":1166,"t":"// ==== 同步操作 ==== // 示例一 var (persons, students) = @\" select * from person; select * from student;\".SqlQueries(); // 示例二 var (persons, students) = @\" select * from person where Id > @id; select * from student where Name like @name;\".SqlQueries(new {id = 1, name = \"%furion%\"}); // 示例三 var (persons, students, string, PersonDto) = @\" select * from person; exec PROC_GetStudents(@id); select 'Furion'; select * from FN_GetPerson(@id);\".SqlQueries(new {id = 1}); // ==== 异步操作 ==== // 示例一 var (persons, students) = await @\" select * from person; select * from student;\".SqlQueriesAsync(); // 示例二 var (persons, students) = await @\" select * from person where Id > @id; select * from student where Name like @name;\".SqlQueriesAsync(new {id = 1, name = \"%furion%\"}); // 示例三 var (persons, students, string, PersonDto) = await @\" select * from person; exec PROC_GetStudents(@id); select 'Furion'; select * from FN_GetPerson(@id);\".SqlQueriesAsync(new {id = 1});","s":"9.15.2.4 返回 Tuple","u":"/docs/dbcontext-sql","h":"#91524-返回-tuplet1t8","p":1154},{"i":1168,"t":"// ==== 同步操作 ==== // 示例一 var value = \"select Name from person where id = @id\".SqlScalar(new {id = 1}); // 示例二 var value = \"select Name from person where id = @id\".SqlScalar(new {id = 1}); // 示例三 var value = \"select Age from person where id = @id\".SqlScalar(new {id = 1}); // ==== 异步操作 ==== // 示例一 var value = await \"select Name from person where id = @id\".SqlScalarAsync(new {id = 1}); // 示例二 var value = await \"select Name from person where id = @id\".SqlScalarAsync(new {id = 1}); // 示例三 var value = await \"select Age from person where id = @id\".SqlScalarAsync(new {id = 1});","s":"9.15.2.5 返回 单行单列","u":"/docs/dbcontext-sql","h":"#91525-返回-单行单列","p":1154},{"i":1170,"t":"// ==== 同步操作 ==== // 示例一 var rowEffects = \"insert into person(Name,Age,Address) values(@name,@age,@address)\".SqlNonQuery(person); // 示例二 var rowEffects = @\" insert into person(Name,Age,Address) values(@name,@age,@address); insert into person(Name,Age,Address) values(@name,@age,@address);\".SqlNonQuery(persons); // 示例三 var rowEffects = \"update person set name=@name where id=@id\".SqlNonQuery(new {id=1, name=\"百小僧\"}); // 示例四 var rowEffects = \"delete from person where @id > 10\".SqlNonQuery(new {id=1}); // ==== 异步操作 ==== // 示例一 var rowEffects = await \"insert into person(Name,Age,Address) values(@name,@age,@address)\".SqlNonQueryAsync(person); // 示例二 var rowEffects = @\" insert into person(Name,Age,Address) values(@name,@age,@address); insert into person(Name,Age,Address) values(@name,@age,@address);\".SqlNonQueryAsync(persons); // 示例三 var rowEffects = await \"update person set name=@name where id=@id\".SqlNonQueryAsync(new {id=1, name=\"百小僧\"}); // 示例四 var rowEffects = await \"delete from person where @id > 10\".SqlNonQueryAsync(new {id=1});","s":"9.15.2.6 返回 受影响行数","u":"/docs/dbcontext-sql","h":"#91526-返回-受影响行数","p":1154},{"i":1173,"t":"// ==== 同步操作 ==== // 示例一 var dataTable = \"PROC_Name\".SqlProcedureQuery(); // 示例二 var dataTable = \"PROC_Name\".SqlProcedureQuery(new {id = 1}); // 示例三 var dataTable = \"PROC_Name\".SqlProcedureQuery(new {id = 1, age = 27}); // ==== 异步操作 ==== // 示例一 var dataTable = await \"PROC_Name\".SqlProcedureQueryAsync(); // 示例二 var dataTable = await \"PROC_Name\".SqlProcedureQueryAsync(new {id = 1}); // 示例三 var dataTable = await \"PROC_Name\".SqlProcedureQueryAsync(new {id = 1, age = 27});","s":"9.15.3.1 返回 DataTable","u":"/docs/dbcontext-sql","h":"#91531-返回-datatable","p":1154},{"i":1175,"t":"// ==== 同步操作 ==== // 示例一 var persons = \"PROC_Name\".SqlProcedureQuery(); // 示例二 var persons = \"PROC_Name\".SqlProcedureQuery(new {id = 1}); // 示例三 var persons = \"PROC_Name\".SqlProcedureQuery(new {id = 1, age = 27}); // ==== 异步操作 ==== // 示例一 var persons = await \"PROC_Name\".SqlProcedureQueryAsync(); // 示例二 var persons = await \"PROC_Name\".SqlProcedureQueryAsync(new {id = 1}); // 示例三 var persons = await \"PROC_Name\".SqlProcedureQueryAsync(new {id = 1, age = 27});","s":"9.15.3.2 返回 List","u":"/docs/dbcontext-sql","h":"#91532-返回-listt","p":1154},{"i":1177,"t":"// ==== 同步操作 ==== // 示例一 var dataSet = \"PROC_Name\".SqlProcedureQueries(); // 示例二 var dataSet = \"PROC_Name\".SqlProcedureQueries(new {id = 1}); // 示例三 var dataSet = \"PROC_Name\".SqlProcedureQueries(new {id = 1, age = 27}); // ==== 异步操作 ==== // 示例一 var dataSet = await \"PROC_Name\".SqlProcedureQueriesAsync(); // 示例二 var dataSet = await \"PROC_Name\".SqlProcedureQueriesAsync(new {id = 1}); // 示例三 var dataSet = await \"PROC_Name\".SqlProcedureQueriesAsync(new {id = 1, age = 27});","s":"9.15.3.3 返回 DataSet","u":"/docs/dbcontext-sql","h":"#91533-返回-dataset","p":1154},{"i":1179,"t":"// ==== 同步操作 ==== // 示例一 var persons = \"PROC_Name\".SqlProcedureQueries(); // 示例二 var (persons,students) = \"PROC_Name\".SqlProcedureQueries(new {id = 1}); // 示例三 var (persons,students,string) = \"PROC_Name\".SqlProcedureQueries(new {id = 1, age = 27}); // 示例四 var (persons,students,personDetail,string) = \"PROC_Name\".SqlProcedureQueries(new {id = 1, age = 27}); // ==== 异步操作 ==== // 示例一 var persons = await \"PROC_Name\".SqlProcedureQueriesAsync(); // 示例二 var (persons,students) = await \"PROC_Name\".SqlProcedureQueriesAsync(new {id = 1}); // 示例三 var (persons,students,string) = await \"PROC_Name\".SqlProcedureQueriesAsync(new {id = 1, age = 27}); // 示例四 var (persons,students,personDetail,string) = await \"PROC_Name\".SqlProcedureQueriesAsync(new {id = 1, age = 27});","s":"9.15.3.4 返回 Tuple","u":"/docs/dbcontext-sql","h":"#91534-返回-tuplet1t8","p":1154},{"i":1181,"t":"// ==== 同步操作 ==== // 示例一 var value = \"PROC_Name\".SqlProcedureScalar(new {id = 1}); // 示例二 var value = \"PROC_Name\".SqlProcedureScalar(new {id = 1, name = \"新生帝\", address =\"广东省中山市\"}); // 示例三 var value = \"PROC_Name\".SqlProcedureScalar(new {id = 1, address =\"广东省中山市\"}); // ==== 异步操作 ==== // 示例一 var value = await \"PROC_Name\".SqlProcedureScalarAsync(new {id = 1}); // 示例二 var value = await \"PROC_Name\".SqlProcedureScalarAsync(new {id = 1, name = \"新生帝\", address =\"广东省中山市\"}); // 示例三 var value = await \"PROC_Name\".SqlProcedureScalarAsync(new {id = 1, address =\"广东省中山市\"});","s":"9.15.3.5 返回 单行单列","u":"/docs/dbcontext-sql","h":"#91535-返回-单行单列","p":1154},{"i":1183,"t":"// ==== 同步操作 ==== // 示例一 var rowEffects = \"PROC_Name\".SqlProcedureNonQuery(person); // 示例二 var rowEffects = \"PROC_Name\".SqlProcedureNonQuery(new {id = 1, name = \"新生帝\", address =\"广东省中山市\"}); // 示例三 var rowEffects = \"PROC_Name\".SqlProcedureNonQuery(new {id=1, name=\"百小僧\"}); // 示例四 var rowEffects = \"PROC_Name\".SqlProcedureNonQuery(new {id=1}); // ==== 异步操作 ==== // 示例一 var rowEffects = await \"PROC_Name\".SqlProcedureNonQueryAsync(person); // 示例二 var rowEffects = await \"PROC_Name\".SqlProcedureNonQueryAsync(new {id = 1, name = \"新生帝\", address =\"广东省中山市\"}); // 示例三 var rowEffects = await \"PROC_Name\".SqlProcedureNonQueryAsync(new {id=1, name=\"百小僧\"}); // 示例四 var rowEffects = await \"PROC_Name\".SqlProcedureNonQueryAsync(new {id=1});","s":"9.15.3.6 返回 受影响行数","u":"/docs/dbcontext-sql","h":"#91536-返回-受影响行数","p":1154},{"i":1185,"t":"CREATE PROC PROC_Output @Id INT, // 输入参数 @Name NVARCHAR(32) OUTPUT, // 输出参数,还带长度 @Age INT OUTPUT // 输出参数 AS BEGIN SET @Name = 'Furion Output'; // 输出结果集 SELECT * FROM dbo.Test WHERE Id > @Id; // 输出结果集 SELECT TOP 10 * FROM dbo.Test; SET @Age = 27; // 带 RETURN 返回 RETURN 10; END; using Furion.DatabaseAccessor; using System.Data; namespace Furion.Application { public class ProcOutputModel { public int Id { get; set; } // 输入参数 [DbParameter(ParameterDirection.Output, Size = 32)] public string Name { get; set; } // 输出参数 [DbParameter(ParameterDirection.Output)] public int Age { get; set; } // 输出参数 [DbParameter(ParameterDirection.ReturnValue)] public int ReturnValue { get; set; } // 返回值 } } // ==== 同步操作 ==== // 示例一 ProcedureOutputResult result = \"PROC_Name\".SqlProcedureOutput(new ProcOutputModel{ Id=1}); // 示例二 ProcedureOutputResult result = \"PROC_Name\".SqlProcedureOutput(new ProcOutputModel{ Id=1}); // 示例三 ProcedureOutputResult<(List, List)> result = \"PROC_Name\".SqlProcedureOutput<(List, List)>(new ProcOutputModel{ Id=1}); // ==== 异步操作 ==== // 示例一 ProcedureOutputResult result = await \"PROC_Name\".SqlProcedureOutputAsync(new ProcOutputModel{ Id=1}); // 示例二 ProcedureOutputResult result = await \"PROC_Name\".SqlProcedureOutputAsync(new ProcOutputModel{ Id=1}); // 示例三 ProcedureOutputResult<(List, List)> result = await \"PROC_Name\".SqlProcedureOutputAsync<(List, List)>(new ProcOutputModel{ Id=1});","s":"9.15.3.7 带 OUTPUT/RETURN 返回","u":"/docs/dbcontext-sql","h":"#91537-带-outputreturn-返回","p":1154},{"i":1188,"t":"// ==== 同步操作 ==== // 示例一 var value = \"FN_Name\".SqlFunctionScalar(); // 示例二 var value = \"FN_Name\".SqlFunctionScalar(new {id = 1}); // 示例三 var value = \"FN_Name\".SqlFunctionScalar(); // 示例四 var value = \"FN_Name\".SqlFunctionScalar(new {id = 1}); // ==== 异步操作 ==== // 示例一 var value = await \"FN_Name\".SqlFunctionScalarAsync(); // 示例二 var value = await \"FN_Name\".SqlFunctionScalarAsync(new {id = 1}); // 示例三 var value = await \"FN_Name\".SqlFunctionScalarAsync(); // 示例四 var value = await \"FN_Name\".SqlFunctionScalarAsync(new {id = 1});","s":"9.15.4.1 标量函数","u":"/docs/dbcontext-sql","h":"#91541-标量函数","p":1154},{"i":1190,"t":"// ==== 同步操作 ==== // 示例一 var dataTable = \"FN_Name\".SqlFunctionQuery(); // 示例二 var dataTable = \"FN_Name\".SqlFunctionQuery(new {id = 1}); // 示例三 var persons = \"FN_Name\".SqlFunctionQuery(); // 示例四 var persons = \"FN_Name\".SqlFunctionQuery(new {id = 1}); // ==== 异步操作 ==== // 示例一 var dataTable = await \"FN_Name\".SqlFunctionQueryAsync(); // 示例二 var dataTable = await \"FN_Name\".SqlFunctionQueryAsync(new {id = 1}); // 示例三 var persons = await \"FN_Name\".SqlFunctionQueryAsync(); // 示例四 var persons = await \"FN_Name\".SqlFunctionQueryAsync(new {id = 1});","s":"9.15.4.2 表值函数","u":"/docs/dbcontext-sql","h":"#91542-表值函数","p":1154},{"i":1192,"t":"var data = \"select * from table\".SetCommandTimeout(100).SqlQuery(); // 单位秒","s":"9.15.5 设置超时时间","u":"/docs/dbcontext-sql","h":"#9155-设置超时时间","p":1154},{"i":1194,"t":"ISqlRepository 仓储是专门处理 Sql 操作的,无需实体方式,所有接口和 懒人无敌 方式一样: // 示例一 var dataTable = sqlRepository.SqlQuery(\"select * from person\"); // 示例二 var dataTable = sqlRepository.SqlQuery(\"select * from person where id > @id\", new { id = 10}); // 示例四 var persons = sqlRepository.SqlQuery(\"select * from person\"); // 示例五 var persons = sqlRepository.SqlQuery(\"select * from person where id > @id\", new { id = 10}); // 不再举例子。。。 补充说明 不管是哪种方式操作 Sql ,方法名参数都是一致的,如: SqlQuery SqlQueryAsync SqlQueries SqlQueriesAsync SqlNonQuery SqlNonQueryAsync SqlScalar SqlScalarAsync SqlProcedureQuery SqlProcedureQueryAsync SqlProcedureQueries SqlProcedureQueriesAsync SqlProcedureScalar SqlProcedureScalarAsync SqlProcedureNonQuery SqlProcedureNonQueryAsync SqlProcedureOutput SqlProcedureOutputAsync SqlFunctionScalar SqlFunctionScalarAsync SqlFunctionQuery SqlFunctionQuery","s":"9.15.6 ISqlRepository 操作","u":"/docs/dbcontext-sql","h":"#9156-isqlrepository-操作","p":1154},{"i":1196,"t":"IRepository 也能操作 sql,调用方法也是和上面一致的,如: var dataTable = repository.Sql().SqlQuery(\"select * from person\"); 特别说明 由于篇幅有限,不再列举所有例子。","s":"9.15.7 IRepository 操作","u":"/docs/dbcontext-sql","h":"#9157-irepository-操作","p":1154},{"i":1198,"t":"IRepository 也能操作 sql,调用方法也是和上面一致的,如: var dataTable = personRepository.SqlQuery(\"select * from person\"); 特别说明 由于篇幅有限,不再列举所有例子。","s":"9.15.8 IRepository 操作","u":"/docs/dbcontext-sql","h":"#9158-irepositorytentity-操作","p":1154},{"i":1200,"t":"所有 sql、存储过程,函数 参数都支持四种方式: DbParameter[]:数组类型 new {}:匿名类型 new Class{}:强类型类型(支持复杂存储过程参数) Dictionary 类型 小知识 建议除了复杂的存储过程(带 OUTPUT/RETURN)的以外,所有参数建议使用 new {} 匿名类型,如果需要动态参数,则可以使用 Dictionary 类型。 参数大小写问题 由于不同数据库对查询参数大小写问题处理不一致,所以建议所有查询参数和参数名或属性名完全一致。","s":"9.15.9 关于 Sql 参数","u":"/docs/dbcontext-sql","h":"#9159-关于-sql-参数","p":1154},{"i":1202,"t":"Furion 框架拥有非常灵活的多数据库操作方式,只需通过多数据库上下文定位器即可动态切换数据库。","s":"9.15.10 多数据库 Sql 操作 💯 💛","u":"/docs/dbcontext-sql","h":"#91510-多数据库-sql-操作--","p":1154},{"i":1204,"t":"var dataTable = \"select * from person\".Change().SqlQuery(); var persons = \"select * from person whre id > @id\".Change().SqlQuery(); 补充说明 懒人方式 只需要通过 Change 方式即可动态切换数据库。","s":"9.15.10.1 懒人无敌 🐮 方式","u":"/docs/dbcontext-sql","h":"#915101-懒人无敌--方式","p":1154},{"i":1206,"t":"只需要通过 ISqlRepository 注入或通过 sqlRepository.Change() 切换。","s":"9.15.10.2 ISqlRepository 方式","u":"/docs/dbcontext-sql","h":"#915102-isqlrepository-方式","p":1154},{"i":1208,"t":"只需要通过 repository.Change() 获取即可。","s":"9.15.10.3 IRepository 方式","u":"/docs/dbcontext-sql","h":"#915103-irepository-方式","p":1154},{"i":1210,"t":"只需要通过 IRepository 注入或通过 personRepository.Change() 切换。","s":"9.15.10.4 IRepository 方式","u":"/docs/dbcontext-sql","h":"#915104-irepositorytentity-方式","p":1154},{"i":1212,"t":"在 Furion 框架中,不管是懒人模式还是仓储模式都是通过 .Change 方式切换数据库,如: // 懒人模式 var data = \"select * from table\".Change().SqlQuery(); // 仓储方式 var data = req.Change().SqlQuery(\"select * from table\");","s":"9.15.11 切换数据库","u":"/docs/dbcontext-sql","h":"#91511-切换数据库","p":1154},{"i":1214,"t":"默认情况下,所有的 字符串 和 实体 拓展都有自己独立维护的 ServiceProvider 作用域。 在 Web 请求中,默认是 HttpContext.RequestServices,但在 非 Web,如多线程操作,后台任务,事件总线等场景下会自动创建新的作用域,实际上这是非常不必要的内存开销。 这时,我们只需要通过 .SetXXXScoped(service) 共享当前服务提供器作用域即可,如: Scoped.Create((fac, scope) => { \"select * from table\".SetContextScoped(scope.ServiceProvider).SqlQuery(); });","s":"9.15.12 多线程共享作用域","u":"/docs/dbcontext-sql","h":"#91512-多线程共享作用域","p":1154},{"i":1216,"t":"SqlExecutePart.Default.SetSqlString(\"select * from person\").SqlQuery();","s":"9.15.13 静态 Default 方式构建","u":"/docs/dbcontext-sql","h":"#91513-静态-default-方式构建","p":1154},{"i":1218,"t":"与我们交流 给 Furion 提 Issue。","s":"9.15.14 反馈与建议","u":"/docs/dbcontext-sql","h":"#91514-反馈与建议","p":1154},{"i":1221,"t":"Sql 代理是 Furion 框架中对 Sql 操作一个非常重要的概念,通过这种方式可以大大提高 Sql 书写效率,而且后期极易维护。 Sql 代理属于 Furion 框架中一个高级功能。","s":"9.17.1 关于 Sql 代理","u":"/docs/dbcontext-sql-proxy","h":"#9171-关于-sql-代理","p":1219},{"i":1223,"t":"ISqlDispatchProxy 接口是 Furion 实现被代理接口的唯一依赖,任何公开的接口一旦集成了 ISqlDispatchProxy 接口,那么这个接口就是被托管拦截的 Sql 操作接口。 简单定义一个 Sql 代理接口 using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { } } 一旦这个接口继承了 ISqlDispatchProxy,那么它就会动态创建接口实例,而且支持依赖注入/控制反转获取实例。","s":"9.17.2 了解 ISqlDispatchProxy","u":"/docs/dbcontext-sql-proxy","h":"#9172-了解-isqldispatchproxy","p":1219},{"i":1225,"t":"下面我将通过多个例子来演示 Sql 代理的用法,为什么推荐这种方式操作 Sql。 支持各种方式获取实例:","s":"9.17.3 开始领略 Sql 代理","u":"/docs/dbcontext-sql-proxy","h":"#9173-开始领略-sql-代理","p":1219},{"i":1227,"t":"private readonly ISql _sql; public FurionService(ISql sql) { _sql = sql; }","s":"9.17.3.1 构造函数方式","u":"/docs/dbcontext-sql-proxy","h":"#91731-构造函数方式","p":1219},{"i":1229,"t":"public async Task> GetAll([FromServices] ISql, string keyword) { }","s":"9.17.3.2 方法参数注入","u":"/docs/dbcontext-sql-proxy","h":"#91732-方法参数注入","p":1219},{"i":1231,"t":"var sql = Db.GetSqlDispatchProxy();","s":"9.17.3.3 Db.GetSqlDispatchProxy()","u":"/docs/dbcontext-sql-proxy","h":"#91733-dbgetsqldispatchproxyisql","p":1219},{"i":1234,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { // 执行sql并传入参数,基元类型 [SqlExecute(\"select * from person where id >@id and name like @name\")] DataTable GetPerson(int id, string name); // 执行sql并传入参数,对象类型 [SqlExecute(\"select * from person where id >@id and name like @name\")] DataTable GetPerson(MyParam paras); // 执行存储过程 sql,支持设置参数类型 [SqlExecute(\"exec PROP_NAME @id\", CommandType = CommandType.StoredProcedure)] DataTable GetPerson(int id); // 支持多数据库操作 [SqlExecute(\"select * from person\"), SqlDbContextLocator(typeof(MySqlDbContextLocator))] DataTable GetPerson(); // 异步方式 [SqlExecute(\"select * from person\"), SqlDbContextLocator(typeof(MySqlDbContextLocator))] Task GetPersonAsync(); } } 关于参数 Sql 代理参数查找规则: 如果方法的参数是 基元类型(或 string、值类型),则自动将这些类型组合成 Dictionary 作为 Sql 参数。命令参数可使用方法同名参数加 @ 符号。 如果方法的参数是 类类型,那么自动遍历该类公开实例属性生成 DbParameter[] 数组,每一个属性名都将是命令参数,大部分数据库是不区分大小写,个别数据库除外,如 Sqlite,如: public class MyModel { public int Id {get;set;} public string Name {get; set;} } 那么 sql 语句可以直接使用属性名作为参数: select * from person where id > @id and name = @name;","s":"9.17.4.1 返回 DataTable","u":"/docs/dbcontext-sql-proxy","h":"#91741-返回-datatable","p":1219},{"i":1236,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { // 执行sql并传入参数,基元类型 [SqlExecute(\"select * from person where id >@id and name like @name\")] List GetPerson(int id, string name); // 执行sql并传入参数,对象类型 [SqlExecute(\"select * from person where id >@id and name like @name\")] List GetPerson(MyParam paras); // 执行存储过程 sql,支持设置参数类型 [SqlExecute(\"exec PROP_NAME @id\", CommandType = CommandType.StoredProcedure)] List GetPerson(int id); // 支持多数据库操作 [SqlExecute(\"select * from person\"), SqlDbContextLocator(typeof(MySqlDbContextLocator)] List GetPerson(); // 异步方式 [SqlExecute(\"select * from person\"), SqlDbContextLocator(typeof(MySqlDbContextLocator)] Task> GetPersonAsync(); } }","s":"9.17.4.2 返回 List","u":"/docs/dbcontext-sql-proxy","h":"#91742-返回-listt","p":1219},{"i":1238,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { // 执行sql并传入参数,基元类型 [SqlExecute(@\" select * from person where id >@id and name like @name; select top 10 * from student where Id >@id;\")] DataSet GetData(int id, string name); // 执行sql并传入参数,对象类型 [SqlExecute(@\" select * from person where id >@id and name like @name; select top 10 * from student where Id >@id;\")] DataSet GetData(MyParam paras); // 执行存储过程 sql,支持设置参数类型 [SqlExecute(@\" exec PROP_NAME @id; select * from person;\", CommandType = CommandType.StoredProcedure)] DataSet GetData(int id); // 支持多数据库操作 [SqlExecute(@\" select * from person; select * from student;\"), SqlDbContextLocator(typeof(MySqlDbContextLocator)] DataSet GetData(); // 异步方式 [SqlExecute(@\" select * from person; select * from student; select 1;\"), SqlDbContextLocator(typeof(MySqlDbContextLocator)] Task GetDataAsync()); } }","s":"9.17.4.3 返回 DataSet","u":"/docs/dbcontext-sql-proxy","h":"#91743-返回-dataset","p":1219},{"i":1240,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { // 执行sql并传入参数,基元类型 [SqlExecute(@\" select * from person where id >@id and name like @name; select top 10 * from student where Id >@id;\")] (List,List) GetData(int id, string name); // 执行sql并传入参数,对象类型 [SqlExecute(@\" select * from person where id >@id and name like @name; select top 10 * from student where Id >@id;\")] (List,List) GetData(MyParam paras); // 执行存储过程 sql,支持设置参数类型 [SqlExecute(@\" exec PROP_NAME @id; select * from person;\", CommandType = CommandType.StoredProcedure)] (List,List) GetData(int id); // 支持多数据库操作 [SqlExecute(@\" select * from person; select * from student;\"), SqlDbContextLocator(typeof(MySqlDbContextLocator)] (List,List) GetData(); // 异步方式 [SqlExecute(@\" select * from person; select * from student; select 1;\"), SqlDbContextLocator(typeof(MySqlDbContextLocator)] Task<(List,List,List)> GetDataAsync(); // 自 v3.7.3+ 版本支持返回单个类类型参数 [SqlExecute(@\" select * from person where id =@id; select * from person\")] (Person, List) GetData(int id); // 注意返回值是 `(Person, List)` 组合 }","s":"9.17.4.4 返回 Tuple","u":"/docs/dbcontext-sql-proxy","h":"#91744-返回-tuplet1t8","p":1219},{"i":1242,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { [SqlExecute(\"select Name from person where id = @id\")] string GetValue(int id); [SqlExecute(\"select age from person where id = @id\")] int GetValue(int id); [SqlExecute(\"select Name from person where id = @id\")] Task GetValueAsync(int id); } }","s":"9.17.4.5 返回 单行单列","u":"/docs/dbcontext-sql-proxy","h":"#91745-返回-单行单列","p":1219},{"i":1244,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { [SqlExecute(\"insert into person(Name,Age) values(@name,@age)\")] void Insert(MyParam dto); [SqlExecute(\"delete from person where id = @id\")] void Delete(int id); [SqlExecute(\"update person set name=@name where id=@id\")] void Update(int id, string name); } }","s":"9.17.4.6 无返回值","u":"/docs/dbcontext-sql-proxy","h":"#91746-无返回值","p":1219},{"i":1246,"t":"版本说明 以下内容仅限 Furion 3.7.1 + 版本使用。 public interface ISql : ISqlDispatchProxy { // 自 v3.7.3+ 版本支持返回单个类类型参数 [SqlExecute(\"select * from person where id=@id\")] Person GetPerson(int id); }","s":"9.17.4.7 返回单个类类型参数","u":"/docs/dbcontext-sql-proxy","h":"#91747-返回单个类类型参数","p":1219},{"i":1248,"t":"版本说明 以下内容仅限 Furion 4.4.5 + 版本使用。 需要在 [SqlExcuete] 特性中标记 RowEffects = true 且返回值是 int 或者 Task。 public interface ISql : ISqlDispatchProxy { // 同步 [SqlExecute(\"update person set age = 30 where id = {id}\", RowEffects = true)] int Update(int id); // 异步 [SqlExecute(\"update person set age = 30 where id = {id}\", RowEffects = true)] Task UpdateAsync(int id); }","s":"9.17.4.8 返回受影响行数","u":"/docs/dbcontext-sql-proxy","h":"#91748-返回受影响行数","p":1219},{"i":1251,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { [SqlProcedure(\"PROC_Name\")] DataTable GetPersons(MyParam dto); [SqlProcedure(\"PROC_Name\")] DataTable GetPersons(int id); [SqlProcedure(\"PROC_Name\")] DataTable GetPersons(int id, string name); } }","s":"9.17.5.1 返回 DataTable","u":"/docs/dbcontext-sql-proxy","h":"#91751-返回-datatable","p":1219},{"i":1253,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { [SqlProcedure(\"PROC_Name\")] List GetPersons(MyParam dto); [SqlProcedure(\"PROC_Name\")] List GetPersons(int id); [SqlProcedure(\"PROC_Name\")] List GetPersons(int id, string name); } }","s":"9.17.5.2 返回 List","u":"/docs/dbcontext-sql-proxy","h":"#91752-返回-listt","p":1219},{"i":1255,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { [SqlProcedure(\"PROC_Name\")] DataSet GetData(MyParam dto); [SqlProcedure(\"PROC_Name\")] DataSet GetData(int id); [SqlProcedure(\"PROC_Name\")] DataSet GetData(int id, string name); } }","s":"9.17.5.3 返回 DataSet","u":"/docs/dbcontext-sql-proxy","h":"#91753-返回-dataset","p":1219},{"i":1257,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { [SqlProcedure(\"PROC_Name\")] (List, List) GetData(MyParam dto); [SqlProcedure(\"PROC_Name\")] (List, List) GetData(int id); [SqlProcedure(\"PROC_Name\")] (List, List, Person, int) GetData(int id, string name); // 自 v3.7.3+ 版本支持返回单个类类型参数 [SqlProcedure(@\"PROC_Name)] (Person, List) GetData(int id); // 注意返回值是 `(Person, List)` 组合 } }","s":"9.17.5.4 返回 Tuple(T1,...T8)","u":"/docs/dbcontext-sql-proxy","h":"#91754-返回-tuplet1t8","p":1219},{"i":1259,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { [SqlProcedure(\"PROC_Name\")] object GetValue(MyParam dto); [SqlProcedure(\"PROC_Name\")] string GetValue(int id); [SqlProcedure(\"PROC_Name\")] int GetValue(int id, string name); } }","s":"9.17.5.5 返回 单行单列","u":"/docs/dbcontext-sql-proxy","h":"#91755-返回-单行单列","p":1219},{"i":1261,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { [SqlProcedure(\"PROC_Name\")] void GetValue(MyParam dto); [SqlProcedure(\"PROC_Name\")] void GetValue(int id); [SqlProcedure(\"PROC_Name\")] void GetValue(int id, string name); } }","s":"9.17.5.6 无返回值","u":"/docs/dbcontext-sql-proxy","h":"#91756-无返回值","p":1219},{"i":1263,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { [SqlProcedure(\"PROC_Name\")] ProcedureOutputResult GetOutput(ProcOutputModel pams); [SqlProcedure(\"PROC_Name\")] ProcedureOutputResult GetOutput(ProcOutputModel pams); [SqlProcedure(\"PROC_Name\")] ProcedureOutputResult<(List, List)> GetOutput(ProcOutputModel pams); } }","s":"9.17.5.7 带 OUTPUT/RETURN 返回","u":"/docs/dbcontext-sql-proxy","h":"#91757-带-outputreturn-返回","p":1219},{"i":1265,"t":"版本说明 以下内容仅限 Furion 3.7.1 + 版本使用。 public interface ISql : ISqlDispatchProxy { // 自 v3.7.3+ 版本支持返回单个类类型参数 [SqlProcedure(\"PROC_Name\")] Person GetPerson(int id); }","s":"9.17.5.8 返回单个类类型参数","u":"/docs/dbcontext-sql-proxy","h":"#91758-返回单个类类型参数","p":1219},{"i":1267,"t":"using Furion.DatabaseAccessor; namespace Furion.Application { public interface ISql : ISqlDispatchProxy { [SqlFunction(\"FN_Name\")] // 标量函数 string GetValue(MyParam dto); [SqlProcedure(\"FN_Name\")] // 表值函数 List GetPersons(int id); } } 补充说明 Sql 代理会自动判断返回值然后自动执行特定函数类型。","s":"9.17.6 函数 操作","u":"/docs/dbcontext-sql-proxy","h":"#9176-函数-操作","p":1219},{"i":1269,"t":"在最新的 1.18.3 版本中提供了模板替换功能,如: [SqlExecute(\"select * from person where id > {id} and name like {name} and age > {user.Age}\")] List GetPerson(int id, string name, User user); 两者区别 模板字符串有别于命令参数替换,模板字符串采用 { } 方式,运行时直接替换为实际的内容, @ 而是转换成 DbParameter 参数。","s":"9.17.7 Sql 模板替换","u":"/docs/dbcontext-sql-proxy","h":"#9177-sql-模板替换","p":1219},{"i":1271,"t":"Sql 代理方式的支持三种切换数据库的方式:","s":"9.17.8 切换数据库","u":"/docs/dbcontext-sql-proxy","h":"#9178-切换数据库","p":1219},{"i":1273,"t":"主要通过在方法上贴 [SqlDbContextLocator] 特性 [SqlExecute(\"select * from person\"), SqlDbContextLocator(typeof(MySqlDbContextLocator)] List GetPerson();","s":"9.17.8.1 单个方法方式","u":"/docs/dbcontext-sql-proxy","h":"#91781-单个方法方式","p":1219},{"i":1275,"t":"在接口中贴 [SqlDbContextLocator] 特性,此方式下,接口所有方法将采用指定的数据库执行。 [SqlDbContextLocator(typeof(MySqlDbContextLocator)] public interface ISql : ISqlDispatchProxy { [SqlFunction(\"FN_Name\")] // 标量函数 string GetValue(MyParam dto); [SqlProcedure(\"FN_Name\")] // 表值函数 List GetPersons(int id); }","s":"9.17.8.2 接口方式","u":"/docs/dbcontext-sql-proxy","h":"#91782-接口方式","p":1219},{"i":1277,"t":"除了以上两种 静态 配置方式,Furion 框架还提供 动态 方式,如: // 将 sql 代理数据库切换成特定数据库 _sql.Change(); _sql.GetPerson(); // 多次切换 _sql.Change(); _sql.GetPerson(); // 还支持重置数据库上下文定位器为初始状态 _sql.ResetIt(); _sql.GetPerson(); 关于优先级问题 .Change<> 优先级大于 方法贴 [SqlDbContextLocator] 大于 接口贴 [SqlDbContextLocator]。 默认情况下,不指定 DbContextLocator 属性,则为 MasterDbContextLocator。","s":"9.17.8.3 运行时 .Change 方法切换","u":"/docs/dbcontext-sql-proxy","h":"#91783-运行时-change-方法切换","p":1219},{"i":1279,"t":"在 Furion v2.13 + 版本新增了 Sql 代理拦截功能,可以篡改特定方法或所有代理方法实际执行的参数,如 sql语句、参数、执行对象等等。 若在 Sql 代理中实现拦截功能,必须满足两个条件: 方法必须是 static 静态方法且返回值为 void 且只有一个 SqlProxyMethod 参数 方法必须贴 [Interceptor] 特性 如: public interface ISql : ISqlDispatchProxy { [SqlFunction(\"FN_Name\")] string GetValue(MyParam dto); [SqlProcedure(\"FN_Name\")] List GetPersons(int id); [SqlExecute(\"select name from person\", InterceptorId = \"GetPersonsByName\")] // 通过 InterceptorId 解决方法名重载问题 Task> GetPersons(); // 只拦截 GetValue 方法 [Interceptor(nameof(GetValue))] static void 拦截1(SqlProxyMethod method) { method.FinalSql += \" where id > 1\"; // 篡改最终执行 sql } // 拦截 GetValue 和 GetPersons 方法 [Interceptor(nameof(GetValue), nameof(GetPersons))] static void 拦截2(SqlProxyMethod method) { method.FinalSql += \" where id > 1\"; // 篡改最终执行 sql } [Interceptor(\"GetPersonsByName\")] // 对应上面的 InterceptorId 配置 static void 解决方法名重载拦截(SqlProxyMethod method) { // 。。。 } [Interceptor] static void 全局拦截(SqlProxyMethod method) { // 这里会拦截所有的方法 } }","s":"9.17.9 Sql 代理拦截","u":"/docs/dbcontext-sql-proxy","h":"#9179-sql-代理拦截","p":1219},{"i":1281,"t":"[Timeout(1000)] public interface ISql : ISqlDispatchProxy { [SqlFunction(\"FN_Name\"), Timeout(500)] // 单位秒 string GetValue(MyParam dto); }","s":"9.17.10 设置超时时间","u":"/docs/dbcontext-sql-proxy","h":"#91710-设置超时时间","p":1219},{"i":1283,"t":"与我们交流 给 Furion 提 Issue。","s":"9.17.11 反馈与建议","u":"/docs/dbcontext-sql-proxy","h":"#91711-反馈与建议","p":1219},{"i":1286,"t":"通常我们程序中执行数据库的 sql 语句都写在了程序集中,随程序一起编译,后续需要修改,则重新编译代码。 所以,Furion 创造出一种 Sql 模板的方式,程序执行 Sql 时,只需要使用特殊标记即可:#(模板Key),这些真实的 Sql 配置在 .json 或 .xml 配置文件中。 如: Json 方式 { \"Select.User\": \"select * from User where id > @id\" } Xml 方式 select * from User where id > @id ","s":"9.16.1 Sql 模板","u":"/docs/dbcontext-sql-template","h":"#9161-sql-模板","p":1284},{"i":1289,"t":"支持 Sql 动态配置,可在程序运行时动态调配 Sql 语句 支持程序 Sql 语句加密","s":"9.16.2.1 优点","u":"/docs/dbcontext-sql-template","h":"#91621-优点","p":1284},{"i":1291,"t":"需增加对应配置文件 不容易调试 Sql 代码","s":"9.16.2.2 缺点","u":"/docs/dbcontext-sql-template","h":"#91622-缺点","p":1284},{"i":1293,"t":"在执行 Sql 的时候,只需要填写指定模板即可。","s":"9.16.3 如何使用","u":"/docs/dbcontext-sql-template","h":"#9163-如何使用","p":1284},{"i":1295,"t":"// 仓储方式 var users = repository.SqlQuery(\"#(Select.User)\", new { id = 1}); // 懒人方式 var users = \"#(Select.User)\".SqlQuery(new { id = 1}); // Sql 代理方式 [SqlExecute(\"#(Select.User)\")] List GetUser(int id);","s":"9.16.3.1 常规使用","u":"/docs/dbcontext-sql-template","h":"#91631-常规使用","p":1284},{"i":1297,"t":"var users = repository.SqlQuery( @\"select * from user u left join #(User.Detail) d on u.Id = d.UserId where id > @id\");","s":"9.16.3.2 高级嵌套","u":"/docs/dbcontext-sql-template","h":"#91632-高级嵌套","p":1284},{"i":1300,"t":"{ \"Select.User\": \"select * from User\" }","s":"9.16.4.1 普通模式","u":"/docs/dbcontext-sql-template","h":"#91641-普通模式","p":1284},{"i":1302,"t":"功能移除声明 以下内容在 Furion 2.13 + 版本中已移除。 { \"Select.User\": { \"Sql\": \"select * from User where id > @id and Name = @name\", \"Params\": [ { \"Name\": \" Id\", \"Value\": \"1\", \"DbType\": \"Int16\", \"Size\": 10 }, { \"Name\": \" Name\", \"Value\": \"百小僧\", \"DbType\": \"String\", \"Size\": 10 } ] } }","s":"9.16.4.2 更多配置","u":"/docs/dbcontext-sql-template","h":"#91642-更多配置","p":1284},{"i":1304,"t":"与我们交流 给 Furion 提 Issue。","s":"9.16.5 反馈与建议","u":"/docs/dbcontext-sql-template","h":"#9165-反馈与建议","p":1284},{"i":1307,"t":"入门条件 对 EF/EFCore 有一定基础了解,还未接触的可先看 【EFCore 基础】","s":"9.0.1 入门准备","u":"/docs/dbcontext-start","h":"#901-入门准备","p":1305},{"i":1309,"t":"tip 在本章节所在的类别中,所有数据库操作功能均需要依赖 EntityFramework Core 框架,但 Furion 框架底层并未集成 EntityFramework Core 包,而是采用动态加载程序集方式自动载入。 所以,如需使用本大类数据库功能,需安装对应的 EntityFramework Core 数据库包: SqlServer:Microsoft.EntityFrameworkCore.SqlServer (支持 SqlServer 2005 +) Sqlite:Microsoft.EntityFrameworkCore.Sqlite Cosmos:Microsoft.EntityFrameworkCore.Cosmos InMemoryDatabase:Microsoft.EntityFrameworkCore.InMemory MySql Pomelo.EntityFrameworkCore.MySql:(支持 MySql 5.x +) MySql.EntityFrameworkCore:支持 (MySql 8.x +) PostgreSQL:Npgsql.EntityFrameworkCore.PostgreSQL Oracle:Oracle.EntityFrameworkCore (支持 Oracle 10 +) Firebird:FirebirdSql.EntityFrameworkCore.Firebird Dm:Microsoft.EntityFrameworkCore.Dm 小知识 这些数据库包应该安装在 Furion.EntityFramework.Core 层。特殊情况需安装在 Furion.Core 层中,如 Mysql HasCharset() 配置。","s":"9.0.1.1 安装对应数据库包","u":"/docs/dbcontext-start","h":"#9011-安装对应数据库包","p":1305},{"i":1311,"t":"using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class DefaultDbContext : AppDbContext { public DefaultDbContext(DbContextOptions options) : base(options) { } } } 特别注意 每一个数据库上下文都需继承 AppDbContext 基类,默认数据库的 TDbContextLocator 为 MasterDbContextLocator,无需显式编写。 非默认数据库则需显式继承并申明,如:AppDbContext。 想了解更多可查阅 【数据库上下文定位器】 章节。","s":"9.0.1.2 创建数据库上下文","u":"/docs/dbcontext-start","h":"#9012-创建数据库上下文","p":1305},{"i":1313,"t":"Furion 框架提供多种方式配置数据库连接字符串: appsettings.json 中配置 { \"ConnectionStrings\": { \"Sqlite3ConnectionString\": \"Data Source=./Furion.db\" } } 自定义 .json 文件配置 { \"ConnectionStrings\": { \"Sqlite3ConnectionString\": \"Data Source=./Furion.db\" } } 该方式和在 appsettings.json 的区别是自定义的 .json 文件不会自动添加到项目中,须在 Visual Studio 中配置 .json 右键属性,设置 复制 输出目录为 如果较新则复制,生成操作为:内容。 [AppDbContext] 特性配置 [AppDbContext(\"Data Source=./Furion.db\", DbProvider.Sqlite)] public class DefaultDbContext : AppDbContext { } 在注册上下文时配置 services.AddDatabaseAccessor(options => { // options.AddDb(connectionMetadata: \"配置Key或连接字符串\"); options.AddDbPool(connectionMetadata: \"配置Key或连接字符串\"); }); 在 DbContext 中配置 using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { public class DefaultDbContext : AppDbContext { public DefaultDbContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite(\"连接字符串\"); base.OnConfiguring(optionsBuilder); } } }","s":"9.0.1.3 配置连接字符串","u":"/docs/dbcontext-start","h":"#9013-配置连接字符串","p":1305},{"i":1315,"t":"Sqlite:Data Source=./Furion.db MySql:Data Source=localhost;Database=Furion;User ID=root;Password=000000;pooling=true;port=3306;sslmode=none;CharSet=utf8; SqlServer:Server=localhost;Database=Furion;User=sa;Password=000000;MultipleActiveResultSets=True;TrustServerCertificate=True; Oracle:User Id=orcl;Password=orcl;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl))) PostgreSQL:PORT=5432;DATABASE=postgres;HOST=127.0.0.1;PASSWORD=postgres;USER ID=postgres;","s":"9.0.1.4 各类数据库连接字符串配置示例","u":"/docs/dbcontext-start","h":"#9014-各类数据库连接字符串配置示例","p":1305},{"i":1317,"t":"Furion.EntityFramework.Core\\Startup.cs using Furion.DependencyInjection; using Microsoft.Extensions.DependencyInjection; namespace Furion.EntityFramework.Core { [AppStartup(600)] public sealed class FurEntityFrameworkCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { // 配置数据库上下文,支持N个数据库 services.AddDatabaseAccessor(options => { // 配置默认数据库 options.AddDbPool(); // 配置多个数据库,多个数据库必须指定数据库上下文定位器 // options.AddDbPool(); }); } } } 了解更多数据库数据库注册方式 如需了解各种数据库及版本注册方式可查阅 【多数据库注册章节】","s":"9.0.1.5 注册数据库上下文","u":"/docs/dbcontext-start","h":"#9015-注册数据库上下文","p":1305},{"i":1319,"t":"特别注意 Furion 框架默认数据迁移的程序集为:Furion.Database.Migrations,所以如果您改了程序集名称或通过 Nuget 方式安装的 Furion 包,则需要配置迁移程序集名称: services.AddDatabaseAccessor(options => { options.AddDbPool(DbProvider.Sqlite); }, \"存放迁移文件的项目名称\"); 另外,如果应用中配置了多个数据库上下文,那么所有的 迁移命令 都需要指定 -Context 数据库上下文名称 参数。如: Add-Migration v1.0.0 -Context DefaultDbContext","s":"9.0.1.6 Code First 说明","u":"/docs/dbcontext-start","h":"#9016-code-first-说明","p":1305},{"i":1321,"t":"与我们交流 给 Furion 提 Issue。","s":"9.0.2 反馈与建议","u":"/docs/dbcontext-start","h":"#902-反馈与建议","p":1305},{"i":1323,"t":"功能移除声明 以下内容包含 Exists 单词的在 Furion 2.6.0 + 版本中已移除。","s":"9.6 更新操作","u":"/docs/dbcontext-update","h":"","p":1322},{"i":1325,"t":"// ==== 同步操作 ==== // 示例一 repository.Update(user); // 示例二 user.Update(); // 示例三 repository.ChangeEntityState(user, EntityState.Modified); // 示例四 repository.Entities.Update(user); // ==== 异步操作 ==== // 示例一 await repository.UpdateAsync(user); // 示例二 await user.UpdateAsync();","s":"9.6.1 更新全部列(不立即提交)","u":"/docs/dbcontext-update","h":"#961-更新全部列不立即提交","p":1322},{"i":1327,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateNow(user); // 示例二 user.UpdateNow(); // ==== 异步操作 ==== // 示例一 await repository.UpdateNowAsync(user); // 示例二 await user.UpdateNowAsync();","s":"9.6.2 更新全部列(立即提交)","u":"/docs/dbcontext-update","h":"#962-更新全部列立即提交","p":1322},{"i":1329,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateInclude(user, new[] {\"Age\", \"Name\"}); // 示例二 repository.UpdateInclude(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 repository.UpdateInclude(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // 示例四 user.UpdateInclude(new[] {\"Age\", \"Name\"}); // 示例五 user.UpdateInclude(new[] {nameof(User.Name), nameof(User.Age)}); // 示例六 user.UpdateInclude(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // ==== 异步操作 ==== // 示例一 await repository.UpdateIncludeAsync(user, new[] {\"Age\", \"Name\"}); // 示例二 await repository.UpdateIncludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 await repository.UpdateIncludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // 示例四 await user.UpdateIncludeAsync(new[] {\"Age\", \"Name\"}); // 示例五 await user.UpdateIncludeAsync(new[] {nameof(User.Name), nameof(User.Age)}); // 示例六 await user.UpdateIncludeAsync(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值","s":"9.6.3 更新部分列(不立即提交)","u":"/docs/dbcontext-update","h":"#963-更新部分列不立即提交","p":1322},{"i":1331,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateIncludeNow(user, new[] {\"Age\", \"Name\"}); // 示例二 repository.UpdateIncludeNow(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 repository.UpdateIncludeNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // 示例四 user.UpdateIncludeNow(new[] {\"Age\", \"Name\"}); // 示例五 user.UpdateIncludeNow(new[] {nameof(User.Name), nameof(User.Age)}); // 示例六 user.UpdateInclude(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // ==== 异步操作 ==== // 示例一 await repository.UpdateIncludeNowAsync(user, new[] {\"Age\", \"Name\"}); // 示例二 await repository.UpdateIncludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 await repository.UpdateIncludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // 示例四 await user.UpdateIncludeNowAsync(new[] {\"Age\", \"Name\"}); // 示例五 await user.UpdateIncludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)}); // 示例六 await user.UpdateIncludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值","s":"9.6.4 更新部分列(立即提交)","u":"/docs/dbcontext-update","h":"#964-更新部分列立即提交","p":1322},{"i":1333,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateExclude(user, new[] {\"Age\", \"Name\"}); // 示例二 repository.UpdateExclude(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 repository.UpdateExclude(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // 示例四 user.UpdateExclude(new[] {\"Age\", \"Name\"}); // 示例五 user.UpdateExclude(new[] {nameof(User.Name), nameof(User.Age)}); // 示例六 user.UpdateExclude(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // ==== 异步操作 ==== // 示例一 await repository.UpdateExcludeAsync(user, new[] {\"Age\", \"Name\"}); // 示例二 await repository.UpdateExcludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 await repository.UpdateExcludeAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // 示例四 await user.UpdateExcludeAsync(new[] {\"Age\", \"Name\"}); // 示例五 await user.UpdateExcludeAsync(new[] {nameof(User.Name), nameof(User.Age)}); // 示例六 await user.UpdateExcludeAsync(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值","s":"9.6.5 排除特定列更新(不立即提交)","u":"/docs/dbcontext-update","h":"#965-排除特定列更新不立即提交","p":1322},{"i":1335,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateExcludeNow(user, new[] {\"Age\", \"Name\"}); // 示例二 repository.UpdateExcludeNow(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 repository.UpdateExcludeNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // 示例四 user.UpdateExcludeNow(new[] {\"Age\", \"Name\"}); // 示例五 user.UpdateExcludeNow(new[] {nameof(User.Name), nameof(User.Age)}); // 示例六 user.UpdateExcludeNow(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // ==== 异步操作 ==== // 示例一 await repository.UpdateExcludeNowAsync(user, new[] {\"Age\", \"Name\"}); // 示例二 await repository.UpdateExcludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 await repository.UpdateExcludeNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // 示例四 await user.UpdateExcludeNowAsync(new[] {\"Age\", \"Name\"}); // 示例五 await user.UpdateExcludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)}); // 示例六 await user.UpdateExcludeNowAsync(new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值","s":"9.6.6 排除特定列更新(立即提交)","u":"/docs/dbcontext-update","h":"#966-排除特定列更新立即提交","p":1322},{"i":1337,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateExists(user); // ==== 异步操作 ==== // 示例一 await repository.UpdateExistsAsync(user);","s":"9.6.7 数据存在才更新所有列(不立即提交)","u":"/docs/dbcontext-update","h":"#967-数据存在才更新所有列不立即提交","p":1322},{"i":1339,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateExistsNow(user); // ==== 异步操作 ==== // 示例一 await repository.UpdateExistsNowAsync(user);","s":"9.6.8 数据存在才更新所有列(立即提交)","u":"/docs/dbcontext-update","h":"#968-数据存在才更新所有列立即提交","p":1322},{"i":1341,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateIncludeExists(user, new[] {\"Age\", \"Name\"}); // 示例二 repository.UpdateIncludeExists(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 repository.UpdateIncludeExists(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // ==== 异步操作 ==== // 示例一 await repository.UpdateIncludeExistsAsync(user, new[] {\"Age\", \"Name\"}); // 示例二 await repository.UpdateIncludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 await repository.UpdateIncludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值","s":"9.6.9 数据存在才更新部分列(不立即提交)","u":"/docs/dbcontext-update","h":"#969-数据存在才更新部分列不立即提交","p":1322},{"i":1343,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateIncludeExistsNow(user, new[] {\"Age\", \"Name\"}); // 示例二 repository.UpdateIncludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 repository.UpdateIncludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // ==== 异步操作 ==== // 示例一 await repository.UpdateIncludeExistsNowAsync(user, new[] {\"Age\", \"Name\"}); // 示例二 await repository.UpdateIncludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 await repository.UpdateIncludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值","s":"9.6.10 数据存在才更新部分列(立即提交)","u":"/docs/dbcontext-update","h":"#9610-数据存在才更新部分列立即提交","p":1322},{"i":1345,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateExcludeExists(user, new[] {\"Age\", \"Name\"}); // 示例二 repository.UpdateExcludeExists(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 repository.UpdateExcludeExists(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // ==== 异步操作 ==== // 示例一 await repository.UpdateExcludeExistsAsync(user, new[] {\"Age\", \"Name\"}); // 示例二 await repository.UpdateExcludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 await repository.UpdateExcludeExistsAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值","s":"9.6.11 数据存在才排除特定部分列更新(不立即提交)","u":"/docs/dbcontext-update","h":"#9611-数据存在才排除特定部分列更新不立即提交","p":1322},{"i":1347,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateExcludeExistsNow(user, new[] {\"Age\", \"Name\"}); // 示例二 repository.UpdateExcludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 repository.UpdateExcludeExistsNow(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值 // ==== 异步操作 ==== // 示例一 await repository.UpdateExcludeExistsNowAsync(user, new[] {\"Age\", \"Name\"}); // 示例二 await repository.UpdateExcludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}); // 示例三 await repository.UpdateExcludeExistsNowAsync(user, new[] {nameof(User.Name), nameof(User.Age)}, true); // 忽略空值","s":"9.6.12 数据存在才排除特定部分列更新(立即提交)","u":"/docs/dbcontext-update","h":"#9612-数据存在才排除特定部分列更新立即提交","p":1322},{"i":1349,"t":"// ==== 同步操作 ==== // 示例一 repository.Update(user, user2); // 示例二 repository.Update(new List { user, user2 }); // 示例三 repository.Update(new[] {user, user2 }); // ==== 异步操作 ==== // 示例一 await repository.UpdateAsync(user, user2); // 示例二 await repository.UpdateAsync(new List { user, user2 }); // 示例三 await repository.UpdateAsync(new[] {user, user2 });","s":"9.6.13 更新多条记录(不立即提交)","u":"/docs/dbcontext-update","h":"#9613-更新多条记录不立即提交","p":1322},{"i":1351,"t":"// ==== 同步操作 ==== // 示例一 repository.UpdateNow(user, user2); // 示例二 repository.UpdateNow(new List { user, user2 }); // 示例三 repository.UpdateNow(new[] {user, user2 }); // ==== 异步操作 ==== // 示例一 await repository.UpdateNowAsync(user, user2); // 示例二 await repository.UpdateNowAsync(new List { user, user2 }); // 示例三 await repository.UpdateNowAsync(new[] {user, user2 }); 小知识 所有带 Now 结尾的表示立即提交到数据库,也就是立即调用 SaveChanges 或 SaveChangesAsync。","s":"9.6.14 更新多条记录(立即提交)","u":"/docs/dbcontext-update","h":"#9614-更新多条记录立即提交","p":1322},{"i":1353,"t":"默认情况下,EFCore 更新会更新全部列(除实体跟踪方式以外),有些时候我们希望 Null 值无需更新,这是我们只需要在更新时候配置 ignoreNullValues 参数即可,如: repository.Update(entity, ignoreNullValues: true); 也可以全局配置,在 AppDbContext 的派生类的构造函数中启用即可: using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class DefaultDbContext : AppDbContext { public DefaultDbContext(DbContextOptions options) : base(options) { InsertOrUpdateIgnoreNullValues = true; } } }","s":"9.6.15 忽略空值更新","u":"/docs/dbcontext-update","h":"#9615-忽略空值更新","p":1322},{"i":1355,"t":"与我们交流 给 Furion 提 Issue。","s":"9.6.16 反馈与建议","u":"/docs/dbcontext-update","h":"#9616-反馈与建议","p":1322},{"i":1358,"t":"视图是数据库中非常重要的对象,是一张虚拟表,通过视图我们可以对结果进行筛选缓存,同时还能实现颗粒化权限控制,如控制指定行,指定列。","s":"9.12.1 关于视图","u":"/docs/dbcontext-view","h":"#9121-关于视图","p":1356},{"i":1360,"t":"在 Furion 中实现视图的操作非常简单,只需要创建视图模型,并继承 EntityNotKey 基类即可。代码如下:","s":"9.12.2 视图的使用","u":"/docs/dbcontext-view","h":"#9122-视图的使用","p":1356},{"i":1362,"t":"CREATE VIEW V_Person AS SELECT Id,Name,Age,Address FROM person","s":"9.12.2.1 创建视图 SQL","u":"/docs/dbcontext-view","h":"#91221-创建视图-sql","p":1356},{"i":1364,"t":"using Furion.DatabaseAccessor; namespace Furion.Core { public class V_Person : EntityNotKey { /// /// 配置视图名 /// public V_Person() : base(\"V_Person\") { } /// /// 主键Id /// public int Id { get; set; } /// /// 姓名 /// public string Name { get; set; } /// /// 年龄 /// public int Age { get; set; } /// /// 住址 /// public string Address { get; set; } } } 视图名称 视图实体只需要继承 EntityNotKey 基类并编写无参构造函数继承 base(\"视图名称\") 即可。","s":"9.12.2.2 视图模型","u":"/docs/dbcontext-view","h":"#91222-视图模型","p":1356},{"i":1366,"t":"视图除了不能操作(写)以外,其他操作和表操作无异。 var vEntities = v_repository.Where(u => u.Id >10).ToList();","s":"9.12.3 视图使用","u":"/docs/dbcontext-view","h":"#9123-视图使用","p":1356},{"i":1368,"t":"由于视图是虚拟表,不应该对其进行写操作,所以应该采用 只读仓储初始化视图: using Furion.Core; using Furion.DatabaseAccessor; using Furion.DynamicApiController; using System.Collections.Generic; using System.Threading.Tasks; namespace Furion.Application.Persons { public class FurionService : IDynamicApiController { private readonly IReadableRepository _readableRepository; public FurionService(IRepository repository) { // 初始化只读仓储 _readableRepository = repository.Constraint>(); } /// /// 读取视图 /// /// public async Task> GetVPerson() { var list = await _readableRepository.AsQueryable().ToListAsync(); return list; } } } 小知识 通过 .Constraint 方法可以将仓储约束为特定仓储,如只读仓储,可读可写仓储,只新增仓储等。","s":"9.12.4 视图最佳读取方式 ✔","u":"/docs/dbcontext-view","h":"#9124-视图最佳读取方式-","p":1356},{"i":1370,"t":"与我们交流 给 Furion 提 Issue。","s":"9.12.5 反馈与建议","u":"/docs/dbcontext-view","h":"#9125-反馈与建议","p":1356},{"i":1372,"t":"精简发布文件 如果需要精简发布后的文件,也就是删除不必要的文件夹,可以编辑 Web 项目的 .csproj 并添加 en-US,如: net6.0 en-US ","s":"34.2 在 Docker 部署","u":"/docs/deploy-docker","h":"","p":1371},{"i":1374,"t":"在 Docker 中部署网站有两种方式: 发布后构建:此方式是先发布网站后在再构建镜像,这样可以减少不必要的构建层,而且还能缩减镜像大小。(推荐) 编译+构建+发布:也就是说在 Dockerfile 中配置网站从构建到发布的完整过程,此方式会速度慢,而且会产生冗余层,增加镜像大小。","s":"34.2.1 关于 Docker 部署","u":"/docs/deploy-docker","h":"#3421-关于-docker-部署","p":1371},{"i":1377,"t":"👉 发布网站 首先在 Visual Studio 或 dotnet cli 中发布网站,可以参考 在 IIS 部署-发布网站 👉 编写 Dockerfile FROM mcr.microsoft.com/dotnet/aspnet:5.0.9 WORKDIR /app EXPOSE 80 EXPOSE 443 COPY . . ENTRYPOINT [\"dotnet\", \"Furion.Web.Entry.dll\"] 👉 将 Dockerfile 文件拷贝到发布根目录 将编写好的 Dockerfile 文件(注意 D 大写)拷贝到发布网站的根目录下。 👉 构建 Docker 镜像 在网站发布后的路径根目录下(必须含 Dockerfile)打开 CMD/PowerShell 只需构建命令: docker build -t 网站名称:网站版本号 . 特别注意 后端的 . 不能省略 👉 启动镜像 docker run --name 容器名称 -p 5000:80 --restart=always -d 网站名称:网站版本号 发布到 hub.docker.com 如果需要将该网站的镜像公开出去,那么可以发布到 hub.docker.com 中。发布步骤如下: 👉 为镜像打 tag 标签 docker tag 网站名称:网站版本号 docker账号名/网站名称:网站版本号 如: docker tag furion:v2.20 monksoul/furion:v2.20 👉 登录 docker docker login 👉 推送到 hub.docker.com docker push docker账号名/网站名称:网站版本号 如: docker push monksoul/furion:v2.20","s":"34.2.2.1 发布后构建","u":"/docs/deploy-docker","h":"#34221-发布后构建","p":1371},{"i":1379,"t":"此方式可以偷懒,但是不太推荐,不过在某些场景下非常有用,就是集成 Devops 工具链可以做到一步到位。 👉 编写 Dockerfile 这种方式只需要把 Dockerfile 内容替换成以下即可: FROM mcr.microsoft.com/dotnet/sdk:5.0.9 AS build WORKDIR /source # Download Source RUN git init RUN git remote add -t master -m master origin 你的源码Git地址 RUN git config core.sparseCheckout true RUN echo samples >> .git/info/sparse-checkout RUN git pull --depth 1 origin main # Restore And Publish WORKDIR /source/samples RUN dotnet restore RUN dotnet publish -c release -o /app --no-restore # Run FROM mcr.microsoft.com/dotnet/aspnet:5.0.9 WORKDIR /app COPY --from=build /app ./ EXPOSE 80 EXPOSE 443 ENTRYPOINT [\"dotnet\", \"Furion.Web.Entry.dll\"] 👉 在 Dockerfile 所在路径构建 接下来的步骤和上述步骤一致,不再重复编写。","s":"34.2.2.2 编译+构建+发布","u":"/docs/deploy-docker","h":"#34222-编译构建发布","p":1371},{"i":1381,"t":"与我们交流 给 Furion 提 Issue。","s":"34.2.3 反馈与建议","u":"/docs/deploy-docker","h":"#3423-反馈与建议","p":1371},{"i":1383,"t":"阅前必读 由于很多朋友第一次接触 依赖注入/控制反转 的架构理念,所以没搞明白 作用域 和 多线程解析服务 的问题,从而不正确的使用导致内存不断飙高,正确的方式应该是: 尽可能的采用构造函数注入(如果这个类支持) 在非静态中(但在 Web 请求有效的声明周期内)可安全使用 App.GetService<> 解析服务,如果是 单例服务,优先推荐构造函数注入或 App.RootServices.GetService<> 方式 🤐 在非 Web 环境、多线程环境、物联网等环境(含事件总线、定时任务等)🏒 除单例服务以外 🏒 必须采用 Scoped.Create() 方式创建作用域且服务在内部委托中解析! 🤐","s":"12. 依赖注入/控制反转","u":"/docs/dependency-injection","h":"","p":1382},{"i":1385,"t":"所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。 通俗来讲,就是把有依赖关系的类放到容器中,然后在我们需要这些类时,容器自动解析出这些类的实例。 依赖注入最大的好处是实现类的解耦,利于程序拓展、单元测试、自动化模拟测试等。 依赖注入的英文为:Dependency Injection,简称 DI","s":"12.1 依赖注入","u":"/docs/dependency-injection","h":"#121-依赖注入","p":1382},{"i":1387,"t":"控制反转只是一个概念,也就是将创建对象实例的控制权(原本是程序员)从代码控制权剥离到 IOC 容器 中控制。 控制反转的英文为:Inversion of Control,简称 IOC","s":"12.2 控制反转","u":"/docs/dependency-injection","h":"#122-控制反转","p":1382},{"i":1389,"t":"传统的代码,每个对象负责管理与自己需要依赖的对象,导致如果需要切换依赖对象的实现类时,需要修改多处地方。同时,过度耦合也使得对象难以进行单元测试。 优点 依赖注入把对象的创造交给外部去管理,很好的解决了代码紧耦合(tight couple)的问题,是一种让代码实现松耦合(loose couple)的机制 松耦合让代码更具灵活性,能更好地应对需求变动,以及方便单元测试 缺点 目前主流的 IOC/DI 基本采用反射的方式来实现依赖注入,在一定程度会影响性能 特别说明 在本章节不打算细讲 依赖注入/控制反转 具体实现和应用场景,想了解更多知识,可查阅 【ASP.NET Core 依赖注入】 官方文档。","s":"12.3 IOC/DI 优缺点","u":"/docs/dependency-injection","h":"#123-iocdi-优缺点","p":1382},{"i":1392,"t":"目前构造方法注入是依赖注入推荐使用方式。 优点 在构造方法中体现出对其他类的依赖,一眼就能看出这个类需要依赖哪些类才能工作 脱离了 IOC 框架,这个类仍然可以工作,POJO 的概念 一旦对象初始化成功了,这个对象的状态肯定是正确的 缺点 构造函数会有很多参数(Bad smell) 有些类是需要默认构造函数的,比如 MVC 框架的 Controller 类,一旦使用构造函数注入,就无法使用默认构造函数 这个类里面的有些方法并不需要用到这些依赖(Bad smell) 代码示例: public class FurionService { private readonly IRepository _repository; public FurionService(IRepository repository) { _repository = repository; } }","s":"12.4.1 构造方法注入","u":"/docs/dependency-injection","h":"#1241-构造方法注入","p":1382},{"i":1394,"t":"特别声明 在 Furion 新版本中,已经移除属性注入功能,建议使用构造函数或方法方式注入,也可以通过 App.GetService 方式注入。 通过属性方式注入容易和类的实例属性混淆,不建议使用。 优点 在对象的整个生命周期内,可以随时动态的改变依赖 非常灵活 缺点 对象在创建后,被设置依赖对象之前这段时间状态是不对的 不直观,无法清晰地表示哪些属性是必须的 public class FurionService { public IRepository Repository { get; set; } }","s":"12.4.2 属性方式注入","u":"/docs/dependency-injection","h":"#1242-属性方式注入","p":1382},{"i":1396,"t":"方法参数注入的意思是在创建对象后,通过自动调用某个方法来注入依赖。 优点: 比较灵活 缺点: 新加入依赖时会破坏原有的方法签名,如果这个方法已经被其他很多模块用到就很麻烦 与构造方法注入一样,会有很多参数 public class FurionService { public Person GetById([FromServices]IRepository repository, int id) { return repository.Find(id); } }","s":"12.4.3 方法参数注入","u":"/docs/dependency-injection","h":"#1243-方法参数注入","p":1382},{"i":1399,"t":"暂时生存期服务是每次从服务容器进行请求时创建的。 这种生存期适合轻量级、 无状态的服务。 在处理请求的应用中,在请求结束时会释放暂时服务。 通常我们使用 ITransient 接口依赖表示该生命周期。","s":"12.5.1 暂时/瞬时 生存期","u":"/docs/dependency-injection","h":"#1251-暂时瞬时-生存期","p":1382},{"i":1401,"t":"作用域生存期服务针对每个客户端请求(连接)创建一次。在处理请求的应用中,在请求结束时会释放有作用域的服务。 通常我们使用 IScoped 接口依赖表示该生命周期。","s":"12.5.2 作用域 生存期","u":"/docs/dependency-injection","h":"#1252-作用域-生存期","p":1382},{"i":1403,"t":"在首次请求它们时进行创建,之后每个后续请求都使用相同的实例。 通常我们使用 ISingleton 接口依赖表示该生命周期。 了解更多 想了解更多 服务生存期 知识可查阅 ASP.NET Core - 依赖注入 - 服务生存期 章节。","s":"12.5.3 单例 生存期","u":"/docs/dependency-injection","h":"#1253-单例-生存期","p":1382},{"i":1405,"t":"Furion 框架提供三个接口依赖分别对应不同的服务生存期: ITransient:对应暂时/瞬时作用域服务生存期 IScoped:对应请求作用域服务生存期 ISingleton:对应单例作用域服务生存期 特别注意 以上三个接口只能实例类实现,其他静态类、抽象类、及接口不能实现。","s":"12.6 内置依赖接口","u":"/docs/dependency-injection","h":"#126-内置依赖接口","p":1382},{"i":1408,"t":"创建 IBusinessService 接口和 BusinessService 实现类,代码如下: using Furion.Core; using Furion.DatabaseAccessor; using Furion.DependencyInjection; namespace Furion.Application { public interface IBusinessService { Person Get(int id); } public class BusinessService : IBusinessService, ITransient { private readonly IRepository _personRepository; public BusinessService(IRepository personRepository) { _personRepository = personRepository; } public Person Get(int id) { return _personRepository.Find(id); } } } 创建 PersonController 控制器,代码如下: using Furion.Application; using Microsoft.AspNetCore.Mvc; namespace Furion.Web.Entry.Controllers { [Route(\"api/[controller]\")] [ApiController] public class PersonController : ControllerBase { private readonly IBusinessService _businessService; public PersonController(IBusinessService businessService) { _businessService = businessService; } [HttpGet] public IActionResult Get(int id) { var person = _businessService.Get(id); return new JsonResult(person); } } } 例子解说 Furion 框架提供了非常灵活且方便的实现依赖注入的方式,只需要实例类继承对应生存期的接口即可,这里继承了 ITransient,也就表明了这是一个 暂时/瞬时 作用域实例类。该类就可以作为被注入对象,同时也能注入其他接口对象。 上面的例子中,BusinessService 注入了 IRepository 仓储接口,同时 PersonController 控制器注入了 IBusinessService 接口。 这样 PersonController 和 BusinessService 之间就实现了解耦,不再依赖于具体的 BusinessService 实例。 这就是依赖注入/控制反转最经典的例子。","s":"12.7.1 第一个例子","u":"/docs/dependency-injection","h":"#1271-第一个例子","p":1382},{"i":1410,"t":"创建 IBusinessService 接口和 BusinessService 实现类,代码如下: using Furion.Core; using Furion.DatabaseAccessor; using Furion.DependencyInjection; namespace Furion.Application { public interface IBusinessService { Person Get(int id); } public class BusinessService : IBusinessService, ITransient { private readonly IRepository _personRepository; public BusinessService(IRepository personRepository) { _personRepository = personRepository; } public Person Get(int id) { return _personRepository.Find(id); } } } 创建 PersonController 控制器,代码如下: using Furion.Application; using Microsoft.AspNetCore.Mvc; namespace Furion.Web.Entry.Controllers { [Route(\"api/[controller]\")] [ApiController] public class PersonController : ControllerBase { private readonly IBusinessService _businessService; public PersonController(IBusinessService businessService) { _businessService = businessService; } [HttpGet] public IActionResult Get(int id) { var person = _businessService.Get(id); return new JsonResult(person); } } }","s":"12.7.2 注册泛型实例","u":"/docs/dependency-injection","h":"#1272-注册泛型实例","p":1382},{"i":1412,"t":"默认情况下,一个接口只对应一个实现类,但有些特殊情况,需要多个实现类注册同一个接口,如 DbContext 多数据库情况。 这个时候我们可以通过依赖注入 Func 委托来解析多个实例,其中委托的参数分别为: 参数 1:string 类型,不同实现类唯一标识,默认为 nameof(实现类) 名称 参数 2:Type 类型,IPrivateDependency 派生接口,也就是 ITransient、IScoped、ISingleton 返回值:object 类型,返回具体的实现类实例 创建 IBusinessService 接口和 BusinessService、OtherBusinessService 两个实现类,代码如下: using Furion.DependencyInjection; namespace Furion.Application { public interface IBusinessService { string GetName(); } public class BusinessService : IBusinessService, ITransient { public string GetName() { return \"我是:\" + nameof(BusinessService); } } public class OtherBusinessService : IBusinessService, ITransient { public string GetName() { return \"我是:\" + nameof(OtherBusinessService); } } } 新版本,推荐使用 在 Furion 3.8.6+ 版本之后新增了 INamedServiceProvider 服务接口,可替代 Func 方式: using Furion.Application.Services; namespace Furion.Application; public class TestNamedServices : IDynamicApiController { private readonly INamedServiceProvider _namedServiceProvider; public TestNamedServices(INamedServiceProvider namedServiceProvider) { _namedServiceProvider = namedServiceProvider; } public string GetName() { // 第一种用法,通过反射解析服务周期,性能有损耗 var service1 = _namedServiceProvider.GetService(nameof(BusinessService)); var service2 = _namedServiceProvider.GetService(nameof(OtherBusinessService)); // 第二种用法,无需反射,注意下面的泛型参数传入的是生命周期依赖接口,ITransient, IScoped, ISingleton var service3 = _namedServiceProvider.GetService(nameof(BusinessService)); var service4 = _namedServiceProvider.GetService(nameof(OtherBusinessService)); return service1.GetName() + \"-\" + service2.GetName() + \"-\" + service3.GetName() + \"-\" + service4.GetName(); } } 不再推荐 Func 方式 using Furion.Application; using Furion.DependencyInjection; using Microsoft.AspNetCore.Mvc; using System; namespace Furion.Web.Entry.Controllers { [Route(\"api/[controller]\")] [ApiController] public class ValueController : ControllerBase { private readonly IBusinessService _businessService; private readonly IBusinessService _otherBusinessService; public ValueController(Func resolveNamed) { _businessService = resolveNamed(\"BusinessService\", default) as IBusinessService; _otherBusinessService = resolveNamed(\"OtherBusinessService\", default) as IBusinessService; } [HttpGet] public string GetName() { return _businessService.GetName() + \"----------\" + _otherBusinessService.GetName(); } } } 小知识 如果需要自定义解析名称,只需要贴 [Injection(Named = \"名称\")] 即可,如: using Furion.DependencyInjection; namespace Furion.Application { [Injection(Named = \"BusName1\")] public class BusinessService : IBusinessService, ITransient { // ... } [Injection(Named = \"BusName2\")] public class OtherBusinessService : IBusinessService, ITransient { // ... } } 解析服务: _businessService = resolveNamed(\"BusName1\", default) as IBusinessService; _otherBusinessService = resolveNamed(\"BusName2\", default) as IBusinessService;","s":"12.7.3 一个接口多个实现","u":"/docs/dependency-injection","h":"#1273-一个接口多个实现","p":1382},{"i":1414,"t":"有些时候,我们不想定义接口,而是想把实例类作为可依赖注入的对象,如 MVC 中的控制器。 创建 SelfService 实例类,代码如下: using Furion.Core; using Furion.DatabaseAccessor; using Furion.DependencyInjection; namespace Furion.Application { public class SelfService : ITransient { private readonly IRepository _personRepository; public SelfService(IRepository personRepository) { _personRepository = personRepository; } public Person Get(int id) { return _personRepository.Find(id); } } } 创建 ValueController 控制器,代码如下: using Furion.Application; using Furion.Core; using Microsoft.AspNetCore.Mvc; namespace Furion.Web.Entry.Controllers { [Route(\"api/[controller]\")] [ApiController] public class ValueController : ControllerBase { private readonly SelfService _selfService; public ValueController(SelfService selfService) { _selfService = selfService; } [HttpGet] public Person Get(int id) { return _selfService.Get(id); } } }","s":"12.7.4 无接口方式","u":"/docs/dependency-injection","h":"#1274-无接口方式","p":1382},{"i":1416,"t":"Furion 框架提供 [Injection] 特性可以改变注册方式,同时还能配置 AOP 拦截。 [Injection] 提供以下配置支持: Action:配置注册行为,InjectionActions 类型,可选值: Add:默认值,表示无限制添加注册服务,该方式支持一个接口多个实现 TryAdd:表示注册已存在则跳过注册 Pattern:配置注册选项,InjectionPatterns 类型,可选值: Self:只注册自己 FirstInterface:只注册第一个接口 SelfWithFirstInterface:注册自己和第一个接口 ImplementedInterfaces:注册所有接口 All:注册自己包括所有接口 ,默认值 Named:配置实例别名,通过别名可以解析接口,如同一个接口有多个实现,那么可以通过别名解析不同的实现,默认只为实现类的类名 Order:注册排序,数字越大,则越在最后注册,默认 0 Proxy:配置代理拦截类型,也就是 AOP,代理类型必须继承 AspectDispatchProxy 类和 IDispatchProxy 接口,无默认值 ExpectInterfaces:配置忽略注册的接口,Type[] 类型","s":"12.8 [Injection] 特性配置","u":"/docs/dependency-injection","h":"#128-injection-特性配置","p":1382},{"i":1418,"t":"默认情况下,Furion 提供的注册方式可以满足大多数依赖注入的需求,如有特别注册需求,只需要在 Startup 中配置即可,如: services.AddScoped(typeof(ISpecService), provider = > { // 自定义任何创建实例的方式 var instance = new SpecService(); // 或者可以通过 AOP插件返回代理实例 return instance; }); 补充说明 Furion 框架中的 AppDbContext 数据库上下文还有 ISqlDispatchProxy 都是通过这种方式创建的。 知识导航 想了解更多自定义高级中注册,可查阅 【ASP.NET Core 依赖注入】 官方文档。","s":"12.9 自定义高级注册","u":"/docs/dependency-injection","h":"#129-自定义高级注册","p":1382},{"i":1420,"t":"除了在代码中实现依赖注入,也可以实现动态依赖注入,无需修改代码或重新编译即可实现热插拔(插件)效果。配置如下: { \"DependencyInjectionSettings\": { \"Definitions\": [ { \"Interface\": \"Furion.Application;Furion.Application.ITestService\", \"Service\": \"Furion.Application;Furion.Application.TestService\", \"RegisterType\": \"Transient\", \"Action\": \"Add\", \"Pattern\": \"SelfWithFirstInterface\", \"Named\": \"TestService\", \"Order\": 1, \"Proxy\": \"Furion.Application;Furion.Application.LogDispathProxy\" } ] } } 配置说明: DependencyInjectionSettings:依赖注入配置根节点 Definitions:动态依赖注入配置节点,ExternalService 数组类型 ExternalService:配置单个依赖注入信息 Interface:配置依赖接口信息,格式:程序集名称;接口完整名称,如:Furion.Application;Furion.Application.ITestService Service:配置接口实现信息,格式同上 RegisterType:配置依赖注入的对象生存期,取值:Transient,Scoped,Singleton Action:注册行为,可选值:Add,TryAdd,参见 #128-injection-特性配置 Pattern:注册选项,参见 #128-injection-特性配置 Named:注册别名,参见 #128-injection-特性配置 Order:注册排序,参见 #128-injection-特性配置 Proxy:配置代理拦截,格式:程序集名称;代理类完整名称,参见 #128-injection-特性配置 关于外部程序集 如果动态注入的对象是外部程序集,那么首先先注册外部程序集: { \"AppSettings\": { \"ExternalAssemblies\": [\"外部程序集名称\", \"Taobao.Pay\"] // 支持多个 } }","s":"12.10 appsettings.json 配置注册","u":"/docs/dependency-injection","h":"#1210-appsettingsjson-配置注册","p":1382},{"i":1422,"t":"Furion 框架中,默认注册顺序是按照程序集扫描顺序进行注册,如果需要改变注册顺序,可通过 [Injection(Order)] 特性指定,Order 值越大,则越在最后注册。 另外 appsettings.json 配置的优先级最大,appsettings.json 配置的注册会覆盖之前所有注册。","s":"12.11 注册顺序和优先级","u":"/docs/dependency-injection","h":"#1211-注册顺序和优先级","p":1382},{"i":1424,"t":"关于动态 API 和服务的区别 如果您的服务是动态 API,那么请使用 动态 API - AOP 拦截,原因是动态 API 本质是控制器,所以采用 Filter 方式。 AOP 是非常重要的思想和技术,也就是 面向切面 编程,可以让我们在不改动原来代码的情况下进行动态篡改业务代码。 在 Furion 框架中,实现 Aop 非常简单,如: 假设我们有 ITestService 和 TestService 两个类型: public interface ITestService { string SayHello(string word); } public class TestService: ITestService, ITransient { public string SayHello(string word) { return $\"Hello {word}\"; } } 现在我们有一个需求,我们希望调用 SayHello 的时候可以记录日志和权限控制(之前没有考虑到的需求)。 这个时候我们只需要创建一个代理类即可,如 LogDispatchProxy using Furion.DependencyInjection; using System; using System.Reflection; namespace Furion.Application { public class LogDispatchProxy : AspectDispatchProxy, IDispatchProxy { /// /// 当前服务实例 /// public object Target { get; set; } /// /// 服务提供器,可以用来解析服务,如:Services.GetService() /// public IServiceProvider Services { get; set; } /// /// 拦截方法 /// /// /// /// public override object Invoke(MethodInfo method, object[] args) { Console.WriteLine(\"SayHello 方法被调用了\"); var result = method.Invoke(Target, args); Console.WriteLine(\"SayHello 方法返回值:\" + result); return result; } // 异步无返回值 public override async Task InvokeAsync(MethodInfo method, object[] args) { Console.WriteLine(\"SayHello 方法被调用了\"); var task = method.Invoke(Target, args) as Task; await task; Console.WriteLine(\"SayHello 方法调用完成\"); } // 异步带返回值 public override async Task InvokeAsyncT(MethodInfo method, object[] args) { Console.WriteLine(\"SayHello 方法被调用了\"); var taskT = method.Invoke(Target, args) as Task; var result = await taskT; Console.WriteLine(\"SayHello 方法返回值:\" + result); return result; } } } 获取特性 如果需要获取方法的特性,只需要通过 method.GetActualCustomAttribute() 即可。所有获取真实的特性统一采用 method.GetActual....() 方法开头。 之后我们只需要为 TestService 增加 [Injection] 特性即可,如: [Injection(Proxy = typeof(LogDispatchProxy))] public class TestService: ITestService, ITransient { public string SayHello(string word) { return $\"Hello {word}\"; } } 之后 SayHello 方法被调用的时候就可以实现动态拦截了,比如这里写日志。","s":"12.12 Aop 注册拦截","u":"/docs/dependency-injection","h":"#1212-aop-注册拦截","p":1382},{"i":1426,"t":"Furion 框架也提供了全局拦截的方式,只需要将 IDispatchProxy 修改为 IGlobalDispatchProxy 即可。 using Furion; using System.Reflection; namespace Furion.Application { public class LogDispatchProxy : AspectDispatchProxy, IGlobalDispatchProxy { // .... } } 这样就会拦截所有的 Service,当然也可以通过给特定类贴 [SuppressProxy] 跳过全局拦截操作。 拦截优先级 [SuppressProxy] > [Injection(Proxy = typeof(LogDispatchProxy))] > 全局拦截。","s":"12.12.1 全局Aop拦截","u":"/docs/dependency-injection","h":"#12121-全局aop拦截","p":1382},{"i":1428,"t":"Furion 框架未提供 Proxy 构造函数注入功能,但是提供了 Services 属性,如果需要解析服务,则可以通过以下方式: var someServices = Services.GetService(); // 推荐方式 // 或 var someServices = App.GetService();","s":"12.12.2 AOP 注入解析服务","u":"/docs/dependency-injection","h":"#12122-aop-注入解析服务","p":1382},{"i":1430,"t":"这种面向切面的能力(动态拦截/代理)可以实现很多很多功能,如: 动态日志记录 动态修改参数 动态修改返回值 动态方法重定向 动态修改代码逻辑 动态实现异常监听 还可以做更多更多的事情。","s":"12.12.3 AOP 的作用","u":"/docs/dependency-injection","h":"#12123-aop-的作用","p":1382},{"i":1432,"t":"默认情况下,在 Web 请求开始之前会自动创建范围作用域,这个作用域的生存周期是请求之前和响应之后,也就是在这个作用域内的所有服务都实现了自动管理,比如创建服务和释放服务的时机。 但在非 Web 或多线程中,框架并不会做这样的事情,也就是框架只负责了服务的创建,但是没有负责销毁,原因是框架无法得知具体的销毁时机,这样就导致了内存溢出。 解决方式是:在非 Web 或多线程中使用服务,应该主动创建作用域,类似过去的 using,目前框架提供了几种方式。","s":"12.13 在非 Web 或多线程解析服务","u":"/docs/dependency-injection","h":"#1213-在非-web-或多线程解析服务","p":1382},{"i":1434,"t":"using var scope = serviceProvider.CreateScope(); var services = scope.ServiceProvider; // 获取数据库上下文 var dbContext = Db.GetDbContext(services); // 获取仓储 var respository = Db.GetRepository(services); // 解析其他服务 var otherService = services.GetService(); var otherService2 = App.GetService(services);","s":"12.13.1 IServiceProvider 方式","u":"/docs/dependency-injection","h":"#12131-iserviceprovider-方式","p":1382},{"i":1436,"t":"using var scope = serviceScopeFactory.CreateScope(); var services = scope.ServiceProvider;","s":"12.13.2 IServiceScopeFactory 方式","u":"/docs/dependency-injection","h":"#12132-iservicescopefactory-方式","p":1382},{"i":1438,"t":"为了方法快速创建服务作用域,Furion 框架提供了 Scoped 静态类,如: Scoped.Create((factory, scope) => { var services = scope.ServiceProvider; });","s":"12.13.3 Scoped 静态类","u":"/docs/dependency-injection","h":"#12133-scoped-静态类","p":1382},{"i":1440,"t":"Furion 框架中并未提供完全自定义依赖注入扫描的机制,但推荐一个非常优秀的 .NET Core 依赖注入拓展库:Scrutor,使用非常简单,主要通过 FromAssemblyOf<> 扫描程序集和 AddClasses(o) 进行筛选注册。 使用如下: services.Scan(scan => scan // 扫描特定类型所在的程序集,这里是 ITransientService 所在的程序集 .FromAssemblyOf() // .AddClasses 在上面获取到的程序集中扫描所有公开、非抽象类型 // 之后可以通过委托进行类型筛选,例如下面只扫描实现 ITransientService 的类型 .AddClasses(classes => classes.AssignableTo()) // 将上面的类型作为它实现的所有接口进行注册 // 如果类型实现了 N 个接口,那么就会有三个独立的注册 .AsImplementedInterfaces() // 最后指定注册的生存期,如瞬时,作用域,还是单例 .WithTransientLifetime() // 重复上面操作,比如这里扫描 IScopedService 所在的程序集 .AddClasses(classes => classes.AssignableTo()) // 这里和上面不一样的是,这里指定只实现特定的几口,也就是只注册一次 .As() // 指定注册的生存期 .WithScopedLifetime() // 也支持泛型注册,单个泛型参数 .AddClasses(classes => classes.AssignableTo(typeof(IOpenGeneric<>))) .AsImplementedInterfaces() // 多个泛型参数 .AddClasses(classes => classes.AssignableTo(typeof(IQueryHandler<,>))) .AsImplementedInterfaces()); 详细文档请查阅 https://github.com/khellang/Scrutor","s":"12.14 自定义扫描/筛选注册服务","u":"/docs/dependency-injection","h":"#1214-自定义扫描筛选注册服务","p":1382},{"i":1442,"t":"与我们交流 给 Furion 提 Issue。","s":"12.15 反馈与建议","u":"/docs/dependency-injection","h":"#1215-反馈与建议","p":1382},{"i":1444,"t":"精简发布文件 如果需要精简发布后的文件,也就是删除不必要的文件夹,可以编辑 Web 项目的 .csproj 并添加 en-US,如: net6.0 en-US ","s":"34.1 在 IIS 部署","u":"/docs/deploy-iis","h":"","p":1443},{"i":1452,"t":"安装.NET Core 运行时捆绑包:点击下载","s":"34.1.2.1 第一步","u":"/docs/deploy-iis","h":"#34121-第一步","p":1443},{"i":1454,"t":"net stop was /y","s":"34.1.2.2 第二步(命令)","u":"/docs/deploy-iis","h":"#34122-第二步命令","p":1443},{"i":1456,"t":"net start w3svc","s":"34.1.2.3 第三步(命令)","u":"/docs/deploy-iis","h":"#34123-第三步命令","p":1443},{"i":1458,"t":"set ASPNETCORE_ENVIRONMENT=Production","s":"34.1.2.4 第四步(命令)","u":"/docs/deploy-iis","h":"#34124-第四步命令","p":1443},{"i":1465,"t":"只需重启网站或应用程序池即可。","s":"34.1.3.5 重启网站","u":"/docs/deploy-iis","h":"#34135-重启网站","p":1443},{"i":1468,"t":"默认情况下,IIS拒绝 PUT和 DELETE 请求,原因为 IIS 默认注册了一个名为 WebDAVModule 的自定义 HttpModule 导致的。 解决该问题,只需要在 web.config 移除即可: 微软官方文档:https://docs.microsoft.com/zh-cn/troubleshoot/developer/webapps/iis/health-diagnostic-performance/http-error-405-website","s":"34.1.4.1 405 状态码,不支持 PUT,DELETE 请求","u":"/docs/deploy-iis","h":"#34141-405-状态码不支持-putdelete-请求","p":1443},{"i":1470,"t":"如果项目部署在 IIS 中出现 WebSoket/SignalR 不能连接或连接失败等问题,请确保 IIS 服务中的 WebSocket 协议 是勾选状态","s":"34.1.4.2 WebSocket/ SignalR 连接报错","u":"/docs/deploy-iis","h":"#34142-websocket-signalr-连接报错","p":1443},{"i":1472,"t":"有时候将发布文件发布到服务器后,出现丢失 api.ms-win.xxxx.dll 文件,这时只需要重新发布并选择服务器特定的架构即可。","s":"34.1.4.3 部署之后缺失 api-ms-win.xxxx.dll 问题","u":"/docs/deploy-iis","h":"#34143-部署之后缺失-api-ms-winxxxxdll-问题","p":1443},{"i":1474,"t":"通过 IIS 部署 .NET Core 应用程序,如果启动了系统日志,就会发现经常出现 Application is shutting down... 的日志,代表 IIS 回收了应用程序池。 对于一个长期在线的网站来说,这是非常不合理的,所以我们可以通过以下配置让 IIS 进行长时间不访问便回收的机制。 配置步骤如下: 打开 IIS 并点击左侧树根节点(计算机名称)并点击右侧的 Configuration Editor(配置编辑器) 在 Section(节)选择 system.applicationHost/applicationPools 并设置 startMode 为 AlwaysRunning,之后点击 Apply 保存。 点击左侧树根节点(计算机名称)下的 Application Pools 并点击最右侧的 Set Appliation Pool Defaults...(设置应用程序池默认配置...) 设置 Idle Time-out (minutes)(闲置超时(分钟)为 0 这样即可解决 IIS 回收问题。","s":"34.1.5 IIS 回收问题和配置","u":"/docs/deploy-iis","h":"#3415-iis-回收问题和配置","p":1443},{"i":1476,"t":"与我们交流 给 Furion 提 Issue。","s":"34.1.6 反馈与建议","u":"/docs/deploy-iis","h":"#3416-反馈与建议","p":1443},{"i":1479,"t":"利用拥有 .NET 环境的 Jenkins,进行持续化部署","s":"35.1.1 关于全 Docker 环境部署","u":"/docs/deploy-docker-auto","h":"#3511-关于全-docker-环境部署","p":1477},{"i":1481,"t":"正常在 Docker 中拉取的 Jenkins:lts 是无法执行 dotnet 命令的(就算你宿主机有 dotnet 环境、docker 中也有 dotnet 环境也不可以), 所以我们只能构建一个包含 dotnet 的镜像","s":"35.1.2 安装 Docker 版 Jenkins","u":"/docs/deploy-docker-auto","h":"#3512-安装-docker-版-jenkins","p":1477},{"i":1483,"t":"使用 Dockerfile 创建包含 dotnet 的 Jenkins 镜像 👉 编写 Dockerfile # 封装Jenkins镜像(带有dotnet环境的) sdk=5.1 FROM jenkins/jenkins:lts USER root WORKDIR /dotnet RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/* RUN wget -O dotnet.tar.gz https://download.visualstudio.microsoft.com/download/pr/820db713-c9a5-466e-b72a-16f2f5ed00e2/628aa2a75f6aa270e77f4a83b3742fb8/dotnet-sdk-5.0.100-linux-x64.tar.gz RUN tar zxf dotnet.tar.gz -C ./ RUN rm -rf dotnet.tar.gz ENV PATH=\"${PATH}:/dotnet:/var/jenkins_home/.dotnet/tools\" ENV DOTNET_ROOT=\"/dotnet\" RUN apt update -y RUN apt install icu-devtools vim zip unzip -y RUN usermod -a -G root jenkins USER jenkins 👉 命令解释 - 1. 这个Docker镜像基于jenkins - 2. 设置当前用户为root,因为后面安装需要使用root - 3. 设置当前工作目录为dotnet - 4. 下载dotnet SDK包,保存为dotnet.tar.gz。这里要注意下载正确版本的SDK,可前往微软官方网站获取下载链接:https://dotnet.microsoft.com/download - 5. 解压dotnet SDK到当前目录,即/dotnet目录 - 6. 删除dotnet SDK包 - 7. 把dotnet目录和dotnet tools目录添加到环境变量PATH,这样就可以使用dotnet命令了 - 8. 设置DOTNET_ROOT变量 - 9. 更新源 - 10. 安装一些必需的,常用的工具包,其中icu-devtools是运行dotnet需要的 - 11. 修改jenkins用户到root附加组 - 12. 设置当前用户为jenkins 👉 构建 Docker 镜像 name=jenkins:dotnet cd 到根目录下(必须含 Dockerfile) 只需构建命令: docker build -t jenkins:dotnet . 特别注意 结尾 . 不能省略","s":"35.1.2.1 使用 Dockerfile 制作镜像","u":"/docs/deploy-docker-auto","h":"#35121-使用-dockerfile-制作镜像","p":1477},{"i":1485,"t":"docker run -d -p 8080:8080 -p 50000:50000 --name mjenkins \\ --privileged=true \\ --restart always \\ -u root \\ -e TZ=\"Asia/Shanghai\" \\ -v /mudata/jenkins:/var/jenkins_home \\ -v /usr/bin/docker:/usr/bin/docker \\ -v /var/run/docker.sock:/var/run/docker.sock \\ -v /mudata/webroot/:/mudata/webroot \\ jenkins:dotnet 接下来就是比较俗套的安装 Jenkins 步骤,网上资料很多,不展开了。","s":"35.1.2.2 运行 Jenkins:dotnet 镜像","u":"/docs/deploy-docker-auto","h":"#35122-运行-jenkinsdotnet-镜像","p":1477},{"i":1488,"t":"# Jenkins 构建 测试服 echo '============查看打包环境================' pwd ls echo $PATH image_version=`date +%Y%m%d%H%M`; echo $image_version; dotnet --info dotnet --version # 获取短版本号 GITHASH=`git rev-parse --short HEAD` echo '============================begin restore=======================================' dotnet restore echo '============================end restore=======================================' #要构建的解决方案名称 solutionName=MUSaas.SCM.BasicData #docker run的容器名称 containerName=jenkinsscmbasic #指定run的端口 port=9994 #.sln文件全路径 #solutionDir=20-Solution/${solutionName}.sln #.csproj文件全路径 csprojDir=${solutionName}/${solutionName}.csproj #项目发布的目录 webDir=/mudata/webroot/jenkins/publish/webapp #归档目录 archivesDir=/mudata/webroot/jenkins/publish/archives #清空文件夹 rm -rf ${webDir}/${JOB_NAME}/* #发布网站到webDir dotnet publish ${JENKINS_HOME}/workspace/${JOB_NAME}/${csprojDir} -c Release -o ${webDir}/${JOB_NAME} /p:Version=1.0.${BUILD_NUMBER} #复制配置文件 #cp -rf /vdb1/jenkins/DotNetCoreWebPublishToDockerCommonConfigs/* ${webDir}/${JOB_NAME}/ #判斷是否存在 CID=$(docker ps | grep \"${containerName}\" | awk '{print $1}') echo $CID if [ \"$CID\" != \"\" ];then docker stop ${containerName} docker rm ${containerName} docker rmi ${containerName} #docker stop $CID #docker rm $CID fi #通过Dockerfile重新构建镜像 docker build -t ${containerName} ${webDir}/${JOB_NAME}/. #docker run容器并绑定到端口 #docker run -d -p ${port}:80 --name ${containerName} ${containerName} docker run --name ${containerName} --restart=always -d -p ${port}:${port} -v /etc/localtime:/etc/localtime:ro ${containerName} echo \"success!\" 就这样自动化部署就好了。 测试服的 Jenkins 将源码拉下来,Publish,Docker Build,Docker Run。 这里想要发布的时候,每次都需要手动去点击“构建”才会执行。也可以做成当分支合并成功后自动运行。反正 Jenkins 装好之后,你想要什么都能玩起来。比如指定分支提交后自动“构建”、比如构建成功后合并到 Master 等等","s":"35.1.3.1 编写 Shell 脚本","u":"/docs/deploy-docker-auto","h":"#35131-编写-shell-脚本","p":1477},{"i":1491,"t":"Publish Over SSH","s":"35.1.4.1 安装插件","u":"/docs/deploy-docker-auto","h":"#35141-安装插件","p":1477},{"i":1493,"t":"系统管理 => Publish over SSH","s":"35.1.4.2 配置","u":"/docs/deploy-docker-auto","h":"#35142-配置","p":1477},{"i":1495,"t":"# Jenkins 构建 正式服 echo '============查看打包环境================' pwd ls echo $PATH image_version=`date +%Y%m%d%H%M`; echo $image_version; dotnet --info dotnet --version # 获取短版本号 GITHASH=`git rev-parse --short HEAD` echo '============================begin restore=======================================' dotnet restore echo '============================end restore=======================================' #要构建的解决方案名称 solutionName=MUSaas.SCM.BulkOrder #docker run的容器名称 containerName=jenkinsscmbulk #指定run的端口 port=9986 #.csproj文件全路径 csprojDir=/${solutionName}/${solutionName}.csproj #项目发布的目录 webDir=/mudata/webroot/jenkins/publish/webapp #归档目录 archivesDir=/mudata/webroot/jenkins/publish/archives #清空文件夹 rm -rf ${webDir}/${JOB_NAME}/* #发布网站到webDir dotnet publish ${JENKINS_HOME}/workspace/${JOB_NAME}/${csprojDir} -c Release -o ${webDir}/${JOB_NAME} /p:Version=1.0.${BUILD_NUMBER} #复制配置文件 #cp -rf /vdb1/jenkins/DotNetCoreWebPublishToDockerCommonConfigs/* ${webDir}/${JOB_NAME}/ #构建远程包 rm -rf ${JENKINS_HOME}/workspace/${JOB_NAME}/publish mkdir ${JENKINS_HOME}/workspace/${JOB_NAME}/publish tar -czvf ${JENKINS_HOME}/workspace/${JOB_NAME}/publish/${JOB_NAME}.${BUILD_NUMBER}.tar.gz -C ${webDir}/${JOB_NAME} . echo \"success!\" 大概逻辑就是发布后,打个包。然后丢给远程,远程再执行 shell 注意这里一定要发布到自己的 workspace 下,防止下一步死活找不到位置。如果找不到位置,只能慢慢用 ls 命令,一级一级去测,很麻烦","s":"35.1.4.3 写脚本","u":"/docs/deploy-docker-auto","h":"#35143-写脚本","p":1477},{"i":1497,"t":"选择 Send Build artifacts over SSH Source files: publish/ Remove prefix(不填) Remote directory:/mudata/webroot/publish/ Exec command:bash /mudata/shell/publish.sh ${JOB_NAME} jenkinsscmbase ${JOB_NAME}.${BUILD_NUMBER} 9994 选择自己的 SSH 服务器 Source files:一定是 workspace 下的地址 Remote directory:远程地址,从根目录开始 Exec command:要执行的 shell。这里所有的 Jenkins 环境变量都可以用","s":"35.1.4.4 构建后操作(关键)","u":"/docs/deploy-docker-auto","h":"#35144-构建后操作关键","p":1477},{"i":1499,"t":"publish.sh # Jenkins Prod服 调用脚本 solutionName=$1 containerName=$2 filename=$3 port=$4 #.publis echo ${solutionName} echo ${containerName} echo ${filename} baseDir=/mudata/webroot/publish webDir=${baseDir}/publish/${filename} rm -rf ${webDir} mkdir ${webDir} tar -zxvf ${baseDir}/publish/${filename}.tar.gz -C ${webDir}/ rm -f ${webDir}/appsettings.json && mv ${webDir}/appsettings.Prod.json ${webDir}/appsettings.json #判斷是否存在 CID=$(docker ps | grep \"${containerName}\" | awk '{print $1}') echo $CID if [ \"$CID\" != \"\" ];then docker stop ${containerName} docker rm ${containerName} docker rmi ${containerName} #docker stop $CID #docker rm $CID fi cd ${webDir}/ && docker build -t ${containerName} . docker run --name ${containerName} --restart=always -d -p ${port}:${port} --link myredis:myredis -v /etc/localtime:/etc/localtime:ro ${containerName} 这里的逻辑就是解压,然后 Docker 相关。每次构建都是带着版本号来的。","s":"35.1.4.5 远程执行","u":"/docs/deploy-docker-auto","h":"#35145-远程执行","p":1477},{"i":1501,"t":"与我们交流 给 Furion 提 Issue。","s":"35.1.5 反馈与建议","u":"/docs/deploy-docker-auto","h":"#3515-反馈与建议","p":1477},{"i":1503,"t":"文档紧急编写中,可以查看官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-5.0","s":"34.3 在 Nginx 部署","u":"/docs/deploy-nginx","h":"","p":1502},{"i":1505,"t":"文档紧急编写中,可以先看旧文档 docker:https://monksoul.gitbook.io/hoa/dockerrongqihua Jenkins:https://monksoul.gitbook.io/hoa/devopschixubushujicheng","s":"35.2 持续部署集成","u":"/docs/devops","h":"","p":1504},{"i":1507,"t":"成为赞助商 Furion 是采用 MIT 许可的开源项目,使用完全免费。 维护这样一个庞大的生态系统和为项目开发新功能所需的巨大努力,只有在我们的赞助者慷慨的财务支持下才得以持续。","s":"1.5 支持 Furion","u":"/docs/donate","h":"","p":1506},{"i":1509,"t":"赞助 Furion 可以让您通过我们的网站和 Gitee 项目自述文件接触全球超过 5 万 Furion 开发人员。此外,支持 OSS 可以提高品牌声誉,这对于任何与开发人员互动的公司来说都是一项重要资产。 如果您使用 Furion 来构建一个创收产品,赞助它的开发是有商业意义的:它确保您的产品所依赖的项目保持健康和积极维护。社区中的曝光率和正面的品牌形象也使得吸引和招募 Furion 开发人员变得更加容易。 如果您正在构建目标客户是开发人员的产品,您将通过赞助曝光获得高质量的流量,因为我们的所有访问者都是开发人员。赞助还可以建立品牌知名度并提高转化率。 联系方式:电子邮箱 微信号。","s":"1.5.1 作为企业赞助","u":"/docs/donate","h":"#151-作为企业赞助","p":1506},{"i":1511,"t":"如果您是一个个人用户,并且喜欢使用 Furion 的生产力,请考虑通过微信手机端扫描微信赞赏码 - 就像偶尔给我买咖啡一样。如果您对微信赞赏码不满意,Gitee 也支持一次性捐赠! 您也可以尝试说服您的雇主赞助 Furion,这可能并不容易,但商业赞助通常比个人捐赠对 OSS 项目的可持续性产生更大的影响,因此如果您成功了,您将对我们提供更多帮助。 💖 赞助列表 注:排序按赞助顺序书写 赞助人昵称 赞助金额(元) 附语 🤴 爱吃油麦菜 100 感谢您的开源项目! 👳‍♂️ 麦壳饼 200 感谢您的开源项目! 👨 Sun 100 感谢您的开源项目! 👶 d617617 20 感谢您的开源项目! 👦 Diqiguoji008 16.66 见贤思齐 👲 nodyang 100 感谢您的开源项目! 👳‍♀️ mictxd 100 吹过的牛都实现。 🧓 欧流全 10 希望将来超越 Spring 👨‍⚕️ lionkon 10 ...看了框架感觉拿来学习是很不错的... 😤 好人! 10 Nice 的小僧,我们的 dotnetchina 马上火起来了 😮 木木 Woody 10 感谢您的开源项目! 😚 Joker Hou QQ 超级会员一个月 🤠 ccdfz QQ 专属红包 199 🌝 天夫李总 支付宝 6666 Furion 非常有意思,持续关注 😝 六尘子 微信红包 199 公司已经使用,小小敬意 🤠 ccdfz QQ 专属红包 200 赞助一根内存条 🤑 邓亮灯 28.88 感谢您的开源项目! 😬 天道酬勤 微信二维码 188 小小心意 🥰 却月居士 QQ 专属红包 100 恭喜发财 🤩 鲁旭 100 感谢您的开源项目! 😬 散客行 微信二维码 666 终于找到一个不错的框架 😌 本心 100 项目功能很强大 🙆‍♂️ 毕业生 100 请你喝杯咖啡 🦹‍♀️ 猪鼻子 微信二维码 668 好 🧟‍♂️ 明年·今日 200 使用的框架里最爽的,最理想的!加油 👨‍🎓 过去的过去 50 感谢您的开源项目! 👨‍🔧 万里兮 100 新公司的第一个项目从 Furion 开始 👴 Muphalem 20 很热心很亲切的开发者,加油! 💂‍♂️ 吃锅巴的码农 微信二维码 500 就冲你的文档写得好! 🤴 三重罗生门 微信红包 200 下次烤鱼你请! 🤵 李涛 10 加油,我们看到了 dotnet 美好的明天 :) 😂 !@#$%^& QQ 专属红包 100 刚接触 furion,文档真棒 😵 李斌 20 看到一个不错的框架,学习学习,感谢作者的无私奉献 😞 逞强 QQ 专属红包 20 恭喜发财 🤒 顾锦松 QQ 专属红包 200 期待文档完成时候 🧟‍♀️ 哈哈 微信赞赏码 1000 点赞作者! 🍍 Z 微信赞赏码 100 恭喜孩子诞生,谢谢大佬 🍲 海涛 50 恭喜 😣 h 微信赞赏码 100 qq82683656 👱‍♀️ 冷大大 微信赞赏码 100 加快文档和教学补充哦,另外需要钉钉群,平常不用 QQ 👜 腾坤 微信赞赏码 10 感谢您的开源项目,QQ:565728589 🚆 文耶耶 微信赞赏码 10 很棒 🎟 Cynthiax 微信转账 5000 一路看着过来,小小心意 🥴 一花一世界 微信赞赏码 10 感谢开源,感谢持续更新 🥪 。 微信赞赏码 2 感谢 🎄 微信赞赏码 20 感谢你的开源项目 🍖 班卓 微信赞赏码 9.9 新年快乐 🥖 雨天裸奔的猫 微信赞赏码 10 加油!好东西,期待更多新特性 🍖 班卓 微信赞赏码 9.9 加个鸡腿 🍘 Egota Tiya 微信赞赏码 6.66 真的不错,准备使用这个框架 🤩 李氏天下 微信赞赏码 200 坚持下去 🎗 Trube 微信赞赏码 200 感恩 🧦 不长胡子的毛 微信赞赏码 100 Fur 👓 醉酒码农 微信赞赏码 1000 单次只能赞助 200,捐赠 5 次,支持 Furion 😢 XIUXIN 微信赞赏码 20 谢大佬,春天里的第一杯奶茶 👩‍🦳 吴鹏 微信赞赏码 100 感谢这么好的框架和文档 🧔 Symmmee QQ 专属红包 20 太牛了 🤴 隐居~~~ QQ 专属红包 100 支持一下吧 👵 饭粥 微信赞赏码 66 6666666666 🎭 Free 微信赞赏码 20 感谢开源。比较敬业的架构师,支持一下 👑 时不待我 微信赞赏码 50 请你喝咖啡 😋 Eway5 微信赞赏码 99 找 abp 搜到 Furion 的,没想到国内有这么优秀的贡献者 🍛 吃瓜青蛙 微信赞赏码 100 加油,点赞 👩‍🎤 陈启表 微信赞赏码 100 敬佩开源,希望能成为未来.NET 项目框架之星!! 👨‍🔧 sunshuaize 100 感谢您的开源项目! 🚍 淘小涛 10 略尽绵薄之力,加油~大家 🍖 常松 微信赞赏码 100 开源不易,感谢您的开源 🍙 种一抹馨香 微信赞赏码 50 每次犯低级错误问你,都很耐心解答 😐 Ray 微信赞赏码 8.88 ray@wwads.cn 求合作 😁 王歆 微信赞赏码 10 略表心意,希望你的教程早些出来 🧶 Mark 微信赞赏码 166 🎡 顾龙飞 10 感谢你的开源项目 🎏 石头 微信赞赏码 20 加油,给力 😣 慢慢 微信赞赏码 100 学习学习,挺好的架构 🎊 Minhoz 微信赞赏码 8 Furion 必火,大势所趋 🏹 瓯印软件 88.88 感谢你的开源项目 🤩 独、特 10 希望越来越好 🧵 微信赞赏码 20 👸 李孟良 微信赞赏码 100 支持开源,感谢付出 🥰 易旭锋 微信赞赏码 50 😆 liupan 微信赞赏码 200 😏 君临天下 微信赞赏码 20 🎉 海绵 微信赞赏码 100 大佬加油 🎊 好名字 微信赞赏码 10 希望尽快使用上 Furion 全家桶 🤗 A.LO 微信赞赏码 100 wash 3rd foot only 🤣 朱鹏程 微信赞赏码 50 午夜小精灵 😉 空问 微信赞赏码 50 加油,感谢! 😃 某人 微信赞赏码 50 大佬,喝阔落 😃 june 微信赞赏码 10 june-WHQ 😃 A.Mr 厘米 微信赞赏码 101 加油! 😃 大漠胡杨 微信赞赏码 50 再接再厉 😃 Anybody 微信赞赏码 1000 坚持下去 😃 听风 微信赞赏码 200 🌝 dZhang Davil 支付宝 10000 great project. 🌝 aifie 50 YYDS,佩服,感谢您的开源项目! 🌝 🎄++ 微信赞赏码 10 正在学习中,大佬加油! 🌝 无服务 微信赞赏码 20 感谢你的开源项目 🌝 铭 微信赞赏码 10 🌝 生旦净末丑 微信赞赏码 200 加油,666 🌝 Mog 微信赞赏码 50 挺好用的 🌝 其实 ° 微信赞赏码 20 事件总线太好用了 🌝 SU 微信赞赏码 10 功能强度大,持续关注 🌝 微信赞赏码 100 项目挺好! 🌝 M 微信赞赏码 10 希望国货崛起 🌝 EE 微信赞赏码 20 感谢那么棒的项目 🌝 陈春胜 微信赞赏码 20 浪里星辰 🌝 whd 微信赞赏码 200 支持 🌝 Dong 微信赞赏码 20 感谢开源,聊表心意! 🌝 琳琅水月 微信赞赏码 100 非常棒。省时省力。持续关注! 🌝 种花家村长 微信赞赏码 20 希望事件总线优化一下性能 🌝 刘强 微信赞赏码 200 感谢开源!期待更好的未来! 🌝 刘强 微信转账 1000 请兄弟们吃顿饭 🌝 芝麻芯 微信赞赏码 100 初学者,感谢让我们能专注于业务 🌝 june 微信赞赏码 10 june-WHQ 🌝 jamie 微信赞赏码 10 感谢无私奉献,收获满满 🌝 君子兰 微信赞赏码 20 NET 开发者加油~ 🌝 王雾 微信赞赏码 20 希望 Furion 越来越好 🌝 李孟良 微信赞赏码 100 Furion 越来越好 赞 🌝 黄 微信赞赏码 100 感谢你的开源项目 🌝 HOMING_HNLY 微信赞赏码 10 感谢开源,敬佩持之以恒的更新! 🌝 Xukaige 微信赞赏码 5 钱虽少,一片心意,加油 🌝 快乐的小帅哥 微信赞赏码 20 支持一下,基础功能不错,节省开发时间 🌝 TR 微信赞赏码 10 很赞,小小的支持一下开源上项目! 🚍 wangshiqiao125 10 感谢您的开源项目! 🚍 Xukaige 微信赞赏码 5 钱虽少,一片心意,加油。 🚍 Coder_Army 50 感谢您的开源项目!和尚辛苦啦 🚍 fujin 微信赞赏码 166.66 感谢开源。 🚍 木三科技-软件开发 微信赞赏码 66.66 Furion 很强大,公司已开始使用,感谢开源。 🚍 dd 微信赞赏码 50 感谢您的开源项目! 🚍 chenYuAn 微信赞赏码 10 感谢您的开源项目! 🚍 keni 微信赞赏码 20 很棒,要是有纯英文版的更容易推广 🚍 Talk is cheap 微信赞赏码 30 感谢大佬无私奉献,文档细致全面,乃我辈典范 🚍 李涛 微信赞赏码 20 感谢您的开源项目,一直在使用 🚍 七色^_^ 微信赞赏码 100 坚持下去,我是你的铁杆粉丝 🚍 鱼 微信赞赏码 50 桂电鱼 🚍 文林 50 感谢您的开源项目 🚍 AndyLi 微信赞赏码 100 让.NET 开发更简单,更通用,更流行。 🚍 未来 微信赞赏码 20 从 20 年开始用到现在,感谢付出 🚍 许云 微信赞赏码 100 我还没有开始用,不管行不行,先赞助一下。 🚍 王韩广 100 感谢您的开源项目,若有官方群请私信我,谢谢! 🚍 辉 微信赞赏码 50 感谢 🚍 with you 微信赞赏码 20 感谢! 🚍 蒋状先生 微信赞赏码 99 🚍 江左梅郎-工作在浏览器上的人 微信赞赏码 10 谢谢,公司做项目里用到了这个框架 🚍 Bai Jianlong 微信赞赏码 20","s":"1.5.2 作为个人赞助","u":"/docs/donate","h":"#152-作为个人赞助","p":1506},{"i":1513,"t":"此外,您也可以将 Furion 的宣传海报转发到你的社交朋友圈、个人博客或者其他平台,让更多的人知道 Furion,这对我们有不小的帮助。","s":"1.5.3 帮助推广支持","u":"/docs/donate","h":"#153-帮助推广支持","p":1506},{"i":1516,"t":"使用过 NodeJs 的朋友一定对 npm 命令不会陌生,可以通过 npm 安装项目需要的包或环境需要的工具,在 .NET Core 2.1+ 之后,微软也推出了新的特性,Global/Local Tools,该特性功能也正是受到 npm 启发下诞生的。 不同的是,npm 中的包采用的是 Javascript 编写并发布到 https://www.npmjs.com/ 平台,而 dotnet tools 采用 C# 编写并发布到 https://www.nuget.org/ 平台供安装使用。","s":"37.1 关于包管理工具","u":"/docs/dotnet-tools","h":"#371-关于包管理工具","p":1514},{"i":1518,"t":"跨平台,支持 Linux/Mac/Windows 平台供安装使用 完整的 C# 生态支持 为所欲为~~~(拥有操作系统的权限)","s":"37.1.2 dotnet tools 包管理好处","u":"/docs/dotnet-tools","h":"#3712-dotnet-tools-包管理好处","p":1514},{"i":1520,"t":"通常包命令语法都遵循以下规则: <-|--|/>argument-name<=|:| >[\"|']value['|\"] [--] [operand] ... [operand] 在这里,Furion 将简单介绍命令常用的知识: 工具符:通常指的是你工具的唯一名称,也就是关键字,而且总是在最开头编写,如:dotnet,npm,node 短参数:短参数指的是 单个字符 的字符串,我们通常使用 - 一个横杆指定参数及值,如:-v 或 -v 0.0.1 长参数:长参数指的是一个或多个单词连接的字符串,该参数通常和 短参数 同时存在,通常使用 -- 指定参数及值,如:--version 或 --version 0.0.1 操作符:字符串中与参数值格式不匹配的任何文本都被视为操作数,任何出现在双连字符 -- 之后且未包含在单引号或双引号中且两侧有空格的文本都被视为操作数,无论它是否与参数值格式匹配,通常用于归类/分类作用。","s":"37.2 了解包命令语法","u":"/docs/dotnet-tools","h":"#372-了解包命令语法","p":1514},{"i":1522,"t":"-a foo 短参数 参数值 a foo -ab 短参数 参数值 a b -abc bar 短参数 参数值 a b c bar","s":"37.2.1 短参数例子","u":"/docs/dotnet-tools","h":"#3721-短参数例子","p":1514},{"i":1524,"t":"--foo bar 长参数 参数值 foo bar --foo --bar 长参数 参数值 foo bar --foo bar --hello world 长参数 参数值 foo bar hello world","s":"37.2.2 长参数例子","u":"/docs/dotnet-tools","h":"#3722-长参数例子","p":1514},{"i":1526,"t":"-abc foo --hello world /new=\"slashes are ok too\" 短/长参数 参数值 a b c foo hello world new slashes are ok too","s":"37.2.3 混合参数例子","u":"/docs/dotnet-tools","h":"#3723-混合参数例子","p":1514},{"i":1528,"t":"--list 1 --list 2 --list 3 长参数 参数值 list 1,2,3","s":"37.2.4 多个值参数","u":"/docs/dotnet-tools","h":"#3724-多个值参数","p":1514},{"i":1530,"t":"-a foo bar \"hello world\" -b -- -explicit operand 短参数 参数值 a foo b 操作符 bar \"hello world\" -explicit operand 了解更多关于包命令语法的官方知识:https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html","s":"37.2.5 操作符","u":"/docs/dotnet-tools","h":"#3725-操作符","p":1514},{"i":1532,"t":"dotnet tools 工具实际上是一个 控制台 应用程序,不同的是 .csproj 项目文件需要添加特定配置。下面将给大家编写一个 HelloTools 包管理工具。","s":"37.3 编写第一个包","u":"/docs/dotnet-tools","h":"#373-编写第一个包","p":1514},{"i":1535,"t":"将控制台项目标记成 dotnet tools 需要配置以下节点,如下图所示: Exe net5.0 0.0.1 第一个 dotnet tools 工具 hello-tools true true ./nupkg 配置关键节点说明​ Version:包工具版本号 Description:包工具介绍 ToolCommandName:包工具关键字,如 dotnet、npm,后续使用都是通过该关键字使用 PackAsTool:是否声明为包管理工具,设置 true GeneratePackageOnBuild:是否编译时自动生成 .nupkg 包,方便后续上传到 Nuget 平台 PackageOutputPath:配置 .nupkg 包存储目录,推荐使用 ./nupkg","s":"37.3.2 编辑 HelloTools.csproj","u":"/docs/dotnet-tools","h":"#3732-编辑-hellotoolscsproj","p":1514},{"i":1537,"t":"为了方便管理工具包开发,Furion 官方特意开发了 Furion.Tools.CommandLine 包,帮助大家快速开发管理工具包。","s":"37.3.3 安装 Furion.Tools.CommandLine 包","u":"/docs/dotnet-tools","h":"#3733-安装-furiontoolscommandline-包","p":1514},{"i":1539,"t":"我们先定义几个需求,然后编写逻辑代码: 需求一:输入 hello-tools 打印介绍信息 需求二:输入 -n 或 --name 输出 Hello 名字 需求三:输入 -v 或 --version 输出当前版本 需求四:输入 -h 或 --help 输出帮助文档 生成控制台 LOGO 不支持中文:http://patorjk.com/software/taag/#p=display&f=Big&t=Furion%20Tools 支持所有字符:https://www.qqxiuzi.cn/zh/dianzhenzi-zifu/ using Furion.Tools.CommandLine; using System; using System.Collections.Generic; namespace HelloTools { class Program { // 通过 Cli.Inject() 完成准备工作 static void Main(string[] args) => Cli.Inject(); /// /// 输出 Hello 名字 /// [Argument('n', \"name\", \"您的名字\")] static string Name { get; set; } // 定义参数处理程序,必须 [属性名]+Handler static void NameHandler(ArgumentMetadata argument) { Console.WriteLine($\"Hello {Name}\"); } /// /// 查看版本 /// [Argument('v', \"version\", \"工具版本号\")] static bool Version { get; set; } // 定义参数处理程序,必须 [属性名]+Handler static void VersionHandler(ArgumentMetadata argument) { Console.WriteLine(Cli.GetVersion()); } /// /// 查看帮助文档 /// [Argument('h', \"help\", \"查看帮助文档\")] static bool Help { get; set; } // 定义参数处理程序,必须 [属性名]+Handler static void HelpHandler(ArgumentMetadata argument) { Cli.GetHelpText(\"hello-tools\"); } // 所有未匹配的参数/操作符处理程序,固定 NoMatchesHandler 方法名 static void NoMatchesHandler(bool isEmpty, string[] operands, Dictionary noMatches) { if (isEmpty) { Console.WriteLine(@\" _ _ _ _ _______ _ | | | | | | | |__ __| | | | |__| | ___| | | ___ | | ___ ___ | |___ | __ |/ _ \\ | |/ _ \\ | |/ _ \\ / _ \\| / __| | | | | __/ | | (_) | | | (_) | (_) | \\__ \\ |_| |_|\\___|_|_|\\___/ |_|\\___/ \\___/|_|___/ \"); Console.WriteLine($\"欢迎使用{Cli.GetDescription()}\"); } } } } 代码说明 Furion 工具包提供了非常方便的 Cli.Inject() 方法,可以实现一次性完成所有初始化工作,只需要在 Main 方法调用即可 通过 [Argument(短参数,长参数,提示文档)] 定义每一个参数属性,参数必须是 static 静态 通过 [属性名]Handler 定义每个参数匹配后的处理程序,如:VersionHandler,格式为:static void 属性名Handler(ArgumentMetadata argument) 通过固定方法名 NoMatchesHandler 定义未匹配的参数及操作符,该方法有三个参数: isEmpty:判断是否没有传递任何参数,通常用于输出介绍 operands:获取所有操作符列表 noMatches:获取所有未匹配的参数字典","s":"37.3.4 编写逻辑代码","u":"/docs/dotnet-tools","h":"#3734-编写逻辑代码","p":1514},{"i":1541,"t":"包管理工具调试有别于普通的控制台,主要区别是测试各个参数的使用,也就是如何传递 Main 方法的 args 参数。只需要以下两个步骤即可: 在项目根目录添加 Properties 目录 在 Properties 目录中添加 launchSettings.json 文件,并遵循以下规则: { \"profiles\": { \"项目名称\": { \"commandName\": \"Project\", \"commandLineArgs\": \"你的命令\" } } } 项目名称:写你的项目实际名称,如:HelloTools commandName:固定为 Project commandLineArgs:编写测试命令,只需要写参数/操作符部分即可,如:-v,-v -h --Name Furion 如,我们需要测试 HelloTools 的 -n 参数 { \"profiles\": { \"HelloTools\": { \"commandName\": \"Project\", \"commandLineArgs\": \"-n Furion\" } } } 点击 运行/调试/F5 启动调试","s":"37.3.5 如何调试包工具 👏","u":"/docs/dotnet-tools","h":"#3735-如何调试包工具-","p":1514},{"i":1543,"t":"需求一:输入 hello-tools 打印介绍信息 { \"profiles\": { \"HelloTools\": { \"commandName\": \"Project\", \"commandLineArgs\": \"\" } } } 需求二:输入 -n 或 --name 输出 Hello 名字 { \"profiles\": { \"HelloTools\": { \"commandName\": \"Project\", \"commandLineArgs\": \"-n Furion\" } } } 需求三:输入 -v 或 --version 输出当前版本 { \"profiles\": { \"HelloTools\": { \"commandName\": \"Project\", \"commandLineArgs\": \"--version\" } } } 需求四:输入 -h 或 --help 输出帮助文档 { \"profiles\": { \"HelloTools\": { \"commandName\": \"Project\", \"commandLineArgs\": \"-h\" } } }","s":"37.3.6 测试各个参数情况","u":"/docs/dotnet-tools","h":"#3736-测试各个参数情况","p":1514},{"i":1545,"t":"刚刚我们已经学会调试包工具了,但是还未做到类似 npm 包一样,在 cmd/powershell 中安装之后可在命令行全局测试,下面将教大家如何实现 全局安装 和 本地安装。","s":"37.4 打包(本机)测试","u":"/docs/dotnet-tools","h":"#374-打包本机测试","p":1514},{"i":1547,"t":"全局打包安装就是配置在系统环境变量中,在任何地方都可以使用。 在 HelloTools 项目根目录下打开 cmd/powershell(尽量使用管理员工具)执行以下命令: ✔ 安装全局包​ dotnet tool install --global --add-source ./nupkg HelloTools 其中 HelloTools 就是 项目名称。 之后我们就可以通过之前 HelloTools.csproj 中配置的 hello-tools 使用了。 ✔ 测试全局包​ ✔ 更新全局包​ 如果源码发生改变,只需要编译项目后重新更新包工具即可: dotnet tool update --global --add-source ./nupkg HelloTools ✔ 卸载全局包​ dotnet tool uninstall --global HelloTools 想了解更多全局打包安装知识查阅官方文档即可:https://docs.microsoft.com/zh-cn/dotnet/core/tools/global-tools-how-to-use","s":"37.4.1 全局打包安装","u":"/docs/dotnet-tools","h":"#3741-全局打包安装","p":1514},{"i":1549,"t":"本地打包安装就是只有在项目所在目录及子孙目录方可使用。 在 HelloTools 项目根目录下打开 cmd/powershell 执行以下命令: ✔ 创建本地清单文件​ dotnet new tool-manifest 执行该命令后会自动创建 .config 文件夹并添加 dotnet-tools.json 文件: { \"version\": 1, \"isRoot\": true, \"tools\": {} } 注意事项 通常该文件内容不需要手动更改。 ✔ 安装本地包​ dotnet tool install --add-source ./nupkg HelloTools ✔ 测试本地包​ 本地包测试和全局包不一样的是本地包是通过 dotnet 关键字 参数 测试: dotnet hello-tools -n Furion ✔ 更新本地包​ 如果源码发生改变,只需要编译项目后重新更新包工具即可: dotnet tool update --add-source ./nupkg HelloTools ✔ 卸载本地包​ dotnet tool uninstall HelloTools 想了解更多本地打包安装知识查阅官方文档即可:https://docs.microsoft.com/zh-cn/dotnet/core/tools/local-tools-how-to-use","s":"37.4.2 本地打包安装","u":"/docs/dotnet-tools","h":"#3742-本地打包安装","p":1514},{"i":1551,"t":"发布到 Nuget 平台非常简单,只需要两个步骤即可: 切换项目 Debug 模式到 Release 并重新编译项目 在 Nuget 平台上传 nupkg 文件夹对应 项目名称.版本号.nupkg 文件即可:https://www.nuget.org/packages/manage/upload 上传 Nuget 平台补齐信息 建议上传到 Nuget 平台编辑 .csproj 文件补齐以下信息: Exe net5.0 0.0.1 第一个 dotnet tools 工具 hello-tools true true ./nupkg 百小僧 Baiqian Co.,Ltd. Furion © 2020-2021 百小僧, Baiqian Co.,Ltd. https://gitee.com/dotnetchina/Furion Gitee true MIT https://furion.icu 发布到 Nuget 平台后,别人就可以通过: ✔ 安装 Nuget 包到本地​ dotnet tool install --global 项目名 --version 版本号","s":"37.5 发布到 Nuget 平台 👏","u":"/docs/dotnet-tools","h":"#375-发布到-nuget-平台-","p":1514},{"i":1553,"t":"为了简化包工具的开发,Furion.Tools.CommandLine 的 Cli 静态类提供了很多方便的静态方法:","s":"37.6 Cli 静态类说明","u":"/docs/dotnet-tools","h":"#376-cli-静态类说明","p":1514},{"i":1555,"t":"// 输出空行 Cli.EmptyLine(); // 输出一行 Cli.WriteLine(\"消息\"); Cli.WriteLine(\"消息\", ConsoleColor.Blue); // 字体颜色 Cli.WriteLine(\"消息\", ConsoleColor.Blue, ConsoleColor.White); // 背景颜色 Cli.WriteLine(\"消息\", ConsoleColor.Blue, ConsoleColor.White, fillLine: true); // 填充整行 // 输出(不换行) Cli.Write(\"消息\"); Cli.Write(\"消息\", ConsoleColor.Blue); // 字体颜色 Cli.Write(\"消息\", ConsoleColor.Blue, ConsoleColor.White); // 背景颜色 Cli.Write(\"消息\", ConsoleColor.Blue, ConsoleColor.White, fillLine: true); // 填充整行 // 输出提示消息 Cli.Success(\"成功\"); Cli.Warn(\"警告\"); Cli.Error(\"错误\"); Cli.Tip(\"提示\"); // 收集用户输入(支持多行) var inputs = Cli.ReadInput(); // 输入 exit 退出输入 // 选择消息 var selectId = Cli.ReadOptions(\"请选择喜欢的水果:\", new []{ \"西瓜\", \"苹果\", \"凤梨\"}); // selectId 从 1 开始","s":"37.6.1 消息类","u":"/docs/dotnet-tools","h":"#3761-消息类","p":1514},{"i":1557,"t":"// 完成参数填充属性初始化操作 Cli.Inject(); // 获取参数所有信息 var arguments = Cli.ArgumentMetadatas; // 手动检查参数是否匹配 Cli.Check(nameof(属性名), argument => { // 如果用户输入该参数 if(argument?.IsTransmission == true){ Cli.WriteLine(argument.Value); } else { Cli.Error(\"用户没有输入\"); } }); // 只有参数匹配才进入 Cli.CheckMatch(nameof(属性名), argument => { Cli.WriteLine(argument.Value); }) // 无属性检查 Cli.Check(new[] {\"v\", \"version\"}, (isMatch, value) => { // 如果用户输入该参数 if(isMatch){ Cli.WriteLine(value); } else { Cli.Error(\"用户没有输入\"); } }); // 无属性匹配 Cli.CheckMatch(new[] {\"v\", \"version\"}, value => { Cli.WriteLine(value); }); // 所有未匹配的参数、操作符 Cli.CheckNoMatches((isEmpty, operands, noMatches) => { if (isEmpty) Cli.WriteLine($\"欢迎使用 {Cli.GetDescription()}\"); if (operands.Length > 0) Cli.Error($\"未找到该操作符:{string.Join(\",\", operands)}\"); if (noMatches.Count > 0) Cli.Error($\"未找到该参数:{string.Join(\",\", noMatches.Keys)}\"); }); // 解析 Main 方法参数信息 var argumentModel = Cli.Parse(); // 手动解析命令字符串 var argumentModel = Cli.Parse(\"-abc foo --hello world\"); // 终止输出/结束输出 Cli.Exit();","s":"37.6.2 工具类","u":"/docs/dotnet-tools","h":"#3762-工具类","p":1514},{"i":1559,"t":"// 获取当前工具包版本号 var version = Cli.GetVersion(); // 获取当前工具包描述 var description = Cli.GetDescription();","s":"37.6.2 信息类","u":"/docs/dotnet-tools","h":"#3762-信息类","p":1514},{"i":1561,"t":"我们可以通过 Environment 获取当前环境更多信息,如下图所示: // 当前执行命令目录 var currentDirectory = Environment.CurrentDirectory; // 获取机器名称 var machineName = Environment.MachineName; // 等等。。。。。","s":"37.6.3 其他类","u":"/docs/dotnet-tools","h":"#3763-其他类","p":1514},{"i":1563,"t":"与我们交流 给 Furion 提 Issue。","s":"37.7 反馈与建议","u":"/docs/dotnet-tools","h":"#377-反馈与建议","p":1514},{"i":1566,"t":"在 Furion 框架,默认推荐使用 EFCore 操作数据库,但很多朋友对 EFCore 使用不当,特意编写此文档说明。 尽可能的采用 IRepository/IRepository 仓储方式在构造函数中初始化,避免使用 Db.GetRepository 方式。 请以异步方式调用所有数据访问 api。 检索的数据不是必需的。 编写查询以仅返回当前 HTTP 请求所必需的数据。 如果数据可以接受,请考虑缓存经常访问的从数据库或远程服务检索的数据。 使用 MemoryCache 或 microsoft.web.distributedcache ,具体取决于方案。 尽量减少网络往返次数。 目标是使用单个调用而不是多个调用来检索所需数据。 如果当前请求只有数据查询,请使用无跟踪查询方式。 如果请求中含有操作数据时,请不要在 Entity Framework Core 中使用无跟踪查询。 EF Core 可以更有效地返回无跟踪查询的结果。 筛选和聚合 LINQ 查询(例如, .Where 使用.Select、或.Sum 语句),以便数据库执行筛选。 对于需要进行复杂逻辑计算查询数据情况,请尽可能在返回查询后再在客户端计算。 不要对集合使用投影查询,这可能会导致执行 \"N + 1\" 个 SQL 查询。 使用 ·DbContextPool· 池来管理 DbContext,类似 ADO.NET 的连接池。 手动或显式编译的查询 API,允许应用程序缓存查询转换,使其可仅被计算一次并执行多次。 // Create an explicitly compiled query private static Func _customerById = EF.CompileQuery((CustomerContext db, int id) => db.Customers .Include(c => c.Address) .Single(c => c.Id == id)); // Use the compiled query by invoking it using (var db = new CustomerContext()) { var customer = _customerById(db, 147); }","s":"9.29.1 EFCore 高性能","u":"/docs/efcore-recommend","h":"#9291-efcore-高性能","p":1564},{"i":1568,"t":"与我们交流 给 Furion 提 Issue。","s":"9.29.2 反馈与建议","u":"/docs/efcore-recommend","h":"#9292-反馈与建议","p":1564},{"i":1570,"t":"小知识 动态WebAPI 实际上就是将普通的类变为 Controller,也就是 动态WebAPI 就是控制器,支持控制器一切功能。","s":"5.1 动态 WebAPI","u":"/docs/dynamic-api-controller","h":"","p":1569},{"i":1572,"t":"简单来说,控制器是一个承上启下的作用,根据用户输入,执行响应行为(动作方法),同时在行为中调用模型的业务逻辑,返回给用户结果(视图)。 在 ASP.NET Core 中,控制器有两种表现形式: Mvc(带视图) WebAPI(RESTful API) Mvc 控制器 WebAPI 控制器 using Microsoft.AspNetCore.Mvc; namespace Furion.Web.Entry.Controllers { public class MvcController : Controller { public IActionResult Index() { return View(); } } } using Microsoft.AspNetCore.Mvc; namespace Furion.Web.Entry.Controllers { [Route(\"api/[controller]\")] public class WebApiController : ControllerBase { [HttpGet] public IActionResult Get() { return Content(nameof(Furion)); } } } Mvc 控制器和 WebAPI 控制器最大的区别是 WebAPI 控制器不带 视图 和通过 请求谓词和路由地址响应行为。","s":"5.1.1 什么是控制器","u":"/docs/dynamic-api-controller","h":"#511-什么是控制器","p":1569},{"i":1574,"t":"在学习动态 WebAPI 控制器之前,首先了解 ASP.NET Core 中 WebAPI 的一些约定和注意事项。","s":"5.1.2 Mvc 控制器 约定和缺点","u":"/docs/dynamic-api-controller","h":"#512-mvc-控制器-约定和缺点","p":1569},{"i":1576,"t":"在 ASP.NET Core 应用中,一个 WebAPI 控制器需遵循以下约定: 控制器类必须继承 ControllerBase 或间接继承 动作方法必须贴有 [HttpMethod] 特性,如:[HttpGet] 控制器或动作方法至少有一个配置 [Route] 特性 生成 WebAPI 路由地址时会自动去掉控制器名称 Controller 后缀,同时也会去掉动作方法匹配的 HttpVerb 谓词,如 GET,POST,DELETE,PUT 等 不支持返回非 IEnumerable 泛型对象 不支持类类型参数在 GET,HEAD 请求下生成 Query 参数 除了上述约定外,WebAPI 路由地址基本靠手工完成,不利于书写,不利于维护,再者,在移动应用对接中难以进行多版本控制。","s":"5.1.2.1 WebAPI 约定","u":"/docs/dynamic-api-controller","h":"#5121-webapi-约定","p":1569},{"i":1578,"t":"通过上一章节可以看出,ASP.NET Core 应用实现 WebAPI 需要遵循种种约定,而且容易出错。 除了这些约定,.NET Core WebAPI 有以下缺点: 路由地址基本靠手工完成 在现在移动为王的时代,不利于进行多版本控制 对接 Swagger 文档分组比较复杂 实现 Policy 策略授权也比较复杂 不支持控制器热插拔插件化 难以实现复杂自定义的 RESTful API 风格","s":"5.1.2.2 .NET Core WebAPI 缺点","u":"/docs/dynamic-api-controller","h":"#5122-net-core-webapi-缺点","p":1569},{"i":1580,"t":"针对以上 ASP.NET Core 提供的 WebAPI 必须遵循的约定和不可避免的缺点,Furion 框架创造出一种更加灵活创建 WebAPI 控制器的方式。 这个方式在继承了 ASP.NET Core WebAPI 所有优点,同时进行了大量拓展和优化。优化后的 WebAPI 具有以下优点: 具备原有的 ControllerBase 所有功能 支持任意公开 非静态 非抽象 非泛型类转控制器 提供更加灵活方便的 IDynamicApiController 空接口或 [DynamicApiController] 特性替代 ControllerBase 抽象类 无需手动配置 [HttpMethod] 特性,同时支持一个动作方法多个 HttpVerb 无需手动配置 [Route] 特性,支持更加灵活的配置及自动路由生成 支持返回泛型接口,泛型类 和 Swagger 深度结合,提供极其方便的创建 Swagger 分组配置 支持 Basic Auth,Jwt,ApiKey 等多种权限灵活配置 支持控制器、动作方法版本控制功能 支持 GET、HEAD 请求自动转换 类类型参数 支持生成 OAS3 接口规范","s":"5.1.3 动态 WebAPI 控制器","u":"/docs/dynamic-api-controller","h":"#513-动态-webapi-控制器","p":1569},{"i":1582,"t":"备注 .AddDynamicApiControllers() 默认已经集成在 AddInject() 中了,无需再次注册。也就是下列代码可不配置。 Furion.Web.Core\\FurWebCoreStartup.cs using Microsoft.Extensions.DependencyInjection; namespace Furion.Web.Core { [AppStartup(800)] public sealed class FurWebCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddDynamicApiControllers(); } } } 特别注意 .AddDynamicApiControllers() 必须在 services.AddControllers() 之后注册。","s":"5.1.4 注册动态 WebAPI 服务","u":"/docs/dynamic-api-controller","h":"#514-注册动态-webapi-服务","p":1569},{"i":1584,"t":"创建一个 FurionAppService 类继承 IDynamicApiController 接口 或 贴 [DynamicApiController] 特性,并在这个类中编写一个 Get 方法。 IDynamicApiController 方式 using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public string Get() { return $\"Hello {nameof(Furion)}\"; } } } [DynamicApiController] 方式 using Furion.DynamicApiController; namespace Furion.Application { [DynamicApiController] public class FurionAppService { public string Get() { return $\"Hello {nameof(Furion)}\"; } } } 如下图所示,一个 WebAPI 接口就这么生成了。","s":"5.1.5 第一个例子","u":"/docs/dynamic-api-controller","h":"#515-第一个例子","p":1569},{"i":1587,"t":"Furion 框架会在应用启动时注册 DynamicApiControllerFeatureProvider 控制器特性提供器,该提供器继承自 ControllerFeatureProvider 类。 接着重写 bool IsController(TypeInfo typeInfo) 方法,用来标识控制器类型。在 Furion 框架中,继承自 ControllerBase 类或 IDynamicApiController 接口或 [DynamicApiController] 特性都会被标记为控制器类型。","s":"5.1.6.1 控制器特性提供器","u":"/docs/dynamic-api-controller","h":"#5161-控制器特性提供器","p":1569},{"i":1589,"t":"Furion 框架同时在应用启动时注册 DynamicApiControllerApplicationModelConvention 应用模型转换器,该转换器继承自 IApplicationModelConvention 接口。 接着实现 void Apply(ApplicationModel application) 接口方法。在该方法中配置控制器名称、路由、导出可见性及动作方法名称、路由、导出可见性等。 实际上该方法做的就是按照 WebAPI 约定 提前帮我们配置好路由、请求谓词等信息。避免了手动配置的同时还增加了许多新特性,如版本控制。","s":"5.1.6.2 应用模型转换器","u":"/docs/dynamic-api-controller","h":"#5162-应用模型转换器","p":1569},{"i":1592,"t":"生成控制器名称默认去除以 AppServices,AppService,ApiController,Controller,Services,Service 作为前后缀的字符串。见第一个例子中的 FurionAppService -> Furion 支持自定义配置 控制器名称带 V[0-9_] 结尾的,会自动生成控制器版本号,如 FurionAppServiceV2 -> Furion@2,FurionAppServiceV1_1_0 -> Furion@1.1.0。支持版本分隔符配置 控制名称以 骆驼命名(CamelCase) 会自动切割成多个单词 - 连接。支持自定义配置","s":"5.1.7.1 控制器默认约定","u":"/docs/dynamic-api-controller","h":"#5171-控制器默认约定","p":1569},{"i":1594,"t":"生成的动作方法名称默认去除以 Post/Add/Create/Insert/Submit,GetAll/GetList/Get/Find/Fetch/Query/Search,Put/Update,Delete/Remove/Clear,Patch 开头的字符串。支持自定义配置 生成的动作方法名称默认去除以 Async 作为前后缀的字符串。支持自定义配置 动作方法名称带 V[0-9_] 结尾的,会自动生成动作方法版本号,如 ChangePasswordV2 -> ChangePassword@2,ChangePasswordV1_1_0 -> ChangePassword@1.1.0。支持版本分隔符配置 动作方法名称以 骆驼(驼峰)/帕斯卡命名(CamelCase/Pascal) 会自动切割成多个单词 - 连接。支持自定义配置 动作方法参数将自动转为小写。支持自定义配置","s":"5.1.7.2 动作方法默认约定","u":"/docs/dynamic-api-controller","h":"#5172-动作方法默认约定","p":1569},{"i":1596,"t":"动作方法名 以 Post/Add/Create/Insert/Submit/Change 开头,则添加 [HttpPost] 特性。 以 GetAll/GetList/Get/Find/Fetch/Query 开头,则添加 [HttpGet] 特性。 以 Put/Update 开头,则添加 [HttpPut] 特性。 以 Delete/Remove/Clear 开头,则添加 [HttpDelete] 特性。 以 Patch 开头,则添加 [HttpPatch] 特性 支持自定义配置 如果不在上面约定中,则默认添加 [HttpPost] 特性。支持自定义配置","s":"5.1.7.3 请求谓词默认约定","u":"/docs/dynamic-api-controller","h":"#5173-请求谓词默认约定","p":1569},{"i":1598,"t":"默认以 api 开头。支持自定义配置 默认转换为小写路由地址。支持自定义配置 生成控制器路由模板格式为:api/前置参数列表/模块名或默认区域名/[controller@版本号]/后置参数列表 生成动作方法路由模板格式为:前置参数列表/模块名/[action@版本号]/后置参数列表","s":"5.1.7.4 路由地址默认约定","u":"/docs/dynamic-api-controller","h":"#5174-路由地址默认约定","p":1569},{"i":1600,"t":"默认不处理 ControllerBase 控制器类型。支持自定义配置 默认不处理 GET,HEAD 请求的引用类型参数。支持自定义配置","s":"5.1.7.5 其他约定","u":"/docs/dynamic-api-controller","h":"#5175-其他约定","p":1569},{"i":1603,"t":"using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public string Get() { return $\"GET 请求\"; } public string Post() { return $\"POST 请求\"; } public string Delete() { return $\"DELETE 请求\"; } public string Put() { return $\"PUT 请求\"; } public string Patch() { return $\"PATCH 请求\"; } } } 如下图所示:","s":"5.1.8.1 多种请求谓词方法","u":"/docs/dynamic-api-controller","h":"#5181-多种请求谓词方法","p":1569},{"i":1605,"t":"using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public string GetVersion() { return $\"v1.0.0\"; } public string ChangeProfile() { return \"修改成功\"; } public string DeleteUser() { return \"删除成功\"; } } } 如下图所示:","s":"5.1.8.2 多个自定义动作方法","u":"/docs/dynamic-api-controller","h":"#5182-多个自定义动作方法","p":1569},{"i":1607,"t":"using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public string GetUser(int id) { return $\"{id}\"; } public string GetUser(int id, string name) { return $\"{id} {name}\"; } public TestDto Add(TestDto testDto) { return testDto; } } } 如下图所示:","s":"5.1.8.3 带参数动作方法","u":"/docs/dynamic-api-controller","h":"#5183-带参数动作方法","p":1569},{"i":1609,"t":"默认情况下,ASP.NET Core 会将 GET/HEAD 请求中的 类类型参数 设置为 [FromBody] 绑定,如: using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public TestDto GetTest(TestDto testDto) { return testDto; } } } 如下图所示: 但是,GET、HEAD 请求不支持 From Body 绑定。所以我们需要转换为 Query 查询参数。 Furion 框架支持以下两种方式配置: [FromQuery] 特性 配置 DynamicApiControllerSettings using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public TestDto GetTest([FromQuery] TestDto testDto) { return testDto; } } } Furion.Web.Entry/appsettings.json { \"DynamicApiControllerSettings\": { \"ModelToQuery\": true } } 如下图所示:","s":"5.1.8.4 GET/HEAD 类类型参数","u":"/docs/dynamic-api-controller","h":"#5184-gethead-类类型参数","p":1569},{"i":1611,"t":"Furion 框架提供了非常方便的自定义参数位置的特性 [ApiSeat],通过 [ApiSeat] 可配置参数位置,支持以下四种位置: ApiSeats.ControllerStart:控制器之前 ApiSeats.ControllerEnd:控制器之后 ApiSeats.ActionStart:动作方法之前 ApiSeats.ActionEnd:动作方法之后。默认值 using Furion.DynamicApiController; using System; namespace Furion.Application { public class FurionAppService : IDynamicApiController { // 参数默认为 ApiSeats.ActionEnd public string RouteSeat(int id, string name) { return \"配置路由参数位置\"; } public string RouteSeat( [ApiSeat(ApiSeats.ControllerStart)] int id, // 控制器名称之前 [ApiSeat(ApiSeats.ControllerEnd)] string name, // 控制器名称之后 [ApiSeat(ApiSeats.ControllerEnd)] int age, // 控制器名称之后 [ApiSeat(ApiSeats.ActionStart)] decimal weight, // 动作方法名称之前 [ApiSeat(ApiSeats.ActionStart)] float height, // 动作方法名称之前 [ApiSeat(ApiSeats.ActionEnd)] DateTime birthday) // 动作方法名称之后(默认值) { return \"配置路由参数位置\"; } } } 如下图所示: 温馨提示 多个 同位置 配置的参数将按照 定义参数顺序 进行排序。 特别注意 [ApiSeat] 只能应用于贴了 [FromRoute] 特性的参数或 基元类型、值类型、可空基元类型和可空值类型。","s":"5.1.8.5 自定义参数位置","u":"/docs/dynamic-api-controller","h":"#5185-自定义参数位置","p":1569},{"i":1613,"t":"using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; namespace Furion.Application { public class FurionAppService : IDynamicApiController { [HttpPost] public string GetVersion() { return \"1.0.0\"; } } } 如下图所示:","s":"5.1.8.6 自定义请求谓词","u":"/docs/dynamic-api-controller","h":"#5186-自定义请求谓词","p":1569},{"i":1615,"t":"using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; namespace Furion.Application { public class FurionAppService : IDynamicApiController { [HttpPost, HttpGet, AcceptVerbs(\"PUT\", \"DELETE\")] public string GetVersion() { return \"1.0.0\"; } } } 如下图所示: 特别注意 如果动作方法中含有 类类型参数,且含有 POST/PUT/DELETE 任意请求谓词,那么该参数会自动添加 [FromBody] 参数,即使在 GET/HEAD 请求中不支持。","s":"5.1.8.7 支持多个谓词","u":"/docs/dynamic-api-controller","h":"#5187-支持多个谓词","p":1569},{"i":1617,"t":"支持控制器和动作方法自定义路由: 自定义控制器路由 自定义动作方法路由 同时自定义路由 谓词自定义路由 using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; namespace Furion.Application { [Route(\"customapi/mobile/[controller]\")] public class FurionAppService : IDynamicApiController { public string GetVersion() { return \"1.0.0\"; } } } 如下图所示: using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; namespace Furion.Application { public class FurionAppService : IDynamicApiController { [Route(\"customapi/[action]\")] public string GetVersion() { return \"1.0.0\"; } } } 如下图所示: using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; namespace Furion.Application { [Route(\"customapi/mobile/[controller]\")] public class FurionAppService : IDynamicApiController { [Route(\"get/[action]\")] public string GetVersion() { return \"1.0.0\"; } } } 如下图所示: using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; namespace Furion.Application { [Route(\"api/[controller]\")] public class FurionAppService : IDynamicApiController { [HttpGet(\"get/[action]\")] public string GetVersion() { return \"1.0.0\"; } } } 如下图所示: 小提示 动作方法自定义路由如果以 / 开头,则不会合并控制器路由。 推荐配置 自定义路由如果需要用到 控制器/动作方法名称,推荐使用 [controller] 或 [action] 占位符,因为该占位符已经自动处理了 前后缀、版本号、模块名称等。","s":"5.1.8.8 支持自定义路由","u":"/docs/dynamic-api-controller","h":"#5188-支持自定义路由","p":1569},{"i":1619,"t":"Furion 框架提供了非常灵活的各种路由组合方式,支持一对多,多对多路由组合: using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; namespace Furion.Application { [Route(\"api/[controller]\")] [Route(\"api/[controller]/second\")] [Route(\"api/[controller]/three\")] public class FurionAppService : IDynamicApiController { [HttpGet] [HttpGet(\"get/[action]\")] [HttpPost] [HttpPost(\"post/cus-version\")] public string GetVersion() { return \"1.0.0\"; } } } 如下图所示: 特别注意 动作方法不能同时贴 [Route] 和 [HttpMethod] 特性,只能二取一。","s":"5.1.8.9 多路由随意组合","u":"/docs/dynamic-api-controller","h":"#5189-多路由随意组合","p":1569},{"i":1621,"t":"控制器版本 动作方法版本 using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppServiceV1 : IDynamicApiController { public string Get() { return nameof(Furion); } } public class FurionAppServiceV1_2 : IDynamicApiController { public string Get() { return nameof(Furion); } } public class FurionAppServiceV1_2_1 : IDynamicApiController { public string Get() { return nameof(Furion); } } } 如下图所示: using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public string GetV1() { return nameof(Furion); } public string GetV2_1() { return nameof(Furion); } } } 如下图所示: 版本生成原理 V[0-9_] 结尾的命名自动解析成版本号,如 FurionAppServiceV2 -> Furion@2。 版本复写 除了通过特定后缀方式以外,版本还直接通过 [ApiDescriptionSettings] 进行复写。如: [ApiDescriptionSettings(Version = \"4.0\")] public string GetV1() { return nameof(Furion); } 这时,生成版本将采用 4.0 替代 1","s":"5.1.8.10 支持版本控制","u":"/docs/dynamic-api-controller","h":"#51810-支持版本控制","p":1569},{"i":1623,"t":"有些时候,我们无需导出某个动作方法或控制器(不显示到 Swagger),只需要添加 [ApiDescriptionSettings(false)] 或 [ApiExplorerSettings(IgnoreApi = true)]即可。 另外动作方法还支持 [NonAction] 标记不是一个有效的控制器或 Action。 推荐使用 推荐控制器或动作方法设置不导出使用 [ApiDescriptionSettings(false)] 特性。该特性默认继承自 ApiExplorerSettingsAttribute 类。","s":"5.1.8.11 不公开控制器或动作方法","u":"/docs/dynamic-api-controller","h":"#51811-不公开控制器或动作方法","p":1569},{"i":1625,"t":"默认情况下,动态 API 会将控制器和方法名输出为 RESTFul 风格的路由,如需保留原有设计,只需配置: { \"DynamicApiControllerSettings\": { \"KeepName\": true, \"KeepVerb\": true, \"LowercaseRoute\": false } }","s":"5.1.8.12 保持控制器和方法命名","u":"/docs/dynamic-api-controller","h":"#51812-保持控制器和方法命名","p":1569},{"i":1627,"t":"默认情况下,所有的基元类型参数都会贴上 [FromRoute] 特性,如果需要将参数调整为 [FromQuery] 修饰,只需要在方法上面贴 [QueryParameters] 特性即可,如: [QueryParameters] public string Get(int id, string name) { return nameof($\"{id} {name}\"); } 生成的路由为:https://xxx.com?id=1&name=Furion 如果不喜欢每个都配置,也可以全局配置(只会影响基元类型的参数): { \"DynamicApiControllerSettings\": { \"UrlParameterization\": true } } 特别注意 贴了 [QueryParameters] 之后,会对所有参数影响,包括类类型参数,如果不需要处理某个参数,只需要贴 [FromXXX] 特性即可。","s":"5.1.8.13 方法参数 [FromQuery] 化/参数非必填/参数可选","u":"/docs/dynamic-api-controller","h":"#51813-方法参数-fromquery-化参数非必填参数可选","p":1569},{"i":1629,"t":"Furion 框架提供了多种参数特性配置参数绑定规则: [FromRoute]:通过路由参数绑定值 [FromQuery]:通过 Url 地址参数绑定值 [FromBody]:通过 Request Body 参数绑定值 [FromForm]:通过表单提交绑定值 [FromHeader]:通过 Request Header 参数绑定值","s":"5.1.8.14 参数绑定配置","u":"/docs/dynamic-api-controller","h":"#51814-参数绑定配置","p":1569},{"i":1631,"t":"在 Furion 框架中,在没有配置 [HttpMethod] 特性的情况下,会自动根据方法名第一个参数进行分析,并生成对应的 [HttpMethod] 特性,规则如下: 动作方法名 以 Post/Add/Create/Insert/Submit 开头,则添加 [HttpPost] 特性。 以 GetAll/GetList/Get/Find/Fetch/Query 开头,则添加 [HttpGet] 特性。 以 Put/Update 开头,则添加 [HttpPut] 特性。 以 Delete/Remove/Clear 开头,则添加 [HttpDelete] 特性。 以 Patch 开头,则添加 [HttpPatch] 特性 以 Head 开头,则添加 [HttpHead] 特性 支持自定义配置 如果不在上面约定中,则默认添加 [HttpPost] 特性。支持自定义配置 但是,有些时候这不是我们想要的规则,这时我们只需要在 appsettings.json 中配置即可: { \"DynamicApiControllerSettings\": { \"VerbToHttpMethods\": [ [\"getall\", \"HEAD\"], // => getall 会被复写为 `[HttpHead]` [\"other\", \"PUT\"] // => 新增一条新规则,比如,一 `[other]` 开头会转换为 `[HttpPut]` 请求 ] } } 特别注意 二维数组中的每一个元素的第一个元素必须是全小写,第二个元素必须是全大写大写,第二个元素取值有:HEAD, GET, PUT, POST, PATCH, DELETE","s":"5.1.8.15 自定义根据方法名生成 [HttpMethod] 规则","u":"/docs/dynamic-api-controller","h":"#51815-自定义根据方法名生成-httpmethod-规则","p":1569},{"i":1633,"t":"在 Furion v2.8.6 版本中实现了 [FromRoute] 参数非必填功能,支持以下几种方式: // 方式一,通过可空 ? public object Method1(int id, Datetime? dateTime) { } // 方式二,通过默认值 public object Method1(int id, int age = 10) { } // 方式三,默认值 + 可空 ? public object Method1(int id, int? age = 10) { } // 方式四,[FromQuery] 修饰 public object Method1(int id, [FromQuery]string keyword) { }","s":"5.1.8.16 路由参数非必填/选填","u":"/docs/dynamic-api-controller","h":"#51816-路由参数非必填选填","p":1569},{"i":1635,"t":"在 Furion v2.8.6 版本中,添加了 [RouteConstraint] 特性,可配置路由约束,如:[RouteConstraint(\":min(10)\")] // 最小值 10 public object Method1([RouteConstraint(\":min(10)\")] int id) { } [RouteConstraint] 支持路由约束符号如下: 符号 描述 例子 alpha 匹配大写或小写拉丁字母字符(a-z、A-Z) :alpha bool bool 类型 :bool datetime DateTime 类型 :datetime decimal decimal 类型 :decimal double double 类型 :double float float 类型 :float guid guid 类型 :guid int int 类型 :int long long 类型 :long length 匹配长度(字符串) :length(6) 或 :length(1,20) max 最大值 :max(10) maxlength 最大长度(字符串) :maxlength(10) min 最小值 :min(10) minlength 最小长度(字符串) :minlength(10) range 取值范围 :range(10,50) regex 正则表达式 :regex(^\\d{3}-\\d{3}-\\d{4}$)","s":"5.1.8.17 [FormRoute] 路由约束","u":"/docs/dynamic-api-controller","h":"#51817-formroute-路由约束","p":1569},{"i":1637,"t":"{ \"DynamicApiControllerSettings\": { \"LowercaseRoute\": false, \"KeepName\": true, \"AsLowerCamelCase\": true } }","s":"5.1.8.18 小驼峰 路由路径","u":"/docs/dynamic-api-controller","h":"#51818-小驼峰-路由路径","p":1569},{"i":1639,"t":"除了上述 ASP.NET Core 提供的配置外,Furion 框架还提供了非常强大且灵活的 [ApiDescriptionSettings] 特性。","s":"5.1.9 [ApiDescriptionSettings]","u":"/docs/dynamic-api-controller","h":"#519-apidescriptionsettings","p":1569},{"i":1641,"t":"Name:自定义控制器/动作方法名称,string,默认 null KeepName:是否保持原有名称不处理,bool,默认 false SplitCamelCase:切割骆驼(驼峰)/帕斯卡命名,bool,默认 true KeepVerb:是否保留动作方法请求谓词,bool,默认 false Enabled:是否导出接口,bool,默认 true Module:模块名,string,默认 null Version:版本号,string,默认 null Groups:接口分组,可结合 Swagger 一起使用,string[],默认 null Tags:接口标签,可结合 Swagger 一起使用,string[],默认 null Order:配置控制器/动作方法排序 LowercaseRoute:是否采用小写路由,bool 类型,默认 true AsLowerCamelCase:启用小驼峰命名(首字母小写),默认 false Area:配置区域名称,默认空,只作用于类中贴 Description:配置单一接口更多描述功能,只在 方法 中有效,仅限 v3.3.5+版本有效 ForceWithRoutePrefix:配置是否强制添加 DefaultRoutePrefix,当控制器自定义了 [Route] 有效,仅限 v3.4.1+版本有效","s":"5.1.9.1 内置配置","u":"/docs/dynamic-api-controller","h":"#5191-内置配置","p":1569},{"i":1643,"t":"Name 参数可以覆盖动态 WebAPI 自动生成的控制器或动作方法名称。如: using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(Name = \"MyFur\")] public class FurionAppService : IDynamicApiController { [ApiDescriptionSettings(Name = \"MyGet\")] public string Get() { return nameof(Furion); } } } 如下图所示:","s":"5.1.9.2 Name 配置","u":"/docs/dynamic-api-controller","h":"#5192-name-配置","p":1569},{"i":1645,"t":"KeepName 参数可以保留原有的控制器或动作方法名称。如: using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(KeepName = true)] public class FurionAppService : IDynamicApiController { [ApiDescriptionSettings(KeepName = true)] public string Get() { return nameof(Furion); } } } 如下图所示:","s":"5.1.9.3 KeepName 配置","u":"/docs/dynamic-api-controller","h":"#5193-keepname-配置","p":1569},{"i":1647,"t":"SplitCamelCase 参数默认将骆驼(驼峰)命名切割成多个单词并通过指定 占位符 连接起来。默认 占位符 为 -。默认为 true。如: using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(SplitCamelCase = false)] public class MyFurionAppService : IDynamicApiController { [ApiDescriptionSettings(SplitCamelCase = true)] public string ChangeUserName() { return nameof(Furion); } } } 如下图所示: 特别注意 KeepName 优先级高于 SplitCamelCase,也就是 KeepName 设置为 true,则不会处理 SplitCamelCase 参数。","s":"5.1.9.4 SplitCamelCase 配置","u":"/docs/dynamic-api-controller","h":"#5194-splitcamelcase-配置","p":1569},{"i":1649,"t":"KeepVerb 参数作用于动作方法,标识是否保留动作谓词。如: using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { [ApiDescriptionSettings(KeepVerb = true)] public string GetVersion() { return nameof(Furion); } } } 如下图所示:","s":"5.1.9.5 KeepVerb 配置","u":"/docs/dynamic-api-controller","h":"#5195-keepverb-配置","p":1569},{"i":1651,"t":"Enabled 参数配置接口是否导出。通常用于动作方法,如果用于控制器实际作用不大。 using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public string GetVersion() { return nameof(Furion); } [ApiDescriptionSettings(false)] public string NoExport() { return nameof(Furion); } } } 如下图所示:","s":"5.1.9.6 Enabled 配置","u":"/docs/dynamic-api-controller","h":"#5196-enabled-配置","p":1569},{"i":1653,"t":"Module 参数可以配置路由分离,类似于 Mvc 区域 的作用。 using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(Module = \"mobile\")] public class FurionAppService : IDynamicApiController { [ApiDescriptionSettings(Module = \"user\")] public string GetVersion() { return nameof(Furion); } } } 如下图所示:","s":"5.1.9.7 Module 配置","u":"/docs/dynamic-api-controller","h":"#5197-module-配置","p":1569},{"i":1655,"t":"Version 参数可以配置接口版本,同时又可以复写特殊版本命名配置。默认版本分隔符为 @。如: using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(Version = \"1.0\")] public class FurionAppService : IDynamicApiController { // V2.0.0 被复写成 V2.1.1 [ApiDescriptionSettings(Version = \"2.1.1\")] public string GetVersionV2_0_0() { return nameof(Furion); } } } 如下图所示:","s":"5.1.9.8 Version 配置","u":"/docs/dynamic-api-controller","h":"#5198-version-配置","p":1569},{"i":1657,"t":"Groups 配置主要用于配置 Swagger 分组信息。 通过配置 Groups 参数可以将控制器和动作方法 进行归类和多个分组直接共享。可通过 [ApiDescriptionSettings(params Groups)] 构造函数传入或指定 Groups 参数配置接口是否导出。通常用于动作方法,如果用于控制器实际作用不大。 using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(\"Default\", \"Common\")] public class FurionAppService : IDynamicApiController { public string Get() { return nameof(Furion); } [ApiDescriptionSettings(\"Custom\")] public int Get(int id) { return id; } } } 如下图所示:","s":"5.1.9.9 Groups 配置","u":"/docs/dynamic-api-controller","h":"#5199-groups-配置","p":1569},{"i":1659,"t":"Tag 配置主要用于配置 Swagger 标签分组信息及合并标签。也就是 组中组: 标签命名 合并标签 未贴标签之前​ using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } public class TestAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } } 贴标签之后​ using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(Tag = \"分组一\")] public class FurionAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } [ApiDescriptionSettings(Tag = \"分组二\")] public class TestAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } } 如下图所示: using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(Tag = \"合并所有标签\")] public class FurionAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } [ApiDescriptionSettings(Tag = \"合并所有标签\")] public class TestAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } } 如下图所示: 小知识 如果 Tag 名字一样,则会自动合并,否则只是命名。","s":"5.1.9.10 Tag 配置","u":"/docs/dynamic-api-controller","h":"#51910-tag-配置","p":1569},{"i":1661,"t":"Furion 还提供动态 WebAPI 接口一些全局配置选项,如: DefaultRoutePrefix:默认路由前缀,string,默认 api DefaultHttpMethod:默认请求谓词,string,默认:POST DefaultModule:默认模块名称(区域),可用作接口版本,string,默认:v1 LowercaseRoute:小写路由格式,bool,默认:true AsLowerCamelCase:启用小驼峰命名(首字母小写),默认 false KeepVerb:是否保留动作谓词,bool,默认:false KeepName:是否保留默认名称,bool,默认:fasle CamelCaseSeparator:骆驼(驼峰)/帕斯卡命名分隔符,string,默认:- VersionSeparator:版本分隔符,string,默认:@ ModelToQuery:GET/HEAD 请求将 类类型参数转查询参数,bool,默认 false SupportedMvcController:是否支持 Mvc Controller 动态配置,bool,默认 false UrlParameterization:路由参数采用 [FromQuery] 化,默认 false([FromRoute] 方式) DefaultArea:配置默认区域,默认 null ForceWithRoutePrefix:配置是否强制添加 DefaultRoutePrefix,当控制器自定义了 [Route] 有效,仅限 v3.4.1+版本有效 AbandonControllerAffixes:默认去除控制器名称前后缀列表名,string[],默认: AppServices AppService ApiController Controller Services Service AbandonActionAffixes:默认去除动作方法名称前后缀列表名,string[],默认: Async VerbToHttpMethods:复写默认方法名转 [HttpMethod] 规则,string[][] 二维数组类型,内置匹配规则为: [\"post\"] = \"POST\", [\"add\"] = \"POST\", [\"create\"] = \"POST\", [\"insert\"] = \"POST\", [\"submit\"] = \"POST\", [\"get\"] = \"GET\", [\"find\"] = \"GET\", [\"fetch\"] = \"GET\", [\"query\"] = \"GET\", [\"put\"] = \"PUT\", [\"update\"] = \"PUT\", [\"delete\"] = \"DELETE\", [\"remove\"] = \"DELETE\", [\"clear\"] = \"DELETE\", [\"patch\"] = \"PATCH\" 复写示例 \"DynamicApiControllerSettings\": { \"VerbToHttpMethods\": [ [ \"getall\", \"HEAD\" ], // => getall 会被复写为 `[HttpHead]` [ \"other\", \"PUT\" ] // => 新增一条新规则,比如,一 `[other]` 开头会转换为 `[HttpPut]` 请求 ] }","s":"5.1.10 DynamicApiControllerSettings 配置","u":"/docs/dynamic-api-controller","h":"#5110-dynamicapicontrollersettings-配置","p":1569},{"i":1663,"t":"默认情况下,Furion 动态 WebAPI 接口不对 ControllerBase 类型进行任何处理。当然,我们也可以手动启用 ControllerBase 支持。 Furion.Web.Entry/appsettings.json { \"DynamicApiControllerSettings\": { \"SupportedMvcController\": true } } 设置 SupportedMvcController: true 后,Mvc ControllerBase 类型也能和动态 WebAPI 一样的灵活了。代码如下: using Microsoft.AspNetCore.Mvc; namespace Furion.Web.Entry.Controllers { public class MvcController : ControllerBase { public string Get() { return nameof(Furion); } } } 注意事项 启用该配置后,如果 Mvc 控制器 没有任何 [Route] 特性,但是贴了 [ApiController] 特性将会报错。原因是 [ApiController] 特性内部做了路由特性检测。所以建议使用 [ApiDataValidation] 代替。 查看 ASP.NET Core - ApiBehaviorApplicationModelProvider 源码","s":"5.1.10.1 支持 Mvc 控制器 动态配置","u":"/docs/dynamic-api-controller","h":"#51101-支持-mvc-控制器-动态配置","p":1569},{"i":1665,"t":"动态WebAPI 支持 Controller 的所有过滤器/筛选器拦截,也就是可以通过 ActionFilter,ResultFilter 进行拦截操作。如: public class SampleAsyncActionFilter : IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context,ActionExecutionDelegate next) { // 拦截之前 var resultContext = await next(); // 拦截之后 // 异常拦截 if(resultContext.Exception != null) { } } } 详细用法可参见 ASP.NET Core 5.0 - 筛选器","s":"5.1.11 关于 AOP 拦截","u":"/docs/dynamic-api-controller","h":"#5111-关于-aop-拦截","p":1569},{"i":1667,"t":"在 Program.cs 中添加 .UseKestrel 配置即可,如: .NET5 版本 public static IHostBuilder CreateHostBuilder(string[] args) { return Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.Inject() .UseStartup() .UseKestrel(option => { option.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(20); option.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(20); }); }); } .NET6 版本 var app = builder.Build(); app.Configuration.Get().ConfigureKestrel(x => { x.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(20); x.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(20); });","s":"5.1.12 设置 api 超时请求时间","u":"/docs/dynamic-api-controller","h":"#5112-设置-api-超时请求时间","p":1569},{"i":1669,"t":"与我们交流 给 Furion 提 Issue。","s":"5.1.13 反馈与建议","u":"/docs/dynamic-api-controller","h":"#5113-反馈与建议","p":1569},{"i":1672,"t":"由于现在的互联网越具发达,数据成为了我们生活的一部分,当然也带来了很多数据安全性的问题,比如用户密码明文存储,用户信息明文存在在浏览器 cookies 中等等不安全操作。 所以,对数据的加解密是系统开发必要的环节。","s":"20.1 数据加解密","u":"/docs/encryption","h":"#201-数据加解密","p":1670},{"i":1674,"t":"MD5 加密 DESC 加解密 AES 加解密 JWT 加解密 PBKDF2 加密(Furion v2.12 + 版本已移除) RSA 加解密","s":"20.2 内置加密算法","u":"/docs/encryption","h":"#202-内置加密算法","p":1670},{"i":1677,"t":"// 测试 MD5 加密,比较 var md5Hash = MD5Encryption.Encrypt(\"百小僧\"); // 加密 var isEqual = MD5Encryption.Compare(\"百小僧\", md5Hash); // 比较 return (md5Hash, isEqual); // 输出大写 MD5 加密 var md5Hash = MD5Encryption.Encrypt(\"百小僧\", true); // 输出 16位 MD5 加密,Furion 4.2.6+ 版本 var md5Hash16 = MD5Encryption.Encrypt(\"百小僧\", is16: true);","s":"20.3.1 MD5 加密","u":"/docs/encryption","h":"#2031-md5-加密","p":1670},{"i":1679,"t":"// 测试 DESC 加解密 var descHash = DESCEncryption.Encrypt(\"百小僧\", \"Furion\"); // 加密 var str = DESCEncryption.Decrypt(descHash, \"Furion\"); // 解密 return (descHash, str);","s":"20.3.2 DESC 加解密","u":"/docs/encryption","h":"#2032-desc-加解密","p":1670},{"i":1681,"t":"// 测试 AES 加解密 var key = Guid.NewGuid().ToString(\"N\"); // 密钥,长度必须为24位或32位 var aesHash = AESEncryption.Encrypt(\"百小僧\", key); // 加密 var str2 = AESEncryption.Decrypt(aesHash, key); // 解密 return (aesHash, str2);","s":"20.3.3 AES 加解密","u":"/docs/encryption","h":"#2033-aes-加解密","p":1670},{"i":1683,"t":"var token = JWTEncryption.Encrypt(new Dictionary() // 加密 { { \"UserId\", user.Id }, { \"Account\",user.Account } }); var tokenData = JWTEncryption.ReadJwtToken(\"你的token\"); // 解密 var (isValid, tokenData, validationResult) = JWTEncryption.Validate(\"你的token\"); // 验证token有效期 特别注意 JWTEncryption 加解密并未包含在 Furion 框架中,需要安装 Furion 框架提供的 Furion.Extras.Authentication.JwtBearer 拓展包。","s":"20.3.4 JWT 加解密","u":"/docs/encryption","h":"#2034-jwt-加解密","p":1670},{"i":1685,"t":"Furion v2.12 + 版本已移除。 // 测试 PBKDF2 加密,比较 var basestring = PBKDF2Encryption.Encrypt(\"百小僧\"); // 加密 var isEqual = PBKDF2Encryption.Compare(\"百小僧\", basestring); // 比较 支持选择更多参数 PBKDF2 还可以配置更多参数: Startup.cs 中注册服务 services.AddPBKDF2EncryptionOptions(); appsettings.json 配置: { \"PBKDF2EncryptionSettings\": { \"InitialIterationCount\": 110, // 初始迭代次数累加值 \"KeyDerivation\": \"HMACSHA256\", // 加密算法规则 KeyDerivationPrf.HMACSHA256 \"NumBytesRequested\": 64 // 派生密钥的长度 (以字节为单位) 512 / 8 } } KeyDerivation 可选值有:HMACSHA1,HMACSHA256,HMACSHA512","s":"20.3.5 PBKDF2 加密","u":"/docs/encryption","h":"#2035-pbkdf2-加密","p":1670},{"i":1687,"t":"// 测试 RSA 加密 var (publicKey, privateKey) = RSAEncryption.GenerateSecretKey(2048); //生成 RSA 秘钥 秘钥大小必须为 2048 到 16384,并且是 8 的倍数 var basestring = RSAEncryption.Encrypt(\"百小僧\", publicKey); // 加密 var str2 = RSAEncryption.Decrypt(basestring, privateKey); // 解密 return (basestring, str2); 关于 RSA 签名和校验 Furion 框架底层不内置 RSA 签名和校验功能,如需添加该功能可查阅开发者提交的代码:查看 RSA 签名和校验","s":"20.3.6 RSA 加密","u":"/docs/encryption","h":"#2036-rsa-加密","p":1670},{"i":1689,"t":"Furion 框架也提供了字符串拓展方式进行 MD5加密、AES/DESC加解密、RSA加解密。 using Furion.DataEncryption.Extensions; // MD5 加密 var s = \"Furion\".ToMD5Encrypt(); var b = \"Furion\".ToMD5Compare(s); // 比较 // AES加解密 var s = \"Furion\".ToAESEncrypt(\"sfdsfdsfdsfdsfdsfdsfdsfdsfdfdsfdsfdfdfdfd\"); var str = s.ToAESDecrypt(\"sfdsfdsfdsfdsfdsfdsfdsfdsfdfdsfdsfdfdfdfd\"); // DESC 加解密 var s = \"Furion\".ToDESCEncrypt(\"sfdsfdsfdsfdsfdsfdsfdsfdsfdfdsfdsfdfdfdfd\"); var str = s.ToDESCDecrypt(\"sfdsfdsfdsfdsfdsfdsfdsfdsfdfdsfdsfdfdfdfd\"); // PBKDF2 加密(`Furion v2.12 +` 版本已移除!!!!!!!!) var s = \"Furion\".ToPBKDF2Encrypt(); var b = \"Furion\".ToPBKDF2Compare(s); // 比较 // RSA 加解密 var (publicKey, privateKey) = RSAEncryption.GenerateSecretKey(2048); //生成 RSA 秘钥 秘钥大小必须为 2048 到 16384,并且是 8 的倍数 var s= \"Furion\".ToRSAEncrpyt(publicKey); // 加密 var str=s.ToRSADecrypt(privateKey); // 解密","s":"20.4 字符串拓展方式","u":"/docs/encryption","h":"#204-字符串拓展方式","p":1670},{"i":1691,"t":"Furion 框架未内置国密算法 SM2-4,但是已有开发者贡献实现并开源,可查阅 Gitee 仓库,感谢 QQ(373696184)形影相印²º²² 贡献 var data = \"{\\\"lx\\\":\\\"1\\\",\\\"wxid\\\":\\\"\\\",\\\"ehealth_code_id\\\":\\\"68A018036186B717CC1B051C10996F4EEE805F5F81EB1594C9EB43592545F7F6\\\",\\\"ehealth_code\\\":\\\"68A018036186B717CC1B051C10996F4EEE805F5F81EB1594C9EB43592545F7F6\\\",\\\"xm\\\":\\\"测试\\\"}\"; // SM2 var b = SM2Utils.加密(\"123\"); var b1 = SM2Utils.解密(b); // SM3 一般用于数字签名 var sM3Utils = new SM3Utils(); sM3Utils.secretKey = \"ASAFSDFDSGSDFSDFSDFSFSF\"; var token= sM3Utils.加密(\"123\"); // SM4 var sM4Utils = new SM4Utils(); sM4Utils.secretKey = \"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBD\"; var a = sM4Utils.加密(data); var a1 = sM4Utils.解密(a);","s":"20.5 SM2、SM3,SM4 国密","u":"/docs/encryption","h":"#205-sm2sm3sm4-国密","p":1670},{"i":1693,"t":"与我们交流 给 Furion 提 Issue。","s":"20.6 反馈与建议","u":"/docs/encryption","h":"#206-反馈与建议","p":1670},{"i":1695,"t":"v2.20+ 版本说明 在 Furion v2.20+ 版本采用 Jaina 事件总线替换原有的 EventBus,😶查看新文档","s":"22. 事件总线","u":"/docs/event-bus-old","h":"","p":1694},{"i":1697,"t":"事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。 我们来看看事件总线的处理流程:","s":"22.1 什么是事件总线","u":"/docs/event-bus-old","h":"#221-什么是事件总线","p":1694},{"i":1699,"t":"在 Furion 框架中,实现了一种轻量级的事件总线实现机制:MessageCenter(消息中心),MessageCenter 采用字符串消息机制进行广播, 可以在绝大多数中小型项目中发挥作用,缺点是消息处理是在主线程中完成并且消息不支持分布式存储。 另外,MessageCenter 支持单播、多播发布及多订阅。如图所示:","s":"22.2 MessageCenter 消息中心","u":"/docs/event-bus-old","h":"#222-messagecenter-消息中心","p":1694},{"i":1701,"t":"如果想使用 MessageCenter 轻量级事件总线,只需要在 Startup.cs 中注册服务即可,如: public void ConfigureServices(IServiceCollection services) { services.AddSimpleEventBus(); }","s":"22.2.1 注册 轻量级事件总线服务","u":"/docs/event-bus-old","h":"#2221-注册-轻量级事件总线服务","p":1694},{"i":1703,"t":"MessageCenter 是根据 MesseageId 消息 Id 来触发对应的处理程序的,所以我们需要定义 订阅处理程序类,该类需实现 ISubscribeHandler 接口,如: public class UserChangeSubscribeHandler : ISubscribeHandler { // 定义一条消息 [SubscribeMessage(\"create:user\")] public void CreateUser(string eventId, object payload) { Console.WriteLine(\"我是\"+eventId); } // 多条消息共用同一个处理程序 [SubscribeMessage(\"delete:user\")] [SubscribeMessage(\"remove:user\")] public void RemoveUser(string eventId, object payload) { Console.WriteLine(\"我是\"+eventId); } // 支持异步 [SubscribeMessage(\"delete:user\")] public async Task SupportAsync(string eventId, object payload) { await MethodAsync(); } }","s":"22.2.2 定义订阅处理程序","u":"/docs/event-bus-old","h":"#2222-定义订阅处理程序","p":1694},{"i":1705,"t":"定义好订阅处理程序后,我们就可以在程序任何地方进行广播消息,事件总线会自动根据 消息 Id 触发对应的处理程序方法: MessageCenter.Send(\"create:user\", new User {}); // => 打印:我是create:user MessageCenter.Send(\"delete:user\", new User {}); // => 打印:我是delete:user MessageCenter.Send(\"remove:user\", new User {}); // => 打印:我是remove:user","s":"22.2.3 发布消息","u":"/docs/event-bus-old","h":"#2223-发布消息","p":1694},{"i":1707,"t":"在上面的例子中,我们需要创建 ISubscribeHandler 的派生类进行相关配置才能实现订阅处理。 在某些特殊情况下,可能只需要订阅一次即可。所以,在 Furion 框架中,为了更简便的订阅消息,也提供了 MessageCenter.Subscribe 静态方法,如: MessageCenter.Subscribe(\"create:user\", (i,p) => { // do something。。。 });","s":"22.2.4 直接订阅消息","u":"/docs/event-bus-old","h":"#2224-直接订阅消息","p":1694},{"i":1709,"t":"默认情况下,事件总线总是采用新线程方式执行,但是我们可以配置为同步方式,如: MessageCenter.Send(\"create:user\", isSync: true);","s":"22.3 同步方式执行","u":"/docs/event-bus-old","h":"#223-同步方式执行","p":1694},{"i":1711,"t":"在 Furion 框架中,事件总线是不支持构造函数注入的,而且构造函数也只会执行一次。所以需要用到服务,应该通过静态类解析,App.GetService() 或 Db.GetRepository()。 public class UserChangeSubscribeHandler : ISubscribeHandler { public UserChangeSubscribeHandler() { // 不支持这里解析服务!!!!!!!!!!! } // 定义一条消息 [SubscribeMessage(\"create:user\")] public void CreateUser(string eventId, object payload) { // 创建一个作用域,对象使用完成自动释放 Scoped.Create((_, scope) => { var services = scope.ServiceProvider; var repository = Db.GetRepository(services); // services 传递进去 var someService = App.GetService(services); // services 传递进去 var otherService = services.GetService(); // 直接用 services 解析 }); } } 关于 App.GetService() 解析服务 在高频定时任务中调用App.GetService(TService),可能会出现内存无法回收的情况,建议始终使用scope.ServiceProvider.GetService(TService)来获取TService 数据库操作注意 如果作用域中对数据库有任何变更操作,需手动调用 SaveChanges 或带 Now 结尾的方法。也可以使用 Scoped.CreateUow(handler) 代替。 关于依赖注入 ISubscribeHandler 接口主要是用来查找定义事件对象的,也就是它的实现类并未提供依赖注入功能,所以在实现类并不支持构造函数注入依赖项。","s":"22.4 关于依赖注入","u":"/docs/event-bus-old","h":"#224-关于依赖注入","p":1694},{"i":1713,"t":"与我们交流 给 Furion 提 Issue。","s":"22.5 反馈与建议","u":"/docs/event-bus-old","h":"#225-反馈与建议","p":1694},{"i":1715,"t":"版本说明 以下内容仅限 Furion 2.5.0 + 版本使用。","s":"31. 虚拟文件系统","u":"/docs/file-provider","h":"","p":1714},{"i":1717,"t":"本章所谓的 文件系统 有点名不副实,其实根本算不上一个系统,它仅仅是利用一个抽象化的 IFileProvider 以统一的方式提供所需的文件而已。通过该 文件系统 可以读取物理文件和嵌入资源文件,包括目录结果读取,文件内容读取,文件内容监听等等。","s":"31.1 关于文件系统","u":"/docs/file-provider","h":"#311-关于文件系统","p":1714},{"i":1719,"t":"Furion 提供了两种文件系统类型: Physical:物理文件系统类型,也就是物理机中实际存在的文件 Embedded:嵌入资源文件系统类型,也就是资源文件嵌入到了程序集中,常用于模块化开发","s":"31.1.1 文件系统类型","u":"/docs/file-provider","h":"#3111-文件系统类型","p":1714},{"i":1721,"t":"services.AddVirtualFileServer();","s":"31.2 注册虚拟文件系统服务","u":"/docs/file-provider","h":"#312-注册虚拟文件系统服务","p":1714},{"i":1724,"t":"Furion 框架提供了 Func 委托供构造函数注入或解析服务,如: public class PersonServices { private readonly IFileProvider _physicalFileProvider; private readonly IFileProvider _embeddedFileProvider; public PersonServices(Func fileProviderResolve) { // 解析物理文件系统 _physicalFileProvider = fileProviderResolve(FileProviderTypes.Physical, @\"c:/test\"); // 解析嵌入资源文件系统 _embeddedFileProvider = fileProviderResolve(FileProviderTypes.Embedded, Assembly.GetEntryAssembly()); } }","s":"31.3.1 Func 方式","u":"/docs/file-provider","h":"#3131-funcfileprovidertypes-object-ifileprovider-方式","p":1714},{"i":1726,"t":"Furion 框架也提供了 FS 静态类方式创建,如: // 解析物理文件系统 var physicalFileProvider = FS.GetPhysicalFileProvider(@\"c:/test\"); // 解析嵌入资源文件系统 var embeddedFileProvider = FS.GetEmbeddedFileProvider(Assembly.GetEntryAssembly());","s":"31.3.2 FS 静态类方式","u":"/docs/file-provider","h":"#3132-fs-静态类方式","p":1714},{"i":1729,"t":"byte[] buffer; using (Stream readStream = _fileProvider.GetFileInfo(\"你的文件路径\").CreateReadStream()) { buffer = new byte[readStream.Length]; await readStream.ReadAsync(buffer.AsMemory(0, buffer.Length)); } // 读取文件内容 var content = Encoding.UTF8.GetString(buffer);","s":"31.4.1 读取文件内容","u":"/docs/file-provider","h":"#3141-读取文件内容","p":1714},{"i":1731,"t":"var rootPath = \"当前目录路径\"; var fileinfos = _fileProvider.GetDirectoryContents(rootPath); foreach (var fileinfo in fileinfos) { if(fileinfo.IsDirectory) { // 这里递归。。。 } }","s":"31.4.2 获取文件目录内容(需递归查找)","u":"/docs/file-provider","h":"#3142-获取文件目录内容需递归查找","p":1714},{"i":1733,"t":"ChangeToken.OnChange(() => _fileProvider.Watch(\"监听的文件\"), () => { // 这里写你的逻辑 });","s":"31.4.4 监听文件变化","u":"/docs/file-provider","h":"#3144-监听文件变化","p":1714},{"i":1735,"t":"通常我们采用模块化开发,静态资源都是嵌入进程序集中,这时候我们需要通过配置 UseFileServer 指定模块静态资源路径,如: // 默认静态资源调用,wwwroot app.UseStaticFiles(); // 配置模块化静态资源 app.UseFileServer(new FileServerOptions { FileProvider = new EmbeddedFileProvider(模块程序集), RequestPath = \"/模块名称\", // 后续所有资源都是通过 /模块名称/xxx.css 调用 EnableDirectoryBrowsing = true });","s":"31.5 模块化静态资源配置","u":"/docs/file-provider","h":"#315-模块化静态资源配置","p":1714},{"i":1737,"t":"在应用开发中,文件上传下载属于非常常用的功能,这里贴出常见的文件上传下载示例。","s":"31.6 文件上传下载","u":"/docs/file-provider","h":"#316-文件上传下载","p":1714},{"i":1739,"t":"文件路径的方式 [HttpGet, NonUnify] public IActionResult FileDownload() { string filePath = \"这里获取完整的文件下载路径\"; return new FileStreamResult(new FileStream(filePath, FileMode.Open), \"application/octet-stream\") { FileDownloadName = fileName // 配置文件下载显示名 }; } byte[] 方式 [HttpGet, NonUnify] public IActionResult FileDownload() { return new FileStreamResult(byte数组, \"application/octet-stream\") { FileDownloadName = fileName // 配置文件下载显示名 }; } 关于前端获取文件名 如果前端获取不到文件夹,可添加以下配置: _httpContextAccessor.HttpContext.Response.Headers.Add(\"Content-Disposition\", $\"attachment; filename={文件名}\"); _httpContextAccessor.HttpContext.Response.Headers.Add(\"Access-Control-Expose-Headers\", \"Content-Disposition\");","s":"31.6.1 文件下载","u":"/docs/file-provider","h":"#3161-文件下载","p":1714},{"i":1741,"t":"小提醒 IFormFile 类型对应前端的 Content-Type 为: multipart/form-data 单文件 IFormFile 类型参数(存储到硬盘) [HttpPost] public async Task UploadFileAsync(IFormFile file) { // 如:保存到网站根目录下的 uploads 目录 var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, \"uploads\"); if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath); //// 这里还可以获取文件的信息 // var size = file.Length / 1024.0; // 文件大小 KB // var clientFileName = file.FileName; // 客户端上传的文件名 // var contentType = file.ContentType; // 获取文件 ContentType 或解析 MIME 类型 // 避免文件名重复,采用 GUID 生成 var fileName = Guid.NewGuid().ToString(\"N\") + Path.GetExtension(file.FileName); var filePath = Path.Combine(savePath, fileName); // 保存到指定路径 using (var stream = System.IO.File.Create(filePath)) { await file.CopyToAsync(stream); } // 在动态 API 直接返回对象即可,无需 OK 和 IActionResult return Ok(new { filename }); } 单文件 Base64 类型参数(存储到硬盘) [HttpPost] public async Task UploadFileAsync([FromBody] string fileBase64, string clientFileName) { // 如:保存到网站根目录下的 uploads 目录 var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, \"uploads\"); if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath); // 将 base64 字符串转 byte[] var bytes = Convert.FromBase64String(fileBase64); // 这里还可以获取文件的信息 // var size = bytes.Length / 1024.0; // 文件大小 KB // 避免文件名重复,采用 GUID 生成 var fileName = Guid.NewGuid().ToString(\"N\") + Path.GetExtension(clientFileName); var filePath = Path.Combine(savePath, fileName); // 保存到指定路径 using (var fs = new FileStream(filePath, FileMode.Create)) { await fs.WriteAsync(bytes); } // 在动态 API 直接返回对象即可,无需 OK 和 IActionResult return Ok(new { fileName }); } 特别注意 文件 Base64 字符串如果带 data:text/plain;base64, 开头则,需要手动去掉 , 之前(含逗号)的字符串。 多文件 List 类型参数(存储到硬盘) 代码和 单文件处理一致,只需 foreach 即可。 [HttpPost] public async Task UploadFileAsync(List files) { // 保存到网站根目录下的 uploads 目录 var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, \"uploads\"); if(!Directory.Exists(savePath)) Directory.CreateDirectory(savePath); // 总上传大小 long size = files.Sum(f => f.Length); // 遍历所有文件逐一上传 foreach (var formFile in files) { if (formFile.Length > 0) { // 避免文件名重复,采用 GUID 生成 var fileName = Guid.NewGuid().ToString(\"N\") + Path.GetExtension(clientFileName); var filePath = Path.Combine(savePath, fileName); // 保存到指定路径 using (var stream = System.IO.File.Create(filePath)) { await formFile.CopyToAsync(stream); } } } // 在动态 API 直接返回对象即可,无需 OK 和 IActionResult return Ok(new { count = files.Count, size }); } 多文件 List Base64 类型参数(存储到硬盘) 代码和 单文件处理一致,只需 foreach 即可(参上)。","s":"31.6.2 文件上传","u":"/docs/file-provider","h":"#3162-文件上传","p":1714},{"i":1743,"t":"有时候我们需要将文件转换成 byte[] 存储到数据库,而不是存储到硬盘中。 [HttpPost] public async Task UploadFileAsync(IFormFile file) { var fileLength = file.Length; using var stream = file.OpenReadStream(); var bytes = new byte[fileLength]; stream.Read(bytes, 0, (int)fileLength); // 这里将 bytes 存储到你想要的介质中即可 } 便捷拓展方法 在 Furion v3.2.0 新增了 IFormFile 的 ToByteArray 拓展,如: [HttpPost] public async Task UploadFileAsync(IFormFile file) { var bytes = file.ToByteArray(); // 这里将 bytes 存储到你想要的介质中即可 }","s":"31.6.3 将 IFormFile 转 byte[]","u":"/docs/file-provider","h":"#3163-将-iformfile-转-byte","p":1714},{"i":1745,"t":"由于一些项目直接将文件二进制存储在数据库中,读取到内存的时候都是 byte[] 数组,比如我们将图片文件存储在数据库中,然后前端通过 Url 链接进行访问,这个时候就需要将 byte[] 转换为有效的资源路径格式,如: [NonUnify, HttpGet, AllowAnonymous] public async Task attachment(string resourceId) { // 根据 resourceId 查询 byte[] 字节数组和 content-type // 返回 FileContentResult 类型 return new FileContentResult(字节数组,content-type); } 之后我们就可以通过 https://localhost/attachment/资源id 访问文件或图片了。","s":"31.6.4 将 byte[] 输出为 Url 地址","u":"/docs/file-provider","h":"#3164-将-byte-输出为-url-地址","p":1714},{"i":1747,"t":"在 Web 项目中,Kestrel 和 HttpSys 都强制实施 30M (~28.6MiB) 的最大请求正文大小限制,如果请求正文大小超过配置的最大请求正文大小限制,则引发 Request body too large. The max request body size is xxxxx 异常,状态码为 413 或 500。","s":"31.7 请求大小控制(上传文件大小控制)","u":"/docs/file-provider","h":"#317-请求大小控制上传文件大小控制","p":1714},{"i":1749,"t":"可通过 [RequestSizeLimit] 特性进行特定限制 [HttpPost] [RequestSizeLimit(100_000_000)] public IActionResult MyAction([FromBody] MyViewModel data) { }","s":"31.7.1 对特定的接口进行控制","u":"/docs/file-provider","h":"#3171-对特定的接口进行控制","p":1714},{"i":1751,"t":"如果不需要对请求大小进行限制,也就是支持提交无限大小,则贴 [DisableRequestSizeLimit] 特性即可。","s":"31.7.2 对特定接口取消限制","u":"/docs/file-provider","h":"#3172-对特定接口取消限制","p":1714},{"i":1753,"t":"我们也可以通过中间件的方式在 Startup.cs 中进行配置: app.Run(async context => { context.Features.Get().MaxRequestBodySize = 100_000_000; // 设置 null 就是不限制,具体值就是限制最大多少 M } 如果设置 MaxRequestBodySize 为 null ,则等同于取消限制,也就是 [DisableRequestSizeLimit] 的效果。 小注意 有时候配置了中间件效果发现没起作用,很有可能和中间件顺序有关,可以通过 .IsReadOnly 属性判断,如果为 true ,说明你的配置无效,只有 false 才有效。","s":"31.7.3 通用中间件进行控制","u":"/docs/file-provider","h":"#3173-通用中间件进行控制","p":1714},{"i":1755,"t":"IIS 方式: 开发环境(IISExpress) 在 Web 启动层(通常是 XXX.Web.Entry)根目录下创建 web.config 文件,内容如下: 生产环境 通常生产环境 IIS 自动项目添加了 web.config 文件,这时候只需要在 节点下添加下面内容即可: Kestrel 方式: 小知识 未使用 IIS 托管时,ASP.NET Core 默认使用 Kestrel 方式。 // .NET5 方式,在 .ConfigureWebHostDefaults 里面配置 .UseStartup() .UseKestrel(options => { options.Limits.MaxRequestBodySize = null; // 设置 null 就是不限制,具体值就是限制最大多少 M } // .NET6 方式,在 progame.cs 文件 var app = builder.Build(); 之后配置 app.Configuration.Get().ConfigureKestrel(options => { options.Limits.MaxRequestBodySize = null; // 设置 null 就是不限制,具体值就是限制最大多少 M }); HttpSys 方式: 小知识 HTTP.sys 是仅在 Windows 上运行的适用于 ASP.NET Core 的 Web 服务器。 HTTP.sys 是 Kestrel 服务器的替代选择,提供了一些 Kestrel 不提供的功能。 // .NET5 方式同上 .UseHttpSys(options => { options.MaxRequestBodySize = 100_000_000; // 设置 null 就是不限制,具体值就是限制最大多少 M } // .NET6 方式同上","s":"31.7.4 全局配置","u":"/docs/file-provider","h":"#3174-全局配置","p":1714},{"i":1757,"t":"与我们交流 给 Furion 提 Issue。","s":"31.8 反馈与建议","u":"/docs/file-provider","h":"#318-反馈与建议","p":1714},{"i":1759,"t":"特别提醒 一旦定义了实体或改变了实体结构或实体配置,需要重新执行 Add-Migration 和 Update-Database 命令。","s":"9.3 数据库实体","u":"/docs/entity","h":"","p":1758},{"i":1761,"t":"在面向对象开发思想中,最重要尤为对象二字,在 .NET 开发过去,操作数据库往往采用 DataTable 和 DataSet 来接收数据库返回结果集,而操作数据库也离不开手写 sql 语句。 在过去面向过程和应用不发达的时代,这些操作确实好使。然后随着中国互联网网民的激增,电子化时代的到来,各行各业对应用需求也达到了前所未有的量级。 所以,在过去手写 sql 的时代各种问题显露无疑: 程序员能力参差不齐,写出的 sql 性能自然也天差地别 sql 属于字符串硬编程,后期维护难上加难 许多单表甚至多表结构一致,出现大量重复 sql 代码 sql 本身在不同的数据库提供器中写法有差,后续迁移头痛不已 当然,sql 是时代的产物,我们也离不开 sql,但对于大多数程序员和项目来说,sql 未必能够带给他们多大的效益。 所以,ORM 就诞生了,所谓的 ORM 就是对象关系映射,英文:Object Relational Mapping,简单点说,ORM 根据特有的 POCO 贫血模型 规则生成 sql 语句。大大避免了重复 sql 和 sql 能力参差不齐等问题。(当然 ORM 作者 sql 能力也会影响最终性能) 上面所说的 POCO 贫血模型正是我们本章节的 数据库实体。 简单来说,数据库实体就是数据库表的类表现,通过一定的规则使这个类能够一一对应表结构。通常这样的类也称为:POCO 贫血模型,也就是只有定义,没有行为。","s":"9.3.1 数据库实体","u":"/docs/entity","h":"#931-数据库实体","p":1758},{"i":1763,"t":"Furion 框架提供多种定义实体的接口依赖: IEntity:实体基接口,是所有实体的基接口 IEntityNotKey:无键实体接口,也就是视图、存储过程、函数依赖接口 EntityBase:实体基抽象类,内置了 Id,TenantId 字段 Entity:实体通用抽象类,继承自 EntityBase,同时内置 CreatedTime,UpdatedTime 字段 EntityNotKey:无键实体抽象类,视图、存储过程、函数依赖抽象类 实体定义位置 Furion 框架中有约定,实体统一定义在 Furion.Core 层。","s":"9.3.2 如何定义实体","u":"/docs/entity","h":"#932-如何定义实体","p":1758},{"i":1765,"t":"如果你不需要 Furion 为实体添加任何内置特性,选用 IEntity,无键实体选用 IEntityNotKey 如果你只需要 Id 属性,选用 EntityBase 如果你需要 Furion 为你自动添加常用字段,则选用 Entity 如果你需要视图、存储过程、函数可以通过 DbSet 操作,则继承 EntityNotKey","s":"9.3.2.1 实体继承选用原则","u":"/docs/entity","h":"#9321-实体继承选用原则","p":1758},{"i":1767,"t":"using Furion.DatabaseAccessor; namespace Furion.Core { public class User : IEntity { /// /// 手工定义 Id /// public int Id { get; set; } /// /// 名称 /// public string Name { get; set; } } }","s":"9.3.2.2 IEntity 示范:","u":"/docs/entity","h":"#9322-ientity-示范","p":1758},{"i":1769,"t":"using Furion.DatabaseAccessor; namespace Furion.Core { public class User : EntityBase { // 无需定义 Id 属性 /// /// 名称 /// public string Name { get; set; } } }","s":"9.3.2.3 EntityBase 示范:","u":"/docs/entity","h":"#9323-entitybase-示范","p":1758},{"i":1771,"t":"using Furion.DatabaseAccessor; namespace Furion.Core { public class User : Entity { // 无需定义 Id 属性 // 并自动添加 CreatedTime,UpdatedTime 属性 /// /// 名称 /// public string Name { get; set; } } }","s":"9.3.2.4 Entity 示范:","u":"/docs/entity","h":"#9324-entity-示范","p":1758},{"i":1773,"t":"using Furion.DatabaseAccessor; namespace Furion.Core { public class UserView : EntityNotKey { public UserView() : base(\"视图名称\") { } /// /// Id /// public int Id { get; set; } /// /// 名称 /// public string Name { get; set; } } } 特别注意 在 Furion 框架中,数据库实体必须直接或间接继承 IEntity 才能进行仓储等操作。","s":"9.3.2.5 EntityNotKey 示范:","u":"/docs/entity","h":"#9325-entitynotkey-示范","p":1758},{"i":1775,"t":"在实际项目开发中,我们通常每个应用的数据库表都有一些公共的类,比如创建人,创建时间等,这个时候我们就需要自定义公共实体类了。 在 Furion 框架中,创建公共实体类需要满足以下条件: 公共实体类必须是公开且是抽象类 公共实体类必须含有无参构造函数 公共实体类必须提供数据库定位器的支持 如: using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Your.Namespace { public abstract class CommonEntity : CommonEntity { } public abstract class CommonEntity : CommonEntity { } public abstract class CommonEntity : PrivateCommonEntity where TDbContextLocator1 : class, IDbContextLocator { } public abstract class CommonEntity : PrivateCommonEntity where TDbContextLocator1 : class, IDbContextLocator where TDbContextLocator2 : class, IDbContextLocator { } public abstract class CommonEntity : PrivateCommonEntity where TDbContextLocator1 : class, IDbContextLocator where TDbContextLocator2 : class, IDbContextLocator where TDbContextLocator3 : class, IDbContextLocator { } public abstract class CommonEntity : PrivateCommonEntity where TDbContextLocator1 : class, IDbContextLocator where TDbContextLocator2 : class, IDbContextLocator where TDbContextLocator3 : class, IDbContextLocator where TDbContextLocator4 : class, IDbContextLocator { } public abstract class CommonEntity : PrivateCommonEntity where TDbContextLocator1 : class, IDbContextLocator where TDbContextLocator2 : class, IDbContextLocator where TDbContextLocator3 : class, IDbContextLocator where TDbContextLocator4 : class, IDbContextLocator where TDbContextLocator5 : class, IDbContextLocator { } public abstract class CommonEntity : PrivateCommonEntity where TDbContextLocator1 : class, IDbContextLocator where TDbContextLocator2 : class, IDbContextLocator where TDbContextLocator3 : class, IDbContextLocator where TDbContextLocator4 : class, IDbContextLocator where TDbContextLocator5 : class, IDbContextLocator where TDbContextLocator6 : class, IDbContextLocator { } public abstract class CommonEntity : PrivateCommonEntity where TDbContextLocator1 : class, IDbContextLocator where TDbContextLocator2 : class, IDbContextLocator where TDbContextLocator3 : class, IDbContextLocator where TDbContextLocator4 : class, IDbContextLocator where TDbContextLocator5 : class, IDbContextLocator where TDbContextLocator6 : class, IDbContextLocator where TDbContextLocator7 : class, IDbContextLocator { } public abstract class CommonEntity : PrivateCommonEntity where TDbContextLocator1 : class, IDbContextLocator where TDbContextLocator2 : class, IDbContextLocator where TDbContextLocator3 : class, IDbContextLocator where TDbContextLocator4 : class, IDbContextLocator where TDbContextLocator5 : class, IDbContextLocator where TDbContextLocator6 : class, IDbContextLocator where TDbContextLocator7 : class, IDbContextLocator where TDbContextLocator8 : class, IDbContextLocator { } public abstract class PrivateCommonEntity : IPrivateEntity { // 注意是在这里定义你的公共实体 public virtual TKey Id { get; set; } public virtual DateTime CreatedTime { get; set; } // 更多属性定义 } } 特别说明 通过上面的格式定义可以完美的支持多数据库操作,建议采用这种格式,而且所有的公共属性都应该定义在 PrivateXXXX 私有类中。","s":"9.3.3 自定义公共实体","u":"/docs/entity","h":"#933-自定义公共实体","p":1758},{"i":1777,"t":"在过去的 EF Core 项目开发中,数据库实体配置需要在 DbContext 的 OnModelCreating 中配置。Furion 为了简化配置和提高开发效率,抽象出了 IEntityTypeBuilder 接口。 通过 IEntityTypeBuilder 接口,我们无需在 DbContext 的 OnModelCreating 中配置,可在任意地方配置。","s":"9.3.4 数据库实体配置","u":"/docs/entity","h":"#934-数据库实体配置","p":1758},{"i":1779,"t":"using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; namespace Furion.Core { public class User : Entity, IEntityTypeBuilder { /// /// 名称 /// public string Name { get; set; } /// /// 年龄 /// public int Age { get; set; } // 配置数据库实体 public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder.HasKey(u => u.Id); entityBuilder.HasIndex(u => u.Name); } } }","s":"9.3.4.1 在数据库实体中配置","u":"/docs/entity","h":"#9341-在数据库实体中配置","p":1758},{"i":1781,"t":"using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; namespace Furion.Core { public class SomeClass : IEntityTypeBuilder { public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder.HasKey(u => u.Id); entityBuilder.HasIndex(u => u.Name); } } } 如上面例子,通过 SomeClass 配置 User 数据库实体。 特别注意 SomeClass必须声明为public,否则无法自动注册。 更多知识 如需了解实体配置支持哪些配置可查阅 【EFCore - 创建模型】 章节。","s":"9.3.4.2 在任何实例类中配置","u":"/docs/entity","h":"#9342-在任何实例类中配置","p":1758},{"i":1783,"t":"Furion 框架会自动扫描所有继承 IEntity 接口的类进行 DbSet 注册,也就是实现自动配置 DbContext 的 OnModelCreating。 如果需要跳过自动注册,只需要贴 [Manual] 或 [SuppressSniffer] 特性即可。一旦贴了此特性,那么就需要手动配置 DbContext 的 OnModelCreating","s":"9.3.5 数据库实体配置说明","u":"/docs/entity","h":"#935-数据库实体配置说明","p":1758},{"i":1785,"t":"有时候我们需要手动设置列名或列类型,比如 decimal(18,2),这时候只需要在属性上面贴 [Column(\"列名\", TypeName=\"decimal(18,2)\")] 即可。","s":"9.3.6 配置列名及列类型","u":"/docs/entity","h":"#936-配置列名及列类型","p":1758},{"i":1787,"t":"可以通过在实体类型贴 [Table(\"表名\", \"dbo\")] 配置。","s":"9.3.7 配置数据库表名和 Schema","u":"/docs/entity","h":"#937-配置数据库表名和-schema","p":1758},{"i":1789,"t":"与我们交流 给 Furion 提 Issue。","s":"9.3.8 反馈与建议","u":"/docs/entity","h":"#938-反馈与建议","p":1758},{"i":1791,"t":"v2.20 以下版本说明 在 Furion v2.20+ 版本采用 Jaina 事件总线替换原有的 EventBus,查看旧文档 版本说明 以下内容仅限 Furion 2.20.0 + 版本使用。","s":"22. 事件总线","u":"/docs/event-bus","h":"","p":1790},{"i":1793,"t":"事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。","s":"22.1 关于事件总线","u":"/docs/event-bus","h":"#221-关于事件总线","p":1790},{"i":1795,"t":"定义事件订阅者 ToDoEventSubscriber: // 实现 IEventSubscriber 接口 public class ToDoEventSubscriber : IEventSubscriber { private readonly ILogger _logger; public ToDoEventSubscriber(ILogger logger) { _logger = logger; } [EventSubscribe(\"ToDo:Create\")] public async Task CreateToDo(EventHandlerExecutingContext context) { var todo = context.Source; _logger.LogInformation(\"创建一个 ToDo:{Name}\", todo.Payload); await Task.CompletedTask; } // 支持多个 [EventSubscribe(\"ToDo:Create\")] [EventSubscribe(\"ToDo:Update\")] public async Task CreateOrUpdateToDo(EventHandlerExecutingContext context) { var todo = context.Source; _logger.LogInformation(\"创建或更新一个 ToDo:{Name}\", todo.Payload); await Task.CompletedTask; } // 支持枚举类型,v3.4.3+ 版本支持 [EventSubscribe(YourEnum.Some)] public async Task EnumHandler(EventHandlerExecutingContext context) { var eventEnum = context.Source.EventId.ParseToEnum(); // 将事件 Id 转换成枚举对象 await Task.CompletedTask; } // 支持正则表达式匹配,4.2.10+ 版本支持 [EventSubscribe(\"(^1[3456789][0-9]{9}$)|((^[0-9]{3,4}\\\\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\\\\([0-9]{3,4}\\\\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$))\", FuzzyMatch = true)] public async Task RegexHandler(EventHandlerExecutingContext context) { var eventId = context.Source.EventId; await Task.CompletedTask; } // 支持多种异常重试配置,Furion 4.2.10+ 版本支持 [EventSubscribe(\"test:error\", NumRetries = 3)] [EventSubscribe(\"test:error\", NumRetries = 3, RetryTimeout = 1000)] // 重试间隔时间 [EventSubscribe(\"test:error\", NumRetries = 3, ExceptionTypes = new[] { typeof(ArgumentException) })] // 特定类型异常才重试 public async Task ExceptionHandler(EventHandlerExecutingContext context) { var eventId = context.Source.EventId; await Task.CompletedTask; } // 支持简单 Order 编排,Furion 4.8.0+ 版本支持 [EventSubscribe(\"test:order\", Order = 1)] public async Task ExceptionHandler(EventHandlerExecutingContext context) { var eventId = context.Source.EventId; await Task.CompletedTask; } } 创建控制器 ToDoController,依赖注入 IEventPublisher 服务: public class ToDoController : ControllerBase { // 依赖注入事件发布者 IEventPublisher private readonly IEventPublisher _eventPublisher; public ToDoController(IEventPublisher eventPublisher) { _eventPublisher = eventPublisher; } // 发布 ToDo:Create 消息 public async Task CreateDoTo(string name) { await _eventPublisher.PublishAsync(new ChannelEventSource(\"ToDo:Create\", name)); } // v3.4.3+ 版本支持发送消息简化 public async Task CreateDoTo(string name) { await _eventPublisher.PublishAsync(\"ToDo:Create\", name); // 也支持枚举 await _eventPublisher.PublishAsync(YourEnum.Some); } } 在 Startup.cs 注册 EventBus 服务: // 注册 EventBus 服务 services.AddEventBus(builder => { // 注册 ToDo 事件订阅者 builder.AddSubscriber(); // 通过类型注册,Furion 4.2.1+ 版本 builder.AddSubscriber(typeof(ToDoEventSubscriber)); // 批量注册事件订阅者 builder.AddSubscribers(ass1, ass2, ....); }); 懒人提醒 在 Furion 中可以不用通过 builder.AddSubscriber() 方式一一注册,只需要实现 ISingleton 接口即可,如: public class ToDoEventSubscriber : IEventSubscriber, ISingleton { } 这样就无需写 builder.AddSubscriber(); 代码了,只需保留 services.AddEventBus() 服务即可。 运行项目: info: Jaina.Samples.ToDoEventSubscriber[0] 创建一个 ToDo:Jaina","s":"22.2 快速入门","u":"/docs/event-bus","h":"#222-快速入门","p":1790},{"i":1797,"t":"Furion 使用 IEventSource 作为消息载体,任何实现该接口的类都可以充当消息载体。 如需自定义,只需实现 IEventSource 接口即可: public class ToDoEventSource : IEventSource { public ToDoEventSource() { } public ToDoEventSource(string eventId, string todoName) { EventId = eventId; ToDoName = todoName; } // 自定义属性 public string ToDoName { get; set; } /// /// 事件 Id /// public string EventId { get; set; } /// /// 事件承载(携带)数据 /// public object Payload { get; set; } /// /// 事件创建时间 /// public DateTime CreatedTime { get; set; } = DateTime.UtcNow; /// /// 取消任务 Token /// /// 用于取消本次消息处理 [Newtonsoft.Json.JsonIgnore] [System.Text.Json.Serialization.JsonIgnore] public CancellationToken CancellationToken { get; set; } } 使用: await _eventPublisher.PublishAsync(new ToDoEventSource (\"ToDo:Create\", \"我的 ToDo Name\"));","s":"22.3 自定义事件源","u":"/docs/event-bus","h":"#223-自定义事件源","p":1790},{"i":1799,"t":"Fruion 默认采用 Channel 作为事件源 IEventSource 存储器,开发者可以使用任何消息队列组件进行替换,如 Kafka、RabbitMQ、ActiveMQ 等,也可以使用部分数据库 Redis、SQL Server、MySql 实现。 如需自定义,只需实现 IEventSourceStorer 接口即可: public class RedisEventSourceStorer : IEventSourceStorer { private readonly IRedisClient _redisClient; public RedisEventSourceStorer(IRedisClient redisClient) { _redisClient = redisClient; } // 往 Redis 中写入一条 public async ValueTask WriteAsync(IEventSource eventSource, CancellationToken cancellationToken) { await _redisClient.WriteAsync(...., cancellationToken); } // 从 Redis 中读取一条 public async ValueTask ReadAsync(CancellationToken cancellationToken) { return await _redisClient.ReadAsync(...., cancellationToken); } } 最后,在注册 EventBus 服务中替换默认 IEventSourceStorer: services.AddEventBus(builder => { // 替换事件源存储器 builder.ReplaceStorer(serviceProvider => { var redisClient = serviceProvider.GetService(); return new RedisEventSourceStorer(redisClient); }); // Furion 4.7.6 版本新增 ReplaceStorerOrFallback ,可在自定义事件源存储器初始失败时回退到默认值 builder.ReplaceStorerOrFallback(() => new YourEventSourceStorer()); // 支持 IServiceProvider 参数 builder.ReplaceStorerOrFallback(serviceProvider => { return new YourEventSourceStorer(); }); });","s":"22.4 自定义事件源存储器","u":"/docs/event-bus","h":"#224-自定义事件源存储器","p":1790},{"i":1801,"t":"版本说明 以下内容仅限 Furion 4.3.4 + 版本使用。 由于使用 RabbitMQ 作为事件总线存储器的比较多,所以这里提供了完整的使用例子。 1. 安装 RabbitMQ.Client 拓展包 Install-Package RabbitMQ.Client -Version 6.4.0 2. 创建 RabbitMQEventSourceStorer 自定义存储器 using Furion.EventBus; using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text; using System.Text.Json; using System.Threading; using System.Threading.Channels; using System.Threading.Tasks; namespace Furion.Core; public sealed class RabbitMQEventSourceStorer : IEventSourceStorer, IDisposable { /// /// 内存通道事件源存储器 /// private readonly Channel _channel; /// /// 通道对象 /// private readonly IModel _model; /// /// 连接对象 /// private readonly IConnection _connection; /// /// 路由键 /// private readonly string _routeKey; /// /// 构造函数 /// /// 连接工厂 /// 路由键 /// 存储器最多能够处理多少消息,超过该容量进入等待写入 public RabbitMQEventSourceStorer(ConnectionFactory factory, string routeKey, int capacity) { // 配置通道,设置超出默认容量后进入等待 var boundedChannelOptions = new BoundedChannelOptions(capacity) { FullMode = BoundedChannelFullMode.Wait }; // 创建有限容量通道 _channel = Channel.CreateBounded(boundedChannelOptions); // 创建连接 _connection = factory.CreateConnection(); _routeKey = routeKey; // 创建通道 _model = _connection.CreateModel(); // 声明路由队列 _model.QueueDeclare(routeKey, false, false, false, null); // 创建消息订阅者 var consumer = new EventingBasicConsumer(_model); // 订阅消息并写入内存 Channel consumer.Received += (ch, ea) => { // 读取原始消息 var stringEventSource = Encoding.UTF8.GetString(ea.Body.ToArray()); // 转换为 IEventSource,这里可以选择自己喜欢的序列化工具,如果自定义了 EventSource,注意属性是可读可写 var eventSource = JsonSerializer.Deserialize(stringEventSource); // 写入内存管道存储器 _channel.Writer.WriteAsync(eventSource); // 确认该消息已被消费 _model.BasicAck(ea.DeliveryTag, false); }; // 启动消费者 设置为手动应答消息 _model.BasicConsume(routeKey, false, consumer); } /// /// 将事件源写入存储器 /// /// 事件源对象 /// 取消任务 Token /// public async ValueTask WriteAsync(IEventSource eventSource, CancellationToken cancellationToken) { // 空检查 if (eventSource == default) { throw new ArgumentNullException(nameof(eventSource)); } // 这里判断是否是 ChannelEventSource 或者 自定义的 EventSource if (eventSource is ChannelEventSource source) { // 序列化,这里可以选择自己喜欢的序列化工具 var data = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(source)); // 发布 _model.BasicPublish(\"\", _routeKey, null, data); } else { // 这里处理动态订阅问题 await _channel.Writer.WriteAsync(eventSource, cancellationToken); } } /// /// 从存储器中读取一条事件源 /// /// 取消任务 Token /// 事件源对象 public async ValueTask ReadAsync(CancellationToken cancellationToken) { // 读取一条事件源 var eventSource = await _channel.Reader.ReadAsync(cancellationToken); return eventSource; } /// /// 释放非托管资源 /// public void Dispose() { _model.Dispose(); _connection.Dispose(); } } 3. 替换默认事件存储器 services.AddEventBus(options => { // 创建连接工厂 var factory = new ConnectionFactory { UserName = \"admin\", Password = \"q1w2e3\", }; // 创建默认内存通道事件源对象,可自定义队列路由key,比如这里是 eventbus var rbmqEventSourceStorer = new RabbitMQEventSourceStorer(factory, \"eventbus\", 3000); // 替换默认事件总线存储器 options.ReplaceStorer(serviceProvider => { return rbmqEventSourceStorer; }); });","s":"22.4.1 RabbitMQ 自定义指南","u":"/docs/event-bus","h":"#2241-rabbitmq-自定义指南","p":1790},{"i":1803,"t":"1. 安装 Confluent.Kafka 拓展包 Install-Package Confluent.Kafka -Version 1.9.3 2. 创建 EventConsumer 订阅类 using Confluent.Kafka; namespace Furion.Core; /// /// Kafka 消息扩展 /// /// /// public class EventConsumer : IDisposable { private Task _consumerTask; private CancellationTokenSource _consumerCts; /// /// 消费者 /// public IConsumer Consumer { get; } /// /// ConsumerBuilder /// public ConsumerBuilder Builder { get; set; } /// /// 消息回调 /// public event EventHandler> Received; /// /// 异常回调 /// public event EventHandler OnConsumeException; /// /// 构造函数 /// /// public EventConsumer(IEnumerable> config) { Builder = new ConsumerBuilder(config); Consumer = Builder.Build(); } /// /// 启动 /// /// public void Start() { if (Consumer.Subscription?.Any() != true) { throw new InvalidOperationException(\"Subscribe first using the Consumer.Subscribe() function\"); } if (_consumerTask != null) { return; } _consumerCts = new CancellationTokenSource(); var ct = _consumerCts.Token; _consumerTask = Task.Factory.StartNew(() => { while (!ct.IsCancellationRequested) { try { var cr = Consumer.Consume(TimeSpan.FromSeconds(1)); if (cr == null) continue; Received?.Invoke(this, cr); } catch (ConsumeException e) { OnConsumeException?.Invoke(this, e); } } }, ct, TaskCreationOptions.LongRunning, System.Threading.Tasks.TaskScheduler.Default); } /// /// 停止 /// /// public async Task Stop() { if (_consumerCts == null || _consumerTask == null) return; _consumerCts.Cancel(); try { await _consumerTask; } finally { _consumerTask = null; _consumerCts = null; } } /// /// 释放 /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// 释放 /// /// protected virtual void Dispose(bool disposing) { if (disposing) { if (_consumerTask != null) { Stop().Wait(); } Consumer?.Dispose(); } } } 3. 创建 KafkaEventSourceStore 自定义存储器 using Confluent.Kafka; using Furion.EventBus; using Newtonsoft.Json; using System.Threading.Channels; namespace Furion.Core; /// /// Kafka 存储源 /// public class KafkaEventSourceStore : IEventSourceStorer, IDisposable { /// /// 内存通道事件源存储器 /// private readonly Channel _channel; /// /// 主题 /// private readonly string _topic; /// /// 消费者 /// private readonly EventConsumer _eventConsumer; /// /// 生产者 /// private readonly IProducer _producer; /// /// 构造函数 /// /// 消费者配置 /// 生产者配置 /// 主题 /// 存储器最多能够处理多少消息,超过该容量进入等待写入 public KafkaEventSourceStore(ConsumerConfig consumerConf, ProducerConfig producerConf, string topic, int capacity) { // 配置通道,设置超出默认容量后进入等待 var boundedChannelOptions = new BoundedChannelOptions(capacity) { FullMode = BoundedChannelFullMode.Wait }; // 创建有限容量通道 _channel = Channel.CreateBounded(boundedChannelOptions); // 主题 _topic = topic; // 创建消息订阅者 _eventConsumer = new EventConsumer(consumerConf); _eventConsumer.Consumer.Subscribe(new[] { topic }); // 订阅消息写入 Channel _eventConsumer.Received += (send, cr) => { // 反序列化消息 var eventSource = JsonConvert.DeserializeObject(cr.Message.Value); // 写入内存管道存储器 _channel.Writer.WriteAsync(eventSource); }; // 启动消费者 _eventConsumer.Start(); // 创建生产者 _producer = new ProducerBuilder(producerConf).Build(); } /// /// 将事件源写入存储器 /// /// 事件源对象 /// 取消任务 Token /// public async ValueTask WriteAsync(IEventSource eventSource, CancellationToken cancellationToken) { if (eventSource == default) { throw new ArgumentNullException(nameof(eventSource)); } // 这里判断是否是 ChannelEventSource 或者 自定义的 EventSource if (eventSource is ChannelEventSource source) { // 序列化 var data = JsonConvert.SerializeObject(source); // 异步发布 await _producer.ProduceAsync(_topic, new Message { Value = data }, cancellationToken); } else { // 这里处理动态订阅问题 await _channel.Writer.WriteAsync(eventSource, cancellationToken); } } /// /// 从存储器中读取一条事件源 /// /// 取消任务 Token /// 事件源对象 public async ValueTask ReadAsync(CancellationToken cancellationToken) { // 读取一条事件源 var eventSource = await _channel.Reader.ReadAsync(cancellationToken); return eventSource; } /// /// 释放非托管资源 /// public async void Dispose() { await _eventConsumer.Stop(); GC.SuppressFinalize(this); } } 4. 替换默认事件存储器 services.AddEventBus(options => { var consumerConf = new ConsumerConfig { BootstrapServers = \"xxx.xxx.xxx.xxx:9092\", GroupId = \"Consumer\", AutoOffsetReset = AutoOffsetReset.Earliest // 从最早的开始消费起 }; var producerConf = new ProducerConfig { BootstrapServers = \"xxx.xxx.xxx.xxx:9092\", BatchSize = 16384, // 修改批次大小为16K LingerMs = 20 // 修改等待时间为20ms }; // 创建默认内存通道事件源对象,可自定义队列路由key,比如这里是 eventbus var kafkaEventSourceStorer = new KafkaEventSourceStore(consumerConf, producerConf, \"testTopic\", 30000); // 替换默认事件总线存储器 options.ReplaceStorer(serviceProvider => { return kafkaEventSourceStorer; }); });","s":"22.4.2 Kafka 自定义指南","u":"/docs/event-bus","h":"#2242-kafka-自定义指南","p":1790},{"i":1805,"t":"Furion 默认内置基于 Channel 的事件发布者 ChannelEventPublisher。 如需自定义,只需实现 IEventPublisher 接口即可: public class ToDoEventPublisher : IEventPublisher { private readonly IEventSourceStorer _eventSourceStorer; public ToDoEventPublisher(IEventSourceStorer eventSourceStorer) { _eventSourceStorer = eventSourceStorer; } public async Task PublishAsync(IEventSource eventSource) { await _eventSourceStorer.WriteAsync(eventSource, eventSource.CancellationToken); } } 最后,在注册 EventBus 服务中替换默认 IEventPublisher: services.AddEventBus(builder => { // 替换事件源存储器 builder.ReplacePublisher(); });","s":"22.5 自定义事件发布者","u":"/docs/event-bus","h":"#225-自定义事件发布者","p":1790},{"i":1807,"t":"Furion 提供了 IEventHandlerMonitor 监视器接口,实现该接口可以监视所有订阅事件,包括 执行之前、执行之后,执行异常,共享上下文数据。 如添加 ToDoEventHandlerMonitor: public class ToDoEventHandlerMonitor : IEventHandlerMonitor { private readonly ILogger _logger; public ToDoEventHandlerMonitor(ILogger logger) { _logger = logger; } public Task OnExecutingAsync(EventHandlerExecutingContext context) { _logger.LogInformation(\"执行之前:{EventId}\", context.Source.EventId); return Task.CompletedTask; } public Task OnExecutedAsync(EventHandlerExecutedContext context) { _logger.LogInformation(\"执行之后:{EventId}\", context.Source.EventId); if (context.Exception != null) { _logger.LogError(context.Exception, \"执行出错啦:{EventId}\", context.Source.EventId); } return Task.CompletedTask; } } 最后,在注册 EventBus 服务中注册 ToDoEventHandlerMonitor: services.AddEventBus(builder => { // 添加事件执行监视器 builder.AddMonitor(); });","s":"22.6 添加事件执行监视器","u":"/docs/event-bus","h":"#226-添加事件执行监视器","p":1790},{"i":1809,"t":"Furion 提供了 IEventHandlerExecutor 执行器接口,可以让开发者自定义事件处理函数执行策略,如 超时控制,失败重试、熔断等等。 如添加 RetryEventHandlerExecutor: public class RetryEventHandlerExecutor : IEventHandlerExecutor { public async Task ExecuteAsync(EventHandlerExecutingContext context, Func handler) { // 如果执行失败,每隔 1s 重试,最多三次 await Retry.InvokeAsync(async () => { await handler(context); }, 3, 1000); } } 最后,在注册 EventBus 服务中注册 RetryEventHandlerExecutor: services.AddEventBus(builder => { // 添加事件执行器 builder.AddExecutor(); });","s":"22.7 添加事件执行器","u":"/docs/event-bus","h":"#227-添加事件执行器","p":1790},{"i":1811,"t":"在 Furion 中, Event Bus 所有服务均注册为单例,如需使用作用域服务(单例服务可直接注入),可通过依赖注入 IServiceProvider 实例并通过 CreateScope() 创建一个作用域,如: public class ToDoEventSubscriber : IEventSubscriber { private readonly ILogger _logger; public ToDoEventSubscriber(IServiceProvider services , ILogger logger) { Services = services; _logger = logger; } public IServiceProvider Services { get; } [EventSubscribe(\"ToDo:Create\")] public async Task CreateToDo(EventHandlerExecutingContext context) { // 创建新的作用域 using var scope = Services.CreateScope(); // 解析服务 var scopedProcessingService = scope.ServiceProvider.GetRequiredService(); // .... } }","s":"22.8 使用有作用域的服务","u":"/docs/event-bus","h":"#228-使用有作用域的服务","p":1790},{"i":1813,"t":"services.AddEventBus(builder => { // 订阅 EventBus 未捕获异常 builder.UnobservedTaskExceptionHandler = (obj, args) => { // .... }; });","s":"22.9 订阅执行任务意外异常","u":"/docs/event-bus","h":"#229-订阅执行任务意外异常","p":1790},{"i":1815,"t":"版本说明 以下内容仅限 Furion 4.2.10 + 版本使用。 在该版本中,Furion 提供了 IEventBusFactory 工厂服务,可在运行时动态新增或删除订阅,如: public class TestEventBus : IDynamicApiController { private readonly IEventPublisher _eventPublisher; private readonly IEventBusFactory _eventBusFactory; public TestEventBus(IEventPublisher eventPublisher, IEventBusFactory eventBusFactory) { _eventPublisher = eventPublisher; _eventBusFactory = eventBusFactory; } // 运行时动态添加一个订阅器 public async Task AddSubscriber() { await _eventBusFactory.Subscribe(\"xxx\", async (ctx) => { Console.WriteLine(\"我是动态的\"); await Task.CompletedTask; }); } // 运行时动态删除一个订阅器 public async Task RemoveDynamic(string eventId) { await _eventBusFactory.Unsubscribe(eventId); } }","s":"22.10 事件总线工厂","u":"/docs/event-bus","h":"#2210-事件总线工厂","p":1790},{"i":1817,"t":"版本说明 以下内容仅限 Furion 4.3.3 + 版本使用。 在 Furion 4.3.3 版本新增了 MessageCenter 静态类,可在任何地方发送事件消息或订阅消息。 // 发送消息(含诸多重载) await MessageCenter.PublishAsync(\"messageId\", new {}); // 动态订阅消息 MessageCenter.Subscribe(\"messageId\", async (ctx) => { Console.WriteLine(\"我是动态的\"); await Task.CompletedTask; }); // 取消订阅 MessageCenter.Unsubscribe(\"messageId\");","s":"22.11 MessageCenter 静态类","u":"/docs/event-bus","h":"#2211-messagecenter-静态类","p":1790},{"i":1819,"t":"版本说明 以下内容仅限 Furion 4.6.1 + 版本使用。 创建 IEventFallbackPolicy 实现类并实现 Callback 方法,如 EventFallbackPolicy: public class EventFallbackPolicy : IEventFallbackPolicy { private readonly ILogger _logger; public EventFallbackPolicy(ILogger logger) { _logger = logger; } public async Task CallbackAsync(EventHandlerExecutingContext context, Exception ex) { _logger.LogError(ex, \"重试了多次最终还是失败了\"); await Task.CompletedTask; } } 注册 EventFallbackPolicy 类型服务 services.AddEventBus(options => { options.AddFallbackPolicy(); }); 通过 [EventSubscribe] 特性配置 FallbackPolicy 属性使用 [EventSubscribe(\"test:error\", NumRetries = 3, FallbackPolicy = typeof(EventFallbackPolicy))] // 重试三次 public async Task TestError(EventHandlerExecutingContext context) { Console.WriteLine(\"我执行啦~~\"); throw new NotImplementedException(); } 小知识 可以定义多个 IEventFallbackPolicy 实现类,然后通过 options.AddFallbackPolicy() 注册多个,这样实现不同的事件订阅程序执行不同的策略。如: [EventSubscribe(\"test:error\", NumRetries = 3, FallbackPolicy = typeof(EventFallbackPolicy))] [EventSubscribe(\"test:error\", NumRetries = 1010, FallbackPolicy = typeof(OtherEventFallbackPolicy))]","s":"22.12 配置重试失败回调","u":"/docs/event-bus","h":"#2212-配置重试失败回调","p":1790},{"i":1821,"t":"EventBusOptionsBuilder 是 AddEventBus 构建服务选项,该选项包含以下属性和方法: 属性 ChannelCapacity:默认内存通道容量 UnobservedTaskExceptionHandler:订阅执行任务未察觉异常 UseUtcTimestamp:是否使用 UTC 事件,bool 类型,默认 false FuzzyMatch:是否开启全局模糊匹配(正则表达式)事件 Id,bool 类型,默认 false LogEnabled:是否启用日志输出,bool 类型,默认 true 方法 AddSubscriber:添加订阅者 ReplacePublisher:替换发布者 ReplaceStorer(Func):替换存储器 AddMonitor:添加监视器 AddExecutor:添加执行器","s":"22.13 EventBusOptionsBuilder 配置","u":"/docs/event-bus","h":"#2213-eventbusoptionsbuilder-配置","p":1790},{"i":1823,"t":"在一些高频发送消息的场景如 IoT、日志记录、数据采集,为避免频繁解析服务和创建作用域,可使用 类全局作用域 和所有服务都采取单例的方式: public class ToDoEventSubscriber : IEventSubscriber, IDisposable { private readonly ILogger _logger; private readonly IServiceScope _serviceScope; public ToDoEventSubscriber(IServiceProvider serviceProvider , ILogger logger) { _serviceScope = serviceProvider.CreateScope(); _logger = logger; } [EventSubscribe(\"iot:log\")] public async Task LogFromIoT(EventHandlerExecutingContext context) { // 解析服务 var scopedProcessingService = _serviceScope.ServiceProvider.GetRequiredService(); // .... } /// /// 释放服务作用域 /// public void Dispose() { _serviceScope.Dispose(); } }","s":"22.14 关于高频消息处理方式","u":"/docs/event-bus","h":"#2214-关于高频消息处理方式","p":1790},{"i":1825,"t":"如果在项目中使用了事件总线且部署到 IIS 中,那么需要设置 IIS 禁止回收,避免事件总线服务进入休眠,点击查看 IIS 回收问题解决方案","s":"22.15 IIS 部署回收设置","u":"/docs/event-bus","h":"#2215-iis-部署回收设置","p":1790},{"i":1827,"t":"builder.Services.AddCap(options => { options.UseInMemoryStorage(); options.UseInMemoryMessageQueue(); }).AddSubscriberAssembly(App.Assemblies.ToArray());","s":"22.16 使用第三方事件总线 CAP 示例","u":"/docs/event-bus","h":"#2216-使用第三方事件总线-cap-示例","p":1790},{"i":1829,"t":"与我们交流 给 Furion 提 Issue。","s":"22.17 反馈与建议","u":"/docs/event-bus","h":"#2217-反馈与建议","p":1790},{"i":1832,"t":"异常一般是指运行期(此处特指 Exception 类)会发生的导致程序意外中止的问题,是一种对问题的描述后的封装对象。 在过去开发中,通常异常由系统运行时出错抛出,但现在的开发过程中,我们应在程序开发中合理的抛出异常,比如更新一条不存在的实体,或查询一个不存在的数据等等。","s":"7.1 什么是异常","u":"/docs/friendly-exception","h":"#71-什么是异常","p":1830},{"i":1834,"t":"不处理,直接中断程序执行(不推荐) 通过 try catch finally 处理(不推荐) 全局统一处理,并记录异常信息(推荐) 异常注解方式处理,支持本地化 (推荐)","s":"7.2 处理异常方式","u":"/docs/friendly-exception","h":"#72-处理异常方式","p":1830},{"i":1837,"t":"在了解友好异常处理之前可以看看非友好异常处理: 对终端用户抛出 500状态码 堆栈信息 大量的 try catch 代码,污染正常业务逻辑 没有规范化的异常状态码和异常消息管理 没有异常日志收集记录 不支持异常消息本地化处理 不支持异常策略,失败后程序立即终止 不支持分布式事务 CAP 不支持异常传播 返回的异常格式杂乱","s":"7.3.1 非友好异常处理","u":"/docs/friendly-exception","h":"#731-非友好异常处理","p":1830},{"i":1839,"t":"对终端用户提示友好 对后端开发人员提供详细的异常堆栈 不干扰正常业务逻辑代码,如 没有 try catch 代码 支持异常状态码多方设置 支持异常消息本地化 异常信息统一配置管理 支持异常策略,如重试 支持异常日志收集记录 支持 CAP 分布式事务关联 支持内部异常外部传播 支持返回统一的异常格式数据","s":"7.3.2 友好异常处理","u":"/docs/friendly-exception","h":"#732-友好异常处理","p":1830},{"i":1841,"t":"Furion 框架提供了非常灵活的友好异常处理方式。 备注 .AddFriendlyException() 默认已经集成在 AddInject() 中了,无需再次注册。也就是 7.4.1 章节可不配置。","s":"7.4 友好异常处理使用示例","u":"/docs/friendly-exception","h":"#74-友好异常处理使用示例","p":1830},{"i":1843,"t":"Furion.Web.Core\\FurWebCoreStartup.cs using Microsoft.Extensions.DependencyInjection; namespace Furion.Web.Core { [AppStartup(800)] public sealed class FurWebCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddFriendlyException(); } } } 特别注意 .AddFriendlyException() 需在 services.AddControllers() 之后注册。","s":"7.4.1 注册友好异常服务","u":"/docs/friendly-exception","h":"#741-注册友好异常服务","p":1830},{"i":1845,"t":"简单抛个异常​ using Furion.DynamicApiController; using Furion.FriendlyException; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public int Get(int id) { if (id < 3) { throw Oops.Oh($\"{id} 不能小于3\"); } return id; } } } 如下图所示: 抛出特定类型异常​ using Furion.DynamicApiController; using Furion.FriendlyException; using System; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public int Get(int id) { if (id < 3) { throw Oops.Oh($\"{id} 不能小于3。\", typeof(InvalidOperationException)); } return id; } } } 如下图所示:","s":"7.4.2 两个例子","u":"/docs/friendly-exception","h":"#742-两个例子","p":1830},{"i":1847,"t":"通过上面的例子可以看出,Oops.Oh(errorMessage) 可以结合 throw 抛出异常。对于熟悉C#的人员来说,throw 后面只能 Exception 实例。Oops.Oh(...) 方法返回正是 Exception 实例。","s":"7.5 关于 Oops.Oh","u":"/docs/friendly-exception","h":"#75-关于-oopsoh","p":1830},{"i":1849,"t":"这个名字来源于一个英语句子:Oh, Oops!,意思是 噢(哎),出错了!,所以就有了 Oops.Oh。","s":"7.5.1 为什么起这个名字?","u":"/docs/friendly-exception","h":"#751-为什么起这个名字","p":1830},{"i":1851,"t":"using System; namespace Furion.FriendlyException { public static class Oops { /// /// 抛出字符串异常 /// /// 异常消息 /// String.Format 参数 /// 异常实例 public static Exception Oh(string errorMessage, params object[] args); /// /// 抛出字符串异常 /// /// 异常消息 /// 具体异常类型 /// String.Format 参数 /// 异常实例 public static Exception Oh(string errorMessage, Type exceptionType, params object[] args); /// /// 抛出错误码异常 /// /// 错误码 /// String.Format 参数 /// 异常实例 public static Exception Oh(object errorCode, params object[] args); /// /// 抛出错误码异常 /// /// 错误码 /// 具体异常类型 /// String.Format 参数 /// 异常实例 public static Exception Oh(object errorCode, Type exceptionType, params object[] args); } }","s":"7.5.2 Oops.Oh 重载方法","u":"/docs/friendly-exception","h":"#752-oopsoh-重载方法","p":1830},{"i":1853,"t":"在 Furion 框架中,提供了非常灵活且规范化的友好异常处理方式,通过这个方式可以方便管理异常状态码、异常信息及异常本地化。","s":"7.6 最佳实践 🤗","u":"/docs/friendly-exception","h":"#76-最佳实践-","p":1830},{"i":1855,"t":"实现自定义异常信息类型必须遵循以下配置: 类型必须是公开且是 Enum 枚举类型 枚举类型必须贴有 [ErrorCodeType] 特性 枚举中每一项必须贴有 [ErrorCodeItemMetadata] 特性 using Furion.FriendlyException; namespace Furion.Application { [ErrorCodeType] public enum ErrorCodes { [ErrorCodeItemMetadata(\"{0} 不能小于 {1}\")] z1000, [ErrorCodeItemMetadata(\"数据不存在\")] x1000, [ErrorCodeItemMetadata(\"{0} 发现 {1} 个异常\", \"百小僧\", 2)] x1001, [ErrorCodeItemMetadata(\"服务器运行异常\", ErrorCode = \"Error\")] SERVER_ERROR } } info Furion 框架提供了 [ErrorCodeType] 特性和 IErrorCodeTypeProvider 提供器接口来提供异常信息扫描,这里用的是 [ErrorCodeType] 特性类。","s":"7.6.1 创建异常信息类型","u":"/docs/friendly-exception","h":"#761-创建异常信息类型","p":1830},{"i":1857,"t":"Furion 框架提供了[ErrorCodeItemMetadata] 特性用来标识枚举字段异常元数据,该特性支持传入 消息内容 和 格式化参数。最终会使用 String.Format(消息内容,格式化参数) 进行格式化。 如果消息内容中包含格式化占位符但未指定格式化参数,那么会查找异常所在方法是否贴有 [IfException] 特性且含有格式化参数,接着就会查找 Oops.Oh 中指定的 格式化参数。","s":"7.6.2 关于 [ErrorCodeItemMetadata]","u":"/docs/friendly-exception","h":"#762-关于-errorcodeitemmetadata","p":1830},{"i":1859,"t":"using Furion.DynamicApiController; using Furion.FriendlyException; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public int Get(int id) { if (id < 3) { throw Oops.Oh(ErrorCodes.z1000, id, 3); } return id; } } } 如下图所示:","s":"7.6.3 静态异常类使用","u":"/docs/friendly-exception","h":"#763-静态异常类使用","p":1830},{"i":1861,"t":"调整说明 v2.17.0+ 版本下面方法请使用 Retry.Invoke() 替代。 Oops.Retry(() => { // Do..... }, 3, 1000); // 带返回值 var value = Oops.Retry(() => { // Do..... }, 3, 1000); // 只有特定异常才监听 Oops.Retry(() => { }, 3, 1000, typeof(ArgumentNullException));","s":"7.6.4 异常方法重试","u":"/docs/friendly-exception","h":"#764-异常方法重试","p":1830},{"i":1863,"t":"throw Oops.Oh(1000); throw Oops.Oh(ErrorCodes.x1000); throw Oops.Oh(\"哈哈哈哈\"); throw Oops.Oh(errorCode: \"x1001\"); throw Oops.Oh(1000, typeof(Exception)); throw Oops.Oh(1000).StatusCode(400); // 设置错误码 throw Oops.Oh(1000).WithData(new Model {}); // 设置额外数据 throw Oops.Bah(\"用户名或密码错误\"); // 抛出业务异常,状态码为 400 throw Oops.Bah(1000);","s":"7.6.5 更多例子","u":"/docs/friendly-exception","h":"#765-更多例子","p":1830},{"i":1865,"t":"using Furion.FriendlyException; namespace Furion.Application { [ErrorCodeType] public enum ErrorCodes { [ErrorCodeItemMetadata(\"{0} 不能小于 {1}\")] z1000, [ErrorCodeItemMetadata(\"数据不存在\")] x1000, [ErrorCodeItemMetadata(\"{0} 发现 {1} 个异常\", \"百小僧\", 2)] x1001, [ErrorCodeItemMetadata(\"服务器运行异常\", ErrorCode = \"Error\")] SERVER_ERROR } [ErrorCodeType] public enum UserErrorCodes { [ErrorCodeItemMetadata(\"用户数据不存在\")] u1000, [ErrorCodeItemMetadata(\"其他异常\")] u1001 } } 特别注意 多个异常静态类中也必须保证常量值唯一性,不可重复。","s":"7.7 多个异常信息类型","u":"/docs/friendly-exception","h":"#77-多个异常信息类型","p":1830},{"i":1867,"t":"在 Furion 框架中,还提供了 IErrorCodeTypeProvider 异常消息提供器接口,方便在不能贴 [ErrorCodeType] 特性情况下使用: using Furion.FriendlyException; using System; namespace Furion.Application { public class CustomErrorCodeTypeProvider : IErrorCodeTypeProvider { public Type[] Definitions => new[] { typeof(ErrorCodes), typeof(ErrorCodes2) }; } } 启用 IErrorCodeTypeProvider 提供器: Furion.Web.Core\\FurWebCoreStartup.cs using Microsoft.Extensions.DependencyInjection; namespace Furion.Web.Core { [AppStartup(800)] public sealed class FurWebCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddControllers() .AddFriendlyException(); } } } 小知识 只有使用 IErrorCodeTypeProvider 方式才需使用泛型方式注册。通过上面的方式注册可以同时支持 IErrorCodeTypeProvider 和 [ErrorCodeType] 方式。","s":"7.8 IErrorCodeTypeProvider 提供器","u":"/docs/friendly-exception","h":"#78-ierrorcodetypeprovider-提供器","p":1830},{"i":1869,"t":"Furion 框架还提供了非常灵活的配置文件配置异常,通过这种方式可以实现异常信息后期配置,也就是无需在开发阶段预先定义。 Furion.Web.Entry/appsettings.json { \"ErrorCodeMessageSettings\": { \"Definitions\": [ [\"5000\", \"{0} 不能小于 {1}\"], [\"5001\", \"我叫 {0} 名字\", \"百小僧\"], [\"5002\", \"Oops! 出错了\"] ] } } Definitions 类型为二维数组,二维数组中的每一个数组第一个参数为 ErrorCode 也就是错误码,第二个参数为 ErrorMessage 消息内容,剩余参数作为 ErrorMessage 的格式化参数。 使用示例​ using Furion.DynamicApiController; using Furion.FriendlyException; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public int Get(int id) { if (id < 3) { throw Oops.Oh(5000, id, 3); // 可以将 5000作为常量配置起来 } return id; } } } 小知识 [ErrorCodeType] 和 IErrorCodeTypeProvider 和 appsettings.json 可以同时使用。","s":"7.9 appsetting.json 中配置","u":"/docs/friendly-exception","h":"#79-appsettingjson-中配置","p":1830},{"i":1871,"t":"Furion 框架提供了 [IfException] 特性可以覆盖默认消息配置。也就是覆盖 异常消息类型 和 appsettings.json 中的配置。 特别注意 [IfException] 只能贴在方法上,支持多个。","s":"7.10 [IfException] 使用","u":"/docs/friendly-exception","h":"#710-ifexception-使用","p":1830},{"i":1873,"t":"异常消息类定义 [ErrorCodeType] public enum ErrorCodes { [ErrorCodeItemMetadata(\"{0} 不能小于 {1}\")] z1000 } 覆盖默认配置 using Furion.DynamicApiController; using Furion.FriendlyException; namespace Furion.Application { public class FurionAppService : IDynamicApiController { [IfException(ErrorCodes.z1000, ErrorMessage = \"我覆盖了默认的:{0} 不能小于 {1}\")] public int Get(int id) { if (id < 3) { throw Oops.Oh(ErrorCodes.z1000, id, 3); } return id; } } } 如下图所示:","s":"7.10.1 使用示例","u":"/docs/friendly-exception","h":"#7101-使用示例","p":1830},{"i":1875,"t":"using Furion.DynamicApiController; using Furion.FriendlyException; namespace Furion.Application { public class FurionAppService : IDynamicApiController { [IfException(typeof(ExceptionType), ErrorMessage = \"特定异常类型全局拦截\")] [IfException(ErrorMessage = \"全局异常拦截\")] [IfException(ErrorCodes.z1000, ErrorMessage = \"我覆盖了默认的:{0} 不能小于 {1}\")] [IfException(ErrorCodes.x1001, \"格式化参数1\", \"格式化参数2\", ErrorMessage = \"我覆盖了默认的:{0} 不能小于 {1}\")] [IfException(ErrorCodes.x1000, \"格式化参数1\", \"格式化参数2\")] [IfException(ErrorCodes.SERVER_ERROR, \"格式化参数1\", \"格式化参数2\")] public int Get(int id) { if (id < 3) { throw Oops.Oh(ErrorCodes.z1000, id, 3); } return id; } } } 格式化流程 如果消息内容中包含格式化占位符但未指定格式化参数,那么会查找异常所在方法是否贴有 [IfException] 特性且含有格式化参数,接着就会查找 Oops.Oh 中指定的 格式化参数。","s":"7.10.2 更多例子","u":"/docs/friendly-exception","h":"#7102-更多例子","p":1830},{"i":1877,"t":"[ErrorCodeItemMetadata] -> appsettings.json -> [IfException]。(低 -> 高) [IfException] 会覆盖 appsettings.json 定义的状态码消息。 appsettings.json 会覆盖 [ErrorCodeItemMetadata] 定义的消息。","s":"7.11 异常消息优先级","u":"/docs/friendly-exception","h":"#711-异常消息优先级","p":1830},{"i":1879,"t":"参见 【全球化和本地化(多语言)】 章节","s":"7.12 多语言支持","u":"/docs/friendly-exception","h":"#712-多语言支持","p":1830},{"i":1881,"t":"查看规范化结果文档 如需自定义规范化结果可查阅 【6.7 统一返回值模型】","s":"7.13 规范化结果异常处理","u":"/docs/friendly-exception","h":"#713-规范化结果异常处理","p":1830},{"i":1883,"t":"通常我们需要在异常捕获的时候写日志,这时候就需要使用到 IGlobalExceptionHandler 异常定义处理程序,如: using Furion.DependencyInjection; using Furion.FriendlyException; using Microsoft.AspNetCore.Mvc.Filters; using System.Threading.Tasks; namespace Furion.Application { public class LogExceptionHandler : IGlobalExceptionHandler, ISingleton { public Task OnExceptionAsync(ExceptionContext context) { // 写日志 return Task.CompletedTask; } } }","s":"7.14 全局异常处理提供器","u":"/docs/friendly-exception","h":"#714-全局异常处理提供器","p":1830},{"i":1885,"t":"HideErrorCode:隐藏错误码,bool 类型,默认 false DefaultErrorCode:默认错误码,string 类型 DefaultErrorMessage:默认错误消息,string 类型 ThrowBah:是否将 Oops.Oh 默认抛出为业务异常,bool 类型,默认 false,设置 true 之后 Oops.Oh 默认进入 OnValidateFailed 处理,而不是 OnException LogError:是否输出异常日志,bool 类型,默认 true 配置示例 { \"FriendlyExceptionSettings\": { \"DefaultErrorMessage\": \"系统异常,请联系管理员\" } }","s":"7.15 FriendlyExceptionSettings 配置","u":"/docs/friendly-exception","h":"#715-friendlyexceptionsettings-配置","p":1830},{"i":1887,"t":"版本说明 以下内容仅限 Furion 3.6.1 + 版本使用。 Furion 在该版本之后内置了 BadPageResult 错误结果类型,该类型派生自 IActionResult,如需返回只需要在 Action 中返回即可。 using Furion.FriendlyException; public IActionResult Add(Person person) { if(!ModelState.IsValid) { return new BadPageResult(); } } BadPageResult 更多配置 构造函数 statusCode:状态码,int 类,默认 400 Title:页面标题,string 类型,默认 ModelState Invalid Description:页面描述,string 类型,默认 User data verification failed. Please input it correctly. Code:详细错误代码,string 类型,支持 代码,默认空字符串 CodeLang:详细错误代码语言,string 类型,默认 json Base64Icon:页面图标,string 类型,带默认值,自定义必须是 base64 格式图标","s":"7.16 BadPageResult 错误页","u":"/docs/friendly-exception","h":"#716-badpageresult-错误页","p":1830},{"i":1889,"t":"与我们交流 给 Furion 提 Issue。","s":"7.17 反馈与建议","u":"/docs/friendly-exception","h":"#717-反馈与建议","p":1830},{"i":1892,"t":"筛选器又名过滤器,拦截器,在 ASP.NET Core 中,可在请求处理管道中特定阶段之前或之后运行代码。筛选器是非常经典的面向切面编程方式,也就是所谓的 AOP 操作。 通俗点说就是可以在控制器 Action 执行前后进行切面操作或返回 Result 结果前后操作。","s":"5.3.1 关于筛选器","u":"/docs/filter","h":"#531-关于筛选器","p":1890},{"i":1894,"t":"通过自定义筛选器可以实现错误处理,缓存处理,授权处理,日志记录,实现工作单元事务(Uow)等等切面操作,从而使业务逻辑和系统行为逻辑进行分离。","s":"5.3.2 应用场景","u":"/docs/filter","h":"#532-应用场景","p":1890},{"i":1896,"t":"易拓展,易集成 业务和系统逻辑分离,不干扰业务代码 可实现接口多维度控制,如请求参数篡改,返回值篡改,限流,分布式事务支持 ...","s":"5.3.2.1 筛选器优点","u":"/docs/filter","h":"#5321-筛选器优点","p":1890},{"i":1898,"t":"Mvc/WebAPI 控制器/Action Razor Pages 页面 框架提供的 动态 WebAPI 所有请求资源 全局异常","s":"5.3.3 支持拦截应用","u":"/docs/filter","h":"#533-支持拦截应用","p":1890},{"i":1901,"t":"授权筛选器:该筛选器是最先运行,用于确定是否已针对请求为用户授权。 如果请求未获授权,授权筛选器可以让管道短路。 IAuthorizationFilter IAsyncAuthorizationFilter AuthorizeFilter 资源筛选器:授权后运行,如果需要是大部分请求管道短路,它将会很有用 IResourceFilter IAsyncResourceFilter 操作筛选器:在调用操作方法之前和之后运行代码,可以更改传递的参数,返回结果等,不可在 Razor Pages 中使用。 IActionFilter IAsyncActionFilter 异常筛选器:在向响应正文写入任何内容之前,对未经处理的异常应用全局策略。 IExceptionFilter IAsyncExceptionFilter 结果筛选器:在执行操作结果之前和之后立即运行代码,仅当操作方法成功执行时,它们才会运行。 对于必须围绕视图或格式化程序的执行的逻辑,它们很有用。 IResultFilter IAsyncResultFilter IAlwaysRunResultFilter:该接口主要针对所有操作结果运行拦截,也就是即使 IResourceFilter 设置了 Result 仍会执行并获取最终的 Result IAsyncAlwaysRunReusltFilter Razor Pages 筛选器:允许 Razor Pages 在运行 Razor 页面处理程序前后运行代码,和操作筛选器类似,但它们不能应用单个页面处理程序方法。 IPageFilter IAsyncPageFilter","s":"5.3.4.1 接口类型","u":"/docs/filter","h":"#5341-接口类型","p":1890},{"i":1903,"t":"授权特性筛选器 (Attribute + IAsyncAuthorizationFilter):同上接口类型 操作特性筛选器 (ActionFilterAttribute):同上接口类型 异常特性筛选器 (ExceptionFilterAttribute):同上接口类型 结果特性筛选器 (ResultFilterAttribute):同上接口类型 服务特性筛选器 (ServiceFilterAttribute):支持依赖注入的服务筛选器特性 类型特性筛选器 (TypeFilterAttribute):不支持依赖注入但可以传入自定义构造函数参数 组合特性筛选器 (Attribute + 接口类型方式):可以通过派生自 Attribute 和 特定接口实现,如 Attribute, IActionFilter 筛选器选用技巧 关于选择哪种类型的筛选器有一个小技巧,当你不需要全局筛选器的时候使用特性筛选器,否则使用接口类型筛选器。 另外尽可能的使用带 IAsync 开头的异步筛选器,这样无需分开多个方法,可在一个方法中操作,还能提高吞吐量。 同步异步筛选器 筛选器接口的同步和异步版本任意实现一个,而不是同时实现。 运行时会先查看筛选器是否实现了异步接口,如果是,则调用该接口。 如果不是,则调用同步接口的方法。 如果在一个类中同时实现异步和同步接口,则仅调用异步方法。 使用抽象类(如 ActionFilterAttribute)时,将为每种筛选器类型仅重写同步方法或仅重写异步方法。","s":"5.3.4.2 特性 Attribute 类型","u":"/docs/filter","h":"#5342-特性-attribute-类型","p":1890},{"i":1905,"t":"ASP.NET Core 提供了多种筛选器注册方式,通常情况下不同的注册方式执行顺序不同,服务类型注册最先执行,其次是 Mvc Filter 方式,最后是特性方式。相同的方式中又按照注册前后来决定执行顺序,先注册先执行。 同时也提供了 IOrderedFilter 接口重写执行顺序,其 Order 属性值越高的先执行。","s":"5.3.5 筛选器注册","u":"/docs/filter","h":"#535-筛选器注册","p":1890},{"i":1907,"t":"最常见的注册筛选器的方式就是在 Startup.cs 中注册,这种方式表示全局注册,应用所有控制器/Action Startup.cs public void ConfigureServices(IServiceCollection services) { // Mvc 方式注册一,全局执行 services.AddControllersWithViews(options => { options.Filters.Add(new AddHeaderAttribute(\"GlobalAddHeader\", \"Result filter added to MvcOptions.Filters\")); // 手动创建实例,带构造参数 options.Filters.Add(typeof(MySampleActionFilter)); // 类型 Type 方式 options.Filters.Add(new SampleGlobalActionFilter()); // 手动创建实例,无构造参数 }); // Mvc 方式注册二,全局执行 services.Configure(options => { options.Filters.Add(); }); // Mvc 注册方式三,全局执行,Furion 框架提供方式 services.AddMvcFilter(); }","s":"5.3.5.1 在 Startup.cs 中注册","u":"/docs/filter","h":"#5351-在-startupcs-中注册","p":1890},{"i":1909,"t":"如果筛选器派生自 特性,则可通过特性方式注册,这种方式表示局部注册,只作用于特定的控制器/Action 直接贴方式 // 定义结果特性筛选器 public class AddHeaderAttribute : ResultFilterAttribute { // ... } // 直接贴方式,对于动态 WebAPI 也是一样的 [AddHeader] public class SampleController : Controller { } 通过 [ServiceFilter] 方式 这种方式适用于自定义的特性筛选器包含构造函数注入服务应用场景,这种方式必须在 ConfigureService 中通过 services.AddScoped 注册。 public class MyActionFilterAttribute : ActionFilterAttribute { // 注入服务 private readonly PositionOptions _settings; public MyActionFilterAttribute(IOptions options) { } } 需先在 Startup.cs 中注册筛选器 Startup.cs services.AddScoped(); 使用: public class SampleController : Controller { // 通过 [ServiceFilter] 方式 [ServiceFilter(typeof(MyActionFilterAttribute))] public IActionResult Index2() { // ... } } 通过 [TypeFilter] 方式 [TypeFilter] 和 [ServiceFilter] 类似,唯一的区别就是 [TypeFilter] 不支持构造函数注入服务,但可以传递基元类型构造函数参数。 public class MyLogFilterAttribute : ActionFilterAttribute { // 构造函数包含基元类型参数 public MyLogFilterAttribute(string message, int level) { } } public class SampleController : Controller { // 通过 [TypeFilter] 方式 [TypeFilter(typeof(MyLogFilterAttribute), Arguments = new object[] { \"Message\", 10 })] public IActionResult Index2() { // ... } }","s":"5.3.5.2 特性方式注册","u":"/docs/filter","h":"#5352-特性方式注册","p":1890},{"i":1911,"t":"通过授权筛选器可以实现在所有请求到达控制器/Action 之前进行验证,如果授权失败,直接跳转到登录或者返回 401。","s":"5.3.6 授权筛选器","u":"/docs/filter","h":"#536-授权筛选器","p":1890},{"i":1913,"t":"using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Authorization; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Filters; namespace WebApplication4.Filters; /// /// 自定义授权筛选器 /// public class MyAuthorizationFilter : IAsyncAuthorizationFilter { public async Task OnAuthorizationAsync(AuthorizationFilterContext context) { Console.WriteLine(\"授权检查......\"); // 获取控制器信息 var actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; // 获取控制器类型 var controllerType = actionDescriptor!.ControllerTypeInfo; // 获取 Action 类型 var methodType = actionDescriptor.MethodInfo; // 是否匿名访问 var allowAnonymouse = context.Filters.Any(u => u is IAllowAnonymousFilter) || controllerType.IsDefined(typeof(AllowAnonymousAttribute), true) || methodType.IsDefined(typeof(AllowAnonymousAttribute), true); // 不是匿名才处理权限检查 if (!allowAnonymouse) { Console.Write(\"逻辑检查~~~~\"); // 在 MVC 项目中,如果检查失败,则跳转到登录页 if (typeof(Controller).IsAssignableFrom(controllerType.AsType())) { context.Result = new RedirectResult(\"~/Login\"); } // WebAPI 或者其他类型 else { // 返回未授权 context.Result = new UnauthorizedResult(); } } // 否则直接跳过处理 else await Task.CompletedTask; } } 全局注册 在 ConfigureService 中注册,该方式会作用所有的控制器/ Action: services.Configure(options => { options.Filters.Add(); }); 更简易方式 Furion 框架中提供了 services.AddMvcFilter(),可使用它代替上面多行注册。 局部特性方式 [TypeFilter]: [TypeFilter(typeof(MyAuthorizationFilter))] public IActionResult Get() { // ... } [ServiceFilter] Starup.cs services.AddScoped(); [ServiceFilter(typeof(MyAuthorizationFilter))] public IActionResult Get() { // ... }","s":"5.3.6.1 接口定义方式","u":"/docs/filter","h":"#5361-接口定义方式","p":1890},{"i":1915,"t":"只需要上述接口方式中添加派生 Attribute 并设置 [AttributeUsage] 接口,如: [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)] public class MyAuthorizationFilterAttribute : Attribute, IAsyncAuthorizationFilter { public async Task OnAuthorizationAsync(AuthorizationFilterContext context) { // 代码同上 } } 使用: [MyAuthorizationFilter] public IActionResult Get() { // ... }","s":"5.3.6.2 特性定义方式(组合)","u":"/docs/filter","h":"#5362-特性定义方式组合","p":1890},{"i":1917,"t":"资源筛选器使用频率较少,通常用来处理资源缓存或者阻止模型(值)绑定操作。","s":"5.3.7 资源筛选器","u":"/docs/filter","h":"#537-资源筛选器","p":1890},{"i":1919,"t":"using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.ModelBinding; namespace WebApplication4.Filters; public class MyResourceFilter : IAsyncResourceFilter { public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next) { // 获取所有资源提供器工厂 var valueProviderFactories = context.ValueProviderFactories; // 比如这里判断如果是 Form 表单方式提交就就不给参数复制 var formValueProviderFactory = valueProviderFactories .OfType() .FirstOrDefault(); if (formValueProviderFactory != null) { // 移除 Form 表单绑定值提供器器 context.ValueProviderFactories.Remove(formValueProviderFactory); } // .... 更多操作 // 资源请求成功后 var resourceContext = await next(); } } 全局注册 在 ConfigureService 中注册,该方式会作用所有的控制器/ Action: services.Configure(options => { options.Filters.Add(); }); 更简易方式 Furion 框架中提供了 services.AddMvcFilter(),可使用它代替上面多行注册。 局部特性方式 [TypeFilter]: [TypeFilter(typeof(MyResourceFilter))] public IActionResult Get() { // ... } [ServiceFilter] Starup.cs services.AddScoped(); [ServiceFilter(typeof(MyResourceFilter))] public IActionResult Get() { // ... }","s":"5.3.7.1 接口定义方式","u":"/docs/filter","h":"#5371-接口定义方式","p":1890},{"i":1921,"t":"只需要上述接口方式中添加派生 Attribute 并设置 [AttributeUsage] 接口,如: [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)] public class MyResourceFilterAttribute : Attribute, IAsyncResourceFilter { public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next) { // 代码同上 } } 使用: [MyResourceFilter] public IActionResult Get() { // ... }","s":"5.3.7.2 特性定义方式(组合)","u":"/docs/filter","h":"#5372-特性定义方式组合","p":1890},{"i":1923,"t":"操作筛选器是使用频率最高的筛选器,通常用来控制进入 Action 之前(此时模型绑定已经完成)和 Action 执行之后(此时 Result 还未返回)。 可以使用操作筛选器实现各种骚操作,如篡改参数,篡改返回值,统一参数验证,审计日志,实现数据库事务自动开启关闭等等。","s":"5.3.8 操作筛选器","u":"/docs/filter","h":"#538-操作筛选器","p":1890},{"i":1925,"t":"using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Filters; using System.Diagnostics; using System.Security.Claims; namespace WebApplication4.Filters; public class MyActionFilter : IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { //============== 这里是执行方法之前获取数据 ==================== // 获取控制器、路由信息 var actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; // 获取请求的方法 var method = actionDescriptor!.MethodInfo; // 获取 HttpContext 和 HttpRequest 对象 var httpContext = context.HttpContext; var httpRequest = httpContext.Request; // 获取客户端 Ipv4 地址 var remoteIPv4 = httpContext.GetRemoteIpAddressToIPv4(); // 获取请求的 Url 地址 var requestUrl = httpRequest.GetRequestUrlAddress(); // 获取来源 Url 地址 var refererUrl = httpRequest.GetRefererUrlAddress(); // 获取请求参数(写入日志,需序列化成字符串后存储),可以自由篡改!!!!!! var parameters = context.ActionArguments; // 获取操作人(必须授权访问才有值)\"userId\" 为你存储的 claims type,jwt 授权对应的是 payload 中存储的键名 var userId = httpContext.User?.FindFirstValue(\"userId\"); // 请求时间 var requestedTime = DateTimeOffset.Now; //============== 这里是执行方法之后获取数据 ==================== var actionContext = await next(); // 获取返回的结果 var returnResult = actionContext.Result; // 判断是否请求成功,没有异常就是请求成功 var isRequestSucceed = actionContext.Exception == null; // 获取调用堆栈信息,提供更加简单明了的调用和异常堆栈 var stackTrace = EnhancedStackTrace.Current(); // 其他操作,如写入日志 } } 全局注册 在 ConfigureService 中注册,该方式会作用所有的控制器/ Action: services.Configure(options => { options.Filters.Add(); }); 更简易方式 Furion 框架中提供了 services.AddMvcFilter(),可使用它代替上面多行注册。 局部特性方式 [TypeFilter]: [TypeFilter(typeof(MyActionFilter))] public IActionResult Get() { // ... } [ServiceFilter] Starup.cs services.AddScoped(); [ServiceFilter(typeof(MyActionFilter))] public IActionResult Get() { // ... }","s":"5.3.8.1 接口定义方式","u":"/docs/filter","h":"#5381-接口定义方式","p":1890},{"i":1927,"t":"using Microsoft.AspNetCore.Mvc.Filters; namespace WebApplication4.Filters; public class MyActionAttribute : ActionFilterAttribute { /// /// 执行操作前后 /// /// /// /// public override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { // 代码参考接口方式 return base.OnActionExecutionAsync(context, next); } /// /// 返回结果前后 /// /// /// /// public override Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) { // 代码参考接口方式 return base.OnResultExecutionAsync(context, next); } } 全局注册 在 ConfigureService 中注册,该方式会作用所有的控制器/ Action: services.Configure(options => { options.Filters.Add(); }); 更简易方式 Furion 框架中提供了 services.AddMvcFilter(),可使用它代替上面多行注册。 局部特性方式 [MyAction] public IActionResult Get() { // ... }","s":"5.3.8.2 ActionFilterAttribute 方式","u":"/docs/filter","h":"#5382-actionfilterattribute-方式","p":1890},{"i":1929,"t":"只需要上述接口方式中添加派生 Attribute 并设置 [AttributeUsage] 接口,如: [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)] public class MyActionFilterAttribute : Attribute, IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { // 代码同上 } } 使用: [MyActionFilter] public IActionResult Get() { // ... }","s":"5.3.8.3 特性定义方式(组合)","u":"/docs/filter","h":"#5383-特性定义方式组合","p":1890},{"i":1931,"t":"异常筛选器使用频率仅次于操作筛选器,更多用于程序出现异常时记录日志或者返回统一的页面操作。","s":"5.3.9 异常筛选器","u":"/docs/filter","h":"#539-异常筛选器","p":1890},{"i":1933,"t":"using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Filters; using System.Diagnostics; namespace WebApplication4.Filters; public class MyExceptionFilter : IAsyncExceptionFilter { public async Task OnExceptionAsync(ExceptionContext context) { // 如果异常在其他地方被标记了处理,那么这里不再处理 if (context.ExceptionHandled) return; // 获取控制器信息 ControllerActionDescriptor? actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; // 获取请求的方法 var method = actionDescriptor!.MethodInfo; // 获取异常对象 var exception = context.Exception; // 获取调用堆栈信息,提供更加简单明了的调用和异常堆栈 var stackTrace = EnhancedStackTrace.Current(); // 其他处理~~~ // 1. MVC 直接返回自定义的错误页面,或者 BadPageResult 类型,如:context.Result = new BadPageResult(StatusCodes.Status500InternalServerError) { } // 2. WebAPI 可以直接返回 context.Result = new JsonResult(.....); // 3. 记录日志。。。。 await Task.CompletedTask; } } 全局注册 在 ConfigureService 中注册,该方式会作用所有的控制器/ Action: services.Configure(options => { options.Filters.Add(); }); 更简易方式 Furion 框架中提供了 services.AddMvcFilter(),可使用它代替上面多行注册。 局部特性方式 [TypeFilter]: [TypeFilter(typeof(MyExceptionFilter))] public IActionResult Get() { // ... } [ServiceFilter] Starup.cs services.AddScoped(); [ServiceFilter(typeof(MyExceptionFilter))] public IActionResult Get() { // ... }","s":"5.3.9.1 接口定义方式","u":"/docs/filter","h":"#5391-接口定义方式","p":1890},{"i":1935,"t":"using Microsoft.AspNetCore.Mvc.Filters; namespace WebApplication4.Filters; public class MyExceptionAttribute : ExceptionFilterAttribute { /// /// 异常拦截器 /// /// /// public override Task OnExceptionAsync(ExceptionContext context) { // 代码参考接口方式 return base.OnExceptionAsync(context); } } 全局注册 在 ConfigureService 中注册,该方式会作用所有的控制器/ Action: services.Configure(options => { options.Filters.Add(); }); 更简易方式 Furion 框架中提供了 services.AddMvcFilter(),可使用它代替上面多行注册。 局部特性方式 [MyException] public IActionResult Get() { // ... }","s":"5.3.9.2 ExceptionFilterAttribute 方式","u":"/docs/filter","h":"#5392-exceptionfilterattribute-方式","p":1890},{"i":1937,"t":"只需要上述接口方式中添加派生 Attribute 并设置 [AttributeUsage] 接口,如: [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)] public class MyExceptionFilterAttribute : Attribute, IAsyncExceptionFilter { public async Task OnExceptionAsync(ExceptionContext context) { // 代码同上 } } 使用: [MyExceptionFilter] public IActionResult Get() { // ... }","s":"5.3.9.3 特性定义方式(组合)","u":"/docs/filter","h":"#5393-特性定义方式组合","p":1890},{"i":1939,"t":"结果控制器常用于对返回的结果附加更多数据,比如 Mvc 中的 ViewBag,ViewData,换句话说主要用来控制输出到浏览器的界面视图对象。","s":"5.3.10 结果筛选器","u":"/docs/filter","h":"#5310-结果筛选器","p":1890},{"i":1941,"t":"using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Filters; namespace WebApplication4.Filters; public class MyResultFilter : IAsyncResultFilter { public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) { // 获取控制器信息 ControllerActionDescriptor? actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; // 获取路由表信息 var routeData = context.RouteData; var controllerName = routeData.Values[\"controller\"]; var actionName = routeData.Values[\"action\"]; var areaName = routeData.DataTokens[\"area\"]; // 判断如果是 MVC 视图,可以动态添加数据到页面中 if (context.Result is ViewResult viewResult) { // 动态添加数据,在 Razor 中就可以直接使用 @TempData[\"Name\"] 获取数据了 viewResult.TempData[\"Name\"] = \"Furion\"; // 动态添加数据,在 Razor 中就可以直接使用 @ViewBag.Version 或 @ViewData[\"Name\"] 获取数据了 viewResult.ViewData[\"Version\"] = 1; } // 这里还可以强制性换掉 Result // context.Result = new ContentResult(\"....\"); // 执行下一个结果过滤器,如果直接短路返回,可设置 context.Cancel = true; 这样就不会执行下一个过滤器,这个和下列代码是互斥的 var resultContext = await next(); // 获取返回的结果 var result = resultContext.Result; } } 全局注册 在 ConfigureService 中注册,该方式会作用所有的控制器/ Action: services.Configure(options => { options.Filters.Add(); }); 更简易方式 Furion 框架中提供了 services.AddMvcFilter(),可使用它代替上面多行注册。 局部特性方式 [TypeFilter]: [TypeFilter(typeof(MyResultFilter))] public IActionResult Get() { // ... } [ServiceFilter] Starup.cs services.AddScoped(); [ServiceFilter(typeof(MyResultFilter))] public IActionResult Get() { // ... }","s":"5.3.10.1 接口定义方式","u":"/docs/filter","h":"#53101-接口定义方式","p":1890},{"i":1943,"t":"using Microsoft.AspNetCore.Mvc.Filters; namespace WebApplication4.Filters; public class MyResultAttribute : ResultFilterAttribute { public override Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) { // 代码参考接口方式 return base.OnResultExecutionAsync(context, next); } } 全局注册 在 ConfigureService 中注册,该方式会作用所有的控制器/ Action: services.Configure(options => { options.Filters.Add(); }); 更简易方式 Furion 框架中提供了 services.AddMvcFilter(),可使用它代替上面多行注册。 局部特性方式 [MyResult] public IActionResult Get() { // ... }","s":"5.3.10.2 ResultFilterAttribute 方式","u":"/docs/filter","h":"#53102-resultfilterattribute-方式","p":1890},{"i":1945,"t":"只需要上述接口方式中添加派生 Attribute 并设置 [AttributeUsage] 接口,如: [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=false)] public class MyResultFilterAttribute : Attribute, IAsyncResultFilter { public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) { // 代码同上 } } 使用: [MyResultFilter] public IActionResult Get() { // ... }","s":"5.3.10.3 特性定义方式(组合)","u":"/docs/filter","h":"#53103-特性定义方式组合","p":1890},{"i":1947,"t":"IAlwaysRunResultFilter 和 IAsyncAlwaysRunResultFilter 接口声明了一个针对所有操作结果运行的 IResultFilter 实现。 这包括由以下对象生成的操作结果: 设置短路的授权筛选器和资源筛选器。 异常筛选器。 详细使用可查看微软官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/filters?view=aspnetcore-6.0#ialwaysrunresultfilter-and-iasyncalwaysrunresultfilter","s":"5.3.10.4 IAlwaysRunResultFilter","u":"/docs/filter","h":"#53104-ialwaysrunresultfilter","p":1890},{"i":1949,"t":"Razor Pages 筛选器仅支持 Razor Pages 项目类型。","s":"5.3.11 RazorPages 筛选器","u":"/docs/filter","h":"#5311-razorpages-筛选器","p":1890},{"i":1951,"t":"using Microsoft.AspNetCore.Mvc.Filters; namespace WebApplication1; public class MyPageFilter : IAsyncPageFilter { /// /// 调用方法之前 /// /// /// /// public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next) { // 路由信息 var routeData = context.RouteData; // 请求方法信息 var actionDescriptor = context.ActionDescriptor; // 处理方法信息 var methodDescriptor = context.HandlerMethod; await next.Invoke(); } /// /// 模型绑定之前 /// /// /// public Task OnPageHandlerSelectionAsync(PageHandlerSelectedContext context) { return Task.CompletedTask; } } 全局注册 在 ConfigureService 中注册,该方式会作用所有 Page Handler services.Configure(options => { options.Filters.Add(new MyPageFilter()); });","s":"5.3.11.1 接口定义方式","u":"/docs/filter","h":"#53111-接口定义方式","p":1890},{"i":1953,"t":"using Microsoft.AspNetCore.Mvc.Filters; namespace WebApplication1.Filters; public class MyResultAttribute : ResultFilterAttribute { public override Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) { // 代码参考接口方式 return base.OnResultExecutionAsync(context, next); } } 局部特性方式 [MyResult] public void OnGet() { // ... }","s":"5.3.11.2 ResultFilterAttribute 方式","u":"/docs/filter","h":"#53112-resultfilterattribute-方式","p":1890},{"i":1955,"t":"通常筛选器支持多个,正常情况下,只要调用 await next() 方法都会进去下一个筛选器,但如果通过 context.Result = new XXXResult() 之后,就可以使其短路,也就是不会再执行下一个筛选器。 但也有例外: 在 IResultFilter/IAsyncResultFilter 结果筛选器中,则使用标记 context.Cancel = true; 设置短路。 在 IExceptionFilter/IAsyncExceptionFilter 异常筛选器中,则使用标记 context.ExceptionHandled = true; 设置短路。","s":"5.3.12 筛选器取消和短路","u":"/docs/filter","h":"#5312-筛选器取消和短路","p":1890},{"i":1957,"t":"默认情况下,筛选器是按照以下执行顺序执行:","s":"5.3.13 筛选器执行顺序控制","u":"/docs/filter","h":"#5313-筛选器执行顺序控制","p":1890},{"i":1959,"t":"IAuthorizationFilter -> IResourceFilter -> IActionFilter -> IExceptionFilter -> IResultFilter -> IAlwaysRunResultFilter 异步也是如此。","s":"5.3.13.1 不同类型筛选器执行顺序","u":"/docs/filter","h":"#53131-不同类型筛选器执行顺序","p":1890},{"i":1961,"t":"默认情况下,通过 services.Configure(...) 方式先注册先执行,之后到特性方式,也是采用先注册先执行。 如果使用同一种方式,如 services.Configuration(...) 或同一种特性方式,也可以控制其执行顺序,如: IOrderedFilter 方式: public class MyActionFilter : IAsyncActionFilter, IOrderedFilter { // 值越大,越优先执行 public int Order => 1000; public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { // .... } } 特性 方式: [MyActionFilter(Order = 1000)] public class ControllerFiltersController : Controller { // ... }","s":"5.3.13.2 相同类型筛选器执行顺序","u":"/docs/filter","h":"#53132-相同类型筛选器执行顺序","p":1890},{"i":1963,"t":"筛选器是支持构造函数依赖注入服务的,使用它们的前提是在 Startup.cs 中注册,如: Startup.cs services.AddScoped();","s":"5.3.4 筛选器依赖注入","u":"/docs/filter","h":"#534-筛选器依赖注入","p":1890},{"i":1965,"t":"想了解更多筛选器知识可查阅官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/filters?view=aspnetcore-6.0","s":"5.3.15 了解更多","u":"/docs/filter","h":"#5315-了解更多","p":1890},{"i":1967,"t":"与我们交流 给 Furion 提 Issue。","s":"5.3.16 反馈与建议","u":"/docs/filter","h":"#5316-反馈与建议","p":1890},{"i":1969,"t":"尽快升级 截至 2022 年 05 月 31 日,微软已经停止了 .NET5 的技术支持,所以请尽快升级到 .NET6 版本,详细升级可查阅 【.NET5 升级 .NET6】 推荐使用脚手架 Furion 官方提供了非常灵活方便的脚手架,可以快速的创建多层架构项目。 推荐使用 《2.2 官方脚手架》代替本章节功能。 入门条件 对 .NET Core/ASP.NET Core 有一定基础了解,还未接触的可先看 【ASP.NET Core 基础】","s":"2.1 ASP.NET 5 集成","u":"/docs/get-start","h":"","p":1968},{"i":1971,"t":"环境要求 使用 Furion 之前先确保安装了最新的 .NET 5 SDK 并升级 Visual Studio 2019 至最新版。","s":"2.1 创建 Web 项目","u":"/docs/get-start","h":"#21-创建-web-项目","p":1968},{"i":1973,"t":"打开 Visual Studio 2019 并创建 Web 项目 配置项目名称 选择 WebAPI 项目 特别注意 Furion 已经内置了 Swagger 规范化库,所以创建时无需勾选 Enable OpenAPI support 选项。否则提示版本不一致产生冲突。","s":"2.1.1 创建 ASP.NET Core Web 应用程序","u":"/docs/get-start","h":"#211-创建-aspnet-core-web-应用程序","p":1968},{"i":1977,"t":"using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace FurionStart { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder .Inject() // 添加这一行 .UseStartup(); }); } }","s":"2.3.1 Program.cs 添加 Inject()","u":"/docs/get-start","h":"#231-programcs-添加-inject","p":1968},{"i":1979,"t":"using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace FurionStart { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddControllers().AddInject(); // 添加 AddInject(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); // 添加这一行,如果是 MVC和API共存项目,无需添加 string.Empty app.UseInject(string.Empty); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } } 小提醒 如果 app.UseInject() 不输入参数,则默认地址为 /api,如果输入 string.Empty 则为 / 目录。如果输入任意字符串,则为 /任意字符串 目录。","s":"2.3.2 在 Startup.cs 中添加两个 Inject()","u":"/docs/get-start","h":"#232-在-startupcs-中添加两个-inject","p":1968},{"i":1981,"t":"启动浏览器查看效果。 小知识 默认情况下,通过 Visual Studio 2019 创建的项目会自动配置了启动页,如果使用 F5 运行,可能不会自动打开首页,这时候我们只需要配置 launchSettings.json 的 launchUrl 即可:","s":"2.4 启动浏览器","u":"/docs/get-start","h":"#24-启动浏览器","p":1968},{"i":1983,"t":"推荐使用脚手架 Furion 官方提供了非常灵活方便的脚手架,可以快速的创建多层架构项目。 推荐使用 《2.2 官方脚手架》代替本章节功能。 入门条件 对 .NET Core/ASP.NET Core 有一定基础了解,还未接触的可先看 【ASP.NET Core 基础】","s":"2.1 ASP.NET 6 集成","u":"/docs/get-start-net6","h":"","p":1982},{"i":1985,"t":"环境要求 使用 Furion 之前先确保安装了最新的 .NET 6 SDK 并安装 Visual Studio 2022 最新版。","s":"2.1 创建 Web 项目","u":"/docs/get-start-net6","h":"#21-创建-web-项目","p":1982},{"i":1987,"t":"打开 Visual Studio 2022 并创建 Web 项目 配置项目名称 选择 WebAPI 项目 特别注意 Furion 已经内置了 Swagger 规范化库,所以创建时无需勾选 Enable OpenAPI support 选项。否则提示版本不一致产生冲突。","s":"2.1.1 创建 ASP.NET Core Web 应用程序","u":"/docs/get-start-net6","h":"#211-创建-aspnet-core-web-应用程序","p":1982},{"i":1991,"t":"var builder = WebApplication.CreateBuilder(args).Inject(); builder.Services.AddControllers().AddInject(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); app.UseInject(); app.MapControllers(); app.Run(); 小提醒 如果 app.UseInject() 不输入参数,则默认地址为 /api,如果输入 string.Empty 则为 / 目录。如果输入任意字符串,则为 /任意字符串 目录。","s":"2.3.1 Program.cs 添加 Inject()","u":"/docs/get-start-net6","h":"#231-programcs-添加-inject","p":1982},{"i":1993,"t":"启动浏览器查看效果。 小知识 默认情况下,通过 Visual Studio 2022 创建的项目会自动配置了启动页,如果使用 F5 运行,可能不会自动打开首页,这时候我们只需要配置 launchSettings.json 的 launchUrl 即可:","s":"2.4 启动浏览器","u":"/docs/get-start-net6","h":"#24-启动浏览器","p":1982},{"i":1995,"t":".NET6 版本新增了 WebApplication 对象,如果我们需要注册服务,只需要通过 builder.Services.AddXXX() 即可。如: var builder = WebApplication.CreateBuilder(args).Inject(); builder.Services.AddControllers().AddInject(); builder.Services.AddRemoteRequest();","s":"2.5 WebApplication 说明 🎃","u":"/docs/get-start-net6","h":"#25-webapplication-说明-","p":1982},{"i":1998,"t":"var result = DataValidator.TryValidateObject(obj);","s":"3.1 验证对象数据","u":"/docs/global/datavalidator","h":"#31-验证对象数据","p":1996},{"i":2000,"t":"var result = DataValidator.TryValidateValue(value, typeof(RequiredAttribure), typeof(RangeAttribute));","s":"3.2 验证单个值","u":"/docs/global/datavalidator","h":"#32-验证单个值","p":1996},{"i":2002,"t":"var result = DataValidator.TryValidateValue(value,\"正则表达式\");","s":"3.3 正则表达式验证单个值","u":"/docs/global/datavalidator","h":"#33-正则表达式验证单个值","p":1996},{"i":2004,"t":"var result = DataValidator.TryValidateValue(value, ValidationTypes.Number); var result2 = DataValidator.TryValidateValue(value, ValidationPattern.AllOfThem, ValidationTypes.Number, ValidationTypes.Required);","s":"3.4 验证类型验证单个值","u":"/docs/global/datavalidator","h":"#34-验证类型验证单个值","p":1996},{"i":2006,"t":"推荐使用脚手架 Furion 官方提供了非常灵活方便的脚手架,可以快速的创建多层架构项目。 推荐使用 《2.2 官方脚手架》代替本章节功能。 入门条件 对 .NET Core/ASP.NET Core 有一定基础了解,还未接触的可先看 【ASP.NET Core 基础】","s":"2.1 ASP.NET 7 集成","u":"/docs/get-start-net7","h":"","p":2005},{"i":2008,"t":"环境要求 使用 Furion 之前先确保安装了最新的 .NET 7 SDK 并安装 Visual Studio 2022 Preview 最新版。","s":"2.1 创建 Web 项目","u":"/docs/get-start-net7","h":"#21-创建-web-项目","p":2005},{"i":2010,"t":"打开 Visual Studio 2022 Preview 并创建 Web 项目 配置项目名称 选择 WebAPI 项目 特别注意 Furion 已经内置了 Swagger 规范化库,所以创建时无需勾选 Enable OpenAPI support 选项。否则提示版本不一致产生冲突。","s":"2.1.1 创建 ASP.NET Core Web 应用程序","u":"/docs/get-start-net7","h":"#211-创建-aspnet-core-web-应用程序","p":2005},{"i":2014,"t":"var builder = WebApplication.CreateBuilder(args).Inject(); builder.Services.AddControllers().AddInject(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); app.UseInject(); app.MapControllers(); app.Run(); 小提醒 如果 app.UseInject() 不输入参数,则默认地址为 /api,如果输入 string.Empty 则为 / 目录。如果输入任意字符串,则为 /任意字符串 目录。","s":"2.3.1 Program.cs 添加 Inject()","u":"/docs/get-start-net7","h":"#231-programcs-添加-inject","p":2005},{"i":2016,"t":"启动浏览器查看效果。 小知识 默认情况下,通过 Visual Studio 2022 Preview 创建的项目会自动配置了启动页,如果使用 F5 运行,可能不会自动打开首页,这时候我们只需要配置 launchSettings.json 的 launchUrl 即可:","s":"2.4 启动浏览器","u":"/docs/get-start-net7","h":"#24-启动浏览器","p":2005},{"i":2018,"t":".NET6 版本新增了 WebApplication 对象,如果我们需要注册服务,只需要通过 builder.Services.AddXXX() 即可。如: var builder = WebApplication.CreateBuilder(args).Inject(); builder.Services.AddControllers().AddInject(); builder.Services.AddRemoteRequest();","s":"2.5 WebApplication 说明 🎃","u":"/docs/get-start-net7","h":"#25-webapplication-说明-","p":2005},{"i":2021,"t":"var settings = App.Settings;","s":"1.1 获取全局配置","u":"/docs/global/app","h":"#11-获取全局配置","p":2019},{"i":2023,"t":"// 获取 IConfiguration 对象 var configuration = App.Configuration; var value = configuration[\"xxx:xxx\"]; // 获取指定节点值并转成 T 类型 var data = App.GetConfig(\"key:key2\"); // 重载/刷新配置 App.Configuration.Reload();","s":"1.2 获取配置对象","u":"/docs/global/app","h":"#12-获取配置对象","p":2019},{"i":2025,"t":"var webHostEnvironment = App.HostEnvironment;","s":"1.3 获取环境对象","u":"/docs/global/app","h":"#13-获取环境对象","p":2019},{"i":2027,"t":"var assemblies = App.Assemblies;","s":"1.4 获取项目所有程序集","u":"/docs/global/app","h":"#14-获取项目所有程序集","p":2019},{"i":2029,"t":"var types = App.EffectiveTypes;","s":"1.5 获取项目所有有效类型","u":"/docs/global/app","h":"#15-获取项目所有有效类型","p":2019},{"i":2031,"t":"var httpContext = App.HttpContext;","s":"1.6 获取 HttpContext","u":"/docs/global/app","h":"#16-获取-httpcontext","p":2019},{"i":2033,"t":"var contextUser = App.User; // 获取 `Jwt` 存储的信息 var userId = App.User?.FindFirstValue(\"键\"); 注意引入 System.Security.Claims 命名空间","s":"1.7 获取登录的 User 对象","u":"/docs/global/app","h":"#17-获取登录的-user-对象","p":2019},{"i":2035,"t":"var serviceProvider = App.ServiceProvider; // 获取根服务,通常用来解析单例,可优化性能 var rootService = App.RootServices;","s":"1.8 获取服务提供器","u":"/docs/global/app","h":"#18-获取服务提供器","p":2019},{"i":2037,"t":"var service = App.GetService([IServiceProvider]); var service2 = App.GetService(typeof(TService), [IServiceProvider]); var service3 = App.GetRequiredService([IServiceProvider]); var service4 = App.GetRequiredService(typeof(TService), [IServiceProvider]);","s":"1.9 解析服务","u":"/docs/global/app","h":"#19-解析服务","p":2019},{"i":2039,"t":"var options = App.GetOptions([IServiceProvider]); var options2 = App.GetOptionsMonitor([IServiceProvider]); var options3 = App.GetOptionsSnapshot([IServiceProvider]);","s":"1.10 获取选项配置","u":"/docs/global/app","h":"#110-获取选项配置","p":2019},{"i":2041,"t":"App.PrintToMiniProfiler(\"分类\", \"状态\", \"要打印的消息\");","s":"1.11 打印数据到 MiniProfiler","u":"/docs/global/app","h":"#111-打印数据到-miniprofiler","p":2019},{"i":2043,"t":"var applicationName = App.HostEnvironment.ApplicationName;","s":"1.12 获取应用名称","u":"/docs/global/app","h":"#112-获取应用名称","p":2019},{"i":2045,"t":"var webRootPath = App.HostEnvironment.ContentRootPath;","s":"1.13 获取启动项目根目录","u":"/docs/global/app","h":"#113-获取启动项目根目录","p":2019},{"i":2047,"t":"var wwwroot = App.WebHostEnvironment.WebRootPath; 注意:可能个别操作系统获取值为 null。","s":"1.14 获取网站根目录 wwwroot 目录","u":"/docs/global/app","h":"#114-获取网站根目录-wwwroot-目录","p":2019},{"i":2049,"t":"var webAssembly = Assembly.GetEntryAssembly();","s":"1.15 获取启动项目所在程序集","u":"/docs/global/app","h":"#115-获取启动项目所在程序集","p":2019},{"i":2051,"t":"var binPath = AppContext.BaseDirectory;","s":"1.16 获取启动项目 bin 目录","u":"/docs/global/app","h":"#116-获取启动项目-bin-目录","p":2019},{"i":2053,"t":"var environmentName = App.HostEnvironment.EnvironmentName;","s":"1.17 获取环境变量名","u":"/docs/global/app","h":"#117-获取环境变量名","p":2019},{"i":2055,"t":"// 判断是否开发环境 var isDevelopment = App.HostEnvironment.IsDevelopment(); // 判断是否生产环境 var isProduction = App.HostEnvironment.IsProduction(); // 判断是否 Stage 环境 var isStaging = App.HostEnvironment.IsStaging(); // 判断是否是特定环境,比如自定义测试环境 var isTest = App.HostEnvironment.IsEnvironment(\"TestEnvironment\"); 注意,需引用 Microsoft.Extensions.Hosting 命名空间","s":"1.18 判断系统环境","u":"/docs/global/app","h":"#118-判断系统环境","p":2019},{"i":2057,"t":"// 获取系统架构 var osArchitecture = RuntimeInformation.OSArchitecture; // => X64 // 获取系统名称 var osDescription = RuntimeInformation.OSDescription; // => Windows 10 企业版 // 获取进程架构 var processArchitecture = RuntimeInformation.ProcessArchitecture; // => X64 // 是否是64位操作系统 var is64BitOperatingSystem = Environment.Is64BitOperatingSystem; // => True","s":"1.19 获取服务器信息","u":"/docs/global/app","h":"#119-获取服务器信息","p":2019},{"i":2059,"t":"var objs = App.UnmanagedObjects;","s":"1.20 获取框架底层所有未托管对象","u":"/docs/global/app","h":"#120-获取框架底层所有未托管对象","p":2019},{"i":2061,"t":"App.DisposeUnmanagedObjects(); // 通常在非 `Web` 环境中手动处理释放时机","s":"1.21 手动释放非托管对象","u":"/docs/global/app","h":"#121-手动释放非托管对象","p":2019},{"i":2063,"t":"版本说明 以下内容仅限 Furion 3.6.8 + 版本使用。 bool isSingleFileEnviroment = App.SingleFileEnvironment;","s":"1.22 判断是否是单文件环境","u":"/docs/global/app","h":"#122-判断是否是单文件环境","p":2019},{"i":2065,"t":"版本说明 以下内容仅限 Furion 4.4.5 + 版本使用。 var cmdConfig = App.GetCommandLineConfiguration(args); cmdConfig.TryGet(\"参数\", out var value);","s":"1.23 解析命令行参数","u":"/docs/global/app","h":"#123-解析命令行参数","p":2019},{"i":2067,"t":"版本说明 以下内容仅限 Furion 1.16.0 + 版本使用。","s":"10. JSON 静态类","u":"/docs/global/json","h":"","p":2066},{"i":2069,"t":"var serializer = JSON.GetJsonSerializer();","s":"10.1 获取序列化提供器","u":"/docs/global/json","h":"#101-获取序列化提供器","p":2066},{"i":2071,"t":"var str = JSON.Serialize(obj, [options]);","s":"10.2 序列化","u":"/docs/global/json","h":"#102-序列化","p":2066},{"i":2073,"t":"var obj = JSON.Deserialize(str, [options]);","s":"10.3 反序列化","u":"/docs/global/json","h":"#103-反序列化","p":2066},{"i":2075,"t":"var options = JSON.GetSerializerOptions();","s":"10.4 获取全局配置","u":"/docs/global/json","h":"#104-获取全局配置","p":2066},{"i":2077,"t":"重要声明 以下内容在 Furion 1.16.0 + 版本中已移除。请使用 【23. JSON 序列化章节】","s":"7. JsonSerializerUtility 静态类","u":"/docs/global/jsonserializer","h":"","p":2076},{"i":2079,"t":"var str = JsonSerializerUtility.Serialize(obj, [options]);","s":"7.1 序列化","u":"/docs/global/jsonserializer","h":"#71-序列化","p":2076},{"i":2081,"t":"var obj = JsonSerializerUtility.Deserialize(str, [options]);","s":"7.2 反序列化","u":"/docs/global/jsonserializer","h":"#72-反序列化","p":2076},{"i":2083,"t":"var options = JsonSerializerUtility.GetDefaultJsonSerializerOptions();","s":"7.3 获取默认序列化配置","u":"/docs/global/jsonserializer","h":"#73-获取默认序列化配置","p":2076},{"i":2085,"t":"services.AddControllersWithViews() .AddJsonSerializerPascalPropertyNaming();","s":"7.4 设置序列化属性首字母大写","u":"/docs/global/jsonserializer","h":"#74-设置序列化属性首字母大写","p":2076},{"i":2087,"t":"services.AddControllersWithViews() .AddDateTimeJsonConverter(\"yyyy-MM-dd HH:mm:ss\");","s":"7.5 设置时间输出统一格式化","u":"/docs/global/jsonserializer","h":"#75-设置时间输出统一格式化","p":2076},{"i":2090,"t":"var fileProvider = FS.GetPhysicalFileProvider(@\"c:/test\");","s":"13.1 获取物理文件提供器","u":"/docs/global/fs","h":"#131-获取物理文件提供器","p":2088},{"i":2092,"t":"var fileProvider = FS.GetEmbeddedFileProvider(Assembly.GetEntryAssembly());","s":"13.2 获取嵌入资源文件提供器","u":"/docs/global/fs","h":"#132-获取嵌入资源文件提供器","p":2088},{"i":2094,"t":"var fileProvider = FS.GetFileProvider(FileProviderTypes.Physical, @\"c:/test\");","s":"13.3 获取文件提供器","u":"/docs/global/fs","h":"#133-获取文件提供器","p":2088},{"i":2096,"t":"使用该功能需确保 services.AddVirtualFileServer() 已注册。框架提供两种方式控制该服务注册: AppSettings 配置(推荐方式) { \"AppSettings\": { \"EnabledVirtualFileServer\": true } } 以上配置默认开启,无需配置。 `手动注册 services.AddVirtualFileServer();","s":"13.4 特别注意","u":"/docs/global/fs","h":"#134-特别注意","p":2088},{"i":2098,"t":"版本说明 以下内容仅限 Furion 3.3.1 + 版本使用。 var success = FS.TryGetContentType(\"image.png\", out var contentType); // image/png","s":"13.5 获取文件 ContentType 或 Mime","u":"/docs/global/fs","h":"#135-获取文件-contenttype-或-mime","p":2088},{"i":2100,"t":"解决不受支持的文件 MIME 出现 404 问题。 app.UseStaticFiles(new StaticFileOptions { ContentTypeProvider = FS.GetFileExtensionContentTypeProvider() })","s":"13.6 解决不受支持的文件 MIME 类型","u":"/docs/global/fs","h":"#136-解决不受支持的文件-mime-类型","p":2088},{"i":2103,"t":"var repository = Db.GetRepository();","s":"2.1 获取非泛型仓储","u":"/docs/global/db","h":"#21-获取非泛型仓储","p":2101},{"i":2105,"t":"var entityRepository = Db.GetRepository();","s":"2.2 获取泛型仓储","u":"/docs/global/db","h":"#22-获取泛型仓储","p":2101},{"i":2107,"t":"var locatorRepository = Db.GetRepository();","s":"2.3 获取带定位器泛型仓储","u":"/docs/global/db","h":"#23-获取带定位器泛型仓储","p":2101},{"i":2109,"t":"var sqlRepository = Db.GetSqlRepository();","s":"2.4 获取 Sql 仓储","u":"/docs/global/db","h":"#24-获取-sql-仓储","p":2101},{"i":2111,"t":"var sqlLocatorRepository = Db.GetSqlRepository();","s":"2.5 获取 Sql 定位器仓储","u":"/docs/global/db","h":"#25-获取-sql-定位器仓储","p":2101},{"i":2113,"t":"var sqlProxy= Db.GetSqlProxy();","s":"2.6 获取 Sql 代理对象","u":"/docs/global/db","h":"#26-获取-sql-代理对象","p":2101},{"i":2115,"t":"var dbContext = Db.GetDbContext();","s":"2.7 获取默认数据库上下文","u":"/docs/global/db","h":"#27-获取默认数据库上下文","p":2101},{"i":2117,"t":"var locatorDbContext = Db.GetDbContext(); var locatorDbContext2 = Db.GetDbContext(typeof(TDbContextLocator));","s":"2.8 获取定位器数据库上下文","u":"/docs/global/db","h":"#28-获取定位器数据库上下文","p":2101},{"i":2119,"t":"var dbContext = Db.GetNewDbContext();","s":"2.9 创建新的默认数据库上下文","u":"/docs/global/db","h":"#29-创建新的默认数据库上下文","p":2101},{"i":2121,"t":"var locatorDbContext = Db.GetNewDbContext(); var locatorDbContext2 = Db.GetNewDbContext(typeof(TDbContextLocator));","s":"2.10 创建新的定位器数据库上下文","u":"/docs/global/db","h":"#210-创建新的定位器数据库上下文","p":2101},{"i":2123,"t":"var repository = Db.GetRepository(dbContextLocatorType);","s":"2.11 根据定位器类型获取仓储","u":"/docs/global/db","h":"#211-根据定位器类型获取仓储","p":2101},{"i":2125,"t":"var msRepository = Db.GetMSRepository();","s":"2.12 获取 主从库 仓储","u":"/docs/global/db","h":"#212-获取-主从库-仓储","p":2101},{"i":2127,"t":"var msLocatorRepository = Db.GetMSRepository();","s":"2.13 获取 Sql 主库定位器仓储","u":"/docs/global/db","h":"#213-获取-sql-主库定位器仓储","p":2101},{"i":2129,"t":"var msLocatorRepository = Db.GetDbRepository();","s":"2.14 获取特定定位器仓储","u":"/docs/global/db","h":"#214-获取特定定位器仓储","p":2101},{"i":2132,"t":"// 读取配置信息生成 Token var token = JWTEncryption.Encrypt(new Dictionary { { \"UserId\", 1 } }); // 配置 Token 过期时间 var token = JWTEncryption.Encrypt(new Dictionary { { \"UserId\", 1 } }, 20); // 配置 Token 密钥 var token = JWTEncryption.Encrypt(\"monksoul@outlook.com\", new Dictionary { { \"UserId\", 1 } }); // 配置算法 var token = JWTEncryption.Encrypt(\"monksoul@outlook.com\", new Dictionary { { \"UserId\", 1 } }, SecurityAlgorithms.HmacSha256);","s":"14.1 生成 Token","u":"/docs/global/jwt","h":"#141-生成-token","p":2130},{"i":2134,"t":"var refreshToken = JWTEncryption.GenerateRefreshToken(\"token\", 43200);","s":"14.2 生成刷新 Token","u":"/docs/global/jwt","h":"#142-生成刷新-token","p":2130},{"i":2136,"t":"var newToken = JWTEncryption.Exchange(\"过期 token\", \"与之匹配的刷新 token\", [新的token过期时间], [容错值]);","s":"14.3 根据过期 Token 交换新 Token","u":"/docs/global/jwt","h":"#143-根据过期-token-交换新-token","p":2130},{"i":2138,"t":"JWTEncryption.AutoRefreshToken(context, httpContext);","s":"14.4 授权处理程序自动刷新 Token","u":"/docs/global/jwt","h":"#144-授权处理程序自动刷新-token","p":2130},{"i":2140,"t":"var (isVaild, tokenData, validationResult) = JWTEncryption.Validate(\"token\");","s":"14.5 验证 Token 有效性","u":"/docs/global/jwt","h":"#145-验证-token-有效性","p":2130},{"i":2142,"t":"var isValid = JWTEncryption.ValidateJwtBearerToken(httpContext, out tokenInfo);","s":"14.6 验证请求中 Token 有效性","u":"/docs/global/jwt","h":"#146-验证请求中-token-有效性","p":2130},{"i":2144,"t":"var tokenInfo = JWTEncryption.ReadJwtToken(\"token\"); // 3.8.2+ 之后支持更强大的读取 var securityToken = JWTEncryption.SecurityReadJwtToken(\"token\");","s":"14.7 读取 Token 信息(不含验证)","u":"/docs/global/jwt","h":"#147-读取-token-信息不含验证","p":2130},{"i":2147,"t":"var apiInterface = L.Text[\"API 接口\"];","s":"8.1 转换文本多语言","u":"/docs/global/l","h":"#81-转换文本多语言","p":2145},{"i":2149,"t":"var name = L.Html[\"Hello {0}\", name];","s":"8.2 转换 Html 多语言","u":"/docs/global/l","h":"#82-转换-html-多语言","p":2145},{"i":2151,"t":"L.SetCulture(\"en-US\");","s":"8.3 设置当前语言","u":"/docs/global/l","h":"#83-设置当前语言","p":2145},{"i":2153,"t":"var list = L.GetCultures();","s":"8.4 获取系统语言列表","u":"/docs/global/l","h":"#84-获取系统语言列表","p":2145},{"i":2155,"t":"var list = L.GetSelectCulture();","s":"8.5 获取当前选中语言","u":"/docs/global/l","h":"#85-获取当前选中语言","p":2145},{"i":2158,"t":"MessageCenter.Subscribe(\"messageId\", async (ctx) => { Console.WriteLine(\"我是动态的\"); await Task.CompletedTask; });","s":"9.1 动态订阅消息","u":"/docs/global/messagecenter","h":"#91-动态订阅消息","p":2156},{"i":2160,"t":"await MessageCenter.PublishAsync(\"messageId\", new {}); // 诸多重载","s":"9.2 发送消息","u":"/docs/global/messagecenter","h":"#92-发送消息","p":2156},{"i":2162,"t":"MessageCenter.Unsubscribe(\"messageId\");","s":"9.3 取消订阅","u":"/docs/global/messagecenter","h":"#93-取消订阅","p":2156},{"i":2165,"t":"var expression = LinqExpression.Create(u => u.Id == 1); var expression2 = LinqExpression.Create((u,i) => u.Id == 1 && i > 0);","s":"5.1 创建一个表达式","u":"/docs/global/linqexpression","h":"#51-创建一个表达式","p":2163},{"i":2167,"t":"// 创建一个初始化的表达式 var expression = LinqExpression.And(); var expression2 = LinqExpression.IndexAnd(); var expression3 = LinqExpression.Or(); var expression4 = LinqExpression.IndexOr(); // 拼接表达式 var expression5 = expression.And(expression2); var expression6 = expression.AndIf(age > 18, expression2); var expression7 = expression.Or(expression2); var expression8 = expression.OrIf(age > 18, expression2); // 获取表达式属性名 var properyName = expression.GetExpressionPropertyName(u => u.Name); // Name","s":"5.2 拼接两个表达式","u":"/docs/global/linqexpression","h":"#52-拼接两个表达式","p":2163},{"i":2169,"t":"版本说明 以下内容仅限 Furion 4.2.1 + 版本使用。","s":"16. Log 静态类","u":"/docs/global/log","h":"","p":2168},{"i":2171,"t":"// 创建日志对象 var logger = Log.CreateLogger(\"日志名称\"); // 创建日志工厂 using var loggerFactory = Log.CreateLoggerFactory(builder => { // .... }); // 日志记录 Log.Information(\"Information\"); Log.Warning(\"Warning\"); Log.Error(\"Error\"); Log.Debug(\"Debug\"); Log.Trace(\"Trace\"); Log.Critical(\"Critical\");","s":"16.1 常见操作","u":"/docs/global/log","h":"#161-常见操作","p":2168},{"i":2173,"t":"版本说明 以下内容仅限 Furion 4.8.0 + 版本使用。","s":"17. Schedular 静态类","u":"/docs/global/schedular","h":"","p":2172},{"i":2175,"t":"该功能 建议 仅限不能通过 services.AddXXX 方式使用,比如控制台,Winfrom/WPF 等。 IDisposable dispose = Schedular.Run(options => { options.AddJob(Triggers.Secondly()); }); 这种方式有一个隐藏的巨大隐藏 “骚操作”:可以在任何地方创建作业调度服务,多次调用可以创建多个作业调度器。 推荐使用 Serve.Run() 或 Serve.RunGeneric() 方式替代 Furion 框架提供了 Serve.Run() 方式支持跨平台使用,还能支持注册更多服务,如: Serve.Run(services => { services.AddSchedule(options => { options.Add(Triggers.Secondly()); }); }) 如无需 Web 功能,可通过 Serve.RunGeneric 替代 Serve.Run。","s":"17.1 启动调度作业服务","u":"/docs/global/schedular","h":"#171-启动调度作业服务","p":2172},{"i":2177,"t":"var schedulerFactory = Schedular.GetFactory();","s":"17.2 获取作业调度计划工厂","u":"/docs/global/schedular","h":"#172-获取作业调度计划工厂","p":2172},{"i":2179,"t":"var scheduler = Schedular.GetJob(\"作业 Id\");","s":"17.3 获取作业","u":"/docs/global/schedular","h":"#173-获取作业","p":2172},{"i":2182,"t":"// 同步 Scoped.Create((factory, scope) => { var services = scope.ServiceProvider; }); // 异步 await Scoped.CreateAsync(async (factory, scope) => { var services = scope.ServiceProvider; await _calcService.GetAsync(); // ... }) 数据库操作注意 如果作用域中对数据库有任何变更操作,需手动调用 SaveChanges 或带 Now 结尾的方法。也可以使用 Scoped.CreateUow(handler) 代替。","s":"11.1 创建一个依赖注入作用域范围","u":"/docs/global/scoped","h":"#111-创建一个依赖注入作用域范围","p":2180},{"i":2184,"t":"// 同步 Scoped.CreateUow((factory, scope) => { var services = scope.ServiceProvider; }); // 异步 await Scope.CreateUowAsync(async (factory, scope) => { var services = scope.ServiceProvider; await _calcService.GetAsync(); // ... }); 此方法将在执行完毕之后自动调用 SaveChanges()","s":"11.2 创建一个带工作单元的作用域","u":"/docs/global/scoped","h":"#112-创建一个带工作单元的作用域","p":2180},{"i":2186,"t":"移除声明 在 Furion v2.18+ 版本移除带返回值的作用域(该方法属于多余操作) var obj = Scoped.CreateRef((factory, scope) => { var services = scope.ServiceProvider; return \"返回值\"; });","s":"11.3 创建一个依赖注入作用域范围(带返回值)","u":"/docs/global/scoped","h":"#113-创建一个依赖注入作用域范围带返回值","p":2180},{"i":2188,"t":"移除声明 在 Furion v2.18+ 版本移除带返回值的作用域(该方法属于多余操作) var obj = Scoped.CreateUowRef((factory, scope) => { var services = scope.ServiceProvider; return \"返回值\"; });","s":"11.4 创建一个带工作单元的作用域(带返回值)","u":"/docs/global/scoped","h":"#114-创建一个带工作单元的作用域带返回值","p":2180},{"i":2191,"t":"throw Oops.Oh(\"异常消息\"); throw Oops.Oh(\"异常消息:{0}\", \"出错了\");","s":"4.1 抛出字符串异常","u":"/docs/global/oops","h":"#41-抛出字符串异常","p":2189},{"i":2193,"t":"throw Oops.Oh(\"异常消息\", typeof(ArgumentNullException)); throw Oops.Oh(\"异常消息:{0}\", typeof(ArgumentNullException), \"出错了\");","s":"4.2 指定类型的异常","u":"/docs/global/oops","h":"#42-指定类型的异常","p":2189},{"i":2195,"t":"throw Oops.Oh(1000); throw Oops.Oh(1000, \"出错了\");","s":"4.3 状态码异常","u":"/docs/global/oops","h":"#43-状态码异常","p":2189},{"i":2197,"t":"throw Oops.Oh(1000, typeof(ArgumentNullException)); throw Oops.Oh(1000, typeof(ArgumentNullException), \"出错了\");","s":"4.4 状态码异常","u":"/docs/global/oops","h":"#44-状态码异常","p":2189},{"i":2199,"t":"调整说明 v2.17.0+ 版本下面方法请使用 Retry.Invoke()/Retry.InvokeAsync() 替代。 Oops.Retry(() => { // Do..... }, 3, 1000); // 带返回值 var value = Oops.Retry(() => { // Do..... }, 3, 1000); // 只有特定异常才监听 Oops.Retry(() => { }, 3, 1000, typeof(ArgumentNullException));","s":"4.5 异常方法重试","u":"/docs/global/oops","h":"#45-异常方法重试","p":2189},{"i":2201,"t":"throw Oops.Bah(\"用户名或密码错误\"); throw Oops.Bah(1000);","s":"4.6 抛出业务异常","u":"/docs/global/oops","h":"#46-抛出业务异常","p":2189},{"i":2204,"t":"var http = Http.GetHttpProxy();","s":"6.1 获取远程代理服务","u":"/docs/global/shttp","h":"#61-获取远程代理服务","p":2202},{"i":2206,"t":"SpareTime 静态类提供了一些方法方便初始化和管理任务","s":"12. SpareTime 静态类","u":"/docs/global/sparetime","h":"","p":2205},{"i":2208,"t":"// 开启间隔任务 SpareTime.Do(interval, [options]); // 开启 Cron 表达式任务 SpareTime.Do(expression, [options]); // 只执行一次任务 SpareTime.DoOnce(interval, [options]); // 实现自定义任务 SpareTime.Do(()=>{ return DateTime.Now.AddMinutes(10); },[options]);","s":"12.1 初始化任务","u":"/docs/global/sparetime","h":"#121-初始化任务","p":2205},{"i":2210,"t":"// 实现后台执行 SpareTime.DoIt(()=>{});","s":"12.2 实现后台执行","u":"/docs/global/sparetime","h":"#122-实现后台执行","p":2205},{"i":2212,"t":"SpareTime.Start(\"任务标识\");","s":"12.3 开始一个任务","u":"/docs/global/sparetime","h":"#123-开始一个任务","p":2205},{"i":2214,"t":"SpareTime.Stop(\"任务标识\"); // 还可以标记一个任务执行失败 SpareTime.Stop(\"任务标识\", true);","s":"12.4 暂停一个任务","u":"/docs/global/sparetime","h":"#124-暂停一个任务","p":2205},{"i":2216,"t":"SpareTime.Cancel(\"任务名称\");","s":"12.5 取消一个任务","u":"/docs/global/sparetime","h":"#125-取消一个任务","p":2205},{"i":2218,"t":"SpareTime.Dispose();","s":"12.6 销毁所有任务","u":"/docs/global/sparetime","h":"#126-销毁所有任务","p":2205},{"i":2220,"t":"var workers = SpareTime.GetWorkers();","s":"12.7 获取所有任务","u":"/docs/global/sparetime","h":"#127-获取所有任务","p":2205},{"i":2222,"t":"var worker = SpareTime.GetWorker(\"workerName\");","s":"12.8 获取单个任务","u":"/docs/global/sparetime","h":"#128-获取单个任务","p":2205},{"i":2224,"t":"var nextTime = SpareTime.GetCronNextOccurrence(\"* * * * *\");","s":"12.9 解析 Cron 表达式","u":"/docs/global/sparetime","h":"#129-解析-cron-表达式","p":2205},{"i":2226,"t":"// 间隔执行任务 await SpareTime.DoAsync(1000, () => { _logger.LogInformation(\"Worker running at: {time}\", DateTimeOffset.Now); }, stoppingToken);","s":"12.10 BackgroundService 间隔定时任务","u":"/docs/global/sparetime","h":"#1210-backgroundservice-间隔定时任务","p":2205},{"i":2228,"t":"// 执行 Cron 表达式任务 await SpareTime.DoAsync(\"*/5 * * * * *\", () => { _logger.LogInformation(\"Worker running at: {time}\", DateTimeOffset.Now); }, stoppingToken, CronFormat.IncludeSeconds);","s":"12.11 BackgroundService Cron 定时任务","u":"/docs/global/sparetime","h":"#1211-backgroundservice-cron-定时任务","p":2205},{"i":2231,"t":"在 ASP.NET 的时代,我们通常通过 HttpContext 全局静态类获取请求上下文,但在 ASP.NET Core 中,HttpContext 是一个非静态的抽象类,无法手动创建,也无法通过静态获取。 虽然在 ASP.NET Core 中无法直接获取 HttpContext 对象。但是微软也提供了注入 IHttpContextAccessor 方式获取。","s":"5.2.1 关于 HttpContext","u":"/docs/httpcontext","h":"#521-关于-httpcontext","p":2229},{"i":2233,"t":"ASP.NET Core 和 Furion 提供了多种访问 HttpContext 的方式。","s":"5.2.2 获取 HttpContext","u":"/docs/httpcontext","h":"#522-获取-httpcontext","p":2229},{"i":2235,"t":"在 ControllerBase 派生类中,我们可以直接通过 HttpContext 属性获取 HttpContext 对象。 public class HomeController : Controller { public IActionResult Index() { // 在这里HttpContext 是 Controller/ControllerBase 对象的属性 var httpContext = HttpContext; return View(); } }","s":"5.2.2.1 在 ControllerBase 派生类中","u":"/docs/httpcontext","h":"#5221-在-controllerbase-派生类中","p":2229},{"i":2237,"t":"在 Furion 框架中,默认已经注册了 IHttpContextAccessor 服务,所以我们可以通过构造函数注入该接口获取。 public class AppService { public AppService(IHttpContextAccessor httpContextAccessor) { var httpContext = httpContextAccessor.HttpContext; } }","s":"5.2.2.2 注入 IHttpContextAccessor","u":"/docs/httpcontext","h":"#5222-注入-ihttpcontextaccessor","p":2229},{"i":2239,"t":"App 静态类也提供了 App.HttpContext 获取 HttpContext 对象。 var request = App.HttpContext.Request; 非 Web 中访问 在 Web 完整的生命周期内,App.HttpContext 都是有效的,但在非 Web 中返回 null,避免在多线程,事件总线,定时任务等中使用。","s":"5.2.2.3 通过 App.HttpContext","u":"/docs/httpcontext","h":"#5223-通过-apphttpcontext","p":2229},{"i":2241,"t":"Furion 框架基于 HttpContext 提供了一些常用的拓展方法。","s":"5.2.3 HttpContext 拓展方法","u":"/docs/httpcontext","h":"#523-httpcontext-拓展方法","p":2229},{"i":2243,"t":"下列代码通常用于授权 Handler 中。 var attribute = httpContext.GetMetadata(); Middleware 中间件获取特性方式 在 Middleware 中间件中获取有所区别,主要通过 HttpContext 的 Features 获取,如: var endpointFeature = httpContext.Features.Get(); var attribute = endpointFeature?.Endpoint?.Metadata?.GetMetadata();","s":"5.2.3.1 获取当前请求的特性 Attribute","u":"/docs/httpcontext","h":"#5231-获取当前请求的特性-attribute","p":2229},{"i":2245,"t":"Swagger 默认不能记住授权信息,一旦刷新浏览器就自动清空,所以 Furion 提供了该拓展,即使刷新浏览器也能保持授权状态。 // 检查用户登录和生成 token 代码... // ..... // 之后调用该拓展,这样就可以实现 Swagger 刷新也能记住登录了 httpContext.SigninToSwagger(\"你的token\");","s":"5.2.3.2 设置 Swagger 自动授权","u":"/docs/httpcontext","h":"#5232-设置-swagger-自动授权","p":2229},{"i":2247,"t":"通过后端代码强制性让 Swagger 授权实现,只针对下一次请求有效! httpContext.SignoutToSwagger();","s":"5.2.3.3 退出 Swagger 授权","u":"/docs/httpcontext","h":"#5233-退出-swagger-授权","p":2229},{"i":2249,"t":"// ipv4 var ipv4 = httpContext.GetLocalIpAddressToIPv4(); // ipv6 var ipv6 = httpContext.GetLocalIpAddressToIPv6();","s":"5.2.3.4 获取本地 IP 地址","u":"/docs/httpcontext","h":"#5234-获取本地-ip-地址","p":2229},{"i":2251,"t":"// ipv4 var ipv4 = httpContext.GetRemoteIpAddressToIPv4(); // ipv6 var ipv6 = httpContext.GetRemoteIpAddressToIPv6(); Nginx 无法获取正确客户端 IP 问题 如果服务器端使用了 nginx 等反向代理工具,可添加以下代码配置: Startup.cs services.Configure(options => { options.ForwardedHeaders = ForwardedHeaders.All; }); // 注意在 Configure 最前面配置 app.UseForwardedHeaders();","s":"5.2.3.5 获取客户端 IP 地址","u":"/docs/httpcontext","h":"#5235-获取客户端-ip-地址","p":2229},{"i":2253,"t":"httpContext.SetTokensOfResponseHeaders(\"token\", \"刷新token\");","s":"5.2.3.6 设置响应头 Token","u":"/docs/httpcontext","h":"#5236-设置响应头-token","p":2229},{"i":2255,"t":"版本说明 以下内容仅限 Furion 4.7.9 + 版本使用。 默认情况下,ASP.NET Core 不支持重复读取 Body 内容,Furion 框架提供了拓展方法,需要按照以下步骤操作: 在 Startup.cs 的 Configure 启用 Body 重复读功能: .NET5 版本: public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ... app.EnableBuffering(); app.UseRouting(); // .... } .NET6+ 版本: var builder = WebApplication.CreateBuilder(args).Inject(); // ... var app = builder.Build(); // ... app.UseInject(); app.EnableBuffering(); app.MapControllers(); app.Run(); 注意:app.EnableBuffering() 必须在 app.UseRouting() 或 app.MapControllers() 之前注册。 使用 HttpContext 或 HttpRequest 拓展 .ReadBodyContentAsync() 即可。 // HttpContext 拓展 var body = await httpContext.ReadBodyContentAsync(); // HttpRequest 拓展 var body = await httpContext.Request.ReadBodyContentAsync();","s":"5.2.4 读取 Body 内容(重复读)","u":"/docs/httpcontext","h":"#524-读取-body-内容重复读","p":2229},{"i":2257,"t":"与我们交流 给 Furion 提 Issue。","s":"5.2.5 反馈与建议","u":"/docs/httpcontext","h":"#525-反馈与建议","p":2229},{"i":2259,"t":"版本说明 以下内容仅限 Furion 3.5.3 + 版本使用。","s":"15. TP 静态类","u":"/docs/global/tp","h":"","p":2258},{"i":2261,"t":"// 生成模板字符串 var template = TP.Wrapper(\"Furion 框架\", \"让 .NET 开发更简单,更通用,更流行。\", \"##作者## 百小僧\", \"##当前版本## v3.5.3\", \"##文档地址## https://furion.icu\", \"##Copyright## 百小僧, Baiqian Co.,Ltd.\"); Console.WriteLine(template); 日志打印模板如下: ┏━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━ ┣ 让 .NET 开发更简单,更通用,更流行。 ┣ ┣ 作者: 百小僧 ┣ 当前版本: v3.5.3 ┣ 文档地址: https://furion.icu ┣ Copyright: 百小僧, Baiqian Co.,Ltd. ┗━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━ 关于属性生成 如果列表项以 ##属性名## 开头,自动生成 属性名: 作为行首且自动等宽对齐。 Furion 3.9.1 之前版本使用 [属性名] 开头。","s":"15.1 生成规范的日志模板","u":"/docs/global/tp","h":"#151-生成规范的日志模板","p":2258},{"i":2264,"t":"Inject [ɪnˈdʒekt] 意思是 注入,注射 的意思,在这里意为使用最小的侵入式对应用进行机能改造。 Inject() 方法是 Furion 框架提供的最小侵入式的方法,可以让任何 ASP.NET Core Web 后端项目瞬间支持所有 Furion 框架特性。","s":"2.4.1 Inject 设计","u":"/docs/inject","h":"#241-inject-设计","p":2262},{"i":2266,"t":"Inject():在 Program.cs 中注册 AddInject():在 Startup.cs 的 ConfigureServices 中注册 AddInjectBase():在 Startup.cs 的 ConfigureServices 中注册 AddInjectWithUnifyResult()/ AddInjectWithUnifyResult():在 Startup.cs 的 ConfigureServices 中注册 AddInjectMini():支持 Minimal API UseInject():在 Startup.cs 的 Configure 中注册 UseInjectBase():在 Startup.cs 的 Configure 中注册","s":"2.4.2 Inject 方法有哪些","u":"/docs/inject","h":"#242-inject-方法有哪些","p":2262},{"i":2269,"t":"Inject() 是在启动程序 Program.cs 中使用的,集成 Furion 框架唯一方法,如: Furion.Web.Entry\\Program.cs using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace Furion.Web.Entry { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) { return Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.Inject() .UseStartup(); }); } } }","s":"2.4.3.1 Inject() 方法","u":"/docs/inject","h":"#2431-inject-方法","p":2262},{"i":2272,"t":"AddInject() 方法是在 Startup.cs 的 ConfigureServices 中提供最基础功能的注册。 AddInject() 包含以下基础功能注册: services.AddSpecificationDocuments([options]) .AddDynamicApiControllers() .AddDataValidation() .AddFriendlyException(); 使用如下: namespace Furion.Web.Entry { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddInject(); // 支持直接注册(和下面代码二选一,不能同时注册两次) services.AddControllers() .AddInject(); // 支持链式注册(和上面代码二选一,不能同时注册两次) } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他代码 } } }","s":"2.4.4.1 AddInject() 方法","u":"/docs/inject","h":"#2441-addinject-方法","p":2262},{"i":2274,"t":"AddInjectBase() 方法是在 Startup.cs 的 ConfigureServices 中提供最基础功能的注册。 AddInjectBase() 包含以下基础功能注册: services.AddDataValidation() .AddFriendlyException(); 使用同上 AddInject()。","s":"2.4.4.2 AddInjectBase() 方法","u":"/docs/inject","h":"#2442-addinjectbase-方法","p":2262},{"i":2276,"t":"版本说明 以下内容仅限 Furion 3.7.6 + 版本使用。 支持 .NET6 最新的 Minimal API 模式: builder.Services.AddInjectMini();","s":"2.4.4.3 AddInjectMini() 方法","u":"/docs/inject","h":"#2443-addinjectmini-方法","p":2262},{"i":2278,"t":"AddInjectWithUnifyResult() 方法实际上等同于: services.AddInject([swaggerGen]) .AddUnifyResult(); 使用同上 AddInject()。 特别注意 所有 .AddInject****() 方法不能同时注册,只能取其一。","s":"2.4.4.4 AddInjectWithUnifyResult() 方法","u":"/docs/inject","h":"#2444-addinjectwithunifyresult-方法","p":2262},{"i":2281,"t":"UseInject() 方法是在 Startup.cs 的 Configure 中提供最基础功能的注册。 UseInject() 包含以下基础功能注册: app.UseSpecificationDocuments(); 使用如下: namespace Furion.Web.Entry { public class Startup { public void ConfigureServices(IServiceCollection services) { // 其他代码 } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseInject(); // 包含最小 Swagger 注册 } } }","s":"2.4.5.1 UseInject() 方法","u":"/docs/inject","h":"#2451-useinject-方法","p":2262},{"i":2283,"t":"UseInjectBase() 方法是在 Startup.cs 的 Configure 中提供最基础功能的注册。 UseInjectBase() 实际上是个空方法,为了规范化代码特意建立的。 使用同上 UseInject()。","s":"2.4.5.2 UseInjectBase() 方法","u":"/docs/inject","h":"#2452-useinjectbase-方法","p":2262},{"i":2285,"t":"所有 .Inject 方法都可以传入委托,通过委托可以进一步去配置默认行为。如: .AddInject(options => { options.ConfigureDataValidation(vail => { vail.GlobalEnabled = false; }); // .... });","s":"2.4.6 配置 Inject() 默认注册服务","u":"/docs/inject","h":"#246-配置-inject-默认注册服务","p":2262},{"i":2287,"t":"与我们交流 给 Furion 提 Issue。","s":"2.4.7 反馈与建议","u":"/docs/inject","h":"#247-反馈与建议","p":2262},{"i":2290,"t":"在 .NET6/C#10 之后,微软新增了 GlobalUsings 机制,可以在项目的根目录下创建一个 GlobalUsings.cs 文件,把常用的 using 放置其中。 这样 GlobalUsings.cs 所在的项目 .cs 文件就无需重复 using 了,大大的提高开发效率,也让代码变的更加简洁。","s":"2.6.1 关于 GlobalUsing","u":"/docs/globalusing","h":"#261-关于-globalusing","p":2288},{"i":2292,"t":"启用 GlobalUsings 机制需要以下两个步骤: 在你需要全局 using 的项目层根目录创建 GlobalUsings.cs 文件,如果多个项目层需要,则每个层都应该有一个 GlobalUsings.cs 编辑项目的 .csproj 文件,添加 enable,注意是在 中添加,通常和 同父同级","s":"2.6.2 必要配置","u":"/docs/globalusing","h":"#262-必要配置","p":2288},{"i":2294,"t":"配置之后,现在就可以把常用的 using 放到 GlobalUsings.cs 中了,写法如下: Furion 推荐的全局命名空间 global using Furion; global using Furion.DatabaseAccessor; global using Furion.DataEncryption; global using Furion.DataValidation; global using Furion.DependencyInjection; global using Furion.DynamicApiController; global using Furion.Extensions; global using Furion.FriendlyException; global using Furion.Logging; global using Mapster; global using Microsoft.AspNetCore.Authorization; global using Microsoft.AspNetCore.Http; global using Microsoft.AspNetCore.Mvc; global using Microsoft.CodeAnalysis; global using Microsoft.EntityFrameworkCore; global using System.ComponentModel.DataAnnotations; 注意必须以 global 开头! 小知识 一般推荐把实体类的命名空间也放进去,因为仓储 IRepository 使用的频率非常高。 另外推荐大家在 Visual Studio 中安装 CodeMaid 插件(注意 2019 和 2022 版本)哦,自动清理解决方案所有无用的 using,结合 GlobalUsings.cs 非常棒! 个别情况 可能由于 Visual Studio 版本的问题,导致 GlobalUsings.cs 定义出错,这时候需要在 using 后面加 global::,如: global using global::Furion; 接下来在代码中使用: // 无需 using Furion 的命名空间了哦,清爽了不少 namespace Your.Application; public class DefaultAppService : IDynamicApiController { private readonly IRepository _boardCardRepository; private readonly IRepository _boardGroupRepository; private readonly IRepository _boardCardAttachmentRepository; private readonly IRepository _boardCardUserRepository; } // ....","s":"2.6.3 基本使用","u":"/docs/globalusing","h":"#263-基本使用","p":2288},{"i":2296,"t":"实际上微软已经自动把一些常用的 using 在编译后的代码中自动补上了,路径在 项目/obj/Debug/net6.0/项目.GlobalUsings.cs 文件中,文件内容如下: // global using global::System; global using global::System.Collections.Generic; global using global::System.IO; global using global::System.Linq; global using global::System.Net.Http; global using global::System.Threading; global using global::System.Threading.Tasks; 也就是以上的 using 无需写在你创建的 GlobalUsings.cs 中了,微软会在编译时自动合并。","s":"2.6.3.1 默认全局 using","u":"/docs/globalusing","h":"#2631-默认全局-using","p":2288},{"i":2298,"t":"默认情况下,.NET5 采用 C# 9.0 编译,而 GlobalUsing 是从 C# 10.0 开始,这时候只需要编辑项目的 .csproj 并添加 10.0 即可: net5.0 10.0 如需使用最新版可配置为 latest。","s":"2.6.4 .NET5 项目开启支持","u":"/docs/globalusing","h":"#264-net5-项目开启支持","p":2288},{"i":2300,"t":"与我们交流 给 Furion 提 Issue。","s":"2.6.5 反馈与建议","u":"/docs/globalusing","h":"#265-反馈与建议","p":2288},{"i":2303,"t":"引用百度百科 IPC(Inter-Process Communication,进程间通信)。进程间通信是指两个进程的数据之间产生交互。 通俗点说,IPC 可以实现不同应用程序间通信(交互数据)。","s":"33.1 什么是 IPC","u":"/docs/ipc","h":"#331-什么是-ipc","p":2301},{"i":2305,"t":"半双工 Unix 管道 FIFOs(命名管道) 消息队列(常用模式) 信号量 共享内存(常用模式,Furion 框架默认实现方式) 网络 Socket(常用模式)","s":"33.2 实现 IPC 通信方式","u":"/docs/ipc","h":"#332-实现-ipc-通信方式","p":2301},{"i":2307,"t":"IPC 本身指的是 进程间 通信,但 Furion 框架将内置 进程间/内 两种进程通信模式。 进程内通信:Furion 采用 Channel 管道提供进程内通信 进程外通信:Furion 采用 MemoryMapperFile 共享内存方式实现进程外通信(后续版本完善)","s":"33.3 IPC 通信模式","u":"/docs/ipc","h":"#333-ipc-通信模式","p":2301},{"i":2309,"t":"进程内通信俗称线程间通信,Furion 框架采用 C# 提供的 Channel(管道) + Lazy + Task.Factory 实现长时间高性能的线程间通信机制。Channel 管道也是目前 .NET/C# 实现 生产者-订阅者 模式最简易且最为强大的实现。","s":"33.4 进程内通信(线程间)","u":"/docs/ipc","h":"#334-进程内通信线程间","p":2301},{"i":2311,"t":"Channel 是在 .NET Core 2.1+ 版本之后加入。Channel 底层实现是一个高效的、线程安全的队列,可以在线程之间传递数据。 Channel 的主要应用场景是 发布/订阅、观察者模式 中使用,如:事件总线 就是最好的实现方式。通过 Channel 实现 生产-消费 机制可以减少项目间的耦合,提高应用吞吐量。 Furion 框架提供了 ChannelContext 密封类,提供 UnBoundedChannel 和 BoundedChannel 两种管道通信模式。 UnBoundedChannel:具有无限容量的 Channel, 生产者可以全速进行生产数据,但如果消费者的消费速度低于生产者,Channel 的资源使用会无限增加,会有服务器资源耗尽的可能。 BoundedChannel:具有有限容量的 Channel,Furion 框架默认为 1000,到达上限后,生产者进入等待写入直到有空闲,好处是可以控制生产的速度,控制系统资源的使用。(推荐)","s":"33.4.1 了解 Channel","u":"/docs/ipc","h":"#3341-了解-channel","p":2301},{"i":2313,"t":"创建 ChannelHandler 管道处理程序​ using Furion.IPCChannel; using System; using System.Threading.Tasks; namespace Furion.Core { /// /// 创建管道处理程序(处理 String 类型消息) /// public class MyChannelHandler : ChannelHandler { /// /// 接受到管道消息后处理程序 /// /// /// public override Task InvokeAsync(string message) { Console.WriteLine(message); return Task.CompletedTask; } } } note ChannelHandler 泛型类型决定了你要接受那种类型的消息,不同类型消息将会自动过滤筛选。 使用 ChannelContext 发送消息​ public async Task SendAsync() { for (int i = 0; i < 100; i++) { // 使用有限容量生产数据 await ChannelContext.BoundedChannel.Writer.WriteAsync($\"Loop {i} times.\"); } } 以上代码也可以通过 ChannelContext.BoundedChannel.Writer.TryWrite() 同步写入。","s":"33.4.2 常规使用","u":"/docs/ipc","h":"#3342-常规使用","p":2301},{"i":2315,"t":"默认情况下,Furion 初始化了一个长时间的 Task 任务进行数据检查及订阅,如需实现多订阅模式,可创建新的订阅任务即可: var reader = ChannelContext.BoundedChannel.Reader; // 创建长时间线程管道读取器 _ = Task.Factory.StartNew(async () => { while (await reader.WaitToReadAsync()) { if (!reader.TryRead(out var message)) continue; // 默认重试 3 次(每次间隔 1s) await Retry.Invoke(async () => await Activator.CreateInstance().InvokeAsync(message), 3, 1000, finalThrow: false); } }, TaskCreationOptions.LongRunning);","s":"33.4.3 实现多订阅","u":"/docs/ipc","h":"#3343-实现多订阅","p":2301},{"i":2317,"t":"可查阅 Dotnet Core 下的 Channel, 你用了吗? 博客教程(😃 写的不错)","s":"33.4.4 更多 Channel 知识","u":"/docs/ipc","h":"#3344-更多-channel-知识","p":2301},{"i":2319,"t":"在 Furion v2.18+ 版本提供了 CallContext 静态类,内部使用 AsyncLocal 实现,也可以实现线程间通信,如: CallContext.SetLocalValue(\"name\", \"Furion\"); CallContext.GetLocalValue(\"name\"); CallContext.SetLocalValue(\"count\", 1); CallContext.GetLocalValue(\"count\");","s":"33.4.5 CallContext 方式","u":"/docs/ipc","h":"#3345-callcontext-方式","p":2301},{"i":2321,"t":"Furion 目前暂未提供的进程外通信功能,将在后续版本实现(主要是模块设计还未想好,技术已实现)。 主要是通过 MemoryMapperFile 实现共享内存达到进程外通信功能,了解更多 MemoryMapperFile","s":"34.5 进程外通信(共享内存)","u":"/docs/ipc","h":"#345-进程外通信共享内存","p":2301},{"i":2323,"t":"与我们交流 给 Furion 提 Issue。","s":"33.6 反馈与建议","u":"/docs/ipc","h":"#336-反馈与建议","p":2301},{"i":2326,"t":"全局唯一性: 不能出现重复的 ID 号, 既然是唯一标识, 这是最基本的要求。 趋势递增: 在 MySQL InnoDB 引擎中使用的是聚集索引, 由于多数 RDBMS 使用 B-tree 的数据结构来存储索引数据, 在主键的选择上面我们应该尽量使用有序的主键保证写入性能。 单调递增: 保证下一个 ID 一定大于上一个 ID, 例如事务版本号, IM 增量消息, 排序等特殊需求。 信息安全: 如果 ID 是连续的, 恶意用户的扒取工作就非常容易做了, 直接按照顺序下载指定 URL 即可; 如果是订单号就更危险了, 竞对可以直接知道我们一天的单量。 所以在一些应用场景下, 会需要 ID 无规则, 不规则。","s":"27.1 为什么需要分布式 ID","u":"/docs/idgenerator","h":"#271-为什么需要分布式-id","p":2324},{"i":2328,"t":"常见的分布式 ID 有 连续 GUID、短 ID、雪花算法 ID。","s":"27.2 分布式 ID 有哪些","u":"/docs/idgenerator","h":"#272-分布式-id-有哪些","p":2324},{"i":2331,"t":"静态 IDGen 方式 var guid = IDGen.NextID(); // 还可以配置更多参数 var guid2 = IDGen.NextID(new SequentialGuidSettings { LittleEndianBinary16Format = true })); // SequentialGuidSettings 参数取决于你的分布式ID的实现 特别提醒 如果在循环中使用 IDGen 静态类方式,性能最差,原因是底层不断解析服务。如果非循环中,性能等于下面两种用法。 IDistributedIDGenerator 注入方式 推荐 private readonly IDistributedIDGenerator _idGenerator; public AppServices(IDistributedIDGenerator idGenerator) { _idGenerator = idGenerator; var guidObject = _idGenerator.Create(); } SequentialGuidIDGenerator 方式 var idGen = new SequentialGuidIDGenerator(); var guid = idGen.Create(); // 更多参数 var idGen2 = new SequentialGuidIDGenerator(); var guid2 = idGen2.Create(new SequentialGuidSettings { LittleEndianBinary16Format = true });","s":"27.3.1 连续 GUID 方式","u":"/docs/idgenerator","h":"#2731-连续-guid-方式","p":2324},{"i":2333,"t":"短 ID 按道理不应该放在分布式 ID 生成这个章节,它的作用用途常用于并发不强的内部系统中,比如 任务ID,Issue 编号 等等。 var shortid = ShortIDGen.NextID(); // 生成一个包含数字,字母,不包含特殊符号的 8 位短id // 添加更多配置 var shortid = ShortIDGen.NextID(new GenerationOptions { UseNumbers = false, // 不包含数字 UseSpecialCharacters = true, // 包含特殊符号 Length = 8// 设置长度,注意:不设置次长度是随机长度!!!!!!! }); // 自定义生成短 ID 参与运算字符 string characters = \"ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ①②③④⑤⑥⑦⑧⑨⑩⑪⑫\"; //whatever you want; ShortIDGen.SetCharacters(characters); // 自定义随机数(for)步长 int seed = 1939048828; ShortIDGen.SetSeed(seed); // 重载所有自定义配置 ShortIDGen.Reset();","s":"27.3.2 短 ID","u":"/docs/idgenerator","h":"#2732-短-id","p":2324},{"i":2335,"t":"Furion 在最新的 2.1 + 版本移除了雪花算法 ID 功能,原因是: 目前,雪花算法 ID 使用频率不高,而且实现 雪花算法 ID 的方式也是千差万别,所以框架移除该功能,采用拓展或自集成方式。","s":"27.3.3 雪花算法 ID","u":"/docs/idgenerator","h":"#2733-雪花算法-id","p":2324},{"i":2337,"t":"与我们交流 给 Furion 提 Issue。","s":"27.4 反馈与建议","u":"/docs/idgenerator","h":"#274-反馈与建议","p":2324},{"i":2339,"t":"版本说明 以下内容仅限 Furion 1.16.0 + 版本使用。","s":"23. JSON 序列化","u":"/docs/json-serialization","h":"","p":2338},{"i":2341,"t":"JSON (JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c 制定的 js 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。 简单来说,JSON,是一种数据格式,在与后端的数据交互中有较为广泛的应用。","s":"23.1 什么是 JSON","u":"/docs/json-serialization","h":"#231-什么是-json","p":2338},{"i":2343,"t":"目前在 C# 语言中有两个主流的 JSON 序列化操作库: System.Text.Json:.NET Core 内置 JSON 序列化库,也是 Furion 框架默认实现 Newtonsoft.Json:目前使用人数最多的 JSON 序列化库,需要安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 拓展包 由于目前 System.Text.Json 相比 Newtonsoft.Json 功能和稳定性有许多不足之处,比如循环引用问题在 System.Text.Json 无解。但在 .NET 6 之后得到解决。 Furion 框架为了解决多种序列化工具配置和用法上的差异问题,抽象出了 IJsonSerializerProvider 接口。","s":"23.2 关于序列化库","u":"/docs/json-serialization","h":"#232-关于序列化库","p":2338},{"i":2345,"t":"Furion 框架提供了 IJsonSerializerProvider 接口规范,同时要求实现该接口的实体都必须采用单例模式,该接口定义代码如下: namespace Furion.JsonSerialization { /// /// Json 序列化提供器 /// public interface IJsonSerializerProvider { /// /// 序列化对象 /// /// /// /// string Serialize(object value, object jsonSerializerOptions = default); /// /// 反序列化字符串 /// /// /// /// /// T Deserialize(string json, object jsonSerializerOptions = default); /// /// 返回读取全局配置的 JSON 选项 /// /// object GetSerializerOptions(); } } 默认实现 SystemTextJsonSerializerProvider 类是 IJsonSerializerProvider 接口的默认实现,在应用启动时已默认注册。","s":"23.3 IJsonSerializerProvider 接口","u":"/docs/json-serialization","h":"#233-ijsonserializerprovider-接口","p":2338},{"i":2348,"t":"Furion 框架提供了两种方式获取 IJsonSerializerProvider 实例: 构造函数注入 IJsonSerializerProvider 静态类 JSON.GetJsonSerializer() 方式,查看 JSON 静态类 如: using Furion.DynamicApiController; using Furion.JsonSerialization; namespace Furion.Application { public class JsonDemo : IDynamicApiController { private readonly IJsonSerializerProvider _jsonSerializer; private readonly IJsonSerializerProvider _jsonSerializer2; public JsonDemo(IJsonSerializerProvider jsonSerializer) { _jsonSerializer = jsonSerializer; _jsonSerializer2 = JSON.GetJsonSerializer(); } } }","s":"23.4.1 获取序列化对象","u":"/docs/json-serialization","h":"#2341-获取序列化对象","p":2338},{"i":2350,"t":"public string GetText() { return _jsonSerializer.Serialize(new { Id = 1, Name = \"Furion\" }); }","s":"23.4.2 序列化对象","u":"/docs/json-serialization","h":"#2342-序列化对象","p":2338},{"i":2352,"t":"public object GetObject() { var json = \"{\\\"Id\\\":1,\\\"Name\\\":\\\"Furion\\\"}\"; var obj = _jsonSerializer.Deserialize(json); return obj; } 特别注意 System.Text.Json 默认反序列化大小写敏感,也就是不完全匹配的属性名称不会自动赋值。这时候我们可以全局配置或单独配置。 全局配置 services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; }); 单独配置 var obj = _jsonSerializer.Deserialize(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true });","s":"23.4.3 反序列化字符串","u":"/docs/json-serialization","h":"#2343-反序列化字符串","p":2338},{"i":2354,"t":"Furion 框架不推荐一个框架中有多种序列化实现类,也就是说使用 System.Text.Json 就不要使用 Newtonsoft.Json,反之亦然。 如需配置更多选项,只需创建 JsonSerializerOptions 配置对象即可,如: var json = _jsonSerializer.Serialize(new { Id = 1, Name = \"Furion\" }, new JsonSerializerOptions { WriteIndented = true });","s":"23.4.4 序列化更多配置","u":"/docs/json-serialization","h":"#2344-序列化更多配置","p":2338},{"i":2357,"t":"正如上文所说,Furion 默认的 IJsonSerializerProvider 实现方式是 System.Text.Json 库,如需替换为 Newtonsoft.Json,只需以下步骤即可: 无需安装 在 Furion 4.6.5+ 版本已经内置了 Microsoft.AspNetCore.Mvc.NewtonsoftJson 拓展包,也就是直接在 Startup.cs 中注册即可。 安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 拓展,并在 Startup.cs 中注册 services.AddControllersWithViews() .AddNewtonsoftJson(); 实现 IJsonSerializerProvider 提供器 using Furion.DependencyInjection; using Furion.JsonSerialization; using Newtonsoft.Json; namespace Furion.Core { /// /// Newtonsoft.Json 实现 /// public class NewtonsoftJsonSerializerProvider : IJsonSerializerProvider, ISingleton { /// /// 序列化对象 /// /// /// /// public string Serialize(object value, object jsonSerializerOptions = null) { return JsonConvert.SerializeObject(value, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings); } /// /// 反序列化字符串 /// /// /// /// /// public T Deserialize(string json, object jsonSerializerOptions = null) { return JsonConvert.DeserializeObject(json, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings); } /// /// 返回读取全局配置的 JSON 选项 /// /// public object GetSerializerOptions() { return App.GetOptions()?.SerializerSettings; } } }","s":"23.5.1 自定义序列化提供器","u":"/docs/json-serialization","h":"#2351-自定义序列化提供器","p":2338},{"i":2359,"t":"System.Text.Json 方式 services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = null; // options.JsonSerializerOptions.DictionaryKeyPolicy = null; // 配置 Dictionary 类型序列化输出 }); Newtonsoft.Json 方式 services.AddControllersWithViews() .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver(); }); 特别注意 采用 Newtonsoft.Json 方式接口返回值能够正常输出,但是 Swagger 界面中的 Example Values 依然显示小写字母开头的属性,这时只需要再添加 System.Text.Json 配置即可,如: .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = null; }); 主要原因是 Swagger 拓展包底层依赖了 System.Text.Json。","s":"23.5.2 序列化属性名大写(属性原样输出)","u":"/docs/json-serialization","h":"#2352-序列化属性名大写属性原样输出","p":2338},{"i":2361,"t":"System.Text.Json 方式 services.AddControllersWithViews() .AddJsonOptions(options => { // 在 4.6.5 之前的版本使用 .AddDateFormatString options.JsonSerializerOptions.Converters.AddDateTimeTypeConverters(\"yyyy-MM-dd HH:mm:ss\"); }); 小提示 如果使用使用了 DateTimeOffset 类型,那么可以设置 .AddDateTimeTypeConverters(\"yyyy-MM-dd HH:mm:ss\", true) 第二个参数为 true,自动转换成本地时间。 如果使用了 Mysql 数据库,且使用了 Pomelo.EntityFrameworkCore.MySql 包,那么会出现时区问题,比如少 8 小时,可以尝试配置第二个参数为 true。 需引用 System.Text.Json 命名空间。 Newtonsoft.Json 方式 services.AddControllersWithViews() .AddNewtonsoftJson(options => { options.SerializerSettings.DateFormatString = \"yyyy-MM-dd HH:mm:ss\"; });","s":"23.5.3 时间格式化","u":"/docs/json-serialization","h":"#2353-时间格式化","p":2338},{"i":2363,"t":"System.Text.Json 方式 services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles; }); 特别说明 在 .NET 5 中,System.Text.Json 并不支持处理循环引用问题,以上的解决方案仅限用于 .NET 6 Preview 2+。😂 需引用 System.Text.Json 命名空间。 Newtonsoft.Json 方式 services.AddControllersWithViews() .AddNewtonsoftJson(options => { options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; });","s":"23.5.4 忽略循环引用","u":"/docs/json-serialization","h":"#2354-忽略循环引用","p":2338},{"i":2365,"t":"System.Text.Json 方式 services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.IncludeFields = true; }); 需引用 System.Text.Json 命名空间。 Newtonsoft.Json 方式 无需配置。","s":"23.5.5 包含成员字段序列化","u":"/docs/json-serialization","h":"#2355-包含成员字段序列化","p":2338},{"i":2367,"t":"System.Text.Json 方式 services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.AllowTrailingCommas = true; }); 需引用 System.Text.Json 命名空间。 Newtonsoft.Json 方式 无需配置。","s":"23.5.6 允许尾随逗号","u":"/docs/json-serialization","h":"#2356-允许尾随逗号","p":2338},{"i":2369,"t":"System.Text.Json 方式 services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.ReadCommentHandling = JsonCommentHandling.Skip; }); 需引用 System.Text.Json 命名空间。 Newtonsoft.Json 方式 无需配置。","s":"23.5.7 允许注释","u":"/docs/json-serialization","h":"#2357-允许注释","p":2338},{"i":2371,"t":"System.Text.Json 方式 services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping; }); 需引用 System.Text.Json 命名空间。 Newtonsoft.Json 方式 无需配置。","s":"23.5.8 处理乱码问题","u":"/docs/json-serialization","h":"#2358-处理乱码问题","p":2338},{"i":2373,"t":"System.Text.Json 方式 services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; }); 需引用 System.Text.Json 命名空间。 Newtonsoft.Json 方式 更多序列化配置 这里只列举常用见的序列化配置,如需查看更多配置,可查阅 System.Text.Json 文档","s":"23.5.9 不区分大小写","u":"/docs/json-serialization","h":"#2359-不区分大小写","p":2338},{"i":2375,"t":"有时候我们不希望对象中某个对象被序列化出来或者不想在 Swagger 中显示,这时候只需要在属性贴该特性即可: [Newtonsoft.Json.JsonIgnore] // 针对 Newtonsoft [System.Text.Json.Serialization.JsonIgnore] // 针对 System.Text.Json public string PropertyName {get; set;}","s":"23.5.10 忽略特定属性序列化","u":"/docs/json-serialization","h":"#23510-忽略特定属性序列化","p":2338},{"i":2377,"t":"有时候使用了动态对象后发现属性名出现了大写情况(首字母),这个时候可以尝试使用以下方法解决: .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); })","s":"23.5.11 动态对象属性名大写问题","u":"/docs/json-serialization","h":"#23511-动态对象属性名大写问题","p":2338},{"i":2379,"t":"有时候我们需要将 long 类型序列化时转为 string 类型,防止 JavaScript 出现精度溢出问题,这个时候可以尝试使用以下方法解决: System.Text.Json 方式 services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.AddLongTypeConverters(); }); Newtonsoft.Json 方式 .AddNewtonsoftJson(options => { options.SerializerSettings.Converters.AddLongTypeConverters(); }) 关于 Dictionary<,> 类型包含 long 处理 默认情况下,System.Text.Json 不支持 Dictionary<,> 类型的序列化设置 Converter 操作,这个时候可以换成 Newtonsoft.Json 处理,如: .AddNewtonsoftJson(options => { options.SerializerSettings.Converters.AddLongTypeConverters(); }) 同时创建 NewtonsoftJsonSerializerProvider.cs 文件写入即可: namespace YourProject.Core; public class NewtonsoftJsonSerializerProvider : IJsonSerializerProvider, ISingleton { public string Serialize(object value, object jsonSerializerOptions = null) { return JsonConvert.SerializeObject(value, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings); } public T Deserialize(string json, object jsonSerializerOptions = null) { return JsonConvert.DeserializeObject(json, (jsonSerializerOptions ?? GetSerializerOptions()) as JsonSerializerSettings); } public object GetSerializerOptions() { return App.GetOptions()?.SerializerSettings; } }","s":"23.5.12 long 类型序列化时转 string","u":"/docs/json-serialization","h":"#23512-long-类型序列化时转-string","p":2338},{"i":2381,"t":"在 .NET6+ 添加了 DateOnly 和 TimeOnly 类型,Furion 4.7.9+ 提供了支持。 System.Text.Json 方式 services.AddControllersWithViews() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.AddDateOnlyConverters(); // DateOnly options.JsonSerializerOptions.Converters.AddTimeOnlyConverters(); // TimeOnly }); Newtonsoft.Json 方式 .AddNewtonsoftJson(options => { options.JsonSerializerOptions.Converters.AddDateOnlyConverters(); // DateOnly options.JsonSerializerOptions.Converters.AddTimeOnlyConverters(); // TimeOnly })","s":"23.5.13 DateOnly 和 TimeOnly 类型序列化支持","u":"/docs/json-serialization","h":"#23513-dateonly-和-timeonly-类型序列化支持","p":2338},{"i":2383,"t":"以下处理只针对 Newtonsoft.Json,数据为 0001-01-01 00:00:00 的情形下反序列化为 DateTimeOffset 类型报错: Could not convert string to DateTimeOffset: 0001-01-01 00:00:00 相关问题讨论:https://stackoverflow.com/questions/50628374/json-net-deserializing-datetimeoffset-value-fails-for-datetimeoffset-minvalue-wi/50631270#50631270 System.Text.Json 方式 无需配置 Newtonsoft.Json 方式 .AddNewtonsoftJson(options => { options.SerializerSettings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore; options.SerializerSettings.DateParseHandling = DateParseHandling.None; options.SerializerSettings.Converters.Add(new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }); });","s":"23.5.14 DateTimeOffset 反序列化异常","u":"/docs/json-serialization","h":"#23514-datetimeoffset-反序列化异常","p":2338},{"i":2385,"t":"由于默认 Furion 采用 System.Text.Json 进行序列化,但是不支持复杂类型,如 DataTable 、 DataSet、Tuple 元组,所以需要更换成 NewtonsoftJson 即可,见 JSON 序列化 - 23.5.1 自定义序列化提供器","s":"23.6 DataTable、DataSet、Tuple 元组等序列化问题","u":"/docs/json-serialization","h":"#236-datatabledatasettuple-元组等序列化问题","p":2338},{"i":2387,"t":"https://docs.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json-migrate-from-newtonsoft-how-to?pivots=dotnet-5-0","s":"23.7 System.Text.Json 和 Newtonsoft.Json 完整差异化对比","u":"/docs/json-serialization","h":"#237-systemtextjson-和-newtonsoftjson-完整差异化对比","p":2338},{"i":2389,"t":"与我们交流 给 Furion 提 Issue。","s":"23.8 反馈与建议","u":"/docs/json-serialization","h":"#238-反馈与建议","p":2338},{"i":2391,"t":"4.8.0+ 版本说明 在 Furion 4.8.0+ 版本采用 Sundial 定时任务替换原有的 TaskScheduler,😶查看新文档 旧版本将支持到 2022年12月31日,之后旧版本代码从框架中移除,请尽快使用新版本替代。 版本说明 以下内容仅限 Furion 2.0.0 + 版本使用。 IIS 部署说明 由于 IIS 有回收的机制,所以定时任务应该采用独立部署,不然经常出现不能触发的情况。查看【Worker Service 章节】","s":"26. 定时任务/后台任务","u":"/docs/job-old","h":"","p":2390},{"i":2393,"t":"顾名思义,定时任务就是在特定的时间或符合某种时间规律执行的任务。通常定时任务有四种时间调度方式: 缓隔时间 方式:延迟多少时间后调配任务,这种方式任务只会被调用一次。 间隔时间 方式:每隔一段固定时间调配任务,无间断调用任务。 Cron 表达式 方法:通过 Cron 表达式计算下一次执行时间进行调配任务,可以配置特定时间范围内执行,也可以无间断执行。 自定义下次执行时间:可以通过各种逻辑运算返回下一次执行时间","s":"26.1 关于定时任务","u":"/docs/job-old","h":"#261-关于定时任务","p":2390},{"i":2395,"t":"Furion 框架提供了两种方式实现定时任务: SpareTime 静态类:SpareTime 静态类提供 SpareTime.Do([options]) 方式调用。 ISpareTimeWorker 依赖方式:通过自定义类实现 ISpareTimeWorker 接口并编写一定规则的方法即可。需要在 Startup.cs 中注册 services.AddTaskScheduler()","s":"26.2 如何实现","u":"/docs/job-old","h":"#262-如何实现","p":2390},{"i":2398,"t":"这里演示 3s 后执行 Console.WriteLine(\"当前时间:\" + DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); // timer 是定时器的对象,包含定时器相关信息 // count 表示执行次数,这里只有一次 SpareTime.DoOnce(3000, (timer, count) => { Console.WriteLine(\"现在时间:\" + DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); });","s":"26.3.1 特定时间后执行","u":"/docs/job-old","h":"#2631-特定时间后执行","p":2390},{"i":2400,"t":"SpareTime.DoOnce(3000, (timer, count) => { Console.WriteLine(\"现在时间:\" + DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); }, \"jobName\", \"描述一下这个任务是干什么的\"); jobName 标识任务的唯一标识,通过这个标识可以启动、暂停、销毁任务。","s":"26.3.2 配置任务信息","u":"/docs/job-old","h":"#2632-配置任务信息","p":2390},{"i":2402,"t":"默认情况下,任务初始化后就立即启动,等待符合的时间就执行,有些时候我们仅仅想初始化时间,不希望立即执行,只需要配置 startNow 即可: SpareTime.DoOnce(3000, (timer, count) => { Console.WriteLine(\"现在时间:\" + DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); },\"jobName\", startNow: false); // 手动启动执行 SpareTime.Start(\"jobName\");","s":"26.3.3 手动启动执行","u":"/docs/job-old","h":"#2633-手动启动执行","p":2390},{"i":2404,"t":"有些时候,我们只需要开启新线程去执行一个任务,比如发短信,发邮件,无需配置。 // 此方法无需主线程等待即可返回,可大大提高性能 SpareTime.DoIt(() => { // 这里发送短信,发送邮件或记录访问记录 }); 还可以指定多长时间后触发,建议 10-1000 毫秒之间: SpareTime.DoIt(() => { // 发送短信 }, 100);","s":"26.3.4 模拟后台执行","u":"/docs/job-old","h":"#2634-模拟后台执行","p":2390},{"i":2406,"t":"public class JobWorker : ISpareTimeWorker { /// /// 3s 后执行 /// /// /// [SpareTime(3000, \"jobName\", DoOnce = true, StartNow = true)] public void DoSomething(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); } /// /// 3s 后执行(支持异步) /// /// /// [SpareTime(3000, \"jobName\", DoOnce = true, StartNow = true)] public async Task DoSomethingAsync(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); await Task.CompletedTask; } } 需要在 Startup.cs 中注册 services.AddTaskScheduler()","s":"26.3.5 ISpareTimeWorker 方式","u":"/docs/job-old","h":"#2635-isparetimeworker-方式","p":2390},{"i":2409,"t":"// 每隔 1s 执行 SpareTime.Do(1000, (timer, count) => { Console.WriteLine(\"现在时间:\" + DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); });","s":"26.4.1 每隔一段时间执行","u":"/docs/job-old","h":"#2641-每隔一段时间执行","p":2390},{"i":2411,"t":"SpareTime.Do(1000, (timer, count) => { Console.WriteLine(\"现在时间:\" + DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); }, \"jobName\", \"这是一个计时器任务\");","s":"26.4.2 配置任务信息","u":"/docs/job-old","h":"#2642-配置任务信息","p":2390},{"i":2413,"t":"SpareTime.Do(1000, (timer, count) => { Console.WriteLine(\"现在时间:\" + DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); }, \"jobName\", startNow:false); SpareTime.Start(\"jobName\");","s":"26.4.3 手动启动执行","u":"/docs/job-old","h":"#2643-手动启动执行","p":2390},{"i":2415,"t":"public class JobWorker : ISpareTimeWorker { /// /// 每隔 3s 执行 /// /// /// [SpareTime(3000, \"jobName\", StartNow = true)] public void DoSomething(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); } } 需要在 Startup.cs 中注册 services.AddTaskScheduler()","s":"26.4.4 ISpareTimeWorker 方式","u":"/docs/job-old","h":"#2644-isparetimeworker-方式","p":2390},{"i":2418,"t":"Cron 表达式是一个字符串,字符串以 5 或 6 个空格隔开,分为 6 或 7 个域,每一个域代表一个含义,Cron 有如下两种语法格式: (1) Seconds Minutes Hours DayofMonth Month DayofWeek Year (2)Seconds Minutes Hours DayofMonth Month DayofWeek Cron 从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份 字段 允许值 允许的特殊字符 秒(Seconds) 0~59 的整数 , - \\* / 四个字符 分(Minutes) 0~59 的整数 , - \\* / 四个字符 小时(Hours) 0~23 的整数 , - \\* / 四个字符 日期(DayofMonth) 1~31 的整数(但是你需要考虑平闰月的天数) ,- \\* ? / L W C 八个字符 月份(Month) 1~12 的整数或者 JAN-DEC , - \\* / 四个字符 星期(DayofWeek) 1~7 的整数或者 SUN-SAT (1=SUN) , - \\* ? / L C # 八个字符 年(可选,留空)(Year) 1970~2099 , - \\* / 四个字符 每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是: (1)_:表示匹配该域的任意值。假如在 Minutes 域使用 \\_, 即表示每分钟都会触发事件。 (2)?:只能用在 DayofMonth 和 DayofWeek 两个域。它也匹配域的任意值,但实际不会。因为 DayofMonth 和 DayofWeek 会相互影响。例如想在每月的 20 日触发调度,不管 20 日到底是星期几,则只能使用如下写法: 13 13 15 20 _ ?, 其中最后一位只能用?,而不能使用_,如果使用*表示不管星期几都会触发,实际上并不是这样。 (3)-:表示范围。例如在 Minutes 域使用 5-20,表示从 5 分到 20 分钟每分钟触发一次 (4)/:表示起始时间开始触发,然后每隔固定时间触发一次。例如在 Minutes 域使用 5/20,则意味着 5 分钟触发一次,而 25,45 等分别触发一次. (5),:表示列出枚举值。例如:在 Minutes 域使用 5,20,则意味着在 5 和 20 分每分钟触发一次。 (6)L:表示最后,只能出现在 DayofWeek 和 DayofMonth 域。如果在 DayofWeek 域使用 5L,意味着在最后的一个星期四触发。 (7)W:表示有效工作日(周一到周五) 只能出现在 DayofMonth 域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth 使用 5W,如果 5 日是星期六,则将在最近的工作日:星期五,即 4 日触发。如果 5 日是星期天,则在 6 日(周一)触发;如果 5 日在星期一到星期五中的一天,则就在 5 日触发。另外一点,W 的最近寻找不会跨过月份 。 (8)LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。 (9)#:用于确定每个月第几个星期几,只能出现在 DayofMonth 域。例如在 4#2,表示某月的第二个星期三。","s":"26.5.1 什么是 Cron 表达式","u":"/docs/job-old","h":"#2651-什么是-cron-表达式","p":2390},{"i":2420,"t":"表达式 表达式代表含义 格式化 * * * * * 每分钟 CronFormat.Standard */1 * * * * 每分钟 CronFormat.Standard 0 0/1 * * * ? 每分钟 CronFormat.IncludeSeconds 0 0 * * * ? 每小时 CronFormat.IncludeSeconds 0 0 0/1 * * ? 每小时 CronFormat.IncludeSeconds 0 23 ? * MON-FRI 晚上 11:00,周一至周五 CronFormat.Standard * * * * * * 每秒 CronFormat.IncludeSeconds */45 * * * * * 每 45 秒 CronFormat.IncludeSeconds */5 * * * * 每 5 分钟 CronFormat.Standard 0 0/10 * * * ? 每 10 分钟 CronFormat.IncludeSeconds 0 */5 * * * * 每 5 分钟 CronFormat.IncludeSeconds 30 11 * * 1-5 周一至周五上午 11:30 CronFormat.Standard 30 11 * * * 11:30 CronFormat.Standard 0-10 11 * * * 上午 11:00 至 11:10 之间的每一分钟 CronFormat.Standard * * * 3 * 每分钟,只在 3 月份 CronFormat.Standard * * * 3,6 * 每分钟,只在 3 月和 6 月 CronFormat.Standard 30 14,16 * * * 下午 02:30 分和 04:30 分 CronFormat.Standard 30 6,14,16 * * * 早上 06:30,下午 02:30 和 04:30 CronFormat.Standard 46 9 * * 1 早上 09:46,只在星期一 CronFormat.Standard 23 12 15 * * 下午 12:23,在本月的第 15 天 CronFormat.Standard 23 12 * JAN * 下午 12:23,只在 1 月份 CronFormat.Standard 23 12 ? JAN * 下午 12:23,只在 1 月份 CronFormat.Standard 23 12 * JAN-FEB * 下午 12:23,1 月至 2 月 CronFormat.Standard 23 12 * JAN-MAR * 下午 12:23,1 月至 3 月 CronFormat.Standard 23 12 * * SUN 下午 12:23,仅在星期天 CronFormat.Standard */5 15 * * MON-FRI 每 5 分钟,下午 0:00 至 03:59,周一至周五 CronFormat.Standard * * * * MON#3 每分钟,在月的第三个星期一 CronFormat.Standard * * * * 4L 每一分钟,在本月的最后一天 CronFormat.Standard */5 * L JAN * 每月一次每月 5 分钟,只在 1 月份 CronFormat.Standard 30 02 14 * * * 下午在 02:02:30 CronFormat.IncludeSeconds 5-10 * * * * * 每分钟的 5-10 秒 CronFormat.IncludeSeconds 5-10 30-35 10-12 * * * 10:00 至 12:00 之间的每分钟 5-10 秒,每小时 30-35 分钟 CronFormat.IncludeSeconds 30 */5 * * * * 每分钟的 30 秒,每五分钟 CronFormat.IncludeSeconds 0 30 10-13 ? * WED,FRI 每小时的 30 分钟,下午 10:00 至 01:00 之间,仅在周三和周五 CronFormat.IncludeSeconds 10 0/5 * * * ? 每分钟的 10 秒,每 05 分钟 CronFormat.IncludeSeconds 0 0 6 1/1 * ? 下午 06:00 CronFormat.IncludeSeconds 0 5 0/1 * * ? 一个小时的 05 分 CronFormat.IncludeSeconds 0 0 L * * 每月最后一天上午 00:00 CronFormat.Standard 0 0 L-1 * * 每月最后一天的凌晨 00:00 CronFormat.Standard 0 0 3W * * 每月第 3 个工作日上午 00:00 CronFormat.Standard 0 0 LW * * 在每月的最后一个工作日,上午 00:00 CronFormat.Standard 0 0 * * 2L 本月最后一个星期二上午 00:00 CronFormat.Standard 0 0 * * 6#3 每月第三个星期六上午 00:00 CronFormat.Standard 0 0 ? 1 MON#1 1 月第一个星期一上午 00:00 CronFormat.Standard 0 0 3 * * ? 每天几点执行一次 CronFormat.IncludeSeconds","s":"26.5.2 常见 Cron 表达式","u":"/docs/job-old","h":"#2652-常见-cron-表达式","p":2390},{"i":2422,"t":"https://cron.qqe2.com/","s":"26.5.3 在线生成 Cron 表达式","u":"/docs/job-old","h":"#2653-在线生成-cron-表达式","p":2390},{"i":2424,"t":"为了方便定义 Cron 表达式,Furion 框架也提供了非常方便的占位符实现常用的时间格式: 占位符 对应表达式 占位符代表含义 @every_second * * * * * * 一秒钟跑一次 @every_minute * * * * * 在分钟开始时每分钟运行一次 @hourly 0 * * * * 在小时开始时每小时运行一次 @daily 0 0 * * * 每天午夜运行一次 @midnight 0 0 * * * 每天午夜运行一次 @weekly 0 0 * * 0 周日上午午夜每周运行一次 @monthly 0 0 1 * * 每月在每月第一天的午夜运行一次 @yearly 0 0 1 1 * 每年 1 月 1 日午夜运行一次 @annually 0 0 1 1 * 每年 1 月 1 日午夜运行一次","s":"26.5.4 Macro 标识符","u":"/docs/job-old","h":"#2654-macro-标识符","p":2390},{"i":2426,"t":"// 每隔 1s 执行 SpareTime.Do(\"* * * * * *\", (timer, count) => { Console.WriteLine(\"现在时间:\" + DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); }, cronFormat: CronFormat.IncludeSeconds); 关于 CronFormat 默认情况下,Furion 框架未启用对 秒 的支持,如需开启,则设置 cronFormat: CronFormat.IncludeSeconds 即可。默认值是 cronFormat: CronFormat.Standard","s":"26.5.5 使用 Cron 表达式","u":"/docs/job-old","h":"#2655-使用-cron-表达式","p":2390},{"i":2428,"t":"// 每隔 1s 执行 SpareTime.Do(\"@every_second\", (timer, count) => { Console.WriteLine(\"现在时间:\" + DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); });","s":"26.5.6 使用 Macro 占位符","u":"/docs/job-old","h":"#2656-使用-macro-占位符","p":2390},{"i":2430,"t":"SpareTime.Do(\"* * * * *\", (timer, count) => { Console.WriteLine(\"现在时间:\" + DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); }, \"cronName\", \"每分钟执行一次\");","s":"26.5.7 配置任务信息","u":"/docs/job-old","h":"#2657-配置任务信息","p":2390},{"i":2432,"t":"SpareTime.Do(\"* * * * *\", (timer, count) => { Console.WriteLine(\"现在时间:\" + DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); }, \"cronName\", \"每分钟执行一次\", startNow: false); SpareTime.Start(\"cronName\");","s":"26.5.8 手动启动执行","u":"/docs/job-old","h":"#2658-手动启动执行","p":2390},{"i":2434,"t":"public class JobWorker : ISpareTimeWorker { /// /// 每分钟执行 /// /// /// [SpareTime(\"* * * * *\", \"jobName\", StartNow = true)] public void DoSomething(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); } /// /// 每分钟执行(支持异步) /// /// /// [SpareTime(\"* * * * *\", \"jobName\", StartNow = true)] public async Task DoSomethingAsync(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); await Task.CompletedTask; } } 需要在 Startup.cs 中注册 services.AddTaskScheduler()","s":"26.5.9 ISpareTimeWorker 方式","u":"/docs/job-old","h":"#2659-isparetimeworker-方式","p":2390},{"i":2436,"t":"有些时候我们需要进行一些业务逻辑,比如数据库查询等操作返回下一次执行时间,这个时候我们可以通过高级自定义方式。","s":"26.6 自定义下次执行时间","u":"/docs/job-old","h":"#266-自定义下次执行时间","p":2390},{"i":2438,"t":"SpareTime.Do(()=>{ // 这里可以查询数据库或进行或进行任何业务逻辑 if(符合逻辑){ return 1000; // 每秒执行 } else return -1; // 不符合逻辑取消任务 }, (timer,count)=>{ Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); }); 配置是否持续检查 默认情况下,该自定义会在返回 小于或等于0 时终止任务的执行。但是我们希望该任务不要终止,只要符合条件都一直执行,只需要配置 cancelInNoneNextTime: false 即可","s":"26.6.1 高级自定义间隔方式","u":"/docs/job-old","h":"#2661-高级自定义间隔方式","p":2390},{"i":2440,"t":"SpareTime.Do(()=>{ // 这里可以查询数据库或进行或进行任何业务逻辑 if(符合逻辑){ return DateTimeOffset.Now.AddMinutes(10); // 十分钟后再执行 } else return null; // 不符合逻辑取消任务 }, (timer,count) => { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); }); 配置是否持续检查 默认情况下,该自定义会在返回 null 时终止任务的执行。但是我们希望该任务不要终止,只要符合条件都一直执行,只需要配置 cancelInNoneNextTime: false 即可,如: SpareTime.Do(()=>{ // 这里可以查询数据库或进行或进行任何业务逻辑 if(符合逻辑){ return SpareTime.GetCronNextOccurrence(\"cron 表达式\"); } else return null; // 不符合逻辑继续检查 }, (timer,count) => { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); }, cancelInNoneNextTime: false);","s":"26.6.2 高级自定义 Cron 表达式","u":"/docs/job-old","h":"#2662-高级自定义-cron-表达式","p":2390},{"i":2442,"t":"除了上面的 SpareTime 静态类方式,Furion 框架还提供了 ISpareTimeWorker 方式,使用该方式非常简单,只需要自定义一个公开且非抽象非静态类并实现 ISpareTimeWorker 即可。 在该类中定义的任务方法需满足以下规则: 必须是公开且实例方法 该方法必须返回 void 且提供 SpareTimer 和 long 两个参数 必须贴有 [SpareTime] 特性 如: public class JobWorker : ISpareTimeWorker { // 每隔一秒执行,且立即启动 [SpareTime(1000, \"jobName1\", StartNow = true)] public void DoSomething1(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); } // 每分钟执行,且立即启动 [SpareTime(\"* * * * *\", \"jobName2\", StartNow = true)] public void DoSomething2(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); } // 每秒执行,且等待启动 [SpareTime(\"* * * * * *\", \"jobName3\",CronFormat = CronFormat.IncludeSeconds, StartNow = false)] public void DoSomething3(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); } // 每秒执行一次,每分钟也执行一次 [SpareTime(1000, \"jobName4\", StartNow = true)] [SpareTime(\"* * * * *\", \"jobName5\", StartNow = true)] public void DoSomething4(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); } // 只执行一次 [SpareTime(1000, \"jobName5\", StartNow = true, DoOnce = true)] public void DoSomething5(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); } // 读取配置文件,通过 #(配置路径) [SpareTime(\"#(MyJob:Time)\", \"jobName6\", StartNow = true, DoOnce = true)] public void DoSomething5(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); } // 支持异步 [SpareTime(1000, \"jobName1\", StartNow = true)] public async Task DoSomethingAsync(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); await Task.CompletedTask; } } 关于依赖注入 ISpareTimeWorker 接口主要是用来查找定时器对象的,也就是它的实现类并未提供依赖注入功能,所以在实现类并不支持构造函数注入依赖项。","s":"26.7 ISpareTimeWorker 说明","u":"/docs/job-old","h":"#267-isparetimeworker-说明","p":2390},{"i":2444,"t":"[SpareTime] 支持以下配置属性 Interval:间隔时间, double 类型 CronExpression:Cron 表达式,string 类型 WorkerName:任务唯一标识,string 类型,必填 Description:任务描述,string 类型 DoOnce:是否只执行一次,bool 类型,默认 false StartNow:是否立即启动,默认 false CronFormat:Cron 表达式格式化方式,CronFormat 枚举类型,默认 CronFormat.Standard ExecuteType:配置任务执行方式,SpareTimeExecuteTypes 枚举类型,默认 SpareTimeExecuteTypes.Parallel","s":"26.7.1 [SpareTime] 特性","u":"/docs/job-old","h":"#2671-sparetime-特性","p":2390},{"i":2446,"t":"SpareTime 静态类提供了一些方法方便初始化和管理任务","s":"26.8 SpareTime 静态类","u":"/docs/job-old","h":"#268-sparetime-静态类","p":2390},{"i":2448,"t":"// 开启间隔任务 SpareTime.Do(interval, [options]); // 开启 Cron 表达式任务 SpareTime.Do(expression, [options]); // 只执行一次任务 SpareTime.DoOnce(interval, [options]); // 实现自定义任务 SpareTime.Do(()=>{ return DateTime.Now.AddMinutes(10); },[options]);","s":"26.8.1 初始化任务","u":"/docs/job-old","h":"#2681-初始化任务","p":2390},{"i":2450,"t":"// 实现后台执行 SpareTime.DoIt(()=>{});","s":"26.8.2 实现后台执行","u":"/docs/job-old","h":"#2682-实现后台执行","p":2390},{"i":2452,"t":"SpareTime.Start(\"任务标识\");","s":"26.8.3 开始一个任务","u":"/docs/job-old","h":"#2683-开始一个任务","p":2390},{"i":2454,"t":"SpareTime.Stop(\"任务标识\"); // 还可以标记一个任务执行失败 SpareTime.Stop(\"任务标识\", true);","s":"26.8.4 暂停一个任务","u":"/docs/job-old","h":"#2684-暂停一个任务","p":2390},{"i":2456,"t":"SpareTime.Cancel(\"任务名称\");","s":"26.8.5 取消一个任务","u":"/docs/job-old","h":"#2685-取消一个任务","p":2390},{"i":2458,"t":"SpareTime.Dispose();","s":"26.8.6 销毁所有任务","u":"/docs/job-old","h":"#2686-销毁所有任务","p":2390},{"i":2460,"t":"var workers = SpareTime.GetWorkers();","s":"26.8.7 获取所有任务","u":"/docs/job-old","h":"#2687-获取所有任务","p":2390},{"i":2462,"t":"var worker = SpareTime.GetWorker(\"workerName\");","s":"26.8.8 获取单个任务","u":"/docs/job-old","h":"#2688-获取单个任务","p":2390},{"i":2464,"t":"var nextTime = SpareTime.GetCronNextOccurrence(\"* * * * *\");","s":"26.8.9 解析 Cron 表达式","u":"/docs/job-old","h":"#2689-解析-cron-表达式","p":2390},{"i":2466,"t":"Furion 框架提供了任务两种执行方式 并行 和 串行: 并行:无需等待上一次任务完成,默认值 串行:需等待上一次任务完成","s":"26.9 并行和串行执行方式","u":"/docs/job-old","h":"#269-并行和串行执行方式","p":2390},{"i":2468,"t":"SpareTime.Do(1000, (t, i) => { Thread.Sleep(5000); // 模拟执行耗时任务 Console.WriteLine($\"{t.WorkerName} -{t.Description} - {DateTime.Now:yyyy-MM-dd HH:mm:ss} - {i}\"); }, \"serialName\", \"模拟串行任务\", executeType: SpareTimeExecuteTypes.Serial);","s":"26.9.1 SpareTime 静态方式指定","u":"/docs/job-old","h":"#2691-sparetime-静态方式指定","p":2390},{"i":2470,"t":"[SpareTime(1000, \"jobName1\", StartNow = true, ExecuteType = SpareTimeExecuteTypes.Serial)] public void DoSomething1(SpareTimer timer, long count) { Console.WriteLine(DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\")); Console.WriteLine($\"一共执行了:{count} 次\"); }","s":"26.9.2 ISpareTimeWorker 方式","u":"/docs/job-old","h":"#2692-isparetimeworker-方式","p":2390},{"i":2472,"t":"有些时候我们可能在执行任务过程中出现异常,Furion 也提供了属性判断是否有异常和异常信息,方便记录到日志中,如: SpareTime.Do(1000, (t, c) => { // 判断是否有异常 if (t.Exception.Any()) { Console.WriteLine(t.Exception.Values.LastOrDefault()?.Message); } // 执行第三次抛异常 if (c > 2) { throw Oops.Oh(\"抛异常\" + c); } else { Console.WriteLine($\"{t.WorkerName} -{t.Description} - {DateTime.Now:yyyy-MM-dd HH:mm:ss} - {c}\"); } }, \"exceptionJob\"); 特别说明 如果一个任务连续错误次数达 10次 则任务将自动停止,并标记任务状态为 Failed。","s":"26.10 任务异常处理","u":"/docs/job-old","h":"#2610-任务异常处理","p":2390},{"i":2474,"t":"有些时候我们需要在任务中进行数据库操作或解析服务,这时候我们只需要创建一个新的作用域即可","s":"26.11 如何在任务中解析对象","u":"/docs/job-old","h":"#2611-如何在任务中解析对象","p":2390},{"i":2476,"t":"SpareTime.Do(1000, (timer,count) => { Scoped.Create((_, scope) => { var services = scope.ServiceProvider; // 获取数据库上下文 var dbContext = Db.GetDbContext(services); // 获取仓储 var respository = Db.GetRepository(services); // 解析其他服务 var otherService = services.GetService(); var otherService2 = App.GetService(services); }); }, \"任务标识\");","s":"26.11.1 SpareTime 静态类中","u":"/docs/job-old","h":"#26111-sparetime-静态类中","p":2390},{"i":2478,"t":"[SpareTime(1000, \"jobName1\", StartNow = true, ExecuteType = SpareTimeExecuteTypes.Serial)] public void DoSomething1(SpareTimer timer, long count) { Scoped.Create((_, scope) => { var services = scope.ServiceProvider; // 获取数据库上下文 var dbContext = Db.GetDbContext(services); // 获取仓储 var respository = Db.GetRepository(services); // 解析其他服务 var otherService = services.GetService(); var otherService2 = App.GetService(services); }); } 数据库操作注意 如果作用域中对数据库有任何变更操作,需手动调用 SaveChanges 或带 Now 结尾的方法。也可以使用 Scoped.CreateUow(handler) 代替。","s":"26.11.2 ISpareTimeWorker 方式","u":"/docs/job-old","h":"#26112-isparetimeworker-方式","p":2390},{"i":2480,"t":"BackgroundService 是 .NET Core 3 之后提供的轻量级后台任务,同时可以发布到 Windows 服务和 Linux 守护进程中。","s":"26.12 在 BackgroundService 中使用","u":"/docs/job-old","h":"#2612-在-backgroundservice-中使用","p":2390},{"i":2482,"t":"namespace WorkerService; public class Worker : BackgroundService { private readonly ILogger _logger; private const int delay = 1000; public Worker(ILogger logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current); await taskFactory.StartNew(async () => { // 你的业务代码写到这里面 _logger.LogInformation(\"Worker running at: {time}\", DateTimeOffset.Now); await Task.CompletedTask; }, stoppingToken); await Task.Delay(delay, stoppingToken); } } }","s":"26.12.1 间隔执行方式","u":"/docs/job-old","h":"#26121-间隔执行方式","p":2390},{"i":2484,"t":"using Furion.TimeCrontab; namespace WorkerService; public class Worker : BackgroundService { private readonly ILogger _logger; private readonly Crontab _crontab; public Worker(ILogger logger) { _logger = logger; _crontab = Crontab.Parse(\"* * * * * *\", CronStringFormat.WithSeconds); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current); await taskFactory.StartNew(async () => { // 你的业务代码写到这里面 _logger.LogInformation(\"Worker running at: {time}\", DateTimeOffset.Now); await Task.CompletedTask; }, stoppingToken); await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.UtcNow), stoppingToken); } } }","s":"26.12.2 Cron 表达式执行方式","u":"/docs/job-old","h":"#26122-cron-表达式执行方式","p":2390},{"i":2486,"t":"在 Furion v2.18+ 版本之后新增了定时任务监听器 ISpareTimeListener,通过监听器可以实现所有定时任务的状态。如,创建一个 单例 的监听器 SpareTimeListener: using Furion.DependencyInjection; using Furion.TaskScheduler; using System; using System.Threading.Tasks; namespace Furion.Core { public class SpareTimeListener : ISpareTimeListener, ISingleton { /// /// 监听所有任务 /// /// /// public Task OnListener(SpareTimerExecuter executer) { switch (executer.Status) { // 执行开始通知 case 0: Console.WriteLine($\"{executer.Timer.WorkerName} 任务开始通知\"); break; // 任务执行之前通知 case 1: Console.WriteLine($\"{executer.Timer.WorkerName} 执行之前通知\"); break; // 执行成功通知 case 2: Console.WriteLine($\"{executer.Timer.WorkerName} 执行成功通知\"); break; // 任务执行失败通知 case 3: Console.WriteLine($\"{executer.Timer.WorkerName} 执行失败通知\"); break; // 任务执行停止通知 case -1: Console.WriteLine($\"{executer.Timer.WorkerName} 执行停止通知\"); break; // 任务执行取消通知 case -2: Console.WriteLine($\"{executer.Timer.WorkerName} 执行取消通知\"); break; default: break; } return Task.CompletedTask; } } }","s":"26.13 定时任务监听器","u":"/docs/job-old","h":"#2613-定时任务监听器","p":2390},{"i":2488,"t":"Timer:SpareTimer 定时器对象 Status:监听状态 0:任务开始 1:执行之前 2:执行成功 3:执行失败 -1:任务停止 -2:任务取消","s":"26.13.1 SpareTimerExecuter 属性说明","u":"/docs/job-old","h":"#26131-sparetimerexecuter-属性说明","p":2390},{"i":2490,"t":"如果在项目中使用了定时任务且部署到 IIS 中,那么需要设置 IIS 禁止回收,点击查看 IIS 回收问题解决方案 部署建议 建议定时任务采用 Worker Service 独立部署方式,不应依托 Web 项目进程中。查看【 Worker Service】章节","s":"26.14 IIS 部署回收设置","u":"/docs/job-old","h":"#2614-iis-部署回收设置","p":2390},{"i":2492,"t":"与我们交流 给 Furion 提 Issue。","s":"26.15 反馈与建议","u":"/docs/job-old","h":"#2615-反馈与建议","p":2390},{"i":2495,"t":"JSON Schema 是用于验证 JSON 数据结构的强大工具,Schema 可以理解为模式或者规则。 有了 JSON Schema 再也不怕配置写错的情况了!","s":"2.7.1 关于 JSON Schema","u":"/docs/jsonschema","h":"#271-关于-json-schema","p":2493},{"i":2497,"t":"作为一个框架提供 JSON Schema 是非常有必要的,可以让开发者在添加配置的时候能够有智能提示和校验功能,如果想学习 JSON Schema 编写可以查看以下文档: https://json-schema.apifox.cn/ https://zhuanlan.zhihu.com/p/355175938 这里也提供一个非常便捷的创建 JSON Schema 的在线网站,可以根据 json 文件内容自动生成 JSON Schema,之后进行小量修改即可: https://hellosean1025.github.io/json-schema-visual-editor/","s":"2.7.2 学习 JSON Schema 编写","u":"/docs/jsonschema","h":"#272-学习-json-schema-编写","p":2493},{"i":2499,"t":"Furion 框架提供了完整的 Furion 和 ASP.NET Core 的 JSON Schema 文件,通过该文件可以在编写配置文件时提供完整的智能提示和校验。 查看 JSON Schema 源码地址","s":"2.7.3 框架提供","u":"/docs/jsonschema","h":"#273-框架提供","p":2493},{"i":2501,"t":"使用方式非常简单,只需要在 .json 文件的头部添加 \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\", 即可,如: { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\", \"Logging\": { \"LogLevel\": { \"Default\": \"Information\", \"Microsoft\": \"Warning\", \"Microsoft.Hosting.Lifetime\": \"Information\", \"Microsoft.EntityFrameworkCore\": \"Information\", \"Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware\": \"Information\" } }, \"AllowedHosts\": \"*\" }","s":"2.7.4 如何使用","u":"/docs/jsonschema","h":"#274-如何使用","p":2493},{"i":2503,"t":"如果添加了 \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\", 依然无法进行智能提示校验,可尝试关闭 .json 文件再重新打开。 如果上面步骤依然无效,那么还可以通过下面方式:","s":"2.7.5 JSON Schema 失效解决","u":"/docs/jsonschema","h":"#275-json-schema-失效解决","p":2493},{"i":2506,"t":"重启 Visual Studio Code 即可。","s":"2.7.5.2 Visual Studio Code","u":"/docs/jsonschema","h":"#2752-visual-studio-code","p":2493},{"i":2508,"t":"默认情况下,JSON Schema 在第一次获取之后会自动缓存起来,可能会导致 .json 文件提示错误,这个时候只需要删除缓存即可。","s":"2.7.6 如何更新 JSON Schema","u":"/docs/jsonschema","h":"#276-如何更新-json-schema","p":2493},{"i":2510,"t":"打开电脑的 运行 并输入 %AppData%,之后进入 C:\\Users\\你的电脑用户名\\AppData\\Local\\Microsoft\\VisualStudio 下 之后删除 http/https 开头的文件即可。","s":"2.7.6.1 Visual Studio","u":"/docs/jsonschema","h":"#2761-visual-studio","p":2493},{"i":2512,"t":"同上,运行进入 %AppData%,之后进入下列路径:C:\\Users\\你的电脑用户名\\AppData\\Roaming\\Code\\User\\globalStorage\\vscode.json-language-features\\json-schema-cache 之后删除这些文件即可。","s":"2.7.6.2 Visual Studio Code","u":"/docs/jsonschema","h":"#2762-visual-studio-code","p":2493},{"i":2514,"t":"与我们交流 给 Furion 提 Issue。","s":"2.7.7 反馈与建议","u":"/docs/jsonschema","h":"#277-反馈与建议","p":2493},{"i":2517,"t":"全球化 是设计支持不同区域性的应用程序的过程。 全球化添加了对一组有关特定地理区域的已定义语言脚本的输入、显示和输出支持。 本地化 是将已经针对可本地化性进行处理的全球化应用调整为特定的区域性/区域设置的过程。 通俗来说,就是使应用或系统支持多语言切换。Furion 框架提供了完整支持多语言处理的服务。","s":"21.1 全球化和本地化","u":"/docs/local-language","h":"#211-全球化和本地化","p":2515},{"i":2519,"t":"在使用多语言服务之前,必须先注册服务,如: public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews() .AddAppLocalization(); // 注册多语言 } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 配置多语言,必须在 路由注册之前 app.UseAppLocalization(); app.UseStaticFiles(); app.UseRouting(); // 其他中间件 } 特别注意 app.UseAppLocalization(); 必须在 app.UseRouting(); 之前注册。","s":"21.2 注册服务","u":"/docs/local-language","h":"#212-注册服务","p":2515},{"i":2522,"t":"添加 LocalizationSettings 配置选项: { \"LocalizationSettings\": { \"SupportedCultures\": [\"zh-CN\", \"en-US\"], // 配置支持的语言列表 \"DefaultCulture\": \"zh-CN\" // 配置默认语言,如果不配置,取 SupportedCultures 的第一项 } }","s":"21.3.1 配置 LocalizationSettings","u":"/docs/local-language","h":"#2131-配置-localizationsettings","p":2515},{"i":2524,"t":"接下来在 Web启动项目层 添加 Resources 文件夹,如图:(可配置放置任意层,见配置 AssemblyName)","s":"21.3.2 创建 Resources 文件夹","u":"/docs/local-language","h":"#2132-创建-resources-文件夹","p":2515},{"i":2526,"t":"Furion 框架主要通过 L 静态类完成多语言转换,该静态类有以下属性和方法: L.Text[文本]:转换文本多语言 L.Html[HTML代码, 格式化]:转换 Html 多语言 L.SetCulture(区域码):设置当前语言区域 L.GetSelectCulture():获取当前的语言区域 L.GetCultures():获取系统支持的多语言列表","s":"21.4 L 静态类","u":"/docs/local-language","h":"#214-l-静态类","p":2515},{"i":2528,"t":"通过上面的配置步骤之后,我们就可以通过 L 静态类在代码任何位置使用了,如:","s":"21.5 使用例子","u":"/docs/local-language","h":"#215-使用例子","p":2515},{"i":2530,"t":"// 文本多语言 var apiInterface = L.Text[\"API 接口\"]; var sourceCode = L.Text[\"源码地址\"]; // HTML 标记多语言 var name = L.Html[\"Hello {0}\", name];","s":"21.5.1 在类中使用","u":"/docs/local-language","h":"#2151-在类中使用","p":2515},{"i":2532,"t":"@using Furion.Localization

让 .NET 开发更简单,更通用,更流行。

@L.Text[\"API 接口\"]      @L.Text[\"源码地址\"]

","s":"21.5.2 在视图中使用","u":"/docs/local-language","h":"#2152-在视图中使用","p":2515},{"i":2534,"t":"[Required(ErrorMessage = \"必填消息\")] 所有验证特性已经自动支持多语言配置了,无需通过 L.Text[] 调用。","s":"21.5.3 在验证特性中使用","u":"/docs/local-language","h":"#2153-在验证特性中使用","p":2515},{"i":2536,"t":"using Furion.FriendlyException; namespace Furion.Application { [ErrorCodeType] public enum ErrorCodes { [ErrorCodeItemMetadata(\"用户名不能为空\")] z1000 } } 所有异常消息特性已经自动支持多语言配置了,无需通过 L.Text[] 调用。 throw Oops.Oh(ErrorCodes.z1000); // 自动应用多语言","s":"21.5.4 在异常消息中使用","u":"/docs/local-language","h":"#2154-在异常消息中使用","p":2515},{"i":2538,"t":"版本说明 以下内容仅限 Furion 4.3.7 + 版本使用。 正常情况下,我们都是通过 L.Text[\"Hello\"] 方式输出 Hello 在不同的区域语言的翻译,但是会导致 Hello 硬编码字符串散落到处都是。 所以 Furion 提供了 SharedResource 模式,只需要创建一个 SharedResource.cs 类(可以任何名字)并添加对应的属性即可,如: namespace Furion.Core; public class SharedResource { public string Hello { get; set; } public string Name { get; set; } } 使用如下: var hello = L.GetString(u => u.Hello); // 比 L.Text[\"Hello\"]; 容易维护 var name = L.GetString(u => u.Name); // 比 L.Text[\"Name\"]; 容易维护 当然也有更简单的方式,就是使用 nameof,如: var hello = L.Text[nameof(SharedResource.Hello)]; // 比 L.Text[\"Hello\"]; 容易维护 var name = L.Text[nameof(SharedResource.Name)]; // 比 L.Text[\"Name\"]; 容易维护","s":"21.5.5 SharedResource 模式","u":"/docs/local-language","h":"#2155-sharedresource-模式","p":2515},{"i":2540,"t":"在 Furion 框架中,如果没找到对应的语言翻译文件,则自动显示字符串文本,如: L.Text[\"没找到\"]; // => 如果设置为英文,但是没有文件,则直接输出 “没找到”","s":"21.6 创建语言翻译文件","u":"/docs/local-language","h":"#216-创建语言翻译文件","p":2515},{"i":2542,"t":"接下来,我们只需要在刚刚的 Resources 文件夹中添加 资源文件 即可,资源文件命名规则:Lang.区域码.resx,如:Lang.en-US.resx。 接下来,只需要把对应语言版本的键值对填写即可。 自定义资源文件名或存放程序集 默认情况下,资源文件名必须以 Lang 开头,且只能放在启动层,如果需要自定义,添加配置文件即可 { \"LocalizationSettings\": { \"LanguageFilePrefix\": \"MyLang\" // \"AssemblyName\": \"你的其他层程序集名称\" } } 之后,就可以:MyLang.区域码.resx。","s":"21.6.1 在 Resources 文件夹中创建语言文件","u":"/docs/local-language","h":"#2161-在-resources-文件夹中创建语言文件","p":2515},{"i":2544,"t":"Furion 提供了三种语言切换方式进行切换语言: URL 参数 方式: ?culture=en-US,此方式优先级最高,格式为:culture=区域码 Cookies 方式:调用 L.SetCulture(区域码) 方式切换 客户端浏览器语言自动匹配:如果前面两种方式都没有设置,支持自动根据客户端浏览器语言进行匹配。","s":"21.7 切换语言","u":"/docs/local-language","h":"#217-切换语言","p":2515},{"i":2547,"t":"此方式只需要提供一个 api 或设置代码即可: L.SetCulture(\"en-US\"); // en-US 也可以通过前端传递过来,这样就可以不用 `culture` 参数了,可以自定义参数。 这样就可以直接根据客户端存储的 cookies 自动切换了。","s":"21.7.2 Cookies 方式","u":"/docs/local-language","h":"#2172-cookies-方式","p":2515},{"i":2549,"t":"推荐此方式,可以自动根据浏览器的语言自动配置:","s":"21.7.3 客户端浏览器语言自动切换","u":"/docs/local-language","h":"#2173-客户端浏览器语言自动切换","p":2515},{"i":2551,"t":"Furion 框架也兼容 .NET Core 自带的依赖注入方式,如: public class TestController : Controller { private readonly IStringLocalizer _localizer; public TestController(IStringLocalizerFactory factory) { _localizer = factory.Create(); } public IActionResult About() { ViewData[\"Message\"] = _localizer[\"Your application description page.\"]; } }","s":"21.8 依赖注入方式使用","u":"/docs/local-language","h":"#218-依赖注入方式使用","p":2515},{"i":2553,"t":"LocalizationSettings 多语言配置根节点 ResourcesPath:资源目录,string 类型,默认 Resources SupportedCultures:支持的语言区域码类别,string[] 类型 DefaultCulture:默认语言区域码,如果为空,则取 SupportedCultures 第一项 LanguageFilePrefix:配置资源文件前缀,string 类型,默认 Lang AssemblyName:配置资源文件存放程序集名,string 类型,默认 启动层 名称","s":"21.9 LocalizationSettings 配置","u":"/docs/local-language","h":"#219-localizationsettings-配置","p":2515},{"i":2555,"t":"若通过 dotnet build 命令行编译后发布的代码(比如 jenkins 以及其他 devops 工具),无法生成 zh-CN 资源文件,会出现中文无法显示的问题,这时候只需要将 Lang.zh-CN.resx 修改为:Lang.zh-Hans.resx 或 Lang.zh-Hant.resx 或 Lang.zh.resx 即可。 相关文档说明 https://docs.microsoft.com/zh-cn/dotnet/api/system.globalization.cultureinfo?view=net-6.0","s":"21.10 关于中文不能切换问题","u":"/docs/local-language","h":"#2110-关于中文不能切换问题","p":2515},{"i":2557,"t":"在 asp.net core 本地化 文档中微软推荐了三个拓展开源项目:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/localization-extensibility?view=aspnetcore-6.0#localization-resources 选择自己合适的即可。","s":"21.11 Json 或 数据库 多语言实现","u":"/docs/local-language","h":"#2111-json-或-数据库-多语言实现","p":2515},{"i":2559,"t":"af 公用荷兰语 af-ZA 公用荷兰语 - 南非 sq 阿尔巴尼亚 sq-AL 阿尔巴尼亚 -阿尔巴尼亚 ar 阿拉伯语 ar-DZ 阿拉伯语 -阿尔及利亚 ar-BH 阿拉伯语 -巴林 ar-EG 阿拉伯语 -埃及 ar-IQ 阿拉伯语 -伊拉克 ar-JO 阿拉伯语 -约旦 ar-KW 阿拉伯语 -科威特 ar-LB 阿拉伯语 -黎巴嫩 ar-LY 阿拉伯语 -利比亚 ar-MA 阿拉伯语 -摩洛哥 ar-OM 阿拉伯语 -阿曼 ar-QA 阿拉伯语 -卡塔尔 ar-SA 阿拉伯语 - 沙特阿拉伯 ar-SY 阿拉伯语 -叙利亚共和国 ar-TN 阿拉伯语 -北非的共和国 ar-AE 阿拉伯语 - 阿拉伯联合酋长国 ar-YE 阿拉伯语 -也门 hy 亚美尼亚 hy-AM 亚美尼亚的 -亚美尼亚 az Azeri az-AZ-Cyrl Azeri-(西里尔字母的) 阿塞拜疆 az-AZ-Latn Azeri(拉丁文)- 阿塞拜疆 eu 巴斯克 eu-ES 巴斯克 -巴斯克 be Belarusian be-BY Belarusian-白俄罗斯 bg 保加利亚 bg-BG 保加利亚 -保加利亚 ca 嘉泰罗尼亚 ca-ES 嘉泰罗尼亚 -嘉泰罗尼亚 zh-HK 华 - 香港的 SAR zh-MO 华 - 澳门的 SAR zh-CN 华 -中国 zh-CHS 华 (单一化) zh-SG 华 -新加坡 zh-TW 华 -台湾 zh-CHT 华 (传统的) hr 克罗埃西亚 hr-HR 克罗埃西亚 -克罗埃西亚 cs 捷克 cs-CZ 捷克 - 捷克 da 丹麦文 da-DK 丹麦文 -丹麦 div Dhivehi div-MV Dhivehi-马尔代夫 nl 荷兰 nl-BE 荷兰 -比利时 nl-NL 荷兰 - 荷兰 en 英国 en-AU 英国 -澳洲 en-BZ 英国 -伯利兹 en-CA 英国 -加拿大 en-CB 英国 -加勒比海 en-IE 英国 -爱尔兰 en-JM 英国 -牙买加 en-NZ 英国 - 新西兰 en-PH 英国 -菲律宾共和国 en-ZA 英国 - 南非 en-TT 英国 - 千里达托贝哥共和国 en-GB 英国 - 英国 en-US 英国 - 美国 en-ZW 英国 -津巴布韦 et 爱沙尼亚 et-EE 爱沙尼亚的 -爱沙尼亚 fo Faroese fo-FO Faroese- 法罗群岛 fa 波斯语 fa-IR 波斯语 -伊朗王国 fi 芬兰语 fi-FI 芬兰语 -芬兰 fr 法国 fr-BE 法国 -比利时 fr-CA 法国 -加拿大 fr-FR 法国 -法国 fr-LU 法国 -卢森堡 fr-MC 法国 -摩纳哥 fr-CH 法国 -瑞士 gl 加利西亚 gl-ES 加利西亚 -加利西亚 ka 格鲁吉亚州 ka-GE 格鲁吉亚州 -格鲁吉亚州 de 德国 de-AT 德国 -奥地利 de-DE 德国 -德国 de-LI 德国 -列支敦士登 de-LU 德国 -卢森堡 de-CH 德国 -瑞士 el 希腊 el-GR 希腊 -希腊 gu Gujarati gu-IN Gujarati-印度 he 希伯来 he-IL 希伯来 -以色列 hi 北印度语 hi-IN 北印度的 -印度 hu 匈牙利 hu-HU 匈牙利的 -匈牙利 is 冰岛语 is-IS 冰岛的 -冰岛 id 印尼 id-ID 印尼 -印尼 it 意大利 it-IT 意大利 -意大利 it-CH 意大利 -瑞士 ja 日本 ja-JP 日本 -日本 kn 卡纳达语 kn-IN 卡纳达语 -印度 kk Kazakh kk-KZ Kazakh-哈萨克 kok Konkani kok-IN Konkani-印度 ko 韩国 ko-KR 韩国 -韩国 ky Kyrgyz ky-KZ Kyrgyz-哈萨克 lv 拉脱维亚 lv-LV 拉脱维亚的 -拉脱维亚 lt 立陶宛 lt-LT 立陶宛 -立陶宛 mk 马其顿 mk-MK 马其顿 -FYROM ms 马来 ms-BN 马来 -汶莱 ms-MY 马来 -马来西亚 mr 马拉地语 mr-IN 马拉地语 -印度 mn 蒙古 mn-MN 蒙古 -蒙古 no 挪威 nb-NO 挪威 (Bokm?l) - 挪威 nn-NO 挪威 (Nynorsk)- 挪威 pl 波兰 pl-PL 波兰 -波兰 pt 葡萄牙 pt-BR 葡萄牙 -巴西 pt-PT 葡萄牙 -葡萄牙 pa Punjab 语 pa-IN Punjab 语 -印度 ro 罗马尼亚语 ro-RO 罗马尼亚语 -罗马尼亚 ru 俄国 ru-RU 俄国 -俄国 sa 梵文 sa-IN 梵文 -印度 sr-SP-Cyrl 塞尔维亚 -(西里尔字母的) 塞尔维亚共和国 sr-SP-Latn 塞尔维亚 (拉丁文)- 塞尔维亚共和国 sk 斯洛伐克 sk-SK 斯洛伐克 -斯洛伐克 sl 斯洛文尼亚 sl-SI 斯洛文尼亚 -斯洛文尼亚 es 西班牙 es-AR 西班牙 -阿根廷 es-BO 西班牙 -玻利维亚 es-CL 西班牙 -智利 es-CO 西班牙 -哥伦比亚 es-CR 西班牙 - 哥斯达黎加 es-DO 西班牙 - 多米尼加共和国 es-EC 西班牙 -厄瓜多尔 es-SV 西班牙 - 萨尔瓦多 es-GT 西班牙 -危地马拉 es-HN 西班牙 -洪都拉斯 es-MX 西班牙 -墨西哥 es-NI 西班牙 -尼加拉瓜 es-PA 西班牙 -巴拿马 es-PY 西班牙 -巴拉圭 es-PE 西班牙 -秘鲁 es-PR 西班牙 - 波多黎各 es-ES 西班牙 -西班牙 es-UY 西班牙 -乌拉圭 es-VE 西班牙 -委内瑞拉 sw Swahili sw-KE Swahili-肯尼亚 sv 瑞典 sv-FI 瑞典 -芬兰 sv-SE 瑞典 -瑞典 syr Syriac syr-SY Syriac-叙利亚共和国 ta 坦米尔 ta-IN 坦米尔 -印度 tt Tatar tt-RU Tatar-俄国 te Telugu te-IN Telugu-印度 th 泰国 th-TH 泰国 -泰国 tr 土耳其语 tr-TR 土耳其语 -土耳其 uk 乌克兰 uk-UA 乌克兰 -乌克兰 ur Urdu ur-PK Urdu-巴基斯坦 uz Uzbek uz-UZ-Cyrl Uzbek-(西里尔字母的) 乌兹别克斯坦 uz-UZ-Latn Uzbek(拉丁文)- 乌兹别克斯坦 vi 越南 vi-VN 越南 -越南","s":"21.12 区域码列表","u":"/docs/local-language","h":"#2112-区域码列表","p":2515},{"i":2561,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 多语言 知识可查阅 ASP.NET Core - 全局化和本地化 章节。","s":"21.13 反馈与建议","u":"/docs/local-language","h":"#2113-反馈与建议","p":2515},{"i":2564,"t":"中间件是一种装配到应用管道以处理请求和响应的软件。 每个组件: 选择是否将请求传递到管道中的下一个组件。 可在管道中的下一个组件前后执行工作。 请求委托用于生成请求管道。 请求委托处理每个 HTTP 请求。 一句话总结:中间件是比筛选器更底层,更上游的面向切面技术,其性能最高,可处理的应用范围远比过滤器广,如实现网关,URL 转发,限流等等。 中间件更多内容 本章节暂不考虑将中间件展开讲,想了解更多知识可阅读官方文档 【ASP.NET Core - 中间件】","s":"5.5.1 关于中间件","u":"/docs/middleware","h":"#551-关于中间件","p":2562},{"i":2567,"t":"app.Run(async context => { await context.Response.WriteAsync(\"Hello world!\"); });","s":"5.5.2.1 所有请求返回同一个结果","u":"/docs/middleware","h":"#5521-所有请求返回同一个结果","p":2562},{"i":2569,"t":"app.Use(async (context, next) => { // 比如设置统一头 context.Response.Headers[\"framework\"] = \"Furion\"; // 执行下一个中间件 await next.Invoke(); }); // 多个 app.Use(...);","s":"5.5.2.2 拦截所有请求(可多个)","u":"/docs/middleware","h":"#5522-拦截所有请求可多个","p":2562},{"i":2571,"t":"app.Map(\"/hello\", app => { app.Run(async context => { await context.Response.WriteAsync(\"Map Test 1\"); }); }); app.Map(\"/hello/say\", app => { // .... });","s":"5.5.2.3 特定路由中间件(可多个)","u":"/docs/middleware","h":"#5523-特定路由中间件可多个","p":2562},{"i":2573,"t":"app.Map(\"/level1\", level1App => { level1App.Map(\"/level2a\", level2AApp => { // \"/level1/level2a\" processing }); level1App.Map(\"/level2b\", level2BApp => { // \"/level1/level2b\" processing }); }); 更多例子查看官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-6.0","s":"5.5.2.4 嵌套路由中间件(可多个)","u":"/docs/middleware","h":"#5524-嵌套路由中间件可多个","p":2562},{"i":2575,"t":"自定义中间件有多种方式,最简单的是通过 app.Use 方式,另外还支持独立类定义方式。","s":"5.5.3 自定义中间件","u":"/docs/middleware","h":"#553-自定义中间件","p":2562},{"i":2577,"t":"Starup.cs app.Use(async (context, next) => { var cultureQuery = context.Request.Query[\"culture\"]; if (!string.IsNullOrWhiteSpace(cultureQuery)) { var culture = new CultureInfo(cultureQuery); CultureInfo.CurrentCulture = culture; CultureInfo.CurrentUICulture = culture; } // 调用下一个中间件 await next(context); });","s":"5.5.3.1 app.Use 方式 (不推荐)","u":"/docs/middleware","h":"#5531-appuse-方式-不推荐","p":2562},{"i":2579,"t":"独立类的方式是目前最为推荐的方式,拓展性强,维护性高,如: 定义中间件,建议以 Middleware 结尾: using System.Globalization; namespace Middleware.Example; public class RequestCultureMiddleware { private readonly RequestDelegate _next; public RequestCultureMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { var cultureQuery = context.Request.Query[\"culture\"]; if (!string.IsNullOrWhiteSpace(cultureQuery)) { var culture = new CultureInfo(cultureQuery); CultureInfo.CurrentCulture = culture; CultureInfo.CurrentUICulture = culture; } // 调用下一个中间件 await _next(context); } } 添加中间件拓展类 定义了中间件之后,需要创建这个中间件的拓展类,中间件拓展方法建议以 Use 开头,如: public static class RequestCultureMiddlewareExtensions { public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder) { return builder.UseMiddleware(); } } 在 Startup.cs 中使用 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // ... 其他中间件 app.UseRequestCulture(); // ... 其他中间件 }","s":"5.5.3.2 独立类 方式(推荐)","u":"/docs/middleware","h":"#5532-独立类-方式推荐","p":2562},{"i":2581,"t":"默认情况下,自定义独立类中间件构造函数只有一个 RequestDelegate 参数,除此之后,还可以注入服务接口/类(建议是单例服务),另外还支持传入任何其他类型。 服务类型参数 using System.Globalization; namespace Middleware.Example; public class RequestCultureMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; public RequestCultureMiddleware(RequestDelegate next , ILogger logger) { _next = next; _logger = logger; } public async Task InvokeAsync(HttpContext context) { // 其他代码 _logger.LogInformation(\"...\"); // 调用下一个中间件 await _next(context); } } 非服务类型参数 除此之外,还可以添加 非服务参数 参数,但必须是最后一个参数!!! using System.Globalization; namespace Middleware.Example; public class RequestCultureMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; public RequestCultureMiddleware(RequestDelegate next , ILogger logger , int age , string name) { _next = next; _logger = logger; } public async Task InvokeAsync(HttpContext context) { // 其他代码 _logger.LogInformation(\"...\"); // 调用下一个中间件 await _next(context); } } 之后还需要修改中间件拓展类: public static class RequestCultureMiddlewareExtensions { public static IApplicationBuilder UseRequestCulture(this IApplicationBuilder builder, int age, string name) { return builder.UseMiddleware(new object[] {age, name }); } } 使用: app.UseRequestCulture(30, \"百小僧\");","s":"5.5.3.3 配置更多参数","u":"/docs/middleware","h":"#5533-配置更多参数","p":2562},{"i":2583,"t":"中间件是有执行顺序的,而且是先注册的先执行,无法通过其他方式更改,参考下图:","s":"5.5.4 中间件顺序","u":"/docs/middleware","h":"#554-中间件顺序","p":2562},{"i":2585,"t":"中间件有两种方式注入服务,一种是通过构造函数注入,一种是通过 httpContext.RequestServices 方式解析。","s":"5.5.5 依赖注入/解析服务","u":"/docs/middleware","h":"#555-依赖注入解析服务","p":2562},{"i":2587,"t":"using System.Globalization; namespace Middleware.Example; public class RequestCultureMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; public RequestCultureMiddleware(RequestDelegate next , ILogger logger , IHostEnvironment hostEnvironment) { _next = next; _logger = logger; } public async Task InvokeAsync(HttpContext context) { // 其他代码 // 调用下一个中间件 await _next(context); } } 特别说明 通过构造函数的方式建议注入 单例模式 的服务,否则可能存在服务不能释放问题,如需使用瞬时或作用域的服务,可使用下列 httpContext.RequestServices 方式","s":"5.5.5.1 构造函数方式","u":"/docs/middleware","h":"#5551-构造函数方式","p":2562},{"i":2589,"t":"通过这种方式可以使用非单例服务解析: using System.Globalization; namespace Middleware.Example; public class RequestCultureMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; // 构造函数注册单例 public RequestCultureMiddleware(RequestDelegate next , ILogger logger , IHostEnvironment hostEnvironment) { _next = next; _logger = logger; } public async Task InvokeAsync(HttpContext context) { // 非单例模式 using var serviceProvider = context.RequestServices.CreateScope(); var repository = serviceProvider.ServiceProvider.GetService(); // 调用下一个中间件 await _next(context); } }","s":"5.5.5.2 httpContext.RequestServices 方式","u":"/docs/middleware","h":"#5552-httpcontextrequestservices-方式","p":2562},{"i":2591,"t":"由于中间件是比较原始的切面方式,有时候我们需要获取终点路由的特性或者其他信息,则需要一点技巧: // 获取终点路由特性 var endpointFeature = context.Features.Get(); // 获取是否定义了特性 var attribute = endpointFeature?.Endpoint?.Metadata?.GetMetadata()","s":"5.5.6 常见问题","u":"/docs/middleware","h":"#556-常见问题","p":2562},{"i":2593,"t":"想了解更多中间件知识可阅读官方文档 【ASP.NET Core - 中间件】","s":"5.5.7 了解更多","u":"/docs/middleware","h":"#557-了解更多","p":2562},{"i":2595,"t":"与我们交流 给 Furion 提 Issue。","s":"5.5.8 反馈与建议","u":"/docs/middleware","h":"#558-反馈与建议","p":2562},{"i":2597,"t":"温馨提醒 在 Furion 包中默认集成了 EFCore,如果不使用 EFCore,可安装纯净版 Furion.Pure 代替 Furion。 查看最新拓展文档 https://gitee.com/dotnetchina/Furion/pulls/423","s":"10.3 MongoDB 操作","u":"/docs/mongodb","h":"","p":2596},{"i":2599,"t":"MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。","s":"10.3.1 关于 MongoDB","u":"/docs/mongodb","h":"#1031-关于-mongodb","p":2596},{"i":2601,"t":"在 Furion 框架中,已经推出 MongoDB 拓展包 Furion.Extras.DatabaseAccessor.MongoDB。","s":"10.3.2 如何集成","u":"/docs/mongodb","h":"#1032-如何集成","p":2596},{"i":2603,"t":"使用非常简单,只需要在 Startup.cs 中添加 services.AddMongoDB(connectionString) 即可。如: // 方式一 services.AddMongoDB(\"mongodb://localhost:27017\"); // 方式二 services.AddMongoDB(new MongoClientSettings {}); // 方式三 services.AddMongoDB(new MongoUrl {});","s":"10.3.2.1 注册 MongoDB 服务","u":"/docs/mongodb","h":"#10321-注册-mongodb-服务","p":2596},{"i":2605,"t":"在使用之前,我们可以通过构造函数注入 IMongoDBRepository 接口,如: 非泛型版本 private readonly IMongoDBRepository _mongoRepository; public PersonService(IMongoDBRepository mongoRepository) { _mongoRepository = mongoRepository; }","s":"10.3.3 基本使用","u":"/docs/mongodb","h":"#1033-基本使用","p":2596},{"i":2607,"t":"var database = _mongoRepository.Context.GetDatabase(\"foo\"); var collection = database.GetCollection(\"bar\"); await collection.InsertOneAsync(new BsonDocument(\"Name\", \"Jack\")); var list = await collection.Find(new BsonDocument(\"Name\", \"Jack\")) .ToListAsync(); foreach(var document in list) { Console.WriteLine(document[\"Name\"]); } public class Person { public ObjectId Id { get; set; } public string Name { get; set; } } var database = _mongoRepository.Context.GetDatabase(\"foo\"); var collection = database.GetCollection(\"bar\"); await collection.InsertOneAsync(new Person { Name = \"Jack\" }); var list = await collection.Find(x => x.Name == \"Jack\") .ToListAsync(); foreach(var person in list) { Console.WriteLine(person.Name); }","s":"10.3.3.1 常见例子","u":"/docs/mongodb","h":"#10331-常见例子","p":2596},{"i":2609,"t":"IMongoDBRepository 只封装了 MongoDB 基础功能,如需获取更多操作可通过 .Context 属性获取 MongoClient 对象,如: var client = _mongoRepository.Context;","s":"10.3.3.2 获取 MongoClient 对象","u":"/docs/mongodb","h":"#10332-获取-mongoclient-对象","p":2596},{"i":2611,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 MongoDB 知识可查阅 MongoDB 仓库。","s":"10.3.4 反馈与建议","u":"/docs/mongodb","h":"#1034-反馈与建议","p":2596},{"i":2613,"t":"特别注意 以下的模块化配置必须在 appsettings.json 下配置才有效,原因是启动的时候 appsettings.json 已经加载,自定义配置文件还未加载。","s":"28. 模块化开发","u":"/docs/module-dev","h":"","p":2612},{"i":2615,"t":"模块化是代码的组成的一种方式,模块化系统就像乐高玩具一样,一块一块零散积木堆积起一个精彩的世界。每种积木的形状各不相同,功能各不相同,积木与积木直接互相依赖,互相支撑。","s":"28.1 关于模块化开发","u":"/docs/module-dev","h":"#281-关于模块化开发","p":2612},{"i":2617,"t":"模块化开发能够将不同的功能组装在一起,实现功能的累加,诸多功能组装在一起,最终形成项目。","s":"28.1.1 模块化开发好处","u":"/docs/module-dev","h":"#2811-模块化开发好处","p":2612},{"i":2619,"t":"应用程序模块:通常这类模块是完整的应用程序,可以独立运行,有自己的实体、服务、API 及 UI 组件等。 框架级模块:这类通常是解决某个业务功能进行开发的模块,比如上传文件、分布式缓存、数据验证等。","s":"28.2 模块分类","u":"/docs/module-dev","h":"#282-模块分类","p":2612},{"i":2621,"t":"在 Furion 框架设计之初就考虑到模块化开发,所以从最初版本就具备此功能。启用 Furion 模块化支持非常简单。","s":"28.3 如何进行模块化开发","u":"/docs/module-dev","h":"#283-如何进行模块化开发","p":2612},{"i":2623,"t":"{ \"AppSettings\": { \"EnabledReferenceAssemblyScan\": true, // 启用模块化程序集扫描 \"SupportPackageNamePrefixs\": [\"Module1\", \"Module2\",...] // 配置通过 Nuget 方式安装的模块化包,如果不是通过 Nuget 方式可不配置 // \"ExternalAssemblies\": [\"plugins/Module1.dll\", \"plugins/Module2.dll\", ...] // 配置加载网站 plugins 目录下的模块程序集,可不配置 } }","s":"28.3.1 启用模块化支持","u":"/docs/module-dev","h":"#2831-启用模块化支持","p":2612},{"i":2625,"t":"添加模块到现有的应用中有多种方式: 直接通过项目添加模块化引用或编辑 .csproj 添加模块 这种方式无需任何配置,Furion 框架可自动加载模块。 通过添加 .dll 方式引用模块 需要配置 EnabledReferenceAssemblyScan 节点,如: { \"AppSettings\": { \"EnabledReferenceAssemblyScan\": true } } 通过 Nuget 方式安装模块 如果通过 Nuget 方式安装模块,需要配置 SupportPackageNamePrefixs 节点,如: { \"AppSettings\": { \"SupportPackageNamePrefixs\": [\"Nuget包名称\", \"Nuget包名称\",...] } } 通过动态加载 .dll 方式安装模块 这种方式通常是在网站创建一个文件夹放入模块化 .dll 文件,如:plugins,无需添加引用可自动加载。 { \"AppSettings\": { \"ExternalAssemblies\": [\"plugins/Module1.dll\", \"plugins/Module2.dll\", ...] } } 特别注意 如果非生产环境,那么 plugins 文件夹放在 bin\\Debug\\net n.0\\ 或 bin\\Release\\net n.0 目录下。 如果是生产环境,则直接放在根目录即可。","s":"28.3.2 各种添加模块配置方式","u":"/docs/module-dev","h":"#2832-各种添加模块配置方式","p":2612},{"i":2627,"t":"尽可能保证每个模块都有独立的路由地址格式:/模块化名称/路由地址,这样才能保证不会和现有的系统出现冲突。 开发模块化是尽可能设计为完全独立的引用,如果需要包含 UI 元素如视图、html/cs/javascript 应采用嵌入式方式。 模块化开发如果需要添加第三方服务,应配置在 AppStartup 的派生类中。 模块化的所在程序集的注释文件 .xml 需放在和 .dll 同级目录","s":"28.4 模块化开发注意事项","u":"/docs/module-dev","h":"#284-模块化开发注意事项","p":2612},{"i":2629,"t":"在 Furion v2.4.0 + 版本之后,框架移除了热加载和热卸载模块的功能,原因是目前微软提供的 AssemblyLoadContext + 文件夹监听 处理 .dll 运行时热拔插机制还未成熟,此功能将在 .NET6 版本得到改善。 也就是,自 v2.4.0+ 版本之后,Furion 框架只提供在启动时加载模块,不在运行时进行任何处理。","s":"28.5 关于热插拔机制","u":"/docs/module-dev","h":"#285-关于热插拔机制","p":2612},{"i":2631,"t":"与我们交流 给 Furion 提 Issue。","s":"28.6 反馈与建议","u":"/docs/module-dev","h":"#286-反馈与建议","p":2612},{"i":2633,"t":".NET7 发布 🚀🎉🔥 2022 年 11 月 08 日,微软发布了 .NET7 首个正式版。","s":"2.5 .NET6 升级 .NET7","u":"/docs/net6-to-net7","h":"","p":2632},{"i":2635,"t":"目前使用 Furion 所有版本(0.x-3.x)的用户均可以快速无缝升级至 Furion v4.x 版本,只需要做少量更改即可。","s":"2.5.1 升级注意事项","u":"/docs/net6-to-net7","h":"#251-升级注意事项","p":2632},{"i":2637,"t":"https://dotnet.microsoft.com/download/dotnet/7.0","s":"2.5.1.1 安装 .NET7 SDK","u":"/docs/net6-to-net7","h":"#2511-安装-net7-sdk","p":2632},{"i":2639,"t":"编辑解决方案所有项目的 .csproj 文件,并替换 net6.0net7.0,如: 当然也可以使用 Ctrl + F 全局替换","s":"2.5.1.2 编辑 .csproj 文件","u":"/docs/net6-to-net7","h":"#2512-编辑-csproj-文件","p":2632},{"i":2641,"t":"将 Furion 所有包升级至 v4.7.9 版本,同时 Microsoft 所有包升级至 v7.0.0 版本,如:","s":"2.5.1.3 升级 Nuget 包","u":"/docs/net6-to-net7","h":"#2513-升级-nuget-包","p":2632},{"i":2643,"t":"升级完成!!!","s":"2.5.1.4 重新编译整个解决方案","u":"/docs/net6-to-net7","h":"#2514-重新编译整个解决方案","p":2632},{"i":2646,"t":"正常情况下,我们都是通过 Nuget 在线平台(Visual Studio 内置的 Nuget 包管理器)安装拓展依赖,但有时候我们不希望发布到 Nuget 平台或者只想在本地使用又或者先在本地测试通过再发布。 这样做的好处是: 可以有效保护公司核心代码 方便开源项目测试","s":"2.9.1 关于本地测试包","u":"/docs/nuget-local","h":"#291-关于本地测试包","p":2644},{"i":2649,"t":"默认情况下,Furion 会根据 Furion.版本号-beta.Issue编号 规则生成 .nupkg 和 .snupkg 包,前者是不包含调试的无符号 Nuget 包,后者则是调试符号包(方便 IDE 调试用的),如: D:\\Furion_Nuget_Test_Packages Furion.4.2.3-beta-I5MM3O.nupkg Furion.4.2.3-beta-I5MM3O.snupkg 其中 I5MM3O 对应的正是 Issue 的编号:https://gitee.com/dotnetchina/Furion/issues/I5MM3O","s":"2.9.2.1 测试包命名规则","u":"/docs/nuget-local","h":"#2921-测试包命名规则","p":2644},{"i":2651,"t":"有了这两个包之后,就可以在本地磁盘中创建文件夹并放进去,如 D:\\Furion_Nuget_Test_Packages。","s":"2.9.2.2 配置本地包路径","u":"/docs/nuget-local","h":"#2922-配置本地包路径","p":2644},{"i":2653,"t":"关于命令行操作 如果不使用可视化 IDE 配置,可通过下列命令行配置: dotnet restore \"YourProject.Web.Entry/YourProject.Web.Entry.csproj\" -s \"D:\\Furion_Nuget_Test_Packages\"; dotnet restore \"YourProject.Web.Entry/YourProject.Web.Entry.csproj\" -s \"https://api.nuget.org/v3/index.json\";","s":"2.9.2.3 在 Visual Studio 中配置路径","u":"/docs/nuget-local","h":"#2923-在-visual-studio-中配置路径","p":2644},{"i":2655,"t":"测试通过后可以删除之前的配置即可,如:","s":"2.9.2.4 选择测试版安装或更新","u":"/docs/nuget-local","h":"#2924-选择测试版安装或更新","p":2644},{"i":2657,"t":"Furion 提供了 .snupkg 包,在安装 Furion 的时候自动下载到本地,如需启用源码调试,只需要启用以下配置即可: 启用之后重新编译解决方案就可以通过 F12 跳转到源代码区并调试源代码了。","s":"2.9.3 Visual Studio 调试 Nuget 包","u":"/docs/nuget-local","h":"#293-visual-studio-调试-nuget-包","p":2644},{"i":2659,"t":"与我们交流 给 Furion 提 Issue。","s":"2.9.4 反馈与建议","u":"/docs/nuget-local","h":"#294-反馈与建议","p":2644},{"i":2662,"t":"目前使用 Furion 所有版本(0.x-3.x)的用户均可以快速无缝升级至 Furion v4.x 版本,只需要做少量更改即可。","s":"2.5.1 升级注意事项","u":"/docs/net5-to-net6","h":"#251-升级注意事项","p":2660},{"i":2664,"t":"https://dotnet.microsoft.com/download/dotnet/6.0","s":"2.5.1.1 安装 .NET6 SDK","u":"/docs/net5-to-net6","h":"#2511-安装-net6-sdk","p":2660},{"i":2666,"t":"编辑解决方案所有项目的 .csproj 文件,并替换 net5.0net6.0,如: 当然也可以使用 Ctrl + F 全局替换","s":"2.5.1.2 编辑 .csproj 文件","u":"/docs/net5-to-net6","h":"#2512-编辑-csproj-文件","p":2660},{"i":2668,"t":"将 Furion 所有包升级至 v4.7.9 版本,同时 Microsoft 所有包升级至 v6.0.8 版本,如:","s":"2.5.1.3 升级 Nuget 包","u":"/docs/net5-to-net6","h":"#2513-升级-nuget-包","p":2660},{"i":2670,"t":"删除 Web 启动层 的 Startup.cs 文件,如:","s":"2.5.1.4 删除 Startup.cs 文件","u":"/docs/net5-to-net6","h":"#2514-删除-startupcs-文件","p":2660},{"i":2672,"t":"编辑 Web 启动层 .csproj 文件,并添加 enable,如:","s":"2.5.1.5 编辑 Web 启动层 .csproj","u":"/docs/net5-to-net6","h":"#2515-编辑-web-启动层-csproj","p":2660},{"i":2674,"t":"var builder = WebApplication.CreateBuilder(args).Inject(); var app = builder.Build(); app.Run(); v3.6.4+ 版本 如果使用 Furion 3.6.4+ 版本,可直接使用 Serve.Run(RunOptions.Default); 替代上面即可。 小提醒 如果使用了 Serilog 日志组件,可添加 builder.UseSerilogDefault(); 也可以使用 Serve.Run(RunOptions.Default.ConfigureBuilder(builder => builder.UseSerilogDefault()));。 如果使用了 pgsql 数据库,你还可能需要添加 AppContext.SetSwitch(\"Npgsql.EnableLegacyTimestampBehavior\", true); => 相关说明:在 .NET6 中 Npgsql 6.0 对时间戳的映射方式进行了一些重要的更改。","s":"2.5.1.6 替换 Program.cs 内容为:","u":"/docs/net5-to-net6","h":"#2516-替换-programcs-内容为","p":2660},{"i":2676,"t":"升级完成!!!","s":"2.5.1.7 重新编译整个解决方案","u":"/docs/net5-to-net6","h":"#2517-重新编译整个解决方案","p":2660},{"i":2678,"t":"视频教程 【负载压测视频教程】 文档紧急编写中,可以先看旧文档:https://monksoul.gitbook.io/hoa/","s":"36.2 负载压测","u":"/docs/performance","h":"","p":2677},{"i":2680,"t":"使用 Mapster 以外的拓展说明 Furion 框架提供了 Mapster 的拓展 Furion.Extras.ObjectMapper.Mapster,如需使用第三方如 AutoMapper 则无需安装此拓展。","s":"13. 对象数据映射","u":"/docs/object-mapper","h":"","p":2679},{"i":2682,"t":"简单来说,就是将一个对象的数据根据特定规则批量映射到另一个对象中,减少手工操作和降低人为出错率。如将 DTO 对象映射到 Entity 实体中,反之亦然。","s":"13.1 对象映射","u":"/docs/object-mapper","h":"#131-对象映射","p":2679},{"i":2684,"t":"在过去,我们需要将一个对象的值转换到另一个对象中,我们需要这样做,如: var entity = repository.Find(1); var dto = new Dto(); dto.Id = entity.Id; dto.Name = entity.Name; dto.Age = entity.Age; dto.Address = entity.Address; dto.FullName = entity.FirstName + entity.LastName; dto.IdCard = entity.IdCard.Replace(\"1234\", \"****\"); 上面的例子似乎没有任何问题,但是如果很多地方需要这样的赋值操作、或者相同的赋值操作在多个地方使用,又或者一个类中含有非常多的属性或自定义赋值操作。那么这样的操作效率极低,容易出错,且代码非常臃肿和冗余。 所以,实现自动映射赋值和支持特殊配置的需求就有了。目前 C# 平台有两个优秀的对象映射工具:Mapster 和 AutoMapper。在 Furion 框架中,推荐使用 Mapster,Mapster 是一款极易使用且超高性能的对象映射框架。","s":"13.2 先看例子","u":"/docs/object-mapper","h":"#132-先看例子","p":2679},{"i":2686,"t":"现在,我们可以通过 Mapster 提供的对象映射方法:Adapt 方法改造上面的例子: 安装拓展包 在 Furion.Core 层安装 Furion.Extras.ObjectMapper.Mapster 拓展包,无需手动调用,Furion 会自动加载并调用。","s":"13.3 Mapster 使用","u":"/docs/object-mapper","h":"#133-mapster-使用","p":2679},{"i":2688,"t":"var entity = repository.Find(1); var dto = entity.Adapt(); 仅仅一行代码就可以实现 entity -> dto 的转换,如果涉及到赋值的复制操作,如 dto.FullName 和 dto.IdCard,我们只需要自定义映射规则类即可。","s":"13.3.1 快速入门","u":"/docs/object-mapper","h":"#1331-快速入门","p":2679},{"i":2690,"t":"using Mapster; using System; namespace Furion.Application { public class Mapper : IRegister { public void Register(TypeAdapterConfig config) { config.ForType() .Map(dest => dest.FullName, src => src.FirstName + src.LastName) .Map(dest => dest.IdCard, src => src.IdCard.Replace(\"1234\", \"****\")); } } } 小知识 该映射文件 Mapper.cs 可以放在任何项目或文件夹中,Furion 会在程序启动的时候自动扫描并注入配置。","s":"13.3.2 自定义映射规则","u":"/docs/object-mapper","h":"#1332-自定义映射规则","p":2679},{"i":2692,"t":"Mapster 除了提供 Adapt 拓展方法以外,同时还提供依赖注入的方式。 public Person(IMapper mapper) { var dto = _mapper.Map(entity); }","s":"13.3.3 依赖注入方式","u":"/docs/object-mapper","h":"#1333-依赖注入方式","p":2679},{"i":2694,"t":"Mapster 还提供了 ProjectToType Linq 拓展方法减少我们手动 Select 操作,如: 正常的操作: var destinations = context.Sources .Select(p => new Destination { Id = p.Id, Name = p.Name, Surname = p.Surname, .... }) .ToList(); 使用 Mapster 之后: var destinations = context.Sources.ProjectToType().ToList();","s":"13.3.4 和 EFCore 配合","u":"/docs/object-mapper","h":"#1334-和-efcore-配合","p":2679},{"i":2696,"t":"Furion 提供全局默认映射配置选项 TypeAdapterConfig.GlobalSettings.Default,可在 Startup 中配置即可,如: TypeAdapterConfig.GlobalSettings.Default .PreserveReference(true);","s":"13.4 全局默认配置","u":"/docs/object-mapper","h":"#134-全局默认配置","p":2679},{"i":2698,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 Mapster 知识可查阅 Mapster - Wiki 文档。","s":"13.5 反馈与建议","u":"/docs/object-mapper","h":"#135-反馈与建议","p":2679},{"i":2701,"t":"选项是 ASP.NET Core 推荐的动态读取配置的方式,这种方式将配置文件数据用一个强类型来托管,能够实现配置验证、默认值配置、实时读取等功能。","s":"4.2.1 什么是选项","u":"/docs/options","h":"#421-什么是选项","p":2699},{"i":2703,"t":"选项实际上也是配置,但在后者的基础上添加了配置验证、默认值/后期配置设定及提供了多种接口读取配置信息,同时还支持供配置更改通知等强大灵活功能。 所以,除了一次性读取使用的配置以外,都应该选用 选项 替换 配置。 知识导航 有关配置说明可查看《4.1 配置》 章节。","s":"4.2.2 与配置的区别","u":"/docs/options","h":"#422-与配置的区别","p":2699},{"i":2705,"t":"假设我们需要在系统运行时获取系统名称、版本号及版权信息,这些信息可能随时变化而且需要在多个地方使用。这时就需要将这些信息配置起来。具体步骤如下:","s":"4.2.3 选项的使用","u":"/docs/options","h":"#423-选项的使用","p":2699},{"i":2707,"t":"{ \"AppInfo\": { \"Name\": \"Furion\", \"Version\": \"1.0.0\", \"Company\": \"Baiqian\" } }","s":"4.2.3.1 配置 appsettings.json 信息","u":"/docs/options","h":"#4231-配置-appsettingsjson-信息","p":2699},{"i":2709,"t":"using Furion.ConfigurableOptions; namespace Furion.Application { public class AppInfoOptions : IConfigurableOptions { public string Name { get; set; } public string Version { get; set; } public string Company { get; set; } } } 温馨提示 建议所有选项类都应该以 Options 命名结尾。 另外,Furion 框架提供了非常灵活的注册选项服务的方法,只需要继承 IConfigurableOptions 接口即可,该接口位于 Furion.ConfigurableOptions 命名空间下。","s":"4.2.3.2 创建 AppInfoOptions 强类型类","u":"/docs/options","h":"#4232-创建-appinfooptions-强类型类","p":2699},{"i":2711,"t":"选项不同于配置,需在应用启动时注册 Furion.Web.Core\\FurWebCoreStartup.cs using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; namespace Furion.Web.Core { [AppStartup(800)] public sealed class FurWebCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddConfigurableOptions(); } } }","s":"4.2.3.3 注册 AppInfoOptions 服务","u":"/docs/options","h":"#4233-注册-appinfooptions-服务","p":2699},{"i":2713,"t":"在 Furion 框架中,提供了多种读取方式: 通过 App.GetOptions(path) 读取(不推荐) 通过依赖注入以下实例读取: IOptions IOptionsSnapshot IOptionsMonitor 通过 App 静态类提供的静态方法获取: App.GetOptions() App.GetOptionsMonitor() App.GetOptionsSnapshot() 特别注意 禁止在主机启动时通过 App.GetOptions 获取选项,如需获取配置选项理应通过 App.GetConfig(\"配置节点\", true)。 App.GetOptions(path) 依赖注入方式 App.GetOptions() using Furion.Application; using Microsoft.AspNetCore.Mvc; namespace Furion.Web.Entry.Controllers { [Route(\"api/[controller]\")] public class DefaultController : ControllerBase { [HttpGet] public string Get() { // 不推荐采用此方式读取,该方式仅在 ConfigureServices 启动时使用 var appInfo = App.GetConfig(\"AppInfo\", true); return $@\"名称:{appInfo.Name}, 版本:{appInfo.Version}, 公司:{appInfo.Company}\"; } } } using Furion.Application; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; namespace Furion.Web.Entry.Controllers { [Route(\"api/[controller]\")] public class DefaultController : ControllerBase { private readonly AppInfoOptions options1; private readonly AppInfoOptions options2; private readonly AppInfoOptions options3; public DefaultController( IOptions options , IOptionsSnapshot optionsSnapshot , IOptionsMonitor optionsMonitor) { options1 = options.Value; options2 = optionsSnapshot.Value; options3 = optionsMonitor.CurrentValue; } [HttpGet] public string Get() { var info1 = $@\"名称:{options1.Name}, 版本:{options1.Version}, 公司:{options1.Company}\"; var info2 = $@\"名称:{options2.Name}, 版本:{options2.Version}, 公司:{options2.Company}\"; var info3 = $@\"名称:{options3.Name}, 版本:{options3.Version}, 公司:{options3.Company}\"; return $\"{info1}-{info2}-{info3}\"; } } } using Furion.Application; using Microsoft.AspNetCore.Mvc; namespace Furion.Web.Entry.Controllers { [Route(\"api/[controller]\")] public class DefaultController : ControllerBase { [HttpGet] public string Get() { var options1 = App.GetOptions(); var info1 = $@\"名称:{options1.Name}, 版本:{options1.Version}, 公司:{options1.Company}\"; var options2 = App.GetOptionsSnapshot(); var info2 = $@\"名称:{options2.Name}, 版本:{options2.Version}, 公司:{options2.Company}\"; var options3 = App.GetOptionsMonitor(); var info3 = $@\"名称:{options3.Name}, 版本:{options3.Version}, 公司:{options3.Company}\"; return $\"{info1}-{info2}-{info3}\"; } } }","s":"4.2.3.4 读取 AppInfoOptions 信息","u":"/docs/options","h":"#4234-读取-appinfooptions-信息","p":2699},{"i":2715,"t":"如果选项需要在多个地方使用,则无论任何时候都不推荐使用 App.GetOptions() 在可依赖注入类中,依赖注入 IOptions[Snapshot|Monitor] 读取 在静态类/非依赖注入类中,选择 App.GetOptions[Snapshot|Monitor]() 读取","s":"4.2.3.5 如何选择读取方式","u":"/docs/options","h":"#4235-如何选择读取方式","p":2699},{"i":2717,"t":"ASP.NET Core 应用提供了多种读取选项的接口: IOptions: 不支持: 在应用启动后读取配置数据 命名选项 注册为单一实例且可以注入到任何服务生存期 IOptionsSnapshot: 在每次请求时应重新计算选项的方案中有用 注册为范围内,因此无法注入到单一实例服务 支持命名选项 IOptionsMonitor: 用于检索选项并管理 TOptions 实例的选项通知。 注册为单一实例且可以注入到任何服务生存期。 支持: 更改通知 命名选项 可重载配置 选择性选项失效 (IOptionsMonitorCache) 注意事项 在使用 IConfigurableOptionsListener 监听选项后,如要获取最新的配置信息,请使用 App.GetOptionsMonitor() 而不是 App.GetOptions()。 了解更多 想了解更多 选项接口 知识可查阅 ASP.NET Core - 选项 - 选项接口 小节。","s":"4.2.4 选项接口说明","u":"/docs/options","h":"#424-选项接口说明","p":2699},{"i":2719,"t":"我们知道,选项实际上需要和配置文件特定键值挂钩,那 Furion 是如何准确的找到配置文件中的键值的呢?","s":"4.2.5 选项自定义配置","u":"/docs/options","h":"#425-选项自定义配置","p":2699},{"i":2721,"t":"没有贴 [OptionsSettings] 特性 以 Options 结尾,则去除 Options 字符串 否则返回 类名称 贴了 [OptionsSettings] 特性 如果配置了 Path 属性,则返回 Path 的值 否则返回 类名称 无[OptionsSettings] 有[OptionsSettings] 以 Options 结尾,则键名为:AppInfo public class AppInfoOptions : IConfigurableOptions { public string Name { get; set; } public string Version { get; set; } public string Company { get; set; } } 不以 Options 结尾,则键名为:AppInfoSettings public class AppInfoSettings : IConfigurableOptions { public string Name { get; set; } public string Version { get; set; } public string Company { get; set; } } 配置了 Path 属性,则键名为:AppSettings:AppInfo [OptionsSettings(\"AppSettings:AppInfo\")] public class AppInfoOptions : IConfigurableOptions { public string Name { get; set; } public string Version { get; set; } public string Company { get; set; } } 没有配置 Path 属性,,则键名为:AppInfoSettings [OptionsSettings] public class AppInfoSettings : IConfigurableOptions { public string Name { get; set; } public string Version { get; set; } public string Company { get; set; } }","s":"4.2.5.1 选项查找键流程","u":"/docs/options","h":"#4251-选项查找键流程","p":2699},{"i":2723,"t":"选项类可以通过 [OptionsSettings] 来配置查找路径值。 Path:对应配置文件中的键,支持 分层键 字符串,参见:《4.1 配置 - 4.1.3 路径符 查找节点》 PostConfigureAll:选项后期配置,默认 false。ASP.NET Core - 选项 - 选项后期配置","s":"4.2.6 [OptionsSettings] 说明","u":"/docs/options","h":"#426-optionssettings-说明","p":2699},{"i":2725,"t":"选项支持验证配置有效性,在 Furion 框架中,通过 services.AddConfigurableOptions() 注册选项默认启用了验证支持。 包括: 特性方式 DataAnnotations 自定义复杂验证 IValidateOptions 特性方式 复杂验证 using Furion.ConfigurableOptions; using System.ComponentModel.DataAnnotations; namespace Furion.Application { public class AppInfoOptions : IConfigurableOptions { [Required(ErrorMessage = \"名称不能为空\")] public string Name { get; set; } [Required, RegularExpression(@\"^[0-9][0-9\\.]+[0-9]$\", ErrorMessage = \"不是有效的版本号\")] public string Version { get; set; } [Required, MaxLength(100)] public string Company { get; set; } } } 自定义验证类 AppInfoValidation 并继承 IValidateOptions 接口,同时实现 Validate 方法。 using Microsoft.Extensions.Options; using System.Text.RegularExpressions; namespace Furion.Application { public class AppInfoValidation : IValidateOptions { public ValidateOptionsResult Validate(string name, AppInfoOptions options) { if (!Regex.IsMatch(options.Version, @\"^[0-9][0-9\\.]+[0-9]$\")) { return ValidateOptionsResult.Fail(\"不是有效的版本号\"); } return ValidateOptionsResult.Success; } } } 选项类继承 IConfigurableOptions 接口,并实现该接口。 using Furion.ConfigurableOptions; using System.ComponentModel.DataAnnotations; namespace Furion.Application { public class AppInfoOptions : IConfigurableOptions { [Required(ErrorMessage = \"名称不能为空\")] public string Name { get; set; } [Required] public string Version { get; set; } [Required, MaxLength(100)] public string Company { get; set; } // 选项后期配置 public void PostConfigure(AppInfoOptions options, IConfiguration configuration) { } } } 完整代码如下: using Furion.ConfigurableOptions; using Microsoft.Extensions.Options; using System.ComponentModel.DataAnnotations; using System.Text.RegularExpressions; namespace Furion.Application { // 继承 IConfigurableOptions 接口 public class AppInfoOptions : IConfigurableOptions { [Required(ErrorMessage = \"名称不能为空\")] public string Name { get; set; } [Required] public string Version { get; set; } [Required, MaxLength(100)] public string Company { get; set; } // 选项后期配置 public void PostConfigure(AppInfoOptions options) { } } // 创建自定义验证类 public class AppInfoValidation : IValidateOptions { public ValidateOptionsResult Validate(string name, AppInfoOptions options) { if (!Regex.IsMatch(options.Version, @\"^[0-9][0-9\\.]+[0-9]$\")) { return ValidateOptionsResult.Fail(\"不是有效的版本号\"); } return ValidateOptionsResult.Success; } } } 特别说明 IConfigurableOptions 继承自 IConfigurableOptions,也就是自定义复杂验证默认具有 PostConfigure(TOptions options) 选项后期配置方法。关于《4.2.8 选项后期配置》将在下一小节说明。","s":"4.2.7 选项验证","u":"/docs/options","h":"#427-选项验证","p":2699},{"i":2727,"t":"选项后期配置通俗一点来说,可以在运行时解析值或设定默认值/后期配置等。 在 Furion 框架中,配置选项后期配置很简单,只需要继承 IConfigurableOptions 接口并实现 PostConfigure(TOptions options) 方法。 using Furion.ConfigurableOptions; using Microsoft.Extensions.Configuration; using System.ComponentModel.DataAnnotations; namespace Furion.Application { public class AppInfoOptions : IConfigurableOptions { [Required(ErrorMessage = \"名称不能为空\")] public string Name { get; set; } [Required] public string Version { get; set; } [Required, MaxLength(100)] public string Company { get; set; } public void PostConfigure(AppInfoOptions options, IConfiguration configuration) { options.Name ??= \"Furion\"; options.Version ??= \"1.0.0\"; options.Company ??= \"Baiqian\"; } } } 特别说明 IConfigurableOptions 继承自 IConfigurableOptions,也就是自定义复杂验证默认具有 PostConfigure(TOptions options, IConfiguration configuration) 选项后期配置方法。","s":"4.2.8 选项后期配置","u":"/docs/options","h":"#428-选项后期配置","p":2699},{"i":2729,"t":"Furion 框架提供了非常简单且灵活的方式监听选项更改,也就是 appsettings.json 或 自定义配置文件发生任何更改都会触发处理方法。 使用非常简单,只需要继承 IConfigurableOptionsListener 接口并实现 void OnListener(TOptions options, IConfiguration configuration) 方法即可。 using Furion.ConfigurableOptions; namespace Furion.Application { public class AppInfoOptions : IConfigurableOptionsListener { public string Name { get; set; } public string Version { get; set; } public string Company { get; set; } public void OnListener(AppInfoOptions options, IConfiguration configuration) { var name = options.Name; // 实时的最新值 var version = options.Version; // 实时的最新值 } public void PostConfigure(AppInfoOptions options, IConfiguration configuration) { } } } 特别说明 IConfigurableOptionsListener 继承自 IConfigurableOptions。","s":"4.2.9 选项更改通知(热更新)","u":"/docs/options","h":"#429-选项更改通知热更新","p":2699},{"i":2731,"t":"在 Furion 底层使用的是 ChangeToken.OnChange 监听文件更改,但是此方式会导致 OnListener 触发两次,这并非是框架的 bug,而是 .NET Core 本身存在的问题,详见:https://github.com/dotnet/aspnetcore/issues/2542 所以,Furion 框架也给出另一种解决方案可替代 IConfigurableOptionsListener 的方式,也就是通过局部注入 IOptionsMonitor 的方式,如: public class YourService : IYourService, IDisposable { private readonly IDisposable _optionsReloadToken; private YourOptions _options; public YourService(IOptionsMonitor options) { (_optionsReloadToken, _options) = (options.OnChange(ReloadOptions), options.CurrentValue); } private void ReloadOptions(YourOptions options) { _options = options; } public void Dispose() { _optionsReloadToken?.Dispose(); } } 这种方式虽然啰嗦,但是可以很好和业务代码契合。","s":"4.2.9.1 关于多次触发问题","u":"/docs/options","h":"#4291-关于多次触发问题","p":2699},{"i":2733,"t":"优点 强类型配置 提供多种读取方式 支持热加载 支持设置默认值/后期配置 支持在运行环境中动态配置 支持验证配置有效性 支持更改通知 支持命名选项 缺点 需要定义对应类型 需要在启动时注册","s":"4.2.10 选项的优缺点","u":"/docs/options","h":"#4210-选项的优缺点","p":2699},{"i":2735,"t":"版本说明 以下内容仅限 Furion v3.4.3+ 版本使用。 有时候我们在 appsettings.json 中配置的 Key 和选项定义的属性名不一样,这时候就需要用到 [MapSettings] 特性即可,如: \"AppInfo\": { \"Name\": \"Furion\", \"Version\": \"1.0.0\", \"Company_Name\": \"Baiqian\" } public class AppInfoOptions : IConfigurableOptions { public string Name { get; set; } public string Version { get; set; } [MapSettings(\"Company_Name\")] public string Company { get; set; } } 特别注意 [MapSettings] 配置的 Key 会自定应用选项的 Key 作为起始点,如实际上 Company 属性对应的 Key 为:AppInfo:Company_Name。","s":"4.2.11 自定义属性 Key 映射","u":"/docs/options","h":"#4211-自定义属性-key-映射","p":2699},{"i":2737,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 选项 知识可查阅 ASP.NET Core - 选项 章节。","s":"4.2.12 反馈与建议","u":"/docs/options","h":"#4212-反馈与建议","p":2699},{"i":2740,"t":"pm2 是 NodeJS 平台高级生产流程管理器,也是一个守护进程管理器,它能够管理和保持应用程序 7*24 小时在线。 pm2 优点: 简单易用 跨平台 容器集成 内置集群、负载均衡 支持模块系统 支持实时监测 支持日志管理 支持关键指标监控 .... 想了解更多 pm2 知识可查阅 https://pm2.keymetrics.io/。","s":"34.6.1 关于 pm2","u":"/docs/pm2","h":"#3461-关于-pm2","p":2738},{"i":2742,"t":"系统安装 NodeJS 环境 https://nodejs.org/en/ 相信大部分人电脑都已经安装。 通过 npm 或 yarn 全局安装 pm2 工具 npm: npm install pm2@latest -g yarn: yarn global add pm2","s":"34.6.2 如何安装","u":"/docs/pm2","h":"#3462-如何安装","p":2738},{"i":2745,"t":"这种模式的特点就是需要服务器安装 .NET5/6 的环境 pm2 start --name xxx dotnet -- xxx.dll 指定端口 如需指定端口,可使用下列命令: pm2 start --name xxx dotnet -- PMS.Web.Entry.dll --urls=https://localhost:8089 注意 -- 后面可以写完整的 dotnet 命令。 命令说明 xxx.dll 为项目发布后的启动层名称。 --name 配置应用程序在 pm2 中的唯一标识。 终端说明 注意:通过 -- 传递参数在 powershell 终端下无效,需要在 cmd 终端下才行。比如出现这样的错误:","s":"34.6.3.1 非单文件/非独立发布模式","u":"/docs/pm2","h":"#34631-非单文件非独立发布模式","p":2738},{"i":2747,"t":"这种模式的特点就是无需服务器安装 .NET 任何环境,可查阅 单文件发布文档 pm2 start --name xxx PMS.Web.Entry.exe 指定端口 如需指定端口,可使用下列命令: pm2 start --name xxx PMS.Web.Entry.exe -- --urls=https://localhost:8089 注意 -- 后面可以写完整的 dotnet 命令。 命令说明 xxx.exe 为项目发布后的启动层名称,如果名称包含 空格,则使用双引号包裹,如 \"x xx.exe\"。 --name 配置应用程序在 pm2 中的唯一标识。 终端说明 注意:通过 -- 传递参数在 powershell 终端下无效,需要在 cmd 终端下才行。","s":"34.6.3.2 单文件/独立发布模式","u":"/docs/pm2","h":"#34632-单文件独立发布模式","p":2738},{"i":2749,"t":"执行上述命令后会显示启动成功日志,如: PS C:\\Users\\bqrjsoft\\Desktop\\pms> pm2 start --name pms PMS.Web.Entry.exe [PM2] Starting C:\\Users\\bqrjsoft\\Desktop\\pms\\PMS.Web.Entry.exe in fork_mode (1 instance) [PM2] Done. ┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐ │ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │ ├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤ │ 0 │ pms │ default │ N/A │ fork │ 41764 │ 0s │ 0 │ online │ 0% │ 85.0mb │ bqrjsoft │ disabled │ └─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘ PS C:\\Users\\bqrjsoft\\Desktop\\pms> 关于端口 ASP.NET Core 程序默认端口都是 5000,如 http://localhost:5000。","s":"34.6.3.3 启用应用程序","u":"/docs/pm2","h":"#34633-启用应用程序","p":2738},{"i":2751,"t":"pm2 部署也提供了非常简单的 json 配置方式,部署更简单,拓展性更强,不需要每次重复输入命令,如在项目启动项目下添加 pm2.json,并设置文件属性 内容 为 始终复制: PMS/Web.Entry/pm2.json { \"apps\": { \"name\": \"唯一标识\", \"script\": \"dotnet\", \"exec_mode\": \"fork\", \"error_file\": \"logs/err.log\", \"out_file\": \"logs/out.log\", \"merge_logs\": true, \"log_date_format\": \"YYYY-MM-DD HH:mm:ss\", \"min_uptime\": \"60s\", \"max_restarts\": 30, \"autorestart\": true, \"restart_delay\": \"60\", \"args\": [ \"PMS.Web.Entry.dll\", \"--urls=http://*:5001\" ], \"env\": { \"ASPNETCORE_ENVIRONMENT\": \"Production\" } } } 在发布后的文件目录下打开终端执行: pm2 start pm2.json","s":"34.6.3.4 json 配置/启动方式","u":"/docs/pm2","h":"#34634-json-配置启动方式","p":2738},{"i":2754,"t":"pm2 monit","s":"34.6.4.1 实时监听运行状态","u":"/docs/pm2","h":"#34641-实时监听运行状态","p":2738},{"i":2756,"t":"pm2 logs","s":"34.6.4.2 显示运行日志","u":"/docs/pm2","h":"#34642-显示运行日志","p":2738},{"i":2758,"t":"pm2 info pms 注意,pms 为您配置的 --name 名称。","s":"34.6.4.3 查看应用信息","u":"/docs/pm2","h":"#34643-查看应用信息","p":2738},{"i":2760,"t":"pm2 startup pm2 save Windows 下随机启动 可查阅 pm2-windows-startup。 npm install pm2-windows-startup -g pm2-startup install pm2 save","s":"34.6.4.4 随机启动","u":"/docs/pm2","h":"#34644-随机启动","p":2738},{"i":2762,"t":"非单文件/非独立发布模式 pm2 start \"xxx.dll\" -i max 单文件/独立发布模式 pm2 start xxx.exe -i max","s":"34.6.4.5 集群模式(负载均衡)","u":"/docs/pm2","h":"#34645-集群模式负载均衡","p":2738},{"i":2764,"t":"// 重启应用 pm2 restart app_name // 重载应用 pm2 reload app_name // 停止应用 pm2 stop app_name // 删除应用 pm2 delete app_name 更多 pm2 文档可查阅 https://pm2.keymetrics.io/docs/usage/quick-start/","s":"34.6.4.6 其他操作","u":"/docs/pm2","h":"#34646-其他操作","p":2738},{"i":2766,"t":"与我们交流 给 Furion 提 Issue。","s":"34.6.5 反馈与建议","u":"/docs/pm2","h":"#3465-反馈与建议","p":2738},{"i":2768,"t":"谨言慎行 在 Furion 诞生之初,受到诸多标题党、造谣喷子党在各大平台无脑黑,故设立耻辱柱,将这些情节极其严重的人钉在 Furion 耻辱柱上,以示世人。 网络不是不法之地,望大家谨言慎行。 Rwing https://github.com/rwing https://www.cnblogs.com/rwing https://www.zhihu.com/people/rwing https://www.qixin.com/company/d55fbb80-3eb2-44d4-9357-8feb1dfa304c 2881099, FreeSql https://github.com/2881099 https://www.cnblogs.com/kellynic https://github.com/dotnetcore/FreeSql Richfiter https://www.cnblogs.com/taotaodetuer/ love24 https://www.cnblogs.com/love24/ wangpengzong, 王朋总,不辍,修车课代表 https://www.cnblogs.com/wangpengzong/ https://www.zhihu.com/people/wang-peng-zong 她微笑的脸 https://www.cnblogs.com/linhuiy/ https://www.zhihu.com/people/ta-wei-xiao-de-lian 角落的白板报 https://www.52abp.com/ https://github.com/ltm0203 芯芊 https://github.com/xixixixixiao https://www.cnblogs.com/xixixiao/ https://my.oschina.net/jianyisiqian https://www.zhihu.com/people/heart_thousand 油面筋塞肉 https://www.zhihu.com/people/eflay Interface https://www.zhihu.com/people/wen-xiang-yuan-di-wen 食梦者P https://www.zhihu.com/people/li-pi-pi-19 玩双截棍的熊猫 https://www.zhihu.com/people/wan-shuang-jie-gun-de-xiong-mao https://www.cnblogs.com/staneee SakuraNeko https://www.zhihu.com/people/CatElf OLDLI, NetModular https://www.zhihu.com/people/li-zhi-hu-95 https://github.com/iamoldli https://www.cnblogs.com/oldli/ keep_wan https://my.oschina.net/keepwan https://gitee.com/wanwenfeng NMSAzulX https://www.zhihu.com/people/nmsazulx https://www.cnblogs.com/NMSLanX/ https://github.com/dotnetcore/Natasha https://github.com/NMSAzulX 其他补充 张善友 .NET 颇有影响力的人,在 Furion 作为唯一一个 .NET 项目成功加入木兰开源社区时,张善友在腾讯 TVP 公开群说 Furion 只是个营销框架,对此也不过多说什么,简单记录。","s":"1.10 耻辱柱","u":"/docs/pillar-of-humiliation","h":"","p":2767},{"i":2770,"t":"微不足道的贡献 .NET 要在国内真正发展起来,必须得有一些追逐梦想的人在做着不计付出的事情,而我希望自己能贡献一份微薄之力。 很多人问过,我不知道该怎么回答,因为我自己几乎没有考虑过这个问题,还包括盈利的问题。 我没考虑的是 Furion 一定要是某种形式的框架,譬如企业级、微服务、单体等形式。Furion 一贯的思路是,用户迫切需要什么,那么我们就推什么,尽管最终可能让它变成四不像,可说不定用户要的就是 “四不像”。 当然也要有所为有所不为,用户需要的,但感觉自己做不好的,还是别去碰了,精心完善现有功能才是正道。 好吧,其实多数时候,我们想得太多了,实际去做的太少了。就好像写这个内容时想的是个中长篇,可真正话到手上只有寥寥数语。 做事何尝不是如此,光有 idea 是不值钱的! -- powerby javayou","s":"1.9 关于框架定位","u":"/docs/position","h":"","p":2769},{"i":2772,"t":"推荐使用脚手架 Furion 官方提供了非常灵活方便的脚手架,可以快速的创建多层架构项目。 推荐使用 《2.2 官方脚手架》代替本章节功能。","s":"2.3 手动搭建分层","u":"/docs/reference","h":"","p":2771},{"i":2774,"t":"Furion 推荐采用多层项目设计架构,每一个项目层的依赖分别是: YourName.Application:添加 YourName.Core 引用 YourName.Core:添加 Furion 引用,SqlSugar 版本添加 Furion.Pure 🎗 YourName.Database.Migrations:添加 YourName.EntityFramework.Core 引用 YourName.EntityFramework.Core:添加 YourName.Core 引用 YourName.Web.Core:添加 YourName.Application,YourName.Database.Migrations 引用 YourName.Web.Entry:添加 YourName.Web.Core 引用 和 Microsoft.EntityFrameworkCore.Tools 包 特别说明 如果采用 EFCore 以外的 ORM 框架,如 SqlSugar,那么无需创建 YourName.Database.Migrations 和 YourName.EntityFramework.Core 层。 另外 YourName.Web.Entry 无需引用 Microsoft.EntityFrameworkCore.Tools 包。","s":"2.3.1 推荐分层设计","u":"/docs/reference","h":"#231-推荐分层设计","p":2771},{"i":2776,"t":"项目搭建好之后,集成 Furion 框架只需要在 Program.cs 中 添加 Inject() 方法即可: .NET5 版本: using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; namespace YourName.Web.Entry { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) { return Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.Inject() .UseStartup(); }); } } } .NET6 版本 var builder = WebApplication.CreateBuilder(args).Inject(); builder.Services.AddControllers().AddInject(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); app.UseInject(); app.MapControllers(); app.Run();","s":"2.3.2 集成 Furion 功能","u":"/docs/reference","h":"#232-集成-furion-功能","p":2771},{"i":2778,"t":"与我们交流 给 Furion 提 Issue。","s":"2.3.3 反馈与建议","u":"/docs/reference","h":"#233-反馈与建议","p":2771},{"i":2780,"t":"版本说明 以下内容仅限 Furion 2.4.4 + 版本使用。","s":"30. 脱敏处理","u":"/docs/sensitive-detection","h":"","p":2779},{"i":2782,"t":"引用百度百科: 数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。数据安全技术之一,数据库安全技术主要包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。 在 Furion 系统中,脱敏处理 指的是对不符合系统合法词汇检测验证。","s":"30.1 关于脱敏","u":"/docs/sensitive-detection","h":"#301-关于脱敏","p":2779},{"i":2784,"t":"Furion 框架内置了一套默认的脱敏词汇脱敏处理机制,并且提供自定义操作。","s":"30.2 如何使用","u":"/docs/sensitive-detection","h":"#302-如何使用","p":2779},{"i":2786,"t":"public void ConfigureServices(IServiceCollection services) { services.AddSensitiveDetection(); }","s":"30.2.1 注册 脱敏词汇检测 服务","u":"/docs/sensitive-detection","h":"#3021-注册-脱敏词汇检测-服务","p":2779},{"i":2788,"t":"在 Web 启动层项目中创建 sensitive-words.txt 文件,确保采用 UTF-8 编码格式且不能带 BOM 签名 且设置为嵌入式资源!🎃 sensitive-words.txt 内容格式为每一行标识一个脱敏词汇: 坏人 无语 滚开 八嘎 3.8.9+ 版本 在 Furion 3.8.9+ 版本支持 | 分隔符进行分割,也同时支持 换行 和 | 混用,如: 坏人|无语|滚开 八嘎 推荐使用 | 方式,可以节省词库占用存储空间。 接下来设置为嵌入式资源:","s":"30.2.2 创建 sensitive-words.txt 文件","u":"/docs/sensitive-detection","h":"#3022-创建-sensitive-wordstxt-文件","p":2779},{"i":2790,"t":"实现数据验证脱敏检测 [SensitiveDetection] Furion 框架提供了 [SensitiveDetection] 验证特性,可以对参数、属性进行脱敏验证,用法和 [DataValidation] 一致,如: // 在属性中使用 public class Content { [SensitiveDetection] public string Text { get; set; } } // 在 动态API/Controller 中使用 public void Test([SensitiveDetection] string text) { } 通过 ISensitiveDetectionProvider 服务使用 Furion 框架也提供了 ISensitiveDetectionProvider 服务进行手动脱敏验证处理,如: public class FurionService { private readonly ISensitiveDetectionProvider _sensitiveDetectionProvider; public FurionService(ISensitiveDetectionProvider sensitiveDetectionProvider) { _sensitiveDetectionProvider = sensitiveDetectionProvider; } /// /// 获取所有脱敏词汇 /// /// public async Task> GetWordsAsync() { return await _sensitiveDetectionProvider.GetWordsAsync(); } /// /// 判断是否是正常的词汇 /// /// /// public async Task VaildedAsync(string text) { return await _sensitiveDetectionProvider.VaildedAsync(text); } /// /// 替换非正常词汇 /// /// /// public async Task ReplaceAsync(string text) { return await _sensitiveDetectionProvider.ReplaceAsync(text, '*'); } }","s":"30.2.3 使用脱敏检测","u":"/docs/sensitive-detection","h":"#3023-使用脱敏检测","p":2779},{"i":2792,"t":"Furion 框架也提供了替换脱敏词汇的特性支持,如: // 在属性中使用 public class Content { [SensitiveDetection('*')] public string Text { get; set; } } 特别注意 在 Furion 3.8.8+ 版本后支持方法特性直接替换 public void Test([SensitiveDetection('*')] string text) { }","s":"30.2.4 脱敏词汇替换","u":"/docs/sensitive-detection","h":"#3024-脱敏词汇替换","p":2779},{"i":2794,"t":"Furion 框架除了内置了一套默认的 脱敏处理 程序,也支持自定义脱敏处理程序。","s":"30.3 自定义脱敏词汇处理","u":"/docs/sensitive-detection","h":"#303-自定义脱敏词汇处理","p":2779},{"i":2796,"t":"/// /// 自定义脱敏词汇检测器 /// public class YourSensitiveDetectionProvider : ISensitiveDetectionProvider { // 支持构造函数注入 public YourSensitiveDetectionProvider() { } /// /// 返回所有脱敏词汇 /// /// public async Task> GetWordsAsync() { // 这里写你脱敏词汇数据的来源(如从数据库读取),建议做好缓存操作 } /// /// 判断脱敏词汇是否有效 /// /// /// public async Task VaildedAsync(string text) { // 这里写你如何判断是正常的字符,返回 true 正常,返回 false 表示是个脱敏词汇 } /// /// 替换脱敏词汇 /// /// /// /// public async Task ReplaceAsync(string text, char transfer = '*') { // 这里写你替换非正常字符为指定字符 } }","s":"30.3.1 自定义 ISensitiveDetectionProvider 程序,如:","u":"/docs/sensitive-detection","h":"#3031-自定义-isensitivedetectionprovider-程序如","p":2779},{"i":2798,"t":"public void ConfigureServices(IServiceCollection services) { services.AddSensitiveDetection(); } 之后系统将自动采用自定义的方式进行脱敏处理。","s":"30.3.2 注册自定义脱敏提供器","u":"/docs/sensitive-detection","h":"#3032-注册自定义脱敏提供器","p":2779},{"i":2800,"t":"与我们交流 给 Furion 提 Issue。","s":"30.4 反馈与建议","u":"/docs/sensitive-detection","h":"#304-反馈与建议","p":2779},{"i":2803,"t":".NET Core 3.0 新增了 Worker Service 的新项目模板,可以编写长时间运行的后台服务,并且能轻松的部署成 Windows服务 或 Linux 守护程序。 目前微软提供了两种方式创建长时间运行的后台服务: 共宿主方式:中小型项目推荐,无需单独部署 Windows/Linux 服务 独立 Worker Service 方式:需独立部署 Windows/Linux 服务","s":"25.1 关于辅助角色服务","u":"/docs/process-service","h":"#251-关于辅助角色服务","p":2801},{"i":2805,"t":"共宿主方式指的是在现有的 Web 或其他应用程中创建类文件并派生自 BackgroundService 类即可。这种方式的典型特点就是和应用共生存周期,应用启动时启动,应用结束停止运行。 推荐等级 推荐中小型项目使用这种方式。 using Microsoft.Extensions.Hosting; using System; using System.Threading; using System.Threading.Tasks; namespace YourPoject.Web.Core; public class Worker : BackgroundService { protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { Console.WriteLine(DateTime.Now); // 延迟 1 秒 await Task.Delay(1000, stoppingToken); } } } 之后在 Startup.cs 中注册即可: services.AddHostedService();","s":"25.2 共宿主方式","u":"/docs/process-service","h":"#252-共宿主方式","p":2801},{"i":2807,"t":"最好的实践方式是创建独立的类库项目:YourProject.BackgroundServices,之后添加 YourPoject.Application 和 YourPoject.Core 层引用,将所有的 Worker 放在该层,同时创建 Startup.cs 类进行 Worker 统一注册,如: using Microsoft.Extensions.DependencyInjection; namespace YourProject.BackgroundServices; public sealed class Startup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddHostedService(); services.AddHostedService(); } }","s":"25.2.1 最佳实践","u":"/docs/process-service","h":"#2521-最佳实践","p":2801},{"i":2809,"t":"独立 Worker Service 方式的主要特点就是它是一个独立的项目,和现有的项目没有直接关联关系,需要分开独立部署。 推荐等级 推荐中大型项目使用这种方式,也就是独立部署成 Windows Service 或者 Linux 守护进程,具有独立生存周期,即使应用故障了也不会影响它的运行。","s":"25.3 独立 Worker Service 方式","u":"/docs/process-service","h":"#253-独立-worker-service-方式","p":2801},{"i":2811,"t":"通过 Visual Studio 2019 提供的 Worker Service 可直接创建。如图:","s":"25.3.1 如何创建 Worker Service","u":"/docs/process-service","h":"#2531-如何创建-worker-service","p":2801},{"i":2813,"t":"当我们创建好 Worker Service 项目时,已经自带了一个 Worker 类并继承自 BackgroundService 基类。 Worker 正是我们辅助角色的主要工作类,在这里我们编写我们所有的业务逻辑。通常 Worker 默认格式为: using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using System; using System.Threading; using System.Threading.Tasks; namespace FurionWorkers { public class Worker : BackgroundService { private readonly ILogger _logger; public Worker(ILogger logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation(\"Worker running at: {time}\", DateTimeOffset.Now); await Task.Delay(1000, stoppingToken); } } } } 当我们创建了 Worker 类之后,需要在 Program.cs 中进行注册,如: using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace FurionWorkers { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService(); }); } } 小知识 如果使用了 Furion 包后可实现自动注册。","s":"25.3.2 创建 Worker","u":"/docs/process-service","h":"#2532-创建-worker","p":2801},{"i":2815,"t":"Worker Service 是支持定义多个 Worker 进行协调工作的,每个 Worker 是完全独立的工作环境,但可共享同一主进程信息。","s":"25.3.3 多个 Worker","u":"/docs/process-service","h":"#2533-多个-worker","p":2801},{"i":2817,"t":"Worker Service 为 Worker 提供了三个执行方法,分别代表三个生命周期: StartAsync:负责启动 Worker Service,如果调用 StartAsync 方法的线程被一直阻塞了,那么 Worker Service 的启动就一直完成不了 ExecuteAsync:Worker Service 真正实现业务逻辑的地方,这里不能调用阻塞代码!!! StopAsync:负责结束 Worker Service,如果调用 StopAsync 方法的线程被一直阻塞了,那么 Worker Service 的结束就一直完成不了 using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using System; using System.Threading; using System.Threading.Tasks; namespace FurionWorkers { public class Worker : BackgroundService { private readonly ILogger _logger; public Worker(ILogger logger) { _logger = logger; } // 启动 public override Task StartAsync(CancellationToken cancellationToken) { return base.StartAsync(cancellationToken); } // 执行逻辑 protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation(\"Worker running at: {time}\", DateTimeOffset.Now); await Task.Delay(1000, stoppingToken); } } // 停止 public override Task StopAsync(CancellationToken cancellationToken) { return base.StopAsync(cancellationToken); } } }","s":"25.3.4 生命周期","u":"/docs/process-service","h":"#2534-生命周期","p":2801},{"i":2819,"t":"Worker Service 集成 Furion 非常方便,只需要安装 Furion 的包即可,并在 Program.cs 中调用 .Inject() 方法,如: using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace FurionWorkers { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .Inject() .ConfigureServices((hostContext, services) => { // 以下代码可不用编写,Furion 已实现自动注册 Worker; // services.AddHostedService(); }); } } 默认情况下,Inject() 方法注册了 日志、缓存、依赖注入、加载配置、自定义 Startup 功能。 小知识 集成 Furion 后会自动扫描 Worker 类并实现自动注册。","s":"25.3.5 集成 Furion","u":"/docs/process-service","h":"#2535-集成-furion","p":2801},{"i":2821,"t":"Worker Service 注册服务和 Web 略有不同,Web 主要在 Starup.cs 类中注册,Worker Service 在 Program.cs 启动类的 ConfigureServices 方法中注册,如: using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace FurionWorkers { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .Inject() .ConfigureServices((hostContext, services) => { // 注册数据库服务 services.AddDatabaseAccessor(options => { options.AddDb(); }); // 注册远程请求 services.AddRemoteRequest(); // 等等其他服务注册 }); } }","s":"25.3.6 注册服务","u":"/docs/process-service","h":"#2536-注册服务","p":2801},{"i":2823,"t":"小建议 建议使用 【26.1 调度作业】 章节内容实现强大的分布式定时任务。 Furion 框架为 BackgroundService 提供了定时任务的支持。","s":"25.4 实现定时任务","u":"/docs/process-service","h":"#254-实现定时任务","p":2801},{"i":2825,"t":"namespace WorkerService; public class Worker : BackgroundService { private readonly ILogger _logger; private const int delay = 1000; public Worker(ILogger logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current); await taskFactory.StartNew(async () => { // 你的业务代码写到这里面 _logger.LogInformation(\"Worker running at: {time}\", DateTimeOffset.Now); await Task.CompletedTask; }, stoppingToken); await Task.Delay(delay, stoppingToken); } } }","s":"25.4.1 间隔执行方式","u":"/docs/process-service","h":"#2541-间隔执行方式","p":2801},{"i":2827,"t":"小知识 如需了解 Cron 表达式内容,可查阅 【26.2 Cron 表达式】 章节内容。 using Furion.TimeCrontab; namespace WorkerService; public class Worker : BackgroundService { private readonly ILogger _logger; private readonly Crontab _crontab; public Worker(ILogger logger) { _logger = logger; _crontab = Crontab.Parse(\"* * * * * *\", CronStringFormat.WithSeconds); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current); await taskFactory.StartNew(async () => { // 你的业务代码写到这里面 _logger.LogInformation(\"Worker running at: {time}\", DateTimeOffset.Now); await Task.CompletedTask; }, stoppingToken); await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.UtcNow), stoppingToken); } } }","s":"25.4.2 Cron 表达式执行方式","u":"/docs/process-service","h":"#2542-cron-表达式执行方式","p":2801},{"i":2829,"t":"默认情况下,定时任务都是采用 并行 的方式,也就是不会等待上一次任务完成,如果需要等待上一次任务完成,可以修改为 串行 方式: using Furion.TimeCrontab; namespace WorkerService; public class Worker : BackgroundService { private readonly ILogger _logger; private readonly Crontab _crontab; private bool _isLock = false; public Worker(ILogger logger) { _logger = logger; _crontab = Crontab.Parse(\"* * * * * *\", CronStringFormat.WithSeconds); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { if (_isLock) goto next; _isLock = true; var taskFactory = new TaskFactory(System.Threading.Tasks.TaskScheduler.Current); var task = await taskFactory.StartNew(async () => { // 模拟耗时操作 await Task.Delay(2000); _logger.LogInformation(\"Worker running at: {time}\", DateTimeOffset.Now); await Task.CompletedTask; }, stoppingToken); // 等待任务完成 await task.ContinueWith(task => _isLock = false); next: await Task.Delay(_crontab.GetSleepMilliseconds(DateTime.UtcNow), stoppingToken); } } }","s":"25.4.3 实现 串行 操作","u":"/docs/process-service","h":"#2543-实现-串行-操作","p":2801},{"i":2831,"t":"Worker Service 只为 Worker 提供了单例作用域的服务注入,如果需要注入瞬时或作用域对象,需手动创建作用域,如: public class Worker : BackgroundService { // 日志对象 private readonly ILogger _logger; // 服务工厂 private readonly IServiceScopeFactory _scopeFactory; public Worker(ILogger logger , IServiceScopeFactory scopeFactory) { _logger = logger; _scopeFactory = scopeFactory; } protected override Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { using var scope = _scopeFactory.CreateScope(); var services = scope.ServiceProvider; // 获取数据库上下文 var dbContext = Db.GetDbContext(services); // 获取仓储 var respository = Db.GetRepository(services); // 解析其他服务 var otherService = services.GetService(); } return Task.CompletedTask; } }","s":"25.5 依赖注入使用","u":"/docs/process-service","h":"#255-依赖注入使用","p":2801},{"i":2834,"t":"共宿主方式方式部署非常简单,只需要部署所在的 Web 或其他应用程序项目即可,会自动随着项目启动自动启动。 特别说明 如果部署到 IIS 中,可能存在 Worker Service 被回收的情况,毕竟是和网站同一个宿主。","s":"25.6.1 共宿主方式","u":"/docs/process-service","h":"#2561-共宿主方式","p":2801},{"i":2836,"t":"Worker Service 支持部署到 Windows Service 中 或 Linux 守护进程中 部署到 Windows Service​ 第一步:安装 Microsoft.Extensions.Hosting.WindowsServices 拓展包 第二步:在 Program.cs 中添加 .UseWindowsService() using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace FurionWorkers { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .Inject() .ConfigureServices((hostContext, services) => { // 以下代码可不用编写,Furion 已实现自动注册 Worker; // services.AddHostedService(); }); } } 第三步:发布 Worker Service,可通过 dotnet publish -c Release -o C:\\FurionWorker 命令发布或通过 Visual Studio 2019 发布。 独立发布不依赖 SDK 方式 dotnet publish -c release -r win10-x64 --framework net6.0 第四步:通过 sc.exe 工具来管理并创建 Windows 服务,通过 管理员模式 并打开控制台,输入: sc.exe create FurionWorkerServices binPath= C:\\FurionWorker\\FurionWorker.exe 注意=后面要有一个空格 创建成功后可通过 sc.exe query FurionWorkerServices 查看服务状态。 第五步 启动服务:sc.exe start FurionWorkerServices,启动之后就可以在 Windows 服务工具中查看了。 停止服务:sc.exe stop NETCoreDemoWorkerService 删除服务:sc.exe delete NETCoreDemoWorkerService 特别提醒 以上所有 sc.exe 命令必须在 管理员 模式下进行。 sc.exe delete NETCoreDemoWorkerService, 执行删除时候, 把Windows 服务工具关闭, 否则, 电脑重启后才会显示删除; 部署到 Linux 守护程序​ 第一步:安装 Microsoft.Extensions.Hosting.Systemd 拓展包 第二步:在 Program.cs 中添加 .UseSystemd() using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace FurionWorkers { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSystemd() .Inject() .ConfigureServices((hostContext, services) => { // 以下代码可不用编写,Furion 已实现自动注册 Worker; // services.AddHostedService(); }); } } 部署到 Linux 守护进程 就是这么简单。","s":"25.6.2 独立 Worker Service 方式","u":"/docs/process-service","h":"#2562-独立-worker-service-方式","p":2801},{"i":2838,"t":"默认情况下,使用 Windows Services 部署后,日志文件可能会在系统盘的 System32 下。","s":"25.7 关于 Windows 部署日志问题","u":"/docs/process-service","h":"#257-关于-windows-部署日志问题","p":2801},{"i":2840,"t":"与我们交流 给 Furion 提 Issue。","s":"25.8 反馈与建议","u":"/docs/process-service","h":"#258-反馈与建议","p":2801},{"i":2843,"t":"HTTP 是无状态的协议。 默认情况下,HTTP 请求是不保留用户值的独立消息。但是我们可以通过以下几种方式保留请求用户数据: Cookie:通常存储在客户端的数据,请求时带回服务端 Session:存储在服务端的数据(可以在存储在内存、进程等介质中) Query Strings:通过 Http 请求地址参数共享 HttpContext.Items:存储在服务端,只在请求声明周期内使用,请求结束自动销毁 Cache:服务端缓存,包括内存缓存、分布式内存缓存、IO 缓存、序列化缓存以及数据库缓存 AsyncLocal:通过异步控制流实现本地数据共享,跨线程","s":"32.1 关于会话和状态管理","u":"/docs/sesssion-state","h":"#321-关于会话和状态管理","p":2841},{"i":2846,"t":"使用 Cookie 非常简单,如: // 读取 Cookies var value = httpContext.Request.Cookies[\"key\"]; // 设置 Cookies var option = new CookieOptions(); option.Expires = DateTime.Now.AddMilliseconds(10); httpContext.Response.Cookies.Append(key, value, option); // 删除 Cookies httpContext.Response.Cookies.Delete(key); 特别说明 httpContext 可以通过 IHttpContextAccessor 获取,也可以通过 App.HttpContext 获取。 我们还可以通过 Cookie 实现授权功能及单点登录(SSO):网站共享 Cookie","s":"32.2.1 Cookie 使用","u":"/docs/sesssion-state","h":"#3221-cookie-使用","p":2841},{"i":2848,"t":"在使用 Session 之前,必须注册 Session 服务:(如果 public class Startup { public void ConfigureServices(IServiceCollection services) { // services.AddDistributedMemoryCache(); 框架内部已经默认注册 services.AddSession(options => { options.IdleTimeout = TimeSpan.FromSeconds(10); options.Cookie.HttpOnly = true; options.Cookie.IsEssential = true; }); // 注意在控制器之前注册!!!! services.AddControllersWithViews(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler(\"/Home/Error\"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseSession(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); endpoints.MapRazorPages(); }); } } 中间件注册顺序 app.UseSession() 必须在 app.UseRouting() 和 app.UseEndpoints() 之间注册! 常见例子: // 读取 Session var byteArr = httpContext.Session.Get(\"key\"); // 返回 byte[] var str = httpContext.Session.GetString(\"key\"); // 返回 string[] var num = httpContext.Session.GetInt32(\"key\"); // 返回 int // 设置 Session httpContext.Session.SetString(\"key\", \"value\"); // 设置字符串 httpContext.Session.SetInt32(\"key\", 1); // 设置 int 类型 自定义设置任意类型拓展: public static class SessionExtensions { public static void Set(this ISession session, string key, T value) { session.SetString(key, JsonSerializer.Serialize(value)); } public static T Get(this ISession session, string key) { var value = session.GetString(key); return value == null ? default : JsonSerializer.Deserialize(value); } } 防止 Session ID 改变或 Session 失效 在 Startup.cs 的 ConfigureServices 配置即可: services.Configure(options => { options.CheckConsentNeeded = context => false; // 默认为true,改为false options.MinimumSameSitePolicy = SameSiteMode.None; });","s":"32.2.2 Session 使用","u":"/docs/sesssion-state","h":"#3222-session-使用","p":2841},{"i":2850,"t":"该方式使用非常简单,只需 httpContext.Request.Query[\"key\"] 即可。","s":"32.2.3 Query Strings 使用","u":"/docs/sesssion-state","h":"#3223-query-strings-使用","p":2841},{"i":2852,"t":"HttpContext 对象提供了 Items 集合属性,可以让我们在单次请求间共享数据,请求结束立即销毁,可以存储任何数据。使用也非常简单,如: // 读取 var value = httpContext.Items[\"key\"]; // 添加 httpContext.Items[\"key\"] = \"任何值包括对象\"; // 删除 httpContext.Items.Remove(\"key\");","s":"32.2.4 HttpContext.Items 使用","u":"/docs/sesssion-state","h":"#3224-httpcontextitems-使用","p":2841},{"i":2854,"t":"参见 分布式缓存 文档","s":"32.2.5 Cache 方式","u":"/docs/sesssion-state","h":"#3225-cache-方式","p":2841},{"i":2856,"t":"AsyncLocal 可以说是进程内共享数据的大利器,可以通过该类实现跨线程、异步控制流中共享数据,如: using System; using System.Threading; using System.Threading.Tasks; class Example { static AsyncLocal _asyncLocalString = new AsyncLocal(); static ThreadLocal _threadLocalString = new ThreadLocal(); static async Task AsyncMethodA() { // Start multiple async method calls, with different AsyncLocal values. // We also set ThreadLocal values, to demonstrate how the two mechanisms differ. _asyncLocalString.Value = \"Value 1\"; _threadLocalString.Value = \"Value 1\"; var t1 = AsyncMethodB(\"Value 1\"); _asyncLocalString.Value = \"Value 2\"; _threadLocalString.Value = \"Value 2\"; var t2 = AsyncMethodB(\"Value 2\"); // Await both calls await t1; await t2; } static async Task AsyncMethodB(string expectedValue) { Console.WriteLine(\"Entering AsyncMethodB.\"); Console.WriteLine(\" Expected '{0}', AsyncLocal value is '{1}', ThreadLocal value is '{2}'\", expectedValue, _asyncLocalString.Value, _threadLocalString.Value); await Task.Delay(100); Console.WriteLine(\"Exiting AsyncMethodB.\"); Console.WriteLine(\" Expected '{0}', got '{1}', ThreadLocal value is '{2}'\", expectedValue, _asyncLocalString.Value, _threadLocalString.Value); } static async Task Main(string[] args) { await AsyncMethodA(); } } // The example displays the following output: // Entering AsyncMethodB. // Expected 'Value 1', AsyncLocal value is 'Value 1', ThreadLocal value is 'Value 1' // Entering AsyncMethodB. // Expected 'Value 2', AsyncLocal value is 'Value 2', ThreadLocal value is 'Value 2' // Exiting AsyncMethodB. // Expected 'Value 2', got 'Value 2', ThreadLocal value is '' // Exiting AsyncMethodB. // Expected 'Value 1', got 'Value 1', ThreadLocal value is '' 为了简化操作,Furion v2.18+ 版本实现了轻量级的 CallContext 静态类,内部使用 AsyncLocal 实现,使用如下: CallContext.SetLocalValue(\"name\", \"Furion\"); CallContext.GetLocalValue(\"name\"); CallContext.SetLocalValue(\"count\", 1); CallContext.GetLocalValue(\"count\"); 了解更多 AsyncLocal 知识:https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.asynclocal-1?redirectedfrom=MSDN&view=net-5.0","s":"32.2.6 AsyncLocal 方式","u":"/docs/sesssion-state","h":"#3226-asynclocalt-方式","p":2841},{"i":2858,"t":"与我们交流 给 Furion 提 Issue。","s":"32.3 反馈与建议","u":"/docs/sesssion-state","h":"#323-反馈与建议","p":2841},{"i":2860,"t":"版本说明 以下内容仅限 Furion 3.6.3 + 版本使用。 推荐使用脚手架 Furion 官方提供了非常灵活方便的脚手架,可以快速的创建多层架构项目。 推荐使用 《2.2 官方脚手架》代替本章节功能。","s":"2.0 入门指南","u":"/docs/serverun","h":"","p":2859},{"i":2862,"t":"相信从 ASP.NET 5 升级至 ASP.NET 6 的开发者都经历过这样变更: 在 ASP.NET 5 中,我们这样创建 Web 主机: Program.cs Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); 在 ASP.NET 6 中, 我们这样创建 Web 主机: Program.cs var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); 试问,ASP.NET 7,ASP.NET 8 ... ASP.NET N 呢?会不会每一个版本都有不同的创建方式,那后续项目如何无缝升级? 所以,为了保证一致的代码体验和后续无缝升级,创造出了 Serve.Run(),即使未来创建方式变了,也不用担心,交给框架即可。","s":"2.0.1 历史背景","u":"/docs/serverun","h":"#201-历史背景","p":2859},{"i":2864,"t":"打开 Visual Studio 2022 并创建 控制台 项目 配置项目名称 选择 .NET6 使用命令行方式 // 创建控制台项目 dotnet new console -n HelloFurion","s":"2.0.2 创建 控制台 项目","u":"/docs/serverun","h":"#202-创建-控制台-项目","p":2859},{"i":2866,"t":"使用命令行方式 // 进入创建的目录 cd HelloFurion // 添加包 dotnet add package Furion","s":"2.0.3 添加 Furion 依赖包","u":"/docs/serverun","h":"#203-添加-furion-依赖包","p":2859},{"i":2868,"t":"修改 Program.cs 代码为: Program.cs Serve.Run(); 对,你没看错,Furion 已经配置好了! 功能说明 Serve.Run() 已经包含了基本的 WebAPI 功能,包含动态 WebAPI,跨域 等等,如需完全自定义配置可使用 Serve.Run(RunOptions.Default),之后 AppStartup 派生类自行配置。","s":"2.0.4 一句话搞定","u":"/docs/serverun","h":"#204-一句话搞定","p":2859},{"i":2870,"t":"启动浏览器查看效果 是不是超级超级简单!!!","s":"2.0.5 启动浏览器","u":"/docs/serverun","h":"#205-启动浏览器","p":2859},{"i":2872,"t":"Program.cs Serve.Run(); [DynamicApiController] public class HelloService { public string Say() { return \"Hello, Furion\"; } } 启动浏览器查看效果","s":"2.0.6 编写第一个 API","u":"/docs/serverun","h":"#206-编写第一个-api","p":2859},{"i":2875,"t":"默认情况下,创建的 Web 主机端口为 5000/5001 端口,如需自定义配置,可通过第一个参数配置: Serve.Run(\"https://localhost:8080\"); 同时也支持 dotnet run 和 dotnet watch run 指定: dotnet run --urls https://localhost:8080 # watch 方式 dotnet watch run --urls https://localhost:8080 也可以通过 ConfigureBuilder 方式配置: Serve.Run(RunOptions.Default.ConfigureBuilder(builder => { builder.WebHost.UseUrls(\"https://localhost:8080\"); // 也可以通过 builder.Configuration 读取 urls 配置 })); 关于 localhost 和多端口 建议使用 * 代替 localhost,这样可以自适应主机地址,多个端口使用 ; 分割,结尾无需 ; 通过 json 方式配置 如需通过配置文件配置端口,需两个该步骤: 编辑控制台启动项目 .csproj 文件,修改 Project 节点为: 也就是在原来的 Sdk 中添加 .Web 即可。 在控制台启动项目中添加 Properties 文件夹并在此文件夹中创建 launchSettings.json 文件,同时写入以下内容: launchSettings.json { \"$schema\": \"http://json.schemastore.org/launchsettings.json\", \"profiles\": { \"启动项目名称\": { \"commandName\": \"Project\", \"launchBrowser\": true, \"launchUrl\": \"\", \"applicationUrl\": \"https://localhost:8080;http://localhost:8081\", \"environmentVariables\": { \"ASPNETCORE_ENVIRONMENT\": \"Development\" } } } } 除了 launchsettings.json 的方式,还可以在 appsettings.json 简单配置 appsettings.json { \"Urls\": \"http://localhost:8081\" }","s":"2.0.7.1 配置默认端口","u":"/docs/serverun","h":"#2071-配置默认端口","p":2859},{"i":2877,"t":"版本说明 以下内容仅限 Furion 4.8.0 + 版本使用。 Serve.Run(additional: services => { services.AddRemoteRequest(); }); // 通用泛型主机方式 Serve.RunGeneric(additional: services => { services.AddRemoteRequest(); }); // 还可以省去 additional Serve.Run(services => { services.AddRemoteRequest(); }); // 通用泛型主机方式 Serve.RunGeneric(services => { services.AddRemoteRequest(); });","s":"2.0.7.2 便捷服务注册","u":"/docs/serverun","h":"#2072-便捷服务注册","p":2859},{"i":2879,"t":"传入 RunOptions 对象相当于自由定义和控制,也就是除了默认集成了 Furion 以外,没有注册任何功能。 仅集成 Furion 的默认配置 Serve.Run(RunOptions.Default); 配置更多服务/中间件 Serve.Run(RunOptions.Default .ConfigureBuilder(builder => { builder.Services.AddControllers() .AddInject(); }) .Configure(app => { app.UseRouting(); app.UseInject(string.Empty); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); })); WebComponent 方式 版本说明 以下内容仅限 Furion 4.3.5 + 版本使用。 Serve.Run(RunOptions.Default .AddWebComponent()); public class XXXWebComponent : IWebComponent { public void Load(WebApplicationBuilder builder, ComponentContext componentContext) { // .... } }","s":"2.0.7.3 自定义配置","u":"/docs/serverun","h":"#2073-自定义配置","p":2859},{"i":2881,"t":"默认情况下 Serve.Run() 内置了 跨域,控制器,路由,规范化结果、静态文件 服务/中间件。适合快速开始项目和编写测试代码。 但不能对这些已注册服务/中间件进行自定义配置,这时只需要配置 RunOptions 属性/方法即可,如: Program.cs Serve.Run(RunOptions.Default .ConfigureBuilder(...) .Configure(..)); 但把所有服务/中间件都放在 Program.cs 中好吗?答案是不好的,因为会导致后续迁移代码维护代码造成了一些困扰。 所以 Furion 推荐下面更加灵活且易维护的方式,Program.cs 只需一句话即可: 推荐使用组件启动 Furion 3.7.3+ 官方提供了非常灵活方便的组件化启动配置服务。 推荐使用 《3.1 组件化启动》代替 AppStartup 方式功能。 Program.cs Serve.Run(RunOptions.Default); 然后添加自定义 Startup.cs 文件,代码如下: Startup.cs using Furion; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; namespace HelloFurion; public class Startup : AppStartup { public void ConfigureServices(IServiceCollection services) { // .... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // .... } } 小提示 正常情况下,自定义 Startup.cs 文件应该放在独立的 YourProject.Web.Core 层或其他层。","s":"2.0.7.4 Serve.Run 和 Startup 最佳组合","u":"/docs/serverun","h":"#2074-serverun-和-startup-最佳组合","p":2859},{"i":2883,"t":"如配置 WebHost... Serve.Run(RunOptions.Default .ConfigureBuilder(builder => { builder.WebHost..... }));","s":"2.0.7.5 更多配置","u":"/docs/serverun","h":"#2075-更多配置","p":2859},{"i":2885,"t":"Serve.Run() 看似非常简单,实则非常灵活,而且支持 Furion 和 .NET 所有功能。","s":"2.0.8 支持 Furion 所有功能","u":"/docs/serverun","h":"#208-支持-furion-所有功能","p":2859},{"i":2887,"t":"创建 appsettings.json 文件,并设置 属性 为 如果较新则复制 和 内容(生成操作) { \"Logging\": { \"LogLevel\": { \"Default\": \"Information\", \"Microsoft\": \"Warning\", \"Microsoft.Hosting.Lifetime\": \"Information\", \"Microsoft.EntityFrameworkCore\": \"Information\" } }, \"AllowedHosts\": \"*\" } 在代码中读取配置: using Furion; Serve.Run(); [DynamicApiController] public class HelloService { public string Say() { return \"Hello, Furion \" + App.Configuration[\"Logging:LogLevel:Default\"]; } }","s":"2.0.8.1 添加 appsettings.json","u":"/docs/serverun","h":"#2081-添加-appsettingsjson","p":2859},{"i":2889,"t":"在 Furion 中可以派生自 AppStartup 可以实现更多配置,如: Program.cs Serve.Run(); 特别注意 如果您想自己配置 Web 项目服务,可通过 Serve.Run(RunOptions.Default); 方式,因为 Serve.Run() 已经包含了常用的 Web 可能会提示重复注册错误。 MyStartup.cs using Furion; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; namespace HelloFurion; public class MyStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { Console.WriteLine(\"调用服务注册啦~~\"); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { Console.WriteLine(\"调用中间件注册啦\"); } }","s":"2.0.8.2 添加自定义 Startup","u":"/docs/serverun","h":"#2082-添加自定义-startup","p":2859},{"i":2891,"t":"只需要编辑 .csproj 文件,将第一行 Project 节点的 Sdk 修改为: 即可完成转换,实际上只是追加了 .Web。","s":"2.0.8.3 将控制台项目变成 Web 项目","u":"/docs/serverun","h":"#2083-将控制台项目变成-web-项目","p":2859},{"i":2893,"t":"版本说明 以下内容仅限 Furion 4.2.4 + 版本使用。 Serve.Run(args: args); Serve.Run(RunOptions.Default.WithArgs(args)); Serve.Run(RunOptions.Main(args));","s":"2.0.8.4 添加 args 启动参数","u":"/docs/serverun","h":"#2084-添加-args-启动参数","p":2859},{"i":2895,"t":"是不是非常强大啊,Serve.Run() 虽然简单,但是 100% 支持 Furion 和 .NET 所有功能。尽情去体验吧!","s":"2.0.8.5 还没看够?","u":"/docs/serverun","h":"#2085-还没看够","p":2859},{"i":2897,"t":"Serve.Run 提供了 RunOptions,LegacyRunOptions 和 GenericRunOptions 重载参数类型,他们的主要区别: RunOptions:使用的是 WebApplication 方式,创建 Web 主机优先推荐方式 LegacyRunOptions:使用的是 Host 方式,但默认配置了 Web 主机 GenericRunOptions:使用的是 Host 方式,通用类型主机,可用于 WorkerService LegacyRunOptions 配置例子: using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; Serve.Run(LegacyRunOptions.Default // 配置 Web 主机 .ConfigureWebDefaults(builder => builder.ConfigureServices(services => { // ... }) .Configure(app => { // ... }); }) // 配置 Host 主机 .ConfigureBuilder(builder => builder....)); GenericRunOptions 配置例子: Serve.Run(GenericRunOptions.Default // 配置 Host 主机 .ConfigureBuilder(hostBuilder => hostBuilder....); 更多发布命令说明可查阅微软官方文档 https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish","s":"2.0.9 RunOptions,LegacyRunOptions 和 GenericRunOptions","u":"/docs/serverun","h":"#209-runoptionslegacyrunoptions-和-genericrunoptions","p":2859},{"i":2899,"t":"在 Winform 或 WPF 中使用,请确保 Serve.Run() 在桌面应用程序之前初始化: Winform namespace WinFormsApp2; internal static class Program { [STAThread] static void Main() { // 如果在 4.8.0 之前版本无返回值 var host = Serve.Run(silence: true); // 静默启动 ApplicationConfiguration.Initialize(); Application.Run(new Form1()); } } WPF using Microsoft.Extensions.Hosting; namespace WpfApp1; public partial class App : Application { private readonly IHost _host; public App() { // 如果在 4.8.0 之前版本无返回值 _host = Serve.Run(silence: true); } protected override void OnExit(ExitEventArgs e) { // 停止服务并释放 _host.StopAsync(); _host.Dispose(); base.OnExit(e); } }","s":"2.0.10 在 Winform/WPF 桌面中使用","u":"/docs/serverun","h":"#2010-在-winformwpf-桌面中使用","p":2859},{"i":2901,"t":"如果想注册服务,可创建 YourStartup 派生自 AppStartup 即可,如: YourStartup.cs using Furion; using Microsoft.Extensions.DependencyInjection; namespace YourProject; public class YourStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddRemoteRequest(); } }","s":"2.0.10.1 添加更多服务","u":"/docs/serverun","h":"#20101-添加更多服务","p":2859},{"i":2903,"t":"默认情况下,Serve.Run() 使用阻塞线程方式启动,但有些时候我们不希望阻塞现有的代码,可使用静默启动的方式: Serve.Run(silence: true); Console.WriteLine(\"Hello, World!\"); Console.ReadKey(); 也可以通过 RunOptions,LegacyRunOptions 或 GenericRunOptions 方式,如: // RunOptions 方式 Serve.Run(RunOptions.DefaultSilence); // LegacyRunOptions 方式 Serve.Run(LegacyRunOptions.DefaultSilence); // GenericRunOptions 方式 Serve.Run(GenericRunOptions.DefaultSilence);","s":"2.0.11 静默启动","u":"/docs/serverun","h":"#2011-静默启动","p":2859},{"i":2905,"t":"由于 .NET5 必须在使用 .UseStartup<> 配置启动项,所以 Serve.Run() 模式会提示找不到 Views 视图路径,这时候只需要在启动目录创建 Startup.cs 文件并通过泛型方式指定即可,如: Startup.cs using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; namespace YourProject.Web.Entity { public class Startup { public void ConfigureServices(IServiceCollection _) { } public void Configure(IApplicationBuilder _) { } } } 将 Startup 类通过 Serve.Run 泛型指定: Serve.Run(LegacyRunOptions.Default);","s":"2.0.12 .NET5 模式找不到 Views 视图路径","u":"/docs/serverun","h":"#2012-net5-模式找不到-views-视图路径","p":2859},{"i":2907,"t":"与我们交流 给 Furion 提 Issue。","s":"2.0.13 反馈与建议","u":"/docs/serverun","h":"#2013-反馈与建议","p":2859},{"i":2910,"t":"SaaS 是 Software-as-a-Service(软件即服务)的简称,随着互联网技术的发展和应用软件的成熟, 在 21 世纪开始兴起的一种完全创新的软件应用模式。它与“on-demand software”,the application service provider(ASP,应用服务提供商),hosted software(托管软件)所具有相似的含义。 它是一种通过 Internet 提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。用户不用再购买软件,而改用向提供商租用基于 Web 的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,软件厂商在向客户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让用户随时随地都可以使用其定购的软件和服务。 对于许多小型企业来说,SaaS 是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。","s":"11.1 什么是 SaaS","u":"/docs/saas","h":"#111-什么是-saas","p":2908},{"i":2912,"t":"多租户技术或称多重租赁技术,简称 SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性。 简单讲:在一台服务器上运行单个应用实例,它为多个租户(客户)提供服务。从定义中我们可以理解:多租户是一种架构,目的是为了让多用户环境下使用同一套程序,且保证用户间数据隔离。那么重点就很浅显易懂了,多租户的重点就是同一套程序下实现多用户数据的隔离。","s":"11.2 什么是多租户","u":"/docs/saas","h":"#112-什么是多租户","p":2908},{"i":2915,"t":"这是第一种方案,即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高。 优点: 为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果出现故障,恢复数据比较简单。 缺点: 增多了数据库的安装数量,随之带来维护成本和购置成本的增加。 这种方案与传统的一个客户、一套数据、一套部署类似,差别只在于软件统一部署在运营商那里。如果面对的是银行、医院等需要非常高数据隔离级别的租户,可以选择这种模式,提高租用的定价。如果定价较低,产品走低价路线,这种方案一般对运营商来说是无法承受的。","s":"11.3.1 独立数据库(基于 Database 的方式)","u":"/docs/saas","h":"#1131-独立数据库基于-database-的方式","p":2908},{"i":2917,"t":"这是第二种方案,即多个或所有租户共享 Database,但是每个租户一个 Schema(也可叫做一个 user)。底层库比如是:SqlServer、Oracle 等,一个数据库下可以有多个 Schema。 优点: 为安全性要求较高的租户提供了一定程度的逻辑数据隔离,并不是完全隔离;每个数据库可支持更多的租户数量。 缺点: 如果出现故障,数据恢复比较困难,因为恢复数据库将牵涉到其他租户的数据; 如果需要跨租户统计数据,存在一定困难。","s":"11.3.2 共享数据库,独立 Schema (基于 Schema 的方式)","u":"/docs/saas","h":"#1132-共享数据库独立-schema-基于-schema-的方式","p":2908},{"i":2919,"t":"共享数据表 这是第三种方案,即租户共享同一个 Database、同一个 Schema,但在表中增加 TenantId 多租户的数据字段。这是共享程度最高、隔离级别最低的模式。 即每插入一条数据时都需要有一个客户的标识。这样才能在同一张表中区分出不同客户的数据。 优点: 三种方案比较,第三种方案的维护和购置成本最低,允许每个数据库支持的租户数量最多。 缺点: 隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量; 数据备份和恢复最困难,需要逐表逐条备份和还原。","s":"11.3.3 共享数据库,共享 Schema (基于 TenantId 的方式)","u":"/docs/saas","h":"#1133-共享数据库共享-schema-基于-tenantid-的方式","p":2908},{"i":2921,"t":"Furion 框架支持以上三种多租户实现方案,使用简单且容易维护。下面分别使用三种不同方式演示多租户方案用法。 特别说明 一旦 数据库上下文 类继承了租户任意接口,则自动开始多租户功能支持。","s":"11.4 多租户使用方案","u":"/docs/saas","h":"#114-多租户使用方案","p":2908},{"i":2923,"t":"此方式在中小型企业系统中最为常用,维护成本低,购置成本低。","s":"11.5 基于 TenantId 的方式","u":"/docs/saas","h":"#115-基于-tenantid-的方式","p":2908},{"i":2925,"t":"Furion.EntityFramework.Core\\DbContexts\\MultiTenantDbContext.cs using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class MultiTenantDbContext : AppDbContext { public MultiTenantDbContext(DbContextOptions options) : base(options) { } } } 特别注意 多租户操作建议单独一个数据库上下文,而且需指定 MultiTenantDbContextLocator 数据库上下文定位器。","s":"11.5.1 创建租户数据库上下文","u":"/docs/saas","h":"#1151-创建租户数据库上下文","p":2908},{"i":2927,"t":"using Furion.DatabaseAccessor; using Microsoft.Extensions.DependencyInjection; namespace Furion.EntityFramework.Core { [AppStartup(600)] public sealed class FurEntityFrameworkCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddDatabaseAccessor(options => { options.AddDbPool(); options.AddDbPool(); }); } } }","s":"11.5.2 注册多租户数据库上下文","u":"/docs/saas","h":"#1152-注册多租户数据库上下文","p":2908},{"i":2929,"t":"Furion.EntityFramework.Core\\SeedDatas\\TenantSeedData.cs using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; namespace Furion.EntityFramework.Core { public class TenantSeedData : IEntitySeedData { public IEnumerable HasData(DbContext dbContext, Type dbContextLocator) { return new List { new Tenant { TenantId = Guid.Parse(\"383AFB88-F519-FFF8-B364-6D563BF3687F\"), Name = \"默认租户\", Host = \"localhost:44313\", CreatedTime = DateTime.Parse(\"2020-10-06 20:19:07\") }, new Tenant { TenantId = Guid.Parse(\"C5798CB6-16D6-0F42-EB56-59C695353BC0\"), Name = \"其他租户\", Host = \"localhost:5000\", CreatedTime = DateTime.Parse(\"2020-10-06 20:20:32\") } }; } } } 特别说明 该步骤只在 Code First 方式执行,Database First 无需配置种子数据。","s":"11.5.3 添加 Tenant 种子数据","u":"/docs/saas","h":"#1153-添加-tenant-种子数据","p":2908},{"i":2931,"t":"Add-Migration add_tenant_table -Context MultiTenantDbContext Update-Database -Context MultiTenantDbContext","s":"11.5.4 根据模型创建 Tenant 表","u":"/docs/saas","h":"#1154-根据模型创建-tenant-表","p":2908},{"i":2933,"t":"在需要多租户的数据库上下文中实现 IMultiTenantOnTable 接口,如: using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using System; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class FurionDbContext : AppDbContext, IMultiTenantOnTable, IModelBuilderFilter { public FurionDbContext(DbContextOptions options) : base(options) { } public object GetTenantId() { return base.Tenant?.TenantId ?? Guid.Empty; } } } 在 GetTenantId() 方法中,首先获取请求的 主机地址,然后根据主机地址查询对应的租户 TenantId,避免多次查询数据库,这里使用了 IMemoryCache 内存缓存。 特别说明 base.Tenant 只是 Furion 框架提供的默认租户实现方法,如果不能满足业务需求,只需要在 GetTenantId 里面写你的业务代码即可,也就是无需调用 base.Tenant。如: public object GetTenantId() { // 这里是你获取 TenantId 的逻辑 return 你的 TenantId; }","s":"11.5.5 实现 IMultiTenantOnTable 接口","u":"/docs/saas","h":"#1155-实现-imultitenantontable-接口","p":2908},{"i":2935,"t":"IModelBuilderFilter 接口是全局查询过滤器实现接口,所以我们需要配置实体 TenantId 过滤器 using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class FurionDbContext : AppDbContext, IMultiTenantOnTable, IModelBuilderFilter { public FurionDbContext(DbContextOptions options) : base(options) { } public object GetTenantId() { return base.Tenant?.TenantId ?? Guid.Empty; } public void OnCreating(ModelBuilder modelBuilder, EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder.HasQueryFilter(BuildTenantQueryFilter(entityBuilder, dbContext)); } } }","s":"11.5.6 实现 IModelBuilderFilter 接口","u":"/docs/saas","h":"#1156-实现-imodelbuilderfilter-接口","p":2908},{"i":2937,"t":"通过上面的步骤,我们已经解决了 查询 租户过滤功能,但是 新增 和 更新 还未处理。 新增 数据的时候自动设置 TenantId 的值 更新 数据的时候排除 TenantId 属性更新 实现上面的步骤很简单,只需要重写 SavingChangesEvent 事件方法即可。 using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Linq; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class FurionDbContext : AppDbContext, IMultiTenantOnTable, IModelBuilderFilter { public FurionDbContext(DbContextOptions options) : base(options) { } public object GetTenantId() { return base.Tenant?.TenantId ?? Guid.Empty; } public void OnCreating(ModelBuilder modelBuilder, EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder.HasQueryFilter(BuildTenantQueryFilter(entityBuilder, dbContext)); } protected override void SavingChangesEvent(DbContextEventData eventData, InterceptionResult result) { // 获取当前事件对应上下文 var dbContext = eventData.Context; // 获取所有新增、更新、删除的实体 var entities = dbContext.ChangeTracker.Entries().Where(u => u.State == EntityState.Added || u.State == EntityState.Modified || u.State == EntityState.Deleted); foreach (var entity in entities) { switch (entity.State) { // 自动设置租户Id case EntityState.Added: entity.Property(nameof(Entity.TenantId)).CurrentValue = GetTenantId(); break; // 排除租户Id case EntityState.Modified: entity.Property(nameof(Entity.TenantId)).IsModified = false; break; // 删除处理 case EntityState.Deleted: break; } } } } }","s":"11.5.7 重写 SavingChangesEvent 事件方法","u":"/docs/saas","h":"#1157-重写-savingchangesevent-事件方法","p":2908},{"i":2939,"t":"此方式在中大型企业系统中最为常用,一个租户(客户)一个独立的数据库。","s":"11.6 基于 Database 的方式","u":"/docs/saas","h":"#116-基于-database-的方式","p":2908},{"i":2941,"t":"Furion.EntityFramework.Core\\DbContexts\\MultiTenantDbContext.cs using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class MultiTenantDbContext : AppDbContext { public MultiTenantDbContext(DbContextOptions options) : base(options) { } } } 特别注意 多租户操作建议单独一个数据库上下文,而且需指定 MultiTenantDbContextLocator 数据库上下文定位器。","s":"11.6.1 创建租户数据库上下文","u":"/docs/saas","h":"#1161-创建租户数据库上下文","p":2908},{"i":2943,"t":"using Furion.DatabaseAccessor; using Microsoft.Extensions.DependencyInjection; namespace Furion.EntityFramework.Core { [AppStartup(600)] public sealed class FurEntityFrameworkCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddDatabaseAccessor(options => { options.AddDb(); options.AddDbPool(); }); } } } 特别注意 需要 Database 多租户方案的数据库上下文需要采用 AddDb 注册,而不是 AddDbPool。原因是 AddDbPool 方式注册后续不支持 OnConfiguring 重写!!!","s":"11.6.2 注册多租户数据库上下文","u":"/docs/saas","h":"#1162-注册多租户数据库上下文","p":2908},{"i":2945,"t":"Furion.EntityFramework.Core\\SeedDatas\\TenantSeedData.cs using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; namespace Furion.EntityFramework.Core { public class TenantSeedData : IEntitySeedData { public IEnumerable HasData(DbContext dbContext, Type dbContextLocator) { return new List { new Tenant { TenantId = Guid.Parse(\"383AFB88-F519-FFF8-B364-6D563BF3687F\"), Name = \"默认租户\", Host = \"localhost:44313\", CreatedTime = DateTime.Parse(\"2020-10-06 20:19:07\"), ConnectionString = \"Data Source=./Furion.db\" // 配置连接字符串 }, new Tenant { TenantId = Guid.Parse(\"C5798CB6-16D6-0F42-EB56-59C695353BC0\"), Name = \"其他租户\", Host = \"localhost:5000\", CreatedTime = DateTime.Parse(\"2020-10-06 20:20:32\"), ConnectionString = \"Data Source=./Fur2.db\" // 配置连接字符串 } }; } } } 特别说明 该步骤只在 Code First 方式执行,Database First 无需配置种子数据。","s":"11.6.3 添加 Tenant 种子数据","u":"/docs/saas","h":"#1163-添加-tenant-种子数据","p":2908},{"i":2947,"t":"Add-Migration add_tenant_table -Context MultiTenantDbContext Update-Database -Context MultiTenantDbContext","s":"11.6.4 根据模型创建 Tenant 表","u":"/docs/saas","h":"#1164-根据模型创建-tenant-表","p":2908},{"i":2949,"t":"在需要多租户的数据库上下文中实现 IMultiTenantOnDatabase 接口,如: using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { // 这里可不配置 public class FurionDbContext : AppDbContext, IMultiTenantOnDatabase { public FurionDbContext(DbContextOptions options) : base(options) { } public string GetDatabaseConnectionString() { return base.Tenant?.ConnectionString??\"默认链接字符串\"; } } } 特别说明 base.Tenant 只是 Furion 框架提供的默认租户实现方法,如果不能满足业务需求,只需要在 GetDatabaseConnectionString 里面写你的业务代码即可,也就是无需调用 base.Tenant。如: public string GetDatabaseConnectionString() { // 这里是你获取 DatabaseConnecionString 的逻辑 return 你的 连接字符串; }","s":"11.6.5 实现 IMultiTenantOnDatabase 接口","u":"/docs/saas","h":"#1165-实现-imultitenantondatabase-接口","p":2908},{"i":2951,"t":"在需要多租户的数据库上下文中重写 OnConfiguring 方法并配置连接字符串: using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { public class FurionDbContext : AppDbContext, IMultiTenantOnDatabase { public FurionDbContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite(GetDatabaseConnectionString()); base.OnConfiguring(optionsBuilder); } public string GetDatabaseConnectionString() { return base.Tenant?.ConnectionString??\"默认链接字符串\"; } } } 特别注意 基于 Database 方式做 Code First 的时候,需要手动指定迁移程序名称,如: optionsBuilder.UseSqlite(GetDatabaseConnectionString(), options=> { options.MigrationsAssembly(\"My.Migrations\"); });","s":"11.6.6 重写 OnConfiguring 方法","u":"/docs/saas","h":"#1166-重写-onconfiguring-方法","p":2908},{"i":2953,"t":"此方式在中小型企业系统中也不少见,一个租户(客户)共享数据库且不同 Schema。","s":"11.7 基于 Schema 的方式","u":"/docs/saas","h":"#117-基于-schema-的方式","p":2908},{"i":2955,"t":"Furion.EntityFramework.Core\\DbContexts\\MultiTenantDbContext.cs using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class MultiTenantDbContext : AppDbContext { public MultiTenantDbContext(DbContextOptions options) : base(options) { } } } 特别注意 多租户操作建议单独一个数据库上下文,而且需指定 MultiTenantDbContextLocator 数据库上下文定位器。","s":"11.7.1 创建租户数据库上下文","u":"/docs/saas","h":"#1171-创建租户数据库上下文","p":2908},{"i":2957,"t":"using Furion.DatabaseAccessor; using Microsoft.Extensions.DependencyInjection; namespace Furion.EntityFramework.Core { [AppStartup(600)] public sealed class FurEntityFrameworkCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddDatabaseAccessor(options => { options.AddDbPool(); options.AddDbPool(); }); } } }","s":"11.7.2 注册多租户数据库上下文","u":"/docs/saas","h":"#1172-注册多租户数据库上下文","p":2908},{"i":2959,"t":"Furion.EntityFramework.Core\\SeedDatas\\TenantSeedData.cs using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; namespace Furion.EntityFramework.Core { public class TenantSeedData : IEntitySeedData { public IEnumerable HasData(DbContext dbContext, Type dbContextLocator) { return new List { new Tenant { TenantId = Guid.Parse(\"383AFB88-F519-FFF8-B364-6D563BF3687F\"), Name = \"默认租户\", Host = \"localhost:44313\", CreatedTime = DateTime.Parse(\"2020-10-06 20:19:07\"), Schema = \"dbo\" // Schema }, new Tenant { TenantId = Guid.Parse(\"C5798CB6-16D6-0F42-EB56-59C695353BC0\"), Name = \"其他租户\", Host = \"localhost:5000\", CreatedTime = DateTime.Parse(\"2020-10-06 20:20:32\"), Schema = \"furion\" // Schema } }; } } } 特别说明 该步骤只在 Code First 方式执行,Database First 无需配置种子数据。","s":"11.7.3 添加 Tenant 种子数据","u":"/docs/saas","h":"#1173-添加-tenant-种子数据","p":2908},{"i":2961,"t":"Add-Migration add_tenant_table -Context MultiTenantDbContext Update-Database -Context MultiTenantDbContext","s":"11.7.4 根据模型创建 Tenant 表","u":"/docs/saas","h":"#1174-根据模型创建-tenant-表","p":2908},{"i":2963,"t":"在需要多租户的数据库上下文中实现 IMultiTenantOnSchema 接口,如: using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; namespace Furion.EntityFramework.Core { [AppDbContext(\"Sqlite3ConnectionString\", DbProvider.Sqlite)] public class FurionDbContext : AppDbContext, IMultiTenantOnSchema { public FurionDbContext(DbContextOptions options) : base(options) { } public string GetSchemaName() { return base.Tenant?.Schema??\"dbo\"; } } } 特别说明 base.Tenant 只是 Furion 框架提供的默认租户实现方法,如果不能满足业务需求,只需要在 GetSchemaName 里面写你的业务代码即可,也就是无需调用 base.Tenant。如: public string GetSchemaName() { // 这里是你获取 Schema 的逻辑 return 你的 Schema; }","s":"11.7.5 实现 IMultiTenantOnSchema 接口","u":"/docs/saas","h":"#1175-实现-imultitenantonschema-接口","p":2908},{"i":2965,"t":"基于 Schema 方式比较特别,生成数据迁移的时候没办法获取租户信息,所以建议分开多次迁移,如: public string GetSchemaName() { return base.Tenant?.Schema?? \"租户一Schema\"; } public string GetSchemaName() { return base.Tenant?.Schema?? \"租户二Schema\"; } 这样就可以在迁移的时候生成多次迁移了。","s":"11.7.6 关于 Code First 数据迁移","u":"/docs/saas","h":"#1176-关于-code-first-数据迁移","p":2908},{"i":2967,"t":"默认情况下,Furion 框架提供了内置的 Tenant 类型,方便大家快速实现 SaaS 多租户功能,如果需要自定义多租户 Tenant 类型,只需要启用以下配置即可:","s":"11.8 自定义 Tenant 类型","u":"/docs/saas","h":"#118-自定义-tenant-类型","p":2908},{"i":2969,"t":"services.AddDatabaseAccessor(options => { options.CustomizeMultiTenants(); // 启用自定义多租户类型,有一个默认参数,配置多租户表字段名 options.AddDbPool(); });","s":"11.8.1 启动自定义多租户类型配置","u":"/docs/saas","h":"#1181-启动自定义多租户类型配置","p":2908},{"i":2971,"t":"using System; using System.ComponentModel.DataAnnotations.Schema; namespace Furion.Core { public class MyTenant : IEntity { [Key] public Guid TenantId { get; set; } public string Name { get; set; } public string Host { get; set; } } } 如果需要查询该租户信息,可通过以下代码获取,如: var tenantDbContext = Db.GetDbContext(); var myTenant = tenantDbContext.Set();","s":"11.8.2 自定义租户类","u":"/docs/saas","h":"#1182-自定义租户类","p":2908},{"i":2973,"t":"Furion 框架会在租户上下文第一次查询时候将租户表缓存起来,避免频发查询数据库,如果更新了租户表,则需要手动刷新租户信息,如: using Furion.DatabaseAccessor.Extensions; // 在更新租户信息后调用 _repository.Context.RefreshTenantCache();","s":"11.9 刷新租户缓存","u":"/docs/saas","h":"#119-刷新租户缓存","p":2908},{"i":2975,"t":"与我们交流 给 Furion 提 Issue。","s":"11.10 反馈与建议","u":"/docs/saas","h":"#1110-反馈与建议","p":2908},{"i":2977,"t":"配置智能提示和校验 如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用】 只需要在 .json 文件头部添加下列配置即可: { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\" }","s":"1. 应用配置","u":"/docs/settings/appsettings","h":"","p":2976},{"i":2979,"t":"应用配置指的是 Furion 框架全局配置选项。","s":"1.1 关于配置","u":"/docs/settings/appsettings","h":"#11-关于配置","p":2976},{"i":2981,"t":"AppSettings:配置根节点 InjectMiniProfiler:是否注入 MiniProfiler,bool 类型,默认 true,关闭 Swagger 左上角监听 InjectSpecificationDocument:是否启用 Swagger 文档,bool 类型,默认 true,生产环境可关闭 EnabledReferenceAssemblyScan:是否启用通过 dll 方式添加的引用程序集扫描,bool 类型,默认 false ExternalAssemblies:配置外部程序集完整路径,支持动态加载,string[] 类型,默认 [] ExcludeAssemblies:排除扫描的程序集名称,string[] 类型,默认 [] PrintDbConnectionInfo:是否打印数据库连接信息到 MiniProfiler 中,bool 类型,默认 true SupportPackageNamePrefixs:配置支持的包前缀名,string[] 类型,默认 [] OutputOriginalSqlExecuteLog:是否输出原始 Sql 执行日志(ADO.NET),默认 true VirtualPath:配置虚拟目录,必须以 / 开头","s":"1.2 配置信息","u":"/docs/settings/appsettings","h":"#12-配置信息","p":2976},{"i":2983,"t":"{ \"AppSettings\": { \"InjectMiniProfiler\": false } }","s":"1.3 配置示例","u":"/docs/settings/appsettings","h":"#13-配置示例","p":2976},{"i":2985,"t":"默认情况下,Furion 框架会自动扫描根目录下的 *.json 和 *.config.xml 文件载入配置中,如需忽略个别文件,需在 appsettings.json 配置文件根节点下配置 IgnoreConfigurationFiles 节点即可,string[] 类型,如: { \"IgnoreConfigurationFiles\": [\"runtime.json\"] } 如果需要自定义扫描目录(非根目录),需在 appsettings.json 中添加下面配置: 支持版本 在 v2.16.7+ 版本有效 { \"ConfigurationScanDirectories\": [\"目录1名称\", \"目录1名称/子目录名称\"] } 必须在 appsettings.json 文件中配置才有效","s":"1.4 特别注意","u":"/docs/settings/appsettings","h":"#14-特别注意","p":2976},{"i":2987,"t":"配置智能提示和校验 如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用】 只需要在 .json 文件头部添加下列配置即可: { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\" }","s":"2. 跨域配置","u":"/docs/settings/corsaccessorsettings","h":"","p":2986},{"i":2989,"t":"跨域配置指的是 Furion 框架客户端跨域配置选项。","s":"2.1 关于配置","u":"/docs/settings/corsaccessorsettings","h":"#21-关于配置","p":2986},{"i":2991,"t":"CorsAccessorSettings:配置根节点 PolicyName:跨域策略名,string 类型,必填,默认 App.Cors.Policy WithOrigins:允许跨域的域名列表,string[] 类型,默认 * WithHeaders:请求表头,没有配置则允许所有表头,string[] 类型 WithExposedHeaders:设置客户端可获取的响应标头,string[] 类型,默认 [\"access-token\", \"x-access-token\"] WithMethods:设置跨域允许请求谓词,没有配置则允许所有,string[] 类型 AllowCredentials:是否允许跨域请求中的凭据,bool 类型,默认值 true SetPreflightMaxAge:设置预检过期时间,int 类型,默认值 24小时 FixedClientToken:是否默认配置 WithExposedHeaders,bool 类型,默认 true SignalRSupport:是否启用 SignalR 跨域支持,bool 类型,默认 false","s":"2.2 配置信息","u":"/docs/settings/corsaccessorsettings","h":"#22-配置信息","p":2986},{"i":2993,"t":"{ \"CorsAccessorSettings\": { \"PolicyName\": \"MyPolicy\", \"WithOrigins\": [\"http://localhost:4200\", \"https://furion.icu\"] } }","s":"2.3 配置示例","u":"/docs/settings/corsaccessorsettings","h":"#23-配置示例","p":2986},{"i":2995,"t":"由于 axios 对跨域有特定的需要,需要响应报文中添加特定 Header 才能放行,如:Access-Control-Expose-Headers: xxxxx,所以,如果前端使用了 axios 请求,需要添加以下配置: { \"CorsAccessorSettings\": { \"WithExposedHeaders\": [\"X-Pagination\",\"access-token\",\"x-access-token\"] } }","s":"2.4 使用 axios 前端注意事项","u":"/docs/settings/corsaccessorsettings","h":"#24-使用-axios-前端注意事项","p":2986},{"i":2997,"t":"配置智能提示和校验 如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用】 只需要在 .json 文件头部添加下列配置即可: { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\" }","s":"4. 依赖注入配置","u":"/docs/settings/dependencyinjectionsettings","h":"","p":2996},{"i":2999,"t":"依赖注入配置指的是 Furion 框架依赖注入配置选项。","s":"4.1 关于配置","u":"/docs/settings/dependencyinjectionsettings","h":"#41-关于配置","p":2996},{"i":3001,"t":"DependencyInjectionSettings:依赖注入配置根节点 Definitions:动态依赖注入配置节点,ExternalService 数组类型 ExternalService:配置单个依赖注入信息 Interface:配置依赖接口信息,格式:程序集名称;接口完整名称,如:Furion.Application;Furion.Application.ITestService Service:配置接口实现信息,格式同上 RegisterType:配置依赖注入的对象生存期,取值:Transient,Scoped,Singleton Action:注册行为,可选值:Add,TryAdd,参见 依赖注入-特性配置 Pattern:注册选项,参见 依赖注入-特性配置置 Named:注册别名,参见 依赖注入-特性配置 Order:注册排序,参见 依赖注入-特性配置 Proxy:配置代理拦截,格式:程序集名称;代理类完整名称,参见 依赖注入-特性配置","s":"4.2 配置信息","u":"/docs/settings/dependencyinjectionsettings","h":"#42-配置信息","p":2996},{"i":3003,"t":"{ \"DependencyInjectionSettings\": { \"Definitions\": [ { \"Interface\": \"Furion.Application;Furion.Application.ITestService\", \"Service\": \"Furion.Application;Furion.Application.TestService\", \"RegisterType\": \"Transient\", \"Action\": \"Add\", \"Pattern\": \"SelfWithFirstInterface\", \"Named\": \"TestService\", \"Order\": 1, \"Proxy\": \"Furion.Application;Furion.Application.LogDispathProxy\" } ] } }","s":"4.3 配置示例","u":"/docs/settings/dependencyinjectionsettings","h":"#43-配置示例","p":2996},{"i":3005,"t":"配置智能提示和校验 如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用】 只需要在 .json 文件头部添加下列配置即可: { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\" }","s":"6. 友好异常配置","u":"/docs/settings/friendlyexceptionsettings","h":"","p":3004},{"i":3007,"t":"友好异常配置指的是 Furion 框架友好异常配置选项。","s":"6.1 关于配置","u":"/docs/settings/friendlyexceptionsettings","h":"#61-关于配置","p":3004},{"i":3009,"t":"FriendlyExceptionSettings:配置根节点 HideErrorCode:隐藏错误码,bool 类型,默认 false DefaultErrorCode:默认错误码,string 类型 DefaultErrorMessage:默认错误消息,string 类型 ThrowBah:是否将 Oops.Oh 默认抛出为业务异常,bool 类型,默认 false,设置 true 之后 Oops.Oh 默认进入 OnValidateFailed 处理,而不是 OnException LogError:是否输出异常日志,bool 类型,默认 true","s":"6.2 配置信息","u":"/docs/settings/friendlyexceptionsettings","h":"#62-配置信息","p":3004},{"i":3011,"t":"{ \"FriendlyExceptionSettings\": { \"DefaultErrorMessage\": \"系统异常,请联系管理员\" } }","s":"6.3 配置示例","u":"/docs/settings/friendlyexceptionsettings","h":"#63-配置示例","p":3004},{"i":3013,"t":"Furion 框架还为友好异常消息提供外部配置","s":"6.4 异常消息配置","u":"/docs/settings/friendlyexceptionsettings","h":"#64-异常消息配置","p":3004},{"i":3015,"t":"ErrorCodeMessageSettings:配置根节点 Definitions:配置异常错误码消息类型,[错误状态码,错误消息][] 类型,如:[\"5000\", \"{0} 不能小于 {1}\"]","s":"6.4.1 配置信息","u":"/docs/settings/friendlyexceptionsettings","h":"#641-配置信息","p":3004},{"i":3017,"t":"{ \"ErrorCodeMessageSettings\": { \"Definitions\": [ [\"5000\", \"{0} 不能小于 {1}\"], [\"5001\", \"我叫 {0} 名字\", \"百小僧\"], [\"5002\", \"Oops! 出错了\"] ] } }","s":"6.4.2 配置示例","u":"/docs/settings/friendlyexceptionsettings","h":"#642-配置示例","p":3004},{"i":3019,"t":"配置智能提示和校验 如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用】 只需要在 .json 文件头部添加下列配置即可: { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\" }","s":"5. 动态API配置","u":"/docs/settings/dynamicapicontrollersettings","h":"","p":3018},{"i":3021,"t":"动态 API 配置指的是 Furion 框架动态 API 配置选项。","s":"5.1 关于配置","u":"/docs/settings/dynamicapicontrollersettings","h":"#51-关于配置","p":3018},{"i":3023,"t":"DynamicApiControllerSettings:配置根节点 DefaultRoutePrefix:默认路由前缀,string,默认 api DefaultHttpMethod:默认请求谓词,string,默认:POST DefaultModule:默认模块名称(区域),可用作接口版本,string,默认:v1 LowercaseRoute:小写路由格式,bool,默认:true AsLowerCamelCase:启用小驼峰命名(首字母小写),默认 false KeepVerb:是否保留动作谓词,bool,默认:false KeepName:是否保留默认名称,bool,默认:fasle CamelCaseSeparator:骆驼(驼峰)命名分隔符,string,默认:- VersionSeparator:版本分隔符,string,默认:@ ModelToQuery:GET/HEAD 请求将 类类型参数转查询参数,bool,默认 false SupportedMvcController:是否支持 Mvc Controller 动态配置,bool,默认 false UrlParameterization:路由参数采用 [FromQuery] 化,默认 false([FromRoute] 方式) DefaultArea:配置默认区域,默认 null ForceWithRoutePrefix:配置是否强制添加 DefaultRoutePrefix,当控制器自定义了 [Route] 有效,仅限 v3.4.1+版本有效 AbandonControllerAffixes:默认去除控制器名称前后缀列表名,string[],默认: AppServices AppService ApiController Controller Services Service AbandonActionAffixes:默认去除动作方法名称前后缀列表名,string[],默认: Async VerbToHttpMethods:复写默认方法名转 [HttpMethod] 规则,string[][] 二维数组类型,内置匹配规则为: [\"post\"] = \"POST\", [\"add\"] = \"POST\", [\"create\"] = \"POST\", [\"insert\"] = \"POST\", [\"submit\"] = \"POST\", [\"get\"] = \"GET\", [\"find\"] = \"GET\", [\"fetch\"] = \"GET\", [\"query\"] = \"GET\", [\"put\"] = \"PUT\", [\"update\"] = \"PUT\", [\"delete\"] = \"DELETE\", [\"remove\"] = \"DELETE\", [\"clear\"] = \"DELETE\", [\"patch\"] = \"PATCH\" 复写示例 \"DynamicApiControllerSettings\": { \"VerbToHttpMethods\": [ [ \"getall\", \"HEAD\" ], // => getall 会被复写为 `[HttpHead]` [ \"other\", \"PUT\" ] // => 新增一条新规则,比如,一 `[other]` 开头会转换为 `[HttpPut]` 请求 ] }","s":"5.2 配置信息","u":"/docs/settings/dynamicapicontrollersettings","h":"#52-配置信息","p":3018},{"i":3025,"t":"{ \"DynamicApiControllerSettings\": { \"SupportedMvcController\": true } }","s":"5.3 配置示例","u":"/docs/settings/dynamicapicontrollersettings","h":"#53-配置示例","p":3018},{"i":3027,"t":"配置智能提示和校验 如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用】 只需要在 .json 文件头部添加下列配置即可: { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\" }","s":"8. 多语言配置","u":"/docs/settings/localizationsettings","h":"","p":3026},{"i":3029,"t":"多语言配置指的是 Furion 框架全球化和本地化选项。","s":"8.1 关于配置","u":"/docs/settings/localizationsettings","h":"#81-关于配置","p":3026},{"i":3031,"t":"LocalizationSettings 多语言配置根节点 ResourcesPath:资源目录,string 类型,默认 Resources SupportedCultures:支持的语言区域码类别,string[] 类型 DefaultCulture:默认语言区域码,如果为空,则取 SupportedCultures 第一项 LanguageFilePrefix:配置资源文件前缀,string 类型,默认 Lang AssemblyName:配置资源文件存放程序集名,string 类型,默认 启动层 名称","s":"8.2 配置信息","u":"/docs/settings/localizationsettings","h":"#82-配置信息","p":3026},{"i":3033,"t":"{ \"LocalizationSettings\": { \"SupportedCultures\": [\"zh-CN\", \"en-US\"], // 配置支持的语言列表 \"DefaultCulture\": \"zh-CN\" // 配置默认语言,如果不配置,取 SupportedCultures 的第一项 } }","s":"8.3 配置示例","u":"/docs/settings/localizationsettings","h":"#83-配置示例","p":3026},{"i":3035,"t":"配置智能提示和校验 如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用】 只需要在 .json 文件头部添加下列配置即可: { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\" }","s":"9. JWT 配置","u":"/docs/settings/jwtsettings","h":"","p":3034},{"i":3037,"t":"JWT 配置指的是生成 JWT token 配置。","s":"9.1 关于配置","u":"/docs/settings/jwtsettings","h":"#91-关于配置","p":3034},{"i":3039,"t":"JWTSettings:根节点 ValidateIssuerSigningKey:是否验证密钥,bool 类型,默认 true IssuerSigningKey:密钥,string 类型,必须是复杂密钥,长度大于 16 ValidateIssuer:是否验证签发方,bool 类型,默认 true ValidIssuer:签发方,string 类型 ValidateAudience:是否验证签收方,bool 类型,默认 true ValidAudience:签收方,string 类型 ValidateLifetim:是否验证过期时间,bool 类型,默认 true,建议 true ExpiredTime:过期时间,long 类型,单位分钟,默认 20 分钟 ClockSkew:过期时间容错值,long 类型,单位秒,默认 5 秒 Algorithm:加密算法,string 类型,默认 HS256,可选算法有: HS256 HS384 HS512 PS256 PS384 PS512 RS256 RS384 RS512 ES256 ES256K ES384 ES512 EdDSA","s":"9.2 配置信息","u":"/docs/settings/jwtsettings","h":"#92-配置信息","p":3034},{"i":3041,"t":"{ \"JWTSettings\": { \"ValidateIssuerSigningKey\": true, // 是否验证密钥,bool 类型,默认true \"IssuerSigningKey\": \"你的密钥\", // 密钥,string 类型,必须是复杂密钥,长度大于16 \"ValidateIssuer\": true, // 是否验证签发方,bool 类型,默认true \"ValidIssuer\": \"签发方\", // 签发方,string 类型 \"ValidateAudience\": true, // 是否验证签收方,bool 类型,默认true \"ValidAudience\": \"签收方\", // 签收方,string 类型 \"ValidateLifetime\": true, // 是否验证过期时间,bool 类型,默认true,建议true \"ExpiredTime\": 20, // 过期时间,long 类型,单位分钟,默认20分钟 \"ClockSkew\": 5, // 过期时间容错值,long 类型,单位秒,默认 5秒 \"Algorithm\": \"HS256\" // 加密算法,string 类型,默认 HS256 } }","s":"9.3 配置示例","u":"/docs/settings/jwtsettings","h":"#93-配置示例","p":3034},{"i":3043,"t":"配置智能提示和校验 如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用】 只需要在 .json 文件头部添加下列配置即可: { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\" }","s":"10. 规范化结果配置","u":"/docs/settings/unifyresultsettings","h":"","p":3042},{"i":3045,"t":"规范化配置指的是配置响应结果,响应状态码等配置","s":"10.1 关于配置","u":"/docs/settings/unifyresultsettings","h":"#101-关于配置","p":3042},{"i":3047,"t":"UnifyResultSettings 规范化配置根节点 Return200StatusCodes:配置返回 200 状态码的请求,int[] 类型,只支持 400+(404除外) 状态码篡改 AdaptStatusCodes:配置篡改状态码规则,int[][] 类型,只支持 400+(404除外) 状态码篡改 SupportMvcController:是否支持 MVC 控制台规范化处理,bool 类型,默认 false","s":"10.2 配置信息","u":"/docs/settings/unifyresultsettings","h":"#102-配置信息","p":3042},{"i":3049,"t":"{ \"UnifyResultSettings\": { \"Return200StatusCodes\": [401, 403], \"AdaptStatusCodes\": [ [401, 200], [403, 401] ], \"SupportMvcController\": true } }","s":"10.3 配置示例","u":"/docs/settings/unifyresultsettings","h":"#103-配置示例","p":3042},{"i":3051,"t":"配置智能提示和校验 如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用】 只需要在 .json 文件头部添加下列配置即可: { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\" }","s":"3. 验证消息配置","u":"/docs/settings/validationTypemessagesettings","h":"","p":3050},{"i":3053,"t":"验证消息配置指的是 Furion 框架数据校验中验证类型默认消息配置选项。","s":"3.1 关于配置","u":"/docs/settings/validationTypemessagesettings","h":"#31-关于配置","p":3050},{"i":3055,"t":"ValidationTypeMessageSettings:配置根节点 Definitions:配置验证类型对应的消息类型,[类型名称,类型消息][] 类型,如:[\"Required\", \"值不能为空或Null\"]","s":"3.2 配置信息","u":"/docs/settings/validationTypemessagesettings","h":"#32-配置信息","p":3050},{"i":3057,"t":"{ \"ValidationTypeMessageSettings\": { \"Definitions\": [ [\"Required\", \"值不能为空或Null\"], [\"Numeric\", \"必须是数值类型\"], [\"StrongPassword\", \"密码太简单了!!!\"] ] } }","s":"3.3 配置示例","u":"/docs/settings/validationTypemessagesettings","h":"#33-配置示例","p":3050},{"i":3059,"t":"配置智能提示和校验 如需编写配置的时候提供智能提示和校验,可查看 【2.7 JSON Schema 使用】 只需要在 .json 文件头部添加下列配置即可: { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\" }","s":"7. 规范化文档配置","u":"/docs/settings/specificationdocumentsettings","h":"","p":3058},{"i":3061,"t":"规范化文档配置指的是 Furion 框架 Swagger 文档配置选项。","s":"7.1 关于配置","u":"/docs/settings/specificationdocumentsettings","h":"#71-关于配置","p":3058},{"i":3063,"t":"SpecificationDocumentSettings:配置根节点 DocumentTitle:文档标题,string,默认 Specification Api Document DefaultGroupName:默认分组名,string,默认 Default EnableAuthorized:是否启用权限控制,bool,默认 true FormatAsV2:采用 Swagger 2.0 版本,bool,默认 false 已弃用 RoutePrefix:规范化文档地址,string,默认 api,如果希望在首页,改为空字符串即可。 DocExpansionState:文档显示方式,DocExpansion,默认 List,取值: List:列表式(展开子类),默认值 Full:完全展开 None:列表式(不展开子类) XmlComments:程序集注释描述文件名(可带 .xml,string,默认 Furion.Application, Furion.Web.Entry, Furion.Web.Core GroupOpenApiInfos:分组信息配置,SpecificationOpenApiInfo[],默认 { 'Group': 'Default'} SecurityDefinitions:安全策略定义配置,SpecificationOpenApiSecurityScheme[],默认 [] Servers:配置 Server 下拉列表,OpenApiServer[] 类型,默认 [],如:{Servers:[ { Url:\"地址\", Description:\"描述\"} ]} HideServers:是否隐藏 Server 下拉列表,bool 类型,默认 true RouteTemplate:配置文档 swagger.json 路由模板,默认模板:swagger/{documentName}/swagger.json, {documentName} 代表分组名,必须保留原样 PackagesGroups:配置模块化内置分组名称,string[] 类型,默认 [] EnableEnumSchemaFilter:启用枚举 Schema 筛选器,bool 类型,默认 true EnableTagsOrderDocumentFilter:启用标签排序筛选器,bool 类型,默认 true ServerDir:配置 IIS 添加 Application 部署名,string 类型,默认空,仅在 Furion v3.2.0+` 有效 LoginInfo:配置 Swagger 是否需要登录才能访问,SpecificationLoginInfo 类型,默认 null,仅在 Furion v3.3.3+` 有效 Enabled:是否启用登录授权,默认 false CheckUrl:检查登录状态的 Url 地址,该地址必须是 POST 请求 SubmitUrl:提交登录的 Url 地址,该地址必须是 POST 请求且只有一个 SpecificationAuth 类型参数,成功登录返回 200,否则返回 401,支持相对地址,以 / 开头 EnableAllGroups:启用 Swagger 总分组功能,自动将所有分组的接口合并到 All Groups 中,bool 类型,默认 false,仅在 Furion v3.3.4+` 有效 另外 SpecificationOpenApiInfo 内置配置如下: Group:分组唯一标识,string 类型,必填 Order:分组排序,int 类型,数字越大排前面,默认 0 Visible:配置分组是否可见,bool 类型,默认 true Title:配置分组标题,string 类型 Description:配置分组描述,string 类型 Version:配置分组版本,默认 1.0 TermsOfService:配置相关链接地址,Uri 类型 Contact:配置联系方式,OpenApiContact 类型 License:配置协议,OpenApiLicense 类型","s":"7.2 配置信息","u":"/docs/settings/specificationdocumentsettings","h":"#72-配置信息","p":3058},{"i":3065,"t":"{ \"SpecificationDocumentSettings\": { \"GroupOpenApiInfos\": [ { \"Group\": \"Group1\", \"Title\": \"分组标题\", \"Description\": \"这里是分组描述\", \"Version\": \"版本号\", \"TermsOfService\": \"https://furion.icu\", \"Contact\": { \"Name\": \"百小僧\", \"Url\": \"https://gitee.com/monksoul\", \"Email\": \"monksoul@outlook.com\" }, \"License\": { \"Name\": \"MIT\", \"Url\": \"https://gitee.com/dotnetchina/Furion/blob/alpha/LICENSE\" } } ] } }","s":"7.3 配置示例","u":"/docs/settings/specificationdocumentsettings","h":"#73-配置示例","p":3058},{"i":3067,"t":"版本说明 以下内容仅限 Furion 3.5.2 + 版本使用。","s":"34.5. 单文件发布","u":"/docs/singlefile","h":"","p":3066},{"i":3069,"t":"自 .NET Core 3 起,微软就提供了单文件发布的技术支持,但实际上并不是 .NET 所有 CLR 都支持单文件发布,如 Microsoft.Extensions.DependencyModel 包本身不支持单文件发布,原因是内部使用了 Assembley.CodeBase。 好巧不巧,Furion 中招了,在过去两年中,Furion 依赖该包的 DependencyContext.Default 特性进行程序集扫描,所以单文件发布也就成了 Furion 不愿提起的痛!!! 终于,在 Furion v3.5.2+ 版本想出了新的解决方案,自此彻底解决了单文件发布的问题。 .NET 官方单文件发布说明 https://docs.microsoft.com/zh-cn/dotnet/core/deploying/single-file/overview","s":"34.5.1 历史背景","u":"/docs/singlefile","h":"#3451-历史背景","p":3066},{"i":3071,"t":"在 Furion v3.5.2+ 版本之后,新增了 ISingleFilePublish 接口。 编辑启动层 .csproj 文件,添加下列代码到 节点中 true 关于 ReadyToRun 如果发布时未打勾 ReadyToRun 选项,则无需配置上述代码。 在 Web 启动层 创建类型并实现该接口,如: using System.Reflection; namespace YourProject.Web.Entry; /// /// 解决单文件发布问题 /// public class SingleFilePublish : ISingleFilePublish { /// /// 解决单文件不能扫描的程序集 /// /// 可同时配置 /// public Assembly[] IncludeAssemblies() { // 需要 Furion 框架扫描哪些程序集就写上去即可 return Array.Empty(); } /// /// 解决单文件不能扫描的程序集名称 /// /// 可同时配置 /// public string[] IncludeAssemblyNames() { // 需要 Furion 框架扫描哪些程序集就写上去即可 return new[] { \"YourProject.Application\", \"YourProject.Core\", \"YourProject.EntityFramework.Core\", \"YourProject.Web.Core\", \"Furion.Extras.ObjectMapper.Mapster\" // 解决 Mapster 单文件失效问题,v3.5.3+版本后无需配置 }; } } 配置说明 IncludeAssemblies 和 IncludeAssemblyNames 的区别是前者是开发者直接返回 Assembley 集合,后者是直接返回名称,Furion 会自动加载程序集,可同时配置,也可以配置其中一个。 如果只配置启用一个,则另外一个返回 Array.Empty() 或 Array.Empty() 即可。 如果发布后出现 Mapster 不能映射问题,可将 Furion.Extras.ObjectMapper.Mapster 添加到 IncludeAssemblyNames 集合中即可。v3.5.3+ 版本后无需配置。","s":"34.5.2 必要配置","u":"/docs/singlefile","h":"#3452-必要配置","p":3066},{"i":3073,"t":"小知识 如无需生成 .pdb 调试包可在生成中禁用即可。","s":"34.5.3 发布","u":"/docs/singlefile","h":"#3453-发布","p":3066},{"i":3075,"t":"默认单文件发布监听的是 https://localhost:5001,如果需要修改,可在 program.cs 中配置: var builder = WebApplication.CreateBuilder(args).Inject(); builder.WebHost.UseUrls(\"https://*:8089\"); var app = builder.Build(); app.Run(); 这样就可以通过 https://localhost:8089 访问。","s":"34.5.4 自定义启动端口","u":"/docs/singlefile","h":"#3454-自定义启动端口","p":3066},{"i":3078,"t":"正常情况下,将应用程序发布成单文件后,需点击 XXXXX.exe 进行启动,这时候程序自动打开终端(控制台),之后根据提示在浏览器上打开对应的地址即可。 但是这种方式有以下问题: 必须保证终端/控制台一直运行 终端/控制台有时候会出现假死的情况,导致应用程序无法访问 无法实时监听应用程序资源使用情况(如 CPU,内存,日志等) 无法映射端口启动 集群变得复杂","s":"34.5.5.1 运行弊端","u":"/docs/singlefile","h":"#34551-运行弊端","p":3066},{"i":3080,"t":"为了解决上述问题,推荐 NodeJS 一个非常强大的工具 pm2 https://pm2.keymetrics.io/,通过该工具可以解决上述的所有问题。 必要条件​ 系统必须安装 NodeJS 环境 https://nodejs.org/en/ 相信大部分人电脑都已经安装。 通过 npm 或 yarn 全局安装 pm2 工具 npm: npm install pm2@latest -g yarn: yarn global add pm2 启动应用程序 使用 pm2 非常简单就可以启动守护进程应用程序。 pm2 start --name pms PMS.Web.Entry.exe 指定端口 如需指定端口,可使用下列命令: pm2 start --name pms PMS.Web.Entry.exe -- --urls=https://localhost:8089 注意 -- 后面可以写完整的 dotnet 命令。 命令说明 pms.exe 为项目发布后的启动层名称,如果名称包含 空格,则使用双引号包裹,如 \"p ms.exe\"。 --name 配置应用程序在 pm2 中的唯一标识。 start 后面跟着是 .exe 文件,在 linux/macos 下无需指定后缀名。 启动成功后即可通过浏览器访问指定端口,通常是 http://localhost:5000 PS C:\\Users\\bqrjsoft\\Desktop\\pms> pm2 start --name pms PMS.Web.Entry.exe [PM2] Starting C:\\Users\\bqrjsoft\\Desktop\\pms\\PMS.Web.Entry.exe in fork_mode (1 instance) [PM2] Done. ┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐ │ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │ ├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤ │ 0 │ pms │ default │ N/A │ fork │ 41764 │ 0s │ 0 │ online │ 0% │ 85.0mb │ bqrjsoft │ disabled │ └─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘ PS C:\\Users\\bqrjsoft\\Desktop\\pms>","s":"34.5.5.2 pm2 守护进程部署","u":"/docs/singlefile","h":"#34552-pm2-守护进程部署","p":3066},{"i":3082,"t":"实时监听运行状态 pm2 monit 显示运行日志 pm2 logs 查看应用信息 pm2 info pms 注意,pms 为您配置的 --name 名称。 随机启动 pm2 startup pm2 save Windows 下随机启动 可查阅 pm2-windows-startup。 npm install pm2-windows-startup -g pm2-startup install pm2 save 其他操作 // 重启应用 pm2 restart app_name // 重载应用 pm2 reload app_name // 停止应用 pm2 stop app_name // 删除应用 pm2 delete app_name 更多 pm2 文档可查阅 https://pm2.keymetrics.io/docs/usage/quick-start/","s":"34.5.5.3 pm2 常见操作","u":"/docs/singlefile","h":"#34553-pm2-常见操作","p":3066},{"i":3084,"t":"与我们交流 给 Furion 提 Issue。","s":"34.5.6 反馈与建议","u":"/docs/singlefile","h":"#3456-反馈与建议","p":3066},{"i":3086,"t":"特此声明 本章 9.28.2 至 9.28.5 小节挪用博主:雨点的名字 的 分库分表 - 理论 博客内容。特此声明。","s":"9.28 分表分库","u":"/docs/split-db","h":"","p":3085},{"i":3088,"t":"数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作增删改查的开销也会越来越大。 另外,由于无法进行分布式部署,而一台服务器的资源(CPU、磁盘、内存、IO 等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。 这个时候就需要对数据库或数据表进行拆分。 数据切分可以分为:垂直切分 和 水平切分。","s":"9.28.1 应用场景","u":"/docs/split-db","h":"#9281-应用场景","p":3085},{"i":3090,"t":"垂直切分又可以分为: 垂直分库和垂直分表。","s":"9.28.2 垂直切分","u":"/docs/split-db","h":"#9282-垂直切分","p":3085},{"i":3092,"t":"根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行独立划分。与\"微服务治理\"的做法相似,每个微服务使用单独的一个数据库。 说明 一开始我们是单体服务,所以只有一个数据库,所有的表都在这个库里。 后来因为业务需求,单体服务变成微服务治理。所以将之前的一个商品库,拆分成多个数据库。每个微服务对于一个数据库。","s":"9.28.2.1 垂直分库","u":"/docs/split-db","h":"#92821-垂直分库","p":3085},{"i":3094,"t":"把一个表的多个字段分别拆成多个表,一般按字段的冷热拆分,热字段一个表,冷字段一个表。从而提升了数据库性能。 说明 一开始商品表中包含商品的所有字段,但是我们发现: 1.商品详情和商品属性字段较长。2.商品列表的时候我们是不需要显示商品详情和商品属性信息,只有在点进商品商品的时候才会展示商品详情信息。 所以可以考虑把商品详情和商品属性单独切分一张表,提高查询效率。","s":"9.28.2.2 垂直分表","u":"/docs/split-db","h":"#92822-垂直分表","p":3085},{"i":3096,"t":"优点 解决业务系统层面的耦合,业务清晰 与微服务的治理类似,也能对不同业务的数据进行分级管理、维护、监控、扩展等 高并发场景下,垂直切分一定程度的提升 IO、数据库连接数、单机硬件资源的瓶颈 缺点 分库后无法 Join,只能通过接口聚合方式解决,提升了开发的复杂度 分库后分布式事务处理复杂 依然存在单表数据量过大的问题(需要水平切分)","s":"9.28.2.3 优缺点","u":"/docs/split-db","h":"#92823-优缺点","p":3085},{"i":3098,"t":"当一个应用难以再细粒度的垂直切分或切分后数据量行数巨大,存在单库读写、存储性能瓶颈,这时候就需要进行水平切分了。 水平切分也可以分为:水平分库和水平分表。","s":"9.28.3 水平切分","u":"/docs/split-db","h":"#9283-水平切分","p":3085},{"i":3100,"t":"上面虽然已经把商品库分成 3 个库,但是随着业务的增加一个订单库也出现 QPS 过高,数据库响应速度来不及,一般 mysql 单机也就 1000 左右的 QPS,如果超过 1000 就要考虑分库。","s":"9.28.3.1 水平分库","u":"/docs/split-db","h":"#92831-水平分库","p":3085},{"i":3102,"t":"一般我们一张表的数据不要超过 1 千万,如果表数据超过 1 千万,并且还在不断增加数据,那就可以考虑分表。","s":"9.28.3.2 水平分表","u":"/docs/split-db","h":"#92832-水平分表","p":3085},{"i":3104,"t":"优点 不存在单库数据量过大、高并发的性能瓶颈,提升系统稳定性和负载能力 应用端改造较小,不需要拆分业务模块 缺点 跨分片的事务一致性难以保证 跨库的 Join 关联查询性能较差 数据多次扩展难度和维护量极大","s":"9.28.3.3 优缺点","u":"/docs/split-db","h":"#92833-优缺点","p":3085},{"i":3106,"t":"我们考虑去水平切分表,将一张表水平切分成多张表,这就涉及到数据分片的规则,比较常见的有:Hash 取模分表、数值 Range 分表、一致性 Hash 算法分表。","s":"9.28.4 数据分片规则","u":"/docs/split-db","h":"#9284-数据分片规则","p":3085},{"i":3108,"t":"一般采用 Hash 取模的切分方式,例如:假设按 goods_id 分 4 张表。(goods_id%4 取整确定表) 优缺点 优点 数据分片相对比较均匀,不容易出现热点和并发访问的瓶颈。 缺点 后期分片集群扩容时,需要迁移旧的数据很难。 容易面临跨分片查询的复杂问题。比如上例中,如果频繁用到的查询条件中不带 goods_id 时,将会导致无法定位数据库,从而需要同时向 4 个库发起查询, 再在内存中合并数据,取最小集返回给应用,分库反而成为拖累。","s":"9.28.4.1 Hash 取模分表","u":"/docs/split-db","h":"#92841-hash-取模分表","p":3085},{"i":3110,"t":"按照时间区间或 ID 区间来切分。例如:将 goods_id 为 1-1000 的记录分到第一个表,1000-2000 的分到第二个表,以此类推。 优缺点 优点 单表大小可控 天然便于水平扩展,后期如果想对整个分片集群扩容时,只需要添加节点即可,无需对其他分片的数据进行迁移 使用分片字段进行范围查找时,连续分片可快速定位分片进行快速查询,有效避免跨分片查询的问题。 缺点 热点数据成为性能瓶颈。 例如按时间字段分片,有些分片存储最近时间段内的数据,可能会被频繁的读写,而有些分片存储的历史数据,则很少被查询","s":"9.28.4.2 数值 Range 分表","u":"/docs/split-db","h":"#92842-数值-range-分表","p":3085},{"i":3112,"t":"一致性 Hash 算法能很好的解决因为 Hash 取模而产生的分片集群扩容时,需要迁移旧的数据的难题。具体原理可参考 https://www.cnblogs.com/duhuo/p/4996105.html","s":"9.28.4.3 一致性 Hash 算法","u":"/docs/split-db","h":"#92843-一致性-hash-算法","p":3085},{"i":3114,"t":"任何事情都有两面性,分库分表也不例外,如果采用分库分表,会引入新的的问题:","s":"9.28.5 分库分表带来的问题","u":"/docs/split-db","h":"#9285-分库分表带来的问题","p":3085},{"i":3116,"t":"使用分布式事务中间件解决,具体是通过最终一致性还是强一致性分布式事务,看业务需求,这里就不多说。","s":"9.28.5.1 分布式事务问题","u":"/docs/split-db","h":"#92851-分布式事务问题","p":3085},{"i":3118,"t":"切分之前,我们可以通过 Join 来完成。而切分之后,数据可能分布在不同的节点上,此时 Join 带来的问题就比较麻烦了,考虑到性能,尽量避免使用 Join 查询。 解决这个问题的一些方法: 全局表 全局表,也可看做是 \"数据字典表\",就是系统中所有模块都可能依赖的一些表,为了避免跨库 Join 查询,可以将 这类表在每个数据库中都保存一份。这些数据通常很少会进行修改,所以也不担心一致性的问题。 字段冗余 利用空间换时间,为了性能而避免 join 查询。例:订单表保存 userId 时候,也将 userName 冗余保存一份,这样查询订单详情时就不需要再去查询\"买家 user 表\"了。 数据组装 在系统层面,分两次查询。第一次查询的结果集中找出关联数据 id,然后根据 id 发起第二次请求得到关联数据。最后将获得到的数据进行字段拼装。","s":"9.28.5.2 跨节点关联查询 Join 问题","u":"/docs/split-db","h":"#92852-跨节点关联查询-join-问题","p":3085},{"i":3120,"t":"跨节点多库进行查询时,会出现 Limit 分页、Order by 排序等问题。分页需要按照指定字段进行排序,当排序字段就是分片字段时,通过分片规则就比较容易定位到指定的分片; 当排序字段非分片字段时,就变得比较复杂了。需要先在不同的分片节点中将数据进行排序并返回,然后将不同分片返回的结果集进行汇总和再次排序,最终返回给用户。","s":"9.28.5.3 跨节点分页、排序、函数问题","u":"/docs/split-db","h":"#92853-跨节点分页排序函数问题","p":3085},{"i":3122,"t":"如果都用主键自增肯定不合理,如果用 UUID 那么无法做到根据主键排序,所以我们可以考虑通过雪花 ID 来作为数据库的主键,","s":"9.28.5.4 全局主键避重问题","u":"/docs/split-db","h":"#92854-全局主键避重问题","p":3085},{"i":3124,"t":"采用双写的方式,修改代码,所有涉及到分库分表的表的增、删、改的代码,都要对新库进行增删改。同时,再有一个数据抽取服务,不断地从老库抽数据,往新库写, 边写边按时间比较数据是不是最新的。","s":"9.28.5.5 数据迁移问题","u":"/docs/split-db","h":"#92855-数据迁移问题","p":3085},{"i":3126,"t":"特别说明 由于分表分库不仅仅需要内置代码的支持,同时还需要集成数据库中间件,这里推荐 MyCat 中间件。MyCat 官方网站 Furion 框架中提供了轻量级的 分表分库 支持: 动态切换数据库 // 直接改变数据库 repository.ChangeDatabase(\"数据库连接字符串\"); // 通过数据库上下文定位器切换 repository.Change(); 如需跨库查询,需用到数据库技术,如 SqlServer 链接服务器或同义词。 动态切换数据库表 第一步、配置数据库上下文特性[AppDbContext( Mode=DbContextMode.Dynamic)] 第二步、需要动态修改表名的实体继承 IEntityMutableTable 接口,并实现 GetTableName() 返回表名方法 最后通过 BuildChange 切换即可。 var (rep, scoped) = repository.BuildChange(); 调用 BuildChange 方法之后会自动调用 GetTableName() 方法。 了解更多 想了解更多 DynamicModelCacheKeyFactory 知识可查阅 EF Core - 多个模型之间交替 章节。","s":"9.28.6 如何实现","u":"/docs/split-db","h":"#9286-如何实现","p":3085},{"i":3128,"t":"与我们交流 给 Furion 提 Issue。","s":"9.28.7 反馈与建议","u":"/docs/split-db","h":"#9287-反馈与建议","p":3085},{"i":3131,"t":"源码仓库中的 samples 示例采用多层分层设计,主要设计是 自动抽象工厂 和 DDD 领域驱动设计 相结合。 Furion 示例项目结构如下: Furion:框架核心层 Furion.Application:业务应用层(业务代码主要编写层) Furion.Core:核心层(实体,仓储,其他核心代码) Furion.Database.Migrations:EFCore 架构迁移文件层 Furion.EntityFramework.Core:EF Core 配置层 Furion.Web.Core:Web 核心层(存放 Web 公共代码,如 过滤器、中间件、Web Helpers 等) Furion.Web.Entry:Web 入口层/启动层 示例地址:https://gitee.com/dotnetchina/Furion/tree/v4/samples","s":"1.3.1 示例架构","u":"/docs/source","h":"#131-示例架构","p":3129},{"i":3133,"t":"与我们交流 给 Furion 提 Issue。","s":"1.3.2 反馈与建议","u":"/docs/source","h":"#132-反馈与建议","p":3129},{"i":3136,"t":"即时通讯(Instant messaging,简称 IM)通常是指互联网上用以进行实时通讯的系统,允许两人或多人使用网络即时的传递文字信息、文档、语音与视频交流。 即时通讯不同于 e-mail 在于它的交谈是实时的。大部分的即时通讯服务提供了状态信息的特性 ── 显示联络人名单,联络人是否在线上与能否与联络人交谈。 在互联网上目前使用较广的即时通讯服务包括 Windows Live Messenger、AOL Instant Messenger、skype、Yahoo! Messenger、NET Messenger Service、Jabber、ICQ 与 QQ 等。","s":"24.1 什么是即时通讯","u":"/docs/signalr","h":"#241-什么是即时通讯","p":3134},{"i":3138,"t":"即时通讯应用场景非常广泛,需要实时交互消息的都需要。如: 聊天工具:QQ、WeChat、在线客服等 手游网游:王者荣耀、魔兽等 网络直播:腾讯课堂、抖音直播等 订单推送:美团、餐饮下单系统等 协同办公:公司内部文件分享、工作安排、在线会议等。 以上只是列举了比较常用的应用场景,但即时通讯的作用远不止于此。 文档紧急编写中,可以先看官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?view=aspnetcore-5.0","s":"24.2 即时通讯应用场景","u":"/docs/signalr","h":"#242-即时通讯应用场景","p":3134},{"i":3140,"t":"即时通讯技术实现是复杂且过于底层化,所以微软为了简化即时通讯应用程序,开发出了一个强大且简易使用的通信库:SignalR,通过该库我们可以轻松实现类似 QQ、微信这类 IM 聊天工具,也能快速实现消息推送、订单推送这样的系统。","s":"24.3 关于 SignalR","u":"/docs/signalr","h":"#243-关于-signalr","p":3134},{"i":3142,"t":"ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能。 实时 web 功能使服务器端代码可以立即将内容推送到客户端。 适用于 SignalR : 需要从服务器进行高频率更新的应用。 示例包括游戏、社交网络、投票、拍卖、地图和 GPS 应用。 仪表板和监视应用。 示例包括公司仪表板、即时销售更新或旅行警报。 协作应用。 协作应用的示例包括白板应用和团队会议软件。 需要通知的应用。 社交网络、电子邮件、聊天、游戏、旅行警报和很多其他应用都需使用通知。 目前 SignalR 已经内置在 .NET 5 SDK 中。同时 SignalR 支持 Web、App、Console、Desktop 等多个应用平台。","s":"24.3.1 微软官方介绍","u":"/docs/signalr","h":"#2431-微软官方介绍","p":3134},{"i":3144,"t":"在 Furion 框架中,任何服务功能都需要先注册后再使用,SignalR 也不例外。只需要在 Startup.cs 中添加注册即可: using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Furion.Web.Core { public sealed class Startup : AppStartup { public void ConfigureServices(IServiceCollection services) { // 其他代码... // 添加即时通讯 services.AddSignalR(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他代码... app.UseEndpoints(endpoints => { // 注册集线器 endpoints.MapHubs(); endpoints.MapControllerRoute( name: \"default\", pattern: \"{controller=Home}/{action=Index}/{id?}\"); }); } } }","s":"24.4 注册 SignalR 服务","u":"/docs/signalr","h":"#244-注册-signalr-服务","p":3134},{"i":3146,"t":"SignalR 包含两种用于在客户端和服务器之间进行通信的模型:持久性连接和 集线器 中心。","s":"24.5 SignalR 长连接和集线器","u":"/docs/signalr","h":"#245-signalr-长连接和集线器","p":3134},{"i":3148,"t":"连接表示用于发送单接收方、分组或广播消息的简单终结点。 持久性连接 (在 .NET 代码中由 PersistentConnection 类表示,在 ASP.NET Core SignalR 中 ,PersistentConnection 类已被删除。) 使开发人员能够直接访问 SignalR 公开的低级别通信协议。 使用基于连接的 Api (如 Windows Communication Foundation)的开发人员将对使用连接通信模型非常熟悉。","s":"24.5.1 持久性连接","u":"/docs/signalr","h":"#2451-持久性连接","p":3134},{"i":3150,"t":"集线器是一种基于连接 API 构建的更高级别管道,它允许客户端和服务器直接调用方法。 SignalR 就像魔术一样处理跨机器边界的调度,使客户端能够像本地方法一样轻松地调用服务器上的方法,反之亦然。 如果开发人员已使用远程调用 (如 .NET 远程处理),则将对使用中心通信模型非常熟悉。 使用集线器还可以将强类型参数传递给方法,从而启用模型绑定。 小知识 想了解更多关于 持久性连接 和 集线器中心 可查阅 SignalR 官方文档","s":"24.5.2 集线器","u":"/docs/signalr","h":"#2452-集线器","p":3134},{"i":3152,"t":"在本章节中主要推荐使用集线器通信模型方式。这里主要说明 Hub 定义,如果无法理解该通信模型的作用也没关系,接下来的例子会带大家慢慢熟悉并使用。","s":"24.6 集线器 Hub 定义","u":"/docs/signalr","h":"#246-集线器-hub-定义","p":3134},{"i":3154,"t":"定义集线器只需要继承 Hub 或 Hub 泛型基类即可,如: Hub 方式 using Furion.InstantMessaging; using Microsoft.AspNetCore.SignalR; namespace Furion.Core { /// /// 聊天集线器 /// public class ChatHub : Hub { // 定义一个方法供客户端调用 public Task SendMessage(string user, string message) { // 触发客户端定义监听的方法 return Clients.All.SendAsync(\"ReceiveMessage\", user, message); } } } Hub 类型方式 public interface IChatClient { Task ReceiveMessage(string user, string message); } public class StronglyTypedChatHub : Hub { // 定义一个方法供客户端调用 public async Task SendMessage(string user, string message) { // 触发客户端定义监听的方法 await Clients.All.ReceiveMessage(user, message); } } 通过使用 Hub 可以对客户端方法进行编译时检查。 这可以防止由于使用神奇字符串而导致的问题,因为 Hub 只能提供对在接口中定义的方法的访问。","s":"24.6.1 两种定义方式","u":"/docs/signalr","h":"#2461-两种定义方式","p":3134},{"i":3156,"t":"在 SignalR 库中要求每一个公开的集线器都需要配置客户端连接地址,所以,Furion 框架提供了更加 [MapHub] 配置,如: using Furion.InstantMessaging; using Microsoft.AspNetCore.SignalR; using System; using System.Threading.Tasks; namespace Furion.Core { /// /// 聊天集线器 /// [MapHub(\"/hubs/chathub\")] public class ChatHub : Hub { // ... } } SignalR 原生配置方式 在 Furion 中推荐使用 [MapHub] 方式配置集线器客户端连接地址,当然也可以使用 SignalR 提供的方式,如在 Startup.cs 配置: public sealed class Startup : AppStartup { // 其他代码 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他代码... app.UseEndpoints(endpoints => { // 注册集线器 endpoints.MapHub(\"/hubs/chathub\"); }); } }","s":"24.6.2 [MapHub] 配置连接地址","u":"/docs/signalr","h":"#2462-maphub-配置连接地址","p":3134},{"i":3158,"t":"有些时候,我们需要注册 Hub 时配置更多参数,比如权限、跨域等,这时只需要在 Hub 派生类中编写以下静态方法即可: using Furion.InstantMessaging; using Microsoft.AspNetCore.SignalR; using System; using System.Threading.Tasks; namespace Furion.Core { [MapHub(\"/hubs/chathub\")] public class ChatHub : Hub { // 其他代码 public static void HttpConnectionDispatcherOptionsSettings(HttpConnectionDispatcherOptions options) { // 配置 } public static void HubEndpointConventionBuilderSettings(HubEndpointConventionBuilder Builder) { // 配置 } } } 以上配置等价于 SignalR 在 Startup.cs 中的配置: app.UseEndpoints(endpoints => { var builder = endpoints.MapHub(\"/hubs/chathub\", options => { // 配置 }); });","s":"24.6.3 Hub 注册更多配置","u":"/docs/signalr","h":"#2463-hub-注册更多配置","p":3134},{"i":3160,"t":"SignalR 提供了几种方式进行获取 Hub 实例。","s":"24.7 获取 Hub 实例方式","u":"/docs/signalr","h":"#247-获取-hub-实例方式","p":3134},{"i":3162,"t":"IHubContext 默认注册为单例模式,可在任何地方直接获取实例。 public class HomeController : Controller { private readonly IHubContext _hubContext; public HomeController(IHubContext hubContext) { _hubContext = hubContext; } public async Task Index() { await _hubContext.Clients.All.SendAsync(\"Notify\", $\"Home page loaded at: {DateTime.Now}\"); return View(); } }","s":"24.7.1 IHubContext 注入方式","u":"/docs/signalr","h":"#2471-ihubcontext-注入方式","p":3134},{"i":3164,"t":"var hubContext = context.RequestServices .GetRequiredService>();","s":"24.7.2 HttpContext 解析方式","u":"/docs/signalr","h":"#2472-httpcontext-解析方式","p":3134},{"i":3166,"t":"public class Program { public static void Main(string[] args) { var host = CreateHostBuilder(args).Build(); var hubContext = host.Services.GetService(typeof(IHubContext)); host.Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); }); }","s":"24.7.3 IHost 中解析方式","u":"/docs/signalr","h":"#2473-ihost-中解析方式","p":3134},{"i":3168,"t":"默认情况下,IHubContext 非泛型实例返回的是 dynamic 动态类型对象,该类型对象无法获得编译期语法检查和 IDE 智能提示,所以我们可以传入一个和自定义 Hub 一样的方法签名接口,如: public class ChatController : Controller { public IHubContext _strongChatHubContext { get; } public ChatController(IHubContext chatHubContext) { _strongChatHubContext = chatHubContext; } public async Task SendMessage(string user, string message) { await _strongChatHubContext.Clients.All.ReceiveMessage(user, message); } }","s":"24.7.4 强类型 IHubContext 注入方式","u":"/docs/signalr","h":"#2474-强类型-ihubcontext-注入方式","p":3134},{"i":3170,"t":"正常情况下,我们获取的是 IHubContext<> 的实例,但在一些反射场景下,可以将 IHubContext<> 强制转换成 IHubContext 从而更易于操作,如: var myHubContext = context.RequestServices .GetRequiredService>(); var myOtherHubContext = context.RequestServices .GetRequiredService>(); await CommonHubContextMethod((IHubContext)myHubContext); await CommonHubContextMethod((IHubContext)myOtherHubContext);","s":"24.7.5 IHubContext 泛型转换","u":"/docs/signalr","h":"#2475-ihubcontext-泛型转换","p":3134},{"i":3173,"t":"Clients.All.客户端方法(参数);","s":"24.8.1 触发所有客户端代码","u":"/docs/signalr","h":"#2481-触发所有客户端代码","p":3134},{"i":3175,"t":"Clients.Caller.客户端方法(参数);","s":"24.8.2 触发调用者客户端","u":"/docs/signalr","h":"#2482-触发调用者客户端","p":3134},{"i":3177,"t":"Clients.Others.客户端方法(参数);","s":"24.8.3 触发除了调用者以外的客户端","u":"/docs/signalr","h":"#2483-触发除了调用者以外的客户端","p":3134},{"i":3179,"t":"Clients.User(\"用户\").客户端方法(参数);","s":"24.8.4 触发特定用户客户端","u":"/docs/signalr","h":"#2484-触发特定用户客户端","p":3134},{"i":3181,"t":"Clients.Users(\"用户\",\"用户2\",...).客户端方法(参数);","s":"24.8.5 触发多个用户客户端","u":"/docs/signalr","h":"#2485-触发多个用户客户端","p":3134},{"i":3183,"t":"Clients.Group(\"分组\").客户端方法(参数);","s":"24.8.6 触发分组内客户端","u":"/docs/signalr","h":"#2486-触发分组内客户端","p":3134},{"i":3185,"t":"Clients.Groups(\"分组\",\"分组2\",...).客户端方法(参数);","s":"24.8.7 触发多个分组客户端","u":"/docs/signalr","h":"#2487-触发多个分组客户端","p":3134},{"i":3187,"t":"Clients.GroupExcept(\"分组\").客户端方法(参数);","s":"24.8.8 触发分组外的客户端","u":"/docs/signalr","h":"#2488-触发分组外的客户端","p":3134},{"i":3189,"t":"默认情况下 SignalR 会为每一个链接创建 ConnectionId,但是这个 ConnectionId 并没有和我们系统的用户绑关联起来,所以需要采用自定义 ConnectionId,如: public class YourUserIdProvider : IUserIdProvider { public virtual string GetUserId(HubConnectionContext connection) { // 你如何获取 UserId,可以通过 connection.User 获取 JWT 授权的用户 } } 然后在 Startup.cs 中注册即可: builder.Services.AddSingleton(); 之后就可以通过自定义 UserId 发送消息: Clients.User(userId).客户端方法(参数); 查看更多文档 https://docs.microsoft.com/zh-cn/aspnet/core/signalr/authn-and-authz?view=aspnetcore-6.0#use-claims-to-customize-identity-handling","s":"24.9 自定义用户唯一标识","u":"/docs/signalr","h":"#249-自定义用户唯一标识","p":3134},{"i":3194,"t":"在 vue3.2+ 中使用​ 安装微软的 signalr typescript 客户端包,主要用于调用服务端方法,如( Hub 中的 SendMessage 方法): npm i @microsoft/signalr @types/node 示例代码 import { HubConnectionBuilder } from \"@microsoft/signalr\"; 参考文档","s":"24.11.2 Typescript 客户端","u":"/docs/signalr","h":"#24112-typescript-客户端","p":3134},{"i":3199,"t":"整理中...","s":"24.12.1 实现消息广播、推送","u":"/docs/signalr","h":"#24121-实现消息广播推送","p":3134},{"i":3201,"t":"整理中...","s":"24.12.2 实现聊天功能","u":"/docs/signalr","h":"#24122-实现聊天功能","p":3134},{"i":3203,"t":"整理中...","s":"24.12.3 实现 你画我来猜","u":"/docs/signalr","h":"#24123-实现-你画我来猜","p":3134},{"i":3205,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 SignalR 知识可查阅 SignalR 官方文档 或 ASP.NET Core SignalR 章节。","s":"24.13 反馈与建议","u":"/docs/signalr","h":"#2413-反馈与建议","p":3134},{"i":3207,"t":"关于拓展包 由于 SqlSugar 高速发展,新版本带来了诸多特性,而 Furion.Extras.DatabaseAccessor.SqlSugar 拓展包更新不及时导致不能第一时间体验新特性。 所以,和 SqlSugar 作者商量后,决定全面推荐使用 SqlSugar 原生拓展包即可。以下文档已更新,查看旧文档 温馨提醒 在 Furion 包中默认集成了 EFCore,如果不使用 EFCore,可安装纯净版 Furion.Pure 代替 Furion。","s":"10.1 SqlSugar 集成","u":"/docs/sqlsugar","h":"","p":3206},{"i":3209,"t":"SqlSugar 是 .NET/C# 平台非常优秀的 ORM 框架,目前 Nuget 总下载突破 1000K,Github 关注量也高达 3.7K,是目前当之无愧的国产优秀 ORM 框架之一。 SqlSugar 高性能,具有百万级插入、更新大数据分表等特色功能。","s":"10.1.1 SqlSugar ORM","u":"/docs/sqlsugar","h":"#1011-sqlsugar-orm","p":3206},{"i":3211,"t":"支持 SqlServer、MySql、PgSql、Oracle 百万级插入和更新 支持全自动分表 支持多库事务 支持 CodeFirst 支持联表查询、嵌套查询、导航查询、子查询和动态 JSON 查询等查询操作 支持配置查询 支持工具生成实体和代码生成实体 支持数据库 MySql、SqlServer、Sqlite、Oracle、postgresql、达梦、人大金仓、神通数据库","s":"10.1.2 功能介绍","u":"/docs/sqlsugar","h":"#1012-功能介绍","p":3206},{"i":3213,"t":"点击以下链接可以跳转到 SqlSugar 官网查看详细 API 入门 查询 插入 更新 删 除 安装 简单查询 增 改 删 入门 联表","s":"10.1.3 官网文档","u":"/docs/sqlsugar","h":"#1013-官网文档","p":3206},{"i":3215,"t":"创建一个拓展类: public static class SqlsugarSetup { public static void AddSqlsugarSetup(this IServiceCollection services, IConfiguration configuration, string dbName = \"db_master\") { //如果多个数数据库传 List var configConnection=new ConnectionConfig() { DbType = SqlSugar.DbType.MySql, ConnectionString = configuration.GetConnectionString(dbName), IsAutoCloseConnection = true, }; SqlSugarScope sqlSugar = new SqlSugarScope(configConnection, db => { //单例参数配置,所有上下文生效 db.Aop.OnLogExecuting = (sql, pars) => { //Console.WriteLine(sql);//输出sql }; }); services.AddSingleton(sqlSugar);//这边是SqlSugarScope用AddSingleton } } 使用注入 //1.构造函数注入 SqlSugar.ISqlSugarClient db; public WeatherForecastController(ISqlSugarClient db) { this.db = db; } //2.手动获取 App.GetService(); 在 Startup.cs 中注册: services.AddSqlsugarSetup(App.Configuration); 小知识 如果需要多库配置,可查看 https://www.donet5.com/home/Doc?typeId=2246","s":"10.1.4 Furion 集成","u":"/docs/sqlsugar","h":"#1014-furion-集成","p":3206},{"i":3218,"t":"Linq/Lambda: var query5 = db.Queryable() .LeftJoin ((o, cus) => o.CustomId == cus.Id) .LeftJoin ((o, cus, oritem ) => o.Id == oritem.OrderId) .Where(o => o.Id == 1) .Select((o, cus) => new ViewOrder { Id = o.Id, CustomName = cus.Name }) .ToList(); 生成 SQL: SELECT [o].[Id] AS [Id], [cus].[Name] AS [CustomName] FROM [Order] o Left JOIN [Custom] cus ON ([o].[CustomId] = [cus].[Id]) Left JOIN [OrderDetail] oritem ON ([o].[Id] = [oritem].[OrderId]) WHERE ([o].[Id] = @Id0)","s":"10.1.5.1 联表查询","u":"/docs/sqlsugar","h":"#10151-联表查询","p":3206},{"i":3220,"t":"int pageIndex = 1; int pageSize = 20; int totalCount=0; var page = db.Queryable().ToPageList(pageIndex, pageSize, ref totalCount);","s":"10.1.5.2 分页查询","u":"/docs/sqlsugar","h":"#10152-分页查询","p":3206},{"i":3222,"t":"Linq/Lambda: var names= new string [] { \"a\",\"b\"}; Expressionable exp = new Expressionable(); foreach (var item in names) { exp.Or(it => it.Name.Contains(item.ToString())); } var list= db.Queryable().Where(exp.ToExpression()).ToList(); 生成 SQL: SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] WHERE ( ([Name] like '%'+ CAST(@MethodConst0 AS NVARCHAR(MAX))+'%') OR ([Name] like '%'+ CAST(@MethodConst1 AS NVARCHAR(MAX))+'%') )","s":"10.1.5.3 动态表达式","u":"/docs/sqlsugar","h":"#10153-动态表达式","p":3206},{"i":3224,"t":"新建一个仓储类,如果想扩展方法写到仓储类中 public class Repository : SimpleClient where T : class, new() { public Repository(ISqlSugarClient context = null) : base(context)//默认值等于null不能少 { base.Context = App.GetService();//用手动获取方式支持切换仓储 } } 继承仓储类就可以使用仓储API了 //查询 var data1 = base.GetById(1);//根据id查询 var data4 = base.GetSingle(it => it.Id == 1);//查询单条记录,结果集不能超过1,不然会提示错误 var data = base.GetFirst(it => it.Id == 1);//查询第一条记录 var data2 = base.GetList();//查询所有 var data3 = base.GetList(it => it.Id == 1); //根据条件查询 var p = new PageModel() { PageIndex = 1, PageSize = 2 }; var data5 = base.GetPageList(it => it.Name == \"xx\", p); Console.Write(p.PageCount); var data6 = base.GetPageList(it => it.Name == \"xx\", p, it => it.Name, OrderByType.Asc); Console.Write(p.PageCount); List conModels = new List(); conModels.Add(new ConditionalModel(){FieldName=\"id\",ConditionalType=ConditionalType.Equal,FieldValue=\"1\"});//id=1 var data7 = base.GetPageList(conModels, p, it => it.Name, OrderByType.Asc); base.AsQueryable().Where(x => x.Id == 1).ToList(); //插入 base.Insert(insertObj); base.InsertRange(InsertObjs); var id = base.InsertReturnIdentity(insertObj); base.AsInsertable(insertObj).ExecuteCommand(); //删除 base.Delete(insertObj); base.DeleteById(1); base.DeleteByIds(new object [] { 1, 2 }); //数组带是 ids方法 ,封装传 object [] 类型 base.Delete(it => it.Id == 1); base.AsDeleteable().Where(it => it.Id == 1).ExecuteCommand(); //更新 base.Update(insertObj); base.UpdateRange(InsertObjs); base.Update(it => new Order() { Name = \"a\", }, it => it.Id == 1); base.AsUpdateable(insertObj).UpdateColumns(it=>new { it.Name }).ExecuteCommand(); //高级操作 base.AsSugarClient // 获取完整的db对象 base.AsTenant // 获取多库相关操作 //切换仓储 base.ChangeRepository>() //支持多租户和扩展方法,使用SqlSugarScope单例(或者SqlSugarClient Scope注入) base.Change()//只支持自带方法和单库","s":"10.1.5.4 仓储方法","u":"/docs/sqlsugar","h":"#10154-仓储方法","p":3206},{"i":3226,"t":"SqlSugarClient db = new SqlSugarClient(new List() { new ConnectionConfig(){ ConfigId=\"0\", DbType=DbType.SqlServer, ConnectionString=Config.ConnectionString, IsAutoCloseConnection=true }, new ConnectionConfig(){ ConfigId=\"1\", DbType=DbType.MySql, ConnectionString=Config.ConnectionString4 ,IsAutoCloseConnection=true} }); var mysqldb = db.GetConnection(\"1\"); // mysql db var sqlServerdb = db.GetConnection(\"0\"); // sqlserver db db.BeginTran(); mysqldb.Insertable(new Order() { CreateTime = DateTime.Now, CustomId = 1, Name = \"a\", Price = 1 }).ExecuteCommand(); mysqldb.Queryable().ToList(); sqlServerdb.Queryable().ToList(); db.CommitTran();","s":"10.1.5.5 多库事务","u":"/docs/sqlsugar","h":"#10155-多库事务","p":3206},{"i":3228,"t":"public static SqlSugarScope Db = new SqlSugarScope(new ConnectionConfig() { DbType = SqlSugar.DbType.SqlServer, ConnectionString = Config.ConnectionString, IsAutoCloseConnection = true }, db=> { db.Aop.OnLogExecuting = (s, p) => { Console.WriteLine(s); }; }); using (var tran = Db.UseTran()) { new Test2().Insert(XX); new Test1().Insert(XX); ..... tran.CommitTran(); }","s":"10.1.5.6 单例模式","u":"/docs/sqlsugar","h":"#10156-单例模式","p":3206},{"i":3230,"t":"db.QueryFilter.Add(new TableFilterItem(it => it.Name.Contains(\"a\"))); db.Queryable().ToList(); // SELECT [Id],[Name],[Price],[CreateTime],[CustomId] FROM [Order] WHERE ([Name] like '%'+@MethodConst0+'%') db.Queryable((i, o) => i.OrderId == o.Id) .Where(i => i.OrderId != 0) .Select(\"i.*\").ToList(); // SELECT i.* FROM [OrderDetail] i ,[Order] o WHERE ( [i].[OrderId] = [o].[Id] ) AND // ( [i].[OrderId] <> @OrderId0 ) AND ([o].[Name] like '%'+@MethodConst1+'%')","s":"10.1.5.7 全局过滤器","u":"/docs/sqlsugar","h":"#10157-全局过滤器","p":3206},{"i":3232,"t":"var x = Db.Storageable(list2).ToStorage(); x.AsInsertable.ExecuteCommand(); x.AsUpdateable.ExecuteCommand(); var x = Db.Storageable(list).SplitInsert(it => !it.Any()).ToStorage() x.AsInsertable.ExecuteCommand();","s":"10.1.5.8 添加或者更新","u":"/docs/sqlsugar","h":"#10158-添加或者更新","p":3206},{"i":3234,"t":"[SplitTable(SplitType.Year)] // Table by year (the table supports year, quarter, month, week and day) [SugarTable(\"SplitTestTable_{year}{month}{day}\")] public class SplitTestTable { [SugarColumn(IsPrimaryKey =true)] public long Id { get; set; } public string Name { get; set; } //When the sub-table field is inserted, which table will be inserted according to this field. //When it is updated and deleted, it can also be convenient to use this field to //find out the related table [SplitField] public DateTime CreateTime { get; set; } } var lis2t = db.Queryable() .SplitTable(DateTime.Now.Date.AddYears(-1), DateTime.Now) .ToPageList(1,2);","s":"10.1.5.9 自动分表","u":"/docs/sqlsugar","h":"#10159-自动分表","p":3206},{"i":3236,"t":"//Insert A million only takes a few seconds db.Fastest().BulkCopy(GetList()); //update A million only takes a few seconds db.Fastest().BulkUpdate(GetList());//A million only takes a few seconds完 db.Fastest().BulkUpdate(GetList(),new string[]{\"id\"},new string[]{\"name\",\"time\"})//no primary key //if exists update, else insert var x= db.Storageable(data).ToStorage(); x.BulkCopy(); x.BulkUpdate(); //set table name db.Fastest().AS(\"tableName\").BulkCopy(GetList()) //set page db.Fastest().PageSize(300000).BulkCopy(insertObjs);","s":"10.1.5.10 大数据插入,更新,插入或者更新","u":"/docs/sqlsugar","h":"#101510-大数据插入更新插入或者更新","p":3206},{"i":3238,"t":"可查阅 SqlSugar 官网。","s":"10.1.5.11 更多功能","u":"/docs/sqlsugar","h":"#101511-更多功能","p":3206},{"i":3240,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 SqlSugar 知识可查阅 SqlSugar 官网。","s":"10.1.6 反馈与建议","u":"/docs/sqlsugar","h":"#1016-反馈与建议","p":3206},{"i":3242,"t":"写于 2022 年 11 月 17 日 在过去两年,实现 Furion 从无到有,编写文档已逾三百万字,过程心酸开源人自知。 这一路日夜兼程,嘲讽批评常伴眼耳,即便辛苦无奈、想过放弃,但为了那微不足道的成就感依然努力着。 当然,也收获了不少... 越来越多拥趸者,越发精湛技术能力,更高层次思维模式,还有许多跨界跨行朋友。 在 《开源指北》中,我曾说道:“开源如同人的脸,好坏一面便知,缺点可能会受到嘲讽批评,优点也会收获赞扬尊重。别担心,他们正在塑造更好的你。” 所以,这一次重新起航,重塑 Furion 重塑自己。也许未来在某个 IT 圈但凡有人谈起 .NET 还能瞟到 Furion 的身影。","s":"1.8 路线图","u":"/docs/target","h":"","p":3241},{"i":3244,"t":"我们创建了一个详细的列表来轻松显示 Furion 重构版本的状态和演变。 图标 描述 ⚠️ 待定 ⏳ 进行中 ✅ 完成 💔 随时抛弃","s":"状态","u":"/docs/target","h":"#状态","p":3241},{"i":3246,"t":"计划于 2023 年 4 月 1 日之前完成以下内容重构。 [重构] 定时任务模块 ✅(2022 年 11 月 21 日) [重构] 动态 API 模块 ⏳ [重构] 数据验证模块 ⏳ [重构] 友好异常模块 ⏳ [重构] 依赖注入模块 ⏳","s":"计划","u":"/docs/target","h":"#计划","p":3241},{"i":3248,"t":"温馨提醒 在 Furion 包中默认集成了 EFCore,如果不使用 EFCore,可安装纯净版 Furion.Pure 代替 Furion,这样可以忽略本章节直接按照 SqlSugar 官方文档使用。","s":"10.1. SqlSugar 集成","u":"/docs/sqlsugar-old","h":"","p":3247},{"i":3250,"t":"SqlSugar 是 .NET/C# 平台非常优秀的 ORM 框架,目前 Nuget 总下载突破 700K,Github 关注量也高达 3.2K,是目前当之无愧的国产优秀 ORM 框架之一。 SqlSugar 官方地址:http://www.donet5.com/ SqlSugar 与 EF 优势: 性能比 EF 更快、语法上手更容易 SqlSugar 与 Dapper 优势: SqlSugar 功能更加丰富,性能丝毫不逊色于 Dapper,并且批量操作性能更好","s":"10.1.1 关于 SqlSugar","u":"/docs/sqlsugar-old","h":"#1011-关于-sqlsugar","p":3247},{"i":3252,"t":"在 Furion 框架中,已经推出 SqlSugar 拓展包 Furion.Extras.DatabaseAccessor.SqlSugar。","s":"10.1.2 如何集成","u":"/docs/sqlsugar-old","h":"#1012-如何集成","p":3247},{"i":3254,"t":"使用非常简单,只需要在 Startup.cs 中添加 services.AddSqlSugar(config) 即可。如: // =====配置单库===== services.AddSqlSugar(new ConnectionConfig { ConnectionString = \"Server=.xxxxx\",//连接符字串 DbType = DbType.SqlServer, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息 }); // =====配置多库===== List connectConfigList = new List(); //数据库1 connectConfigList.Add(new ConnectionConfig { ConnectionString = \"链接字符串1\", DbType = DbType.MySql, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute, ConfigId = \"0\", AopEvents = new AopEvents { //多库状态下每个库必须单独绑定打印事件,否则只会打印第一个库的sql日志 OnLogExecuting = (sql, pars) => { Console.WriteLine(SqlProfiler.ParameterFormat(sql, pars)); Console.WriteLine(); } } }); //数据库2 connectConfigList.Add(new ConnectionConfig { ConnectionString = \"链接字符串2\", DbType = DbType.MySql, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute, ConfigId = \"1\", AopEvents = new AopEvents { //多库状态下每个库必须单独绑定打印事件,否则只会打印第一个库的sql日志 OnLogExecuting = (sql, pars) => { Console.WriteLine(SqlProfiler.ParameterFormat(sql, pars)); Console.WriteLine(); } } }); services.AddSqlSugar(connectConfigList.ToArray()); 同时也可以添加更多配置,如: ps:多库状态下每个库必须单独绑定打印事件,否则只会打印第一个库的sql日志(参考上面的多库配置) services.AddSqlSugar(connectConfigList.ToArray(), db => { //处理日志事务 db.Aop.OnLogExecuting = (sql, pars) => { Console.WriteLine(sql); Console.WriteLine(string.Join(\",\", pars?.Select(it => it.ParameterName + \":\" + it.Value))); Console.WriteLine(); App.PrintToMiniProfiler(\"SqlSugar\", \"Info\", sql + \"\\r\\n\" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value))); }; }); 安装拓展包位置 在 Furion 框架中,推荐将拓展包 Furion.Extras.DatabaseAccessor.SqlSugar 安装到 Furion.Core 层中。","s":"10.1.2.1 注册 SqlSugar 服务","u":"/docs/sqlsugar-old","h":"#10121-注册-sqlsugar-服务","p":3247},{"i":3256,"t":"在使用之前,我们可以通过构造函数注入 ISqlSugarRepository 接口,如: private readonly ISqlSugarRepository repository; // 仓储对象:封装简单的CRUD private readonly SqlSugarClient db; // 核心对象:拥有完整的SqlSugar全部功能 public PersonService(ISqlSugarRepository sqlSugarRepository) { repository = sqlSugarRepository; db = repository.Context; // 推荐操作 }","s":"10.1.3 基本使用","u":"/docs/sqlsugar-old","h":"#1013-基本使用","p":3247},{"i":3258,"t":"// ================== SqlSugarClient ================ //查询功能 var data1 =db.Queryable().First(it=>it.Id==1); //db.GetById(1); var data2 = db.Queryable().ToList();// db.GetList(); // ================== 简单仓储 ================ //插入 db.Insert(insertObj); var id = db.InsertReturnIdentity(insertObj); db.AsInsertable(insertObj).ExecuteCommand(); //删除 db.Delete(insertObj); db.Delete(it => it.Id == 1); //更新 db.Update(insertObj); db.Update(it => new Order() { Name = \"a\", }, it => it.Id == 1); //异步方法用法 db.Insert(insertObj);//同步 db.InsertAsync(insertObj);//异步 //切换仓储 var orderRespository=db.GetSimpleClient(); orderRespository.Insert(Order);","s":"10.1.4 数据库操作示例","u":"/docs/sqlsugar-old","h":"#1014-数据库操作示例","p":3247},{"i":3261,"t":"//查询所有 var getAll = db.Queryable().ToList(); //查询前10 var top10= db.Queryable().Take(10).ToList(); //查询单条 var getFirst = db.Queryable().First(it=>it.Id==1); //with nolock var getAllNoLock = db.Queryable().With(SqlWith.NoLock).ToList(); //根据主键查询 var getByPrimaryKey = db.Queryable().InSingle(2); //查询总和 var sum = db.Queryable().Sum(it=>it.Id); //是否存在 var isAny = db.Queryable().Where(it=>it.Id==-1).Any(); //模糊查 var list2 = db.Queryable().Where(it =>it.Name.Contains(\"jack\")).ToList();","s":"10.1.5.1 基础查询","u":"/docs/sqlsugar-old","h":"#10151-基础查询","p":3247},{"i":3263,"t":"var list = db.Queryable((st, sc) => new JoinQueryInfos( JoinType.Left,st.SchoolId==sc.Id)) .Select((st,sc)=>new{Id=st.Id,Name=st.Name,SchoolName=sc.Name}).ToList(); 生成的Sql如下: SELECT [st].[ID] AS [id] , [st].[Name] AS [name] , [sc].[Name] AS [schoolName] FROM [STudent] st Left JOIN School sc ON ( [st].[SchoolId] =[sc].[Id])","s":"10.1.5.2 联表查询","u":"/docs/sqlsugar-old","h":"#10152-联表查询","p":3247},{"i":3265,"t":"int pageIndex = 1; int pageSize = 20; int totalCount=0; var page = db.Queryable().ToPageList(pageIndex, pageSize, ref totalCount); 更多查询用法 : http://www.donet5.com/Home/Doc?typeId=1185","s":"10.1.5.3 分页查询","u":"/docs/sqlsugar-old","h":"#10153-分页查询","p":3247},{"i":3267,"t":"//可以是 类 或者 List<类> db.Insertable(insertObj).ExecuteCommand(); //插入返回自增列 db.Insertable(insertObj).ExecuteReturnIdentity(); //可以是 Dictionary 或者 List var dc= new Dictionary(); dt.Add(\"name\", \"1\"); dt.Add(\"CreateTime\", null); db.Insertable(dc).AS(\"student\").ExecuteCommand(); //DataTable插入 Dictionary dc= db.Utilities.DataTableToDictionary(dataTable);//转成字典就可以按上面的字典更新了 db.Insertable(dc).AS(\"student\").ExecuteReturnIdentity(); //实体可以配置主键和自增列 public class Student { [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public int Id { get; set; } public int? SchoolId { get; set; } public string Name { get; set; } } 更多插入用法: http://www.donet5.com/Home/Doc?typeId=1193","s":"10.1.5.4 插入","u":"/docs/sqlsugar-old","h":"#10154-插入","p":3247},{"i":3269,"t":"实体配置参考插入,只需要配置主键即可 //根据主键更新单条 参数 Class var result= db.Updateable(updateObj).ExecuteCommand(); //不更新 Name 和TestId var result=db.Updateable(updateObj).IgnoreColumns(it => new { it.CreateTime,it.TestId }).ExecuteCommand() //只更新 Name 和 CreateTime var result=db.Updateable(updateObj).UpdateColumns(it => new { it.Name,it.CreateTime }).ExecuteCommand(); //根据表达式更新 var result71 = db.Updateable() .SetColumns(it => it.Name == \"a\") .SetColumnsIF(p!=null ,it => it.CreateTime == p.Value)//当p不等于null更新createtime列 .Where(it => it.Id == 11).ExecuteCommand(); 更多更新用法: http://www.donet5.com/Home/Doc?typeId=1191","s":"10.1.5.5 更新","u":"/docs/sqlsugar-old","h":"#10155-更新","p":3247},{"i":3271,"t":"实体配置参考插入,只需要配置主键即可 //根据实体删除 db.Deleteable().Where(new Student() { Id = 1 }).ExecuteCommand(); //根据主键删除 db.Deleteable().In(1).ExecuteCommand(); //根据表达式删除 db.Deleteable().Where(it => it.Id == 1).ExecuteCommand(); 更多删除用法: http://www.donet5.com/Home/Doc?typeId=1195","s":"10.1.5.6 删除","u":"/docs/sqlsugar-old","h":"#10156-删除","p":3247},{"i":3273,"t":"//sql分页 var list = db.SqlQueryable(\"select * from student\").ToPageList(1, 2,ref total); //原生Sql用法 var dt=db.Ado.GetDataTable(\"select * from table where id=@id and name=@name\",new List(){ new SugarParameter(\"@id\",1), new SugarParameter(\"@name\",2) }); //参数2 var dt=db.Ado.GetDataTable(\"select * from table where id=@id and name=@name\",new{id=1,name=2}); //存储过程用法 var nameP= new SugarParameter(\"@name\", \"张三\"); var ageP= new SugarParameter(\"@age\", null, true);//设置为output var dt = db.Ado.UseStoredProcedure().GetDataTable(\"sp_school\",nameP,ageP); 方法名 描述 返回值 SqlQuery< T > 查询所有返回实体集合 List SqlQuery 可以返回 2 个结果集 Tuple SqlQuerySingle 查询第一条记录 T GetDataTable 查询所有 DataTable GetDataReader 读取 DR 需要手动释放 DR DataReader GetDataSetAll 获取多个结果集 DataSet ExecuteCommand 返回受影响行数,一般用于增删改 int GetScalar 获取首行首列 object GetString 获取首行首列 string GetInt 获取首行首列 int GetLong 获取首行首列 long GetDouble 获取首行首列 Double GetDecimal 获取首行首列 Decimal GetDateTime 获取首行首列 DateTime 想了解更多 SqlSugar 知识可查阅 SqlSugar 官网。","s":"10.1.6 Sql 查询","u":"/docs/sqlsugar-old","h":"#1016-sql-查询","p":3247},{"i":3275,"t":"services.AddSqlSugar(new ConnectionConfig { ConnectionString = \"Server=.xxxxx\",//连接符字串 DbType = DbType.SqlServer, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息 }, db => { db.Aop.OnLogExecuting = (sql, pars) => { //方法一 App.PrintToMiniProfiler(\"SqlSugar\", \"Info\", sql + \"\\r\\n\" +string.Join(\",\", pars?.Select(it => it.ParameterName + \":\" + it.Value))); //方法二:Furion对上述用法进行二次封装 建议方式 Sql参数会直接写入到生成Sql中 App.PrintToMiniProfiler(\"SqlSugar\",\"Info\",SqlProfiler.ParameterFormat(sql,pars)); }; });","s":"10.1.7 打印 sql 到 Swagger","u":"/docs/sqlsugar-old","h":"#1017-打印-sql-到-swagger","p":3247},{"i":3277,"t":"注意 .NET5 用户需要在 API 或者项目解决方案 .csproj 文件加以下一行代码: net5.0 true ","s":"10.1.8 Oracle注意事项","u":"/docs/sqlsugar-old","h":"#1018-oracle注意事项","p":3247},{"i":3279,"t":"与我们交流 给 Furion 提 Issue。","s":"10.1.9 反馈与建议","u":"/docs/sqlsugar-old","h":"#1019-反馈与建议","p":3247},{"i":3282,"t":"事务指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 简单的说,事务就是并发控制的单位,是用户定义的一个操作序列。 而一个逻辑工作单元要成为事务,就必须满足 ACID 属性。 A:原子性(Atomicity):事务中的操作要么都不做,要么就全做 C:一致性(Consistency):事务执行的结果必须是从数据库从一个一致性状态转换到另一个一致性状态 I:隔离性(Isolation):一个事务的执行不能被其他事务干扰 D:持久性(Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的","s":"9.26.1 事务","u":"/docs/tran","h":"#9261-事务","p":3280},{"i":3284,"t":"简单来说,就是为了保证一次完整的功能操作所产生的一系列提交数据的完整性,起着事务的作用。在计算机领域中,工作单元通常用 UnitOfWork 名称表示。 通常我们保证用户的每一次请求都是处于在一个功能单元中,也就是工作单元。","s":"9.26.2 工作单元","u":"/docs/tran","h":"#9262-工作单元","p":3280},{"i":3287,"t":"在 Furion 框架中,我们只需要在控制器 Action 中贴 [UnitOfWork] 特性即可开启工作单元模式,保证了每一次请求都是一个 工作单元,要么同时成功,要么同时失败。 单库操作 下面方式支持所有关系型数据库类型 [UnitOfWork] // 由于出现错误,所以所有数据库变更都会自动回滚 public async Task 测试环境事务(int id) { // 各种奇葩数据库操作 await _personRepository.DeleteNowAsync(id); // 其他数据库操作。。 // 故意出错 var d = await _personRepository.SqlQueriesAsync(\"select * from persion2 d\"); } 多库操作 支持各种奇葩的 ORM,包括 ADO.NET,EFCore 等第三方,支持所有关系型数据库类型但不支持 Sqlite [UnitOfWork(UseAmbientTransaction = true)] // 由于出现错误,所以所有数据库变更都会自动回滚 public async Task 测试环境事务(int id) { // 各种奇葩数据库操作 await _personRepository.DeleteNowAsync(id); // 其他数据库操作。。 // 故意出错 var d = await _personRepository.SqlQueriesAsync(\"select * from persion2 d\"); } UnitOfWork 内置配置: UseAmbientTransaction:是否开启分布式环境事务,bool 类型,默认 false,不支持 Sqlite TransactionScope:配置分布式环境事务范围,TransactionScopeOption 类型,当 UseAmbientTransaction 为 true 有效 TransactionIsolationLevel:配置分布式环境事务隔离级别,IsolationLevel 类型,当 UseAmbientTransaction 为 true 有效 TransactionTimeout:配置分布式环境事务执行超时时间,int 类型,当 UseAmbientTransaction 为 true 有效 TransactionScopeAsyncFlow:配置分布式环境事务异步流支持,TransactionScopeAsyncFlowOption 类型,当 UseAmbientTransaction 为 true 有效 EnsureTransaction:强制使字符串 sql 拓展事务有效,bool 类型,默认 false 版本说明 以下内容仅限 Furion 3.7.3 + 版本使用。 如使用非 EFCore ORM 框架,可实现 IUnitOfWork 接口之后调用 services.AddUnitOfWork() 注册即可,如示例代码: using Microsoft.AspNetCore.Mvc.Filters; namespace Furion.DatabaseAccessor; /// /// SqlSugar 工作单元实现 /// public sealed class SqlSugarUnitOfWork : IUnitOfWork { /// /// SqlSugar 对象 /// private readonly ISqlSugarClient _sqlSugarClient; /// /// 构造函数 /// /// public SqlSugarUnitOfWork(ISqlSugarClient sqlSugarClient) { _sqlSugarClient = sqlSugarClient; } /// /// 开启工作单元处理 /// /// /// /// public void BeginTransaction(FilterContext context, UnitOfWorkAttribute unitOfWork) { _sqlSugarClient.AsTenant().BeginTran(); } /// /// 提交工作单元处理 /// /// /// /// public void CommitTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork) { _sqlSugarClient.AsTenant().CommitTran(); } /// /// 回滚工作单元处理 /// /// /// /// public void RollbackTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork) { _sqlSugarClient.AsTenant().RollbackTran(); } /// /// 执行完毕(无论成功失败) /// /// /// /// public void OnCompleted(FilterContext context, FilterContext resultContext) { _sqlSugarClient.Dispose(); } } 之后注册即可: services.AddUnitOfWork(); 小知识-如何判断是否开启了分布式环境事务 有时候我们自定义了工作单元之后,个别 ORM 不支持分布式环境事务,那么就会出现执行错误,我们可以通过 System.Transactions.Transaction.Current != null 来判断是否启用了分布式环境事务,不等于 null 则为启用,否则未启用。","s":"9.26.3.1 [UnitOfWork] 自动管理","u":"/docs/tran","h":"#92631-unitofwork-自动管理","p":3280},{"i":3289,"t":"有些时候我们通过静态类或者其他方式不小心创建了新的 DbContext 实例,这时候贴了 [UnitOfWork] 也不见起效,这时候可以通过以下方法来确认事务是否有效: repository.EnsureTransaction(); 如果不喜欢手动方式也可以通过 [UnitOfWork(true)] 开启此功能。 该方法会将当前仓储添加到数据库上下文池中,并确保事务可用。","s":"9.26.3.2 EnsureTransaction() 方法 ✨","u":"/docs/tran","h":"#92632-ensuretransaction-方法-","p":3280},{"i":3291,"t":"示例一 示例二 示例三(分布式) // 开启事务 using (var transaction = _testRepository.Database.BeginTransaction()) { try { _testRepository.Insert(new Blog { Url = \"http://blogs.msdn.com/dotnet\" }); _testRepository.SaveNow(); _testRepository.Insert(new Blog { Url = \"http://blogs.msdn.com/visualstudio\" }); _testRepository.SaveNow(); var blogs = _testRepository.Entity .OrderBy(b => b.Url) .ToList(); // 提交事务 transaction.Commit(); } catch (Exception) { // 回滚事务 // transaction.RollBack(); // 新版本自动回滚了 } } var options = new DbContextOptionsBuilder() .UseSqlServer(new SqlConnection(connectionString)) .Options; // 创建连接字符串 using (var context1 = new DefaultDbContext(options)) { // 开启事务 using (var transaction = context1.Database.BeginTransaction()) { try { _testRepository.Insert(new Blog { Url = \"http://blogs.msdn.com/dotnet\" }); _testRepository.SaveNow(); context1.Blogs.Add(new Blog { Url = \"http://blogs.msdn.com/dotnet\" }); context1.SaveChanges(); // 创建新的连接对象 using (var context2 = new DefaultDbContext(options)) { // 共享连接事务 context2.Database.UseTransaction(transaction.GetDbTransaction()); var blogs = context2.Blogs .OrderBy(b => b.Url) .ToList(); } // 提交事务 transaction.Commit(); } catch (Exception) { // 回滚事务 // transaction.RollBack(); // 新版本自动回滚了 } } } // 开启分布式事务 // 如果事务包裹的代码中包含异步 async/await,那么需要设置 TransactionScopeAsyncFlowOption.Enabled = true using (var scope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) { using (var connection = new SqlConnection(connectionString)) { connection.Open(); try { // 这里是 Ado.NET 操作 var command = connection.CreateCommand(); command.CommandText = \"DELETE FROM dbo.Blogs\"; command.ExecuteNonQuery(); // 创建EF Core 数据库上下文 var options = new DbContextOptionsBuilder() .UseSqlServer(connection) .Options; using (var context = new BloggingContext(options)) { context.Blogs.Add(new Blog { Url = \"http://blogs.msdn.com/dotnet\" }); context.SaveChanges(); } // 框架封装的仓储 _testRepository.Insert(new Blog { Url = \"http://blogs.msdn.com/dotnet\" }); _testRepository.SaveChanges(); // 提交事务 scope.Complete(); } catch (System.Exception) { // 自动回滚 } } }","s":"9.26.3.2 手动管理","u":"/docs/tran","h":"#92632-手动管理","p":3280},{"i":3294,"t":"[UnitOfWork] 特性只能用于控制器的 Action 中,一旦贴了 [UnitOfWork] 特性后,那么该请求自动启用工作单元模式,要么成功,要么失败。","s":"9.26.4.1 [UnitOfWork] 特性","u":"/docs/tran","h":"#92641-unitofwork-特性","p":3280},{"i":3296,"t":"默认情况下,Furion 框架会在一次成功请求之后自动调用 SaveChanges() 方法,如果选择手动调用 SaveChanges() 方法,可以在控制器 Action 中贴 [ManualCommit] 特性即可。","s":"9.26.4.2 [ManualCommit] 特性","u":"/docs/tran","h":"#92642-manualcommit-特性","p":3280},{"i":3298,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 事务 知识可查阅 EF Core - 使用事务 章节。","s":"9.26.5 反馈与建议","u":"/docs/tran","h":"#9265-反馈与建议","p":3280},{"i":3301,"t":"Visual Studio 提供了非常多代码辅助功能,启用这些功能将大大提高开发效率,这里列举一些常见的配置,后续不断完善。","s":"工欲善其事必先利其器!","u":"/docs/vsfast","h":"#工欲善其事必先利其器","p":3299},{"i":3305,"t":"在过去,我们需要写完代码编译才能知道具体的错误,最新版的 Visual Studio 支持 内联诊断错误,开启如下:","s":"2.8.3 实时显示诊断错误","u":"/docs/vsfast","h":"#283-实时显示诊断错误","p":3299},{"i":3307,"t":"打开网站 https://dotnet.microsoft.com/zh-cn/download/intellisense 下载对应的语言版本。 配置教程 如果配置了不能显示中文,可以查看此篇教程 https://blog.csdn.net/sD7O95O/article/details/103776077 关于 NET6 的中文智能提示 因为官方不再提供本地化包了,详情可查看相关 Issue https://github.com/dotnet/docs/issues/27283 可以使用博客园网友 @internalnet 制作的本地化包 https://www.cnblogs.com/internalnet/p/16185298.html","s":"2.8.4 中文智能提示","u":"/docs/vsfast","h":"#284-中文智能提示","p":3299},{"i":3309,"t":"Visual Studio 2022 提供了非常强大的 代码搜索和功能搜索,只需要快捷键 Ctrl + T 呼出,如: 退出搜索只需快捷键 ESC 即可。","s":"2.8.5 代码搜索","u":"/docs/vsfast","h":"#285-代码搜索","p":3299},{"i":3311,"t":"与我们交流 给 Furion 提 Issue。","s":"2.8.6 反馈与建议","u":"/docs/vsfast","h":"#286-反馈与建议","p":3299},{"i":3313,"t":"特别说明 脚手架不是安装在项目中的! 而是通过 CMD 或 PowerShell 安装到操作系统中的。","s":"2.2 官方脚手架","u":"/docs/template","h":"","p":3312},{"i":3315,"t":"Furion 官方提供了多种 Web 应用类型的脚手架,方便大家快速创建多层架构项目。目前支持以下应用脚手架:","s":"2.2.1 脚手架","u":"/docs/template","h":"#221-脚手架","p":3312},{"i":3317,"t":"模板类型 名称 版本 关键词 描述 Furion.Template.Mvc 👉 furionmvc Mvc 模板 Furion.Template.Api 👉 furionapi WebApi 模板 Furion.Template.App 👉 furionapp Mvc/WebApi 模板 Furion.Template.Razor 👉 furionrazor RazorPages 模板 Furion.Template.RazorWithWebApi 👉 furionrazorapi RazorPages/WebApi 模板 Furion.Template.Blazor 👉 furionblazor Blazor 模板 Furion.Template.BlazorWithWebApi 👉 furionblazorapi Blazor/WebApi 模板","s":"2.2.1.1 Furion + EFCore","u":"/docs/template","h":"#2211-furion--efcore","p":3312},{"i":3319,"t":"SqlSugar 优点 弥补 EF Core 上手难度:支持线程安全、支持多库事务、多库兼容、多库查询和多库切换。 模板类型 名称 版本 关键词 描述 Furion.SqlSugar.Template.Mvc 👉 fsmvc Mvc 模板 Furion.SqlSugar.Template.Api 👉 fsapi WebApi 模板 Furion.SqlSugar.Template.App 👉 fsapp Mvc/WebApi 模板 Furion.SqlSugar.Template.Razor 👉 fsrazor RazorPages 模板 Furion.SqlSugar.Template.RazorWithWebApi 👉 fsrazorapi RazorPages/WebApi 模板 Furion.SqlSugar.Template.Blazor 👉 fsblazor Blazor 模板 Furion.SqlSugar.Template.BlazorWithWebApi 👉 fsblazorapi Blazor/WebApi 模板","s":"2.2.1.2 Furion + SqlSugar","u":"/docs/template","h":"#2212-furion--sqlsugar","p":3312},{"i":3321,"t":"打开 CMD 或 Powershell 执行模板安装命令(新版本 --install 可换成 install): // EFCore dotnet new --install Furion.Template.Api::4.7.9 // SqlSugar dotnet new --install Furion.SqlSugar.Template.Api::4.7.9 SqlSugar 脚手架基本使用 在 SqlSugar 脚手架中,Core 层包含了一个 DbContext.cs 类,可通过 DbContext.Instance 就可以获取到 SqlSugarScope 对象。 数据库链接字符串在启动层 appsettings.json 文件的 ConnectionConfigs 节点中配置,对应的是 SqlSugar 中的 ConnectionConfig[] 对象。","s":"2.2.2 安装脚手架","u":"/docs/template","h":"#222-安装脚手架","p":3312},{"i":3323,"t":"dotnet new furionapi -n 项目名称 -f .NET版本 # EFCore:支持创建 .NET5-7 版本 dotnet new furionapi -n MyProject -f net5 dotnet new furionapi -n MyProject -f net6 dotnet new furionapi -n MyProject -f net7 # SqlSugar:支持创建 .NET5-7 版本 dotnet new fsapi -n MyProject -f net5 dotnet new fsapi -n MyProject -f net6 dotnet new fsapi -n MyProject -f net7 这样就可以生成项目代码了,生成之后推荐将所有的 nuget 包更新到最新版本。 关于项目名称和 .NET 版本 通过脚手架生成的项目名称不能包含 短横线 等特殊字符,如有该需求,可在生成之后通过 Visual Studio 进行手动修改。 -f 版本参数所有选项:net5,net6,net7。 特别提醒 furionapi 对应的是上面列表的 关键字,我们也可以通过 dotnet new --list 查看。 想了解更多可以使用 dotnet new 关键字 --help 查看更多参数。","s":"2.2.3 使用脚手架","u":"/docs/template","h":"#223-使用脚手架","p":3312},{"i":3325,"t":"只需要重新安装最新版替换即可,如: dotnet new --install Furion.Template.Api::4.7.9 不带版本号总是安装最新的版本。","s":"2.2.4 脚手架更新","u":"/docs/template","h":"#224-脚手架更新","p":3312},{"i":3327,"t":"通过命令安装脚手架后,升级 Visual Studio 到最新版可使用可视化方式创建哦。","s":"2.2.5 Visual Studio 集成","u":"/docs/template","h":"#225-visual-studio-集成","p":3312},{"i":3329,"t":"由于 Furion 底层依赖了 Microsoft.CodeAnalysis.CSharp 包,所以可能通过 Viusal Studio 的界面添加 Area 区域 时会出错,这时候只需要在 Web.Entry 层安装下面几个包即可: Microsoft.CodeAnalysis.CSharp.Features Microsoft.CodeAnalysis.CSharp.Scripting Microsoft.CodeAnalysis.VisualBasic.Features Microsoft.CodeAnalysis.Workspaces.MSBuild Microsoft.VisualStudio.Web.CodeGeneration.Design","s":"2.2.6 关于 MVC 添加区域出错问题","u":"/docs/template","h":"#226-关于-mvc-添加区域出错问题","p":3312},{"i":3331,"t":"脚手架可以极大的提高我们搭建新项目的速度,推荐两篇文章给大家学习: https://www.cnblogs.com/laozhang-is-phi/p/10205495.html https://www.cnblogs.com/catcher1994/p/10061470.html 推荐直接拷贝 Furion 脚手架文件夹进行修改,可避免很多问题。 Furion 脚手架源码","s":"2.2.7 搭建脚手架","u":"/docs/template","h":"#227-搭建脚手架","p":3312},{"i":3333,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 模板知识 知识可查阅 dotnet-new 模板 章节。","s":"2.2.8 反馈与建议","u":"/docs/template","h":"#228-反馈与建议","p":3312},{"i":3335,"t":"视频教程 https://www.bilibili.com/video/BV1Rv4y1P7ZB","s":"34.4 二级虚拟目录部署","u":"/docs/virtual-deploy","h":"","p":3334},{"i":3337,"t":"通常我们的站点都是部署在网站的根目录下的,但是有些时候,我们可能将网站根目录下的目录作为二级站点或子站点,这个时候,就会出现 404 错误了。 这个时候就需要进行一些特殊配置了。","s":"34.4.1 关于二级虚拟目录","u":"/docs/virtual-deploy","h":"#3441-关于二级虚拟目录","p":3334},{"i":3339,"t":"版本说明 以下内容仅限 Furion 3.2.0 + 版本使用。 如果网站是在 Site 下面添加 Application 下部署,则遵循以下步骤: 添加 Application Pool 应用程序池,并设置为非托管模式 添加 Application 并选择刚刚创建的应用程序池 添加应用配置: { \"SpecificationDocumentSettings\": { \"ServerDir\": \"IIS中应用程序名(Applicaiton)\" } } 该配置主要是解决 Swagger 出现 404 问题。 个别情况 如果配置之后还 Swagger 还出现不能加载 swagger.json 文件问题,那么需修改启动注册代码: app.UseInject(string.Empty); // 确保参数是 strng.Empty","s":"34.4.2 针对在 IIS 网站下添加 Application 情况","u":"/docs/virtual-deploy","h":"#3442-针对在-iis-网站下添加-application-情况","p":3334},{"i":3341,"t":"注意事项 这里是针对 非 IIS 部署使用的!!!","s":"34.4.3 针对非 IIS 下部署情况","u":"/docs/virtual-deploy","h":"#3443-针对非-iis-下部署情况","p":3334},{"i":3343,"t":"我们只需要配置 AppSettings 即可: { \"AppSettings\": { \"VirtualPath\": \"/虚拟目录\" } }","s":"34.4.3.1 配置 AppSettings","u":"/docs/virtual-deploy","h":"#34431-配置-appsettings","p":3334},{"i":3345,"t":"版本说明 以下内容仅限 Furion 3.2.0 + 版本使用。 由于在 .NET6 的 WebApplication 模式下微软底层发生了改变,所以需要使用 app.UseVirtualPath() 包裹 app.UseInject() 和 app.MapRouteControllers(): app.UseVirtualPath(app => { app.UseInject(String.Empty); // 注意 String.Empty 只是例子,可以不填或填其他的,见一分钟入门 app.MapRouteControllers(); }); 注意,app.MapRouteControllers() 是替换 app.MapControllers() 的!","s":"34.4.3.2 .NET6 WebApplication 模式下虚拟目录配置","u":"/docs/virtual-deploy","h":"#34432-net6-webapplication-模式下虚拟目录配置","p":3334},{"i":3347,"t":"与我们交流 给 Furion 提 Issue。","s":"34.4.4 反馈与建议","u":"/docs/virtual-deploy","h":"#3444-反馈与建议","p":3334},{"i":3350,"t":"引用自百度百科: 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如 C 语言中单元指一个函数,Java 里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。","s":"36.1.1 关于单元测试","u":"/docs/unittest","h":"#3611-关于单元测试","p":3348},{"i":3352,"t":"消灭低级错误 基本的单元测试,可以在系统测试之前,把大部分比较低级的错误都消灭掉,减少系统测试过程中的问题,这样也就减少了系统测试中定位和解决问题的时间成本了。 找出潜在的 bug 某些类型的 bug,靠系统测试是很难找到的。例如一些代码分支,平时 99%的场景基本上都走不到,但一旦走到了,如果没有提前测试好,那么可能就是一个灾难。 上线前的保证 加了新代码,上线前跑一把单元测试,都通过,说明代码可能没有影响到之前的逻辑,这样上线也比较放心。如果之前的单元测试跑不过,那么很有可能新的代码有潜在的问题,赶紧修复去吧。 重构代码的机会 写单元测试的过程中,你可能会顺手把一些 code 重构了,为什么?举例,一些长得非常像的代码,如果每次都要写一堆测试代码去测同样的 code,你会不会抓狂?不测吧,覆盖率又上不去,于是我就会想方设法把待测试的 code 改得尽量的精简,重复代码减少,这样覆盖率上去了,测试也好测了,代码也简洁了。如果没有单元测试和覆盖率的要求的话,坦白说可能一来自己不会发现这些重复的 code,另一方面即使发现了,可能也没有太大的动力去改进。 另外,由于单元测试中,你需要尝试去覆盖一些异常分支,这是系统测试常常走不到的地方,于是就会引起你的一些思考,例如这个异常分支是否真的需要?是否真的会发生?对于一些实际上绝对不会出错的函数,那么我觉得可能异常分支是没必要存在的。 重新 review 代码的机会 写 UT 的过程中,我总是会好好看哪些代码执行到了,哪些代码没有执行到,这其实也是一个 review 自己代码的机会,有些时候,并不是 UT 本身帮我找到 bug,而是回头 review 自己代码的时候发现的。","s":"36.1.2 单元测试好处","u":"/docs/unittest","h":"#3612-单元测试好处","p":3348},{"i":3354,"t":"基于 API 接口测试(白盒 + 浅度黑盒测试) 基于项目代码测试(深度白盒测试)","s":"36.1.3 单元测试类型","u":"/docs/unittest","h":"#3613-单元测试类型","p":3348},{"i":3356,"t":"xUnit(最流行的库,推荐) NUnit MSTest 在本章节,Furion 框架使用 xUnit 库进行单元测试。","s":"36.1.4 主流的单元测试库","u":"/docs/unittest","h":"#3614-主流的单元测试库","p":3348},{"i":3360,"t":"using Xunit; namespace TestProject1 { public class UnitTest1 { [Fact] public void Test1() { Assert.Equal(2, 1 + 1); } } } 单元测试实际上是通过普通的类的方法进行模块功能测试,具体测试则是标记了 [Fact] 特性的方法,在方法中使用 Assert 类提供的静态方法进行 断言,断言 成功,则测试通过,否则测试不通过。","s":"36.1.5.2 第一个测试方法","u":"/docs/unittest","h":"#36152-第一个测试方法","p":3348},{"i":3362,"t":"在单元测试项目中 右键 选择 运行测试 并打开 测试资源管理器 即可查看测试结果。","s":"36.1.5.3 运行测试","u":"/docs/unittest","h":"#36153-运行测试","p":3348},{"i":3365,"t":"后续添加更多测试方法只需在 测试资源管理器 点击 在视图中运行所有测试 播放按钮即可,如下图","s":"36.1.5.5 重复/回归测试","u":"/docs/unittest","h":"#36155-重复回归测试","p":3348},{"i":3367,"t":"Furion 是跨平台、跨项目的开发框架,支持任意项目类型,包括单元测试项目。","s":"36.1.6 集成 Furion 强大功能","u":"/docs/unittest","h":"#3616-集成-furion-强大功能","p":3348},{"i":3369,"t":"Furion 纯净版 如果使用的是 Furion.Pure 则安装 Furion.Pure.Xunit 这个拓展包。 打开 Nuget 程序包控制台,安装 Furion.Xunit 包 特别注意 Furion.Xunit 已经包含 Furion 无需再次安装 Furion。","s":"36.1.6.1 安装 Furion.Xunit 包","u":"/docs/unittest","h":"#36161-安装-furionxunit-包","p":3348},{"i":3371,"t":"在单元测试项目根目录下添加 TestProgram.cs 类,并写下以下代码: TestProgram.cs using Furion.Xunit; using Xunit.Abstractions; using Xunit.Sdk; // 配置启动类类型,第一个参数是 TestProgram 类完整限定名,第二个参数是当前项目程序集名称 [assembly: TestFramework(\"TestProject1.TestProgram\", \"TestProject1\")] namespace TestProject1; /// /// 单元测试启动类 /// public class TestProgram : TestStartup { public TestProgram(IMessageSink messageSink) : base(messageSink) { // 初始化 Furion Serve.Run(silence: true); } } 小提示 TestProgram.cs 名称可随意,只需要继承 TestStartup 类即可。","s":"36.1.6.2 添加初始配置类","u":"/docs/unittest","h":"#36162-添加初始配置类","p":3348},{"i":3373,"t":"Furion 是跨平台、跨项目的开发框架,下面在单元测试中演示 远程请求 并请求 https://www.baidu.com 数据,并测试是否请求成功。 在根目录下添加 Startup.cs 启动类,并继承 AppStartup: Startup.cs using Furion; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; namespace TestProject1; public class Startup : AppStartup { public void ConfigureServices(IServiceCollection services) { // 注册远程服务 services.AddRemoteRequest(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } } 编写测试方法 [Fact] public async Task 测试请求百度() { var rep = await \"https://www.baidu.com\".GetAsync(); Assert.True(rep.IsSuccessStatusCode); } 查看测试结果 很神奇吧!Furion 支持任何项目类型,任何平台使用。","s":"36.1.6.3 使用 Furion 完整功能","u":"/docs/unittest","h":"#36163-使用-furion-完整功能","p":3348},{"i":3375,"t":"上面例子中,测试方法都是没有参数的,有时候需要同一个方法输入多个不同的值进行测试,这时候就需要用到 [Theory] 和 [InlineData] 特性了。 如,下面测试两个数的和是 奇数,测试代码如下: [Theory] [InlineData(1, 2)] [InlineData(3, 4)] [InlineData(5, 7)] public void 带参数测试(int i, int j) { Assert.NotEqual(0, (i + j) % 2); } 测试结果:","s":"36.1.7 带参数的测试方法","u":"/docs/unittest","h":"#3617-带参数的测试方法","p":3348},{"i":3377,"t":"有些时候,我们需要测试某接口,或者进行依赖注入方式解析服务并调用,Furion.Xunit 提供完整的构造函数注入。","s":"36.1.8 如何进行依赖注入","u":"/docs/unittest","h":"#3618-如何进行依赖注入","p":3348},{"i":3379,"t":"using Furion.DependencyInjection; namespace TestProject1.Services; public interface ICalcService { int Plus(int i, int j); } public class CalcService : ICalcService, ITransient // 支持任何生命周期 { public int Plus(int i, int j) { return i + j; } }","s":"36.1.8.1 编写一个 ICalcService 接口及实现类","u":"/docs/unittest","h":"#36181-编写一个-icalcservice-接口及实现类","p":3348},{"i":3381,"t":"using TestProject1.Services; using Xunit; namespace TestProject1; public class UnitTest1 { private readonly ICalcService _calcService; public UnitTest1(ICalcService calcService) { _calcService = calcService; } [Fact] public void 测试两个数的和() { Assert.Equal(3, _calcService.Plus(1, 2)); } }","s":"36.1.8.2 在测试类中调用","u":"/docs/unittest","h":"#36182-在测试类中调用","p":3348},{"i":3383,"t":"如果在单元测试中想输出日志,只需要在构造函数注入 ITestOutputHelper 即可,如: using Xunit; using Xunit.Abstractions; namespace TestProject1 { public class UnitTest1 { private readonly ITestOutputHelper Output; public UnitTest1(ITestOutputHelper tempOutput) { Output = tempOutput; } [Fact] public void Test_String_Equal() { Output.WriteLine(\"哈哈哈哈,我是 Furion\"); Assert.NotEqual(\"Furion\", \"Fur\"); } } }","s":"36.1.8.3 输出日志","u":"/docs/unittest","h":"#36183-输出日志","p":3348},{"i":3385,"t":"Furion 会在创建单元测试实例时创建一个 IServiceScope 对象,等该实例所有测试案例执行完毕自动调用 Dispose,编写测试的开发者无需关注。","s":"36.1.8.4 关于依赖注入作用域释放","u":"/docs/unittest","h":"#36184-关于依赖注入作用域释放","p":3348},{"i":3387,"t":"有时候,我们需要测试成功后释放一些不能及时释放的对象,这时,只需要实现 IDisposable 接口即可: using System; using Xunit; namespace TestProject1 { public class UnitTest1 : IDisposable { [Fact] public void Test_String_Equal() { Assert.NotEqual(\"Furion\", \"Fur\"); } public void Dispose() { // 释放你的对象 } } }","s":"36.1.8.5 测试释放资源","u":"/docs/unittest","h":"#36185-测试释放资源","p":3348},{"i":3389,"t":"有时候我们可能不需要对类进行依赖注册,或者无法通过外部进行注册,这时候可以通过 [AssemblyFixture] 特性实现构造函数注入任何类,如: 有效范围说明 [AssemblyFixture] 方式对整个单元测试类构造函数都有效,如需个别单元测试类有效可使用 IClassFixture<> 或 ICollectionFixture<> + [Collection] 组合方式。 定义需要注入进单元测试构造函数中的类 public class MyAssemblyFixture : IDisposable { public static int InstantiationCount; public MyAssemblyFixture() { InstantiationCount++; } public void Dispose() { // 做一些释放工作 } } 在 TestProgram.cs 顶部全局注册 TestProgram.cs using Furion.Xunit; using TestProject1; using Xunit; using Xunit.Abstractions; using Xunit.Sdk; // 配置启动类类型,第一个参数是 TestProgram 类完整限定名,第二个参数是当前项目程序集名称 [assembly: TestFramework(\"TestProject1.TestProgram\", \"TestProject1\")] // 支持多个 [assembly: AssemblyFixture(typeof(MyAssemblyFixture))] // [assembly: AssemblyFixture(typeof(XXXXFixture))] namespace TestProject1; /// /// 单元测试启动类 /// public class TestProgram : TestStartup { public TestProgram(IMessageSink messageSink) : base(messageSink) { Serve.Run(silence: true); } } 在测试类构造函数注入 using TestProject1.Services; using Xunit; namespace TestProject1; public class UnitTest1 { private readonly ICalcService _calcService; private readonly MyAssemblyFixture _fixture; public UnitTest1(ICalcService calcService , MyAssemblyFixture fixture) { _calcService = calcService; _fixture = fixture; } [Fact] public void 测试两个数的和() { Assert.Equal(3, _calcService.Plus(1, 2)); } [Fact] public void EnsureSingleton() { Assert.Equal(1, MyAssemblyFixture.InstantiationCount); } }","s":"36.1.8.6 [AssemblyFixture] 特性","u":"/docs/unittest","h":"#36186-assemblyfixture-特性","p":3348},{"i":3391,"t":"通过上面 [AssemblyFixture] 方式我们知道此方式对全局的单元测试类都有效,但有时候我们只需要特定单元测试类有效,则可通过 IClassFixture<> 方式,如: 定义需要注入进单元测试构造函数中的类 public class MyClassFixture : IDisposable { public static int InstantiationCount; public MyClassFixture() { InstantiationCount++; } public void Dispose() { // 做一些释放工作 } } 在测试类构造函数注入 using TestProject1.Services; using Xunit; namespace TestProject1; public class UnitTest1 : IClassFixture { private readonly ICalcService _calcService; private readonly MyAssemblyFixture _fixture; private readonly MyClassFixture _classFixture; public UnitTest1(ICalcService calcService , MyAssemblyFixture fixture , MyClassFixture classFixture) { _calcService = calcService; _fixture = fixture; _classFixture = classFixture; } [Fact] public void 测试两个数的和() { Assert.Equal(3, _calcService.Plus(1, 2)); } [Fact] public void EnsureSingleton() { Assert.Equal(1, MyAssemblyFixture.InstantiationCount); } [Fact] public void EnsureClassSingleton() { Assert.Equal(1, MyClassFixture.InstantiationCount); } }","s":"36.1.8.7 IClassFixture<> 单个注入","u":"/docs/unittest","h":"#36187-iclassfixture-单个注入","p":3348},{"i":3393,"t":"ICollectionFixture<> 方式和 IClassFixture<> 方式最大的不同就是后者只能配置为单个测试类使用,而 ICollectionFixture<> 则通过 [Collection] 方式配置多个测试类有效,如: 定义需要注入进单元测试构造函数中的类 特别注意 这里区别于 IClassFixture<> 方式,需定义配置器并实现 ICollectionFixture<> 接口。 using Xunit; namespace TestProject1; public class MyCollectionFixture : IDisposable { public static int InstantiationCount; public MyCollectionFixture() { InstantiationCount++; } public void Dispose() { // 做一些释放工作 } } [CollectionDefinition(\"MyCollection\")] public class MyCollection : ICollectionFixture { } 在测试类构造函数注入 using TestProject1.Services; using Xunit; namespace TestProject1; [Collection(\"MyCollection\")] public class UnitTest1 : IClassFixture { private readonly ICalcService _calcService; private readonly MyAssemblyFixture _fixture; private readonly MyClassFixture _classFixture; private readonly MyCollectionFixture _collectionFixture; public UnitTest1(ICalcService calcService , MyAssemblyFixture fixture , MyClassFixture classFixture , MyCollectionFixture collectionFixture) { _calcService = calcService; _fixture = fixture; _classFixture = classFixture; _collectionFixture = collectionFixture; } [Fact] public void 测试两个数的和() { Assert.Equal(3, _calcService.Plus(1, 2)); } [Fact] public void EnsureSingleton() { Assert.Equal(1, MyAssemblyFixture.InstantiationCount); } [Fact] public void EnsureClassSingleton() { Assert.Equal(1, MyClassFixture.InstantiationCount); } [Fact] public void EnsureCollectionSingleton() { Assert.Equal(1, MyCollectionFixture.InstantiationCount); } }","s":"36.1.8.8 ICollectionFixture<> 多个注入","u":"/docs/unittest","h":"#36188-icollectionfixture-多个注入","p":3348},{"i":3395,"t":"Web 集成测试有三种方式,通过这三种方式可以对项目进行全方位的测试,保证部署上线是测试期盼效果。","s":"36.1.9 Web 集成测试","u":"/docs/unittest","h":"#3619-web-集成测试","p":3348},{"i":3397,"t":"这种方式比较简单,也是最常用的方式,无需部署到服务器直接在本地即可测试,如: 创建 Xunit 单元测试项目 添加 Microsoft.AspNetCore.Mvc.Testing 微软提供的集成测试拓展 添加测试项目或使用已有的测试项目引用 在需要测试的 Web 项目启动层添加 FakeStarup.cs 类 FakeStarup.cs namespace WebApplication1; /// /// 供集成测试使用 /// public class FakeStartup { } 编写测试 Web 项目接口测试案例 using Microsoft.AspNetCore.Mvc.Testing; using Xunit; namespace TestProject2; public class UnitTest1 : IClassFixture> { private readonly WebApplicationFactory _factory; public UnitTest1(WebApplicationFactory factory) { _factory = factory; } [Theory] [InlineData(\"/default\")] public async Task TestEnsureSuccessStatusCode(string url) { using var client = _factory.CreateClient(); using var response = await client.GetAsync(url); response.EnsureSuccessStatusCode(); } } /default 接口对应控制器定义如下: using Microsoft.AspNetCore.Mvc; namespace WebApplication1.Controllers { [ApiController] [Route(\"[controller]\")] public class DefaultController : ControllerBase { [HttpGet] public string Get() { return \"Furion 集成测试\"; } } } 允许测试","s":"36.1.9.1 对现有项目进行集成测试","u":"/docs/unittest","h":"#36191-对现有项目进行集成测试","p":3348},{"i":3399,"t":"独立主机的方式就是利用单元测试的每一个测试案例构建主机进行测试。 创建 Xunit 单元测试项目 添加 Microsoft.AspNetCore.Mvc.Testing 微软提供的集成测试拓展 各种创建主机方式示例 using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Xunit; namespace TestProject3; public class UnitTest1 { /// /// 创建主机并注册服务 /// /// 可用来判断服务是否注册 [Fact] public void Test1() { var builder = WebApplication.CreateBuilder(); // 注册服务 builder.Services.AddScoped(); using var app = builder.Build(); var services = app.Services; services.GetRequiredService(); } /// /// 测试配置 /// /// 比如添加 JSON 文件配置后读取 [Fact] public void Test2() { var builder = WebApplication.CreateBuilder(); var host = builder.Host; host.ConfigureAppConfiguration(builder => { builder.Sources.Clear(); }); var config = builder.Configuration[\"配置\"]; // 判断不为空 } }","s":"36.1.9.2 独立主机方式测试","u":"/docs/unittest","h":"#36192-独立主机方式测试","p":3348},{"i":3401,"t":"有时候我们需要测试 Web 主机各种情况,比如端口是否有效,环境配置是否有效,系统集成情况等等,这时候只需要添加 Microsoft.AspNetCore.TestHost 拓展,然后在测试类顶部贴: [assembly: HostingStartup(typeof(WebApplicationTests.TestHostingStartup))] 微软已经提供了非常详细的例子,这里直接放链接 https://github.com/dotnet/aspnetcore/tree/main/src/DefaultBuilder/test/Microsoft.AspNetCore.Tests WebApplicationTests.TestHostingStartup 为您要测试的 Web 项目启动类。","s":"36.1.9.3 系统集成/环境/配置部署测试","u":"/docs/unittest","h":"#36193-系统集成环境配置部署测试","p":3348},{"i":3403,"t":"Web 集成测试支持完整的 Furion 特性,参考上面单元测试集成 Furion 章节。 Furion 纯净版 如果使用的是 Furion.Pure 则安装 Furion.Pure.Xunit 这个拓展包。","s":"36.1.9.4 集成 Furion.Xunit 拓展","u":"/docs/unittest","h":"#36194-集成-furionxunit-拓展","p":3348},{"i":3405,"t":"Assert 是单元测试判定成功的依据,通常第一个参数为 期望值,第二个参数为 实际值,对比这两个值是否一致即可判断成功与否。详细的 Assert 静态方法可查阅官方库 Assert 方法","s":"36.1.10 Assert 断言","u":"/docs/unittest","h":"#36110-assert-断言","p":3348},{"i":3407,"t":"Visual Studio 提供了分析单元测试覆盖率工具,如:","s":"36.1.11 单元测试覆盖率","u":"/docs/unittest","h":"#36111-单元测试覆盖率","p":3348},{"i":3409,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 单元测试 知识可查阅 在 .NET 中测试 章节。","s":"36.1.12 反馈与建议","u":"/docs/unittest","h":"#36112-反馈与建议","p":3348},{"i":3412,"t":"通常日志指的是系统日志和程序日志。 系统日志 是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。系统日志包括系统日志、应用程序日志和安全日志。 程序日志 是程序运行中产生的日志,通常由框架运行时或开发者提供的日志。包括请求日志,异常日志、审计日志、行为日志等。","s":"18.1 关于日志","u":"/docs/logging","h":"#181-关于日志","p":3410},{"i":3414,"t":"在项目开发中,都不可避免的使用到日志。没有日志虽然不会影响项目的正确运行,但是没有日志的项目可以说是不完整的。日志在调试,错误或者异常定位,数据分析中的作用是不言而喻的。 调试 在项目调试时,查看栈信息可以方便地知道当前程序的运行状态,输出的日志便于记录程序在之前的运行结果。 错误定位 不要以为项目能正确跑起来就可以高枕无忧,项目在运行一段时候后,可能由于数据问题,网络问题,内存问题等出现异常。这时日志可以帮助开发或者运维人员快速定位错误位置,提出解决方案。 数据分析 大数据的兴起,使得大量的日志分析成为可能,ELK 也让日志分析门槛降低了很多。日志中蕴含了大量的用户数据,包括点击行为,兴趣偏好等,用户画像对于公司下一步的战略方向有一定指引作用。","s":"18.2 日志作用","u":"/docs/logging","h":"#182-日志作用","p":3410},{"i":3416,"t":"日志级别可以有效的对日志信息进行归类,方便准确的查看特定日志内容。通常日志类别有以下级别: 级别 值 方法 描述 Trace(跟踪) 0 LogTrace 包含最详细的消息。 这些消息可能包含敏感的应用数据。 这些消息默认情况下处于禁用状态,并且不应在生产中启用。 Debug(调试) 1 LogDebug 用于调试和开发。 由于量大,请在生产中小心使用。 Information(信息) 2 LogInformation 跟踪应用的常规流。 可能具有长期值。 Warning(警告) 3 LogWarning 对于异常事件或意外事件。 通常包括不会导致应用失败的错误或情况。 Error(错误) 4 LogError 表示无法处理的错误和异常。 这些消息表示当前操作或请求失败,而不是整个应用失败。 Critical(严重) 5 LogCritical 需要立即关注的失败。 例如数据丢失、磁盘空间不足。","s":"18.3 日志级别","u":"/docs/logging","h":"#183-日志级别","p":3410},{"i":3418,"t":"在 .NET 5 框架中,微软已经为我们内置了 日志组件,正常情况下,无需我们引用第三方包进行日志记录。.NET 5 框架为我们提供了两种日志对象创建方式。","s":"18.4 如何使用","u":"/docs/logging","h":"#184-如何使用","p":3410},{"i":3420,"t":"使用非常简单,可以通过 ILogger 对象进行注入,如: public class PrivacyModel : PageModel { private readonly ILogger _logger; public PrivacyModel(ILogger logger) { _logger = logger; } public void OnGet() { _logger.LogInformation(\"GET Pages.PrivacyModel called.\"); } } 小知识 通过泛型 ILogger 方式写入日志,那么默认将 T 类型完整类型名称作为 日志类别。","s":"18.4.1 ILogger 泛型方式","u":"/docs/logging","h":"#1841-iloggert-泛型方式","p":3410},{"i":3422,"t":"使用工厂方式,需手动传入 日志类别,如: public class ContactModel : PageModel { private readonly ILogger _logger; public ContactModel(ILoggerFactory logger) { _logger = logger.CreateLogger(\"MyCategory\"); } public void OnGet() { _logger.LogInformation(\"GET Pages.ContactModel called.\"); } }","s":"18.4.2 ILoggerFactory 工厂方式","u":"/docs/logging","h":"#1842-iloggerfactory-工厂方式","p":3410},{"i":3424,"t":"版本说明 以下内容仅限 Furion 4.2.1 + 版本使用。 // 创建日志对象 var logger = Log.CreateLogger(\"日志名称\"); // 创建日志工厂 using var loggerFactory = Log.CreateLoggerFactory(builder => { // .... }); // 日志记录 Log.Information(\"Information\"); Log.Warning(\"Warning\"); Log.Error(\"Error\"); Log.Debug(\"Debug\"); Log.Trace(\"Trace\"); Log.Critical(\"Critical\");","s":"18.4.3 Log 静态类方式","u":"/docs/logging","h":"#1843-log-静态类方式","p":3410},{"i":3426,"t":"在 Furion 框架中,提供了更懒的方式写入日志,也就是通过字符串拓展的方式写入,如: \"简单日志\".LogInformation(); \"百小僧 新增了一条记录\".LogInformation(); \"程序出现异常啦\".LogError(); \"这是自定义类别日志\".SetCategory(\"类别\").LogInformation(); 通过字符串拓展方式可以在任何时候方便记录日志,专门为懒人提供的。","s":"18.4.4 懒人模式 😁","u":"/docs/logging","h":"#1844-懒人模式-","p":3410},{"i":3428,"t":"版本说明 以下小节仅在 Furion 3.9.0+ 版本提供。 在 ASP.NET Core 应用程序中,主机启动时默认注册了 ConsoleLoggerProvider 提供器,也就是控制台日志输出提供器,所以无需任何注册服务即可在控制台输出。","s":"18.5 配置日志输出介质","u":"/docs/logging","h":"#185-配置日志输出介质","p":3410},{"i":3430,"t":"info: Furion.EventBus.EventBusHostedService[0] EventBus Hosted Service is running. info: Microsoft.Hosting.Lifetime[14] Now listening on: https://localhost:5001 info: Microsoft.Hosting.Lifetime[14] Now listening on: http://localhost:5000 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: C:\\Workplaces\\Furion\\samples\\Furion.Web.Entry\\ 如果希望不输出某些日志类别的日志可以添加以下过滤: 控制台输出过滤 .NET5 版本: Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.AddFilter((provider, category, logLevel) => { return !new[] { \"Microsoft.Hosting\", \"Microsoft.AspNetCore\" }.Any(u => category.StartsWith(u)) && logLevel >= LogLevel.Information; }); }) .NET6+ 版本: var builder = WebApplication.CreateBuilder(args); builder.Logging.AddFilter((provider, category, logLevel) => { return !new[] { \"Microsoft.Hosting\", \"Microsoft.AspNetCore\" }.Any(u => category.StartsWith(u)) && logLevel >= LogLevel.Information; }); 或者 Serve.Run 方式 Serve.Run(RunOptions.Default.AddWebComponent()); public class WebComponent : IWebComponent { public void Load(WebApplicationBuilder builder, ComponentContext componentContext) { builder.Logging.AddFilter((provider, category, logLevel) => { return !new[] { \"Microsoft.Hosting\", \"Microsoft.AspNetCore\" }.Any(u => category.StartsWith(u)) && logLevel >= LogLevel.Information; }); } } 日志过滤无效情况 假如使用上述代码过滤无效(不能过滤默认的主机日志),那么请确认 appsettings.json 和 appsettings.Development.json 的 Logging:Level 是否如下: { \"Logging\": { \"LogLevel\": { \"Default\": \"Information\", \"Microsoft.AspNetCore\": \"Warning\", \"Microsoft.EntityFrameworkCore\": \"Information\" } } } 如果配置了以下配置,请删除: \"Microsoft\": \"Warning\", \"Microsoft.Hosting.Lifetime\": \"Information\", 控制台日志标准化模板 版本说明 以下内容仅限 Furion 4.5.0 + 版本使用。 在 ASP.NET Core 默认控制台日志相对简洁,并未包含常见的日志时间、线程 Id 等,而且自定义模板也相对复杂,所以 Furion 4.5.0+ 版本提供了简化配置,如: Startup.cs 方式 services.AddConsoleFormatter(); .NET5 方式 Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.AddConsoleFormatter(); }); .NET6 方式 var builder = WebApplication.CreateBuilder(args); builder.Logging.AddConsoleFormatter(); Serve.Run() 方式 Serve.Run(RunOptions.Default.AddWebComponent()); public class WebComponent : IWebComponent { public void Load(WebApplicationBuilder builder, ComponentContext componentContext) { builder.Logging.AddConsoleFormatter(); } } 输出结果: info: 2022-09-27T13:17:33.5958395+08:00 System.Logging.EventBusService[0] #1 EventBus Hosted Service is running. info: 2022-09-27T13:17:35.1666167+08:00 Microsoft.Hosting.Lifetime[ListeningOnAddress] #1 Now listening on: https://localhost:5001 info: 2022-09-27T13:17:35.1728106+08:00 Microsoft.Hosting.Lifetime[ListeningOnAddress] #1 Now listening on: http://localhost:5000 info: 2022-09-27T13:17:35.1893063+08:00 Microsoft.Hosting.Lifetime[0] #1 Application started. Press Ctrl+C to shut down. info: 2022-09-27T13:17:35.1941484+08:00 Microsoft.Hosting.Lifetime[0] #1 Hosting environment: Development info: 2022-09-27T13:17:35.1996545+08:00 Microsoft.Hosting.Lifetime[0] #1 Content root path: D:\\Workplaces\\OpenSources\\Furion\\samples\\Furion.Web.Entry\\ 自定义控制台日志输出模板 services.AddConsoleFormatter(options => { options.MessageFormat = (logMsg) => { var stringBuilder = new StringBuilder(); stringBuilder.Append(DateTime.Now.ToString(\"o\")); // 其他的。。。自己组装 return stringBuilder.ToString(); }; }); // 输出为 JSON 格式,Furion 4.5.2+ services.AddConsoleFormatter(options => { options.MessageFormat = LoggerFormatter.Json; // Furion 4.8.0+ 新增 JSON 美化输出 options.MessageFormat = LoggerFormatter.JsonIndented; }); 自定义日志输出时间格式 版本说明 以下内容仅限 Furion 4.5.1 + 版本使用。 services.AddConsoleFormatter(options => { options.DateFormat = \"yyyy-MM-dd HH:mm:ss.fffffff zzz dddd\"; }); info: 2022-09-28 02:02:20(+08:00) 星期三 System.Logging.EventBusService[0] #1 EventBus Hosted Service is running. info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[14] #1 Now listening on: https://localhost:5001 info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[14] #1 Now listening on: http://localhost:5000 info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1 Application started. Press Ctrl+C to shut down. info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1 Hosting environment: Development info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1 Content root path: D:\\Workplaces\\OpenSources\\Furion\\samples\\Furion.Web.Entry\\ 完整自定义日志格式化写入 版本说明 以下内容仅限 Furion 4.5.2 + 版本使用。 services.AddConsoleFormatter(options => { options.WriteHandler = (logMsg, scopeProvider, writer, fmtMsg, opt) => { writer.WriteLine(fmtMsg); }; });","s":"18.5.1 输出到控制台","u":"/docs/logging","h":"#1851-输出到控制台","p":3410},{"i":3432,"t":"基础使用 // 例子一:启动层根目录输出 services.AddFileLogging(\"application.log\"); // 例子二:支持路径 services.AddFileLogging(\"logs/application.log\"); // 例子三:支持日志追加还是覆盖,设置 true 为追加,false 为覆盖 services.AddFileLogging(\"application.log\", true); 从配置文件读取配置 特别注意 只有不在 .AddFile 第一个参数配置文件名才会自动加载配置,也就是文件名应该配置在配置文件中。 文件日志配置说明: { \"Logging\": { \"LogLevel\": { \"Default\": \"Information\" // .... appsettings 默认配置 }, \"File\": { \"FileName\": \"application.log\", // 日志文件完整路径或文件名,推荐 .log 作为拓展名 \"Append\": true, // 追加到已存在日志文件或覆盖它们 \"MinimumLevel\": \"Information\", // 最低日志记录级别 \"FileSizeLimitBytes\": 0, // 控制每一个日志文件最大存储大小,单位是 B,也就是 1024 才等于 1KB,默认无限制,如果指定了该值,那么日志文件大小超出了该配置就会创建新的日志文件,新创建的日志文件命名规则:文件名+[递增序号].log \"MaxRollingFiles\": 0 // 控制最大创建的日志文件数量,默认无限制,配合 FileSizeLimitBytes 使用,如果指定了该值,那么超出该值将从最初日志文件中从头写入覆盖 } }, // 自定义配置节点 \"MyLogger\": { \"FileName\": \"application.log\", \"Append\": true, \"MinimumLevel\": \"Information\", \"FileSizeLimitBytes\": 0, \"MaxRollingFiles\": 0 } } // 例子一:默认读取 Logging:File 节点 services.AddFileLogging(); // 例子二:默认读取 Logging:File 节点,支持更多配置 services.AddFileLogging(options => { options.MinimumLevel = LogLevel.Warning; // 其他配置... }); // 例子三:自定义配置节点 services.AddFileLogging(() => \"MyLogger\"); // 例子四:自定义配置节点,支持更多配置 services.AddFileLogging(() => \"MyLogger\", options => { options.MinimumLevel = LogLevel.Warning; // 其他配置... }); 自定义日志文件名规则 // 例子一:支持系统环境变量,如%SystemDrive%,%SystemRoot% services.AddFileLogging(\"application%SystemDrive%-%SystemRoot%.log\"); // 例子二:每天创建一个日志文件 services.AddFileLogging(\"application-{0:yyyy}-{0:MM}-{0:dd}.log\", options => { options.FileNameRule = fileName => { return string.Format(fileName, DateTime.UtcNow); }; }); // 例子三,任何自己喜欢的命名规则 services.AddFileLogging(\"application-{0:yyyy}-{0:MM}-{0:dd}.log\", options => { options.FileNameRule = fileName => { // your rule... }; }); // 例子四,批量设置多个 Array.ForEach(new[] { LogLevel.Information, LogLevel.Warning, LogLevel.Error }, logLevel => { services.AddFileLogging(\"application-{1}-{0:yyyy}-{0:MM}-{0:dd}.log\", options => { options.FileNameRule = fileName => string.Format(fileName, DateTime.UtcNow, logLevel.ToString()); options.WriteFilter = logMsg => logMsg.LogLevel == logLevel; }); }); 日志过滤器/筛选器 通过日志筛选器可以对日志进行归类写入 // 例子一:根据日志级别输出 services.AddFileLogging(\"infomation.log\", options => { options.WriteFilter = (logMsg) => { return logMsg.LogLevel == LogLevel.Information; }; }); services.AddFileLogging(\"error.log\", options => { options.WriteFilter = (logMsg) => { return logMsg.LogLevel == LogLevel.Error; }; }); // 例子二,根据任何规则,比如特定的类名 services.AddFileLogging(\"someclass.log\", options => { options.WriteFilter = (logMsg) => { return logMsg.LogName.Contains(\"SomeClassName\"); }; }); 自定义日志模板 默认情况下,Furion 提供了标准的日志输出模板,如: 2022-07-23T20:16:29.3459053+08:00 [INF] [Furion.EventBus.EventBusHostedService] [0] EventBus Hosted Service is running. 2022-07-23T20:16:29.5827366+08:00 [INF] [Microsoft.Hosting.Lifetime] [0] Application started. Press Ctrl+C to shut down. 2022-07-23T20:16:29.5828798+08:00 [INF] [Microsoft.Hosting.Lifetime] [0] Hosting environment: Development 2022-07-23T20:16:29.5829377+08:00 [INF] [Microsoft.Hosting.Lifetime] [0] Content root path: C:\\Workplaces\\Furion\\samples\\Furion.Web.Entry\\ 如需自定义: // 例子一,自定义日志模板(常用) services.AddFileLogging(\"mytemplate.log\", options => { options.MessageFormat = (logMsg) => { var stringBuilder = new StringBuilder(); stringBuilder.Append(DateTime.Now.ToString(\"o\")); // 其他的。。。自己组装 return stringBuilder.ToString(); }; }); // 例子二,需要输出 json 格式,比如对接阿里云日志,kibana第三方日志使用这个 services.AddFileLogging(\"mytemplate.log\", options => { options.MessageFormat = (logMsg) => { // 高性能写入 return logMsg.WriteArray(writer => { writer.WriteStringValue(DateTime.Now.ToString(\"o\")); writer.WriteStringValue(logMsg.LogLevel.ToString()); writer.WriteStringValue(logMsg.LogName); writer.WriteNumberValue(logMsg.EventId.Id); writer.WriteStringValue(logMsg.Message); writer.WriteStringValue(logMsg.Exception?.ToString()); }); }; }); // 例子二,需要输出 json (自定义)格式,比如对接阿里云日志,kibana第三方日志使用这个 services.AddFileLogging(\"mytemplate.log\", options => { options.MessageFormat = (logMsg) => { // 高性能写入 return logMsg.Write(writer => { // write 对象为 Utf8JsonWriter,可通过流写入,性能极高 }); }; }); // 输出为 JSON 格式,Furion 4.5.2+ services.AddFileLogging(\"mytemplate.log\", options => { options.MessageFormat = LoggerFormatter.Json; // Furion 4.8.0+ 新增 JSON 美化输出 options.MessageFormat = LoggerFormatter.JsonIndented; }); 日志写入失败处理 有时候可能因为日志文件被打开或者其他应用程序占用了,那么就会导致日志写入失败,这时候可以进行其他相关处理: // 例子一:其他处理 services.AddFileLogging(\"template-obj.log\", options => { options.HandleWriteError = (writeError) => { // ~~ }; }); // 例子二,启用备用日志文件功能,也就是如果文件被占用了,可以创建新的备用日志继续写入,推荐!!! services.AddFileLogging(\"template-obj.log\", options => { options.HandleWriteError = (writeError) => { writeError.UseRollbackFileName(Path.GetFileNameWithoutExtension(writeError.CurrentFileName) + \"-oops\" + Path.GetExtension(writeError.CurrentFileName)); }; }); 自定义日志输出时间格式 版本说明 以下内容仅限 Furion 4.5.1 + 版本使用。 services.AddFileLogging(\"application.log\", options => { options.DateFormat = \"yyyy-MM-dd HH:mm:ss.fffffff zzz dddd\"; }); info: 2022-09-28 02:02:20(+08:00) 星期三 System.Logging.EventBusService[0] #1 EventBus Hosted Service is running. info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[14] #1 Now listening on: https://localhost:5001 info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[14] #1 Now listening on: http://localhost:5000 info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1 Application started. Press Ctrl+C to shut down. info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1 Hosting environment: Development info: 2022-09-28 02:02:22(+08:00) 星期三 Microsoft.Hosting.Lifetime[0] #1 Content root path: D:\\Workplaces\\OpenSources\\Furion\\samples\\Furion.Web.Entry\\","s":"18.5.2 输出到文件","u":"/docs/logging","h":"#1852-输出到文件","p":3410},{"i":3434,"t":"将日志输出到数据库中也是非常常见的需求,Furion 把该功能做到了非常简单,支持任何存储介质。 在写入数据库/其他存储介质之前需创建数据库日志写入器并实现 IDatabaseLoggingWriter 接口,支持多个,如: using Furion.Logging; namespace YourProject.Core; public class DatabaseLoggingWriter : IDatabaseLoggingWriter { // 支持构造函数注入任何实例,会自动释放任何服务,比如注入 IRepository,或者 SqlSugarClient public DatabaseLoggingWriter() { } public void Write(LogMessage logMsg, bool flush) { // 这里写你任何插入数据库的操作,无需 try catch } } 你没看错,就这么简单!! 基础使用 // 例子一,默认配置 services.AddDatabaseLogging(options => {}); // 例子二:自定义配置 services.AddDatabaseLogging(options => { options.MinimumLevel = LogLevel.Warning; // 其他配置... }); 从配置文件中读取 特别注意 只有不在 .AddDatabase 第一个参数为空才会自动加载配置。 数据库日志配置说明: { \"Logging\": { \"LogLevel\": { \"Default\": \"Information\" // .... appsettings 默认配置 }, \"Database\": { \"MinimumLevel\": \"Information\" // 最低日志记录级别 } }, // 自定义配置节点 \"MyLogger\": { \"MinimumLevel\": \"Information\" } } // 例子一:默认读取 Logging:Database 节点 services.AddDatabaseLogging(); // 例子二:默认读取 Logging:Database 节点,支持更多配置 services.AddDatabaseLogging(default(string), options => { options.MinimumLevel = LogLevel.Warning; // 其他配置... }); // 例子三:自定义配置节点 services.AddDatabaseLogging(\"MyLogger\"); // 或 services.AddDatabaseLogging(() => \"MyLogger\"); // 例子四:自定义配置节点,支持更多配置 services.AddDatabaseLogging(\"MyLogger\", options => { options.MinimumLevel = LogLevel.Warning; // 其他配置... }); // 或 services.AddDatabaseLogging(() => \"MyLogger\", options => { options.MinimumLevel = LogLevel.Warning; // 其他配置... }); 日志过滤器/筛选器 通过日志筛选器可以对日志进行归类写入 // 例子一:根据日志级别输出,可以分别定义 IDatabaseLoggingWriter,也可以用同一个底层进行判断 services.AddDatabaseLogging(options => { options.WriteFilter = (logMsg) => { return logMsg.LogLevel == LogLevel.Information; }; }); // 可以分别定义 IDatabaseLoggingWriter,也可以用同一个底层进行判断 services.AddDatabaseLogging(options => { options.WriteFilter = (logMsg) => { return logMsg.LogLevel == LogLevel.Error; }; }); // 例子二,根据任何规则,比如特定的类名 services.AddDatabaseLogging(options => { options.WriteFilter = (logMsg) => { return logMsg.LogName.Contains(\"SomeClassName\"); }; }); 自定义日志模板 services.AddDatabaseLogging(options => { options.MessageFormat = (logMsg) => { var stringBuilder = new StringBuilder(); stringBuilder.Append(DateTime.Now.ToString(\"o\")); // 其他的。。。自己组装 return stringBuilder.ToString(); }; }); // 输出为 JSON 格式,Furion 4.5.2+ services.AddDatabaseLogging(options => { options.MessageFormat = LoggerFormatter.Json; // Furion 4.8.0+ 新增 JSON 美化输出 options.MessageFormat = LoggerFormatter.JsonIndented; }); 日志写入失败处理 有时候可能因为数据库连接异常或其他原因连接池满,那么就会导致日志写入失败,这时候可以进行其他相关处理: // 例子一:其他处理 services.AddDatabaseLogging(options => { options.HandleWriteError = (writeError) => { // ~~ }; });","s":"18.5.3 输出到数据库/其他存储介质","u":"/docs/logging","h":"#1853-输出到数据库其他存储介质","p":3410},{"i":3436,"t":"Furion 也提供了运行时动态创建日志提供器并写入: public class ContactModel : PageModel { private readonly ILogger _logger; public ContactModel(ILoggerFactory logger) { // 支持所有 AddLoggingFile 和 AddDatabaseFile 配置 _logger = logger.AddFile(....).CreateLogger(\"MyCategory\"); } public void OnGet() { _logger.LogInformation(\"GET Pages.ContactModel called.\"); } }","s":"18.5.4 ILoggerFactory 方式","u":"/docs/logging","h":"#1854-iloggerfactory-方式","p":3410},{"i":3438,"t":"Furion 也提供了原生 services.AddLogging(builder => {}) 方式配置,如 services.AddLogging(builder => { builder.AddFile(\"applicaion.log\"); builder.AddDatabase(); //.... });","s":"18.5.5 ILoggingBuilder 方式","u":"/docs/logging","h":"#1855-iloggingbuilder-方式","p":3410},{"i":3440,"t":"在 ASP.NET 6 中,框架默认提供了 app.UseHttpLogging() 记录 HTTP 请求日志功能,详细了解可查看官方文档 ASP.NET Core - HTTP 日志记录 当然也可以自定义中间件的方式写,只需要注入 ILogger<> 接口即可。","s":"18.5.6 记录请求日志","u":"/docs/logging","h":"#1856-记录请求日志","p":3410},{"i":3442,"t":"默认情况下,微软在 appsettings.json 和 appsettings.Development.json 中配置了 Default 日志级别,如需自定义: { \"Logging\": { \"LogLevel\": { \"Default\": \"Information\" } } } 这时候只需要修改 Default 为 Debug 或 Trace 即可,注意不同环境加载不同的配置文件。开发环境应修改 appsettings.Development.json 下的配置。","s":"18.5.7 Debug 和 Trace 默认不输出问题","u":"/docs/logging","h":"#1857-debug-和-trace-默认不输出问题","p":3410},{"i":3444,"t":"在 Furion 3.9.1 版本新增了 [LoggingMonitor] 特性,支持在控制器或操作中贴该特性,可以实现强大的请求日志监听,方便测试,如:","s":"18.6 [LoggingMonitor] 监听日志","u":"/docs/logging","h":"#186-loggingmonitor-监听日志","p":3410},{"i":3446,"t":"using Furion.Logging; namespace Furion.Application; public class TestLoggerServices : IDynamicApiController { [LoggingMonitor] public PersonDto GetPerson(int id) { return new PersonDto { Id = id }; } } [LoggingMonitor] 支持以下配置: Title:配置标题,string 类型,默认 Logging Monitor WithReturnValue:是否包含返回值打印,bool 类型,默认 true,Furion 4.3.9+ 有效 ReturnValueThreshold:配置返回值字符串阈值,int 类型,默认 0 全量输出,Furion 4.3.9+ 有效 JsonBehavior:配置 LoggingMonitor Json 输出行为,默认 None,Furion 4.5.2+ 有效 JsonIndented:配置 LoggingMonitor Json 格式化行为,bool 类型,默认 false,Furion 4.8.0+ 有效 输出日志为: ┏━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━ ┣ Furion.Application.TestLoggerServices.GetPerson (Furion.Application) ┣ ┣ 控制器名称: TestLoggerServices ┣ 操作名称: GetPerson ┣ 路由信息: [area]: ; [controller]: test-logger; [action]: person ┣ 请求方式: POST ┣ 请求地址: https://localhost:44316/api/test-logger/person/11 ┣ 来源地址: https://localhost:44316/api/index.html ┣ 浏览器标识: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62 ┣ 客户端 IP 地址: 0.0.0.1 ┣ 服务端 IP 地址: 0.0.0.1 ┣ 服务端运行环境: Development ┣ 执行耗时: 31ms ┣ ━━━━━━━━━━━━━━━ 授权信息 ━━━━━━━━━━━━━━━ ┣ JWT Token: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY1ODcxNjc5NywibmJmIjoxNjU4NzE2Nzk3LCJleHAiOjE2NTg3MTc5OTcsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.VYZkwwqCwlUy3aJjuL-og62I0rkxNQ96kSjEm3VgXtg ┣ ┣ UserId (integer): 1 ┣ Account (string): admin ┣ iat (integer): 1658716797 ┣ nbf (integer): 1658716797 ┣ exp (integer): 1658717997 ┣ iss (string): dotnetchina ┣ aud (string): powerby Furion ┣ ━━━━━━━━━━━━━━━ 参数列表 ━━━━━━━━━━━━━━━ ┣ Content-Type: ┣ ┣ id (Int32): 11 ┣ ━━━━━━━━━━━━━━━ 返回信息 ━━━━━━━━━━━━━━━ ┣ 类型: Furion.Application.Persons.PersonDto ┣ 返回值: {\"Id\":11,\"Name\":null,\"Age\":0,\"Address\":null,\"PhoneNumber\":null,\"QQ\":null,\"CreatedTime\":\"0001-01-01T00:00:00+00:00\",\"Childrens\":null,\"Posts\":null} ┗━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━","s":"18.6.1 特性配置","u":"/docs/logging","h":"#1861-特性配置","p":3410},{"i":3448,"t":"如需全局启用 LoggingMonitor 功能,无需在每个控制器或者方法中贴,全局注册如下: services.AddMvcFilter(); Furion 4.0.2 新推荐配置 在 Furion 4.0.2 版本中新增了非常灵活方便的 services.AddMonitorLogging() 服务配置,可在配置中随意控制哪个类哪个方法启用或不启用。 注册服务 services.AddMonitorLogging(); // 默认读取 Logging:Monitor 下配置,支持传入参数自定义 添加配置 { \"Logging\": { \"Monitor\": { \"GlobalEnabled\": false, // 是否启用全局拦截,默认 `false` \"IncludeOfMethods\": [], // 是否指定拦截特定方法,当 GlobalEnabled: false 有效 \"ExcludeOfMethods\": [], // 是否指定排除特定方法,当 GlobalEnabled: true 有效 \"BahLogLevel\": \"Information\", // 配置 Oops.Oh 和 Oops.Bah 业务日志输出级别,默认 Information \"WithReturnValue\": true, // 配置是否包含返回值,默认 `true`,Furion 4.3.9+ 有效 \"ReturnValueThreshold\": 0, // 配置返回值字符串阈值,默认 0,全量输出,Furion 4.3.9+ 有效 \"JsonBehavior\": \"None\", // 配置 LoggingMonitor Json 输出行为,默认 None,Furion 4.5.2+ 有效 \"JsonIndented\": false, // 配置 LoggingMonitor Json 格式化行为,默认 false,Furion 4.8.2+ 有效 \"MethodsSettings\": [ // 配置被监视方法更多信息,Furion 4.3.9+ 有效 { \"FullName\": \"Furion.Application.TestLoggerServices.MethodName\", // 方法完全限定名 \"WithReturnValue\": true, // 配置是否包含返回值,默认 `true`,Furion 4.3.9+ 有效 \"ReturnValueThreshold\": 0, // 配置返回值字符串阈值,默认 0,全量输出,Furion 4.3.9+ 有效 \"JsonIndented\": false // 配置 LoggingMonitor Json 格式化行为,默认 false,Furion 4.8.2+ 有效 } ] } } } IncludeOfMethods 和 ExcludeOfMethods 方法签名格式为:类完全限定名.方法名,如:Furion.Application.TestNamedServices.GetName,Furion.Application.TestNamedServices 是类名,GetName 是方法名。 如果配置了全局请求监视日志,对个别不需要监视的接口方法只需要贴 [SuppressMonitor] 特性即可。","s":"18.6.2 全局配置","u":"/docs/logging","h":"#1862-全局配置","p":3410},{"i":3450,"t":"版本说明 以下内容仅限 Furion 4.3.9 + 版本使用。 支持 LoggingMonitor 写入日志拦截,如添加额外数据: services.AddMonitorLogging(options => { options.ConfigureLogger((logger, logContext, context) => { var httpContext = context.HttpContext; logContext.Set(\"extra\", \"其他数据\"); }); }); 除此之外,还支持配置 json 路径: services.AddMonitorLogging(jsonKey: \"YourKey:Monitor\");","s":"18.6.3 更多配置","u":"/docs/logging","h":"#1863-更多配置","p":3410},{"i":3452,"t":"版本说明 以下内容仅限 Furion 4.5.2 + 版本使用。 全局/局部启用 Json 输出配置 // 全局 services.AddMonitorLogging(options => { options.JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson; options.JsonIndented = true; // 是否美化 JSON,Furion 4.8.0+ 版本有效 }); // 局部 [LoggingMonitor(JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson)] // 是否美化 JSON,Furion 4.8.0+ 版本有效 [LoggingMonitor(JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson, JsonIndented = true)] 关于 JsonBehavior 只有设置为 JsonBehavior.OnlyJson 时才不会输出美观的日志。 写入存储介质 using Furion.Logging; namespace YourProject.Core; public class DatabaseLoggingWriter : IDatabaseLoggingWriter { // 支持构造函数注入任何实例,会自动释放任何服务,比如注入 IRepository,或者 SqlSugarClient public DatabaseLoggingWriter() { } public void Write(LogMessage logMsg, bool flush) { // 如果 JsonBehavior 配置为 OnlyJson 或者 All,那么 Context 就包含 loggingMonitor 的值 // 如果 JsonBehavior 配置为 OnlyJson,那么可直接通过 logMsg.Message 获取结果就是 json 格式 if (logMsg.LogName == \"System.Logging.LoggingMonitor\") { var jsonString = logMsg.Context.Get(\"loggingMonitor\"); } // 这里写你任何插入数据库的操作,无需 try catch } } Json 输出格式如下: { \"controllerName\": \"test-logger\", \"controllerTypeName\": \"TestLoggerServices\", \"actionName\": \"person\", \"actionTypeName\": \"GetPerson\", \"areaName\": null, \"displayName\": \"Furion.Application.TestLoggerServices.GetPerson (Furion.Application)\", \"localIPv4\": \"0.0.0.1\", \"remoteIPv4\": \"0.0.0.1\", \"httpMethod\": \"GET\", \"requestUrl\": \"https://localhost:5001/api/test-logger/person/2\", \"refererUrl\": \"https://localhost:5001/api/index.html?urls.primaryName=数据库操作演示\", \"environment\": \"Development\", \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.53\", \"requestHeaderAuthorization\": \"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY2NDQ1MDUwNSwibmJmIjoxNjY0NDUwNTA1LCJleHAiOjE2NjQ0NTE3MDUsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.-xocNcDQGoXClceoVU5QAHIkTcOZ7ZXo0hEbzghDfFI\", \"timeOperationElapsedMilliseconds\": 55, \"authorizationClaims\": [ { \"type\": \"UserId\", \"valueType\": \"integer\", \"value\": \"1\" }, { \"type\": \"Account\", \"valueType\": \"string\", \"value\": \"admin\" }, { \"type\": \"iat\", \"valueType\": \"integer\", \"value\": \"1664450505\" }, { \"type\": \"nbf\", \"valueType\": \"integer\", \"value\": \"1664450505\" }, { \"type\": \"exp\", \"valueType\": \"integer\", \"value\": \"1664451705\" }, { \"type\": \"iss\", \"valueType\": \"string\", \"value\": \"dotnetchina\" }, { \"type\": \"aud\", \"valueType\": \"string\", \"value\": \"powerby Furion\" } ], \"parameters\": [ { \"name\": \"id\", \"type\": \"System.Int32\", \"value\": 2 } ], \"returnInformation\": { \"type\": \"Furion.UnifyResult.RESTfulResult`1[[System.Object, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]\", \"actType\": \"Furion.Application.Persons.PersonDto\", \"value\": { \"StatusCode\": 200, \"Data\": { \"Id\": 2, \"Name\": null, \"Age\": 0, \"Address\": null, \"PhoneNumber\": null, \"QQ\": null, \"CreatedTime\": \"0001-01-01T00:00:00+00:00\", \"Childrens\": null, \"Posts\": null }, \"Succeeded\": true, \"Errors\": null, \"Extras\": null, \"Timestamp\": 1664450517341 } }, \"exception\": { \"type\": \"System.DivideByZeroException\", \"message\": \"Attempted to divide by zero.\", \"stackTrace\": \" at Furion.Application.TestLoggerServices.测试日志监听8(Int32 id) in D:\\\\Workplaces\\\\OpenSources\\\\Furion\\\\samples\\\\Furion.Application\\\\TestLoggerServices.cs:line 78\\r\\n at lambda_method103(Closure , Object , Object[] )\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Logged|12_1(ControllerActionInvoker invoker)\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\" }, \"validation\": { \"errorCode\": null, \"originErrorCode\": null, \"message\": \"出错了啊。。。。\" } }","s":"18.6.4 JSON 格式","u":"/docs/logging","h":"#1864-json-格式","p":3410},{"i":3454,"t":"版本说明 以下内容仅限 Furion 4.5.9 + 版本使用。 在 Furion 4.5.9+ 版本新增了 WriteFilter 过滤功能,可根据自定义逻辑自定义过滤拦截: services.AddMonitorLogging(options => { options.WriteFilter = (context) => { // 获取控制器/操作描述器 var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; // 你的逻辑....,不需要拦截返回 false,否则 true return true; }; });","s":"18.6.5 全局过滤 WriteFilter","u":"/docs/logging","h":"#1865-全局过滤-writefilter","p":3410},{"i":3456,"t":"版本说明 以下内容仅限 Furion 4.6.1 + 版本使用。 有时接口的返回值包含不能被序列化的类型或者想忽略某些属性名不被序列化,这时候就需要用到这个。 局部配置 // 忽略名称和属性,支持单一配置或局部配置 [LoggingMonitor(JsonBehavior = JsonBehavior.OnlyJson , IgnorePropertyNames = new[] { \"Bytes\" } , IgnorePropertyTypes = new[] { typeof(byte[]) })] public object 测试指定忽略指定序列化类型(int id) { return new { Id = 10, Bytes = File.ReadAllBytes(\"image.png\") }; } 全局配置 // 忽略名称和属性,支持单一配置或局部配置 services.AddMonitorLogging(options => { options.IgnorePropertyNames = new[] { \"Byte\" }; options.IgnorePropertyTypes = new[] { typeof(byte[]) }; });","s":"18.6.6 输出 JSON 支持忽略属性名或属性类型","u":"/docs/logging","h":"#1866-输出-json-支持忽略属性名或属性类型","p":3410},{"i":3458,"t":"注册 .AddDatabaseLogging<> 服务: services.AddDatabaseLogging(options => { options.WriteFilter = (logMsg) => { return logMsg.LogName == \"System.Logging.LoggingMonitor\"; }; }); 写入数据库 using Furion.Logging; namespace YourProject.Core; public class DatabaseLoggingWriter : IDatabaseLoggingWriter { // 任何数据库 ORM 注入。。。 public DatabaseLoggingWriter() { } public void Write(LogMessage logMsg, bool flush) { // 将 logMsg 的属性一一插入到数据库中~ } } 单个 DatabaseLoggingWriter 情况 如果已经全局注册了: services.AddDatabaseLogging(); // 注意这里没有过滤 logName 且不想多注册一个数据库日志服务,那么只需要在代码中过滤即可: using Furion.Logging; namespace YourProject.Core; public class DatabaseLoggingWriter : IDatabaseLoggingWriter { // 任何数据库 ORM 注入。。。 public DatabaseLoggingWriter() { } public void Write(LogMessage logMsg, bool flush) { // 将 logMsg 的属性一一插入到数据库中~ if(logMsg.LogName == \"System.Logging.LoggingMonitor\") { // 写入审计表数据库 } else { // 写入其他表数据库 } } }","s":"18.6.7 将 LoggingMonitor 写入数据库","u":"/docs/logging","h":"#1867-将-loggingmonitor-写入数据库","p":3410},{"i":3460,"t":"在 Furion 框架中默认集成了 MiniProfiler 组件并与 Swagger 进行了结合,如需打印日志或调试代码,只需调用以下方法即可: App.PrintToMiniProfiler(\"分类\", \"状态\", \"要打印的消息\");","s":"18.7 打印日志到 Swagger 中","u":"/docs/logging","h":"#187-打印日志到-swagger-中","p":3410},{"i":3462,"t":"StringLoggingPart.Default().SetMessage(\"这是一个日志\").LogInformation();","s":"18.8 静态 Default() 方式构建","u":"/docs/logging","h":"#188-静态-default-方式构建","p":3410},{"i":3464,"t":"在 Furion v3.5.3+ 新增了 TP.Wrapper(...) 规范模板,使用如下: // 生成模板字符串 var template = TP.Wrapper(\"Furion 框架\", \"让 .NET 开发更简单,更通用,更流行。\", \"##作者## 百小僧\", \"##当前版本## v3.5.3\", \"##文档地址## https://furion.icu\", \"##Copyright## 百小僧, Baiqian Co.,Ltd.\"); Console.WriteLine(template); 日志打印模板如下: ┏━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━ ┣ 让 .NET 开发更简单,更通用,更流行。 ┣ ┣ 作者: 百小僧 ┣ 当前版本: v3.5.3 ┣ 文档地址: https://furion.icu ┣ Copyright: 百小僧, Baiqian Co.,Ltd. ┗━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━ 关于属性生成 如果列表项以 ##属性名## 开头,自动生成 属性名: 作为行首且自动等宽对齐。 Furion 3.9.1 之前版本使用 [属性名] 开头。","s":"18.9 规范日志模板","u":"/docs/logging","h":"#189-规范日志模板","p":3410},{"i":3466,"t":"版本说明 以下内容仅限 Furion 4.6.0 + 版本使用。 有时候我们希望为日志提供额外数据,这时候可通过 .ScopeContext() 配置,如: // 写法一 using (var scope = _logger.ScopeContext(ctx => ctx.Set(\"Name\", \"Furion\").Set(\"UserId\", 10))) { _logger.LogInformation(\"我是一个日志 {id}\", 20); } // 写法二 using var scope = _logger.ScopeContext(new Dictionary { { \"Name\", \"Furion\" }, { \"UserId\", 10 } }); _logger.LogInformation(\"我是一个日志 {id}\", 20); // 写法三 using var scope = _logger.ScopeContext(new LogContext { // .... }); _logger.LogInformation(\"我是一个日志 {id}\", 20); // 写法四 var (logger, scoped) = Log.ScopeContext(new LogContext { // ... }); logger.LogInformation(\"我是一个日志 {id}\", 20); scoped?.Dispose(); // 写法五 \"我是一个日志 {id}\".ScopeContext(new LogContext { // ... }).LogInformation(); 在 LogMessage 对象中使用: var value = logMsg.Context.Get(\"Key\"); // 比如在过滤中使用 services.AddFileLogging(\"infomation.log\", options => { options.WriteFilter = (logMsg) => { // 还可以设置给运行时使用:logMsg.Context.Set(...); return logMsg.Context.Get(\"Name\") == \"Furion\"; }; }); // 在 IDatabaseLoggingWriter 中使用 public void Write(LogMessage logMsg, bool flush) { var name = logMsg.Context.Get(\"Name\"); } 还可以实现共享日志上下文,如: public TestAppService: ITestAppService, IDisposable { private readonly ILogger _logger; private IDisposable _scopeProvider; public TestAppService(ILogger logger) { _logger = logger; // 添加全局用户信息上下文数据 _scopeProvider = _logger.ScopeContext(ctx => ctx.Set(\"uid\", \"100\").Set(\"uname\", \"百小僧\")); } public string GetName(int id) { // 共享全局上下文数据 _logger.LogInformation(\"写入新的日志\"); return \"Furion\"; } public string GetTags(int id) { // 额外新增上下文数据 using var scope = _logger.ScopeContext(ctx => ctx.Set(\"key\", \"value\")); _logger.LogInformation(\"设置额外的上上下文日志\"); return \"百小僧\"; } public void Dispose() { _scopeProvider.Dispose(); } }","s":"18.10 日志上下文","u":"/docs/logging","h":"#1810-日志上下文","p":3410},{"i":3468,"t":"默认情况下,.NET Core 底层默认输出了很多日志,如需关闭只需在 appsettings.json 和 appsettings.Development.json 中添加 \"命名空间/日志类别\":\"最低日志级别\" 日志类别过滤即可,如: { \"Logging\": { \"LogLevel\": { \"Default\": \"Information\", \"Microsoft.AspNetCore\": \"Warning\", \"Microsoft.EntityFrameworkCore\": \"Information\", \"System.Net.Http.HttpClient\": \"Warning\", \"命名空间/日志类别\": \"Warning\" } } } 小提醒:过滤 .NET Core 底层日志最低日志级别通常设置为 Warning。","s":"18.11 关闭 .NET Core 底层的日志","u":"/docs/logging","h":"#1811-关闭-net-core-底层的日志","p":3410},{"i":3470,"t":"微软提供的 EFCore 或者第三方 ORM 本身操作数据库时自带日志输出,这就会导致 IDatabaseLoggingWriter 的 Write 死循环,解决这个问题有以下方法: 创建新的数据库操作实例并关闭日志 更新到 Furion 4.7.0+ 版本 (推荐) 自行根据业务逻辑过滤 如不存在该问题可关闭框架自带死循环检测功能(对性能有提升作用): services.AddDatabaseLogging(options => { options.IgnoreReferenceLoop = false; });","s":"18.12 关于数据库日志循环输出日志","u":"/docs/logging","h":"#1812-关于数据库日志循环输出日志","p":3410},{"i":3472,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 日志 知识可查阅 ASP.NET Core - 日志 章节 和 Serilog 文档。","s":"18.13 反馈与建议","u":"/docs/logging","h":"#1813-反馈与建议","p":3410},{"i":3474,"t":"版本说明 以下内容仅限 Furion 1.16.0 + 版本使用。","s":"19. 远程请求","u":"/docs/http","h":"","p":3473},{"i":3476,"t":"在互联网大数据的驱动下,平台或系统免不了需要和第三方进行数据交互,而第三方往往提供了 RESTful API 接口规范,这个时候就需要通过 Http 请求第三方接口进行数据传输交互。 也就是本章节所说的远程请求。","s":"19.1 关于远程请求","u":"/docs/http","h":"#191-关于远程请求","p":3473},{"i":3478,"t":"跨系统、跨设备通信 实现多个系统数据传输交互 跨编程语言协同开发","s":"19.2 远程请求的作用","u":"/docs/http","h":"#192-远程请求的作用","p":3473},{"i":3481,"t":"使用之前需在 Startup.cs 注册 远程请求服务 public void ConfigureServices(IServiceCollection services) { services.AddRemoteRequest(); }","s":"19.3.1 注册服务","u":"/docs/http","h":"#1931-注册服务","p":3473},{"i":3483,"t":"Furion 提供两种方式访问发送远程请求。 IHttpDispatchProxy 代理方式 字符串拓展方式 定义代理请求的 接口 并继承 IHttpDispatchProxy 接口 public interface IHttp : IHttpDispatchProxy { [Get(\"https://www.furion.icu/get\")] Task GetXXXAsync(); [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync(); [Put(\"https://www.furion.icu/put\")] Task PutXXXAsync(); [Delete(\"https://www.furion.icu/delete\")] Task DeleteXXXAsync(); [Patch(\"https://www.furion.icu/patch\")] Task PatchXXXAsync(); [Head(\"https://www.furion.icu/head\")] Task HeadXXXAsync(); } 通过构造函数注入 接口 using Furion.DynamicApiController; using Furion.RemoteRequest.Extensions; namespace Furion.Application { public class RemoteRequestService : IDynamicApiController { private readonly IHttp _http; public RemoteRequestService(IHttp http) { _http = http; } public async Task GetData() { var data = await _http.GetXXXAsync(); } } } var response = await \"https://www.furion.icu/get\".GetAsync(); var response = await \"https://www.furion.icu/post\".PostAsync(); var response = await \"https://www.furion.icu/put\".PutAsync(); var response = await \"https://www.furion.icu/delete\".DeleteAsync(); var response = await \"https://www.furion.icu/patch\".PatchAsync(); var response = await \"https://www.furion.icu/head\".HeadAsync(); 需引入 using Furion.RemoteRequest.Extensions 命名空间。","s":"19.3.2 使用方式","u":"/docs/http","h":"#1932-使用方式","p":3473},{"i":3486,"t":"// 发送 Get 请求 var response = await \"https://www.furion.icu/get\".GetAsync(); // 发送 Post 请求 var response = await \"https://www.furion.icu/post\".PostAsync(); // 发送 Put 请求 var response = await \"https://www.furion.icu/put\".PutAsync(); // 发送 Delete 请求 var response = await \"https://www.furion.icu/delete\".DeleteAsync(); // 发送 Patch 请求 var response = await \"https://www.furion.icu/patch\".PatchAsync(); // 发送 Head 请求 var response = await \"https://www.furion.icu/head\".HeadAsync(); // 手动指定发送特定请求 var response = await \"https://www.furion.icu/post\".SetHttpMethod(HttpMethod.Post) .SendAsync();","s":"19.4.1 内置请求方式","u":"/docs/http","h":"#1941-内置请求方式","p":3473},{"i":3488,"t":"// 该方式在 Furion v3.0.0 已移除,多此一举了 await \"\".SetRequestUrl(\"https://www.furion.icu/\");","s":"19.4.2 设置请求地址","u":"/docs/http","h":"#1942-设置请求地址","p":3473},{"i":3490,"t":"await \"https://www.furion.icu/post\".SetHttpMethod(HttpMethod.Get);","s":"19.4.3 设置请求方式","u":"/docs/http","h":"#1943-设置请求方式","p":3473},{"i":3492,"t":"// 字典方式 await \"https://www.furion.icu/post/{id}?name={name}&id={p.Id}\".SetTemplates(new Dictionary { { \"id\", 1 }, { \"name\", \"Furion\" }, { \"p.Id\", new Person { Id = 1 } } }); // 对象/匿名对象方式 await \"https://www.furion.icu/post/{id}?name={name}\".SetTemplates(new { id = 1, name = \"Furion\" }); 注:模板替换区分大小写。","s":"19.4.4 设置地址模板","u":"/docs/http","h":"#1944-设置地址模板","p":3473},{"i":3494,"t":"// 字典方式 await \"https://www.furion.icu/post\".SetHeaders(new Dictionary { { \"Authorization\", \"Bearer 你的token\"}, { \"X-Authorization\", \"Bearer 你的刷新token\"} }); // 对象/匿名对象方式 await \"https://www.furion.icu/post\".SetHeaders(new { Authorization = \"Bearer 你的token\" });","s":"19.4.5 设置请求报文头","u":"/docs/http","h":"#1945-设置请求报文头","p":3473},{"i":3496,"t":"// 字典方式 await \"https://www.furion.icu/get\".SetQueries(new Dictionary { { \"id\", 1 }, { \"name\", \"Furion\"} }); // 对象/匿名对象方式 await \"https://www.furion.icu/get\".SetQueries(new { id = 1, name = \"Furion\" }); // Furion 4.7.3+ 新增忽略 null 值重载 await \"https://www.furion.icu/get\".SetQueries(new { id = 1, name = \"Furion\", nullValue = default(object) }, true); // 设置 true 则忽略 null 值 最终输出格式为:https://www.furion.icu/get?id=1&name=Furion。","s":"19.4.6 设置 URL 地址参数","u":"/docs/http","h":"#1946-设置-url-地址参数","p":3473},{"i":3498,"t":"全局配置方式 services.AddRemoteRequest(options=> { // 配置 Github 基本信息 options.AddHttpClient(\"github\", c => { c.BaseAddress = new Uri(\"https://api.github.com/\"); c.DefaultRequestHeaders.Add(\"Accept\", \"application/vnd.github.v3+json\"); c.DefaultRequestHeaders.Add(\"User-Agent\", \"HttpClientFactory-Sample\"); }); }); await \"get\".SetClient(\"github\"); 最终生成请求地址为:https://api.github.com/get。 局部配置方式 版本说明 以下内容仅限 Furion 4.3.8 + 版本使用。 await \"https://www.furion.icu\".SetClient(() => new HttpClient());","s":"19.4.7 设置请求客户端","u":"/docs/http","h":"#1947-设置请求客户端","p":3473},{"i":3500,"t":"// 传入对象 await \"https://www.furion.icu/api/user/add\".SetBody(new User { Id = 1, Name = \"Furion\" }); // 配置 Content-Type await \"https://www.furion.icu/api/user/add\".SetBody(new { Id = 1, Name = \"Furion\" }, \"application/json\"); // 设置 Encoding 编码 await \"https://www.furion.icu/api/user/add\".SetBody(new User { Id = 1, Name = \"Furion\" }, \"application/json\", Encoding.UTF8); // 处理 application/x-www-form-urlencoded 请求 await \"https://www.furion.icu/api/user/add\".SetBody(new Dictionary { { \"Id\", 1 }, { \"Name\", \"Furion\"} }, \"application/x-www-form-urlencoded\"); // 处理 application/xml、text/xml await \"https://www.furion.icu/api/user/add\".SetBody(\"somevalue\", \"application/xml\"); 特别注意 如果请求 Content-Type 设置为 application/x-www-form-urlencoded 类型,那么底层自动将数据进行 UrlEncode 编码处理,无需外部处理。","s":"19.4.8 设置 Body 参数","u":"/docs/http","h":"#1948-设置-body-参数","p":3473},{"i":3502,"t":"await \"https://www.furion.icu/post\".SetContentType(\"application/json\");","s":"19.4.9 设置 Content-Type","u":"/docs/http","h":"#1949-设置-content-type","p":3473},{"i":3504,"t":"await \"https://www.furion.icu/post\".SetContentEncoding(Encoding.UTF8);","s":"19.4.10 设置内容编码","u":"/docs/http","h":"#19410-设置内容编码","p":3473},{"i":3506,"t":"Furion 默认情况下采用 System.Text.Json 进行 JSON 序列化处理,如需设置第三方 JSON 提供器,则可以通过以下配置: // 泛型方式 await \"https://www.furion.icu/api/user/add\".SetJsonSerialization(); // 非泛型方式 await \"https://www.furion.icu/api/user/add\".SetJsonSerialization(typeof(NewtonsoftJsonSerializerProvider)); // 添加更多配置 await \"https://www.furion.icu/api/user/add\".SetJsonSerialization(new JsonSerializerSettings { }); // 比如配置缺省的序列化选项 await \"https://www.furion.icu\".SetJsonSerialization(default, new JsonSerializerOptions { // 中文乱码 Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping }) .GetAsAsync(); 关于 JSON 序列化提供器 如需了解更多 JSON 序列化知识可查阅 23. JSON 序列化 章节","s":"19.4.11 设置 JSON 序列化提供程序","u":"/docs/http","h":"#19411-设置-json-序列化提供程序","p":3473},{"i":3508,"t":"await \"https://www.furion.icu/api/user/add\".SetValidationState(); // 设置不验证 null 值 await \"https://www.furion.icu/api/user/add\".SetValidationState(includeNull: true); 支持类中 [Required] 等完整模型验证特性。","s":"19.4.12 启用 Body 参数验证","u":"/docs/http","h":"#19412-启用-body-参数验证","p":3473},{"i":3510,"t":"await \"https://www.furion.icu/\".OnRequesting((client, req) => { // req 为 HttpRequestMessage 对象 // 追加更多参数 req.AppendQueries(new Dictionary { { \"access_token\", \"xxxx\"} }); }); 支持多次拦截","s":"19.4.13 请求拦截","u":"/docs/http","h":"#19413-请求拦截","p":3473},{"i":3512,"t":"await \"https://www.furion.icu/\".OnClientCreating(client => { // client 为 HttpClient 对象 client.Timeout = 30000; // 设置超时时间 }); 支持多次拦截","s":"19.4.14 HttpClient 拦截","u":"/docs/http","h":"#19414-httpclient-拦截","p":3473},{"i":3514,"t":"await \"https://www.furion.icu/\".OnRequesting((client, req) => { // req 为 HttpRequestMessage 对象 }); 支持多次拦截","s":"19.4.15 请求之前拦截","u":"/docs/http","h":"#19415-请求之前拦截","p":3473},{"i":3516,"t":"await \"https://www.furion.icu/\".OnResponsing((client, res) => { // res 为 HttpResponseMessage 对象 }); 支持多次拦截","s":"19.4.16 成功请求拦截","u":"/docs/http","h":"#19416-成功请求拦截","p":3473},{"i":3518,"t":"await \"https://www.furion.icu/\".OnException((client, res, errors) => { // res 为 HttpResponseMessage 对象 }); 支持多次拦截","s":"19.4.17 请求异常拦截","u":"/docs/http","h":"#19417-请求异常拦截","p":3473},{"i":3520,"t":"Furion 远程请求默认提供四种返回值类型: HttpResponseMessage:请求响应消息类型 Stream:流类型 T:泛型 T 类型 String:字符串类型,也就是直接将网络请求结果内容字符串化 Byte[]:字节数组类型 如: // HttpResponseMessage var res = await \"https://www.furion.icu/\".GetAsync(); // Stream var (stream, encoding) = await \"https://www.furion.icu/\".GetAsStreamAsync(); // T var user = await \"https://www.furion.icu/\".GetAsAsync(); // String var str = await \"https://www.baidu.com\".GetAsStringAsync();","s":"19.4.18 各种返回值处理","u":"/docs/http","h":"#19418-各种返回值处理","p":3473},{"i":3522,"t":"Furion 4.4.0 以下版本 在 Furion 4.4.0+ 版本移除了 .SetBodyBytes 方式,原因是拓展性太差,新版本请使用 .SetFiles 方式。 有时候我们需要上传文件,需要设置 Content-Type 为 multipart/form-data 类型,如: // 支持单文件,bytes 可以通过 File.ReadAllBytes(文件路径) 获取 var res = await \"https://www.furion.icu/upload\".SetContentType(\"multipart/form-data\") .SetBodyBytes((\"键\", bytes, \"文件名\")).PostAsync(); // 支持多个文件 var res = await \"https://www.furion.icu/upload\".SetContentType(\"multipart/form-data\") .SetBodyBytes((\"键\", bytes, \"文件名\"),(\"键\", bytes, \"文件名\")).PostAsync(); // 支持单文件,Furion 4.5.8 版本支持 Stream 方式更新 var res = await \"https://www.furion.icu/upload\".SetContentType(\"multipart/form-data\") .SetBodyBytes((\"键\", fileStream, \"文件名\")).PostAsync(); // 支持多个文件,Furion 4.5.8 版本支持 Stream 方式更新 var res = await \"https://www.furion.icu/upload\".SetContentType(\"multipart/form-data\") .SetBodyBytes((\"键\", fileStream, \"文件名\"),(\"键\", fileStream, \"文件名\")).PostAsync(); 关于微信上传接口 如果遇到微信上传出现问题,则可设置 Content-Type 为:application/octet-stream,如: var result = await $\"https://api.weixin.qq.com/wxa/img_sec_check?access_token={token}\" .SetBodyBytes((\"media\", bytes, Path.GetFileName(imgPath))) .SetContentType(\"application/octet-stream\") .PostAsStringAsync(); Furion 4.4.0+ 版本 如果使用 Furion 4.4.0+ 版本,请使用以下的 .SetFiles 替代 .SetBodyBytes 操作。 // bytes 可以通过 File.ReadAllBytes(文件路径) 获取 var res = await \"https://www.furion.icu/upload\".SetContentType(\"multipart/form-data\") .SetFiles(HttpFile.Create(\"file\", bytes, \"image.png\")).PostAsync(); // 支持多个文件 var res = await \"https://www.furion.icu/upload\".SetContentType(\"multipart/form-data\") .SetFiles(HttpFile.CreateMultiple(\"files\", (bytes, \"image1.png\"), (bytes, \"image2.png\"))).PostAsync();","s":"19.4.19 设置 Byte[]/Stream 类型/上传文件","u":"/docs/http","h":"#19419-设置-bytestream-类型上传文件","p":3473},{"i":3524,"t":"有时候我们需要构建一个作用域的 IServiceProvider,这时只需要设置即可: var res = await \"https://www.furion.icu/upload\".SetRequestScoped(services);","s":"19.4.20 设置 IServiceProvider","u":"/docs/http","h":"#19420-设置-iserviceprovider","p":3473},{"i":3526,"t":"模板格式为:#(配置路径) var res = await \"#(Furion:Address)/upload\".GetAsync(); { \"Furion\": { \"Address\": \"https://www.furion.icu\" } }","s":"19.4.21 支持模板配置","u":"/docs/http","h":"#19421-支持模板配置","p":3473},{"i":3528,"t":"在 Furion v2.18+ 版本支持配置重试策略,如: var res = await \"https://www.furion.icu\".SetRetryPolicy(3, 1000).GetAsync(); 以上代码表示请求失败重试 3 次,每次延迟 1000ms 。","s":"19.4.22 重试策略","u":"/docs/http","h":"#19422-重试策略","p":3473},{"i":3530,"t":"在 Furion v3.2.0+ 版本支持GZip 压缩,如: var res = await \"https://www.furion.icu\".WithGZip().GetAsync();","s":"19.4.23 支持 GZip 压缩","u":"/docs/http","h":"#19423-支持-gzip-压缩","p":3473},{"i":3532,"t":"过去版本会对所有的 Url 进行 Uri.EscapeDataString 转码,在 Furion v3.8.0+ 版本支持 Url 转码设置,如: var res = await \"https://www.furion.icu\".WithEncodeUrl(false).GetAsync();","s":"19.4.24 设置 Url 转码","u":"/docs/http","h":"#19424-设置-url-转码","p":3473},{"i":3535,"t":"public interface IHttp : IHttpDispatchProxy { // 发送 Get 请求 [Get(\"https://www.furion.icu/get\")] Task GetXXXAsync(); // 发送 Post 请求 [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync(); // 发送 Put 请求 [Put(\"https://www.furion.icu/put\")] Task PutXXXAsync(); // 发送 Delete 请求 [Delete(\"https://www.furion.icu/delete\")] Task DeleteXXXAsync(); // 发送 Patch 请求 [Patch(\"https://www.furion.icu/patch\")] Task PatchXXXAsync(); // 发送 Head 请求 [Head(\"https://www.furion.icu/head\")] Task HeadXXXAsync(); }","s":"19.5.1 支持多种代理方式","u":"/docs/http","h":"#1951-支持多种代理方式","p":3473},{"i":3537,"t":"public interface IHttp : IHttpDispatchProxy { [Get(\"https://www.furion.icu/get/{id}?name={name}&number={p.PersonDetail.PhonNumber}\")] Task GetXXXAsync(int id, string name, Person p); } 注:模板替换区分大小写。","s":"19.5.2 设置地址模板","u":"/docs/http","h":"#1952-设置地址模板","p":3473},{"i":3539,"t":"Furion 框架远程请求代理模式提供三种方式设置请求报文头: 支持在接口中声明 支持在方法中声明 支持在参数中声明 [Headers(\"key\",\"value\")] [Headers(\"key1\",\"value2\")] // 设置多个 public interface IHttp : IHttpDispatchProxy { [Get(\"https://www.furion.icu/get/{id}?name={name}\"), Headers(\"key2\",\"value2\")] Task GetXXXAsync(int id, string name); [Get(\"https://www.furion.icu\")] Task GetXXX2Async(int id, [Headers]string token = default); [Get(\"https://www.furion.icu\")] Task GetXXX2Async(int id, string name, [Headers(\"别名\")]string token = default); }","s":"19.5.3 设置请求报文头","u":"/docs/http","h":"#1953-设置请求报文头","p":3473},{"i":3541,"t":"public interface IHttp : IHttpDispatchProxy { [Get(\"https://www.furion.icu/get/{id}?name={name}\")] Task GetXXXAsync(int id, string name); [Get(\"https://www.furion.icu/get/{p.Id}?name={p.Name}\")] Task GetXXXAsync(Person p); [Get(\"https://www.furion.icu/get\")] Task GetXXXAsync([QueryString]int id, [QueryString]string name); [Get(\"https://www.furion.icu/get\")] Task GetXXXAsync([QueryString]int id, [QueryString(\"别名\")]string name); // Furion 4.7.3 新增 IgnoreNullValueQueries 配置忽略空值 [Get(\"https://www.furion.icu/get\", IgnoreNullValueQueries = true)] Task GetXXXAsync([QueryString]int id, [QueryString]string name, [QueryString]string nullValue); } 最终输出格式为:https://www.furion.icu/get?id=1&name=Furion。","s":"19.5.4 设置 URL 地址参数","u":"/docs/http","h":"#1954-设置-url-地址参数","p":3473},{"i":3543,"t":"全局配置方式 services.AddRemoteRequest(options=> { // 配置 Github 基本信息 options.AddHttpClient(\"github\", c => { c.BaseAddress = new Uri(\"https://api.github.com/\"); c.DefaultRequestHeaders.Add(\"Accept\", \"application/vnd.github.v3+json\"); c.DefaultRequestHeaders.Add(\"User-Agent\", \"HttpClientFactory-Sample\"); }); }); public interface IHttp : IHttpDispatchProxy { [Get(\"get\"), Client(\"github\")] Task GetXXXAsync(); } 最终生成请求地址为:https://api.github.com/get。 局部配置方式 版本说明 以下内容仅限 Furion 4.3.8 + 版本使用。 public interface IHttp : IHttpDispatchProxy { // 局部方式 [Get(\"get\")] Task GetXXXAsync([Interceptor(InterceptorTypes.Initiate)]Func clientProvider); // 全局静态方式 [Interceptor(InterceptorTypes.Initiate)] static HttpClient CreateHttpClient() { return new HttpClient(...); } }","s":"19.5.5 设置请求客户端","u":"/docs/http","h":"#1955-设置请求客户端","p":3473},{"i":3545,"t":"public interface IHttp : IHttpDispatchProxy { [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync([Body]User user); [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync([Body(\"application/x-www-form-urlencoded\")]User user); [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync([Body(\"application/x-www-form-urlencoded\", \"UTF-8\")]User user); }","s":"19.5.6 设置 Body 参数","u":"/docs/http","h":"#1956-设置-body-参数","p":3473},{"i":3547,"t":"Furion 默认情况下采用 System.Text.Json 进行 JSON 序列化处理,如需设置第三方 JSON 提供器,则可以通过以下配置: public interface IHttp : IHttpDispatchProxy { [Post(\"https://www.furion.icu/post\"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))] Task PostXXXAsync([Body]User user); [Post(\"https://www.furion.icu/post\"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))] Task PostXXXAsync([Body]User user, [JsonSerializerOptions]object jsonSerializerOptions = default); /// /// 缺省序列化配置 /// /// [JsonSerializerOptions] static object GetJsonSerializerOptions() { // 这里也可以通过 JSON.GetSerializerOptions() 获取 Startup.cs 中的配置 return new JsonSerializerOptions { }; } } [JsonSerializerOptions] 可以标记参数是一个 JSON 序列化配置参数。 关于 JSON 序列化提供器 如需了解更多 JSON 序列化知识可查阅 23. JSON 序列化 章节","s":"19.5.7 设置 JSON 序列化提供程序","u":"/docs/http","h":"#1957-设置-json-序列化提供程序","p":3473},{"i":3549,"t":"public interface IHttp : IHttpDispatchProxy { [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync([Range(1,10)]int id, [Required, MaxLength(10)]string name); [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync([Required]User user); // 对象类型支持属性配置特性验证 }","s":"19.5.8 参数验证","u":"/docs/http","h":"#1958-参数验证","p":3473},{"i":3551,"t":"Furion 远程请求代理方式提供两种拦截方式: 接口静态方法拦截 参数标记拦截 public interface IHttp : IHttpDispatchProxy { // 通过参数拦截 [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync([Interceptor(InterceptorTypes.Request)] Action action = default); // 全局拦截,类中每一个方法都会触发 [Interceptor(InterceptorTypes.Request)] static void OnRequesting1(HttpClient client, HttpRequestMessage req) { // 追加更多参数 req.AppendQueries(new Dictionary { { \"access_token\", \"xxxx\"} }); } // 全局拦截,类中每一个方法都会触发 [Interceptor(InterceptorTypes.Request)] static void OnRequesting2(HttpClient client, HttpRequestMessage req) { } } 支持多次拦截","s":"19.5.9 请求拦截","u":"/docs/http","h":"#1959-请求拦截","p":3473},{"i":3553,"t":"Furion 远程请求代理方式提供两种拦截方式: 接口静态方法拦截 参数标记拦截 public interface IHttp : IHttpDispatchProxy { // 通过参数拦截 [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync([Interceptor(InterceptorTypes.Client)] Action action = default); // 全局拦截,类中每一个方法都会触发 [Interceptor(InterceptorTypes.Client)] static void onClientCreating1(HttpClient client) { } // 全局拦截,类中每一个方法都会触发 [Interceptor(InterceptorTypes.Client)] static void onClientCreating2(HttpClient client) { } } 支持多次拦截","s":"19.5.10 HttpClient 拦截","u":"/docs/http","h":"#19510-httpclient-拦截","p":3473},{"i":3555,"t":"Furion 远程请求代理方式提供两种拦截方式: 接口静态方法拦截 参数标记拦截 public interface IHttp : IHttpDispatchProxy { // 通过参数拦截 [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync([Interceptor(InterceptorTypes.Request)] Action action = default); // 全局拦截,类中每一个方法都会触发 [Interceptor(InterceptorTypes.Request)] static void OnRequest1(HttpClient client, HttpRequestMessage req) { } // 全局拦截,类中每一个方法都会触发 [Interceptor(InterceptorTypes.Request)] static void OnRequest2(HttpClient client, HttpRequestMessage req) { } } 支持多次拦截","s":"19.5.11 请求之前拦截","u":"/docs/http","h":"#19511-请求之前拦截","p":3473},{"i":3557,"t":"Furion 远程请求代理方式提供两种拦截方式: 接口静态方法拦截 参数标记拦截 public interface IHttp : IHttpDispatchProxy { // 通过参数拦截 [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync([Interceptor(InterceptorTypes.Response)] Action action = default); // 全局拦截,类中每一个方法都会触发 [Interceptor(InterceptorTypes.Response)] static void OnResponsing1(HttpClient client, HttpResponseMessage res) { } // 全局拦截,类中每一个方法都会触发 [Interceptor(InterceptorTypes.Response)] static void OnResponsing2(HttpClient client, HttpResponseMessage res) { } } 支持多次拦截","s":"19.5.12 成功请求拦截","u":"/docs/http","h":"#19512-成功请求拦截","p":3473},{"i":3559,"t":"Furion 远程请求代理方式提供两种拦截方式: 接口静态方法拦截 参数标记拦截 public interface IHttp : IHttpDispatchProxy { // 通过参数拦截 [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync([Interceptor(InterceptorTypes.Exception)] Action action = default); // 全局拦截,类中每一个方法都会触发 [Interceptor(InterceptorTypes.Exception)] static void OnException1(HttpClient client, HttpResponseMessage res, string errors) { } // 全局拦截,类中每一个方法都会触发 [Interceptor(InterceptorTypes.Exception)] static void OnException2(HttpClient client, HttpResponseMessage res, string errors) { } } 支持多次拦截","s":"19.5.13 请求异常拦截","u":"/docs/http","h":"#19513-请求异常拦截","p":3473},{"i":3561,"t":"Furion 远程请求默认提供四种返回值类型: HttpResponseMessage:请求响应消息类型 Stream:流类型 T:泛型 T 类型 String:字符串类型,也就是直接将网络请求结果内容字符串化 如: public interface IHttp : IHttpDispatchProxy { [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync(); [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync(); [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync(); [Post(\"https://www.furion.icu/post\")] Task PostXXXAsync(); }","s":"19.5.14 各种返回值处理","u":"/docs/http","h":"#19514-各种返回值处理","p":3473},{"i":3563,"t":"Furion 4.4.0 以下版本 在 Furion 4.4.0+ 版本移除了 [BodyBytes] 方式,原因是拓展性太差,新版本请使用 HttpFile 方式。 有时候我们需要上传文件,需要设置 Content-Type 为 multipart/form-data 类型,如: public interface IHttp : IHttpDispatchProxy { [Post(\"https://www.furion.icu/upload\", ContentType = \"multipart/form-data\")] // bytes 可以通过 File.ReadAllBytes(文件路径) 获取 Task PostXXXAsync([BodyBytes(\"键\",\"文件名\")]Byte[] bytes); // 支持多个文件 [Post(\"https://www.furion.icu/upload\", ContentType = \"multipart/form-data\")] // bytes 可以通过 File.ReadAllBytes(文件路径) 获取 Task PostXXXAsync([BodyBytes(\"键\",\"文件名\")]Byte[] bytes,[BodyBytes(\"键\",\"文件名\")]Byte[] bytes2); } Furion 4.4.0+ 版本 如果使用 Furion 4.4.0+ 版本,请使用以下的 HttpFile 替代 [BodyBytes] 操作。请求有额外参数时 HttpFile 必须设置 fileName 值。 public interface IHttp : IHttpDispatchProxy { [Post(\"https://www.furion.icu/upload\", ContentType = \"multipart/form-data\")] Task PostXXXAsync(HttpFile file); [Post(\"https://www.furion.icu/upload\", ContentType = \"multipart/form-data\")] Task PostXXXAsync(HttpFile file, [Body(\"multipart/form-data\")]User user); // 支持多个文件 [Post(\"https://www.furion.icu/upload\", ContentType = \"multipart/form-data\")] Task PostXXXAsync(HttpFile[] files); // 支持多个文件 [Post(\"https://www.furion.icu/upload\", ContentType = \"multipart/form-data\")] Task PostXXXAsync(IList files); }","s":"19.5.15 设置 Byte[]/Stream 类型/上传文件","u":"/docs/http","h":"#19515-设置-bytestream-类型上传文件","p":3473},{"i":3565,"t":"模板格式为:#(配置路径) public interface IHttp : IHttpDispatchProxy { [Post(\"#(Furion:Address)/upload\")] Task PostXXXAsync([Body]User user); } { \"Furion\": { \"Address\": \"https://www.furion.icu\" } } 方法的优先级高于接口定义的优先级。","s":"19.5.16 支持模板配置","u":"/docs/http","h":"#19516-支持模板配置","p":3473},{"i":3567,"t":"在 Furion v2.18+ 版本支持配置重试策略,如: [RetryPolicy(3, 1000)] // 支持全局 public interface IHttp : IHttpDispatchProxy { [Post(\"https://www.furion.icu\"), RetryPolicy(3, 1000)] // 支持局部 Task PostXXXAsync([Body]User user); } 以上代码表示请求失败重试 3 次,每次延迟 1000ms 。","s":"19.5.17 重试策略","u":"/docs/http","h":"#19517-重试策略","p":3473},{"i":3569,"t":"在 Furion v3.2.0+ 版本支持 GZip,如: public interface IHttp : IHttpDispatchProxy { [Post(\"https://www.furion.icu\", WithGZip = true)] Task PostXXXAsync([Body]User user); }","s":"19.5.18 支持 GZip","u":"/docs/http","h":"#19518-支持-gzip","p":3473},{"i":3571,"t":"过去版本会对所有的 Url 进行 Uri.EscapeDataString 转码,在 Furion v3.8.0+ 版本支持 Url 转码设置,如: public interface IHttp : IHttpDispatchProxy { [Post(\"https://www.furion.icu\", WithEncodeUrl = false)] Task PostXXXAsync([Body]User user); }","s":"19.5.19 设置 Url 转码","u":"/docs/http","h":"#19519-设置-url-转码","p":3473},{"i":3573,"t":"Furion 框架也提供了多个请求客户端配置,可以为多个客户端请求配置默认请求信息,目前支持四种模式进行配置。","s":"19.6 请求客户端配置","u":"/docs/http","h":"#196-请求客户端配置","p":3473},{"i":3575,"t":"services.AddRemoteRequest(options=> { // 配置默认 HttpClient options.AddHttpClient(string.Empty, c => { // 其他配置 }); // 配置特定客户端 options.AddHttpClient(\"github\", c => { c.BaseAddress = new Uri(\"https://api.github.com/\"); c.DefaultRequestHeaders.Add(\"Accept\", \"application/vnd.github.v3+json\"); c.DefaultRequestHeaders.Add(\"User-Agent\", \"HttpClientFactory-Sample\"); }); }) 配置了命名客户端后,每次请求都会自动加上这些配置。 在 代理请求 使用 [Get(\"api/getdata\"), Client(\"github\")] Task GetData(); [Put(\"api/getdata\"), Client(\"facebook\")] Task GetData(); 在 字符串拓展 使用 // 设置请求拦截 var response = await \"http://47.100.247.61/api/sysdata/categories\".SetClient(\"github\").PostAsync(); 在 IHttpClientFactory 中使用 public class ValuesController : Controller { private readonly IHttpClientFactory _httpClientFactory; public ValuesController(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } [HttpGet] public async Task Get() { var client = _httpClientFactory.CreateClient(\"github\"); string result = await client.GetStringAsync(\"/\"); return Ok(result); } }","s":"19.6.1 Startup.cs 统一配置","u":"/docs/http","h":"#1961-startupcs-统一配置","p":3473},{"i":3577,"t":"默认情况下,HttpClient 请求超时时间为 100秒,可根据实际情况进行设置: // 配置默认 HttpClient options.AddHttpClient(string.Empty, c => { c.Timeout = TimeSpan.FromMinutes(2); }); // 配置特定客户端 options.AddHttpClient(\"github\", c => { c.Timeout = TimeSpan.FromMinutes(2); });","s":"19.6.2 配置客户端 Timeout","u":"/docs/http","h":"#1962-配置客户端-timeout","p":3473},{"i":3579,"t":"每次对 IHttpClientFactory 调用 CreateClient 都会返回一个新 HttpClient 实例。 每个命名客户端都创建一个 HttpMessageHandler。 工厂管理 HttpMessageHandler 实例的生存期。 IHttpClientFactory 将工厂创建的 HttpMessageHandler 实例汇集到池中,以减少资源消耗。 新建 HttpClient 实例时,可能会重用池中的 HttpMessageHandler 实例(如果生存期尚未到期的话)。 处理程序的默认生存期为两分钟。 可在每个命名客户端上重写默认值: // 配置默认 HttpClient options.AddHttpClient(string.Empty, c => { ... }) .SetHandlerLifetime(TimeSpan.FromMinutes(5)); // 配置特定客户端 options.AddHttpClient(\"github\", c => { ... }) .SetHandlerLifetime(TimeSpan.FromMinutes(5));","s":"19.6.3 配置客户端生存期","u":"/docs/http","h":"#1963-配置客户端生存期","p":3473},{"i":3581,"t":"我们可以按照一定的规则编写特定服务的请求客户端,如: public class GitHubClient { public HttpClient Client { get; private set; } public GitHubClient(HttpClient httpClient) { httpClient.BaseAddress = new Uri(\"https://api.github.com/\"); httpClient.DefaultRequestHeaders.Add(\"Accept\", \"application/vnd.github.v3+json\"); httpClient.DefaultRequestHeaders.Add(\"User-Agent\", \"HttpClientFactory-Sample\"); Client = httpClient; } } 然后在 Startup.cs 中注册: services.AddHttpClient(); 使用如下: public class ValuesController : Controller { private readonly GitHubClient _gitHubClient;; public ValuesController(GitHubClient gitHubClient) { _gitHubClient = gitHubClient; } [HttpGet] public async Task Get() { string result = await _gitHubClient.Client.GetStringAsync(\"/\"); return Ok(result); } }","s":"19.6.4 自定义 Client 类方式","u":"/docs/http","h":"#1964-自定义-client-类方式","p":3473},{"i":3583,"t":"我们也可以定义接口,通过接口的提供具体的服务 API 操作,无需手动配置 Url,如上面的 GetStringAsync(\"/\")。 public interface IGitHubClient { Task GetData(); } public class GitHubClient : IGitHubClient { private readonly HttpClient _client; public GitHubClient(HttpClient httpClient) { httpClient.BaseAddress = new Uri(\"https://api.github.com/\"); httpClient.DefaultRequestHeaders.Add(\"Accept\", \"application/vnd.github.v3+json\"); httpClient.DefaultRequestHeaders.Add(\"User-Agent\", \"HttpClientFactory-Sample\"); _client = httpClient; } public async Task GetData() { return await _client.GetStringAsync(\"/\"); } } 然后在 Startup.cs 中注册: services.AddHttpClient(); 使用: public class ValuesController : Controller { private readonly IGitHubClient _gitHubClient;; public ValuesController(IGitHubClient gitHubClient) { _gitHubClient = gitHubClient; } [HttpGet] public async Task Get() { string result = await _gitHubClient.GetData(); return Ok(result); } }","s":"19.6.5 自定义 Client 类 + 接口方式","u":"/docs/http","h":"#1965-自定义-client-类--接口方式","p":3473},{"i":3585,"t":"有时候我们请求远程接口时会遇到 The SSL connection could not be established, see inner exception. 这样的错误,原因是证书配置不正确问题,下面有几种解决方法。","s":"19.7 SSL/https 证书配置","u":"/docs/http","h":"#197-sslhttps-证书配置","p":3473},{"i":3587,"t":"在一些情况下,可直接使用默认证书即可解决问题,如: services.AddRemoteRequest(options=> { // 默认 HttpClient 在 Furion 框架内部已经配置了该操作 options.AddHttpClient(string.Empty) .ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler { AllowAutoRedirect = true, UseDefaultCredentials = true }); // 配置特定客户端 options.AddHttpClient(\"github\", c => { /*其他配置*/ }) .ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler { AllowAutoRedirect = true, UseDefaultCredentials = true }); });","s":"19.7.1 使用默认 SSL 证书","u":"/docs/http","h":"#1971-使用默认-ssl-证书","p":3473},{"i":3589,"t":"services.AddRemoteRequest(options=> { // 默认 HttpClient 在 Furion 框架内部已经配置了该操作 options.AddHttpClient(string.Empty) .ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler { ServerCertificateCustomValidationCallback = (_, _, _, _) => true, }); // 配置特定客户端 options.AddHttpClient(\"github\", c => { /*其他配置*/ }) .ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler { ServerCertificateCustomValidationCallback = (_, _, _, _) => true, }); }); 关于 HttpClientHandler 和 SocketsHttpHandler 在 .NET6 之后默认使用 SocketsHttpHandler 作为默认底层网络通信,但比 HttpClientHandler 提供了更多平台无差异的功能,对 HttpClientHandler 的任何设置都会转发到 SocketsHttpHandler 中,如需使用 SocketsHttpHandler 配置可参考: // 忽略 SSL 不安全检查,或 https 不安全或 https 证书有误 options.AddHttpClient(string.Empty) .ConfigurePrimaryHttpMessageHandler(u => new SocketsHttpHandler { SslOptions = new SslClientAuthenticationOptions { RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true } });","s":"19.7.2 忽略特定客户端 SSL 证书检查","u":"/docs/http","h":"#1972-忽略特定客户端-ssl-证书检查","p":3473},{"i":3591,"t":"services.AddRemoteRequest(options=> { // 配置特定客户端 options.AddHttpClient(\"github\", c => { /*其他配置*/ }) .ConfigurePrimaryHttpMessageHandler(u => new HttpClientHandler { // 手动配置证书 ClientCertificateOptions = ClientCertificateOption.Manual, ClientCertificates = { new X509Certificate2(\"...\",\"...\"), new X509Certificate2(\"...\",\"...\"), new X509Certificate2(\"...\",\"...\") } }); });","s":"19.7.3 手动指定 SSL 证书","u":"/docs/http","h":"#1973-手动指定-ssl-证书","p":3473},{"i":3593,"t":"版本说明 以下内容仅限 Furion v3.6.6+ 版本使用。 services.AddRemoteRequest(options=> { // 需在所有客户端注册之前注册 options.ApproveAllCerts(); });","s":"19.7.4 忽略所有客户端证书检查","u":"/docs/http","h":"#1974-忽略所有客户端证书检查","p":3473},{"i":3595,"t":"Furion 提供了非常方便的请求并且序列化请求结果 PostAsAsync 在 2.8.8 及以下版本,当返回结果的 Http 状态为非 200 时,会直接截断。考虑到请求接口的多样性,在 2.8.9 及以上版本增加忽略返回 Http 状态,直接序列化结果的方式。 //请求并且序列化请求结果 var result = await \"https://api.facebook.com/\" //如果不加OnException,则会直接截断 .OnException((res,errors)=> { //激活异步拦截 此处可以做记录日志操作 也可保持现状 }) .PostAsAsync(); PostAsStringAsync() 也使用同样的 OnException 操作使得忽略返回 Http 状态,原样返回 Http 请求结果 特别说明 如果不加 OnException,则会直接截断。 如果需要复杂的 Http Post 请求,建议直接使用 PostAsync,返回值为 HttpResponseMessage,可以更灵活的控制结果。","s":"19.8 关于返回值非 200 时忽略 Http状态","u":"/docs/http","h":"#198-关于返回值非-200-时忽略-http状态","p":3473},{"i":3597,"t":"Furion 框架内部默认不提供同步请求操作,建议总是使用异步的方式请求。如在不能使用异步的情况下,可自行转换为同步执行。如: 字符串拓展方式: var result = \"https://api.facebook.com\".GetAsync().GetAwaiter().GetResult(); // 如果不考虑 Task 异常捕获,可以直接 .Result var result = \"https://api.facebook.com\".GetAsync().Result; 代理方式 public interface IHttp : IHttpDispatchProxy { [Get(\"https://api.facebook.com\")] Task GetAsync(); } // 同步调用 var result = _http.GetAsync().GetAwaiter().GetResult(); // 如果不考虑 Task 异常捕获,可以直接 .Result var result = _http.GetAsync().Result;","s":"19.9 关于同步请求","u":"/docs/http","h":"#199-关于同步请求","p":3473},{"i":3599,"t":"这种方式比字符串拓展好,避免了直接在字符串上拓展。 await HttpRequestPart.Default().SetRequestUrl(\"https://www.baidu.com\").GetAsStringAsync();","s":"19.10 静态 Default 方式构建","u":"/docs/http","h":"#1910-静态-default-方式构建","p":3473},{"i":3601,"t":"在 Furion 框架底层中,HttpClient 对象默认通过 IHttpClientFactory 创建的,只要发送请求就会自动打印日志,如: info: 2022-10-26 11:38:16(+08:00) 星期三 L System.Logging.EventBusService[0] #1 EventBus Hosted Service is running. info: 2022-10-26 11:38:17(+08:00) 星期三 L Microsoft.Hosting.Lifetime[14] #1 Now listening on: https://localhost:5001 info: 2022-10-26 11:38:17(+08:00) 星期三 L Microsoft.Hosting.Lifetime[14] #1 Now listening on: http://localhost:5000 info: 2022-10-26 11:38:17(+08:00) 星期三 L Microsoft.Hosting.Lifetime[0] #1 Application started. Press Ctrl+C to shut down. info: 2022-10-26 11:38:17(+08:00) 星期三 L Microsoft.Hosting.Lifetime[0] #1 Hosting environment: Development info: 2022-10-26 11:38:17(+08:00) 星期三 L Microsoft.Hosting.Lifetime[0] #1 Content root path: D:\\Workplaces\\OpenSources\\Furion\\samples\\Furion.Web.Entry\\ info: 2022-10-26 11:39:00(+08:00) 星期三 L System.Net.Http.HttpClient.Default.LogicalHandler[100] #8 Start processing HTTP request GET https://www.baidu.com/ info: 2022-10-26 11:39:00(+08:00) 星期三 L System.Net.Http.HttpClient.Default.ClientHandler[100] #8 Sending HTTP request GET https://www.baidu.com/ info: 2022-10-26 11:39:00(+08:00) 星期三 L System.Net.Http.HttpClient.Default.ClientHandler[101] #6 Received HTTP response headers after 288.0665ms - 200 info: 2022-10-26 11:39:00(+08:00) 星期三 L System.Net.Http.HttpClient.Default.LogicalHandler[101] #6 End processing HTTP request after 326.1497ms - 200 info: 2022-10-26 11:39:04(+08:00) 星期三 L System.Net.Http.HttpClient.Default.LogicalHandler[100] #3 Start processing HTTP request GET https://www.baidu.com/ 如需关闭只需在 appsettings.json 和 appsettings.Development.json 中添加 System.Net.Http.HttpClient 日志类别过滤即可,如: { \"Logging\": { \"LogLevel\": { \"Default\": \"Information\", \"Microsoft.AspNetCore\": \"Warning\", \"Microsoft.EntityFrameworkCore\": \"Information\", \"System.Net.Http.HttpClient\": \"Warning\" } } }","s":"19.11 关闭 Http 请求日志","u":"/docs/http","h":"#1911-关闭-http-请求日志","p":3473},{"i":3603,"t":"版本说明 以下内容仅限 Furion 4.7.4 + 版本使用。 字符串方式 var response = await \"https://www.furion.icu/\".GetAsync(); var cookies = response.GetCookies(); 代理方式 public interface IHttp : IHttpDispatchProxy { [Get(\"https://www.furion.icu/\")] Task GetAsync(); } var response = await _http.GetAsync(); var cookies = response.GetCookies();","s":"19.12 获取 Cookies","u":"/docs/http","h":"#1912-获取-cookies","p":3473},{"i":3605,"t":"与我们交流 给 Furion 提 Issue。 了解更多 想了解更多 HttpClient 知识可查阅 ASP.NET Core - HTTP 请求 章节","s":"19.13 反馈与建议","u":"/docs/http","h":"#1913-反馈与建议","p":3473},{"i":3608,"t":"在现在移动为王、多端互辅、前端百花齐放的开放时代,不再是一人包揽式开发,大家各司其职,后端工程师负责接口开发,前端负责接口联调,也就是互联网现在流行的前后端分离架构。 所以就需要由前后端工程师共同定义接口,编写接口文档,之后大家按照这个接口文档进行开发、维护及开放给第三方。","s":"6.1 什么是接口文档","u":"/docs/specification-document","h":"#61-什么是接口文档","p":3606},{"i":3610,"t":"能够让前端开发与后台开发人员更好的配合,提高工作效率 项目迭代或者项目人员更迭时,方便后期人员查看和维护 方便测试人员进行接口测试","s":"6.2 为什么要写接口文档","u":"/docs/specification-document","h":"#62-为什么要写接口文档","p":3606},{"i":3612,"t":"由于每个公司后端人员技术参差不齐,技术文档能力也不例外,导致接口定义及文档五花八门,不同项目或不同公司对接极其困难,而且体验糟糕。所以,无规矩不成方圆,为了开发人员间更好的配合,迫切需要整理出一套规范。 通常接口规范分为六个部分:","s":"6.3 为什么需要规范化文档","u":"/docs/specification-document","h":"#63-为什么需要规范化文档","p":3606},{"i":3614,"t":"为了确保不同系统/模块间的数据交互,需要事先约定好通讯协议,如:TCP、HTTP、HTTPS 协议。为了确保数据交互安全,建议使用 HTTPS 协议","s":"6.3.1 协议规范","u":"/docs/specification-document","h":"#631-协议规范","p":3606},{"i":3616,"t":"作为接口路径,为了方便清晰的区分来自不同的系统,可以采用不同系统/模块名作为接口路径前缀,如:支付模块:/pay/xxx,订单模块:/order/xxx","s":"6.3.2 接口路径规范","u":"/docs/specification-document","h":"#632-接口路径规范","p":3606},{"i":3618,"t":"为了便于后期接口的升级和维护,建议在接口路径中加入版本号,便于管理,实现接口多版本的可维护性。如:接口路径中添加类似\"v1\"、\"v2\"等版本号","s":"6.3.3 版本控制规范","u":"/docs/specification-document","h":"#633-版本控制规范","p":3606},{"i":3620,"t":"和 C# 命名规范一样,好的、统一的接口命名规范,不仅可以增强其可读性,而且还会减少很多不必要的口头/书面上的解释。可使用\"驼峰命名法\"按照实现接口的业务类型、业务场景等命名,有必要时可采取多级目录命名,但目录不宜过长,两级目录较为适宜 常见命名方式: 接口名称动词前/后缀化: 接口名称以接口数据操作的动词为前/后缀,常见动词有:Add、Delete、Update、Query、Get、Send、Save、Detail、List等,如:新建用户 AddUser、查询订单详情 QueryOrderDetail。 接口名称动词 + 请求方式:接口路径中包含具体接口名称的名词,接口数据操作动作以 HTTP 请求方式来区分。常用的 HTTP 请求方式有: GET:从服务器取出资源(一项或多项) POST:在服务器新建一个资源 PUT:在服务器更新资源(客户端提供改变后的完整资源) PATCH:在服务器更新资源(客户端提供改变的属性) DELETE:从服务器删除资源","s":"6.3.4 接口命名规范","u":"/docs/specification-document","h":"#634-接口命名规范","p":3606},{"i":3622,"t":"请求方式:按照 GET、POST、PUT 等含义定义,避免出现不一致现象,对人造成误解、歧义 请求头:请求头根据项目需求添加配置参数。如:请求数据格式,accept=application/json 等。如有需要,请求头可根据项目需求要求传入用户 token、唯一验签码等加密数据 请求参数/请求体: 请求参数字段,尽可能与数据库表字段、对象属性名等保持一致,因为保持一致是最省事,最舒服的一件事","s":"6.3.5 请求参数规范","u":"/docs/specification-document","h":"#635-请求参数规范","p":3606},{"i":3624,"t":"统一规范返回数据的格式,对己对彼都有好处,此处以 json 格式为例。返回数据应包含:返回状态码、返回状态信息、具体数据。返回数据中的状态码、状态信息,常指具体的业务状态,不建议和 HTTP 状态码混在一起。HTTP 状态,是用来体现 HTTP 链路状态情况,如:404-Not Found。HTTP 状态码和 json 结果中的状态码,并存尚可,用于体现不同维度的状态。","s":"6.3.6 返回数据规范","u":"/docs/specification-document","h":"#636-返回数据规范","p":3606},{"i":3626,"t":"相信无论是前端还是后端开发,都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新。 其实无论是前端调用后端,还是后端调用后端,都期望有一个好的接口文档。但是这个接口文档对于程序员来说,就跟注释一样,经常会抱怨别人写的代码没有写注释,然而自己写起代码起来,最讨厌的,也是写注释。所以仅仅只通过强制来规范大家是不够的,随着时间推移,版本迭代,接口文档往往很容易就跟不上代码了。 发现了痛点就要去找解决方案。解决方案用的人多了,就成了标准的规范,这就是 Swagger 的由来。 通过这套规范,你只需要按照它的规范去定义接口及接口相关的信息。再通过 Swagger 衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,生成多种语言的客户端和服务端的代码,以及在线接口调试页面等等。 这样,如果按照新的开发模式,在开发新版本或者迭代版本的时候,只需要更新 Swagger 描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。 所以,Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful 风格的 Web 服务。 总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法、参数和模型紧密集成到服务器端的代码,允许 API 来始终保持同步。Swagger 让部署管理和使用功能强大的 API 从未如此简单。","s":"6.4 什么是 Swagger","u":"/docs/specification-document","h":"#64-什么是-swagger","p":3606},{"i":3628,"t":"Furion 框架提供了非常方便且灵活的 Swagger 配置,无需增加额外学习成本。","s":"6.5 Swagger 使用","u":"/docs/specification-document","h":"#65-swagger-使用","p":3606},{"i":3630,"t":"备注 .UseInject() 已经包含了 .UseSpecificationDocuments() 注册,无需再次注册。 Furion.Web.Core\\Startup.cs using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace Furion.Web.Core { [AppStartup(800)] public sealed class FurWebCoreStartup : AppStartup { public void ConfigureServices(IServiceCollection services) { services.AddSpecificationDocuments(); services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // Other Codes app.UseSpecificationDocuments(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } } 小知识 services.AddSpecificationDocuments() 通常和 .AddDynamicApiControllers() 成对出现。","s":"6.5.1 注册服务","u":"/docs/specification-document","h":"#651-注册服务","p":3606},{"i":3632,"t":"在 Furion 框架中,默认 规范化文档 地址为 /api 目录,支持自定义配置。 如下图所示: 可以通过两种方式配置: app.UseInject(\"路由\") 方式,如 app.UseInject(\"testapi\"); // 那么 /testapi 就是规范化地址 配置文件配置: { \"SpecificationDocumentSettings\": { \"RoutePrefix\": \"testapi\" } } 配置文件优先级大于 UseInject() 方式","s":"6.5.2 默认地址","u":"/docs/specification-document","h":"#652-默认地址","p":3606},{"i":3634,"t":"Furion 框架中默认分组名为 Default,支持自定义配置。 { \"SpecificationDocumentSettings\": { \"DefaultGroupName\": \"MyGroup\" } }","s":"6.5.3 默认分组","u":"/docs/specification-document","h":"#653-默认分组","p":3606},{"i":3636,"t":"规范化文档默认扫描 Furion.Application,Furion.Web.Core,Furion.Web.Entry 三个程序集.xml 注释文件,支持自定义配置。 只支持 /// 标识的注释语法,如:类、方法、属性、参数、返回值、验证特性。 using Furion.DynamicApiController; namespace Furion.Application { /// /// 类注释 /// public class FurionAppService : IDynamicApiController { /// /// 方法注释 /// /// public string Get() { return nameof(Furion); } /// /// 带 ID 参数的方法注释 /// /// /// public int Get(int id) { return id; } } } 如下图所示: 小提示 如果文档注释没有显示,请检查项目 属性->生成->输出 中 XML 文档是否配置输出路径。注意:只有不带路径的 【项目名称.xml】 才会自动加载。 特别说明 Debug 模式下和 Release 模式下的注释文件是不通用的,所以导致很多开发者发布到服务器上发现没有显示注释。我们只需要在 Visual Studio 中切换 Debug 模式为 Release,然后重新配置一次即可。 这样不管是 Debug 还是 Release 模式都会显示注释了。","s":"6.5.4 文档注释","u":"/docs/specification-document","h":"#654-文档注释","p":3606},{"i":3638,"t":"多分组是一个系统中必备功能,我们可以将系统划分为多个模块,每个模块都独立的 api 配置。在 Furion 框架中,实现多分组非常简单。如: using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(\"Group1\")] public class FurionAppService : IDynamicApiController { /// /// 随父类 Group1 分组 /// /// public string Post() { return nameof(Furion); } /// /// 在 Group1、Group3 都有我 /// /// [ApiDescriptionSettings(\"Group1\", \"Group3\")] public string Get() { return nameof(Furion); } /// /// 我只在 Group2 出现 /// /// /// [ApiDescriptionSettings(\"Group2\")] public int Get(int id) { return id; } } } 如下图所示:","s":"6.5.5 多分组支持","u":"/docs/specification-document","h":"#655-多分组支持","p":3606},{"i":3640,"t":"方式一 方式二 通过分组名称添加 @整数 进行排序 using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(\"Group1@1\")] public class FurionAppService : IDynamicApiController { public string Post() { return nameof(Furion); } [ApiDescriptionSettings(\"Group1\", \"Group3\")] public string Get() { return nameof(Furion); } [ApiDescriptionSettings(\"Group@2\")] public int Get(int id) { return id; } } } 可以通过在分组名后面添加 @整数 进行排序,整数 越大排前面。如果分组名称多次指定且多次指定了 @整数 ,则自动取该分组最大的整数进行排序。 通过配置文件配置排序 Furion.Web.Entry/appsettings.json { \"SpecificationDocumentSettings\": { \"GroupOpenApiInfos\": [ { \"Group\": \"Group1\", \"Order\": 1 }, { \"Group\": \"Group2\", \"Order\": 2 }, { \"Group\": \"Group3\", \"Order\": 0 } ] } } 如下图所示: 排序说明 分组默认排序 Order 为 0。如果同时配置了 @整数 和 appsettings.json 配置文件,那么优先采用 appsettings.json 中的 Order","s":"6.5.6 多分组排序","u":"/docs/specification-document","h":"#656-多分组排序","p":3606},{"i":3642,"t":"Furion 框架提供了可通过 appsetting.json 配置分组信息: Furion.Web.Entry/appsettings.json { \"SpecificationDocumentSettings\": { \"GroupOpenApiInfos\": [ { \"Group\": \"Group1\", \"Title\": \"分组标题\", \"Description\": \"这里是分组描述\", \"Version\": \"版本号\", \"TermsOfService\": \"https://furion.icu\", \"Contact\": { \"Name\": \"百小僧\", \"Url\": \"https://gitee.com/monksoul\", \"Email\": \"monksoul@outlook.com\" }, \"License\": { \"Name\": \"MIT\", \"Url\": \"https://gitee.com/dotnetchina/Furion/blob/alpha/LICENSE\" } } ] } } 如下图所示:","s":"6.5.7 多分组信息配置","u":"/docs/specification-document","h":"#657-多分组信息配置","p":3606},{"i":3644,"t":"Tag 配置主要用于配置 Swagger 标签分组信息及合并标签。也就是 组中组: 标签命名 合并标签 未贴标签之前​ using Furion.DynamicApiController; namespace Furion.Application { public class FurionAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } public class TestAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } } 贴标签之后​ using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(Tag = \"分组一\")] public class FurionAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } [ApiDescriptionSettings(Tag = \"分组二\")] public class TestAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } } 如下图所示: using Furion.DynamicApiController; namespace Furion.Application { [ApiDescriptionSettings(Tag = \"合并所有标签\")] public class FurionAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } [ApiDescriptionSettings(Tag = \"合并所有标签\")] public class TestAppService : IDynamicApiController { public string Get() { return nameof(Furion); } public int Get(int id) { return id; } } } 如下图所示: 小知识 如果 Tag 名字一样,则会自动合并,否则只是命名。","s":"6.5.8 组中组(标签)","u":"/docs/specification-document","h":"#658-组中组标签","p":3606},{"i":3646,"t":"Furion.Web.Entry/appsettings.json { \"SpecificationDocumentSettings\": { \"DocExpansionState\": \"Full\" } } 如下图所示: DocExpansionState 配置说明: List:列表式(展开子类),默认值 Full:完全展开 None:列表式(不展开子类)","s":"6.5.9 默认展开所有文档","u":"/docs/specification-document","h":"#659-默认展开所有文档","p":3606},{"i":3648,"t":"Furion.Web.Entry/appsettings.json { \"SpecificationDocumentSettings\": { \"DocumentTitle\": \"我是自定义标题\" } } 如下图所示:","s":"6.5.10 配置文档标题","u":"/docs/specification-document","h":"#6510-配置文档标题","p":3606},{"i":3650,"t":"新版本 Furion 已经默认启用了 Bearer Token 授权配置,无需手动配置,如需手动配置,可手动添加以下类似配置: Furion.Web.Entry/appsettings.json { \"SpecificationDocumentSettings\": { \"EnableAuthorized\": true, \"SecurityDefinitions\": [ { \"Id\": \"Bearer\", \"Type\": \"Http\", \"Name\": \"Authorization\", \"Description\": \"JWT Authorization header using the Bearer scheme.\", \"BearerFormat\": \"JWT\", \"Scheme\": \"bearer\", \"In\": \"Header\", \"Requirement\": { \"Scheme\": { \"Reference\": { \"Id\": \"Bearer\", \"Type\": \"SecurityScheme\" }, \"Accesses\": [] } } } ] } }","s":"6.5.11 授权控制","u":"/docs/specification-document","h":"#6511-授权控制","p":3606},{"i":3652,"t":"如下图所示:","s":"6.5.12 在线测试","u":"/docs/specification-document","h":"#6512-在线测试","p":3606},{"i":3654,"t":"规范化文档默认集成了 MiniProfiler 第三方性能组件,通过该组件可以方便查看请求性能、异常堆栈、数据库操作等信息。默认在 Swagger 首页左上角显示。 如下图所示: 小提示 也可以通过 appsetting.json 中 AppSettings:InjectMiniProfiler 设为 false 关闭。","s":"6.5.13 性能监视 MiniProfiler","u":"/docs/specification-document","h":"#6513-性能监视-miniprofiler","p":3606},{"i":3656,"t":"using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; namespace Furion.Application { public class FurionAppService : IDynamicApiController { [ProducesResponseType(201, Type = typeof(TestDto))] [ProducesResponseType(400)] public string Get() { return nameof(Furion); } } } 如下图所示:","s":"6.5.14 定义接口输出类型","u":"/docs/specification-document","h":"#6514-定义接口输出类型","p":3606},{"i":3658,"t":"Furion 新版本提供了隐藏分组的 Visible 配置,设置为 false 之后该分组将不显示在规范化文档中,如: appsetting.json { \"SpecificationDocumentSettings\": { \"GroupOpenApiInfos\": [ { \"Group\": \"Group1\", \"Visible\": false } ] } }","s":"6.5.15 隐藏特定分组","u":"/docs/specification-document","h":"#6515-隐藏特定分组","p":3606},{"i":3660,"t":"默认情况下,.json 文件并未采用 utf-8 编码,所以如果配置中文分组信息就会出现乱码情况,这时候,只需要修改 .json 文件编码为 utf-8 即可。","s":"6.5.16 中文乱码问题","u":"/docs/specification-document","h":"#6516-中文乱码问题","p":3606},{"i":3662,"t":"如果不需要线上环境开启 Swagger 功能,只需要在 appsetting.json 配置即可: { \"AppSettings\": { \"InjectSpecificationDocument\": false } }","s":"6.5.17 生产环境中关闭 Swagger","u":"/docs/specification-document","h":"#6517-生产环境中关闭-swagger","p":3606},{"i":3664,"t":"Swagger 会自动根据对象类型输入参数添加 Example Value 默认值,但是该默认值通常是对象属性的类型字符串或缺省值,如果我们需要自定义这些默认值,只需要添加 /// 默认值 注释即可。 如: /// /// 年龄 /// /// 13 [Required, Range(10, 110)] public int Age { get; set; } 如下图所示: 更多类型默认值设置示例: bool 类型:/// true string 类型:/// foobar number 类型:/// 123 null 类型: /// null array 类型:/// [ 1, 2, 3 ] 关于 object 类型输入参数 默认情况下,Example Value 不会显示 object 类型的对象属性,因为 Swagger 认为这是不合理的定义。如果需要强制显示,只需要添加 /// \"object\" 注释即可。","s":"6.5.18 设置 Example Value 默认值","u":"/docs/specification-document","h":"#6518-设置-example-value-默认值","p":3606},{"i":3666,"t":"Furion 框架除了内置了不少配置以外,还提供了直接配置 Swagger Api 的参数,如: public void ConfigureServices(IServiceCollection services) { services.AddInject(options => { options.ConfigureSwaggerGen(gen => { // .... }); }); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 如果使用 Furion 4.4.8+ 版本可以 app.UseInject(options => {}) 了,无需指定 configure: app.UseInject(configure: options => { options.ConfigureSwagger(swg => { // .... }); options.ConfigureSwaggerUI(ui => { // .... }); }); }","s":"6.5.19 自定义 Swagger 配置","u":"/docs/specification-document","h":"#6519-自定义-swagger-配置","p":3606},{"i":3668,"t":"Furion 框架默认只显示名称,如果需要自定义显示规则,只需要添加配置即可。 services.AddControllersWithViews() .AddInject(options => { options.ConfigureSwaggerGen(gen => { gen.CustomSchemaIds(x => x.FullName); }); });","s":"6.5.20 配置 Swagger的 Schemes","u":"/docs/specification-document","h":"#6520-配置-swagger的-schemes","p":3606},{"i":3670,"t":"默认情况下,Furion 框架会生成统一的分组模板,如:swagger/{documentName}/swagger.json,{documentName} 会在运行时替换为分组名,如需自定义,配置 RouteTemplate 即可: appsetting.json { \"SpecificationDocumentSettings\": { \"RouteTemplate\": \"myapp/{documentName}/xxxx.json\" } }","s":"6.5.21 自定义 swagger.json 路由模板","u":"/docs/specification-document","h":"#6521-自定义-swaggerjson-路由模板","p":3606},{"i":3672,"t":"默认情况下,Swagger 并未添加 application/x-www-form-urlencoded 支持,如需启用该配置,只需在方法顶部贴 [Consumes] 特性即可,如: [Consumes(\"application/x-www-form-urlencoded\")] public async Task Test([FromForm] TestRequest testRequest) { // .... } public class TestRequest { public string TestValue { get; set; } } 特别注意 参数必须贴 [FromForm] 特性。另外请求时将参数按 URL 地址拼接并放在 Body 中请求。","s":"6.5.22 关于 application/x-www-form-urlencoded 请求","u":"/docs/specification-document","h":"#6522-关于-applicationx-www-form-urlencoded-请求","p":3606},{"i":3674,"t":"如果 Swagger 出现以下错误,如图: 则需要添加以下配置: { \"SpecificationDocumentSettings\": { \"HideServers\": true } }","s":"6.5.23 Swagger 出现 CORS 问题解决","u":"/docs/specification-document","h":"#6523-swagger-出现-cors-问题解决","p":3606},{"i":3676,"t":"产生此原因有两个必要条件: 使用了 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包并添加了 AddNewtonsoftJson() 注册。 .AddNewtonsoftJson() 写在了 .AddInjectWithUnifyResult() 后面。 所以解决方法是,先注册 .AddNewtonsoftJson() 再注册规范化结果,如: services.AddControllers() .AddNewtonsoftJson() .AddInjectWithUnifyResult();","s":"6.5.24 Swagger 出现默认 xml 参数问题解决","u":"/docs/specification-document","h":"#6524-swagger-出现默认-xml-参数问题解决","p":3606},{"i":3678,"t":"在 Furion 2.9.0 + 版本已经支持了 Swagger 文档地址 ?culture=en-US 参数多语言转发功能了,也就是 Swagger 地址带 ?culture= 参数将自动添加到每一个请求的 api 地址中。","s":"6.5.25 Swagger 多语言支持","u":"/docs/specification-document","h":"#6525-swagger-多语言支持","p":3606},{"i":3680,"t":"有时候我们需要自定义 Swagger 接口可见性,比如根据权限,不同用户类型,各种逻辑控制,如: // 也可以用 .AddInjectWithUnifyResult services.AddInject(options => { options.ConfigureSwaggerGen(gen => { gen.DocInclusionPredicate((currentGroup, apiDescription) => { // Furion 内部检查,必须放第一行 var isShow = SpecificationDocumentBuilder.CheckApiDescriptionInCurrentGroup(currentGroup, apiDescription); // 获取当前方法 _ = apiDescription.TryGetMethodInfo(out var method); // 有了方法,这里做你想做的事情,isShow 设置 true 可见,设置 false 不可见 return isShow; }); }); });","s":"6.5.26 自定义逻辑控制 Swagger 每一个 api 可见性","u":"/docs/specification-document","h":"#6526-自定义逻辑控制-swagger-每一个-api-可见性","p":3606},{"i":3682,"t":"{ \"UnifyResultSettings\": { \"SupportMvcController\": true } }","s":"6.5.27 配置 MVC 控制器支持规范化处理","u":"/docs/specification-document","h":"#6527-配置-mvc-控制器支持规范化处理","p":3606},{"i":3684,"t":"默认情况下,Swagger 刷新浏览器后,授权状态将被重置,也就是需要重新登录,通过下面代码在 用户登录成功后 调用即可: // ....验证用户名/密码.... _httpContextAccessor.HttpContext.SigninToSwagger(\"传入 token\");","s":"6.5.28 Swagger 刷新记住授权状态","u":"/docs/specification-document","h":"#6528-swagger-刷新记住授权状态","p":3606},{"i":3686,"t":"版本说明 以下内容仅限 Furion v3.3.3+ 版本使用。 默认情况下,Swagger 是任何人都可以访问的,这样也暴露出一些安全问题,所以在该版本之后添加了登录功能,只需要配置 SpecificationDocumentSettings 的 LoginInfo 即可: { \"SpecificationDocumentSettings\": { \"LoginInfo\": { \"Enabled\": true, \"CheckUrl\": \"/Home/CheckUrl\", \"SubmitUrl\": \"/Home/SubmitUrl\", \"UserName\": \"admin\", \"Password\": \"admin\" } } } 配置说明​ LoginInfo:配置 Swagger 是否需要登录才能访问,SpecificationLoginInfo 类型,默认 null,仅在 Furion v3.3.3+` 有效 Enabled:是否启用登录授权,默认 false CheckUrl:检查登录状态的 Url 地址,该地址必须是 POST 请求,已授权返回 200,否则返回 401,支持相对地址,以 / 开头 SubmitUrl:提交登录的 Url 地址,该地址必须是 POST 请求且只有一个 SpecificationAuth 类型参数,成功登录返回 200,否则返回 401,支持相对地址,以 / 开头 配置示例​ using Furion.SpecificationDocument; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.ComponentModel.DataAnnotations; namespace Furion.Web.Entry.Controllers; public class HomeController : Controller { [HttpPost, AllowAnonymous, NonUnify] public int CheckUrl() { return 401; } [HttpPost, AllowAnonymous, NonUnify] public int SubmitUrl([FromForm] SpecificationAuth auth) { // 读取配置信息 var userName = App.Configuration[\"SpecificationDocumentSettings:LoginInfo:UserName\"]; var password = App.Configuration[\"SpecificationDocumentSettings:LoginInfo:Password\"]; if (auth.UserName == userName && auth.Password == password) { return 200; } else { return 401; } } }","s":"6.5.29 带登录的 Swagger 文档","u":"/docs/specification-document","h":"#6529-带登录的-swagger-文档","p":3606},{"i":3688,"t":"版本说明 以下内容仅限 Furion v3.3.3+ 版本使用。 在过去我们在接口定义的时候编写了完整的成员注释,然后在派生成员中又要重复写一次,实际上做了很大无用功,现在 Furion 支持了注释继承了,同时 Swagger 中也能正确显示。 using Furion.DynamicApiController; namespace Furion.Application { /// public class TestInheritdoc : ITestInheritdoc, IDynamicApiController { /// public string GetName() { return \"Furion\"; } /// public string GetVersion() { return \"3.3.3\"; } } /// /// 测试注释继承 /// public interface ITestInheritdoc { /// /// 获取名称 /// /// string GetName(); /// /// 获取版本 /// /// string GetVersion(); } } 显示效果: 注意事项 不指定 cref 仅限成员可用且所在的类型必须指定 ,这样才能自动识别。","s":"6.5.30 inheritdoc 实现注释继承","u":"/docs/specification-document","h":"#6530-inheritdoc-实现注释继承","p":3606},{"i":3690,"t":"版本说明 以下内容仅限 Furion v3.3.4+ 版本使用。 有时候我们为了更好的对接口进行归类,配置了 Swagger 多个分组的功能,但这样也对生成客户端请求代码造成了困扰,所以添加了新的配置: { \"SpecificationDocumentSettings\": { \"EnableAllGroups\": true } }","s":"6.5.31 启用 All Groups 分组功能","u":"/docs/specification-document","h":"#6531-启用-all-groups-分组功能","p":3606},{"i":3692,"t":"版本说明 以下内容仅限 Furion v3.3.5+ 版本使用。 有时候我们某个接口已经过时,提示尽早调用最新接口,只需要在方法上面贴 [Obsolete] 即可,如: [Obsolete(\"GetName() 已经过时,请调用 GetFrameworkName() 替代\")] public string GetName() { return nameof(Furion); } [Obsolete] public string Other() { // ... }","s":"6.5.32 接口过时控制","u":"/docs/specification-document","h":"#6532-接口过时控制","p":3606},{"i":3694,"t":"版本说明 以下内容仅限 Furion v3.3.5+ 版本使用。 在该版本新增了 [ApiDescriptionSettings] 的 Description 属性,支持定义更多描述,如: [ApiDescriptionSettings(Description = \"我是一段描述,显示更多内容 \")] public string add() { //.... }","s":"6.5.33 单一接口更多描述","u":"/docs/specification-document","h":"#6533-单一接口更多描述","p":3606},{"i":3696,"t":"有时候可能因为错误的配置导致 Swagger 不能显示,这时候只需要复制提示的错误 .json 链接地址到浏览器中访问即可,如: https://localhost:你的端口/swagger/Default/swagger.json 后面的 /swagger/Default/swagger.json 就是 Swagger 错误提示的 .json 链接地址。 这样就可以看到详细的错误了。","s":"6.5.34 Swagger 异常/不能显示/错误处理","u":"/docs/specification-document","h":"#6534-swagger-异常不能显示错误处理","p":3606},{"i":3698,"t":"版本说明 以下内容仅限 Furion v3.6.4+ 版本使用。 有时候,不同程序集会定义相同的类型名称 Name,这样就会导致生成 Swagger 的 SchemaId 出现冲突,这时只需要在类型上贴 [SchemaId] 特性即可,如: using Furion.SpecificationDocument; [SchemaId(\"Other_\")] public class PersonDto { // ... } SchemaIdAttribute 配置选项: SchemaId:自定义 SchemaId,字符串类型,只能是 字母,数字,下划线 组合 Replace:是否完全替换,bool 类型,默认 false,默认是作为前缀拼接,如上面的 PersonDto 会生成 Other_PersonDto,如果设置为 true,则直接使用 Test_","s":"6.5.35 自定义 Swagger 的 SchemaId","u":"/docs/specification-document","h":"#6535-自定义-swagger-的-schemaid","p":3606},{"i":3700,"t":"版本说明 以下内容仅限 Furion 4.1.7+ 版本使用。 通过我们根据 swagger.json 生成前端代码时,Swagger 会自动根据路由地址生成调用的 api 名称,但这样的名称往往不易读,这时候可自定义 [OperationId] 来配置生成的前端名称。 using Furion.SpecificationDocument; public class PersonDto { [OperationId(\"MyClientMethodName\")] public string TestMethod() { // ... } }","s":"6.5.36 自定义 Swagger 的 OperationId","u":"/docs/specification-document","h":"#6536-自定义-swagger-的-operationid","p":3606},{"i":3702,"t":"在 Furion 最新版中,支持了完整的 Markdown 注册,如: /// /// 测试 Markdown /// /// /// # 先知 / Furion ([探索版](https://gitee.com/dotnetchina/Furion/tree/experimental/)) /// /// 一个应用程序框架,您可以将它集成到任何.NET/C# 应用程序中。 /// /// An application framework that you can integrate into any.NET/C# application. /// /// ## 安装 / Installation /// /// - [Package Manager] (https://www.nuget.org/packages/Furion) /// /// ```powershell /// Install-Package Furion /// ``` /// /// - [.NET CLI] (https://www.nuget.org/packages/Furion) /// /// ```powershell /// dotnet add package Furion /// ``` /// /// ## 例子 / Examples /// /// 我们在[主页](https://furion.baiqian.ltd)上有不少例子,这是让您入门的第一个: /// /// We have several examples [on the website] (https://furion.baiqian.ltd). Here is the first one to get you started: /// /// ```cs /// Serve.Run(); /// /// [DynamicApiController] /// public class HelloService /// { /// public string Say() /// { /// return \"Hello, Furion\"; /// } /// } /// ``` /// /// 打开浏览器访问 `https://localhost:5001`。 /// /// Open browser access `https://localhost:5001`. /// /// ## 文档 / Documentation /// /// 您可以在[主页] (https://furion.baiqian.ltd)或[备份主页](https://furion.icu)找到 Furion 文档。 /// /// You can find the Furion documentation[on the website](https://furion.baiqian.ltd) or [on the backup website](https://furion.icu). /// /// ## 贡献 / Contributing /// /// 该存储库的主要目的是继续发展 Furion 核心,使其更快、更易于使用。 Furion 的开发在[Gitee](https://gitee.com/dotnetchina/Furion) 上公开进行,我们感谢社区贡献错误修复和改进。 /// /// 阅读[贡献指南] (https://furion.baiqian.ltd/docs/contribute)内容,了解如何参与改进 Furion。 /// /// The main purpose of this repository is to continue evolving Furion core, making it faster and easier to use.Development of Furion happens in the open on[Gitee] (https://gitee.com/dotnetchina/Furion), and we are grateful to the community for contributing bugfixes and improvements. /// /// Read[contribution documents] (https://furion.baiqian.ltd/docs/contribute) to learn how you can take part in improving Furion. /// /// ## 许可证 / License /// /// Furion 采用[MIT](https://gitee.com/dotnetchina/Furion/blob/v4/LICENSE) 开源许可证。 /// /// Furion uses the[MIT] (https://gitee.com/dotnetchina/Furion/blob/v4/LICENSE) open source license. /// /// ``` /// Copyright(c) 2020-2022 百小僧, Baiqian Co., Ltd. /// Furion is licensed under Mulan PSL v2. /// You can use this software according to the terms andconditions of the Mulan PSL v2. /// You may obtain a copy of Mulan PSL v2 at: /// https://gitee.com/dotnetchina/Furion/blob/v4/LICENSE /// THIS SOFTWARE IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUTWARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. /// See the Mulan PSL v2 for more details. /// ``` /// /// /// public string Hello() { return \"Furion\"; }","s":"6.5.37 Swagger 接口文档支持完整的 Markdown","u":"/docs/specification-document","h":"#6537-swagger-接口文档支持完整的-markdown","p":3606},{"i":3704,"t":"在 Furion 框架中,集成第三方 SwaggerUI 非常容易,比如集成 IGeekFan.AspNetCore.Knife4jUI: 安装包 只需要在 YourPoject.Web.Core 层安装 IGeekFan.AspNetCore.Knife4jUI 即可。 Knife4jUI 独立版本配置 var routePrefix = \"api\"; // 定义 swagger 路由地址,如果是跟目录,设置 string.Empty 即可 app.UseKnife4UI(options => { options.RoutePrefix = routePrefix; // 配置 Knife4UI 路由地址 foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups()) { options.SwaggerEndpoint(\"/\" + groupInfo.RouteTemplate, groupInfo.Title); } }); app.UseInject(routePrefix); // 配置 Furion 路由地址 Knife4jUI 和 Swagger 共存版本配置 app.UseKnife4UI(options => { options.RoutePrefix = \"newapi\"; // 配置 Knife4UI 路由地址,现在是 /newapi foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups()) { options.SwaggerEndpoint(\"/\" + groupInfo.RouteTemplate, groupInfo.Title); } }); app.UseInject(); // Furion 默认 api 地址为 /api 如需实现登录之后自动将 token 添加到头部可在登录接口 AfterScript 执行以下代码: ke.global.setAllHeader( \"Authorization\", \"Bearer \" + ke.response.headers[\"access-token\"] );","s":"6.5.38 第三方 UI 集成,如 Knife4jUI","u":"/docs/specification-document","h":"#6538-第三方-ui-集成如-knife4jui","p":3606},{"i":3706,"t":"除了上述例子外,Furion 提供了一些配置选项,如: DocumentTitle:文档标题,string,默认 Specification Api Document DefaultGroupName:默认分组名,string,默认 Default EnableAuthorized:是否启用权限控制,bool,默认 true FormatAsV2:采用 Swagger 2.0 版本,bool,默认 false 已弃用 RoutePrefix:规范化文档地址,string,默认 api,如果希望在首页,改为空字符串即可。 DocExpansionState:文档显示方式,DocExpansion,默认 List,取值: List:列表式(展开子类),默认值 Full:完全展开 None:列表式(不展开子类) XmlComments:程序集注释描述文件名(可带 .xml,string,默认 Furion.Application, Furion.Web.Entry, Furion.Web.Core GroupOpenApiInfos:分组信息配置,SpecificationOpenApiInfo[],默认 { 'Group': 'Default'} SecurityDefinitions:安全策略定义配置,SpecificationOpenApiSecurityScheme[],默认 [] Servers:配置 Server 下拉列表,OpenApiServer[] 类型,默认 [],如:{Servers:[ { Url:\"地址\", Description:\"描述\"} ]} HideServers:是否隐藏 Server 下拉列表,bool 类型,默认 true RouteTemplate:配置文档 swagger.json 路由模板,默认模板:swagger/{documentName}/swagger.json, {documentName} 代表分组名,必须保留原样 PackagesGroups:配置模块化内置分组名称,string[] 类型,默认 [] EnableEnumSchemaFilter:启用枚举 Schema 筛选器,bool 类型,默认 true EnableTagsOrderDocumentFilter:启用标签排序筛选器,bool 类型,默认 true ServerDir:配置 IIS 添加 Application 部署名,string 类型,默认空,仅在 Furion v3.2.0+` 有效 LoginInfo:配置 Swagger 是否需要登录才能访问,SpecificationLoginInfo 类型,默认 null,仅在 Furion v3.3.3+` 有效 Enabled:是否启用登录授权,默认 false CheckUrl:检查登录状态的 Url 地址,该地址必须是 POST 请求,已授权返回 200,否则返回 401 SubmitUrl:提交登录的 Url 地址,该地址必须是 POST 请求且只有一个 SpecificationAuth 类型参数,成功登录返回 200,否则返回 401,支持相对地址,以 / 开头 EnableAllGroups:启用 Swagger 总分组功能,自动将所有分组的接口合并到 All Groups 中,bool 类型,默认 false,仅在 Furion v3.3.4+` 有效 另外 SpecificationOpenApiInfo 内置配置如下: Group:分组唯一标识,string 类型,必填 Order:分组排序,int 类型,数字越大排前面,默认 0 Visible:配置分组是否可见,bool 类型,默认 true Title:配置分组标题,string 类型 Description:配置分组描述,string 类型 Version:配置分组版本,默认 1.0 TermsOfService:配置相关链接地址,Uri 类型 Contact:配置联系方式,OpenApiContact 类型 License:配置协议,OpenApiLicense 类型 配置示例: { \"SpecificationDocumentSettings\": { \"GroupOpenApiInfos\": [ { \"Group\": \"Group1\", \"Title\": \"分组标题\", \"Description\": \"这里是分组描述\", \"Version\": \"版本号\", \"TermsOfService\": \"https://furion.icu\", \"Contact\": { \"Name\": \"百小僧\", \"Url\": \"https://gitee.com/monksoul\", \"Email\": \"monksoul@outlook.com\" }, \"License\": { \"Name\": \"MIT\", \"Url\": \"https://gitee.com/dotnetchina/Furion/blob/alpha/LICENSE\" } } ] } }","s":"6.6 SpecificationDocumentSettings 配置","u":"/docs/specification-document","h":"#66-specificationdocumentsettings-配置","p":3606},{"i":3708,"t":"Furion 框架提供 规范化结果 功能,可以通过实现 IUnifyResultProvider 提供器实现统一规范化返回值定制,如: 定义结果包装类型 // 必须是泛型类型 public class YourRESTfulResult { /// /// 状态码 /// public int? StatusCode { get; set; } /// /// 数据 /// public T Data { get; set; } /// /// 执行成功 /// public bool Succeeded { get; set; } /// /// 错误信息 /// public object Errors { get; set; } /// /// 附加数据 /// public object Extras { get; set; } /// /// 时间戳 /// public long Timestamp { get; set; } } 定义 IUnifyResultProvider 实现类,并贴特性 [UnifyModel(typeof(YourRESTfulResult<>))] using Furion.DataValidation; using Furion.DependencyInjection; using Furion.UnifyResult.Internal; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Threading.Tasks; namespace YourProject.UnifyResult { /// /// RESTful 风格返回值 /// [UnifyModel(typeof(YourRESTfulResult<>))] public class YourRESTfulResultProvider : IUnifyResultProvider { /// /// 异常返回值 /// /// /// /// public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata) { return new JsonResult(YourRESTfulResult(metadata.StatusCode, data: metadata.Data, errors: metadata.Errors) , UnifyContext.GetSerializerSettings(context)); // 当前行仅限 Furion 4.6.6+ 使用 } /// /// 成功返回值 /// /// /// /// public IActionResult OnSucceeded(ActionExecutedContext context, object data) { return new JsonResult(YourRESTfulResult(StatusCodes.Status200OK, true, data) , UnifyContext.GetSerializerSettings(context)); // 当前行仅限 Furion 4.6.6+ 使用 } /// /// 验证失败返回值 /// /// /// /// public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata) { return new JsonResult(YourRESTfulResult(metadata.StatusCode ?? StatusCodes.Status400BadRequest, data: metadata.Data, errors: metadata.ValidationResult) , UnifyContext.GetSerializerSettings(context)); // 当前行仅限 Furion 4.6.6+ 使用 } /// /// 特定状态码返回值 /// /// /// /// /// public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings) { // 设置响应状态码 UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings); switch (statusCode) { // 处理 401 状态码 case StatusCodes.Status401Unauthorized: await context.Response.WriteAsJsonAsync(YourRESTfulResult(statusCode, errors: \"401 Unauthorized\") , App.GetOptions()?.JsonSerializerOptions); break; // 处理 403 状态码 case StatusCodes.Status403Forbidden: await context.Response.WriteAsJsonAsync(YourRESTfulResult(statusCode, errors: \"403 Forbidden\") , App.GetOptions()?.JsonSerializerOptions); break; default: break; } } /// /// 返回 RESTful 风格结果集 /// /// /// /// /// /// private static YourRESTfulResult YourRESTfulResult(int statusCode, bool succeeded = default, object data = default, object errors = default) { return new YourRESTfulResult { StatusCode = statusCode, Succeeded = succeeded, Data = data, Errors = errors, Extras = UnifyContext.Take(), Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }; } } } 之后在 Startup.cs 中注册即可: services.AddControllers() .AddInjectWithUnifyResult(); 特别注意 默认情况下,规范化结果不会对 401 和 403、404 状态码进行规范化处理,如需启动该状态码处理,只需在 Startup.cs 中的 Configure 中启用接口: public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 添加规范化结果状态码,需要在这里注册 app.UseUnifyResultStatusCodes(); // 其他注册... }","s":"6.7 统一返回值模型/规范化结果/API 返回值","u":"/docs/specification-document","h":"#67-统一返回值模型规范化结果api-返回值","p":3606},{"i":3710,"t":"有些时候,我们某些接口不需要进行规范化处理,这时,我们只需要帖 [NonUnify] 特性即可。","s":"6.7.1 排除规范化处理","u":"/docs/specification-document","h":"#671-排除规范化处理","p":3606},{"i":3712,"t":"默认的规范化结果中包含 extras 属性,可以配置额外数据返回到客户端: UnifyContext.Fill(new { Message = \"操作成功\" });","s":"6.7.2 规范化结果添加额外数据","u":"/docs/specification-document","h":"#672-规范化结果添加额外数据","p":3606},{"i":3714,"t":"有些时候,我们特定接口需返回特定的接口类型,无需规范化处理,这时候我们只需要贴 [UnifyResult(typeof(结果类))] 或 [ProducesResponseType(typeof(结果类),200)],如: [UnifyResult(typeof(Person))] public Person GetPerson(int id) { // ... }","s":"6.7.3 自定义特别接口规范化结果","u":"/docs/specification-document","h":"#673-自定义特别接口规范化结果","p":3606},{"i":3716,"t":"版本说明 以下内容仅限 Furion 4.4.4 + 版本使用。 在一些情况下,我们可能需要针对特定的控制器(动态 WebAPI)或特定的方法使用不同的规范化处理机制,这时就需要多套规范化处理提供器,如: 定义规范化处理提供程序 [UnifyModel(typeof(MyResult<>))] public class SpeciallyResultProvider : IUnifyResultProvider { public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata) { // 参考上面的规范化处理写法 } public IActionResult OnSucceeded(ActionExecutedContext context, object data) { // 参考上面的规范化处理写法 } public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata) { // 参考上面的规范化处理写法 } public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings) { // 参考上面的规范化处理写法 } } public class MyResult { /// /// 数据 /// public T Data { get; set; } } 注册规范化处理提供器 services.AddUnifyProvider(\"specially\"); // 指定规范化唯一名称,如果不指定就会替代默认的 在控制器/动态 WebAPI 中使用 public class TestUnifyProvider : IDynamicApiController { public string DefaultUnify() { return \"test\"; } [UnifyProvider] public string DefaultUnify2() { return \"test\"; } [UnifyProvider(\"specially\")] public string SpeciallyUnify() { return \"特别\"; } }","s":"6.8 支持多套规范化配置","u":"/docs/specification-document","h":"#68-支持多套规范化配置","p":3606},{"i":3718,"t":"很少开发者注意到 new JsonResult(data) 实际上有第二个参数的,也就是 new JsonResult(data, serializerSettings),那么可以根据自己的逻辑传递第二个参数,如果不传递则采用全局配置的序列化选项。 Furion 框架提供两种处理方式。","s":"6.9 针对特定控制器或特定方法配置序列化选项","u":"/docs/specification-document","h":"#69-针对特定控制器或特定方法配置序列化选项","p":3606},{"i":3720,"t":"这种方式比较原始化,代码比较繁杂,也不利于维护。 [NonUnify] public IActionResult SpecialApi() { return new JsonResult(new YourRESTfulResult { StatusCode = 200, Succeeded = true, Data = new { Name = \"Furion\" }, Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }, new JsonSerializerOptions { PropertyNamingPolicy = null }); }","s":"6.9.1 通过 JsonResult 设置第二个参数","u":"/docs/specification-document","h":"#691-通过-jsonresult-设置第二个参数","p":3606},{"i":3722,"t":"版本说明 以下内容仅限 Furion 4.6.6 + 版本使用。 在 Startup.cs 中注册一套新的规则: services.AddUnifyJsonOptions(\"special\", new JsonSerializerOptions // 如果使用 Newtonsoft.Json => new JsonSerializerSettings { PropertyNamingPolicy = null }); 代码使用: [UnifySerializerSetting(\"special\")] public object SpecialApi() { return new { Name = \"Furion\" } } 特别提醒 目前 Swagger 暂未提供个别的接口自定义 schema 序列化选项。","s":"6.9.2 注册多套序列化配置选项 (推荐)","u":"/docs/specification-document","h":"#692-注册多套序列化配置选项-推荐","p":3606},{"i":3724,"t":"与我们交流 给 Furion 提 Issue。","s":"6.10 反馈与建议","u":"/docs/specification-document","h":"#610-反馈与建议","p":3606},{"i":3727,"t":"视图引擎负责根据视图模板创建 HTML。视图通常是 HTML 和编程语言的某种混合。支持变量定义、方法调用及逻辑编写。 在 Furion 框架中,底层集成了微软提供的 Razor 视图引擎组件并提供更加灵活方便的语法糖。","s":"17.1 关于视图引擎","u":"/docs/view-engine","h":"#171-关于视图引擎","p":3725},{"i":3729,"t":"支持 ASP.NET Core 完整的 Razor 语法 根据不同的数据编译模板产生不同的输出 实现强大的插件化机制 实现全站页面静态化 可以用作邮件模板、短信模板、优惠券信息模板等","s":"17.2 视图引擎作用","u":"/docs/view-engine","h":"#172-视图引擎作用","p":3725},{"i":3732,"t":"使用之前需在 Startup.cs 中注册 视图引擎服务: public void ConfigureServices(IServiceCollection services) { services.AddViewEngine(); }","s":"17.3.1 注册服务","u":"/docs/view-engine","h":"#1731-注册服务","p":3725},{"i":3734,"t":"构造函数注入 IViewEngine using Furion.DynamicApiController; using Furion.ViewEngine; namespace Furion.Application { public class ViewEngineService : IDynamicApiController { private readonly IViewEngine _viewEngine; public ViewEngineService(IViewEngine viewEngine) { _viewEngine = viewEngine; var result = _viewEngine.RunCompile(\"Hello @Model.Name\", new { Name = \"Furion\" }); } } } 字符串方式 var result = \"Hello @Model.Name\".RunCompile(new { Name = \"Furion\" });","s":"17.3.2 使用方式","u":"/docs/view-engine","h":"#1732-使用方式","p":3725},{"i":3736,"t":"var result = _viewEngine.RunCompile(\"Hello @Model.Name\", new { Name = \"Furion\" }); 结果: Hello Furion 支持异步 RunCompileAsync","s":"17.3.3 弱类型模板","u":"/docs/view-engine","h":"#1733-弱类型模板","p":3725},{"i":3738,"t":"var result = _viewEngine.RunCompile(@\" Hello @Model.Name @foreach(var item in Model.Items) {

@item

} \", new TestModel { Name = \"Furion\", Items = new[] { 3, 1, 2 } }); 结果: Hello Furion

3

1

2

支持异步 RunCompileAsync","s":"17.3.4 强类型模板","u":"/docs/view-engine","h":"#1734-强类型模板","p":3725},{"i":3740,"t":"由于模板编译需要消耗大量的性能,所以建议使用带 FromCached 结尾的 RunCompileFromCached 替代。调用该方法后会自动将模板编译成 .dll 以便下次使用。减少第二次之后使用模板的性能损耗。 如,强类型模板: var result = _viewEngine.RunCompileFromCached(@\" Hello @Model.Name @foreach(var item in Model.Items) {

@item

} \", new TestModel { Name = \"Furion\", Items = new[] { 3, 1, 2 } }); 结果: Hello Furion

3

1

2

调用 RunCompileFromCached 方法之后将会使用 MD5 加密模板并生成 MD5字符串的 .dll 存放在网站根目录下的 templates 目录中。只要模板内容不变,数据发生改变也不会重新编译模板。这样大大的提高了首次之后的性能。 如,传入新的数据: var result = _viewEngine.RunCompileFromCached(@\" Hello @Model.Name @foreach(var item in Model.Items) {

@item

} \", new TestModel { Name = \"Furion\", Items = new[] { 5,6,7,8 } }); 结果: Hello Furion

5

6

7

8

模板不再重新编译,只是重新替换数据。","s":"17.3.5 高性能模板缓存 🥇","u":"/docs/view-engine","h":"#1735-高性能模板缓存-","p":3725},{"i":3742,"t":"高级用法支持将特定程序集、特定命名空间、特定类型引入到模板中使用。","s":"17.4 高级用法","u":"/docs/view-engine","h":"#174-高级用法","p":3725},{"i":3744,"t":"比如这里添加 System.IO 程序集: var result = _viewEngine.RunCompileFromCached(@\"
@System.IO.Path.Combine(\"\"Furion\"\", \"\"ViewEngine\"\")
\", builderAction: builder => { builder.AddAssemblyReferenceByName(\"System.IO\"); }); 结果:
Furion\\\\ViewEngine
另外,Furion 提供多种方式加载程序集: builder.AddAssemblyReferenceByName(\"System.Security\"); // 通过名称 builder.AddAssemblyReference(typeof(System.IO.File)); // 通过类型 builder.AddAssemblyReference(Assembly.Load(\"source\")); // 通过元数据引用","s":"17.4.1 添加程序集","u":"/docs/view-engine","h":"#1741-添加程序集","p":3725},{"i":3746,"t":"var result = _viewEngine.RunCompileFromCached(@\"
@Path.Combine(\"\"Furion\"\", \"\"ViewEngine\"\")
\", builderAction: builder => { builder.AddUsing(\"System.IO\"); builder.AddAssemblyReferenceByName(\"System.IO\"); }); 结果:
Furion\\\\ViewEngine
也支持加入多个 using: builder.AddUsing(\"System.IO\"); builder.AddUsing(\"Furion\");","s":"17.4.2 添加命名空间","u":"/docs/view-engine","h":"#1742-添加命名空间","p":3725},{"i":3748,"t":"var result = _viewEngine.RunCompileFromCached(@\" @{ RecursionTest(3); } @{ void RecursionTest(int level) { if (level <= 0) { return; }
LEVEL: @level
@{ RecursionTest(level - 1); } } } \"); 结果:
LEVEL: 3
LEVEL: 2
LEVEL: 1
","s":"17.4.3 定义模板方法","u":"/docs/view-engine","h":"#1743-定义模板方法","p":3725},{"i":3750,"t":"定义 CustomModel 类并继承 ViewEngineModel 基类 public class CustomModel : ViewEngineModel { public int A { get; set; } public string B { get; set; } public string Decorator(object value) { return \"-=\" + value + \"=-\"; } } 在模板中调用 Decorator(value) 方法: var content = @\"Hello @A, @B, @Decorator(123)\"; var template = _viewEngine.Compile(content); var result = template.Run(instance => { instance.A = 10; instance.B = \"Alex\"; }); 结果: Hello 10, Alex, -=123=-","s":"17.4.4 调用类方法","u":"/docs/view-engine","h":"#1744-调用类方法","p":3725},{"i":3752,"t":"IViewEngine 提供了简单方便的 RunCompile 方法,也提供了最原始化的 Compile 和 Run 方法。 通过原始的 Compile 和 Run 方法可以实现很多复杂的逻辑和自定义指令集。 /// /// 编译模板 /// /// /// /// IViewEngineTemplate Compile(string content, Action builderAction = null); /// /// 编译模板 /// /// /// /// Task CompileAsync(string content, Action builderAction = null); /// /// 编译模板 /// /// /// /// /// IViewEngineTemplate Compile(string content, Action builderAction = null) where T : IViewEngineModel; /// /// 编译模板 /// /// /// /// /// Task> CompileAsync(string content, Action builderAction = null) where T : IViewEngineModel;","s":"17.5 IViewEngine 接口","u":"/docs/view-engine","h":"#175-iviewengine-接口","p":3725},{"i":3754,"t":"Furion 除了内置视图引擎之外,还支持以下几种模板替换,如: // 提供数据模板方式 var str = \"我叫{name}\".Render(new Dictionary{ {\"name\", \"Furion\"} }); var str = \"我叫{Name}\".Render(new { Name = \"Furion\" }); var str = \"我叫{Detail.Name}\".Render(new { Detail = new { Name = \"Furoin\" } }); // 从配置读取方式 var str = \"我叫#(Furion:Address)\".Render(); { \"Furion\": { \"Address\": \"https://www.furion.icu\" } }","s":"17.6 字符串模板替换引擎","u":"/docs/view-engine","h":"#176-字符串模板替换引擎","p":3725},{"i":3756,"t":"与我们交流 给 Furion 提 Issue。","s":"17.7 反馈与建议","u":"/docs/view-engine","h":"#177-反馈与建议","p":3725},{"i":3758,"t":"当前文档还未发布 当前文档还在编写中,已完成了 95%,将在 2022 年 11 月 23 日完成。 4.8.0 以下版本说明 在 Furion 4.8.0+ 版本采用 Sundial 定时任务替换原有的 TaskScheduler,查看旧文档 版本说明 以下内容仅限 Furion 4.8.0 + 版本使用。","s":"26.1 调度作业","u":"/docs/job","h":"","p":3757},{"i":3760,"t":"调度作业又称定时任务,顾名思义,定时任务就是在特定的时间或符合某种时间规律自动触发并执行任务。","s":"26.1.1 关于调度作业","u":"/docs/job","h":"#2611-关于调度作业","p":3757},{"i":3762,"t":"定义作业处理程序 MyJob: public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}\"); await Task.CompletedTask; } } 在 Startup.cs 注册 Schedule 服务: services.AddSchedule(options => { // 注册作业,并配置作业触发器 options.AddJob(Triggers.Secondly()); // 表示每秒执行 }); 查看作业执行结果 info: 2022-11-17 16:23:56.0166669 +08:00 星期四 L MyJob[0] #16 job1 job1_trigger1 2022/11/17 16:23:56 * * * * * * info: 2022-11-17 16:23:57.0125960 +08:00 星期四 L MyJob[0] #17 job1 job1_trigger1 2022/11/17 16:23:57 * * * * * * info: 2022-11-17 16:23:58.0120379 +08:00 星期四 L MyJob[0] #16 job1 job1_trigger1 2022/11/17 16:23:58 * * * * * * info: 2022-11-17 16:23:59.0071986 +08:00 星期四 L MyJob[0] #5 job1 job1_trigger1 2022/11/17 16:23:59 * * * * * * info: 2022-11-17 16:24:00.0196813 +08:00 星期四 L MyJob[0] #16 job1 job1_trigger1 2022/11/17 16:24:00 * * * * * * info: 2022-11-17 16:24:01.0305799 +08:00 星期四 L MyJob[0] #17 job1 job1_trigger1 2022/11/17 16:24:01 * * * * * *","s":"26.1.2 快速入门","u":"/docs/job","h":"#2612-快速入门","p":3757},{"i":3764,"t":"默认情况下,不指定作业 Id 会自动生成 job[编号]。 services.AddSchedule(options => { options.AddJob(\"myjob\", Triggers.Secondly()); }); 查看作业执行结果: info: 2022-11-17 16:25:44.0339177 +08:00 星期四 L MyJob[0] #3 myjob myjob_trigger1 2022/11/17 16:25:44 * * * * * * info: 2022-11-17 16:25:45.0064838 +08:00 星期四 L MyJob[0] #14 myjob myjob_trigger1 2022/11/17 16:25:45 * * * * * * info: 2022-11-17 16:25:46.0186243 +08:00 星期四 L MyJob[0] #15 myjob myjob_trigger1 2022/11/17 16:25:46 * * * * * * info: 2022-11-17 16:25:47.0175115 +08:00 星期四 L MyJob[0] #16 myjob myjob_trigger1 2022/11/17 16:25:47 * * * * * * info: 2022-11-17 16:25:48.0304982 +08:00 星期四 L MyJob[0] #15 myjob myjob_trigger1 2022/11/17 16:25:48 * * * * * * info: 2022-11-17 16:25:49.0070855 +08:00 星期四 L MyJob[0] #16 myjob myjob_trigger1 2022/11/17 16:25:49 * * * * * *","s":"26.1.2.1 指定作业 Id","u":"/docs/job","h":"#26121-指定作业-id","p":3757},{"i":3766,"t":"有时候,一个作业支持多种触发时间,比如 每分钟 执行一次,每 5秒 执行一次,每分钟第 3/7/8秒 执行一次。 services.AddSchedule(options => { options.AddJob(Triggers.Minutely() // 每分钟开始 , Triggers.Period(5000) // 每 5 秒,也可以使用 Triggers.PeriodSeconds(5) , Triggers.Cron(\"3,7,8 * * * * ?\", CronStringFormat.WithSeconds)); // 每分钟第 3/7/8 秒 }); 查看作业执行结果: info: 2022-11-17 16:45:40.5258191 +08:00 星期四 L MyJob[0] #14 job1 job1_trigger2 2022/11/17 16:45:40 5000ms info: 2022-11-17 16:45:45.5281473 +08:00 星期四 L MyJob[0] #3 job1 job1_trigger2 2022/11/17 16:45:45 5000ms info: 2022-11-17 16:45:50.5378417 +08:00 星期四 L MyJob[0] #8 job1 job1_trigger2 2022/11/17 16:45:50 5000ms info: 2022-11-17 16:45:55.5436499 +08:00 星期四 L MyJob[0] #3 job1 job1_trigger2 2022/11/17 16:45:55 5000ms info: 2022-11-17 16:46:00.0253985 +08:00 星期四 L MyJob[0] #14 job1 job1_trigger1 2022/11/17 16:46:00 * * * * * info: 2022-11-17 16:46:00.5494676 +08:00 星期四 L MyJob[0] #16 job1 job1_trigger2 2022/11/17 16:46:00 5000ms info: 2022-11-17 16:46:03.0238143 +08:00 星期四 L MyJob[0] #15 job1 job1_trigger3 2022/11/17 16:46:03 3,7,8 * * * * ? info: 2022-11-17 16:46:05.5629293 +08:00 星期四 L MyJob[0] #14 job1 job1_trigger2 2022/11/17 16:46:05 5000ms info: 2022-11-17 16:46:07.0169836 +08:00 星期四 L MyJob[0] #15 job1 job1_trigger3 2022/11/17 16:46:07 3,7,8 * * * * ? info: 2022-11-17 16:46:08.0128756 +08:00 星期四 L MyJob[0] #14 job1 job1_trigger3 2022/11/17 16:46:08 3,7,8 * * * * ? info: 2022-11-17 16:46:10.5731138 +08:00 星期四 L MyJob[0] #8 job1 job1_trigger2 2022/11/17 16:46:10 5000ms info: 2022-11-17 16:46:15.5841547 +08:00 星期四 L MyJob[0] #15 job1 job1_trigger2 2022/11/17 16:46:15 5000ms info: 2022-11-17 16:46:20.5866898 +08:00 星期四 L MyJob[0] #8 job1 job1_trigger2 2022/11/17 16:46:20 5000ms","s":"26.1.2.2 多个作业触发器","u":"/docs/job","h":"#26122-多个作业触发器","p":3757},{"i":3768,"t":"默认情况下,作业采用 并行 执行方式,也就是不会等待上一次作业执行完成,只要触发时间到了就自动执行,但一些情况下,我们可能希望等待上一次作业完成再执行,如: services.AddSchedule(options => { options.AddJob(concurrent: false, Triggers.Secondly()); // 串行,每秒执行 }); public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}\"); await Task.Delay(2000, stoppingToken); // 这里模拟耗时操作,比如耗时2秒 } } 查看作业执行结果: info: 2022-11-17 16:57:49.0898900 +08:00 星期四 L MyJob[0] #8 job1 job1_trigger1 2022/11/17 16:57:49 * * * * * * warn: 2022-11-17 16:57:50.0322409 +08:00 星期四 L System.Logging.ScheduleService[0] #8 11/17/2022 16:57:50: The trigger of job failed to execute as scheduled due to blocking. warn: 2022-11-17 16:57:51.0099629 +08:00 星期四 L System.Logging.ScheduleService[0] #8 11/17/2022 16:57:51: The trigger of job failed to execute as scheduled due to blocking. info: 2022-11-17 16:57:52.0192847 +08:00 星期四 L MyJob[0] #8 job1 job1_trigger1 2022/11/17 16:57:52 * * * * * * warn: 2022-11-17 16:57:53.0159256 +08:00 星期四 L System.Logging.ScheduleService[0] #8 11/17/2022 16:57:53: The trigger of job failed to execute as scheduled due to blocking. warn: 2022-11-17 16:57:54.0101172 +08:00 星期四 L System.Logging.ScheduleService[0] #8 11/17/2022 16:57:54: The trigger of job failed to execute as scheduled due to blocking. info: 2022-11-17 16:57:55.0038536 +08:00 星期四 L MyJob[0] #13 job1 job1_trigger1 2022/11/17 16:57:55 * * * * * * warn: 2022-11-17 16:57:56.0158085 +08:00 星期四 L System.Logging.ScheduleService[0] #16 11/17/2022 16:57:56: The trigger of job failed to execute as scheduled due to blocking. warn: 2022-11-17 16:57:57.0276842 +08:00 星期四 L System.Logging.ScheduleService[0] #16 11/17/2022 16:57:57: The trigger of job failed to execute as scheduled due to blocking. info: 2022-11-17 16:57:58.0100972 +08:00 星期四 L MyJob[0] #13 job1 job1_trigger1 2022/11/17 16:57:58 * * * * * * warn: 2022-11-17 16:57:59.0149137 +08:00 星期四 L System.Logging.ScheduleService[0] #13 11/17/2022 16:57:59: The trigger of job failed to execute as scheduled due to blocking. 默认情况下,使用 串行 执行但因为耗时导致触发时间到了但实际未能执行会默认输出 warn 警告日志,如需关闭只需要: services.AddSchedule(options => { options.LogEnabled = false; options.AddJob(concurrent: false, Triggers.Secondly()); // 每秒执行 }); 查看作业执行结果: info: 2022-11-17 17:02:28.0559602 +08:00 星期四 L MyJob[0] #5 job1 job1_trigger1 2022/11/17 17:02:28 * * * * * * info: 2022-11-17 17:02:31.0183238 +08:00 星期四 L MyJob[0] #8 job1 job1_trigger1 2022/11/17 17:02:31 * * * * * * info: 2022-11-17 17:02:34.0130555 +08:00 星期四 L MyJob[0] #13 job1 job1_trigger1 2022/11/17 17:02:34 * * * * * * info: 2022-11-17 17:02:37.0040306 +08:00 星期四 L MyJob[0] #15 job1 job1_trigger1 2022/11/17 17:02:37 * * * * * * info: 2022-11-17 17:02:39.0142346 +08:00 星期四 L MyJob[0] #15 job1 job1_trigger1 2022/11/17 17:02:39 * * * * * *","s":"26.1.2.3 串行 执行","u":"/docs/job","h":"#26123-串行-执行","p":3757},{"i":3770,"t":"框架提供了四种方式打印作业完整信息。 第一种:输出完整的作业 JSON 信息:context.ConvertToJSON() public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { _logger.LogInformation(context.ConvertToJSON()); await Task.CompletedTask; } } 查看作业打印结果: info: 2022-11-17 17:13:41.0480946 +08:00 星期四 L MyJob[0] #5 { \"jobDetail\": { \"jobId\": \"job1\", \"groupName\": null, \"jobType\": \"MyJob\", \"assemblyName\": \"ConsoleApp32\", \"description\": null, \"concurrent\": false, \"includeAnnotations\": false, \"properties\": \"{}\", \"updatedTime\": \"2022-11-17T17:13:41.0247430+08:00\" }, \"trigger\": { \"triggerId\": \"job1_trigger1\", \"jobId\": \"job1\", \"triggerType\": \"Furion.Schedule.CronTrigger\", \"assemblyName\": \"Furion\", \"args\": \"[\\\"@secondly\\\",0]\", \"description\": null, \"status\": 2, \"startTime\": null, \"endTime\": null, \"lastRunTime\": \"2022-11-17T17:13:41.0000000\", \"nextRunTime\": \"2022-11-17T17:13:42.0000000\", \"numberOfRuns\": 1, \"maxNumberOfRuns\": 0, \"numberOfErrors\": 0, \"maxNumberOfErrors\": 0, \"numRetries\": 0, \"retryTimeout\": 1000, \"startNow\": true, \"runOnStart\": fals, \"updatedTime\": \"2022-11-17T17:13:41.0250214+08:00\" } } 第二种:输出单独的作业 JSON 信息:jobDetail.ConvertToJSON() 或 trigger.ConvertToJSON() public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { var jobDetail = context.JobDetail; var trigger = context.Trigger; _logger.LogInformation(jobDetail.ConvertToJSON()); _logger.LogInformation(trigger.ConvertToJSON(NamingConventions.UnderScoreCase)); // 支持三种属性名输出规则 await Task.CompletedTask; } } 查看作业打印结果: info: 2022-11-17 17:17:15.0441407 +08:00 星期四 L MyJob[0] #3 { \"jobId\": \"job1\", \"groupName\": null, \"jobType\": \"MyJob\", \"assemblyName\": \"ConsoleApp32\", \"description\": null, \"concurrent\": false, \"includeAnnotations\": false, \"properties\": \"{}\", \"updatedTime\": \"2022-11-17T17:17:15.0103913+08:00\" } info: 2022-11-17 17:17:15.0503546 +08:00 星期四 L MyJob[0] #3 { \"trigger_id\": \"job1_trigger1\", \"job_id\": \"job1\", \"trigger_type\": \"Furion.Schedule.CronTrigger\", \"assembly_name\": \"Furion\", \"args\": \"[\\\"@secondly\\\",0]\", \"description\": null, \"status\": 2, \"start_time\": null, \"end_time\": null, \"last_run_time\": \"2022-11-17T17:17:15.0000000\", \"next_run_time\": \"2022-11-17T17:17:16.0000000\", \"number_of_runs\": 1, \"max_number_of_runs\": 0, \"number_of_errors\": 0, \"max_number_of_errors\": 0, \"num_retries\": 0, \"retry_timeout\": 1000, \"start_now\": true, \"run_on_start\": false, \"updated_time\": \"2022-11-17T17:17:15.0109612+08:00\" } 第三种:输出单独的作业 SQL 信息:jobDetail.ConvertToSQL() 或 trigger.ConvertToSQL() public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { var jobDetail = context.JobDetail; var trigger = context.Trigger; _logger.LogInformation(jobDetail.ConvertToSQL(\"作业信息表名\", PersistenceBehavior.Appended)); // 输出新增语句 _logger.LogInformation(trigger.ConvertToSQL(\"作业触发器表名\", PersistenceBehavior.Removed, NamingConventions.Pascal)); // 输出删除语句 _logger.LogInformation(trigger.ConvertToSQL(\"作业触发器表名\", PersistenceBehavior.Updated, NamingConventions.UnderScoreCase)); // 输出更新语句 await Task.CompletedTask; } } 查看作业打印结果: info: 2022-11-17 17:35:11.1085426 +08:00 星期四 L MyJob[0] #9 INSERT INTO 作业信息表名( [jobId], [groupName], [jobType], [assemblyName], [description], [concurrent], [includeAnnotations], [properties], [updatedTime] ) VALUES( 'job1', NULL, 'MyJob', 'ConsoleApp32', NULL, 0, 0, '{}', '2022/11/17 17:35:11' ); info: 2022-11-17 17:35:11.1150444 +08:00 星期四 L MyJob[0] #9 DELETE FROM 作业触发器表名 WHERE [TriggerId] = 'job1_trigger1' AND [JobId] = 'job1'; info: 2022-11-17 17:35:11.1190961 +08:00 星期四 L MyJob[0] #9 UPDATE 作业触发器表名 SET [trigger_id] = 'job1_trigger1', [job_id] = 'job1', [trigger_type] = 'Furion.Schedule.CronTrigger', [assembly_name] = 'Furion', [args] = '[\"@secondly\",0]', [description] = NULL, [status] = 2, [start_time] = NULL, [end_time] = NULL, [last_run_time] = '2022/11/17 17:35:11', [next_run_time] = '2022/11/17 17:35:12', [number_of_runs] = 1, [max_number_of_runs] = 0, [number_of_errors] = 0, [max_number_of_errors] = 0, [num_retries] = 0, [retry_timeout] = 1000, [start_now] = 1, [run_on_start] = 0, [updated_time] = '2022/11/17 17:35:11' WHERE [trigger_id] = 'job1_trigger1' AND [job_id] = 'job1'; 第四种:输出单独的作业 Monitor 信息:jobDetail.ConvertToMonitor() 或 trigger.ConvertToMonitor() public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { var jobDetail = context.JobDetail; var trigger = context.Trigger; _logger.LogInformation(jobDetail.ConvertToMonitor()); _logger.LogInformation(trigger.ConvertToMonitor()); await Task.CompletedTask; } } 查看作业打印结果: info: 2022-11-17 17:39:09.1086517 +08:00 星期四 L MyJob[0] #3 ┏━━━━━━━━━━━ JobDetail ━━━━━━━━━━━ ┣ MyJob ┣ ┣ JobId: job1 ┣ GroupName: ┣ JobType: MyJob ┣ AssemblyName: ConsoleApp32 ┣ Description: ┣ Concurrent: False ┣ IncludeAnnotations: False ┣ Properties: {} ┣ UpdatedTime: 2022/11/17 17:39:09 ┗━━━━━━━━━━━ JobDetail ━━━━━━━━━━━ info: 2022-11-17 17:39:09.1133162 +08:00 星期四 L MyJob[0] #3 ┏━━━━━━━━━━━ Trigger ━━━━━━━━━━━ ┣ Furion.Schedule.CronTrigger ┣ ┣ TriggerId: job1_trigger1 ┣ JobId: job1 ┣ TriggerType: Furion.Schedule.CronTrigger ┣ AssemblyName: Furion ┣ Args: [\"@secondly\",0] ┣ Description: ┣ Status: Running ┣ StartTime: ┣ EndTime: ┣ LastRunTime: 2022/11/17 17:39:09 ┣ NextRunTime: 2022/11/17 17:39:10 ┣ NumberOfRuns: 1 ┣ MaxNumberOfRuns: 0 ┣ NumberOfErrors: 0 ┣ MaxNumberOfErrors: 0 ┣ NumRetries: 0 ┣ RetryTimeout: 1000 ┣ StartNow: True ┣ RunOnStart: False ┣ UpdatedTime: 2022/11/17 17:39:09 ┗━━━━━━━━━━━ Trigger ━━━━━━━━━━━","s":"26.1.2.4 打印作业完整信息","u":"/docs/job","h":"#26124-打印作业完整信息","p":3757},{"i":3772,"t":"有时候,我们需要在运行时对作业动态的增加,更新,删除等操作,如动态添加作业: 注册 services.AddSchedule() 服务 // 可以完全动态操作,只需要注册服务即可 services.AddSchedule(); // 也可以部分静态,部分动态注册 services.AddSchedule(options => { options.AddJob(concurrent: false, Triggers.PeriodSeconds(5)); }); 注入 ISchedulerFactory 服务 public class YourService: IYourService { private readonly ISchedulerFactory _schedulerFactory; public YourService(ISchedulerFactory schedulerFactory) { _schedulerFactory = schedulerFactory; } public void AddJob() { _schedulerFactory.AddJob(\"动态作业 Id\", Triggers.Secondly()); } } 查看作业执行结果 warn: 2022-11-17 17:54:35.2654513 +08:00 星期四 L System.Logging.ScheduleService[0] #5 Schedule Hosted Service cancels hibernation. info: 2022-11-17 17:54:35.2670018 +08:00 星期四 L System.Logging.ScheduleService[0] #5 The Scheduler of <动态作业 Id> successfully added to the schedule. info: 2022-11-17 17:54:36.0834925 +08:00 星期四 L MyJob[0] #5 job1 job1_trigger1 2022/11/17 17:54:36 5000ms info: 2022-11-17 17:54:36.0911692 +08:00 星期四 L MyJob[0] #3 动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:36 * * * * * * info: 2022-11-17 17:54:37.0146251 +08:00 星期四 L MyJob[0] #18 动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:37 * * * * * * info: 2022-11-17 17:54:38.0071504 +08:00 星期四 L MyJob[0] #16 动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:38 * * * * * * info: 2022-11-17 17:54:39.0140840 +08:00 星期四 L MyJob[0] #17 动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:39 * * * * * * info: 2022-11-17 17:54:40.0173240 +08:00 星期四 L MyJob[0] #16 动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:40 * * * * * * info: 2022-11-17 17:54:41.0249043 +08:00 星期四 L MyJob[0] #16 动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:41 * * * * * * info: 2022-11-17 17:54:41.0550205 +08:00 星期四 L MyJob[0] #15 job1 job1_trigger1 2022/11/17 17:54:41 5000ms info: 2022-11-17 17:54:42.0171271 +08:00 星期四 L MyJob[0] #15 动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:42 * * * * * * info: 2022-11-17 17:54:43.0288486 +08:00 星期四 L MyJob[0] #18 动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:43 * * * * * * info: 2022-11-17 17:54:44.0092455 +08:00 星期四 L MyJob[0] #15 动态作业 Id 动态作业 Id_trigger1 2022/11/17 17:54:44 * * * * * *","s":"26.1.2.5 运行时(动态)操作作业","u":"/docs/job","h":"#26125-运行时动态操作作业","p":3757},{"i":3774,"t":"默认情况下,框架不会扫描 IJob 实现类的作业触发器特性,但可以设置作业的 IncludeAnnotations 进行启用。 启用 IncludeAnnotations 扫描 services.AddSchedule(options => { options.AddJob(JobBuilder.Create().SetIncludeAnnotations(true) , Triggers.PeriodSeconds(5)); // 这里可传可不传,传了则会自动载入特性和这里配置的作业触发器 }); 在 MyJob 中添加多个作业触发器特性 [Minutely] [Cron(\"3,7,8 * * * * ?\", CronStringFormat.WithSeconds)] public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}\"); await Task.CompletedTask; } } 查看作业执行结果 info: 2022-11-18 10:28:56.3382585 +08:00 星期五 L MyJob[0] #14 job1 job1_trigger1 2022/11/18 10:28:56 5000ms info: 2022-11-18 10:29:00.0219493 +08:00 星期五 L MyJob[0] #5 job1 job1_trigger2 2022/11/18 10:29:00 * * * * * info: 2022-11-18 10:29:01.3318716 +08:00 星期五 L MyJob[0] #14 job1 job1_trigger1 2022/11/18 10:29:01 5000ms info: 2022-11-18 10:29:03.0127992 +08:00 星期五 L MyJob[0] #16 job1 job1_trigger3 2022/11/18 10:29:03 3,7,8 * * * * ? info: 2022-11-18 10:29:06.3457728 +08:00 星期五 L MyJob[0] #16 job1 job1_trigger1 2022/11/18 10:29:06 5000ms info: 2022-11-18 10:29:07.0318919 +08:00 星期五 L MyJob[0] #14 job1 job1_trigger3 2022/11/18 10:29:07 3,7,8 * * * * ? info: 2022-11-18 10:29:08.0141479 +08:00 星期五 L MyJob[0] #8 job1 job1_trigger3 2022/11/18 10:29:08 3,7,8 * * * * ? info: 2022-11-18 10:29:11.3468100 +08:00 星期五 L MyJob[0] #16 job1 job1_trigger1 2022/11/18 10:29:11 5000ms info: 2022-11-18 10:29:16.3504029 +08:00 星期五 L MyJob[0] #14 job1 job1_trigger1 2022/11/18 10:29:16 5000ms","s":"26.1.2.6 作业触发器特性","u":"/docs/job","h":"#26126-作业触发器特性","p":3757},{"i":3777,"t":"框架提供了 JobDetail 类型来描述作业信息,JobDetail 类型提供以下只读属性: 属性名 属性类型 默认值 说明 JobId string 作业 Id GroupName string 作业组名称 JobType string 作业处理程序类型,存储的是类型的 FullName AssemblyName string 作业处理程序类型所在程序集,存储的是程序集 Name Description string 描述信息 Concurrent bool true 描述信息,如果设置为 false,那么使用 串行 执行 IncludeAnnotations bool false 是否扫描 IJob 实现类 [Trigger] 特性触发器 Properties string \"{}\" 作业信息额外数据,由 Dictionary 序列化成字符串存储 UpdatedTime DateTime? 作业更新时间","s":"26.1.3.1 关于作业信息","u":"/docs/job","h":"#26131-关于作业信息","p":3757},{"i":3779,"t":"作业信息 JobDetail 是作业调度模块提供运行时的只读类型,那么我们该如何创建或变更 JobDetail 对象呢? JobBuilder 是作业调度模块提供可用来生成运行时 JobDetail 的类型,这样做的好处可避免外部直接修改运行时 JobDetail 数据,还能实现任何修改动作监听,也能避免多线程抢占情况。 作业调度模块提供了多种方式用来创建 JobBuilder 对象。 通过 Create 静态方法创建 // 根据 IJob 实现类类型创建 var jobBuilder = JobBuilder.Create(); // 根据 Type 类型创建 var jobBuilder = JobBuilder.Create(typeof(MyJob)); // 根据程序集名称和类型完全限定名(FullName)创建 var jobBuilder = JobBuilder.Create(\"YourProject\", \"YourProject.MyJob\"); 通过 JobDetail 类型创建 这种方式常用于在运行时更新作业信息。 var jobBuilder = JobBuilder.From(jobDetail); 通过 JSON 字符串创建 该方式非常灵活,可从配置文件,JSON 字符串,或其他能够返回 JSON 字符串的地方创建。 var jobBuilder = JobBuilder.From(@\" { \"\"jobId\"\": \"\"job1\"\", \"\"groupName\"\": null, \"\"jobType\"\": \"\"Furion.Application.MyJob\"\", \"\"assemblyName\"\": \"\"Furion.Application\"\", \"\"description\"\": null, \"\"concurrent\"\": true, \"\"includeAnnotations\"\": false, \"\"properties\"\": \"\"{}\"\", \"\"updatedTime\"\": \"\"2022-11-17T09:25:47.0471107+08:00\"\" }\"); 如果使用的是 .NET7,可使用 \"\"\" 避免转义,如: var jobBuilder = JobBuilder.From(\"\"\" { \"jobId\": \"job1\", \"groupName\": null, \"jobType\": \"Furion.Application.MyJob\", \"assemblyName\": \"Furion.Application\", \"description\": null, \"concurrent\": true, \"includeAnnotations\": false, \"properties\": \"{}\", \"updatedTime\": \"2022-11-17T09:25:47.0471107+08:00\" } \"\"\"); 关于属性名匹配规则 支持 CamelCase(驼峰命名法),Pascal(帕斯卡命名法) 命名方式。 不支持 UnderScoreCase(下划线命名法) ,如 \"include_annotations\": true 还可以通过 Clone 静态方法从一个 JobBuilder 创建 var jobBuilder = JobBuilder.Clone(fromJobBuilder); 克隆说明 克隆操作只会克隆 AssemblyName,JobType,GroupName,Description,Concurrent,IncludeAnnotations,Properties。 不会克隆 JobId,UpdatedTime。 还可以通过 LoadFrom 实例方法填充当前的 JobBuilder 比如可以传递匿名类型,类类型: // 会覆盖所有相同的值 jobBuilder.LoadFrom(new { Description = \"我是描述\", Concurrent = false }); // 支持多个填充,还可以配置跳过 null 值覆盖 jobBuilder.LoadFrom(new { Description = \"我是另外一个描述\", Concurrent = false, IncludeAnnotations = default(object) // 会跳过赋值 }, ignoreNullValue: true); 关于属性名匹配规则 支持 CamelCase(驼峰命名法),Pascal(帕斯卡命名法) 和 UnderScoreCase(下划线命名法) 命名方式。","s":"26.1.3.2 关于作业信息构建器","u":"/docs/job","h":"#26132-关于作业信息构建器","p":3757},{"i":3781,"t":"JobBuilder 提供了和 JobDetail 完全匹配的 Set[属性名] 方法来配置作业信息各个属性,如: services.AddSchedule(options => { var jobBuilder = JobBuilder.Create() .SetJobId(\"job1\") // 作业 Id .SetGroupName(\"group1\") // 作业组名称 .SetJobType(\"Furion.Application\", \"Furion.Application.MyJob\") // 作业类型,支持多个重载 .SetJobType() // 作业类型,支持多个重载 .SetJobType(typeof(MyJob)) // 作业类型,支持多个重载 .SetDescription(\"这是一段描述\") // 作业描述 .SetConcurrent(false) // 并行还是串行方式,false 为 串行 .SetIncludeAnnotations(true) // 是否扫描 IJob 类型的触发器特性,true 为 扫描 .SetProperties(\"{}\") // 作业额外数据 Dictionary 类型序列化,支持多个重载 .SetProperties(new Dictionary { { \"name\", \"Furion\" } }) // 作业类型额外数据,支持多个重载,推荐!!! ; options.AddJob(jobBuilder, Triggers.PeriodSeconds(5)); });","s":"26.1.3.3 设置作业信息构建器","u":"/docs/job","h":"#26133-设置作业信息构建器","p":3757},{"i":3783,"t":"有时候我们需要在作业运行的时候添加一些额外数据,或者实现多个触发器共享数据,经常用于 串行 执行中,后面一个触发器需等待前一个触发器完成。 public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { var jobDetail = context.JobDetail; var count = jobDetail.GetProperty(\"count\"); jobDetail.AddOrUpdateProperty(\"count\", count + 1); // 递增 count _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger} {count}\"); await Task.CompletedTask; } } 查看作业运行日志: info: 2022-11-18 16:48:35.8308170 +08:00 星期五 L ConsoleApp32.MyJob[0] #5 job1 job1_trigger1 2022/11/18 16:48:35 5000ms 0 info: 2022-11-18 16:48:40.8437231 +08:00 星期五 L ConsoleApp32.MyJob[0] #8 job1 job1_trigger1 2022/11/18 16:48:40 5000ms 1 info: 2022-11-18 16:48:45.8471287 +08:00 星期五 L ConsoleApp32.MyJob[0] #15 job1 job1_trigger1 2022/11/18 16:48:45 5000ms 2 info: 2022-11-18 16:48:50.8607141 +08:00 星期五 L ConsoleApp32.MyJob[0] #15 job1 job1_trigger1 2022/11/18 16:48:50 5000ms 3 info: 2022-11-18 16:48:55.8645520 +08:00 星期五 L ConsoleApp32.MyJob[0] #14 job1 job1_trigger1 2022/11/18 16:48:55 5000ms 4 作业调度模块为 JobDetail 和 JobBuilder 提供了多个方法操作额外数据: // 查看所有额外数据 var properties = jobDetail.GetProperties(); // 查看单个额外数据,返回 object var value = jobBuilder.GetProperty(\"key\"); // 查看单个额外数据泛型 var value = jobDetail.GetProperty(\"key\"); // 添加新的额外数据,支持链式操作,如果键已存在,则跳过 jobDetail.AddProperty(\"key\", \"Furion\").AddProperty(\"key1\", 2); // 添加或更新额外数据,支持链式操作,不存在则新增,存在则替换,推荐 jobDetail.AddOrUpdateProperty(\"key\", \"Furion\").AddOrUpdateProperty(\"key1\", 2); // 删除某个额外数据,支持链式操作,如果 key 不存在则跳过 jobDetail.RemoveProperty(\"key\").RemoveProperty(\"key1\"); // 清空所有额外数据 jobDetail.ClearProperties(); 作业额外数据类型支持 作业额外数据每一项的值只支持 int32,string,bool,null 或它们组成的数组类型。","s":"26.1.3.4 作业信息/构建器额外数据","u":"/docs/job","h":"#26134-作业信息构建器额外数据","p":3757},{"i":3785,"t":"JobDetail 和 JobBuilder 都提供了多种将自身转换成特定格式的字符串。 转换成 JSON 字符串 var json = jobDetail.ConvertToJSON(); 字符串打印如下: { \"jobId\": \"job1\", \"groupName\": null, \"jobType\": \"Furion.Application.MyJob\", \"assemblyName\": \"Furion.Application\", \"description\": null, \"concurrent\": true, \"includeAnnotations\": false, \"properties\": \"{}\", \"updatedTime\": \"2022-11-18T22:56:47.4149299+08:00\" } 转换成 SQL 字符串 // 输出新增 SQL,使用 CamelCase 属性命名 var insertSql = jobDetail.ConvertToSQL(\"tbName\" , PersistenceBehavior.Appended , NamingConventions.CamelCase); // 输出删除 SQL,使用 Pascal 属性命名 var deleteSql = jobDetail.ConvertToSQL(\"tbName\" , PersistenceBehavior.Removed , NamingConventions.Pascal); // 输出更新 SQL,使用 UnderScoreCase 属性命名 var updateSql = jobDetail.ConvertToSQL(\"tbName\" , PersistenceBehavior.Updated , NamingConventions.UnderScoreCase); 字符串打印如下: -- 新增语句 INSERT INTO tbName( [jobId], [groupName], [jobType], [assemblyName], [description], [concurrent], [includeAnnotations], [properties], [updatedTime] ) VALUES( 'job1', NULL, 'ConsoleApp13.MyJob', 'ConsoleApp13', NULL, 1, 0, '{}', '2022/11/18 23:16:18' ); -- 删除语句 DELETE FROM tbName WHERE [JobId] = 'job1'; -- 更新语句 UPDATE tbName SET [job_id] = 'job1', [group_name] = NULL, [job_type] = 'ConsoleApp13.MyJob', [assembly_name] = 'ConsoleApp13', [description] = NULL, [concurrent] = 1, [include_annotations] = 0, [properties] = '{}', [updated_time] = '2022/11/18 23:16:18' WHERE [job_id] = 'job1'; 转换成 Monitor 字符串 var monitor = jobDetail.ConvertToMonitor(); 字符串打印如下: ┏━━━━━━━━━━━ JobDetail ━━━━━━━━━━━ ┣ ConsoleApp13.MyJob ┣ ┣ jobId: job1 ┣ groupName: ┣ jobType: Furion.Application.MyJob ┣ assemblyName: Furion.Application ┣ description: ┣ concurrent: True ┣ includeAnnotations: False ┣ properties: {} ┣ updatedTime: 2022/11/18 23:26:47 ┗━━━━━━━━━━━ JobDetail ━━━━━━━━━━━","s":"26.1.3.5 多种格式字符串输出","u":"/docs/job","h":"#26135-多种格式字符串输出","p":3757},{"i":3787,"t":"作业处理程序是作业具体执行的业务逻辑代码,通常由程序员编写,作业处理程序必须实现 IJob 接口。","s":"26.1.4 作业处理程序 IJob","u":"/docs/job","h":"#2614-作业处理程序-ijob","p":3757},{"i":3789,"t":"public class MyJob : IJob { public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { // your code... } }","s":"26.1.4.1 如何定义","u":"/docs/job","h":"#26141-如何定义","p":3757},{"i":3791,"t":"实现 IJob 的作业处理程序类型默认注册为 单例,那么只要是单例的服务,皆可以通过构造函数注入,如:ILogger<>,IConfiguration。 public class MyJob : IJob { private readonly ILogger _logger; private readonly IConfiguration _configuration; public MyJob(ILogger logger , IConfiguration configuration) { _logger = logger; _configuration = configuration; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger} {count}\"); await Task.CompletedTask; } } 如果是非单例的接口,如瞬时或范围服务,可通过 IServiceProvder 创建 public class MyJob : IJob { private readonly ILogger _logger; private readonly IConfiguration _configuration; private readonly IServiceProvider _serviceProvider; public MyJob(ILogger logger , IConfiguration configuration , IServiceProvider serviceProvider) { _logger = logger; _configuration = configuration; _serviceProvider = serviceProvider; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { using var serviceScope = _serviceProvider.CreateScope(); var repository = serviceScope.ServiceProvider.GetService>(); _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}\"); await Task.CompletedTask; } } 针对高频定时任务,比如每秒执行一次,或者更频繁的任务 为了避免频繁创建作用域和销毁作用域,可创建长范围的作用域。 public class MyJob : IJob, IDisposable { private readonly ILogger _logger; private readonly IConfiguration _configuration; private readonly IServiceScope _serviceScope; public MyJob(ILogger logger , IConfiguration configuration , IServiceProvider serviceProvider) { _logger = logger; _configuration = configuration; _serviceScope = serviceProvider.CreateScope(); } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { var repository = _serviceScope.ServiceProvider.GetService>(); _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}\"); await Task.CompletedTask; } public void Dispose() { _serviceScope?.Dispose(); } }","s":"26.1.4.2 依赖注入","u":"/docs/job","h":"#26142-依赖注入","p":3757},{"i":3793,"t":"JobExecutingContext 上下文作为 ExecuteAsync 方法的第一个参数,提供了以下几个运行时信息: JobExecutingContext 属性列表 JobId:作业 Id TriggerId:当前触发器 Id JobDetail:作业信息 Trigger:作业触发器 OccurrenceTime:调度器检查时间,最准确的记录时间 ExecutingTime:实际执行时间(可能存在误差) JobExecutingContext 方法列表 .ConvertToJSON(naming):将作业计划转换成 JSON 字符串","s":"26.1.4.3 JobExecutingContext 上下文","u":"/docs/job","h":"#26143-jobexecutingcontext-上下文","p":3757},{"i":3795,"t":"一下情况下,作业被临时暂停或取消,但作业处理程序还未处理完成,这个时候我们可以选择取消还是继续执行,如果选择同步取消: public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { // 创建任务关联取消 Token var cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(stoppingToken); try { // 传递给异步服务 await todo.SomeMethodAsync(cancellationTokenSource.Token); } catch (Exception ex) { // ... } _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}\"); } } 这样当作业被取消时,SomeMethodAsync 也会同步取消。","s":"26.1.4.4 作业被取消处理","u":"/docs/job","h":"#26144-作业被取消处理","p":3757},{"i":3798,"t":"框架提供了 Trigger 类型来描述作业具体的触发时间,Trigger 类型提供以下只读属性: 属性名 属性类型 默认值 说明 TriggerId string 作业触发器 Id JobId string 作业 Id TriggerType string 作业触发器类型,存储的是类型的 FullName AssemblyName string 作业触发器类型所在程序集,存储的是程序集 Name Args string 作业触发器参数,运行时将反序列化为 object[] 类型并作为构造函数参数 Description string 描述信息 Status TriggerStatus Ready 作业触发器状态 StartTime DateTime? 起始时间 EndTime DateTime? 结束时间 LastRunTime DateTime? 最近运行时间 NextRunTime DateTime? 下一次运行时间 NumberOfRuns long 0 触发次数 MaxNumberOfRuns long 0 最大触发次数,0:不限制,n:N 次 NumberOfErrors long 0 出错次数 MaxNumberOfErrors long 0 最大出错次数,0:不限制,n:N 次 NumRetries int 0 重试次数 RetryTimeout int 1000 重试间隔时间,毫秒单位 StartNow bool true 是否立即启动 RunOnStart bool false 是否启动时执行一次 UpdatedTime DateTime? 作业触发器更新时间","s":"26.1.5.1 关于作业触发器","u":"/docs/job","h":"#26151-关于作业触发器","p":3757},{"i":3800,"t":"作业触发器状态指示了当前作业触发器的状态,使用 TriggerStatus 枚举类型(uint),该类型包含以下枚举成员。 枚举名 枚举值 说明 Backlog 0 积压,起始时间大于当前时间 Ready 1 就绪 Running 2 正在运行 Pause 3 暂停 Blocked 4 阻塞,本该执行但是没有执行 ErrorToReady 5 由失败进入就绪,运行错误当并未超出最大错误数,进入下一轮就绪 Archived 6 归档,结束时间小于当前时间 Panic 7 崩溃,错误次数超出了最大错误数 Overrun 8 超限,运行次数超出了最大限制 Unoccupied 9 无触发时间,下一次执行时间为 null NotStart 10 未启动 Unknown 11 未知作业触发器,作业触发器运行时类型为 null Unhandled 12 未知作业处理程序,作业处理程序类型运行时类型为 null","s":"26.1.5.2 作业触发器状态","u":"/docs/job","h":"#26152-作业触发器状态","p":3757},{"i":3802,"t":"作业触发器 Trigger 是作业调度模块提供运行时的只读类型,那么我们该如何创建或变更 Trigger 对象呢? TriggerBuilder 是作业调度模块提供可用来生成运行时 Trigger 的类型,这样做的好处可避免外部直接修改运行时 Trigger 数据,还能实现任何修改动作监听,也能避免多线程抢占情况。 作业调度模块提供了多种方式用来创建 TriggerBuilder 对象。 通过 Create 静态方法创建 // 根据 Trigger 派生类类型创建 var triggerBuilder = TriggerBuilder.Create(); // 根据 Type 类型创建 var triggerBuilder = TriggerBuilder.Create(typeof(PeriodTrigger)); // 根据程序集名称和类型完全限定名(FullName)创建 var triggerBuilder = TriggerBuilder.Create(\"Furion\", \"Furion.Schedule.PeriodTrigger\"); 通过 Trigger 类型创建 这种方式常用于在运行时更新作业触发器。 var triggerBuilder = TriggerBuilder.From(trigger); 通过 JSON 字符串创建 该方式非常灵活,可从配置文件,JSON 字符串,或其他能够返回 JSON 字符串的地方创建。 var triggerBuilder = TriggerBuilder.From(@\" { \"\"triggerId\"\": \"\"job1_trigger1\"\", \"\"triggerType\"\": \"\"Furion.Schedule.PeriodSecondsTrigger\"\", \"\"assemblyName\"\": \"\"Furion\"\", \"\"args\"\": \"\"[5]\"\", \"\"description\"\": null, \"\"status\"\": 2, \"\"startTime\"\": null, \"\"endTime\"\": null, \"\"lastRunTime\"\": \"\"2022-11-20T18:31:56.6859410+08:00\"\", \"\"nextRunTime\"\": \"\"2022-11-20T18:32:01.7233546+08:00\"\", \"\"numberOfRuns\"\": 1, \"\"maxNumberOfRuns\"\": 0, \"\"numberOfErrors\"\": 0, \"\"maxNumberOfErrors\"\": 0, \"\"numRetries\"\": 0, \"\"retryTimeout\"\": 1000, \"\"startNow\"\": true, \"\"runOnStart\"\": false, \"\"updatedTime\"\": \"\"2022-11-20T18:31:56.7233630+08:00\"\" }\"); 如果使用的是 .NET7,可使用 \"\"\" 避免转义,如: var triggerBuilder = TriggerBuilder.From(\"\"\" { \"triggerId\": \"job1_trigger1\", \"triggerType\": \"Furion.Schedule.PeriodSecondsTrigger\", \"assemblyName\": \"Furion\", \"args\": \"[5]\", \"description\": null, \"status\": 2, \"startTime\": null, \"endTime\": null, \"lastRunTime\": \"2022-11-20T18:31:56.6859410+08:00\", \"nextRunTime\": \"2022-11-20T18:32:01.7233546+08:00\", \"numberOfRuns\": 1, \"maxNumberOfRuns\": 0, \"numberOfErrors\": 0, \"maxNumberOfErrors\": 0, \"numRetries\": 0, \"retryTimeout\": 1000, \"startNow\": true, \"runOnStart\": false, \"updatedTime\": \"2022-11-20T18:31:56.7233630+08:00\" } \"\"\"); 关于属性名匹配规则 支持 CamelCase(驼峰命名法),Pascal(帕斯卡命名法) 命名方式。 不支持 UnderScoreCase(下划线命名法) ,如 \"include_annotations\": true 还可以通过 Clone 静态方法从一个 TriggerBuilder 创建 var triggerBuilder = TriggerBuilder.Clone(fromTriggerBuilder); 克隆说明 克隆操作只会克隆 AssemblyName,TriggerType,Args,Description,StartTime,EndTime,MaxNumberOfRuns,MaxNumberOfErrors,NumRetries,RetryTimeout,StartNow,RunOnStart。 不会克隆 TriggerId,JobId,Status,LastRunTime,NextRunTime,NumberOfRuns,NumberOfErrors,UpdatedTime。 还可以通过 LoadFrom 实例方法填充当前的 TriggerBuilder 比如可以传递匿名类型,类类型: // 会覆盖所有相同的值 triggerBuilder.LoadFrom(new { Description = \"我是描述\", StartTime = DateTime.Now }); // 支持多个填充,还可以配置跳过 null 值覆盖 triggerBuilder.LoadFrom(new { Description = \"我是另外一个描述\", StartTime = DateTime.Now, LastRunTime = default(DateTime?) // 会跳过赋值 }, ignoreNullValue: true); 关于属性名匹配规则 支持 CamelCase(驼峰命名法),Pascal(帕斯卡命名法) 和 UnderScoreCase(下划线命名法) 命名方式。","s":"26.1.5.3 关于作业触发器构建器","u":"/docs/job","h":"#26153-关于作业触发器构建器","p":3757},{"i":3804,"t":"为了方便快速实现作业触发器,作业调度模块内置了 Period(间隔) 和 Cron(表达式) 作业触发器,可通过 TriggerBuilder 类型或 Triggers 静态类创建。 TriggerBuilder 方式 // 创建毫秒周期(间隔)作业触发器构建器 var triggerBuilder = TriggerBuilder.Period(5000); // 创建秒周期(间隔)作业触发器构建器 var triggerBuilder = TriggerBuilder.PeriodSeconds(5); // 创建 Cron 表达式作业触发器构建器 var triggerBuilder = TriggerBuilder.Cron(\"* * * * *\", CronStringFormat.Default); Triggers 方式,推荐 Triggers 具备 TriggerBuilder 所有的静态方法,另外还添加了不少更加便捷的静态方法。 // 创建毫秒周期(间隔)作业触发器构建器 var triggerBuilder = Triggers.Period(5000); // 创建秒周期(间隔)作业触发器构建器 var triggerBuilder = Triggers.PeriodSeconds(5); // 创建 Cron 表达式作业触发器构建器 var triggerBuilder = Triggers.Cron(\"* * * * *\", CronStringFormat.Default); // 创建每秒开始作业触发器构建器 var triggerBuilder = Triggers.Secondly(); // 创建每分钟开始作业触发器构建器 var triggerBuilder = Triggers.Minutely(); // 创建每小时开始作业触发器构建器 var triggerBuilder = Triggers.Hourly(); // 创建每天(午夜)开始作业触发器构建器 var triggerBuilder = Triggers.Daily(); // 创建每月1号(午夜)开始作业触发器构建器 var triggerBuilder = Triggers.Monthly(); // 创建每周日(午夜)开始作业触发器构建器 var triggerBuilder = Triggers.Weekly(); // 创建每年1月1号(午夜)开始作业触发器构建器 var triggerBuilder = Triggers.Yearly();","s":"26.1.5.4 内置作业触发器构建器","u":"/docs/job","h":"#26154-内置作业触发器构建器","p":3757},{"i":3806,"t":"除了使用作业调度模块提供了 PeriodTrigger 和 CronTrigger 以外,可自定义作业触发器,只需要继承 Trigger 并重写 GetNextOccurrence 方法即可,如实现一个间隔两秒的作业触发器。 public class TwiceSecondTrigger : Trigger { public override DateTime GetNextOccurrence(DateTime startAt) { return startAt.AddSeconds(2); } } 之后可通过 Triggers.Create 或 Triggers.Create 创建即可: services.AddSchedule(options => { options.AddJob(Triggers.Create()); }); 查看作业执行结果: info: 2022-11-20 21:13:02.4726416 +08:00 星期日 L ConsoleApp13.MyJob[0] #9 job1 job1_trigger1 2022/11/20 21:13:02 ConsoleApp13.TwiceSecondTrigger info: 2022-11-20 21:13:04.4591328 +08:00 星期日 L ConsoleApp13.MyJob[0] #6 job1 job1_trigger1 2022/11/20 21:13:04 ConsoleApp13.TwiceSecondTrigger info: 2022-11-20 21:13:06.4677716 +08:00 星期日 L ConsoleApp13.MyJob[0] #4 job1 job1_trigger1 2022/11/20 21:13:06 ConsoleApp13.TwiceSecondTrigger info: 2022-11-20 21:13:08.4726987 +08:00 星期日 L ConsoleApp13.MyJob[0] #14 job1 job1_trigger1 2022/11/20 21:13:08 ConsoleApp13.TwiceSecondTrigger info: 2022-11-20 21:13:10.4827028 +08:00 星期日 L ConsoleApp13.MyJob[0] #9 job1 job1_trigger1 2022/11/20 21:13:10 ConsoleApp13.TwiceSecondTrigger info: 2022-11-20 21:13:12.4936247 +08:00 星期日 L ConsoleApp13.MyJob[0] #14 job1 job1_trigger1 2022/11/20 21:13:12 ConsoleApp13.TwiceSecondTrigger 另外,自定义作业触发器还支持传递参数: 参数特别说明 如果自定义作业触发器包含参数,那么必须满足以下两个条件: 参数必须通过唯一的构造函数传入,有且最多只能拥有一个构造函数 参数的类型只能是 int,string,bool,null 或由它们组成的数组类型 public class SomeSecondTrigger : Trigger { public SomeSecondTrigger(int seconds) // 支持多个参数 { Seconds = seconds; } private int Seconds { get; } public override DateTime GetNextOccurrence(DateTime startAt) { return startAt.AddSeconds(Seconds); } } 之后可通过 Triggers.Create 或 Triggers.Create 创建并传入参数。 services.AddSchedule(options => { options.AddJob(Triggers.Create(3)); // 3 秒执行一次 }); 查看作业执行结果: info: 2022-11-20 21:33:46.3074692 +08:00 星期日 L ConsoleApp13.MyJob[0] #4 job1 job1_trigger1 2022/11/20 21:33:46 ConsoleApp13.SomeSecondTrigger info: 2022-11-20 21:33:49.3101667 +08:00 星期日 L ConsoleApp13.MyJob[0] #6 job1 job1_trigger1 2022/11/20 21:33:49 ConsoleApp13.SomeSecondTrigger info: 2022-11-20 21:33:52.3222046 +08:00 星期日 L ConsoleApp13.MyJob[0] #8 job1 job1_trigger1 2022/11/20 21:33:52 ConsoleApp13.SomeSecondTrigger info: 2022-11-20 21:33:55.3270737 +08:00 星期日 L ConsoleApp13.MyJob[0] #4 job1 job1_trigger1 2022/11/20 21:33:55 ConsoleApp13.SomeSecondTrigger info: 2022-11-20 21:33:58.3293727 +08:00 星期日 L ConsoleApp13.MyJob[0] #6 job1 job1_trigger1 2022/11/20 21:33:58 ConsoleApp13.SomeSecondTrigger info: 2022-11-20 21:34:01.3472296 +08:00 星期日 L ConsoleApp13.MyJob[0] #4 job1 job1_trigger1 2022/11/20 21:34:01 ConsoleApp13.SomeSecondTrigger 自定义作业触发器除了可重写 GetNextOccurrence 方法之后,还提供了 ShouldRun 和 ToString 方法可重写,如: public class SomeSecondTrigger : Trigger { public SomeSecondTrigger(int seconds) { Seconds = seconds; } private int Seconds { get; } public override DateTime GetNextOccurrence(DateTime startAt) { return startAt.AddSeconds(Seconds); } public override bool ShouldRun(JobDetail jobDetail, DateTime startAt) { // 在这里进一步控制,如果返回 false,则作业触发器跳过执行 return base.ShouldRun(jobDetail, startAt); } public override string ToString() { return $\"自定义递增 {Seconds}s 触发器\"; } } 推荐重写 GetNextRunTime 和 ToString 方法即可,如果重写了 ToString 方法,那么可以通过 ${trigger} 输出,如: public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}\"); await Task.CompletedTask; } } 查看作业执行结果: info: 2022-11-20 21:43:07.4570694 +08:00 星期日 L ConsoleApp13.MyJob[0] #4 job1 job1_trigger1 2022/11/20 21:43:07 自定义递增 3s 触发器 info: 2022-11-20 21:43:10.4629078 +08:00 星期日 L ConsoleApp13.MyJob[0] #9 job1 job1_trigger1 2022/11/20 21:43:10 自定义递增 3s 触发器","s":"26.1.5.5 自定义作业触发器","u":"/docs/job","h":"#26155-自定义作业触发器","p":3757},{"i":3808,"t":"如果 JobBuilder 配置了 IncludeAnnotations 参数且为 true,那么将会自动解析 IJob 的实现类型的所有继承 TriggerAttribute 的特性,目前作业调度模块内置了以下作业触发器特性: [Period(5000)]:毫秒周期(间隔)作业触发器特性 [PeriodSeconds(5)]:秒周期(间隔)作业触发器特性 [Cron(\"* * * * *\", CronStringFormat.Default]:Cron 表达式作业触发器特性 [Secondly]:每秒开始作业触发器特性 [Minutely]:每分钟开始作业触发器特性 [Hourly]:每小时开始作业触发器特性 [Daily]:每天(午夜)开始作业触发器特性 [Monthly]:每月 1 号(午夜)开始作业触发器特性 [Weekly]:每周日(午夜)开始作业触发器特性 [Yearly]:每年 1 月 1 号(午夜)开始作业触发器特性 使用如下: services.AddSchedule(options => { options.AddJob(JobBuilder.Create().SetIncludeAnnotations(true)); // 也支持自定义配置 + 特性扫描 options.AddJob(JobBuilder.Create().SetIncludeAnnotations(true) , Triggers.PeriodSeconds(5)); }); [Minutely] [PeriodSeconds(5)] [Cron(\"* * * * *\")] public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}\"); await Task.CompletedTask; } } 查看作业执行结果: info: 2022-11-20 22:10:54.5027217 +08:00 星期日 L ConsoleApp13.MyJob[0] #9 job1 job1_trigger2 2022/11/20 22:10:54 5000ms info: 2022-11-20 22:10:59.4948832 +08:00 星期日 L ConsoleApp13.MyJob[0] #9 job1 job1_trigger2 2022/11/20 22:10:59 5000ms info: 2022-11-20 22:11:00.0353681 +08:00 星期日 L ConsoleApp13.MyJob[0] #6 job1 job1_trigger3 2022/11/20 22:11:00 * * * * * info: 2022-11-20 22:11:00.0372492 +08:00 星期日 L ConsoleApp13.MyJob[0] #8 job1 job1_trigger1 2022/11/20 22:11:00 * * * * * info: 2022-11-20 22:11:04.5094807 +08:00 星期日 L ConsoleApp13.MyJob[0] #8 job1 job1_trigger2 2022/11/20 22:11:04 5000ms 除了使用内置特性,我们还可以自定义作业触发器特性,如: [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public class SomeSecondAttribute : TriggerAttribute { public SomeSecondAttribute(int seconds) : base(typeof(SomeSecondTrigger), seconds) { } } 使用如下: [SomeSecond(3)] public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}\"); await Task.CompletedTask; } } 查看作业执行结果: info: 2022-11-20 22:16:22.0933295 +08:00 星期日 L ConsoleApp13.MyJob[0] #9 job1 job1_trigger1 2022/11/20 22:16:22 自定义递增 3s 触发器 info: 2022-11-20 22:16:25.0823563 +08:00 星期日 L ConsoleApp13.MyJob[0] #8 job1 job1_trigger1 2022/11/20 22:16:25 自定义递增 3s 触发器 info: 2022-11-20 22:16:28.0910993 +08:00 星期日 L ConsoleApp13.MyJob[0] #6 job1 job1_trigger1 2022/11/20 22:16:28 自定义递增 3s 触发器 info: 2022-11-20 22:16:31.0937955 +08:00 星期日 L ConsoleApp13.MyJob[0] #9 job1 job1_trigger1 2022/11/20 22:16:31 自定义递增 3s 触发器 info: 2022-11-20 22:16:34.1034905 +08:00 星期日 L ConsoleApp13.MyJob[0] #6 job1 job1_trigger1 2022/11/20 22:16:34 自定义递增 3s 触发器 作业触发器特性还提供了多个属性配置,如: TriggerId:作业触发器 Id,string 类型 Description:描述信息,string 类型 StartTime:起始时间,string 类型 EndTime:结束时间,string 类型 MaxNumberOfRuns:最大触发次数,long 类型,0:不限制;n:N 次 MaxNumberOfErrors:最大出错次数,long 类型,0:不限制;n:N 次 NumRetries:重试次数,int 类型,默认值 0 RetryTimeout:重试间隔时间,int 类型,默认值 1000 StartNow:是否立即启动,bool 类型,默认值 true RunOnStart:是否启动时执行一次,bool 类型,默认值 false 使用如下: [PeriodSeconds(5, TriggerId = \"trigger1\", Description = \"这是一段描述\")] public class MyJob : IJob {","s":"26.1.5.6 作业触发器特性","u":"/docs/job","h":"#26156-作业触发器特性","p":3757},{"i":3810,"t":"TriggerBuilder 提供了和 Trigger 完全匹配的 Set[属性名] 方法来配置作业触发器各个属性,如: services.AddSchedule(options => { var triggerBuilder = Triggers.Period(5000) .SetTriggerId(\"trigger1\") // 作业触发器 Id .SetTriggerType(\"Furion\", \"Furion.Schedule.PeriodTrigger\") // 作业触发器类型,支持多个重载 .SetTriggerType() // 作业触发器类型,支持多个重载 .SetTriggerType(typeof(PeriodTrigger)) // 作业触发器类型,支持多个重载 .SetArgs(\"[5000]\") // 作业触发器参数,支持多个重载 .SetArgs(5000) // 作业触发器参数,支持多个重载 .SetDescription(\"作业触发器描述\") // 作业触发器描述 .SetStatus(TriggerStatus.Ready) // 作业触发器状态 .SetStartTime(DateTime.Now) // 作业触发器起始时间 .SetEndTime(DateTime.Now.AddMonths(1)) // 作业触发器结束时间 .SetLastRunTime(DateTime.Now.AddSeconds(-5)) // 作业触发器最近运行时间 .SetNextRunTime(DateTime.Now.AddSeconds(5)) // 作业触发器下一次运行时间 .SetNumberOfRuns(1) // 作业触发器触发次数 .SetMaxNumberOfRuns(100) // 作业触发器最大触发器次数 .SetNumberOfErrors(1) // 作业触发器出错次数 .SetMaxNumberOfErrors(100) // 作业触发器最大出错次数 .SetNumRetries(3) // 作业触发器出错重试次数 .SetRetryTimeout(1000) // 作业触发器重试间隔时间 .SetStartNow(true) // 作业触发器是否立即启动 .SetRunOnStart(false) // 作业触发器是否启动时执行一次 ; options.AddJob(triggerBuilder); });","s":"26.1.5.7 设置作业触发器构建器","u":"/docs/job","h":"#26157-设置作业触发器构建器","p":3757},{"i":3812,"t":"Trigger 和 TriggerBuilder 都提供了多种将自身转换成特定格式的字符串。 转换成 JSON 字符串 var json = trigger.ConvertToJSON(); 字符串打印如下: { \"triggerId\": \"job1_trigger1\", \"jobId\": \"job1\", \"triggerType\": \"Furion.Schedule.PeriodSecondsTrigger\", \"assemblyName\": \"Furion\", \"args\": \"[5]\", \"description\": null, \"status\": 2, \"startTime\": null, \"endTime\": null, \"lastRunTime\": \"2022-11-20T22:25:03.8176033+08:00\", \"nextRunTime\": \"2022-11-20T22:25:08.8385903+08:00\", \"numberOfRuns\": 1, \"maxNumberOfRuns\": 0, \"numberOfErrors\": 0, \"maxNumberOfErrors\": 0, \"numRetries\": 0, \"retryTimeout\": 1000, \"startNow\": true, \"runOnStart\": false, \"updatedTime\": \"2022-11-20T22:25:03.8386511+08:00\" } 转换成 SQL 字符串 // 输出新增 SQL,使用 CamelCase 属性命名 var insertSql = trigger.ConvertToSQL(\"tbName\" , PersistenceBehavior.Appended , NamingConventions.CamelCase); // 输出删除 SQL,使用 Pascal 属性命名 var deleteSql = trigger.ConvertToSQL(\"tbName\" , PersistenceBehavior.Removed , NamingConventions.Pascal); // 输出更新 SQL,使用 UnderScoreCase 属性命名 var updateSql = trigger.ConvertToSQL(\"tbName\" , PersistenceBehavior.Updated , NamingConventions.UnderScoreCase); 字符串打印如下: -- 新增语句 INSERT INTO tbName( [triggerId], [jobId], [triggerType], [assemblyName], [args], [description], [status], [startTime], [endTime], [lastRunTime], [nextRunTime], [numberOfRuns], [maxNumberOfRuns], [numberOfErrors], [maxNumberOfErrors], [numRetries], [retryTimeout], [startNow], [runOnStart], [updatedTime] ) VALUES( 'job1_trigger1', 'job1', 'Furion.Schedule.PeriodSecondsTrigger', 'Furion', '[5]', NULL, 2, NULL, NULL, '2022/11/20 22:27:47', '2022/11/20 22:27:52', 1, 0, 0, 0, 0, 1000, 1, 0, '2022/11/20 22:27:47' ); -- 删除语句 DELETE FROM tbName WHERE [TriggerId] = 'job1_trigger1' AND [JobId] = 'job1'; -- 更新语句 UPDATE tbName SET [trigger_id] = 'job1_trigger1', [job_id] = 'job1', [trigger_type] = 'Furion.Schedule.PeriodSecondsTrigger', [assembly_name] = 'Furion', [args] = '[5]', [description] = NULL, [status] = 2, [start_time] = NULL, [end_time] = NULL, [last_run_time] = '2022/11/20 22:27:47', [next_run_time] = '2022/11/20 22:27:52', [number_of_runs] = 1, [max_number_of_runs] = 0, [number_of_errors] = 0, [max_number_of_errors] = 0, [num_retries] = 0, [retry_timeout] = 1000, [start_now] = 1, [run_on_start] = 0, [updated_time] = '2022/11/20 22:27:47' WHERE [trigger_id] = 'job1_trigger1' AND [job_id] = 'job1'; 转换成 Monitor 字符串 var monitor = trigger.ConvertToMonitor(); 字符串打印如下: ┏━━━━━━━━━━━ Trigger ━━━━━━━━━━━ ┣ Furion.Schedule.PeriodSecondsTrigger ┣ ┣ triggerId: job1_trigger1 ┣ jobId: job1 ┣ triggerType: Furion.Schedule.PeriodSecondsTrigger ┣ assemblyName: Furion ┣ args: [5] ┣ description: ┣ status: Running ┣ startTime: ┣ endTime: ┣ lastRunTime: 2022/11/20 22:30:41 ┣ nextRunTime: 2022/11/20 22:30:46 ┣ numberOfRuns: 1 ┣ maxNumberOfRuns: 0 ┣ numberOfErrors: 0 ┣ maxNumberOfErrors: 0 ┣ numRetries: 0 ┣ retryTimeout: 1000 ┣ startNow: True ┣ runOnStart: False ┣ updatedTime: 2022/11/20 22:30:41 ┗━━━━━━━━━━━ Trigger ━━━━━━━━━━━","s":"26.1.5.8 多种格式字符串输出","u":"/docs/job","h":"#26158-多种格式字符串输出","p":3757},{"i":3815,"t":"所谓的作业计划(Scheduler)是将作业信息(JobDetail),作业触发器(Trigger)和作业处理程序(IJob)关联起来,并添加到作业调度器中等待调度执行。 作为计划(Scheduler)类型对外是不公开的,但提供了对应的 IScheduler 接口进行操作。","s":"26.1.6.1 关于作业计划","u":"/docs/job","h":"#26161-关于作业计划","p":3757},{"i":3817,"t":"作业计划 Scheduler 是作业调度模块提供运行时的只读类型,那么我们该如何创建或变更 Scheduler 对象呢? SchedulerBuilder 是作业调度模块提供可用来生成运行时 Scheduler 的类型,这样做的好处可避免外部直接修改运行时 Scheduler 数据,还能实现任何修改动作监听,也能避免多线程抢占情况。 作业调度模块提供了多种方式用来创建 SchedulerBuilder 对象。 通过 Create 静态方法创建 // 创建作业计划必须传入 JoBuilder 和 0或1个以上的 TiggerBuilder var schedulerBuilder = SchedulerBuilder.Create( JobBuilder.Create() , Triggers.PeriodSeconds(5), Triggers.Minutely()); // 添加到作业调度器中 services.AddSchedule(options => { options.AddJob(schedulerBuilder); }); 通过 JSON 字符串创建 该方式非常灵活,可从配置文件,JSON 字符串,或其他能够返回 JSON 字符串的地方创建。 var schedulerBuilder = SchedulerBuilder.From(@\" { \"\"jobDetail\"\": { \"\"jobId\"\": \"\"job1\"\", \"\"groupName\"\": null, \"\"jobType\"\": \"\"ConsoleApp32.MyJob\"\", \"\"assemblyName\"\": \"\"ConsoleApp32\"\", \"\"description\"\": null, \"\"concurrent\"\": true, \"\"includeAnnotations\"\": false, \"\"properties\"\": \"\"{}\"\", \"\"updatedTime\"\": \"\"2022-11-17T09:25:47.0471107+08:00\"\" }, \"\"triggers\"\": [ { \"\"triggerId\"\": \"\"job1_trigger1\"\", \"\"triggerType\"\": \"\"Furion.Schedule.PeriodSecondsTrigger\"\", \"\"assemblyName\"\": \"\"Furion\"\", \"\"args\"\": \"\"[5]\"\", \"\"description\"\": null, \"\"status\"\": 2, \"\"startTime\"\": null, \"\"endTime\"\": null, \"\"lastRunTime\"\": \"\"2022-11-20T18:31:56.6859410+08:00\"\", \"\"nextRunTime\"\": \"\"2022-11-20T18:32:01.7233546+08:00\"\", \"\"numberOfRuns\"\": 1, \"\"maxNumberOfRuns\"\": 0, \"\"numberOfErrors\"\": 0, \"\"maxNumberOfErrors\"\": 0, \"\"numRetries\"\": 0, \"\"retryTimeout\"\": 1000, \"\"startNow\"\": true, \"\"runOnStart\"\": false, \"\"updatedTime\"\": \"\"2022-11-20T18:31:56.7233630+08:00\"\" } ] }\"); // 添加到作业调度器中 services.AddSchedule(options => { options.AddJob(schedulerBuilder); }); 如果使用的是 .NET7,可使用 \"\"\" 避免转义,如: var schedulerBuilder = SchedulerBuilder.From(\"\"\" { \"jobDetail\": { \"jobId\": \"job1\", \"groupName\": null, \"jobType\": \"Furion.Application.MyJob\", \"assemblyName\": \"Furion.Application\", \"description\": null, \"concurrent\": true, \"includeAnnotations\": false, \"properties\": \"{}\", \"updatedTime\": \"2022-11-17T09:25:47.0471107+08:00\" }, \"triggers\": [ { \"triggerId\": \"job1_trigger1\", \"triggerType\": \"Furion.Schedule.PeriodSecondsTrigger\", \"assemblyName\": \"Furion\", \"args\": \"[5]\", \"description\": null, \"status\": 2, \"startTime\": null, \"endTime\": null, \"lastRunTime\": \"2022-11-20T18:31:56.6859410+08:00\", \"nextRunTime\": \"2022-11-20T18:32:01.7233546+08:00\", \"numberOfRuns\": 1, \"maxNumberOfRuns\": 0, \"numberOfErrors\": 0, \"maxNumberOfErrors\": 0, \"numRetries\": 0, \"retryTimeout\": 1000, \"startNow\": true, \"runOnStart\": false, \"updatedTime\": \"2022-11-20T18:31:56.7233630+08:00\" } ] } \"\"\"); 关于属性名匹配规则 支持 CamelCase(驼峰命名法),Pascal(帕斯卡命名法) 命名方式。 不支持 UnderScoreCase(下划线命名法) ,如 \"include_annotations\": true 还可以通过 Clone 静态方法从一个 SchedulerBuilder 创建 var schedulerBuilder = SchedulerBuilder.Clone(fromSchedulerBuilder); 克隆说明 克隆操作将克隆 JobBuilder 和 TriggerBuilders,同时 Behavior 会被标记为 PersistenceBehavior.Appended。","s":"26.1.6.2 关于作业计划构建器","u":"/docs/job","h":"#26162-关于作业计划构建器","p":3757},{"i":3819,"t":"Scheduler 提供了多个方法操作 JobBuilder 和 TriggerBuilder,如: // 获取当前的作业信息构建器 var jobBuilder = schedulerBuilder.GetJobBuilder(); // 更新当前作业信息构建器 schedulerBuilder.UpdateJobBuilder(jobBuilder.SetDescription(\"新的描述\")); // 获取所有的作业触发器构建器集合 var triggerBuilders = schedulerBuilder.GetTriggerBuilders(); // 获取单个作业触发器构建器 var triggerBuilder = schedulerBuilder.GetTriggerBuilder(\"job1_trigger1\"); // 新增作业触发器构建器 schedulerBuilder.AddTriggerBuilder(Triggers.Minutely()); // 也支持链式添加或添加多个 schedulerBuilder.AddTriggerBuilder(Triggers.Minutely()).AddTriggerBuilder(Trigger.Hourly()); schedulerBuilder.AddTriggerBuilders(Trigger.Minutely(), Trigger.Hourly()); // 更新作业触发器构建器 schedulerBuilder.UpdateTriggerBuilder(triggerBuilder.SetDescription(\"新的触发器描述\")); // 也支持链式更新或更新多个 schedulerBuilder.UpdateTriggerBuilder(triggerBuilder1).UpdateTriggerBuilder(triggerBuilder2); schedulerBuilder.UpdateTriggerBuilders(triggerBuilder1, triggerBuilder2); // 删除作业触发器构建器 schedulerBuilder.RemoveTriggerBuilder(triggerBuilder); // 可以根据作业触发器 Id 删除 schedulerBuilder.RemoveTriggerBuilder(\"job1_trigger1\", out var builder); // 也支持链式删除或删除多个 schedulerBuilder.RemoveTriggerBuilder(triggerBuilder1).RemoveTriggerBuilder(triggerBuilder2); schedulerBuilder.RemoveTriggerBuilders(triggerBuilder1, triggerBuilder2); schedulerBuilder.RemoveTriggerBuilder(\"job1_trigger1\", out var triggerBuilder).RemoveTriggerBuilder(\"job1_trigger2\", out _); schedulerBuilder.RemoveTriggerBuilder(\"job1_trigger1\", \"job1_trigger2\"); // 清空所有作业触发器构建器 schedulerBuilder.ClearTriggerBuilders(); 除了提供上面的 CURD 操作以外,还提供了可以更改 SchedulerBuilder 的持久化行为的方法,如: // 标记当前作业计划构建器为新增状态 schedulerBuilder.Appended(); // 默认值 // 标记当前作业计划构建器为更新状态 schedulerBuilder.Updated(); // 标记当前作业计划构建器为删除状态 schedulerBuilder.Removed();","s":"26.1.6.3 设置作业计划构建器","u":"/docs/job","h":"#26163-设置作业计划构建器","p":3757},{"i":3821,"t":"Scheduler 和 SchedulerBuilder 都提供了多种将自身转换成特定格式的字符串。 转换成 JSON 字符串 var json = schedulerBuilder.ConvertToJSON(); 字符串打印如下: { \"jobDetail\": { \"jobId\": \"job1\", \"groupName\": null, \"jobType\": \"Furion.Application.MyJob\", \"assemblyName\": \"Furion.Application\", \"description\": null, \"concurrent\": true, \"includeAnnotations\": false, \"properties\": \"{}\", \"updatedTime\": \"2022-11-17T09:25:47.0471107+08:00\" }, \"triggers\": [ { \"triggerId\": \"job1_trigger1\", \"jobId\": null, \"triggerType\": \"Furion.Schedule.PeriodSecondsTrigger\", \"assemblyName\": \"Furion\", \"args\": \"[5]\", \"description\": null, \"status\": 2, \"startTime\": null, \"endTime\": null, \"lastRunTime\": \"2022-11-20T18:31:56.6859410+08:00\", \"nextRunTime\": \"2022-11-20T18:32:01.7233546+08:00\", \"numberOfRuns\": 1, \"maxNumberOfRuns\": 0, \"numberOfErrors\": 0, \"maxNumberOfErrors\": 0, \"numRetries\": 0, \"retryTimeout\": 1000, \"startNow\": true, \"runOnStart\": false, \"updatedTime\": \"2022-11-20T18:31:56.7233630+08:00\" } ] }","s":"26.1.6.4 多种格式字符串输出","u":"/docs/job","h":"#26164-多种格式字符串输出","p":3757},{"i":3824,"t":"ScheduleOptionsBuilder 配置选项主要是用来初始化调度作业服务和作业调度器相关配置的。只作为 services.AddSchedule 服务注册的配置参数,如: // 通过委托的方式配置 services.AddSchedule(options => { // options 类型为 ScheduleOptionsBuilder }); // 自行创建对象实例方式配置 var scheduleOptionsBuilder = new ScheduleOptionsBuilder(); services.AddSchedule(scheduleOptionsBuilder);","s":"26.1.7.1 关于 ScheduleOptionsBuilder","u":"/docs/job","h":"#26171-关于-scheduleoptionsbuilder","p":3757},{"i":3826,"t":"内置属性配置 services.AddSchedule(options => { // 是否使用 UTC 时间,该配置主要用来作为作业调度器检查时间格式的依据 options.UseUtcTimestamp = false; // 是否输出作业调度器日志 options.LogEnabled = true; // 定义未捕获的异常,通常是 Task 异常 options.UnobservedTaskExceptionHandler = (obj, args) => { }; }); 内置方法配置 services.AddSchedule(options => { // 添加作业 options.AddJob(schedulerBuilder); options.AddJob(jobBuilder, triggerBuilder, ...); options.AddJob(triggerBuilder, ...); options.AddJob(\"作业 Id\", triggerBuilder, ...); options.AddJob(\"作业 Id\", concurrent: true, triggerBuilder, ...); options.AddJob(concurrent: true, triggerBuilder, ...); // 添加作业执行监视器 options.AddMonitor(); // 添加作业执行器 options.AddExecutor(); // 添加作业持久化器 options.AddPersistence(); });","s":"26.1.7.2 ScheduleOptionsBuilder 内置属性和方法","u":"/docs/job","h":"#26172-scheduleoptionsbuilder-内置属性和方法","p":3757},{"i":3828,"t":"调度作业服务提供了 IJobMonitor 监视器接口,实现该接口可以监视所有作业处理程序执行事件,包括 执行之前、执行之后,执行异常。 如添加 YourJobMonitor: public class YourJobMonitor : IJobMonitor { private readonly ILogger _logger; public YourJobMonitor(ILogger logger) { _logger = logger; } public Task OnExecutingAsync(JobExecutingContext context, CancellationToken stoppingToken) { _logger.LogInformation(\"执行之前:{JobId} {TriggerId}\", context.JobId, context.TriggerId); return Task.CompletedTask; } public Task OnExecutedAsync(JobExecutedContext context, CancellationToken stoppingToken) { _logger.LogInformation(\"执行之后:{JobId} {TriggerId}\", context.JobId, context.TriggerId); if (context.Exception != null) { _logger.LogError(context.Exception, \"执行出错啦:{JobId} {TriggerId}\", context.JobId, context.TriggerId); } return Task.CompletedTask; } } 最后,在注册 Schedule 服务中注册 YourJobMonitor: services.AddSchedule(options => { // 添加作业执行监视器 builder.AddMonitor(); }); 执行结果如下: info: 2022-11-21 13:41:49.2144716 +08:00 星期一 L ConsoleApp32.YourJobMonitor[0] #9 执行之前:job1 job1_trigger1 info: 2022-11-21 13:41:49.2216598 +08:00 星期一 L ConsoleApp32.MyJob[0] #9 job1 job1_trigger1 2022/11/21 13:41:49 5000ms info: 2022-11-21 13:41:49.2249096 +08:00 星期一 L ConsoleApp32.YourJobMonitor[0] #9 执行之后:job1 job1_trigger1","s":"26.1.8 作业监视器 IJobMonitor","u":"/docs/job","h":"#2618-作业监视器-ijobmonitor","p":3757},{"i":3830,"t":"IJobMonitor 提供的 OnExecutingAsync 和 OnExecutedAsync 接口方法都包含一个 context 参数,前者是 JobExecutingContext,后者是 JobExecutedContext,它们都有一个共同的基类 JobExecutionContext。 JobExecutionContext 提供了以下公共属性和公共方法: JobExecutionContext 属性列表 JobId:作业 Id TriggerId:当前触发器 Id JobDetail:作业信息 Trigger:作业触发器 OccurrenceTime:调度器检查时间,最准确的记录时间 JobExecutionContext 方法列表 .ConvertToJSON(naming):将作业计划转换成 JSON 字符串 JobExecutingContext 在基类基础上拓展了 ExecutingTime 属性: ExecutingTime:执行前时间 JobExecutedContext 则在基类基础上拓展了 ExecutedTime 和 Exception 属性: ExecutedTime:执行后时间 Exception:执行异常","s":"26.1.8.1 关于参数 JobExecutionContext","u":"/docs/job","h":"#26181-关于参数-jobexecutioncontext","p":3757},{"i":3832,"t":"调度作业服务提供了 IJobExecutor 执行器接口,可以让开发者自定义作业处理函数执行策略,如 超时控制,失败重试、熔断等等。 如添加 YourJobExecutor: public class YourJobExecutor : IJobExecutor { public async Task ExecuteAsync(JobExecutingContext context, IJob jobHandler, CancellationToken stoppingToken) { // 实现失败重试策略,如失败重试 3 次 await Retry.InvokeAsync(async () => { await jobHandler.ExecuteAsync(context, stoppingToken); }, 3, 1000); } } 接着模拟 MyJob 执行出错: public class MyJob : IJob { private readonly ILogger _logger; public MyJob(ILogger logger) { _logger = logger; } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { _logger.LogInformation($\"{context.JobId} {context.TriggerId} {context.OccurrenceTime} {context.Trigger}\"); throw new Exception(\"模拟出错\"); await Task.CompletedTask; } } 最后,在注册 Schedule 服务中注册 YourJobExecutor: services.AddSchedule(options => { options.AddMonitor(); // 添加作业执行器 options.AddExecutor(); options.AddJob(Triggers.PeriodSeconds(10)); }); 执行结果如下: info: 2022-11-21 14:10:33.3382344 +08:00 星期一 L ConsoleApp32.YourJobMonitor[0] #14 执行之前:job1 job1_trigger1 info: 2022-11-21 14:10:33.3447855 +08:00 星期一 L ConsoleApp32.MyJob[0] #14 job1 job1_trigger1 2022/11/21 14:10:33 10000ms info: 2022-11-21 14:10:34.4217342 +08:00 星期一 L ConsoleApp32.MyJob[0] #14 job1 job1_trigger1 2022/11/21 14:10:33 10000ms info: 2022-11-21 14:10:35.4952165 +08:00 星期一 L ConsoleApp32.MyJob[0] #14 job1 job1_trigger1 2022/11/21 14:10:33 10000ms info: 2022-11-21 14:10:36.5719440 +08:00 星期一 L ConsoleApp32.MyJob[0] #14 job1 job1_trigger1 2022/11/21 14:10:33 10000ms fail: 2022-11-21 14:10:36.7388113 +08:00 星期一 L System.Logging.ScheduleService[0] #14 Error occurred executing job1 job1_trigger1< 10000ms>. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ System.Exception: 模拟出错 at ConsoleApp32.MyJob.ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\MyJob.cs:line 19 at ConsoleApp32.YourJobExecutor.<>c__DisplayClass0_0.<b__0>d.MoveNext() in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\YourJobExecutor.cs:line 18 --- End of stack trace from previous location --- at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\FriendlyException\\Retry.cs:line 84 at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\FriendlyException\\Retry.cs:line 95 at ConsoleApp32.YourJobExecutor.ExecuteAsync(JobExecutingContext context, IJob jobHandler, CancellationToken stoppingToken) in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\YourJobExecutor.cs:line 16 at Furion.Schedule.ScheduleHostedService.<>c__DisplayClass16_2.<b__1>d.MoveNext() in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\Schedule\\HostedServices\\ScheduleHostedService.cs:line 188 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ info: 2022-11-21 14:10:36.7413303 +08:00 星期一 L ConsoleApp32.YourJobMonitor[0] #14 执行之后:job1 job1_trigger1 fail: 2022-11-21 14:10:36.7446968 +08:00 星期一 L ConsoleApp32.YourJobMonitor[0] #14 执行出错啦:job1 job1_trigger1 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ System.InvalidOperationException: Error occurred executing job1 job1_trigger1< 10000ms>. ---> System.Exception: 模拟出错 at ConsoleApp32.MyJob.ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\MyJob.cs:line 19 at ConsoleApp32.YourJobExecutor.<>c__DisplayClass0_0.<b__0>d.MoveNext() in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\YourJobExecutor.cs:line 18 --- End of stack trace from previous location --- at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\FriendlyException\\Retry.cs:line 84 at Furion.FriendlyException.Retry.InvokeAsync(Func`1 action, Int32 numRetries, Int32 retryTimeout, Boolean finalThrow, Type[] exceptionTypes, Func`2 fallbackPolicy) in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\FriendlyException\\Retry.cs:line 95 at ConsoleApp32.YourJobExecutor.ExecuteAsync(JobExecutingContext context, IJob jobHandler, CancellationToken stoppingToken) in D:\\Workplaces\\Study\\CSharp\\ConsoleApp32\\ConsoleApp32\\YourJobExecutor.cs:line 16 at Furion.Schedule.ScheduleHostedService.<>c__DisplayClass16_2.<b__1>d.MoveNext() in D:\\Workplaces\\OpenSources\\Furion\\framework\\Furion\\Schedule\\HostedServices\\ScheduleHostedService.cs:line 188 --- End of inner exception stack trace --- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++","s":"26.1.9 作业执行器 IJobExecutor","u":"/docs/job","h":"#2619-作业执行器-ijobexecutor","p":3757},{"i":3834,"t":"作业计划工厂提供了程序运行时操作作业调度器,作业计划等诸多方法。 ISchedulerFactory 被注册为单例服务,允许在任何可依赖注入的服务获取,如: public class YourService: IYourService { private readonly ISchedulerFactory _schedulerFactory; public YourService(ISchedulerFactory schedulerFactory) { _schedulerFactory = schedulerFactory; } public void SomeMethod([FromServices]ISchedulerFactory schedulerFactory) { } }","s":"26.1.10 作业计划工厂 ISchedulerFactory","u":"/docs/job","h":"#26110-作业计划工厂-ischedulerfactory","p":3757},{"i":3836,"t":"// 返回的是 IScheduler 集合,不能访问 JobDetail 和 Triggers 属性 var jobs = _schedulerFactory.GetJobs(); // 返回的是 SchedulerModel 集合,可以访问 JobDetail 和 Triggers 属性 var jobsOfModels = _schedulerFactory.GetJobsOfModels(); // 还可以通过 group 查找 var jobs = _schedulerFactory.GetJobs(\"group1\"); var jobsOfModels = _schedulerFactory.GetJobsOfModels(\"group1\");","s":"26.1.10.1 查找所有作业","u":"/docs/job","h":"#261101-查找所有作业","p":3757},{"i":3838,"t":"// 返回的是 IScheduler 集合,不能访问 JobDetail 和 Triggers 属性 var nextRunJobs = _schedulerFactory.GetNextRunJobs(DateTime.Now); // 返回的是 SchedulerModel 集合,可以访问 JobDetail 和 Triggers 属性 var nextRunJobsOfModels = _schedulerFactory.GetNextRunJobsOfModels(DateTime.Now); // 还可以通过 group 查找 var nextRunJobs = _schedulerFactory.GetNextRunJobs(\"group1\"); var nextRunJobsOfModels = _schedulerFactory.GetNextRunJobsOfModels(\"group1\");","s":"26.1.10.2 查找下一个触发的作业","u":"/docs/job","h":"#261102-查找下一个触发的作业","p":3757},{"i":3840,"t":"// 返回 ScheduleResult 类型,如果存在返回 ScheduleResult.Succeed,否则返回 ScheduleResult.NotFound var scheduleResult = _schedulerFactory.TryGetJob(\"job1\", out var scheduler); // 返回 IScheduler 类型 var scheduler = _schedulerFactory.GetJob(\"job1\");","s":"26.1.10.3 获取单个作业","u":"/docs/job","h":"#261103-获取单个作业","p":3757},{"i":3842,"t":"通过 SchedulerBuilder 方式 // 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild var scheduleResult = _schedulerFactory.TryAddJob(schedulerBuilder, out var scheduler); // 无返回值,无错误 _schedulerFactory.AddJob(schedulerBuilder); 作业添加成功或失败分别输出日志: info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The Scheduler of successfully added to the schedule. warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The JobId of already exists. 通过 JobBuilder + TriggerBuilder 方式 // 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild var schedulerResult = _schedulerFactory.TryAddJob(JobBuilder.Create() , new[] { Triggers.PeriodSeconds(10) } , out var scheduler); // 无返回值,无错误 _schedulerFactory.AddJob(JobBuilder.Create() , Triggers.PeriodSeconds(10)); 作业添加成功或失败分别输出日志: info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The Scheduler of successfully added to the schedule. warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The JobId of already exists. 通过 IJob 泛型方式 // 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild var schedulerResult = _schedulerFactory.TryAddJob(new[] { Triggers.PeriodSeconds(10) } , out var scheduler); // 无返回值,无错误 _schedulerFactory.AddJob(Triggers.PeriodSeconds(10)); 作业添加成功或失败分别输出日志: info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The Scheduler of successfully added to the schedule. warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The JobId of already exists. 通过 IJob 泛型 + JobId 方式 // 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild var schedulerResult = _schedulerFactory.TryAddJob(\"job1\", new[] { Triggers.PeriodSeconds(10) } , out var scheduler); // 无返回值,无错误 _schedulerFactory.AddJob(\"job1\", Triggers.PeriodSeconds(10)); 作业添加成功或失败分别输出日志: info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The Scheduler of successfully added to the schedule. warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The JobId of already exists. 通过 IJob 泛型 + JobId + Concurrent 方式 // 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild var schedulerResult = _schedulerFactory.TryAddJob(\"job1\", concurrent: true , new[] { Triggers.PeriodSeconds(10) } , out var scheduler); // 无返回值,无错误 _schedulerFactory.AddJob(\"job1\", concurrent: true , Triggers.PeriodSeconds(10)); 作业添加成功或失败分别输出日志: info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The Scheduler of successfully added to the schedule. warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The JobId of already exists. 通过 IJob 泛型 + Concurrent 方式 // 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild var schedulerResult = _schedulerFactory.TryAddJob(concurrent: true , new[] { Triggers.PeriodSeconds(10) } , out var scheduler); // 无返回值,无错误 _schedulerFactory.AddJob(concurrent: true , Triggers.PeriodSeconds(10)); 作业添加成功或失败分别输出日志: info: 2022-11-21 16:24:03.5834532 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The Scheduler of successfully added to the schedule. warn: 2022-11-21 16:24:03.5876747 +08:00 星期一 L System.Logging.ScheduleService[0] #8 The JobId of already exists.","s":"26.1.10.4 添加作业","u":"/docs/job","h":"#261104-添加作业","p":3757},{"i":3844,"t":"通过 SchedulerBuilder 方式 // 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild var scheduleResult = _schedulerFactory.TryUpdateJob(schedulerBuilder, out var scheduler); // 无返回值,无错误 _schedulerFactory.UpdateJob(schedulerBuilder); 作业更新成功或失败分别输出日志: info: 2022-11-21 18:13:13.0098096 +08:00 星期一 L System.Logging.ScheduleService[0] #14 The Scheduler of successfully updated to the schedule. warn: 2022-11-21 18:13:18.0098096 +08:00 星期一 L System.Logging.ScheduleService[0] #14 The Scheduler of is not found. warn: 2022-11-21 18:13:23.0098096 +08:00 星期一 L System.Logging.ScheduleService[0] #14 The Scheduler of update failed. 关于更新作业的背后行为 默认情况下,更新作业需要传递 SchedulerBuilder 对象,这个对象可通过 GetJob(jobId) 获取,如: var schedulerBuilder = _schedulerFactory.GetJob(\"jobId\")?.GetBuilder(); 此时它的内部 Behavior 属性被标记为 PersistenceBehavior.Updated,也就是更新状态,那么对于这个构建器的任何操作都会标记为 更新 操作。 如果通过 .Appended() 或 .Removed() 方法标记之后,那么它的操作行为就发生变化了。 如果被标记为 .Appended(),如: schedulerBuilder.Appended(); 那么它将进行 新增 操作,也就是内部会调用 TryAddJob(schedulerBuilder) 操作。 如果被标记为 .Removed(),如: schedulerBuilder.Removed(); 那么它将进行 删除 操作,也就是内部会调用 TryRemoveJob(schedulerBuilder) 操作。 比如以下的代码实则是 新增 或 删除 操作: // 实际做新增操作 var scheduleResult = _schedulerFactory.TryUpdateJob( SchedulerBuilder.Create(JobBuilder.Create())); // Create 方法默认标记为 Appended // 实际做删除操作 var schedulerBuilder = _schedulerFactory.GetJob(\"jobId\")?.GetBuilder(); var scheduleResult = _schedulerFactory.TryUpdateJob(schedulerBuilder.Removed()); // 标记为 Removed","s":"26.1.10.5 更新作业","u":"/docs/job","h":"#261105-更新作业","p":3757},{"i":3846,"t":"通过 JobId 方式 // 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild 或者 ScheduleResult.NotFound var schedulerResult = _schedulerFactory.TryRemoveJob(\"job1\", out var scheduler); // 无返回值,无错误 _schedulerFactory.RemoveJob(\"job1\"); 通过 IScheduler 方式 // 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild 或者 ScheduleResult.NotFound var schedulerResult = _schedulerFactory.TryRemoveJob(scheduler); // 无返回值,无错误 _schedulerFactory.RemoveJob(scheduler); 作业删除成功或失败分别输出日志: info: 2022-11-22 09:25:17.4763941 +08:00 星期二 L System.Logging.ScheduleService[0] #4 The Scheduler of successfully removed to the schedule. warn: 2022-11-22 09:28:56.2241923 +08:00 星期二 L System.Logging.ScheduleService[0] #9 The Scheduler of is not found. warn: 2022-11-22 09:29:01.2241923 +08:00 星期二 L System.Logging.ScheduleService[0] #9 The Scheduler of remove failed.","s":"26.1.10.6 删除作业","u":"/docs/job","h":"#261106-删除作业","p":3757},{"i":3848,"t":"var isExist = _schedulerFactory.ContainsJob(\"job1\"); // 还可以通过 group 查找 var isExist = _schedulerFactory.ContainsJob(\"job1\", \"group1\");","s":"26.1.10.7 检查作业是否存在","u":"/docs/job","h":"#261107-检查作业是否存在","p":3757},{"i":3850,"t":"_schedulerFactory.StartAll(); // 还可以通过 group 启动 _schedulerFactory.StartAll(\"group1\"); 作业调度器输出日志: info: 2022-11-22 10:48:55.9619596 +08:00 星期二 L System.Logging.ScheduleService[0] #16 The trigger for scheduler of successfully started to the schedule. warn: 2022-11-22 10:48:56.0131304 +08:00 星期二 L System.Logging.ScheduleService[0] #16 Schedule Hosted Service cancels hibernation and GC.Collect().","s":"26.1.10.8 启动所有作业","u":"/docs/job","h":"#261108-启动所有作业","p":3757},{"i":3852,"t":"_schedulerFactory.PauseAll(); // 还可以通过 group 暂停 _schedulerFactory.PauseAll(\"group1\"); 作业调度器输出日志: info: 2022-11-22 11:01:52.0008851 +08:00 星期二 L ConsoleApp32.MyJob[0] #10 job1 job1_trigger1 2022/11/22 11:01:51 5000ms info: 2022-11-22 11:01:54.5265246 +08:00 星期二 L System.Logging.ScheduleService[0] #15 The trigger for scheduler of successfully paused to the schedule. warn: 2022-11-22 11:01:54.5535267 +08:00 星期二 L System.Logging.ScheduleService[0] #15 Schedule Hosted Service cancels hibernation and GC.Collect().","s":"26.1.10.9 暂停所有作业","u":"/docs/job","h":"#261109-暂停所有作业","p":3757},{"i":3854,"t":"_schedulerFactory.RemoveAll(); // 还可以通过 group 删除 _schedulerFactory.RemoveAll(\"group1\"); 作业调度器输出日志: info: 2022-11-22 11:04:19.4838792 +08:00 星期二 L ConsoleApp32.MyJob[0] #14 job1 job1_trigger1 2022/11/22 11:04:19 5000ms warn: 2022-11-22 11:04:23.0726721 +08:00 星期二 L System.Logging.ScheduleService[0] #9 Schedule Hosted Service cancels hibernation and GC.Collect(). info: 2022-11-22 11:04:23.0797010 +08:00 星期二 L System.Logging.ScheduleService[0] #9 The Scheduler of successfully removed to the schedule.","s":"26.1.10.10 删除所有作业","u":"/docs/job","h":"#2611010-删除所有作业","p":3757},{"i":3856,"t":"正常情况下,作业调度器会自动管理休眠和唤醒,但一些特殊情况下需要强制唤醒作业调度器(比如调度器假死了,被回收了。。。),可通过以下方式: _schedulerFactory.CancelSleep(); 作业调度器输出日志: warn: 2022-11-22 11:04:23.0726721 +08:00 星期二 L System.Logging.ScheduleService[0] #9 Schedule Hosted Service cancels hibernation and GC.Collect().","s":"26.1.10.11 强制唤醒作业调度器","u":"/docs/job","h":"#2611011-强制唤醒作业调度器","p":3757},{"i":3858,"t":"此操作会强制触发作业持久化器 IJobPersistence 的 OnChanged 和 OnTriggerChanged 方法,并标记作业持久化行为为 PersistenceBehavior.Updated。 _schedulerFactory.PersistAll(); // 还可以通过 group 控制 _schedulerFactory.PersistAll(\"group1\");","s":"26.1.10.12 强制触发所有作业持久化","u":"/docs/job","h":"#2611012-强制触发所有作业持久化","p":3757},{"i":3860,"t":"作业计划 Scheduler 的默认实现接口时 IScheduler,该接口主要用来操作当前(单个)作业。","s":"26.1.11 作业计划 IScheduler","u":"/docs/job","h":"#26111-作业计划-ischeduler","p":3757},{"i":3862,"t":"// 返回 ScheduleResult 类型,如果存在返回 ScheduleResult.Succeed,否则返回 ScheduleResult.NotFound var scheduleResult = _schedulerFactory.TryGetJob(\"job1\", out var scheduler); // 返回 IScheduler 类型 var scheduler = _schedulerFactory.GetJob(\"job1\");","s":"26.1.11.1 获取 IScheduler 实例","u":"/docs/job","h":"#261111-获取-ischeduler-实例","p":3757},{"i":3864,"t":"获取 SchedulerModel 之后可直接访问 JobDetail 和 Trigger 对象。 var schedulerModel = scheduler.GetModel();","s":"26.1.11.2 获取 SchedulerModel 实例","u":"/docs/job","h":"#261112-获取-schedulermodel-实例","p":3757},{"i":3866,"t":"var schedulerBuilder = scheduler.GetBuilder();","s":"26.1.11.3 获取 SchedulerBuilder","u":"/docs/job","h":"#261113-获取-schedulerbuilder","p":3757},{"i":3868,"t":"var jobBuilder = scheduler.GetJobBuilder();","s":"26.1.11.4 获取 JobBuilder","u":"/docs/job","h":"#261114-获取-jobbuilder","p":3757},{"i":3870,"t":"var triggerBuilders = scheduler.GetTriggerBuilders();","s":"26.1.11.5 获取 TriggerBuilders","u":"/docs/job","h":"#261115-获取-triggerbuilders","p":3757},{"i":3872,"t":"var triggerBuilder = scheduler.GetTriggerBuilder(\"trigger1\");","s":"26.1.11.6 获取单个 TriggerBuilder","u":"/docs/job","h":"#261116-获取单个-triggerbuilder","p":3757},{"i":3874,"t":"scheduler.Start(); 作业调度器输出日志: info: 2022-11-22 17:38:16.2612604 +08:00 星期二 L System.Logging.ScheduleService[0] #15 The trigger for scheduler of successfully started to the schedule. warn: 2022-11-22 17:38:16.2636849 +08:00 星期二 L System.Logging.ScheduleService[0] #15 Schedule Hosted Service cancels hibernation and GC.Collect().","s":"26.1.11.7 启动当前作业","u":"/docs/job","h":"#261117-启动当前作业","p":3757},{"i":3876,"t":"schedular.Pause(); 作业调度器输出日志: info: 2022-11-22 15:34:39.5609135 +08:00 星期二 L ConsoleApp32.MyJob[0] #8 job1 job1_trigger1 2022/11/22 15:34:39 5000ms info: 2022-11-22 15:34:39.5647151 +08:00 星期二 L System.Logging.ScheduleService[0] #14 The trigger for scheduler of successfully paused to the schedule. warn: 2022-11-22 15:34:39.5682460 +08:00 星期二 L System.Logging.ScheduleService[0] #14 Schedule Hosted Service cancels hibernation and GC.Collect().","s":"26.1.11.8 暂停当前作业","u":"/docs/job","h":"#261118-暂停当前作业","p":3757},{"i":3878,"t":"scheduler.StartTrigger(\"triggerId\");","s":"26.1.11.9 启动作业特定触发器","u":"/docs/job","h":"#261119-启动作业特定触发器","p":3757},{"i":3880,"t":"scheduler.PauseTrigger(\"triggerId\");","s":"26.1.11.10 暂停作业特定触发器","u":"/docs/job","h":"#2611110-暂停作业特定触发器","p":3757},{"i":3882,"t":"// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild var schedulerResult = scheduler.TryUpdateDetail(jobBuilder, out var jobDetail); // 无返回值,无错误 scheduler.UpdateDetail(jobBuilder);","s":"26.1.11.11 更新作业信息","u":"/docs/job","h":"#2611111-更新作业信息","p":3757},{"i":3884,"t":"// 返回 ScheduleResult 类型,如果存在返回 ScheduleResult.Succeed,否则返回 ScheduleResult.NotFound var scheduleResult = scheduler.TryGetTrigger(\"trigger1\", out var trigger); // 返回 Trigger 类型 var trigger = scheduler.GetTrigger(\"trigger1\");","s":"26.1.11.12 获取作业单个触发器","u":"/docs/job","h":"#2611112-获取作业单个触发器","p":3757},{"i":3886,"t":"// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild var schedulerResult = scheduler.TryAddTrigger(triggerBuilder, out var trigger); // 无返回值,无错误 scheduler.AddTrigger(triggerBuilder);","s":"26.1.11.13 添加作业单个触发器","u":"/docs/job","h":"#2611113-添加作业单个触发器","p":3757},{"i":3888,"t":"// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild 或 ScheduleResult.NotFound var schedulerResult = scheduler.TryRemoveTrigger(\"trigger1\", out var trigger); // 无返回值,无错误 scheduler.RemoveTrigger(triggerBuilder);","s":"26.1.11.14 删除作业单个触发器","u":"/docs/job","h":"#2611114-删除作业单个触发器","p":3757},{"i":3890,"t":"var isExist = scheduler.ContainsTrigger(\"trigger1\");","s":"26.1.11.15 判断作业是否包含特定触发器","u":"/docs/job","h":"#2611115-判断作业是否包含特定触发器","p":3757},{"i":3892,"t":"// 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild var schedulerResult = scheduler.TryRemove(); // 无返回值,无错误 scheduler.Remove();","s":"26.1.11.16 删除当前作业","u":"/docs/job","h":"#2611116-删除当前作业","p":3757},{"i":3894,"t":"此操作会强制触发作业持久化器 IJobPersistence 的 OnChanged 和 OnTriggerChanged 方法,并标记作业持久化行为为 PersistenceBehavior.Updated。 scheduler.Persist();","s":"26.1.11.17 强制触发所有作业持久化","u":"/docs/job","h":"#2611117-强制触发所有作业持久化","p":3757},{"i":3896,"t":"var json scheduler.ConvertToJSON(); 输出结果为: { \"jobDetail\": { \"jobId\": \"job1\", \"groupName\": null, \"jobType\": \"Furion.Application.MyJob\", \"assemblyName\": \"Furion.Application\", \"description\": null, \"concurrent\": true, \"includeAnnotations\": false, \"properties\": \"{}\", \"updatedTime\": \"2022-11-17T09:25:47.0471107+08:00\" }, \"triggers\": [ { \"triggerId\": \"job1_trigger1\", \"jobId\": null, \"triggerType\": \"Furion.Schedule.PeriodSecondsTrigger\", \"assemblyName\": \"Furion\", \"args\": \"[5]\", \"description\": null, \"status\": 2, \"startTime\": null, \"endTime\": null, \"lastRunTime\": \"2022-11-20T18:31:56.6859410+08:00\", \"nextRunTime\": \"2022-11-20T18:32:01.7233546+08:00\", \"numberOfRuns\": 1, \"maxNumberOfRuns\": 0, \"numberOfErrors\": 0, \"maxNumberOfErrors\": 0, \"numRetries\": 0, \"retryTimeout\": 1000, \"startNow\": true, \"runOnStart\": false, \"updatedTime\": \"2022-11-20T18:31:56.7233630+08:00\" } ] }","s":"26.1.11.18 输出 JSON 字符串","u":"/docs/job","h":"#2611118-输出-json-字符串","p":3757},{"i":3898,"t":"紧急编写中,将在 2022 年 11 月 23 日完成,别催!","s":"26.1.12 作业持久化器 IJobPersistence","u":"/docs/job","h":"#26112-作业持久化器-ijobpersistence","p":3757},{"i":3900,"t":"紧急编写中,将在 2022 年 11 月 23 日完成,别催!","s":"26.1.13 作业集群控制","u":"/docs/job","h":"#26113-作业集群控制","p":3757},{"i":3902,"t":"紧急编写中,将在 2022 年 11 月 23 日完成,别催!","s":"26.1.14 如何部署","u":"/docs/job","h":"#26114-如何部署","p":3757},{"i":3904,"t":"紧急编写中,将在 2022 年 11 月 23 日完成,别催!","s":"26.1.15 常见问题","u":"/docs/job","h":"#26115-常见问题","p":3757},{"i":3906,"t":"与我们交流 给 Furion 提 Issue。","s":"26.1.15 反馈与建议","u":"/docs/job","h":"#26115-反馈与建议","p":3757},{"i":3908,"t":"Furion 框架升级/发版规则 升级前重点关注可能造成【破坏性】的标签类型: 修复、 调整、 移除、 升级 版本号规则:主版本号.次版本号.修订版本号 只要【确认】为框架 bug,则当天修复,当天发版,修订版本号 加 1。 只要 .NET SDK 版本更新,则当天升级,当天发版,修订版本号 加 1。 如果 .csproj 文件有变更,则当天发版,修订版本号 加 1。 如果新增 拓展包,为了版本号统一,则当天发版,修订版本号 加 1。 如果涉及到代码重构,则当天发版,次版本号 加 1,修订版本号 清 0。 如果 .NET SDK 主版本号升级,则当天发版,主版本号 加 1。 如有意外不能当天发版,则会在 Issue 中说明具体发版时间,正常不会超过 3 天。","s":"1.6 更新日志","u":"/docs/upgrade","h":"","p":3907},{"i":3910,"t":"更好的 Furion,更好的自己 在过去两年,实现 Furion 从无到有,编写文档已逾三百万字,过程心酸开源人自知。 这一路日夜兼程,嘲讽批评常伴眼耳,即便辛苦无奈、想过放弃,但为了那微不足道的成就感依然努力着。 当然,也收获了不少... 越来越多拥趸者,越发精湛技术能力,更高层次思维模式,还有许多跨界跨行朋友。 在 《开源指北》中,我曾说道:“开源如同人的脸,好坏一面便知,缺点可能会受到嘲讽批评,优点也会收获赞扬尊重。别担心,他们正在塑造更好的你。” 所以,这一次重新起航,重塑 Furion 重塑自己。也许未来在某个 IT 圈但凡有人谈起 .NET 还能瞟到 Furion 的身影。 版本细节 v4.8.0 版本细节:https://gitee.com/dotnetchina/Furion/issues/敬请期待 2022.11.21 新特性 新增 🎉 全新的定时任务模块 4.8.0 【查看源码】 新增 🎉 全新的 Cron 表达式模块 4.8.0 【查看源码】 新增 事件总线支持简单的 Order 编排规则 4.8.0 833c0d4 新增 远程请求代理模式对于基元类型参数支持自动获取参数名 4.8.0 #I60OT6 新增 Serve.Run 模式的 .ConfigureServices 方法 4.8.0 023391b 新增 Serve.RunGeneric 通用泛型主机方法 4.8.0 6865f3d 新增 Serve.Run() 的 additional 参数 4.8.0 023391b 查看更改 极速入门现在可以便捷注册服务,写测试例子的时候非常有用,无需编写 Startup.cs。 Serve.Run(additional: services => { services.AddRemoteRequest(); }); // 通用泛型主机方式 Serve.RunGeneric(additional: services => { services.AddRemoteRequest(); }); // 还可以省去 additional Serve.Run(services => { services.AddRemoteRequest(); }); // 通用泛型主机方式 Serve.RunGeneric(services => { services.AddRemoteRequest(); }); 新增 Serve.Run 主机返回值 IHost 4.8.0 #I61XHV 查看更改 在 Winfom/WPF 应用程序中,我们希望关闭窗体或退出应用程序时,能够关闭 Serve 主机: using Microsoft.Extensions.Hosting; public partial class App : Application { private readonly IHost _host; public App() { _host = Serve.Run(silence: true); } protected override void OnExit(ExitEventArgs e) { _host.StopAsync(); _host.Dispose(); base.OnExit(e); } } 新增 日志 JSON 自动美化格式化器 LoggerFormatter.JsonIndented 4.8.0 7b9268c 新增 LoggingMonitor 的 JsonIndented 配置,可配置是否美化 JSON 4.8.0 7b9268c 查看更改 默认情况下,配置输出 JSON 格式化 LoggerFormatter.Json 会浓缩到一行显示。 新版本支持 LoggerFormatter.JsonIndented 美化 JSON 配置: // 控制台日志 services.AddConsoleFormatter(options => { options.MessageFormat = LoggerFormatter.JsonIndented; }); // 文件日志 services.AddFileLogging(\"mytemplate.log\", options => { options.MessageFormat = LoggerFormatter.JsonIndented; }); // 数据库日志 services.AddDatabaseLogging(options => { options.MessageFormat = LoggerFormatter.JsonIndented; }); // LoggingMonitor 日志 services.AddMonitorLogging(options => { options.JsonIndented = true; }); 突破性变化 调整 旧版本定时任务为 弃用 状态(2022 年 12 月 31 日彻底删除),如需取消警告在 .csproj 中添加 0618 4.8.0 旧版本文档 移除 JSON 静态类所有方法的 serviceProvider 参数(无破坏) 4.8.0 962fb16 移除 Http 静态类所有方法的 serviceProvider 参数(无破坏) 4.8.0 962fb16 问题修复 修复 从 .NET6/7 降级回 .NET5 找不到 .AddDateOnlyConverters() 和 .AddTimeOnlyConverters() 拓展方法问题 4.8.0 cdddf8d 修复 Retry.InvokeAsync 方法如果不传入 fallbackPolicy 参数报空异常问题 4.8.0 21af847 修复 动态 WebAPI 不支持在 .NET7 不声明 [FromServices] 自动注入问题 4.8.0 #I62HP1 文档 新增 新版本定时任务文档 新增 Cron 表达式解析文档 新增 Schedular 全局静态类文档 更新 Serve.Run() 入门文档文档、安全授权文档、前端接口代理文档、事件总线文档、日志文档、Worker Service 文档","s":"v4.8.0(未发布,全新定时任务)","u":"/docs/upgrade","h":"#v480未发布全新定时任务","p":3907},{"i":3912,"t":".NET7 发布 🚀🎉🔥 2022 年 11 月 08 日,微软发布了 .NET7 首个正式版。 Furion 第一时间完成了适配,v4 版本开始一套代码支持 .NET5-.NET7/N,支持所有 Furion 版本升级。 版本细节 v4.7.9 版本细节:https://gitee.com/dotnetchina/Furion/issues/I60MFK 2022.11.11 v4.7.7 版本细节:https://gitee.com/dotnetchina/Furion/issues/I60GZ8 2022.11.10 v4.7.6 版本细节:https://gitee.com/dotnetchina/Furion/issues/I60591 2022.11.08 v4.7.5 版本细节:https://gitee.com/dotnetchina/Furion/issues/I600R4 2022.11.08 v4.7.3 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5Z9TI 2022.11.03 v4.7.2 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5YG48 2022.10.30 v4.7.1 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5Y6U3 2022.10.28 v4.7.0 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5Y04N 2022.10.27 新特性 新增 日志模块时间格式化默认输出 毫秒 部分,针对并发比较高的场景 4.7.0 c0dc36c 新增 写入数据库日志死循环输出检测机制 4.7.0 30dea0c 新增 LoggingMonitor 输出 系统信息,.NET 架构 和 基础框架 4.7.1 aeda902 新增 远程请求 .SetQueries(obj, ignoreNullValue) 重载方法 4.7.3 #I5Z8KC 新增 远程请求 .GetCookies() 和 .GetSetCookies() 拓展方法 4.7.5 #I5ZY1L 新增 事件总线 .ReplaceStorerOrFallback 自定义事件源存储器方法,可在自定义初始失败时回退到默认值 4.7.6 #I602NU 新增 LoggingMonitor 输出 启动信息,Cookies 和 请求端源 信息 4.7.7 3037b04 新增 JSON 序列化 DateOnly 和 TimeOnly 类型转换器:.AddDateOnlyConverters() 和 .AddTimeOnlyConverters() 4.7.9 !657 47a5fcb 新增 HttpContext.ReadBodyContentAsync() 拓展方法重复读取 Body 内容 4.7.9 #I60IYU 突破性变化 新增 所有脚手架支持 -f 指定 .NET 版本 4.7.6 #I603AZ 查看更改 # 创建 .NET5 版本 dotnet new furionapi -n 项目名称 -f net5 # 创建 .NET6 版本 dotnet new furionapi -n 项目名称 -f net6 # 创建 .NET7 版本 dotnet new furionapi -n 项目名称 -f net7 升级 适配 .NET 6.0.11 和 .NET 7 4.7.5 7df3195 升级 所有脚手架至 .NET 7 4.7.5 7df3195 调整 LogContext 类型的所有方法至 Furion.Logging 命名空间下,解决空异常问题 4.7.3 #I5YOT3 查看更改 由: var value = logContext.Get(\"Key\"); // 过去如果 logContext == null 报错 改为: using Furion.Logging; var value = logContext.Get(\"Key\"); // 新版本不会报错,且 value = null 调整 旧版本定时任务为 弃用 状态(一周内发布新版),如需取消警告在 .csproj 中添加 0618 4.7.9 0ff3ac0 问题修复 修复 生成 JWT Token 时间戳和自动刷新逻辑在高并发下检查有效性不够精确问题,原因是时间戳丢掉了毫秒部分 4.7.0 3c0c017 修复 在 IDatabaseLoggingWriter 实现类中输出日志导致死循环问题 4.7.0 30dea0c 修复 规范化结果 OnResponseStatusCodes 方法在 Response 已完成写入时设置出现异常问题 4.7.2 #I5YBHL 修复 L.SetCulture(\"zh-CN\"); 在 Response 已完成写入时设置出现异常问题 4.7.2 #I5YBHL 修复 动态 WebAPI 在类上配置 [Route] 特性且包含 [action] 模板导致生成错误接口路径 4.7.2 #I5YEZQ 修复 启用二级虚拟目录 AppSettings:VirtualPath 导致 swagger 的 miniprofile 加载失败 4.7.3 #I5Z8RM 修复 LoggingMonitor 监听带有 [FromServices] 的方法参数或接口类型参数出错 4.7.7 3037b04 修复 HttpRequest 通过 .ReadBodyContentAsync() 读取不到 Body 问题 4.7.9 #I60IYU 其他更改 更新 JSON Schema 配置,新增日志更多参数提醒 4.7.0 74bee56 调整 日志记录时间格式默认输出带 7位 的毫秒值 4.7.1 aeda902 调整 所有脚手架默认启用 单文件/独立部署 配置 4.7.7 1277f53 文档 新增 IIS 回收问题解决方案文档 新增 远程请求获取 Cookies 文档 新增 LoggingMonitor 写入数据库文档 新增 JSON 序列化 DateOnly 和 TimeOnly 类型处理文档 新增 HttpContext 读取 Body 内容文档 新增 PM2 配置文件 json 部署文档 更新 日志记录文档、定时任务文档、远程请求文档、脚手架文档 特别贡献 @YaChengMu:!657 @LiuDanK:#I60MP2","s":"v4.7.9(当前版本)","u":"/docs/upgrade","h":"#v479当前版本","p":3907},{"i":3914,"t":"版本细节 v4.6.9 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5XKW4 2022.10.25 v4.6.8 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5X2Q0 2022.10.22 v4.6.7 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5WQPP 2022.10.20 v4.6.6 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5WOIV 2022.10.20 v4.6.5 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5VPD1 2022.10.14 v4.6.4 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5VIAQ 2022.10.13 v4.6.3 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5V99T 2022.10.12 v4.6.2 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5V6UE 2022.10.12 v4.6.1 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5UYQW 2022.10.11 v4.6.0 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5UQZ7 2022.10.10 新特性 新增 LoggingMonitor 支持 FileResult 类型监听 4.6.0 bf9c0b1 新增 LogMessage 结构 UseUtcTimestamp 字段,解释日志记录时间格式是 UTC 还是 LOCAL 时间 4.6.1 aab0371 新增 事件总线模块重试失败后支持回调 4.6.1 #I5UVMV 新增 LoggingMonitor 支持序列化忽略指定属性名或属性类型 4.6.1 81c6343 新增 long 序列化丢精度的 JsonConvert 内置转换器,.AddLongTypeConverters() 4.6.5 #I5VJHC aded58d 新增 app.EnableBuffering() 拓展,解决 Request.Body 不能重复读问题 4.6.5 aded58d 新增 支持特别接口使用特定的序列化规则 4.6.6 797b0bf 新增 LoggingMonitor 自动解析 JWT 时间戳为时间格式 4.6.8 9e31b0b 突破性变化 升级 适配 .NET 6.0.10 和 .NET 7 RC2 4.6.2 6bb2fad 新增 内置 Microsoft.AspNetCore.Mvc.NewtonsoftJson 拓展,原因是太多人使用了 4.6.5 aded58d 移除 \"some log\".SetCategory(name) 拓展方法 4.6.0 ec4838c 移除 DateOnlyJsonConverter 和 DateOnlyOffsetJsonConverter 处理 4.6.5 aded58d 调整 事件总线触发处理程序的逻辑,由过去的 foreach 改为 Parallel.ForEach,吞吐量提升近 4 倍 4.6.4 7384c9c 调整 .AddDateFormatString() 名称为 .AddDateTimeTypeConverters() 4.6.5 aded58d 调整 重构日志模块设置上下文数据功能 4.6.0 1c198ee 查看更改 由于过去版本设置日志上下文有多线程异常和堆内存溢出风险,所以重新设计了日志上下文的写法。 由: _logger.ScopeContext(ctx => ctx.Set(\"Name\", \"Furion\").Set(\"UserId\", 10)) .LogInformation(\"我是一个日志 {id}\", 20); 改为: using (var scope = _logger.ScopeContext(ctx => ctx.Set(\"Name\", \"Furion\").Set(\"UserId\", 10))) { _logger.LogInformation(\"我是一个日志 {id}\", 20); } // 也可以简写 using var scope = _logger.ScopeContext(ctx => ctx.Set(\"Name\", \"Furion\").Set(\"UserId\", 10)); _logger.LogInformation(\"我是一个日志 {id}\", 20); 移除 远程请求 .SetTimeout 和 [Timeout] 配置方法,采用全局统一配置 4.6.4 7384c9c 查看更改 默认情况下,HttpClient 请求超时时间为 100秒,可根据实际情况进行设置: // 配置默认 HttpClient options.AddHttpClient(string.Empty, c => { c.Timeout = TimeSpan.FromMinutes(2); }); // 配置特定客户端 options.AddHttpClient(\"github\", c => { c.Timeout = TimeSpan.FromMinutes(2); }); 问题修复 修复 4.5.9+ 版本新增的 IncludeScopes 配置导致日志上下文失效 4.6.0 4a76841 修复 多个 sql 共用 DbParameters 出现冲突问题 4.6.0 #I5UO2H 修复 高频率写入日志导致堆内存溢出的异常问题 4.6.0 #I5UJRS 修复 框架内部所有使用 .CreateLogger 创建的日志对象无法应用上下文问题 4.6.0 ec4838c 修复 修复远程请求不能在 Worker Serivce 中进行构造函数注入,原因是注册为 Scope 范围作用域 4.6.3 974f835 修复 个别服务器的 SQL Server 不支持 TLS 1.2 协议问题 4.6.3 974f835 修复 .ToDictionary() 拓展不支持 JObject 类型问题 4.6.5 #I5VJHC a11bf8d 修复 LoggingMonitor 处理 long 类型丢精度问题 4.6.5 #I5VJHC aded58d 修复 动态 WebAPI 在 class 类型上贴 [ApiDescriptionSettings(false)] 导致接口 404 问题 4.6.7 #I5WQ18 修复 超高频率下发送事件总线消息,但是 GC 来不及回收导致内存和 CPU 爆掉问题 4.6.8 dbc7935 修复 JWT 模块自动刷新 Token 达到临界值时导致自动刷新失败,并返回错误的 401 状态码 4.6.8 #I5WXHZ 修复 自动生成 vue/react/angular 客户端工具库错误处理 Token 问题 4.6.8 #I5WXHZ 修复 远程请求没有正确处理 数组和集合 类型的 url 参数 4.6.9 #I5XIQ4 修复 自定义 Tenant 实体且包含 TenantId 属性且没有继承 EntityBase/Entity 基类出现 The entity type 'Tenant' requires a primary key to be defined 4.6.9 #I4UM3E 其他更改 调整 LoggingMonitor 返回值类型是 泛型 时获取 FullName 带程序集签名问题 4.6.2 f0aaec6 调整 优化远程请求性能,添加复用池的机制,避免频繁销毁创建 4.6.4 7384c9c 文档 新增 远程请求设置客户端生命周期配置文档和新超时配置文档 新增 JSON 序列化处理 long 类型说明文档 新增 JSON 反序列化 DateTimeOffset 类型个别格式出错问题解决方案文档 新增 Worker Service 实现 串行 操作文档 新增 关闭 .NET Core 底层日志和远程请求日志文档 新增 规范化结果支持特定接口配置独立序列化配置文档 更新 日志记录文档、事件总线文档、数据库入门文档、JSON 序列化文档、远程请求文档、安全授权文档、生成前端请求代理文档","s":"v4.6.9(已发布)","u":"/docs/upgrade","h":"#v469已发布","p":3907},{"i":3916,"t":"版本细节 v4.5.9 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5ULWN 2022.10.09 v4.5.8 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5UGNS 2022.10.08 v4.5.7 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5U8Q9 2022.10.06 v4.5.6 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5U4SG 2022.10.03 v4.5.5 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5U413 2022.10.02 v4.5.4 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5U3MK 2022.10.01 v4.5.2 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5TXON 2022.09.30 v4.5.1 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5TLI6 2022.09.28 v4.5.0 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5TD4X 2022.09.27 新特性 新增 .AddConsoleFormatter() 拓展简化控制台日志模板配置 4.5.0 #I5TCMO 新增 控制台和文件日志时间默认显示 星期几 4.5.1 #I5TKL5 新增 控制台和文件日志支持配置 options.DateFormat 日期格式化 4.5.1 #I5TKL5 新增 控制台日志带颜色输出,比如高亮 日志级别 4.5.1 #I5TKL5 新增 控制台格式化配置 options.WriteHandler 完全自定义配置 4.5.2 7fb3036 新增 日志输出 JSON 格式化配置 4.5.2 #I5TWC1 #I5OUT1 新增 数据库日志写入独立日志模板配置、独立日期格式配置 4.5.2 #I5TWC1 新增 LogMessage 结构类 LogDateTime,ThreadId,State 属性 4.5.2 #I5TWC1 新增 LoggingMonitor 可配置 JsonWriterOptions 属性 4.5.4 #I5U375 新增 Log.ScopeContext 和 \"some log\".ScopeContext 拓展 4.5.4 8129693 新增 新增 HttpContext.SetTokensOfResponseHeaders 拓展 4.5.7 3775e65 新增 新增远程请求支持 Stream 文件格式上传 4.5.8 #I5UF3I 新增 日志模块可配置是否启用上下文功能 IncludeScopes 属性 4.5.9 #I5UJRS 新增 LoggingMonitor 日志筛选 WriteFilter 配置 4.5.9 6f06f12 突破性变化 调整 😊 Furion 框架文档地址为 https://furion.baiqian.ltd 4.5.4 2e3d80e 调整 LoggingMonitor 底层逻辑,移除原来的 .ScopeContext 存储监听信息设计 4.5.2 #I5TWC1 移除 主机未启动时构建服务的操作权限,此操作会导致内存激增,受影响方法: App.GetOptions 系列和 App.GetService 和 Scoped.Create 4.5.4 #I5U0A4 8129693 查看更改 近期发现许多开发者在主机还未启动时解析服务,这是非常不正确的行为,会导致启动时内存激增甚至溢出,常见的错误有: 在启动的时候通过 Scoped.Create 创建作用域 在启动的时候通过 App.GetOptions 获取选项对象 在启动的时候通过 App.GetService 解析服务 正确的做法是,启动的时候禁止使用 Scoped.Create 和 App.GetService。 如需启动时获取配置应该通过:App.GetConfig(\"配置节点\", true) 替代 App.GetOptions()。 问题修复 修复 字符串日志拓展带泛型方法不能正确显示 CategoryName 日志类别 4.5.0 #I5TBKL 修复 控制台日志设置了 .ScopeContext 无效问题 4.5.2 7fb3036 修复 LoggingMonitor 同时配置了局部和全局日志监听触发两次问题 4.5.2 a1a97e8 修复 v4.4.8+ 版本更新导致远程请求在个别情况下出现并发问题 4.5.2 #I5TWL3 修复 LoggingMonitor 配置了 ReturnValueThreshold 之后 Json 被截断引发有效性检测异常 4.5.4 #I5U375 修复 LoggingMonitor 不支持 DataTable,DataSet,Tuple 等类型问题 4.5.5 #I5U3VO 修复 自 v4.5.2+ 版本升级后出现启动时使用 App.GetOptons 异常问题 4.5.6 #I5U4OC f9a6587 修复 app.UseInject(action) 导致死循环 4.5.7 !608 修复 LoggingMonitor 报空引用异常问题 4.5.8 #I5UGCA !610 修复 并发情况下设置日志上下文出现偶然性空引用问题 4.5.9 #I5UJRS 其他更改 调整 文件日志默认模板,默认对日志时间进行格式化并显示星期几 4.5.1 #I5TKL5 调整 脚手架代码,默认启用 services.AddConsoleFormatter() 4.5.1 #I5TLI6 调整 Serve.Run() 代码,默认启用 services.AddConsoleFormatter() 4.5.1 #I5TLI6 调整 减少 MiniProfile 不必要的监听,只在 Swagger 页面请求才监听 4.5.7 697ef51 调整 日志模块所有日志时间默认为 24小时制,过去是 12小时制 4.5.9 !612 文档 新增 选项监听出现触发多次的解决方案 #I5T9PR 更新 日志记录文档、动态 WebAPI 文档、选项文档、HttpContext 文档、远程请求文档 本期亮点 支持日志配置 JSON 格式化输出 查看更改 // 控制台 services.AddConsoleFormatter(options => { options.MessageFormat = LoggerFormatter.Json; }); // 文件 services.AddFileLogging(\"mytemplate.log\", options => { options.MessageFormat = LoggerFormatter.Json; }); // 数据库 services.AddDatabaseLogging(options => { options.MessageFormat = LoggerFormatter.Json; }); 支持 LoggingMonitor 输出 JSON 格式 查看更改 全局/局部启用 Json 输出配置 // 全局 services.AddMonitorLogging(options => { options.JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson; }); // 局部 [LoggingMonitor(JsonBehavior = Furion.Logging.JsonBehavior.OnlyJson)] 关于 JsonBehavior 只有设置为 JsonBehavior.OnlyJson 时才不会输出美观的日志。 写入存储介质 using Furion.Logging; namespace Your.Core; public class DatabaseLoggingWriter : IDatabaseLoggingWriter { // 支持构造函数注入任何实例,会自动释放任何服务,比如注入 IRepository,或者 SqlSugarClient public DatabaseLoggingWriter() { } public void Write(LogMessage logMsg, bool flush) { // 如果 JsonBehavior 配置为 OnlyJson 或者 All,那么 Context 就包含 loggingMonitor 的值 // 如果 JsonBehavior 配置为 OnlyJson,那么可直接通过 logMsg.Message 获取结果就是 json 格式 if (logMsg.LogName == \"System.Logging.LoggingMonitor\") { var jsonString = logMsg.Context.Get(\"loggingMonitor\"); } // 这里写你任何插入数据库的操作,无需 try catch } } Json 输出格式如下: { \"controllerName\": \"test-logger\", \"controllerTypeName\": \"TestLoggerServices\", \"actionName\": \"person\", \"actionTypeName\": \"GetPerson\", \"areaName\": null, \"displayName\": \"Furion.Application.TestLoggerServices.GetPerson (Furion.Application)\", \"localIPv4\": \"0.0.0.1\", \"remoteIPv4\": \"0.0.0.1\", \"httpMethod\": \"GET\", \"requestUrl\": \"https://localhost:5001/api/test-logger/person/2\", \"refererUrl\": \"https://localhost:5001/api/index.html?urls.primaryName=数据库操作演示\", \"environment\": \"Development\", \"userAgent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.53\", \"requestHeaderAuthorization\": \"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY2NDQ1MDUwNSwibmJmIjoxNjY0NDUwNTA1LCJleHAiOjE2NjQ0NTE3MDUsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.-xocNcDQGoXClceoVU5QAHIkTcOZ7ZXo0hEbzghDfFI\", \"timeOperationElapsedMilliseconds\": 55, \"authorizationClaims\": [ { \"type\": \"UserId\", \"valueType\": \"integer\", \"value\": \"1\" }, { \"type\": \"Account\", \"valueType\": \"string\", \"value\": \"admin\" }, { \"type\": \"iat\", \"valueType\": \"integer\", \"value\": \"1664450505\" }, { \"type\": \"nbf\", \"valueType\": \"integer\", \"value\": \"1664450505\" }, { \"type\": \"exp\", \"valueType\": \"integer\", \"value\": \"1664451705\" }, { \"type\": \"iss\", \"valueType\": \"string\", \"value\": \"dotnetchina\" }, { \"type\": \"aud\", \"valueType\": \"string\", \"value\": \"powerby Furion\" } ], \"parameters\": [ { \"name\": \"id\", \"type\": \"System.Int32\", \"value\": 2 } ], \"returnInformation\": { \"type\": \"Furion.UnifyResult.RESTfulResult`1[[System.Object, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]\", \"actType\": \"Furion.Application.Persons.PersonDto\", \"value\": { \"StatusCode\": 200, \"Data\": { \"Id\": 2, \"Name\": null, \"Age\": 0, \"Address\": null, \"PhoneNumber\": null, \"QQ\": null, \"CreatedTime\": \"0001-01-01T00:00:00+00:00\", \"Childrens\": null, \"Posts\": null }, \"Succeeded\": true, \"Errors\": null, \"Extras\": null, \"Timestamp\": 1664450517341 } }, \"exception\": { \"type\": \"System.DivideByZeroException\", \"message\": \"Attempted to divide by zero.\", \"stackTrace\": \" at Furion.Application.TestLoggerServices.测试日志监听8(Int32 id) in D:\\\\Workplaces\\\\OpenSources\\\\Furion\\\\samples\\\\Furion.Application\\\\TestLoggerServices.cs:line 78\\r\\n at lambda_method103(Closure , Object , Object[] )\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Logged|12_1(ControllerActionInvoker invoker)\\r\\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\" }, \"validation\": { \"errorCode\": null, \"originErrorCode\": null, \"message\": \"出错了啊。。。。\" } } 支持远程请求上传文件 Stream 流 查看更改 单文件上传 字符串方式 var fileStream = new FileStream(\"image.png\", FileMode.Open); var result = await \"https://localhost:44316/api/test-module/upload-file\" .SetContentType(\"multipart/form-data\") .SetFiles(HttpFile.Create(\"file\", fileStream, \"image.png\")).PostAsync(); var fileName = await result.Content.ReadAsStringAsync(); await fileStream.DisposeAsync(); 代理方式 var fileStream = new FileStream(\"image.png\", FileMode.Open); var result = await _http.TestSingleFileProxyAsync(HttpFile.Create(\"file\", fileStream, \"image.png\")); var fileName = await result.Content.ReadAsStringAsync(); await fileStream.DisposeAsync(); 多文件上传 字符串方式 var fileStream = new FileStream(\"image.png\", FileMode.Open); var result = await \"https://localhost:44316/api/test-module/upload-muliti-file\" .SetContentType(\"multipart/form-data\") .SetFiles(HttpFile.CreateMultiple(\"files\", (fileStream, \"image1.png\"), (fileStream, \"image2.png\"))).PostAsync(); var fileName = await result.Content.ReadAsStringAsync(); await fileStream.DisposeAsync(); 代理方式 var fileStream = new FileStream(\"image.png\", FileMode.Open); var result = await _http.TestMultiFileProxyAsync(HttpFile.CreateMultiple(\"files\", (fileStream, \"image1.png\"), (fileStream, \"image2.png\"))); var fileName = await result.Content.ReadAsStringAsync(); await fileStream.DisposeAsync(); 还支持 Bytes 和 Stream 混合 var fileStream = new FileStream(\"image.png\", FileMode.Open); var bytes = File.ReadAllBytes(\"image.png\"); var httpFile = new HttpFile { Name = name, Bytes = bytes, FileStream = fileStream, FileName = fileName }; var result = await \"https://localhost:44316/api/test-module/upload-file\" .SetContentType(\"multipart/form-data\") .SetFiles(httpFile).PostAsync(); var fileName = await result.Content.ReadAsStringAsync(); await fileStream.DisposeAsync(); LoggingMonitor 全局过滤 查看更改 services.AddMonitorLogging(options => { options.WriteFilter = (context) => { // 获取控制器/操作描述器 var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; // 你的逻辑....,不需要拦截返回 false,否则 true return true; }; });","s":"v4.5.9(已发布)","u":"/docs/upgrade","h":"#v459已发布","p":3907},{"i":3918,"t":"版本细节 v4.4.9 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5SP37 2022.09.23 v4.4.8 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5SKUE 2022.09.22 v4.4.7 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5SEFE 2022.09.21 v4.4.6 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5RSFD 2022.09.19 v4.4.5 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5RHQX 2022.09.16 v4.4.4 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5R5TI 2022.09.15 v4.4.3 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5QVH3 2022.09.13 v4.4.2 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5QDHX 2022.09.08 v4.4.1 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5Q3SX 2022.09.07 v4.4.0 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5PQHR 2022.09.05 新特性 新增 友好异常可控制是否输出错误日志配置 LogError: true 4.4.0 #I5PKJH 新增 DateOnlyJsonConverter 和 DateOnlyOffsetJsonConverter 序列化转换器 !565 新增 事件总线 LogEnabled 配置,可控制是否输出服务日志 #I5QLY5 新增 可实现任何多套规范化结果功能,支持特定控制器,特定方法 #I5QZ37 新增 ILoggerFactory 日志工厂动态批量添加文件日志拓展 #I5R9PO 新增 App.GetCommandLineConfiguration(args) 解析命令行参数静态方法 803542c 新增 Sql 代理支持返回受影响行数 #I5REJ9 新增 任意自定义日志文件名支持滚动日志删除功能 #I5RFBQ 新增 .pcd 图片类型 MIME 为 image/x-photo-cd 支持 5fafc84 新增 默认日志输出当前线程 Environment.CurrentManagedThreadId b8fe2cd 新增 app.UseInject(Action) 重载方法,简化配置 4.4.8 0b645fe 突破性变化 调整 框架适配 .NET 6.0.9 和 .NET 7.0 RC1 be5b40 1eee77b 调整 远程请求 .SetBodyBytes 为 .SetFiles #I5PMS5 #I5PIYI 调整 FS.InitialContentTypeProvider() 名称为 FS.GetFileExtensionContentTypeProvider() 5fafc84 移除 远程请求 [BodyBytes] 设计,采用 HttpFile 方式 #I5PMS5 #I5PIYI 查看更改 public interface IHttp : IHttpDispatchProxy { [Post(\"https://www.furion.icu/upload\", ContentType = \"multipart/form-data\")] Task PostXXXAsync(HttpFile file); // 支持多个文件 [Post(\"https://www.furion.icu/upload\", ContentType = \"multipart/form-data\")] Task PostXXXAsync(HttpFile[] files); // 支持多个文件 [Post(\"https://www.furion.icu/upload\", ContentType = \"multipart/form-data\")] Task PostXXXAsync(IList files); } // bytes 可以通过 File.ReadAllBytes(文件路径) 获取 var res = await \"https://www.furion.icu/upload\".SetContentType(\"multipart/form-data\") .SetFiles(HttpFile.Create(\"file\", bytes, \"image.png\")).PostAsync(); // 支持多个文件 var res = await \"https://www.furion.icu/upload\".SetContentType(\"multipart/form-data\") .SetFiles(HttpFile.CreateMultiple(\"files\", (bytes, \"image1.png\"), (bytes, \"image2.png\"))).PostAsync(); 调整 所有的 AddInject 和 UseInject 参数设计 #I5QCF0 查看更改 public void ConfigureServices(IServiceCollection services) { services.AddInject(options => { options.ConfigureSwaggerGen(gen => { // ... }); }); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseInject(configure: options => { options.ConfigureSwagger(swg => { // ... }); options.ConfigureSwaggerUI(ui => { // ... }); }); } 调整 远程请求所有 xxxAsStreamAsync 返回值 #I5QVEB 查看更改 由: var stream = await \"https://www.furion.icu/\".GetAsStreamAsync(); 改为: var (stream, encoding) = await \"https://www.furion.icu/\".GetAsStreamAsync(); 新增 调整 .Inject() 支持配置更多参数,开放底层更多权限 4.4.9 1182283 查看更改 .Inject((builder, options) => { options.ConfigureAppConfiguration((context, config) => { }); options.ConfigureServices((context, services) => { }); }); 问题修复 修复 远程请求代理模式非泛型参数导致数组溢出问题 #I5Q3SN 修复 LoggingMonitor 客户端 IP 记录错误 #I5QCU1 !562 修复 远程请求响应报文中包含 charset=gbk 进行序列化后乱码问题 #I5QVEB 修复 文件日志断电时丢失日志问题 db7d51b 修复 动态 WebAPI 或控制台贴了 [ApiDescriptionSettings(Tag = \"\")] 标签之后导致注释丢失 #I5REVF #I5RE4J 修复 启用数据库日志但是没有配置配置文件出现空异常问题 33817be 修复 控制台日志过滤无法过滤默认主机日志问题 33817be 修复 脚手架错误的日志配置问题 33817be 修复 高频压测情况下写日志并设置日志上下文导致并发更新出现 System.AggregateException 异常问题 #I5RFBQ 修复 日志文件名因 Windows 和 Linux 路径分隔符不一致导致日志文件创建失败问题,Linux 只支持 / 不支持 \\ #I5RFBQ 修复 Oops.Oh/Bah 设置 .WithData 之后无效问题 !580 修复 基于 Redis 重写事件存储器序列化 IEventSource 实例异常问题 4.4.7 3e45020 修复 使用 Log 静态类超高频率下写日志导致 CPU 激增问题 4.4.7 #I5SDK5 修复 远程请求超高频率下发送请求导致 CPU 激增问题和异常问题 4.4.8 #I5SJJR 修复 集成第三方配置中心时获取的不是最新数据问题 4.4.9 2cdef6b 其他更改 调整 JWTEncryption 静态类,支持无需注册 services.AddJwt() 使用 #I5PPKE #I5POLZ 调整 事件总线默认日志类名为 System.Logging.EventBusService #I5QLY5 文档 新增 .NET6 升级 .NET7 文档 新增 ASP.NET 7 集成文档 新增 集成第三方配置中心文档 4.4.9 新增 第三方事件总线和 Furion 集成文档 4.4.9 新增 事件总线集成 Kafka 文档 #I5P5UG 更新 友好异常文档、日志记录文档、远程请求文档、依赖注入文档、即时通讯文档、事件总线文档、Worker Service 文档、单元测试文档、入门指南文档、数据库新增文档","s":"v4.4.9(已发布)","u":"/docs/upgrade","h":"#v449已发布","p":3907},{"i":3920,"t":"版本细节 v4.3.9 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5PIWD 2022.09.03 v4.3.8 版本细节:https://gitee.com/dotnetchina/Furion/issues/I5PCXK 2022.09.02 新特性 新增 AppSettings 配置的 ExcludeAssemblies 属性,支持忽略指定程序集扫描 7b7747f 新增 Oops.Oh 和 Oops.Bah 支持设置额外数据 .WithData(data) #I5O38E 新增 定时任务 Crontab.GetSleepMilliseconds(baseTime) 获取下一个发生时间的时间差 d024fae 新增 友好异常默认打印异常日志,避免生产环境漏掉重要异常信息 6e3a5bd 新增 日志静态类 Log.CreateLoggerFactory() 静态方法 75c672a 新增 多语言 SharedResource 模式,避免硬编程 18e80c7 新增 事件总线 MessageCenter 静态类,解决从 Fur v1.x 版本升级问题 a29fc7c 新增 组件化 IWebComponent 模式,支持 .NET5+ 08a44c3 新增 远程请求设置自己的 HttpClient 功能 #I5PBR3 !545 新增 LoggingMonitor 支持添加更多自定义配置 #I5PEPA 新增 LoggingMonitor 可配置 WithReturnValue 和 ReturnValueThreshold #I5PFJ1 #I5PFOW 新增 LoggingMonitor 可配置 MethodsSettings 更多信息 #I5PFJ1 #I5PFOW 查看更改 Serve.Run(RunOptions.Default .AddWebComponent()); public class XXXWebComponent : IWebComponent { public void Load(WebApplicationBuilder builder, ComponentContext componentContext) { // .... } } 突破性变化 新增 Furion 程序集 PublicKeyToken 强签名 26b12c0 调整 事件总线 IEventBusFactory 事件工厂方法 AddSubscriber -> Subscribe,RemoveSubscriber -> Unsubscribe a29fc7c 调整 .AddInject() 和 .UseInject() 配置选项名称,移除 Configure 后缀 b6953cd 调整 远程请求 请求拦截、响应拦截 和 异常拦截 委托签名,新增 HttpClient 参数 #I5OWBO 查看更改 [Interceptor(InterceptorTypes.Request)] static void OnRequest(HttpClient client, HttpRequestMessage req) { } [Interceptor(InterceptorTypes.Response)] static void OnResponsing(HttpClien client, HttpResponseMessage res) { } [Interceptor(InterceptorTypes.Exception)] static void OnException(HttpClient client, HttpResponseMessage res, string errors) { } 问题修复 修复 生成包含 中文 的 JWT Token 解密后出现乱码问题 #I5O397 修复 HttpRequestMessage 拓展中追加查询参数时的空引用异常 #I5PENW !547 修复 日志模块配置多个 IDatabaseLoggingWriter 只有一个生效 #I5PFQ2 #I5PFJ1 其他更改 调整 默认输出文件日志模板,使其更加美观 #1518cf3 调整 默认规范化结果验证处理也支持状态码设置 2eb9390 更新 SqlSugarCore 拓展包和脚手架至 5.1.2.6 版本 #I5PCXK 更新 JSON Schema 关于 LoggingMonitor 更多配置 #I5PFJ1 文档 新增 RabbitMQ 事件总线文档 更新 AppSettings 配置文档、事件总线文档、多数据库配置文档、日志文档、定时任务文档、MessageCenter 文档、远程请求文档、组件化文档、入门指南、多语言文档。","s":"v4.3.9(已发布)","u":"/docs/upgrade","h":"#v439已发布","p":3907},{"i":3922,"t":"新特性 新增 事件总线工厂,支持运行时动态添加订阅程序和移除订阅程序 #I5NNQX 新增 事件总线 [EventSubscribe] 事件 Id 支持正则表达式匹配 #I5NNQX 新增 事件总线 [EventSubscribe] 支持局部失败重试配置 #I5NNQX 新增 Log 全局静态类,方便随时随地记录日志 ba9b1f1 新增 事件总线 options.AddSubscriber(Type) 重载 42446078 新增 ValidationMetadata 类型 FirstErrorProperty 和 FirstErrorMessage 属性 #I5MFJT 新增 Serve.Run() 模式 WithArgs(args) 方法 #I5MOJB 新增 [UnitOfWork] 分布式事务 TransactionScope 支持 #I5MRTY 新增 16 位 MD5 加密支持 #I5N8RC 突破性变化 调整 Scoped.Create(async (f,s) => {}) 异步创建作用域方法名称为 CreateAsync,避免一些情况下无法区分,同步方法不变 #I5N9XY 查看更改 由: // Scoped.CreateUow 一样 await Scoped.Create(async (f, s) => {}); 改为: // Scoped.CreateUowAsync 一样 await Scoped.CreateAsync(async (f, s) => {}); 新增 .NET 6.0.8 和 .NET 7 Preview 7 842d4f7 调整 [LoggingMonitor] 命名空间为 System,因为使用频率越来越高 b879861 新增 在非 Web 环境中不正确使用字符串拓展方法检测机制 6389cbd 调整 所有 .Default 静态属性为 .Default() 方法 6389cbd 调整 工作单元 IUnitOfWork 所有方法参数类型,由 ActionExecutingContext 和 ActionExecutedContext 改为 FilterContext #I5MHX5 查看更改 public interface IUnitOfWork { void BeginTransaction(FilterContext context, UnitOfWorkAttribute unitOfWork); void CommitTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork); void RollbackTransaction(FilterContext resultContext, UnitOfWorkAttribute unitOfWork); void OnCompleted(FilterContext context, FilterContext resultContext); } 问题修复 修复 日志上下文数据多次写入被清空问题以及数据库日志出现异常后停止写入 #I5LIWF 修复 个别情况下跨域默认配置的响应缓存导致嵌入式资源异常问题 7a57efe 修复 远程请求传入不合法的请求报文头数据触发校验失败问题 #I5LPFE 修复 多线程中使用静态日志写数据库日志导致连接池耗光问题 8d5cdd6 修复 EFCore 6.0 之后 IModelCacheKeyFactory 接口方法改变导致分表分库异常问题 #I5MCZ6 EFCore#25154 EFCore!3305 修复 ValidationMetadata 对象 Message 字符串类型出现 \\\"\\\" 问题 #I5MFJT 修复 [IfException] 覆盖 Oops.Oh/Bah 错误消息问题 4bbd854 修复 数据库日志写入循环写入和频繁创建数据库连接池问题 9ce214c 修复 Razor Pages 不支持全局异常拦截问题 #I5MHX5 修复 Razor Pages 不支持全局数据验证问题 #I5MHX5 修复 Razor Pages 不支持工作单元 [UnitOfWork] 问题 #I5MHX5 修复 Razor Pages 不支持 EFCore 自动 SaveChanges 问题 #I5MHX5 修复 Blazor Server 因 v4.2.2 版本更新导致的问题 #I5MNFN 修复 [IfException] 不支持多语言配置问题 #I5MPN7 修复 通过 services.AddMvcFilter() 方式注册无效问题 8d1477d 修复 事件总线默认 Channel 管道初始化时机过晚问题,解决部分第三方依赖使用问题 #I5MM3O 修复 主机停止时写入日志异常问题 #I5N7S2 修复 数据库上下文手动释放导致 AutoSaveChange 特性出现释放异常问题 #I5NFWC 修复 [LoggingMonitor] 循环引用序列化问题 #I5NRT9 修复 远程请求传入 null Body 参数抛出空异常问题 #I5NTUE 修复 事件总线默认开启模糊匹配(正则表达式)导致不必要的订阅 #I5NVOP 其他更改 调整 事件总线默认 Channel 管道初始化时机,解决部分第三方依赖使用问题 #I5MM3O 更新 底层迭代改进优化 新增 规范化文档获取控制器、方法分组、标签信息 66d8d54 文档 新增 全局日志静态类 Log 文档 ba9b1f1 新增 Nuget 本地测试包文档 更新 日志文档、静态类文档、数据校验文档、Worker Service 文档、工作单元文档、依赖注入文档","s":"v4.2.13(已发布)","u":"/docs/upgrade","h":"#v4213已发布","p":3907},{"i":3924,"t":"新特性 新增 Furion.Xunit 拓展包,正式实现 Xunit 单元测试完整支持 Furion 063a034e 新增 services.AddMonitorLogging() 日志监视器服务,支持非常灵活的日志操作 81df742 新增 Serve.Run(silence: true) 等一系列强大的静默启动功能 #I5JBSQ #I5J98T 7cced4 新增 SpecificationDocumentBuilder.GetOpenApiGroups() 方法获取底层的规范化接口分组信息 4ff03c5 新增 logger.ScopeContext() 配置日志上下文功能 #I5JC0D 新增 跨域配置 CorsAccessorSettings.SignalRSupport 配置选项,支持配置 SignalR 跨域 #I5JREM 新增 事件总线 UseUtcTimestamp 选项配置,可选择使用 DateTime.UtcNow 还是 DateTime.Now,默认是 DateTime.Now #I5JSEU 新增 规范化文档 [OperationId] 配置,解决自定义 Swagger UI 不能正确显示路由问题 #I5K1IB 新增 远程请求 IHttpDispatchProxy 方式全局拦截支持多态(继承) #I5K8FS 突破性变化 新增 Furion.Xunit 拓展包,正式实现 Xunit 单元测试完整支持 Furion 063a034e 移除 Furion.Extras.DatabaseAccessor.SqlSugar 拓展插件中的 [SqlSugarUnitOfWork] 工作单元特性,将使用通用工作单元替换** 查看最新实现文档** 移除 Inject.Create() 方法,再也不需要了,框架提供了无敌强大的 Serve.Run() 静默启动方式 200848e 调整 Serve.Run 的 ConfigureConfiguration 方法参数,由 configuration => {} 改为 (environment, configuration) => {} 83c97bb 查看更改 // 由 Serve.Run(RunOptions.Default.ConfigureConfiguration(configuration => { })); // 改为: Serve.Run(RunOptions.Default.ConfigureConfiguration((environment, configuration) => { })); 问题修复 修复 [LoggingMonitor] 异常消息日志级别为 Information 错误问题 ab46cdf 修复 新版本日志组件频繁提示文件占用问题,将文件独占锁改为共享锁 #I5J3S6 修复 配置数据库日志读写器为 EFCore 时控制台出现无限打印问题 #I5J474 修复 [LoggingMonitor] 针对 byte[] 类型参数输出过大问题 5380f35 修复 友好异常和规范化结果丢失了原始 ErrorCode 问题 #I5IX2R 修复 新版本日志组件自定义数据库读写器注入 IRepository 仓储导致死循环问题 #I5IX2R 修复 Mvc 默认手动验证和 Furion 全局验证冲突问题 2a06c39 修复 Serve.Run() 模式不支持 SuperSocket 第三方包问题,原生是支持的。186ca0a 修复 SignalR 跨域错误问题 #I5JREM 修复 [LoggingMonitor] 将 Oops.Oh 和 Oops.Bah 记录到了错误日志中,默认应该是 Information 且提供可配置 #I5JZ1H 修复 自定义 Swagger UI 之后个别 UI 要求必须配置 operationId,否则出现 guid 序号 #I5K1IB 修复 主动抛出 NotFoundResult 和 NotFoundObjectResult 无效问题 #I5KALZ 修复 [LoggingMonitor] 解析方法参数但前端未传入时出现错误问题 #I5KC5P 修复 [LoggingMonitor] 无法序列化 IQueryable 返回值问题 #I5KJD1 修复 [LoggingMonitor] 不能记录全局验证错误问题 b44087d 修复 [LoggingMonitor] 存在注册顺序差异问题 b44087d 其他更改 新增 底层的规范化文档 SpecificationDocumentBuilder 部分方法,提供更加便捷的第三方 Swagger UI 集成 10f0f01 文档 更新 单元测试文档、入门指南文档、Worker Services 文档 本期亮点 Serve.Run() 彻彻底底支持全平台,提供非常强大的静默模式 启用静默模式可以实现无阻塞方式执行程序,而且还能体验完整的 Furion 功能。 查看更改 大革命 有了 Serve.Run() 静默模式后,Furion 彻彻底底支持全平台,不管你是 控制台、Web、桌面、移动、单元测试,集成测试,基准测试等等应用程序。 Serve.Run(silence: true); // 不会阻塞执行哦,而且从这里开始可以使用 Furion 任何功能,比如 App.Configuration.... Console.WriteLine(\"Hello, World!\"); Console.ReadKey(); 还有更多静默模式。 // RunOptions 方式 Serve.Run(RunOptions.DefaultSilence); // LegacyRunOptions 方式 Serve.Run(LegacyRunOptions.DefaultSilence); // GenericRunOptions 方式 Serve.Run(GenericRunOptions.DefaultSilence); 强大的 Furion.Xunit 单元测试、集成测试 查看更改 大革命 单元测试和集成测试是保证一个系统能够持续维护和稳定运行的必备技能,但是目前现有的单元测试组件无法直接集成 Furion 的功能,最常用的就是如何在单元测试中读取配置,以及如何进行依赖注入。 在过去,Furion 只能不断的去调整,以至于适配第三方单元测试写法,搞得不伦不类! 所以,这一次不再妥协,Furion 推出自己的单元测试工具,可以让现有的单元测试如 Xunit 100% 支持 Furion 所有功能,全部保证一致的写法。 单元测试中初始化 Furion using Furion.Xunit; using Xunit.Abstractions; using Xunit.Sdk; // 配置启动类类型,第一个参数是 TestProgram 类完整限定名,第二个参数是当前项目程序集名称 [assembly: TestFramework(\"TestProject1.TestProgram\", \"TestProject1\")] namespace TestProject1; /// /// 单元测试启动类 /// public class TestProgram : TestStartup { public TestProgram(IMessageSink messageSink) : base(messageSink) { // 初始化 Furion Serve.Run(silence: true); } } 测试类支持完整依赖注入 using TestProject1.Services; using Xunit; namespace TestProject1; public class UnitTest1 { private readonly ICalcService _calcService; public UnitTest1(ICalcService calcService) { _calcService = calcService; } [Fact] public void 测试两个数的和() { Assert.Equal(3, _calcService.Plus(1, 2)); } } 查看新版本单元测试文档 开放底层规范化文档分组接口,使得集成第三方 Swagger UI 更加容易,如集成 IGeekFan.AspNetCore.Knife4jUI 拓展: 查看更改 安装包 只需要在 YourPoject.Web.Core 层安装 IGeekFan.AspNetCore.Knife4jUI 即可。 3.1.1 Knife4jUI 独立版本配置 var routePrefix = \"api\"; // 定义 swagger 路由地址,如果是跟目录,设置 string.Empty 即可 app.UseKnife4UI(options => { options.RoutePrefix = routePrefix; // 配置 Knife4UI 路由地址 foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups()) { options.SwaggerEndpoint(\"/\" + groupInfo.RouteTemplate, groupInfo.Title); } }); app.UseInject(routePrefix); // 配置 Furion 路由地址 3.1.2 Knife4jUI 和 Swagger 共存版本配置 app.UseKnife4UI(options => { options.RoutePrefix = \"newapi\"; // 配置 Knife4UI 路由地址,现在是 /newapi foreach (var groupInfo in SpecificationDocumentBuilder.GetOpenApiGroups()) { options.SwaggerEndpoint(\"/\" + groupInfo.RouteTemplate, groupInfo.Title); } }); app.UseInject(); // Furion 默认 api 地址为 /api 如需实现登录之后自动将 token 添加到头部可在登录接口 AfterScript 执行以下代码: ke.global.setAllHeader( \"Authorization\", \"Bearer \" + ke.response.headers[\"access-token\"] ); 提供强大的日志上下文功能 // 写法一 _logger.ScopeContext(ctx => ctx.Set(\"Name\", \"Furion\").Set(\"UserId\", 10)) .LogInformation(\"我是一个日志 {id}\", 20); // 写法二 _logger.ScopeContext(new Dictionary { { \"Name\", \"Furion\" }, { \"UserId\", 10 } }).LogInformation(\"我是一个日志 {id}\", 20); // 写法三 _logger.ScopeContext(new LogContext { // .... }).LogInformation(\"我是一个日志 {id}\", 20)","s":"v4.1.14(已发布)","u":"/docs/upgrade","h":"#v4114已发布","p":3907},{"i":3926,"t":"不忘初心,感恩遇见,感恩信任 2020 年 09 月 01 日,一个叫 Fur 的开源项目在 Gitee 的襁褓中悄然诞生,她的出生仿佛带着某种使命,没有包袱,无限可能。 她缓缓的张开双眼,干净雪亮的眼睛似乎对这个世界充满了好奇,任何事物在她眼前晃过都像是直击灵魂的思想碰撞,这些在她看来都是非常宝贵的财富。她貌似有用不完的精力,一路汲取知识,升级打怪,不断奔跑,乐此不疲。 记得 2020 年 11 月 11 日的单身节,她迎来了“一岁(v1.0.0)”生日,自那以后,IT 这个大银幕上频繁出现她的身影,越来越多 .NET5 开发者转粉,像是告诉这个世界,她就是 IT 界大明星。 每一个明星都有一个好听的艺名,她当然也不例外,2020 年 11 月 20 日,经纪人百小僧为她起名为 Furion。 2021 年 11 月 09 日起,她进入了每个孩子都经历过的叛逆期,年少轻狂喜新厌旧,抛弃了曾经支持她的 .NET5 粉丝们,投入到新的 .NET6 拥趸者怀抱中,自此过上了奢靡富足的生活。 但她过的不开心,时常在夜里想起 .NET5 的粉丝们,内心非常自责,但在双重工作压力下她毅然选择了忽视他们的诉求,仿佛他们就是累赘。 时间真的是好东西,曾经认为是对的,经过岁月的蹉跎历磨,渐渐的明白:不忘初心,方能始终。 这一次,不落下一人(.NET5,.NET6,...,.NET N),携手共进,重新起航,感恩遇见,感恩信任。 新特性 v4.0.0 支持 .NET5,.NET6,...,.NET N,所有的 Furion 项目都能够升级到该版本,重新起航,实现大统。","s":"v4.0.0(重新起航)💖","u":"/docs/upgrade","h":"#v400重新起航","p":3907},{"i":3928,"t":"关于日志 日志模块是任何应用系统都必备的功能,可以说是最重要的模块!在 .NET 社区中有 Log4NET,NLog,Serilog 等日志组件,它们无一不是优秀的开源项目。 但由于这些日志组件历史悠久,内部兼容的 .NET 版本非常多,功能随着时间推移变得极其强大复杂,在实际项目使用中,发现每一个日志组件配置总是不那么友好,特别是在使用上不够简单。 Furion 作为全栈开发框架,在过去版本并没有提供足以满足开发者需求的日志模块,转而推荐大家集成第三方组件,如 Serilog,导致后续无法实现自定义功能和也增加了不少维护成本。 这一次,Furion 不再妥协,彻底重构了日志模块,实现日志功能/需求完全自主可控,提供给开发者几乎所有日志功能的需求! Furion 的使用者们,是时候“更换”掉第三方日志组件,让我们一起迭代出更强更好的日志组件吧! 🍖 新特性 优化 日志模块,内置写入控制台、文件、数据库功能,再也无需引入第三方日志了!日志源码 新增 强大的调试日志 [LoggingMonitor] 32dfc1 突破性变化 优化 日志模块,内置写入控制台、文件、数据库功能,再也无需引入第三方日志了!日志源码 调整 TP.Wrapper 规范化日志模板算法,由过去的 [属性] 改为 ##属性##,解决 JSON 内容冲突问题 394ecec 移除 未来 Furion.Extras.Logging.Serilog 拓展将不再继续维护,因为 Furion 有强大的日志组件了! 问题修复 修复 修复脱敏模块模型绑定个别情况下空异常问题 #I5IM5C 文档 更新 日志文档、静态类文档、数据校验文档 本期亮点 极易使用且强大的日志模块 查看更改 // 写入文件 services.AddFileLogging(\"logs/application.log\"); // 写入数据库 services.AddDatabaseLogging(); 查看更多日志文档 强大的 [LoggingMonitor] 调试日志 查看更改 using Furion.Logging; namespace Furion.Application; public class TestLoggerServices : IDynamicApiController { [LoggingMonitor] public PersonDto GetPerson(int id) { return new PersonDto { Id = id }; } } 支持控制器、操作或全局注册拦截。 输出日志为: ┏━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━ ┣ Furion.Application.TestLoggerServices.GetPerson (Furion.Application) ┣ ┣ 控制器名称: TestLoggerServices ┣ 操作名称: GetPerson ┣ 路由信息: [area]: ; [controller]: test-logger; [action]: person ┣ 请求地址: https://localhost:44316/api/test-logger/person/11 ┣ 来源地址: https://localhost:44316/api/index.html ┣ 浏览器标识: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.62 ┣ 客户端 IP 地址: 0.0.0.1 ┣ 服务端 IP 地址: 0.0.0.1 ┣ 服务端运行环境: Development ┣ 执行耗时: 31ms ┣ ━━━━━━━━━━━━━━━ 授权信息 ━━━━━━━━━━━━━━━ ┣ JWT Token: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySWQiOjEsIkFjY291bnQiOiJhZG1pbiIsImlhdCI6MTY1ODcxNjc5NywibmJmIjoxNjU4NzE2Nzk3LCJleHAiOjE2NTg3MTc5OTcsImlzcyI6ImRvdG5ldGNoaW5hIiwiYXVkIjoicG93ZXJieSBGdXJpb24ifQ.VYZkwwqCwlUy3aJjuL-og62I0rkxNQ96kSjEm3VgXtg ┣ ┣ UserId (integer): 1 ┣ Account (string): admin ┣ iat (integer): 1658716797 ┣ nbf (integer): 1658716797 ┣ exp (integer): 1658717997 ┣ iss (string): dotnetchina ┣ aud (string): powerby Furion ┣ ━━━━━━━━━━━━━━━ 参数列表 ━━━━━━━━━━━━━━━ ┣ Content-Type: ┣ ┣ id (Int32): 11 ┣ ━━━━━━━━━━━━━━━ 返回信息 ━━━━━━━━━━━━━━━ ┣ 类型: Furion.Application.Persons.PersonDto ┣ 返回值: {\"Id\":11,\"Name\":null,\"Age\":0,\"Address\":null,\"PhoneNumber\":null,\"QQ\":null,\"CreatedTime\":\"0001-01-01T00:00:00+00:00\",\"Childrens\":null,\"Posts\":null} ┗━━━━━━━━━━━ Logging Monitor ━━━━━━━━━━━","s":"v3.9.2(已发布,全新日志组件)","u":"/docs/upgrade","h":"#v392已发布全新日志组件","p":3907},{"i":3930,"t":"新特性 新增 规范化结果 ExceptionMetadata 和 ValidationMetadata 都可以获取 ErrorCode 属性 #I5GJ6D 新增 ValidationMetadata 类 StatusCode 属性 #I5HB5L 新增 远程请求对 Url 是否编码设置,[Get(WithEncodeUrl = false)] 和 WithEncodeUrl(false) #I5GOBC 新增 更强大的 JWTEncryption.SecurityReadJwtToken('token') 读取解析 Token 静态方法 574eeb6 新增 ValiationTypes.Html 验证 Html 标签 #I5HBKC 新增 EFCore.NamingConventions 支持,可自定义生成表名,字段名风格,比如小驼峰,蛇形命名等 #I5HBEI 新增 INamedServiceProvider 命名服务提供器,可解析接口多实现 #I5HF98 新增 脱敏处理模块方法参数单个值处理 a22ec3c 新增 脱敏词库支持 | 分割词语 3106b1d 突破性变化 升级 所有 .NET 依赖包至 6.0.7 版本 升级 Serilog.AspNetCore 包至 6.0.0 版本 优化 JWT Token 刷新逻辑 #I5GXML 574eeb6 调整 ExceptionMetadata 命名空间为 Furion.FriendlyException 3105d16 调整 Retry.Invoke(Func...) 为:Retry.InvokeAsync(Func...) 3b78999 优化 脱敏处理模块,大大提高性能和准确率,同时支持方法参数单个值处理 a22ec3c 问题修复 修复 Rider 开发工具对同名脚手架 (EFCore 和 SqlSugar) 只显示一个问题 !518 修复 UnitOfWork 工作单元在 EFCore 中失效问题 #I5H0T3 修复 JWT 中 Token 如果存在数组类型的值时,刷新 Token 后丢失了历史值 #I5GXML 修复 远程请求 WithEncodeUrl 无法在 [HttpMethod] 设置问题 574eeb6 修复 Serve.Run() 模式下添加自定义配置导致 EFCore 无法获取自定义配置文件问题 #I5GZ0F 修复 Oops.Bah 进入全局异常拦截器问题 #I5H47S 修复 AddDbPool/AddDb 扩展未根据配置 Key 路径读取问题 #I5H6S4 !520 修复 ValiationTypes.Url 正则表达式覆盖不全问题 #I5HBKC 修复 v3.5.x 版本导致集成 EFCore.NamingConventions 失效问题 #I5HBEI 修复 Swagger 长路由不支持问题以及 [Required] 配置 AllowEmptyStrings 无效问题 c014330 修复 远程请求上传文件时请求报文 boundary 和 Content-Disposition 设置不正确问题 #I5HEF0 修复 脱敏模块替换敏感词汇出现多替换问题 a22ec3c 其他更改 调整 多语言默认处理逻辑,允许不配置任何语言,过去版本会报错 #I5GRD9 5077c5d 更新 规范化文档 Swagger 性能 调整 调整 MongoDB 仓储 TDocument 泛型约束 3f49055 文档 更新 远程请求文档,日志记录文档、多数据库文档、PM2 部署文档、Visual Studio 高效率文档","s":"v3.8.9(已发布)","u":"/docs/upgrade","h":"#v389已发布","p":3907},{"i":3932,"t":"新特性 新增 Minimal API 应用支持:.AddInjectMini() #I4KOQ5 新增 跨域 WithExposedHeaders 默认配置 access-token 和 x-access-token 42ebdfd 新增 脚手架默认启用 app.UseHttpLogging() HTTP 日志 42ebdfd 新增 Furion 和 ASP.NET Core 完整 json 配置的 JSON Schema 架构 JSON Schema 新增 Sql 代理支持返回单个类类型参数 1d7fb5b 新增 Sql 代理支持返回 ValueTuple 单个类类型参数 876a2f5 新增 组件化设计模块,支持比 AppStartup 更灵活便捷的设计 #components 新增 独立工作单元模块,支持任何第三方 ORM a02413d 新增 跨域 FixedClientToken 配置参数 bd01638 新增 throw Oops.Bah 可以手动触发规范化验证失败处理 83f0036 新增 FriendlyExceptionSettings 的 ThrowBah 配置,可标记 Oops.Oh 不进入异常处理 76ffa7f 突破性变化 新增 Minimal API 应用支持:.AddInjectMini() #I4KOQ5 新增 Furion 和 ASP.NET Core 完整 json 配置的 JSON Schema 架构 JSON Schema 新增 组件化设计模块,支持比 AppStartup 更灵活便捷的设计 #components 新增 独立工作单元单元模块,支持任何第三方 ORM a02413d 优化 DataValidationFilter 和 FriendlyExceptionFilter,解决不支持手动抛出业务异常问题 83f0036 调整 .AddDb<> 和 .AddDbPool<> 自定义委托参数签名,由 Action 改为:Action 查看更改 // 由: options.AddDbPool(DbProvider.MySql, opt => { }); // 改为 options.AddDbPool(DbProvider.MySql, (services, opt)=> { }) 问题修复 修复 自 v3.6.3 版本依赖,执行原生 Sql 添加了参数校验导致存储过程执行错误问题 #I5ERMQ 修复 tools/cli.ps1 脚本工具出现数据库链接被占用问题 修复 JWTSettings 算法配置 JSON Schema 错误问题,感谢 @gitwentao #I5G27B !516 修复 基于策略授权在不配置 Policy 的情况下出现空异常问题 #I5EVF2 修复 启用数据库实体跟踪时导致新增实体多次查询数据库问题 #I4J2LZ 修复 不启用规范化结果导致验证失效,异常失效问题 cdb3f57 修复 验证异常和友好异常冲突问题 83f0036 修复 CentOS 7.9 系统部署无法指定命令 --urls 参数问题 8cc8ee 其他更改 调整 脚手架所有 .json 文件,默认添加 JSON Schema 支持 文档 新增 组件化启动文档 新增 Vue/React/Angular 请求代理文档 新增 JSON Schema 文档,支持配置智能提示和验证 更新 跨域文档、规范化文档、配置文档、日志文档、IIS 部署文档 本期亮点 新增 JSON Schema 支持,所有 .json 文件支持智能提示和验证 查看更改 { \"$schema\": \"https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json\", \"Logging\": { \"LogLevel\": { \"Default\": \"Information\", \"Microsoft\": \"Warning\", \"Microsoft.Hosting.Lifetime\": \"Information\", \"Microsoft.EntityFrameworkCore\": \"Information\" } }, \"AllowedHosts\": \"*\" } 查看更多 JSON Schema 文档 根据 Swagger 生成 Vue/React/Angular 前端请求代码 查看文档 Sql 代理支持返回单个类类型参数 查看更改 public interface ISql : ISqlDispatchProxy { // 集合类型 [SqlExecute(\"select * from person\")] List GetPersons(); // 自 v3.7.3+ 版本支持返回单个类类型参数 [SqlExecute(\"select * from person where id=@id\")] Person GetPerson(int id); } Sql 代理支持返回 ValueTuple 单个类类型参数 查看更改 public interface ISql : ISqlDispatchProxy { [SqlExecute(@\" select * from person where id =@id; select * from person\")] (Person, List) GetData(int id); // 注意返回值是 `(Person, List)` 组合 } 支持 Minimal API 应用 查看更改 了解 Minimal API 应用 var builder = WebApplication.CreateBuilder(args).Inject(); // 注册 Minimal 服务 builder.Services.AddInjectMini(); var app = builder.Build(); app.UseHttpsRedirection(); app.UseInject(string.Empty); app.MapGet(\"/hello\", () => { return \"Hello, Furion\"; }); app.Run();","s":"v3.7.11(已发布)","u":"/docs/upgrade","h":"#v3711已发布","p":3907},{"i":3934,"t":"新特性 新增 Serve.Run() 极简主机模式,真正实现极速入门。95cac5b 新增 TP.Wrapper(...) 拓展方法,主要用来生成规范化的日志模板 427999a 新增 项目类型为 的控制台项目 fb08a65 新增 BadPageResult 错误页面类型 !494 新增 [SchemaId] 特性,解决不同程序集相同的类名生成 Swagger 的 SchemaId 冲突问题 #I5D3CU 新增 远程请求 options.ApproveAllCerts() 忽略所有客户端证书拓展 eb7d18a 新增 判断是否是单文件环境部署静态属性 App.SingleFileEnvironment de556f0 新增 WebApplicationBuilder.UseSerilogDefault() 拓展 e02524c 突破性变化 新增 项目类型为 的控制台项目 fb08a65 新增 Serve.Run() 极简主机模式,真正实现极速入门。95cac5b 调整 未启用规范化结果时,MVC 验证失败返回 BadPageResult() 页面类型 !494 问题修复 修复 修复默认注册的 services.AddResponseCaching(); 服务导致 .axd 内嵌资源请求错误问题 !495 修复 Oracle 数据库执行 sql 必须要求命令参数和 sql 语言参数数量一致 #I5D057 修复 IHostService 类型不能自动注册问题,之前只扫描了 BackgroundService 派生类 968344 修复 国产芯片主机不能识别 dotnet run --urls 参数问题 6d4398 修复 远程请求上传文件不支持特定文件后缀问题,如 .pem 文件 ba42198 修复 一些程序集已破坏或程序集不完整导致主机无法启动问题 d2dc3e4 修复 远程请求传入 headers 时类型为 Dictionary 导致转换异常问题 #I5DHL9 修复 Serilog 单文件发布不生成日志文件 I5DQ2B 其他更改 调整 远程请求默认客户端不检查 SSL 证书 eb7d18a 调整 开放验证服务选项 SuppressModelStateInvalidFilter 属性为可配置 !494 文档 新增 Serve.Run() 文档 新增 HttpContext 文档 新增 GlobalUsings 文档 新增 TP 全局静态类文档 新增 中间件文档、筛选器文档、审计日志文档 更新 跨域文档、远程请求文档 精彩贡献 !494 优秀 Pull Request 辩论典范 本期亮点 极速入门 查看更改 Program.cs Serve.Run(); [DynamicApiController] public class HelloService { public string Say() { return \"Hello, Furion\"; } } 启动浏览器查看效果,惊呆了吗! 内置错误页 查看更改 using Furion.FriendlyException; public IActionResult Add(Person person) { if(!ModelState.IsValid) { return new BadPageResult(); } } Swagger 支持 Markdown 查看更改 /// /// 测试 Markdown /// /// /// # 测试 `Markdown` 注释 /// /// ![](https://localhost:44316/images/logo.png) /// /// ```cs /// Serve.Run(); /// /// [DynamicApiController /// public class HelloService /// { /// public string Say() /// { /// return nameof(Furion); /// } /// } /// ``` /// /// 功能还不错!!! /// /// | 商品 | 价格 | # 其他 | /// |--------------|-----------|------------| /// | Juicy Apples | 1.99 | *7* | /// | Bananas | **1.89** | 5234 | /// | Bananas | **1.89** | 5234 | /// | Bananas | **1.89** | 5234 | /// /// ----- /// /// # Furion 探索版 /// /// > 在过去一年,实现 `Furion` 从无到有,编写文档已逾百万字,过程心酸开源人自知。 /// > /// > 这一路日夜兼程,嘲讽批评常伴眼耳,即便辛苦无奈、想过放弃,但为了那微不足道的存在感依然努力着。 /// > /// > 当然,也收获了不少...越来越多拥趸者,越发精湛技术能力,更高层次思维模式,还有许多跨界跨行朋友。 /// > /// > 在 《[开源指北] (https://gitee.com/opensource-guide/comments/)》中,我曾说道:“开源如同人的脸,好坏一面便知,缺点可能会受到嘲讽批评,优点也会收获赞扬尊重。别担心,他们正在塑造更好的你。” /// > /// > 所以,这一次重新起航,重塑 `Furion` 重塑自己。也许未来在某个 IT 圈但凡有人谈起 `.NET` 还能瞟到 `Furion` 的身影。 /// /// --- /// /// 🎉 探索 Furion 未来更多可能性,实现无第三方依赖的版本,所有模块功能按需安装,按需加载。 /// /// - 作者:[百小僧] (https://gitee.com/monksoul) /// - 日期:2021 年 08 月 30 日 /// /// ## 环境 /// /// - IDE :[Microsoft Visual Studio Enterprise 2022 Preview(64 位) 版本 17.0.0 Preview 3.1] (https://visualstudio.microsoft.com/zh-hans/vs/preview/) /// - SDK :[.NET SDK 6] (https://dotnet.microsoft.com/download/dotnet/6.0) /// - 语言:[C# 10](https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-10) /// /// ## 包说明 /// /// - `Furion.Core`:无第三方依赖,可在 `.NET 6` 所有项目类型中运行。 /// - `Furion`:内部依赖 `Furion.Core` 且无第三方依赖,**聚焦 `Web` 应用**,采用共享框架 `` 模式 /// public void MarkdownTest() { // .... }","s":"v3.6.9(已发布,全新入口组件)","u":"/docs/upgrade","h":"#v369已发布全新入口组件","p":3907},{"i":3936,"t":"新特性 新增 Options 选项属性支持自定义 Key 名称,[MapSettings(\"key\")] #I5B2HN 新增 EventBus 模块事件 Id 支持枚举类型 2f328aa 新增 EventBus 模块发布者 PublishAsync 和 PublishDelayAsync 重载 2f328aa 新增 EventBus 模块拓展方法:Enum.ParseToString() 和 String.ParseToEnum() 2f328aa 新增 Furion 和 SqlSugar 脚手架 🆕🆕🆕 8d9293d 新增 Dapper 拓展全局配置委托 #I5AYFX 新增 sql 转实体支持多种命名策略(纯大写,纯小写,带下划线分割等等),如 Oracle 数据库 a90e245 新增 FS.InitalContentTypeProvider() 拓展方法,获取系统内所有支持的 Content-Type 文件提供器 6099900 突破性变化 修复 彻底解决了 Furion 不能单文件发布的问题 7e8e0b7 问题修复 修复 框架规范化文档 Swagger 不支持 Controller 派生类 api 路由问题,原生 ASP.NET 是支持的 29e47bc 修复 基于 Schema 多租户配置无效问题 6f820ce 修复 指定实体 [Table(schema:\"dbo\")] 特性后 Schema 无效问题 6f820ce 修复 数据库视图不支持 Schema 配置问题 6f820ce 修复 规范化结果极端情况下出现 空异常 问题 c9b0ef 其他更改 调整 axios-utils.ts 和 angular-utils.ts ,新增请求拦截携带刷新 Token 的时机判断 82f89bd 更新 规范化文档 Swagger 加载继承注释 性能小优化 5f06880 调整 脚手架模板,新增 GlobalUsings.cs 模式 调整 对象映射默认支持忽略大小写 !486 文档 新增 Furion 单文件发布文档 新增 Furion + SqlSugar 脚手架文档 更新 事件总线文档、选项文档、即时通讯文档、.NET5 升级 .NET6 文档、依赖注入文档、跨域文档、数据加解密文档 本期亮点 事件总线 Id 支持枚举类型 查看更改 EventSubscribe(\"TO:DO\")] // 字符串类型 public async Task EventHandler1(EventHandlerExecutingContext context) { // .... } [EventSubscribe(YourEnum.Some)] // 枚举类型 public async Task EventHandler2(EventHandlerExecutingContext context) { var eventEnum = context.Source.EventId.ParseToEnum(); // 将事件 Id 转换成枚举对象 // .... } 事件总线发布支持更简单调用 查看更改 // 旧版本 await _eventPublisher.PublishAsync(new ChannelEventSource(\"ToDo:Create\", name)); // 新版本 await _eventPublisher.PublishAsync(\"ToDo:Create\", name); await _eventPublisher.PublishAsync(YourEnum.Some); // 也支持枚举 选项支持属性自定义配置 Key 查看更改 \"AppInfo\": { \"Name\": \"Furion\", \"Version\": \"1.0.0\", \"Company_Name\": \"Baiqian\" // 可以和属性不一样 } public class AppInfoOptions : IConfigurableOptions { public string Name { get; set; } public string Version { get; set; } [MapSettings(\"Company_Name\")] // 支持自定义 public string Company { get; set; } } 日志规范化模板 查看更改 // 生成模板字符串 var template = TP.Wrapper(\"Furion 框架\", \"让 .NET 开发更简单,更通用,更流行。\", \"[作者] 百小僧\", \"[当前版本] v3.5.3\", \"[文档地址] https://furion.icu\", \"[Copyright] 百小僧, Baiqian Co.,Ltd.\"); Console.WriteLine(template); 输出结果 ┏━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━ ┣ 让 .NET 开发更简单,更通用,更流行。 ┣ ┣ 作者: 百小僧 ┣ 当前版本: v3.5.3 ┣ 文档地址: https://furion.icu ┣ Copyright: 百小僧, Baiqian Co.,Ltd. ┗━━━━━━━━━━━ Furion 框架 ━━━━━━━━━━━","s":"v3.5.7(已发布)","u":"/docs/upgrade","h":"#v357已发布","p":3907},{"i":3938,"t":"新特性 新增 规范化文件 EnableAllGroups 功能,可以将多个分组合并到一个分组中 9277b98 新增 angular-utils 客户端工具库,专门处理 angular 项目接口代理问题 6c70584 新增 Swagger 支持单个接口更多描述功能(支持 html)e5e1db0 新增 Swagger 接口 [Obsolete] 过时支持功能 e5e1db0 新增 动态 API 的 [ApiDescriptionSettings] 特性 和DynamicApiControllerSettings 配置 的 ForceWithRoutePrefix 参数,支持强制复写 [Route] 特性并添加 DefaultRoutePrefix #I59B74 突破性变化 新增 默认内置 GBK,Windows-1252, Shift-JIS, GB2312 等编码支持 c456ecb 新增 Furion 和 SqlSugar 脚手架 问题修复 修复 不能跨程序集问题 3b9d39c 修复 不支持带参数,不支持隐式实现接口注释问题 #I59A6W#note_10699021 修复 v3.3.1 版本导致 Swagger 不能显示问题 6763352 修复 远程请求、JSON以及 Web 页面不支持 GBK,GB2312 等国标编码问题 c456ecb 修复 远程请求响应报文设置了 Content-Type:charset= 不能自动转换编码问题 c456ecb 其他更改 新增 axios-utils.ts 和 angular-utils.ts 多客户端支持 文档 新增 GlobalUsings 文档 文档地址 新增 请求大小/上传大小限制文档 文档地址 更新 规范化文档,Worker Service 文档,动态 API 文档 本期亮点 启用 All Groups 分组功能 查看更改 有时候我们为了更好的对接口进行归类,配置了 Swagger 多个分组的功能,但这样也对生成客户端请求代码造成了困扰,所以添加了新的配置: { \"SpecificationDocumentSettings\": { \"EnableAllGroups\": true } } 接口过时控制 查看更改 当我们某个接口已经过时,提示尽早调用最新接口,只需要在方法上面贴 [Obsolete] 即可,如: [Obsolete(\"GetName() 已经过时,请调用 GetFrameworkName() 替代\")] public string GetName() { return nameof(Furion); } [Obsolete] public string Other() { // ... } 单一接口更多描述 查看更改 在该版本新增了 [ApiDescriptionSettings] 的 Description 属性,支持定义更多描述,如: [ApiDescriptionSettings(Description = \"我是一段描述,显示更多内容 \")] public string add() { //.... }","s":"v3.4.2(已发布)","u":"/docs/upgrade","h":"#v342已发布","p":3907},{"i":3940,"t":"新特性 新增 远程请求文件上传自动识别 Content-Type 和 Mime #I57ZMN 新增 远程请求方法支持设置 Content-Type 和 Encoding #I57ZMN 新增 根据文件名获取 Content-Type 和 Mime 类型 #8f78184 新增 规范化文档支持授权访问 #32aa3b6 新增 代码注释,规范化文档注释 inheritdoc 语法支持 ❤️️️️ #159A6W 新增 新增 Vue2/3,React 16.8+,Angular 9+ 前端请求工具库,实现后端 API 代理 axios-utils 突破性变化 新增 代码注释,规范化文档注释 inheritdoc 语法支持 ❤️️️️ #159A6W 更新 .NET 所有依赖包至 v6.0.5 版本 问题修复 修复 自定义全局异常 Exception 后导致获取错误行号,文件空异常问题 #I53EGM 修复 配置数据库上下文传递空委托导致空引用异常问题 #I519AW 修复 字符串模板模板 Render 拓展方法返回 void 问题,应该返回 string Github-#99 修复 远程请求文件上传出现空情况问题(原因是缺失 Content-Type )I57ZMN 其他更改 调整 框架源码引入 GlobalUsings 机制,减少代码体积 #7e9cc1c 调整 跨域请求的预检设置,如果未设置,则默认为 24 小时,主要解决前端多次发送 204 预检问题 4a11e7c 更新 视图引擎反射性能 文档 新增 粘土对象序列化 JSON 配置文档 新增 前端解密 JWT 文档 新增 将 byte[] 转 url 文档 更新 二级虚拟目录部署文档,远程请求文档,文件上传文档,安全授权文档、规范化文档 本期亮点 ❤️️️️ 根据文件名获取 MIME 或 Content-Type 类型 查看更改 var success = FS.TryGetContentType(\"image.png\", out var contentType); // image/png ❤️️️️ 支持 Swagger 配置登录后才能访问 { \"SpecificationDocumentSettings\": { \"LoginInfo\": { \"Enabled\": true, \"CheckUrl\": \"检查登录地址\", \"SubmitUrl\": \"提交登录地址\" } } } 查看详细文档 ❤️️️️ 支持代码注释继承,Swagger 文档注释也支持 查看更改 /// public class TestInheritdoc : ITestInheritdoc, IDynamicApiController { /// public string GetName() { return \"Furion\"; } /// public string GetVersion() { return \"3.3.3\"; } } /// /// 测试注释继承 /// public interface ITestInheritdoc { /// /// 获取名称 /// /// string GetName(); /// /// 获取版本 /// /// string GetVersion(); } 查看详细文档","s":"v3.3.3(已发布)","u":"/docs/upgrade","h":"#v333已发布","p":3907},{"i":3942,"t":"新特性 新增 IFormFile 拓展方法 ToByteArray() da69640 新增 规范化文档 ServeDir 虚拟目录配置功能,支持一键将一级目录切换至二级目录部署(IIS)8718392 突破性变化 更新 所有依赖包至最新版 优化 依赖注入模块核心代码,移除注册服务采用反射机制,减少反射性能损耗 acdb315 问题修复 修复 Swagger 的 schema 类型如果是 C# Object 类型无法正确生成前端代码问题 Swagger 官方 Issue 1a25274 修复 Worker Service 发布成 Windows Services 时日志绝对路径问题 感谢 @jacoat !467 修复 Nginx 和 IIS 对二级虚拟目录配置不同导致 404 问题 8718392 修复 远程请求模块未初始化 OnRequestFailded 导致空异常问题 #I54PK7 修复 依赖注入反射出现 Not found Method bug #I546L1 其他更改 调整 定时任务失败后异常处理逻辑,感谢 @程小胜 !463 文档 更新 定时任务文档,日志文档 新增 文件上传/下载 文档,包含单文件/多文件/Base64/Byte[]","s":"v3.2.0(已发布)","u":"/docs/upgrade","h":"#v320已发布","p":3907},{"i":3944,"t":"新特性 新增 远程请求模块异常 Http 状态码 !462 新增 动态 WebAPI 支持小驼峰配置 #I4W1R4 新增 远程请求 SendAsByteArrayAsync 等一系列方法,支持返回 byte[] !452 新增 远程请求 GZip 压缩支持 #I506S5 突破性变化 升级 .NET6 依赖包全部升级至 Nuget 最新版 v6.0.3 问题修复 修复 .NET6 WebApplication 模式二级虚拟目录问题 #I4UZLM #I4PZ0C 修复 日期验证不支持 2022-03-01 0:00:00(现在支持小时域 0 和 00) 问题 #I4Y3NT 修复 环境配置和文件配置优先级问题 修复 脱敏模块替换敏感词汇只替换最后一个 bug #I4YFA0 修复 远程请求返回字符串个别情况出现中文乱码问题 #I50GBD 修复 [DataValidate] 配置 AllowNullValue 和 AllowEmptyString 无效问题 #I4ZZBE 其他更改 [过时] 标记 Furion.Extras.Logging.Serilog 拓展包 IWebHost 拓展为过时状态 文档 文档 优化文档体验,新增面包屑导航,重写文档缓存,提升文档访问速度 文档 更新动态 API 文档、配置文档、远程请求文档 文档 更新二级虚拟目录文档 本期亮点 新增动态 WebApi 支持小驼峰路径,如 GetMyName -> getMyName: 查看更改 { \"DynamicApiControllerSettings\": { \"LowercaseRoute\": false, \"KeepName\": true, \"AsLowerCamelCase\": true } } 支持 .NET6 WebApplication 模式二级虚拟目录配置: 查看更改 Progame.cs app.UseVirtualPath(app => { app.UseInject(String.Empty); // 注意 String.Empty 只是例子,可以不填或填其他的,见一分钟入门 app.MapRouteControllers(); });","s":"v3.1.0(已发布)","u":"/docs/upgrade","h":"#v310已发布","p":3907},{"i":3946,"t":"v3+ 版本说明 Furion v3.x 版本采用 .NET6 构建。 新特性 新增 远程请求支持 GET 请求自动转换 类类型 类型对象 #I4HR5Q 突破性变化 升级 全面支持 .NET6 版本 问题修复 修复 开启规范化结果并自定义全局异常导致异常经过 OnSucceeded 过滤器 bug #I4DTVL 修复 .NET5.0.5+ 和 .NET6 微软底层修改了 [ApiController] 验证失败返回 IActionResult 类型 #I4ISOK 修复 EFCore 6.0 适配 SqlServer 2005+ 出错 #I4ILA5 修复 .NET6 获取配置对象如果不存在返回 null 问题,.NET5 则返回初始对象 94ae4d 修复 Sql 命令参数传入 Clay 类型异常问题 #I4D21Q 修复 Cron 定时任务特性方式 bug #I4OJQI 其他更改 移除 ToPagedList 泛型约束 d0244d 文档 文档 查看 .NET6 一分钟入门 文档 查看 Furion v2 升级 v3 特别鸣谢 KaneLeung","s":"v3.0.0(已发布)","u":"/docs/upgrade","h":"#v300已发布","p":3907},{"i":3948,"t":"v2.20+ 版本说明 在 Furion v2.20+ 版本后采用 Jaina 事件总线替换原有的 EventBus 新特性 新增 远程请求支持 GET 请求自动转换 类类型 类型对象 #I4HR5Q 突破性变化 优化 EventBus 模块,采用 Jaina 方式 问题修复 修复 开启规范化结果并自定义全局异常导致异常经过 OnSucceeded 过滤器 bug #I4DTVL 修复 .NET5.0.5+ 微软底层修改了 [ApiController] 验证失败返回 IActionResult 类型 #I4ISOK 修复 远程请求上传文件异常 0c0752 修复 框架启动不支持环境变量 ASPNETCORE_HOSTINGSTARTUPASSEMBLIES 配置 !438 修复 定时任务内存和 CPU 占用及特殊情况下空异常问题 12c65de 修复 默认控制器启用规范化结果无效 bugc7a4a5e 修复 依赖注入 InjectionAttribute 特性的 ExceptInterfaces 单词拼写错误问题 !436 修复 Sql 命令参数传入 Clay 类型异常问题 #I4D21Q 其他更改 更新 InjectionAttribute 代码 !435 移除 ToPagedList 泛型约束 d0244d 文档 新增 事件总线新文档","s":"v2.20(已发布,全新事件总线)","u":"/docs/upgrade","h":"#v220已发布全新事件总线","p":3907},{"i":3950,"t":"新特性 新增 定时任务监听器 ISpareTimeListener #I468Q1 新增 执行 Sql 支持 JsonElement 参数 61985d6 新增 Swagger 配置枚举及标签排序过滤器 #I46LON !404 新增 远程请求 application/octet-stream 类型默认支持 d9bad03 新增 远程请求代理模式请求报文头支持 IDictionary 类型。0204c0a 新增 MongoDB 拓展类,添加更多常用操作方法 !423 新增 DateTimeOffset? 转换 DateTime 拓展(包含互换) !432 问题修复 修复 Scoped.Create 在 EFCore 进行 Add-Migration 时候报空异常问题,原因是在 PM 环境中不存在根服务0853e74 修复 定时任务执行异常后异常一直驻留内存问题,修正为执行成功自动清空过去异常 197a62b 修复 Jwt 拓展包不正确的代码导致 IOptions 失效#I46LUP 修复 Swagger 枚举 Schema 过滤器不输出值问题 #I46LON !404 修复 Swagger 处理非 int 类型枚举转换 bug #I46QJ9 修复 视图引擎编译模板生成 dll 后再次加载出现 IL 格式化错误问题 ff52d38 修复 管道 Channel 读取器无法释放 Handler 对象问题 10f4a90 修复 Worker Services 下日志不输出问题 c482548 修复 远程请求 multipart/form-data 类型对接微信小程序上传文件 问题 d9bad03 修复 工作单元上下文在某些情况下共享事务失效问题 006d439 修复 Swagger 枚举值在 GET 请求中 Schema 显示不正确问题 fb72fd7 修复 远程请求 404 不走异常过滤器问题 !426 修复 自定义事件总线并发情况下调用完成后无法正确处理队列数据 !429 修复 v2.19+ 版本之后模块化开发加载外部程序集失效问题 !433 修复 定时任务 SpareTime 频繁检查导致 CPU 增高问题 aa0a2ee 特别鸣谢 YaChengMu","s":"v2.19(已发布)","u":"/docs/upgrade","h":"#v219已发布","p":3907},{"i":3952,"t":"新特性 新增 Furion.Tools.CommandLine 拓展库 查看源码 新增 基于 AsyncLocal 的 CallContext 实现 9057a21 新增 远程请求可配置请求异常重试策略 656da87 新增 远程请求 OnRequestFailded 事件 4a3da4b 突破性变化 移除 Scoped 所有带返回值方法 656da87 - 调整 在 ConfigureService 中调用 App.GetOptions<>() 获取配置逻辑 afa4ac3 在过去,很多开发者总是喜欢在 Startup.cs 配置服务的 ConfigureService 方法中解析服务,这样导致内存存在溢出风险,GC 无法回收。 正确的方式是尽可能的避免 ConfigureService 中解析服务。如果需要在【启动时】获取 配置选项,请使用 App.GetConfig(路径, true) 代替 App.GetOptions。 问题修复 修复 v2.16+ 版本重构 AppDbContextBuilder 之后写错实体类型 #I45E6M 修复 远程请求单个值序列化错误处理方式 3282eba 修复 v2.17.3+ 单元测试创建 TestServer bug #I45JR3 修复 Retry.Invoke 正常方法死循环 bug !392 修复 刷新 Token 生成新 Token 存在数组/集合类型导致 Key 重复异常问题 aeea2b1 修复 远程请求序列化引用类型对象(不含 string)不正确的处理 93cf63a 修复 AppDbContext 默认租户属性受工作单元影响问题 e51557f 文档 新增 包管理工具文档 更新 模板引擎、Sql 操作,数据库上下文 等等文档","s":"v2.18(已发布)","u":"/docs/upgrade","h":"#v218已发布","p":3907},{"i":3954,"t":"新特性 新增 IPC(Inter-Process Communication,进程间通信) 模块功能,目前提供进程内通信和共享内存进程外通讯 ProcessChannel 新增 远程请求 application/xml 和 text/xml 默认支持 4753a1a 新增 控制台全局异常拦截 4a4fe1f 新增 支持自定义 .json 配置文件扫描目录 3e2910a 新增 支持数据库实体接口显式实现接口配置 9610a0a 新增 控制台应用程序全局拦截 [IfException] 支持 4a4fe1f 新增 依赖注入模块接口可以限制实现类生存周期,实现类也支持复写生存周期 d2ce089 突破性变化 新增 Oops.Retry() 重试策略功能至新类:Retry.Invoke() 6a7bbd0 移除 IHttpContextAccessor.SigninToSwagger() 拓展,请使用 IHttpContextAccessor.HttpContext.SigninToSwagger(),退出也一样 移除 全局处理 Request Body 重复读处理 Request.EnableBuffering() d92c24b 问题修复 修复 规范化状态码过滤逻辑错误问题 #I44JYS 修复 非关系型数据库(内存数据库)注册及操作异常 e167651 修复 远程请求默认序列化问题 a55603b 修复 定时任务零点/整点提前一秒触发问题 #I4321L 修复 友好异常在子类重写抽象类方法内部抛异常无法获取的问题 4a4fe1f 修复 修复非 Web 项目抛异常问题 4a4fe1f 修复 数据库实体模型贴 [NotMapper] 特性无效 #I44MNO 其他更改 调整 Swagger 生成泛型 SchemaIds 默认连接符,由 Of 改为 _ 81946b6","s":"v2.17(已发布)","u":"/docs/upgrade","h":"#v217已发布","p":3907},{"i":3956,"t":"新特性 新增 MVC 控制器支持规范化处理 #I427Z2 新增 throw Oops.Bah() 抛出业务异常(状态码 400) 新增 UnifyResultSettings 规范化 json 配置选项 #I42NY7 新增 多语言自定义配置资源文件名及自定义程序集 #I434YJ 突破性变化 调整 规范化结果 IUnifyResultProvider 参数 (破坏性更改) #I427Z2 调整 IJsonSerializerProvider 接口参数,去掉 inherit 参数 a55603b 查看更改 新版本自定义规范化结果 using Furion.DataValidation; using Furion.DependencyInjection; using Furion.UnifyResult.Internal; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using System; using System.Threading.Tasks; namespace Furion.UnifyResult { /// /// RESTful 风格返回值 /// [SuppressSniffer, UnifyModel(typeof(RESTfulResult<>))] public class RESTfulResultProvider : IUnifyResultProvider { /// /// 异常返回值 /// /// /// /// public IActionResult OnException(ExceptionContext context, ExceptionMetadata metadata) { return new JsonResult(RESTfulResult(metadata.StatusCode, errors: metadata.Errors)); } /// /// 成功返回值 /// /// /// /// public IActionResult OnSucceeded(ActionExecutedContext context, object data) { return new JsonResult(RESTfulResult(StatusCodes.Status200OK, true, data)); } /// /// 验证失败返回值 /// /// /// /// public IActionResult OnValidateFailed(ActionExecutingContext context, ValidationMetadata metadata) { return new JsonResult(RESTfulResult(StatusCodes.Status400BadRequest, errors: metadata.ValidationResult)); } /// /// 特定状态码返回值 /// /// /// /// /// public async Task OnResponseStatusCodes(HttpContext context, int statusCode, UnifyResultSettingsOptions unifyResultSettings) { // 设置响应状态码 UnifyContext.SetResponseStatusCodes(context, statusCode, unifyResultSettings); switch (statusCode) { // 处理 401 状态码 case StatusCodes.Status401Unauthorized: await context.Response.WriteAsJsonAsync(RESTfulResult(statusCode, errors: \"401 Unauthorized\") , App.GetOptions()?.JsonSerializerOptions); break; // 处理 403 状态码 case StatusCodes.Status403Forbidden: await context.Response.WriteAsJsonAsync(RESTfulResult(statusCode, errors: \"403 Forbidden\") , App.GetOptions()?.JsonSerializerOptions); break; default: break; } } /// /// 返回 RESTful 风格结果集 /// /// /// /// /// /// private static RESTfulResult RESTfulResult(int statusCode, bool succeeded = default, object data = default, object errors = default) { return new RESTfulResult { StatusCode = statusCode, Succeeded = succeeded, Data = data, Errors = errors, Extras = UnifyContext.Take(), Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() }; } } } 问题修复 修复 MVC 控制器启用规范化处理后返回 new Json({}) 对象为 null 问题 #I4354S 其他更改 更新 多语言底层设计,取消需要创建 Lang.cs 空类的要求 #I434YJ 更新 MiniProfiler 性能,减少不必要的监听","s":"v2.16(已发布)","u":"/docs/upgrade","h":"#v216已发布","p":3907},{"i":3958,"t":"新特性 新增 Db.GetDbRepository<定位器>() 静态方法 #I41MZP 新增 远程请求缺省序列化配置选项 #I41PBW 问题修复 修复 自动扫描接口进行依赖注入获取首个接口错误 bug #I41D1M 修复 IRepository 没有实现 IRepository 问题 #I41MZP 修复 远程请求缺省序列化 bug #I41PBW 修复 修复 AppDbContext.Tenant 多租户空异常问题 #I421DA 修复 Worker Service 多个 Worker 定时任务阻塞问题 82a79cc 修复 Jwt 自动刷新机制时区处理问题,主要针对国外用户 #I41UB1 82a79cc 其他更改 更新 系统启动性能,从 106M 减少到 84M 更新 大量底层代码,包大小从 391Kb 减少到 350Kb(不带注释版本仅 64Kb)","s":"v2.15(已发布)","u":"/docs/upgrade","h":"#v215已发布","p":3907},{"i":3960,"t":"新特性 新增 简易字符串模板功能,支持远程请求、数据库模块、日志模块、事件总线模块、定时任务模块、异常模块、数据校验模块 #I402BL 新增 404 状态码规范化默认处理 #I408F5 新增 定时任务 ISpareTimeWorker 声明方式支持异步方法 #I40KWR 新增 自动配置二级虚拟目录 !354 突破性变化 升级 框架依赖 SDK 为 .NET 5.0.8 版本 移除 Db.GetNewDbContext() 静态方法 #I400BK 移除 数据库模块时态表拓展支持 #I405HI 调整 IJsonSerializerProvider 接口参数,新增 inherit 参数 #I3ZQU5 调整 AppSettings 配置的 LogEntityFrameworkCoreSqlExecuteCommand 名称为 OutputOriginalSqlExecuteLog #I40VVE 问题修复 修复 Worker Services 定时任务边界值问题导致跳过单次任务 #I405NI 修复 Worker Services 独立发布后程序集扫描失效 bug #I3ZH3X 修复 远程请求如果配置了 Client 客户端但传入了空 RequestUrl 地址导致异常问题 #I40BC6 修复 规范化结果篡改非短路端状态码出现异常 bug #I408F5 其他更改 更新 App.GetServiceProvider(type) 解析服务性能 #I40KXN 调整 视图引擎保存成文件流默认缓存区大小,从 4096 提升至 8192 #I40KH5","s":"v2.13/v2.14(已发布)","u":"/docs/upgrade","h":"#v213v214已发布","p":3907},{"i":3962,"t":"该版本有多个破坏性更改,更新时请认真查看。 新特性 新增 App.Configuration.Reload() 拓展 #I3XYI8 新增 ISubscribeHandler 支持异步方法定义 #I3XYHJ 新增 app.UseUnifyResultStatusCodes() 可配置修改返回状态码 #I3VZQH 新增 远程请求添加默认 User-Agent 头 #I3W17C 新增 支持 Sql 高级代理切换数据库上下文定位器 #I3XFP6 #I3XDCR 新增 定时任务 CronFormat 自动识别 #I3Y7GT 新增 Sql 高级代理 拦截功能 #I3YHG4 新增 拦截远程请求所有异常处理 #I3YPDE 新增 远程请求配置 Timeout 超时时间 #I3YPPK 新增 新增 RSA 加密算法 #I3YZNU !345 新增 DataTable 和 DataSet 支持不指定强类型返回 #I3Z6RI 新增 Sql 字符串拓展方法设置 Timeout 超时时间 #I3ZKWF 新增 Sql 高级代理 [Timeout] 特性,设置超时时间 #I3ZKWF 突破性变化 移除 FakeDelete 假删除/软删除所有功能 #I3XKII 移除 移除 PBKDF2 加密算法 #I3Z0IO 调整 远程请求设置超时时间单位由 分钟 改为 秒 #I3YPPK 调整 IJsonSerializerProvider 接口参数,新增 inherit 参数 #I3ZQU5 调整 [NonAutomatic] 特性名称为 [Manual] #I3XKKX 调整 [NotChangedListener] 特性名称为 [SuppressChangedListener] #I3XKLZ 调整 [ManualSaveChanges] 名称为 [ManualCommit] #I3XKNP 调整 DbContext.TenantIdQueryFilterExpression 名称为 DbContext.BuildTenantQueryFilter #I3XKTB 调整 [SkipScan] 名称为 [SuppressSniffer] #I3XN5N 调整 [SkipProxy] 名称为 [SuppressProxy] #I3XN7O 优化 Sql 执行,性能提升 20% #I3W33U 问题修复 修复 动态 WebAPI 扫描控制器没有屏蔽没有注册的第三方控制器 #I3Y7TJ 修复 AppDbContext 设置 TablePrefix 无效: #I3Y57Q 修复 修复定时任务使用异步委托导致程序终止 bug #I3XVZ0 修复 事件总线一个 消息id 对应多个 Handler 只触发第一个#I3XYP0 修复 .ToPagedList() 分页方法传入小于或等于 0 的页码 #I3XNAN 修复 JSON 序列化默认 DateTimeOffset 异常 #I3XMOL 修复 继承 Serilog 日志在 Worker Service 生成重复日志 bug #I3WA0L !331 修复 粘土对象 动态添加 Clay 类型 bug #I3W9LW 修复 ValidationTypes.Numeric 校验数值类型正则表达式错误 #I3WADS 修复 数据库命令参数 DbParameter 的 Value 是 object 类型的时候且不指定 #I3YKM6 修复 Oracle 数据库存储过程 游标参数 报错问题 #I3ZBYE 修复 Worker Services 采用独立发布后无法执行问题 #I3ZH3X 修复 修复远程请求如果无返回值序列化异常问题 !348 其他更改 新增 支持 appsettings.json 等自定义配置文件中文命名 #I3YBFD 更新 远程请求配置命名客户端 BaseAddress 地址兼容处理 #I3YCRH 移除 框架无用代码、优化代码 更新 Furion 在 非 Web 环境下性能 文档变化 新增 会话和状态管理 文档 #I3YI3G 更新 远程请求、日志、数据库上下文、远程请求、Sql 高级代理文档 更新 配置文件 #I3Y2EV 问答答疑 答疑 dapper 多个数据源如何继承 #I3WUOI 答疑 关于 SpareTime 多次执行问题#I3XEQU 答疑 选项更改通知(热更新):数据库里的数据更改了如何通知选项进行改变? #I3XYI8 答疑 SaaS 多租户添加时无法获取租户Id #I3Y5CF 答疑 获取 _httpContextAccessor.HttpContext 为空#I3Y6BI 答疑 Ubuntu 中使用 App.Configuration 方法读取不到值 #I3Y74H 答疑 数据库上下文作用域问题 #I3YHXP 答疑 使用 UnitofWork 提交事务,可以提交成功,但是系统会有错误 #I3YIWU 答疑 数据库读写分离--非默认主库的从库随机该如何配置? #I3YVR7","s":"v2.10/2.11/2.12 (已发布)","u":"/docs/upgrade","h":"#v210211212-已发布","p":3907},{"i":3964,"t":"新特性 新增 应用全局未托管资源监听,并实现特定时机释放非托管资源 #I3VXAU 新增 不包含 EntityFramework.Core 版本的 Furion.Pure 包#I3VGW8 新增 swagger 支持设置多语言方式,设置的语言自动添加到 api 地址后面 #I3VDTD 新增 动态 WebAPI 支持 [FromRoute] 非必填(选填)参数设置 #I3VFIM 新增 动态 WebAPI 参数支持配置路由约束 #I3VFIR 新增 MD5 和 DESC 加密支持 大写 输出 #326 突破性变化 新增 Furion 所有包生成 .snupkg 包,支持开发阶段直接调试 Furion 所有包源码 #I3VFIX 调整 repository.BuildChange() 方法的返回值,多返回一个 IServiceScope 对象 #I3VX3D 调整 JWT 刷新 Token 方法 AutoRefreshToken 参数 days 改为 minutes #I3VXNB 问题修复 修复 App.GetOptionsSnapshot<> 从根服务解析异常 bug #I3VS2X 修复 修复远程请求如果出现异常,返回 Stream 为 null 导致异常的问题 #I3VSTU 修复 如果实体被跟踪后,无法执行删除操作 #I3W08P 其他更改 更新 运行时内存,实现请求结束自动释放未托管资源 #I3VXAU 文档变化 更新 App 静态类文档、远程请求文档、分表分库文档 问答答疑 答疑 动态 WebAPI,自定义根据方法名生成 [HttpMethod] 规则报错 #I3VKQG 答疑 InsertAsync 的时候提示 ID 为空 #I3VS7E 答疑 FirstOrDefault 自动过滤了 TanantId 字段 #I3W0VH 答疑 对方接口返回 HttpConnectionResponseContent 远程请求拿不到返回值 #I3W17C 答疑 查询方法 FindOrDefault 报错 #I3W830 答疑 SqlNonQuery 在 UnitOfWork 循环执行#I3W8WW 答疑 因 Swagger 配置问题,导致 Swagger 中不能自动携带 token 授权的问题 #I3W934 答疑 远程请求 SetBody 参数识别不了#I3WBM1 答疑 Scoped.Create 里执行 sql.SqlNonQuery() 或者 obj.insert() 问题#I3WB5O 答疑 调用函数或存储过程,怎么出参数据自定义对象?如 Oracle数据库的数组或记录 #I3W71W","s":"v2.9.0 (已发布)","u":"/docs/upgrade","h":"#v290-已发布","p":3907},{"i":3966,"t":"新特性 新增 throw Oops.On(\"异常消息\") 应用多语言支持 #I3UYC2 新增 Db.GetMSRepository() 获取主从库仓储静态方法 #I3UBSJ 新增 工作单元特性,支持静态类强制性开启共享事务 #I3S9N8 新增 EFCore 执行 sql 模式打印日志 #I3SE8X 新增 远程请求支持默认 HttpClient 配置 #I3SI17 新增 新增 短 ID 生成功能 #I3T7JP 新增 [SensitiveDetection] 支持配置替换敏感词汇 #I3THIA 新增 SpecificationDocumentBuilder.DocumentGroups 和 SpecificationDocumentBuilder.CheckApiDescriptionInCurrentGroup(currentGroup, apiDescription) 公开方法#I3UDSY 突破性变化 优化 自动扫描 .json 和 .xml 文件并加载到配置中的代码和规则,同时移除默认 .xml 文件加载,只保留 .json 文件 #I3UJ3L 优化 分布式连续 GUID 代码 #I3UBK0 调整 Scoped.CreateUnitOfWork 名称为 Scoped.CreateUow #I3SJPU 调整 JWTEncryption.Validate 返回值,支持返回 TokenValidationResult #I3S2ND 问题修复 修复 [DataValidation] 和 [SensitiveDetection] 多语言应用失效 #I3UH6U 修复 Scoped 系列方法异步出现 Task is cancel 情况 #I3SJF6 修复 Mysql 数据库的 ToPagedList 方法返回的结果进行遍历出现 MySqlConnection is aleady use 问题 #I3SJQ3 修复 tool/cli.psl 没有包含项目名称 #I3S1T6 修复 远程请求做上传文件时,没有传入 Body,程序直接跳过 #I3TKFH 修复 远程请求 multipart/form-data 内容分割符缺失 #I3TNO9 修复 远程请求代理拦截方式返回 HttpResponseMessage 问题 #I3V161 修复 repository.Database.SetCommandTimeout(600) 无法生效#I3VAQS 其他更改 更新 支持规范化结果中间件判断是否跳过规范化结果 #I3T2AA 调整 更新部分列 UpdateIncludeNowAsync 具有二义性 #I3RW9Q 更新 框架底层性能,大大减少内存占用和溢出情况,启动内存从之前 136M 下将到 86M 优化 删除无用代码,优化不规范命名等 文档变化 新增 Inject 说明文档 #I3TITA 更新 4.2.9 的示例代码文档,方法没有放在 class 中 #I3S9T5 修复 规范化结果 6.5.6 多分组排序图片引用错误 #I3UBOQ 更新 静态类 Scoped 文档 问答答疑 答疑 默认 MasterDbContextLocator 不随自定义的参数生成 #I3SDBB 答疑 事件总线中订阅处理程序类获取不到用户信息,这个正常吗 #I3SS0U 答疑 在有多租户过滤器的情况下,是否有一种方式查询全量的数据 #I3T0VI 答疑 mysql 使用 &\"tools/cli.ps1\" 页面化加载表结构失败 #I3T4F8 答疑 其他 Web 层的 Startup 优先执行 #I3T8IP 答疑 辅助角色服务实现建议 #I3T906 答疑 开启 easy connection 后同一内网地址浏览器可以正常访问,远程请求则无法访问#I3TA2U 答疑 scope.ServiceProvider.GetService不存在 #I3TQMV 答疑 能否在 WPF 项目中使用呢? #I3TMCC 答疑 Dapper 多个数据源 #I3TM9B 答疑 L.GetSelectCulture() 方法异常 #I3TQS4 答疑 循环中使用 IDGen.NextID() 得到的结果并不是连续的 #I3UAF6 答疑 模块化动态加载插件支持通配符匹配.dll #I3UDT8 答疑 MVC 模式,在 Controller 里快捷方式创建 View 页面出错 #I3UFGB 答疑 数据库迁移没有种子数据 #I3UI7G 答疑 SpareTimeAttribute 中 根据 Cron 表达式 自动匹配 Cron 表达式格式化方式 #I3UTKQ 答疑 使用 workService 集成 SqlSugar 报错 #I3V8HJ 答疑 sqlserver 2008 分页报错如何解决呢 #I3VF96","s":"v2.7.0/2.8.0 (已发布)","u":"/docs/upgrade","h":"#v270280-已发布","p":3907},{"i":3968,"t":"新特性 新增 虚拟文件服务,支持物理文件和嵌入资源文件 #I3RBR9 新增 读写分离/主从复制仓储 IMSRepository 和 IMSRepository 仓储,可进行随机或自定义获取从库 新增 数据脱敏处理 #I3R5ZF 突破性变化 移除 InsertOrUpdate 一系列数据库操作方法 #I3RI9L 移除 所有包含 Exists 单词的数据库操作方法 #I3RJ0T 调整 分布式 GUID IDGenerater 静态类名称为 IDGen #I3RGUA 问题修复 修复 远程调用方法错误,请求报文头 Headers 不能添加到 IHttpDispatchProxy 的子接口上 #I3RAF7 其他更改 更新 应用启动性能,减少内存分配 文档变化 新增 脱敏处理文档 #I3R6WZ 新增 文件系统文档、FS 静态类文档 #I3RCC4 更新 读写分离/主从复制、数据库仓储文档、Db 静态类 #I3R3B6 问答答疑 答疑 关于 Furion 集群部署 #I3R3J4 答疑 升级最新框架以后, 数据库生成模型报错 #I3R7TP 答疑 数据库上下文事务执行中,SaveNow 执行后有警告 #I3RAJI 答疑 Hangfire 使用事务出现错误 #I3ROQ5 答疑 如何实现 cli 不执行某些表的迁移,web 请求可以正常操作呢? #I3ROU5 答疑 在使用定时任务时候出现的问题:继承 ISpareTimeWorker #I3RRZS 答疑 MySql 时间差 8 小时处理 #I3RSCO 答疑 Db.GetRepository<> 方法结合 [UnitOfWork] 后不可用 #I3RUK5 答疑 事务开启失败问题 #I3RYJY 答疑 支持 DbProvider 可动态配置 #I3RYPE 答疑 WorkService 依赖注入 ISingleton 问题 #I3RZ1L 答疑 ISpareTimeWorker 运行期动态修改 #I3S33Q","s":"v2.5.0/2.6.0 (已发布)","u":"/docs/upgrade","h":"#v250260-已发布","p":3907},{"i":3970,"t":"新特性 新增 支持自动加载模块化/插件 .xml 注释文件 #I3Q7XY 新增 AppDbContext.FailedAutoRollback 属性,可配置事务是否自动回滚 #I3QOUS 突破性变化 升级 .NET 5 SDK 为 5.0.6 版本 新增 IJsonSerializerProvider.GetSerializerOptions() 接口方法 #I3QIJN 问题修复 修复 通过 services.AddInject() 方式注册,模块化/插件不加载 #I3Q7XH 修复 种子数据返回 null 报空异常 #I3QCM5 修复 通过 Clay.Object 创建粘土对象后属性变小写问题 #I3QRV3 其他更改 更新 Furion 框架底层性能,减少内存占用,提高应用初始化速度 92f8cc1 文档变化 更新 JSON 序列化文档、规范化结果文档、数据库上下文文档 问答答疑 答疑 InsertOrUpdateNowAsync 报错 #I3QKO5","s":"v2.4.0 (已发布)","u":"/docs/upgrade","h":"#v240-已发布","p":3907},{"i":3972,"t":"新特性 新增 Furion.Extras.DatabaseAccessor.MongoDB 拓展包支持 #I3PKST 新增 动态粘土类型直接转 object 或 dynamic 类型 #I3OY27 新增 新增 Oops.Retry 方法,支持设置方法调用失败进行重试 #I3PJKQ 新增 JWTSettings 配置节点 Algorithm,用于配置加密算法 #I3PQGV 新增 repository.EnsureTransaction() 方法确保工作单元事务有效 #I3PVF1 突破性变化 新增 支持 .NET 6.0.0 Preview 3 版本 #I3P2C7 问题修复 修复 使用数据库生成模型 tools/cli.ps1,从数据库表生成的实体异常 #I3PL18 修复 贴了 [NonUntify] 特性后,Swagger 的 Example Value 没有匹配正确 #I3PK0L 修复 SpareTimer.Tally 在 Cron 表达式中计数无效 #I3PWSE 其他更改 更新 框架默认序列化应该从配置中读取,而非手动编写 #I3P1SJ 更新 SqlSugar 拓展库,支持非泛型仓储获取上下文操作对象 #I3PK2N 更新 支持分布式内存缓存可配置化 #I3POKD 文档变化 文档 添加 JWTSettings 配置独立文档 #I3PQGW 问答答疑 答疑 软删除如果数据不存在,则报错 #I3PTVB 答疑 多个类集成测试会造成数据库定位器多次注册,无法运行所有测试,只能一个类一个类的运行 #I3PXGY","s":"v2.3.0 (已发布)","u":"/docs/upgrade","h":"#v230-已发布","p":3907},{"i":3974,"t":"新特性 新增 Clay 粘土类型,支持让 C# 创建一个弱类型对象并操作弱类型 #I3O2QQ 新增 新增 Scoped.Create 带返回值重载 #I3O47J 新增 支持 Scoped.Create() 一系列方法支持传入作用域工厂 #I3OAP5 新增 支持事件总线同步执行方式 #I3OAW2 新增 [DataValidation] 跳过空字符串和空值验证 #I3OGEN 新增 Worker Service 可配置是否自动注册 Worker #I3OLW4 突破性变化 问题修复 修复 定时任务设置 cancelInNoneNextTime: false 一次也不执行 #I3O3N0 修复 SpareTime 自定义下次执行时间出现空异常 #I3O46X 修复 MiniProfiler 设置为 false 时,数据库上下文提交拦截器未添加 #I3OAWX 修复 [Consumes(\"application/x-www-form-urlencoded\")] 和 ModelQuery 配置同时配置导致空引用问题 #I3ODUR 修复 在 Grpc 中使用 jwt 授权出现空异常 #I3OW3I 其他更改 更新 支持发布后代码精简配置,减少不必要的文件夹输出 #I3OAPF 更新 自动刷新 Token 机制,新增容错值处理,解决并发 Token 刷新失败问题 #I3OGYF 文档变化 新增 粘土对象文档 #I3OG18 问答答疑 答疑 动态 WebAPI 如何获取接收文件 #I3O29B 答疑 定时任务使用 Scope.CreateUow 引发的问题 #I3O2CD 答疑 单文件发布程序工作不正常 #I3O4D8 答疑 同时配置租户过滤器和软删除过滤器,最终的 sql 只生成了一种过滤条件 #I3OB0A 答疑 HTTP 重定向 HTTPS 后跨域失效 #I3OB8R 答疑 在 PostgreSql 数据库使用 rep.FirstOrDefault(u => u.Id == UserId); 引起异常 #I3O5OF 答疑 定时任务有时能触发有时不能触发 #I3ORBE","s":"v2.2.0 (已发布)","u":"/docs/upgrade","h":"#v220-已发布","p":3907},{"i":3976,"t":"新特性 新增 新增定时任务 ISpareTimeWorker 方式支持 [SpareTime(\"{配置路径}}] 方式 #I3NTUX 新增 定时任务支持异步委托 #I3NP96 新增 轻量级分布式连续 GUID 生成器 #I3NKLZ 新增 ClayObject 模块,处理 ExpandoObject 及 IDictionary 类型 #I3N3J4 新增 Scoped.CreateUow(handler) 创建作用域并自动提交数据库更改方法 #I3NU3G 突破性变化 调整 规范化结果接口 OnResponseStatusCodes 方法,新增 UnifyResultStatusCodesOptions 参数 #I3NDB9 移除 雪花 ID 实现代码 #I3NKLZ 问题修复 修复 Swagger 不能支持非 int 类型的枚举 #I3NQM8 修复 数据库线程池多线程并发问题 #I3NR4L 修复 自定义控制器路由后且为方法参数指定了 [ApiSeat] 后生成路由重复 #I3NRF6 其他更改 更新 支持应用启动的时候迁移种子数据 #I3NH3M 文档变化 新增 分布式 ID 生成文档 #I3B6CX 新增 新增模块化开发文档 #I3NSUS 更新 20.4 字符串拓展方式 > 错误ToAESDecrypt 写成了 ToToAESDecrypt # 问答答疑 答疑 有关【定时任务/委托】的疑问 #I3N3EW 答疑 统一返回格式支持自定义 #I3NU1G","s":"v2.1.0 (已发布)","u":"/docs/upgrade","h":"#v210-已发布","p":3907},{"i":3978,"t":"新特性 新增 控制台应用程序及 Worker Services 支持 #I3K4DG 新增 完整任务调度功能 #I3IRUX 新增 Cron 表达式解析 #I3IQ9Y 新增 支持 Swagger 自定义配置 swagger.json 地址模板 #I3IHMX 新增 支持配置动态 WebApi 区域 #I3IJAZ 新增 远程请求新增支持传入服务提供器 IServiceProvider #I3IVBL 新增 全局配置选型 SupportPackageNamePrefixs 配置,支持配置包前缀 #I3K0SN 新增 应用启动时支持 referenceassembly 类型程序集扫描 #I3K0SN 新增 依赖注入 AOP 拦截获取方法真实特性 #I3LZBX 新增 EFCore 手动 SaveChanges() 特性 #I3N01Y 新增 支持 Cors 跨域更多配置 #I3N2J0 突破性变化 优化 完整任务调度功能 #I3IRUX 优化 日志模块功能 #I3J2K0 优化 模板引擎功能 #I3J46E 优化 底层 EFCoreRepository 仓储 #I3J6W5 优化 sql 字符串拓展底层代码 #I3IVCE 优化 底层 SqlRepository 所有逻辑代码 #I3J6V6 优化 数据库实体拓展方法 #I3J609 调整 事件事件总线同步执行为异步方式执行 #I3J0WA 移除 框架底层 HttpContext.IsAjaxRequest() 拓展 #I3IVAA 移除 ValidationTypes.Required 验证 #I3KR85 问题修复 修复 关闭 InjectMiniProfiler 参数后内存缓存无效 #I3IHLR 修复 在多租户中调用 Tenant 属性出现偶然性数据库上下文被释放的情况 #I3IC70 修复 Sql 代理中如果返回基元类型抛出不能将 object 转换成对应类型的异常 #I3IC84 修复 存储过程多返回值的时候,outputvalues 的 name 不是定义的 MSG 的 name,是 Msg 类型。 #I3IC7Y 修复 PhoneNumber 手机号验证正则表达式错误 #I3ID10 修复 依赖注入 AOP 拦截无法捕获内部异常 #I3IGCC 修复 全局拦截标记异常已被处理后异常过滤器依然执行 #I3J463 修复 自定义全局异常拦截器不起作用 #I3K1SJ 修复 在 WorkerService 模式下,还是使用 WebHostEnvironment 来判断 Host 环境,会导致错误 #I3LCQY 修复 定时任务 DoOnce 抛空异常 bug #I3M0ZT 其他更改 更新 启动时程序集扫描类型 #I3K0SN 更新 App.GetConfig<>(\"key\") 不支持获取单个值问题 #I3ILF1 更新 UrlEncode 应该用 Uri.EscapeDataString() 而不是 HttpUtility.UrlEncode #I3ICTK 文档变化 新增 定位任务、后台任务文档 #I3JHHG 新增 辅助角色服务文档 #I3K5GN 更新 动态 WebAPI、规范化文档、数据库上下文文档 问答答疑 答疑 数据校验,自定义 ErrorMessage 无效问题 #I3ICL3 答疑 最新 issue 中新增的“新增常用的 JSON 序列化方法” 会导致 AOP 拦截异常 #I3I7VE 答疑 Furion.DatabaseAccessor.PrivateEntityBase 中的 TenantId 数据类型设置为 object #I3IQV6 答疑 有关异常拦截和处理的疑问 #I3IUFZ 答疑 DataValidation 在空值的情况下被忽略掉了#I3IWSM 答疑 日志文档没有更新 #I3J1DX 答疑 对于 webapi 简单类型参数,是否可以以 json 方式提交 #I3J18I 答疑 IUnifyResultProvider 实现中如果 UnifyModel 的 type 不是范型会报错 #I3JBXF 答疑 如何模块化开发新功能? #I3J7ZZ 答疑 建议增加微服务中间件的集成 #I3JTZQ 答疑 二级虚拟目录部署的 swagger 的 MiniProfiler js 报错 #I3IWLR","s":"v2.0.0 (已发布)","u":"/docs/upgrade","h":"#v200-已发布","p":3907},{"i":3980,"t":"新特性 新增 EFCore 5.0 支持 SqlServer 2005-2008 数据库 #I3HZZ6 新增 Sql 高级代理支持模板替换了 #I3HHWU #I3HH2T 新增 PBKDF2 加密 #I3HN7A 新增 常用的 JSON 操作方法 #I3HUYO 新增 所有解析服务的方法都支持传入 IServiceProvidier 参数 #I3HXEU 突破性变化 升级 .NET 5 SDK 至 5.0.5 版本 问题修复 修复 远程请求 application/x-www-form-urlencoded 自动被转码了 #I3HDPC 修复 ISqlDispatchProxy 调用带返回值的存储过程出错 #I3HISS 修复 多数据库工作单元异常无法回滚数据 #I3I2KN #I3HYN5 修复 Serilog 日志生成太多文件 #I3I2PN 修复 1.18.0 版本数据库连接池存在连接泄漏问题 #I3I5KO 修复 Sqlite 提示事务已完成异常 #I3I9F2 其他更改 更新 视图模板功能,默认支持可枚举泛型类型 #I3GYEE 更新 开发阶段 MiniProfiler 打印数据库相关信息 #I3I8VQ 更新 EFCore 5.0 未提供 Sqlite 数据库 DataAdapter 的支持 #I3I9FC 文档变化 更新 数据库上下文、多租户、仓储、日志、序列化等文档。 问答答疑 答疑 建议 MVC 模式下增加 Furion 的功能 #I3GY4R 答疑 数据库关联操作 #I3H5QP 答疑 1.17.5 版本 suagger 无法生成 swagger.json #I3HGPZ 答疑 Serilog 扩展+dll 启动与 swagger 的 MiniProfiler 冲突 #I3HWJM 答疑 Sql 高级代理返回 DataTable 时,结果为空取不到记录 #I3HUWG 答疑 Task.Run 操作数据库问题 #I3HZ9D","s":"v1.19.0 (已发布)","u":"/docs/upgrade","h":"#v1190-已发布","p":3907},{"i":3982,"t":"新特性 新增 Oracle 11 版本支持 #I3EVL5 新增 Mysql 官方包 MySql.EntityFrameworkCore 支持 #I3E6J1 新增 全局配置 WebApi 参数 [FromQury] 化 #I3EFYJ 新增 公开框架底层依赖注入扫描注册拓展 services.AddRisterTypes(types) #I3EIV3 新增 SqlSugar 工作单元特性 #I3EJO5 突破性变化 问题修复 修复 数据库上下文池一旦有上下文操作失败还数据库上下文出现二次提交数据库的问题 #I3EIJJ 修复 不同数据库命令参数前缀都添加了 @ 处理 #I3EBJP 修复 尝试修复事件总线线程安全问题 #I3EGSB #PR236 修复 HttpContextExtensions 的 SignoutToSwagger 方法无效 #I3EHNQ 修复 如果动态 WebApi 贴了 [ApiController] 特性后,导致路由参数重复生成 #I3EOQQ 修复 如果没有任何 webapi 控制器时,文档报错 #I3EVLB 修复 依赖注入泛型类型注册失败 #I3EX66 其他更改 调整 SqlSugar 拓展库仓储 Context 属性类型未 SqlSugarClient #I3EHXA 更新 刷新 Token 黑名单 Redis 中分组 #I3EQWO 更新 远程请求在请求拦截次发起二次请求导致异常问题 #I3ER71 更新 多租户默认缓存改为分布式缓存 #I3EXEU 文档变化 更新 数据库操作文档 #I3E84X 问答答疑 答疑 如何方便的获取 IDynamicApiController API 产生的 url 和 谓词 #I3ED17 答疑 Code First -执行命令 Add-Migration 遇到了问题 #I3EHD0 答疑 tools v1.16.0 无法生成实体,一直提示 Missing required argument . #I3ENZ8 答疑 Authorize 的 Logout 按钮,无法实时请空 token#I3EOF9","s":"v1.18.0 (已发布)","u":"/docs/upgrade","h":"#v1180-已发布","p":3907},{"i":3984,"t":"新特性 新增 动态 WebAPI 支持继承基类配置特性 #I3D5PX 新增 远程请求支持 multipart/form-data 内容类型处理 #I3D7KG 新增 字符串加密拓展 #I3DHBW 新增 新增远程请求可直接下载返回值内容转为 string 类型 #I3DIGR 新增 远程请求地址支持模板引擎 #I3D5Y8 新增 [DataValidation] 错误消息支持 string.Format 操作 #I3E08W 新增 远程请求 HttpRequestMessage 拓展方法 AppendQueries() 追加更多 query 参数拓展 #I3E3DI 突破性变化 调整 IRepository.AsAsyncEnumerable() 返回值 #I3DIQ1,调整为:rep.AsQueryable().ToListAsync() 问题修复 修复 数据验证失败后也打印了成功的字段 #I3CVBS 修复 远程请求配置 contentType 为 application/x-www-form-urlencoded 无效问题#I3CWBS 修复 远程请求无法打印完整的请求地址,比如配置了 HttpClient 之后 #I3CY42 修复 程序启动时排除默认配置文件算法不对,应该采用正则表达式匹配 #I3D9E7 修复 远程请求成功请求拦截不生效 #I3DOE4 修复 Dapper 拓展数据库切换为 oracle 时,系统找不到指定的文件 Oracle.ManagedDataAccess.Core #I3DYM3 其他更改 更新 获取 JWT token 信息支持配置 Token 前缀,如 Bearer #I3DJIV 更新 刷新 Token 黑名单存储方式,将内存缓存调整为分布式缓存 #I3DPBR 文档变化 调整 远程请求文档 #I3CPJO 问答答疑 答疑 LinqExpression.And 没有 2 个参数的方法 #I3CXKZ 答疑 异常信息 如何记录到数据库中:) #I3DDGO 答疑 无键实体选用 IEntityNotKey #I3DWRF 答疑 根据主键删除一条记录不成功,无错误信息 #I3DWWF 答疑 如何自定义接口返回格式 #I3DZN6 答疑 DynamicApiController 如何在运行时决定是否公开一个 Action #I3D5UL 答疑 Furion.DatabaseAccessor.DbHelpers 方法:ConvertToDbParameters 是不是应该过滤掉贴 NotMapped 的特性 #I3E2XS","s":"v1.17.0 (已发布)","u":"/docs/upgrade","h":"#v1170-已发布","p":3907},{"i":3986,"t":"新特性 新增 IDGenerator 雪花 ID 算法,感谢 idgenerator 作者提交 PR #PR204 #I3B60S 新增 DbContext 刷新多租户缓存拓展方法 #I39N5U 新增 自定义配置单个控制器名称规范,如小写路由 #I3A5XL 新增 获取当前选择区域语言方法 #I3BSDH 突破性变化 升级 .NET 5 SDK 至 5.0.4 版本 #I3ASTL 优化 远程请求所有功能 #I2LB7M 优化 JSON 序列化功能,提供统一的抽象接口,方便自由替换 JSON 库 #I39GT9 优化 验证失败返回消息模型及规范化接口验证参数 #I3AFQW 更新 插件式开发热插拔功能,实现动态加载卸载 #PR200, 感谢 @SamWangCoder 移除 移除 JsonSerializerUtility 静态类及移除属性大写序列化拓展配置 #I3AFRJ 问题修复 修复 MVC 模式下不支持验证自定义验证逻辑 #I39LM5 修复 验证数值类型正则表达式不支持负数 bug #I39YUV 修复 框架启动时无法加载未被引用的程序集 bug #I3A3Z4 修复 EFCoreRepository.IsAttached() 方法判断错误 bug #I3A824 修复 动态API 驼峰显示配置无效 bug #I3AF32 修复 cli.ps1 不支持新版本 EFCore bug #I3APO9 修复 EFCore 实体配置 [Table] 特性无效 bug #I3BAYH 修复 动态 WebAPI CheckIsSplitCamelCase bug #I3BLKX 修复 修复动态 WebAPI 配置保留 Action 的 Async 后缀无效问题 #I3C3DA 修复 JWT Token 刷新后旧的刷新 Token 依旧可用 bug #I3C8ZH 修复 多语言 Razor 视图变量多语言乱码问题 #I3CBMU 其他更改 更新 默认序列化提供器 System.Text.Json 反序列化字符串时区分大小写问题 #I3BSXV 更新 优化 MessageCenter 性能问题 #I39PRR 更新 数据库上下文池小性能优化 文档变化 新增 Docker 环境下自动化部署 #PR209 新增 JSON 序列化 文档 #I3B6D8 更新 跨域、安全授权、即时通信文档、多语言、规范化文档 问答答疑 答疑 Furion.Extras.DatabaseAccessor.SqlSugar 配置多个数据库打印 SQL 语句问题 #I39PDC 答疑 ORACLE 数据库多租户模式下返回值为指定类型时系统卡死 #I39RNH 答疑 假删除指向异常 #I39XZA 答疑 Furion 多语言配置节是放在 AppSettings 里面还是外面呢? #I3A4SB 答疑 没找到数据库上下文 #I3A5HS 答疑 有 QQ 交流群吗? #I3AAM7 答疑 Vue3 环境下配置 SignalR 跨域出错 #I3ALQ7 答疑 设置 Swagger 参数非必填 #I3AT02 答疑 EFCore 调用 Insert 时报 Unknown column 'Discriminator' in 'field list' 异常 #I3B2LC 答疑 逆向 mysql 数据库时 cli 出现错误 #I3B64F 答疑 Sql 高级代理使用过程中 DateTime 类型的参数序列化失败 #I3AZXK 答疑 使用 Mysql 执行 Add-Migration 报错 #I3B8EW 答疑 Saas 多租户模式-独立 Database 模式下无法获取 Tenant, 导致无法自动切换的问题#I3AVXU 答疑 如何自定义 WebAPI 统一结果模型 #I3BBYW #I3BBYV 答疑 在 Web.Entry 项目新建了一个 Controller,多了未知方法 #I3BKH5 答疑 AOP 拦截如何解析服务 #I3BUM3 答疑 动态 WebAPI 返回参数被省略 #I3C2XR 答疑 如何设置某一个接口响应数据不自动转小写,按原始字段名返回 #I38L9B 答疑 code first 如何配置自动迁移 #I3CCR0 答疑 webapi 混合授权如何区分不同系统 #I3CJCY 答疑 EFCore 不支持递归无限级遍历关系 #I3CET9","s":"v1.16.0 (已发布)","u":"/docs/upgrade","h":"#v1160-已发布","p":3907},{"i":3988,"t":"新特性 新增 跳过特定实体数据库操作监听特性 #I386LB 新增 IEntityChangedListener 增加对 OldEntity 的支持 #I385X2 新增 实时通信自动配置集线器拓展及特性 #I387QX 新增 Mapster 拓展支持 IMapper 依赖注入方式 #I38C7C 新增 [AppDbContext] 特性默认构造函数 #I38J97 新增 UnifyContext.GetExceptionMetadata(context) 返回错误码支持 #I38ONX 突破性变化 问题修复 修复 多次循环中调用 Db.GetNewDbContext() 还是获取到同一个对象 #I38NNP 修复 Swagger 过滤掉 object 类型属性问题 #I38FHL 修复 同一类不支持多继承 IEntityChangedListener 问题 #I38UQJ 修复 自定义序列化属性名称导致验证失败属性不匹配问题 #I38W8Z 其他更改 更新 代码不规范命名导致开发者阅读代码时产生歧义 文档变化 新增 FluentValidation 集成文档 #I38IOT 问答答疑 答疑 Furion 框架版本向下兼容问题 #I38WMZ","s":"v1.15.0 (已发布)","u":"/docs/upgrade","h":"#v1150-已发布","p":3907},{"i":3990,"t":"新特性 新增 EFCore 5.0 的 Oracle 数据库支持 #I37Z8E 新增 控制是否在开发环境下显示数据库连接信息 #I37YQ2 新增 [NonUnify] 支持在类中贴此特性 #I359Q6 新增 网络请求 字符串 HttpClient 拦截器 #I35F3E 新增 HttpContext 及 HttpRequest 获取远程地址拓展 #I3688Z 新增 services.AddMvcFilter<> 添加 Mvc 过滤器拓展 #I368BH 突破性变化 升级 框架依赖的 .NET 5 SDK 至最新版 5.0.3 #I37YQQ 升级 Swashbuckle.AspNetCore 组件包到 6.0.x 版本 #I37EZK 移除 Furion 框架 JWT 拓展类,只在 Furion.Extras.Authentication.JwtBearer 中保留 #I35D59 问题修复 修复 传入错误 JWT Token 字符串导致自动刷新 Token 出现字符串边界值异常 bug #I34ZE5 修复 瞬时作用域数据库上下文也会自动加入工作单元导致写日志时连锁异常 bug #I37WTV 其他更改 更新 获取系统环境参数的性能 #I36SR5 更新 Furion 底层添加 Mvc 过滤器代码 #I36SKA 更新 添加默认 Json 序列化时间默认时间格式 #I36SL0 升级 升级 SqlSugar 拓展包到 5.0.2.6 版本 #I36SIG 文档变化 新增 数据库入门文档 #I37Z8S 新增 更新日志文档 #I36PI0 新增 请求审计日志、执行 Sql 更新日志文档 #I36PIK 新增 前端使用 axios 跨域配置文档 #I36PIT 新增 App 静态类获取应用、环境更多信息数据 #I36SOV 新增 英文版 README.md 介绍 #I37QHP","s":"v1.14.0(已发布)","u":"/docs/upgrade","h":"#v1140已发布","p":3907},{"i":3992,"t":"新特性 新增 多语言功能及拓展 #I2DOCL 新增 事件总线功能及消息中心 #I23BKN 新增 Swagger 分组显示隐藏配置 #I2AHH8 新增 Furion.Extras.Logging.Serilog 拓展插件 #I2AAN8 新增 cli.ps 支持 -Namespace 命名空间指定 #I2A175 新增 Swagger 规范化化文档授权失效后自动取消授权锁 #I2AIWC 新增 Request.Body 支持重复读功能,主要解决微信 SDK 问题 #I2AMG0 新增 网络请求功能及文档 #I2APGJ 新增 SqlSugar 拓展包支持打印 sql 到 MiniProfiler 中 #I2ASLS 新增 Furion.Extras.DatabaseAccesssor.Dapper 拓展插件 #I2ASYA 新增 Furion.Extras.DatabaseAccessor.PetaPoco 拓展插件 #I2AUGA 新增 网络请求字符串拓展方法 #I2CPQ0 新增 SqlSugar 拓展新增 PagedList 拓展 #I2CW99 新增 远程请求支持参数特性验证 #I2CX5L 新增 App.User 获取当前授权用户信息便捷方法 #I2CZLO 新增 规范化文档可配置功能,支持 appsettings.json 配置 #I2D1K9 新增 远程请求拦截器添加方法和方法参数 #I2D2CM 新增 远程请求出错返回默认值支持 #I2D44M 新增 远程请求 body 参数序列化支持设置 PropertyNamingPolicy #I2D685 新增 远程服务接口客户端配置 #I2D7PS 新增 AddInject 和 UseInject 允许自定义 SecurityDefinitions 和 SwaggerUI #I2DIMG 新增 [SecurityDefine] 默认构造函数 #I2DNXT 新增 AspectDispatchProxy 动态代理类 #I2DO6I 新增 [QueryParameters] 特性,支持一键将 Action 参数添加 [FromQuery] 特性 #I2G8TF 新增 动态日志配置及拓展方法 #I2GDGD 新增 WebApi 请求谓词默认规则配置功能 #I2M70X 突破性变化 升级 .NET 5 SDK 到 .NET 5.0.2 版本 #I2D0PZ 调整 框架内所有拓展类命名空间,全部迁移到 Furion.模块.Extensions 下 #I2AH54 调整 Swagger 记住授权存储方式,替换 Session 存储方式为 LocalStorage 方式 #I2AKUA 调整 Furion 框架包描述文件,减少框架体积 #I2APAU 调整 App.CanBeScanTypes 为 App.EffectiveTypes #I2B0ZR 调整 App.ServiceProvider 属性并移除 App.GetDuplicateXXX 方法 #I2CYZE 调整 Db.GetDuplicateDbContext 为 Db.GetNewDbContext #I2CZ04 调整 Db.GetSqlDispatchProxy 为 Db.GetSqlProxy #I2DO9T 优化 Aop 服务拦截器,支持异步、同步两种方式 #I2B9HQ 优化 网络请求所有功能 #I2BMR7 问题修复 修复 Swagger 规范化化结果不一致 bug #I2ACF3 修复 数据库新增或更新忽略空值操作方法报空异常 #I2AB6C 修复 Startup.cs Aop 全局拦截无效 #I2A7T2 修复 Token 过期后自动刷新 Token 无法获取最新的用户信息 bug #I2AWQI 修复 [ApiDescriptionSettings(Tag=\"xx\")] 导致 swagger.json 报错 bug #I2B47R 修复 Mysql sql 数据库查询结果 tinyint 类型转换出错 bug #I2BEBM 修复 规范化结果多次包裹类型 bug #I2BHHZ 修复 动态 Api 基元类型数组问题 #I2BMS5 修复 sql 查询枚举类型转换异常 bug #I2BS2Y 修复 string.SqlQuerizeAsync() 拓展返回错误 bug #I2BSTS 修复 动态 Api 子类重写父类方法并取别名后 Swagger 异常 bug #I2C9VP 修复 网络请求 application/json 序列化大小写问题 #I2CRJC 修复 多数据库定位器实体嵌套关联 bug #I2CVN0 修复 跨域响应头设置无效 bug #I2CW5T 修复 远程网络请求代理打印到 MiniProfiler bug #I2CZBC 修复 远程请求响应拦截器 bug #I2D4DG 修复 SqlSugar 框架 AsQueryable() 一直追加参数 #I2DH1D 修复 自动刷新 Token 空异常 bug #I2DO29 修复 生成 JWT Token 不传过期时间出现验证 401 bug #I2DO8L 修复 AppStartup 排序无效 #I2DVD2 修复 未启用多语言服务时友好异常和验证出现空异常 #I2ECUJ 修复 数据校验字母和数字组合无法匹配 bug #I2EF2Q 修复 数据校验手机或固话无效 bug #I2M5IZ 修复 Dapper 拓展解析 SqlConnection 异常 bug #I2M5P2 修复 开启多语言后,EF 迁移异常 bug #I2M7DT 修复 IEntityTypeBuilder 不支持多重继承 bug #I2PAOD 修复 JwtHandler 设置自动刷新后,匿名访问无法通过 bug #I2SDOX 修复 Dapper 拓展中 SqlServer 数据库获取连接对象类型 bug #PR159 其他更改 更新 移除 Sql 查询结果映射检查 [NotMapper] 特性机制 #I34XD0 更新 依赖注入时排除 IDynamicApiController 接口 #I2ECTG 更新 MD5 加密性能 #PR158 文档变化 优化 文档首页 #I34XBR 新增 网络请求文档 #I2APGJ 新增 多语言文档 #I2DOCL 新增 文档全文搜索引擎 #I34XAW 新增 全局静态类类型 #I34XB4 新增 框架可配置选项文档 #I34XB9 新增 事件总线文档 #I34XBI 新增 数据加解密文档 #I34XC0 新增 贡献指南文档 #I34XC8 新增 HttpContext 及 文件上传下载 博客文章 #I34XCB 优化 文档小调整,小优化 问答答疑 答疑 跨域设置无效 #I2ASNJ 答疑 MVC 视图无效,原因是 .cshtml 文件没有设置为 内容 #I2AXUU 答疑 Sql 操作可以实现事务吗?#I2B0NX 答疑 IRepository 操作数据库会打开多次数据库连接 #I2BB7B 答疑 如何进入自定义 AppAuthorizeHandler 断点 #I2BGXY 答疑 SqlSugar 注入问题 #I2C2AQ 答疑 建议增加 API 签名验证,时效验证 #I2C6ET 答疑 多数据库多租户同时使用 Add-Migration 报错 #I2CEHS 答疑 ISqlSugarRepository 没有 Getxxx 方法 #I2CJLZ 答疑 cli.ps1 如何将 sql 里的表导出成 model 类 #I2CSUL 答疑 手动修改 Swagger 终结点路径无效 #I2D608 答疑 DefaultDbContext 不能识别 #I2DCZX 答疑 各分层项目 Startup.cs 支持 Configuration #I2DDUP 答疑 Aop 无法拦截,无效 #I2DEY8 答疑 mysql 执行 Add-Migration 报错 #I2DSB8\\ 答疑 Entity 创建时间和是否删除添加默认值 #I2E04H 答疑 swagger 中多个 servers 设置 #I2E0IF 答疑 全局筛选器 没有执行 #I2E5R4 答疑 多数据库定位器疑问 #I2E77T 答疑 cli.ps 逆向工程 Mysql 数据库报错 #I2E7I5 答疑 Swagger 开发环境 applicationsettings.json 中文乱码 #I2EAG1 答疑 增加指定路径程序集映射 #I2EEO2 答疑 动态编译 cs 脚本文件 #I2EH66 答疑 自定义中间件,返回的错误没有规范化结果 #I2NV8S 答疑 Swagger 循环引用设置生成文档层级无效 #I2PLQQ 答疑 配置文件支持 yaml 文件吗? #I2TJ3N 答疑 修改数据库未 mysql 执行 Add-Migration 报错 #I2VR64 答疑 多数据库使用定位器时报错 #I2VR8F 答疑 Migration To Oracle 异常 #I2WBYQ 答疑 开发时显示 Swagger,上线时关闭 Swagger,这需要怎么配置 #I2WOYV 答疑 兼容 Mvc 复杂验证没有试验成功 #I2X3GV 答疑 Aop 能不能支持无接口的类 #I2X8AS 答疑 关于 JWT Token 自动刷新问题 #I2YD4K 答疑 能否增加一个拓展的 Entity,增加一些拓展的属性 #I2YDKT 答疑 Furion 无法还原包,使用Nuget 下载和通过最新的的脚手架下载都提示这个问题 #I30446 答疑 复杂校验与特性验证不能并行 #I3046U","s":"v1.13.0(已发布)","u":"/docs/upgrade","h":"#v1130已发布","p":3907},{"i":3994,"t":"新特性 新增 Furion.Extras.ObjectMapper.Mapster 拓展包 #I29LSJ 新增 Furion.Extras.Logging.Serilog 拓展包 #I2AAN8 新增 Furion.Extras.Web.HttpContext 拓展包 #I29LSM 新增 内置 Token 刷新机制支持 #I29K57 新增 动态数据库上下文,支持运行时执行 OnModelCreating #I28UDT 新增 支持依赖注入排除指定接口 #I29693 新增 规范化结果返回时间戳字段 #I29697 新增 基础 CURD 父类操作例子 #I296SR 新增 sql.Change(\"定位器完整类型名称\") 支持 #I29LAB 新增 UpdateInclude 和 UpdateExclude 忽略空参数支持 #I29VUG 新增 数据库上下文内置假删除查询过滤器支持 #I29Y2R 新增 忽略空值排除默认时间格式 #I29VUV 升级 MiniProfiler 组件 #I297R9 突破性变化 调整 AppAuthorizeHandler 授权管道为异步处理 #I29MD9 调整 Swagger 默认启用 JWT 授权支持 #I29LI4 调整 HttpContextUtilities 名称改为 HttpContextLocal #I29KQE 调整 UnifyResultContext 名称改为 UnifyContext #I29LLZ 调整 只有执行迁移命令才扫描种子数据 #I29E6P 调整 规范化结果 Successed 属性名为 Succeeded #I29NMV 移除 Mapster 对象组件,采用提供拓展方式 #I29D2M 移除 CacheManager 拓展类 #I29LU1 优化 SaveChanges 拦截器 #I292LO 问题修复 修复 未注册的数据库上下文也被引用全局查询拦截器 bug #I29ZXJ 修复 手动返回 BadObjectResult 或 ValidationProblemDetails 结果类型时规范化结果失效 bug #I29ZU9 修复 动态 WebApi KeepName,KeepVerb、SplitCamelCase 无效 bug #I29X90 修复 Sql代理 返回 元组 类型出错 bug #I29SMV 修复 401,403 状态码规范化返回值属性变大写 bug #I29M8Y 修复 HttpContext 空异常 bug #I29LU4 修复 接口无返回值没有应用规范化结果 bug #I29GT7 修复 前端 Less 配置文件导致主机启动失败 bug #I29E7P 修复 执行 sql 结果转泛型后属性重复赋值 bug #I29BUO 修复 Swagger 关闭 MiniProfiler 之后 组中组 失效 #I29789 修复 未启用规范化结果时异常返回 System.Object 字符 #I2969A 修复 正数数据验证 0 也验证通过 bug #I2955T 修复 非泛型类集成泛型接口依赖注入 bug #I294YT 修复 Swagger 不支持 new 覆盖父类的 bug #I28Z1A 修复 JsonSerializerUtility 没有公开 bug #I28WMI 修复 SqlSugar 拓展查询泛型类型注册异常 bug #I28VMT 修复 Furion Tools 不支持生成不同命名空间的实体 bug #I2A175 修复 全局拦截器无效 bug #I2A7T2 修复 新增或更新忽略空值空异常 bug #I2AB6C 其他更改 更新 Token 生成加密算法 #I29KIH 文档变化 新增 日志文档 #I28Y9D 调整 数据库上下文、实体拦截器、配置、一分钟入门等等文档 问答答疑 答疑 Swagger 如何实现授权访问 #I294F2 答疑 如何实现多个数据库多对多实体配置 #I29G6S 答疑 动态 WebApi 支持文件上传吗 #I29R5E 答疑 多个数据库上下文无法生成迁移代码 #I2A6II","s":"v1.7.0(已发布)","u":"/docs/upgrade","h":"#v170已发布","p":3907},{"i":3996,"t":"新特性 新增 Furion 支持二级虚拟目录部署功能 #I28B77 新增 Furion.Template.RazorWithWebApi 脚手架 #I28QGI 新增 Furion.Template.BlazorWithWebApi 脚手架 #I27Z3O 新增 EFCore 时态查询拓展 #I28AJ 新增 [AppDbContext(连接字符串,数据库类型)] 配置支持 #I28QTB 新增 DateTimeOffset 转 DateTime 拓展方法 #I27MQA 新增 ValidationTypes 验证正则表达式智能提示 #I2801V 新增 ValiationTypes.WordWithNumber 验证 #I2805 新增 获取客户端和服务端 IP 地址 #I28QV9 突破性变化 升级 .NET 5.0 版本至 .NET 5.0.1 版本 #I28QU 优化 视图引擎功能,优化不规范命名和新增字符串模板编译 #I28G0S 优化 数据库实体查找算法,并优化性能 #I28QUQ 更新 应用启动初始化性能和数据库第一次自动配置 DbSet 性能 问题修复 修复 多数据库上下文配置定位器后实体无法正确生成 bug #I2888L 修复 多租户数据库上下文实体生成 bug #I2891G 修复 对象验证失败提示消息没有应用 JSON 大小写配置 bug #I27UTX 修复 仓储 Insert 或 Update 方法指定 ignoreNullValues 无效 bug #I27UN6 修复 Controller 派生类如果贴了 [Route] 特性后出现在 Swagger 中 bug #I27TN7 修复 SqlScalar 执行 sql 返回 Nullable 类型出现转换失败 bug #I27S2N 修复 [UnitOfWork] 特性异常 bug #I27MLM 修复 sql 静态执行方式和 sql 高级代理无法监听数据库连接状态 bug #I27M4F 修复 修复更换 Json 序列化库无效 bug,如替换为 Microsoft.AspNetCore.Mvc.NewtonsoftJson #I27M43 修复 Furion Tools 工具生成模型 bug #I27XI5 修复 软删除没有生效 bug #I2804I 修复 Furion Tools 识别带多个 \\\\ 的连接字符串识别 bug #I280TS,#PR91 修复 Furion Tools 无法取消生成 bug #I2816M 修复 DateTimeOffset 转本地时间差 8 小时 bug #I28BA9 修复 启用 bundle js&css 压缩后启动异常 bug #I28KR 修复 ValidationTypes.Required 无效 bug #PR98 修复 规范化结果OnValidateFailed 参数名拼写错误 bug #PR93,#PR92 修复 授权管道验证失败还显示结果 bug #PR89 其他更改 更新 README.md 友情连接地址 #PR88 更新 模板脚手架源码,添加 EFCore Tools 库 #PR87 更新 README.md Nuget 图标 #PR85 移除 将 List 转 DateTable #PR97 文档变化 新增 视图引擎模板文档 #I27ZVA 新增 EFCore 时态查询文档 #I28AJ, DOC 更新 仓储文档书写纰漏 bug #PR90 更新 选项文档错误 bug #PR86 更新 实体数据监听器 文档书写错误 bug #PR83 更新 数据库上下文、多数据库、脚手架等文档 问答答疑 答疑 希望 api 返回的值自动将 null 转为 '' 或 [] #I286IJ 答疑 添加网关功能 #I27TP7,【已关闭】 答疑 新增 SqlQuery 获取单条记录方法 #I28M1V 答疑 希望可以提供集成 Serilog 例子 #I282J4 答疑 如何通过特性配置唯一约束 #I2891L 答疑 怎么读取 appsettings.json 数组 #I27WU 答疑 IRepository 出现空异常 #I281IE 答疑 规范化接口问题问题 #I28NMZ 答疑 统一返回值模型中 OnResponseStatusCodes 未执行 #I28NNL","s":"v1.4.0(已发布)","u":"/docs/upgrade","h":"#v140已发布","p":3907},{"i":3998,"t":"新特性 新增 雪花算法 #I26OXG, #PR78 新增 [AppDbContext] 配置数据库提供器支持 #I27G3T 新增 实体表数据更改监听接口 IEntityDataChangedListener #I278DD, #I278LQ 新增 全局服务接口 AOP 拦截功能 #I278CP 新增 定位器仓储 IDbRepository #I276Q3 新增 数据库操作 InsertOrUpdate 支持排除空字符串功能 #I272OG 新增 数据库操作 UpdateInclude 和 UpdateExclude 匿名对象支持 #I271X0 新增 数据验证传入空对象跳过验证支持 #I273R4 新增 应用启动时支持排除特定配置文件自动加载 #I26U0A 新增 单个实体表名前缀支持 #I26LX0 新增 MySql 数据库自动配置默认版本号 #I26XQ6 更新 授权处理程序代码 突破性变化 新增 实体表数据更改监听接口 IEntityDataChangedListener #I278DD, #I278LQ 新增 全局服务接口 AOP 拦截功能 #I278CP 新增 雪花算法 #I26OXG, #PR78 问题修复 修复 视图引擎加载外部程序集出错 bug 修复 依赖注入代理接口报空对象异常 bug 修复 EFCore 取消附加实体出错 bug 修复 数据库仓储在非 Web 请求下出现空异常 bug 修复 多个授权策略共存问题出现无效 bug 修复 友好异常 Oop.Oh 不支持普通方法 bug 修复 获取多租户对象时数据库上下文出现作用域验证失败 bug 修复 工作单元不支持 Sql代理 拦截 bug #I27GST 文档变化 新增 实体数据监听器 文档 更新 一分钟入门、应用启动、官方脚手架、数据库操作指南、对象映射、规范化文档、异常处理、鉴权授权文档","s":"v1.2.0(已发布)","u":"/docs/upgrade","h":"#v120已发布","p":3907},{"i":4000,"t":"新特性 新增 Db.GetDbContext() 获取默认数据库上下文方法 新增 HttpContextUtility.GetCurrentHttpContext() 获取全局 HttpContext 上下文 新增 App.GetRequiredService<> 解析服务方法 新增 object.GetService<> 对象拓展方法 新增 策略授权 PolicyPipeline 基类方法,支持多重判断授权 新增 JWTEncryption.ValidateJwtBearerToken 手动验证静态方法 新增 全局数据库上下文 InsertOrUpdateIgnoreNullValues 和 EnabledEntityStateTracked 全局配置 新增 Swagger Jwt授权 全局授权参数 #I26GLR 新增 InsertOrUpdate 支持自定义判断条件功能 #I269Q1 新增 字符串字段小写命名支持 #I2695D 新增 字符串文本对比功能 #I268LE 新增 全局异常特性消息功能 #I2662O 新增 Insert 或 Update 数据库忽略空值功能 #I264Q4 突破性变化 调整 Fur 项目名为 Furion 调整 Db.GetRequestDbContext<>() 命名为 Db.GetDbContext<>() 调整 Db.GetDbContext<>() 命名为 Db.GetDuplicateDbContext<>() 优化 App.GetService<> 解析服务的底层逻辑,大大提高了解析服务的性能 优化 授权核心代码,保持和微软一致的授权规范 #I26DCB 移除 App.GetRequestService<> 方法 移除 ValidateJwtBearer Jwt 授权方法,无需手动判断了 问题修复 修复 Furion 官方脚手架生成后编译异常 bug 修复 Tenant 内置属性不是 virtual 修饰 bug 修复 dockerfile 新命名构建失败 bug 修复 自定义角色授权和多个授权共存出现 403 bug #I26H1L 修复 httpContext.GetEndpoint() 空异常 bug #PR73 修复 Oops.Oh 空异常和不支持服务抛异常 bug #I26EFU,#I26GM4 修复 cli.ps 生成文件编码乱码 bug #I26DVT 修复 Swagger 文件上传按钮不显示 #I26B6U 修复 规范化结果授权状态码序列化大小写不一致问题 #I26B26 修复 未启用规范化结果时中文乱码 bug #I268T5 修复 MySql 异步异常捕获不到 bug #I265SO 修复 cli.ps1 提示找不到数据库连接字符串 bug #I2647U 其他更改 优化 代码性能小优化和小调整 文档变化 更新 一分钟入门、安全鉴权、数据库等文档","s":"v1.1.0(已发布)","u":"/docs/upgrade","h":"#v110已发布","p":3907},{"i":4002,"t":"新特性 新增 Mvc 模板脚手架:Fur.Template.Mvc 新增 WebApi 模板:Fur.Template.Api 新增 Mvc/WebApi 模板:Fur.Template.App 新增 Razar Pages 模板:Fur.Template.Razor 新增 Blazor 模板:Fur.Template.Blazor 突破性变化 调整 PagedList 到 System.Collections.Generic 命名空间下 更新 解析服务性能问题,底层代码大量优化 问题修复 修复 ApiSears.ControllerEnd不起作用 bug #I25KH6 修复 RemoteRequest 请求完成结果序列化属性大小写问题 #I25I8R 修复 HttpContext.GetEndpoinet() 空异常 bug #PR73 文档变化 更新 入门文档、数据库上下文文档、多数据库操作文档","s":"v1.0.3(已发布)","u":"/docs/upgrade","h":"#v103已发布","p":3907},{"i":4004,"t":"新特性 新增 Pomelo.EntityFrameworkCore.MySql 最新 .NET 5 包配置 #I24ZQK 新增 .AddDateTimeJsonConverter(format) 时间格式序列化配置 新增 DateTime 和 DateTimeOffset 类型序列化格式配置 #I253FI 突破性变化 更新 Mapster 包至 7.0.0 版 调整 App.Services 名为 App.ServiceProvider 移除 App.ApplicationServices 和 App.GetRequestService<>() 移除 非 Web 主机注入拓展 问题修复 修复 services.AddFriendlyException() 缺少配置注入 bug 修复 数据库上下文池被释放和高并发下内存溢出 bug #I2524K,#I24UMN 修复 Sql代理 返回空数据时异常 bug #I24TCK 修复 工作单元 [UnitOfWork] 多数据库被释放 bug #I24Q6W 其他更改 调整 EntityBase 和 Entity 所有属性为 vitural 修饰 更新 Jwt 读取和解析性能 更新 优化代码支持 C# 9.0 最新语法 更新 MD5 加密性能 #PR71 移除 无用或未使用代码 文档 更新 数据库上下文、多数据库、一分钟入门文档","s":"v1.0.2(已发布)","u":"/docs/upgrade","h":"#v102已发布","p":3907},{"i":4006,"t":"新特性 新增 网络请求 RemoteRequest 组件 #I1YYWD 新增 .AddInjectBase() 注入,只包含基础服务注入 新增 所有服务都支持 IServiceCollection 和 IMvcBuilder 注入 新增 抛异常状态码设置功能 StatusCode 新增 Swagger 序列化支持 Pascal 属性命名方式 突破性变化 更新 所有的包为 .NET 5 正式版 问题修复 修复 SqlProxy 代理异步处理 bug 修复 数据库类型 Datetime 转 DateTimeOffset bug 修复 属性首字母大小写序列化不匹配出现 null bug 修复 对象序列化中文出现乱码 bug 修复 默认序列化配置无效 bug 修复 数据库非依赖注入方式提交无效 bug 修复 应用程序池提交所有 DbContext 空异常 bug 修复 Saas 多租户 Tenant 类型字符串属性在 MySql 数据库下出现 longtext 类型 bug 修复 Mvc 自动验证字符串空值 bug #I24M2T 修复 枚举注释被覆盖 bug #I24N6J 修复 忽略规范化结果无效 bug #I24B8P 修复 Swagger 默认 ContentType 不是 applicaiton/json bug #I24F3U 修复 内置 System.Text.Json 和 Newtonsoft.Json 冲突 bug #I24F3U 其他更改 调整 Fur 框架域名为:https://furion.icu 调整 仓储 FromSqlRaw 和 FromSqlInterpolated 接口位置 更新 数据加解密性能,#PR70 文档 更新 README.md、框架介绍、数据库上下文、配置选项、多租户、跨域文档","s":"v1.0.0(已发布)","u":"/docs/upgrade","h":"#v100已发布","p":3907}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/3",[0,1.273,1,3.176,2,3.603,3,1.997,4,1.574,5,3.176,6,1.37,7,3.696,8,3.255,9,2.44,10,5.097,11,3.284,12,2.071,13,4.868,14,5.097,15,4.491,16,5.097,17,5.097,18,2.324,19,0.984,20,1.692,21,2.341,22,3.01,23,4.134,24,4.646,25,3.91,26,1.726,27,1.92,28,1.55,29,5.489,30,1.968,31,3.313,32,2.903,33,1.901,34,3.376,35,2.6,36,2.903,37,2.832,38,2.431,39,3.83,40,4.072,41,2.301,42,3.147,43,4.535,44,4.027,45,2.716,46,3.603,47,1.832,48,4.646,49,2.316,50,5.405,51,3.202,52,7.935,53,1.94,54,3.202,55,9.697,56,4.874,57,4.954,58,9.004,59,7.708,60,1.667,61,2.48,62,2.16,63,4.839,64,5.097,65,5.097,66,2,67,2.566,68,4.072,69,1.802,70,3.151,71,3.444,72,1.859,73,2.07,74,3.648,75,3.255,76,1.547,77,2.921,78,3.176]],["t/5",[22,2.955,37,3.046,38,2.614,72,2.964,79,8.752,80,4.657,81,4.246,82,3.831,83,3.381,84,4.574,85,3.58,86,8.482,87,5.105,88,1.977,89,3.954,90,5.236,91,4.689,92,4.059,93,4.811,94,7.407,95,5.893,96,4.038,97,5.55,98,3.168,99,3.604,100,5.147,101,7.407,102,5.744,103,4.021,104,6.258,105,7.161,106,5.611,107,6.957]],["t/7",[22,2.968,37,3.067,38,2.632,72,2.984,80,4.69,81,4.275,82,3.857,83,3.405,84,4.606,85,3.604,86,8.509,87,5.14,88,1.991,89,3.971,90,5.272,91,4.704,92,4.077,93,4.844,94,7.458,95,5.934,96,4.066,97,5.589,98,3.19,99,3.629,100,5.183,101,7.458,102,5.784,103,4.049,104,6.302,105,7.211,106,5.65,107,7.005]],["t/9",[19,1.517,22,2.223,37,2.944,38,2.527,86,8.345,87,4.934,89,4.298,90,5.061,91,4.151,92,3.971,108,4.027,109,2.844,110,3.35,111,4.447,112,5.424,113,3.556,114,6.211,115,2.203,116,3.382,117,5.106,118,3.112,119,4.784,120,5.365,121,5.154,122,3.562,123,9.697,124,5.696,125,3.371,126,6.275,127,4.027,128,5.95,129,7.855,130,6.922]],["t/11",[0,1.416,4,1.258,19,1.514,20,1.426,22,3.659,23,2.228,25,2.107,26,3.259,27,1.534,28,1.238,30,1.061,47,1.464,60,1.332,66,0.905,72,1.485,83,1.695,86,5.766,88,0.991,91,3.188,93,2.411,98,1.588,99,1.806,109,1.021,113,1.844,125,1.748,131,0.913,132,2.601,133,3.589,134,3.192,135,1.776,136,3.563,137,4.097,138,5.099,139,9.084,140,1.831,141,3.712,142,2.725,143,2.216,144,2.879,145,2.994,146,3.563,147,2.812,148,1.99,149,3.712,150,2.069,151,3.038,152,2.994,153,1.884,154,2.624,155,1.877,156,3.038,157,3.866,158,3.866,159,2.538,160,1.982,161,5.45,162,2.306,163,3.399,164,3.466,165,2.648,166,2.395,167,2.812,168,3.745,169,3.721,170,1.966,171,4.073,172,3.085,173,5.613,174,1.538,175,4.073,176,2.648,177,3.589,178,3.322,179,3.866,180,3.399,181,2.128,182,2.216,183,1.7,184,2.138,185,1.95,186,2.462,187,2.306,188,2.953,189,3.399,190,3.192,191,4.073,192,3.085,193,1.592,194,4.073,195,2.182,196,4.015,197,4.149,198,4.073,199,4.073,200,4.073,201,4.073,202,4.073,203,4.073,204,4.073,205,4.073,206,4.073,207,4.073,208,4.073,209,4.073]],["t/13",[19,1.97,22,3.613,27,4.643,37,2.386,60,2.083,71,4.302,72,2.322,80,3.649,84,4.991,86,6.518,89,3.357,91,3.604,92,3.447,93,3.769,99,2.823,135,2.777,139,9.448,174,3.853,210,4.177,211,3.294,212,3.583,213,5.616,214,6.366,215,3.649,216,4.396,217,5.086,218,1.986,219,3.483,220,6.366,221,5.764,222,3.906,223,4.259,224,4.616,225,2.345,226,5.44,227,2.482,228,2.529,229,3.294,230,2.1,231,2.468,232,4.823]],["t/15",[35,3.062,66,1.521,69,2.421,92,3.624,110,2.921,115,1.921,122,2.388,131,1.536,193,2.677,215,3.925,233,6.118,234,4.628,235,5.471,236,3.95,237,6.501,238,4.677,239,8.469,240,8.216,241,3.292,242,4.2,243,3.878,244,2.987,245,6.501,246,5.863,247,6.035,248,5.863,249,6.035,250,5.035,251,6.501,252,3.432,253,6.007,254,6.761,255,4.729,256,4.677,257,8.216,258,7.605,259,4.758,260,6.301,261,7.493,262,4.593,263,5.955,264,8.498,265,6.242,266,4.783,267,3.631,268,5.715]],["t/17",[35,3.08,66,1.539,69,2.45,92,2.694,110,2.955,115,1.943,122,2.416,131,1.554,193,2.708,215,3.971,233,4.546,234,4.683,235,5.535,236,3.996,237,6.578,238,4.732,239,8.52,240,8.282,241,3.331,242,4.226,243,3.923,244,3.011,245,6.578,246,5.932,247,6.106,248,5.932,249,6.106,250,5.094,251,6.578,252,3.473,253,6.055,254,6.815,255,4.785,256,4.732,257,8.282,258,7.665,259,4.796,260,6.351,261,7.538,262,4.63,263,6.003,264,8.566,265,6.316,266,4.84,267,3.674,268,5.782]],["t/19",[20,1.059,22,1.338,27,1.781,41,2.216,44,2.52,53,1.8,56,2.559,66,1.05,69,1.672,76,1.435,88,1.15,90,3.046,92,1.838,99,2.097,100,2.994,109,1.185,131,1.06,215,2.71,218,2.228,223,3.163,227,1.843,235,3.777,236,4.119,238,5.88,239,3.777,240,6.294,242,1.873,244,2.288,250,5.251,252,2.37,254,3.428,261,3.342,263,3.02,269,3.706,270,2.076,271,4.488,272,2.446,273,4.309,274,9.01,275,3.641,276,3.229,277,5.599,278,2.71,279,9.593,280,6.51,281,3.777,282,4.488,283,6.51,284,3.945,285,4.728,286,3.265,287,5.961,288,4.047,289,5.411,290,5.826,291,3.384,292,9.593,293,3.02,294,2.203,295,4.932,296,2.036,297,4.309,298,2.946,299,2.78,300,4.488,301,3.302,302,2.37,303,4.047,304,1.668,305,4.728,306,2.31,307,2.083,308,2.14,309,1.944,310,1.863,311,6.115,312,5.322,313,7.156,314,3.342,315,2.098,316,2.424,317,1.763,318,10.331,319,3.641,320,2.792,321,3.856,322,1.998,323,2.858,324,5.049,325,2.391,326,3.777,327,3.428,328,2.601,329,2.482,330,5.092,331,4.989,332,3.856,333,2.482]],["t/21",[19,1.938,37,2.867,38,2.461,73,2.751,84,4.306,113,3.464,127,3.922,225,4.128,242,4.714,259,6.072,308,3.464,310,3.015,317,2.853,334,8.24,335,4.412,336,5.693,337,6.549,338,2.146,339,5.942,340,2.737,341,3.428,342,3.171,343,3.801,344,5.996,345,5.827,346,3.959,347,6.384,348,4.119,349,2.038,350,3.37,351,6.24,352,1.993]],["t/23",[19,1.964,37,2.925,38,2.51,73,2.786,84,4.392,113,3.533,127,4,225,4.167,242,4.751,259,5.774,308,3.533,310,3.075,317,2.91,336,5.748,337,6.68,338,2.188,339,6,340,2.791,341,3.496,342,3.212,343,3.877,344,6.116,345,5.883,346,4.038,347,6.511,348,4.201,349,2.079,350,3.437,351,6.364,352,2.032]],["t/26",[19,1.945,73,2.761,88,2.451,242,3.993,259,6.085,308,4.562,310,3.971,338,2.826,353,7.212,354,7.212,355,4.257]],["t/28",[0,1.069,19,1.724,30,2.326,39,3.434,41,2.063,45,3.209,66,2.462,73,2.446,88,2.172,211,4.62,242,3.538,258,9.038,259,5.654,310,3.518,338,2.504,350,3.933,351,9.038,356,2.632,357,2.583,358,3.946,359,4.456,360,9.486]],["t/30",[53,4.609,242,4.098,259,6.179,310,4.075,339,5.484,340,3.7,349,2.755]],["t/32",[0,1.249,93,6.177,212,5.873,259,5.324,315,3.065,349,2.779,356,3.076,361,4.627]],["t/34",[41,2.477,259,5.47,362,8.12,363,9.77,364,10.72]],["t/36",[259,5.572,365,9.952,366,5.761]],["t/38",[259,5.624,367,10.463]],["t/40",[41,2.812,259,6.21,368,8.51,369,10.434,370,8.932,371,10.434]],["t/42",[41,2.812,259,6.21,368,8.51,370,8.932,372,9.51,373,10.434]],["t/44",[0,1.409,4,3.635,84,4.772,218,3.347,225,3.951,374,7.075,375,5.415,376,4.921,377,5.089,378,4.473,379,5.563,380,5.968,381,5.116,382,7.582,383,5.33,384,7.471,385,7.471,386,4.092,387,6.645,388,4.614,389,6.915,390,3.21,391,5.729,392,4.177]],["t/46",[4,2.779,26,3.047,60,2.943,62,3.813,76,2.73,170,4.342,218,2.807,225,3.314,233,7.305,381,5.309,382,6.359,383,4.47,392,4.432,393,8.2,394,4.36,395,7.187,396,5.29,397,5.747,398,5.964,399,6.815,400,4.819,401,4.396,402,8.541]],["t/48",[0,1.314,4,3.391,26,2.978,47,3.946,80,5.041,89,3.33,120,6.007,121,5.771,128,9.494,218,3.91,388,4.786,389,7.174,403,4.866,404,5.57,405,4.468,406,5.242,407,3.861,408,6.953,409,2.738]],["t/51",[4,3.324,6,1.895,20,2.13,26,2.389,60,2.307,62,2.989,76,2.141,103,3.49,115,1.978,125,3.027,168,6.774,169,6.729,170,3.404,211,3.65,218,2.968,225,2.598,233,4.628,308,3.193,378,3.721,381,3.364,382,8.501,383,3.505,392,3.475,399,5.343,406,4.205,408,4.467,410,4.094,411,7.325,412,5.521,413,3.097,414,5.753,415,4.505,416,6.216,417,6.696,418,6.696,419,6.429,420,6.216,421,6.696,422,6.696,423,5.432,424,5.186,425,3.008,426,2.706,427,4.818,428,4.296,429,3.599]],["t/53",[0,1.228,3,4.021,37,2.964,47,2.842,89,2.994,110,3.372,170,3.816,218,3.992,244,3.287,299,4.65,307,3.483,349,2.106,388,4.303,389,9.288,390,4.312,398,5.495,410,4.59,430,2.549,431,6.498,432,4.889,433,4.928,434,4.747,435,5.99,436,5.899,437,2.927,438,4.4,439,5.589,440,5.66,441,6.599,442,7.507]],["t/55",[76,3.253,434,6.434,443,6.847,444,4.888,445,7.881]],["t/57",[0,1.4,4,3.611,84,4.704,218,3.316,225,3.915,374,6.974,375,5.338,377,5.017,379,5.484,380,5.914,381,5.069,382,8.263,384,7.365,385,7.365,386,4.033,387,6.551,388,4.548,391,5.648,392,4.117,446,6.436,447,5.484,448,4.985,449,8.358,450,4.388]],["t/60",[4,2.779,26,3.047,60,2.943,62,3.813,76,2.73,170,4.342,218,2.807,225,3.314,233,7.305,381,5.309,382,6.359,392,4.432,393,8.2,394,4.36,395,7.187,396,5.29,397,5.747,398,5.964,399,6.815,400,4.819,401,4.396,402,8.541,448,3.837]],["t/62",[4,3.324,6,1.895,20,2.13,26,2.389,60,2.307,62,2.989,76,2.141,103,3.49,115,1.978,125,3.027,168,6.774,169,6.729,170,3.404,211,3.65,218,2.968,225,2.598,233,4.628,308,3.193,378,3.721,381,3.364,382,8.501,390,2.671,392,3.475,399,5.343,406,4.205,408,4.467,410,4.094,411,7.325,412,5.521,414,5.753,415,4.505,416,6.216,417,6.696,418,6.696,419,6.429,420,6.216,421,6.696,422,6.696,423,5.432,424,5.186,425,3.008,426,2.706,427,4.818,428,4.296,429,3.599,448,3.008]],["t/64",[0,1.197,3,3.918,37,2.849,47,2.732,89,2.878,110,3.242,170,3.668,218,3.949,244,3.203,299,4.47,307,3.348,349,2.025,382,7.896,388,4.136,398,5.355,410,4.412,430,2.45,431,6.332,432,4.699,433,4.736,434,4.563,435,5.758,436,5.67,437,2.813,438,4.229,439,5.373,440,5.44,441,6.343,442,7.216,448,4.764,449,11.172,450,5.865]],["t/66",[76,3.253,434,6.434,443,6.847,444,4.888,445,7.881]],["t/68",[0,1.409,2,5.992,4,3.635,84,4.772,218,3.347,225,3.951,374,7.075,375,5.415,377,5.089,379,5.563,380,5.968,381,5.898,382,7.582,384,7.471,385,7.471,386,4.092,387,6.645,388,4.614,389,6.915,391,5.729,392,4.177,409,2.64,451,6.422]],["t/70",[4,2.779,26,3.047,60,2.943,62,3.813,76,2.73,170,4.342,218,2.807,225,3.314,233,7.305,381,5.766,382,6.359,392,4.432,393,8.2,394,4.36,395,7.187,396,5.29,397,5.747,398,5.964,399,6.815,400,4.819,401,4.396,402,8.541]],["t/72",[0,1.314,4,3.391,26,2.978,47,3.946,80,5.041,89,3.33,120,6.007,121,5.771,128,9.494,218,3.91,388,4.786,389,7.174,403,4.866,404,5.57,405,4.468,406,5.242,407,3.861,408,6.953,409,2.738]],["t/75",[3,2.764,4,3.324,6,1.895,20,2.13,26,2.389,60,2.307,62,2.989,76,2.141,103,3.49,115,1.978,125,3.027,168,6.774,169,6.729,170,3.404,211,3.65,218,2.968,225,2.598,233,4.628,308,3.193,378,3.721,381,4.536,382,8.501,392,3.475,399,5.343,406,4.205,408,4.467,410,4.094,411,7.325,412,5.521,414,5.753,415,4.505,416,6.216,417,6.696,418,6.696,419,6.429,420,6.216,421,6.696,422,6.696,423,5.432,424,5.186,425,3.008,426,2.706,427,4.818,428,4.296,429,3.599]],["t/77",[0,1.228,3,4.021,37,2.964,47,2.842,89,2.994,110,3.372,170,3.816,218,3.992,244,3.287,299,4.65,307,3.483,349,2.106,388,4.303,389,9.288,398,5.495,409,3.546,410,4.59,430,2.549,431,6.498,432,4.889,433,4.928,434,4.747,435,5.99,436,5.899,437,2.927,438,4.4,439,5.589,440,5.66,441,6.599,442,7.507]],["t/79",[76,3.253,434,6.434,443,6.847,444,4.888,445,7.881]],["t/81",[103,5.162,225,3.843,452,4.983,453,5.505,454,7.671,455,8.336]],["t/83",[88,2.561,338,2.952,456,9.994,457,6.365,458,10.528,459,6.232,460,8.785]],["t/85",[0,1.167,5,3.651,8,5.341,19,1.131,38,1.885,83,2.438,84,3.298,98,4.145,103,4.824,183,2.445,225,3.591,299,3.445,322,2.475,348,3.155,356,2.875,358,2.589,393,5.34,448,4.158,452,4.112,457,3.542,461,6.31,462,6.31,463,6.31,464,2.99,465,6.31,466,4.046,467,2.99,468,3.595,469,3.844,470,5.859,471,6.31,472,5.859,473,6.31,474,3.4,475,7.169,476,9.257,477,7.158,478,6.82,479,5.859,480,6.31,481,3.4,482,5.562,483,6.31,484,6.31,485,6.31,486,3.091,487,5.859,488,3.844,489,6.31,490,5.859,491,6.31,492,6.31,493,6.31,494,4.592,495,6.31,496,3.26,497,4.046,498,5.015,499,6.31,500,5.859,501,6.31,502,5.859,503,8.362,504,4.68,505,6.31,506,5.015,507,6.31,508,6.31,509,6.31,510,5.015,511,6.31,512,4.779]],["t/87",[0,1.435,60,3.921,513,9.649,514,4.987,515,7.699,516,8.481,517,10.164,518,5.234]],["t/89",[0,1.483,60,4.052,61,4.625,62,4.88,519,6.444,520,5.517,521,7.175,522,6.893,523,7.486,524,7.451,525,7.451]],["t/91",[0,1.642,4,1.766,140,4.324,145,6.04,149,7.489,316,1.94,322,2.415,333,3.001,361,5.521,407,5.726,430,1.843,526,3.456,527,4.48,528,6.564,529,6.856,530,6.129,531,6.564,532,4.68,533,7.698,534,5.037,535,5.21,536,3.384,537,5.716,538,5.037,539,5.003,540,6.129,541,6.44,542,6.224,543,7.526,544,5.341,545,5.161,546,4.893,547,4.48,548,3.046]],["t/93",[0,1.594,4,2.547,20,1.286,53,3.138,148,5.675,307,3.632,322,3.483,430,2.658,431,3.638,440,9.413,526,4.984,532,3.272,539,7.455,549,7.541,550,6.931,551,6.246,552,10.005,553,7.515,554,9.944,555,7.515,556,3.579]],["t/95",[6,1.862,7,5.024,8,6.003,38,2.229,43,4.159,47,2.491,76,2.103,77,3.971,89,2.624,103,5.277,109,1.736,111,3.923,131,1.554,225,2.552,243,3.923,294,3.229,349,1.846,356,2.043,381,3.304,383,3.443,404,4.388,407,3.042,430,2.234,466,4.785,486,3.656,514,3.911,557,5.932,558,7.463,559,6.929,560,6.929,561,7.463,562,4.225,563,4.22,564,8.566,565,4.546,566,6.316,567,3.751,568,6.578,569,6.578,570,2.753,571,5.932,572,4.732,573,6.106,574,6.929,575,7.463,576,4.464,577,4.546,578,5.723,579,6.929,580,4.464,581,6.316,582,7.463,583,4.635,584,6.316,585,3.855,586,5.932,587,5.932,588,5.431]],["t/98",[0,1.317,20,1.649,38,2.369,110,3.14,111,5.543,118,2.917,192,5.578,348,3.965,350,3.243,410,4.273,481,4.273,514,3.064,562,5.269,563,4.484,565,4.831,566,6.711,586,6.303,589,7.93,590,7.93,591,5.299,592,5.771,593,5.029,594,5.143,595,5.543,596,5.578,597,6.303,598,4.389,599,6.711,600,7.363,601,3.582,602,2.544,603,7.93,604,7.93,605,6.006,606,4.518,607,6.303,608,5.492,609,6.144,610,6.144,611,6.303,612,3.866,613,4.42,614,2.803,615,3.612,616,2.274,617,2.217,618,4.703]],["t/100",[168,5.925,169,5.886,225,4.392,390,3.816,397,6.436,409,3.137,411,7.76,412,5.848,448,4.297,619,4.844,620,8.88]],["t/102",[9,3.687,16,7.701,17,7.701,40,6.152,92,2.994,380,4.284,541,6.036,616,3.115,621,3.826,622,4.168,623,5.053,624,5.93,625,10.084,626,8.293,627,6.036,628,7.638,629,10.86,630,10.86,631,10.86,632,4.761,633,4.36,634,7.701,635,6.152,636,4.498,637,8.293,638,5.511,639,6.152,640,4.919,641,6.152,642,6.592,643,7.31,644,4.469,645,7.31,646,7.019,647,8.293,648,5.443,649,7.701,650,5.443,651,8.293,652,4.559,653,4.309,654,8.293]],["t/104",[0,1.094,135,3.985,168,5.373,169,5.337,182,4.972,294,4.258,410,5.303,411,7.036,412,5.303,591,4.946,619,4.392,655,8.052,656,6.701,657,9.84,658,3.382,659,6.625,660,6.112,661,4.684,662,7.036,663,4.999,664,4.108]],["t/106",[0,1.339,72,3.306,89,3.433,115,2.543,167,6.261,423,6.982,444,4.134,665,6.763,666,7.395,667,6.065,668,6.763,669,8.607,670,5.563,671,8.264,672,3.879,673,5.695,674,9.067,675,10.124,676,5.331,677,7.395,678,7.566,679,8.607]],["t/108",[0,1.196,20,2.237,155,4.605,164,5.437,308,4.523,349,2.661,514,4.157,570,3.97,680,6.752,681,8.286,682,7.244,683,4.357]],["t/110",[11,4.994,19,1.497,38,2.493,47,2.786,88,1.886,118,3.071,119,4.72,252,3.885,317,2.891,320,3.03,338,2.174,401,3.787,450,4.069,569,7.359,616,3.484,617,3.832,618,4.951,682,8.672,683,5.551,684,4.415,685,7.752,686,4.389,687,5.548,688,3.726,689,5.086,690,7.065,691,5.782,692,2.596,693,3.337,694,4.011,695,5.414,696,4.011]],["t/112",[0,0.419,3,1.373,12,1.424,18,1.597,19,1.091,22,2.529,26,1.913,27,2.675,28,1.065,30,0.912,41,2.751,42,1.037,45,1.259,49,2.567,60,1.146,66,1.255,73,0.96,83,1.457,106,2.419,127,1.796,146,2.567,148,1.711,153,1.62,178,2.857,185,1.677,226,2.149,227,2.202,228,1.392,241,3.916,242,4.393,259,4.876,270,1.538,302,4.083,304,1.235,309,1.44,310,1.38,315,2.086,316,1.917,317,4.027,320,1.369,325,1.771,342,1.106,349,0.933,368,2.857,372,3.192,386,1.69,392,4.403,394,1.697,400,1.876,437,2.091,448,1.494,486,1.848,536,2.073,570,1.392,616,1.082,617,1.701,664,1.575,682,4.097,683,3.553,686,1.983,692,2.729,697,3.087,698,4.233,699,3.347,700,2.165,701,4.513,702,2.367,703,1.812,704,2.02,705,6.079,706,8.774,707,2.392,708,2.697,709,4.979,710,2.998,711,2.745,712,3.65,713,2.998,714,3.609,715,5.364,716,1.711,717,1.983,718,2.505,719,5.792,720,2.923,721,2.575,722,3.087,723,6.974,724,2.419,725,1.839,726,3.192,727,3.345,728,3.087,729,3.503,730,3.192,731,3.503,732,3.549,733,3.087,734,3.192,735,1.466,736,2.923,737,3.503,738,3.126,739,2.117,740,2.2,741,1.677,742,4.799,743,2.998,744,3.325,745,1.538,746,3.192,747,3.503,748,2.237,749,1.74,750,7.101,751,3.503,752,1.96,753,2.133,754,1.626,755,3.026,756,2.425,757,3.503,758,2.218,759,1.748,760,4.837,761,3.325,762,3.087,763,3.325,764,2.745,765,2.613]],["t/114",[0,1.164,20,0.931,35,2.296,60,2.118,82,1.961,155,1.917,164,2.263,193,3.107,218,3.709,263,2.657,267,2.205,307,2.852,308,1.883,309,1.71,316,1.412,317,2.414,322,2.735,325,2.103,329,3.399,333,3.399,349,1.108,352,1.083,366,2.194,378,4.194,392,4.42,409,2.475,430,1.341,437,1.539,443,2.657,448,1.774,497,2.872,514,1.731,520,2.414,536,2.462,570,1.653,617,1.252,621,2.067,622,2.251,623,2.729,680,2.811,681,4.522,682,3.016,683,1.814,701,3.323,716,2.032,717,2.355,718,3.525,725,2.184,738,2.301,742,2.811,759,5.137,766,5.172,767,5.542,768,4.003,769,3.471,770,4.003,771,3.602,772,2.263,773,3.456,774,3.886,775,5.542,776,3.058,777,2.755,778,2.657,779,3.665,780,3.665,781,3.665,782,3.323,783,3.665,784,5.705,785,5.281,786,3.665,787,3.665,788,3.665,789,6.146,790,3.948,791,3.948,792,3.665,793,3.665,794,3.948,795,3.948,796,5.542,797,5.074,798,2.94,799,3.561,800,3.948,801,3.203,802,3.665,803,3.948,804,3.948,805,3.948,806,7.317,807,3.323,808,3.392,809,3.665,810,6.146,811,3.665,812,3.471,813,3.948,814,3.665,815,3.665,816,3.561,817,2.613,818,2.136,819,3.392,820,3.102,821,2.184,822,1.27,823,2.085,824,2.533,825,3.102,826,2.841,827,3.471,828,2.811,829,3.665,830,5.141,831,3.392]],["t/116",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/119",[9,5.06,19,1.793,88,2.259,115,1.909,138,6.037,210,4.467,228,2.705,302,3.413,310,2.683,349,1.814,352,1.774,437,3.912,587,5.829,616,3.265,617,3.182,658,2.52,684,6.467,700,4.21,738,6.281,753,4.146,755,3.647,834,5.829,835,5.829,836,5.787,837,7.333,838,6.809,839,9.633,840,4.387,841,3.216,842,5.787,843,4.387,844,5.29,845,4.277,846,8.184,847,4.146,848,6.206,849,4.65,850,5.158,851,5.984,852,2.931,853,4.555,854,7.575]],["t/121",[4,0.99,19,0.619,20,0.718,37,1.971,38,1.691,39,1.233,47,1.89,60,2.529,73,0.878,88,0.78,93,1.898,98,3.327,109,1.675,111,1.815,115,1.475,118,2.083,166,1.885,176,2.085,182,1.745,211,1.659,218,2.412,219,1.754,230,2.551,231,2.039,276,4.565,302,1.607,309,1.318,317,3.612,338,2.168,349,1.401,352,2.223,366,4.838,390,1.991,394,1.554,396,1.885,409,1.637,410,1.861,443,3.359,452,2.033,453,1.692,481,1.861,486,1.692,497,2.214,530,3.922,534,2.826,536,3.113,563,4.07,572,3.591,577,2.104,578,1.953,583,2.145,614,2.544,615,2.58,658,1.187,668,3.922,673,2.014,684,5.223,686,1.815,692,1.761,703,1.659,704,1.849,718,2.332,725,3.509,738,4.722,739,3.179,755,1.718,797,2.513,834,4.501,835,4.501,838,9.17,840,2.066,841,1.821,843,4.306,846,2.826,847,1.953,851,2.066,852,1.38,855,3.207,856,2.392,857,3.453,858,3.453,859,3.453,860,3.207,861,2.19,862,3.453,863,2.295,864,2.124,865,3.453,866,2.676,867,1.982,868,7.047,869,3.983,870,2.676,871,7.521,872,5.339,873,4.992,874,2.676,875,2.788,876,2.048,877,1.263,878,2.562,879,1.794,880,5.663,881,1.982,882,3.081,883,2.562,884,3.207,885,3.453,886,3.044,887,3.044,888,2.676,889,1.898,890,3.044,891,2.266,892,2.923,893,2.615,894,2.826,895,3.453,896,2.392,897,2.24,898,3.207,899,3.453,900,1.815,901,2.392,902,3.207,903,4.992,904,3.044,905,2.469,906,1.644,907,2.676,908,2.615,909,2.214,910,2.826,911,2.085,912,3.591,913,1.7,914,2.085,915,8.327,916,4.501,917,2.826,918,4.289,919,3.453,920,2.676,921,2.562,922,3.044,923,2.923,924,3.388,925,3.207,926,2.214,927,2.923,928,2.469,929,3.453,930,2.266,931,3.207,932,3.207,933,2.429,934,2.676,935,3.044,936,2.615,937,3.044]],["t/123",[19,1.792,39,3.57,53,4.319,91,3.772,110,3.958,111,5.255,122,3.957,131,2.081,394,5.499,396,5.457,676,5.457,738,5.135,754,4.309,938,6.642,939,4.426,940,4.309,941,5.652,942,8.179,943,7.57]],["t/125",[20,2.671,42,2.584,115,2.448,127,4.475,343,4.338,352,2.274,426,3.349,428,5.316,536,5.168,550,6.187,738,4.83,846,7.693,869,8.277,944,7.473,945,6.613,946,9.402,947,10.927,948,10.927,949,8.73,950,7.384,951,8.73,952,6.248,953,7.957]],["t/127",[0,0.804,6,1.529,12,1.042,19,0.842,20,0.976,22,1.901,26,1.477,27,0.966,28,0.779,30,0.668,35,2.174,39,2.189,41,0.592,42,1.988,45,2.046,47,0.921,60,0.839,66,0.969,69,0.906,72,0.935,73,1.195,76,0.778,83,1.815,87,1.61,89,1.651,91,1.042,96,1.274,99,1.934,103,1.268,108,1.314,109,0.642,113,1.16,115,0.719,117,2.835,118,1.728,119,1.561,122,0.894,125,1.1,127,1.314,131,1.506,136,1.165,146,1.981,147,4.638,153,3.107,170,1.237,174,0.968,181,1.339,211,1.326,226,1.573,227,2.218,229,1.326,241,1.232,244,0.821,252,1.285,259,1.308,286,3.011,293,1.637,296,3.242,302,1.285,309,2.34,315,0.753,320,2.943,338,0.719,342,0.809,356,1.286,357,2.961,361,1.137,366,3.972,386,2.747,394,1.242,401,1.252,407,1.125,410,1.488,412,1.488,430,3.383,441,2.139,448,1.86,481,1.488,533,1.652,534,2.259,535,2.336,536,3.369,576,1.652,592,2.009,602,0.886,615,3.295,661,2.236,688,1.232,692,1.906,694,1.326,712,1.148,738,4.531,739,2.636,741,3.605,742,1.732,745,1.915,753,1.561,754,3.118,755,1.373,807,3.484,817,1.61,818,1.439,884,2.563,889,2.582,891,1.812,939,1.222,945,1.942,954,5.749,955,1.682,956,1.61,957,1.812,958,4.872,959,2.563,960,3.702,961,2.336,962,2.563,963,1.942,964,2.091,965,2.194,966,1.488,967,4.165,968,2.433,969,2.336,970,2.433,971,1.395,972,1.16,973,2.433,974,0.983,975,2.259,976,2.433,977,5.749,978,4.14,979,1.884,980,2.091,981,2.433,982,5.403,983,7.218,984,4.14,985,2.433,986,5.403,987,4.14,988,2.433,989,4.245,990,2.469,991,2.433,992,2.484,993,3.418,994,3.358,995,2.433,996,2.194,997,2.947,998,3.975,999,5.403,1000,3.639,1001,2.761,1002,1.912,1003,1.418,1004,1.912,1005,2.336,1006,1.46,1007,2.433,1008,2.336,1009,4.87,1010,2.563,1011,2.563,1012,2.563,1013,2.563,1014,2.563,1015,2.563,1016,4.872,1017,2.563,1018,2.563,1019,2.563,1020,2.563,1021,2.563,1022,2.563,1023,2.563,1024,2.761,1025,2.563,1026,3.162,1027,3.484,1028,1.623,1029,2.048,1030,2.785,1031,3.358,1032,2.336,1033,2.048,1034,1.573,1035,2.433,1036,1.181,1037,2.563,1038,1.218]],["t/129",[19,1.307,30,1.763,42,2.003,66,1.504,108,3.47,115,2.594,125,2.905,147,4.674,195,3.626,219,3.704,228,2.69,230,2.233,294,3.155,309,2.784,320,2.646,352,1.763,357,1.959,425,2.887,430,2.182,536,4.007,550,3.833,601,3.294,688,3.254,716,3.307,738,5.118,772,3.684,841,2.344,846,8.152,869,7.007,891,4.785,906,3.47,936,5.521,947,10.538,948,12.241,949,6.77,951,6.77,952,4.845,953,6.17,954,5.795,1039,9.605,1040,4.49,1041,7.291,1042,7.291,1043,3.267,1044,9.251,1045,9.962,1046,7.291,1047,2.743,1048,6.77,1049,4.845]],["t/131",[0,1.138,73,2.604,88,2.312,349,2.532,352,2.999,356,2.803,692,3.184,738,6.853,834,8.138,835,8.138,974,3.647,1050,6.125,1051,6.803,1052,7.555,1053,4.464]],["t/133",[0,1.156,12,1.945,20,1.072,22,2.93,26,2.937,28,1.455,30,1.247,32,2.726,37,1.794,41,1.106,42,1.416,45,1.72,60,1.566,66,1.602,69,3.993,76,2.632,83,1.991,98,1.865,99,2.122,109,1.199,115,1.342,146,3.275,147,4.978,174,1.807,196,2.167,211,2.476,227,3.38,242,1.896,259,5.553,270,2.101,304,1.688,308,2.167,309,1.968,315,1.406,317,1.785,342,2.276,346,2.476,349,1.92,356,1.411,363,4.362,366,2.525,536,4.267,615,3.536,712,3.23,738,3.988,754,2.222,759,2.388,822,2.647,954,4.097,956,1.767,958,8.263,960,1.688,965,6.171,966,2.778,967,3.988,968,4.543,969,4.362,970,6.843,973,6.843,974,1.836,1052,3.14,1054,4.923,1055,3.57,1056,2.982,1057,3.518,1058,2.525,1059,5.154,1060,5.154,1061,5.294,1062,3.305,1063,6.161,1064,3.994,1065,3.994,1066,4.604,1067,6.999,1068,2.067,1069,3.751,1070,3.994,1071,7.764,1072,9.34,1073,4.097]],["t/135",[0,1.197,8,3.918,12,2.493,22,3.238,26,2.925,27,2.311,28,1.865,30,1.598,41,1.996,60,2.007,66,1.919,76,1.861,88,2.101,109,1.537,146,3.925,147,5.965,181,3.205,187,3.473,226,3.763,227,3.367,270,2.693,291,4.39,294,2.859,315,1.802,323,3.708,338,1.72,342,2.728,352,1.598,563,6.611,712,4.863,738,6.567,745,2.693,753,3.735,755,3.286,882,2.827,906,3.144,958,5.251,965,5.251,966,3.56,969,5.591,974,2.353,1074,3.708,1075,4.189,1076,3.303,1077,3.13,1078,6.134,1079,6.134,1080,6.606,1081,6.606,1082,4.189,1083,8.639,1084,5.823,1085,5.251,1086,9.304,1087,5.823,1088,5.838,1089,6.606,1090,4.724,1091,4.808]],["t/137",[47,2.962,76,3.197,109,2.91,115,2.954,118,3.265,147,5.69,267,6.158,357,2.384,358,3.642,661,5.401,717,4.666,738,4.559,739,7.021,772,6.32,847,6.416,852,4.536,877,3.247,956,3.042,1092,7.858,1093,5.824,1094,7.262,1095,8.875,1096,4.077,1097,7.511]],["t/139",[42,3.172,954,9.177,958,9.177,959,10.72,960,3.781]],["t/141",[76,3.058,109,2.525,115,2.826,267,5.343,661,5.166,739,6.092,772,5.484,847,6.136,852,4.338,1092,7.516,1096,4.985,1097,9.184]],["t/144",[35,1.79,41,2.011,73,2.384,83,4.185,242,3.448,244,1.986,258,7.098,259,4.441,260,5.881,261,6.151,266,6.078,302,4.362,309,4.135,316,2.104,357,1.793,366,6.284,684,4.957,687,4.436,725,3.254,735,2.595,742,4.189,745,3.821,755,4.662,807,6.952,818,2.871,891,6.151,994,4.773,1026,7.292,1027,4.952,1030,3.959,1035,10.905,1036,2.857,1037,6.199,1038,2.944,1047,2.512,1098,8.703,1099,6.317,1100,5.765,1101,6.702,1102,6.491,1103,9.547,1104,6.199,1105,4.436,1106,5.884,1107,6.676,1108,3.747,1109,5.056]],["t/146",[0,1.202,12,2.108,20,1.161,22,3.281,23,2.838,25,2.684,26,3.081,27,1.954,28,1.577,30,1.351,60,1.697,66,2.021,69,3.787,72,1.892,76,1.574,98,2.022,115,1.455,122,1.809,141,4.728,146,3.478,147,5.286,174,2.891,226,3.182,227,4.176,228,2.061,259,3.906,270,3.36,304,2.7,308,2.348,315,1.523,342,2.417,366,2.736,527,4.065,536,3.071,615,3.755,712,5.332,738,4.235,822,2.777,906,2.659,958,4.44,960,1.83,965,4.44,966,4.443,967,2.869,968,4.924,969,6.977,970,4.924,971,2.823,973,7.267,974,1.99,1026,3.761,1054,3.542,1057,3.813,1061,5.454,1062,3.582,1063,6.347,1066,3.313,1067,3.761,1068,2.24,1069,4.065,1070,4.328,1082,3.542,1083,5.187,1091,4.065,1099,4.808,1110,5.586,1111,4.924,1112,5.187,1113,5.586]],["t/148",[0,1.054,19,1.699,20,1.098,60,1.605,62,2.079,72,1.789,76,1.489,83,2.041,88,1.193,99,2.175,103,2.427,109,1.229,115,1.376,133,4.323,147,5.071,174,3.324,242,1.944,253,3.161,266,5.129,296,3.162,302,3.681,309,2.017,317,3.644,320,1.917,349,1.307,352,1.278,356,1.446,366,6.614,381,2.339,394,2.377,448,2.092,519,2.745,520,2.847,602,1.695,688,2.358,725,4.621,753,2.987,754,2.278,797,3.845,801,5.655,841,2.543,853,3.282,876,3.133,897,5.129,913,2.601,964,4.001,989,6.566,990,4.158,1016,4.199,1035,9.277,1099,6.138,1100,4.864,1101,6.778,1102,6.566,1103,8.356,1106,4.657,1108,4.44,1114,5.283,1115,2.729,1116,6.899,1117,6.899,1118,6.471,1119,3.315,1120,4.323,1121,3.081,1122,2.904,1123,3.996,1124,1.988,1125,6.693,1126,3.845,1127,7.344,1128,4.435,1129,2.904,1130,3.845,1131,5.283,1132,3.606]],["t/150",[27,3.171,39,3.238,41,1.945,45,3.026,53,3.204,108,4.315,113,3.811,125,3.612,137,4.397,138,5.472,147,5.812,242,4.231,255,5.812,302,4.219,315,2.472,332,6.865,366,4.441,426,3.229,536,4.983,602,2.908,661,4.315,676,4.95,708,6.482,709,7.418,718,4.735,738,4.657,742,5.688,745,3.695,746,7.672,938,6.024,954,7.206,956,3.108,1133,5.812]],["t/152",[4,2.283,19,0.955,35,1.429,41,1.707,49,2.247,69,3.47,73,1.355,83,2.058,88,2.152,96,2.458,98,2.88,109,1.852,127,2.536,155,2.28,187,2.801,230,1.632,231,1.918,302,3.704,315,1.453,317,1.845,338,1.387,366,6.95,386,2.387,409,2.301,443,4.72,448,2.11,536,6.217,548,3.938,623,4.849,684,2.818,692,1.657,718,4.352,735,3.094,754,2.297,755,2.65,812,4.128,841,1.713,891,3.496,926,3.416,989,5.512,994,3.809,1036,3.406,1063,4.184,1077,2.524,1099,3.107,1127,4.947,1134,5.047,1135,5.433,1136,3.058,1137,4.128,1138,6.934,1139,6.167,1140,7.959,1141,8.648,1142,5.223,1143,7.214,1144,3.951,1145,7.959,1146,7.959,1147,7.959,1148,7.959,1149,4.994,1150,3.877,1151,3.455,1152,4.509,1153,2.61,1154,2.853,1155,2.664]],["t/154",[0,1.102,155,4.244,225,3.391,336,4.677,338,2.582,342,2.908,452,4.367,467,4.699,672,3.939,694,4.765,696,4.765,738,5.094,778,5.882,832,4.184,833,4.214,834,7.883,835,7.883,924,5.933,1156,5.763,1157,3.603]],["t/156",[1157,3.389,1158,11.441,1159,11.441,1160,10.623,1161,11.441,1162,11.441]],["t/158",[522,7.844,1163,6.54,1164,6.448,1165,11.651]],["t/160",[375,6.606,377,6.208,379,6.786,451,7.835,583,6.919,1166,11.139,1167,7.499,1168,11.139,1169,10.343]],["t/162",[1170,7.255,1171,10.623,1172,11.441,1173,7.037,1174,9.682,1175,9.094]],["t/164",[88,2.561,338,2.952,456,9.994,457,6.365,458,10.528,459,6.232,460,8.785]],["t/166",[181,4.811,230,3.726,667,6.16,918,7.511,1176,7.883,1177,8.115,1178,8.393,1179,8.393,1180,8.115,1181,8.393,1182,6.16,1183,7.511,1184,8.393,1185,8.393,1186,6.16,1187,8.115,1188,8.393,1189,8.393,1190,7.883,1191,7.511,1192,8.115,1193,6.976]],["t/168",[500,8.358,519,4.677,521,5.208,667,7.111,852,3.598,922,7.934,1128,3.542,1194,7.708,1195,8.358,1196,10.54,1197,9.001,1198,9.001,1199,9.001,1200,9.001,1201,8.358,1202,7.617,1203,9.001,1204,9.001,1205,7.617,1206,8.358,1207,9.001,1208,7.365,1209,8.358,1210,8.358,1211,8.358,1212,9.001,1213,8.358,1214,9.001]],["t/170",[60,3.981,62,5.158,519,5.839,521,6.502,522,8.825]],["t/172",[375,6.172,586,8.272,740,6.069,852,4.16,1117,7.573,1164,5.759,1194,7.006,1196,7.719,1215,8.515,1216,7.881,1217,9.663,1218,10.406,1219,7.881,1220,10.406,1221,10.406,1222,10.406,1223,10.406]],["t/174",[168,7.12,169,7.073,427,7.064,638,7.402,1224,10.343,1225,11.139,1226,5.327]],["t/176",[18,4.634,580,6.548,611,8.701,852,4.376,1009,7.37,1195,10.164,1227,10.946,1228,6.017,1229,9.264,1230,10.946,1231,7.472]],["t/179",[11,4.6,38,2.297,73,1.956,83,2.971,88,1.737,181,3.73,183,2.98,184,3.748,401,3.488,496,3.972,591,6.266,618,4.56,622,5.191,656,6.108,658,2.643,690,6.507,836,4.449,852,3.074,882,3.291,930,5.046,1093,5.046,1124,2.893,1232,10.201,1233,7.14,1234,7.14,1235,7.689,1236,5.823,1237,7.689,1238,6.778,1239,6.507,1240,7.14,1241,8.209,1242,7.689,1243,7.689,1244,7.14,1245,5.596,1246,7.689,1247,5.247,1248,5.326,1249,9.59,1250,7.689,1251,5.958,1252,6.507,1253,7.14,1254,7.14,1255,5.249,1256,5.046]],["t/182",[5,3.706,11,3.832,12,2.417,18,2.712,73,1.63,88,2.056,96,2.955,131,1.334,303,7.236,401,2.906,403,3.29,437,2.201,468,5.186,591,3.219,597,5.092,615,2.918,616,1.837,656,6.2,658,3.128,663,3.254,664,4.813,843,3.832,844,3.388,851,3.832,877,2.344,897,4.154,909,4.107,911,5.495,926,4.107,1119,4.019,1130,4.662,1156,4.313,1257,6.406,1258,6.406,1259,6.406,1260,4.963,1261,5.421,1262,6.406,1263,9.103,1264,9.103,1265,5.421,1266,5.092,1267,5.948,1268,6.406,1269,6.305,1270,5.948,1271,5.421,1272,4.372,1273,5.646,1274,5.241,1275,6.406,1276,4.313,1277,4.751,1278,5.948,1279,7.053,1280,5.948,1281,6.406,1282,4.851,1283,6.406,1284,6.406,1285,6.406,1286,5.092,1287,6.406,1288,6.406,1289,4.963,1290,5.241,1291,3.272,1292,4.505,1293,3.832,1294,5.948,1295,4.107,1296,5.421,1297,6.406,1298,3.979,1299,4.851]],["t/184",[131,2.406,316,2.877,349,2.858,401,5.241,429,4.326,591,4.589,614,3.227,656,5.66,701,6.773,754,3.937,843,5.462,1056,5.283,1119,5.729,1232,7.471,1239,7.727,1245,8.408,1253,8.478,1261,7.727,1266,7.258,1267,8.478,1300,5.089,1301,8.048,1302,9.131,1303,6.915,1304,9.131,1305,6.529,1306,9.131,1307,9.131,1308,6.645]],["t/186",[8,4.984,19,1.506,47,2.805,100,4.942,183,3.257,225,2.874,231,3.025,315,2.292,349,2.079,455,6.233,583,5.22,591,4.224,656,4.117,664,3.508,684,4.445,841,2.702,923,7.112,1232,10.565,1234,10.171,1286,6.68,1309,10.313,1310,8.404,1311,6.511,1312,5.073,1313,6.233,1314,5.169,1315,10.954,1316,8.404,1317,3.946,1318,6.364,1319,3.844,1320,6.511,1321,5.584,1322,8.404,1323,8.404,1324,4.684,1325,6.364,1326,5.911,1327,8.404]],["t/188",[13,3.911,22,3.058,27,3.231,28,1.846,30,2.234,31,3.946,32,3.458,33,2.264,34,4.021,35,1.753,36,3.458,37,2.275,38,1.953,41,1.403,44,4.57,66,2.628,73,1.663,170,2.93,196,4.892,197,4.652,244,2.747,299,5.043,328,6.271,361,2.692,362,4.599,407,2.665,523,3.946,656,3.203,708,4.675,1061,2.954,1233,8.576,1300,3.644,1309,9.063,1328,3.029,1329,6.538,1330,4.122,1331,6.538,1332,10.709,1333,4.951,1334,2.399,1335,5.763,1336,7.461,1337,11.398,1338,8.634,1339,6.538,1340,5.763,1341,6.538,1342,9.236,1343,6.538]],["t/190",[2,3.343,3,4.245,82,1.33,110,1.203,168,1.659,169,1.648,218,4.211,225,3.99,299,1.659,342,2.888,381,1.346,383,4.956,390,3.633,409,3.502,413,5.015,619,1.356,621,1.402,623,1.851,627,3.707,664,1.269,716,1.379,721,2.074,782,6.357,785,3.857,830,4.095,841,0.977,1260,2.355,1309,2.572,1335,9.108,1337,9.595,1338,7.268,1344,1.362,1345,2.487,1346,1.948,1347,3.039,1348,3.039,1349,3.039,1350,3.039,1351,3.039,1352,3.039,1353,3.039,1354,3.039,1355,3.039,1356,3.039,1357,3.039,1358,3.039,1359,3.039,1360,2.572,1361,1.481,1362,3.707,1363,5.094,1364,6.575,1365,3.039,1366,3.039,1367,3.039,1368,4.73,1369,3.642,1370,3.039,1371,3.039,1372,3.039,1373,3.039,1374,8.57,1375,3.039,1376,2.301,1377,2.822,1378,3.039,1379,3.039,1380,9.273,1381,2.679,1382,3.039,1383,1.787,1384,3.039,1385,3.039,1386,5.369,1387,3.039,1388,3.039,1389,3.039,1390,3.039,1391,3.039,1392,3.039,1393,2.416,1394,3.039,1395,3.039,1396,3.039,1397,2.572,1398,1.971,1399,3.039,1400,3.039,1401,3.039,1402,2.822,1403,3.039,1404,3.039,1405,3.039,1406,3.039,1407,3.039,1408,3.039,1409,2.572,1410,3.039,1411,3.039,1412,3.039,1413,3.039,1414,3.039,1415,3.039,1416,3.039,1417,2.254,1418,5.094,1419,3.039,1420,3.039,1421,3.039,1422,3.039,1423,3.039,1424,3.039,1425,4.168,1426,3.039,1427,3.039,1428,3.039,1429,3.039,1430,3.039,1431,3.039,1432,3.039,1433,2.572,1434,1.907,1435,3.039,1436,3.039,1437,3.039,1438,3.039,1439,3.039,1440,3.039,1441,3.039,1442,3.039,1443,3.039,1444,3.039,1445,2.822,1446,2.074,1447,3.039,1448,3.039,1449,3.039]],["t/192",[88,2.632,1450,8.824,1451,8.195,1452,11.651]],["t/194",[0,1.147,155,4.417,338,2.688,452,4.474,467,4.89,672,4.1,694,4.959,832,4.354,833,4.385,1156,5.905,1157,3.692,1309,10.547,1453,7.817,1454,7.656]],["t/196",[19,1.865,60,3.161,88,2.35,223,6.464,396,5.682,514,4.839,522,7.006,656,5.098,1132,7.103,1328,4.822,1455,9.955,1456,7.103,1457,7.719,1458,9.173,1459,8.807]],["t/199",[0,1.532,8,5.317,20,1.534,88,1.089,89,2.594,103,5.891,110,1.909,115,1.255,120,3.057,122,1.561,148,3.347,225,2.523,253,2.884,338,1.255,356,2.75,401,2.187,453,2.361,454,5.037,466,8.68,532,2.55,539,5.069,554,3.832,606,4.204,658,3.081,667,2.994,714,2.859,808,8.199,933,3.391,934,3.735,1067,6.763,1116,5.37,1157,1.428,1173,6.178,1240,4.476,1254,10.053,1298,5.569,1460,3.508,1461,2.91,1462,4.08,1463,3.944,1464,3.508,1465,4.476,1466,8.965,1467,8.965,1468,7.335,1469,4.821,1470,3.025,1471,2.361,1472,4.821,1473,4.821,1474,4.821,1475,3.944,1476,4.476,1477,4.821,1478,4.821,1479,4.821,1480,4.821,1481,3.735,1482,4.821,1483,4.821,1484,4.821,1485,4.476,1486,7.379,1487,4.821,1488,3.508,1489,4.821,1490,4.249,1491,4.821,1492,4.821,1493,4.821,1494,4.821,1495,4.821,1496,4.821,1497,3.832,1498,4.821,1499,4.821,1500,4.821,1501,4.476,1502,3.164,1503,4.476,1504,4.821,1505,3.246]],["t/202",[0,1.095,12,3.716,19,1.765,22,2.587,25,3.443,26,3.096,28,2.023,30,1.733,31,6.79,32,5.208,33,2.482,34,4.408,35,2.64,36,6.405,49,3.023,50,3.994,66,2.32,69,2.353,80,5.24,84,3.746,91,3.716,131,1.492,136,3.023,146,3.023,225,2.451,336,3.38,340,3.271,342,2.101,352,2.72,357,1.925,404,4.215,939,4.36,1300,3.994,1330,3.199,1361,5.483,1506,2.941,1507,5.697,1508,4.753,1509,6.926,1510,5.041,1511,4.892,1512,5.216,1513,7.304,1514,6.926,1515,4.825,1516,7.167]],["t/204",[0,1.03,9,4.774,12,3.498,19,1.178,22,2.822,23,3.339,25,3.157,26,3.377,28,1.855,30,1.589,33,3.21,39,3.31,42,1.806,53,2.323,66,2.215,72,2.225,88,1.484,91,2.48,109,1.529,111,3.455,122,2.128,131,1.93,135,2.661,146,3.91,155,2.813,225,2.247,241,2.933,315,2.528,317,2.276,320,2.385,336,3.1,340,3.079,342,1.927,357,2.49,452,3.328,467,3.114,570,3.42,694,3.157,696,3.157,914,3.967,939,5.651,940,3.996,1062,4.214,1156,4.392,1157,2.746,1326,4.622,1361,3.203,1508,4.475,1517,4.412,1518,2.706,1519,3.072,1520,3.376,1521,3.833,1522,3.967,1523,3.773,1524,6.102,1525,4.425,1526,5.377,1527,3.967]],["t/206",[0,0.947,12,3.795,19,1.528,37,2.034,39,2.087,45,1.95,89,3.536,91,2.205,96,2.696,97,3.706,98,3.64,99,2.406,106,3.747,108,2.782,109,1.36,114,5.615,115,2.219,122,1.892,131,2.301,133,4.782,174,2.049,181,2.835,184,2.849,187,3.072,228,2.156,230,3.386,308,2.457,340,3.671,345,2.821,349,2.108,352,2.061,354,3.883,356,1.6,357,1.57,358,2.398,428,3.304,430,1.749,486,2.863,563,3.304,572,5.404,578,3.304,595,3.072,658,2.008,673,4.97,688,2.608,703,2.808,841,1.879,939,5.432,1002,4.047,1053,2.548,1109,4.426,1124,2.199,1128,2.3,1157,1.731,1291,2.985,1460,6.201,1506,2.398,1528,5.844,1529,5.844,1530,4.946,1531,4.645,1532,5.426,1533,3.935,1534,3.528,1535,5.426,1536,7.211,1537,3.935,1538,4.946,1539,4.426,1540,5.844,1541,4.946,1542,5.426,1543,4.782,1544,4.782,1545,4.749,1546,4.946,1547,3.234,1548,3.234,1549,4.528]],["t/208",[38,3.108,96,4.801,106,6.672,131,2.167,159,6.021,185,4.626,349,2.574,352,2.517,486,5.098,572,6.599,740,6.069,866,8.063,1053,4.537,1545,5.8,1550,7.719,1551,9.173,1552,9.173]],["t/210",[0,0.684,22,1.618,23,3.128,25,2.958,26,1.936,28,1.738,30,1.489,33,4.325,38,2.643,42,2.846,53,3.661,66,2.475,76,1.735,88,2.34,111,3.237,185,3.934,228,3.264,315,3.509,316,3.264,338,1.603,339,4.356,342,1.805,343,4.082,354,4.091,358,2.526,430,3.1,469,5.391,665,4.264,688,3.949,821,4.313,896,4.264,940,3.815,1053,3.858,1105,4.091,1328,2.853,1517,4.212,1520,5.321,1521,6.042,1522,6.253,1523,5.08,1545,4.932,1553,3.562,1554,6.129,1555,5.391,1556,4.893,1557,3.145,1558,5.716,1559,4.662,1560,6.156,1561,7.24,1562,5.807,1563,6.156,1564,6.156]],["t/212",[0,1.016,19,1.154,22,2.401,23,4.641,25,4.389,26,2.873,28,2.579,30,2.21,33,4.002,42,2.51,49,4.48,53,3.229,66,2.615,76,1.814,82,2.818,97,4.083,109,2.126,115,1.676,131,1.902,230,1.972,322,2.526,338,1.676,342,2.679,354,4.278,357,1.73,394,2.897,437,2.213,450,3.138,658,2.213,661,3.064,877,2.356,940,3.939,956,2.207,1344,2.885,1517,4.349,1520,4.693,1521,5.328,1522,5.515,1523,5.245,1545,7.267,1557,4.667,1565,5.925,1566,3.154,1567,6.438,1568,6.438,1569,5.328,1570,4.876,1571,6.649,1572,3.755,1573,4.876,1574,9.136,1575,9.136]],["t/214",[49,5.363,315,3.704,396,5.825,1325,8.08,1545,5.946,1565,6.919,1571,9.252,1573,8.08,1576,8.481,1577,10.669]],["t/216",[0,1.275,3,2.709,4,1.398,12,4.643,19,0.874,22,3.136,23,3.782,25,4.338,26,3.752,28,2.102,30,1.8,33,3.499,37,1.697,42,2.777,47,1.627,53,4.546,66,2.366,83,1.884,91,4.329,96,2.25,99,3.065,114,2.477,131,1.015,146,4.263,315,1.33,340,1.62,342,2.647,381,3.296,388,3.761,426,1.737,692,1.517,841,1.568,939,5.284,940,3.209,942,3.99,943,3.693,955,2.971,990,2.564,1361,4.401,1506,2.001,1508,3.594,1517,3.543,1519,3.48,1520,3.824,1521,4.342,1522,4.493,1523,5.183,1536,6.3,1538,4.127,1545,2.718,1578,3.684,1579,3.06,1580,4.528,1581,2.389,1582,3.43,1583,4.528,1584,3.2,1585,2.821,1586,3.549,1587,4.127,1588,2.943,1589,3.617,1590,3.876,1591,3.693,1592,3.617,1593,4.298,1594,2.943,1595,3.549,1596,5.236,1597,3.487,1598,3.162,1599,3.778]],["t/218",[19,1.229,20,1.425,33,2.374,39,3.924,53,4.415,54,5.57,66,1.414,73,2.795,76,1.932,91,2.587,131,1.428,174,3.349,228,2.529,230,2.1,242,2.522,252,3.191,315,2.997,316,3.009,323,3.849,345,3.31,349,2.362,350,5.291,354,4.556,359,3.177,548,4.725,556,3.967,562,2.862,570,3.523,602,2.2,658,2.356,896,4.749,939,4.228,940,5.123,1075,4.348,1521,3.999,1522,4.139,1523,5.482,1533,4.616,1534,4.139,1545,6.124,1551,6.044,1600,4.903,1601,5.45,1602,4.302,1603,4.616,1604,5.086,1605,4.903,1606,3.562,1607,8.082,1608,6.366,1609,4.139]],["t/220",[0,1.27,12,1.819,19,1.323,26,2.819,37,3.12,47,1.609,72,1.632,75,2.859,76,1.358,83,1.862,88,1.089,89,2.594,90,2.884,91,1.819,92,2.663,96,3.404,98,1.745,99,1.985,106,3.091,109,1.122,114,5.802,125,1.921,131,2.475,137,2.338,150,2.274,153,2.071,166,2.632,174,1.69,184,2.35,225,1.648,230,2.26,232,3.391,323,2.706,328,2.462,333,2.35,336,2.274,338,2.334,342,2.629,348,2.41,349,1.192,352,1.785,356,2.02,357,1.982,358,1.978,425,1.909,496,2.49,572,3.057,616,1.383,673,2.812,688,2.151,692,1.499,735,1.874,745,1.965,774,2.687,877,1.764,939,2.135,960,1.579,1047,1.814,1053,2.102,1076,2.41,1124,2.777,1128,1.897,1136,2.767,1144,4.27,1151,3.126,1314,2.965,1361,2.35,1506,1.978,1536,4.08,1538,4.08,1544,3.944,1557,3.769,1599,3.735,1610,5.461,1611,4.476,1612,3.203,1613,7.379,1614,4.713,1615,6.245,1616,2.519,1617,3.126,1618,4.249,1619,2.835,1620,2.565,1621,3.651,1622,3.339,1623,3.735,1624,3.735,1625,3.057,1626,2.994,1627,2.305,1628,3.391,1629,2.169,1630,5.748,1631,2.884,1632,3.576,1633,3.944,1634,2.143,1635,3.126,1636,4.476,1637,3.944,1638,4.731,1639,3.339]],["t/222",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/225",[9,3.838,73,2.196,88,1.95,102,5.666,119,4.881,159,4.995,165,5.211,219,4.386,296,4.456,309,3.296,320,3.133,591,4.339,593,5.475,614,4.363,656,4.229,658,2.967,852,3.451,907,6.689,1300,4.811,1328,4,1640,6.942,1641,4.745,1642,6.403,1643,8.633,1644,8.016,1645,6.862,1646,3.966,1647,6.403,1648,8.633,1649,7.609,1650,8.633,1651,7.064,1652,8.633,1653,6.538,1654,8.633,1655,7.064]],["t/227",[9,4.341,19,1.75,97,6.192,116,3.903,228,3.602,614,3.451,644,5.262,851,5.841,871,7.989,1100,6.006,1314,6.006,1640,7.697,1656,6.535,1657,8.607,1658,6.668,1659,9.067,1660,7.989]],["t/229",[0,1.037,19,1.673,39,3.333,45,3.909,73,2.374,76,2.63,93,5.13,99,3.843,211,4.484,346,4.484,350,4.791,352,2.833,356,2.555,357,2.507,1640,7.145,1656,6.944,1661,6.202,1662,8.226,1663,8.226,1664,9.333,1665,7.418,1666,7.898,1667,7.418]],["t/231",[0,1.167,22,3.103,25,3.786,26,2.478,27,2.757,28,2.225,30,1.906,35,2.113,66,2.436,69,3.447,143,3.982,193,2.86,195,3.92,196,4.414,197,3.423,386,3.531,748,6.227,879,4.095,960,2.581,1333,5.968,1508,3.804,1640,4.194,1666,8.886,1668,7.788,1669,7.317,1670,10.499,1671,9.255,1672,9.255,1673,7.881,1674,4.945,1675,10.408,1676,11.099,1677,4.945,1678,5.735,1679,9.749,1680,5.306]],["t/233",[3,2.693,6,1.207,18,2.049,19,0.867,20,1.006,69,2.43,72,1.639,73,1.883,88,1.093,89,1.701,115,2.34,230,1.482,231,1.742,241,2.16,252,2.252,270,1.973,304,1.585,317,1.676,335,2.591,352,1.17,386,6.128,405,3.49,452,1.737,739,2.716,748,2.87,749,2.232,841,2.89,847,2.736,853,3.006,971,2.445,989,9.549,992,2.559,1006,2.559,1008,4.095,1043,2.168,1047,2.785,1068,1.941,1109,3.665,1508,5.521,1566,2.37,1573,3.665,1640,6.831,1656,2.625,1661,3.216,1671,7.921,1672,7.921,1675,7.921,1676,7.605,1679,6.872,1680,3.258,1681,3.351,1682,11.05,1683,4.839,1684,6.666,1685,7.353,1686,8.344,1687,4.839,1688,7.401,1689,7.325,1690,4.095,1691,6.806,1692,3.522,1693,7.401,1694,4.839,1695,4.839,1696,3.46,1697,3.103,1698,4.493,1699,2.486,1700,4.095,1701,4.493,1702,4.493,1703,4.265,1704,4.839,1705,2.204,1706,4.839,1707,3.589]],["t/235",[3,3.421,37,3.272,41,2.017,88,2.124,244,2.797,338,2.448,346,4.517,352,2.274,429,4.455,748,5.576,1036,4.024,1047,4.428,1640,5.003,1671,8.287,1672,8.287,1675,8.287,1676,7.957,1680,6.33,1684,6.974,1685,7.693,1703,8.287,1708,5.316,1709,4.676,1710,6.33,1711,11.768,1712,11.768,1713,4.131]],["t/237",[19,1.535,20,0.931,21,1.91,22,2.25,32,2.369,33,1.551,35,1.201,37,1.559,41,1.837,49,1.89,66,1.766,69,2.81,72,1.517,111,2.355,116,1.791,122,1.45,155,1.917,196,1.883,225,1.532,231,1.613,236,4.584,244,2.547,336,2.113,342,1.313,366,2.194,452,2.503,467,2.122,474,2.414,556,2.592,562,1.87,694,2.152,696,2.152,749,3.217,841,2.753,847,2.533,989,5.929,1036,3.664,1047,1.686,1058,2.194,1136,2.571,1156,3.304,1157,2.066,1508,5.352,1640,6.159,1656,3.782,1668,8.878,1689,5.074,1702,6.474,1705,4.401,1709,2.228,1713,3.761,1714,3.323,1715,9.661,1716,6.973,1717,4.76,1718,8.516,1719,4.479,1720,7.949,1721,11.114,1722,11.969,1723,6.973,1724,4.479,1725,7.546,1726,6.146,1727,6.474,1728,3.334,1729,4.479,1730,6.973,1731,6.973,1732,6.973,1733,8.561,1734,2.872,1735,4.479,1736,4.479,1737,4.479,1738,5.552,1739,6.973,1740,4.479,1741,2.479,1742,4.479,1743,8.561,1744,5.281,1745,4.479,1746,3.665,1747,4.479,1748,4.479,1749,2.841]],["t/239",[9,3.975,20,1.859,39,3.194,88,1.411,95,4.206,102,4.1,116,3.575,118,2.298,127,2.974,131,1.862,225,2.136,230,1.914,231,3.219,302,2.907,317,2.163,336,2.947,342,1.832,474,3.367,521,3.615,556,3.615,563,3.533,578,3.533,585,3.227,591,3.14,602,2.004,614,3.16,644,3.367,692,3.248,693,2.497,739,3.507,841,2.009,850,4.394,851,6.248,1096,2.87,1124,2.351,1300,4.984,1314,3.843,1619,3.674,1640,7.161,1644,5.801,1656,3.389,1658,6.947,1659,9.698,1661,4.152,1750,4.265,1751,6.248,1752,5.507,1753,6.248,1754,4.547,1755,4.547,1756,5.801,1757,5.801,1758,5.801,1759,3.705,1760,6.248,1761,4.634,1762,6.248,1763,4.841,1764,3.92,1765,4.1,1766,6.248,1767,4.841,1768,4.841,1769,4.634,1770,7.882,1771,5.287,1772,3.507,1773,5.112,1774,4.634,1775,5.112]],["t/241",[20,2.626,25,6.069,26,3.972,122,4.09,407,5.149,632,5.204,673,7.367,693,3.624,1619,5.331,1640,6.722,1658,6.991,1668,9.37,1768,7.024,1770,10.137,1776,9.065,1777,6.724]],["t/243",[19,2.23,20,1.589,110,3.026,115,2.678,122,2.474,315,2.084,349,1.89,474,5.543,602,2.452,692,2.377,735,4.519,841,2.458,913,5.064,989,5.293,1034,5.86,1133,7.455,1336,6.595,1518,3.147,1640,7.27,1658,4.23,1686,7.097,1689,9.942,1713,3.358,1775,6.254,1778,5.146,1779,6.737,1780,6.468,1781,5.788,1782,7.097,1783,7.643,1784,7.643,1785,7.643,1786,6.737,1787,5.669,1788,4.701,1789,7.643,1790,3.672]],["t/245",[0,0.738,19,1.936,20,1.381,38,1.984,39,2.372,42,1.825,45,3.117,49,2.801,88,1.5,99,2.734,103,3.051,109,1.545,115,1.729,116,2.655,176,4.009,183,2.573,211,3.191,230,2.034,302,5.026,346,3.191,349,1.642,356,2.556,357,1.784,457,5.242,614,2.347,621,3.064,622,3.338,656,3.253,692,3.359,841,2.135,851,5.586,996,5.278,1186,4.125,1292,4.671,1300,5.204,1606,3.45,1640,7.264,1656,7.135,1658,7.28,1667,5.278,1689,6.796,1755,4.833,1775,5.434,1791,8.671,1792,4.009,1793,3.728,1794,5.434,1795,4.413,1796,5.854,1797,6.166,1798,3.626,1799,6.166,1800,5.62]],["t/247",[19,1.559,20,1.808,37,3.898,38,2.598,42,1.652,44,4.303,45,2.006,73,1.529,76,1.693,88,1.358,91,2.268,95,4.047,302,2.797,322,3.412,324,3.945,328,4.443,349,1.487,398,2.989,438,3.105,474,3.239,580,5.203,616,2.494,621,2.773,673,3.505,692,1.869,693,5.23,708,4.298,755,2.989,841,1.933,847,3.399,850,6.117,939,2.661,960,1.969,1040,3.938,1043,2.693,1471,2.944,1606,4.519,1617,5.64,1619,6.988,1626,5.402,1640,5.438,1658,4.813,1668,7.58,1689,4.374,1801,8.697,1802,5.581,1803,5.407,1804,4.813,1805,7.116,1806,8.697,1807,6.707,1808,10.219,1809,6.01,1810,6.01,1811,8.697,1812,5.581,1813,6.01,1814,6.01,1815,6.01,1816,5.581]],["t/249",[0,0.86,19,1.859,20,2.156,42,2.85,45,2.582,73,1.968,76,2.18,88,1.747,127,3.682,131,1.611,219,3.93,230,2.37,231,2.785,241,4.628,302,4.826,614,3.665,667,4.805,696,3.717,735,3.007,744,6.819,856,7.183,911,4.67,940,3.335,1040,4.113,1153,3.79,1526,6.33,1598,5.017,1614,4.067,1616,4.043,1622,5.358,1640,4.117,1656,4.196,1658,4.282,1714,5.738,1768,9.064,1817,6.33,1818,10.37,1819,7.183,1820,4.117,1821,7.736,1822,7.736,1823,7.736,1824,7.736,1825,7.736,1826,5.209,1827,7.736,1828,7.736]],["t/251",[8,4.275,9,3.204,19,2.022,39,2.574,42,1.981,45,2.406,103,3.311,131,2.528,170,3.23,225,3.858,336,3.399,342,2.898,352,1.743,397,4.275,407,2.938,565,4.391,621,3.325,623,4.391,634,6.693,667,4.477,673,4.204,677,5.459,856,4.992,907,7.659,940,5.233,960,3.237,1124,2.712,1273,6.353,1640,6.004,1641,3.962,1656,3.909,1658,5.471,1754,5.246,1765,6.487,1770,11.859,1777,5.346,1829,4.571,1830,9.885,1831,7.208,1832,6.353,1833,7.208,1834,7.208,1835,7.208,1836,7.208,1837,7.208,1838,7.208,1839,7.208]],["t/253",[20,1.338,30,1.557,35,1.726,41,2.278,66,2.518,69,2.114,73,1.638,196,2.706,197,2.797,227,3.306,236,3.448,242,2.369,244,1.915,270,3.724,298,3.725,304,2.992,350,2.633,359,2.983,562,2.687,602,2.066,673,3.755,676,3.515,759,2.983,992,3.405,1040,3.212,1047,2.423,1336,4.128,1640,4.862,1658,5.056,1668,9.671,1674,4.04,1680,4.335,1684,4.776,1685,5.268,1703,5.675,1705,2.933,1713,2.829,1721,10.731,1726,5.675,1775,9.457,1778,4.335,1782,5.978,1840,4.335,1841,9.136,1842,5.268,1843,12.204,1844,6.438,1845,10.619,1846,6.151,1847,6.919,1848,5.117,1849,6.438,1850,9.136,1851,9.136,1852,5.978,1853,6.438,1854,6.438]],["t/255",[9,3.92,19,1.581,20,1.833,93,3.368,109,1.425,110,2.426,127,4.917,165,3.698,176,3.698,230,1.877,231,3.174,302,5.572,348,4.409,349,1.515,452,3.166,591,5.192,594,3.973,614,3.651,616,1.757,656,3.001,658,2.106,660,3.805,676,3.345,692,1.905,693,4.13,841,1.97,842,3.545,852,3.525,863,4.071,877,2.242,990,3.221,1052,3.732,1232,5.013,1245,6.417,1298,3.805,1470,3.844,1606,3.183,1619,6.075,1640,7.128,1647,4.545,1655,5.013,1656,4.783,1658,4.88,1768,4.747,1775,5.013,1780,7.463,1795,5.86,1802,8.188,1817,5.013,1855,5.4,1856,3.844,1857,5.689,1858,4.459,1859,4.64,1860,5.689,1861,6.127,1862,6.127,1863,5.185,1864,4.545,1865,4.87,1866,6.127,1867,5.4,1868,5.013,1869,3.391,1870,4.021,1871,6.127,1872,6.127]],["t/257",[0,1.111,155,4.278,225,3.418,336,4.714,338,2.603,342,2.931,452,4.388,467,4.736,672,3.97,694,4.803,696,4.803,832,4.217,833,4.247,1156,5.791,1157,3.621,1640,6.504,1658,6.764]],["t/259",[0,1.227,4,3.721,20,2.296,390,3.882,409,3.192,426,3.933,1346,7.079,1873,5.116,1874,5.208]],["t/261",[0,0.928,73,2.124,76,2.352,78,4.83,88,2.744,122,2.703,159,4.83,310,4.889,320,3.03,323,4.686,340,2.773,355,4.278,356,2.285,361,3.437,617,2.334,703,4.011,836,6.31,956,2.862,1053,3.64,1150,6.075,1170,5.294,1192,6.831,1531,6.636,1533,5.621,1556,6.636,1661,5.548,1665,6.636,1875,7.937,1876,8.348,1877,7.065,1878,6.322,1879,7.359,1880,4.528,1881,5.414,1882,5.294,1883,6.192,1884,4.288,1885,7.752]],["t/263",[37,3.451,38,2.962,51,5.784,93,5.451,109,2.307,231,3.57,306,4.499,307,4.056,310,4.814,317,3.434,401,4.499,563,5.608,621,4.575,877,3.629,1128,3.903,1875,7.217,1886,6.223,1887,9.917,1888,9.917,1889,6.32]],["t/265",[20,2.566,49,4.284,71,6.373,88,2.294,210,6.187,348,5.078,430,3.04,591,6.203,882,4.346,909,6.512,1277,7.533,1875,7.391,1890,9.43,1891,10.156,1892,10.156,1893,9.43,1894,9.43,1895,6.749]],["t/267",[38,3.134,310,4.933,315,2.861,323,5.89,349,2.595,617,2.934,1058,5.14,1604,7.783,1879,9.249,1880,5.691,1882,6.654,1896,10.493,1897,6.973,1898,8.585]],["t/270",[37,4.367,38,2.669,164,4.516,244,3.39,307,3.655,310,4.17,563,5.054,735,3.474,960,2.927,1036,3.825,1144,3.795,1149,5.608,1578,4.422,1793,5.017,1858,6.504,1875,6.504,1882,8.381,1899,7.958,1900,8.937,1901,7.104,1902,7.313,1903,8.937,1904,6.017,1905,6.19,1906,4.981,1907,6.629,1908,6.504]],["t/272",[35,2.239,41,2.763,73,2.124,88,1.886,242,3.071,244,3.244,323,4.686,430,3.636,699,3.654,960,3.572,967,4.288,1036,3.573,1144,3.631,1150,6.075,1882,8.692,1898,6.831,1899,5.294,1904,7.343,1905,7.554,1906,6.079,1907,9.01,1908,8.84,1909,8.348,1910,8.348,1911,7.065,1912,8.348,1913,8.348]],["t/274",[35,2.331,38,3.699,85,5.065,122,2.814,244,4.026,310,3.18,340,2.887,960,2.847,1034,4.952,1036,3.72,1092,6.02,1144,2.894,1463,7.112,1606,4.516,1882,8.583,1899,5.512,1904,7.538,1905,7.754,1906,6.24,1907,6.447,1908,6.326,1914,6.735,1915,6.909,1916,8.071,1917,6.583,1918,8.071]],["t/276",[0,1.085,244,3.584,960,3.946,972,4.105,1036,4.179,1144,3.251,1882,8.887,1899,6.192,1904,8.111,1905,6.763,1906,5.442,1907,9.692,1908,9.509,1919,4.034]],["t/278",[6,2.983,35,2.167,73,2.716,218,2.341,244,3.556,308,3.397,310,2.957,315,3.261,409,2.336,474,5.754,617,2.26,960,2.647,1034,6.082,1036,3.459,1144,2.691,1790,6.354,1882,8.614,1898,6.613,1899,5.125,1904,7.188,1905,7.395,1906,4.504,1907,5.995,1908,5.882,1914,9.264,1915,6.424,1920,7.039]],["t/280",[35,2.315,41,2.799,81,4.188,244,3.672,355,3.387,753,4.881,754,3.722,950,5.417,960,4.043,972,4.686,1006,4.566,1036,3.695,1144,2.874,1882,8.771,1899,5.475,1904,8.311,1905,5.979,1906,4.811,1907,6.403,1908,6.283,1914,6.689,1915,6.862,1921,10.35,1922,11.146,1923,5.211]],["t/282",[35,3.137,41,1.66,56,5.212,57,5.298,216,4.96,244,3.48,291,6.891,310,2.83,355,3.035,741,3.439,936,5.859,960,3.397,1034,4.407,1036,3.311,1144,3.453,1150,5.63,1728,3.699,1741,4.282,1881,5.017,1882,7.926,1899,6.577,1904,6.982,1905,7.183,1906,5.78,1907,7.692,1908,7.547,1914,9.064,1915,9.298,1924,8.243,1925,9.87,1926,4.407,1927,7.183]],["t/284",[0,0.815,21,4.265,35,3.279,41,2.623,73,2.544,244,3.386,310,2.683,315,2.728,352,2.419,409,2.12,818,2.246,822,2.078,1034,4.178,1312,7.38,1609,6.037,1882,8.948,1899,4.65,1914,9.474,1917,10.419,1928,5.079,1929,6.809,1930,8.743,1931,7.333,1932,6.827,1933,7.333,1934,5.553,1935,7.333,1936,7.333,1937,7.333]],["t/286",[41,2.623,49,3.569,98,3.062,115,2.203,216,5.424,308,3.556,309,4.943,345,4.084,348,4.229,358,3.472,430,3.659,570,3.121,882,3.62,1036,4.708,1124,3.183,1604,6.275,1792,5.106,1875,6.157,1882,7.753,1885,10.215,1899,7.753,1916,7.855,1917,6.407,1918,7.855,1930,7.866,1938,5.154,1939,4.321,1940,12.225,1941,5.255]],["t/288",[6,1.529,35,1.643,39,2.188,41,1.892,42,1.684,66,1.264,69,2.011,109,2.052,115,1.595,131,2.151,137,4.277,236,3.281,244,3.562,298,3.545,357,1.646,396,3.345,430,1.834,606,5.023,692,1.905,733,5.013,734,5.185,840,3.665,841,1.97,877,2.242,955,3.732,960,2.888,1030,6.701,1036,3.774,1040,3.1,1052,3.732,1133,6.623,1144,4.152,1170,3.885,1582,4.309,1882,8.339,1899,5.592,1904,5.937,1905,6.107,1906,4.915,1907,6.541,1908,6.417,1914,6.832,1915,7.009,1939,4.504,1942,5.191,1943,4.125,1944,5.185,1945,6.019,1946,6.202,1947,6.127,1948,8.818,1949,5.185,1950,4.64,1951,3.844,1952,5.689,1953,6.127,1954,4.64]],["t/290",[35,2.659,41,2.128,244,3.914,960,3.248,1036,4.244,1144,3.302,1882,8.344,1899,6.289,1904,6.677,1905,6.869,1906,5.527,1907,7.356,1908,7.217,1914,7.684,1915,7.883,1942,4.556,1955,9.917,1956,6.77,1957,9.917]],["t/292",[244,3.284,409,3.192,612,5.382,1334,4.051,1882,9.016,1899,7.002,1958,9.344]],["t/294",[35,2.768,244,3.07,822,3.532,1030,6.121,1036,5.334,1163,5.794,1164,5.712,1882,8.818,1899,6.546,1949,8.735,1959,8.445,1960,4.846,1961,10.322]],["t/296",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/298",[60,3.444,61,5.122,62,4.462,1455,9.012,1962,9.595,1963,9.012,1964,10.528]],["t/300",[12,2.071,19,1.459,20,1.141,38,1.64,89,1.93,98,1.987,103,4.455,109,1.893,118,2.019,132,3.255,183,2.127,186,3.081,228,2.025,230,1.682,241,2.45,253,5.801,294,3.522,307,3.328,313,3.802,316,1.73,317,1.901,345,2.65,352,1.968,356,2.228,433,3.176,464,2.601,578,3.104,586,4.363,602,3.441,614,1.94,658,3.686,684,2.903,725,2.676,821,2.676,841,1.765,874,7.514,894,4.491,1076,2.744,1100,3.376,1116,3.995,1117,3.995,1118,3.747,1134,8.087,1157,1.626,1276,3.696,1317,2.577,1319,2.511,1328,4.97,1344,3.647,1460,3.995,1461,3.313,1475,4.491,1537,3.696,1572,4.746,1581,3.986,1612,5.408,1641,3.017,1642,4.072,1647,4.072,1772,3.081,1864,4.072,1960,3.821,1965,4.363,1966,3.648,1967,4.491,1968,5.408,1969,4.072,1970,8.525,1971,5.097,1972,6.468,1973,5.097,1974,5.097,1975,4.253,1976,5.489,1977,4.491,1978,5.489,1979,5.097,1980,5.097,1981,4.491,1982,3.41,1983,4.646,1984,5.489,1985,5.097,1986,3.284,1987,5.489,1988,4.253,1989,3.925,1990,5.489]],["t/302",[0,0.91,6,2.042,20,1.702,47,2.732,60,2.487,71,5.137,72,4.074,88,1.849,92,3.886,99,3.371,102,5.373,103,3.761,104,5.853,118,3.012,174,2.871,223,5.085,230,2.508,253,4.897,296,4.81,313,5.67,356,2.241,588,5.958,601,5.436,602,2.626,725,3.99,892,6.928,917,6.698,1053,3.569,1056,4.736,1134,5.191,1144,2.726,1282,6.2,1328,3.793,1970,6.507,1981,6.698,1991,4.01,1992,6.343,1993,7.216,1994,6.928,1995,7.601,1996,8.186,1997,7.216,1998,8.186]],["t/304",[6,2.418,20,2.014,89,4.216,110,3.837,252,4.509,430,2.9,481,5.222,578,5.479,594,6.284,658,3.33,907,7.508,990,5.094,1116,7.052,1117,7.052,1118,6.614,1137,10.09,1150,8.726,1328,4.49,1999,8.2,2000,7.928,2001,9.69,2002,7.702]],["t/306",[0,0.887,60,2.424,75,4.733,76,2.983,221,4.817,223,4.957,233,4.862,296,3.19,308,3.354,345,3.852,349,1.974,356,2.184,400,3.969,407,3.253,434,6.622,514,3.083,601,5.949,658,2.742,776,5.447,777,4.908,1122,4.386,1144,2.657,1453,6.043,1454,5.919,1502,6.948,1638,5.116,1772,4.479,1880,4.328,1991,3.909,1992,8.203,2003,6.043,2004,8.203,2005,6.343,2006,7.98,2007,6.043,2008,7.98,2009,7.98,2010,7.98,2011,6.753,2012,7.41,2013,7.41,2014,7.034,2015,7.034,2016,7.41]],["t/308",[0,0.587,4,3.018,19,0.947,37,1.839,42,2.173,53,1.867,73,2.012,76,1.489,83,2.041,89,3.333,90,3.161,92,3.422,109,1.229,115,2.059,122,1.71,125,2.105,130,4.323,131,1.1,153,2.269,170,3.544,181,2.563,183,2.047,190,3.845,213,5.575,218,2.746,221,3.189,230,1.618,233,6.412,262,2.417,278,5.998,307,3.235,313,8.734,324,3.467,345,3.818,349,1.307,352,1.913,392,2.417,403,2.714,407,2.154,413,3.864,426,1.882,434,2.944,658,1.816,755,2.628,841,1.699,877,1.933,972,2.221,1116,5.756,1117,5.756,1122,2.904,1124,1.988,1135,3.606,1137,4.094,1144,3.156,1151,3.426,1319,2.417,1502,3.467,1634,2.349,1638,3.387,1772,4.44,1788,3.249,1804,2.924,2004,4.094,2007,5.99,2017,4.657,2018,4.657,2019,4.657,2020,4.323,2021,4.323,2022,6.899,2023,8.356,2024,6.668,2025,2.575,2026,5.655,2027,5.867,2028,4.471,2029,6.972,2030,9.48,2031,5.283,2032,5.283,2033,3.249,2034,5.283,2035,5.283,2036,5.283]],["t/310",[0,0.511,19,1.275,30,1.72,35,2.626,37,1.598,42,2.691,45,2.373,53,3.959,69,2.334,73,1.168,75,2.724,76,1.294,83,1.775,89,3.058,90,2.748,92,3.14,109,1.069,115,1.196,122,1.487,130,3.758,183,1.78,213,4.181,221,2.773,233,5.966,278,5.636,307,4.005,342,1.347,345,2.217,349,1.136,392,2.101,403,2.359,434,2.56,658,1.579,755,2.285,841,1.477,926,2.945,966,4.688,1118,8.64,1122,2.525,1135,3.135,1137,3.559,1141,5.817,1151,2.979,1502,3.015,1634,2.042,1638,2.945,1772,3.991,1804,2.542,1846,4.787,2004,3.559,2007,5.384,2017,4.049,2018,4.049,2019,4.049,2020,8.012,2021,3.758,2025,2.239,2026,6.22,2027,8.308,2028,3.887,2037,8.698,2038,8.698,2039,6.017,2040,4.593,2041,4.593,2042,4.593,2043,9.792,2044,7.11,2045,7.11,2046,7.11,2047,6.427,2048,7.117,2049,8.698,2050,8.903,2051,6.602,2052,7.11,2053,4.593,2054,4.265,2055,7.11,2056,2.913,2057,8.077,2058,3.651,2059,4.593,2060,4.593,2061,2.321,2062,3.407,2063,4.593,2064,4.593]],["t/312",[75,6.328,77,5.678,83,4.122,98,3.861,109,2.482,112,6.841,307,4.364,392,4.881,403,5.481,602,3.423,797,7.765,1134,6.766,1709,5.307,2065,9.405]],["t/314",[0,0.905,3,1.997,4,2.334,19,0.984,20,1.141,42,2.236,60,3.258,61,2.48,62,2.16,76,2.293,89,3.41,92,1.981,103,2.522,115,2.119,120,3.481,131,1.143,218,1.59,223,3.41,238,3.481,244,1.633,307,3.328,313,7.428,349,1.358,356,1.503,387,3.995,392,4.436,400,2.73,403,2.82,409,1.587,426,1.955,518,2.625,526,3.081,562,2.291,601,2.48,602,3.111,622,4.09,774,3.059,841,1.765,851,5.801,879,2.852,940,3.508,1116,3.995,1117,3.995,1118,5.555,1134,3.481,1136,4.672,1137,4.253,1292,3.861,1333,4.157,1345,4.491,1455,4.363,1523,6.157,1790,2.637,1804,3.038,1962,4.646,1963,4.363,1964,5.097,1992,4.253,2024,3.861,2025,2.676,2026,3.925,2027,4.072,2039,4.646,2050,8.525,2066,7.556,2067,3.603,2068,4.839,2069,4.839,2070,4.363,2071,5.489,2072,5.489,2073,5.489,2074,5.489,2075,4.157,2076,5.341,2077,5.341,2078,7.127,2079,6.659,2080,8.138,2081,7.173,2082,7.514,2083,7.556,2084,5.489]],["t/316",[0,1.001,3,2.296,4,1.81,20,1.312,42,1.734,43,3.517,60,3.679,76,1.778,89,2.218,92,2.278,103,2.899,115,1.643,120,4.001,131,1.314,218,1.828,223,3.919,244,1.877,307,2.581,342,1.85,349,1.561,356,1.727,392,4.804,400,3.138,403,3.241,518,3.017,526,3.542,601,2.851,602,3.369,622,4.526,723,5.015,774,3.517,775,5.015,841,2.029,851,6.283,879,3.278,940,3.883,1118,8.267,1134,4.001,1137,4.889,1292,4.438,1333,4.779,1804,3.492,1992,4.889,2025,3.076,2026,4.512,2027,4.68,2039,5.34,2050,9.626,2051,5.859,2066,8.362,2067,4.141,2068,5.562,2069,5.562,2070,5.015,2078,7.611,2082,4.889,2083,5.859,2085,6.31,2086,6.31,2087,6.31,2088,6.31,2089,6.31,2090,6.31,2091,6.31,2092,4.438,2093,5.163,2094,5.34,2095,6.31,2096,6.31,2097,6.31,2098,6.31]],["t/319",[19,1.038,20,1.76,41,1.816,56,5.531,89,2.976,92,3.611,109,1.347,122,1.875,125,3.373,136,2.443,166,3.162,181,2.809,187,3.044,215,4.504,228,2.136,233,6.095,252,3.939,270,3.45,304,3.277,307,4.092,313,5.862,316,1.825,322,2.272,328,6.247,331,7.137,333,5.364,352,2.42,400,2.88,601,2.616,724,5.427,836,4.897,877,2.119,881,3.324,1006,3.063,1040,2.036,1116,4.214,1117,4.214,1154,3.101,1333,4.385,1572,3.377,1869,3.205,1969,4.295,2026,6.052,2050,6.728,2094,4.9,2099,8.464,2100,11.708,2101,11.005,2102,3.35,2103,3.953,2104,5.79,2105,4.14,2106,9.908,2107,7.461,2108,6.278,2109,8.464,2110,6.052,2111,3.633,2112,8.464,2113,6.728]],["t/321",[19,1.338,20,1.551,30,1.805,33,2.584,39,2.665,42,2.051,53,4.059,56,3.751,73,1.898,76,2.103,77,3.971,89,3.559,125,2.974,196,3.137,215,3.971,307,3.052,317,3.977,331,6.564,333,3.638,342,2.188,350,4.14,359,3.458,400,3.712,714,4.426,755,3.712,777,4.59,906,3.552,1118,7.84,1383,4.388,2020,6.106,2039,6.316,2050,8.045,2057,6.929,2058,9.79,2106,6.316,2107,6.578,2114,10.286,2115,7.463,2116,5.431,2117,7.463,2118,7.463,2119,6.578,2120,5.169,2121,7.463,2122,7.463,2123,7.463,2124,5.782]],["t/323",[42,2.946,47,2.715,76,2.292,88,2.422,89,3.77,92,4.783,96,3.753,99,3.349,109,1.892,115,2.792,252,3.785,278,6.383,293,4.824,296,4.286,307,4.905,403,4.178,602,2.609,897,5.275,1118,7.319,1124,3.061,1128,3.201,1134,5.158,1276,5.476,1638,6.874,1790,5.151,1846,8.075,1982,5.052,2011,6.884,2027,8.897,2125,5.052,2126,5.476]],["t/325",[19,2.097,20,2.156,83,2.989,96,3.569,108,4.936,109,1.8,116,3.093,131,2.159,187,4.067,230,2.37,296,3.093,401,4.704,429,3.665,481,4.169,514,2.989,570,2.854,601,5.646,602,2.482,658,3.564,703,4.983,841,2.488,882,3.311,960,2.534,1003,3.974,1134,4.906,1144,3.453,1157,3.072,1319,3.539,1938,4.713,1991,3.79,2004,5.994,2102,6.768,2127,6.547,2128,6.819,2129,5.859,2130,5.994,2131,7.183,2132,4.96,2133,6.33,2134,6.33,2135,7.736,2136,6.33,2137,6.507]],["t/327",[0,1.187,4,3.062,20,1.68,22,2.124,30,1.955,35,2.167,49,3.409,66,2.202,72,2.737,73,2.056,96,3.729,131,1.683,174,2.834,187,4.249,230,2.476,231,2.909,253,6.387,296,4.779,307,3.305,322,4.69,338,2.104,383,3.729,392,3.697,409,2.336,413,3.294,426,2.879,601,4.823,717,4.249,820,5.597,913,5.256,974,2.879,1144,2.691,1873,3.745,1874,3.812,2130,6.262,2138,6.84,2139,5.882,2140,9.411,2141,6.84,2142,7.504,2143,7.504]],["t/329",[0,1.207,19,1.487,89,2.916,103,3.81,164,4.191,174,2.908,183,3.214,211,3.985,313,5.744,315,2.962,349,2.051,356,2.27,366,5.32,405,3.912,536,4.559,550,4.36,585,4.284,658,2.85,703,3.985,725,5.294,738,4.26,841,2.667,1003,4.26,1068,3.326,1075,5.259,1099,4.837,1118,5.661,1123,5.487,1138,6.036,1308,6.036,1328,3.843,1518,4.471,2025,5.294,2026,7.765,2027,8.055,2108,6.152,2144,7.019,2145,4.725,2146,8.293]],["t/331",[0,1.148,19,1.378,60,3.137,62,4.064,72,3.497,76,2.91,109,1.789,181,3.73,212,4.018,233,7.105,296,3.074,307,3.145,308,3.232,349,1.902,407,4.21,519,3.995,520,4.144,521,4.449,601,5.632,644,4.144,658,2.643,703,3.694,776,5.249,777,4.729,843,4.6,882,3.291,924,4.6,1121,4.485,1122,4.227,1453,5.823,1454,7.661,1506,3.155,1616,4.018,1634,3.418,1765,5.046,1992,9.036,2013,9.59,2014,9.104,2016,7.14,2113,6.112,2147,7.689,2148,7.14,2149,5.596,2150,5.498]],["t/333",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/336",[0,0.6,19,1.44,20,1.122,39,3.428,42,1.483,45,4.121,53,1.907,72,1.827,73,1.373,76,1.52,80,2.871,83,3.709,84,4.199,91,4.013,92,1.948,96,2.489,98,1.953,109,2.233,111,2.837,114,2.741,122,1.747,131,1.673,136,2.276,153,2.318,174,1.892,181,2.617,183,3.114,225,1.845,231,1.942,241,2.408,315,1.471,320,1.958,342,1.582,346,2.592,357,1.45,390,1.897,394,2.428,445,3.683,510,4.289,562,2.252,658,2.761,692,1.678,843,3.228,852,3.212,863,3.586,877,1.974,906,2.568,939,4.709,940,2.326,941,4.543,1053,2.353,1076,4.017,1077,2.556,1128,2.123,1151,3.499,1154,2.889,1182,3.351,1186,3.351,1269,3.737,1506,3.297,1514,3.795,1515,3.633,1517,2.568,1518,2.222,1545,3.007,1565,6.225,1581,4.702,1634,3.572,1764,3.386,1856,3.386,1870,3.541,1889,2.803,1977,4.415,2061,4.06,2151,5.01,2152,3.499,2153,4.289,2154,5.01,2155,3.422,2156,3.459,2157,5.396,2158,5.396,2159,6.085,2160,3.927,2161,4.181,2162,5.01,2163,4.415,2164,5.396,2165,4.002,2166,5.211,2167,5.01,2168,4.415,2169,5.428]],["t/338",[0,0.522,12,1.772,19,0.842,22,2.603,23,2.385,25,3.474,26,3.115,28,1.326,30,1.136,33,2.504,38,1.402,39,1.677,42,3.736,45,1.567,46,3.082,53,4.805,66,1.819,72,1.59,89,1.651,96,2.166,103,2.157,116,1.877,146,3.051,181,4.278,183,2.802,225,2.473,230,2.215,241,2.096,301,3.045,342,2.12,348,2.348,486,2.3,488,2.861,588,5.263,703,2.256,878,3.483,908,3.556,940,2.024,942,3.842,943,3.556,955,2.861,1053,2.047,1361,3.525,1461,2.834,1497,3.732,1517,2.235,1519,2.195,1520,2.412,1521,2.739,1522,2.834,1523,4.151,1545,2.617,1565,3.045,1585,2.717,1586,3.417,1587,3.974,1588,2.834,1589,3.483,1590,3.732,1591,3.556,1592,3.483,1593,4.139,1594,2.834,1595,3.417,1596,5.086,1597,3.357,1645,3.732,1764,2.946,1884,2.412,2111,2.946,2126,3.161,2127,3.974,2159,3.556,2170,3.842,2171,3.357,2172,4.36,2173,4.36,2174,4.139,2175,4.139,2176,4.695,2177,4.695,2178,6.715,2179,4.695,2180,4.695,2181,4.695,2182,4.695,2183,4.695,2184,7.232,2185,4.695,2186,4.695,2187,2.861,2188,4.36,2189,4.695,2190,4.695,2191,4.695,2192,3.417,2193,6.12,2194,3.974,2195,6.679,2196,4.695,2197,3.303,2198,3.974,2199,4.36,2200,3.556,2201,3.974,2202,6.12,2203,3.638,2204,4.695,2205,4.36,2206,3.842]],["t/340",[0,0.603,3,1.972,4,0.939,18,1.386,30,2.328,33,2.792,37,3.109,38,2.668,39,3.639,42,2.929,45,3.213,49,1.381,66,2.35,72,1.109,73,2.051,75,3.215,76,1.527,77,1.743,78,1.895,83,1.265,88,1.566,89,1.906,96,1.511,103,2.49,109,2.078,117,1.977,122,2.892,131,1.129,153,1.407,176,1.977,187,1.722,190,2.383,228,1.208,230,1.661,241,1.462,296,1.309,306,1.486,316,1.032,338,0.853,341,1.362,383,1.511,396,1.788,410,1.765,467,1.552,468,3.951,472,3.041,482,2.887,488,1.995,550,1.722,557,2.603,562,2.895,563,1.852,577,1.995,583,2.034,585,1.692,602,1.051,614,1.157,628,2.303,687,2.176,688,1.462,692,1.686,740,1.91,754,1.412,841,1.743,957,2.149,1007,2.887,1053,1.428,1077,1.552,1157,0.97,1295,2.1,1314,3.334,1328,1.517,1330,1.462,1518,1.348,1520,4.141,1533,3.65,1553,3.136,1565,3.515,1581,1.604,1585,5.569,1587,4.587,1629,1.473,1764,4.352,1781,2.48,1792,1.977,1820,1.743,1878,2.48,2058,2.603,2061,1.655,2145,1.866,2159,5.252,2170,2.679,2197,3.813,2201,2.771,2207,3.275,2208,3.275,2209,2.603,2210,7.017,2211,3.272,2212,2.1,2213,2.679,2214,7.876,2215,8.294,2216,3.275,2217,7.458,2218,5.584,2219,7.776,2220,2.603,2221,3.275,2222,5.87,2223,1.812,2224,2.124,2225,6.936,2226,8.933,2227,5.87,2228,2.1,2229,8.982,2230,2.679,2231,2.679,2232,2.383,2233,3.112,2234,5.675,2235,3.271,2236,2.014,2237,3.275,2238,3.041,2239,2.887,2240,2.887,2241,1.812,2242,3.275,2243,3.275]],["t/342",[0,1.147,3,4.535,4,2.96,85,4.221,111,5.426,383,4.762,602,3.998,2058,8.204,2061,6.297,2217,7.997,2244,6.411,2245,8.735,2246,7.997,2247,6.949,2248,8.735]],["t/344",[19,1.89,27,2.774,28,2.239,33,2.746,39,4.508,42,2.897,45,3.519,66,1.636,67,3.707,76,2.234,91,2.992,109,1.845,315,2.163,341,3.299,400,3.944,562,3.31,602,3.8,822,2.988,939,3.511,1061,5.703,1063,6.636,1517,3.775,1520,5.416,2167,7.363,2210,6.467,2217,8.169,2218,7.302,2219,8.331,2245,6.711,2249,6.006,2250,5.578,2251,5.882,2252,5.882]],["t/346",[9,3.357,19,1.829,27,2.641,28,2.132,33,2.615,45,3.405,53,3.606,66,1.558,67,3.53,76,2.128,91,2.85,109,1.757,315,2.059,341,3.141,400,3.756,602,3.707,822,3.275,939,3.344,940,3.256,941,6.998,1061,5.591,1063,7.004,1521,5.951,1522,6.159,1523,5.857,2210,5.571,2218,7.067,2219,8.128,2245,6.391,2248,8.635,2249,5.719,2250,5.312,2251,7.568,2252,7.568,2253,7.012]],["t/348",[9,3.46,12,3.93,19,1.867,27,2.723,28,2.197,31,4.698,33,2.695,45,3.475,51,4.54,53,2.751,66,1.606,67,3.638,76,2.193,91,2.937,109,1.811,315,2.123,341,3.238,400,3.871,562,3.249,602,3.765,699,3.407,822,2.951,941,4.401,1061,5.66,1063,6.587,1519,3.638,2210,6.407,2218,7.212,2219,8.254,2245,6.587,2249,5.895,2250,5.475,2251,5.774,2252,5.774,2253,7.227,2254,8.52,2255,9.959]],["t/350",[0,0.671,6,2.557,39,3.117,42,2.816,45,3.746,53,3.621,73,2.607,75,3.581,80,5.453,88,1.364,316,2.75,325,2.835,349,2.534,352,3.228,430,1.808,702,3.789,941,4.934,1040,3.603,1043,2.706,1330,3.895,1519,4.079,1629,3.926,1708,3.415,1960,2.835,2210,6.985,2222,10.076,2223,4.83,2224,6.645,2235,4.116,2256,3.44,2257,4.941,2258,5.111,2259,12.88,2260,10.495,2261,10.501,2262,2.643,2263,3.051,2264,3.004,2265,7.692]],["t/353",[30,2.006,33,2.872,38,2.477,42,2.984,66,2.24,73,2.11,115,2.16,131,1.727,468,4.725,562,3.462,583,5.151,592,6.036,665,5.744,691,5.744,1520,4.26,1585,4.798,1609,5.006,1661,5.511,1764,5.204,2159,6.281,2210,6.611,2217,6.426,2218,5.744,2219,7.638,2234,8.886,2235,3.912,2239,7.31,2240,7.31,2266,7.701,2267,10.084,2268,10.084,2269,7.701,2270,8.293,2271,6.592,2272,6.152,2273,10.86,2274,7.127,2275,8.293]],["t/355",[19,1.292,28,2.035,30,2.729,38,2.952,39,4.029,45,2.406,66,2.327,76,2.031,91,4.257,111,3.789,115,1.877,127,3.431,136,3.041,137,3.496,155,3.085,182,3.642,229,4.749,340,2.394,358,2.958,433,4.17,486,3.531,592,5.246,840,4.312,941,6.379,1471,3.531,1585,6.527,2058,5.729,2210,7.481,2217,9.406,2229,6.353,2248,10.273,2254,5.898,2255,5.729,2265,9.944,2276,4.853,2277,7.208,2278,6.338,2279,7.208,2280,7.208,2281,6.353,2282,6.693]],["t/357",[0,1.12,6,2.514,182,5.091,349,2.492,352,2.437,358,4.135,486,4.936,562,5.127,570,3.717,956,3.454,1006,5.329,1124,3.791,1764,6.322,1840,6.783,1977,8.244,2210,7.234,2234,8.244,2283,9.355]],["t/359",[6,1.567,35,1.684,45,2.096,96,2.897,103,2.884,109,1.461,131,2.618,164,3.172,174,2.202,212,3.281,230,2.749,243,3.301,244,1.868,320,2.278,325,4.917,357,1.687,359,4.158,426,2.236,430,3.42,457,3.524,562,4.372,602,2.014,658,2.158,688,2.802,704,3.362,877,2.297,879,3.262,956,2.152,1003,3.225,1036,2.687,1038,2.769,1096,2.884,1126,4.569,1154,3.362,1157,1.86,1344,4.021,1566,3.076,1598,4.072,1612,4.172,1840,7.051,1881,4.072,2166,4.072,2169,3.55,2210,7.356,2212,4.026,2214,5.137,2234,8.569,2235,5.701,2244,5.574,2265,9.231,2284,8.333,2285,6.279,2286,9.724,2287,5.534,2288,6.279,2289,6.279,2290,8.974,2291,4.755,2292,4.991]],["t/361",[0,1.129,19,1.821,45,4.119,100,7.258,174,3.562,183,4.783,211,4.88,230,3.111,296,4.06,356,2.78,562,5.152,1518,4.182,1565,6.586,2210,5.545,2293,9.43,2294,8.073]],["t/363",[4,2.394,45,2.786,183,4.227,184,4.069,210,5.086,228,3.08,230,2.557,348,4.174,352,2.638,356,2.285,358,3.426,428,4.72,562,5.071,756,3.327,836,4.83,877,3.054,910,6.831,924,4.994,1126,6.075,1317,3.92,1319,3.819,1518,4.491,1656,4.528,1708,4.72,1772,4.686,1856,5.238,2210,5.955,2211,5.039,2295,8.84,2296,6.192,2297,7.752,2298,7.359,2299,5.548,2300,5.414,2301,6.322,2302,7.752,2303,6.636,2304,6.831,2305,5.621]],["t/365",[45,3.561,75,6.328,212,5.576,315,2.91,316,4.006,349,2.639,614,3.771,1764,6.695,2210,6.941,2218,7.39,2219,7.505,2306,8.73]],["t/367",[19,1.517,38,2.527,47,3.672,115,2.203,228,3.121,325,5.74,341,4.576,430,4.117,486,4.144,562,3.531,817,6.416,926,5.424,2210,7.907,2212,5.424,2214,6.922,2219,8.599,2234,6.922,2244,5.255,2284,7.855,2307,8.46,2308,8.46,2309,7.855,2310,8.46,2311,8.46]],["t/369",[11,3.27,18,2.314,19,1.454,30,1.322,33,1.892,35,2.175,41,1.173,42,2.658,45,2.707,47,1.824,66,1.673,73,2.723,75,3.241,88,1.832,231,1.968,242,4.407,244,2.413,315,1.491,316,4.172,325,3.809,338,1.423,349,1.352,426,1.947,430,2.428,556,3.162,562,2.282,688,2.439,702,3.43,817,3.188,944,4.344,1036,4.14,1040,2.852,1043,4.334,1047,4.027,1096,3.726,1520,2.808,1533,3.68,1579,3.43,1585,3.162,1741,4.489,1820,2.909,2178,5.075,2210,7.229,2212,3.504,2215,8.981,2217,4.235,2218,3.785,2219,8.042,2222,6.865,2229,4.818,2256,3.114,2259,7.532,2260,4.818,2312,10.616,2313,9.673,2314,9.434,2315,4.139,2316,2.965,2317,9.673,2318,4.818,2319,5.466,2320,5.466]],["t/371",[20,1.388,30,2.267,33,3.245,35,1.79,42,2.976,45,2.228,53,4.151,66,2.423,73,2.384,76,1.881,88,1.508,91,2.519,109,1.553,115,1.738,164,3.373,338,1.738,452,2.397,453,3.27,572,5.944,680,4.189,841,2.147,939,2.956,940,2.878,955,4.067,1085,5.306,1330,4.183,1517,3.178,1520,3.429,1521,3.894,1522,4.03,1523,3.832,1581,5.306,1585,5.423,1588,4.03,1592,4.952,1594,4.03,1595,4.858,1596,6.592,1597,4.773,1629,3.004,1878,7.098,1965,5.306,2210,5.117,2217,5.173,2218,6.491,2219,8.261,2222,7.932,2223,5.187,2224,4.329,2248,5.65,2260,5.884,2321,6.676,2322,9.373,2323,9.373,2324,9.373,2325,4.189,2326,5.65]],["t/373",[19,1.413,38,2.354,42,2.166,47,2.63,53,2.785,84,4.119,89,2.771,96,4.844,98,2.852,115,2.052,119,4.456,159,4.56,164,3.982,229,3.786,231,2.837,294,3.41,340,2.618,345,3.804,352,1.906,358,3.234,400,3.92,468,5.981,652,4.332,955,4.801,1056,4.56,1077,4.975,1170,4.998,1228,4.332,1328,3.651,1556,6.264,1572,4.596,1619,4.634,2159,7.951,2210,6.875,2211,4.757,2293,9.749,2327,9.749,2328,7.881,2329,7.881,2330,10.499,2331,6.946,2332,7.881,2333,6.669,2334,7.881,2335,6.669,2336,7.317]],["t/375",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/378",[0,1.212,19,2.178,37,2.905,38,3.628,88,1.886,115,3.163,119,4.72,183,4.707,231,3.005,255,5.352,352,2.019,670,6.213,672,4.332,676,5.955,841,2.684,924,7.267,1006,4.415,1128,3.285,1255,7.445,1518,3.437,1555,5.086,1653,6.322,1832,7.359,2337,12.147,2338,6.322,2339,7.752,2340,8.348,2341,5.969,2342,8.348,2343,8.348]],["t/380",[19,1.821,88,2.294,89,4.674,120,6.441,122,3.288,183,3.936,219,5.16,527,7.391,662,7.262,852,4.06,877,3.716,913,5,924,6.076,1279,7.869,1286,8.073,1518,4.182,1829,6.441,2344,8.073]],["t/382",[73,2.647,88,2.829,95,7.006,109,2.421,183,4.854,444,4.406,672,4.134,718,4.285,817,6.069,1093,6.83,1154,5.573,1255,7.103,1518,4.285,2338,7.881,2345,7.719]],["t/384",[4,2.581,20,1.871,38,2.688,73,2.29,89,4.025,103,5.259,156,6.234,230,3.507,433,5.208,570,4.224,658,3.935,672,3.575,817,5.25,841,2.894,853,5.591,1074,6.427,1128,3.542,1173,5.536,1279,6.974,1286,7.154,2103,6.144,2108,6.677,2344,9.1,2346,8.358,2347,7.934,2348,9.689,2349,8.358,2350,4.245]],["t/386",[0,1.069,5,5.564,18,4.071,60,2.921,62,3.784,73,2.446,88,2.172,103,4.417,115,2.504,131,2.485,514,3.715,519,4.996,520,5.182,622,4.833,718,4.914,818,2.946,841,3.092,1047,3.618,1173,5.914,1328,5.53,2351,10.983,2352,8.138]],["t/388",[20,2.316,132,6.606,219,5.659,670,6.346,2353,9.427,2354,9.427,2355,11.139,2356,7.603,2357,8.106]],["t/390",[89,4.022,92,4.129,853,7.106,1554,7.924,2358,8.326,2359,11.441]],["t/392",[1286,9.261,1518,4.797,2360,10.27,2361,11.651]],["t/394",[4,3.06,34,6.562,71,6.695,73,3.234,88,2.41,111,5.609,232,7.505,408,6.274,877,3.904,1277,7.914,2362,7.914,2363,10.669,2364,10.669]],["t/397",[0,1.164,8,6.211,37,2.185,72,2.126,82,3.928,89,2.207,218,2.6,375,7.85,377,7.377,378,5.598,379,8.064,380,3.243,384,5.137,394,2.825,409,1.815,446,4.489,519,5.937,667,3.9,695,5.82,828,5.631,992,3.321,1318,7.931,1346,4.026,1386,3.262,1578,3.107,1599,4.865,1928,8.708,2338,4.755,2354,5.314,2365,9.464,2366,4.991,2367,4.286,2368,5.137,2369,5.83,2370,6.279,2371,6.279,2372,4.991,2373,7.91,2374,5.83,2375,5.314,2376,5.314,2377,6.279,2378,3.982,2379,5.314,2380,6.279,2381,6.279,2382,5.314]],["t/399",[0,1.479,3,1.285,4,1.654,6,1.439,7,3.882,8,6.739,9,1.569,13,2.112,80,1.879,81,1.713,89,2.027,97,4.635,103,2.649,170,1.582,218,2.891,225,1.207,294,1.528,374,10.31,375,7.891,376,3.939,377,7.416,378,3.581,379,8.106,380,2.979,390,2.57,398,4.197,403,1.813,412,1.903,446,5.226,451,5.935,469,2.151,474,1.903,498,5.81,512,2.674,519,5.185,523,2.131,557,2.806,580,2.112,649,3.278,667,3.582,668,2.445,695,3.739,828,5.295,841,1.135,992,1.867,1163,1.982,1164,1.954,1169,3.278,1318,7.043,1369,2.524,1398,2.289,1446,2.41,1880,1.915,1906,1.968,2024,2.483,2148,3.278,2366,2.806,2367,3.936,2368,5.981,2373,8.198,2379,2.988,2383,4.196,2384,3.278,2385,7.835,2386,4.468,2387,2.735,2388,7.043,2389,7.141,2390,3.618,2391,3.53,2392,5.766,2393,5.766,2394,3.53,2395,3.53,2396,3.53,2397,3.278,2398,5.354,2399,3.53,2400,3.278,2401,2.524,2402,2.674,2403,2.889,2404,3.112,2405,3.53,2406,3.112,2407,2.569,2408,3.53,2409,3.278,2410,3.278,2411,3.53]],["t/401",[0,1.443,4,1.554,8,5.707,82,2.372,88,1.224,89,1.905,118,1.994,170,3.612,218,2.788,225,1.853,299,2.959,375,7.699,376,4.344,377,7.235,379,7.909,380,2.799,390,1.905,403,2.784,404,3.187,406,2.999,413,2.209,446,5.763,447,5.863,451,3.811,452,1.945,497,3.474,498,4.307,512,4.104,519,2.815,523,4.865,666,4.104,667,5.006,668,3.753,692,1.685,828,5.058,841,1.742,992,4.263,1056,3.135,1156,2.567,1157,1.605,1226,6.208,1317,2.544,1318,4.104,1330,2.418,1581,2.654,2214,4.434,2223,2.999,2333,4.586,2366,4.307,2367,5.502,2368,4.434,2373,4.776,2386,4.199,2389,8.145,2397,5.032,2406,7.105,2407,5.866,2412,5.419,2413,3.271,2414,4.307,2415,5.032,2416,3.753,2417,3.753,2418,5.419,2419,5.419,2420,5.419,2421,5.419,2422,5.419,2423,4.776,2424,5.032,2425,4.307]],["t/404",[12,2.369,38,3.413,51,3.662,88,1.418,111,3.301,115,1.635,118,2.31,166,3.428,181,3.046,183,2.433,219,3.19,228,2.316,230,3.208,317,2.174,443,6.777,453,3.076,527,4.569,570,3.311,585,4.636,658,2.158,668,6.215,691,4.349,692,1.953,700,3.604,727,4.933,836,5.192,856,4.349,876,3.724,879,3.262,883,4.657,924,3.756,1049,5.963,1052,7.659,1075,3.982,1076,3.139,1150,4.569,1183,4.755,1248,4.349,1319,2.872,1361,3.061,1470,3.94,1531,4.991,1533,4.227,1554,4.349,1661,4.172,1764,3.94,1774,4.657,1941,3.9,2145,6.886,2155,3.982,2187,3.825,2356,4.286,2426,4.991,2427,4.416,2428,6.279,2429,6.279,2430,12.018,2431,6.279,2432,5.83,2433,6.279,2434,4.286,2435,5.83,2436,4.865,2437,4.865,2438,4.286,2439,5.314,2440,5.83,2441,4.755]],["t/406",[0,1.514,59,7.368,60,4.28,61,6.236,62,2.586,317,2.276,518,6.512,585,6.354,668,6.42,727,5.095,754,2.833,776,6.328,777,5.701,879,3.415,1049,6.16,1076,5.831,1534,3.967,2145,7.007,2426,8.536,2430,6.102,2438,4.486,2440,8.607,2442,6.572,2443,5.224,2444,6.572,2445,8.171,2446,5.224,2447,8.171,2448,9.27]],["t/408",[73,2.069,212,4.251,307,3.327,317,3.712,405,3.836,452,4.306,457,4.566,570,3.001,572,5.158,585,5.539,697,6.655,708,5.816,836,4.706,847,6.782,851,6.414,917,6.655,924,7.175,1052,4.955,1124,3.061,1194,5.476,1325,6.16,1634,3.616,1641,4.471,1832,7.17,2297,7.552,2438,5.552,2449,9.293,2450,8.134,2451,10.135,2452,7.552,2453,10.722,2454,7.17,2455,8.134,2456,8.134,2457,7.552,2458,8.134]],["t/411",[0,0.806,6,1.809,12,2.736,22,3.197,23,3.683,25,4.768,26,3.826,28,2.046,30,1.753,33,3.436,39,2.589,42,3.344,45,3.312,53,4.504,66,2.334,108,3.45,122,2.347,125,2.889,146,4.186,320,3.601,342,2.125,394,3.262,395,5.377,425,2.87,585,3.745,940,3.125,942,5.931,955,4.416,1361,4.837,1368,6.731,1517,3.45,1519,3.388,1520,3.724,1521,4.228,1522,4.376,1523,4.161,1545,5.531,1585,4.194,1586,5.276,1587,8.398,1592,5.377,1593,8.747,1764,4.549,2145,4.13,2451,5.762,2459,7.249]],["t/413",[0,1.218,47,2.805,60,3.327,76,2.368,99,3.46,109,2.548,110,3.328,115,2.188,122,2.721,131,2.281,166,4.588,228,3.1,253,5.027,316,2.648,317,2.91,357,2.258,518,4.019,585,4.341,701,8.125,739,4.717,774,4.684,847,4.752,877,3.075,972,3.533,974,2.993,1038,3.707,1043,3.766,1047,3.162,1052,5.12,1053,3.664,1096,3.86,2145,4.787,2426,9.686,2460,5.273,2461,7.407,2462,6.364,2463,7.112,2464,7.112,2465,7.803]],["t/415",[6,1.521,19,1.093,35,3.205,47,2.933,53,2.155,108,2.902,131,2.145,242,2.243,266,5.699,317,3.567,357,3.344,366,4.305,386,2.732,430,4.004,486,4.305,585,6.174,725,2.972,754,4.442,817,3.556,839,5.16,847,6.758,960,2.878,967,5.292,972,2.563,989,4.223,1038,2.689,1047,3.877,1052,3.715,1100,3.75,1102,4.223,1108,3.423,1334,2.237,1417,4.523,2145,6.808,2426,4.846,2451,4.846,2462,4.618,2463,5.16,2464,5.16,2466,4.289,2467,4.989,2468,5.661,2469,8.159,2470,7.19,2471,5.661,2472,5.661,2473,4.223,2474,5.661,2475,5.211,2476,5.661,2477,5.374,2478,5.374,2479,4.002,2480,5.374,2481,5.16,2482,3.867]],["t/417",[19,1.745,20,1.465,73,2.476,76,1.986,88,2.198,98,2.551,109,2.594,110,2.791,115,1.835,122,2.282,131,2.321,242,3.581,261,6.388,266,7.23,267,3.47,268,5.46,313,4.881,317,2.44,338,1.835,345,3.402,358,2.892,366,4.768,425,2.791,459,3.874,563,3.985,718,2.902,877,2.578,904,6.212,957,4.625,972,2.962,974,2.51,1034,4.015,1047,2.652,1096,3.237,1100,5.986,1101,5.039,1102,6.741,1108,3.956,1144,2.346,1153,3.452,1555,4.293,1610,3.37,1634,3.133,1741,5.387,1856,4.422,1889,3.662,1981,7.964,2025,3.435,2461,6.212,2462,5.337,2470,7.964,2483,4.377,2484,5.602,2485,5.602,2486,9.733,2487,7.047,2488,7.047]],["t/419",[20,2.465,27,2.385,60,3.601,88,2.149,110,2.7,115,2.477,125,2.717,127,3.246,131,1.42,218,2.756,253,4.08,261,4.476,266,6.17,267,3.357,307,2.789,316,2.149,317,3.794,325,3.202,331,6.17,392,3.12,409,1.972,425,2.7,457,6.15,668,4.723,676,3.723,727,5.229,774,5.302,938,4.532,960,3.116,972,2.867,1119,4.279,1139,5.284,1295,4.372,1317,4.467,1319,3.12,1765,4.476,1981,7.784,2155,6.948,2304,5.58,2390,4.279,2427,4.797,2451,5.421,2461,6.011,2467,5.58,2489,6.82,2490,6.691,2491,4.963,2492,6.82,2493,6.82,2494,6.82,2495,5.058,2496,6.011,2497,6.82,2498,6.011,2499,6.82,2500,6.332,2501,6.011,2502,5.771]],["t/421",[19,1.881,76,2.956,88,2.37,315,2.861,317,3.633,338,2.732,459,5.767,585,5.42,661,4.994,772,5.302,956,3.597,1066,6.223,1093,6.886,2145,5.978,2503,6.392,2504,10.493]],["t/423",[0,0.762,4,1.966,20,2.47,26,2.156,60,2.901,62,2.698,76,1.932,108,4.545,109,2.222,131,1.428,136,2.892,146,2.892,153,4.72,183,2.657,218,1.986,230,2.1,315,1.87,329,3.342,342,2.01,381,3.036,409,1.982,413,3.893,415,4.066,426,2.442,466,4.396,481,3.695,514,2.649,585,4.933,605,5.193,692,2.132,701,7.083,708,4.903,839,5.803,846,5.61,847,6.719,869,4.823,872,5.086,876,4.066,924,4.102,960,2.246,1053,2.99,1096,3.15,1136,3.936,1256,4.5,1641,3.769,1699,3.522,1734,4.396,2145,5.44,2153,5.45,2197,4.823,2462,5.193,2481,8.082,2482,6.968,2505,4.616,2506,6.856,2507,6.856,2508,6.856,2509,3.649,2510,3.967,2511,4.102,2512,4.903,2513,6.366]],["t/425",[0,1.085,108,4.648,155,4.179,225,3.339,317,4.172,336,4.605,338,2.543,342,2.863,452,4.325,467,4.626,585,6.224,672,3.879,694,4.691,696,4.691,832,4.119,833,4.149,1156,5.708,1157,3.569,2145,6.864]],["t/427",[19,1.292,76,2.031,89,2.534,92,4.072,98,2.609,109,1.677,114,3.662,115,2.938,116,2.881,125,2.872,131,2.058,137,3.496,153,4.246,169,3.909,183,2.793,187,3.789,213,4.239,219,3.662,230,2.208,278,3.836,294,3.119,296,2.881,355,2.828,357,1.936,358,2.958,403,3.702,425,2.854,475,6.747,617,2.015,619,4.412,877,4.128,974,2.567,1006,3.812,1007,6.353,1047,2.712,1128,2.836,1144,4.042,1153,3.531,1319,4.522,1600,5.154,1635,4.674,1638,6.338,1639,4.992,1697,4.621,1942,3.311,2005,5.729,2358,7.194,2514,6.353,2515,5.898,2516,4.275,2517,6.353,2518,7.194,2519,7.659]],["t/429",[6,1.954,9,4.648,73,1.992,89,2.754,131,2.451,225,2.678,231,2.819,306,4.743,335,4.194,336,3.694,342,2.296,357,2.104,400,3.895,401,4.743,405,3.694,429,3.711,433,4.531,453,3.837,474,4.221,621,3.613,622,3.936,674,7.272,798,6.862,841,2.518,1076,5.228,1144,4.182,1151,5.079,1173,4.817,1300,4.365,1506,4.291,1610,6.006,1614,4.117,1886,4.914,2078,6.948,2169,7.102,2187,4.771,2520,6.408,2521,9.217]],["t/431",[20,1.926,98,3.353,109,2.969,116,3.703,131,1.929,135,3.752,181,4.494,231,3.335,242,3.408,322,3.634,338,2.412,401,5.289,432,5.318,488,5.644,621,4.274,687,6.156,689,7.103,718,5.254,841,2.979,1247,4.707,1886,5.813,2483,5.754,2522,7.58,2523,8.602,2524,7.84,2525,8.602]],["t/433",[0,0.922,6,2.069,92,2.994,109,1.93,115,2.16,125,3.305,166,4.528,218,3.146,219,4.213,230,2.541,278,4.413,296,3.315,308,3.486,401,3.762,409,2.398,425,3.284,515,5.833,588,6.036,617,2.319,624,5.93,822,2.351,841,3.492,853,5.151,876,4.919,957,5.443,1128,3.264,1144,4.032,1153,5.932,1155,4.146,1610,3.966,1638,6.963,1639,5.744,1790,3.985,1942,3.81,2077,7.127,2299,5.511,2526,6.152,2527,4.413,2528,5.584,2529,5.744]],["t/435",[0,1.018,4,2.173,12,2.86,19,0.895,22,2.407,25,2.398,26,2.88,28,2.139,30,1.833,35,2.456,53,3.886,66,2.482,69,2.488,73,1.928,146,3.197,148,3.438,155,2.136,196,2.098,197,2.168,225,1.707,234,4.755,238,4.806,252,2.323,267,5.035,307,3.099,310,1.826,316,1.573,322,2.973,336,2.354,342,1.464,349,1.235,350,5.191,352,2.909,353,5.036,355,1.958,356,1.366,359,2.313,452,1.792,467,2.365,562,4.59,822,2.148,940,5.976,1153,4.487,1156,2.365,1157,1.479,1508,3.658,1605,8.277,1606,2.593,1713,2.193,1869,2.763,2056,4.806,2149,5.515,2526,8.587,2527,4.033,2528,5.102,2530,8.074,2531,7.097,2532,3.78,2533,6.679]],["t/437",[19,2.212,53,3.589,238,6.441,339,5,340,4.416,343,4.685,350,5.438,562,5.55,940,4.379,1153,6.046,1605,7.262,1772,5.701]],["t/439",[0,1.25,11,5.236,41,2.413,53,3.093,74,5.816,131,2.587,136,3.692,225,3.846,310,3.202,328,5.744,336,5.304,342,3.297,349,2.165,430,4.155,618,5.191,940,3.773,1029,6.492,1034,4.986,1096,4.021,1153,4.287,1470,5.492,1798,6.14,1945,5.974,2256,4.986,2534,8.127,2535,6.957]],["t/441",[0,0.96,19,1.548,41,2.392,53,3.941,73,1.515,76,1.678,109,1.385,110,2.358,114,3.025,131,2.116,218,2.502,225,2.036,294,2.576,299,3.251,336,2.808,338,1.55,342,1.746,409,1.721,452,2.138,515,6.075,614,3.053,718,2.451,822,3.355,824,4.884,849,3.776,940,4.807,1153,5.8,1157,1.764,1208,4.872,1798,3.251,1820,3.168,1917,4.509,1934,7.698,2522,4.872,2526,9.159,2527,3.168,2528,6.844,2536,4.509,2537,5.039,2538,4.009,2539,5.528,2540,5.954,2541,5.954,2542,4.613,2543,6.693,2544,10.165,2545,10.165,2546,10.165,2547,10.165,2548,10.165,2549,5.954,2550,5.954,2551,5.954,2552,5.039,2553,10.353,2554,5.954,2555,5.954,2556,5.954,2557,5.954,2558,5.954]],["t/443",[53,3.648,73,2.626,88,2.331,109,2.401,218,3.61,242,3.797,338,2.688,882,4.417,940,4.45,1034,5.88,1074,5.794,1096,4.742,1889,5.363,1898,8.445,2529,7.149,2559,8.735,2560,7.656]],["t/445",[0,1.093,1,3.643,4,2.257,6,1.963,12,2.376,19,1.411,26,1.98,38,1.176,62,2.478,76,1.109,83,1.521,85,1.61,89,2.214,90,2.355,92,3.246,98,1.425,99,1.621,109,1.465,114,3.199,115,1.025,122,1.274,131,2.661,153,1.691,166,2.149,174,2.208,185,1.75,212,2.057,218,1.824,228,1.452,230,1.206,231,1.417,254,2.65,278,4.785,294,1.703,322,3.087,324,2.583,333,3.069,338,1.64,343,1.816,346,1.891,349,0.974,352,1.523,355,1.544,356,1.078,358,1.615,383,1.816,405,1.857,409,2.275,410,2.121,412,2.121,425,1.559,426,2.243,570,1.452,619,2.81,652,2.164,688,1.757,703,1.891,822,2.23,877,2.304,882,1.685,889,2.164,936,2.981,940,2.715,974,2.803,1047,1.481,1050,2.355,1077,1.865,1124,1.481,1128,1.549,1144,3.493,1153,1.928,1319,1.801,1506,1.615,1508,1.9,1548,2.179,1549,3.05,1562,2.583,1610,3.011,1614,4.137,1619,3.703,1628,4.429,1629,2.833,1630,2.524,1631,2.355,1634,2.799,1637,3.221,1638,4.037,1639,2.726,1697,2.524,1708,2.226,1728,1.882,1846,2.65,1857,3.655,1869,2.179,1897,2.616,1942,1.808,1943,2.65,1956,7.518,1980,3.655,2120,5.45,2210,2.149,2278,2.524,2303,3.129,2402,2.981,2441,4.769,2503,2.398,2516,2.335,2519,3.05,2527,2.095,2529,2.726,2561,4.628,2562,2.583,2563,2.981,2564,2.769,2565,3.655,2566,4.769,2567,5.847,2568,5.847,2569,3.936,2570,5.329,2571,3.936,2572,3.936,2573,3.936,2574,3.655,2575,6.297,2576,7.869,2577,5.847,2578,2.865,2579,3.331,2580,3.936,2581,3.936,2582,3.47,2583,3.47]],["t/447",[19,1.558,41,2.402,53,3.957,62,4.406,116,3.475,174,3.048,230,2.663,238,5.512,350,3.555,352,2.102,401,3.943,562,3.628,864,5.346,940,5.339,974,3.096,1144,2.894,1153,6.067,1293,5.2,1610,4.157,1614,5.886,1619,6.584,2533,7.662,2566,8.479,2567,12.145,2568,10.396,2584,11.196]],["t/449",[19,2.17,76,2.773,109,2.816,114,4.999,122,3.186,131,2.049,174,3.451,338,3.152,882,4.211,1074,5.524,1144,4.366,1381,8.674,1506,4.038,1549,7.625,1610,4.706,1798,5.373,1956,6.717,2585,11.24]],["t/451",[9,4.629,19,1.395,76,2.193,103,3.576,109,1.811,137,3.776,174,2.73,181,3.776,225,2.662,230,3.19,231,2.802,336,3.671,338,2.711,342,2.282,616,2.232,622,5.234,665,5.391,735,3.026,798,6.834,822,2.206,913,3.832,1076,5.867,1096,3.576,1144,4.57,1506,3.194,1610,5.611,1614,5.474,1616,4.068,1792,4.698,2078,5.172,2082,8.068,2169,5.888,2483,6.468,2521,9.179,2565,10.896,2586,5.241]],["t/453",[6,1.788,19,1.285,41,2.413,53,4.28,72,2.427,98,2.594,109,1.667,113,3.013,115,2.564,131,1.492,135,2.902,225,2.451,228,2.644,230,2.196,310,2.622,315,1.955,342,2.101,408,5.79,598,6.702,617,2.004,741,4.377,822,2.791,940,5.221,974,2.553,1096,3.292,1144,2.386,1276,4.825,1300,3.994,1610,3.427,1612,4.763,1614,5.176,1646,3.292,1798,3.913,1919,2.961,2316,5.341,2526,7.304,2527,5.24,2534,9.143,2587,5.428,2588,5.864,2589,6.655,2590,4.023,2591,7.629,2592,11.248,2593,6.317,2594,9.846,2595,6.82]],["t/455",[0,0.53,1,2.758,4,2.098,6,1.189,19,1.931,20,1.521,30,1.153,31,5.374,32,3.869,33,1.65,34,2.931,35,1.962,36,5.697,41,1.569,43,2.656,50,4.077,53,2.585,66,1.836,72,1.614,78,2.758,80,2.536,89,2.572,90,4.376,91,2.76,109,1.109,110,1.887,115,1.241,122,1.543,125,1.899,131,2.243,136,2.011,187,2.506,215,2.536,242,3.275,276,3.022,278,4.737,283,4.034,322,3.492,324,4.801,338,1.905,346,2.29,352,2.415,383,2.199,396,2.602,404,2.803,409,2.115,412,2.568,426,1.698,486,2.335,882,2.04,939,2.11,940,3.838,960,3.723,974,2.606,1040,3.13,1074,2.675,1144,3.325,1151,3.091,1330,4.457,1361,2.323,1509,5.145,1510,3.352,1511,3.253,1512,3.469,1513,5.426,1514,3.352,1519,4.667,1523,2.736,1549,3.693,1581,2.335,1610,2.279,1614,3.846,1629,2.144,1960,2.238,2033,2.931,2169,2.695,2223,4.049,2224,3.091,2262,2.086,2532,3.609,2582,4.201,2583,4.201,2596,4.034,2597,4.425,2598,4.766,2599,2.568,2600,4.034,2601,4.766,2602,8.902,2603,8.902,2604,8.902,2605,3.128,2606,3.253,2607,4.425]],["t/457",[6,2.23,19,1.602,73,2.274,99,3.68,100,5.256,131,2.613,186,5.017,231,3.217,306,4.054,401,4.054,615,4.071,621,5.258,622,4.492,735,3.474,963,6.286,1006,4.727,1047,3.363,1065,6.925,1153,6.147,1182,5.551,1186,5.551,1298,5.551,1634,5.578,1646,4.106,2156,5.73,2233,5.131,2358,6.504,2475,5.3,2587,6.769,2608,7.564]],["t/459",[20,2.63,109,2.462,115,2.755,119,5.983,131,2.634,390,3.72,413,4.313,429,5.013,718,4.356,889,5.816,1153,5.183,2609,8.954,2610,6.074]],["t/461",[0,0.484,4,1.957,6,1.087,20,0.906,26,1.37,30,1.054,31,2.63,32,3.608,33,1.508,34,2.679,35,1.829,36,5.796,41,0.935,42,3.011,43,3.802,50,3.802,56,4.227,57,4.296,60,1.323,62,1.714,66,1.735,73,2.139,80,2.318,84,2.277,88,0.984,131,2.151,146,1.838,216,7.026,218,1.262,225,1.49,244,2.501,336,2.055,342,2,349,2.08,352,2.034,404,2.562,413,2.781,415,2.583,426,1.552,444,1.844,448,1.725,450,2.123,514,1.683,595,2.29,616,1.249,692,2.122,718,1.794,914,2.63,939,1.929,940,4.103,974,1.552,1040,4.286,1077,2.064,1122,4.622,1136,2.501,1142,7.192,1153,2.134,1330,3.753,1344,3.057,1361,2.123,1509,4.799,1510,3.064,1511,2.974,1512,3.17,1513,5.061,1514,3.064,1519,5.122,1614,2.29,1629,1.96,1708,2.463,1734,2.793,1820,2.318,1873,2.018,1874,2.055,2062,3.231,2150,3.115,2223,3.776,2224,2.825,2509,2.318,2510,2.52,2511,2.606,2512,3.115,2600,7.117,2605,2.859,2606,2.974,2611,3.463,2612,3.84,2613,3.299,2614,3.84,2615,4.356,2616,3.84,2617,4.356,2618,11.455,2619,10.959,2620,8.409,2621,8.409,2622,8.409]],["t/463",[0,1.061,9,4.243,20,1.984,49,4.026,53,4.198,76,2.689,110,3.779,115,2.485,131,1.987,230,2.924,315,2.603,339,5.848,355,3.744,614,3.373,658,3.28,852,3.815,882,4.084,940,5.121,1099,5.566,1276,6.425,1506,3.916,1605,6.824,1640,5.079,2623,6.713,2624,7.809]],["t/465",[0,1.129,131,2.57,155,4.346,225,3.473,336,4.79,338,2.645,342,2.978,452,4.431,467,4.812,672,4.034,694,4.88,696,4.88,832,4.284,833,4.315,1156,5.847,1157,3.656]],["t/467",[0,1.352,4,3.934,20,2.062,218,3.524,294,4.292,413,4.958,426,4.333,474,5.344,548,4.907,619,5.429,1873,4.595,1874,4.677,2625,8.115,2626,5.933,2627,5.832]],["t/469",[38,3.889,127,4.612,381,5.309,383,4.47,448,3.837,474,5.222,692,3.014,735,4.661,2145,6.831,2350,4.57,2626,7.173,2627,7.051,2628,7.702,2629,8.997,2630,7.338,2631,7.187,2632,7.508,2633,5.562,2634,9.69]],["t/472",[41,2.687,231,3.746,377,5.8,494,7.573,749,4.801,1084,9.173,1115,5.376,1149,6.53,1705,4.74,2635,7.441,2636,8.515,2637,9.451,2638,8.515,2639,8.272]],["t/474",[6,2.534,41,2.648,231,3.656,375,6.023,377,5.66,494,7.391,749,4.685,1149,6.373,1705,4.626,2635,7.262,2636,8.31,2637,9.351,2638,8.31,2639,8.073,2640,8.595,2641,6.838,2642,8.952]],["t/476",[6,2.534,41,2.648,231,3.656,377,5.66,494,7.391,749,4.685,997,6.373,1149,6.373,1705,4.626,2635,7.262,2636,8.31,2637,9.351,2638,8.31,2639,8.073,2641,6.838,2643,10.156,2644,7.391]],["t/478",[6,2.494,41,2.622,231,3.598,375,7.249,377,5.571,494,7.274,749,4.612,997,7.669,1149,6.272,1705,4.553,2635,7.147,2636,8.179,2637,9.286,2638,8.179,2639,7.945,2641,6.73,2645,8.811]],["t/480",[41,2.945,339,3.834,349,1.28,355,3.055,358,2.124,377,4.34,409,3.393,481,2.789,618,3.069,735,2.012,830,7.836,930,3.396,1003,2.658,1149,7.642,1481,8.071,2479,6.145,2626,3.096,2627,3.043,2637,9.655,2646,7.255,2647,7.091,2648,7.787,2649,5.175,2650,7.581,2651,5.667,2652,6.864,2653,7.327,2654,5.394,2655,8.28,2656,8.523,2657,8.523,2658,8.523,2659,6.591,2660,8.523,2661,6.372]],["t/482",[2,2.116,5,1.866,18,1.365,19,0.578,20,2.285,38,2.049,75,5.253,88,0.728,95,2.171,96,1.488,98,1.167,111,2.814,115,2.306,117,1.946,118,1.969,134,2.347,135,1.306,159,1.866,166,1.761,210,1.965,218,2.313,230,2.102,343,1.488,377,2.983,379,6.453,381,2.37,386,2.398,390,1.134,401,1.463,409,1.547,413,2.182,425,1.277,448,4.487,457,1.81,467,1.528,494,6.446,496,4.576,612,2.609,679,2.842,741,3.05,827,2.499,840,1.929,841,1.721,845,3.121,847,1.823,850,6.719,992,5.602,994,7.574,997,2.023,1043,1.445,1093,2.116,1105,2.143,1245,2.347,1319,3.138,1346,2.068,1398,3.471,1548,2.962,1634,1.434,1792,1.946,1793,1.81,1941,3.324,2145,6.624,2160,3.895,2236,7.152,2276,3.603,2378,2.045,2417,2.233,2479,2.116,2552,4.529,2590,6.913,2599,2.884,2635,2.306,2640,2.729,2641,5.377,2642,2.842,2644,2.347,2645,4.717,2647,2.442,2654,3.707,2662,2.045,2663,2.091,2664,2.994,2665,2.639,2666,2.116,2667,4.254,2668,2.268,2669,3.628,2670,6.37,2671,6.047,2672,2.842,2673,2.994,2674,9.688,2675,2.729,2676,2.994,2677,3.225,2678,2.842,2679,5.666,2680,2.994,2681,1.881,2682,2.994,2683,2.171,2684,2.442,2685,2.392,2686,2.639,2687,6.37,2688,2.442,2689,2.842,2690,2.068,2691,2.994,2692,2.442,2693,7.039,2694,4.717,2695,2.842,2696,2.842,2697,4.254,2698,5.613,2699,2.994,2700,2.842,2701,4.529,2702,2.842,2703,2.499,2704,2.729,2705,2.729,2706,2.842,2707,2.994,2708,2.842,2709,2.347,2710,2.994,2711,3.225,2712,3.225,2713,2.994,2714,2.994,2715,2.639]],["t/484",[6,1.819,110,2.887,131,1.518,231,4.391,316,2.298,349,1.803,357,2.676,375,7.234,377,6.798,494,8.877,577,4.442,741,3.241,877,2.668,997,8.013,1115,6.301,1155,5.674,1565,7.91,1576,9.695,1629,3.28,2626,4.362,2627,4.287,2635,8.722,2636,9.98,2640,6.17,2641,8.876,2642,6.426,2644,5.306,2645,6.426,2690,6.388]],["t/486",[20,2.128,60,3.11,62,4.029,136,4.319,358,4.201,1328,4.744,1461,6.18,1488,7.451,2111,6.424,2187,6.237,2626,7.982,2627,7.293,2716,8.664,2717,8.377,2718,9.506,2719,9.506]],["t/488",[20,2.046,73,2.503,88,2.223,219,4.999,409,2.845,453,4.82,548,4.869,680,6.175,692,3.765,696,4.728,990,6.364,1658,5.446,2295,7.161,2350,5.709,2626,5.887,2627,5.787,2633,6.949,2681,5.739,2720,7.822,2721,5.055]],["t/490",[41,2.32,56,5.435,57,5.524,226,4.694,227,3.914,270,3.359,298,6.256,304,2.699,352,2.615,749,5.912,960,3.542,1143,7.381,1149,6.785,1705,5.837,2637,9.606,2641,7.28,2644,7.869,2722,8.595,2723,7.651,2724,8.378,2725,5.795,2726,6.112,2727,5.707,2728,7.263,2729,7.263]],["t/492",[0,0.758,22,1.792,27,2.385,28,1.925,30,1.649,41,1.463,66,1.962,72,2.309,196,3.999,197,4.132,226,3.885,227,4.291,229,3.277,244,2.028,270,3.878,304,3.588,749,4.389,764,4.963,771,6.441,966,3.675,1135,4.655,1149,4.279,1291,3.484,1330,3.044,1674,4.279,1705,4.334,2625,5.58,2637,8.77,2641,4.591,2644,4.963,2724,5.284,2726,5.058,2727,4.723,2730,5.165,2731,6.719,2732,4.532,2733,5.302,2734,5.982,2735,9.272,2736,4.116,2737,4.08,2738,3.856,2739,7.092,2740,4.876,2741,8.708,2742,4.963,2743,3.801,2744,3.856]],["t/494",[38,2.23,41,2.94,47,1.634,131,1.019,242,3.725,298,2.832,310,3.311,315,1.335,339,2.41,355,2.929,377,2.728,386,5.867,409,2.616,437,3.11,548,2.422,830,7.293,841,1.574,879,3.879,1028,2.879,1096,2.249,1149,3.072,1272,5.096,1276,3.296,1312,4.507,1481,5.785,1606,3.879,1629,3.359,1945,3.341,2479,3.213,2626,2.928,2627,6.756,2637,9.959,2638,7.405,2639,5.934,2641,5.027,2646,3.793,2647,3.707,2650,5.434,2651,3.562,2652,4.315,2653,5.251,2654,3.39,2655,5.934,2656,6.109,2657,6.109,2658,6.109,2659,4.143,2660,6.109,2661,4.005,2666,3.213,2684,7.668,2724,3.793,2745,5.785,2746,3.891,2747,4.895,2748,3.891,2749,3.443,2750,4.895,2751,3.707,2752,4.895]],["t/496",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/498",[19,1.998,92,3.116,98,3.124,115,2.902,131,2.716,153,3.708,168,4.713,169,4.682,219,4.386,230,2.645,255,5.535,278,4.594,296,3.451,355,3.387,617,2.414,688,3.853,735,4.798,889,4.745,974,3.075,1002,5.979,1047,3.248,1128,3.397,1144,3.711,1317,4.053,1616,6.451,1638,7.147,1639,5.979,1942,3.966,2341,6.173,2515,7.064,2753,4.434]],["t/500",[0,1.015,19,1.637,84,4.772,127,4.346,228,3.368,310,3.341,315,2.49,340,3.838,341,4.806,342,2.677,349,2.858,356,2.5,357,2.453,453,4.473,595,4.8,616,3.82,692,2.84,700,5.242,852,3.65,1344,4.092,1557,4.664,1662,8.048,1774,6.773,1972,7.258,2187,5.563,2192,6.645,2754,9.131,2755,4.639]],["t/502",[0,0.922,18,3.511,19,1.487,20,1.724,89,2.916,103,3.81,294,3.589,310,3.034,338,2.16,341,4.518,342,2.432,349,2.686,356,2.27,357,2.228,358,3.403,425,3.284,426,2.954,532,5.744,570,3.06,576,4.962,616,3.115,617,3.385,696,3.985,844,4.386,1058,4.063,1074,4.655,1157,2.457,1303,6.281,1557,4.237,1598,5.379,1792,5.006,1968,5.511,2025,4.043,2610,4.761,2755,5.517,2756,8.293,2757,5.744,2758,4.413,2759,6.152,2760,4.725,2761,7.701]],["t/504",[0,0.825,4,2.128,6,3.306,18,3.141,19,1.33,47,2.476,99,3.055,106,4.757,113,3.119,116,2.966,131,2.384,174,2.602,349,1.835,356,2.031,452,2.664,567,3.729,570,3.719,612,3.616,614,2.622,616,2.128,617,2.819,670,4.226,680,4.655,693,2.966,718,3.055,1058,3.634,1157,3.392,1260,5.748,1303,5.618,1646,3.408,1968,4.93,2233,4.259,2263,3.749,2264,3.69,2755,5.122,2757,5.138,2758,7.442,2759,5.503,2760,4.226,2762,3.097,2763,6.07,2764,3.948,2765,5.787,2766,5.305,2767,7.419]],["t/506",[0,1.022,19,1.649,37,3.201,95,6.192,116,3.677,185,4.088,299,5.021,341,3.826,349,2.275,352,2.224,356,2.518,357,3.118,616,3.647,617,3.245,1058,4.505,1136,5.28,1820,4.894,1869,5.09,2758,7.328,2759,9.906,2760,6.612]],["t/508",[0,1.245,22,2.942,26,2.733,28,2.454,30,2.102,66,2.31,140,3.628,150,4.1,340,3.719,342,2.549,359,4.027,735,3.379,822,2.463,1040,4.354,1058,5.484,1061,5.058,1063,5.886,1133,5.573,1144,2.894,1557,4.44,1610,4.157,1616,4.543,2075,4.44,2758,6.591,2768,7.825,2769,6.735,2770,5.2]],["t/510",[0,1.225,5,3.989,19,1.236,22,2.519,26,2.168,28,1.946,30,1.667,37,2.399,47,2.301,66,1.977,89,2.424,115,1.795,116,2.756,118,2.536,119,3.898,125,2.747,140,2.878,150,3.251,153,2.961,166,3.764,252,3.208,340,3.184,341,4.584,342,2.811,359,3.194,390,2.424,401,3.127,425,2.73,450,3.36,616,3.416,688,3.077,696,3.312,735,2.68,822,1.954,841,2.217,1040,3.874,1043,3.089,1058,4.696,1061,4.33,1063,5.039,1105,4.581,1133,4.42,1144,2.295,1557,4.897,1610,3.297,1616,3.603,2075,3.522,2151,6.401,2564,4.849,2758,5.864,2760,3.927,2769,5.342,2770,4.124,2771,11.911,2772,6.894,2773,5.42]],["t/512",[0,0.994,20,1.858,39,3.192,45,2.983,73,2.274,131,2.613,136,3.77,231,3.217,340,2.969,349,2.211,352,3.035,356,2.447,616,3.269,692,2.78,735,4.878,956,3.064,1082,5.668,1616,6.558,1741,4.946,2256,5.092,2599,4.816,2758,6.065,2759,6.629,2774,5.668,2775,6.925,2776,6.769,2777,7.104]],["t/514",[0,1.181,4,1.846,6,1.606,19,1.154,22,2.401,23,4.641,25,3.093,26,2.024,28,1.818,30,1.557,33,2.229,42,2.918,45,3.049,66,1.885,91,2.43,116,3.652,125,2.565,131,2.211,153,2.765,218,1.865,299,3.515,341,3.8,342,2.679,352,1.557,357,1.73,358,2.642,403,3.307,407,2.624,616,3.636,619,2.873,632,3.696,633,3.385,636,5.76,695,4.175,735,3.551,939,2.851,1040,4.291,1043,2.885,1128,2.533,1517,3.064,1520,3.307,1545,5.092,1557,4.667,1585,3.725,1616,4.775,2768,5.466,2773,3.64,2774,6.734,2778,4.876,2779,4.988,2780,6.151,2781,6.353,2782,8.053,2783,5.675,2784,5.978,2785,5.675,2786,5.978]],["t/516",[0,1.086,6,2.05,19,0.997,20,1.156,22,2.159,26,1.749,28,1.57,30,1.345,66,1.695,115,1.448,116,2.223,131,2.398,136,2.346,140,2.322,150,2.623,215,2.96,243,2.924,306,2.523,322,2.182,325,2.611,340,1.847,341,4.791,342,1.631,349,1.376,352,1.345,355,2.182,359,2.577,430,2.925,433,4.754,567,2.795,616,3.813,699,2.434,735,3.799,822,1.576,879,4.269,1038,2.453,1040,3.436,1047,2.093,1058,2.724,1061,3.712,1063,4.32,1144,1.852,1557,2.841,1581,2.724,1610,2.66,1614,4.32,1616,5.107,1617,3.607,1618,4.902,1640,2.96,1656,3.017,1668,4.125,1741,3.078,1803,3.967,1826,3.744,1899,3.527,2025,4.005,2075,2.841,2228,3.566,2316,3.017,2475,3.298,2690,3.566,2758,5.2,2765,4.717,2768,6.457,2769,4.309,2770,3.327,2773,3.145,2781,3.327,2782,4.902,2787,4.047,2788,5.164,2789,5.562,2790,3.912,2791,5.164,2792,4.309,2793,5.164,2794,4.125,2795,4.421,2796,4.212]],["t/518",[0,1.03,20,1.366,22,2.436,26,2.066,28,1.855,30,1.589,33,2.276,39,3.835,45,3.584,66,1.912,88,1.484,125,2.619,131,2.789,140,2.743,150,3.1,165,3.967,228,2.424,230,2.84,231,3.866,340,2.183,342,1.927,348,3.286,352,1.589,359,3.045,405,3.1,425,2.602,616,3.345,735,3.603,822,1.863,966,3.542,1040,3.776,1058,3.219,1061,4.188,1063,4.873,1557,3.357,1616,4.844,1635,6.012,1864,4.875,2075,4.735,2736,3.967,2758,5.715,2768,6.978,2769,5.092,2770,3.932,2775,9.038,2776,4.977,2777,8.536,2797,5.793,2798,4.977,2799,4.783]],["t/520",[0,1.225,42,1.894,218,3.45,272,3.312,328,6.084,409,2.771,632,3.957,633,3.624,636,3.739,638,4.581,640,4.088,745,4.855,774,5.342,818,3.376,822,1.954,824,5.42,960,3.139,1361,4.672,1619,4.054,1620,5.864,1621,5.221,1622,8.249,1623,7.427,1624,5.342,1626,6.845,1627,3.297,1847,5.221,2116,5.017,2439,5.834,2441,8.345,2502,8.112,2800,5.641,2801,6.077,2802,6.077,2803,5.017,2804,5.641,2805,9.713,2806,3.957,2807,6.077,2808,5.834,2809,6.077,2810,6.077,2811,5.017,2812,6.077,2813,6.077,2814,9.713]],["t/522",[0,1.359,19,2.191,38,2.986,118,3.677,125,3.983,153,4.294,185,4.444,320,3.627,341,5.084,342,2.931,356,2.736,425,3.958,616,3.505,1557,5.106,2516,5.928,2563,7.57,2773,5.652,2815,6.09]],["t/524",[0,1.303,22,2.454,23,3.374,25,3.191,26,2.088,28,1.875,30,1.606,33,2.299,42,2.566,45,2.216,66,1.926,91,2.506,98,2.403,109,2.173,115,1.729,116,2.655,131,1.383,140,2.772,341,4.493,342,2.738,430,1.988,469,4.046,616,3.915,617,1.857,632,5.361,633,4.909,688,2.964,735,2.581,1040,4.341,1043,2.976,1105,6.205,1362,4.833,1517,3.161,1520,3.411,1537,4.471,1545,5.204,1557,4.77,1585,3.842,1616,3.471,2768,5.586,2773,3.755,2774,7.431,2778,5.029,2779,7.235,2780,4.471,2781,7.01,2816,6.641,2817,6.641,2818,6.641,2819,6.641,2820,6.166]],["t/526",[0,1.062,19,1.229,20,1.985,41,1.471,42,3.019,45,2.288,98,2.482,109,2.222,122,2.22,131,2.474,155,2.934,174,3.349,181,3.326,229,4.588,241,3.06,242,2.522,322,2.69,338,1.785,349,1.696,352,1.658,356,2.614,452,2.462,453,3.359,481,3.695,548,4.725,616,1.966,658,2.356,692,2.132,718,2.823,735,3.712,882,2.934,913,3.376,974,3.401,1028,4.032,1040,3.863,1074,3.849,1153,3.359,1157,2.031,1298,4.259,1519,5.554,1616,4.991,2233,3.936,2483,4.259,2596,5.803,2780,4.616,2781,4.102,2821,5.193,2822,6.95,2823,7.083,2824,10.988,2825,8.082,2826,8.867,2827,5.803,2828,5.313]],["t/528",[0,1.396,18,2.407,19,1.019,20,2.268,41,1.792,76,1.602,88,1.887,89,2.937,96,2.623,98,3.583,114,5.543,115,2.175,183,2.204,185,4.401,193,3.031,242,3.073,308,4.586,309,3.189,310,3.056,315,1.551,341,4.835,342,2.903,349,1.406,352,1.375,355,2.231,356,1.557,358,2.334,409,1.644,430,3.265,467,3.957,481,3.064,570,2.098,616,3.333,617,1.59,688,2.538,703,2.732,712,4.118,745,3.405,773,3.371,879,4.34,914,5.042,1154,3.045,1518,2.341,1547,3.147,1550,4.218,1557,4.267,1634,2.528,1795,3.779,1869,3.147,1899,3.606,2233,3.264,2434,3.882,2755,4.243,2829,5.02,2830,10.13,2831,3.829,2832,9.9,2833,3.779]],["t/530",[19,1.487,20,1.725,22,1.481,30,1.363,39,3.517,41,2.484,42,2.985,45,1.881,47,1.881,49,2.377,54,3.287,66,1.712,69,1.85,88,1.273,115,1.468,125,2.246,160,2.546,182,2.848,196,3.488,197,3.604,227,3.003,229,2.708,242,3.623,310,2.062,315,1.537,320,2.045,341,2.344,346,2.708,357,1.514,358,2.313,548,2.789,616,2.824,617,2.32,683,3.36,749,2.6,771,5.982,773,2.275,852,2.253,966,3.037,1053,2.457,1057,3.847,1124,2.121,1155,2.818,1627,3.968,2228,3.613,2278,3.613,2610,3.235,2623,3.964,2732,3.745,2733,4.625,2734,5.377,2736,3.402,2737,3.372,2738,3.187,2739,3.372,2743,3.141,2744,3.187,2755,4.216,2829,2.253,2831,3.794,2834,6.098,2835,4.48,2836,4.03,2837,4.611,2838,8.681,2839,9.576,2840,3.699,2841,8.681,2842,10.207,2843,4.18,2844,3.261,2845,4.102,2846,3.847,2847,4.367,2848,3.261,2849,4.102]],["t/532",[19,2.157,85,3.348,88,1.849,108,5.727,131,2.662,174,2.871,275,5.853,357,3.568,359,5.575,428,4.629,567,4.114,598,4.531,614,2.893,754,3.529,906,3.897,960,3.527,972,4.526,1053,3.569,1157,2.425,1313,6.072,1646,3.761,1886,5.137,1919,3.382,2762,4.495,2764,4.356,2850,6.928,2851,5.309,2852,7.601,2853,7.601,2854,5.137,2855,7.601,2856,4.855,2857,6.507,2858,6.698]],["t/534",[0,1.03,22,2.436,26,2.915,28,1.855,30,1.589,33,2.276,45,3.094,66,1.912,97,4.168,114,3.339,140,2.743,150,4.372,155,2.813,170,4.154,185,2.921,294,4.011,315,1.792,341,3.856,342,1.927,343,3.032,352,1.589,361,3.817,407,3.779,444,2.782,452,2.359,476,5.793,514,2.539,532,5.68,616,2.659,633,3.455,938,4.367,966,3.542,1040,3.259,1082,4.168,1157,1.947,1557,3.357,1625,4.168,1865,5.224,2075,4.735,2169,5.242,2736,3.967,2758,4.933,2759,7.966,2770,3.932,2774,4.168,2775,8.321,2776,4.977,2777,8.536,2781,5.546,2823,6.876,2825,5.562,2827,5.562,2859,5.793,2860,4.977,2861,5.793,2862,6.102,2863,8.395,2864,6.572]],["t/536",[0,1.12,131,2.098,155,4.312,338,2.623,341,4.191,342,2.954,452,4.409,467,4.774,616,2.89,672,4.002,694,4.841,696,4.841,832,4.25,833,4.281,1156,5.819,1157,3.638,2755,5.118,2865,6.322]],["t/538",[0,1.488,19,1.85,20,2.146,115,2.688,170,4.625,357,2.773,407,4.207,528,7.656,529,7.997,530,7.149,532,6.592,595,5.426,2460,6.477,2610,5.925,2866,7.656]],["t/540",[8,5.576,60,2.856,62,3.7,81,4.561,164,4.751,225,4.024,310,3.44,349,2.325,356,2.574,361,3.871,392,4.301,521,5.44,540,8.897,617,2.629,693,3.758,704,5.035,1305,6.723,2338,7.12,2509,5.003,2822,6.842,2867,7.12,2868,9.402,2869,6.974,2870,7.285,2871,9.402,2872,9.402,2873,9.402]],["t/542",[0,1.428,19,1.945,140,4.53,211,5.214,356,2.971,361,4.468,407,4.424,533,6.492,540,8.894,2209,8.626]],["t/544",[0,1.25,3,3.185,4,2.51,19,1.569,20,1.82,42,3.09,76,2.466,91,3.303,109,2.036,122,2.834,131,1.822,328,5.744,388,4.422,413,3.568,452,3.142,594,5.676,633,5.912,939,3.875,960,2.866,1157,2.593,1619,5.147,1626,6.985,1627,5.378,2599,4.717,2826,8.127,2874,5.492,2875,12.425,2876,12.425,2877,8.752,2878,8.752]],["t/546",[0,1.377,19,2.007,26,3.52,114,4.416,136,3.667,140,3.628,170,5.017,328,6.681,342,3.283,356,2.379,361,4.61,407,4.564,533,5.2,540,6.02,632,4.99,633,5.886,636,6.073,640,6.64,641,6.447,841,2.795,2879,8.692,2880,8.479,2881,8.071,2882,7.662,2883,8.692,2884,6.326]],["t/548",[4,3.169,20,1.771,66,2.279,73,2.167,88,1.924,196,4.645,197,4.799,338,2.218,343,3.929,350,3.483,359,3.946,394,3.832,602,2.732,773,4.46,2114,8.561,2263,5.583,2264,5.495,2885,12.148,2886,4.816,2887,10.259,2888,10.62,2889,6.933,2890,7.57]],["t/550",[3,3.336,41,2.801,244,3.777,295,6.828,297,5.476,304,2.119,312,3.715,328,5.44,390,3.224,409,3.079,452,2.323,745,3.738,759,2.998,773,4.676,818,3.549,823,4.956,950,7.269,1064,5.014,1157,1.917,1293,3.871,1334,2.374,1515,4.357,1728,3.094,1820,3.444,2509,3.444,2887,11.791,2888,10.39,2891,6.87,2892,5.703,2893,6.471,2894,9.169,2895,5.014,2896,3.715,2897,6.471,2898,6.471,2899,6.471,2900,6.471,2901,7.288,2902,5.295,2903,6.009,2904,4.197,2905,6.009]],["t/552",[0,0.835,20,1.561,41,3.008,111,3.947,116,4.606,135,3.04,160,3.391,304,2.459,349,1.857,356,2.055,409,2.17,617,2.099,773,5.659,1058,3.677,1790,3.607,1919,3.101,1920,5.624,1967,6.142,1969,5.568,2885,8.958,2886,4.245,2890,8.177,2896,5.834,2906,5.568,2907,13.598,2908,5.311,2909,4.813,2910,6.142]],["t/554",[47,3.336,88,2.258,98,3.618,160,4.516,309,3.816,310,4.472,338,2.603,349,3.023,355,4.795,540,6.923,617,3.417,712,4.158,2830,9.281,2885,10.773,2886,5.652,2911,9.996,2912,9.996]],["t/556",[41,2.701,69,2.955,328,5.848,329,6.926,693,4.577,712,3.744,745,5.401,818,3.507,1569,5.25,1926,7.172,2888,7.365,2891,5.338,2892,4.431,2913,6.817,2914,5.981,2915,5.914,2916,9.001,2917,9.001,2918,6.144]],["t/558",[22,2.268,41,2.898,69,4.053,244,2.568,693,4.456,712,3.591,818,3.996,1569,7.2,2613,9.349,2888,7.064,2892,6.078,2919,12.345,2920,13.046,2921,8.633,2922,8.633,2923,10.447,2924,7.306,2925,7.147]],["t/560",[22,1.811,41,2.852,244,2.851,262,3.153,272,3.312,325,5.174,712,2.868,1629,3.102,2235,5.197,2888,5.641,2892,3.394,2923,5.834,2926,13.555,2927,12.518,2928,11.797,2929,6.894,2930,9.585,2931,11.02,2932,9.585,2933,9.585,2934,9.585,2935,9.585,2936,9.585,2937,9.585,2938,6.894,2939,11.911,2940,6.401,2941,5.48,2942,8.538,2943,8.759,2944,4.088,2945,5.834]],["t/562",[0,1.147,155,4.417,338,2.688,452,4.474,467,4.89,540,8.632,672,4.1,694,4.959,832,4.354,833,4.385,1156,5.905,1157,3.692,1453,7.817,1454,7.656]],["t/565",[11,3.911,19,1.172,38,1.953,47,2.182,85,3.777,88,1.477,110,2.589,118,2.405,119,3.697,127,3.112,156,4.528,230,2.003,317,2.264,338,2.405,386,4.799,401,2.966,452,2.347,468,3.725,569,5.763,614,3.785,616,2.649,617,3.74,618,3.877,682,7.21,683,4.971,684,3.458,685,6.071,686,6.885,687,4.345,688,2.918,689,3.983,690,5.533,691,4.528,741,4.106,852,4.281,854,4.951,926,4.192,1004,4.528,1277,6.851,1646,4.92,1790,4.437,1803,5.17,1919,2.701,2187,3.983,2485,8.512,2946,6.538,2947,10.709,2948,10.709]],["t/567",[0,0.801,19,1.772,33,3.906,47,3.299,73,1.834,83,2.785,88,1.628,98,2.609,118,2.652,275,5.154,315,3.469,338,1.877,349,1.783,356,1.973,394,3.243,612,6.2,616,2.067,670,6.427,682,4.853,683,2.919,752,5.136,840,4.312,906,3.431,1004,8.407,1082,4.571,1334,3.627,1646,5.576,2276,4.853,2590,6.814,2758,3.836,2762,3.009,2949,5.459,2950,6.1,2951,6.1,2952,5.898,2953,8.544,2954,5.459,2955,6.353,2956,6.353,2957,6.353,2958,6.353,2959,6.693,2960,6.353,2961,5.585]],["t/570",[0,0.485,18,1.073,19,1.031,22,2.37,26,1.808,27,2.011,28,0.715,30,0.613,33,0.877,41,2.29,47,2.571,53,0.896,54,1.478,60,0.77,66,0.9,73,1.738,76,0.714,85,3.444,88,0.572,98,0.917,109,1.016,115,1.137,132,2.589,140,1.058,146,1.069,150,2.059,155,1.085,224,1.706,242,3.805,244,1.71,259,1.201,262,1.997,275,1.812,291,2.901,293,1.503,298,3.326,315,0.691,317,0.877,338,1.137,341,1.054,342,0.743,351,1.919,352,1.391,355,2.681,358,1.04,386,2.576,394,1.14,400,2.171,430,0.758,591,1.274,612,2.803,614,0.896,616,1.649,617,2.891,658,0.871,682,4.601,683,2.767,688,1.131,689,1.544,708,1.812,712,1.054,718,1.043,732,1.478,741,4.429,742,5.978,749,2.653,752,1.317,753,1.433,759,2.022,771,1.309,822,2.386,826,3.646,852,1.745,863,1.684,879,2.987,888,1.964,966,1.366,974,0.903,990,1.332,1036,1.085,1038,3.014,1040,1.535,1061,1.972,1063,3.592,1066,1.503,1082,2.768,1128,2.262,1129,1.393,1132,3.925,1271,2.145,1334,0.93,1508,1.223,1557,1.295,1578,1.254,1625,1.607,1630,1.625,1646,2.641,1660,2.074,1705,2.619,1709,1.26,1713,1.918,1744,6.377,1790,3.702,1803,3.719,1820,1.349,1919,3.726,1920,1.403,1924,2.014,1925,1.919,1932,1.73,2075,1.295,2125,1.574,2210,1.384,2235,1.195,2599,1.366,2736,1.53,2755,3.914,2758,3.06,2762,4.317,2768,4.088,2770,1.516,2786,2.353,2909,2.799,2915,3.98,2925,1.625,2949,1.919,2950,2.145,2951,2.145,2952,2.074,2953,3.306,2954,1.919,2962,2.074,2963,2.534,2964,2.353,2965,1.88,2966,2.534,2967,3.847,2968,2.534,2969,3.177,2970,2.014,2971,5.427,2972,4.365,2973,9.019,2974,4.354,2975,1.964,2976,6.833,2977,2.234,2978,5.591,2979,2.534,2980,1.73,2981,4.704,2982,6.833,2983,2.534,2984,8.42,2985,9.019,2986,9.527,2987,3.729,2988,4.866,2989,4.455,2990,5.339,2991,2.353,2992,2.353,2993,2.074,2994,2.074]],["t/572",[0,0.505,12,1.715,19,0.815,20,0.945,22,2.558,26,1.429,27,3.022,28,1.283,30,1.099,41,2.392,42,1.937,45,2.353,66,1.782,69,2.315,73,1.156,76,1.28,109,1.057,150,2.143,226,4.017,227,1.644,229,3.387,242,4.103,244,2.097,302,3.281,316,2.722,323,2.551,325,3.31,328,2.321,341,1.89,342,1.332,430,2.11,437,3.622,438,3.642,444,1.924,616,2.022,682,4.747,683,3.498,692,1.413,693,5.137,702,4.424,704,2.433,736,7.544,752,5.058,844,3.729,900,2.389,914,2.743,966,4.656,1043,2.036,1061,3.185,1124,3.251,1334,3.572,1585,2.629,1629,2.044,2075,3.602,2092,4.959,2093,3.718,2738,4.885,2766,3.249,2768,2.718,2774,2.881,2823,3.37,2901,5.604,2953,7.373,2954,7.373,2995,7.615,2996,3.521,2997,7.05,2998,6.546,2999,6.546,3000,10.326,3001,6.546,3002,6.47,3003,6.546,3004,6.242,3005,3.521,3006,6.546,3007,4.219]],["t/574",[252,4.883,317,4.669,320,3.808,413,4.277,448,4.155,682,9.078,683,5.46,692,3.263,694,5.041,696,5.041]],["t/576",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/579",[9,4.307,19,1.737,228,3.575,401,4.396,477,7.702,584,8.2,614,4.602,615,4.414,658,3.33,670,5.52,852,3.873,901,8.305,902,8.997,1065,7.508,1291,4.95,1518,3.99,3008,9.69,3009,8.997,3010,8.541,3011,7.187,3012,9.69,3013,9.69,3014,9.69]],["t/581",[102,7.983,231,3.57,401,5.968,593,6.289,614,4.299,756,3.952,924,5.933,1291,5.066,1456,6.77,1518,4.083,1572,5.784,1989,7.091,3015,6.509,3016,8.115,3017,9.209,3018,7.684,3019,8.742,3020,6.359,3021,9.917]],["t/583",[0,1.061,20,1.984,72,3.232,136,4.026,142,5.928,148,5.388,152,6.515,346,4.585,352,3.367,356,2.613,394,4.294,563,5.396,567,5.97,615,5.891,956,3.272,1124,3.591,1291,4.875,1965,7.586,2025,4.652,3022,7.809]],["t/585",[19,1.375,27,3.235,35,1.36,38,2.763,66,1.046,72,4.217,89,1.783,96,3.538,109,1.784,115,1.997,118,2.822,136,2.139,159,2.934,244,2.751,316,2.417,323,2.847,338,1.321,340,1.685,345,2.448,348,2.536,352,1.227,406,2.807,447,4.672,454,3.462,486,2.484,571,4.031,578,2.868,614,1.792,615,5.044,692,1.577,697,4.15,703,3.685,758,5.439,773,5.146,822,1.437,823,2.36,888,3.93,921,3.762,967,2.605,971,2.563,1124,1.908,1157,1.502,1277,3.762,1291,5.95,1293,3.034,1344,2.273,1471,2.484,1533,5.164,1562,3.328,1578,2.51,1598,3.289,1622,3.513,1634,3.409,1645,4.031,1709,2.522,1886,3.182,1938,3.09,2163,4.15,2170,4.15,2187,3.09,2267,4.709,2268,4.709,2564,3.567,2717,4.15,2829,2.027,2896,4.403,2944,5.485,3023,4.709,3024,5.072,3025,3.762,3026,3.567,3027,5.072,3028,3.415,3029,4.709,3030,4.15,3031,3.328,3032,4.031,3033,5.072,3034,5.072,3035,4.47,3036,5.072,3037,4.709,3038,4.709,3039,3.626,3040,5.072,3041,5.072,3042,5.072,3043,5.072,3044,4.47,3045,4.709,3046,5.072,3047,5.072,3048,5.072,3049,4.709,3050,4.709,3051,4.292,3052,4.709,3053,5.072,3054,4.709,3055,4.292]],["t/587",[0,0.283,3,0.926,6,0.635,18,1.077,19,1.62,20,1.199,22,1.151,27,1.532,28,0.718,30,1.395,33,0.881,35,2.423,39,1.564,41,1.237,42,0.699,49,1.073,54,1.484,66,2.205,69,1.893,72,1.483,73,0.647,84,1.33,88,0.575,111,1.338,115,0.663,131,0.53,142,1.58,147,1.631,148,3.828,151,1.762,152,1.737,164,1.286,193,0.923,221,1.536,222,1.449,225,1.498,228,0.939,244,1.715,310,0.931,315,1.194,316,1.817,336,2.066,338,0.663,340,1.455,342,1.284,345,1.228,348,1.272,349,1.426,352,1.868,355,2.262,358,1.044,361,1.803,392,1.164,405,1.2,413,1.785,430,1.311,444,1.077,450,2.135,464,2.075,467,1.205,488,2.668,514,0.983,548,1.259,557,2.022,567,3.882,576,3.45,614,1.548,615,6.342,619,1.955,658,1.505,660,1.58,661,1.211,692,1.362,716,1.154,725,1.24,727,2.408,735,0.989,741,1.947,754,2.486,759,1.179,772,1.286,807,1.887,817,1.484,822,0.721,823,1.184,841,1.408,845,2.555,852,1.017,861,1.614,867,1.461,901,1.762,906,1.211,930,1.67,956,3.272,966,1.371,971,2.914,974,2.054,979,4.677,980,1.927,990,2.303,1036,1.089,1043,1.14,1088,5.671,1115,2.263,1128,1.001,1156,1.205,1182,1.58,1291,2.237,1305,1.819,1317,1.195,1334,2.116,1446,2.99,1459,2.153,1622,3.034,1705,1.159,1709,1.265,1713,2.534,1728,2.095,1906,1.418,1941,2.721,1966,1.691,1986,1.522,2120,3.034,2138,2.153,2153,2.022,2154,2.362,2156,1.631,2192,1.852,2235,1.2,2241,1.408,2413,1.536,2460,1.597,2466,5.432,2495,1.887,2509,1.354,2599,2.36,2679,1.509,2683,1.713,2696,2.243,2736,1.536,2765,3.311,2969,1.852,3029,2.362,3056,4.067,3057,2.544,3058,1.65,3059,2.544,3060,3.707,3061,3.481,3062,1.971,3063,1.713,3064,2.544,3065,5.083,3066,4.067,3067,4.38,3068,3.707,3069,3.936,3070,2.022,3071,1.927,3072,2.362,3073,2.544,3074,2.362,3075,2.022,3076,2.544,3077,2.544,3078,2.243,3079,2.082,3080,2.362,3081,2.153,3082,2.362,3083,1.971,3084,4.38,3085,2.243,3086,1.286,3087,4.38,3088,2.362,3089,8.078,3090,4.38,3091,4.38,3092,6.852,3093,1.927,3094,2.544,3095,6.139,3096,2.022,3097,7.836,3098,2.544,3099,4.38,3100,4.38,3101,3.861,3102,2.544,3103,1.762,3104,1.819,3105,2.362,3106,1.362,3107,2.243,3108,2.544,3109,2.082,3110,1.461,3111,1.737,3112,1.737,3113,1.819]],["t/589",[0,1.166,142,6.517,148,4.76,349,2.595,352,2.538,356,2.872,557,8.34,567,5.274,615,5.734,1490,9.249,1795,6.973,1986,6.277,2241,5.807,3113,7.503,3114,10.493]],["t/591",[6,3.214,18,3.534,113,3.509,131,1.738,148,3.787,310,3.054,315,2.277,340,2.773,346,4.011,349,2.065,352,2.638,361,3.437,430,3.264,464,3.955,567,5.482,570,3.08,615,6.451,664,3.485,692,2.596,930,5.479,956,2.862,974,2.974,1047,3.141,1053,5.296,1919,3.449,1986,4.994,2595,5.782,2765,4.792,2884,6.075,3111,5.698,3112,5.698,3113,5.969]],["t/593",[19,1.865,45,3.473,99,4.285,131,2.167,211,5,228,3.839,357,2.796,409,3.008,448,4.121,595,5.471,619,4.645,696,5,893,7.881,1559,7.881,1588,6.282,1667,8.272,2828,8.063]],["t/595",[0,1.273,12,4.32,22,2.365,23,4.573,25,4.325,26,2.83,28,2.541,30,2.177,33,3.117,42,3.46,45,3.004,66,2.362,83,3.478,91,3.397,125,3.587,320,3.266,342,3.357,425,3.564,955,6.975,1517,4.284,1520,4.624,1545,6.381,1559,8.67,1585,5.208,1586,8.332,3115,6.974]],["t/597",[0,1.187,3,3.349,22,2.418,27,2.275,28,2.598,30,2.226,35,1.744,66,2.624,69,4.176,82,4.028,135,2.634,143,3.287,151,4.505,152,4.44,193,3.34,195,3.235,310,2.38,329,3.171,430,2.754,615,4.192,663,3.304,735,2.528,741,2.891,818,3.753,822,3.027,979,4.44,992,4.867,1061,5.245,1063,6.104,1088,4.081,1334,3.918,1634,2.891,1713,4.043,2466,4.575,2679,3.857,2794,4.825,3060,5.505,3083,5.04,3116,9.903,3117,5.203,3118,7.511,3119,5.733,3120,6.039,3121,4.825,3122,3.419]],["t/599",[0,1.236,3,3.528,22,2.548,27,3.391,28,1.979,30,1.695,35,1.879,39,2.503,41,1.504,42,1.926,54,4.087,66,2.474,69,2.301,82,4.244,88,1.583,135,2.838,151,4.854,152,4.784,154,4.193,193,2.543,221,4.23,222,3.993,244,2.884,430,2.098,548,3.468,663,3.56,735,2.724,818,2.97,822,3.151,979,4.784,992,5.128,1088,4.398,1334,2.571,1634,4.31,1713,4.26,2235,3.305,2466,4.929,2679,4.156,2794,5.198,3060,5.931,3083,5.43,3095,7.707,3097,10.322,3101,6.178,3103,4.854,3104,5.011,3105,6.507,3106,3.753,3116,5.308,3118,7.819,3119,6.178,3120,6.507,3121,5.198,3122,3.684,3123,5.931]],["t/602",[0,1.381,6,2.184,22,2.955,28,2.471,30,2.117,66,2.32,69,2.873,113,3.679,135,3.544,142,5.436,143,4.422,148,3.97,193,3.176,195,4.353,329,4.266,355,3.433,567,4.399,576,5.236,615,5.973,663,4.446,881,5.024,956,3,3101,7.715,3116,9.41,3117,4.949,3122,4.601,3124,7.407,3125,5.744,3126,8.752,3127,7.407,3128,7.407]],["t/604",[0,1.138,111,5.382,174,3.59,228,3.777,315,2.792,349,2.532,361,4.216,464,4.851,615,5.649,756,4.08,841,3.292,906,4.873,1969,7.594,2305,6.893,2516,6.072,3104,7.321,3127,8.664,3129,7.201]],["t/606",[0,0.842,11,2.224,20,0.773,21,1.585,38,1.11,62,1.463,73,1.53,76,1.047,93,2.043,116,1.486,131,0.774,155,1.591,231,1.338,315,1.014,316,1.171,368,4.553,370,4.779,386,2.694,390,2.114,392,2.75,405,1.753,430,4.309,475,4.104,514,1.436,522,2.502,567,1.868,614,1.314,615,5.737,727,2.043,735,1.445,741,1.652,777,3.698,806,5.734,823,1.73,825,2.574,872,4.46,896,2.574,960,3.524,971,1.878,972,3.183,974,1.324,992,4.005,1036,1.591,1047,1.399,1063,1.954,1115,5.28,1338,4.229,1570,5.734,1674,4.751,1696,2.658,1759,2.204,1938,2.264,1963,2.954,2103,2.537,2365,2.658,2378,2.357,2386,2.88,2566,2.815,2688,2.815,2697,4.779,3025,2.757,3069,2.537,3079,4.92,3127,10.059,3130,6.195,3131,3.451,3132,3.276,3133,5.583,3134,5.583,3135,6.674,3136,3.451,3137,3.717,3138,5.734,3139,2.954,3140,3.451,3141,3.451,3142,3.717,3143,3.276,3144,3.451,3145,5.583,3146,3.451,3147,3.276,3148,3.717,3149,3.717,3150,3.451,3151,3.276,3152,5.3,3153,3.451,3154,3.717,3155,3.451,3156,3.717,3157,3.451,3158,5.3,3159,2.658,3160,4.92,3161,3.451,3162,2.658,3163,5.583,3164,3.276,3165,3.717,3166,2.658,3167,3.717,3168,2.954,3169,5.583,3170,5.583,3171,3.451,3172,3.451,3173,3.041,3174,3.717,3175,9.383,3176,3.717,3177,3.717,3178,7.668,3179,5.583,3180,6.013]],["t/608",[0,1.089,19,1.001,20,1.161,22,1.468,28,1.577,30,1.351,35,2.211,38,1.668,47,1.864,66,2.49,73,2.097,88,1.262,110,2.212,131,1.717,142,7.961,148,2.534,193,2.027,316,1.76,349,2.039,357,2.215,430,3.453,464,2.647,588,4.065,615,5.5,735,2.171,754,3.554,806,6.243,818,1.711,822,1.583,823,3.836,847,4.661,930,3.666,956,3.708,967,4.235,971,2.823,972,3.465,974,2.936,1003,2.869,1088,3.505,1303,4.23,1334,3.595,1578,2.764,1713,5.069,1997,4.924,2753,2.869,2765,3.207,2851,3.623,3088,5.187,3116,4.23,3118,3.929,3130,4.571,3138,4.23,3139,6.553,3140,5.187,3152,4.924,3175,9.91,3178,8.636,3179,7.655,3181,4.924,3182,4.44,3183,3.666,3184,4.23,3185,3.813,3186,5.187,3187,5.187,3188,4.924]],["t/610",[35,2.181,66,1.678,98,2.944,109,1.892,115,2.118,122,2.633,135,3.294,230,2.492,338,2.118,348,4.066,355,4.206,357,2.185,400,4.045,464,3.854,615,4.884,658,3.685,663,4.132,688,3.63,718,3.349,822,3.039,825,5.633,845,4.744,877,2.976,906,5.103,913,4.004,956,2.788,974,2.897,1038,3.588,1562,5.338,1713,3.574,1939,6.127,1985,7.552,2483,5.052,3081,9.074,3122,4.276,3189,10.722,3190,9.955,3191,10.722,3192,7.803]],["t/612",[0,1.008,6,2.262,19,1.625,20,1.885,310,4.208,315,2.472,340,3.011,349,2.242,356,2.482,430,3.442,437,3.115,615,5.239,617,2.534,661,4.315,688,4.046,716,4.112,741,4.03,841,2.915,852,3.624,881,5.204,956,3.943,1548,5.017,1612,6.024,2599,4.885,2765,5.204,3110,5.204,3124,9.733,3125,5.95,3128,7.672,3193,5.423]],["t/615",[0,1.251,19,1.285,20,2.048,22,1.884,27,1.624,28,1.311,35,1.245,60,1.41,66,1.479,82,3.138,87,2.708,110,1.839,113,1.952,116,2.866,125,1.85,131,0.967,142,5.44,153,4.833,154,4.289,155,1.987,193,1.685,223,2.884,228,1.713,320,1.685,322,1.822,323,2.607,346,2.231,349,1.149,357,1.248,425,1.839,428,4.054,430,3.8,521,2.687,567,2.334,615,5.125,619,3.2,661,3.413,665,3.216,673,2.708,686,2.441,692,1.444,694,2.231,735,2.787,921,3.445,956,2.458,960,2.348,972,1.952,974,3.508,979,3.17,1050,2.778,1061,4.45,1319,2.124,1471,2.275,1555,2.829,1562,3.048,1572,2.708,1603,3.127,1622,3.216,1634,3.187,1696,3.32,1697,2.977,1708,2.626,1713,2.04,1764,2.914,1895,3.086,1923,2.803,1928,3.216,1943,4.827,2516,2.754,2560,3.445,2690,5.616,2753,2.385,3065,4.093,3069,4.894,3079,3.8,3127,7.412,3175,6.633,3183,3.048,3184,5.43,3194,4.093,3195,8.758,3196,2.487,3197,10.645,3198,6.32,3199,4.312,3200,4.312,3201,4.093,3202,8.682,3203,4.644,3204,4.644,3205,6.658,3206,6.658,3207,4.644,3208,4.644,3209,4.644,3210,4.312,3211,4.644,3212,4.312,3213,4.644]],["t/617",[0,1.233,12,2.481,19,0.545,22,2.022,23,1.544,25,1.46,26,0.956,27,1.063,28,1.856,30,1.232,33,1.052,37,1.058,42,1.4,45,1.014,66,1.768,73,1.296,88,0.686,91,1.147,131,0.633,135,2.063,142,3.164,153,3.305,154,1.818,155,1.301,165,1.834,193,1.848,230,0.931,244,0.904,325,6.554,338,0.791,342,1.493,349,1.903,352,1.59,356,0.832,357,0.816,368,3.857,370,4.049,403,1.561,430,2.565,453,2.495,464,4.394,567,1.527,615,3.505,661,1.446,663,2.588,699,2.229,727,2.8,741,1.351,777,3.133,806,3.857,822,1.444,823,2.37,824,2.88,825,2.105,906,2.424,921,3.778,955,1.851,956,1.042,974,1.082,1058,1.489,1144,2.853,1317,1.427,1338,3.583,1508,1.467,1517,1.446,1520,1.561,1545,2.839,1559,2.301,1570,3.857,1585,1.758,1586,3.707,1603,3.429,1610,4.098,1635,1.971,1674,3.196,1708,1.718,1728,6.652,1741,2.819,1864,2.254,1963,4.049,2150,2.173,2235,2.402,2438,3.477,2577,2.822,2799,2.212,3039,3.642,3079,2.487,3081,4.311,3115,2.355,3122,2.678,3130,6.296,3131,4.73,3132,2.679,3133,2.822,3136,4.73,3138,3.857,3139,4.049,3141,4.73,3144,6.105,3146,2.822,3150,4.73,3152,5.796,3153,2.822,3155,2.822,3157,4.73,3161,4.73,3163,4.73,3164,4.49,3166,3.642,3168,4.049,3169,4.73,3170,4.73,3175,2.301,3184,2.301,3192,5.6,3202,4.49,3205,2.822,3214,2.679,3215,3.039,3216,2.487,3217,3.039,3218,8.57,3219,6.575,3220,5.094,3221,7.695,3222,5.094,3223,3.707,3224,3.039,3225,2.679,3226,1.718,3227,2.572]],["t/619",[0,1.102,113,4.169,349,2.453,357,2.664,615,6.412,716,4.499,881,5.693,1047,3.732,2235,4.677,2256,5.65,2683,8.189,2765,5.693,3124,8.393,3125,6.509,3228,7.511,3229,8.742,3230,6.289,3231,6.77]],["t/621",[39,3.57,45,3.336,73,2.543,76,2.816,108,5.818,113,5.138,211,4.803,357,2.685,614,3.533,615,6.014,877,3.657,972,5.138,1559,9.256,2316,5.422,3232,9.996,3233,8.459]],["t/623",[19,1.913,73,2.714,109,2.482,113,4.485,315,2.91,340,3.544,615,5.791,661,5.078,716,4.84,881,6.125,3110,6.125,3124,9.03,3125,7.002]],["t/625",[0,1.368,22,3.233,26,2.696,28,2.421,30,2.074,39,3.062,45,2.862,66,2.289,69,2.815,88,1.937,99,3.53,108,4.081,142,5.326,143,4.332,146,3.617,148,3.89,193,3.112,195,4.265,308,3.604,315,2.338,329,4.18,338,2.233,615,3.906,661,4.081,1559,6.494,2235,5.234,3110,4.922,3116,9.854,3117,4.848,3228,8.404,3229,9.782,3230,5.437]],["t/627",[0,1.053,12,3.575,22,2.489,26,2.978,28,2.674,30,2.291,47,3.161,66,2.439,69,3.11,146,3.996,148,5.363,236,5.072,267,5.821,315,2.583,349,2.343,531,7.026,615,4.315,716,4.297,776,6.466,1508,4.573,1734,6.073,2683,6.377,3110,5.438,3231,8.07,3234,8.349]],["t/629",[135,4.762,663,5.974,3122,6.182]],["t/631",[696,5.497,1157,3.389,1880,6.205,3235,8.865,3236,9.682,3237,8.18]],["t/633",[0,1.094,6,2.455,88,2.223,136,4.151,211,4.728,241,4.392,348,4.92,410,5.303,563,5.564,567,4.946,595,5.173,615,5.514,877,3.6,901,8.384,909,6.309,1699,5.055,2000,8.052,2111,6.175,2210,5.373,2505,6.625,3022,8.052,3238,9.137]],["t/635",[146,4.87,262,5.281,398,5.742,525,8.402,3022,9.446]],["t/637",[42,3.088,53,3.971,955,6.846,2274,7.375,3239,11.238,3240,13.108,3241,11.238]],["t/639",[0,0.775,19,1.249,20,1.449,30,2.336,35,2.59,49,2.94,60,2.117,66,2.75,82,3.05,99,2.87,155,2.983,174,2.444,218,2.019,225,2.383,230,2.135,290,5.278,320,2.529,346,3.349,437,2.395,447,4.246,452,2.502,514,2.693,617,1.949,658,2.395,694,3.349,716,3.162,753,3.941,773,3.899,818,2.959,822,2.737,823,4.495,1108,7.629,1156,3.302,1157,2.065,1334,3.544,1713,5.258,2509,3.709,3022,7.903,3079,5.703,3096,5.54,3216,7.903,3242,9.659,3243,6.97,3244,11.967,3245,6.97,3246,6.97,3247,6.472,3248,6.144]],["t/641",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/643",[0,1.227,164,5.579,349,2.731,356,3.023,616,3.167,617,3.087,658,3.795,1157,3.271,3249,7.766,3250,10.252]],["t/645",[21,5.926,41,1.756,244,2.435,262,3.745,304,3.941,617,2.289,745,5.815,822,2.32,823,3.81,1068,3.283,1163,4.595,1164,4.531,1960,5.056,2262,4.713,2401,5.853,2829,5.308,2896,6.181,2910,8.81,2971,5.328,2974,6.2,2975,6.343,3251,4.03,3252,4.563,3253,7.216,3254,8.186]],["t/647",[21,5.68,41,2.858,304,3.784,617,2.553,745,5.43,1004,8.002,1068,3.662,1960,4.287,2262,3.996,2829,4.618,3251,4.495,3252,5.089,3255,12.368,3256,10.728,3257,10.728,3258,7.492]],["t/649",[21,5.834,244,3.821,272,5.218,304,3.966,617,2.319,745,5.764,1068,3.326,1960,5.099,2262,4.753,2829,5.469,2896,6.951,2910,9.907,3251,4.083,3259,11.579]],["t/651",[21,5.691,47,2.536,49,3.205,155,3.251,228,2.803,244,3.69,272,4.922,304,3.796,616,2.179,617,2.124,670,4.328,745,5.654,749,3.505,1068,3.047,1155,3.798,1960,4.81,2236,4.672,2262,4.484,2278,4.871,2829,5.335,2831,5.115,3251,3.74,3256,10.763,3257,10.763,3259,11.294,3260,6.808,3261,6.696]],["t/653",[0,1.058,19,1.223,22,2.5,26,2.144,28,1.925,30,1.649,66,1.962,76,2.681,85,2.789,88,1.54,99,2.808,108,3.246,109,1.587,113,2.867,125,2.717,131,1.981,140,2.847,150,3.216,230,2.914,296,2.726,316,2.149,338,2.477,342,2,352,1.649,354,4.532,357,1.832,359,3.16,532,5.032,633,3.585,693,2.726,741,4.229,759,4.408,852,2.726,877,2.495,882,4.071,960,3.116,1040,3.345,1074,3.828,1313,5.058,1557,3.484,1625,4.325,1919,2.818,2075,3.484,2503,4.155,2758,5.83,2762,2.847,2770,4.08,2781,4.08,2829,2.726,2850,5.771,2863,8.092,2896,3.915,2909,6.1,2971,3.374,2989,5.284,3002,4.532,3004,4.372,3183,4.476,3262,6.332,3263,5.421,3264,7.562]],["t/655",[0,0.775,26,2.191,33,2.413,60,2.934,62,2.743,66,1.438,76,1.964,109,1.622,122,2.257,150,3.287,181,3.381,187,3.664,230,2.135,322,2.734,325,4.535,338,1.815,519,3.621,520,3.756,532,3.686,616,2.77,632,4.001,672,3.837,756,2.777,877,2.55,911,4.207,940,4.164,1006,5.108,1319,3.188,1561,5.703,1620,3.709,1630,4.469,1749,7.029,1803,4.663,2033,4.287,2251,5.17,2483,4.329,2510,4.032,2529,4.827,2755,4.907,2815,4.246,2971,3.449,2987,4.52,3265,6.97,3266,8.174,3267,6.418,3268,6.144,3269,5.205,3270,6.472,3271,6.97,3272,6.97,3273,5.898,3274,6.472,3275,9.659,3276,5.072,3277,6.97,3278,7.029,3279,6.97,3280,9.659,3281,6.97,3282,4.065,3283,6.97]],["t/657",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/659",[0,1.069,4,2.758,19,1.724,85,3.933,390,3.381,409,2.78,448,3.808,532,5.086,570,4.403,617,2.688,1156,4.556,1461,5.805,1609,5.805,1870,6.311,1873,4.456,1884,6.666,1919,3.973,1938,5.858,3284,8.476,3285,8.476,3286,8.929,3287,11.081,3288,8.138]],["t/661",[21,5.881,304,4.022,617,2.817,745,5.622,1068,4.041,2262,5.375,2829,4.91,3251,4.96,3289,10.394,3290,12.282]],["t/663",[21,5.881,304,4.022,617,2.817,745,5.622,1068,4.041,2262,5.375,2829,4.91,3251,4.96,3291,12.282,3292,11.404]],["t/665",[21,5.895,244,3.669,304,4.039,617,1.374,745,5.635,822,3.918,823,6.434,1068,1.971,1960,3.516,2262,3.277,2829,4.93,2915,7.601,3251,2.419,3252,4.173,3293,12.333,3294,4.699,3295,5.042,3296,5.671,3297,5.671,3298,12.333]],["t/667",[21,5.895,244,3.669,304,4.039,617,1.374,745,5.635,822,3.918,823,6.434,1068,1.971,1960,3.516,2262,3.277,2829,4.93,2915,7.601,3251,2.419,3252,4.173,3294,4.699,3295,5.042,3296,5.671,3297,5.671,3299,12.333,3300,12.333]],["t/669",[21,5.895,244,3.669,304,4.039,617,1.374,745,5.635,822,3.918,823,6.434,1068,1.971,1960,3.516,2262,3.277,2829,4.93,2915,7.601,3251,2.419,3252,4.173,3294,4.699,3295,5.042,3296,5.671,3297,5.671,3301,12.333,3302,12.333]],["t/671",[21,5.895,244,3.669,304,4.039,617,1.374,745,5.635,822,3.918,823,6.434,1068,1.971,1960,3.516,2262,3.277,2829,4.93,2915,7.601,3251,2.419,3252,4.173,3294,4.699,3295,5.042,3296,5.671,3297,5.671,3303,12.333,3304,12.333]],["t/673",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/675",[0,0.788,12,2.674,19,1.27,26,2.228,60,2.153,61,3.202,62,2.789,76,1.997,83,2.738,92,2.558,109,2.273,114,3.6,115,1.845,150,3.342,153,3.044,159,4.1,168,3.869,169,3.844,170,3.176,252,3.298,256,4.494,345,3.421,391,4.447,394,3.188,401,4.432,407,2.889,434,3.95,435,4.985,436,4.908,437,2.435,438,3.661,488,4.317,514,2.738,545,5.698,617,1.981,621,5.159,864,4.359,877,2.593,913,3.489,1136,4.068,1154,3.795,1319,3.242,1455,5.633,1508,3.421,1713,3.114,1763,5.491,1765,4.651,1804,3.922,1928,4.908,1962,5.997,1963,5.633,2028,5.997,2161,5.491,2436,8.664,2753,5.744,3305,7.087,3306,6.336,3307,7.11,3308,7.994,3309,7.087,3310,7.087,3311,7.087]],["t/677",[0,0.742,9,2.968,20,2.252,73,1.698,115,2.441,119,3.775,219,3.391,230,2.045,231,2.403,296,2.669,315,3.203,338,1.738,349,1.651,352,1.615,427,4.233,430,1.998,580,7.026,616,3.679,658,2.294,676,5.914,696,3.207,704,3.575,841,3.014,852,2.669,911,4.03,1245,4.858,1582,6.592,1620,4.988,1646,4.306,1829,4.233,1869,3.695,2485,5.306,2503,6.599,2762,2.787,2918,7.393,3004,4.28,3113,4.773,3312,11.307,3313,4.329,3314,5.884,3315,5.306,3316,10.906,3317,5.884,3318,10.353,3319,5.884,3320,7.932,3321,9.547]],["t/679",[0,1.187,6,2.664,72,2.737,76,2.277,109,1.88,150,3.812,166,4.413,170,3.622,296,4.779,320,2.933,342,2.37,349,1.999,357,2.171,358,3.316,394,3.636,400,5.31,407,4.874,410,4.355,545,4.714,547,5.882,616,3.973,617,3.556,632,4.639,694,3.883,699,3.537,1002,5.597,1053,3.524,1096,3.713,1124,3.041,1157,2.394,1553,4.676,1804,4.473,2679,4.793,3322,6.84,3323,6.84,3324,7.124]],["t/681",[0,1.227,5,6.388,12,4.167,89,3.882,125,4.4,394,4.968,396,6.029,1506,4.531,1508,5.33,3325,10.252]],["t/683",[0,1.176,13,6.33,76,2.981,89,3.72,115,2.755,342,3.102,357,2.842,400,5.262,841,3.402,1047,3.981,1124,3.981,1173,6.507,1562,6.944,3326,9.326,3327,6.027]],["t/685",[0,0.874,6,1.307,7,3.528,12,1.977,20,1.961,26,1.647,38,1.565,88,1.775,109,1.829,115,2.456,136,2.21,137,3.813,150,2.471,215,2.788,218,3.036,252,2.438,294,2.267,308,2.202,316,2.477,342,1.536,352,1.901,357,1.408,410,2.824,430,1.568,437,1.801,438,4.06,444,2.218,545,6.55,547,6.865,616,3.221,617,3.297,621,2.417,622,2.633,632,4.512,676,4.291,693,2.094,740,3.056,849,4.984,864,6.907,879,2.722,1002,3.629,1043,3.522,1124,2.958,1143,5.365,1282,7.144,1508,2.529,1553,3.031,1581,5.134,1582,3.685,1619,3.081,1629,2.357,1708,2.963,1709,2.606,1941,4.882,2067,5.158,2228,5.039,2709,5.72,2753,2.691,2781,4.702,2787,3.813,3000,6.431,3159,3.746,3183,3.439,3306,6.797,3307,6.865,3324,4.618,3328,3.685,3329,7.86,3330,4.618,3331,4.865,3332,4.865,3333,4.865,3334,5.239,3335,4.618,3336,4.865,3337,7.298,3338,5.444,3339,4.434,3340,4.865]],["t/688",[0,1.258,19,1.299,26,3.558,47,2.419,92,2.617,109,1.687,131,2.066,150,3.419,174,2.542,229,4.768,230,2.221,231,2.61,320,2.631,328,3.703,333,3.534,338,1.888,434,4.04,545,4.228,616,2.846,617,2.027,735,3.857,745,2.955,774,4.04,841,2.331,864,4.459,960,2.374,1002,5.021,1143,4.948,1144,3.304,1282,5.49,1361,3.534,1581,3.551,1603,4.881,1614,3.811,1616,5.186,1617,6.436,1618,6.39,1619,4.263,1620,3.858,1621,5.49,1622,5.021,1623,5.617,1624,5.617,1625,4.597,1626,4.503,1627,3.466,1628,5.099,1629,3.262,1630,7.255,1631,4.337,1632,5.377,1633,5.931,1689,5.276,1798,3.958,2244,4.503,2483,4.503,3324,6.39]],["t/690",[83,4.229,616,3.139,735,4.255,1502,7.184,1616,5.721,1772,6.144,1803,5.284,2169,7.299,3341,6.189,3342,8.481]],["t/692",[6,2.596,77,5.538,88,2.35,296,5.007,673,6.069,1157,3.083,1502,6.83,1503,9.663,1772,5.841,1803,6.046,2169,5.884,3185,7.103,3260,6.915,3341,5.884,3342,8.063]],["t/694",[0,1.069,47,3.209,77,5.117,98,3.48,114,4.885,230,2.946,275,8.533,278,5.117,296,4.771,342,2.82,357,2.583,617,2.688,699,4.209,860,8.929,861,6.098,1245,6.998,1502,7.832,1772,5.398,2679,5.703,2762,4.982,3260,6.39,3342,7.451,3343,8.476]],["t/696",[0,1.407,5,1.101,19,0.341,22,2.842,26,1.755,27,2.882,28,1.576,30,1.35,33,1.591,35,1.907,50,1.892,66,2.594,72,3.416,91,3.11,92,0.687,110,2.211,135,0.77,140,2.33,150,2.633,176,1.148,213,1.996,218,3.91,221,3.37,222,3.18,244,0.566,296,4.138,325,2.157,329,2.24,342,1.637,430,0.569,497,2.946,545,6.97,547,1.384,588,1.384,616,0.546,617,1.285,676,1.039,755,4.098,773,1.855,818,1.964,822,1.582,823,0.885,824,1.076,825,1.317,826,2.152,864,1.17,940,1.981,967,1.743,1142,6.794,1143,2.317,1191,5.386,1282,1.441,1334,2.831,1506,1.393,1519,2.61,1705,2.543,1713,5.194,1725,2.992,1741,1.878,1803,0.918,1807,2.227,1917,6.897,1923,3.37,1926,1.933,1941,1.182,2047,1.248,2067,7.758,2169,1.919,2436,1.474,2709,1.384,2755,3.613,2762,3.802,2815,2.799,2892,0.937,2965,6.755,2980,3.137,2987,2.98,3063,1.281,3276,3.344,3278,6.892,3306,1.234,3307,1.384,3328,2.387,3340,1.766,3341,1.076,3344,1.22,3345,1.902,3346,1.766,3347,1.902,3348,8.079,3349,6.604,3350,1.109,3351,1.411,3352,3.394,3353,1.902,3354,1.902,3355,6.112,3356,4.725,3357,1.766,3358,1.338,3359,1.384,3360,3.394,3361,1.902,3362,1.248,3363,3.811,3364,5.184,3365,4.921,3366,4.921,3367,3.867,3368,3.408,3369,4.595,3370,1.902,3371,5.184,3372,2.317,3373,2.517,3374,2.698,3375,1.512,3376,2.992,3377,1.902,3378,3.394,3379,1.902,3380,1.902,3381,1.766,3382,1.902,3383,1.902,3384,1.902,3385,6.41,3386,1.766,3387,1.902,3388,1.61,3389,1.902,3390,1.902]],["t/698",[0,1.168,6,2.146,12,2.646,19,0.809,20,0.938,26,3.496,28,1.274,47,1.506,72,1.528,76,1.271,89,2.465,108,2.147,109,1.05,114,3.562,115,1.826,116,3.438,122,1.461,131,2.187,135,1.827,137,2.188,138,2.723,150,5.94,153,1.938,176,2.723,185,2.006,188,3.037,278,2.401,296,3.877,315,1.23,316,2.209,322,1.77,341,4.034,342,2.056,349,1.116,357,3.118,400,3.487,430,1.35,438,2.331,545,4.089,616,3.612,632,4.937,633,3.686,635,5.201,636,4.665,638,4.659,639,3.346,640,4.158,673,2.631,676,2.463,699,1.975,712,2.917,735,2.725,754,1.945,773,1.821,1034,2.57,1038,3.793,1043,3.142,1124,1.698,1144,1.502,1157,1.336,1293,2.699,1344,2.022,1508,2.178,1566,2.21,1578,2.232,1582,3.173,1610,2.157,1616,3.664,1617,2.926,1741,3.88,1803,4.152,1826,3.037,1942,2.072,2082,3.496,2762,3.59,2768,2.699,2773,2.551,2781,2.699,2815,2.748,2880,3.417,2971,2.232,2987,4.547,3306,4.547,3307,3.283,3331,4.189,3332,4.189,3333,6.51,3337,4.189,3341,2.551,3355,3.346,3391,4.511,3392,4.189,3393,3.977,3394,3.586,3395,5.31,3396,5.103,3397,2.961]],["t/700",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/702",[5,6.279,12,4.095,26,3.412,109,2.525,114,5.513,150,5.118,170,4.863,394,4.883,407,4.424,545,6.329,1508,5.239,1928,7.516]],["t/704",[0,0.742,9,2.968,20,2.252,73,1.698,115,2.441,119,3.775,219,3.391,230,2.045,231,2.403,296,2.669,315,3.203,338,1.738,349,1.651,352,1.615,427,5.944,430,1.998,580,7.026,616,3.679,658,2.294,676,5.914,696,3.207,704,3.575,841,3.014,852,2.669,911,4.03,1245,4.858,1582,6.592,1620,3.553,1646,4.306,1829,4.233,1869,3.695,2485,5.306,2503,6.599,2762,2.787,2918,7.393,3004,4.28,3113,4.773,3312,11.307,3313,4.329,3314,5.884,3315,5.306,3316,10.906,3317,8.262,3318,10.353,3319,5.884,3320,7.932,3321,8.262]],["t/706",[0,1.262,9,3.241,19,1.307,42,2.003,47,2.433,73,1.855,92,2.632,109,2.318,115,2.594,116,2.914,118,2.682,125,2.905,131,2.074,166,3.981,170,3.267,218,2.886,262,3.335,316,2.298,322,4.452,341,4.144,352,1.763,356,1.996,357,1.959,358,2.992,407,2.972,425,2.887,438,3.766,523,4.401,614,2.577,616,2.857,633,3.833,688,3.254,712,4.144,1040,3.503,1043,3.267,1344,5.086,1566,5.559,1584,8.005,1620,3.88,2067,4.785,2768,5.96,2774,4.623,2780,4.909,2781,4.362,3398,6.014,3399,5.306,3400,6.17,3401,4.977]],["t/708",[0,1.13,22,3.244,27,4.03,28,2.119,30,1.816,35,2.725,47,2.505,66,2.661,140,3.134,151,5.199,152,5.124,153,3.224,221,4.531,222,4.277,308,3.156,342,2.201,359,3.478,602,2.408,616,2.153,749,3.463,773,4.102,822,2.128,823,3.494,824,4.245,826,4.761,972,3.156,1058,3.677,1061,6.249,1334,2.754,1546,6.353,1554,5.199,1705,3.42,1713,5.062,2762,4.242,2971,3.715,3025,5.568,3062,5.817,3063,5.054,3367,5.199,3373,5.568,3402,6.353,3403,6.353]],["t/711",[0,1.227,13,6.606,89,3.882,357,2.966,841,3.55,1047,4.155,1173,6.791,1620,5.876,3326,9.733,3398,6.665]],["t/713",[0,0.954,22,2.254,26,3.179,50,4.781,85,2.412,88,1.332,89,2.074,92,2.129,115,1.536,124,5.776,135,2.389,136,2.488,150,4.769,193,2.141,218,3.77,229,4.122,230,1.807,256,3.74,262,3.924,296,3.429,328,4.382,333,4.182,342,1.729,389,4.467,405,2.782,409,2.48,425,2.336,426,2.101,432,4.925,438,3.047,448,2.336,486,2.889,580,3.529,616,1.692,633,3.101,735,2.293,755,2.934,758,3.469,772,2.98,798,3.871,897,3.825,1040,2.074,1053,2.572,1064,4.57,1362,4.293,1398,3.825,1508,2.847,1620,4.565,1646,2.71,1738,3.825,1788,3.628,1805,4.826,1906,3.287,2062,4.375,2067,6.635,2768,3.529,2792,4.57,2962,4.826,2971,2.919,3104,4.218,3328,6.034,3344,3.782,3350,3.44,3351,4.375,3358,4.149,3362,3.871,3398,7.429,3404,5.477,3405,7.562,3406,5.477,3407,5.477,3408,5.898,3409,5.477,3410,5.477,3411,5.477,3412,5.199,3413,5.898,3414,5.477]],["t/715",[3,4.11,4,3.24,98,3.19,115,2.295,155,3.772,174,3.961,188,5.934,218,3.272,230,3.46,296,3.523,316,2.777,400,4.383,437,3.029,438,4.553,616,3.575,735,3.426,841,2.834,913,4.339,1043,3.949,1155,4.406,1345,9.242,1620,6.634,1803,4.255,2765,5.059,2908,6.515,3415,9.957]],["t/717",[76,3.006,100,6.274,115,2.778,218,3.091,262,4.881,409,3.084,617,2.983,1620,5.678,1709,5.307,1982,6.627,2067,7.002,2765,6.125,2908,5.576,3398,6.44]],["t/719",[73,2.428,76,2.689,109,2.22,118,3.511,183,3.698,187,5.017,230,2.924,308,4.012,338,3.093,486,4.675,616,2.737,693,3.815,861,6.052,882,4.084,1067,6.425,1074,5.357,1170,6.052,1450,7.228,1889,4.959,1919,3.943,3398,7.17,3416,9.544,3417,8.862,3418,8.412,3419,10.053]],["t/722",[139,7.002,218,3.683,381,4.724,389,8.08,390,3.751,398,6.323,439,7.002,448,4.225,545,6.223,2527,5.678,2865,6.695,3420,10.669]],["t/724",[0,1.385,73,2.626,83,3.988,97,6.546,278,6.632,427,6.546,434,5.753,849,6.546,1362,7.512,1620,6.632,2514,9.098,3398,7.523,3421,9.584,3422,8.445]],["t/726",[0,1.379,12,4.68,218,3.593,262,4.683,398,6.168,1508,5.987,1620,5.448,2067,6.719,2865,7.782,2908,5.351,3398,6.18,3423,9.199]],["t/728",[0,1.094,20,2.046,136,4.151,167,6.309,296,3.934,348,4.92,352,2.38,356,2.694,438,5.083,570,3.63,616,3.472,617,2.751,703,4.728,841,3.164,877,3.6,990,5.173,1074,5.524,1897,6.539,1986,5.887,3288,8.328,3424,8.328,3425,8.052,3426,9.137]],["t/730",[19,1.477,33,2.853,41,1.768,44,4.077,53,2.912,66,1.7,72,3.662,88,1.861,91,3.109,92,2.974,103,3.785,115,2.146,153,3.539,174,2.889,211,3.959,231,2.966,296,3.294,308,3.464,437,2.832,438,4.257,622,4.141,688,3.677,692,2.563,712,4.498,753,4.659,939,3.648,940,3.552,1124,3.1,1142,5.408,1344,3.692,1506,3.381,1521,4.806,1523,6.207,1589,6.112,1620,5.754,2768,4.929,2834,6.775,2844,4.767,2908,4.306,3398,6.527,3427,7.651,3428,5.996]],["t/732",[33,2.969,37,2.984,41,1.84,44,4.243,49,3.617,53,3.03,66,1.769,72,3.758,103,3.939,109,1.995,115,2.233,153,3.683,394,3.858,396,6.059,616,2.459,622,4.309,712,5.119,753,4.848,940,3.697,1124,3.226,1132,5.853,1142,5.627,1521,5.001,1523,6.371,1589,6.36,1620,5.906,1790,4.12,2768,5.13,2834,6.907,2844,4.961,3427,7.962,3428,6.24,3429,8.574,3430,8.574,3431,8.574]],["t/734",[0,0.333,4,0.859,12,0.625,22,1.078,23,6.463,25,6.144,26,4.174,27,1.048,28,1.158,30,0.401,33,0.573,35,2.045,42,0.823,50,1.67,54,1.748,60,0.503,62,0.652,66,0.618,76,0.467,81,1.453,84,0.865,91,0.625,109,0.385,114,0.841,122,0.536,124,2.017,150,4.735,162,0.871,184,1.461,193,0.601,218,2.343,222,0.943,225,0.566,244,0.493,262,0.757,325,6.165,328,1.531,333,1.461,342,0.486,381,1.817,390,1.053,403,0.851,409,0.866,413,0.675,453,0.811,486,0.811,519,0.86,520,0.892,619,1.337,636,3.16,672,1.19,732,0.966,736,5.043,758,0.974,772,1.514,798,1.087,819,4.929,822,0.849,888,1.283,911,1,950,1.88,971,0.837,1040,0.582,1228,0.91,1274,1.355,1317,0.778,1345,1.355,1362,1.205,1446,1.13,1506,0.68,1508,1.447,1520,0.851,1620,0.881,1632,4.828,1710,1.115,1738,1.074,1741,0.916,1805,1.355,1873,0.767,1906,0.923,1919,0.684,2062,3.044,2792,1.283,2844,1.734,2863,1.13,2895,2.322,2962,1.355,2971,0.819,3104,1.184,3328,2.108,3350,0.966,3351,1.228,3357,2.782,3358,1.165,3362,1.087,3392,2.782,3398,1.809,3404,1.538,3405,2.641,3406,1.538,3407,1.538,3409,1.538,3410,1.538,3411,1.538,3412,1.46,3428,2.181,3432,2.996,3433,1.656,3434,1.656,3435,1.401,3436,2.996,3437,4.437,3438,2.996,3439,2.641,3440,2.782,3441,3.358,3442,2.996,3443,12.426,3444,12.342,3445,6.509,3446,9.207,3447,13.83,3448,6.509,3449,5.508,3450,6.509,3451,6.509,3452,6.509,3453,12.162,3454,6.509,3455,6.509,3456,6.509,3457,6.509,3458,6.509,3459,6.509,3460,1.656,3461,1.656,3462,1.165,3463,1.656,3464,1.656,3465,1.355,3466,1.656,3467,4.104,3468,2.996,3469,2.075,3470,6.044,3471,1.656,3472,2.996,3473,2.996,3474,5.034,3475,1.656,3476,1.538,3477,1.538,3478,1.656,3479,2.782,3480,2.996,3481,1.656,3482,1.656,3483,1.656,3484,2.996,3485,1.147,3486,1.656,3487,4.104,3488,1.656,3489,1.656,3490,1.656,3491,1.46,3492,1.656]],["t/736",[0,1.111,155,4.278,338,2.603,342,2.931,452,4.388,467,4.736,580,5.98,616,2.867,672,3.97,694,4.803,696,4.803,832,4.217,833,4.247,1156,5.791,1157,3.621,1173,6.148,2840,6.56,2865,6.272,3317,8.811]],["t/739",[0,1.111,4,2.867,19,1.792,85,4.088,88,2.258,381,4.426,408,5.878,409,3.533,532,5.287,598,6.764,602,3.207,614,3.533,617,2.795,1053,4.358,1803,4.825,2762,5.102,3399,7.274,3493,8.459,3494,8.179]],["t/741",[18,4.37,88,2.331,570,3.808,598,5.712,616,2.96,617,2.886,683,4.18,686,5.426,692,3.876,1077,4.89,1099,6.02,1640,5.493,1749,6.546,1881,6.694,1897,6.859,3399,7.512,3494,8.445]],["t/743",[0,1.157,19,2.245,76,2.932,108,6.395,109,2.421,341,4.329,356,2.849,357,2.796,359,4.822,467,4.931,614,3.678,616,2.985,2762,4.344,3495,8.515]],["t/745",[0,1.333,22,3.151,26,3.047,28,2.736,30,2.344,66,2.474,140,4.045,150,4.57,342,2.841,960,3.174,1040,4.216,1557,4.95,1625,6.145,2075,4.95,2758,6.381,2770,5.797,2853,8.997,2863,9.288]],["t/747",[0,0.957,22,3.105,25,2.847,26,2.707,27,3.011,28,1.673,30,1.433,33,2.052,35,1.589,53,2.094,54,3.456,66,2.438,74,3.938,140,2.474,150,2.795,221,3.577,222,3.376,322,2.325,325,2.782,329,5.76,341,3.581,342,1.738,359,2.746,614,3.042,616,2.469,748,3.514,773,4.092,822,3.494,826,3.758,875,2.917,972,2.491,1061,5.887,1063,7.094,1099,3.456,1128,2.332,1132,4.045,1640,3.154,1646,2.722,1666,5.015,1668,4.396,1669,5.502,1680,3.99,1713,4.454,1728,2.834,1741,3.28,1744,6.519,2590,3.326,2591,4.592,2755,5.15,2762,3.593,2773,3.351,2815,5.244,2971,5.016,2974,4.488,3373,4.396,3375,4.71,3493,5.015,3496,7.588]],["t/749",[6,2.348,30,1.262,33,3.258,66,1.076,67,2.439,83,2.016,244,1.552,325,4.418,394,2.348,532,4.977,562,2.178,594,6.102,598,5.789,602,1.674,614,3.697,617,2.631,741,3.483,822,3.896,906,2.484,1061,5.676,1063,7.673,1128,2.053,1132,3.562,1744,8.916,1982,6.497,2591,6.071,2755,6.528,2762,2.178,2815,7.173,2886,6.905,2971,5.176,2974,7.126,3255,7.276,3493,4.416,3496,6.907,3497,6.228,3498,4.599,3499,5.218]],["t/751",[0,1.077,47,3.234,76,2.73,85,3.963,99,3.99,109,2.254,120,6.145,230,2.968,338,2.523,356,2.653,357,2.603,598,6.636,658,3.33,661,4.612,852,3.873,877,3.545,882,4.147,956,3.322,1074,5.439,1096,4.451,1919,4.003,2762,5.436,3500,8.997]],["t/753",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/756",[0,1.308,6,2.346,19,1.685,20,1.955,109,2.187,115,2.448,136,3.966,349,2.325,356,2.574,357,2.526,407,3.833,452,3.376,532,4.973,563,5.316,614,4.54,617,2.629,1518,3.871,1572,5.484,1906,5.24,3501,8.73,3502,9.402,3503,8.564,3504,8.287,3505,8.73,3506,7.957,3507,9.402]],["t/759",[532,7.396,633,6.304,636,6.504,640,7.111,2880,9.081,3394,7.702,3504,12.326,3505,12.984,3508,9.811]],["t/761",[20,2.03,42,3.311,115,2.543,378,4.783,383,4.505,388,4.934,394,4.393,407,3.98,616,2.8,633,6.334,1040,4.236,1629,4.393,2774,6.192,2780,6.574,2791,9.067,2863,6.665,3509,9.067,3510,11.058,3511,9.764,3512,9.764]],["t/763",[3,3.683,299,5.526,304,3.315,390,2.624,712,4.211,749,3.443,818,2.286,950,9.373,1705,3.399,1713,5.411,1790,3.585,1919,3.083,2120,7.01,2737,4.464,2829,4.046,3123,6.316,3423,5.535,3503,7.366,3504,8.922,3513,6.929,3514,10.122,3515,9.721,3516,12.316,3517,7.463,3518,7.463,3519,7.463,3520,7.463,3521,7.463]],["t/765",[73,2.884,76,3.195,170,5.081,407,4.622,523,6.844,532,5.997,3522,10.528]],["t/767",[116,2.786,712,6.003,1153,3.414,1790,4.641,1803,3.365,1919,4.579,2762,2.909,2829,5.769,2909,7.107,2971,4.779,3503,9.703,3523,6.97,3524,14.235,3525,6.97,3526,6.472,3527,6.97,3528,6.97,3529,6.97,3530,6.97,3531,6.97,3532,6.97,3533,6.97,3534,6.97,3535,6.97,3536,5.278,3537,6.97,3538,6.97,3539,6.97]],["t/769",[35,1.955,41,2.137,244,3.799,272,3.503,304,3.263,913,4.905,1043,3.267,1256,6.538,1334,2.675,1790,3.503,1906,4.063,1919,4.116,1925,9.671,2806,6.515,2829,5.27,2908,5.931,2989,5.649,3106,3.904,3503,8.259,3513,10.538,3540,13.183,3541,10.787,3542,7.291,3543,7.291,3544,11.349,3545,7.291,3546,8.782,3547,9.962,3548,7.291]],["t/771",[3,2.941,82,3.537,383,3.729,390,3.754,409,2.336,447,4.924,448,3.2,1346,5.182,1402,9.913,1434,5.071,1906,5.95,1920,4.473,2388,6.121,2417,5.597,2668,5.684,2688,6.121,2720,6.424,2865,5.071,2896,4.639,2908,4.224,2990,7.504,3423,10.812,3549,8.082,3550,10.763,3551,10.676,3552,6.84,3553,8.082,3554,6.613,3555,8.082,3556,8.082,3557,8.082,3558,7.504,3559,5.779,3560,7.504]],["t/773",[6,1.925,18,2.164,20,1.063,26,1.608,60,1.553,62,2.012,84,4.033,115,1.331,162,6.846,181,2.48,183,1.981,218,1.481,225,1.748,230,1.566,244,1.521,255,3.278,263,5.512,304,3.826,315,1.394,329,3.761,342,2.263,343,2.359,383,3.56,387,5.616,415,3.032,532,2.704,616,2.213,636,2.773,638,3.397,640,3.032,756,2.037,822,2.187,950,8.593,1226,4.444,1274,4.183,1319,2.339,1790,2.456,1919,2.112,1926,4.396,2108,3.792,2120,5.344,2314,9.125,2341,3.656,2510,2.958,2511,3.059,2829,4.67,2865,4.842,2908,2.672,2965,7.679,2971,5.781,3089,9.404,3196,4.977,3423,8.666,3503,5.616,3561,4.506,3562,5.112,3563,5.112,3564,5.112,3565,5.112,3566,9.294,3567,3.792,3568,11.112,3569,9.294,3570,3.721,3571,5.112]],["t/775",[0,1.129,155,4.346,338,2.645,452,4.431,467,4.812,532,6.527,667,6.308,672,4.034,694,4.88,832,4.284,833,4.315,1156,5.847,1157,3.656,2338,7.691,3522,11.459]],["t/777",[0,1.186,4,3.06,19,1.913,218,3.091,284,8.267,381,4.724,390,3.751,504,7.914,570,3.936,1471,5.227,1609,6.44,1873,4.944,1884,6.531]],["t/779",[21,5.985,304,3.784,617,2.553,745,5.721,1068,3.662,1788,5.616,1920,7.014,1960,4.287,2262,5.057,2829,5.325,2971,4.518,2974,6.915,3251,4.495,3252,5.089,3253,8.048,3572,9.777]],["t/781",[21,5.881,304,4.022,617,2.817,745,5.622,1068,4.041,2262,5.375,2829,4.91,3251,4.96,3573,11.404,3574,10.826]],["t/783",[21,5.849,304,3.984,409,3.966,617,2.773,745,4.958,1068,3.977,1920,6.732,2262,5.324,2829,4.862,3251,4.883,3572,10.294]],["t/785",[21,5.849,304,3.984,409,3.966,617,2.773,745,4.958,1068,3.977,2262,5.324,2829,4.862,3251,4.883,3573,11.294,3574,10.722]],["t/787",[21,5.849,304,3.984,409,3.966,617,2.773,745,4.958,1068,3.977,2262,5.324,2829,4.862,3251,4.883,3575,12.164,3576,12.164]],["t/789",[21,5.635,47,2.983,49,3.77,155,3.825,228,3.297,304,3.733,409,3.821,616,2.563,617,2.499,670,5.092,745,4.646,749,4.123,1068,3.584,1155,4.468,2236,5.497,2262,4.988,2278,5.73,2829,4.556,2831,6.017,3251,4.4,3260,7.574,3261,7.878,3577,11.397,3578,11.397]],["t/791",[0,1.365,4,2.89,19,2.202,73,2.563,82,4.41,88,2.276,356,2.758,390,3.542,570,3.717,956,4.21,1609,6.082,1790,4.841,1873,4.668,1884,6.309,3282,5.876,3579,8.527,3580,8.244]],["t/793",[30,2.326,38,2.872,66,2.462,316,3.761,355,3.772,359,4.456,703,4.62,741,5.305,960,3.149,967,4.94,1047,3.618,1155,4.808,1713,4.225,1790,5.734,2563,7.283,3358,6.764,3367,6.66,3373,7.133,3579,10.983,3580,9.765]],["t/795",[21,6.104,304,4.303,409,3.509,617,2.015,745,4.029,1068,2.891,1960,4.641,2262,4.326,2829,5.622,2915,6.271,2971,6.501,3251,3.549,3252,5.509,3294,6.203,3295,6.655,3373,7.332,3579,9.547,3581,9.885,3582,5.898,3583,11.281,3584,9.885,3585,6.693]],["t/797",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/799",[20,2.046,136,4.151,349,2.434,352,2.38,450,4.797,452,4.346,570,3.63,578,5.564,693,4.839,696,4.728,1051,8.044,1123,6.117,1434,6.175,1829,6.24,1975,7.625,2156,6.309,2233,5.649,2610,5.649,2753,5.055,2866,7.299]],["t/801",[19,1.602,20,1.858,51,5.213,88,2.019,109,2.079,228,3.297,231,3.217,453,4.378,478,6.769,597,7.104,614,3.159,616,3.599,664,3.731,693,3.573,700,5.131,754,3.853,1547,4.946,1570,6.769,1641,4.913,1793,6.398,1803,4.315,2187,5.445,2413,7.977,2446,7.104,3002,5.939,3586,7.104,3587,7.313,3588,8.299,3589,8.937,3590,9.645]],["t/803",[632,6.394,633,5.856,635,8.262,636,6.042,638,7.402,639,8.262,640,6.606,641,8.262,3395,8.436]],["t/805",[632,6.394,633,5.856,635,8.262,636,6.042,638,7.402,639,8.262,640,6.606,641,8.262,3395,8.436]],["t/807",[19,1.792,38,2.986,309,4.666,430,2.992,616,3.505,664,4.173,741,5.433,1566,4.897,1759,5.928,1803,4.825,1840,6.73,1869,5.532,2264,4.971,2413,7.969,2679,7.249,3591,7.945]],["t/810",[0,0.779,6,1.749,38,2.093,41,2.702,73,1.783,98,2.536,118,2.578,136,2.956,160,3.166,161,3.684,182,3.541,252,3.262,308,2.946,315,1.911,343,3.233,352,3.229,356,1.919,437,2.409,616,2.01,617,1.959,659,4.718,660,4.353,693,2.802,1038,3.091,1068,4.458,1710,8.076,1728,6.022,2152,4.545,2263,3.541,2264,3.486,2413,4.23,2762,2.925,2829,2.802,2889,4.398,2890,4.087,3031,4.599,3592,4.398,3593,4.854,3594,4.353,3595,10.152,3596,11.138,3597,9.341,3598,3.826,3599,4.929,3600,4.929,3601,4.929,3602,4.545]],["t/812",[0,0.762,6,1.711,35,3.186,38,2.048,41,2.68,73,1.744,98,2.482,118,2.522,136,2.892,160,3.098,161,3.605,182,3.464,252,3.191,308,2.882,315,1.87,343,3.163,352,3.21,356,1.877,437,2.356,616,1.966,617,1.917,659,4.616,660,4.259,693,2.741,1038,3.024,1068,4.406,1710,8,1728,5.974,2152,4.447,2263,3.464,2264,3.41,2413,4.139,2762,2.862,2829,2.741,2889,4.302,2890,3.999,3031,4.5,3592,4.302,3593,4.749,3594,4.259,3595,10.056,3596,11.033,3597,9.267,3598,3.744,3599,4.823,3600,4.823,3601,4.823,3602,4.447]],["t/814",[0,0.779,6,1.749,38,2.093,41,2.702,73,1.783,98,2.536,118,2.578,136,2.956,160,3.166,161,3.684,182,3.541,252,3.262,308,2.946,315,1.911,343,3.233,352,3.229,356,1.919,437,2.409,616,2.01,617,1.959,659,4.718,660,4.353,693,2.802,1038,3.091,1068,4.458,1710,8.076,1728,6.022,2152,4.545,2263,3.541,2264,3.486,2413,4.23,2762,2.925,2829,2.802,2889,4.398,2890,4.087,3031,4.599,3592,4.398,3593,4.854,3594,4.353,3598,3.826,3599,4.929,3600,4.929,3601,4.929,3602,4.545,3603,10.152,3604,11.138,3605,11.693]],["t/816",[0,0.762,6,1.711,38,2.048,41,2.68,73,1.744,98,2.482,118,2.522,136,2.892,160,3.098,161,3.605,182,3.464,252,3.191,308,2.882,315,1.87,343,3.163,352,3.21,356,1.877,437,2.356,616,1.966,617,1.917,659,4.616,660,4.259,693,2.741,773,4.796,1038,3.024,1068,4.406,1710,8,1728,5.974,2152,4.447,2263,3.464,2264,3.41,2413,4.139,2762,2.862,2829,2.741,2889,4.302,2890,3.999,3031,4.5,3592,4.302,3593,4.749,3594,4.259,3598,3.744,3599,4.823,3600,4.823,3601,4.823,3602,4.447,3603,10.056,3604,11.033,3605,11.6]],["t/818",[0,0.98,19,2.025,20,2.348,21,3.758,96,4.066,109,2.05,110,3.49,111,4.633,115,2.295,135,3.569,153,4.852,185,3.918,224,5.934,315,2.403,339,4.339,340,2.927,349,2.18,352,2.131,356,2.413,661,4.195,956,3.021,1028,6.643,1050,5.272,1056,5.099,1256,5.784,1555,7.595,1604,6.537,2413,6.818,2505,5.934,3591,8.978,3606,7.211]],["t/820",[44,5.279,69,4.174,409,3.084,818,3.895,1139,8.267,1334,4.664,3359,7.765,3607,9.03,3608,7.283,3609,9.03,3610,8.73]],["t/822",[0,1.223,19,1.517,22,2.891,27,2.959,28,2.388,30,2.046,32,5.819,37,2.944,66,2.269,131,1.762,140,3.531,153,4.725,193,3.07,244,2.516,339,6.019,340,3.654,818,2.592,841,2.72,1028,4.975,1151,5.486,1334,4.036,1555,5.154,1807,5.552,2413,6.641,2944,5.017,3591,8.744,3606,6.922,3607,7.159,3608,5.775,3609,9.31,3611,9.697,3612,7.855]],["t/824",[125,3.612,241,4.046,409,3.325,773,3.659,818,3.87,822,2.569,823,4.219,824,5.126,826,5.749,1807,5.95,1926,8.282,2889,5.688,2890,5.287,2892,4.463,2915,5.941,2925,5.812,3372,6.188,3373,6.724,3607,7.672,3608,6.188,3609,9.733,3611,7.991]],["t/826",[4,2.936,6,2.554,19,1.835,21,4.366,135,4.146,218,2.966,224,6.893,342,3.002,448,4.054,617,3.73,741,4.551,1803,4.942,1881,6.64,2413,6.18,2865,6.424,3341,5.789,3613,9.506]],["t/828",[44,5.107,69,4.091,768,5.925,773,4.166,818,4.26,822,2.925,823,4.803,824,5.836,1139,7.997,1334,3.787,1807,8.179,2892,5.082,2987,6.694]],["t/830",[0,0.994,28,2.523,30,2.162,35,3.056,66,2.816,289,6.286,342,2.621,773,3.607,818,3.491,822,2.533,823,4.159,824,5.054,1061,6.488,1334,4.181,1713,5.807,3025,6.629,3402,7.564,3403,7.564,3614,7.878,3615,6.017]],["t/832",[0,1.139,19,1.362,22,3.046,26,2.389,27,2.657,28,2.145,30,1.837,33,2.63,66,2.391,140,3.171,150,3.583,224,5.115,289,7.206,340,2.523,342,2.228,768,6.654,773,4.135,818,3.138,966,4.094,1040,3.602,1334,2.787,1557,3.881,1625,4.818,1629,3.418,2075,5.233,2235,3.583,2736,4.586,2755,3.859,2758,5.452,2763,8.382,2768,7.422,2770,4.545,2971,3.759,3386,7.054,3614,9.03,3616,7.597,3617,6.696,3618,7.597,3619,10.962,3620,7.597]],["t/834",[0,1.256,41,1.891,289,6.199,296,3.523,299,4.812,409,3.266,693,3.523,752,4.579,768,6.484,773,3.557,818,2.7,822,3.533,823,4.101,824,4.983,1143,9.493,1807,5.784,2829,3.523,2891,6.699,2892,4.339,2915,5.835,2925,5.65,3028,5.934,3031,5.784,3344,5.65,3614,7.768,3617,7.768,3621,8.813]],["t/836",[19,1.249,20,2.008,44,3.449,49,2.94,73,2.457,88,2.503,93,3.831,98,2.522,115,1.815,135,2.822,224,4.693,296,2.786,338,1.815,342,2.832,349,1.724,409,2.015,444,2.951,452,2.502,567,4.854,577,4.246,619,4.311,688,3.111,693,2.786,703,3.349,704,3.732,749,3.215,770,4.001,974,2.483,1056,4.032,1139,9.272,1157,2.065,1256,4.574,1634,3.098,1705,3.175,1807,4.574,1938,4.246,1983,5.898,2413,6.691,2505,4.693,2689,6.144,2829,2.786,2865,8.159,2892,3.431,2915,4.99,3002,4.632,3031,4.574,3344,4.469,3591,5.54,3622,5.54,3623,9.659,3624,6.472,3625,5.54,3626,5.278,3627,6.97,3628,6.472,3629,6.97,3630,6.144,3631,6.97]],["t/838",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/841",[0,0.91,9,3.639,19,1.93,109,1.905,113,3.441,127,3.897,211,3.933,212,4.278,293,4.855,338,2.804,349,2.025,401,3.714,496,4.229,578,4.629,614,4.252,684,4.33,688,3.654,698,4.531,699,3.583,703,5.173,778,4.855,861,5.191,882,3.503,897,5.309,898,7.601,1003,4.205,1050,4.897,1319,3.745,1602,5.137,1790,3.933,2233,4.699,2662,8.106,2663,8.29,3373,6.072,3632,6.68,3633,8.186]],["t/844",[0,1.078,20,1.457,22,3.152,26,3.049,27,2.451,28,1.979,30,1.695,33,2.427,35,2.6,66,2.687,76,1.975,109,1.631,140,2.925,150,4.573,228,2.585,325,3.291,342,2.055,453,3.433,602,2.248,617,1.959,653,3.641,658,2.409,692,2.18,698,5.366,699,3.067,749,3.233,773,4.842,822,1.986,823,3.262,824,3.963,826,4.444,940,3.021,972,2.946,1058,3.433,1075,4.444,1096,3.219,1334,2.571,1519,3.276,1705,3.192,1713,4.884,1803,3.383,2755,4.926,2762,2.925,2815,4.27,2886,3.963,2915,5.009,2971,3.468,3276,5.1,3278,7.056,3363,4.784,3368,7.192,3373,7.192,3634,5.931]],["t/846",[0,0.874,9,2.329,19,0.939,20,1.634,22,2.951,26,2.471,27,3.666,28,1.479,30,1.267,33,1.814,38,2.348,41,1.124,47,1.749,51,6.113,60,1.591,62,2.062,66,1.946,69,1.72,73,1.333,76,1.476,83,2.024,88,1.775,99,2.157,109,1.219,111,4.132,113,3.965,115,1.364,131,1.964,140,2.187,150,3.707,224,6.351,306,3.566,315,2.572,325,2.46,342,2.766,349,1.296,394,2.357,407,2.136,423,3.746,521,3.031,576,3.134,602,2.522,692,2.444,698,5.22,699,4.128,759,2.428,852,2.094,990,2.754,1040,2.763,1047,1.971,1074,2.941,1519,2.449,1557,2.676,1625,3.323,1655,4.287,1790,2.517,1899,4.984,2075,2.676,2627,4.622,2751,3.968,2755,4.792,2758,4.183,2762,3.937,2768,6.27,2770,3.134,2815,3.192,3075,4.165,3276,3.813,3278,6.865,3363,3.576,3619,6.652,3622,4.165,3634,4.434,3635,5.239,3636,6.431,3637,8.314,3638,3.398,3639,4.287,3640,10.481,3641,5.239,3642,4.865]],["t/848",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/851",[0,1.282,22,3.201,27,3.705,28,2.571,30,2.202,35,2.84,66,2.88,74,2.674,140,3.801,151,2.787,152,2.747,221,3.868,222,3.651,322,2.514,329,4.847,342,2.67,359,3.7,497,4.109,749,3.684,773,4.917,822,2.263,823,1.873,824,2.275,825,2.787,826,5.064,831,7.53,852,1.609,1061,6.599,1133,4.109,1157,2.365,1334,2.93,1705,3.637,1713,5.847,1803,1.943,2150,4.582,2971,3.951,3025,2.985,3062,3.118,3063,2.709,3082,3.736,3355,6.754,3356,5.423,3375,6.347,3402,3.405,3403,3.405,3643,3.405,3644,3.047,3645,4.024,3646,5.95,3647,3.736,3648,6.408]],["t/853",[21,5.257,35,2.308,41,2.645,82,3.768,329,5.423,447,3.61,773,4.976,818,2.637,822,2.44,823,2.758,1923,8.489,1960,2.782,2262,2.594,2543,9.856,2829,4.928,2915,7.556,3252,3.303,3294,3.719,3295,3.99,3362,8.972,3649,10.137,3650,9.413,3651,7.043,3652,7.993,3653,7.043]],["t/855",[21,4.1,41,2.063,185,4.275,294,4.161,323,5.398,355,3.772,425,3.808,426,3.425,773,3.881,831,7.283,1119,6.034,1157,3.535,1820,5.117,2516,5.703,2829,3.844,2886,5.437,2915,6.165,3129,6.764,3362,6.311,3375,7.643,3643,10.1,3654,10.52,3655,8.138]],["t/857",[21,4.039,41,2.032,185,4.211,294,4.099,323,5.317,329,4.617,355,3.716,425,3.751,426,3.374,773,3.823,852,4.726,1119,5.944,1157,3.998,1820,5.041,2516,5.618,2829,3.787,2886,5.356,2915,6.108,3129,6.662,3362,6.217,3375,7.529,3654,10.421,3655,8.016]],["t/860",[41,1.891,244,2.621,497,7.242,818,3.819,820,6.104,822,3.201,823,5.257,824,6.387,825,7.823,1923,6.818,1926,8.159,2889,5.53,2890,5.14,2891,5.227,2892,4.339,2914,5.856,3028,5.934,3355,8.379,3356,7.458,3656,7.242,3657,8.183,3658,8.183]],["t/862",[41,1.62,49,3.186,230,2.313,244,2.246,315,2.059,396,4.123,497,6.542,664,4.259,752,5.301,818,3.54,820,5.23,822,2.892,823,4.748,824,5.769,825,7.067,840,4.518,841,2.428,1076,3.775,1128,2.972,1566,3.699,1923,6.975,1926,7.891,2787,5.496,2889,4.739,2890,4.404,2891,4.479,2892,3.718,2913,7.727,2914,8.224,3028,5.084,3355,7.568,3356,6.391,3632,3.947,3656,6.542,3657,7.012,3658,7.012,3659,10.203,3660,6.656]],["t/864",[76,3.084,109,2.547,841,3.52,1599,8.481,1803,5.284,2796,8.29,2884,7.966,2913,8.29,2914,8.577,3661,10.946]],["t/866",[21,4.825,41,2.427,81,4.814,244,3.619,312,6.496,818,3.04,823,3.374,950,7.635,1108,6.352,1143,7.724,1728,3.466,1741,6.262,1960,3.404,2137,6.227,2262,3.173,2829,4.523,2891,6.71,2892,4.886,2914,6.594,3028,6.681,3656,8.438,3662,7.249,3663,7.249,3664,7.249,3665,6.513,3666,9.214,3667,11.315,3668,7.249,3669,7.249,3670,7.249,3671,7.249,3672,7.249,3673,7.249]],["t/868",[41,2.27,82,5.536,818,3.875,2829,4.229,2891,6.275,2915,7.243,3656,8.11,3666,9.824,3674,9.824]],["t/871",[21,5.187,41,2.61,818,3.726,822,2.811,2262,4.341,2829,4.862,2891,7.214,2915,7.401,3651,9.953,3656,7.799,3675,9.209]],["t/873",[21,5.187,41,2.61,818,3.726,822,2.811,2262,4.341,2829,4.862,2891,7.214,2915,7.401,3656,7.799,3676,11.294,3677,9.917]],["t/875",[21,4.437,41,2.233,818,3.188,822,2.949,823,4.843,2829,4.16,2891,6.172,2915,7.486,3651,8.515,3656,6.672,3675,9.663,3676,9.663]],["t/877",[0,0.759,2,5.789,3,1.165,22,2.501,26,1.672,27,2.387,28,1.501,30,1.286,33,1.108,35,1.426,41,1.141,66,2.446,69,2.24,131,0.666,140,1.336,150,2.508,153,1.375,193,1.161,221,3.21,222,3.03,244,2.831,272,2.555,304,1.048,322,2.086,325,2.497,342,0.938,359,1.483,376,4.754,390,2.399,409,2.298,413,1.305,448,1.267,614,1.131,749,1.476,773,1.292,818,3.235,822,3.361,826,6.035,831,6.019,940,1.38,972,3.708,992,5.978,1047,1.204,1061,6.031,1063,5.942,1108,5.342,1149,5.535,1208,2.618,1334,1.951,1446,6.021,1519,1.496,1705,4.335,1713,4.431,1725,4.688,1840,2.155,1917,9.68,1934,2.424,2309,4.938,2365,6.307,2542,2.48,2755,4.835,2762,1.336,2815,4.842,2829,1.279,2915,4.106,2971,1.584,3032,2.544,3058,2.075,3103,2.216,3276,2.329,3278,4.966,3362,2.1,3363,2.184,3368,2.374,3371,8.837,3373,6.543,3374,4.227,3375,4.227,3381,2.972,3615,2.155,3656,2.052,3678,7.948,3679,3.2,3680,2.374,3681,4.938,3682,3.2,3683,3.2,3684,3.2,3685,3.2,3686,3.2,3687,2.424,3688,2.075,3689,2.48,3690,2.708,3691,3.2,3692,2.544]],["t/879",[0,1.314,6,2.363,27,4.136,60,2.877,62,3.727,73,2.41,88,2.139,89,3.33,114,4.812,170,4.245,224,7.96,306,4.297,342,3.467,357,2.545,407,3.861,521,5.48,563,5.356,570,3.494,692,2.946,693,3.787,1899,7.498,3632,4.95,3642,8.795,3693,8.016]],["t/881",[0,0.904,6,2.029,21,5.114,41,2.573,81,6.185,82,3.56,125,3.241,218,3.106,244,2.419,272,3.908,312,4.669,409,2.351,770,4.669,822,3.614,1569,4.744,1917,6.16,1960,3.819,2262,3.56,2385,7.552,2553,9.955,2613,6.16,2829,4.795,2891,4.824,2892,4.004,2925,6.874,3081,6.884,3249,5.721,3362,5.338,3567,6.033,3651,6.655,3656,7.69,3694,11.137]],["t/883",[21,4.712,41,2.784,82,3.728,218,2.467,244,2.533,312,4.889,390,2.994,409,2.462,736,8.561,759,3.946,967,4.375,1108,7.285,1334,4.054,1569,4.967,1917,6.45,2235,6.121,2262,3.728,2613,6.45,2751,8.368,2965,8.196,3695,10.62,3696,11.049,3697,11.049,3698,8.517,3699,8.517]],["t/885",[0,1.329,4,2.318,19,1.449,41,1.734,88,1.825,116,3.231,166,4.413,349,2.641,356,2.212,386,3.622,390,2.841,409,2.336,570,3.939,614,2.856,752,4.199,822,2.291,1096,3.713,1398,5.241,1609,4.878,1680,5.441,1705,3.681,1873,3.745,1884,5.484,2353,9.036,2528,5.441,2971,3.999,3138,6.121,3362,5.304,3625,6.424,3632,5.58,3655,6.84,3700,6.424,3701,8.082,3702,8.082,3703,8.082,3704,8.082,3705,8.082,3706,11.956,3707,11.102,3708,8.082,3709,8.082]],["t/887",[0,0.82,19,1.322,38,2.203,47,2.462,74,4.901,88,1.666,110,2.921,115,1.921,116,2.948,118,2.713,228,3.704,230,3.497,296,2.948,338,1.921,342,2.944,346,3.544,349,1.824,356,2.019,357,1.981,358,3.027,468,4.202,570,2.721,576,4.412,614,3.549,617,2.062,693,2.948,877,2.699,972,3.1,990,3.878,1047,2.775,1053,3.216,1066,4.374,1313,7.448,1982,4.581,2762,5.522,2865,6.301,2971,3.65,3632,5.967,3656,4.729,3710,6.501,3711,6.512,3712,5.863,3713,5.471,3714,7.376,3715,10.601,3716,7.376,3717,5.586,3718,7.376,3719,7.376,3720,6.242]],["t/889",[0,1.062,22,3.283,26,3.003,27,3.34,28,1.936,30,1.658,33,2.374,35,1.839,41,1.471,66,2.267,82,3.001,131,1.428,140,2.862,150,4.504,221,4.139,222,3.906,325,3.219,329,3.342,342,2.01,773,5.043,818,2.1,822,3.368,940,2.956,992,3.626,1061,4.314,1063,6.801,1369,4.903,1519,3.205,1713,3.012,1807,6.267,1840,4.616,2365,6.828,2367,6.518,2755,5.582,2762,2.862,2815,5.818,2829,2.741,2892,4.701,2915,4.933,2925,4.396,2971,3.393,3276,4.99,3278,7.996,3363,4.68,3368,5.086,3674,6.366,3721,6.856]],["t/891",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/893",[19,1.998,92,3.116,98,3.124,115,2.902,131,2.716,153,3.708,168,4.713,169,4.682,219,4.386,230,2.645,255,5.535,278,4.594,296,3.451,355,3.387,617,2.414,688,3.853,735,4.798,889,4.745,974,3.075,1002,5.979,1047,3.248,1128,3.397,1144,3.711,1317,4.053,1616,6.451,1638,7.147,1639,5.979,1942,3.966,2341,6.173,2515,7.064,2753,4.434]],["t/895",[632,6.394,633,5.856,635,8.262,636,6.042,638,7.402,639,8.262,640,6.606,641,8.262,3395,8.436]],["t/897",[0,1.095,6,3.021,19,1.285,26,3.991,82,3.137,114,5.002,119,4.053,131,1.492,150,6.626,155,3.067,170,4.412,320,2.601,342,2.887,407,2.922,448,2.838,616,2.055,619,3.199,632,6.457,633,5.176,635,7.304,636,7.114,638,6.543,639,5.316,640,6.671,641,7.304,689,4.366,877,2.622,1108,5.527,1557,3.661,1897,4.763,2880,5.428,2882,6.317,3393,6.317,3394,5.697,3395,7.457,3722,5.864,3723,6.655]],["t/899",[4,1.788,6,2.439,20,1.296,42,2.454,45,4.023,76,1.096,88,1.408,96,1.794,110,2.469,115,1.623,125,1.549,131,1.298,134,4.537,150,2.941,218,1.806,320,1.411,378,5.11,407,2.541,432,3.579,616,2.561,619,2.783,632,6.539,633,3.278,635,4.625,636,6.373,638,2.584,639,4.625,640,6.755,641,4.625,693,1.554,695,4.043,876,2.306,950,3.912,1040,4.906,1043,1.742,1155,1.944,1215,7.997,1317,1.826,1319,1.779,2345,2.884,2509,2.069,2562,2.552,2768,8.165,2774,8.655,2780,6.012,2781,8.165,2785,3.427,2880,2.945,3113,5.581,3395,4.722,3509,3.61,3510,5.276,3722,7.997,3724,6.235,3725,3.181,3726,2.945,3727,3.888,3728,3.888,3729,3.61,3730,3.888,3731,3.888]],["t/901",[0,1.218,42,1.874,218,3.434,272,3.277,328,6.056,409,2.75,632,3.915,633,3.585,636,3.699,638,4.532,640,4.044,745,4.832,774,5.302,818,3.356,822,1.933,824,5.379,960,3.588,1361,4.637,1619,4.01,1620,5.83,1621,5.165,1622,8.211,1623,7.371,1624,5.284,1626,6.805,1627,3.261,1847,5.165,2116,4.963,2439,5.771,2441,8.297,2502,8.051,2800,5.58,2801,6.011,2802,6.011,2803,4.963,2804,5.58,2805,9.657,2806,3.915,2807,6.011,2808,5.771,2809,6.011,2810,6.011,2811,4.963,2812,6.011,2813,6.011,2814,9.657,3732,6.332]],["t/903",[0,1.32,6,2.381,73,2.428,76,2.689,109,2.22,110,3.779,341,4.941,572,6.052,616,3.993,617,3.321,692,2.968,836,5.522,1157,3.519,1537,6.425,1606,4.959,2516,5.66,2773,6.717,3327,5.437,3733,9.544]],["t/905",[41,2.728,617,3.555,633,4.835,636,4.988,773,5.676,1803,6.139,2890,7.417,3267,8.45,3327,7.244,3397,6.036,3508,7.525,3734,7.783,3735,7.783,3736,7.783,3737,7.783,3738,6.965]],["t/907",[41,2.728,617,3.555,633,4.835,636,4.988,773,5.676,1803,6.139,2829,5.083,3267,8.45,3327,7.244,3397,6.036,3508,7.525,3734,7.783,3735,7.783,3736,7.783,3737,7.783,3738,6.965]],["t/909",[41,2.756,617,3.591,633,4.943,636,5.1,773,5.185,1803,6.201,3267,8.536,3327,7.318,3397,6.17,3508,7.693,3594,7.979,3734,7.957,3735,7.957,3736,7.957,3737,7.957,3738,7.12]],["t/911",[6,3.315,30,2.782,38,2.708,47,3.026,66,2.372,116,3.624,118,3.335,155,3.88,341,3.771,344,6.597,352,2.193,562,3.784,602,2.908,616,3.623,619,4.046,773,4.642,1043,4.062,1157,2.685,2263,4.581,2264,4.509,2762,3.784,2773,5.126,3367,7.965,3397,7.548,3738,6.865]],["t/913",[30,2.418,32,6.464,66,2.521,244,2.973,818,3.062,1334,4.484,1807,6.56,2235,5.765,2944,5.928,3397,6.56,3606,8.179,3607,8.459,3608,6.823,3609,10.344,3611,8.811,3612,9.281,3738,7.57]],["t/915",[19,1.44,33,2.781,45,2.68,72,2.719,76,2.263,98,2.906,109,2.773,110,3.18,122,2.6,131,2.214,155,3.437,181,3.895,242,2.954,338,2.091,341,3.341,400,3.994,616,3.049,703,3.858,735,3.121,876,4.763,877,2.938,882,5.101,966,4.328,1043,3.599,1074,4.508,1215,6.571,2075,4.102,2212,5.149,2736,4.847,2755,4.08,2759,7.886,2775,9.235,2776,6.082,2777,9.473,2781,6.36,2797,7.079,2827,8.998,3739,8.031,3740,8.031,3741,8.031]],["t/917",[0,1.227,60,3.354,62,4.345,519,5.737,520,5.95,672,5.153,694,5.305,911,6.665,3742,10.252]],["t/919",[20,1.783,60,3.371,61,3.874,62,3.374,73,2.181,88,1.937,135,3.472,172,6.031,185,4.933,352,2.074,357,2.304,361,3.53,521,4.961,524,6.24,532,6.882,663,4.356,777,5.274,822,2.43,841,2.757,877,3.137,1124,3.226,1293,5.13,1519,4.008,1803,4.139,1982,5.326,2300,5.561,2662,5.437,2663,5.561,2765,4.922,2880,6.494,2987,5.561,2988,7.256,3122,4.508,3358,6.031,3743,7.016,3744,8.574,3745,8.574,3746,7.962]],["t/921",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/924",[0,1.212,6,2.083,18,3.534,19,1.497,73,2.124,88,1.886,306,5.51,316,2.631,341,3.473,349,2.065,356,2.285,403,5.602,437,2.869,612,4.069,616,3.931,617,3.049,670,4.756,693,4.36,735,3.245,911,5.039,1082,5.294,1616,5.7,1646,3.835,2766,9.801,2956,7.359,2995,7.359,3747,8.09,3748,7.752,3749,7.752]],["t/927",[0,0.44,22,2.371,26,1.245,27,2.764,28,1.118,30,0.958,33,2.736,66,2.554,69,3.625,140,1.653,150,1.868,226,3.605,227,3.266,328,2.023,394,4.06,616,3.477,752,5.958,755,4.488,906,3.012,966,6.534,1068,3.956,1616,6.336,1629,3.555,2075,6.193,2092,2.786,2093,3.241,2738,6.686,2811,9.964,2953,10.369,2954,8.685,2996,3.069,3005,4.903,3711,5.853,3748,3.678,3750,3.961,3751,9.025,3752,12.124,3753,9.025,3754,6.328,3755,9.025,3756,6.328,3757,9.025,3758,6.328,3759,6.328,3760,6.328,3761,6.328,3762,6.328]],["t/929",[0,0.276,22,1.772,26,0.781,27,1.981,28,0.701,30,0.601,33,0.86,37,2.346,66,2.47,69,3.872,83,3.449,140,1.037,150,1.172,226,2.445,227,1.553,309,2.574,310,2.785,328,1.269,394,4.246,437,3.243,438,3.483,693,3.773,752,6.938,906,2.042,966,6.452,1036,4.039,1068,3.58,1334,3.463,1585,1.437,1629,4.017,2075,6.116,2093,2.033,2738,7.092,2953,10.295,2954,8.933,2995,2.19,2996,1.925,2998,6.26,2999,11.403,3000,10.926,3001,7.733,3005,6.453,3006,3.984,3441,2.033,3632,3.524,3763,2.484,3764,6.742,3765,2.484,3766,2.484,3767,4.291,3768,4.291,3769,4.291,3770,6.742,3771,9.438,3772,6.742,3773,4.291,3774,8.328,3775,4.291,3776,2.307,3777,1.514,3778,4.291,3779,2.484,3780,4.291,3781,6.742,3782,6.742,3783,6.742,3784,4.291,3785,4.291]],["t/931",[0,0.605,22,2.535,26,1.711,27,2.828,28,1.536,30,1.316,33,1.884,66,2.554,69,3.747,83,3.124,140,2.272,150,2.567,226,4.606,227,2.926,394,3.638,616,3.43,670,6.813,752,6.609,906,3.849,966,6.445,1068,3.869,1334,4.667,1629,4.341,2075,6.109,2738,7.349,2950,6.843,2952,6.616,2953,10.289,2954,8.088,2955,7.127,2957,7.127,2958,7.127,2960,7.127,2996,4.217,3005,6.265,3749,5.053,3786,5.442,3787,8.086,3788,8.086,3789,8.086]],["t/933",[0,0.544,19,0.878,33,3.506,37,1.704,41,1.942,47,2.492,73,1.245,83,1.891,85,2.002,88,1.106,118,1.801,122,1.585,174,2.618,242,2.747,291,3.253,315,2.973,338,1.275,341,2.036,349,1.211,356,1.34,357,1.315,386,3.346,394,2.202,400,2.435,468,4.253,612,5.6,616,1.404,617,1.369,670,5.156,712,2.036,752,4.702,818,2.773,879,2.543,882,2.095,900,2.573,906,2.33,966,2.638,972,2.058,1004,7.013,1047,2.809,1077,2.319,1082,3.104,1124,1.842,1334,3.32,1508,2.363,1646,4.158,1660,6.109,1744,6.854,1919,3.085,2276,3.296,2590,5.683,2736,2.955,2755,3.793,2758,2.605,2762,2.043,2764,4.816,2915,4.676,2941,3.891,2942,5.785,2943,5.934,2949,3.707,2950,4.143,2951,6.319,2952,6.109,2953,8.256,2954,5.654,2955,4.315,2956,4.315,2957,4.315,2958,4.315,2959,4.545,2960,4.315,2967,4.315,2969,3.562,2971,6.095,2974,7.668,2975,5.785,2980,5.096,2981,4.005,3106,3.998,3399,3.562,3790,3.793,3791,4.315,3792,5.251,3793,4.143,3794,4.545]],["t/935",[19,1.75,42,3.311,45,3.259,83,3.773,109,2.272,185,4.341,244,4.058,323,5.481,338,2.543,341,4.062,616,2.8,2092,6.868,2768,5.841,2774,6.192,2823,7.243,2904,6.332,3007,9.067,3638,6.332,3795,9.764,3796,9.764,3797,9.764]],["t/937",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/939",[18,3.466,45,2.732,47,3.594,109,1.905,115,2.132,118,3.012,131,2.242,160,3.698,262,3.745,315,2.233,320,2.971,340,2.719,341,5.317,357,2.199,437,2.813,438,4.229,602,3.454,616,3.91,688,3.654,896,5.67,911,6.499,1043,3.668,1537,5.512,1620,4.356,1982,5.085,2413,4.941,2460,5.137,2762,4.495,2773,7.228,2908,4.278,3341,4.629,3398,4.941,3688,5.309,3798,6.928]],["t/941",[0,0.766,6,1.72,18,2.919,38,2.059,73,2.803,78,5.546,98,3.469,109,1.604,115,1.795,116,4.405,131,1.435,170,3.089,182,3.483,228,3.536,230,2.112,338,2.869,341,5.207,342,2.021,348,3.447,350,4.507,352,2.665,357,1.852,358,2.829,359,3.194,394,3.102,396,3.764,562,4.001,570,2.543,616,3.59,617,2.68,688,3.077,692,2.144,703,3.312,1156,4.542,1277,5.114,1299,7.259,1531,5.48,1897,4.581,2233,5.503,2301,5.221,2595,4.775,2773,7.327,2865,4.326,3011,5.114,3715,6.401,3799,6.894,3800,5.834,3801,6.401]],["t/943",[18,4.102,78,5.606,114,4.923,116,3.873,293,5.747,306,4.396,308,4.073,341,4.031,359,4.49,576,5.797,616,3.439,617,2.709,692,3.729,1291,4.95,1547,5.363,1968,6.439,2025,4.723,2233,7.475,2755,4.923,2757,6.711,2796,7.338,3327,5.52]],["t/945",[0,1.177,20,1.659,22,2.097,28,2.253,30,2.561,66,1.646,72,2.702,76,2.248,116,3.19,135,3.232,140,3.331,153,5.103,185,4.706,228,2.944,320,2.896,341,5.478,342,2.34,359,3.698,405,4.993,430,3.169,602,2.56,616,3.777,665,5.527,1004,5.527,1058,3.909,1303,6.043,1555,4.862,1585,4.617,1634,3.547,1840,5.373,2269,7.41,2773,6.718,3654,7.034,3802,6.529,3803,8.96,3804,7.98]],["t/947",[0,1.266,5,3.135,18,2.294,19,0.971,22,2.801,26,2.534,28,2.275,30,1.949,38,1.619,45,1.809,66,2.199,76,1.527,99,3.319,109,1.261,118,2.965,140,3.365,150,3.802,153,2.328,161,4.237,166,2.959,185,3.583,211,2.604,252,2.522,320,2.925,341,4.739,342,2.363,349,1.34,356,1.483,357,2.863,358,3.308,616,3.546,617,1.515,633,4.237,1040,4.005,1043,5.105,1058,2.654,1105,3.601,1157,1.605,1324,3.02,1553,3.135,1557,4.117,1625,5.111,2075,4.117,2758,6.062,2759,4.019,2770,4.822,2773,7.184,2774,3.436,2781,4.822,2863,7.275,2886,3.064,2971,2.681,3367,5.582,3396,5.866,3465,4.434,3805,10.578,3806,7.484,3807,8.06]],["t/949",[6,1.598,51,5.309,110,2.536,116,2.561,131,2.536,160,5.209,161,3.368,242,2.357,310,2.344,325,4.274,341,4.405,350,2.62,357,1.721,410,3.452,430,1.917,562,2.674,614,3.217,616,3.037,617,2.545,693,2.561,698,3.545,699,3.984,1096,2.943,1133,4.107,1710,4.313,1968,4.257,2413,3.867,2755,3.254,2757,4.437,2758,3.409,2760,6.939,2762,5.283,2765,3.677,2815,3.902,2886,6.52,2971,3.17,3367,4.437,3368,4.751,3465,7.448,3592,4.019,3606,5.241,3632,3.348,3636,5.241,3644,4.851,3680,4.751,3688,4.154,3808,5.421,3809,4.963,3810,5.241,3811,6.406,3812,6.406,3813,11.752,3814,11.752,3815,5.092]],["t/951",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/954",[6,1.895,21,5.691,41,2.863,88,1.716,116,3.037,304,3.796,409,3.943,617,2.124,773,5.387,1068,3.047,1133,6.568,1163,4.264,1164,4.205,1960,4.81,2262,4.484,2787,5.529,2829,5.453,2833,7.703,2971,5.069,3251,3.74,3615,5.115,3632,3.97,3816,7.054,3817,10.245,3818,7.597,3819,7.597]],["t/956",[0,1.52,21,5.83,41,2.933,304,3.96,617,1.021,773,5.518,822,3.875,1068,1.465,1960,2.783,2262,2.595,2829,5.465,2903,3.391,2915,7.556,2918,4.047,2924,5.017,2971,5.848,3251,1.798,3252,3.304,3294,3.72,3295,3.991,3296,4.49,3297,4.49,3625,4.712,3820,5.225,3821,5.504,3822,5.504,3823,5.504,3824,5.504,3825,5.928,3826,3.653,3827,5.928,3828,5.928,3829,5.928,3830,5.928]],["t/958",[21,5.885,41,2.961,304,3.034,773,5.57,1960,4.35,2262,4.055,2829,5.517,2971,4.584,3251,4.561,3252,5.163,3294,5.813,3656,7.476,3692,7.364,3713,6.872,3831,8.166]],["t/960",[0,1.391,21,5.076,35,2.148,38,0.968,41,2.554,82,5.309,98,1.173,115,1.399,116,1.296,230,0.993,321,4.07,437,1.847,447,6.18,522,5.394,741,2.389,753,1.833,754,1.397,773,4.805,818,3.833,822,4.003,823,4.721,992,2.843,1163,5.958,1164,5.875,1548,1.794,1578,1.604,1795,2.154,1889,1.684,1960,1.522,2262,1.419,2829,4.759,2915,7.711,2971,1.604,3028,6.829,3252,1.806,3294,2.034,3295,2.182,3296,2.455,3297,2.455,3567,5.942,3652,7.439,3656,2.078,3713,2.404,3822,3.01,3823,3.01,3824,3.01,3832,3.01,3833,3.241,3834,3.241]],["t/962",[21,5.492,41,2.763,82,5.999,304,3.572,409,3.153,617,2.334,773,5.199,818,3.946,1068,3.348,2262,4.773,2829,5.149,2915,7.316,3251,4.11,3835,8.924,3836,10.906]],["t/965",[21,5.879,41,2.958,82,5.577,304,4.02,617,1.828,818,3.903,1068,2.622,1960,4.336,2262,4.042,2829,5.512,2915,7.272,2971,4.57,3251,3.219,3252,5.147,3294,5.795,3713,6.851,3837,12.153,3838,12.275]],["t/967",[21,5.835,41,2.936,82,5.512,304,3.967,312,8.21,617,1.764,818,3.858,1068,2.53,1960,4.229,2262,3.942,2829,5.47,2915,7.225,2971,5.667,3251,3.106,3252,5.019,3294,5.651,3713,6.68,3839,12.111]],["t/969",[21,5.822,41,2.929,82,3.914,304,3.951,617,1.747,818,3.493,823,5.306,1068,2.505,1728,6.002,1960,4.199,2262,3.914,2829,5.458,2915,7.42,2971,6.541,3251,3.076,3252,4.984,3294,5.611,3713,6.633,3840,9.137,3841,12.065]],["t/971",[21,5.822,41,2.929,82,3.914,304,3.951,617,1.747,818,3.493,823,5.306,1068,2.505,1728,6.002,1960,4.199,2262,3.914,2829,5.458,2915,7.42,2971,6.541,3251,3.076,3252,4.984,3294,5.611,3713,6.633,3842,10.635,3843,12.065]],["t/973",[21,5.671,41,2.853,288,11.144,304,3.773,617,2.099,1068,3.011,1960,4.771,2262,4.448,2829,5.316,2915,7.444,2971,5.029,3181,11.722,3251,3.696,3656,6.516,3713,7.538,3844,11.521]],["t/975",[21,5.671,41,2.853,288,10.571,304,3.773,617,2.099,1068,3.011,1960,4.771,2262,4.448,2829,5.316,2915,7.444,2971,5.029,3181,11.722,3251,3.696,3656,6.516,3713,7.538,3845,11.521,3846,11.521]],["t/977",[41,2.813,82,5.298,1149,7.596,1705,5.514,2365,8.656,2367,8.263,2829,3.934,2891,5.836,2915,6.773,3624,11.24,3707,11.24,3847,12.105]],["t/979",[0,1.453,21,5.572,822,3.703,1960,4.585,2262,4.274,2829,3.903,2915,7.373,3123,8.264,3567,7.243,3848,11.187,3849,11.187,3850,9.764]],["t/981",[19,2.223,20,2.128,76,2.885,174,3.59,210,6.237,228,3.777,296,4.093,338,2.666,400,5.092,616,2.936,1344,4.588,2627,7.293,2942,9.609,3002,6.803,3851,12.402]],["t/983",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/986",[20,1.702,37,2.849,74,5.44,114,5.47,160,5.436,210,4.987,228,3.02,230,2.508,310,4.402,325,3.844,338,2.132,453,4.01,602,2.626,614,3.805,616,3.088,617,3.01,741,3.639,1033,6.072,1075,5.191,1076,4.093,1662,9.491,1728,3.915,1793,4.595,1881,5.309,2116,5.958,2187,4.987,2244,5.085,2291,6.2,2762,4.495,2971,4.051,3852,11.172,3853,5.588,3854,8.186,3855,7.601,3856,7.216,3857,8.186,3858,6.507,3859,7.601]],["t/988",[0,0.758,37,2.373,38,2.037,39,2.435,41,1.463,47,3.957,73,1.735,83,2.635,103,3.133,111,3.585,160,5.987,161,5.76,167,4.372,252,3.174,350,3.891,356,1.867,361,2.808,410,3.675,426,2.429,548,3.374,562,3.971,567,3.427,595,3.585,616,2.728,617,2.66,658,2.344,974,2.429,1003,3.503,1051,4.532,1055,7.588,1793,3.828,2200,5.165,2233,3.915,2357,4.963,2679,4.044,2760,6.242,2762,2.847,2886,6.703,3263,5.421,3592,5.97,3700,7.562,3808,5.771,3809,8.489,3810,7.784,3860,6.82,3861,6.332,3862,6.332,3863,6.82,3864,8.386,3865,6.82,3866,5.058,3867,6.332,3868,5.771]],["t/990",[6,2.575,160,6.049,161,5.426,343,5.75,357,3.348,602,3.311,692,3.21,1053,4.5,2263,6.297,2264,6.199,3327,5.88,3869,8.445]],["t/992",[160,5.743,161,5.609,357,3.415,602,3.423,616,3.646,692,3.318,2762,5.307,2886,7.189,3869,8.73]],["t/994",[160,5.686,161,5.516,602,3.366,616,3.61,692,3.263,1941,7.818,2760,7.171,2762,5.254,2886,7.117,3869,8.585]],["t/996",[160,5.743,357,3.415,602,3.423,616,3.646,617,3.554,692,3.318,693,5.082,3592,6.695,3594,6.627]],["t/998",[160,5.686,602,3.366,616,3.61,617,3.519,692,3.263,693,5.032,1941,7.818,2760,7.171,3592,6.584,3594,6.517]],["t/1000",[160,5.658,357,2.796,602,3.339,616,3.592,692,3.236,1157,3.083,2760,5.928,2762,5.228,2886,7.082,3866,9.29,3868,10.599]],["t/1002",[160,5.658,229,6.018,357,2.796,602,3.339,616,3.592,692,3.236,1157,3.083,2760,5.928,2762,5.228,2886,7.082,3870,11.629]],["t/1004",[85,5.072,160,5.603,357,2.75,602,3.285,616,3.557,692,3.184,847,7.013,1157,3.033,2760,5.833,2762,5.177,2886,7.013,3871,12.402]],["t/1006",[160,5.603,357,2.75,602,3.285,616,3.557,692,3.184,847,7.013,1157,3.033,1919,5.124,2760,5.833,2762,5.177,2886,7.013,3872,12.402]],["t/1008",[160,5.603,357,2.75,602,3.285,616,3.557,692,3.184,847,7.013,1157,3.033,1790,5.959,2760,5.833,2762,5.177,2886,7.013,3873,12.402]],["t/1010",[0,0.922,4,2.379,19,1.487,85,3.392,160,4.906,357,2.228,361,4.471,390,2.916,409,2.398,448,3.284,532,4.386,570,4.467,602,2.661,616,3.115,617,3.385,692,2.579,847,6.141,1156,3.929,1157,2.457,1461,5.006,1609,5.006,1870,5.443,1884,6.22,1919,3.426,1938,5.053,2760,4.725,2762,4.533,2886,6.141,3284,7.31,3285,7.31,3286,7.701,3287,10.084,3288,7.019,3874,10.86]],["t/1012",[160,5.658,357,2.796,602,3.339,616,3.592,692,3.236,693,5.007,847,7.082,1157,3.083,2760,5.928,3632,6.546,3875,12.524]],["t/1014",[160,5.603,343,5.722,357,2.75,602,3.285,616,3.557,692,3.184,693,4.958,847,7.013,1157,3.033,2760,5.833,3632,6.481,3876,12.402]],["t/1016",[6,2.854,160,5.168,383,5.278,1157,3.389,2443,9.094,3809,8.865]],["t/1018",[78,6.619,160,5.168,616,3.281,1096,5.256,2760,6.518,3808,9.682]],["t/1020",[0,1.176,19,1.897,20,2.2,37,3.682,88,2.39,160,4.78,164,5.346,167,6.784,349,2.617,352,2.559,481,5.702,909,6.784,1076,5.29,1157,3.134,1601,8.41]],["t/1022",[66,2.201,161,6.684,196,4.485,197,4.634,773,5.132,2889,7.977,2890,8.2,3877,8.267]],["t/1024",[35,2.659,41,2.128,66,2.046,69,3.256,161,5.214,227,3.589,270,4.043,272,5.844,304,3.248,773,5.311,820,8.425,2531,7.684,2829,4.862,2906,7.356,3032,7.883,3653,8.115,3656,6.359,3692,7.883]],["t/1026",[0,0.934,6,2.097,19,1.506,20,1.747,41,2.614,118,3.092,160,5.834,294,3.637,317,2.91,339,4.137,340,2.791,343,3.877,352,2.649,405,3.964,425,3.328,426,2.993,496,4.341,693,3.359,773,3.392,1053,3.664,1627,6.175,1697,5.388,1773,6.876,2160,6.116,2263,5.535,2264,5.448,2829,4.379,2846,8.318,2886,4.752,3594,5.22,3878,7.407,3879,7.407]],["t/1029",[41,2.477,745,4.706,2890,6.733,3267,7.672,3880,11.545]],["t/1031",[6,2.363,41,2.536,155,4.054,160,6.098,229,4.551,430,2.835,745,4.819,1053,4.13,1077,4.488,1968,6.295,2025,4.617,2757,6.56,2796,7.174,2890,6.896,3327,5.396,3864,11.361,3866,7.026,3867,8.795,3868,8.016,3870,8.795,3881,9.472]],["t/1033",[41,2.5,693,4.658,2829,4.658,3594,7.237]],["t/1035",[0,1.186,73,2.714,88,2.41,341,4.438,616,3.895,617,2.983,692,3.318,1561,8.73,2256,6.078,2773,6.033,2815,6.5,3327,6.078]],["t/1037",[6,2.148,19,1.062,30,1.433,35,1.589,41,2.175,66,1.222,116,2.369,118,2.18,131,1.792,160,3.889,161,3.115,166,3.235,224,3.99,306,3.905,323,3.326,352,2.858,405,2.795,452,2.128,616,3.191,617,3.447,633,3.115,636,3.214,693,3.441,745,2.416,773,5.26,818,1.815,1053,2.584,1123,2.994,1124,2.23,1157,1.755,1334,3.719,1803,4.894,1807,3.889,2235,4.06,2762,3.593,2815,5.244,2829,4.052,2892,2.917,2944,3.514,2971,2.932,3267,7.393,3327,6.338,3397,7.302,3508,4.849,3592,3.719,3606,4.849,3734,8.579,3735,10.001,3736,5.015,3737,5.015,3738,4.488,3882,3.889,3883,4.849,3884,8.608,3885,5.926,3886,4.313,3887,3.257,3888,3.514]],["t/1039",[19,1.487,20,1.725,22,1.481,30,1.363,39,3.517,41,2.484,42,2.985,45,1.881,47,1.881,49,2.377,54,3.287,66,1.712,69,1.85,88,1.273,115,1.468,125,2.246,160,2.546,182,2.848,196,3.488,197,3.604,227,3.003,229,2.708,242,3.623,310,2.062,315,1.537,320,2.045,341,2.344,346,2.708,357,1.514,358,2.313,548,2.789,616,2.824,617,2.32,683,3.36,749,2.6,771,5.982,773,2.275,852,2.253,966,3.037,1053,2.457,1057,3.847,1124,2.121,1155,2.818,1627,3.968,2228,3.613,2278,3.613,2610,3.235,2623,3.964,2732,3.745,2733,4.625,2734,5.377,2736,3.402,2737,3.372,2738,3.187,2739,3.372,2743,3.141,2744,3.187,2755,4.216,2831,3.794,2834,6.098,2835,4.48,2836,4.03,2837,4.611,2838,8.681,2839,9.576,2840,3.699,2841,8.681,2842,10.207,2843,4.18,2844,3.261,2845,4.102,2846,3.847,2847,4.367,2848,3.261,2849,4.102,3889,4.611]],["t/1041",[27,1.642,30,2.94,33,2.504,66,2.429,67,3.38,72,1.59,109,1.092,110,1.859,160,5.492,244,3.182,315,1.972,338,1.223,340,1.56,357,2.369,359,2.176,361,1.933,531,3.483,570,1.732,602,2.32,616,2.074,692,3.081,822,3.337,882,2.009,974,4.194,1055,3.252,1061,6.083,1063,3.802,1074,2.636,1119,2.946,1858,3.417,2075,3.694,2235,2.215,2760,6.925,2773,2.655,2844,6.19,2886,7.865,2944,2.785,2945,3.974,3396,5.263,3469,5.009,3497,10.453,3498,8.733,3803,6.12,3862,4.36,3890,10.699,3891,7.232,3892,10.699,3893,4.695,3894,6.12]],["t/1043",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1046",[38,2.808,73,2.392,77,5.003,87,5.484,116,3.758,228,3.469,229,4.517,580,5.625,614,4.159,616,3.375,617,2.629,658,3.231,836,5.44,841,3.023,930,6.17,1251,7.285,1764,5.9,1793,5.278,2025,6.262,2630,7.12,2796,8.912,3313,6.097,3895,7.473,3896,7.473,3897,9.402]],["t/1048",[20,1.649,88,1.791,98,2.87,115,2.065,187,4.169,229,5.066,230,2.429,338,2.065,395,5.882,580,6.307,591,5.953,616,3.769,688,3.539,872,5.882,1154,4.246,1157,2.349,1219,6.006,1291,4.051,1602,4.976,1642,5.882,1968,7.006,2102,4.588,2130,6.144,2139,9.187,2233,4.552,2483,4.926,2503,4.831,2716,6.711,2757,8.203,3898,6.303,3899,5.882,3900,8.169,3901,7.93,3902,7.539,3903,7.363,3904,6.99,3905,5.492,3906,6.99,3907,7.93]],["t/1050",[109,2.155,165,5.592,174,3.249,183,3.59,229,4.451,230,2.838,481,4.993,616,2.657,658,3.184,673,6.8,692,2.881,854,7.016,1697,5.94,1761,6.872,1769,6.872,1856,5.813,2139,8.485,2233,5.318,2485,7.364,2578,6.742,2717,7.58,2796,7.016,3908,10.957,3909,9.264,3910,5.94,3911,7.84,3912,9.264]],["t/1052",[0,0.922,6,2.069,20,2.258,49,3.499,88,1.873,98,4.382,160,5.47,167,5.317,211,3.985,306,3.762,315,2.262,341,3.45,358,3.403,556,4.798,583,5.151,616,3.115,617,3.036,704,4.441,867,4.761,877,3.034,1136,4.761,1157,2.457,1228,4.559,1461,5.006,1714,6.152,1856,5.204,1968,7.217,2025,4.043,2061,4.191,2357,6.036,2757,8.386,3327,4.725,3809,6.426,3913,7.019,3914,10.86,3915,8.293,3916,5.584]],["t/1054",[0,1.363,22,2.903,26,2.678,28,2.404,30,2.06,66,2.279,140,3.555,150,4.017,341,3.543,342,2.497,616,3.169,735,3.31,745,3.472,774,4.747,960,2.789,1040,3.885,1061,4.992,1557,4.351,1616,4.451,1617,5.523,1619,5.008,1620,4.532,1621,6.45,1622,5.899,1623,6.599,1624,6.599,2075,4.351,2758,5.88,2770,5.095,3896,6.769,3917,11.049,3918,10.984]],["t/1056",[0,1.365,22,3.058,26,2.056,28,2.607,30,2.234,66,2.209,99,2.692,109,1.521,118,2.405,125,2.605,140,3.855,150,3.084,341,5.106,342,3.14,357,1.756,425,2.589,616,3.901,617,1.828,735,2.541,745,2.665,774,3.644,960,2.141,974,2.329,1040,3.247,1061,5.257,1124,2.46,1157,1.937,1557,3.34,1616,3.417,1617,4.24,1619,3.845,1620,3.479,1621,4.951,1622,4.528,1623,5.066,1624,5.066,1708,3.697,2025,5.22,2075,3.34,2758,4.915,2770,3.911,2773,6.58,2795,8.512,3803,5.533,3919,9.236,3920,10.258,3921,6.538]],["t/1058",[0,1.29,22,3.05,23,4.672,25,4.419,26,2.892,28,2.596,30,2.224,33,3.185,42,3.67,66,2.394,342,3.403,1040,3.234,1517,4.378,1520,4.724,1545,6.469,1557,4.698,1585,5.321,2774,7.36,2778,6.965,2779,7.126,2780,6.192,2795,7.31,3918,7.783,3920,8.107]],["t/1060",[0,1.148,22,3.065,27,3.613,28,2.171,30,1.86,35,2.062,66,2.572,140,3.21,151,7.153,152,7.05,153,3.303,182,3.885,322,3.016,342,2.255,358,3.155,616,2.205,773,3.104,818,3.164,822,2.179,823,3.578,1061,6.05,1087,6.778,1334,3.789,1609,4.641,1661,5.11,1713,5.124,1741,4.256,1859,5.823,2025,5.035,2438,5.249,2762,3.21,2795,6.112,2796,7.822,3025,5.704,3367,5.326,3396,5.596,3615,5.177,3922,4.256,3923,7.689,3924,7.689]],["t/1062",[37,4.095,218,3.409,262,5.383,409,3.402,616,3.375,712,5.6,1345,9.629,1620,6.262,1803,5.681,2025,4.583,2908,6.15,3398,7.103,3896,7.473,3918,9.959,3920,10.373]],["t/1064",[0,1.294,22,3.058,27,2.287,28,1.846,30,1.581,33,2.264,66,2.401,69,4.03,78,3.783,85,2.674,140,2.729,143,3.304,160,2.954,193,2.373,195,3.252,196,2.748,197,2.84,221,3.946,222,3.725,272,3.141,342,1.917,359,3.029,773,5.286,822,2.618,1061,6.043,1063,6.118,1968,4.345,2025,3.187,2114,7.156,2362,4.85,2520,5.349,2757,4.528,2795,7.341,2896,5.302,2925,4.192,3396,6.722,3632,3.417,3809,7.156,3831,5.763,3896,5.197,3925,10.805,3926,11.544,3927,7.557,3928,6.538]],["t/1066",[0,1.246,3,1.498,4,1.871,20,1.685,22,2.811,26,1.294,27,1.44,28,1.842,30,1.578,33,1.425,66,2.312,69,3.93,73,1.047,75,2.441,78,2.381,85,2.668,88,0.93,131,0.857,135,1.667,140,2.723,143,2.08,150,1.941,160,4.166,193,1.494,195,2.047,196,1.73,197,1.788,221,2.484,222,2.345,229,1.977,241,1.837,242,1.514,272,3.134,309,1.571,316,1.297,320,1.494,342,1.913,355,1.614,357,1.753,359,3.023,390,2.294,409,1.886,413,1.678,425,1.63,426,1.466,430,1.232,633,2.164,700,2.363,773,4.833,822,1.849,956,1.411,971,2.08,974,2.324,1040,2.294,1043,1.844,1061,5.541,1063,4.848,1155,2.058,1557,2.102,1625,2.61,1820,2.19,1968,2.735,2025,5.464,2075,2.102,2114,5.055,2235,3.822,2263,3.296,2264,3.245,2316,2.232,2362,3.053,2520,3.367,2757,2.85,2758,4.313,2770,2.462,2773,6.338,2781,2.462,2795,3.271,2896,3.745,2925,4.183,3396,2.995,3809,9.277,3810,6.631,3831,5.75,3896,5.185,3918,7.804,3925,9.335,3926,10.248,3927,3.367,3929,5.185,3930,5.521]],["t/1068",[19,1.614,20,1.871,38,3.42,71,5.648,111,6.019,231,3.24,453,4.409,616,4.125,617,3.201,658,3.093,686,4.732,836,5.208,841,2.894,1755,6.551,2187,5.484,2438,6.144,2443,9.1,3320,7.617,3336,8.358,3931,7.617,3932,8.358,3933,11.449,3934,9.001,3935,9.001]],["t/1071",[12,3.522,77,4.966,96,4.306,109,2.171,153,4.009,253,5.583,299,5.095,309,3.563,390,3.281,409,2.698,477,7.418,684,4.936,686,4.906,957,6.125,1049,6.202,1077,4.422,1247,4.741,1638,5.984,2362,6.923,2437,7.231,3313,6.052,3338,8.113,3501,8.666,3910,5.984,3930,10.834,3936,9.333,3937,9.333,3938,7.636]],["t/1073",[76,2.773,77,6.442,109,2.289,136,4.151,317,3.407,323,5.524,352,2.38,616,2.822,617,3.384,683,3.985,754,5.219,1056,5.693,1069,7.161,1176,7.822,1981,8.052,2362,7.299,3314,8.674,3930,8.328,3939,9.84,3940,9.137,3941,9.84]],["t/1075",[19,1.821,20,2.111,38,3.033,98,3.676,131,2.115,309,3.877,453,4.975,570,3.747,617,2.839,632,5.83,755,5.051,841,3.266,1124,3.822,1136,5.83,1697,6.512,2160,7.391,2362,7.533,3930,10.445,3931,8.595]],["t/1082",[380,5.704,430,3.305,909,7.079,914,7.831,1291,5.64,1772,6.198,3942,11.042,3943,11.042,3944,10.252]],["t/1097",[358,4.453,401,4.923,425,4.297,583,6.741,673,6.329,956,3.72,1269,7.516,3020,8.234,3931,9.184,3945,10.852,3946,10.852]],["t/1099",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1101",[20,2.046,136,4.151,349,2.434,352,2.38,450,4.797,452,4.346,570,3.63,578,5.564,693,4.839,696,4.728,1051,8.044,1123,6.117,1434,6.175,1829,6.24,1975,7.625,2156,6.309,2233,5.649,2610,5.649,2753,5.055,2866,7.299]],["t/1103",[19,2.184,38,1.913,73,2.316,77,3.409,88,1.447,104,6.509,115,1.668,213,5.353,228,2.363,241,2.859,302,6.3,310,2.344,315,1.747,316,2.869,352,1.549,425,2.536,437,3.128,453,3.138,481,3.452,496,3.309,570,2.363,616,3.037,633,3.368,684,3.388,687,4.257,693,3.639,841,2.06,844,7.037,867,3.677,870,4.963,877,2.344,910,5.241,971,3.237,1043,2.87,1096,2.943,1326,4.505,1328,2.968,1547,3.545,1562,4.204,1566,3.138,1640,3.409,1840,4.313,2127,5.421,2187,3.902,2241,3.545,2264,3.186,2413,3.867,2599,3.452,2614,5.646,3002,4.257,3018,4.963,3044,5.646,3491,5.646,3586,5.092,3587,5.241,3798,5.421,3902,4.58,3947,6.406,3948,6.406,3949,6.406,3950,5.948,3951,6.406,3952,5.646,3953,5.092,3954,6.406,3955,5.646]],["t/1105",[632,6.394,633,5.856,635,8.262,636,6.042,638,7.402,639,8.262,640,6.606,641,8.262,3395,8.436]],["t/1107",[0,0.96,19,1.548,73,3.319,136,3.642,160,5.036,302,4.018,315,2.354,349,2.135,350,3.531,352,2.986,356,2.363,361,3.555,562,3.604,617,3.451,693,4.935,735,3.356,844,4.566,1051,5.737,1123,4.362,1941,5.362,2256,4.918,2762,3.604,2829,3.451,2890,5.035,2904,5.599,3592,5.417,3598,4.713,3956,8.827,3957,11.146]],["t/1109",[0,1.501,22,3.411,27,2.218,28,2.973,30,2.186,35,1.7,41,1.939,66,2.503,67,2.964,140,4.396,143,5.8,160,2.865,193,3.822,196,3.799,221,3.828,222,3.613,272,3.047,342,1.859,352,2.186,361,2.611,735,2.465,768,6.59,773,4.251,2762,2.647,2890,3.699,3592,6.608,3593,6.26,3594,7.13,3598,4.935,3599,6.357,3600,8.074,3653,5.189,3956,6.463,3958,11.479,3959,10.531,3960,4.46,3961,8.16,3962,6.142]],["t/1111",[0,0.775,6,1.739,38,2.082,41,2.696,73,1.773,98,2.522,118,2.564,136,2.94,160,3.149,161,3.664,182,3.522,252,3.244,302,3.244,308,2.93,315,1.901,343,3.215,352,3.225,356,1.908,437,2.395,616,1.999,617,1.949,659,4.693,660,4.329,693,2.786,768,7.215,844,3.686,1038,3.074,1068,4.445,2152,4.52,2263,3.522,2264,3.466,2762,2.909,2829,2.786,2889,4.373,2890,4.065,3031,4.574,3592,4.373,3593,4.827,3594,4.329,3598,3.805,3599,4.902,3600,4.902,3601,4.902,3602,4.52,3956,8.557,3961,9.272,3962,6.98,3963,8.248]],["t/1113",[0,0.775,6,1.739,38,2.082,41,2.696,73,1.773,98,2.522,118,2.564,136,2.94,160,3.149,161,3.664,182,3.522,252,3.244,302,3.244,308,2.93,315,1.901,343,3.215,352,3.225,356,1.908,437,2.395,616,1.999,617,1.949,659,4.693,660,4.329,693,2.786,768,7.215,844,3.686,1038,3.074,1068,4.445,2152,4.52,2263,3.522,2264,3.466,2762,2.909,2829,2.786,2889,4.373,2890,4.065,3031,4.574,3592,4.373,3593,4.827,3594,4.329,3598,3.805,3599,4.902,3600,4.902,3601,4.902,3602,4.52,3956,8.557,3961,9.272,3962,6.98,3964,8.84]],["t/1115",[0,0.758,6,1.701,38,2.037,41,2.675,73,1.735,98,2.468,118,2.509,136,2.877,160,3.081,161,3.585,182,3.446,252,3.174,272,5.991,302,3.174,308,2.867,315,1.86,343,3.146,352,3.205,356,1.867,437,2.344,616,1.956,617,1.907,659,4.591,660,4.236,693,2.726,768,7.158,773,4.785,844,3.607,1038,3.008,1068,4.394,2152,4.423,2263,3.446,2264,3.392,2762,2.847,2829,2.726,2889,4.279,2890,3.977,3031,4.476,3592,4.279,3593,4.723,3594,4.236,3598,3.723,3599,4.797,3600,4.797,3601,4.797,3602,4.423,3956,8.477,3961,9.186,3962,6.914]],["t/1117",[0,0.287,6,0.351,38,1.743,41,2.69,73,0.358,98,0.509,111,2.724,116,1.033,118,0.518,136,0.594,160,0.636,161,0.74,174,0.494,182,0.711,252,0.655,302,0.655,308,0.592,309,4.81,315,0.384,343,0.649,352,1.55,356,0.707,430,0.421,437,0.484,616,0.404,617,0.393,659,0.948,660,0.874,664,5.284,693,2.767,768,6.85,841,0.453,844,0.744,870,1.091,956,0.482,1004,3.589,1038,0.621,1068,1.436,1170,0.893,1518,0.58,1566,6.201,2152,0.913,2163,1.152,2263,0.711,2264,0.7,2491,5.038,2762,0.588,2829,2.767,2889,4.344,2890,4.038,3031,4.543,3592,0.883,3593,6.658,3594,5.971,3598,0.768,3601,0.99,3602,0.913,3956,8.532,3961,9.245,3962,6.959,3965,2.114,3966,0.948,3967,10.172,3968,4.812,3969,11.641,3970,10.311,3971,10.167,3972,11.743,3973,11.044,3974,4.812,3975,11.177,3976,10.423,3977,5.182,3978,10.423,3979,9.613,3980,4.812,3981,9.37,3982,8.511,3983,5.182,3984,7.795,3985,6.923,3986,4.812,3987,5.182]],["t/1119",[0,0.775,6,1.739,38,2.082,41,2.696,73,1.773,98,2.522,118,2.564,136,2.94,160,3.149,161,3.664,182,3.522,252,3.244,302,3.244,308,2.93,315,1.901,343,3.215,352,3.225,356,1.908,437,2.395,616,1.999,617,1.949,659,4.693,660,4.329,693,2.786,844,3.686,1038,3.074,1068,4.445,1728,6.01,2152,4.52,2263,3.522,2264,3.466,2762,2.909,2829,2.786,2889,4.373,2890,4.065,3031,4.574,3592,4.373,3593,4.827,3594,4.329,3598,3.805,3599,4.902,3600,4.902,3601,4.902,3602,4.52,3886,9.146,3962,6.98,3988,10.128,3989,11.112]],["t/1121",[0,0.758,6,1.701,35,3.179,38,2.037,41,2.675,73,1.735,98,2.468,118,2.509,136,2.877,160,3.081,161,3.585,182,3.446,252,3.174,302,3.174,308,2.867,315,1.86,343,3.146,352,3.205,356,1.867,437,2.344,616,1.956,617,1.907,659,4.591,660,4.236,693,2.726,844,3.607,1038,3.008,1068,4.394,1728,5.963,2152,4.423,2263,3.446,2264,3.392,2762,2.847,2829,2.726,2889,4.279,2890,3.977,3031,4.476,3592,4.279,3593,4.723,3594,4.236,3598,3.723,3599,4.797,3600,4.797,3601,4.797,3602,4.423,3886,9.074,3962,6.914,3988,10.033,3989,11.008]],["t/1123",[0,0.82,6,1.84,38,2.203,73,1.876,98,2.669,118,2.713,136,3.111,160,3.332,161,3.878,182,3.727,252,3.432,302,3.432,308,3.1,315,2.011,343,3.403,352,3.274,356,2.019,437,2.535,616,2.115,617,2.062,659,4.966,660,4.581,693,2.948,844,3.901,1038,3.253,1068,4.579,2152,4.783,2263,3.727,2264,3.668,2762,3.079,2829,2.948,2889,4.628,2890,4.302,3031,4.841,3592,4.628,3593,5.108,3594,4.581,3598,4.027,3599,5.188,3600,5.188,3601,5.188,3602,4.783,3962,7.148,3990,10.804,3991,12.256,3992,12.822]],["t/1125",[0,0.801,19,1.292,44,3.567,69,3.704,82,4.326,228,2.659,302,3.354,309,2.752,316,4.14,405,3.399,664,4.709,770,5.674,818,3.456,822,2.802,823,4.6,836,4.17,844,3.812,864,4.433,979,4.92,1155,4.942,1334,3.627,1566,5.526,1713,4.343,1807,6.487,1820,3.836,1942,5.843,2200,5.459,2401,5.154,2892,4.866,3063,4.853,3359,5.246,3610,5.898,3626,5.459,3962,5.765,3993,7.208,3994,7.208,3995,6.1,3996,9.633,3997,6.693,3998,6.353]],["t/1127",[0,1.218,22,2.878,27,2.939,28,2.372,30,2.032,35,2.253,66,2.763,140,3.508,193,3.05,287,6.511,316,3.84,328,4.293,818,2.574,821,4.096,822,2.382,823,3.911,864,5.169,1334,4.471,1713,5.673,1942,5.032,3063,5.658,3996,8.295,3999,7.112,4000,9.039,4001,10.742,4002,9.27]],["t/1129",[0,0.405,6,0.909,38,1.088,41,2.172,69,1.942,73,1.505,98,1.318,118,1.34,136,2.495,160,2.672,161,3.109,182,1.84,242,3.725,244,3.512,252,1.695,272,6.379,302,2.752,308,2.486,309,2.258,315,1.613,343,2.729,352,3.075,356,0.997,437,2.033,616,1.045,617,1.018,659,2.452,660,2.262,664,2.469,693,2.364,752,6.899,770,7.622,821,2.883,844,3.128,1038,2.609,1068,2.995,1566,2.897,2152,2.362,2263,2.988,2264,2.942,2315,4.479,2762,2.469,2829,2.364,2889,3.711,2890,3.449,3031,3.882,3592,3.711,3593,4.096,3594,3.674,3598,3.229,3599,4.16,3600,4.16,3601,4.16,3602,3.836,3962,6.483,3964,4.16,3965,2.98,3967,3.082,3968,3.382,3969,3.382,3970,3.082,3996,6.51,3999,9.993,4002,5.005,4003,9.993,4004,9.798,4005,11.115,4006,11.808,4007,5.213,4008,5.914]],["t/1131",[95,5.852,131,1.81,287,6.735,302,4.045,316,4.122,355,4.392,357,3.327,430,3.915,693,3.475,844,4.597,956,2.98,979,5.933,1047,4.66,1334,3.189,1602,5.454,2413,5.247,2690,7.178,3995,7.356,4000,6.447,4001,9.869,4009,8.692,4010,11.196,4011,8.071,4012,8.675,4013,7.112,4014,7.356]],["t/1133",[4,2.6,110,3.59,116,3.624,302,4.219,309,3.461,340,3.011,343,4.182,355,3.556,430,3.976,437,3.115,576,5.423,664,3.784,741,4.03,752,4.71,821,4.419,844,4.795,889,4.983,1036,3.88,1566,4.441,1942,4.164,2263,5.811,2264,5.72,2765,5.204,3964,6.376,4002,7.672,4003,9.733,4007,7.991,4015,9.065,4016,9.065]],["t/1135",[6,2.978,30,2.326,35,2.579,47,3.209,118,3.538,244,3.55,302,4.475,316,3.761,352,2.326,430,4.176,576,5.753,693,3.844,844,5.086,1030,5.703,1034,5.478,1036,4.115,1092,6.66,1895,6.39,3747,7.133,4000,7.133]],["t/1137",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1139",[109,2.421,185,4.626,262,4.76,425,4.121,437,3.576,438,5.376,614,4.426,1612,6.915,1620,5.538,1982,6.464,2125,6.464,2460,6.53,2908,5.439,3398,6.282,3688,8.122]],["t/1141",[0,0.96,19,1.998,51,5.035,73,2.196,78,4.995,98,3.124,127,4.109,174,3.027,181,4.188,212,5.825,275,6.173,338,2.902,356,2.363,401,3.916,614,4.61,616,3.197,618,5.12,700,4.956,718,3.555,841,2.776,1029,6.403,1047,3.248,1077,4.09,1217,8.016,1344,3.868,1803,4.167,1991,4.229,2503,5.259,3647,8.016,3688,5.599,4017,8.016,4018,8.633,4019,8.633,4020,8.633,4021,8.633]],["t/1143",[0,1.061,6,2.381,19,1.711,20,1.984,51,5.566,78,5.522,88,2.156,109,2.22,310,3.492,338,2.485,340,3.17,349,2.36,359,4.422,562,3.984,602,3.062,614,4.198,773,3.852,1003,4.902,1050,5.709,1053,4.161,1298,5.928,1803,4.607,2886,5.396,2909,6.119,3680,7.079,3688,6.189,3802,7.809]],["t/1145",[0,1.062,22,2.887,27,3.34,28,1.936,30,1.658,35,2.561,66,2.577,69,2.251,125,2.732,131,1.428,140,2.862,153,2.945,159,3.967,174,2.404,221,4.139,222,3.906,230,2.1,244,3.268,272,3.294,325,3.219,342,2.01,346,3.294,390,2.411,409,1.982,425,2.715,614,2.423,741,3.048,773,5.222,778,4.066,818,2.925,822,3.114,823,3.191,824,6.213,1066,4.066,1163,3.849,1164,3.795,1334,2.516,1713,4.828,1934,5.193,2542,7.399,2755,4.851,2815,4.177,2909,4.396,3103,4.749,3615,6.429,3644,5.193,3680,5.086,3688,4.447,3689,5.313,3690,5.803,3711,4.447,3790,5.313,4022,5.61,4023,5.61]],["t/1147",[0,1.197,22,2.829,27,2.863,28,2.311,30,1.98,66,2.221,69,2.687,131,1.705,140,3.417,193,2.971,221,4.941,222,4.664,244,3.579,272,3.933,325,3.844,390,2.878,409,2.367,614,2.893,773,5.36,818,3.298,822,3.052,824,6.088,1163,4.595,1164,4.531,1934,6.2,2542,8.343,2755,5.47,2815,4.987,3103,5.67,3680,6.072,3688,5.309,3689,6.343,3690,6.928,4022,6.698,4023,6.698,4024,7.601]],["t/1149",[18,4.102,19,1.737,38,2.894,109,2.254,122,3.137,127,4.612,229,4.656,308,4.073,338,3.122,457,5.439,614,3.424,688,4.325,852,3.873,945,6.815,1133,6.213,1157,3.857,1840,6.524,2150,6.928,2762,5.005,3643,8.2,3646,8.997,3688,6.284]],["t/1151",[0,1.25,6,1.788,22,2.587,27,2.507,28,2.023,30,1.733,37,2.494,66,2.031,69,2.353,116,2.865,131,1.492,140,2.992,193,2.601,221,4.326,222,4.083,244,3.346,272,3.443,325,3.365,349,1.773,352,1.733,390,2.52,405,3.38,409,2.072,614,3.975,616,2.055,773,5.124,818,3.016,822,2.791,824,5.568,1094,5.864,1163,4.023,1164,3.967,1709,3.565,1820,3.814,1934,5.428,2236,4.408,2263,3.621,2264,3.565,2542,7.629,2755,5.002,2783,6.317,2815,4.366,3103,4.964,3397,4.704,3680,5.316,3688,7.295,3689,5.553,3690,6.065,3738,5.428,4022,5.864,4023,5.864,4024,6.655,4025,7.167]],["t/1153",[0,1.111,155,4.278,338,2.603,342,2.931,452,4.388,467,4.736,614,4.319,672,3.97,694,4.803,696,4.803,832,4.217,833,4.247,1094,8.179,1156,5.791,1157,3.621,2865,6.272,3688,7.926]],["t/1155",[20,1.691,136,3.431,229,3.908,294,5.19,316,3.379,349,2.012,352,1.967,426,2.897,433,4.706,438,4.202,450,3.965,452,3.849,570,3.001,578,4.599,616,3.075,640,4.824,693,5.297,696,5.151,1051,7.125,1076,4.066,1123,5.418,1434,5.104,1619,6.305,1820,6.383,1826,5.476,1829,6.799,1975,6.302,2156,5.215,2233,4.669,2610,4.669,2665,6.655,2753,4.178,2866,6.033,4026,6.655,4027,8.134]],["t/1157",[0,1.157,164,5.258,225,3.559,349,2.574,356,2.849,405,4.908,540,7.207,572,6.599,591,5.23,617,2.909,693,4.16,1157,3.083,1894,9.663,2822,7.573,2870,8.063,4028,8.272,4029,10.406]],["t/1160",[0,1.114,21,5.525,35,1.557,41,2.78,82,5.357,244,3.854,304,3.609,409,2.452,617,0.995,768,4.868,773,4.94,818,4.325,822,3.807,823,2.702,1030,3.443,1036,2.485,1068,1.428,1926,5.708,1960,2.726,2262,2.541,2892,6.223,2913,4.397,2914,3.858,3251,1.753,3252,3.236,3294,3.643,3295,3.909,3296,4.397,3297,4.397,3355,4.307,3608,3.963,3626,4.397,3882,7.232,3961,4.499,3962,3.386,3963,8.504,4030,4.615,4031,5.391,4032,5.391,4033,4.225,4034,4.913,4035,7.874,4036,4.913,4037,9.713]],["t/1162",[0,1.091,21,5.469,35,1.502,41,2.752,82,5.289,244,3.815,304,3.547,409,2.388,617,0.952,768,4.741,773,5.865,818,4.299,822,3.774,823,2.606,1030,3.321,1036,2.397,1068,1.366,1926,5.59,1960,2.63,2262,2.451,2892,6.153,2913,4.241,2914,3.722,3251,1.677,3252,3.121,3294,3.514,3295,3.771,3296,4.241,3297,4.241,3355,4.154,3608,3.823,3626,4.241,3882,7.108,3961,4.339,3962,3.266,4030,4.452,4031,5.2,4032,5.2,4033,4.076,4034,4.74,4035,7.669,4036,4.74,4037,9.546]],["t/1164",[0,1.256,21,5.317,41,2.675,244,3.361,304,3.383,409,3.267,617,1.713,768,5.062,773,5.033,818,4.261,822,3.534,1068,2.457,1960,4.14,2262,3.859,2892,6.963,3251,3.016,3608,6.019,3665,7.416,3882,6.78,3962,5.143,3964,8.771,4033,6.417,4034,7.463,4038,8.188,4039,8.188,4040,8.743]],["t/1166",[0,1.187,21,5.099,35,2.864,41,2.566,244,3.177,304,3.16,409,3.088,617,1.521,768,4.642,773,5.744,818,4.162,820,7.397,822,3.389,1068,2.182,1960,3.797,2262,3.539,2892,6.821,3251,2.679,3608,5.519,3665,9.23,3882,6.332,3962,4.716,4033,5.885,4034,6.843,4038,7.508,4039,7.508,4040,8.165]],["t/1168",[21,5.46,35,2.504,41,2.747,244,3.809,304,3.537,409,3.702,617,1.857,773,5.169,818,4.477,822,3.321,823,4.346,1068,2.663,1334,3.426,1728,6.124,1960,4.384,2262,4.087,2892,6.304,3251,3.269,4041,9.52,4042,10.028]],["t/1170",[21,5.331,41,2.682,82,3.388,244,3.086,304,3.052,409,2.999,617,1.435,773,5.532,818,3.993,822,3.998,823,6.244,824,7.587,1068,2.059,1163,4.345,1164,4.284,1713,3.401,1728,5.596,1920,4.284,1960,3.634,2262,3.388,2896,6.717,2908,4.045,3251,2.527,3252,4.314,4043,11.019,4044,9.144,4045,9.632]],["t/1173",[21,5.631,41,2.833,244,3.637,304,3.728,409,3.535,617,2.05,818,3.746,822,3.743,823,4.655,1068,2.941,1960,4.696,2262,4.378,2401,7.152,3251,3.61,3956,8.139,3962,7.702,3963,8.667,4046,8.891,4047,10.033]],["t/1175",[21,5.573,41,2.804,244,3.585,304,3.662,409,3.484,617,1.981,773,5.762,818,3.692,822,3.704,823,4.547,1068,2.842,1960,4.587,2262,4.276,2401,6.986,3251,3.489,3956,7.995,3962,7.623,4046,8.8,4047,9.856]],["t/1177",[21,5.631,41,2.833,244,3.637,304,3.728,409,3.535,617,2.05,818,3.746,822,3.743,823,4.655,1068,2.941,1960,4.696,2262,4.378,2401,7.152,3251,3.61,3956,8.139,3962,7.702,3964,9.289,4046,8.891,4048,10.033]],["t/1179",[21,5.431,35,3.415,41,2.732,244,3.563,304,3.505,409,3.463,617,1.528,773,5.681,818,3.669,822,3.61,823,4.981,1068,2.192,1960,3.809,2262,3.55,2401,7.653,3251,2.691,3252,4.521,3355,7.939,3665,8.924,3956,7.653,3962,7.429,4046,8.575,4048,9.434]],["t/1181",[21,5.406,35,2.45,41,2.72,244,3.771,304,3.478,409,3.665,617,1.8,818,3.884,822,3.776,824,6.535,1068,2.582,1334,3.352,1728,6.062,1934,8.753,1960,4.29,2262,3.999,2542,8.955,3251,3.17,3962,7.394,3988,8.987,4022,7.475,4023,7.475,4046,8.535,4049,9.86]],["t/1183",[21,5.571,41,2.803,244,3.679,304,3.66,409,3.575,617,1.672,773,3.498,818,3.789,822,3.924,824,4.901,1068,2.399,1163,4.865,1164,4.797,1934,6.564,1960,4.069,2262,3.793,2542,6.715,3251,2.945,3252,4.83,3962,7.62,3990,9.85,4022,7.092,4023,7.092,4043,11.516,4046,8.796,4050,10.376]],["t/1185",[0,0.927,21,4.646,22,1.774,27,1.503,28,1.213,30,1.039,35,1.152,44,2.126,66,2.118,69,2.216,82,2.954,140,1.794,193,1.559,244,3.241,272,5.67,287,3.33,304,2.73,309,1.641,316,3.434,328,2.195,409,3.15,617,1.201,664,2.818,752,5.661,770,3.875,773,3.812,818,3.805,821,2.095,822,3.44,823,3.879,864,4.151,979,2.933,1068,1.723,1155,3.375,1334,3.766,1566,3.306,1713,4.787,1807,4.43,1942,5.005,1960,3.169,2262,2.954,2401,3.073,2892,3.323,3063,4.544,3251,2.116,3359,3.127,3610,3.516,3626,3.254,3665,6.199,3962,6.883,3996,8.252,3997,3.99,3998,3.788,3999,9.644,4000,6.183,4001,7.348,4002,5.712,4003,9.221,4004,7.348,4046,7.336,4051,7.74]],["t/1188",[21,5.734,35,2.513,41,2.885,244,3.494,304,3.847,409,3.395,617,1.866,818,3.598,822,3.811,1068,2.677,1334,3.439,1728,6.43,1960,4.401,2262,4.102,3251,3.287,3252,5.224,3595,9.94,3608,9.179,4052,10.688,4053,10.906]],["t/1190",[21,5.734,41,2.885,244,3.494,304,3.847,409,3.395,617,1.866,773,5.428,818,3.598,822,3.811,1068,2.677,1960,4.401,2262,4.102,3251,3.287,3252,5.224,3603,9.94,3608,9.179,3963,7.708,4052,10.688,4054,11.745]],["t/1192",[41,2.39,328,5.69,993,8.106,997,6.989,1906,6.208,2892,5.484,2987,7.224,3882,7.31,4055,10.343]],["t/1194",[21,4.895,41,2.463,47,2.117,82,3.956,99,2.611,118,2.333,160,2.865,244,2.688,315,1.729,316,1.998,323,3.56,352,2.547,426,2.259,602,2.034,617,2.527,693,3.613,773,5.357,818,3.864,964,4.803,1038,2.797,1293,3.794,1515,4.27,1518,2.611,1773,5.189,1820,3.375,2144,5.367,2160,4.615,2262,2.775,2762,2.647,2892,5.651,2905,5.888,3252,3.534,3294,3.979,3592,3.979,3594,7.13,3595,5.367,3602,4.113,3603,7.649,3882,8.279,3956,6.463,3963,5.932,3988,5.367,3990,5.59,4004,5.59,4037,5.59,4040,5.367,4041,5.59,4042,5.888,4044,5.59,4045,5.888,4047,5.59,4048,5.59,4049,5.888,4050,5.888,4051,5.888,4053,5.888,4056,5.888]],["t/1196",[41,2.111,47,3.284,49,4.151,161,5.173,182,4.972,315,2.684,425,3.896,426,3.505,617,2.751,659,6.625,660,6.112,693,4.839,773,3.972,1293,5.887,1515,6.625,1709,4.894,1820,5.237,2152,6.382,2241,5.446,2829,3.934,2892,4.845,3882,6.458,3963,6.458]],["t/1198",[41,2.111,47,3.284,49,4.151,161,5.173,182,4.972,315,2.684,425,3.896,426,3.505,617,2.751,659,6.625,660,6.112,693,3.934,773,3.972,1293,5.887,1515,6.625,1709,4.894,1820,5.237,2152,6.382,2241,5.446,2886,5.564,2890,5.739,2892,4.845,3882,6.458,3963,6.458]],["t/1200",[6,2.383,20,1.985,30,1.658,35,2.561,47,3.667,69,2.251,88,1.549,109,1.595,115,1.785,118,2.522,155,2.934,182,3.464,183,3.701,244,3.268,302,5.113,306,3.11,316,4.266,352,1.658,355,2.69,358,2.814,430,3.973,576,5.713,616,1.966,693,2.741,844,5.811,852,2.741,990,5.777,1030,5.663,1034,3.906,1036,4.087,1038,4.212,1076,3.428,1092,6.614,1155,3.428,1293,4.102,1518,2.823,1708,3.877,1895,4.556,1943,6.429,2413,4.139,3183,4.5,3632,4.991,3747,5.086,3996,5.193,4000,5.086,4057,6.856]],["t/1202",[0,1.147,73,2.626,76,2.908,306,4.682,320,3.746,341,4.294,352,2.496,356,2.826,616,3.84,617,2.886,1050,6.175,1157,3.692,2563,7.817,2773,5.836,3327,5.88]],["t/1204",[41,2.513,73,2.374,76,2.63,109,2.171,306,4.234,352,2.833,426,3.324,616,2.677,773,5.419,818,3.588,964,7.068,2760,5.317,2892,5.767,3267,8.507,3327,5.317,3397,6.125,3602,6.052,3738,7.068,3882,7.688,3963,6.125,4058,9.333]],["t/1206",[73,3.3,109,2.569,350,4.516,2760,7.391,3267,7.337,3327,6.29,3592,6.929,3594,6.858]],["t/1208",[73,2.884,76,3.195,109,2.638,242,4.171,2760,6.459,2829,4.532,3267,7.535]],["t/1210",[73,3.267,109,2.525,161,5.705,350,4.439,2760,7.316,2886,7.262,2890,6.329,3267,7.212,3327,6.182]],["t/1212",[0,0.994,19,1.602,41,2.445,73,2.274,118,3.288,160,5.149,328,6.751,352,2.757,356,2.447,616,2.563,1581,6.147,2160,6.504,2760,5.092,2892,5.611,2987,7.391,3004,5.73,3267,8.339,3327,5.092,3397,7.48,3602,7.391,3882,7.48,4059,7.104]],["t/1214",[12,3.898,18,3.255,19,1.378,37,2.676,39,2.746,42,2.113,44,3.805,47,2.566,73,1.956,76,2.167,109,1.789,118,2.829,164,3.885,174,2.696,210,4.684,230,2.355,259,3.643,317,2.662,338,2.002,343,3.547,349,1.902,357,2.775,361,3.166,578,4.348,612,3.748,613,4.285,617,2.15,652,4.227,699,3.365,735,2.989,877,2.813,879,3.995,909,4.93,1056,4.449,1128,3.026,1314,4.729,1656,4.171,1989,5.498,2483,4.776,2762,3.21,2834,6.547,2837,6.291,2844,5.976,2848,6.748,2892,3.786,2987,4.987,3882,5.046,4060,6.112,4061,5.596,4062,7.14,4063,7.689,4064,7.689,4065,7.689]],["t/1216",[773,4.618,1629,5.147,2892,5.632,3882,7.508,4066,11.441,4067,11.441]],["t/1218",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1221",[0,1.29,19,2.081,38,3.467,73,2.34,88,2.077,104,6.576,164,4.647,352,2.224,356,3.177,488,5.603,564,7.783,570,3.393,578,5.2,617,2.571,693,5.339,852,3.677,867,5.28,1051,6.112,1123,5.864,1326,6.469,1576,7.31,1877,7.783,3018,7.126,3111,6.278,4068,7.525]],["t/1223",[0,1.3,6,1.93,22,2.033,28,2.184,38,2.311,66,1.596,67,3.616,98,2.8,140,3.229,185,3.439,193,2.807,228,2.854,230,2.37,242,2.846,350,3.164,453,3.79,488,4.713,562,4.329,595,4.067,602,4.526,606,4.407,607,6.149,617,2.163,688,4.628,692,2.406,693,4.146,703,4.983,900,4.067,1053,3.373,1058,3.79,1123,5.24,1555,4.713,1606,5.388,1612,6.891,1754,5.63,2516,4.588,3598,6.824,4069,4.67,4070,7.183]],["t/1225",[6,2.534,73,2.584,116,4.06,136,4.284,242,3.736,352,2.985,617,2.839,693,4.934,841,3.266,867,5.83,1123,5.132,1136,5.83,1451,7.143,1531,8.073,1606,5.277,1714,7.533,1820,5.405,2904,6.586]],["t/1227",[66,2.239,196,4.562,197,4.714,693,5.652,3877,8.409,4069,7.752,4071,11.924]],["t/1229",[35,2.961,66,2.278,227,3.996,270,4.501,272,5.305,820,7.647,2531,8.555,2906,8.19,3653,9.034,4069,6.665]],["t/1231",[41,2.477,693,4.615,1627,5.521,4069,6.969,4072,10.72]],["t/1234",[0,0.769,6,1.725,20,1.438,22,1.165,28,1.251,30,1.072,35,2.576,38,1.324,66,1.982,67,2.072,88,1.001,115,1.801,118,1.631,140,1.85,174,2.425,189,3.434,193,1.609,227,1.604,252,2.063,296,1.772,302,2.063,308,1.863,310,1.622,315,2.319,316,4.088,340,1.472,352,1.072,355,3.336,430,3.451,437,2.922,438,3.573,474,3.727,616,2.439,617,1.239,633,2.33,688,3.087,689,2.7,693,4.413,741,1.97,768,5.515,773,4.205,818,3.839,822,3.474,841,2.224,844,2.344,908,3.357,1030,2.629,1031,4.945,1034,2.525,1036,1.897,1038,3.05,1047,1.668,1068,1.778,1123,2.24,1157,1.313,1334,3.12,1507,3.523,1555,2.7,1603,2.984,1606,2.303,1713,3.038,1924,3.523,1943,2.984,2235,3.262,2316,3.751,2578,3.226,2665,3.627,2892,5.129,2901,5.497,2902,3.627,2978,3.627,3002,2.945,3397,4.539,3598,2.42,3798,3.751,3963,6.837,4000,3.288,4033,3.226,4069,2.676,4073,7.215,4074,2.984,4075,3.751,4076,3.751,4077,5.358,4078,4.116,4079,2.47,4080,4.432,4081,4.116,4082,3.288,4083,4.432]],["t/1236",[0,1.005,6,2.255,22,1.666,28,1.79,35,1.7,66,1.308,67,2.964,140,2.647,193,2.301,227,2.295,272,5.83,302,2.951,310,2.32,316,3.319,352,1.534,430,3.152,437,3.619,616,1.819,617,1.773,693,4.21,768,6.59,773,5.451,818,3.977,822,3.575,844,3.354,1031,4.534,1047,2.386,1068,2.543,1157,1.879,1334,3.316,2235,4.263,2316,4.902,2892,5.651,2901,7.184,2902,5.189,2978,5.189,3397,5.932,3598,3.462,4033,4.615,4069,3.828,4073,8.404,4074,4.27,4075,5.367,4076,5.367,4077,7.003,4078,5.888]],["t/1238",[0,0.954,6,2.14,22,1.55,28,1.665,35,1.582,66,1.217,67,2.757,82,3.755,140,2.462,193,2.141,227,2.135,302,2.745,310,2.158,316,3.186,352,1.427,409,1.705,430,3.026,437,3.475,616,1.692,617,1.649,693,4.042,773,4.761,818,4.184,822,3.488,844,3.12,1031,4.218,1047,2.219,1068,2.365,1157,1.747,1334,3.147,2235,4.046,2316,4.653,2491,8.079,2892,6.636,2901,6.819,2902,4.826,2978,4.826,3397,5.63,3598,3.22,3626,6.497,3665,7.286,3964,8.296,4033,4.293,4069,3.56,4073,8.169,4074,3.971,4075,4.992,4076,4.992,4077,6.647,4084,5.477]],["t/1240",[0,0.825,3,1.768,4,1.393,6,2.247,22,1.276,28,1.371,35,1.303,66,1.002,67,2.271,82,3.249,125,1.936,140,2.028,193,1.763,227,1.758,272,6.446,302,2.261,309,1.855,310,1.777,316,3.178,340,1.614,352,1.175,383,2.241,388,2.454,409,1.404,430,3.018,437,3.096,616,1.393,617,1.358,693,3.601,773,5.569,818,4.153,821,2.368,822,3.246,844,2.569,1031,3.473,1047,1.828,1068,1.948,1157,1.439,1334,3.7,1696,3.473,1759,2.881,2235,3.501,2316,4.026,2491,7.906,2892,6.525,2901,5.9,2902,3.975,2978,3.975,3397,4.871,3598,2.652,3626,5.621,3665,8.266,4033,3.535,4069,2.932,4073,7.933,4074,3.27,4075,4.111,4076,4.111,4077,5.751,4084,4.51]],["t/1242",[0,1.245,22,2.284,28,2.454,35,3.002,66,1.793,67,4.063,140,3.628,193,3.154,227,3.146,773,4.999,818,4.42,822,3.173,823,4.045,1334,4.799,2892,6.097,3597,8.305,3598,4.746,4069,5.247,4073,8.578,4085,8.692]],["t/1244",[0,1.223,22,2.223,28,2.388,33,4.233,35,2.269,66,1.745,67,3.954,140,3.531,193,3.07,773,4.935,818,4.214,822,3.804,823,5.12,1334,4.036,1713,3.717,1728,4.045,1920,6.089,2896,6.315,2908,5.749,3058,5.486,3598,4.619,4069,5.106,4073,8.467,4074,5.696]],["t/1246",[0,1.022,3,4.223,4,3.647,6,2.295,20,1.912,66,1.897,67,4.299,309,3.511,316,2.898,340,3.055,383,5.355,388,4.647,409,2.659,426,3.276,430,2.753,768,5.28,773,4.685,818,3.896,1334,3.374,1759,5.454,1873,4.261,1874,4.338,2892,4.528,3598,5.021,4069,5.552,4073,6.37]],["t/1248",[0,0.871,4,2.999,19,1.404,20,1.628,66,1.616,67,3.661,109,1.822,227,3.784,413,4.262,426,2.79,448,3.101,773,4.22,818,4.124,821,3.818,823,4.866,956,2.685,960,3.855,1068,3.141,1334,4.94,1446,7.137,1713,4.594,1873,3.629,1874,3.694,1889,4.069,2908,6.152,3282,4.568,3313,5.079,3598,4.276,4043,10.375,4069,4.727,4073,7.242,4086,7.832,4087,6.903]],["t/1251",[0,1.273,22,2.365,28,2.541,35,2.414,66,1.857,67,4.207,140,3.757,193,3.266,768,7.227,818,3.507,822,3.755,1334,4.2,3058,5.837,3598,4.914,3960,8.855,3962,7.343,3963,8.263,4046,8.477,4069,5.433,4074,6.06]],["t/1253",[0,1.256,22,2.316,28,2.488,35,2.363,66,1.818,67,4.12,140,3.679,193,3.198,272,5.989,768,7.156,773,5.032,818,3.46,822,3.726,1334,4.144,3058,5.715,3598,4.812,3960,8.768,3962,7.271,4046,8.393,4069,5.32,4074,5.934]],["t/1255",[0,1.273,22,2.365,28,2.541,35,2.414,66,1.857,67,4.207,140,3.757,193,3.266,818,3.507,822,3.755,1334,4.2,2491,9.163,3058,5.837,3598,4.914,3960,8.855,3962,7.343,3964,8.855,4046,8.477,4069,5.433,4074,6.06]],["t/1257",[0,1.09,3,2.593,4,2.044,6,1.778,22,1.873,28,2.012,35,1.911,66,1.47,67,3.331,125,2.84,140,2.975,193,2.586,272,6.565,309,2.721,316,2.246,340,2.367,383,3.288,388,3.601,430,2.133,773,5.515,818,3.436,821,3.474,822,3.59,1334,4.432,1696,5.096,1759,4.227,2491,8.792,3058,4.622,3598,3.891,3665,7.36,3960,8.497,3962,7.046,4046,8.134,4069,4.302,4074,4.798]],["t/1259",[0,1.273,22,2.365,28,2.541,35,3.07,66,1.857,67,4.207,140,3.757,193,3.266,818,3.507,822,3.755,1036,3.852,1334,4.619,3058,5.837,3597,9.339,3598,4.914,3960,8.855,3962,7.343,4046,8.477,4069,5.433,4074,6.06]],["t/1261",[0,1.273,22,2.365,28,2.541,33,4.359,35,2.414,66,1.857,67,4.207,140,3.757,193,3.266,818,3.507,822,3.755,1334,4.2,3058,5.837,3597,9.339,3598,4.914,3960,8.855,3962,7.343,4046,8.477,4069,5.433,4074,6.06]],["t/1263",[0,1.261,22,2.332,28,2.505,66,1.831,67,4.148,140,3.705,193,3.221,272,5.451,773,3.582,822,3.545,3598,4.846,3665,5.824,3960,8.797,3962,7.295,3999,10.585,4003,10.585,4046,8.421,4069,5.357,4088,12.507,4089,12.507]],["t/1265",[0,1.03,3,4.243,4,3.659,6,2.311,20,1.926,66,1.911,67,4.33,309,3.537,316,2.919,340,3.077,383,5.379,388,4.681,409,2.678,426,3.3,430,2.773,768,5.318,773,3.739,818,2.838,822,2.626,1334,3.399,1759,5.494,1873,4.293,1874,4.369,3598,5.058,3960,6.516,3962,5.403,4046,6.237,4069,5.592]],["t/1267",[0,1.223,22,2.223,28,2.388,35,2.269,66,1.745,67,3.954,140,3.531,174,3.858,193,3.07,272,4.065,426,3.013,430,2.532,437,2.907,693,3.382,741,3.761,753,4.784,768,4.856,773,3.415,818,2.592,821,4.124,822,3.118,840,5.061,964,6.407,1096,3.886,1334,3.104,1803,4.084,2413,7.38,3058,5.486,3591,6.724,3597,6.275,3598,4.619,3608,7.509,3883,6.922,3960,5.95,4052,8.744,4069,5.106,4074,5.696,4090,8.46]],["t/1269",[3,2.96,4,2.333,19,1.458,35,2.181,219,4.132,231,2.928,272,3.908,294,3.52,308,3.419,316,3.379,349,2.012,352,1.967,408,4.783,409,2.351,438,4.202,447,4.955,549,6.305,570,3.001,621,3.753,735,4.168,745,4.889,768,4.669,773,4.328,818,3.674,822,3.399,823,4.99,1126,5.919,1129,6.593,1334,2.984,1792,4.91,1945,5.552,2892,4.004,3129,5.721,4000,6.033,4073,5.633,4091,8.134,4092,7.552]],["t/1271",[6,2.804,352,3.17,616,3.223,693,4.492,1123,5.678,2798,8.51,3327,6.402]],["t/1273",[73,2.692,272,5.083,315,2.885,661,5.036,704,5.666,768,6.074,773,5.106,956,3.627,2235,4.99,2892,5.209,3397,6.944,4073,7.328,4077,9.801]],["t/1275",[19,1.537,35,2.299,47,2.862,66,1.769,67,4.008,272,4.12,294,3.71,315,2.338,352,2.074,437,2.947,602,3.56,616,2.459,661,4.081,741,3.812,768,4.922,773,3.461,818,2.627,822,3.145,841,2.757,956,2.939,1043,3.842,1334,3.146,1803,4.139,2235,4.044,2413,6.699,3058,5.561,3397,5.627,3591,6.815,3597,6.36,3598,4.681,3608,7.575,3883,7.016,3960,6.031,4052,8.821,4069,5.176,4074,5.773,4077,8.599]],["t/1277",[0,0.83,6,1.862,71,4.683,131,1.554,183,2.892,252,3.473,306,3.385,315,2.035,339,3.674,341,3.104,349,1.846,352,2.448,355,2.927,356,2.043,357,2.005,602,2.394,616,3.294,661,4.818,693,5.428,768,6.594,841,2.4,877,2.73,980,7.665,1043,3.344,1123,3.771,1708,4.22,1786,6.578,1869,4.13,2773,4.22,2799,7.366,2815,4.546,3267,7.633,3327,5.766,3396,5.431,3397,4.898,4071,12.327,4077,7.843,4093,7.463,4094,4.464,4095,7.463,4096,7.463,4097,7.463]],["t/1279",[0,0.536,1,2.789,4,1.383,19,0.864,32,5.726,33,3.749,35,1.979,38,1.44,47,2.463,66,0.994,67,2.253,73,1.226,85,1.972,88,1.089,111,2.534,113,2.026,131,1.004,153,3.851,183,1.868,227,1.745,230,1.477,241,2.151,272,3.545,310,1.764,315,3.427,316,2.825,390,1.695,400,2.398,409,2.592,437,3.452,570,2.722,618,2.859,661,2.294,692,1.499,693,4.328,721,7.795,768,5.766,773,2.978,818,2.746,821,2.35,822,2.541,900,6.607,956,1.653,1028,2.835,1038,3.255,1096,2.214,1123,4.53,1154,3.951,1256,3.164,1334,1.769,1398,3.126,1553,2.789,1709,2.398,1792,2.91,2092,7.615,2505,3.246,2892,2.373,3002,3.203,3058,3.126,3106,4.801,3258,4.785,3344,4.731,3597,8.031,3598,2.632,3608,5.037,3883,3.944,3960,3.391,4052,5.865,4069,2.91,4073,3.339,4074,3.246,4098,6.946,4099,10.827,4100,8.965,4101,7.379,4102,7.379]],["t/1281",[35,2.768,66,2.129,67,4.825,822,2.925,993,7.512,997,6.477,1386,5.363,3058,6.694,3541,8.445,3597,7.656,3598,5.635,3608,7.046,3883,8.445,4052,8.204,4069,6.23,4074,6.949,4103,9.657]],["t/1283",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1286",[0,0.788,19,1.751,20,1.473,72,2.4,76,1.997,109,2.273,118,2.607,127,3.373,131,1.476,213,5.746,218,2.053,229,3.405,231,2.551,303,5.633,338,1.845,352,2.704,358,2.908,403,3.64,409,2.049,437,2.435,510,5.633,549,5.137,616,2.032,619,3.163,689,4.317,693,4.818,745,5.154,818,3.692,836,4.1,861,4.494,940,4.212,1109,5.367,1144,3.253,1344,5.011,1598,4.596,1614,3.726,1741,3.922,1846,4.771,1897,4.709,1956,7.633,2125,4.402,2292,5.633,2519,5.491,2527,3.771,2892,6.224,3002,4.709,3282,4.133,4104,6.247]],["t/1289",[6,3.156,131,2.203,231,3.809,306,5.738,693,5.409,912,6.71,1344,4.741,2520,8.657,3002,8.406,4105,8.954]],["t/1291",[72,3.805,320,4.078,400,5.589,693,4.492,1614,5.908,2156,7.205,3910,7.205,4106,7.904]],["t/1293",[76,3.166,109,2.615,437,3.862,549,5.908,693,4.492,882,4.809,1043,5.036,4107,10.434]],["t/1295",[41,2.479,160,4.125,244,3.437,272,4.387,352,3.065,409,3.34,693,3.65,745,5.879,818,3.883,1123,4.614,1334,3.35,2829,3.65,2892,6.24,3602,5.921,3882,7.582,4073,6.324,4108,8.478]],["t/1297",[41,2.196,742,6.424,745,5.653,818,4.087,1923,7.486,2543,7.933,2829,4.093,2892,5.04,2913,7.754,2914,6.803,2915,6.407,3882,6.719]],["t/1300",[745,5.456,2892,6.59]],["t/1302",[0,0.994,4,2.563,19,1.602,35,2.397,82,4.988,287,8.831,390,3.142,409,2.584,570,3.297,693,3.573,745,4.646,818,3.844,822,3.869,1063,4.699,1163,5.017,1164,4.946,1398,5.796,1609,5.395,1728,5.45,1873,4.141,1884,5.855,2892,5.611,4012,8.831,4109,8.937]],["t/1304",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1307",[396,5.875,532,6.758,565,6.555,852,4.301,1156,5.098,1216,8.149,1256,7.062,1470,8.018,1699,5.527,2865,6.752,3020,6.899]],["t/1309",[0,1.095,6,2.71,19,1.487,20,1.172,26,3.641,47,1.881,82,2.467,97,3.574,109,1.311,114,4.216,119,3.187,131,1.174,150,6.291,155,2.412,170,4.413,174,1.976,294,2.439,306,2.557,320,3.574,340,1.872,342,3.395,352,1.363,356,2.272,358,2.313,400,2.803,407,4.015,448,2.232,562,2.353,570,3.061,595,2.963,616,3.116,617,1.576,619,2.515,632,5.654,633,4.362,635,6.155,636,6.569,638,5.514,639,4.18,640,5.841,641,6.155,689,3.433,696,2.708,877,2.062,1108,4.658,1126,4.102,1228,3.098,1344,2.525,1549,4.367,1557,5.549,1566,2.761,1572,3.287,1600,4.03,1829,5.262,1897,3.745,2169,3.187,2880,4.268,2882,4.968,3393,4.968,3394,4.48,3395,6.284,3722,4.611,3723,5.233,4026,4.611,4110,5.233,4111,4.03]],["t/1311",[0,1.121,22,2.649,26,2.333,28,2.094,30,1.794,38,2.216,66,2.08,99,3.055,118,2.729,125,2.956,140,3.097,150,3.499,320,3.659,341,4.194,342,2.175,343,3.423,357,2.708,425,2.938,452,2.664,467,3.515,616,3.524,633,3.9,694,3.564,696,3.564,927,8.532,928,7.209,1040,3.545,1055,5.138,1058,4.939,1156,3.515,1157,2.198,1328,3.438,1557,3.79,1625,4.705,2075,3.79,2758,6.538,2759,5.503,2760,5.743,2770,4.438,2773,4.195,2781,4.438,2863,8.387,3396,5.399,3805,6.889,3806,6.889,4112,7.419]],["t/1313",[0,1.313,19,1.883,22,2.072,26,1.654,28,1.485,30,1.907,33,1.822,42,1.446,45,1.756,66,1.951,89,1.85,92,2.846,115,1.37,122,1.703,131,2.682,140,2.196,150,2.481,168,2.873,169,2.854,174,1.845,219,2.673,231,1.894,278,2.8,296,2.103,328,4.83,341,2.189,342,1.543,349,1.301,352,1.907,355,2.064,356,1.44,616,1.509,617,1.471,633,2.766,735,4.082,956,1.804,966,2.835,974,2.808,1040,3.955,1047,1.98,1128,2.07,1144,3.746,1548,2.912,1557,2.688,1610,3.77,1616,5.489,1617,5.113,1625,5,1626,5.874,1627,4.522,1638,5.055,1639,3.644,1741,4.364,1942,2.417,2075,4.028,2256,2.997,2515,4.305,2736,3.176,2755,2.673,2758,5.589,2770,3.147,2774,3.336,2775,6.109,2776,3.984,2777,7.516,2780,3.542,2781,3.147,2782,6.95,2823,3.903,2825,4.453,2863,8.597,3129,3.701,3199,4.885]],["t/1315",[0,1.218,42,1.874,218,3.434,272,3.277,328,6.056,409,2.75,632,3.915,633,3.585,636,3.699,638,4.532,640,4.044,745,4.832,774,5.302,818,3.356,822,1.933,824,5.379,960,3.588,1361,4.637,1619,4.01,1620,5.83,1621,5.165,1622,8.211,1623,7.371,1624,5.284,1626,6.805,1627,3.261,1847,5.165,2116,4.963,2439,5.771,2441,8.297,2502,8.051,2800,5.58,2801,6.011,2802,6.011,2803,4.963,2804,5.58,2805,9.657,2806,3.915,2807,6.011,2808,5.771,2809,6.011,2810,6.011,2811,4.963,2812,6.011,2813,6.011,2814,9.657,3732,6.332]],["t/1317",[0,1.236,4,2.01,6,1.749,22,2.548,23,4.926,25,3.367,26,2.204,28,1.979,30,1.695,33,2.427,42,2.664,45,3.71,66,2,91,2.645,116,3.876,131,2.315,153,3.01,299,3.826,320,2.543,341,4.033,342,2.843,352,2.345,357,1.883,452,2.516,616,4.011,694,3.367,696,3.367,939,3.103,1040,3.908,1043,3.14,1156,4.594,1157,2.872,1451,4.929,1517,3.336,1520,3.6,1545,5.404,1557,4.953,1585,4.055,2773,3.963,2774,6.149,2778,5.308,2779,5.43,2780,4.718,2783,6.178,2784,6.507,2863,4.784]],["t/1319",[0,1.262,9,3.241,19,1.307,42,2.003,47,2.433,73,1.855,92,2.632,109,2.318,115,2.594,116,2.914,118,2.682,125,2.905,131,2.074,166,3.981,170,3.267,218,2.886,262,3.335,316,2.298,322,4.452,341,4.144,352,1.763,356,1.996,357,1.959,358,2.992,407,2.972,425,2.887,438,3.766,523,4.401,614,2.577,616,2.857,633,3.833,688,3.254,712,4.144,1040,3.503,1043,3.267,1344,5.086,1566,5.559,1584,8.005,1620,3.88,2067,4.785,2774,4.623,2780,4.909,2781,4.362,2863,6.8,3398,6.014,3399,5.306,3400,6.17,3401,4.977]],["t/1321",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1323",[0,1.186,4,3.06,19,1.913,218,3.091,284,8.267,381,4.724,390,3.751,504,7.914,570,3.936,1471,5.227,1609,6.44,1873,4.944,1884,6.531]],["t/1325",[21,5.985,304,3.784,617,2.553,745,5.721,1068,3.662,1660,7.471,1960,4.287,2262,5.057,2829,5.325,2908,6.624,2971,4.518,2974,6.915,3251,4.495,3252,5.089,3253,8.048,4087,10.184]],["t/1327",[21,5.881,304,4.022,617,2.817,745,5.622,1068,4.041,2262,5.375,2829,4.91,3251,4.96,4113,11.404,4114,11.404]],["t/1329",[21,5.727,244,3.995,304,3.838,428,5.878,617,1.441,745,5.973,822,3.806,823,6.25,960,3.405,1068,2.067,1960,3.645,2262,3.398,2829,4.685,2851,6.741,3106,7.464,3251,2.537,3252,4.327,3294,4.872,3295,5.227,3582,9.589,3585,10.882]],["t/1331",[21,5.727,244,3.995,304,3.838,428,5.878,617,1.441,745,5.973,822,3.806,823,6.25,960,3.405,1068,2.067,1960,3.645,2262,3.398,2829,4.685,2851,6.741,3106,7.464,3251,2.537,3252,4.327,3294,4.872,3295,5.227,3582,4.217,4115,11.151,4116,10.882]],["t/1333",[21,5.727,244,3.995,304,3.838,428,5.878,617,1.441,745,5.973,822,3.806,823,6.25,960,3.405,1068,2.067,1960,3.645,2262,3.398,2829,4.685,2851,6.741,3106,7.464,3251,2.537,3252,4.327,3294,4.872,3295,5.227,4117,10.33,4118,11.719]],["t/1335",[21,5.727,244,3.995,304,3.838,428,5.878,617,1.441,745,5.973,822,3.806,823,6.25,960,3.405,1068,2.067,1960,3.645,2262,3.398,2829,4.685,2851,6.741,3106,7.464,3251,2.537,3252,4.327,3294,4.872,3295,5.227,4119,11.719,4120,11.719]],["t/1337",[21,5.476,304,3.554,617,3.034,745,5.235,1068,4.352,2829,5.134,3251,5.343,4121,10.852,4122,10.852]],["t/1339",[21,5.476,304,3.554,617,3.034,745,5.235,1068,4.352,2829,5.134,3251,5.343,4123,10.852,4124,10.852]],["t/1341",[21,5.573,244,3.888,304,3.662,428,5.525,617,1.981,745,5.897,822,3.704,823,6.082,960,3.2,1068,2.842,1960,4.587,2262,4.276,2829,5.225,2851,6.336,3106,7.307,3251,3.489,4125,11.182,4126,11.182]],["t/1343",[21,5.573,244,3.888,304,3.662,428,5.525,617,1.981,745,5.897,822,3.704,823,6.082,960,3.2,1068,2.842,1960,4.587,2262,4.276,2829,5.225,2851,6.336,3106,7.307,3251,3.489,4127,11.182,4128,11.182]],["t/1345",[21,5.573,244,3.888,304,3.662,428,5.525,617,1.981,745,5.897,822,3.704,823,6.082,960,3.2,1068,2.842,1960,4.587,2262,4.276,2829,5.225,2851,6.336,3106,7.307,3251,3.489,4129,11.182,4130,11.182]],["t/1347",[21,5.573,244,3.888,304,3.662,428,5.525,617,1.981,745,5.897,822,3.704,823,6.082,960,3.2,1068,2.842,1960,4.587,2262,4.276,2829,5.225,2851,6.336,3106,7.307,3251,3.489,4131,11.182,4132,11.182]],["t/1349",[21,5.834,244,3.821,272,5.218,304,3.966,617,2.319,745,5.764,1068,3.326,1960,5.099,2262,4.753,2829,5.469,2908,6.328,3251,4.083,3259,11.579,4087,10.673]],["t/1351",[21,5.691,47,2.536,49,3.205,155,3.251,228,2.803,244,3.69,272,4.922,304,3.796,616,2.179,617,2.124,670,4.328,745,5.654,749,3.505,1068,3.047,1155,3.798,1960,4.81,2236,4.672,2262,4.484,2278,4.871,2829,5.335,2831,5.115,3251,3.74,3259,11.294,3260,6.808,3261,6.696,4113,10.763,4114,10.763]],["t/1353",[0,1.103,19,1.299,22,2.608,26,2.279,28,2.046,30,1.753,66,2.047,76,2.796,88,1.637,99,2.985,108,3.45,109,1.687,113,3.047,131,2.066,140,3.026,150,3.419,230,2.221,316,2.284,338,2.584,342,2.125,352,1.753,354,4.817,357,1.947,359,3.359,532,3.834,633,3.811,741,3.222,759,3.359,877,2.652,882,4.247,960,3.25,1040,3.489,1074,4.069,1313,5.377,1557,3.703,1625,4.597,1919,5.027,2075,3.703,2503,4.416,2758,6.021,2762,3.026,2770,4.337,2781,4.337,2829,2.898,2850,6.135,2863,8.306,2908,3.788,2971,3.587,3183,4.757,3262,6.731,3263,5.762,3264,7.888]],["t/1355",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1358",[19,1.698,73,2.41,88,2.139,164,4.786,310,3.466,338,2.466,405,4.468,606,6.735,616,2.717,658,3.255,664,3.954,692,2.946,698,5.242,852,3.787,1043,5.298,1067,6.377,1326,6.662,1640,5.041,1803,4.573,2241,5.242,2989,7.339,3341,6.685,4133,7.75,4134,8.349,4135,9.472,4136,6.894]],["t/1360",[0,1.166,19,1.881,37,3.652,72,3.553,76,2.956,109,2.441,135,4.249,617,2.934,692,3.263,1055,7.267,1058,5.14,2765,6.023,2874,6.584,3341,7.117,3815,8.34]],["t/1362",[44,5.416,773,5.21,818,3.353,822,3.102,823,5.094,824,6.189,1734,7.018,2047,7.184,2892,5.389,3388,9.264]],["t/1364",[0,1.103,22,1.905,28,2.046,30,1.753,35,2.661,66,2.715,76,2.042,109,1.687,131,1.509,140,3.026,322,3.893,342,2.125,359,3.359,773,4.567,818,3.04,822,2.055,823,3.374,824,4.099,1038,3.197,1055,5.021,1058,4.861,1061,6.36,1328,3.359,1334,3.641,1713,5.346,2047,7.426,2075,5.069,2762,3.026,3025,5.377,3341,6.88,3388,9.576,3402,6.135,3403,6.135,3615,4.881,3802,5.931,3815,7.888]],["t/1366",[41,2.162,82,4.41,229,4.841,617,3.704,818,3.086,1124,3.791,1634,4.479,1708,5.697,1803,4.864,2047,6.612,2829,4.028,2915,6.345,2925,6.46,3183,6.612,3341,5.697,4137,10.075,4138,10.075,4139,10.075]],["t/1368",[0,1.234,18,2.497,22,3.099,27,3.001,28,1.665,30,1.427,41,1.265,66,2.086,69,3.319,73,1.5,78,4.964,85,2.412,88,1.332,119,4.851,140,2.462,143,2.98,155,2.524,160,5.738,161,3.101,182,2.98,193,2.141,195,2.934,196,2.479,197,2.562,221,3.56,222,3.36,226,3.36,227,3.105,229,4.122,270,2.404,272,4.858,294,2.552,304,1.932,315,1.609,342,1.729,358,2.42,617,1.649,658,2.027,773,4.761,841,1.897,852,2.358,1061,3.876,1096,2.71,1153,2.889,1803,2.847,2047,7.286,2139,4.293,2357,4.293,2760,3.36,2829,3.429,2886,3.335,3341,5.717,3388,9.395,3656,3.782,3692,4.688,3864,7.562,3866,7.5,3868,7.26,3877,6.647,4134,5.199,4140,10.11,4141,10.11,4142,5.898]],["t/1370",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1372",[12,3.548,80,5.003,88,2.124,89,3.306,92,4.248,109,2.187,115,2.448,120,5.962,121,5.728,122,3.044,126,8.729,128,8.277,218,2.724,228,3.469,256,5.962,380,6.079,1790,4.517,1989,6.723,4143,9.959,4144,12.5,4145,8.15]],["t/1374",[19,1.938,51,7.761,88,1.861,96,3.801,114,5.493,131,1.716,136,3.476,213,4.845,230,3.313,243,4.332,276,7.654,352,2.919,380,6.62,396,4.499,488,6.588,593,5.225,628,5.795,644,4.44,844,4.358,1681,7.489,1869,4.56,1870,5.408,1989,5.892,2241,4.56,3910,5.283,4146,9.876,4147,8.24,4148,7.651,4149,6.549,4150,8.24,4151,7.263]],["t/1377",[0,1.091,1,5.044,12,1.74,19,1.278,26,1.45,40,3.419,50,2.569,51,4.158,53,1.629,62,3.861,88,1.61,90,5.216,92,2.573,109,1.073,112,2.956,115,1.2,125,2.841,135,1.867,153,1.98,162,2.424,168,2.517,169,2.5,215,2.453,218,1.335,268,5.524,276,8.666,320,1.673,322,4.4,380,6.407,395,3.419,398,4.336,425,1.825,432,6.09,434,2.569,435,3.242,436,3.193,438,2.381,448,1.825,450,2.247,522,4.8,531,3.419,628,9.436,644,2.484,648,3.025,688,2.057,822,1.307,841,2.803,873,4.063,891,3.025,953,3.901,992,4.611,1038,3.145,1119,2.893,1328,3.304,1330,2.057,1506,1.892,1508,2.225,1555,2.808,1634,2.049,1923,4.304,1926,2.626,2028,6.034,2103,3.147,2390,2.893,2512,3.296,3159,3.296,3306,2.99,4146,8.028,4149,7.798,4152,4.28,4153,4.063,4154,6.285,4155,4.28,4156,4.063,4157,4.28,4158,3.104,4159,4.063,4160,3.572,4161,3.901,4162,6.603,4163,4.61,4164,6.93,4165,7.13,4166,3.901,4167,7.13]],["t/1379",[0,0.602,12,2.045,26,2.534,34,3.333,50,4.492,51,3.16,53,3.401,62,3.172,76,1.527,81,2.629,88,1.82,97,3.436,100,3.187,109,1.261,110,2.146,112,5.168,136,2.286,162,2.849,164,2.738,190,3.944,215,2.884,218,2.335,219,2.753,228,1.999,262,2.479,268,6.245,324,3.556,342,1.589,348,2.709,352,1.949,391,3.4,392,2.479,397,3.214,398,5.666,399,3.811,409,1.567,448,3.192,450,3.929,460,4.199,595,2.849,867,3.111,909,3.474,960,1.775,1293,3.242,1328,3.735,1330,5.67,1508,2.616,1515,3.648,1626,5.978,1804,2.999,1902,4.434,2351,10.105,2362,5.979,2500,7.484,2512,3.875,2529,3.753,2538,3.648,3039,3.875,3085,4.776,3093,4.104,3226,3.064,3570,5.866,3693,4.586,4149,7.649,4152,7.484,4153,8.483,4154,4.776,4155,5.032,4156,4.776,4157,5.032,4158,3.648,4168,5.419,4169,5.032,4170,5.419,4171,5.419,4172,5.419,4173,5.419,4174,4.307,4175,5.419,4176,4.586,4177,5.582,4178,5.419,4179,5.419,4180,4.776,4181,5.419,4182,8.145,4183,3.875]],["t/1381",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1383",[6,1.536,12,3.339,18,3.746,19,1.586,20,1.84,37,2.143,39,4.284,44,3.046,53,3.127,54,5.161,115,2.304,119,3.481,136,2.597,153,2.644,165,3.716,182,3.111,183,2.386,184,3.001,294,3.829,317,2.132,339,3.031,340,2.045,343,4.082,350,4.237,352,2.505,358,2.526,359,4.1,423,4.402,482,5.427,531,4.567,548,5.126,562,2.57,580,3.683,592,4.48,606,3.507,607,4.893,612,3.001,613,3.431,622,5.206,653,4.598,703,2.958,853,3.824,924,3.683,926,3.947,1160,5.716,1216,4.662,1295,5.673,1579,3.863,1609,3.716,1642,4.567,1656,3.339,1938,3.751,2012,5.716,2350,2.904,2599,3.318,2633,3.534,2834,3.456,2836,4.402,2848,5.12,3183,4.04,3263,4.893,4061,6.44,4184,6.156,4185,5.037,4186,4.567,4187,5.716,4188,5.716,4189,4.893,4190,6.156,4191,5.611,4192,5.037,4193,5.716,4194,6.156,4195,4.264]],["t/1385",[18,3.104,19,2.041,37,2.552,38,2.19,40,7.419,43,4.087,49,3.093,72,2.483,109,2.327,115,1.909,133,6,174,2.572,228,2.705,231,3.601,310,2.683,338,1.909,340,4.061,350,5.001,361,3.019,544,4.426,548,3.629,562,5.104,656,3.592,689,6.093,692,2.281,700,4.21,840,4.387,844,3.878,861,4.65,1126,5.337,1344,3.286,1606,3.81,1655,6,1727,6.809,1750,5.005,1840,4.937,1878,5.553,1966,4.873,2206,6,2249,5.553,2271,5.829,2437,5.682,3109,6,3160,6,3424,6.206,4105,6.206,4196,7.333,4197,7.333,4198,7.333,4199,7.333,4200,5.682,4201,7.333,4202,6.464]],["t/1387",[19,1.737,38,2.894,40,7.187,72,3.281,228,3.575,267,4.77,606,7.418,607,9.531,841,3.116,1606,5.035,1877,8.2,1970,7.702,2249,7.338,2434,6.614,3056,8.997,3160,7.928,4203,8.541,4204,11.991,4205,9.69,4206,10.569,4207,9.69]],["t/1389",[9,2.598,72,3.743,87,3.408,109,2.34,115,1.522,117,3.528,155,2.501,183,2.265,184,2.849,225,1.998,230,1.79,231,2.104,294,2.529,310,4.3,336,2.756,340,1.941,342,1.714,350,4.521,352,1.413,403,3.002,405,2.756,410,3.149,425,2.314,426,2.082,452,2.098,467,2.769,510,4.645,514,2.258,544,5.144,562,5.121,577,3.56,586,4.645,591,2.937,606,3.329,607,4.645,658,2.008,692,3.437,694,2.808,696,2.808,836,3.381,856,4.047,909,3.747,914,3.528,1003,3.002,1056,3.381,1154,3.129,1156,2.769,1157,1.731,1173,3.594,1182,3.63,1186,3.63,1193,4.11,1248,4.047,1308,4.253,1524,5.426,1526,4.782,1543,4.782,1750,3.989,1819,5.426,1829,3.706,1886,3.667,1965,4.645,2162,5.426,2241,3.234,2509,3.11,2589,5.426,3020,3.747,3327,3.329,4202,5.151,4206,5.151,4208,5.844,4209,5.844,4210,5.844,4211,9.354,4212,4.645,4213,5.426,4214,5.844,4215,5.844,4216,8.521,4217,7.912,4218,5.844,4219,5.844,4220,4.179,4221,5.844,4222,4.782,4223,4.946]],["t/1392",[19,1.098,20,2.148,21,2.612,30,1.482,66,1.819,72,2.075,78,3.545,88,1.384,98,3.191,109,2.052,136,2.585,148,2.779,161,4.636,196,2.575,197,2.661,230,1.877,267,3.016,310,3.226,315,1.671,316,1.931,340,4.268,345,2.958,350,4.225,352,1.482,356,2.414,357,2.369,359,5.236,410,3.302,562,4.717,689,3.732,703,5.429,755,3.047,852,2.449,854,4.64,861,3.885,875,3.016,957,4.021,1074,4.95,1077,2.903,1124,2.305,1135,4.182,1182,3.805,1186,3.805,1295,3.928,1612,5.86,1641,4.847,1877,5.185,1938,3.732,2241,3.391,2564,4.309,2829,4.517,3031,5.787,3877,6.832,4206,5.4,4224,8.188,4225,5.689,4226,6.127,4227,5.4,4228,6.127,4229,6.127,4230,6.127,4231,5.689,4232,8.818,4233,8.818,4234,6.127]],["t/1394",[0,0.801,4,2.067,19,1.292,20,2.055,30,1.743,37,2.508,53,2.547,54,4.204,66,2.039,73,2.515,88,2.233,153,3.096,161,3.789,211,3.463,306,3.27,310,4.128,315,1.966,340,2.394,345,3.48,350,4.965,352,2.729,355,4.762,359,3.34,394,3.243,425,2.854,562,4.126,570,2.659,852,2.881,853,4.477,854,5.459,875,3.549,936,5.459,990,5.197,1047,2.712,1050,4.312,1128,2.836,1182,4.477,1186,4.477,1280,6.693,1606,3.745,1607,6.1,1609,4.351,1713,3.167,1884,3.702,1982,4.477,2156,4.621,2236,4.433,2524,6.1,2829,2.881,3877,5.585,4220,5.154,4235,7.208,4236,5.346,4237,7.208,4238,6.1]],["t/1396",[30,1.918,49,3.345,66,2.175,69,2.603,73,2.017,98,2.87,115,2.065,161,4.169,174,2.781,211,3.81,230,2.429,315,3.443,316,3.322,323,4.451,350,4.844,477,6.303,562,4.401,572,5.029,703,3.81,773,3.201,818,3.23,843,4.744,1093,5.204,1124,2.984,1128,3.12,1182,4.926,1186,4.926,1334,2.909,1938,6.423,2061,4.007,2250,5.578,2402,6.006,2531,6.144,2564,5.578,2829,4.215,2833,5.27,3055,6.711,3877,6.144,4203,6.99,4224,7.363,4239,6.144,4240,5.771,4241,6.99,4242,6.99]],["t/1399",[9,4.059,19,1.637,20,1.898,37,3.178,39,4.757,40,6.773,68,6.773,127,4.346,231,3.287,317,4.388,338,2.378,562,3.811,602,2.929,658,3.138,867,5.242,875,4.495,897,5.921,1272,6.233,1518,3.76,1855,8.048,2236,5.616,2335,9.777,3777,5.563,4236,6.773,4239,7.075,4243,8.408,4244,6.915]],["t/1401",[9,4.243,19,1.711,20,1.984,37,3.321,39,4.242,117,5.761,127,4.543,317,4.478,338,2.485,496,4.93,562,3.984,602,3.062,725,4.652,1075,6.052,1272,6.515,1518,3.93,1616,4.988,2236,5.87,2848,6.873,3777,5.814,3894,8.077,4236,7.079,4239,7.395,4243,6.945]],["t/1403",[20,2.328,37,3.025,39,3.998,83,3.358,117,5.247,118,3.198,127,4.137,155,3.72,225,2.972,231,3.129,317,3.877,336,4.1,338,2.263,342,2.549,350,3.555,452,4.02,467,4.118,562,4.673,602,2.789,658,2.987,694,4.176,696,4.176,890,7.662,1156,5.304,1157,3.316,1598,5.637,1606,4.516,2197,6.114,2236,5.346,2438,5.933,4236,6.447,4243,8.148,4245,6.447]],["t/1405",[0,0.928,39,4.6,68,6.192,71,5.238,125,3.327,317,2.891,339,4.11,340,3.623,344,6.075,349,2.065,356,2.285,400,6.406,425,3.306,562,3.485,602,3.897,653,4.338,692,3.392,1004,7.554,1076,4.174,1124,3.141,1606,4.338,1634,3.711,2276,5.621,2335,7.065,2679,4.951,2848,7.028,3894,7.065,4191,5.294,4243,9.373,4245,6.192,4246,6.468]],["t/1408",[0,1.28,12,1.667,19,0.792,22,2.733,23,2.244,26,1.389,28,1.947,30,1.668,37,2.4,38,1.319,41,0.948,66,2.375,67,2.065,68,5.116,69,2.264,72,2.335,76,1.245,88,0.998,96,2.038,98,3.071,109,1.028,135,2.793,140,1.844,146,1.863,148,2.004,160,1.995,161,4.461,193,2.503,196,2.899,197,2.996,228,1.63,234,2.772,236,2.365,241,1.971,244,1.314,267,3.395,307,1.807,310,2.523,340,2.818,342,1.295,349,1.092,350,4.508,352,1.068,353,2.935,356,1.209,400,2.197,405,3.253,474,2.38,562,2.879,602,3.337,606,2.516,607,3.511,692,2.639,716,3.129,773,4.648,818,3.186,914,2.666,1003,2.269,1050,2.642,1058,3.379,1124,1.662,1156,2.093,1334,3.113,1507,3.511,1508,2.132,1515,2.974,1606,4.408,1655,3.614,1709,2.197,1764,2.772,1820,4.515,1950,3.345,2056,2.801,2241,2.445,2335,3.738,2833,2.935,2848,2.556,2889,5.324,2890,6.066,3109,3.614,3231,3.015,4243,3.215,4246,3.422,4247,9.716,4248,11.244,4249,9.657,4250,7.479,4251,4.417,4252,4.417,4253,4.101]],["t/1410",[0,1.364,12,2.205,22,3.088,23,2.969,26,1.838,28,2.406,30,2.061,37,2.965,41,1.254,66,2.613,67,2.732,68,4.335,69,2.797,72,2.885,135,3.451,140,2.439,146,2.465,148,2.651,161,4.48,162,6.178,193,3.092,196,3.582,197,3.701,234,3.667,236,3.129,244,1.738,267,4.195,307,2.39,340,1.941,342,1.714,353,3.883,602,1.875,692,1.817,716,2.651,773,4.952,818,3.6,1334,4.311,1508,2.821,1950,4.426,2056,3.706,2833,3.883,2889,6.311,2890,6.854,3231,3.989,4247,10.358,4248,11.443,4249,9.338,4250,8.865]],["t/1412",[0,1.195,3,1.016,4,1.36,12,1.053,20,0.58,22,2.486,23,3.139,26,0.878,27,0.976,28,2.057,30,2.146,35,2.881,37,0.971,38,1.416,39,2.207,41,1.563,42,0.767,43,3.444,45,0.932,54,4.249,66,2.391,67,1.305,68,7.7,69,2.392,72,0.945,73,1.206,76,0.786,83,1.078,85,1.142,88,0.63,95,1.879,99,1.149,109,1.438,111,1.467,115,0.727,116,1.895,125,1.112,135,1.13,136,2,146,1.177,148,1.266,155,1.195,193,2.962,195,1.388,196,2.598,197,2.684,228,1.03,234,1.751,267,2.334,301,1.81,307,1.142,309,1.066,316,2.296,322,2.424,325,1.31,338,0.727,340,2.947,350,1.142,352,1.147,353,1.855,357,1.274,381,1.236,390,0.981,400,1.388,409,0.807,430,1.85,548,3.605,562,1.979,591,1.403,602,2.847,616,0.8,619,1.246,661,1.329,692,2.759,703,1.341,778,1.655,821,1.361,822,1.751,877,2.261,882,1.195,883,2.07,914,1.685,974,0.994,1036,3.493,1074,1.567,1076,1.395,1128,1.098,1136,1.602,1157,0.827,1508,1.347,1515,1.879,1606,2.463,1629,3.278,1710,4.905,1897,1.855,2056,1.77,2247,1.879,2263,1.41,2264,1.388,2276,1.879,2316,1.514,2516,1.655,2755,1.418,2836,1.996,2904,3.074,3106,5.067,3231,1.905,3886,8.052,3894,4.012,4195,3.283,4222,3.879,4236,2.07,4245,3.517,4247,10.414,4248,9.753,4250,6.422,4254,4.741,4255,11.064,4256,5.738,4257,2.791,4258,4.402,4259,8.873,4260,9.957,4261,2.46,4262,2.46,4263,4.741,4264,4.402,4265,2.46,4266,4.402,4267,4.402,4268,2.791,4269,4.402,4270,7.285,4271,8.161,4272,4.741,4273,4.741]],["t/1414",[0,1.41,12,2.216,19,1.052,22,3.229,23,2.983,26,1.846,28,2.414,30,2.068,37,2.975,66,2.535,68,4.355,69,2.807,72,2.895,135,3.462,140,2.451,146,2.477,148,3.879,161,4.495,185,2.61,193,3.103,196,3.594,197,3.714,234,3.684,267,4.209,307,2.401,310,2.148,338,1.529,340,2.84,342,2.507,350,2.401,353,3.901,467,2.782,474,3.164,562,2.451,602,1.884,716,3.879,773,4.471,818,3.393,882,2.513,1074,3.296,1126,4.273,1334,3.137,1508,2.834,1606,4.442,2056,3.723,2833,3.901,2889,6.327,2890,6.867,3231,4.008,3233,4.969,4269,9.363,4274,13.465,4275,10.084]],["t/1416",[0,0.582,6,1.961,11,3.134,38,2.348,39,1.871,43,4.381,45,4.592,47,2.623,73,1.999,75,3.107,88,2.13,110,2.075,116,3.142,122,1.696,131,2.546,153,2.251,218,1.518,228,1.933,262,2.397,325,2.46,340,3.133,349,1.944,352,1.901,356,1.434,357,2.112,405,2.471,428,2.963,429,2.482,430,3.361,469,4.788,548,3.889,602,4.127,608,5.444,688,2.338,692,3.26,741,3.494,772,2.647,822,1.485,881,3.008,900,4.132,956,1.796,1006,2.771,1038,2.311,1056,5.457,1058,2.567,1076,2.619,1123,3.972,1176,4.165,1569,3.056,1571,5.72,1572,3.056,1606,2.722,1982,3.254,2236,4.834,2241,2.9,2300,3.398,2356,3.576,2475,5.594,2560,3.886,2860,3.968,3125,3.439,3185,5.365,4276,5.239,4277,4.618,4278,4.287,4279,5.239,4280,5.239,4281,5.239,4282,4.618,4283,5.239,4284,7.498,4285,3.528,4286,4.434,4287,4.618,4288,5.239]],["t/1418",[0,1.074,19,1.987,37,3.361,41,1.495,42,1.915,45,3.699,69,2.288,73,2.457,76,1.964,88,2.182,109,1.622,118,2.564,131,1.451,155,2.983,172,4.902,225,2.383,244,2.073,309,2.661,336,3.287,341,2.899,342,2.044,349,1.724,350,3.95,352,2.681,356,1.908,357,1.872,425,2.76,426,2.483,452,2.502,467,3.302,514,2.693,562,4.032,577,5.884,608,4.827,616,1.999,694,3.349,867,4.001,877,2.55,939,3.086,964,5.278,974,3.44,1051,4.632,1053,3.039,1123,3.522,1156,3.302,1157,2.065,1606,5.018,1889,3.621,2062,5.17,2134,5.703,2200,5.278,2235,3.287,2505,4.693,2509,3.709,2716,5.898,2758,3.709,3598,3.805,4289,5.17,4290,6.97,4291,7.903,4292,6.97]],["t/1420",[0,1.312,6,1.072,19,0.77,42,1.855,43,5.721,45,3.426,67,3.155,72,2.286,76,1.211,88,0.971,99,1.769,115,1.119,116,1.718,131,2.752,135,1.74,172,3.022,193,4.283,213,2.527,243,3.548,252,2,262,3.088,306,3.781,310,2.47,322,4.027,340,1.427,350,4.661,395,3.187,396,2.346,403,2.207,409,1.242,426,1.531,429,2.036,430,1.286,445,2.933,562,4.757,602,2.674,688,1.918,692,2.937,718,3.432,741,1.91,772,3.411,822,1.913,900,2.259,956,3.519,1034,2.448,1115,4.306,1123,3.411,1344,4.882,1566,5.337,1569,3.937,1610,2.055,1708,2.43,1750,6.447,1759,2.548,1798,3.685,2125,2.669,2244,2.669,2300,2.787,2794,3.187,2834,2.412,2860,5.112,3185,2.933,3223,4.912,3235,7.954,4243,3.127,4277,3.788,4278,5.523,4282,3.788,4284,3.416,4285,2.893,4293,3.788,4294,5.95,4295,5.712,4296,5.95,4297,5.95,4298,5.95,4299,3.99,4300,6.267,4301,3.99,4302,10.265,4303,3.637,4304,4.297,4305,3.99]],["t/1422",[0,0.94,19,1.517,43,4.715,45,4.591,47,2.824,73,2.152,75,5.017,109,1.968,115,2.203,131,2.291,166,4.619,230,2.592,356,2.316,357,2.273,394,3.806,658,2.907,741,3.761,956,2.9,1043,3.791,1144,3.663,1344,3.791,1565,7.928,1566,4.144,1569,6.416,1571,8.006,1572,4.934,1610,5.261,1635,5.486,1966,5.622,1982,5.255,2561,4.975,2799,6.157,4306,5.696]],["t/1424",[0,0.723,19,0.537,20,0.623,22,1.71,23,1.522,27,1.76,28,0.846,30,1.574,35,2.469,36,5.176,37,1.043,38,1.503,39,3.036,41,1.636,42,1.383,43,2.805,47,1,49,3.883,54,1.747,56,4.627,57,4.703,58,10.533,66,2.34,67,1.4,68,3.733,69,3.022,70,2.889,72,1.704,73,0.762,76,1.834,77,1.594,83,1.944,88,1.722,98,1.084,109,1.774,111,1.575,115,1.311,132,1.777,154,1.792,162,3.421,164,1.514,193,1.087,227,3.332,228,1.105,229,1.439,241,1.337,242,2.394,252,1.394,270,2.052,294,2.178,303,2.381,304,1.648,306,4.176,307,3.119,315,3.01,338,2.397,340,0.995,349,0.741,352,0.725,356,0.82,358,1.229,394,1.348,430,0.897,433,1.733,486,1.468,548,1.482,577,3.066,581,2.535,606,1.707,608,4.507,609,2.321,610,2.321,611,2.381,658,1.03,676,1.636,683,2.038,686,1.575,688,1.337,692,1.565,699,1.311,703,1.439,707,1.9,716,1.359,721,7.292,722,5.325,752,4.783,821,3.717,822,1.426,877,1.096,879,1.557,882,2.785,900,3.421,956,2.614,966,3.507,1036,3.638,1061,4.159,1063,4.009,1067,2.017,1068,2.018,1077,1.419,1123,1.514,1155,1.498,1194,2.017,1291,1.53,1326,2.107,1534,1.808,1602,1.88,1606,1.557,1713,2.211,1856,1.88,2235,1.413,2503,1.825,2522,2.451,2860,2.269,2874,1.88,3129,2.107,3268,6.721,3469,2.075,3910,1.921,4098,2.321,4286,2.535,4287,2.641,4295,6.453,4296,6.721,4307,2.996,4308,2.996,4309,2.641,4310,7.893,4311,6.043,4312,2.641,4313,5.281,4314,2.107,4315,2.996,4316,5.033,4317,2.996,4318,2.996,4319,2.996]],["t/1426",[0,1.329,22,2.805,27,2.827,28,2.282,30,1.955,42,2.221,43,4.504,47,2.697,66,1.667,73,2.056,76,2.277,88,1.825,96,3.729,98,2.925,109,1.88,113,5.026,193,2.933,230,2.476,340,2.685,349,1.999,352,1.955,356,2.212,403,4.151,617,2.26,661,3.847,841,2.599,881,4.639,900,6.952,1096,3.713,2235,3.812,2799,5.882,2860,6.121,3125,5.304,3916,5.441,4286,6.84,4287,7.124,4311,9.913,4312,7.124,4320,10.676,4321,9.913]],["t/1428",[0,1.03,39,3.309,41,2.501,42,3.204,53,3.274,54,6.8,73,2.357,88,2.092,109,2.155,110,3.668,115,2.412,136,3.908,348,4.632,349,2.884,350,3.789,352,2.82,355,3.634,356,2.536,359,4.293,548,4.584,570,3.418,1699,4.759,2860,7.016,4322,10.826,4323,10.826]],["t/1430",[72,3.005,88,2.563,306,6.425,315,2.42,316,2.797,403,6.425,452,4.074,468,5.056,570,3.274,598,4.912,609,6.876,610,6.876,683,3.594,686,4.666,692,3.529,756,3.536,821,4.326,867,5.095,900,4.666,971,4.484,1123,4.484,1157,3.361,1305,6.346,2220,7.054,4324,8.875,4325,8.241]],["t/1432",[5,3.862,12,4.087,19,1.68,20,1.388,22,1.754,37,4.087,39,4.418,47,2.228,83,2.579,96,4.324,98,2.416,118,2.456,119,3.775,174,3.287,184,3.254,228,3.458,230,2.045,317,3.245,343,4.324,345,3.223,348,3.338,349,1.651,352,2.267,356,3.215,357,1.793,394,4.217,410,3.598,468,3.803,486,3.27,692,2.076,703,4.503,853,4.147,877,2.442,914,4.03,1077,3.163,1100,4.106,1154,3.575,1173,4.106,1534,4.03,1548,3.695,1656,3.621,1881,4.329,1972,7.45,2220,5.306,2296,4.952,2298,5.884,2532,5.056,2683,4.495,2835,5.306,2836,4.773,2848,6.795,3052,6.199,3777,4.067,4061,6.821,4326,7.669,4327,7.45,4328,4.147]],["t/1434",[22,2.316,39,3.147,41,2.984,42,3.735,53,3.115,54,6.588,160,3.981,242,4.156,341,3.666,548,4.361,616,2.528,773,3.557,1124,3.316,1627,5.402,2228,7.242,2755,4.477,2834,6.341,2843,6.537,2844,6.535,2845,6.414,2846,6.016,2847,6.829,3889,7.211,4329,7.768]],["t/1436",[22,2.927,41,2.798,42,3.061,2834,7.32,2843,8.262,2844,6.445,4330,11.139]],["t/1438",[0,1.129,37,3.534,39,3.627,41,2.179,42,2.791,44,5.025,315,2.77,339,5,340,3.374,349,2.512,356,2.78,481,5.473,1298,6.308,2725,7.143,2834,7.763,2844,5.876,2848,5.876]],["t/1440",[0,0.494,6,1.11,19,0.797,20,1.442,30,2.888,38,1.329,42,1.222,45,3.853,47,2.314,60,1.351,62,1.75,73,1.764,75,2.638,83,1.719,87,2.594,88,1.005,97,5.405,98,1.61,100,2.616,115,1.158,116,1.778,135,1.801,136,1.876,164,2.248,225,1.521,228,1.641,230,1.363,241,4.296,242,1.636,299,2.429,316,2.185,323,2.497,342,1.304,343,2.052,349,1.1,350,2.836,356,1.218,361,1.831,430,3.309,474,2.397,496,2.298,514,1.719,521,2.574,562,2.895,602,2.225,617,1.244,652,2.445,653,2.311,658,2.929,676,2.429,688,1.985,692,2.993,694,2.137,698,3.838,704,2.382,841,1.43,850,3.129,974,1.584,1004,3.081,1043,3.819,1077,2.107,1096,3.186,1136,2.553,1344,4.676,1525,2.995,1550,3.299,1555,2.71,1566,4.715,1600,3.18,1709,4.787,1759,2.638,1986,2.661,2025,2.168,2235,3.271,2263,4.306,2264,4.239,2292,3.536,2561,6.501,2848,2.574,2867,3.369,2874,2.791,3004,2.852,4183,3.18,4191,2.821,4195,3.081,4243,5.047,4246,3.446,4331,6.935,4332,6.935,4333,11.054,4334,8.523,4335,9.625,4336,9.625,4337,8.523,4338,4.448,4339,8.523,4340,4.448,4341,4.448,4342,4.448,4343,4.448,4344,4.448]],["t/1442",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1444",[12,3.548,80,5.003,88,2.124,89,3.306,92,4.248,109,2.187,115,2.448,120,5.962,121,5.728,122,3.044,126,8.729,128,8.277,218,2.724,228,3.469,256,5.962,380,6.079,1790,4.517,1989,6.723,4143,9.959,4144,12.5,4145,8.15]],["t/1452",[170,4.991,225,3.809,231,4.01,233,6.786,342,3.266,407,4.541,621,5.139,1502,7.31,4345,11.139]],["t/1454",[225,4.021,3695,9.622,4346,8.723]],["t/1456",[225,4.021,3350,6.859,4347,11.759]],["t/1458",[146,4.87,1713,5.072,2078,7.672,2082,8.945,4348,10.176]],["t/1465",[76,3.224,276,7.255,320,4.152,1300,6.376,1763,8.865,4349,8.047]],["t/1468",[12,2.955,26,2.463,27,3.657,38,2.339,45,2.614,60,3.176,62,3.082,76,2.207,84,4.093,109,1.822,183,3.035,184,3.818,317,2.712,324,5.14,357,2.809,415,4.645,514,3.026,648,7.725,798,5.14,822,2.22,877,2.865,940,4.508,960,2.565,974,2.79,1154,4.194,1383,4.606,1534,4.727,1788,4.817,1883,5.809,1884,4.023,1920,4.335,2048,8.555,2457,7.272,2509,4.168,2510,4.531,2511,4.685,2996,6.068,4350,5.273,4351,10.456,4352,7.832,4353,9.709,4354,7.832,4355,7.832,4356,6.903,4357,7.832,4358,7.832,4359,7.832,4360,7.272]],["t/1470",[18,4.166,19,2.17,39,3.514,89,3.46,115,2.562,183,3.813,644,5.303,648,7.945,668,6.815,676,5.373,875,4.845,906,4.684,938,6.539,1319,4.501,1616,6.326,1634,4.374,2482,6.24,3185,6.717,4361,9.84,4362,9.84,4363,8.328]],["t/1472",[76,2.794,92,4.39,109,2.307,307,4.056,380,6.797,459,5.451,580,5.933,841,3.189,851,7.277,1096,4.556,1319,4.537,1772,5.567,2005,7.883,2125,6.16,2483,6.16,3273,8.393,4158,6.677,4364,8.115,4365,9.917]],["t/1474",[27,2.092,38,1.787,73,2.205,76,1.685,83,2.311,87,3.489,88,1.351,96,2.76,98,2.165,110,2.369,112,3.835,115,1.558,131,2.327,135,2.422,164,3.023,183,2.318,193,3.145,218,1.733,225,2.046,230,1.832,275,4.277,276,3.793,322,3.4,338,1.558,342,1.754,357,1.607,358,2.455,434,3.334,644,3.224,648,7.785,658,2.056,683,2.422,739,3.358,940,2.579,994,4.277,1047,3.835,1154,3.203,1180,4.895,1255,4.083,1261,5.063,1300,5.68,1488,4.353,1502,7.785,1506,2.455,1629,2.691,1674,3.754,1713,2.628,1772,3.358,1787,4.437,1798,4.732,1992,4.635,2111,3.754,2187,3.644,2375,5.063,2631,4.437,2653,4.208,2800,7.092,3938,4.895,4349,6.096,4366,5.554,4367,5.554,4368,5.063,4369,5.063,4370,7.417,4371,5.273,4372,8.667,4373,8.667,4374,8.667,4375,8.667,4376,5.982,4377,5.982,4378,5.982,4379,5.982,4380,5.982,4381,5.982,4382,5.554,4383,5.982,4384,5.982,4385,3.835,4386,5.982]],["t/1476",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1479",[225,3.809,622,5.598,644,6.003,658,3.828,870,8.631,2211,6.724,2563,8.436,4387,8.106,4388,8.854]],["t/1481",[19,2.129,38,2.851,51,5.566,88,2.156,338,2.485,345,4.607,358,3.916,398,6.731,437,3.28,438,4.93,622,5.97,628,8.355,876,5.66,1471,4.675,2136,7.809,2679,5.66,4146,7.809,4387,6.945,4389,6.515,4390,8.412,4391,9.544,4392,9.544]],["t/1483",[3,1.303,4,1.027,20,1.534,26,1.834,37,1.246,41,1.251,50,1.995,51,3.402,60,1.772,62,2.295,81,1.737,82,1.567,84,1.871,88,0.809,90,2.142,93,1.968,95,2.41,96,1.652,98,1.296,109,1.357,122,1.159,125,2.324,153,1.538,159,2.071,162,1.882,170,2.614,188,2.41,212,1.871,218,1.037,233,4.496,238,4.68,241,1.598,242,1.317,272,1.72,275,2.56,278,4.528,320,1.299,378,1.754,381,1.585,383,1.652,390,1.259,397,5.958,398,6.887,399,5.191,403,1.839,407,2.378,409,1.686,413,1.459,414,2.711,425,1.418,438,3.813,439,3.828,448,2.922,450,1.745,466,2.295,518,2.789,531,2.656,545,3.402,619,1.598,621,1.652,622,1.799,624,2.56,628,5.191,671,3.03,673,2.088,684,3.903,703,1.72,745,2.378,782,2.656,822,1.015,879,3.03,910,2.929,952,2.379,1047,3.202,1143,2.444,1224,3.324,1295,2.295,1328,1.659,1330,4.727,1346,2.295,1471,1.754,1523,3.348,1634,1.592,1790,1.72,1906,1.995,1919,1.479,2015,3.156,2070,2.846,2116,7.709,2212,2.295,2278,2.295,2449,2.774,2821,2.711,2908,3.048,3164,3.156,3422,2.929,3695,6.039,4146,6.962,4149,5.866,4153,3.156,4159,3.156,4183,2.56,4387,8.922,4390,3.156,4393,9.369,4394,5.833,4395,4.936,4396,4.936,4397,3.58,4398,8.855,4399,8.258,4400,3.58,4401,3.58,4402,3.58,4403,3.58,4404,3.58,4405,3.58,4406,3.58,4407,3.03,4408,5.833,4409,5.833,4410,3.58,4411,3.58,4412,3.156,4413,3.58,4414,3.58,4415,3.324,4416,3.324,4417,2.929,4418,3.156,4419,3.324,4420,3.03,4421,3.03]],["t/1485",[41,2.487,112,4.871,170,3.404,190,5.529,228,2.803,398,3.778,628,9.111,822,2.153,843,4.545,952,5.048,960,2.488,1330,5.173,1923,4.586,1926,5.836,1938,4.628,2047,8.142,2116,5.529,2447,9.03,2915,3.925,2965,5.635,3746,7.054,4160,5.886,4161,6.429,4387,9.029,4407,6.429,4422,10.245,4423,7.597,4424,7.597,4425,7.597,4426,7.597,4427,7.597,4428,9.484,4429,10.245,4430,9.512,4431,10.245,4432,8.382,4433,7.597,4434,7.597,4435,6.216]],["t/1488",[7,3.665,40,4.038,50,3.88,51,5.628,73,0.837,81,1.597,83,1.272,88,0.743,89,1.157,92,1.965,96,1.519,98,1.97,109,0.766,118,2.003,121,3.317,162,1.731,174,1.909,176,1.987,215,2.897,218,0.954,230,1.008,232,3.829,238,2.087,241,1.469,242,1.211,256,2.087,276,2.087,278,2.897,322,2.136,346,1.582,380,3.596,391,2.066,398,4.023,409,1.574,432,1.89,437,1.131,444,1.394,618,1.952,621,1.519,622,1.654,628,8.57,644,1.774,656,2.667,670,1.875,673,1.92,740,1.92,754,1.419,755,2.708,822,2.895,841,1.058,882,1.409,897,2.135,952,2.187,992,1.741,1006,1.741,1043,2.439,1077,2.579,1149,2.066,1277,2.442,1330,4.307,1502,2.16,1537,2.216,1614,1.731,1638,2.111,1923,4.202,1926,3.966,2047,2.16,2125,2.045,2136,2.693,2241,1.822,2351,2.786,2360,4.799,2362,2.442,2427,3.829,2441,6.125,2495,2.442,2527,4.304,3093,2.493,3138,2.493,3166,3.893,3192,2.396,3226,1.861,3335,2.902,3359,2.396,3421,5.055,3424,2.786,3536,2.493,3570,5.886,3610,2.693,3695,2.693,3800,4.607,4146,2.693,4149,2.616,4154,2.902,4160,2.551,4161,2.786,4174,4.327,4176,8.644,4182,5.891,4183,2.354,4346,4.038,4356,2.902,4387,7.433,4395,5.891,4396,4.607,4407,2.786,4428,4.454,4432,4.454,4436,4.799,4437,2.786,4438,3.056,4439,5.055,4440,2.616,4441,2.354,4442,3.056,4443,3.056,4444,3.056,4445,2.28,4446,7.129,4447,3.056,4448,3.056,4449,3.292,4450,10.061,4451,3.056,4452,3.056,4453,3.292,4454,3.292,4455,5.055,4456,8.506,4457,2.902,4458,3.056,4459,2.902,4460,7.896,4461,6.645,4462,2.786,4463,2.902,4464,3.056,4465,3.056,4466,3.056,4467,3.056,4468,3.056,4469,8.318,4470,2.551,4471,3.056,4472,3.056,4473,3.056,4474,3.056,4475,2.902,4476,5.055,4477,5.055,4478,2.902,4479,3.292,4480,3.292,4481,3.292,4482,3.292,4483,3.292]],["t/1491",[3570,8.558,4484,10.365,4485,10.365]],["t/1493",[3570,8.479,4484,10.27,4485,10.27,4486,11.651]],["t/1495",[7,2.634,40,2.902,50,3.492,51,4.571,81,3.039,89,1.375,92,1.412,115,1.019,121,3.817,125,1.559,176,2.361,215,2.082,218,1.133,228,1.443,238,2.481,241,1.746,242,1.439,255,4.017,256,2.481,276,2.481,278,3.334,322,2.458,380,4.629,398,4.457,407,1.595,409,1.131,432,2.246,437,1.344,438,2.021,444,1.656,622,1.966,628,2.752,673,3.654,822,3.337,840,2.34,952,5.955,971,1.977,1043,1.753,1056,2.263,1149,2.455,1330,2.796,1614,2.057,1638,2.508,1923,2.361,1926,2.229,2065,3.448,2341,4.48,2351,3.311,2368,3.201,2427,2.752,2441,2.963,2495,2.902,2527,4.769,2679,2.32,2884,4.56,3020,2.508,3086,3.96,3093,2.963,3138,2.963,3166,4.48,3192,4.56,3226,2.212,3335,3.448,3359,2.847,3536,2.963,3570,7.613,3610,3.201,3695,3.201,4174,4.98,4176,8.853,4182,6.632,4183,2.797,4241,3.448,4356,3.448,4387,8.308,4395,5.302,4396,6.632,4398,5.523,4399,3.448,4407,7.583,4428,5.127,4432,5.127,4436,3.448,4437,3.311,4438,5.818,4439,5.818,4440,3.11,4441,2.797,4442,3.632,4443,3.632,4444,3.632,4445,2.71,4446,6.908,4447,3.632,4448,3.632,4450,3.448,4455,5.818,4456,9.221,4457,3.448,4458,3.632,4459,3.448,4460,10.379,4461,8.734,4462,8.297,4463,5.523,4464,3.632,4465,3.632,4466,3.632,4487,3.912,4488,3.912,4489,3.912,4490,3.632,4491,3.912,4492,3.912,4493,3.912,4494,3.632,4495,3.632,4496,3.311,4497,3.912,4498,3.448,4499,5.818,4500,3.201]],["t/1497",[5,4.422,47,2.551,50,5.733,88,1.726,90,4.572,118,2.812,241,3.411,274,7.124,283,8.705,392,4.705,437,2.627,673,4.458,822,2.915,851,4.572,1056,4.422,1626,6.389,1772,5.774,1788,4.701,3000,8.416,3020,4.9,3085,9.067,3086,3.862,3192,5.562,3570,8.461,4033,7.486,4387,5.562,4417,6.254,4428,8.416,4432,6.254,4451,7.097,4452,7.097,4460,9.067,4461,7.63,4462,6.468,4463,6.737,4484,6.737,4485,9.067,4495,9.551,4501,5.922,4502,7.643,4503,7.643,4504,6.468,4505,7.643,4506,7.097]],["t/1499",[3,1.997,49,2.316,50,3.059,51,3.202,81,2.663,118,2.019,162,2.886,228,2.025,239,7.956,241,2.45,289,3.861,390,1.93,409,2.353,413,2.238,432,3.151,628,9.162,754,2.367,822,1.556,840,3.284,897,3.56,911,3.313,971,2.774,1006,2.903,1144,3.229,1155,2.744,1330,2.45,1610,4.637,1923,3.313,1926,3.127,2015,4.839,2047,3.603,2286,5.097,2436,4.253,2441,7.344,3422,4.491,3570,7.805,4160,4.253,4161,4.646,4176,9.077,4346,6.036,4387,3.995,4395,9.077,4396,4.646,4398,7.173,4399,4.839,4428,4.491,4432,4.491,4436,4.839,4446,7.173,4450,11.482,4456,11.241,4467,5.097,4468,5.097,4469,10.635,4470,4.253,4471,5.097,4472,5.097,4473,5.097,4474,5.097,4475,4.839,4476,7.556,4477,7.556,4478,4.839,4490,5.097,4506,5.097,4507,8.138,4508,5.489,4509,9.697,4510,5.489,4511,5.097,4512,8.138]],["t/1501",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1503",[19,1.764,26,3.094,60,2.989,62,3.872,88,2.223,146,4.151,218,2.851,342,2.885,415,5.836,444,4.166,448,3.896,514,4.677,624,7.036,646,8.328,1328,4.56,1361,4.797,1457,7.299,1734,6.309,2509,5.237,2510,5.693,2511,5.887,2512,7.036,4513,9.137]],["t/1505",[19,1.792,60,3.712,88,2.258,223,7.592,396,5.457,514,4.722,522,8.229,628,7.031,1132,6.823,1328,4.631,1457,7.414,1458,10.773,1459,10.344,4387,7.274,4514,9.996,4515,9.996]],["t/1507",[0,1.045,6,2.346,20,1.955,38,2.808,89,4.137,96,4.338,294,4.069,320,3.412,338,2.448,570,3.469,578,5.316,666,7.12,667,5.84,740,5.484,1553,5.44,2410,8.73,3044,8.287,3899,6.974,4388,7.473,4516,9.402,4517,9.402,4518,9.402,4519,8.287,4520,8.287,4521,7.957,4522,9.402,4523,9.402,4524,9.402,4525,9.402]],["t/1509",[0,1.262,6,1.544,19,1.109,20,1.286,38,1.848,47,2.065,51,5.179,62,2.434,73,2.259,88,2.346,89,3.122,102,5.828,103,2.842,106,3.967,115,2.312,118,3.267,159,3.579,276,3.923,338,2.312,448,2.45,519,3.214,522,4.165,562,2.582,578,3.498,841,1.989,933,4.351,1053,2.697,1130,4.502,1191,4.685,1202,8.79,1216,4.685,1239,5.236,1318,4.685,1326,4.351,1541,5.236,1582,4.351,1707,4.589,2111,3.882,2149,4.502,2156,3.967,2187,3.769,2403,5.062,2406,5.453,2454,5.453,2566,4.685,3080,5.744,4212,4.917,4526,10.539,4527,6.187,4528,6.187,4529,9.553,4530,5.744,4531,5.744,4532,8.88,4533,6.187,4534,6.187,4535,6.187,4536,6.187,4537,5.744,4538,6.187,4539,6.187,4540,6.187,4541,6.187,4542,6.187,4543,6.187,4544,6.187,4545,6.187,4546,6.187,4547,5.744,4548,6.187,4549,6.187,4550,6.187,4551,6.187,4552,6.187,4553,6.187,4554,5.453,4555,6.187,4556,6.187]],["t/1511",[0,0.698,5,1.65,6,1.205,7,0.556,19,0.148,20,0.913,38,0.669,39,0.295,73,0.21,77,0.439,82,4.062,88,0.186,89,3.534,98,0.567,103,0.72,109,0.192,115,0.583,118,0.577,127,0.393,132,0.489,164,0.792,166,0.45,167,0.529,173,0.675,179,1.382,181,0.4,189,0.639,211,0.396,225,0.766,229,0.396,321,1.697,323,0.463,338,0.743,349,0.204,356,1.322,375,0.489,377,0.874,381,0.365,386,0.37,390,0.29,396,0.45,398,0.41,412,0.445,443,0.489,448,0.887,450,1.39,452,1.577,453,0.404,454,0.563,455,0.612,456,1.975,468,0.47,469,0.503,470,2.648,486,0.404,494,0.6,497,3.817,498,1.246,512,0.625,513,0.727,514,1.515,519,0.429,520,0.445,570,0.826,580,0.494,591,0.415,612,0.764,613,0.874,619,0.7,653,0.429,667,6.505,676,2.141,678,7.074,680,0.984,687,0.548,688,0.368,692,0.257,703,0.753,755,0.41,817,0.481,841,0.265,843,0.494,852,0.896,881,0.474,882,0.353,888,3.039,897,0.535,932,1.456,933,9.438,934,10.396,952,0.548,956,0.283,961,0.698,964,0.625,992,4.908,1069,0.6,1078,0.766,1128,0.617,1134,0.523,1142,0.542,1152,0.698,1157,0.464,1164,0.457,1175,3.117,1187,0.675,1191,0.625,1193,0.58,1196,0.612,1201,0.766,1205,0.698,1209,0.766,1216,0.625,1236,0.625,1248,0.571,1291,0.421,1311,0.639,1317,0.387,1335,0.727,1386,1.482,1393,5.872,1446,0.563,1460,1.63,1461,0.946,1470,0.518,1562,0.542,1565,0.535,1572,0.914,1576,0.656,1578,0.408,1604,0.612,1641,0.454,1752,0.727,1773,0.675,1781,0.625,1795,0.548,1799,0.766,1803,0.398,1856,0.518,1870,0.542,1893,0.766,1895,1.042,1906,5.664,1919,0.648,1928,0.571,1960,0.387,1975,0.639,1999,0.698,2110,0.59,2138,0.698,2149,2.075,2156,1.005,2160,0.6,2163,0.675,2170,1.283,2193,0.698,2203,1.736,2230,1.283,2241,0.868,2272,1.163,2306,0.675,2341,0.59,2345,0.612,2384,2.08,2390,0.518,2415,0.766,2416,4.559,2446,0.656,2503,2.941,2509,0.439,2511,0.494,2561,0.485,2564,1.103,2609,0.698,2675,0.698,2679,0.489,2867,0.625,3010,0.727,3039,1.121,3147,0.727,3158,0.727,3198,0.727,3295,0.556,3417,0.766,3541,0.675,3554,1.283,3558,2.648,3895,0.656,3898,1.246,3899,0.612,4136,0.6,4174,0.656,4217,1.456,4285,0.556,4328,0.974,4388,2.267,4440,0.656,4498,0.727,4526,4.483,4531,0.766,4537,0.766,4557,0.825,4558,0.825,4559,13.235,4560,7.744,4561,0.825,4562,0.825,4563,1.568,4564,0.825,4565,0.825,4566,0.825,4567,0.766,4568,0.825,4569,0.766,4570,0.58,4571,0.825,4572,0.825,4573,0.825,4574,0.825,4575,0.727,4576,0.825,4577,0.825,4578,0.825,4579,8.264,4580,0.825,4581,0.825,4582,0.825,4583,0.825,4584,0.825,4585,3.922,4586,0.825,4587,0.825,4588,0.825,4589,0.825,4590,1.568,4591,0.825,4592,0.825,4593,0.825,4594,0.825,4595,0.766,4596,0.825,4597,3.006,4598,0.825,4599,0.825,4600,0.825,4601,1.568,4602,2.24,4603,0.825,4604,0.825,4605,0.825,4606,0.766,4607,0.825,4608,0.825,4609,1.568,4610,4.828,4611,5.604,4612,1.568,4613,0.825,4614,3.922,4615,0.639,4616,0.825,4617,0.825,4618,1.781,4619,0.825,4620,2.24,4621,0.825,4622,0.825,4623,0.825,4624,0.825,4625,0.825,4626,0.59,4627,0.825,4628,2.852,4629,0.766,4630,2.852,4631,0.825,4632,1.568,4633,0.825,4634,1.568,4635,0.825,4636,1.568,4637,0.766,4638,0.825,4639,0.825,4640,0.825,4641,0.825,4642,0.825,4643,0.825,4644,0.825,4645,0.825,4646,0.825,4647,0.766,4648,7.135,4649,0.825,4650,0.825,4651,0.825,4652,0.825,4653,0.825,4654,0.825,4655,1.568,4656,0.825,4657,0.825,4658,0.825,4659,0.698,4660,0.825,4661,2.24,4662,0.825,4663,0.825,4664,0.825,4665,0.825,4666,0.825,4667,1.187,4668,0.825,4669,1.568,4670,0.825,4671,2.24,4672,0.825,4673,2.852,4674,1.568,4675,0.766,4676,2.24,4677,3.922,4678,0.825,4679,0.825,4680,0.825,4681,0.825,4682,0.825,4683,1.456,4684,0.825,4685,0.825,4686,0.825,4687,0.825,4688,0.766,4689,1.568,4690,1.568,4691,0.825,4692,1.568,4693,0.675,4694,0.825,4695,0.825,4696,1.568,4697,1.568,4698,0.825,4699,0.825,4700,0.825,4701,0.825,4702,0.766,4703,0.825,4704,0.825,4705,0.825,4706,0.766,4707,0.825,4708,0.825,4709,2.24,4710,0.825,4711,0.766,4712,0.825,4713,0.825,4714,0.825,4715,0.938,4716,0.825,4717,0.825,4718,0.825,4719,0.825,4720,0.825,4721,0.825,4722,0.825,4723,0.825,4724,0.825,4725,0.825,4726,0.825,4727,0.825,4728,0.825,4729,0.825,4730,0.825,4731,0.825,4732,0.825,4733,0.825,4734,0.825,4735,0.825,4736,0.825,4737,0.825,4738,0.825,4739,1.568,4740,0.825,4741,1.568,4742,0.825,4743,0.825,4744,0.825,4745,0.825,4746,0.825,4747,0.698,4748,0.825,4749,0.825,4750,0.825,4751,0.766,4752,1.456,4753,0.825,4754,0.825,4755,1.568,4756,0.825,4757,0.825,4758,1.896,4759,0.825,4760,0.825,4761,0.825,4762,0.825,4763,1.568,4764,0.825,4765,0.825,4766,0.766,4767,1.568,4768,0.825,4769,0.825,4770,0.825,4771,0.825,4772,0.766,4773,0.825,4774,0.825,4775,1.568,4776,1.568,4777,1.456,4778,0.825,4779,0.825,4780,0.825,4781,0.825,4782,0.727,4783,0.825,4784,0.825,4785,0.825,4786,0.825,4787,0.825,4788,0.825,4789,0.825,4790,0.825,4791,0.698,4792,0.825,4793,0.825,4794,0.825,4795,0.825,4796,2.852,4797,1.568,4798,0.766,4799,0.825,4800,0.766,4801,0.825,4802,0.825,4803,0.825,4804,0.825,4805,0.825,4806,0.825,4807,0.825,4808,0.825,4809,0.825,4810,0.625,4811,0.825,4812,0.825,4813,0.825,4814,0.825,4815,0.825,4816,0.825,4817,0.825,4818,0.825,4819,0.825,4820,0.825,4821,0.825,4822,0.825,4823,0.766,4824,0.825,4825,0.766,4826,0.825,4827,0.825,4828,0.825,4829,0.825,4830,0.825,4831,0.825,4832,0.825,4833,0.825,4834,0.825,4835,0.825,4836,0.512,4837,1.568,4838,0.825,4839,0.825,4840,0.825,4841,0.766,4842,0.825,4843,0.825,4844,0.825,4845,0.825,4846,0.825,4847,0.825,4848,0.825,4849,0.825,4850,0.825,4851,0.825,4852,1.568,4853,1.568,4854,1.568,4855,0.825,4856,0.825,4857,0.766,4858,0.766,4859,0.825,4860,0.825,4861,0.825,4862,0.825,4863,0.825,4864,0.825,4865,0.698,4866,0.825,4867,0.766,4868,0.498,4869,0.825,4870,0.825,4871,0.766,4872,0.766,4873,0.825,4874,0.825,4875,0.825,4876,0.825,4877,0.727,4878,0.825,4879,0.766,4880,0.625,4881,0.825,4882,0.825,4883,0.766,4884,0.825,4885,0.825,4886,0.825,4887,0.825,4888,0.825,4889,0.825,4890,0.825,4891,0.825,4892,0.766,4893,0.825,4894,0.825,4895,0.825,4896,0.825,4897,0.825,4898,0.825,4899,0.825,4900,0.825,4901,0.825]],["t/1513",[0,1.359,8,5.928,88,2.258,338,2.603,452,3.589,841,3.214,852,3.996,878,7.414,1124,3.761,1157,2.961,1311,7.745,1889,5.193,4530,9.281,4567,9.281,4902,9.996,4903,9.996,4904,8.459,4905,9.281,4906,9.996,4907,8.459,4908,9.996]],["t/1516",[8,5.979,19,1.33,20,2.096,60,3.062,61,4.554,62,2.919,73,1.887,81,3.599,83,2.866,84,3.877,88,1.676,89,2.608,109,2.346,139,4.869,170,4.518,225,2.537,294,4.363,342,2.175,380,5.208,390,2.608,398,3.69,407,4.11,409,2.145,423,5.305,438,3.833,512,5.618,523,4.478,524,5.399,545,5.88,570,2.737,622,3.729,852,2.966,866,5.748,881,4.259,956,3.456,1076,3.709,1128,2.919,1150,5.399,1183,5.618,1328,4.671,1548,4.106,1804,4.106,2022,8.941,2209,5.897,3020,4.757,4909,6.279,4910,7.419,4911,5.748,4912,7.419,4913,7.419,4914,5.748]],["t/1518",[6,3.125,8,6.172,20,2.163,81,5.048,170,4.663,243,5.471,587,8.272,623,6.34,624,7.441,1067,7.006,2563,7.881,4914,8.063,4915,8.515,4916,10.406,4917,10.406,4918,10.406]],["t/1520",[0,0.621,19,1.478,20,1.714,38,2.462,83,2.158,93,3.071,110,2.212,116,2.233,118,3.604,127,5.747,154,3.342,155,2.391,218,3.133,228,2.061,241,2.493,316,4.039,322,2.191,338,1.455,398,2.778,405,2.635,407,2.277,409,2.383,438,4.259,453,2.736,488,3.403,504,4.144,665,3.869,700,5.624,735,3.808,741,3.665,754,2.408,822,1.583,841,1.796,845,4.808,1006,2.955,1043,3.694,1053,3.594,1115,4.259,1319,2.555,1328,2.588,1471,2.736,1527,3.372,1616,2.919,1699,2.869,1728,2.671,1759,3.313,1767,4.328,1771,4.728,1793,3.136,1804,4.563,2022,4.065,2047,5.41,2081,4.924,2129,4.23,2315,6.243,2516,3.313,2527,4.387,2628,4.44,2709,5.999,3249,3.929,3717,4.23,4079,3.113,4441,7.006,4919,4.328,4920,6.977,4921,4.23,4922,4.728,4923,5.586,4924,6.115,4925,4.571,4926,6.745,4927,8.244,4928,8.244,4929,5.187,4930,5.586,4931,5.586,4932,4.924,4933,5.586,4934,4.728]],["t/1522",[81,5.007,316,4.219,950,7.82,1463,8.445,1904,8.391,1905,8.632,2315,10.14,4441,9.573,4935,10.322]],["t/1524",[70,6.916,316,4.118,1904,9.61,1905,9.886,2315,9.895,4924,9.692,4936,9.335]],["t/1526",[70,7.119,81,4.966,244,3.689,311,9.858,316,3.226,950,6.424,1463,8.377,1904,8.35,2315,7.754,4441,7.321,4924,7.594,4936,9.609,4937,12.402]],["t/1528",[3,4.649,272,6.774,316,3.391,390,4.492,409,3.694,2315,8.149,4924,7.981]],["t/1530",[60,2.696,70,6.513,155,3.798,252,4.13,316,2.797,407,3.618,438,4.585,452,3.186,524,6.459,777,5.458,950,7.12,1156,4.205,1157,2.629,1904,7.639,1905,7.858,2067,5.824,2315,6.721,2509,4.723,3249,6.242,4441,6.346,4920,9.602,4925,7.262,4936,8.791,4938,11.346,4939,8.875,4940,8.875,4941,8.875,4942,8.875,4943,8.875,4944,8.875,4945,8.875]],["t/1532",[13,5.933,38,3.633,89,3.487,92,3.58,109,2.307,121,6.042,122,3.211,131,2.065,167,6.359,210,6.042,398,4.933,407,4.043,545,5.784,841,3.189,1076,4.958,1096,4.556,1136,5.693,1300,5.527,1328,4.595,1804,5.489,4946,7.883,4947,8.393]],["t/1535",[8,3.564,13,3.596,20,2.125,26,1.89,70,3.45,73,1.529,89,2.113,109,1.398,110,2.38,118,2.211,126,6.451,128,6.117,131,2.128,135,2.434,136,2.535,174,2.108,213,3.534,218,2.96,225,2.055,231,2.164,278,3.198,296,2.403,302,2.797,397,5.158,398,5.083,404,3.534,407,5.05,409,1.738,426,2.141,432,3.45,469,3.662,523,3.628,545,5.96,663,3.053,754,3.749,841,1.933,960,3.347,1003,3.087,1047,2.262,1170,3.812,1598,5.64,1609,3.628,1767,4.657,1798,4.748,1804,6.198,2022,4.374,2527,5.438,2806,5.866,3122,3.16,3282,3.505,4810,6.586,4922,7.36,4947,5.087,4948,8.075,4949,4.374,4950,9.008,4951,9.489,4952,9.489,4953,9.489,4954,9.164,4955,5.581,4956,5.581]],["t/1537",[0,1.385,103,6.151,167,6.618,407,4.207,481,5.562,545,6.02,546,8.204,1173,6.348,1298,6.411,1311,7.997,2509,5.493,4420,10.547,4957,9.584,4958,9.098]],["t/1539",[0,0.696,4,1.38,6,1.201,13,1.7,20,0.591,22,1.645,27,1.683,28,0.802,30,0.687,31,1.715,32,5.722,33,3.101,34,2.96,35,1.976,36,1.503,38,0.849,43,3.49,47,2.752,49,1.199,56,3.704,57,3.765,60,1.462,61,1.284,62,1.118,70,4.734,72,1.63,73,1.875,76,0.801,77,2.561,78,1.644,88,0.642,109,0.661,117,1.715,127,1.352,153,3.166,162,1.494,164,1.436,185,4.242,221,1.715,222,1.619,242,1.771,289,1.998,296,1.136,299,2.628,315,2.249,316,3.674,338,0.74,339,1.399,349,0.703,355,3.513,396,1.551,415,1.685,426,1.012,432,1.631,444,2.651,475,1.939,486,1.392,514,2.847,545,3.652,546,2.258,577,5.024,669,2.504,692,0.884,702,1.783,718,1.17,753,1.607,754,1.225,817,1.657,822,2.089,840,1.7,845,4.298,864,4.533,879,1.476,967,3.216,971,1.436,1003,1.459,1004,1.968,1029,2.107,1030,1.685,1036,1.216,1038,4.209,1053,1.239,1054,5.229,1057,5.629,1061,4.046,1115,1.468,1142,8.244,1311,4.851,1328,1.316,1562,4.109,1641,2.645,1699,3.216,1713,2.751,1767,3.729,1793,1.595,1804,1.572,1926,1.619,1942,3.788,1960,1.334,2047,3.159,2153,2.258,2262,1.244,2379,2.405,2511,1.7,2527,3.332,2609,2.405,2686,3.938,2709,2.068,2753,1.459,3252,1.584,3306,5.808,3346,2.638,3348,8.861,3349,10.046,4420,2.405,4440,3.825,4441,2.032,4706,2.638,4919,7.776,4920,4.073,4924,2.107,4925,5.123,4946,2.258,4959,1.765,4960,5.519,4961,2.841,4962,2.504,4963,2.841,4964,2.638,4965,2.841,4966,2.841,4967,2.841,4968,2.841,4969,2.841,4970,2.841,4971,6.843,4972,4.813,4973,1.998,4974,2.841,4975,2.841,4976,6.261,4977,5.814,4978,4.469,4979,2.504]],["t/1541",[0,1.03,13,3.932,19,1.178,20,1.366,34,4.042,36,3.476,76,2.612,89,3.259,90,3.932,92,2.372,109,2.499,110,3.671,111,3.455,112,4.214,122,3.001,228,2.424,229,4.454,278,4.933,299,5.061,315,1.792,316,3.676,322,2.578,338,1.711,407,2.679,438,4.789,556,3.802,621,3.032,656,5.261,662,4.699,665,4.552,702,4.124,704,3.519,822,1.863,1144,2.188,1328,3.045,1502,4.313,1506,2.697,1792,3.967,1868,5.377,2047,6.084,2686,5.377,2980,6.328,3129,4.622,3322,5.562,3401,6.328,4079,3.663,4092,6.102,4106,7.554,4440,5.224,4810,8.133,4925,5.377,4946,8.536,4947,5.562,4980,5.377,4981,8.171,4982,9.466,4983,9.972,4984,5.562]],["t/1543",[0,0.882,4,2.274,70,6.052,299,5.756,514,3.064,545,4.625,577,7.69,718,3.265,822,2.248,864,7.764,879,4.12,1311,6.144,1562,5.204,1767,6.144,1942,5.441,1960,3.723,2047,5.204,2262,3.471,2527,5.611,3252,4.42,4440,8.38,4810,9.56,4946,10.033,4959,4.926,4960,6.99,4981,11.127,4982,11.127,4983,11.721]],["t/1545",[19,1.661,83,3.579,113,4.901,167,5.94,170,5.718,211,4.451,323,5.2,338,2.412,348,4.632,407,4.753,435,6.516,436,6.416,460,7.178,547,6.742,556,5.36,656,4.538,692,2.881,841,2.979,1136,5.318,1699,4.759,1765,6.08,1804,5.127,1881,6.008,2021,7.58,2022,6.742,4106,6.516,4985,9.264,4986,9.264]],["t/1547",[19,1.522,20,2.085,22,1.529,26,1.829,60,1.767,62,2.289,70,3.339,73,1.48,76,2.393,83,2.247,88,1.918,89,2.986,90,3.48,95,3.916,98,2.105,109,1.353,110,2.303,113,5.149,115,1.515,118,2.14,121,3.544,131,1.768,139,7.238,155,2.49,170,4.495,213,3.421,228,3.133,262,3.885,338,1.515,342,1.706,391,3.65,394,2.617,398,5.485,401,2.639,407,4.496,415,3.45,434,3.242,435,4.092,436,4.029,437,1.999,438,3.005,439,3.818,452,2.088,467,2.756,514,2.247,545,7.144,656,2.85,694,2.795,1053,2.536,1156,2.756,1157,1.723,1276,3.916,1626,5.275,1804,4.7,1886,3.65,1919,2.403,1982,3.613,2125,3.613,2509,3.096,2510,3.366,2511,3.48,2908,3.04,3401,3.971,4417,4.76,4437,7.187,4946,9.736,4950,7.486,4954,6.949,4987,5.127,4988,4.923,4989,5.401,4990,4.923,4991,5.401]],["t/1549",[0,0.585,20,1.094,22,1.382,26,1.654,37,2.744,60,1.598,62,2.07,70,3.02,73,1.338,76,2.222,89,3.325,90,3.147,92,3.413,97,3.336,109,1.834,110,2.083,113,2.212,115,1.37,122,1.703,127,2.504,155,2.252,170,4.237,174,1.845,213,3.094,219,2.673,228,1.941,230,1.612,244,1.565,256,3.336,262,3.607,278,4.196,299,2.873,316,1.658,323,2.953,324,3.453,342,1.543,346,2.528,391,3.301,398,6.264,407,4.992,409,1.521,415,3.12,434,2.932,435,3.701,436,3.644,437,2.71,438,4.073,439,3.453,452,1.889,467,2.493,514,2.033,545,7.512,656,4.632,694,2.528,960,1.723,1002,3.644,1144,1.752,1156,2.493,1157,1.559,1276,3.542,1553,3.044,1626,4.897,1646,2.417,1765,8.452,1804,2.912,1919,2.174,1982,3.268,2125,3.268,2509,2.8,2510,3.044,2511,3.147,2527,2.8,2908,2.75,3588,4.885,4437,6.673,4911,4.077,4922,4.453,4946,8.348,4954,6.451,4989,4.885,4990,4.453,4991,4.885,4992,5.261,4993,5.261,4994,5.261,4995,5.261]],["t/1551",[0,1.112,8,6.399,26,1.504,60,2.71,61,2.161,62,1.883,70,2.746,73,1.217,76,2.067,88,1.081,89,3.137,92,2.648,98,1.731,109,1.113,110,1.894,111,2.515,112,3.067,120,3.034,121,2.915,126,5.442,128,5.16,139,3.14,147,4.704,170,2.144,213,2.813,217,3.549,218,2.898,225,1.636,256,3.034,277,3.482,314,4.815,374,3.707,380,3.79,381,2.118,390,1.682,397,4.351,398,3.649,400,2.379,404,2.813,407,1.95,409,1.383,432,4.211,439,3.14,469,2.915,515,5.16,516,5.684,518,2.288,519,3.812,520,2.578,523,7.155,524,3.482,525,3.482,545,5.835,546,3.803,666,3.623,718,3.021,960,2.922,990,2.515,1038,2.11,1163,4.118,1164,4.06,1581,2.344,1765,3.14,1804,2.648,2082,5.684,2125,2.972,2365,3.421,2527,5.324,2528,4.939,2806,4.211,2874,3.002,3093,3.623,3327,2.725,3362,3.14,3401,3.266,4810,5.556,4948,6.812,4949,3.482,4950,6.467,4951,6.812,4952,9.29,4953,6.812,4954,7.301,4956,4.442,4996,4.442,4997,7.336,4998,5.831,4999,6.003,5000,7.336,5001,7.336,5002,7.336,5003,7.336,5004,7.336,5005,4.784,5006,4.442]],["t/1553",[0,1.176,103,4.86,339,5.209,340,3.514,349,2.617,407,4.313,481,5.702,545,6.171,546,8.41,1003,5.435,1028,6.222,1804,5.856,1938,6.446,3306,6.862,5007,7.848]],["t/1555",[5,3.366,6,1.451,41,1.822,57,5.634,244,1.73,409,1.682,464,6.366,676,3.176,684,3.077,755,2.893,864,6.169,960,2.781,1196,4.315,1317,2.731,1320,4.507,1383,3.421,1631,3.48,1772,4.767,1942,5.066,2348,4.923,2495,4.315,2753,4.362,3151,9.722,3306,9.158,3687,4.405,3995,4.923,4110,5.401,5008,5.817,5009,5.817,5010,13.437,5011,12.248,5012,8.493,5013,11.029,5014,8.493,5015,8.493,5016,7.187,5017,8.493,5018,5.401,5019,8.026,5020,4.315,5021,5.817,5022,5.127,5023,4.923,5024,8.493,5025,5.817,5026,5.817,5027,5.817,5028,5.817,5029,5.817]],["t/1557",[20,1.014,34,2.999,35,1.996,41,1.937,43,2.718,47,2.485,57,5.559,70,2.799,77,2.595,78,2.821,115,1.938,218,2.156,242,1.794,244,2.214,290,3.693,312,2.799,315,1.33,316,3.877,346,3.577,355,4.269,438,2.519,486,3.647,548,3.684,617,1.363,669,4.298,684,5.344,718,2.008,735,1.895,740,2.844,754,2.102,845,5.893,849,3.092,864,6.215,960,1.597,1038,3.283,1066,4.415,1149,4.671,1272,3.329,1383,5.942,1463,3.99,1553,2.821,1699,2.505,1728,5.486,1741,2.699,1904,3.283,1942,3.42,2047,4.886,2527,3.961,2914,4.947,3106,3.986,3306,9.177,4919,8.888,4920,7.641,4925,6.091,4936,3.778,4971,4.528,4977,6.912,4978,8.384,4979,4.298,5016,4.127,5022,4.298,5030,6.912,5031,4.876,5032,7.444,5033,6.912,5034,4.876,5035,7.444,5036,4.876,5037,7.444,5038,3.99]],["t/1559",[41,2.7,242,4.631,432,6.023,526,5.89,879,6.54,2527,5.584,2806,6.023,3306,8.163,4420,10.652,4973,7.38,4979,9.249]],["t/1561",[41,2.548,73,2.428,88,2.156,135,3.865,242,4.37,278,5.079,322,3.744,338,2.485,452,3.426,618,5.66,622,4.797,663,4.848,718,3.93,879,6.172,1157,2.827,2078,8.594,3122,5.017,3330,8.412,5039,11.878,5040,8.412,5041,11.878]],["t/1563",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1566",[0,0.411,12,1.394,19,1.352,20,2.401,22,1.572,26,1.162,32,1.954,39,1.32,41,1.284,44,1.828,47,1.233,49,3.181,60,1.122,74,2.456,78,2.138,81,4.205,88,1.352,109,0.86,115,1.964,116,1.477,136,1.559,160,1.669,161,3.146,181,1.792,184,1.801,196,1.553,213,2.173,224,2.488,225,1.264,230,1.132,231,1.33,244,1.099,288,2.937,293,2.191,294,1.599,299,2.018,307,2.447,309,2.879,317,2.611,320,1.341,342,1.755,346,1.775,352,2.097,356,1.012,357,0.993,359,1.712,409,1.068,423,2.642,426,1.316,437,2.592,452,1.327,457,3.359,496,1.909,514,1.428,532,3.165,576,2.211,592,4.355,594,3.881,614,4.081,616,2.163,617,1.673,658,1.27,664,1.542,676,5.2,693,1.477,698,3.312,725,1.801,739,3.359,818,2.31,824,2.089,847,2.089,850,2.599,852,2.392,877,1.352,879,3.109,914,2.23,927,3.127,928,2.642,971,1.867,1068,1.482,1173,2.273,1231,2.522,1300,2.059,1312,2.23,1313,5.594,1328,2.773,1334,2.195,1362,2.689,1553,2.138,1627,4.554,1640,3.185,1645,2.937,1653,4.532,1676,3.127,1710,2.488,1755,2.689,1759,2.191,1779,3.257,1780,6.382,1856,2.319,1881,2.396,1938,2.251,2111,2.319,2246,2.863,2599,1.991,2613,5.711,2755,1.877,2846,2.522,2865,3.755,2870,2.863,2886,3.384,2891,3.549,2892,1.819,2924,3.127,2971,1.828,3002,2.456,3086,1.867,3362,2.425,3590,6.382,3632,6.464,3856,3.257,3908,3.023,4094,2.211,4220,2.642,4313,2.559,4349,2.599,4419,5.556,4547,3.431,4958,3.257,5042,3.695,5043,3.695,5044,3.431,5045,3.695,5046,3.695,5047,2.798,5048,3.431,5049,3.695,5050,3.695,5051,3.695,5052,5.275,5053,7.541,5054,5.984,5055,5.984,5056,3.695,5057,3.695]],["t/1568",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1570",[6,2.554,155,4.382,210,6.237,228,4.922,267,5.04,306,5.626,340,3.401,479,9.506,550,6.52,570,3.777,716,5.626,841,3.292,1868,8.377,5058,10.238]],["t/1572",[0,1.155,12,3.351,19,1.592,22,2.333,26,2.792,28,2.507,30,2.148,38,1.848,49,2.61,66,2.341,69,2.915,73,1.574,146,3.746,148,5.452,225,2.116,234,3.882,236,4.755,263,3.669,267,5.588,307,3.632,309,2.362,315,1.687,317,2.142,336,2.918,342,1.814,353,4.111,392,2.83,405,2.918,437,2.126,453,3.031,550,5.967,664,2.582,684,4.696,716,5.846,717,3.252,776,4.223,864,3.805,913,3.046,971,3.126,1100,5.461,1155,4.439,1291,3.16,1508,4.287,1527,3.734,1734,3.967,1869,3.424,1966,4.111,2056,3.923,2187,3.769,2300,6.736,2473,4.285,2765,3.551,3106,3.313,3110,3.551,3129,4.351,3234,5.453,3341,5.873,5059,6.187,5060,6.187,5061,4.794,5062,6.187]],["t/1574",[19,1.897,212,5.529,225,3.618,306,4.8,336,4.99,342,3.102,394,4.76,395,7.848,550,6.65,716,4.8,1002,7.328,1156,5.013,1175,8.41,1554,7.328]],["t/1576",[6,2.239,9,3.989,18,2.658,19,1.609,38,2.68,77,3.341,110,2.486,131,1.307,153,3.855,162,3.301,174,2.202,225,2.147,230,1.923,234,3.94,267,3.091,296,3.587,309,2.397,310,2.297,315,2.856,316,2.828,317,2.174,320,2.278,322,2.463,329,3.061,336,2.961,340,2.981,342,1.841,343,2.897,353,4.172,392,4.105,405,2.961,430,1.879,550,5.506,578,3.55,658,2.158,661,2.988,665,4.349,716,5.184,717,4.718,845,3.662,856,4.349,956,3.076,1058,4.396,1157,1.86,1497,4.991,1543,5.137,1546,5.314,1554,6.215,1576,4.991,1708,3.55,1901,4.991,1920,3.475,1997,5.534,2056,3.982,2150,4.489,2263,3.172,2264,3.123,2473,4.349,2538,4.227,2579,5.314,2790,4.416,2891,3.724,3045,5.83,3103,4.349,3110,6.012,4239,4.865,4350,4.227,4445,4.349,5063,4.416,5064,7.91,5065,5.83,5066,7.91,5067,5.314]],["t/1578",[6,1.93,9,3.439,73,1.968,77,4.117,88,1.747,109,1.8,110,3.063,132,4.588,172,5.441,186,4.343,225,3.546,307,3.164,336,3.649,337,6.149,342,3.041,392,3.539,488,4.713,514,2.989,550,5.452,576,4.628,601,3.495,658,2.659,665,5.358,689,4.713,692,3.225,696,3.717,716,3.509,717,4.067,738,3.974,856,5.358,974,2.756,1052,4.713,1157,2.292,1182,4.805,1497,6.149,1554,7.183,1708,4.374,1901,6.149,2102,4.476,2156,4.96,2211,4.67,2467,6.33,2579,6.547,4227,6.819,4293,6.819,4758,6.547,5061,5.994,5066,6.819,5067,6.547,5068,7.736,5069,9.629,5070,7.736,5071,6.149]],["t/1580",[0,0.568,6,3.115,18,2.164,37,2.685,38,1.527,47,2.575,71,3.208,99,3.177,106,5.959,110,2.024,116,2.044,131,2.314,143,2.583,153,2.196,174,2.706,178,3.872,195,2.543,225,2.639,296,3.085,301,3.316,309,1.952,315,2.104,316,1.611,317,1.77,336,3.639,339,2.517,340,3.087,342,2.263,343,4.288,344,3.721,346,3.707,349,2.299,352,1.866,353,5.128,356,1.4,361,2.105,405,3.639,430,1.53,510,4.064,536,2.81,550,5.443,570,2.847,571,4.064,572,6.565,601,3.486,602,2.982,658,1.757,665,3.541,703,2.456,716,4.216,717,2.688,836,2.958,855,4.747,861,3.242,956,3.186,1003,3.964,1058,2.504,1067,3.442,1075,3.242,1182,3.176,1186,4.793,1303,3.872,1312,3.086,1550,3.792,1554,3.541,1555,3.115,1578,2.53,1661,3.397,1941,3.176,2056,3.242,2102,2.958,2192,3.721,2256,2.913,2263,4.696,2264,4.623,2586,3.442,3110,4.43,3966,3.442,4240,3.721,4445,3.541,4836,4.793,5063,3.596,5065,4.747,5067,4.327,5072,4.747,5073,4.747,5074,4.747,5075,5.112,5076,5.112]],["t/1582",[0,1.192,12,4.046,19,1.458,22,2.137,23,4.132,25,3.908,26,2.557,28,2.296,30,1.967,33,2.816,42,3.296,45,3.578,66,2.212,72,2.754,83,3.143,91,3.069,99,3.349,125,3.241,131,1.694,153,3.494,211,3.908,228,3.001,342,3.144,357,2.185,425,3.221,595,4.276,893,6.16,955,6.532,1517,3.871,1520,4.178,1545,5.976,1585,4.706,1586,7.803,1588,4.91,1667,6.465,2033,5.003,2227,10.15,2828,6.302,3115,6.302]],["t/1584",[0,1.486,19,1.37,22,2.703,28,2.904,30,2.488,35,2.758,37,2.66,38,3.473,66,2.566,69,3.377,70,5.905,98,2.766,135,3.095,143,6.559,193,3.733,195,5.783,296,3.055,315,2.084,340,3.417,352,2.488,550,4.018,602,3.3,661,3.638,663,3.883,703,3.672,956,2.62,1058,3.744,1328,3.541,2230,6.254,3106,5.508,3117,6.574,3122,4.018]],["t/1587",[0,1.234,9,3.812,19,1.537,45,2.862,118,3.154,143,4.332,195,4.265,230,3.4,231,3.087,315,2.338,340,3.686,349,2.745,353,5.698,356,3.038,430,3.322,602,2.751,699,4.857,716,5.582,778,5.085,956,3.804,967,4.404,1058,5.436,1082,5.437,1506,3.519,1602,5.38,2007,6.494,3282,5.001,5077,8.574,5078,8.574,5079,8.574,5080,11.098]],["t/1589",[0,0.83,9,4.5,18,4.285,19,1.338,33,2.584,45,2.491,131,2.392,193,2.708,210,4.546,228,2.753,231,2.686,293,4.426,315,3.359,317,2.584,322,3.971,338,1.943,346,3.585,356,2.043,405,4.774,468,4.251,550,3.923,602,3.247,692,2.321,716,3.385,717,6.039,718,3.073,956,2.558,1058,3.656,1128,2.937,1269,7.01,1450,7.665,1506,3.062,1554,5.169,1700,6.316,2007,5.652,2473,5.169,2765,4.284,3110,4.284,3910,4.785,4306,5.024,4382,6.929,5067,6.316,5081,7.463,5082,8.566,5083,7.463,5084,7.463,5085,8.566,5086,6.929,5087,5.652]],["t/1592",[0,1.273,4,2.128,6,2.857,19,1.33,42,2.77,116,2.966,131,2.384,137,3.599,174,3.535,218,3.317,230,3.088,267,3.652,296,4.03,322,4.492,357,1.993,360,8.013,390,2.608,409,3.311,432,4.259,450,3.616,469,4.52,474,3.998,504,5.503,606,4.226,716,5.195,735,2.884,926,4.757,974,3.591,1155,3.709,1616,3.877,1820,3.948,1954,5.618,2047,4.869,2278,4.757,2294,5.897,2536,5.618,2790,5.218,3068,6.279,3117,4.195,3231,5.064,3720,6.279,5088,5.748,5089,6.889,5090,7.419,5091,6.889,5092,5.897]],["t/1594",[4,1.774,6,2.999,44,3.061,116,2.473,131,2.503,137,3.001,154,3.701,174,3.643,218,3.009,230,2.72,262,2.83,270,2.522,296,4.152,315,3.412,316,1.95,322,4.453,329,3.016,357,2.386,390,2.175,409,3.003,432,3.551,450,3.016,474,3.334,504,4.589,735,3.452,841,1.989,926,3.967,974,4.043,1155,3.093,1616,3.233,1788,3.805,1920,3.424,1954,4.685,2047,4.06,2278,3.967,2294,7.058,2536,4.685,2790,4.351,2833,4.111,2891,3.669,2896,3.551,2906,4.589,2908,3.233,3068,5.236,3110,7.182,3162,4.424,3720,5.236,4350,4.165,5092,4.917,5093,5.062,5094,4.917,5095,5.062,5096,6.187,5097,4.917,5098,4.502,5099,6.187,5100,8.88,5101,6.187,5102,6.187,5103,4.351,5104,4.917,5105,4.685,5106,5.236]],["t/1596",[6,2.642,19,1.431,44,3.949,115,2.078,122,4.382,131,2.205,154,7.878,234,5.007,262,3.65,269,7.705,315,2.176,329,3.89,357,2.144,956,4.64,974,3.771,1038,3.52,1554,5.527,1709,3.969,1788,4.908,1920,4.416,2833,5.303,2891,4.733,2896,4.581,2906,5.919,2908,4.17,3110,4.581,3267,5.303,4350,5.373,5093,6.529,5094,6.343,5095,6.529,5097,6.343,5098,5.807,5107,6.753,5108,7.41,5109,7.41]],["t/1598",[6,2.698,131,2.252,154,4.929,267,4.057,296,4.323,307,4.423,315,2.247,316,4.038,357,3.243,392,3.769,432,6.207,549,5.685,716,3.738,717,6.346,772,4.163,817,7.474,974,3.852,1038,5.324,1115,5.586,1312,4.974,2061,5.464,3110,4.73,3162,5.892,5110,10.813,5111,5.547,5112,10.813]],["t/1600",[6,3.11,131,2.595,316,3.253,317,3.574,353,6.859,357,3.348,430,3.73,716,4.682,974,4.439,1518,5.132,1547,5.712,4445,7.149]],["t/1603",[0,1.245,22,2.284,28,2.454,30,2.102,35,3.629,66,2.858,69,4.443,135,3.52,143,4.392,193,3.154,195,4.323,317,4.687,329,5.457,663,4.416,1920,6.196,3117,4.915,3122,4.57,4350,7.538,5098,8.148]],["t/1605",[0,1.296,22,2.434,28,2.615,30,2.241,35,3.421,66,2.762,69,4.189,135,3.752,143,4.681,193,3.362,195,4.608,218,3.378,403,4.759,663,4.707,755,5.799,1790,4.451,2067,6.08,3117,5.239,3122,4.87,4973,6.516,5113,9.264,5114,9.264]],["t/1607",[0,1.267,22,2.348,28,2.523,30,2.162,35,3.365,66,2.726,69,4.119,135,3.619,143,4.516,193,3.243,195,4.445,262,4.088,663,4.54,818,4.049,822,3.23,1334,4.181,3116,10.009,3117,5.054,3122,4.699,4108,10.583]],["t/1609",[0,1.407,6,2.271,12,2.417,19,1.148,22,2.783,26,2.014,28,2.57,30,2.202,66,2.379,69,2.988,109,1.49,110,2.536,131,1.895,135,3.686,143,4.6,146,2.702,148,2.906,193,3.304,195,4.528,225,2.19,230,1.962,316,2.869,317,3.152,336,3.021,338,1.668,340,2.128,342,1.878,348,3.203,352,1.549,356,1.754,357,1.721,358,2.629,430,1.917,663,4.625,841,2.06,877,2.344,956,2.196,960,2.098,1047,2.41,1144,2.133,1312,3.867,1508,3.092,1537,6.129,1610,3.063,1869,3.545,2891,3.799,3116,10.077,3117,5.147,3122,4.786,3632,3.348,4445,6.305,5115,5.241,5116,9.103,5117,4.107,5118,7.053,5119,6.509,5120,5.646]],["t/1611",[0,0.992,6,1.194,9,2.127,22,1.928,27,1.673,28,1.351,30,1.157,35,2.683,66,1.841,69,2.408,73,1.217,83,4.169,110,1.894,116,1.912,125,1.906,131,2.083,135,1.937,143,2.417,164,2.417,185,2.127,193,1.736,195,2.379,315,2.943,316,3.854,322,4.466,349,1.183,356,1.31,357,1.285,394,4.855,425,1.894,430,2.995,658,1.644,661,2.277,663,2.43,716,4.895,717,3.857,741,2.127,818,2.247,822,2.079,823,2.226,841,1.538,956,2.515,974,1.704,1003,2.458,1031,3.421,1334,3.274,1565,3.103,1705,2.179,2306,3.914,2475,4.351,2679,2.837,2753,2.458,2851,3.103,2866,3.549,2884,8.286,3110,6.194,3117,2.705,3122,2.515,3747,3.549,4285,3.221,4306,3.221,5121,13.103,5122,7.336,5123,8.285,5124,8.923,5125,8.923,5126,7.336,5127,4.049,5128,4.784,5129,4.442,5130,4.784,5131,4.784,5132,3.707,5133,4.784]],["t/1613",[0,1.339,22,3.166,26,3.07,28,2.757,30,2.362,35,2.618,66,2.485,69,3.206,135,3.954,143,4.934,146,4.119,148,4.429,193,3.543,195,4.856,218,3.49,269,7.106,409,2.823,663,4.961,3117,5.521,3122,5.133,4973,6.868]],["t/1615",[0,1.158,6,1.942,19,1.867,22,2.736,26,2.447,28,2.197,30,1.883,35,2.087,66,2.148,69,2.555,115,2.027,122,2.52,125,3.102,135,3.152,143,3.933,146,3.284,148,3.531,174,2.73,193,2.825,195,3.871,218,3.016,230,2.384,234,4.884,269,5.665,315,2.123,316,3.698,317,3.606,329,3.794,340,2.586,409,2.25,425,3.082,430,2.33,605,5.895,663,3.954,688,3.474,1920,5.763,1941,4.835,2246,8.068,2473,5.391,3110,4.468,3117,4.401,3122,4.092,4350,7.011,4445,5.391,4973,5.475,5115,6.369,5134,7.784]],["t/1617",[0,1.338,6,1.138,18,1.931,20,0.948,22,3.164,26,3.067,28,2.754,30,2.359,35,2.616,66,2.484,69,3.202,109,1.061,115,1.841,131,0.95,135,3.95,136,2.983,143,4.929,146,4.115,148,4.425,154,2.728,159,2.638,174,1.599,193,3.54,195,4.852,211,2.191,218,3.488,232,3.207,234,2.861,267,4.802,307,1.865,315,2.66,322,2.774,405,2.151,409,2.82,432,2.618,663,4.956,716,4.425,717,6.33,772,4.929,926,2.924,974,4.15,1518,1.878,1548,2.524,2056,6.694,2061,2.304,2473,3.158,2564,3.207,2787,3.319,2790,3.207,3110,5.6,3117,5.516,3122,5.128,4921,5.354,4973,6.861,5135,8.659,5136,6.565,5137,5.785]],["t/1619",[0,1.254,6,1.798,22,2.597,26,2.266,28,2.035,30,1.743,35,1.933,66,2.039,69,2.366,125,2.872,135,2.919,143,3.642,146,3.041,148,3.27,193,2.616,195,3.585,218,2.863,234,6.203,267,5.554,269,7.194,307,4.614,315,1.966,329,3.513,349,1.783,352,1.743,356,1.973,405,3.399,409,2.084,425,2.854,661,3.431,663,3.662,717,3.789,772,3.642,852,2.881,956,2.471,1050,4.312,1157,2.928,1451,5.07,1634,3.204,1696,7.068,2056,7.698,2262,3.155,2527,3.836,2679,4.275,3110,4.138,3117,4.076,3122,3.789,3643,6.1,4389,4.92,4973,5.07,5063,5.07,5138,7.208,5139,5.585,5140,7.208,5141,6.693]],["t/1621",[0,1.512,4,3.435,22,2.132,28,2.29,30,2.589,35,3.325,66,2.771,69,4.071,73,2.064,135,3.285,137,2.651,143,4.099,174,1.917,193,2.944,195,5.323,218,2.802,294,2.365,296,3.243,301,3.545,308,2.298,315,1.491,352,1.322,390,3.401,409,2.796,413,3.307,432,3.138,450,2.664,548,2.704,658,1.878,663,4.121,697,4.472,716,2.479,841,1.757,1096,2.511,1170,3.466,1677,5.09,1708,3.09,2047,3.587,2278,3.504,2483,3.395,2527,2.909,2790,3.844,3068,4.625,3106,6.64,3110,3.138,3117,3.09,3122,4.265,3183,3.587,5089,5.075,5091,8.981,5142,5.466,5143,5.466,5144,8.112,5145,5.466,5146,5.466,5147,6.285]],["t/1623",[6,2.083,20,2.267,38,2.493,76,2.352,99,3.437,109,1.942,122,2.703,136,4.601,166,4.558,315,3.313,338,2.174,340,2.773,357,2.243,457,4.686,601,3.771,716,5.51,772,4.218,882,3.573,956,3.739,960,2.734,972,4.585,1047,3.141,1058,4.09,1074,4.686,1093,5.479,1324,4.653,1450,8.26,1677,6.844,2599,4.499,3110,6.973,3282,4.869,5148,8.348,5149,8.348,5150,8.348,5151,8.348]],["t/1625",[131,2.018,230,2.968,306,4.396,307,3.963,315,2.643,320,4.351,357,2.603,583,6.019,716,4.396,717,5.094,841,3.116,877,3.545,960,3.927,972,4.073,1038,4.274,1678,7.052,1942,4.451,2126,6.524,4240,7.052,5061,7.508,5071,7.702,5119,6.928,5152,7.702,5153,7.702]],["t/1627",[0,0.742,11,3.994,35,2.513,47,3.128,60,2.028,62,2.627,66,1.377,69,2.192,76,2.641,83,2.579,88,1.508,109,2.733,113,2.806,115,2.82,117,4.03,118,3.448,125,2.66,131,1.952,230,3.318,296,2.669,315,1.821,316,4.042,335,3.575,340,2.218,357,1.793,409,1.93,425,2.643,430,3.242,661,5.59,717,3.51,818,3.318,822,3.07,841,2.147,852,2.669,877,2.442,956,3.713,960,2.186,1031,6.702,1093,4.381,1196,4.952,1248,6.491,1334,2.449,1518,2.749,1709,3.32,2228,4.28,3106,3.575,5118,5.173,5119,4.773,5132,5.173,5154,5.65,5155,10.057,5156,5.884,5157,6.676]],["t/1629",[0,0.953,73,3.428,131,1.785,261,5.627,316,4.351,349,2.121,356,2.347,392,3.922,670,4.885,717,4.508,724,7.115,727,4.713,741,5.991,956,2.939,1537,9.295,2256,4.885,4079,4.779,5115,7.016,5117,5.497,5118,6.644,5132,6.644,5158,7.558,5159,7.962,5160,8.574]],["t/1631",[0,0.573,6,1.937,7,5.227,19,1.863,38,1.539,44,2.55,76,1.452,85,2.108,109,1.199,115,1.342,122,3.938,125,2.054,131,2.164,135,2.087,153,3.335,154,7.276,174,1.807,230,2.861,234,3.234,262,2.358,269,5.65,296,2.06,315,2.117,316,1.624,317,1.785,329,3.784,338,2.022,348,2.577,356,1.411,357,1.385,400,2.563,425,2.041,457,2.893,469,4.73,486,2.525,597,4.097,658,1.771,877,1.886,882,2.206,913,2.537,956,4.39,974,2.765,1034,2.936,1038,3.424,1074,2.893,1077,2.442,1105,5.159,1128,2.028,1144,1.716,1312,3.111,1554,3.57,1610,2.465,1709,2.563,1788,3.17,1920,4.297,2483,3.201,2794,3.823,2833,3.425,2891,3.057,2896,2.959,2906,6.928,2908,2.694,3110,2.959,3159,5.551,3162,3.685,3800,4.362,4079,5.205,4350,6.288,4445,6.469,5063,5.461,5093,4.217,5094,4.097,5095,4.217,5097,4.097,5098,5.65,5107,6.57,5108,4.786,5109,4.786,5119,3.685,5147,3.994,5161,6.843,5162,4.543,5163,3.625,5164,4.362,5165,9.652]],["t/1633",[0,0.845,1,4.395,4,2.179,6,1.895,19,1.362,35,2.037,66,2.559,73,2.606,82,4.484,110,3.008,316,2.394,343,3.505,352,3.133,381,3.364,570,2.803,619,3.391,692,2.363,818,3.801,823,4.768,1036,5.31,1334,4.896,1578,5.069,1705,4.667,1960,3.567,2262,3.325,2466,5.343,2475,6.076,2532,5.753,3252,4.234,3653,6.216,5118,7.938,5132,5.886,5154,6.429,5166,11.52]],["t/1635",[0,0.629,1,3.275,3,3.029,4,1.624,6,1.412,19,1.015,66,1.168,82,5.631,122,1.833,131,1.179,135,2.292,286,6.331,290,7.478,295,6.331,381,3.686,409,1.637,413,2.308,430,3.851,526,3.178,619,2.527,717,4.377,735,3.838,818,1.734,845,4.855,956,1.941,967,5.072,979,6.74,992,2.994,1036,2.423,1334,3.994,1393,4.5,1705,4.498,1820,3.013,1911,8.356,1923,5.96,1966,3.762,2357,6.059,2665,6.812,2683,3.811,2709,4.12,2794,4.199,3060,7.045,3061,4.5,3062,6.451,3069,3.864,3083,6.451,3159,4.048,3162,4.048,3198,7.338,3840,6.305,3842,9.596,5127,8.356,5129,9.168,5166,5.256,5167,10.887,5168,8.325,5169,7.045,5170,5.661,5171,5.661,5172,7.73]],["t/1637",[960,4.315,972,4.766,1678,8.251,5119,8.107,5153,9.012,5173,9.277]],["t/1639",[0,1.166,131,2.185,164,5.302,225,3.588,336,4.949,342,3.077,349,3.113,356,2.872,572,6.654,680,6.584,956,3.597,1677,6.584,1708,5.933,2150,7.503,2538,7.064]],["t/1641",[3,1.875,4,2.227,19,1.392,20,1.614,35,2.99,108,2.453,122,1.669,124,3.47,131,2.164,137,3.766,178,5.88,294,2.23,315,2.835,317,1.785,322,3.664,340,1.712,357,3.608,388,3.923,409,1.49,413,2.101,430,1.543,432,2.959,448,2.041,452,1.85,526,2.893,570,1.901,601,3.507,602,3.335,661,2.453,716,4.237,717,2.71,754,4.808,759,5.167,769,3.994,822,1.461,960,3.059,967,5.728,972,3.926,974,2.765,1038,2.273,1109,5.88,1157,1.527,1450,3.903,1518,2.122,1527,3.111,1569,3.006,1578,2.55,1582,3.625,1678,3.751,1794,4.217,1874,3.662,1932,3.518,2048,4.217,2056,3.269,2061,2.604,2102,2.982,2103,3.518,2126,3.47,2137,3.234,2473,3.57,2527,2.743,2599,5.602,2806,2.959,3110,5.362,3162,5.551,4164,4.097,4240,3.751,4285,3.47,5092,4.097,5103,5.461,5104,4.097,5111,3.47,5152,4.097,5153,4.097,5173,4.217,5174,4.543,5175,5.154,5176,4.217,5177,4.362,5178,4.362]],["t/1643",[0,1.4,22,2.365,28,2.541,30,2.177,35,2.414,66,2.362,69,2.955,88,2.033,135,3.645,143,4.548,174,3.156,193,3.266,195,4.477,296,3.598,306,4.083,315,2.455,316,2.836,322,3.531,550,4.732,663,4.573,716,4.083,822,3.568,1635,5.837,1677,7.184,3106,4.82,3110,5.167,3117,5.09,3122,4.732,5179,9.001,5180,9.001]],["t/1645",[0,1.414,22,2.417,28,2.596,30,2.224,35,2.466,66,2.394,69,3.019,88,2.077,135,3.724,143,4.647,193,3.338,195,4.574,315,2.508,316,2.898,322,3.608,663,4.672,716,4.172,960,3.801,1677,7.283,1678,9.255,2126,6.192,3106,4.925,3110,5.28,3117,5.2,3122,4.835,4240,6.693]],["t/1647",[0,1.3,22,2.033,28,2.184,30,1.871,35,2.074,66,2.139,69,2.54,73,1.968,116,3.093,125,3.083,135,3.133,137,3.753,143,3.909,193,2.807,195,3.848,228,2.854,316,3.268,357,3.143,425,3.063,504,5.738,663,3.93,841,2.488,960,3.831,972,3.252,1043,3.467,1047,2.911,1518,3.185,1548,4.282,1677,6.507,1678,7.547,2799,5.63,3106,4.143,3122,4.067,3720,6.547,4921,7.854,5092,6.149,5103,5.441,5137,8.485,5174,11.488,5181,7.736,5182,7.736,5183,7.736,5184,7.183]],["t/1649",[0,1.418,22,2.434,28,2.615,30,2.241,35,2.484,66,2.405,69,3.041,135,3.752,143,4.681,193,3.362,195,4.608,315,2.527,316,2.919,663,4.707,754,3.994,778,5.494,960,3.034,1527,5.592,1677,5.813,2126,6.237,2473,6.416,3106,4.961,3110,6.693,3117,5.239,3122,4.87,4973,6.516,5152,9.268]],["t/1651",[0,1.447,22,2.253,28,2.421,30,2.074,35,2.976,66,2.538,69,3.643,115,2.233,124,5.773,127,4.081,131,1.785,135,3.472,143,4.332,193,3.112,195,4.265,315,2.338,316,2.702,602,2.751,663,4.356,716,3.89,754,3.697,972,3.604,1450,6.494,1527,5.176,1572,5.001,1677,5.38,1792,5.176,1793,6.229,3106,5.943,3110,4.922,3117,4.848,3122,4.508,4973,6.031,5185,8.574]],["t/1653",[0,1.404,22,2.382,28,2.559,30,2.193,35,2.431,66,2.372,69,2.976,88,2.048,131,1.888,135,3.671,143,4.581,148,4.112,193,3.29,195,4.509,316,2.857,663,4.605,717,4.766,745,3.695,1527,5.472,1677,7.217,1881,5.879,1968,6.024,2048,10.336,3106,4.854,3117,5.126,3122,4.766,4973,6.376,5111,6.103,5136,8.417]],["t/1655",[0,1.317,1,6.1,4,3.397,22,2.084,28,2.239,30,1.918,35,2.126,66,2.175,69,2.603,88,2.381,131,2.195,135,3.211,137,3.847,143,4.007,193,2.878,195,3.944,218,3.807,316,2.499,357,2.13,390,2.788,405,3.74,409,3.799,602,2.544,663,4.029,1677,6.616,1897,5.27,2527,6.303,2536,6.006,3106,4.246,3117,4.484,3122,4.169,5147,6.144,5186,7.93,5187,7.363,5188,7.93,5189,7.93]],["t/1657",[0,1.239,22,1.852,28,1.99,30,1.704,35,1.89,66,2.3,69,3.195,73,2.476,88,1.592,115,1.835,116,2.817,127,3.354,131,2.504,135,2.854,143,3.561,193,2.557,195,3.505,308,2.962,315,2.654,316,3.067,359,3.265,601,3.184,602,2.261,658,2.422,663,3.58,704,3.774,716,4.415,718,2.902,754,3.038,818,2.982,841,2.266,1043,3.158,1063,3.705,1314,4.334,1334,3.571,1450,5.337,1527,4.254,1572,4.11,1629,3.171,1677,6.996,1792,4.254,1793,6.258,2093,5.766,2102,5.631,2129,5.337,2137,7.545,2316,3.822,2613,5.337,3106,3.774,3110,5.587,3117,3.985,3122,3.705]],["t/1659",[0,1.461,19,0.839,22,2.312,28,2.484,30,2.729,35,3.026,47,2.407,66,2.868,69,4.314,83,1.807,115,1.218,131,1.501,135,2.92,137,3.498,143,4.446,155,2.002,174,1.641,193,3.193,195,5.612,228,1.726,230,1.433,232,7.513,323,2.626,394,2.105,601,2.113,663,3.663,704,2.505,718,1.926,818,4.025,889,2.571,1334,4.821,1562,3.07,1677,6.205,1699,2.403,1793,2.626,2070,5.732,2102,5.091,2103,7.703,2262,2.047,2434,3.193,3106,6.042,3117,4.975,3122,3.791,4164,8.969,5190,6.696,5191,7.756]],["t/1661",[0,0.428,4,2.225,6,0.961,21,1.643,35,3.044,42,1.701,44,1.906,85,1.576,108,1.834,113,1.619,122,1.247,131,1.849,137,3.002,148,1.748,154,2.305,212,2.013,230,1.896,262,1.762,267,3.047,270,1.57,294,1.667,306,2.807,307,1.576,315,1.688,316,2.444,317,2.686,322,3.484,329,5.322,340,1.28,349,0.953,352,0.932,357,3.725,360,4.919,388,1.947,409,1.114,413,1.57,429,1.825,430,1.852,550,2.025,567,1.936,602,1.986,716,2.807,717,4.078,754,3.829,759,1.785,817,3.61,841,1.239,845,2.247,926,3.968,960,1.262,967,4.998,972,4.09,974,1.372,1034,2.195,1038,3.421,1077,1.825,1115,1.99,1128,1.516,1312,2.326,1678,2.804,1788,2.37,1817,3.152,1826,2.594,1874,1.817,1920,4.916,1932,2.63,2056,2.443,2061,1.947,2067,2.528,2126,4.167,2211,2.326,2294,4.919,2473,4.286,2536,4.687,2599,3.335,2790,4.353,2833,2.56,2891,2.285,2896,2.212,2906,4.591,2908,2.013,3110,3.553,3162,4.425,3231,2.63,3632,2.013,3966,4.167,4079,4.323,4350,5.98,4445,4.286,5063,2.71,5092,3.062,5093,3.152,5095,3.152,5097,3.062,5098,4.504,5103,4.353,5104,3.062,5107,3.26,5111,4.167,5118,2.985,5119,2.755,5120,3.396,5132,2.985,5147,6.01,5152,3.062,5153,3.062,5156,3.396,5161,3.396,5162,5.455,5163,2.71,5164,3.26,5173,3.152,5176,3.152,5177,3.26,5178,5.238,5192,3.577,5193,3.577,5194,3.577,5195,3.577,5196,3.577,5197,3.26,5198,3.577,5199,3.577,5200,3.577]],["t/1663",[0,1.279,6,1.59,12,3.423,20,1.325,22,1.675,26,2.004,28,1.799,30,1.541,35,1.709,66,1.871,69,2.092,72,2.158,88,1.44,108,4.317,115,1.66,131,1.327,135,2.581,146,2.689,148,4.79,225,2.179,230,1.952,267,3.138,306,4.115,323,3.578,336,3.006,338,1.66,342,1.869,346,3.062,348,3.186,353,7.645,357,1.712,358,2.615,391,3.999,430,2.715,444,2.698,468,3.631,486,3.122,550,4.769,572,4.042,602,2.045,658,2.19,661,3.034,716,2.891,717,3.351,841,2.049,852,2.548,877,2.332,956,3.944,960,2.971,990,3.351,1002,4.414,1047,2.398,1053,3.955,1144,2.122,1508,4.379,1518,2.624,1534,3.847,1579,3.999,1610,3.048,2056,4.042,2241,3.527,2299,4.235,2610,3.659,3106,3.413,3231,6.192,3234,5.618,3916,4.291,5119,4.557,5197,7.676,5201,4.938,5202,6.373,5203,6.373]],["t/1665",[6,2.016,30,1.955,41,1.734,47,2.697,66,2.202,73,2.056,83,3.122,88,1.825,218,2.341,225,2.764,227,2.925,228,2.982,267,3.979,270,3.294,304,2.647,306,3.666,336,3.812,342,2.37,394,3.636,448,3.2,550,4.249,617,2.26,658,2.777,698,5.909,699,4.673,705,6.424,710,6.424,711,5.882,712,3.362,713,6.424,714,6.332,756,3.22,758,4.753,759,3.745,900,6.952,1525,5.441,2904,5.241,3235,6.262,3638,5.241,5204,8.082,5205,8.082,5206,8.082,5207,9.036]],["t/1667",[4,2.938,19,1.362,31,4.586,32,4.018,35,2.037,36,5.418,41,1.63,43,4.234,50,4.234,53,3.621,66,1.567,69,2.494,76,2.141,80,4.043,91,2.867,122,2.46,131,1.582,404,4.467,939,3.364,940,3.275,992,6.562,1040,4.075,1108,6.507,1361,3.703,1509,5.343,1510,5.343,1511,5.186,1512,5.529,1513,7.599,1514,5.343,1519,3.551,1684,9.203,4030,9.861,5208,9.512,5209,10.245,5210,10.5,5211,10.245,5212,7.054,5213,7.054]],["t/1669",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1672",[19,1.569,103,4.021,132,5.191,182,4.422,183,3.392,302,4.073,338,2.279,358,3.592,401,3.97,443,5.191,614,4.391,617,2.447,618,5.191,684,5.948,718,3.604,852,3.499,869,6.156,921,6.492,924,5.236,1006,4.629,1077,4.147,1219,6.628,1571,6.369,1938,5.332,3016,7.161,3425,7.161,3899,6.492,3916,5.893,5214,8.752,5215,8.127,5216,8.127,5217,8.752,5218,7.407,5219,11.245,5220,6.492,5221,8.752]],["t/1674",[0,1.157,1,6.021,4,2.985,536,5.72,912,7.943,1338,7.32,1346,6.672,1884,5.346,5220,10.343,5222,8.807,5223,8.807,5224,8.515,5225,8.807]],["t/1677",[0,0.904,4,2.333,41,2.735,69,2.67,381,3.602,390,2.86,412,4.383,413,3.316,656,3.984,843,6.414,912,8.086,960,3.512,1027,8.897,1163,7.157,1164,7.057,1338,8.436,1942,4.925,3078,7.17,3121,6.033,3159,5.816,5226,12.75,5227,12.75,5228,9.955,5229,8.134,5230,8.134]],["t/1679",[0,1.365,41,2.635,69,3.308,656,4.936,912,6.389,1027,7.473,1138,7.332,1163,5.656,1164,5.576,5220,7.473,5222,8.527,5231,13.249,5232,12.282,5233,9.11,5234,8.881]],["t/1681",[41,2.719,69,2.997,153,3.922,295,5.854,297,7.727,298,5.283,299,4.985,656,4.473,912,5.79,977,7.258,979,6.233,1027,6.773,1138,6.645,1163,5.125,1164,5.053,1417,6.773,1741,7.014,3063,6.147,3121,8.57,5220,6.773,5223,7.727,5234,8.048,5235,12.674,5236,11.553,5237,10.728]],["t/1683",[0,1.333,19,1.458,35,2.181,41,2.573,109,1.892,125,3.241,170,3.645,244,2.419,349,2.012,356,2.935,361,3.349,366,6.246,407,3.316,425,3.221,533,4.866,534,6.655,535,6.884,615,3.705,742,5.104,745,4.371,807,7.953,818,2.492,912,5.158,1026,8.584,1027,6.033,1030,4.824,1036,3.481,1106,7.17,1138,5.919,1471,3.984,1600,5.816,3095,6.465,3096,6.465,3104,5.816,5220,6.033,5238,9.955,5239,7.552]],["t/1685",[0,0.788,1,4.1,4,2.032,6,1.768,19,1.27,39,2.531,41,2.096,42,1.947,45,2.365,88,1.601,91,2.674,131,2.034,316,3.079,452,3.508,619,3.163,656,3.472,741,4.343,843,5.845,912,6.196,939,3.138,977,5.633,979,4.837,993,5.157,1000,5.491,1027,5.257,1144,2.36,1157,2.894,1163,5.484,1164,5.407,1346,4.544,1409,5.997,1610,3.389,1772,3.978,1884,3.64,2247,4.771,3078,6.247,3185,4.837,4079,3.95,5047,5.367,5224,7.994,5228,6.58,5240,9.072,5241,9.77,5242,7.087,5243,7.087,5244,7.087,5245,6.58,5246,5.997,5247,5.799,5248,6.58,5249,9.77,5250,10.383,5251,7.087,5252,7.087,5253,6.247,5254,7.087,5255,7.087,5256,7.087]],["t/1687",[0,0.839,41,2.479,69,2.479,72,2.557,122,2.445,153,3.244,252,3.514,296,3.019,320,2.74,356,2.067,444,3.197,567,3.795,570,3.764,619,3.37,656,3.699,670,4.302,694,3.628,912,6.471,1027,5.601,1138,5.496,1163,4.239,1164,4.179,1228,4.151,1461,4.558,1681,5.23,1795,5.018,2250,8.128,5225,10.94,5234,6.656,5237,9.474,5240,10.73,5257,9.474,5258,9.474,5259,10.73,5260,7.012,5261,9.474,5262,9.474,5263,9.474,5264,6.656,5265,7.012,5266,8.004]],["t/1689",[0,1.508,1,3.511,4,1.74,22,1.594,25,2.915,41,2.947,141,5.135,153,2.606,296,2.426,349,1.501,352,1.468,356,1.661,361,2.498,619,2.708,658,2.085,735,2.359,843,5.239,912,7.134,950,5.495,1138,4.416,1338,6.159,1346,3.89,1681,4.203,1795,4.032,1884,3.117,3423,10.063,5220,8.848,5222,7.411,5223,7.411,5224,4.965,5225,8.695,5233,7.621,5257,8.131,5258,8.131,5259,5.634,5260,5.634,5261,8.131,5262,8.131,5263,8.131,5264,5.349,5265,5.634,5267,6.068,5268,6.068,5269,6.068,5270,11.249,5271,5.634,5272,6.068,5273,6.068,5274,6.068,5275,6.068,5276,6.068,5277,6.068]],["t/1691",[0,0.746,41,2.889,156,4.648,244,2.798,328,4.806,348,3.355,356,1.837,366,3.288,409,1.94,413,2.736,427,5.966,497,4.303,519,3.487,567,3.373,656,3.288,667,4.169,675,7.289,678,5.2,692,2.087,694,3.224,818,2.056,912,6.888,935,5.916,950,5.903,1009,4.518,1138,6.846,1461,4.051,1699,3.447,1793,3.767,1929,6.231,2338,5.082,3214,5.916,4772,6.231,5278,6.711,5279,6.711,5280,9.407,5281,6.711,5282,6.711,5283,6.711,5284,6.711,5285,6.711,5286,9.407,5287,9.407,5288,6.711,5289,6.711,5290,9.407,5291,8.292,5292,6.711,5293,6.711,5294,6.711,5295,11.772,5296,9.407,5297,6.711,5298,6.711,5299,12.395,5300,6.711]],["t/1693",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1695",[0,1.147,1,7.211,4,3.574,294,4.467,426,3.676,444,4.37,514,3.988,612,5.031,613,5.753,992,6.592,1128,4.062,1129,5.673,4240,7.512,5301,8.735,5302,6.949]],["t/1697",[87,5.403,109,2.155,338,2.412,380,4.786,612,5.684,613,6.498,658,3.184,692,2.881,836,7.382,847,5.239,852,3.703,937,8.166,1076,4.632,1518,3.815,1581,4.538,1601,7.364,1764,5.813,2201,7.84,2206,7.58,2210,5.058,3109,7.58,3418,8.166,3953,7.364,5303,5.875,5304,8.602,5305,8.166,5306,8.602,5307,6.516]],["t/1699",[0,0.922,6,2.71,19,2.171,77,4.413,87,6.334,88,1.873,89,2.916,166,4.528,294,3.589,302,3.86,356,2.27,380,4.284,464,6.087,612,4.043,613,4.622,653,4.309,658,2.85,692,3.377,735,3.224,836,4.798,1157,2.457,1182,5.151,1518,3.415,1658,4.59,1795,5.511,2611,6.592,3238,7.701,4244,6.281,5303,5.259,5308,8.517,5309,7.31,5310,6.786,5311,8.293,5312,7.701,5313,6.786,5314,8.293,5315,8.293,5316,8.293]],["t/1701",[19,1.806,20,2.095,33,3.489,39,3.598,42,3.375,45,3.363,66,2.078,76,2.839,91,3.802,109,2.344,115,2.623,467,4.774,612,4.911,613,5.615,939,4.461,1517,4.796,1520,5.175,4244,7.63,5308,7.087,5317,10.075]],["t/1703",[6,1.749,30,1.695,33,3.357,35,2.981,44,3.468,56,4.873,57,4.953,66,2.474,109,1.631,185,4.31,227,2.536,270,2.857,304,2.295,320,2.543,338,1.825,340,2.328,358,2.876,400,3.486,464,5.267,602,2.248,692,2.18,743,8.836,745,4.89,818,2.147,883,5.198,913,3.45,1036,4.757,1054,7.05,1068,2.811,1507,5.571,1544,5.734,1788,4.31,1920,5.366,2590,3.934,5163,4.929,5303,4.444,5308,4.929,5318,7.008,5319,8.205,5320,6.507,5321,11.138,5322,6.507,5323,9.537,5324,7.008,5325,7.008,5326,7.008,5327,7.008]],["t/1705",[44,5.328,88,1.849,98,2.963,174,2.871,185,3.639,230,2.508,244,3.579,315,2.233,338,2.132,400,4.072,464,5.102,612,3.99,613,4.563,658,2.813,745,5.815,818,2.508,913,4.03,1053,3.569,1054,6.828,1344,3.668,1788,6.622,1886,5.137,1920,5.959,2590,4.595,4501,9.323,4959,7.473,5303,5.191,5308,8.463,5309,7.216]],["t/1707",[0,0.947,19,1.981,37,2.964,44,4.214,76,2.4,109,2.571,131,1.773,162,4.477,181,4.131,338,2.218,349,2.106,354,5.66,356,2.331,358,3.495,452,3.058,464,4.035,481,4.59,496,4.4,658,2.927,692,2.649,745,4.504,877,3.116,911,5.141,957,5.589,1028,5.008,1518,3.507,1709,4.236,1820,4.532,1897,5.66,1926,4.852,2124,8.561,2529,5.899,5303,7.778,5308,7.772,5319,7.208,5328,8.517,5329,8.517]],["t/1709",[44,4.946,88,2.258,131,2.081,294,4.326,338,2.603,348,4.997,352,2.956,357,2.685,437,3.435,612,4.872,613,5.571,745,4.075,877,3.657,960,3.274,1128,3.933,3313,6.482,3717,7.57,4501,7.745,5308,7.031,5330,6.73,5331,9.996]],["t/1711",[0,0.503,6,2.151,19,1.545,20,1.792,30,1.095,33,1.568,35,1.214,37,1.576,38,1.352,39,3.078,41,2.085,42,3.193,44,3.479,49,2.966,53,3.434,54,6.494,66,1.778,73,1.152,77,2.409,88,1.023,109,1.053,115,1.179,119,2.56,125,1.804,174,1.588,181,2.196,185,3.125,228,1.67,230,2.154,241,2.021,242,1.666,252,3.272,308,1.903,310,2.572,315,1.235,320,1.643,339,2.229,340,2.863,345,2.186,346,2.175,349,1.12,350,3.974,356,1.239,358,2.885,359,3.994,437,1.556,464,2.145,488,2.758,496,2.339,548,4.808,562,3.598,570,1.67,602,1.453,612,3.427,613,2.523,616,2.016,617,1.966,692,2.187,702,4.412,704,2.424,743,3.599,745,1.846,749,2.089,773,1.827,852,1.81,877,1.657,990,2.38,1036,1.938,1053,1.974,1057,3.091,1142,2.971,1155,2.264,1319,2.071,1600,3.237,1602,2.841,1603,3.048,1607,8.224,1627,3.362,1637,3.705,1656,2.456,1689,3.295,2011,5.95,2278,2.903,2350,2.135,2564,3.185,2610,2.599,2623,3.185,2633,2.599,2829,1.81,2831,3.048,2834,5.906,2844,4.068,2846,4.799,2847,3.508,2848,4.068,2849,3.295,3777,2.758,4322,4.204,4323,4.204,4370,3.295,5163,3.185,5319,5.95,5320,6.528,5321,4.204,5322,4.204,5323,3.429,5332,5.753,5333,4.204,5334,3.832]],["t/1713",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1715",[0,1.227,4,3.721,20,2.296,218,3.198,390,3.882,426,3.933,448,4.372,1873,5.116,1874,5.208]],["t/1717",[11,5.2,38,3.344,73,2.211,88,1.963,92,4.885,219,5.688,278,4.626,320,3.154,349,2.15,352,2.102,401,3.943,433,5.029,598,4.811,618,5.155,664,3.628,842,5.029,870,6.735,1153,6.067,1797,8.071,2213,7.112,2437,6.735,3613,8.071,3895,6.909,5335,8.071,5336,8.899,5337,8.692,5338,8.692,5339,8.692,5340,8.071,5341,8.692,5342,7.112,5343,6.909]],["t/1719",[0,1.045,19,1.685,92,4.248,93,5.168,103,4.319,228,4.341,349,2.325,430,3.845,842,6.809,1006,4.973,1273,8.287,1344,4.213,1360,7.957,1792,5.675,1869,5.203,2166,6.097,2292,7.473,5336,10.21,5342,9.629,5343,9.354,5344,8.73]],["t/1721",[42,3.262,2175,10.463]],["t/1724",[0,0.887,30,1.93,39,2.85,66,2.184,81,3.871,196,4.45,197,4.599,349,1.974,350,3.264,356,2.184,359,3.698,548,5.879,770,4.581,842,4.617,1036,4.531,1360,6.753,1710,7.128,2114,8.203,2274,5.237,4195,5.527,4914,6.183,5336,8.415,5340,11.75,5342,6.529,5343,6.343,5344,7.41,5345,11.75,5346,10.587,5347,9.831,5348,10.587,5349,9.332,5350,11.881,5351,6.753]],["t/1726",[0,1.069,37,3.347,41,2.56,81,4.665,339,4.734,340,3.194,349,2.378,352,2.326,356,2.632,548,5.905,770,5.52,842,5.564,2274,6.311,5336,9.486,5342,7.868,5343,7.643,5347,8.929,5349,8.476,5351,8.138,5352,9.279,5353,8.929,5354,8.929]],["t/1729",[22,2.417,41,1.973,92,4.189,215,4.894,218,2.664,219,4.672,244,2.736,250,6.278,263,5.454,290,8.79,304,3.012,1153,4.505,1336,7.441,1846,6.192,1847,6.965,1848,7.31,5355,13.77,5356,12.716,5357,8.107,5358,7.126,5359,9.197,5360,9.197,5361,7.783,5362,9.197]],["t/1731",[41,2.872,215,5.493,241,4.607,291,6.859,4416,9.584,5357,9.098,5358,7.997,5363,12.463,5364,13.905,5365,10.322,5366,10.322,5367,9.584]],["t/1733",[92,3.985,229,5.305,241,4.928,598,6.111,971,5.579,2591,8.555,2593,9.733,5357,9.733,5358,8.555,5368,9.344]],["t/1735",[47,2.582,49,4.375,53,3.665,73,2.638,103,3.554,109,1.8,118,3.815,127,3.682,131,2.159,187,4.067,215,4.117,244,3.085,294,3.348,322,4.068,338,2.7,339,6.153,357,2.078,842,7.541,960,2.534,1043,3.467,1344,4.647,1566,3.79,1598,5.017,2061,6.315,2119,6.819,2166,6.725,2228,4.96,2292,6.149,5343,6.149,5349,6.819,5358,5.994,5369,6.149,5370,10.37,5371,7.183,5372,6.547,5373,7.736,5374,7.736,5375,7.736]],["t/1737",[9,4.664,19,1.881,21,4.474,92,4.543,93,5.767,103,4.82,164,5.302,241,4.683,570,3.871,661,4.994,861,6.654,930,6.886,4068,8.585,5376,11.687]],["t/1739",[35,1.753,66,1.905,69,3.032,92,3.334,110,2.589,115,1.702,122,2.117,131,1.361,193,3.352,215,4.915,233,6.524,234,5.795,235,6.851,236,4.946,237,8.141,239,7.944,240,7.557,241,2.918,242,3.94,243,3.437,244,3.185,245,8.141,246,5.197,247,5.349,248,5.197,249,7.557,250,6.304,251,8.141,252,3.043,253,5.525,254,6.218,255,4.192,256,4.146,257,7.557,258,6.995,259,4.376,260,5.795,261,7.028,262,4.225,263,5.477,264,7.816,265,5.533,266,4.24,267,3.219,268,5.066,352,2.234,1034,3.725,1038,4.074,1324,5.147,1336,5.922,1614,4.856]],["t/1741",[22,1.529,27,1.548,35,1.561,41,2.628,44,2.88,47,0.86,53,2.057,66,1.201,69,1.911,72,1.499,76,2.192,88,1,90,3.482,92,3.877,99,2.396,100,3.422,109,0.599,115,0.671,125,1.026,154,1.541,215,3.097,218,1.686,223,2.749,227,2.106,236,4.166,238,6.363,239,7.722,240,6.951,241,1.975,242,2.141,244,2.055,246,2.047,247,2.107,250,4.715,253,1.541,254,4.651,263,1.527,269,4.235,270,2.372,271,5.13,272,2.796,273,6.584,274,7.64,275,6.075,276,3.691,277,6.183,278,3.097,279,10.243,280,7.19,281,4.317,282,5.13,283,7.19,284,4.509,285,5.404,286,1.651,287,5.352,288,2.047,289,3.113,290,5.231,291,3.867,292,5.404,293,3.452,294,2.518,295,5.447,296,2.327,297,4.925,298,3.367,299,3.178,300,5.13,302,3.215,304,1.906,305,4.11,306,2.64,307,2.38,308,2.446,309,2.222,310,2.129,311,6.753,312,2.541,314,3.82,316,2.177,320,1.606,325,1.209,326,1.91,327,1.734,328,2.261,346,1.237,394,1.159,400,1.281,425,1.02,430,2.543,531,1.91,548,1.274,653,3.589,718,1.822,725,1.255,735,2.262,841,0.828,1043,2.608,1155,1.288,1157,1.311,1293,2.648,1336,4.429,1518,1.822,1681,1.784,1924,2.047,2460,1.616,3196,1.379,3802,2.107,3832,2.391,3966,1.734,4615,1.995,5064,2.27,5115,2.107,5352,3.165,5377,6.414,5378,4.11,5379,4.11,5380,4.426,5381,6.908,5382,4.509,5383,2.18,5384,6.858,5385,4.426,5386,2.107,5387,2.575,5388,1.95,5389,2.575,5390,2.575]],["t/1743",[0,0.762,19,1.97,22,1.802,41,2.549,66,1.97,76,2.691,85,2.804,92,2.475,109,1.595,218,2.766,227,3.456,236,5.114,241,4.262,244,2.039,250,6.518,269,6.95,270,3.893,271,8.417,273,9.299,274,8.653,290,5.193,302,5.53,315,1.87,338,1.785,361,3.932,388,3.464,390,2.411,457,3.849,459,3.769,616,1.966,841,3.533,1334,2.516,1336,8.51,1945,4.68,2923,5.803,3800,8.082,5377,6.366,5391,10.988,5392,6.856,5393,8.867,5394,5.313,5395,8.867]],["t/1745",[19,1.693,35,1.809,60,2.049,66,1.392,69,2.215,73,2.402,83,2.607,88,1.524,89,2.372,92,3.932,98,3.417,109,1.57,118,2.482,182,3.409,212,3.526,215,3.59,227,2.442,234,4.234,235,5.005,236,3.613,244,2.007,253,4.036,263,5.6,265,7.991,270,2.75,302,4.394,308,2.836,309,2.576,325,4.433,338,2.459,430,2.019,616,2.708,658,2.319,703,3.242,727,3.709,739,5.3,774,3.76,818,2.067,840,4.036,841,3.503,842,5.463,882,4.041,913,3.322,1034,6.206,1077,3.197,1097,5.71,1115,3.485,1153,3.305,1312,4.073,1336,6.984,1656,3.66,2212,4.326,2599,3.636,3632,3.526,3940,6.265,5253,8.323,5396,8.323,5397,9.442,5398,9.442]],["t/1747",[12,3.28,19,1.558,89,3.056,115,2.263,118,3.198,131,1.81,287,6.735,317,4.288,645,7.662,724,7.178,756,3.464,875,4.279,1681,8.578,1707,6.447,1932,5.933,1966,7.44,2198,7.356,2356,7.642,2484,6.909,3541,7.112,3840,6.583,4560,5.07,4626,6.215,5117,7.178,5399,8.071,5400,8.692,5401,8.692,5402,8.692,5403,11.5,5404,8.692,5405,8.692]],["t/1749",[66,2.129,73,2.626,236,5.527,269,7.512,328,5.273,658,3.547,956,3.538,1096,4.742,1906,5.753,2356,7.046,3550,10.547,5115,8.445,5406,12.463,5407,9.098,5408,9.584,5409,10.322]],["t/1751",[6,2.618,76,2.956,109,2.441,115,2.732,228,3.871,317,3.633,658,3.606,661,4.994,670,5.978,852,4.194,956,3.597,1681,8.718,2356,7.162,5410,8.585,5411,9.743]],["t/1753",[19,1.307,53,2.577,73,2.534,88,2.25,91,2.751,115,2.594,125,2.905,131,2.363,181,3.537,228,4.187,270,2.972,338,1.898,352,1.763,355,2.86,426,2.597,445,6.8,459,4.007,658,2.506,712,4.144,740,4.252,741,3.241,753,4.123,759,4.616,914,4.401,939,3.228,941,6.417,960,2.388,972,3.065,1047,3.749,1255,4.977,1325,5.521,1330,3.254,1527,4.401,1553,4.218,1565,4.728,1906,4.063,1966,4.845,2076,4.785,2108,5.408,2356,7.747,2599,3.929,3193,4.362,3550,8.431,4174,5.795,4186,5.408,5407,6.426,5411,6.77,5412,7.291,5413,9.251,5414,5.795,5415,6.77,5416,7.291]],["t/1755",[12,3.893,20,1.415,27,3.322,37,1.511,41,0.931,50,2.42,53,2.405,60,2.067,76,1.223,80,3.621,83,1.677,89,1.526,90,2.597,91,1.638,92,3.029,103,1.994,109,1.01,114,2.205,122,2.203,127,3.239,131,1.417,135,1.758,155,2.912,174,1.522,187,2.282,212,2.269,218,1.258,219,3.457,225,2.327,228,4.037,231,1.563,324,4.466,336,3.209,342,1.995,349,1.683,352,2.864,357,1.166,404,4.001,409,1.255,570,1.602,594,2.815,619,1.938,621,2.003,622,4.217,623,2.645,645,8.372,648,5.507,708,6.792,741,3.73,759,4.78,851,4.071,907,3.364,914,5.065,939,1.922,940,4.095,1040,3.847,1047,3.157,1135,2.963,1136,2.492,1292,4.786,1506,1.782,1508,2.096,1512,3.159,1514,3.054,1519,2.029,1699,2.23,1754,3.159,1798,2.37,1846,2.923,1906,2.42,1956,2.963,1966,5.576,2228,2.783,2356,7.47,2519,3.364,2527,2.31,3550,5.758,4030,5.408,4174,6.67,4353,8.82,5208,4.031,5212,4.031,5213,4.031,5399,4.031,5407,3.827,5413,7.791,5414,6.67,5417,4.341,5418,9.498,5419,6.804,5420,6.804,5421,6.804,5422,4.031,5423,6.318,5424,4.341,5425,4.341]],["t/1757",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1759",[109,2.401,131,2.149,185,4.588,262,4.721,425,4.087,437,3.547,438,5.332,1612,6.859,1620,5.493,1859,7.817,1982,6.411,2125,6.411,2460,6.477,2762,5.589,2908,5.394,3398,6.23]],["t/1761",[9,2.834,18,1.693,19,1.143,72,1.354,73,1.017,89,1.406,96,1.845,98,1.447,100,3.749,103,2.929,127,1.903,134,2.91,183,2.471,185,1.778,225,1.367,228,2.934,229,1.921,230,1.225,293,2.371,294,1.73,296,1.598,309,1.527,310,2.333,337,7.212,338,1.66,340,2.641,349,0.989,358,2.616,453,3.123,486,1.959,512,3.028,577,2.436,578,2.261,581,3.384,591,3.204,609,3.098,611,3.178,616,3.178,617,2.223,653,2.078,664,1.669,689,2.436,690,3.384,691,2.769,693,5.129,696,1.921,699,1.75,703,1.921,735,1.554,840,2.392,844,2.115,852,1.598,866,3.098,894,3.272,913,1.969,918,3.028,1036,1.711,1076,1.999,1157,1.889,1208,3.272,1219,3.028,1248,2.769,1293,2.392,1305,5.686,1319,1.829,1326,2.812,1451,2.812,1539,3.028,1553,2.313,1566,1.959,1572,2.332,1584,2.624,1598,2.593,1709,1.989,1803,4.38,1829,2.536,1840,2.692,1859,4.829,1970,5.068,1977,3.272,1979,3.713,1995,3.713,2111,2.509,2130,3.098,2163,3.272,2187,3.884,2192,2.91,2233,3.66,2262,1.75,2272,2.966,2300,2.593,2301,3.028,2437,3.098,2608,3.384,2662,2.536,2716,3.384,2762,2.662,2765,4.565,2869,6.73,3002,4.237,3020,2.564,3111,2.729,3160,3.272,3344,2.564,3426,3.713,3853,2.729,3916,4.293,3953,3.178,3963,2.624,3964,2.812,4068,3.272,4079,3.554,4328,4.939,4667,3.028,5087,3.028,5215,3.713,5426,3.999,5427,3.999,5428,3.999,5429,3.999,5430,3.999,5431,3.999,5432,3.525,5433,3.999,5434,3.999,5435,3.999,5436,3.999,5437,3.999,5438,3.999,5439,3.999,5440,5.92,5441,3.999,5442,3.999,5443,3.999,5444,3.525,5445,3.999,5446,3.999,5447,3.999,5448,3.999,5449,3.999,5450,3.999,5451,3.999,5452,3.713,5453,3.272,5454,3.999,5455,7.952,5456,7.952,5457,3.525,5458,3.999]],["t/1763",[0,1.254,19,1.292,47,2.406,114,3.662,185,5.015,228,2.659,302,4.6,342,2.113,344,8.834,349,1.783,356,2.706,405,3.399,433,4.17,454,4.92,562,4.709,567,4.968,602,4.081,818,2.208,826,4.571,844,5.228,1058,3.531,1133,6.338,1554,4.992,2256,4.106,2413,5.967,2662,6.268,2663,6.41,2762,5.802,2884,5.246,2971,3.567,3341,5.589,3367,4.992,3372,4.92,3644,7.486,3792,5.07,3815,5.729,5459,11.281,5460,6.353]],["t/1765",[0,1.245,73,2.211,88,1.963,109,3.043,115,3.406,122,3.625,174,3.048,302,4.045,355,3.41,567,4.369,617,2.43,818,2.663,844,4.597,956,2.98,1053,3.79,1058,4.258,1133,5.573,1615,7.356,2413,5.247,2663,5.637,2762,4.673,2971,4.301,3315,10.396,3341,4.915,3367,6.02,3644,6.583,3815,6.909,5460,7.662,5461,8.692]],["t/1767",[0,1.333,22,2.546,28,2.736,30,2.344,35,2.598,66,2.686,140,4.045,185,4.307,322,3.801,342,2.841,745,3.95,818,3.673,822,2.746,1061,6.147,1334,3.555,1713,5.268,2579,8.2,3367,6.711]],["t/1769",[0,1.365,22,2.647,28,2.844,30,2.437,35,2.702,66,2.534,99,4.148,140,4.206,185,4.479,322,3.952,342,2.954,355,3.952,745,4.107,818,3.086,822,2.856,1061,5.548,1713,4.427,3644,7.63]],["t/1771",[0,1.333,22,2.546,28,2.736,30,2.344,35,2.598,66,2.474,99,3.99,122,3.137,140,4.045,174,3.398,185,4.307,322,3.801,342,2.841,355,4.704,745,3.95,818,2.968,822,2.746,826,6.145,1061,5.417,1713,4.257,2971,4.795,3372,6.614]],["t/1773",[0,1.355,18,3.558,19,1.506,22,2.208,28,2.372,30,2.032,35,2.253,66,2.664,125,3.349,140,3.508,153,3.61,160,3.796,308,3.533,322,4.297,342,2.464,356,2.3,425,3.328,616,2.41,617,2.349,658,2.888,818,3.355,822,2.382,957,5.515,1058,4.117,1061,5.834,1334,3.083,1546,7.112,1713,4.813,2075,4.293,2762,3.508,3341,4.752,3367,5.82,3815,6.68,5462,10.954]],["t/1775",[0,0.32,6,1.215,9,1.28,18,1.219,19,1.134,22,1.662,27,2.212,28,1.374,30,3.474,37,1.694,47,0.961,66,2.415,73,0.733,88,0.65,89,1.013,98,1.042,103,1.323,109,1.133,110,1.14,117,1.738,118,1.791,119,1.628,125,1.148,127,1.371,151,3.372,152,3.323,153,2.716,157,7.326,185,3.305,212,1.505,241,1.285,294,1.246,338,1.268,340,1.617,344,2.096,349,0.712,355,1.91,356,0.788,359,1.334,386,1.291,425,1.14,426,1.026,452,1.034,488,1.755,616,1.814,617,0.805,703,1.384,818,0.882,826,1.826,867,1.653,882,1.233,974,1.026,990,1.514,1077,1.365,1115,2.515,1157,1.442,1256,1.89,1334,1.057,1555,1.755,1705,1.312,1709,1.432,1713,2.139,1792,1.738,1803,1.39,2246,2.231,2505,1.939,2762,1.202,2773,1.628,3374,3.87,3396,3.543,3465,10.521,3498,2.539,3802,2.356,3803,11.841,3813,11.418,3814,4.52,3861,2.674,3922,1.594,5463,8.899,5464,2.88,5465,9.155,5466,11.464,5467,10.514,5468,11.926,5469,11.464,5470,10.875,5471,10.096,5472,9.02,5473,7.435,5474,2.88,5475,2.88]],["t/1777",[0,0.98,19,2.235,73,2.242,89,3.099,99,3.629,102,5.784,103,5.189,104,6.302,109,2.05,131,2.83,338,2.295,342,2.584,481,4.749,602,3.624,616,2.528,861,5.589,1550,6.537,1886,5.53,1941,5.474,2755,5.738,2762,3.679,2763,9.242,2865,5.53,2886,6.387,3368,8.379,4328,5.474,5007,6.537]],["t/1779",[0,1.153,22,3.284,26,3.261,27,2.706,28,2.184,30,1.871,33,2.679,35,2.074,66,2.578,131,1.611,140,3.229,150,4.891,322,3.035,325,3.632,342,2.268,616,2.219,745,4.769,818,2.37,822,2.939,823,3.6,940,3.335,1061,5.646,1334,2.838,1519,3.616,1713,4.556,2755,5.269,2762,3.229,2815,4.713,2915,6.457,2971,3.828,3025,5.738,3276,5.63,3278,8.514,3363,5.281,3368,5.738,3376,6.819,5476,7.183]],["t/1781",[0,1.086,6,1.768,22,3.167,26,3.072,27,2.479,28,2.001,30,1.714,33,2.454,37,2.466,45,2.365,66,2.307,73,1.803,125,2.824,131,2.328,140,2.958,150,4.608,153,3.044,155,3.033,174,2.485,320,2.572,325,3.327,342,2.078,345,3.421,425,2.806,452,2.544,532,3.748,616,2.032,694,3.405,696,3.405,745,4.558,818,2.171,822,2.009,854,5.367,889,3.895,940,3.055,1156,3.358,1157,2.099,1519,3.313,1609,4.278,1709,3.525,1820,3.771,2755,4.964,2762,4.078,2765,4.068,2815,4.317,2915,6.226,3276,5.157,3278,8.138,3363,4.837,3368,5.257,3376,6.247,5476,6.58,5477,10.383]],["t/1783",[0,0.96,45,3.72,47,2.881,76,2.432,98,3.124,109,2.872,115,2.248,131,2.321,174,4.329,228,3.185,230,2.645,340,2.868,346,4.148,356,2.363,602,2.77,658,2.967,661,5.305,688,3.853,692,2.685,881,4.956,956,3.821,1058,4.229,1612,5.737,1615,7.306,2561,5.077,2755,5.663,2763,9.12,2886,4.881,3125,5.666,3367,5.979,5478,7.609,5479,7.609]],["t/1785",[76,2.773,109,2.816,187,5.173,338,2.562,346,4.728,355,3.86,390,4.256,430,2.945,447,7.375,459,5.409,661,4.684,1047,3.703,1077,4.662,1709,4.894,2988,8.328,2989,7.625,5127,10.245,5480,12.105,5481,9.84]],["t/1787",[73,2.809,88,2.494,131,2.299,430,3.305,661,5.256,1038,4.87,1803,5.33,1807,7.247,2762,4.609,2987,7.161]],["t/1789",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1791",[0,1.314,1,6.84,4,3.871,20,1.969,110,3.751,218,2.744,294,4.099,390,3.33,426,4.211,444,4.01,514,3.66,612,4.617,613,5.279,992,6.817,1129,5.207,1132,6.466,1873,4.389,1874,4.468,4240,6.894,5301,8.016,5302,6.377]],["t/1793",[87,5.651,109,2.254,380,5.006,612,4.723,613,5.4,658,3.33,692,3.014,836,7.534,847,5.479,852,3.873,1076,4.844,1581,4.747,1601,7.702,1764,6.08,2201,8.2,2206,7.928,2210,5.29,3109,7.928,3953,7.702,5303,6.145,5304,8.997,5305,8.541,5306,8.997,5307,6.815]],["t/1795",[0,0.74,3,3.703,4,2.363,6,2.623,19,0.437,30,1.35,35,1.131,37,2.316,38,1.667,39,2.376,41,1.767,42,1.159,44,3.722,45,2.749,66,2.285,72,0.825,73,1.073,76,1.189,82,1.847,88,0.55,89,0.857,91,0.92,96,1.124,98,0.882,99,1.003,109,0.567,116,0.974,131,0.507,162,1.281,185,1.083,196,1.774,197,1.833,218,3.045,227,4.096,229,1.171,244,1.255,270,3.812,304,3.207,310,0.892,320,0.884,350,1.726,352,0.589,353,1.619,380,1.259,388,2.132,390,1.962,409,1.924,413,3.812,430,1.67,450,4.773,453,1.194,464,1.999,562,1.761,602,1.354,612,3.666,619,2.97,621,1.124,692,1.312,712,4.498,716,1.105,740,1.421,743,3.354,756,1.681,770,3.82,771,4.256,818,0.746,822,2.335,841,0.784,845,1.421,939,1.079,960,0.798,1069,1.773,1096,1.119,1383,3.282,1386,1.266,1398,1.58,1519,3.851,1569,3.255,1626,5.117,1919,1.007,1945,1.663,1983,2.062,2126,1.641,2171,3.017,2235,1.99,2256,1.388,2460,1.529,2690,3.578,2733,2.352,2734,3.633,2743,2.352,2744,4.658,2908,1.273,3069,1.663,3070,8.995,3226,1.378,3503,1.773,3602,1.58,4177,1.688,4245,3.13,5007,1.807,5301,3.571,5302,2.841,5303,3.539,5323,6.694,5482,4.061,5483,8.969,5484,4.919,5485,7.783,5486,2.262,5487,6.383,5488,2.437,5489,3.918,5490,2.437,5491,2.262,5492,2.262,5493,2.437,5494,2.262,5495,2.437,5496,3.708,5497,3.99,5498,1.773,5499,1.937,5500,2.062,5501,2.437,5502,3.719,5503,2.262,5504,5.58,5505,5.865,5506,2.062,5507,6.365,5508,7.48,5509,4.219,5510,4.436,5511,2.062,5512,1.641,5513,6.154,5514,2.437,5515,2.437]],["t/1797",[0,0.662,20,1.796,27,2.083,30,1.44,35,2.99,37,2.072,44,2.946,66,2.692,76,1.678,88,1.345,118,2.19,244,1.771,304,1.95,320,3.135,340,1.978,355,2.336,366,2.917,386,2.668,464,4.816,474,3.209,602,2.771,612,4.955,614,2.104,692,2.686,743,4.732,818,1.824,822,1.687,826,3.776,974,3.077,1036,2.548,1053,2.596,1061,5.895,1125,5.039,1144,2.876,1518,2.451,1680,4.009,1705,3.935,1713,5.202,1793,3.342,2076,5.669,2350,2.808,2738,4.884,3070,6.865,3196,3.188,3414,5.528,3859,8.02,5323,8.444,5507,5.039,5508,5.039,5510,4.732,5516,8.079,5517,5.954,5518,11.15,5519,11.15,5520,5.528,5521,7.067,5522,3.776,5523,8.02,5524,3.956]],["t/1799",[0,0.566,4,1.46,6,1.27,18,2.156,19,1.662,20,1.599,30,1.232,39,1.818,41,1.092,42,1.399,45,1.699,54,2.97,66,2.131,69,3.044,75,3.02,76,1.435,85,2.083,88,1.738,196,2.14,197,2.212,231,1.833,244,2.758,270,3.136,294,2.203,304,2.52,316,1.605,320,2.792,357,2.067,381,2.255,383,2.349,413,2.076,464,2.413,474,2.744,602,1.634,612,4.519,616,1.46,636,2.762,658,1.75,662,3.641,692,2.392,693,2.036,732,2.97,906,2.424,974,2.74,1053,2.22,1129,5.096,1153,2.494,1461,3.074,1519,4.829,1619,2.994,1768,7.184,2171,3.641,2210,2.78,2449,7.184,2475,3.02,2738,6.596,2844,5.364,3005,5.961,3469,3.527,5163,5.411,5246,4.309,5302,3.428,5361,6.51,5388,5.826,5516,7.369,5525,5.092,5526,3.706,5527,7.184,5528,4.047,5529,4.488,5530,4.488,5531,5.092,5532,7.586,5533,9.271,5534,9.271,5535,10.331,5536,12.47,5537,4.309,5538,4.309,5539,8.609,5540,4.728,5541,7.693]],["t/1801",[0,0.558,3,1.363,4,1.074,19,0.381,20,1.044,22,2.415,27,2.662,28,0.6,30,0.514,33,0.736,35,1.004,37,2.859,41,1.875,42,0.584,66,1.423,69,2.498,88,0.846,115,0.554,125,0.847,131,0.443,170,0.953,182,1.074,183,0.824,196,2.543,197,2.628,218,0.616,226,2.86,227,0.769,229,1.021,241,3.397,243,1.118,244,2.052,270,1.527,304,1.227,306,0.964,310,2.524,328,1.913,342,0.623,343,0.981,346,1.021,349,0.526,355,0.834,357,1.625,358,0.872,359,0.985,361,0.875,366,1.835,380,1.098,381,0.941,390,0.747,407,0.867,409,0.615,413,2.046,420,1.739,426,0.757,439,1.395,464,3.606,474,1.146,525,1.547,612,4.675,613,2.087,660,1.32,717,3.18,732,3.528,753,1.202,759,1.735,808,1.61,822,2.157,841,0.684,842,1.23,843,1.272,849,2.375,972,2.9,974,2.155,1040,1.317,1047,1.409,1056,2.167,1061,5.075,1062,1.363,1063,5.392,1066,1.261,1077,1.007,1122,3.325,1129,2.059,1133,2.401,1144,0.708,1153,2.459,1157,1.109,1196,2.778,1266,3.99,1312,1.283,1334,0.78,1506,0.872,1518,1.542,1578,1.052,1585,1.23,1609,1.283,1616,3.162,1622,1.472,1626,2.326,1629,0.956,1656,3.281,1707,1.577,1741,1.176,1754,1.547,1772,2.102,1804,2.073,1820,1.131,1846,2.522,1847,2.836,1848,1.69,1852,1.974,1873,0.985,1874,1.003,1889,1.104,1930,1.52,1939,2.564,1958,1.799,2076,2.458,2139,1.547,2171,1.52,2233,1.22,2251,1.577,2252,1.577,2344,1.69,2350,1.766,2387,1.647,2449,6.366,2527,1.131,2725,4.852,2738,4.941,2811,4.403,2840,2.458,2844,1.23,2928,1.799,2944,1.261,3005,3.89,3106,1.138,3196,2.006,3210,1.974,3338,2.594,3358,6.146,3777,1.295,5117,1.363,5163,2.634,5302,3.38,5303,3.183,5361,3.17,5388,3.802,5414,1.69,5482,1.547,5511,4.248,5516,5.483,5524,1.413,5526,6.689,5527,7.122,5528,2.977,5530,6.081,5532,1.739,5537,8.68,5538,1.799,5542,6.05,5543,1.52,5544,7.067,5545,6.406,5546,2.126,5547,8.738,5548,2.126,5549,6.05,5550,5.02,5551,8.738,5552,4.661,5553,3.745,5554,1.799,5555,4.661,5556,1.974,5557,1.974,5558,1.974,5559,1.974,5560,2.126,5561,2.126,5562,2.126,5563,4.248,5564,2.126,5565,1.874,5566,5.02,5567,1.647,5568,3.745,5569,1.874,5570,2.778,5571,3.064,5572,1.874,5573,2.126,5574,2.126,5575,1.874,5576,2.126,5577,2.126,5578,1.69,5579,1.69,5580,2.126,5581,3.295,5582,1.874,5583,3.745]],["t/1803",[0,0.451,3,1.076,5,0.945,19,0.293,22,1.694,27,1.035,28,0.835,30,0.715,33,1.724,35,2.152,37,2.244,41,1.722,42,0.449,50,1.649,66,2.007,69,2.771,131,0.844,170,0.732,183,0.633,196,2.71,197,2.163,226,1.685,227,1.802,241,1.81,244,2.72,270,2.03,302,0.76,304,1.889,306,0.741,310,1.484,324,2.662,328,1.511,340,0.542,342,0.867,343,0.753,357,1.338,359,1.371,361,0.672,366,1.987,380,0.843,390,0.574,403,1.519,407,0.665,409,1.172,413,0.665,439,1.071,450,0.796,464,3.055,525,1.188,612,3.912,613,0.91,660,1.014,717,0.858,732,2.904,753,0.923,756,0.651,758,1.739,759,4.238,822,2.497,841,0.525,842,0.945,849,1.876,960,0.969,967,0.839,974,1.444,992,0.863,1040,1.04,1047,0.614,1061,5.789,1062,1.047,1063,5.587,1068,0.655,1077,0.773,1129,1.626,1139,1.265,1144,0.544,1153,1.449,1157,0.484,1266,3.223,1334,0.599,1506,1.214,1518,1.218,1519,1.896,1626,1.837,1629,1.331,1656,2.2,1681,1.131,1684,1.211,1685,1.336,1707,1.211,1713,0.717,1717,1.114,1718,2.607,1720,3.766,1728,1.414,1738,1.918,1741,0.903,1754,1.188,1889,0.848,1927,1.516,1939,1.511,1958,2.503,2076,1.941,2094,1.382,2105,1.167,2124,3.142,2171,1.167,2228,4.849,2233,0.937,2251,1.211,2252,2.194,2350,1.395,2449,5.86,2527,0.869,2725,1.148,2726,1.211,2728,1.439,2729,1.439,2736,0.985,2738,4.538,2740,1.167,2742,1.188,2844,0.945,2918,1.114,2928,1.382,2944,1.754,2965,2.194,2993,2.42,2994,1.336,3005,3.142,3103,1.131,3106,0.874,3338,2.049,3350,1.725,3374,1.298,3435,2.503,3465,5.276,3497,3.958,3777,2.471,4313,2.049,4346,3.008,4501,1.265,5163,2.08,5264,1.439,5302,1.991,5303,3.158,5361,2.503,5388,3.071,5414,1.298,5482,1.188,5511,3.432,5516,3.958,5522,1.035,5526,5.841,5527,5.86,5528,1.298,5529,5.684,5532,1.336,5537,7.456,5538,1.382,5543,2.115,5544,4.623,5545,5.355,5552,3.766,5554,1.382,5555,3.766,5556,1.516,5557,1.516,5558,2.746,5559,1.516,5563,6.793,5565,3.575,5571,2.42,5572,1.439,5575,4.389,5578,1.298,5579,1.298,5581,4.964,5584,4.979,5585,8.811,5586,1.211,5587,6.448,5588,7.041,5589,7.041,5590,6.448,5591,6.448,5592,1.632,5593,4.055,5594,2.746,5595,2.958,5596,1.632,5597,2.958,5598,2.958,5599,1.632,5600,2.194,5601,5.355,5602,1.439,5603,1.148,5604,2.194,5605,2.958,5606,6.448,5607,4.055,5608,4.055,5609,7.041,5610,6.448,5611,3.575,5612,1.632,5613,4.055,5614,4.055,5615,5.767,5616,5.767,5617,2.958,5618,2.958,5619,1.236,5620,1.439,5621,1.632,5622,1.632,5623,2.958,5624,2.958,5625,1.632,5626,2.958,5627,1.632,5628,1.632,5629,1.632,5630,1.632,5631,1.632,5632,1.632,5633,1.632,5634,1.632,5635,1.632,5636,1.516]],["t/1805",[0,0.845,19,1.362,30,1.837,39,2.713,42,2.088,45,2.536,66,2.391,75,4.505,76,2.141,196,3.193,197,3.3,227,2.749,270,3.097,304,2.488,320,3.718,357,2.752,466,4.871,567,3.818,602,2.437,612,4.994,692,2.363,974,2.706,1129,5.631,1519,4.789,2171,5.432,2449,5.886,2738,4.296,5302,5.115,5388,5.753,5505,10.217,5506,6.429,5510,6.038,5516,6.038,5526,5.529,5527,5.886,5532,8.382,5537,9.81,5637,7.597,5638,11.591,5639,11.591,5640,12.953,5641,7.054]],["t/1807",[0,0.665,11,3.579,19,1.072,30,1.447,39,2.136,42,1.644,45,2.893,47,1.997,66,2.305,69,2.845,75,3.548,83,3.349,88,1.351,122,2.806,186,3.358,196,2.515,197,2.598,227,4.044,341,2.488,349,1.48,394,3.899,437,4.384,602,2.781,612,4.225,614,2.114,692,1.86,712,5.307,756,2.384,758,5.097,759,2.772,771,6.59,1314,3.679,1519,4.051,1626,6.33,2168,4.895,2171,4.277,2733,4.83,2734,6.476,2743,4.83,2744,4.901,5302,4.027,5303,3.793,5323,9.366,5487,4.635,5642,8.667,5643,7.092,5644,12.757,5645,5.273,5646,5.273,5647,5.982,5648,4.53,5649,4.895]],["t/1809",[0,0.82,3,2.684,19,1.322,30,1.784,39,2.634,42,2.027,45,3.351,66,2.071,75,4.374,88,1.666,115,1.921,122,3.251,227,3.634,270,4.093,304,3.289,349,1.824,437,3.451,602,2.366,606,4.202,612,3.595,618,4.374,712,4.177,906,4.78,974,2.627,1052,4.493,1057,6.854,1157,2.185,1386,3.832,1461,4.452,1519,4.694,1710,4.966,1787,5.471,2171,5.274,2413,4.452,2685,5.471,2737,4.412,4314,5.188,5302,4.966,5305,6.501,5487,7.781,5496,6.673,5650,10.042,5651,8.498,5652,6.849,5653,12.256,5654,6.035,5655,6.849,5656,5.188,5657,6.242]],["t/1811",[0,0.766,19,1.236,20,1.433,22,1.811,30,1.667,37,3.336,38,2.059,39,4.254,41,2.056,42,3.44,44,3.411,45,2.301,47,2.301,66,2.457,73,2.438,196,2.898,197,2.994,227,2.495,270,2.81,308,2.898,320,2.502,350,3.92,548,3.411,562,2.878,653,4.98,712,2.868,771,6.153,1128,2.713,1606,3.582,1958,5.834,2733,5.342,2734,5.234,2834,5.381,2843,7.11,2844,3.989,2848,6.376,3070,5.48,3428,5.017,3469,7.632,4026,5.641,4191,6.079,5483,10.499,5484,6.077,5485,5.48,5486,6.401,5487,5.342,5658,6.894,5659,6.401,5660,6.401]],["t/1813",[36,5.74,42,2.982,216,6.958,756,4.324,1519,6.003,1699,5.575,2171,7.76,2961,8.409,5302,7.307,5303,6.882,5661,9.566]],["t/1815",[0,1.019,4,3.054,19,1.16,20,1.345,30,1.565,35,1.735,38,2.739,39,2.311,56,3.252,57,3.306,66,2.39,82,2.832,85,2.647,122,2.095,195,3.218,196,3.854,197,3.983,227,3.854,231,3.833,270,4.341,304,3.488,306,5.255,349,1.601,390,2.275,413,2.638,426,2.305,621,4.913,699,4.013,1790,4.405,1873,2.998,1874,3.052,2124,5.014,2228,4.149,2744,3.659,2840,4.247,5303,6.753,5323,6.944,5505,8.082,5507,7.76,5508,9.803,5513,5.295,5662,9.888,5663,9.169,5664,11.584,5665,12.699,5666,5.144,5667,6.471,5668,5.476]],["t/1817",[0,1.172,3,4.593,4,3.397,20,1.649,56,3.986,57,4.051,85,3.243,227,2.87,244,2.359,270,3.233,304,3.453,306,4.783,339,3.904,340,2.634,413,4.298,426,2.825,464,5.981,531,5.882,612,3.866,1053,3.458,1873,3.674,1874,3.74,1886,4.976,2076,5.204,2124,6.144,2744,4.484,3258,5.143,5303,7.511,5308,8.879,5510,6.303,5512,7.098,5666,6.303,5668,6.711,5669,6.303,5670,10.024]],["t/1819",[0,0.592,3,2.896,4,2.283,20,1.655,30,1.289,37,1.854,39,1.903,42,1.464,45,2.656,56,2.678,57,2.721,66,2.18,73,2.025,88,1.203,96,2.458,116,3.182,131,1.109,155,2.28,162,2.801,185,2.368,196,2.24,197,2.314,227,3.448,244,1.585,270,3.244,304,1.745,315,1.453,340,2.644,355,2.09,381,2.359,409,1.54,413,2.172,426,1.898,430,1.595,437,1.831,612,2.597,692,3.287,712,3.311,758,3.133,770,5.469,771,5.843,840,3.187,906,2.536,956,1.826,1040,3.35,1052,3.246,1076,3.979,1383,5.603,1873,2.469,1874,2.513,2171,3.809,2235,4.493,2733,4.436,2734,5.202,2744,3.012,2944,3.16,2945,4.509,3004,3.416,3344,3.416,4094,3.187,4104,4.696,4949,5.792,5303,3.379,5485,8.401,5487,6.167,5496,5.289,5497,6.812,5648,4.035,5655,4.947,5671,9.527,5672,5.328,5673,12.923,5674,5.328,5675,7.959,5676,9.316,5677,5.328,5678,5.328,5679,5.328]],["t/1821",[20,1.449,39,2.489,51,4.065,108,3.317,110,2.76,113,2.93,122,3.589,315,2.634,355,3.789,357,3.215,429,4.576,430,3.318,437,2.395,612,4.708,683,2.822,754,4.779,756,2.777,818,2.135,845,4.065,960,2.283,967,5.694,972,4.06,1129,5.309,1471,3.414,1656,3.78,1699,3.58,1710,4.693,1942,3.202,2171,4.984,2350,3.287,3069,4.758,3469,4.827,5303,6.125,5482,5.072,5494,6.472,5506,5.898,5513,5.703,5527,5.4,5532,5.703,5538,5.898,5641,6.472,5643,5.703,5649,5.703,5651,5.898,5657,5.898,5661,6.144,5680,6.97,5681,6.97,5682,6.97,5683,6.97,5684,5.898,5685,6.144,5686,4.52,5687,6.144,5688,5.898,5689,6.97,5690,6.97,5691,6.97,5692,6.97]],["t/1823",[20,1.381,30,1.606,33,2.299,37,2.311,39,4.185,41,1.425,47,2.216,66,2.417,113,2.792,118,2.443,196,3.925,197,4.056,212,3.471,227,2.403,270,2.707,293,3.938,333,3.237,340,2.206,352,1.606,464,3.146,548,4.621,614,2.347,653,3.45,683,2.689,686,3.491,712,2.762,771,6.053,909,4.258,1061,4.219,1692,4.833,2733,5.204,2734,5.098,2843,4.926,2844,6.249,2848,6.249,3428,4.833,3469,4.599,3777,4.046,4191,4.211,5334,5.62,5483,10.329,5484,5.854,5485,5.278,5487,5.145,5512,4.471,5543,4.748,5581,6.129,5659,6.166,5660,6.166,5693,9.338,5694,6.641,5695,6.166,5696,5.62,5697,10.88,5698,10.88,5699,6.641]],["t/1825",[19,2.139,20,1.999,39,3.434,89,3.381,109,2.237,115,2.504,176,5.805,183,3.726,293,5.703,444,4.071,612,5.817,613,6.651,644,5.182,648,8.517,688,4.292,849,6.098,1047,3.618,1502,6.311,3308,7.868,4370,8.685,5700,8.929]],["t/1827",[42,2.982,53,3.835,1040,4.809,1519,5.073,2274,7.122,5569,9.566,5701,10.852,5702,10.852,5703,10.852,5704,10.852]],["t/1829",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1832",[10,7.457,19,2.137,38,2.399,103,4.884,127,3.822,132,4.763,156,5.562,183,4.12,184,3.915,186,4.508,230,2.46,231,2.891,310,2.938,338,2.091,340,2.668,401,3.643,526,4.508,614,2.838,618,4.763,621,4.905,700,4.61,756,4.749,758,4.722,836,4.646,844,4.247,852,3.21,1006,5.623,1033,5.957,1064,6.222,1077,3.805,1276,5.407,1294,7.457,1344,3.599,1919,3.318,2305,7.158,2762,3.352,2821,6.082,3632,4.197,4328,4.988,5163,5.648,5705,6.796,5706,8.031,5707,7.457,5708,8.031]],["t/1834",[6,2.436,73,2.484,113,4.105,136,5.755,308,4.105,352,2.362,433,5.649,686,5.133,718,4.021,756,4.801,1518,5.618,2094,8.264,2105,6.982,3237,6.982,4104,8.607,5600,7.243,5709,9.764,5710,9.764]],["t/1837",[6,3.088,72,2.557,88,1.706,309,2.883,343,3.484,394,3.398,464,4.834,486,4.998,683,3.058,686,3.97,718,3.109,756,5.594,760,6.002,852,3.019,875,5.023,876,4.479,906,3.594,971,3.816,1052,4.601,1115,3.901,1156,3.578,1173,4.645,1291,3.858,1321,6.78,1344,3.384,1518,4.758,1658,4.179,1991,3.699,2105,5.4,2192,5.496,2305,5.084,2348,6.391,2856,4.479,3054,7.012,3237,5.4,3260,5.018,3418,6.656,3541,6.179,4560,5.951,5038,6.179,5600,5.601,5711,7.012,5712,7.012,5713,7.012,5714,7.552]],["t/1839",[6,3.419,72,3.512,309,2.954,349,1.913,433,6,464,3.665,486,3.79,614,2.734,683,3.133,686,4.067,718,3.185,756,5.55,760,6.149,852,4.146,875,3.809,876,4.588,971,3.909,1047,2.911,1052,4.713,1115,3.996,1134,4.906,1291,3.952,1321,5.141,1525,5.209,1579,4.854,1658,4.282,1750,5.281,2105,5.532,2232,5.63,2348,6.547,2753,3.974,2856,4.588,3237,5.532,4529,6.149,4560,4.512,5496,5.141,5600,5.738,5711,7.183,5712,7.183,5713,7.183,5715,6.819,5716,7.736,5717,7.736]],["t/1841",[0,1.085,19,1.75,45,3.259,99,4.021,131,2.033,211,4.691,228,3.602,349,2.415,352,2.362,356,2.673,357,2.623,383,4.505,409,2.823,413,3.98,595,5.133,696,4.691,756,3.891,893,7.395,1050,5.841,1321,6.489,1518,4.021,1588,5.894,1667,7.761,2828,7.566,5718,7.761]],["t/1843",[0,1.273,12,4.32,22,2.365,23,4.573,25,4.325,26,2.83,28,2.541,30,2.177,33,3.117,42,3.46,45,3.004,66,2.362,83,3.478,91,3.397,125,3.587,320,3.266,342,3.357,425,3.564,955,6.975,1517,4.284,1520,4.624,1545,6.381,1585,5.208,1586,8.332,3115,6.974,5718,9.1]],["t/1845",[0,1.455,3,4.396,22,3.329,27,2.493,28,2.769,30,2.372,66,2.492,69,3.22,135,3.972,143,4.956,144,6.437,193,3.559,195,4.878,430,2.133,453,3.491,663,4.983,756,3.908,818,4.186,1096,3.274,1334,4.432,1634,4.36,2235,3.361,2305,4.798,2944,5.817,3026,6.899,3117,5.546,3122,5.156,3435,6.031,3887,5.391,3888,5.817,5719,5.831]],["t/1847",[73,2.392,81,4.561,88,2.658,178,7.12,188,6.33,309,3.59,315,2.564,756,3.746,758,6.92,866,7.285,1279,7.285,1606,6.114,1709,4.676,1820,5.003,2111,5.9,2187,5.728,2305,6.33,2679,5.576,2944,6.979,3075,7.473,3118,6.613,3887,6.468,3888,6.979,4227,8.287]],["t/1849",[38,3.134,98,3.797,186,5.89,358,4.306,477,8.34,703,5.041,1562,6.886,3887,6.919,3888,7.465,5720,10.493,5721,10.493,5722,10.493,5723,10.493,5724,10.493]],["t/1851",[0,0.555,22,1.312,27,1.746,28,1.409,30,1.207,32,5.816,35,3.104,36,6.555,66,2.268,69,4.069,144,3.276,316,3.223,325,3.558,430,2.268,464,3.59,735,2.945,756,5.314,758,6.014,822,3.668,914,4.574,1036,4.954,1061,5.599,1063,7.587,1606,5.314,2305,6.886,2745,7.924,3118,7.193,3887,2.744,3888,6.065,5500,8.655,5725,7.924,5726,6.981]],["t/1853",[0,1.111,19,1.792,73,2.543,88,2.258,349,2.472,352,2.956,356,2.736,703,4.803,718,4.116,756,5.481,875,4.921,1050,5.98,1321,6.642,1518,4.116,1991,4.897,3237,7.147,4560,5.83,4957,9.281]],["t/1855",[0,1.208,19,1.203,22,1.763,28,1.895,66,1.384,110,2.657,131,1.397,144,4.404,153,5.057,193,2.435,218,2.725,241,2.995,340,2.229,349,2.687,356,1.837,390,2.36,409,2.72,430,3.524,602,2.153,614,2.372,621,3.096,661,4.478,665,4.648,692,2.087,699,2.937,718,3.874,756,4.691,851,4.015,956,4.036,974,2.39,1006,3.55,1163,3.767,1164,3.714,1255,4.581,1383,5.532,1555,4.089,1619,3.947,1634,2.983,2561,3.947,2690,6.964,3026,4.72,3184,7.124,3194,5.916,3226,3.795,5726,6.422,5727,9.357,5728,9.853,5729,5.334,5730,5.68,5731,5.68,5732,5.916,5733,5.916]],["t/1857",[0,0.83,6,1.862,19,1.814,20,1.551,35,2.001,97,4.732,98,2.701,115,1.943,219,5.835,230,3.519,315,2.035,316,4.057,349,1.846,356,2.043,464,5.442,614,2.637,658,2.565,661,3.552,688,3.331,754,3.217,756,4.033,778,4.426,956,3.938,1043,3.344,1471,3.656,1602,4.683,1603,6.815,2007,5.652,2246,5.782,2306,6.106,2316,4.048,2662,4.732,2663,4.84,2666,8.911,2690,4.785,2745,5.782,3344,4.785,3887,4.102,3888,4.426,4921,5.652,5137,6.106,5728,5.932,5734,6.929,5735,5.782]],["t/1859",[0,1.423,3,4.262,22,3.078,28,2.635,30,2.257,66,2.416,69,3.064,135,3.779,143,4.716,144,6.125,193,3.387,195,4.642,663,4.741,818,4.113,1334,4.297,2944,5.535,3117,5.277,3122,4.906,3887,5.13,3888,5.535,5726,6.37,5729,7.418]],["t/1861",[1,5.171,3,4.566,4,2.563,20,1.858,41,1.917,218,2.589,301,5.796,315,2.437,335,4.786,426,3.183,598,4.946,676,4.88,740,5.213,756,3.561,821,4.357,1096,4.106,1136,5.131,1155,4.468,1334,3.279,1386,6.52,1434,5.608,1553,5.171,1728,4.274,2235,4.215,3887,6.897,4313,6.19,5578,7.104,5656,9.296]],["t/1863",[244,2.315,614,2.751,756,3.102,758,4.577,875,3.832,920,6.031,921,5.774,963,5.475,1047,3.918,1291,3.976,1317,3.655,1386,6.786,2235,3.671,2305,5.241,2425,8.277,2944,8.376,3358,5.475,3887,7.764,3888,8.14,4560,4.54,5725,6.031,5726,7.108,5730,6.587,5731,6.587,5736,7.227,5737,5.566,5738,6.861,5739,7.578]],["t/1865",[0,1.125,19,1.338,22,1.961,28,2.107,66,2.088,100,4.388,116,2.983,125,2.974,144,4.898,153,3.205,193,2.708,218,2.932,339,3.674,340,2.479,390,2.624,409,2.926,425,2.955,614,3.577,621,3.443,684,3.947,741,3.317,756,4.908,851,4.464,1006,5.353,1124,2.808,1163,4.189,1164,4.13,1255,5.094,1383,5.952,1619,4.388,1634,3.317,1697,4.785,3026,5.249,3184,7.665,3879,6.578,5726,6.909,5727,8.045,5728,10.552,5729,5.932,5730,6.316,5731,6.316,5732,6.578,5740,7.463,5741,7.463,5742,7.463,5743,6.929,5744,6.578]],["t/1867",[0,1.357,6,1.606,12,3.448,19,1.154,20,2.208,22,2.79,23,3.271,25,3.093,26,2.024,27,2.252,28,2.579,30,2.21,33,2.229,42,2.51,45,3.049,66,2.384,73,1.638,88,1.454,91,2.43,108,3.064,144,4.225,155,2.755,193,2.336,244,1.915,320,2.336,325,3.023,342,2.679,349,2.627,352,2.795,356,1.762,405,3.037,464,3.05,602,2.066,661,3.064,699,3.999,740,3.755,756,2.565,877,2.356,955,3.922,956,2.207,1003,3.307,1517,3.064,1520,3.307,1545,5.092,1553,3.725,1585,3.725,1586,6.649,1634,2.862,1709,3.202,2235,4.309,2263,3.253,2264,3.202,3115,4.988,3223,4.685,5718,5.117,5726,4.395,5727,7.262,5733,10.758,5745,9.136,5746,6.438]],["t/1869",[0,1.309,3,3.111,12,2.216,19,1.052,20,1.778,21,2.503,22,2.247,28,1.657,30,1.42,38,1.754,66,1.764,69,1.927,73,1.494,88,2.278,99,2.417,131,2.1,143,2.967,144,3.853,155,2.513,185,2.61,186,3.296,193,2.131,195,2.92,218,2.477,219,2.983,228,3.154,316,3.491,349,1.452,352,1.42,356,1.607,405,2.769,409,1.697,430,1.757,464,2.782,469,3.577,474,4.608,687,3.901,692,1.826,718,2.417,756,3.407,818,3.393,841,1.888,867,3.37,1034,5.745,1050,3.512,1105,3.901,1144,2.847,1163,3.296,1164,3.249,1334,3.137,1508,2.834,1562,3.853,1610,4.089,1614,3.087,1634,2.61,2304,4.804,2390,6.327,2490,4.129,2666,3.853,2944,3.482,3026,4.129,3111,4.008,3117,3.32,3118,6.014,3173,4.804,3223,6.222,3887,4.7,3888,3.482,4017,5.451,5164,7.236,5725,4.549,5726,4.008,5727,4.667,5733,5.175,5743,5.451,5747,5.175,5748,5.451,5749,5.871]],["t/1871",[0,1.069,6,2.399,19,1.724,88,2.172,116,3.844,125,3.832,131,2.485,228,3.548,315,2.622,349,2.378,356,2.632,357,2.583,425,3.808,430,2.878,464,5.654,661,4.577,756,3.832,956,3.297,1144,3.202,1610,4.598,1635,7.74,2679,5.703,5735,9.247]],["t/1873",[0,1.304,3,3.789,22,2.736,28,2.197,30,1.883,66,2.421,69,2.555,131,1.621,135,3.152,143,3.933,144,5.108,185,3.46,193,2.825,195,3.871,218,3.016,340,2.586,357,2.798,409,3.01,464,3.688,663,3.954,756,3.102,818,3.838,1334,3.82,1634,4.629,1635,6.753,2944,4.616,3026,7.324,3117,4.401,3118,5.475,3122,4.092,3184,5.895,3887,4.278,3888,4.616,5726,8.01,5727,6.187,5728,6.187,5729,9.327,5735,6.031]],["t/1875",[0,1.084,3,2.98,19,1.468,22,2.152,28,1.563,30,1.339,66,1.69,69,1.818,97,3.511,98,2.004,113,3.443,115,1.442,143,2.798,144,3.634,193,2.009,195,2.754,218,2.373,219,2.813,230,2.509,315,1.51,316,4.114,357,2.2,390,3.427,409,3.323,430,1.657,464,2.624,661,2.636,688,2.471,754,2.387,756,3.884,818,3.3,900,4.306,937,4.881,956,1.898,1043,2.481,1096,2.544,1334,3.005,1383,3.256,1471,2.713,1603,5.514,1619,3.256,1634,3.641,1635,5.312,2007,4.193,2235,2.612,2246,4.29,2666,8.842,2944,3.284,3026,5.761,3117,3.131,3118,7.576,3887,4.502,3888,4.857,4921,4.193,5137,4.531,5500,4.686,5726,7.847,5729,6.51,5730,4.686,5731,4.686,5732,4.881,5734,5.142,5735,9.648]],["t/1877",[165,6.034,185,5.433,230,3.744,464,5.791,875,4.921,1144,4.396,1610,6.314,1635,7.926,1864,7.414,4560,5.83,5728,9.715,5735,9.47]],["t/1879",[696,5.497,1157,3.389,1880,6.205,3235,8.865,3236,9.682,3237,8.18]],["t/1881",[320,3.872,381,4.724,383,4.922,433,6.173,444,4.517,514,4.122,664,5.307,694,5.126,821,5.201,974,3.8,1991,6.228,2765,6.125]],["t/1883",[0,1.342,20,1.713,22,3.367,23,4.186,26,2.591,27,2.882,28,2.326,30,1.993,66,2.231,69,2.705,98,2.982,109,2.516,127,3.922,144,5.408,146,3.476,148,3.738,185,3.663,187,4.332,193,2.99,226,4.694,227,4.368,229,5.195,338,2.146,683,4.379,707,5.225,712,3.428,756,4.309,882,3.526,1054,5.225,2744,4.659,2961,6.384,4245,6.112,5750,10.813,5751,8.24,5752,6.973,5753,6.384]],["t/1885",[21,3.279,35,2.77,83,2.971,131,1.601,357,3.676,401,3.488,430,3.893,457,4.316,464,3.643,676,4.198,683,3.114,754,4.453,756,4.647,841,2.472,849,4.876,960,3.383,967,5.991,972,4.342,1047,2.893,1291,3.928,1317,3.61,1518,3.166,1942,3.532,2305,5.177,3227,8.741,3887,5.677,3888,6.125,4988,6.507,5648,5.823,5725,8.003,5754,7.14,5755,5.958,5756,7.14,5757,6.778,5758,6.112,5759,5.823,5760,6.507,5761,7.14]],["t/1887",[0,1.142,3,2.208,4,2.947,6,1.514,19,1.088,20,1.262,22,1.594,35,3.199,66,1.252,69,1.992,72,2.055,76,1.71,83,2.344,109,1.412,131,1.263,144,3.982,153,2.606,236,4.689,244,1.805,262,2.776,309,3.343,320,2.202,328,3.1,340,2.016,357,3.205,359,2.812,381,2.687,409,1.754,426,2.161,427,3.848,430,3.835,452,2.179,526,3.406,567,3.05,664,2.533,735,2.359,745,2.474,772,3.066,773,3.535,875,2.987,974,2.161,1049,6.828,1091,4.416,1115,3.135,1144,2.02,1155,3.034,1157,1.797,1317,2.849,1334,2.226,1525,5.896,1578,3.003,1873,2.812,1874,2.862,1880,3.291,2120,4.203,2247,4.085,2425,4.823,2475,3.599,2806,3.483,3096,4.823,3248,7.719,3270,5.634,3995,5.135,4560,3.539,5384,5.349,5737,4.339,5762,9.057,5763,4.595,5764,6.068,5765,6.068,5766,6.068,5767,8.757,5768,6.068,5769,6.068,5770,7.719]],["t/1889",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1892",[19,1.947,72,2.808,83,3.204,88,1.873,164,4.191,225,2.836,228,4.006,309,3.166,317,2.872,336,3.912,342,2.432,352,2.006,394,3.731,437,2.85,608,5.744,609,6.426,610,8.414,611,6.592,617,3.385,621,3.826,658,2.85,664,3.462,691,5.744,698,6.01,699,4.753,716,3.762,752,4.309,772,4.191,874,8.414,1062,5.317,1096,3.81,1518,3.415,2271,6.592,2272,6.152,2437,6.426,2766,5.93,3638,5.379,4253,7.701,5771,8.293,5772,8.293]],["t/1894",[73,2.41,88,2.139,401,4.297,610,7.339,617,2.648,618,5.618,658,3.255,683,3.836,686,4.98,692,3.677,698,5.242,699,4.146,738,4.866,971,5.974,974,3.374,1291,4.839,1518,4.868,1640,5.041,1641,5.207,1642,7.026,1968,6.295,2300,6.143,2856,5.618,5773,8.349,5774,6.073,5775,9.472]],["t/1896",[6,2.455,72,3.332,316,3.101,317,3.407,361,4.052,401,4.464,595,5.173,602,3.157,606,5.606,692,3.06,821,4.797,971,4.972,1291,6.184,1658,5.446,1968,6.539,1975,9.38,2856,5.836,4098,9.38,5715,8.674,5776,9.84,5777,9.137]],["t/1898",[47,3.502,113,4.411,148,4.76,306,4.76,317,3.633,349,2.595,356,2.872,550,6.617,551,7.38,716,4.76,756,4.181,772,5.302,842,6.071,1049,6.973,1505,7.064]],["t/1901",[9,3.233,18,2.003,19,0.848,20,0.983,47,1.579,49,1.996,72,3,83,2.81,88,1.643,109,1.101,113,1.989,115,1.894,153,2.032,219,2.403,228,1.745,230,2.714,231,1.703,242,1.74,309,1.806,315,1.29,316,1.491,317,3.068,394,3.987,437,3.418,551,6.996,594,3.068,602,1.518,605,3.583,617,2.781,621,5.622,664,4.152,684,2.502,698,6.917,699,5.47,702,2.968,704,2.533,705,3.76,732,2.759,738,5.514,740,2.759,752,3.779,754,2.039,755,2.353,756,2.898,841,1.521,842,2.737,847,2.675,852,1.891,874,3.665,900,2.487,908,3.583,971,2.39,1047,1.78,1049,4.833,1052,2.882,1053,2.063,1054,4.612,1062,4.663,1075,4.612,1100,2.909,1245,3.443,1344,2.12,1505,5.966,1518,1.948,1634,2.103,1646,2.173,1759,2.805,1793,2.655,1881,3.068,1902,5.951,2111,2.968,2197,6.232,2666,3.105,3260,3.144,3341,2.675,3344,3.033,4028,5.781,5403,4.392,5744,4.17,5778,4.392,5779,4.73,5780,5.951,5781,4.392,5782,4.003,5783,4.73,5784,6.753,5785,4.17,5786,4.17,5787,4.73,5788,4.17,5789,4.003,5790,4.73,5791,4.003,5792,4.003,5793,4.17,5794,4.73,5795,4.73,5796,4.392]],["t/1903",[4,1.285,6,1.74,19,1.25,20,2.009,38,2.886,39,2.49,49,3.611,73,1.14,88,1.575,96,2.067,99,1.844,102,2.94,109,1.042,113,1.883,115,2.229,116,1.791,154,2.68,166,2.446,231,1.613,252,2.085,315,3.023,340,1.488,344,3.26,350,2.852,352,1.083,362,6.796,396,2.446,405,3.289,430,2.562,444,1.896,457,3.914,562,2.911,592,3.26,594,5.552,602,3.557,617,1.949,621,2.067,664,1.87,692,3.256,698,7.638,699,6.04,738,2.301,754,1.931,756,1.785,841,1.44,882,1.917,889,2.462,956,4.215,974,1.596,1068,4.642,1082,4.422,1096,2.058,1155,2.24,1696,3.203,1772,2.514,1773,3.665,1863,3.791,1941,2.782,2241,2.479,2247,3.016,2316,2.43,3313,6.789,3315,3.561,4013,3.665,4014,3.791,4239,3.471,5782,3.791,5786,3.948,5797,9.772,5798,6.146,5799,4.159,5800,3.791,5801,4.479,5802,4.479,5803,6.474,5804,4.479,5805,3.948,5806,4.159]],["t/1905",[19,1.413,45,4.377,75,4.674,127,3.751,148,3.575,165,4.757,225,2.695,336,3.717,342,2.311,349,2.597,352,3.172,355,3.091,396,6.447,405,3.717,437,4.635,602,2.528,698,4.362,699,3.449,707,4.998,741,3.503,877,2.883,926,5.053,956,2.702,1076,5.249,1082,4.998,1565,7.657,1569,4.596,1571,5.735,2256,4.489,2438,5.379,4306,5.306,5778,7.317,5807,7.317,5808,7.881,5809,7.317,5810,6.669,5811,7.317]],["t/1907",[0,0.701,9,2.805,19,1.131,33,2.185,37,3.134,42,3.147,45,4.203,47,2.106,66,1.302,91,3.399,113,4.814,148,4.764,228,2.328,244,2.679,262,5.239,316,2.838,325,2.963,346,4.327,349,1.561,352,3.135,356,1.727,430,1.889,437,3.609,698,3.492,699,2.762,707,7.986,716,2.862,752,3.278,765,4.37,772,3.188,867,3.622,930,4.141,939,3.988,940,2.72,1040,4.428,1155,3.155,1517,3.003,1520,3.241,1606,4.679,1960,2.963,2235,2.976,2236,3.881,2262,2.762,2975,4.889,4013,7.369,5812,4.092,5813,5.859,5814,6.31,5815,6.44,5816,6.31,5817,6.31,5818,8.362]],["t/1909",[6,1.176,9,2.095,19,1.3,20,0.98,30,2.737,35,1.264,39,3.157,42,1.993,45,3.313,66,2.629,73,2.879,82,2.063,88,1.064,91,2.737,115,1.227,153,2.024,185,2.095,196,1.981,197,2.047,228,1.739,236,3.884,244,1.402,267,4.352,306,2.138,308,3.049,316,1.485,320,1.71,323,2.646,350,3.615,352,3.083,359,4.096,396,2.573,430,2.171,550,2.478,661,3.452,664,1.967,698,5.494,699,4.345,702,2.957,716,2.138,772,2.381,867,5.075,907,3.652,909,3.022,939,3.211,956,3.403,974,1.679,1031,5.186,1036,2.017,1040,1.657,1096,2.165,1334,1.729,1471,3.553,1517,2.243,1527,2.845,1713,2.071,1738,4.703,1881,3.056,2111,2.957,2235,3.42,2236,2.899,2247,3.173,2516,2.795,3129,3.315,3228,8.116,3230,2.989,4013,3.856,4014,3.989,4289,5.379,4919,3.652,5798,6.393,5800,3.989,5813,4.376,5818,4.376,5819,4.713,5820,8.84,5821,7.89,5822,8.75,5823,7.252,5824,4.713,5825,3.856,5826,7.252,5827,8.84,5828,4.154]],["t/1911",[47,3.31,73,2.523,88,2.24,115,2.582,308,4.169,309,3.786,317,3.434,394,4.462,615,4.518,658,3.408,692,3.084,698,5.489,699,4.341,716,4.499,738,6.248,772,5.011,886,8.742,891,6.509,905,7.091,906,4.72,1889,5.153,5829,8.393]],["t/1913",[0,0.476,19,1.491,20,0.89,22,2.693,26,3.222,28,1.209,30,1.036,41,2.023,42,2.286,45,2.776,47,1.429,56,3.383,57,2.188,66,1.945,89,1.506,91,1.616,113,1.8,115,1.115,146,4.323,147,4.316,148,4.649,227,2.436,230,1.312,236,3.605,242,3.06,244,2.002,262,1.959,267,3.314,270,1.746,304,1.403,308,1.8,309,1.635,349,1.059,352,2.012,356,1.172,430,2.489,452,1.538,457,2.404,550,2.251,698,2.37,699,1.874,707,5.979,712,4.263,716,3.773,718,1.763,719,7.14,720,3.318,722,3.504,738,4.272,739,2.404,740,2.498,752,3.498,754,1.846,765,2.966,772,3.401,881,2.458,889,2.354,891,2.811,906,2.038,940,1.846,953,3.624,956,1.468,960,2.205,971,2.164,974,1.525,1040,2.367,1061,3.041,1066,5.591,1067,2.883,1092,4.662,1124,1.611,1517,2.038,1518,2.772,1527,2.585,1699,2.2,1709,2.13,1889,2.225,1921,6.251,2235,4.834,2414,3.404,2610,2.458,2744,2.422,2915,3.478,3125,2.811,3228,5.098,3230,2.716,4289,3.177,5019,3.117,5020,3.177,5782,3.624,5815,3.062,5821,5.351,5829,3.624,5830,3.243,5831,10.103,5832,3.976,5833,3.976,5834,8.317,5835,4.283,5836,6.732,5837,6.732,5838,4.283,5839,6.732,5840,4.283,5841,4.283,5842,4.283,5843,4.283,5844,3.062,5845,3.318]],["t/1915",[19,1.625,20,1.885,30,2.782,66,2.606,72,3.07,109,2.109,122,2.935,227,3.281,236,4.854,270,3.695,362,8.089,602,2.908,712,3.771,721,6.188,960,2.969,972,3.811,1047,3.411,2247,6.103,2538,6.103,5782,7.672,5831,8.417,5832,8.417,5833,8.417,5846,6.724,5847,9.141,5848,9.141,5849,6.865,5850,7.206,5851,9.065]],["t/1917",[20,2.146,127,4.913,163,7.997,617,2.886,698,5.712,699,4.518,741,4.588,842,7.211,1518,4.25,1537,6.949,1602,6.477,1639,7.149,1640,5.493,1889,5.363,2435,9.584,2765,5.925,3898,8.204]],["t/1919",[0,0.597,19,1.436,20,1.117,22,2.105,26,2.518,28,1.517,30,1.299,41,2.054,42,2.631,45,3.196,47,2.673,66,2.189,91,2.028,98,2.899,113,2.259,115,1.399,146,3.379,148,3.633,227,1.945,230,1.646,236,4.289,241,2.398,242,1.977,262,2.458,270,2.19,304,1.76,316,1.693,317,1.86,327,5.392,349,2.368,352,2.567,356,1.471,452,2.875,617,1.502,670,3.061,699,4.191,707,6.072,712,3.983,714,4.75,716,2.437,741,2.388,753,3.038,755,2.672,759,2.489,765,3.721,772,2.715,842,4.634,940,2.316,956,1.842,1040,2.816,1077,2.546,1157,1.592,1517,2.557,1527,3.243,1537,3.617,1638,3.445,1709,2.672,1788,3.305,1884,2.76,2235,3.777,2610,3.084,2840,3.526,3190,4.989,3228,6.065,3230,3.407,3625,4.271,4289,3.985,5020,3.985,5159,7.437,5785,4.736,5815,3.842,5821,6.366,5830,4.069,5844,3.842,5845,4.163,5852,11.052,5853,4.989,5854,4.989,5855,4.989,5856,10.613,5857,10.613,5858,5.373,5859,5.373]],["t/1921",[19,1.602,20,1.858,30,2.757,66,2.589,72,3.026,109,2.079,122,2.894,227,3.235,236,4.786,270,3.643,362,8.016,602,2.867,712,3.718,714,5.3,721,6.101,960,2.927,972,3.757,1047,3.363,2247,6.017,2538,6.017,5785,7.878,5846,6.629,5847,9.059,5848,9.059,5849,6.769,5850,7.104,5852,8.299,5853,8.299,5854,8.299,5855,8.299,5860,8.937]],["t/1923",[20,2.229,77,4.328,83,3.143,88,1.837,127,3.871,163,6.302,174,2.852,211,3.908,309,3.105,316,3.379,394,3.66,433,4.706,437,2.795,606,4.634,615,3.705,616,2.333,617,3.353,618,4.824,682,5.476,683,3.294,692,3.334,698,6.638,699,5.249,752,4.226,772,5.418,821,3.965,849,5.158,1451,5.721,1537,5.476,1602,5.104,1699,4.178,2765,4.669,2856,4.824,3339,9.074,3711,5.275,4098,8.308,5686,5.275,5861,6.655,5862,7.552]],["t/1925",[0,0.411,19,1.352,20,0.768,22,2.278,26,1.882,27,2.093,28,1.043,30,0.894,41,2.737,42,2.072,45,2.517,47,1.233,49,2.524,66,1.788,83,1.428,88,0.835,91,1.394,106,2.369,113,1.553,146,2.524,148,2.715,153,1.587,227,1.337,228,1.363,230,1.132,236,3.204,241,2.671,242,4.364,259,4.83,262,1.69,267,1.819,270,1.506,302,3.51,304,1.21,309,1.411,310,1.352,315,2.057,316,1.164,317,3.53,320,1.341,325,1.735,349,1.48,352,1.824,356,1.012,368,2.798,372,3.127,386,1.656,392,3.45,394,1.663,400,1.838,437,2.057,452,1.327,486,1.81,536,2.031,617,1.673,664,1.542,683,2.423,701,2.741,705,2.937,707,4.782,708,2.642,709,4.896,710,2.937,711,2.689,712,3.606,713,2.937,714,3.549,715,5.275,716,2.715,717,1.943,718,2.464,719,5.711,720,2.863,721,2.522,722,3.023,723,6.891,724,2.369,725,1.801,726,3.127,727,3.289,728,3.023,729,3.431,730,3.127,731,3.431,732,3.49,733,3.023,734,3.127,735,1.436,736,2.863,737,3.431,738,3.074,739,2.074,740,2.155,741,1.643,742,4.732,743,2.937,744,3.257,745,1.506,746,3.127,747,3.431,748,2.191,749,1.705,750,7.002,751,3.431,752,1.92,753,2.089,754,1.593,755,2.976,756,2.385,757,3.431,758,2.173,759,1.712,760,4.757,761,3.257,762,3.023,763,3.257,764,2.689,765,2.559,772,1.867,940,1.593,956,1.267,1040,2.104,1124,1.39,1517,1.759,1527,2.23,1556,2.937,1709,1.838,2235,2.822,2610,2.121,2996,2.863,3228,4.532,3230,2.343,4098,2.863,4289,2.741,5020,2.741,5815,2.642,5821,4.757,5830,2.798,5844,2.642,5845,2.863,5863,8.986]],["t/1927",[0,0.644,19,1.517,20,1.204,22,1.522,26,1.821,28,1.635,30,1.4,42,2.326,45,3.339,47,1.933,66,2.27,69,4.014,72,2.866,113,2.434,146,2.443,148,2.627,227,3.063,230,1.774,236,3.101,262,2.649,309,2.211,349,1.432,352,2.42,356,1.585,437,1.99,452,2.079,617,1.619,664,2.417,707,6.344,710,6.728,711,4.214,712,5.087,713,4.603,714,7.252,716,2.627,765,4.01,772,2.926,822,3.119,874,6.558,940,2.496,956,1.985,966,4.561,1040,2.976,1061,4.972,1063,6.807,1119,5.311,1517,2.756,1527,3.495,1709,2.88,2075,4.324,2610,3.324,3230,3.672,5020,4.295,5408,5.377,5798,5.104,5815,4.14,5830,4.385,5844,4.14,5846,6.278,5864,10.004,5865,6.926,5866,4.738,5867,4.738]],["t/1929",[19,1.602,20,1.858,30,2.757,66,2.589,72,3.026,109,2.079,122,2.894,227,3.235,236,4.786,270,3.643,362,8.016,602,2.867,705,7.104,710,7.104,711,6.504,712,3.718,713,7.104,714,5.3,721,6.101,960,2.927,972,3.757,1047,3.363,2247,6.017,2538,6.017,5822,7.878,5846,6.629,5847,9.059,5848,9.059,5849,6.769,5850,7.104,5863,7.878]],["t/1931",[20,2.078,163,7.745,231,3.598,309,3.816,433,5.783,452,3.589,617,3.417,683,4.048,686,5.255,698,6.764,699,5.349,756,3.983,1049,6.642,1157,2.961,1344,4.479,1793,5.611,1889,5.193,2165,7.414,5868,9.996]],["t/1933",[0,0.528,3,1.728,19,1.308,20,0.987,22,2.334,26,2.293,27,1.661,28,1.34,30,1.148,41,1.905,42,2.441,45,2.964,47,1.585,49,3.077,66,2.056,69,1.559,88,1.072,91,1.792,106,3.044,113,1.996,115,1.236,146,3.077,148,4.029,227,2.64,230,1.455,236,3.906,241,2.119,242,3.666,244,2.17,262,2.172,267,2.338,270,1.936,304,1.555,308,3.066,309,2.785,310,1.737,315,1.295,317,1.644,349,1.804,352,2.148,356,1.3,390,1.669,409,1.373,430,1.421,452,1.705,550,2.496,683,1.923,686,2.496,688,2.119,707,5.632,712,4.722,716,3.309,718,3.003,719,6.726,720,5.652,721,3.241,722,3.885,752,3.79,756,3.539,758,4.289,760,5.798,761,4.185,762,3.885,763,4.185,764,3.456,765,3.289,772,2.399,940,2.047,956,1.628,974,1.691,1040,2.564,1049,3.155,1124,2.745,1317,2.229,1515,3.197,1517,2.26,1518,3.657,1527,2.866,1709,2.362,1886,2.979,1889,2.467,1950,3.596,2235,3.44,2610,2.726,2744,2.685,2996,3.679,3228,5.524,3230,3.011,3282,2.769,4289,3.522,5020,3.522,5502,4.185,5737,3.395,5752,4.018,5753,3.679,5762,6.429,5789,4.018,5815,3.395,5821,5.798,5830,3.596,5844,3.395,5845,3.679,5869,10.54,5870,4.748]],["t/1935",[0,0.783,19,1.745,20,1.465,22,1.852,26,2.216,28,1.99,30,1.704,42,2.674,45,3.721,47,2.352,66,2.3,69,3.66,72,2.386,113,2.962,146,2.973,148,3.197,227,2.551,230,2.159,236,3.774,262,3.224,349,1.743,352,2.696,356,1.929,452,2.53,707,7.07,712,4.638,716,3.197,756,2.808,765,4.881,772,3.561,822,1.997,940,3.038,956,2.416,966,3.798,1040,3.422,1061,4.397,1063,5.117,1119,4.422,1517,3.354,1527,4.254,1709,3.505,2075,3.6,2610,4.046,2766,5.039,3230,4.469,5020,5.227,5752,8.237,5753,5.46,5799,6.544,5815,5.039,5830,5.337,5844,5.039,5846,5.227,5871,11.149,5872,7.047]],["t/1937",[19,1.625,20,1.885,30,2.782,66,2.606,72,3.07,109,2.109,122,2.935,227,3.281,236,4.854,270,3.695,362,8.089,602,2.908,712,3.771,721,6.188,960,2.969,972,3.811,1047,3.411,2247,6.103,2538,6.103,5752,7.672,5753,7.024,5789,7.672,5846,6.724,5847,9.141,5848,9.141,5849,6.865,5850,7.206,5869,8.417,5873,9.065]],["t/1939",[19,1.764,93,5.409,148,4.464,309,3.757,310,3.6,443,5.836,452,3.533,606,5.606,614,3.478,664,5.053,704,5.269,716,4.464,852,3.934,1077,4.662,1157,2.915,1282,7.452,1602,6.175,1942,4.52,3341,5.564,4421,8.328,5874,9.137,5875,8.674,5876,9.84]],["t/1941",[0,0.725,19,1.802,20,1.685,22,2.13,26,2.548,28,1.162,30,0.995,38,1.949,41,2.295,42,2.227,45,2.705,47,1.374,66,1.902,72,1.394,88,2.083,91,1.553,96,1.899,98,2.933,113,1.73,115,1.699,122,2.624,146,3.419,148,4.183,227,1.489,230,1.261,236,3.493,241,1.837,242,2.982,244,1.224,262,1.883,267,3.212,270,1.678,304,1.348,306,3.676,308,3.407,309,2.491,349,1.018,352,1.96,356,1.127,409,1.19,437,2.242,452,1.478,551,4.589,614,2.864,664,2.723,703,1.977,707,5.14,712,4.45,714,3.869,715,5.75,716,2.959,718,2.686,719,4.941,720,5.055,752,5.223,753,2.327,765,2.85,769,3.189,772,3.296,822,2.297,940,1.774,956,1.411,960,1.348,1040,2.294,1047,1.549,1049,2.735,1517,1.959,1527,2.484,1548,2.278,1709,2.047,1717,2.809,1728,3.12,2033,2.531,2235,3.077,2527,3.472,2610,2.363,3228,4.941,3230,2.61,3341,2.327,3638,4.231,4289,3.053,5020,3.053,5207,5.521,5780,3.367,5792,3.483,5815,2.943,5821,5.185,5830,3.117,5844,2.943,5845,3.189,5865,3.367,5866,3.367,5867,3.367,5874,3.821,5875,5.75,5877,9.932,5878,4.116,5879,9.335,5880,3.628,5881,3.628,5882,3.628,5883,4.116,5884,9.222,5885,6.524,5886,3.628,5887,4.116,5888,4.116,5889,4.116]],["t/1943",[0,0.815,19,1.793,20,1.525,22,1.927,26,2.306,28,2.07,30,1.774,42,2.748,45,3.799,47,2.447,66,2.348,69,2.407,72,2.483,113,3.083,146,3.093,148,3.326,227,2.654,230,2.246,236,3.927,262,3.354,349,1.814,352,2.753,356,2.007,452,2.633,707,7.219,712,4.161,714,5.932,716,3.326,765,5.079,772,3.705,940,3.161,956,2.514,966,3.952,1040,3.517,1119,4.601,1517,3.49,1527,4.426,1709,3.647,2075,3.746,2610,4.21,3230,4.65,5020,5.439,5800,6.206,5815,5.243,5830,5.553,5844,5.243,5846,5.439,5865,8.184,5866,6,5867,6,5890,10.569,5891,6.464]],["t/1945",[19,1.602,20,1.858,30,2.757,66,2.589,72,3.026,109,2.079,122,2.894,227,3.235,236,4.786,270,3.643,362,8.016,602,2.867,712,3.718,714,5.3,721,6.101,960,2.927,972,3.757,1047,3.363,2247,6.017,2538,6.017,5792,7.564,5846,6.629,5847,9.059,5848,9.059,5849,6.769,5850,7.104,5865,7.313,5866,7.313,5867,7.313,5877,8.299,5892,8.937]],["t/1947",[11,4.835,20,1.68,26,2.541,38,2.414,47,2.697,60,2.455,62,3.18,84,4.224,110,3.2,146,3.409,148,3.666,218,2.341,267,3.979,296,3.231,310,2.957,342,2.37,381,3.579,415,4.793,444,3.421,514,3.122,602,2.593,617,2.985,621,3.729,664,4.457,692,2.513,698,6.617,699,5.233,707,5.125,738,4.151,756,3.22,842,4.676,1047,3.041,1075,5.125,1525,5.441,1609,4.878,1734,5.182,2509,4.301,2510,4.676,2511,4.835,2512,5.779,5780,6.613,5791,6.84,5793,9.411,5893,10.676]],["t/1949",[6,2.755,89,3.882,430,3.305,551,9.125,594,7.161,698,6.111,699,4.833,1505,8.735]],["t/1951",[19,1.131,22,1.658,26,1.984,28,1.781,30,1.526,41,2.253,42,1.734,45,3.006,47,2.106,49,2.662,66,2.166,69,3.976,113,2.652,146,2.662,148,2.862,227,3.801,230,1.933,244,1.877,262,2.886,270,2.572,304,2.067,315,2.864,317,2.185,352,1.526,394,4.052,707,5.711,712,5.392,714,6.228,717,3.317,718,4.324,719,6.82,822,2.976,940,2.72,1040,3.166,1057,4.307,1061,5.174,1063,6.621,1505,4.248,1517,3.003,1518,2.598,1527,3.809,1537,4.248,2744,3.568,2765,3.622,4313,4.37,5796,5.859,5815,4.512,5879,8.362,5894,5.562,5895,9.006,5896,6.31,5897,6.31,5898,6.31,5899,6.31,5900,6.31,5901,6.31,5902,6.31]],["t/1953",[22,2.382,26,2.85,28,2.559,30,2.193,33,3.139,66,2.606,69,2.976,72,3.07,146,3.824,148,4.112,227,3.281,352,2.193,707,7.293,712,4.784,714,6.821,956,3.108,966,4.885,1119,5.688,2075,4.631,3230,5.749,5800,7.672,5846,6.724,5865,9.41,5866,7.418,5867,7.418,5890,8.417,5891,7.991,5894,7.991,5903,7.672]],["t/1955",[6,1.907,19,1.844,20,2.138,38,3.072,49,3.224,73,1.944,83,2.953,88,1.726,98,2.766,115,1.99,116,3.055,118,2.812,127,3.638,228,2.82,230,2.341,244,2.273,304,2.503,315,2.084,437,2.627,664,3.19,698,7.184,699,5.681,712,4.837,714,4.533,752,3.971,756,3.045,876,4.533,877,2.796,896,5.293,960,3.369,1047,3.871,1548,4.23,1717,5.217,2011,6.468,3282,5.999,5502,6.737,5780,9.513,5788,6.737,5789,6.468,5791,6.468,5792,6.468,5904,7.643,5905,6.254]],["t/1957",[110,4.411,357,2.992,437,4.482,698,6.165,699,4.875,877,4.075,1565,7.224,4306,7.499]],["t/1959",[1068,4.507,3051,9.51,5781,10.434,5784,10.434,5786,9.905,5788,9.905,5791,9.51,5793,9.905]],["t/1961",[20,1.533,30,2.429,42,2.759,45,3.351,66,2.528,73,1.876,83,2.85,88,1.666,115,1.921,227,2.669,267,3.631,270,3.007,294,3.192,352,3.2,357,1.981,396,6.692,437,4.212,606,4.202,705,5.863,710,5.863,711,5.368,712,3.068,713,5.863,714,4.374,741,3.279,836,5.81,877,2.699,940,4.329,956,3.914,1334,2.706,1386,5.217,1565,4.783,1569,5.857,1571,7.308,1572,4.302,4192,6.035,5811,9.324,5815,7.18,5863,8.851,5906,7.376]],["t/1963",[6,2.554,19,1.835,20,2.128,39,3.656,42,2.813,45,3.417,91,4.68,350,4.187,359,4.744,562,4.274,698,5.666,699,4.481,939,5.491,2197,7.201,4289,7.594,5822,9.024,5907,10.238]],["t/1965",[26,3.07,60,2.966,62,3.842,146,4.119,148,4.429,155,4.179,218,2.829,267,4.807,342,2.863,381,4.324,415,5.791,452,3.506,467,4.626,514,3.773,694,4.691,698,5.404,699,4.274,707,6.192,1156,4.626,1157,2.892,1734,6.261,2509,5.196,2510,5.649,2511,5.841,2512,6.982]],["t/1967",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/1969",[0,0.81,4,2.091,20,2.071,37,2.537,80,5.302,84,3.81,88,1.647,89,2.563,136,4.203,211,3.503,225,3.881,336,4.699,342,3.328,349,1.803,358,2.992,375,4.324,377,4.063,379,4.442,390,3.503,396,3.981,404,5.859,406,6.751,431,6.674,565,4.442,570,2.69,580,4.362,676,3.981,694,3.503,696,3.503,852,2.914,1003,3.745,1050,4.362,1156,3.454,1216,5.521,1226,3.486,1256,4.785,1298,4.529,1470,6.251,1525,4.909,1699,3.745,1829,4.623,2386,5.649,2509,5.302,2610,4.185,2668,5.128,3020,4.674,4782,8.782,5603,5.128,5908,7.291,5909,6.77,5910,5.521]],["t/1971",[0,1.157,20,2.163,168,5.682,169,5.644,170,4.663,225,3.559,394,4.682,396,5.682,397,6.172,406,5.759,408,6.12,411,7.441,424,7.103,448,4.121,622,5.23,863,6.915,938,6.915]],["t/1973",[0,1.001,4,2.581,12,3.397,37,3.984,89,4.025,99,3.706,124,6.06,125,3.587,131,1.874,168,4.914,169,4.882,211,4.325,231,3.24,358,3.694,411,6.436,425,3.564,429,4.265,434,5.017,550,4.732,567,4.524,601,4.066,889,4.948,1293,5.385,1772,5.053,1870,5.907,1991,4.409,2025,4.388,2753,4.624,3185,6.144,3401,6.144,3905,6.234,4363,7.617,5911,7.934,5912,7.617]],["t/1977",[22,2.955,25,4.205,26,3.536,28,2.471,30,2.117,31,5.283,32,5.948,33,3.03,34,5.383,35,3.015,36,6.936,43,4.878,50,4.878,66,2.563,122,2.834,146,3.692,939,3.875,1330,3.906,1361,6.057,1509,7.91,1510,6.156,1511,5.974,1512,6.369,1513,8.341,1514,6.156,3687,6.628,5913,8.127]],["t/1979",[22,3.146,23,3.113,25,4.963,26,3.765,28,1.73,30,1.482,33,3.053,35,2.77,42,2.423,53,4.647,66,2.47,89,2.154,99,2.523,115,2.942,122,3.345,146,3.72,148,2.779,278,4.692,307,3.606,316,1.931,357,1.646,392,2.803,735,3.428,864,6.354,939,3.904,940,5.376,943,4.64,955,3.732,1361,4.298,1517,2.916,1519,2.864,1520,3.147,1521,3.573,1522,3.698,1523,5.062,1588,5.323,1589,4.545,1590,4.87,1591,4.64,1592,4.545,1594,5.323,1595,4.459,1596,6.202,1597,4.381,1605,6.305,1941,5.477,2325,6.482,2460,3.844,3182,4.87,3687,4.64,5913,5.689]],["t/1981",[20,1.885,37,3.155,73,2.306,76,2.554,89,3.187,109,2.109,115,2.361,131,2.395,155,3.88,168,4.95,169,4.917,174,4.033,181,4.397,187,4.766,230,2.777,338,2.361,357,2.435,411,6.482,434,5.052,443,5.376,444,3.838,445,6.188,621,4.182,877,3.317,1144,3.018,1506,4.72,1548,5.017,2003,6.865,2414,7.206,4980,7.418,4984,7.672,5914,7.672]],["t/1983",[0,0.953,20,2.307,37,2.984,88,1.937,89,3.015,136,4.682,225,4.208,336,5.234,342,3.608,349,2.121,390,3.902,396,4.681,431,7.236,565,5.224,570,3.163,580,5.13,696,4.12,852,3.428,1003,4.404,1050,5.13,1156,4.062,1216,6.494,1256,5.627,1298,5.326,1470,6.964,1699,4.404,1829,5.437,2509,5.906,2610,4.922,3020,5.497,5910,6.494]],["t/1985",[0,1.157,20,2.163,168,5.682,169,5.644,170,5.612,225,3.559,381,4.608,394,4.682,396,5.682,397,6.172,408,6.12,424,7.103,622,5.23,863,6.915,938,6.915,1226,4.976]],["t/1987",[0,1.001,4,2.581,12,3.397,37,3.984,89,4.025,99,3.706,124,6.06,125,3.587,131,1.874,168,4.914,169,4.882,211,4.325,231,3.24,358,3.694,425,3.564,429,4.265,434,5.017,550,4.732,567,4.524,601,4.066,889,4.948,1226,4.304,1293,5.385,1772,5.053,1870,5.907,1991,4.409,2025,4.388,2753,4.624,3185,6.144,3401,6.144,3905,6.234,4363,7.617,5911,7.934,5912,7.617]],["t/1991",[35,2.269,36,4.474,41,2.36,42,2.325,43,4.715,50,4.715,53,4.95,115,3.183,278,5.854,307,3.46,316,2.666,357,2.273,392,3.87,735,4.276,864,7.519,943,6.407,955,5.154,1330,3.776,1519,5.715,1588,5.106,1591,6.407,1594,6.641,1597,6.049,1941,6.833,2325,5.308,2460,5.308,2605,5.552,2606,5.775]],["t/1993",[20,1.885,37,3.155,73,2.306,76,2.554,89,3.187,109,2.109,115,2.361,131,2.395,155,3.88,168,4.95,169,4.917,174,4.033,181,4.397,187,4.766,230,2.777,338,2.361,357,2.435,434,5.052,443,5.376,444,3.838,445,6.188,621,4.182,877,3.317,1144,3.018,1226,4.335,1506,4.72,1548,5.017,2003,6.865,2414,7.206,4980,7.418,4984,7.672,5914,7.672]],["t/1995",[4,2.717,36,5.01,39,3.383,41,2.032,42,3.542,43,5.279,45,3.161,46,6.217,73,2.41,76,2.669,80,5.041,85,3.874,109,2.751,115,2.466,310,3.466,338,2.466,955,5.771,1519,6.309,1588,5.718,2159,7.174,2605,7.759,2606,6.466]],["t/1998",[41,2.477,142,7.171,216,7.402,752,5.998,5915,11.545]],["t/2000",[41,2.39,142,6.919,752,5.787,1728,5.327,2235,6.15,5916,9.818,5917,11.139,5918,11.139]],["t/2002",[41,2.454,142,7.106,752,5.944,1728,5.471,3069,7.809,5916,10.084]],["t/2004",[41,2.674,142,7.741,752,5.363,1088,6.477,1728,5.96,3175,10.14,3178,9.098,3186,9.584,3192,9.07,5916,10.986,5919,10.322]],["t/2006",[0,0.953,20,2.307,37,2.984,88,1.937,89,3.015,136,4.682,225,4.208,336,5.234,342,3.608,349,2.121,390,3.902,396,4.681,431,7.236,565,5.224,570,3.163,580,5.13,696,4.12,852,3.428,1003,4.404,1050,5.13,1156,4.062,1216,6.494,1256,5.627,1298,5.326,1470,6.964,1699,4.404,1829,5.437,2509,5.906,2610,4.922,3020,5.497,5910,6.494]],["t/2008",[0,1.147,20,2.146,168,5.635,169,5.598,170,5.585,225,3.53,382,6.774,383,4.762,394,4.644,396,5.635,397,6.121,408,6.07,424,7.046,622,5.188,863,6.859,938,6.859,1226,4.936]],["t/2010",[0,0.994,4,2.563,12,3.373,37,3.966,89,4.007,99,3.68,124,6.017,125,3.561,131,1.861,168,4.88,169,4.848,211,4.294,231,3.217,358,3.668,382,5.866,425,3.539,429,4.235,434,4.981,550,4.699,567,4.492,601,4.038,889,4.913,1226,4.274,1293,5.347,1772,5.017,1870,5.866,1991,4.378,2025,4.357,2753,4.591,3185,6.101,3401,6.101,3905,6.19,4363,7.564,5911,7.878,5912,7.564]],["t/2014",[35,2.269,36,4.474,41,2.36,42,2.325,43,4.715,50,4.715,53,4.95,115,3.183,278,5.854,307,3.46,316,2.666,357,2.273,392,3.87,735,4.276,864,7.519,943,6.407,955,5.154,1330,3.776,1519,5.715,1588,5.106,1591,6.407,1594,6.641,1597,6.049,1941,6.833,2325,5.308,2460,5.308,2605,5.552,2606,5.775]],["t/2016",[20,1.871,37,3.132,73,2.29,76,2.536,89,3.165,109,2.094,115,2.344,131,2.384,155,3.852,168,4.914,169,4.882,174,4.015,181,4.366,187,4.732,230,2.757,338,2.344,357,2.418,382,5.907,434,5.017,443,5.338,444,3.811,445,6.144,621,4.153,877,3.293,1144,2.997,1226,4.304,1506,4.698,1548,4.982,2003,6.817,2414,7.154,4980,7.365,4984,7.617,5914,7.617]],["t/2018",[4,2.717,36,5.01,39,3.383,41,2.032,42,3.542,43,5.279,45,3.161,46,6.217,73,2.41,76,2.669,80,5.041,85,3.874,109,2.751,115,2.466,310,3.466,338,2.466,955,5.771,1519,6.309,1588,5.718,2159,7.174,2605,7.759,2606,6.466]],["t/2021",[41,2.5,53,4.118,1713,5.881]],["t/2023",[41,2.728,53,4.494,131,1.915,162,4.835,242,4.27,310,3.365,328,4.698,430,2.753,741,4.088,940,5.758,1043,4.121,1099,5.364,1170,5.832,1605,6.576,1728,4.398,1741,5.09,1798,5.021,2228,7.441,2535,7.31,2624,7.525,3258,5.964,3966,6.192,5920,9.197,5921,8.54]],["t/2025",[41,2.5,53,4.118,281,8.642,5922,10.27]],["t/2027",[41,2.5,53,4.118,2274,8.785]],["t/2029",[41,2.5,53,4.118,325,5.47,5923,10.818]],["t/2031",[41,2.5,53,4.118,259,6.342]],["t/2033",[27,3.524,41,2.635,53,4.34,125,4.015,137,4.887,138,6.082,242,3.707,302,4.689,332,7.63,536,5.538,708,7.204,709,8.244,718,4.148,742,6.322,745,5.006,746,8.527,1133,6.46,5924,10.075]],["t/2035",[39,3.686,41,2.674,53,4.405,127,4.913,242,3.797,548,5.107,591,5.188,653,5.363,1602,6.477,2244,6.411,2844,7.211,4191,6.546,4193,11.572,4836,6.411]],["t/2037",[41,2.919,42,2.663,53,4.809,54,6.994,1607,11.515,2235,5.655,3428,8.726,3469,9.424,4264,8.997,4266,8.997,4267,8.997]],["t/2039",[41,2.872,53,4.732,1040,3.629,3469,9.273,5925,7.512,5926,9.744,5927,9.584,5928,9.098,5929,9.584,5930,9.098]],["t/2041",[53,4.007,464,5.372,673,6.613,875,5.582,4934,9.595,4959,7.043,5931,9.595]],["t/2043",[41,2.477,53,4.08,281,8.564,5932,13.315]],["t/2045",[41,2.477,53,4.08,281,8.564,282,10.176,5933,10.72]],["t/2047",[41,2.328,53,3.835,125,4.324,181,5.264,242,3.993,587,8.626,741,4.824,759,5.028,4082,8.05,5371,10.077,5922,9.566,5933,10.077]],["t/2049",[41,2.5,2274,7.647,5351,9.86,5934,11.651]],["t/2051",[41,2.5,2596,9.86,2597,10.818,5935,10.818]],["t/2053",[41,2.477,53,4.08,281,8.564,5936,13.315]],["t/2055",[25,3.985,26,2.608,41,2.756,53,4.54,103,3.81,125,3.305,137,4.023,138,5.006,281,9.53,320,3.01,622,6.457,753,7.264,754,5.22,974,2.954,1077,3.929,1096,3.81,1292,5.833,1361,4.043,1547,4.59,1589,8.055,2521,7.31,5579,6.592,5937,10.86,5938,10.86,5939,7.701,5940,8.293,5941,8.293,5942,8.293]],["t/2057",[41,2.843,82,3.939,242,4.632,322,3.531,401,5.194,530,6.234,580,6.849,587,7.154,623,5.484,782,8.492,960,2.948,1409,7.617,2078,5.981,3121,6.677,5579,7.154,5943,11.449,5944,12.59,5945,11.449,5946,7.154,5947,6.06,5948,11.449,5949,11.449]],["t/2059",[41,2.5,53,4.118,216,7.47,5950,11.651]],["t/2061",[12,4.131,19,1.962,53,3.868,127,5.21,343,5.05,346,5.259,622,5.501,1518,4.507,3777,6.669,4326,8.956,5951,10.946]],["t/2063",[0,1.186,3,3.882,4,3.646,20,2.218,53,3.771,381,4.724,426,3.8,619,4.762,967,5.481,1873,4.944,1874,5.032,5952,10.669,5953,9.907]],["t/2065",[0,1.12,4,3.522,20,2.095,36,5.329,41,2.635,53,3.561,316,3.175,413,5.006,426,3.589,448,3.989,1728,4.818,1873,4.668,1874,4.752,4385,6.46,5954,12.282,5955,9.355,5956,10.075]],["t/2067",[0,1.227,4,3.721,20,2.296,218,3.198,409,3.192,412,5.95,426,3.933,1873,5.116,1874,5.208]],["t/2069",[41,2.5,1144,3.879,5524,7.742,5957,10.818]],["t/2071",[41,2.454,216,7.335,1040,4.022,1144,3.809,5233,8.486,5524,7.603]],["t/2073",[41,2.432,162,5.961,216,7.27,1040,3.986,1144,3.775,1930,8.107,5233,8.41]],["t/2075",[41,2.477,1040,4.059,1144,3.844,5926,8.402,5958,9.177]],["t/2077",[0,1.166,4,3.009,19,1.881,20,2.181,218,3.039,409,3.033,412,5.654,676,5.729,696,5.041,1144,3.494,1326,7.38,1609,6.334,1873,4.862,1884,5.39,1939,5.36,2378,6.654]],["t/2079",[41,2.454,216,7.335,1040,4.022,5233,8.486,5524,7.603,5959,9.361]],["t/2081",[41,2.432,162,5.961,216,7.27,1040,3.986,1930,8.107,5233,8.41,5959,9.277]],["t/2083",[41,2.5,1040,4.096,5959,9.533,5960,11.651]],["t/2085",[42,3.231,5812,7.626,5961,11.759]],["t/2087",[42,3.061,4868,6.724,5812,7.224,5962,10.343,5963,6.786,5964,7.945,5965,6.786,5966,6.786]],["t/2090",[41,2.454,81,5.55,770,6.568,5352,8.18,5353,10.623,5358,8.865]],["t/2092",[41,2.454,2274,7.508,5351,9.682,5352,8.18,5354,10.623,5358,8.865]],["t/2094",[41,2.411,81,5.451,770,6.451,1360,9.51,5345,10.434,5352,8.035,5358,8.707,5967,11.238]],["t/2096",[20,1.94,39,3.333,42,3.219,45,4.273,71,5.856,99,3.843,131,2.666,136,3.937,320,3.387,346,4.484,349,2.308,352,2.833,356,2.555,357,2.507,570,3.443,606,5.317,938,6.202,960,3.057,1610,5.601,1869,5.165,2175,10.325,5686,6.052,5968,9.333]],["t/2098",[0,1.12,3,4.469,4,3.522,20,2.095,41,2.635,409,2.913,426,3.589,1873,4.668,1874,4.752,2495,7.473,3166,8.782,4385,6.46,5352,7.204,5382,7.807,5969,9.355,5970,9.516]],["t/2100",[6,2.64,53,3.739,92,3.819,183,4.1,244,3.147,1154,5.666,1319,4.84,5352,7.565,5372,8.954,5383,8.954,5971,8.657,5972,7.7,5973,10.58,5974,10.58,5975,9.824]],["t/2103",[41,2.5,1627,5.572,2829,4.658,2846,7.953]],["t/2105",[41,2.477,1627,5.521,2846,7.881,2886,6.528,5976,11.545]],["t/2107",[41,2.454,1627,5.471,2760,6.518,2846,7.809,2886,6.469,5977,11.441]],["t/2109",[41,2.5,1627,5.572,3594,7.237,3878,10.27]],["t/2111",[41,2.477,1627,5.521,2760,6.577,3878,10.176,5978,11.545]],["t/2113",[41,2.477,1627,5.521,5979,10.72,5980,10.72,5981,11.545]],["t/2115",[41,2.5,1627,5.572,2755,5.919,2845,8.479]],["t/2117",[41,2.769,1627,6.172,2235,5.163,2760,7.353,2845,9.394,5982,10.164,5983,10.164]],["t/2119",[41,2.5,1627,5.572,2746,9.261,2755,5.919]],["t/2121",[41,2.769,1627,6.172,2235,5.163,2746,10.26,2760,7.353,5982,10.164,5983,10.164]],["t/2123",[41,2.454,1627,5.471,2829,4.573,2846,7.809,2886,6.469,5984,11.441]],["t/2125",[41,2.5,1627,5.572,3926,10.27,5985,10.27]],["t/2127",[41,2.477,1627,5.521,3810,9.446,5985,10.176,5986,10.72]],["t/2129",[41,2.477,1627,5.521,2760,6.577,5986,10.72,5987,10.72]],["t/2132",[35,3.319,41,2.655,62,4.015,131,2.577,244,3.681,296,3.019,366,6.672,386,3.384,409,3.578,522,6.87,718,3.109,742,7.766,977,6.002,989,5.23,992,3.994,1009,5.084,1025,7.012,1026,8.333,1027,9.18,1030,7.34,1036,5.297,1153,3.699,2566,7.727,5250,7.012]],["t/2134",[41,2.454,366,5.604,1026,7.703,1098,10.623,1103,10.084,1104,10.623]],["t/2136",[41,2.27,366,6.629,386,4.741,741,4.703,845,6.171,989,8.761,996,8.41,1026,7.123,1099,6.171,1128,4.163,5988,10.58,5989,10.58]],["t/2138",[259,5.52,712,4.847,1026,7.844,1111,10.27]],["t/2140",[41,2.432,366,5.554,1026,7.634,3095,9.012,3104,8.107,5238,10.528,5990,11.338]],["t/2142",[41,2.432,259,5.372,1026,7.634,3096,9.012,4385,7.27,5991,10.528,5992,10.528]],["t/2144",[3,3.756,6,2.575,41,2.674,83,3.988,366,6.105,390,3.629,452,3.706,619,4.607,680,6.477,1026,8.391,1153,5.056,5239,9.584,5992,9.584,5993,10.322,5994,9.584]],["t/2147",[41,2.454,307,4.679,602,3.67,2669,6.051,3196,6.126,5995,10.623]],["t/2149",[41,2.39,70,6.394,218,3.227,777,6.851,822,3.696,950,8.183,2669,5.891]],["t/2151",[2669,6.22,4145,8.145,5996,9.622]],["t/2153",[41,2.5,272,5.598,2669,6.162,5997,10.818]],["t/2155",[41,2.5,272,5.598,2669,6.162,5998,10.27]],["t/2158",[56,5.501,57,5.592,227,3.962,270,4.462,304,3.585,306,4.966,2124,8.481,2744,6.189,5308,7.699,5666,8.701,5670,9.264]],["t/2160",[244,3.373,304,3.713,3258,7.353,5308,7.975,5510,9.012,5669,9.012,5670,9.595]],["t/2162",[5308,8.271,5668,9.952,5670,9.952]],["t/2165",[41,2.661,44,6.137,162,6.52,218,2.966,409,3.585,818,3.799,2751,7.754,2915,7.164,5999,10.932,6000,9.506]],["t/2167",[37,2.777,38,2.383,41,3.045,78,4.617,242,2.936,355,3.13,447,6.45,822,3.001,823,4.927,1038,3.52,2627,6.987,2751,10.251,2915,5.469,5999,11.155,6000,12.228,6001,7.98,6002,7.98,6003,7.98,6004,7.98,6005,7.034,6006,7.98,6007,7.98,6008,7.98,6009,7.98,6010,7.98,6011,7.98,6012,7.98,6013,7.98]],["t/2169",[0,1.227,4,3.721,20,2.296,390,3.882,409,3.192,413,4.501,426,3.933,1873,5.116,1874,5.208]],["t/2171",[22,2.332,37,3.949,41,2.434,217,8.416,310,3.247,322,3.481,333,6.991,683,5.338,686,4.666,771,4.585,1383,6.672,1519,4.148,1630,7.275,1631,6.788,2840,5.824,6014,7.262,6015,8.241,6016,7.823,6017,9.284,6018,10.001]],["t/2173",[0,1.227,4,3.721,20,2.296,218,3.198,413,4.501,426,3.933,619,4.928,1873,5.116,1874,5.208]],["t/2175",[0,0.723,6,2.296,12,2.455,13,3.891,15,5.322,18,2.754,20,2.22,37,3.203,38,1.943,39,3.286,42,2.934,45,2.171,49,2.744,73,2.341,88,2.078,99,2.678,116,2.6,136,2.744,262,2.975,301,5.968,349,1.609,352,2.808,356,1.781,452,2.335,570,3.395,617,1.818,699,2.847,867,3.734,990,3.419,1040,4.082,1053,2.836,1077,3.082,1157,1.927,1330,5.468,1634,2.891,1874,3.068,1886,4.081,2159,4.926,2223,7.04,2241,3.6,2650,6.697,2681,5.367,2721,4.727,3269,4.959,4094,3.891,4520,5.733,4915,5.322,5543,4.651,5581,4.269,5755,7.13,5862,6.039,6019,6.504,6020,5.322,6021,4.379,6022,5.324,6023,8.111,6024,4.322]],["t/2177",[41,2.5,6020,9.533,6025,7.742,6026,11.651]],["t/2179",[41,2.454,818,3.505,2721,5.877,6020,9.361,6027,6.126,6028,9.361]],["t/2182",[19,1.477,20,1.713,41,2.32,42,2.971,44,4.077,49,3.476,88,1.861,115,2.146,125,3.283,270,3.359,304,3.542,315,2.247,320,2.99,346,3.959,616,3.101,617,3.023,749,3.801,852,3.294,1053,3.593,1057,5.624,1068,3.304,1155,4.119,1778,5.547,2278,5.283,2610,4.73,2623,5.795,2725,7.606,2831,5.547,2834,7.813,2844,6.256,2848,4.767,2849,5.996,3313,5.344,6029,7.651,6030,6.384,6031,6.24]],["t/2184",[41,2.501,42,3.204,48,7.84,49,3.908,83,3.579,174,3.249,270,3.776,304,3.819,315,2.527,437,3.184,841,2.979,1068,3.715,1778,6.237,2725,8.201,2831,6.237,2834,7.908,2844,6.746,2849,6.742,3313,6.008,6030,7.178,6031,7.016,6032,8.602]],["t/2186",[0,1.069,1,5.564,4,2.758,35,2.579,41,2.56,42,2.642,69,3.157,216,6.165,315,2.622,447,5.858,617,2.688,821,5.817,1155,4.808,1609,5.805,1884,6.13,2725,6.764,2834,7.285,2844,5.564,2848,5.564,4068,7.868,6033,8.929,6034,9.616]],["t/2188",[0,1.069,1,5.564,4,2.758,35,2.579,41,2.56,42,2.642,69,3.157,216,6.165,315,2.622,447,5.858,617,2.688,821,5.817,1155,4.808,1609,5.805,1884,6.13,2725,6.764,2834,7.285,2844,5.564,2848,5.564,4068,7.868,6033,8.929,6035,9.616]],["t/2191",[186,6.092,218,3.144,464,6.085,756,5.117,2944,7.616,3887,7.059,3888,7.616]],["t/2193",[186,5.89,218,3.039,464,5.964,756,5.016,2235,5.936,2944,7.465,3887,6.919,3888,7.465,5578,10.005]],["t/2195",[186,6.253,1386,6.775,2944,7.734,3887,7.168,3888,7.734]],["t/2197",[186,6.04,1386,6.639,2235,6.026,2944,7.578,3887,7.023,3888,7.578,5578,10.156]],["t/2199",[1,5.099,3,4.536,4,2.528,20,1.832,41,1.891,218,2.553,301,5.715,315,2.403,335,4.719,426,3.139,598,4.878,676,4.812,740,5.14,756,3.512,821,4.296,1096,4.049,1136,5.059,1155,4.406,1334,3.233,1386,6.477,1434,5.53,1553,5.099,1728,4.214,2235,4.157,3887,6.852,4313,6.104,4314,6.199,5578,7.005,5656,9.561]],["t/2201",[920,8.555,921,8.19,1317,5.184,1386,5.737,2944,7.694,3887,7.131,5739,9.442]],["t/2204",[41,2.477,60,4.044,6036,11.545,6037,11.545]],["t/2206",[78,6.388,212,5.771,315,3.011,339,5.436,340,3.668,349,2.731,1003,5.672,1173,6.791,2350,5.208,6038,5.549]],["t/2208",[69,3.087,82,4.115,437,3.231,496,4.857,692,2.924,749,4.338,974,3.349,1040,4.733,1691,7.12,1705,4.283,2350,6.349,2626,5.625,2627,5.529,2751,7.12,5686,7.632,6038,6.766,6039,10.373,6040,6.974,6041,8.287]],["t/2210",[437,3.968,692,3.59,1468,9.446,6038,5.802,6042,10.176]],["t/2212",[778,6.91,2350,5.495,3350,6.795,6038,5.856]],["t/2214",[38,3.16,88,2.39,437,3.636,778,7.502,906,5.036,960,3.465,2350,6.382,3282,6.171,4346,9.383,6038,6.358]],["t/2216",[322,4.571,1717,7.953,2350,5.495,6038,5.856]],["t/2218",[5581,7.79,6038,5.966]],["t/2220",[41,2.5,2731,6.279,6038,5.856,6043,9.86]],["t/2222",[41,2.477,2731,6.222,6038,5.802,6043,9.77,6044,9.177]],["t/2224",[41,2.5,6038,5.856,6045,10.818,6046,10.27]],["t/2226",[304,3.437,437,3.606,748,6.223,749,4.841,771,5.42,1330,4.683,1386,5.452,1674,6.584,1691,7.946,2350,4.949,2731,5.654,2734,5.729,2739,6.277,2743,5.848,6038,5.274,6047,9.743]],["t/2228",[304,3.353,437,3.518,448,4.054,748,6.072,749,4.723,771,5.289,1330,4.569,1674,6.424,2350,4.829,2626,6.125,2627,6.021,2731,5.517,2734,5.59,2739,6.125,2743,5.706,6038,5.146,6047,9.506,6048,8.138,6049,8.664]],["t/2231",[19,1.964,37,2.925,38,2.51,73,2.786,84,4.392,113,3.533,127,4,225,4.167,242,4.751,259,5.774,308,3.533,310,3.075,317,2.91,336,5.748,337,6.68,338,2.188,339,6,340,2.791,341,3.496,342,3.212,343,3.877,344,6.116,345,5.883,346,4.038,347,6.511,348,4.201,349,2.079,350,3.437,351,6.364,352,2.032]],["t/2233",[0,1.238,225,3.809,259,5.277,336,5.254,342,3.266,349,2.755,352,2.694,739,6.253,2256,6.346]],["t/2235",[19,1.685,30,2.274,41,2.017,66,2.428,69,3.087,73,2.392,88,2.124,236,5.035,241,4.196,242,3.459,259,6.567,267,5.794,308,3.952,310,4.306,338,2.448,353,7.82,354,6.248,355,4.616,776,6.418,1734,6.028,1746,7.693]],["t/2237",[0,1.069,19,1.724,30,2.326,39,3.434,41,2.063,45,3.209,66,2.462,73,2.446,88,2.172,211,4.62,242,3.538,258,9.038,259,5.654,338,2.504,350,3.933,351,9.038,356,2.632,357,2.583,358,3.946,359,4.456,360,9.486,602,3.085]],["t/2239",[12,4.689,18,3.705,19,2.227,20,1.82,41,1.878,53,4.634,118,3.22,242,3.22,243,4.601,259,6.213,293,5.191,309,3.341,310,3.202,339,4.309,340,2.907,343,5.188,349,2.165,612,4.266,613,4.878,724,7.21,739,4.913,759,4.055,853,5.436,2350,4.128,2599,4.717,2633,5.024,4061,6.369,4236,6.492]],["t/2241",[0,1.238,93,6.123,212,5.821,259,5.277,315,3.038,349,2.755,356,3.049,361,4.586,466,7.142]],["t/2243",[19,2.025,41,2.674,72,2.984,73,2.242,127,4.195,242,4.586,259,5.906,352,2.131,362,7.945,363,9.559,364,10.488,704,4.719,738,4.527,941,6.387,956,3.021,1057,6.016,1596,6.199,1793,4.947,2033,5.42,2108,8.379,3363,6.016,6050,8.978,6051,8.813,6052,10.488,6053,8.183]],["t/2245",[0,0.953,49,3.617,72,2.903,83,3.313,88,1.937,96,3.956,98,4.016,174,3.007,259,4.062,296,3.428,349,2.121,357,2.304,358,3.519,361,4.569,365,7.256,366,5.436,443,6.582,601,5.014,605,6.494,692,2.667,718,3.53,738,5.701,875,4.221,891,7.283,1099,7.177,1582,6.031,1612,5.698,1634,3.812,2241,6.142,3536,6.494,6054,10.304,6055,8.574]],["t/2247",[72,3.644,73,2.737,259,5.098,317,3.726,367,9.485,496,5.559,601,4.861,692,3.346,738,5.527,1075,6.824,1134,6.824,2599,5.799,5886,9.485]],["t/2249",[41,2.783,259,6.147,368,9.825,369,10.252,370,10.312,371,10.252]],["t/2251",[18,3.606,20,1.771,41,2.37,42,2.34,53,3.01,72,2.884,91,3.214,110,3.372,115,2.218,122,2.757,125,3.394,131,2.301,183,3.3,242,3.133,259,5.235,345,4.111,368,8.368,370,8.782,372,7.208,373,7.908,646,9.351,725,4.151,796,6.769,871,6.969,939,3.771,940,4.764,1040,3.885,1123,4.303,1295,5.46,1573,6.45,1804,4.714,3321,7.507,6056,8.517,6057,11.049,6058,8.517]],["t/2253",[259,5.47,366,6.522,1099,6.733,6059,10.72]],["t/2255",[0,0.98,4,3.241,6,1.529,20,1.833,33,2.121,36,3.24,41,2.424,43,3.415,45,2.045,50,3.415,53,4.865,66,1.264,76,1.726,80,3.26,91,2.312,100,5.185,108,2.916,109,1.425,110,2.426,112,3.928,125,2.441,153,2.632,219,3.113,225,2.095,259,5.354,304,2.888,315,1.671,336,2.89,342,1.796,349,1.515,356,1.677,357,1.646,361,4.653,383,2.827,394,2.757,404,3.603,413,2.497,426,2.182,450,2.986,570,2.26,617,1.713,723,7.009,724,3.928,877,2.242,939,2.713,940,3.802,1153,3.001,1330,2.734,1519,4.122,1521,3.573,1522,3.698,1523,3.517,1592,6.541,1594,3.698,1597,6.305,1873,2.839,1874,2.89,2139,4.459,2605,4.021,2606,4.182,4306,4.125,5117,7.245,6060,9.106,6061,9.592]],["t/2257",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2259",[0,1.227,3,4.721,4,3.721,20,2.296,426,3.933,448,4.372,1873,5.116,1874,5.208]],["t/2261",[0,1.382,3,3.739,4,2.947,18,2.569,20,1.262,41,1.302,56,3.05,57,3.1,60,2.66,103,4.023,115,1.58,135,2.457,154,5.239,174,3.071,225,2.995,252,2.824,296,4.107,355,4.413,356,2.813,388,4.425,392,4.006,394,2.73,409,1.754,440,5.819,448,3.467,450,2.958,452,4.462,453,4.29,454,5.977,455,6.495,474,3.27,514,3.383,515,6.159,516,6.785,518,4.188,549,4.604,683,2.457,735,2.359,817,3.539,879,4.55,1038,4.532,1163,6.315,1164,6.226,1689,4.416,4136,4.416,4667,6.632,4959,3.769,4998,6.96,4999,7.165,6062,4.965,6063,4.965,6064,5.349,6065,5.634,6066,5.634]],["t/2264",[0,1.239,6,2.154,9,3.838,12,3.258,20,1.795,43,6.212,47,2.881,88,1.95,89,3.035,225,2.952,241,3.853,299,4.713,315,3.04,336,4.072,342,2.531,349,2.135,350,3.531,356,3.051,477,8.86,658,2.967,852,3.451,928,7.97,956,2.959,1053,3.764,1134,5.475,1923,5.211,3061,8.86,6067,8.633,6068,8.633,6069,8.633,6070,11.146,6071,8.633,6072,7.306,6073,8.633]],["t/2266",[6,2.169,19,2.484,31,5.247,43,4.844,45,4.625,91,5.229,162,4.57,307,3.555,939,5.993,940,4.827,1517,5.895,1588,5.247,1594,5.247,6074,7.662,6075,9.161,6076,7.662,6077,7.662,6078,8.071]],["t/2269",[0,1.304,12,3.93,19,1.395,20,1.618,22,2.736,25,3.74,26,3.274,28,2.197,30,1.883,31,7.083,32,5.508,33,2.695,34,4.787,35,2.792,36,6.627,43,5.804,50,4.338,66,2.421,69,2.555,91,3.93,146,3.284,315,2.123,356,2.131,595,4.092,939,3.447,1330,3.474,1344,3.488,1361,5.72,1506,3.194,1508,5.027,1509,7.324,1510,5.475,1511,5.313,1512,5.665,1513,7.724,1514,5.475,2516,4.616]],["t/2272",[0,0.797,6,2.457,12,2.705,19,1.285,20,1.49,28,2.023,30,1.733,33,3.409,42,3.328,45,4.377,53,2.533,66,2.32,72,3.809,91,2.705,110,2.838,135,2.902,308,3.013,315,1.955,349,1.773,405,4.644,570,3.632,939,4.36,940,3.09,955,4.366,1040,2.52,1124,2.697,1136,4.114,1470,6.179,1471,3.511,1508,3.46,1517,4.687,1520,3.682,1521,4.18,1522,4.326,1523,4.114,1559,5.428,1588,7.31,1634,4.377,1709,3.565,2227,6.065,2262,4.31,3030,8.057,3185,6.721,5718,5.697,6079,6.655,6080,6.317]],["t/2274",[19,1.806,20,2.095,42,2.769,45,4.099,91,3.802,110,3.989,315,2.748,349,2.492,570,4.531,939,4.461,1470,7.707,1471,4.936,1517,4.796,1559,7.63,1588,6.082,5718,8.008,6074,10.826]],["t/2276",[0,1.138,3,3.725,4,3.557,6,2.554,20,2.128,42,2.813,80,5.448,307,4.187,381,4.533,383,4.723,408,6.021,426,3.647,1519,4.786,1581,5.015,1873,4.744,1874,4.829,6076,9.024,6077,9.024]],["t/2278",[20,2.095,42,2.769,45,3.363,47,3.363,125,4.015,210,6.138,315,3.349,405,4.752,425,3.989,1588,7.997,1634,4.479,2282,9.355,2679,5.975,4389,6.877,5415,9.355,6075,8.244,6081,10.075,6082,10.075]],["t/2281",[0,0.928,12,3.15,19,1.497,20,1.736,28,2.357,30,2.019,33,3.776,42,2.294,45,4.054,53,4.293,66,2.506,72,2.827,91,3.15,110,3.306,135,3.381,315,2.277,349,2.065,570,4.024,601,3.771,939,4.829,940,4.702,1124,3.141,1470,6.844,1471,5.343,1508,4.03,1517,3.974,1520,4.288,1521,4.869,1522,5.039,1523,4.792,1594,7.332,3061,6.636,6083,7.752]],["t/2283",[19,1.806,20,2.095,45,3.363,72,3.412,91,3.802,210,6.138,315,3.349,349,2.492,481,5.43,570,3.717,939,4.461,940,4.344,1239,8.527,1470,6.322,1578,4.985,1594,6.082,1991,4.936,4958,8.881,6078,11.404]],["t/2285",[43,5.571,47,3.336,73,2.543,88,2.761,118,3.677,131,2.081,315,2.726,357,2.685,972,4.202,1040,4.297,1588,6.034,2300,6.482,2316,5.422,4195,8.465,6084,9.281,6085,9.996,6086,12.222,6087,9.281]],["t/2287",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2290",[22,2.968,37,3.067,38,2.632,72,2.984,80,4.69,81,4.275,82,3.857,83,3.405,84,4.606,85,3.604,86,8.509,87,5.14,88,1.991,89,3.971,90,5.272,91,4.704,92,4.077,93,4.844,94,7.458,95,5.934,96,4.066,97,5.589,98,3.19,99,3.629,100,5.183,101,7.458,102,5.784,103,4.049,104,6.302,105,7.211,106,5.65,107,7.005]],["t/2292",[19,1.517,22,2.223,37,2.944,38,2.527,86,8.345,87,4.934,89,4.298,90,5.061,91,4.151,92,3.971,108,4.027,109,2.844,110,3.35,111,4.447,112,5.424,113,3.556,114,6.211,115,2.203,116,3.382,117,5.106,118,3.112,119,4.784,120,5.365,121,5.154,122,3.562,123,9.697,124,5.696,125,3.371,126,6.275,127,4.027,128,5.95,129,7.855,130,6.922]],["t/2294",[0,1.429,4,1.926,19,1.488,20,1.396,22,3.664,23,2.168,25,2.051,26,3.217,27,1.493,28,1.205,30,1.032,47,1.425,60,1.296,66,0.88,72,1.445,83,1.649,86,5.665,88,0.964,91,3.132,93,2.346,98,1.545,99,1.757,109,0.993,113,1.794,125,2.675,131,0.889,132,2.531,133,3.492,134,3.106,135,1.728,136,3.501,137,4.026,138,5.01,139,9.099,140,1.782,141,3.612,142,2.651,143,2.157,144,2.801,145,2.913,146,3.501,147,2.737,148,1.936,149,3.612,150,2.013,151,2.956,152,2.913,153,1.833,154,2.553,155,1.827,156,2.956,157,3.762,158,3.762,159,2.469,160,1.928,161,5.379,162,2.244,163,3.307,164,3.392,165,2.576,166,2.33,167,2.737,168,3.666,169,3.642,170,1.913,171,3.963,172,3.002,173,5.494,174,1.497,175,3.963,176,2.576,177,3.492,178,3.232,179,3.762,180,3.307,181,2.07,182,2.157,183,1.654,184,2.081,185,1.897,186,2.396,187,2.244,188,2.874,189,3.307,190,3.106,191,3.963,192,3.002,193,1.549,194,3.963,195,2.123,196,3.956,197,4.087,198,3.963,199,3.963,200,3.963,201,3.963,202,3.963,203,3.963,204,3.963,205,3.963,206,3.963,207,3.963,208,3.963,209,3.963,333,2.081,411,3.052,1226,2.041]],["t/2296",[19,1.97,22,3.613,27,4.643,37,2.386,60,2.083,71,4.302,72,2.322,80,3.649,84,4.991,86,6.518,89,3.357,91,3.604,92,3.447,93,3.769,99,2.823,135,2.777,139,9.448,174,3.853,210,4.177,211,3.294,212,3.583,213,5.616,214,6.366,215,3.649,216,4.396,217,5.086,218,1.986,219,3.483,220,6.366,221,5.764,222,3.906,223,4.259,224,4.616,225,2.345,226,5.44,227,2.482,228,2.529,229,3.294,230,2.1,231,2.468,232,4.823]],["t/2298",[5,4.928,20,1.771,76,2.4,81,5.36,82,5.368,86,5.813,89,2.994,109,1.981,120,5.401,121,5.189,122,2.757,126,8.196,128,7.772,131,2.301,187,4.477,213,5.008,218,3.896,294,3.685,320,3.091,357,2.288,404,6.498,424,5.813,450,4.151,877,3.116,1124,3.205,6088,7.908,6089,13.781,6090,7.507]],["t/2300",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2303",[88,2.139,111,4.98,614,4.178,691,6.56,692,2.946,700,5.438,1076,4.736,1300,5.279,1547,5.242,1764,5.944,1774,8.77,1870,6.217,2079,7.75,2271,7.529,2272,7.026,3586,7.529,3587,7.75,5947,8.678,6091,10.421,6092,8.795,6093,8.016,6094,10.908]],["t/2305",[0,1.102,93,7.232,137,4.811,352,2.399,356,2.715,357,2.664,464,4.699,692,3.084,1062,7.799,1231,6.77,1581,6.445,5528,7.883,6095,9.917,6096,9.917,6097,9.917,6098,9.917,6099,8.393,6100,9.917]],["t/2307",[0,1.368,4,2.459,294,4.802,349,2.121,352,2.074,356,2.347,567,4.309,584,7.256,692,2.667,700,4.922,841,2.757,853,7.643,1062,5.497,1581,4.2,1598,5.561,1869,4.745,2150,7.935,2301,6.494,5307,9.711,5526,6.24,5947,9.46,6091,7.558,6099,7.256,6101,8.821,6102,7.962]],["t/2309",[0,1.001,81,5.554,87,5.25,225,3.078,227,3.258,294,3.895,349,2.226,356,2.464,410,4.851,680,5.648,692,3.916,853,5.591,1062,7.34,1581,4.409,2725,6.331,3712,7.154,3938,7.365,5303,5.708,5307,6.331,5330,7.708,5482,6.551,5526,8.332,5611,7.934,5844,6.436,5947,6.06,6094,9.689,6103,9.001,6104,9.001,6105,7.617]],["t/2311",[0,0.929,4,1.631,9,3.713,19,1.019,20,2.058,38,1.698,73,1.447,83,2.197,87,3.317,88,2.464,89,1.999,102,3.732,115,1.481,136,2.399,181,2.758,225,1.945,228,2.098,230,2.559,340,1.889,342,1.667,349,2.066,352,1.375,356,2.286,357,1.528,380,2.938,390,1.999,409,1.644,593,3.606,606,3.24,612,2.772,613,3.169,614,2.01,660,3.532,692,3.079,704,3.045,732,3.317,842,4.833,849,3.606,886,5.012,909,3.646,924,3.402,1062,3.646,1228,3.126,1266,6.639,1292,6.963,1386,2.955,1488,4.138,1581,4.092,1651,6.834,1661,5.55,1698,5.28,1764,3.568,1863,4.812,1869,3.147,1890,5.28,2402,4.306,3338,3.938,3910,3.646,4200,4.406,4211,4.812,5303,3.606,5307,4,5313,4.653,5330,3.829,5410,6.834,5526,9.139,5528,4.52,5572,7.362,5575,5.012,5611,8.726,6101,4.52,6106,5.686,6107,5.686,6108,4.812,6109,5.012,6110,5.28,6111,5.28,6112,5.686,6113,8.352,6114,7.362,6115,5.686,6116,5.686,6117,5.686,6118,5.686,6119,5.686,6120,5.686,6121,5.686]],["t/2313",[0,0.941,20,1.76,22,2.629,27,2.961,28,1.635,30,1.4,35,3.139,37,2.946,56,2.91,57,2.958,66,2.064,69,3.284,71,3.633,72,1.961,73,1.473,88,1.308,174,2.031,218,1.677,226,3.299,227,3.983,230,1.774,270,2.36,304,1.897,342,1.698,430,3.294,464,5.547,614,2.046,660,3.597,673,3.377,698,3.205,732,3.377,822,1.641,841,1.862,966,3.12,1054,6.344,1061,4.972,1062,6.414,1063,4.45,1076,2.895,1266,4.603,1292,4.073,1334,2.124,1518,2.384,1674,3.633,1738,6.488,1779,7.461,1906,3.227,2263,2.926,2264,2.88,2744,3.274,3015,3.8,3128,4.9,3313,3.755,4314,4.073,5388,4.385,5512,3.899,5571,6.926,5810,4.9,6109,8.818,6110,9.289,6111,5.377,6114,7.461,6122,10.004,6123,5.79,6124,9.289,6125,5.79,6126,4.9,6127,5.79,6128,5.79]],["t/2315",[0,0.801,3,3.597,35,1.933,37,3.44,38,2.153,41,2.121,76,2.031,78,4.17,227,3.577,270,4.029,304,3.695,320,2.616,357,2.656,614,2.547,658,2.477,692,2.242,877,2.637,897,4.674,972,3.03,1062,4.621,1066,4.275,1128,2.836,1142,4.73,1157,2.135,1386,3.745,1581,3.531,1691,5.459,1738,6.41,2350,4.662,2725,5.07,2726,5.346,2728,6.353,2729,6.353,2928,10.273,3440,6.693,3938,8.088,4313,4.992,4314,5.07,4385,4.621,4715,4.312,5303,7.154,5330,4.853,5496,4.79,5602,6.353,5654,5.898,5656,5.07,6109,6.353,6114,6.353,6124,9.178,6129,6.693,6130,7.208,6131,7.208,6132,7.208,6133,6.693]],["t/2317",[229,5.352,342,3.266,398,5.54,694,5.352,1999,9.427,2195,8.436,4597,9.818,4907,9.427,5526,8.106]],["t/2319",[0,1.29,1,5.321,4,2.638,20,1.912,88,2.077,162,4.835,312,6.663,339,4.528,340,3.055,349,2.275,409,2.659,447,5.603,692,3.61,822,3.289,1334,4.258,1579,5.771,5330,6.192,6094,7.783,6134,12.138,6135,7.783,6136,10.777,6137,10.777]],["t/2321",[0,1.015,4,2.619,73,2.323,349,2.258,410,4.921,452,3.278,467,4.326,570,4.262,583,5.671,692,3.942,704,6.187,841,2.936,1156,4.326,1157,2.705,1194,6.147,1598,5.921,1699,5.935,2000,7.471,2061,4.614,2150,8.261,3953,7.258,5307,8.126,5947,7.778,6099,7.727,6102,10.728]],["t/2323",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2326",[9,2.697,18,2.569,19,1.088,20,2.136,38,2.616,76,1.71,88,1.371,98,3.169,100,3.568,109,1.412,113,2.551,115,2.28,119,3.431,182,3.066,212,3.171,230,1.859,233,3.697,302,2.824,308,3.681,338,2.28,358,2.49,432,3.483,452,2.179,464,2.875,468,3.457,577,3.697,591,3.05,614,2.144,636,3.291,653,3.153,684,3.209,727,3.335,732,3.539,778,3.599,818,3.654,850,4.268,852,2.426,856,4.203,863,4.032,878,4.501,909,3.89,950,3.808,980,4.595,1043,2.719,1120,4.965,1319,2.776,1481,4.702,1565,3.935,1634,2.697,1641,3.335,1697,5.614,1709,3.018,1772,3.406,1897,4.032,1898,7.165,2407,4.416,2516,3.599,2704,5.135,2856,3.599,3020,3.89,3112,4.142,3319,5.349,3615,5.896,3879,5.349,4285,4.085,4306,4.085,4389,4.142,4987,5.349,6138,6.068,6139,6.068,6140,7.165,6141,6.068,6142,6.068,6143,5.634,6144,6.068,6145,5.634,6146,6.068,6147,6.068,6148,5.349,6149,6.068,6150,4.823,6151,6.068,6152,6.068,6153,5.634,6154,6.068,6155,6.068,6156,6.068,6157,6.068,6158,6.068]],["t/2328",[295,7.079,818,4.22,930,7.247,1009,7.434,1658,6.111,4441,7.895,6150,8.776,6159,8.776]],["t/2331",[19,1.603,20,1.299,39,2.231,41,2.773,44,5.168,66,1.289,88,1.411,115,2.329,131,1.301,136,2.636,196,2.626,197,2.714,244,3.391,295,5.733,316,3.291,339,4.403,340,2.075,343,2.882,350,2.555,352,2.757,360,4.966,425,2.474,452,3.211,548,3.091,591,4.494,692,1.943,818,1.914,960,2.929,1136,3.586,1157,2.649,1228,3.434,1534,3.771,1658,3.458,1869,3.458,2295,6.508,2460,3.92,2904,4.052,3071,4.731,4189,4.966,5044,5.801,6160,11.064,6161,7.882,6162,8.942,6163,10.444,6164,8.942,6165,6.248,6166,10.444,6167,10.444,6168,11.203,6169,6.248,6170,10.444,6171,8.942]],["t/2333",[19,1.126,35,1.684,38,1.875,41,1.925,47,2.096,93,3.451,119,3.55,122,2.033,125,2.502,131,1.869,244,1.868,290,4.755,296,4.187,401,2.848,452,2.254,618,3.724,619,4.005,672,2.494,696,3.017,703,3.017,818,3.703,960,2.056,972,2.639,974,3.73,979,7.149,1047,3.377,1077,2.975,1151,4.072,1157,1.86,1249,5.83,1334,2.303,1456,4.286,1471,5.598,1527,3.79,1579,3.94,1611,5.83,1658,3.475,1701,5.83,1895,4.172,2350,2.961,2560,6.657,2709,4.569,3121,4.657,3258,4.072,3929,4.991,4441,7.488,4570,4.416,4715,3.756,6161,7.91,6172,5.534,6173,8.974,6174,12.088,6175,5.314,6176,8.974,6177,6.279,6178,6.279,6179,6.279,6180,5.83,6181,8.974,6182,6.279,6183,6.279,6184,6.279,6185,6.279,6186,6.279,6187,8.974,6188,6.279,6189,6.279,6190,6.279]],["t/2335",[0,1.015,4,2.619,20,1.898,163,7.075,165,5.512,294,3.951,352,2.794,356,2.5,358,3.747,361,3.76,390,3.21,408,5.369,409,2.64,410,4.921,488,5.563,570,4.262,595,4.8,692,2.84,818,3.883,1009,8.533,1534,5.512,1708,5.163,1884,4.69,2303,7.258,6159,10.074,6191,9.131]],["t/2337",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2339",[0,1.227,4,3.721,20,2.296,218,3.198,409,3.192,412,5.95,426,3.933,1873,5.116,1874,5.208]],["t/2341",[9,3.377,19,1.362,38,2.269,104,5.432,107,6.038,294,3.287,296,3.037,302,3.535,310,2.78,405,3.583,453,3.721,466,4.871,548,3.759,614,3.621,652,4.176,836,5.927,873,6.696,1036,3.251,1115,3.925,1144,3.859,1150,5.529,1231,5.186,1328,3.52,1774,5.635,1880,4.121,1986,4.545,2161,5.886,2187,4.628,2236,4.672,2452,7.054,2586,5.115,2599,4.094,3282,4.431,3681,7.054,3899,5.635,3902,5.432,4212,6.038,4220,5.432,4238,6.429,4244,5.753,4647,7.054,5040,6.696,6192,7.597,6193,9.03,6194,10.245,6195,7.597,6196,7.597,6197,6.696,6198,7.597,6199,7.597,6200,9.03,6201,7.597,6202,7.054,6203,7.054,6204,7.054]],["t/2343",[0,1.066,19,1.236,20,1.433,26,2.168,27,3.855,81,3.344,83,2.663,109,1.604,111,3.624,131,1.435,146,2.908,148,3.127,170,3.089,182,3.483,183,3.715,225,3.278,342,2.021,356,2.624,357,1.852,361,2.839,381,3.053,407,2.81,410,5.938,481,3.715,567,3.465,570,2.543,586,5.48,602,2.212,617,1.927,692,2.144,861,4.372,1077,3.266,1144,4.513,1154,5.133,1260,5.342,1547,3.815,1550,5.114,1756,6.401,1804,3.815,1880,3.739,1939,6.084,2025,5.372,2206,5.641,2256,3.927,2295,5.017,2904,4.471,3019,6.077,3196,5.901,5087,5.221,5522,6.079,6205,6.894,6206,5.48,6207,6.894,6208,6.077,6209,5.114]],["t/2345",[0,0.97,9,2.685,28,1.705,35,2.34,45,2.016,66,1.246,67,2.823,69,4.073,72,2.045,113,2.539,118,2.222,131,1.257,135,2.446,153,2.594,162,5.387,231,2.174,294,2.613,309,2.306,310,2.21,340,2.006,349,2.158,356,1.653,357,2.753,405,2.848,429,2.861,602,3.287,653,3.138,692,3.187,699,2.643,735,2.347,822,3.374,863,4.013,1036,4.804,1061,5.918,1063,6.886,1144,3.737,1153,2.958,1506,2.478,1581,2.958,1629,3.926,1728,4.173,1930,4.318,1939,5.234,1951,7.043,2586,4.066,2762,2.521,3497,6.936,4191,3.83,5524,4.013,5570,4.48,5619,4.573,5958,4.8,6209,7.601,6210,5.111,6211,6.039]],["t/2348",[0,1.407,22,2.782,28,2.253,30,1.93,66,2.184,143,4.032,193,2.896,195,3.969,196,4.45,197,4.599,242,2.936,339,5.212,340,3.517,349,1.974,350,3.264,352,2.561,356,2.184,359,3.698,444,3.378,1144,3.956,1606,4.146,1869,4.416,5570,9.768,5957,9.831,6209,9.768,6212,10.587,6213,8.96,6214,10.587,6215,10.587]],["t/2350",[0,1.206,35,2.91,66,2.239,69,3.563,244,3.228,409,3.137,818,3.324,822,3.076,5524,7.212,5570,8.05,6213,9.184,6216,10.852]],["t/2352",[0,0.825,27,2.595,41,2.457,42,2.039,66,1.53,69,2.436,88,1.676,113,4.238,125,2.956,131,2.558,174,2.602,187,3.9,216,7.342,228,2.737,244,2.207,322,2.91,338,1.932,355,2.91,357,1.993,409,2.145,425,2.938,818,2.273,822,2.103,845,4.327,945,7.091,960,3.302,1036,4.901,1040,3.545,1144,4.091,1548,4.106,1930,7.209,1939,3.79,1943,4.995,1946,5.218,1951,6.326,1986,4.438,3196,3.973,5570,7.478,5619,5.618,5812,4.811,6213,8.532,6217,7.419,6218,5.897,6219,5.897,6220,9.361]],["t/2354",[0,1.218,19,1.506,20,2.277,27,2.939,37,2.925,38,2.51,41,1.803,76,2.368,98,3.041,131,2.281,136,3.545,244,3.258,310,3.075,320,3.975,340,2.791,356,2.999,409,2.429,429,3.982,452,3.017,692,2.614,818,2.574,822,2.382,960,2.752,1144,4.058,1157,2.489,1653,6.364,1939,4.293,1951,6.873,2256,4.787,3196,4.5,4148,7.803,5522,5.329,5524,5.584,5570,6.233,6213,7.112,6221,7.407,6222,8.404]],["t/2357",[0,1.191,4,1.352,19,1.3,22,2.323,23,2.394,26,2.28,27,1.649,28,1.331,30,1.14,35,1.945,42,1.295,45,2.421,53,1.666,66,2.048,69,4.098,76,2.043,91,2.737,99,1.941,110,1.866,112,3.022,113,1.981,131,0.981,146,3.059,148,3.29,162,5.219,170,3.25,211,2.264,228,1.739,308,1.981,309,1.799,310,1.724,320,2.632,342,1.382,349,1.166,352,1.14,357,1.266,361,2.986,381,2.087,407,1.921,413,1.921,429,2.233,448,1.866,567,2.369,692,2.749,699,2.063,735,1.832,759,3.36,822,3.037,939,3.211,1036,4.248,1061,5.498,1063,6.398,1129,2.591,1144,4.052,1153,2.309,1728,4.227,1930,3.37,1939,3.705,1951,7.102,2025,2.297,2993,5.934,2994,3.856,3196,2.524,3497,5.764,4245,3.496,4688,4.376,5457,4.154,5522,5.606,5524,3.132,5570,3.496,5619,3.569,5620,4.154,5812,3.056,5925,3.43,5958,7.026,6206,5.764,6209,6.557,6223,4.713,6224,3.496,6225,3.989,6226,6.138,6227,4.376,6228,3.569]],["t/2359",[19,1.236,27,3.855,42,2.634,76,1.942,109,1.604,122,2.232,125,2.747,131,1.996,154,4.124,244,2.051,294,2.983,348,3.447,352,2.665,355,2.704,361,2.839,407,2.81,425,2.73,430,2.063,562,2.878,601,4.33,602,2.212,704,3.692,759,5.106,821,3.36,876,4.088,1030,4.088,1040,4.674,1144,4.168,1228,3.789,1282,5.221,1324,3.842,1534,4.161,1728,3.297,1939,3.522,1942,4.403,1946,6.742,1951,6.915,1952,6.401,2233,3.957,2483,4.282,3196,5.901,3200,6.401,3726,5.221,5522,6.079,5812,6.216,6224,5.114,6228,5.221,6229,8.112,6230,6.401,6231,6.894,6232,5.114]],["t/2361",[4,1.792,20,2.508,27,3.128,42,2.457,88,2.02,115,2.329,131,1.301,137,3.031,138,3.771,150,2.947,174,2.191,183,2.421,230,1.914,231,2.249,316,2.818,320,2.267,352,2.163,381,2.766,386,2.8,394,2.811,407,2.547,413,2.547,430,1.87,448,2.474,616,1.792,619,2.788,636,4.85,688,3.991,748,3.705,960,3.421,1040,4.009,1047,2.351,1077,2.96,1105,5.942,1144,3.477,1312,3.771,1319,2.858,1547,3.458,1647,4.634,1946,4.394,1951,3.92,2345,4.634,2479,4.1,2787,4.547,3196,4.789,3394,4.966,3898,4.966,4220,4.467,4868,6.304,5386,5.112,5522,3.962,5812,5.799,5963,6.363,5964,7.647,5965,6.363,5966,6.363,6224,4.634,6228,4.731,6233,5.801,6234,8.303,6235,5.287,6236,6.248]],["t/2363",[6,2.004,19,1.44,27,4.169,42,2.922,71,5.039,137,3.895,138,4.847,176,4.847,183,3.112,225,3.636,320,2.914,352,2.571,381,3.556,382,5.27,390,2.823,425,3.18,426,2.86,448,3.18,1040,4.46,1144,4.224,1518,3.307,1547,5.884,1793,4.508,1874,3.788,1946,5.648,1951,5.039,2295,5.844,3196,6.382,5522,5.093,5812,6.895,6224,5.957,6228,6.082,6237,10.632,6238,8.031,6239,10.632,6240,7.457]],["t/2365",[27,4.234,42,2.704,99,4.052,131,2.049,137,4.773,138,5.94,320,3.571,352,2.928,960,3.223,1040,4.256,1144,4.366,1547,5.446,1946,6.921,1951,6.175,3196,6.482,5522,6.24,5812,6.382,6241,9.84]],["t/2367",[27,4.234,42,2.704,99,4.052,131,2.049,137,4.773,138,5.94,320,3.571,352,2.928,960,3.223,1040,4.256,1144,4.366,1547,5.446,1946,6.921,1951,6.175,3196,6.482,5522,6.24,5812,6.382,6242,9.84]],["t/2369",[27,4.214,42,2.683,99,4.021,131,2.033,137,4.737,138,5.894,320,3.543,352,2.914,1040,4.236,1144,4.351,1547,5.404,1946,6.868,1951,6.127,3196,6.452,5522,6.192,5812,6.332,6243,9.764,6244,9.764,6245,9.764]],["t/2371",[27,4.214,42,2.683,99,4.021,131,2.033,137,4.737,138,5.894,320,3.543,352,2.914,1040,4.236,1144,4.351,1547,5.404,1846,6.574,1946,6.868,1951,6.127,3196,6.452,5522,6.192,5812,6.332,6246,9.067,6247,9.067]],["t/2373",[27,4.318,42,2.372,93,4.745,131,2.57,137,4.188,138,5.211,241,3.853,320,4.045,352,2.696,444,3.655,452,4.002,514,3.335,694,4.148,960,2.827,1040,3.919,1144,4.344,1157,3.302,1547,4.778,1939,5.694,1946,6.072,1951,5.417,2152,5.599,3196,6.61,5088,6.689,5522,5.475,5812,5.599,6220,8.016]],["t/2375",[19,2.034,27,3.969,35,2.38,66,1.831,76,2.501,109,2.065,187,4.666,310,4.151,338,2.311,355,3.481,459,4.878,601,4.009,661,4.224,956,3.042,1075,7.195,1093,5.824,1144,4.164,1152,7.511,1324,4.946,1713,3.899,1889,4.611,1939,4.533,2503,5.407,3196,6.076,3233,7.511,5522,7.195,5523,10.535,5524,5.898,6248,8.875]],["t/2377",[20,2.493,88,2.189,110,3.837,244,2.882,306,4.396,310,3.545,315,2.643,355,3.801,459,5.326,703,4.656,877,3.545,882,4.147,1038,4.274,1040,4.216,1154,5.189,1255,6.614,1319,4.432,2345,7.187,3159,6.928,5176,7.928,6224,7.187,6228,7.338,6230,8.997,6249,9.69]],["t/2379",[6,1.335,20,1.112,27,2.793,28,1.51,30,1.294,35,2.561,37,1.862,42,1.47,53,1.891,66,2.185,69,3.136,76,1.507,88,1.803,91,2.019,92,1.931,109,1.245,110,2.118,162,5.021,183,2.073,231,1.926,252,2.49,286,5.119,315,1.459,338,1.393,342,1.569,352,1.931,357,1.437,405,2.523,430,3.17,459,2.941,617,1.496,703,3.836,732,3.12,759,3.699,841,1.72,877,1.957,882,3.417,1030,4.735,1036,4.532,1040,4.178,1047,2.013,1144,3.957,1150,3.894,1154,2.865,1319,2.447,1471,2.621,1518,3.287,1728,3.818,1930,3.825,1939,4.078,1946,3.763,1951,7.11,2296,3.968,2345,3.968,2993,6.533,2994,4.378,3196,4.275,3485,3.705,4245,3.968,4496,4.528,5106,4.528,5386,8.666,5522,5.063,5524,3.555,5620,4.716,5812,3.47,5925,3.894,5958,7.592,6209,3.968,6224,5.922,6225,6.757,6226,6.757,6227,4.968,6228,7.233,6250,4.968,6251,8.869,6252,4.968]],["t/2381",[0,0.947,6,2.125,27,2.979,42,2.34,80,4.532,122,2.757,349,2.106,352,2.672,383,3.929,413,3.472,430,2.549,450,4.151,1040,4.845,1144,3.679,1946,5.99,1951,8.144,3196,4.561,5386,10.62,5522,5.401,5812,5.523,6224,6.317,6253,11.388,6254,11.388,6255,9.739,6256,9.739]],["t/2383",[27,2.451,35,1.879,60,2.129,62,2.758,99,2.886,110,2.775,131,1.459,183,2.716,225,2.397,244,2.085,262,3.206,352,2.345,430,2.098,614,2.477,748,7.114,827,7.512,828,7.527,830,6.931,911,4.23,1040,4.217,1075,4.444,1091,5.1,1144,3.994,1518,2.886,1728,3.351,1930,5.011,1939,3.58,2299,4.657,2803,5.1,3196,3.753,3491,6.178,5386,7.933,5522,6.149,5619,5.308,6224,5.198,6228,8.419,6240,6.507,6257,7.008,6258,7.008,6259,7.008,6260,7.008,6261,7.008,6262,7.008,6263,9.696,6264,9.696,6265,9.696,6266,7.008,6267,9.696,6268,7.008]],["t/2385",[0,1.022,6,2.295,27,3.217,76,2.591,109,2.14,182,4.647,294,3.98,348,4.598,349,2.275,357,2.471,358,3.774,409,2.659,430,2.753,448,3.642,576,5.502,658,3.161,699,4.025,974,3.276,1144,3.864,1170,5.832,1599,7.126,1939,6.496,2378,5.832,3196,4.925,3963,6.036,3964,6.469,3965,7.525,5088,7.126,6206,7.31,6269,8.54]],["t/2387",[26,3.245,27,3.61,60,3.135,62,4.062,218,2.99,398,6.199,415,6.121,448,4.087,620,8.445,1144,3.437,2510,5.972,2511,6.175,3196,5.527,3398,6.23,5522,6.546,5524,6.859,6270,10.322]],["t/2389",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2391",[0,1.086,4,3.626,6,1.768,19,1.27,20,2.031,42,1.947,72,2.4,83,2.738,87,4.133,119,4.007,182,3.581,218,3.491,294,4.228,301,4.596,356,1.94,358,2.908,375,4.203,377,3.95,379,4.317,390,2.492,413,3.983,426,3.983,444,4.136,514,2.738,619,4.361,644,5.265,648,6.412,652,3.895,676,3.869,696,3.405,841,2.279,877,2.593,1128,3.845,1129,3.895,1226,3.389,1346,4.544,1634,3.15,1873,3.284,1874,3.342,1884,3.64,2350,4.608,2517,6.247,2590,3.978,2633,5.609,2668,4.985,2731,3.819,2742,5.157,3725,7.994,4240,5.157,4367,6.58,4370,5.157,4782,6.247,6271,6.58]],["t/2393",[49,4.028,73,2.429,88,2.482,127,3.264,131,1.428,228,2.529,230,2.1,309,2.618,315,1.87,352,2.874,386,6.24,437,4.446,478,5.193,496,5.676,658,2.356,853,4.259,867,3.936,974,2.442,1096,4.387,1251,5.313,1451,4.823,1657,6.044,1865,5.45,2350,6.384,2520,8.99,2626,5.713,2627,5.616,2633,5.482,2681,3.999,2683,4.616,2685,5.086,2686,5.61,3590,5.803,3747,5.086,4659,5.803,5414,5.45,5499,5.45,6272,6.366,6273,6.856,6274,6.856,6275,5.45,6276,9.549,6277,6.856]],["t/2395",[0,0.973,19,1.569,42,2.405,45,2.921,49,3.692,73,2.226,76,2.466,91,3.303,109,2.036,315,2.387,339,5.536,340,4.127,349,2.781,352,3.005,356,2.396,562,3.653,602,2.808,692,3.497,939,3.875,974,3.117,1040,3.077,1328,4.055,1869,4.844,2350,4.128,2633,5.024,3020,5.611,4079,4.878,6038,6.245,6278,8.516,6279,7.407]],["t/2398",[56,5.435,57,5.524,132,4.887,241,4.826,298,6.256,310,3.015,312,6.207,386,4.846,437,3.716,496,4.257,718,3.393,749,4.989,879,4.281,911,4.974,1471,4.036,1553,4.767,1705,4.926,1714,6.112,2236,5.068,2387,6.384,4868,6.527,5047,6.24,5963,6.588,5964,7.807,5965,6.588,5966,6.588,6038,4.141,6040,6.112,6280,6.742,6281,6.785,6282,9.531]],["t/2400",[56,4.492,57,4.565,73,2.274,88,2.019,132,5.3,298,5.171,312,5.131,386,4.005,526,5.017,703,5.476,749,4.123,778,7.442,888,6.925,1506,3.668,1705,4.071,2350,5.918,2387,6.925,2516,5.3,4327,7.104,4868,5.395,5963,5.445,5964,6.943,5965,5.445,5966,5.445,6038,4.492,6040,6.629,6281,5.608,6283,8.831,6284,8.937,6285,7.564]],["t/2402",[56,4.036,57,4.102,76,2.263,78,6.151,98,3.848,109,1.868,131,1.672,132,4.763,298,4.646,312,4.61,338,2.091,346,3.858,357,2.157,386,5.341,437,4.096,467,3.805,478,6.082,749,3.705,877,2.938,882,3.437,972,3.376,1074,4.508,1506,4.363,1705,3.658,2213,6.571,2350,3.788,2387,6.222,2503,4.892,3260,7.065,3338,5.562,3350,4.684,4868,4.847,5963,4.892,5964,6.477,5965,4.892,5966,4.892,6038,5.343,6040,5.957,6281,5.039,6283,8.238,6286,6.895]],["t/2404",[38,2.477,76,2.337,82,3.63,88,1.873,99,4.471,109,1.93,131,1.727,241,3.702,309,3.166,315,2.262,338,2.16,437,2.85,591,4.168,686,5.709,739,4.655,882,3.549,990,4.36,1043,3.716,1074,4.655,1077,3.929,1128,3.264,1386,4.309,1764,5.204,1906,4.622,2347,7.31,2350,3.912,2590,4.655,2748,6.592,3018,6.426,3338,5.744,5312,7.701,5313,6.786,5330,5.584,5512,8.152,5686,5.379,6038,5.458,6042,9.572,6287,8.293,6288,8.293,6289,10.084,6290,8.293]],["t/2406",[6,1.615,19,1.16,30,1.565,33,2.241,42,1.778,45,2.16,56,4.608,57,4.684,66,2.197,91,2.442,109,1.506,227,3.318,270,2.638,286,5.879,298,5.305,304,2.119,312,6.65,437,3.151,749,4.23,822,3.283,939,2.865,960,3.794,1061,5.233,1063,7.013,1068,2.595,1705,4.177,2387,7.104,2744,3.659,4868,5.535,5963,5.586,5964,7.057,5965,5.586,5966,5.586,6038,5.822,6040,6.801,6278,4.901,6279,5.476,6280,7.502,6281,7.269,6283,7.104,6286,5.946,6291,5.476,6292,5.704,6293,5.704]],["t/2409",[56,6.027,57,6.125,132,5.747,298,5.606,312,6.883,386,4.342,437,4.121,749,4.47,1386,5.035,1705,4.414,2685,7.187,4715,5.797,4868,5.849,5654,7.928,5963,5.903,5964,7.305,5965,5.903,5966,5.903,6038,4.87,6281,6.08,6294,6.711]],["t/2411",[38,2.872,56,5.998,57,6.096,132,5.703,298,5.564,312,6.851,386,4.309,437,3.305,749,4.436,1386,4.996,1705,4.38,2350,4.535,4715,5.753,4868,5.805,5963,5.858,5964,7.271,5965,5.858,5966,5.858,6038,4.833,6281,6.034,6283,7.451,6294,6.66,6295,9.616]],["t/2413",[56,5.942,57,6.039,132,5.618,298,5.48,312,6.787,386,4.245,437,3.255,749,4.37,972,3.982,1386,4.922,1705,4.315,3350,5.525,4715,5.667,4868,5.718,5963,5.771,5964,7.203,5965,5.771,5966,5.771,6038,5.942,6281,5.944,6283,9.161,6286,6.143,6294,6.56]],["t/2415",[19,1.44,30,1.942,33,2.781,42,2.207,45,2.68,56,5.343,57,5.431,66,2.193,91,3.03,109,1.868,286,5.149,298,4.646,312,6.842,437,3.654,749,3.705,822,3.013,939,3.556,960,2.63,1061,4.803,1063,6.67,1705,3.658,2387,6.222,2685,5.957,4715,4.804,4868,4.847,5963,4.892,5964,6.477,5965,4.892,5966,4.892,6038,5.343,6278,6.082,6279,6.796,6280,6.571,6281,6.671,6283,6.222,6286,5.208,6291,6.796,6292,7.079,6294,5.562]],["t/2418",[2,1.677,3,0.93,5,1.478,18,1.082,19,1.037,20,2.157,38,2.705,75,4.592,81,2.132,88,0.993,95,1.72,96,1.179,98,0.925,109,0.594,111,2.311,115,2.016,117,1.542,118,2.128,134,1.859,135,2.342,159,1.478,166,1.395,210,1.556,218,1.676,230,1.772,348,1.277,375,1.515,377,2.45,379,5.826,381,3.042,383,2.669,386,1.97,390,2.034,401,1.159,409,2.445,413,2.358,448,4.355,450,1.245,457,1.434,467,1.21,496,4,612,2.142,619,1.14,679,2.252,735,1.708,741,2.571,840,1.528,841,1.413,845,2.563,847,1.444,850,5.949,992,5.058,994,3.143,997,2.758,1043,1.145,1093,1.677,1105,1.698,1115,1.32,1142,4.509,1245,1.859,1319,3.143,1346,1.638,1398,2.85,1548,2.433,1634,1.136,1792,1.542,1793,1.434,1856,1.603,1869,1.414,1889,2.284,1941,2.73,2145,6.547,2160,3.199,2197,1.797,2236,6.585,2276,1.72,2378,1.62,2417,1.769,2479,2.885,2560,1.895,2590,6.451,2599,2.369,2626,3.46,2627,1.502,2628,3.494,2629,4.081,2630,1.935,2631,1.895,2632,3.406,2635,4.912,2640,2.162,2647,1.935,2653,6.369,2654,4.006,2662,1.62,2663,1.657,2664,2.372,2667,3.494,2668,1.797,2669,3.059,2670,5.371,2671,6.056,2672,2.252,2673,2.372,2674,6.824,2675,3.72,2676,2.372,2678,2.252,2679,5.016,2680,2.372,2681,1.49,2682,2.372,2683,1.72,2684,1.935,2685,1.895,2686,2.09,2687,5.371,2688,1.935,2689,2.252,2690,1.638,2691,2.372,2692,1.935,2693,6.056,2694,3.874,2695,2.252,2696,2.252,2697,5.461,2698,4.733,2699,2.372,2700,2.252,2701,4.895,2702,2.252,2703,1.979,2704,2.162,2705,2.162,2706,2.252,2707,2.372,2708,2.252,2709,6.959,2710,2.372,2713,2.372,2714,2.372,2715,2.09,3089,3.72,3135,7.455,3185,1.744,3201,3.874,3249,1.797,3628,5.371,3974,7.189,3986,4.081,5139,4.482,6296,9.998,6297,5.371,6298,9.056,6299,2.555,6300,2.555,6301,2.555,6302,2.555,6303,2.555,6304,2.555,6305,2.555]],["t/2420",[2,3.503,3,3.471,38,1.594,75,4.302,82,4.857,218,3.904,377,5.067,378,4.453,381,3.212,390,0.808,409,3.384,412,2.162,437,0.79,446,2.869,448,4.562,450,1.121,469,1.401,494,1.673,496,2.073,594,2.602,620,10.71,828,1.443,830,6.613,994,6.5,997,4.552,1167,3.594,1346,7.115,1376,5.494,1398,1.491,1446,8.211,1535,2.135,1764,3.349,2367,1.57,2378,6.882,2383,1.673,2386,3.109,2388,3.039,2479,4.761,2552,3.396,2627,2.359,2631,1.706,2632,1.782,2635,3.816,2646,1.782,2647,6.493,2651,1.673,2654,6.876,2666,1.509,2667,1.828,2669,2.823,2671,5.635,2672,6.394,2675,1.946,2688,3.039,2693,3.537,2694,4.705,2695,5.635,2700,2.027,2702,2.027,2703,4.136,2704,4.517,2708,2.027,2820,3.725,6048,11.064,6049,9.75,6306,6.393,6307,5.337,6308,2.299,6309,8.441,6310,3.039,6311,10.578,6312,4.012,6313,3.283,6314,5.337,6315,2.299,6316,2.299,6317,2.299,6318,3.189,6319,2.299,6320,2.299,6321,2.299,6322,2.299,6323,2.299,6324,2.299,6325,1.741]],["t/2422",[60,3.539,62,4.585,2626,6.97,2719,10.818]],["t/2424",[0,0.671,5,5.049,93,3.319,164,3.051,185,2.685,218,4.087,231,3.141,349,1.494,356,1.653,377,4.864,379,5.316,386,2.706,400,3.004,409,3.858,481,3.254,496,6.895,621,6.043,692,1.878,994,4.318,1003,4.483,1115,3.12,2479,5.727,2626,3.613,2627,5.132,2631,4.48,2632,4.679,2646,6.762,2647,6.609,2653,4.248,2654,4.183,2655,4.8,2656,4.941,2657,4.941,2658,4.941,2660,4.941,2661,7.14,4791,10.501,4921,7.76,5137,8.384,5139,4.679,6309,5.607,6326,5.607,6327,6.039,6328,5.323,6329,6.039,6330,6.039,6331,6.039,6332,6.039,6333,6.039,6334,6.039]],["t/2426",[0,0.91,6,2.042,56,5.412,57,5.5,76,2.307,108,3.897,132,4.855,252,3.81,298,4.736,312,6.181,320,2.971,356,2.241,357,2.199,386,3.668,437,3.7,620,6.698,749,3.777,852,3.272,877,2.995,997,5.137,1047,3.08,1699,4.205,1705,3.729,2475,4.855,2685,6.072,4715,4.897,4868,4.941,5654,6.698,5686,5.309,5963,4.987,5964,6.56,5965,4.987,5966,4.987,6038,4.114,6048,11.046,6049,9.112,6281,5.137,6294,5.67]],["t/2428",[56,5.998,57,6.096,132,5.703,298,5.564,312,6.851,386,4.309,437,4.101,749,4.436,1705,4.38,2685,7.133,4715,5.753,4868,5.805,5139,7.451,5654,7.868,5963,5.858,5964,7.271,5965,5.858,5966,5.858,6038,4.833,6281,6.034,6294,6.66,6326,8.929]],["t/2430",[56,6.027,57,6.125,132,5.747,298,5.606,312,6.883,386,4.342,437,4.121,496,5.006,749,4.47,1705,4.414,2654,6.711,4715,5.797,4868,5.849,5963,5.903,5964,7.305,5965,5.903,5966,5.903,6038,4.87,6281,6.08,6294,6.711,6335,8.997]],["t/2432",[56,5.887,57,5.984,132,5.535,298,5.4,312,6.724,386,4.182,437,4.026,496,4.821,749,4.306,972,3.923,1705,4.251,2654,6.464,3350,5.443,4715,5.583,4868,5.633,5963,5.686,5964,7.136,5965,5.686,5966,5.686,6038,5.887,6281,5.856,6286,6.052,6294,6.464,6335,10.876]],["t/2434",[6,1.567,19,1.126,30,1.519,33,2.174,42,1.725,45,2.096,56,5.743,57,5.837,66,2.16,91,2.369,109,1.461,227,3.248,270,2.559,286,5.754,298,5.192,304,2.056,312,7.217,437,3.927,749,4.14,822,3.239,939,2.78,960,2.939,1061,5.162,1063,6.958,1068,2.518,1705,4.088,2654,6.215,2744,3.55,4715,5.369,4868,5.417,5963,5.467,5964,6.962,5965,5.467,5966,5.467,6038,5.743,6278,4.755,6279,5.314,6281,7.17,6283,6.953,6286,5.82,6291,5.314,6292,5.534,6293,5.534,6294,6.215]],["t/2436",[18,4.134,73,2.484,88,2.205,109,2.272,212,5.103,309,3.728,338,3.137,352,2.362,386,4.376,437,3.356,496,5.044,616,2.8,617,2.73,658,3.356,703,4.691,882,5.156,971,4.934,974,3.478,1051,6.489,1074,5.481,1077,4.626,1291,4.988,3632,5.103]],["t/2438",[56,4.949,57,5.03,69,3.232,76,2.019,88,1.619,109,1.667,118,2.637,131,2.05,218,2.076,230,2.196,231,2.58,241,3.199,298,4.147,309,2.736,312,5.652,338,1.866,348,3.583,357,1.925,409,2.072,437,4.162,478,7.457,658,3.384,749,3.306,754,3.09,877,2.622,896,4.964,971,5.683,972,3.013,974,2.553,1053,3.125,1066,4.25,1073,5.697,1291,3.661,1386,3.724,1653,5.428,1705,3.265,2076,4.704,2350,5.305,2503,4.366,2651,5.216,3026,5.041,3071,5.428,4388,5.697,4715,4.288,4868,4.326,4880,5.428,5038,8.057,5963,4.366,5964,5.999,5965,4.366,5966,4.366,6038,3.602,6281,4.497,6294,4.964,6336,6.655,6337,6.317]],["t/2440",[56,5.507,57,5.597,69,3.597,76,1.617,82,2.511,88,1.899,109,1.335,118,2.111,131,1.751,230,1.758,231,2.066,241,3.753,298,4.865,309,2.191,312,6.29,338,1.494,348,2.869,357,1.542,437,4.009,478,8.298,658,3.766,748,3.403,749,4.591,754,2.474,759,4.611,877,2.099,896,3.974,971,6.159,972,3.534,974,2.044,1053,3.666,1066,4.986,1073,6.683,1291,4.295,1653,4.346,1705,3.83,2076,3.766,2350,4.694,2503,3.496,2626,3.433,2627,3.374,4388,4.561,4715,5.03,4868,5.075,4880,4.346,5038,6.88,5963,5.122,5964,6.675,5965,5.122,5966,5.122,6038,5.002,6041,5.058,6046,5.058,6281,5.276,6294,5.823,6336,5.328,6337,7.411,6338,5.738,6339,4.856]],["t/2442",[0,0.326,6,1.234,19,0.526,20,0.61,30,0.709,33,3.355,38,0.876,56,6.026,57,6.125,66,2.099,73,0.746,76,0.827,109,0.682,110,1.162,111,1.542,131,0.611,153,2.753,185,1.304,215,1.561,227,1.789,228,1.082,252,1.365,270,1.196,286,6.525,298,5.606,304,0.961,309,1.12,310,1.073,312,6.883,315,1.748,316,0.924,320,1.065,339,2.434,340,2.499,343,2.281,349,1.585,350,2.621,352,1.55,356,0.803,358,1.204,359,1.359,437,4.047,496,3.311,562,2.675,570,1.082,602,0.941,661,1.396,692,1.993,704,1.571,749,4.47,956,1.006,960,3.469,972,1.233,974,1.045,1068,1.176,1153,1.437,1386,3.909,1506,2.63,1507,2.332,1550,2.176,1555,3.012,1600,2.097,1602,1.841,1603,1.975,1606,1.524,1614,1.542,1674,1.841,1689,2.135,1705,4.414,1708,1.659,1709,1.459,2350,1.383,2505,1.975,2651,3.598,2654,3.424,2685,2.176,2744,1.659,2874,1.841,3260,3.286,3338,2.032,4079,1.635,4715,5.796,4868,5.849,5963,5.903,5964,7.305,5965,5.903,5966,5.903,6022,1.697,6038,6.362,6040,3.668,6048,3.93,6049,2.482,6278,5.698,6281,6.08,6282,2.586,6286,6.6,6291,2.482,6293,2.586,6294,6.711,6340,2.724,6341,4.358,6342,2.586,6343,2.933,6344,2.933,6345,2.933,6346,2.933,6347,2.933,6348,4.944,6349,2.933,6350,4.944,6351,2.933]],["t/2444",[6,1.895,35,3.108,110,3.008,131,2.133,352,2.478,355,2.98,357,3.333,430,4.083,437,3.521,496,3.925,526,4.264,620,6.216,754,4.417,778,4.505,967,3.902,972,4.306,1506,3.118,1911,6.429,2350,5.467,2466,5.343,2516,4.505,2626,6.129,2627,6.024,2666,4.986,2690,6.568,2806,4.361,3260,5.048,5499,6.038,6038,3.818,6039,6.696,6040,5.635,6044,6.038,6048,9.213,6286,4.927,6352,7.597,6353,6.429,6354,8.67,6355,7.054]],["t/2446",[78,6.388,212,5.771,315,3.011,339,5.436,340,3.668,349,2.731,1003,5.672,1173,6.791,2350,5.208,6038,5.549]],["t/2448",[69,3.087,82,4.115,437,3.231,496,4.857,692,2.924,749,4.338,974,3.349,1040,4.733,1691,7.12,1705,4.283,2350,6.349,2626,5.625,2627,5.529,2751,7.12,5686,7.632,6038,6.766,6039,10.373,6040,6.974,6041,8.287]],["t/2450",[437,3.968,692,3.59,1468,9.446,6038,5.802,6042,10.176]],["t/2452",[778,6.91,2350,5.495,3350,6.795,6038,5.856]],["t/2454",[38,3.16,88,2.39,437,3.636,778,7.502,906,5.036,960,3.465,2350,6.382,3282,6.171,4346,9.383,6038,6.358]],["t/2456",[322,4.571,1717,7.953,2350,5.495,6038,5.856]],["t/2458",[5581,7.79,6038,5.966]],["t/2460",[41,2.5,2731,6.279,6038,5.856,6043,9.86]],["t/2462",[41,2.477,2731,6.222,6038,5.802,6043,9.77,6044,9.177]],["t/2464",[41,2.5,6038,5.856,6045,10.818,6046,10.27]],["t/2466",[0,1.111,77,6.504,99,4.116,320,3.627,349,2.472,352,2.418,356,2.736,437,3.435,496,6.314,1869,5.532,2350,6.227,2475,5.928,3338,8.465,6356,10.001,6357,9.256]],["t/2468",[56,4.691,57,4.767,162,6.73,226,5.317,437,3.207,749,4.306,799,7.418,1386,4.849,1705,4.251,1878,8.871,2350,5.525,2390,5.856,2723,8.666,2806,5.358,4868,5.633,5524,6.202,5963,5.686,5964,7.136,5965,5.686,5966,5.686,6038,4.691,6044,7.418,6353,7.898,6354,7.898,6357,7.068,6358,9.333]],["t/2470",[33,3.208,56,5.86,57,5.956,66,1.911,286,5.94,298,5.36,312,6.693,437,3.184,749,4.274,960,3.034,1386,4.814,1705,4.22,4715,5.542,4868,5.592,5524,6.156,5963,5.644,5964,7.103,5965,5.644,5966,5.644,6038,5.86,6281,5.813,6286,6.008,6294,6.416,6341,8.166,6342,8.166,6353,7.84,6354,7.84]],["t/2472",[0,0.746,19,1.686,38,2.005,56,4.728,57,4.806,81,5.711,82,2.937,115,1.748,162,6.517,174,2.353,181,3.255,338,1.748,349,1.66,355,2.633,390,2.36,425,2.657,426,2.39,437,3.233,642,5.334,683,2.718,686,3.528,718,2.763,749,3.096,753,5.319,754,4.056,756,4.939,758,5.532,841,2.158,844,3.55,875,3.304,882,2.872,1003,3.447,1074,3.767,1091,4.884,1317,3.151,1386,3.487,1705,3.057,1728,3.209,1738,4.352,2165,4.978,2350,5.552,2806,3.853,2944,3.98,3282,3.914,3821,6.231,3887,3.689,3888,3.98,4715,4.015,4868,4.051,5047,5.082,5603,4.72,5719,7.697,5963,4.089,5964,5.731,5965,4.089,5966,4.089,6038,3.373,6044,5.334,6150,5.334,6359,6.711,6360,6.711]],["t/2474",[19,1.835,37,3.563,38,3.058,39,3.656,76,2.885,109,2.885,187,5.382,338,3.229,548,5.066,616,2.936,617,2.862,658,3.518,882,4.382,1074,5.747,1128,4.029,2350,4.829,2848,5.924]],["t/2476",[39,3.042,41,2.885,42,3.696,44,4.214,53,3.01,54,6.444,160,3.848,242,4.065,312,4.889,341,3.543,548,4.214,616,2.443,773,3.438,778,5.051,1124,3.205,1142,5.589,1386,4.425,1627,5.284,2228,7.084,2350,4.017,2755,4.327,2834,6.885,2844,4.928,2845,6.198,2846,5.813,2847,6.599,3889,6.969,4329,7.507,6038,4.28,6281,5.344]],["t/2478",[19,1.243,20,1.441,33,2.4,39,2.475,41,2.691,42,3.447,44,3.43,49,2.924,53,2.45,54,5.612,66,1.43,88,1.566,115,1.805,125,2.762,160,3.131,242,3.54,286,4.444,312,3.979,315,1.89,320,2.515,341,2.883,346,3.33,548,3.43,616,3.17,617,2.69,749,3.198,773,2.798,852,2.771,960,2.27,1053,3.022,1057,4.731,1124,2.608,1142,4.549,1155,3.465,1386,3.601,1627,4.601,2228,6.169,2278,4.444,2610,3.979,2623,4.875,2755,3.521,2831,4.667,2834,6.702,2844,4.01,2845,5.045,2846,4.731,2847,5.371,2848,4.01,2849,5.045,3889,5.672,4329,6.11,5524,4.606,6038,4.836,6281,4.35,6286,4.495,6341,6.11,6342,6.11,6353,5.866,6354,5.866]],["t/2480",[3,3.787,19,1.865,39,3.716,83,4.021,88,2.35,225,3.559,342,3.051,349,2.574,380,5.376,405,4.908,623,6.34,624,7.441,2732,6.915,2837,8.515,4244,7.881,5947,7.006,6361,8.272]],["t/2482",[27,2.565,28,2.07,30,1.774,41,1.573,66,2.063,72,2.483,196,4.204,197,3.185,226,4.178,227,4.425,229,3.523,244,2.181,270,4.077,304,3.728,748,4.349,749,3.383,764,5.337,771,6.611,966,3.952,1135,5.005,1291,3.746,1330,3.273,1333,5.553,1334,2.69,1386,3.81,1674,4.601,2726,5.439,2727,7.884,2730,5.553,2731,6.896,2732,4.873,2733,5.574,2734,6.215,2736,4.426,2737,4.387,2738,4.146,2739,7.315,2740,5.243,2741,9.048,2742,5.337,2743,4.087,2744,4.146]],["t/2484",[0,0.758,22,1.792,27,2.385,28,1.925,30,1.649,41,1.463,66,1.962,72,2.309,196,3.999,197,4.132,226,3.885,227,4.291,229,3.277,244,2.028,270,3.878,304,3.588,748,4.044,749,3.146,764,4.963,771,6.441,966,3.675,1135,4.655,1149,4.279,1291,3.484,1330,3.044,1674,4.279,1680,4.591,1705,3.106,2625,5.58,2637,8.77,2641,4.591,2644,4.963,2724,5.284,2726,5.058,2727,4.723,2730,5.165,2731,6.719,2732,4.532,2733,5.302,2734,5.982,2735,9.272,2736,4.116,2737,4.08,2738,3.856,2739,7.092,2740,4.876,2741,8.708,2742,4.963,2743,3.801,2744,3.856]],["t/2486",[0,1.121,1,2.81,3,1.768,4,1.393,5,4.294,22,2.65,23,2.468,27,2.596,28,1.371,30,1.175,37,1.69,38,1.451,47,2.477,56,5.757,57,5.851,66,1.531,69,2.957,73,1.236,83,1.877,85,1.987,88,1.097,218,1.407,226,2.767,227,3.26,342,1.424,390,2.61,394,3.339,409,2.146,437,4.491,447,2.959,598,2.688,653,2.524,692,1.511,755,3.692,822,1.377,875,2.391,906,3.533,1061,3.353,1063,3.902,1629,2.186,2076,4.871,2350,5.796,2587,10.038,2633,4.261,2742,3.535,2744,2.747,2895,9.759,2941,3.861,2942,8.875,2943,9.472,3495,7.37,4191,3.08,4245,3.603,5603,5.221,6044,9.104,6281,7.187,6362,6.892,6363,7.422,6364,4.282,6365,4.858,6366,3.473]],["t/2488",[3,3.553,5,5.649,218,2.829,310,3.573,390,4.236,394,4.393,409,3.483,437,4.49,598,5.404,755,4.856,875,4.807,906,4.648,2076,6.408,2350,6.163,5603,6.868,6038,4.908,6281,6.127,6282,8.607,6366,6.982]],["t/2490",[12,3.258,19,2.213,20,1.795,42,3.063,89,3.919,109,2.009,115,2.248,176,5.211,183,3.345,294,3.736,352,2.088,444,4.719,644,6.653,648,8.102,652,4.745,688,3.853,696,4.148,990,5.86,1033,6.403,1047,3.248,1502,5.666,2350,5.257,2633,6.399,2731,6.007,3308,7.064,4370,8.112,5947,5.812,6367,8.633]],["t/2492",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2495",[88,2.276,131,2.098,615,4.589,680,6.322,848,8.527,877,3.686,1144,4.411,1581,4.936,1793,5.656,1804,5.576,1889,5.235,1994,8.527,3922,7.332,4079,5.615,6145,9.355,6368,10.075,6369,9.355]],["t/2497",[37,2.508,38,2.952,60,3.427,62,2.836,76,2.031,83,2.785,88,2.548,92,2.602,110,2.854,115,1.877,122,2.334,131,1.501,164,4.995,168,3.935,174,2.528,219,3.662,223,4.477,241,3.217,276,4.571,296,2.881,349,2.445,356,1.973,403,3.702,444,3.051,467,3.415,474,3.884,514,2.785,521,4.17,570,2.659,658,2.477,882,3.085,913,3.549,1144,4.48,1175,5.729,1328,3.34,1461,4.351,1488,5.246,1926,4.106,1992,5.585,2233,4.138,2511,4.312,2753,3.702,3425,5.898,3922,7.271,5266,4.992,5394,5.585,6370,4.73,6371,7.208,6372,7.208,6373,6.693,6374,7.208,6375,7.208,6376,7.208]],["t/2499",[0,1.327,73,2.446,88,2.172,92,4.308,225,3.288,231,3.462,243,6.274,336,4.535,342,2.82,349,2.952,356,2.632,391,6.034,392,4.399,444,4.071,1144,3.974,1328,4.456,1614,5.055,2753,4.94,3922,6.605,5266,6.66,6370,6.311]],["t/2501",[0,1.407,20,1.659,26,3.979,60,3.216,62,4.166,76,2.248,92,2.88,109,1.857,122,2.584,146,3.366,150,3.764,333,3.89,352,1.93,519,5.501,520,5.705,1121,7.381,1144,3.956,1361,3.89,1628,5.613,1629,3.59,1630,8.114,1631,4.774,1632,5.919,1633,6.529,2874,5.007,3922,7.491,6377,5.527,6378,7.333,6379,7.98,6380,7.98]],["t/2503",[0,1.267,60,2.715,62,3.517,73,2.274,88,2.019,92,3.226,112,5.73,115,2.968,122,2.894,345,4.315,352,2.162,434,4.981,519,4.644,520,4.816,658,3.071,688,3.989,901,6.19,1121,6.647,1136,5.131,1144,3.795,1709,4.445,2125,5.551,2345,6.629,2753,4.591,3193,5.347,3711,5.796,3726,8.631,3922,6.945,6370,5.866,6378,6.19]],["t/2506",[76,3.253,168,6.303,169,6.262,427,7.321,1763,8.945]],["t/2508",[76,2.773,83,3.802,92,3.552,109,2.289,174,3.451,181,4.773,184,4.797,230,3.708,242,3.62,357,2.644,687,6.539,703,4.728,877,3.6,882,4.211,1144,4.031,1317,4.62,1640,6.442,1790,4.728,2753,5.055,3922,5.446,4185,8.052]],["t/2510",[26,3.143,60,3.712,76,2.816,81,4.849,83,4.722,92,3.608,154,5.98,414,7.57,434,5.571,621,4.612,745,4.075,849,6.339,864,6.148,920,7.745,1790,4.803,4911,7.745,6381,10.001,6382,11.349]],["t/2512",[76,2.689,81,4.629,83,4.589,92,3.445,215,5.079,427,6.052,621,4.403,689,5.814,745,4.842,849,7.533,920,7.395,1144,3.955,1668,7.079,1790,4.585,2033,5.87,2108,7.079,3922,5.282,6381,7.809,6382,11.029,6383,9.544,6384,9.544,6385,9.544,6386,9.544]],["t/2514",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2517",[0,0.882,6,3.149,9,4.687,39,2.832,122,2.567,211,3.81,228,2.925,243,4.169,335,4.246,349,1.961,356,2.171,401,3.597,583,4.926,658,2.725,841,2.55,844,5.576,852,3.17,864,4.877,1047,2.984,1075,5.029,1076,3.965,1096,4.843,1157,3.123,1269,5.492,1300,4.42,1324,4.42,1325,6.006,1518,4.341,1880,5.719,1942,3.643,2187,4.831,2271,6.303,2436,6.144,3236,10.024,3237,7.539,3327,4.518,3950,7.363,5111,7.098,6387,10.543,6388,7.93,6389,7.93]],["t/2519",[20,1.649,33,3.651,39,3.765,42,2.897,45,4.213,53,4.873,66,2.175,125,3.16,131,1.651,153,5.088,394,5.329,396,4.33,425,3.14,717,4.169,940,3.419,941,4.484,1124,2.984,1157,3.509,1517,3.775,1520,4.073,1521,4.625,1522,4.787,1523,6.052,1589,5.882,1590,6.303,1592,7.821,1880,6.424,2172,7.363,5372,6.711,5812,5.143,6390,10.543]],["t/2522",[6,2.455,115,2.562,122,3.186,131,2.848,357,2.644,415,7.179,429,4.662,817,5.739,1880,6.566,2511,7.242,4145,6.815,4389,6.717,6391,9.905,6392,10.245,6393,8.328,6394,8.328]],["t/2524",[12,3.96,89,3.689,94,8.88,114,6.394,122,3.397,131,2.621,190,7.636,256,6.654,663,5.331,1506,4.306,1941,6.517,5088,8.13,6395,8.585,6396,7.162]],["t/2526",[0,0.887,6,1.991,72,2.702,73,2.03,77,4.247,110,3.16,242,3.895,315,2.176,339,5.212,340,3.517,355,3.13,356,2.184,401,3.62,704,4.273,777,7.308,817,4.654,879,5.501,1047,3.003,1157,3.749,1312,7.172,1880,7.342,2666,5.237,2669,7.159,3196,4.273,4560,4.654,4926,8.663,5111,7.999,5996,6.529,5997,7.41,5998,7.034]],["t/2528",[20,2.181,72,3.553,73,3.202,83,4.054,88,2.37,98,3.797,112,6.727,131,2.185,338,2.732,339,5.166,340,3.485,1053,4.575,1709,5.219,2669,5.55,2884,7.636]],["t/2530",[41,2.775,70,5.479,218,2.765,307,3.903,391,5.989,392,4.366,602,3.062,777,7.306,822,3.367,950,7.454,1157,3.519,1880,6.443,2669,6.84,3196,6.361,3282,5.566,4926,7.809,5995,8.862,6397,9.544]],["t/2532",[0,1.202,22,2.165,60,2.503,62,3.242,103,3.785,225,2.818,307,4.423,391,5.17,392,3.769,452,4.333,453,4.036,454,5.624,455,6.112,519,4.281,520,4.44,602,2.643,1926,7.3,2669,5.719,3196,6.463,3268,7.263,3626,6.24,4911,6.384,6398,8.848,6399,8.24,6400,8.24,6401,8.24,6402,8.24,6403,8.24,6404,10.813,6405,13.657,6406,8.24,6407,8.24]],["t/2534",[6,2.575,47,3.445,49,4.354,73,2.626,99,4.25,131,2.149,174,3.62,211,4.959,464,4.89,615,4.702,956,3.538,1088,6.477,1157,3.058,1880,5.598,2466,7.26,2669,5.459,3118,7.26,3196,5.527]],["t/2536",[0,1.256,6,2.199,9,3.918,22,2.316,28,2.488,47,2.941,49,3.718,66,1.818,73,2.242,99,3.629,131,1.835,144,5.784,174,3.961,193,3.198,211,4.234,464,4.176,756,3.512,920,6.829,956,3.021,1157,3.346,1578,4.361,1634,3.918,1880,6.127,2669,4.661,2944,5.227,3184,6.674,3196,4.719,3887,4.844,3888,5.227,5726,7.71,5727,7.005,5728,7.005,5729,8.978]],["t/2538",[0,1.078,3,1.997,4,2.334,20,2.016,28,1.55,30,1.328,35,2.182,37,1.91,38,1.64,41,2.301,66,2,70,7.608,73,1.396,76,1.547,88,1.24,91,2.071,109,1.277,118,2.994,122,1.777,135,2.223,184,2.676,228,2.025,230,1.682,338,1.429,340,1.823,342,1.61,348,2.744,349,1.358,352,1.968,355,2.153,358,2.253,383,2.532,400,2.73,413,2.238,426,1.955,452,1.971,453,2.689,578,6.065,735,2.134,822,3.519,876,3.255,877,2.008,1053,2.393,1076,2.744,1562,3.603,1581,2.689,1713,3.575,1848,6.468,1873,2.543,1874,2.589,1880,2.977,1942,2.522,2131,5.097,2156,6.877,2358,3.995,2608,4.646,2669,6.89,2915,5.541,3050,5.097,3106,5.193,3196,6.649,3916,3.696,5111,3.696,6408,5.097,6409,11.53]],["t/2540",[0,1.061,19,1.711,92,4.287,115,3.093,174,3.347,308,4.012,348,4.771,356,2.613,400,4.747,486,4.675,735,3.71,1047,3.591,1324,5.319,1781,9.794,1880,5.176,1942,4.384,2669,5.048,3160,7.809,3196,5.111,4186,9.593,4926,7.809,6408,8.862]],["t/2542",[4,2.091,19,1.307,76,3.198,83,2.817,88,1.647,92,3.596,98,2.639,109,2.64,114,5.061,115,1.898,122,3.225,137,3.537,153,3.132,154,4.362,190,7.25,254,6.707,256,4.623,322,2.86,338,1.898,357,1.959,400,3.626,842,7.057,852,2.914,877,2.668,974,3.549,1124,2.743,1151,4.728,1344,3.267,1506,2.992,1566,4.88,1614,3.833,1880,3.954,2021,5.965,2679,4.324,4079,4.063,4107,6.77,4145,5.05,4560,5.811,5111,6.707,6391,5.965,6395,5.965,6396,4.977,6410,9.021,6411,10.538,6412,6.77,6413,6.426,6414,6.426,6415,9.962]],["t/2544",[0,0.91,6,2.042,49,3.453,115,2.132,118,3.012,174,3.776,316,2.58,349,2.025,352,3.297,443,6.386,486,4.01,658,3.7,725,5.249,727,4.5,845,6.28,869,5.758,913,4.03,1047,3.08,1115,4.229,1573,6.2,1869,4.531,1880,6.933,2669,4.33,2798,6.2,2799,5.958,3327,6.854,4145,5.67,4560,6.28,5111,7.249,5861,6.698,5996,6.698,6416,8.343]],["t/2547",[38,2.688,72,3.048,73,2.29,76,2.536,88,2.993,96,5.282,98,4.144,109,2.094,174,3.156,253,5.385,302,4.189,307,3.681,308,3.784,316,3.608,349,2.226,352,2.177,702,5.648,725,4.388,869,6.331,913,4.431,974,3.206,1047,3.387,1069,6.551,2669,4.761,3010,7.934,3327,5.128,4145,7.929,5996,7.365,6416,6.974]],["t/2549",[88,2.516,131,2.319,136,4.699,174,4.573,352,2.694,443,6.606,913,5.484,1880,6.042]],["t/2551",[0,1.008,30,2.193,44,4.486,66,2.606,193,3.29,196,3.811,197,3.938,225,3.1,236,4.854,267,4.463,342,2.658,350,3.708,352,2.193,356,2.482,562,3.784,655,7.418,1505,6.103,1738,5.879,2725,8.089,2806,5.204,3113,6.482,4911,9.788,5875,7.991,6417,11.501,6418,9.065,6419,12.632,6420,9.065]],["t/2553",[6,2.004,35,3.402,92,3.838,114,4.08,115,2.091,131,2.482,278,4.274,322,3.15,357,3.408,430,3.797,842,6.896,1038,3.542,1157,2.379,1506,3.295,1566,3.934,1578,3.974,1798,4.385,1826,5.407,1880,6.465,2244,4.988,4111,5.742,4389,5.482,4560,6.201,5111,7.158,6391,6.571,6392,8.998,6393,6.796,6394,6.796,6395,6.571,6396,5.482,6410,6.383,6413,7.079,6414,7.079,6421,7.457]],["t/2555",[26,2.374,27,2.641,50,4.209,60,2.294,62,2.972,72,2.557,73,1.921,76,2.128,92,2.726,109,1.757,139,4.956,183,2.926,187,3.97,213,4.441,218,2.188,225,2.582,230,2.313,296,3.019,307,3.089,345,4.926,380,3.901,381,3.344,398,5.075,403,3.879,415,7.901,416,6.179,426,2.69,475,5.155,514,2.918,547,5.496,841,2.428,842,4.369,911,4.558,1077,3.578,1124,2.842,1308,5.496,1319,3.454,1324,4.209,1734,4.842,1804,4.179,2510,4.369,2511,6.913,4169,7.012,4387,5.496,6410,9.837,6411,11.492,6422,7.552,6423,6.656]],["t/2557",[19,1.649,25,4.419,26,2.892,60,2.794,62,3.619,76,2.591,84,4.807,89,3.234,136,3.88,146,3.88,218,2.664,225,3.145,336,4.338,342,3.403,361,3.787,381,4.072,415,5.454,514,3.553,667,5.713,1004,6.37,1056,5.321,1734,5.897,1772,5.163,2510,5.321,2511,5.502,2512,6.576,2612,8.107,3237,6.576,4911,8.993,6395,7.525,6424,9.197]],["t/2559",[91,1.08,415,4.082,420,3.961,642,2.274,671,1.332,818,1.205,1208,1.288,1621,2.979,1965,1.251,2511,0.941,2669,0.832,3066,2.656,3273,3.329,3729,1.461,4145,6.632,4390,3.467,4475,4.267,4478,3.467,4511,1.461,4575,5.547,4798,2.656,4823,1.461,4858,3.652,4998,1.251,5223,1.332,5423,2.656,5601,1.461,6175,3.329,6398,2.341,6425,2.861,6426,2.861,6427,2.861,6428,2.861,6429,2.861,6430,3.934,6431,1.574,6432,10.486,6433,10.285,6434,1.574,6435,1.574,6436,1.574,6437,1.574,6438,1.574,6439,1.574,6440,1.574,6441,1.574,6442,1.574,6443,1.574,6444,1.574,6445,1.574,6446,1.574,6447,1.574,6448,1.574,6449,1.574,6450,1.574,6451,1.574,6452,1.574,6453,1.574,6454,1.574,6455,1.574,6456,1.574,6457,2.861,6458,4.841,6459,1.574,6460,1.574,6461,1.574,6462,1.574,6463,1.574,6464,2.861,6465,3.934,6466,5.619,6467,3.934,6468,3.934,6469,3.934,6470,2.861,6471,3.934,6472,3.934,6473,2.861,6474,3.934,6475,11.439,6476,2.861,6477,1.574,6478,3.934,6479,3.934,6480,4.841,6481,3.934,6482,3.934,6483,1.574,6484,6.883,6485,1.574,6486,2.861,6487,1.574,6488,1.574,6489,1.574,6490,1.574,6491,1.574,6492,1.574,6493,1.574,6494,1.574,6495,3.934,6496,3.934,6497,3.934,6498,3.934,6499,3.934,6500,1.574,6501,2.861,6502,2.861,6503,1.574,6504,1.574,6505,2.861,6506,1.574,6507,4.841,6508,4.841,6509,2.861,6510,9.831,6511,1.574,6512,1.574,6513,1.574,6514,1.574,6515,2.861,6516,1.574,6517,1.574,6518,1.574,6519,1.574,6520,1.574,6521,1.574,6522,1.574,6523,1.574,6524,1.574,6525,1.574,6526,3.934,6527,1.574,6528,1.574,6529,1.574,6530,1.574,6531,1.574,6532,1.574,6533,1.574,6534,1.574,6535,2.861,6536,3.934,6537,3.934,6538,2.861,6539,1.574,6540,2.861,6541,2.861,6542,1.574,6543,1.574,6544,1.574,6545,2.861,6546,2.861,6547,7.403,6548,7.403,6549,2.861,6550,2.861,6551,1.574,6552,1.574,6553,3.934,6554,2.861,6555,3.934,6556,2.861,6557,3.934,6558,3.934,6559,1.574,6560,6.391,6561,6.883,6562,1.574,6563,1.461,6564,1.574,6565,2.861,6566,3.934,6567,1.574,6568,2.861,6569,2.861,6570,8.279,6571,2.861,6572,1.461,6573,1.574,6574,2.861,6575,2.421,6576,1.574,6577,3.652,6578,3.934,6579,1.574,6580,2.861,6581,3.934,6582,4.841,6583,2.861,6584,3.934,6585,1.574,6586,2.861,6587,2.861,6588,2.861,6589,2.861,6590,2.861,6591,2.861,6592,2.861,6593,2.861,6594,2.861,6595,2.861,6596,3.934,6597,1.574,6598,2.861,6599,2.861,6600,3.934,6601,3.934,6602,3.934,6603,3.934,6604,2.861,6605,1.574,6606,3.934,6607,1.574,6608,1.574,6609,1.574,6610,1.574,6611,2.861,6612,3.934,6613,3.934,6614,5.619,6615,1.574,6616,1.574,6617,1.574,6618,1.574,6619,3.934,6620,3.934,6621,4.841,6622,4.841,6623,1.574,6624,1.574,6625,3.934,6626,2.861,6627,2.861,6628,1.574,6629,4.841,6630,4.841,6631,2.861,6632,2.861,6633,2.656,6634,2.861,6635,2.861,6636,3.934,6637,3.934,6638,2.861,6639,3.934,6640,1.574,6641,11.01,6642,1.574,6643,1.574,6644,1.574,6645,1.574,6646,1.574,6647,1.574,6648,1.574,6649,1.574,6650,1.574,6651,1.574,6652,4.841,6653,1.574,6654,1.574,6655,1.574,6656,1.574,6657,1.574,6658,1.574,6659,1.574,6660,1.574,6661,1.574,6662,1.574,6663,1.574,6664,1.574,6665,1.574,6666,1.574,6667,1.574,6668,1.574,6669,1.574,6670,1.574,6671,1.574,6672,2.861,6673,2.861,6674,1.387,6675,1.574,6676,4.841,6677,2.861,6678,2.861,6679,2.656,6680,2.861,6681,2.861,6682,2.861,6683,2.861,6684,2.861,6685,3.934,6686,3.934,6687,2.861,6688,1.574,6689,2.861,6690,3.934,6691,1.574,6692,2.861,6693,2.861,6694,1.574,6695,1.574,6696,5.619,6697,3.934,6698,2.861,6699,2.861,6700,3.934,6701,1.574]],["t/2561",[0,1.102,113,4.169,155,4.244,225,3.391,336,4.677,338,2.582,342,2.908,452,4.367,467,4.699,672,3.939,694,4.765,696,4.765,832,4.184,833,4.214,1156,5.763,1157,3.897,1880,5.379,2211,5.986,3237,7.091]],["t/2564",[9,4.091,19,1.65,38,2.749,60,1.976,117,5.555,155,2.784,219,3.304,225,2.224,296,2.6,317,4.404,336,3.068,342,1.907,437,2.235,452,4.168,467,3.082,514,2.513,591,3.269,609,5.04,610,5.04,618,3.857,692,2.023,696,3.125,698,3.6,699,2.847,702,4.081,727,3.575,754,2.804,836,3.763,841,2.959,872,4.825,874,5.04,941,6.928,1062,7.444,1100,4,1156,3.082,1157,2.726,1194,4.379,1228,3.575,1236,4.926,1518,4.397,1526,5.322,1641,3.575,1772,3.651,1793,3.651,1829,4.125,1856,4.081,2000,5.322,2161,5.04,2210,5.831,2509,3.461,2683,4.379,3638,4.218,3906,5.733,4195,6.374,4435,5.322,4892,6.039,4904,5.505,5777,6.039,5861,5.322,6702,6.504,6703,6.504,6704,6.504,6705,6.504,6706,6.039]],["t/2567",[53,3.902,70,6.339,260,6.929,270,4.501,304,3.616,712,5.397,1330,4.928,4936,8.555,5388,8.362]],["t/2569",[0,1.102,22,3.196,38,2.962,53,4.299,116,3.964,260,6.223,261,6.509,270,4.043,304,3.248,433,5.738,437,3.408,712,5.06,714,7.214,941,5.608,1047,3.732,1077,4.699,1102,6.869,1362,7.217,4313,6.869]],["t/2571",[53,5.019,70,7.119,260,6.424,270,4.173,304,3.353,409,2.96,712,5.159,770,5.877,1330,4.569,5388,7.754,5453,10.917]],["t/2573",[26,2.79,53,3.136,60,2.696,62,3.492,146,3.744,218,2.571,342,2.602,381,3.93,415,5.263,444,3.757,452,3.186,514,3.429,1157,2.629,1734,5.69,1820,4.723,2079,9.284,2509,4.723,2510,5.135,2511,5.309,2512,6.346,2612,7.823,5453,10.234,6050,7.054,6707,12.507,6708,12.507,6709,11.346,6710,8.875,6711,11.346,6712,8.875]],["t/2575",[6,2.64,22,2.78,53,3.739,73,2.692,166,5.777,185,4.703,340,3.514,352,3.273,453,5.183,652,5.816,941,5.983,974,3.769,2256,6.027]],["t/2577",[22,2.417,35,2.466,38,2.747,41,2.49,49,3.88,53,3.25,91,3.471,244,2.736,270,3.749,304,3.012,712,5.29,714,6.883,724,5.897,941,5.2,2891,5.454,5845,7.126,6416,10.348,6423,11.209,6713,11.808,6714,8.54,6715,8.54,6716,8.54]],["t/2579",[19,1.006,20,1.166,22,2.173,27,1.963,28,1.584,30,2,32,4.374,33,1.943,35,1.505,37,1.953,38,1.676,41,1.774,49,2.367,53,2.923,66,2.494,69,1.842,83,2.168,91,2.117,109,1.305,122,1.817,136,2.367,139,3.682,154,3.357,165,3.387,185,3.677,196,2.359,197,2.437,227,2.031,244,1.669,259,2.658,270,2.287,304,1.838,315,1.53,340,3.263,352,2,361,4.463,410,3.024,652,3.084,703,2.696,712,4.086,714,6.855,724,3.597,939,2.484,940,2.419,941,7.257,990,4.348,1124,3.112,1269,3.886,1519,3.866,1521,5.729,1522,3.387,1523,3.221,1895,3.729,2278,3.597,2891,3.328,4314,3.946,6050,6.574,6105,4.748,6232,4.162,6416,8.399,6423,8.658,6713,9.121,6714,5.21,6715,5.21,6716,5.21,6717,5.611,6718,8.313,6719,6.999,6720,8.313,6721,5.21,6722,7.68,6723,5.21]],["t/2581",[6,1.094,20,0.912,22,1.802,27,2.399,28,1.936,30,2.043,32,3.628,35,1.839,38,2.853,39,3.017,49,2.894,53,1.55,66,2.452,69,1.44,72,2.323,75,2.601,83,2.65,88,1.549,109,1.021,122,1.42,139,4.502,153,1.884,166,2.395,196,4.015,197,4.149,227,2.483,244,1.305,259,3.25,270,2.796,304,2.247,316,3.463,340,2.806,343,3.165,350,1.794,357,1.178,359,2.032,361,1.806,403,2.253,430,1.313,602,1.407,652,2.411,653,2.279,712,3.974,714,7.41,771,6.455,822,2.394,823,3.931,877,1.605,941,5.401,974,1.562,990,2.306,1036,1.877,1053,1.913,1124,3.178,1163,2.462,1164,2.428,1334,2.517,1446,2.994,1519,3.206,1521,4.001,1553,2.538,2316,2.379,2318,3.866,2733,5.324,2734,6.001,2743,3.823,3263,3.487,4191,2.782,4314,4.825,5807,6.369,6050,5.452,6232,5.088,6718,10.339,6719,8.773,6720,9.301,6721,4.073,6722,6.369,6723,4.073]],["t/2583",[45,3.531,73,2.692,345,5.108,352,2.559,396,6.907,437,4.347,488,6.446,941,5.983,1119,6.639,1124,3.981,1565,6.862,1646,4.86,2019,9.326]],["t/2585",[39,3.779,73,3.218,259,5.013,350,5.174,352,3.059,359,4.902,548,5.235,836,7.319,941,5.983,1869,5.856,4060,8.41]],["t/2587",[20,2,22,1.821,27,2.425,28,1.957,30,1.676,38,2.07,39,3.947,49,2.924,66,2.28,72,2.347,73,1.763,139,4.549,181,3.362,183,2.686,196,4.045,197,4.179,227,2.509,259,4.559,270,2.826,281,5.142,304,2.27,320,2.515,350,2.835,352,2.327,359,3.212,425,2.745,426,2.469,653,3.601,712,4.003,714,7.439,771,6.168,889,3.81,941,3.919,990,3.644,1006,3.666,1124,2.608,1581,3.396,1634,3.081,2033,4.263,2733,5.363,2734,5.253,2848,4.01,3777,4.223,4060,5.51,4191,4.396,4246,5.371,4314,4.875,6050,5.51,6232,5.142,6718,10.104,6719,8.143,6720,9.353,6724,6.436]],["t/2589",[20,1.441,22,2.528,27,2.425,28,1.957,30,1.676,38,2.07,39,2.475,41,2.064,45,2.313,49,2.924,54,4.043,66,2.28,73,1.763,88,1.566,139,4.549,161,3.644,196,4.045,197,4.179,227,2.509,259,3.284,270,2.826,281,5.142,304,2.27,343,4.439,352,1.676,359,3.212,548,3.43,653,5.742,712,4.597,714,7.439,771,6.168,867,3.979,941,3.919,1581,3.396,2733,5.363,2734,5.253,2829,2.771,2843,5.142,2844,6.394,4060,5.51,4191,7.009,4314,4.875,6050,5.51,6232,5.142,6718,10.104,6719,8.143,6720,9.353,6724,6.436]],["t/2591",[41,2.423,109,2.628,182,4.453,185,3.918,242,4.586,338,2.295,352,2.131,362,6.199,363,7.458,459,4.844,610,6.829,712,3.666,717,5.938,718,3.629,754,3.8,843,5.272,941,4.983,956,4.274,1124,3.316,1596,6.199,1889,4.579,2108,6.537,2705,7.458,3363,6.016,5567,6.829,5803,8.183,6052,10.488,6053,8.183,6725,11.296,6726,8.813]],["t/2593",[155,4.605,225,3.68,336,5.075,342,3.155,452,3.863,467,5.098,514,4.157,941,7.225,1156,5.098,1157,3.187,2161,8.337,2509,5.726]],["t/2595",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2597",[0,1.501,19,1.698,20,1.969,60,2.877,62,3.727,115,2.466,170,4.245,357,2.545,361,3.9,407,3.861,408,5.57,444,4.01,514,3.66,519,4.922,520,5.105,528,7.026,529,7.339,530,6.56,532,6.253,595,4.98,2460,5.944,2610,5.438,2866,7.026,4180,8.349,6727,8.795]],["t/2599",[9,4.059,12,3.446,38,3.451,81,4.429,92,3.296,176,5.512,302,5.377,343,4.212,349,2.258,466,5.854,541,8.408,568,8.048,570,3.368,614,3.227,616,2.619,1202,7.727,1328,4.231,1604,6.773,1658,5.053,1764,5.729,1880,4.953,3561,8.048,3712,7.258,5586,6.773,6728,9.131,6729,9.131,6730,13.32,6731,9.131]],["t/2601",[0,1.428,19,1.945,140,4.53,211,5.214,356,2.971,361,4.468,407,4.424,533,6.492,541,9.346,2209,8.626]],["t/2603",[19,1.698,20,1.969,42,3.709,76,2.669,91,3.575,109,2.204,122,3.067,244,3.517,352,3.117,541,6.894,774,5.279,939,4.194,1617,6.143,1960,4.447,2262,4.146,2874,5.944,6732,13.498,6733,9.472,6734,9.472,6735,9.472]],["t/2605",[4,2.8,20,2.03,66,2.014,73,2.484,88,2.205,196,4.105,197,4.241,338,2.543,343,4.505,350,3.994,359,4.524,394,4.393,602,3.133,2114,7.566,2263,4.934,2264,4.856,6736,12.133,6737,10.62,6738,12.026]],["t/2607",[30,1.598,35,1.771,41,2.877,56,4.676,57,4.753,66,2.222,222,7.283,244,3.203,272,5.617,291,6.183,304,3.829,712,3.87,773,4.974,818,2.024,822,3.723,1108,5.223,1620,6.221,1713,4.088,1904,6.264,1905,6.444,2833,6.183,3168,7.395,3692,7.395,6737,8.201,6738,8.201,6739,9.304,6740,9.304,6741,10.77,6742,9.304,6743,10.855,6744,6.606]],["t/2609",[41,2.162,73,2.563,242,4.518,310,3.686,320,3.656,355,3.952,452,3.617,541,7.332,570,3.717,617,2.817,712,5.109,1122,5.538,1157,2.985,1470,6.322,2821,7.63,6736,9.355,6737,8.881,6738,8.881,6745,10.075]],["t/2611",[0,1.157,155,4.454,338,2.71,452,4.497,467,4.931,541,9.115,672,4.134,694,5,832,4.39,833,4.421,1156,5.934,1157,3.71,2338,7.881]],["t/2613",[110,3.958,125,3.983,131,2.545,153,4.294,211,4.803,425,3.958,740,5.83,882,4.278,974,3.56,1144,4.07,1506,4.102,1534,6.034,1610,5.845,1614,5.255,1699,5.135,2166,6.482,2169,6.911,2599,5.387]],["t/2615",[38,2.727,72,3.092,98,3.305,165,5.512,308,3.838,323,5.125,352,2.208,401,4.142,562,3.811,570,3.368,836,5.283,1032,7.727,1205,7.727,1604,6.773,2166,7.492,5806,8.478,6746,9.131,6747,9.131,6748,11.553,6749,9.131,6750,13.32,6751,9.131,6752,8.478,6753,9.131,6754,11.553,6755,11.553,6756,9.131]],["t/2617",[89,3.629,103,4.742,570,4.939,692,3.21,841,3.319,1076,5.16,1109,9.438,2166,6.694,2233,5.925,3344,6.618,5248,9.584,5669,8.204,6757,10.197,6758,10.322]],["t/2619",[9,3.973,18,4.825,39,3.192,88,2.019,92,3.226,103,4.106,127,5.425,243,4.699,307,3.655,314,5.866,340,3.786,356,2.447,570,3.297,614,3.159,615,4.071,621,4.123,652,4.913,658,3.071,1056,5.171,1077,4.235,1093,5.866,1154,4.786,1291,4.565,1300,4.981,1640,4.756,1658,4.946,2061,6.341,2210,4.88,2762,3.731,6759,8.937,6760,7.313,6761,7.564]],["t/2621",[0,1.379,4,2.936,6,2.554,98,4.488,103,4.703,108,4.873,356,2.803,358,4.201,570,3.777,583,6.359,1303,7.754,1856,6.424,2166,8.043,2423,9.024,2874,6.424,3913,8.664]],["t/2623",[73,2.836,108,4.109,115,2.248,131,2.716,170,3.868,276,5.475,278,4.594,352,2.696,407,3.519,457,4.846,523,6.728,960,2.827,1344,4.995,1566,5.46,1610,4.128,2061,4.362,2166,7.229,2169,4.881,2561,5.077,2828,8.637,4158,7.505,4303,7.306,6762,7.609,6763,7.306,6764,10.35,6765,10.35,6766,11.462]],["t/2625",[0,0.621,9,2.483,19,1.001,37,1.944,38,1.668,73,2.935,76,1.574,89,1.964,90,3.342,92,2.016,99,3.394,109,1.918,115,2.551,120,3.542,121,3.403,122,3.735,125,2.226,127,2.659,131,2.04,170,4.39,174,2.891,217,4.144,218,2.388,225,2.819,256,5.228,276,3.542,278,2.973,299,4.501,306,2.534,308,3.465,322,3.234,352,3.02,356,1.529,407,3.36,425,2.212,523,6.529,622,4.143,688,2.493,867,4.732,960,1.83,1053,2.436,1151,5.346,1292,3.929,1547,5.422,1610,4.685,1798,4.501,1858,4.065,2061,6.31,2166,5.346,2169,5.54,2256,3.182,2349,5.187,3093,4.23,4158,7.768,4303,4.728,4430,7.655,6762,7.267,6763,6.977,6764,5.187,6765,5.187,6766,10.044,6767,5.586]],["t/2627",[19,1.338,39,2.665,91,2.816,92,2.694,96,3.443,97,4.732,103,4.65,109,2.355,115,2.636,117,4.505,118,2.745,122,2.416,130,6.106,131,1.554,278,3.971,294,3.229,320,2.708,322,2.927,352,1.805,354,4.959,392,4.63,401,3.385,563,4.22,583,4.635,592,7.366,652,5.564,717,5.321,777,4.59,957,4.898,1033,7.508,1115,3.855,1150,5.431,1151,4.84,1229,6.316,1319,3.414,1344,3.344,1471,3.656,1545,4.159,1547,4.13,1548,4.13,1566,3.656,1697,6.49,1858,5.431,1956,5.094,1986,4.464,2061,3.771,2077,4.898,2166,7.987,3341,4.22,3905,5.169,4158,5.024,5165,6.929,6760,6.106]],["t/2629",[0,1.172,1,6.1,4,3.397,80,4.22,83,4.073,84,4.144,87,4.625,218,3.054,228,2.925,231,4.264,256,5.029,349,2.608,356,2.886,410,4.273,413,4.298,570,3.89,598,4.389,621,4.864,658,2.725,841,2.55,1053,3.458,1260,6.144,1506,3.254,1518,4.341,1534,4.787,1708,4.484,2061,5.327,2169,5.962,2303,6.303,2588,9.691,4158,5.339,4990,6.711,6768,7.93,6769,7.93,6770,7.93,6771,7.93,6772,7.93]],["t/2631",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2633",[84,5.623,375,6.381,376,5.799,377,5.997,378,5.271,379,6.555,380,6.601,1226,5.146,1464,9.299,2376,9.106,6773,9.485]],["t/2635",[0,1.346,3,3.581,4,3.472,20,2.046,47,3.284,76,2.773,88,2.223,109,2.289,218,2.851,406,5.446,410,5.303,468,5.606,684,5.205,1108,7.36,1121,5.739,1298,6.112,1646,4.52,3506,8.328,4026,8.052,6774,9.137]],["t/2637",[26,3.533,60,3.413,62,4.422,218,3.255,383,5.184,398,6.519,399,7.904]],["t/2639",[20,2.078,47,3.336,80,5.319,88,2.258,89,3.514,92,3.608,113,4.202,120,6.339,121,6.09,128,9.674,176,6.034,218,3.541,289,7.031,1129,6.718,1464,7.274,3916,6.73,6775,7.945]],["t/2641",[0,1.147,4,3.574,26,3.245,47,4.16,218,3.61,383,4.762,405,4.868,406,6.898,407,5.08,450,5.031,841,3.319,1121,6.02,6776,10.322]],["t/2643",[77,6.316,406,6.569]],["t/2646",[8,6.524,20,1.759,72,2.865,73,2.152,88,1.911,89,2.974,96,3.903,118,3.112,168,4.619,169,4.589,170,3.791,338,2.865,361,3.483,380,5.683,396,4.619,407,3.448,459,4.65,467,4.008,468,4.819,523,7.38,527,6.157,562,3.531,567,4.252,656,4.144,667,5.255,876,5.017,877,3.095,923,7.159,1003,4.346,1488,6.157,1765,7.22,1889,5.716,2149,6.157,2503,5.154,2599,4.559,4200,6.555,6777,7.855,6778,7.457]],["t/2649",[0,1.486,3,3.743,60,2.321,62,3.007,95,5.146,230,2.341,296,3.055,357,2.053,390,3.617,400,3.801,407,4.739,413,4.193,432,4.387,519,3.971,520,4.119,523,6.209,525,5.562,672,4.618,770,4.387,818,2.341,866,5.922,877,2.796,913,3.763,1003,3.926,1471,3.744,1923,4.613,1967,6.254,1969,5.669,2665,8.416,4079,4.26,4106,8.178,4954,8.416,6172,9.067,6779,11.627,6780,9.067,6781,6.737,6782,11.548]],["t/2651",[0,1.157,19,1.865,37,3.622,83,4.021,88,2.35,98,3.766,111,5.471,158,9.173,256,6.599,407,4.242,523,6.282,525,7.573,770,5.974,1765,6.83,1923,6.282,6781,9.173,6783,9.663]],["t/2653",[0,0.94,12,4.885,20,1.759,60,2.57,73,2.152,115,2.203,121,6.702,131,2.291,252,3.937,307,3.46,388,4.275,398,5.472,523,6.641,524,6.157,525,6.157,547,8.006,617,2.365,770,4.856,776,5.775,818,2.592,1144,2.817,1508,6.25,1923,5.106,2033,5.203,3323,7.159,3423,8.16,3485,8.966,4182,9.31,6781,7.457]],["t/2655",[76,3.224,88,2.584,131,2.382,394,5.147,1790,5.497,6778,10.084]],["t/2657",[0,1.29,73,2.34,76,2.591,83,3.553,88,2.077,98,3.329,108,6.053,109,2.14,110,3.642,131,1.915,170,4.121,174,3.225,176,5.552,213,5.408,233,5.603,320,3.338,349,2.275,391,5.771,407,3.749,882,3.936,1765,6.036,2125,5.713,4106,8.163,5829,7.783,6235,7.783,6780,8.107,6784,9.197,6785,10.777]],["t/2659",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2662",[0,1.346,3,3.581,4,3.472,20,2.046,47,3.284,76,2.773,88,2.223,109,2.289,218,2.851,406,5.446,410,5.303,468,5.606,684,5.205,1108,7.36,1121,5.739,1298,6.112,1646,4.52,3506,8.328,4026,8.052,6774,9.137]],["t/2664",[26,3.533,60,3.413,62,4.422,218,3.255,381,4.976,398,6.519,399,7.904]],["t/2666",[20,2.078,47,3.336,80,5.319,88,2.258,89,3.514,92,3.608,113,4.202,120,6.339,121,6.09,128,9.674,176,6.034,218,3.541,289,7.031,404,5.878,1129,6.718,3916,6.73,6775,7.945]],["t/2668",[0,1.147,4,3.574,26,3.245,47,4.16,218,2.99,383,4.762,405,4.868,406,6.898,407,5.08,450,5.031,619,4.607,841,3.319,1121,6.02,6786,9.098]],["t/2670",[12,4.279,91,4.279,92,4.093,114,5.76,939,5.02,1506,4.653,1790,5.448]],["t/2672",[12,4.167,92,3.985,114,5.609,120,7.002,121,6.727,122,3.575,123,11.436,124,7.434,1506,4.531]],["t/2674",[0,0.766,3,2.509,4,2.749,19,1.236,20,2.602,36,3.646,41,2.056,43,3.842,50,3.842,53,3.388,76,1.942,80,3.669,88,1.557,109,1.604,115,2.869,122,3.103,181,3.344,212,3.603,218,1.997,301,4.471,308,2.898,352,1.667,381,4.879,386,3.089,388,3.483,413,3.907,426,2.456,542,4.849,616,1.977,658,2.369,683,2.792,852,2.756,911,4.161,960,2.258,1326,4.849,1330,4.918,1519,5.851,1629,4.313,1646,3.167,1709,3.429,2210,3.764,2223,5.305,2224,6.216,2460,4.326,2596,5.834,2605,4.524,2606,4.706,2880,7.259,3853,4.706,6787,8.9,6788,5.48,6789,6.401,6790,6.894,6791,6.894,6792,5.641]],["t/2676",[77,6.316,406,6.569]],["t/2678",[19,1.85,60,3.135,88,2.331,223,6.411,396,5.635,514,4.815,522,6.949,1132,7.046,1252,8.735,1328,4.783,1455,9.906,1457,7.656,1458,9.098,1459,8.735,4500,8.445,6793,9.584]],["t/2680",[0,1.365,20,2.553,99,4.148,145,9.044,170,4.515,320,3.656,349,2.492,356,2.758,361,5.455,426,3.589,533,6.027,538,8.244,563,5.697,3183,6.612,6794,9.355]],["t/2682",[19,2.129,38,3.548,228,3.521,310,4.732,453,4.675,593,6.052,614,3.373,841,3.819,913,4.699,1096,4.384,2187,5.814,2762,3.984,2971,4.722,3058,6.189,3503,6.945,3853,8.108,4079,5.319,6221,8.412,6795,9.544,6796,8.862,6797,8.862,6798,9.544]],["t/2684",[0,0.597,6,1.341,8,3.186,19,1.717,20,1.991,38,2.86,41,1.718,72,1.819,81,2.606,96,4.418,98,1.945,104,3.842,109,2.228,111,2.825,115,1.399,116,2.148,131,1.119,136,2.267,145,6.536,164,4.047,174,1.884,183,2.082,186,3.016,244,1.598,310,3.883,338,2.086,340,1.785,348,2.686,355,2.108,356,2.192,358,2.205,409,1.553,410,2.895,468,3.061,486,2.632,564,4.547,577,3.273,617,2.967,688,2.398,692,1.671,741,2.388,818,2.453,822,2.27,823,3.727,824,4.529,841,1.728,974,1.914,1053,2.343,1141,4.396,1157,1.592,1312,3.243,1475,4.396,1490,4.736,1542,4.989,1709,2.672,1804,2.974,1820,2.859,1864,3.985,1886,5.026,1889,4.161,1897,3.57,1938,3.273,2156,3.445,2246,4.163,2438,3.667,2829,2.148,2833,3.57,2867,4.069,2971,6.271,3035,4.736,3058,8.219,3139,6.366,3712,4.271,3853,6.536,4151,4.736,4328,3.337,6219,8.436,6794,4.989,6799,3.91,6800,4.989,6801,4.989,6802,4.989,6803,5.373]],["t/2686",[0,1.404,49,4.852,73,2.306,88,2.048,99,3.733,114,4.605,132,5.376,145,7.85,170,5.154,174,3.179,230,2.777,310,3.317,315,3.136,338,2.361,342,2.658,346,4.356,349,2.242,361,4.735,407,4.688,533,5.423,538,7.418,1709,4.509,1820,4.824,2169,5.126,3032,7.206,3853,6.188,6072,7.672]],["t/2688",[41,2.467,72,3.07,76,2.554,88,2.048,98,3.281,109,2.109,115,2.361,338,2.361,340,3.011,409,2.621,617,2.534,692,2.819,974,3.229,1312,5.472,1638,5.812,2213,7.418,2829,3.624,2833,6.024,2971,6.251,3032,7.206,3058,8.892,3139,7.206,3687,6.865,3853,6.188,4079,5.052,6219,7.206,6799,6.597,6804,7.418]],["t/2690",[0,1.158,19,1.395,22,2.736,27,2.723,28,2.197,30,1.883,33,2.695,66,2.148,88,1.758,89,2.737,91,2.937,92,2.81,131,1.621,145,5.313,155,3.331,174,2.73,193,2.825,230,2.384,256,4.936,324,6.834,350,3.183,882,3.331,1053,3.394,1141,6.369,1151,5.048,1344,3.488,1506,3.194,2020,10.686,2561,4.577,2971,3.852,3058,5.048,3139,8.277,3853,5.313,5453,8.52,6799,5.665,6800,7.227,6801,7.227,6802,7.227,6805,8.813,6806,7.784,6807,7.784,6808,7.227,6809,7.784,6810,12.529]],["t/2692",[41,2.128,66,2.046,145,6.77,315,2.705,349,3.009,350,4.056,352,2.399,361,4.083,405,4.677,562,4.14,773,4.003,1708,5.608,2971,4.907,3032,7.883,3058,7.888,3183,6.509,5453,8.115,6805,10.294,6811,9.209,6812,9.917]],["t/2694",[20,1.807,41,2.402,83,3.358,145,7.642,224,5.852,244,2.585,315,2.37,338,2.263,346,4.176,349,2.15,361,3.579,593,5.512,617,3.13,712,4.657,818,3.43,822,3.173,876,5.155,1626,6.954,1926,7.451,2892,5.512,2925,7.178,6813,11.196,6814,13.079,6815,11.196]],["t/2696",[0,1.138,19,1.835,76,2.885,113,4.304,131,2.582,349,2.532,357,2.75,429,4.851,939,4.533,960,3.353,1629,5.58,3853,6.989,6808,11.516,6816,12.402,6817,10.238]],["t/2698",[0,1.147,145,8.507,155,4.417,338,2.688,452,4.474,467,4.89,514,3.988,672,4.1,694,4.959,832,4.354,833,4.385,1156,5.905,1157,3.692,6818,10.322]],["t/2701",[18,4.04,38,2.851,131,2.693,136,4.026,225,3.264,306,4.329,336,4.501,342,2.798,352,2.873,429,4.522,430,2.856,570,3.521,614,3.373,615,4.347,692,2.968,841,3.069,867,5.479,1153,5.819,1614,5.017,1754,6.945,1895,6.342,2233,5.479,2475,5.66,2595,6.61]],["t/2703",[6,2.029,18,3.443,20,1.691,118,2.992,119,4.599,122,2.633,131,2.967,155,3.481,210,4.955,349,2.012,358,3.338,405,3.836,409,2.351,413,3.316,426,2.897,429,5.08,444,3.443,570,3.001,572,5.158,602,2.609,615,3.705,680,5.104,696,3.908,718,3.349,1094,6.655,1129,4.471,1153,5.252,1325,6.16,1470,5.104,1646,3.736,1708,4.599,1969,6.033,2134,6.655,2256,4.634,2475,4.824,2587,6.16,2609,6.884,3111,5.552,3183,5.338,3315,6.465,4914,6.302]],["t/2705",[20,1.926,98,3.353,109,2.969,116,3.703,131,1.929,135,3.752,181,4.494,231,3.335,242,3.408,322,3.634,338,2.412,401,5.289,432,5.318,488,5.644,621,4.274,687,6.156,689,7.103,718,5.254,841,2.979,1247,4.707,1886,5.813,2483,5.754,2522,7.58,2523,8.602,2524,7.84,2525,8.602]],["t/2707",[0,1.238,218,3.778,409,3.22,515,7.835,822,3.157,2526,8.262,2527,5.928,2528,7.499]],["t/2709",[0,1.41,22,2.11,28,2.267,30,1.942,35,3.196,39,2.868,45,2.68,47,2.68,66,2.617,76,2.263,109,1.868,118,2.954,119,4.541,137,5.157,138,4.847,166,4.385,193,2.914,315,2.19,340,2.668,349,1.986,356,2.198,429,5.037,602,3.411,822,2.276,990,4.222,1040,2.823,1050,4.804,1058,3.934,1713,5.237,2278,5.149,2527,4.274,2528,5.407,2753,4.125,2866,5.957,6819,8.998,6820,5.957,6821,8.238,6822,8.031]],["t/2711",[0,1.228,9,3.786,12,4.17,22,3.223,23,4.327,25,4.092,26,3.856,28,2.404,30,2.06,33,2.949,42,3.036,45,2.842,66,2.279,91,3.214,131,1.773,146,4.661,231,3.066,320,3.091,342,3.24,429,4.035,1361,4.151,1506,3.495,1517,4.054,1519,3.981,1520,4.375,1545,6.158,1585,4.928,1586,8.041,3115,6.599,6820,6.317,6823,7.908,6824,7.908]],["t/2713",[0,1.117,4,2.883,12,2.561,19,0.569,20,0.66,22,2.641,25,1.526,26,2.487,28,1.916,30,1.641,35,1.82,41,2.418,53,4.262,66,2.074,69,2.228,73,2.235,110,1.258,125,1.266,131,1.1,136,2.229,146,2.863,148,3.079,193,2.463,196,2.853,197,2.948,231,1.902,234,4.259,238,3.351,242,2.497,267,4.668,294,1.374,307,2.776,320,1.153,322,3.943,339,1.564,340,1.055,349,1.307,350,2.161,352,1.913,353,4.51,356,0.869,425,1.258,429,2.504,562,2.206,594,2.06,822,2.849,960,1.731,1028,1.868,1040,2.386,1153,3.875,1506,2.169,1508,3.276,1517,1.512,1606,1.65,1728,2.527,1798,1.734,2056,4.304,2149,7.315,2155,2.014,2256,1.809,2266,2.949,2526,6.516,2527,5.349,2528,6.768,2530,6.973,2535,4.201,2981,2.599,3308,2.599,5825,4.324,5925,6.9,5926,8.42,5927,10.147,5928,4.658,5929,10.147,5930,4.658,6820,8.361,6825,4.907,6826,4.658,6827,10.928,6828,5.285,6829,5.285,6830,7.911,6831,7.911,6832,7.911]],["t/2715",[19,2.016,20,2.338,53,3.974,109,2.036,115,2.279,116,3.499,118,3.22,136,3.692,339,4.309,340,4.127,343,4.038,350,5.082,429,4.147,562,5.187,766,8.341,882,3.746,1053,3.816,1153,5.509,1771,7.407,1772,4.913,1886,5.492,5825,7.161,5925,8.184,5926,9.043,6833,11.245]],["t/2717",[6,2.47,9,3.713,19,1.019,20,1.736,39,3.535,45,3.304,53,2.952,88,1.887,131,2.061,137,4.802,155,2.434,225,2.856,231,2.047,242,2.092,317,1.969,336,3.939,342,2.449,345,2.745,349,1.406,350,4.049,408,3.344,429,6.495,452,2.999,457,3.192,467,2.694,598,3.147,602,3.176,614,2.01,673,3.317,676,3.105,694,2.732,718,2.341,853,3.532,897,3.688,944,4.52,1002,3.938,1033,4.218,1053,3.642,1153,4.092,1156,3.957,1157,2.474,1173,3.497,1506,2.334,1606,5.669,1646,2.612,1755,4.138,1780,4.812,1793,3.192,1794,8.1,1902,4.653,2125,3.532,2256,3.24,2587,6.326,2683,3.829,3258,3.688,3590,4.812,4243,6.079,4569,5.28,5825,4.653,5925,4.138,5926,9.139,5928,5.012,6825,5.28,6826,5.012,6834,5.686,6835,4,6836,5.686,6837,5.012]],["t/2719",[0,1.157,19,1.865,109,2.421,210,6.34,338,2.71,429,4.931,556,6.021,878,7.719,1096,4.781,1290,8.515,1533,7.006,1614,6.584,1781,7.881,6412,11.629,6838,10.406]],["t/2721",[30,2.622,35,3.666,66,2.915,115,1.461,131,2.045,238,6.874,309,3.75,322,3.244,340,2.747,355,3.853,486,4.052,661,3.937,735,2.181,741,2.494,822,3.072,889,4.546,956,2.835,1040,3.811,1133,6.95,1610,3.955,1713,6.007,1883,8.041,2278,6.298,2294,4.46,2526,7.286,2527,5.769,2528,7.298,6820,6.135,6821,8.399,6839,11.228,6840,10.84]],["t/2723",[3,3.141,6,2.154,19,1.548,73,2.196,88,1.95,131,2.716,215,5.932,225,2.952,238,5.475,336,4.072,340,2.868,342,2.531,357,2.319,400,4.294,409,3.222,413,4.544,429,6.181,735,3.356,741,3.838,972,3.629,1133,7.147,1603,7.505,1614,4.538,1798,4.713,2537,7.306,3111,7.609,3235,6.689,4921,6.538,6839,8.016,6841,8.633]],["t/2725",[0,1.146,6,1.266,11,1.809,19,0.542,22,2.91,25,2.437,26,1.595,27,2.99,28,2.166,30,2.067,33,1.757,35,3.052,37,1.053,42,0.831,45,1.009,66,2.63,69,2.518,72,1.024,73,0.769,108,1.44,131,1.78,135,1.225,151,4.538,152,5.237,193,2.784,218,3.106,228,1.116,243,1.59,252,1.408,315,1.384,322,2.571,340,2.177,352,1.227,356,0.828,357,1.363,390,1.063,405,1.426,413,1.233,425,1.198,426,1.807,429,4.657,432,3.762,450,5.227,457,3.678,576,3.92,602,2.461,615,4.477,619,1.35,692,1.578,822,2.422,841,0.973,940,1.304,944,2.404,956,1.739,974,2.732,1040,3.77,1058,3.758,1065,2.343,1088,6.728,1091,3.692,1578,3.242,1605,2.163,1634,2.913,1661,2.01,1713,4.711,1906,3.652,2495,3.763,2527,4.548,2528,4.412,2599,3.531,3062,5.077,3065,5.776,3104,4.685,3111,5.237,3118,5.396,3196,2.717,5033,4.711,5172,4.711,5926,7.505,6819,5.546,6820,8.442,6821,7.616,6824,2.808,6842,7.671,6843,8.547,6844,9.251,6845,6.084,6846,5.776]],["t/2727",[0,1.221,18,2.44,19,1.033,22,2.622,25,2.769,26,1.812,27,2.016,28,1.627,30,1.394,33,1.996,35,2.676,66,2.411,88,1.302,109,1.341,131,2.433,151,3.992,152,3.935,193,2.092,218,2.444,228,2.126,231,2.075,315,2.301,322,2.261,356,1.578,357,1.549,409,1.666,425,2.282,426,2.053,429,4.727,453,2.824,515,4.054,548,2.852,576,3.448,602,1.849,615,2.626,621,2.659,692,1.793,741,2.562,822,2.391,940,4.302,974,2.053,1040,4.292,1058,4.133,1088,6.261,1094,4.716,1578,2.852,1605,6.032,1634,2.562,1661,3.83,1713,4.384,1906,3.213,2187,3.512,2271,4.582,2475,3.418,2527,4.489,2528,5.68,2705,4.878,3062,4.466,3111,7.496,3118,4.054,5926,8.505,6819,4.878,6820,7.401,6821,8.508,6845,5.352,6846,8.795]],["t/2729",[0,1.167,20,1.312,22,1.658,28,1.781,30,1.526,33,3.636,35,2.816,41,1.932,66,2.598,76,1.778,109,1.468,118,2.321,193,2.29,228,2.328,230,1.933,315,2.456,349,1.561,352,1.526,356,1.727,408,5.296,425,2.499,426,2.248,429,2.99,572,4.001,598,3.492,602,2.024,692,1.962,741,4.004,822,2.976,940,4.528,974,2.248,1040,4.258,1053,2.751,1058,4.412,1144,2.101,1276,4.248,1518,2.598,1605,7.509,1610,3.017,1614,3.317,1646,4.137,1713,4.614,2527,5.589,2528,4.248,2590,3.542,2595,6.238,2874,5.651,5926,8.335,6364,7.938,6819,5.34,6820,8.495,6821,4.889,6837,9.257,6846,5.562]],["t/2731",[0,0.994,20,1.299,30,1.511,33,3.096,60,1.898,62,2.458,66,2.154,72,2.116,73,1.589,88,1.411,92,2.255,146,2.636,176,3.771,183,2.421,184,3.045,196,4.39,197,2.714,225,2.136,228,2.305,230,1.914,301,4.052,342,1.832,347,4.841,348,4.471,350,2.555,352,2.757,356,2.448,358,2.564,398,3.107,521,3.615,598,3.458,672,2.482,836,3.615,867,3.586,1006,3.304,1040,4.648,1126,4.547,1228,3.434,1291,3.191,1646,2.87,2301,4.731,2590,3.507,2591,6.929,2593,5.507,2614,5.507,2981,5.112,3030,5.112,3230,3.962,5543,6.394,5581,5.869,6364,5.507,6826,7.882,6837,5.507,6847,6.248,6848,3.806,6849,6.248,6850,6.248,6851,7.568,6852,5.287,6853,10.444,6854,10.444,6855,10.444,6856,10.444,6857,8.942,6858,6.248,6859,6.248]],["t/2733",[6,3.457,19,1.558,45,2.901,109,2.605,131,2.723,137,4.216,185,3.864,231,3.129,306,3.943,349,2.15,352,2.102,400,4.323,429,4.118,430,3.351,615,3.959,621,4.01,622,4.369,1047,3.271,1065,6.735,1153,4.258,1182,5.399,1186,5.399,1506,3.567,1646,3.993,1895,5.776,2169,4.915,2256,4.952,2475,5.155,2587,6.583,2588,7.112,3111,5.933]],["t/2735",[0,1.054,3,2.468,4,2.718,9,3.015,19,1.216,20,1.41,30,1.641,35,2.929,66,2.44,76,1.911,98,2.455,109,1.578,125,2.703,131,1.973,185,3.015,187,3.566,210,4.132,218,2.746,230,2.078,323,3.808,338,1.766,355,3.718,388,3.427,400,3.374,409,1.961,413,2.765,425,2.686,426,2.416,429,4.491,459,3.728,474,3.655,515,4.771,822,3.527,956,2.325,1038,2.992,1144,2.258,1610,3.244,1713,4.8,1741,6.546,1873,3.143,1874,3.199,2272,5.031,2526,7.03,2527,5.044,2528,8.378,2564,4.771,2684,5.137,3944,6.298,6820,5.031,6821,5.256,6860,10.144,6861,10.144]],["t/2737",[0,1.129,155,4.346,225,3.473,336,4.79,338,2.645,342,2.978,429,5.847,452,4.431,467,4.812,672,4.034,694,4.88,696,4.88,832,4.284,833,4.315,1156,5.847,1157,3.656]],["t/2740",[6,3.165,8,4.763,38,2.399,40,5.957,60,2.439,155,3.437,223,4.988,383,3.705,401,3.643,452,2.883,453,3.934,467,3.805,567,4.036,595,4.222,650,8.326,683,3.252,694,3.858,1051,5.336,1156,3.805,1157,2.379,1173,6.539,1186,4.988,1252,6.796,1271,6.796,1300,4.476,1417,5.957,1488,5.844,1582,5.648,2061,4.058,2233,4.61,2479,5.27,2595,5.562,4909,6.796,4915,6.571,4955,7.457,5947,5.407,6361,6.383,6777,9.872,6862,8.031,6863,8.031,6864,6.383,6865,8.031,6866,8.031,6867,8.031,6868,6.796]],["t/2742",[60,2.814,73,2.357,113,3.894,118,3.408,139,6.08,170,5.718,211,4.451,262,4.238,401,4.203,439,6.08,524,6.742,622,4.656,650,8.374,908,7.016,1143,6.324,1804,5.127,2022,9.286,2023,11.247,4145,6.416,4909,9.867,6090,8.166,6381,7.58,6869,7.84]],["t/2745",[12,2.601,19,1.236,20,1.433,60,2.094,73,1.754,88,1.557,89,2.424,96,3.18,109,2.23,114,3.502,125,3.82,131,1.435,170,3.089,188,4.641,228,2.543,229,3.312,243,3.624,316,2.172,320,2.502,322,2.704,380,3.561,381,3.053,398,5.481,404,4.054,426,3.414,435,4.849,436,4.775,438,5.693,622,3.465,650,7.232,702,4.326,727,3.789,740,4.021,774,3.842,778,4.088,822,3.123,851,4.124,867,3.957,1043,4.295,1077,3.266,1300,3.842,1317,3.237,1319,3.153,1506,2.829,1508,3.328,1581,3.377,1665,5.48,2033,4.24,2228,7.637,2427,6.742,2516,4.088,3193,4.124,3328,4.849,3350,5.591,4136,5.017,4158,7.419,6870,5.834,6871,9.326]],["t/2747",[12,3.473,19,1.166,20,1.913,60,1.976,73,1.655,88,1.469,89,2.287,92,2.348,99,2.678,109,1.513,114,3.304,115,1.694,125,3.667,131,1.354,170,2.915,188,4.379,225,2.224,228,2.4,229,3.125,243,3.419,316,2.05,320,2.36,322,3.61,380,4.754,398,3.235,426,3.278,435,4.575,436,4.505,438,5.517,514,2.513,622,3.269,650,7.008,653,3.379,694,3.125,702,4.081,727,3.575,740,3.794,774,3.625,778,3.857,822,3.027,851,3.891,867,3.734,1043,4.124,1053,2.836,1070,5.04,1108,3.651,1300,3.625,1471,3.186,1506,2.669,1508,4.442,1581,3.186,1665,5.17,2033,4,2228,6.847,2427,6.473,2516,3.857,2628,5.17,3193,3.891,3328,6.473,3350,5.367,4136,4.734,4932,5.733,4949,8.45,5332,5.322,6870,5.505,6871,9.038]],["t/2749",[12,3.537,28,1.885,60,2.028,81,5.254,118,2.456,218,3.138,225,2.283,230,2.045,252,3.107,299,3.645,336,3.149,342,1.957,357,1.793,409,1.93,437,2.294,438,3.449,627,4.858,650,7.108,683,2.703,745,4.788,755,3.32,774,3.721,818,2.045,822,2.656,1324,3.721,1344,2.991,1506,2.739,1508,4.525,1629,3.004,2390,5.881,2427,6.592,2527,3.553,2538,4.495,2792,7.262,3328,9.266,3350,5.466,3365,5.884,4036,5.65,4291,5.462,4470,7.262,4949,6.821,5368,5.65,6366,4.773,6872,10.906,6873,9.547,6874,6.199,6875,8.262,6876,6.199,6877,5.884,6878,6.199,6879,6.199,6880,6.199,6881,6.199,6882,6.199,6883,6.199]],["t/2751",[12,3.271,36,3.164,53,2.114,60,1.817,89,3.047,100,3.518,109,1.392,122,1.937,131,1.246,146,2.523,219,3.039,274,6.003,333,6.029,349,1.48,352,1.447,361,2.463,380,3.09,398,2.975,434,3.334,437,2.056,438,3.09,452,3.112,453,2.93,644,4.671,650,7.785,727,3.288,778,3.548,822,1.695,864,3.679,897,3.879,960,2.839,1047,2.251,1144,3.721,1269,4.143,1383,3.518,1446,4.083,1506,2.455,1508,4.184,1523,3.434,1636,5.554,1637,4.895,1638,3.835,1895,3.975,2078,3.975,2082,4.635,2106,5.063,2490,4.208,2516,3.548,2727,4.143,2745,4.635,2792,4.635,2874,3.754,3138,4.53,3247,8.048,3328,6.096,3350,3.489,3419,5.063,3840,4.53,3842,5.273,4033,4.353,4158,4.027,4160,6.715,4348,5.273,4385,5.557,4868,3.611,5963,3.644,5964,5.28,5965,3.644,5966,3.644,6871,5.063,6875,5.273,6877,5.273,6884,5.982,6885,5.982,6886,5.982,6887,5.982,6888,5.982,6889,5.982,6890,5.982,6891,5.982,6892,5.982,6893,5.982,6894,5.982]],["t/2754",[650,7.79,6895,11.021]],["t/2756",[333,5.786,650,7.79]],["t/2758",[125,4.478,131,2.34,322,4.408,650,7.375,822,3.185,3226,6.354,3328,9.22]],["t/2760",[439,8.021,623,8.043,650,9.42,694,4.803,939,6.09,1143,6.823,1506,4.102,2022,7.274,3266,10.344,3929,7.945]],["t/2762",[92,4.412,343,5.639,380,6.314,650,8.021,652,6.718,653,6.35,1581,5.987,2228,7.836,3350,7.129,3840,9.256,4158,6.73,4949,7.274]],["t/2764",[9,5.814,53,4.622,60,2.64,223,5.399,452,3.121,514,3.358,650,9.094,694,4.176,822,3.707,1157,2.575,1763,6.735,1790,4.176,1920,4.811,2510,5.029,2624,7.112,3258,5.637,3350,5.07,4160,6.735,4346,6.447,5603,6.114,6868,7.356,6896,12.145,6897,8.071,6898,8.071]],["t/2766",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2768",[0,0.858,8,1.811,38,0.912,60,4.257,61,6.018,62,5.478,67,1.427,89,1.074,167,1.958,225,2.639,231,1.099,356,0.836,453,1.496,457,1.714,474,1.646,490,2.835,498,2.427,512,2.313,519,1.587,521,5.991,571,2.427,643,2.692,667,1.897,686,1.605,689,1.86,691,3.542,755,1.519,841,0.982,964,2.313,1124,1.149,1157,0.905,1177,2.499,1183,2.313,1231,2.084,1277,2.265,1369,2.183,1555,1.86,1572,1.781,1926,1.74,1959,4.184,2398,2.835,2402,2.313,2403,2.499,2434,2.084,2516,1.811,2528,2.056,2631,2.265,3288,2.584,3693,2.584,3913,2.584,4202,2.692,4220,2.183,4615,2.366,4683,2.835,4758,2.584,4841,2.835,5482,2.222,5669,2.427,5763,2.313,6373,10.602,6560,4.749,6563,4.749,6577,2.835,6679,2.835,6899,5.114,6900,5.114,6901,3.054,6902,3.054,6903,3.054,6904,3.054,6905,3.054,6906,5.114,6907,3.054,6908,2.835,6909,3.054,6910,3.054,6911,3.054,6912,3.054,6913,7.718,6914,9.405,6915,11.418,6916,3.054,6917,3.054,6918,3.054,6919,3.054,6920,3.054,6921,3.054,6922,5.114,6923,5.114,6924,3.054,6925,5.114,6926,3.054,6927,3.054,6928,5.114,6929,5.114,6930,3.054,6931,3.054,6932,3.054,6933,3.054,6934,3.054,6935,3.054,6936,3.054,6937,3.054,6938,3.054,6939,3.054,6940,3.054,6941,3.054,6942,3.054,6943,2.835,6944,2.366,6945,3.054,6946,3.054,6947,3.054,6948,3.054,6949,3.054,6950,5.114,6951,3.054,6952,3.054,6953,3.054,6954,3.054,6955,3.054,6956,3.054,6957,3.054,6958,3.054,6959,5.114,6960,3.054,6961,3.054,6962,3.054,6963,5.114,6964,3.054,6965,3.054,6966,3.054,6967,5.114,6968,3.054,6969,3.054,6970,3.054,6971,3.054,6972,3.054,6973,3.054,6974,3.054,6975,3.054,6976,5.114,6977,3.054,6978,3.054,6979,2.692,6980,3.054,6981,3.054,6982,3.054,6983,3.054,6984,3.054,6985,6.598,6986,3.054,6987,3.054,6988,5.114,6989,3.054,6990,3.054,6991,2.835,6992,3.054,6993,3.054]],["t/2770",[0,0.905,11,3.284,18,2.324,39,1.96,98,2.945,109,1.277,153,2.358,159,3.176,181,2.663,183,3.154,212,2.869,219,2.789,225,1.877,228,2.025,229,2.637,231,1.976,338,2.119,356,1.503,457,3.081,467,3.856,468,5.525,486,2.689,513,4.839,570,2.025,584,4.646,673,5.656,675,6.305,684,5.129,687,3.648,688,2.45,703,3.91,740,3.202,816,4.363,872,4.072,878,4.072,881,4.672,882,2.349,933,3.861,1056,5.611,1157,1.626,1251,4.253,1277,6.036,1286,6.468,1553,3.176,1792,3.313,1800,6.887,1856,5.106,1858,3.995,1938,3.344,2002,4.363,2220,4.363,2231,4.491,2241,3.038,2503,3.344,3004,3.519,3020,3.519,3039,5.819,3051,4.646,3344,3.519,3895,4.363,3898,4.363,3916,3.696,4186,4.072,4595,5.097,4752,5.097,4766,5.097,4777,5.097,4871,5.097,6143,5.097,6994,4.646,6995,5.489,6996,5.489,6997,5.489,6998,5.097,6999,5.489,7000,5.489,7001,5.097,7002,5.489,7003,5.489,7004,5.489,7005,5.097,7006,5.489,7007,5.489,7008,5.097,7009,5.489,7010,5.489,7011,5.097,7012,8.138,7013,5.489,7014,5.489,7015,5.097,7016,5.489,7017,5.489,7018,5.489,7019,5.489,7020,5.489,7021,5.489,7022,5.489,7023,5.489,7024,5.489,7025,5.097,7026,5.489,7027,5.489,7028,5.489]],["t/2772",[0,1.085,20,2.505,37,3.398,88,2.205,89,3.433,136,5.082,349,2.415,390,4.236,431,7.684,570,3.602,580,5.841,696,4.691,1003,5.016,1050,5.841,1298,6.065,1829,6.192,2509,6.411,2610,5.605,5910,7.395]],["t/2774",[0,1.174,4,1.828,12,4.342,26,2.852,37,2.218,38,1.904,89,3.189,99,3.735,114,4.608,115,1.66,122,4.209,136,2.689,150,4.278,166,3.48,193,3.292,294,3.925,342,3.896,356,1.745,407,3.697,425,2.524,426,2.27,528,4.728,532,3.371,539,5.129,545,5.29,562,2.66,580,3.813,583,3.959,688,2.845,1508,4.379,1547,7.195,1557,5.394,1620,5.62,2276,4.291,2869,4.728,3183,4.183,3398,6.374,5910,4.827,7029,13.3]],["t/2776",[0,0.75,4,2.708,12,2.546,19,1.209,22,2.481,25,3.242,26,2.969,28,1.905,30,1.632,31,5.7,32,4.994,33,2.336,34,4.15,35,2.532,36,6.569,41,2.026,42,1.854,43,6.071,50,5.263,53,4.549,66,2.247,69,2.215,76,1.901,80,3.59,83,2.607,89,2.372,91,2.546,109,1.57,122,2.184,146,2.846,315,1.84,356,1.847,404,3.968,595,3.547,939,2.987,943,5.11,955,4.11,1330,4.214,1361,5.31,1508,3.257,1509,6.642,1510,4.746,1511,4.605,1512,4.91,1513,7.004,1514,4.746,1519,5.092,1588,4.073,1591,5.11,1594,4.073,1597,4.824,2605,4.428,2606,4.605,7029,6.265,7030,6.265]],["t/2778",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2780",[0,1.227,4,3.721,20,2.296,390,3.882,413,5.289,426,3.933,1873,5.116,1874,5.208]],["t/2782",[0,0.734,11,3.952,18,2.797,19,1.184,20,1.373,73,1.681,109,1.537,118,2.43,212,3.452,303,5.251,349,1.634,401,5.303,478,5.003,614,4.642,615,3.009,616,3.089,656,3.236,658,3.701,682,4.448,692,2.055,700,5.341,704,3.537,718,2.72,852,4.305,877,2.417,903,5.823,912,4.189,923,5.591,924,3.952,925,6.134,1130,6.771,1194,6.264,1256,4.336,1481,5.119,1518,2.72,1547,3.656,1889,3.432,2529,4.575,3143,5.823,3586,5.251,3587,5.405,4079,5.185,5201,5.119,6072,5.591,6218,7.395,6804,5.405,7031,8.668,7032,6.606,7033,6.606,7034,6.606,7035,6.606,7036,6.606,7037,6.606,7038,6.606,7039,6.606,7040,6.606,7041,5.823,7042,9.304,7043,6.606,7044,6.606,7045,6.606,7046,4.9]],["t/2784",[0,1.186,87,6.223,349,2.639,356,2.921,357,2.866,567,5.362,617,2.983,974,3.8,1518,4.393,1795,7.09,3011,7.914,7031,8.942,7046,7.914]],["t/2786",[33,3.926,42,3.621,66,2.339,1517,5.397,1520,5.824,2174,9.994]],["t/2788",[0,0.806,3,3.611,4,2.846,6,2.476,12,2.736,19,1.299,20,1.507,37,2.523,38,2.165,88,1.637,89,2.549,92,2.617,114,3.683,136,3.058,190,5.276,219,3.683,294,3.137,352,1.753,405,3.419,450,4.837,619,5.05,658,2.491,778,4.299,842,5.741,938,4.817,1047,3.734,1115,5.126,1155,3.624,1229,8.398,1506,2.975,1634,3.222,2250,5.099,2358,5.276,2519,5.617,2536,5.49,3212,6.731,3405,8.747,3687,5.49,4310,9.214,4575,8.747,4857,6.731,5018,6.731,7031,5.099,7046,5.377,7047,9.923,7048,7.249,7049,9.923,7050,9.923,7051,9.923,7052,5.931,7053,6.731,7054,5.617,7055,7.249]],["t/2790",[0,0.863,19,1.392,20,1.942,30,1.878,33,1.785,35,3.143,39,2.773,47,1.72,66,2.582,69,4.204,73,1.311,88,1.164,142,3.201,196,2.167,197,2.239,227,3.38,242,1.896,263,3.057,267,2.537,270,3.807,304,3.059,306,2.338,307,2.108,316,1.624,346,2.476,349,1.92,355,3.046,356,2.125,614,1.822,615,4.735,658,2.668,692,1.603,753,2.914,770,2.959,822,2.2,852,2.06,876,3.057,956,1.767,967,2.648,1061,5.294,1063,5.465,1129,2.833,1293,3.083,1518,2.122,1713,2.265,2904,3.343,3103,3.57,3196,6.702,3877,6.015,5201,3.994,5579,4.097,7031,7.312,7046,6.928,7056,9.163,7057,9.652,7058,11.151,7059,12.162,7060,7.209,7061,7.209,7062,4.786,7063,7.209]],["t/2792",[0,1.267,3,3.252,4,2.563,6,2.844,19,1.602,20,1.858,30,2.162,33,3.095,35,3.056,66,2.589,125,3.561,263,5.3,308,3.757,315,2.437,349,2.211,355,3.506,356,2.447,425,3.539,619,5.087,770,5.131,956,3.907,1129,6.265,1713,3.927,3196,6.103,7031,6.286,7046,6.629,7056,10.046]],["t/2794",[0,1.196,6,2.685,356,2.946,357,2.891,567,5.408,974,3.833,1054,6.824,1344,4.822,1518,4.43,1708,6.084,3011,7.981,7031,8.987]],["t/2796",[6,1.5,30,1.454,35,3.003,47,2.006,66,2.451,69,4.067,227,3.699,229,4.91,241,4.561,270,4.166,309,3.902,350,2.458,359,2.785,556,3.477,614,2.124,616,1.724,617,1.68,701,4.458,753,4.918,754,2.591,822,2.896,876,5.158,960,1.969,967,3.087,972,2.527,974,2.141,990,3.16,1043,2.693,1061,5.91,1063,6.513,1129,4.78,1153,2.944,1640,3.198,2236,3.697,2599,3.239,2709,7.437,3103,4.163,3196,5.997,7031,8.713,7046,9.189,7057,5.581,7060,5.581,7061,5.581,7062,5.581,7063,5.581,7064,6.01,7065,8.075,7066,6.01,7067,8.697,7068,6.01]],["t/2798",[33,3.574,42,3.425,66,2.129,83,3.988,174,3.62,294,4.467,352,2.496,401,4.682,658,3.547,841,3.319,974,3.676,1517,4.913,1518,4.25,1520,5.302,2174,9.098,7031,7.26,7065,9.584]],["t/2800",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2803",[3,2.832,37,2.709,39,4.664,42,2.861,84,4.068,85,3.183,88,1.758,89,3.661,99,3.205,136,3.284,218,2.255,225,2.662,320,2.825,342,2.282,349,1.925,352,2.838,410,4.195,549,4.092,573,6.369,621,4.804,623,7.149,624,8.391,644,6.324,652,5.724,945,5.475,1128,3.063,1170,4.936,1328,3.607,1344,3.488,1468,8.52,1795,5.172,1869,4.308,2241,4.308,2731,5.612,3938,8.52,5310,6.369,6361,6.187,7069,6.587,7070,6.861]],["t/2805",[9,5.126,12,3.435,19,1.632,20,1.332,22,3.03,25,3.078,26,2.014,27,3.704,28,1.808,30,1.549,37,2.229,42,1.76,45,2.138,56,3.219,57,3.272,66,1.321,76,2.565,83,2.475,89,2.252,91,2.417,92,2.312,136,3.84,226,5.186,227,3.833,228,2.363,231,2.306,270,2.611,304,2.098,340,3.024,342,1.878,352,2.561,409,1.852,621,2.955,700,3.677,749,2.955,867,5.226,939,2.836,966,3.452,997,4.019,1124,2.41,1272,4.372,1361,3.122,1386,3.328,1506,3.736,1665,5.092,1705,2.918,1858,4.662,1865,5.092,2247,4.313,2727,4.437,2731,4.906,2732,6.049,2736,3.867,2737,3.832,2738,3.622,2739,6.335,2740,4.58,2835,5.092,2836,4.58,5310,5.241,5313,5.241,5603,4.505,7069,7.704,7070,5.646,7071,6.406,7072,5.948,7073,5.421,7074,5.241]],["t/2807",[22,2.097,23,4.054,25,3.834,26,2.509,28,2.253,30,1.93,33,2.763,37,3.684,42,3.265,45,2.663,47,2.663,66,2.184,83,3.083,89,2.806,91,3.011,114,5.379,122,2.584,193,2.896,340,2.651,342,2.34,352,1.93,405,3.764,433,4.617,652,4.386,658,2.742,841,2.566,939,4.688,1151,5.175,1517,3.798,1520,4.099,1545,4.448,1547,4.416,1585,4.617,2327,7.41,2731,6.403,2732,7.036,3485,7.333,6108,6.753,7073,8.96,7074,8.663,7075,7.98,7076,7.98]],["t/2809",[9,3.687,19,1.487,20,1.724,38,2.477,42,2.984,89,3.818,109,1.93,136,4.581,228,4.006,308,3.486,352,2.626,486,4.063,605,6.281,621,3.826,623,5.053,624,5.93,644,5.852,652,7.33,704,4.441,867,4.761,1170,5.259,1248,5.744,1548,4.59,1661,5.511,1665,6.592,1840,5.584,1858,6.036,1889,4.309,2232,6.036,2731,4.469,2835,6.592,2836,5.93,3911,7.019,5805,7.31,5947,5.584,6361,6.592,7072,7.701,7077,8.293]],["t/2811",[37,3.843,42,3.034,73,2.809,168,6.029,169,5.989,308,4.641,349,2.731,411,7.895,663,5.609,2731,5.95]],["t/2813",[0,0.555,19,0.895,20,1.038,22,3.161,23,2.536,25,4.914,26,3.216,27,3.204,28,2.139,30,1.833,31,4.574,32,4.008,33,1.728,34,3.07,35,2.032,36,5.409,37,2.637,38,1.491,42,2.517,45,2.529,47,1.666,50,2.782,66,2.268,83,1.929,89,1.755,91,1.884,109,1.161,115,1.3,127,2.376,155,2.136,174,1.75,196,2.098,197,2.168,211,2.398,226,4.317,227,3.315,231,1.797,241,2.228,270,2.035,304,1.635,333,2.433,338,2.863,340,3.043,357,1.341,407,2.035,655,4.084,658,1.715,692,1.552,704,2.673,748,2.96,749,2.303,771,5.681,866,3.868,966,2.69,971,2.522,1055,3.457,1058,2.445,1115,2.579,1291,2.55,1328,2.313,1330,3.382,1361,4.465,1386,2.593,1509,5.33,1510,3.511,1511,3.407,1517,2.376,1641,2.744,1674,3.132,2727,3.457,2731,7.089,2732,5.036,2733,4.223,2734,5.001,2736,3.013,2737,2.986,2738,2.822,2739,5.48,2740,3.569,2743,2.782,7074,4.084,7078,4.224,7079,4.224,7080,6.2,7081,4.224]],["t/2815",[6,2.534,42,2.791,116,4.06,117,6.13,185,4.515,622,5.104,652,5.582,658,3.49,718,4.182,1314,6.246,1641,6.784,1867,8.952,1986,6.076,2443,8.073,2731,7.165,5947,6.838,7082,10.156]],["t/2817",[22,2.9,25,3.663,26,2.397,27,3.219,28,1.42,30,1.217,42,3.191,49,3.883,66,2.118,69,2.503,72,1.704,77,4.057,98,2.759,115,1.985,196,2.115,197,2.185,226,4.343,227,3.994,241,2.246,270,2.051,304,1.648,315,2.51,333,2.453,349,1.244,437,2.62,688,3.402,692,1.565,748,2.984,749,2.321,771,5.7,966,4.96,971,3.852,1004,5.28,1272,5.204,1291,2.57,1330,2.246,1361,2.453,1386,2.614,1506,3.777,1634,2.237,1674,3.157,1800,4.258,1886,3.157,1972,6.059,2075,3.894,2276,3.387,2631,3.732,2722,7.316,2727,3.485,2731,7.199,2732,3.343,2733,4.249,2734,5.025,2736,3.037,2737,4.561,2738,6.821,2739,5.506,2740,3.597,2743,2.804,4236,3.732,4880,7.777,5330,5.133,5603,3.539,7080,4.117,7083,10.269,7084,7.079,7085,9.051]],["t/2819",[0,1.291,19,1.166,22,2.418,23,3.304,25,4.421,26,2.893,28,1.836,30,1.573,31,5.555,32,4.867,33,2.252,34,4,35,2.468,36,6.141,42,2.934,43,5.952,45,3.564,49,2.744,50,3.625,66,2.203,72,2.203,76,1.833,91,2.455,109,1.513,110,2.576,131,1.354,155,2.784,164,3.287,170,2.915,174,3.745,230,1.993,315,2.51,340,2.161,350,2.66,357,1.747,407,2.651,562,2.715,570,2.4,595,4.838,683,2.634,692,2.862,877,2.38,939,2.88,974,2.317,1003,3.341,1069,4.734,1328,3.014,1330,2.903,1361,4.486,1509,6.473,1510,4.575,1511,4.44,1517,3.096,1640,3.461,2169,3.678,2561,3.825,2731,6.257,7074,5.322,7080,5.322,7081,5.505]],["t/2821",[12,3.645,19,1.731,22,2.538,23,3.541,25,4.641,26,3.037,28,1.968,30,1.686,31,5.83,32,5.108,33,2.413,34,4.287,35,2.59,36,6.329,39,3.958,42,3.453,43,3.884,45,4.34,46,4.574,50,3.884,66,2.286,91,3.645,315,1.901,317,2.413,340,3.208,616,1.999,618,4.133,704,3.732,1040,3.396,1124,2.623,1330,3.111,1361,4.708,1506,2.86,1509,6.794,1510,4.902,1511,4.758,1517,4.597,2731,5.205,2780,4.693,2823,5.17,2863,4.758,3086,3.522,5845,5.4,7080,5.703,7081,5.898,7086,6.97]],["t/2823",[0,1.12,6,2.514,20,2.095,219,5.118,349,2.492,356,2.758,409,2.913,680,6.322,692,3.133,696,4.841,990,6.457,1658,5.576,2350,5.793,2633,7.05,2681,5.876,2720,8.008,2721,5.175,2732,6.695]],["t/2825",[27,2.565,28,2.07,30,1.774,41,1.573,66,2.063,72,2.483,196,4.204,197,3.185,226,4.178,227,4.425,229,3.523,244,2.181,270,4.077,304,3.728,748,4.349,749,3.383,764,5.337,771,6.611,966,3.952,1135,5.005,1291,3.746,1330,3.273,1333,5.553,1334,2.69,1386,3.81,1674,4.601,2726,5.439,2727,7.884,2730,5.553,2731,6.896,2732,4.873,2733,5.574,2734,6.215,2736,4.426,2737,4.387,2738,4.146,2739,7.315,2740,5.243,2741,9.048,2742,5.337,2743,4.087,2744,4.146]],["t/2827",[0,0.709,22,1.675,27,2.229,28,1.799,30,1.541,41,1.367,66,1.871,72,2.158,155,2.728,196,3.813,197,3.94,219,4.608,226,3.631,227,4.164,229,3.062,244,1.896,270,3.697,304,3.459,320,2.313,390,2.241,694,3.062,696,3.062,748,3.78,749,2.94,764,4.638,771,6.28,966,3.435,1135,4.35,1149,3.999,1156,3.02,1291,3.256,1330,2.845,1674,3.999,1680,4.291,1705,2.903,2625,5.215,2626,5.426,2627,5.334,2637,8.551,2641,4.291,2644,4.638,2720,5.066,2724,4.938,2726,4.728,2727,4.414,2730,4.827,2731,6.552,2732,4.235,2733,5.055,2734,5.766,2735,8.937,2736,3.847,2737,3.813,2738,3.604,2739,6.883,2740,4.557,2741,8.394,2742,4.638,2743,3.552,2744,3.604]],["t/2829",[0,0.592,22,1.4,27,1.864,28,1.504,30,1.289,41,1.707,66,1.642,77,5.07,88,1.203,109,1.24,115,1.387,118,1.96,196,4.005,197,3.457,226,3.035,227,4.575,228,1.965,244,1.585,270,3.244,294,2.305,304,3.704,352,1.925,357,1.431,403,2.737,496,4.111,617,1.489,714,4.72,748,3.16,749,2.458,764,3.877,771,5.843,799,4.235,877,1.949,960,1.745,966,2.871,967,2.737,972,3.346,1149,3.343,1330,2.378,1548,2.949,1674,3.343,1680,3.587,1705,2.427,1878,4.035,2350,4.985,2382,4.509,2625,4.359,2633,3.058,2637,7.955,2641,3.587,2644,3.877,2724,4.128,2726,3.952,2727,5.512,2730,4.035,2731,6.095,2732,3.54,2733,4.436,2734,5.202,2735,8.063,2736,3.216,2737,3.187,2738,3.012,2739,6.323,2740,3.809,2741,7.573,2742,3.877,2743,2.969,2744,3.012,3338,6.599,6356,4.359,6357,4.035,7087,10.569,7088,10.569,7089,5.328,7090,5.328]],["t/2831",[22,1.658,30,1.526,37,2.196,39,3.75,41,2.598,42,3.328,54,3.68,66,1.858,69,2.071,109,1.468,115,1.643,160,2.851,196,3.786,197,3.912,227,3.259,242,3.313,310,3.295,320,2.29,341,2.625,346,3.032,349,1.561,350,3.683,548,3.122,616,1.81,653,3.278,683,2.555,771,5.917,773,2.547,966,3.4,1124,2.374,1627,4.307,2228,4.046,2731,6.527,2732,4.193,2733,5.019,2734,4.917,2736,3.809,2737,3.775,2738,3.568,2739,5.388,2740,4.512,2744,3.568,2755,3.206,2834,5.055,2838,7.938,2839,5.562,2840,4.141,2841,9.257,2842,10.675,2843,4.68,2844,3.651,2845,4.592,2846,4.307,2847,4.889,2848,6.076,3889,5.163,4191,4.001,4246,4.889]],["t/2834",[12,3.373,19,1.602,42,2.456,76,2.518,89,4.007,97,5.668,109,2.079,115,2.327,174,3.997,181,4.335,230,2.738,276,5.668,352,2.757,425,3.539,426,3.183,644,6.762,648,5.866,877,3.27,883,6.629,1006,4.727,1124,3.363,1300,4.981,1506,4.677,1539,6.769,2731,4.816,2874,5.608,4370,6.504,7069,7.564,7070,10.046,7091,8.937]],["t/2836",[0,0.604,6,0.819,13,1.964,19,1.604,22,2.122,23,2.76,25,4.631,26,3.03,28,1.534,30,1.314,31,4.874,32,4.271,33,1.881,34,3.341,35,2.165,36,5.644,37,1.89,38,0.981,39,3.643,42,2.932,43,3.028,44,1.625,45,1.813,47,1.096,50,3.028,66,1.988,71,2.06,72,1.839,73,2.276,80,1.747,81,3.917,83,1.268,88,0.742,91,2.05,98,1.188,110,2.151,122,1.759,125,1.308,153,1.41,168,1.793,169,1.781,170,2.434,174,1.905,188,2.21,218,0.951,228,1.211,230,1.006,352,0.794,361,2.237,380,4.172,397,1.947,398,2.702,407,2.214,411,2.348,425,1.3,434,1.83,437,1.128,438,2.806,444,2.3,453,1.608,506,2.61,562,1.371,623,5.45,624,4.968,644,4.352,652,1.805,658,1.128,673,1.915,692,1.689,740,1.915,755,1.633,782,2.435,864,2.019,875,1.616,882,1.405,889,1.805,1069,3.953,1173,2.019,1324,1.83,1328,2.517,1330,2.424,1344,1.471,1361,4.698,1362,2.389,1506,2.229,1509,5.68,1510,3.821,1511,3.708,1517,2.586,1581,2.661,1763,2.544,1790,3.338,1804,3.845,1920,3.006,2230,2.686,2460,2.06,2628,2.61,2731,5.194,2859,4.788,2861,4.788,2862,3.049,2891,1.947,3093,4.114,3350,1.915,3570,3.953,3711,2.129,4183,2.348,4346,2.435,4949,8.053,4988,4.597,5603,2.309,5935,3.049,5947,3.657,6361,5.523,6381,2.686,7074,4.445,7080,7.319,7081,4.597,7092,3.283,7093,5.432,7094,3.283,7095,3.283,7096,9.908,7097,6.948,7098,3.283,7099,6.948,7100,3.283,7101,5.432]],["t/2838",[20,2.256,42,2.982,92,3.917,181,5.264,230,3.324,357,2.915,623,6.611,644,5.848,683,4.395,877,3.971,7102,10.852,7103,10.852]],["t/2840",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2843",[11,3.891,18,2.754,19,1.166,20,1.352,35,1.744,60,3.244,73,2.717,88,2.078,110,2.576,127,3.096,162,3.419,174,2.281,223,4.04,231,2.341,259,3.082,302,5.403,316,2.05,317,4.404,338,1.694,348,3.252,352,1.573,357,1.747,392,2.975,464,3.082,585,3.36,614,3.774,616,1.865,652,3.575,668,4.505,684,4.867,692,2.023,725,3.171,741,2.891,797,8.45,853,4.04,868,5.505,869,4.575,875,3.202,877,2.38,1272,4.44,1308,4.734,1314,4,1609,3.926,1640,6.769,1656,5.792,1658,3.6,1668,4.825,1765,4.269,1925,4.926,1939,3.323,2110,4.651,2126,6.196,2532,4.926,2836,4.651,2891,3.857,4327,5.17,5330,4.379,5393,6.039,5947,4.379,6135,5.505,7104,6.504,7105,6.039,7106,6.504]],["t/2846",[20,1.579,41,2.198,53,2.685,73,2.949,82,3.325,88,2.618,242,3.769,244,2.26,259,6.137,260,6.428,276,4.818,319,5.432,338,1.978,351,5.753,425,3.008,426,2.706,570,2.803,692,2.363,724,4.871,738,3.902,749,3.505,869,9.885,891,4.986,1040,4.075,1047,2.859,1153,3.721,1314,4.672,1705,3.461,1726,6.696,1728,4.899,1741,6.415,1790,3.65,1920,4.205,2874,4.767,7107,7.597,7108,7.597,7109,7.597,7110,7.597]],["t/2848",[20,0.834,30,1.546,32,4.215,33,2.759,35,2.137,39,1.433,41,1.95,42,2.728,45,3.313,53,4.598,66,2.182,69,1.317,76,1.13,82,1.756,91,1.514,115,1.044,125,1.598,131,0.835,153,2.746,162,5.219,211,1.927,259,4.703,309,3.042,356,1.098,357,1.717,361,1.652,394,2.876,409,1.16,430,1.913,712,1.669,716,1.82,735,1.559,759,1.859,818,1.229,868,11.14,869,4.496,930,2.633,939,2.83,940,2.756,941,2.268,942,3.282,943,3.038,952,2.666,960,2.61,972,2.687,974,1.429,1040,3.901,1047,3.42,1153,1.965,1334,2.345,1336,2.572,1383,2.359,1517,3.042,1520,2.06,1521,2.339,1522,2.421,1523,3.669,1565,2.601,1579,2.517,1589,2.975,1590,3.188,1591,3.038,1592,4.741,1595,4.652,1596,5.605,1629,1.805,1684,2.975,1685,3.282,1713,1.762,1728,5.058,1741,6.571,1764,2.517,1791,3.725,1820,2.135,1848,5.081,1930,2.868,1941,2.492,1982,2.492,2562,2.633,2803,2.919,2940,3.725,4496,3.395,5233,2.975,5372,3.395,5524,2.666,5570,4.741,5812,2.601,6835,2.821,7111,4.011,7112,4.011,7113,4.011,7114,4.011,7115,4.011,7116,4.011,7117,6.392,7118,4.011,7119,4.011,7120,4.011,7121,3.536,7122,6.392,7123,4.011,7124,4.011,7125,6.392,7126,4.011,7127,4.011,7128,4.011,7129,4.011]],["t/2850",[20,2.316,76,3.138,259,5.277,320,4.042,352,2.694,724,7.142,1741,6.165,2874,6.989,2891,6.606]],["t/2852",[11,5.13,20,1.783,41,1.84,74,5.698,88,2.507,122,2.776,259,6.165,302,3.99,310,4.06,317,3.843,338,2.233,349,2.121,355,3.364,614,3.922,653,4.455,741,3.812,1053,4.839,1153,4.2,1272,5.853,1314,5.274,1728,4.1,1741,6.81,1788,5.274,1790,4.12,1925,9.854,2874,5.38,3260,5.698,4327,6.815,4715,5.13,6101,6.815]],["t/2854",[514,4.502,1640,6.2,1658,6.448,3235,9.028]],["t/2856",[0,0.62,1,1.961,4,0.972,19,0.607,20,1.159,22,1.867,26,1.065,27,2.88,30,0.82,32,4.813,34,2.084,35,2.624,36,1.792,41,1.196,56,4.138,57,4.205,60,1.029,62,1.333,73,0.862,88,1.259,135,1.372,155,1.45,162,3.735,218,2.058,225,1.159,226,4.047,227,3.293,244,1.659,270,3.356,304,2.98,307,1.386,312,3.201,339,1.668,340,1.126,390,4.053,398,1.685,409,3.488,415,2.01,447,2.064,448,1.342,452,1.217,481,1.826,585,1.751,614,1.971,617,0.947,691,2.347,692,2.209,721,2.313,822,1.58,853,2.105,1156,1.606,1157,1.004,1314,3.429,1334,2.046,1507,2.693,1572,1.976,1579,2.126,1713,1.489,1728,6.811,1734,2.173,1906,1.889,2110,2.423,2510,1.961,2511,2.027,2727,2.347,3350,1.976,3967,4.719,3971,4.915,3996,2.566,4244,2.566,4964,3.146,5007,2.514,5022,6.262,5330,2.281,5947,2.281,6134,8.021,6135,9.756,6136,5.177,6137,5.177,6232,4.136,7105,3.146,7130,3.389,7131,9.1,7132,9.1,7133,11.196,7134,9.1,7135,9.1,7136,5.576,7137,3.389,7138,4.719,7139,5.576,7140,3.389,7141,3.389,7142,3.389,7143,11.196,7144,3.389,7145,7.104,7146,7.104,7147,9.787,7148,3.389,7149,3.389,7150,3.146]],["t/2858",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2860",[0,1.279,3,4.185,4,3.298,20,2.626,37,3.155,88,2.048,89,3.187,136,4.852,349,2.242,381,4.014,390,4.044,426,3.229,431,7.428,570,3.344,580,5.423,696,4.356,1003,4.657,1050,5.423,1298,5.631,1829,5.749,1873,4.2,1874,4.276,2509,6.12,2610,5.204,5910,6.865]],["t/2862",[4,1.774,12,3.351,19,1.592,31,5.36,36,4.696,37,3.95,38,1.848,41,1.905,50,3.448,53,2.186,72,2.095,76,1.743,89,2.175,91,3.351,96,4.792,105,5.062,118,3.267,225,4.407,230,1.895,299,3.378,336,6.078,338,2.312,352,2.148,356,1.694,358,2.539,381,3.932,383,2.854,406,5.749,448,3.516,481,3.334,510,4.917,556,3.579,605,4.685,619,2.761,861,3.923,881,3.551,939,2.739,1069,4.502,1076,3.093,1190,4.917,1289,4.794,1293,3.701,1330,2.761,1361,3.016,1461,3.734,1511,4.223,1512,4.502,1513,6.587,1514,4.351,1519,4.151,1533,4.165,1548,3.424,1598,5.759,1697,3.967,2155,5.631,2203,4.794,2205,5.744,2223,3.424,2605,4.06,2606,4.223,2623,4.351,3506,7.515,4213,5.744,6869,5.236,7151,5.744]],["t/2864",[13,7.312,20,2.078,37,4.253,56,5.024,80,5.319,89,4.297,131,2.081,168,5.457,169,5.422,244,2.973,299,5.457,352,2.418,398,4.971,434,5.571,547,7.274,1226,4.78,1772,5.611,3401,6.823,7152,8.459]],["t/2866",[0,1.186,20,2.218,37,3.713,122,3.454,262,4.881,278,5.678,352,2.58,398,5.307,407,4.349,525,7.765,547,7.765,849,6.766,3422,8.73,7152,9.03]],["t/2868",[0,0.953,20,1.783,31,6.699,72,2.903,83,3.313,91,4.188,131,2.562,211,5.332,306,3.89,320,3.112,354,5.698,403,4.404,426,3.054,550,5.834,570,4.094,585,4.429,618,5.085,852,3.428,856,5.939,974,3.054,1016,6.815,1174,7.256,1330,5.492,1471,5.436,1545,4.779,1629,3.858,1986,5.13,2145,4.885,2223,6.81,2224,5.561,4186,6.36]],["t/2870",[443,6.665,444,4.757,445,7.671,453,5.505,1085,8.932,1506,4.612,4606,12.171]],["t/2872",[0,1.157,30,2.517,31,6.282,35,2.791,52,8.515,66,2.584,69,3.416,70,5.974,91,3.927,143,5.258,443,6.172,444,4.406,445,7.103,1330,4.645,1506,4.27,2223,5.759]],["t/2875",[6,1.106,12,3.209,13,4.137,19,1.524,20,1.438,26,1.394,37,2.407,60,3.623,73,2.65,76,1.249,88,2.17,89,2.431,92,2.496,96,2.045,99,1.825,111,2.33,112,2.842,116,1.772,120,2.811,121,2.7,122,2.239,131,2.401,146,1.87,225,1.516,228,1.635,252,2.063,256,4.386,316,1.397,320,3.086,352,2.323,357,1.191,392,2.028,397,5.043,398,4.778,403,2.277,405,3.262,453,2.171,469,2.7,524,3.226,727,5.28,732,2.585,774,6.831,798,2.909,877,1.622,940,1.911,960,1.452,974,1.579,990,2.33,1043,1.986,1144,3.971,1153,2.171,1157,1.313,1330,4.926,1506,3.49,1519,3.975,1610,3.307,1614,2.33,1629,1.994,1708,2.506,1798,2.42,1873,2.054,2078,2.945,2155,4.386,2223,3.827,2224,2.875,2278,2.842,2390,2.781,2427,7.327,2447,9.182,2490,3.118,2610,2.544,2980,3.026,3401,3.026,3922,2.453,4309,3.907,4348,3.907,4810,6.44,4980,7.86,4981,3.907,4982,3.907,5368,7.197,5914,3.751,6788,5.497,7052,3.627,7153,3.907,7154,4.116,7155,4.432,7156,4.432,7157,4.432,7158,4.432,7159,6.916,7160,4.432]],["t/2877",[0,0.94,4,3.155,20,1.759,42,3.902,46,8.496,88,1.911,218,2.451,352,2.661,413,3.448,426,3.013,454,7.509,619,3.776,1330,4.91,1873,3.92,1874,3.99,2155,6.976,2223,7.165,2263,5.559,2264,5.472,6023,9.697,7161,11.352,7162,7.855]],["t/2879",[0,1.211,3,2.455,4,2.708,20,1.403,30,1.632,33,2.336,35,1.809,39,2.41,42,1.854,45,2.252,53,4.17,66,1.948,131,1.966,185,2.999,228,2.489,310,2.469,352,1.632,357,2.537,413,2.75,426,2.403,448,2.672,452,2.422,486,3.305,570,2.489,594,4.375,595,4.964,606,3.844,940,2.909,941,3.815,955,4.11,1053,2.942,1157,1.999,1330,4.862,1519,5.092,1556,5.363,1588,4.073,1592,5.005,1594,4.073,1595,4.91,1596,6.642,1597,4.824,1629,4.901,1708,3.815,1873,3.126,1874,3.182,2218,4.673,2219,6.642,2223,6.029,2224,7.652,2254,5.52,2255,5.363,2261,5.71,2281,8.323,2316,3.66,2325,4.234,3183,4.428,6788,5.363,7163,6.747,7164,6.265]],["t/2881",[0,0.96,3,3.144,5,2.629,12,1.715,19,0.815,20,1.466,22,2.558,23,2.308,25,2.183,26,2.716,28,1.283,30,1.099,31,5.877,33,2.441,39,3.477,42,1.249,45,1.517,47,1.517,53,1.606,66,1.782,72,2.925,76,1.987,89,1.598,91,4.391,92,3.118,106,2.913,109,1.057,114,3.582,118,1.672,119,2.569,122,1.471,131,1.799,135,1.84,136,3.644,146,2.974,159,2.629,184,2.215,212,2.375,230,1.392,315,1.239,320,1.649,339,2.237,342,1.332,349,1.124,352,1.705,355,1.782,357,1.221,358,1.865,383,2.096,409,1.314,567,2.284,570,1.676,572,2.881,578,3.987,585,2.347,652,2.498,658,1.562,664,1.897,689,2.768,716,2.061,717,2.389,840,2.718,852,1.816,872,3.37,876,2.695,877,2.58,939,4.311,940,3.04,941,4.885,974,3.077,1003,2.334,1050,2.718,1124,1.71,1136,2.608,1151,4.572,1298,2.822,1328,2.105,1330,3.856,1361,2.215,1506,3.545,1517,2.163,1519,2.124,1520,2.334,1521,2.65,1522,2.743,1523,2.608,1545,3.929,1584,2.982,1598,2.947,1629,3.172,1634,2.02,1855,4.005,1975,3.521,1988,3.521,1991,2.226,2145,2.589,2195,3.441,2210,4.717,2211,4.256,2223,4.781,2224,5.603,2238,4.219,2483,2.822,2509,2.418,2610,2.608,2787,3.307,3485,3.147,3906,4.005,6788,3.612,7015,4.219,7152,3.845,7165,4.005,7166,4.005]],["t/2883",[131,2.299,1330,4.928,1519,6.064,1629,4.968,2223,6.111,2224,7.161,6788,8.776,7153,11.436]],["t/2885",[0,1.206,6,2.708,47,3.622,225,3.711,488,6.611,570,4.004,1050,6.492,1330,4.844,2223,6.006,2874,6.81,7167,10.852,7168,10.077]],["t/2887",[0,1.202,19,1.477,22,2.165,26,3.795,30,1.993,35,2.209,37,2.867,52,6.742,53,2.912,66,2.231,69,2.705,70,4.73,72,2.79,92,2.974,115,2.146,131,1.716,143,4.163,150,3.886,219,4.186,296,3.294,333,5.271,355,3.232,617,2.304,940,3.552,1047,3.1,1128,3.242,1144,2.743,1153,4.036,1330,3.677,1361,4.016,1610,3.94,1628,7.606,1629,4.865,1630,7.739,1631,4.929,1632,6.112,1633,6.742,1638,5.283,1639,5.707,2223,4.56]],["t/2889",[0,1.038,12,3.524,19,1.19,22,3.079,23,3.374,25,3.191,26,3.396,28,1.875,30,1.606,31,4.009,33,3.233,39,3.335,42,1.825,45,3.605,49,3.939,53,2.347,56,4.693,57,4.77,66,2.228,73,1.689,88,2.109,89,2.335,91,3.524,93,3.65,100,3.905,115,1.729,125,2.646,131,1.944,146,3.939,159,3.842,181,3.221,211,3.191,230,2.034,352,1.606,425,2.63,452,2.384,467,3.146,692,2.065,940,2.863,941,3.755,1056,3.842,1157,1.967,1317,3.118,1330,4.82,1361,3.237,1471,3.253,1517,3.161,1519,3.104,1520,3.411,1521,3.873,1522,4.009,1523,3.812,1545,5.204,1558,8.671,1629,2.988,2223,5.977,2224,4.307,2247,4.471,2753,3.411,7152,5.62]],["t/2891",[12,4.482,26,3.735,76,2.689,77,5.079,92,3.445,109,2.22,120,6.052,121,5.814,210,5.814,225,4.062,397,8.256,403,4.902,841,3.069,1312,5.761,1798,5.211,2354,8.077,2434,6.515,4810,9.794,7169,7.395]],["t/2893",[0,1.085,4,3.455,20,2.03,34,6.006,36,7.216,390,3.433,413,4.911,426,3.478,1330,5.832,1629,4.393,1873,4.524,1874,4.605,2223,7.232,2224,7.813,2616,8.607]],["t/2895",[0,1.157,6,2.596,47,3.473,164,5.258,225,3.559,347,8.063,348,5.203,453,5.098,570,3.839,680,6.53,1085,8.272,1289,8.063,1330,4.645,1906,5.8,2223,5.759,2326,8.807,7170,10.406]],["t/2897",[12,3.909,20,2.154,22,2.325,23,3.128,25,2.958,26,3.257,37,2.143,42,1.692,53,2.176,60,1.87,62,2.423,84,3.217,131,2.601,136,2.597,146,2.597,316,1.94,342,1.805,349,1.523,352,2.739,357,1.654,398,4.401,426,2.193,430,2.648,452,2.21,454,4.202,514,2.379,545,3.591,694,2.958,704,3.297,918,4.662,940,2.654,1157,1.824,1330,4.623,1361,5.848,1517,2.93,1519,5.294,1629,3.981,1793,3.456,1820,4.709,2155,7.921,2223,5.733,2224,5.739,2257,9.266,2258,9.584,2509,3.276,2510,3.562,2605,4.04,2730,4.662,3129,4.33,3258,3.993,3570,4.48,4145,4.264,4192,5.037,6788,7.033,7171,6.156,7172,8.849,7173,6.156]],["t/2899",[4,2.601,14,8.422,15,7.422,19,1.143,20,1.325,22,1.675,25,3.062,26,2.004,28,2.561,30,2.194,31,3.847,32,4.797,33,3.141,34,3.92,39,2.276,41,1.367,53,3.206,66,1.871,78,3.687,115,2.362,193,3.292,196,2.679,197,2.768,218,2.628,244,1.896,394,4.751,413,3.697,619,4.048,676,3.48,821,4.421,938,4.235,960,2.971,966,3.435,1300,3.552,1330,5.135,1361,6.159,1506,2.615,1805,5.215,2075,3.256,2223,5.845,2736,3.847,2965,6.728,3366,5.618,3441,5.215,3777,3.883,5581,4.183,5603,4.483,7085,5.618,7174,5.918,7175,6.373,7176,6.373,7177,7.21,7178,5.618,7179,6.373,7180,6.373,7181,6.373,7182,5.918,7183,10.683,7184,8.422,7185,5.918]],["t/2901",[0,1.045,22,3.092,23,4.776,25,4.517,26,2.956,28,2.654,30,2.274,33,3.255,37,3.272,39,3.358,42,3.234,45,3.138,46,6.17,66,2.428,76,2.649,91,3.548,115,2.448,467,4.455,1517,4.475,1520,4.83,1545,6.559,2247,6.33,3485,6.512,7186,12.845]],["t/2903",[20,2.201,56,5.321,57,4.076,70,4.581,72,2.702,73,2.03,88,1.802,338,2.078,352,3.274,357,2.144,877,2.92,882,3.415,960,2.614,1074,4.479,1330,5.877,1506,4.345,1858,5.807,2223,7.288,2224,7.705,2257,9.722,2258,10.055,2503,4.862,2722,8.415,4936,6.183,5330,5.373,7177,6.343,7178,7.034,7187,7.41,7188,11.032]],["t/2905",[12,2.689,20,1.482,22,2.577,23,3.621,25,3.424,26,3.084,28,2.012,30,1.724,33,3.396,37,2.48,66,2.313,73,2.495,76,2.008,91,3.701,92,2.572,109,1.658,131,1.484,146,3.006,153,3.061,182,3.601,187,3.747,215,3.792,230,2.183,255,4.569,278,3.792,340,2.367,352,1.724,358,2.925,404,4.191,841,2.292,939,5.609,940,3.072,1043,4.395,1142,6.437,1330,5.005,1506,2.925,1514,5.013,1517,3.392,1519,3.331,1520,3.661,1521,4.157,1581,3.491,1629,3.206,1734,4.569,2223,6.207,2257,5.831,2263,4.956,2264,4.878,2341,5.096,2753,3.661,2971,3.526,3341,4.03,3485,4.936,7189,7.127]],["t/2907",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2910",[5,2.982,9,3.451,12,1.945,20,1.072,39,3.982,42,2.133,51,3.006,73,2.376,88,1.754,99,2.122,109,1.199,118,1.896,193,1.87,230,1.579,294,2.23,302,2.399,320,1.87,336,2.431,349,2.571,386,2.31,405,2.431,433,2.982,466,3.305,577,3.14,578,5.281,614,1.822,617,1.441,644,2.778,658,1.771,684,4.106,836,4.492,841,1.657,851,3.083,852,2.06,913,2.537,931,9.652,1056,4.492,1069,3.751,1130,5.65,1171,4.786,1173,4.775,1194,5.227,1219,7.872,1236,9.699,1238,4.543,1300,2.873,1318,3.903,1361,2.512,1539,3.903,1581,3.803,1661,3.425,1754,3.751,1765,3.383,1792,3.111,1986,3.083,2002,4.097,2014,4.543,2024,3.625,2062,3.823,2111,3.234,2187,3.14,2249,3.903,2632,3.994,3903,4.786,4570,3.625,4962,8.233,5087,3.903,5414,4.097,5946,6.171,6108,4.362,7190,6.171,7191,9.34,7192,5.154,7193,5.154,7194,4.786,7195,5.154,7196,5.154,7197,5.154,7198,7.764,7199,4.786,7200,5.154,7201,9.34,7202,5.154,7203,4.786,7204,5.154,7205,7.764,7206,5.154,7207,5.154,7208,4.786,7209,5.154,7210,5.154,7211,4.786,7212,5.154,7213,5.154,7214,5.154,7215,5.154]],["t/2912",[9,3.015,19,1.216,20,1.41,39,2.422,88,1.532,98,2.455,116,2.712,156,4.698,185,3.015,228,2.502,338,1.766,349,1.678,401,3.077,453,3.323,481,3.655,556,3.924,580,4.058,609,5.256,614,3.861,621,3.129,622,4.764,684,5.778,688,3.027,692,2.948,836,5.484,848,5.74,851,4.058,938,4.508,1064,5.256,1130,4.936,1157,3.236,1194,7.355,1269,4.698,1344,4.895,1526,5.55,1544,5.55,1601,5.392,1606,3.524,1697,4.349,1759,4.023,1795,4.508,2210,3.703,2249,5.137,2404,8.354,2438,4.63,2764,6.294,3011,7.03,5946,5.392,6101,7.533,7190,5.392,7216,6.783,7217,5.979,7218,6.783,7219,6.783,7220,11.827,7221,8.465,7222,6.298,7223,6.783]],["t/2915",[18,2.569,38,3.069,88,1.371,102,3.982,109,1.412,115,2.675,156,4.203,164,3.066,165,5.286,170,2.719,345,2.929,349,1.501,433,3.511,574,5.634,577,3.697,578,3.431,579,5.634,583,3.769,614,3.976,616,2.947,644,4.719,652,3.335,684,3.209,852,2.426,867,6.458,1076,4.378,1130,4.416,1182,3.769,1186,3.769,1202,5.135,1236,4.595,1319,2.776,1581,2.972,1639,6.065,1647,7.621,1755,8.187,1772,3.406,1864,4.501,1881,3.935,1965,4.823,2187,3.697,2505,4.085,2764,5.986,3011,6.495,3016,4.965,3910,3.89,3911,5.135,3927,4.965,4261,5.349,5007,4.501,5218,5.135,5586,4.501,5861,4.965,6108,5.135,7208,5.634,7221,6.785,7224,6.065,7225,6.068,7226,6.068,7227,5.349,7228,5.634,7229,6.068,7230,4.965,7231,6.068,7232,5.349,7233,6.068,7234,5.634,7235,8.757,7236,6.068,7237,6.068,7238,6.068,7239,8.757,7240,6.068,7241,6.068,7242,6.068]],["t/2917",[6,1.798,18,3.051,38,3.37,47,2.406,88,1.628,109,1.677,115,2.574,116,3.951,117,5.967,159,4.17,165,4.351,348,3.604,349,1.783,452,2.588,457,4.046,585,3.724,614,3.493,616,3.235,632,4.138,640,4.275,745,2.938,841,2.318,843,4.312,863,4.79,971,3.642,1006,3.812,1077,3.415,1124,2.712,1157,2.135,1182,4.477,1186,4.477,1228,3.962,1314,4.433,1319,3.297,1620,3.836,1639,4.992,1755,5.246,1986,4.312,2025,3.513,2764,6.991,3016,5.898,3020,6.338,3911,6.1,3922,5.471,4223,6.1,4265,6.353,7221,7.659,7227,6.353,7230,5.898,7243,7.208,7244,7.208,7245,8.713,7246,7.208,7247,7.208]],["t/2919",[6,1.674,19,1.686,38,2.005,96,3.096,103,3.083,109,2.527,117,4.051,118,2.469,231,3.387,578,3.795,583,4.169,614,3.325,616,1.925,778,3.98,843,4.015,847,3.795,852,2.683,861,4.256,883,6.978,924,4.015,957,4.404,1076,3.355,1130,6.846,1157,2.787,1182,4.169,1186,4.169,1314,6.681,1581,3.288,1620,3.571,1647,4.978,1755,7.905,1803,5.244,2578,4.884,2663,4.352,2764,5.78,2798,5.082,2909,4.303,3016,5.491,3415,5.916,3792,4.72,3910,4.303,3922,3.714,3932,6.231,4133,5.491,4223,5.68,5163,4.72,5861,5.491,7221,7.289,7224,6.516,7227,5.916,7230,5.491,7232,5.916,7245,5.916,7248,6.231,7249,8.735,7250,6.711,7251,9.632,7252,6.711,7253,6.711,7254,6.711,7255,6.711,7256,6.231]],["t/2921",[0,0.973,5,5.064,6,2.806,20,2.338,71,5.492,174,3.069,340,2.907,341,3.641,352,2.117,356,2.396,425,3.466,426,3.117,453,4.287,570,3.229,578,4.949,602,2.808,616,2.51,692,2.722,1058,4.287,1076,4.376,1136,5.024,1157,3.681,1612,5.816,1714,6.492,1755,8.184,1941,5.436,2156,5.611,2276,5.893,2764,6.978,2798,8.516,2904,5.676]],["t/2923",[19,1.962,93,6.017,352,2.647,401,4.966,578,6.189,5310,8.956,5946,8.701,6105,9.264,7232,9.649,7257,12.907]],["t/2925",[0,1.338,22,2.829,26,2.574,28,2.311,30,1.98,38,2.445,66,2.221,91,3.089,125,3.262,140,3.417,150,3.861,320,2.971,341,4.479,342,3.157,425,3.242,488,4.987,616,3.088,617,2.289,633,4.304,945,5.758,990,4.304,1040,3.786,1043,3.668,1157,2.425,1557,5.5,1625,5.191,2075,4.182,2755,4.159,2758,5.73,2764,4.356,2770,4.897,2773,4.629,2781,4.897,7258,9.85,7259,7.836]],["t/2927",[0,1.29,22,3.05,23,4.672,25,4.419,26,2.892,28,2.596,30,2.224,33,3.185,42,3.189,66,2.394,140,3.839,342,2.697,1040,4.471,1517,4.378,1520,4.724,1545,6.469,1557,4.698,1585,5.321,2768,5.502,2774,7.36,2778,6.965,2779,7.126,2780,6.192,7258,6.822,7259,6.693]],["t/2929",[0,1.145,22,2.963,26,1.917,27,3.074,28,1.721,30,1.475,66,1.813,69,2.002,82,3.846,91,2.301,99,2.511,112,3.909,131,1.27,140,2.545,150,2.876,221,3.68,222,3.473,244,3.064,272,2.929,295,5.634,325,2.863,342,2.577,352,1.475,357,1.638,425,2.414,426,2.172,427,3.867,437,2.095,446,6.283,451,4.289,614,2.155,774,4.897,822,2.49,826,5.572,992,5.449,1124,2.294,1149,7.075,1361,4.283,1369,4.36,1557,4.489,1620,3.245,1705,4.003,2365,6.283,2390,3.826,2755,4.464,2764,4.676,2815,3.715,2854,7.499,2918,5.998,3063,4.105,3103,4.223,3680,4.523,3688,3.954,3689,4.724,3792,6.181,7259,4.437,7260,5.374,7261,7.746,7262,5.374,7263,5.374,7264,5.374,7265,5.374,7266,5.374,7267,5.374,7268,5.374,7269,5.374,7270,5.374,7271,5.374,7272,5.374]],["t/2931",[262,5.874,712,5.342,1620,5.775,2854,6.81,2908,5.672,2987,7.038,3398,6.551,7258,9.526,7273,9.566]],["t/2933",[0,1.124,19,1.538,20,1.226,22,2.657,26,1.855,27,2.063,28,1.665,30,1.427,49,2.488,66,2.29,69,2.816,72,1.997,76,1.662,99,2.429,109,1.996,115,1.536,140,2.462,150,2.782,228,2.176,229,2.834,241,3.829,242,3.156,293,3.498,295,3.782,315,2.34,317,2.042,341,2.454,342,1.729,349,1.459,356,1.615,357,1.585,392,3.924,395,4.375,400,2.934,425,2.336,426,2.101,577,3.593,602,1.892,616,1.692,633,3.101,692,2.668,840,3.529,913,2.904,971,2.98,1036,3.671,1040,3.016,1073,4.688,1135,4.026,1157,1.747,1291,4.382,1557,3.013,1625,3.74,1634,2.622,1640,3.139,1656,3.199,1666,4.992,2075,5.671,2155,5.44,2325,3.701,2434,4.026,2505,3.971,2758,4.565,2764,5.38,2768,6.641,2770,3.529,2781,3.529,2854,6.344,3632,3.083,3636,4.826,3792,7.808,3793,9.395,4094,3.529,7274,7.562]],["t/2935",[0,1.086,22,3.167,26,3.072,27,2.479,28,2.001,30,1.714,33,2.454,66,2.486,69,2.326,109,1.649,113,2.979,131,1.476,140,2.958,150,4.608,295,4.544,325,3.327,338,1.845,342,2.078,358,2.908,602,3.135,633,3.726,692,2.204,1036,3.033,1040,3.435,1519,3.313,1557,3.62,1625,4.494,2075,4.991,2325,4.447,2755,5.681,2758,5.199,2762,2.958,2768,7.21,2770,4.24,2781,4.24,2815,4.317,2854,4.447,3276,5.157,3278,8.138,3363,4.837,3619,8.269,3632,3.704,3634,5.997,3636,7.994,3637,6.247,3638,6.336,3792,6.872,3793,5.997,7274,6.247,7275,6.247]],["t/2937",[0,0.758,22,2.715,26,2.145,27,2.386,28,1.23,30,1.054,33,2.362,41,1.804,47,1.454,66,1.963,69,1.43,73,1.108,76,1.227,85,3.439,109,1.014,112,4.374,140,1.818,150,3.218,174,2.393,211,2.093,224,2.933,242,2.51,291,2.895,295,2.793,315,1.188,325,2.045,338,1.134,341,1.812,342,1.277,348,2.178,355,1.709,400,2.167,453,2.134,570,1.607,612,3.326,614,2.411,633,2.29,692,1.355,712,1.812,741,1.937,752,2.263,818,2.09,879,2.263,882,2.92,966,2.348,972,1.831,1036,1.864,1040,2.399,1047,2.567,1082,2.763,1154,2.333,1334,1.598,1508,2.103,1518,2.809,1519,2.036,1557,2.225,1625,2.763,1660,5.582,1699,2.238,1709,3.393,1744,7.207,1790,3.278,1919,3.932,1920,3.776,2075,3.485,2325,2.733,2736,2.63,2755,5.249,2758,3.631,2762,1.818,2764,4.475,2768,5.693,2770,2.606,2781,2.606,2815,2.654,2854,2.733,2915,4.916,2941,3.463,2942,6.516,2943,6.684,2951,5.774,2952,3.564,2953,5.167,2954,3.299,2967,3.84,2969,4.965,2971,5.867,2974,8.299,2975,5.286,2980,4.657,2981,3.564,3015,2.859,3106,3.653,3276,3.17,3278,6.12,3363,2.974,3619,5.774,3632,2.277,3634,3.687,3636,3.564,3637,3.84,3792,7.267,3793,5.774,3794,4.045,7274,3.84,7275,3.84]],["t/2939",[19,2.279,38,3.797,93,5.865,352,2.58,401,4.84,616,3.06,652,5.865,1130,7.765,2127,9.03,2764,5.678,5946,8.481,6105,9.03]],["t/2941",[0,1.338,22,2.829,26,2.574,28,2.311,30,1.98,38,2.445,66,2.221,91,3.089,125,3.262,140,3.417,150,3.861,320,2.971,341,4.479,342,3.157,425,3.242,488,4.987,616,3.088,617,2.289,633,4.304,945,5.758,990,4.304,1040,3.786,1043,3.668,1157,2.425,1557,5.5,1625,5.191,2075,4.182,2755,4.159,2758,5.73,2764,4.356,2770,4.897,2773,4.629,2781,4.897,7258,9.85,7259,7.836]],["t/2943",[0,1.167,6,1.966,22,2.759,23,4.004,25,3.786,26,2.478,28,2.225,30,1.906,33,2.729,42,2.885,45,3.504,66,2.166,109,2.443,125,3.14,140,3.29,294,3.41,341,3.278,342,2.311,352,1.906,425,3.12,457,4.424,616,2.26,1040,4.151,1082,4.998,1157,2.334,1517,3.751,1520,4.048,1534,4.757,1545,5.852,1557,4.026,1585,4.56,1598,5.111,1620,4.194,1755,5.735,2764,4.194,2768,4.715,2774,7.488,2775,6.106,2778,5.968,2779,6.106,2780,5.306,2823,7.788,7258,5.846,7259,5.735]],["t/2945",[0,1.21,22,2.861,26,1.78,27,2.912,28,1.598,30,1.369,66,1.717,69,1.858,82,3.644,91,2.136,99,2.331,112,3.63,131,2.056,140,2.363,150,2.67,221,3.417,222,3.225,244,2.937,272,2.72,295,5.338,325,2.658,328,4.253,342,2.441,352,1.369,357,1.521,425,2.242,426,2.016,427,3.59,437,1.946,446,5.953,451,3.982,614,2.001,735,3.236,774,4.64,822,2.359,826,5.279,992,5.222,1124,2.13,1149,6.831,1361,4.058,1369,4.048,1557,4.253,1616,4.351,1617,5.399,1620,3.013,1626,5.171,1627,3.981,1705,3.792,2365,5.953,2390,3.552,2755,4.229,2764,4.43,2815,3.449,2854,7.279,2918,5.683,3063,3.811,3103,3.921,3680,4.199,3688,3.671,3689,4.386,3792,5.856,7259,4.12,7260,4.99,7261,7.338,7262,4.99,7263,4.99,7264,4.99,7265,4.99,7266,4.99,7267,4.99,7268,4.99,7269,4.99,7270,4.99,7271,4.99,7272,4.99,7276,5.661]],["t/2947",[262,5.874,712,5.342,1620,5.775,2854,6.81,2908,5.672,2987,7.038,3398,6.551,7258,9.526,7273,9.566]],["t/2949",[0,1.208,19,1.203,22,2.472,26,2.11,28,1.895,30,1.623,35,2.523,49,2.831,66,2.428,69,3.088,72,2.273,76,1.891,99,2.763,109,2.189,115,1.748,131,1.397,140,2.801,150,3.165,228,2.476,229,3.224,241,4.199,242,2.469,315,1.83,341,2.792,342,1.968,349,1.66,356,1.837,357,2.527,425,2.657,426,2.39,577,4.089,602,2.153,616,1.925,692,2.926,735,3.657,971,3.391,1040,3.308,1135,4.581,1157,1.988,1291,4.806,1557,3.428,1616,3.507,1617,4.352,1634,2.983,2075,6.014,2212,4.303,2434,4.581,2505,4.518,2758,3.571,2764,5.006,2768,7.043,2770,4.015,2828,5.2,2854,6.816,7277,8.735,7278,10.086,7279,6.711]],["t/2951",[0,1.066,19,1.236,22,2.519,26,2.168,28,1.946,30,1.667,33,2.387,35,1.849,66,2.273,69,2.263,109,2.23,125,2.747,131,1.435,140,2.878,150,3.251,315,1.88,322,2.704,341,2.868,342,2.021,346,3.312,352,1.667,357,1.852,425,2.73,427,4.372,466,4.42,468,3.927,616,1.977,735,3.726,882,2.95,966,3.715,1040,4.188,1043,3.089,1082,4.372,1157,2.042,1344,3.089,1557,3.522,1584,4.524,1616,3.603,1617,4.471,1620,3.669,2075,5.629,2212,4.42,2736,4.161,2758,3.669,2764,3.669,2768,7.125,2770,4.124,2775,8.538,2776,5.221,2777,9.467,2825,8.112,2854,4.326,2918,4.706,3398,4.161,3412,6.077,7277,6.401,7278,10.232]],["t/2953",[19,1.913,38,3.187,192,7.505,352,2.58,401,4.84,616,3.06,1076,5.334,1130,7.765,1314,6.562,2764,5.678,3922,5.905,5088,8.267,5310,8.73,5946,8.481]],["t/2955",[0,1.338,22,2.829,26,2.574,28,2.311,30,1.98,38,2.445,66,2.221,91,3.089,125,3.262,140,3.417,150,3.861,320,2.971,341,4.479,342,3.157,425,3.242,488,4.987,616,3.088,617,2.289,633,4.304,945,5.758,990,4.304,1040,3.786,1043,3.668,1157,2.425,1557,5.5,1625,5.191,2075,4.182,2755,4.159,2758,5.73,2764,4.356,2770,4.897,2773,4.629,2781,4.897,7258,9.85,7259,7.836]],["t/2957",[0,1.29,22,3.05,23,4.672,25,4.419,26,2.892,28,2.596,30,2.224,33,3.185,42,3.189,66,2.394,140,3.839,342,2.697,1040,4.471,1517,4.378,1520,4.724,1545,6.469,1557,4.698,1585,5.321,2768,5.502,2774,7.36,2778,6.965,2779,7.126,2780,6.192,7258,6.822,7259,6.693]],["t/2959",[0,1.237,22,2.924,26,1.863,27,3.011,28,1.673,30,1.433,66,1.776,69,1.945,82,3.768,91,2.236,99,2.44,112,3.799,131,1.234,140,2.474,150,2.795,221,3.577,222,3.376,244,3.015,272,2.847,295,5.519,325,2.782,342,2.524,352,1.433,357,1.592,425,2.347,426,2.111,427,3.758,437,2.037,446,6.155,451,4.168,614,2.094,774,4.798,822,2.44,826,5.459,992,5.362,1124,2.23,1149,6.981,1361,4.196,1369,4.237,1557,4.397,1620,3.154,1705,3.921,1807,3.889,2365,6.155,2390,3.719,2755,4.373,2764,4.581,2815,3.61,2854,7.415,2918,5.876,3063,3.99,3103,4.104,3680,4.396,3688,3.843,3689,4.592,3792,6.055,3922,6.158,7259,4.313,7260,5.223,7261,7.588,7262,5.223,7263,5.223,7264,5.223,7265,5.223,7266,5.223,7267,5.223,7268,5.223,7269,5.223,7270,5.223,7271,5.223,7272,5.223]],["t/2961",[262,5.874,712,5.342,1620,5.775,2854,6.81,2908,5.672,2987,7.038,3398,6.551,7258,9.526,7273,9.566]],["t/2963",[0,1.214,19,1.216,22,2.491,26,2.133,28,1.915,30,1.641,35,2.542,49,2.861,66,2.44,69,3.111,72,2.297,76,1.911,99,2.793,109,2.205,115,1.766,140,2.831,150,3.199,228,2.502,229,3.259,241,3.027,242,2.495,315,1.85,341,2.822,342,1.989,349,1.678,356,1.857,357,1.822,425,2.686,426,2.416,577,4.132,602,2.176,616,1.945,633,3.566,692,2.948,971,3.427,1040,3.332,1135,4.63,1157,2.009,1291,4.842,1557,3.465,1625,4.302,1634,3.015,1807,4.452,2075,6.042,2434,4.63,2505,4.567,2758,5.044,2764,5.044,2768,7.076,2770,4.058,2781,4.058,2854,6.855,3922,6.046,7280,9.478,7281,10.144]],["t/2965",[35,2.937,66,2.26,69,3.596,88,1.898,96,3.877,98,3.041,242,3.092,296,4.379,352,2.032,358,3.449,425,3.328,466,5.388,614,2.97,718,3.46,843,5.027,882,4.688,990,4.418,1584,8.475,2075,5.595,2262,3.678,2764,6.485,2854,6.873,3922,7.412,4094,6.553,4186,6.233,5805,7.407,7281,10.171,7282,8.404]],["t/2967",[0,1.061,76,2.689,108,4.543,109,2.764,110,3.779,115,2.485,131,1.987,167,6.119,349,2.36,356,2.613,357,2.564,430,3.555,567,4.797,570,3.521,692,2.968,877,3.492,974,3.399,1003,4.902,1157,3.519,1298,5.928,2764,6.321,2854,7.454,7190,7.586]],["t/2969",[38,3.009,42,2.769,108,4.796,131,2.098,316,3.175,357,2.707,430,3.016,974,3.589,1040,4.658,1157,3.638,1803,4.864,2764,6.536,2768,6.027,2774,6.389,2780,6.783,7283,10.075,7284,8.881]],["t/2971",[0,0.928,22,2.866,27,3.815,28,2.357,30,2.019,35,2.925,41,2.34,66,2.657,72,2.827,73,2.124,109,1.942,110,3.306,115,2.174,151,5.782,152,5.698,242,3.071,295,5.352,342,2.448,718,3.437,822,2.366,1361,4.069,1627,3.992,1713,5.659,1741,4.62,2764,4.443,2845,6.075,3367,5.782,3632,4.363,3792,5.872,3922,4.62,7259,7.937,7285,12.147,7286,10.906]],["t/2973",[0,1.267,22,2.348,25,4.294,49,3.77,109,2.079,115,2.327,140,3.731,230,2.738,293,5.3,341,3.718,346,4.294,356,2.447,687,5.939,712,3.718,718,4.693,841,2.874,882,3.825,1073,7.104,1099,5.213,1640,4.756,1803,5.502,1919,4.709,2764,7.265,2829,3.573,3031,5.866,3632,4.671,4185,7.313,7287,8.937,7288,8.937]],["t/2975",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/2977",[0,1.256,20,1.832,60,2.677,62,3.468,76,2.483,92,3.181,109,2.05,122,2.853,131,2.596,320,3.198,349,2.18,383,4.066,390,3.099,444,3.731,519,4.579,520,4.749,882,3.772,1121,6.588,1144,4.151,1328,4.084,2033,5.42,2753,5.802,3922,7.276,5266,7.823,6370,7.413,6377,6.104,6378,6.104]],["t/2979",[0,1.249,9,4.996,113,4.724,131,2.729,356,3.076,429,5.324,700,6.451]],["t/2981",[6,2.2,19,1.098,35,2.77,73,1.559,108,4.197,122,1.984,131,2.353,153,2.632,154,3.665,215,3.26,225,2.095,243,3.221,306,2.779,322,2.403,350,2.506,352,1.482,357,3.533,407,2.497,430,3.846,437,2.106,514,2.367,596,6.202,598,3.391,601,3.984,616,1.757,622,3.079,683,2.481,693,2.449,718,2.523,754,5.162,960,3.701,967,5.804,972,2.575,1038,2.702,1292,4.309,1344,4.629,1547,3.391,1566,5.061,1610,2.93,1616,3.202,1750,4.182,1798,3.345,1826,4.125,1942,2.814,2169,3.464,2244,3.805,2561,5.185,2870,4.747,2969,4.459,3711,5.719,4158,4.125,4303,5.185,4959,3.805,5567,4.747,6762,5.4,6763,5.185,7289,5.185,7290,5.689,7291,5.689,7292,5.689,7293,6.127,7294,5.689,7295,5.4,7296,4.545]],["t/2983",[972,4.943,1610,5.623,7289,9.952]],["t/2985",[0,0.797,1,4.147,4,2.824,6,1.788,19,2.016,35,1.922,76,2.019,90,5.89,92,4.06,109,1.667,115,1.866,122,2.32,131,2.522,153,3.078,174,2.513,230,2.196,278,5.986,320,4.082,322,4.412,324,4.704,343,3.306,356,1.962,357,1.925,383,3.306,409,2.847,412,3.862,428,4.053,430,2.145,740,4.18,877,2.622,974,2.553,1136,4.114,1144,4.227,1381,6.317,1549,5.553,1610,5.379,1614,3.768,1798,5.376,1956,4.892,2244,4.452,2561,5.79,2582,6.317,2583,6.317,2585,9.143,2599,5.306,4082,5.316]],["t/2987",[0,1.256,20,1.832,60,2.677,62,3.468,76,2.483,92,3.181,109,2.05,122,2.853,131,2.596,320,3.198,349,2.18,383,4.066,390,3.099,444,3.731,519,4.579,520,4.749,882,3.772,1121,6.588,1144,4.151,1328,4.084,2033,5.42,2753,5.802,3922,7.276,5266,7.823,6370,7.413,6377,6.104,6378,6.104]],["t/2989",[0,1.217,131,2.688,356,2.996,429,5.186,585,6.668,700,6.284,725,5.336,2145,7.353]],["t/2991",[6,1.5,19,1.077,35,3.187,47,2.903,53,2.124,108,2.861,131,2.332,242,2.211,266,5.64,317,3.538,357,3.328,366,4.26,386,2.693,430,3.99,486,4.26,585,6.139,725,2.93,754,4.406,817,3.505,839,5.087,847,6.72,960,2.848,967,5.249,972,2.527,989,4.163,1038,2.651,1047,3.845,1052,3.662,1100,3.697,1102,4.163,1108,3.374,1334,2.205,1417,4.458,1798,3.282,2145,6.77,2244,3.733,2426,4.777,2451,4.777,2462,4.552,2463,5.087,2464,5.087,2466,4.227,2467,4.918,2468,5.581,2469,8.075,2470,7.116,2471,5.581,2472,5.581,2473,4.163,2474,5.581,2475,5.158,2476,5.581,2477,5.298,2478,5.298,2479,3.945,2480,5.298,2481,5.087,2482,3.812]],["t/2993",[0,1.227,60,3.941,518,5.28,774,6.154,2462,8.362,2463,9.344,2464,9.344,2465,10.252,7297,11.042]],["t/2995",[19,1.569,20,1.82,109,2.891,110,3.466,115,2.279,122,3.641,131,1.822,182,4.422,253,5.236,261,7.38,266,8.058,267,4.309,268,6.781,313,7.789,317,3.03,358,3.592,366,5.509,585,4.521,852,3.499,904,7.715,957,5.744,1096,5.166,1100,5.383,1101,6.258,1108,6.312,2145,4.986,2462,6.628,2470,7.161,2484,6.957,7298,8.752]],["t/2997",[0,1.256,20,1.832,60,2.677,62,3.468,76,2.483,92,3.181,109,2.05,122,2.853,131,2.596,320,3.198,349,2.18,383,4.066,390,3.099,444,3.731,519,4.579,520,4.749,882,3.772,1121,6.588,1144,4.151,1328,4.084,2033,5.42,2753,5.802,3922,7.276,5266,7.823,6370,7.413,6377,6.104,6378,6.104]],["t/2999",[0,1.227,131,2.701,350,5.306,356,3.023,429,5.231,562,5.416,700,6.339]],["t/3001",[0,0.96,42,1.636,45,3.721,67,2.783,131,2.88,193,3.135,243,4.541,262,2.724,306,2.701,310,2.178,322,4.374,340,1.978,350,5.44,429,2.821,430,1.782,562,5.639,602,3.261,692,1.852,718,4.185,741,2.647,772,3.008,822,1.687,900,3.13,956,4.059,1034,3.392,1115,5.251,1123,4.364,1344,3.87,1566,4.231,1569,3.472,1759,3.531,1798,4.716,2244,3.698,2300,3.861,2794,4.416,2834,3.342,2860,4.509,3185,4.064,3223,4.333,3235,9.173,4243,4.333,4277,5.248,4278,4.872,4284,4.732,4285,4.009,4294,5.248,4295,5.039,4297,5.248,4298,5.248,4300,8.02,4301,5.528,7299,5.954]],["t/3003",[0,1.572,42,2.584,67,4.395,193,5.131,262,4.301,409,2.718,772,4.751,822,2.665,1569,5.484,2860,7.12,3223,6.842,4278,7.693,4282,8.287,4294,8.287,4295,7.957,4296,10.373,4297,8.287,4298,8.287,4299,8.73]],["t/3005",[0,1.256,20,1.832,60,2.677,62,3.468,76,2.483,92,3.181,109,2.05,122,2.853,131,2.596,320,3.198,349,2.18,383,4.066,390,3.099,444,3.731,519,4.579,520,4.749,882,3.772,1121,6.588,1144,4.151,1328,4.084,2033,5.42,2753,5.802,3922,7.276,5266,7.823,6370,7.413,6377,6.104,6378,6.104]],["t/3007",[0,1.227,131,2.701,356,3.023,429,5.231,700,6.339,756,5.17,1321,8.621]],["t/3009",[35,2.827,83,3.064,131,1.651,357,3.704,430,3.933,457,4.451,464,3.757,683,3.211,754,4.545,756,4.201,841,2.55,849,5.029,960,3.453,967,6.084,972,4.432,1047,2.984,1291,4.051,1317,3.723,1518,3.265,1798,4.33,1942,3.643,2244,4.926,2305,5.339,3227,6.711,3887,5.795,3888,6.253,5648,6.006,5725,8.169,5754,7.363,5755,6.144,5756,7.363,5757,6.99,5758,6.303,5759,6.006,5760,6.711]],["t/3011",[401,5.143,676,6.19,756,4.518,3227,9.595,4988,9.595,5760,9.595,5761,10.528]],["t/3013",[0,1.249,131,2.34,349,2.779,356,3.076,464,5.324,756,4.478,1321,7.468,1750,7.671]],["t/3015",[131,2.557,218,2.919,409,2.913,430,3.676,464,5.819,756,4.015,875,4.96,1317,5.766,1634,4.479,1798,5.501,2244,6.258,2390,6.322,3026,7.087,3223,7.332,4560,5.876,5725,7.807,5747,8.881]],["t/3017",[186,5.89,218,3.646,409,3.033,1163,5.89,1164,5.807,1562,6.886,1634,4.664,2390,6.584,2490,7.38,3026,7.38,3173,8.585,3223,7.636,3887,5.767,5747,9.249,5748,9.743]],["t/3019",[0,1.256,20,1.832,60,2.677,62,3.468,76,2.483,92,3.181,109,2.05,122,2.853,131,2.596,320,3.198,349,2.18,383,4.066,390,3.099,444,3.731,519,4.579,520,4.749,882,3.772,1121,6.588,1144,4.151,1328,4.084,2033,5.42,2753,5.802,3922,7.276,5266,7.823,6370,7.413,6377,6.104,6378,6.104]],["t/3021",[0,1.227,131,2.701,306,5.885,307,5.306,356,3.023,429,5.231,700,6.339]],["t/3023",[4,2.252,6,0.979,21,1.673,35,3.065,42,1.726,44,1.942,85,1.605,108,1.868,122,1.271,131,1.869,137,3.047,148,1.78,154,2.348,230,1.924,262,1.795,267,3.092,270,1.6,294,1.698,306,1.78,307,1.605,315,1.713,316,2.475,317,2.719,322,3.521,329,5.362,340,1.304,352,0.949,357,3.736,360,4.992,388,1.983,409,1.134,413,1.6,430,1.88,567,1.972,602,1.259,716,2.849,717,4.129,754,3.87,759,1.818,817,3.663,841,1.262,845,2.289,926,4.027,960,1.285,967,5.044,972,4.128,974,1.398,1034,2.236,1038,3.464,1077,1.859,1115,2.027,1128,1.544,1312,2.369,1678,2.856,1788,2.414,1798,2.143,1817,3.211,1826,2.642,1874,1.851,1920,4.968,1932,2.679,2056,2.489,2061,1.983,2067,2.575,2126,4.229,2211,2.369,2244,2.437,2294,4.992,2473,4.35,2536,4.757,2599,3.385,2790,4.418,2833,2.608,2891,2.327,2896,2.253,2906,4.659,2908,2.051,3110,3.606,3162,4.491,3231,2.679,3632,2.051,3966,4.229,4079,4.377,4350,6.044,4445,4.35,5063,2.76,5092,3.119,5093,3.211,5095,3.211,5097,3.119,5098,4.571,5103,4.418,5107,3.321,5111,4.229,5118,3.041,5119,4.491,5120,3.459,5132,3.041,5147,6.085,5152,3.119,5153,3.119,5156,3.459,5161,3.459,5162,5.536,5163,2.76,5164,3.321,5173,3.211,5176,3.211,5177,3.321,5178,5.316,5192,3.644,5193,3.644,5194,3.644,5195,3.644,5196,3.644,5197,3.321,5198,3.644,5199,3.644,5200,3.644]],["t/3025",[960,3.851,5119,8.408,5197,9.952]],["t/3027",[0,1.256,20,1.832,60,2.677,62,3.468,76,2.483,92,3.181,109,2.05,122,2.853,131,2.596,320,3.198,349,2.18,383,4.066,390,3.099,444,3.731,519,4.579,520,4.749,882,3.772,1121,6.588,1144,4.151,1328,4.084,2033,5.42,2753,5.802,3922,7.276,5266,7.823,6370,7.413,6377,6.104,6378,6.104]],["t/3029",[0,1.238,131,2.319,356,3.049,429,5.277,700,6.394,1157,3.3,1880,6.042,3236,9.427,3237,7.965]],["t/3031",[6,2.004,35,3.402,92,3.838,114,4.08,115,2.091,131,2.482,278,4.274,322,3.15,357,3.408,430,3.797,842,6.896,1038,3.542,1157,2.379,1506,3.295,1566,3.934,1578,3.974,1798,4.385,1826,5.407,1880,6.465,2244,4.988,4111,5.742,4389,5.482,4560,6.201,5111,7.158,6391,6.571,6392,8.998,6393,6.796,6394,6.796,6395,6.571,6396,5.482,6410,6.383,6413,7.079,6414,7.079,6421,7.457]],["t/3033",[6,2.534,115,2.645,131,2.768,357,2.728,415,7.319,817,5.923,1880,6.694,2511,7.383,4145,7.034,4389,6.933,6391,8.31,6392,10.445,6393,8.595,6394,8.595]],["t/3035",[0,1.256,20,1.832,60,2.677,62,3.468,76,2.483,92,3.181,109,2.05,122,2.853,131,2.596,320,3.198,349,2.18,383,4.066,390,3.099,444,3.731,519,4.579,520,4.749,882,3.772,1121,6.588,1144,4.151,1328,4.084,2033,5.42,2753,5.802,3922,7.276,5266,7.823,6370,7.413,6377,6.104,6378,6.104]],["t/3037",[131,2.744,296,4.532,366,5.554,536,7.243,700,6.509]],["t/3039",[35,3.017,153,2.606,286,5.614,357,3.442,386,4.604,412,3.27,430,4.06,448,2.403,576,3.63,615,5.124,741,2.697,754,4.85,960,3.907,967,5.779,975,4.965,976,5.349,977,8.167,978,5.349,979,4.142,980,4.595,981,5.349,982,7.719,983,9.204,984,5.349,985,5.349,986,7.719,987,5.349,988,5.349,989,7.116,990,3.19,991,5.349,992,3.209,993,6.373,994,6.261,995,5.349,996,4.823,997,5.495,998,5.135,999,7.719,1000,4.702,1009,4.085,1010,5.634,1011,5.634,1012,5.634,1013,5.634,1014,5.634,1015,5.634,1017,5.634,1018,5.634,1019,5.634,1020,5.634,1021,5.634,1022,5.634,1023,5.634,1798,3.313,2244,3.769,3185,4.142]],["t/3041",[35,3.057,153,2.684,286,5.733,357,3.472,386,4.68,412,3.367,430,4.087,448,3.541,576,3.738,615,5.194,741,2.777,754,4.915,960,4.407,967,5.857,975,5.112,976,5.507,977,9.062,978,5.507,979,4.265,980,4.731,981,5.507,982,9.206,983,10.27,984,5.507,985,5.507,986,9.206,987,5.507,988,5.507,989,7.234,990,3.285,991,5.507,992,4.73,993,6.508,994,6.394,995,5.507,996,4.966,997,5.611,998,5.287,999,7.882,1000,4.841]],["t/3043",[0,1.256,20,1.832,60,2.677,62,3.468,76,2.483,92,3.181,109,2.05,122,2.853,131,2.596,320,3.198,349,2.18,383,4.066,390,3.099,444,3.731,519,4.579,520,4.749,882,3.772,1121,6.588,1144,4.151,1328,4.084,2033,5.42,2753,5.802,3922,7.276,5266,7.823,6370,7.413,6377,6.104,6378,6.104]],["t/3045",[18,4.634,131,2.858,664,4.569,700,6.284,875,5.389,1100,7.939,1991,5.362,4560,6.384]],["t/3047",[6,3.031,13,4.994,131,2.529,148,3.787,309,3.187,317,2.891,357,2.243,430,3.636,754,3.599,875,6.341,967,4.288,972,3.509,1334,4.001,1518,3.437,1798,4.558,1991,5.343,2244,5.185,2416,5.782,2425,8.669,3798,9.23,4079,4.653,4098,9.412,4560,7.512,5972,7.937,7300,6.636,7301,7.752,7302,7.752,7303,7.359]],["t/3049",[905,9.816,960,3.585,2416,7.581,7300,8.701,7301,10.164,7302,10.164,7303,9.649,7304,10.561]],["t/3051",[0,1.256,20,1.832,60,2.677,62,3.468,76,2.483,92,3.181,109,2.05,122,2.853,131,2.596,320,3.198,349,2.18,383,4.066,390,3.099,444,3.731,519,4.579,520,4.749,882,3.772,1121,6.588,1144,4.151,1328,4.084,2033,5.42,2753,5.802,3922,7.276,5266,7.823,6370,7.413,6377,6.104,6378,6.104]],["t/3053",[0,1.176,19,1.897,131,2.634,356,2.896,357,2.842,429,5.013,430,3.167,464,5.993,614,3.739,615,5.762,700,6.074,901,7.328]],["t/3055",[131,2.557,322,3.952,400,5.011,430,4.232,464,5.819,615,4.589,741,4.479,759,4.668,1088,6.322,1578,4.985,1634,4.479,1798,5.501,2244,6.258,3223,7.332,3225,8.881]],["t/3057",[153,4.545,430,3.167,453,5.183,741,4.703,759,4.902,921,7.848,1088,6.639,1570,8.013,1578,5.235,1634,4.703,3039,7.565,3130,8.657,3202,9.326,3223,7.7,3225,9.326]],["t/3059",[0,1.256,20,1.832,60,2.677,62,3.468,76,2.483,92,3.181,109,2.05,122,2.853,131,2.596,320,3.198,349,2.18,383,4.066,390,3.099,444,3.731,519,4.579,520,4.749,882,3.772,1121,6.588,1144,4.151,1328,4.084,2033,5.42,2753,5.802,3922,7.276,5266,7.823,6370,7.413,6377,6.104,6378,6.104]],["t/3061",[0,1.227,131,2.701,356,3.023,429,5.231,514,5.012,601,4.988,700,6.339,1991,5.409]],["t/3063",[0,0.99,3,2.26,4,1.367,6,0.701,12,1.799,19,0.504,35,2.791,38,0.839,47,0.938,76,0.792,108,3.9,109,0.654,115,0.732,122,0.91,124,1.892,131,2.544,135,1.138,153,2.667,154,1.681,166,1.534,174,0.985,185,1.249,193,1.73,218,2.12,232,1.976,254,1.892,272,2.291,294,1.216,307,1.95,309,1.82,316,0.885,317,1.651,322,1.102,329,2.324,342,0.824,357,3.521,388,3.138,390,1.676,392,4.568,409,0.812,413,1.145,430,3.705,514,2.827,526,3.486,549,2.506,567,2.396,570,1.037,594,4.027,601,4.022,602,0.901,606,1.601,644,1.514,648,1.844,668,1.946,670,1.601,698,2.639,699,2.087,717,1.477,718,1.157,727,3.413,735,1.092,738,1.443,739,1.577,754,3.532,755,1.397,759,1.302,778,1.666,817,4.267,841,0.903,875,1.383,889,1.544,891,5.377,905,2.009,911,1.696,928,3.409,957,1.844,960,2.683,967,4.876,972,2.61,1038,2.739,1066,1.666,1067,1.892,1144,1.587,1155,1.405,1334,1.031,1344,1.259,1508,1.356,1553,1.626,1566,1.376,1569,1.639,1571,2.045,1572,1.639,1573,2.128,1578,2.359,1619,4.303,1629,2.145,1798,1.534,1944,2.378,1956,1.918,1986,1.681,1991,1.376,2003,2.128,2077,1.844,2102,6.578,2103,1.918,2120,1.946,2126,1.892,2132,1.801,2133,2.299,2136,3.901,2137,3.897,2166,1.822,2212,1.801,2244,1.745,2416,1.946,2466,1.976,2475,1.666,2503,1.712,2516,1.666,2527,1.495,2560,2.084,2562,1.844,2599,3.347,2631,2.084,2690,1.801,2794,2.084,2803,2.045,2806,2.737,2949,3.611,3168,2.233,3858,2.233,3922,1.555,4285,3.21,4435,5.081,4554,2.477,4615,2.177,5085,2.378,5755,2.177,5763,3.611,7305,2.477,7306,2.609,7307,2.477,7308,2.477,7309,2.609,7310,2.378,7311,2.299,7312,2.477,7313,2.609,7314,2.609,7315,2.477,7316,2.609,7317,2.233,7318,4.427,7319,2.378,7320,2.609,7321,2.609,7322,2.609,7323,2.477,7324,2.299,7325,4.202,7326,2.609,7327,2.609,7328,2.609,7329,2.477,7330,2.378,7331,2.477,7332,2.378,7333,2.378,7334,2.477,7335,2.477,7336,2.477,7337,2.378,7338,2.045,7339,2.378,7340,2.609,7341,2.299,7342,2.609]],["t/3065",[0,1.239,60,3.75,62,4.858,241,3.853,432,4.956,518,4.128,519,5.791,520,4.652,522,7.505,526,4.846,666,6.538,727,6.127,822,3.159,1163,4.846,1164,4.778,2102,6.449,2113,6.862,2120,5.979,2132,5.535,2137,5.417,2527,4.594,2566,6.538,2806,4.956,3216,7.064,5169,7.306,5763,6.538,7317,6.862,7337,7.306,7339,7.306,7341,9.12,7343,5.893]],["t/3067",[0,1.227,3,4.018,4,3.721,20,2.296,390,3.882,426,3.933,448,4.372,1873,5.116,1874,5.208]],["t/3069",[0,1.276,3,2.308,4,1.819,6,2.255,19,1.137,20,1.318,25,3.047,26,2.842,47,2.117,60,1.926,62,2.495,84,3.314,92,4.553,98,3.271,118,2.333,176,3.828,183,2.457,210,3.863,225,3.601,274,4.392,342,2.65,349,1.568,358,2.602,380,6.516,388,3.204,390,2.23,398,3.154,407,3.684,415,3.761,426,2.259,448,2.511,457,3.56,467,3.005,537,5.888,562,2.647,653,6.554,658,2.179,861,4.021,956,2.174,1128,2.495,1170,4.021,1344,2.842,1534,3.828,1566,3.106,1579,3.979,1629,2.853,1993,5.59,2301,4.803,2509,3.375,2510,3.669,2511,3.794,2561,3.729,2924,5.367,4328,3.939,4513,5.888,4637,5.888,5909,5.888,7344,6.341,7345,5.888,7346,6.341,7347,6.341,7348,6.341,7349,6.341,7350,5.59,7351,6.341,7352,6.341,7353,6.341,7354,6.341,7355,5.888,7356,6.341]],["t/3071",[0,1.161,3,2.274,4,2.243,12,2.951,19,1.12,22,1.025,27,1.364,28,1.101,30,0.943,35,1.676,37,1.357,38,2.336,66,1.613,69,3.429,72,2.116,74,4.153,76,2.52,83,1.507,85,1.595,88,0.881,92,3.533,95,2.626,98,2.262,99,3.22,108,1.856,109,1.454,114,3.175,115,2.036,120,2.473,121,2.376,122,2.024,126,2.893,131,2.449,145,6.106,166,2.129,174,1.368,183,3.031,193,1.415,230,1.195,231,1.404,244,1.16,252,1.815,308,2.627,309,2.986,322,2.452,342,2.293,356,1.711,380,4.04,388,3.952,390,1.371,405,3.689,426,1.389,429,1.848,430,1.167,448,3.097,533,3.739,538,5.114,602,2.005,653,4.648,692,1.213,841,1.254,854,4.733,960,1.277,1061,4.719,1154,4.79,1319,1.784,1344,4.387,1461,2.354,1506,2.565,1508,1.883,1557,1.992,1566,4.795,1634,3.477,1699,2.003,1798,2.129,1967,3.191,1969,2.893,2033,2.399,2169,2.205,2251,4.636,2252,4.636,2274,4.102,2325,4.908,2538,2.626,2559,6.619,2561,5.26,3129,2.743,3485,6.78,3853,2.662,4312,3.438,5521,7.319,6835,2.743,7345,5.803,7357,6.25,7358,6.25,7359,6.25,7360,3.9,7361,3.9,7362,8.945,7363,7.821,7364,6.25]],["t/3073",[19,1.979,76,3.111,99,4.546,155,4.725,296,5.186,407,4.501,4106,7.766,7365,11.042,7366,10.252]],["t/3075",[19,1.569,31,5.283,36,4.629,41,2.413,43,4.878,50,4.878,53,3.974,60,3.774,73,2.226,88,1.977,91,3.303,92,3.159,96,4.038,98,3.168,109,2.036,115,2.279,131,1.822,357,2.351,380,4.521,403,4.496,598,4.844,653,4.547,739,4.913,774,6.267,1330,3.906,1519,5.808,2490,6.156,2605,5.744,2606,5.974,6870,9.517,7153,7.715,7154,8.127]],["t/3078",[13,6.851,18,3.141,20,1.542,76,2.09,83,2.866,92,2.678,110,2.938,153,3.187,174,2.602,183,2.875,184,3.616,187,3.9,230,2.273,320,2.692,345,4.867,348,3.709,352,1.794,380,3.833,392,3.394,400,3.69,434,5.619,443,4.4,459,4.078,598,4.106,621,3.423,627,5.399,653,3.855,658,2.55,683,3.004,841,2.386,842,4.292,867,4.259,876,4.4,877,4.19,913,3.652,1170,4.705,1300,6.382,1319,3.394,1344,3.324,1502,4.869,1506,4.137,1656,4.024,1697,4.757,2427,5.218,2484,5.897,2595,5.138,2753,3.811,3801,6.889,3853,5.064,4880,5.618,4949,5.399,6864,5.897,6871,9.691,7367,6.889,7368,6.889]],["t/3080",[12,3.412,19,0.712,20,1.646,28,1.122,38,1.187,47,1.326,60,2.746,73,2.014,76,1.12,81,3.841,88,1.789,89,1.397,92,1.434,98,1.438,99,1.636,113,1.67,114,2.019,115,1.035,118,1.462,125,1.583,127,1.891,131,0.827,136,1.676,139,2.608,153,1.707,164,2.008,170,3.548,183,2.458,188,4.271,211,1.909,218,2.294,223,2.468,229,1.909,243,2.089,262,1.818,299,2.169,320,1.442,322,2.489,380,2.053,398,1.976,401,1.802,409,1.149,426,1.415,438,4.091,439,2.608,443,2.357,481,2.141,524,2.892,622,1.997,624,2.841,625,3.689,627,2.892,650,8.28,680,2.493,727,2.184,739,2.23,745,3.685,755,1.976,774,3.536,778,2.357,818,1.217,822,2.8,908,3.009,1043,4.051,1070,3.079,1143,2.712,1154,3.397,1300,4.413,1471,1.946,1506,3.71,1508,4.364,1629,1.788,1804,4.383,1926,2.264,2022,5.763,2023,6.98,2033,2.444,2390,2.493,2427,5.57,2516,2.357,2527,2.115,2538,4.271,2628,3.158,2792,4.915,2874,2.493,3273,3.363,3328,8.874,3350,5.763,3365,3.502,4036,3.363,4145,2.752,4291,3.251,4470,4.915,4909,6.702,4932,3.502,4949,8.045,5368,3.363,5947,2.675,6090,3.502,6361,3.158,6366,2.841,6381,3.251,6868,3.363,6869,3.363,6870,3.363,6872,8.395,6873,6.98,6874,3.689,6875,5.592,6876,3.689,6877,3.502,6878,3.689,6879,3.689,6880,3.689,6881,3.689,6882,3.689,6883,3.689,7369,3.689,7370,3.973,7371,3.973]],["t/3082",[9,5.468,53,4.122,60,1.996,125,2.619,131,1.368,223,4.082,322,2.578,333,3.203,439,6.084,444,2.782,452,2.359,514,2.539,598,3.637,617,1.837,621,3.032,623,6.543,650,9.444,694,4.454,718,2.706,822,3.486,875,3.235,939,5.165,1124,2.473,1143,4.486,1157,1.947,1324,3.663,1506,3.804,1763,5.092,1790,3.157,1920,3.637,2022,4.783,2510,3.802,2595,4.552,2624,5.377,3226,3.716,3258,4.262,3266,7.845,3328,6.52,3350,3.833,3929,7.368,4160,5.092,4346,4.875,5603,4.622,6868,5.562,6895,6.102,6896,10.83,6897,6.102,6898,6.102,7372,6.102]],["t/3084",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/3086",[219,5.078,390,3.514,448,3.958,450,5.958,944,7.945,1562,6.56,1609,7.378,2443,7.945,4626,8.739,4907,8.459,5335,9.281,7373,12.222,7374,9.996,7375,9.996,7376,9.996,7377,7.031,7378,6.923,7379,9.996]],["t/3088",[18,2.903,19,1.97,88,1.549,98,2.482,109,1.595,118,2.522,166,3.744,182,3.464,223,4.259,230,3.366,345,3.31,386,3.072,614,3.375,616,3.151,617,1.917,627,4.99,644,3.695,658,3.776,660,4.259,703,3.294,841,2.205,842,3.967,851,4.102,852,2.741,877,2.509,882,2.934,887,6.044,1157,2.031,1241,5.45,1291,3.502,1305,4.903,1460,7.996,1539,5.193,1572,5.57,1656,3.719,1658,3.795,1699,3.522,1803,4.61,2002,5.45,2025,3.342,2241,3.795,2630,5.193,3020,4.396,3320,5.803,3344,4.396,3399,4.99,3494,5.61,3900,5.313,3952,9.685,4062,6.366,4220,4.903,5520,6.366,6783,6.366,7222,6.366,7248,6.366,7377,4.823,7378,4.749,7380,6.044,7381,6.856,7382,6.856,7383,6.044,7384,8.15,7385,5.803]],["t/3090",[88,2.538,2630,8.51,7377,7.904,7378,7.783,7384,8.336,7385,11.745]],["t/3092",[5,4.01,20,1.441,38,3.566,39,4.636,47,2.313,116,3.846,117,5.808,118,2.55,159,4.01,302,3.226,338,1.805,358,3.948,394,3.119,401,4.365,426,2.469,577,4.223,616,3.597,652,3.81,658,2.382,703,3.33,841,3.094,913,3.413,933,8.397,945,4.875,1076,4.811,1269,4.801,1291,5.646,1553,4.01,1572,4.043,1803,4.645,1864,5.142,1881,4.495,2025,3.379,2111,4.35,2501,8.481,2630,5.249,4211,5.866,4570,4.875,4934,5.866,5809,6.436,7005,8.934,7011,6.436,7199,6.436,7386,6.932,7387,9.622,7388,6.436,7389,8.934,7390,6.932,7391,5.866,7392,6.11]],["t/3094",[5,3.802,19,1.178,38,3.208,47,2.193,88,1.484,102,4.313,104,4.699,109,1.529,116,3.706,156,4.552,230,2.013,338,2.414,348,3.286,355,4.213,358,2.697,390,2.311,409,1.9,426,2.341,591,3.303,616,1.885,718,3.817,740,3.833,817,3.833,882,3.967,945,4.622,1255,4.486,1278,6.102,1324,3.663,1471,3.219,1553,3.802,1639,4.552,1642,4.875,1803,6.161,1856,4.124,2272,4.875,2276,4.425,2588,5.377,2662,7.8,2663,8.277,3632,3.435,3902,4.699,4133,5.377,4570,4.622,4924,4.875,5369,5.224,7383,5.793,7384,4.875,7391,11.924,7393,6.572,7394,6.572,7395,6.572,7396,9.871]],["t/3096",[18,3.178,39,2.681,73,1.91,103,3.449,109,1.747,165,4.531,183,2.909,223,4.663,345,3.624,352,1.816,401,3.405,576,4.491,578,4.245,602,2.408,614,3.592,616,2.153,653,3.9,658,2.58,852,3.001,909,4.813,933,5.28,1006,3.97,1076,3.753,1154,5.442,1182,4.663,1186,4.663,1241,5.967,1271,6.353,1291,5.885,1456,5.124,1658,4.155,1803,3.624,1881,4.868,2241,4.155,2679,4.452,2914,4.988,3020,4.813,3726,5.685,3856,6.617,3900,5.817,3902,7.266,4211,6.353,4223,6.353,4238,6.353,5586,5.568,7377,7.148,7384,7.538,7385,6.353,7389,6.97,7397,6.97,7398,7.507,7399,7.507,7400,6.97,7401,7.507,7402,7.507,7403,7.507,7404,6.97]],["t/3098",[9,4.118,38,2.767,88,2.092,98,3.353,109,2.155,187,4.87,302,4.311,591,4.656,653,4.814,658,3.184,1006,4.9,1241,10.644,1485,8.602,1543,7.58,2025,4.516,2630,7.016,2749,6.516,2757,6.416,3900,7.178,3952,8.166,4136,6.742,4520,8.166,7377,6.516,7378,6.416,7384,9.933,7385,7.84]],["t/3100",[3,3.299,38,2.708,98,3.281,115,2.361,156,6.279,165,5.472,211,4.356,347,7.024,348,4.532,616,2.6,636,4.917,881,5.204,1291,4.631,1319,4.147,1386,5.975,1539,6.865,1707,6.724,1709,4.509,1856,5.688,2025,6.158,3017,8.417,3910,5.812,7377,6.376,7391,7.672,7392,7.991,7400,8.417,7405,7.206,7406,11.501,7407,7.991,7408,9.065,7409,8.417]],["t/3102",[88,2.24,98,3.589,115,2.582,156,6.869,338,2.582,409,3.516,614,4.65,1653,7.511,1707,9.022,1795,6.59,1803,5.872,1856,6.223,3910,6.359,4133,8.115,4189,7.883,7378,6.869,7410,12.164]],["t/3104",[9,3.786,109,1.981,165,5.141,401,3.863,578,4.816,585,5.708,591,5.553,614,3.905,653,4.425,1006,4.504,1134,5.401,1182,5.29,1186,5.29,1252,7.208,1291,4.351,1305,6.09,1456,5.813,1543,6.969,1639,5.899,1697,5.46,1761,6.317,2025,5.386,2061,4.303,2232,6.198,2407,6.198,2717,6.969,2856,5.051,2914,5.66,3019,7.507,3107,7.507,3632,4.451,3900,6.599,3902,6.09,4094,5.095,5586,6.317,6072,7.208,7383,7.507,7404,7.908,7411,6.769,7412,8.517]],["t/3106",[98,3.353,338,2.412,614,3.274,841,2.979,843,5.542,930,6.08,1009,6.237,1157,2.744,1241,9.268,1570,7.016,1761,6.872,1803,6.16,1856,5.813,1959,7.58,3083,7.178,4079,5.163,4133,7.58,4389,6.324,6804,7.58,7378,8.837,7384,6.872,7392,8.166,7411,7.364,7413,9.264,7414,10.277,7415,8.166]],["t/3108",[9,2.805,19,1.883,109,2.095,115,1.643,156,4.37,183,2.445,184,3.076,230,1.933,231,3.242,232,4.438,294,2.731,309,2.409,345,3.046,352,1.526,405,2.976,413,4.281,576,3.775,585,3.26,614,3.711,616,1.81,739,3.542,818,3.217,841,2.029,843,3.775,850,4.438,1077,2.99,1132,4.307,1155,3.155,1182,3.919,1186,3.919,1245,4.592,1256,4.141,1299,4.779,1319,2.886,1456,4.307,1566,3.091,1584,4.141,1642,4.68,1656,3.422,1692,4.592,1803,4.348,1959,5.163,2025,3.076,2156,5.774,2522,5.163,2564,4.438,2635,4.512,3061,5.015,3111,4.307,3632,5.488,3858,5.015,3899,4.68,3900,4.889,3955,5.562,4191,4.001,4389,7.169,4570,4.438,6864,5.015,7377,4.438,7384,4.68,7411,8.347,7414,5.562,7415,5.562,7416,9.751,7417,9.751,7418,6.31,7419,6.31,7420,5.859,7421,5.562,7422,5.859,7423,6.31,7424,5.562,7425,6.31,7426,6.31]],["t/3110",[20,1.262,76,1.71,99,2.498,109,1.412,115,1.58,122,1.965,181,2.943,183,2.351,230,1.859,231,3.152,293,3.599,302,4.075,386,3.924,409,1.754,467,2.875,469,3.697,585,3.135,591,3.05,614,3.631,653,3.153,658,3.531,686,3.19,818,2.683,841,1.951,850,6.159,852,3.501,853,3.769,936,4.595,1074,4.916,1105,4.032,1124,2.283,1182,3.769,1186,3.769,1241,4.823,1298,5.439,1299,4.595,1386,4.55,1584,3.982,1603,4.085,1681,4.203,1692,4.416,1798,3.313,1803,4.96,2382,5.135,2599,3.27,2635,6.261,2662,5.553,2663,5.679,2683,4.085,2698,4.965,2757,4.203,3111,4.142,3119,7.719,3632,5.37,3899,4.501,3900,4.702,3955,5.349,4306,4.085,4570,4.268,5586,4.501,6150,4.823,6864,4.823,7380,5.349,7384,4.501,7411,10.621,7416,5.634,7417,5.634,7420,5.634,7421,5.349,7427,6.068,7428,6.068,7429,5.349,7430,6.068,7431,6.068,7432,5.349]],["t/3112",[60,2.856,61,4.247,62,3.7,109,2.187,159,5.44,231,3.385,614,3.323,697,7.693,777,5.783,914,5.675,1009,6.33,1119,5.9,1132,6.418,1154,5.035,1584,6.17,1761,6.974,1870,6.17,1926,5.356,2241,5.203,4389,6.418,6864,7.473,6914,7.957,7411,7.473,7414,10.373,7415,8.287,7421,8.287,7433,9.402,7434,9.402,7435,9.402]],["t/3114",[115,2.755,118,3.892,183,4.1,230,3.241,294,4.578,332,8.013,1053,4.613,1128,4.163,2220,8.41,5905,8.657,7377,8.897,7378,8.761,7436,10.58]],["t/3116",[20,2.111,73,2.584,98,3.676,241,4.533,577,6.187,691,7.034,914,6.13,941,5.743,1154,5.438,1157,3.008,1291,5.188,1658,6.83,1761,9.154,1895,6.749,2856,7.319,3004,6.512,3344,6.512]],["t/3118",[19,1.383,20,1.063,47,1.706,73,1.301,75,3.032,77,2.721,83,1.975,88,1.743,96,2.359,98,2.793,109,1.189,113,3.244,117,3.086,118,2.839,127,2.433,138,3.086,181,3.743,183,3.602,212,4.033,228,1.886,230,1.566,231,1.84,275,6.646,293,4.576,315,1.394,317,1.77,338,1.331,340,1.698,358,2.098,386,2.291,394,2.3,401,3.5,403,2.626,481,4.158,562,2.134,585,2.641,591,3.878,614,4.286,616,1.466,658,2.652,664,2.134,689,3.115,703,2.456,742,3.208,745,2.084,818,2.364,840,3.059,841,2.989,843,3.059,870,3.961,882,2.188,913,2.517,1029,3.792,1076,2.556,1154,2.738,1190,4.064,1260,3.961,1318,3.872,1761,3.792,1798,2.791,1803,5.855,1856,3.208,2025,2.492,2061,2.583,2232,5.616,2292,4.064,2635,3.656,2662,4.893,2663,5.004,2914,7.384,3030,4.183,3339,4.327,3632,6.339,4151,6.802,4185,4.183,4191,3.242,4241,4.506,5218,4.327,5582,4.506,6757,4.183,6998,7.165,7384,5.724,7396,4.327,7397,4.747,7405,6.133,7424,4.506,7432,4.506,7437,5.112,7438,5.112,7439,5.112,7440,5.112,7441,5.112,7442,4.747,7443,4.747,7444,5.112]],["t/3120",[18,2.984,73,1.793,98,3.523,109,2.264,183,2.731,228,2.6,230,2.159,231,4.013,309,4.257,343,3.251,396,3.848,585,3.641,614,2.491,658,4.132,664,2.942,684,3.727,840,4.216,841,2.266,843,4.216,893,5.337,1043,4.361,1048,6.544,1076,4.866,1157,2.088,1299,5.337,1319,3.224,1541,5.964,1566,3.452,1569,4.11,1798,5.314,2025,3.435,2156,4.518,2662,8.002,2663,8.183,3344,4.518,3632,3.683,4030,5.602,4079,3.928,4285,8.785,4306,4.745,5069,6.544,7411,10.371,7445,8.237,7446,7.047]],["t/3122",[73,2.503,88,2.223,115,3.152,118,3.62,338,2.562,345,4.75,358,4.038,460,7.625,474,5.303,616,2.822,688,4.392,818,3.014,913,4.845,1856,6.175,3615,8.828,3790,7.625,4231,9.137,4285,6.625,4371,8.674,6159,7.822,7447,9.84]],["t/3124",[38,2.493,39,2.981,47,2.786,72,3.693,118,3.071,229,5.836,294,3.613,352,2.019,386,3.741,403,4.288,405,3.937,408,4.909,614,4.293,658,2.869,673,4.869,843,4.994,852,3.337,1085,6.636,1128,4.292,1803,4.03,2025,5.921,3023,7.752,3072,7.752,3399,7.937,3494,6.831,3790,6.468,3791,7.359,4189,6.636,4220,5.969,4570,5.872,4929,7.752,6804,6.831,7377,5.872,7378,5.782,7448,8.348,7449,8.348,7450,10.906]],["t/3126",[0,0.605,6,2.017,19,0.976,41,1.168,49,3.411,72,1.843,73,2.057,75,3.227,76,1.533,83,2.103,109,2.245,116,2.175,131,1.133,136,2.296,155,2.329,174,1.908,182,2.75,230,1.667,241,2.429,306,4.377,308,2.288,309,2.078,315,2.631,320,1.975,341,3.364,342,1.596,349,1.346,356,1.49,403,2.795,405,2.567,425,2.155,426,1.938,452,2.903,467,2.578,567,2.735,585,2.811,595,2.861,602,1.746,616,3.648,632,3.124,692,1.692,694,2.615,696,2.615,735,2.115,851,3.256,941,4.572,956,1.866,1038,3.566,1058,2.666,1156,3.831,1157,2.395,1194,3.664,1616,2.844,1764,3.415,1803,4.658,1899,3.451,1982,3.38,2025,2.653,2212,3.489,2758,2.896,2762,2.272,2765,3.124,2773,3.077,2792,4.217,2793,5.053,2829,3.857,2834,3.055,2859,4.797,2861,4.797,2865,3.415,2886,4.572,2971,2.693,3267,3.616,3327,6.084,3632,2.844,3700,4.326,4244,4.121,4415,5.053,7377,5.687,7378,5.6,7451,5.442,7452,8.086,7453,5.442,7454,5.442,7455,5.442,7456,5.442,7457,5.442,7458,8.086,7459,8.959,7460,5.442,7461,5.442,7462,5.442]],["t/3128",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/3131",[0,1.508,12,4.792,18,2.74,19,1.16,21,4.541,60,1.966,62,2.546,72,3.606,89,2.275,92,2.336,114,6.212,131,1.347,135,2.621,160,2.923,174,2.269,193,2.348,294,2.8,342,3.397,356,1.771,391,4.061,392,2.96,519,3.362,520,3.487,527,4.709,532,3.423,580,3.871,583,6.614,704,4.91,941,3.659,1120,5.295,1121,3.774,1124,2.435,1291,4.684,1328,2.998,1506,2.656,1508,3.124,1536,5.476,1550,4.8,1557,3.306,1584,4.247,1620,3.444,1859,4.901,2214,5.295,2338,4.901,2537,5.476,2762,2.701,2840,4.247,2865,4.061,3398,3.906,3400,5.476,3638,4.197,3852,6.009,4177,6.35,5463,5.704,5910,4.901,7463,6.471,7464,6.009,7465,6.471,7466,10.649,7467,6.471]],["t/3133",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/3136",[11,4.288,18,3.034,20,2.047,39,3.516,42,1.969,127,3.411,225,2.451,349,1.773,401,3.251,410,3.862,497,4.595,514,2.769,623,4.366,658,2.463,700,4.114,702,4.497,718,4.054,754,3.09,832,3.023,847,4.053,875,3.528,908,5.428,956,2.457,1157,2.123,1219,7.457,1231,4.892,1324,3.994,1488,5.216,1738,4.648,2249,5.428,2595,6.82,2965,5.316,3171,6.655,6148,6.317,6823,6.655,7234,6.655,7468,9.626,7469,9.846,7470,7.167,7471,6.317,7472,7.167,7473,6.317,7474,7.167,7475,7.167,7476,7.167,7477,9.846,7478,11.248,7479,7.167,7480,6.317,7481,7.167,7482,7.167,7483,12.11,7484,7.167,7485,7.167,7486,7.167,7487,7.167,7488,7.167]],["t/3138",[9,4.198,18,5.258,19,1.209,26,2.121,60,2.049,62,2.655,71,4.234,88,1.524,92,2.435,93,3.709,109,2.197,118,2.482,146,2.846,164,3.409,218,1.954,342,1.978,396,3.684,401,3.061,415,4.001,448,2.672,464,3.197,497,4.326,514,3.648,843,4.036,909,6.054,922,5.947,1210,6.265,1211,6.265,1213,6.265,1231,4.605,1328,3.126,1457,5.005,1488,6.872,1527,4.073,1579,4.234,1641,3.709,1734,4.326,1774,5.005,2149,4.91,2152,4.375,2434,4.605,2482,4.279,2509,3.59,2510,3.904,2511,4.036,2512,4.824,2595,4.673,4166,5.71,6204,6.265,6991,6.265,7405,5.363,7468,7.505,7489,6.265,7490,6.747,7491,6.747,7492,5.947,7493,6.747,7494,6.747,7495,6.747,7496,6.747,7497,6.747,7498,9.442,7499,6.747,7500,6.747,7501,6.747,7502,6.747,7503,6.265,7504,6.747,7505,6.747,7506,6.265,7507,6.747,7508,6.747]],["t/3140",[20,1.771,38,2.544,73,2.167,84,4.451,88,1.924,96,3.929,103,3.912,338,2.218,340,2.829,358,3.495,401,3.863,464,4.035,481,4.59,497,5.46,573,6.969,576,5.095,680,5.344,692,3.814,861,5.401,933,5.99,934,6.599,1194,5.734,1228,4.681,1298,5.29,1300,4.747,1881,5.523,2025,5.386,2211,5.141,2241,4.714,2482,5.401,4166,9.351,5007,6.317,5307,5.99,5844,6.09,6148,7.507,7405,6.769,7468,8.782,7489,7.908,7509,8.517]],["t/3142",[6,1.521,8,3.616,9,5.947,11,6.163,12,3.888,18,2.581,19,1.093,20,1.268,21,4.393,53,2.155,56,3.064,72,2.065,88,1.377,109,2.044,116,2.437,118,2.243,122,1.974,211,2.929,219,3.098,225,3.005,320,2.213,336,2.876,342,1.788,397,3.616,405,2.876,410,3.286,448,2.414,570,3.801,725,2.972,836,3.528,841,2.826,871,4.989,907,4.724,916,4.846,1124,2.294,1206,8.159,1231,5.998,1236,4.618,1300,3.398,1860,5.661,1919,3.63,1938,3.715,2025,2.972,2149,4.437,2168,4.989,2424,8.159,2482,7.15,2587,6.655,2595,6.086,3260,4.052,4166,5.16,4905,8.159,6785,5.661,6873,5.374,6943,5.661,7473,5.374,7506,5.661,7510,6.097,7511,6.097,7512,5.661,7513,6.097,7514,6.097,7515,6.097,7516,6.097,7517,8.787,7518,6.097,7519,8.787,7520,8.787,7521,6.097,7522,5.374,7523,6.097]],["t/3144",[0,1.054,12,2.56,19,1.699,20,1.41,22,3.108,23,3.446,25,4.554,26,3.719,28,1.915,30,1.641,33,3.282,39,2.422,42,2.604,45,3.646,53,3.35,66,2.254,72,3.209,76,1.911,91,2.56,109,2.205,118,2.495,122,3.069,146,3.998,267,3.339,342,1.989,356,1.857,396,3.703,570,2.502,772,3.427,776,4.63,818,2.078,822,1.922,939,4.197,940,2.924,952,4.508,962,6.298,1053,2.957,1124,3.566,1361,4.62,1517,3.229,1519,3.171,1520,3.484,1521,3.956,1522,4.094,1523,3.894,1545,3.78,1585,3.924,1595,4.936,1596,7.684,1629,3.052,2482,4.302,4278,5.55,5905,5.55,7468,5.392,7524,5.256,7525,5.979,7526,6.783]],["t/3146",[658,3.698,725,5.245,1471,5.271,1616,5.623,1793,6.04,1869,5.955,2482,6.824,2611,8.553,2765,6.177,5307,7.568,7524,8.337,7527,10.76,7528,9.106]],["t/3148",[19,1.906,20,2.21,72,2.719,164,4.058,225,3.636,307,3.284,308,3.376,336,3.788,340,3.532,342,2.355,453,3.934,464,3.805,466,5.149,623,4.892,653,4.172,739,4.508,841,2.582,852,3.21,894,6.571,983,6.571,1555,4.892,1616,6.63,1790,3.858,1793,4.508,1864,5.957,2102,4.646,2233,4.61,2236,6.539,2272,5.957,2482,6.742,3075,6.383,4529,8.451,5309,7.079,5512,5.407,6093,6.796,7224,5.562,7528,6.796,7529,7.457,7530,10.632,7531,8.031,7532,8.031,7533,7.079]],["t/3150",[20,2.298,49,4.662,51,4.043,88,1.566,98,2.509,108,3.299,115,1.805,155,2.966,164,3.502,225,2.37,252,3.226,307,2.835,308,2.914,315,3.256,323,5.401,430,2.075,452,3.455,466,4.444,467,3.284,514,2.678,573,5.672,585,3.581,694,3.33,725,4.69,836,4.01,841,3.094,847,3.919,851,5.756,852,2.771,1062,4.444,1156,3.284,1157,2.053,1518,3.962,1537,4.667,1604,7.137,1616,5.029,1642,5.142,1765,4.549,1895,4.606,2233,3.979,2482,6.102,2509,3.689,2611,7.648,2681,4.043,2765,3.979,3075,5.51,3086,4.862,4220,4.956,4529,5.51,5040,6.11,6221,6.11,7524,8.563,7528,5.866,7533,6.11,7534,6.932,7535,6.932,7536,6.932,7537,6.932]],["t/3152",[19,1.711,20,2.469,115,2.485,136,4.026,167,6.119,185,4.243,190,6.945,230,2.924,241,4.259,345,4.607,352,2.308,426,3.399,696,4.585,704,6.361,848,8.077,1155,4.771,1527,5.761,1820,5.079,1829,6.052,3075,7.586,4162,7.228,4498,8.412,7524,7.395,7533,10.47,7538,9.544]],["t/3154",[0,0.899,19,0.976,20,1.681,22,2.125,26,1.711,28,1.536,30,1.956,35,3.207,38,2.415,49,3.411,66,2.354,67,2.544,69,1.787,73,1.384,76,1.533,88,1.826,109,1.266,146,2.296,159,3.149,162,2.861,182,2.75,183,2.109,184,2.653,185,5.316,213,3.2,227,3.492,231,1.959,270,2.218,304,1.782,315,3.261,342,1.596,349,1.346,352,1.956,430,1.629,598,4.475,602,1.746,658,1.87,725,5.563,735,2.115,739,3.055,745,4.652,852,3.232,1055,3.769,1058,2.666,1061,3.653,1066,3.227,1122,4.445,1738,7.401,2263,2.75,2264,2.707,2482,3.451,2590,4.539,2679,3.227,4162,9.634,4496,4.606,4914,6.265,6126,4.606,7522,4.797,7524,6.265,7539,8.086,7540,4.797,7541,4.217,7542,7.127,7543,8.959,7544,8.959,7545,5.442,7546,5.053]],["t/3156",[0,1.27,19,1.609,20,1.866,22,3.003,26,1.974,27,3.139,28,1.773,30,2.17,33,2.174,38,1.875,45,2.096,53,3.172,66,2.16,72,3.039,88,1.418,91,2.369,106,4.026,109,1.461,118,2.31,131,2.517,136,2.649,146,2.649,226,3.577,227,2.272,342,1.841,349,2.22,352,2.533,356,1.719,358,2.576,392,4.105,725,4.374,863,4.172,939,3.974,940,2.707,1061,4.054,1124,3.377,1521,3.662,1522,3.79,1523,3.604,1545,3.499,1555,3.825,1585,3.633,1595,4.569,1596,6.312,1616,4.69,2025,3.061,2482,7.247,2822,4.569,3916,4.227,4162,7.931,7522,5.534,7524,8.854,7525,10.072,7540,5.534,7541,8.854]],["t/3158",[0,1.046,18,2.841,19,1.686,22,3.093,26,2.11,27,3.291,28,1.895,30,1.623,32,4.976,33,3.257,41,1.44,45,2.24,53,2.372,66,2.241,71,4.211,72,2.273,76,1.891,91,2.533,109,2.189,110,2.657,131,2.675,146,2.831,226,3.823,227,2.429,231,2.416,316,2.115,338,1.748,342,1.968,354,4.46,452,2.409,585,3.467,882,2.872,939,2.972,1028,3.947,1040,3.308,1067,4.518,1074,3.767,1077,3.18,1124,2.525,1157,1.988,1328,3.11,1519,4.397,1595,4.884,1596,6.617,2145,3.823,2482,5.966,2483,4.169,4162,9.387,7525,8.292,7540,5.916,7541,9.122,7547,6.711,7548,6.711,7549,6.711,7550,6.711,7551,6.711]],["t/3160",[242,4.134,349,2.779,352,2.718,658,3.862,1606,5.839,2482,7.126,2532,8.51,4162,8.51]],["t/3162",[30,2.019,45,2.786,66,2.506,69,2.741,196,3.509,197,3.626,227,3.021,236,4.47,242,3.071,267,4.11,270,3.403,304,2.734,308,3.509,357,2.243,653,4.338,749,3.851,776,5.698,952,5.548,1053,3.64,1122,4.589,1505,5.621,1581,4.09,1606,4.338,1705,3.803,1734,5.352,1746,8.924,1886,5.238,2218,5.782,4191,5.294,6126,7.065,7552,9.939,7553,10.906,7554,12.147,7555,11.779,7556,8.348]],["t/3164",[41,2.432,712,4.717,3428,8.251,4060,9.012,7541,8.785,7552,9.277,7555,9.994]],["t/3166",[30,2.146,31,5.357,32,6.001,33,3.073,34,5.458,35,3.043,36,6.972,41,2.434,42,2.439,50,4.946,54,5.176,66,2.58,939,3.93,1330,3.961,1361,6.425,1509,7.981,1510,6.242,1511,6.058,1512,6.459,1513,8.416,1514,6.242,2235,4.186,7541,6.876,7552,7.262,7555,7.823]],["t/3168",[30,1.774,35,2.682,38,2.19,66,2.522,88,1.656,213,4.312,227,2.654,267,3.61,270,2.989,304,2.402,306,3.326,309,2.8,310,3.659,315,2,323,4.116,338,1.909,343,3.383,345,3.54,357,1.97,358,3.009,430,2.994,602,2.353,745,4.077,818,2.246,877,2.683,974,2.612,1122,4.031,1318,5.553,1606,3.81,1738,6.486,1899,4.65,2250,5.158,2263,3.705,2264,3.647,2316,3.977,2753,3.767,3249,5.158,4162,5.553,5705,6.206,6370,4.813,7541,7.75,7542,6.464,7543,6.809,7544,9.287,7552,9.314,7557,6.809,7558,10.002,7559,11.383,7560,11.383,7561,10.002]],["t/3170",[41,2.402,88,1.963,212,4.543,242,3.198,304,3.667,338,2.263,452,3.121,617,2.43,712,4.657,841,2.795,876,5.155,877,3.18,909,5.573,1606,4.516,1642,6.447,1932,5.933,1945,5.933,3428,8.148,4060,8.899,4222,7.112,6200,7.662,7552,11.534,7562,11.196,7563,8.692,7564,11.196,7565,8.692,7566,11.196]],["t/3173",[315,3.177,316,3.672,725,5.679,1122,6.404]],["t/3175",[315,3.148,316,3.638,725,5.628,1122,6.346,7567,11.545]],["t/3177",[315,3.148,316,3.638,725,5.628,1122,6.346,7568,11.545]],["t/3179",[315,3.12,316,3.605,684,6.051,725,5.577,745,4.664,1122,6.289]],["t/3181",[315,3.065,316,3.541,390,3.951,684,6.933,725,5.478,745,4.581,1122,6.177]],["t/3183",[315,3.12,316,3.605,725,5.577,1122,6.289,2102,6.619,2137,7.179]],["t/3185",[315,3.065,316,3.541,390,3.951,725,5.478,1122,6.177,2102,7.584,2137,7.052]],["t/3187",[315,3.12,316,3.605,725,5.577,1122,6.289,2102,6.619,7569,11.441]],["t/3189",[19,1.148,22,1.683,26,2.014,30,1.549,35,1.718,37,2.229,38,1.913,42,1.76,45,2.138,60,1.946,62,2.521,66,1.878,73,2.316,76,1.805,83,2.475,88,2.056,91,2.417,98,2.318,109,1.49,146,2.702,218,1.856,230,1.962,242,3.349,294,2.772,315,1.747,316,2.019,338,1.668,342,1.878,348,3.203,357,1.721,358,2.629,381,2.836,401,2.906,415,3.799,444,2.712,452,2.3,464,3.035,486,3.138,514,2.475,536,3.521,556,3.706,684,4.815,687,4.257,703,3.078,709,5.241,725,3.122,738,3.29,742,6.645,745,3.711,840,3.832,877,2.344,939,2.836,974,3.242,1087,5.646,1122,3.521,1157,1.898,1519,2.994,1734,4.107,2212,4.107,2232,4.662,2482,5.773,2510,3.706,2511,3.832,2512,4.58,2613,4.851,2811,6.625,3374,5.092,5512,4.313,7570,10.59,7571,6.406,7572,9.103,7573,9.103,7574,6.406,7575,6.406,7576,5.948,7577,6.406,7578,6.406,7579,6.406]],["t/3194",[12,2.205,19,1.528,20,1.215,21,2.492,26,3.162,35,1.567,45,1.95,49,3.595,50,3.257,56,5.055,60,1.775,70,3.355,72,1.979,78,3.381,84,3.054,170,2.619,244,1.738,270,2.382,304,1.914,310,2.138,315,2.743,325,2.744,333,4.902,390,2.055,392,2.673,407,2.382,464,2.769,514,2.258,656,2.863,704,3.129,725,2.849,774,3.257,797,4.253,1116,4.253,1119,3.667,1134,5.404,1137,4.528,1139,4.528,1333,8.371,1506,2.398,1616,4.453,1728,4.075,1738,6.522,1793,3.28,2022,4.253,2027,4.335,2029,5.151,2050,7.994,2081,5.151,2105,4.179,2106,7.211,2482,7.78,2811,8.552,3350,3.408,3419,7.211,4162,4.426,4501,6.602,4914,4.528,5512,3.935,6410,4.645,7541,4.528,7542,8.865,7580,10.057,7581,5.844,7582,7.211,7583,10.057,7584,9.338,7585,5.844,7586,5.844,7587,5.844,7588,5.844]],["t/3199",[19,2.128,7589,10.045]],["t/3201",[19,2.128,7589,10.045]],["t/3203",[19,2.128,7589,10.045]],["t/3205",[0,1.102,155,4.244,225,3.391,336,4.677,338,2.582,342,2.908,452,4.367,467,4.699,514,3.832,672,3.939,694,4.765,696,4.765,832,4.184,833,4.214,1156,5.763,1157,3.603,2482,8.344,2509,5.278]],["t/3207",[0,1.372,4,2.153,19,1.346,20,2.113,76,2.115,110,2.972,115,1.955,136,3.167,140,3.134,170,3.364,182,3.793,184,3.659,252,3.494,357,2.017,358,3.081,361,4.744,385,6.142,386,3.364,407,5.033,444,3.178,514,3.926,528,5.568,529,5.817,530,5.199,532,5.375,533,4.491,539,6.981,595,3.947,956,3.484,1128,3.999,1132,5.124,1274,6.142,1289,5.817,1634,3.337,1919,4.199,2002,5.967,2460,4.711,2610,4.309,2822,5.463,2866,5.568,4667,5.685,4877,6.617,5218,6.353,5669,5.967,5810,6.353,7590,7.507,7591,7.507]],["t/3209",[3,3.163,8,5.155,18,3.68,81,4.216,164,4.392,165,5.247,225,2.972,233,5.295,356,3.065,410,6.033,487,8.071,521,5.029,523,5.247,539,6.331,570,3.207,614,3.072,642,6.909,1572,5.07,1661,5.776,1919,3.591,2389,7.356,2407,6.326,2867,8.479,2869,8.305,2909,5.573,3712,6.909,4615,6.735,4618,6.909,6761,7.356,7041,7.662,7378,6.02,7592,8.692,7593,8.692,7594,8.071,7595,7.662,7596,7.662]],["t/3211",[6,3.485,18,3.316,131,1.631,296,3.131,306,3.553,616,2.999,617,2.19,632,6.002,633,4.117,636,5.671,638,5.204,640,6.201,642,6.225,643,6.903,1144,2.608,1157,2.32,1803,3.781,1804,4.335,1919,3.236,2025,3.818,2068,6.903,2134,6.408,2446,6.225,2762,4.365,2856,4.645,2909,5.021,3632,7.184,6761,6.628,6789,7.272,7378,5.424,7596,6.903,7597,7.832,7598,7.832,7599,7.272,7600,7.272,7601,7.832,7602,7.832,7603,7.832,7604,7.832]],["t/3213",[88,2.189,110,3.837,170,4.342,307,3.963,444,4.102,453,4.747,539,5.479,565,7.305,1453,7.338,1454,7.187,1502,6.359,1525,6.524,1803,4.678,1919,4.003,2212,6.213,2909,6.213,3263,7.702,3399,7.052,3632,6.267,3790,7.508,3791,10.569,5829,8.2,7599,8.997]],["t/3215",[19,1.033,20,1.198,30,1.394,32,4.462,33,1.996,35,1.546,37,2.006,38,1.722,41,1.237,42,2.742,45,1.924,47,1.924,53,2.981,54,3.362,56,2.897,57,2.944,60,1.751,61,2.604,62,2.268,66,2.058,91,2.175,109,1.341,115,2.197,116,2.304,131,1.757,155,2.467,242,2.121,244,2.509,272,2.769,316,1.816,340,1.915,341,2.398,346,2.769,350,3.45,359,2.671,361,2.373,390,2.027,409,1.666,444,2.44,539,6.209,608,3.992,616,1.653,636,3.126,653,2.995,693,3.989,939,2.552,940,4.302,952,3.83,960,1.888,1157,1.707,1520,2.961,1605,4.122,1617,3.738,1627,6.031,1942,2.648,2025,2.81,2362,4.276,2510,3.335,2749,4.054,2827,4.878,4012,6.536,4191,3.655,7576,7.833,7605,5.764,7606,8.436,7607,8.436,7608,5.764,7609,4.878,7610,6.705,7611,8.436,7612,4.716,7613,8.444,7614,4.716,7615,4.878,7616,5.081,7617,9.679,7618,5.764,7619,5.764,7620,4.582,7621,4.716,7622,5.764]],["t/3218",[41,1.555,224,4.881,244,2.156,296,2.898,409,2.096,693,2.898,818,4.313,822,2.813,1569,5.788,1627,3.466,2613,7.515,2892,4.886,2913,7.515,2914,6.594,2925,4.648,3622,5.762,4183,10.316,5141,12.739,7623,7.249,7624,5.276,7625,9.923,7626,8.398,7627,6.39,7628,12.168,7629,9.214,7630,7.249,7631,9.923,7632,6.731,7633,7.249]],["t/3220",[41,2.196,218,2.966,409,2.96,992,5.415,1334,4.895,1505,6.893,1627,4.896,3665,6.719,7582,8.664,7624,7.451,7634,10.932,7635,10.496,7636,11.516,7637,8.664]],["t/3222",[35,2.209,41,2.589,224,5.547,244,3.216,272,3.959,291,5.475,296,3.294,298,4.767,693,3.294,812,9.352,818,2.524,822,3.871,950,5.17,1569,7.474,1627,3.94,1925,8.189,2892,4.057,2925,5.283,3515,6.973,3567,6.112,3622,6.549,3840,8.189,3998,9.531,7624,5.996,7626,6.973,7638,10.813,7639,8.24,7640,6.549,7641,10.813,7642,7.651,7643,7.651]],["t/3224",[6,1.737,19,0.59,20,1.132,30,1.317,38,0.983,41,2.449,47,1.099,53,1.163,54,1.92,56,2.736,66,1.123,88,0.743,98,1.191,115,0.857,160,4.36,162,3.66,229,1.582,230,1.008,242,2.561,243,1.731,244,3.038,262,1.506,272,2.616,307,1.346,310,1.204,315,2.206,328,1.682,340,2.312,346,1.582,350,1.346,352,0.796,390,1.914,409,3.58,430,0.985,467,1.56,617,1.522,653,2.829,655,2.693,664,1.374,686,2.862,712,2.896,759,2.522,818,3.664,822,2.735,911,1.987,913,2.68,1034,1.875,1036,2.33,1051,2.187,1058,1.613,1108,3.056,1155,1.646,1157,1.613,1256,2.16,1317,1.546,1566,1.613,1569,1.92,1627,1.574,1634,2.42,1707,2.442,1790,1.582,1842,2.693,1889,1.71,1919,1.36,1920,3.013,1926,5.498,2025,2.654,2075,7.078,2475,1.952,2517,2.902,2753,1.691,2764,1.752,2821,2.493,2829,2.783,2834,1.848,2896,1.89,2908,2.845,2909,2.111,2925,2.111,3028,2.216,3071,2.493,3267,2.187,3327,3.101,3546,2.902,3632,5.043,3656,2.111,3898,2.616,4191,2.087,4242,2.902,5019,3.962,5094,4.327,5332,4.454,5586,4.038,7609,2.786,7613,2.786,7617,4.799,7627,4.799,7634,2.902,7635,2.786,7644,2.786,7645,3.292,7646,3.056,7647,3.292,7648,3.292,7649,2.786,7650,3.056,7651,3.056,7652,3.056,7653,3.292,7654,3.292,7655,6.961,7656,5.444,7657,3.292,7658,5.444,7659,5.444,7660,5.444,7661,6.961,7662,3.292,7663,3.292,7664,5.444,7665,3.292,7666,3.292,7667,9.04,7668,3.292,7669,3.056,7670,2.902,7671,5.272,7672,5.444,7673,3.292,7674,3.292,7675,3.056,7676,3.292,7677,3.056,7678,3.292,7679,2.442]],["t/3226",[41,2.129,218,2.875,244,3.791,272,3.483,324,6.513,409,3.518,632,5.697,636,5.382,749,3.344,822,2.055,960,3.25,1569,6.599,1617,7.338,1627,6.444,1705,3.302,2896,4.161,2925,6.362,3515,6.135,4012,9.428,7610,8.994,7612,8.12,7624,7.222,7626,6.135,7640,5.762,7671,5.49,7679,7.361,7680,9.214,7681,7.249,7682,11.315,7683,9.923,7684,9.923,7685,6.731,7686,6.39]],["t/3228",[22,2.284,32,4.597,41,1.865,56,4.369,57,4.44,66,1.793,244,3.89,324,5.705,539,4.915,608,6.02,632,4.99,960,2.847,1617,7.261,1627,6.255,1926,4.952,2896,6.427,3423,8.305,4012,8.675,5332,9.161,7610,6.909,7612,7.112,7613,9.475,7615,7.356,7686,7.662,7687,11.196,7688,8.692,7689,8.071,7690,7.662]],["t/3230",[218,2.451,244,2.516,262,3.87,818,3.745,822,3.669,1569,7.827,1627,5.846,2892,6.019,2925,7.053,3515,7.159,3567,6.275,4183,9.596,7624,8.006,7626,7.159,7627,7.457,7629,12.02,7632,7.855,7640,6.724,7642,7.855,7643,7.855,7691,8.46,7692,8.46,7693,8.46]],["t/3232",[41,2.622,272,4.803,1108,7.919,1627,5.845,3437,10.773,3970,8.459,7670,10.773,7671,9.999,7675,9.281,7694,11.349,7695,9.996]],["t/3234",[22,1.905,30,1.753,35,1.944,41,1.555,66,2.51,286,4.648,390,2.549,409,2.869,749,4.578,818,2.221,822,2.055,960,2.374,1627,3.466,1705,5.154,1713,4.971,1920,4.012,2833,4.817,2896,5.697,2908,3.788,2987,8.265,3089,10.298,3138,5.49,4385,4.648,5452,6.731,5912,6.135,6297,9.214,7624,5.276,7637,6.135,7640,5.762,7696,9.923,7697,7.249,7698,7.249,7699,7.249,7700,9.214,7701,7.249,7702,7.249,7703,9.923,7704,6.731,7705,6.731,7706,7.249,7707,10.506,7708,6.731,7709,7.249,7710,7.249,7711,7.249,7712,7.249,7713,7.249]],["t/3236",[35,2.651,41,1.546,244,2.94,284,5.585,328,3.682,818,2.208,822,2.802,1108,6.333,1505,4.853,1569,5.765,1627,6.283,1674,4.523,1713,4.343,1741,3.989,1816,6.693,2896,5.674,2908,5.166,2987,4.674,3437,6.353,3526,10.475,5094,9.649,5139,8.741,7635,6.1,7667,6.1,7694,6.693,7714,11.281,7715,9.231,7716,11.281,7717,12.719,7718,12.139,7719,12.139,7720,6.693,7721,6.693,7722,7.208]],["t/3238",[539,6.588,694,5.598,1453,8.824,1454,8.642]],["t/3240",[0,1.147,155,4.417,338,2.688,452,4.474,467,4.89,539,7.047,672,4.1,694,4.959,832,4.354,833,4.385,1156,5.905,1157,3.692,1453,7.817,1454,7.656]],["t/3242",[0,1.124,19,1.057,181,2.861,192,4.149,225,2.017,229,2.834,230,2.628,358,2.42,375,3.498,377,3.287,378,2.889,379,3.593,423,4.218,452,2.118,467,2.795,481,3.179,496,3.047,514,2.279,585,3.047,667,6.28,692,1.834,700,3.386,844,3.12,881,3.386,918,4.467,1056,3.413,1093,3.871,1157,1.747,1176,4.688,1177,4.826,1178,4.992,1179,4.992,1180,4.826,1181,4.992,1182,3.664,1183,4.467,1184,7.26,1185,7.26,1186,3.664,1187,7.019,1188,4.992,1189,4.992,1190,4.688,1191,4.467,1192,4.826,1193,4.149,1194,3.971,1226,2.821,1305,4.218,1328,2.733,1434,3.701,1460,4.293,1581,2.889,2125,3.664,2200,4.467,2203,4.57,2241,3.264,2662,3.74,3726,4.467,3916,3.971,4328,3.664,4521,4.992,4693,4.826,4747,4.992,4865,4.992,5087,4.467,5482,4.293,6575,4.992,6994,4.992,7350,5.199,7723,5.199,7724,5.199,7725,5.477,7726,5.199,7727,5.199,7728,5.199,7729,5.199,7730,5.199,7731,5.199,7732,5.199,7733,5.199,7734,5.199,7735,5.477,7736,4.992,7737,4.992,7738,5.199,7739,5.199,7740,5.199,7741,5.199,7742,4.992,7743,5.199,7744,5.199,7745,4.992,7746,7.562,7747,5.199,7748,5.199,7749,5.199,7750,5.199,7751,5.199,7752,5.199,7753,4.992]],["t/3244",[0,1.129,4,2.913,19,1.821,37,3.534,38,3.033,77,5.405,338,2.645,526,5.701,573,8.31,658,3.49,817,5.923,875,5,1324,5.66,1525,6.838,2524,8.595,5770,8.952,7754,7.869,7755,10.156,7756,10.156,7757,9.43]],["t/3246",[77,4.756,306,4.054,307,3.655,350,3.655,375,6.759,377,6.352,378,4.378,379,6.943,394,4.021,409,2.584,413,3.643,562,3.731,614,3.159,615,4.071,756,3.561,1226,4.274,1321,5.939,1873,4.141,2024,6.286,2061,6.898,2350,4.215,2633,5.131,7754,10.815,7758,6.769,7759,8.937]],["t/3248",[0,1.433,19,1.698,20,2.458,88,2.139,96,4.37,115,2.466,170,4.245,308,3.982,357,2.545,407,3.861,428,5.356,514,3.66,528,7.026,529,7.339,530,6.56,532,6.253,539,5.356,595,4.98,696,4.551,1829,6.007,2460,5.944,2509,5.041,2610,5.438,2866,7.026,4306,6.377]],["t/3250",[3,2.764,8,4.505,60,2.307,61,3.432,62,2.989,81,3.685,106,4.871,164,3.839,165,4.586,225,2.598,233,4.628,356,2.804,392,3.475,410,5.521,452,3.678,521,4.395,523,4.586,539,7.324,540,7.095,568,6.696,570,2.803,591,5.149,617,2.124,642,6.038,1193,5.343,1663,6.696,1758,9.512,1795,5.048,2156,4.871,2389,6.429,2407,5.529,2509,4.043,2865,6.428,2867,7.758,2869,7.599,3249,5.343,3503,5.529,4615,5.886,4618,6.038,7041,6.696,7492,6.696,7594,7.054,7595,6.696,7620,6.038,7760,7.597,7761,7.597,7762,7.597,7763,7.597,7764,7.597]],["t/3252",[0,1.428,19,1.945,140,4.53,211,5.214,356,2.971,361,4.468,407,4.424,533,6.492,539,7.262,2209,8.626]],["t/3254",[0,0.835,19,1.347,20,0.764,35,0.985,42,2.374,53,1.298,56,5.381,57,5.47,76,1.035,88,0.83,91,1.386,109,0.855,114,1.866,117,4.534,122,1.928,131,1.799,136,1.55,140,1.534,153,3.226,170,2.669,218,1.064,230,2.301,244,3.024,262,2.725,272,2.862,299,2.006,324,2.411,342,1.077,356,1.006,361,2.452,362,5.283,390,2.094,405,1.733,407,2.428,409,2.172,452,1.319,469,4.576,506,2.92,533,2.198,539,3.368,608,2.544,612,3.662,616,1.708,632,2.109,636,3.231,653,1.909,683,3.499,693,4.733,718,1.513,735,2.315,841,1.181,875,3.698,889,4.129,939,1.627,945,5.283,956,1.259,960,2.46,1119,2.305,1153,1.8,1157,3.012,1518,1.513,1537,5.057,1617,4.871,1619,2.16,1627,3.592,1709,1.827,1728,2.848,1949,3.109,2025,6.02,2026,2.627,2212,3.819,2484,2.92,2856,2.179,2874,2.305,2884,2.674,2892,1.809,2914,2.441,2994,3.006,3226,2.077,3615,2.473,3790,2.847,4012,7.877,4470,2.847,4959,6.315,5569,5.25,5931,3.109,7610,7.547,7612,6.146,7615,6.357,7616,9.438,7680,5.53,7765,8.022,7766,3.238,7767,3.411,7768,9.44,7769,9.495,7770,8.64,7771,5.53,7772,5.53,7773,5.53]],["t/3256",[20,1.82,66,1.805,73,2.226,88,1.977,136,3.692,160,3.954,196,4.727,197,4.885,243,4.601,310,4.114,338,2.279,350,3.58,359,4.055,394,3.938,453,4.287,527,6.369,539,4.949,570,3.229,588,6.369,602,2.808,617,2.447,712,3.641,1627,5.378,2114,6.781,2563,6.628,2821,6.628,2829,4.967,7679,6.492,7774,11.537,7775,8.752,7776,11.245]],["t/3258",[41,2.567,160,4.363,244,2.073,315,1.901,409,3.46,453,3.414,570,2.571,818,3.666,822,1.975,1068,3.873,1569,6.465,1627,6.901,1790,3.349,1919,2.88,1920,5.346,2896,6.363,2904,4.52,2908,5.048,2909,4.469,2910,5.703,2918,4.758,2925,4.469,3313,4.52,3327,3.971,3632,3.642,3665,6.339,4242,6.144,5094,5.54,7624,7.029,7646,6.472,7652,6.472,7667,11.283,7669,6.472,7670,6.144,7671,5.278,7679,5.17,7777,9.659,7778,6.97]],["t/3261",[41,2.916,47,2.326,82,4.227,288,7.677,390,2.45,409,2.792,754,3.005,818,3.395,822,1.975,887,6.144,913,3.431,926,4.469,1006,3.686,1569,4.065,1627,6.499,2906,5.17,2918,4.758,2925,7.673,3567,5.17,3615,4.693,3632,6.568,3665,8.75,3970,5.898,5687,6.144,6743,6.472,7624,9.891,7649,5.898,7650,6.472,7715,5.703,7779,6.97,7780,9.659,7781,6.97,7782,6.97,7783,6.97,7784,6.97,7785,6.97,7786,6.97]],["t/3263",[41,1.723,135,3.252,244,3.162,272,3.858,296,3.21,693,3.21,818,4.154,822,3.843,1627,3.84,2892,5.234,2913,8.052,2914,5.336,2925,5.149,3665,6.978,7096,12.843,7624,5.844,7787,9.872,7788,14.212,7789,8.031,7790,8.031,7791,9.872,7792,10.632]],["t/3265",[41,2.002,60,2.835,61,4.216,62,3.672,218,2.703,409,2.698,452,3.351,952,6.202,992,4.936,1157,2.765,1334,4.697,1505,6.283,1627,4.463,2510,5.4,2904,6.052,3632,4.877,3665,6.125,7582,7.898,7620,7.418,7621,7.636,7624,6.792,7634,10.325,7635,9.913,7636,10.876,7637,7.898,7793,9.333]],["t/3267",[30,1.489,35,2.778,41,1.321,60,1.87,61,2.781,62,2.423,66,2.336,88,2.558,98,2.228,131,1.282,244,1.831,262,4.048,272,4.251,309,2.35,340,2.939,409,1.78,452,2.21,759,2.853,818,1.886,822,2.508,952,4.091,960,2.898,1029,6.564,1030,6.716,1036,3.787,1157,1.824,1170,3.904,1334,3.246,1627,5.737,1709,3.062,1713,4.551,1889,4.598,1919,2.544,2026,4.402,2510,3.562,2762,2.57,2896,6.501,2904,3.993,2909,6.641,3615,4.145,3630,7.8,3665,6.798,3963,5.807,3966,4.145,4570,4.33,7620,4.893,7621,5.037,7640,4.893,7667,7.489,7671,6.701,7704,5.716,7705,5.716,7791,5.716,7794,8.849,7795,8.849,7796,11.325,7797,6.156,7798,6.156,7799,6.156]],["t/3269",[30,1.632,41,2.531,60,2.049,61,3.048,62,2.655,76,1.901,109,1.57,131,1.966,244,2.809,316,2.126,378,3.305,452,2.422,752,5.66,759,4.375,818,2.067,822,3.344,913,4.649,952,4.483,1119,4.234,1157,1.999,1569,3.935,1627,5.643,1728,3.226,1919,5.318,1926,6.206,2510,3.904,2627,3.968,2762,2.816,2904,4.375,2908,6.167,2909,4.326,2989,5.228,3071,5.11,3546,5.947,3615,6.357,7620,5.363,7621,5.52,7640,9.872,7649,5.71,7671,8.936,7800,10.893,7801,9.442,7802,6.747,7803,6.747,7804,6.747,7805,6.747,7806,6.747]],["t/3271",[60,2.519,61,3.747,62,3.264,76,2.337,109,1.93,131,2.261,244,2.467,409,3.501,452,2.978,818,3.327,913,5.961,952,5.511,1119,5.204,1157,2.457,1627,5.79,1790,6.173,1920,6.701,2510,4.798,2627,4.877,2762,4.533,2904,5.379,2909,5.317,3615,7.311,3665,8.432,7620,6.592,7621,6.786,7671,9.17,7807,8.293]],["t/3273",[35,1.129,41,2.318,47,2.217,74,2.799,88,0.951,109,0.98,116,1.683,155,1.802,156,2.917,162,4.325,242,4.312,244,3.213,272,4.884,286,2.7,302,1.96,309,3.141,315,1.148,316,1.327,346,2.023,390,3.574,409,2.378,452,1.512,467,1.995,526,2.364,539,3.757,664,2.773,686,2.214,693,2.656,694,2.023,759,1.951,818,3.309,821,2.053,822,3.205,823,1.96,844,2.227,960,1.379,1036,1.802,1038,1.857,1047,1.585,1153,2.063,1156,1.995,1157,1.248,1248,2.917,1334,2.437,1453,3.189,1454,3.124,1566,3.254,1627,4.467,1705,1.918,1793,2.364,1848,3.347,1911,3.564,1959,3.446,1960,1.977,2749,2.962,2762,1.758,2822,3.065,2870,6.375,2892,4.05,2904,4.308,2987,4.308,3399,3.065,3494,3.446,3630,7.252,3632,4.3,3665,4.36,3776,3.91,3777,2.566,3882,4.36,3963,2.764,3964,2.962,3965,3.446,3971,3.712,3996,3.189,4136,8.529,5127,3.564,5971,3.446,6064,9.968,6633,3.91,7445,3.564,7582,3.564,7637,3.564,7651,3.91,7671,3.189,7787,3.91,7808,4.211,7809,4.211,7810,9.341,7811,10.166,7812,6.643,7813,6.643,7814,4.211,7815,4.211,7816,4.211,7817,4.211,7818,6.643,7819,4.211,7820,4.211,7821,11.308,7822,4.211,7823,4.211,7824,4.211,7825,4.211,7826,4.211]],["t/3275",[0,0.81,19,1.307,35,1.955,42,2.003,53,3.521,230,2.233,244,2.169,296,2.914,299,3.981,308,3.065,315,2.717,316,2.298,352,1.763,362,5.128,506,5.795,539,5.633,608,5.05,632,4.185,658,2.506,693,5.105,718,3.002,732,4.252,852,2.914,956,2.499,960,2.388,990,3.833,1153,3.572,1617,4.728,1619,4.287,1627,4.764,1728,3.486,2262,3.191,2484,5.795,2538,4.909,2821,5.521,2892,3.589,2904,4.728,2914,4.845,3226,5.633,3615,4.909,3790,5.649,4012,7.719,5931,8.431,7610,5.795,7612,5.965,7615,6.17,7616,10.004,7765,6.77,7766,6.426,7767,6.77,7768,9.251,7771,6.77,7772,6.77,7773,6.77,7827,6.77]],["t/3277",[72,3.385,89,3.514,92,3.608,109,2.326,121,6.09,125,3.983,126,9.066,128,8.597,176,6.034,218,2.896,307,4.088,404,7.187,684,5.287,960,3.274,1889,5.193,3687,7.57,7828,9.996,7829,12.222]],["t/3279",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/3282",[7,4.248,19,1.614,38,3.761,81,3.061,98,3.801,118,2.321,119,3.568,153,3.868,185,2.805,228,2.328,355,2.475,437,4.162,453,3.091,468,5.131,474,3.4,606,3.595,614,2.23,616,2.583,617,2.936,664,2.634,670,3.595,673,3.68,684,3.337,691,4.37,700,3.622,733,5.163,852,2.522,875,4.434,971,4.551,993,4.592,1124,2.374,1269,6.238,1312,3.809,1456,4.307,1612,4.193,1634,2.805,1641,4.95,1759,3.742,1761,7.79,1923,3.809,1982,3.919,1986,5.388,2202,9.693,2505,4.248,2856,7.86,3899,4.68,4220,6.44,5715,5.562,5774,5.774,6088,5.859,7221,4.889,7528,5.34,7830,4.889,7831,6.31,7832,6.31,7833,6.31,7834,6.31,7835,6.31,7836,6.31,7837,6.31]],["t/3284",[19,2.025,38,2.632,118,3.242,127,5.376,228,4.167,243,4.633,317,3.052,322,3.457,338,2.295,453,4.317,481,4.749,496,5.835,570,4.167,614,3.115,617,2.464,670,5.021,684,4.661,1527,5.32,1641,6.209,1697,7.242,1870,5.784,2187,5.369,2236,5.42,2287,7.768,2856,5.227,5774,7.993,7830,6.829,7838,8.813,7839,8.813,7840,6.302]],["t/3287",[0,0.581,3,1.426,4,1.124,6,2.109,11,1.339,18,0.948,19,0.703,20,0.815,21,0.955,22,0.588,26,0.704,27,0.783,28,0.632,30,0.541,33,2.173,38,0.669,41,0.841,42,1.077,45,1.308,47,2.094,48,1.894,49,0.944,66,1.85,72,0.758,73,0.569,76,1.473,83,2.02,88,0.506,98,0.81,108,2.488,109,0.521,118,1.923,131,1.485,140,0.934,146,0.944,148,1.015,155,0.958,174,1.374,182,1.98,186,2.2,196,0.941,197,0.972,225,0.765,227,1.418,230,1.601,270,1.598,304,2.055,310,0.819,317,0.775,338,1.361,343,1.033,352,0.541,356,1.073,357,1.053,358,1.608,359,1.037,361,0.922,383,1.033,386,1.003,405,1.848,426,0.797,430,2.685,437,1.796,459,1.23,496,1.156,532,2.073,539,2.216,556,1.295,563,1.266,567,1.125,602,0.718,616,2.573,617,2.194,622,4.508,633,2.06,653,1.163,661,1.065,670,1.275,688,0.999,692,1.219,693,0.895,707,1.42,712,2.61,716,1.015,735,0.87,753,2.216,754,2.254,755,1.113,758,5.275,759,1.816,764,1.629,772,1.131,818,1.922,822,2.67,889,1.23,906,1.065,956,0.767,960,2.336,967,2.013,972,1.647,974,0.797,1061,4.967,1063,6.194,1068,0.898,1124,1.475,1136,1.285,1157,0.663,1317,2.454,1319,2.391,1334,1.918,1451,3.677,1518,2.152,1581,1.097,1585,1.295,1641,4.645,1658,4.964,1697,1.435,1699,1.15,1771,1.894,1787,1.66,1840,2.639,1873,1.037,1874,1.056,1923,3.787,1932,1.528,2025,1.91,2110,1.601,2202,3.317,2252,4.654,2264,1.949,2599,3.843,2623,2.757,2683,1.507,2856,6.026,2857,4.155,2858,4.277,2869,3.877,2870,1.734,2889,3.937,2890,3.659,2892,1.929,2945,5.31,3071,1.695,3574,3.455,4040,3.317,4082,1.66,5207,6.64,5581,1.469,5686,4.069,5774,5.419,5939,3.639,7221,1.734,7224,1.55,7617,3.455,7677,4.854,7679,6.987,7685,2.079,7686,1.973,7840,7.017,7841,5.227,7842,3.919,7843,3.919,7844,7.846,7845,1.973,7846,2.079,7847,2.238,7848,2.079,7849,2.238,7850,2.238,7851,2.079,7852,1.973,7853,3.639,7854,3.919,7855,2.238,7856,4.854,7857,7.846,7858,1.973,7859,6.622,7860,4.854,7861,2.079,7862,2.079,7863,2.238,7864,2.238,7865,2.079,7866,3.639]],["t/3289",[19,1.44,37,2.795,73,3.032,88,2.401,110,3.18,115,2.091,122,2.6,160,3.628,187,5.589,230,2.46,315,2.899,338,2.091,339,3.954,340,2.668,341,3.341,346,3.858,352,2.571,570,2.963,616,2.303,661,3.822,754,3.462,841,2.582,879,4.172,882,3.437,938,5.336,960,2.63,1074,4.508,1124,3.022,1128,3.16,1196,5.957,1606,4.172,1769,5.957,1889,4.172,2344,6.383,2599,4.328,2755,4.08,2829,3.21,2856,6.305,4349,5.648,5686,5.208,7840,7.602,7852,7.079,7867,7.457,7868,8.031,7869,8.031]],["t/3291",[4,1.558,19,0.589,21,2.963,22,2.681,27,1.148,37,2.418,41,2.564,60,2.927,62,3.793,72,1.112,109,0.764,115,0.855,124,2.21,160,1.483,174,2.437,225,1.123,241,1.465,244,3.734,248,2.61,262,2.485,270,1.338,304,1.075,310,1.201,341,1.366,342,0.963,356,0.899,398,4.449,414,2.486,616,0.942,617,0.918,670,3.958,688,1.465,712,2.89,727,5.865,735,1.276,758,4.086,950,5.067,960,1.075,1040,3.587,1047,1.235,1068,1.317,1070,2.544,1088,2.06,1128,2.734,1314,2.019,1377,5.044,1471,1.608,1616,3.631,1617,3.523,1620,3.698,1658,3.006,1807,2.155,1920,1.817,1960,1.542,2105,4.968,2107,2.894,2262,1.437,2445,11.45,2776,4.114,2797,4.788,2811,5.877,2821,2.486,2831,4.678,2834,3.049,2856,6.763,2857,7.11,2858,7.319,2863,4.743,2865,2.06,2870,2.544,2896,4.636,2925,3.483,2971,1.625,3000,5.685,3003,3.049,3651,4.445,3848,10.589,3849,10.589,5600,5.154,5686,4.506,7150,8.949,7845,2.894,7846,3.049,7848,5.044,7851,3.049,7858,4.788,7866,9.473,7870,6.452,7871,5.432,7872,5.044,7873,8.075,7874,6.948,7875,3.283,7876,3.283,7877,3.283,7878,3.283,7879,3.283,7880,3.283,7881,5.432]],["t/3294",[19,1.792,108,4.758,174,3.505,317,3.461,661,4.758,688,4.461,716,4.534,755,4.971,772,5.051,906,4.758,956,4.19,1581,4.897,1612,6.642,1641,5.494,1793,5.611,2202,10.344,2679,5.928,5774,6.409,7840,8.739]],["t/3296",[0,1.069,19,1.724,49,5.035,76,2.709,83,3.715,88,2.172,115,2.504,174,3.372,230,2.946,315,3.255,317,3.33,346,4.62,356,2.632,357,2.583,496,4.968,661,4.577,716,4.362,755,4.783,772,4.859,877,3.518,956,3.297,1772,5.398,2831,8.035,7882,8.929]],["t/3298",[0,1.129,20,2.111,155,4.346,338,2.645,342,2.978,452,4.431,467,4.812,672,4.034,694,4.88,696,4.88,832,4.284,833,4.315,1156,5.847,1157,3.656,2856,7.319,2865,6.373]],["t/3301",[72,3.385,103,4.592,104,7.147,108,4.758,131,2.081,164,5.051,168,5.457,169,5.422,212,5.224,241,4.461,349,2.472,570,4.509,689,6.09,841,3.214,930,6.56,1157,2.961,1598,6.482,2152,6.482,3018,7.745,7078,8.459,7883,9.996]],["t/3305",[6,2.534,72,3.439,109,2.363,135,4.113,168,5.545,169,5.509,213,5.972,229,4.88,338,2.645,424,6.933,878,7.533,914,6.13,957,6.665,1317,5.795,4328,6.308,5686,6.586,7720,9.43,7884,10.156,7885,10.156]],["t/3307",[4,2.067,20,1.498,26,2.266,60,3.687,61,3.256,62,4.439,80,3.836,88,2.233,115,1.877,131,2.058,159,4.17,225,2.465,233,4.391,252,3.354,276,4.571,349,1.783,398,4.916,399,5.07,400,3.585,407,4.029,415,4.275,434,4.017,444,4.185,475,6.747,521,4.17,672,3.926,777,4.433,911,4.351,1324,4.017,1515,4.853,1634,3.204,1880,3.909,1926,4.106,1999,8.365,2445,6.353,2509,3.836,2510,4.17,2511,4.312,2543,5.585,2753,3.702,3237,7.068,6370,4.73,6914,6.1,7396,6.1,7886,7.208,7887,7.208,7888,7.208,7889,7.208,7890,7.208,7891,7.208,7892,7.208,7893,7.208,7894,7.208,7895,9.885,7896,7.208,7897,7.208]],["t/3309",[72,3.385,76,2.816,109,2.326,162,5.255,164,5.051,168,5.457,169,5.422,320,3.627,349,2.472,570,3.688,680,6.272,861,6.339,1226,4.78,2339,12.259,5023,8.459,6775,7.945,7898,12.222,7899,9.996,7900,9.996]],["t/3311",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/3313",[19,2.279,73,2.714,89,3.751,170,5.697,425,4.225,426,3.8,431,6.274,435,7.505,436,7.39,457,5.989,587,8.481,1126,7.765]],["t/3315",[0,1.129,6,2.534,9,5.486,12,3.833,37,3.534,89,3.571,110,4.021,167,6.512,349,2.512,410,5.473,430,3.04,431,7.258,580,6.076,1003,5.217,1298,6.308,2256,5.786,2509,5.405,5910,7.691]],["t/3317",[0,1.542,4,2.333,53,2.875,148,5.441,307,3.327,322,3.191,430,2.434,440,9.22,441,6.302,526,4.566,549,7.403,550,6.703,551,5.721,552,9.451,553,6.884,554,9.533,555,6.884,7901,7.552,7902,8.134,7903,8.134,7904,8.134,7905,8.134,7906,8.134,7907,8.134]],["t/3319",[0,1.473,4,1.956,6,2.374,53,2.41,148,4.97,307,2.789,322,2.675,342,2,430,2.041,440,8.807,526,3.828,539,7.644,549,7.107,550,6.232,551,4.797,552,8.386,553,5.771,554,8.708,555,5.771,924,4.08,1157,3.512,1186,4.236,2025,5.779,2717,5.58,2856,4.044,2865,4.279,3113,4.876,3327,3.885,3632,3.564,5330,4.591,7492,6.011,7901,6.332,7908,6.82,7909,6.82,7910,6.332,7911,6.82,7912,6.82,7913,6.82,7914,6.82,7915,6.82]],["t/3321",[0,1.095,4,2.055,19,2.016,20,1.49,38,2.141,73,1.823,88,1.619,91,2.705,92,2.587,98,2.594,114,5.002,131,1.492,170,3.212,242,2.637,244,2.929,307,4.027,310,3.603,340,2.381,342,2.101,383,4.543,398,4.897,400,3.565,413,4.014,431,5.79,434,3.994,435,5.041,436,4.964,437,2.463,438,3.702,439,7.948,440,6.543,450,4.8,532,3.791,539,7.178,549,3.768,616,2.055,735,2.786,856,4.964,1128,2.82,1144,2.386,1471,3.511,1506,2.941,1610,3.427,1798,3.913,2212,4.595,2755,5.002,4291,5.864,6252,6.655,7610,7.826,7613,6.065]],["t/3323",[4,3.382,6,1.961,18,2.218,20,1.089,37,2.735,47,2.623,72,1.774,73,2.4,80,5.02,83,3.037,88,2.13,89,1.842,96,2.417,98,1.896,136,2.21,168,2.861,169,2.842,225,2.688,244,3.827,252,2.438,272,2.517,289,8.847,296,4.19,299,6.677,316,2.477,338,1.364,346,2.517,383,3.626,398,6.398,400,2.606,403,2.691,404,6.604,407,2.136,408,3.081,425,2.075,429,2.482,431,3.081,441,8.702,444,3.328,452,2.822,467,2.482,523,3.163,532,2.771,539,2.963,577,3.192,658,1.801,817,3.056,841,1.685,1156,2.482,1157,2.328,1464,6.865,1471,2.567,1634,2.329,1709,2.606,1919,2.165,2460,3.288,3201,4.618,3401,6.439,4441,3.746,4922,6.652,4960,4.618,7910,8.758,7916,11.792,7917,5.239]],["t/3325",[0,1.129,4,2.913,76,2.862,109,2.363,170,4.551,244,3.021,307,4.154,383,4.685,398,5.051,408,5.972,413,4.14,424,6.933,432,5.83,439,6.665,440,6.749,450,4.951,1129,5.582,1155,5.078,3717,7.691,7918,10.156]],["t/3327",[20,2.237,37,3.745,73,2.737,168,5.875,169,5.836,170,4.822,173,8.804,352,2.602,406,5.955,424,7.345,431,6.328,438,5.559,3323,9.106]],["t/3329",[0,0.91,12,4.063,26,4.287,73,2.082,76,2.307,109,1.905,114,4.159,122,2.65,149,11.238,169,4.44,170,3.668,181,3.971,182,4.136,186,4.595,187,4.304,358,3.359,407,4.389,414,6.2,562,3.417,769,6.343,1136,4.699,1228,4.5,1282,6.2,1508,3.952,2108,7.987,2153,6.507,3419,6.928,3470,7.601,4239,6.343,4462,6.928,5111,5.512,7919,10.606,7920,8.186,7921,8.186,7922,8.186,7923,8.186]],["t/3331",[0,1.223,60,3.341,61,4.97,62,4.329,88,1.911,89,2.974,102,5.552,136,4.641,167,5.424,183,3.278,256,5.365,293,5.017,308,3.556,338,2.203,391,5.308,403,4.346,431,7.189,658,2.907,777,6.766,1128,3.329,1175,6.724,1651,6.922,1926,6.267,1938,5.154,2018,7.457,3107,7.457,6914,9.31,7030,7.855,7924,8.46,7925,7.855,7926,8.46,7927,8.46,7928,8.46,7929,8.46,7930,8.46]],["t/3333",[0,1.129,155,5.282,244,3.021,338,2.645,398,5.051,452,4.431,467,4.812,549,6.488,672,4.034,694,4.88,696,4.88,832,4.284,833,4.315,1156,5.847,1157,3.656]],["t/3335",[60,3.444,61,5.122,62,4.462,1455,9.012,1962,9.595,1963,9.012,7931,11.338]],["t/3337",[90,6.849,98,4.144,109,2.094,118,3.311,127,4.284,131,1.874,181,4.366,212,4.704,230,2.757,276,7.26,278,4.79,338,2.981,348,4.5,474,4.851,644,4.851,658,3.093,703,5.501,841,2.894,882,5.388,1074,5.053,1317,4.226,1319,4.117,1897,5.981,2446,7.154,5972,6.551,7932,12.59,7933,6.817]],["t/3339",[0,0.766,3,2.509,4,2.749,9,3.065,19,1.236,20,1.433,35,1.849,37,2.399,45,2.301,53,2.436,72,2.334,83,2.663,92,2.488,110,2.73,112,4.42,115,2.496,122,3.856,131,2.295,180,5.342,183,3.715,193,3.999,218,1.997,276,4.372,316,2.172,320,2.502,343,3.18,390,2.424,403,3.541,426,2.456,601,4.978,644,3.715,648,4.524,665,4.775,688,3.077,704,3.692,938,4.581,1038,3.041,1047,2.594,1136,3.957,1144,2.295,1154,3.692,1300,6.142,1319,4.385,1506,2.829,1581,3.377,1594,4.161,1634,3.065,1754,5.017,1772,3.87,1873,3.194,1874,3.251,2021,5.641,2132,4.42,2169,3.898,2325,6.015,2800,5.641,4349,6.742,5972,5.017,7329,6.077,7934,6.894,7935,6.401,7936,6.894]],["t/3341",[20,2.357,241,5.06,343,5.231,644,6.11,648,7.441,1002,7.853,1075,7.19]],["t/3343",[76,3.166,109,2.615,131,2.34,338,2.926,1610,6.268,7295,9.905,7296,8.336]],["t/3345",[0,0.882,3,2.886,4,3.024,20,2.192,35,2.827,53,5.01,80,4.22,84,4.144,88,1.791,109,1.845,125,4.201,182,4.007,218,2.297,358,3.254,390,2.788,426,2.825,565,4.831,1070,6.144,1124,2.984,1129,4.359,1228,4.359,1276,5.339,1581,3.885,1594,6.364,1597,5.67,1820,4.22,1873,3.674,1874,3.74,1982,4.926,2325,6.616,2434,5.413,2605,5.204,4504,8.923,5088,6.144,6310,6.006,7937,9.79,7938,10.998]],["t/3347",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/3350",[18,2.872,19,2.231,38,3.533,81,3.29,88,1.532,228,2.502,321,5.137,340,2.253,544,6.594,615,3.09,652,3.728,656,5.352,658,3.754,662,4.85,673,5.528,700,6.79,770,3.894,841,2.181,844,3.588,852,2.712,877,3.468,913,3.339,914,4.094,935,5.979,1124,2.552,1236,8.273,1238,5.979,1344,3.04,1547,3.754,1792,4.094,1880,3.679,2017,5.979,2111,4.256,2413,4.094,2632,7.344,3061,7.533,3586,5.392,3587,5.55,3855,6.298,4500,5.55,4867,6.298,5774,8.266,6797,6.298,7221,5.256,7224,4.698,7251,5.55,7557,6.298,7939,6.783,7940,6.298,7941,6.783,7942,6.783,7943,6.783,7944,6.783,7945,6.783,7946,6.783]],["t/3352",[19,1.636,38,1.673,72,4.092,73,0.867,88,0.769,96,3.29,98,2.581,100,3.293,107,2.708,109,1.303,115,2.151,118,3.039,164,1.721,166,1.86,181,5.03,182,1.721,183,2.17,186,1.912,189,2.64,210,2.076,212,5.128,228,1.257,229,3.426,230,3.006,255,3.591,386,1.527,394,3.208,401,4.14,426,1.213,427,5.238,430,1.02,437,1.171,457,1.912,486,4.47,544,5.923,593,4.522,605,2.58,656,5.305,673,1.987,688,3.183,689,2.076,703,1.637,754,2.415,756,2.841,843,3.35,844,3.772,850,3.939,854,4.241,856,2.36,863,2.264,882,2.397,897,2.209,908,2.58,909,2.184,926,3.591,971,1.721,1005,2.883,1006,1.802,1056,4.126,1074,1.912,1126,2.479,1128,2.204,1248,2.36,1255,4.868,1265,6.035,1276,2.294,1299,2.58,1317,2.63,1531,2.708,1548,3.947,1572,1.987,1604,2.527,1612,2.264,1635,2.209,1647,2.527,1682,3.163,1697,2.184,1700,2.883,1781,4.241,1886,2.138,2111,2.138,2125,2.116,2193,4.74,2199,3.163,2301,2.58,2302,5.2,2331,3.003,2345,2.527,2360,7.28,2413,2.056,2529,2.36,3039,2.436,3399,2.479,3425,2.788,3554,2.788,3650,6.621,3693,2.883,3710,3.003,3717,2.58,3895,2.708,3927,5.835,4143,2.883,4186,2.527,4500,4.582,4751,5.2,4924,2.527,4987,3.003,5086,3.163,6328,4.937,6848,4.344,7165,3.003,7422,3.163,7442,3.163,7754,4.339,7947,5.6,7948,2.708,7949,3.163,7950,3.407,7951,3.407,7952,3.407,7953,3.407,7954,3.407,7955,1.721,7956,7.131,7957,3.407,7958,3.407,7959,3.407,7960,3.407,7961,3.407,7962,6.621,7963,5.6,7964,3.407,7965,3.407,7966,3.407,7967,3.407,7968,3.407,7969,3.407,7970,3.407,7971,3.407,7972,3.003,7973,3.407,7974,3.407,7975,3.163,7976,5.6,7977,3.407,7978,3.407,7979,3.407]],["t/3354",[72,3.495,89,3.629,307,4.221,466,7.991,602,3.311,656,6.812,5073,9.584,7980,12.463,7981,12.463,7982,10.322,7983,10.322,7984,10.322]],["t/3356",[0,1.176,20,2.2,136,4.463,356,2.896,455,7.848,543,8.406,544,6.387,658,3.636,696,5.083,1829,6.71,2025,6.166,7985,10.58,7986,10.58]],["t/3360",[19,1.506,20,1.747,22,2.208,28,2.372,30,2.032,33,2.91,66,2.26,73,2.786,210,5.12,315,3.323,340,3.638,349,2.079,390,2.955,409,3.167,543,5.584,544,5.073,656,5.366,658,3.764,755,4.18,889,4.619,914,5.073,956,2.881,1028,4.942,1868,6.876,2061,4.246,3028,5.658,3282,4.901,6778,7.407,7690,7.407,7987,6.009,7988,6.116,7989,7.972,7990,7.832,7991,8.404,7992,10.954]],["t/3362",[19,1.897,76,2.981,89,3.72,434,5.897,444,4.479,544,6.387,621,4.881,656,6.629,664,4.417,699,4.631,1772,5.939,2515,8.657,3343,9.326]],["t/3365",[19,1.835,47,3.417,76,2.885,122,3.315,135,4.146,320,3.715,452,3.676,621,4.723,656,6.075,663,5.201,699,4.481,1157,3.033,1296,8.664,1502,6.719,1598,6.64,3341,5.789,3343,9.024,7993,10.238]],["t/3367",[0,1.196,6,2.685,11,6.437,89,4.792,103,4.943,356,2.946,430,3.221,544,6.495,585,5.559,1941,6.683,4915,8.804]],["t/3369",[0,1.587,13,5.502,20,1.912,99,3.787,115,2.395,125,3.665,170,5.698,211,4.419,361,3.787,407,4.731,425,3.642,434,5.126,523,5.552,528,8.609,529,7.126,530,6.37,543,8.45,703,4.419,893,6.965,1471,4.505,3326,8.107]],["t/3371",[0,1.074,22,2.913,28,1.968,30,1.686,66,1.992,72,2.36,76,1.964,78,4.032,89,3.396,90,4.17,91,4.183,109,1.622,110,2.76,122,2.257,131,1.451,243,3.664,316,3.044,322,3.789,340,4.175,397,4.133,430,2.086,469,4.246,543,7.366,544,5.83,879,3.621,960,2.283,1038,3.074,1058,3.414,1061,4.363,1105,4.632,1330,3.111,1344,3.123,1506,3.964,1561,5.703,1566,3.414,2075,3.56,2223,3.857,2274,4.574,2291,5.278,2369,6.472,2787,5.072,5465,5.703,7177,5.54,7987,7.925,7994,11.752,7995,6.144,7996,8.514,7997,6.144,7998,8.514]],["t/3373",[0,1.148,6,1.529,8,3.633,19,1.098,20,1.274,22,2.969,23,3.113,25,2.944,26,3.248,28,1.73,30,1.482,33,3.053,39,2.188,41,1.314,42,2.423,45,2.045,46,4.021,53,2.165,59,7.009,60,2.678,61,3.984,62,3.47,66,2.331,89,3.1,90,3.665,91,3.328,103,2.814,122,1.984,146,3.72,227,2.217,270,2.497,304,2.007,317,3.913,340,2.035,356,1.677,430,1.834,444,2.594,544,3.698,585,3.165,614,2.165,656,5.061,664,2.557,754,2.641,755,3.047,939,4.574,940,2.641,960,2.007,1053,3.845,1058,3.001,1136,3.517,1296,5.185,1328,2.839,1361,2.986,1506,2.514,1517,2.916,1519,2.864,1520,3.147,1521,3.573,1522,3.698,1523,3.517,1545,4.915,1714,4.545,1778,4.125,3086,4.456,3586,4.87,3700,7.009,4915,5.013,7546,5.689,7987,4.381,7989,4.459,7990,4.381,7999,6.127]],["t/3375",[3,2.868,19,1.413,33,2.729,66,1.626,98,2.852,109,2.443,111,4.143,116,3.15,118,2.899,135,3.191,187,4.143,218,2.283,315,2.149,316,3.309,383,3.636,390,3.691,409,2.278,413,3.212,448,3.12,459,4.332,486,3.86,656,6.168,658,2.708,664,3.29,741,3.503,864,4.847,883,5.846,956,2.702,1076,3.94,1136,4.524,1155,3.94,1296,6.669,1334,3.852,1709,3.92,1820,4.194,2564,5.543,2749,5.543,7165,6.946,7990,5.635,8000,9.749,8001,11.692,8002,7.881,8003,9.749,8004,6.946]],["t/3377",[0,1.129,39,3.627,49,4.284,109,2.363,243,5.339,338,2.645,349,2.512,350,5.048,352,2.456,359,4.706,543,6.749,548,5.025,562,4.239,602,3.258,656,4.975,658,3.49,882,4.346,1074,5.701,1889,5.277]],["t/3379",[0,1.045,6,2.346,22,2.471,23,4.776,28,2.654,30,2.274,42,2.584,66,2.65,67,4.395,68,6.974,69,3.087,1053,4.099,1334,5.188,4236,6.974,6031,7.12,7987,6.723,8003,11.927,8005,9.354,8006,9.354]],["t/3381",[3,3.275,22,3.008,28,2.541,30,2.177,33,3.117,42,2.473,66,2.597,111,4.732,196,3.784,197,3.91,390,3.165,409,2.602,543,5.981,656,4.409,2749,6.331,3028,6.06,6030,9.755,6031,10.361,7987,8.186,7988,8.332,7989,6.551,7990,6.436,8005,9.1,8006,7.154]],["t/3383",[0,1.218,19,1.506,22,2.878,28,2.372,30,2.032,33,2.91,35,2.253,57,4.293,66,2.514,76,2.368,109,1.955,115,2.188,196,3.533,197,3.65,350,3.437,359,3.894,467,3.982,543,7.279,544,5.073,683,3.403,770,4.824,1928,5.82,1942,3.86,3028,5.658,3996,9.229,5465,6.876,5736,7.803,7987,6.009,7988,7.972,7989,6.116,7990,6.009,8004,7.407,8007,12.186,8008,10.954,8009,7.803]],["t/3385",[0,1.085,18,4.134,37,4.193,38,2.917,47,3.259,48,8.264,49,4.119,99,4.021,174,3.424,230,2.991,231,3.515,310,3.573,437,3.356,544,5.894,656,5.902,1328,4.524,1461,5.894,1462,8.264,1606,6.26,4618,7.761,5581,6.408,5696,8.264]],["t/3387",[0,0.953,22,2.916,27,2.999,28,2.421,30,2.074,33,3.843,35,2.299,66,2.538,76,2.416,109,2.582,212,4.481,310,4.06,338,2.233,459,4.713,543,5.698,602,2.751,656,4.2,692,2.667,755,4.265,770,4.922,1274,7.016,1634,3.812,1928,5.939,2483,5.326,3028,5.773,3777,7.496,5543,7.935,5581,5.627,7987,6.131,7988,6.24,7989,6.24,7990,6.131,8004,7.558,8009,7.962]],["t/3389",[0,0.452,3,1.478,6,1.014,19,0.728,20,0.845,22,2.93,28,1.823,30,1.944,32,2.149,33,2.782,42,1.116,45,2.682,66,2.52,73,1.643,88,0.918,89,1.428,91,2.437,109,1.502,111,2.136,113,1.708,116,1.624,118,1.495,131,0.846,181,1.971,185,1.806,187,2.136,196,2.714,197,2.805,212,2.123,222,2.314,243,2.136,316,2.035,320,1.474,322,1.594,338,1.058,340,3.96,345,1.961,350,3.287,352,1.562,359,4.242,390,1.428,397,2.409,409,1.867,426,1.447,430,1.216,459,2.233,468,2.314,469,2.475,543,6.638,544,5.526,562,1.696,656,3.163,658,2.219,692,1.264,852,2.581,879,2.111,936,3.077,956,1.393,960,1.331,1038,1.792,1053,1.771,1061,2.917,1105,2.7,1330,1.813,1334,1.491,1344,1.821,1506,2.65,1566,1.99,1641,2.233,1696,2.905,1750,2.773,1889,2.111,2004,3.148,2075,2.075,2223,2.249,2235,3.045,2274,5.274,2291,3.077,2599,4.331,2683,2.735,2749,2.858,3028,4.347,3777,2.475,4082,3.014,5369,3.229,5465,3.324,5543,2.905,5581,2.666,6030,6.226,6031,7.566,7177,3.229,7987,7.605,7988,4.699,7989,4.699,7990,4.617,7994,9.376,7995,3.581,7996,3.581,7997,3.581,7998,5.692,8005,5.132,8006,3.229,8010,8.501,8011,3.438,8012,3.772,8013,9.376,8014,7.083,8015,4.063,8016,5.692,8017,8.07,8018,3.581]],["t/3391",[3,1.972,19,0.971,22,2.118,28,1.53,30,1.949,32,2.866,33,3.69,42,1.489,66,2.678,73,2.05,109,1.875,111,2.849,113,2.278,118,1.994,185,2.409,196,4.045,197,4.18,212,2.832,338,2.099,340,3.54,350,3.297,352,2.328,359,3.735,390,1.905,409,2.782,459,2.979,468,3.087,543,3.601,544,5.809,656,3.948,852,2.166,878,4.019,1096,2.489,1334,1.988,1641,2.979,1709,2.695,2599,4.344,2749,3.811,3028,6.479,3777,3.301,5369,4.307,5543,3.875,5581,3.556,6030,7.457,6031,8.627,7987,5.763,7988,5.866,7989,7.004,7990,6.881,8005,6.407,8006,4.307,8010,5.032,8011,6.821,8013,8.483,8014,9.394,8016,7.105,8017,9.394,8018,4.776,8019,11.087,8020,7.484,8021,9.896,8022,5.032]],["t/3393",[3,1.653,19,0.815,20,0.945,22,2.27,28,1.99,30,2.089,32,2.403,33,3.649,42,1.249,66,2.651,73,1.156,109,1.057,111,2.389,116,1.816,125,1.811,131,1.799,185,3.134,196,4.093,197,4.229,212,2.375,222,4.017,228,1.676,241,2.028,320,1.649,340,3.234,350,2.884,352,2.355,359,3.267,390,1.598,409,2.815,425,1.799,468,2.589,543,4.685,544,2.743,602,1.458,656,4.769,692,1.413,699,1.989,1076,2.272,1334,1.667,1641,2.498,1759,2.695,1966,3.019,1969,3.37,2599,2.449,2679,2.695,2749,3.196,3028,6.555,3129,3.196,3777,2.768,5369,3.612,5543,3.249,5581,2.982,6030,6.694,6031,7.981,7987,6.177,7988,5.131,7989,7.085,7990,6.961,8005,5.604,8006,3.612,8011,7.311,8012,9.04,8013,7.615,8014,9.289,8016,6.215,8017,8.582,8018,4.005,8019,9.04,8020,6.546,8021,9.04,8022,4.219,8023,11.152,8024,4.544,8025,8.639,8026,7.05,8027,9.736,8028,4.544]],["t/3395",[12,3.833,73,2.584,88,2.294,89,3.571,352,2.985,445,6.933,595,5.339,644,5.473,656,6.513,658,3.49,852,4.06,1265,8.595,1270,9.43,1697,6.512,2798,9.346,8029,10.156]],["t/3397",[0,0.559,12,2.877,20,1.585,22,2.9,26,2.894,28,2.598,30,2.226,35,2.044,37,1.751,41,1.636,66,2.395,69,1.652,76,1.418,84,2.629,89,3.236,91,2.877,93,2.766,99,2.072,109,1.171,114,2.556,122,2.98,135,2.037,146,3.883,148,4.175,185,2.237,196,2.115,197,2.185,227,1.821,234,3.157,260,4.784,267,3.753,270,2.051,304,1.648,308,2.115,340,1.671,349,1.244,352,1.844,353,3.343,361,2.072,400,2.502,543,5.066,544,3.037,595,4.839,602,2.446,644,2.711,656,6.086,716,2.282,727,4.19,770,4.376,847,2.845,851,3.01,867,2.888,1061,3.444,1122,4.19,1328,2.331,1462,4.258,1506,2.065,1547,2.785,1580,9.535,1629,3.43,1765,3.302,1778,3.387,2056,3.191,2530,4.435,2725,7.761,3214,4.435,3231,3.434,4914,3.898,5894,9.726,7228,4.672,7988,5.548,8000,4.672,8001,4.672,8011,4.258,8030,7.623,8031,7.623,8032,5.031,8033,9.204,8034,9.204,8035,5.031,8036,4.435,8037,5.031]],["t/3399",[21,2.321,22,2.999,23,2.765,25,3.885,26,3.358,28,1.536,30,1.316,33,2.8,37,3.358,38,1.625,39,3.446,41,2.566,42,2.935,45,3.22,50,3.033,51,3.174,53,2.858,66,1.99,84,2.844,89,1.913,92,1.964,122,2.618,131,2.009,146,3.411,148,2.469,228,2.008,324,3.572,349,1.346,352,1.956,361,2.241,543,5.373,544,4.881,595,2.861,652,2.991,656,5.232,658,1.87,753,4.572,754,2.346,770,3.124,870,4.217,940,2.346,1061,4.825,1077,2.578,1144,1.812,1153,2.666,1361,5.206,1451,3.828,1462,4.606,1519,6.075,1578,2.693,1626,3.38,1769,4.037,2155,6.773,2600,4.606,2605,5.307,2606,5.519,3428,3.961,4289,4.037,5097,4.326,5521,8.739,6851,4.606,6852,6.843,7689,5.053,7690,4.797,7988,3.961,7989,5.885,8038,5.442]],["t/3401",[12,3.789,26,3.157,34,4.536,60,2.24,62,2.902,84,3.855,89,2.593,109,2.336,122,2.388,131,1.536,146,4.816,164,3.727,187,3.878,211,3.544,241,3.292,308,3.1,338,1.921,340,3.336,349,1.824,361,3.037,398,3.668,459,4.054,521,4.267,618,4.374,622,3.707,656,5.593,661,3.511,673,4.302,754,4.329,770,5.764,840,4.412,877,3.674,1077,3.495,1120,6.035,1451,5.188,1506,3.027,1525,4.966,1820,3.925,2004,5.715,2020,6.035,2155,4.677,2212,4.729,2235,3.479,2274,4.841,2427,5.188,2599,5.411,8039,7.376,8040,7.376,8041,7.376,8042,10.042,8043,10.042,8044,6.849,8045,7.376]],["t/3403",[0,1.551,6,2.399,12,3.629,20,1.999,115,2.504,170,4.309,243,5.055,361,3.959,407,3.92,528,8.852,529,7.451,530,6.66,543,6.39,544,5.805,595,6.274,656,4.711,696,4.62,703,4.62,956,3.297,1119,6.034,1709,4.783]],["t/3405",[76,2.649,111,4.943,127,4.475,315,2.564,316,3.708,469,5.728,544,5.675,694,4.517,741,5.231,753,5.316,754,4.053,755,5.853,1028,5.529,1105,6.248,1293,5.625,1301,8.287,1525,6.33,1792,5.675,2025,4.583,2509,5.003,7940,8.73,7990,9.185,8046,9.402,8047,8.73,8048,9.402]],["t/3407",[168,6.19,169,6.15,349,2.804,544,6.844,597,9.012,1804,6.275,7962,10.528]],["t/3409",[0,1.138,19,1.835,155,4.382,225,3.501,338,2.666,452,4.453,467,4.851,544,6.18,656,5.015,672,4.067,694,4.919,696,4.919,832,4.319,833,4.35,1156,5.876,1157,3.674]],["t/3412",[11,6.031,18,3.141,19,2.053,73,1.887,88,2.277,127,4.799,183,2.875,231,3.629,317,2.569,349,1.835,356,2.031,401,4.573,405,3.499,612,3.616,621,3.423,682,4.995,683,5.78,684,3.924,686,3.9,700,4.259,718,3.055,756,2.956,924,4.438,1066,4.4,1183,5.618,1236,5.618,1276,6.788,1300,4.135,1317,3.483,1344,4.518,1461,4.478,1534,4.478,1870,4.869,1889,3.855,2300,4.811,2706,6.539,4105,6.279,4366,11.408,8049,7.419,8050,7.419,8051,7.419,8052,7.419,8053,7.419,8054,7.419]],["t/3414",[11,3.174,18,3.359,19,1.704,20,1.103,88,2.382,89,4.165,98,1.92,103,3.645,118,1.952,176,3.202,181,3.849,182,2.681,183,3.683,231,1.91,243,2.789,347,4.111,348,2.652,394,2.387,444,2.246,486,3.887,597,6.306,614,3.359,621,4.866,664,2.215,683,5.227,684,4.196,686,2.789,687,3.525,691,3.674,718,2.184,756,2.114,875,2.612,878,3.935,879,2.756,882,2.27,1003,2.725,1231,3.621,1248,3.674,1279,4.111,1295,5.087,1298,3.295,1299,7.197,1311,4.111,1317,4.462,1344,3.555,1502,3.482,1527,4.789,1548,2.936,1572,3.094,1653,4.018,1656,2.878,1889,4.122,1938,3.232,1942,2.437,2065,4.676,2111,3.329,2149,3.861,2165,3.935,2192,5.774,2241,2.936,2300,3.441,2346,4.926,2483,3.295,2884,3.861,3020,3.401,3899,3.935,4011,4.926,4106,6.684,4212,4.217,4220,3.793,5072,4.926,6275,4.217,6328,4.676,6796,4.926,7194,4.926,7429,4.676,8055,7.934,8056,5.305,8057,4.926,8058,5.305,8059,5.305,8060,5.305,8061,5.305,8062,5.305,8063,5.305,8064,5.305,8065,5.305,8066,5.305,8067,5.305,8068,5.305,8069,5.305]],["t/3416",[3,1.997,9,4.768,11,3.284,19,1.459,20,1.141,88,1.24,103,2.522,108,2.613,109,1.277,110,2.174,127,3.873,181,3.948,182,2.774,184,2.676,217,4.072,218,1.59,219,2.789,315,1.497,317,1.901,345,2.65,357,1.475,390,1.93,409,1.587,413,2.238,444,2.324,448,2.174,457,3.081,464,5.082,526,3.081,612,2.676,614,2.876,617,1.535,658,1.886,676,2.997,683,4.343,689,5.908,718,3.351,741,3.618,756,3.243,850,3.861,852,2.194,875,2.702,877,2.977,879,2.852,906,5.105,936,4.157,1003,2.82,1033,4.072,1084,4.839,1096,2.522,1261,4.646,1290,4.491,1292,5.724,1313,6.036,1317,4.553,1320,4.253,1383,3.228,1471,3.986,1518,2.26,1525,3.696,1548,3.038,1572,3.202,1630,3.519,1631,3.284,1661,3.648,1793,3.081,1795,3.648,2110,3.925,2111,3.444,2129,4.157,2236,5.005,2287,4.839,2407,3.995,2599,2.958,2743,3.059,3260,3.648,4106,5.724,4111,3.925,4364,4.491,4618,4.363,5648,4.157,6017,4.491,6018,4.839,6218,4.363,6908,5.097,7224,6.716,7366,5.097,7867,5.097,8070,5.489,8071,5.489,8072,5.489,8073,5.489,8074,5.489,8075,5.489,8076,5.489]],["t/3418",[19,1.685,37,3.272,84,4.914,99,3.871,211,4.517,225,4.024,310,3.44,338,3.345,349,2.325,352,2.274,356,3.221,407,3.833,448,4.66,563,5.316,567,4.725,658,3.231,683,5.202,686,4.943,876,5.576,877,3.44,1547,5.203,1869,5.203,2210,5.133]],["t/3420",[20,1.638,30,1.906,33,2.729,66,2.436,73,2.671,88,1.78,155,3.373,162,6.207,196,3.313,197,3.423,243,4.143,310,2.883,322,3.091,350,3.223,352,1.906,357,2.117,430,3.143,474,4.247,658,2.708,683,4.252,688,3.517,732,4.596,771,6.775,841,2.534,1505,5.306,1842,6.448,2263,3.982,2264,3.92,2733,7.018,2734,6.447,2743,4.392,2874,4.945,4111,5.635,5903,6.669,7138,6.669,8077,13.114]],["t/3422",[20,1.885,30,2.193,33,3.139,66,2.606,196,3.811,197,3.938,320,3.29,346,4.356,352,2.193,683,3.671,771,7.083,1505,6.103,1842,7.418,2316,4.917,2733,5.052,2734,6.897,2743,5.052,2840,5.95,4111,6.482,5903,7.672,6014,7.418,7138,7.672,8078,11.729,8079,7.991,8080,8.417]],["t/3424",[0,0.922,4,3.115,20,1.724,22,2.179,37,3.779,41,2.33,217,8.055,310,3.034,322,3.253,333,6.893,390,2.916,409,2.398,413,3.381,426,2.954,683,5.203,686,4.36,771,4.284,1383,6.386,1519,3.877,1630,6.963,1631,6.497,1873,3.843,1874,3.912,2840,5.443,6014,6.786,6015,7.701,6016,7.31,6017,8.886,6018,9.572]],["t/3426",[0,0.922,19,1.487,73,2.763,85,3.392,88,1.873,228,3.06,349,2.686,352,2.929,356,2.27,361,4.471,452,2.978,453,4.063,476,7.31,683,5.203,686,5.709,732,6.334,735,4.221,882,3.549,974,2.954,1003,4.26,1053,3.616,1163,4.655,1164,4.59,1344,3.716,1746,8.886,2144,7.019,2165,6.152,2743,6.749,3602,5.379,4111,7.765,5163,5.833,5648,6.281,8081,7.701]],["t/3428",[0,0.987,3,3.229,4,3.254,13,6.788,19,1.591,39,3.169,45,3.787,76,2.501,99,3.654,110,3.514,218,2.571,225,3.035,228,3.274,231,3.195,336,4.186,342,2.602,349,3.093,357,2.384,358,3.642,426,3.161,450,4.326,594,5.755,683,3.594,699,4.966,944,7.054,1053,3.869,1300,4.946,1506,3.642,1942,5.212,2155,5.628,8082,8.875]],["t/3430",[0,1.054,4,2.312,12,1.54,13,2.996,18,0.696,20,1.041,26,3.684,27,1.042,30,0.72,33,1.031,36,2.649,41,0.876,42,2.088,57,0.84,60,1.969,66,1.033,69,1.644,72,0.557,80,1.585,81,2.43,85,0.673,88,0.372,91,0.621,107,1.308,110,1.179,115,0.776,122,0.533,131,0.85,135,0.666,146,2.113,150,0.776,193,1.481,218,2.9,225,0.563,238,2.588,243,0.865,244,1.49,263,2.421,298,1.723,319,1.176,333,4.474,336,0.776,342,0.482,349,0.407,352,1.403,357,0.8,358,0.675,376,4.947,386,1.335,390,1.047,404,1.752,409,2.741,413,2.642,426,1.454,448,2.296,488,1.002,549,2.146,576,0.984,619,0.734,664,0.687,676,1.626,683,3.431,688,0.734,695,3.761,732,0.96,749,3.264,754,0.709,774,3.612,798,3.287,818,0.504,830,4.885,877,0.602,930,1.08,939,0.728,974,1.784,992,0.87,1040,2.834,1056,0.952,1115,1.539,1124,0.619,1144,1.931,1167,3.372,1226,4.389,1330,3.158,1361,5.82,1376,6.951,1434,4.067,1471,0.806,1508,1.97,1511,2.033,1519,3.551,1600,1.176,1610,1.424,1628,5.96,1629,1.836,1630,4.155,1631,1.782,1632,7.599,1634,0.731,1705,0.749,1777,2.21,1790,0.79,1873,1.891,1874,1.925,1889,0.855,1923,1.798,1942,3.25,2062,3.028,2078,2.712,2116,2.97,2155,1.043,2218,2.063,2219,3.523,2223,2.772,2224,1.932,2254,2.437,2255,2.368,2261,2.521,2344,1.308,2367,6.266,2390,2.561,2490,2.871,2503,1.002,2529,1.139,2538,1.108,2605,1.955,2606,2.033,2666,1.08,2678,1.45,2715,5.303,2915,3.348,3015,3.806,3123,3.454,3193,1.782,3226,6.026,3350,2.381,3510,1.392,3858,2.368,4111,1.176,4177,2.827,4183,1.176,4368,3.454,4369,3.454,4626,4.634,4868,0.993,5007,1.22,5302,3.372,5330,1.108,5571,2.437,5828,1.45,5963,1.002,5964,1.815,5965,1.002,5966,1.002,6318,4.609,6757,1.346,6775,3.244,7164,4.651,8083,1.528,8084,5.713,8085,3.598,8086,3.244,8087,2.979,8088,4.082,8089,6.018,8090,1.645,8091,6.697,8092,6.481,8093,1.45,8094,1.645,8095,2.521,8096,1.645,8097,2.979,8098,1.645,8099,1.645,8100,1.645,8101,1.645,8102,3.34,8103,2.308,8104,4.415,8105,2.437,8106,1.346,8107,1.275,8108,1.45,8109,1.528,8110,1.528,8111,1.528,8112,1.528,8113,1.528,8114,2.979]],["t/3432",[0,0.774,4,0.676,6,1.023,12,0.89,19,0.423,20,1,26,2.045,27,0.446,35,0.632,37,1.427,38,0.704,41,0.273,42,2.894,60,0.716,69,1.97,73,0.6,81,1.596,85,0.521,88,0.743,90,0.762,92,2.918,93,0.7,98,0.853,108,0.607,109,0.549,114,0.647,115,0.857,116,0.509,119,0.721,125,0.508,131,1.809,136,0.995,137,1.144,159,0.737,165,0.769,174,0.447,181,0.618,184,0.621,187,0.67,193,2.934,215,1.255,216,1.512,218,3.006,228,1.214,230,1.008,238,2.6,239,4.452,243,0.67,244,0.701,254,3.24,263,1.398,274,2.279,291,0.847,298,3.148,300,1.123,302,0.593,310,0.466,316,0.402,319,2.352,320,0.462,333,5.337,340,0.423,349,0.315,357,1.462,361,0.525,376,3.971,386,0.571,390,0.448,409,1.88,412,2.21,413,1.341,425,0.505,426,0.84,434,0.71,440,1.567,448,0.934,451,2.884,452,0.846,459,0.7,469,0.776,474,0.687,549,1.73,563,1.333,570,0.47,591,0.64,606,1.343,619,0.569,658,0.81,683,4.621,686,0.67,688,1.468,695,3.121,698,1.305,699,1.032,703,1.133,732,3.794,740,1.375,741,1.462,749,1.892,758,0.749,774,1.314,798,1.547,818,0.39,830,3.921,841,0.41,852,0.509,877,0.466,906,1.122,911,0.769,913,1.161,917,1.043,950,0.8,960,1.343,972,0.536,974,2.478,992,0.674,993,0.927,1006,0.674,1038,1.04,1040,4.082,1043,1.056,1047,0.887,1053,1.028,1056,1.364,1077,1.559,1096,0.585,1115,2.118,1124,2.047,1128,0.928,1144,1.602,1153,1.612,1157,0.698,1167,1.587,1196,0.945,1226,3.524,1300,0.71,1330,1.052,1361,3.941,1376,6.123,1383,1.935,1470,0.8,1475,1.043,1506,0.523,1508,1.138,1518,1.355,1553,0.737,1610,0.609,1614,1.239,1628,6.299,1629,0.573,1630,3.085,1631,1.968,1632,4.825,1635,2.659,1680,1.587,1681,0.883,1705,1.868,1738,0.826,1752,2.078,1777,0.945,1798,2.627,1820,5.134,1873,0.59,1874,0.601,1889,0.662,1901,1.874,1923,0.769,1942,2.988,1960,1.545,1966,1.567,2078,1.567,2110,0.911,2116,1.716,2129,0.965,2169,0.721,2197,0.896,2262,2.627,2356,1.609,2366,3.259,2367,3.714,2390,0.8,2423,1.123,2490,0.896,2559,1.078,2646,0.987,2715,4.452,2745,1.827,3004,0.817,3071,0.965,3206,1.183,3226,3.077,3252,1.314,3350,1.375,3503,0.927,3567,0.945,3638,0.826,3712,1.874,3887,0.7,4079,2.285,4177,1.633,4183,1.686,4368,1.995,4369,1.995,4417,1.043,4626,3.891,4868,2.475,5019,1.716,5302,2.215,5323,0.965,5378,1.183,5379,1.183,5477,1.183,5554,1.995,5571,5.322,5963,2.498,5964,2.931,5965,0.776,5966,0.776,6140,1.043,6339,1.078,6757,1.043,6775,1.874,7054,1.827,7169,2.549,7224,1.633,7230,1.043,7251,1.043,8083,1.183,8084,2.078,8085,2.078,8086,1.874,8095,1.078,8102,3.937,8103,7.475,8104,3.614,8105,1.929,8106,1.043,8107,0.987,8108,1.123,8109,1.183,8110,1.183,8111,1.183,8115,8.355,8116,1.123,8117,3.807,8118,3.29,8119,1.274,8120,1.274,8121,1.183,8122,2.358,8123,1.123,8124,1.274,8125,3.055,8126,1.274,8127,2.358,8128,2.358,8129,3.29,8130,3.259,8131,1.183,8132,1.929,8133,1.183,8134,4.1,8135,1.274,8136,4.1,8137,1.274,8138,1.274,8139,1.274,8140,3.614,8141,2.358,8142,2.358,8143,1.274,8144,4.812,8145,1.274,8146,1.274,8147,2.189,8148,4.468,8149,2.358,8150,1.274,8151,1.274,8152,2.358]],["t/3434",[0,0.766,6,1.936,19,0.791,20,0.533,22,0.674,28,0.724,30,0.62,33,0.888,35,0.688,37,0.893,39,0.916,41,0.55,42,3.162,66,1.197,69,2.262,73,0.652,85,1.049,88,1.915,98,1.596,99,1.056,116,1.025,125,1.022,131,2.396,159,1.484,161,1.348,164,1.296,174,1.547,181,1.244,184,1.25,185,1.961,187,1.348,218,0.743,229,1.232,230,1.777,241,1.145,244,0.763,298,2.552,316,0.808,319,1.834,320,0.931,333,3.358,340,0.852,342,0.752,350,1.804,357,1.851,359,1.188,390,0.902,394,1.154,413,1.798,425,1.016,426,0.914,448,1.016,452,1.583,453,1.256,459,1.41,460,1.987,469,1.563,549,1.348,570,0.946,577,1.563,602,0.823,616,2.431,617,0.717,619,1.145,658,2.367,683,4.343,686,1.348,688,1.145,692,0.798,698,2.441,699,2.539,732,4.527,740,1.496,749,1.183,753,2.494,756,1.022,841,0.825,852,1.025,883,3.272,906,2.099,911,1.548,913,2.171,930,1.683,967,1.318,974,2.764,1038,1.131,1040,4.483,1053,3.384,1056,1.484,1077,2.09,1096,1.178,1115,1.325,1124,3.769,1144,1.932,1153,2.842,1157,1.307,1174,2.171,1228,2.424,1383,1.508,1470,1.609,1518,2.389,1534,1.548,1553,1.484,1578,1.269,1606,1.333,1610,1.227,1614,1.348,1616,1.34,1620,3.088,1628,7.045,1629,1.984,1630,4.417,1631,4.121,1705,1.168,1798,4.237,1820,5.33,1889,1.333,1942,3.165,1960,1.204,2105,1.834,2129,1.942,2169,1.45,2230,2.099,2262,2.539,2276,2.969,2874,1.609,2909,1.645,3252,1.43,3485,1.776,3567,1.903,3638,1.663,3777,1.563,3908,2.099,4079,1.43,4183,1.834,4186,1.903,5019,1.867,5600,1.903,6757,2.099,7224,3.055,7251,2.099,7679,1.903,8102,4.747,8103,7.423,8104,6.072,8105,3.609,8106,2.099,8107,1.987,8117,7.871,8125,7.206,8130,4.612,8132,2.099,8133,2.382,8147,2.382,8148,2.382,8153,3.888,8154,5.217,8155,8.715,8156,2.039,8157,2.099,8158,9.147,8159,2.382,8160,2.565,8161,2.565,8162,2.565]],["t/3436",[0,0.96,6,2.154,30,2.088,33,2.989,47,2.881,66,2.547,131,1.798,196,3.629,197,3.75,231,3.108,349,2.757,621,3.983,683,3.496,699,3.778,732,5.035,771,6.977,1505,5.812,1842,7.064,2733,4.811,2734,6.74,2743,4.811,4070,8.016,5903,7.306,6014,7.064,7138,7.306,8078,11.462,8079,7.609,8080,8.016,8116,7.609,8163,8.633,8164,8.633]],["t/3438",[0,1.147,42,3.425,131,2.149,333,5.031,349,2.553,352,2.496,1519,6.5,2822,7.512,8116,9.098,8155,7.817,8159,9.584,8165,12.463,8166,10.322]],["t/3440",[19,1.614,53,3.181,60,3.477,76,2.536,88,2.033,109,2.094,225,3.915,229,4.325,317,3.117,336,5.4,342,2.639,349,2.226,350,3.681,352,2.177,356,2.464,357,2.418,381,3.986,444,3.811,514,3.478,570,3.321,602,2.888,683,4.636,686,6.019,941,5.09,974,3.206,1156,4.265,1525,6.06,2509,4.79,2733,5.017,3916,6.06,8167,8.358]],["t/3442",[19,1.569,76,2.466,84,4.574,103,4.021,109,2.036,125,3.488,131,2.342,187,4.601,217,6.492,320,3.176,333,4.266,357,2.351,403,5.777,622,5.652,683,3.544,798,7.38,877,3.202,974,3.117,1033,6.492,1076,5.622,1144,4.137,1610,5.942,1614,4.601,1628,6.156,1629,5.59,1630,5.611,2169,4.949,6017,7.161,7224,6.062]],["t/3444",[0,1.111,3,3.637,4,2.867,6,2.494,19,1.792,85,4.088,88,2.258,317,3.461,409,2.89,450,4.872,598,5.532,617,2.795,656,4.897,661,4.758,680,6.272,681,6.482,683,4.048,692,3.109,716,4.534,956,4.19,1003,5.135]],["t/3446",[0,1.293,3,2.075,6,0.869,7,2.344,22,0.915,28,0.983,30,0.842,35,2.244,60,1.732,66,1.176,69,1.143,82,1.524,110,1.379,131,1.922,193,3.037,195,1.732,218,3.585,244,1.036,263,2.065,267,1.714,307,2.332,309,1.329,316,1.097,317,1.974,322,2.237,325,1.635,329,2.779,333,4.079,352,0.842,357,2.48,366,1.706,378,3.546,390,1.224,392,3.828,409,2.093,413,3.411,430,2.763,437,1.197,443,2.065,448,2.258,450,2.779,497,2.232,520,1.876,536,1.914,617,0.973,619,1.554,621,1.606,622,1.75,623,2.121,681,5.427,683,1.41,701,2.583,716,1.579,717,1.83,718,2.981,725,1.697,735,1.353,738,1.789,742,2.185,754,1.501,759,4.594,766,5.37,767,5.754,768,4.156,769,2.698,770,3.273,771,2.945,772,1.759,773,2.922,774,3.178,775,4.532,776,2.377,777,2.141,778,2.065,779,2.849,780,2.849,781,2.849,782,2.583,783,2.849,784,4.665,785,4.318,786,2.849,787,2.849,788,2.849,789,5.025,790,3.069,791,3.069,792,2.849,793,2.849,794,3.069,795,3.069,796,4.532,797,4.149,798,2.285,799,2.768,800,3.069,801,2.49,802,2.849,803,3.069,804,3.069,805,3.069,806,6.338,807,2.583,808,2.637,809,2.849,810,5.025,811,2.849,812,2.698,813,3.069,814,2.849,815,2.849,816,2.768,817,2.031,818,2.828,819,2.637,820,5.014,821,3.529,822,0.987,823,1.62,824,1.969,825,2.412,826,2.208,827,2.698,828,2.185,829,2.849,830,4.453,831,2.637,960,1.14,967,2.929,972,1.464,1144,1.898,1334,2.092,1471,1.706,1942,3.326,2120,2.412,2300,3.697,2407,2.534,2599,4.51,2666,2.285,2803,2.534,4959,2.163,5763,2.637,8107,2.698,8168,3.069,8169,2.947,8170,3.233,8171,2.849]],["t/3448",[0,1.37,3,3.33,4,0.982,6,0.855,7,3.787,19,1.283,39,2.009,42,1.967,45,1.877,76,0.965,85,1.401,99,1.41,108,3.944,109,1.309,113,3.483,115,0.892,117,2.068,122,1.109,131,2.642,135,1.387,136,1.445,193,2.598,218,2.85,315,3.155,316,1.079,317,1.186,320,1.243,333,2.742,340,2.378,357,3.108,390,3.218,413,4.717,448,1.356,450,4.461,452,1.23,570,1.264,602,1.099,606,1.951,619,2.511,661,2.678,681,5.374,683,2.278,716,1.554,718,1.41,735,2.187,754,3.946,765,2.372,766,4.173,767,2.723,821,4.039,852,1.369,900,2.957,956,1.174,960,2.998,972,4.369,974,1.22,1003,1.76,1038,4.037,1043,2.521,1050,2.049,1096,2.584,1115,1.769,1128,1.348,1144,2.383,1153,1.678,1157,1.015,1291,1.75,1471,2.756,1561,2.803,1630,3.607,1889,1.78,1942,3.807,1986,3.365,2168,5.857,2250,2.409,2291,4.26,2300,4.642,2316,1.858,2407,4.094,2485,4.471,2599,6.235,2666,3.692,2803,4.094,2969,2.493,3886,4.094,3887,3.092,3888,2.031,4082,2.541,4258,5.223,5739,2.493,6087,6.646,6799,2.493,7224,2.372,8107,4.359,8168,4.958,8169,4.761,8170,5.223,8171,2.803,8172,3.18,8173,4.26,8174,5.625,8175,5.625,8176,3.425,8177,3.18,8178,3.425,8179,3.425]],["t/3450",[0,0.94,3,3.078,4,3.155,6,2.745,20,1.759,41,1.815,42,3.023,122,2.739,131,1.762,215,4.502,259,5.212,413,3.448,426,3.013,450,4.124,533,5.061,614,3.888,681,5.486,683,3.426,712,4.576,732,4.934,766,6.275,771,4.37,900,4.447,963,5.95,1040,3.868,1124,3.183,1144,2.817,1713,3.717,1873,3.92,1874,3.99,2318,7.457,8173,8.331,8180,8.46,8181,9.31,8182,8.46,8183,8.46]],["t/3452",[0,1.247,4,1.8,6,0.559,20,0.465,22,0.588,26,1.644,27,2.495,28,0.632,30,0.541,33,0.775,35,1.402,39,0.799,41,0.48,42,0.615,60,1.19,66,1.078,73,0.569,82,1.715,91,0.845,98,0.81,99,0.922,108,1.065,113,1.647,115,1.02,131,1.088,135,0.906,146,2.205,148,2.371,161,1.177,174,0.785,186,1.257,193,2.588,196,0.941,218,3.459,227,0.81,228,0.826,229,1.076,230,0.686,231,0.806,241,0.999,242,0.824,252,1.042,267,1.102,299,3.426,304,0.733,307,1.603,308,0.941,325,4.607,328,1.143,329,1.091,333,3.825,342,0.656,350,1.603,359,1.037,381,0.991,390,2.206,409,2.062,413,2.131,426,0.797,448,1.552,497,1.435,506,4.987,520,1.206,533,1.339,598,1.239,616,1.124,617,1.096,619,2.333,623,1.364,664,0.934,681,4.625,683,0.906,688,1.749,712,1.63,714,1.328,726,1.894,727,1.23,728,1.832,730,1.894,732,1.306,736,1.734,740,1.306,741,0.995,742,1.405,754,1.69,758,1.316,759,4.708,762,1.832,767,4.987,768,2.25,770,2.25,771,2.025,773,2.11,774,2.184,776,1.528,777,1.377,779,1.832,780,1.832,781,1.832,782,1.66,783,1.832,784,3.207,785,2.968,786,1.832,787,1.832,788,1.832,792,1.832,793,1.832,798,1.469,801,1.601,802,1.832,806,4.752,807,1.66,808,1.695,809,1.832,811,1.832,812,1.734,814,1.832,815,1.832,816,1.779,818,1.601,819,2.968,820,1.55,822,1.111,823,1.042,824,1.266,825,1.55,826,1.42,827,1.734,828,1.405,829,1.832,830,3.339,831,1.695,960,1.712,967,1.15,1036,3.358,1040,1.838,1047,0.842,1053,2.279,1077,1.061,1115,2.025,1143,2.675,1144,2.375,1346,1.435,1383,1.316,1397,1.894,1471,1.097,1548,1.239,1553,1.295,1606,1.163,1714,1.66,1728,4.504,1738,3.39,1744,2.968,1777,1.66,1873,1.037,1874,1.056,1889,2.036,1923,1.351,1942,2.401,2078,1.488,2105,1.601,2194,1.894,2326,1.894,2416,1.55,2490,2.757,2527,1.191,2599,2.112,2834,2.2,2895,1.734,2909,1.435,2962,4.277,3104,1.601,3230,2.485,3351,1.66,3439,1.973,3449,1.894,3485,1.55,3622,1.779,3777,1.364,4177,1.55,4313,2.714,4919,1.734,5019,1.629,5063,1.574,5600,1.66,5726,1.528,5737,1.601,5880,1.973,5881,1.973,5882,1.973,6416,1.734,6805,1.894,7679,1.66,8086,1.779,8103,4.862,8106,3.207,8107,3.037,8132,1.832,8153,1.973,8154,1.695,8155,2.968,8156,1.779,8157,1.832,8171,8.029,8173,1.695,8184,6.916,8185,2.079,8186,2.079,8187,2.079,8188,2.079,8189,2.079,8190,2.079,8191,2.079,8192,3.639,8193,2.079,8194,2.079,8195,2.079,8196,2.079,8197,2.079,8198,1.734,8199,2.079,8200,7.847,8201,3.639,8202,2.079,8203,2.079,8204,1.832,8205,1.973,8206,2.079,8207,2.079,8208,1.973,8209,2.079,8210,2.079,8211,1.832,8212,2.079,8213,2.079,8214,2.079,8215,2.079,8216,2.079,8217,1.973,8218,2.079,8219,2.079,8220,2.079,8221,2.079,8222,2.079,8223,2.079,8224,2.079,8225,2.079,8226,2.079,8227,5.826,8228,2.079,8229,2.079,8230,2.079,8231,2.079,8232,2.079,8233,2.079,8234,2.079,8235,2.079,8236,2.079]],["t/3454",[0,1.197,4,3.451,20,1.702,41,1.756,42,2.25,69,2.687,85,3.348,109,1.905,242,3.012,309,3.125,413,4.389,426,2.916,448,4.264,450,5.249,526,4.595,570,3.02,617,2.289,699,3.583,712,4.479,716,3.714,719,6.2,720,8.343,889,4.5,900,5.661,913,4.03,960,3.527,971,5.441,972,3.441,974,3.835,1040,3.786,1873,3.793,1874,3.861,3015,7.067,8130,8.558,8173,6.2]],["t/3456",[0,0.719,4,2.63,6,2.288,20,1.345,42,1.778,66,1.335,69,2.124,82,2.832,98,2.342,109,1.506,113,2.72,131,2.644,187,3.402,244,3.637,274,4.482,322,3.597,355,4.177,381,2.865,409,1.871,413,2.638,426,2.305,428,6.55,430,2.744,467,3.066,602,2.076,656,3.17,681,4.197,703,3.109,818,2.809,821,3.154,1036,2.769,1038,2.854,1040,3.744,1043,4.109,1334,2.374,1336,7.84,1471,3.17,1634,2.877,1794,7.502,1873,2.998,1874,3.052,1889,3.362,1939,5.44,2235,4.325,2529,4.482,2564,4.552,3166,4.627,3230,6.753,5970,5.014,8171,7.502,8173,4.901,8184,5.704,8237,6.009,8238,9.169,8239,9.169,8240,5.295]],["t/3458",[0,0.925,19,1.77,22,2.188,27,2.912,28,2.35,30,2.013,33,2.883,38,1.691,39,2.973,42,2.288,45,3.296,66,2.502,69,1.858,72,1.917,76,1.595,109,1.317,113,2.38,115,1.474,125,2.256,211,2.72,241,2.527,333,5.307,342,2.441,350,3.405,355,3.266,486,2.773,616,3.69,681,5.399,682,3.811,683,2.292,688,2.527,732,5.759,841,2.677,877,2.071,967,4.276,1040,2.927,1053,3.63,1124,2.13,1157,1.677,1759,3.357,1803,4.019,1983,7.045,2869,6.175,2909,5.338,3015,5.464,3233,4.791,3485,5.766,5019,6.059,8103,9.717,8130,4.5,8132,8.079,8154,6.305,8155,9.497,8156,6.617,8157,6.812,8158,7.848]],["t/3460",[0,1.069,19,1.724,49,4.057,53,3.398,72,3.256,76,2.709,110,3.808,178,7.283,315,2.622,320,4.331,356,2.632,357,2.583,464,4.556,595,5.055,596,6.764,601,4.344,658,3.305,673,5.608,683,3.894,875,4.734,2210,5.25,4106,6.764,4934,8.138,4959,7.413,5931,8.138]],["t/3462",[38,3.417,683,4.633,1629,5.147,2743,6.376,8241,11.441,8242,11.441]],["t/3464",[0,1.402,3,3.996,4,2.862,18,2.44,20,1.754,41,1.237,56,2.897,57,2.944,60,2.562,85,2.357,103,3.875,115,1.501,135,3.416,154,5.047,174,2.958,225,2.885,252,2.682,296,3.989,355,4.308,356,2.731,388,5.042,392,3.859,394,2.593,409,1.666,440,5.606,448,3.951,450,2.81,452,4.383,453,4.133,454,5.758,455,6.257,474,3.106,514,3.259,515,5.934,516,6.536,518,4.034,549,5.246,683,2.334,735,2.241,817,3.362,879,4.383,1038,4.401,1163,6.164,1164,6.077,1689,4.195,2586,3.881,4136,4.195,4667,6.389,4959,3.58,4998,6.705,4999,6.903,6062,6.903,6063,6.903,6064,5.081,6065,5.352,6066,5.352]],["t/3466",[0,1.028,4,1.639,19,1.3,20,1.922,22,2.203,33,1.979,35,1.532,38,2.762,41,2.248,42,0.959,66,2.048,69,2.381,73,0.888,82,2.501,85,1.428,88,1.291,113,2.402,122,1.13,131,0.727,134,6.729,187,1.836,196,2.402,197,1.517,218,1.011,231,1.257,244,2.493,310,1.277,333,2.785,338,0.909,341,3.846,349,0.864,381,1.546,413,1.423,426,1.244,459,1.919,614,2.962,621,1.611,683,4.584,684,1.847,692,1.086,712,3.487,718,1.438,732,2.036,742,3.586,771,6.664,818,3.21,822,2.62,963,5.102,967,1.793,992,4.433,1030,2.071,1036,2.445,1040,2.009,1047,2.15,1077,1.654,1128,1.374,1163,3.208,1164,3.162,1314,3.514,1334,2.096,1713,4.362,1728,2.733,1741,3.162,1873,1.618,1874,1.647,1906,1.946,1960,1.639,2262,1.528,2503,2.127,2733,3.185,2734,6.645,2743,5.841,2834,5.573,3015,2.291,3252,1.946,3294,2.191,3886,2.541,5019,2.541,5191,7.389,5543,4.086,5581,4.76,5666,7.891,8103,7.692,8113,6.735,8115,2.857,8130,2.775,8131,3.242,8154,2.644,8156,4.542,8157,2.857,8181,6.139,8243,9.255,8244,3.491,8245,7.253,8246,3.491,8247,3.491,8248,3.491]],["t/3468",[19,1.362,26,3.221,27,2.657,60,2.307,76,2.141,122,2.46,127,3.616,137,4.97,138,6.184,146,3.205,150,3.583,225,3.964,320,3.718,333,3.703,342,3.004,357,2.752,683,5.524,798,4.986,877,2.78,1047,2.859,1144,3.411,1228,5.631,1610,4.899,1628,5.343,1629,3.418,1630,6.568,1631,7.422,1938,4.628,1942,3.49,2460,4.767,3015,6.723,3711,4.927,4111,8.288,7224,7.095,7251,8.382,8249,4.672]],["t/3470",[0,0.845,4,2.179,37,2.644,42,2.088,84,3.97,98,2.749,110,3.008,136,3.205,183,3.97,184,3.703,218,2.201,230,2.327,231,2.735,315,2.072,349,1.879,356,2.08,383,3.505,413,3.097,532,4.018,563,4.296,570,2.803,591,3.818,616,2.938,617,2.864,655,8.382,683,4.149,703,3.65,852,3.037,913,3.74,971,3.839,972,3.193,1006,4.018,1016,6.038,1040,3.602,1128,2.989,1154,4.068,1291,3.881,1527,4.586,1606,3.947,1889,3.947,1919,3.139,1942,3.49,2301,5.753,2869,5.635,2970,8.143,3015,4.986,3711,6.644,3902,5.432,5019,5.529,5201,5.886,8154,5.753,8155,5.753,8158,6.038,8250,7.597]],["t/3472",[0,1.111,155,4.278,225,3.418,336,4.714,338,2.603,342,2.931,452,4.388,467,4.736,514,3.862,542,7.031,672,3.97,683,4.95,694,4.803,696,4.803,832,4.217,833,4.247,1156,5.791,1157,3.621]],["t/3474",[0,1.227,4,3.721,20,2.296,218,3.198,409,3.192,412,5.95,426,3.933,1873,5.116,1874,5.208]],["t/3476",[8,5.3,60,2.715,73,2.274,98,3.235,109,2.652,228,3.297,307,3.655,317,3.946,349,2.211,401,4.054,563,7.096,602,3.656,614,4.028,658,3.917,696,4.294,703,4.294,882,3.825,1219,6.769,1572,5.213,1774,8.454,1829,5.668,2130,6.925,2586,6.017,3086,4.516,5061,6.925,5457,7.878,7464,8.299,8251,8.937,8252,8.299]],["t/3478",[103,4.901,116,4.265,401,5.767,585,7.016,692,3.318,1774,7.914,5307,7.505,6197,9.405,7503,9.907,8252,9.907,8253,10.669]],["t/3481",[20,2.181,33,3.633,39,3.747,42,3.459,45,3.502,46,6.886,66,2.164,91,3.96,317,3.633,320,3.808,394,4.721,939,4.646,1517,4.994,1520,5.39,3086,5.302]],["t/3483",[0,1.523,22,2.25,24,5.901,25,3.35,28,1.265,30,1.083,41,2.483,60,4.162,61,5.875,66,1.993,67,2.094,73,1.14,137,2.173,138,2.704,143,2.263,185,1.991,193,1.626,195,2.228,196,1.883,197,1.946,227,4.189,260,6.957,270,1.826,304,3.791,317,2.414,320,1.626,328,2.288,329,4.173,332,3.392,349,1.108,350,1.832,352,2.071,359,2.076,361,1.844,518,6.219,602,2.747,735,1.741,739,2.514,752,5.76,1058,2.194,1123,3.523,1778,3.016,1869,2.479,1920,4.738,2491,3.26,3086,2.263,3572,3.791,4350,5.764,4445,5.929,5098,6.23,5512,3.016,8254,5.168,8255,5.265,8256,5.542,8257,2.94,8258,4.159,8259,4.159,8260,4.159,8261,4.159,8262,6.973,8263,7.245,8264,3.471,8265,4.159,8266,4.159,8267,4.159]],["t/3486",[0,1.46,41,2.818,60,3.99,61,5.934,260,8.242,304,4.302,317,4.548,329,5.699,346,3.174,518,6.281,1043,2.96,1096,3.035,1778,4.448,1920,5.149,3572,5.591,4350,6.264,4445,6.444,5063,4.647,5098,6.771,5512,8.843,6126,5.591,8264,5.119,8265,6.134,8266,6.134,8267,6.134,8268,6.134]],["t/3488",[0,1.42,60,3.268,61,4.861,218,3.701,304,3.524,352,2.602,388,5.437,518,5.146,1532,9.991,1884,5.527,8269,9.991]],["t/3490",[0,1.249,60,3.413,61,5.077,304,3.681,329,5.478,518,5.374,5063,7.904,8268,10.434]],["t/3492",[0,1.41,35,2.153,60,3.229,61,4.803,244,3.545,304,3.482,310,3.89,329,5.182,352,2.571,409,3.446,518,5.084,549,4.222,773,3.241,818,4.302,822,3.843,961,6.796,1029,5.957,1030,4.763,1036,3.437,1092,5.562,1129,4.414,1926,6.057,1943,5.407,2578,5.844,8270,10.632]],["t/3494",[0,1.273,35,2.414,60,3.477,61,5.172,147,8.072,244,3.405,304,3.75,310,4.189,329,5.581,352,2.769,366,6.167,518,5.475,801,9.002,1029,6.677,1030,5.338,1036,3.852,1092,6.234,1099,5.25,1108,5.053,8271,11.449]],["t/3496",[0,1.545,3,2.623,35,1.933,60,3.687,61,5.484,85,2.948,244,3.356,304,3.695,310,3.617,352,2.391,383,3.325,409,3.509,413,2.938,428,5.589,518,5.805,741,4.394,759,4.58,818,3.719,822,3.44,960,3.237,1029,5.346,1030,4.275,1036,4.23,1047,2.712,1092,4.992,1115,3.724,1629,3.243,1942,3.311,3258,4.674,3344,4.621,8272,10.475,8273,6.693]],["t/3498",[0,1.103,3,2.638,4,2.846,20,1.507,42,1.992,46,4.757,60,3.437,61,3.275,62,3.905,81,5.903,113,3.047,131,2.356,193,2.631,244,2.952,262,4.539,296,2.898,304,3.25,307,4.059,317,2.51,352,2.4,388,3.663,392,3.316,413,2.955,426,2.582,518,3.466,521,7.614,619,3.235,718,2.985,745,2.955,856,5.021,1040,3.489,1144,2.414,1873,3.359,1874,3.419,3230,4.597,3344,4.648,4177,5.021,7338,5.276,8249,4.459,8274,5.183,8275,5.762,8276,8.12,8277,5.762,8278,5.931,8279,5.762,8280,5.931,8281,9.214]],["t/3500",[0,1.437,35,1.429,60,3.435,61,5.711,99,2.194,115,1.387,125,2.123,131,1.109,174,1.868,193,4.462,244,3.144,262,5.174,263,4.72,304,3.704,307,4.626,310,1.949,317,2.756,325,3.737,327,6.414,409,3.055,425,2.11,430,1.595,518,5.409,614,1.883,658,1.831,688,2.378,745,5.013,818,3.238,822,2.995,841,1.713,1030,3.16,1036,2.28,1047,2.995,1108,5.348,1144,2.65,1228,2.928,1518,4.352,1750,3.637,1846,5.358,1847,4.035,1956,6.503,2316,2.89,2358,5.792,3196,2.853,8282,10.502,8283,8.189,8284,7.959,8285,7.959,8286,5.328]],["t/3502",[0,1.238,60,3.383,61,5.032,193,4.042,304,3.648,329,5.43,518,5.327,1144,3.709,8287,9.427]],["t/3504",[0,1.238,60,3.383,61,5.032,304,3.648,329,5.43,518,5.327,1846,7.499,1847,8.436,8288,11.139]],["t/3506",[0,1.331,27,2.143,60,3.432,61,5.105,73,1.559,88,1.384,110,2.426,122,1.984,131,2.151,155,2.622,244,2.623,252,2.851,262,4.726,294,2.651,304,3.701,307,4.225,320,3.2,343,2.827,349,2.181,352,2.133,357,1.646,429,2.903,452,3.166,475,4.182,518,5.403,563,3.464,658,2.106,694,2.944,696,2.944,699,3.859,745,4.211,877,2.242,1047,2.305,1077,2.903,1144,4.152,1156,2.903,1157,2.612,1518,2.523,1629,2.757,1846,4.125,1939,6.116,1951,3.844,2235,2.89,2263,4.456,2264,4.386,2378,3.885,2518,4.459,3196,3.281,6225,8.743,6226,5.185,6246,5.689,6247,5.689,8289,11.299,8290,5.4,8291,5.689]],["t/3508",[0,1.29,6,2.295,18,3.894,19,1.649,60,3.525,61,5.243,243,4.835,262,5.309,304,3.801,307,4.747,340,3.055,518,5.55,615,5.287,741,4.088,745,4.731,759,4.261,956,3.153,960,3.012,1047,3.461,1088,5.771,2765,5.28,8292,11.606,8293,9.197]],["t/3510",[0,1.061,6,2.381,35,2.559,60,2.899,61,4.311,244,2.839,266,6.189,304,3.126,310,3.492,316,3.007,366,4.675,452,3.426,518,4.564,900,5.017,1030,5.66,1036,4.084,1122,5.246,1157,2.827,2005,7.586,4059,10.28,4094,5.709,7169,7.395,8294,8.412,8295,7.586,8296,8.412,8297,8.412]],["t/3512",[0,1.138,6,2.554,60,3.11,61,4.625,304,3.353,310,3.746,386,4.588,518,4.896,900,5.382,1047,3.852,1122,7.334,1787,7.594,4094,6.125,4103,7.933,5636,9.506,8249,6.297,8298,10.238]],["t/3514",[0,1.186,6,2.662,60,3.241,61,4.82,304,3.494,310,3.904,518,5.102,900,5.609,1122,5.865,4059,10.105,4094,6.383,8294,9.405,8295,8.481]],["t/3516",[0,1.186,6,2.662,60,3.241,61,4.82,304,3.494,310,3.904,331,8.245,518,5.102,900,5.609,1122,5.865,4094,6.383,8299,9.907,8300,6.274]],["t/3518",[0,1.176,6,2.64,60,3.214,61,4.78,304,3.465,310,3.871,331,8.204,518,5.06,900,5.562,1122,5.816,1383,6.222,4094,6.33,5759,8.013,8300,6.222]],["t/3520",[0,1.337,35,2.61,41,2.58,59,5.602,60,3.652,61,5.432,62,2.773,63,6.212,162,5.861,219,3.58,228,2.6,250,7.61,304,3.938,308,2.962,317,3.86,331,4.57,349,1.743,357,1.893,430,3.905,464,3.339,518,5.331,664,2.942,735,3.783,745,3.967,821,3.435,841,2.266,1034,4.015,1100,4.334,1231,4.81,1336,4.518,1778,4.745,1846,4.745,2110,5.039,2211,4.254,2263,3.561,2264,3.505,3086,3.561,3747,5.227,5233,5.227,5253,6.212,8291,6.544,8300,5.724,8301,6.544]],["t/3522",[0,1.34,4,2.963,6,2.578,20,1.474,41,2.217,44,1.672,60,3.139,61,4.416,62,1.33,73,1.415,88,1.257,92,3.897,109,1.294,110,2.203,115,1.449,116,2.835,183,1.31,193,2.019,215,2.961,218,2.381,238,2.143,242,2.047,246,5.636,249,4.552,250,5.61,252,1.573,254,6.581,263,3.299,266,2.192,274,5.693,277,7.113,301,2.192,304,3.384,307,1.382,314,4.654,325,2.612,326,7.665,327,6.957,328,5.278,331,6.339,338,0.88,352,1.988,361,1.392,366,2.725,413,4.695,430,1.012,448,2.203,459,1.858,497,2.167,518,4.674,602,1.084,617,0.945,619,2.483,653,2.891,676,3.038,752,1.756,933,3.913,934,4.311,1047,2.093,1128,1.33,1133,6.267,1269,2.341,1319,1.546,1336,7.171,1534,2.04,1708,1.911,1919,2.299,2303,2.686,3039,2.417,3166,2.417,5030,3.138,5444,2.979,5970,5.494,8240,4.552,8264,7.573,8287,8.745,8297,2.979,8302,9.594,8303,7.245,8304,2.979,8305,3.38,8306,3.38,8307,3.38,8308,3.38,8309,3.38,8310,3.38,8311,3.38,8312,3.38,8313,3.138,8314,4.708,8315,2.979,8316,2.979,8317,2.979]],["t/3524",[0,1.12,38,3.009,41,2.162,42,2.769,51,5.876,60,3.06,61,4.552,76,2.839,109,2.857,277,7.332,304,3.3,331,6.534,338,2.623,459,5.538,518,4.818,1047,3.791,2483,6.258,2848,5.829,3469,6.978,8318,10.075]],["t/3526",[0,1.494,41,2.233,60,3.161,61,4.701,131,2.167,215,5.538,277,7.573,304,3.408,331,6.749,518,4.976,549,5.471,824,7.082,1115,5.376,1778,7.006]],["t/3528",[0,1.308,1,5.44,3,4.282,4,2.696,6,2.346,41,2.017,60,2.856,61,4.247,71,5.9,72,3.184,131,1.958,304,3.079,317,3.255,331,6.097,447,5.728,518,4.496,897,6.097,906,4.475,1052,5.728,1386,4.885,1778,6.33,1865,7.473,2236,5.783,4715,5.625,5496,7.82,8319,9.402,8320,8.73]],["t/3530",[0,1.392,4,2.985,6,2.596,41,2.233,60,3.161,61,4.701,218,3.014,304,3.408,331,6.749,388,5.258,390,3.659,518,4.976,1778,7.006,8321,9.173,8322,9.173,8323,9.663]],["t/3532",[0,1.314,4,3.391,6,2.363,41,2.032,47,3.161,60,2.877,61,4.279,218,2.744,230,2.902,304,3.102,331,6.143,388,4.786,518,4.53,619,4.228,658,3.255,727,6.499,852,3.787,972,3.982,1047,3.564,1778,6.377,4328,5.884,7338,6.894,8324,8.349,8325,10.421,8326,8.349]],["t/3535",[0,1.455,60,3.977,61,5.915,66,1.47,67,3.331,227,4.738,317,4.533,329,5.467,518,6.261,1920,6.207,4350,7.551,4445,7.767,5098,8.162,5512,8.815,8254,4.302,8255,4.383,8256,5.665,8257,4.677,8258,6.617,8259,6.617,8260,6.617,8261,6.617,8300,7.699]],["t/3537",[0,1.053,35,2.54,60,2.877,61,4.279,66,1.954,67,4.428,227,3.428,518,4.53,549,4.98,773,3.823,818,3.622,822,3.653,961,8.016,1129,5.207,1334,3.475,1926,6.735,1943,6.377,2578,6.894,3192,6.894,3355,7.026,8254,5.718,8255,5.826,8256,7.529,8300,5.57,8327,9.472]],["t/3539",[0,1.312,6,2.718,19,1.953,35,3.164,60,3.309,61,4.921,66,1.392,67,3.154,116,2.697,227,3.942,261,8.151,315,1.84,316,2.126,317,3.27,349,1.669,352,1.632,356,1.847,366,4.626,518,5.209,602,2.165,818,3.615,822,3.344,1047,3.553,1101,4.824,1102,4.673,1123,3.409,1334,3.997,1581,3.305,1609,6.575,1629,4.248,1728,3.226,1741,3.734,2798,5.11,3086,3.409,4284,5.363,5921,6.265,8254,4.073,8255,4.15,8256,5.363,8300,6.406,8328,6.265,8329,9.442,8330,9.442]],["t/3541",[0,1.471,3,2.285,35,3.241,60,3.819,61,5.68,66,1.295,67,2.935,85,2.568,131,1.307,227,4.375,383,2.897,409,1.815,413,2.559,428,3.55,518,6.012,773,2.534,818,3.965,822,3.818,960,2.056,1115,3.243,1334,4.192,1926,5.966,1942,2.884,2851,4.072,3344,4.026,4284,4.991,8254,3.79,8255,3.862,8256,9.608,8273,5.83,8300,7.108,8331,12.943,8332,8.974]],["t/3543",[0,0.705,3,2.308,4,2.592,20,1.318,32,3.354,42,1.743,46,4.162,60,2.745,62,3.557,66,1.864,67,4.225,69,2.082,81,5.568,113,3.799,131,2.193,193,2.301,227,3.271,244,2.688,262,4.134,296,2.535,307,3.697,317,2.196,339,3.122,352,2.776,388,3.204,392,2.901,413,2.585,426,2.259,521,7.298,619,2.83,718,2.611,745,2.585,856,4.392,1040,3.178,1122,3.486,1144,2.111,1710,4.27,1805,7.395,1873,2.938,1874,2.991,2092,6.357,3230,5.732,3344,4.066,4177,4.392,7338,4.615,8249,6.477,8254,5.456,8255,5.559,8256,7.184,8274,4.534,8275,5.041,8276,7.395,8277,5.041,8278,5.189,8279,5.041,8280,5.189,8300,5.315,8333,7.003,8334,6.341,8335,6.341]],["t/3545",[0,1.329,60,3.632,61,5.974,66,1.667,67,3.778,193,3.874,227,4.327,327,7.188,329,6.622,518,5.717,619,3.607,745,5.537,1108,5.993,2519,6.262,5117,7.666,8254,4.878,8255,4.971,8257,7.847,8283,8.273,8300,7.031]],["t/3547",[0,1.124,19,1.057,27,2.063,32,3.12,38,1.762,60,2.606,61,3.876,66,1.217,67,2.757,69,3.319,73,2.182,88,2.284,91,2.226,110,2.336,131,2.312,155,2.524,227,3.105,241,2.633,242,2.17,244,1.754,252,2.745,294,2.552,316,2.703,320,3.113,329,5.411,349,2.122,357,1.585,452,2.118,518,4.102,563,3.335,658,2.027,694,2.834,696,2.834,699,3.755,745,4.525,877,2.158,939,2.612,1036,3.671,1047,2.219,1061,3.876,1144,4.333,1156,2.795,1157,1.747,1518,2.429,1629,2.654,1939,6.287,1951,7.723,2235,4.046,2378,3.74,3196,3.159,3282,3.44,5117,5.5,5570,6.363,5958,4.688,6225,7.26,8254,3.56,8255,3.628,8257,5.63,8290,5.199,8300,5.045,8336,5.898]],["t/3549",[0,1.239,6,2.154,35,2.315,60,3.386,61,5.036,66,1.781,67,4.035,82,4.879,131,1.798,227,4.034,310,3.159,329,6.359,355,3.387,409,2.496,430,2.584,518,5.33,615,3.932,745,4.544,818,2.645,822,2.447,956,2.959,1088,6.994,1334,3.167,3062,6.689,3083,6.689,8254,5.211,8255,5.31,8257,7.315,8300,6.555]],["t/3551",[0,1.008,6,1.59,19,1.626,32,4.797,33,3.141,35,1.709,38,2.709,60,1.936,61,2.879,66,1.315,67,2.979,73,1.621,113,3.813,118,3.337,227,2.307,230,2.779,244,1.896,266,4.133,315,2.474,316,3.328,317,2.207,329,4.421,340,3.013,349,1.576,352,2.194,366,3.122,452,2.288,518,3.048,602,2.045,724,6.771,772,4.583,900,6.835,1028,3.748,1030,3.78,1036,2.728,1122,4.986,1123,3.22,1157,1.888,1629,2.868,1869,3.527,2005,5.066,2092,7.428,2590,5.092,3086,3.22,3282,3.717,4059,8.394,4094,3.813,7169,4.938,8249,6.495,8254,3.847,8255,3.92,8257,4.183,8295,8.394,8296,5.618,8297,5.618,8300,3.748,8333,8.182,8337,6.373,8338,6.373]],["t/3553",[0,1.082,6,1.758,19,1.745,32,5.148,33,3.37,38,2.907,60,2.141,61,3.184,66,1.454,67,3.294,73,1.793,113,4.091,118,3.581,227,2.551,230,2.982,315,2.654,316,3.067,317,2.44,329,4.744,340,3.233,349,1.743,352,2.354,518,3.37,602,2.261,772,4.918,900,7.03,1028,4.144,1122,6.936,1123,3.561,1629,3.171,1869,3.9,2092,7.842,2590,5.463,3086,3.561,3282,4.11,4094,4.216,8249,6.857,8254,4.254,8255,4.334,8257,4.625,8300,4.144,8333,8.639,8339,7.047,8340,7.047]],["t/3555",[0,1.062,6,1.711,19,1.712,32,5.051,33,3.307,38,2.852,60,2.083,61,3.098,66,1.414,67,3.205,73,1.744,113,4.014,118,3.513,227,2.482,230,2.925,315,2.604,316,3.009,317,2.374,329,4.655,340,3.172,349,1.696,352,2.31,518,3.279,602,2.2,724,7.045,772,4.825,900,6.978,1028,4.032,1122,5.249,1123,3.464,1629,3.085,1869,3.795,2092,7.728,2590,5.36,3086,3.464,3282,3.999,4059,7.59,4094,4.102,8249,6.758,8254,4.139,8255,4.217,8257,4.5,8295,8.734,8300,4.032,8333,8.514,8341,6.856,8342,6.856]],["t/3557",[0,1.062,6,1.711,19,1.712,32,5.051,33,3.307,38,2.852,60,2.083,61,3.098,66,1.414,67,3.205,73,1.744,113,4.014,118,3.513,227,2.482,230,2.925,260,6.895,315,2.604,316,3.009,317,2.374,329,4.655,331,6.193,340,3.172,349,1.696,352,2.31,518,3.279,602,2.2,772,4.825,900,6.978,1028,4.032,1122,5.249,1123,3.464,1629,3.085,1869,3.795,2092,7.728,2590,5.36,3086,3.464,3282,3.999,4094,4.102,8249,6.758,8254,4.139,8255,4.217,8257,4.5,8300,6.988,8333,8.514,8343,6.856,8344,6.856]],["t/3559",[0,1.042,6,1.666,19,1.68,32,4.957,33,3.245,35,2.904,38,2.799,60,2.028,61,3.016,66,1.377,67,3.12,73,1.698,113,3.94,118,3.448,227,2.416,230,2.871,315,2.556,316,2.954,317,2.312,329,4.569,331,6.078,340,3.113,349,1.651,352,2.267,518,3.192,602,2.142,758,6.369,772,4.736,900,6.926,1028,3.926,1122,5.152,1123,3.373,1383,5.512,1629,3.004,1869,3.695,2092,7.618,2590,5.261,3086,3.373,3282,3.894,4094,3.994,8249,6.662,8254,4.03,8255,4.106,8257,4.381,8300,6.907,8333,8.392,8345,6.676,8346,6.676]],["t/3561",[0,1.408,35,2.63,60,3.67,61,5.458,66,1.47,67,3.331,162,5.156,219,3.621,227,4.372,228,2.629,250,6.695,308,2.996,317,3.883,329,6.661,349,1.763,357,1.915,430,3.792,464,3.377,518,5.777,664,2.975,735,3.812,745,2.905,821,3.474,841,2.292,1100,4.383,1231,4.865,2110,5.096,2211,4.302,2263,3.601,2264,3.545,3086,3.601,3747,5.286,8254,4.302,8255,4.383,8257,7.929,8300,5.768]],["t/3563",[0,1.357,4,2.861,6,2.001,20,1.667,60,3.226,61,4.798,66,1.329,67,3.011,73,1.638,88,1.455,92,3.834,109,1.499,110,2.55,115,1.055,116,3.206,153,1.74,215,3.427,218,2.647,227,3.844,231,1.458,239,3.004,242,2.37,254,5.399,263,2.402,274,7.356,277,7.73,301,2.626,314,2.658,316,1.276,317,1.402,325,1.901,326,8.574,327,7.783,328,5.905,329,5.178,338,1.055,352,1.558,361,1.667,413,4.712,430,1.212,459,2.226,518,5.079,617,1.132,676,3.517,741,1.8,745,2.625,963,2.848,1047,2.424,1128,1.594,1133,5.141,1269,2.805,1336,7.141,1534,2.444,1708,2.29,2303,3.219,3039,2.896,5117,2.596,5382,8.23,5444,3.57,8240,5.27,8254,3.888,8255,3.961,8257,6.971,8300,6.246,8314,9.426,8347,9.261,8348,4.05,8349,3.76]],["t/3565",[0,1.433,60,2.877,61,4.279,66,1.954,67,4.428,131,1.972,215,5.041,227,3.428,277,6.894,315,2.583,329,4.617,518,4.53,549,4.98,745,4.819,824,6.685,1115,4.893,2799,8.604,5117,6.073,5184,8.795,6210,8.016,8254,5.718,8255,5.826,8257,6.217,8300,5.57]],["t/3567",[0,1.228,1,4.928,3,4.463,4,2.443,6,3.06,60,2.587,61,3.848,66,1.757,67,3.981,71,5.344,72,2.884,113,3.58,131,1.773,227,3.082,317,2.949,329,4.151,447,5.189,518,4.073,745,4.504,897,5.523,906,4.054,1052,5.189,1386,5.741,1865,6.769,2236,5.238,3230,5.401,4715,5.095,5117,5.46,5496,7.342,8254,5.141,8255,5.238,8257,5.589,8300,5.008,8320,7.908,8350,11.049]],["t/3569",[0,1.346,4,2.822,6,2.455,60,2.989,61,4.446,66,2.03,67,4.6,218,2.851,227,3.561,329,4.797,388,4.972,390,3.46,518,4.706,745,4.935,960,3.223,5117,6.309,8254,5.94,8255,6.052,8257,6.458,8300,5.787,8321,8.674,8323,9.137]],["t/3571",[0,1.273,4,3.283,6,2.246,47,3.004,60,2.734,61,4.066,66,1.857,67,4.207,218,2.607,227,3.258,230,2.757,329,4.388,388,4.548,518,4.304,619,4.017,658,3.093,727,6.293,745,4.667,852,3.598,972,3.784,1047,3.387,4328,5.591,5117,5.771,7338,6.551,8254,5.433,8255,5.536,8257,5.907,8300,5.293,8324,7.934,8325,10.092,8326,7.934]],["t/3573",[0,1.12,6,2.514,88,2.276,116,4.91,131,2.759,317,4.587,349,2.492,356,2.758,357,2.707,410,5.43,658,3.463,718,4.148,725,5.987,1581,4.936,3747,7.473]],["t/3575",[19,0.963,20,1.991,30,1.299,35,2.148,41,1.718,42,1.476,46,3.526,60,2.433,62,2.114,66,1.975,69,1.764,81,5.506,118,1.977,131,2.364,137,2.606,174,1.884,193,1.95,196,2.259,197,2.334,227,3.465,230,1.646,234,3.371,244,1.598,260,3.371,262,3.664,267,2.645,270,2.19,304,2.623,307,4.341,311,4.271,317,3.316,357,1.443,361,2.212,388,2.715,521,6.887,689,3.273,725,3.904,735,2.088,745,3.903,752,4.161,897,3.484,900,2.825,1040,3.367,1047,2.022,1096,2.468,1122,5.834,1123,2.715,1124,2.022,1144,1.789,1906,2.994,2325,3.371,2491,7.724,4177,3.721,4350,3.617,7338,3.91,8036,4.736,8089,4.989,8249,3.305,8264,4.163,8274,5.727,8275,4.271,8276,6.553,8277,4.271,8278,4.396,8279,4.271,8280,9.739,8281,4.989,8351,5.373,8352,4.736,8353,4.069,8354,5.373,8355,5.373,8356,5.373,8357,8.44,8358,7.06,8359,9.575,8360,4.736,8361,4.736]],["t/3577",[35,2.38,81,6.394,131,2.363,317,3.073,357,3.048,386,3.977,390,3.989,521,5.135,658,3.05,725,4.326,877,4.151,913,4.369,997,5.569,1040,3.989,1047,3.339,1096,4.077,1684,8.416,1787,6.583,1792,5.357,1906,4.946,2325,5.569,4103,8.791,5210,9.602,8249,6.978,8274,8.113]],["t/3579",[19,1.686,35,1.8,37,3.274,38,2.81,49,2.831,81,4.563,115,1.748,117,5.679,118,3.461,131,1.959,137,4.563,181,3.255,230,2.882,231,2.416,309,2.562,357,2.527,448,3.725,521,3.883,593,4.256,725,5.295,841,2.158,842,3.883,852,2.683,897,4.352,1040,3.308,1054,4.256,1082,4.256,1096,3.083,1128,2.641,1173,4.128,1606,6.44,1684,6.978,1796,5.916,2325,4.211,2331,5.916,2475,3.98,2840,6.174,4243,7.905,4349,6.617,5210,7.961,7644,5.68,8036,5.916,8249,6.681,8274,6.727,8357,8.292,8362,11.772,8363,6.711,8364,6.711,8365,6.711,8366,6.711,8367,6.711,8368,9.407]],["t/3581",[19,1.172,20,1.359,30,2.234,35,1.753,39,2.335,42,1.797,45,2.182,60,1.986,62,2.573,66,2.628,69,2.146,88,1.477,91,2.467,135,2.648,193,2.373,196,3.882,197,2.84,227,2.366,234,4.102,244,1.945,262,4.225,267,3.219,270,2.665,304,2.141,307,2.674,311,5.197,317,2.264,338,1.702,388,3.304,521,5.344,725,3.187,745,2.665,752,4.799,840,3.911,939,2.895,1096,3.003,1122,5.886,1144,2.177,1328,3.029,1713,2.872,3020,4.192,4079,3.644,4177,4.528,4306,4.402,7338,4.758,8249,8.055,8274,4.675,8275,5.197,8276,7.557,8277,5.197,8278,5.349,8279,5.197,8280,5.349,8358,8.141,8360,5.763,8361,5.763,8369,12.802,8370,9.944]],["t/3583",[19,1.043,20,1.209,30,2.054,35,2.69,39,2.077,42,1.598,45,1.941,60,1.767,62,2.289,66,2.609,67,2.719,69,2.788,73,1.48,88,1.314,91,2.195,99,2.395,131,1.211,185,2.586,193,2.111,196,3.57,197,3.689,227,3.63,234,3.65,244,1.73,262,3.885,267,2.864,270,3.462,304,2.781,307,3.473,311,4.624,338,1.515,346,2.795,349,1.439,388,2.939,521,4.914,602,2.725,617,1.626,727,3.197,745,2.371,752,4.413,840,3.48,914,3.511,939,2.576,1122,5.513,1144,1.937,1709,2.893,2491,7.3,4177,4.029,7338,4.233,8249,7.779,8274,4.159,8275,4.624,8276,6.949,8277,4.624,8278,4.76,8279,4.624,8280,4.76,8358,7.486,8360,5.127,8361,7.486,8369,12.038,8370,9.314,8371,11.729,8372,10.03]],["t/3585",[96,4.54,131,2.049,183,3.813,315,2.684,317,3.407,338,2.562,459,5.409,602,3.157,758,5.787,1136,5.649,1154,5.269,1295,6.309,1317,4.62,1534,5.94,2251,7.299,2372,7.822,2532,7.452,2570,8.328,2811,7.161,3086,4.972,3660,8.674,4239,7.625,8304,8.674,8373,9.84]],["t/3587",[0,0.922,20,1.724,35,2.224,42,2.279,46,5.443,76,2.337,81,4.023,131,2.521,211,3.985,212,4.334,244,3.23,308,3.486,356,2.27,357,2.917,521,4.798,617,2.319,725,4.043,877,3.034,960,4.208,1040,4.257,1096,3.81,1124,3.121,1579,5.204,2325,5.204,2372,6.592,2915,5.61,7949,7.701,8249,5.101,8274,7.765,8374,9.572,8375,9.572,8376,10.86,8377,10.86]],["t/3589",[0,0.681,8,3.633,19,1.098,20,1.833,35,2.365,42,1.684,46,4.021,60,2.678,80,3.26,81,2.972,83,2.367,118,2.254,131,2.353,211,2.944,230,1.877,244,3.361,252,2.851,320,2.223,349,1.515,356,1.677,357,2.775,428,3.464,452,2.2,474,3.302,521,3.545,570,2.26,617,1.713,725,2.986,852,2.449,924,3.665,960,3.383,1040,3.973,1047,2.305,1053,2.671,1096,2.814,1119,3.844,1124,2.305,1142,8.63,1157,1.815,1228,3.368,1579,3.844,2325,5.533,2372,4.87,2570,5.185,2915,5.337,2964,5.689,4904,5.185,6208,5.4,8249,3.768,8274,7.387,8374,9.106,8375,10.554,8378,8.818,8379,11.973,8380,6.127,8381,6.127,8382,6.127,8383,6.127,8384,6.127,8385,6.127,8386,6.127,8387,6.127,8388,6.127]],["t/3591",[42,2.603,46,6.217,81,4.595,131,2.684,244,4.015,346,4.551,521,5.48,725,4.617,1040,4.157,1096,4.351,1124,3.564,2372,7.529,2915,4.893,5478,8.349,8274,6.773,8374,8.349,8375,8.349,8389,11.823,8390,9.472,8391,12.889]],["t/3593",[0,1.12,4,3.522,20,2.095,42,2.769,45,4.099,46,6.612,47,3.363,320,3.656,381,5.438,388,5.091,394,4.533,426,3.589,725,4.911,1040,4.318,1873,4.668,1874,4.752,8392,9.355]],["t/3595",[0,0.632,4,2.395,20,1.736,41,1.22,60,3.691,62,2.238,71,3.568,88,1.887,109,1.323,110,2.252,115,2.578,162,4.391,164,2.873,189,6.472,230,3.033,231,2.047,304,1.862,307,2.326,308,4.885,309,4.165,317,4.348,329,2.772,331,3.688,343,2.623,349,1.406,352,1.375,390,2.937,425,2.252,426,2.025,428,4.723,450,2.772,452,2.042,468,3.24,572,3.606,576,3.402,602,1.824,606,3.24,617,2.335,619,4.418,664,5.072,683,2.303,686,2.99,752,2.955,821,2.772,875,4.874,900,2.99,990,2.99,1003,2.921,1005,4.812,1064,4.406,1068,2.28,1383,3.344,1582,4,1795,5.55,1856,3.568,1939,5.057,1944,4.812,2416,3.938,3910,3.646,4212,4.52,5759,8.262,8264,4.406,8300,3.344,8313,5.28,8352,5.012,8393,8.352,8394,9.192,8395,5.686,8396,5.686,8397,5.686]],["t/3597",[0,0.738,20,1.941,41,2.514,49,2.801,60,3.75,62,4.25,64,8.671,65,8.671,66,1.37,67,3.104,88,2.109,115,2.432,227,3.909,307,4.417,308,3.925,317,3.233,349,1.642,352,2.612,356,1.818,357,1.784,361,2.734,437,2.282,617,1.857,735,2.581,752,6.977,756,3.721,877,2.43,990,3.491,1016,5.278,1068,3.745,1123,3.355,1312,4.009,1579,4.167,1634,2.952,1778,8.313,1856,5.86,2961,7.235,3313,7.004,3717,5.029,8254,4.009,8255,4.084,8263,7.903,8300,3.905,8352,9.52]],["t/3599",[59,8.272,60,3.161,61,4.701,62,4.095,63,9.173,293,6.172,304,3.408,308,4.374,352,2.517,361,5.157,735,4.868,867,5.974,1629,4.682,8269,9.663,8398,10.406]],["t/3601",[0,0.728,3,1.101,12,1.141,19,0.909,26,3.09,27,3.607,37,1.053,42,0.831,59,5.208,60,3.83,61,2.96,62,2.579,73,0.769,76,0.852,81,1.467,82,4.981,98,1.095,122,0.979,146,1.276,150,1.426,174,1.061,193,1.098,218,2.222,225,3.361,230,0.926,238,1.918,260,1.898,261,1.985,263,1.794,310,1.107,317,1.047,320,1.841,333,2.473,356,0.828,357,0.813,376,6.133,378,5.575,381,2.246,409,2.674,412,1.63,619,2.264,683,2.054,724,4.919,749,2.341,774,2.827,798,3.329,830,6.538,896,2.095,1144,1.689,1167,3.416,1226,5.442,1228,1.662,1330,1.35,1361,4.791,1434,5.363,1508,1.46,1610,2.426,1628,2.127,1629,4.162,1630,3.253,1631,3.035,1632,6.34,1777,2.243,1906,3.652,1923,1.826,2078,2.01,2079,5.362,2116,2.201,2388,2.29,2390,1.898,2416,3.514,2490,2.127,2669,6.019,2715,9.312,2720,9.046,3015,1.985,3226,6.435,3350,3.822,3359,2.201,3552,7.829,3711,1.961,4111,2.163,4177,2.095,4368,2.56,4369,2.56,4501,2.343,4800,4.711,4959,1.879,5302,2.036,5512,2.036,5565,2.666,6775,2.404,8084,4.472,8085,2.666,8086,2.404,8095,2.56,8249,6.342,8357,2.666,8399,6.993,8400,6.553,8401,5.073,8402,3.024,8403,3.024,8404,2.808,8405,3.024]],["t/3603",[0,1.35,4,3.128,20,1.736,41,2.763,60,3.69,61,4.927,66,1.722,67,3.902,227,3.021,260,8.082,304,3.572,352,2.638,383,3.851,413,4.446,426,2.974,518,5.215,735,3.245,869,7.671,1123,4.218,1778,8.178,1873,3.868,1874,3.937,8254,5.039,8255,5.135,8263,7.065,8300,4.909,8406,10.127]],["t/3605",[0,1.12,60,3.06,155,4.312,225,3.445,317,3.489,336,4.752,338,2.623,342,2.954,452,4.409,467,4.774,672,4.002,694,4.841,696,4.841,832,4.25,833,4.281,1156,5.819,1157,3.638,8249,6.197]],["t/3608",[83,3.045,98,2.852,103,5.424,109,1.834,132,6.227,167,6.732,185,3.503,228,2.907,253,6.281,337,6.264,358,3.234,455,5.846,514,4.057,563,4.456,578,4.456,580,4.715,602,4.207,658,2.708,703,3.786,874,8.135,916,8.346,928,5.635,1134,7.488,1219,5.968,1328,3.651,1497,6.264,1515,5.306,1968,5.237,1971,7.317,1972,8.346,2069,6.946,4306,5.306,4758,6.669,8407,7.881,8408,7.881,8409,7.881,8410,7.881,8411,10.499,8412,7.881,8413,7.317]],["t/3610",[89,4.236,102,6.408,231,3.515,444,4.134,578,5.521,602,3.133,656,4.783,658,3.356,1003,6.189,1193,6.868,1279,9.335,1468,7.989,1889,5.073,1974,9.067,2233,5.605,3111,6.665,4529,7.761,5247,7.989,8123,8.607,8414,9.764,8415,9.764,8416,9.764]],["t/3612",[89,2.994,117,5.141,127,4.054,182,4.303,184,4.151,358,3.495,481,4.59,488,5.189,514,4.269,571,6.769,602,2.732,662,6.09,861,5.401,1076,5.524,1134,5.401,1193,5.99,1194,7.439,1279,6.599,1289,6.599,1305,6.09,1901,6.769,2149,8.041,2586,7.439,2630,6.45,3011,6.317,3038,7.908,3980,7.908,4529,6.769,5440,7.908,5905,6.969,6101,6.769,6210,7.208,7008,7.908,7245,7.507,7589,7.208,8123,7.507,8417,8.517,8418,8.517,8419,8.517]],["t/3614",[20,2.014,60,3.955,109,2.254,401,4.396,481,6.462,614,4.238,668,9.019,924,5.797,938,7.968,990,5.094,1076,4.844,1554,6.711,1774,8.894,2061,4.896,2808,8.2,6101,7.702,7471,8.541,8420,9.69]],["t/3616",[88,2.156,215,6.321,294,4.13,401,5.388,474,6.401,481,5.143,602,3.811,1003,4.902,1038,4.209,1076,5.939,1569,5.566,1826,6.425,2061,6.535,2228,7.616,2578,6.945,4238,8.077,4305,8.862,7203,8.862,7405,7.586,8421,9.544]],["t/3618",[1,5.564,4,2.758,18,4.071,19,2.139,122,3.113,215,6.351,406,5.322,432,6.851,481,5.182,578,5.437,602,4.354,692,2.991,990,5.055,1157,2.849,1881,6.236,2067,6.311,2402,7.283,3037,8.929,3111,6.564,7429,8.476,8422,9.616]],["t/3620",[18,3.328,19,0.939,20,1.089,38,1.565,60,2.387,81,2.542,88,1.183,93,2.88,137,5.72,215,2.788,230,1.605,231,1.886,243,2.754,262,2.397,272,2.517,278,5.02,317,3.266,322,4.112,323,2.941,329,2.554,349,1.944,352,2.535,355,2.055,430,1.568,433,3.031,488,3.192,593,3.323,602,4.127,614,2.778,617,2.197,684,2.771,692,1.629,725,3.831,842,6.823,851,6.718,909,3.359,914,3.163,926,5.039,930,5.158,1291,4.015,1471,2.567,1757,4.865,1790,2.517,1919,3.247,1920,4.35,1938,3.192,1982,4.882,1989,3.746,2211,3.163,2454,4.618,2543,4.06,2578,3.813,2586,5.292,2790,5.528,2891,3.107,2908,2.738,3110,3.008,3266,4.434,3425,4.287,3632,2.738,4306,3.528,4350,3.528,4412,4.618,4501,4.06,5098,3.813,5103,3.685,5695,4.865,6203,4.865,7396,4.434,7405,4.165,7644,6.652,8423,5.239,8424,5.239,8425,5.239,8426,5.239,8427,5.239,8428,4.434,8429,5.239,8430,5.239,8431,5.239,8432,5.239,8433,5.239,8434,10.481,8435,4.865,8436,5.239,8437,5.239,8438,5.239]],["t/3622",[18,5.139,89,3.475,109,1.677,122,2.334,131,1.501,159,4.17,185,3.204,193,2.616,310,2.637,316,3.555,317,4.744,329,3.513,352,1.743,355,2.828,366,3.531,577,6.022,592,5.246,614,2.547,616,2.067,684,3.812,852,2.881,863,4.79,912,4.571,913,4.866,1038,3.179,1102,7.814,1144,2.4,1293,4.312,1583,6.693,1988,5.585,2239,6.353,2240,6.353,2316,3.909,2516,4.275,2632,5.585,2662,4.571,2663,6.41,3285,6.353,4306,4.853,4350,4.853,4560,4.204,6202,6.693,8277,5.729,8439,7.208,8440,7.208,8441,6.693,8442,7.208,8443,7.208,8444,7.208,8445,9.885,8446,7.208,8447,7.208]],["t/3624",[19,1.786,60,3.705,118,2.682,309,4.876,433,4.218,614,4.311,664,3.043,718,4.102,852,3.983,875,7.005,877,2.668,914,6.014,990,3.833,1033,5.408,1064,5.649,1076,3.645,1109,5.521,1115,5.147,1144,3.317,1291,3.724,1471,3.572,1602,4.575,1793,4.093,2586,4.909,4191,4.623,4200,5.649,4225,9.251,4560,7.448,5972,5.306,8448,7.291,8449,7.291,8450,7.291,8451,7.291,8452,7.291,8453,6.17,8454,7.291,8455,7.291,8456,7.291]],["t/3626",[4,2.225,12,1.454,20,0.801,38,1.849,39,1.376,49,3.747,72,3.844,73,1.973,88,1.398,89,1.355,92,2.234,96,1.777,98,3.521,103,2.843,109,1.44,115,1.003,118,2.277,167,2.47,174,1.351,176,3.736,185,1.713,192,2.71,228,1.421,229,4.267,230,1.896,243,2.025,253,4.641,296,3.551,307,2.531,315,1.051,316,1.214,323,2.163,348,1.926,356,1.055,358,2.54,453,1.887,460,4.795,474,2.076,486,1.887,514,4.526,526,3.474,578,2.178,595,2.025,601,4.395,602,4.014,618,2.285,644,2.076,687,2.56,703,1.851,718,1.586,725,3.781,797,5.645,847,2.178,851,2.305,871,3.152,877,1.41,881,2.212,882,1.649,911,2.326,917,3.152,1005,3.26,1049,2.56,1056,2.229,1115,1.99,1128,1.516,1134,6.924,1152,3.26,1157,1.141,1170,2.443,1173,2.37,1255,2.63,1293,2.305,1308,4.504,1328,1.785,1451,2.71,1488,2.804,1539,2.918,1581,1.887,1645,6.166,1651,3.152,1761,2.858,1792,2.326,1793,2.163,1804,2.132,1889,2.002,1919,3.205,1932,2.63,1970,3.062,2077,5.091,2111,2.417,2130,2.985,2156,2.47,2187,2.347,2213,3.152,2341,2.755,2586,6.55,2765,2.212,3004,3.968,3051,3.26,3313,2.498,3323,3.26,3895,3.062,4106,2.71,4306,4.167,4519,3.396,5006,3.577,5061,2.985,5071,3.062,5247,5.064,5336,3.062,6869,3.26,7407,3.396,7409,3.577,7830,2.985,7975,3.577,8457,6.189,8458,3.853,8459,3.853,8460,3.853,8461,6.189,8462,3.853,8463,3.577,8464,3.853,8465,3.853,8466,3.853,8467,3.396,8468,3.577,8469,3.853,8470,3.853,8471,3.853,8472,3.853,8473,3.853,8474,3.853,8475,3.853,8476,3.853,8477,3.853,8478,3.853]],["t/3628",[0,1.196,99,4.43,131,2.24,164,5.437,349,2.661,356,2.946,572,6.824,601,4.861,963,7.568,1003,5.527,1175,8.553,1647,7.981,3910,6.899]],["t/3630",[0,1.09,12,3.701,22,3.175,23,3.621,25,4.712,26,3.799,28,2.012,30,1.724,33,3.396,42,3.32,45,3.274,53,3.963,66,2.313,91,2.689,99,2.934,127,3.392,146,4.138,155,3.05,211,3.424,342,2.876,427,4.519,852,2.849,893,5.397,939,3.156,940,3.072,955,4.342,1170,4.519,1319,3.26,1361,4.781,1471,3.491,1517,3.392,1519,3.331,1520,3.661,1521,4.157,1522,4.302,1523,4.091,1545,5.466,1585,4.123,1586,5.186,1594,4.302,1595,5.186,1596,6.899,1597,5.096,1667,5.665,2227,6.031,3115,5.522,6079,9.107,6083,9.107]],["t/3632",[0,0.96,6,2.154,19,1.548,53,3.939,73,2.196,88,1.95,131,2.57,135,3.496,228,3.185,278,4.594,307,3.531,352,2.986,356,2.363,357,2.319,392,5.099,514,3.335,663,4.386,688,3.853,717,4.538,974,3.075,980,6.538,1594,7.451,1614,5.86,1869,4.778,1991,5.46,2132,5.535,2799,6.283,3122,4.538,7311,7.064,8479,12.345]],["t/3634",[0,1.196,6,2.685,19,1.929,131,2.24,356,2.946,357,2.891,974,3.833,1629,4.841,1883,7.981,2102,6.226,2132,6.899,7307,9.485,8480,10.76]],["t/3636",[0,1.285,6,1.885,12,2.851,19,1.354,22,1.306,28,1.404,30,1.203,35,1.333,66,1.885,69,3.795,76,1.401,89,1.748,92,2.727,96,2.294,109,1.157,115,1.295,118,1.829,125,1.981,131,1.573,135,2.013,143,2.512,168,2.715,169,2.697,174,1.744,184,2.424,193,2.742,195,2.473,215,4.021,217,6.778,230,2.314,296,1.988,315,2.492,316,2.381,338,1.295,340,2.51,342,1.458,355,2.964,357,1.336,358,2.04,380,2.569,425,1.969,426,1.771,454,3.394,486,3.701,496,2.569,514,3.53,615,2.265,663,2.526,676,2.715,740,2.9,754,2.144,778,2.949,818,3.127,821,2.424,822,1.409,840,2.974,851,2.974,956,1.704,974,1.771,1004,3.444,1061,5.222,1063,3.972,1066,2.949,1155,3.777,1255,3.394,1324,5.093,1334,2.772,1344,2.228,1461,3.001,1508,2.4,1538,4.208,1553,2.877,1566,2.436,1581,5,1938,3.029,1942,3.471,1956,6.237,1991,2.436,2077,8.321,2160,3.618,2169,2.811,2561,2.924,2787,3.618,3004,3.188,3093,6.92,3106,2.662,3117,2.811,3122,2.614,3249,3.497,3327,2.832,3401,3.394]],["t/3638",[0,1.365,19,1.656,22,1.718,28,1.846,30,1.581,35,2.477,38,1.953,66,2.401,69,4.465,88,1.477,116,2.614,117,3.946,118,3.398,131,1.361,135,2.648,143,3.304,193,2.373,195,3.252,307,2.674,329,3.187,338,1.702,340,2.172,356,1.79,401,4.19,570,2.412,599,5.533,652,3.594,663,3.321,692,2.033,818,3.281,822,1.853,841,2.102,1061,5.756,1063,4.856,1157,2.736,1319,2.991,1334,3.388,1677,6.72,2061,4.667,2102,6.196,2769,5.066,2874,4.102,3106,4.946,3117,3.697,3122,3.437,7343,7.943,7388,6.071,8481,8.576,8482,8.576]],["t/3640",[0,1.283,12,2.108,19,1.001,22,1.468,28,1.577,30,1.351,35,2.211,66,2.231,69,3.216,73,2.492,88,1.262,115,2.147,122,2.669,131,1.717,135,2.262,143,2.823,174,1.959,188,3.761,193,2.027,195,2.778,218,2.388,294,2.417,322,3.234,329,2.723,352,1.994,357,1.501,390,2.898,405,2.635,409,2.383,426,1.99,658,3.367,663,2.838,688,2.493,818,2.525,1038,2.464,1043,3.694,1144,3.262,1334,3.024,1508,2.697,1569,6.729,1571,4.065,1572,3.258,1573,4.23,1610,4.685,1614,4.334,1677,6.148,1966,3.712,2102,6.675,2132,3.582,2137,6.788,2262,2.445,3106,4.414,3117,3.159,3122,2.937,3135,10.642,4094,4.932,4192,4.571,4285,8.128,4389,3.813,7317,4.44,7335,4.924,7343,6.688,8481,7.655,8482,5.187]],["t/3642",[0,1.389,12,2.919,60,3.553,62,4.603,73,1.968,131,1.611,135,3.133,241,3.453,349,1.913,356,2.118,432,4.441,518,3.699,519,5.388,520,4.169,522,6.982,526,4.343,663,3.93,666,5.859,718,3.185,727,5.7,822,2.939,1144,3.453,1163,4.343,1164,4.282,1508,3.735,1610,4.959,2102,6.768,2113,6.149,2120,5.358,2132,4.96,2137,4.854,2527,4.117,2566,5.859,2806,4.441,3122,4.067,3216,6.33,5169,6.547,5763,5.859,7317,6.149,7337,6.547,7339,6.547,7341,8.485,7343,5.281]],["t/3644",[0,1.461,19,0.839,22,2.312,28,2.484,30,2.729,35,3.026,47,2.407,66,2.868,69,4.314,83,1.807,115,1.218,131,1.501,135,2.92,137,3.498,143,4.446,155,2.002,174,1.641,193,3.193,195,5.612,228,1.726,230,1.433,232,7.513,323,2.626,394,2.105,601,2.113,663,3.663,704,2.505,718,1.926,818,4.025,889,2.571,1334,4.821,1562,3.07,1677,6.205,1699,2.403,1793,2.626,2070,5.732,2102,5.091,2103,7.703,2262,2.047,2434,3.193,3106,6.042,3117,4.975,3122,3.791,4164,8.969,5190,6.696,5191,7.756]],["t/3646",[0,1.061,12,3.601,131,1.987,135,3.865,272,4.585,426,3.399,663,4.848,817,6.928,928,8.493,1144,3.178,1508,4.607,1610,4.564,1986,5.709,2132,6.119,2475,5.66,2803,6.945,2949,8.996,3122,5.017,4435,10.582,7312,10.47,7315,10.47]],["t/3648",[0,1.206,12,4.095,135,4.395,663,5.513,974,3.865,1144,3.613,1508,5.239,1610,5.19,2132,6.958,3122,5.705,5763,8.219,7305,9.566]],["t/3650",[0,1.167,4,2.26,12,2.974,22,2.071,60,2.394,99,3.245,108,3.751,110,3.12,122,2.551,131,2.622,147,6.732,211,3.786,261,6.891,266,5.111,320,2.86,325,4.93,346,5.673,357,2.117,366,3.86,536,5.771,738,4.048,801,9.377,818,3.216,822,2.234,960,2.581,1044,10.964,1088,4.945,1128,3.101,1144,2.624,1508,3.804,1610,3.769,1881,5.111,2132,5.053,2806,4.524,7308,6.946,7319,6.669,8483,7.881,8484,7.881,8485,7.881]],["t/3652",[135,4.762,663,5.974,3122,6.182]],["t/3654",[18,3.705,19,1.569,73,2.861,88,2.54,135,3.544,317,3.03,357,3.021,444,3.705,514,3.381,563,4.949,591,5.652,595,4.601,596,6.156,601,3.954,616,2.51,617,2.447,663,4.446,718,3.604,756,3.488,760,6.957,972,3.679,1003,4.496,1144,2.914,1324,4.878,1610,5.378,1991,4.287,2003,6.628,2210,6.14,2787,6.369,3122,4.601,3325,8.127,3711,5.676,7289,7.407,7290,8.127]],["t/3656",[0,1.433,22,3.107,26,2.978,28,2.674,30,2.291,35,2.54,66,2.439,69,3.11,135,3.836,143,4.786,146,3.996,148,4.297,193,3.437,195,4.711,325,4.447,663,4.812,2235,4.468,2425,7.529,3106,5.072,3116,7.174,3117,5.356,3122,4.98,8486,10.978,8487,9.472]],["t/3658",[0,1.085,4,2.8,19,1.75,83,3.773,131,2.033,349,2.415,514,3.773,841,3.14,972,5.064,1047,3.674,1128,3.842,1144,3.251,1324,5.442,1610,4.669,1991,4.783,2102,6.971,2132,6.261,2137,6.127,5755,7.566,7317,7.761,7336,10.62,7343,6.665]],["t/3660",[76,2.669,92,4.267,98,3.428,109,2.204,115,2.466,131,1.972,187,4.98,230,2.902,294,4.099,357,2.545,358,3.887,403,4.866,475,6.466,619,5.277,718,3.9,877,4.326,1144,3.937,1319,4.333,1600,6.773,2102,5.48,2358,8.604,2518,6.894,2519,9.161]],["t/3662",[76,2.981,109,2.943,115,2.755,131,2.203,570,3.903,601,4.78,622,5.318,972,4.448,1144,3.523,1610,6.049,5686,6.862,7291,9.824,8488,10.58]],["t/3664",[3,2.107,21,2.469,35,1.553,66,1.194,76,2.385,82,2.534,109,2.56,115,2.204,122,3.239,127,2.756,135,2.345,159,3.35,174,2.031,185,2.574,230,1.774,252,2.695,310,3.66,316,2.667,338,1.508,348,2.895,355,3.32,357,1.556,390,2.036,409,1.674,430,4.017,452,2.079,601,3.824,663,2.942,689,3.528,735,2.251,759,3.922,823,2.695,864,5.206,877,2.119,913,2.851,960,1.897,967,2.974,974,2.063,1036,4.281,1047,2.179,1061,3.824,1088,3.633,1157,1.715,1324,4.717,1334,2.124,1398,3.755,1548,3.205,1713,2.544,1728,4.048,1908,4.214,1932,3.953,2077,5.555,2475,6.943,2559,4.9,3025,4.295,3083,4.487,3122,3.044,3192,4.214,4371,5.104,5245,5.377,5291,5.104,6232,10.649,8489,5.79,8490,5.377]],["t/3666",[0,1.172,4,2.274,20,1.649,33,3.651,42,2.897,53,4.186,66,2.175,88,1.791,99,3.265,115,2.065,131,2.195,192,5.578,307,3.243,308,3.333,316,2.499,349,1.961,356,2.171,413,4.298,567,3.986,601,3.582,619,3.539,940,5.106,1040,4.75,1043,3.553,1517,3.775,1520,4.073,1521,4.625,1522,4.787,1523,4.552,1588,4.787,1594,6.364,1708,4.484,3183,5.204,6760,6.488,8491,6.711,8492,6.711,8493,7.363,8494,7.363,8495,7.363]],["t/3668",[0,1.077,42,2.663,76,2.73,109,2.79,115,2.523,122,3.137,131,2.018,322,3.801,356,2.653,357,2.603,974,3.451,1040,4.216,1108,6.731,1324,6.683,1588,5.849,4079,5.4,5812,6.284,6799,7.052,8491,8.2,8492,10.148,8496,9.69]],["t/3670",[0,1.022,76,2.591,131,1.915,230,3.555,231,3.311,296,3.677,320,3.338,356,2.518,357,2.471,433,5.321,549,4.835,601,5.243,621,4.243,877,3.365,974,3.276,1038,4.057,1129,5.055,1144,4.234,1610,4.398,2005,7.31,2102,6.715,2132,5.897,7324,9.496,7325,11.209,8497,9.197]],["t/3672",[6,1.895,19,1.362,30,1.837,35,2.037,61,4.628,66,2.391,76,2.141,108,3.616,122,2.46,125,3.027,131,1.582,153,3.263,166,4.148,193,3.718,227,2.749,231,2.735,236,4.068,270,3.097,315,2.072,316,3.228,317,3.547,320,3.718,327,6.897,357,2.041,392,3.475,425,3.008,601,3.432,661,4.876,727,4.176,770,4.361,841,2.443,877,2.78,956,3.512,1108,5.751,1151,4.927,1600,5.432,1713,3.338,2004,5.886,4570,5.343,5117,4.871,5158,9.03,5563,8.67,6005,6.696,8283,7.938,8498,11.591,8499,7.597]],["t/3674",[109,2.503,110,5.059,115,2.802,122,3.484,131,2.24,601,4.861,663,5.466,960,3.524,1317,5.052,1319,4.922,2132,6.899,7323,9.485]],["t/3676",[20,1.955,26,2.956,42,2.584,45,4.287,111,4.943,122,3.044,146,3.966,148,4.265,188,6.33,229,4.517,315,2.564,358,3.858,396,5.133,407,3.833,664,3.925,955,5.728,1154,5.035,1534,5.675,1870,6.17,1991,4.606,6075,9.629,6206,7.473,6224,9.985,7369,8.73]],["t/3678",[0,1.037,4,2.677,6,2.329,19,1.673,38,2.788,122,3.022,174,3.273,211,4.484,218,2.703,228,3.443,307,3.817,316,3.691,317,3.231,390,3.281,392,5.856,450,4.549,514,3.606,570,3.443,601,5.292,841,3.001,1155,4.666,1157,2.765,1880,5.062,4145,6.464,4904,7.898,6416,9.076]],["t/3680",[0,0.83,41,2.172,42,2.051,69,2.45,88,1.686,109,1.736,153,3.205,241,3.331,242,2.745,315,2.76,338,1.943,430,2.234,459,4.102,467,3.536,468,5.766,601,3.371,602,2.394,606,4.251,684,3.947,721,5.094,879,3.877,913,3.674,960,2.444,971,3.771,972,3.137,974,2.658,1040,3.559,1047,3.809,1066,4.426,1067,5.024,1076,3.731,1077,3.536,1142,4.898,1269,5.169,1451,5.249,1579,4.683,1588,4.505,2220,5.932,2354,6.316,4385,4.785,5085,9.721,6075,6.106,8044,6.929,8491,6.316,8492,8.566,8500,7.463,8501,9.398,8502,10.665,8503,11.486,8504,6.316,8505,6.929,8506,7.463]],["t/3682",[960,3.851,7300,9.347,7303,10.365]],["t/3684",[49,3.966,72,3.184,73,2.392,76,2.649,109,2.187,228,3.469,257,7.693,258,7.12,259,4.455,357,2.526,365,7.957,366,4.606,443,5.576,601,4.247,615,4.283,684,4.973,738,4.83,755,4.676,841,3.023,875,4.629,877,3.44,891,7.723,920,7.285,921,6.974,1099,5.484,1136,5.397,1786,8.287,2125,5.84,2316,5.1]],["t/3686",[0,1.052,3,3.443,4,2.396,6,1.689,12,1.627,20,0.896,21,1.839,22,2.487,26,2.128,27,1.508,28,1.217,30,1.043,38,1.288,41,1.452,53,2.392,66,1.723,69,2.742,76,1.215,83,1.666,88,0.974,96,1.989,108,2.052,109,1.575,118,1.586,122,1.396,124,4.557,131,2.141,146,2.855,147,2.764,148,1.956,151,2.986,152,2.943,153,2.907,154,4.049,183,1.671,212,2.253,235,5.02,267,3.332,269,4.925,309,3.613,316,1.359,317,2.343,329,3.299,357,2.244,358,1.769,388,3.42,392,4.991,426,2.411,430,2.026,570,1.591,594,2.796,601,3.057,670,2.456,718,1.775,727,3.72,738,3.476,739,3.799,754,2.918,755,2.144,759,1.998,808,5.125,875,2.123,877,1.578,889,3.72,891,7.161,905,6.766,924,2.579,940,2.918,952,4.497,957,2.83,960,1.412,972,1.812,1066,2.557,1097,5.728,1153,2.112,1334,2.483,1508,2.081,1553,2.495,1622,7.121,1746,3.528,1873,1.998,1874,2.034,1973,4.004,2132,6.067,2141,3.649,2416,5.786,2599,2.324,3858,5.379,5074,7.757,5158,3.801,5582,9.063,7330,8.701,7331,3.801,7332,8.008,7333,8.008,7334,5.965,8507,4.312]],["t/3688",[0,1.302,3,4.26,4,2.869,6,1.445,19,1.517,20,1.204,22,1.522,28,1.635,30,1.4,35,2.951,66,2.27,67,2.707,69,4.014,96,2.671,97,3.672,100,3.405,132,3.434,143,2.926,153,2.487,193,2.101,195,2.88,210,3.528,229,2.782,242,3.114,243,3.044,322,2.272,338,1.508,388,2.926,405,2.731,426,2.063,430,1.733,445,3.953,468,3.299,496,2.991,601,2.616,656,2.837,673,3.377,840,3.464,882,2.478,957,3.8,1002,4.01,1043,3.793,1058,4.146,1061,5.524,1295,3.713,1324,4.717,1328,2.683,1552,8.818,1769,4.295,1873,2.683,1874,3.992,2077,6.566,2241,3.205,2247,3.899,2252,8.163,3284,5.104,3886,7.28,4328,3.597,4973,5.953,6210,4.9,8508,5.79,8509,10.32,8510,10.218,8511,5.377,8512,5.104]],["t/3690",[0,0.994,3,3.252,4,3.269,20,1.858,72,3.026,96,4.123,116,3.573,122,2.894,131,2.373,296,3.573,317,3.095,338,2.327,358,3.668,388,4.516,413,3.643,426,3.183,459,4.913,481,4.816,570,3.297,601,4.038,658,3.071,725,4.357,852,3.573,960,2.927,1128,3.517,1193,6.286,1873,4.141,1874,4.215,1988,6.925,2102,5.171,2128,7.878,2129,6.769,2132,5.73,2133,7.313,7166,7.878]],["t/3692",[0,1.228,3,3.099,4,3.169,20,1.771,35,2.963,49,4.661,66,2.279,69,2.796,76,2.4,109,1.981,211,5.309,301,5.523,315,2.323,338,2.218,388,4.303,408,5.008,426,3.034,448,3.372,459,4.681,602,3.545,661,4.054,676,4.65,1093,5.589,1690,9.351,1709,4.236,1873,3.946,1874,4.017,2753,4.375,3106,4.561,3886,8.041,8513,7.908,8514,11.388,8515,7.908]],["t/3694",[0,1.015,3,3.323,4,3.635,6,2.278,20,1.898,35,2.448,66,1.884,85,3.734,185,4.059,219,4.639,262,4.177,355,3.582,388,4.614,426,3.252,448,3.616,452,4.148,526,6.485,1157,3.422,1324,5.089,1677,7.25,1873,4.231,1874,4.306,2806,6.632,3342,7.075,6275,7.258,8516,10.728]],["t/3696",[19,1.506,60,2.553,76,2.368,88,1.898,96,3.877,98,3.041,109,1.955,131,1.75,159,4.862,181,4.076,184,4.096,187,4.418,188,5.658,228,3.1,392,5.011,443,4.984,459,4.619,601,6.203,739,4.717,774,4.684,1144,4.299,1317,6.063,1324,4.684,1525,5.658,1629,4.928,1634,3.736,1638,5.388,2170,6.876,2212,7.023,2427,5.911,2753,5.627]],["t/3698",[0,1.058,4,2.728,20,1.978,22,1.792,30,1.649,66,1.407,76,1.921,96,3.146,98,2.468,109,1.587,115,1.776,131,1.42,184,3.324,185,3.032,230,2.914,296,3.803,308,2.867,322,2.675,357,2.556,381,3.02,388,3.446,413,2.78,426,2.429,429,3.231,430,3.548,459,3.749,474,3.675,601,3.081,661,3.246,735,2.651,754,2.94,770,3.915,820,7.588,822,1.933,956,2.338,960,2.234,967,3.503,972,2.867,974,2.429,1047,2.566,1076,3.409,1129,3.749,1141,5.58,1319,3.12,1344,3.056,1696,4.876,1709,3.392,1826,4.591,1873,3.16,1874,3.216,1986,4.08,2141,5.771,2438,4.655,2483,4.236,2560,5.058,2679,4.044,3905,4.723,6005,6.011,6175,5.771,8517,6.82,8518,10.991,8519,6.82,8520,6.82,8521,5.58,8522,6.82,8523,6.82]],["t/3700",[0,1.187,4,3.062,20,1.68,22,2.124,30,1.955,35,2.167,49,3.409,66,2.202,72,2.737,73,2.056,96,3.729,131,1.683,174,2.834,187,4.249,230,2.476,231,2.909,253,6.387,296,4.779,307,3.305,322,4.69,338,2.104,383,3.729,392,3.697,409,2.336,413,3.294,426,2.879,601,4.823,717,4.249,820,5.597,913,5.256,974,2.879,1144,2.691,1873,3.745,1874,3.812,2130,6.262,2138,6.84,2139,5.882,2140,9.411,2141,6.84,2142,7.504,2143,7.504]],["t/3702",[0,1.546,1,4.372,6,0.737,19,0.892,20,0.614,22,1.693,30,0.714,34,1.817,35,1.334,38,0.882,45,0.986,52,2.417,60,3.851,61,2.247,62,3.596,66,1.329,69,2.481,70,2.855,81,3.125,88,1.123,91,1.115,103,1.357,143,1.493,170,1.324,192,2.078,193,1.805,219,1.501,225,2.203,243,1.553,248,5.12,262,1.351,266,1.916,294,1.278,302,1.375,338,1.295,342,0.866,356,0.809,398,1.469,424,2.016,434,1.646,436,3.445,439,3.264,443,1.752,452,1.786,469,1.8,503,2.743,514,1.922,515,6.837,516,7.532,518,2.378,519,5.304,520,4.925,523,3.002,524,3.62,525,6.137,527,2.15,530,2.046,556,1.709,565,1.8,595,1.553,656,1.447,658,1.015,666,3.767,667,1.835,675,4.991,677,2.237,678,2.289,704,1.582,739,1.658,774,2.772,798,1.939,841,0.95,1053,1.288,1061,2.247,1120,2.417,1121,3.757,1156,1.4,1163,1.658,1164,1.635,1226,1.413,1300,2.772,1317,1.387,1330,1.318,1362,2.15,1555,1.8,1601,2.348,1626,1.835,1663,2.604,1781,2.237,1812,2.743,1820,2.647,2002,2.348,2025,1.44,2054,2.743,2062,2.191,2113,5.12,2161,2.289,2223,1.635,2251,2.191,2365,2.112,2400,4.618,2403,2.417,2490,3.498,2510,2.878,2543,2.289,2751,2.237,2829,1.181,2833,1.963,2918,2.016,2923,2.5,3168,5.12,3274,2.743,3306,1.916,3350,1.723,3362,1.939,4030,2.348,4156,2.604,4360,5.981,4962,4.384,4996,2.743,4998,2.348,4999,2.417,5521,4.069,5602,2.604,6093,2.5,6180,2.743,6200,2.604,6232,3.689,6339,2.5,7256,2.743,7341,7.478,7708,2.743,7715,2.417,7955,1.493,7972,4.384,8524,4.618,8525,2.743,8526,2.954,8527,6.442,8528,2.954,8529,2.954,8530,2.954,8531,2.954,8532,8.433,8533,4.973,8534,2.954,8535,2.954,8536,2.954,8537,2.954,8538,2.954,8539,2.954,8540,2.954,8541,4.973,8542,2.954,8543,2.954,8544,2.954,8545,7.557,8546,7.017,8547,2.954,8548,2.954,8549,2.954,8550,2.954,8551,2.954,8552,2.954,8553,2.954,8554,2.954,8555,2.954,8556,2.954,8557,2.954,8558,2.954]],["t/3704",[0,1.073,4,2.319,12,2.054,19,0.976,35,1.459,41,2.07,53,3.774,72,1.843,76,2.278,83,2.103,109,1.266,110,2.155,114,2.765,115,1.417,122,1.762,131,2.376,132,3.227,139,3.572,146,3.411,147,3.489,170,2.439,174,1.908,185,2.419,260,3.415,261,3.572,266,3.529,278,2.896,291,5.373,307,3.946,320,1.975,342,1.596,356,1.49,357,1.462,366,3.961,392,5.22,437,1.87,563,3.077,595,4.251,601,3.653,602,1.746,652,2.991,692,1.692,717,5.615,801,3.891,841,1.75,891,5.307,1040,4.205,1047,2.048,1077,2.578,1594,4.881,2120,5.6,2325,3.415,3182,4.326,6153,5.053,6377,3.769,6674,7.127,7073,4.606,7311,9.338,7324,6.616,8504,6.843,8559,5.053,8560,7.508,8561,9.917,8562,5.053,8563,7.508,8564,7.508,8565,11.104,8566,7.508,8567,7.508,8568,7.508,8569,5.053,8570,5.053]],["t/3706",[0,1.102,3,2.073,4,1.239,6,0.625,12,1.63,19,0.449,21,1.068,35,2.658,38,0.748,47,0.836,60,1.731,62,2.242,76,0.706,108,3.641,109,0.583,115,0.652,122,0.811,124,1.686,131,2.498,135,1.014,153,2.447,154,1.498,166,1.367,174,0.878,185,1.113,193,1.568,212,1.309,218,1.964,232,1.761,241,1.118,254,1.686,272,2.076,294,1.084,307,1.767,309,2.588,316,0.789,317,1.496,322,0.982,329,2.106,342,0.734,349,0.619,357,3.436,388,2.879,390,1.519,392,4.333,409,0.724,413,1.021,429,1.186,430,3.591,432,1.437,514,2.619,518,1.197,519,2.245,520,1.349,522,2.909,526,3.805,549,2.271,567,2.171,570,0.924,594,3.695,601,3.779,602,0.803,606,1.427,644,1.349,648,1.643,666,1.896,668,1.734,670,1.427,698,2.391,699,1.891,717,1.316,718,1.031,727,4.204,735,0.973,738,2.219,739,1.406,754,3.298,755,1.245,759,1.16,778,1.485,817,3.953,822,1.224,841,0.805,875,1.233,889,2.375,891,5.02,905,3.089,911,1.512,928,3.089,957,1.643,960,2.505,967,4.605,972,2.395,1038,2.513,1066,1.485,1067,1.686,1144,1.438,1155,1.252,1163,1.406,1164,1.386,1334,0.919,1344,1.122,1508,1.209,1553,1.449,1566,1.227,1569,1.46,1571,1.822,1572,1.46,1573,1.896,1578,2.138,1619,3.986,1629,1.944,1708,1.416,1820,1.333,1944,2.119,1956,1.709,1986,1.498,1991,1.227,2003,1.896,2077,1.643,2102,6.607,2103,1.709,2113,1.99,2120,2.992,2126,1.686,2132,1.606,2133,2.049,2136,3.535,2137,4.253,2150,1.791,2166,1.624,2212,1.606,2416,2.992,2466,1.761,2475,1.485,2503,1.526,2516,1.485,2527,2.299,2538,1.686,2560,1.857,2562,1.643,2566,1.896,2599,3.07,2631,1.857,2690,1.606,2794,1.857,2803,1.822,2806,3.271,2949,3.272,3168,1.99,3216,2.049,3858,1.99,3922,1.386,4285,2.909,4435,4.662,4554,2.207,4615,1.94,5085,2.119,5169,2.119,5755,1.94,5763,4.315,7305,2.207,7306,2.325,7307,2.207,7308,2.207,7309,2.325,7310,2.119,7311,2.049,7312,2.207,7313,2.325,7314,2.325,7315,2.207,7316,2.325,7317,3.434,7318,4.011,7319,2.119,7320,2.325,7321,2.325,7322,2.325,7323,2.207,7324,2.049,7325,3.808,7326,2.325,7327,2.325,7328,2.325,7329,2.207,7330,2.119,7331,2.207,7332,2.119,7333,2.119,7334,2.207,7335,2.207,7336,2.207,7337,3.656,7338,1.822,7339,3.656,7340,2.325,7341,4.662,7342,2.325,7343,1.709]],["t/3708",[0,0.935,19,0.931,20,1.079,22,2.347,23,1.127,26,1.632,27,1.36,28,0.626,30,0.941,32,1.174,33,0.768,42,0.61,45,1.733,53,2.506,60,0.674,66,2.209,69,3.598,73,0.564,76,0.625,83,0.857,88,0.501,91,1.468,108,1.056,109,0.516,122,0.718,125,0.884,142,1.378,146,2.19,148,1.764,153,0.953,162,2.045,185,1.729,196,0.933,226,1.264,227,1.408,236,2.78,241,0.99,244,1.855,259,1.051,260,2.44,270,0.904,286,1.423,304,1.274,309,0.847,320,1.411,328,5.329,340,0.737,349,0.962,356,0.607,357,0.596,381,3.456,386,0.994,413,2.116,425,0.879,430,1.164,433,1.284,437,0.763,533,2.327,570,0.819,602,0.712,614,1.374,615,1.011,658,0.763,661,1.056,664,2.96,692,1.615,699,0.971,707,1.407,711,1.615,712,4.559,748,1.316,755,1.934,756,0.884,821,3.805,822,3.036,852,0.887,875,4.397,877,0.812,879,2.697,905,3.712,906,1.056,939,1.722,940,1.677,955,1.352,956,0.761,960,0.727,967,1.998,1036,3.6,1047,0.835,1061,5.667,1063,6.699,1096,1.019,1100,1.365,1124,0.835,1334,1.905,1383,5.748,1506,0.911,1518,2.568,1521,1.294,1522,1.339,1523,2.233,1548,1.228,1566,1.087,1589,1.646,1590,1.764,1629,2.806,1680,1.494,1713,3.43,1874,2.449,1950,3.932,1951,2.44,1991,3.474,2235,1.834,2263,1.121,2264,1.104,2336,2.06,2941,1.764,2942,3.013,2943,4.127,3095,1.764,3351,5.26,3363,6.673,3441,1.816,3485,1.537,4136,3.778,4421,1.878,4560,5.209,5061,3.013,5071,3.091,5737,8.279,5753,1.719,5758,1.764,5759,1.68,5925,2.83,5972,1.615,6075,1.816,6792,1.816,7300,4.127,7304,4.248,7715,1.816,8204,3.182,8211,3.182,8571,4.394,8572,2.219,8573,9.4,8574,2.06,8575,3.291,8576,3.889,8577,1.878,8578,5.803,8579,5.192,8580,1.816,8581,1.878,8582,2.06,8583,1.816,8584,2.06,8585,1.764,8586,1.956,8587,2.06,8588,2.06,8589,3.611,8590,2.06,8591,3.611,8592,2.06,8593,2.06,8594,1.956,8595,2.06]],["t/3710",[76,2.956,109,2.928,235,7.783,338,3.277,602,3.366,658,3.606,882,4.491,956,3.597,1074,5.89,1518,4.32,1991,5.14,2483,6.517,2529,7.267,8596,10.493]],["t/3712",[19,1.835,88,2.312,131,2.132,244,3.045,309,3.909,355,4.016,357,2.75,533,6.125,614,3.618,617,2.862,664,4.274,725,4.991,755,5.092,963,7.201,1471,5.015,1738,6.64,1991,5.015,8578,8.377,8597,10.238]],["t/3714",[66,1.897,99,3.787,109,2.14,187,4.835,309,3.511,320,3.338,338,3.022,340,3.855,602,2.951,661,4.378,664,4.845,768,5.28,773,4.685,818,2.817,882,3.936,1074,5.163,1096,5.332,1334,3.374,1518,3.787,1991,4.505,2235,5.998,2416,6.37,5797,8.107,8204,9.496,8486,8.54]],["t/3716",[0,0.542,4,2.135,19,0.874,20,1.877,30,2.184,35,2.421,42,1.34,45,1.627,66,2.698,69,2.964,87,2.844,98,2.694,109,1.732,115,1.27,134,7.354,162,3.914,181,2.365,185,2.168,195,2.425,212,2.548,227,1.765,230,1.494,236,4.835,259,2.31,270,1.988,301,3.162,306,3.377,315,1.33,322,1.913,328,3.803,338,1.27,349,2.233,357,1.31,413,3.681,425,1.931,426,1.737,550,3.914,614,1.723,699,3.258,711,3.549,712,4.203,716,3.377,770,4.273,877,1.784,1036,2.087,1043,3.336,1061,3.363,1075,3.092,1076,2.438,1096,3.42,1119,6.341,1334,1.789,1344,2.185,1518,5.066,1709,5.026,1713,2.142,1873,2.259,1874,2.3,1991,6.176,2235,2.3,2483,3.029,2516,2.892,3363,5.081,5737,3.487,5753,3.778,5758,3.876,5759,3.693,5891,6.562,7300,3.876,8571,4.127,8575,4.127,8577,4.127,8580,3.99,8581,4.127,8583,3.99,8585,3.876,8586,4.298,8598,4.528,8599,7.444,8600,4.876,8601,6.912,8602,4.876,8603,4.876,8604,7.444,8605,4.876,8606,4.876]],["t/3718",[0,1.008,88,2.048,113,3.811,115,2.361,125,3.612,131,1.888,210,5.523,228,3.344,244,3.421,294,3.923,316,3.624,328,5.875,349,2.242,352,2.193,356,2.482,429,4.295,688,4.046,702,7.217,913,4.463,971,4.581,1056,5.245,1105,7.643,1461,5.472,1518,3.733,1869,5.017,1939,4.631,1950,8.71,6228,6.865,7432,7.991]],["t/3720",[0,1.001,66,1.857,69,2.955,72,3.048,235,6.677,236,4.82,244,3.941,328,4.598,352,2.177,578,5.09,748,5.338,759,4.171,822,2.551,843,6.849,867,5.167,960,2.948,1036,3.852,1680,6.06,1950,6.817,1951,5.648,2211,5.433,2416,6.234,3351,6.677,5066,7.934,5567,6.974,5737,6.436,6229,7.617,8211,7.365,8573,8.358,8594,7.934,8607,9.001,8608,8.358]],["t/3722",[0,1.177,4,3.036,19,1.431,20,2.47,42,2.193,45,2.663,66,1.646,69,2.62,72,2.702,91,3.011,115,2.078,244,3.534,349,1.974,381,4.688,410,4.3,413,3.253,425,3.16,426,2.842,429,3.781,601,3.605,602,2.56,759,3.698,822,2.262,939,3.533,974,2.842,1036,3.415,1128,3.14,1144,2.657,1699,4.099,1873,3.698,1874,3.764,1939,4.076,1951,5.007,2000,6.529,2460,5.007,3011,5.919,3922,4.416,4079,4.448,4082,5.919,5522,5.061,6226,6.753,6229,6.753,8601,9.831,8608,7.41,8609,7.98,8610,7.98]],["t/3724",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/3727",[0,0.987,6,2.214,19,1.591,37,3.089,49,3.744,84,4.638,106,5.69,127,4.224,185,3.945,315,2.42,349,2.806,356,2.429,549,4.666,551,6.242,572,5.628,595,4.666,777,6.978,913,4.369,971,4.484,1003,4.559,1039,7.511,1228,4.878,1251,6.876,1328,4.112,1972,7.054,2210,4.846,3112,7.745,3249,6.242,3250,8.241,3341,7.453,4418,7.823,6197,7.823]],["t/3729",[6,2.278,18,3.866,88,2.062,172,6.422,213,5.369,225,3.122,243,4.8,336,4.306,339,4.495,342,2.677,549,7.003,551,6.422,614,3.227,680,5.729,692,3.593,718,3.76,913,4.495,1049,6.068,1076,5.776,1817,7.471,1870,5.992,1942,4.194,2211,5.512,2347,8.048,3249,6.422,6289,8.478,8611,9.131,8612,9.131,8613,9.131]],["t/3732",[19,1.865,20,2.163,33,3.603,39,3.716,42,3.442,45,3.473,66,2.147,91,3.927,320,3.776,394,4.682,939,4.608,1517,4.953,1520,5.346,2173,9.663,3112,7.103,3341,5.884]],["t/3734",[0,1.476,22,2.829,28,2.311,30,1.98,41,2.31,66,2.221,70,6.181,143,4.136,193,2.971,195,4.072,196,3.441,197,3.556,244,3.203,350,3.348,352,1.98,359,3.793,735,3.182,752,5.594,822,3.623,3358,7.573,8614,11.172,8615,10.324,8616,10.767,8617,9.112,8618,9.112]],["t/3736",[0,1.392,6,2.596,41,2.233,70,7.19,244,3.095,664,4.344,752,5.407,822,3.55,1068,4.173,3358,7.32,8615,7.881,8617,7.881,8618,8.807,8619,9.663]],["t/3738",[0,1.25,3,4.092,6,2.184,41,2.413,70,6.456,244,3.345,291,5.816,390,3.954,409,3.251,664,3.653,752,4.547,822,3.187,1068,3.51,1925,9.931,1926,8.147,3358,7.91,8615,6.628,8617,6.628,8618,7.407,8619,8.127,8620,8.127]],["t/3740",[0,1.108,3,2.654,19,0.851,20,2.072,41,2.138,49,3.077,70,5.721,83,3.431,90,2.841,96,2.191,101,4.018,102,3.116,109,1.105,174,1.665,182,2.399,213,5.223,219,2.412,230,2.234,244,2.964,276,3.011,278,2.527,291,4.847,296,1.898,301,3.079,315,1.989,358,1.949,381,3.23,383,3.365,390,2.564,409,2.109,430,1.421,440,3.155,448,2.888,549,6.414,591,4.464,593,3.011,614,3.139,619,3.255,664,3.045,735,1.846,752,3.79,822,2.824,841,2.345,890,4.185,896,3.289,912,3.011,990,2.496,1128,1.868,1129,2.61,1155,2.374,1276,3.197,1338,5.13,1515,3.197,1548,2.628,1796,4.185,1895,3.155,1925,9.239,1926,7.939,1982,2.949,2125,5.516,2192,3.456,2278,3.044,2316,2.575,2434,3.241,3358,7.009,3400,4.018,4158,4.911,4262,4.185,4659,4.018,5048,4.409,7443,4.409,8615,5.524,8617,5.524,8620,6.773,8621,4.748,8622,8.434,8623,4.748,8624,4.409]],["t/3742",[6,2.618,19,1.881,20,2.181,137,5.09,138,6.334,332,7.946,430,3.141,549,5.516,841,3.374,1051,6.973,1096,6.194,1344,4.702,1566,5.14,2904,6.805]],["t/3744",[0,1.289,27,4.531,41,1.63,73,2.949,122,2.46,166,4.148,223,7.706,238,4.818,241,3.391,274,5.262,280,6.429,322,2.98,349,1.879,352,1.837,430,2.274,614,2.685,664,3.171,708,5.432,752,3.947,1077,3.599,1344,4.591,1519,6.055,1547,4.205,1566,5.019,1626,4.719,2169,4.296,2218,5.262,2235,3.583,2256,4.328,2274,4.986,2306,6.216,6398,10.151,8615,8.778,8617,5.753,8622,6.429,8625,6.696,8626,9.512,8627,10.245]],["t/3746",[0,1.395,6,2.23,22,2.348,27,4.389,41,1.917,116,3.573,223,7.794,238,5.668,280,7.564,664,3.731,752,4.644,1519,6.381,2402,6.769,6398,10.814,8435,11.652,8615,9.503,8617,6.769,8622,7.564,8625,7.878,8626,8.299]],["t/3748",[3,4.129,33,3.073,41,1.904,69,2.913,218,2.571,390,3.12,409,3.28,664,3.705,752,4.611,769,10.213,1334,3.256,5828,12.641,6398,11.735,8615,6.721,8617,6.721,8622,7.511,8628,12.507]],["t/3750",[19,1.395,30,1.883,35,2.792,41,2.517,49,3.284,66,2.585,69,2.555,70,5.978,82,4.558,185,3.46,263,6.176,315,2.123,340,2.586,440,6.92,549,4.092,664,3.249,752,4.044,950,7.363,1036,3.331,1055,5.391,1058,3.813,1330,3.474,1334,2.856,1713,4.575,1728,5.611,4291,9.601,5052,6.861,5291,9.179,8615,5.895,8617,5.895,8629,11.734,8630,10.413,8631,11.734,8632,10.413]],["t/3752",[35,2.852,69,4.166,73,1.373,88,1.219,162,6.671,213,6.254,227,2.908,263,7.525,315,2.618,349,1.987,453,2.643,549,5.591,576,3.228,692,1.678,759,4.928,772,5.374,822,3.741,971,2.726,974,1.922,1003,2.772,1061,5.732,1063,7.384,1330,3.586,1938,3.287,2211,3.257,3497,8.453,5052,9.374,5567,6.225,8614,5.01,8618,4.566,8625,11.185,8633,5.396,8634,10.635,8635,10.635,8636,8.035,8637,8.035]],["t/3754",[0,1.497,6,1.954,41,2.695,60,2.379,61,3.538,110,3.101,131,1.631,244,3.736,352,2.529,518,3.745,549,5.497,567,3.936,822,3.816,824,5.912,1030,4.645,1129,4.305,1153,3.837,1708,4.429,2496,11.072,2532,5.931,2543,8.102,3112,5.346,3173,10.277,3341,4.429,5233,9.317,8638,7.832,8639,7.832,8640,7.832]],["t/3756",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/3758",[0,1.202,4,3.675,19,1.477,20,1.713,77,5.754,110,3.263,218,3.496,294,3.566,375,4.887,377,4.592,378,4.036,379,5.02,380,4.257,413,4.92,426,3.852,444,3.488,514,4.663,619,5.387,841,2.649,879,5.618,1129,4.529,1132,5.624,1226,3.94,1328,3.818,1699,4.233,1873,3.818,1874,3.886,2350,3.886,2378,5.225,2633,4.73,2742,5.996,4240,5.996,6271,7.651,6979,7.263]],["t/3760",[174,3.59,228,3.777,386,5.557,437,3.518,478,7.754,1096,4.703,1251,7.933,1657,9.024,2350,6.293,2590,5.747,2633,7.119,2681,5.971,2721,5.259,6272,9.506,8641,10.238]],["t/3762",[30,0.946,39,1.397,42,1.075,45,2.091,66,1.617,91,1.476,131,0.815,185,1.739,196,1.644,197,1.699,218,3.03,227,2.268,270,1.595,304,1.281,376,5.637,378,6.155,412,7.054,437,2.153,444,1.656,448,1.549,664,1.633,712,4.078,771,5.065,828,3.932,830,6.075,939,1.732,1040,2.203,1054,2.481,1226,6.008,1417,6.647,1433,5.302,1434,8.117,1749,2.481,2236,2.406,2378,7.24,2650,2.847,2651,2.847,2667,4.98,2669,5.533,2692,7.922,2721,4.603,2733,3.492,2734,4.279,2737,2.34,2738,2.212,2739,2.34,2743,2.18,2744,2.212,3226,5.915,3269,3.376,3559,4.48,6021,2.634,6022,7.269,6024,2.6,6027,2.095,8642,2.567,8643,2.67,8644,2.361,8645,2.455,8646,2.797,8647,3.912,8648,7.212,8649,6.497,8650,6.152,8651,5.818,8652,3.912,8653,3.912,8654,3.912,8655,3.912,8656,3.912]],["t/3764",[2,4.64,3,1.659,42,1.253,174,1.599,218,3.235,230,1.397,296,1.823,357,1.225,376,6.018,378,6.398,412,7.213,437,1.567,444,1.931,664,1.904,818,1.397,830,5.943,877,1.668,1040,2.486,1043,2.043,1167,3.07,1226,6.246,1425,5.785,1434,8.195,2417,9.046,2650,3.319,2669,5.907,2688,5.354,2692,8.458,2721,3.632,3226,6.315,3269,2.457,4461,3.383,6021,3.07,6022,8.106,6024,3.03,6172,4.02,6313,5.785,8353,5.354,8650,6.567,8657,6.565,8658,4.56,8659,11.168,8660,4.56,8661,4.56,8662,4.56,8663,6.232,8664,4.56,8665,4.56]],["t/3766",[2,5.008,3,3.441,5,1.443,6,0.622,20,0.519,38,0.745,42,0.685,82,1.884,88,0.563,218,3.235,376,6.26,378,6.398,383,3.851,386,1.118,412,7.083,437,2.323,444,1.056,448,2.249,451,3.028,459,1.371,496,2.935,619,4.416,664,1.041,830,6.378,992,2.277,997,4.242,1040,1.514,1077,1.182,1167,4.551,1226,6.246,1393,3.422,1434,8.195,2256,1.421,2383,3.133,2386,3.336,2390,1.565,2552,3.644,2590,1.4,2626,1.492,2641,1.679,2644,1.815,2653,1.754,2654,4.682,2669,5.907,2688,7.781,2692,8.458,2721,2.212,3226,6.315,3269,3.643,6021,1.679,6022,6.598,6024,1.657,6313,9.938,8198,3.336,8648,7.498,8649,1.549,8650,1.467,8666,2.111,8667,1.85,8668,3.795,8669,2.494,8670,8.373,8671,8.373,8672,7.339,8673,2.494,8674,2.494,8675,2.494,8676,2.494,8677,2.494,8678,2.494,8679,5.007,8680,5.007,8681,2.494,8682,2.494,8683,2.494,8684,2.494,8685,2.494,8686,2.494]],["t/3768",[2,2.114,20,0.373,27,2.608,30,0.434,42,0.885,66,0.904,77,1.714,98,0.649,109,0.417,159,1.038,174,0.629,181,0.87,184,0.875,196,0.754,197,0.779,212,0.938,218,3.067,227,1.166,228,0.662,230,0.55,241,0.801,270,0.731,294,0.777,304,0.588,320,0.651,333,3.634,338,0.467,352,0.434,357,1.177,376,5.706,378,6.199,386,1.443,390,0.631,412,6.403,437,3.042,444,1.364,448,0.711,496,1.664,617,0.502,619,3.328,664,1.345,683,0.727,712,2.563,771,3.182,799,3.484,830,5.634,877,1.604,896,1.243,972,1.842,997,1.126,1040,2.166,1077,0.85,1091,5.426,1226,6.052,1320,1.39,1376,6.704,1393,2.56,1397,2.726,1398,3.468,1425,2.636,1433,2.726,1434,8.328,1548,0.993,1631,4.774,1792,1.083,1878,1.359,1942,0.824,2382,1.519,2498,6.572,2503,1.093,2590,1.808,2650,2.344,2651,2.344,2667,2.56,2668,2.266,2669,5.6,2692,8.018,2721,3.164,2727,1.243,2733,1.795,2734,2.393,2737,1.073,2738,1.015,2739,1.927,2743,1,2895,5.777,3226,4.774,3269,4.771,3338,2.231,3462,2.266,3559,2.303,3711,1.164,4461,5.531,4626,2.303,5688,1.519,6021,2.169,6022,5.995,6024,2.141,6027,3.993,6356,1.468,6357,2.439,8198,2.496,8399,2.636,8642,1.178,8643,1.225,8644,1.083,8645,1.126,8646,1.283,8648,7.265,8649,6.576,8650,6.226,8651,11.033,8687,1.794,8688,1.794,8689,5.244,8690,7.456,8691,2.991,8692,1.794,8693,2.726,8694,1.794,8695,1.794,8696,2.726,8697,1.794,8698,1.794,8699,1.794,8700,1.794,8701,1.794,8702,1.794,8703,1.794,8704,1.794,8705,1.794,8706,2.636,8707,1.794,8708,2.991,8709,1.794,8710,1.794]],["t/3770",[0,0.792,2,3.252,3,1.539,6,0.331,30,1.023,36,2.238,41,1.2,66,1.702,82,0.58,85,0.542,196,1.778,197,1.838,218,3.373,227,2.413,243,1.285,270,1.725,304,1.386,319,0.947,325,1.148,349,0.328,352,0.32,355,0.52,356,0.363,376,4.447,378,5.655,390,1.196,409,1.432,412,0.714,444,1.791,448,0.525,450,1.658,664,1.766,693,0.53,712,3.433,714,1.449,718,2.537,749,1.128,759,4.225,766,0.983,771,5.592,818,1.713,822,0.693,830,4.391,945,2.393,960,1.114,972,2.803,1038,2.717,1144,0.814,1226,5.176,1330,3.53,1340,1.168,1346,0.85,1383,2.488,1386,2.198,1398,3.213,1434,7.673,1674,4.728,1713,0.582,1728,0.634,1749,2.683,1788,0.815,1790,0.637,1803,2.7,1919,0.547,1920,0.733,1942,3.063,2274,1.604,2367,3.382,2650,3.079,2652,3.729,2669,3.526,2692,5.049,2721,4.684,2733,3.716,2734,5.113,2737,2.531,2738,2.392,2739,2.531,2743,3.716,2744,2.392,2798,1.003,2806,3.828,2896,0.761,2908,2.211,2980,2.888,3002,2.261,3192,4.852,3226,3.77,3269,5.584,3350,3.262,3359,1.779,3372,3.818,3462,2.976,3743,2.783,3747,0.983,3820,2.154,3840,3.204,4079,0.738,4103,1.894,4261,1.168,4265,1.168,4461,2.523,4959,3.078,5105,1.003,5497,1.748,5498,1.779,5656,2.976,6022,6.618,6027,2.653,6286,1.585,6318,4.897,6366,3.025,6396,3.818,7121,2.154,7249,1.23,8399,4.577,8642,2.777,8643,2.888,8644,3.719,8645,2.135,8648,5.376,8649,3.474,8650,3.289,8711,4.334,8712,3.58,8713,1.325,8714,5.984,8715,3.278,8716,3.278,8717,3.204,8718,3.138,8719,6.667,8720,1.325,8721,1.894,8722,4.601,8723,1.851,8724,1.851,8725,1.894,8726,1.894,8727,1.894,8728,1.851,8729,1.894,8730,1.851,8731,1.851,8732,1.325,8733,1.325,8734,1.943,8735,1.325,8736,1.325,8737,1.325,8738,3.159,8739,2.998,8740,2.269,8741,2.154,8742,2.269,8743,2.269,8744,2.269,8745,2.269,8746,2.269,8747,2.269,8748,2.269,8749,2.269,8750,2.269,8751,2.269,8752,2.269,8753,2.269,8754,2.154,8755,1.325,8756,4.368,8757,2.636,8758,1.325,8759,1.325,8760,1.325,8761,1.325,8762,3.729,8763,1.325,8764,1.325]],["t/3772",[2,3.528,3,0.844,18,0.982,27,1.415,30,0.561,33,0.803,39,1.92,42,1.768,45,1.794,66,1.109,76,0.654,88,0.913,109,0.941,122,0.751,196,0.975,197,1.008,218,3.154,231,0.835,306,5.75,333,1.971,338,0.604,339,1.142,350,0.949,376,5.867,378,6.209,412,2.897,437,0.797,444,0.982,447,2.464,448,2.548,459,1.276,617,1.131,621,1.071,662,2.892,664,0.969,785,4.872,818,3.738,830,5.794,852,0.928,972,0.975,1040,1.422,1226,6.061,1340,3.565,1361,1.131,1434,8.827,1631,1.388,1717,1.584,1790,1.115,1919,0.959,1986,1.388,2650,1.689,2669,5.758,2692,8.245,2721,6.456,2975,1.798,3226,6.002,3269,2.179,3462,1.632,3552,3.423,3910,1.488,6021,3.619,6022,6.299,6024,3.572,6025,4.848,6027,2.878,6318,3.215,6851,3.423,6852,1.964,8399,3.309,8648,3.693,8649,2.512,8650,6.063,8657,3.755,8667,1.721,8668,3.565,8672,3,8689,2.845,8696,10.726,8708,3.755,8712,5.445,8765,4.991,8766,3.619,8767,2.321,8768,1.798,8769,2.321,8770,1.721,8771,2.321,8772,2.321,8773,9.578,8774,2.321,8775,2.321,8776,2.321,8777,2.321,8778,2.321,8779,2.321,8780,2.321,8781,3.755,8782,2.321,8783,2.321]],["t/3774",[3,2.674,19,0.507,30,0.684,42,0.777,44,1.4,66,1.287,82,5.492,88,0.639,108,2.282,116,1.131,122,0.916,131,0.589,174,0.992,196,1.189,197,1.229,218,3.023,227,1.735,230,0.866,241,2.14,270,1.153,304,0.926,340,0.94,356,0.774,357,0.76,376,5.991,378,6.273,383,3.39,412,4.432,437,0.972,444,1.197,446,3.428,447,7.644,448,1.899,451,3.372,619,3.671,658,0.972,664,1.181,692,0.88,712,3.421,771,4.249,828,3.009,830,5.916,877,1.035,956,2.139,960,0.926,1040,1.686,1047,1.064,1167,4.948,1226,6,1548,1.565,1549,2.192,1749,3.957,2366,9.727,2383,3.489,2561,2.82,2626,1.692,2641,1.904,2644,2.058,2653,1.989,2669,5.52,2701,8.833,2721,4.225,2733,2.672,2734,3.407,2737,1.692,2738,1.599,2739,1.692,2743,1.576,2744,1.599,2828,2.192,3226,5.902,3269,2.584,3559,3.428,4626,3.428,6021,1.904,6022,6.977,6024,1.88,7609,5.281,8642,3.147,8643,1.931,8644,1.707,8645,1.775,8646,2.022,8648,7.203,8649,5.109,8650,4.837,8667,2.098,8670,2.394,8671,2.394,8672,6.101,8679,5.501,8680,5.501,8718,3.556,8784,1.959,8785,2.493,8786,2.828,8787,2.828,8788,2.828,8789,2.828,8790,2.828,8791,2.828,8792,2.828,8793,2.828,8794,2.828]],["t/3777",[20,1.338,35,3.496,97,4.083,110,2.549,115,1.676,302,4.942,322,2.526,340,2.139,349,2.26,355,4.166,356,1.762,386,2.885,426,2.293,430,3.794,437,2.213,526,5.961,614,2.275,688,2.873,692,2.002,718,4.759,733,5.268,734,5.449,735,2.503,754,2.776,818,1.972,822,1.825,956,2.207,960,2.109,963,4.528,967,4.693,972,3.84,1030,3.818,1036,2.755,1038,2.84,1047,2.423,1054,5.794,1344,4.094,1566,4.475,1705,2.933,1749,4.083,1919,2.66,2475,3.818,2561,3.786,2721,6.512,2806,3.696,2980,4.395,3269,3.47,3372,4.395,3462,4.528,3866,4.776,6357,4.876,6396,4.395,6799,4.685,8642,4.225,8644,3.886,8714,5.996,8715,4.988,8716,4.988,8718,4.776,8795,5.978]],["t/3779",[0,0.831,6,1.866,20,1.02,37,3.798,38,1.465,41,2.07,44,3.701,47,0.97,73,2.125,88,1.689,93,1.598,96,1.341,115,0.757,116,1.162,131,0.605,137,4.917,166,1.587,193,2.714,230,1.95,231,2.692,244,1.459,252,2.283,293,3.775,296,1.162,308,1.222,309,1.11,310,1.795,315,0.793,322,1.14,325,1.365,338,0.757,340,1.63,349,1.575,352,2.021,355,1.925,376,2.644,378,2.403,403,2.52,426,1.035,430,3.034,468,1.656,526,2.754,556,1.682,598,1.609,614,1.027,617,0.813,621,3.45,688,1.297,692,1.526,702,1.824,718,2.02,735,2.474,741,2.181,759,3.871,830,2.611,845,2.861,867,1.668,877,1.063,879,1.51,881,2.816,913,3.134,960,2.449,972,3.144,1028,2.885,1036,1.244,1038,2.808,1050,1.739,1053,1.267,1077,1.377,1092,2.013,1124,1.094,1144,2.12,1226,2.346,1344,1.302,1464,2.115,1533,1.957,1548,1.609,1566,1.424,1602,1.824,1606,1.51,1614,1.528,1629,1.308,1635,3.182,1750,1.984,1769,2.156,1886,1.824,1919,1.201,1954,3.715,1986,1.739,2061,3.217,2233,1.668,2235,1.371,2241,2.715,2256,1.656,2291,2.201,2352,4.152,2417,3.398,2438,1.984,2623,2.044,2681,3.713,2721,4.292,2806,4.796,2980,4.345,3110,1.668,3125,3.22,3264,2.31,3362,1.907,3372,4.345,3462,5.877,3485,3.398,3866,2.156,4061,2.115,4079,2.734,4200,2.252,5016,4.152,5103,3.451,5104,3.9,5105,3.715,6022,4.834,6219,2.31,6396,4.345,6799,2.115,8353,3.715,8428,7.67,8521,4.014,8642,1.907,8644,3.843,8648,2.816,8714,5.948,8715,4.933,8716,4.933,8718,5.548,8734,3.9,8784,8.923,8796,2.562,8797,4.152,8798,4.152,8799,2.562,8800,2.46,8801,2.46,8802,2.906,8803,6.592,8804,5.911]],["t/3781",[0,1.118,6,2.932,35,2.285,41,1.254,42,1.606,44,2.892,116,4.698,131,1.217,136,2.465,193,3.092,244,1.738,315,1.594,322,2.292,349,1.445,352,1.413,355,3.343,430,3.672,448,2.314,526,4.783,614,3.011,718,2.406,754,2.519,818,1.79,822,1.656,845,3.408,956,2.003,960,2.791,963,5.993,972,3.582,1030,5.054,1036,3.647,1038,2.578,1040,2.996,1713,2.568,1749,3.706,1939,2.985,1986,3.496,2235,2.756,2314,7.511,2561,5.011,2721,6.668,3004,3.747,3258,7.621,3269,3.149,3322,4.946,6021,3.935,6022,6.395,6024,3.883,6275,4.645,6356,4.782,6357,6.453,7343,3.989,8642,3.835,8648,3.355,8667,4.335,8714,3.835,8784,7.655,8785,5.151,8795,5.426,8805,5.844,8806,5.844,8807,10.057,8808,5.151,8809,5.844]],["t/3783",[0,0.524,2,3.094,3,1.009,6,2.028,19,0.497,30,0.671,35,0.744,38,1.408,41,1.744,47,1.573,66,1.269,77,1.476,85,1.134,109,0.645,115,1.228,116,1.885,122,1.991,136,1.17,188,1.867,196,1.166,197,1.204,212,1.449,218,2.561,227,1.706,270,1.13,304,0.908,309,1.059,312,5.076,315,0.756,320,1.006,338,0.722,349,0.686,376,4.381,378,5.251,390,2.162,409,1.363,412,5.776,413,1.13,430,0.83,437,0.953,444,3.071,447,6.53,448,1.098,459,1.524,614,3.901,617,2.028,619,1.238,621,1.279,692,0.862,712,3.678,741,1.233,759,1.285,771,4.2,819,2.1,830,4.326,881,2.706,882,1.187,926,1.778,963,7.764,967,1.424,1006,3.837,1032,2.347,1034,1.58,1036,1.187,1093,1.82,1128,1.091,1129,1.524,1133,1.778,1167,1.867,1226,5.126,1314,1.705,1334,1.73,1393,3.747,1645,2.204,1728,2.254,1741,4.893,1749,3.9,1759,2.796,1790,1.332,1793,1.556,1889,1.441,1919,1.146,2061,1.401,2197,1.95,2263,1.401,2264,1.379,2312,6.735,2669,4.3,2681,1.617,2688,3.57,2701,6.88,2721,4.176,2733,2.627,2734,3.358,2737,1.659,2738,1.568,2739,1.659,2743,1.545,2744,1.568,2980,1.893,3125,3.094,3194,2.444,3226,4.597,3269,1.494,3338,1.92,3536,2.1,6022,5.989,6080,5.421,6140,2.269,6318,3.747,6357,2.1,7372,2.575,8198,3.653,8328,5.71,8642,1.82,8643,1.893,8644,1.674,8645,1.74,8646,1.983,8648,6.153,8649,5.05,8650,4.781,8663,9.448,8668,4.155,8672,6.03,8714,7.244,8717,6.157,8784,3.265,8810,6.15,8811,2.773,8812,2.773,8813,2.773,8814,2.773,8815,2.773,8816,4.714,8817,4.714,8818,2.773,8819,2.575]],["t/3785",[0,1,20,1.636,41,2.11,85,2.575,118,1.448,135,3.187,137,3.817,193,3.263,218,1.824,319,2.815,325,1.848,349,0.974,355,3.087,376,2.121,378,4.405,409,1.82,412,3.393,447,5.991,693,3.595,735,4.281,759,4.86,766,4.671,818,1.929,822,1.785,830,2.095,841,1.266,960,2.062,972,2.647,1096,1.808,1115,2.034,1144,2.097,1226,4.3,1674,2.47,1713,1.73,1728,1.882,1788,2.421,1790,3.025,1919,2.601,1920,2.179,1942,3.615,1945,6.138,1954,4.769,2137,2.47,2256,2.243,2274,2.583,2378,4.99,2720,3.129,2806,5.162,2896,2.26,2908,4.113,2980,6.138,3002,5.229,3362,2.583,3372,5.372,3462,6.325,3559,2.815,3743,6.439,4461,5.837,4959,4.888,5105,4.769,6022,5.69,6396,5.372,8353,4.769,8644,5.428,8648,6.022,8711,3.05,8714,7.509,8715,6.097,8716,6.097,8718,5.837,8734,5.005,8739,5.55,8741,3.47,8754,3.47,8756,6.937,8757,6.097,8762,3.47,8784,2.726,8800,3.331,8801,3.331,8820,3.47,8821,3.936,8822,3.936,8823,3.655,8824,9.74,8825,3.655,8826,3.655,8827,8.669,8828,3.936,8829,3.936]],["t/3787",[72,3.524,127,4.953,153,4.47,437,3.576,602,3.339,692,3.236,914,6.282,971,5.258,1054,7.943,1291,5.316,1328,4.822,1970,8.272,2721,6.902,8642,6.83]],["t/3789",[30,2.602,66,2.636,227,3.894,270,4.386,427,6.824,712,4.476,2737,6.437,2738,6.084,2739,6.437,6022,6.226,8642,7.062,8643,7.345]],["t/3791",[22,0.925,30,1.764,33,1.219,37,2.539,39,2.055,41,1.565,45,1.175,54,3.355,66,2.409,73,1.464,88,0.795,115,0.917,161,3.025,196,4.612,197,4.765,227,3.607,270,2.974,293,2.088,304,2.389,312,2.021,350,1.44,357,0.946,359,1.631,430,1.054,437,1.21,452,1.264,481,1.897,496,1.819,602,1.129,653,3.79,688,1.571,692,1.095,712,5.314,745,2.345,771,6.599,896,2.438,940,5.26,1054,2.233,1075,2.233,1077,1.668,1605,7.52,1692,4.187,1889,1.829,2350,2.713,2533,8.785,2633,2.021,2651,2.562,2683,3.873,2721,1.808,2733,5.861,2734,6.198,2737,4.364,2738,4.125,2739,4.364,2743,4.066,2744,4.125,2761,3.269,2829,2.3,2843,4.267,2844,6.568,2848,4.221,3269,3.931,3469,5.053,3561,3.103,4191,4.626,4246,2.728,4327,2.798,4924,2.611,5334,2.979,5543,2.517,5581,3.776,5696,2.979,5697,7.822,5698,9.254,6022,7.059,8642,5.529,8643,4.98,8644,4.404,8645,4.578,8646,5.216,8830,3.521,8831,7.295]],["t/3793",[110,3.16,181,3.871,231,2.873,315,2.887,316,2.515,341,3.32,349,1.974,355,3.13,386,4.744,437,2.742,469,4.862,474,4.3,621,3.682,699,3.493,718,4.359,735,3.102,817,6.175,818,3.243,822,2.262,841,2.566,879,4.146,1006,4.221,1066,4.733,1144,2.657,1290,6.529,1749,6.714,1792,4.817,1945,5.447,2153,6.343,2681,4.654,2721,6.5,2737,4.774,3269,4.3,7758,6.043,8643,8.11,8644,4.817,8645,5.007,8646,5.706,8711,6.183,8714,5.237,8832,6.753,8833,7.41,8834,7.98]],["t/3795",[30,1.573,37,2.264,39,2.323,41,1.395,66,2.203,77,3.461,88,1.469,96,3.001,115,1.694,196,2.734,197,2.825,227,2.354,230,1.993,231,2.341,270,2.651,304,2.13,338,1.694,366,4.508,702,4.081,703,3.125,712,5.097,758,3.825,771,6.329,877,2.38,882,2.784,888,5.04,1054,4.125,1068,2.608,1518,2.678,1699,3.341,1718,9.413,1772,5.166,2076,8.348,2105,4.651,2232,4.734,2350,3.068,2721,5.486,2733,5.129,2734,5.831,2737,3.891,2738,3.678,2739,5.505,2743,3.625,3004,4.17,3070,5.17,3269,3.505,3313,5.968,4949,4.734,5600,4.825,6022,6.717,6285,5.505,8642,4.269,8643,4.44,8644,3.926,8645,4.081,8646,4.651,8835,6.504,8836,6.504,8837,6.504,8838,9.202]],["t/3798",[35,3.067,36,2.559,97,3.069,110,1.916,186,4.154,218,3.447,231,2.664,286,6.453,299,5.495,302,3.444,316,1.525,349,1.83,355,3.525,356,1.325,386,5.125,426,1.724,430,3.562,437,1.663,474,2.608,496,3.823,526,4.154,621,4.146,718,1.992,754,3.191,818,2.267,822,1.371,841,1.556,875,2.382,914,2.921,960,1.585,967,3.802,972,2.034,993,3.522,1036,2.071,1038,2.134,1272,3.303,1334,2.715,1344,3.316,1386,2.514,1506,3.037,1566,3.625,1705,4.94,1749,7.253,1919,1.999,1939,2.472,1966,4.918,2356,5.052,2475,2.87,2590,5.044,2684,3.665,2698,3.959,2721,6.305,2748,3.846,2806,2.778,3260,3.216,3269,3.988,3372,3.303,3866,3.589,4013,3.959,4014,4.095,4715,4.427,5047,8.213,5496,4.918,5497,3.46,5498,3.522,5499,3.846,5619,3.665,6286,3.138,6366,3.46,6396,3.303,6799,3.522,8644,2.921,8645,3.036,8721,3.749,8723,3.665,8724,3.665,8725,3.749,8726,3.749,8727,3.749,8728,3.665,8729,3.749,8730,3.665,8731,3.665,8839,4.265,8840,4.265]],["t/3800",[3,2.015,20,1.151,82,2.424,110,2.193,218,1.604,231,2.948,348,2.768,378,2.713,381,2.452,383,2.555,386,5.393,390,1.947,409,1.601,413,2.257,426,1.972,430,3.441,437,3.35,448,2.193,450,2.699,486,2.713,496,2.861,619,2.471,621,5.303,741,2.462,759,4.516,849,5.194,875,4.032,879,5.064,906,2.636,980,4.193,1038,2.442,1054,5.194,1191,4.193,1272,3.78,1317,5.057,1330,2.471,1346,3.55,1471,2.713,1506,2.272,1552,4.881,1600,3.959,1699,2.844,1749,6.83,1966,6.477,2356,3.78,2498,4.881,2590,3.108,2684,4.193,2690,6.906,2721,6.182,2722,4.401,2749,5.761,3026,3.895,3074,5.142,4457,4.881,4459,4.881,5047,6.203,5554,8.249,6285,4.686,8839,4.881,8840,4.881,8841,5.537,8842,5.537,8843,5.537,8844,9.747,8845,4.881,8846,5.537,8847,5.537,8848,5.537,8849,5.537,8850,5.537,8851,5.537,8852,5.537,8853,5.537,8854,5.537,8855,5.142,8856,7.605,8857,5.537]],["t/3802",[0,0.915,6,1.658,20,0.876,36,2.947,37,3.538,38,1.258,41,1.894,44,3.288,47,0.812,73,1.911,88,1.501,93,1.337,96,1.122,115,0.633,116,0.972,131,0.506,137,4.532,166,1.328,218,2.706,230,1.707,231,2.392,244,1.253,252,1.96,293,3.305,296,0.972,308,1.022,309,0.928,310,1.541,315,0.663,322,0.954,325,1.142,338,0.633,340,0.808,349,1.378,352,1.817,354,1.616,355,1.652,376,4.434,378,4.031,390,1.481,403,2.164,409,1.218,426,0.866,430,2.796,448,1.668,468,1.385,526,2.365,556,1.407,598,1.346,614,0.859,617,0.68,621,3.066,688,1.085,692,0.756,702,1.526,735,2.166,741,1.873,749,1.943,759,4.091,828,2.643,830,4.379,845,2.457,867,1.396,877,0.89,879,1.264,881,2.418,913,2.743,960,2.176,972,1.771,1028,2.477,1038,2.458,1050,1.455,1053,1.06,1077,1.152,1092,1.684,1124,0.915,1144,1.855,1226,3.935,1344,1.09,1386,2.189,1464,1.77,1533,1.637,1548,1.346,1566,1.191,1602,1.526,1606,1.264,1614,1.279,1629,1.094,1635,2.732,1705,2.538,1749,2.671,1750,1.66,1769,1.804,1886,1.526,1919,1.005,1954,3.19,1986,1.455,2061,2.816,2233,1.396,2235,1.147,2241,2.331,2256,1.385,2291,1.842,2352,3.565,2438,1.66,2623,1.711,2668,4.674,2681,3.25,2721,3.859,2806,4.313,3063,2.836,3110,1.396,3125,2.765,3264,1.933,3269,4.759,3362,1.596,3372,3.804,3559,4.751,3866,1.804,4061,1.77,4079,2.348,4200,1.884,5016,3.565,5103,2.963,5104,3.348,5105,3.19,5497,3.984,5498,4.055,6027,2.984,6219,1.933,6286,3.614,6366,3.984,6396,3.804,6799,1.77,8428,6.964,8521,3.447,8644,1.468,8645,3.497,8648,2.418,8649,2.616,8650,2.477,8721,4.318,8723,5.689,8724,4.22,8725,5.149,8726,4.318,8727,4.318,8728,4.22,8729,4.318,8730,4.22,8731,4.22,8734,3.348,8796,2.144,8799,2.144,8800,2.058,8801,2.058,8803,5.857,8804,5.174,8858,8.687,8859,4.912,8860,3.447,8861,6.964,8862,3.565,8863,3.565,8864,3.565,8865,2.432]],["t/3804",[5,6.477,37,4.551,41,2.77,47,1.369,51,7.53,73,1.044,106,2.63,122,1.328,136,1.731,166,2.24,192,2.885,339,2.02,340,1.363,352,1.574,377,2.286,409,2.338,430,1.228,448,2.577,481,2.211,567,2.062,692,1.276,699,5.651,997,4.083,1003,2.107,1028,3.826,1298,2.548,1303,3.107,1481,5.042,1629,2.928,1691,7.601,1749,8.388,2061,2.073,2390,4.083,2479,2.692,2626,6.005,2627,4.756,2641,4.381,2646,3.179,2647,3.107,2650,2.985,2651,2.985,2653,2.885,2654,2.841,2655,3.261,2656,3.357,2657,3.357,2658,3.357,2659,3.472,2660,3.357,2661,3.357,2681,2.393,2721,6.863,2748,5.172,2836,6.582,3269,6.958,4791,7.79,5394,3.179,8666,6.844,8667,4.827,8858,9.625]],["t/3806",[3,1.063,6,0.729,20,0.335,30,1.191,35,0.783,37,1.016,38,0.872,42,0.802,44,3.161,66,1.937,69,1.875,73,1.253,76,1.129,82,2.156,83,1.549,88,0.364,109,0.374,110,0.637,111,0.846,115,1.044,116,0.643,136,0.679,153,1.254,166,0.879,196,1.685,197,0.699,218,2.801,227,1.057,241,0.718,270,0.656,298,2.85,304,0.527,309,0.615,315,1.557,316,2.2,349,0.722,359,1.353,376,5.474,378,5.866,381,1.775,390,0.566,413,2.328,425,0.637,426,0.573,430,0.874,437,1.962,444,1.697,446,2.088,450,1.954,451,2.054,496,0.832,606,0.917,619,0.718,664,1.673,688,1.303,692,0.501,702,1.01,712,2.375,759,0.746,771,2.95,828,1.833,830,5.145,881,0.924,966,3.077,967,1.5,972,0.677,974,2.486,992,6.334,997,1.01,1032,1.362,1034,0.917,1040,1.732,1058,0.789,1082,3.621,1157,0.477,1167,1.966,1226,5.726,1256,1.056,1334,2.095,1346,1.872,1376,2.212,1398,5.892,1425,2.389,1433,2.471,1471,0.789,1691,1.219,1705,3.18,1708,1.651,1749,5.051,1942,0.739,2024,8.423,2061,0.813,2075,0.822,2197,1.132,2316,1.584,2388,2.212,2505,1.084,2516,0.955,2563,1.219,2639,4.539,2669,5.114,2679,1.732,2681,0.939,2721,4.304,2733,1.628,2734,2.188,2737,0.963,2738,0.91,2739,0.963,2743,0.897,2744,0.91,3125,1.056,3183,1.056,3226,5.467,3269,4.896,3423,1.194,5139,6.78,6021,1.966,6022,6.325,6024,1.941,6084,1.495,6140,3.28,6280,2.389,6313,2.389,8093,7.385,8198,2.263,8642,1.056,8643,1.099,8644,0.972,8645,1.01,8646,1.151,8648,6.874,8649,6.006,8650,5.686,8693,2.471,8706,2.389,8714,2.631,8722,1.495,8781,4.574,8827,10.365,8859,1.419,8866,1.61,8867,7.502,8868,7.502,8869,3.722,8870,1.61,8871,8.978,8872,1.61,8873,1.61,8874,1.61,8875,1.61,8876,1.61,8877,8.124,8878,1.61,8879,1.61,8880,1.61,8881,1.61,8882,1.61,8883,1.61,8884,4.008,8885,1.61,8886,1.61,8887,1.61]],["t/3808",[3,0.626,5,4.208,6,0.429,20,1.078,30,1.448,35,1.39,42,0.473,44,1.535,47,0.574,66,1.704,82,2.268,88,0.389,110,0.682,115,0.448,116,0.688,131,0.882,135,1.716,174,0.604,186,0.966,196,1.304,197,1.348,218,2.802,227,1.876,230,0.527,231,0.62,270,1.265,286,1.989,299,2.83,304,1.016,316,0.542,338,0.448,349,0.426,355,0.675,376,4.673,377,0.959,378,5.867,381,1.876,386,1.39,409,1.225,410,0.928,412,4.673,430,2.706,437,1.456,444,1.314,448,2.052,450,2.526,496,0.889,526,1.742,548,0.852,567,1.559,619,1.891,664,1.295,688,0.768,692,0.535,695,7.445,712,3.607,718,0.709,754,1.338,771,4.479,818,0.527,830,5.293,841,0.553,956,3.574,960,1.96,967,1.594,972,0.724,974,2.59,992,5.912,997,1.08,1040,1.489,1058,0.843,1226,5.345,1272,1.175,1334,1.554,1386,0.894,1481,2.404,1506,1.273,1629,0.774,1691,2.35,1708,0.973,1749,6.982,1966,2.062,2061,0.87,2075,0.879,2235,0.812,2356,2.118,2388,2.35,2390,1.08,2417,2.149,2475,3.074,2479,1.13,2561,1.012,2590,0.966,2626,2.534,2627,1.012,2641,1.159,2646,1.334,2647,1.304,2650,1.253,2651,1.253,2653,2.182,2654,1.192,2655,1.368,2656,1.408,2657,1.408,2658,1.408,2659,1.457,2660,1.408,2661,1.408,2667,2.466,2668,2.182,2669,4.586,2681,1.004,2684,1.304,2721,5.463,2733,2.889,2734,3.644,2737,1.856,2738,1.754,2739,1.856,2743,1.729,2744,1.754,2748,1.368,2806,1.781,2836,2.219,3226,4.903,3260,1.144,3269,2.283,4626,2.219,4715,1.856,4791,4.386,5047,3.208,5139,2.404,5496,2.062,5497,1.231,5498,1.253,5499,1.368,5847,1.368,5848,1.368,5850,1.368,6021,2.089,6022,6.558,6024,1.144,6140,4.897,6275,1.368,6280,4.897,6286,1.116,8642,3.402,8643,2.118,8644,1.873,8645,3.252,8646,2.219,8648,6.417,8649,4.146,8650,4.277,8666,1.457,8667,3.845,8670,3.585,8671,3.585,8672,3.142,8679,1.517,8680,1.517,8696,2.626,8706,2.539,8718,1.277,8723,1.304,8724,1.304,8728,1.304,8730,1.304,8731,1.304,8784,2.934,8785,2.735,8827,7.643,8871,8.051,8877,1.598,8888,3.103,8889,1.721,8890,1.721,8891,1.721,8892,1.721,8893,1.721,8894,3.103,8895,1.721,8896,1.721,8897,1.721,8898,1.721,8899,1.721,8900,1.721]],["t/3810",[0,0.773,3,1.624,6,2.608,41,0.958,42,1.227,116,4.178,131,0.929,186,4.795,231,1.607,315,1.217,316,2.191,349,1.104,355,2.728,386,4.321,409,2.469,430,2.557,437,1.534,448,2.753,496,3.592,526,3.903,621,3.208,749,4.449,754,2.998,818,1.367,845,2.603,875,2.198,960,1.462,972,1.876,1038,1.969,1040,2.445,1272,3.047,1386,2.319,1506,2.854,1705,4.393,1713,1.961,1749,8.987,1906,3.875,1966,4.621,1986,2.67,2235,2.105,2390,5.36,2590,2.506,2684,3.38,2698,3.652,2721,7.247,3258,6.778,3260,2.966,3269,3.747,3322,3.778,5047,7.915,5496,4.621,5499,3.548,6021,3.005,6022,2.583,6024,2.966,6027,2.39,8650,2.625,8666,3.778,8808,3.935,8839,3.935,8840,3.935,8858,6.008,8859,7.529,8869,6.457,8901,4.464,8902,8.542,8903,6.954,8904,4.464,8905,4.464,8906,4.464,8907,4.464,8908,4.464,8909,4.464,8910,4.464,8911,4.464,8912,4.464,8913,4.464,8914,4.464,8915,4.464,8916,4.464,8917,4.464]],["t/3812",[0,1.106,20,1.192,36,3.604,41,1.649,85,1.779,118,0.929,135,2.321,137,2.781,218,3.53,319,1.805,325,1.185,349,0.624,355,2.249,376,3.672,378,5.365,390,2.015,409,2.429,448,2.698,693,2.724,695,6.45,714,1.497,735,3.498,749,1.164,759,4.608,766,3.227,818,2.088,822,0.715,830,3.05,841,0.812,960,1.425,972,1.829,992,5.26,1096,1.16,1115,1.304,1144,1.448,1226,5.237,1330,3.75,1383,2.558,1386,3.541,1446,3.913,1674,4.823,1713,1.109,1728,1.207,1788,1.552,1790,2.09,1919,1.797,1920,1.397,1942,2.633,1945,4.652,1954,3.294,2256,1.438,2274,1.657,2383,3.166,2401,6.007,2417,3.97,2806,3.912,2896,1.449,2908,2.996,3002,3.809,3192,4.959,3269,5.744,3350,3.343,3359,1.837,3372,3.913,3743,4.69,3820,2.225,3840,3.294,4103,1.956,4461,3.227,4959,3.56,5105,3.294,5497,4.099,5498,4.172,5656,3.06,6027,4.116,6286,3.717,6313,2.065,6366,4.873,6396,3.913,7121,2.225,8353,5.161,8644,4.114,8645,4.276,8648,6.287,8649,5.219,8650,4.941,8693,3.681,8711,1.956,8712,3.681,8721,4.441,8723,4.341,8724,4.341,8725,4.441,8726,4.441,8727,4.441,8728,4.341,8729,4.441,8730,4.341,8731,4.341,8734,3.458,8738,4.039,8739,3.834,8740,2.344,8741,2.225,8742,2.344,8743,2.344,8744,2.344,8745,2.344,8746,2.344,8747,2.344,8748,2.344,8749,2.344,8750,2.344,8751,2.344,8752,2.344,8753,2.344,8754,2.225,8756,5.053,8757,4.441,8762,2.225,8820,2.225,8823,2.344,8824,7.801,8825,2.344,8826,2.344,8858,1.775,8860,6.289,8918,5.732,8919,2.524,8920,2.524,8921,2.524]],["t/3815",[19,1.614,122,2.914,349,2.226,400,4.477,430,2.694,437,3.093,474,4.851,602,2.888,617,2.516,658,3.093,687,5.981,699,3.939,718,3.706,841,2.894,1054,5.708,1555,5.484,1749,5.708,2232,6.551,2437,6.974,2681,6.677,2721,7.028,3269,4.851,3338,6.234,6027,6.131,7758,8.67,8642,5.907,8714,5.907,8922,9.001,8923,6.974]],["t/3817",[0,0.962,6,1.136,19,0.816,20,0.947,36,2.408,37,3.217,38,0.795,41,1.515,42,1.251,44,2.952,71,1.67,73,1.518,88,0.601,96,1.228,115,0.693,122,1.474,137,3.426,153,1.143,193,1.652,218,2.948,230,0.815,231,2.148,252,1.239,293,3.538,296,1.064,308,1.119,309,1.016,310,1.666,319,1.903,338,0.693,349,1.476,352,1.443,355,1.044,376,5.252,378,4.775,390,1.601,403,2.339,405,1.256,409,1.725,426,0.948,430,1.363,448,2.362,468,1.517,556,1.54,598,1.473,614,0.941,617,0.744,621,2.752,688,1.188,692,0.828,699,1.993,735,2.319,759,4.888,828,2.857,830,5.187,841,0.856,845,1.553,877,0.974,960,2.599,972,2.968,1028,2.678,1038,1.174,1040,2.483,1050,1.593,1053,1.161,1124,1.002,1144,1.986,1226,4.661,1386,2.366,1464,1.937,1533,1.792,1602,1.67,1614,1.399,1750,1.817,1769,1.975,1886,1.67,1954,2.016,2061,3.015,2233,1.528,2241,2.52,2256,1.517,2316,1.444,2352,3.853,2417,3.154,2623,1.872,2653,1.872,2668,4.967,2681,4.629,2721,4.749,2806,4.054,2980,3.108,3063,3.066,3110,1.528,3269,3.806,3282,1.553,3362,1.747,3372,4.82,3462,3.203,3559,5.049,3866,1.975,4061,1.937,4079,1.484,4200,2.063,5103,1.872,5104,2.116,5105,2.016,5497,3.256,5498,3.314,6021,3.066,6022,3.452,6024,3.026,6027,4.632,6286,2.953,6366,3.256,6396,4.82,7758,3.448,8353,3.448,8428,5.049,8521,2.178,8644,2.748,8645,2.857,8648,4.054,8649,2.828,8650,2.678,8667,1.975,8714,2.988,8715,3.528,8716,3.528,8717,3.448,8718,3.377,8721,3.528,8723,3.448,8724,3.448,8725,3.528,8726,3.528,8727,3.528,8728,3.448,8729,3.528,8730,3.448,8731,3.448,8734,2.116,8757,2.063,8784,3.154,8796,2.346,8797,3.853,8798,3.853,8799,2.346,8800,2.253,8801,2.253,8803,5.259,8858,1.872,8860,3.726,8861,7.321,8862,3.853,8863,3.853,8864,3.853,8924,8.845,8925,2.662,8926,2.662,8927,2.662,8928,2.472]],["t/3819",[6,1.963,41,2.11,47,2.102,51,7.209,74,2.616,85,2.575,88,1.422,116,3.595,122,2.039,242,2.895,315,1.717,319,2.815,349,1.946,526,3.535,617,1.76,699,5.41,718,2.593,818,1.206,875,3.874,879,5.11,913,1.938,1128,2.478,1142,2.583,1519,1.84,1646,1.808,1708,2.226,1709,1.958,1749,7.256,1759,2.335,1788,2.421,1790,4.725,1919,4.063,2211,2.376,2300,2.553,2475,2.335,2653,5.535,2655,5.005,2721,6.464,2908,2.057,3183,2.583,3269,5.3,3282,4.59,3536,2.981,4385,5.046,6027,2.108,6080,6.937,7758,5.96,8648,6.022,8649,5.586,8650,5.288,8670,5.329,8671,5.329,8784,5.45,8808,5.55,8858,7.378,8924,10.664,8929,3.655,8930,3.936,8931,5.55,8932,8.992,8933,8.992,8934,8.992,8935,8.992,8936,11.442,8937,3.936,8938,3.655,8939,3.331]],["t/3821",[0,1.221,36,3.049,41,1.237,118,2.121,135,2.334,193,3.061,218,3.181,349,1.426,376,5.918,378,5.379,390,2.027,409,1.666,448,2.282,735,3.878,759,5.657,828,3.617,830,5.844,841,1.853,960,2.763,972,3.546,1096,2.648,1115,2.978,1144,2.809,1226,5.251,1386,2.995,1945,5.758,2256,3.284,2417,3.992,2668,5.934,2806,4.843,2980,3.935,3063,3.881,3269,3.106,3372,5.758,3462,4.054,3559,6.032,4959,3.58,5497,4.122,5498,4.195,6022,3.335,6027,4.517,6286,3.738,6366,4.122,6396,5.758,8353,4.365,8644,5.092,8645,3.617,8648,4.843,8649,3.58,8650,3.39,8711,4.466,8714,3.783,8715,4.466,8716,4.466,8718,4.276,8721,4.466,8723,4.365,8724,4.365,8725,4.466,8726,4.466,8727,4.466,8728,4.365,8729,4.466,8730,4.365,8731,4.365,8797,4.878,8798,4.878,8820,5.081,8860,4.716,8861,8.444,8862,4.878,8863,4.878,8864,4.878,8924,6.536]],["t/3824",[39,3.963,41,1.84,42,3.381,45,2.862,73,2.181,78,4.961,131,2.806,244,2.55,316,2.702,352,2.684,429,4.062,430,2.566,474,4.621,699,3.753,704,4.591,911,5.176,1016,6.815,1040,3.902,1602,5.38,1606,4.455,2681,6.473,2721,5.701,4195,5.939,4203,7.558,6024,8.177,8940,13.477]],["t/3826",[20,1.268,36,3.225,42,2.415,122,3.65,127,2.902,131,2.145,185,2.71,216,3.909,227,2.207,315,1.663,355,2.392,386,3.938,437,2.095,474,3.286,567,4.416,683,2.469,699,3.846,704,3.265,754,3.788,756,3.502,818,2.692,960,3.374,972,2.563,1040,4.968,1066,3.616,1115,3.15,1301,5.374,1602,3.826,1699,3.132,1942,2.801,2681,5.125,2721,6.746,2961,4.724,3462,6.181,5643,4.989,5649,4.989,5651,5.16,5657,5.16,5661,5.374,5684,5.16,5685,5.374,5688,5.16,6021,8.381,6022,6.523,6024,5.839,8784,4.223,8858,8.406,8924,4.724,8939,5.16,8941,7.746,8942,5.374,8943,6.097,8944,6.097]],["t/3828",[11,2.553,19,0.765,30,1.032,39,2.398,42,1.173,45,2.241,47,1.425,66,1.941,69,2.204,75,2.531,83,3.206,88,0.964,122,2.174,135,1.728,186,2.396,196,1.794,197,1.854,218,2.404,227,3.406,349,1.056,376,4.472,378,4.61,394,3.734,437,4.344,450,4.046,602,2.154,612,2.081,664,1.782,692,1.327,712,5.157,756,1.701,758,3.948,759,1.978,771,5.872,830,4.416,1040,1.501,1054,2.707,1226,4.5,1398,6.103,1425,7.7,1519,1.995,2024,6.619,2168,3.492,2669,4.389,2681,2.489,2703,6.431,2721,4.263,2733,3.742,2734,5.587,2738,3.796,2739,4.017,2743,3.742,2744,3.796,3226,4.693,5643,5.494,5645,3.762,5646,3.762,5648,3.232,5649,3.492,6022,2.469,6024,2.836,6027,2.286,8643,2.913,8644,6.558,8645,6.817,8648,6.237,8649,5.155,8650,4.88,8672,3.166,8712,7.964,8717,6.285,8941,10.677,8945,6.234,8946,3.963,8947,4.268,8948,4.268,8949,4.268]],["t/3830",[38,2.799,110,2.643,118,3.448,315,2.954,316,2.104,349,2.318,355,4.607,361,3.859,386,4.854,437,3.722,602,2.142,699,2.922,712,2.777,718,2.749,735,2.595,756,2.66,758,5.512,817,5.466,818,2.871,822,1.892,841,2.147,879,3.469,926,4.28,1055,7.502,1066,3.959,1144,2.223,1290,5.462,1470,5.881,1471,3.27,1749,5.944,1945,4.557,1967,5.462,1969,4.952,2197,4.696,2681,3.894,2721,6.033,3269,3.598,5463,8.262,5645,5.884,5646,5.884,7758,5.056,8413,6.199,8643,6.398,8644,4.03,8645,4.189,8646,4.773,8711,5.173,8714,4.381,8832,5.65,8833,8.703,8945,6.199,8946,8.703,8950,11.745,8951,9.373]],["t/3832",[0,1.195,3,1.107,19,0.302,27,1.784,30,0.736,39,1.087,42,0.463,45,1.016,66,1.216,75,0.999,81,2.474,82,4.194,83,0.651,88,0.38,91,3.502,122,0.985,135,0.682,144,5.054,186,3.31,196,0.708,197,0.732,218,2.688,227,1.506,244,0.501,270,1.697,304,1.363,325,2.394,333,0.821,349,0.417,376,4.15,378,4.546,390,2.314,394,0.758,409,1.903,412,1.64,437,2.262,447,1.854,602,0.54,606,0.96,618,0.999,664,0.703,692,0.524,712,3.722,758,2.999,771,3.046,772,2.577,785,3.862,819,5.832,830,4.098,906,1.981,950,3.2,974,0.6,1040,1.793,1052,1.854,1091,2.215,1167,7.473,1226,4.438,1362,4.79,1369,2.176,1383,1.79,1386,0.875,1461,1.017,1710,5.185,1777,4.882,1787,1.25,1878,3.862,1923,6.241,2007,1.276,2024,6.527,2413,1.017,2669,4.073,2681,0.983,2703,5.967,2721,1.563,2733,1.696,2734,2.272,2737,4.884,2738,3.722,2739,4.294,2743,0.939,2744,0.953,2895,2.358,2944,0.999,3226,3.722,3269,1.64,3359,3.029,3435,1.426,3449,4.316,3476,2.826,3477,2.826,3479,2.826,3560,2.826,3660,1.485,3694,2.826,4314,4.147,4629,2.826,4715,1.008,5496,2.766,5497,3.646,5498,3.711,5500,4.316,5649,1.378,5651,2.575,5652,1.564,5656,5.743,5657,1.426,5676,4.495,6017,3.405,6021,1.134,6022,5.703,6024,1.119,6027,3.157,6133,4.735,6318,1.339,6979,2.682,7919,5.802,8086,7.376,8093,5.802,8217,8.18,8642,3.347,8643,4.493,8644,1.017,8645,1.057,8646,1.205,8648,6.17,8649,5.071,8650,4.801,8667,1.25,8689,1.185,8706,1.378,8717,8.931,8941,4.495,8952,3.043,8953,1.685,8954,9.28,8955,5.099,8956,1.685,8957,1.685,8958,6.582,8959,1.685,8960,1.685,8961,1.685,8962,1.685,8963,3.043,8964,6.582,8965,5.099,8966,4.162,8967,3.043,8968,5.099,8969,3.043,8970,3.043,8971,3.043,8972,3.043,8973,3.043,8974,1.685,8975,1.685]],["t/3834",[18,3.511,30,2.006,33,2.872,39,3.878,45,2.768,66,2.498,196,3.486,197,3.602,231,2.986,242,3.051,315,2.262,349,2.051,350,3.392,562,3.462,617,2.319,653,4.309,699,3.63,847,4.69,1053,3.616,2531,6.426,2681,4.837,2721,6.22,2840,5.443,4105,7.019,4191,5.259,5669,6.592,6025,8.862,6851,9.19,6852,7.019,7758,8.224,8765,11.929,8766,7.311,8976,8.293]],["t/3836",[41,2.799,73,2.196,74,7.407,88,2.518,309,4.256,355,4.373,739,6.257,1603,5.812,1634,3.838,2137,5.417,3269,6.007,4461,8.268,6025,8.669,6028,9.12,7343,7.609,8714,7.315,8766,8.783,8923,6.689,8977,7.609,8978,11.146,8979,11.146]],["t/3838",[41,2.77,73,2.138,74,7.279,88,2.474,309,4.182,355,4.297,739,6.149,749,5.053,1603,5.658,1634,3.736,1705,4.99,2137,5.273,3269,5.903,6025,8.581,7343,7.477,8714,7.189,8766,8.694,8923,6.511,8977,7.407,8980,10.954,8981,10.954,8982,10.954,8983,10.954]],["t/3840",[41,2.756,115,2.448,309,5.14,430,3.522,889,5.168,1006,4.973,1090,6.723,4385,6.028,6025,7.82,6027,6.302,6028,7.693,8648,6.756,8766,7.923,8923,7.285,8984,9.797,8985,7.693,8986,8.73]],["t/3842",[27,3.45,41,2.116,44,1.704,73,1.828,82,4.018,115,1.871,122,3.194,218,2.857,244,1.928,284,5.568,309,4.3,333,4.808,352,1.738,376,5.316,378,4.832,412,5.316,430,2.151,619,4.403,683,2.91,755,4.906,821,3.503,830,5.249,889,3.95,906,3.42,960,1.851,1090,5.138,1226,4.717,1317,3.374,1417,7.317,1631,4.299,1942,3.301,2024,6.938,2263,2.856,2264,2.811,2276,4.838,2383,7.179,2669,5.217,2703,7.643,2721,3.691,2975,5.568,3226,4.063,3269,4.947,3462,5.054,4385,4.607,6021,4.838,6022,5.311,6025,6.555,6027,6.031,8642,3.709,8644,5.019,8648,6.244,8667,6.809,8689,6.938,8766,6.641,8770,5.33,8784,3.225,8858,1.36,8924,3.608,8984,8.321,8987,5.568,8988,6.672,8989,7.186,8990,7.186,8991,7.186,8992,5.152]],["t/3844",[27,2.622,41,2.178,44,3.71,49,2.507,51,2.136,72,1.24,73,1.907,83,1.415,85,3.066,98,1.326,109,0.852,110,1.45,115,2.246,118,1.348,122,1.186,218,2.172,228,2.766,230,2.297,242,1.348,252,1.705,309,2.862,310,2.174,315,1.62,319,6.167,333,3.654,352,0.886,355,1.437,357,1.596,376,4.04,378,3.672,430,1.096,447,5.255,468,3.385,617,3.307,658,2.042,683,1.483,688,3.849,699,1.603,702,2.299,703,2.855,755,2.955,821,1.786,830,3.989,841,1.911,875,1.803,877,1.34,889,2.013,906,1.744,1053,1.597,1077,1.736,1090,2.619,1091,2.666,1167,5.047,1226,3.585,1244,3.401,1317,1.72,1398,5.593,1579,4.704,1631,3.555,1788,5.831,1790,3.602,1792,3.587,1919,3.917,1942,1.683,2024,5.273,2111,2.299,2276,2.466,2300,3.854,2378,2.323,2669,3.965,2703,5.809,2721,3.851,2908,3.918,3226,2.071,3282,6.237,3339,3.1,4385,2.349,6022,2.119,6025,6.747,6027,5.077,6028,6.134,7168,3.401,8453,3.1,8644,4.525,8648,4.304,8689,5.273,8757,2.838,8766,6.836,8770,2.717,8784,2.537,8924,9.561,8928,3.401,8984,7.389,8987,2.838,8988,3.401,8993,7.497,8994,3.663,8995,7.497,8996,3.663,8997,5.517,8998,3.401]],["t/3846",[27,3.316,41,2.034,73,2.012,115,2.059,122,2.561,218,2.746,309,4.516,333,4.621,352,1.913,376,5.109,378,4.644,413,2.154,430,2.367,450,3.855,683,2.139,695,6.148,755,4.715,821,3.855,828,3.315,830,5.045,889,4.347,906,2.515,1090,5.655,1091,3.845,1226,4.533,1317,3.714,1434,3.315,1631,4.732,1788,4.864,1790,2.538,1889,4.109,1942,2.427,2276,3.557,2366,4.199,2367,6.471,2417,3.659,2669,5.014,2721,2.714,3226,2.987,3559,3.778,4385,3.387,4626,3.778,6025,6.994,6027,6.567,6325,7.179,8453,4.471,8644,3.189,8648,6.042,8689,6.668,8766,7.086,8770,3.919,8923,4.094,8984,9.177,8985,6.471,8987,6.128,8992,6.287,8998,7.344,8999,7.909,9000,5.283,9001,7.909,9002,5.283]],["t/3848",[41,2.687,73,2.647,88,2.35,1603,7.006,2137,6.53,3837,11.04,6025,8.323,7343,7.103,8648,7.19,8766,8.432,9003,12.524]],["t/3850",[27,3.526,42,2.039,73,1.887,82,4.412,88,1.676,218,2.92,222,4.226,333,4.914,376,5.433,378,4.939,412,5.433,683,3.004,695,6.538,699,3.247,830,5.365,1226,4.821,1361,3.616,1506,3.044,1631,4.438,1717,5.064,1942,3.408,2137,4.655,2669,5.332,2681,4.327,2721,3.811,3226,4.195,3269,3.998,3350,4.327,3559,5.305,5604,5.503,6025,6.699,6027,6.132,6325,7.635,7343,5.064,8198,5.748,8648,5.787,8649,4.608,8650,4.363,8663,8.886,8689,7.091,8766,6.788,8768,5.748,8770,5.503,9004,10.081,9005,7.419,9006,7.419]],["t/3852",[2,5.974,27,3.184,42,1.76,73,1.63,82,2.804,88,1.447,218,3.068,222,3.649,333,4.437,376,5.707,378,6.518,683,2.594,695,7.478,699,2.804,828,7.236,830,5.635,1226,5.514,1361,3.122,1631,3.832,1717,4.372,1942,2.943,2137,4.019,2669,5.601,2681,3.736,2721,3.29,3226,5.147,3269,3.452,5604,4.751,6022,3.706,6025,6.049,6027,5.671,6285,5.421,6325,8.02,7343,4.372,8648,6.62,8649,5.654,8650,5.353,8672,4.751,8689,6.403,8691,5.948,8693,5.421,8696,7.704,8717,4.851,8766,6.129,8768,4.963,8770,4.751,8845,5.646,9007,9.103,9008,6.406,9009,6.406,9010,6.406]],["t/3854",[27,3.231,42,1.797,73,1.663,88,1.477,218,3.102,222,3.725,333,4.502,376,5.771,378,6.552,450,4.502,683,2.648,695,7.547,699,2.861,830,5.699,1167,4.402,1226,5.565,1361,3.187,1369,6.604,1631,3.911,1717,4.463,1788,4.021,1790,3.141,1942,3.003,2137,4.102,2378,5.857,2388,8.813,2669,5.664,2681,3.813,2721,3.358,3226,5.222,5604,4.85,6022,3.783,6025,6.137,6027,5.735,6325,8.11,7343,4.463,8648,6.148,8649,4.061,8650,3.845,8672,4.85,8689,6.496,8717,4.951,8766,6.218,8768,5.066,8770,4.85,9011,9.236,9012,6.538,9013,6.071,9014,6.538]],["t/3856",[27,2.706,42,2.126,73,1.968,109,1.8,110,3.063,174,2.713,212,4.043,218,2.241,222,4.407,230,2.37,333,3.771,352,1.871,376,4.169,378,5.08,450,3.771,683,3.133,695,5.017,699,5.47,830,4.117,876,4.588,877,3.794,1077,3.665,1173,4.758,1226,3.699,1361,3.771,1631,4.628,1717,5.281,1897,5.141,1932,5.281,1942,3.554,2283,9.629,2378,4.906,2388,5.859,2669,4.092,2681,7.29,2721,6.009,4370,5.63,5604,5.738,5700,7.183,6025,5.141,6027,4.143,6325,5.859,7367,7.183,8689,5.441,8766,5.209,8768,5.994,9013,7.183,9015,7.736]],["t/3858",[73,2.41,88,2.139,230,2.902,315,2.583,606,5.396,617,2.648,1932,6.466,2137,5.944,2211,5.718,2300,6.143,2590,5.317,2591,7.339,2721,6.073,2908,4.95,3282,5.525,6025,7.857,7343,6.466,8757,7.339,8766,7.96,8939,10.006,8942,8.349,9016,8.795,9017,8.795,9018,11.823]],["t/3860",[231,3.809,357,2.842,602,4.058,617,2.958,692,3.29,704,5.666,879,5.497,1602,6.639,1759,6.275,2721,6.498,6027,5.666,7758,8.013,8923,8.198]],["t/3862",[41,2.756,115,2.448,309,5.14,430,3.522,889,5.168,1006,4.973,1090,6.723,4385,6.028,6025,7.82,6027,6.302,6028,7.693,8648,6.756,8766,7.923,8923,7.285,8984,9.797,8985,7.693,8986,8.73]],["t/3864",[41,2.328,83,4.193,242,3.993,308,4.562,310,3.971,739,6.092,3269,5.848,6027,5.811,8714,7.122,8977,11.32,9019,10.852]],["t/3866",[41,2.5,6027,6.239,8924,9.028,8997,10.818]],["t/3868",[41,2.5,6027,6.239,8784,8.07,8929,10.818]],["t/3870",[41,2.5,6027,6.239,8858,8.195,8931,10.27]],["t/3872",[41,2.477,6027,6.182,8650,6.789,8858,8.12,8931,10.176]],["t/3874",[2,6.862,27,3.657,42,2.152,218,3.029,222,4.462,333,5.097,376,5.635,378,5.122,412,5.635,683,3.172,695,6.781,699,3.428,830,5.564,1226,5,1361,3.818,1434,6.561,1631,4.685,1717,5.346,1942,3.598,2669,5.53,2681,4.568,2721,4.023,3226,4.429,3269,4.221,3350,6.098,3552,8.849,5604,5.809,6027,6.726,6325,7.919,8648,6.002,8649,4.865,8650,4.606,8689,7.354,8768,6.068,8770,5.809,9020,7.832,9021,7.832]],["t/3876",[2,7.726,27,3.291,42,1.844,218,3.146,222,3.823,333,4.586,376,5.854,378,5.767,619,2.995,683,2.718,695,7.635,699,2.937,830,5.78,1167,6.334,1226,5.63,1361,3.271,1631,4.015,1717,4.581,1942,3.083,2669,5.745,2681,3.914,2721,3.447,3226,5.319,3269,3.617,5604,4.978,6020,5.491,6022,3.883,6027,5.817,6325,8.226,8399,9.632,8648,6.758,8649,5.843,8650,5.532,8672,4.978,8689,6.617,8706,9.632,8717,5.082,8768,5.2,8770,4.978,8845,8.292,9022,6.711,9023,6.711,9024,6.711]],["t/3878",[6027,6.297,8645,7.379,9025,11.759]],["t/3880",[6027,6.297,8645,7.379,9026,11.759]],["t/3882",[41,2.572,115,2.523,122,3.137,309,4.972,430,2.9,755,4.819,821,4.723,889,5.326,1090,6.928,1317,4.55,4385,6.213,6027,6.421,8714,6.359,8784,8.305,8984,9.477,8987,7.508,8992,7.702,9027,9.69,9028,9.69]],["t/3884",[41,2.775,115,2.485,309,5.167,430,3.555,889,5.246,1006,5.048,1090,6.824,3269,6.97,4385,6.119,6027,6.361,8650,6.985,8984,9.849,8985,7.809,9029,9.544,9030,9.544]],["t/3886",[41,2.572,115,2.523,122,3.137,309,4.972,430,2.9,755,4.819,821,4.723,889,5.326,1090,6.928,1317,4.55,3269,5.222,4385,6.213,6027,6.421,8858,8.434,8984,9.477,8987,7.508,8992,7.702,9031,9.69,9032,9.69]],["t/3888",[41,2.548,115,2.485,122,3.09,309,4.938,430,2.856,755,4.747,821,4.652,889,5.246,1090,6.824,1317,4.481,3269,5.143,4385,6.119,6027,6.361,8650,5.612,8858,6.713,8984,9.849,8985,7.809,8987,7.395,8992,7.586,9033,9.544,9034,9.544]],["t/3890",[41,2.477,3837,10.176,6027,6.182,8650,6.789,9035,11.545]],["t/3892",[41,2.162,115,2.623,122,3.262,309,5.058,430,3.016,755,5.011,821,4.911,889,5.538,1090,7.204,1317,4.731,1788,6.197,6027,6.577,8984,9.642,8987,7.807,8992,8.008,9036,10.075]],["t/3894",[230,3.111,315,2.77,617,2.839,1932,6.933,2211,6.13,2300,6.586,2590,5.701,2591,7.869,2721,6.34,2908,5.308,3282,5.923,6027,5.438,8757,7.869,8939,10.445,8942,8.952,9016,9.43,9017,9.43,9037,10.156]],["t/3896",[0,1.262,36,3.272,41,1.327,193,3.222,218,3.288,376,6.117,378,5.56,390,2.175,409,1.789,448,2.45,664,2.582,759,5.797,828,3.882,830,6.04,960,2.908,972,3.733,1144,2.06,1226,5.428,1386,3.214,1942,2.842,2417,4.285,2668,6.246,2806,5.097,2980,4.223,3063,4.165,3269,3.334,3372,6.061,3462,4.351,3559,6.349,5497,4.424,5498,4.502,6022,3.579,6027,4.755,6286,4.012,6366,4.424,6396,6.061,8353,4.685,8644,5.36,8645,3.882,8648,5.097,8649,3.843,8650,3.638,8711,4.794,8714,4.06,8715,4.794,8716,4.794,8718,4.589,8721,4.794,8723,4.685,8724,4.685,8725,4.794,8726,4.794,8727,4.794,8728,4.685,8729,4.794,8730,4.685,8731,4.685,8797,5.236,8798,5.236,8860,5.062,8861,8.79,8862,5.236,8863,5.236,8864,5.236]],["t/3898",[19,1.945,77,5.775,375,6.436,377,6.048,378,5.316,379,6.611,841,3.49,1226,5.19,1328,5.028,1457,8.05,2378,6.882,9038,9.184]],["t/3900",[19,1.945,77,5.775,375,6.436,377,6.048,378,5.316,379,6.611,841,3.49,1226,5.19,1328,5.028,1457,8.05,2378,6.882,9038,9.184]],["t/3902",[19,1.945,77,5.775,375,6.436,377,6.048,378,5.316,379,6.611,841,3.49,1226,5.19,1328,5.028,1457,8.05,2378,6.882,9038,9.184]],["t/3904",[19,1.945,77,5.775,375,6.436,377,6.048,378,5.316,379,6.611,841,3.49,1226,5.19,1328,5.028,1457,8.05,2378,6.882,9038,9.184]],["t/3906",[0,1.283,338,3.006,672,4.586,832,4.87,833,4.905]],["t/3908",[0,0.613,3,2.006,4,1.581,19,0.988,72,1.867,85,2.255,92,1.99,115,2.799,121,3.359,181,2.674,189,9.31,218,1.597,225,2.792,230,1.689,335,2.952,356,2.235,361,2.27,384,10.671,386,2.47,397,4.842,406,6.351,407,2.247,409,3.474,426,1.964,430,1.65,432,7.901,433,3.19,481,2.971,494,4.012,502,12.109,530,9.032,672,2.19,876,3.27,896,5.654,914,3.328,926,3.535,1548,3.051,1634,2.451,1707,4.089,1884,2.832,1919,2.278,1988,4.272,2103,3.763,2344,4.382,2404,4.86,2443,7.728,2623,3.878,4079,4.55,4618,4.382,4715,4.884,5707,5.119,6804,4.511,6848,3.359,7754,4.272,7955,4.125,9039,4.86,9040,12.016,9041,5.513]],["t/3910",[0,0.718,4,1.614,6,1.404,13,1.15,15,1.573,19,0.831,22,0.505,25,0.924,26,0.604,30,0.465,33,0.666,39,0.687,42,2.784,45,0.642,46,3.692,47,1.143,53,1.211,60,1.041,62,0.756,66,0.707,80,1.023,85,4.143,88,0.774,91,0.725,92,0.694,99,0.792,113,0.808,115,0.501,121,1.171,122,0.622,131,1.172,132,1.14,164,0.971,174,1.625,181,0.933,183,2.18,192,1.352,193,0.698,196,0.808,197,0.835,218,3.203,225,0.657,229,0.924,230,1.42,231,0.692,242,0.707,253,1.15,255,1.233,306,0.872,315,1.952,316,2.256,317,0.666,320,0.698,333,0.937,335,1.029,338,0.501,339,2.282,340,1.539,350,0.786,352,0.829,357,0.516,358,0.789,361,0.792,375,1.14,377,1.071,378,0.942,379,1.171,383,0.887,391,2.15,404,1.131,413,4.425,423,1.375,430,0.575,444,2.733,452,0.69,453,0.942,454,3.163,467,0.911,481,1.036,496,0.993,514,3.914,519,0.999,520,1.036,548,0.951,550,1.011,557,2.723,565,2.087,566,1.627,585,0.993,602,0.617,612,1.67,613,1.909,616,0.551,619,4.934,656,0.942,667,2.878,672,0.764,681,2.222,683,2.899,692,0.598,699,0.841,700,1.104,738,0.988,754,0.829,756,0.766,821,0.937,844,1.017,875,0.946,877,0.703,881,1.104,882,0.823,918,1.456,924,1.15,939,0.851,956,0.659,960,1.122,966,1.036,1031,1.375,1038,0.848,1040,2.914,1056,1.982,1093,1.262,1121,1.121,1123,1.731,1128,1.824,1144,2.384,1157,0.569,1176,1.528,1177,1.573,1178,1.627,1179,1.627,1180,1.573,1181,1.627,1182,1.194,1183,1.456,1184,2.899,1185,2.899,1186,1.194,1187,2.803,1188,1.627,1189,1.627,1190,1.528,1191,1.456,1192,1.573,1193,3.26,1194,1.294,1226,1.638,1247,0.977,1300,1.909,1305,1.375,1320,1.49,1324,1.071,1328,1.587,1330,3.465,1346,1.233,1361,3.147,1460,1.399,1464,1.399,1517,0.915,1569,1.121,1578,0.951,1581,2.27,1609,1.16,1646,2.129,1790,0.924,1820,1.023,1884,1.76,1902,1.573,1919,0.794,1942,0.883,2024,1.352,2061,1.731,2075,0.982,2076,1.262,2111,1.206,2125,1.194,2155,4.094,2200,1.456,2203,1.49,2223,5.266,2233,1.104,2241,1.064,2263,2.342,2264,2.305,2316,1.043,2333,1.627,2341,1.375,2350,2.186,2503,1.171,2531,1.49,2626,2.05,2627,2.015,2633,2.66,2662,1.219,2666,2.248,2668,1.352,2731,1.036,2736,1.16,2844,1.982,2857,1.528,2965,2.541,3055,2.899,3086,0.971,3366,1.695,3687,1.456,3711,2.222,3725,2.803,3726,1.456,3916,1.294,4079,1.071,4314,1.352,4328,1.194,4521,1.627,4693,1.573,4747,1.627,4865,1.627,5023,1.627,5087,1.456,5394,1.49,5482,1.399,5503,1.785,5581,1.262,5656,1.352,5676,1.695,6020,1.573,6023,4.085,6255,1.695,6256,1.695,6575,1.627,6944,1.49,6994,1.627,7085,1.695,7161,5.224,7162,1.785,7177,1.528,7182,3.181,7183,5.224,7184,3.181,7185,1.785,7310,1.627,7350,1.695,7723,1.695,7724,1.695,7725,1.785,7726,1.695,7727,1.695,7728,1.695,7729,1.695,7730,1.695,7731,1.695,7732,1.695,7733,1.695,7734,1.695,7735,1.785,7736,1.627,7737,1.627,7738,1.695,7739,1.695,7740,1.695,7741,1.695,7742,1.627,7743,1.695,7744,1.695,7745,1.627,7746,3.02,7747,1.695,7748,1.695,7749,1.695,7750,1.695,7751,1.695,7752,1.695,7753,1.627,7955,2.843,8091,1.695,8102,3.792,8105,5.857,8106,3.792,8107,6.015,8115,1.573,8140,1.695,8155,1.456,8158,1.528,8173,1.456,9042,2.723,9043,1.922,9044,1.922,9045,1.922,9046,3.426,9047,1.922,9048,1.922,9049,1.922,9050,1.922,9051,3.426,9052,1.922,9053,0.999,9054,3.181,9055,1.785,9056,3.426,9057,1.922,9058,1.922,9059,1.922,9060,1.922]],["t/3912",[0,1.031,3,1.854,4,2.898,5,0.973,6,1.037,19,0.545,22,0.442,37,1.447,41,0.652,47,1.966,60,2.337,62,3.028,72,0.57,73,0.428,77,2.212,80,1.618,82,2.23,84,0.879,85,4.314,87,0.981,92,0.607,100,0.989,108,1.447,115,0.438,121,1.025,122,0.545,131,0.866,137,0.816,138,1.016,165,1.835,174,0.59,176,1.016,183,2.982,184,2.027,186,0.944,215,0.895,216,1.079,218,2.078,219,1.544,225,2.014,231,1.497,242,0.619,244,1.237,255,1.079,259,1.44,260,1.907,289,3.583,296,1.215,299,2.781,306,0.763,315,1.956,316,1.31,317,2.04,320,0.611,333,1.482,335,2.728,340,1.01,356,0.461,357,1.117,361,1.252,366,0.824,375,0.998,376,2.24,377,0.938,378,3.77,379,1.025,380,2.148,381,2.256,383,6.002,385,1.377,386,2.283,387,2.212,390,1.791,398,2.068,401,0.763,404,2.445,406,1.682,409,1.202,413,4.806,415,0.998,425,0.666,430,1.244,431,2.996,441,3.221,444,1.287,448,2.017,450,2.872,452,0.604,514,3.454,519,3.998,520,4.147,536,0.925,549,0.884,550,0.884,580,1.006,596,1.183,598,0.931,601,0.76,602,0.54,612,1.482,613,0.938,616,0.872,644,1.638,648,1.104,650,1.104,652,0.925,653,0.874,662,2.173,664,0.702,672,3.057,675,1.304,681,3.304,683,2.663,686,0.884,692,0.523,718,1.712,723,1.337,732,2.971,741,0.748,756,0.67,759,1.408,772,0.85,843,1.006,853,1.045,869,2.138,875,0.828,906,1.447,909,1.079,910,1.377,956,1.042,971,0.85,974,1.083,1043,0.754,1047,1.144,1065,1.304,1066,0.998,1075,1.067,1099,0.981,1115,0.869,1121,4.758,1124,0.633,1128,1.196,1134,1.067,1144,1.696,1153,2.037,1154,0.901,1155,0.841,1157,0.498,1226,3.901,1247,0.855,1317,0.79,1320,1.304,1446,1.148,1456,2.075,1464,4.287,1470,1.056,1471,0.824,1506,0.69,1518,0.693,1534,1.016,1548,0.931,1578,0.832,1610,0.805,1614,0.884,1646,1.91,1728,1.988,1741,1.682,1919,1.256,1939,1.553,1942,3.021,1991,0.824,2056,1.067,2061,0.85,2076,1.104,2165,2.255,2169,0.951,2299,2.02,2350,1.434,2376,1.424,2383,1.224,2401,1.203,2449,2.355,2460,1.056,2475,0.998,2511,1.006,2531,1.304,2562,1.104,2633,1.745,2666,1.104,2669,0.89,2748,3.305,2785,1.483,2970,2.416,3011,1.248,3086,2.574,3121,1.248,3258,1.091,3264,1.337,3401,2.838,3725,1.377,3922,0.931,4328,1.045,4370,1.224,4626,1.203,5082,1.424,5117,2.666,5201,1.304,5246,1.424,5527,1.304,5539,1.562,5540,1.562,5797,1.483,5996,1.377,6061,2.822,6253,2.822,6254,2.822,6255,1.483,6256,1.483,6773,1.483,6792,2.487,7295,1.483,7296,1.248,7310,1.424,7933,1.274,7955,4.122,8154,1.274,8181,4.311,8272,1.562,8406,1.562,8467,1.483,8585,1.337,8832,1.424,9042,6.485,9053,0.874,9054,2.822,9055,1.562,9061,1.483,9062,1.682,9063,1.682,9064,1.682,9065,1.682,9066,1.682,9067,1.682,9068,1.682,9069,1.682,9070,1.682,9071,3.04,9072,3.04,9073,1.682,9074,1.682,9075,1.682,9076,1.682,9077,3.04,9078,3.04,9079,1.682,9080,3.04,9081,1.682,9082,3.04,9083,1.682,9084,1.682,9085,1.682,9086,1.682,9087,1.682,9088,1.682,9089,3.04,9090,1.682,9091,1.682,9092,1.682,9093,1.682,9094,1.562,9095,1.682,9096,1.682]],["t/3914",[0,0.957,3,1.248,4,2.468,6,1.547,9,0.595,19,0.24,20,0.713,22,0.648,26,0.421,30,0.324,35,0.359,37,0.858,38,1.024,41,0.529,42,0.368,45,0.446,47,0.446,53,0.473,60,2.301,62,2.981,74,0.889,81,2.068,82,4.008,85,3.846,87,0.78,88,0.302,100,0.787,113,0.562,116,0.535,122,0.433,131,1.492,134,0.973,146,0.564,148,0.607,174,1.495,176,0.807,182,0.676,183,3.335,184,2.432,186,0.751,218,2.075,225,1.173,231,0.888,242,0.492,253,0.8,286,2.199,291,1.638,293,0.793,294,0.579,296,0.986,306,0.607,309,0.511,310,0.489,315,0.672,316,0.422,317,2.48,322,0.525,325,0.628,333,0.652,335,2.672,341,2.076,342,0.392,345,0.646,348,0.669,350,0.547,355,1.345,356,0.366,357,0.662,358,0.549,359,0.62,361,1.755,366,1.208,378,0.655,381,5.62,383,1.582,386,1.91,387,0.973,390,1.98,406,0.74,409,1.443,413,4.996,425,0.53,426,0.476,428,0.756,430,2.144,433,0.774,444,1.044,448,2.837,450,2.078,464,0.634,486,1.208,514,3.538,519,3.936,520,4.083,521,0.774,536,1.355,548,0.662,550,0.703,565,0.815,567,1.239,570,0.493,583,0.831,591,0.672,598,0.74,602,1.1,612,2.078,613,2.376,614,0.473,616,0.384,617,0.374,619,2.227,627,0.973,652,0.735,658,0.847,661,0.637,664,0.558,668,0.926,672,3.009,681,3.236,683,3.485,686,0.703,692,0.416,693,0.986,695,0.867,724,0.858,725,1.672,727,0.735,732,0.78,738,0.687,742,2.152,748,0.793,756,0.982,771,2.578,818,1.051,821,0.652,822,1.208,851,0.8,875,0.659,877,0.902,905,0.956,906,1.174,913,0.659,924,0.8,956,0.459,971,0.676,972,0.562,974,0.476,992,2.639,997,0.839,1008,1.132,1034,0.762,1038,0.59,1040,0.867,1043,0.599,1047,1.604,1054,0.848,1055,0.926,1058,0.655,1088,0.839,1096,1.575,1099,1.438,1115,1.772,1116,0.973,1117,0.973,1118,0.913,1121,4.419,1123,0.676,1124,0.503,1128,0.97,1144,1.142,1154,0.716,1155,0.669,1157,0.396,1167,0.901,1226,3.623,1228,0.735,1247,0.68,1317,0.628,1319,1.128,1344,0.599,1346,1.581,1398,0.867,1471,0.655,1518,1.412,1534,1.488,1544,1.094,1566,0.655,1579,0.839,1619,0.787,1634,1.096,1646,1.575,1656,1.86,1677,0.839,1684,1.829,1692,0.973,1713,2.474,1741,0.74,1787,1.829,1792,0.807,1804,0.74,1859,1.013,1863,1.132,1884,1.762,1906,0.745,1919,0.553,1939,3.167,1949,1.132,1991,0.655,2025,0.652,2061,1.733,2125,0.831,2139,0.973,2250,0.941,2263,0.676,2264,0.665,2296,1.829,2325,0.839,2417,0.926,2562,1.618,2574,1.242,2590,0.751,2662,0.848,2663,0.867,2683,0.901,2731,1.329,2734,2.725,2743,1.911,2762,0.558,2834,1.925,2848,0.774,2854,1.547,2971,1.22,2993,1.094,3004,0.858,3039,0.956,3086,3.132,3644,1.013,3711,0.867,3792,0.941,3902,0.956,3905,0.926,3953,1.063,4000,0.992,4061,0.973,4079,0.745,4082,1.829,4103,2.657,4236,0.992,4327,1.063,4328,1.531,4349,0.941,4370,0.973,4412,1.179,4494,2.289,4560,0.78,4836,0.831,4911,1.036,5082,1.132,5117,0.858,5210,2.087,5496,0.889,5512,0.901,5594,1.242,5604,0.992,5619,1.013,5666,4.476,5684,1.132,5685,1.179,5773,1.179,5972,0.973,6014,1.094,6060,1.179,6206,1.063,6233,1.242,6234,1.242,6250,2.289,6251,1.242,6355,1.242,6357,1.013,6792,1.094,6799,0.973,6835,0.941,7407,1.179,7512,1.242,7721,1.242,7754,1.036,7948,1.063,7955,4.751,8081,1.242,8156,1.063,8243,2.902,8249,1.516,8274,1.763,8832,1.132,9042,6.32,9053,0.695,9097,1.338,9098,1.338,9099,1.338,9100,1.338,9101,1.338,9102,1.338,9103,1.338,9104,1.338,9105,1.338,9106,1.338,9107,1.338,9108,1.338,9109,1.338,9110,1.338,9111,1.338,9112,3.429,9113,5.631,9114,1.338,9115,1.338,9116,1.338,9117,1.338,9118,2.465,9119,1.242,9120,1.242,9121,1.338,9122,1.338,9123,3.429,9124,1.338,9125,2.465,9126,1.338,9127,1.338,9128,1.242,9129,1.338,9130,1.338,9131,1.242,9132,1.338,9133,2.465,9134,1.338,9135,1.338,9136,1.338,9137,1.242,9138,1.242,9139,1.338,9140,1.338,9141,1.338,9142,2.465,9143,1.242,9144,1.338,9145,1.338,9146,1.338,9147,1.338,9148,1.338]],["t/3916",[0,0.967,4,1.724,6,1.218,13,2.658,18,0.355,20,0.331,22,0.22,26,0.714,27,1.208,28,0.236,30,0.203,33,0.29,35,0.609,37,0.292,39,1.032,41,1.743,42,1.221,44,1.708,47,0.28,51,0.489,53,1.868,54,1.325,60,2.335,62,2.08,66,0.468,69,0.275,72,0.539,73,0.878,82,2.136,83,0.324,85,3.144,91,0.316,92,1.604,98,0.303,99,0.345,108,1.375,109,0.195,113,1.214,115,0.414,119,0.474,131,1.648,135,0.339,146,0.958,148,1.03,161,0.44,162,0.836,164,0.423,165,0.506,174,0.294,176,0.506,180,0.649,183,1.892,184,1.408,186,0.47,193,1.253,196,0.352,218,2.412,227,0.303,228,0.309,229,0.402,230,0.696,231,1.429,239,3.296,241,0.374,242,1.063,244,1.181,246,7.051,247,2.825,248,2.744,250,1.55,252,0.39,259,0.754,263,2.048,267,0.412,274,3.381,277,1.653,299,1.577,301,0.543,302,0.39,304,2.44,306,0.38,307,1.412,308,0.352,309,0.32,310,0.306,314,1.896,315,0.434,317,1.195,320,0.304,325,2.658,326,1.685,327,1.529,328,1.476,329,0.408,333,2.379,335,2.379,340,0.278,341,0.662,342,0.246,350,0.651,352,0.699,355,0.891,356,0.229,357,1.066,359,0.388,361,1.19,376,0.451,381,1.006,383,1.333,386,1.018,390,2.336,392,0.383,405,0.395,409,1.832,413,4.403,429,1.076,430,0.251,431,0.493,444,1.462,446,0.599,448,4.464,450,1.683,497,0.537,506,2.296,514,1.717,515,0.589,516,0.649,519,2.747,520,3.051,526,0.47,533,0.501,548,0.787,549,1.194,550,0.44,570,0.309,583,0.52,593,0.531,596,0.589,598,2.197,601,0.378,616,0.829,617,0.965,619,1.541,623,0.51,652,0.874,653,0.435,658,0.288,664,0.35,672,2.1,681,4.308,683,3.522,686,0.44,688,0.71,698,0.464,699,0.367,712,1.202,714,0.497,716,0.38,718,0.345,719,0.634,720,1.232,726,0.709,727,0.46,728,0.685,730,0.709,732,0.928,735,0.883,736,0.649,740,0.928,741,0.372,742,0.526,752,2.942,754,0.361,756,0.905,758,0.493,759,2.786,762,0.685,767,2.296,768,0.913,770,1.982,771,0.822,772,0.423,773,0.917,774,1.924,775,1.805,776,0.572,777,0.515,779,0.685,780,0.685,781,0.685,782,0.621,783,0.685,784,1.301,785,1.205,786,0.685,787,0.685,788,0.685,792,0.685,793,0.685,798,0.55,801,0.599,802,0.685,806,2.188,807,0.621,808,0.634,809,0.685,811,0.685,812,0.649,814,0.685,815,0.685,816,0.666,818,0.696,819,1.205,820,0.58,822,0.819,823,0.39,824,0.474,825,0.58,826,0.531,827,0.649,828,0.998,829,0.685,830,1.537,831,0.634,852,0.335,877,0.306,882,1.236,889,0.46,900,0.44,930,0.55,956,0.287,960,0.946,967,0.43,971,0.804,972,0.352,974,0.298,1036,1.699,1039,0.709,1040,2.228,1047,0.855,1049,0.557,1053,0.99,1065,0.649,1067,0.564,1077,0.754,1115,1.492,1121,3.506,1123,0.804,1124,0.315,1128,0.33,1143,1.086,1144,1.885,1155,0.795,1157,0.248,1226,2.528,1228,0.46,1247,0.426,1248,0.58,1255,0.572,1295,1.456,1317,0.393,1319,1.322,1324,1.266,1330,0.374,1336,1.852,1346,1.02,1376,0.634,1383,0.493,1397,0.709,1417,0.621,1446,0.572,1456,1.086,1461,0.506,1471,0.41,1506,2.169,1547,0.88,1548,0.464,1553,0.485,1578,0.787,1594,0.506,1606,0.435,1634,0.372,1646,1.823,1656,0.863,1699,0.817,1714,0.621,1728,2.528,1738,1.473,1744,1.72,1777,0.621,1798,0.457,1859,0.634,1884,0.817,1889,0.826,1919,0.657,1923,0.506,1942,2.041,1977,0.685,1986,0.501,1989,0.599,2048,1.858,2061,0.804,2078,0.557,2105,0.599,2110,0.599,2155,1.009,2194,0.709,2198,0.709,2223,0.464,2263,0.423,2264,0.417,2296,0.621,2300,0.543,2326,0.709,2367,1.972,2383,0.61,2401,0.599,2416,0.58,2479,1.044,2490,1.119,2501,0.738,2527,0.446,2535,0.666,2590,0.893,2666,2.266,2674,1.402,2697,1.264,2834,1.938,2848,0.485,2895,0.649,2909,0.537,2962,1.858,2970,0.666,3015,0.55,3030,0.685,3086,1.46,3104,0.599,3151,0.738,3166,3.49,3172,0.778,3193,0.501,3230,1.44,3308,0.685,3351,0.621,3439,0.738,3449,0.709,3622,0.666,3777,0.51,3963,0.55,3964,0.589,3965,0.685,4094,0.501,4111,0.599,4177,0.58,4309,0.738,4313,1.102,4328,0.52,4626,0.599,4919,0.649,5007,0.621,5019,0.61,5063,0.589,5087,0.634,5201,0.649,5432,1.402,5600,0.621,5726,0.572,5737,0.599,5880,0.738,5881,0.738,5882,0.738,5925,1.653,5926,1.653,5970,4.911,5971,0.685,6059,0.778,6416,0.649,6805,0.709,6944,0.649,7224,0.58,7679,0.621,7955,3.038,8086,0.666,8091,2.546,8102,1.858,8103,2.238,8105,1.858,8108,0.738,8112,0.778,8115,0.685,8130,1.264,8132,0.685,8140,0.738,8153,0.738,8154,0.634,8155,1.72,8156,1.264,8157,0.685,8158,0.666,8169,0.709,8171,3.994,8173,1.205,8184,3.043,8185,0.778,8186,0.778,8187,0.778,8188,0.778,8189,0.778,8190,0.778,8191,0.778,8192,1.477,8193,0.778,8194,0.778,8195,0.778,8196,0.778,8197,0.778,8198,0.649,8199,0.778,8200,4.126,8201,1.477,8202,0.778,8203,0.778,8204,0.685,8205,0.738,8206,0.778,8207,0.778,8208,0.738,8209,0.778,8210,0.778,8211,0.685,8212,0.778,8213,0.778,8214,0.778,8215,0.778,8216,0.778,8217,0.738,8218,0.778,8219,0.778,8220,0.778,8221,0.778,8222,0.778,8223,0.778,8224,0.778,8225,0.778,8226,0.778,8227,2.682,8228,0.778,8229,0.778,8230,0.778,8231,0.778,8232,0.778,8233,0.778,8234,0.778,8235,0.778,8236,0.778,8240,0.685,8243,2.445,8263,1.346,8264,1.76,8287,1.922,8303,2.002,8314,3.76,8315,1.402,8316,1.402,8317,1.402,8394,0.778,9042,4.501,9053,0.435,9061,0.738,9128,0.778,9131,1.477,9149,0.838,9150,0.838,9151,0.838,9152,0.838,9153,0.838,9154,0.838,9155,0.838,9156,2.271,9157,0.838,9158,0.838,9159,2.889,9160,0.838,9161,1.591,9162,2.889,9163,0.838,9164,0.838,9165,0.838,9166,0.838,9167,1.591,9168,1.591,9169,0.838,9170,0.838,9171,0.838,9172,0.838,9173,0.778,9174,0.838,9175,0.838,9176,0.838,9177,0.838,9178,0.838,9179,0.838,9180,0.838,9181,0.838,9182,0.838,9183,0.838,9184,0.838,9185,0.838,9186,0.838,9187,0.778,9188,0.838,9189,1.591,9190,0.838,9191,0.838,9192,0.621,9193,0.621,9194,3.453,9195,3.453,9196,0.838,9197,0.838,9198,0.838]],["t/3918",[0,1.109,2,0.907,3,0.503,4,2.32,6,2.018,13,1.519,19,0.248,20,0.528,27,0.888,33,0.879,36,0.731,39,0.493,41,0.938,42,1.404,43,1.415,44,0.684,45,0.461,47,0.848,53,1.545,60,2.965,61,2.861,62,3.036,66,0.727,67,0.646,73,0.351,80,0.735,83,0.981,85,4.079,88,0.312,92,2.079,99,0.569,108,0.658,116,1.409,122,0.447,131,1.425,183,3.601,184,2.807,215,1.351,218,1.267,225,1.205,227,1.276,229,1.22,231,0.914,242,0.934,250,1.734,254,1.71,274,3.989,277,3.72,294,0.598,304,1.432,306,1.152,309,0.527,315,0.693,316,1.378,317,2.369,322,0.542,324,0.907,326,3.791,327,3.441,328,2.611,329,1.718,331,1.647,333,1.238,335,3.664,336,0.652,339,1.25,340,1.171,341,0.575,343,0.637,345,0.667,348,0.691,350,0.565,352,0.334,356,0.378,357,0.947,361,0.569,376,0.744,381,1.125,383,2.358,387,1.005,390,0.486,406,0.765,408,0.812,409,0.399,412,0.744,413,4.72,430,0.413,431,0.812,444,1.851,448,0.547,450,2.807,451,0.972,452,0.912,457,0.775,466,0.886,486,0.677,514,3.684,518,3.028,519,4.008,520,4.157,544,0.834,547,1.005,548,0.684,550,0.726,562,0.577,563,1.993,565,0.842,570,0.937,583,1.577,595,2.687,606,1.447,612,2.807,613,2.849,614,0.488,616,0.728,619,1.573,623,0.842,624,1.816,627,1.848,658,0.475,661,0.658,664,0.577,672,3.064,677,1.046,681,0.896,683,4.192,686,1.335,692,0.43,693,0.552,695,0.896,712,1.056,716,0.627,725,0.673,754,1.095,756,2.295,772,0.698,796,1.098,821,0.673,877,0.505,879,0.718,906,0.658,916,1.098,940,1.095,954,1.098,956,0.474,960,0.452,974,0.492,1026,0.93,1028,0.812,1034,0.787,1040,2.406,1047,0.956,1053,0.602,1067,0.93,1082,0.876,1096,1.167,1100,0.85,1101,0.988,1108,0.775,1121,4.499,1123,1.283,1124,0.52,1128,0.544,1157,0.752,1226,3.689,1228,0.759,1247,0.702,1248,0.957,1293,0.826,1317,1.655,1319,1.162,1321,1.688,1336,2.804,1369,0.988,1398,0.896,1456,0.943,1464,1.005,1465,1.283,1471,0.677,1517,1.209,1519,0.646,1520,0.71,1521,0.806,1522,0.834,1523,0.793,1578,0.684,1581,0.677,1588,1.533,1594,2.128,1606,0.718,1614,0.726,1646,2.348,1677,0.867,1768,1.07,1790,0.664,1846,0.93,1883,1.025,1884,0.71,1919,1.049,1939,1.801,1941,0.858,1942,1.619,1991,0.677,2024,0.972,2077,0.907,2078,0.918,2103,0.943,2155,0.876,2263,0.698,2264,0.687,2296,1.025,2367,5.266,2378,0.876,2386,1.07,2518,1.005,2536,1.046,2562,0.907,2600,1.169,2611,2.019,2731,0.744,2749,0.972,2804,1.13,2840,0.907,3015,1.667,3086,3.2,3166,1.816,3193,0.826,3258,0.896,3422,1.13,3503,1.005,3887,0.759,3888,0.819,4136,1.005,4164,1.098,4364,2.078,4500,1.13,5007,1.025,5082,1.169,5330,0.93,5334,1.169,5352,1.816,5382,2.731,5383,1.169,5396,1.218,5432,2.239,5512,0.93,5516,1.098,5527,1.07,5529,1.218,5648,1.046,5688,1.169,5738,1.218,5739,1.005,5955,1.283,5970,2.731,5971,1.13,5975,1.283,6760,1.13,6793,1.283,7468,1.098,7955,4.819,8079,1.218,8095,1.169,8240,1.13,8254,0.834,8255,0.85,8257,2.313,8264,1.968,8287,2.149,8300,2.073,8301,2.358,8302,1.283,8303,3.107,8314,4.874,8315,1.218,8316,1.218,8317,1.218,8347,1.283,8349,1.283,8491,1.169,8492,1.169,8493,1.283,8494,1.283,8495,1.283,8598,1.283,9042,6.43,9053,0.718,9119,1.283,9120,1.283,9137,2.358,9138,2.358,9199,1.381,9200,1.381,9201,1.381,9202,1.381,9203,1.381,9204,1.381,9205,1.381,9206,1.381,9207,1.381,9208,1.381,9209,1.381,9210,1.381,9211,2.54,9212,1.381,9213,1.381,9214,1.381,9215,1.381,9216,1.381,9217,3.525,9218,1.381,9219,1.381,9220,2.54,9221,1.381,9222,1.381,9223,1.381,9224,1.381,9225,1.381,9226,1.381,9227,2.54,9228,2.54,9229,1.381,9230,1.381,9231,1.381,9232,2.54,9233,1.381,9234,1.381,9235,1.381,9236,1.381,9237,1.283,9238,1.381,9239,1.381,9240,1.381,9241,1.381,9242,3.525,9243,1.381,9244,1.381,9245,1.381,9246,1.381,9247,1.381,9248,1.381,9249,1.381,9250,1.381,9251,1.381,9252,1.381]],["t/3920",[0,0.663,3,1.657,4,2.025,6,1.98,19,0.477,30,0.644,32,3.156,33,2.445,35,0.714,38,1.36,60,1.383,62,1.792,66,0.939,85,4.846,92,0.961,106,1.707,116,1.064,122,0.862,131,2.119,183,2.312,231,0.958,242,0.979,252,1.239,260,1.67,293,2.7,296,1.064,315,0.726,316,1.435,317,2.445,322,1.044,328,1.36,331,2.953,333,1.298,335,4.25,339,2.242,340,1.512,355,1.044,357,1.603,361,1.875,366,1.304,381,1.179,386,1.193,390,0.936,404,1.565,407,1.085,409,0.77,428,1.505,429,1.261,431,1.565,444,1.928,448,1.054,450,1.298,452,2.142,475,1.817,514,4.201,519,2.366,520,2.454,536,1.463,549,1.399,565,1.622,570,0.982,611,2.116,612,3.869,613,3.936,614,0.941,615,1.213,616,0.763,619,1.188,622,1.338,664,1.111,672,1.809,677,2.016,681,4.58,683,3.214,718,1.875,724,1.707,756,3.162,758,1.565,875,1.311,900,3.137,940,1.148,956,0.913,963,1.872,974,0.948,1028,1.565,1043,1.193,1047,2.245,1056,1.54,1100,1.637,1108,1.494,1121,2.656,1122,3.279,1124,1.002,1128,1.048,1138,1.937,1144,0.886,1154,1.425,1157,2.562,1226,2.177,1247,1.352,1276,1.792,1292,1.872,1319,1.218,1321,1.769,1326,1.872,1330,1.188,1344,2.04,1376,2.016,1383,1.565,1471,1.304,1518,1.096,1519,1.244,1547,1.473,1553,1.54,1566,2.23,1578,1.317,1581,2.23,1588,1.607,1594,1.607,1610,2.177,1629,1.198,1646,2.741,1880,2.47,1884,1.367,1895,1.769,1919,2.465,1928,1.844,1942,1.223,1991,1.304,2061,1.345,2067,1.747,2092,4.196,2124,2.063,2194,2.253,2210,2.486,2211,2.748,2218,1.844,2219,3.203,2223,1.473,2224,1.726,2250,3.203,2254,3.726,2255,2.116,2261,2.253,2281,4.013,2350,2.148,2367,3.108,2383,1.937,2518,1.937,2561,1.565,2608,2.253,2633,2.614,2637,1.872,2724,2.063,2790,1.872,2840,1.747,3086,3.015,3632,1.391,3887,2.503,3888,1.579,3922,1.473,4059,2.116,4195,1.844,4560,1.553,4959,1.653,5308,3.203,5513,2.178,5530,2.346,5662,2.472,5668,2.253,5738,2.346,5739,1.937,5759,2.016,6016,2.346,6409,2.472,7169,2.063,7292,2.472,7614,2.178,7955,3.568,8154,2.016,8168,2.346,8169,2.253,8177,2.472,8208,2.346,8249,4.343,8294,2.346,8295,3.619,8299,2.472,8300,2.678,8333,4.623,9042,4.742,9053,1.383,9061,2.346,9253,2.662,9254,4.553,9255,2.662,9256,2.662,9257,2.662,9258,2.346,9259,2.662,9260,2.662,9261,2.662,9262,2.662,9263,2.662,9264,4.553,9265,2.662,9266,2.662,9267,2.662,9268,2.662,9269,7.062,9270,4.553,9271,2.662,9272,2.662,9273,2.662,9274,2.662,9275,2.662,9276,2.662,9277,2.662,9278,2.662,9279,2.662,9280,2.662,9281,2.662,9282,2.662]],["t/3922",[4,0.579,6,2.336,12,0.761,19,0.641,20,1.386,27,0.706,33,2.018,36,1.067,37,1.244,42,0.983,44,1.769,45,0.673,47,1.194,66,0.416,67,0.943,73,0.513,78,2.069,83,0.779,85,4.33,87,1.177,113,2.449,122,0.653,131,1.003,137,0.979,138,1.218,159,1.167,163,1.563,165,1.218,174,0.707,180,1.563,183,4.704,184,3.595,212,1.054,218,1.036,225,1.223,229,0.969,231,1.287,242,0.742,270,1.963,289,3.388,293,1.196,304,1.171,306,0.915,310,0.738,315,2.319,316,1.127,317,1.668,322,0.791,323,2.007,325,0.947,333,1.743,335,3.57,339,3.282,340,1.6,341,1.488,343,0.931,345,0.974,346,0.969,350,0.825,352,0.488,355,1.403,357,1.565,361,0.831,381,1.583,382,1.324,383,1.65,390,1.257,407,0.822,412,1.087,430,1.442,444,1.514,464,0.956,514,3.618,523,1.218,532,3.082,551,4.098,554,1.604,562,2.011,563,2.022,585,1.042,602,0.647,612,4.145,613,4.447,614,2.059,615,0.919,616,1.912,619,0.9,621,0.931,622,1.014,656,0.988,662,2.557,681,2.319,683,3.629,686,1.061,711,1.468,712,1.488,716,0.915,718,0.831,732,3.888,735,1.39,756,2.938,759,0.935,765,1.397,818,0.618,842,1.167,845,2.086,877,0.738,881,1.158,900,1.061,901,2.477,903,1.778,906,1.702,912,1.279,956,1.226,1003,1.036,1040,0.709,1062,2.293,1068,0.809,1100,1.241,1101,1.442,1102,1.397,1121,1.177,1124,0.759,1128,0.794,1154,1.915,1157,0.598,1228,1.109,1229,1.707,1247,1.025,1295,1.293,1308,1.468,1317,0.947,1319,1.636,1330,0.9,1338,1.419,1344,1.602,1460,1.468,1505,3.923,1547,1.117,1578,0.998,1581,0.988,1619,1.186,1629,1.609,1635,1.308,1640,1.074,1641,2.647,1646,2.213,1658,1.117,1692,1.468,1738,1.308,1765,1.324,1880,1.094,1884,1.036,1919,1.99,1939,1.031,1982,1.253,1989,1.442,1991,0.988,2102,1.167,2103,1.377,2145,1.149,2155,1.279,2165,1.496,2223,1.117,2295,2.602,2305,1.358,2316,1.94,2562,2.347,2578,1.468,2590,1.132,2616,1.778,2731,1.087,2831,1.358,2834,3.742,2840,1.324,2848,1.167,2849,1.468,2856,1.196,3069,2.441,3086,1.807,3121,1.496,3193,1.207,3230,1.279,3258,1.308,3313,1.308,3423,3.573,3536,1.528,3777,2.179,3887,1.109,3888,1.196,3908,2.926,4061,1.468,4094,1.207,4326,2.926,4836,1.253,5117,1.293,5201,1.563,5207,4.076,5247,1.651,5303,3.054,5485,2.842,5496,1.341,5513,1.651,5526,2.602,5603,2.515,5686,1.308,5687,1.778,5735,2.771,5739,1.468,5774,3.088,6029,3.32,6032,1.873,6782,3.32,7025,1.873,7211,1.873,7377,1.419,7378,1.397,7840,4.766,7845,1.778,7853,3.32,7858,1.778,7859,6.847,7860,4.472,7861,1.873,7862,1.873,7865,1.873,7955,6.071,7972,1.778,8172,1.873,8581,1.707,8583,2.926,8624,1.873,9053,1.048,9283,4.816,9284,3.576,9285,2.017,9286,2.017,9287,2.017,9288,3.576,9289,2.017,9290,2.017,9291,2.017,9292,2.017,9293,2.017,9294,2.017,9295,3.576,9296,6.666,9297,2.017,9298,2.017,9299,2.017,9300,2.017,9301,2.017,9302,2.017,9303,2.017,9304,2.017,9305,2.017,9306,2.017,9307,2.017,9308,2.017,9309,2.017,9310,2.017,9311,2.017,9312,2.017,9313,2.017,9314,2.017,9315,2.017,9316,2.017,9317,2.017,9318,2.017]],["t/3924",[0,1.136,3,1.199,4,1.382,5,0.739,6,1.934,7,1.59,8,1.401,12,0.891,13,1.413,18,0.541,19,0.736,20,0.685,22,1.266,28,0.667,30,0.571,33,0.442,35,0.342,38,1.227,39,0.456,41,0.707,42,0.906,43,0.712,44,0.632,45,0.426,47,0.426,53,1.703,56,1.187,57,0.652,66,0.994,70,0.733,72,0.432,76,0.666,78,1.367,82,1.034,83,0.913,85,3.17,88,0.744,89,0.449,92,0.853,93,0.702,106,1.514,108,0.608,109,0.55,110,0.506,111,0.671,113,1.385,114,0.649,115,0.332,119,0.722,122,0.413,131,1.918,132,0.757,134,3.507,139,0.838,140,0.533,146,0.996,147,0.819,148,0.579,153,0.548,160,0.577,161,0.671,164,0.645,170,0.572,172,0.898,173,1.045,174,0.448,183,3.57,184,0.622,185,0.568,196,0.537,197,0.555,228,0.471,231,0.85,241,0.57,242,0.47,243,2.534,244,0.703,253,0.764,260,0.801,261,0.838,266,0.828,278,0.68,291,1.57,295,0.819,307,1.348,308,0.537,315,1.314,316,1.519,317,0.442,320,0.463,322,0.501,335,1.265,340,1.364,341,0.983,342,0.374,345,1.14,346,0.613,348,0.638,349,1.192,350,1.348,352,1.318,356,0.35,357,1.103,358,0.524,361,1.691,366,1.157,387,0.929,390,0.83,392,2.204,397,0.757,401,0.579,407,1.343,408,0.751,409,1.187,410,0.688,429,1.119,430,0.707,437,0.812,444,2.307,452,0.458,454,0.872,469,0.778,488,1.439,496,0.66,514,2.692,532,0.675,533,0.764,539,0.722,543,4.903,544,5.249,548,0.632,556,1.367,562,0.986,563,2.322,565,0.778,570,2.217,578,0.722,585,1.702,588,0.929,595,3.16,599,1.081,601,2.462,602,1.057,612,0.622,613,0.712,615,1.501,616,0.677,617,0.357,618,0.757,621,0.589,652,0.702,656,2.669,658,0.439,662,0.913,664,0.533,677,0.967,680,3.024,681,3.898,683,3.139,686,1.242,692,1.499,717,2.534,718,0.526,742,1.482,749,1.09,756,0.941,771,2.122,801,0.913,818,1.01,821,0.622,822,0.669,841,1.321,863,0.849,879,0.663,881,0.733,889,0.702,891,1.55,900,0.671,916,1.015,940,2.078,956,0.81,960,1.079,974,1.174,992,1.743,1006,0.675,1030,0.757,1036,1.011,1038,0.563,1040,1.916,1047,0.48,1050,0.764,1053,0.557,1056,0.739,1058,0.626,1061,1.067,1075,0.81,1077,0.605,1105,0.849,1124,0.48,1128,1.616,1129,0.702,1153,0.626,1154,0.684,1157,0.378,1228,1.811,1232,1.045,1247,0.649,1289,0.989,1293,0.764,1295,0.819,1300,0.712,1308,0.929,1314,0.785,1317,2.263,1319,1.507,1321,0.849,1324,0.712,1330,3.752,1336,0.819,1344,0.572,1497,1.015,1506,1.685,1515,0.86,1548,0.707,1565,0.828,1566,0.626,1572,0.745,1581,2.361,1594,1.426,1629,1.063,1630,1.514,1634,1.05,1641,1.298,1646,2.214,1680,0.86,1692,0.929,1697,1.514,1699,0.656,1705,1.501,1713,1.038,1772,0.717,1804,0.707,1858,1.719,1884,1.213,1906,0.712,1919,0.528,1939,0.652,1942,0.587,1960,0.6,1991,2.361,1994,1.081,2075,0.652,2078,1.57,2102,1.367,2120,1.636,2140,2.082,2145,1.877,2156,0.819,2160,0.929,2200,0.967,2209,1.015,2210,1.799,2223,4.653,2224,2.664,2233,0.733,2241,0.707,2257,1.933,2258,1.999,2262,0.559,2274,0.838,2291,0.967,2298,1.126,2305,0.86,2316,0.693,2325,0.801,2368,1.933,2462,0.967,2481,1.081,2482,1.498,2562,2.163,2607,3.06,2679,0.757,2722,1.877,2731,0.688,2734,1.799,2743,1.837,2749,0.898,2753,0.656,2822,0.929,2970,1.015,3004,0.819,3028,0.86,3086,0.645,3182,1.015,3193,0.764,3617,1.126,3887,1.298,3888,0.757,3904,2.082,3905,0.884,4056,1.186,4082,0.947,4187,1.186,4189,1.015,4212,1.015,4328,0.793,4364,1.045,4388,1.015,4936,0.989,4959,0.793,5394,0.989,5410,1.045,5465,1.045,5567,0.989,5643,1.045,5666,1.877,5684,1.081,5726,0.872,5739,0.929,5774,1.514,6030,2.553,6031,3.65,6208,1.126,6377,0.884,6674,2.082,6760,3.943,7054,0.989,7073,1.081,7174,1.186,7177,2.619,7178,4.803,7187,1.186,7188,3.06,7224,0.884,7311,3.943,7324,1.933,7830,0.989,7856,1.186,7955,4.77,7987,3.446,7988,1.719,7989,0.929,7990,0.913,7994,3.62,7995,1.126,7996,1.126,7997,1.126,7998,2.082,8005,1.877,8006,1.015,8121,1.186,8173,0.967,8181,1.081,8243,3.476,8254,0.771,8504,3.476,8560,2.193,8561,3.814,8562,1.186,8563,2.193,8564,2.193,8565,5.06,8566,3.06,8567,2.193,8568,2.193,8569,1.186,8570,1.186,9053,0.663,9192,0.947,9193,0.947,9319,2.362,9320,1.277,9321,1.277,9322,1.277,9323,1.277,9324,1.277,9325,1.277,9326,2.362,9327,1.277,9328,2.362,9329,1.277,9330,1.277,9331,1.277,9332,1.277,9333,1.277,9334,1.277,9335,1.277,9336,1.277,9337,2.362,9338,1.277,9339,1.277,9340,2.362,9341,1.277,9342,1.277,9343,1.277,9344,1.277,9345,1.277,9346,1.277,9347,1.277,9348,1.277,9349,1.277,9350,2.362,9351,1.277,9352,2.362,9353,1.277,9354,2.362,9355,1.277,9356,1.277,9357,1.277,9358,1.277,9359,1.186]],["t/3926",[0,0.664,4,1.057,6,1.49,19,1.07,38,2.248,47,1.23,80,4.005,89,2.099,117,2.224,118,3.499,155,1.577,164,3.017,181,1.787,218,2.507,225,2.042,228,2.202,299,3.26,374,2.855,375,5.133,377,4.823,378,4.24,379,5.272,386,1.651,404,5.592,406,3.304,486,1.805,496,1.903,512,2.79,519,1.914,560,3.421,581,3.118,667,2.289,689,2.245,692,1.146,703,3.616,828,2.312,849,2.337,852,2.387,881,4.968,892,3.118,918,4.521,956,1.263,983,3.015,992,1.949,1079,5.543,1121,2.149,1128,2.349,1155,1.842,1157,1.091,1163,2.068,1164,2.039,1205,5.052,1251,2.855,1319,1.685,1460,2.681,1461,2.224,1501,3.421,1572,3.482,1637,3.015,1641,2.025,1692,2.681,1772,2.068,1883,2.733,1928,2.552,1993,3.248,2067,2.418,2125,3.708,2188,3.421,2193,3.118,2233,2.115,2241,2.039,2365,5.382,2367,4.075,2374,3.421,2375,3.118,2409,3.421,3035,3.248,3173,3.015,3913,5.052,3916,2.481,3966,2.481,4188,3.421,4189,2.929,4675,3.421,4693,3.015,4702,3.421,4711,8.036,4883,5.543,5216,3.421,5369,2.929,5410,3.015,5482,2.681,5705,3.118,5905,3.015,7069,3.118,7151,3.421,7736,3.118,7737,3.118,7742,3.118,7745,5.052,7753,3.118,7757,3.421,8463,3.421,8490,3.421,9360,5.97,9361,5.97,9362,5.97,9363,3.684,9364,3.684,9365,3.684,9366,5.97,9367,3.684,9368,3.684,9369,3.684,9370,3.684,9371,3.684,9372,3.684,9373,3.684,9374,3.684,9375,3.684,9376,3.684,9377,3.684,9378,3.684,9379,5.97,9380,3.684,9381,3.684,9382,3.684,9383,3.684,9384,3.684,9385,3.684,9386,3.684,9387,3.684,9388,3.684,9389,3.684,9390,3.684,9391,3.684,9392,3.684,9393,3.684,9394,3.684,9395,3.684,9396,3.684,9397,5.97,9398,3.684,9399,3.684,9400,3.684,9401,3.684,9402,3.684,9403,3.684,9404,3.684,9405,5.97,9406,3.684,9407,3.684,9408,3.684,9409,3.684,9410,3.684,9411,3.684,9412,3.684,9413,3.684,9414,3.684,9415,3.684,9416,3.684,9417,3.684,9418,3.684,9419,3.684,9420,3.684,9421,3.684,9422,3.248,9423,3.684,9424,3.684,9425,3.684,9426,3.684,9427,3.684,9428,3.684,9429,3.684,9430,3.684]],["t/3928",[0,1.134,4,1.135,6,0.564,7,1.523,9,1.006,13,2.367,18,0.958,19,0.709,20,1.096,22,0.595,28,0.639,30,0.547,35,1.413,38,0.676,42,1.087,45,0.755,47,0.755,60,1.202,66,0.816,69,0.743,82,0.99,85,0.925,88,0.511,89,1.391,92,1.902,99,1.629,103,1.039,113,0.951,118,0.832,131,0.471,136,0.954,159,1.309,164,1.143,167,1.451,180,1.753,182,1.143,183,2.043,184,1.103,192,1.591,193,2.606,195,1.125,218,2.956,219,1.149,225,1.353,244,0.673,252,1.053,263,1.342,267,1.114,307,1.618,309,0.864,316,0.713,317,0.783,322,1.552,325,1.062,329,1.103,332,2.996,333,3.849,335,1.212,338,0.589,339,1.114,340,0.752,345,1.092,349,0.978,355,1.552,356,0.619,361,0.932,366,1.108,378,2.582,391,2.482,392,2.892,401,1.026,409,1.524,425,0.896,430,0.677,437,0.778,443,1.342,444,2.231,448,0.896,452,1.42,453,1.108,474,1.219,486,1.108,496,1.169,497,1.451,514,2.774,520,1.219,533,1.354,536,1.244,542,3.707,549,1.189,563,3.574,564,1.915,567,1.988,570,3.136,571,1.798,576,1.354,577,3.211,578,2.237,595,1.189,599,1.915,614,0.8,616,1.512,617,1.106,621,1.044,622,1.137,623,1.378,667,1.405,680,4.506,681,3.418,683,5.144,688,1.01,689,1.378,691,1.567,692,1.23,701,1.678,716,1.794,717,1.189,718,2.17,725,1.103,732,3.687,738,1.162,742,1.42,756,0.902,759,3.658,766,2.934,767,4.189,768,3.026,769,1.753,770,2.271,771,2.044,772,1.143,773,2.127,774,2.205,775,3.144,776,1.544,777,1.392,778,1.342,779,1.851,780,1.851,781,1.851,782,1.678,783,1.851,784,3.237,785,2.996,786,1.851,787,1.851,788,1.851,789,3.487,790,1.994,791,1.994,792,1.851,793,1.851,794,1.994,795,1.994,796,3.144,797,2.879,798,1.485,799,1.798,800,1.994,801,1.618,802,1.851,803,1.994,804,1.994,805,1.994,806,4.787,807,1.678,808,1.713,809,1.851,810,3.487,811,1.851,812,1.753,813,1.994,814,1.851,815,1.851,816,1.798,817,1.32,818,2.2,819,1.713,820,3.651,821,1.103,822,0.641,823,1.053,824,1.279,825,1.567,826,1.435,827,1.753,828,1.42,829,1.851,830,3.364,831,1.713,841,0.728,861,1.435,882,0.968,900,1.189,901,1.567,956,0.776,974,0.806,1009,1.523,1053,0.986,1109,1.713,1128,0.89,1144,0.753,1154,1.212,1157,1.172,1193,1.591,1247,1.149,1255,1.544,1321,1.503,1326,1.591,1334,0.83,1461,2.388,1515,2.663,1537,1.523,1539,1.713,1541,1.915,1578,1.12,1579,1.42,1598,1.467,1599,1.753,1646,1.817,1647,1.678,1792,1.366,1884,1.162,1895,1.503,1919,0.935,1942,1.039,1986,1.354,1991,1.108,1994,3.348,2061,4.557,2197,1.591,2203,1.753,2210,4.641,2333,1.915,2403,1.851,2505,1.523,2562,1.485,2765,1.299,2867,1.713,2991,2.101,2992,2.101,3009,2.101,3113,1.618,3717,1.713,3905,1.567,3910,1.451,4106,2.782,4328,2.457,4836,2.457,5247,1.851,6062,1.851,6063,1.851,6339,1.915,7001,2.101,7031,1.591,7380,1.994,7754,1.753,7948,1.798,7955,2.663,8057,2.101,8115,1.851,8155,1.713,8158,1.798,8467,1.994,8468,2.101,9053,1.176,9192,1.678,9193,1.678,9359,2.101,9431,2.262,9432,2.262,9433,2.262,9434,2.262,9435,2.262,9436,2.262,9437,2.262,9438,2.262]],["t/3930",[0,0.312,4,2.098,6,1.826,7,1.892,18,1.189,19,0.855,38,0.839,39,1.003,47,0.938,85,4.257,88,0.635,92,1.014,113,1.181,115,0.732,118,1.034,122,0.91,131,1.524,137,3.012,138,1.696,144,1.844,146,1.185,160,1.269,168,1.534,169,1.524,183,4.502,184,2.324,215,1.495,218,1.799,225,0.961,227,1.725,230,0.861,231,1.716,242,1.754,263,1.666,264,2.378,296,1.123,314,1.844,315,1.3,316,1.502,317,2.837,335,4.387,340,0.933,345,2.302,349,0.695,355,1.87,357,0.755,366,4.013,381,2.111,383,1.296,388,1.42,405,1.325,406,2.639,407,1.943,430,0.841,431,1.652,448,1.113,452,1.009,514,3.667,532,4.333,536,2.621,539,1.589,541,2.045,542,1.976,548,2.359,559,2.609,562,1.173,591,2.396,595,1.477,601,2.154,602,0.901,615,1.28,616,0.806,644,1.514,650,1.844,664,1.173,680,1.763,683,1.138,686,1.477,692,0.874,699,1.23,717,1.477,727,2.621,741,3.253,754,1.211,756,1.12,777,2.932,847,1.589,849,1.782,852,1.906,913,1.383,956,0.963,971,2.409,972,2.004,974,2.212,1006,1.486,1026,1.892,1028,1.652,1034,1.601,1038,1.239,1047,2.337,1053,1.225,1077,1.331,1088,1.763,1099,2.781,1101,2.009,1108,1.577,1124,1.057,1128,1.106,1129,2.621,1153,2.335,1157,2.167,1247,1.427,1295,1.801,1308,2.045,1319,1.285,1324,1.566,1330,1.254,1518,3.373,1581,1.376,1614,1.477,1635,1.822,1641,1.544,1646,1.291,1699,1.443,1710,3.21,1741,1.555,1759,2.827,1803,1.356,1880,2.586,1919,1.97,1991,2.335,2061,3.138,2103,1.918,2223,1.555,2263,1.42,2264,1.397,2299,1.867,2357,2.045,2358,2.045,2766,2.009,2774,1.782,2823,2.084,3018,2.177,3069,1.918,3086,3.697,3188,2.477,3193,1.681,3743,3.901,3887,1.544,4081,2.609,4256,2.609,4313,1.946,4314,1.976,4328,1.745,4364,2.299,4836,2.961,4924,2.084,5063,1.976,5071,2.233,5103,1.976,5586,2.084,5656,3.353,5726,1.918,5737,2.009,5739,2.045,5774,1.801,5994,2.609,6218,2.233,6835,3.353,7031,5.146,7046,2.084,7052,2.299,7053,2.609,7284,2.477,7840,2.009,7955,5.87,8326,5.474,8577,4.035,8583,3.901,9053,1.46,9439,2.81,9440,2.81,9441,2.81,9442,6.21,9443,4.427,9444,4.768,9445,2.81,9446,4.768,9447,2.81,9448,6.21,9449,2.81,9450,2.81,9451,4.768,9452,2.81,9453,2.81,9454,2.81,9455,2.81,9456,2.81,9457,2.81,9458,2.81,9459,2.81,9460,2.81,9461,2.81,9462,2.81,9463,2.81,9464,2.81,9465,2.81,9466,2.81,9467,2.81,9468,2.81,9469,2.81,9470,2.81]],["t/3932",[0,0.741,3,1.301,4,1.026,6,2.803,9,2.59,26,1.514,35,0.541,36,1.067,39,0.72,41,0.767,42,0.983,43,1.124,45,0.673,47,1.194,50,1.124,53,2.606,60,1.086,62,0.794,66,0.738,67,1.672,69,0.662,70,2.053,72,0.683,74,1.341,85,4.801,88,0.456,92,1.291,108,2.293,122,1.158,125,0.804,131,1.866,150,0.951,183,3.628,184,2.348,225,1.223,231,0.726,243,1.88,253,1.207,266,2.319,272,2.314,296,0.806,302,0.939,307,2.383,309,2.545,316,2.824,317,1.238,333,0.983,335,1.915,336,1.687,340,2.214,342,1.049,345,0.974,346,1.718,357,1.294,366,1.752,381,0.893,383,1.65,388,1.807,401,0.915,430,2.207,431,2.103,437,1.229,438,1.042,444,3.378,450,0.983,452,1.729,466,1.293,514,3.756,519,1.048,520,1.087,545,1.177,562,0.842,563,2.022,572,2.268,580,2.139,583,3.619,585,2.488,601,0.911,615,3.037,616,1.026,636,1.94,644,1.927,648,1.324,652,1.966,664,0.842,678,1.563,683,1.448,693,2.665,727,1.109,738,1.036,756,2.938,768,2.053,772,1.807,773,3.779,818,2.259,821,0.983,844,1.067,849,1.279,877,0.738,901,1.397,906,0.96,913,0.993,956,0.692,974,0.719,975,1.651,1009,1.358,1040,1.257,1043,0.904,1052,1.229,1053,1.559,1073,1.604,1108,1.132,1116,2.602,1117,2.602,1118,2.441,1121,2.086,1123,3.368,1124,0.759,1128,0.794,1144,3.525,1154,1.08,1156,0.956,1157,0.598,1247,1.025,1291,1.031,1313,1.496,1317,1.679,1319,1.636,1321,1.341,1330,0.9,1334,1.312,1361,0.983,1506,0.828,1518,1.472,1519,2.251,1545,1.993,1578,0.998,1591,1.528,1594,1.218,1628,1.419,1629,0.908,1630,3.088,1631,1.207,1632,1.496,1633,1.651,1641,1.966,1646,3.388,1696,1.442,1759,3.953,1804,1.117,1919,0.833,1991,2.359,2058,2.842,2061,2.944,2145,2.744,2210,2.63,2211,2.907,2212,1.293,2250,1.419,2305,1.358,2325,1.266,2436,1.563,2467,1.651,2470,1.651,2480,1.778,2491,1.468,2562,2.347,2590,1.132,2605,1.324,2606,1.377,2753,1.837,2759,2.653,2762,1.493,2774,3.054,2776,2.708,2781,2.139,2822,1.468,2823,1.496,2869,2.653,2892,2.869,2944,1.196,3229,1.778,3282,1.177,3306,1.308,3307,1.468,3469,1.397,3510,3.026,3598,1.952,3887,1.966,3888,1.196,3905,1.397,3922,5.557,4069,2.159,4073,3.336,4094,1.207,4195,1.397,4836,1.253,5394,2.771,5739,1.468,5757,1.778,5760,1.707,5774,3.088,6076,4.245,6077,5.876,6370,2.347,6378,1.397,6835,2.515,7054,1.563,7955,4.528,8167,1.873,9053,1.048,9192,1.496,9193,1.496,9471,3.576,9472,3.576,9473,2.017,9474,3.576,9475,2.017,9476,3.576,9477,2.017,9478,4.816,9479,2.017,9480,2.017,9481,2.017,9482,2.017,9483,2.017,9484,2.017,9485,2.017,9486,2.017,9487,2.017,9488,2.017,9489,2.017,9490,2.017]],["t/3934",[0,1.009,3,0.632,4,0.898,6,0.781,9,0.773,12,0.656,13,1.872,19,0.561,22,0.457,26,2.3,30,0.757,31,1.049,33,0.602,35,1.4,39,1.118,42,0.478,45,1.045,47,1.425,52,2.561,53,1.106,60,2.04,62,2.371,66,1.385,69,1.402,70,0.998,81,0.843,82,1.37,85,4.186,86,1.186,89,2.118,91,1.181,92,2.424,108,0.827,113,0.73,131,0.362,143,1.581,144,1.14,146,0.733,148,0.788,153,0.746,168,0.949,169,0.943,170,0.779,174,0.609,181,0.843,183,3.038,184,2.081,192,1.222,212,0.908,218,1.237,225,2.06,230,0.959,231,1.127,236,0.931,243,0.914,244,0.931,259,0.823,261,1.14,262,0.795,294,0.752,295,1.114,296,1.707,309,0.663,314,1.14,315,0.474,316,1.345,317,2.325,320,1.136,335,2.286,339,1.541,340,1.04,342,0.918,345,0.839,354,1.155,355,1.228,356,0.476,357,0.841,358,0.713,361,1.758,374,1.346,375,1.031,376,0.936,377,0.969,379,1.059,380,0.898,381,1.891,382,2.802,383,0.802,394,0.782,397,3.983,398,2.596,399,1.222,407,0.708,409,1.742,414,1.316,415,1.856,416,1.422,419,1.471,423,1.243,426,0.619,428,0.983,429,0.823,430,2.189,437,0.597,438,0.898,443,1.031,444,2.21,445,1.186,452,1.124,467,0.823,481,0.936,496,0.898,514,3.508,519,1.626,522,1.17,530,1.204,542,1.222,549,0.914,562,2.179,563,2.414,565,2.601,566,3.613,567,0.873,570,1.155,585,1.617,601,1.414,615,1.426,616,0.498,621,0.802,622,1.573,640,1.031,644,0.936,653,1.626,656,1.533,664,0.725,667,2.652,675,1.346,682,1.17,683,1.729,692,1.624,693,1.251,698,0.962,699,0.761,700,0.998,704,0.931,724,1.114,725,1.526,727,0.955,753,0.983,756,0.692,773,1.263,774,0.969,775,1.381,818,0.532,842,1.005,844,0.919,863,1.155,881,0.998,906,0.827,916,1.381,918,1.316,941,0.983,956,1.073,1006,0.919,1030,1.031,1038,0.766,1040,0.611,1049,2.08,1056,1.005,1061,1.414,1066,1.031,1076,0.869,1093,1.14,1096,0.798,1124,1.178,1128,0.684,1154,0.931,1157,0.927,1163,0.975,1164,0.962,1176,1.381,1177,1.422,1178,1.471,1179,1.471,1180,1.422,1181,1.471,1182,1.079,1183,1.316,1184,2.649,1185,2.649,1186,1.079,1187,2.561,1188,1.471,1189,1.471,1190,1.381,1191,1.316,1192,1.422,1193,1.222,1194,1.17,1226,0.831,1247,0.883,1293,1.04,1305,1.243,1312,1.049,1314,1.069,1317,2.005,1328,0.805,1330,2.997,1344,1.913,1409,1.471,1434,1.09,1445,3.964,1446,1.186,1460,1.265,1475,2.561,1476,2.906,1506,1.284,1566,2.092,1579,1.09,1581,2.557,1602,1.09,1634,1.391,1646,2.398,1699,0.893,1777,1.289,1800,2.649,1880,1.698,1919,0.718,1991,1.533,2061,0.878,2077,1.14,2125,1.079,2145,0.99,2155,3.311,2169,0.983,2195,1.316,2200,1.316,2203,2.425,2223,3.335,2241,0.962,2255,1.381,2316,0.943,2372,2.488,2379,1.471,2414,1.381,2438,1.186,2510,1.005,2511,1.04,2514,1.532,2561,1.022,2570,1.471,2662,1.102,2697,1.381,2732,1.155,2790,1.222,2867,1.316,3055,1.471,3086,3.045,3096,1.381,3106,0.931,3121,1.289,3166,1.243,3248,1.532,3362,1.14,3554,1.422,3726,1.316,3905,1.204,3916,1.17,4180,1.532,4328,1.079,4521,1.471,4570,2.201,4597,1.532,4667,1.316,4693,1.422,4747,1.471,4810,2.37,4865,1.471,4879,1.614,5087,1.316,5482,1.265,5521,2.561,5579,1.381,5762,3.763,5953,1.614,5970,1.346,6062,2.561,6063,1.422,6575,1.471,6752,1.614,6787,1.614,6994,1.471,7230,1.422,7391,1.471,7595,1.532,7596,1.532,7723,1.532,7724,1.532,7726,1.532,7727,1.532,7728,1.532,7729,1.532,7730,1.532,7731,1.532,7732,1.532,7733,1.532,7734,1.532,7736,1.471,7737,1.471,7738,1.532,7739,1.532,7740,1.532,7741,1.532,7742,1.471,7743,1.532,7744,1.532,7745,1.471,7746,2.759,7747,1.532,7748,1.532,7749,1.532,7750,1.532,7751,1.532,7752,1.532,7753,1.471,7919,2.759,7955,4.402,8392,1.614,8518,2.759,8524,3.964,8525,2.906,9053,0.903,9192,1.289,9193,1.289,9491,3.13,9492,1.738,9493,3.13,9494,5.22,9495,1.738,9496,3.13,9497,1.738,9498,1.738,9499,1.738,9500,1.738,9501,1.738,9502,1.738,9503,1.738,9504,1.738,9505,1.738,9506,1.738,9507,1.471,9508,1.738,9509,1.738,9510,1.738,9511,1.738,9512,1.738,9513,1.738,9514,1.738,9515,1.738,9516,1.738,9517,1.738,9518,1.738,9519,1.738,9520,4.27,9521,4.27,9522,1.738,9523,1.738,9524,1.738,9525,1.738,9526,1.738,9527,1.738,9528,1.738,9529,1.738]],["t/3936",[0,1.12,3,1.503,4,1.57,6,2.74,30,0.575,35,1.754,41,0.886,44,2.044,47,0.793,49,1.003,56,1.195,57,1.214,60,1.254,66,1.676,80,1.265,85,4.381,86,1.623,88,0.537,91,0.897,92,1.977,103,1.897,113,0.999,131,1.362,137,1.153,183,3.381,218,1.196,225,1.873,227,1.495,242,0.875,244,0.707,263,1.41,267,1.17,270,1.684,296,0.95,304,1.793,307,0.972,310,1.511,313,1.646,315,1.126,317,0.823,322,0.933,323,1.334,325,1.116,335,2.932,336,1.121,349,0.588,350,0.972,354,1.58,355,2.148,356,1.791,357,0.639,361,2.255,366,1.164,380,2.829,388,2.087,392,1.889,401,1.078,404,1.398,406,1.316,409,0.687,428,1.344,429,2.594,430,1.958,431,3.22,440,2.744,444,2.77,448,1.635,452,3.133,453,2.682,454,2.819,455,3.063,466,1.524,514,4.336,515,3.852,516,3.2,518,1.975,539,2.335,540,1.646,549,2.879,562,0.992,585,1.228,591,1.195,601,1.866,612,3.611,613,3.052,614,0.84,616,1.184,618,1.41,640,1.41,653,2.146,664,1.724,683,0.963,693,0.95,699,1.04,712,2.278,717,1.25,735,1.605,753,1.344,756,0.947,818,1.677,822,2.302,841,0.764,853,1.477,877,0.87,879,2.146,900,1.25,956,1.416,974,1.95,1040,0.836,1043,1.065,1052,1.448,1058,1.164,1099,1.386,1118,1.623,1124,0.894,1125,2.012,1128,1.625,1155,1.188,1157,0.704,1163,3.672,1164,3.621,1247,1.208,1319,1.087,1578,1.176,1581,1.164,1626,1.477,1634,1.057,1646,3.403,1713,2.406,1741,3.031,1807,1.56,1919,1.706,1942,1.092,1943,1.6,1945,1.623,1991,3.205,2026,2.953,2027,3.063,2061,2.767,2077,1.56,2145,1.354,2169,1.344,2256,1.354,2526,1.763,2527,2.198,2528,3.687,2690,4.749,2762,1.724,2764,1.265,2822,1.73,2987,1.542,3070,3.283,3158,3.64,3159,1.7,3162,1.7,3184,1.8,3193,2.471,3258,1.542,3341,1.344,3725,1.945,3853,1.623,3922,3.621,3966,1.6,4195,1.646,4326,1.945,4667,3.128,4836,1.477,4998,3.283,4999,3.379,5220,1.763,5302,3.687,5323,1.8,5352,1.7,5485,3.283,5487,3.2,5489,3.835,5491,2.207,5492,3.835,5506,2.012,5507,4.634,5508,4.634,5510,5.2,5511,2.012,6062,1.945,6063,1.945,6820,1.763,6821,1.842,6860,3.835,6861,3.835,7052,1.945,7355,2.207,7468,1.889,7955,4.409,8521,1.945,9053,1.235,9192,1.763,9193,1.763,9530,2.377,9531,5.476,9532,2.377,9533,2.377,9534,2.377,9535,2.377,9536,2.377,9537,2.377,9538,2.377,9539,2.377,9540,2.377,9541,5.476,9542,2.377,9543,2.377,9544,2.377,9545,2.377,9546,2.377,9547,2.377,9548,2.377,9549,2.377]],["t/3938",[0,0.589,3,1.159,4,1.519,6,2.815,12,1.202,18,2.242,19,0.571,35,1.823,38,0.951,42,0.875,49,2.234,66,1.403,69,1.045,72,1.078,76,0.897,85,4.736,86,2.173,88,0.719,89,1.119,92,1.149,96,1.469,108,1.516,109,0.741,116,2.117,122,1.715,131,1.416,174,1.117,183,3.9,184,1.552,185,1.415,211,2.544,219,1.618,232,2.24,262,1.457,263,1.888,296,1.273,301,2.065,306,2.402,307,2.166,313,2.205,314,2.09,315,0.868,316,1.669,317,2.744,325,1.495,338,1.379,355,1.249,357,0.855,358,1.307,388,1.609,392,2.423,408,1.872,409,0.921,431,1.872,444,2.878,452,2.845,459,1.75,481,1.716,514,4.071,526,4.448,539,1.8,567,1.6,570,3.245,585,1.645,601,3.58,602,3.381,606,1.814,623,1.94,658,1.094,661,1.516,676,1.738,692,0.99,725,3.314,777,1.958,841,1.024,852,1.273,928,2.277,956,2.331,960,1.043,1047,1.198,1049,2.116,1093,2.09,1100,1.958,1101,2.277,1118,4.641,1123,1.609,1124,1.198,1128,2.084,1144,1.06,1155,1.592,1157,2.606,1193,2.24,1247,1.618,1308,2.317,1312,1.922,1324,2.952,1344,1.427,1518,1.311,1566,1.56,1634,3.022,1646,3.64,1677,4.266,1681,3.668,1690,6.706,1709,1.584,1759,1.888,1794,2.605,1804,1.762,1919,1.316,1932,2.173,1988,2.467,1991,2.594,2025,1.552,2026,4.862,2027,3.928,2056,2.019,2077,2.09,2102,4.584,2128,2.807,2129,2.411,2132,2.042,2133,4.333,2137,1.998,2144,2.695,2356,2.173,2358,4.948,2731,1.716,2753,1.636,2804,2.605,2806,3.04,3086,2.676,3106,1.705,3128,2.695,3342,2.467,3886,3.854,5119,2.277,5147,2.467,5177,2.695,5178,2.695,6275,2.531,7166,2.807,7955,4.797,8509,4.668,8513,2.957,8514,7.357,8515,2.957,8516,4.917,9053,1.654,9192,2.362,9193,2.362,9237,4.917,9550,3.184,9551,3.184,9552,5.296,9553,3.184,9554,3.184,9555,3.184,9556,3.184,9557,5.296,9558,6.799,9559,3.184,9560,3.184,9561,3.184,9562,3.184,9563,3.184,9564,3.184,9565,3.184]],["t/3940",[0,0.327,3,2.742,4,1.421,6,2.42,30,0.711,33,1.018,35,2.255,41,1.063,47,0.981,66,1.554,67,1.374,69,2.993,72,2.551,85,4.609,86,2.007,87,1.715,92,2.72,113,1.236,115,0.766,119,1.663,124,1.98,131,1.337,183,3.533,184,2.415,195,1.462,218,0.852,225,1.005,242,3.094,253,3.841,254,3.335,263,4.988,307,1.203,309,1.891,310,1.076,313,2.036,314,4.213,315,1.351,317,3.157,322,1.153,325,3.949,332,2.227,335,2.653,341,1.223,356,0.805,357,0.79,361,1.211,391,1.845,392,2.266,407,1.199,412,1.584,430,1.483,444,3.19,448,1.164,450,1.433,514,4.71,521,1.701,536,1.616,549,2.604,562,1.227,585,1.519,591,1.478,593,1.865,601,2.238,616,0.843,619,1.312,644,1.584,656,1.44,670,1.675,692,0.914,702,1.845,704,1.574,727,1.616,735,1.143,738,2.545,739,2.781,756,2.558,758,1.729,841,0.945,877,1.076,891,4.213,913,2.439,924,1.759,956,1.008,957,1.93,960,0.963,974,1.047,1047,2.416,1058,2.427,1061,4.119,1066,1.744,1117,2.14,1118,2.007,1123,1.486,1124,1.106,1128,1.157,1134,1.865,1138,2.14,1144,0.979,1154,1.574,1247,1.494,1317,1.38,1319,1.345,1336,1.885,1417,2.181,1525,3.335,1534,1.775,1547,1.627,1578,3.728,1646,2.949,1699,1.51,1804,1.627,1846,1.98,1875,2.14,1919,2.652,1939,1.502,1991,3.691,2025,1.433,2026,2.102,2077,6.366,2132,1.885,2145,1.675,2252,3.675,2477,4.367,2478,4.367,2479,1.93,2495,2.181,2496,2.592,3086,3.807,3112,2.007,3166,3.542,3249,3.485,3341,1.663,3554,2.406,3886,4.672,3966,1.98,4094,1.759,4195,2.036,4222,2.406,4385,1.885,4973,3.485,5352,2.102,5382,2.278,5383,5.433,5512,1.98,5969,2.73,5970,3.839,6786,2.592,7296,2.181,7330,2.488,7332,2.488,7333,2.488,7933,2.227,7955,4.25,8509,7.414,8510,6.996,8511,2.73,8512,2.592,9053,1.528,9192,2.181,9193,2.181,9566,6.42,9567,2.94,9568,2.94,9569,4.954,9570,2.94,9571,2.94,9572,2.94,9573,2.94,9574,2.73,9575,2.73,9576,2.94,9577,2.94,9578,2.94]],["t/3942",[6,1.245,39,1.783,42,2.082,45,1.666,47,1.666,72,2.566,78,2.888,81,2.421,85,3.746,87,2.911,92,3.306,115,1.3,131,1.578,183,4.261,184,3.694,231,1.797,233,3.041,253,2.986,273,4.224,278,4.033,294,2.16,296,1.995,314,3.276,315,1.361,317,1.728,335,2.673,345,2.41,350,3.099,361,2.055,380,2.579,407,2.035,424,3.407,430,2.268,514,4.248,527,3.633,562,3.824,570,1.841,591,2.509,593,3.165,601,3.423,623,3.041,644,2.69,646,4.224,648,4.973,653,2.593,672,1.983,678,5.872,683,3.069,721,3.407,756,3.02,841,1.605,852,1.995,906,2.376,956,1.711,971,2.522,1036,2.136,1076,2.496,1124,1.878,1128,1.964,1157,1.479,1170,3.165,1247,2.536,1295,3.2,1319,2.283,1336,3.2,1471,2.445,1518,2.055,1578,2.47,1646,2.293,1699,2.564,1884,2.564,1919,3.131,1991,2.445,2061,3.829,2350,3.574,2509,2.656,2633,4.35,2731,2.69,3086,2.522,3327,2.844,3922,2.763,4222,7.495,4262,4.4,4499,4.635,4825,4.635,4836,3.1,5313,4.084,5384,4.4,5395,4.635,5972,3.633,6848,3.041,7296,5.621,7933,5.739,7955,5.849,8453,4.224,9053,2.593,9579,4.992,9580,4.992,9581,4.635,9582,7.578,9583,4.992,9584,4.992,9585,4.992,9586,4.992,9587,4.992,9588,4.635,9589,4.992,9590,4.992,9591,4.992]],["t/3944",[0,0.449,3,1.469,6,2.775,18,1.709,35,1.723,38,1.206,53,3.224,60,1.226,75,2.394,80,4.258,85,4.338,88,0.912,91,1.523,92,1.457,125,1.609,131,2.209,132,2.394,142,2.507,180,3.128,183,4.11,215,2.148,218,2.318,306,3.63,307,1.651,309,2.453,315,1.101,317,3.448,333,1.968,361,2.645,406,3.556,407,2.619,424,2.756,444,2.72,475,2.756,514,4.81,523,2.437,533,2.415,542,2.839,550,3.377,562,1.685,565,2.459,588,2.938,615,1.839,622,2.029,735,1.569,756,1.609,828,2.533,830,4.258,875,3.163,956,1.384,960,2.104,972,1.697,1082,2.56,1124,2.417,1128,1.588,1129,3.531,1226,1.93,1247,2.051,1289,3.128,1319,1.847,1336,2.588,1581,3.147,1594,2.437,1640,2.148,1646,3.676,1678,2.938,1690,5.437,1820,2.148,1919,2.654,2061,3.246,2134,3.303,2145,2.3,2325,4.031,2383,2.938,2434,2.756,2479,2.649,2518,2.938,2605,4.216,2697,3.209,2799,2.938,3049,3.748,3086,5.032,3187,3.748,3188,3.558,3193,2.415,3282,2.354,3902,2.886,4504,5.437,4560,2.354,4836,2.507,5088,3.128,5103,4.519,5119,2.886,5153,3.209,5173,3.303,5422,3.748,6218,3.209,6310,3.057,6786,3.558,6848,2.459,7031,2.839,7046,2.994,7296,5.936,7830,3.128,7933,6.06,7937,3.748,7938,3.748,7955,5.621,8321,3.558,8322,3.558,9053,2.097,9192,2.994,9193,2.994,9592,4.037,9593,4.037,9594,4.037,9595,4.037,9596,4.037,9597,4.037,9598,4.037,9599,4.037,9600,4.037,9601,4.037,9602,4.037,9603,4.037,9604,4.037,9605,6.424]],["t/3946",[0,0.902,1,3.162,4,2.774,6,2.024,51,3.188,80,6.084,84,2.856,85,2.235,113,2.298,115,1.423,131,1.138,174,1.917,183,3.748,184,2.664,186,3.068,218,2.35,236,2.927,242,2.011,294,2.365,309,3.693,310,3.539,316,1.722,317,2.809,340,1.816,352,1.322,381,2.42,387,3.978,388,4.888,403,2.808,404,4.77,406,4.489,425,2.164,426,1.947,430,3.203,438,2.823,444,3.434,448,2.164,514,3.737,532,2.891,565,3.33,615,2.49,632,3.138,664,2.282,693,2.185,756,3.854,759,2.532,906,2.602,956,2.781,974,1.947,1006,2.891,1108,3.068,1124,2.057,1128,2.151,1228,3.004,1247,2.777,1312,3.299,1646,2.511,1882,3.466,1884,2.808,1991,2.677,2263,2.762,2264,2.718,2316,2.965,2350,2.578,2357,3.978,2626,3.27,2633,3.138,3086,2.762,3231,3.731,3638,3.545,3722,4.472,3835,4.472,4877,4.818,5246,4.625,5686,3.545,6310,4.139,6848,4.942,7955,6.266,8580,4.472,9053,2.84,9422,4.818,9606,5.075,9607,5.075,9608,5.075,9609,5.466,9610,5.466,9611,5.075,9612,5.466,9613,5.075,9614,5.075,9615,5.466]],["t/3948",[0,0.571,1,4.478,4,2.22,6,1.931,72,1.738,84,2.683,85,3.166,92,1.853,108,2.443,113,2.158,131,1.069,146,2.165,174,1.8,183,4.02,184,2.502,218,1.487,236,2.749,294,3.349,309,1.96,310,1.878,314,3.369,316,1.618,317,3.226,340,1.705,350,2.099,352,1.242,356,1.405,357,1.379,403,2.637,404,3.019,426,1.828,430,3.105,438,2.652,448,2.033,504,3.808,514,2.99,562,2.143,612,3.773,613,4.314,615,2.338,627,3.736,664,3.231,693,2.052,716,2.329,756,4.436,877,1.878,906,2.443,956,2.653,974,1.828,992,4.094,1124,1.932,1128,3.046,1129,2.822,1228,2.822,1247,2.608,1312,3.099,1506,2.106,1578,2.54,1646,2.358,1656,2.784,1882,3.255,1884,2.637,1897,3.411,1919,2.121,1991,3.792,2061,2.594,2263,2.594,2264,2.553,2316,2.784,2350,2.421,2357,3.736,2633,2.947,3086,3.911,3193,3.071,3231,3.504,3638,3.329,3835,4.2,4240,3.736,4417,4.2,4836,3.188,5301,6.55,5302,5.211,5686,3.329,6848,3.127,7054,3.977,7955,6.464,8580,4.2,9053,2.667,9422,4.525,9606,4.766,9607,4.766,9608,4.766,9611,4.766,9613,4.766,9616,5.133,9617,5.133,9618,5.133,9619,5.133,9620,5.133,9621,5.133,9622,7.74,9623,5.133,9624,4.766,9625,5.133,9626,5.133]],["t/3950",[1,2.037,4,1.01,6,1.82,19,1.031,35,0.944,39,1.257,42,0.967,44,1.742,49,1.485,72,1.192,77,1.873,83,1.36,85,4.301,92,1.271,93,1.935,103,1.617,122,1.14,131,0.733,174,1.235,183,4.811,184,2.804,193,1.278,213,2.07,249,2.881,250,2.403,262,1.61,296,1.407,310,1.288,314,2.311,316,1.109,317,3.451,326,2.611,327,2.37,328,1.798,340,1.169,341,1.465,343,1.624,345,2.777,357,0.946,361,3.004,407,1.435,425,1.394,430,2.521,437,2.507,452,1.264,532,1.862,536,1.935,541,2.562,549,1.851,601,3.806,612,1.716,613,1.962,614,1.244,622,1.769,627,2.562,658,1.21,683,1.426,693,1.407,741,2.557,748,2.088,755,1.751,756,3.7,877,2.105,882,1.507,893,2.666,933,2.476,934,2.728,956,1.207,974,1.254,1006,1.862,1036,1.507,1057,2.403,1062,2.257,1066,2.088,1101,2.517,1102,2.438,1123,1.779,1128,1.385,1157,1.043,1295,3.689,1312,3.473,1314,2.165,1317,1.653,1319,1.61,1324,1.962,1334,1.292,1344,2.578,1369,2.517,1456,2.403,1471,1.725,1518,1.45,1534,2.125,1566,1.725,1578,1.742,1581,1.725,1641,1.935,1656,1.91,1692,2.562,1705,1.604,1750,2.403,1901,2.798,1942,2.643,2103,2.403,2166,2.283,2169,3.253,2244,2.187,2350,3.441,2513,3.269,2529,2.438,2633,4.188,2666,2.311,2690,5.401,2731,1.897,2834,1.976,2856,2.088,3086,4.257,3112,2.403,3328,2.476,3341,1.991,3398,2.125,3495,2.881,3536,2.666,3638,4.731,3777,2.145,3922,3.184,3927,2.881,4028,2.798,4158,2.37,4285,2.37,4328,2.187,4880,2.666,5526,2.562,5528,2.798,5774,2.257,5825,2.881,5972,5.309,6038,1.769,6129,3.269,6362,3.269,6572,3.269,6727,3.269,6835,5.131,6848,2.145,6944,2.728,7955,6.531,9094,3.269,9143,3.269,9614,3.269,9627,3.521,9628,3.521,9629,3.521,9630,5.753,9631,5.753,9632,3.269,9633,3.521,9634,3.521,9635,3.521,9636,3.521,9637,3.521,9638,3.521,9639,3.521,9640,3.521,9641,3.521,9642,3.521,9643,3.521,9644,3.521,9645,3.521,9646,3.521,9647,3.521,9648,3.521,9649,3.521,9650,3.521]],["t/3952",[0,0.474,1,3.885,3,1.553,4,1.224,19,1.488,20,0.887,35,1.145,37,1.485,39,2.964,47,1.425,49,1.801,53,2.933,74,2.836,83,1.649,85,4.185,91,1.611,96,1.969,100,2.51,109,0.993,115,1.111,131,1.959,162,2.244,183,3.216,184,3.273,215,2.271,231,1.536,242,2.47,293,2.531,296,1.706,310,1.562,315,2.263,317,3.543,335,2.286,341,1.775,345,2.06,352,1.624,355,1.674,357,1.147,361,1.757,366,3.289,391,2.678,407,1.74,412,2.3,429,2.022,430,2.484,444,1.807,466,2.737,514,3.206,531,3.166,544,2.576,545,2.489,546,3.393,548,3.322,549,2.244,592,3.106,612,2.081,616,1.224,617,1.193,618,2.531,676,2.33,692,1.327,693,1.706,741,1.897,756,2.675,821,2.081,876,2.531,939,1.89,956,1.463,960,1.398,971,2.157,1006,3.551,1008,3.612,1034,2.431,1052,2.6,1099,2.489,1128,2.642,1155,2.134,1196,3.166,1247,2.168,1248,2.956,1295,4.305,1434,2.678,1461,2.576,1506,1.751,1517,3.95,1518,1.757,1547,2.362,1641,2.346,1656,2.315,1741,2.362,1759,2.531,1884,2.192,1919,1.763,1938,2.6,1939,3.43,2025,2.081,2296,3.166,2535,3.393,2610,2.45,2758,2.271,2762,1.782,2764,2.271,2834,2.396,2970,3.393,3086,4.755,3112,2.913,3717,3.232,4313,2.956,4328,2.651,4370,3.106,4947,3.612,5496,2.836,5604,3.166,5656,3.002,5773,3.762,5774,2.737,5925,4.886,5926,4.886,5971,3.492,6134,3.762,6135,3.612,6369,3.963,6848,4.09,7754,3.307,7955,5.949,9053,2.218,9588,3.963,9651,4.268,9652,6.714,9653,4.268,9654,4.268,9655,4.268,9656,4.268,9657,4.268,9658,4.268,9659,4.268,9660,4.268,9661,4.268,9662,4.268,9663,4.268]],["t/3954",[6,2.524,12,1.574,13,3.943,20,0.867,45,1.392,85,4.777,88,0.942,89,1.466,100,2.452,113,3.436,131,0.868,183,4.169,193,1.513,242,1.534,259,1.976,278,2.219,296,1.667,315,1.137,317,2.282,323,2.341,335,2.233,340,2.715,343,3.041,344,3.035,345,2.013,349,1.031,350,1.705,351,4.992,357,2.196,361,1.717,365,5.578,410,2.247,562,1.741,570,2.432,601,1.884,602,2.115,616,2.664,617,1.166,661,1.985,676,2.277,692,2.542,724,4.226,756,4.032,853,2.59,875,2.053,900,3.465,927,3.529,928,2.981,956,2.26,971,2.107,974,1.485,1052,2.54,1082,2.644,1124,1.569,1128,2.594,1142,2.737,1144,1.388,1247,2.118,1300,2.324,1317,1.958,1321,2.771,1518,2.714,1579,2.616,1614,2.192,1646,1.915,1656,2.262,1700,3.529,1840,2.807,1884,3.386,1939,2.13,1956,4.499,1991,2.043,2061,2.107,2079,3.412,2139,3.035,2150,2.981,2263,2.107,2264,3.278,2350,1.967,2356,2.846,2561,2.452,2562,2.737,2590,2.341,2633,2.394,2762,1.741,2835,5.239,2836,4.713,2949,3.158,2977,3.675,3015,2.737,3086,3.331,3193,2.495,3196,2.233,3312,3.675,3887,2.292,4313,2.888,4560,2.432,5023,3.529,5117,2.673,5147,3.231,5307,2.933,5496,2.771,5656,4.636,5719,5.393,5735,3.231,5947,5.503,6060,3.675,6091,3.675,6092,3.872,6093,3.529,6094,3.529,6099,3.529,6340,3.872,7471,3.675,7766,3.675,7955,6.075,8518,3.675,9053,2.166,9664,4.17,9665,4.17,9666,9.289,9667,4.17,9668,4.17,9669,4.17,9670,4.17,9671,4.17,9672,4.17,9673,4.17,9674,4.17,9675,3.872,9676,4.17,9677,4.17,9678,4.17,9679,4.17,9680,4.17]],["t/3956",[0,0.777,4,0.752,6,0.655,22,2.544,23,1.333,26,1.856,27,1.573,28,0.741,30,0.634,32,1.388,37,0.913,53,1.589,60,0.797,66,1.623,69,3.805,85,2.86,91,0.99,108,1.249,109,0.61,131,0.936,142,1.629,146,2.489,148,3.172,183,1.743,196,1.103,226,1.495,227,1.627,236,3.16,244,2.34,254,1.766,259,1.243,260,2.822,270,1.069,304,1.473,309,1.717,310,0.96,316,1.86,328,4.688,335,2.408,429,1.243,444,1.111,533,1.569,583,1.629,591,1.319,593,1.664,596,1.845,598,1.452,602,0.842,615,1.195,664,2.463,707,1.664,711,1.909,712,4.499,716,2.04,748,1.556,755,1.305,756,1.792,759,1.216,821,3.835,822,3.22,842,1.518,863,1.743,875,3.873,905,3.215,906,1.249,956,0.899,960,0.859,967,1.348,974,2.102,1036,3.367,1047,0.987,1061,5.016,1063,6.935,1096,1.205,1100,1.614,1124,0.987,1128,1.769,1144,1.497,1157,1.332,1228,1.442,1247,1.333,1291,1.34,1334,1.65,1344,1.176,1383,5.947,1518,2.88,1551,2.312,1566,2.203,1629,3.147,1646,2.711,1680,1.766,1880,2.439,1919,1.858,1950,4.469,1951,2.822,1989,1.876,1991,3.854,2076,1.722,2235,1.237,2305,1.766,2425,2.085,2941,2.085,2942,3.484,2943,4.691,2944,1.556,3095,2.085,3351,5.188,3363,6.265,3441,2.147,3887,1.442,4560,4.588,5061,3.484,5064,2.312,5071,3.574,5479,2.312,5737,8.435,5739,1.909,5753,2.033,5758,2.085,5759,1.987,5849,1.987,5925,3.272,6209,1.946,6410,2.085,7300,5.559,7304,3.679,7715,2.147,7955,2.272,8204,3.679,8205,8.914,8211,2.147,8571,3.806,8575,2.22,8577,2.22,8578,3.679,8580,2.147,8581,2.22,8582,2.436,8583,2.147,8584,2.436,8585,2.085,8586,2.312,8587,2.436,8588,2.436,8589,4.175,8590,2.436,8591,4.175,8592,2.436,8593,2.436,8594,2.312,9039,2.312,9053,1.363,9675,2.436,9681,4.497,9682,2.623,9683,4.497,9684,2.623,9685,2.623]],["t/3958",[4,1.732,42,1.659,72,2.045,85,3.569,87,3.522,116,2.414,131,1.257,161,4.588,174,3.06,183,4.614,231,2.174,242,2.222,317,3.022,350,2.47,407,2.462,429,2.861,486,2.958,517,5.607,536,3.319,562,2.521,591,3.035,593,5.534,594,3.916,602,2.8,658,2.075,684,3.194,692,1.878,704,3.234,756,2.406,956,2.07,1028,3.551,1075,3.83,1099,3.522,1124,2.272,1128,2.376,1155,3.019,1157,1.789,1228,3.319,1317,2.835,1518,2.487,1578,2.988,1627,2.888,1646,2.774,1681,4.183,1919,3.605,1939,4.458,2077,3.963,2192,4.395,2350,2.848,2561,3.551,2633,3.467,2722,4.8,2731,4.703,2758,3.214,2760,3.44,2764,3.214,2773,3.415,2854,3.789,2886,4.934,3086,4.409,5987,5.607,6235,5.111,6773,5.323,6848,5.316,7955,6.619,8290,7.692,9686,8.727,9687,8.727,9688,6.039,9689,6.039,9690,8.727,9691,6.039,9692,6.039,9693,6.039,9694,6.039,9695,6.039,9696,6.039,9697,6.039]],["t/3960",[4,1.332,6,2.185,39,1.658,42,1.97,53,1.641,85,4.354,92,1.676,115,1.209,131,1.824,174,1.628,183,3.394,184,3.495,218,1.345,225,1.588,275,3.32,315,1.266,316,2.259,317,2.483,322,1.822,325,2.18,335,4.69,343,2.142,352,1.123,356,1.271,357,1.926,361,1.912,380,2.399,392,2.124,397,2.754,406,2.57,448,1.839,548,2.298,549,2.441,562,1.938,570,1.713,591,2.334,602,1.49,612,2.264,613,2.588,614,1.641,616,2.056,619,2.073,652,2.553,653,2.413,664,1.938,683,1.881,725,2.264,728,3.8,735,1.805,756,2.857,875,3.53,881,2.666,901,3.216,956,1.592,1028,2.731,1068,1.862,1122,2.553,1124,1.747,1128,1.827,1134,2.945,1170,2.945,1247,2.359,1344,2.081,1518,1.912,1566,2.275,1578,2.298,1609,2.803,1610,2.221,1627,2.221,1640,2.471,1646,2.133,1681,3.216,1803,2.242,1884,3.683,1919,1.919,1991,3.512,2061,5.926,2110,3.32,2165,3.445,2316,2.519,2350,4.645,2353,3.93,2561,2.731,2633,5.028,2731,3.864,2746,3.691,3086,3.623,3112,3.17,3125,3.048,3341,2.626,3902,3.32,4098,3.598,4560,4.182,4715,2.778,5780,3.8,5844,3.32,5849,3.517,5972,3.38,6209,3.445,6235,3.93,6278,3.517,6835,3.266,6848,4.368,7294,4.312,7296,3.445,7933,3.517,7955,5.379,9053,2.413,9698,4.644,9699,7.17,9700,4.644,9701,4.644,9702,4.644,9703,4.644,9704,4.312,9705,4.644,9706,4.644,9707,4.312,9708,4.644,9709,4.312,9710,4.644,9711,4.644,9712,4.644,9713,4.644,9714,4.644,9715,4.644]],["t/3962",[0,0.242,4,0.625,6,1.537,12,0.823,18,0.923,19,0.391,20,1.065,38,0.651,42,1.053,45,0.728,47,1.278,53,1.81,72,1.297,85,4.71,88,0.493,100,1.282,115,0.568,116,2.047,122,1.658,131,1.283,137,1.858,177,1.784,183,2.994,184,1.063,185,0.969,218,0.632,230,1.173,231,1.379,242,1.409,252,1.015,255,1.398,257,1.784,258,1.651,259,1.033,294,0.944,296,0.872,302,1.015,306,1.737,309,1.462,310,0.798,315,1.68,316,1.941,317,3.065,321,1.651,322,3.031,335,4.74,341,2.131,343,1.767,345,1.849,348,1.09,356,0.597,357,1.376,361,1.577,380,1.127,386,2.76,392,0.998,400,1.085,401,0.989,403,1.12,429,1.815,430,1.844,437,1.76,438,1.127,444,0.923,464,1.033,469,1.329,475,1.489,486,1.876,514,1.979,540,1.51,542,1.534,550,1.146,556,2.963,563,1.233,570,1.413,591,1.925,602,0.7,612,1.063,613,1.215,614,0.771,616,2.39,622,1.096,640,1.293,652,1.199,658,0.749,670,2.182,676,1.191,683,2.074,693,3.089,716,1.737,725,1.063,735,0.848,741,0.969,745,0.889,748,1.293,755,1.085,756,2.041,818,1.173,821,1.063,844,1.153,872,1.618,875,1.886,882,0.933,900,2.014,901,1.51,940,1.651,956,2.112,974,0.777,992,1.153,993,1.587,994,1.559,997,1.368,1000,2.968,1036,0.933,1043,1.716,1047,2.318,1051,4.093,1057,1.489,1058,1.876,1068,1.536,1102,1.51,1123,3.113,1124,0.821,1128,0.858,1144,1.275,1153,1.068,1157,0.646,1173,1.341,1247,1.946,1317,1.798,1344,0.977,1518,1.577,1570,1.651,1578,1.079,1610,1.043,1614,2.014,1646,2.83,1649,1.922,1728,1.043,1787,4.569,1790,1.84,1875,1.587,1882,1.383,1884,3.164,1895,1.449,1919,3.192,1939,1.957,1968,1.449,1982,1.354,2025,1.063,2299,1.449,2316,1.183,2350,1.806,2561,1.282,2562,1.431,2587,2.901,2588,1.784,2590,1.224,2624,1.784,2633,2.199,2731,2.064,2755,1.946,2757,1.51,2758,1.16,2764,2.038,2773,1.233,2788,2.025,2848,1.262,2856,1.293,3026,1.534,3069,1.489,3071,1.651,3086,4.473,3113,1.559,3130,1.784,3175,1.651,3193,1.305,3327,1.242,3500,2.025,3579,1.845,3580,1.784,3639,1.784,3835,1.784,3896,1.733,3902,1.559,3929,1.733,3963,1.431,3964,1.534,4000,1.618,4094,1.305,4103,3.968,4195,1.51,4321,2.025,4560,1.272,4836,2.379,5038,1.784,5224,1.784,5225,1.845,5319,1.845,5478,1.922,5479,1.922,5849,1.651,6038,1.096,6048,1.733,6209,1.618,6848,3.12,7190,1.733,7275,1.922,7445,1.845,7840,1.559,7882,2.025,7955,5.724,8275,1.733,8279,1.733,8512,1.922,8595,2.025,9039,1.922,9053,1.133,9704,2.025,9709,2.025,9716,2.181,9717,3.83,9718,2.181,9719,2.181,9720,2.025,9721,2.181,9722,2.181,9723,2.181,9724,2.181,9725,2.181,9726,3.83,9727,2.181,9728,2.181,9729,2.181,9730,3.83,9731,2.181,9732,2.181,9733,2.181,9734,2.181,9735,2.181,9736,2.181,9737,2.181,9738,2.181,9739,2.181,9740,2.181,9741,2.181,9742,2.181,9743,2.181,9744,2.181,9745,2.181,9746,2.181,9747,2.181,9748,2.181,9749,2.181,9750,2.181,9751,2.181,9752,2.181,9753,2.181,9754,2.181,9755,2.181,9756,2.181,9757,2.181,9758,2.181,9759,2.181,9760,2.181,9761,2.181,9762,2.181,9763,2.181,9764,2.181,9765,2.181,9766,1.431,9767,6.366,9768,2.181,9769,2.181,9770,2.181,9771,2.181,9772,2.181,9773,2.181,9774,2.181,9775,2.181,9776,2.181]],["t/3964",[0,0.791,4,0.974,6,2.274,9,1.51,19,0.609,38,1.015,39,1.213,44,1.681,47,1.865,53,1.975,85,4.236,113,1.428,115,1.455,122,1.1,131,1.164,174,2.892,183,3.531,184,2.724,188,2.288,216,2.178,231,1.223,250,2.319,255,2.178,296,2.234,302,1.581,306,3.229,307,1.39,308,1.428,309,2.717,310,2.045,315,1.941,316,2.598,317,3.155,321,2.573,335,2.992,339,1.673,340,1.129,342,0.996,343,2.578,345,1.64,352,0.822,366,2.737,391,2.132,392,1.554,407,3.361,437,2.446,514,3.186,528,2.52,536,1.868,548,1.681,550,3.742,598,1.88,601,3.215,602,1.09,616,0.974,617,0.95,621,1.568,640,2.015,686,1.786,692,1.738,693,1.358,717,1.786,738,1.745,756,2.227,759,1.574,818,1.041,821,2.724,842,4.118,844,1.797,861,2.155,882,1.454,912,2.155,913,1.673,956,1.165,974,1.99,1034,1.936,1038,1.499,1047,2.103,1096,1.561,1099,1.982,1111,2.995,1124,1.279,1125,2.875,1128,1.337,1157,1.655,1247,2.839,1272,2.319,1313,2.52,1338,2.39,1471,1.664,1557,1.736,1578,1.681,1634,1.51,1646,1.561,1656,1.843,1699,2.87,1754,5.18,1790,1.632,1880,3.031,1889,1.765,1919,2.309,1942,1.561,2165,2.52,2231,2.78,2244,2.11,2295,2.473,2299,3.713,2304,2.78,2357,2.473,2466,2.39,2562,2.23,2653,2.39,2662,2.155,2663,2.203,2753,1.745,2762,1.418,2829,1.358,2834,1.907,2896,1.951,2910,2.78,3015,2.23,3086,4.167,3159,2.429,3185,2.319,3625,2.701,3655,2.875,3777,3.404,3816,3.155,4044,4.926,4079,1.894,4106,2.39,4326,2.78,4504,2.875,5063,2.39,5132,2.633,5222,2.875,5696,2.875,5930,2.995,6780,2.995,6848,2.07,7084,3.155,7377,2.39,7378,2.353,7459,3.155,7700,3.155,7840,2.429,7955,4.605,8282,3.155,8404,3.155,9053,1.765,9507,2.875,9720,3.155,9766,2.23,9767,7.761,9777,5.588,9778,3.398,9779,3.398,9780,3.398,9781,3.398,9782,3.398,9783,3.398,9784,3.398,9785,3.398,9786,3.398,9787,3.398,9788,3.398,9789,3.398,9790,3.398,9791,3.398,9792,3.398,9793,3.398,9794,3.398,9795,3.398,9796,3.398,9797,3.398,9798,3.398,9799,3.398,9800,3.398,9801,3.398]],["t/3966",[6,2.105,7,1.502,9,1.737,12,0.842,15,1.825,18,0.944,19,1.404,20,1.301,21,0.951,22,0.586,30,0.539,37,0.776,39,0.797,43,1.243,54,1.301,72,2.119,85,4.007,88,0.504,89,0.784,92,2.259,114,1.133,116,0.892,131,1.085,137,1.082,142,1.386,148,1.012,160,1.008,172,1.569,174,1.37,177,1.825,183,2.02,186,1.252,219,1.133,227,0.807,231,0.803,242,1.437,255,1.43,267,1.098,295,1.43,296,1.562,306,1.012,308,0.938,309,1.99,314,1.464,315,1.941,316,0.703,317,2.464,321,1.689,322,0.875,326,1.655,327,1.502,328,1.139,335,2.791,339,1.924,340,1.732,345,1.077,352,1.261,356,0.611,357,1.4,381,1.73,390,0.784,392,1.02,394,1.004,405,1.052,413,0.909,426,0.795,437,1.343,443,1.323,448,0.883,450,1.087,457,1.252,464,1.057,468,1.271,486,3.066,514,2.418,532,1.18,539,1.261,540,1.545,545,2.279,556,1.291,570,0.823,591,1.121,595,1.173,612,1.087,613,1.243,614,1.381,616,1.121,632,1.28,636,2.119,658,0.767,662,1.595,664,2.97,683,0.903,684,1.18,692,0.694,693,0.892,703,1.072,718,0.918,739,1.252,753,1.261,754,1.684,756,1.557,818,0.683,821,1.087,836,1.291,841,0.717,845,2.279,853,1.386,876,2.317,877,1.907,881,2.243,900,1.173,906,1.062,913,1.098,939,0.988,941,1.261,956,1.339,974,0.795,990,1.173,1006,1.18,1026,1.502,1028,1.312,1049,2.596,1054,1.415,1068,0.895,1123,1.127,1124,1.47,1128,0.878,1129,1.226,1144,1.301,1151,1.447,1154,1.194,1157,1.854,1215,1.825,1228,1.226,1247,1.985,1260,1.728,1314,1.372,1317,1.047,1319,1.787,1344,1,1454,1.655,1471,1.093,1506,0.915,1533,2.63,1547,1.235,1555,1.359,1581,1.914,1584,1.464,1620,1.187,1627,1.067,1641,1.226,1646,1.025,1649,1.966,1656,2.119,1658,1.235,1661,1.482,1717,1.523,1734,1.43,1790,1.072,1803,1.077,1859,1.689,1867,1.966,1880,2.119,1884,1.146,1919,2.94,1924,1.773,1956,2.667,1991,2.554,2025,1.087,2102,1.291,2126,1.502,2166,1.447,2169,3.539,2195,1.689,2211,1.346,2295,1.623,2296,1.655,2299,2.596,2316,1.21,2407,1.623,2561,1.312,2586,1.502,2626,2.337,2627,2.298,2666,1.464,2669,1.18,2764,1.187,2778,1.689,2796,1.689,2811,1.623,2829,0.892,2834,3.994,2844,1.291,2849,1.623,2856,1.323,2944,1.323,2989,1.728,3086,3.595,3104,1.595,3125,2.564,3306,2.534,3307,1.623,3396,1.623,3401,1.523,3632,1.166,3638,1.447,3688,1.447,3835,1.825,3887,1.226,4055,2.071,4079,1.243,4116,2.071,4158,1.502,4192,1.825,4285,1.502,4441,1.595,4836,3.888,4921,1.689,4959,1.386,5117,1.43,5303,1.415,5333,2.071,5396,1.966,5686,2.534,5774,1.43,5886,1.966,5985,1.966,5998,1.966,6150,3.105,6160,1.966,6161,1.966,6218,1.773,6835,1.569,7046,1.655,7052,1.825,7054,1.728,7056,3.444,7078,1.888,7079,1.888,7368,2.071,7445,1.888,7480,1.966,7614,1.825,7955,4.951,8249,1.372,8300,1.312,8501,2.071,8502,2.071,8504,3.306,8505,2.071,8546,2.071,9053,1.159,9173,2.071,9574,2.071,9766,1.464,9767,7.828,9802,2.231,9803,2.231,9804,2.231,9805,2.231,9806,2.231,9807,2.231,9808,2.231,9809,2.231,9810,2.231,9811,2.231,9812,2.231,9813,2.231,9814,2.231,9815,2.231,9816,2.231,9817,2.231,9818,2.231,9819,2.231,9820,2.231,9821,2.231,9822,2.231,9823,2.231,9824,2.231,9825,2.231,9826,2.231,9827,2.231,9828,2.231,9829,2.231,9830,2.231,9831,2.231,9832,2.231,9833,2.231,9834,2.231,9835,2.231,9836,2.231,9837,2.231,9838,2.231,9839,2.231,9840,2.231,9841,2.231,9842,2.231,9843,2.231,9844,2.231,9845,2.231,9846,2.231,9847,2.231,9848,2.231,9849,2.231,9850,2.231,9851,2.231,9852,2.231,9853,2.231,9854,2.231,9855,2.231,9856,2.071,9857,2.231,9858,2.231]],["t/3968",[0,0.447,6,1.599,9,1.789,12,1.519,19,0.721,20,1.332,39,1.437,47,1.343,49,1.698,85,4.067,88,0.909,92,2.882,122,1.303,131,0.838,160,3.607,178,3.047,183,3.529,242,1.48,252,1.873,261,2.641,284,3.118,295,2.58,296,1.609,306,2.907,315,1.748,317,2.219,322,1.579,335,2.155,339,3.931,340,2.652,341,1.674,350,1.646,356,1.102,403,2.067,406,2.227,408,2.366,437,2.744,504,2.985,514,3.841,556,2.328,562,1.68,591,2.022,593,2.552,602,1.291,614,1.422,616,2.852,617,1.125,619,1.796,621,1.856,636,2.183,644,2.169,658,1.383,692,1.251,842,2.328,876,2.386,882,1.722,892,3.405,906,1.915,956,1.379,974,1.433,1058,1.971,1101,2.877,1102,2.787,1124,1.514,1128,1.583,1247,3.256,1317,3.009,1319,2.931,1320,3.118,1471,1.971,1506,1.651,1518,3.288,1533,2.709,1584,2.641,1627,3.064,1634,1.789,1646,1.849,1656,2.183,1658,2.227,1803,1.943,1884,3.292,1919,2.648,1968,4.258,2025,1.962,2299,2.674,2350,1.898,2446,3.198,2479,2.641,2529,2.787,2633,2.31,2757,4.438,2765,2.31,2781,2.407,2846,2.747,2856,4.736,3086,2.033,3289,3.405,3306,2.61,3742,3.736,3809,4.965,3810,3.293,3929,3.198,3931,5.423,4028,5.094,4134,3.547,4245,2.985,5336,3.198,5342,3.293,5343,3.198,5352,2.877,5686,2.61,5705,3.405,5744,3.547,6160,3.547,6278,4.853,6864,3.198,7031,4.507,7830,3.118,7840,2.877,7870,3.736,7955,3.238,8254,2.429,9053,2.091,9258,3.547,9766,2.641,9767,8.434,9856,3.736,9859,4.024,9860,4.024,9861,4.024,9862,4.024,9863,4.024,9864,4.024,9865,4.024,9866,4.024,9867,4.024,9868,4.024,9869,4.024,9870,4.024,9871,4.024,9872,4.024,9873,4.024,9874,4.024,9875,4.024,9876,4.024,9877,4.024,9878,4.024,9879,4.024,9880,4.024,9881,4.024]],["t/3970",[0,0.671,4,1.732,6,1.507,9,2.685,37,2.102,42,1.659,45,2.016,73,2.22,78,3.494,85,4.191,92,2.18,102,3.963,131,1.257,172,6.138,174,3.06,183,3.382,218,1.749,225,2.065,229,2.901,309,2.306,310,2.21,315,1.647,341,2.512,352,1.461,355,3.423,356,1.653,381,2.674,397,3.581,406,3.342,448,3.456,514,4.337,591,3.035,593,3.83,602,1.937,614,2.134,616,1.732,664,2.521,754,2.604,756,2.406,759,2.798,956,2.07,1036,2.585,1124,2.272,1128,2.376,1144,2.011,1228,3.319,1247,4.433,1578,2.988,1588,3.645,1646,2.774,1651,4.941,1656,3.276,1875,4.395,1882,3.83,1919,3.605,1939,3.085,1956,4.122,1991,2.958,2077,3.963,2166,5.659,2169,4.934,2299,4.013,2758,3.214,2855,5.607,2856,3.581,2857,4.8,2858,4.941,3292,5.607,3688,3.916,5958,4.8,6209,4.48,6944,4.679,7054,4.679,7955,5.672,9053,3.138,9766,3.963,9767,5.727,9882,6.039,9883,6.039,9884,6.039,9885,6.039,9886,6.039,9887,6.039,9888,6.039,9889,6.039,9890,6.039]],["t/3972",[0,0.498,3,1.63,4,1.285,6,2.612,19,1.25,20,0.931,38,2.083,45,1.495,47,1.495,49,1.89,85,4.734,115,1.166,116,1.791,119,2.533,122,1.45,131,2.18,140,1.87,160,2.024,183,1.736,218,2.02,225,1.532,230,1.372,242,1.648,296,2.787,306,2.032,308,1.883,310,1.639,315,2.335,340,2.844,341,1.863,343,3.217,345,2.162,346,2.152,356,1.226,357,1.203,361,2.871,381,1.983,382,2.94,407,1.826,430,2.087,486,2.194,514,3.308,533,2.68,539,2.533,541,3.26,545,2.613,595,2.355,601,2.024,614,1.583,616,2.455,617,1.252,621,3.217,652,2.462,656,3.416,658,1.539,661,2.132,756,1.785,845,2.613,906,2.132,938,2.977,956,2.39,975,5.705,998,3.791,1000,3.471,1006,2.369,1036,1.917,1047,1.686,1124,1.686,1128,1.763,1153,2.194,1247,3.542,1295,2.872,1328,2.076,1640,2.384,1641,2.462,1646,2.058,1656,2.43,1658,2.479,1728,2.142,1790,2.152,1793,2.514,1798,2.446,1803,2.162,1875,3.26,1899,2.841,1919,3.537,1939,2.288,1988,3.471,2025,2.184,2211,2.704,2263,2.263,2264,2.228,2299,2.977,2599,2.414,2626,2.68,2627,2.634,2679,2.657,2762,1.87,2765,2.571,2773,2.533,2829,1.791,2856,2.657,3193,2.68,3306,2.905,3307,3.26,3639,3.665,3887,2.462,3966,3.016,4094,2.68,5496,2.977,5656,3.151,5774,2.872,6038,2.251,6232,3.323,7852,3.948,7955,4.882,9053,2.327,9766,2.94,9767,5.619,9891,4.479,9892,4.479,9893,4.479,9894,4.479,9895,4.479,9896,4.479,9897,4.479,9898,4.479,9899,4.479,9900,4.479,9901,4.479,9902,4.479,9903,4.479,9904,4.479,9905,4.479,9906,4.479,9907,4.479,9908,4.479]],["t/3974",[6,2.398,19,0.674,20,1.587,37,1.309,38,1.123,42,1.033,44,3.004,45,1.255,60,1.844,61,1.699,72,1.274,81,1.824,85,4.752,87,2.194,92,2.191,122,1.218,131,2.001,142,2.336,174,2.129,183,3.394,184,1.833,193,1.365,231,1.354,242,1.384,256,2.385,296,1.503,306,1.706,310,2.221,315,1.026,327,2.532,341,1.565,352,0.91,366,2.974,380,3.136,386,1.685,405,2.863,430,2.284,437,2.623,496,1.943,514,2.345,536,2.067,550,1.977,556,2.176,585,1.943,593,2.385,596,2.645,612,1.833,613,2.096,615,1.713,616,1.741,617,1.052,638,2.499,653,1.954,670,2.143,693,1.503,735,1.462,738,1.932,741,1.672,742,2.36,754,1.621,756,3.041,818,1.152,821,1.833,836,2.176,876,2.231,881,2.159,894,3.077,906,1.79,956,1.289,972,2.552,974,1.34,996,2.989,1047,2.284,1099,3.54,1108,2.111,1124,1.415,1128,1.48,1154,2.014,1155,1.88,1247,3.084,1256,2.468,1319,2.777,1344,1.685,1456,2.567,1518,1.549,1547,2.082,1578,4.334,1634,1.672,1641,2.067,1646,1.728,1699,1.932,1790,1.807,1875,4.418,1879,5.351,1882,2.385,1919,2.508,1942,1.728,1989,2.689,2145,2.143,2198,3.183,2241,2.082,2316,2.04,2350,3.6,2590,3.407,2633,4.381,2731,3.271,2764,2.001,2766,2.689,2834,4.284,2840,2.468,2848,2.176,2849,2.737,2851,2.439,2915,3.136,3015,2.468,3125,2.468,3258,2.439,3313,2.439,3344,2.411,3625,2.989,3638,3.937,3639,3.077,3700,2.989,3710,3.315,4143,3.183,4325,3.492,4659,3.183,5563,3.183,6038,1.89,6337,3.315,6835,2.645,7830,2.914,7955,5.193,8237,5.636,8283,2.914,9053,1.954,9766,2.468,9767,7.384,9909,3.761,9910,3.761,9911,3.761,9912,3.761,9913,3.761,9914,3.761,9915,3.761,9916,3.761,9917,3.761,9918,3.761,9919,3.761,9920,3.761,9921,3.761,9922,3.761,9923,3.761,9924,3.761,9925,3.761,9926,3.761,9927,3.761,9928,3.761,9929,3.761,9930,3.761,9931,3.761]],["t/3976",[6,2.739,9,2.21,35,1.333,37,1.73,72,1.684,85,5.288,100,2.924,103,2.284,131,1.035,174,1.744,183,2.928,215,2.646,295,3.188,296,3.02,309,1.898,315,2.492,316,2.381,335,2.662,343,2.294,352,2.21,361,2.047,413,2.027,430,2.261,433,2.877,514,3.53,601,2.246,602,1.595,614,1.757,616,2.167,664,2.075,670,2.832,692,1.546,716,2.255,717,3.972,735,1.933,818,2.314,882,2.128,956,1.704,974,2.691,992,2.63,1036,2.128,1043,2.228,1057,3.394,1068,1.994,1115,2.569,1124,1.871,1128,1.956,1247,3.838,1317,2.334,1325,3.765,1334,1.824,1456,3.394,1506,2.04,1518,2.047,1530,4.208,1584,3.263,1634,2.21,1646,3.471,1658,4.181,1884,2.554,1919,3.121,1991,2.436,2061,2.512,2166,3.224,2350,4.31,2633,5.246,2690,3.188,2718,4.617,2834,2.791,2848,2.877,2849,3.618,3688,3.224,4061,3.618,4195,5.233,4244,3.765,4349,3.497,5121,4.617,5187,4.617,5271,4.617,5330,3.347,6038,2.499,6150,3.952,6159,3.952,6278,3.765,7955,5.157,8585,3.952,9053,2.583,9632,4.617,9766,3.263,9767,5.997,9932,4.972,9933,4.972,9934,7.555,9935,4.972,9936,4.972,9937,4.972,9938,4.972,9939,4.972,9940,4.972,9941,4.972,9942,4.972,9943,4.972,9944,4.972,9945,4.972,9946,4.972,9947,4.972,9948,4.972,9949,4.972]],["t/3978",[0,0.266,6,2.314,9,1.065,13,1.433,19,1.334,20,0.498,39,1.967,42,0.658,47,0.799,49,1.01,53,0.846,72,1.408,85,4.772,88,0.541,93,1.317,113,2.315,115,1.082,119,1.354,131,1.699,140,1,142,1.488,160,1.082,183,2.134,184,2.026,185,1.065,230,1.687,231,1.496,242,1.529,243,2.185,259,1.135,302,1.115,303,1.904,306,1.886,309,0.914,315,1.502,316,1.31,317,0.829,325,1.125,335,1.283,341,1.729,345,1.156,346,1.151,349,0.592,350,1.7,352,1.005,355,0.94,356,0.656,361,2.268,392,1.096,400,1.191,407,0.976,408,1.408,428,1.354,430,2.442,437,1.893,452,0.86,453,1.173,457,3.092,486,1.173,514,3.152,532,1.267,548,1.185,549,2.185,550,2.896,556,1.386,562,1.735,570,2.745,585,1.237,595,1.259,596,1.685,601,2.488,608,3.815,612,2.026,613,1.335,614,0.846,615,1.894,616,1.58,622,1.204,644,1.291,670,1.364,672,0.951,683,1.683,692,0.745,693,1.662,699,1.048,735,0.931,741,1.065,753,1.354,754,1.033,756,3.695,821,1.168,822,1.178,825,1.659,841,0.77,844,1.267,877,1.521,882,1.025,900,3.912,901,1.659,933,1.685,941,1.354,956,1.888,971,1.21,974,1.962,990,1.259,1031,1.713,1036,1.779,1047,0.901,1068,0.961,1088,1.503,1123,1.21,1124,0.901,1128,0.943,1144,1.834,1157,1.632,1228,3.615,1247,2.112,1299,1.814,1300,1.335,1317,1.952,1319,1.096,1325,1.814,1344,1.863,1361,1.168,1506,1.706,1518,1.712,1530,2.027,1566,2.036,1579,1.503,1581,1.173,1634,1.065,1640,1.275,1646,1.1,1656,1.299,1741,1.326,1759,1.42,1826,1.613,1884,2.135,1919,3.075,1939,1.224,1945,1.635,1991,1.173,2061,1.21,2111,1.503,2145,1.364,2166,1.553,2299,2.763,2305,1.613,2316,1.299,2350,1.961,2451,1.904,2535,1.904,2561,2.445,2626,1.433,2627,1.408,2633,1.375,2730,1.814,2731,1.291,2762,1,2764,1.275,2766,1.713,2831,1.613,2837,1.96,2851,1.553,2854,1.503,2961,1.856,3004,1.536,3069,1.635,3086,1.21,3112,1.635,3118,1.685,3143,2.111,3175,1.814,3193,2.487,3282,1.397,3313,1.553,3469,1.659,3594,1.488,3638,1.553,3711,1.553,3726,1.814,3777,1.459,3792,1.685,3869,1.96,3910,1.536,4007,2.111,4519,2.111,4836,5.441,5111,1.613,5922,2.111,6040,1.777,6193,2.111,6763,2.027,6848,1.459,7078,2.027,7079,2.027,7289,2.027,7296,1.777,7338,1.743,7584,3.86,7933,1.814,7948,1.904,7955,5.276,8283,3.221,8324,2.111,8571,2.027,8575,2.027,8819,2.224,9053,1.244,9187,2.224,9766,1.572,9767,7.05,9950,2.395,9951,4.157,9952,4.157,9953,2.395,9954,2.395,9955,2.395,9956,2.395,9957,2.395,9958,5.508,9959,2.395,9960,2.395,9961,2.395,9962,2.395,9963,2.395,9964,2.395,9965,2.395,9966,2.395,9967,2.395,9968,2.395,9969,2.395,9970,2.395,9971,2.395,9972,2.395,9973,2.395,9974,2.395,9975,2.395,9976,2.395,9977,2.395,9978,2.395,9979,2.395,9980,2.224,9981,2.395,9982,2.395,9983,2.395,9984,2.395,9985,2.395,9986,2.395,9987,2.395,9988,2.395,9989,2.395,9990,2.395,9991,2.395,9992,2.395,9993,2.395,9994,2.395,9995,2.395,9996,2.395,9997,2.395,9998,2.395,9999,2.395,10000,2.395,10001,2.395,10002,2.395]],["t/3980",[0,0.446,4,2.285,6,2.477,18,1.698,39,1.433,47,1.339,49,1.692,61,1.812,77,2.135,85,4.06,92,1.448,93,2.205,118,1.476,148,1.82,160,1.812,174,1.407,183,3.088,186,2.252,193,1.456,218,2.633,225,1.372,227,1.452,231,1.444,255,2.572,296,2.555,302,1.867,309,1.531,315,1.094,316,1.264,317,1.389,327,2.701,341,1.669,345,3.086,349,0.992,357,1.078,397,2.379,406,2.22,409,1.848,430,1.201,447,2.444,448,4.188,514,2.47,532,3.381,542,4.496,548,1.985,549,3.36,570,2.358,596,4.496,601,2.888,614,1.418,616,3.304,617,1.787,632,2.303,633,3.36,664,1.674,683,2.588,686,2.109,693,2.555,718,1.652,756,2.547,821,1.955,844,2.122,911,2.421,912,2.544,956,1.375,990,2.109,1006,2.122,1051,4.248,1108,2.252,1123,3.23,1124,1.509,1128,1.578,1129,2.205,1144,2.128,1155,2.005,1157,2.36,1215,3.282,1247,3.247,1330,1.79,1434,2.517,1506,1.646,1578,1.985,1581,1.965,1616,2.096,1641,2.205,1646,1.843,1699,2.06,1919,3.755,1939,2.049,2232,2.919,2263,2.027,2264,1.995,2304,3.282,2316,2.176,2690,2.572,2753,2.06,2764,2.135,2856,2.379,2857,3.188,2858,3.282,3039,2.868,3086,2.027,3341,2.268,3598,2.19,3722,3.282,3905,2.778,3908,3.282,3910,2.572,3963,2.633,4028,3.188,4158,2.701,4389,2.738,4959,2.492,5224,3.282,5586,2.975,5774,2.572,7955,5.607,8283,3.108,8325,3.536,9053,2.084,9766,2.633,9767,7.282,10003,4.011,10004,4.011,10005,4.011,10006,4.011,10007,4.011,10008,4.011,10009,4.011,10010,4.011,10011,4.011,10012,4.011,10013,4.011,10014,4.011,10015,4.011,10016,4.011,10017,4.011,10018,4.011,10019,4.011,10020,4.011,10021,4.011,10022,4.011,10023,4.011,10024,4.011,10025,4.011,10026,4.011,10027,4.011,10028,4.011]],["t/3982",[4,1.129,6,1.571,19,0.706,42,1.082,45,2.102,85,4.022,100,2.315,113,1.655,115,1.64,118,1.448,122,1.274,131,0.82,147,2.524,150,1.857,160,1.778,183,3.811,184,3.069,195,1.958,218,1.14,231,1.417,242,1.448,262,1.801,296,2.517,306,1.786,307,1.61,315,1.074,316,2.48,317,2.725,325,1.848,335,2.108,341,3.274,345,3.04,350,2.575,355,1.544,356,1.078,357,1.058,361,2.593,366,3.085,367,3.47,378,1.928,407,1.605,412,2.121,427,2.496,430,1.885,438,2.034,486,1.928,514,3.04,539,3.56,545,2.296,550,4.137,556,2.278,562,2.628,612,1.919,613,2.194,616,2.821,617,1.76,636,3.415,640,2.335,661,1.874,670,2.243,676,2.149,712,1.638,716,1.786,717,2.069,727,2.164,756,1.569,900,2.069,906,2.997,924,2.355,956,2.698,1003,2.022,1053,1.716,1076,1.968,1088,2.47,1099,2.296,1124,1.481,1128,1.549,1157,1.166,1228,2.164,1247,3.199,1319,1.801,1518,1.621,1555,2.398,1578,1.948,1612,2.616,1640,3.351,1641,2.164,1646,1.808,1658,2.179,1699,2.022,1768,3.05,1826,2.65,1870,2.583,1919,3.715,2025,1.919,2062,2.92,2067,2.583,2102,2.278,2211,2.376,2263,1.989,2264,1.958,2299,2.616,2345,2.92,2473,2.726,2509,2.095,2561,2.315,2562,2.583,2595,2.726,2753,2.022,2762,1.643,2764,2.095,2918,2.687,3086,1.989,3193,2.355,3231,2.687,3330,3.47,3342,3.05,3398,2.376,4349,2.769,4715,2.355,4880,2.981,4919,3.05,5330,2.65,5774,2.524,7424,3.47,7679,2.92,7827,5.847,7955,5.962,8304,3.47,9053,2.045,9766,2.583,9767,6.454,10029,3.936,10030,3.936,10031,3.936,10032,3.936,10033,3.936,10034,3.936,10035,3.936,10036,3.936,10037,3.936,10038,3.936,10039,3.936,10040,3.936,10041,3.936,10042,3.936,10043,3.936,10044,3.936,10045,3.936,10046,3.655,10047,3.936,10048,3.936,10049,3.936,10050,3.936,10051,3.936,10052,3.936,10053,3.936,10054,3.936,10055,3.936,10056,3.936]],["t/3984",[0,0.394,6,2.324,19,0.635,35,1.55,38,1.057,61,1.599,83,1.368,85,4.497,92,1.278,119,3.268,131,1.76,140,1.478,142,2.199,143,1.789,161,1.861,183,2.24,193,1.285,219,2.936,231,2.636,233,2.157,242,1.302,243,1.861,255,2.27,294,1.532,302,1.648,306,1.606,308,1.488,309,1.352,315,1.997,316,1.821,317,4.051,326,2.626,327,3.891,328,1.808,335,4.526,342,1.038,345,1.709,352,0.856,357,0.951,361,3.48,366,3.587,390,1.245,392,2.644,401,1.606,430,1.73,452,1.271,464,1.677,486,1.734,514,2.233,536,1.946,540,2.452,549,1.861,550,1.861,556,4.237,602,1.136,614,1.251,615,1.613,616,1.658,617,0.99,621,1.633,640,3.427,661,1.685,686,3.038,718,2.38,735,1.376,754,1.526,755,3.642,756,1.411,772,1.789,801,2.531,821,2.817,841,1.138,845,2.065,852,1.415,900,1.861,906,1.685,912,2.245,913,1.743,956,2.511,974,1.261,1009,2.384,1043,1.586,1055,2.452,1058,1.734,1077,1.677,1085,2.814,1099,2.065,1108,1.987,1115,1.829,1124,1.332,1128,1.393,1133,2.27,1157,1.049,1247,2.936,1317,1.662,1344,1.586,1506,1.453,1518,1.458,1555,2.157,1614,1.861,1640,3.076,1646,1.626,1656,1.92,1658,1.959,1790,1.701,1826,2.384,1919,2.388,2341,2.531,2662,2.245,2663,2.296,2745,2.743,2762,1.478,2881,3.287,2891,2.1,2969,2.576,3015,2.323,3069,2.417,3086,5.556,3112,2.417,3193,2.118,3315,2.814,3327,2.017,3615,2.384,3656,2.27,3692,2.814,3700,2.814,4959,3.59,5106,2.996,5163,2.49,5382,2.743,5460,3.121,5810,2.996,5999,3.121,7169,2.743,7614,2.897,7948,2.814,7955,5.327,8249,2.177,8283,2.743,8295,2.814,8296,3.121,8574,3.287,9053,1.839,9766,2.323,9767,7.216,10046,3.287,10057,3.54,10058,3.54,10059,3.54,10060,3.54,10061,3.54,10062,3.54,10063,3.54,10064,3.54,10065,3.54,10066,3.54,10067,3.54,10068,3.54,10069,3.54,10070,3.54,10071,3.54,10072,3.54,10073,3.54,10074,3.54,10075,3.54,10076,3.54,10077,3.54,10078,3.54,10079,3.54,10080,3.54,10081,3.54,10082,3.54,10083,3.54,10084,3.54]],["t/3986",[0,0.424,4,1.094,6,1.531,12,0.819,19,0.389,20,0.793,27,0.759,38,1.139,39,0.775,47,0.724,49,0.915,85,3.151,89,0.763,103,0.997,116,0.867,131,1.933,140,0.906,148,0.984,172,1.526,174,1.789,183,3.22,184,1.058,186,1.218,218,0.628,225,0.742,231,2.209,242,1.403,262,0.992,267,1.068,270,0.884,272,1.042,306,3.171,307,0.887,309,1.947,315,1.674,316,1.934,317,0.751,322,0.851,339,1.068,340,0.721,341,1.586,343,1.001,345,2.462,349,0.943,355,0.851,356,0.594,357,0.583,361,1.57,366,1.868,397,1.287,401,1.73,406,1.201,413,0.884,427,1.376,430,1.527,433,2.206,437,0.746,448,1.51,464,1.028,497,1.391,498,1.724,514,2.371,532,3.246,533,1.298,536,1.192,539,1.227,548,1.073,550,3.675,551,1.526,556,4.044,570,1.882,585,1.97,591,1.916,601,0.98,602,1.636,608,1.503,614,0.767,615,3.184,616,2.005,622,1.916,628,1.526,636,2.068,640,1.287,644,1.169,652,1.192,664,0.906,670,1.236,671,1.836,678,2.954,692,0.675,693,1.524,699,0.95,716,0.984,717,1.141,735,0.843,738,1.959,753,1.227,756,1.519,772,1.096,818,0.665,821,1.058,832,0.915,844,1.147,879,1.127,900,1.141,906,1.815,924,1.298,928,1.551,956,1.307,971,1.096,974,1.817,1003,1.114,1009,1.461,1039,1.836,1043,0.972,1047,1.435,1051,1.442,1076,1.085,1099,2.975,1100,1.334,1123,1.096,1124,0.816,1128,1.5,1129,1.192,1132,1.481,1135,1.481,1144,2.044,1151,1.407,1157,2.615,1247,1.937,1317,1.79,1319,0.992,1324,1.209,1344,0.972,1506,0.89,1508,1.047,1533,1.461,1547,1.201,1550,1.609,1556,1.724,1566,1.063,1570,1.643,1581,3.007,1584,1.424,1610,1.037,1620,1.154,1640,1.154,1646,0.997,1699,1.114,1705,0.988,1759,1.287,1769,1.609,1772,1.218,1781,1.643,1790,1.042,1840,1.461,1880,3.791,1884,2.62,1919,2.888,1924,1.724,1939,3.935,1943,1.461,1991,1.868,2025,1.058,2029,1.912,2126,1.461,2145,2.172,2169,2.156,2195,1.643,2299,1.442,2375,1.836,2466,1.526,2482,1.376,2518,1.579,2578,2.775,2586,1.461,2755,1.102,2762,0.906,2764,2.714,2765,2.189,2790,1.526,2854,1.361,2896,1.245,2918,1.481,2987,1.407,2988,1.836,3002,1.442,3004,1.391,3069,1.481,3086,1.096,3134,2.014,3159,1.551,3162,2.726,3193,3.052,3196,1.162,3306,2.473,3307,1.579,3327,1.236,3341,1.227,3398,1.31,3424,1.836,3580,1.775,3869,1.775,3966,1.461,4159,1.912,4186,1.609,4293,1.912,4349,1.526,4418,1.912,4570,1.526,4667,1.643,4836,4.342,4959,1.348,4990,1.836,5103,1.526,5111,1.461,5307,1.526,5308,1.526,5367,2.014,5410,1.775,5567,1.681,5619,1.643,5959,1.775,6159,1.724,6168,3.54,6761,1.836,6848,5.379,7190,1.724,7284,1.912,7473,1.912,7644,1.836,7707,2.014,7955,5.366,8855,2.014,8856,2.014,9053,1.127,9766,1.424,9767,8.038,10085,2.169,10086,2.169,10087,2.169,10088,2.169,10089,2.169,10090,2.169,10091,2.169,10092,2.169,10093,2.169,10094,2.169,10095,2.169,10096,2.169,10097,2.169,10098,2.169,10099,2.169,10100,2.169,10101,2.169,10102,2.169,10103,2.169,10104,2.169,10105,2.169,10106,2.169,10107,2.169,10108,2.169,10109,2.169,10110,2.169,10111,2.169,10112,2.169,10113,2.169,10114,2.169,10115,2.169,10116,2.169,10117,2.169,10118,2.169,10119,2.169,10120,2.169,10121,2.169,10122,2.169,10123,2.169,10124,2.169,10125,2.169,10126,2.014,10127,2.169,10128,2.169,10129,2.014,10130,2.169,10131,2.169,10132,2.169,10133,2.169,10134,2.169,10135,2.169,10136,2.169,10137,2.169,10138,2.169,10139,2.169,10140,2.169,10141,2.169,10142,2.169]],["t/3988",[0,0.613,4,1.581,6,2.682,19,0.988,49,2.326,72,2.765,85,5.086,131,1.148,137,2.674,145,3.763,174,1.933,183,4.447,184,3.98,231,1.985,242,2.028,309,2.105,310,2.017,322,2.163,350,2.255,352,1.333,355,3.814,356,1.509,357,1.481,359,2.555,361,3.362,430,1.65,514,3.154,562,2.301,595,2.898,598,3.051,601,2.491,615,2.511,616,1.581,617,1.541,712,2.293,845,3.215,852,2.204,881,3.165,883,4.089,906,2.624,956,3.685,974,1.964,1036,2.359,1058,2.701,1096,2.533,1124,2.074,1128,2.169,1157,1.633,1247,4.148,1461,3.328,1627,2.636,1646,2.533,1870,3.618,1919,2.278,1939,2.816,2161,4.272,2295,4.012,2586,3.712,2595,3.818,2746,4.382,2758,2.934,2762,2.301,3004,3.535,3015,3.618,3022,4.511,3125,3.618,3493,6.909,3496,4.86,3910,3.535,4094,3.298,5307,3.878,5725,4.272,6811,5.119,7524,4.272,7948,4.382,7955,5.798,8441,5.119,8578,4.511,9053,2.864,9766,3.618,9767,5.358,10143,5.513,10144,5.513,10145,5.513,10146,5.513,10147,5.513,10148,5.513,10149,5.513,10150,5.513,10151,5.513,10152,5.513,10153,5.513,10154,5.513,10155,5.513,10156,5.513,10157,5.513]],["t/3990",[0,0.89,3,1.469,4,1.843,6,1.603,9,1.795,19,1.152,20,0.839,42,1.109,53,1.427,72,1.367,85,5.181,103,1.854,122,2.591,131,0.841,146,1.703,148,2.914,174,2.253,183,1.564,184,3.132,218,2.642,225,1.38,229,1.94,230,1.237,231,1.453,235,2.994,242,2.944,253,2.415,259,1.913,313,2.796,317,2.224,339,1.987,340,2.658,341,1.679,356,1.759,357,1.726,361,3.756,366,3.147,381,2.845,386,2.879,390,1.419,392,1.847,397,2.394,401,1.831,406,5.049,407,2.619,424,2.756,437,1.387,448,3.612,452,1.449,514,3.848,532,2.135,533,2.415,534,3.303,535,3.416,536,3.531,539,2.283,562,1.685,565,2.459,585,2.085,591,2.029,600,3.748,606,2.3,614,1.427,616,2.616,622,3.229,640,2.394,661,1.921,682,2.718,683,3.694,693,1.614,718,2.645,723,3.209,735,3.11,754,1.74,756,2.56,765,2.796,956,2.202,1099,2.354,1108,2.266,1115,2.085,1124,1.519,1128,1.588,1144,1.344,1157,1.196,1228,2.219,1231,2.756,1247,3.264,1317,1.895,1319,1.847,1324,2.25,1616,2.11,1641,2.219,1646,1.854,1767,3.128,1884,2.074,1919,4.114,1939,2.062,2126,2.718,2145,2.3,2210,2.204,2316,2.19,2402,3.057,2766,2.886,2848,2.336,3086,2.04,3638,4.166,4246,3.128,4872,3.748,5774,2.588,6848,3.914,7955,4.043,8249,2.483,9053,2.097,9707,3.748,10158,6.424,10159,4.037,10160,4.037,10161,4.037,10162,4.037,10163,4.037,10164,4.037,10165,4.037,10166,4.037,10167,4.037,10168,4.037,10169,4.037,10170,4.037,10171,4.037,10172,4.037,10173,4.037,10174,4.037,10175,4.037,10176,4.037,10177,4.037,10178,4.037,10179,3.558,10180,3.558,10181,4.037]],["t/3992",[0,0.571,4,0.337,6,2.01,19,0.55,20,0.638,25,0.565,28,0.332,35,0.315,37,0.409,38,0.351,39,1.096,47,0.73,53,1.6,73,0.557,85,4.82,87,0.686,88,0.266,89,0.413,91,1.158,92,1.634,100,0.692,103,1.005,108,0.56,109,0.274,113,1.29,116,0.47,118,0.433,122,0.994,131,1.286,137,1.062,138,1.321,140,0.491,148,0.993,161,0.618,172,2.159,174,1.587,183,2.202,184,0.573,186,1.228,193,0.427,195,0.585,212,0.615,213,0.692,215,1.165,218,0.341,219,0.597,225,0.748,230,0.36,231,1.383,233,1.333,242,1.129,252,0.547,259,0.557,262,1.404,296,0.875,302,1.018,306,2.053,307,1.255,309,1.172,310,0.43,315,1.684,316,1.426,317,2.681,321,0.891,333,0.573,335,3.307,339,0.579,340,1.706,345,2.185,346,0.565,350,0.895,352,0.929,355,0.859,356,1.239,357,0.588,359,0.545,361,3.548,366,2.217,386,0.981,390,0.413,397,1.298,403,1.124,405,0.555,406,0.651,407,1.251,408,1.287,428,0.665,429,0.557,430,1.15,431,0.692,434,0.655,437,1.055,448,0.867,464,0.557,475,0.803,486,2.217,514,3.225,523,0.71,526,0.66,533,1.836,536,1.203,539,2.173,540,2.126,542,0.827,548,0.582,550,0.618,556,1.266,562,0.491,570,2.096,576,1.309,585,1.131,588,0.856,591,0.591,593,0.746,596,1.539,601,3.498,602,0.985,608,2.661,612,1.067,613,1.22,614,1.085,615,2.589,616,2.123,617,0.612,622,0.591,632,0.675,636,2.084,640,0.697,664,1.889,675,0.911,677,0.891,683,0.476,684,1.158,692,0.366,693,2.053,698,0.651,699,0.515,703,0.565,704,0.63,718,0.901,724,0.754,725,0.573,735,0.457,738,1.974,739,0.66,745,0.479,754,0.507,755,0.585,756,2.639,772,0.594,841,0.704,845,0.686,847,0.665,849,0.746,853,0.731,868,0.995,872,0.872,879,0.611,900,1.151,901,2.126,905,0.841,912,0.746,933,0.827,934,0.911,939,0.969,940,0.507,941,0.665,956,1.761,958,0.935,965,0.935,974,1.093,989,1.516,990,0.618,1031,0.841,1034,0.67,1043,0.981,1047,2.138,1058,0.576,1066,0.697,1068,0.472,1070,0.911,1082,0.746,1092,0.815,1099,2.241,1100,1.346,1102,0.815,1123,1.106,1124,0.443,1128,0.463,1129,0.646,1144,1.279,1154,0.63,1157,1.962,1170,0.746,1174,0.995,1231,3.506,1247,1.112,1265,0.995,1293,0.704,1317,1.028,1319,1.001,1321,0.782,1324,1.22,1338,0.827,1344,0.527,1450,0.891,1530,0.995,1534,0.71,1545,0.655,1547,0.651,1566,0.576,1578,1.519,1584,1.436,1588,0.71,1594,0.71,1610,0.562,1614,0.618,1616,1.144,1619,0.692,1627,1.837,1634,1.364,1646,0.54,1677,0.738,1696,0.841,1699,1.124,1790,0.565,1803,0.568,1869,0.651,1880,2.084,1884,1.124,1919,1.587,1939,1.118,1943,0.792,1991,2.217,2003,0.891,2061,0.594,2076,0.772,2102,0.68,2139,0.856,2145,1.247,2195,1.657,2211,1.321,2231,0.962,2232,0.856,2241,0.651,2250,0.827,2272,0.872,2295,0.856,2299,3.008,2436,0.911,2473,0.815,2475,1.298,2518,0.856,2537,0.995,2539,1.092,2560,0.872,2611,0.935,2690,0.754,2746,0.935,2753,0.604,2762,0.491,2764,0.626,2766,2.195,2769,0.911,2773,1.735,2844,0.68,2851,0.763,2856,0.697,2863,0.803,2865,0.738,2949,0.891,2969,0.856,2971,1.083,2977,1.037,3086,2.871,3113,0.841,3145,1.092,3147,1.037,3193,3.962,3306,1.99,3307,0.856,3313,0.763,3318,1.037,3341,0.665,3358,0.827,3368,0.872,3398,2.319,3415,1.037,3632,1.604,3656,0.754,3711,0.763,3853,1.494,3904,1.037,3910,2.463,3967,0.995,4028,0.935,4072,1.092,4079,0.655,4094,1.309,4164,0.935,4284,0.935,4285,0.792,4286,0.995,4389,0.803,4470,1.696,4836,2.811,4880,0.891,4907,0.995,4959,1.359,5117,1.403,5118,0.911,5155,1.092,5220,0.872,5332,0.962,5376,1.092,5394,0.911,5686,0.763,5755,0.911,5923,1.092,5980,1.092,6054,1.092,6175,0.995,6229,0.995,6356,0.962,6835,0.827,6848,6.029,6944,0.911,7169,0.911,7217,1.037,7319,0.995,7480,1.037,7529,1.092,7600,1.092,7609,0.995,7774,1.092,7872,1.092,7925,1.092,7955,5.57,8559,1.092,9053,0.611,9507,0.995,9575,1.092,9581,1.092,9766,0.772,9767,7.734,10126,1.092,10129,1.092,10182,2.188,10183,1.176,10184,1.176,10185,1.092,10186,1.092,10187,1.176,10188,1.176,10189,2.188,10190,1.176,10191,1.176,10192,1.176,10193,1.176,10194,1.176,10195,1.176,10196,1.092,10197,1.176,10198,1.176,10199,1.176,10200,1.176,10201,1.176,10202,1.176,10203,1.176,10204,1.176,10205,1.176,10206,1.176,10207,1.176,10208,1.176,10209,1.176,10210,1.176,10211,1.176,10212,1.176,10213,1.176,10214,1.176,10215,1.176,10216,1.176,10217,1.176,10218,1.176,10219,1.176,10220,1.176,10221,1.092,10222,1.176,10223,1.176,10224,1.176,10225,1.176,10226,1.176,10227,1.092,10228,1.092,10229,1.176,10230,1.176,10231,1.176,10232,2.188,10233,1.176,10234,1.176,10235,1.176,10236,1.176,10237,1.176,10238,1.176,10239,1.176,10240,1.176,10241,1.176,10242,1.176,10243,1.176,10244,1.176,10245,1.176,10246,1.176,10247,1.176,10248,1.176,10249,1.176,10250,1.176,10251,1.176,10252,1.176,10253,1.176,10254,1.176,10255,1.176,10256,1.176,10257,1.176,10258,1.176,10259,1.176,10260,1.176,10261,1.176,10262,1.176,10263,1.176,10264,1.176,10265,1.176,10266,1.176,10267,1.176,10268,1.176,10269,1.176,10270,1.176,10271,1.176,10272,1.176,10273,1.176,10274,1.176,10275,1.176,10276,1.176,10277,1.176,10278,1.176,10279,1.176,10280,1.176,10281,1.176,10282,1.176,10283,1.176,10284,1.176,10285,1.176,10286,1.176,10287,1.176,10288,1.176,10289,1.176,10290,1.176,10291,1.176,10292,1.176,10293,1.176,10294,1.176,10295,1.176,10296,1.176,10297,1.176,10298,1.176,10299,1.176,10300,1.176,10301,1.176,10302,1.176,10303,1.176,10304,1.176,10305,1.176,10306,1.176,10307,1.176,10308,1.176,10309,1.176,10310,1.176,10311,1.176,10312,1.176]],["t/3994",[0,0.735,6,2.529,9,1.073,12,0.911,19,0.433,27,0.844,45,0.805,72,0.817,73,0.614,83,0.932,85,4.614,87,1.408,92,0.871,100,1.419,105,1.975,108,1.992,113,1.759,116,1.673,131,0.871,137,1.171,138,1.457,145,2.856,183,0.935,184,1.176,186,1.355,218,0.699,231,1.994,243,1.269,244,0.718,253,1.444,259,1.983,294,1.044,296,2.215,306,2.513,309,2.524,310,0.883,314,1.584,316,0.761,322,2.173,333,1.176,335,4.71,340,2.196,341,3.11,343,1.113,345,1.165,346,1.16,349,0.597,350,1.711,352,0.584,355,2.173,357,1.124,361,3.374,366,2.05,386,1.875,406,1.336,407,2.258,428,3.132,430,1.978,437,1.904,438,1.247,486,2.05,514,2.14,533,3.314,536,1.327,538,1.975,539,1.365,542,1.698,545,1.408,550,2.2,556,2.421,562,1.747,565,1.47,567,2.103,595,1.269,596,2.943,601,2.986,602,1.777,614,1.479,615,1.906,616,2.35,617,0.675,618,1.431,621,1.113,664,3.671,683,0.977,692,1.301,693,2.215,738,2.846,739,1.355,740,1.408,756,2.634,821,2.04,852,0.965,875,1.188,905,1.726,906,1.149,956,0.827,965,1.918,1000,1.87,1036,1.033,1043,1.081,1062,1.547,1068,0.968,1076,1.207,1099,1.408,1115,1.247,1123,1.219,1124,0.908,1128,0.95,1157,1.24,1247,2.126,1470,1.514,1506,0.99,1518,0.994,1547,1.336,1553,1.396,1555,1.47,1578,2.741,1584,2.746,1614,1.269,1635,1.565,1646,1.109,1678,1.756,1699,1.24,1790,1.16,1820,1.284,1883,1.79,1884,2.15,1919,1.729,1991,4.014,2070,3.326,2155,1.53,2195,1.828,2210,2.285,2263,3.34,2264,3.288,2495,1.79,2561,1.419,2562,2.746,2662,1.53,2663,1.565,2709,1.756,2762,2.312,2763,1.975,2766,4.726,2769,3.242,2773,1.365,2831,1.625,2851,2.714,2969,3.045,3132,2.127,3159,1.726,3193,2.503,3267,1.604,3351,1.79,3580,1.975,3582,1.975,3632,2.895,3638,1.565,3688,1.565,3711,1.565,3966,1.625,4117,2.127,4560,1.408,4836,1.499,5152,1.918,5174,2.127,5959,1.975,6219,1.918,6269,2.241,6310,1.828,6792,1.975,6835,2.943,6848,7.233,7304,1.975,7955,6.228,8578,1.975,8938,2.241,9053,1.254,9766,1.584,9767,4.907,10185,2.241,10186,2.241,10227,2.241,10228,2.241,10313,2.413,10314,2.413,10315,2.413,10316,2.413,10317,2.413,10318,2.413,10319,2.413,10320,2.413,10321,2.413,10322,2.413,10323,2.413,10324,2.413,10325,2.413,10326,2.413,10327,2.241,10328,2.413,10329,2.413,10330,2.413,10331,2.413,10332,2.413,10333,2.413,10334,2.413,10335,2.413,10336,2.413,10337,2.413,10338,2.413,10339,2.413,10340,2.413,10341,2.413,10342,2.413,10343,2.413,10344,2.413,10345,2.413,10346,2.413,10347,2.413,10348,2.413,10349,2.413,10350,2.413,10351,2.413,10352,2.413,10353,2.413,10354,2.413,10355,2.413,10356,2.413,10357,2.413,10358,2.413,10359,2.413,10360,2.413,10361,2.413,10362,2.413,10363,2.413]],["t/3996",[0,0.893,4,1.164,6,1.012,9,1.804,18,0.986,19,0.727,26,0.732,73,0.592,78,1.348,85,4.459,88,0.526,108,1.109,115,0.606,116,0.931,122,1.314,131,1.523,137,1.13,146,0.983,148,1.057,160,1.833,161,1.224,162,2.133,174,1.423,183,2.089,213,1.37,218,1.175,225,1.387,242,1.493,267,1.147,272,1.119,296,2.578,307,0.953,309,1.549,310,0.852,315,1.47,316,0.734,339,1.147,341,2.242,345,2.602,349,0.576,352,0.563,354,1.548,361,1.671,391,1.461,392,1.856,406,1.289,409,0.673,429,1.104,430,1.214,431,3.793,433,1.348,437,1.853,440,2.696,448,1.607,464,1.104,486,1.988,514,3.335,523,1.406,532,2.851,542,1.638,545,3.762,549,2.834,553,1.971,555,1.971,556,1.348,570,1.989,591,2.709,595,1.224,598,1.289,601,1.052,602,0.747,614,0.823,615,2.938,616,2.624,619,1.039,644,1.255,661,1.109,664,1.694,686,1.224,693,2.155,725,1.135,735,2.095,738,1.196,741,1.035,748,2.406,756,2.148,759,1.079,796,1.851,797,1.695,821,1.135,841,1.305,875,1.147,906,2.566,956,2.211,1009,1.568,1034,1.327,1038,1.027,1043,1.044,1051,1.548,1062,1.493,1088,1.461,1123,1.177,1124,0.876,1128,0.916,1129,1.28,1144,1.795,1153,1.141,1155,1.164,1157,1.597,1247,2.061,1295,1.493,1312,1.406,1317,1.905,1319,2.466,1324,1.298,1506,1.665,1576,3.225,1578,1.152,1599,1.805,1603,1.568,1610,1.114,1615,1.971,1616,3.371,1646,1.07,1699,1.196,1705,1.061,1765,1.529,1790,1.119,1804,1.289,1820,1.239,1884,1.196,1919,3.78,1939,1.19,1943,1.568,1991,1.988,2025,1.978,2056,1.477,2076,1.529,2119,2.053,2231,1.906,2353,3.434,2357,1.695,2479,1.529,2503,2.472,2510,1.348,2516,1.381,2586,1.568,2753,2.084,2758,1.239,2762,2.693,2764,1.239,2765,2.329,2773,1.317,2886,1.317,2896,1.337,2908,1.217,3069,1.59,3112,2.769,3175,3.073,3193,3.225,3264,1.851,3341,2.294,3364,2.163,3495,1.906,3632,2.12,3639,1.906,3711,1.51,3882,1.529,3966,3.629,4041,2.053,4185,1.906,4836,4.006,5106,1.971,5758,1.851,5770,2.053,6193,2.053,6206,1.851,6370,1.529,6706,2.163,6848,7.52,7296,1.728,7614,1.906,7649,1.971,7840,1.665,7933,1.764,7955,6.171,8322,2.053,8585,1.851,9053,1.21,9258,2.053,9443,2.163,9507,3.434,9624,2.163,9766,1.529,9767,6.552,10179,3.576,10180,3.576,10364,2.329,10365,2.329,10366,2.329,10367,4.057,10368,2.329,10369,2.329,10370,2.329,10371,2.329,10372,2.329,10373,2.329,10374,2.329,10375,2.329,10376,2.329,10377,2.329,10378,2.329,10379,2.329,10380,2.329,10381,2.329,10382,2.329,10383,2.329,10384,2.329,10385,2.329,10386,2.329,10387,2.329,10388,2.329,10389,2.329,10390,2.329,10391,2.329,10392,2.329,10393,2.329,10394,2.329,10395,2.329,10396,2.329,10397,2.329,10398,2.329,10399,2.329,10400,2.329,10401,2.329,10402,2.329,10403,2.329,10404,2.329,10405,2.329,10406,2.329,10407,2.329,10408,2.329,10409,2.329,10410,2.329,10411,2.329,10412,2.329,10413,2.329,10414,2.329,10415,2.329,10416,2.329,10417,2.329]],["t/3998",[6,2.813,9,2.711,12,1.428,39,2.178,85,5.313,113,2.564,116,1.512,131,1.27,160,2.756,174,2.139,183,2.364,186,3.424,231,2.196,242,1.392,310,3.527,315,1.032,317,1.31,341,1.574,343,1.746,349,0.936,350,1.547,357,1.016,431,2.225,432,2.172,514,3.396,532,2.001,562,1.579,565,2.305,570,2.827,598,3.376,602,3.093,608,4.224,614,3.106,615,3.491,616,3.108,617,2.142,636,2.052,677,2.865,693,1.512,699,1.656,735,1.471,738,3.936,756,3.502,834,3.007,835,3.007,881,2.172,900,4.029,906,1.801,956,1.297,1009,4.107,1038,1.669,1052,2.305,1092,2.62,1096,1.738,1123,3.082,1128,1.489,1157,1.121,1247,3.099,1319,3.505,1321,2.514,1344,1.695,1506,2.503,1518,2.511,1566,1.853,1578,4.349,1614,1.989,1641,2.08,1646,2.802,1750,2.583,1759,2.244,1803,3.699,1826,2.547,1868,3.096,1919,2.52,1991,1.853,2076,2.483,2169,3.449,2316,2.052,2509,2.013,2758,2.013,2760,2.155,2762,4.024,2764,2.013,2773,2.139,2848,2.189,2969,4.439,3112,2.583,3125,2.483,3182,3.007,3193,2.263,3289,3.202,3341,2.139,3495,3.096,3582,3.096,3808,3.202,3853,2.583,3887,2.08,3888,2.244,4117,3.335,4421,3.202,5774,2.426,6159,4.848,6310,2.865,6848,6.87,6944,2.932,7955,5.883,9053,1.966,10418,6.099,10419,6.099,10420,3.783,10421,6.099,10422,6.099,10423,6.099,10424,6.099,10425,3.783,10426,3.783,10427,3.783,10428,3.783,10429,3.783,10430,3.783,10431,3.783,10432,3.783,10433,3.783]],["t/4000",[0,0.606,6,2.021,18,1.397,39,2.893,51,1.925,53,2.465,54,3.182,72,1.847,84,1.725,85,4.987,89,1.16,92,1.969,99,1.359,108,1.571,113,3.771,116,1.319,131,0.687,137,3.93,183,2.114,213,1.941,231,1.188,242,2.007,255,3.498,259,2.585,296,2.181,310,1.208,314,2.166,315,2.635,316,1.04,335,4.338,341,2.901,346,2.621,355,1.295,357,0.887,361,1.359,428,1.866,431,1.941,457,1.853,464,1.564,475,2.253,514,2.108,527,2.402,536,2.999,548,3.451,565,2.011,567,1.659,570,2.989,591,2.742,601,2.465,615,1.503,616,2.573,636,1.79,664,2.277,735,2.711,738,5.868,753,3.943,756,3.85,834,2.623,835,2.623,875,1.625,906,1.571,924,1.974,956,1.87,971,1.668,974,1.943,1026,2.222,1028,1.941,1036,1.412,1052,2.011,1055,2.286,1068,1.324,1112,3.064,1124,1.242,1128,2.147,1228,1.814,1247,2.772,1256,2.166,1293,3.264,1319,1.51,1324,1.839,1578,2.7,1582,2.321,1616,1.725,1627,4.29,1646,1.516,1699,1.695,1883,2.448,1884,2.802,1919,1.364,1928,2.286,1939,1.686,1943,2.222,1991,2.673,2341,2.36,2358,2.402,2509,1.756,2518,3.97,2586,2.222,2662,2.093,2663,2.14,2753,1.695,2845,5.075,2850,2.793,2851,2.14,2852,3.064,2854,2.071,2896,1.895,2908,1.725,2961,2.557,3018,2.557,3162,2.36,3182,2.623,3289,2.793,3306,3.538,3307,2.402,3342,2.557,3374,2.623,3428,2.402,3887,1.814,3888,1.957,4149,2.623,4470,2.557,4560,1.925,4836,5.032,4926,2.7,5154,2.793,5719,2.7,5991,3.064,6310,2.499,6848,6.96,7079,2.793,7217,2.909,7304,2.7,7955,6.161,8047,3.064,9053,1.715,10221,3.064,10327,3.064,10434,3.3,10435,3.3,10436,3.3,10437,3.3,10438,3.3,10439,3.3,10440,3.3,10441,3.3,10442,3.3,10443,3.064,10444,3.3,10445,3.3,10446,3.3,10447,3.064,10448,3.3,10449,3.3,10450,3.3,10451,3.3,10452,3.3,10453,3.3,10454,3.3,10455,3.3]],["t/4002",[24,5.505,27,2.275,39,2.323,53,2.299,72,2.203,77,3.461,85,5.011,137,3.155,138,3.926,148,4.844,183,4.138,221,3.926,222,3.705,259,3.082,307,2.66,317,2.252,335,3.483,341,2.706,355,2.552,431,3.825,440,8.141,514,4.486,548,3.218,549,6.441,550,4.838,551,4.575,554,7.314,565,3.963,591,3.269,616,2.639,617,1.818,664,2.715,756,2.592,956,2.23,1128,2.559,1157,1.927,1228,3.575,1247,4.675,1505,4.379,1578,3.218,1919,3.802,1928,8.485,1939,3.323,1943,4.379,2192,4.734,4836,4.04,5123,6.039,6848,5.606,7955,5.867,9053,3.379,9980,6.039,10196,6.039,10447,6.039,10456,6.504,10457,6.504,10458,6.504,10459,6.504,10460,6.504]],["t/4004",[6,1.318,12,1.994,20,1.098,42,2.173,47,1.763,53,3.72,72,2.678,81,2.563,85,3.877,131,2.191,145,3.606,150,2.492,165,3.189,177,4.323,183,2.047,218,2.746,225,1.807,231,1.902,309,2.017,335,4.235,341,3.29,343,2.437,350,3.235,355,2.073,361,2.175,383,2.437,386,2.367,407,3.224,408,4.651,430,1.581,448,2.092,450,2.575,514,3.056,530,3.659,536,2.904,548,2.614,565,3.219,591,3.975,614,1.867,616,3.018,636,2.866,693,2.112,748,3.133,756,2.105,912,3.35,956,1.811,1115,4.086,1123,2.669,1124,1.988,1128,2.079,1153,2.588,1157,2.343,1247,2.684,1338,3.716,1456,3.606,1578,2.614,1608,4.906,1641,2.904,1646,2.427,1656,2.866,1699,2.714,1705,2.407,1883,3.919,1884,4.87,1919,4.656,1939,4.04,2155,3.35,2296,3.919,2432,4.906,2745,4.094,2844,3.057,2971,2.614,3249,3.716,3394,4.199,3644,4.001,3777,4.818,4349,3.716,4836,3.282,5154,4.471,5718,4.199,5774,3.387,5962,4.906,6310,4.001,6848,6.412,7840,3.778,7955,5.695,9053,2.745,10443,4.906,10461,5.283,10462,5.283,10463,5.283,10464,5.283,10465,5.283,10466,5.283,10467,5.283,10468,5.283]],["t/4006",[0,0.476,6,1.68,24,3.624,27,1.498,39,2.404,47,2.776,60,1.301,85,4.192,118,1.576,131,1.402,137,2.077,148,1.943,160,1.935,174,1.502,183,1.66,225,1.464,310,1.567,317,1.483,335,3.605,341,1.781,343,1.976,350,3.856,352,1.628,355,3.263,356,1.843,357,1.809,407,1.746,428,2.422,429,2.029,430,2.489,448,1.696,457,2.404,475,2.923,514,2.601,518,2.048,562,1.788,567,2.152,570,1.58,585,2.212,591,2.152,601,3.041,602,1.374,614,1.513,615,1.951,616,2.704,636,2.323,664,1.788,670,3.835,735,2.617,748,2.54,756,2.682,759,1.984,845,2.498,875,2.108,956,1.468,1047,1.611,1068,1.717,1123,2.164,1124,1.611,1128,1.685,1144,2.769,1157,1.994,1231,2.923,1247,2.176,1300,2.387,1319,3.805,1470,2.687,1471,2.098,1518,1.763,1520,2.2,1578,2.119,1635,2.777,1646,1.967,1705,1.951,1767,3.318,1919,3.436,1928,2.966,1939,4.816,1943,2.883,1991,2.098,2077,2.811,2145,2.44,2210,2.338,2376,3.624,2426,3.404,2518,3.117,2690,2.746,2755,2.176,2764,3.582,2851,2.777,2854,2.687,2884,3.117,3193,4.976,3196,2.293,3905,2.966,3966,2.883,4349,3.012,4560,2.498,5105,3.243,5176,3.504,5220,3.177,5382,3.318,5522,2.716,5719,3.504,5737,3.062,5979,3.976,6074,3.775,6848,7.947,7190,3.404,7935,3.976,7955,6.672,9053,2.225,10179,3.775,10180,3.775,10469,4.283,10470,4.283,10471,4.283,10472,4.283,10473,4.283,10474,4.283,10475,6.732,10476,4.283,10477,4.283,10478,4.283]]],"invertedIndex":[["0",{"_index":218,"t":{"13":{"position":[[58,1]]},"19":{"position":[[360,1],[734,1]]},"44":{"position":[[78,1],[80,1]]},"46":{"position":[[84,1]]},"48":{"position":[[41,1],[85,1],[155,1],[157,1]]},"51":{"position":[[58,1],[70,1]]},"53":{"position":[[10,1],[12,1],[41,1],[43,1],[127,1],[129,1]]},"57":{"position":[[78,1],[80,1]]},"60":{"position":[[84,1]]},"62":{"position":[[58,1],[70,1]]},"64":{"position":[[10,1],[12,1],[54,1],[56,1],[153,1],[155,1]]},"68":{"position":[[78,1],[80,1]]},"70":{"position":[[84,1]]},"72":{"position":[[41,1],[85,1],[155,1],[157,1]]},"75":{"position":[[58,1],[70,1]]},"77":{"position":[[10,1],[12,1],[41,1],[43,1],[127,1],[129,1]]},"114":{"position":[[425,1],[442,1],[507,1],[540,1],[563,1],[565,1],[567,1],[584,1],[586,1],[588,1],[1318,1]]},"121":{"position":[[700,1],[706,1],[719,1],[725,1]]},"190":{"position":[[38,1],[55,1],[225,1],[280,1],[322,1],[324,1],[411,1],[497,1],[593,1],[603,1],[637,1],[653,1],[663,1],[673,1],[694,1],[710,1],[720,1],[730,1],[762,1],[772,1],[816,1],[826,1],[857,1],[873,1],[883,1],[893,1],[911,1],[927,1],[937,1],[947,1],[975,1],[985,1],[1078,1],[1096,1],[1116,1],[1137,1],[1155,1],[1165,1],[1175,1],[1265,1],[1275,1],[1306,1],[1324,1],[1334,1],[1344,1],[1362,1],[1380,1],[1390,1],[1400,1],[1430,1],[1440,1]]},"278":{"position":[[190,1]]},"308":{"position":[[186,1],[218,1],[251,1]]},"314":{"position":[[94,1]]},"316":{"position":[[96,1]]},"397":{"position":[[195,1],[197,1]]},"399":{"position":[[228,1],[230,1],[574,1],[595,1],[851,1],[853,1]]},"401":{"position":[[171,1],[173,1],[243,1]]},"419":{"position":[[389,1],[391,1]]},"423":{"position":[[220,1]]},"433":{"position":[[47,1],[49,1]]},"441":{"position":[[146,1],[148,1]]},"443":{"position":[[48,1],[55,1]]},"445":{"position":[[21,1],[394,1]]},"461":{"position":[[179,1]]},"467":{"position":[[18,1],[76,1]]},"482":{"position":[[20,1],[105,1],[126,1],[205,1]]},"514":{"position":[[751,1]]},"520":{"position":[[358,1],[360,1],[461,1],[463,1]]},"639":{"position":[[292,1]]},"685":{"position":[[454,1],[456,1],[504,1],[506,1]]},"696":{"position":[[412,1],[414,1],[442,1],[444,1],[468,1],[470,1],[518,1],[520,1],[547,1],[549,1],[585,1],[587,1],[611,1],[613,1],[914,1],[916,1],[940,1],[942,1],[975,1],[977,1],[1019,1],[1021,1],[1147,1],[1149,1],[2140,1],[2142,1],[2192,1],[2194,1],[2328,1],[2330,1],[3078,1],[3080,1],[3122,1],[3124,1],[3250,1],[3252,1],[3754,1],[3756,1],[3801,1],[3803,1],[3932,1],[3934,1],[4695,1],[4697,1]]},"706":{"position":[[298,1],[300,1]]},"713":{"position":[[17,1],[19,1],[29,1],[31,1],[99,1],[101,1],[430,1],[432,1]]},"715":{"position":[[111,1],[126,1]]},"717":{"position":[[37,1]]},"722":{"position":[[51,1],[53,1]]},"726":{"position":[[28,1],[30,1]]},"734":{"position":[[9,1],[113,1],[444,1],[523,1],[534,1],[7282,1],[7294,1],[7389,1],[7405,1]]},"773":{"position":[[149,1]]},"777":{"position":[[37,1]]},"826":{"position":[[10,1]]},"881":{"position":[[61,1],[235,1]]},"883":{"position":[[299,1]]},"899":{"position":[[588,1],[1455,1]]},"901":{"position":[[386,1],[388,1],[489,1],[491,1]]},"1062":{"position":[[27,1],[124,1]]},"1286":{"position":[[235,1]]},"1315":{"position":[[386,1],[388,1],[489,1],[491,1]]},"1319":{"position":[[299,1],[301,1]]},"1323":{"position":[[37,1]]},"1372":{"position":[[162,1]]},"1377":{"position":[[120,1]]},"1379":{"position":[[137,1],[535,1]]},"1416":{"position":[[414,1]]},"1444":{"position":[[162,1]]},"1474":{"position":[[449,1]]},"1483":{"position":[[384,1]]},"1488":{"position":[[910,1]]},"1495":{"position":[[854,1]]},"1503":{"position":[[108,1]]},"1520":{"position":[[219,1],[221,1],[304,1],[306,1]]},"1535":{"position":[[140,1],[169,1],[171,1]]},"1551":{"position":[[301,1],[330,1],[332,1],[1084,1]]},"1557":{"position":[[727,1],[804,1]]},"1592":{"position":[[141,1],[217,1],[233,1]]},"1594":{"position":[[189,1],[270,1],[294,1]]},"1605":{"position":[[163,1],[165,1]]},"1613":{"position":[[204,1],[206,1]]},"1615":{"position":[[243,1],[245,1]]},"1617":{"position":[[286,1],[288,1],[528,1],[530,1],[805,1],[807,1],[1071,1],[1073,1]]},"1619":{"position":[[409,1],[411,1]]},"1621":{"position":[[704,1],[854,1],[921,1]]},"1655":{"position":[[152,1],[219,1],[221,1],[306,1],[308,1]]},"1665":{"position":[[369,1]]},"1715":{"position":[[23,1]]},"1729":{"position":[[181,1]]},"1741":{"position":[[387,1],[1269,1],[2114,1]]},"1743":{"position":[[242,1],[312,1]]},"1755":{"position":[[97,1]]},"1791":{"position":[[89,1]]},"1795":{"position":[[1010,1],[1024,1],[1037,1],[1052,1],[1070,1],[1083,1],[1097,1],[1099,1],[1106,1],[1718,1],[3078,1]]},"1801":{"position":[[148,1]]},"1855":{"position":[[236,1],[323,1]]},"1861":{"position":[[11,1]]},"1865":{"position":[[129,1],[216,1]]},"1869":{"position":[[156,1],[185,1]]},"1873":{"position":[[74,1],[314,1]]},"1875":{"position":[[315,1],[406,1]]},"1947":{"position":[[233,1]]},"1965":{"position":[[105,1]]},"2067":{"position":[[24,1]]},"2077":{"position":[[23,1]]},"2149":{"position":[[36,1]]},"2165":{"position":[[128,1]]},"2173":{"position":[[23,1]]},"2191":{"position":[[44,1]]},"2193":{"position":[[75,1]]},"2199":{"position":[[11,1]]},"2296":{"position":[[58,1]]},"2298":{"position":[[20,1],[48,1],[93,1],[151,1],[187,1]]},"2313":{"position":[[615,1]]},"2339":{"position":[[24,1]]},"2387":{"position":[[127,1]]},"2391":{"position":[[4,1],[25,1],[140,1],[142,1]]},"2418":{"position":[[251,1],[285,1],[318,1]]},"2420":{"position":[[86,1],[88,1],[130,1],[132,1],[172,1],[174,1],[176,1],[216,1],[396,1],[398,1],[445,1],[578,1],[1236,1],[1675,1],[1766,1],[1822,1],[1824,1],[1871,1],[1875,1],[1922,1],[1924,1],[1967,1],[1969,1],[2015,1],[2017,1],[2065,1],[2067,1],[2117,1],[2119,1],[2166,1],[2168,1],[2215,1],[2217,1],[2267,1],[2269,1]]},"2424":{"position":[[145,1],[176,1],[178,1],[205,1],[207,1],[232,1],[234,1],[240,1],[264,1],[266,1],[298,1],[300,1],[335,1],[337,1]]},"2438":{"position":[[263,1]]},"2486":{"position":[[495,1]]},"2488":{"position":[[35,1]]},"2530":{"position":[[129,1]]},"2555":{"position":[[265,1]]},"2557":{"position":[[139,1]]},"2573":{"position":[[293,1]]},"2625":{"position":[[562,1],[585,1]]},"2629":{"position":[[14,1],[132,1]]},"2635":{"position":[[17,1]]},"2637":{"position":[[47,1]]},"2639":{"position":[[49,1],[93,1]]},"2641":{"position":[[49,1],[51,1]]},"2662":{"position":[[17,1]]},"2664":{"position":[[47,1]]},"2666":{"position":[[49,1],[93,1]]},"2668":{"position":[[49,1]]},"2674":{"position":[[446,1]]},"2707":{"position":[[47,1],[49,1]]},"2725":{"position":[[422,1],[427,1],[435,1],[941,1],[946,1],[954,1],[2383,1],[2388,1],[2396,1]]},"2727":{"position":[[672,1],[674,1]]},"2735":{"position":[[155,1],[157,1]]},"2749":{"position":[[565,1],[611,1],[624,1]]},"2803":{"position":[[12,1]]},"2836":{"position":[[818,1]]},"2856":{"position":[[866,1],[1092,1],[2081,1]]},"2877":{"position":[[23,1]]},"2899":{"position":[[158,1],[443,1]]},"3015":{"position":[[86,1]]},"3017":{"position":[[60,1],[89,1]]},"3063":{"position":[[196,1],[1077,1],[1527,1],[1634,1]]},"3080":{"position":[[1133,1],[1179,1],[1192,1]]},"3138":{"position":[[255,1]]},"3189":{"position":[[513,1]]},"3220":{"position":[[53,1]]},"3226":{"position":[[104,1],[424,1]]},"3230":{"position":[[303,1]]},"3254":{"position":[[551,1]]},"3265":{"position":[[53,1]]},"3277":{"position":[[85,1]]},"3339":{"position":[[23,1]]},"3345":{"position":[[23,1]]},"3375":{"position":[[219,1]]},"3416":{"position":[[67,1]]},"3428":{"position":[[23,1]]},"3430":{"position":[[44,1],[271,1],[355,1],[424,1],[1834,1],[1918,1],[2512,1],[2882,1],[3003,1],[3109,1],[3562,1],[3857,1],[4189,1],[4308,1],[4412,1]]},"3432":{"position":[[545,1],[676,1],[886,1],[908,1],[1469,1],[1478,1],[1485,1],[1660,1],[1669,1],[1676,1],[1911,1],[1920,1],[1927,1],[2731,1],[2840,1],[2961,1],[3067,1],[4263,1],[5074,1],[5406,1],[5525,1],[5629,1]]},"3434":{"position":[[2637,1]]},"3446":{"position":[[368,1],[528,1],[900,1],[917,1],[982,1],[1015,1],[1038,1],[1040,1],[1042,1],[1059,1],[1061,1],[1063,1],[1793,1]]},"3448":{"position":[[107,1],[128,1],[652,1],[672,1],[1076,1],[1096,1]]},"3452":{"position":[[211,1],[323,1],[1302,1],[1304,1],[1306,1],[1327,1],[1329,1],[1331,1],[1557,1],[1574,1],[1639,1],[1641,1],[1643,1],[1667,1],[2680,1],[2682,1],[2684,1],[2861,1],[3864,1]]},"3466":{"position":[[23,1]]},"3470":{"position":[[124,1]]},"3474":{"position":[[24,1]]},"3488":{"position":[[18,1],[20,1]]},"3522":{"position":[[11,1],[31,1],[1165,1],[1187,1]]},"3530":{"position":[[14,1]]},"3532":{"position":[[55,1]]},"3563":{"position":[[11,1],[31,1],[635,1],[657,1]]},"3569":{"position":[[14,1]]},"3571":{"position":[[55,1]]},"3601":{"position":[[145,1],[483,1],[604,1],[710,1]]},"3640":{"position":[[679,1],[716,1]]},"3678":{"position":[[13,1]]},"3706":{"position":[[188,1],[1069,1],[1538,1],[1645,1]]},"3748":{"position":[[135,1]]},"3758":{"position":[[55,1],[77,1],[146,1]]},"3762":{"position":[[575,1],[686,1],[797,1],[908,1],[1018,1],[1129,1]]},"3764":{"position":[[184,1],[296,1],[409,1],[522,1],[635,1],[748,1]]},"3766":{"position":[[357,1],[463,1],[568,1],[673,1],[778,1],[887,1],[993,1],[1108,1],[1214,1],[1329,1],[1444,1],[1549,1],[1655,1]]},"3768":{"position":[[645,1],[780,1],[975,1],[1145,1],[1280,1],[1475,1],[1645,1],[1781,1],[1977,1],[2148,1],[2284,1],[2661,1],[2771,1],[2881,1],[2992,1],[3103,1]]},"3770":{"position":[[427,1],[839,1],[1044,1],[1065,1],[1089,1],[1106,1],[1824,1],[2117,1],[2272,1],[2488,1],[2511,1],[2538,1],[2556,1],[3478,1],[3687,1],[3690,1],[3777,1],[3914,1],[4089,1],[4297,1],[4321,1],[4349,1],[4368,1],[4429,1],[5099,1],[5426,1],[5625,1],[5792,1],[5812,1],[5835,1],[5851,1]]},"3772":{"position":[[634,1],[763,1],[885,1],[990,1],[1106,1],[1223,1],[1340,1],[1457,1],[1574,1],[1691,1],[1797,1],[1914,1],[2031,1]]},"3774":{"position":[[769,1],[875,1],[983,1],[1089,1],[1204,1],[1310,1],[1425,1],[1539,1],[1645,1]]},"3783":{"position":[[660,1],[712,1],[780,1],[900,1],[1021,1],[1142,1]]},"3785":{"position":[[1036,1],[1320,1]]},"3798":{"position":[[435,1],[463,1],[472,1],[504,1],[534,1],[543,1],[570,1]]},"3800":{"position":[[81,1]]},"3802":{"position":[[1065,1],[1088,1],[1114,1],[1133,1],[1677,1],[1698,1],[1722,1],[1739,1]]},"3806":{"position":[[476,1],[619,1],[762,1],[905,1],[1049,1],[1192,1],[1881,1],[2023,1],[2165,1],[2307,1],[2449,1],[2591,1],[3709,1],[3833,1]]},"3808":{"position":[[1143,1],[1261,1],[1379,1],[1500,1],[1621,1],[2364,1],[2488,1],[2612,1],[2736,1],[2860,1],[3074,1],[3119,1],[3158,1]]},"3812":{"position":[[462,1],[483,1],[507,1],[524,1],[1555,1],[1558,1],[1561,1],[1564,1],[1576,1],[2070,1],[2094,1],[2122,1],[2141,1],[2202,1],[2737,1],[2757,1],[2780,1],[2796,1]]},"3817":{"position":[[250,1],[1276,1],[1299,1],[1325,1],[1344,1],[2269,1],[2290,1],[2314,1],[2331,1]]},"3821":{"position":[[761,1],[782,1],[806,1],[823,1]]},"3828":{"position":[[1020,1],[1116,1],[1243,1]]},"3832":{"position":[[1083,1],[1180,1],[1300,1],[1420,1],[1540,1],[1672,1],[2035,1],[2055,1],[3263,1],[3369,1],[3796,1],[3816,1]]},"3842":{"position":[[343,1],[487,1],[973,1],[1117,1],[1538,1],[1682,1],[2128,1],[2272,1],[2769,1],[2913,1],[3386,1],[3530,1]]},"3844":{"position":[[349,1],[496,1],[619,1]]},"3846":{"position":[[589,1],[735,1],[858,1]]},"3850":{"position":[[175,1],[350,1]]},"3852":{"position":[[163,1],[294,1],[468,1]]},"3854":{"position":[[165,1],[296,1],[442,1]]},"3856":{"position":[[191,1]]},"3874":{"position":[[108,1],[283,1]]},"3876":{"position":[[96,1],[226,1],[400,1]]},"3896":{"position":[[686,1],[707,1],[731,1],[748,1]]},"3908":{"position":[[253,1]]},"3910":{"position":[[307,1],[398,1],[432,1],[469,1],[512,1],[565,1],[608,1],[653,1],[1052,1],[1435,1],[1498,1],[2158,1],[2211,1],[2266,1],[2371,1],[2438,1],[2502,1]]},"3912":{"position":[[643,1],[754,1],[788,1],[1502,1],[1936,1],[1994,1],[2466,1]]},"3914":{"position":[[676,1],[790,1],[1211,1],[1357,1],[1610,1],[2423,1],[2470,1],[2507,1],[2564,1]]},"3916":{"position":[[602,1],[719,1],[1963,1],[4298,1],[4300,1],[4302,1],[4323,1],[4325,1],[4327,1],[4553,1],[4570,1],[4635,1],[4637,1],[4639,1],[4663,1],[5676,1],[5678,1],[5680,1],[5857,1],[6860,1]]},"3918":{"position":[[676,1],[789,1],[1303,1],[1316,1]]},"3922":{"position":[[664,1],[1463,1]]},"3926":{"position":[[223,1],[225,1],[623,1],[625,1]]},"3928":{"position":[[1462,1],[1479,1],[1544,1],[1577,1],[1600,1],[1602,1],[1604,1],[1621,1],[1623,1],[1625,1],[2355,1]]},"3930":{"position":[[515,1],[549,1],[551,1]]},"3934":{"position":[[2718,1],[2720,1],[2864,1]]},"3936":{"position":[[1614,1],[1616,1]]},"3940":{"position":[[345,1]]},"3944":{"position":[[175,1],[257,1],[273,1]]},"3946":{"position":[[168,1],[249,1]]},"3948":{"position":[[201,1]]},"3960":{"position":[[185,1]]},"3962":{"position":[[1200,1]]},"3970":{"position":[[120,1]]},"3972":{"position":[[265,1],[267,1]]},"3980":{"position":[[16,1],[205,1],[389,1],[530,1]]},"3982":{"position":[[806,1]]},"3986":{"position":[[179,1]]},"3990":{"position":[[16,1],[266,1],[311,1],[626,1]]},"3992":{"position":[[1009,1]]},"3994":{"position":[[1275,1]]},"3996":{"position":[[365,1],[378,1]]},"4004":{"position":[[178,1],[180,1],[534,1]]}}}],["00",{"_index":830,"t":{"114":{"position":[[1393,2],[1396,2],[1399,2],[1402,2]]},"190":{"position":[[615,2],[838,2],[1056,2],[1287,2]]},"480":{"position":[[175,2],[224,2],[227,2],[273,2],[276,2],[279,2],[333,2],[336,2],[339,2],[388,2],[391,2],[394,2],[450,2],[453,2],[456,2],[555,2],[594,2],[597,2],[633,2],[636,2],[639,2],[683,2],[686,2],[689,2],[728,2],[731,2],[734,2],[780,2],[783,2],[786,2]]},"494":{"position":[[146,2],[185,2],[188,2],[224,2],[227,2],[230,2],[274,2],[277,2],[280,2],[319,2],[322,2],[325,2],[371,2],[374,2],[377,2]]},"2383":{"position":[[39,2],[42,2],[45,2],[134,2],[137,2],[140,2]]},"2420":{"position":[[239,2],[598,2],[1238,2],[1555,2],[1563,2],[1715,2],[1723,2],[1842,2],[1941,2],[1944,2],[1989,2],[1992,2],[2039,2],[2042,2],[2091,2],[2094,2],[2140,2],[2143,2],[2189,2],[2192,2],[2241,2],[2244,2]]},"3430":{"position":[[2478,2],[2591,2],[2722,2],[2852,2],[2973,2],[3079,2],[3818,2],[3929,2],[4042,2],[4154,2],[4273,2],[4377,2]]},"3432":{"position":[[2681,2],[2801,2],[2922,2],[3028,2],[5035,2],[5146,2],[5259,2],[5371,2],[5490,2],[5594,2]]},"3446":{"position":[[1868,2],[1871,2],[1874,2],[1877,2]]},"3452":{"position":[[2944,2],[2947,2],[2950,2],[2953,2]]},"3601":{"position":[[104,2],[217,2],[332,2],[446,2],[567,2],[673,2],[817,2],[824,2],[972,2],[979,2],[1117,2],[1124,2],[1268,2],[1275,2],[1424,2]]},"3762":{"position":[[560,2],[671,2],[782,2],[893,2],[988,2],[1003,2],[1061,2],[1114,2]]},"3764":{"position":[[169,2],[281,2],[394,2],[507,2],[620,2],[733,2]]},"3766":{"position":[[342,2],[448,2],[553,2],[658,2],[748,2],[763,2],[821,2],[857,2],[872,2],[930,2],[978,2],[1093,2],[1199,2],[1314,2],[1429,2],[1534,2],[1640,2]]},"3768":{"position":[[630,2],[740,2],[935,2],[1130,2],[1240,2],[1435,2],[1630,2],[1741,2],[1937,2],[2133,2],[2244,2],[2646,2],[2756,2],[2866,2],[2977,2],[3088,2]]},"3770":{"position":[[412,2],[676,2],[1216,2],[1809,2],[2058,2],[2102,2],[2672,2],[3463,2],[3762,2],[3899,2],[5084,2],[5411,2]]},"3772":{"position":[[594,2],[723,2],[870,2],[975,2],[1091,2],[1208,2],[1325,2],[1442,2],[1559,2],[1676,2],[1782,2],[1899,2],[2016,2]]},"3774":{"position":[[754,2],[845,2],[860,2],[917,2],[968,2],[1074,2],[1189,2],[1295,2],[1410,2],[1524,2],[1630,2]]},"3779":{"position":[[904,2],[1232,2]]},"3783":{"position":[[632,2],[752,2],[872,2],[993,2],[1114,2]]},"3785":{"position":[[357,2]]},"3802":{"position":[[961,2],[1017,2],[1253,2],[1582,2],[1634,2],[1850,2]]},"3806":{"position":[[448,2],[591,2],[734,2],[877,2],[1021,2],[1164,2],[1853,2],[1995,2],[2137,2],[2279,2],[2421,2],[2563,2],[3681,2],[3805,2]]},"3808":{"position":[[1115,2],[1233,2],[1336,2],[1351,2],[1421,2],[1457,2],[1472,2],[1542,2],[1593,2],[2336,2],[2460,2],[2584,2],[2708,2],[2832,2]]},"3812":{"position":[[367,2],[419,2],[635,2]]},"3817":{"position":[[876,2],[1172,2],[1228,2],[1464,2],[1908,2],[2174,2],[2226,2],[2442,2]]},"3821":{"position":[[385,2],[666,2],[718,2],[934,2]]},"3828":{"position":[[983,2],[1088,2],[1206,2]]},"3832":{"position":[[1046,2],[1152,2],[1272,2],[1392,2],[1512,2],[1632,2],[3226,2],[3332,2]]},"3842":{"position":[[303,2],[447,2],[933,2],[1077,2],[1498,2],[1642,2],[2088,2],[2232,2],[2729,2],[2873,2],[3346,2],[3490,2]]},"3844":{"position":[[309,2],[456,2],[579,2]]},"3846":{"position":[[549,2],[695,2],[818,2]]},"3850":{"position":[[135,2],[310,2]]},"3852":{"position":[[135,2],[254,2],[428,2]]},"3854":{"position":[[137,2],[256,2],[402,2]]},"3856":{"position":[[151,2]]},"3874":{"position":[[68,2],[243,2]]},"3876":{"position":[[68,2],[186,2],[360,2]]},"3896":{"position":[[310,2],[591,2],[643,2],[859,2]]},"3916":{"position":[[5940,2],[5943,2],[5946,2],[5949,2]]},"3928":{"position":[[2430,2],[2433,2],[2436,2],[2439,2]]},"3944":{"position":[[259,2],[262,2],[277,2]]}}}],["000",{"_index":3550,"t":{"771":{"position":[[20,3],[31,3],[44,3],[48,3]]},"1749":{"position":[[65,3],[69,3]]},"1753":{"position":[[140,3],[144,3]]},"1755":{"position":[[1163,3],[1167,3]]}}}],["000000",{"_index":1623,"t":{"220":{"position":[[425,6]]},"520":{"position":[[97,6],[214,6]]},"688":{"position":[[426,6]]},"901":{"position":[[97,6],[214,6]]},"1054":{"position":[[456,6]]},"1056":{"position":[[745,6]]},"1315":{"position":[[97,6],[214,6]]}}}],["0000000",{"_index":2652,"t":{"480":{"position":[[117,7],[507,7]]},"494":{"position":[[98,7]]},"3770":{"position":[[950,7],[996,7],[2387,7],[2435,7]]}}}],["0001",{"_index":827,"t":{"114":{"position":[[1379,4]]},"482":{"position":[[242,4]]},"2383":{"position":[[28,4],[123,4]]},"3446":{"position":[[1854,4]]},"3452":{"position":[[2930,4]]},"3916":{"position":[[5926,4]]},"3928":{"position":[[2416,4]]}}}],["0008851",{"_index":9008,"t":{"3852":{"position":[[123,7]]}}}],["0025",{"_index":1424,"t":{"190":{"position":[[1108,4]]}}}],["0038536",{"_index":8698,"t":{"3768":{"position":[[1618,7]]}}}],["0040306",{"_index":8709,"t":{"3768":{"position":[[2965,7]]}}}],["0064838",{"_index":8660,"t":{"3764":{"position":[[269,7]]}}}],["006d439",{"_index":9644,"t":{"3950":{"position":[[748,7]]}}}],["0070855",{"_index":8665,"t":{"3764":{"position":[[721,7]]}}}],["0071504",{"_index":8775,"t":{"3772":{"position":[[1196,7]]}}}],["0071986",{"_index":8654,"t":{"3762":{"position":[[881,7]]}}}],["0092455",{"_index":8783,"t":{"3772":{"position":[[2004,7]]}}}],["00933",{"_index":3728,"t":{"899":{"position":[[1766,5]]}}}],["0098096",{"_index":8995,"t":{"3844":{"position":[[297,7],[444,7],[567,7]]}}}],["0099629",{"_index":8692,"t":{"3768":{"position":[[923,7]]}}}],["01",{"_index":828,"t":{"114":{"position":[[1384,2]]},"397":{"position":[[50,2],[82,2]]},"399":{"position":[[12,2],[108,2],[360,2],[801,2]]},"401":{"position":[[218,2],[317,2]]},"2383":{"position":[[33,2],[36,2],[128,2],[131,2]]},"2420":{"position":[[1720,2]]},"3446":{"position":[[1859,2]]},"3452":{"position":[[2935,2]]},"3762":{"position":[[1099,2],[1172,2]]},"3774":{"position":[[953,2],[1026,2]]},"3802":{"position":[[1003,2],[1620,2]]},"3806":{"position":[[2548,2],[2633,2]]},"3817":{"position":[[1214,2],[2212,2]]},"3821":{"position":[[704,2]]},"3846":{"position":[[803,2]]},"3852":{"position":[[117,2],[203,2],[236,2],[410,2]]},"3896":{"position":[[629,2]]},"3916":{"position":[[446,2],[5931,2]]},"3926":{"position":[[27,2]]},"3928":{"position":[[2421,2]]},"3944":{"position":[[254,2]]}}}],["0100972",{"_index":8701,"t":{"3768":{"position":[[2121,7]]}}}],["0101172",{"_index":8697,"t":{"3768":{"position":[[1423,7]]}}}],["0103913",{"_index":8736,"t":{"3770":{"position":[[2047,7]]}}}],["0109612",{"_index":8755,"t":{"3770":{"position":[[2661,7]]}}}],["0110",{"_index":1432,"t":{"190":{"position":[[1221,4]]}}}],["0120379",{"_index":8653,"t":{"3762":{"position":[[770,7]]}}}],["0125960",{"_index":8652,"t":{"3762":{"position":[[659,7]]}}}],["0127992",{"_index":8789,"t":{"3774":{"position":[[1062,7]]}}}],["0128756",{"_index":8683,"t":{"3766":{"position":[[1302,7]]}}}],["0130555",{"_index":8707,"t":{"3768":{"position":[[2854,7]]}}}],["0131304",{"_index":9006,"t":{"3850":{"position":[[298,7]]}}}],["0140840",{"_index":8776,"t":{"3772":{"position":[[1313,7]]}}}],["0141479",{"_index":8792,"t":{"3774":{"position":[[1398,7]]}}}],["0142346",{"_index":8710,"t":{"3768":{"position":[[3076,7]]}}}],["0146251",{"_index":8774,"t":{"3772":{"position":[[1079,7]]}}}],["0149137",{"_index":8702,"t":{"3768":{"position":[[2232,7]]}}}],["0158085",{"_index":8699,"t":{"3768":{"position":[[1729,7]]}}}],["0159256",{"_index":8695,"t":{"3768":{"position":[[1228,7]]}}}],["0166669",{"_index":8647,"t":{"3762":{"position":[[548,7]]}}}],["0169836",{"_index":8682,"t":{"3766":{"position":[[1187,7]]}}}],["0171271",{"_index":8780,"t":{"3772":{"position":[[1770,7]]}}}],["0173240",{"_index":8777,"t":{"3772":{"position":[[1430,7]]}}}],["0175115",{"_index":8662,"t":{"3764":{"position":[[495,7]]}}}],["0183238",{"_index":8705,"t":{"3768":{"position":[[2744,7]]}}}],["0186243",{"_index":8661,"t":{"3764":{"position":[[382,7]]}}}],["0192847",{"_index":8694,"t":{"3768":{"position":[[1118,7]]}}}],["0196813",{"_index":8655,"t":{"3762":{"position":[[991,7]]}}}],["01t00",{"_index":829,"t":{"114":{"position":[[1387,5]]},"3446":{"position":[[1862,5]]},"3452":{"position":[[2938,5]]},"3916":{"position":[[5934,5]]},"3928":{"position":[[2424,5]]}}}],["02",{"_index":1376,"t":{"190":{"position":[[419,2]]},"2420":{"position":[[745,2],[811,2],[1425,2],[1441,2],[1444,2]]},"3430":{"position":[[3805,2],[3808,2],[3916,2],[3919,2],[4029,2],[4032,2],[4141,2],[4144,2],[4260,2],[4263,2],[4364,2],[4367,2]]},"3432":{"position":[[5022,2],[5025,2],[5133,2],[5136,2],[5246,2],[5249,2],[5358,2],[5361,2],[5477,2],[5480,2],[5581,2],[5584,2]]},"3768":{"position":[[2628,2],[2700,2],[2738,2],[2810,2],[2848,2],[2921,2],[2959,2],[3032,2],[3070,2],[3143,2]]},"3806":{"position":[[433,2],[518,2]]},"3916":{"position":[[372,2]]},"3920":{"position":[[150,2]]}}}],["0204c0a",{"_index":9633,"t":{"3950":{"position":[[213,7]]}}}],["0219493",{"_index":8787,"t":{"3774":{"position":[[848,7]]}}}],["023391b",{"_index":9046,"t":{"3910":{"position":[[567,7],[655,7]]}}}],["0238143",{"_index":8678,"t":{"3766":{"position":[[966,7]]}}}],["0247430",{"_index":8720,"t":{"3770":{"position":[[665,7]]}}}],["0249043",{"_index":8778,"t":{"3772":{"position":[[1547,7]]}}}],["0250214",{"_index":8733,"t":{"3770":{"position":[[1205,7]]}}}],["0253985",{"_index":8676,"t":{"3766":{"position":[[751,7]]}}}],["0276842",{"_index":8700,"t":{"3768":{"position":[[1925,7]]}}}],["0288486",{"_index":8782,"t":{"3772":{"position":[[1887,7]]}}}],["03",{"_index":2383,"t":{"399":{"position":[[7,2],[54,2]]},"2420":{"position":[[1243,2]]},"3766":{"position":[[963,2],[1036,2]]},"3774":{"position":[[1059,2],[1132,2]]},"3812":{"position":[[353,2],[621,2]]},"3842":{"position":[[288,2],[432,2],[918,2],[1062,2],[1483,2],[1627,2],[2073,2],[2217,2],[2714,2],[2858,2],[3331,2],[3475,2]]},"3912":{"position":[[487,2]]},"3916":{"position":[[298,2]]},"3920":{"position":[[76,2]]},"3944":{"position":[[251,2]]}}}],["0304982",{"_index":8664,"t":{"3764":{"position":[[608,7]]}}}],["0305799",{"_index":8656,"t":{"3762":{"position":[[1102,7]]}}}],["0318919",{"_index":8791,"t":{"3774":{"position":[[1283,7]]}}}],["0322409",{"_index":8688,"t":{"3768":{"position":[[728,7]]}}}],["0326",{"_index":1408,"t":{"190":{"position":[[885,4]]}}}],["0339177",{"_index":8658,"t":{"3764":{"position":[[157,7]]}}}],["0348",{"_index":1407,"t":{"190":{"position":[[875,4]]}}}],["0353681",{"_index":8891,"t":{"3808":{"position":[[1339,7]]}}}],["0359",{"_index":1411,"t":{"190":{"position":[[929,4]]}}}],["0372492",{"_index":8892,"t":{"3808":{"position":[[1460,7]]}}}],["04",{"_index":2388,"t":{"399":{"position":[[103,2],[155,2],[204,2],[254,2],[461,2]]},"771":{"position":[[136,2]]},"2420":{"position":[[754,2],[819,2]]},"3601":{"position":[[1417,2]]},"3806":{"position":[[576,2],[661,2]]},"3808":{"position":[[1578,2],[1663,2]]},"3854":{"position":[[119,2],[205,2],[238,2],[384,2]]},"3856":{"position":[[133,2]]}}}],["0427",{"_index":1412,"t":{"190":{"position":[[939,4]]}}}],["0441407",{"_index":8735,"t":{"3770":{"position":[[1797,7]]}}}],["0471107",{"_index":8798,"t":{"3779":{"position":[[893,7],[1221,7]]},"3817":{"position":[[865,7],[1897,7]]},"3821":{"position":[[374,7]]},"3896":{"position":[[299,7]]}}}],["0480946",{"_index":8713,"t":{"3770":{"position":[[400,7]]}}}],["049",{"_index":1422,"t":{"190":{"position":[[1089,3]]}}}],["05",{"_index":2386,"t":{"399":{"position":[[59,2],[306,2]]},"401":{"position":[[7,2]]},"606":{"position":[[1040,2]]},"1969":{"position":[[15,2]]},"2420":{"position":[[1790,2],[1891,2]]},"3766":{"position":[[1078,2],[1151,2]]},"3918":{"position":[[742,2]]}}}],["0503546",{"_index":8737,"t":{"3770":{"position":[[2090,7]]}}}],["0550205",{"_index":8779,"t":{"3772":{"position":[[1664,7]]}}}],["0552",{"_index":1404,"t":{"190":{"position":[[818,4]]}}}],["0559602",{"_index":8704,"t":{"3768":{"position":[[2634,7]]}}}],["06",{"_index":446,"t":{"57":{"position":[[7,2]]},"397":{"position":[[7,2]]},"399":{"position":[[160,2],[355,2],[407,2]]},"401":{"position":[[56,2],[108,2]]},"2420":{"position":[[802,2],[1839,2]]},"2929":{"position":[[559,2],[730,2]]},"2945":{"position":[[559,2],[787,2]]},"2959":{"position":[[559,2],[756,2]]},"3774":{"position":[[1174,2],[1247,2]]},"3806":{"position":[[719,2],[804,2]]},"3916":{"position":[[224,2]]}}}],["0618",{"_index":9055,"t":{"3910":{"position":[[2140,4]]},"3912":{"position":[[1842,4]]}}}],["063a034",{"_index":9319,"t":{"3924":{"position":[[51,8],[634,8]]}}}],["0665m",{"_index":8403,"t":{"3601":{"position":[[1232,6]]}}}],["0678",{"_index":1415,"t":{"190":{"position":[[977,4]]}}}],["07",{"_index":451,"t":{"68":{"position":[[7,2]]},"160":{"position":[[9,2]]},"399":{"position":[[456,2],[504,2],[546,2],[614,2]]},"401":{"position":[[147,2]]},"2929":{"position":[[568,2]]},"2945":{"position":[[568,2]]},"2959":{"position":[[568,2]]},"3432":{"position":[[2655,2],[2775,2],[2896,2],[3002,2]]},"3766":{"position":[[1184,2],[1257,2]]},"3774":{"position":[[1280,2],[1353,2]]},"3806":{"position":[[3666,2],[3751,2]]},"3918":{"position":[[668,2]]}}}],["0726721",{"_index":9013,"t":{"3854":{"position":[[244,7]]},"3856":{"position":[[139,7]]}}}],["0737",{"_index":1405,"t":{"190":{"position":[[828,4]]}}}],["0745",{"_index":1392,"t":{"190":{"position":[[665,4]]}}}],["0753",{"_index":1416,"t":{"190":{"position":[[987,4]]}}}],["0796",{"_index":1391,"t":{"190":{"position":[[655,4]]}}}],["0797010",{"_index":9014,"t":{"3854":{"position":[[390,7]]}}}],["08",{"_index":376,"t":{"44":{"position":[[7,2]]},"399":{"position":[[660,2],[700,2],[747,2]]},"401":{"position":[[213,2],[265,2]]},"877":{"position":[[1434,2],[1530,2],[1638,2],[1746,2],[1854,2]]},"2633":{"position":[[28,2]]},"3430":{"position":[[2475,2],[2588,2],[2719,2],[2849,2],[2970,2],[3076,2],[3815,2],[3926,2],[4039,2],[4151,2],[4270,2],[4374,2]]},"3432":{"position":[[2678,2],[2798,2],[2919,2],[3025,2],[5032,2],[5143,2],[5256,2],[5368,2],[5487,2],[5591,2]]},"3601":{"position":[[101,2],[214,2],[329,2],[443,2],[564,2],[670,2],[821,2],[976,2],[1121,2],[1272,2],[1421,2]]},"3762":{"position":[[557,2],[668,2],[779,2],[890,2],[1000,2],[1111,2]]},"3764":{"position":[[166,2],[278,2],[391,2],[504,2],[617,2],[730,2]]},"3766":{"position":[[339,2],[445,2],[550,2],[655,2],[760,2],[869,2],[975,2],[1090,2],[1196,2],[1299,2],[1311,2],[1372,2],[1426,2],[1531,2],[1637,2]]},"3768":{"position":[[627,2],[737,2],[932,2],[1127,2],[1237,2],[1432,2],[1627,2],[1738,2],[1934,2],[2130,2],[2241,2],[2643,2],[2753,2],[2863,2],[2974,2],[3085,2]]},"3770":{"position":[[409,2],[673,2],[1213,2],[1806,2],[2055,2],[2099,2],[2669,2],[3460,2],[3759,2],[3896,2],[5081,2],[5408,2]]},"3772":{"position":[[591,2],[720,2],[867,2],[972,2],[1088,2],[1205,2],[1322,2],[1439,2],[1556,2],[1673,2],[1779,2],[1896,2],[2013,2]]},"3774":{"position":[[751,2],[857,2],[965,2],[1071,2],[1186,2],[1292,2],[1395,2],[1407,2],[1467,2],[1521,2],[1627,2]]},"3779":{"position":[[901,2],[1229,2]]},"3783":{"position":[[629,2],[749,2],[869,2],[990,2],[1111,2]]},"3785":{"position":[[354,2]]},"3802":{"position":[[958,2],[1014,2],[1250,2],[1579,2],[1631,2],[1847,2]]},"3806":{"position":[[445,2],[588,2],[731,2],[862,2],[874,2],[948,2],[1018,2],[1161,2],[1850,2],[1992,2],[2134,2],[2276,2],[2418,2],[2560,2],[3678,2],[3802,2]]},"3808":{"position":[[1112,2],[1230,2],[1348,2],[1469,2],[1590,2],[2333,2],[2457,2],[2581,2],[2705,2],[2829,2]]},"3812":{"position":[[364,2],[405,2],[416,2],[632,2]]},"3817":{"position":[[873,2],[1169,2],[1225,2],[1461,2],[1905,2],[2171,2],[2223,2],[2439,2]]},"3821":{"position":[[382,2],[663,2],[715,2],[931,2]]},"3828":{"position":[[980,2],[1085,2],[1203,2]]},"3832":{"position":[[1043,2],[1149,2],[1269,2],[1389,2],[1509,2],[1629,2],[3223,2],[3329,2]]},"3842":{"position":[[300,2],[444,2],[930,2],[1074,2],[1495,2],[1639,2],[2085,2],[2229,2],[2726,2],[2870,2],[3343,2],[3487,2]]},"3844":{"position":[[306,2],[453,2],[576,2]]},"3846":{"position":[[546,2],[692,2],[815,2]]},"3850":{"position":[[132,2],[307,2]]},"3852":{"position":[[132,2],[251,2],[425,2]]},"3854":{"position":[[134,2],[253,2],[399,2]]},"3856":{"position":[[148,2]]},"3874":{"position":[[65,2],[240,2]]},"3876":{"position":[[65,2],[183,2],[357,2]]},"3896":{"position":[[307,2],[588,2],[640,2],[856,2]]},"3912":{"position":[[28,2],[339,2],[413,2]]},"3916":{"position":[[150,2]]},"3918":{"position":[[594,2]]},"3934":{"position":[[2618,2]]}}}],["0811",{"_index":1395,"t":{"190":{"position":[[712,4]]}}}],["0823563",{"_index":8897,"t":{"3808":{"position":[[2448,7]]}}}],["0834925",{"_index":8771,"t":{"3772":{"position":[[858,7]]}}}],["0853e74",{"_index":9636,"t":{"3950":{"position":[[371,7]]}}}],["0898900",{"_index":8687,"t":{"3768":{"position":[[618,7]]}}}],["08a44c3",{"_index":9265,"t":{"3920":{"position":[[555,7]]}}}],["09",{"_index":2367,"t":{"397":{"position":[[45,2]]},"399":{"position":[[796,2],[832,2]]},"401":{"position":[[312,2],[343,2]]},"889":{"position":[[616,2],[662,2]]},"977":{"position":[[36,2],[80,2]]},"2420":{"position":[[859,2]]},"3430":{"position":[[2452,2],[2565,2],[2696,2],[2826,2],[2947,2],[3053,2],[3799,2],[3910,2],[4023,2],[4135,2],[4254,2],[4358,2]]},"3432":{"position":[[5016,2],[5127,2],[5240,2],[5352,2],[5471,2],[5575,2]]},"3770":{"position":[[5069,2],[5335,2],[5396,2],[5717,2],[5943,2]]},"3846":{"position":[[528,2],[674,2],[797,2]]},"3916":{"position":[[76,2],[517,2],[591,2],[665,2]]},"3918":{"position":[[73,2],[147,2],[221,2],[295,2],[369,2],[443,2],[517,2],[591,2],[665,2],[739,2]]},"3920":{"position":[[73,2],[147,2]]},"3926":{"position":[[22,2],[365,2]]}}}],["091",{"_index":1394,"t":{"190":{"position":[[703,3]]}}}],["0910993",{"_index":8898,"t":{"3808":{"position":[[2572,7]]}}}],["0911692",{"_index":8772,"t":{"3772":{"position":[[963,7]]}}}],["0933295",{"_index":8896,"t":{"3808":{"position":[[2324,7]]}}}],["0937955",{"_index":8899,"t":{"3808":{"position":[[2696,7]]}}}],["0b645fe",{"_index":9224,"t":{"3918":{"position":[[1274,7]]}}}],["0c0752",{"_index":9616,"t":{"3948":{"position":[[276,6]]}}}],["0f42",{"_index":7270,"t":{"2929":{"position":[[626,4]]},"2945":{"position":[[683,4]]},"2959":{"position":[[652,4]]}}}],["0ff3ac0",{"_index":9085,"t":{"3912":{"position":[[1862,7]]}}}],["0m",{"_index":3177,"t":{"606":{"position":[[807,2]]}}}],["0mb",{"_index":6883,"t":{"2749":{"position":[[632,3]]},"3080":{"position":[[1200,3]]}}}],["0s",{"_index":6880,"t":{"2749":{"position":[[606,2]]},"3080":{"position":[[1174,2]]}}}],["1",{"_index":409,"t":{"48":{"position":[[162,1]]},"68":{"position":[[85,1]]},"72":{"position":[[162,1]]},"77":{"position":[[17,1],[48,1],[134,1]]},"100":{"position":[[55,1]]},"114":{"position":[[569,1],[590,1],[957,1]]},"121":{"position":[[698,1],[717,1]]},"152":{"position":[[328,1],[602,1]]},"190":{"position":[[147,1],[409,1],[613,1],[782,1],[836,1],[864,1],[918,1],[995,1],[1034,1],[1054,1],[1106,1],[1229,1],[1285,1],[1450,1]]},"259":{"position":[[21,1]]},"278":{"position":[[254,1]]},"284":{"position":[[253,1]]},"292":{"position":[[39,1]]},"314":{"position":[[184,1]]},"327":{"position":[[21,1]]},"397":{"position":[[193,1]]},"419":{"position":[[393,1]]},"423":{"position":[[233,1]]},"433":{"position":[[45,1]]},"441":{"position":[[144,1]]},"445":{"position":[[392,1],[976,1],[985,1]]},"455":{"position":[[218,1],[227,1]]},"480":{"position":[[329,1],[442,1],[446,1],[679,1],[772,1],[776,1]]},"482":{"position":[[146,1],[173,1]]},"488":{"position":[[13,1]]},"494":{"position":[[270,1],[363,1],[367,1]]},"520":{"position":[[362,1],[465,1]]},"528":{"position":[[540,1]]},"550":{"position":[[435,1],[440,1],[549,1]]},"552":{"position":[[114,1]]},"593":{"position":[[62,1]]},"659":{"position":[[24,1]]},"713":{"position":[[67,1],[437,1]]},"717":{"position":[[39,1]]},"734":{"position":[[115,1],[7391,1]]},"739":{"position":[[14,1],[16,1]]},"771":{"position":[[42,1]]},"783":{"position":[[43,1],[66,1],[124,1],[158,1]]},"785":{"position":[[46,1],[72,1],[133,1],[170,1]]},"787":{"position":[[49,1],[78,1],[142,1],[182,1]]},"789":{"position":[[52,1],[84,1],[151,1],[194,1]]},"795":{"position":[[126,1],[162,1],[410,1],[457,1]]},"820":{"position":[[71,1]]},"824":{"position":[[57,1],[235,1]]},"834":{"position":[[69,1],[213,1]]},"836":{"position":[[224,1]]},"877":{"position":[[1398,1],[1583,1],[1907,1],[2333,1]]},"881":{"position":[[84,1]]},"883":{"position":[[322,1]]},"885":{"position":[[135,1]]},"901":{"position":[[390,1],[493,1]]},"954":{"position":[[54,1],[103,1],[152,1],[221,1],[281,1],[341,1],[383,1]]},"962":{"position":[[153,1],[336,1]]},"1010":{"position":[[23,1]]},"1062":{"position":[[29,1],[126,1]]},"1066":{"position":[[13,1],[354,1]]},"1071":{"position":[[34,1]]},"1145":{"position":[[396,1]]},"1147":{"position":[[287,1]]},"1151":{"position":[[365,1]]},"1160":{"position":[[382,1],[554,1],[1294,1],[1482,1]]},"1162":{"position":[[398,1],[584,1],[1358,1],[1560,1]]},"1164":{"position":[[230,1],[400,1],[657,1],[838,1]]},"1166":{"position":[[286,1],[523,1],[836,1],[1084,1]]},"1168":{"position":[[98,1],[191,1],[280,1],[394,1],[498,1],[598,1]]},"1170":{"position":[[400,1],[497,1],[929,1],[1037,1]]},"1173":{"position":[[137,1],[205,1],[379,1],[458,1]]},"1175":{"position":[[149,1],[223,1],[409,1],[494,1]]},"1177":{"position":[[137,1],[205,1],[379,1],[458,1]]},"1179":{"position":[[172,1],[281,1],[426,1],[635,1],[755,1],[911,1]]},"1181":{"position":[[78,1],[151,1],[254,1],[367,1],[451,1],[565,1]]},"1183":{"position":[[151,1],[254,1],[336,1],[514,1],[628,1],[721,1]]},"1185":{"position":[[801,1],[899,1],[1059,1],[1186,1],[1295,1],[1466,1]]},"1188":{"position":[[125,1],[250,1],[402,1],[549,1]]},"1190":{"position":[[131,1],[261,1],[419,1],[571,1]]},"1238":{"position":[[821,1]]},"1240":{"position":[[905,1]]},"1246":{"position":[[23,1]]},"1265":{"position":[[23,1]]},"1269":{"position":[[5,1]]},"1279":{"position":[[543,1],[602,1],[778,1]]},"1286":{"position":[[233,1]]},"1295":{"position":[[75,1],[143,1]]},"1302":{"position":[[154,1]]},"1315":{"position":[[390,1],[493,1]]},"1379":{"position":[[360,1]]},"1412":{"position":[[143,1]]},"1420":{"position":[[357,1]]},"1483":{"position":[[89,1],[667,1]]},"1488":{"position":[[908,1],[1090,1]]},"1495":{"position":[[852,1]]},"1499":{"position":[[46,1],[482,1]]},"1516":{"position":[[69,1]]},"1520":{"position":[[223,1],[308,1]]},"1528":{"position":[[7,1],[40,1]]},"1535":{"position":[[173,1]]},"1549":{"position":[[172,1]]},"1551":{"position":[[334,1]]},"1555":{"position":[[703,1]]},"1566":{"position":[[560,1]]},"1592":{"position":[[215,1],[229,1],[231,1]]},"1594":{"position":[[268,1],[290,1],[292,1]]},"1613":{"position":[[202,1]]},"1615":{"position":[[241,1]]},"1617":{"position":[[284,1],[526,1],[803,1],[1069,1]]},"1619":{"position":[[407,1]]},"1621":{"position":[[329,1],[653,1],[926,1]]},"1627":{"position":[[215,1]]},"1635":{"position":[[451,1]]},"1641":{"position":[[570,1]]},"1655":{"position":[[150,1],[231,1],[233,1],[272,1],[274,1]]},"1661":{"position":[[665,1]]},"1691":{"position":[[101,1]]},"1755":{"position":[[95,1]]},"1795":{"position":[[999,1],[1101,1],[1764,1],[2675,1]]},"1801":{"position":[[77,1]]},"1803":{"position":[[0,1],[67,1],[1539,1]]},"1819":{"position":[[23,1]]},"1841":{"position":[[92,1]]},"1855":{"position":[[245,1],[330,1]]},"1865":{"position":[[138,1],[223,1]]},"1869":{"position":[[165,1]]},"1873":{"position":[[83,1],[323,1]]},"1875":{"position":[[324,1],[367,1],[415,1],[458,1],[517,1]]},"1887":{"position":[[23,1]]},"1933":{"position":[[634,1]]},"1941":{"position":[[880,1]]},"2067":{"position":[[19,1]]},"2077":{"position":[[18,1]]},"2098":{"position":[[23,1]]},"2132":{"position":[[97,1],[201,1],[331,1],[450,1]]},"2165":{"position":[[55,1],[119,1]]},"2169":{"position":[[23,1]]},"2261":{"position":[[460,1]]},"2311":{"position":[[23,1]]},"2319":{"position":[[194,1]]},"2335":{"position":[[14,1]]},"2339":{"position":[[19,1]]},"2350":{"position":[[70,1]]},"2352":{"position":[[48,1]]},"2354":{"position":[[173,1]]},"2385":{"position":[[123,1]]},"2418":{"position":[[72,1],[356,1],[411,1],[458,1],[477,1],[577,1]]},"2420":{"position":[[52,1],[90,1],[178,1],[502,1],[854,1],[970,1],[1021,1],[1073,1],[1129,1],[1397,1],[1828,1],[1830,1],[1877,1],[1973,1],[2221,1],[2227,1],[2229,1]]},"2424":{"position":[[268,1],[302,1],[304,1],[311,1],[315,1],[339,1],[341,1],[348,1],[352,1]]},"2438":{"position":[[90,1]]},"2486":{"position":[[580,1],[834,1]]},"2488":{"position":[[42,1],[64,1]]},"2571":{"position":[[98,1]]},"2684":{"position":[[65,1]]},"2688":{"position":[[29,1]]},"2703":{"position":[[123,1]]},"2707":{"position":[[45,1]]},"2723":{"position":[[68,1],[77,1]]},"2727":{"position":[[670,1]]},"2735":{"position":[[153,1]]},"2749":{"position":[[170,1]]},"2805":{"position":[[457,1]]},"2823":{"position":[[13,1]]},"2848":{"position":[[1197,1]]},"2856":{"position":[[508,1],[546,1],[579,1],[893,1],[1103,1],[1363,1],[1394,1],[1426,1],[1671,1],[1686,1],[1909,1],[2048,1]]},"2881":{"position":[[360,1]]},"2985":{"position":[[296,1],[305,1]]},"3003":{"position":[[301,1]]},"3015":{"position":[[95,1]]},"3017":{"position":[[69,1]]},"3023":{"position":[[662,1]]},"3063":{"position":[[1632,1]]},"3080":{"position":[[738,1]]},"3094":{"position":[[82,1]]},"3102":{"position":[[15,1],[28,1]]},"3110":{"position":[[33,1]]},"3215":{"position":[[643,1]]},"3218":{"position":[[188,1]]},"3220":{"position":[[16,1]]},"3224":{"position":[[290,1],[344,1],[363,1],[413,1],[500,1],[551,1],[939,1],[949,1],[1065,1],[1276,1],[1313,1],[1380,1],[1425,1],[1567,1]]},"3226":{"position":[[239,1],[371,1],[532,1],[555,1]]},"3234":{"position":[[622,1],[652,1]]},"3246":{"position":[[15,1]]},"3254":{"position":[[373,1],[445,1],[926,1]]},"3258":{"position":[[113,1],[130,1],[409,1],[500,1]]},"3261":{"position":[[179,1],[457,1]]},"3265":{"position":[[16,1]]},"3267":{"position":[[218,1]]},"3271":{"position":[[80,1],[140,1],[217,1]]},"3273":{"position":[[80,1],[237,1],[365,1]]},"3360":{"position":[[108,1],[112,1]]},"3375":{"position":[[124,1]]},"3381":{"position":[[275,1]]},"3389":{"position":[[1344,1],[1406,1]]},"3391":{"position":[[799,1],[861,1],[962,1]]},"3393":{"position":[[1217,1],[1279,1],[1380,1],[1483,1]]},"3416":{"position":[[143,1]]},"3424":{"position":[[23,1]]},"3430":{"position":[[2516,1],[2642,1],[2773,1],[2886,1],[3007,1],[3113,1],[3671,1],[3861,1],[3969,1],[4082,1],[4193,1],[4312,1],[4416,1]]},"3432":{"position":[[1907,1],[4874,1],[5078,1],[5186,1],[5299,1],[5410,1],[5529,1],[5633,1]]},"3444":{"position":[[13,1]]},"3446":{"position":[[1044,1],[1065,1],[1432,1]]},"3452":{"position":[[1308,1],[1333,1],[2086,1],[2628,1],[3715,1]]},"3456":{"position":[[23,1]]},"3464":{"position":[[508,1]]},"3474":{"position":[[19,1]]},"3492":{"position":[[126,1],[181,1],[281,1]]},"3496":{"position":[[96,1],[195,1],[306,1],[424,1]]},"3500":{"position":[[76,1],[181,1],[310,1],[505,1]]},"3541":{"position":[[788,1]]},"3549":{"position":[[130,1]]},"3601":{"position":[[149,1],[259,1],[374,1],[487,1],[608,1],[714,1]]},"3640":{"position":[[124,1],[609,1]]},"3664":{"position":[[435,1]]},"3700":{"position":[[21,1]]},"3706":{"position":[[1643,1]]},"3738":{"position":[[163,1],[203,1]]},"3740":{"position":[[291,1],[331,1]]},"3748":{"position":[[200,1],[277,1]]},"3770":{"position":[[1022,1],[2463,1],[4271,1],[4409,1],[5771,1]]},"3783":{"position":[[423,1],[832,1]]},"3785":{"position":[[1033,1],[1293,1]]},"3800":{"position":[[103,1]]},"3802":{"position":[[1041,1],[1655,1]]},"3804":{"position":[[911,1],[1039,1],[1041,1]]},"3808":{"position":[[347,1],[402,1],[406,1]]},"3810":{"position":[[588,1],[742,1],[818,1]]},"3812":{"position":[[440,1],[1552,1],[1573,1],[2044,1],[2182,1],[2716,1]]},"3817":{"position":[[252,1],[1252,1],[2247,1]]},"3821":{"position":[[739,1]]},"3832":{"position":[[2254,1],[2507,1],[3005,1],[4015,1],[4268,1],[4766,1]]},"3896":{"position":[[664,1]]},"3908":{"position":[[110,1],[149,1],[183,1],[217,1],[243,1],[288,1]]},"3912":{"position":[[569,1],[843,1],[2505,1]]},"3914":{"position":[[602,1],[868,1],[901,1],[951,1],[2674,1]]},"3916":{"position":[[528,1],[755,1],[810,1],[848,1],[2508,1],[2567,1],[2635,1],[4304,1],[4329,1],[5082,1],[5624,1],[6711,1]]},"3918":{"position":[[602,1]]},"3920":{"position":[[1861,1]]},"3924":{"position":[[3493,1],[3667,1],[3669,1],[4046,1]]},"3928":{"position":[[1606,1],[1627,1],[1994,1]]},"3934":{"position":[[1941,1],[1972,1],[2006,1],[2040,1],[2732,1]]},"3936":{"position":[[1612,1]]},"3938":{"position":[[535,1]]},"3980":{"position":[[384,1],[666,1]]},"3996":{"position":[[380,1]]}}}],["10",{"_index":82,"t":{"5":{"position":[[14,2]]},"7":{"position":[[10,2]]},"114":{"position":[[439,2]]},"190":{"position":[[52,2]]},"212":{"position":[[219,2]]},"397":{"position":[[77,2],[124,2]]},"401":{"position":[[393,2]]},"597":{"position":[[131,2],[162,2]]},"599":{"position":[[161,2],[192,2]]},"615":{"position":[[406,2],[445,2]]},"639":{"position":[[295,2]]},"771":{"position":[[76,2]]},"791":{"position":[[22,2]]},"853":{"position":[[308,2],[609,2]]},"868":{"position":[[47,2],[96,2]]},"881":{"position":[[97,2]]},"883":{"position":[[336,2]]},"889":{"position":[[718,2]]},"897":{"position":[[409,2]]},"960":{"position":[[50,2],[105,2],[165,2],[233,2],[324,2],[381,2],[484,2],[595,2],[912,2],[1197,2],[1253,2],[1506,2],[1571,2]]},"962":{"position":[[68,2],[137,2],[156,2],[235,2],[315,2],[339,2]]},"965":{"position":[[107,2],[227,2],[283,2],[423,2],[565,2],[627,2]]},"967":{"position":[[105,2],[167,2],[285,2],[425,2],[498,2],[633,2]]},"969":{"position":[[270,2],[611,2]]},"971":{"position":[[270,2],[611,2]]},"977":{"position":[[39,2],[83,2]]},"1125":{"position":[[285,2],[342,2]]},"1160":{"position":[[111,2],[163,2],[384,2],[647,2],[730,2],[867,2],[1001,2],[1058,2],[1296,2],[1586,2],[1680,2],[1828,2]]},"1162":{"position":[[115,2],[175,2],[400,2],[683,2],[772,2],[915,2],[1053,2],[1118,2],[1360,2],[1670,2],[1770,2],[1924,2]]},"1170":{"position":[[473,2],[1008,2]]},"1185":{"position":[[211,2],[268,2]]},"1194":{"position":[[222,2],[407,2]]},"1238":{"position":[[207,2],[382,2]]},"1240":{"position":[[207,2],[403,2]]},"1302":{"position":[[185,2],[254,2]]},"1309":{"position":[[573,2]]},"1366":{"position":[[72,2]]},"1483":{"position":[[992,2]]},"1511":{"position":[[390,2],[421,2],[453,2],[500,2],[1021,2],[1322,2],[1360,2],[1415,2],[1504,2],[2059,2],[2185,2],[2229,2],[2352,2],[2488,2],[2627,2],[2814,2],[2865,2],[2953,2],[2997,2],[3265,2],[3292,2],[3440,2],[3540,2],[3578,2],[3776,2],[4198,2]]},"1633":{"position":[[174,2],[241,2]]},"1635":{"position":[[78,2],[92,2],[140,2],[470,2],[505,2],[522,2],[557,2],[579,2]]},"1795":{"position":[[971,2],[1301,2]]},"1815":{"position":[[23,2]]},"1909":{"position":[[1158,2]]},"2057":{"position":[[154,2]]},"2208":{"position":[[210,2]]},"2290":{"position":[[10,2]]},"2298":{"position":[[45,2],[90,2],[184,2]]},"2404":{"position":[[130,2]]},"2420":{"position":[[400,2],[413,2],[580,2],[606,2],[1478,2],[1498,2],[1531,2],[1540,2],[1552,2],[1575,2],[1680,2],[1712,2],[1763,2],[1783,2]]},"2440":{"position":[[91,2]]},"2448":{"position":[[210,2]]},"2472":{"position":[[391,2]]},"2846":{"position":[[174,2]]},"2848":{"position":[[247,2]]},"2929":{"position":[[556,2],[727,2]]},"2945":{"position":[[556,2],[784,2]]},"2959":{"position":[[556,2],[753,2]]},"3261":{"position":[[59,2],[102,2]]},"3446":{"position":[[914,2]]},"3452":{"position":[[1571,2],[3861,2]]},"3456":{"position":[[310,2]]},"3466":{"position":[[173,2],[339,2]]},"3549":{"position":[[132,2],[165,2]]},"3601":{"position":[[85,2],[198,2],[313,2],[427,2],[548,2],[654,2],[805,2],[960,2],[1105,2],[1256,2],[1405,2]]},"3664":{"position":[[202,2]]},"3750":{"position":[[400,2],[439,2]]},"3766":{"position":[[1414,2],[1486,2]]},"3770":{"position":[[5752,2]]},"3774":{"position":[[733,2],[806,2],[839,2],[911,2],[947,2],[1020,2],[1053,2],[1126,2],[1168,2],[1241,2],[1274,2],[1347,2],[1389,2],[1461,2],[1503,2],[1576,2],[1609,2],[1682,2]]},"3800":{"position":[[320,2]]},"3806":{"position":[[1006,2],[1091,2],[3790,2],[3875,2]]},"3808":{"position":[[1097,2],[1182,2],[1215,2],[1300,2]]},"3832":{"position":[[990,2],[1028,2],[1134,2],[1220,2],[1254,2],[1340,2],[1374,2],[1460,2],[1494,2],[1580,2],[1614,2],[3208,2],[3314,2]]},"3842":{"position":[[755,2],[872,2],[1342,2],[1437,2],[1924,2],[2027,2],[2546,2],[2668,2],[3171,2],[3285,2]]},"3850":{"position":[[114,2],[289,2]]},"3852":{"position":[[167,2]]},"3912":{"position":[[265,2],[558,2],[632,2],[706,2]]},"3914":{"position":[[73,2],[147,2],[221,2],[295,2],[369,2],[443,2],[517,2],[591,2],[665,2],[739,2],[742,2],[1213,2],[1741,2],[1873,2],[2021,2]]},"3916":{"position":[[73,2],[147,2],[221,2],[295,2],[369,2],[443,2],[4567,2],[6857,2]]},"3924":{"position":[[4599,2],[4735,2]]},"3928":{"position":[[1476,2]]},"3934":{"position":[[2880,2],[2948,2]]}}}],["100",{"_index":1906,"t":{"270":{"position":[[181,3]]},"272":{"position":[[53,3],[153,3]]},"274":{"position":[[53,3],[224,3]]},"276":{"position":[[53,3]]},"278":{"position":[[53,3]]},"280":{"position":[[53,3]]},"282":{"position":[[53,3],[381,3]]},"288":{"position":[[53,3],[197,3]]},"290":{"position":[[53,3]]},"399":{"position":[[730,3]]},"587":{"position":[[1753,3]]},"713":{"position":[[608,3]]},"734":{"position":[[616,3]]},"756":{"position":[[20,3]]},"769":{"position":[[232,3]]},"771":{"position":[[16,3],[27,3]]},"1192":{"position":[[51,3]]},"1483":{"position":[[386,3]]},"1511":{"position":[[222,3],[267,3],[343,3],[370,3],[712,3],[727,3],[776,3],[798,3],[900,3],[1068,3],[1209,3],[1248,3],[1279,3],[1643,3],[1746,3],[1805,3],[1965,3],[1991,3],[2038,3],[2087,3],[2274,3],[2387,3],[2466,3],[2524,3],[2976,3],[3114,3],[3231,3],[3377,3],[3406,3],[3916,3],[3986,3],[4056,3],[4088,3]]},"1749":{"position":[[61,3]]},"1753":{"position":[[136,3]]},"1755":{"position":[[1159,3]]},"2313":{"position":[[622,3]]},"2404":{"position":[[178,3]]},"2725":{"position":[[528,3],[1461,3],[2078,3]]},"2727":{"position":[[498,3]]},"2856":{"position":[[1011,3]]},"2895":{"position":[[29,3]]},"3466":{"position":[[1412,3]]},"3575":{"position":[[578,3]]},"3577":{"position":[[25,3]]},"3601":{"position":[[884,3],[1038,3],[1484,3]]},"3810":{"position":[[778,3],[856,3]]},"3914":{"position":[[2160,3]]},"3924":{"position":[[2756,3]]}}}],["1000",{"_index":1386,"t":{"190":{"position":[[579,4],[639,4],[696,4],[747,4],[802,4],[859,4],[913,4],[961,4]]},"397":{"position":[[151,4]]},"1281":{"position":[[9,4]]},"1511":{"position":[[1187,4],[1665,4],[2703,4],[3205,4]]},"1795":{"position":[[1418,4]]},"1809":{"position":[[386,4]]},"1861":{"position":[[79,4],[147,4],[192,4]]},"1863":{"position":[[14,4],[126,4],[166,4],[212,4],[314,4]]},"1961":{"position":[[268,4],[422,4]]},"2195":{"position":[[14,4],[35,4]]},"2197":{"position":[[14,4],[66,4]]},"2199":{"position":[[99,4],[167,4],[212,4]]},"2201":{"position":[[43,4]]},"2226":{"position":[[34,4]]},"2311":{"position":[[406,4]]},"2315":{"position":[[414,4]]},"2404":{"position":[[133,4]]},"2409":{"position":[[25,4]]},"2411":{"position":[[13,4]]},"2413":{"position":[[13,4]]},"2438":{"position":[[61,4]]},"2442":{"position":[[274,4],[1008,4],[1281,4],[1771,4]]},"2468":{"position":[[13,4]]},"2470":{"position":[[11,4]]},"2472":{"position":[[72,4]]},"2476":{"position":[[13,4]]},"2478":{"position":[[11,4]]},"2482":{"position":[[135,4]]},"2805":{"position":[[478,4]]},"2813":{"position":[[652,4]]},"2817":{"position":[[931,4]]},"2825":{"position":[[135,4]]},"3100":{"position":[[68,4],[86,4]]},"3110":{"position":[[35,4],[50,4]]},"3528":{"position":[[89,4]]},"3567":{"position":[[46,4],[155,4]]},"3770":{"position":[[1125,4],[2576,4],[4389,4],[5869,4]]},"3798":{"position":[[594,4]]},"3802":{"position":[[1154,4],[1758,4]]},"3808":{"position":[[3191,4]]},"3810":{"position":[[926,4]]},"3812":{"position":[[543,4],[1567,4],[2162,4],[2814,4]]},"3817":{"position":[[1365,4],[2350,4]]},"3821":{"position":[[842,4]]},"3832":{"position":[[367,4]]},"3896":{"position":[[767,4]]}}}],["10000",{"_index":1335,"t":{"188":{"position":[[242,5]]},"190":{"position":[[1018,5],[1080,5],[1139,5],[1192,5],[1249,5],[1308,5],[1364,5],[1414,5]]},"1511":{"position":[[2749,5]]}}}],["10000m",{"_index":8958,"t":{"3832":{"position":[[1226,7],[1346,7],[1466,7],[1586,7],[1724,7],[3537,7]]}}}],["1000k",{"_index":7592,"t":{"3209":{"position":[[49,5]]}}}],["1000m",{"_index":8320,"t":{"3528":{"position":[[129,6]]},"3567":{"position":[[251,6]]}}}],["10061470",{"_index":7930,"t":{"3331":{"position":[[128,8]]}}}],["100_000_000",{"_index":5407,"t":{"1749":{"position":[[61,11]]},"1753":{"position":[[136,11]]},"1755":{"position":[[1159,11]]}}}],["101",{"_index":4800,"t":{"1511":{"position":[[2656,3]]},"3601":{"position":[[1183,3],[1335,3]]}}}],["1010",{"_index":5678,"t":{"1819":{"position":[[1087,4]]}}}],["10205495",{"_index":7928,"t":{"3331":{"position":[[76,8]]}}}],["1024",{"_index":5378,"t":{"1741":{"position":[[382,4],[1264,4]]},"3432":{"position":[[577,4]]}}}],["103",{"_index":789,"t":{"114":{"position":[[503,3],[536,3]]},"3446":{"position":[[978,3],[1011,3]]},"3928":{"position":[[1540,3],[1573,3]]}}}],["1034905",{"_index":8900,"t":{"3808":{"position":[[2820,7]]}}}],["103776077",{"_index":7891,"t":{"3307":{"position":[[145,9]]}}}],["10400",{"_index":3404,"t":{"713":{"position":[[184,5]]},"734":{"position":[[198,5]]}}}],["10403",{"_index":3407,"t":{"713":{"position":[[399,5]]},"734":{"position":[[413,5]]}}}],["105",{"_index":8192,"t":{"3452":{"position":[[1635,3],[1663,3]]},"3916":{"position":[[4631,3],[4659,3]]}}}],["10699021",{"_index":9563,"t":{"3938":{"position":[[518,8]]}}}],["106m",{"_index":9693,"t":{"3958":{"position":[[367,4]]}}}],["1073741824",{"_index":5421,"t":{"1755":{"position":[[224,10],[472,10]]}}}],["1085426",{"_index":8758,"t":{"3770":{"position":[[3451,7]]}}}],["1086517",{"_index":8763,"t":{"3770":{"position":[[5072,7]]}}}],["109",{"_index":3555,"t":{"771":{"position":[[96,3]]}}}],["10_0",{"_index":8233,"t":{"3452":{"position":[[3861,4]]},"3916":{"position":[[6857,4]]}}}],["10f0f01",{"_index":9351,"t":{"3924":{"position":[[1977,7]]}}}],["10f4a90",{"_index":9642,"t":{"3950":{"position":[[626,7]]}}}],["11",{"_index":378,"t":{"44":{"position":[[12,2]]},"51":{"position":[[55,2]]},"62":{"position":[[55,2]]},"75":{"position":[[55,2]]},"114":{"position":[[356,2],[1199,2],[1297,2]]},"397":{"position":[[170,2],[175,2],[211,2],[244,2]]},"399":{"position":[[665,2],[827,2],[879,2]]},"761":{"position":[[147,2]]},"899":{"position":[[909,2],[928,2],[1629,2],[1746,2],[1847,2],[1931,2]]},"1483":{"position":[[1040,2]]},"2420":{"position":[[236,2],[495,2],[514,2],[543,2],[552,2],[583,2],[595,2],[603,2]]},"2633":{"position":[[23,2]]},"3242":{"position":[[10,2]]},"3246":{"position":[[51,2]]},"3269":{"position":[[531,2]]},"3446":{"position":[[831,2],[1674,2],[1772,2]]},"3601":{"position":[[91,2],[204,2],[319,2],[433,2],[554,2],[660,2],[811,2],[966,2],[1111,2],[1262,2],[1411,2]]},"3758":{"position":[[38,2]]},"3762":{"position":[[533,2],[606,2],[644,2],[717,2],[755,2],[828,2],[866,2],[938,2],[976,2],[1049,2],[1087,2],[1160,2]]},"3764":{"position":[[142,2],[216,2],[254,2],[329,2],[367,2],[442,2],[480,2],[555,2],[593,2],[668,2],[706,2],[781,2]]},"3766":{"position":[[315,2],[388,2],[421,2],[493,2],[526,2],[598,2],[631,2],[703,2],[736,2],[809,2],[845,2],[918,2],[951,2],[1024,2],[1066,2],[1139,2],[1172,2],[1245,2],[1287,2],[1360,2],[1402,2],[1474,2],[1507,2],[1580,2],[1613,2],[1685,2]]},"3768":{"position":[[603,2],[675,2],[713,2],[786,2],[908,2],[981,2],[1103,2],[1175,2],[1213,2],[1286,2],[1408,2],[1481,2],[1603,2],[1676,2],[1714,2],[1788,2],[1910,2],[1984,2],[2106,2],[2179,2],[2217,2],[2291,2],[2619,2],[2691,2],[2729,2],[2801,2],[2839,2],[2912,2],[2950,2],[3023,2],[3061,2],[3134,2]]},"3770":{"position":[[385,2],[650,2],[935,2],[981,2],[1190,2],[1782,2],[2032,2],[2075,2],[2372,2],[2420,2],[2646,2],[3436,2],[3448,2],[3705,2],[3717,2],[3735,2],[3747,2],[3872,2],[3884,2],[4194,2],[4206,2],[4235,2],[4455,2],[4467,2],[5057,2],[5323,2],[5384,2],[5705,2],[5740,2],[5931,2]]},"3772":{"position":[[567,2],[696,2],[843,2],[915,2],[948,2],[1026,2],[1064,2],[1143,2],[1181,2],[1260,2],[1298,2],[1377,2],[1415,2],[1494,2],[1532,2],[1611,2],[1649,2],[1722,2],[1755,2],[1834,2],[1872,2],[1951,2],[1989,2],[2068,2]]},"3774":{"position":[[727,2],[800,2],[833,2],[905,2],[941,2],[1014,2],[1047,2],[1120,2],[1162,2],[1235,2],[1268,2],[1341,2],[1383,2],[1455,2],[1497,2],[1509,2],[1570,2],[1582,2],[1603,2],[1676,2]]},"3779":{"position":[[878,2],[1206,2]]},"3783":{"position":[[605,2],[690,2],[725,2],[810,2],[845,2],[931,2],[966,2],[1052,2],[1087,2],[1173,2]]},"3785":{"position":[[331,2],[1051,2],[1367,2],[1732,2]]},"3800":{"position":[[335,2]]},"3802":{"position":[[935,2],[991,2],[1227,2],[1556,2],[1608,2],[1824,2]]},"3806":{"position":[[421,2],[506,2],[564,2],[649,2],[707,2],[792,2],[850,2],[936,2],[994,2],[1079,2],[1137,2],[1223,2],[1826,2],[1911,2],[1968,2],[2053,2],[2110,2],[2195,2],[2252,2],[2337,2],[2394,2],[2479,2],[2536,2],[2621,2],[3654,2],[3739,2],[3778,2],[3863,2]]},"3808":{"position":[[1088,2],[1173,2],[1206,2],[1291,2],[1324,2],[1333,2],[1409,2],[1418,2],[1445,2],[1454,2],[1530,2],[1539,2],[1566,2],[1575,2],[1651,2],[1660,2],[2309,2],[2394,2],[2433,2],[2518,2],[2557,2],[2642,2],[2681,2],[2766,2],[2805,2],[2890,2]]},"3812":{"position":[[341,2],[393,2],[609,2],[1512,2],[1535,2],[1585,2],[1967,2],[2008,2],[2228,2],[2650,2],[2685,2],[2876,2]]},"3817":{"position":[[850,2],[1146,2],[1202,2],[1438,2],[1882,2],[2148,2],[2200,2],[2416,2]]},"3821":{"position":[[359,2],[640,2],[692,2],[908,2]]},"3828":{"position":[[956,2],[1061,2],[1146,2],[1179,2]]},"3832":{"position":[[1019,2],[1125,2],[1211,2],[1245,2],[1331,2],[1365,2],[1451,2],[1485,2],[1571,2],[1605,2],[3199,2],[3305,2]]},"3842":{"position":[[276,2],[420,2],[906,2],[1050,2],[1471,2],[1615,2],[2061,2],[2205,2],[2702,2],[2846,2],[3319,2],[3463,2]]},"3844":{"position":[[282,2],[429,2],[552,2]]},"3846":{"position":[[522,2],[668,2],[791,2]]},"3850":{"position":[[108,2],[283,2]]},"3852":{"position":[[108,2],[114,2],[194,2],[200,2],[227,2],[233,2],[401,2],[407,2]]},"3854":{"position":[[110,2],[116,2],[196,2],[202,2],[229,2],[235,2],[375,2],[381,2]]},"3856":{"position":[[124,2],[130,2]]},"3874":{"position":[[41,2],[216,2]]},"3876":{"position":[[41,2],[126,2],[159,2],[333,2]]},"3896":{"position":[[284,2],[565,2],[617,2],[833,2]]},"3898":{"position":[[16,2]]},"3900":{"position":[[16,2]]},"3902":{"position":[[16,2]]},"3904":{"position":[[16,2]]},"3910":{"position":[[368,2]]},"3912":{"position":[[23,2],[188,2],[191,2],[262,2],[336,2],[410,2],[484,2],[1504,2]]},"3914":{"position":[[668,2]]},"3926":{"position":[[198,2],[203,2],[323,2],[360,2]]},"3928":{"position":[[1393,2],[2236,2],[2334,2]]},"3982":{"position":[[14,2]]}}}],["110",{"_index":5245,"t":{"1685":{"position":[[323,3]]},"3664":{"position":[[206,3]]}}}],["111",{"_index":1823,"t":{"249":{"position":[[231,3]]}}}],["1133162",{"_index":8764,"t":{"3770":{"position":[[5399,7]]}}}],["114",{"_index":791,"t":{"114":{"position":[[514,3]]},"3446":{"position":[[989,3]]},"3928":{"position":[[1551,3]]}}}],["1150444",{"_index":8759,"t":{"3770":{"position":[[3750,7]]}}}],["116",{"_index":1429,"t":{"190":{"position":[[1198,3]]}}}],["117",{"_index":1399,"t":{"190":{"position":[[755,3]]}}}],["1182283",{"_index":9233,"t":{"3918":{"position":[[3039,7]]}}}],["1185",{"_index":7793,"t":{"3265":{"position":[[187,4]]}}}],["1190961",{"_index":8760,"t":{"3770":{"position":[[3887,7]]}}}],["1191",{"_index":7806,"t":{"3269":{"position":[[599,4]]}}}],["1193",{"_index":7799,"t":{"3267":{"position":[[703,4]]}}}],["1195",{"_index":7807,"t":{"3271":{"position":[[284,4]]}}}],["12",{"_index":1346,"t":{"190":{"position":[[35,2]]},"259":{"position":[[23,2]]},"397":{"position":[[289,2]]},"482":{"position":[[175,2]]},"771":{"position":[[141,2]]},"1483":{"position":[[1066,2]]},"1674":{"position":[[52,2]]},"1685":{"position":[[10,2]]},"1689":{"position":[[514,2]]},"2391":{"position":[[86,2]]},"2418":{"position":[[413,2]]},"2420":{"position":[[894,2],[907,2],[947,2],[961,2],[998,2],[1012,2],[1049,2],[1067,2],[1105,2],[1123,2],[1161,2],[1175,2],[1543,2],[1560,2]]},"3452":{"position":[[3712,2]]},"3770":{"position":[[4247,2]]},"3800":{"position":[[373,2]]},"3806":{"position":[[1149,2],[1235,2]]},"3910":{"position":[[2097,2]]},"3914":{"position":[[520,2],[594,2]]},"3916":{"position":[[2730,2],[6708,2]]}}}],["123",{"_index":5291,"t":{"1691":{"position":[[339,3],[490,3]]},"3664":{"position":[[360,3]]},"3750":{"position":[[282,3],[451,3]]}}}],["1234",{"_index":6802,"t":{"2684":{"position":[[273,4]]},"2690":{"position":[[291,4]]}}}],["1252",{"_index":9554,"t":{"3938":{"position":[[363,4]]}}}],["1264",{"_index":794,"t":{"114":{"position":[[542,4]]},"3446":{"position":[[1017,4]]},"3928":{"position":[[1579,4]]}}}],["127",{"_index":2502,"t":{"419":{"position":[[385,3]]},"520":{"position":[[354,3],[457,3]]},"901":{"position":[[382,3],[485,3]]},"1315":{"position":[[382,3],[485,3]]}}}],["1277f53",{"_index":9093,"t":{"3912":{"position":[[2546,7]]}}}],["128",{"_index":4302,"t":{"1420":{"position":[[745,3],[781,3],[815,3],[849,3],[902,3]]}}}],["12_1",{"_index":8230,"t":{"3452":{"position":[[3712,4]]},"3916":{"position":[[6708,4]]}}}],["12c65de",{"_index":9620,"t":{"3948":{"position":[[371,7]]}}}],["13",{"_index":1398,"t":{"190":{"position":[[752,2]]},"399":{"position":[[311,2]]},"482":{"position":[[458,2],[461,2]]},"713":{"position":[[445,2]]},"885":{"position":[[22,2]]},"1279":{"position":[[12,2]]},"1302":{"position":[[22,2]]},"1795":{"position":[[1103,2]]},"2418":{"position":[[753,2],[756,2]]},"2420":{"position":[[1683,2]]},"3664":{"position":[[172,2]]},"3768":{"position":[[1649,2],[2152,2],[2288,2],[2885,2]]},"3770":{"position":[[394,2],[659,2],[944,2],[990,2],[1199,2]]},"3806":{"position":[[430,2],[515,2],[573,2],[658,2],[716,2],[801,2],[859,2],[945,2],[1003,2],[1088,2],[1146,2],[1232,2]]},"3828":{"position":[[962,2],[1067,2],[1152,2],[1185,2]]},"3844":{"position":[[291,2],[294,2],[438,2],[561,2]]},"3914":{"position":[[446,2]]},"3918":{"position":[[520,2]]}}}],["134",{"_index":1824,"t":{"249":{"position":[[235,3]]}}}],["1343",{"_index":8193,"t":{"3452":{"position":[[1669,4]]},"3916":{"position":[[4665,4]]}}}],["136m",{"_index":9831,"t":{"3966":{"position":[[1162,4]]}}}],["14",{"_index":1167,"t":{"160":{"position":[[14,2]]},"2420":{"position":[[730,2],[787,2],[1428,2]]},"3430":{"position":[[116,2],[194,2],[3964,2],[4077,2]]},"3432":{"position":[[5181,2],[5294,2]]},"3601":{"position":[[254,2],[369,2]]},"3764":{"position":[[300,2]]},"3766":{"position":[[361,2],[782,2],[1112,2],[1333,2]]},"3774":{"position":[[773,2],[987,2],[1314,2],[1649,2]]},"3783":{"position":[[1146,2]]},"3806":{"position":[[909,2],[1196,2]]},"3832":{"position":[[1025,2],[1087,2],[1131,2],[1184,2],[1217,2],[1251,2],[1304,2],[1337,2],[1371,2],[1424,2],[1457,2],[1491,2],[1544,2],[1577,2],[1611,2],[1676,2],[3205,2],[3267,2],[3311,2],[3373,2]]},"3844":{"position":[[353,2],[500,2],[623,2]]},"3854":{"position":[[169,2]]},"3876":{"position":[[230,2],[404,2]]},"3914":{"position":[[372,2]]}}}],["147",{"_index":5057,"t":{"1566":{"position":[[1003,3]]}}}],["1497m",{"_index":8405,"t":{"3601":{"position":[[1381,6]]}}}],["15",{"_index":2,"t":{"3":{"position":[[12,2]]},"68":{"position":[[12,2]]},"190":{"position":[[1314,2],[1370,2]]},"482":{"position":[[464,2]]},"877":{"position":[[1440,2],[1536,2],[1644,2],[1752,2],[1860,2]]},"2418":{"position":[[759,2]]},"2420":{"position":[[897,2],[919,2],[1211,2]]},"3764":{"position":[[413,2],[639,2]]},"3766":{"position":[[997,2],[1218,2],[1519,2],[1553,2],[1592,2]]},"3768":{"position":[[2996,2],[3107,2]]},"3770":{"position":[[1794,2],[2044,2],[2087,2],[2384,2],[2658,2]]},"3772":{"position":[[1695,2],[1801,2],[2035,2]]},"3783":{"position":[[904,2],[1025,2]]},"3852":{"position":[[298,2],[472,2]]},"3874":{"position":[[112,2],[287,2]]},"3876":{"position":[[47,2],[132,2],[165,2],[339,2]]},"3918":{"position":[[446,2]]}}}],["1518cf3",{"_index":9280,"t":{"3920":{"position":[[1795,7]]}}}],["1521",{"_index":2809,"t":{"520":{"position":[[370,4]]},"901":{"position":[[398,4]]},"1315":{"position":[[398,4]]}}}],["1562",{"_index":1396,"t":{"190":{"position":[[722,4]]}}}],["159a6w",{"_index":9569,"t":{"3940":{"position":[[200,6],[320,6]]}}}],["16",{"_index":412,"t":{"51":{"position":[[52,2],[203,2]]},"62":{"position":[[52,2],[203,2]]},"75":{"position":[[52,2],[203,2]]},"100":{"position":[[19,2]]},"104":{"position":[[31,2]]},"127":{"position":[[923,2]]},"399":{"position":[[509,2]]},"445":{"position":[[912,2]]},"455":{"position":[[169,2]]},"1511":{"position":[[321,2]]},"1677":{"position":[[223,2]]},"2067":{"position":[[21,2]]},"2077":{"position":[[20,2]]},"2339":{"position":[[21,2]]},"2420":{"position":[[733,2],[790,2]]},"2985":{"position":[[247,2]]},"3039":{"position":[[107,2]]},"3041":{"position":[[134,2]]},"3432":{"position":[[2664,2],[2784,2],[2905,2],[3011,2]]},"3474":{"position":[[21,2]]},"3601":{"position":[[97,2]]},"3762":{"position":[[539,2],[579,2],[612,2],[650,2],[723,2],[761,2],[801,2],[834,2],[872,2],[944,2],[982,2],[1022,2],[1055,2],[1093,2],[1166,2]]},"3764":{"position":[[148,2],[222,2],[260,2],[335,2],[373,2],[448,2],[486,2],[526,2],[561,2],[599,2],[674,2],[712,2],[752,2],[787,2]]},"3766":{"position":[[321,2],[394,2],[427,2],[499,2],[532,2],[604,2],[637,2],[709,2],[742,2],[815,2],[851,2],[891,2],[924,2],[957,2],[1030,2],[1072,2],[1145,2],[1178,2],[1251,2],[1293,2],[1366,2],[1408,2],[1480,2],[1513,2],[1586,2],[1619,2],[1691,2]]},"3768":{"position":[[609,2],[681,2],[719,2],[797,2],[914,2],[992,2],[1109,2],[1181,2],[1219,2],[1297,2],[1414,2],[1492,2],[1609,2],[1682,2],[1720,2],[1785,2],[1799,2],[1916,2],[1981,2],[1995,2],[2112,2],[2185,2],[2223,2],[2302,2]]},"3770":{"position":[[2432,2]]},"3772":{"position":[[1227,2],[1461,2],[1578,2]]},"3774":{"position":[[1093,2],[1208,2],[1543,2],[1615,2],[1688,2]]},"3783":{"position":[[611,2],[696,2],[731,2],[816,2],[851,2],[937,2],[972,2],[1058,2],[1093,2],[1179,2]]},"3785":{"position":[[1060,2],[1376,2]]},"3808":{"position":[[2318,2],[2403,2],[2442,2],[2527,2],[2566,2],[2651,2],[2690,2],[2775,2],[2814,2],[2899,2]]},"3832":{"position":[[2913,2],[4674,2]]},"3842":{"position":[[282,2],[426,2],[912,2],[1056,2],[1477,2],[1621,2],[2067,2],[2211,2],[2708,2],[2852,2],[3325,2],[3469,2]]},"3850":{"position":[[179,2],[354,2]]},"3874":{"position":[[53,2],[228,2]]},"3918":{"position":[[372,2]]},"3922":{"position":[[388,2]]},"3940":{"position":[[226,2]]},"3952":{"position":[[454,2]]},"3982":{"position":[[803,2]]}}}],["16185298",{"_index":7897,"t":{"3307":{"position":[[312,8]]}}}],["16384",{"_index":5264,"t":{"1687":{"position":[[109,5]]},"1689":{"position":[[721,5]]},"1803":{"position":[[5468,5]]}}}],["1658716797",{"_index":810,"t":{"114":{"position":[[1002,10],[1030,10]]},"3446":{"position":[[1477,10],[1505,10]]},"3928":{"position":[[2039,10],[2067,10]]}}}],["1658717997",{"_index":813,"t":{"114":{"position":[[1058,10]]},"3446":{"position":[[1533,10]]},"3928":{"position":[[2095,10]]}}}],["166",{"_index":4763,"t":{"1511":{"position":[[2218,3],[3670,3]]}}}],["1664450505",{"_index":8201,"t":{"3452":{"position":[[2207,10],[2273,10]]},"3916":{"position":[[5203,10],[5269,10]]}}}],["1664450517341",{"_index":8212,"t":{"3452":{"position":[[3058,13]]},"3916":{"position":[[6054,13]]}}}],["1664451705",{"_index":8202,"t":{"3452":{"position":[[2339,10]]},"3916":{"position":[[5335,10]]}}}],["1666167",{"_index":8096,"t":{"3430":{"position":[[2580,7]]}}}],["168",{"_index":1822,"t":{"249":{"position":[[227,3]]}}}],["16d6",{"_index":7269,"t":{"2929":{"position":[[621,4]]},"2945":{"position":[[678,4]]},"2959":{"position":[[647,4]]}}}],["16f2f5ed00e2",{"_index":4404,"t":{"1483":{"position":[[325,12]]}}}],["16k",{"_index":5631,"t":{"1803":{"position":[[5485,3]]}}}],["17",{"_index":1434,"t":{"190":{"position":[[1255,2]]},"771":{"position":[[81,2]]},"799":{"position":[[13,2]]},"1101":{"position":[[13,2]]},"1155":{"position":[[13,2]]},"1861":{"position":[[8,2]]},"2199":{"position":[[8,2]]},"3242":{"position":[[15,2]]},"3430":{"position":[[2461,2],[2574,2],[2705,2],[2835,2],[2956,2],[3062,2]]},"3601":{"position":[[210,2],[325,2],[439,2],[560,2],[666,2]]},"3762":{"position":[[536,2],[609,2],[647,2],[690,2],[720,2],[758,2],[831,2],[869,2],[941,2],[979,2],[1052,2],[1090,2],[1133,2],[1163,2]]},"3764":{"position":[[145,2],[219,2],[257,2],[332,2],[370,2],[445,2],[483,2],[558,2],[596,2],[671,2],[709,2],[784,2]]},"3766":{"position":[[318,2],[391,2],[424,2],[496,2],[529,2],[601,2],[634,2],[706,2],[739,2],[812,2],[848,2],[921,2],[954,2],[1027,2],[1069,2],[1142,2],[1175,2],[1248,2],[1290,2],[1363,2],[1405,2],[1477,2],[1510,2],[1583,2],[1616,2],[1688,2]]},"3768":{"position":[[606,2],[678,2],[716,2],[789,2],[911,2],[984,2],[1106,2],[1178,2],[1216,2],[1289,2],[1411,2],[1484,2],[1606,2],[1679,2],[1717,2],[1791,2],[1913,2],[1987,2],[2109,2],[2182,2],[2220,2],[2294,2],[2622,2],[2625,2],[2694,2],[2697,2],[2732,2],[2735,2],[2804,2],[2807,2],[2842,2],[2845,2],[2915,2],[2918,2],[2953,2],[2956,2],[3026,2],[3029,2],[3064,2],[3067,2],[3137,2],[3140,2]]},"3770":{"position":[[388,2],[391,2],[1785,2],[1788,2],[1791,2],[2041,2],[2078,2],[2081,2],[2084,2],[2381,2],[2429,2],[2655,2],[3439,2],[3442,2],[3708,2],[3711,2],[3738,2],[3741,2],[3875,2],[3878,2],[4197,2],[4200,2],[4238,2],[4241,2],[4458,2],[4461,2],[5060,2],[5063,2],[5326,2],[5329,2],[5387,2],[5390,2],[5708,2],[5711,2],[5743,2],[5746,2],[5934,2],[5937,2]]},"3772":{"position":[[570,2],[573,2],[699,2],[702,2],[846,2],[849,2],[918,2],[921,2],[951,2],[954,2],[1029,2],[1032,2],[1067,2],[1070,2],[1146,2],[1149,2],[1184,2],[1187,2],[1263,2],[1266,2],[1301,2],[1304,2],[1344,2],[1380,2],[1383,2],[1418,2],[1421,2],[1497,2],[1500,2],[1535,2],[1538,2],[1614,2],[1617,2],[1652,2],[1655,2],[1725,2],[1728,2],[1758,2],[1761,2],[1837,2],[1840,2],[1875,2],[1878,2],[1954,2],[1957,2],[1992,2],[1995,2],[2071,2],[2074,2]]},"3846":{"position":[[534,2]]},"3874":{"position":[[47,2],[222,2]]},"3934":{"position":[[2715,2]]},"3952":{"position":[[534,2]]},"3980":{"position":[[668,2]]}}}],["1728106",{"_index":8098,"t":{"3430":{"position":[[2711,7]]}}}],["17763",{"_index":1348,"t":{"190":{"position":[[57,5]]}}}],["17t09",{"_index":8797,"t":{"3779":{"position":[[881,5],[1209,5]]},"3817":{"position":[[853,5],[1885,5]]},"3821":{"position":[[362,5]]},"3896":{"position":[[287,5]]}}}],["17t17",{"_index":8719,"t":{"3770":{"position":[[653,5],[938,5],[984,5],[1193,5],[2035,5],[2375,5],[2423,5],[2649,5]]}}}],["18",{"_index":447,"t":{"57":{"position":[[12,2]]},"401":{"position":[[61,2],[270,2],[348,2]]},"585":{"position":[[160,2],[201,2]]},"639":{"position":[[375,2]]},"771":{"position":[[144,2]]},"853":{"position":[[573,2]]},"960":{"position":[[612,2],[665,2],[965,2],[1125,2],[1306,2],[1434,2],[1588,2]]},"1269":{"position":[[7,2]]},"1785":{"position":[[29,2],[80,2]]},"2167":{"position":[[279,2],[383,2]]},"2186":{"position":[[17,2]]},"2188":{"position":[[17,2]]},"2319":{"position":[[12,2]]},"2486":{"position":[[12,2]]},"2856":{"position":[[1731,2]]},"3528":{"position":[[12,2]]},"3567":{"position":[[12,2]]},"3772":{"position":[[1110,2],[1918,2]]},"3774":{"position":[[730,2],[803,2],[836,2],[908,2],[944,2],[1017,2],[1050,2],[1123,2],[1165,2],[1238,2],[1271,2],[1344,2],[1386,2],[1458,2],[1500,2],[1573,2],[1606,2],[1679,2]]},"3783":{"position":[[608,2],[693,2],[728,2],[813,2],[848,2],[934,2],[969,2],[1055,2],[1090,2],[1176,2]]},"3785":{"position":[[1054,2],[1063,2],[1370,2],[1379,2],[1735,2]]},"3832":{"position":[[2150,2],[3911,2]]},"3844":{"position":[[288,2],[435,2],[441,2],[558,2]]},"3980":{"position":[[386,2]]}}}],["1809",{"_index":1350,"t":{"190":{"position":[[68,4]]}}}],["186ca0a",{"_index":9343,"t":{"3924":{"position":[[1479,7]]}}}],["188",{"_index":4629,"t":{"1511":{"position":[[687,3]]},"3832":{"position":[[3127,3],[4888,3]]}}}],["1893063",{"_index":8099,"t":{"3430":{"position":[[2841,7]]}}}],["18e80c7",{"_index":9263,"t":{"3920":{"position":[[459,7]]}}}],["18t22",{"_index":8821,"t":{"3785":{"position":[[334,5]]}}}],["19",{"_index":1369,"t":{"190":{"position":[[341,2],[364,2]]},"399":{"position":[[209,2]]},"889":{"position":[[619,2]]},"2768":{"position":[[1011,2]]},"2929":{"position":[[565,2]]},"2945":{"position":[[565,2]]},"2959":{"position":[[565,2]]},"3832":{"position":[[1981,2],[3742,2]]},"3854":{"position":[[122,2],[208,2]]},"3918":{"position":[[298,2]]},"3950":{"position":[[872,2]]}}}],["1913",{"_index":1388,"t":{"190":{"position":[[595,4]]}}}],["192",{"_index":1821,"t":{"249":{"position":[[223,3]]}}}],["1930",{"_index":1440,"t":{"190":{"position":[[1336,4]]}}}],["1939048828",{"_index":6188,"t":{"2333":{"position":[[507,10]]}}}],["1941484",{"_index":8100,"t":{"3430":{"position":[[2962,7]]}}}],["1970",{"_index":6304,"t":{"2418":{"position":[[521,4]]}}}],["197a62b",{"_index":9638,"t":{"3950":{"position":[[418,7]]}}}],["199",{"_index":4612,"t":{"1511":{"position":[[554,3],[605,3]]}}}],["1996545",{"_index":8101,"t":{"3430":{"position":[[3068,7]]}}}],["1a25274",{"_index":9584,"t":{"3942":{"position":[[238,7]]}}}],["1c198ee",{"_index":9124,"t":{"3914":{"position":[[1612,7]]}}}],["1d7fb5b",{"_index":9473,"t":{"3932":{"position":[[250,7]]}}}],["1eee77b",{"_index":9226,"t":{"3918":{"position":[[1329,7]]}}}],["1kb",{"_index":8119,"t":{"3432":{"position":[[586,3]]}}}],["1s",{"_index":5654,"t":{"1809":{"position":[[307,2]]},"2315":{"position":[[303,2]]},"2409":{"position":[[6,2]]},"2426":{"position":[[6,2]]},"2428":{"position":[[6,2]]}}}],["2",{"_index":390,"t":{"44":{"position":[[85,1]]},"53":{"position":[[17,1],[48,1],[134,1]]},"62":{"position":[[68,1]]},"100":{"position":[[53,1]]},"121":{"position":[[704,1],[723,1]]},"190":{"position":[[213,1],[268,1],[577,1],[800,1],[807,1],[1016,1],[1209,1],[1247,1]]},"259":{"position":[[19,1]]},"336":{"position":[[12,1]]},"399":{"position":[[226,1],[572,1],[593,1]]},"401":{"position":[[241,1]]},"459":{"position":[[31,1]]},"482":{"position":[[988,1]]},"510":{"position":[[557,1]]},"550":{"position":[[453,1],[458,1]]},"606":{"position":[[598,1],[805,1]]},"659":{"position":[[20,1]]},"722":{"position":[[58,1]]},"734":{"position":[[6329,1],[6355,1]]},"763":{"position":[[163,1]]},"771":{"position":[[74,1],[134,1]]},"777":{"position":[[33,1]]},"791":{"position":[[20,1]]},"877":{"position":[[1494,1],[1691,1],[1799,1]]},"883":{"position":[[201,1]]},"885":{"position":[[20,1]]},"1010":{"position":[[19,1]]},"1066":{"position":[[9,1],[370,1]]},"1071":{"position":[[42,1]]},"1145":{"position":[[453,1]]},"1147":{"position":[[344,1]]},"1151":{"position":[[422,1]]},"1279":{"position":[[719,1]]},"1302":{"position":[[20,1]]},"1323":{"position":[[33,1]]},"1412":{"position":[[187,1]]},"1483":{"position":[[692,1]]},"1499":{"position":[[63,1]]},"1511":{"position":[[1441,1]]},"1516":{"position":[[67,1]]},"1528":{"position":[[16,1],[42,1]]},"1551":{"position":[[1080,1]]},"1592":{"position":[[194,1]]},"1594":{"position":[[249,1]]},"1621":{"position":[[218,1],[327,1],[755,1]]},"1655":{"position":[[270,1]]},"1677":{"position":[[243,1]]},"1715":{"position":[[19,1]]},"1743":{"position":[[310,1]]},"1785":{"position":[[32,1],[83,1]]},"1791":{"position":[[84,1]]},"1795":{"position":[[969,1],[1299,1],[2673,1]]},"1801":{"position":[[150,1]]},"1803":{"position":[[73,1]]},"1815":{"position":[[21,1]]},"1855":{"position":[[346,1]]},"1865":{"position":[[239,1]]},"1875":{"position":[[377,1],[468,1],[527,1]]},"1933":{"position":[[760,1]]},"1969":{"position":[[140,1],[142,1]]},"1983":{"position":[[52,1],[54,1]]},"2006":{"position":[[52,1],[54,1]]},"2144":{"position":[[60,1]]},"2169":{"position":[[21,1]]},"2311":{"position":[[21,1]]},"2335":{"position":[[12,1]]},"2363":{"position":[[241,1]]},"2391":{"position":[[138,1]]},"2418":{"position":[[130,1],[627,1],[1360,1]]},"2420":{"position":[[1078,1]]},"2472":{"position":[[212,1]]},"2486":{"position":[[663,1],[920,1]]},"2488":{"position":[[49,1],[72,1]]},"2649":{"position":[[151,1],[182,1]]},"2725":{"position":[[2652,1]]},"2772":{"position":[[52,1],[54,1]]},"2780":{"position":[[19,1]]},"2827":{"position":[[28,1]]},"2856":{"position":[[617,1],[655,1],[688,1],[921,1],[1131,1],[1474,1],[1505,1],[1537,1],[1584,1],[1599,1]]},"2860":{"position":[[85,1],[87,1]]},"2893":{"position":[[21,1]]},"2977":{"position":[[34,1]]},"2987":{"position":[[34,1]]},"2997":{"position":[[34,1]]},"3005":{"position":[[34,1]]},"3019":{"position":[[34,1]]},"3027":{"position":[[34,1]]},"3035":{"position":[[34,1]]},"3043":{"position":[[34,1]]},"3051":{"position":[[34,1]]},"3059":{"position":[[34,1]]},"3063":{"position":[[194,1],[1075,1]]},"3067":{"position":[[23,1]]},"3069":{"position":[[260,1]]},"3071":{"position":[[14,1]]},"3086":{"position":[[13,1]]},"3094":{"position":[[98,1]]},"3181":{"position":[[22,1]]},"3185":{"position":[[23,1]]},"3194":{"position":[[7,1]]},"3215":{"position":[[754,1]]},"3224":{"position":[[565,1],[1316,1]]},"3234":{"position":[[654,1]]},"3254":{"position":[[748,1],[820,1]]},"3261":{"position":[[335,1]]},"3273":{"position":[[83,1],[268,1],[279,1],[372,1],[629,1]]},"3339":{"position":[[21,1]]},"3345":{"position":[[21,1]]},"3360":{"position":[[105,1]]},"3375":{"position":[[127,1],[232,1]]},"3381":{"position":[[278,1]]},"3389":{"position":[[1347,1]]},"3391":{"position":[[802,1]]},"3393":{"position":[[1220,1]]},"3416":{"position":[[195,1]]},"3424":{"position":[[21,1]]},"3430":{"position":[[3457,1],[4532,1]]},"3432":{"position":[[4145,1]]},"3434":{"position":[[2510,1]]},"3446":{"position":[[452,1]]},"3448":{"position":[[109,1],[130,1],[770,1],[851,1],[1194,1]]},"3452":{"position":[[23,1],[1419,1],[2556,1],[2837,1]]},"3530":{"position":[[12,1]]},"3569":{"position":[[12,1]]},"3577":{"position":[[138,1],[229,1]]},"3595":{"position":[[44,1],[99,1]]},"3640":{"position":[[356,1],[644,1]]},"3664":{"position":[[438,1]]},"3678":{"position":[[9,1]]},"3706":{"position":[[186,1],[1067,1]]},"3738":{"position":[[166,1],[212,1]]},"3740":{"position":[[294,1],[340,1]]},"3748":{"position":[[257,1]]},"3768":{"position":[[575,1]]},"3770":{"position":[[875,1],[2308,1],[4127,1]]},"3783":{"position":[[953,1],[1514,1],[1629,1]]},"3800":{"position":[[116,1]]},"3802":{"position":[[868,1],[1496,1]]},"3806":{"position":[[246,1]]},"3812":{"position":[[281,1],[1491,1],[1900,1]]},"3817":{"position":[[1079,1],[2088,1]]},"3821":{"position":[[580,1]]},"3832":{"position":[[2350,1],[2603,1],[2977,1],[4111,1],[4364,1],[4738,1]]},"3896":{"position":[[505,1]]},"3912":{"position":[[495,1],[2067,1],[2133,1],[2202,1]]},"3914":{"position":[[528,1],[1233,1],[2273,1],[2364,1],[2676,1],[3318,1]]},"3916":{"position":[[454,1],[903,1],[936,1],[986,1],[1048,1],[1507,1],[2008,1],[2061,1],[2109,1],[2273,1],[4415,1],[5552,1],[5833,1]]},"3918":{"position":[[528,1]]},"3920":{"position":[[1863,1]]},"3922":{"position":[[1871,1],[1873,1]]},"3924":{"position":[[3496,1],[4048,1]]},"3966":{"position":[[1227,1]]},"3984":{"position":[[819,1]]},"3990":{"position":[[628,1]]},"3992":{"position":[[1011,1]]}}}],["20",{"_index":992,"t":{"127":{"position":[[1183,2],[1210,2]]},"233":{"position":[[636,2]]},"253":{"position":[[781,2]]},"397":{"position":[[216,2]]},"399":{"position":[[551,2]]},"401":{"position":[[12,2],[113,2]]},"482":{"position":[[425,2],[437,2],[467,2],[544,2],[555,2],[608,2],[666,2],[681,2]]},"597":{"position":[[135,2],[165,2]]},"599":{"position":[[165,2],[195,2]]},"606":{"position":[[942,2],[1043,2],[1152,2]]},"877":{"position":[[1437,2],[1446,2],[1533,2],[1542,2],[1641,2],[1650,2],[1749,2],[1758,2],[1857,2],[1866,2]]},"889":{"position":[[665,2]]},"960":{"position":[[1690,2],[1752,2]]},"1377":{"position":[[621,2],[643,2],[761,2]]},"1488":{"position":[[535,2]]},"1511":{"position":[[292,2],[937,2],[1094,2],[1136,2],[1455,2],[1714,2],[1781,2],[1855,2],[2253,2],[2371,2],[2451,2],[2842,2],[2929,2],[3019,2],[3044,2],[3086,2],[3148,2],[3320,2],[3346,2],[3506,2],[3803,2],[3883,2],[4023,2],[4028,2],[4150,2],[4240,2]]},"1635":{"position":[[453,2]]},"1667":{"position":[[310,2],[374,2],[538,2],[597,2]]},"1695":{"position":[[3,2],[24,2]]},"1791":{"position":[[3,2],[25,2],[86,2]]},"1803":{"position":[[5500,2]]},"2132":{"position":[[208,2]]},"2418":{"position":[[719,2],[731,2],[762,2],[843,2],[855,2],[915,2],[981,2],[994,2]]},"2929":{"position":[[562,2],[733,2],[736,2]]},"2945":{"position":[[562,2],[790,2],[793,2]]},"2959":{"position":[[562,2],[759,2],[762,2]]},"3039":{"position":[[326,2]]},"3041":{"position":[[394,2],[421,2]]},"3220":{"position":[[34,2]]},"3265":{"position":[[34,2]]},"3430":{"position":[[3811,2]]},"3432":{"position":[[5028,2]]},"3466":{"position":[[219,2],[386,2],[504,2],[621,2]]},"3766":{"position":[[1625,2],[1697,2]]},"3806":{"position":[[424,2],[509,2],[567,2],[652,2],[710,2],[795,2],[853,2],[939,2],[997,2],[1082,2],[1140,2],[1226,2],[1829,2],[1914,2],[1971,2],[2056,2],[2113,2],[2198,2],[2255,2],[2340,2],[2397,2],[2482,2],[2539,2],[2624,2],[3657,2],[3742,2],[3781,2],[3866,2]]},"3808":{"position":[[1091,2],[1176,2],[1209,2],[1294,2],[1327,2],[1412,2],[1448,2],[1533,2],[1569,2],[1654,2],[2312,2],[2397,2],[2436,2],[2521,2],[2560,2],[2645,2],[2684,2],[2769,2],[2808,2],[2893,2]]},"3812":{"position":[[1515,2],[1538,2],[1588,2],[1970,2],[2011,2],[2231,2],[2653,2],[2688,2],[2879,2]]},"3914":{"position":[[224,2],[298,2],[1777,2],[1919,2],[2065,2]]},"3924":{"position":[[4635,2],[4773,2],[4864,2]]},"3926":{"position":[[328,2]]},"3948":{"position":[[3,2],[24,2]]},"3962":{"position":[[992,2]]},"3976":{"position":[[553,2]]}}}],["200",{"_index":2416,"t":{"401":{"position":[[133,3]]},"1511":{"position":[[246,3],[638,3],[843,3],[1003,3],[1159,3],[1596,3],[1620,3],[1677,3],[2433,3],[2725,3],[2883,3],[3065,3],[3176,3]]},"3047":{"position":[[55,3]]},"3049":{"position":[[91,3]]},"3063":{"position":[[1310,3]]},"3452":{"position":[[2816,3]]},"3595":{"position":[[73,3]]},"3601":{"position":[[1241,3],[1390,3]]},"3686":{"position":[[482,3],[582,3],[1274,3]]},"3706":{"position":[[1235,3],[1321,3]]},"3714":{"position":[[103,3]]},"3720":{"position":[[139,3]]},"3916":{"position":[[5812,3]]}}}],["2000",{"_index":2382,"t":{"397":{"position":[[319,4]]},"2829":{"position":[[722,4]]},"3110":{"position":[[55,4]]},"3768":{"position":[[537,4]]}}}],["2005",{"_index":3722,"t":{"897":{"position":[[64,4]]},"899":{"position":[[134,4],[148,4],[1108,4],[1224,4],[1238,4]]},"1309":{"position":[[228,4]]},"3946":{"position":[[264,4]]},"3980":{"position":[[31,4]]}}}],["2008",{"_index":1215,"t":{"172":{"position":[[7,4]]},"899":{"position":[[217,4],[231,4],[1113,4],[1307,4],[1321,4]]},"915":{"position":[[19,4]]},"3966":{"position":[[2019,4]]},"3980":{"position":[[36,4]]}}}],["200848e",{"_index":9331,"t":{"3924":{"position":[[805,7]]}}}],["201",{"_index":8487,"t":{"3656":{"position":[[176,3]]}}}],["2016",{"_index":1166,"t":{"160":{"position":[[2,4]]}}}],["2019",{"_index":411,"t":{"51":{"position":[[39,4],[226,4]]},"62":{"position":[[39,4],[226,4]]},"75":{"position":[[39,4],[226,4]]},"100":{"position":[[14,4]]},"104":{"position":[[26,4]]},"1971":{"position":[[56,4]]},"1973":{"position":[[17,4]]},"1981":{"position":[[38,4]]},"2294":{"position":[[773,4]]},"2811":{"position":[[17,4]]},"2836":{"position":[[738,4]]}}}],["2020",{"_index":2365,"t":{"397":{"position":[[0,4],[38,4],[70,4],[117,4],[163,4],[204,4],[237,4],[282,4]]},"606":{"position":[[1035,4]]},"877":{"position":[[1429,4],[1525,4],[1633,4],[1741,4],[1849,4]]},"889":{"position":[[611,4],[657,4]]},"977":{"position":[[31,4],[75,4]]},"1551":{"position":[[669,4]]},"2929":{"position":[[551,4],[722,4]]},"2945":{"position":[[551,4],[779,4]]},"2959":{"position":[[551,4],[748,4]]},"3702":{"position":[[2216,4]]},"3926":{"position":[[15,4],[191,4],[316,4]]}}}],["2021",{"_index":374,"t":{"44":{"position":[[0,4]]},"57":{"position":[[0,4]]},"68":{"position":[[0,4]]},"399":{"position":[[0,4],[47,4],[96,4],[148,4],[197,4],[247,4],[299,4],[348,4],[400,4],[449,4],[497,4],[539,4],[607,4],[653,4],[693,4],[740,4],[789,4],[820,4],[872,4]]},"1551":{"position":[[674,4]]},"3926":{"position":[[353,4]]},"3934":{"position":[[2611,4]]}}}],["2022",{"_index":1226,"t":{"174":{"position":[[55,4]]},"401":{"position":[[0,4],[49,4],[101,4],[140,4],[206,4],[258,4],[305,4],[336,4],[386,4]]},"773":{"position":[[420,4],[626,4],[922,4]]},"1969":{"position":[[8,4]]},"1985":{"position":[[56,4]]},"1987":{"position":[[17,4]]},"1993":{"position":[[38,4]]},"2008":{"position":[[56,4]]},"2010":{"position":[[17,4]]},"2016":{"position":[[38,4]]},"2294":{"position":[[780,4]]},"2391":{"position":[[81,4]]},"2633":{"position":[[16,4]]},"2864":{"position":[[17,4]]},"3242":{"position":[[3,4]]},"3246":{"position":[[44,4]]},"3309":{"position":[[14,4]]},"3430":{"position":[[2447,4],[2560,4],[2691,4],[2821,4],[2942,4],[3048,4],[3794,4],[3905,4],[4018,4],[4130,4],[4249,4],[4353,4]]},"3432":{"position":[[2650,4],[2770,4],[2891,4],[2997,4],[5011,4],[5122,4],[5235,4],[5347,4],[5466,4],[5570,4]]},"3601":{"position":[[80,4],[193,4],[308,4],[422,4],[543,4],[649,4],[800,4],[955,4],[1100,4],[1251,4],[1400,4]]},"3702":{"position":[[2221,4]]},"3758":{"position":[[31,4]]},"3762":{"position":[[528,4],[601,4],[639,4],[712,4],[750,4],[823,4],[861,4],[933,4],[971,4],[1044,4],[1082,4],[1155,4]]},"3764":{"position":[[137,4],[211,4],[249,4],[324,4],[362,4],[437,4],[475,4],[550,4],[588,4],[663,4],[701,4],[776,4]]},"3766":{"position":[[310,4],[383,4],[416,4],[488,4],[521,4],[593,4],[626,4],[698,4],[731,4],[804,4],[840,4],[913,4],[946,4],[1019,4],[1061,4],[1134,4],[1167,4],[1240,4],[1282,4],[1355,4],[1397,4],[1469,4],[1502,4],[1575,4],[1608,4],[1680,4]]},"3768":{"position":[[598,4],[670,4],[708,4],[792,4],[903,4],[987,4],[1098,4],[1170,4],[1208,4],[1292,4],[1403,4],[1487,4],[1598,4],[1671,4],[1709,4],[1794,4],[1905,4],[1990,4],[2101,4],[2174,4],[2212,4],[2297,4],[2614,4],[2686,4],[2724,4],[2796,4],[2834,4],[2907,4],[2945,4],[3018,4],[3056,4],[3129,4]]},"3770":{"position":[[380,4],[645,4],[930,4],[976,4],[1185,4],[1777,4],[2027,4],[2070,4],[2367,4],[2415,4],[2641,4],[3431,4],[3700,4],[3730,4],[3867,4],[4189,4],[4230,4],[4450,4],[5052,4],[5318,4],[5379,4],[5700,4],[5735,4],[5926,4]]},"3772":{"position":[[562,4],[691,4],[838,4],[910,4],[943,4],[1021,4],[1059,4],[1138,4],[1176,4],[1255,4],[1293,4],[1372,4],[1410,4],[1489,4],[1527,4],[1606,4],[1644,4],[1717,4],[1750,4],[1829,4],[1867,4],[1946,4],[1984,4],[2063,4]]},"3774":{"position":[[722,4],[795,4],[828,4],[900,4],[936,4],[1009,4],[1042,4],[1115,4],[1157,4],[1230,4],[1263,4],[1336,4],[1378,4],[1450,4],[1492,4],[1565,4],[1598,4],[1671,4]]},"3779":{"position":[[873,4],[1201,4]]},"3783":{"position":[[600,4],[685,4],[720,4],[805,4],[840,4],[926,4],[961,4],[1047,4],[1082,4],[1168,4]]},"3785":{"position":[[326,4],[1046,4],[1362,4],[1727,4]]},"3802":{"position":[[930,4],[986,4],[1222,4],[1551,4],[1603,4],[1819,4]]},"3806":{"position":[[416,4],[501,4],[559,4],[644,4],[702,4],[787,4],[845,4],[931,4],[989,4],[1074,4],[1132,4],[1218,4],[1821,4],[1906,4],[1963,4],[2048,4],[2105,4],[2190,4],[2247,4],[2332,4],[2389,4],[2474,4],[2531,4],[2616,4],[3649,4],[3734,4],[3773,4],[3858,4]]},"3808":{"position":[[1083,4],[1168,4],[1201,4],[1286,4],[1319,4],[1404,4],[1440,4],[1525,4],[1561,4],[1646,4],[2304,4],[2389,4],[2428,4],[2513,4],[2552,4],[2637,4],[2676,4],[2761,4],[2800,4],[2885,4]]},"3812":{"position":[[336,4],[388,4],[604,4],[1507,4],[1530,4],[1580,4],[1962,4],[2003,4],[2223,4],[2645,4],[2680,4],[2871,4]]},"3817":{"position":[[845,4],[1141,4],[1197,4],[1433,4],[1877,4],[2143,4],[2195,4],[2411,4]]},"3821":{"position":[[354,4],[635,4],[687,4],[903,4]]},"3828":{"position":[[951,4],[1056,4],[1141,4],[1174,4]]},"3832":{"position":[[1014,4],[1120,4],[1206,4],[1240,4],[1326,4],[1360,4],[1446,4],[1480,4],[1566,4],[1600,4],[3194,4],[3300,4]]},"3842":{"position":[[271,4],[415,4],[901,4],[1045,4],[1466,4],[1610,4],[2056,4],[2200,4],[2697,4],[2841,4],[3314,4],[3458,4]]},"3844":{"position":[[277,4],[424,4],[547,4]]},"3846":{"position":[[517,4],[663,4],[786,4]]},"3850":{"position":[[103,4],[278,4]]},"3852":{"position":[[103,4],[189,4],[222,4],[396,4]]},"3854":{"position":[[105,4],[191,4],[224,4],[370,4]]},"3856":{"position":[[119,4]]},"3874":{"position":[[36,4],[211,4]]},"3876":{"position":[[36,4],[121,4],[154,4],[328,4]]},"3896":{"position":[[279,4],[560,4],[612,4],[828,4]]},"3898":{"position":[[9,4]]},"3900":{"position":[[9,4]]},"3902":{"position":[[9,4]]},"3904":{"position":[[9,4]]},"3910":{"position":[[363,4],[2090,4]]},"3912":{"position":[[16,4],[183,4],[257,4],[331,4],[405,4],[479,4],[553,4],[627,4],[701,4]]},"3914":{"position":[[68,4],[142,4],[216,4],[290,4],[364,4],[438,4],[512,4],[586,4],[660,4],[734,4]]},"3916":{"position":[[68,4],[142,4],[216,4],[290,4],[364,4],[438,4],[512,4],[586,4],[660,4]]},"3918":{"position":[[68,4],[142,4],[216,4],[290,4],[364,4],[438,4],[512,4],[586,4],[660,4],[734,4]]},"3920":{"position":[[68,4],[142,4]]},"3934":{"position":[[2693,4]]},"3944":{"position":[[246,4]]}}}],["2023",{"_index":7759,"t":{"3246":{"position":[[4,4]]}}}],["204",{"_index":9577,"t":{"3940":{"position":[[628,3]]}}}],["20451",{"_index":3408,"t":{"713":{"position":[[439,5]]}}}],["20475",{"_index":3420,"t":{"722":{"position":[[60,5]]}}}],["2048",{"_index":5261,"t":{"1687":{"position":[[75,4],[102,4]]},"1689":{"position":[[687,4],[714,4]]}}}],["205",{"_index":1447,"t":{"190":{"position":[[1423,3]]}}}],["2064",{"_index":1439,"t":{"190":{"position":[[1326,4]]}}}],["2099",{"_index":6305,"t":{"2418":{"position":[[526,4]]}}}],["20ghz",{"_index":1356,"t":{"190":{"position":[[128,5]]}}}],["20m",{"_index":5634,"t":{"1803":{"position":[[5513,4]]}}}],["20t18",{"_index":8861,"t":{"3802":{"position":[[938,5],[994,5],[1230,5],[1559,5],[1611,5],[1827,5]]},"3817":{"position":[[1149,5],[1205,5],[1441,5],[2151,5],[2203,5],[2419,5]]},"3821":{"position":[[643,5],[695,5],[911,5]]},"3896":{"position":[[568,5],[620,5],[836,5]]}}}],["20t22",{"_index":8918,"t":{"3812":{"position":[[344,5],[396,5],[612,5]]}}}],["20tool",{"_index":4966,"t":{"1539":{"position":[[208,7]]}}}],["21",{"_index":2024,"t":{"308":{"position":[[188,2],[220,2],[253,2]]},"314":{"position":[[181,2]]},"399":{"position":[[705,2]]},"2910":{"position":[[61,2]]},"3246":{"position":[[56,2]]},"3806":{"position":[[427,2],[512,2],[570,2],[655,2],[713,2],[798,2],[856,2],[942,2],[1000,2],[1085,2],[1143,2],[1229,2],[1832,2],[1917,2],[1974,2],[2059,2],[2116,2],[2201,2],[2258,2],[2343,2],[2400,2],[2485,2],[2542,2],[2627,2],[3660,2],[3745,2],[3784,2],[3869,2]]},"3828":{"position":[[959,2],[1064,2],[1149,2],[1182,2]]},"3832":{"position":[[1022,2],[1128,2],[1214,2],[1248,2],[1334,2],[1368,2],[1454,2],[1488,2],[1574,2],[1608,2],[3202,2],[3308,2]]},"3842":{"position":[[279,2],[423,2],[909,2],[1053,2],[1474,2],[1618,2],[2064,2],[2208,2],[2705,2],[2849,2],[3322,2],[3466,2]]},"3844":{"position":[[285,2],[432,2],[555,2]]},"3910":{"position":[[371,2]]},"3918":{"position":[[224,2]]}}}],["21301",{"_index":449,"t":{"57":{"position":[[92,5]]},"64":{"position":[[24,5],[68,5],[167,5]]}}}],["2144716",{"_index":8947,"t":{"3828":{"position":[[971,7]]}}}],["21af847",{"_index":9059,"t":{"3910":{"position":[[2440,7]]}}}],["22",{"_index":695,"t":{"110":{"position":[[108,2]]},"397":{"position":[[129,2],[294,2]]},"399":{"position":[[412,2],[884,2]]},"514":{"position":[[753,2]]},"899":{"position":[[590,2],[1457,2]]},"3430":{"position":[[3922,2],[4035,2],[4147,2],[4266,2],[4370,2]]},"3432":{"position":[[5139,2],[5252,2],[5364,2],[5483,2],[5587,2]]},"3808":{"position":[[1094,2],[1179,2],[1212,2],[1297,2],[1330,2],[1415,2],[1451,2],[1536,2],[1572,2],[1657,2],[2315,2],[2321,2],[2400,2],[2406,2],[2439,2],[2524,2],[2563,2],[2648,2],[2687,2],[2772,2],[2811,2],[2896,2]]},"3812":{"position":[[1518,2],[1541,2],[1591,2],[1973,2],[2014,2],[2234,2],[2656,2],[2691,2],[2882,2]]},"3846":{"position":[[525,2],[671,2],[794,2]]},"3850":{"position":[[111,2],[286,2]]},"3852":{"position":[[111,2],[197,2],[230,2],[404,2]]},"3854":{"position":[[113,2],[199,2],[232,2],[378,2]]},"3856":{"position":[[127,2]]},"3874":{"position":[[44,2],[219,2]]},"3876":{"position":[[44,2],[129,2],[162,2],[336,2]]},"3914":{"position":[[150,2]]},"3918":{"position":[[150,2]]}}}],["2216598",{"_index":8948,"t":{"3828":{"position":[[1076,7]]}}}],["2241923",{"_index":9001,"t":{"3846":{"position":[[683,7],[806,7]]}}}],["2246",{"_index":7622,"t":{"3215":{"position":[[916,4]]}}}],["2249096",{"_index":8949,"t":{"3828":{"position":[[1194,7]]}}}],["23",{"_index":2378,"t":{"397":{"position":[[249,2]]},"482":{"position":[[128,2]]},"606":{"position":[[1146,2]]},"2077":{"position":[[39,2]]},"2385":{"position":[[118,2]]},"2418":{"position":[[320,2]]},"2420":{"position":[[218,2],[891,2],[910,2],[944,2],[964,2],[995,2],[1015,2],[1046,2],[1070,2],[1102,2],[1126,2],[1158,2],[1178,2]]},"3506":{"position":[[664,2]]},"3547":{"position":[[834,2]]},"3758":{"position":[[43,2]]},"3762":{"position":[[542,2],[615,2],[653,2],[726,2],[764,2],[837,2],[875,2],[947,2]]},"3785":{"position":[[1057,2],[1373,2],[1738,2]]},"3844":{"position":[[564,2]]},"3854":{"position":[[241,2],[387,2]]},"3856":{"position":[[136,2]]},"3898":{"position":[[21,2]]},"3900":{"position":[[21,2]]},"3902":{"position":[[21,2]]},"3904":{"position":[[21,2]]},"3918":{"position":[[76,2]]}}}],["23t20",{"_index":8134,"t":{"3432":{"position":[[2658,5],[2778,5],[2899,5],[3005,5]]}}}],["24",{"_index":1417,"t":{"190":{"position":[[997,2]]},"415":{"position":[[364,2]]},"1681":{"position":[[65,2]]},"2740":{"position":[[52,2]]},"2991":{"position":[[370,2]]},"3762":{"position":[[985,2],[1058,2],[1096,2],[1169,2]]},"3842":{"position":[[285,2],[429,2],[915,2],[1059,2],[1480,2],[1624,2],[2070,2],[2214,2],[2711,2],[2855,2],[3328,2],[3472,2]]},"3916":{"position":[[2720,2]]},"3940":{"position":[[611,2]]}}}],["2461",{"_index":1444,"t":{"190":{"position":[[1392,4]]}}}],["247",{"_index":8354,"t":{"3575":{"position":[[582,3]]}}}],["2485",{"_index":1400,"t":{"190":{"position":[[764,4]]}}}],["25",{"_index":2417,"t":{"401":{"position":[[152,2]]},"482":{"position":[[627,2]]},"771":{"position":[[100,2]]},"2418":{"position":[[934,2]]},"3764":{"position":[[151,2],[225,2],[263,2],[338,2],[376,2],[451,2],[489,2],[564,2],[602,2],[677,2],[715,2],[790,2]]},"3779":{"position":[[887,2],[1215,2]]},"3808":{"position":[[2445,2],[2530,2]]},"3812":{"position":[[350,2],[402,2],[618,2]]},"3817":{"position":[[859,2],[1891,2]]},"3821":{"position":[[368,2]]},"3846":{"position":[[531,2]]},"3896":{"position":[[293,2]]},"3914":{"position":[[76,2]]}}}],["25154",{"_index":9304,"t":{"3922":{"position":[[1522,5]]}}}],["253",{"_index":1426,"t":{"190":{"position":[[1148,3]]}}}],["2542",{"_index":6850,"t":{"2731":{"position":[[149,4]]}}}],["2555",{"_index":1431,"t":{"190":{"position":[[1211,4]]}}}],["26",{"_index":2720,"t":{"488":{"position":[[10,2]]},"771":{"position":[[129,2]]},"2823":{"position":[[10,2]]},"2827":{"position":[[25,2]]},"3601":{"position":[[88,2],[201,2],[316,2],[430,2],[551,2],[657,2],[808,2],[963,2],[1108,2],[1259,2],[1408,2]]},"3785":{"position":[[1741,2]]}}}],["2612604",{"_index":9020,"t":{"3874":{"position":[[56,7]]}}}],["2631",{"_index":1443,"t":{"190":{"position":[[1382,4]]}}}],["2636849",{"_index":9021,"t":{"3874":{"position":[[231,7]]}}}],["2654513",{"_index":8767,"t":{"3772":{"position":[[582,7]]}}}],["2670018",{"_index":8769,"t":{"3772":{"position":[[711,7]]}}}],["26b12c0",{"_index":9271,"t":{"3920":{"position":[[1032,7]]}}}],["27",{"_index":2401,"t":{"399":{"position":[[619,2]]},"645":{"position":[[42,2]]},"1125":{"position":[[316,2]]},"1173":{"position":[[214,2],[467,2]]},"1175":{"position":[[232,2],[503,2]]},"1177":{"position":[[214,2],[467,2]]},"1179":{"position":[[290,2],[435,2],[764,2],[920,2]]},"1185":{"position":[[242,2]]},"3812":{"position":[[1521,2],[1544,2],[1594,2],[1976,2],[2017,2],[2237,2]]},"3912":{"position":[[709,2]]},"3916":{"position":[[668,2]]}}}],["27017",{"_index":6733,"t":{"2603":{"position":[[119,5]]}}}],["27283",{"_index":7892,"t":{"3307":{"position":[[237,5]]}}}],["27t13",{"_index":8092,"t":{"3430":{"position":[[2455,5],[2568,5],[2699,5],[2829,5],[2950,5],[3056,5]]}}}],["28",{"_index":4626,"t":{"1511":{"position":[[657,2]]},"1747":{"position":[[40,2]]},"3086":{"position":[[10,2],[19,2]]},"3430":{"position":[[3802,2],[3913,2],[4026,2],[4138,2],[4257,2],[4361,2]]},"3432":{"position":[[5019,2],[5130,2],[5243,2],[5355,2],[5474,2],[5578,2]]},"3768":{"position":[[2631,2],[2703,2]]},"3774":{"position":[[736,2],[809,2]]},"3808":{"position":[[2569,2],[2654,2]]},"3846":{"position":[[677,2]]},"3912":{"position":[[635,2]]},"3916":{"position":[[594,2]]}}}],["28236",{"_index":1375,"t":{"190":{"position":[[413,5]]}}}],["288",{"_index":8402,"t":{"3601":{"position":[[1228,3]]}}}],["2881099",{"_index":6922,"t":{"2768":{"position":[[261,7],[297,7]]}}}],["29",{"_index":2366,"t":{"397":{"position":[[12,2]]},"399":{"position":[[259,2]]},"401":{"position":[[398,2]]},"3432":{"position":[[2667,2],[2787,2],[2908,2],[3014,2]]},"3774":{"position":[[842,2],[914,2],[950,2],[1023,2],[1056,2],[1129,2],[1171,2],[1244,2],[1277,2],[1350,2],[1392,2],[1464,2],[1506,2],[1579,2],[1612,2],[1685,2]]},"3846":{"position":[[800,2]]}}}],["29e47bc",{"_index":9540,"t":{"3936":{"position":[[540,7]]}}}],["2a06c39",{"_index":9341,"t":{"3924":{"position":[[1424,7]]}}}],["2b",{"_index":2046,"t":{"310":{"position":[[537,2],[640,2]]}}}],["2cdef6b",{"_index":9249,"t":{"3918":{"position":[[3893,7]]}}}],["2e3d80",{"_index":9172,"t":{"3916":{"position":[[1443,7]]}}}],["2eb9390",{"_index":9281,"t":{"3920":{"position":[[1826,7]]}}}],["2f328aa",{"_index":9531,"t":{"3936":{"position":[[88,7],[150,7],[221,7]]}}}],["2k",{"_index":7761,"t":{"3250":{"position":[[70,2]]}}}],["2l",{"_index":6324,"t":{"2420":{"position":[[2125,2]]}}}],["3",{"_index":3,"t":{"3":{"position":[[15,1]]},"53":{"position":[[39,1],[125,1]]},"64":{"position":[[52,1],[151,1]]},"75":{"position":[[68,1]]},"77":{"position":[[39,1],[125,1]]},"112":{"position":[[15,1]]},"190":{"position":[[320,1],[635,1],[644,1],[692,1],[855,1],[909,1],[966,1],[1076,1],[1135,1],[1219,1],[1304,1],[1360,1]]},"216":{"position":[[5,1],[25,1]]},"233":{"position":[[127,1],[570,1]]},"235":{"position":[[165,1]]},"314":{"position":[[96,1]]},"316":{"position":[[98,1]]},"340":{"position":[[9,1],[13,1]]},"342":{"position":[[9,1],[13,1]]},"399":{"position":[[849,1]]},"544":{"position":[[156,1]]},"550":{"position":[[471,1],[476,1]]},"587":{"position":[[703,1]]},"597":{"position":[[246,1],[274,1]]},"599":{"position":[[276,1],[304,1]]},"715":{"position":[[113,1],[128,1]]},"763":{"position":[[87,1],[161,1]]},"771":{"position":[[105,1]]},"877":{"position":[[1602,1]]},"1066":{"position":[[386,1]]},"1240":{"position":[[1033,1]]},"1246":{"position":[[19,1],[87,1]]},"1257":{"position":[[372,1]]},"1265":{"position":[[19,1],[87,1]]},"1269":{"position":[[10,1]]},"1412":{"position":[[768,1]]},"1483":{"position":[[724,1]]},"1499":{"position":[[75,1]]},"1528":{"position":[[25,1],[44,1]]},"1635":{"position":[[609,1],[615,1]]},"1641":{"position":[[484,1]]},"1795":{"position":[[744,1],[1029,1],[1042,1],[1057,1],[1075,1],[1088,1],[1353,1],[1400,1],[1478,1],[2331,1]]},"1801":{"position":[[21,1],[3169,1]]},"1803":{"position":[[71,1],[2330,1]]},"1809":{"position":[[383,1]]},"1817":{"position":[[21,1],[23,1],[44,1],[46,1]]},"1819":{"position":[[656,1],[994,1]]},"1845":{"position":[[196,1],[226,1],[469,1],[499,1]]},"1859":{"position":[[188,1],[229,1]]},"1861":{"position":[[76,1],[144,1],[189,1]]},"1869":{"position":[[531,1],[560,1]]},"1873":{"position":[[363,1],[404,1]]},"1875":{"position":[[566,1],[607,1]]},"1887":{"position":[[19,1]]},"1933":{"position":[[820,1]]},"2063":{"position":[[19,1]]},"2098":{"position":[[19,1],[21,1]]},"2144":{"position":[[56,1]]},"2199":{"position":[[96,1],[164,1],[209,1]]},"2259":{"position":[[19,1],[23,1]]},"2261":{"position":[[104,1],[302,1],[456,1]]},"2276":{"position":[[19,1]]},"2315":{"position":[[294,1],[411,1]]},"2418":{"position":[[816,1]]},"2420":{"position":[[643,1],[654,1],[685,1],[698,1],[1134,1],[1287,1],[2030,1],[2176,1],[2271,1]]},"2480":{"position":[[30,1]]},"2486":{"position":[[748,1]]},"2488":{"position":[[56,1]]},"2538":{"position":[[21,1]]},"2635":{"position":[[21,1]]},"2649":{"position":[[153,1],[184,1]]},"2662":{"position":[[21,1]]},"2674":{"position":[[120,1]]},"2723":{"position":[[79,1]]},"2735":{"position":[[24,1]]},"2788":{"position":[[128,1],[147,1]]},"2792":{"position":[[136,1]]},"2803":{"position":[[10,1]]},"2860":{"position":[[19,1],[23,1]]},"2879":{"position":[[401,1]]},"2881":{"position":[[322,1],[326,1],[358,1]]},"3063":{"position":[[1163,1],[1165,1],[1427,1]]},"3067":{"position":[[19,1]]},"3069":{"position":[[12,1]]},"3071":{"position":[[1015,1],[1317,1]]},"3100":{"position":[[13,1]]},"3209":{"position":[[69,1]]},"3250":{"position":[[68,1]]},"3287":{"position":[[1188,1],[1192,1]]},"3339":{"position":[[19,1]]},"3345":{"position":[[19,1]]},"3375":{"position":[[143,1]]},"3381":{"position":[[254,1]]},"3389":{"position":[[1323,1]]},"3391":{"position":[[778,1]]},"3393":{"position":[[1196,1]]},"3416":{"position":[[243,1]]},"3428":{"position":[[19,1]]},"3444":{"position":[[9,1]]},"3446":{"position":[[318,1],[384,1]]},"3448":{"position":[[620,1],[688,1],[902,1],[1044,1],[1112,1]]},"3450":{"position":[[21,1]]},"3464":{"position":[[14,1],[152,1],[350,1],[504,1]]},"3496":{"position":[[232,1]]},"3498":{"position":[[405,1]]},"3528":{"position":[[86,1],[120,1]]},"3541":{"position":[[529,1]]},"3543":{"position":[[492,1]]},"3567":{"position":[[43,1],[152,1],[242,1]]},"3601":{"position":[[1490,1]]},"3664":{"position":[[441,1]]},"3686":{"position":[[22,1],[24,1],[402,1],[404,1]]},"3688":{"position":[[22,1],[24,1],[452,1],[454,1],[456,1]]},"3690":{"position":[[22,1]]},"3692":{"position":[[22,1]]},"3694":{"position":[[22,1]]},"3706":{"position":[[1155,1],[1157,1],[1438,1]]},"3738":{"position":[[160,1],[194,1]]},"3740":{"position":[[288,1],[322,1]]},"3748":{"position":[[73,1],[237,1]]},"3764":{"position":[[188,1]]},"3766":{"position":[[44,1],[224,1],[282,1],[467,1],[677,1],[1039,1],[1260,1],[1375,1]]},"3770":{"position":[[1828,1],[2121,1],[5103,1],[5430,1]]},"3772":{"position":[[994,1]]},"3774":{"position":[[299,1],[1135,1],[1356,1],[1470,1]]},"3783":{"position":[[1074,1]]},"3800":{"position":[[129,1]]},"3806":{"position":[[1785,1],[1793,1]]},"3808":{"position":[[1925,1]]},"3810":{"position":[[891,1]]},"3832":{"position":[[264,1],[364,1]]},"3908":{"position":[[329,1]]},"3912":{"position":[[421,1],[904,1],[1617,1],[2282,1]]},"3914":{"position":[[454,1],[2635,1],[2687,1]]},"3918":{"position":[[454,1]]},"3920":{"position":[[8,1],[82,1]]},"3924":{"position":[[3472,1],[3665,1],[4044,1]]},"3932":{"position":[[1085,1],[2103,1]]},"3934":{"position":[[2730,1]]},"3936":{"position":[[1972,1],[2161,1]]},"3938":{"position":[[533,1]]},"3940":{"position":[[218,1],[1340,1],[1342,1],[1344,1]]},"3944":{"position":[[177,1]]},"3952":{"position":[[537,1]]},"3972":{"position":[[277,1]]},"3990":{"position":[[268,1]]}}}],["30",{"_index":1446,"t":{"190":{"position":[[1420,2]]},"399":{"position":[[752,2]]},"587":{"position":[[544,2],[632,2]]},"734":{"position":[[536,2]]},"877":{"position":[[1443,2],[1539,2],[1647,2],[1755,2],[1863,2]]},"1248":{"position":[[185,2],[289,2]]},"1511":{"position":[[3846,2]]},"2420":{"position":[[492,2],[517,2],[540,2],[555,2],[727,2],[748,2],[757,2],[782,2],[805,2],[814,2],[822,2],[1422,2],[1447,2],[1534,2],[1584,2],[1619,2],[1639,2],[1677,2],[1703,2]]},"2581":{"position":[[1374,2]]},"2751":{"position":[[339,2]]},"3812":{"position":[[2659,2],[2694,2],[2885,2]]},"3912":{"position":[[561,2]]},"3916":{"position":[[520,2]]},"3934":{"position":[[2623,2]]}}}],["300",{"_index":2419,"t":{"401":{"position":[[295,3]]}}}],["3000",{"_index":2387,"t":{"399":{"position":[[84,4]]},"1801":{"position":[[3431,4]]},"2398":{"position":[[154,4]]},"2400":{"position":[[17,4]]},"2402":{"position":[[88,4]]},"2406":{"position":[[161,4],[457,4]]},"2415":{"position":[[163,4]]}}}],["30000",{"_index":5636,"t":{"1803":{"position":[[5661,5]]},"3512":{"position":[[104,5]]}}}],["300000",{"_index":7722,"t":{"3236":{"position":[[585,6]]}}}],["3037b04",{"_index":9077,"t":{"3912":{"position":[[1100,7],[2351,7]]}}}],["3074692",{"_index":8878,"t":{"3806":{"position":[[1841,7]]}}}],["308",{"_index":1435,"t":{"190":{"position":[[1258,3]]}}}],["30dea0c",{"_index":9071,"t":{"3912":{"position":[[790,7],[1996,7]]}}}],["30m",{"_index":5401,"t":{"1747":{"position":[[34,3]]}}}],["31",{"_index":2668,"t":{"482":{"position":[[148,2]]},"771":{"position":[[112,2]]},"1969":{"position":[[20,2]]},"2391":{"position":[[89,2]]},"2418":{"position":[[358,2]]},"3768":{"position":[[2741,2],[2813,2]]},"3802":{"position":[[944,2],[1236,2],[1565,2],[1833,2]]},"3808":{"position":[[2693,2],[2778,2]]},"3817":{"position":[[1155,2],[1447,2],[2157,2],[2425,2]]},"3821":{"position":[[649,2],[917,2]]},"3896":{"position":[[574,2],[842,2]]},"3910":{"position":[[2102,2]]}}}],["3101667",{"_index":8879,"t":{"3806":{"position":[[1983,7]]}}}],["3105d16",{"_index":9452,"t":{"3930":{"position":[[642,7]]}}}],["3106b1d",{"_index":9450,"t":{"3930":{"position":[[483,7]]}}}],["31m",{"_index":800,"t":{"114":{"position":[[623,4]]},"3446":{"position":[[1098,4]]},"3928":{"position":[[1660,4]]}}}],["32",{"_index":3063,"t":{"587":{"position":[[322,2]]},"696":{"position":[[4668,2]]},"708":{"position":[[331,2]]},"851":{"position":[[346,2]]},"1125":{"position":[[130,2]]},"1127":{"position":[[195,2]]},"1185":{"position":[[56,2],[472,2]]},"1681":{"position":[[69,2]]},"2929":{"position":[[739,2]]},"2945":{"position":[[796,2]]},"2959":{"position":[[765,2]]},"3802":{"position":[[1000,2],[1617,2]]},"3817":{"position":[[1211,2],[2209,2]]},"3821":{"position":[[701,2]]},"3896":{"position":[[626,2]]}}}],["3222046",{"_index":8880,"t":{"3806":{"position":[[2125,7]]}}}],["326",{"_index":8404,"t":{"3601":{"position":[[1377,3]]},"3964":{"position":[[250,3]]}}}],["3270737",{"_index":8881,"t":{"3806":{"position":[[2267,7]]}}}],["3282eba",{"_index":9657,"t":{"3952":{"position":[[520,7]]}}}],["3293727",{"_index":8882,"t":{"3806":{"position":[[2409,7]]}}}],["32aa3b6",{"_index":9568,"t":{"3940":{"position":[[153,7]]}}}],["32dfc1",{"_index":9436,"t":{"3928":{"position":[[456,6]]}}}],["33",{"_index":8093,"t":{"3430":{"position":[[2464,2]]},"3806":{"position":[[1835,2],[1920,2],[1977,2],[2062,2],[2119,2],[2204,2],[2261,2],[2346,2],[2403,2],[2488,2]]},"3832":{"position":[[1031,2],[1137,2],[1223,2],[1343,2],[1463,2],[1583,2]]}}}],["3305",{"_index":9305,"t":{"3922":{"position":[[1535,4]]}}}],["3306",{"_index":2801,"t":{"520":{"position":[[122,4]]},"901":{"position":[[122,4]]},"1315":{"position":[[122,4]]}}}],["331",{"_index":9755,"t":{"3962":{"position":[[1307,3]]}}}],["3318716",{"_index":8788,"t":{"3774":{"position":[[956,7]]}}}],["3361",{"_index":1436,"t":{"190":{"position":[[1267,4]]}}}],["33817be",{"_index":9242,"t":{"3918":{"position":[[3466,7],[3497,7],[3521,7]]}}}],["3382344",{"_index":8956,"t":{"3832":{"position":[[1034,7]]}}}],["3382585",{"_index":8786,"t":{"3774":{"position":[[742,7]]}}}],["34",{"_index":8706,"t":{"3768":{"position":[[2851,2],[2924,2]]},"3806":{"position":[[2545,2],[2630,2]]},"3808":{"position":[[2817,2],[2902,2]]},"3832":{"position":[[1257,2]]},"3876":{"position":[[50,2],[135,2],[168,2],[342,2]]}}}],["3447855",{"_index":8957,"t":{"3832":{"position":[[1140,7]]}}}],["345",{"_index":9728,"t":{"3962":{"position":[[370,3]]}}}],["3456789",{"_index":5493,"t":{"1795":{"position":[[1001,7]]}}}],["3457728",{"_index":8790,"t":{"3774":{"position":[[1177,7]]}}}],["3459053",{"_index":8135,"t":{"3432":{"position":[[2670,7]]}}}],["3468",{"_index":1363,"t":{"190":{"position":[[220,4],[275,4]]}}}],["3468100",{"_index":8793,"t":{"3774":{"position":[[1512,7]]}}}],["3472296",{"_index":8883,"t":{"3806":{"position":[[2551,7]]}}}],["348",{"_index":9761,"t":{"3962":{"position":[[1552,3]]}}}],["35",{"_index":6318,"t":{"2420":{"position":[[1537,2],[1587,2]]},"3430":{"position":[[2577,2],[2708,2],[2838,2],[2959,2],[3065,2]]},"3770":{"position":[[3445,2],[3714,2],[3744,2],[3881,2],[4203,2],[4244,2],[4464,2]]},"3772":{"position":[[579,2],[708,2]]},"3783":{"position":[[617,2],[702,2]]},"3832":{"position":[[1377,2]]}}}],["350",{"_index":1430,"t":{"190":{"position":[[1202,3]]}}}],["3504029",{"_index":8794,"t":{"3774":{"position":[[1618,7]]}}}],["350kb",{"_index":9696,"t":{"3958":{"position":[[405,5]]}}}],["354",{"_index":9701,"t":{"3960":{"position":[[154,3]]}}}],["355175938",{"_index":6374,"t":{"2497":{"position":[[146,9]]}}}],["36",{"_index":785,"t":{"114":{"position":[[473,2],[529,2]]},"190":{"position":[[1086,2],[1145,2]]},"3446":{"position":[[948,2],[1004,2]]},"3452":{"position":[[1605,2],[1656,2]]},"3772":{"position":[[855,2],[927,2],[960,2],[1038,2]]},"3832":{"position":[[1497,2],[1617,2],[3211,2],[3317,2]]},"3916":{"position":[[4601,2],[4652,2]]},"3928":{"position":[[1510,2],[1566,2]]}}}],["37",{"_index":8708,"t":{"3768":{"position":[[2962,2],[3035,2]]},"3772":{"position":[[1076,2],[1155,2]]}}}],["373696184",{"_index":5281,"t":{"1691":{"position":[[57,9]]}}}],["3775e65",{"_index":9169,"t":{"3916":{"position":[[1232,7]]}}}],["38",{"_index":3552,"t":{"771":{"position":[[66,2]]},"3601":{"position":[[94,2],[207,2],[322,2],[436,2],[557,2],[663,2]]},"3772":{"position":[[1193,2],[1272,2]]},"3874":{"position":[[50,2],[225,2]]}}}],["383afb88",{"_index":7262,"t":{"2929":{"position":[[440,8]]},"2945":{"position":[[440,8]]},"2959":{"position":[[440,8]]}}}],["39",{"_index":8399,"t":{"3601":{"position":[[814,2],[969,2],[1114,2],[1265,2],[1414,2]]},"3768":{"position":[[3073,2],[3146,2]]},"3770":{"position":[[5066,2],[5332,2],[5393,2],[5714,2],[5749,2],[5940,2]]},"3772":{"position":[[1310,2],[1389,2]]},"3876":{"position":[[53,2],[138,2],[171,2],[345,2]]}}}],["391kb",{"_index":9695,"t":{"3958":{"position":[[395,5]]}}}],["392",{"_index":9660,"t":{"3952":{"position":[[599,3]]}}}],["394ecec",{"_index":9437,"t":{"3928":{"position":[[571,7]]}}}],["3b78999",{"_index":9453,"t":{"3930":{"position":[[716,7]]}}}],["3b9d39c",{"_index":9559,"t":{"3938":{"position":[[458,7]]}}}],["3c0c017",{"_index":9088,"t":{"3912":{"position":[[1938,7]]}}}],["3e2910a",{"_index":9667,"t":{"3954":{"position":[[179,7]]}}}],["3e45020",{"_index":9246,"t":{"3918":{"position":[[3760,7]]}}}],["3eb2",{"_index":6918,"t":{"2768":{"position":[[233,4]]}}}],["3f49055",{"_index":9469,"t":{"3930":{"position":[[1471,7]]}}}],["3rd",{"_index":4787,"t":{"1511":{"position":[[2533,3]]}}}],["3s",{"_index":6280,"t":{"2398":{"position":[[5,2]]},"2406":{"position":[[62,2],[352,2]]},"2415":{"position":[[65,2]]},"3806":{"position":[[3760,2],[3884,2]]},"3808":{"position":[[2415,2],[2539,2],[2663,2],[2787,2],[2911,2]]}}}],["3w",{"_index":6323,"t":{"2420":{"position":[[2019,2]]}}}],["4",{"_index":413,"t":{"51":{"position":[[68,1]]},"190":{"position":[[126,1],[168,1],[209,1],[216,1],[264,1],[271,1],[335,1],[358,1],[495,1],[573,1],[701,1],[796,1],[1012,1],[1044,1],[1243,1]]},"308":{"position":[[191,1],[223,1],[256,1]]},"327":{"position":[[19,1]]},"401":{"position":[[169,1]]},"423":{"position":[[231,1],[235,1]]},"459":{"position":[[29,1]]},"461":{"position":[[254,1],[256,1]]},"467":{"position":[[14,1],[72,1]]},"482":{"position":[[838,1],[986,1]]},"544":{"position":[[154,1]]},"574":{"position":[[26,1]]},"587":{"position":[[242,1],[454,1]]},"734":{"position":[[525,1]]},"877":{"position":[[1710,1]]},"1066":{"position":[[11,1]]},"1248":{"position":[[19,1],[21,1]]},"1483":{"position":[[745,1]]},"1499":{"position":[[83,1]]},"1621":{"position":[[852,1],[919,1]]},"1635":{"position":[[621,1]]},"1641":{"position":[[568,1]]},"1661":{"position":[[663,1]]},"1677":{"position":[[241,1]]},"1691":{"position":[[21,1]]},"1795":{"position":[[742,1],[967,1],[1031,1],[1077,1],[1297,1],[1714,1],[2329,1],[2671,1]]},"1799":{"position":[[956,1]]},"1801":{"position":[[19,1],[23,1],[146,1]]},"1803":{"position":[[5162,1]]},"1815":{"position":[[19,1]]},"1817":{"position":[[19,1],[42,1]]},"1819":{"position":[[19,1]]},"1841":{"position":[[90,1]]},"2065":{"position":[[19,1],[21,1]]},"2169":{"position":[[19,1]]},"2173":{"position":[[19,1]]},"2255":{"position":[[19,1]]},"2357":{"position":[[113,1]]},"2361":{"position":[[89,1]]},"2381":{"position":[[43,1]]},"2391":{"position":[[0,1],[21,1]]},"2418":{"position":[[869,1],[1196,1],[1358,1]]},"2538":{"position":[[19,1]]},"2629":{"position":[[12,1],[130,1]]},"2649":{"position":[[149,1],[180,1]]},"2674":{"position":[[102,1],[124,1]]},"2703":{"position":[[121,1]]},"2723":{"position":[[66,1],[75,1]]},"2725":{"position":[[2650,1]]},"2735":{"position":[[22,1]]},"2780":{"position":[[21,1],[23,1]]},"2877":{"position":[[19,1]]},"2879":{"position":[[399,1]]},"2893":{"position":[[19,1],[23,1]]},"2899":{"position":[[154,1],[439,1]]},"3023":{"position":[[660,1]]},"3063":{"position":[[1429,1]]},"3108":{"position":[[36,1],[51,1],[187,1]]},"3246":{"position":[[11,1]]},"3321":{"position":[[109,1],[178,1]]},"3325":{"position":[[60,1]]},"3375":{"position":[[146,1]]},"3416":{"position":[[299,1]]},"3424":{"position":[[19,1]]},"3430":{"position":[[1830,1],[1914,1],[3453,1],[3558,1],[3667,1],[4528,1]]},"3432":{"position":[[4141,1],[4259,1],[4870,1]]},"3434":{"position":[[2506,1],[2633,1]]},"3446":{"position":[[316,1],[382,1],[448,1],[524,1]]},"3448":{"position":[[105,1],[126,1],[618,1],[686,1],[766,1],[847,1],[900,1],[1042,1],[1110,1],[1190,1]]},"3450":{"position":[[19,1]]},"3452":{"position":[[19,1],[207,1],[319,1]]},"3454":{"position":[[19,1],[42,1]]},"3456":{"position":[[19,1]]},"3466":{"position":[[19,1]]},"3470":{"position":[[120,1]]},"3496":{"position":[[228,1]]},"3498":{"position":[[403,1]]},"3522":{"position":[[7,1],[9,1],[27,1],[29,1],[506,1],[685,1],[1161,1],[1163,1],[1183,1],[1185,1]]},"3541":{"position":[[525,1]]},"3543":{"position":[[490,1]]},"3563":{"position":[[7,1],[9,1],[27,1],[29,1],[631,1],[633,1],[653,1],[655,1]]},"3603":{"position":[[19,1],[23,1]]},"3666":{"position":[[286,1],[288,1]]},"3690":{"position":[[24,1]]},"3698":{"position":[[24,1]]},"3700":{"position":[[19,1]]},"3706":{"position":[[1440,1]]},"3708":{"position":[[1462,1],[1824,1],[2289,1]]},"3716":{"position":[[19,1],[21,1],[23,1]]},"3722":{"position":[[19,1]]},"3758":{"position":[[51,1],[73,1],[142,1]]},"3783":{"position":[[1195,1]]},"3800":{"position":[[142,1]]},"3806":{"position":[[766,1],[1885,1],[2311,1],[2595,1],[3713,1]]},"3846":{"position":[[593,1]]},"3910":{"position":[[394,1],[428,1],[465,1],[508,1],[561,1],[604,1],[649,1],[1048,1],[1431,1],[1494,1],[2154,1],[2207,1],[2262,1],[2367,1],[2434,1],[2498,1]]},"3912":{"position":[[750,1],[784,1],[839,1],[900,1],[960,1],[1036,1],[1094,1],[1198,1],[1272,1],[1317,1],[1516,1],[1547,1],[1613,1],[1856,1],[1932,1],[1990,1],[2063,1],[2129,1],[2198,1],[2278,1],[2345,1],[2414,1],[2462,1],[2501,1],[2540,1]]},"3914":{"position":[[380,1],[786,1],[864,1],[897,1],[947,1],[1020,1],[1094,1],[1128,1],[1178,1],[1229,1],[1302,1],[1353,1],[1425,1],[1496,1],[1500,1],[1504,1],[1573,1],[1606,1],[2116,1],[2120,1],[2380,1],[2419,1],[2466,1],[2503,1],[2560,1],[2631,1],[2683,1],[2735,1],[2791,1],[2883,1],[2940,1],[3004,1],[3064,1],[3109,1],[3245,1],[3314,1],[3358,1],[3362,1]]},"3916":{"position":[[380,1],[715,1],[751,1],[806,1],[844,1],[899,1],[932,1],[982,1],[1044,1],[1101,1],[1105,1],[1164,1],[1168,1],[1226,1],[1266,1],[1317,1],[1369,1],[1437,1],[1441,1],[1503,1],[1604,1],[1608,1],[1959,1],[2004,1],[2057,1],[2077,1],[2105,1],[2183,1],[2187,1],[2249,1],[2318,1],[2371,1],[2409,1],[2454,1],[2504,1],[2563,1],[2631,1],[2689,1],[2736,1]]},"3918":{"position":[[8,1],[82,1],[156,1],[230,1],[304,1],[378,1],[380,1],[452,1],[526,1],[600,1],[674,1],[785,1],[787,1],[1268,1],[1270,1],[3033,1],[3035,1],[3754,1],[3756,1],[3801,1],[3803,1],[3848,1],[3850,1],[3887,1],[3889,1],[4082,1],[4084,1],[4112,1],[4114,1]]},"3966":{"position":[[1225,1]]},"3976":{"position":[[556,1]]},"3986":{"position":[[181,1]]}}}],["40",{"_index":8668,"t":{"3766":{"position":[[327,2],[400,2]]},"3772":{"position":[[1427,2],[1506,2]]},"3783":{"position":[[737,2],[822,2]]}}}],["400",{"_index":2425,"t":{"401":{"position":[[423,3]]},"1863":{"position":[[183,3],[295,3]]},"1887":{"position":[[295,3]]},"3047":{"position":[[79,3],[139,3]]},"3656":{"position":[[228,3]]},"3956":{"position":[[61,3]]}}}],["4000",{"_index":2391,"t":{"399":{"position":[[185,4]]}}}],["401",{"_index":905,"t":{"121":{"position":[[424,3]]},"1911":{"position":[[55,3]]},"3049":{"position":[[52,3],[86,3],[103,3]]},"3063":{"position":[[1319,3]]},"3686":{"position":[[491,3],[591,3],[921,3],[1295,3]]},"3706":{"position":[[1244,3],[1330,3]]},"3708":{"position":[[2732,3],[2859,3],[3877,3]]},"3914":{"position":[[2996,3]]},"3956":{"position":[[2080,3],[2203,3]]},"3992":{"position":[[2154,3]]},"3994":{"position":[[1010,3]]}}}],["403",{"_index":7304,"t":{"3049":{"position":[[57,3],[98,3]]},"3708":{"position":[[2948,3],[3072,3],[3883,3]]},"3956":{"position":[[2292,3],[2412,3]]},"3994":{"position":[[1014,3]]},"4000":{"position":[[892,3]]}}}],["4034",{"_index":1389,"t":{"190":{"position":[[605,4]]}}}],["404",{"_index":5972,"t":{"2100":{"position":[[18,3]]},"3047":{"position":[[84,3],[144,3]]},"3337":{"position":[[63,3]]},"3339":{"position":[[247,3]]},"3624":{"position":[[132,3]]},"3708":{"position":[[3887,3]]},"3914":{"position":[[2876,3]]},"3942":{"position":[[340,3]]},"3950":{"position":[[111,3],[504,3],[811,3]]},"3960":{"position":[[72,3]]}}}],["405",{"_index":4359,"t":{"1468":{"position":[[388,3]]}}}],["4096",{"_index":9713,"t":{"3960":{"position":[[666,4]]}}}],["41",{"_index":8712,"t":{"3770":{"position":[[397,2],[662,2],[947,2],[1202,2]]},"3772":{"position":[[1544,2],[1623,2],[1661,2],[1734,2]]},"3812":{"position":[[2662,2],[2888,2]]},"3828":{"position":[[965,2],[1070,2],[1155,2],[1188,2]]}}}],["413",{"_index":5405,"t":{"1747":{"position":[[156,3]]}}}],["4149299",{"_index":8822,"t":{"3785":{"position":[[346,7]]}}}],["41764",{"_index":6879,"t":{"2749":{"position":[[598,5]]},"3080":{"position":[[1166,5]]}}}],["42",{"_index":1340,"t":{"188":{"position":[[424,2]]},"3770":{"position":[[993,2]]},"3772":{"position":[[1767,2],[1846,2]]}}}],["4200",{"_index":2465,"t":{"413":{"position":[[188,4]]},"2993":{"position":[[88,4]]}}}],["4217342",{"_index":8959,"t":{"3832":{"position":[[1260,7]]}}}],["423",{"_index":6727,"t":{"2597":{"position":[[124,3]]},"3950":{"position":[[248,3]]}}}],["42446078",{"_index":9285,"t":{"3922":{"position":[[207,8]]}}}],["4250",{"_index":1437,"t":{"190":{"position":[[1277,4]]}}}],["426",{"_index":9646,"t":{"3950":{"position":[[826,3]]}}}],["427999a",{"_index":9492,"t":{"3934":{"position":[[82,7]]}}}],["429",{"_index":9647,"t":{"3950":{"position":[[862,3]]}}}],["42ebdfd",{"_index":9472,"t":{"3932":{"position":[[109,7],[157,7]]}}}],["43",{"_index":8781,"t":{"3772":{"position":[[1884,2],[1963,2]]},"3806":{"position":[[3663,2],[3748,2],[3787,2],[3872,2]]}}}],["432",{"_index":9635,"t":{"3950":{"position":[[293,3]]}}}],["43200",{"_index":1104,"t":{"144":{"position":[[333,5]]},"2134":{"position":[[63,5]]}}}],["433",{"_index":9648,"t":{"3950":{"position":[[898,3]]}}}],["435",{"_index":9626,"t":{"3948":{"position":[[535,3]]}}}],["436",{"_index":9625,"t":{"3948":{"position":[[466,3]]}}}],["438",{"_index":9619,"t":{"3948":{"position":[[338,3]]}}}],["44",{"_index":8657,"t":{"3764":{"position":[[154,2],[228,2]]},"3772":{"position":[[2001,2],[2080,2]]}}}],["443",{"_index":4155,"t":{"1377":{"position":[[154,3]]},"1379":{"position":[[595,3]]}}}],["44313",{"_index":7267,"t":{"2929":{"position":[[513,5]]},"2945":{"position":[[513,5]]},"2959":{"position":[[513,5]]}}}],["44316",{"_index":775,"t":{"114":{"position":[[327,5],[385,5]]},"316":{"position":[[664,5]]},"3446":{"position":[[802,5],[860,5]]},"3916":{"position":[[7196,5],[7801,5],[8652,5]]},"3928":{"position":[[1364,5],[1422,5]]},"3934":{"position":[[1633,5]]}}}],["44342",{"_index":2084,"t":{"314":{"position":[[725,5]]}}}],["44d4",{"_index":6919,"t":{"2768":{"position":[[238,4]]}}}],["45",{"_index":2688,"t":{"482":{"position":[[630,2]]},"606":{"position":[[1149,2]]},"771":{"position":[[115,2]]},"2418":{"position":[[937,2]]},"2420":{"position":[[311,2],[326,2]]},"3764":{"position":[[266,2],[341,2]]},"3766":{"position":[[324,2],[397,2],[430,2],[433,2],[502,2],[505,2],[535,2],[607,2],[640,2],[712,2]]},"3783":{"position":[[857,2],[943,2]]}}}],["452",{"_index":9595,"t":{"3944":{"position":[[108,3]]}}}],["4570694",{"_index":8886,"t":{"3806":{"position":[[3669,7]]}}}],["4591328",{"_index":8872,"t":{"3806":{"position":[[579,7]]}}}],["46",{"_index":6313,"t":{"2420":{"position":[[845,2],[862,2]]},"3764":{"position":[[379,2],[454,2]]},"3766":{"position":[[745,2],[818,2],[854,2],[927,2],[960,2],[1033,2],[1075,2],[1148,2],[1181,2],[1254,2],[1296,2],[1369,2],[1411,2],[1483,2],[1516,2],[1589,2],[1622,2],[1694,2]]},"3806":{"position":[[1838,2],[1923,2]]},"3812":{"position":[[2697,2]]}}}],["462",{"_index":9592,"t":{"3944":{"position":[[26,3]]}}}],["46205",{"_index":1370,"t":{"190":{"position":[[344,5]]}}}],["46214",{"_index":1372,"t":{"190":{"position":[[367,5]]}}}],["4629078",{"_index":8887,"t":{"3806":{"position":[[3793,7]]}}}],["463",{"_index":9591,"t":{"3942":{"position":[[474,3]]}}}],["466e",{"_index":4402,"t":{"1483":{"position":[[315,4]]}}}],["467",{"_index":9587,"t":{"3942":{"position":[[307,3]]}}}],["4677716",{"_index":8873,"t":{"3806":{"position":[[722,7]]}}}],["47",{"_index":8353,"t":{"3575":{"position":[[575,2]]},"3764":{"position":[[492,2],[567,2]]},"3779":{"position":[[890,2],[1218,2]]},"3785":{"position":[[343,2],[1744,2]]},"3812":{"position":[[1524,2],[1597,2],[1979,2],[2240,2]]},"3817":{"position":[[862,2],[1894,2]]},"3821":{"position":[[371,2]]},"3896":{"position":[[296,2]]}}}],["4726416",{"_index":8870,"t":{"3806":{"position":[[436,7]]}}}],["4726987",{"_index":8874,"t":{"3806":{"position":[[865,7]]}}}],["4753a1a",{"_index":9665,"t":{"3954":{"position":[[126,7]]}}}],["4763941",{"_index":9000,"t":{"3846":{"position":[[537,7]]}}}],["47a5fcb",{"_index":9079,"t":{"3912":{"position":[[1209,7]]}}}],["48",{"_index":8663,"t":{"3764":{"position":[[605,2],[680,2]]},"3783":{"position":[[614,2],[699,2],[734,2],[819,2],[854,2],[940,2],[975,2],[1061,2],[1096,2],[1182,2]]},"3850":{"position":[[117,2],[292,2]]}}}],["4827028",{"_index":8875,"t":{"3806":{"position":[[1009,7]]}}}],["4838792",{"_index":9012,"t":{"3854":{"position":[[125,7]]}}}],["486",{"_index":9547,"t":{"3936":{"position":[[870,3]]}}}],["49",{"_index":1425,"t":{"190":{"position":[[1118,2],[1177,2]]},"3764":{"position":[[718,2],[793,2]]},"3768":{"position":[[615,2],[687,2]]},"3806":{"position":[[1980,2],[2065,2]]},"3828":{"position":[[968,2],[1073,2],[1158,2],[1191,2]]}}}],["4936247",{"_index":8876,"t":{"3806":{"position":[[1152,7]]}}}],["494",{"_index":9494,"t":{"3934":{"position":[[173,3],[554,3],[1053,3],[1172,3]]}}}],["4948832",{"_index":8890,"t":{"3808":{"position":[[1221,7]]}}}],["495",{"_index":9502,"t":{"3934":{"position":[[627,3]]}}}],["4952165",{"_index":8960,"t":{"3832":{"position":[[1380,7]]}}}],["4996105",{"_index":7435,"t":{"3112":{"position":[[91,7]]}}}],["4a11e7c",{"_index":9578,"t":{"3940":{"position":[[637,7]]}}}],["4a3da4b",{"_index":9653,"t":{"3952":{"position":[[141,7]]}}}],["4a4fe1f",{"_index":9666,"t":{"3954":{"position":[[147,7],[248,7],[668,7],[695,7]]}}}],["4a76841",{"_index":9129,"t":{"3914":{"position":[[2425,7]]}}}],["4bbd854",{"_index":9306,"t":{"3922":{"position":[[1636,7]]}}}],["4ff03c5",{"_index":9324,"t":{"3924":{"position":[[253,7]]}}}],["4l",{"_index":6317,"t":{"2420":{"position":[[1331,2]]}}}],["5",{"_index":448,"t":{"57":{"position":[[38,1],[90,1],[126,1]]},"60":{"position":[[26,1]]},"62":{"position":[[18,1]]},"64":{"position":[[22,1],[66,1],[165,1]]},"85":{"position":[[20,1],[45,1],[67,1]]},"100":{"position":[[31,1]]},"112":{"position":[[13,1]]},"114":{"position":[[423,1]]},"127":{"position":[[1228,1],[1257,1]]},"148":{"position":[[251,1]]},"152":{"position":[[716,1]]},"461":{"position":[[177,1]]},"469":{"position":[[20,1]]},"482":{"position":[[542,1],[551,1],[606,1],[616,1],[664,1],[676,1],[815,1],[847,1],[868,1],[887,1]]},"574":{"position":[[24,1]]},"593":{"position":[[60,1]]},"659":{"position":[[22,1]]},"713":{"position":[[428,1]]},"722":{"position":[[49,1]]},"771":{"position":[[233,1]]},"826":{"position":[[8,1]]},"877":{"position":[[1818,1]]},"897":{"position":[[265,1]]},"1010":{"position":[[21,1]]},"1248":{"position":[[23,1]]},"1309":{"position":[[429,1]]},"1377":{"position":[[118,1]]},"1379":{"position":[[135,1],[533,1]]},"1483":{"position":[[87,1],[382,1],[851,1]]},"1503":{"position":[[106,1]]},"1509":{"position":[[42,1]]},"1511":{"position":[[1684,1],[3476,1],[3608,1]]},"1641":{"position":[[486,1]]},"1665":{"position":[[367,1]]},"1715":{"position":[[21,1]]},"1971":{"position":[[32,1]]},"2065":{"position":[[23,1]]},"2228":{"position":[[44,1]]},"2259":{"position":[[21,1]]},"2261":{"position":[[102,1],[300,1]]},"2357":{"position":[[117,1]]},"2361":{"position":[[93,1]]},"2363":{"position":[[180,1]]},"2385":{"position":[[121,1]]},"2387":{"position":[[125,1]]},"2418":{"position":[[20,1],[841,1],[850,1],[913,1],[923,1],[950,1],[979,1],[990,1],[1172,1],[1205,1],[1229,1],[1249,1]]},"2420":{"position":[[359,1],[371,1],[449,1],[461,1],[504,1],[1209,1],[1228,1],[1370,1],[1389,1],[1476,1],[1496,1],[1529,1],[1573,1],[1624,1],[1768,1],[1873,1]]},"2856":{"position":[[2079,1]]},"2862":{"position":[[12,1],[52,1]]},"2879":{"position":[[403,1]]},"3039":{"position":[[365,1]]},"3041":{"position":[[439,1],[468,1]]},"3067":{"position":[[21,1]]},"3069":{"position":[[258,1]]},"3071":{"position":[[12,1],[1013,1],[1315,1]]},"3086":{"position":[[22,1]]},"3138":{"position":[[253,1]]},"3142":{"position":[[276,1]]},"3375":{"position":[[162,1]]},"3416":{"position":[[364,1]]},"3418":{"position":[[7,1],[57,1]]},"3430":{"position":[[1832,1],[1916,1],[3455,1],[3669,1],[4530,1]]},"3432":{"position":[[4143,1],[4872,1]]},"3434":{"position":[[2508,1]]},"3446":{"position":[[450,1],[898,1]]},"3448":{"position":[[768,1]]},"3452":{"position":[[21,1],[1555,1]]},"3454":{"position":[[21,1],[44,1]]},"3464":{"position":[[12,1],[150,1],[348,1]]},"3522":{"position":[[508,1],[687,1]]},"3579":{"position":[[395,1],[498,1]]},"3692":{"position":[[24,1]]},"3694":{"position":[[24,1]]},"3740":{"position":[[651,1],[685,1]]},"3762":{"position":[[912,1]]},"3766":{"position":[[31,1],[171,1],[204,1]]},"3768":{"position":[[2665,1]]},"3770":{"position":[[431,1]]},"3772":{"position":[[230,1],[638,1],[767,1],[889,1]]},"3774":{"position":[[218,1],[879,1]]},"3781":{"position":[[711,1]]},"3783":{"position":[[664,1]]},"3800":{"position":[[171,1]]},"3802":{"position":[[827,1],[1460,1]]},"3804":{"position":[[253,1],[561,1]]},"3808":{"position":[[161,1],[649,1],[684,1],[3289,1]]},"3810":{"position":[[646,1],[705,1]]},"3812":{"position":[[245,1],[1480,1],[1862,1],[2570,1]]},"3817":{"position":[[372,1],[1038,1],[2052,1]]},"3821":{"position":[[544,1]]},"3896":{"position":[[469,1]]},"3912":{"position":[[347,1],[964,1],[1520,1],[1551,1]]},"3914":{"position":[[306,1],[1024,1],[1098,1],[1306,1],[1429,1],[1577,1],[2382,1],[2739,1],[2795,1]]},"3916":{"position":[[8,1],[82,1],[156,1],[230,1],[304,1],[306,1],[378,1],[452,1],[526,1],[600,1],[717,1],[753,1],[808,1],[846,1],[901,1],[934,1],[984,1],[1046,1],[1103,1],[1166,1],[1228,1],[1268,1],[1319,1],[1371,1],[1439,1],[1505,1],[1606,1],[1961,1],[2006,1],[2059,1],[2107,1],[2185,1],[2251,1],[2253,1],[2271,1],[2320,1],[2373,1],[2411,1],[2456,1],[2506,1],[2565,1],[2633,1],[2691,1],[2738,1],[4551,1]]},"3918":{"position":[[306,1]]},"3920":{"position":[[1859,1]]},"3928":{"position":[[1460,1]]},"3930":{"position":[[1158,1]]},"3936":{"position":[[1970,1],[2159,1]]},"3940":{"position":[[347,1]]},"3946":{"position":[[170,1]]},"3948":{"position":[[203,1]]},"3960":{"position":[[183,1]]},"3966":{"position":[[1273,1]]},"3970":{"position":[[110,1],[118,1]]},"3980":{"position":[[14,1],[195,1],[203,1],[207,1],[528,1],[671,1]]},"3986":{"position":[[169,1],[177,1]]},"3990":{"position":[[14,1],[253,1],[264,1],[624,1]]},"3992":{"position":[[994,1],[1007,1]]},"3996":{"position":[[363,1],[376,1]]},"4004":{"position":[[48,1]]},"4006":{"position":[[193,1]]}}}],["50",{"_index":1393,"t":{"190":{"position":[[675,2]]},"1511":{"position":[[877,2],[1231,2],[1891,2],[2118,2],[2414,2],[2560,2],[2581,2],[2603,2],[2678,2],[2779,2],[2907,2],[3637,2],[3745,2],[3945,2],[3958,2],[4126,2]]},"1635":{"position":[[582,2]]},"3766":{"position":[[538,2],[610,2]]},"3768":{"position":[[725,2],[803,2]]},"3783":{"position":[[978,2],[1064,2]]}}}],["500",{"_index":3541,"t":{"769":{"position":[[45,3],[104,3],[175,3],[274,3],[370,3],[548,3]]},"1281":{"position":[[93,3]]},"1511":{"position":[[974,3]]},"1747":{"position":[[162,3]]},"1837":{"position":[[32,3]]}}}],["5000",{"_index":2390,"t":{"399":{"position":[[140,4],[336,4]]},"419":{"position":[[441,4]]},"1377":{"position":[[432,4]]},"1511":{"position":[[1383,4]]},"1869":{"position":[[147,4],[550,4],[571,4]]},"2468":{"position":[[44,4]]},"2749":{"position":[[855,4],[879,4]]},"2875":{"position":[[20,4]]},"2929":{"position":[[685,4]]},"2945":{"position":[[742,4]]},"2959":{"position":[[711,4]]},"3015":{"position":[[77,4]]},"3017":{"position":[[51,4]]},"3080":{"position":[[583,4]]},"3430":{"position":[[233,4],[2810,4],[4119,4]]},"3432":{"position":[[5336,4]]},"3601":{"position":[[411,4]]},"3766":{"position":[[160,4]]},"3804":{"position":[[175,4],[489,4]]},"3808":{"position":[[123,4]]},"3810":{"position":[[132,4],[372,4],[407,4]]}}}],["50000",{"_index":4422,"t":{"1485":{"position":[[30,5],[36,5]]}}}],["5000m",{"_index":8672,"t":{"3766":{"position":[[403,6],[508,6],[613,6],[718,6],[933,6],[1154,6],[1489,6],[1595,6],[1700,6]]},"3772":{"position":[[930,6],[1737,6]]},"3774":{"position":[[815,6],[1029,6],[1250,6],[1585,6],[1691,6]]},"3783":{"position":[[705,6],[825,6],[946,6],[1067,6],[1188,6]]},"3808":{"position":[[1188,6],[1306,6],[1666,6]]},"3828":{"position":[[1161,6]]},"3852":{"position":[[209,6]]},"3854":{"position":[[211,6]]},"3876":{"position":[[141,6]]}}}],["5001",{"_index":2490,"t":{"419":{"position":[[57,4],[450,4]]},"1869":{"position":[[173,4]]},"2751":{"position":[[435,4]]},"2875":{"position":[[25,4]]},"3017":{"position":[[77,4]]},"3075":{"position":[[30,4]]},"3430":{"position":[[156,4],[2680,4],[4007,4]]},"3432":{"position":[[5224,4]]},"3452":{"position":[[1391,4],[1456,4]]},"3601":{"position":[[297,4]]},"3702":{"position":[[1000,4],[1054,4]]},"3916":{"position":[[4387,4],[4452,4]]}}}],["5002",{"_index":5748,"t":{"1869":{"position":[[203,4]]},"3017":{"position":[[107,4]]}}}],["5019",{"_index":1401,"t":{"190":{"position":[[774,4]]}}}],["5027217",{"_index":8889,"t":{"3808":{"position":[[1103,7]]}}}],["5060",{"_index":790,"t":{"114":{"position":[[509,4]]},"3446":{"position":[[984,4]]},"3928":{"position":[[1546,4]]}}}],["50628374",{"_index":6260,"t":{"2383":{"position":[[186,8]]}}}],["50631270",{"_index":6263,"t":{"2383":{"position":[[276,8],[285,8]]}}}],["5077c5d",{"_index":9467,"t":{"3930":{"position":[[1411,7]]}}}],["509",{"_index":1419,"t":{"190":{"position":[[1027,3]]}}}],["5094807",{"_index":8893,"t":{"3808":{"position":[[1581,7]]}}}],["50px",{"_index":6403,"t":{"2532":{"position":[[68,4]]}}}],["51",{"_index":8691,"t":{"3768":{"position":[[920,2],[998,2]]},"3852":{"position":[[206,2]]}}}],["512",{"_index":5254,"t":{"1685":{"position":[[454,3]]}}}],["516",{"_index":9484,"t":{"3932":{"position":[[1223,3]]}}}],["518",{"_index":9457,"t":{"3930":{"position":[[821,3]]}}}],["52",{"_index":8693,"t":{"3768":{"position":[[1115,2],[1187,2]]},"3806":{"position":[[2122,2],[2207,2]]},"3812":{"position":[[1547,2],[2020,2]]},"3852":{"position":[[120,2]]}}}],["520",{"_index":9462,"t":{"3930":{"position":[[1106,3]]}}}],["5234",{"_index":9521,"t":{"3934":{"position":[[1981,4],[2015,4],[2049,4]]}}}],["5258191",{"_index":8669,"t":{"3766":{"position":[[330,7]]}}}],["5265246",{"_index":9009,"t":{"3852":{"position":[[242,7]]}}}],["5281473",{"_index":8673,"t":{"3766":{"position":[[436,7]]}}}],["52abp",{"_index":6945,"t":{"2768":{"position":[[679,5]]}}}],["53",{"_index":1397,"t":{"190":{"position":[[732,2]]},"3452":{"position":[[1674,2]]},"3768":{"position":[[1225,2],[1303,2]]},"3916":{"position":[[4670,2]]}}}],["537",{"_index":784,"t":{"114":{"position":[[469,3],[525,3]]},"3446":{"position":[[944,3],[1000,3]]},"3452":{"position":[[1601,3],[1652,3]]},"3916":{"position":[[4597,3],[4648,3]]},"3928":{"position":[[1506,3],[1562,3]]}}}],["5378417",{"_index":8674,"t":{"3766":{"position":[[541,7]]}}}],["5380f35",{"_index":9339,"t":{"3924":{"position":[[1293,7]]}}}],["54",{"_index":8696,"t":{"3768":{"position":[[1420,2],[1498,2]]},"3772":{"position":[[576,2],[705,2],[852,2],[924,2],[957,2],[1035,2],[1073,2],[1152,2],[1190,2],[1269,2],[1307,2],[1386,2],[1424,2],[1503,2],[1541,2],[1620,2],[1658,2],[1731,2],[1764,2],[1843,2],[1881,2],[1960,2],[1998,2],[2077,2]]},"3808":{"position":[[1100,2],[1185,2]]},"3852":{"position":[[239,2],[413,2]]}}}],["5432",{"_index":2813,"t":{"520":{"position":[[429,4]]},"901":{"position":[[457,4]]},"1315":{"position":[[457,4]]}}}],["5436499",{"_index":8675,"t":{"3766":{"position":[[646,7]]}}}],["545",{"_index":9267,"t":{"3920":{"position":[[599,3]]}}}],["547",{"_index":9278,"t":{"3920":{"position":[[1706,3]]}}}],["5494676",{"_index":8677,"t":{"3766":{"position":[[860,7]]}}}],["55",{"_index":8198,"t":{"3452":{"position":[[2003,2]]},"3766":{"position":[[643,2],[715,2]]},"3768":{"position":[[1615,2],[1688,2]]},"3783":{"position":[[1099,2],[1185,2]]},"3806":{"position":[[2264,2],[2349,2]]},"3850":{"position":[[120,2]]},"3916":{"position":[[4999,2]]}}}],["5535267",{"_index":9010,"t":{"3852":{"position":[[416,7]]}}}],["56",{"_index":3559,"t":{"771":{"position":[[240,2]]},"3762":{"position":[[545,2],[618,2]]},"3768":{"position":[[1726,2],[1805,2]]},"3774":{"position":[[739,2],[812,2]]},"3785":{"position":[[340,2]]},"3802":{"position":[[947,2],[1239,2],[1568,2],[1836,2]]},"3817":{"position":[[1158,2],[1450,2],[2160,2],[2428,2]]},"3821":{"position":[[652,2],[920,2]]},"3846":{"position":[[680,2]]},"3850":{"position":[[295,2]]},"3896":{"position":[[577,2],[845,2]]}}}],["5609135",{"_index":9022,"t":{"3876":{"position":[[56,7]]}}}],["562",{"_index":9236,"t":{"3918":{"position":[[3281,3]]}}}],["5629293",{"_index":8681,"t":{"3766":{"position":[[1081,7]]}}}],["5647151",{"_index":9023,"t":{"3876":{"position":[[174,7]]}}}],["565",{"_index":9210,"t":{"3918":{"position":[[862,3]]}}}],["565728589",{"_index":4687,"t":{"1511":{"position":[[1337,9]]}}}],["5682460",{"_index":9024,"t":{"3876":{"position":[[348,7]]}}}],["57",{"_index":8651,"t":{"3762":{"position":[[656,2],[729,2]]},"3768":{"position":[[612,2],[684,2],[722,2],[800,2],[917,2],[995,2],[1112,2],[1184,2],[1222,2],[1300,2],[1417,2],[1495,2],[1612,2],[1685,2],[1723,2],[1802,2],[1919,2],[1922,2],[1998,2],[2001,2],[2115,2],[2188,2],[2226,2],[2305,2]]}}}],["5719440",{"_index":8961,"t":{"3832":{"position":[[1500,7]]}}}],["5731138",{"_index":8684,"t":{"3766":{"position":[[1417,7]]}}}],["574",{"_index":1414,"t":{"190":{"position":[[968,3]]}}}],["574eeb6",{"_index":9442,"t":{"3930":{"position":[[273,7],[582,7],[962,7]]}}}],["5787",{"_index":1420,"t":{"190":{"position":[[1036,4]]}}}],["58",{"_index":1433,"t":{"190":{"position":[[1231,2]]},"3762":{"position":[[767,2],[840,2]]},"3768":{"position":[[2118,2],[2191,2]]},"3806":{"position":[[2406,2],[2491,2]]}}}],["580",{"_index":9245,"t":{"3918":{"position":[[3707,3]]}}}],["5827366",{"_index":8137,"t":{"3432":{"position":[[2790,7]]}}}],["5828798",{"_index":8138,"t":{"3432":{"position":[[2911,7]]}}}],["5829377",{"_index":8139,"t":{"3432":{"position":[[3017,7]]}}}],["5834532",{"_index":8989,"t":{"3842":{"position":[[291,7],[921,7],[1486,7],[2076,7],[2717,7],[3334,7]]}}}],["5841547",{"_index":8685,"t":{"3766":{"position":[[1522,7]]}}}],["5866898",{"_index":8686,"t":{"3766":{"position":[[1628,7]]}}}],["5868",{"_index":1448,"t":{"190":{"position":[[1432,4]]}}}],["587",{"_index":2569,"t":{"445":{"position":[[272,3]]}}}],["5876747",{"_index":8990,"t":{"3842":{"position":[[435,7],[1065,7],[1630,7],[2220,7],[2861,7],[3478,7]]}}}],["59",{"_index":2667,"t":{"482":{"position":[[22,2],[107,2]]},"2418":{"position":[[253,2],[287,2]]},"2420":{"position":[[1246,2]]},"3762":{"position":[[878,2],[950,2]]},"3768":{"position":[[2229,2],[2308,2]]},"3808":{"position":[[1218,2],[1303,2]]}}}],["5958395",{"_index":8094,"t":{"3430":{"position":[[2467,7]]}}}],["59c695353bc0",{"_index":7272,"t":{"2929":{"position":[[636,12]]},"2945":{"position":[[693,12]]},"2959":{"position":[[662,12]]}}}],["5f06880",{"_index":9546,"t":{"3936":{"position":[[813,7]]}}}],["5fafc84",{"_index":9220,"t":{"3918":{"position":[[1150,7],[1467,7]]}}}],["5l",{"_index":2691,"t":{"482":{"position":[[728,2]]},"2418":{"position":[[1066,2]]}}}],["5w",{"_index":2699,"t":{"482":{"position":[[809,2]]},"2418":{"position":[[1166,2]]}}}],["6",{"_index":381,"t":{"44":{"position":[[28,1],[103,1]]},"46":{"position":[[16,1],[82,1]]},"51":{"position":[[8,1]]},"57":{"position":[[28,1],[116,1]]},"60":{"position":[[16,1],[82,1]]},"62":{"position":[[8,1]]},"68":{"position":[[28,1],[38,1],[103,1],[113,1]]},"70":{"position":[[16,1],[26,1],[82,1]]},"75":{"position":[[8,1],[18,1]]},"95":{"position":[[14,1]]},"148":{"position":[[253,1]]},"190":{"position":[[493,1]]},"216":{"position":[[3,1],[23,1]]},"423":{"position":[[218,1]]},"469":{"position":[[24,1],[35,1]]},"482":{"position":[[207,1],[856,1]]},"722":{"position":[[66,1]]},"734":{"position":[[7,1],[442,1],[521,1]]},"739":{"position":[[18,1]]},"777":{"position":[[35,1]]},"1323":{"position":[[35,1]]},"1412":{"position":[[772,1]]},"1483":{"position":[[885,1]]},"1511":{"position":[[1563,1]]},"1551":{"position":[[1082,1]]},"1633":{"position":[[14,1]]},"1635":{"position":[[14,1],[438,1]]},"1677":{"position":[[245,1]]},"1799":{"position":[[960,1]]},"1801":{"position":[[144,1]]},"1819":{"position":[[21,1]]},"1881":{"position":[[25,1]]},"1887":{"position":[[21,1]]},"1947":{"position":[[231,1]]},"1965":{"position":[[103,1]]},"1985":{"position":[[32,1]]},"2063":{"position":[[21,1]]},"2276":{"position":[[23,1]]},"2343":{"position":[[265,1]]},"2357":{"position":[[115,1]]},"2361":{"position":[[91,1]]},"2363":{"position":[[231,1]]},"2418":{"position":[[24,1],[35,1],[1008,1],[1216,1]]},"2420":{"position":[[687,1],[703,1],[785,1],[1826,1],[2174,1]]},"2555":{"position":[[263,1]]},"2557":{"position":[[137,1]]},"2573":{"position":[[291,1]]},"2664":{"position":[[45,1]]},"2674":{"position":[[100,1],[122,1],[444,1]]},"2745":{"position":[[23,1]]},"2860":{"position":[[21,1]]},"2862":{"position":[[26,1],[204,1]]},"3189":{"position":[[511,1]]},"3440":{"position":[[10,1]]},"3452":{"position":[[2678,1]]},"3456":{"position":[[21,1]]},"3466":{"position":[[21,1]]},"3593":{"position":[[22,1],[24,1]]},"3601":{"position":[[1189,1],[1341,1]]},"3698":{"position":[[22,1]]},"3708":{"position":[[1464,1],[1466,1],[1826,1],[1828,1],[2291,1],[2293,1]]},"3722":{"position":[[21,1],[23,1]]},"3740":{"position":[[653,1],[694,1]]},"3800":{"position":[[213,1]]},"3806":{"position":[[623,1],[2027,1],[2453,1]]},"3808":{"position":[[1383,1],[2616,1],[2864,1]]},"3912":{"position":[[273,1],[1040,1],[1321,1],[1500,1]]},"3914":{"position":[[8,1],[82,1],[156,1],[230,1],[232,1],[304,1],[378,1],[452,1],[526,1],[600,1],[674,1],[788,1],[866,1],[899,1],[949,1],[1022,1],[1096,1],[1130,1],[1132,1],[1180,1],[1209,1],[1231,1],[1304,1],[1355,1],[1427,1],[1502,1],[1575,1],[1608,1],[2118,1],[2421,1],[2468,1],[2505,1],[2562,1],[2633,1],[2685,1],[2737,1],[2793,1],[2885,1],[2942,1],[3006,1],[3066,1],[3111,1],[3247,1],[3316,1],[3360,1]]},"3916":{"position":[[232,1],[2322,1],[5674,1]]},"3918":{"position":[[232,1],[1301,1]]},"3920":{"position":[[1865,1]]},"3922":{"position":[[662,1],[1461,1]]},"3930":{"position":[[513,1],[547,1]]},"3932":{"position":[[1083,1]]},"3934":{"position":[[2813,1],[2862,1],[3007,1]]},"3946":{"position":[[247,1]]},"3966":{"position":[[1271,1],[1275,1]]},"3970":{"position":[[122,1]]},"3972":{"position":[[263,1]]},"3990":{"position":[[309,1],[630,1]]}}}],["60",{"_index":3247,"t":{"639":{"position":[[379,2]]},"2751":{"position":[[317,3],[382,2]]}}}],["600",{"_index":2778,"t":{"514":{"position":[[173,3]]},"524":{"position":[[252,3]]},"1058":{"position":[[119,3]]},"1317":{"position":[[173,3]]},"2927":{"position":[[131,3]]},"2943":{"position":[[131,3]]},"2957":{"position":[[131,3]]},"3966":{"position":[[1030,3]]}}}],["6000",{"_index":2392,"t":{"399":{"position":[[291,4],[437,4]]}}}],["6052",{"_index":1421,"t":{"190":{"position":[[1046,4]]}}}],["608",{"_index":9184,"t":{"3916":{"position":[[2378,3]]}}}],["6099900",{"_index":9538,"t":{"3936":{"position":[[423,7]]}}}],["61",{"_index":8355,"t":{"3575":{"position":[[586,2]]}}}],["610",{"_index":9186,"t":{"3916":{"position":[[2424,3]]}}}],["612",{"_index":9190,"t":{"3916":{"position":[[2743,3]]}}}],["61985d6",{"_index":9629,"t":{"3950":{"position":[[70,7]]}}}],["62",{"_index":795,"t":{"114":{"position":[[547,2]]},"3446":{"position":[[1022,2]]},"3928":{"position":[[1584,2]]}}}],["627",{"_index":1442,"t":{"190":{"position":[[1373,3]]}}}],["628aa2a75f6aa270e77f4a83b3742fb8",{"_index":4405,"t":{"1483":{"position":[[338,32]]}}}],["63",{"_index":1413,"t":{"190":{"position":[[949,2]]}}}],["6389cbd",{"_index":9295,"t":{"3922":{"position":[[777,7],[820,7]]}}}],["64",{"_index":1409,"t":{"190":{"position":[[895,2]]},"1685":{"position":[[431,2]]},"2057":{"position":[[253,2]]},"3934":{"position":[[2706,2]]}}}],["64kb",{"_index":9697,"t":{"3958":{"position":[[419,4]]}}}],["6522",{"_index":1449,"t":{"190":{"position":[[1442,4]]}}}],["656da87",{"_index":9652,"t":{"3952":{"position":[[105,7],[174,7]]}}}],["657",{"_index":9078,"t":{"3912":{"position":[[1205,3],[2758,3]]}}}],["66",{"_index":4585,"t":{"1511":{"position":[[324,2],[1565,2],[1827,2],[3674,2],[3702,2],[3705,2]]}}}],["666",{"_index":4636,"t":{"1511":{"position":[[754,3],[2890,3]]}}}],["6666",{"_index":4616,"t":{"1511":{"position":[[570,4]]}}}],["6666666666",{"_index":4727,"t":{"1511":{"position":[[1830,10]]}}}],["668",{"_index":4643,"t":{"1511":{"position":[[825,3]]}}}],["66d8d54",{"_index":9318,"t":{"3922":{"position":[[2332,7]]}}}],["6763352",{"_index":9564,"t":{"3938":{"position":[[557,7]]}}}],["6859410",{"_index":8862,"t":{"3802":{"position":[[950,7],[1571,7]]},"3817":{"position":[[1161,7],[2163,7]]},"3821":{"position":[[655,7]]},"3896":{"position":[[580,7]]}}}],["6865f3d",{"_index":9047,"t":{"3910":{"position":[[610,7]]}}}],["68a018036186b717cc1b051c10996f4eee805f5f81eb1594c9eb43592545f7f6",{"_index":5287,"t":{"1691":{"position":[[141,64],[227,64]]}}}],["697ef51",{"_index":9188,"t":{"3916":{"position":[[2695,7]]}}}],["6a7bbd0",{"_index":9671,"t":{"3954":{"position":[[347,7]]}}}],["6bb2fad",{"_index":9117,"t":{"3914":{"position":[[1235,7]]}}}],["6c70584",{"_index":9551,"t":{"3938":{"position":[[102,7]]}}}],["6d4398",{"_index":9508,"t":{"3934":{"position":[[782,6]]}}}],["6d563bf3687f",{"_index":7266,"t":{"2929":{"position":[[464,12]]},"2945":{"position":[[464,12]]},"2959":{"position":[[464,12]]}}}],["6e3a5bd",{"_index":9261,"t":{"3920":{"position":[[372,7]]}}}],["6f06f12",{"_index":9171,"t":{"3916":{"position":[[1375,7]]}}}],["6f820ce",{"_index":9541,"t":{"3936":{"position":[[571,7],[625,7],[657,7]]}}}],["6mib",{"_index":5402,"t":{"1747":{"position":[[43,4]]}}}],["7",{"_index":383,"t":{"44":{"position":[[38,1],[113,1]]},"46":{"position":[[26,1]]},"51":{"position":[[18,1]]},"95":{"position":[[16,1]]},"190":{"position":[[211,1],[218,1],[266,1],[273,1],[575,1],[584,1],[798,1],[1014,1],[1245,1]]},"327":{"position":[[23,1]]},"340":{"position":[[11,1]]},"342":{"position":[[11,1]]},"445":{"position":[[915,1]]},"455":{"position":[[172,1]]},"469":{"position":[[39,1]]},"761":{"position":[[145,1]]},"771":{"position":[[127,1]]},"773":{"position":[[69,1],[147,1]]},"1016":{"position":[[22,1]]},"1240":{"position":[[1031,1]]},"1246":{"position":[[21,1],[85,1]]},"1257":{"position":[[370,1]]},"1265":{"position":[[21,1],[85,1]]},"1483":{"position":[[904,1]]},"1799":{"position":[[958,1]]},"1841":{"position":[[88,1]]},"1881":{"position":[[27,1]]},"2008":{"position":[[32,1]]},"2255":{"position":[[21,1]]},"2276":{"position":[[21,1]]},"2381":{"position":[[45,1]]},"2418":{"position":[[39,1],[460,1],[1086,1]]},"2538":{"position":[[23,1]]},"2637":{"position":[[45,1]]},"2641":{"position":[[19,1]]},"2668":{"position":[[19,1]]},"2740":{"position":[[50,1]]},"2862":{"position":[[323,1]]},"2881":{"position":[[324,1]]},"2977":{"position":[[36,1]]},"2985":{"position":[[250,1]]},"2987":{"position":[[36,1]]},"2997":{"position":[[36,1]]},"3005":{"position":[[36,1]]},"3019":{"position":[[36,1]]},"3027":{"position":[[36,1]]},"3035":{"position":[[36,1]]},"3043":{"position":[[36,1]]},"3051":{"position":[[36,1]]},"3059":{"position":[[36,1]]},"3287":{"position":[[1190,1]]},"3321":{"position":[[111,1],[180,1]]},"3323":{"position":[[59,1],[212,1]]},"3325":{"position":[[62,1]]},"3375":{"position":[[165,1]]},"3470":{"position":[[122,1]]},"3496":{"position":[[230,1]]},"3541":{"position":[[527,1]]},"3603":{"position":[[21,1]]},"3700":{"position":[[23,1]]},"3740":{"position":[[655,1],[703,1]]},"3766":{"position":[[46,1],[226,1],[284,1],[1041,1],[1262,1],[1377,1]]},"3774":{"position":[[301,1],[1137,1],[1358,1],[1472,1]]},"3800":{"position":[[235,1]]},"3910":{"position":[[2292,1]]},"3912":{"position":[[123,1],[197,1],[199,1],[271,1],[345,1],[419,1],[493,1],[567,1],[641,1],[752,1],[786,1],[841,1],[902,1],[962,1],[1038,1],[1096,1],[1098,1],[1200,1],[1274,1],[1319,1],[1514,1],[1518,1],[1545,1],[1549,1],[1615,1],[1858,1],[1934,1],[1992,1],[2065,1],[2131,1],[2200,1],[2280,1],[2347,1],[2349,1],[2416,1],[2464,1],[2493,1],[2503,1],[2542,1],[2544,1]]},"3914":{"position":[[158,1],[1223,1],[2887,1]]},"3916":{"position":[[158,1],[1230,1],[2375,1],[2693,1]]},"3918":{"position":[[158,1],[1314,1],[3758,1],[3805,1],[4060,1]]},"3922":{"position":[[675,1],[685,1]]},"3930":{"position":[[517,1]]},"3932":{"position":[[1373,1],[2101,1]]},"3934":{"position":[[1949,1]]},"4004":{"position":[[176,1]]}}}],["70",{"_index":1402,"t":{"190":{"position":[[784,2]]},"771":{"position":[[225,2],[228,2]]}}}],["700",{"_index":1368,"t":{"190":{"position":[[337,3],[360,3]]},"411":{"position":[[232,3]]}}}],["7000",{"_index":2393,"t":{"399":{"position":[[392,4],[777,4]]}}}],["7001",{"_index":2448,"t":{"406":{"position":[[364,4],[384,4]]}}}],["700k",{"_index":7760,"t":{"3250":{"position":[[49,4]]}}}],["7076",{"_index":1427,"t":{"190":{"position":[[1157,4]]}}}],["7151",{"_index":1423,"t":{"190":{"position":[[1098,4]]}}}],["7233546",{"_index":8863,"t":{"3802":{"position":[[1006,7],[1623,7]]},"3817":{"position":[[1217,7],[2215,7]]},"3821":{"position":[[707,7]]},"3896":{"position":[[632,7]]}}}],["7233630",{"_index":8864,"t":{"3802":{"position":[[1242,7],[1839,7]]},"3817":{"position":[[1453,7],[2431,7]]},"3821":{"position":[[923,7]]},"3896":{"position":[[848,7]]}}}],["726",{"_index":1438,"t":{"190":{"position":[[1317,3]]}}}],["7260",{"_index":7587,"t":{"3194":{"position":[[512,4]]}}}],["735",{"_index":1387,"t":{"190":{"position":[[586,3]]}}}],["7384c9c",{"_index":9123,"t":{"3914":{"position":[[1506,7],[2122,7],[3364,7]]}}}],["7388113",{"_index":8962,"t":{"3832":{"position":[[1620,7]]}}}],["74",{"_index":1418,"t":{"190":{"position":[[1024,2],[1452,2]]}}}],["7413303",{"_index":8974,"t":{"3832":{"position":[[3214,7]]}}}],["741d61493c560ba96e8151f9e56876d4d3828489",{"_index":1378,"t":{"190":{"position":[[431,40]]}}}],["7446968",{"_index":8975,"t":{"3832":{"position":[[3320,7]]}}}],["74bee56",{"_index":9092,"t":{"3912":{"position":[[2468,7]]}}}],["7571",{"_index":1428,"t":{"190":{"position":[[1167,4]]}}}],["75c672a",{"_index":9262,"t":{"3920":{"position":[[420,7]]}}}],["76ffa7f",{"_index":9479,"t":{"3932":{"position":[[519,7]]}}}],["7700k",{"_index":1355,"t":{"190":{"position":[[116,5]]}}}],["78",{"_index":8218,"t":{"3452":{"position":[[3346,2]]},"3916":{"position":[[6342,2]]}}}],["797b0bf",{"_index":9114,"t":{"3914":{"position":[[1134,7]]}}}],["7a57ef",{"_index":9298,"t":{"3922":{"position":[[1369,7]]}}}],["7b7747f",{"_index":9255,"t":{"3920":{"position":[[209,7]]}}}],["7b9268c",{"_index":9051,"t":{"3910":{"position":[[1437,7],[1500,7]]}}}],["7cced4",{"_index":9323,"t":{"3924":{"position":[[178,6]]}}}],["7cec85d7bea7798",{"_index":8209,"t":{"3452":{"position":[[2719,16]]},"3916":{"position":[[5715,16]]}}}],["7df3195",{"_index":9082,"t":{"3912":{"position":[[1522,7],[1553,7]]}}}],["7e8e0b7",{"_index":9539,"t":{"3936":{"position":[[464,7]]}}}],["7e9cc1c",{"_index":9576,"t":{"3940":{"position":[[579,7]]}}}],["7fb3036",{"_index":9161,"t":{"3916":{"position":[[905,7],[2010,7]]}}}],["7k",{"_index":7593,"t":{"3209":{"position":[[71,2]]}}}],["8",{"_index":619,"t":{"100":{"position":[[22,1]]},"104":{"position":[[34,1]]},"190":{"position":[[154,1]]},"427":{"position":[[145,1],[196,1]]},"445":{"position":[[19,1],[411,1]]},"467":{"position":[[16,1],[74,1]]},"514":{"position":[[749,1]]},"587":{"position":[[542,1],[630,1]]},"593":{"position":[[58,1]]},"615":{"position":[[404,1],[443,1]]},"734":{"position":[[11,1],[446,1]]},"836":{"position":[[144,1],[310,1]]},"897":{"position":[[308,1]]},"899":{"position":[[586,1],[1453,1]]},"911":{"position":[[219,1]]},"1286":{"position":[[252,1]]},"1309":{"position":[[472,1]]},"1412":{"position":[[770,1]]},"1483":{"position":[[962,1]]},"1511":{"position":[[2151,1],[2305,1]]},"1633":{"position":[[12,1]]},"1635":{"position":[[12,1]]},"1685":{"position":[[460,1]]},"1687":{"position":[[119,1]]},"1689":{"position":[[731,1]]},"1755":{"position":[[114,1]]},"1795":{"position":[[1044,1],[1059,1],[1090,1],[1716,1]]},"2063":{"position":[[23,1]]},"2144":{"position":[[58,1]]},"2173":{"position":[[21,1]]},"2333":{"position":[[127,1],[277,1]]},"2361":{"position":[[405,1]]},"2391":{"position":[[2,1],[23,1]]},"2418":{"position":[[1277,1]]},"2668":{"position":[[51,1]]},"2725":{"position":[[2654,1]]},"2788":{"position":[[47,1],[130,1],[149,1]]},"2792":{"position":[[138,1],[140,1]]},"2862":{"position":[[333,1]]},"2877":{"position":[[21,1]]},"2899":{"position":[[156,1],[441,1]]},"3430":{"position":[[3560,1]]},"3432":{"position":[[4261,1]]},"3434":{"position":[[2635,1]]},"3446":{"position":[[526,1]]},"3448":{"position":[[849,1],[1192,1]]},"3452":{"position":[[209,1],[321,1],[3238,1]]},"3498":{"position":[[407,1]]},"3522":{"position":[[510,1],[689,1]]},"3532":{"position":[[53,1]]},"3543":{"position":[[494,1]]},"3545":{"position":[[398,1]]},"3571":{"position":[[53,1]]},"3595":{"position":[[46,1],[48,1],[101,1]]},"3601":{"position":[[890,1],[1044,1]]},"3660":{"position":[[23,1],[75,1]]},"3666":{"position":[[290,1]]},"3740":{"position":[[657,1],[712,1]]},"3758":{"position":[[53,1],[75,1],[144,1]]},"3766":{"position":[[48,1],[228,1],[286,1],[572,1],[1043,1],[1264,1],[1379,1],[1448,1],[1659,1]]},"3768":{"position":[[649,1],[784,1],[979,1],[1149,1],[1284,1],[1479,1],[2775,1]]},"3774":{"position":[[303,1],[1139,1],[1360,1],[1429,1],[1474,1]]},"3783":{"position":[[784,1]]},"3800":{"position":[[261,1]]},"3806":{"position":[[2169,1]]},"3808":{"position":[[1504,1],[1625,1],[2492,1]]},"3842":{"position":[[347,1],[491,1],[977,1],[1121,1],[1542,1],[1686,1],[2132,1],[2276,1],[2773,1],[2917,1],[3390,1],[3534,1]]},"3876":{"position":[[100,1]]},"3910":{"position":[[305,1],[396,1],[430,1],[467,1],[510,1],[563,1],[606,1],[651,1],[1050,1],[1433,1],[1496,1],[2156,1],[2209,1],[2264,1],[2369,1],[2436,1],[2500,1]]},"3914":{"position":[[84,1],[1182,1],[2944,1],[3008,1],[3068,1]]},"3916":{"position":[[84,1],[1270,1],[2079,1],[2413,1],[6234,1]]},"3918":{"position":[[84,1],[1272,1],[3852,1]]},"3920":{"position":[[84,1]]},"3922":{"position":[[666,1]]},"3940":{"position":[[229,1]]},"3960":{"position":[[187,1]]},"3968":{"position":[[674,1]]},"3996":{"position":[[1098,1]]}}}],["80",{"_index":4154,"t":{"1377":{"position":[[144,2],[437,2]]},"1379":{"position":[[585,2]]},"1488":{"position":[[1374,2]]}}}],["800",{"_index":3115,"t":{"595":{"position":[[125,3]]},"617":{"position":[[2301,3]]},"1582":{"position":[[199,3]]},"1843":{"position":[[125,3]]},"1867":{"position":[[468,3]]},"2711":{"position":[[215,3]]},"3630":{"position":[[285,3]]}}}],["8000",{"_index":2412,"t":{"401":{"position":[[37,4]]}}}],["803542c",{"_index":9214,"t":{"3918":{"position":[[1043,7]]}}}],["805",{"_index":1349,"t":{"190":{"position":[[63,3]]}}}],["8080",{"_index":2447,"t":{"406":{"position":[[336,4],[379,4]]},"1485":{"position":[[17,4],[22,4]]},"2875":{"position":[[82,4],[166,4],[224,4],[360,4],[900,4]]}}}],["8081",{"_index":7159,"t":{"2875":{"position":[[922,4],[1102,4]]}}}],["8089",{"_index":6870,"t":{"2745":{"position":[[163,4]]},"2747":{"position":[[166,4]]},"3075":{"position":[[155,4],[227,4]]},"3080":{"position":[[382,4]]}}}],["8129693",{"_index":9168,"t":{"3916":{"position":[[1170,7],[1618,7]]}}}],["817",{"_index":1410,"t":{"190":{"position":[[920,3]]}}}],["8176033",{"_index":8919,"t":{"3812":{"position":[[356,7]]}}}],["8192",{"_index":9714,"t":{"3960":{"position":[[675,4]]}}}],["81946b6",{"_index":9680,"t":{"3954":{"position":[[787,7]]}}}],["81c6343",{"_index":9111,"t":{"3914":{"position":[[953,7]]}}}],["81df742",{"_index":9320,"t":{"3924":{"position":[[112,7]]}}}],["820db713",{"_index":4400,"t":{"1483":{"position":[[301,8]]}}}],["82a79cc",{"_index":9690,"t":{"3958":{"position":[[297,7],[342,7]]}}}],["82f89bd",{"_index":9544,"t":{"3936":{"position":[[761,7]]}}}],["8308170",{"_index":8811,"t":{"3783":{"position":[[620,7]]}}}],["833c0d4",{"_index":9044,"t":{"3910":{"position":[[471,7]]}}}],["8385903",{"_index":8920,"t":{"3812":{"position":[[408,7]]}}}],["8386511",{"_index":8921,"t":{"3812":{"position":[[624,7]]}}}],["83c97bb",{"_index":9332,"t":{"3924":{"position":[[916,7]]}}}],["83f0036",{"_index":9478,"t":{"3932":{"position":[[448,7],[789,7],[1355,7]]}}}],["84",{"_index":3560,"t":{"771":{"position":[[243,2]]},"3832":{"position":[[2453,2],[4214,2]]}}}],["842d4f7",{"_index":9293,"t":{"3922":{"position":[[687,7]]}}}],["8437231",{"_index":8812,"t":{"3783":{"position":[[740,7]]}}}],["8471287",{"_index":8813,"t":{"3783":{"position":[[860,7]]}}}],["848",{"_index":1406,"t":{"190":{"position":[[866,3]]}}}],["84m",{"_index":9694,"t":{"3958":{"position":[[376,3]]}}}],["85",{"_index":6882,"t":{"2749":{"position":[[629,2]]},"3080":{"position":[[1197,2]]}}}],["8607141",{"_index":8814,"t":{"3783":{"position":[[981,7]]}}}],["8645520",{"_index":8815,"t":{"3783":{"position":[[1102,7]]}}}],["86m",{"_index":9832,"t":{"3966":{"position":[[1171,3]]}}}],["8718392",{"_index":9582,"t":{"3942":{"position":[[94,7],[347,7]]}}}],["872",{"_index":1403,"t":{"190":{"position":[[809,3]]}}}],["876a2f5",{"_index":9475,"t":{"3932":{"position":[[291,7]]}}}],["88",{"_index":3558,"t":{"771":{"position":[[235,2]]},"1511":{"position":[[660,2],[2153,2],[2330,2],[2333,2]]}}}],["89",{"_index":1445,"t":{"190":{"position":[[1402,2]]},"3934":{"position":[[1974,2],[2008,2],[2042,2]]}}}],["8cc8ee",{"_index":9489,"t":{"3932":{"position":[[1400,6]]}}}],["8d1477d",{"_index":9310,"t":{"3922":{"position":[[1993,7]]}}}],["8d5cdd6",{"_index":9301,"t":{"3922":{"position":[[1443,7]]}}}],["8d9293d",{"_index":9534,"t":{"3936":{"position":[[261,7]]}}}],["8f78184",{"_index":9567,"t":{"3940":{"position":[[129,7]]}}}],["8feb1dfa304c",{"_index":6921,"t":{"2768":{"position":[[248,12]]}}}],["9",{"_index":450,"t":{"57":{"position":[[98,1]]},"64":{"position":[[30,1],[74,1],[173,1]]},"110":{"position":[[106,1]]},"212":{"position":[[508,1]]},"461":{"position":[[258,1]]},"510":{"position":[[555,1]]},"587":{"position":[[538,1],[626,1]]},"799":{"position":[[11,1]]},"1101":{"position":[[11,1]]},"1155":{"position":[[11,1]]},"1377":{"position":[[122,1]]},"1379":{"position":[[139,1],[537,1]]},"1483":{"position":[[983,1]]},"1511":{"position":[[1479,1],[1481,1],[1534,1],[1536,1]]},"1592":{"position":[[143,1]]},"1594":{"position":[[191,1]]},"1621":{"position":[[706,1]]},"1795":{"position":[[1012,1],[1015,1],[1026,1],[1039,1],[1054,1],[1072,1],[1085,1],[1108,1],[1111,1]]},"1803":{"position":[[69,1]]},"2255":{"position":[[23,1]]},"2261":{"position":[[458,1]]},"2298":{"position":[[18,1]]},"2381":{"position":[[47,1]]},"2418":{"position":[[1317,1]]},"2420":{"position":[[848,1]]},"2641":{"position":[[21,1]]},"2668":{"position":[[21,1]]},"2725":{"position":[[424,1],[429,1],[437,1],[943,1],[948,1],[956,1],[2385,1],[2390,1],[2398,1]]},"2788":{"position":[[132,1],[151,1]]},"3086":{"position":[[8,1],[17,1]]},"3321":{"position":[[113,1],[182,1]]},"3325":{"position":[[64,1]]},"3428":{"position":[[21,1]]},"3444":{"position":[[11,1]]},"3446":{"position":[[320,1],[386,1]]},"3448":{"position":[[622,1],[690,1],[904,1],[1046,1],[1114,1]]},"3450":{"position":[[23,1]]},"3454":{"position":[[23,1],[46,1]]},"3464":{"position":[[506,1]]},"3595":{"position":[[103,1]]},"3678":{"position":[[11,1]]},"3770":{"position":[[3482,1],[3781,1],[3918,1]]},"3800":{"position":[[289,1]]},"3806":{"position":[[480,1],[1053,1],[3837,1]]},"3808":{"position":[[1147,1],[1265,1],[2368,1],[2740,1]]},"3828":{"position":[[1024,1],[1120,1],[1247,1]]},"3846":{"position":[[739,1],[862,1]]},"3854":{"position":[[300,1],[446,1]]},"3856":{"position":[[195,1]]},"3912":{"position":[[125,1],[1202,1],[1276,1],[1860,1],[2418,1]]},"3914":{"position":[[10,1],[2384,1],[3113,1],[3249,1]]},"3916":{"position":[[10,1],[1321,1],[1373,1],[2458,1],[2740,1]]},"3918":{"position":[[10,1],[1305,1],[3037,1],[3891,1],[4086,1],[4116,1]]},"3920":{"position":[[10,1]]},"3932":{"position":[[1375,1]]},"3940":{"position":[[240,1]]},"3966":{"position":[[1229,1]]},"4004":{"position":[[532,1]]}}}],["90",{"_index":1441,"t":{"190":{"position":[[1346,2]]}}}],["9057a21",{"_index":9651,"t":{"3952":{"position":[[78,7]]}}}],["9092",{"_index":5624,"t":{"1803":{"position":[[5285,4],[5449,4]]}}}],["9277b98",{"_index":9550,"t":{"3938":{"position":[[48,7]]}}}],["92f8cc1",{"_index":9889,"t":{"3970":{"position":[[353,7]]}}}],["9357",{"_index":6920,"t":{"2768":{"position":[[243,4]]}}}],["93cf63a",{"_index":9662,"t":{"3952":{"position":[[690,7]]}}}],["94ae4d",{"_index":9610,"t":{"3946":{"position":[[326,6]]}}}],["95",{"_index":6979,"t":{"2768":{"position":[[1219,2]]},"3758":{"position":[[24,2]]},"3832":{"position":[[2706,2],[4467,2]]}}}],["95cac5b",{"_index":9491,"t":{"3934":{"position":[[35,7],[500,7]]}}}],["96",{"_index":3556,"t":{"771":{"position":[[107,2]]}}}],["9610a0a",{"_index":9668,"t":{"3954":{"position":[[208,7]]}}}],["9619596",{"_index":9005,"t":{"3850":{"position":[[123,7]]}}}],["962fb16",{"_index":9056,"t":{"3910":{"position":[[2213,7],[2268,7]]}}}],["968344",{"_index":9505,"t":{"3934":{"position":[[738,6]]}}}],["9699919799",{"_index":4942,"t":{"1530":{"position":[[160,10]]}}}],["974f835",{"_index":9133,"t":{"3914":{"position":[[2637,7],[2689,7]]}}}],["98",{"_index":3553,"t":{"771":{"position":[[69,2]]}}}],["989",{"_index":1390,"t":{"190":{"position":[[646,3]]}}}],["99",{"_index":3554,"t":{"771":{"position":[[84,2]]},"1511":{"position":[[1915,2],[4171,2]]},"3352":{"position":[[125,2]]},"3934":{"position":[[1943,2]]},"3940":{"position":[[491,2]]}}}],["995",{"_index":2573,"t":{"445":{"position":[[352,3]]}}}],["9986",{"_index":4489,"t":{"1495":{"position":[[505,4]]}}}],["9994",{"_index":4452,"t":{"1488":{"position":[[506,4]]},"1497":{"position":[[214,4]]}}}],["9999",{"_index":2677,"t":{"482":{"position":[[247,4]]}}}],["9_",{"_index":3068,"t":{"587":{"position":[[538,2],[626,2]]},"1592":{"position":[[143,2]]},"1594":{"position":[[191,2]]},"1621":{"position":[[706,2]]}}}],["9ce214c",{"_index":9307,"t":{"3922":{"position":[[1672,7]]}}}],["9e31b0b",{"_index":9115,"t":{"3914":{"position":[[1184,7]]}}}],["_",{"_index":1142,"t":{"152":{"position":[[232,1],[506,1]]},"461":{"position":[[402,1],[570,1],[751,1],[919,1],[1302,1],[1460,1]]},"696":{"position":[[131,1],[165,1],[167,1],[169,1],[218,1],[224,1],[245,1],[257,1],[263,1],[278,1],[285,1],[287,1],[291,1],[305,1]]},"730":{"position":[[212,1]]},"732":{"position":[[135,1]]},"1511":{"position":[[3907,1]]},"1539":{"position":[[1325,1],[1327,1],[1329,1],[1331,1],[1341,1],[1418,1],[1427,1],[1436,1],[1442,1],[1470,1],[1480,1],[1486,1],[1498,1],[1502,1],[1509,1],[1511,1],[1520,1],[1534,1]]},"1711":{"position":[[373,1]]},"2315":{"position":[[157,1]]},"2418":{"position":[[579,1],[609,1],[765,1],[786,1]]},"2476":{"position":[[53,1]]},"2478":{"position":[[163,1]]},"2905":{"position":[[314,1],[363,1]]},"3589":{"position":[[223,1],[226,1],[229,1],[232,1],[420,1],[423,1],[426,1],[429,1]]},"3680":{"position":[[353,1]]},"3819":{"position":[[1373,1]]},"3954":{"position":[[785,1]]}}}],["__",{"_index":3348,"t":{"696":{"position":[[145,2],[148,2],[162,2],[171,2],[198,2],[209,2],[231,2],[269,2],[282,2]]},"1539":{"position":[[1358,2],[1361,2],[1372,2],[1412,2],[1449,2],[1461,2],[1492,2]]}}}],["___",{"_index":3349,"t":{"696":{"position":[[178,3],[182,3],[189,3],[294,3],[300,3],[307,3]]},"1539":{"position":[[1378,3],[1387,3],[1395,3],[1399,3],[1406,3],[1505,3],[1514,3],[1523,3],[1529,3],[1536,3]]}}}],["____",{"_index":3347,"t":{"696":{"position":[[138,4]]}}}],["______",{"_index":3345,"t":{"696":{"position":[[116,6]]}}}],["_______",{"_index":3346,"t":{"696":{"position":[[123,7]]},"1539":{"position":[[1333,7]]}}}],["_asynclocalstr",{"_index":7131,"t":{"2856":{"position":[[166,17],[475,17],[584,17],[942,17],[1152,17]]}}}],["_blank",{"_index":6406,"t":{"2532":{"position":[[236,6]]}}}],["_boardcardattachmentrepositori",{"_index":205,"t":{"11":{"position":[[1203,30]]},"2294":{"position":[[1251,30]]}}}],["_boardcardrepositori",{"_index":199,"t":{"11":{"position":[[1067,20]]},"2294":{"position":[[1115,20]]}}}],["_boardcarduserrepositori",{"_index":208,"t":{"11":{"position":[[1279,24]]},"2294":{"position":[[1327,24]]}}}],["_boardgrouprepositori",{"_index":202,"t":{"11":{"position":[[1130,21]]},"2294":{"position":[[1178,21]]}}}],["_businessservic",{"_index":4250,"t":{"1408":{"position":[[769,16],[847,16],[943,16]]},"1410":{"position":[[789,16],[872,16],[968,16]]},"1412":{"position":[[2064,16],[2211,16],[2428,16],[2848,16]]}}}],["_cach",{"_index":1721,"t":{"237":{"position":[[198,6],[258,6],[448,6],[697,6],[756,6],[806,6],[901,6],[1218,6]]},"253":{"position":[[133,6],[186,6],[362,6],[793,6]]}}}],["_calcservic",{"_index":6030,"t":{"2182":{"position":[[187,12]]},"2184":{"position":[[192,12]]},"3381":{"position":[[121,12],[180,12],[257,12]]},"3389":{"position":[[1097,12],[1229,12],[1326,12]]},"3391":{"position":[[445,12],[654,12],[781,12]]},"3393":{"position":[[726,12],[1032,12],[1199,12]]},"3924":{"position":[[3339,12],[3398,12],[3475,12]]}}}],["_channel",{"_index":5545,"t":{"1801":{"position":[[597,8],[1241,8],[1855,8],[2676,8],[2991,8]]},"1803":{"position":[[2687,8],[3435,8],[3826,8],[4648,8],[4963,8]]}}}],["_classfixtur",{"_index":8020,"t":{"3391":{"position":[[536,13],[702,13]]},"3393":{"position":[[817,13],[1080,13]]}}}],["_client",{"_index":8372,"t":{"3583":{"position":[[198,7],[475,7],[550,7]]}}}],["_collectionfixtur",{"_index":8026,"t":{"3393":{"position":[[869,18],[1110,18]]}}}],["_config",{"_index":1813,"t":{"247":{"position":[[512,7]]}}}],["_configur",{"_index":2533,"t":{"435":{"position":[[901,14],[974,14]]},"447":{"position":[[186,14]]},"3791":{"position":[[178,14],[281,14],[698,14],[888,14],[1497,14],[1681,14]]}}}],["_connect",{"_index":5549,"t":{"1801":{"position":[[744,11],[1320,11],[1401,11],[3142,11]]}}}],["_consumerct",{"_index":5590,"t":{"1803":{"position":[[386,12],[1327,12],[1382,12],[1850,12],[1905,12],[1989,12]]}}}],["_consumertask",{"_index":5588,"t":{"1803":{"position":[[339,13],[1292,13],[1402,13],[1874,13],[1940,13],[1967,13],[2261,13]]}}}],["_crontab",{"_index":2735,"t":{"492":{"position":[[160,8],[228,8],[694,8]]},"2484":{"position":[[160,8],[228,8],[700,8]]},"2827":{"position":[[206,8],[274,8],[746,8]]},"2829":{"position":[[224,8],[322,8],[930,8]]}}}],["_customerbyid",{"_index":5054,"t":{"1566":{"position":[[759,13],[985,13]]}}}],["_dapperrepositori",{"_index":2887,"t":{"548":{"position":[[113,17],[191,17]]},"550":{"position":[[11,17],[77,17],[142,17],[236,17],[346,17],[496,17]]}}}],["_embeddedfileprovid",{"_index":5348,"t":{"1724":{"position":[[193,21],[419,21]]}}}],["_eventbusfactori",{"_index":5664,"t":{"1815":{"position":[[227,16],[367,16],[463,16],[646,16]]}}}],["_eventconsum",{"_index":5610,"t":{"1803":{"position":[[2847,14],[3539,14],[3603,14],[3673,14],[3879,14],[5108,14]]}}}],["_eventpublish",{"_index":5507,"t":{"1795":{"position":[[2066,15],[2139,15],[2246,15],[2395,15],[2461,15]]},"1797":{"position":[[777,15]]},"1815":{"position":[[176,15],[333,15]]},"3936":{"position":[[1349,15],[1437,15],[1494,15]]}}}],["_eventsourcestor",{"_index":5639,"t":{"1805":{"position":[[173,18],[259,18],[366,18]]}}}],["_factori",{"_index":8034,"t":{"3397":{"position":[[524,8],[613,8],[748,8]]}}}],["_fileprovid",{"_index":5357,"t":{"1729":{"position":[[42,13]]},"1731":{"position":[[41,13]]},"1733":{"position":[[27,13]]}}}],["_fixtur",{"_index":8016,"t":{"3389":{"position":[[1146,8],[1257,8]]},"3391":{"position":[[494,8],[682,8]]},"3393":{"position":[[775,8],[1060,8]]}}}],["_githubcli",{"_index":8370,"t":{"3581":{"position":[[536,13],[605,13],[709,13]]},"3583":{"position":[[738,13],[808,13],[912,13]]}}}],["_host",{"_index":7183,"t":{"2899":{"position":[[410,5],[454,5],[551,5],[570,5]]},"3910":{"position":[[1218,5],[1240,5],[1326,5],[1345,5]]}}}],["_http",{"_index":8263,"t":{"3483":{"position":[[745,5],[794,5],[857,5]]},"3597":{"position":[[387,5],[475,5]]},"3603":{"position":[[280,5]]},"3916":{"position":[[7518,5],[8170,5]]}}}],["_httpclientfactori",{"_index":8359,"t":{"3575":{"position":[[752,18],[836,18],[941,18]]}}}],["_httpcontextaccessor",{"_index":257,"t":{"15":{"position":[[290,20],[399,20]]},"17":{"position":[[284,20],[393,20]]},"1739":{"position":[[457,20],[566,20]]},"3684":{"position":[[82,20]]},"3962":{"position":[[1908,20]]}}}],["_hubcontext",{"_index":7554,"t":{"3162":{"position":[[125,11],[203,11],[280,11]]}}}],["_idgener",{"_index":6167,"t":{"2331":{"position":[[322,12],[394,12],[439,12]]}}}],["_islock",{"_index":7087,"t":{"2829":{"position":[[247,7],[526,7],[546,7],[889,7]]}}}],["_jsonseri",{"_index":6213,"t":{"2348":{"position":[[312,15],[446,15]]},"2350":{"position":[[33,15]]},"2352":{"position":[[83,15],[366,15]]},"2354":{"position":[[136,15]]}}}],["_jsonserializer2",{"_index":6214,"t":{"2348":{"position":[[370,16],[480,16]]}}}],["_local",{"_index":6419,"t":{"2551":{"position":[[113,10],[182,10],[268,10]]}}}],["_logger",{"_index":2734,"t":{"492":{"position":[[126,7],[210,7],[565,7]]},"530":{"position":[[164,7],[318,7],[440,7]]},"1039":{"position":[[164,7],[318,7],[440,7]]},"1795":{"position":[[155,7],[230,7],[378,7],[640,7]]},"1807":{"position":[[222,7],[305,7],[394,7],[556,7],[655,7]]},"1811":{"position":[[210,7],[334,7]]},"1819":{"position":[[203,7],[278,7],[384,7]]},"1823":{"position":[[183,7],[386,7]]},"2226":{"position":[[48,7]]},"2228":{"position":[[66,7]]},"2482":{"position":[[100,7],[181,7],[465,7]]},"2484":{"position":[[126,7],[210,7],[565,7]]},"2581":{"position":[[280,7],[402,7],[483,7],[783,7],[929,7],[1010,7]]},"2587":{"position":[[189,7],[346,7]]},"2589":{"position":[[208,7],[377,7]]},"2813":{"position":[[366,7],[415,7],[562,7]]},"2817":{"position":[[515,7],[564,7],[841,7]]},"2825":{"position":[[100,7],[181,7],[465,7]]},"2827":{"position":[[172,7],[256,7],[611,7]]},"2829":{"position":[[190,7],[304,7],[729,7]]},"2831":{"position":[[153,7],[299,7]]},"3420":{"position":[[112,7],[173,7],[215,7]]},"3422":{"position":[[86,7],[140,7],[209,7]]},"3436":{"position":[[93,7],[191,7],[274,7]]},"3466":{"position":[[105,7],[181,7],[251,7],[348,7],[416,7],[466,7],[1215,7],[1316,7],[1368,7],[1487,7],[1603,7],[1657,7]]},"3762":{"position":[[76,7],[123,7],[238,7]]},"3768":{"position":[[251,7],[298,7],[413,7]]},"3770":{"position":[[123,7],[170,7],[285,7],[1356,7],[1403,7],[1584,7],[1635,7],[2807,7],[2854,7],[3035,7],[3133,7],[3255,7],[4672,7],[4719,7],[4900,7],[4954,7]]},"3774":{"position":[[408,7],[455,7],[570,7]]},"3783":{"position":[[130,7],[177,7],[439,7]]},"3791":{"position":[[137,7],[263,7],[410,7],[657,7],[870,7],[1189,7],[1456,7],[1663,7],[1937,7]]},"3795":{"position":[[120,7],[167,7],[504,7]]},"3806":{"position":[[3334,7],[3381,7],[3496,7]]},"3808":{"position":[[768,7],[815,7],[930,7],[1989,7],[2036,7],[2151,7]]},"3828":{"position":[[174,7],[239,7],[352,7],[558,7],[677,7]]},"3832":{"position":[[455,7],[502,7],[617,7]]},"3914":{"position":[[1673,7],[1805,7],[1881,7],[1953,7],[2027,7]]},"3924":{"position":[[4531,7],[4647,7],[4785,7]]}}}],["_mapper",{"_index":6812,"t":{"2692":{"position":[[82,7]]}}}],["_memorycach",{"_index":1675,"t":{"231":{"position":[[267,12],[330,12],[447,12]]},"233":{"position":[[29,12],[181,12],[471,12]]},"235":{"position":[[170,12]]}}}],["_model",{"_index":5547,"t":{"1801":{"position":[[669,6],[1392,6],[1438,6],[1548,6],[1909,6],[1971,6],[2599,6],[3124,6]]}}}],["_mongorepositori",{"_index":6737,"t":{"2605":{"position":[[86,16],[163,16]]},"2607":{"position":[[15,16],[448,16]]},"2609":{"position":[[94,16]]}}}],["_msrepositori",{"_index":3925,"t":{"1064":{"position":[[326,13],[520,13],[685,13],[832,13]]},"1066":{"position":[[881,13],[1065,13],[1230,13],[1376,13],[1531,13]]}}}],["_namedserviceprovid",{"_index":4259,"t":{"1412":{"position":[[1029,21],[1141,21],[1256,21],[1330,21],[1477,21],[1563,21]]}}}],["_next",{"_index":6720,"t":{"2579":{"position":[[186,5],[249,5],[562,5]]},"2581":{"position":[[222,5],[388,5],[532,5],[725,5],[915,5],[1059,5]]},"2587":{"position":[[131,5],[332,5],[445,5]]},"2589":{"position":[[150,5],[363,5],[620,5]]}}}],["_option",{"_index":6856,"t":{"2731":{"position":[[371,8],[462,8],[583,8]]}}}],["_optionsreloadtoken",{"_index":6853,"t":{"2731":{"position":[[330,19],[441,19],[629,19]]}}}],["_otherbusinessservic",{"_index":4270,"t":{"1412":{"position":[[2116,21],[2292,21],[2472,21],[2922,21]]}}}],["_persondetailrepositori",{"_index":3657,"t":{"860":{"position":[[64,23]]},"862":{"position":[[64,23]]}}}],["_personrepositori",{"_index":2889,"t":{"548":{"position":[[279,17],[365,17]]},"810":{"position":[[179,17]]},"812":{"position":[[187,17]]},"814":{"position":[[178,17]]},"816":{"position":[[186,17]]},"824":{"position":[[0,17]]},"860":{"position":[[22,17]]},"862":{"position":[[22,17]]},"1022":{"position":[[37,17],[117,17]]},"1111":{"position":[[195,17]]},"1113":{"position":[[191,17]]},"1115":{"position":[[188,17]]},"1117":{"position":[[1784,17],[1878,17],[1982,17],[2096,17],[2220,17],[2354,17],[2498,17],[2652,17]]},"1119":{"position":[[178,17]]},"1121":{"position":[[186,17]]},"1123":{"position":[[150,17]]},"1129":{"position":[[290,17],[1150,17]]},"1408":{"position":[[322,17],[404,17],[479,17]]},"1410":{"position":[[337,17],[419,17],[494,17]]},"1414":{"position":[[262,17],[340,17],[415,17]]},"3287":{"position":[[207,17],[280,17],[532,17],[605,17]]}}}],["_physicalfileprovid",{"_index":5346,"t":{"1724":{"position":[[139,21],[320,21]]}}}],["_produc",{"_index":5613,"t":{"1803":{"position":[[2941,9],[3912,9],[4524,9]]}}}],["_readablerepositori",{"_index":4140,"t":{"1368":{"position":[[326,19],[415,19],[623,19]]}}}],["_rediscli",{"_index":5535,"t":{"1799":{"position":[[254,12],[326,12],[478,12],[646,12]]}}}],["_repositori",{"_index":3031,"t":{"585":{"position":[[313,11]]},"810":{"position":[[266,11]]},"812":{"position":[[282,11]]},"814":{"position":[[264,11]]},"816":{"position":[[280,11]]},"834":{"position":[[29,11]]},"836":{"position":[[66,11]]},"1111":{"position":[[288,11]]},"1113":{"position":[[284,11]]},"1115":{"position":[[284,11]]},"1117":{"position":[[2817,11],[2911,11],[3015,11],[3129,11],[3253,11],[3387,11],[3531,11],[3685,11]]},"1119":{"position":[[265,11]]},"1121":{"position":[[281,11]]},"1123":{"position":[[230,11]]},"1129":{"position":[[419,11],[1331,11]]},"1392":{"position":[[299,11],[359,11]]},"2973":{"position":[[122,11]]}}}],["_routekey",{"_index":5550,"t":{"1801":{"position":[[818,9],[1362,9],[2623,9]]}}}],["_schedulerfactori",{"_index":8766,"t":{"3772":{"position":[[339,17],[415,17],[478,17]]},"3834":{"position":[[155,17],[231,17]]},"3836":{"position":[[62,17],[165,17],[231,17],[287,17]]},"3838":{"position":[[69,17],[198,17],[290,17],[360,17]]},"3840":{"position":[[104,17],[196,17]]},"3842":{"position":[[126,17],[204,17],[667,17],[795,17],[1276,17],[1382,17],[1850,17],[1964,17],[2453,17],[2586,17],[3086,17],[3211,17]]},"3844":{"position":[[126,17],[207,17],[763,17],[1217,17],[1364,17],[1434,17]]},"3846":{"position":[[143,17],[214,17],[399,17],[454,17]]},"3848":{"position":[[14,17],[85,17]]},"3850":{"position":[[0,17],[48,17]]},"3852":{"position":[[0,17],[48,17]]},"3854":{"position":[[0,17],[49,17]]},"3856":{"position":[[69,17]]},"3858":{"position":[[106,17],[156,17]]},"3862":{"position":[[104,17],[196,17]]}}}],["_scopefactori",{"_index":2841,"t":{"530":{"position":[[219,13],[336,13],[492,13]]},"1039":{"position":[[219,13],[336,13],[492,13]]},"2831":{"position":[[208,13],[317,13],[488,13]]}}}],["_scopeprovid",{"_index":8245,"t":{"3466":{"position":[[1244,14],[1351,14],[1736,14]]}}}],["_selfservic",{"_index":4275,"t":{"1414":{"position":[[717,12],[781,12],[856,12]]}}}],["_sensitivedetectionprovid",{"_index":7058,"t":{"2790":{"position":[[451,27],[559,27],[755,27],[967,27],[1181,27]]}}}],["_serviceprovid",{"_index":8831,"t":{"3791":{"position":[[748,16],[920,16],[1078,16]]}}}],["_servicescop",{"_index":5697,"t":{"1823":{"position":[[223,13],[339,13],[541,13],[694,13]]},"3791":{"position":[[1544,13],[1713,13],[1874,13],[2096,13]]}}}],["_set",{"_index":5824,"t":{"1909":{"position":[[442,9]]}}}],["_sql",{"_index":4071,"t":{"1227":{"position":[[22,4],[61,4]]},"1277":{"position":[[60,4],[98,4],[124,4],[163,4],[204,4],[220,4]]}}}],["_sqlexecuteproxi",{"_index":3599,"t":{"810":{"position":[[120,16]]},"812":{"position":[[128,16]]},"814":{"position":[[119,16]]},"816":{"position":[[127,16]]},"1109":{"position":[[742,16],[814,16]]},"1111":{"position":[[130,16]]},"1113":{"position":[[128,16]]},"1115":{"position":[[128,16]]},"1119":{"position":[[120,16]]},"1121":{"position":[[128,16]]},"1123":{"position":[[101,16]]},"1129":{"position":[[192,16],[1026,16]]}}}],["_sqlrepositori",{"_index":3593,"t":{"810":{"position":[[33,14]]},"812":{"position":[[33,14]]},"814":{"position":[[33,14]]},"816":{"position":[[33,14]]},"1109":{"position":[[217,14],[283,14]]},"1111":{"position":[[37,14]]},"1113":{"position":[[35,14]]},"1115":{"position":[[32,14]]},"1117":{"position":[[99,14],[190,14],[291,14],[402,14],[523,14],[654,14],[795,14],[946,14],[1126,14],[1185,14],[1251,14],[1324,14],[1404,14],[1491,14],[1585,14],[1686,14]]},"1119":{"position":[[33,14]]},"1121":{"position":[[33,14]]},"1123":{"position":[[21,14]]},"1129":{"position":[[63,14],[845,14]]}}}],["_sqlsugarcli",{"_index":7857,"t":{"3287":{"position":[[1551,15],[1708,15],[2004,15],[2319,15],[2637,15],[2941,15]]}}}],["_strongchathubcontext",{"_index":7559,"t":{"3168":{"position":[[186,21],[291,21],[400,21]]}}}],["_testrepositori",{"_index":3848,"t":{"979":{"position":[[66,15],[128,15]]},"3291":{"position":[[50,15],[103,15],[178,15],[205,15],[286,15],[325,15],[751,15],[826,15],[2000,15],[2075,15]]}}}],["_threadlocalstr",{"_index":7134,"t":{"2856":{"position":[[239,18],[512,18],[621,18],[967,18],[1177,18]]}}}],["_timecachekey",{"_index":1671,"t":{"231":{"position":[[207,13],[472,13]]},"233":{"position":[[54,13],[211,13],[496,13]]},"235":{"position":[[187,13]]}}}],["_topic",{"_index":5608,"t":{"1803":{"position":[[2757,6],[3512,6],[4547,6]]}}}],["_viewengin",{"_index":8617,"t":{"3734":{"position":[[196,11],[260,11],[299,11]]},"3736":{"position":[[13,11]]},"3738":{"position":[[13,11]]},"3740":{"position":[[131,11],[494,11]]},"3744":{"position":[[35,11]]},"3746":{"position":[[13,11]]},"3748":{"position":[[13,11]]},"3750":{"position":[[304,11]]}}}],["a02413d",{"_index":9476,"t":{"3932":{"position":[[370,7],[715,7]]}}}],["a1",{"_index":1929,"t":{"284":{"position":[[86,2]]},"1691":{"position":[[621,2]]}}}],["a11bf8d",{"_index":9135,"t":{"3914":{"position":[[2749,7]]}}}],["a1a97e8",{"_index":9178,"t":{"3916":{"position":[[2063,7]]}}}],["a2",{"_index":1931,"t":{"284":{"position":[[150,2]]}}}],["a22ec3c",{"_index":9448,"t":{"3930":{"position":[[458,7],[759,7],[1359,7]]}}}],["a29fc7c",{"_index":9264,"t":{"3920":{"position":[[513,7],[1131,7]]}}}],["a3",{"_index":1933,"t":{"284":{"position":[[192,2]]}}}],["a55603b",{"_index":9675,"t":{"3954":{"position":[[601,7]]},"3956":{"position":[[244,7]]}}}],["a90e245",{"_index":9536,"t":{"3936":{"position":[[346,7]]}}}],["aa0a2e",{"_index":9650,"t":{"3950":{"position":[[936,7]]}}}],["aab0371",{"_index":9109,"t":{"3914":{"position":[[870,7]]}}}],["ab",{"_index":4935,"t":{"1522":{"position":[[22,2]]}}}],["ab46cdf",{"_index":9334,"t":{"3924":{"position":[[1160,7]]}}}],["abandonactionaffix",{"_index":5200,"t":{"1661":{"position":[[791,20]]},"3023":{"position":[[788,20]]}}}],["abandoncontrolleraffix",{"_index":5199,"t":{"1661":{"position":[[672,24]]},"3023":{"position":[[669,24]]}}}],["abc",{"_index":1463,"t":{"199":{"position":[[68,3]]},"274":{"position":[[212,3]]},"1522":{"position":[[38,3]]},"1526":{"position":[[1,3]]},"1557":{"position":[[964,3]]}}}],["abp",{"_index":4734,"t":{"1511":{"position":[[1920,3]]}}}],["absoluteexpirationrelativetonow",{"_index":1704,"t":{"233":{"position":[[581,31]]}}}],["abstract",{"_index":5465,"t":{"1775":{"position":[[292,8],[375,8],[465,8],[610,8],[827,8],[1116,8],[1477,8],[1910,8],[2415,8],[2992,8],[3641,8]]},"3371":{"position":[[87,12]]},"3383":{"position":[[74,12]]},"3389":{"position":[[493,12]]},"3924":{"position":[[2835,12]]}}}],["abstractvalid",{"_index":3243,"t":{"639":{"position":[[179,17]]}}}],["accept",{"_index":8277,"t":{"3498":{"position":[[183,6]]},"3543":{"position":[[183,6]]},"3575":{"position":[[243,6]]},"3581":{"position":[[246,6]]},"3583":{"position":[[351,6]]},"3622":{"position":[[76,6]]}}}],["acceptverb",{"_index":5134,"t":{"1615":{"position":[[174,11]]}}}],["access",{"_index":266,"t":{"15":{"position":[[454,6]]},"17":{"position":[[448,6]]},"144":{"position":[[435,6],[517,6]]},"148":{"position":[[450,6],[474,6]]},"415":{"position":[[200,6],[218,6]]},"417":{"position":[[68,6],[187,6],[204,6]]},"419":{"position":[[243,6],[307,6]]},"1739":{"position":[[621,6]]},"2991":{"position":[[206,6],[224,6]]},"2995":{"position":[[45,6],[179,6],[196,6]]},"3510":{"position":[[159,6]]},"3522":{"position":[[1007,6]]},"3551":{"position":[[467,6]]},"3650":{"position":[[461,8]]},"3702":{"position":[[1028,6]]},"3704":{"position":[[953,6]]},"3924":{"position":[[4493,6]]},"3932":{"position":[[79,6],[96,6]]}}}],["access_token",{"_index":8297,"t":{"3510":{"position":[[159,12]]},"3522":{"position":[[1007,12]]},"3551":{"position":[[467,12]]}}}],["accesscontrol",{"_index":2963,"t":{"570":{"position":[[258,13]]}}}],["accesstoken",{"_index":1035,"t":{"127":{"position":[[1779,11]]},"144":{"position":[[13,11],[109,11],[320,11],[452,11],[558,11]]},"148":{"position":[[10,11],[315,11],[349,11],[422,11]]}}}],["accord",{"_index":7708,"t":{"3234":{"position":[[347,9]]},"3702":{"position":[[2322,9]]}}}],["accordingli",{"_index":3271,"t":{"655":{"position":[[185,11]]}}}],["account",{"_index":807,"t":{"114":{"position":[[961,7]]},"127":{"position":[[1884,7],[1898,7]]},"144":{"position":[[214,7],[228,7]]},"587":{"position":[[270,7]]},"1683":{"position":[[101,7],[115,7]]},"3446":{"position":[[1436,7]]},"3452":{"position":[[2103,7]]},"3916":{"position":[[5099,7]]},"3928":{"position":[[1998,7]]}}}],["acdb315",{"_index":9583,"t":{"3942":{"position":[[157,7]]}}}],["acid",{"_index":7831,"t":{"3282":{"position":[[92,4]]}}}],["action",{"_index":772,"t":{"114":{"position":[[272,6]]},"129":{"position":[[372,6]]},"137":{"position":[[31,6],[63,6],[129,6]]},"141":{"position":[[9,6]]},"421":{"position":[[24,6]]},"587":{"position":[[2133,6]]},"713":{"position":[[671,6]]},"734":{"position":[[7489,6],[7496,6]]},"1416":{"position":[[72,6]]},"1420":{"position":[[271,6],[714,6]]},"1598":{"position":[[123,6]]},"1617":{"position":[[478,6],[755,6],[1021,6],[1173,6]]},"1619":{"position":[[317,6]]},"1623":{"position":[[155,6]]},"1887":{"position":[[101,6]]},"1892":{"position":[[99,6]]},"1898":{"position":[[15,6]]},"1907":{"position":[[50,6]]},"1909":{"position":[[45,6]]},"1911":{"position":[[22,6]]},"1913":{"position":[[622,6],[1275,6]]},"1919":{"position":[[738,6]]},"1923":{"position":[[26,6],[49,6]]},"1925":{"position":[[1467,6]]},"1927":{"position":[[784,6]]},"1933":{"position":[[904,6]]},"1935":{"position":[[399,6]]},"1941":{"position":[[555,6],[1155,6]]},"1943":{"position":[[349,6]]},"3001":{"position":[[275,6]]},"3003":{"position":[[215,6]]},"3144":{"position":[[625,6]]},"3287":{"position":[[23,6]]},"3294":{"position":[[24,6]]},"3296":{"position":[[80,6]]},"3446":{"position":[[747,6]]},"3551":{"position":[[214,6],[253,6]]},"3553":{"position":[[213,6],[232,6]]},"3555":{"position":[[214,6],[253,6]]},"3557":{"position":[[215,6],[255,6]]},"3559":{"position":[[216,6],[264,6]]},"3752":{"position":[[287,6],[537,6],[819,6],[1139,6]]},"3832":{"position":[[2256,6],[2509,6],[4017,6],[4270,6]]},"3912":{"position":[[2177,6]]},"3916":{"position":[[2357,6]]},"3918":{"position":[[1232,6]]},"3928":{"position":[[1322,6]]},"3932":{"position":[[836,6],[871,6]]},"3984":{"position":[[989,6]]},"3986":{"position":[[721,6]]},"3992":{"position":[[891,6]]}}}],["actionargu",{"_index":737,"t":{"112":{"position":[[1058,15]]},"1925":{"position":[[920,15]]}}}],["actioncontext",{"_index":750,"t":{"112":{"position":[[1308,13],[1368,13],[1436,13]]},"1925":{"position":[[1170,13],[1230,13],[1298,13]]}}}],["actiondescriptor",{"_index":719,"t":{"112":{"position":[[553,16],[580,16],[652,16]]},"1913":{"position":[[471,16],[498,16],[578,16],[649,16]]},"1925":{"position":[[401,16],[428,16],[500,16]]},"1933":{"position":[[370,16],[397,16],[469,16]]},"1941":{"position":[[346,16],[373,16]]},"1951":{"position":[[422,16],[449,16]]},"3454":{"position":[[222,16]]},"3916":{"position":[[9007,16]]}}}],["actionend",{"_index":5125,"t":{"1611":{"position":[[166,9],[341,9],[747,9]]}}}],["actionexecutedcontext",{"_index":8581,"t":{"3708":{"position":[[1637,21]]},"3716":{"position":[[350,21]]},"3922":{"position":[[884,21]]},"3956":{"position":[[1181,21]]}}}],["actionexecutingcontext",{"_index":711,"t":{"112":{"position":[[419,22]]},"1665":{"position":[[181,22]]},"1925":{"position":[[267,22]]},"1927":{"position":[[307,22]]},"1929":{"position":[[268,22]]},"1961":{"position":[[315,22]]},"3708":{"position":[[2010,22]]},"3716":{"position":[[452,22]]},"3922":{"position":[[859,22]]},"3956":{"position":[[1478,22]]}}}],["actionexecutiondeleg",{"_index":713,"t":{"112":{"position":[[451,23]]},"1665":{"position":[[212,23]]},"1925":{"position":[[299,23]]},"1927":{"position":[[339,23]]},"1929":{"position":[[300,23]]},"1961":{"position":[[347,23]]}}}],["actionfilt",{"_index":5204,"t":{"1665":{"position":[[44,12]]}}}],["actionfilterattribut",{"_index":5798,"t":{"1903":{"position":[[64,21],[598,21]]},"1909":{"position":[[377,21],[910,21]]},"1927":{"position":[[108,21]]}}}],["actionmethodexecutor",{"_index":8222,"t":{"3452":{"position":[[3450,20]]},"3916":{"position":[[6446,20]]}}}],["actionnam",{"_index":5881,"t":{"1941":{"position":[[524,10]]},"3452":{"position":[[1129,10]]},"3916":{"position":[[4125,10]]}}}],["actionresult",{"_index":8360,"t":{"3575":{"position":[[906,12]]},"3581":{"position":[[665,12]]},"3583":{"position":[[868,12]]}}}],["actionstart",{"_index":5124,"t":{"1611":{"position":[[138,11],[629,11],[689,11]]}}}],["actiontypenam",{"_index":8187,"t":{"3452":{"position":[[1153,14]]},"3916":{"position":[[4149,14]]}}}],["activ",{"_index":3440,"t":{"734":{"position":[[832,8],[7629,8]]},"2315":{"position":[[344,9]]}}}],["activemq",{"_index":5531,"t":{"1799":{"position":[[80,8]]}}}],["acttyp",{"_index":8210,"t":{"3452":{"position":[[2741,7]]},"3916":{"position":[[5737,7]]}}}],["ad",{"_index":2975,"t":{"570":{"position":[[1055,5]]},"645":{"position":[[212,5]]},"933":{"position":[[694,5],[825,5]]},"1907":{"position":[[270,5]]},"2937":{"position":[[1131,5],[1296,5]]},"3772":{"position":[[809,5]]},"3842":{"position":[[386,5],[1016,5],[1581,5],[2171,5],[2812,5],[3429,5]]}}}],["adapt",{"_index":3032,"t":{"585":{"position":[[339,5]]},"877":{"position":[[2370,5]]},"1024":{"position":[[182,5]]},"2686":{"position":[[28,5]]},"2688":{"position":[[50,5]]},"2692":{"position":[[13,5]]}}}],["adaptstatuscod",{"_index":7302,"t":{"3047":{"position":[[97,16]]},"3049":{"position":[[64,16]]}}}],["add",{"_index":262,"t":{"15":{"position":[[340,3],[449,3]]},"17":{"position":[[334,3],[443,3]]},"308":{"position":[[208,3]]},"560":{"position":[[713,3]]},"570":{"position":[[1780,3],[2125,3]]},"635":{"position":[[7,3]]},"645":{"position":[[147,3]]},"706":{"position":[[281,3]]},"713":{"position":[[0,3],[82,3]]},"717":{"position":[[20,3]]},"726":{"position":[[21,3]]},"734":{"position":[[96,3]]},"939":{"position":[[123,3]]},"1062":{"position":[[10,3],[107,3]]},"1139":{"position":[[30,3]]},"1319":{"position":[[282,3]]},"1379":{"position":[[212,3]]},"1416":{"position":[[111,3]]},"1420":{"position":[[281,3],[730,3]]},"1547":{"position":[[126,3],[342,3]]},"1549":{"position":[[257,3],[422,3]]},"1594":{"position":[[20,3]]},"1596":{"position":[[13,3]]},"1607":{"position":[[257,3]]},"1631":{"position":[[99,3]]},"1661":{"position":[[939,3]]},"1739":{"position":[[507,3],[616,3]]},"1759":{"position":[[33,3]]},"1887":{"position":[[168,3]]},"1907":{"position":[[209,3],[334,3],[399,3],[534,3]]},"1913":{"position":[[1343,3]]},"1919":{"position":[[806,3]]},"1925":{"position":[[1535,3]]},"1927":{"position":[[852,3]]},"1933":{"position":[[972,3]]},"1935":{"position":[[467,3]]},"1941":{"position":[[1223,3]]},"1943":{"position":[[417,3]]},"1951":{"position":[[864,3]]},"2175":{"position":[[365,3]]},"2383":{"position":[[566,3]]},"2742":{"position":[[128,3]]},"2866":{"position":[[48,3]]},"2931":{"position":[[0,3],[14,3]]},"2947":{"position":[[0,3],[14,3]]},"2961":{"position":[[0,3],[14,3]]},"3001":{"position":[[291,3]]},"3003":{"position":[[225,3]]},"3023":{"position":[[936,3]]},"3080":{"position":[[214,3]]},"3224":{"position":[[847,3]]},"3230":{"position":[[15,3]]},"3254":{"position":[[393,3],[768,3]]},"3267":{"position":[[205,3],[226,3]]},"3291":{"position":[[868,3],[1908,3]]},"3498":{"position":[[178,3],[251,3]]},"3500":{"position":[[47,3],[157,3],[281,3],[450,3],[641,3]]},"3506":{"position":[[121,3],[232,3],[350,3]]},"3508":{"position":[[39,3],[121,3]]},"3543":{"position":[[178,3],[251,3]]},"3575":{"position":[[238,3],[311,3]]},"3581":{"position":[[241,3],[323,3]]},"3583":{"position":[[346,3],[428,3]]},"3620":{"position":[[166,3]]},"3694":{"position":[[187,3]]},"3702":{"position":[[553,3]]},"3934":{"position":[[1417,3]]},"3938":{"position":[[1351,3]]},"3950":{"position":[[331,3]]},"3982":{"position":[[763,3]]},"3986":{"position":[[1482,3]]},"3992":{"position":[[3069,3],[3325,3],[3709,3]]}}}],["add_tenant_t",{"_index":7273,"t":{"2931":{"position":[[14,16]]},"2947":{"position":[[14,16]]},"2961":{"position":[[14,16]]}}}],["addagileconfig",{"_index":2619,"t":{"461":{"position":[[419,14],[597,14],[768,14],[946,14],[1319,14],[1487,14]]}}}],["addapploc",{"_index":2172,"t":{"338":{"position":[[459,18]]},"2519":{"position":[[119,18]]}}}],["addassemblyrefer",{"_index":8627,"t":{"3744":{"position":[[344,20],[406,20]]}}}],["addassemblyreferencebynam",{"_index":8626,"t":{"3744":{"position":[[171,26],[281,26]]},"3746":{"position":[[170,26]]}}}],["addasync",{"_index":3254,"t":{"645":{"position":[[347,8]]}}}],["addauthent",{"_index":946,"t":{"125":{"position":[[89,17]]}}}],["addcap",{"_index":5701,"t":{"1827":{"position":[[17,6]]}}}],["addclass",{"_index":4333,"t":{"1440":{"position":[[102,10],[243,10],[329,10],[567,10],[740,10],[846,10]]}}}],["addcompon",{"_index":2222,"t":{"340":{"position":[[404,12],[433,12],[486,12]]},"350":{"position":[[108,12],[288,12],[339,12],[534,12],[741,12]]},"369":{"position":[[17,12],[450,12]]},"371":{"position":[[603,12],[698,12]]}}}],["addconfigurableopt",{"_index":6824,"t":{"2711":{"position":[[344,22]]},"2725":{"position":[[37,22]]}}}],["addconsoleformatt",{"_index":8091,"t":{"3430":{"position":[[1957,19],[2060,19],[2162,19],[2408,19],[3215,19],[3469,19],[3690,19],[4551,19]]},"3910":{"position":[[1629,19]]},"3916":{"position":[[679,19],[2541,19],[2609,19],[2871,19]]}}}],["addcontrol",{"_index":955,"t":{"127":{"position":[[81,14]]},"216":{"position":[[862,14]]},"288":{"position":[[560,14]]},"338":{"position":[[367,14]]},"371":{"position":[[245,14]]},"373":{"position":[[79,14]]},"411":{"position":[[550,14]]},"595":{"position":[[254,14],[337,14]]},"617":{"position":[[2430,14]]},"637":{"position":[[9,14]]},"1582":{"position":[[328,14],[426,14]]},"1843":{"position":[[254,14],[343,14]]},"1867":{"position":[[597,14]]},"1979":{"position":[[440,14]]},"1991":{"position":[[76,14]]},"1995":{"position":[[155,14]]},"2014":{"position":[[76,14]]},"2018":{"position":[[155,14]]},"2272":{"position":[[384,14]]},"2776":{"position":[[556,14]]},"2879":{"position":[[194,14]]},"3630":{"position":[[452,14]]},"3676":{"position":[[199,14]]},"3708":{"position":[[3784,14]]}}}],["addcontrollerswithview",{"_index":5812,"t":{"1907":{"position":[[156,23]]},"2085":{"position":[[9,23]]},"2087":{"position":[[9,23]]},"2352":{"position":[[226,23]]},"2357":{"position":[[270,23]]},"2359":{"position":[[29,23],[261,23]]},"2361":{"position":[[29,23],[484,23]]},"2363":{"position":[[29,23],[302,23]]},"2365":{"position":[[29,23]]},"2367":{"position":[[29,23]]},"2369":{"position":[[29,23]]},"2371":{"position":[[29,23]]},"2373":{"position":[[29,23]]},"2379":{"position":[[103,23]]},"2381":{"position":[[86,23]]},"2519":{"position":[[92,23]]},"2848":{"position":[[350,23]]},"3668":{"position":[[49,23]]}}}],["addcooki",{"_index":949,"t":{"125":{"position":[[159,9]]},"129":{"position":[[228,9]]}}}],["addcorsaccessor",{"_index":1587,"t":{"216":{"position":[[834,15]]},"338":{"position":[[339,15]]},"340":{"position":[[736,15],[1771,15]]},"411":{"position":[[361,15],[519,15]]}}}],["adddapp",{"_index":2875,"t":{"544":{"position":[[36,9],[83,9],[172,9]]}}}],["adddatabas",{"_index":8159,"t":{"3434":{"position":[[657,11]]},"3438":{"position":[[132,11]]}}}],["adddatabaseaccessor",{"_index":2780,"t":{"514":{"position":[[334,19],[660,19]]},"524":{"position":[[393,19]]},"526":{"position":[[83,19]]},"706":{"position":[[113,19]]},"761":{"position":[[9,19]]},"899":{"position":[[1131,19],[1364,19],[1520,19],[1644,19]]},"1058":{"position":[[260,19]]},"1313":{"position":[[507,19]]},"1317":{"position":[[334,19]]},"1319":{"position":[[113,19]]},"2821":{"position":[[501,19]]},"2927":{"position":[[272,19]]},"2943":{"position":[[272,19]]},"2957":{"position":[[272,19]]},"2969":{"position":[[9,19]]}}}],["adddatabasefil",{"_index":8164,"t":{"3436":{"position":[[172,15]]}}}],["adddatabaselog",{"_index":8158,"t":{"3434":{"position":[[446,18],[526,18],[940,18],[1033,18],[1185,18],[1254,18],[1346,18],[1483,18],[1710,18],[1914,18],[2082,18],[2246,18],[2522,18],[2793,18]]},"3458":{"position":[[4,18],[38,18],[495,18]]},"3470":{"position":[[188,18]]},"3910":{"position":[[1859,18]]},"3916":{"position":[[3081,18]]},"3928":{"position":[[805,18]]}}}],["adddatavalid",{"_index":1559,"t":{"210":{"position":[[429,17]]},"593":{"position":[[4,17]]},"595":{"position":[[272,17],[305,17]]},"617":{"position":[[2448,17]]},"621":{"position":[[10,17],[75,17]]},"625":{"position":[[11,17]]},"2272":{"position":[[160,17]]},"2274":{"position":[[102,17]]}}}],["adddateformatstr",{"_index":6233,"t":{"2361":{"position":[[104,19]]},"3914":{"position":[[1518,19]]}}}],["adddateonlyconvert",{"_index":6255,"t":{"2381":{"position":[[182,21],[393,21]]},"3910":{"position":[[2309,21]]},"3912":{"position":[[1147,21]]}}}],["adddatetimejsonconvert",{"_index":5962,"t":{"2087":{"position":[[36,24]]},"4004":{"position":[[66,24]]}}}],["adddatetimetypeconvert",{"_index":6234,"t":{"2361":{"position":[[165,25],[257,25]]},"3914":{"position":[[1545,25]]}}}],["addday",{"_index":3702,"t":{"885":{"position":[[126,7]]}}}],["adddb",{"_index":2823,"t":{"526":{"position":[[135,5],[377,5]]},"534":{"position":[[83,5],[117,5]]},"572":{"position":[[1267,5]]},"935":{"position":[[37,5]]},"1313":{"position":[[551,5]]},"2821":{"position":[[542,5]]},"2943":{"position":[[313,5],[455,5]]},"3930":{"position":[[1072,5]]},"3932":{"position":[[801,5]]}}}],["adddbpool",{"_index":2774,"t":{"512":{"position":[[39,9]]},"514":{"position":[[386,9],[502,9],[701,9]]},"524":{"position":[[434,9],[536,9],[601,9],[702,9]]},"534":{"position":[[140,9]]},"572":{"position":[[1285,9]]},"706":{"position":[[154,9]]},"761":{"position":[[50,9]]},"899":{"position":[[24,9],[82,9],[165,9],[261,9],[329,9],[407,9],[484,9],[538,9],[615,9],[737,9],[805,9],[860,9],[957,9],[1023,9],[1172,9],[1255,9],[1405,9],[1561,9],[1697,9],[1798,9]]},"935":{"position":[[59,9]]},"947":{"position":[[549,9]]},"1058":{"position":[[302,9],[341,9]]},"1313":{"position":[[619,9]]},"1317":{"position":[[386,9],[458,9]]},"1319":{"position":[[154,9]]},"2927":{"position":[[313,9],[351,9]]},"2943":{"position":[[347,9],[468,9],[482,9]]},"2957":{"position":[[313,9],[351,9]]},"2969":{"position":[[115,9]]},"3930":{"position":[[1062,9]]},"3932":{"position":[[812,9],[940,9],[1007,9]]}}}],["adddistributedmemorycach",{"_index":1791,"t":{"245":{"position":[[8,25],[269,25]]},"2848":{"position":[[131,25]]}}}],["adddistributedsqlservercach",{"_index":1801,"t":{"247":{"position":[[21,28],[443,28]]}}}],["adddynamicapicontrol",{"_index":2227,"t":{"340":{"position":[[970,24],[1265,24],[1792,24]]},"1582":{"position":[[4,24],[346,24],[386,24]]},"2272":{"position":[[132,24]]},"3630":{"position":[[710,24]]}}}],["addentityframeworkmysql",{"_index":3488,"t":{"734":{"position":[[8078,23]]}}}],["addentri",{"_index":2237,"t":{"340":{"position":[[1834,8]]}}}],["addeventbu",{"_index":2171,"t":{"338":{"position":[[435,11]]},"1795":{"position":[[2566,11],[3012,11]]},"1799":{"position":[[752,11]]},"1801":{"position":[[3191,11]]},"1803":{"position":[[5184,11]]},"1805":{"position":[[495,11]]},"1807":{"position":[[824,11]]},"1809":{"position":[[455,11]]},"1813":{"position":[[9,11]]},"1819":{"position":[[489,11]]},"1821":{"position":[[25,11]]}}}],["addexecutor",{"_index":5657,"t":{"1809":{"position":[[499,11]]},"1821":{"position":[[445,11]]},"3826":{"position":[[676,11]]},"3832":{"position":[[913,11]]}}}],["addfallbackpolici",{"_index":5675,"t":{"1819":{"position":[[522,17],[899,17]]}}}],["addfil",{"_index":8116,"t":{"3432":{"position":[[237,7]]},"3436":{"position":[[208,7]]},"3438":{"position":[[97,7]]}}}],["addfilelog",{"_index":8115,"t":{"3432":{"position":[[30,14],[86,14],[175,14],[951,14],[1013,14],[1121,14],[1186,14],[1352,14],[1440,14],[1631,14],[1878,14],[2173,14],[2319,14],[2476,14],[3171,14],[3455,14],[3943,14],[4157,14],[4421,14],[4587,14],[4893,14]]},"3466":{"position":[[804,14]]},"3910":{"position":[[1737,14]]},"3916":{"position":[[2969,14]]},"3928":{"position":[[747,14]]}}}],["addfilt",{"_index":8088,"t":{"3430":{"position":[[608,9],[870,9],[1276,9]]}}}],["addfluentvalid",{"_index":3239,"t":{"637":{"position":[[27,19]]}}}],["addfriendlyexcept",{"_index":5718,"t":{"1841":{"position":[[31,20]]},"1843":{"position":[[272,20],[308,20]]},"1867":{"position":[[615,20]]},"2272":{"position":[[181,20]]},"2274":{"position":[[123,20]]},"4004":{"position":[[311,20]]}}}],["addhead",{"_index":5819,"t":{"1909":{"position":[[166,9]]}}}],["addheaderattribut",{"_index":5813,"t":{"1907":{"position":[[217,18]]},"1909":{"position":[[84,18]]}}}],["addhostedservic",{"_index":7074,"t":{"2805":{"position":[[537,16]]},"2807":{"position":[[354,16],[391,16]]},"2813":{"position":[[1091,16]]},"2819":{"position":[[498,16]]},"2836":{"position":[[609,16],[1815,16]]}}}],["addhttpclient",{"_index":8274,"t":{"3498":{"position":[[71,13]]},"3543":{"position":[[71,13]]},"3575":{"position":[[65,13],[131,13]]},"3577":{"position":[[70,13],[165,13]]},"3579":{"position":[[312,13],[419,13]]},"3581":{"position":[[424,13]]},"3583":{"position":[[612,13]]},"3587":{"position":[[111,13],[282,13]]},"3589":{"position":[[85,13],[267,13],[702,13]]},"3591":{"position":[[57,13]]},"3914":{"position":[[2205,13],[2300,13]]}}}],["addinject",{"_index":1588,"t":{"216":{"position":[[879,9]]},"338":{"position":[[384,9]]},"371":{"position":[[263,9]]},"593":{"position":[[32,9]]},"1582":{"position":[[39,9]]},"1841":{"position":[[62,9]]},"1979":{"position":[[457,9],[476,9]]},"1991":{"position":[[93,9]]},"1995":{"position":[[172,9]]},"2014":{"position":[[93,9]]},"2018":{"position":[[172,9]]},"2266":{"position":[[26,9]]},"2272":{"position":[[0,9],[61,9],[333,9],[402,9]]},"2274":{"position":[[152,9]]},"2278":{"position":[[46,9],[94,9],[116,9]]},"2285":{"position":[[42,9]]},"2776":{"position":[[573,9]]},"2879":{"position":[[212,9]]},"3666":{"position":[[119,9]]},"3668":{"position":[[76,9]]},"3680":{"position":[[92,9]]},"3918":{"position":[[2410,9],[2520,9]]},"3920":{"position":[[1143,9]]},"3970":{"position":[[210,9]]},"3992":{"position":[[721,9]]}}}],["addinjectbas",{"_index":6074,"t":{"2266":{"position":[[75,13]]},"2274":{"position":[[0,13],[65,13]]},"4006":{"position":[[41,13]]}}}],["addinjectmini",{"_index":6076,"t":{"2266":{"position":[[223,13]]},"2276":{"position":[[79,13]]},"3932":{"position":[[25,13],[554,13],[2566,13]]}}}],["addinjectwithunifyresult",{"_index":6075,"t":{"2266":{"position":[[128,24],[156,24]]},"2278":{"position":[[0,24]]},"3676":{"position":[[114,24],[238,24]]},"3680":{"position":[[58,24]]},"3708":{"position":[[3802,24]]}}}],["addit",{"_index":7161,"t":{"2877":{"position":[[43,10],[131,10],[199,10]]},"3910":{"position":[[635,10],[723,10],[811,10],[879,10]]}}}],["addjob",{"_index":6021,"t":{"2175":{"position":[[113,6]]},"3762":{"position":[[463,6]]},"3764":{"position":[[72,6]]},"3766":{"position":[[99,6]]},"3768":{"position":[[121,6],[2531,6]]},"3772":{"position":[[174,6],[467,6],[496,6]]},"3774":{"position":[[131,6]]},"3781":{"position":[[669,6]]},"3806":{"position":[[342,6],[1736,6]]},"3808":{"position":[[471,6],[562,6]]},"3810":{"position":[[1031,6]]},"3817":{"position":[[453,6],[1533,6]]},"3826":{"position":[[301,6],[335,6],[384,6],[428,6],[481,6],[552,6]]},"3832":{"position":[[953,6]]},"3842":{"position":[[222,6],[813,6],[1400,6],[1982,6],[2604,6],[3229,6]]}}}],["addjsonfil",{"_index":2602,"t":{"455":{"position":[[543,11],[794,11],[1062,11]]}}}],["addjsonopt",{"_index":1946,"t":{"288":{"position":[[344,14],[578,14]]},"2352":{"position":[[253,14]]},"2359":{"position":[[56,14],[518,14]]},"2361":{"position":[[56,14]]},"2363":{"position":[[56,14]]},"2365":{"position":[[56,14]]},"2367":{"position":[[56,14]]},"2369":{"position":[[56,14]]},"2371":{"position":[[56,14]]},"2373":{"position":[[56,14]]},"2379":{"position":[[130,14]]},"2381":{"position":[[113,14]]}}}],["addjsonserializerpascalpropertynam",{"_index":5961,"t":{"2085":{"position":[[36,37]]}}}],["addjwt",{"_index":954,"t":{"127":{"position":[[63,6],[154,6],[237,6],[339,6]]},"129":{"position":[[33,6]]},"133":{"position":[[1139,6]]},"139":{"position":[[9,6]]},"150":{"position":[[116,6]]},"3918":{"position":[[3943,6]]}}}],["addlog",{"_index":8165,"t":{"3438":{"position":[[23,10],[65,10]]}}}],["addloggingfil",{"_index":8163,"t":{"3436":{"position":[[155,14]]}}}],["addlongtypeconvert",{"_index":6251,"t":{"2379":{"position":[[199,21],[317,21],[539,21]]},"3914":{"position":[[996,21]]}}}],["addmigr",{"_index":3472,"t":{"734":{"position":[[6966,12],[7250,12]]}}}],["addmigrationimpl",{"_index":3475,"t":{"734":{"position":[[7106,16]]}}}],["addmillisecond",{"_index":7108,"t":{"2846":{"position":[[158,15]]}}}],["addminut",{"_index":6041,"t":{"2208":{"position":[[199,10]]},"2440":{"position":[[80,10]]},"2448":{"position":[[199,10]]}}}],["addmongodb",{"_index":6732,"t":{"2603":{"position":[[36,10],[87,10],[144,10],[200,10]]}}}],["addmonitor",{"_index":5649,"t":{"1807":{"position":[[870,10]]},"1821":{"position":[[406,10]]},"3826":{"position":[[627,10]]},"3828":{"position":[[903,10]]},"3832":{"position":[[864,10]]}}}],["addmonitorlog",{"_index":8173,"t":{"3448":{"position":[[155,17],[218,17]]},"3450":{"position":[[76,17],[275,17]]},"3452":{"position":[[66,17]]},"3454":{"position":[[98,17]]},"3456":{"position":[[395,17]]},"3910":{"position":[[2002,17]]},"3916":{"position":[[3253,17],[8883,17]]},"3924":{"position":[[72,17]]}}}],["addmonth",{"_index":8907,"t":{"3810":{"position":[[578,9]]}}}],["addmvcfilt",{"_index":765,"t":{"112":{"position":[[1628,12]]},"1907":{"position":[[595,12]]},"1913":{"position":[[1406,12]]},"1919":{"position":[[864,12]]},"1925":{"position":[[1591,12]]},"1927":{"position":[[911,12]]},"1933":{"position":[[1031,12]]},"1935":{"position":[[529,12]]},"1941":{"position":[[1279,12]]},"1943":{"position":[[476,12]]},"3448":{"position":[[57,12]]},"3922":{"position":[[1944,12]]},"3990":{"position":[[197,12]]}}}],["addncachedistributedcach",{"_index":1835,"t":{"251":{"position":[[255,25]]}}}],["addnewtonsoftjson",{"_index":6224,"t":{"2357":{"position":[[297,17]]},"2359":{"position":[[288,17]]},"2361":{"position":[[511,17]]},"2363":{"position":[[329,17]]},"2377":{"position":[[48,17]]},"2379":{"position":[[248,17],[470,17]]},"2381":{"position":[[321,17]]},"2383":{"position":[[339,17]]},"3676":{"position":[[64,17],[89,17],[158,17],[217,17]]}}}],["addorupdateproperti",{"_index":8810,"t":{"3783":{"position":[[386,19],[1564,19],[1601,19]]}}}],["addpbkdf2encryptionopt",{"_index":5242,"t":{"1685":{"position":[[215,26]]}}}],["addpersist",{"_index":8943,"t":{"3826":{"position":[[727,14]]}}}],["addproperti",{"_index":8816,"t":{"3783":{"position":[[1465,11],[1494,11]]}}}],["addremoterequest",{"_index":46,"t":{"3":{"position":[[369,16]]},"338":{"position":[[406,16]]},"1995":{"position":[[202,16]]},"2018":{"position":[[202,16]]},"2821":{"position":[[592,16]]},"2877":{"position":[[78,16],[166,16],[243,16],[319,16]]},"2901":{"position":[[255,16]]},"3373":{"position":[[401,16]]},"3481":{"position":[[98,16]]},"3498":{"position":[[16,16]]},"3543":{"position":[[16,16]]},"3575":{"position":[[9,16]]},"3587":{"position":[[35,16]]},"3589":{"position":[[9,16]]},"3591":{"position":[[9,16]]},"3593":{"position":[[42,16]]},"3910":{"position":[[758,16],[846,16],[923,16],[999,16]]}}}],["addresponsecach",{"_index":9499,"t":{"3934":{"position":[[583,18]]}}}],["address",{"_index":824,"t":{"114":{"position":[[1321,7]]},"441":{"position":[[185,7],[480,7]]},"520":{"position":[[312,7],[326,7]]},"617":{"position":[[622,7],[663,7]]},"696":{"position":[[4370,7]]},"708":{"position":[[484,7]]},"824":{"position":[[93,7]]},"828":{"position":[[91,7]]},"830":{"position":[[298,7]]},"834":{"position":[[185,7]]},"844":{"position":[[435,7]]},"851":{"position":[[499,7]]},"860":{"position":[[193,7],[205,7]]},"862":{"position":[[241,7],[253,7]]},"901":{"position":[[340,7],[354,7]]},"1145":{"position":[[239,7],[413,7],[470,7]]},"1147":{"position":[[304,7],[361,7]]},"1151":{"position":[[382,7],[439,7]]},"1170":{"position":[[71,7],[99,7],[185,7],[213,7],[251,7],[279,7],[579,7],[607,7],[698,7],[726,7],[764,7],[792,7]]},"1181":{"position":[[168,7],[257,7],[468,7],[568,7]]},"1183":{"position":[[168,7],[531,7]]},"1315":{"position":[[340,7],[354,7]]},"1362":{"position":[[43,7]]},"1364":{"position":[[424,7]]},"1566":{"position":[[852,7]]},"2684":{"position":[[160,7],[177,7]]},"3446":{"position":[[1796,7]]},"3452":{"position":[[2865,7]]},"3526":{"position":[[40,7],[84,7]]},"3565":{"position":[[76,7],[169,7]]},"3754":{"position":[[277,7],[312,7]]},"3916":{"position":[[5861,7]]},"3928":{"position":[[2358,7]]}}}],["address_list",{"_index":2807,"t":{"520":{"position":[[312,12]]},"901":{"position":[[340,12]]},"1315":{"position":[[340,12]]}}}],["addristertyp",{"_index":10033,"t":{"3982":{"position":[[148,14]]}}}],["addschedul",{"_index":6024,"t":{"2175":{"position":[[332,11]]},"3762":{"position":[[413,11]]},"3764":{"position":[[39,11]]},"3766":{"position":[[66,11]]},"3768":{"position":[[88,11],[2470,11]]},"3772":{"position":[[51,11],[99,11],[141,11]]},"3774":{"position":[[98,11]]},"3781":{"position":[[67,11]]},"3806":{"position":[[309,11],[1703,11]]},"3808":{"position":[[438,11]]},"3810":{"position":[[70,11]]},"3817":{"position":[[420,11],[1500,11]]},"3824":{"position":[[66,11],[113,11],[264,11]]},"3826":{"position":[[16,11],[260,11]]},"3828":{"position":[[857,11]]},"3832":{"position":[[831,11]]}}}],["addscop",{"_index":4289,"t":{"1418":{"position":[[75,9]]},"1909":{"position":[[315,9],[567,9]]},"1913":{"position":[[1596,9]]},"1919":{"position":[[1044,9]]},"1925":{"position":[[1767,9]]},"1933":{"position":[[1213,9]]},"1941":{"position":[[1455,9]]},"1963":{"position":[[66,9]]},"3399":{"position":[[468,9]]}}}],["addsecond",{"_index":8869,"t":{"3806":{"position":[[235,10],[1620,10],[2950,10]]},"3810":{"position":[[634,10],[694,10]]}}}],["addsensitivedetect",{"_index":2174,"t":{"338":{"position":[[516,21]]},"2786":{"position":[[70,21]]},"2798":{"position":[[70,21]]}}}],["addsess",{"_index":7111,"t":{"2848":{"position":[[180,10]]}}}],["addsignalr",{"_index":962,"t":{"127":{"position":[[304,10]]},"3144":{"position":[[386,10]]}}}],["addsimpleeventbu",{"_index":5317,"t":{"1701":{"position":[[125,17]]}}}],["addsingleton",{"_index":7576,"t":{"3189":{"position":[[310,12]]},"3215":{"position":[[560,12],[619,12]]}}}],["addspecificationdocu",{"_index":6079,"t":{"2272":{"position":[[94,25]]},"3630":{"position":[[414,25],[677,25]]}}}],["addsqlsugar",{"_index":7765,"t":{"3254":{"position":[[36,11],[89,11],[1127,11],[1243,11]]},"3275":{"position":[[9,11]]}}}],["addsqlsugarsetup",{"_index":7606,"t":{"3215":{"position":[[64,16],[823,16]]}}}],["addstackexchangerediscach",{"_index":1818,"t":{"249":{"position":[[48,26],[137,26]]}}}],["addsubscrib",{"_index":5513,"t":{"1795":{"position":[[2616,13],[2689,13],[2754,14],[2822,13],[2956,13]]},"1815":{"position":[[439,13]]},"1821":{"position":[[264,13]]},"3920":{"position":[[1072,13]]},"3922":{"position":[[184,13]]}}}],["addsubscriberassembl",{"_index":5704,"t":{"1827":{"position":[[105,21]]}}}],["addtaskschedul",{"_index":6279,"t":{"2395":{"position":[[175,16]]},"2406":{"position":[[697,16]]},"2415":{"position":[[390,16]]},"2434":{"position":[[757,16]]}}}],["addtimeonlyconvert",{"_index":6256,"t":{"2381":{"position":[[260,21],[471,21]]},"3910":{"position":[[2336,21]]},"3912":{"position":[[1174,21]]}}}],["addtrigg",{"_index":9032,"t":{"3886":{"position":[[184,10]]}}}],["addtriggerbuild",{"_index":8932,"t":{"3819":{"position":[[404,17],[477,17],[516,17],[570,18]]}}}],["addunifyjsonopt",{"_index":8609,"t":{"3722":{"position":[[66,19]]}}}],["addunifyprovid",{"_index":8600,"t":{"3716":{"position":[[793,16]]}}}],["addunifyresult",{"_index":6082,"t":{"2278":{"position":[[71,14]]}}}],["addunitofwork",{"_index":7854,"t":{"3287":{"position":[[1253,13],[2989,13]]}}}],["addus",{"_index":8435,"t":{"3620":{"position":[[224,7]]},"3746":{"position":[[139,8],[272,8],[303,8]]}}}],["addviewengin",{"_index":2173,"t":{"338":{"position":[[490,13]]},"3732":{"position":[[100,13]]}}}],["addvirtualfileserv",{"_index":2175,"t":{"338":{"position":[[550,20]]},"1721":{"position":[[9,20]]},"2096":{"position":[[18,20],[169,20]]}}}],["addwebcompon",{"_index":2261,"t":{"350":{"position":[[179,15],[240,15],[422,15],[461,15],[631,15],[670,15]]},"2879":{"position":[[443,15]]},"3430":{"position":[[1097,15],[2229,15]]},"3920":{"position":[[812,15]]}}}],["addx",{"_index":2176,"t":{"338":{"position":[[583,4]]}}}],["addxx",{"_index":2177,"t":{"338":{"position":[[600,5]]}}}],["addxxx",{"_index":2159,"t":{"336":{"position":[[286,6],[301,6]]},"338":{"position":[[618,6]]},"340":{"position":[[1197,6],[1252,6],[1822,6]]},"353":{"position":[[337,6]]},"373":{"position":[[39,6],[52,6]]},"1995":{"position":[[64,6]]},"2018":{"position":[[64,6]]},"2175":{"position":[[23,6]]}}}],["addxxxx",{"_index":2178,"t":{"338":{"position":[[637,7],[1171,7]]},"369":{"position":[[754,7]]}}}],["addxxxxx",{"_index":2179,"t":{"338":{"position":[[657,8]]}}}],["addxxxxxx",{"_index":2180,"t":{"338":{"position":[[678,9]]}}}],["addyear",{"_index":7713,"t":{"3234":{"position":[[612,8]]}}}],["addyourinitservic",{"_index":2221,"t":{"340":{"position":[[362,18]]}}}],["aded58d",{"_index":9113,"t":{"3914":{"position":[[1034,7],[1100,7],[1308,7],[1431,7],[1579,7],[2805,7]]}}}],["admin",{"_index":808,"t":{"114":{"position":[[979,5]]},"199":{"position":[[38,5],[130,5],[177,5],[398,5],[515,5]]},"1801":{"position":[[3276,5]]},"3446":{"position":[[1454,5]]},"3452":{"position":[[2146,5]]},"3686":{"position":[[283,5],[304,5]]},"3916":{"position":[[5142,5]]},"3928":{"position":[[2016,5]]}}}],["ado",{"_index":2870,"t":{"540":{"position":[[40,3]]},"1157":{"position":[[47,3]]},"1566":{"position":[[610,3]]},"2981":{"position":[[493,3]]},"3273":{"position":[[117,3],[291,3],[505,3]]},"3287":{"position":[[365,3]]},"3291":{"position":[[1597,3]]}}}],["ae",{"_index":5223,"t":{"1674":{"position":[[16,3]]},"1681":{"position":[[6,3]]},"1689":{"position":[[29,3],[175,3]]},"2559":{"position":[[296,2]]}}}],["aeda902",{"_index":9072,"t":{"3912":{"position":[[845,7],[2507,7]]}}}],["aeea2b1",{"_index":9661,"t":{"3952":{"position":[[648,7]]}}}],["aesencrypt",{"_index":5236,"t":{"1681":{"position":[[87,13],[139,13]]}}}],["aeshash",{"_index":5235,"t":{"1681":{"position":[[77,7],[161,7],[190,7]]}}}],["af",{"_index":6425,"t":{"2559":{"position":[[0,2],[9,2]]}}}],["afa4ac3",{"_index":9654,"t":{"3952":{"position":[[236,7]]}}}],["affect",{"_index":3548,"t":{"769":{"position":[[558,8]]}}}],["afterscript",{"_index":8569,"t":{"3704":{"position":[[859,11]]},"3924":{"position":[[4399,11]]}}}],["ag",{"_index":823,"t":{"114":{"position":[[1313,3]]},"550":{"position":[[273,3],[280,3],[302,3]]},"585":{"position":[[154,3]]},"587":{"position":[[485,3]]},"606":{"position":[[292,3]]},"608":{"position":[[503,3],[520,3]]},"617":{"position":[[825,3],[848,3]]},"639":{"position":[[128,3],[353,3]]},"645":{"position":[[36,3]]},"665":{"position":[[80,3],[133,3],[218,3],[279,3],[345,3],[386,3],[459,3],[508,3],[615,3],[679,3],[775,3],[847,3],[924,3],[976,3],[1060,3],[1120,3]]},"667":{"position":[[83,3],[139,3],[227,3],[291,3],[360,3],[404,3],[480,3],[532,3],[642,3],[709,3],[808,3],[883,3],[963,3],[1018,3],[1105,3],[1168,3]]},"669":{"position":[[80,3],[133,3],[218,3],[279,3],[345,3],[386,3],[459,3],[508,3],[615,3],[679,3],[775,3],[847,3],[924,3],[976,3],[1060,3],[1120,3]]},"671":{"position":[[83,3],[139,3],[227,3],[291,3],[360,3],[404,3],[480,3],[532,3],[642,3],[709,3],[808,3],[883,3],[963,3],[1018,3],[1105,3],[1168,3]]},"696":{"position":[[4338,3]]},"708":{"position":[[416,3]]},"824":{"position":[[108,3]]},"828":{"position":[[86,3]]},"830":{"position":[[230,3]]},"834":{"position":[[176,3]]},"844":{"position":[[403,3]]},"851":{"position":[[431,3]]},"853":{"position":[[567,3]]},"860":{"position":[[214,3],[222,3]]},"862":{"position":[[262,3],[270,3]]},"866":{"position":[[469,3]]},"875":{"position":[[111,3]]},"960":{"position":[[606,3],[659,3],[959,3],[1119,3],[1300,3],[1428,3],[1582,3]]},"969":{"position":[[216,3],[285,3],[551,3],[631,3]]},"971":{"position":[[216,3],[285,3],[551,3],[631,3]]},"1060":{"position":[[506,3]]},"1125":{"position":[[156,3],[310,3]]},"1127":{"position":[[293,3]]},"1145":{"position":[[207,3]]},"1160":{"position":[[210,3],[1111,3]]},"1162":{"position":[[220,3],[1169,3]]},"1168":{"position":[[223,3],[536,3]]},"1170":{"position":[[67,3],[94,3],[181,3],[208,3],[247,3],[274,3],[575,3],[602,3],[694,3],[721,3],[760,3],[787,3]]},"1173":{"position":[[208,3],[461,3]]},"1175":{"position":[[226,3],[497,3]]},"1177":{"position":[[208,3],[461,3]]},"1179":{"position":[[284,3],[429,3],[758,3],[914,3]]},"1185":{"position":[[82,3],[236,3],[570,3]]},"1242":{"position":[[206,3]]},"1244":{"position":[[143,3],[162,3]]},"1248":{"position":[[179,3],[283,3]]},"1269":{"position":[[103,3],[115,3]]},"1329":{"position":[[64,3],[156,3],[240,3],[296,3],[376,3],[448,3],[545,3],[648,3],[743,3],[810,3],[901,3],[984,3]]},"1331":{"position":[[67,3],[162,3],[249,3],[308,3],[391,3],[463,3],[563,3],[669,3],[767,3],[837,3],[931,3],[1017,3]]},"1333":{"position":[[64,3],[156,3],[240,3],[296,3],[376,3],[448,3],[545,3],[648,3],[743,3],[810,3],[901,3],[984,3]]},"1335":{"position":[[67,3],[162,3],[249,3],[308,3],[391,3],[466,3],[566,3],[672,3],[770,3],[840,3],[934,3],[1020,3]]},"1341":{"position":[[70,3],[168,3],[258,3],[361,3],[470,3],[571,3]]},"1343":{"position":[[73,3],[174,3],[267,3],[373,3],[485,3],[589,3]]},"1345":{"position":[[70,3],[168,3],[258,3],[361,3],[470,3],[571,3]]},"1347":{"position":[[73,3],[174,3],[267,3],[373,3],[485,3],[589,3]]},"1362":{"position":[[39,3]]},"1364":{"position":[[356,3]]},"1611":{"position":[[595,3]]},"1633":{"position":[[168,3],[235,3]]},"1779":{"position":[[332,3]]},"2167":{"position":[[273,3],[377,3]]},"2581":{"position":[[894,3],[1241,3],[1330,3]]},"2684":{"position":[[138,3],[151,3]]},"3273":{"position":[[463,3]]},"3446":{"position":[[1788,3]]},"3452":{"position":[[2855,3]]},"3664":{"position":[[223,3]]},"3916":{"position":[[5851,3]]},"3928":{"position":[[2350,3]]}}}],["agent",{"_index":8279,"t":{"3498":{"position":[[261,5]]},"3543":{"position":[[261,5]]},"3575":{"position":[[321,5]]},"3581":{"position":[[333,5]]},"3583":{"position":[[438,5]]},"3962":{"position":[[176,5]]}}}],["agep",{"_index":7813,"t":{"3273":{"position":[[436,4],[561,4]]}}}],["aggreg",{"_index":3857,"t":{"986":{"position":[[101,9]]}}}],["aggregateexcept",{"_index":9243,"t":{"3918":{"position":[[3566,18]]}}}],["agileconfig",{"_index":2620,"t":{"461":{"position":[[438,11],[787,11],[1338,11]]}}}],["aid",{"_index":3669,"t":{"866":{"position":[[389,3]]}}}],["aifi",{"_index":4811,"t":{"1511":{"position":[[2773,5]]}}}],["ajax",{"_index":1981,"t":{"300":{"position":[[236,4]]},"302":{"position":[[125,4]]},"417":{"position":[[9,4],[266,4]]},"419":{"position":[[26,4],[353,4]]},"1073":{"position":[[3,4]]}}}],["aka",{"_index":3272,"t":{"655":{"position":[[210,3]]}}}],["al",{"_index":6431,"t":{"2559":{"position":[[38,2]]}}}],["alachisoft",{"_index":1833,"t":{"251":{"position":[[181,10]]}}}],["aleadi",{"_index":9820,"t":{"3966":{"position":[[804,6]]}}}],["alex",{"_index":8632,"t":{"3750":{"position":[[418,4],[443,4]]}}}],["algorithm",{"_index":998,"t":{"127":{"position":[[1261,9],[1458,9]]},"3039":{"position":[[369,9]]},"3041":{"position":[[472,9]]},"3972":{"position":[[164,9]]}}}],["aliginconfig",{"_index":2615,"t":{"461":{"position":[[218,12]]}}}],["align",{"_index":6400,"t":{"2532":{"position":[[44,5]]}}}],["allofthem",{"_index":3186,"t":{"608":{"position":[[787,9]]},"2004":{"position":[[146,9]]}}}],["allow",{"_index":2499,"t":{"419":{"position":[[322,5]]}}}],["allowanonym",{"_index":1097,"t":{"137":{"position":[[160,14]]},"141":{"position":[[40,14]]},"1745":{"position":[[130,14]]},"3686":{"position":[[864,14],[939,14]]}}}],["allowanonymous",{"_index":5837,"t":{"1913":{"position":[[692,15],[914,15]]}}}],["allowanonymousattribut",{"_index":5839,"t":{"1913":{"position":[[798,23],[861,23]]}}}],["allowautoredirect",{"_index":8376,"t":{"3587":{"position":[[204,17],[390,17]]}}}],["allowcredenti",{"_index":2474,"t":{"415":{"position":[[278,16]]},"2991":{"position":[[284,16]]}}}],["allowedhost",{"_index":1633,"t":{"220":{"position":[[751,12]]},"688":{"position":[[310,12]]},"2501":{"position":[[460,12]]},"2887":{"position":[[228,12]]},"3932":{"position":[[1869,12]]}}}],["allowemptystr",{"_index":3188,"t":{"608":{"position":[[867,17]]},"3930":{"position":[[1243,17]]},"3944":{"position":[[414,16]]}}}],["allowmultipl",{"_index":5850,"t":{"1915":{"position":[[134,13]]},"1921":{"position":[[134,13]]},"1929":{"position":[[134,13]]},"1937":{"position":[[134,13]]},"1945":{"position":[[134,13]]},"3808":{"position":[[1741,13]]}}}],["allownullvalu",{"_index":3187,"t":{"608":{"position":[[828,14]]},"3944":{"position":[[397,14]]}}}],["allowtrailingcomma",{"_index":6242,"t":{"2367":{"position":[[114,19]]}}}],["alpha",{"_index":5169,"t":{"1635":{"position":[[198,5],[228,5]]},"3065":{"position":[[360,5]]},"3642":{"position":[[434,5]]},"3706":{"position":[[2108,5]]}}}],["alreadi",{"_index":8991,"t":{"3842":{"position":[[513,7],[1143,7],[1708,7],[2298,7],[2939,7],[3556,7]]}}}],["alway",{"_index":4161,"t":{"1377":{"position":[[450,6]]},"1485":{"position":[[90,6]]},"1488":{"position":[[1463,6]]},"1499":{"position":[[740,6]]}}}],["alwaysrun",{"_index":4381,"t":{"1474":{"position":[[291,13]]}}}],["andcondit",{"_index":8548,"t":{"3702":{"position":[[2345,13]]}}}],["andif",{"_index":6008,"t":{"2167":{"position":[[267,5]]}}}],["andyli",{"_index":4888,"t":{"1511":{"position":[[3973,6]]}}}],["angular",{"_index":1118,"t":{"148":{"position":[[144,7],[238,7],[265,7]]},"300":{"position":[[40,7]]},"304":{"position":[[46,7]]},"310":{"position":[[38,7],[79,7],[151,7],[163,7],[206,7],[228,7],[249,7],[741,7],[788,7],[953,7]]},"314":{"position":[[405,7],[558,7]]},"316":{"position":[[4,7],[31,7],[149,7],[302,7],[363,7]]},"321":{"position":[[2,7],[58,7],[282,8]]},"323":{"position":[[58,7],[73,7]]},"329":{"position":[[17,7]]},"3914":{"position":[[3036,7]]},"3932":{"position":[[1477,7],[1934,7]]},"3936":{"position":[[720,7]]},"3938":{"position":[[59,7],[85,7],[698,7]]},"3940":{"position":[[232,7]]}}}],["annot",{"_index":8801,"t":{"3779":{"position":[[1334,11]]},"3785":{"position":[[1305,11]]},"3802":{"position":[[1952,11]]},"3817":{"position":[[2548,11]]}}}],["annual",{"_index":6334,"t":{"2424":{"position":[[326,8]]}}}],["any86",{"_index":3209,"t":{"615":{"position":[[686,5]]}}}],["anyasync",{"_index":3838,"t":{"965":{"position":[[351,8],[402,8],[476,8],[544,8],[631,8]]}}}],["anybodi",{"_index":4804,"t":{"1511":{"position":[[2689,7]]}}}],["aol",{"_index":7484,"t":{"3136":{"position":[[203,3]]}}}],["aop",{"_index":608,"t":{"98":{"position":[[151,3]]},"1416":{"position":[[42,3],[435,3]]},"1418":{"position":[[182,3]]},"1424":{"position":[[45,3],[85,3],[158,3]]},"1892":{"position":[[78,3]]},"3215":{"position":[[473,3]]},"3228":{"position":[[198,3]]},"3254":{"position":[[1304,3]]},"3275":{"position":[[207,3]]},"3978":{"position":[[311,3],[948,3],[1440,3]]},"3986":{"position":[[1659,3]]},"3992":{"position":[[1393,3],[1527,3],[3293,3],[3871,3]]},"3998":{"position":[[133,3],[494,3]]}}}],["aopev",{"_index":7770,"t":{"3254":{"position":[[555,9],[571,9],[930,9],[946,9]]}}}],["aot",{"_index":1379,"t":{"190":{"position":[[477,3]]}}}],["apach",{"_index":649,"t":{"102":{"position":[[209,6]]},"399":{"position":[[565,6]]}}}],["api",{"_index":307,"t":{"19":{"position":[[618,3]]},"53":{"position":[[120,3]]},"64":{"position":[[146,3]]},"77":{"position":[[120,3]]},"93":{"position":[[74,3],[388,3]]},"114":{"position":[[333,3],[391,3]]},"263":{"position":[[61,3]]},"270":{"position":[[113,3]]},"300":{"position":[[136,3],[160,3]]},"308":{"position":[[105,3],[334,3]]},"310":{"position":[[103,3],[186,3],[278,3],[351,3]]},"312":{"position":[[30,3]]},"314":{"position":[[325,3],[378,3]]},"316":{"position":[[472,3]]},"319":{"position":[[176,3],[310,3],[561,3]]},"321":{"position":[[108,3]]},"323":{"position":[[7,3],[22,3],[89,3]]},"327":{"position":[[83,3]]},"331":{"position":[[69,3]]},"408":{"position":[[69,3]]},"419":{"position":[[62,3]]},"435":{"position":[[191,3],[559,3]]},"1408":{"position":[[650,3]]},"1410":{"position":[[665,3]]},"1412":{"position":[[1946,3]]},"1414":{"position":[[604,3]]},"1424":{"position":[[5,3],[26,3],[39,3],[58,3]]},"1472":{"position":[[21,3]]},"1566":{"position":[[166,3],[635,3]]},"1572":{"position":[[121,3],[393,3]]},"1578":{"position":[[190,3]]},"1598":{"position":[[4,3],[52,3]]},"1617":{"position":[[930,3]]},"1619":{"position":[[147,3],[175,3],[210,3]]},"1625":{"position":[[9,3]]},"1661":{"position":[[70,3]]},"1741":{"position":[[782,3],[1544,3],[2386,3]]},"1979":{"position":[[713,3],[875,3]]},"1991":{"position":[[271,3]]},"2014":{"position":[[271,3]]},"2147":{"position":[[27,3]]},"2266":{"position":[[250,3]]},"2276":{"position":[[54,3]]},"2530":{"position":[[36,3]]},"2532":{"position":[[119,3],[133,3]]},"2547":{"position":[[11,3]]},"2555":{"position":[[217,3]]},"2619":{"position":[[39,3]]},"2653":{"position":[[220,3]]},"2713":{"position":[[539,3],[970,3],[1856,3]]},"2790":{"position":[[209,3]]},"2856":{"position":[[2016,3]]},"3021":{"position":[[3,3],[25,3]]},"3023":{"position":[[71,3]]},"3063":{"position":[[79,3],[249,3]]},"3148":{"position":[[167,3]]},"3150":{"position":[[11,3]]},"3213":{"position":[[28,3]]},"3224":{"position":[[255,3]]},"3246":{"position":[[70,3]]},"3277":{"position":[[15,3]]},"3317":{"position":[[74,3]]},"3319":{"position":[[146,3]]},"3321":{"position":[[104,3],[173,3]]},"3325":{"position":[[55,3]]},"3354":{"position":[[3,3]]},"3446":{"position":[[808,3],[866,3]]},"3452":{"position":[[1396,3],[1461,3]]},"3476":{"position":[[51,3]]},"3498":{"position":[[135,3],[357,3]]},"3500":{"position":[[38,3],[148,3],[272,3],[441,3],[632,3]]},"3506":{"position":[[112,3],[223,3],[341,3]]},"3508":{"position":[[30,3],[112,3]]},"3522":{"position":[[971,3]]},"3543":{"position":[[135,3],[444,3]]},"3575":{"position":[[195,3],[407,3],[468,3],[589,3]]},"3581":{"position":[[189,3]]},"3583":{"position":[[23,3],[294,3]]},"3595":{"position":[[179,3]]},"3597":{"position":[[95,3],[204,3],[306,3]]},"3626":{"position":[[592,3],[626,3]]},"3632":{"position":[[27,3]]},"3638":{"position":[[38,3]]},"3666":{"position":[[38,3]]},"3678":{"position":[[105,3]]},"3700":{"position":[[83,3]]},"3704":{"position":[[173,3],[816,3],[825,3]]},"3706":{"position":[[71,3],[241,3]]},"3916":{"position":[[4392,3],[4457,3],[7202,3],[7807,3],[8658,3]]},"3924":{"position":[[3707,3],[4356,3],[4365,3]]},"3928":{"position":[[1370,3],[1428,3]]},"3932":{"position":[[15,3],[544,3],[2443,3],[2466,3]]},"3936":{"position":[[515,3]]},"3938":{"position":[[196,3],[801,3]]},"3940":{"position":[[256,3]]},"3944":{"position":[[553,3]]},"3964":{"position":[[127,3]]},"3982":{"position":[[718,3]]},"3986":{"position":[[552,3]]},"3992":{"position":[[1743,3],[1851,3],[3032,3]]},"3996":{"position":[[1553,3]]},"4002":{"position":[[60,3]]}}}],["apibehaviorapplicationmodelprovid",{"_index":5203,"t":{"1663":{"position":[[589,35]]}}}],["apicontrol",{"_index":3231,"t":{"619":{"position":[[100,13]]},"627":{"position":[[1,13],[118,13]]},"1408":{"position":[[671,13]]},"1410":{"position":[[686,13]]},"1412":{"position":[[1967,13]]},"1414":{"position":[[625,13]]},"1592":{"position":[[36,13]]},"1661":{"position":[[749,13]]},"1663":{"position":[[485,13],[512,13]]},"3023":{"position":[[746,13]]},"3397":{"position":[[957,13]]},"3946":{"position":[[190,13]]},"3948":{"position":[[215,13]]},"3982":{"position":[[405,13]]}}}],["apidatavalid",{"_index":5202,"t":{"1663":{"position":[[548,17]]}}}],["apidescript",{"_index":8502,"t":{"3680":{"position":[[193,14],[326,14],[357,14]]},"3966":{"position":[[381,14]]}}}],["apidescriptionset",{"_index":1677,"t":{"231":{"position":[[361,22]]},"1621":{"position":[[785,22],[818,22]]},"1623":{"position":[[43,22],[187,22]]},"1639":{"position":[[48,22]]},"1643":{"position":[[107,22],[204,22]]},"1645":{"position":[[99,22],[197,22]]},"1647":{"position":[[140,22],[247,22]]},"1649":{"position":[[156,22]]},"1651":{"position":[[220,22]]},"1653":{"position":[[101,22],[201,22]]},"1655":{"position":[[116,22],[236,22]]},"1657":{"position":[[75,22],[233,22],[382,22]]},"1659":{"position":[[486,22],[667,22],[921,22],[1105,22]]},"3638":{"position":[[138,22],[425,22],[618,22]]},"3640":{"position":[[93,22],[234,22],[326,22]]},"3644":{"position":[[486,22],[667,22],[921,22],[1105,22]]},"3694":{"position":[[42,22],[96,22]]},"3914":{"position":[[2840,22]]},"3918":{"position":[[3377,22]]},"3938":{"position":[[203,22],[1206,22],[1260,22]]},"3992":{"position":[[1597,22]]}}}],["apiexplorerset",{"_index":5148,"t":{"1623":{"position":[[77,19]]}}}],["apiexplorersettingsattribut",{"_index":5151,"t":{"1623":{"position":[[230,28]]}}}],["apifox",{"_index":6371,"t":{"2497":{"position":[[106,6]]}}}],["apigetxxx",{"_index":2109,"t":{"319":{"position":[[467,9],[709,9]]}}}],["apigetxxxx",{"_index":2104,"t":{"319":{"position":[[181,10]]}}}],["apiinterfac",{"_index":5995,"t":{"2147":{"position":[[4,12]]},"2530":{"position":[[13,12]]}}}],["apikey",{"_index":5075,"t":{"1580":{"position":[[431,6]]}}}],["apimodul",{"_index":2098,"t":{"316":{"position":[[437,9]]}}}],["apipersonallget",{"_index":2123,"t":{"321":{"position":[[424,15]]}}}],["apisear",{"_index":10457,"t":{"4002":{"position":[[251,8]]}}}],["apiseat",{"_index":5121,"t":{"1611":{"position":[[29,7],[42,7],[69,8],[100,8],[129,8],[157,8],[332,8],[445,7],[453,8],[500,7],[508,8],[558,7],[566,8],[612,7],[620,8],[672,7],[680,8],[730,7],[738,8],[869,7]]},"3976":{"position":[[444,7]]}}}],["apiservic",{"_index":1046,"t":{"129":{"position":[[525,11]]}}}],["app",{"_index":53,"t":{"3":{"position":[[458,3]]},"19":{"position":[[148,3]]},"30":{"position":[[0,3],[12,3]]},"93":{"position":[[104,3],[427,3]]},"123":{"position":[[57,3],[82,3]]},"150":{"position":[[31,3]]},"204":{"position":[[402,3]]},"210":{"position":[[494,3],[526,3],[670,3]]},"212":{"position":[[370,3],[659,3]]},"216":{"position":[[412,3],[936,3],[995,3],[1030,3],[1057,3],[1075,3],[1098,3],[1123,3],[1147,3],[1164,3]]},"218":{"position":[[135,3],[161,3],[190,3],[321,3],[379,3]]},"308":{"position":[[427,3]]},"310":{"position":[[658,3],[662,3],[696,3],[700,3],[851,3],[904,3]]},"321":{"position":[[158,3],[185,3],[221,3]]},"336":{"position":[[297,3]]},"338":{"position":[[744,3],[803,3],[838,3],[865,3],[883,3],[906,3],[931,3],[955,3],[972,3],[984,3],[997,3],[1011,3],[1026,3],[1042,3],[1059,3]]},"346":{"position":[[236,3],[426,3]]},"348":{"position":[[262,3]]},"350":{"position":[[303,3],[376,3],[578,3]]},"371":{"position":[[407,3],[474,3],[492,3],[521,3]]},"373":{"position":[[48,3]]},"411":{"position":[[431,3],[469,3],[573,3],[599,3],[619,3]]},"415":{"position":[[54,3]]},"435":{"position":[[52,3],[79,3],[307,3],[347,3],[390,3]]},"437":{"position":[[48,3]]},"439":{"position":[[166,3]]},"441":{"position":[[304,3],[370,3],[445,3],[534,3]]},"443":{"position":[[23,3]]},"447":{"position":[[54,3],[102,3]]},"453":{"position":[[121,3],[189,3],[363,3],[413,3]]},"455":{"position":[[906,3],[929,3]]},"463":{"position":[[46,3],[92,3]]},"570":{"position":[[1103,3]]},"637":{"position":[[91,3]]},"730":{"position":[[119,3]]},"732":{"position":[[42,3]]},"747":{"position":[[890,3]]},"1377":{"position":[[133,3]]},"1379":{"position":[[473,3],[548,3],[571,3]]},"1383":{"position":[[137,3],[180,3]]},"1394":{"position":[[52,3]]},"1428":{"position":[[154,3]]},"1434":{"position":[[281,3]]},"1667":{"position":[[402,3],[425,3]]},"1711":{"position":[[62,3],[514,3],[658,3],[700,3]]},"1735":{"position":[[86,3],[121,3]]},"1741":{"position":[[217,3],[1026,3],[1879,3]]},"1753":{"position":[[33,3]]},"1755":{"position":[[797,3],[825,3]]},"1827":{"position":[[127,3]]},"1979":{"position":[[533,3],[592,3],[627,3],[654,3],[672,3],[739,3],[768,3],[845,3]]},"1991":{"position":[[110,3],[133,3],[160,3],[184,3],[201,3],[223,3],[241,3]]},"2014":{"position":[[110,3],[133,3],[160,3],[184,3],[201,3],[223,3],[241,3]]},"2021":{"position":[[15,3]]},"2023":{"position":[[44,3],[131,3],[178,3]]},"2025":{"position":[[25,3]]},"2027":{"position":[[17,3]]},"2029":{"position":[[12,3]]},"2031":{"position":[[18,3]]},"2033":{"position":[[18,3],[59,3]]},"2035":{"position":[[22,3],[85,3]]},"2037":{"position":[[14,3],[75,3],[144,3],[213,3]]},"2039":{"position":[[14,3],[75,3],[143,3]]},"2041":{"position":[[0,3]]},"2043":{"position":[[22,3]]},"2045":{"position":[[18,3]]},"2047":{"position":[[14,3]]},"2053":{"position":[[22,3]]},"2055":{"position":[[32,3],[100,3],[169,3],[238,3]]},"2059":{"position":[[11,3]]},"2061":{"position":[[0,3]]},"2063":{"position":[[63,3]]},"2065":{"position":[[49,3]]},"2100":{"position":[[26,3]]},"2239":{"position":[[0,3],[12,3],[61,3],[111,3]]},"2251":{"position":[[319,3]]},"2255":{"position":[[189,3],[228,3],[251,3],[360,3],[390,3],[407,3],[430,3],[452,3],[466,3],[492,3],[511,3]]},"2272":{"position":[[488,3]]},"2281":{"position":[[77,3],[281,3],[313,3]]},"2357":{"position":[[1450,3]]},"2379":{"position":[[1177,3]]},"2476":{"position":[[300,3]]},"2478":{"position":[[410,3]]},"2519":{"position":[[194,3],[253,3],[308,3],[334,3],[356,3],[390,3],[420,3]]},"2567":{"position":[[0,3]]},"2569":{"position":[[0,3],[139,3]]},"2571":{"position":[[0,3],[18,3],[27,3],[111,3],[133,3]]},"2573":{"position":[[0,3]]},"2575":{"position":[[20,3]]},"2577":{"position":[[10,3]]},"2579":{"position":[[901,3],[946,3]]},"2581":{"position":[[1352,3]]},"2674":{"position":[[63,3],[86,3]]},"2713":{"position":[[27,3],[155,3],[173,3],[200,3],[234,3],[285,3],[328,3],[367,3],[405,3],[699,3],[1973,3],[2104,3],[2243,3]]},"2715":{"position":[[28,3],[125,3]]},"2717":{"position":[[367,3],[405,3]]},"2751":{"position":[[116,4]]},"2764":{"position":[[20,3],[48,3],[74,3],[102,3]]},"2776":{"position":[[590,3],[613,3],[640,3],[664,3],[681,3],[703,3]]},"2846":{"position":[[344,3]]},"2848":{"position":[[421,3],[480,3],[522,3],[562,3],[579,3],[606,3],[628,3],[646,3],[671,3],[695,3],[713,3],[827,3],[848,3],[867,3]]},"2862":{"position":[[289,3]]},"2879":{"position":[[239,3],[248,3],[266,3],[295,3]]},"2881":{"position":[[775,3]]},"2887":{"position":[[385,3]]},"2889":{"position":[[510,3]]},"2897":{"position":[[477,3]]},"2899":{"position":[[367,3],[424,3]]},"2991":{"position":[[60,3]]},"3075":{"position":[[167,3],[190,3]]},"3082":{"position":[[233,3],[261,3],[287,3],[315,3]]},"3142":{"position":[[302,3]]},"3144":{"position":[[444,3],[487,3]]},"3156":{"position":[[496,3],[539,3]]},"3158":{"position":[[511,3]]},"3215":{"position":[[761,3],[840,3]]},"3224":{"position":[[189,3]]},"3254":{"position":[[1479,3]]},"3275":{"position":[[251,3],[430,3]]},"3317":{"position":[[117,3]]},"3319":{"position":[[194,3]]},"3339":{"position":[[315,3]]},"3345":{"position":[[80,3],[104,3],[122,3],[149,3],[168,3],[177,3],[247,3],[281,3],[311,3]]},"3373":{"position":[[465,3]]},"3399":{"position":[[518,3],[556,3]]},"3440":{"position":[[22,3]]},"3460":{"position":[[74,3]]},"3630":{"position":[[514,3],[561,3],[594,3]]},"3632":{"position":[[62,3],[87,3]]},"3666":{"position":[[239,3],[298,3],[345,3]]},"3686":{"position":[[1048,3],[1134,3]]},"3704":{"position":[[224,3],[464,3],[537,3],[786,3]]},"3708":{"position":[[2880,3],[3090,3],[3990,3],[4049,3],[4106,3]]},"3910":{"position":[[1175,3],[1232,3]]},"3914":{"position":[[1045,3]]},"3916":{"position":[[1554,3],[1573,3],[1725,3],[1756,3],[1812,3],[1845,3],[1886,3],[2289,3],[2343,3]]},"3918":{"position":[[993,3],[1218,3],[2639,3],[2671,3]]},"3924":{"position":[[2256,3],[3758,3],[3998,3],[4077,3],[4326,3]]},"3932":{"position":[[128,3],[2587,3],[2610,3],[2637,3],[2666,3],[2723,3]]},"3934":{"position":[[315,3],[3137,3]]},"3944":{"position":[[802,3],[821,3],[830,3],[900,3]]},"3952":{"position":[[210,3],[381,3],[418,3]]},"3956":{"position":[[2224,3],[2430,3]]},"3960":{"position":[[599,3]]},"3962":{"position":[[29,3],[108,3],[1965,3]]},"3964":{"position":[[455,3],[625,3]]},"3978":{"position":[[1166,3]]},"3990":{"position":[[749,3]]},"3992":{"position":[[513,3],[1174,3],[1195,3],[1225,3],[1251,3]]},"4000":{"position":[[108,3],[643,3],[717,3]]},"4002":{"position":[[94,3]]},"4004":{"position":[[187,3],[203,3],[226,3],[252,3]]}}}],["app_nam",{"_index":6896,"t":{"2764":{"position":[[20,8],[48,8],[74,8],[102,8]]},"3082":{"position":[[233,8],[261,8],[287,8],[315,8]]}}}],["appauthor",{"_index":1095,"t":{"137":{"position":[[86,12]]}}}],["appauthorizehandl",{"_index":965,"t":{"127":{"position":[[564,19]]},"133":{"position":[[13,19],[351,19]]},"135":{"position":[[279,19]]},"146":{"position":[[330,19]]},"3992":{"position":[[2968,19]]},"3994":{"position":[[466,19]]}}}],["appcompon",{"_index":2057,"t":{"310":{"position":[[881,12],[996,12],[1110,12]]},"321":{"position":[[258,12]]}}}],["appcontext",{"_index":2596,"t":{"455":{"position":[[14,10]]},"526":{"position":[[259,10]]},"2051":{"position":[[14,10]]},"2674":{"position":[[351,10]]}}}],["appdata",{"_index":6382,"t":{"2510":{"position":[[14,7],[45,7]]},"2512":{"position":[[9,7],[44,7]]}}}],["appdbcontext",{"_index":2758,"t":{"502":{"position":[[90,12]]},"504":{"position":[[0,12],[46,12],[74,12],[118,12],[164,12],[187,12],[212,12],[238,12],[280,12]]},"506":{"position":[[20,12],[39,12],[72,12],[129,12],[160,12]]},"508":{"position":[[109,12],[181,12],[217,12]]},"510":{"position":[[109,12],[183,12],[247,12]]},"512":{"position":[[77,12],[112,12]]},"516":{"position":[[109,12],[209,12],[439,12]]},"518":{"position":[[139,12],[522,12],[631,12]]},"534":{"position":[[296,12],[388,12]]},"567":{"position":[[14,12]]},"570":{"position":[[7,12],[314,12],[386,12]]},"653":{"position":[[187,12],[325,12],[417,12]]},"745":{"position":[[109,12],[182,12]]},"832":{"position":[[148,12],[220,12]]},"846":{"position":[[371,12],[443,12]]},"933":{"position":[[14,12]]},"947":{"position":[[68,12],[222,12],[314,12],[716,12],[806,12]]},"949":{"position":[[18,12]]},"1054":{"position":[[151,12],[222,12]]},"1056":{"position":[[170,12],[239,12]]},"1066":{"position":[[113,12],[283,12],[422,12]]},"1311":{"position":[[109,12],[201,12],[345,12],[468,12]]},"1313":{"position":[[341,12],[361,12],[453,12],[843,12]]},"1353":{"position":[[154,12],[292,12],[384,12]]},"1418":{"position":[[232,12]]},"2925":{"position":[[172,12],[268,12]]},"2933":{"position":[[166,12],[257,12]]},"2935":{"position":[[237,12],[328,12]]},"2937":{"position":[[334,12],[425,12]]},"2941":{"position":[[172,12],[268,12]]},"2949":{"position":[[195,12]]},"2951":{"position":[[182,12]]},"2955":{"position":[[172,12],[268,12]]},"2963":{"position":[[153,12],[244,12]]},"3126":{"position":[[279,12]]},"3952":{"position":[[701,12]]},"3958":{"position":[[223,12]]},"3962":{"position":[[1054,12]]},"3970":{"position":[[41,12]]},"3988":{"position":[[154,12]]},"3996":{"position":[[158,12]]},"3998":{"position":[[31,12]]}}}],["appdbcontextbuild",{"_index":9655,"t":{"3952":{"position":[[463,19]]}}}],["append",{"_index":319,"t":{"19":{"position":[[786,6]]},"2846":{"position":[[208,6]]},"3430":{"position":[[3341,6]]},"3432":{"position":[[446,6],[818,6],[3310,6]]},"3434":{"position":[[2394,6]]},"3770":{"position":[[3111,8]]},"3785":{"position":[[475,8]]},"3812":{"position":[[751,8]]},"3817":{"position":[[2756,8]]},"3819":{"position":[[1601,8]]},"3844":{"position":[[904,8],[959,8],[990,8],[1321,8]]}}}],["appendqueri",{"_index":8296,"t":{"3510":{"position":[[109,13]]},"3551":{"position":[[417,13]]},"3984":{"position":[[248,13]]}}}],["appinfo",{"_index":2526,"t":{"433":{"position":[[3,7]]},"435":{"position":[[326,7],[366,7],[409,7],[733,7],[769,7],[808,7]]},"441":{"position":[[45,7],[102,7],[323,7],[389,7],[464,7],[553,7]]},"453":{"position":[[151,7],[443,7]]},"2707":{"position":[[3,7]]},"2713":{"position":[[689,7],[730,7],[761,7],[780,7],[802,7]]},"2721":{"position":[[178,7],[571,7],[609,7]]},"2735":{"position":[[111,7],[450,7]]},"3936":{"position":[[1570,7]]}}}],["appinfoconfigur",{"_index":2592,"t":{"453":{"position":[[98,20],[244,20],[298,20]]}}}],["appinfoopt",{"_index":6820,"t":{"2709":{"position":[[78,14]]},"2711":{"position":[[367,14]]},"2713":{"position":[[713,14],[1057,14],[1099,14],[1141,14],[1201,14],[1244,14],[1294,14],[1988,14],[2127,14],[2265,14]]},"2721":{"position":[[199,14],[633,14]]},"2725":{"position":[[280,14],[806,14],[875,14],[1249,14],[1287,14],[1539,14],[1866,14],[1904,14],[2156,14],[2248,14],[2317,14]]},"2727":{"position":[[305,14],[343,14],[566,14]]},"2729":{"position":[[281,14],[327,14],[473,14],[633,14]]},"2735":{"position":[[202,14]]},"3936":{"position":[[1673,14]]}}}],["appinfoset",{"_index":6840,"t":{"2721":{"position":[[365,15],[394,15],[799,15],[846,15]]}}}],["appinfovalid",{"_index":6843,"t":{"2725":{"position":[[581,17],[769,17],[1303,17],[1920,17],[2211,17]]}}}],["appl",{"_index":9519,"t":{"3934":{"position":[[1932,6]]}}}],["applewebkit",{"_index":783,"t":{"114":{"position":[[457,11]]},"3446":{"position":[[932,11]]},"3452":{"position":[[1589,11]]},"3916":{"position":[[4585,11]]},"3928":{"position":[[1494,11]]}}}],["appli",{"_index":4382,"t":{"1474":{"position":[[310,5]]},"1589":{"position":[[125,5]]}}}],["appliat",{"_index":4383,"t":{"1474":{"position":[[368,10]]}}}],["applic",{"_index":193,"t":{"11":{"position":[[957,11]]},"15":{"position":[[197,11]]},"17":{"position":[[191,11]]},"114":{"position":[[116,11],[165,11],[1254,11]]},"231":{"position":[[119,11]]},"528":{"position":[[70,11],[118,11]]},"587":{"position":[[152,11]]},"597":{"position":[[87,11],[369,11]]},"599":{"position":[[96,11]]},"602":{"position":[[81,11]]},"608":{"position":[[116,11]]},"615":{"position":[[243,11]]},"617":{"position":[[1519,11],[1962,11]]},"625":{"position":[[213,11]]},"713":{"position":[[283,11]]},"734":{"position":[[297,11]]},"822":{"position":[[101,11]]},"877":{"position":[[1972,11]]},"1064":{"position":[[136,11]]},"1066":{"position":[[738,11]]},"1109":{"position":[[131,11],[422,11],[654,11]]},"1127":{"position":[[67,11]]},"1147":{"position":[[82,11]]},"1151":{"position":[[113,11]]},"1185":{"position":[[344,11]]},"1223":{"position":[[165,11]]},"1234":{"position":[[48,11]]},"1236":{"position":[[48,11]]},"1238":{"position":[[48,11]]},"1240":{"position":[[48,11]]},"1242":{"position":[[48,11]]},"1244":{"position":[[48,11]]},"1251":{"position":[[48,11]]},"1253":{"position":[[48,11]]},"1255":{"position":[[48,11]]},"1257":{"position":[[48,11]]},"1259":{"position":[[48,11]]},"1261":{"position":[[48,11]]},"1263":{"position":[[48,11]]},"1267":{"position":[[48,11]]},"1368":{"position":[[204,11]]},"1408":{"position":[[151,11],[556,11]]},"1410":{"position":[[157,11],[571,11]]},"1412":{"position":[[404,11],[863,11],[902,11],[1804,11],[2615,11]]},"1414":{"position":[[171,11],[491,11]]},"1420":{"position":[[131,11],[150,11],[196,11],[215,11],[377,11],[396,11],[592,11],[611,11]]},"1424":{"position":[[574,11]]},"1426":{"position":[[126,11]]},"1474":{"position":[[44,11],[338,11]]},"1584":{"position":[[177,11],[387,11]]},"1589":{"position":[[148,11]]},"1603":{"position":[[52,11]]},"1605":{"position":[[52,11]]},"1607":{"position":[[52,11]]},"1609":{"position":[[115,11],[461,11]]},"1611":{"position":[[253,11]]},"1613":{"position":[[84,11]]},"1615":{"position":[[84,11]]},"1617":{"position":[[136,11],[389,11],[631,11],[908,11]]},"1619":{"position":[[125,11]]},"1621":{"position":[[65,11],[467,11]]},"1643":{"position":[[92,11]]},"1645":{"position":[[84,11]]},"1647":{"position":[[125,11]]},"1649":{"position":[[85,11]]},"1651":{"position":[[95,11]]},"1653":{"position":[[86,11]]},"1655":{"position":[[101,11]]},"1657":{"position":[[218,11]]},"1659":{"position":[[112,11],[471,11],[906,11]]},"1739":{"position":[[171,11],[351,11]]},"1845":{"position":[[92,11],[365,11]]},"1855":{"position":[[156,11]]},"1859":{"position":[[84,11]]},"1865":{"position":[[49,11]]},"1867":{"position":[[146,11]]},"1869":{"position":[[427,11]]},"1873":{"position":[[188,11]]},"1875":{"position":[[84,11]]},"1883":{"position":[[217,11]]},"2294":{"position":[[1005,11]]},"2348":{"position":[[209,11]]},"2536":{"position":[[49,11]]},"2551":{"position":[[285,11]]},"2690":{"position":[[46,11]]},"2709":{"position":[[51,11]]},"2713":{"position":[[445,11],[840,11],[1762,11]]},"2725":{"position":[[253,11],[742,11],[1222,11],[1779,11]]},"2727":{"position":[[278,11]]},"2729":{"position":[[254,11]]},"2774":{"position":[[43,11],[276,11]]},"2807":{"position":[[65,11]]},"2899":{"position":[[253,11],[373,11]]},"2910":{"position":[[112,11]]},"3001":{"position":[[153,11],[172,11]]},"3003":{"position":[[75,11],[94,11],[140,11],[159,11],[321,11],[340,11]]},"3063":{"position":[[414,11],[1032,11]]},"3071":{"position":[[857,11]]},"3131":{"position":[[94,11]]},"3339":{"position":[[50,11],[78,11],[114,11]]},"3430":{"position":[[274,11],[2888,11],[4195,11]]},"3432":{"position":[[46,11],[107,11],[191,11],[397,11],[799,11],[1368,11],[1456,11],[1647,11],[1894,11],[2843,11],[4909,11],[5412,11]]},"3446":{"position":[[39,11],[591,11],[640,11],[1729,11]]},"3448":{"position":[[932,11],[1274,11],[1319,11]]},"3452":{"position":[[1224,11],[1273,11],[2759,11],[3201,11],[3306,11]]},"3483":{"position":[[648,11]]},"3498":{"position":[[193,11]]},"3500":{"position":[[204,11],[333,11],[374,11],[534,11],[577,11],[706,11],[752,11]]},"3502":{"position":[[52,11]]},"3522":{"position":[[914,11],[1105,11]]},"3543":{"position":[[193,11]]},"3545":{"position":[[225,11],[357,11]]},"3575":{"position":[[253,11]]},"3581":{"position":[[256,11]]},"3583":{"position":[[361,11]]},"3601":{"position":[[489,11]]},"3622":{"position":[[83,11]]},"3636":{"position":[[17,11],[177,11]]},"3638":{"position":[[123,11]]},"3640":{"position":[[78,11]]},"3644":{"position":[[112,11],[471,11],[906,11]]},"3656":{"position":[[84,11]]},"3672":{"position":[[19,11],[103,11]]},"3688":{"position":[[175,11]]},"3702":{"position":[[231,11],[292,11]]},"3706":{"position":[[406,11],[1024,11]]},"3734":{"position":[[96,11]]},"3779":{"position":[[691,11],[739,11],[1037,11],[1081,11]]},"3781":{"position":[[216,11],[238,11]]},"3785":{"position":[[162,11],[206,11],[1580,11],[1621,11]]},"3817":{"position":[[1713,11],[1757,11]]},"3821":{"position":[[190,11],[234,11]]},"3896":{"position":[[115,11],[159,11]]},"3910":{"position":[[1181,11]]},"3916":{"position":[[4220,11],[4269,11],[5755,11],[6197,11],[6302,11]]},"3928":{"position":[[768,11],[929,11],[1166,11],[1215,11],[2291,11]]},"3950":{"position":[[123,11]]},"3954":{"position":[[94,11]]},"3974":{"position":[[400,11]]},"3980":{"position":[[225,11]]},"3984":{"position":[[434,11]]},"3992":{"position":[[1900,11]]}}}],["applicaion",{"_index":8166,"t":{"3438":{"position":[[106,10]]}}}],["applicaiton",{"_index":7935,"t":{"3339":{"position":[[209,11]]},"4006":{"position":[[547,11]]}}}],["applicationcompon",{"_index":2279,"t":{"355":{"position":[[204,20]]}}}],["applicationconfigur",{"_index":7179,"t":{"2899":{"position":[[214,24]]}}}],["applicationhost",{"_index":4378,"t":{"1474":{"position":[[242,15]]}}}],["applicationmodel",{"_index":5084,"t":{"1589":{"position":[[131,16]]}}}],["applicationnam",{"_index":5932,"t":{"2043":{"position":[[4,15],[42,15]]}}}],["applicationpool",{"_index":4379,"t":{"1474":{"position":[[258,16]]}}}],["applicationservic",{"_index":1608,"t":{"218":{"position":[[194,19]]},"4004":{"position":[[230,19]]}}}],["applicationset",{"_index":10294,"t":{"3992":{"position":[[3512,19]]}}}],["applicationurl",{"_index":7158,"t":{"2875":{"position":[[864,14]]}}}],["appmodul",{"_index":2064,"t":{"310":{"position":[[1141,9]]}}}],["approutingmodul",{"_index":2055,"t":{"310":{"position":[[824,16],[1037,16]]}}}],["approveallcert",{"_index":8392,"t":{"3593":{"position":[[96,15]]},"3934":{"position":[[257,15]]}}}],["appservic",{"_index":360,"t":{"28":{"position":[[79,10],[99,10]]},"1592":{"position":[[13,11],[25,10]]},"1661":{"position":[[726,11],[738,10]]},"2237":{"position":[[79,10],[99,10]]},"2331":{"position":[[343,11]]},"3023":{"position":[[723,11],[735,10]]}}}],["appset",{"_index":1610,"t":{"220":{"position":[[25,11],[93,11],[145,11],[526,11],[551,11],[822,11]]},"417":{"position":[[118,11]]},"429":{"position":[[82,11],[146,11],[186,11],[225,11]]},"433":{"position":[[83,11]]},"445":{"position":[[70,11],[886,11]]},"447":{"position":[[13,11]]},"449":{"position":[[42,11]]},"451":{"position":[[91,11],[120,11],[145,11]]},"453":{"position":[[42,10]]},"455":{"position":[[135,11]]},"508":{"position":[[129,10]]},"510":{"position":[[129,10]]},"516":{"position":[[152,10]]},"617":{"position":[[1425,11],[2515,11],[2552,11],[2690,11],[2832,11]]},"698":{"position":[[277,10]]},"1313":{"position":[[27,11],[233,11]]},"1420":{"position":[[962,11]]},"1422":{"position":[[93,11],[119,11]]},"1499":{"position":[[335,11],[368,11],[400,11]]},"1609":{"position":[[624,11]]},"1631":{"position":[[416,11]]},"1663":{"position":[[101,11]]},"1685":{"position":[[245,11]]},"1869":{"position":[[79,11],[650,11]]},"1871":{"position":[[55,11]]},"1877":{"position":[[27,11],[88,11],[115,11]]},"2096":{"position":[[62,11],[86,11]]},"2613":{"position":[[17,11],[50,11]]},"2623":{"position":[[3,11]]},"2625":{"position":[[137,11],[268,11],[422,11]]},"2721":{"position":[[559,11],[597,11]]},"2729":{"position":[[33,11]]},"2735":{"position":[[40,11]]},"2875":{"position":[[1035,11],[1057,11]]},"2887":{"position":[[3,11]]},"2981":{"position":[[0,11]]},"2983":{"position":[[3,11]]},"2985":{"position":[[68,11],[211,11],[323,11]]},"3321":{"position":[[305,11]]},"3343":{"position":[[8,11],[27,11]]},"3430":{"position":[[1503,11],[1522,11]]},"3432":{"position":[[354,11]]},"3434":{"position":[[759,11]]},"3442":{"position":[[10,11],[29,11],[203,11]]},"3468":{"position":[[36,11],[55,11]]},"3601":{"position":[[1557,11],[1576,11]]},"3640":{"position":[[502,11],[732,11],[761,11]]},"3642":{"position":[[16,10],[57,11]]},"3646":{"position":[[17,11]]},"3648":{"position":[[17,11]]},"3650":{"position":[[81,11]]},"3654":{"position":[[100,10],[118,11]]},"3658":{"position":[[60,10]]},"3662":{"position":[[28,10],[53,11]]},"3670":{"position":[[118,10]]},"3912":{"position":[[2224,11]]},"3920":{"position":[[160,11],[1949,11]]},"3960":{"position":[[310,11]]},"3962":{"position":[[1567,11]]},"3986":{"position":[[1172,11]]},"3992":{"position":[[562,11]]},"3996":{"position":[[1711,11]]}}}],["appstartup",{"_index":1545,"t":{"206":{"position":[[254,10],[274,10]]},"208":{"position":[[0,10]]},"210":{"position":[[0,10],[346,10]]},"212":{"position":[[6,10],[55,10],[73,10],[208,10],[252,10],[497,10],[541,10]]},"214":{"position":[[0,10]]},"216":{"position":[[751,10]]},"218":{"position":[[0,10],[49,10],[255,10]]},"336":{"position":[[251,10]]},"338":{"position":[[256,10]]},"411":{"position":[[221,10],[278,10]]},"514":{"position":[[162,10],[231,10]]},"524":{"position":[[241,10],[310,10]]},"595":{"position":[[114,10],[171,10]]},"617":{"position":[[2290,10],[2347,10]]},"1058":{"position":[[108,10],[177,10]]},"1317":{"position":[[162,10],[231,10]]},"1582":{"position":[[188,10],[245,10]]},"1843":{"position":[[114,10],[171,10]]},"1867":{"position":[[457,10],[514,10]]},"2627":{"position":[[140,10]]},"2711":{"position":[[204,10],[261,10]]},"2807":{"position":[[271,10]]},"2868":{"position":[[165,10]]},"2881":{"position":[[371,10],[649,10]]},"2889":{"position":[[16,10],[360,10]]},"2901":{"position":[[28,10],[172,10]]},"2927":{"position":[[120,10],[189,10]]},"2943":{"position":[[120,10],[189,10]]},"2957":{"position":[[120,10],[189,10]]},"3144":{"position":[[282,10]]},"3156":{"position":[[433,10]]},"3373":{"position":[[104,10],[308,10]]},"3630":{"position":[[274,10],[331,10]]},"3932":{"position":[[314,10],[657,10]]},"3992":{"position":[[2173,10]]}}}],["apt",{"_index":4393,"t":{"1483":{"position":[[146,3],[164,3],[207,3],[553,3],[571,3]]}}}],["ar",{"_index":6432,"t":{"2559":{"position":[[54,2],[62,2],[80,2],[95,2],[110,2],[126,2],[141,2],[157,2],[173,2],[189,2],[205,2],[220,2],[236,2],[255,2],[274,2],[293,2],[315,2],[2108,2]]}}}],["archiv",{"_index":4459,"t":{"1488":{"position":[[735,8]]},"1495":{"position":[[679,8]]},"3800":{"position":[[204,8]]}}}],["archivesdir",{"_index":4458,"t":{"1488":{"position":[[691,11]]},"1495":{"position":[[635,11]]}}}],["area",{"_index":769,"t":{"114":{"position":[[235,4]]},"1641":{"position":[[419,4]]},"1941":{"position":[[602,4]]},"3329":{"position":[[75,4]]},"3446":{"position":[[710,4]]},"3748":{"position":[[50,4],[81,4],[219,4],[287,4]]},"3928":{"position":[[1285,4]]}}}],["areanam",{"_index":5882,"t":{"1941":{"position":[[569,8]]},"3452":{"position":[[1184,8]]},"3916":{"position":[[4180,8]]}}}],["arg",{"_index":36,"t":{"3":{"position":[[300,4]]},"188":{"position":[[627,4]]},"202":{"position":[[252,4],[278,4],[355,4],[396,4]]},"455":{"position":[[324,4],[350,4],[427,4],[462,4],[766,4]]},"461":{"position":[[320,4],[678,4],[1038,4],[1064,4],[1141,4],[1176,4]]},"1424":{"position":[[941,4],[1038,4],[1119,4],[1267,4],[1346,4],[1497,4],[1577,4]]},"1539":{"position":[[437,4]]},"1541":{"position":[[49,4]]},"1667":{"position":[[100,4],[141,4]]},"1813":{"position":[[102,4]]},"1851":{"position":[[180,4],[303,4],[459,4],[602,4],[707,4],[827,4],[979,4],[1119,4]]},"1977":{"position":[[152,4],[178,4],[255,4],[290,4]]},"1991":{"position":[[43,4]]},"1995":{"position":[[122,4]]},"2014":{"position":[[43,4]]},"2018":{"position":[[122,4]]},"2065":{"position":[[81,4]]},"2255":{"position":[[333,4]]},"2269":{"position":[[237,4],[263,4],[340,4],[381,4]]},"2674":{"position":[[43,4]]},"2751":{"position":[[388,4]]},"2776":{"position":[[225,4],[251,4],[328,4],[369,4],[523,4]]},"2813":{"position":[[890,4],[916,4],[993,4],[1028,4]]},"2819":{"position":[[248,4],[274,4],[351,4],[386,4]]},"2821":{"position":[[279,4],[305,4],[382,4],[417,4]]},"2836":{"position":[[338,4],[364,4],[441,4],[476,4],[1551,4],[1577,4],[1654,4],[1689,4]]},"2856":{"position":[[1238,4]]},"2862":{"position":[[108,4],[278,4]]},"2893":{"position":[[43,4],[49,4],[94,4],[128,4]]},"3075":{"position":[[104,4]]},"3166":{"position":[[56,4],[93,4],[249,4],[284,4]]},"3430":{"position":[[563,4],[847,4],[2015,4],[2139,4]]},"3770":{"position":[[816,4],[2249,4],[4067,4],[5606,4]]},"3798":{"position":[[200,4]]},"3802":{"position":[[816,4],[1451,4],[2111,4]]},"3812":{"position":[[236,4],[1163,4],[1852,4],[2563,4]]},"3817":{"position":[[1027,4],[2043,4]]},"3821":{"position":[[535,4]]},"3826":{"position":[[226,4]]},"3896":{"position":[[460,4]]},"3918":{"position":[[1025,4]]},"3922":{"position":[[318,4]]},"3932":{"position":[[2516,4]]}}}],["argument",{"_index":4919,"t":{"1520":{"position":[[24,8]]},"1539":{"position":[[506,8],[640,8],[729,8],[871,8],[963,8],[1097,8],[1681,8],[1823,8]]},"1557":{"position":[[47,9],[119,8],[149,8],[198,8],[292,8],[320,8]]},"1909":{"position":[[1120,9]]},"3452":{"position":[[3595,9]]},"3916":{"position":[[6591,9]]},"3982":{"position":[[837,8]]}}}],["argumentexcept",{"_index":5501,"t":{"1795":{"position":[[1513,17]]}}}],["argumentmetadata",{"_index":4971,"t":{"1539":{"position":[[623,16],[854,16],[1080,16],[1806,16]]},"1557":{"position":[[63,17]]}}}],["argumentmodel",{"_index":5037,"t":{"1557":{"position":[[890,13],[936,13]]}}}],["argumentnullexcept",{"_index":5578,"t":{"1801":{"position":[[2356,21]]},"1803":{"position":[[4311,21]]},"1861":{"position":[[205,21]]},"2193":{"position":[[29,21],[87,21]]},"2197":{"position":[[27,21],[79,21]]},"2199":{"position":[[225,21]]}}}],["armi",{"_index":4863,"t":{"1511":{"position":[[3632,4]]}}}],["arr",{"_index":1914,"t":{"274":{"position":[[102,3]]},"278":{"position":[[88,3],[179,3],[250,3]]},"280":{"position":[[88,3]]},"282":{"position":[[88,3],[165,3],[410,3]]},"284":{"position":[[32,3],[96,3],[170,3],[202,3]]},"288":{"position":[[88,3],[230,3]]},"290":{"position":[[88,3]]}}}],["array",{"_index":2559,"t":{"443":{"position":[[42,5]]},"3071":{"position":[[596,5],[1167,5],[1194,5]]},"3432":{"position":[[1775,5]]},"3664":{"position":[[411,5]]}}}],["articl",{"_index":7890,"t":{"3307":{"position":[[129,7]]}}}],["artifact",{"_index":4502,"t":{"1497":{"position":[[14,9]]}}}],["asafsdfdsgsdfsdfsdfsfsf",{"_index":5297,"t":{"1691":{"position":[[440,23]]}}}],["asasyncenumer",{"_index":10064,"t":{"3984":{"position":[[309,17]]}}}],["asc",{"_index":7659,"t":{"3224":{"position":[[736,3],[1021,3]]}}}],["ascii",{"_index":3163,"t":{"606":{"position":[[371,5],[377,5]]},"617":{"position":[[1044,5],[1069,5]]}}}],["asdelet",{"_index":7673,"t":{"3224":{"position":[[1389,12]]}}}],["asenumer",{"_index":3831,"t":{"958":{"position":[[189,12]]},"1064":{"position":[[863,12]]},"1066":{"position":[[1406,12],[1604,12]]}}}],["asia",{"_index":4426,"t":{"1485":{"position":[[116,4]]}}}],["asimplementedinterfac",{"_index":4337,"t":{"1440":{"position":[[449,23],[809,23],[917,23]]}}}],["asinsert",{"_index":7670,"t":{"3224":{"position":[[1189,12]]},"3232":{"position":[[45,12],[181,12]]},"3258":{"position":[[315,12]]}}}],["aslowercamelcas",{"_index":5173,"t":{"1637":{"position":[[80,16]]},"1641":{"position":[[378,16]]},"1661":{"position":[[195,16]]},"3023":{"position":[[196,16]]},"3944":{"position":[[722,16]]}}}],["asmemori",{"_index":5362,"t":{"1729":{"position":[[172,8]]}}}],["asnotrack",{"_index":3716,"t":{"887":{"position":[[146,12]]}}}],["asp",{"_index":336,"t":{"21":{"position":[[20,3],[67,3],[127,3]]},"23":{"position":[[2,3],[49,3],[109,3]]},"154":{"position":[[46,3]]},"202":{"position":[[11,3]]},"204":{"position":[[495,3]]},"220":{"position":[[7,3]]},"237":{"position":[[1382,3]]},"239":{"position":[[53,3]]},"251":{"position":[[95,3]]},"257":{"position":[[47,3]]},"425":{"position":[[46,3]]},"429":{"position":[[49,3]]},"435":{"position":[[1162,3]]},"439":{"position":[[0,3],[71,3]]},"441":{"position":[[2,3]]},"451":{"position":[[261,3]]},"461":{"position":[[0,3]]},"465":{"position":[[44,3]]},"587":{"position":[[2,3],[1019,3]]},"1389":{"position":[[277,3]]},"1403":{"position":[[85,3]]},"1418":{"position":[[309,3]]},"1572":{"position":[[70,3]]},"1574":{"position":[[24,3]]},"1576":{"position":[[2,3]]},"1578":{"position":[[11,3]]},"1580":{"position":[[5,3],[90,3]]},"1609":{"position":[[6,3]]},"1639":{"position":[[5,3]]},"1663":{"position":[[574,3]]},"1665":{"position":[[354,3]]},"1755":{"position":[[567,3],[1017,3]]},"1892":{"position":[[15,3]]},"1905":{"position":[[0,3]]},"1969":{"position":[[176,3],[207,3]]},"1983":{"position":[[88,3],[119,3]]},"2006":{"position":[[88,3],[119,3]]},"2231":{"position":[[2,3],[49,3],[109,3]]},"2233":{"position":[[0,3]]},"2255":{"position":[[39,3]]},"2264":{"position":[[96,3]]},"2499":{"position":[[25,3]]},"2557":{"position":[[2,3]]},"2561":{"position":[[45,3]]},"2564":{"position":[[212,3]]},"2593":{"position":[[19,3]]},"2701":{"position":[[4,3]]},"2717":{"position":[[0,3],[455,3]]},"2723":{"position":[[124,3]]},"2737":{"position":[[44,3]]},"2749":{"position":[[833,3]]},"2862":{"position":[[4,3],[18,3],[44,3],[196,3],[315,3],[325,3],[339,3]]},"2910":{"position":[[141,3]]},"3142":{"position":[[0,3]]},"3148":{"position":[[74,3]]},"3205":{"position":[[64,3]]},"3428":{"position":[[34,3]]},"3430":{"position":[[1846,3]]},"3440":{"position":[[2,3],[70,3]]},"3472":{"position":[[44,3]]},"3605":{"position":[[52,3]]},"3729":{"position":[[3,3]]},"3918":{"position":[[4052,3]]},"3932":{"position":[[177,3],[590,3]]},"3936":{"position":[[527,3]]}}}],["aspectdispatchproxi",{"_index":4286,"t":{"1416":{"position":[[448,19]]},"1424":{"position":[[620,19]]},"1426":{"position":[[172,19]]},"3992":{"position":[[827,19]]}}}],["aspnet",{"_index":2512,"t":{"423":{"position":[[173,6]]},"461":{"position":[[121,6]]},"1377":{"position":[[111,6]]},"1379":{"position":[[526,6]]},"1503":{"position":[[50,6]]},"1947":{"position":[[179,6]]},"1965":{"position":[[51,6]]},"2557":{"position":[[69,6]]},"2573":{"position":[[238,6]]},"3138":{"position":[[204,6]]},"3189":{"position":[[459,6]]}}}],["aspnetcor",{"_index":146,"t":{"11":{"position":[[396,10],[445,10],[485,10]]},"112":{"position":[[164,10],[197,10]]},"127":{"position":[[419,10],[461,10]]},"133":{"position":[[146,10],[188,10]]},"135":{"position":[[136,10],[178,10]]},"146":{"position":[[92,10],[134,10]]},"202":{"position":[[111,10]]},"204":{"position":[[141,10],[177,10]]},"216":{"position":[[151,10],[187,10],[543,10],[579,10]]},"338":{"position":[[49,10],[85,10]]},"411":{"position":[[52,10],[88,10]]},"423":{"position":[[207,10]]},"435":{"position":[[126,10],[452,10]]},"461":{"position":[[166,10]]},"570":{"position":[[97,10]]},"625":{"position":[[180,10]]},"627":{"position":[[60,10]]},"635":{"position":[[36,10]]},"1408":{"position":[[585,10]]},"1410":{"position":[[600,10]]},"1412":{"position":[[1867,10]]},"1414":{"position":[[539,10]]},"1458":{"position":[[4,10]]},"1503":{"position":[[95,10]]},"1572":{"position":[[161,10],[328,10]]},"1609":{"position":[[428,10]]},"1613":{"position":[[51,10]]},"1615":{"position":[[51,10]]},"1617":{"position":[[103,10],[356,10],[598,10],[875,10]]},"1619":{"position":[[92,10]]},"1663":{"position":[[286,10]]},"1883":{"position":[[146,10]]},"1913":{"position":[[16,10],[58,10],[90,10],[136,10],[180,10]]},"1919":{"position":[[16,10],[56,10]]},"1925":{"position":[[16,10],[60,10]]},"1927":{"position":[[16,10]]},"1933":{"position":[[16,10],[60,10]]},"1935":{"position":[[16,10]]},"1941":{"position":[[16,10],[48,10],[92,10]]},"1943":{"position":[[16,10]]},"1947":{"position":[[220,10]]},"1951":{"position":[[16,10]]},"1953":{"position":[[16,10]]},"1965":{"position":[[92,10]]},"1977":{"position":[[16,10]]},"1979":{"position":[[16,10],[52,10]]},"2269":{"position":[[96,10]]},"2294":{"position":[[425,10],[474,10],[514,10]]},"2343":{"position":[[138,10]]},"2357":{"position":[[138,10],[210,10]]},"2501":{"position":[[393,10]]},"2557":{"position":[[126,10]]},"2573":{"position":[[280,10]]},"2711":{"position":[[71,10],[107,10]]},"2713":{"position":[[474,10],[869,10],[1791,10]]},"2731":{"position":[[131,10]]},"2751":{"position":[[454,10]]},"2776":{"position":[[82,10]]},"2875":{"position":[[956,10]]},"2881":{"position":[[499,10],[535,10]]},"2889":{"position":[[208,10],[244,10]]},"2897":{"position":[[267,10]]},"2905":{"position":[[139,10]]},"3138":{"position":[[242,10]]},"3144":{"position":[[84,10],[120,10]]},"3154":{"position":[[98,10]]},"3156":{"position":[[116,10]]},"3158":{"position":[[107,10]]},"3189":{"position":[[500,10]]},"3287":{"position":[[1310,10]]},"3373":{"position":[[157,10],[193,10]]},"3397":{"position":[[68,10],[302,10],[900,10]]},"3399":{"position":[[62,10],[124,10]]},"3401":{"position":[[67,10],[225,10],[280,10]]},"3430":{"position":[[702,10],[964,10],[1370,10],[1639,10]]},"3452":{"position":[[3420,10],[3623,10],[3767,10]]},"3468":{"position":[[187,10]]},"3601":{"position":[[1714,10]]},"3630":{"position":[[105,10],[141,10]]},"3656":{"position":[[51,10]]},"3676":{"position":[[28,10]]},"3686":{"position":[[667,10],[709,10]]},"3704":{"position":[[48,10],[112,10]]},"3708":{"position":[[746,10],[779,10],[811,10]]},"3914":{"position":[[1259,10]]},"3916":{"position":[[6416,10],[6619,10],[6763,10]]},"3924":{"position":[[3568,10],[3640,10]]},"3930":{"position":[[533,10]]},"3934":{"position":[[3126,10]]},"3948":{"position":[[298,10]]},"3956":{"position":[[383,10],[416,10],[448,10]]},"3990":{"position":[[293,10]]},"3996":{"position":[[890,10]]}}}],["aspnetcore_environ",{"_index":4348,"t":{"1458":{"position":[[4,22]]},"2751":{"position":[[454,22]]},"2875":{"position":[[956,22]]}}}],["aspnetcore_hostingstartupassembl",{"_index":9617,"t":{"3948":{"position":[[298,35]]}}}],["asquery",{"_index":3656,"t":{"860":{"position":[[40,11],[88,11]]},"862":{"position":[[40,11],[88,11]]},"866":{"position":[[30,11],[134,11],[177,11],[322,11],[358,11],[415,11]]},"868":{"position":[[23,11],[71,11]]},"871":{"position":[[30,11],[94,11]]},"873":{"position":[[30,11],[104,11]]},"875":{"position":[[30,11]]},"877":{"position":[[2272,11]]},"881":{"position":[[30,11],[198,11],[302,11]]},"887":{"position":[[112,11]]},"958":{"position":[[142,11],[243,11]]},"960":{"position":[[1728,11]]},"973":{"position":[[101,11],[314,11]]},"975":{"position":[[105,11],[330,11]]},"1024":{"position":[[138,11]]},"1368":{"position":[[643,11]]},"3224":{"position":[[1032,11]]},"3984":{"position":[[349,11]]},"3992":{"position":[[2068,11]]}}}],["ass1",{"_index":5514,"t":{"1795":{"position":[[2769,4]]}}}],["ass2",{"_index":5515,"t":{"1795":{"position":[[2775,4]]}}}],["assembl",{"_index":2274,"t":{"353":{"position":[[132,8],[147,8]]},"637":{"position":[[95,10]]},"1724":{"position":[[491,8]]},"1726":{"position":[[175,8]]},"1827":{"position":[[131,10]]},"2027":{"position":[[4,10],[21,10]]},"2049":{"position":[[18,8]]},"2092":{"position":[[46,8]]},"3071":{"position":[[527,8],[608,8]]},"3371":{"position":[[172,8]]},"3389":{"position":[[578,8],[656,8],[714,8]]},"3401":{"position":[[102,8]]},"3744":{"position":[[427,8]]},"3770":{"position":[[2222,8],[4039,8]]},"3785":{"position":[[1223,8]]},"3812":{"position":[[1824,8]]},"3924":{"position":[[2920,8]]}}}],["assembley",{"_index":7345,"t":{"3069":{"position":[[122,9]]},"3071":{"position":[[1093,9],[1179,9]]}}}],["assembly_nam",{"_index":8741,"t":{"3770":{"position":[[2222,13],[4039,13]]},"3785":{"position":[[1223,13]]},"3812":{"position":[[1824,13]]}}}],["assemblyfixtur",{"_index":8010,"t":{"3389":{"position":[[41,15],[83,15],[666,15],[724,15]]},"3391":{"position":[[6,15]]}}}],["assemblyloadcontext",{"_index":6768,"t":{"2629":{"position":[[52,19]]}}}],["assemblynam",{"_index":6396,"t":{"2524":{"position":[[48,12]]},"2542":{"position":[[232,12]]},"2553":{"position":[[212,12]]},"3031":{"position":[[212,12]]},"3770":{"position":[[507,12],[790,12],[1889,12],[3538,12],[5196,12],[5583,12]]},"3777":{"position":[[147,12]]},"3779":{"position":[[714,12],[1058,12],[1452,12]]},"3785":{"position":[[183,12],[871,12],[1600,12]]},"3798":{"position":[[154,12]]},"3802":{"position":[[786,12],[1425,12],[2086,12]]},"3812":{"position":[[210,12],[1147,12],[2540,12]]},"3817":{"position":[[692,12],[997,12],[1734,12],[2017,12]]},"3821":{"position":[[211,12],[509,12]]},"3896":{"position":[[136,12],[434,12]]}}}],["assert",{"_index":7990,"t":{"3360":{"position":[[92,6],[178,6]]},"3373":{"position":[[596,6]]},"3375":{"position":[[203,6]]},"3381":{"position":[[241,6]]},"3383":{"position":[[330,6]]},"3387":{"position":[[186,6]]},"3389":{"position":[[1310,6],[1393,6]]},"3391":{"position":[[765,6],[848,6],[949,6]]},"3393":{"position":[[1183,6],[1266,6],[1367,6],[1470,6]]},"3405":{"position":[[0,6],[67,6],[85,6]]},"3924":{"position":[[3459,6]]}}}],["assignableto",{"_index":4336,"t":{"1440":{"position":[[359,12],[597,12],[770,12],[876,12]]}}}],["assinglequeri",{"_index":3718,"t":{"887":{"position":[[202,13]]}}}],["assplitqueri",{"_index":3719,"t":{"887":{"position":[[227,12]]}}}],["assugarcli",{"_index":7676,"t":{"3224":{"position":[[1665,13]]}}}],["assumeunivers",{"_index":6268,"t":{"2383":{"position":[[629,15]]}}}],["astemporalal",{"_index":3703,"t":{"885":{"position":[[219,13]]}}}],["astemporalasof",{"_index":3704,"t":{"885":{"position":[[235,14]]}}}],["astemporalbetween",{"_index":3708,"t":{"885":{"position":[[291,17]]}}}],["astemporalcontain",{"_index":3709,"t":{"885":{"position":[[329,19]]}}}],["astemporalfrom",{"_index":3705,"t":{"885":{"position":[[256,14]]}}}],["astemporalof",{"_index":3701,"t":{"885":{"position":[[97,12]]}}}],["asten",{"_index":7677,"t":{"3224":{"position":[[1697,8]]},"3287":{"position":[[2020,8],[2335,8],[2653,8]]}}}],["astyp",{"_index":5841,"t":{"1913":{"position":[[1043,6]]}}}],["asupdat",{"_index":7675,"t":{"3224":{"position":[[1576,12]]},"3232":{"position":[[78,12]]}}}],["async",{"_index":270,"t":{"19":{"position":[[28,5]]},"112":{"position":[[385,5]]},"133":{"position":[[699,5]]},"135":{"position":[[317,5]]},"146":{"position":[[482,5],[1010,5]]},"233":{"position":[[226,5]]},"253":{"position":[[253,5],[506,5]]},"319":{"position":[[40,5],[340,5]]},"490":{"position":[[308,5]]},"492":{"position":[[320,5],[536,5]]},"1024":{"position":[[7,5]]},"1229":{"position":[[7,5]]},"1368":{"position":[[564,5]]},"1424":{"position":[[1216,5],[1439,5]]},"1594":{"position":[[155,5]]},"1661":{"position":[[842,5]]},"1665":{"position":[[147,5]]},"1703":{"position":[[518,5]]},"1741":{"position":[[102,5],[889,5],[1759,5]]},"1743":{"position":[[57,5],[366,5]]},"1745":{"position":[[153,5]]},"1753":{"position":[[41,5]]},"1795":{"position":[[289,5],[543,5],[791,5],[1146,5],[1556,5],[1775,5],[2203,5],[2352,5]]},"1799":{"position":[[380,5],[554,5]]},"1801":{"position":[[2217,5],[2877,5]]},"1803":{"position":[[1826,5],[4179,5],[4849,5],[5079,5]]},"1805":{"position":[[308,5]]},"1809":{"position":[[180,5],[342,5]]},"1811":{"position":[[435,5]]},"1815":{"position":[[428,5],[497,5],[597,5]]},"1817":{"position":[[208,5]]},"1819":{"position":[[305,5],[721,5]]},"1823":{"position":[[441,5]]},"1913":{"position":[[353,5]]},"1915":{"position":[[248,5]]},"1919":{"position":[[182,5]]},"1921":{"position":[[238,5]]},"1925":{"position":[[233,5]]},"1929":{"position":[[234,5]]},"1933":{"position":[[209,5]]},"1937":{"position":[[240,5]]},"1941":{"position":[[209,5]]},"1945":{"position":[[234,5]]},"1951":{"position":[[252,5]]},"1961":{"position":[[281,5]]},"2158":{"position":[[37,5]]},"2182":{"position":[[115,5]]},"2184":{"position":[[120,5]]},"2313":{"position":[[577,5]]},"2315":{"position":[[183,5],[326,5]]},"2406":{"position":[[514,5]]},"2434":{"position":[[535,5]]},"2442":{"position":[[1814,5]]},"2482":{"position":[[220,5],[436,5]]},"2484":{"position":[[320,5],[536,5]]},"2567":{"position":[[8,5]]},"2569":{"position":[[8,5]]},"2571":{"position":[[35,5]]},"2577":{"position":[[18,5]]},"2579":{"position":[[272,5]]},"2581":{"position":[[429,5],[956,5]]},"2587":{"position":[[373,5]]},"2589":{"position":[[404,5]]},"2790":{"position":[[692,5],[909,5],[1121,5]]},"2796":{"position":[[249,5],[443,5],[676,5]]},"2805":{"position":[[310,5]]},"2813":{"position":[[454,5]]},"2817":{"position":[[733,5]]},"2825":{"position":[[220,5],[436,5]]},"2827":{"position":[[366,5],[582,5]]},"2829":{"position":[[414,5],[681,5]]},"2856":{"position":[[294,5],[340,5],[742,5],[1213,5]]},"3023":{"position":[[839,5]]},"3154":{"position":[[549,5]]},"3162":{"position":[[238,5]]},"3168":{"position":[[340,5]]},"3194":{"position":[[702,5]]},"3287":{"position":[[160,5],[485,5]]},"3291":{"position":[[1286,5]]},"3373":{"position":[[522,5]]},"3397":{"position":[[676,5]]},"3483":{"position":[[817,5]]},"3575":{"position":[[895,5]]},"3581":{"position":[[654,5]]},"3583":{"position":[[506,5],[857,5]]},"3672":{"position":[[147,5]]},"3708":{"position":[[2494,5]]},"3716":{"position":[[540,5]]},"3762":{"position":[[150,5]]},"3768":{"position":[[325,5]]},"3770":{"position":[[197,5],[1430,5],[2881,5],[4746,5]]},"3774":{"position":[[482,5]]},"3783":{"position":[[204,5]]},"3789":{"position":[[35,5]]},"3791":{"position":[[322,5],[965,5],[1769,5]]},"3795":{"position":[[194,5]]},"3806":{"position":[[3408,5]]},"3808":{"position":[[842,5],[2063,5]]},"3832":{"position":[[141,5],[292,5],[529,5]]},"3922":{"position":[[433,5],[555,5],[633,5]]},"3936":{"position":[[1048,5],[1170,5]]},"3956":{"position":[[1842,5]]},"3986":{"position":[[730,5]]}}}],["asyncloc",{"_index":6135,"t":{"2319":{"position":[[43,10]]},"2843":{"position":[[250,10]]},"2856":{"position":[[0,10],[147,10],[190,10],[375,10],[871,10],[1367,10],[1478,10],[1766,10],[1959,10],[2037,10]]},"3952":{"position":[[47,10]]}}}],["asynclocalstr",{"_index":7132,"t":{"2856":{"position":[[167,16],[476,16],[585,16],[943,16],[1153,16]]}}}],["asyncmethoda",{"_index":7136,"t":{"2856":{"position":[[305,12],[1252,12]]}}}],["asyncmethodb",{"_index":7143,"t":{"2856":{"position":[[559,12],[668,12],[753,12],[818,12],[1044,12],[1330,12],[1441,12],[1551,12],[1638,12]]}}}],["atleaston",{"_index":3179,"t":{"606":{"position":[[1077,10],[1186,10]]},"608":{"position":[[354,10],[807,10]]}}}],["atob",{"_index":1147,"t":{"152":{"position":[[306,4],[580,4]]}}}],["atom",{"_index":7833,"t":{"3282":{"position":[[107,9]]}}}],["attach",{"_index":265,"t":{"15":{"position":[[369,10]]},"17":{"position":[[363,10]]},"1739":{"position":[[536,10]]},"1745":{"position":[[179,10],[363,10]]}}}],["attempt",{"_index":3439,"t":{"734":{"position":[[818,10],[7615,10]]},"3452":{"position":[[3144,9]]},"3916":{"position":[[6140,9]]}}}],["attribut",{"_index":362,"t":{"34":{"position":[[4,9]]},"188":{"position":[[125,10]]},"1903":{"position":[[9,9],[284,9],[312,9],[333,9]]},"1915":{"position":[[15,9],[202,9]]},"1921":{"position":[[15,9],[197,9]]},"1929":{"position":[[15,9],[195,9]]},"1937":{"position":[[15,9],[198,9]]},"1945":{"position":[[15,9],[195,9]]},"2243":{"position":[[26,9],[231,9]]},"2591":{"position":[[141,9]]},"3254":{"position":[[250,9],[528,9],[903,9]]},"3275":{"position":[[170,9]]}}}],["attributetarget",{"_index":5848,"t":{"1915":{"position":[[68,16],[94,16]]},"1921":{"position":[[68,16],[94,16]]},"1929":{"position":[[68,16],[94,16]]},"1937":{"position":[[68,16],[94,16]]},"1945":{"position":[[68,16],[94,16]]},"3808":{"position":[[1717,16]]}}}],["attributeusag",{"_index":5847,"t":{"1915":{"position":[[30,14],[53,14]]},"1921":{"position":[[30,14],[53,14]]},"1929":{"position":[[30,14],[53,14]]},"1937":{"position":[[30,14],[53,14]]},"1945":{"position":[[30,14],[53,14]]},"3808":{"position":[[1702,14]]}}}],["au",{"_index":6511,"t":{"2559":{"position":[[782,2]]}}}],["aud",{"_index":815,"t":{"114":{"position":[[1099,3]]},"3446":{"position":[[1574,3]]},"3452":{"position":[[2431,3]]},"3916":{"position":[[5427,3]]},"3928":{"position":[[2136,3]]}}}],["audit",{"_index":2973,"t":{"570":{"position":[[952,5],[1742,5],[1771,5],[1788,5],[2116,5],[2133,5],[2424,5]]}}}],["auth",{"_index":5074,"t":{"1580":{"position":[[422,4]]},"3686":{"position":[[1015,4],[1209,4],[1238,4]]}}}],["authent",{"_index":534,"t":{"91":{"position":[[80,14]]},"121":{"position":[[11,14]]},"127":{"position":[[17,14]]},"1683":{"position":[[355,14]]},"3990":{"position":[[364,14]]}}}],["authenticationschem",{"_index":948,"t":{"125":{"position":[[136,20],[198,20]]},"129":{"position":[[118,20],[202,20],[267,20],[412,20],[447,21],[489,20]]}}}],["authn",{"_index":7577,"t":{"3189":{"position":[[479,5]]}}}],["author",{"_index":147,"t":{"11":{"position":[[407,13]]},"127":{"position":[[130,9],[196,9],[388,13],[430,13]]},"129":{"position":[[437,9]]},"133":{"position":[[96,13],[157,13]]},"135":{"position":[[86,13],[147,13]]},"137":{"position":[[103,9]]},"146":{"position":[[13,13],[103,13]]},"148":{"position":[[57,13],[89,13]]},"150":{"position":[[150,9]]},"587":{"position":[[164,13]]},"1551":{"position":[[572,7],[585,7]]},"1913":{"position":[[27,13],[105,13]]},"2294":{"position":[[436,13]]},"3494":{"position":[[92,13],[132,13],[238,13]]},"3650":{"position":[[229,13],[265,13]]},"3686":{"position":[[678,13]]},"3704":{"position":[[904,13]]},"3924":{"position":[[4444,13]]},"3982":{"position":[[869,9]]}}}],["authorizationclaim",{"_index":8199,"t":{"3452":{"position":[[2008,19]]},"3916":{"position":[[5004,19]]}}}],["authorizationfiltercontext",{"_index":5833,"t":{"1913":{"position":[[385,26]]},"1915":{"position":[[280,26]]}}}],["authorizationhandlercontext",{"_index":969,"t":{"127":{"position":[[627,27]]},"133":{"position":[[550,27]]},"135":{"position":[[340,27]]},"146":{"position":[[505,27],[895,27]]}}}],["authorizefilt",{"_index":5783,"t":{"1901":{"position":[[104,15]]}}}],["authorizehandleasync",{"_index":1113,"t":{"146":{"position":[[644,20]]}}}],["authornam",{"_index":3516,"t":{"763":{"position":[[129,10],[168,10],[256,10],[382,10]]}}}],["authz",{"_index":7578,"t":{"3189":{"position":[[489,5]]}}}],["auto",{"_index":220,"t":{"13":{"position":[[95,4]]},"2296":{"position":[[95,4]]}}}],["automapp",{"_index":6794,"t":{"2680":{"position":[[88,10]]},"2684":{"position":[[447,10]]}}}],["autooffsetreset",{"_index":5626,"t":{"1803":{"position":[[5314,15],[5332,15]]}}}],["autorefreshtoken",{"_index":1111,"t":{"146":{"position":[[576,16]]},"2138":{"position":[[14,16]]},"3964":{"position":[[403,16]]}}}],["autorestart",{"_index":6892,"t":{"2751":{"position":[[344,11]]}}}],["autosavechang",{"_index":9313,"t":{"3922":{"position":[[2094,14]]}}}],["averag",{"_index":3845,"t":{"975":{"position":[[55,7],[119,7],[186,7]]}}}],["averageasync",{"_index":3846,"t":{"975":{"position":[[269,12],[344,12],[422,12]]}}}],["aw1hayuprkmizn3q",{"_index":1825,"t":{"249":{"position":[[248,16]]}}}],["await",{"_index":304,"t":{"19":{"position":[[569,5]]},"112":{"position":[[1324,5]]},"133":{"position":[[705,5]]},"146":{"position":[[638,5],[1016,5]]},"233":{"position":[[175,5]]},"253":{"position":[[356,5],[787,5]]},"319":{"position":[[46,5],[346,5],[435,5]]},"490":{"position":[[337,5]]},"492":{"position":[[509,5],[632,5],[677,5]]},"550":{"position":[[71,5]]},"552":{"position":[[482,5]]},"645":{"position":[[245,5],[288,5],[321,5]]},"647":{"position":[[151,5],[222,5]]},"649":{"position":[[188,5],[238,5],[307,5]]},"651":{"position":[[197,5],[250,5],[322,5]]},"661":{"position":[[113,5],[164,5]]},"663":{"position":[[119,5],[173,5]]},"665":{"position":[[549,5],[628,5],[701,5],[789,5],[870,5],[937,5],[998,5],[1074,5]]},"667":{"position":[[573,5],[655,5],[731,5],[822,5],[906,5],[976,5],[1040,5],[1119,5]]},"669":{"position":[[549,5],[628,5],[701,5],[789,5],[870,5],[937,5],[998,5],[1074,5]]},"671":{"position":[[573,5],[655,5],[731,5],[822,5],[906,5],[976,5],[1040,5],[1119,5]]},"763":{"position":[[8,5],[312,5]]},"769":{"position":[[65,5],[330,5]]},"773":{"position":[[213,5],[261,5],[345,5],[457,5],[567,5],[846,5]]},"779":{"position":[[202,5],[245,5]]},"781":{"position":[[103,5],[149,5]]},"783":{"position":[[95,5],[135,5]]},"785":{"position":[[101,5],[144,5]]},"787":{"position":[[107,5],[153,5]]},"789":{"position":[[113,5],[162,5]]},"795":{"position":[[276,5],[325,5],[377,5],[421,5],[468,5],[507,5]]},"877":{"position":[[2255,5]]},"954":{"position":[[194,5],[245,5],[305,5]]},"956":{"position":[[839,5],[914,5],[998,5],[1072,5],[1155,5],[1228,5],[1310,5],[1394,5],[1477,5],[1569,5],[1652,5]]},"958":{"position":[[226,5]]},"962":{"position":[[200,5],[280,5]]},"965":{"position":[[334,5],[385,5],[450,5],[510,5],[592,5]]},"967":{"position":[[335,5],[385,5],[449,5],[522,5],[598,5]]},"969":{"position":[[329,5],[377,5],[435,5],[492,5],[576,5]]},"971":{"position":[[329,5],[377,5],[435,5],[492,5],[576,5]]},"973":{"position":[[231,5],[297,5],[368,5]]},"975":{"position":[[243,5],[313,5],[388,5]]},"1024":{"position":[[121,5]]},"1160":{"position":[[914,5],[983,5],[1087,5],[1243,5],[1385,5],[1530,5],[1615,5],[1709,5]]},"1162":{"position":[[960,5],[1035,5],[1145,5],[1307,5],[1455,5],[1606,5],[1697,5],[1797,5]]},"1164":{"position":[[444,5],[539,5],[702,5]]},"1166":{"position":[[579,5],[702,5],[912,5]]},"1168":{"position":[[322,5],[418,5],[522,5]]},"1170":{"position":[[544,5],[854,5],[970,5]]},"1173":{"position":[[261,5],[328,5],[407,5]]},"1175":{"position":[[277,5],[350,5],[435,5]]},"1177":{"position":[[259,5],[326,5],[405,5]]},"1179":{"position":[[480,5],[566,5],[679,5],[822,5]]},"1181":{"position":[[315,5],[391,5],[508,5]]},"1183":{"position":[[383,5],[460,5],[576,5],[669,5]]},"1185":{"position":[[1120,5],[1229,5],[1369,5]]},"1188":{"position":[[292,5],[353,5],[426,5],[495,5]]},"1190":{"position":[[307,5],[371,5],[445,5],[515,5]]},"1325":{"position":[[203,5],[246,5]]},"1327":{"position":[[103,5],[149,5]]},"1329":{"position":[[495,5],[568,5],[663,5],[772,5],[833,5],[916,5]]},"1331":{"position":[[510,5],[586,5],[684,5],[796,5],[860,5],[946,5]]},"1333":{"position":[[495,5],[568,5],[663,5],[772,5],[833,5],[916,5]]},"1335":{"position":[[513,5],[589,5],[687,5],[799,5],[863,5],[949,5]]},"1337":{"position":[[81,5]]},"1339":{"position":[[84,5]]},"1341":{"position":[[305,5],[384,5],[485,5]]},"1343":{"position":[[314,5],[396,5],[500,5]]},"1345":{"position":[[305,5],[384,5],[485,5]]},"1347":{"position":[[314,5],[396,5],[500,5]]},"1349":{"position":[[188,5],[238,5],[307,5]]},"1351":{"position":[[197,5],[250,5],[322,5]]},"1368":{"position":[[617,5]]},"1424":{"position":[[1361,5],[1608,5]]},"1665":{"position":[[272,5]]},"1703":{"position":[[576,5]]},"1729":{"position":[[138,5]]},"1741":{"position":[[741,5],[1507,5],[2337,5]]},"1795":{"position":[[436,5],[701,5],[926,5],[1248,5],[1662,5],[1881,5],[2240,5],[2389,5],[2455,5]]},"1797":{"position":[[771,5]]},"1799":{"position":[[472,5],[640,5]]},"1801":{"position":[[2670,5],[2985,5]]},"1803":{"position":[[1934,5],[4518,5],[4642,5],[4957,5],[5102,5]]},"1805":{"position":[[360,5]]},"1809":{"position":[[318,5],[356,5]]},"1815":{"position":[[457,5],[542,5],[640,5]]},"1817":{"position":[[106,5],[253,5]]},"1819":{"position":[[422,5]]},"1913":{"position":[[1203,5]]},"1919":{"position":[[678,5]]},"1925":{"position":[[1186,5]]},"1933":{"position":[[832,5]]},"1941":{"position":[[1049,5]]},"1951":{"position":[[523,5]]},"1955":{"position":[[21,5]]},"2158":{"position":[[82,5]]},"2160":{"position":[[0,5]]},"2182":{"position":[[90,5],[181,5]]},"2184":{"position":[[93,5],[186,5]]},"2226":{"position":[[10,5]]},"2228":{"position":[[17,5]]},"2255":{"position":[[627,5],[698,5]]},"2313":{"position":[[648,5]]},"2315":{"position":[[204,5],[307,5],[338,5]]},"2406":{"position":[[639,5]]},"2434":{"position":[[699,5]]},"2442":{"position":[[1978,5]]},"2482":{"position":[[409,5],[538,5],[583,5]]},"2484":{"position":[[509,5],[638,5],[683,5]]},"2567":{"position":[[27,5]]},"2569":{"position":[[108,5]]},"2571":{"position":[[54,5]]},"2577":{"position":[[283,5]]},"2579":{"position":[[556,5]]},"2581":{"position":[[526,5],[1053,5]]},"2587":{"position":[[439,5]]},"2589":{"position":[[614,5]]},"2607":{"position":[[122,5],[200,5],[549,5],[623,5]]},"2790":{"position":[[749,5],[961,5],[1175,5]]},"2805":{"position":[[461,5]]},"2813":{"position":[[635,5]]},"2817":{"position":[[914,5]]},"2825":{"position":[[409,5],[538,5],[583,5]]},"2827":{"position":[[555,5],[684,5],[729,5]]},"2829":{"position":[[654,5],[705,5],[802,5],[857,5],[913,5]]},"2856":{"position":[[696,5],[713,5],[723,5],[994,5],[1246,5]]},"3154":{"position":[[619,5]]},"3162":{"position":[[274,5]]},"3168":{"position":[[394,5]]},"3170":{"position":[[270,5],[327,5]]},"3194":{"position":[[745,5]]},"3287":{"position":[[201,5],[274,5],[526,5],[599,5]]},"3291":{"position":[[1292,5]]},"3373":{"position":[[554,5]]},"3397":{"position":[[794,5]]},"3452":{"position":[[3853,7]]},"3483":{"position":[[851,5],[899,5],[961,5],[1025,5],[1087,5],[1155,5],[1221,5]]},"3486":{"position":[[28,5],[104,5],[181,5],[259,5],[342,5],[422,5],[500,5]]},"3488":{"position":[[32,5]]},"3490":{"position":[[0,5]]},"3492":{"position":[[8,5],[204,5]]},"3494":{"position":[[8,5],[185,5]]},"3496":{"position":[[8,5],[138,5],[249,5]]},"3498":{"position":[[306,5],[417,5]]},"3500":{"position":[[8,5],[118,5],[242,5],[411,5],[602,5]]},"3502":{"position":[[0,5]]},"3504":{"position":[[0,5]]},"3506":{"position":[[82,5],[193,5],[311,5],[459,5]]},"3508":{"position":[[0,5],[82,5]]},"3510":{"position":[[0,5]]},"3512":{"position":[[0,5]]},"3514":{"position":[[0,5]]},"3516":{"position":[[0,5]]},"3518":{"position":[[0,5]]},"3520":{"position":[[156,5],[235,5],[303,5],[375,5]]},"3522":{"position":[[202,5],[346,5],[539,5],[718,5],[955,5],[1282,5],[1446,5]]},"3524":{"position":[[54,5]]},"3526":{"position":[[24,5]]},"3528":{"position":[[40,5]]},"3530":{"position":[[42,5]]},"3532":{"position":[[85,5]]},"3575":{"position":[[561,5],[1000,5]]},"3581":{"position":[[703,5]]},"3583":{"position":[[544,5],[906,5]]},"3595":{"position":[[164,5]]},"3599":{"position":[[26,5]]},"3603":{"position":[[54,5],[274,5]]},"3708":{"position":[[2780,5],[2993,5]]},"3762":{"position":[[345,5]]},"3768":{"position":[[520,5]]},"3770":{"position":[[334,5],[1731,5],[3385,5],[5006,5]]},"3774":{"position":[[677,5]]},"3783":{"position":[[554,5]]},"3791":{"position":[[525,5],[1296,5],[2044,5]]},"3795":{"position":[[411,5]]},"3806":{"position":[[3603,5]]},"3808":{"position":[[1037,5],[2258,5]]},"3832":{"position":[[268,5],[306,5],[753,5]]},"3916":{"position":[[6849,7],[7171,5],[7358,5],[7400,5],[7512,5],[7615,5],[7657,5],[7776,5],[8010,5],[8052,5],[8164,5],[8306,5],[8348,5],[8627,5],[8774,5],[8816,5]]},"3918":{"position":[[2060,5],[2224,5],[2866,5],[2947,5]]},"3922":{"position":[[535,5],[608,5]]},"3936":{"position":[[1343,5],[1431,5],[1488,5]]},"3956":{"position":[[2128,5],[2337,5]]}}}],["awk",{"_index":4472,"t":{"1488":{"position":[[1077,3]]},"1499":{"position":[[469,3]]}}}],["axd",{"_index":9500,"t":{"3934":{"position":[[611,3]]}}}],["axio",{"_index":313,"t":{"19":{"position":[[705,5],[736,5],[910,5],[975,5]]},"300":{"position":[[243,5]]},"302":{"position":[[132,5]]},"308":{"position":[[38,5],[157,5],[180,5],[212,5],[225,5],[239,5],[313,5],[354,5]]},"314":{"position":[[31,5],[147,5],[169,5],[284,5]]},"319":{"position":[[98,5],[391,5]]},"329":{"position":[[0,5]]},"417":{"position":[[17,5]]},"2995":{"position":[[3,5],[93,5]]},"3936":{"position":[[703,5]]},"3938":{"position":[[681,5]]},"3940":{"position":[[263,5]]},"3990":{"position":[[725,5]]}}}],["axiosinst",{"_index":2072,"t":{"314":{"position":[[262,13]]}}}],["az",{"_index":6466,"t":{"2559":{"position":[[356,2],[365,2],[368,2],[396,2],[399,2]]}}}],["azeri",{"_index":6467,"t":{"2559":{"position":[[359,5],[376,5],[407,5]]}}}],["azur",{"_index":634,"t":{"102":{"position":[[95,5]]},"251":{"position":[[77,5]]}}}],["b",{"_index":950,"t":{"125":{"position":[[220,1],[227,1]]},"280":{"position":[[183,1]]},"550":{"position":[[414,1],[438,1],[456,1],[474,1]]},"734":{"position":[[7291,1],[7402,1]]},"763":{"position":[[58,1],[63,1],[72,1],[77,1],[95,1],[100,1],[109,1],[122,1],[127,1],[140,1],[143,1],[166,1],[195,1],[200,1],[211,1],[237,1],[242,1],[254,1],[360,1],[365,1],[380,1]]},"773":{"position":[[522,1],[527,1],[535,1],[540,1],[672,1],[677,1],[686,1],[691,1],[708,1],[747,1],[752,1],[763,1],[768,1],[818,1]]},"866":{"position":[[341,1],[387,1],[444,1],[474,1]]},"899":{"position":[[1897,1],[1902,1]]},"1522":{"position":[[35,1],[56,1]]},"1526":{"position":[[61,1]]},"1530":{"position":[[26,1],[63,1]]},"1689":{"position":[[136,1],[575,1]]},"1691":{"position":[[322,1],[367,1]]},"2149":{"position":[[20,1],[29,1]]},"2326":{"position":[[88,1]]},"2530":{"position":[[113,1],[122,1]]},"3222":{"position":[[45,1]]},"3291":{"position":[[357,1],[362,1],[1127,1],[1132,1]]},"3432":{"position":[[571,1]]},"3750":{"position":[[125,1],[268,1],[413,1]]},"3832":{"position":[[2052,1],[3002,1],[3813,1],[4763,1]]}}}],["b1",{"_index":5292,"t":{"1691":{"position":[[350,2]]}}}],["b364",{"_index":7265,"t":{"2929":{"position":[[459,4]]},"2945":{"position":[[459,4]]},"2959":{"position":[[459,4]]}}}],["b44087d",{"_index":9350,"t":{"3924":{"position":[[1854,7],[1893,7]]}}}],["b6953cd",{"_index":9273,"t":{"3920":{"position":[[1193,7]]}}}],["b72a",{"_index":4403,"t":{"1483":{"position":[[320,4]]}}}],["b879861",{"_index":9294,"t":{"3922":{"position":[[739,7]]}}}],["b8fe2cd",{"_index":9222,"t":{"3918":{"position":[[1207,7]]}}}],["b__0",{"_index":3479,"t":{"734":{"position":[[7291,4],[7402,4]]},"3832":{"position":[[2052,4],[3813,4]]}}}],["b__1",{"_index":8972,"t":{"3832":{"position":[[3002,4],[4763,4]]}}}],["ba42198",{"_index":9510,"t":{"3934":{"position":[[822,7]]}}}],["ba9b1f1",{"_index":9284,"t":{"3922":{"position":[[160,7],[2361,7]]}}}],["backgroundprocess",{"_index":8971,"t":{"3832":{"position":[[2981,20],[4742,20]]}}}],["backgroundservic",{"_index":2732,"t":{"492":{"position":[[73,17]]},"530":{"position":[[99,17]]},"1039":{"position":[[99,17]]},"2480":{"position":[[0,17]]},"2482":{"position":[[47,17]]},"2484":{"position":[[73,17]]},"2805":{"position":[[34,17],[271,17]]},"2807":{"position":[[30,18],[221,18]]},"2813":{"position":[[47,17],[313,17]]},"2817":{"position":[[462,17]]},"2823":{"position":[[50,17]]},"2825":{"position":[[47,17]]},"2827":{"position":[[119,17]]},"2829":{"position":[[137,17]]},"2831":{"position":[[88,17]]},"3934":{"position":[[716,17]]}}}],["backlog",{"_index":8842,"t":{"3800":{"position":[[73,7]]}}}],["backup",{"_index":8531,"t":{"3702":{"position":[[1278,6]]}}}],["bad",{"_index":4232,"t":{"1392":{"position":[[131,3],[224,3]]}}}],["badobjectresult",{"_index":10340,"t":{"3994":{"position":[[846,15]]}}}],["badpageresult",{"_index":5762,"t":{"1887":{"position":[[50,13],[226,13],[247,13]]},"1933":{"position":[[657,13],[697,13]]},"3934":{"position":[[151,13],[532,13],[1475,13]]}}}],["bah",{"_index":5739,"t":{"1863":{"position":[[263,3],[310,3]]},"2201":{"position":[[11,3],[39,3]]},"3448":{"position":[[535,3]]},"3918":{"position":[[3682,3]]},"3920":{"position":[[235,3]]},"3922":{"position":[[1625,3]]},"3924":{"position":[[1550,3]]},"3930":{"position":[[1035,3]]},"3932":{"position":[[428,3]]},"3956":{"position":[[44,3]]}}}],["bahloglevel",{"_index":8176,"t":{"3448":{"position":[[485,11]]}}}],["bai",{"_index":4900,"t":{"1511":{"position":[[4221,3]]}}}],["baidu",{"_index":59,"t":{"3":{"position":[[575,5],[596,5],[670,5]]},"406":{"position":[[212,5],[241,5]]},"3373":{"position":[[53,5],[573,5]]},"3520":{"position":[[394,5]]},"3599":{"position":[[85,5]]},"3601":{"position":[[938,5],[1083,5],[1538,5]]}}}],["baiqian",{"_index":515,"t":{"87":{"position":[[20,7]]},"433":{"position":[[65,7]]},"441":{"position":[[174,7],[419,7]]},"1551":{"position":[[603,7],[684,7]]},"2261":{"position":[[159,7],[349,7]]},"2707":{"position":[[65,7]]},"2727":{"position":[[699,7]]},"2735":{"position":[[178,7]]},"3464":{"position":[[207,7],[397,7]]},"3702":{"position":[[636,7],[733,7],[1124,7],[1254,7],[1502,7],[1892,7],[2231,7]]},"3916":{"position":[[1425,7]]},"3936":{"position":[[1637,7],[2023,7],[2208,7]]}}}],["banana",{"_index":9520,"t":{"3934":{"position":[[1960,7],[1994,7],[2028,7]]}}}],["bar",{"_index":1905,"t":{"270":{"position":[[175,3]]},"272":{"position":[[47,3],[145,3]]},"274":{"position":[[47,3],[218,3]]},"276":{"position":[[47,3]]},"278":{"position":[[47,3],[220,3]]},"280":{"position":[[47,3]]},"282":{"position":[[47,3],[376,3]]},"288":{"position":[[47,3],[191,3]]},"290":{"position":[[47,3]]},"1522":{"position":[[42,3],[60,3]]},"1524":{"position":[[6,3],[22,3],[34,3],[50,3],[60,3],[90,3]]},"1530":{"position":[[7,3],[69,3]]},"2607":{"position":[[115,3],[542,3]]}}}],["base",{"_index":2075,"t":{"314":{"position":[[358,4],[391,4]]},"508":{"position":[[381,4]]},"510":{"position":[[415,4]]},"516":{"position":[[386,4]]},"518":{"position":[[316,4],[414,4]]},"534":{"position":[[491,4],[692,4]]},"570":{"position":[[486,4]]},"572":{"position":[[672,4],[1117,4]]},"653":{"position":[[520,4]]},"745":{"position":[[285,4]]},"832":{"position":[[408,4],[495,4]]},"846":{"position":[[564,4]]},"915":{"position":[[348,4]]},"927":{"position":[[400,4],[680,4],[871,4],[1092,4],[1322,4],[1557,4],[1731,4],[1907,4],[2072,4],[2295,4]]},"929":{"position":[[401,4],[555,4],[698,4],[904,4],[1142,4],[1433,4],[1648,4],[1905,4],[2151,4],[2369,4],[2652,4],[2859,4],[3108,4],[3354,4],[3642,4],[3854,4],[4108,4]]},"931":{"position":[[348,4],[593,4],[765,4],[979,4],[1130,4],[1317,4]]},"947":{"position":[[428,4],[936,4]]},"1041":{"position":[[941,4],[1641,4]]},"1054":{"position":[[322,4]]},"1056":{"position":[[359,4]]},"1066":{"position":[[522,4]]},"1311":{"position":[[304,4]]},"1313":{"position":[[946,4],[1079,4]]},"1353":{"position":[[487,4]]},"1364":{"position":[[153,4],[492,4]]},"1773":{"position":[[114,4]]},"1927":{"position":[[390,4],[694,4]]},"1935":{"position":[[321,4]]},"1943":{"position":[[259,4]]},"1953":{"position":[[259,4]]},"2817":{"position":[[668,4],[1040,4]]},"2899":{"position":[[587,4]]},"2925":{"position":[[412,4]]},"2933":{"position":[[399,4],[454,4],[595,4],[679,4]]},"2935":{"position":[[470,4],[525,4]]},"2937":{"position":[[567,4],[622,4]]},"2941":{"position":[[412,4]]},"2949":{"position":[[319,4],[390,4],[443,4],[543,4]]},"2951":{"position":[[306,4],[461,4],[552,4]]},"2955":{"position":[[412,4]]},"2963":{"position":[[366,4],[423,4],[462,4],[548,4]]},"2965":{"position":[[89,4],[165,4]]},"3224":{"position":[[144,4],[174,4],[277,4],[314,4],[384,4],[438,4],[472,4],[582,4],[666,4],[963,4],[1027,4],[1083,4],[1107,4],[1146,4],[1184,4],[1236,4],[1260,4],[1280,4],[1353,4],[1384,4],[1451,4],[1475,4],[1505,4],[1571,4],[1660,4],[1692,4],[1725,4],[1829,4]]},"3371":{"position":[[394,4]]},"3389":{"position":[[915,4]]},"3806":{"position":[[3086,4]]},"3808":{"position":[[1860,4]]},"3910":{"position":[[1362,4]]},"3924":{"position":[[3142,4]]}}}],["base64",{"_index":5384,"t":{"1741":{"position":[[852,6],[1150,6],[1618,6],[1648,6],[2486,6]]},"1887":{"position":[[539,6]]},"3942":{"position":[[520,6]]}}}],["base64icon",{"_index":5769,"t":{"1887":{"position":[[501,10]]}}}],["base_path",{"_index":2074,"t":{"314":{"position":[[358,9]]}}}],["baseaddress",{"_index":8275,"t":{"3498":{"position":[[104,11]]},"3543":{"position":[[104,11]]},"3575":{"position":[[164,11]]},"3581":{"position":[[158,11]]},"3583":{"position":[[263,11]]},"3962":{"position":[[1620,11]]}}}],["baseapi",{"_index":2073,"t":{"314":{"position":[[349,7]]}}}],["basedef",{"_index":4943,"t":{"1530":{"position":[[171,8]]}}}],["basedir",{"_index":4509,"t":{"1499":{"position":[[154,7],[195,7],[269,7]]}}}],["basedirectori",{"_index":2597,"t":{"455":{"position":[[25,13]]},"2051":{"position":[[25,13]]}}}],["basenet",{"_index":1469,"t":{"199":{"position":[[152,7]]}}}],["basepath",{"_index":2083,"t":{"314":{"position":[[622,8],[656,8]]},"316":{"position":[[609,8]]}}}],["basestr",{"_index":5240,"t":{"1685":{"position":[[45,10],[143,10]]},"1687":{"position":[[129,10],[222,10],[261,10]]}}}],["basetim",{"_index":9257,"t":{"3920":{"position":[[309,8]]}}}],["bash",{"_index":4505,"t":{"1497":{"position":[[129,4]]}}}],["basi",{"_index":8550,"t":{"3702":{"position":[[2527,5]]}}}],["basic",{"_index":855,"t":{"121":{"position":[[5,5]]},"1580":{"position":[[416,5]]}}}],["basicack",{"_index":5573,"t":{"1801":{"position":[[1916,8]]}}}],["basicconsum",{"_index":5577,"t":{"1801":{"position":[[1978,12]]}}}],["basicdata",{"_index":4449,"t":{"1488":{"position":[[434,9]]}}}],["basicpublish",{"_index":5580,"t":{"1801":{"position":[[2606,12]]}}}],["batch",{"_index":3505,"t":{"756":{"position":[[71,5]]},"759":{"position":[[18,5],[48,5],[86,5],[118,5],[150,5]]}}}],["batchdelet",{"_index":3542,"t":{"769":{"position":[[50,11]]}}}],["batchdeleteasync",{"_index":3543,"t":{"769":{"position":[[109,16]]}}}],["batchsiz",{"_index":5629,"t":{"1803":{"position":[[5456,9]]}}}],["batchupd",{"_index":3513,"t":{"763":{"position":[[33,11]]},"769":{"position":[[180,11],[279,11],[571,11]]}}}],["batchupdateasync",{"_index":3545,"t":{"769":{"position":[[375,16]]}}}],["bd01638",{"_index":9477,"t":{"3932":{"position":[[406,7]]}}}],["bdbdbdbdbdbdbdbdbdbdbdbdbdbdbd",{"_index":5300,"t":{"1691":{"position":[[557,30]]}}}],["be5b40",{"_index":9225,"t":{"3918":{"position":[[1322,6]]}}}],["bearer",{"_index":801,"t":{"114":{"position":[[680,6]]},"148":{"position":[[72,6],[104,6]]},"3446":{"position":[[1155,6]]},"3452":{"position":[[1710,6]]},"3494":{"position":[[109,6],[149,6],[255,6]]},"3650":{"position":[[19,6],[195,6],[296,6],[347,6],[423,6]]},"3704":{"position":[[921,6]]},"3916":{"position":[[4706,6]]},"3924":{"position":[[4461,6]]},"3928":{"position":[[1717,6]]},"3984":{"position":[[709,6]]}}}],["bearerformat",{"_index":8483,"t":{"3650":{"position":[[314,12]]}}}],["begin",{"_index":3610,"t":{"820":{"position":[[52,5]]},"1125":{"position":[[182,5]]},"1185":{"position":[[108,5]]},"1488":{"position":[[243,5]]},"1495":{"position":[[243,5]]}}}],["begintran",{"_index":7685,"t":{"3226":{"position":[[448,9]]},"3287":{"position":[[2031,9]]}}}],["begintransact",{"_index":7858,"t":{"3287":{"position":[[1930,16]]},"3291":{"position":[[75,16],[723,16]]},"3922":{"position":[[972,16]]}}}],["behavior",{"_index":8928,"t":{"3817":{"position":[[2721,8]]},"3844":{"position":[[819,8]]}}}],["belarusian",{"_index":6476,"t":{"2559":{"position":[[449,10],[466,10]]}}}],["benchmark",{"_index":1233,"t":{"179":{"position":[[5,12]]},"188":{"position":[[448,9],[512,9]]}}}],["benchmarkdotnet",{"_index":1309,"t":{"186":{"position":[[0,15],[35,15],[82,15]]},"188":{"position":[[27,15],[109,15],[143,15]]},"190":{"position":[[16,15]]},"194":{"position":[[35,15],[57,15]]}}}],["benchmarkrunn",{"_index":1343,"t":{"188":{"position":[[649,15]]}}}],["beta",{"_index":6779,"t":{"2649":{"position":[[28,4],[155,4],[186,4]]}}}],["bf9c0b1",{"_index":9108,"t":{"3914":{"position":[[792,7]]}}}],["bg",{"_index":6478,"t":{"2559":{"position":[[482,2],[490,2],[493,2]]}}}],["bh",{"_index":6436,"t":{"2559":{"position":[[83,2]]}}}],["bid",{"_index":3671,"t":{"866":{"position":[[446,3]]}}}],["big",{"_index":4965,"t":{"1539":{"position":[[195,3]]}}}],["bilibili",{"_index":1962,"t":{"298":{"position":[[17,8]]},"314":{"position":[[205,8]]},"675":{"position":[[17,8]]},"3335":{"position":[[17,8]]}}}],["bin",{"_index":4430,"t":{"1485":{"position":[[180,3],[196,3]]},"2625":{"position":[[546,3],[567,3]]}}}],["binpath",{"_index":5935,"t":{"2051":{"position":[[4,7]]},"2836":{"position":[[909,7]]}}}],["birthday",{"_index":5131,"t":{"1611":{"position":[[768,8]]}}}],["blank",{"_index":6407,"t":{"2532":{"position":[[237,5]]}}}],["blazor",{"_index":554,"t":{"93":{"position":[[227,6],[234,6],[277,6],[577,6],[584,6],[636,6]]},"199":{"position":[[459,6]]},"3317":{"position":[[286,6],[309,6],[371,6]]},"3319":{"position":[[378,6],[397,6],[464,6]]},"3922":{"position":[[1852,6]]},"4002":{"position":[[138,6],[161,6]]}}}],["blazorwithwebapi",{"_index":555,"t":{"93":{"position":[[260,16],[619,16]]},"3317":{"position":[[335,16]]},"3319":{"position":[[432,16]]},"3996":{"position":[[101,16]]}}}],["blob",{"_index":2113,"t":{"319":{"position":[[653,4],[700,4]]},"331":{"position":[[175,4]]},"3065":{"position":[[355,4]]},"3642":{"position":[[429,4]]},"3702":{"position":[[2058,4],[2149,4],[2467,4]]},"3706":{"position":[[2103,4]]}}}],["block",{"_index":2498,"t":{"419":{"position":[[279,7]]},"3768":{"position":[[887,8],[1082,8],[1387,8],[1582,8],[1889,8],[2085,8],[2392,8]]},"3800":{"position":[[134,7]]}}}],["blog",{"_index":2445,"t":{"406":{"position":[[278,4],[308,4]]},"3291":{"position":[[130,4],[151,5],[232,4],[253,5],[317,5],[778,4],[799,5],[862,5],[876,4],[897,5],[1095,5],[1112,5],[1689,5],[1902,5],[1916,4],[1937,5],[2027,4],[2048,5]]},"3307":{"position":[[107,4]]}}}],["bloggingcontext",{"_index":7881,"t":{"3291":{"position":[[1786,15],[1866,15]]}}}],["blue",{"_index":5011,"t":{"1555":{"position":[[87,4],[135,4],[203,4],[311,4],[355,4],[419,4]]}}}],["bn",{"_index":6607,"t":{"2559":{"position":[[1710,2]]}}}],["bo",{"_index":6643,"t":{"2559":{"position":[[2123,2]]}}}],["boardcard",{"_index":198,"t":{"11":{"position":[[1056,9]]},"2294":{"position":[[1104,9]]}}}],["boardcardattach",{"_index":204,"t":{"11":{"position":[[1182,19]]},"2294":{"position":[[1230,19]]}}}],["boardcardattachmentrepositori",{"_index":206,"t":{"11":{"position":[[1204,29]]},"2294":{"position":[[1252,29]]}}}],["boardcardrepositori",{"_index":200,"t":{"11":{"position":[[1068,19]]},"2294":{"position":[[1116,19]]}}}],["boardcardus",{"_index":207,"t":{"11":{"position":[[1264,13]]},"2294":{"position":[[1312,13]]}}}],["boardcarduserrepositori",{"_index":209,"t":{"11":{"position":[[1280,23]]},"2294":{"position":[[1328,23]]}}}],["boardgroup",{"_index":201,"t":{"11":{"position":[[1118,10]]},"2294":{"position":[[1166,10]]}}}],["boardgrouprepositori",{"_index":203,"t":{"11":{"position":[[1131,20]]},"2294":{"position":[[1179,20]]}}}],["bodi",{"_index":5117,"t":{"1609":{"position":[[279,4]]},"1629":{"position":[[99,4]]},"1747":{"position":[[97,4],[129,4]]},"1801":{"position":[[1674,4]]},"2255":{"position":[[60,4],[125,4],[620,4],[691,4]]},"3545":{"position":[[124,4],[219,4],[351,4]]},"3547":{"position":[[259,4],[415,4]]},"3563":{"position":[[1042,4]]},"3565":{"position":[[135,4]]},"3567":{"position":[[210,4]]},"3569":{"position":[[166,4]]},"3571":{"position":[[217,4]]},"3672":{"position":[[340,4]]},"3912":{"position":[[1264,4],[2406,4],[2679,4]]},"3914":{"position":[[1081,4]]},"3922":{"position":[[2181,4]]},"3954":{"position":[[477,4]]},"3966":{"position":[[878,4]]},"3992":{"position":[[209,4],[651,4]]}}}],["bodybyt",{"_index":8347,"t":{"3563":{"position":[[41,9],[346,9],[550,9],[585,9],[683,9]]},"3918":{"position":[[1484,9]]}}}],["bokm",{"_index":6616,"t":{"2559":{"position":[[1793,4]]}}}],["bom",{"_index":7048,"t":{"2788":{"position":[[58,3]]}}}],["book",{"_index":3514,"t":{"763":{"position":[[45,4],[354,4]]}}}],["bool",{"_index":967,"t":{"127":{"position":[[607,4],[852,4],[961,4],[1052,4],[1146,4]]},"133":{"position":[[530,4],[885,4]]},"146":{"position":[[875,4]]},"272":{"position":[[205,4]]},"415":{"position":[[308,4],[412,4],[461,4]]},"585":{"position":[[28,4]]},"608":{"position":[[850,4],[894,4]]},"696":{"position":[[1718,4],[3705,4]]},"793":{"position":[[67,4]]},"883":{"position":[[283,4]]},"1539":{"position":[[771,4],[1003,4],[1216,4]]},"1587":{"position":[[106,4]]},"1635":{"position":[[234,4],[239,4],[248,4]]},"1641":{"position":[[55,4],[99,4],[134,4],[163,4],[362,4]]},"1661":{"position":[[182,4],[254,4],[286,4],[419,4],[481,4]]},"1803":{"position":[[2222,4]]},"1821":{"position":[[157,4],[208,4],[245,4]]},"1885":{"position":[[20,4],[138,4],[233,4]]},"2063":{"position":[[33,4]]},"2444":{"position":[[153,4]]},"2790":{"position":[[920,4]]},"2796":{"position":[[454,4]]},"2829":{"position":[[242,4]]},"2981":{"position":[[55,4],[132,4],[209,4],[379,4]]},"2991":{"position":[[314,4],[418,4],[467,4]]},"3009":{"position":[[52,4],[170,4],[265,4]]},"3023":{"position":[[183,4],[255,4],[287,4],[416,4],[478,4]]},"3039":{"position":[[48,4],[133,4],[200,4],[269,4]]},"3041":{"position":[[63,4],[172,4],[263,4],[357,4]]},"3047":{"position":[[196,4]]},"3063":{"position":[[159,4],[201,4],[733,4],[940,4],[996,4],[1397,4],[1546,4]]},"3287":{"position":[[721,4],[1152,4]]},"3434":{"position":[[358,4]]},"3446":{"position":[[293,4],[500,4]]},"3452":{"position":[[731,4]]},"3458":{"position":[[403,4],[794,4]]},"3466":{"position":[[1049,4]]},"3664":{"position":[[261,4]]},"3698":{"position":[[296,4]]},"3706":{"position":[[151,4],[193,4],[725,4],[932,4],[988,4],[1408,4],[1557,4]]},"3708":{"position":[[307,4],[3462,4]]},"3777":{"position":[[229,4],[286,4]]},"3783":{"position":[[1802,4]]},"3798":{"position":[[620,4],[648,4]]},"3806":{"position":[[1377,4],[2989,4]]},"3808":{"position":[[3212,4],[3250,4]]},"3916":{"position":[[3727,4]]},"3956":{"position":[[2794,4]]}}}],["boolean",{"_index":3449,"t":{"734":{"position":[[1090,7],[1944,7],[2798,7],[3793,7],[4647,7],[5501,7]]},"3452":{"position":[[3953,7]]},"3832":{"position":[[2302,7],[2555,7],[4063,7],[4316,7]]},"3916":{"position":[[6949,7]]}}}],["bootstrap",{"_index":2063,"t":{"310":{"position":[[1098,9]]}}}],["bootstrapserv",{"_index":5623,"t":{"1803":{"position":[[5249,16],[5413,16]]}}}],["both",{"_index":7144,"t":{"2856":{"position":[[702,4]]}}}],["boundari",{"_index":9464,"t":{"3930":{"position":[[1291,8]]}}}],["boundedchannel",{"_index":6114,"t":{"2311":{"position":[[239,14],[362,14]]},"2313":{"position":[[695,14],[804,14]]},"2315":{"position":[[118,14]]}}}],["boundedchannelfullmod",{"_index":5557,"t":{"1801":{"position":[[1198,22]]},"1803":{"position":[[3392,22]]}}}],["boundedchannelopt",{"_index":5555,"t":{"1801":{"position":[[1125,21],[1153,21],[1288,21]]},"1803":{"position":[[3319,21],[3347,21],[3482,21]]}}}],["bqrjsoft",{"_index":6872,"t":{"2749":{"position":[[32,8],[117,8],[638,8],[806,8]]},"3080":{"position":[[600,8],[685,8],[1206,8],[1374,8]]}}}],["br",{"_index":6623,"t":{"2559":{"position":[[1858,2]]}}}],["break",{"_index":2943,"t":{"560":{"position":[[527,5],[587,5],[651,5]]},"933":{"position":[[903,5],[1008,5]]},"2486":{"position":[[556,5],[641,5],[724,5],[809,5],[895,5],[981,5],[997,5]]},"2937":{"position":[[1374,5],[1479,5],[1520,5]]},"3708":{"position":[[2935,5],[3145,5],[3161,5]]},"3956":{"position":[[2279,5],[2485,5],[2501,5]]}}}],["browser",{"_index":2054,"t":{"310":{"position":[[805,7]]},"3702":{"position":[[1020,7]]}}}],["browsermodul",{"_index":2052,"t":{"310":{"position":[[765,13],[1022,13]]}}}],["bsondocu",{"_index":6741,"t":{"2607":{"position":[[100,12],[158,12],[226,12]]}}}],["bu",{"_index":5658,"t":{"1811":{"position":[[18,3]]}}}],["buffer",{"_index":5355,"t":{"1729":{"position":[[7,6],[100,6],[165,6],[184,6],[251,6]]}}}],["bug",{"_index":6848,"t":{"2731":{"position":[[77,3]]},"3352":{"position":[[87,3],[97,3],[692,3]]},"3908":{"position":[[87,3]]},"3942":{"position":[[431,3]]},"3944":{"position":[[331,3]]},"3946":{"position":[[147,3],[384,3]]},"3948":{"position":[[180,3]]},"3950":{"position":[[534,3]]},"3952":{"position":[[558,3],[594,3]]},"3958":{"position":[[100,3],[205,3]]},"3960":{"position":[[488,3],[579,3]]},"3962":{"position":[[1116,3],[1294,3],[1332,3]]},"3964":{"position":[[489,3]]},"3978":{"position":[[1124,3]]},"3986":{"position":[[450,3],[483,3],[535,3],[565,3],[602,3],[642,3],[689,3],[783,3]]},"3990":{"position":[[451,3],[498,3]]},"3992":{"position":[[1469,3],[1581,3],[1650,3],[1698,3],[1725,3],[1782,3],[1833,3],[1880,3],[1951,3],[1976,3],[2016,3],[2041,3],[2115,3],[2158,3],[2249,3],[2276,3],[2320,3],[2350,3],[2392,3],[2435,3],[2483,3]]},"3994":{"position":[[826,3],[902,3],[963,3],[995,3],[1033,3],[1064,3],[1095,3],[1131,3],[1166,3],[1283,3],[1313,3],[1350,3],[1392,3],[1429,3],[1472,3],[1495,3],[1523,3]]},"3996":{"position":[[518,3],[547,3],[588,3],[647,3],[706,3],[759,3],[792,3],[839,3],[871,3],[951,3],[974,3],[1020,3],[1061,3],[1103,3],[1143,3],[1185,3],[1228,3],[1261,3],[1462,3],[1482,3],[1510,3]]},"3998":{"position":[[556,3],[578,3],[601,3],[629,3],[651,3],[678,3],[709,3],[733,3]]},"4000":{"position":[[810,3],[842,3],[868,3],[896,3],[941,3],[975,3],[1014,3],[1105,3],[1135,3],[1172,3]]},"4002":{"position":[[278,3],[366,3]]},"4004":{"position":[[341,3],[368,3],[406,3],[447,3]]},"4006":{"position":[[223,3],[262,3],[291,3],[310,3],[327,3],[349,3],[380,3],[437,3],[458,3],[481,3],[506,3],[564,3],[620,3]]}}}],["bugc7a4a5",{"_index":9621,"t":{"3948":{"position":[[397,10]]}}}],["bugfix",{"_index":8540,"t":{"3702":{"position":[[1812,8]]}}}],["build",{"_index":50,"t":{"3":{"position":[[404,5],[424,5],[911,5]]},"202":{"position":[[284,5]]},"455":{"position":[[356,5],[920,5]]},"461":{"position":[[1070,5],[1374,5]]},"696":{"position":[[632,5],[649,5]]},"713":{"position":[[103,5],[120,5]]},"734":{"position":[[117,5],[134,5]]},"1377":{"position":[[360,5]]},"1379":{"position":[[144,5],[564,5]]},"1483":{"position":[[1161,5]]},"1488":{"position":[[914,5],[1278,5],[1609,5]]},"1495":{"position":[[858,5],[1151,5]]},"1497":{"position":[[8,5],[200,5]]},"1499":{"position":[[667,5]]},"1667":{"position":[[416,5]]},"1755":{"position":[[811,5]]},"1803":{"position":[[1016,5],[3972,5]]},"1977":{"position":[[184,5]]},"1991":{"position":[[124,5]]},"2014":{"position":[[124,5]]},"2255":{"position":[[374,5]]},"2269":{"position":[[269,5]]},"2555":{"position":[[11,5]]},"2674":{"position":[[77,5]]},"2776":{"position":[[257,5],[604,5]]},"2813":{"position":[[922,5]]},"2819":{"position":[[280,5]]},"2821":{"position":[[311,5]]},"2836":{"position":[[370,5],[1583,5]]},"2862":{"position":[[303,5]]},"3075":{"position":[[181,5]]},"3166":{"position":[[99,5]]},"3194":{"position":[[526,5]]},"3399":{"position":[[532,5]]},"3932":{"position":[[2601,5]]}}}],["build_numb",{"_index":4463,"t":{"1488":{"position":[[914,12]]},"1495":{"position":[[858,12],[1151,12]]},"1497":{"position":[[200,12]]}}}],["buildchang",{"_index":7459,"t":{"3126":{"position":[[403,11],[461,11],[488,11]]},"3964":{"position":[[332,11]]}}}],["builder",{"_index":1519,"t":{"204":{"position":[[152,7]]},"216":{"position":[[162,7],[554,7]]},"338":{"position":[[60,7]]},"348":{"position":[[392,7]]},"350":{"position":[[453,7],[662,7]]},"411":{"position":[[63,7]]},"455":{"position":[[727,7],[772,7],[884,7],[912,7]]},"461":{"position":[[344,7],[470,7],[639,7],[693,7],[819,7],[1244,7]]},"526":{"position":[[167,7],[181,7],[409,7],[423,7]]},"696":{"position":[[1311,8],[2492,8],[3414,8],[4096,8]]},"844":{"position":[[185,8]]},"846":{"position":[[275,8]]},"877":{"position":[[126,8]]},"889":{"position":[[113,8]]},"919":{"position":[[107,7]]},"1667":{"position":[[408,7]]},"1755":{"position":[[803,7]]},"1779":{"position":[[113,8]]},"1781":{"position":[[113,8]]},"1795":{"position":[[2578,7],[2608,7],[2681,7],[2746,7],[2814,7],[2948,7]]},"1799":{"position":[[764,7],[789,7],[1015,7],[1109,7]]},"1803":{"position":[[572,7],[944,7],[1008,7]]},"1805":{"position":[[507,7],[532,7]]},"1807":{"position":[[836,7],[862,7]]},"1809":{"position":[[467,7],[491,7]]},"1813":{"position":[[21,7],[55,7]]},"1827":{"position":[[0,7]]},"1979":{"position":[[27,7]]},"1991":{"position":[[4,7],[59,7],[116,7]]},"1995":{"position":[[47,7],[83,7],[138,7],[185,7]]},"2014":{"position":[[4,7],[59,7],[116,7]]},"2018":{"position":[[47,7],[83,7],[138,7],[185,7]]},"2171":{"position":[[109,7]]},"2255":{"position":[[294,7],[366,7]]},"2276":{"position":[[62,7]]},"2579":{"position":[[769,7],[787,7]]},"2581":{"position":[[1228,7],[1268,7]]},"2674":{"position":[[4,7],[69,7],[202,7],[283,7],[294,7]]},"2711":{"position":[[82,7]]},"2776":{"position":[[484,7],[539,7],[596,7]]},"2862":{"position":[[239,7],[295,7]]},"2875":{"position":[[304,7],[317,7],[377,7]]},"2879":{"position":[[164,7],[177,7],[566,7]]},"2881":{"position":[[510,7]]},"2883":{"position":[[62,7],[75,7]]},"2889":{"position":[[219,7]]},"2897":{"position":[[405,7],[416,7],[532,7],[543,7]]},"2905":{"position":[[150,7]]},"2935":{"position":[[172,8]]},"2937":{"position":[[250,8]]},"3075":{"position":[[65,7],[120,7],[173,7]]},"3144":{"position":[[95,7]]},"3158":{"position":[[453,7],[547,7]]},"3189":{"position":[[293,7]]},"3373":{"position":[[168,7]]},"3399":{"position":[[135,7],[401,7],[451,7],[524,7],[729,7],[782,7],[827,7],[840,7],[882,7]]},"3424":{"position":[[142,7]]},"3430":{"position":[[808,7],[854,7],[1214,7],[1260,7],[2100,7],[2146,7],[2346,7],[2392,7]]},"3438":{"position":[[34,7],[76,7],[89,7],[124,7]]},"3630":{"position":[[116,7]]},"3744":{"position":[[150,7],[163,7],[273,7],[336,7],[398,7]]},"3746":{"position":[[118,7],[131,7],[162,7],[264,7],[295,7]]},"3819":{"position":[[1058,7]]},"3828":{"position":[[895,7]]},"3918":{"position":[[3061,7]]},"3920":{"position":[[935,7]]},"3932":{"position":[[2477,7],[2549,7],[2593,7]]}}}],["builderact",{"_index":8625,"t":{"3744":{"position":[[135,13]]},"3746":{"position":[[103,13]]},"3752":{"position":[[195,13],[321,13],[434,13],[571,13],[721,13],[853,13],[1030,13],[1173,13]]}}}],["buildtenantqueryfilt",{"_index":7275,"t":{"2935":{"position":[[722,22]]},"2937":{"position":[[819,22]]},"3962":{"position":[[859,22]]}}}],["bulk",{"_index":3565,"t":{"773":{"position":[[192,4]]}}}],["bulkcopi",{"_index":7719,"t":{"3236":{"position":[[76,8],[432,8],[525,8],[593,8]]}}}],["bulkdelet",{"_index":3528,"t":{"767":{"position":[[233,10]]}}}],["bulkdeleteasync",{"_index":3529,"t":{"767":{"position":[[278,15]]}}}],["bulkextens",{"_index":3522,"t":{"765":{"position":[[19,14]]},"775":{"position":[[42,14],[70,14]]}}}],["bulkinsert",{"_index":3523,"t":{"767":{"position":[[27,10]]}}}],["bulkinsertasync",{"_index":3525,"t":{"767":{"position":[[72,15]]}}}],["bulkinsertorupd",{"_index":3530,"t":{"767":{"position":[[339,18]]}}}],["bulkinsertorupdateasync",{"_index":3531,"t":{"767":{"position":[[392,23]]}}}],["bulkinsertorupdateordelet",{"_index":3532,"t":{"767":{"position":[[464,26]]}}}],["bulkinsertorupdateordeleteasync",{"_index":3533,"t":{"767":{"position":[[525,31]]}}}],["bulkord",{"_index":4487,"t":{"1495":{"position":[[434,9]]}}}],["bulkread",{"_index":3534,"t":{"767":{"position":[[603,8]]}}}],["bulkreadasync",{"_index":3535,"t":{"767":{"position":[[646,13]]}}}],["bulkupd",{"_index":3526,"t":{"767":{"position":[[130,10]]},"3236":{"position":[[173,10],[265,10],[446,10]]}}}],["bulkupdateasync",{"_index":3527,"t":{"767":{"position":[[175,15]]}}}],["bundl",{"_index":10392,"t":{"3996":{"position":[[1121,6]]}}}],["businessservic",{"_index":4248,"t":{"1408":{"position":[[24,15],[236,15],[348,15],[770,15],[828,15],[848,15],[866,15],[944,15],[1134,15],[1249,15],[1283,15]]},"1410":{"position":[[27,15],[245,15],[363,15],[790,15],[853,15],[873,15],[891,15],[969,15]]},"1412":{"position":[[304,15],[487,15],[584,15],[1296,15],[1529,15],[2065,15],[2212,15],[2244,15],[2429,15],[2674,15],[2849,15]]}}}],["busname1",{"_index":4272,"t":{"1412":{"position":[[2649,8],[2881,8]]}}}],["busname2",{"_index":4273,"t":{"1412":{"position":[[2752,8],[2960,8]]}}}],["button",{"_index":8516,"t":{"3694":{"position":[[149,6],[162,6]]},"3938":{"position":[[1313,6],[1326,6]]}}}],["bv1ew4y1c71d",{"_index":1964,"t":{"298":{"position":[[36,12]]},"314":{"position":[[224,12]]}}}],["bv1rt4y1w7oj",{"_index":3305,"t":{"675":{"position":[[36,12]]}}}],["bv1rv4y1p7zb",{"_index":7931,"t":{"3335":{"position":[[36,12]]}}}],["byte",{"_index":1336,"t":{"188":{"position":[[266,4],[404,4],[466,4],[530,4]]},"243":{"position":[[70,4],[116,4]]},"253":{"position":[[607,4]]},"1729":{"position":[[0,4],[113,4]]},"1739":{"position":[[246,4],[342,4]]},"1741":{"position":[[1162,4],[1173,5],[1249,5],[1527,5]]},"1743":{"position":[[14,4],[193,5],[205,4],[235,5],[270,5],[430,5],[465,5]]},"1745":{"position":[[33,4],[87,4],[231,4]]},"2848":{"position":[[964,4]]},"3456":{"position":[[194,5],[242,4],[314,5],[465,4],[519,4]]},"3520":{"position":[[106,4]]},"3522":{"position":[[154,5],[298,5],[442,5],[462,5],[1053,5],[1234,5],[1392,5],[1566,5],[1589,5]]},"3563":{"position":[[268,5],[367,4],[374,5],[472,5],[571,4],[578,5],[606,4]]},"3916":{"position":[[8385,5],[8468,5],[8551,5],[8559,5]]},"3918":{"position":[[2012,5],[2170,5],[2344,5],[2367,5]]},"3924":{"position":[[1275,4]]},"3940":{"position":[[701,4]]},"3942":{"position":[[527,4]]},"3944":{"position":[[100,4]]}}}],["bytearr",{"_index":7120,"t":{"2848":{"position":[[916,7]]}}}],["bytes2",{"_index":8348,"t":{"3563":{"position":[[613,6]]}}}],["bz",{"_index":6513,"t":{"2559":{"position":[[795,2]]}}}],["c",{"_index":81,"t":{"5":{"position":[[12,1]]},"7":{"position":[[8,1]]},"280":{"position":[[225,1]]},"399":{"position":[[485,1]]},"540":{"position":[[14,1]]},"734":{"position":[[7265,1],[7372,1]]},"866":{"position":[[398,1],[432,1]]},"881":{"position":[[325,1],[330,1],[349,1],[354,1]]},"1379":{"position":[[459,1]]},"1483":{"position":[[434,1]]},"1488":{"position":[[862,1]]},"1495":{"position":[[806,1],[1173,1]]},"1499":{"position":[[306,1]]},"1516":{"position":[[207,1]]},"1518":{"position":[[37,1]]},"1522":{"position":[[58,1]]},"1526":{"position":[[63,1]]},"1566":{"position":[[845,1],[850,1],[869,1],[874,1]]},"1724":{"position":[[394,1]]},"1726":{"position":[[96,1]]},"1847":{"position":[[54,1]]},"2090":{"position":[[48,1]]},"2094":{"position":[[68,1]]},"2290":{"position":[[8,1]]},"2298":{"position":[[15,1],[42,1]]},"2309":{"position":[[25,1],[103,1]]},"2343":{"position":[[4,1]]},"2418":{"position":[[394,1],[497,1]]},"2472":{"position":[[82,1],[208,1],[239,1],[344,1]]},"2510":{"position":[[28,1]]},"2512":{"position":[[27,1]]},"2599":{"position":[[27,1]]},"2684":{"position":[[419,1]]},"2749":{"position":[[23,1],[108,1],[797,1]]},"2836":{"position":[[687,1],[700,1],[778,1],[918,1]]},"3080":{"position":[[591,1],[676,1],[1365,1]]},"3209":{"position":[[16,1]]},"3250":{"position":[[16,1]]},"3282":{"position":[[136,1]]},"3350":{"position":[[86,1]]},"3430":{"position":[[306,1],[446,1],[2920,1],[4227,1]]},"3432":{"position":[[2875,1],[3089,1],[5444,1]]},"3498":{"position":[[95,1],[102,1],[154,1],[227,1]]},"3543":{"position":[[95,1],[102,1],[154,1],[227,1]]},"3575":{"position":[[93,1],[155,1],[162,1],[214,1],[287,1]]},"3577":{"position":[[98,1],[105,1],[189,1],[196,1]]},"3579":{"position":[[340,1],[443,1]]},"3587":{"position":[[306,1]]},"3589":{"position":[[291,1]]},"3591":{"position":[[81,1]]},"3601":{"position":[[521,1]]},"3620":{"position":[[2,1]]},"3702":{"position":[[210,1],[289,1],[2213,1]]},"3832":{"position":[[2018,1],[2959,1],[3779,1],[4720,1]]},"3914":{"position":[[2233,1],[2240,1],[2324,1],[2331,1]]},"3934":{"position":[[2877,1]]},"3942":{"position":[[196,1]]},"3974":{"position":[[21,1]]},"4004":{"position":[[529,1]]}}}],["c014330",{"_index":9463,"t":{"3930":{"position":[[1266,7]]}}}],["c0dc36c",{"_index":9070,"t":{"3912":{"position":[[756,7]]}}}],["c1",{"_index":1935,"t":{"284":{"position":[[276,2]]}}}],["c2",{"_index":1936,"t":{"284":{"position":[[337,2]]}}}],["c3",{"_index":1937,"t":{"284":{"position":[[372,2]]}}}],["c456ecb",{"_index":9558,"t":{"3938":{"position":[[393,7],[609,7],[665,7]]}}}],["c482548",{"_index":9643,"t":{"3950":{"position":[[662,7]]}}}],["c5798cb6",{"_index":7268,"t":{"2929":{"position":[[612,8]]},"2945":{"position":[[669,8]]},"2959":{"position":[[638,8]]}}}],["c9a5",{"_index":4401,"t":{"1483":{"position":[[310,4]]}}}],["c9b0ef",{"_index":9543,"t":{"3936":{"position":[[688,6]]}}}],["c__displayclass0_0",{"_index":3476,"t":{"734":{"position":[[7265,18]]},"3832":{"position":[[2018,18],[3779,18]]}}}],["c__displayclass16_2",{"_index":8969,"t":{"3832":{"position":[[2959,19],[4720,19]]}}}],["c__displayclass3_0",{"_index":3481,"t":{"734":{"position":[[7372,18]]}}}],["ca",{"_index":6480,"t":{"2559":{"position":[[507,2],[516,2],[809,2],[1097,2]]}}}],["cach",{"_index":1668,"t":{"231":{"position":[[72,7],[224,5]]},"237":{"position":[[199,5],[259,5],[449,5],[698,5],[757,5],[807,5],[902,5],[1219,5]]},"241":{"position":[[47,7],[109,7],[188,7]]},"247":{"position":[[131,5],[176,5],[292,5]]},"253":{"position":[[134,5],[177,5],[187,5],[195,5],[296,6],[363,5],[794,5]]},"516":{"position":[[685,6]]},"747":{"position":[[95,7]]},"2512":{"position":[[126,5]]},"2843":{"position":[[204,5]]}}}],["cache_tim",{"_index":1673,"t":{"231":{"position":[[224,10]]}}}],["cachedtimeutc",{"_index":1843,"t":{"253":{"position":[[218,13],[279,13],[379,13],[432,13],[810,13]]}}}],["cacheentryopt",{"_index":1712,"t":{"235":{"position":[[72,17],[225,17]]}}}],["cachekey",{"_index":1722,"t":{"237":{"position":[[209,9],[277,9],[459,9],[719,9],[778,9],[825,9],[937,9],[1229,9]]}}}],["cachemanag",{"_index":10335,"t":{"3994":{"position":[[744,12]]}}}],["cachenam",{"_index":1836,"t":{"251":{"position":[[314,9]]}}}],["cacheservic",{"_index":1670,"t":{"231":{"position":[[146,13],[288,13]]}}}],["calcservic",{"_index":6031,"t":{"2182":{"position":[[188,11]]},"2184":{"position":[[193,11]]},"3379":{"position":[[138,11]]},"3381":{"position":[[122,11],[165,11],[181,11],[195,11],[258,11]]},"3389":{"position":[[1098,11],[1186,11],[1230,11],[1244,11],[1327,11]]},"3391":{"position":[[446,11],[581,11],[655,11],[669,11],[782,11]]},"3393":{"position":[[727,11],[919,11],[1033,11],[1047,11],[1200,11]]},"3924":{"position":[[3340,11],[3383,11],[3399,11],[3413,11],[3476,11]]}}}],["call",{"_index":7138,"t":{"2856":{"position":[[353,5],[707,5]]},"3420":{"position":[[262,6]]},"3422":{"position":[[256,6]]},"3436":{"position":[[321,6]]}}}],["callback",{"_index":5672,"t":{"1819":{"position":[[64,8]]}}}],["callbackasync",{"_index":5674,"t":{"1819":{"position":[[316,13]]}}}],["callcontext",{"_index":6134,"t":{"2319":{"position":[[22,11],[74,11],[119,11],[154,11],[198,11]]},"2856":{"position":[[1745,11],[1789,11],[1834,11],[1869,11],[1913,11]]},"3952":{"position":[[63,11]]}}}],["calledcontext",{"_index":2308,"t":{"367":{"position":[[44,13]]}}}],["caller",{"_index":7567,"t":{"3175":{"position":[[8,6]]}}}],["callsitechain",{"_index":3447,"t":{"734":{"position":[[1033,13],[1047,13],[1288,13],[1302,13],[1454,13],[1468,13],[1602,13],[1616,13],[1735,13],[1749,13],[1887,13],[1901,13],[2142,13],[2156,13],[2308,13],[2322,13],[2456,13],[2470,13],[2589,13],[2603,13],[2741,13],[2755,13],[2996,13],[3010,13],[3162,13],[3176,13],[3315,13],[3329,13],[3451,13],[3465,13],[3584,13],[3598,13],[3736,13],[3750,13],[3991,13],[4005,13],[4157,13],[4171,13],[4305,13],[4319,13],[4438,13],[4452,13],[4590,13],[4604,13],[4845,13],[4859,13],[5011,13],[5025,13],[5159,13],[5173,13],[5292,13],[5306,13],[5444,13],[5458,13],[5699,13],[5713,13],[5865,13],[5879,13],[6013,13],[6027,13],[6146,13],[6160,13]]}}}],["callsitefactori",{"_index":3444,"t":{"734":{"position":[[968,15],[1181,15],[1375,15],[1553,15],[1689,15],[1822,15],[2035,15],[2229,15],[2407,15],[2543,15],[2676,15],[2889,15],[3083,15],[3261,15],[3402,15],[3538,15],[3671,15],[3884,15],[4078,15],[4256,15],[4392,15],[4525,15],[4738,15],[4932,15],[5110,15],[5246,15],[5379,15],[5592,15],[5786,15],[5964,15],[6100,15]]}}}],["camelcas",{"_index":1954,"t":{"288":{"position":[[675,9]]},"1592":{"position":[[256,9]]},"1594":{"position":[[327,9]]},"3779":{"position":[[1257,9],[1882,9]]},"3785":{"position":[[390,9],[504,9]]},"3802":{"position":[[1875,9],[2659,9]]},"3812":{"position":[[668,9],[780,9]]},"3817":{"position":[[2471,9]]}}}],["camelcasepropertynamescontractresolv",{"_index":6249,"t":{"2377":{"position":[[129,38]]}}}],["camelcasesepar",{"_index":5195,"t":{"1661":{"position":[[300,18]]},"3023":{"position":[[301,18]]}}}],["canbescantyp",{"_index":10217,"t":{"3992":{"position":[[1178,14]]}}}],["cancel",{"_index":1717,"t":{"237":{"position":[[61,6],[961,6]]},"1803":{"position":[[1918,6]]},"1941":{"position":[[988,6]]},"1955":{"position":[[176,6]]},"2216":{"position":[[10,6]]},"2456":{"position":[[10,6]]},"3772":{"position":[[664,7]]},"3850":{"position":[[381,7]]},"3852":{"position":[[499,7]]},"3854":{"position":[[326,7]]},"3856":{"position":[[221,7]]},"3874":{"position":[[314,7]]},"3876":{"position":[[431,7]]},"3966":{"position":[[727,6]]}}}],["cancelinnonenexttim",{"_index":6337,"t":{"2438":{"position":[[306,20]]},"2440":{"position":[[340,20],[642,20]]},"3974":{"position":[[256,20]]}}}],["cancellationchangetoken",{"_index":1716,"t":{"237":{"position":[[26,23],[494,23]]}}}],["cancellationtoken",{"_index":2738,"t":{"492":{"position":[[344,17]]},"530":{"position":[[405,17]]},"572":{"position":[[879,17],[897,17],[1173,17]]},"927":{"position":[[624,17],[642,17],[739,17],[1036,17],[1054,17],[1142,17],[2239,17],[2257,17],[2345,17]]},"929":{"position":[[848,17],[866,17],[948,17],[1377,17],[1395,17],[1487,17],[1849,17],[1867,17],[1958,17],[2596,17],[2614,17],[2708,17],[3052,17],[3070,17],[3163,17],[3586,17],[3604,17],[3696,17],[4052,17],[4070,17],[4161,17]]},"931":{"position":[[537,17],[555,17],[636,17],[923,17],[941,17],[1021,17],[1261,17],[1279,17],[1356,17]]},"1039":{"position":[[405,17]]},"1797":{"position":[[715,17],[733,17]]},"1799":{"position":[[433,17],[451,17],[508,17],[594,17],[612,17],[675,17]]},"1801":{"position":[[2125,17],[2270,17],[2288,17],[2716,17],[2803,17],[2917,17],[2935,17],[3017,17]]},"1803":{"position":[[4087,17],[4232,17],[4250,17],[4599,17],[4688,17],[4775,17],[4889,17],[4907,17],[4989,17]]},"1805":{"position":[[421,17]]},"2482":{"position":[[244,17]]},"2484":{"position":[[344,17]]},"2805":{"position":[[334,17]]},"2813":{"position":[[478,17]]},"2817":{"position":[[622,17],[640,17],[684,17],[757,17],[994,17],[1012,17],[1055,17]]},"2825":{"position":[[244,17]]},"2827":{"position":[[390,17]]},"2829":{"position":[[438,17]]},"2831":{"position":[[386,17]]},"3762":{"position":[[203,17]]},"3768":{"position":[[378,17]]},"3770":{"position":[[250,17],[1483,17],[2934,17],[4799,17]]},"3774":{"position":[[535,17]]},"3783":{"position":[[257,17]]},"3789":{"position":[[88,17]]},"3791":{"position":[[375,17],[1018,17],[1822,17]]},"3795":{"position":[[247,17]]},"3806":{"position":[[3461,17]]},"3808":{"position":[[895,17],[2116,17]]},"3828":{"position":[[317,17],[523,17]]},"3832":{"position":[[211,17],[582,17],[1878,17],[2800,17],[3639,17],[4561,17]]}}}],["cancellationtokensourc",{"_index":1718,"t":{"237":{"position":[[74,23],[171,23],[912,23],[1272,23]]},"1803":{"position":[[362,23],[1346,23]]},"3795":{"position":[[304,23],[330,23],[438,23]]}}}],["cancelsleep",{"_index":9015,"t":{"3856":{"position":[[87,11]]}}}],["cap",{"_index":5712,"t":{"1837":{"position":[[140,3]]},"1839":{"position":[[115,3]]}}}],["capac",{"_index":5552,"t":{"1801":{"position":[[962,8],[1087,8],[1175,8]]},"1803":{"position":[[3132,8],[3281,8],[3369,8]]}}}],["capit",{"_index":3157,"t":{"606":{"position":[[337,7]]},"617":{"position":[[958,7],[985,7]]}}}],["case",{"_index":2942,"t":{"560":{"position":[[474,4],[534,4],[594,4]]},"933":{"position":[[808,4],[920,4]]},"981":{"position":[[6,4],[56,4]]},"2486":{"position":[[490,4],[575,4],[658,4],[743,4],[828,4],[914,4]]},"2937":{"position":[[1279,4],[1391,4],[1494,4]]},"3708":{"position":[[2740,4],[2956,4]]},"3956":{"position":[[2088,4],[2300,4]]}}}],["cast",{"_index":7641,"t":{"3222":{"position":[[354,4],[417,4]]}}}],["catalog",{"_index":1806,"t":{"247":{"position":[[240,7],[349,7]]}}}],["catch",{"_index":2105,"t":{"319":{"position":[[242,5]]},"1803":{"position":[[1600,5]]},"1834":{"position":[[25,5]]},"1837":{"position":[[52,5]]},"1839":{"position":[[48,5]]},"3194":{"position":[[798,5]]},"3291":{"position":[[412,5],[1184,5],[2134,5]]},"3434":{"position":[[397,5]]},"3452":{"position":[[1026,5]]},"3795":{"position":[[472,5]]},"3916":{"position":[[4022,5]]}}}],["catcher1994",{"_index":7929,"t":{"3331":{"position":[[114,11]]}}}],["categori",{"_index":8089,"t":{"3430":{"position":[[629,8],[725,8],[891,8],[987,8],[1297,8],[1393,8]]},"3575":{"position":[[601,10]]}}}],["categorynam",{"_index":9176,"t":{"3916":{"position":[[1941,12]]}}}],["catelf",{"_index":6975,"t":{"2768":{"position":[[1155,6]]}}}],["cb",{"_index":6516,"t":{"2559":{"position":[[823,2]]}}}],["ccdfz",{"_index":4609,"t":{"1511":{"position":[[540,5],[624,5]]}}}],["cd",{"_index":3422,"t":{"724":{"position":[[73,2]]},"1483":{"position":[[1121,2]]},"1499":{"position":[[643,2]]},"2866":{"position":[[19,2]]},"3918":{"position":[[1144,2]]}}}],["cdb3f57",{"_index":9487,"t":{"3932":{"position":[[1330,7]]}}}],["cdddf8d",{"_index":9058,"t":{"3910":{"position":[[2373,7]]}}}],["center",{"_index":6401,"t":{"2532":{"position":[[50,6]]}}}],["cento",{"_index":9488,"t":{"3932":{"position":[[1366,6]]}}}],["certif",{"_index":8386,"t":{"3589":{"position":[[893,11]]}}}],["cfb",{"_index":2618,"t":{"461":{"position":[[405,3],[415,3],[754,3],[764,3],[1305,3],[1315,3],[1370,3]]}}}],["ch",{"_index":420,"t":{"51":{"position":[[192,2]]},"62":{"position":[[192,2]]},"75":{"position":[[192,2]]},"1801":{"position":[[1600,2]]},"2559":{"position":[[586,3],[1152,2],[1281,2],[1473,2]]}}}],["chain",{"_index":8387,"t":{"3589":{"position":[[906,5]]}}}],["chang",{"_index":3267,"t":{"655":{"position":[[95,7],[244,7]]},"905":{"position":[[63,6],[167,6],[273,6]]},"907":{"position":[[57,6],[155,6],[255,6]]},"909":{"position":[[60,6],[153,6],[248,6]]},"1029":{"position":[[38,6]]},"1037":{"position":[[66,6],[164,6],[264,6],[499,6]]},"1204":{"position":[[39,6],[134,6],[203,6]]},"1206":{"position":[[60,6]]},"1208":{"position":[[17,6]]},"1210":{"position":[[69,6]]},"1212":{"position":[[32,6],[110,6],[183,6]]},"1277":{"position":[[65,6],[129,6],[247,6]]},"1596":{"position":[[38,6]]},"3126":{"position":[[177,6]]},"3224":{"position":[[1834,6]]},"3994":{"position":[[296,6]]}}}],["changedatabas",{"_index":7453,"t":{"3126":{"position":[[121,14]]}}}],["changeentityst",{"_index":3253,"t":{"645":{"position":[[176,17]]},"779":{"position":[[90,17]]},"1325":{"position":[[90,17]]}}}],["changepassword",{"_index":5100,"t":{"1594":{"position":[[234,14],[275,14]]}}}],["changepasswordv1",{"_index":5102,"t":{"1594":{"position":[[251,16]]}}}],["changepasswordv1_1_0",{"_index":5101,"t":{"1594":{"position":[[251,20]]}}}],["changepasswordv2",{"_index":5099,"t":{"1594":{"position":[[214,16]]}}}],["changeprofil",{"_index":5113,"t":{"1605":{"position":[[185,13]]}}}],["changerepositori",{"_index":7678,"t":{"3224":{"position":[[1730,16]]}}}],["changetoken",{"_index":2593,"t":{"453":{"position":[[162,11]]},"1733":{"position":[[0,11]]},"2731":{"position":[[16,11]]}}}],["changetrack",{"_index":2967,"t":{"570":{"position":[[797,13],[887,13]]},"933":{"position":[[635,13]]},"2937":{"position":[[1073,13]]}}}],["changeusernam",{"_index":5183,"t":{"1647":{"position":[[308,14]]}}}],["channel",{"_index":5526,"t":{"1799":{"position":[[12,7]]},"1801":{"position":[[369,8],[575,7],[598,7],[1242,7],[1252,7],[1570,7],[1856,7],[2677,7],[2992,7]]},"1803":{"position":[[2457,8],[2665,7],[2688,7],[3436,7],[3446,7],[3665,7],[3827,7],[4649,7],[4964,7]]},"1805":{"position":[[14,7]]},"2307":{"position":[[64,7]]},"2309":{"position":[[32,7],[83,7]]},"2311":{"position":[[0,7],[33,7],[73,7],[126,7],[289,7],[329,7],[385,7]]},"2317":{"position":[[19,7]]},"3922":{"position":[[2011,7],[2258,7]]},"3950":{"position":[[597,7]]}}}],["channelcapac",{"_index":5681,"t":{"1821":{"position":[[61,15]]}}}],["channelcontext",{"_index":6109,"t":{"2311":{"position":[[178,14]]},"2313":{"position":[[529,14],[654,14],[763,14]]},"2315":{"position":[[77,14]]}}}],["channeleventpublish",{"_index":5637,"t":{"1805":{"position":[[29,21]]}}}],["channeleventsourc",{"_index":5511,"t":{"1795":{"position":[[2279,18]]},"1801":{"position":[[1802,18],[2413,18],[2471,18]]},"1803":{"position":[[3774,18],[4368,18],[4426,18]]},"3936":{"position":[[1382,18]]}}}],["channelhandl",{"_index":6122,"t":{"2313":{"position":[[3,14],[219,14],[466,14]]}}}],["chap12",{"_index":4945,"t":{"1530":{"position":[[183,6]]}}}],["char",{"_index":7068,"t":{"2796":{"position":[[721,4]]}}}],["charact",{"_index":6181,"t":{"2333":{"position":[[339,10],[466,10]]}}}],["charset",{"_index":2804,"t":{"520":{"position":[[140,7]]},"901":{"position":[[140,7]]},"1315":{"position":[[140,7]]},"3918":{"position":[[3300,7]]},"3938":{"position":[[645,7]]}}}],["chatcontrol",{"_index":7558,"t":{"3168":{"position":[[115,14],[224,14]]}}}],["chathub",{"_index":7541,"t":{"3154":{"position":[[194,7]]},"3156":{"position":[[258,7],[282,7],[597,7],[613,7]]},"3158":{"position":[[210,7],[234,7],[574,7],[590,7]]},"3164":{"position":[[73,7]]},"3166":{"position":[[169,7]]},"3168":{"position":[[164,7],[251,7]]},"3194":{"position":[[517,7]]}}}],["chathubcontext",{"_index":7561,"t":{"3168":{"position":[[273,14],[315,14]]}}}],["cheap",{"_index":4875,"t":{"1511":{"position":[[3834,5]]}}}],["check",{"_index":5030,"t":{"1557":{"position":[[100,5],[353,5]]},"3522":{"position":[[1001,5]]}}}],["checkapidescriptionincurrentgroup",{"_index":8505,"t":{"3680":{"position":[[278,33]]},"3966":{"position":[[333,33]]}}}],["checkauthorzi",{"_index":1071,"t":{"133":{"position":[[737,14],[890,14]]}}}],["checkconsentneed",{"_index":7127,"t":{"2848":{"position":[[1698,18]]}}}],["checkissplitcamelcas",{"_index":10105,"t":{"3986":{"position":[[667,21]]}}}],["checkmatch",{"_index":5032,"t":{"1557":{"position":[[268,10],[502,10]]}}}],["checkmethodparametervalid",{"_index":3064,"t":{"587":{"position":[[397,25]]}}}],["checknomatch",{"_index":5034,"t":{"1557":{"position":[[594,14]]}}}],["checkout",{"_index":4179,"t":{"1379":{"position":[[330,8]]}}}],["checkurl",{"_index":7332,"t":{"3063":{"position":[[1198,8]]},"3686":{"position":[[209,8],[227,8],[437,8],[901,8]]},"3706":{"position":[[1190,8]]},"3940":{"position":[[985,8]]}}}],["chenyuan",{"_index":4869,"t":{"1511":{"position":[[3761,8]]}}}],["child",{"_index":1731,"t":{"237":{"position":[[469,5],[788,5]]}}}],["childcachedtim",{"_index":1737,"t":{"237":{"position":[[738,15]]}}}],["children",{"_index":831,"t":{"114":{"position":[[1407,9]]},"851":{"position":[[20,8],[660,8],[670,9],[1251,8],[1316,8]]},"855":{"position":[[46,9]]},"877":{"position":[[694,9],[1017,9],[2214,9],[2302,9]]},"3446":{"position":[[1882,9]]},"3452":{"position":[[2959,9]]},"3916":{"position":[[5955,9]]},"3928":{"position":[[2444,9]]}}}],["china",{"_index":2385,"t":{"399":{"position":[[37,5],[131,5],[282,5],[383,5]]},"881":{"position":[[89,5]]}}}],["chinadot",{"_index":2444,"t":{"406":{"position":[[232,8]]}}}],["chines",{"_index":3152,"t":{"606":{"position":[[249,7],[568,7]]},"608":{"position":[[382,7]]},"617":{"position":[[714,7],[741,7],[889,7]]}}}],["chinesenam",{"_index":3153,"t":{"606":{"position":[[301,11]]},"617":{"position":[[858,11]]}}}],["chrome",{"_index":788,"t":{"114":{"position":[[496,6]]},"3446":{"position":[[971,6]]},"3452":{"position":[[1628,6]]},"3916":{"position":[[4624,6]]},"3928":{"position":[[1533,6]]}}}],["cht",{"_index":6494,"t":{"2559":{"position":[[626,3]]}}}],["ci",{"_index":2363,"t":{"394":{"position":[[28,2]]}}}],["cid",{"_index":4469,"t":{"1488":{"position":[[1033,3],[1101,3],[1112,3],[1228,3],[1244,3]]},"1499":{"position":[[425,3],[493,3],[504,3],[620,3],[636,3]]}}}],["circl",{"_index":2932,"t":{"560":{"position":[[173,6],[489,6]]}}}],["circlepars",{"_index":2930,"t":{"560":{"position":[[123,12],[505,12]]}}}],["citi",{"_index":1917,"t":{"274":{"position":[[165,4]]},"284":{"position":[[230,4],[241,4],[286,4],[303,4],[343,4],[353,4],[367,4],[382,4]]},"286":{"position":[[221,4]]},"441":{"position":[[198,4]]},"696":{"position":[[984,4],[1028,4],[1432,4],[1467,4],[1482,4],[1519,4],[1762,4],[1815,4],[1889,4],[2000,4]]},"877":{"position":[[0,4],[257,4],[291,4],[314,4],[367,4],[599,4],[688,4],[920,4],[1300,4],[1376,4],[1388,4],[1484,4],[1592,4],[1700,4],[1808,4],[2246,6],[2363,6]]},"881":{"position":[[52,4]]},"883":{"position":[[291,4]]}}}],["citydto",{"_index":3678,"t":{"877":{"position":[[5,7],[2007,7],[2205,7],[2381,7]]}}}],["cl",{"_index":6645,"t":{"2559":{"position":[[2139,2]]}}}],["claim",{"_index":709,"t":{"112":{"position":[[257,6],[1109,6]]},"150":{"position":[[83,6]]},"1925":{"position":[[132,6],[971,6]]},"2033":{"position":[[111,6]]},"3189":{"position":[[519,6]]}}}],["class",{"_index":30,"t":{"3":{"position":[[258,5],[743,5]]},"11":{"position":[[977,5]]},"28":{"position":[[73,5]]},"112":{"position":[[330,5]]},"127":{"position":[[545,5]]},"129":{"position":[[519,5]]},"133":{"position":[[332,5]]},"135":{"position":[[260,5]]},"146":{"position":[[311,5]]},"188":{"position":[[200,5],[578,5]]},"202":{"position":[[203,5]]},"204":{"position":[[281,5]]},"210":{"position":[[328,5]]},"212":{"position":[[231,5],[519,5]]},"216":{"position":[[291,5],[725,5]]},"231":{"position":[[140,5]]},"253":{"position":[[67,5]]},"310":{"position":[[382,5],[1135,5]]},"321":{"position":[[252,5]]},"327":{"position":[[179,5]]},"338":{"position":[[230,5]]},"340":{"position":[[206,5],[595,5],[823,5],[1057,5],[1401,5],[1700,5]]},"353":{"position":[[196,5]]},"355":{"position":[[296,5],[377,5],[485,5]]},"369":{"position":[[530,5]]},"371":{"position":[[101,5],[310,5]]},"411":{"position":[[252,5]]},"435":{"position":[[218,5],[586,5]]},"455":{"position":[[275,5]]},"461":{"position":[[989,5]]},"492":{"position":[[58,5]]},"508":{"position":[[157,5]]},"510":{"position":[[157,5]]},"514":{"position":[[193,5]]},"516":{"position":[[185,5]]},"518":{"position":[[115,5]]},"524":{"position":[[272,5]]},"530":{"position":[[80,5]]},"534":{"position":[[363,5]]},"570":{"position":[[362,5]]},"572":{"position":[[286,5]]},"587":{"position":[[192,5],[1054,5],[1690,5]]},"595":{"position":[[145,5]]},"597":{"position":[[108,5],[390,5]]},"599":{"position":[[117,5]]},"602":{"position":[[102,5]]},"608":{"position":[[137,5]]},"617":{"position":[[1983,5],[2321,5]]},"625":{"position":[[234,5]]},"627":{"position":[[140,5]]},"639":{"position":[[7,5],[155,5]]},"653":{"position":[[392,5]]},"696":{"position":[[1426,5],[2607,5],[3529,5],[4211,5]]},"708":{"position":[[155,5]]},"734":{"position":[[7911,5]]},"745":{"position":[[157,5]]},"747":{"position":[[190,5]]},"749":{"position":[[154,5]]},"793":{"position":[[7,5]]},"822":{"position":[[141,5]]},"830":{"position":[[31,5]]},"832":{"position":[[196,5]]},"844":{"position":[[240,5]]},"846":{"position":[[419,5]]},"851":{"position":[[189,5],[842,5],[1245,5],[1754,5]]},"877":{"position":[[251,5],[2001,5]]},"889":{"position":[[202,5]]},"911":{"position":[[18,5],[93,5]]},"913":{"position":[[14,5]]},"927":{"position":[[185,5]]},"929":{"position":[[181,5]]},"931":{"position":[[146,5]]},"945":{"position":[[29,5],[207,5]]},"947":{"position":[[289,5],[783,5]]},"1037":{"position":[[557,5]]},"1039":{"position":[[80,5]]},"1041":{"position":[[289,5],[344,5],[574,5],[718,5],[773,5],[1300,5],[1429,5],[1554,5]]},"1054":{"position":[[198,5]]},"1056":{"position":[[216,5],[578,5]]},"1058":{"position":[[139,5]]},"1060":{"position":[[192,5]]},"1064":{"position":[[157,5]]},"1066":{"position":[[398,5],[759,5]]},"1109":{"position":[[175,5],[698,5]]},"1127":{"position":[[88,5]]},"1135":{"position":[[53,5]]},"1145":{"position":[[110,5]]},"1147":{"position":[[103,5]]},"1151":{"position":[[134,5]]},"1185":{"position":[[365,5]]},"1200":{"position":[[61,5]]},"1234":{"position":[[972,5]]},"1311":{"position":[[176,5]]},"1313":{"position":[[428,5],[818,5]]},"1317":{"position":[[193,5]]},"1353":{"position":[[359,5]]},"1364":{"position":[[62,5]]},"1368":{"position":[[233,5]]},"1392":{"position":[[248,5]]},"1394":{"position":[[199,5]]},"1396":{"position":[[110,5]]},"1408":{"position":[[230,5],[693,5]]},"1410":{"position":[[239,5],[708,5]]},"1412":{"position":[[481,5],[613,5],[922,5],[1989,5],[2668,5],[2771,5]]},"1414":{"position":[[192,5],[647,5]]},"1424":{"position":[[280,5],[595,5],[1899,5]]},"1426":{"position":[[147,5]]},"1440":{"position":[[340,7],[351,7],[578,7],[589,7],[751,7],[762,7],[857,7],[868,7]]},"1539":{"position":[[369,5]]},"1572":{"position":[[225,5],[420,5]]},"1582":{"position":[[219,5]]},"1584":{"position":[[198,5],[431,5]]},"1603":{"position":[[73,5]]},"1605":{"position":[[73,5]]},"1607":{"position":[[73,5]]},"1609":{"position":[[136,5],[482,5]]},"1611":{"position":[[274,5]]},"1613":{"position":[[105,5]]},"1615":{"position":[[105,5]]},"1617":{"position":[[198,5],[410,5],[693,5],[957,5]]},"1619":{"position":[[243,5]]},"1621":{"position":[[86,5],[193,5],[302,5],[488,5]]},"1643":{"position":[[154,5]]},"1645":{"position":[[147,5]]},"1647":{"position":[[195,5]]},"1649":{"position":[[106,5]]},"1651":{"position":[[116,5]]},"1653":{"position":[[151,5]]},"1655":{"position":[[164,5]]},"1657":{"position":[[285,5]]},"1659":{"position":[[133,5],[276,5],[530,5],[711,5],[968,5],[1152,5]]},"1663":{"position":[[350,5]]},"1665":{"position":[[87,5]]},"1703":{"position":[[101,5]]},"1711":{"position":[[116,5]]},"1724":{"position":[[85,5]]},"1767":{"position":[[62,5]]},"1769":{"position":[[62,5]]},"1771":{"position":[[62,5]]},"1773":{"position":[[62,5]]},"1775":{"position":[[301,5],[384,5],[474,5],[574,5],[619,5],[739,5],[791,5],[836,5],[976,5],[1028,5],[1080,5],[1125,5],[1285,5],[1337,5],[1389,5],[1441,5],[1486,5],[1666,5],[1718,5],[1770,5],[1822,5],[1874,5],[1919,5],[2119,5],[2171,5],[2223,5],[2275,5],[2327,5],[2379,5],[2424,5],[2644,5],[2696,5],[2748,5],[2800,5],[2852,5],[2904,5],[2956,5],[3001,5],[3241,5],[3293,5],[3345,5],[3397,5],[3449,5],[3501,5],[3553,5],[3605,5],[3650,5]]},"1779":{"position":[[168,5]]},"1781":{"position":[[168,5]]},"1795":{"position":[[62,5],[1964,5],[2880,5]]},"1797":{"position":[[87,5]]},"1799":{"position":[[172,5]]},"1801":{"position":[[446,5]]},"1803":{"position":[[276,5],[2540,5]]},"1805":{"position":[[92,5]]},"1807":{"position":[[117,5]]},"1809":{"position":[[115,5]]},"1811":{"position":[[117,5]]},"1815":{"position":[[98,5]]},"1819":{"position":[[106,5]]},"1823":{"position":[[77,5]]},"1843":{"position":[[145,5]]},"1845":{"position":[[113,5],[386,5]]},"1851":{"position":[[65,5]]},"1859":{"position":[[105,5]]},"1867":{"position":[[167,5],[488,5]]},"1869":{"position":[[448,5]]},"1873":{"position":[[209,5]]},"1875":{"position":[[105,5]]},"1883":{"position":[[238,5]]},"1909":{"position":[[78,5],[184,5],[345,5],[616,5],[881,5],[1018,5]]},"1913":{"position":[[288,5]]},"1915":{"position":[[111,5],[163,5]]},"1919":{"position":[[127,5]]},"1921":{"position":[[111,5],[163,5]]},"1925":{"position":[[182,5]]},"1927":{"position":[[82,5]]},"1929":{"position":[[111,5],[163,5]]},"1933":{"position":[[152,5]]},"1935":{"position":[[82,5]]},"1937":{"position":[[111,5],[163,5]]},"1941":{"position":[[158,5]]},"1943":{"position":[[82,5]]},"1945":{"position":[[111,5],[163,5]]},"1951":{"position":[[74,5]]},"1953":{"position":[[82,5]]},"1961":{"position":[[175,5],[436,5]]},"1977":{"position":[[103,5]]},"1979":{"position":[[229,5]]},"2235":{"position":[[71,5]]},"2237":{"position":[[73,5]]},"2269":{"position":[[188,5]]},"2272":{"position":[[247,5]]},"2281":{"position":[[152,5]]},"2294":{"position":[[1025,5]]},"2313":{"position":[[194,5]]},"2348":{"position":[[230,5]]},"2357":{"position":[[521,5]]},"2379":{"position":[[651,5]]},"2406":{"position":[[7,5]]},"2415":{"position":[[7,5]]},"2434":{"position":[[7,5]]},"2442":{"position":[[210,5]]},"2482":{"position":[[32,5]]},"2484":{"position":[[58,5]]},"2486":{"position":[[240,5]]},"2538":{"position":[[222,5]]},"2551":{"position":[[43,5]]},"2579":{"position":[[120,5],[649,5]]},"2581":{"position":[[156,5],[659,5],[1108,5]]},"2587":{"position":[[65,5]]},"2589":{"position":[[84,5]]},"2607":{"position":[[350,5]]},"2690":{"position":[[67,5]]},"2709":{"position":[[72,5]]},"2711":{"position":[[235,5]]},"2713":{"position":[[566,5],[997,5],[1883,5]]},"2721":{"position":[[193,5],[388,5],[627,5],[840,5]]},"2725":{"position":[[274,5],[763,5],[1243,5],[1860,5],[2205,5]]},"2727":{"position":[[299,5]]},"2729":{"position":[[275,5]]},"2731":{"position":[[253,5]]},"2735":{"position":[[196,5]]},"2776":{"position":[[176,5]]},"2790":{"position":[[130,5],[384,5]]},"2792":{"position":[[45,5]]},"2796":{"position":[[51,5]]},"2805":{"position":[[256,5]]},"2807":{"position":[[255,5]]},"2813":{"position":[[298,5],[841,5]]},"2817":{"position":[[447,5]]},"2819":{"position":[[199,5]]},"2821":{"position":[[230,5]]},"2825":{"position":[[32,5]]},"2827":{"position":[[104,5]]},"2829":{"position":[[122,5]]},"2831":{"position":[[73,5]]},"2836":{"position":[[289,5],[1502,5]]},"2848":{"position":[[42,5],[1241,5]]},"2856":{"position":[[124,5]]},"2872":{"position":[[54,5]]},"2879":{"position":[[487,5]]},"2881":{"position":[[633,5]]},"2887":{"position":[[316,5]]},"2889":{"position":[[342,5]]},"2899":{"position":[[98,5],[361,5]]},"2901":{"position":[[152,5]]},"2905":{"position":[[249,5]]},"2925":{"position":[[239,5]]},"2927":{"position":[[151,5]]},"2929":{"position":[[219,5]]},"2933":{"position":[[233,5]]},"2935":{"position":[[304,5]]},"2937":{"position":[[401,5]]},"2941":{"position":[[239,5]]},"2943":{"position":[[151,5]]},"2945":{"position":[[219,5]]},"2949":{"position":[[171,5]]},"2951":{"position":[[158,5]]},"2955":{"position":[[239,5]]},"2957":{"position":[[151,5]]},"2959":{"position":[[219,5]]},"2963":{"position":[[220,5]]},"2971":{"position":[[97,5]]},"3071":{"position":[[336,5]]},"3144":{"position":[[266,5]]},"3154":{"position":[[188,5],[478,5]]},"3156":{"position":[[276,5],[417,5]]},"3158":{"position":[[228,5]]},"3162":{"position":[[43,5]]},"3166":{"position":[[7,5]]},"3168":{"position":[[109,5]]},"3189":{"position":[[105,5]]},"3215":{"position":[[23,5]]},"3224":{"position":[[29,5],[77,5]]},"3234":{"position":[[159,5]]},"3267":{"position":[[489,5]]},"3269":{"position":[[33,5]]},"3287":{"position":[[1432,5]]},"3360":{"position":[[45,5]]},"3371":{"position":[[313,5]]},"3373":{"position":[[292,5]]},"3379":{"position":[[132,5]]},"3381":{"position":[[73,5]]},"3383":{"position":[[120,5]]},"3387":{"position":[[113,5]]},"3389":{"position":[[219,5],[834,5],[1049,5]]},"3391":{"position":[[117,5],[365,5]]},"3393":{"position":[[248,5],[468,5],[646,5]]},"3397":{"position":[[246,5],[370,5],[1003,5]]},"3399":{"position":[[272,5]]},"3420":{"position":[[40,5]]},"3422":{"position":[[28,5]]},"3430":{"position":[[1138,5],[2270,5]]},"3434":{"position":[[170,5]]},"3436":{"position":[[35,5]]},"3446":{"position":[[59,5]]},"3452":{"position":[[543,5]]},"3458":{"position":[[257,5],[648,5]]},"3483":{"position":[[669,5]]},"3575":{"position":[[678,5]]},"3581":{"position":[[34,5],[468,5]]},"3583":{"position":[[133,5],[669,5]]},"3630":{"position":[[305,5]]},"3636":{"position":[[235,5]]},"3638":{"position":[[179,5]]},"3640":{"position":[[136,5]]},"3644":{"position":[[133,5],[276,5],[530,5],[711,5],[968,5],[1152,5]]},"3656":{"position":[[105,5]]},"3672":{"position":[[233,5]]},"3686":{"position":[[817,5]]},"3688":{"position":[[238,5]]},"3698":{"position":[[185,5]]},"3700":{"position":[[179,5]]},"3702":{"position":[[862,5]]},"3708":{"position":[[95,5],[1011,5]]},"3716":{"position":[[155,5],[687,5],[901,5]]},"3734":{"position":[[117,5]]},"3750":{"position":[[46,5]]},"3762":{"position":[[23,5]]},"3768":{"position":[[198,5]]},"3770":{"position":[[70,5],[1303,5],[2754,5],[4619,5]]},"3772":{"position":[[270,5]]},"3774":{"position":[[355,5]]},"3783":{"position":[[77,5]]},"3789":{"position":[[7,5]]},"3791":{"position":[[84,5],[604,5],[1390,5]]},"3795":{"position":[[67,5]]},"3806":{"position":[[120,5],[1406,5],[2746,5],[3281,5]]},"3808":{"position":[[715,5],[1734,5],[1771,5],[1936,5],[3348,5]]},"3828":{"position":[[96,5]]},"3832":{"position":[[95,5],[402,5]]},"3834":{"position":[[86,5]]},"3910":{"position":[[1169,5]]},"3914":{"position":[[2828,5]]},"3916":{"position":[[3539,5]]},"3920":{"position":[[856,5]]},"3924":{"position":[[3061,5],[3291,5]]},"3928":{"position":[[949,5]]},"3934":{"position":[[1266,5],[1728,5]]},"3936":{"position":[[1667,5]]},"3940":{"position":[[1126,5]]},"3956":{"position":[[656,5]]},"3966":{"position":[[1246,5]]}}}],["classfixtur",{"_index":8021,"t":{"3391":{"position":[[537,12],[638,12],[703,12],[718,12]]},"3393":{"position":[[818,12],[976,12],[1081,12],[1096,12]]}}}],["classic",{"_index":3091,"t":{"587":{"position":[[1224,7],[1505,7]]}}}],["classicmovieattribut",{"_index":3087,"t":{"587":{"position":[[1060,21],[1113,21]]}}}],["clay",{"_index":1882,"t":{"261":{"position":[[65,4]]},"267":{"position":[[0,4]]},"270":{"position":[[22,4],[33,4],[69,4],[141,4]]},"272":{"position":[[8,4],[15,4],[100,4],[140,4],[177,4],[221,4]]},"274":{"position":[[8,4],[15,4],[97,4],[149,4],[187,4]]},"276":{"position":[[8,4],[15,4],[97,4],[118,4],[147,4]]},"278":{"position":[[8,4],[15,4],[136,4],[174,4],[214,4],[245,4]]},"280":{"position":[[8,4],[15,4],[148,4],[187,4],[229,4],[257,4]]},"282":{"position":[[8,4],[15,4],[160,4],[307,4]]},"284":{"position":[[8,4],[19,4],[27,4],[91,4],[165,4],[197,4],[225,4],[281,4],[348,4],[377,4]]},"286":{"position":[[116,4],[158,4],[207,4]]},"288":{"position":[[8,4],[15,4],[150,4],[256,4],[284,4],[409,4],[416,4],[474,4]]},"290":{"position":[[8,4],[15,4],[153,4]]},"292":{"position":[[8,4],[19,4],[27,4],[42,4]]},"294":{"position":[[8,4],[15,4],[49,4],[103,4]]},"3946":{"position":[[347,4]]},"3948":{"position":[[484,4]]},"3962":{"position":[[1324,4]]},"3970":{"position":[[279,4]]},"3974":{"position":[[7,4]]}}}],["clay2",{"_index":1900,"t":{"270":{"position":[[61,5]]}}}],["clay3",{"_index":1903,"t":{"270":{"position":[[133,5]]}}}],["clayobject",{"_index":9935,"t":{"3976":{"position":[[122,10]]}}}],["clear",{"_index":5097,"t":{"1594":{"position":[[113,5]]},"1596":{"position":[[176,5]]},"1631":{"position":[[255,5]]},"1661":{"position":[[1176,5]]},"3023":{"position":[[1173,5]]},"3399":{"position":[[856,5]]}}}],["clearproperti",{"_index":8818,"t":{"3783":{"position":[[1744,15]]}}}],["cleartriggerbuild",{"_index":8937,"t":{"3819":{"position":[[1483,20]]}}}],["cli",{"_index":3306,"t":{"675":{"position":[[88,3],[185,3]]},"685":{"position":[[26,3],[92,3],[380,3],[423,3]]},"696":{"position":[[23,3]]},"698":{"position":[[13,3],[57,3]]},"1377":{"position":[[35,3]]},"1539":{"position":[[391,3],[446,3],[901,3],[1109,3],[1570,3],[1627,3]]},"1553":{"position":[[38,3]]},"1555":{"position":[[8,3],[33,3],[54,3],[102,3],[170,3],[265,3],[282,3],[326,3],[390,3],[480,3],[499,3],[515,3],[532,3],[576,3],[632,3]]},"1557":{"position":[[17,3],[59,3],[96,3],[184,3],[224,3],[264,3],[306,3],[349,3],[431,3],[462,3],[498,3],[548,3],[590,3],[658,3],[680,3],[730,3],[807,3],[906,3],[952,3],[1002,3]]},"1559":{"position":[[28,3],[77,3]]},"3702":{"position":[[475,3]]},"3932":{"position":[[1138,3]]},"3966":{"position":[[834,3],[1464,3]]},"3968":{"position":[[578,3]]},"3972":{"position":[[314,3]]},"3986":{"position":[[580,3],[1405,3]]},"3992":{"position":[[124,3],[3141,3],[3464,3]]},"4000":{"position":[[998,3],[1150,3]]}}}],["client",{"_index":1122,"t":{"148":{"position":[[207,7]]},"306":{"position":[[192,6]]},"308":{"position":[[12,6]]},"310":{"position":[[12,6]]},"331":{"position":[[183,7]]},"461":{"position":[[450,6],[799,6],[1350,6]]},"1801":{"position":[[92,6],[128,6],[227,6],[250,6]]},"2609":{"position":[[85,6]]},"3154":{"position":[[304,7],[625,7]]},"3162":{"position":[[292,7]]},"3168":{"position":[[422,7]]},"3173":{"position":[[0,7]]},"3175":{"position":[[0,7]]},"3177":{"position":[[0,7]]},"3179":{"position":[[0,7]]},"3181":{"position":[[0,7]]},"3183":{"position":[[0,7]]},"3185":{"position":[[0,7]]},"3187":{"position":[[0,7]]},"3189":{"position":[[387,7]]},"3397":{"position":[[739,6],[800,6]]},"3510":{"position":[[46,6]]},"3512":{"position":[[49,6],[64,6],[87,6]]},"3514":{"position":[[46,6]]},"3516":{"position":[[46,6]]},"3518":{"position":[[45,6]]},"3543":{"position":[[365,6]]},"3551":{"position":[[369,6],[593,6]]},"3553":{"position":[[204,6],[301,6],[351,6],[413,6],[463,6]]},"3555":{"position":[[366,6],[496,6]]},"3557":{"position":[[372,6],[507,6]]},"3559":{"position":[[381,6],[531,6]]},"3575":{"position":[[422,6],[483,6],[932,6],[1006,6]]},"3581":{"position":[[73,6],[370,6],[723,6]]},"3583":{"position":[[199,6],[476,6],[551,6]]},"3920":{"position":[[1334,6],[1446,6],[1560,6]]},"3960":{"position":[[513,6]]}}}],["clientcertif",{"_index":8390,"t":{"3591":{"position":[[234,18]]}}}],["clientcertificateopt",{"_index":8389,"t":{"3591":{"position":[[175,24],[202,23]]}}}],["clientfilenam",{"_index":5381,"t":{"1741":{"position":[[408,14],[953,14],[1369,14],[2205,14]]}}}],["clienthandl",{"_index":8401,"t":{"3601":{"position":[[1024,13],[1169,13]]}}}],["clientprovid",{"_index":8334,"t":{"3543":{"position":[[666,14]]}}}],["clientsetnul",{"_index":3686,"t":{"877":{"position":[[1109,13]]}}}],["clockskew",{"_index":995,"t":{"127":{"position":[[1216,9]]},"3039":{"position":[[332,9]]},"3041":{"position":[[427,9]]}}}],["clone",{"_index":2352,"t":{"386":{"position":[[20,5]]},"3779":{"position":[[1359,5],[1415,5]]},"3802":{"position":[[1977,5],[2045,5]]},"3817":{"position":[[2573,5],[2647,5]]}}}],["closur",{"_index":8221,"t":{"3452":{"position":[[3373,7]]},"3916":{"position":[[6369,7]]}}}],["clr",{"_index":7344,"t":{"3069":{"position":[[49,3]]}}}],["cm",{"_index":1887,"t":{"263":{"position":[[21,3]]}}}],["cmd",{"_index":435,"t":{"53":{"position":[[60,3]]},"64":{"position":[[86,3]]},"77":{"position":[[60,3]]},"675":{"position":[[232,3]]},"1377":{"position":[[330,3]]},"1545":{"position":[[34,3]]},"1547":{"position":[[53,3]]},"1549":{"position":[[50,3]]},"2745":{"position":[[289,3]]},"2747":{"position":[[324,3]]},"3313":{"position":[[24,3]]},"3321":{"position":[[3,3]]}}}],["cmdconfig",{"_index":5954,"t":{"2065":{"position":[[37,9],[88,9]]}}}],["cn",{"_index":2511,"t":{"423":{"position":[[170,2]]},"461":{"position":[[118,2]]},"773":{"position":[[116,2]]},"1468":{"position":[[309,2]]},"1503":{"position":[[47,2]]},"1511":{"position":[[2166,2]]},"1539":{"position":[[243,2]]},"1547":{"position":[[475,2]]},"1549":{"position":[[546,2]]},"1947":{"position":[[176,2]]},"1965":{"position":[[48,2]]},"2387":{"position":[[30,2]]},"2497":{"position":[[113,2]]},"2522":{"position":[[84,2],[134,2]]},"2555":{"position":[[64,2],[101,2],[207,2]]},"2557":{"position":[[66,2]]},"2559":{"position":[[574,2]]},"2573":{"position":[[235,2]]},"2856":{"position":[[2006,2]]},"3033":{"position":[[54,2],[104,2]]},"3069":{"position":[[337,2]]},"3138":{"position":[[201,2]]},"3189":{"position":[[456,2]]},"3307":{"position":[[37,2]]},"3912":{"position":[[2097,2]]},"3934":{"position":[[2914,2]]}}}],["cnblog",{"_index":6914,"t":{"2768":{"position":[[141,7],[317,7],[398,7],[443,7],[502,7],[590,7],[764,7],[1095,7],[1262,7],[1409,7]]},"3112":{"position":[[71,7]]},"3307":{"position":[[286,7]]},"3331":{"position":[[46,7],[102,7]]}}}],["co",{"_index":4998,"t":{"1551":{"position":[[611,2],[692,2]]},"2261":{"position":[[167,2],[357,2]]},"2559":{"position":[[2153,2]]},"3464":{"position":[[215,2],[405,2]]},"3702":{"position":[[2239,2]]},"3936":{"position":[[2031,2],[2216,2]]}}}],["code",{"_index":427,"t":{"51":{"position":[[280,4]]},"62":{"position":[[280,4]]},"75":{"position":[[280,4]]},"174":{"position":[[25,4]]},"677":{"position":[[91,4]]},"704":{"position":[[91,4],[239,4]]},"724":{"position":[[6,4]]},"1691":{"position":[[129,4],[218,4]]},"1887":{"position":[[430,4]]},"2506":{"position":[[17,4]]},"2512":{"position":[[60,4]]},"2929":{"position":[[766,4]]},"2945":{"position":[[878,4]]},"2951":{"position":[[621,4]]},"2959":{"position":[[821,4]]},"3352":{"position":[[289,4],[335,4],[374,4],[454,4]]},"3630":{"position":[[555,5]]},"3789":{"position":[[131,4]]},"3982":{"position":[[746,4]]},"3986":{"position":[[1752,4]]}}}],["codeanalysi",{"_index":149,"t":{"11":{"position":[[524,12]]},"91":{"position":[[150,12],[170,12]]},"2294":{"position":[[553,12]]},"3329":{"position":[[26,12],[128,12],[167,12],[207,12],[251,12]]}}}],["codebas",{"_index":7346,"t":{"3069":{"position":[[132,8]]}}}],["codefirst",{"_index":7598,"t":{"3211":{"position":[[59,9]]}}}],["codegener",{"_index":7923,"t":{"3329":{"position":[[310,14]]}}}],["codelang",{"_index":5768,"t":{"1887":{"position":[[465,8]]}}}],["codemaid",{"_index":171,"t":{"11":{"position":[[729,8]]},"2294":{"position":[[758,8]]}}}],["coder",{"_index":4862,"t":{"1511":{"position":[[3626,5]]}}}],["coder_armi",{"_index":4861,"t":{"1511":{"position":[[3626,10]]}}}],["cola",{"_index":2898,"t":{"550":{"position":[[389,4]]}}}],["colb",{"_index":2899,"t":{"550":{"position":[[395,4]]}}}],["collect",{"_index":222,"t":{"13":{"position":[[169,11]]},"587":{"position":[[1662,11]]},"599":{"position":[[13,11]]},"696":{"position":[[1348,11],[2529,11],[3451,11],[4133,11]]},"708":{"position":[[58,11]]},"734":{"position":[[6285,11]]},"747":{"position":[[138,11]]},"851":{"position":[[92,11],[1702,11]]},"877":{"position":[[163,11],[1934,11]]},"889":{"position":[[150,11]]},"1064":{"position":[[98,11]]},"1066":{"position":[[700,11]]},"1109":{"position":[[384,11]]},"1145":{"position":[[58,11]]},"1147":{"position":[[44,11]]},"1151":{"position":[[75,11]]},"1368":{"position":[[136,11]]},"1539":{"position":[[325,11]]},"2296":{"position":[[169,11]]},"2607":{"position":[[64,10],[128,10],[206,10],[497,10],[555,10],[629,10]]},"2929":{"position":[[151,11]]},"2945":{"position":[[151,11]]},"2959":{"position":[[151,11]]},"3389":{"position":[[175,10]]},"3393":{"position":[[93,10],[611,10]]},"3850":{"position":[[408,7]]},"3852":{"position":[[526,7]]},"3854":{"position":[[353,7]]},"3856":{"position":[[248,7]]},"3874":{"position":[[341,7]]},"3876":{"position":[[458,7]]},"4002":{"position":[[196,11]]}}}],["collectiondefinit",{"_index":8024,"t":{"3393":{"position":[[423,20]]}}}],["collectionfixtur",{"_index":8027,"t":{"3393":{"position":[[870,17],[1011,17],[1111,17],[1131,17]]}}}],["color",{"_index":3150,"t":{"606":{"position":[[237,5]]},"617":{"position":[[677,5],[702,5]]}}}],["column",{"_index":2988,"t":{"570":{"position":[[1827,6],[2172,6],[2463,6]]},"919":{"position":[[210,6]]},"1785":{"position":[[49,6]]},"3986":{"position":[[1338,6]]}}}],["column1",{"_index":3663,"t":{"866":{"position":[[65,7]]}}}],["column2",{"_index":3664,"t":{"866":{"position":[[76,7]]}}}],["com",{"_index":62,"t":{"3":{"position":[[602,3]]},"46":{"position":[[62,3]]},"51":{"position":[[128,3]]},"60":{"position":[[62,3]]},"62":{"position":[[128,3]]},"70":{"position":[[62,3]]},"75":{"position":[[128,3]]},"89":{"position":[[20,3],[65,3]]},"148":{"position":[[176,3]]},"170":{"position":[[14,3],[42,3]]},"298":{"position":[[26,3]]},"314":{"position":[[214,3]]},"331":{"position":[[57,3],[152,3]]},"386":{"position":[[40,3]]},"406":{"position":[[218,3]]},"423":{"position":[[163,3]]},"445":{"position":[[257,3],[337,3]]},"447":{"position":[[165,3],[246,3]]},"461":{"position":[[111,3]]},"486":{"position":[[68,3]]},"540":{"position":[[102,3]]},"606":{"position":[[738,3]]},"655":{"position":[[535,3]]},"675":{"position":[[26,3]]},"734":{"position":[[8228,3]]},"773":{"position":[[109,3]]},"846":{"position":[[1025,3]]},"879":{"position":[[95,3]]},"917":{"position":[[26,3]]},"919":{"position":[[54,3]]},"1377":{"position":[[100,3],[486,3],[525,3],[690,3]]},"1379":{"position":[[120,3],[515,3]]},"1440":{"position":[[968,3]]},"1468":{"position":[[302,3]]},"1483":{"position":[[285,3],[836,3]]},"1503":{"position":[[40,3]]},"1509":{"position":[[308,3]]},"1516":{"position":[[181,3]]},"1539":{"position":[[164,3]]},"1547":{"position":[[468,3]]},"1549":{"position":[[539,3]]},"1551":{"position":[[742,3]]},"1627":{"position":[[208,3]]},"1947":{"position":[[169,3]]},"1965":{"position":[[41,3]]},"2132":{"position":[[280,3],[399,3]]},"2383":{"position":[[172,3]]},"2387":{"position":[[23,3]]},"2422":{"position":[[18,3]]},"2497":{"position":[[140,3]]},"2501":{"position":[[54,3],[150,3]]},"2503":{"position":[[32,3]]},"2532":{"position":[[204,3]]},"2555":{"position":[[200,3]]},"2557":{"position":[[59,3]]},"2573":{"position":[[228,3]]},"2597":{"position":[[95,3]]},"2637":{"position":[[25,3]]},"2649":{"position":[[245,3]]},"2664":{"position":[[25,3]]},"2731":{"position":[[120,3]]},"2768":{"position":[[119,3],[149,3],[177,3],[212,3],[293,3],[325,3],[353,3],[406,3],[451,3],[510,3],[546,3],[598,3],[629,3],[685,3],[705,3],[735,3],[772,3],[840,3],[890,3],[935,3],[991,3],[1040,3],[1103,3],[1144,3],[1198,3],[1237,3],[1270,3],[1335,3],[1377,3],[1417,3],[1445,3],[1483,3]]},"2856":{"position":[[1999,3]]},"2897":{"position":[[724,3]]},"2977":{"position":[[107,3]]},"2987":{"position":[[107,3]]},"2997":{"position":[[107,3]]},"3005":{"position":[[107,3]]},"3019":{"position":[[107,3]]},"3027":{"position":[[107,3]]},"3035":{"position":[[107,3]]},"3043":{"position":[[107,3]]},"3051":{"position":[[107,3]]},"3059":{"position":[[107,3]]},"3065":{"position":[[232,3],[274,3],[332,3]]},"3069":{"position":[[330,3]]},"3112":{"position":[[79,3]]},"3131":{"position":[[344,3]]},"3138":{"position":[[194,3]]},"3189":{"position":[[449,3]]},"3215":{"position":[[896,3]]},"3250":{"position":[[128,3]]},"3265":{"position":[[167,3]]},"3267":{"position":[[683,3]]},"3269":{"position":[[579,3]]},"3271":{"position":[[264,3]]},"3291":{"position":[[162,3],[264,3],[810,3],[908,3],[1948,3],[2059,3]]},"3307":{"position":[[30,3],[214,3],[294,3]]},"3331":{"position":[[54,3],[110,3]]},"3335":{"position":[[26,3]]},"3373":{"position":[[59,3],[579,3]]},"3401":{"position":[[214,3]]},"3498":{"position":[[146,3],[368,3]]},"3520":{"position":[[400,3]]},"3522":{"position":[[985,3]]},"3543":{"position":[[146,3],[455,3]]},"3575":{"position":[[206,3]]},"3581":{"position":[[200,3]]},"3583":{"position":[[305,3]]},"3595":{"position":[[192,3]]},"3597":{"position":[[108,3],[217,3],[319,3]]},"3599":{"position":[[91,3]]},"3601":{"position":[[944,3],[1089,3],[1544,3]]},"3642":{"position":[[306,3],[348,3],[406,3]]},"3702":{"position":[[134,3],[1422,3],[1733,3],[2035,3],[2126,3],[2444,3]]},"3706":{"position":[[1980,3],[2022,3],[2080,3]]},"3910":{"position":[[328,3]]},"3912":{"position":[[146,3],[220,3],[294,3],[368,3],[442,3],[516,3],[590,3],[664,3]]},"3914":{"position":[[31,3],[105,3],[179,3],[253,3],[327,3],[401,3],[475,3],[549,3],[623,3],[697,3]]},"3916":{"position":[[31,3],[105,3],[179,3],[253,3],[327,3],[401,3],[475,3],[549,3],[623,3]]},"3918":{"position":[[31,3],[105,3],[179,3],[253,3],[327,3],[401,3],[475,3],[549,3],[623,3],[697,3]]},"3920":{"position":[[31,3],[105,3]]},"3932":{"position":[[1632,3]]},"3934":{"position":[[2304,3],[2588,3],[2767,3],[2842,3],[2907,3]]}}}],["combin",{"_index":280,"t":{"19":{"position":[[140,7],[407,7]]},"1741":{"position":[[209,7],[646,7],[1018,7],[1406,7],[1871,7],[2242,7]]},"3744":{"position":[[91,7]]},"3746":{"position":[[59,7]]}}}],["command",{"_index":3000,"t":{"572":{"position":[[412,7],[509,7],[578,7],[634,7],[695,7],[810,7],[954,7],[1023,7],[1079,7],[1145,7]]},"685":{"position":[[9,7],[56,7]]},"929":{"position":[[654,7],[717,7],[806,7],[928,7],[1055,7],[1163,7],[1299,7],[1459,7],[1573,7],[1668,7],[1783,7],[1930,7],[2066,7],[2176,7],[2291,7],[2392,7],[2527,7],[2680,7],[2793,7],[2881,7],[2995,7],[3135,7],[3273,7],[3375,7],[3514,7],[3668,7],[3785,7],[3874,7],[3992,7],[4133,7]]},"1497":{"position":[[121,7],[299,7]]},"3291":{"position":[[1612,7],[1650,7],[1697,7]]}}}],["commandcorrelatedeventdata",{"_index":3765,"t":{"929":{"position":[[316,26]]}}}],["commandcr",{"_index":3764,"t":{"929":{"position":[[300,15],[406,15],[482,14],[560,14]]}}}],["commandendeventdata",{"_index":3766,"t":{"929":{"position":[[497,19]]}}}],["commanderroreventdata",{"_index":3768,"t":{"929":{"position":[[663,21],[815,21]]}}}],["commandeventdata",{"_index":3001,"t":{"572":{"position":[[421,16],[819,16]]},"929":{"position":[[1064,16],[1308,16],[2300,16],[2536,16],[3282,16],[3523,16]]}}}],["commandexecutedeventdata",{"_index":3774,"t":{"929":{"position":[[1582,24],[1792,24],[2802,24],[3004,24],[3794,24],[4001,24]]}}}],["commandfail",{"_index":3767,"t":{"929":{"position":[[630,13],[703,13]]}}}],["commandfailedasync",{"_index":3769,"t":{"929":{"position":[[777,18],[909,18]]}}}],["commandlin",{"_index":546,"t":{"91":{"position":[[566,11]]},"1537":{"position":[[40,11]]},"1539":{"position":[[285,11]]},"1551":{"position":[[1058,11]]},"1553":{"position":[[24,11]]},"3952":{"position":[[20,11]]}}}],["commandlinearg",{"_index":4983,"t":{"1541":{"position":[[197,15],[280,15],[430,15]]},"1543":{"position":[[85,15],[202,15],[326,15],[447,15]]}}}],["commandnam",{"_index":4982,"t":{"1541":{"position":[[171,11],[256,11],[404,11]]},"1543":{"position":[[59,11],[176,11],[300,11],[421,11]]},"2875":{"position":[[798,11]]}}}],["commandtext",{"_index":3003,"t":{"572":{"position":[[517,11],[962,11]]},"3291":{"position":[[1658,11]]}}}],["commandtyp",{"_index":2901,"t":{"550":{"position":[[553,11],[566,11]]},"572":{"position":[[586,11],[1031,11]]},"1234":{"position":[[421,11],[435,11]]},"1236":{"position":[[427,11],[441,11]]},"1238":{"position":[[532,11],[546,11]]},"1240":{"position":[[574,11],[588,11]]}}}],["comment",{"_index":9524,"t":{"3934":{"position":[[2325,8]]}}}],["commit",{"_index":1377,"t":{"190":{"position":[[423,6]]},"3291":{"position":[[400,6],[1172,6]]}}}],["committran",{"_index":7686,"t":{"3226":{"position":[[659,10]]},"3228":{"position":[[353,10]]},"3287":{"position":[[2346,10]]}}}],["committransact",{"_index":7861,"t":{"3287":{"position":[[2238,17]]},"3922":{"position":[[1050,17]]}}}],["common",{"_index":2093,"t":{"316":{"position":[[310,6]]},"572":{"position":[[139,6]]},"927":{"position":[[67,6]]},"929":{"position":[[67,6]]},"1657":{"position":[[268,6]]}}}],["commonent",{"_index":5466,"t":{"1775":{"position":[[307,12],[322,12],[390,12],[411,12],[480,12],[625,12],[842,12],[1131,12],[1492,12],[1925,12],[2430,12],[3007,12]]}}}],["commonhubcontextmethod",{"_index":7566,"t":{"3170":{"position":[[276,22],[333,22]]}}}],["commun",{"_index":6093,"t":{"2303":{"position":[[25,13]]},"3148":{"position":[[182,13]]},"3702":{"position":[[1785,9]]},"3954":{"position":[[25,13]]}}}],["compani",{"_index":2528,"t":{"433":{"position":[[54,7]]},"435":{"position":[[417,7],[816,7]]},"441":{"position":[[153,7],[397,7],[472,7]]},"885":{"position":[[154,7]]},"1551":{"position":[[595,7],[621,7]]},"2707":{"position":[[54,7]]},"2709":{"position":[[201,7]]},"2713":{"position":[[810,7],[1533,7],[1615,7],[1697,7],[2078,7],[2217,7],[2355,7]]},"2721":{"position":[[322,7],[518,7],[756,7],[970,7]]},"2725":{"position":[[548,7],[1481,7],[2098,7]]},"2727":{"position":[[518,7],[686,7]]},"2729":{"position":[[428,7]]},"2735":{"position":[[162,7],[325,7],[355,7],[430,7],[458,7]]},"2768":{"position":[[216,7]]},"3936":{"position":[[1621,7],[1796,7],[1835,7]]}}}],["company_nam",{"_index":6861,"t":{"2735":{"position":[[162,12],[325,12],[458,12]]},"3936":{"position":[[1621,12],[1796,12]]}}}],["companynam",{"_index":2553,"t":{"441":{"position":[[290,11],[356,11],[431,11],[520,11]]},"881":{"position":[[111,11],[138,11]]}}}],["compar",{"_index":3078,"t":{"587":{"position":[[790,7]]},"1677":{"position":[[94,7]]},"1685":{"position":[[128,7]]}}}],["compil",{"_index":5052,"t":{"1566":{"position":[[692,8],[899,8]]},"3750":{"position":[[316,7]]},"3752":{"position":[[45,7],[69,7],[263,7],[792,7]]}}}],["compileasync",{"_index":8636,"t":{"3752":{"position":[[508,12],[1107,12]]}}}],["compilequeri",{"_index":5056,"t":{"1566":{"position":[[778,12]]}}}],["compileropt",{"_index":2034,"t":{"308":{"position":[[503,15]]}}}],["complet",{"_index":2107,"t":{"319":{"position":[[322,9],[573,9]]},"321":{"position":[[529,8]]},"3291":{"position":[[2120,8]]}}}],["completedtask",{"_index":2744,"t":{"492":{"position":[[643,13]]},"530":{"position":[[748,13]]},"1039":{"position":[[749,13]]},"1795":{"position":[[447,13],[712,13],[937,13],[1259,13],[1673,13],[1892,13]]},"1807":{"position":[[472,13],[749,13]]},"1815":{"position":[[553,13]]},"1817":{"position":[[264,13]]},"1819":{"position":[[433,13]]},"1883":{"position":[[380,13]]},"1913":{"position":[[1214,13]]},"1933":{"position":[[843,13]]},"1951":{"position":[[735,13]]},"2158":{"position":[[93,13]]},"2313":{"position":[[440,13]]},"2406":{"position":[[650,13]]},"2434":{"position":[[710,13]]},"2442":{"position":[[1989,13]]},"2482":{"position":[[549,13]]},"2484":{"position":[[649,13]]},"2486":{"position":[[1018,13]]},"2825":{"position":[[549,13]]},"2827":{"position":[[695,13]]},"2829":{"position":[[813,13]]},"2831":{"position":[[743,13]]},"3762":{"position":[[356,13]]},"3770":{"position":[[345,13],[1742,13],[3396,13],[5017,13]]},"3774":{"position":[[688,13]]},"3783":{"position":[[565,13]]},"3791":{"position":[[536,13],[1307,13],[2055,13]]},"3806":{"position":[[3614,13]]},"3808":{"position":[[1048,13],[2269,13]]},"3828":{"position":[[450,13],[791,13]]},"3832":{"position":[[764,13]]}}}],["complex",{"_index":4006,"t":{"1129":{"position":[[103,7],[209,7],[333,7],[462,7],[555,7],[911,7],[1043,7],[1219,7],[1400,7],[1519,7]]}}}],["compon",{"_index":2058,"t":{"310":{"position":[[908,9]]},"321":{"position":[[39,9],[135,9],[189,9],[225,9]]},"340":{"position":[[52,9]]},"342":{"position":[[23,10]]},"355":{"position":[[262,10]]},"3932":{"position":[[335,10],[678,10]]}}}],["componentcontext",{"_index":2219,"t":{"340":{"position":[[302,16],[319,16],[690,16],[707,16],[924,16],[941,16],[1151,16],[1168,16],[1921,16]]},"344":{"position":[[302,16],[373,16],[390,16]]},"346":{"position":[[364,16],[456,16],[473,16]]},"348":{"position":[[328,16],[401,16],[418,16]]},"353":{"position":[[291,16],[308,16]]},"365":{"position":[[0,16]]},"367":{"position":[[0,16],[63,16],[142,16]]},"369":{"position":[[79,16],[626,16],[643,16],[677,16],[787,16]]},"371":{"position":[[199,16],[216,16],[437,16],[454,16]]},"2879":{"position":[[575,16],[592,16]]},"3430":{"position":[[1223,16],[1240,16],[2355,16],[2372,16]]},"3920":{"position":[[944,16],[961,16]]}}}],["componentmodel",{"_index":151,"t":{"11":{"position":[[602,14]]},"587":{"position":[[106,14]]},"597":{"position":[[38,14]]},"599":{"position":[[47,14]]},"708":{"position":[[92,14]]},"851":{"position":[[126,14]]},"1060":{"position":[[77,14],[122,14]]},"1775":{"position":[[174,14],[219,14]]},"2294":{"position":[[631,14]]},"2725":{"position":[[204,14],[1173,14],[1692,14]]},"2727":{"position":[[229,14]]},"2971":{"position":[[27,14]]},"3686":{"position":[[738,14]]}}}],["componenttyp",{"_index":2307,"t":{"367":{"position":[[17,13]]}}}],["compos",{"_index":2208,"t":{"340":{"position":[[31,7]]}}}],["computehash",{"_index":1342,"t":{"188":{"position":[[492,11],[550,11]]}}}],["concurr",{"_index":3462,"t":{"734":{"position":[[6297,10]]},"3768":{"position":[[135,10],[2545,10]]},"3770":{"position":[[560,10],[1942,10],[3569,10],[5240,10]]},"3772":{"position":[[188,10]]},"3777":{"position":[[218,10]]},"3779":{"position":[[779,10],[1117,10],[1495,10],[1674,10],[1776,10]]},"3785":{"position":[[242,10],[902,10],[1279,10],[1650,10]]},"3817":{"position":[[751,10],[1793,10]]},"3821":{"position":[[270,10]]},"3826":{"position":[[504,10],[566,10]]},"3842":{"position":[[2335,10],[2496,10],[2626,10],[2968,10],[3121,10],[3243,10]]},"3896":{"position":[[195,10]]}}}],["concurrentdictionari",{"_index":3463,"t":{"734":{"position":[[6308,20]]}}}],["conditionalmodel",{"_index":7662,"t":{"3224":{"position":[[855,16]]}}}],["conditionaltyp",{"_index":7664,"t":{"3224":{"position":[[889,15],[905,15]]}}}],["config",{"_index":324,"t":{"19":{"position":[[843,6],[947,6]]},"247":{"position":[[513,6]]},"308":{"position":[[452,6]]},"445":{"position":[[710,6]]},"455":{"position":[[512,6],[536,6]]},"1379":{"position":[[261,6]]},"1468":{"position":[[94,6]]},"1549":{"position":[[123,6]]},"1755":{"position":[[64,6],[336,6]]},"1803":{"position":[[854,6],[934,6],[988,6]]},"2690":{"position":[[133,6],[143,6]]},"2985":{"position":[[37,6]]},"3226":{"position":[[150,6],[281,6]]},"3228":{"position":[[131,6]]},"3254":{"position":[[48,6]]},"3399":{"position":[[873,6]]},"3918":{"position":[[3128,6]]}}}],["configcli",{"_index":2621,"t":{"461":{"position":[[457,12],[806,12],[1357,12]]}}}],["configconnect",{"_index":7611,"t":{"3215":{"position":[[215,16],[427,16]]}}}],["configid",{"_index":7680,"t":{"3226":{"position":[[94,8],[229,8]]},"3254":{"position":[[539,8],[914,8]]}}}],["configur",{"_index":940,"t":{"123":{"position":[[33,9]]},"204":{"position":[[68,9],[372,9]]},"210":{"position":[[193,9],[464,9]]},"212":{"position":[[340,9],[629,9]]},"216":{"position":[[382,9],[906,9]]},"218":{"position":[[139,13],[240,9],[269,9],[349,9]]},"249":{"position":[[206,13]]},"251":{"position":[[281,13],[300,13],[348,13],[381,13]]},"314":{"position":[[301,13],[535,13]]},"316":{"position":[[448,13],[593,13]]},"336":{"position":[[104,9]]},"338":{"position":[[714,9]]},"346":{"position":[[50,9]]},"371":{"position":[[286,9]]},"411":{"position":[[401,9]]},"435":{"position":[[56,13],[83,13],[311,13],[351,13],[394,13],[495,13],[687,13],[718,13],[754,13],[793,13],[902,13],[957,13],[975,13],[991,13],[1078,13],[1126,13]]},"437":{"position":[[52,13]]},"439":{"position":[[95,13]]},"441":{"position":[[308,13],[374,13],[449,13],[538,13]]},"443":{"position":[[27,13]]},"445":{"position":[[418,13],[664,13]]},"447":{"position":[[58,13],[106,13],[187,13]]},"453":{"position":[[125,13],[193,13],[367,13],[417,13]]},"455":{"position":[[780,13],[1028,13],[1048,13]]},"461":{"position":[[146,13],[188,13],[478,13],[827,13]]},"463":{"position":[[50,13],[96,13]]},"655":{"position":[[158,9],[326,9]]},"696":{"position":[[1861,9],[2817,9],[4404,9]]},"730":{"position":[[89,9]]},"732":{"position":[[12,9]]},"844":{"position":[[469,9]]},"877":{"position":[[892,9]]},"889":{"position":[[461,9]]},"1286":{"position":[[259,13],[337,13]]},"1468":{"position":[[108,13],[257,13]]},"1474":{"position":[[192,13]]},"1667":{"position":[[429,13]]},"1755":{"position":[[120,13],[293,13],[355,13],[829,13]]},"1779":{"position":[[373,9]]},"1781":{"position":[[225,9]]},"1907":{"position":[[483,9]]},"1913":{"position":[[1292,9]]},"1919":{"position":[[755,9]]},"1925":{"position":[[1484,9]]},"1927":{"position":[[801,9]]},"1933":{"position":[[921,9]]},"1935":{"position":[[416,9]]},"1941":{"position":[[1172,9]]},"1943":{"position":[[366,9]]},"1951":{"position":[[813,9]]},"1961":{"position":[[18,9],[95,13]]},"1979":{"position":[[99,13],[275,13],[292,13],[308,13],[347,13],[503,9]]},"2023":{"position":[[28,13],[48,13],[75,13],[182,13]]},"2251":{"position":[[195,9],[303,9]]},"2255":{"position":[[112,9],[159,9]]},"2266":{"position":[[281,9],[326,9]]},"2272":{"position":[[458,9]]},"2281":{"position":[[30,9],[251,9]]},"2283":{"position":[[34,9]]},"2519":{"position":[[164,9]]},"2579":{"position":[[871,9]]},"2725":{"position":[[1578,13]]},"2727":{"position":[[201,13],[605,13],[868,13]]},"2729":{"position":[[182,13],[512,13],[672,13]]},"2848":{"position":[[391,9],[1646,9]]},"2875":{"position":[[385,13]]},"2879":{"position":[[229,9]]},"2881":{"position":[[184,9],[745,9]]},"2887":{"position":[[389,13]]},"2889":{"position":[[480,9]]},"2897":{"position":[[467,9]]},"2905":{"position":[[333,9]]},"3144":{"position":[[414,9]]},"3156":{"position":[[466,9]]},"3215":{"position":[[130,13],[308,13],[844,13]]},"3373":{"position":[[435,9]]},"3399":{"position":[[890,13]]},"3630":{"position":[[484,9]]},"3666":{"position":[[209,9],[334,9],[359,9]]},"3686":{"position":[[1052,13],[1138,13]]},"3708":{"position":[[3931,9],[3960,9]]},"3791":{"position":[[179,13],[246,13],[282,13],[298,13],[699,13],[818,13],[889,13],[905,13],[1498,13],[1611,13],[1682,13],[1698,13]]},"3918":{"position":[[2609,9],[2685,9]]},"3920":{"position":[[1180,9]]},"3924":{"position":[[858,13],[895,13],[986,13],[1083,13],[2260,13]]},"3962":{"position":[[33,13],[1969,13]]},"3992":{"position":[[3268,13]]}}}],["configurableopt",{"_index":6819,"t":{"2709":{"position":[[13,19],[333,19]]},"2725":{"position":[[170,19],[1139,19],[1622,19]]},"2727":{"position":[[153,19]]},"2729":{"position":[[216,19]]}}}],["configurationscandirectori",{"_index":2582,"t":{"445":{"position":[[941,28]]},"455":{"position":[[183,28]]},"2985":{"position":[[261,28]]}}}],["configureappconfigur",{"_index":2600,"t":{"455":{"position":[[469,25]]},"461":{"position":[[375,25],[724,25],[1275,25]]},"3399":{"position":[[801,25]]},"3918":{"position":[[3092,25]]}}}],["configurebuild",{"_index":6788,"t":{"2674":{"position":[[266,16]]},"2875":{"position":[[235,16],[287,16]]},"2879":{"position":[[147,16]]},"2881":{"position":[[161,16]]},"2883":{"position":[[45,16]]},"2897":{"position":[[515,16],[633,16]]}}}],["configureconfigur",{"_index":2607,"t":{"455":{"position":[[999,22]]},"3924":{"position":[[828,22],[963,22],[1046,22]]}}}],["configuredatavalid",{"_index":6085,"t":{"2285":{"position":[[73,23]]}}}],["configuredesigntimeservic",{"_index":3486,"t":{"734":{"position":[[7992,27]]}}}],["configureinject",{"_index":2617,"t":{"461":{"position":[[327,15]]}}}],["configurekestrel",{"_index":5213,"t":{"1667":{"position":[[465,16]]},"1755":{"position":[[865,16]]}}}],["configurelog",{"_index":8087,"t":{"3430":{"position":[[570,16],[2022,16]]}}}],["configurelogg",{"_index":8180,"t":{"3450":{"position":[[115,15]]}}}],["configureprimaryhttpmessagehandl",{"_index":8374,"t":{"3587":{"position":[[140,34],[326,34]]},"3589":{"position":[[114,34],[311,34],[731,34]]},"3591":{"position":[[101,34]]}}}],["configureservic",{"_index":1517,"t":{"204":{"position":[[20,17],[309,17]]},"210":{"position":[[82,17],[371,17]]},"212":{"position":[[277,17],[566,17]]},"216":{"position":[[319,17],[776,17]]},"336":{"position":[[84,17]]},"338":{"position":[[281,17]]},"344":{"position":[[45,16]]},"371":{"position":[[70,16]]},"411":{"position":[[303,17]]},"514":{"position":[[256,17]]},"524":{"position":[[335,17]]},"595":{"position":[[196,17]]},"617":{"position":[[2372,17]]},"1058":{"position":[[202,17]]},"1317":{"position":[[256,17]]},"1582":{"position":[[270,17]]},"1701":{"position":[[67,17]]},"1843":{"position":[[196,17]]},"1867":{"position":[[539,17]]},"1907":{"position":[[80,17]]},"1909":{"position":[[285,16]]},"1913":{"position":[[1240,16]]},"1919":{"position":[[703,16]]},"1925":{"position":[[1432,16]]},"1927":{"position":[[749,16]]},"1933":{"position":[[869,16]]},"1935":{"position":[[364,16]]},"1941":{"position":[[1120,16]]},"1943":{"position":[[314,16]]},"1951":{"position":[[761,16]]},"1979":{"position":[[382,17]]},"2266":{"position":[[53,17],[106,17],[201,17]]},"2272":{"position":[[30,17],[275,17]]},"2274":{"position":[[34,17]]},"2281":{"position":[[180,17]]},"2519":{"position":[[34,17]]},"2711":{"position":[[286,17]]},"2713":{"position":[[661,17]]},"2786":{"position":[[12,17]]},"2798":{"position":[[12,17]]},"2807":{"position":[[296,17]]},"2813":{"position":[[1035,17]]},"2819":{"position":[[403,17]]},"2821":{"position":[[86,17],[434,17]]},"2836":{"position":[[514,17],[1720,17]]},"2848":{"position":[[70,17],[1613,17]]},"2881":{"position":[[674,17]]},"2889":{"position":[[385,17]]},"2897":{"position":[[424,17]]},"2901":{"position":[[197,17]]},"2905":{"position":[[277,17]]},"2927":{"position":[[214,17]]},"2943":{"position":[[214,17]]},"2957":{"position":[[214,17]]},"3144":{"position":[[307,17]]},"3373":{"position":[[333,17]]},"3481":{"position":[[40,17]]},"3630":{"position":[[356,17]]},"3666":{"position":[[61,17]]},"3732":{"position":[[42,17]]},"3910":{"position":[[540,17]]},"3918":{"position":[[2462,17],[3153,17]]},"3952":{"position":[[189,16],[276,16],[336,16]]}}}],["configureswagg",{"_index":8493,"t":{"3666":{"position":[[391,16]]},"3918":{"position":[[2717,16]]}}}],["configureswaggergen",{"_index":8491,"t":{"3666":{"position":[[150,19]]},"3668":{"position":[[107,19]]},"3680":{"position":[[123,19]]},"3918":{"position":[[2551,19]]}}}],["configureswaggerui",{"_index":8495,"t":{"3666":{"position":[[437,18]]},"3918":{"position":[[2762,18]]}}}],["configurewebdefault",{"_index":7171,"t":{"2897":{"position":[[384,20]]}}}],["configurewebhostdefault",{"_index":1512,"t":{"202":{"position":[[403,24]]},"455":{"position":[[615,24]]},"461":{"position":[[1183,24]]},"1667":{"position":[[148,24]]},"1755":{"position":[[612,24]]},"1977":{"position":[[297,24]]},"2269":{"position":[[388,24]]},"2776":{"position":[[376,24]]},"2862":{"position":[[115,24]]},"3166":{"position":[[291,24]]}}}],["configurewebservic",{"_index":2622,"t":{"461":{"position":[[548,20],[897,20],[1438,20]]}}}],["confirmpassword",{"_index":3029,"t":{"585":{"position":[[245,15]]},"587":{"position":[[656,15]]}}}],["confluent",{"_index":5584,"t":{"1803":{"position":[[6,9],[42,9],[103,9],[2371,9]]}}}],["conmodel",{"_index":7661,"t":{"3224":{"position":[[794,9],[837,9],[980,9]]}}}],["connect",{"_index":2811,"t":{"520":{"position":[[378,7]]},"901":{"position":[[406,7]]},"927":{"position":[[321,10],[423,10],[554,10],[708,10],[823,10],[893,10],[990,10],[1119,10],[1243,10],[1345,10],[1478,10],[1585,10],[1683,10],[1753,10],[1852,10],[1934,10],[2022,10],[2094,10],[2191,10],[2322,10]]},"1315":{"position":[[406,7]]},"1801":{"position":[[745,10],[1321,10],[1402,10],[3143,10]]},"3189":{"position":[[203,10],[238,10]]},"3194":{"position":[[425,10],[549,10],[580,10],[639,10],[751,10]]},"3291":{"position":[[1513,10],[1565,10],[1622,10],[1819,10]]},"3585":{"position":[[24,10]]},"3966":{"position":[[1559,10]]}}}],["connect_data",{"_index":2810,"t":{"520":{"position":[[378,12]]},"901":{"position":[[406,12]]},"1315":{"position":[[406,12]]}}}],["connectconfiglist",{"_index":7769,"t":{"3254":{"position":[[318,17],[375,17],[750,17],[1139,17],[1255,17]]}}}],["connectionclos",{"_index":3757,"t":{"927":{"position":[[1212,17],[1327,17],[1653,16],[1736,16]]}}}],["connectionclosedasync",{"_index":3759,"t":{"927":{"position":[[1817,21],[1912,21]]}}}],["connectionclosingasync",{"_index":3758,"t":{"927":{"position":[[1442,22],[1562,22]]}}}],["connectionconfig",{"_index":7610,"t":{"3215":{"position":[[193,16],[236,16]]},"3226":{"position":[[48,16],[74,16],[209,16]]},"3228":{"position":[[55,16]]},"3254":{"position":[[105,16],[300,16],[347,16],[401,16],[776,16]]},"3275":{"position":[[25,16]]},"3321":{"position":[[326,17],[367,16]]}}}],["connectionendeventdata",{"_index":3755,"t":{"927":{"position":[[835,22],[1002,22],[1695,22],[1864,22]]}}}],["connectionerroreventdata",{"_index":3761,"t":{"927":{"position":[[2034,24],[2203,24]]}}}],["connectioneventdata",{"_index":3753,"t":{"927":{"position":[[333,19],[566,19],[1255,19],[1490,19]]}}}],["connectionfactori",{"_index":5553,"t":{"1801":{"position":[[1039,17],[3244,17]]}}}],["connectionfail",{"_index":3760,"t":{"927":{"position":[[1992,16],[2077,16]]}}}],["connectionfailedasync",{"_index":3762,"t":{"927":{"position":[[2156,21],[2300,21]]}}}],["connectionid",{"_index":7570,"t":{"3189":{"position":[[24,12],[42,12],[82,12]]}}}],["connectionmetadata",{"_index":2782,"t":{"514":{"position":[[435,18],[572,18]]},"516":{"position":[[459,18]]},"1313":{"position":[[575,18],[647,18]]}}}],["connectionnam",{"_index":3333,"t":{"685":{"position":[[210,14]]},"698":{"position":[[84,14],[248,14]]}}}],["connectionopen",{"_index":3751,"t":{"927":{"position":[[290,17],[405,17],[793,16],[876,16]]}}}],["connectionopenedasync",{"_index":3756,"t":{"927":{"position":[[955,21],[1097,21]]}}}],["connectionopeningasync",{"_index":3754,"t":{"927":{"position":[[518,22],[685,22]]}}}],["connectionstr",{"_index":1617,"t":{"220":{"position":[[330,17]]},"247":{"position":[[493,16],[531,16]]},"516":{"position":[[495,17]]},"688":{"position":[[113,17],[331,17]]},"698":{"position":[[296,17]]},"1054":{"position":[[357,17]]},"1056":{"position":[[645,17]]},"1313":{"position":[[51,17],[148,17]]},"2603":{"position":[[47,16]]},"2945":{"position":[[574,16],[802,16]]},"2949":{"position":[[403,16]]},"2951":{"position":[[565,16]]},"3215":{"position":[[289,16]]},"3226":{"position":[[133,16],[157,16],[264,16]]},"3228":{"position":[[112,16],[138,16]]},"3254":{"position":[[124,16],[420,16],[795,16]]},"3275":{"position":[[44,16]]},"3291":{"position":[[577,16],[1544,16]]}}}],["connectionstring4",{"_index":7681,"t":{"3226":{"position":[[288,17]]}}}],["connstr",{"_index":2826,"t":{"526":{"position":[[299,7],[441,7]]},"544":{"position":[[46,7]]}}}],["consist",{"_index":7834,"t":{"3282":{"position":[[142,11]]}}}],["consol",{"_index":56,"t":{"3":{"position":[[491,7],[535,7],[652,7]]},"19":{"position":[[981,7]]},"282":{"position":[[172,7],[315,7]]},"319":{"position":[[259,7],[297,7],[492,7],[548,7]]},"321":{"position":[[479,7]]},"461":{"position":[[503,7],[852,7],[1393,7]]},"490":{"position":[[154,7],[399,7]]},"1424":{"position":[[1046,7],[1126,7],[1275,7],[1373,7],[1505,7],[1621,7]]},"1539":{"position":[[652,7],[883,7],[1304,7],[1545,7]]},"1703":{"position":[[257,7],[434,7]]},"1815":{"position":[[514,7]]},"1817":{"position":[[225,7]]},"1819":{"position":[[782,7]]},"1913":{"position":[[423,7],[933,7]]},"2158":{"position":[[54,7]]},"2261":{"position":[[179,7]]},"2313":{"position":[[400,7]]},"2398":{"position":[[12,7],[180,7]]},"2400":{"position":[[43,7]]},"2402":{"position":[[114,7]]},"2406":{"position":[[267,7],[574,7]]},"2409":{"position":[[51,7],[126,7]]},"2411":{"position":[[39,7],[114,7]]},"2413":{"position":[[39,7],[114,7]]},"2415":{"position":[[254,7],[319,7]]},"2426":{"position":[[60,7],[135,7]]},"2428":{"position":[[62,7],[137,7]]},"2430":{"position":[[46,7],[121,7]]},"2432":{"position":[[46,7],[121,7]]},"2434":{"position":[[258,7],[323,7],[595,7],[660,7]]},"2438":{"position":[[126,7],[191,7]]},"2440":{"position":[[162,7],[227,7],[535,7],[600,7]]},"2442":{"position":[[367,7],[432,7],[599,7],[664,7],[872,7],[937,7],[1155,7],[1220,7],[1389,7],[1454,7],[1646,7],[1711,7],[1874,7],[1939,7]]},"2468":{"position":[[63,7]]},"2470":{"position":[[148,7],[213,7]]},"2472":{"position":[[126,7],[252,7]]},"2486":{"position":[[498,7],[583,7],[666,7],[751,7],[837,7],[923,7]]},"2607":{"position":[[304,7],[714,7]]},"2805":{"position":[[418,7]]},"2856":{"position":[[790,7],[835,7],[1017,7],[1061,7]]},"2864":{"position":[[79,7]]},"2889":{"position":[[434,7],[542,7]]},"2903":{"position":[[85,7],[121,7]]},"3142":{"position":[[306,7]]},"3194":{"position":[[363,7],[716,7],[821,7]]},"3215":{"position":[[513,7]]},"3224":{"position":[[626,7],[742,7]]},"3228":{"position":[[231,7]]},"3254":{"position":[[655,7],[714,7],[1030,7],[1089,7],[1342,7],[1366,7],[1458,7]]},"3464":{"position":[[227,7]]},"3924":{"position":[[2278,7],[2314,7]]},"3936":{"position":[[2043,7]]}}}],["consoleapp1",{"_index":29,"t":{"3":{"position":[[244,11]]}}}],["consoleapp13",{"_index":8827,"t":{"3785":{"position":[[990,12],[1012,12],[1201,12],[1241,12],[1514,12]]},"3806":{"position":[[457,12],[521,12],[600,12],[664,12],[743,12],[807,12],[886,12],[951,12],[1030,12],[1094,12],[1173,12],[1238,12],[1862,12],[1926,12],[2004,12],[2068,12],[2146,12],[2210,12],[2288,12],[2352,12],[2430,12],[2494,12],[2572,12],[2636,12],[3690,12],[3814,12]]},"3808":{"position":[[1124,12],[1242,12],[1360,12],[1481,12],[1602,12],[2345,12],[2469,12],[2593,12],[2717,12],[2841,12]]}}}],["consoleapp32",{"_index":8717,"t":{"3770":{"position":[[523,12],[1905,12],[3666,12],[5210,12]]},"3783":{"position":[[641,12],[761,12],[881,12],[1002,12],[1123,12]]},"3817":{"position":[[668,12],[710,12]]},"3828":{"position":[[992,12],[1097,12],[1215,12]]},"3832":{"position":[[1055,12],[1161,12],[1281,12],[1401,12],[1521,12],[1817,12],[1941,12],[1954,12],[1987,12],[2100,12],[2113,12],[2712,12],[2863,12],[2876,12],[3235,12],[3341,12],[3578,12],[3702,12],[3715,12],[3748,12],[3861,12],[3874,12],[4473,12],[4624,12],[4637,12]]},"3852":{"position":[[144,12]]},"3854":{"position":[[146,12]]},"3876":{"position":[[77,12]]}}}],["consolecolor",{"_index":5010,"t":{"1555":{"position":[[74,12],[122,12],[141,12],[190,12],[209,12],[298,12],[342,12],[361,12],[406,12],[425,12]]}}}],["consoleloggerprovid",{"_index":8082,"t":{"3428":{"position":[[64,21]]}}}],["const",{"_index":1333,"t":{"188":{"position":[[228,5]]},"231":{"position":[[194,5]]},"314":{"position":[[511,5]]},"316":{"position":[[569,5]]},"319":{"position":[[416,5]]},"2482":{"position":[[117,5]]},"2825":{"position":[[117,5]]},"3194":{"position":[[296,5],[322,5],[419,5],[686,5]]}}}],["constraint",{"_index":3864,"t":{"988":{"position":[[455,10],[521,10]]},"1031":{"position":[[61,10],[149,10],[195,10]]},"1368":{"position":[[448,10],[699,10]]}}}],["constructor",{"_index":2121,"t":{"321":{"position":[[313,11]]}}}],["consum",{"_index":5563,"t":{"1801":{"position":[[1511,8],[1578,8],[2008,8]]},"1803":{"position":[[468,8],[997,8],[1150,8],[1253,8],[1501,8],[1510,7],[2303,8],[3618,8],[5303,8]]},"3672":{"position":[[74,8],[93,8]]},"3974":{"position":[[390,8]]}}}],["consumeexcept",{"_index":5597,"t":{"1803":{"position":[[761,16],[1607,16]]}}}],["consumerbuild",{"_index":5593,"t":{"1803":{"position":[[504,15],[542,15],[958,15]]}}}],["consumerconf",{"_index":5615,"t":{"1803":{"position":[[3007,12],[3220,12],[3588,12],[5213,12],[5620,12]]}}}],["consumerconfig",{"_index":5617,"t":{"1803":{"position":[[3205,14],[5232,14]]}}}],["consumerct",{"_index":5591,"t":{"1803":{"position":[[387,11],[1328,11],[1383,11],[1851,11],[1906,11],[1990,11]]}}}],["consumeresult",{"_index":5596,"t":{"1803":{"position":[[658,13]]}}}],["consumertask",{"_index":5589,"t":{"1803":{"position":[[340,12],[1293,12],[1403,12],[1875,12],[1941,12],[1968,12],[2262,12]]}}}],["contact",{"_index":7339,"t":{"3063":{"position":[[1667,7]]},"3065":{"position":[[183,7]]},"3642":{"position":[[257,7]]},"3706":{"position":[[1678,7],[1931,7]]}}}],["contactmodel",{"_index":8078,"t":{"3422":{"position":[[34,12],[102,12],[243,12]]},"3436":{"position":[[41,12],[109,12],[308,12]]}}}],["contain",{"_index":3567,"t":{"773":{"position":[[305,8]]},"881":{"position":[[225,8]]},"960":{"position":[[628,8],[981,8],[1322,8],[1604,8]]},"979":{"position":[[162,8]]},"3222":{"position":[[158,8]]},"3230":{"position":[[60,8]]},"3261":{"position":[[526,8]]},"3432":{"position":[[2579,8]]},"3434":{"position":[[2195,8]]}}}],["containernam",{"_index":4450,"t":{"1488":{"position":[[461,13],[1059,13],[1144,13],[1171,13],[1199,13],[1289,13],[1386,13],[1403,13],[1438,13],[1530,13]]},"1495":{"position":[[461,13]]},"1499":{"position":[[48,13],[122,13],[451,13],[536,13],[563,13],[591,13],[678,13],[715,13],[830,13]]}}}],["containsjob",{"_index":9003,"t":{"3848":{"position":[[32,11],[103,11]]}}}],["containstrigg",{"_index":9035,"t":{"3890":{"position":[[24,15]]}}}],["content",{"_index":263,"t":{"15":{"position":[[345,7],[487,7]]},"17":{"position":[[339,7],[481,7]]},"19":{"position":[[866,7]]},"114":{"position":[[1169,7]]},"773":{"position":[[754,7],[770,7],[789,7]]},"1572":{"position":[[508,7]]},"1729":{"position":[[217,7]]},"1739":{"position":[[512,7],[654,7]]},"1741":{"position":[[22,7]]},"1745":{"position":[[244,7],[318,7]]},"2790":{"position":[[136,7]]},"2792":{"position":[[51,7]]},"3430":{"position":[[427,7],[3115,7],[4418,7]]},"3432":{"position":[[3070,7],[5635,7]]},"3446":{"position":[[1644,7]]},"3500":{"position":[[105,7],[735,7]]},"3522":{"position":[[104,7],[899,7]]},"3563":{"position":[[101,7]]},"3601":{"position":[[716,7]]},"3750":{"position":[[245,7],[337,7]]},"3752":{"position":[[160,7],[278,7],[399,7],[528,7],[686,7],[810,7],[995,7],[1130,7]]},"3916":{"position":[[7371,7],[7628,7],[8023,7],[8319,7],[8787,7]]},"3928":{"position":[[2206,7]]},"3930":{"position":[[1302,7]]},"3936":{"position":[[404,7]]},"3938":{"position":[[632,7]]},"3940":{"position":[[20,7],[62,7],[105,7],[519,7],[784,7]]}}}],["contentresult",{"_index":5888,"t":{"1941":{"position":[[930,13]]}}}],["contentrootpath",{"_index":282,"t":{"19":{"position":[[168,15]]},"1741":{"position":[[237,15],[1046,15],[1899,15]]},"2045":{"position":[[38,15]]}}}],["contenttyp",{"_index":5382,"t":{"1741":{"position":[[460,11],[479,11],[500,11]]},"2098":{"position":[[89,11]]},"3563":{"position":[[227,11],[431,11],[817,11],[949,11],[1131,11],[1276,11]]},"3918":{"position":[[1619,11],[1761,11],[1906,11]]},"3940":{"position":[[861,11]]},"3984":{"position":[[420,11]]},"4006":{"position":[[532,11]]}}}],["contenttypeprovid",{"_index":5974,"t":{"2100":{"position":[[69,19]]}}}],["context",{"_index":712,"t":{"112":{"position":[[442,7],[572,7],[734,7],[1050,7]]},"127":{"position":[[655,7]]},"133":{"position":[[428,7],[578,7]]},"135":{"position":[[368,7],[421,7],[541,7],[588,7]]},"146":{"position":[[424,7],[533,7],[593,7],[602,7],[665,7],[682,7],[773,7],[923,7]]},"528":{"position":[[215,7],[346,7],[371,7]]},"554":{"position":[[53,7]]},"556":{"position":[[118,7]]},"558":{"position":[[187,7]]},"560":{"position":[[70,7]]},"570":{"position":[[757,7]]},"698":{"position":[[67,7],[190,7]]},"706":{"position":[[258,7],[303,7]]},"730":{"position":[[231,7],[302,7]]},"732":{"position":[[154,7],[225,7],[298,7]]},"763":{"position":[[25,7],[329,7]]},"767":{"position":[[19,7],[64,7],[122,7],[167,7],[225,7],[270,7],[331,7],[384,7],[456,7],[517,7],[595,7],[638,7],[704,7],[743,7]]},"933":{"position":[[585,7]]},"1062":{"position":[[32,7],[73,7],[129,7],[169,7]]},"1319":{"position":[[259,7],[304,7]]},"1665":{"position":[[204,7]]},"1753":{"position":[[47,7],[60,7]]},"1795":{"position":[[340,7],[362,7],[602,7],[624,7],[843,7],[870,7],[1199,7],[1224,7],[1613,7],[1638,7],[1832,7],[1857,7]]},"1807":{"position":[[383,7],[435,7],[545,7],[597,7],[626,7],[672,7],[710,7]]},"1809":{"position":[[233,7],[370,7]]},"1811":{"position":[[486,7]]},"1819":{"position":[[359,7],[771,7]]},"1823":{"position":[[492,7]]},"1883":{"position":[[350,7]]},"1913":{"position":[[412,7],[490,7],[710,7],[1056,7],[1139,7]]},"1915":{"position":[[307,7]]},"1919":{"position":[[243,7],[330,7],[565,7]]},"1921":{"position":[[299,7]]},"1925":{"position":[[290,7],[420,7],[583,7],[912,7]]},"1927":{"position":[[189,7],[330,7],[418,7],[493,7],[634,7],[722,7]]},"1929":{"position":[[291,7]]},"1933":{"position":[[254,7],[297,7],[389,7],[525,7],[676,7],[777,7]]},"1935":{"position":[[194,7],[291,7],[343,7]]},"1937":{"position":[[285,7]]},"1941":{"position":[[266,7],[365,7],[448,7],[643,7],[909,7],[980,7]]},"1943":{"position":[[199,7],[287,7]]},"1945":{"position":[[291,7]]},"1951":{"position":[[171,7],[319,7],[389,7],[441,7],[500,7],[603,7],[712,7]]},"1953":{"position":[[199,7],[287,7]]},"1955":{"position":[[53,7],[168,7],[251,7]]},"1961":{"position":[[338,7]]},"2138":{"position":[[31,7]]},"2567":{"position":[[14,7],[33,7]]},"2569":{"position":[[15,7],[46,7]]},"2571":{"position":[[41,7],[60,7]]},"2577":{"position":[[25,7],[64,7],[294,7]]},"2579":{"position":[[307,7],[337,7],[568,7]]},"2581":{"position":[[464,7],[538,7],[991,7],[1065,7]]},"2587":{"position":[[408,7],[451,7]]},"2589":{"position":[[439,7],[487,7],[626,7]]},"2591":{"position":[[82,7]]},"2607":{"position":[[32,7],[465,7]]},"2609":{"position":[[50,7],[111,7]]},"2694":{"position":[[82,7],[229,7]]},"2848":{"position":[[1719,7]]},"2931":{"position":[[32,7],[78,7]]},"2937":{"position":[[1020,7]]},"2947":{"position":[[32,7],[78,7]]},"2961":{"position":[[32,7],[78,7]]},"2973":{"position":[[134,7]]},"3164":{"position":[[17,7]]},"3170":{"position":[[107,7],[198,7]]},"3224":{"position":[[126,7],[149,7],[179,7]]},"3256":{"position":[[286,7]]},"3287":{"position":[[1803,7],[1961,7],[2745,7],[2901,7]]},"3291":{"position":[[1852,7],[1894,7],[1964,7]]},"3450":{"position":[[152,7],[184,7]]},"3452":{"position":[[787,7],[968,7]]},"3454":{"position":[[152,7],[214,7]]},"3466":{"position":[[763,7],[908,7],[940,7],[1081,7]]},"3708":{"position":[[1124,7],[1252,7],[1435,7],[1530,7],[1659,7],[1797,7],[1894,7],[2033,7],[2262,7],[2360,7],[2539,7],[2661,7],[2786,7],[2999,7]]},"3716":{"position":[[260,7],[372,7],[475,7],[585,7]]},"3762":{"position":[[194,7],[264,7],[280,7],[300,7],[325,7]]},"3768":{"position":[[369,7],[439,7],[455,7],[475,7],[500,7]]},"3770":{"position":[[39,7],[241,7],[308,7],[1474,7],[1534,7],[1567,7],[2925,7],[2985,7],[3018,7],[4790,7],[4850,7],[4883,7]]},"3774":{"position":[[526,7],[596,7],[612,7],[632,7],[657,7]]},"3783":{"position":[[248,7],[308,7],[465,7],[481,7],[501,7],[526,7]]},"3789":{"position":[[79,7]]},"3791":{"position":[[366,7],[436,7],[452,7],[472,7],[497,7],[1009,7],[1215,7],[1231,7],[1251,7],[1276,7],[1813,7],[1963,7],[1979,7],[1999,7],[2024,7]]},"3795":{"position":[[238,7],[530,7],[546,7],[566,7],[591,7]]},"3806":{"position":[[3452,7],[3522,7],[3538,7],[3558,7],[3583,7]]},"3808":{"position":[[886,7],[956,7],[972,7],[992,7],[1017,7],[2107,7],[2177,7],[2193,7],[2213,7],[2238,7]]},"3828":{"position":[[308,7],[403,7],[418,7],[514,7],[609,7],[624,7],[648,7],[694,7],[742,7],[757,7]]},"3830":{"position":[[61,7]]},"3832":{"position":[[185,7],[336,7],[573,7],[643,7],[659,7],[679,7],[704,7],[1869,7],[2774,7],[3630,7],[4535,7]]},"3916":{"position":[[3783,7],[3964,7],[8937,7],[8999,7]]},"3918":{"position":[[3119,7],[3172,7]]},"3922":{"position":[[1003,7],[1248,7]]},"3936":{"position":[[1102,7],[1224,7],[1251,7]]},"3956":{"position":[[765,7],[893,7],[1074,7],[1203,7],[1362,7],[1501,7],[1708,7],[1887,7],[2009,7],[2134,7],[2343,7]]},"3982":{"position":[[525,7]]},"3988":{"position":[[222,7]]}}}],["context1",{"_index":7873,"t":{"3291":{"position":[[628,8],[705,8],[853,8],[924,8]]}}}],["context2",{"_index":7874,"t":{"3291":{"position":[[971,8],[1025,8],[1103,8]]}}}],["contexttyp",{"_index":3473,"t":{"734":{"position":[[7017,11],[7161,11]]}}}],["contextus",{"_index":5924,"t":{"2033":{"position":[[4,11]]}}}],["continu",{"_index":5602,"t":{"1803":{"position":[[1560,8]]},"2315":{"position":[[276,8]]},"3702":{"position":[[1600,8]]}}}],["continuewith",{"_index":7090,"t":{"2829":{"position":[[868,12]]}}}],["contractresolv",{"_index":6230,"t":{"2359":{"position":[[346,16]]},"2377":{"position":[[106,16]]}}}],["contribut",{"_index":8532,"t":{"3702":{"position":[[1331,12],[1519,10],[1799,12],[1852,12],[1909,10]]}}}],["control",{"_index":267,"t":{"15":{"position":[[461,7]]},"17":{"position":[[455,7]]},"114":{"position":[[245,10]]},"137":{"position":[[40,10],[72,10],[138,10]]},"141":{"position":[[18,10]]},"417":{"position":[[75,7]]},"419":{"position":[[314,7]]},"435":{"position":[[169,11],[196,10],[537,11],[564,10]]},"627":{"position":[[103,11],[162,10]]},"1387":{"position":[[77,7]]},"1392":{"position":[[167,10]]},"1408":{"position":[[628,11],[655,10]]},"1410":{"position":[[643,11],[670,10]]},"1412":{"position":[[1924,11],[1951,10]]},"1414":{"position":[[582,11],[609,10]]},"1570":{"position":[[26,10]]},"1572":{"position":[[204,11],[247,10],[371,11],[398,10]]},"1576":{"position":[[161,10]]},"1592":{"position":[[50,10]]},"1598":{"position":[[74,10]]},"1617":{"position":[[176,10],[671,10],[935,10],[1158,10]]},"1619":{"position":[[152,10],[180,10],[215,10]]},"1661":{"position":[[465,10],[763,10]]},"1663":{"position":[[329,11]]},"1665":{"position":[[12,10]]},"1739":{"position":[[628,7]]},"1909":{"position":[[209,10],[641,10],[1043,10]]},"1913":{"position":[[151,11],[999,10]]},"1925":{"position":[[31,11]]},"1933":{"position":[[31,11]]},"1941":{"position":[[63,11],[506,10]]},"1947":{"position":[[195,11]]},"1961":{"position":[[472,10]]},"1965":{"position":[[67,11]]},"2235":{"position":[[94,10],[158,10]]},"2551":{"position":[[66,10]]},"2713":{"position":[[517,11],[544,10],[948,11],[975,10],[1834,11],[1861,10]]},"2790":{"position":[[213,10]]},"2995":{"position":[[52,7]]},"3023":{"position":[[462,10],[760,10]]},"3144":{"position":[[607,10]]},"3162":{"position":[[66,10]]},"3168":{"position":[[132,10]]},"3397":{"position":[[942,11],[981,10]]},"3446":{"position":[[720,10]]},"3452":{"position":[[3574,10]]},"3575":{"position":[[703,10]]},"3581":{"position":[[493,10]]},"3583":{"position":[[694,10]]},"3686":{"position":[[797,11],[840,10]]},"3916":{"position":[[6570,10]]},"3928":{"position":[[1295,10]]},"3936":{"position":[[500,10]]},"3966":{"position":[[1842,10]]},"3986":{"position":[[1630,10]]},"3996":{"position":[[662,10]]}}}],["controlleractiondescriptor",{"_index":720,"t":{"112":{"position":[[600,26]]},"1913":{"position":[[518,26]]},"1925":{"position":[[448,26]]},"1933":{"position":[[342,26],[417,26]]},"1941":{"position":[[318,26],[393,26]]},"3454":{"position":[[185,26],[242,26]]},"3916":{"position":[[8970,26],[9027,26]]}}}],["controlleractioninvok",{"_index":8227,"t":{"3452":{"position":[[3653,23],[3717,23],[3797,23],[3866,23]]},"3916":{"position":[[6649,23],[6713,23],[6793,23],[6862,23]]}}}],["controllerbas",{"_index":353,"t":{"26":{"position":[[2,14]]},"435":{"position":[[244,14],[612,14]]},"1408":{"position":[[718,14]]},"1410":{"position":[[733,14]]},"1412":{"position":[[2013,14]]},"1414":{"position":[[671,14]]},"1572":{"position":[[445,14]]},"1576":{"position":[[50,14]]},"1580":{"position":[[154,14],[263,14]]},"1587":{"position":[[173,14]]},"1600":{"position":[[6,14]]},"1663":{"position":[[28,14],[65,14],[227,14],[372,14]]},"1795":{"position":[[1987,14]]},"2235":{"position":[[2,14],[169,14]]},"2713":{"position":[[592,14],[1023,14],[1909,14]]},"3397":{"position":[[1029,14]]}}}],["controllerend",{"_index":5123,"t":{"1611":{"position":[[109,13],[517,13],[575,13]]},"4002":{"position":[[260,13]]}}}],["controllerfeatureprovid",{"_index":5078,"t":{"1587":{"position":[[72,25]]}}}],["controllerfilterscontrol",{"_index":5906,"t":{"1961":{"position":[[442,27]]}}}],["controllernam",{"_index":5880,"t":{"1941":{"position":[[471,14]]},"3452":{"position":[[1052,14]]},"3916":{"position":[[4048,14]]}}}],["controllersservicecompon",{"_index":2330,"t":{"373":{"position":[[101,27],[191,27]]}}}],["controllerstart",{"_index":5122,"t":{"1611":{"position":[[78,15],[462,15]]}}}],["controllertyp",{"_index":5834,"t":{"1913":{"position":[[561,14],[766,14],[1028,14]]}}}],["controllertypeinfo",{"_index":5835,"t":{"1913":{"position":[[596,18]]}}}],["controllertypenam",{"_index":8186,"t":{"3452":{"position":[[1085,18]]},"3916":{"position":[[4081,18]]}}}],["conveni",{"_index":7709,"t":{"3234":{"position":[[421,10]]}}}],["convert",{"_index":5386,"t":{"1741":{"position":[[1181,7]]},"2361":{"position":[[154,10]]},"2379":{"position":[[188,10],[306,10],[425,9],[528,10]]},"2381":{"position":[[171,10],[249,10],[382,10],[460,10]]},"2383":{"position":[[89,7],[555,10]]}}}],["converttodbparamet",{"_index":10082,"t":{"3984":{"position":[[1044,21]]}}}],["converttojson",{"_index":8711,"t":{"3770":{"position":[[47,13],[316,13],[1254,13],[1280,13],[1617,13],[1666,13]]},"3785":{"position":[[79,13]]},"3793":{"position":[[234,13]]},"3812":{"position":[[79,13]]},"3821":{"position":[[92,13]]},"3830":{"position":[[331,13]]},"3896":{"position":[[19,13]]}}}],["converttomonitor",{"_index":8762,"t":{"3770":{"position":[[4564,16],[4593,16],[4933,16],[4985,16]]},"3785":{"position":[[1448,16]]},"3812":{"position":[[2342,16]]}}}],["converttosql",{"_index":8756,"t":{"3770":{"position":[[2707,12],[2732,12],[3068,12],[3164,12],[3286,12]]},"3785":{"position":[[431,12],[569,12],[711,12]]},"3812":{"position":[[707,12],[843,12],[983,12]]}}}],["cooki",{"_index":869,"t":{"121":{"position":[[101,6],[134,6]]},"125":{"position":[[55,6],[66,7]]},"129":{"position":[[9,7],[602,6]]},"423":{"position":[[88,6]]},"1672":{"position":[[68,7]]},"2544":{"position":[[77,7]]},"2547":{"position":[[115,7]]},"2843":{"position":[[64,6]]},"2846":{"position":[[3,6],[24,7],[64,7],[86,7],[200,7],[242,7],[271,7],[372,6],[401,6]]},"2848":{"position":[[260,6],[292,6]]},"3603":{"position":[[102,7],[302,7]]},"3912":{"position":[[1076,7],[2585,7]]}}}],["cookieauthenticationdefault",{"_index":947,"t":{"125":{"position":[[107,28],[169,28]]},"129":{"position":[[89,28],[173,28],[238,28]]}}}],["cookieopt",{"_index":7107,"t":{"2846":{"position":[[111,13]]}}}],["cookiepolicyopt",{"_index":7126,"t":{"2848":{"position":[[1656,19]]}}}],["copi",{"_index":4156,"t":{"1377":{"position":[[158,4]]},"1379":{"position":[[552,4]]},"3702":{"position":[[2401,4]]}}}],["copyright",{"_index":4999,"t":{"1551":{"position":[[657,9],[702,9]]},"2261":{"position":[[142,9],[333,9]]},"3464":{"position":[[190,9],[381,9]]},"3702":{"position":[[2203,9]]},"3936":{"position":[[2007,9],[2192,9]]}}}],["copytoasync",{"_index":305,"t":{"19":{"position":[[584,11]]},"1741":{"position":[[752,11],[2352,11]]}}}],["cor",{"_index":2451,"t":{"408":{"position":[[8,4],[51,4],[80,4],[102,4]]},"411":{"position":[[5,4]]},"415":{"position":[[58,4]]},"419":{"position":[[290,4]]},"2991":{"position":[[64,4]]},"3978":{"position":[[378,4]]}}}],["core",{"_index":342,"t":{"21":{"position":[[75,4],[135,4]]},"23":{"position":[[57,4],[117,4]]},"112":{"position":[[316,4]]},"127":{"position":[[532,4]]},"133":{"position":[[124,4],[271,4]]},"135":{"position":[[114,4],[246,4]]},"146":{"position":[[41,4],[250,4]]},"154":{"position":[[54,4]]},"190":{"position":[[108,4],[179,5],[315,4],[630,4],[850,4],[1071,4],[1299,4]]},"202":{"position":[[19,4]]},"204":{"position":[[503,4]]},"210":{"position":[[314,4]]},"212":{"position":[[200,4],[489,4]]},"216":{"position":[[479,4],[511,4],[704,4]]},"220":{"position":[[15,4],[244,4],[306,4]]},"237":{"position":[[1390,4]]},"239":{"position":[[61,4]]},"251":{"position":[[22,4],[103,4]]},"257":{"position":[[55,4]]},"310":{"position":[[749,4]]},"316":{"position":[[371,4]]},"321":{"position":[[66,4]]},"336":{"position":[[7,4]]},"338":{"position":[[12,4],[210,4]]},"411":{"position":[[213,4]]},"423":{"position":[[180,4]]},"425":{"position":[[54,4]]},"429":{"position":[[57,4]]},"435":{"position":[[1170,4]]},"439":{"position":[[8,4],[79,4]]},"441":{"position":[[10,4]]},"451":{"position":[[269,4]]},"453":{"position":[[7,4]]},"461":{"position":[[8,4],[128,4]]},"465":{"position":[[52,4]]},"500":{"position":[[84,4]]},"502":{"position":[[200,4]]},"508":{"position":[[101,4]]},"510":{"position":[[101,4],[478,4]]},"514":{"position":[[23,4],[154,4]]},"516":{"position":[[101,4]]},"518":{"position":[[101,4]]},"522":{"position":[[52,4]]},"524":{"position":[[83,4],[233,4]]},"528":{"position":[[47,4],[91,4],[161,4]]},"534":{"position":[[288,4]]},"536":{"position":[[51,4]]},"546":{"position":[[127,4],[250,4]]},"570":{"position":[[306,4]]},"572":{"position":[[222,4]]},"587":{"position":[[10,4],[1027,4]]},"595":{"position":[[11,4],[106,4]]},"617":{"position":[[2187,4],[2282,4]]},"653":{"position":[[317,4]]},"679":{"position":[[89,4]]},"683":{"position":[[26,4]]},"685":{"position":[[173,4]]},"694":{"position":[[46,4]]},"696":{"position":[[1404,4],[2585,4],[3507,4],[4189,4]]},"698":{"position":[[357,4],[904,4]]},"708":{"position":[[141,4]]},"713":{"position":[[423,4]]},"734":{"position":[[437,4]]},"736":{"position":[[49,4]]},"745":{"position":[[101,4]]},"747":{"position":[[176,4]]},"773":{"position":[[122,4],[142,4]]},"826":{"position":[[3,4]]},"830":{"position":[[17,4]]},"832":{"position":[[140,4]]},"836":{"position":[[3,4],[315,4]]},"844":{"position":[[226,4]]},"846":{"position":[[363,4],[1003,4],[1061,4]]},"851":{"position":[[175,4],[828,4],[1231,4],[1740,4]]},"877":{"position":[[201,4]]},"879":{"position":[[73,4],[131,4]]},"887":{"position":[[9,4],[175,4]]},"889":{"position":[[188,4]]},"897":{"position":[[540,4],[563,4]]},"941":{"position":[[76,4]]},"945":{"position":[[186,4]]},"947":{"position":[[214,4],[708,4]]},"1054":{"position":[[101,4]]},"1056":{"position":[[13,4],[120,4],[519,4]]},"1058":{"position":[[13,4],[100,4]]},"1060":{"position":[[178,4]]},"1064":{"position":[[13,4]]},"1066":{"position":[[275,4],[615,4]]},"1109":{"position":[[334,4]]},"1145":{"position":[[96,4]]},"1153":{"position":[[49,4]]},"1309":{"position":[[46,4],[88,4],[153,4],[704,4],[727,4]]},"1311":{"position":[[101,4]]},"1313":{"position":[[804,4]]},"1317":{"position":[[23,4],[154,4]]},"1353":{"position":[[284,4]]},"1364":{"position":[[48,4]]},"1368":{"position":[[51,4]]},"1379":{"position":[[268,4]]},"1389":{"position":[[285,4]]},"1403":{"position":[[93,4]]},"1408":{"position":[[63,4]]},"1410":{"position":[[69,4]]},"1414":{"position":[[83,4],[517,4]]},"1418":{"position":[[317,4]]},"1440":{"position":[[45,4]]},"1452":{"position":[[7,4]]},"1474":{"position":[[15,4]]},"1503":{"position":[[57,4]]},"1516":{"position":[[62,4]]},"1547":{"position":[[485,4]]},"1549":{"position":[[556,4]]},"1566":{"position":[[399,4],[417,4]]},"1572":{"position":[[78,4]]},"1574":{"position":[[32,4]]},"1576":{"position":[[10,4]]},"1578":{"position":[[19,4],[65,4]]},"1580":{"position":[[13,4],[98,4]]},"1582":{"position":[[85,4],[180,4]]},"1609":{"position":[[14,4]]},"1639":{"position":[[13,4]]},"1663":{"position":[[582,4]]},"1665":{"position":[[362,4]]},"1755":{"position":[[575,4],[1025,4]]},"1763":{"position":[[259,4]]},"1767":{"position":[[48,4]]},"1769":{"position":[[48,4]]},"1771":{"position":[[48,4]]},"1773":{"position":[[48,4]]},"1777":{"position":[[8,4]]},"1779":{"position":[[154,4]]},"1781":{"position":[[154,4]]},"1801":{"position":[[426,4]]},"1803":{"position":[[137,4],[2484,4]]},"1843":{"position":[[11,4],[106,4]]},"1867":{"position":[[354,4],[449,4]]},"1892":{"position":[[23,4]]},"1905":{"position":[[8,4]]},"1947":{"position":[[186,4]]},"1965":{"position":[[58,4]]},"1969":{"position":[[171,4],[184,4],[215,4]]},"1983":{"position":[[83,4],[96,4],[127,4]]},"2006":{"position":[[83,4],[96,4],[127,4]]},"2231":{"position":[[57,4],[117,4]]},"2233":{"position":[[8,4]]},"2255":{"position":[[47,4]]},"2264":{"position":[[104,4]]},"2311":{"position":[[16,4]]},"2313":{"position":[[122,4]]},"2317":{"position":[[11,4]]},"2343":{"position":[[52,4]]},"2357":{"position":[[455,4]]},"2379":{"position":[[638,4]]},"2480":{"position":[[25,4]]},"2486":{"position":[[226,4]]},"2499":{"position":[[33,4]]},"2538":{"position":[[209,4]]},"2551":{"position":[[18,4]]},"2557":{"position":[[10,4],[76,4]]},"2561":{"position":[[53,4]]},"2564":{"position":[[220,4]]},"2573":{"position":[[245,4]]},"2593":{"position":[[27,4]]},"2686":{"position":[[60,4]]},"2701":{"position":[[12,4]]},"2711":{"position":[[29,4],[196,4]]},"2717":{"position":[[8,4],[463,4]]},"2723":{"position":[[132,4]]},"2731":{"position":[[89,4]]},"2737":{"position":[[52,4]]},"2749":{"position":[[841,4]]},"2774":{"position":[[67,4],[84,4],[188,4],[221,4],[238,4],[259,4],[355,4],[505,4]]},"2803":{"position":[[5,4]]},"2805":{"position":[[243,4]]},"2807":{"position":[[90,4]]},"2881":{"position":[[870,4]]},"2897":{"position":[[741,4]]},"2925":{"position":[[23,4],[164,4]]},"2927":{"position":[[112,4]]},"2929":{"position":[[23,4],[205,4]]},"2933":{"position":[[158,4]]},"2935":{"position":[[229,4]]},"2937":{"position":[[326,4]]},"2941":{"position":[[23,4],[164,4]]},"2943":{"position":[[112,4]]},"2945":{"position":[[23,4],[205,4]]},"2949":{"position":[[147,4]]},"2951":{"position":[[144,4]]},"2955":{"position":[[23,4],[164,4]]},"2957":{"position":[[112,4]]},"2959":{"position":[[23,4],[205,4]]},"2963":{"position":[[145,4]]},"2971":{"position":[[83,4]]},"3063":{"position":[[456,4]]},"3069":{"position":[[7,4],[347,4]]},"3071":{"position":[[884,4],[920,4],[944,4]]},"3126":{"position":[[577,4]]},"3131":{"position":[[130,4],[218,4],[226,4],[246,4]]},"3138":{"position":[[211,4]]},"3142":{"position":[[8,4]]},"3144":{"position":[[245,4]]},"3148":{"position":[[82,4]]},"3154":{"position":[[135,4]]},"3156":{"position":[[197,4]]},"3158":{"position":[[188,4]]},"3189":{"position":[[466,4]]},"3205":{"position":[[72,4]]},"3254":{"position":[[1714,4]]},"3291":{"position":[[1732,4]]},"3298":{"position":[[47,4]]},"3319":{"position":[[18,4]]},"3321":{"position":[[217,4]]},"3428":{"position":[[42,4]]},"3430":{"position":[[1854,4]]},"3434":{"position":[[157,4]]},"3440":{"position":[[78,4]]},"3452":{"position":[[530,4]]},"3458":{"position":[[244,4],[635,4]]},"3468":{"position":[[11,4],[341,4]]},"3472":{"position":[[52,4]]},"3605":{"position":[[60,4]]},"3630":{"position":[[73,4],[266,4]]},"3636":{"position":[[40,4]]},"3702":{"position":[[1625,4]]},"3704":{"position":[[94,4]]},"3706":{"position":[[448,4]]},"3729":{"position":[[11,4]]},"3914":{"position":[[3515,4]]},"3916":{"position":[[3526,4]]},"3924":{"position":[[3622,4]]},"3932":{"position":[[185,4],[598,4]]},"3934":{"position":[[2985,4],[3049,4]]},"3964":{"position":[[65,4]]},"3984":{"position":[[657,4]]}}}],["coreclr",{"_index":1367,"t":{"190":{"position":[[327,7]]}}}],["corefx",{"_index":1371,"t":{"190":{"position":[[351,6]]}}}],["corelib",{"_index":8206,"t":{"3452":{"position":[[2661,7]]},"3916":{"position":[[5657,7]]}}}],["coreproject",{"_index":3331,"t":{"685":{"position":[[156,11]]},"698":{"position":[[875,11]]}}}],["corert",{"_index":1374,"t":{"190":{"position":[[402,6],[685,6],[902,6],[1128,6],[1353,6]]}}}],["corert30",{"_index":1373,"t":{"190":{"position":[[386,8]]}}}],["correctli",{"_index":5766,"t":{"1887":{"position":[[419,9]]}}}],["corsaccessor",{"_index":2459,"t":{"411":{"position":[[17,12]]}}}],["corsaccessorset",{"_index":2462,"t":{"413":{"position":[[103,20]]},"415":{"position":[[0,20]]},"417":{"position":[[138,20]]},"423":{"position":[[289,20]]},"2991":{"position":[[0,20]]},"2993":{"position":[[3,20]]},"2995":{"position":[[115,20]]},"3924":{"position":[[312,20]]}}}],["corsservicecompon",{"_index":2225,"t":{"340":{"position":[[557,20],[601,20],[1632,20]]}}}],["cosmo",{"_index":635,"t":{"102":{"position":[[101,6]]},"698":{"position":[[543,6],[580,6]]},"803":{"position":[[17,6]]},"805":{"position":[[17,6]]},"895":{"position":[[17,6]]},"897":{"position":[[116,6],[153,6]]},"899":{"position":[[314,6],[367,6]]},"1105":{"position":[[17,6]]},"1309":{"position":[[280,6],[317,6]]}}}],["cost",{"_index":3181,"t":{"608":{"position":[[301,4]]},"973":{"position":[[66,4],[126,4],[189,4],[273,4],[344,4],[418,4]]},"975":{"position":[[70,4],[134,4],[201,4],[289,4],[364,4],[442,4]]}}}],["count",{"_index":312,"t":{"19":{"position":[[669,5],[683,5],[728,5]]},"550":{"position":[[338,5]]},"866":{"position":[[271,5],[515,5],[525,5]]},"881":{"position":[[74,5]]},"883":{"position":[[312,5]]},"967":{"position":[[29,5],[48,5],[68,5],[87,5],[121,5],[149,5],[183,5],[228,5],[248,5],[289,5],[327,5],[377,5],[441,5],[514,5],[590,5]]},"1557":{"position":[[796,5]]},"1741":{"position":[[2437,5],[2451,5]]},"2319":{"position":[[186,5],[230,5]]},"2398":{"position":[[117,5],[168,5]]},"2400":{"position":[[31,5]]},"2402":{"position":[[102,5]]},"2406":{"position":[[134,5],[258,5],[430,5],[565,5]]},"2409":{"position":[[39,5],[153,5]]},"2411":{"position":[[27,5],[141,5]]},"2413":{"position":[[27,5],[141,5]]},"2415":{"position":[[136,5],[245,5],[346,5]]},"2426":{"position":[[48,5],[162,5]]},"2428":{"position":[[50,5],[164,5]]},"2430":{"position":[[34,5],[148,5]]},"2432":{"position":[[34,5],[148,5]]},"2434":{"position":[[133,5],[249,5],[350,5],[459,5],[586,5],[687,5]]},"2438":{"position":[[116,5],[218,5]]},"2440":{"position":[[150,5],[254,5],[523,5],[627,5]]},"2442":{"position":[[358,5],[459,5],[590,5],[691,5],[863,5],[964,5],[1146,5],[1247,5],[1380,5],[1481,5],[1637,5],[1738,5],[1865,5],[1966,5]]},"2470":{"position":[[139,5],[240,5]]},"2476":{"position":[[26,5]]},"2478":{"position":[[139,5]]},"2856":{"position":[[1901,5],[1945,5]]},"3783":{"position":[[331,5],[367,5],[407,5],[415,5],[433,5],[544,5]]},"3791":{"position":[[515,5]]}}}],["countasync",{"_index":3839,"t":{"967":{"position":[[352,10],[402,10],[475,10],[565,10],[637,10]]}}}],["coupl",{"_index":4216,"t":{"1389":{"position":[[113,6],[142,6]]}}}],["cp",{"_index":4464,"t":{"1488":{"position":[[937,2]]},"1495":{"position":[[881,2]]}}}],["cpu",{"_index":627,"t":{"102":{"position":[[34,3]]},"190":{"position":[[122,3],[149,3]]},"2749":{"position":[[399,3]]},"3078":{"position":[[153,3]]},"3080":{"position":[[967,3]]},"3088":{"position":[[111,3]]},"3914":{"position":[[2931,3]]},"3918":{"position":[[3792,3],[3834,3]]},"3948":{"position":[[353,3]]},"3950":{"position":[[927,3]]}}}],["cr",{"_index":5601,"t":{"1803":{"position":[[1496,2],[1548,2],[1593,2],[3707,2],[3794,2]]},"2559":{"position":[[2169,2]]}}}],["creat",{"_index":44,"t":{"3":{"position":[[342,6],[878,6]]},"19":{"position":[[549,6]]},"188":{"position":[[319,6],[360,6]]},"247":{"position":[[182,6],[298,6]]},"730":{"position":[[204,6]]},"732":{"position":[[127,6]]},"820":{"position":[[0,6]]},"828":{"position":[[0,6]]},"836":{"position":[[284,7]]},"1125":{"position":[[74,6]]},"1185":{"position":[[0,6]]},"1214":{"position":[[210,6]]},"1362":{"position":[[0,6]]},"1383":{"position":[[277,6]]},"1438":{"position":[[48,6]]},"1566":{"position":[[671,6]]},"1594":{"position":[[24,6]]},"1596":{"position":[[17,6]]},"1631":{"position":[[103,6]]},"1661":{"position":[[957,6]]},"1703":{"position":[[185,6]]},"1705":{"position":[[79,6],[118,6]]},"1707":{"position":[[172,6]]},"1709":{"position":[[59,6]]},"1711":{"position":[[264,6],[365,6]]},"1741":{"position":[[721,6],[1496,6],[2317,6]]},"1795":{"position":[[272,6],[494,6],[2186,6],[2304,6],[2430,6]]},"1797":{"position":[[833,6]]},"1811":{"position":[[418,6]]},"2165":{"position":[[32,6],[92,6]]},"2182":{"position":[[13,6]]},"2331":{"position":[[452,6],[555,6],[638,6]]},"2476":{"position":[[45,6]]},"2478":{"position":[[155,6]]},"2551":{"position":[[203,6]]},"2836":{"position":[[881,6]]},"3023":{"position":[[954,6]]},"3522":{"position":[[1377,6]]},"3774":{"position":[[149,6]]},"3779":{"position":[[198,6],[259,6],[320,6],[402,6]]},"3781":{"position":[[120,6]]},"3802":{"position":[[199,6],[271,6],[348,6],[446,6]]},"3806":{"position":[[269,6],[287,6],[365,6],[1660,6],[1678,6],[1759,6]]},"3808":{"position":[[489,6],[580,6]]},"3817":{"position":[[210,6],[312,6],[331,6]]},"3842":{"position":[[706,6],[831,6]]},"3844":{"position":[[1266,6],[1284,6],[1306,6]]},"3916":{"position":[[1597,6],[1703,6],[1803,6],[7289,6],[7558,6]]},"3918":{"position":[[2155,6]]},"3922":{"position":[[426,6],[548,6]]},"3924":{"position":[[756,6]]},"3936":{"position":[[1407,6],[1472,6]]},"3950":{"position":[[312,6]]},"3964":{"position":[[1012,6]]},"3974":{"position":[[61,6],[96,6]]}}}],["createargumentcallsit",{"_index":3445,"t":{"734":{"position":[[984,23],[1838,23],[2692,23],[3687,23],[4541,23],[5395,23]]}}}],["createasync",{"_index":6029,"t":{"2182":{"position":[[103,11]]},"3922":{"position":[[465,11],[621,11]]}}}],["createbound",{"_index":5559,"t":{"1801":{"position":[[1260,13]]},"1803":{"position":[[3454,13]]}}}],["createbuild",{"_index":2606,"t":{"455":{"position":[[752,13]]},"461":{"position":[[664,13]]},"1991":{"position":[[29,13]]},"1995":{"position":[[108,13]]},"2014":{"position":[[29,13]]},"2018":{"position":[[108,13]]},"2255":{"position":[[319,13]]},"2674":{"position":[[29,13]]},"2776":{"position":[[509,13]]},"2862":{"position":[[264,13]]},"3075":{"position":[[90,13]]},"3399":{"position":[[426,13],[754,13]]},"3430":{"position":[[833,13],[2125,13]]},"3932":{"position":[[2502,13]]}}}],["createcallsit",{"_index":3458,"t":{"734":{"position":[[1569,14],[2423,14],[3418,14],[4272,14],[5126,14],[5980,14]]}}}],["createcli",{"_index":8036,"t":{"3397":{"position":[[757,12]]},"3575":{"position":[[960,12]]},"3579":{"position":[[26,12]]}}}],["createcommand",{"_index":7879,"t":{"3291":{"position":[[1633,13]]}}}],["createconnect",{"_index":5560,"t":{"1801":{"position":[[1342,16]]}}}],["createconstructorcallsit",{"_index":3451,"t":{"734":{"position":[[1197,25],[2051,25],[2905,25],[3900,25],[4754,25],[5608,25]]}}}],["created_dt",{"_index":3629,"t":{"836":{"position":[[284,10]]}}}],["createddt",{"_index":3624,"t":{"836":{"position":[[117,9]]},"977":{"position":[[125,9],[152,9]]}}}],["createdefaultbuild",{"_index":1511,"t":{"202":{"position":[[375,20]]},"455":{"position":[[441,20]]},"461":{"position":[[1155,20]]},"1667":{"position":[[120,20]]},"1977":{"position":[[269,20]]},"2269":{"position":[[360,20]]},"2776":{"position":[[348,20]]},"2813":{"position":[[1007,20]]},"2819":{"position":[[365,20]]},"2821":{"position":[[396,20]]},"2836":{"position":[[455,20],[1668,20]]},"2862":{"position":[[87,20]]},"3166":{"position":[[263,20]]},"3430":{"position":[[542,20],[1994,20]]}}}],["createdependententri",{"_index":1719,"t":{"237":{"position":[[130,22]]}}}],["createdirectori",{"_index":285,"t":{"19":{"position":[[239,15]]},"1741":{"position":[[309,15],[1118,15],[1970,15]]}}}],["createdoto",{"_index":5509,"t":{"1795":{"position":[[2214,10],[2363,10]]}}}],["createdtim",{"_index":826,"t":{"114":{"position":[[1365,11]]},"570":{"position":[[1908,11],[2253,11],[2544,11]]},"696":{"position":[[1642,11],[3629,11]]},"708":{"position":[[235,11]]},"747":{"position":[[296,11]]},"824":{"position":[[119,11]]},"844":{"position":[[310,11]]},"851":{"position":[[269,11],[1329,11],[1830,11]]},"877":{"position":[[376,11],[1400,11],[1496,11],[1604,11],[1712,11],[1820,11]]},"1763":{"position":[[159,11]]},"1771":{"position":[[107,11]]},"1775":{"position":[[3780,11]]},"1797":{"position":[[512,11]]},"2929":{"position":[[521,11],[692,11]]},"2945":{"position":[[521,11],[749,11]]},"2959":{"position":[[521,11],[718,11]]},"3446":{"position":[[1840,11]]},"3452":{"position":[[2915,11]]},"3916":{"position":[[5911,11]]},"3928":{"position":[[2402,11]]}}}],["createentri",{"_index":1724,"t":{"237":{"position":[[265,11]]}}}],["createhostbuild",{"_index":1509,"t":{"202":{"position":[[260,17],[328,17]]},"455":{"position":[[332,17],[400,17]]},"461":{"position":[[1046,17],[1114,17]]},"1667":{"position":[[73,17]]},"1977":{"position":[[160,17],[228,17]]},"2269":{"position":[[245,17],[313,17]]},"2776":{"position":[[233,17],[301,17]]},"2813":{"position":[[898,17],[966,17]]},"2819":{"position":[[256,17],[324,17]]},"2821":{"position":[[287,17],[355,17]]},"2836":{"position":[[346,17],[414,17],[1559,17],[1627,17]]},"3166":{"position":[[75,17],[222,17]]}}}],["createhttpcli",{"_index":8335,"t":{"3543":{"position":[[752,16]]}}}],["createinst",{"_index":6132,"t":{"2315":{"position":[[354,14]]}}}],["createlinkedtokensourc",{"_index":8837,"t":{"3795":{"position":[[354,23]]}}}],["createlogg",{"_index":6014,"t":{"2171":{"position":[[27,12]]},"3422":{"position":[[157,12]]},"3424":{"position":[[60,12]]},"3436":{"position":[[222,12]]},"3914":{"position":[[2530,12]]}}}],["createloggerfactori",{"_index":6016,"t":{"2171":{"position":[[89,19]]},"3424":{"position":[[122,19]]},"3920":{"position":[[393,19]]}}}],["createmodel",{"_index":5561,"t":{"1801":{"position":[[1413,11]]}}}],["createmultipl",{"_index":8315,"t":{"3522":{"position":[[1541,14]]},"3916":{"position":[[7901,14],[8209,14]]},"3918":{"position":[[2319,14]]}}}],["createorupdatetodo",{"_index":5488,"t":{"1795":{"position":[[554,18]]}}}],["createreadstream",{"_index":5360,"t":{"1729":{"position":[[78,16]]}}}],["createref",{"_index":6034,"t":{"2186":{"position":[[62,9]]}}}],["createscop",{"_index":2843,"t":{"530":{"position":[[506,11]]},"1039":{"position":[[506,11]]},"1434":{"position":[[34,11]]},"1436":{"position":[[38,11]]},"1811":{"position":[[85,11],[535,11]]},"1823":{"position":[[371,11]]},"2589":{"position":[[511,11]]},"2831":{"position":[[502,11]]},"3791":{"position":[[1095,11],[1745,11]]}}}],["createserviceaccessor",{"_index":3461,"t":{"734":{"position":[[6235,21]]}}}],["createtim",{"_index":7640,"t":{"3222":{"position":[[292,10]]},"3226":{"position":[[494,10]]},"3230":{"position":[[140,10]]},"3234":{"position":[[511,10]]},"3267":{"position":[[231,10]]},"3269":{"position":[[178,10],[232,10],[316,10],[462,10],[497,10]]}}}],["createtodo",{"_index":5486,"t":{"1795":{"position":[[300,10]]},"1811":{"position":[[446,10]]}}}],["createunitofwork",{"_index":9813,"t":{"3966":{"position":[[525,16]]}}}],["createuow",{"_index":2849,"t":{"530":{"position":[[837,9]]},"1039":{"position":[[838,9]]},"1711":{"position":[[870,9]]},"2182":{"position":[[292,9]]},"2184":{"position":[[13,9]]},"2478":{"position":[[517,9]]},"3922":{"position":[[522,9]]},"3966":{"position":[[553,9]]},"3974":{"position":[[671,9]]},"3976":{"position":[[203,9]]}}}],["createuowasync",{"_index":6032,"t":{"2184":{"position":[[105,14]]},"3922":{"position":[[590,14]]}}}],["createuowref",{"_index":6035,"t":{"2188":{"position":[[62,12]]}}}],["createus",{"_index":5322,"t":{"1703":{"position":[[212,10]]},"1711":{"position":[[291,10]]}}}],["creditcard",{"_index":3076,"t":{"587":{"position":[[769,10]]}}}],["cref",{"_index":2252,"t":{"344":{"position":[[249,4]]},"346":{"position":[[246,4],[310,4]]},"348":{"position":[[272,4]]},"1801":{"position":[[2181,4]]},"1803":{"position":[[1078,4],[4143,4]]},"3071":{"position":[[450,4],[692,4]]},"3287":{"position":[[1874,4],[2182,4],[2498,4],[2819,4]]},"3688":{"position":[[205,4],[318,4],[736,4],[770,4]]},"3940":{"position":[[1093,4],[1206,4]]}}}],["critic",{"_index":6018,"t":{"2171":{"position":[[262,8],[272,8]]},"3416":{"position":[[351,8]]},"3424":{"position":[[295,8],[305,8]]}}}],["cron",{"_index":2626,"t":{"467":{"position":[[41,4]]},"469":{"position":[[0,4],[55,4]]},"480":{"position":[[8,4]]},"484":{"position":[[6,4]]},"486":{"position":[[14,4],[37,4],[58,4]]},"488":{"position":[[42,4]]},"494":{"position":[[695,4]]},"2208":{"position":[[51,4]]},"2228":{"position":[[6,4]]},"2393":{"position":[[114,4],[129,4]]},"2418":{"position":[[0,4],[55,4],[181,4]]},"2422":{"position":[[8,4]]},"2424":{"position":[[7,4]]},"2440":{"position":[[468,4]]},"2444":{"position":[[61,4],[206,4]]},"2448":{"position":[[51,4]]},"2827":{"position":[[9,4],[30,4]]},"3766":{"position":[[218,4]]},"3774":{"position":[[293,4]]},"3804":{"position":[[37,4],[263,4],[316,4],[571,4],[618,4]]},"3808":{"position":[[181,4],[225,4],[689,4]]},"3910":{"position":[[417,4],[2531,4]]},"3946":{"position":[[370,4]]},"3966":{"position":[[1929,4],[1943,4]]},"3972":{"position":[[426,4]]},"3978":{"position":[[66,4]]}}}],["cronexpress",{"_index":6352,"t":{"2444":{"position":[[46,14]]}}}],["cronformat",{"_index":6048,"t":{"2228":{"position":[[157,10]]},"2420":{"position":[[30,10],[66,10],[104,10],[146,10],[190,10],[248,10],[283,10],[331,10],[376,10],[419,10],[466,10],[520,10],[558,10],[617,10],[659,10],[707,10],[762,10],[825,10],[871,10],[924,10],[975,10],[1026,10],[1082,10],[1138,10],[1187,10],[1255,10],[1303,10],[1348,10],[1402,10],[1450,10],[1503,10],[1593,10],[1649,10],[1737,10],[1796,10],[1845,10],[1896,10],[1947,10],[1995,10],[2045,10],[2097,10],[2146,10],[2195,10],[2247,10],[2288,10]]},"2426":{"position":[[177,10],[189,10],[220,10],[266,10],[278,10],[312,10],[324,10]]},"2442":{"position":[[756,10],[769,10]]},"2444":{"position":[[195,10],[220,10],[239,10]]},"3962":{"position":[[242,10]]}}}],["cronnam",{"_index":6335,"t":{"2430":{"position":[[164,8]]},"2432":{"position":[[164,8],[221,8]]}}}],["cronstringformat",{"_index":2641,"t":{"474":{"position":[[60,16]]},"476":{"position":[[60,16]]},"478":{"position":[[65,16]]},"482":{"position":[[34,16],[65,16],[261,16],[290,16]]},"484":{"position":[[35,16],[58,16],[84,16],[129,16],[179,16],[230,16]]},"490":{"position":[[51,16],[255,16]]},"492":{"position":[[268,16]]},"494":{"position":[[793,16],[879,16]]},"2484":{"position":[[268,16]]},"2827":{"position":[[314,16]]},"2829":{"position":[[362,16]]},"3766":{"position":[[242,16]]},"3774":{"position":[[317,16]]},"3804":{"position":[[334,16],[636,16]]},"3808":{"position":[[199,16]]}}}],["crontab",{"_index":2637,"t":{"472":{"position":[[19,7],[29,7],[78,7]]},"474":{"position":[[21,7],[31,7],[110,7]]},"476":{"position":[[21,7],[31,7],[112,7]]},"478":{"position":[[24,7],[34,7],[125,7]]},"480":{"position":[[82,7],[140,7],[191,7],[242,7],[296,7],[355,7],[410,7],[482,7],[530,7],[571,7],[612,7],[656,7],[705,7],[750,7]]},"490":{"position":[[12,7],[22,7],[109,7],[216,7],[226,7],[354,7]]},"492":{"position":[[152,7],[161,7],[229,7],[239,7],[695,7]]},"494":{"position":[[21,7],[73,7],[121,7],[162,7],[203,7],[247,7],[296,7],[341,7],[422,7],[476,7],[553,7],[640,7],[681,7],[721,7],[762,7],[772,7],[830,7],[845,7],[855,7],[916,7]]},"2484":{"position":[[152,7],[161,7],[229,7],[239,7],[701,7]]},"2827":{"position":[[198,7],[207,7],[275,7],[285,7],[747,7]]},"2829":{"position":[[216,7],[225,7],[323,7],[333,7],[931,7]]},"3920":{"position":[[280,7]]}}}],["crontrigg",{"_index":8722,"t":{"3770":{"position":[[775,11],[2207,11],[4024,11],[5483,11],[5569,11]]},"3806":{"position":[[30,11]]}}}],["crossdomain",{"_index":2494,"t":{"419":{"position":[[159,11]]}}}],["crud",{"_index":7775,"t":{"3256":{"position":[[107,4]]}}}],["cryptographi",{"_index":1329,"t":{"188":{"position":[[89,12]]}}}],["cs",{"_index":91,"t":{"5":{"position":[[70,2],[109,2],[119,2]]},"7":{"position":[[66,2],[105,2],[115,2]]},"9":{"position":[[64,2],[104,2]]},"11":{"position":[[37,2],[778,2],[832,2]]},"13":{"position":[[76,2],[413,2]]},"123":{"position":[[28,2]]},"127":{"position":[[56,2]]},"202":{"position":[[50,2],[92,2]]},"204":{"position":[[122,2]]},"206":{"position":[[324,2]]},"216":{"position":[[46,2],[93,2],[132,2],[492,2],[524,2],[1266,2]]},"218":{"position":[[97,2]]},"220":{"position":[[63,2]]},"247":{"position":[[424,2]]},"336":{"position":[[32,2],[73,2],[150,2],[173,2]]},"344":{"position":[[39,2]]},"346":{"position":[[44,2]]},"348":{"position":[[38,2]]},"355":{"position":[[46,2],[66,2],[244,2]]},"371":{"position":[[41,2]]},"455":{"position":[[261,2],[716,2]]},"514":{"position":[[36,2]]},"524":{"position":[[118,2]]},"544":{"position":[[20,2]]},"595":{"position":[[34,2]]},"617":{"position":[[2210,2]]},"696":{"position":[[989,2],[1033,2],[2162,2],[2214,2],[3092,2],[3136,2],[3771,2],[3818,2]]},"730":{"position":[[37,2]]},"734":{"position":[[7769,2]]},"1317":{"position":[[36,2]]},"1582":{"position":[[108,2]]},"1667":{"position":[[10,2]]},"1685":{"position":[[197,2]]},"1701":{"position":[[41,2]]},"1753":{"position":[[23,2]]},"1755":{"position":[[787,2]]},"1795":{"position":[[2520,2]]},"1843":{"position":[[34,2]]},"1867":{"position":[[377,2]]},"1907":{"position":[[24,2],[65,2]]},"1909":{"position":[[537,2],[555,2]]},"1913":{"position":[[1584,2]]},"1919":{"position":[[1032,2]]},"1925":{"position":[[1755,2]]},"1933":{"position":[[1201,2]]},"1941":{"position":[[1443,2]]},"1963":{"position":[[36,2],[54,2]]},"2251":{"position":[[183,2]]},"2255":{"position":[[107,2]]},"2266":{"position":[[19,2],[48,2],[101,2],[196,2],[276,2],[321,2]]},"2269":{"position":[[24,2],[77,2]]},"2272":{"position":[[25,2]]},"2274":{"position":[[29,2]]},"2281":{"position":[[25,2]]},"2283":{"position":[[29,2]]},"2290":{"position":[[66,2],[105,2],[115,2]]},"2292":{"position":[[64,2],[104,2]]},"2294":{"position":[[37,2],[826,2],[880,2]]},"2296":{"position":[[76,2],[413,2]]},"2357":{"position":[[187,2],[254,2]]},"2379":{"position":[[605,2]]},"2395":{"position":[[159,2]]},"2406":{"position":[[681,2]]},"2415":{"position":[[374,2]]},"2434":{"position":[[741,2]]},"2538":{"position":[[166,2]]},"2559":{"position":[[666,2],[672,2]]},"2577":{"position":[[7,2]]},"2579":{"position":[[852,2]]},"2603":{"position":[[20,2]]},"2627":{"position":[[94,2]]},"2670":{"position":[[21,2]]},"2690":{"position":[[331,2]]},"2711":{"position":[[52,2]]},"2776":{"position":[[33,2]]},"2805":{"position":[[518,2]]},"2807":{"position":[[129,2]]},"2813":{"position":[[712,2]]},"2819":{"position":[[59,2]]},"2821":{"position":[[45,2],[78,2]]},"2836":{"position":[[144,2],[1364,2]]},"2848":{"position":[[1608,2]]},"2862":{"position":[[79,2],[232,2]]},"2868":{"position":[[11,2],[27,2]]},"2872":{"position":[[8,2]]},"2881":{"position":[[128,2],[222,2],[294,2],[396,2],[446,2],[466,2],[841,2]]},"2889":{"position":[[47,2],[175,2]]},"2901":{"position":[[57,2]]},"2905":{"position":[[92,2],[120,2]]},"2925":{"position":[[60,2]]},"2929":{"position":[[53,2]]},"2941":{"position":[[60,2]]},"2945":{"position":[[53,2]]},"2955":{"position":[[60,2]]},"2959":{"position":[[53,2]]},"3075":{"position":[[53,2]]},"3144":{"position":[[56,2]]},"3156":{"position":[[396,2]]},"3158":{"position":[[502,2]]},"3189":{"position":[[283,2]]},"3215":{"position":[[806,2]]},"3254":{"position":[[20,2]]},"3321":{"position":[[239,2]]},"3371":{"position":[[26,2],[52,2],[474,2]]},"3373":{"position":[[93,2],[124,2]]},"3389":{"position":[[403,2],[425,2]]},"3397":{"position":[[152,2],[168,2]]},"3430":{"position":[[1942,2]]},"3452":{"position":[[3338,2]]},"3481":{"position":[[15,2]]},"3547":{"position":[[700,2]]},"3581":{"position":[[407,2]]},"3583":{"position":[[595,2]]},"3630":{"position":[[86,2]]},"3702":{"position":[[800,2]]},"3708":{"position":[[3765,2],[3925,2]]},"3722":{"position":[[43,2]]},"3732":{"position":[[15,2]]},"3762":{"position":[[385,2]]},"3832":{"position":[[1973,2],[2142,2],[2445,2],[2698,2],[2905,2],[3119,2],[3734,2],[3903,2],[4206,2],[4459,2],[4666,2],[4880,2]]},"3910":{"position":[[709,2]]},"3916":{"position":[[6334,2]]},"3934":{"position":[[1220,2],[1667,2]]},"3936":{"position":[[846,2]]},"3944":{"position":[[799,2]]},"3952":{"position":[[267,2]]},"3956":{"position":[[3168,2]]},"3992":{"position":[[1524,2],[3262,2],[3581,2]]}}}],["csdn",{"_index":7888,"t":{"3307":{"position":[[112,4]]}}}],["csharp",{"_index":7919,"t":{"3329":{"position":[[39,6],[141,6],[180,6]]},"3832":{"position":[[1934,6],[2093,6],[2856,6],[3695,6],[3854,6],[4617,6]]},"3934":{"position":[[2924,6],[2941,6]]}}}],["cshtml",{"_index":10271,"t":{"3992":{"position":[[2867,6]]}}}],["csproj",{"_index":121,"t":{"9":{"position":[[114,6]]},"48":{"position":[[6,6]]},"72":{"position":[[6,6]]},"1372":{"position":[[47,6]]},"1444":{"position":[[47,6]]},"1488":{"position":[[569,6],[623,6]]},"1495":{"position":[[512,6],[567,6]]},"1532":{"position":[[37,6]]},"1547":{"position":[[202,6]]},"1551":{"position":[[183,6]]},"2292":{"position":[[114,6]]},"2298":{"position":[[66,6]]},"2625":{"position":[[36,6]]},"2639":{"position":[[13,6]]},"2653":{"position":[[96,6],[200,6]]},"2666":{"position":[[13,6]]},"2672":{"position":[[12,6]]},"2875":{"position":[[529,6]]},"2891":{"position":[[7,6]]},"3071":{"position":[[56,6]]},"3277":{"position":[[29,6]]},"3908":{"position":[[156,6]]},"3910":{"position":[[2121,6]]},"3912":{"position":[[1823,6]]}}}],["csprojdir",{"_index":4455,"t":{"1488":{"position":[[581,9],[850,9]]},"1495":{"position":[[524,9],[794,9]]}}}],["css",{"_index":2119,"t":{"321":{"position":[[235,3]]},"1735":{"position":[[258,3]]},"3996":{"position":[[1131,3]]}}}],["ct",{"_index":1720,"t":{"237":{"position":[[161,3],[233,3],[518,3]]},"1803":{"position":[[1377,2],[1456,2],[1673,2]]}}}],["ctor",{"_index":3478,"t":{"734":{"position":[[7286,4]]}}}],["ctrl",{"_index":6775,"t":{"2639":{"position":[[124,4]]},"2666":{"position":[[124,4]]},"3309":{"position":[[45,4]]},"3430":{"position":[[301,4],[2915,4],[4222,4]]},"3432":{"position":[[2870,4],[5439,4]]},"3601":{"position":[[516,4]]}}}],["ctx",{"_index":5666,"t":{"1815":{"position":[[504,3]]},"1817":{"position":[[215,3]]},"2158":{"position":[[44,3]]},"3466":{"position":[[126,3],[133,3],[1389,3],[1396,3],[1624,3],[1631,3]]},"3914":{"position":[[1694,3],[1701,3],[1826,3],[1833,3],[1974,3],[1981,3]]},"3924":{"position":[[4552,3],[4559,3]]}}}],["cu",{"_index":5141,"t":{"1619":{"position":[[355,3]]},"3218":{"position":[[71,3],[93,3],[127,3],[203,3],[251,3],[308,3],[370,3],[396,3]]}}}],["cultur",{"_index":6416,"t":{"2544":{"position":[[38,7],[65,7]]},"2547":{"position":[[77,7]]},"2577":{"position":[[87,7],[150,7],[220,7],[260,7]]},"2579":{"position":[[360,7],[423,7],[493,7],[533,7]]},"3452":{"position":[[2687,7]]},"3678":{"position":[[39,7],[81,7]]},"3916":{"position":[[5683,7]]}}}],["cultureinfo",{"_index":6423,"t":{"2555":{"position":[[242,11]]},"2577":{"position":[[164,11],[191,11],[229,11]]},"2579":{"position":[[437,11],[464,11],[502,11]]}}}],["culturequeri",{"_index":6713,"t":{"2577":{"position":[[49,12],[129,12],[176,12]]},"2579":{"position":[[322,12],[402,12],[449,12]]}}}],["curd",{"_index":8938,"t":{"3819":{"position":[[1515,4]]},"3994":{"position":[[269,4]]}}}],["current",{"_index":764,"t":{"112":{"position":[[1534,7]]},"492":{"position":[[499,7]]},"1925":{"position":[[1396,7]]},"1933":{"position":[[609,7]]},"2482":{"position":[[399,7]]},"2484":{"position":[[499,7]]},"2825":{"position":[[399,7]]},"2827":{"position":[[545,7]]},"2829":{"position":[[633,7]]},"3287":{"position":[[3131,7]]}}}],["currentcultur",{"_index":6715,"t":{"2577":{"position":[[203,14]]},"2579":{"position":[[476,14]]}}}],["currentdirectori",{"_index":5039,"t":{"1561":{"position":[[53,16],[84,16]]}}}],["currentfilenam",{"_index":8152,"t":{"3432":{"position":[[4755,15],[4813,15]]}}}],["currentgroup",{"_index":8501,"t":{"3680":{"position":[[179,12],[312,12]]},"3966":{"position":[[367,12]]}}}],["currentmanagedthreadid",{"_index":9221,"t":{"3918":{"position":[[1184,22]]}}}],["currenttimeutc",{"_index":1850,"t":{"253":{"position":[[562,14],[661,14]]}}}],["currentuicultur",{"_index":6716,"t":{"2577":{"position":[[241,16]]},"2579":{"position":[[514,16]]}}}],["currentvalu",{"_index":2981,"t":{"570":{"position":[[1370,13],[1393,13],[1573,13]]},"933":{"position":[[873,12]]},"2713":{"position":[[1414,12]]},"2731":{"position":[[516,12]]},"2937":{"position":[[1344,12]]}}}],["custom",{"_index":2613,"t":{"461":{"position":[[181,6]]},"558":{"position":[[27,9],[242,8],[264,8]]},"881":{"position":[[279,9]]},"883":{"position":[[265,8]]},"1566":{"position":[[749,8],[826,9],[974,8]]},"1657":{"position":[[406,6]]},"3189":{"position":[[529,9]]},"3218":{"position":[[58,6],[362,6]]}}}],["customapi",{"_index":5135,"t":{"1617":{"position":[[158,9],[467,9],[653,9]]}}}],["customerbyid",{"_index":5055,"t":{"1566":{"position":[[760,12],[986,12]]}}}],["customercontext",{"_index":5053,"t":{"1566":{"position":[[727,15],[792,15],[949,15]]}}}],["customerid",{"_index":2919,"t":{"558":{"position":[[43,10],[87,10],[132,10]]}}}],["customerrorcodetypeprovid",{"_index":5745,"t":{"1867":{"position":[[173,27],[636,27]]}}}],["customhttpurlencodingcodec",{"_index":2040,"t":{"310":{"position":[[388,26]]}}}],["customid",{"_index":7626,"t":{"3218":{"position":[[81,8],[383,8]]},"3222":{"position":[[305,8]]},"3226":{"position":[[521,8]]},"3230":{"position":[[153,8]]}}}],["customizemultiten",{"_index":7283,"t":{"2969":{"position":[[50,21]]}}}],["custommodel",{"_index":8629,"t":{"3750":{"position":[[3,11],[52,11],[324,11]]}}}],["customnam",{"_index":7631,"t":{"3218":{"position":[[238,10],[324,10]]}}}],["customschemaid",{"_index":8496,"t":{"3668":{"position":[[140,15]]}}}],["cynthiax",{"_index":4691,"t":{"1511":{"position":[[1369,8]]}}}],["cyrl",{"_index":6468,"t":{"2559":{"position":[[371,4],[1986,4],[2675,4]]}}}],["cz",{"_index":6500,"t":{"2559":{"position":[[675,2]]}}}],["czvf",{"_index":4491,"t":{"1495":{"position":[[1086,4]]}}}],["d",{"_index":1923,"t":{"280":{"position":[[253,1]]},"615":{"position":[[378,1]]},"696":{"position":[[2038,1],[2043,1],[2100,1],[2105,1]]},"853":{"position":[[199,1],[204,1],[296,1],[301,1],[320,1],[325,1],[347,1],[352,1],[597,1],[602,1],[621,1],[626,1],[648,1],[653,1]]},"860":{"position":[[59,1],[117,1]]},"862":{"position":[[59,1],[117,1],[146,1]]},"1297":{"position":[[87,1],[99,1]]},"1377":{"position":[[263,1],[458,1]]},"1485":{"position":[[12,1]]},"1488":{"position":[[103,1],[1361,1],[1471,1]]},"1495":{"position":[[103,1]]},"1499":{"position":[[748,1]]},"1635":{"position":[[607,1],[613,1],[619,1]]},"2264":{"position":[[11,1]]},"2649":{"position":[[112,1]]},"2651":{"position":[[30,1]]},"2653":{"position":[[108,1]]},"3282":{"position":[[223,1]]},"3287":{"position":[[270,1],[338,1],[595,1],[663,1]]},"3430":{"position":[[3134,1],[4437,1]]},"3432":{"position":[[5654,1]]},"3452":{"position":[[3253,1]]},"3601":{"position":[[735,1]]},"3832":{"position":[[1914,1],[2057,1],[2073,1],[2371,1],[2624,1],[2836,1],[3007,1],[3023,1],[3675,1],[3818,1],[3834,1],[4132,1],[4385,1],[4597,1],[4768,1],[4784,1]]},"3916":{"position":[[6249,1]]}}}],["d0244d",{"_index":9613,"t":{"3946":{"position":[[421,6]]},"3948":{"position":[[559,6]]}}}],["d024fae",{"_index":9259,"t":{"3920":{"position":[[333,7]]}}}],["d2ce089",{"_index":9670,"t":{"3954":{"position":[[292,7]]}}}],["d2dc3e4",{"_index":9511,"t":{"3934":{"position":[[859,7]]}}}],["d55fbb80",{"_index":6917,"t":{"2768":{"position":[[224,8]]}}}],["d617617",{"_index":4583,"t":{"1511":{"position":[[284,7]]}}}],["d92c24b",{"_index":9672,"t":{"3954":{"position":[[514,7]]}}}],["d9bad03",{"_index":9631,"t":{"3950":{"position":[[155,7],[715,7]]}}}],["da",{"_index":6501,"t":{"2559":{"position":[[686,2],[693,2]]}}}],["da69640",{"_index":9579,"t":{"3942":{"position":[[36,7]]}}}],["daili",{"_index":2656,"t":{"480":{"position":[[234,5],[258,5],[604,5],[620,5]]},"494":{"position":[[195,5],[211,5]]},"2424":{"position":[[170,5]]},"3804":{"position":[[895,5]]},"3808":{"position":[[311,5]]}}}],["dapper",{"_index":540,"t":{"91":{"position":[[332,6],[346,6]]},"540":{"position":[[0,6],[73,6],[120,6]]},"542":{"position":[[18,6],[60,6]]},"546":{"position":[[232,6]]},"554":{"position":[[120,6]]},"562":{"position":[[35,6],[48,6]]},"1157":{"position":[[35,6]]},"3250":{"position":[[180,6],[216,6]]},"3936":{"position":[[272,6]]},"3962":{"position":[[1771,6]]},"3966":{"position":[[1696,6]]},"3984":{"position":[[596,6]]},"3992":{"position":[[349,6],[2291,6],[2450,6]]}}}],["dapperrepositori",{"_index":2888,"t":{"548":{"position":[[114,16],[171,16],[192,16],[211,16]]},"550":{"position":[[12,16],[78,16],[143,16],[237,16],[347,16],[497,16]]},"556":{"position":[[101,16]]},"558":{"position":[[170,16]]},"560":{"position":[[53,16]]}}}],["data",{"_index":328,"t":{"19":{"position":[[897,4]]},"188":{"position":[[273,4],[393,4],[438,4],[504,4],[562,4]]},"220":{"position":[[493,4]]},"247":{"position":[[213,4],[306,4]]},"319":{"position":[[215,4],[226,4],[231,4],[523,4],[534,4],[539,4]]},"439":{"position":[[88,4],[159,4]]},"520":{"position":[[7,4],[37,4],[286,4],[386,4]]},"544":{"position":[[94,4],[183,4]]},"546":{"position":[[20,4],[52,4],[76,4],[153,4]]},"550":{"position":[[4,4],[64,4],[135,4]]},"556":{"position":[[94,4],[219,4]]},"572":{"position":[[134,4]]},"688":{"position":[[494,4]]},"713":{"position":[[201,4],[295,4]]},"734":{"position":[[215,4],[309,4]]},"901":{"position":[[7,4],[37,4],[314,4],[414,4]]},"927":{"position":[[62,4]]},"929":{"position":[[62,4]]},"1127":{"position":[[44,4]]},"1185":{"position":[[321,4]]},"1192":{"position":[[4,4]]},"1212":{"position":[[81,4],[151,4],[172,4],[224,4]]},"1313":{"position":[[101,4],[198,4],[375,4]]},"1315":{"position":[[7,4],[37,4],[314,4],[414,4]]},"1691":{"position":[[83,4],[610,4]]},"1741":{"position":[[53,4],[1632,4]]},"1749":{"position":[[128,4]]},"1801":{"position":[[2528,4],[2640,4]]},"1803":{"position":[[4466,4],[4591,4]]},"1887":{"position":[[377,4]]},"2023":{"position":[[124,4]]},"2945":{"position":[[594,4],[822,4]]},"3224":{"position":[[377,4]]},"3236":{"position":[[411,4]]},"3452":{"position":[[2822,4]]},"3483":{"position":[[844,4]]},"3522":{"position":[[134,4],[271,4],[415,4],[608,4],[787,4],[1351,4],[1515,4]]},"3563":{"position":[[131,4],[257,4],[461,4],[847,4],[979,4],[1063,4],[1161,4],[1306,4]]},"3708":{"position":[[243,4],[1352,4],[1367,4],[1565,4],[1675,4],[1754,4],[2169,4],[2184,4],[3314,4],[3495,4],[3625,4],[3632,4]]},"3716":{"position":[[388,4],[752,4]]},"3718":{"position":[[24,4],[60,4]]},"3720":{"position":[[162,4]]},"3916":{"position":[[5818,4],[7263,4],[7875,4],[8719,4]]},"3918":{"position":[[1649,4],[1791,4],[1936,4],[2129,4],[2293,4]]},"3920":{"position":[[258,4]]},"3950":{"position":[[693,4]]},"3956":{"position":[[1109,4],[1219,4],[1294,4],[2654,4],[2827,4],[2953,4],[2960,4]]},"3966":{"position":[[921,4]]},"3984":{"position":[[61,4]]}}}],["data1",{"_index":7646,"t":{"3224":{"position":[[269,5]]},"3258":{"position":[[65,5]]}}}],["data2",{"_index":7652,"t":{"3224":{"position":[[430,5]]},"3258":{"position":[[138,5]]}}}],["data3",{"_index":7653,"t":{"3224":{"position":[[464,5]]}}}],["data4",{"_index":7647,"t":{"3224":{"position":[[306,5]]}}}],["data5",{"_index":7654,"t":{"3224":{"position":[[574,5]]}}}],["data6",{"_index":7657,"t":{"3224":{"position":[[658,5]]}}}],["data7",{"_index":7666,"t":{"3224":{"position":[[955,5]]}}}],["dataadapt",{"_index":10020,"t":{"3980":{"position":[[547,11]]}}}],["dataannot",{"_index":152,"t":{"11":{"position":[[617,15]]},"583":{"position":[[34,15]]},"587":{"position":[[121,15]]},"597":{"position":[[53,15]]},"599":{"position":[[62,15]]},"708":{"position":[[107,15]]},"851":{"position":[[141,15]]},"1060":{"position":[[92,15],[137,15]]},"1775":{"position":[[189,15],[234,15]]},"2294":{"position":[[646,15]]},"2725":{"position":[[96,15],[219,15],[1188,15],[1707,15]]},"2727":{"position":[[244,15]]},"2971":{"position":[[42,15]]},"3686":{"position":[[753,15]]}}}],["databas",{"_index":1620,"t":{"220":{"position":[[392,8]]},"520":{"position":[[59,8],[181,8],[434,8]]},"655":{"position":[[132,8]]},"677":{"position":[[176,8],[239,8]]},"688":{"position":[[393,8]]},"704":{"position":[[176,8]]},"706":{"position":[[33,8]]},"711":{"position":[[26,8]]},"713":{"position":[[638,8],[718,8]]},"715":{"position":[[7,8],[56,8],[99,8]]},"717":{"position":[[48,8]]},"724":{"position":[[50,8],[83,8]]},"726":{"position":[[67,8]]},"730":{"position":[[62,8],[310,8]]},"732":{"position":[[233,8],[306,8]]},"734":{"position":[[653,8]]},"901":{"position":[[59,8],[181,8],[462,8]]},"939":{"position":[[146,8]]},"1054":{"position":[[423,8]]},"1056":{"position":[[710,8]]},"1062":{"position":[[63,8],[159,8]]},"1139":{"position":[[53,8]]},"1315":{"position":[[59,8],[181,8],[462,8]]},"1319":{"position":[[33,8]]},"1759":{"position":[[56,8]]},"2607":{"position":[[4,8],[77,8],[437,8],[510,8]]},"2774":{"position":[[140,8],[297,8],[458,8]]},"2917":{"position":[[19,8]]},"2919":{"position":[[23,8]]},"2929":{"position":[[782,8]]},"2931":{"position":[[68,8]]},"2943":{"position":[[429,8]]},"2945":{"position":[[894,8]]},"2947":{"position":[[68,8]]},"2951":{"position":[[608,8]]},"2959":{"position":[[837,8]]},"2961":{"position":[[68,8]]},"3131":{"position":[[160,8]]},"3291":{"position":[[66,8],[714,8],[1034,8]]},"3434":{"position":[[780,8],[919,8],[1005,8]]},"3966":{"position":[[1003,8]]},"3986":{"position":[[1524,8]]}}}],["databaseaccessor",{"_index":140,"t":{"11":{"position":[[107,16]]},"91":{"position":[[255,16],[315,16],[371,16]]},"508":{"position":[[13,16]]},"510":{"position":[[13,16]]},"516":{"position":[[13,16]]},"518":{"position":[[13,16]]},"524":{"position":[[134,16]]},"534":{"position":[[200,16]]},"542":{"position":[[43,16]]},"546":{"position":[[215,16]]},"570":{"position":[[63,16]]},"653":{"position":[[229,16]]},"696":{"position":[[1248,16],[2429,16],[3351,16],[4033,16]]},"708":{"position":[[13,16]]},"745":{"position":[[13,16]]},"747":{"position":[[13,16]]},"822":{"position":[[52,16]]},"832":{"position":[[33,16]]},"844":{"position":[[85,16]]},"846":{"position":[[175,16]]},"851":{"position":[[47,16],[793,16],[1182,16],[1657,16]]},"877":{"position":[[26,16]]},"889":{"position":[[13,16]]},"927":{"position":[[146,16]]},"929":{"position":[[146,16]]},"931":{"position":[[120,16]]},"945":{"position":[[151,16]]},"947":{"position":[[126,16],[620,16]]},"1054":{"position":[[13,16]]},"1056":{"position":[[32,16],[484,16]]},"1060":{"position":[[46,16]]},"1064":{"position":[[32,16]]},"1066":{"position":[[187,16],[634,16]]},"1109":{"position":[[61,16],[353,16],[584,16]]},"1127":{"position":[[13,16]]},"1145":{"position":[[13,16]]},"1147":{"position":[[13,16]]},"1151":{"position":[[44,16]]},"1185":{"position":[[290,16]]},"1223":{"position":[[130,16]]},"1234":{"position":[[13,16]]},"1236":{"position":[[13,16]]},"1238":{"position":[[13,16]]},"1240":{"position":[[13,16]]},"1242":{"position":[[13,16]]},"1244":{"position":[[13,16]]},"1251":{"position":[[13,16]]},"1253":{"position":[[13,16]]},"1255":{"position":[[13,16]]},"1257":{"position":[[13,16]]},"1259":{"position":[[13,16]]},"1261":{"position":[[13,16]]},"1263":{"position":[[13,16]]},"1267":{"position":[[13,16]]},"1311":{"position":[[13,16]]},"1313":{"position":[[716,16]]},"1353":{"position":[[196,16]]},"1364":{"position":[[13,16]]},"1368":{"position":[[70,16]]},"1408":{"position":[[82,16]]},"1410":{"position":[[88,16]]},"1414":{"position":[[102,16]]},"1767":{"position":[[13,16]]},"1769":{"position":[[13,16]]},"1771":{"position":[[13,16]]},"1773":{"position":[[13,16]]},"1779":{"position":[[13,16]]},"1781":{"position":[[13,16]]},"2294":{"position":[[107,16]]},"2601":{"position":[[44,16]]},"2925":{"position":[[76,16]]},"2927":{"position":[[13,16]]},"2929":{"position":[[69,16]]},"2933":{"position":[[56,16]]},"2935":{"position":[[72,16]]},"2937":{"position":[[150,16]]},"2941":{"position":[[76,16]]},"2943":{"position":[[13,16]]},"2945":{"position":[[69,16]]},"2949":{"position":[[59,16]]},"2951":{"position":[[56,16]]},"2955":{"position":[[76,16]]},"2957":{"position":[[13,16]]},"2959":{"position":[[69,16]]},"2963":{"position":[[57,16]]},"2973":{"position":[[79,16]]},"3207":{"position":[[50,16]]},"3252":{"position":[[45,16]]},"3254":{"position":[[1677,16]]},"3287":{"position":[[1351,16]]},"3924":{"position":[[660,16]]},"3972":{"position":[[21,16]]},"3978":{"position":[[1467,16]]},"3984":{"position":[[1014,16]]},"3986":{"position":[[1039,16]]},"3992":{"position":[[386,16]]}}}],["databaseaccesssor",{"_index":10191,"t":{"3992":{"position":[[331,17]]}}}],["databaseconnecionstr",{"_index":7279,"t":{"2949":{"position":[[614,23]]}}}],["databasegener",{"_index":3923,"t":{"1060":{"position":[[309,17]]}}}],["databasegeneratedopt",{"_index":3924,"t":{"1060":{"position":[[327,23]]}}}],["databaseloggingwrit",{"_index":8155,"t":{"3434":{"position":[[176,21],[293,21],[465,21],[545,21],[959,21],[1052,21],[1204,21],[1273,21],[1365,21],[1502,21],[2101,21],[2265,21],[2541,21],[2812,21]]},"3438":{"position":[[144,21]]},"3452":{"position":[[549,21],[666,21]]},"3458":{"position":[[57,21],[263,21],[338,21],[450,21],[514,21],[654,21],[729,21]]},"3470":{"position":[[207,21]]},"3910":{"position":[[1878,21]]},"3916":{"position":[[3100,21],[3545,21],[3662,21]]},"3928":{"position":[[824,21]]}}}],["databasevalu",{"_index":2982,"t":{"570":{"position":[[1426,14],[1635,14],[1666,14],[1703,14]]}}}],["dataencrypt",{"_index":141,"t":{"11":{"position":[[145,14]]},"146":{"position":[[60,14]]},"1689":{"position":[[62,14]]},"2294":{"position":[[145,14]]}}}],["dataread",{"_index":3776,"t":{"929":{"position":[[1983,10]]},"3273":{"position":[[737,10]]}}}],["datareaderdispos",{"_index":3778,"t":{"929":{"position":[[2036,19],[2156,19]]}}}],["datareaderdisposingeventdata",{"_index":3779,"t":{"929":{"position":[[2075,28]]}}}],["dataset",{"_index":3964,"t":{"1113":{"position":[[25,7],[118,7],[181,7],[274,7],[368,7]]},"1129":{"position":[[0,7],[723,7]]},"1133":{"position":[[164,7]]},"1164":{"position":[[29,7],[113,7],[265,7],[434,7],[529,7],[692,7]]},"1177":{"position":[[29,7],[85,7],[153,7],[249,7],[316,7],[395,7]]},"1238":{"position":[[243,7],[418,7],[576,7],[727,7],[883,7]]},"1255":{"position":[[134,7],[192,7],[245,7]]},"1761":{"position":[[55,7]]},"2385":{"position":[[62,7]]},"3273":{"position":[[770,7]]},"3916":{"position":[[2229,7]]},"3962":{"position":[[389,7]]}}}],["datat",{"_index":3963,"t":{"1111":{"position":[[25,9],[118,9],[183,9],[276,9],[370,9]]},"1160":{"position":[[29,9],[87,9],[180,9],[325,9],[456,9],[590,9],[664,9],[747,9],[902,9],[971,9],[1075,9],[1231,9],[1373,9],[1518,9],[1603,9],[1697,9]]},"1173":{"position":[[29,9],[85,9],[153,9],[249,9],[316,9],[395,9]]},"1190":{"position":[[29,9],[82,9],[295,9],[359,9]]},"1194":{"position":[[66,9],[137,9]]},"1196":{"position":[[41,9]]},"1198":{"position":[[50,9]]},"1204":{"position":[[4,9]]},"1234":{"position":[[196,9],[328,9],[465,9],[595,9],[720,9]]},"1251":{"position":[[134,9],[197,9],[255,9]]},"1761":{"position":[[43,9]]},"2385":{"position":[[50,9]]},"3267":{"position":[[303,9],[380,9]]},"3273":{"position":[[697,9]]},"3916":{"position":[[2219,9]]},"3962":{"position":[[377,9]]},"3980":{"position":[[780,9]]}}}],["datatabletodictionari",{"_index":7797,"t":{"3267":{"position":[[358,21]]}}}],["datatoken",{"_index":5883,"t":{"1941":{"position":[[590,10]]}}}],["datavalid",{"_index":142,"t":{"11":{"position":[[181,14]]},"583":{"position":[[71,14]]},"587":{"position":[[2214,14]]},"589":{"position":[[0,14]]},"602":{"position":[[13,14]]},"608":{"position":[[13,14],[83,14],[154,14],[224,14],[321,14],[472,14],[539,14],[648,14]]},"615":{"position":[[172,14],[859,14],[880,14]]},"617":{"position":[[1486,14],[1915,14]]},"625":{"position":[[113,14]]},"1998":{"position":[[13,13]]},"2000":{"position":[[13,13]]},"2002":{"position":[[13,13]]},"2004":{"position":[[13,13],[90,13]]},"2294":{"position":[[181,14]]},"2790":{"position":[[91,14]]},"3708":{"position":[[645,14]]},"3944":{"position":[[380,12]]},"3956":{"position":[[282,14]]},"3966":{"position":[[645,14]]},"3974":{"position":[[156,14]]},"3978":{"position":[[1564,14]]},"3984":{"position":[[168,14]]}}}],["datavalidationfilt",{"_index":3229,"t":{"619":{"position":[[70,20]]},"625":{"position":[[65,20],[302,20]]},"3932":{"position":[[726,20]]}}}],["datavalidationresult",{"_index":3126,"t":{"602":{"position":[[184,20]]}}}],["date",{"_index":3138,"t":{"606":{"position":[[103,4],[1105,4],[1214,4]]},"608":{"position":[[407,4]]},"617":{"position":[[269,4],[293,4]]},"885":{"position":[[250,4]]},"1488":{"position":[[92,4]]},"1495":{"position":[[92,4]]},"2751":{"position":[[265,4]]},"3234":{"position":[[607,4]]}}}],["datediff",{"_index":3627,"t":{"836":{"position":[[264,8]]}}}],["datediffhour",{"_index":3623,"t":{"836":{"position":[[102,12],[186,12]]}}}],["dateformat",{"_index":8108,"t":{"3430":{"position":[[3731,10]]},"3432":{"position":[[4948,10]]},"3916":{"position":[[789,10]]}}}],["dateformatstr",{"_index":6236,"t":{"2361":{"position":[[569,16]]}}}],["dategroup",{"_index":3667,"t":{"866":{"position":[[196,9],[238,9],[261,9]]}}}],["dateonli",{"_index":6253,"t":{"2381":{"position":[[13,8],[210,8],[421,8]]},"3912":{"position":[[1120,8],[2634,8]]}}}],["dateonlyjsonconvert",{"_index":9119,"t":{"3914":{"position":[[1370,21]]},"3918":{"position":[[802,21]]}}}],["dateonlyoffsetjsonconvert",{"_index":9120,"t":{"3914":{"position":[[1394,27]]},"3918":{"position":[[826,27]]}}}],["dateparsehandl",{"_index":6265,"t":{"2383":{"position":[[484,17],[504,17]]}}}],["datet",{"_index":10402,"t":{"3996":{"position":[[1380,9]]}}}],["datetim",{"_index":1705,"t":{"233":{"position":[[648,8]]},"237":{"position":[[365,8],[476,8],[708,8],[767,8]]},"253":{"position":[[579,8]]},"472":{"position":[[104,8]]},"474":{"position":[[136,8]]},"476":{"position":[[138,8]]},"478":{"position":[[151,8]]},"490":{"position":[[138,8],[172,8],[383,8],[417,8]]},"492":{"position":[[617,8],[724,8]]},"570":{"position":[[1922,8],[2267,8],[2558,8]]},"587":{"position":[[1458,8]]},"696":{"position":[[1633,8],[1675,8],[3620,8],[3662,8]]},"708":{"position":[[249,8]]},"763":{"position":[[216,8]]},"836":{"position":[[128,8]]},"844":{"position":[[324,8]]},"851":{"position":[[283,8],[1343,8],[1844,8]]},"877":{"position":[[390,8],[1413,8],[1509,8],[1617,8],[1725,8],[1833,8]]},"885":{"position":[[110,8]]},"977":{"position":[[15,8],[59,8]]},"1611":{"position":[[759,8]]},"1633":{"position":[[97,8],[107,8]]},"1635":{"position":[[253,8],[262,8],[275,8]]},"1775":{"position":[[3771,8]]},"1797":{"position":[[503,8],[540,8]]},"2208":{"position":[[186,8]]},"2398":{"position":[[40,8],[208,8]]},"2400":{"position":[[71,8]]},"2402":{"position":[[142,8]]},"2406":{"position":[[285,8],[592,8]]},"2409":{"position":[[79,8]]},"2411":{"position":[[67,8]]},"2413":{"position":[[67,8]]},"2415":{"position":[[272,8]]},"2426":{"position":[[88,8]]},"2428":{"position":[[90,8]]},"2430":{"position":[[74,8]]},"2432":{"position":[[74,8]]},"2434":{"position":[[276,8],[613,8]]},"2438":{"position":[[144,8]]},"2440":{"position":[[180,8],[553,8]]},"2442":{"position":[[385,8],[617,8],[890,8],[1173,8],[1407,8],[1664,8],[1892,8]]},"2448":{"position":[[186,8]]},"2468":{"position":[[118,8]]},"2470":{"position":[[166,8]]},"2472":{"position":[[307,8]]},"2484":{"position":[[730,8]]},"2805":{"position":[[436,8]]},"2827":{"position":[[776,8]]},"2829":{"position":[[960,8]]},"2846":{"position":[[145,8]]},"2929":{"position":[[535,8],[706,8]]},"2945":{"position":[[535,8],[763,8]]},"2959":{"position":[[535,8],[732,8]]},"3162":{"position":[[348,8]]},"3226":{"position":[[507,8]]},"3234":{"position":[[502,8],[594,8],[626,8]]},"3273":{"position":[[968,8]]},"3430":{"position":[[3348,8]]},"3432":{"position":[[1578,8],[2011,8],[3317,8],[3609,8]]},"3434":{"position":[[2401,8]]},"3777":{"position":[[410,8]]},"3798":{"position":[[320,8],[343,8],[370,8],[399,8],[681,8]]},"3802":{"position":[[2451,8],[2563,8],[2599,8]]},"3806":{"position":[[173,8],[200,8],[1558,8],[1585,8],[2888,8],[2915,8],[3025,8]]},"3810":{"position":[[526,8],[565,8],[621,8],[681,8]]},"3838":{"position":[[102,8],[239,8]]},"3924":{"position":[[412,8],[431,8],[448,8]]},"3950":{"position":[[274,8]]},"3986":{"position":[[1439,8]]},"3996":{"position":[[218,8]]},"4004":{"position":[[112,8]]},"4006":{"position":[[236,8]]}}}],["datetimeoffset",{"_index":748,"t":{"112":{"position":[[1232,14]]},"231":{"position":[[409,14],[505,14]]},"233":{"position":[[148,14]]},"235":{"position":[[202,14]]},"747":{"position":[[310,14]]},"1925":{"position":[[1094,14]]},"2226":{"position":[[100,14]]},"2228":{"position":[[118,14]]},"2361":{"position":[[231,14]]},"2383":{"position":[[58,14],[107,14],[218,14],[249,14]]},"2440":{"position":[[61,14]]},"2482":{"position":[[517,14]]},"2484":{"position":[[617,14]]},"2813":{"position":[[614,14]]},"2817":{"position":[[893,14]]},"2825":{"position":[[517,14]]},"2827":{"position":[[663,14]]},"2829":{"position":[[781,14]]},"3708":{"position":[[3697,14]]},"3720":{"position":[[206,14]]},"3914":{"position":[[3443,14]]},"3950":{"position":[[255,14]]},"3956":{"position":[[3025,14]]},"3962":{"position":[[1228,14]]},"3996":{"position":[[201,14],[1076,14]]},"4004":{"position":[[123,14]]},"4006":{"position":[[247,14]]}}}],["datetimestyl",{"_index":6267,"t":{"2383":{"position":[[597,14],[614,14]]}}}],["davil",{"_index":4808,"t":{"1511":{"position":[[2739,5]]}}}],["day",{"_index":7700,"t":{"3234":{"position":[[97,3],[144,3]]},"3964":{"position":[[423,4]]}}}],["dayofmonth",{"_index":6296,"t":{"2418":{"position":[[97,10],[154,10],[344,10],[636,10],[682,10],[1035,10],[1111,10],[1152,10],[1341,10]]}}}],["dayofweek",{"_index":6298,"t":{"2418":{"position":[[114,9],[171,9],[447,9],[649,9],[695,9],[1023,9],[1052,9]]}}}],["db",{"_index":1627,"t":{"220":{"position":[[514,2]]},"520":{"position":[[28,2]]},"530":{"position":[[589,2],[641,2]]},"544":{"position":[[115,2],[204,2]]},"688":{"position":[[515,2]]},"901":{"position":[[28,2]]},"1026":{"position":[[26,2],[71,2],[129,2],[190,2]]},"1039":{"position":[[589,2],[642,2]]},"1231":{"position":[[10,2]]},"1313":{"position":[[122,2],[219,2],[396,2]]},"1315":{"position":[[28,2]]},"1434":{"position":[[115,2],[168,2]]},"1566":{"position":[[121,2],[808,2],[823,2],[940,2],[999,2]]},"1711":{"position":[[85,2],[443,2]]},"2103":{"position":[[17,2]]},"2105":{"position":[[23,2]]},"2107":{"position":[[24,2]]},"2109":{"position":[[20,2]]},"2111":{"position":[[27,2]]},"2113":{"position":[[14,2]]},"2115":{"position":[[16,2]]},"2117":{"position":[[23,2],[85,2]]},"2119":{"position":[[16,2]]},"2121":{"position":[[23,2],[88,2]]},"2123":{"position":[[17,2]]},"2125":{"position":[[19,2]]},"2127":{"position":[[26,2]]},"2129":{"position":[[26,2]]},"2476":{"position":[[134,2],[187,2]]},"2478":{"position":[[244,2],[297,2]]},"2831":{"position":[[583,2],[636,2]]},"2945":{"position":[[615,2],[841,2]]},"2971":{"position":[[311,2]]},"3215":{"position":[[162,2],[445,2],[470,2],[677,2],[730,2],[741,2],[746,2]]},"3218":{"position":[[26,2]]},"3220":{"position":[[67,2]]},"3222":{"position":[[198,2]]},"3224":{"position":[[1687,2]]},"3226":{"position":[[15,2],[353,2],[385,2],[406,2],[442,2],[445,2],[656,2]]},"3228":{"position":[[28,2],[188,2],[195,2],[278,2]]},"3230":{"position":[[0,2],[77,2],[218,2]]},"3232":{"position":[[8,2],[117,2]]},"3234":{"position":[[550,2]]},"3236":{"position":[[44,2],[141,2],[233,2],[389,2],[477,2],[556,2]]},"3254":{"position":[[1284,2],[1301,2],[1538,2]]},"3256":{"position":[[144,2],[270,2]]},"3258":{"position":[[72,2],[119,2],[146,2],[182,2],[245,2],[276,2],[312,2],[362,2],[384,2],[418,2],[440,2],[513,2],[539,2],[598,2]]},"3261":{"position":[[20,2],[73,2],[138,2],[216,2],[302,2],[356,2],[415,2],[485,2]]},"3263":{"position":[[11,2]]},"3265":{"position":[[67,2]]},"3267":{"position":[[19,2],[72,2],[251,2],[345,2],[410,2]]},"3269":{"position":[[51,2],[124,2],[254,2],[373,2]]},"3271":{"position":[[28,2],[112,2],[171,2]]},"3273":{"position":[[19,2],[114,2],[288,2],[502,2]]},"3275":{"position":[[196,2],[204,2]]},"3958":{"position":[[7,2]]},"3960":{"position":[[195,2]]},"3966":{"position":[[48,2]]},"3968":{"position":[[426,2],[692,2]]},"3988":{"position":[[269,2]]},"3992":{"position":[[1285,2],[1312,2],[1342,2],[1367,2]]},"4000":{"position":[[7,2],[533,2],[564,2],[587,2],[611,2]]}}}],["db7d51b",{"_index":9239,"t":{"3918":{"position":[[3348,7]]}}}],["db_master",{"_index":7608,"t":{"3215":{"position":[[162,9]]}}}],["dbc7935",{"_index":9140,"t":{"3914":{"position":[[2946,7]]}}}],["dbcommand",{"_index":2999,"t":{"572":{"position":[[402,9],[800,9]]},"929":{"position":[[289,9],[373,9],[472,9],[528,9],[644,9],[796,9],[1045,9],[1289,9],[1563,9],[1773,9],[2056,9],[2281,9],[2517,9],[2783,9],[2985,9],[3263,9],[3504,9],[3775,9],[3982,9]]}}}],["dbcommandinterceptor",{"_index":2995,"t":{"572":{"position":[[5,20],[48,20],[321,20]]},"924":{"position":[[112,20]]},"929":{"position":[[219,20]]}}}],["dbconnect",{"_index":3752,"t":{"927":{"position":[[308,12],[541,12],[810,12],[977,12],[1230,12],[1465,12],[1670,12],[1839,12],[2009,12],[2178,12]]}}}],["dbconnectioninterceptor",{"_index":3748,"t":{"924":{"position":[[79,23]]},"927":{"position":[[218,23]]}}}],["dbconnectionstr",{"_index":1618,"t":{"220":{"position":[[353,18]]},"516":{"position":[[123,18]]},"688":{"position":[[354,18]]}}}],["dbcontext",{"_index":2755,"t":{"500":{"position":[[105,9]]},"502":{"position":[[27,9],[149,9]]},"504":{"position":[[17,9],[30,9]]},"528":{"position":[[239,9],[316,9]]},"530":{"position":[[3,9],[577,9]]},"536":{"position":[[61,9]]},"570":{"position":[[735,9],[787,9],[877,9],[1757,9],[2102,9]]},"655":{"position":[[381,9],[391,9]]},"696":{"position":[[1910,9],[1920,9],[2874,9],[2884,9],[4456,9],[4466,9]]},"747":{"position":[[650,9],[817,9],[827,9]]},"749":{"position":[[291,9],[420,9],[430,9],[637,9],[787,9],[797,9],[957,9],[1090,9],[1100,9]]},"832":{"position":[[2,9]]},"844":{"position":[[520,9],[530,9]]},"846":{"position":[[665,9],[675,9],[808,9]]},"877":{"position":[[816,9],[941,9],[951,9],[1193,9],[1314,9],[1324,9]]},"889":{"position":[[385,9],[512,9],[522,9]]},"915":{"position":[[42,9]]},"933":{"position":[[563,9],[625,9]]},"943":{"position":[[32,9]]},"949":{"position":[[310,9]]},"1039":{"position":[[3,9],[577,9]]},"1145":{"position":[[306,9],[316,9]]},"1147":{"position":[[197,9],[207,9]]},"1151":{"position":[[275,9],[285,9]]},"1313":{"position":[[689,9]]},"1412":{"position":[[44,9]]},"1434":{"position":[[103,9]]},"1566":{"position":[[597,9]]},"1777":{"position":[[30,9],[160,9]]},"1779":{"position":[[422,9],[432,9]]},"1781":{"position":[[274,9],[284,9]]},"1783":{"position":[[62,9],[159,9]]},"2115":{"position":[[4,9]]},"2119":{"position":[[4,9]]},"2476":{"position":[[122,9]]},"2478":{"position":[[232,9]]},"2831":{"position":[[571,9]]},"2925":{"position":[[28,10]]},"2929":{"position":[[332,9],[342,9]]},"2935":{"position":[[647,9],[657,9],[760,9]]},"2937":{"position":[[744,9],[754,9],[857,9],[998,9],[1063,9]]},"2941":{"position":[[28,10]]},"2945":{"position":[[332,9],[342,9]]},"2955":{"position":[[28,10]]},"2959":{"position":[[332,9],[342,9]]},"3289":{"position":[[26,9]]},"3321":{"position":[[229,9],[248,9]]},"3962":{"position":[[805,9],[849,9]]},"3986":{"position":[[69,9]]},"4006":{"position":[[366,9]]}}}],["dbcontexterroreventdata",{"_index":2960,"t":{"567":{"position":[[338,23]]},"931":{"position":[[1093,23],[1226,23]]},"933":{"position":[[338,23]]}}}],["dbcontexteventdata",{"_index":2952,"t":{"567":{"position":[[109,18]]},"570":{"position":[[652,18]]},"931":{"position":[[277,18],[475,18]]},"933":{"position":[[109,18],[480,18]]},"2937":{"position":[[915,18]]}}}],["dbcontextloc",{"_index":2815,"t":{"522":{"position":[[78,16]]},"655":{"position":[[407,16]]},"696":{"position":[[1936,16],[2900,16],[4482,16]]},"698":{"position":[[910,17]]},"747":{"position":[[693,16],[843,16]]},"749":{"position":[[328,16],[446,16],[674,16],[813,16],[994,16],[1116,16]]},"844":{"position":[[546,16]]},"846":{"position":[[691,16]]},"877":{"position":[[853,16],[967,16],[1230,16],[1340,16]]},"889":{"position":[[422,16],[538,16]]},"949":{"position":[[808,17]]},"1035":{"position":[[10,16]]},"1037":{"position":[[664,16],[781,16]]},"1145":{"position":[[332,16]]},"1147":{"position":[[223,16]]},"1151":{"position":[[301,16]]},"1277":{"position":[[328,16]]},"1779":{"position":[[448,16]]},"1781":{"position":[[300,16]]},"2929":{"position":[[358,16]]},"2935":{"position":[[673,16]]},"2937":{"position":[[770,16]]},"2945":{"position":[[358,16]]},"2959":{"position":[[358,16]]}}}],["dbcontextlocatortyp",{"_index":5984,"t":{"2123":{"position":[[43,20]]}}}],["dbcontextmod",{"_index":2793,"t":{"516":{"position":[[662,13]]},"3126":{"position":[[298,13]]}}}],["dbcontextopt",{"_index":2770,"t":{"508":{"position":[[336,16]]},"510":{"position":[[368,16]]},"516":{"position":[[341,16]]},"518":{"position":[[271,16]]},"534":{"position":[[445,16]]},"570":{"position":[[441,16]]},"653":{"position":[[474,16]]},"745":{"position":[[239,16]]},"832":{"position":[[363,16]]},"846":{"position":[[519,16]]},"947":{"position":[[382,16],[892,16]]},"1054":{"position":[[277,16]]},"1056":{"position":[[315,16]]},"1066":{"position":[[477,16]]},"1311":{"position":[[258,16]]},"1313":{"position":[[900,16]]},"1353":{"position":[[441,16]]},"2925":{"position":[[362,16]]},"2933":{"position":[[354,16]]},"2935":{"position":[[425,16]]},"2937":{"position":[[522,16]]},"2941":{"position":[[362,16]]},"2949":{"position":[[274,16]]},"2951":{"position":[[261,16]]},"2955":{"position":[[362,16]]},"2963":{"position":[[321,16]]}}}],["dbcontextoptionsbuild",{"_index":2776,"t":{"512":{"position":[[153,23]]},"518":{"position":[[372,23]]},"534":{"position":[[547,23]]},"915":{"position":[[123,23]]},"1313":{"position":[[1002,23]]},"2951":{"position":[[362,23]]},"3291":{"position":[[501,23],[1762,23]]},"3932":{"position":[[843,23],[896,23]]}}}],["dbcontextpool",{"_index":5050,"t":{"1566":{"position":[[577,13]]}}}],["dbcontextsavechangesinterceptor",{"_index":3786,"t":{"931":{"position":[[152,31]]}}}],["dbdataread",{"_index":3771,"t":{"929":{"position":[[1015,12],[1111,12],[1253,12],[1355,12],[1535,12],[1618,12],[1739,12],[1828,12]]}}}],["dbhelper",{"_index":10081,"t":{"3984":{"position":[[1031,9]]}}}],["dbname",{"_index":7607,"t":{"3215":{"position":[[152,6],[342,6]]}}}],["dbo",{"_index":1807,"t":{"247":{"position":[[258,3],[394,3],[573,3]]},"696":{"position":[[723,3],[803,3]]},"822":{"position":[[207,3]]},"824":{"position":[[219,3]]},"828":{"position":[[16,3],[104,3]]},"834":{"position":[[198,3]]},"836":{"position":[[239,3]]},"889":{"position":[[600,3],[646,3]]},"913":{"position":[[69,3]]},"1037":{"position":[[775,3]]},"1125":{"position":[[240,3],[295,3]]},"1185":{"position":[[166,3],[221,3]]},"1787":{"position":[[25,3]]},"2959":{"position":[[584,3]]},"2963":{"position":[[445,3]]},"3291":{"position":[[1685,3]]},"3936":{"position":[[602,3]]}}}],["dbparamet",{"_index":4000,"t":{"1127":{"position":[[149,11],[242,11],[320,11]]},"1131":{"position":[[1,11]]},"1135":{"position":[[18,11]]},"1185":{"position":[[426,11],[519,11],[597,11]]},"1200":{"position":[[26,11]]},"1234":{"position":[[900,11]]},"1269":{"position":[[237,11]]},"3914":{"position":[[2446,12]]},"3962":{"position":[[1404,11]]}}}],["dbprovid",{"_index":2781,"t":{"514":{"position":[[413,10],[553,10],[731,10]]},"516":{"position":[[631,10]]},"524":{"position":[[461,10],[563,10],[661,10],[760,10]]},"526":{"position":[[309,10]]},"534":{"position":[[336,10],[639,10]]},"653":{"position":[[365,10]]},"685":{"position":[[102,10],[270,10]]},"698":{"position":[[373,10]]},"706":{"position":[[181,10]]},"899":{"position":[[51,10],[112,10],[195,10],[288,10],[356,10],[434,10],[511,10],[568,10],[642,10],[764,10],[832,10],[890,10],[984,10],[1050,10],[1202,10],[1285,10],[1435,10],[1588,10],[1727,10],[1828,10]]},"915":{"position":[[193,10],[390,10]]},"947":{"position":[[262,10],[756,10]]},"1066":{"position":[[323,10]]},"1311":{"position":[[149,10]]},"1313":{"position":[[401,10]]},"1319":{"position":[[182,10]]},"1353":{"position":[[332,10]]},"2925":{"position":[[212,10]]},"2933":{"position":[[206,10]]},"2935":{"position":[[277,10]]},"2937":{"position":[[374,10]]},"2941":{"position":[[212,10]]},"2955":{"position":[[212,10]]},"2963":{"position":[[193,10]]},"3932":{"position":[[962,10],[1029,10]]},"3968":{"position":[[768,10]]}}}],["dbset",{"_index":1615,"t":{"220":{"position":[[253,10],[311,10]]},"1765":{"position":[[140,5]]},"1783":{"position":[[34,5]]},"3996":{"position":[[479,5]]}}}],["dbtype",{"_index":4012,"t":{"1131":{"position":[[114,6],[128,6]]},"1302":{"position":[[159,6],[227,6]]},"3215":{"position":[[257,6],[275,6]]},"3226":{"position":[[108,6],[115,6],[243,6],[250,6]]},"3228":{"position":[[76,6],[94,6]]},"3254":{"position":[[167,6],[176,6],[449,6],[458,6],[824,6],[833,6]]},"3275":{"position":[[87,6],[96,6]]}}}],["dbupdateexcept",{"_index":3265,"t":{"655":{"position":[[61,17]]}}}],["dc",{"_index":7796,"t":{"3267":{"position":[[164,2],[265,2],[341,2],[424,2]]}}}],["dd",{"_index":4868,"t":{"1511":{"position":[[3736,2]]},"2087":{"position":[[70,2]]},"2361":{"position":[[200,2],[292,2],[597,2]]},"2398":{"position":[[71,2],[239,2]]},"2400":{"position":[[102,2]]},"2402":{"position":[[173,2]]},"2406":{"position":[[316,2],[623,2]]},"2409":{"position":[[110,2]]},"2411":{"position":[[98,2]]},"2413":{"position":[[98,2]]},"2415":{"position":[[303,2]]},"2426":{"position":[[119,2]]},"2428":{"position":[[121,2]]},"2430":{"position":[[105,2]]},"2432":{"position":[[105,2]]},"2434":{"position":[[307,2],[644,2]]},"2438":{"position":[[175,2]]},"2440":{"position":[[211,2],[584,2]]},"2442":{"position":[[416,2],[648,2],[921,2],[1204,2],[1438,2],[1695,2],[1923,2]]},"2468":{"position":[[139,2]]},"2470":{"position":[[197,2]]},"2472":{"position":[[328,2]]},"2751":{"position":[[288,2]]},"3430":{"position":[[3753,2]]},"3432":{"position":[[1487,2],[1678,2],[1929,2],[4970,2]]}}}],["ddd",{"_index":7463,"t":{"3131":{"position":[[41,3]]}}}],["dddd",{"_index":8111,"t":{"3430":{"position":[[3777,4]]},"3432":{"position":[[4994,4]]}}}],["de",{"_index":6560,"t":{"2559":{"position":[[1215,2],[1221,2],[1235,2],[1238,2],[1248,2],[1264,2],[1278,2]]},"2768":{"position":[[652,2],[1070,2]]}}}],["de556f0",{"_index":9497,"t":{"3934":{"position":[[341,7]]}}}],["debug",{"_index":217,"t":{"13":{"position":[[47,5]]},"1551":{"position":[[33,5]]},"2171":{"position":[[222,5],[229,5]]},"2296":{"position":[[47,5]]},"2625":{"position":[[550,5]]},"3416":{"position":[[133,5]]},"3424":{"position":[[255,5],[262,5]]},"3442":{"position":[[162,5]]},"3636":{"position":[[626,5],[709,5],[745,5]]}}}],["dec",{"_index":2673,"t":{"482":{"position":[[185,3]]},"2418":{"position":[[426,3]]}}}],["decim",{"_index":5127,"t":{"1611":{"position":[[643,7]]},"1635":{"position":[[284,7],[292,7],[304,7]]},"1785":{"position":[[21,7],[72,7]]},"3273":{"position":[[941,7]]}}}],["declar",{"_index":2059,"t":{"310":{"position":[[981,12]]}}}],["decodeuricompon",{"_index":1145,"t":{"152":{"position":[[273,18],[547,18]]}}}],["decor",{"_index":8631,"t":{"3750":{"position":[[155,9],[220,9],[272,9]]}}}],["decrypt",{"_index":5234,"t":{"1679":{"position":[[102,7]]},"1681":{"position":[[153,7]]},"1687":{"position":[[214,7]]}}}],["decryptjwt",{"_index":1140,"t":{"152":{"position":[[176,10],[463,10]]}}}],["default",{"_index":1629,"t":{"220":{"position":[[604,7]]},"340":{"position":[[478,7]]},"350":{"position":[[99,7],[231,7]]},"371":{"position":[[689,7]]},"445":{"position":[[578,7],[599,7]]},"455":{"position":[[991,7]]},"461":{"position":[[303,7]]},"484":{"position":[[101,7]]},"494":{"position":[[810,7],[896,7]]},"560":{"position":[[658,7]]},"572":{"position":[[917,7]]},"685":{"position":[[226,7]]},"688":{"position":[[163,7]]},"761":{"position":[[92,7]]},"832":{"position":[[625,7]]},"927":{"position":[[662,7],[1074,7],[2277,7]]},"929":{"position":[[886,7],[1415,7],[1887,7],[2634,7],[3090,7],[3624,7],[4090,7]]},"931":{"position":[[575,7],[961,7],[1299,7]]},"1216":{"position":[[15,7]]},"1412":{"position":[[2262,7],[2353,7],[2892,7],[2971,7]]},"1474":{"position":[[384,8]]},"1657":{"position":[[257,7]]},"1801":{"position":[[2335,7]]},"1803":{"position":[[1747,7],[4290,7]]},"2345":{"position":[[407,7],[661,7]]},"2486":{"position":[[988,7]]},"2501":{"position":[[240,7]]},"2674":{"position":[[157,7],[258,7]]},"2696":{"position":[[53,7],[114,7]]},"2749":{"position":[[575,7]]},"2848":{"position":[[1517,7]]},"2868":{"position":[[153,7]]},"2875":{"position":[[279,7]]},"2879":{"position":[[96,7],[138,7],[434,7]]},"2881":{"position":[[152,7],[420,7]]},"2883":{"position":[[36,7]]},"2887":{"position":[[81,7],[421,7]]},"2889":{"position":[[111,7]]},"2893":{"position":[[77,7]]},"2897":{"position":[[362,7],[610,7]]},"2905":{"position":[[440,7]]},"3063":{"position":[[125,7],[528,7]]},"3069":{"position":[[196,7]]},"3080":{"position":[[1143,7]]},"3144":{"position":[[586,7]]},"3397":{"position":[[658,7],[863,7]]},"3430":{"position":[[1089,7],[1603,7],[2221,7]]},"3432":{"position":[[322,7]]},"3434":{"position":[[727,7],[1075,7]]},"3442":{"position":[[63,7],[113,7],[152,7]]},"3462":{"position":[[18,7]]},"3468":{"position":[[151,7]]},"3496":{"position":[[338,7]]},"3506":{"position":[[511,7]]},"3539":{"position":[[407,7],[539,7]]},"3547":{"position":[[485,7]]},"3551":{"position":[[262,7]]},"3553":{"position":[[241,7]]},"3555":{"position":[[262,7]]},"3557":{"position":[[264,7]]},"3559":{"position":[[273,7]]},"3599":{"position":[[48,7]]},"3601":{"position":[[861,7],[1016,7],[1161,7],[1312,7],[1461,7],[1678,7]]},"3634":{"position":[[17,7]]},"3696":{"position":[[96,7],[130,7]]},"3706":{"position":[[117,7],[520,7]]},"3708":{"position":[[3152,7],[3479,7],[3502,7],[3527,7]]},"3779":{"position":[[1817,7]]},"3802":{"position":[[2591,7]]},"3804":{"position":[[351,7],[653,7]]},"3808":{"position":[[216,7]]},"3920":{"position":[[803,7]]},"3922":{"position":[[792,7],[807,7]]},"3924":{"position":[[955,7],[1038,7]]},"3932":{"position":[[1722,7]]},"3956":{"position":[[2492,7],[2811,7],[2834,7],[2859,7]]}}}],["defaultappservic",{"_index":194,"t":{"11":{"position":[[983,17]]},"2294":{"position":[[1031,17]]}}}],["defaultarea",{"_index":5198,"t":{"1661":{"position":[[561,11]]},"3023":{"position":[[558,11]]}}}],["defaultauthenticateschem",{"_index":1041,"t":{"129":{"position":[[61,25]]}}}],["defaultbuild",{"_index":8045,"t":{"3401":{"position":[[250,14]]}}}],["defaultchallengeschem",{"_index":1042,"t":{"129":{"position":[[148,22]]}}}],["defaultcontractresolv",{"_index":6231,"t":{"2359":{"position":[[369,23]]}}}],["defaultcontrol",{"_index":2530,"t":{"435":{"position":[[224,17],[592,17],[924,17]]},"2713":{"position":[[572,17],[1003,17],[1173,17],[1889,17]]},"3397":{"position":[[1009,17]]}}}],["defaultcultur",{"_index":6393,"t":{"2522":{"position":[[113,14]]},"2553":{"position":[[113,14]]},"3031":{"position":[[113,14]]},"3033":{"position":[[83,14]]}}}],["defaultdbcontext",{"_index":2863,"t":{"534":{"position":[[369,16],[401,16],[428,16],[462,16],[670,16]]},"653":{"position":[[398,16],[430,16],[457,16],[491,16]]},"734":{"position":[[461,16]]},"745":{"position":[[163,16],[195,16],[222,16],[256,16]]},"761":{"position":[[60,16]]},"947":{"position":[[295,16],[327,16],[365,16],[399,16]]},"1311":{"position":[[182,16],[214,16],[241,16],[275,16]]},"1313":{"position":[[434,16],[466,16],[557,16],[629,16],[824,16],[856,16],[883,16],[917,16]]},"1317":{"position":[[396,16]]},"1319":{"position":[[164,16],[312,16]]},"1353":{"position":[[365,16],[397,16],[424,16],[458,16]]},"2821":{"position":[[548,16]]},"3291":{"position":[[525,16],[643,16],[986,16]]},"3992":{"position":[[3215,16]]}}}],["defaulterrorcod",{"_index":5756,"t":{"1885":{"position":[[37,16]]},"3009":{"position":[[69,16]]}}}],["defaulterrormessag",{"_index":3227,"t":{"617":{"position":[[2775,19]]},"1885":{"position":[[70,19],[288,19]]},"3009":{"position":[[102,19]]},"3011":{"position":[[34,19]]}}}],["defaultgroupnam",{"_index":7307,"t":{"3063":{"position":[[92,16]]},"3634":{"position":[[72,16]]},"3706":{"position":[[84,16]]}}}],["defaulthttpcontext",{"_index":970,"t":{"127":{"position":[[664,18]]},"133":{"position":[[587,18],[905,18]]},"146":{"position":[[932,18]]}}}],["defaulthttpmethod",{"_index":5192,"t":{"1661":{"position":[[74,17]]},"3023":{"position":[[75,17]]}}}],["defaultifempti",{"_index":3659,"t":{"862":{"position":[[159,14],[396,14]]}}}],["defaultmodul",{"_index":5193,"t":{"1661":{"position":[[114,13]]},"3023":{"position":[[115,13]]}}}],["defaultrequesthead",{"_index":8276,"t":{"3498":{"position":[[156,21],[229,21]]},"3543":{"position":[[156,21],[229,21]]},"3575":{"position":[[216,21],[289,21]]},"3581":{"position":[[219,21],[301,21]]},"3583":{"position":[[324,21],[406,21]]}}}],["defaultrouteprefix",{"_index":5178,"t":{"1641":{"position":[[523,18]]},"1661":{"position":[[34,18],[618,18]]},"3023":{"position":[[35,18],[615,18]]},"3938":{"position":[[310,18]]}}}],["defaultsil",{"_index":7188,"t":{"2903":{"position":[[238,14],[305,14],[374,14]]},"3924":{"position":[[2381,14],[2448,14],[2517,14]]}}}],["defaulttypemap",{"_index":2877,"t":{"544":{"position":[[237,14]]}}}],["defaultunifi",{"_index":8603,"t":{"3716":{"position":[[965,12]]}}}],["defaultunify2",{"_index":8605,"t":{"3716":{"position":[[1029,13]]}}}],["defin",{"_index":9145,"t":{"3914":{"position":[[3237,7]]}}}],["definit",{"_index":3223,"t":{"617":{"position":[[2070,11],[2607,11]]},"1420":{"position":[[92,11],[477,11]]},"1867":{"position":[[242,11]]},"1869":{"position":[[129,11],[229,11]]},"3001":{"position":[[38,11]]},"3003":{"position":[[36,11]]},"3015":{"position":[[31,11]]},"3017":{"position":[[33,11]]},"3055":{"position":[[36,11]]},"3057":{"position":[[38,11]]}}}],["delay",{"_index":2727,"t":{"490":{"position":[[348,5]]},"492":{"position":[[688,5]]},"2482":{"position":[[127,5],[594,5],[600,5]]},"2484":{"position":[[694,5]]},"2751":{"position":[[373,5]]},"2805":{"position":[[472,5]]},"2813":{"position":[[646,5]]},"2817":{"position":[[925,5]]},"2825":{"position":[[127,5],[594,5],[600,5]]},"2827":{"position":[[740,5]]},"2829":{"position":[[716,5],[924,5]]},"2856":{"position":[[1005,5]]},"3768":{"position":[[531,5]]}}}],["delet",{"_index":1920,"t":{"278":{"position":[[141,6],[162,6],[183,6],[202,6]]},"552":{"position":[[284,6],[443,6]]},"570":{"position":[[1021,7]]},"771":{"position":[[120,6]]},"779":{"position":[[36,6],[62,6],[126,7]]},"783":{"position":[[36,6],[59,6]]},"1170":{"position":[[442,6],[977,6]]},"1244":{"position":[[209,6],[251,6]]},"1468":{"position":[[17,6]]},"1576":{"position":[[212,6]]},"1594":{"position":[[99,6]]},"1596":{"position":[[162,6]]},"1603":{"position":[[222,6],[242,6]]},"1615":{"position":[[194,6],[296,6]]},"1631":{"position":[[241,6],[706,6]]},"1661":{"position":[[1130,6],[1142,6],[1165,6],[1187,6]]},"1703":{"position":[[328,6],[496,6]]},"1705":{"position":[[150,6],[189,6]]},"2764":{"position":[[95,6]]},"2836":{"position":[[1138,6],[1211,6]]},"2846":{"position":[[279,6]]},"2937":{"position":[[1198,7],[1511,7]]},"3023":{"position":[[1127,6],[1139,6],[1162,6],[1184,6]]},"3082":{"position":[[308,6]]},"3224":{"position":[[1241,6],[1358,6]]},"3234":{"position":[[397,7]]},"3258":{"position":[[365,6],[387,6]]},"3271":{"position":[[31,10],[115,10],[174,10]]},"3291":{"position":[[1673,6]]},"3483":{"position":[[334,6],[365,6],[1117,6]]},"3486":{"position":[[234,6],[289,6]]},"3535":{"position":[[326,6],[337,6],[368,6]]},"3620":{"position":[[170,6],[418,6]]},"3770":{"position":[[3783,6]]},"3785":{"position":[[1078,6]]},"3812":{"position":[[1612,6]]}}}],["deleteasync",{"_index":3572,"t":{"779":{"position":[[219,11],[256,11]]},"783":{"position":[[112,11],[146,11]]},"3483":{"position":[[1125,11]]},"3486":{"position":[[297,11]]}}}],["deletebehavior",{"_index":3685,"t":{"877":{"position":[[1094,14]]}}}],["deletebyid",{"_index":7672,"t":{"3224":{"position":[[1265,10],[1285,11]]}}}],["deleteexist",{"_index":3575,"t":{"787":{"position":[[36,12],[65,12]]}}}],["deleteexistsasync",{"_index":3576,"t":{"787":{"position":[[124,17],[164,17]]}}}],["deleteexistsnow",{"_index":3577,"t":{"789":{"position":[[36,15],[68,15]]}}}],["deleteexistsnowasync",{"_index":3578,"t":{"789":{"position":[[130,20],[173,20]]}}}],["deletenow",{"_index":3573,"t":{"781":{"position":[[36,9],[65,9]]},"785":{"position":[[36,9],[62,9]]}}}],["deletenowasync",{"_index":3574,"t":{"781":{"position":[[120,14],[160,14]]},"785":{"position":[[118,14],[155,14]]},"3287":{"position":[[225,14],[550,14]]}}}],["deleterangeasync",{"_index":3520,"t":{"763":{"position":[[337,16]]}}}],["deletesql",{"_index":8825,"t":{"3785":{"position":[[547,9]]},"3812":{"position":[[823,9]]}}}],["deleteus",{"_index":5114,"t":{"1605":{"position":[[234,10]]}}}],["deletexxxasync",{"_index":8259,"t":{"3483":{"position":[[388,14]]},"3535":{"position":[[404,14]]}}}],["deliverytag",{"_index":5574,"t":{"1801":{"position":[[1928,11]]}}}],["demand",{"_index":7197,"t":{"2910":{"position":[[91,6]]}}}],["demo",{"_index":1482,"t":{"199":{"position":[[307,4]]}}}],["democlusteredcach",{"_index":1837,"t":{"251":{"position":[[327,18]]}}}],["demonstr",{"_index":7140,"t":{"2856":{"position":[[432,11]]}}}],["depend",{"_index":1727,"t":{"237":{"position":[[326,9],[641,9]]},"1385":{"position":[[153,10]]}}}],["dependcompon",{"_index":2284,"t":{"359":{"position":[[10,16],[155,16]]},"367":{"position":[[162,16]]}}}],["dependencycontext",{"_index":7351,"t":{"3069":{"position":[[178,17]]}}}],["dependencyinject",{"_index":23,"t":{"3":{"position":[[112,19],[199,19]]},"11":{"position":[[217,19]]},"146":{"position":[[178,19]]},"204":{"position":[[224,19]]},"210":{"position":[[260,19]]},"212":{"position":[[146,19],[435,19]]},"216":{"position":[[234,19],[626,19]]},"338":{"position":[[132,19]]},"411":{"position":[[135,19]]},"514":{"position":[[52,19],[100,19]]},"524":{"position":[[179,19]]},"595":{"position":[[64,19]]},"617":{"position":[[2240,19]]},"734":{"position":[[934,19],[1147,19],[1341,19],[1519,19],[1655,19],[1788,19],[2001,19],[2195,19],[2373,19],[2509,19],[2642,19],[2855,19],[3049,19],[3227,19],[3368,19],[3504,19],[3637,19],[3850,19],[4044,19],[4222,19],[4358,19],[4491,19],[4704,19],[4898,19],[5076,19],[5212,19],[5345,19],[5558,19],[5752,19],[5930,19],[6066,19],[6199,19],[6395,19],[6539,19],[6653,19],[6794,19]]},"1058":{"position":[[46,19]]},"1317":{"position":[[52,19],[100,19]]},"1408":{"position":[[113,19]]},"1410":{"position":[[119,19]]},"1412":{"position":[[366,19],[1830,19],[2577,19]]},"1414":{"position":[[133,19]]},"1424":{"position":[[497,19]]},"1582":{"position":[[138,19]]},"1843":{"position":[[64,19]]},"1867":{"position":[[407,19]]},"1883":{"position":[[77,19]]},"1979":{"position":[[141,19]]},"2294":{"position":[[217,19]]},"2357":{"position":[[362,19]]},"2486":{"position":[[116,19]]},"2711":{"position":[[154,19]]},"2807":{"position":[[178,19]]},"2813":{"position":[[751,19]]},"2819":{"position":[[109,19]]},"2821":{"position":[[140,19]]},"2836":{"position":[[199,19],[1412,19]]},"2881":{"position":[[582,19]]},"2889":{"position":[[291,19]]},"2897":{"position":[[314,19]]},"2901":{"position":[[101,19]]},"2905":{"position":[[186,19]]},"2927":{"position":[[58,19]]},"2943":{"position":[[58,19]]},"2957":{"position":[[58,19]]},"3144":{"position":[[167,19]]},"3373":{"position":[[240,19]]},"3379":{"position":[[13,19]]},"3399":{"position":[[171,19]]},"3630":{"position":[[188,19]]},"3708":{"position":[[674,19]]},"3956":{"position":[[311,19]]}}}],["dependencyinjectionset",{"_index":4294,"t":{"1420":{"position":[[59,27],[439,27]]},"3001":{"position":[[0,27]]},"3003":{"position":[[3,27]]}}}],["dependencymodel",{"_index":537,"t":{"91":{"position":[[134,15]]},"3069":{"position":[[85,15]]}}}],["dependentct",{"_index":1723,"t":{"237":{"position":[[219,12],[947,12]]}}}],["dependentevictioncallback",{"_index":1730,"t":{"237":{"position":[[414,25],[1041,25]]}}}],["dependentmessag",{"_index":1739,"t":{"237":{"position":[[835,16],[1239,16]]}}}],["dependentviewmodel",{"_index":1735,"t":{"237":{"position":[[657,18]]}}}],["dependson",{"_index":2234,"t":{"340":{"position":[[1338,9],[1614,9],[1892,9]]},"353":{"position":[[63,9],[83,9]]},"357":{"position":[[51,9]]},"359":{"position":[[0,9],[227,9],[351,9]]},"367":{"position":[[87,9]]}}}],["dependsonattribut",{"_index":2289,"t":{"359":{"position":[[174,18]]}}}],["deploy",{"_index":4513,"t":{"1503":{"position":[[71,6]]},"3069":{"position":[[352,9]]}}}],["depth",{"_index":4181,"t":{"1379":{"position":[[354,5]]}}}],["desc",{"_index":5222,"t":{"1674":{"position":[[7,4]]},"1679":{"position":[[6,4]]},"1689":{"position":[[33,4],[332,4]]},"3964":{"position":[[233,4]]}}}],["descencrypt",{"_index":5232,"t":{"1679":{"position":[[30,14],[87,14]]}}}],["deschash",{"_index":5231,"t":{"1679":{"position":[[19,8],[110,8],[145,8]]}}}],["descript",{"_index":2806,"t":{"520":{"position":[[299,11]]},"769":{"position":[[302,11],[403,11],[594,11]]},"901":{"position":[[327,11]]},"1315":{"position":[[327,11]]},"1535":{"position":[[186,11],[219,11],[463,11]]},"1551":{"position":[[347,11],[380,11]]},"1559":{"position":[[63,11]]},"1641":{"position":[[443,11]]},"1887":{"position":[[342,11]]},"2444":{"position":[[111,11]]},"2468":{"position":[[102,11]]},"2472":{"position":[[291,11]]},"2551":{"position":[[297,11]]},"3063":{"position":[[683,11],[1585,11]]},"3065":{"position":[[99,11]]},"3642":{"position":[[173,11]]},"3650":{"position":[[246,11]]},"3694":{"position":[[68,11],[119,11]]},"3706":{"position":[[675,11],[1596,11],[1847,11]]},"3770":{"position":[[539,11],[845,11],[1921,11],[2278,11],[3554,11],[4095,11],[5225,11],[5630,11]]},"3777":{"position":[[194,11]]},"3779":{"position":[[756,11],[1096,11],[1483,11],[1652,11],[1750,11]]},"3785":{"position":[[221,11],[887,11],[1257,11],[1635,11]]},"3798":{"position":[[251,11]]},"3802":{"position":[[835,11],[1466,11],[2116,11],[2417,11],[2525,11]]},"3808":{"position":[[2968,11],[3316,11]]},"3812":{"position":[[251,11],[1171,11],[1868,11],[2575,11]]},"3817":{"position":[[728,11],[1046,11],[1772,11],[2058,11]]},"3821":{"position":[[249,11],[550,11]]},"3896":{"position":[[174,11],[475,11]]},"3938":{"position":[[1232,11],[1283,11]]}}}],["descriptor",{"_index":3456,"t":{"734":{"position":[[1424,10],[2278,10],[3132,10],[4127,10],[4981,10],[5835,10]]}}}],["deseri",{"_index":1930,"t":{"284":{"position":[[100,11],[131,11],[291,11],[318,11]]},"286":{"position":[[25,11],[47,11]]},"1801":{"position":[[1790,11]]},"2073":{"position":[[15,11]]},"2081":{"position":[[32,11]]},"2345":{"position":[[602,11]]},"2352":{"position":[[99,11],[382,11]]},"2357":{"position":[[1136,11]]},"2379":{"position":[[938,11]]},"2383":{"position":[[204,13]]},"2848":{"position":[[1542,11]]}}}],["deserializeobject",{"_index":5620,"t":{"1803":{"position":[[3756,17]]},"2357":{"position":[[1222,17]]},"2379":{"position":[[1024,17]]}}}],["design",{"_index":3470,"t":{"734":{"position":[[6929,6],[7081,6],[7225,6],[7331,6],[7442,6],[7819,6]]},"3329":{"position":[[325,6]]}}}],["desktop",{"_index":6873,"t":{"2749":{"position":[[41,7],[126,7],[815,7]]},"3080":{"position":[[609,7],[694,7],[1383,7]]},"3142":{"position":[[314,7]]}}}],["dest",{"_index":6810,"t":{"2690":{"position":[[178,4],[186,4],[243,4],[251,4]]}}}],["destin",{"_index":6814,"t":{"2694":{"position":[[67,12],[115,11],[214,12],[259,11]]}}}],["detachedent",{"_index":3713,"t":{"887":{"position":[[86,16]]},"958":{"position":[[92,16]]},"960":{"position":[[1655,16]]},"965":{"position":[[194,16],[527,16]]},"967":{"position":[[211,16],[548,16]]},"969":{"position":[[188,16],[518,16]]},"971":{"position":[[188,16],[518,16]]},"973":{"position":[[161,16],[385,16]]},"975":{"position":[[169,16],[405,16]]}}}],["detail",{"_index":2543,"t":{"441":{"position":[[231,6],[488,6]]},"853":{"position":[[46,6],[101,6],[178,6],[283,6],[463,6],[550,6],[584,6]]},"1297":{"position":[[79,6]]},"3307":{"position":[[137,7]]},"3620":{"position":[[204,6]]},"3702":{"position":[[2722,7]]},"3754":{"position":[[180,6],[207,6]]}}}],["detailederrorsen",{"_index":3410,"t":{"713":{"position":[[574,21]]},"734":{"position":[[582,21]]}}}],["detectchang",{"_index":2968,"t":{"570":{"position":[[811,13]]}}}],["develop",{"_index":798,"t":{"114":{"position":[[603,11]]},"429":{"position":[[131,11],[158,11]]},"451":{"position":[[103,11],[186,11]]},"713":{"position":[[341,11]]},"734":{"position":[[355,11]]},"1468":{"position":[[325,9]]},"2875":{"position":[[982,11]]},"3430":{"position":[[379,11],[1534,11],[3030,11],[4335,11]]},"3432":{"position":[[2985,11],[5552,11]]},"3442":{"position":[[41,11],[215,11]]},"3446":{"position":[[1078,11]]},"3452":{"position":[[1519,11]]},"3468":{"position":[[67,11]]},"3601":{"position":[[631,11],[1588,11]]},"3702":{"position":[[1666,11]]},"3916":{"position":[[4515,11]]},"3928":{"position":[[1640,11]]}}}],["devop",{"_index":4169,"t":{"1379":{"position":[[33,6]]},"2555":{"position":[[45,6]]}}}],["devopschixubushujicheng",{"_index":4515,"t":{"1505":{"position":[[111,23]]}}}],["devtool",{"_index":4409,"t":{"1483":{"position":[[587,8],[1017,8]]}}}],["dhivehi",{"_index":6505,"t":{"2559":{"position":[[711,7],[726,7]]}}}],["di",{"_index":4202,"t":{"1385":{"position":[[177,2]]},"1389":{"position":[[198,2]]},"2768":{"position":[[961,2]]}}}],["diagnost",{"_index":2996,"t":{"572":{"position":[[108,11]]},"927":{"position":[[36,11]]},"929":{"position":[[36,11]]},"931":{"position":[[36,11]]},"1468":{"position":[[354,10]]},"1925":{"position":[[97,11]]},"1933":{"position":[[97,11]]}}}],["dianzhenzi",{"_index":4968,"t":{"1539":{"position":[[249,10]]}}}],["dic",{"_index":1948,"t":{"288":{"position":[[468,3],[517,3]]}}}],["dictionari",{"_index":1030,"t":{"127":{"position":[[1715,10],[1819,10]]},"144":{"position":[[149,10]]},"288":{"position":[[327,10],[453,10],[531,10],[692,10]]},"294":{"position":[[68,10]]},"1135":{"position":[[79,10]]},"1160":{"position":[[262,10],[1168,10]]},"1162":{"position":[[280,10],[1234,10]]},"1200":{"position":[[87,10],[188,10]]},"1234":{"position":[[812,10]]},"1539":{"position":[[1249,10]]},"1683":{"position":[[38,10]]},"2132":{"position":[[56,10],[160,10],[290,10],[409,10]]},"2359":{"position":[[210,10]]},"2379":{"position":[[348,10],[402,10]]},"3267":{"position":[[128,10],[147,10],[172,10],[315,10]]},"3466":{"position":[[276,10]]},"3492":{"position":[[88,10]]},"3494":{"position":[[59,10]]},"3496":{"position":[[58,10]]},"3500":{"position":[[467,10]]},"3510":{"position":[[127,10]]},"3551":{"position":[[435,10]]},"3754":{"position":[[77,10]]},"3777":{"position":[[361,10]]},"3781":{"position":[[522,10],[581,10]]},"3924":{"position":[[4672,10]]},"3934":{"position":[[890,10]]}}}],["dictionarykeypolici",{"_index":1952,"t":{"288":{"position":[[636,19]]},"2359":{"position":[[176,19]]}}}],["differ",{"_index":7139,"t":{"2856":{"position":[[365,9],[467,6]]}}}],["diqiguoji008",{"_index":4584,"t":{"1511":{"position":[[308,12]]}}}],["direct",{"_index":4010,"t":{"1131":{"position":[[45,9],[167,9]]}}}],["directori",{"_index":283,"t":{"19":{"position":[[201,9],[229,9]]},"455":{"position":[[47,9]]},"1497":{"position":[[81,9],[272,9]]},"1741":{"position":[[271,9],[299,9],[1080,9],[1108,9],[1932,9],[1960,9]]}}}],["disabl",{"_index":3365,"t":{"696":{"position":[[1379,7],[2560,7],[3482,7],[4164,7]]},"2749":{"position":[[649,8]]},"3080":{"position":[[1217,8]]}}}],["disablecor",{"_index":2504,"t":{"421":{"position":[[35,11]]}}}],["disablerequestsizelimit",{"_index":5411,"t":{"1751":{"position":[[31,23]]},"1753":{"position":[[228,23]]}}}],["discrimin",{"_index":10127,"t":{"3986":{"position":[[1346,13]]}}}],["display",{"_index":4964,"t":{"1539":{"position":[[185,7]]},"2856":{"position":[[1287,8]]}}}],["displayclass0",{"_index":3477,"t":{"734":{"position":[[7268,13]]},"3832":{"position":[[2021,13],[3782,13]]}}}],["displayclass16",{"_index":8970,"t":{"3832":{"position":[[2962,14],[4723,14]]}}}],["displayclass3",{"_index":3482,"t":{"734":{"position":[[7375,13]]}}}],["displaynam",{"_index":8188,"t":{"3452":{"position":[[1202,11]]},"3916":{"position":[[4198,11]]}}}],["dispos",{"_index":5581,"t":{"1801":{"position":[[3112,7],[3131,7],[3154,7]]},"1803":{"position":[[2062,7],[2074,7],[2171,9],[2214,7],[2227,9],[2244,9],[2313,7],[5090,7]]},"1823":{"position":[[682,7],[708,7]]},"2175":{"position":[[68,7]]},"2218":{"position":[[10,7]]},"2458":{"position":[[10,7]]},"2731":{"position":[[617,7],[650,7]]},"2899":{"position":[[576,7]]},"3287":{"position":[[2957,7]]},"3385":{"position":[[59,7]]},"3387":{"position":[[234,7]]},"3389":{"position":[[362,7]]},"3391":{"position":[[254,7]]},"3393":{"position":[[395,7]]},"3466":{"position":[[634,7],[1724,7],[1751,7]]},"3791":{"position":[[2084,7],[2111,7]]},"3910":{"position":[[1351,7]]}}}],["disposeasync",{"_index":9195,"t":{"3916":{"position":[[7417,12],[7674,12],[8069,12],[8365,12],[8833,12]]}}}],["disposeunmanagedobject",{"_index":5951,"t":{"2061":{"position":[[4,23]]}}}],["disposit",{"_index":264,"t":{"15":{"position":[[353,11],[495,11]]},"17":{"position":[[347,11],[489,11]]},"1739":{"position":[[520,11],[662,11]]},"3930":{"position":[[1310,11]]}}}],["distcach",{"_index":1811,"t":{"247":{"position":[[357,9],[521,9]]}}}],["distcache_connectionstr",{"_index":1814,"t":{"247":{"position":[[521,26]]}}}],["distributedcach",{"_index":5043,"t":{"1566":{"position":[[275,16]]}}}],["distributedcacheentryopt",{"_index":1853,"t":{"253":{"position":[[707,28]]}}}],["div",{"_index":6398,"t":{"2532":{"position":[[28,3],[273,3]]},"2559":{"position":[[707,3],[719,3]]},"3744":{"position":[[71,3],[128,3],[221,3],[245,3]]},"3746":{"position":[[49,3],[96,3],[220,3],[244,3]]},"3748":{"position":[[151,3],[170,3],[226,3],[240,3],[246,3],[260,3],[266,3],[280,3]]}}}],["divid",{"_index":8214,"t":{"3452":{"position":[[3157,6]]},"3916":{"position":[[6153,6]]}}}],["dividebyzeroexcept",{"_index":8213,"t":{"3452":{"position":[[3108,21]]},"3916":{"position":[[6104,21]]}}}],["dk",{"_index":6503,"t":{"2559":{"position":[[696,2]]}}}],["dll",{"_index":4158,"t":{"1377":{"position":[[207,3]]},"1379":{"position":[[639,3]]},"1472":{"position":[[37,3]]},"2623":{"position":[[214,3],[237,3]]},"2625":{"position":[[83,3],[354,3],[389,3],[478,3],[501,3]]},"2627":{"position":[[184,3]]},"2629":{"position":[[84,3]]},"2745":{"position":[[64,3],[134,3],[203,3]]},"2751":{"position":[[412,3]]},"2762":{"position":[[28,3]]},"2981":{"position":[[192,3]]},"3740":{"position":[[80,3],[400,3]]},"3950":{"position":[[560,3]]},"3966":{"position":[[1818,3]]},"3980":{"position":[[724,3]]}}}],["dm",{"_index":3395,"t":{"698":{"position":[[793,2],[826,2]]},"803":{"position":[[74,2]]},"805":{"position":[[74,2]]},"895":{"position":[[74,2]]},"897":{"position":[[465,2],[498,2]]},"899":{"position":[[1012,2],[1061,2]]},"1105":{"position":[[74,2]]},"1309":{"position":[[629,2],[662,2]]}}}],["doasync",{"_index":6047,"t":{"2226":{"position":[[26,7]]},"2228":{"position":[[33,7]]}}}],["doc",{"_index":2510,"t":{"423":{"position":[[148,4]]},"461":{"position":[[96,4]]},"655":{"position":[[224,4]]},"773":{"position":[[94,4]]},"1468":{"position":[[287,4]]},"1503":{"position":[[25,4]]},"1547":{"position":[[453,4]]},"1549":{"position":[[524,4]]},"1947":{"position":[[154,4]]},"1965":{"position":[[26,4]]},"2387":{"position":[[8,4]]},"2555":{"position":[[185,4]]},"2557":{"position":[[44,4]]},"2573":{"position":[[213,4]]},"2764":{"position":[[150,4]]},"2856":{"position":[[1984,4]]},"2897":{"position":[[709,4]]},"3069":{"position":[[315,4]]},"3082":{"position":[[363,4]]},"3138":{"position":[[179,4]]},"3189":{"position":[[434,4]]},"3215":{"position":[[905,3]]},"3265":{"position":[[176,3]]},"3267":{"position":[[692,3]]},"3269":{"position":[[588,3]]},"3271":{"position":[[273,3]]},"3307":{"position":[[225,4]]},"3702":{"position":[[1514,4],[1904,4]]},"3934":{"position":[[2892,4]]},"3996":{"position":[[1446,3]]}}}],["docexpans",{"_index":7314,"t":{"3063":{"position":[[296,12]]},"3706":{"position":[[288,12]]}}}],["docexpansionst",{"_index":7312,"t":{"3063":{"position":[[271,17]]},"3646":{"position":[[72,17],[110,17]]},"3706":{"position":[[263,17]]}}}],["docinclusionpred",{"_index":8500,"t":{"3680":{"position":[[156,21]]}}}],["docker",{"_index":628,"t":{"102":{"position":[[38,6],[243,6]]},"340":{"position":[[24,6]]},"1374":{"position":[[2,6]]},"1377":{"position":[[288,6],[353,6],[406,6],[479,6],[518,6],[554,6],[576,6],[600,6],[652,6],[659,6],[683,6],[694,6],[706,6],[730,6]]},"1481":{"position":[[4,6],[63,6]]},"1483":{"position":[[672,6],[1091,6],[1154,6]]},"1485":{"position":[[0,6],[184,6],[200,6],[221,6],[242,6]]},"1488":{"position":[[445,6],[1039,6],[1130,6],[1159,6],[1186,6],[1215,6],[1233,6],[1271,6],[1329,6],[1349,6],[1418,6],[1602,6],[1615,6]]},"1495":{"position":[[445,6]]},"1499":{"position":[[431,6],[522,6],[551,6],[578,6],[607,6],[625,6],[660,6],[695,6],[858,6]]},"1505":{"position":[[16,6]]},"3986":{"position":[[943,6]]}}}],["dockerfil",{"_index":4149,"t":{"1374":{"position":[[89,10]]},"1377":{"position":[[70,10],[218,10],[246,10],[316,10]]},"1379":{"position":[[59,10],[79,10],[650,10]]},"1483":{"position":[[3,10],[45,10],[1134,10]]},"1488":{"position":[[1254,10]]},"4000":{"position":[[849,10]]}}}],["dockerrongqihua",{"_index":4514,"t":{"1505":{"position":[[55,15]]}}}],["document",{"_index":3168,"t":{"606":{"position":[[425,8]]},"617":{"position":[[1184,8],[1212,8]]},"2607":{"position":[[284,8],[322,8]]},"3063":{"position":[[83,8]]},"3702":{"position":[[1077,13],[1209,13],[1865,9]]},"3706":{"position":[[75,8]]}}}],["documentgroup",{"_index":9809,"t":{"3966":{"position":[[287,14]]}}}],["documentnam",{"_index":7325,"t":{"3063":{"position":[[800,12],[829,12]]},"3670":{"position":[[37,12],[65,12],[196,12]]},"3706":{"position":[[792,12],[821,12]]}}}],["documenttitl",{"_index":7305,"t":{"3063":{"position":[[36,13]]},"3648":{"position":[[72,13]]},"3706":{"position":[[28,13]]}}}],["dog",{"_index":2894,"t":{"550":{"position":[[230,3],[260,3]]}}}],["doit",{"_index":6042,"t":{"2210":{"position":[[20,4]]},"2404":{"position":[[75,4],[154,4]]},"2450":{"position":[[20,4]]}}}],["done",{"_index":6876,"t":{"2749":{"position":[[188,4]]},"3080":{"position":[[756,4]]}}}],["donet5",{"_index":7620,"t":{"3215":{"position":[[889,6]]},"3250":{"position":[[121,6]]},"3265":{"position":[[160,6]]},"3267":{"position":[[676,6]]},"3269":{"position":[[572,6]]},"3271":{"position":[[257,6]]}}}],["dong",{"_index":4829,"t":{"1511":{"position":[[3075,4]]}}}],["doonc",{"_index":6040,"t":{"2208":{"position":[[120,6]]},"2398":{"position":[[147,6]]},"2400":{"position":[[10,6]]},"2402":{"position":[[81,6]]},"2406":{"position":[[178,6],[474,6]]},"2442":{"position":[[1316,6],[1573,6]]},"2444":{"position":[[138,6]]},"2448":{"position":[[120,6]]},"3978":{"position":[[1112,6]]}}}],["dosometh",{"_index":6292,"t":{"2406":{"position":[[223,11]]},"2415":{"position":[[210,11]]},"2434":{"position":[[214,11]]}}}],["dosomething1",{"_index":6342,"t":{"2442":{"position":[[322,12]]},"2470":{"position":[[103,12]]},"2478":{"position":[[103,12]]}}}],["dosomething2",{"_index":6344,"t":{"2442":{"position":[[554,12]]}}}],["dosomething3",{"_index":6346,"t":{"2442":{"position":[[827,12]]}}}],["dosomething4",{"_index":6349,"t":{"2442":{"position":[[1110,12]]}}}],["dosomething5",{"_index":6350,"t":{"2442":{"position":[[1344,12],[1601,12]]}}}],["dosomethingasync",{"_index":6293,"t":{"2406":{"position":[[525,16]]},"2434":{"position":[[546,16]]},"2442":{"position":[[1825,16]]}}}],["dotnet",{"_index":398,"t":{"46":{"position":[[45,6],[75,6]]},"53":{"position":[[83,6],[141,6]]},"60":{"position":[[45,6],[75,6]]},"64":{"position":[[109,6],[180,6]]},"70":{"position":[[45,6],[75,6]]},"77":{"position":[[83,6],[141,6]]},"247":{"position":[[281,6]]},"399":{"position":[[30,6],[124,6],[275,6],[376,6]]},"635":{"position":[[0,6]]},"722":{"position":[[0,6],[29,6]]},"726":{"position":[[0,6],[57,6]]},"1377":{"position":[[28,6],[104,6],[180,6]]},"1379":{"position":[[124,6],[424,6],[443,6],[519,6],[612,6]]},"1481":{"position":[[34,6],[53,6],[74,6],[103,6]]},"1483":{"position":[[19,6],[72,6],[135,6],[231,6],[371,6],[419,6],[450,6],[483,6],[509,6],[527,6],[541,6],[736,6],[750,6],[765,6],[819,6],[856,6],[874,6],[890,6],[908,6],[917,6],[950,6],[967,6],[1028,6],[1114,6],[1178,6]]},"1485":{"position":[[302,6]]},"1488":{"position":[[132,6],[146,6],[297,6],[795,6]]},"1495":{"position":[[132,6],[146,6],[297,6],[739,6]]},"1511":{"position":[[1033,6]]},"1516":{"position":[[191,6]]},"1520":{"position":[[152,6]]},"1532":{"position":[[0,6]]},"1535":{"position":[[10,6],[202,6],[506,6]]},"1547":{"position":[[95,6],[312,6],[381,6],[478,6]]},"1549":{"position":[[85,6],[137,6],[235,6],[317,6],[335,6],[401,6],[461,6],[549,6]]},"1551":{"position":[[363,6],[1154,6]]},"2317":{"position":[[4,6]]},"2387":{"position":[[33,6],[118,6]]},"2555":{"position":[[4,6],[210,6]]},"2637":{"position":[[8,6],[38,6]]},"2653":{"position":[[36,6],[140,6]]},"2664":{"position":[[8,6],[38,6]]},"2731":{"position":[[124,6]]},"2745":{"position":[[50,6],[110,6],[183,6]]},"2747":{"position":[[186,6]]},"2751":{"position":[[152,6]]},"2836":{"position":[[671,6],[762,6]]},"2856":{"position":[[2009,6]]},"2864":{"position":[[68,6]]},"2866":{"position":[[41,6]]},"2875":{"position":[[96,6],[109,6],[130,6],[182,6]]},"2897":{"position":[[734,6],[752,6]]},"3069":{"position":[[340,6]]},"3080":{"position":[[402,6]]},"3291":{"position":[[166,6],[814,6],[912,6],[1952,6],[2063,6]]},"3307":{"position":[[13,6],[218,6]]},"3321":{"position":[[67,6],[127,6]]},"3323":{"position":[[0,6],[64,6],[106,6],[148,6],[217,6],[255,6],[293,6],[516,6],[548,6]]},"3325":{"position":[[18,6]]},"3333":{"position":[[46,6]]},"3401":{"position":[[218,6]]},"3702":{"position":[[546,6]]},"3912":{"position":[[1350,6],[1401,6],[1452,6]]},"3934":{"position":[[759,6],[2825,6],[2855,6],[2917,6]]}}}],["dotnet_root",{"_index":4408,"t":{"1483":{"position":[[527,11],[967,11]]}}}],["dotnetchina",{"_index":520,"t":{"89":{"position":[[24,11]]},"114":{"position":[[1085,11]]},"148":{"position":[[180,11]]},"331":{"position":[[156,11]]},"386":{"position":[[44,11]]},"655":{"position":[[539,11]]},"734":{"position":[[8232,11]]},"917":{"position":[[30,11]]},"1511":{"position":[[469,11]]},"1551":{"position":[[746,11]]},"2501":{"position":[[58,11],[154,11]]},"2503":{"position":[[36,11]]},"2532":{"position":[[208,11]]},"2597":{"position":[[99,11]]},"2649":{"position":[[249,11]]},"2977":{"position":[[111,11]]},"2987":{"position":[[111,11]]},"2997":{"position":[[111,11]]},"3005":{"position":[[111,11]]},"3019":{"position":[[111,11]]},"3027":{"position":[[111,11]]},"3035":{"position":[[111,11]]},"3043":{"position":[[111,11]]},"3051":{"position":[[111,11]]},"3059":{"position":[[111,11]]},"3065":{"position":[[336,11]]},"3131":{"position":[[348,11]]},"3446":{"position":[[1560,11]]},"3452":{"position":[[2404,11]]},"3642":{"position":[[410,11]]},"3702":{"position":[[138,11],[1426,11],[1737,11],[2039,11],[2130,11],[2448,11]]},"3706":{"position":[[2084,11]]},"3910":{"position":[[332,11]]},"3912":{"position":[[150,11],[224,11],[298,11],[372,11],[446,11],[520,11],[594,11],[668,11]]},"3914":{"position":[[35,11],[109,11],[183,11],[257,11],[331,11],[405,11],[479,11],[553,11],[627,11],[701,11]]},"3916":{"position":[[35,11],[109,11],[183,11],[257,11],[331,11],[405,11],[479,11],[553,11],[627,11],[5400,11]]},"3918":{"position":[[35,11],[109,11],[183,11],[257,11],[331,11],[405,11],[479,11],[553,11],[627,11],[701,11]]},"3920":{"position":[[35,11],[109,11]]},"3928":{"position":[[2122,11]]},"3932":{"position":[[1636,11]]}}}],["dotnetcor",{"_index":6925,"t":{"2768":{"position":[[357,10],[1449,10]]}}}],["dotnetcorewebpublishtodockercommonconfig",{"_index":4466,"t":{"1488":{"position":[[958,41]]},"1495":{"position":[[902,41]]}}}],["doubl",{"_index":1911,"t":{"272":{"position":[[159,6]]},"1635":{"position":[[312,6],[319,6],[330,6]]},"2444":{"position":[[36,6]]},"3273":{"position":[[916,6]]}}}],["down",{"_index":4369,"t":{"1474":{"position":[[68,4]]},"3430":{"position":[[316,4],[2930,4],[4237,4]]},"3432":{"position":[[2885,4],[5454,4]]},"3601":{"position":[[531,4]]}}}],["download",{"_index":399,"t":{"46":{"position":[[66,8]]},"51":{"position":[[150,11]]},"60":{"position":[[66,8]]},"62":{"position":[[150,11]]},"70":{"position":[[66,8]]},"75":{"position":[[150,11]]},"1379":{"position":[[168,8]]},"1483":{"position":[[253,8],[289,8],[840,8]]},"2637":{"position":[[29,8]]},"2664":{"position":[[29,8]]},"3307":{"position":[[40,8]]},"3934":{"position":[[2846,8]]}}}],["dr",{"_index":7818,"t":{"3273":{"position":[[724,2],[734,2]]}}}],["dt",{"_index":3630,"t":{"836":{"position":[[292,2]]},"3267":{"position":[[202,2],[223,2]]},"3273":{"position":[[111,2],[285,2],[497,2]]}}}],["dto",{"_index":3058,"t":{"587":{"position":[[178,4]]},"877":{"position":[[2356,4]]},"1244":{"position":[[190,3]]},"1251":{"position":[[163,3]]},"1253":{"position":[[166,3]]},"1255":{"position":[[158,3]]},"1257":{"position":[[180,3]]},"1259":{"position":[[158,3]]},"1261":{"position":[[156,3]]},"1267":{"position":[[163,3]]},"1275":{"position":[[208,3]]},"1279":{"position":[[274,3]]},"1281":{"position":[[130,3]]},"2682":{"position":[[51,3]]},"2684":{"position":[[73,3],[83,3],[90,3],[110,3],[134,3],[156,3],[186,3],[237,3]]},"2688":{"position":[[37,3],[56,3],[86,3],[109,3],[124,3]]},"2690":{"position":[[166,3]]},"2692":{"position":[[76,3],[94,3]]}}}],["dtomodel",{"_index":3102,"t":{"587":{"position":[[1696,8]]}}}],["due",{"_index":8690,"t":{"3768":{"position":[[880,3],[1075,3],[1380,3],[1575,3],[1882,3],[2078,3],[2385,3]]}}}],["duhuo",{"_index":7434,"t":{"3112":{"position":[[83,5]]}}}],["durabl",{"_index":7836,"t":{"3282":{"position":[[229,10]]}}}],["dure",{"_index":3406,"t":{"713":{"position":[[334,6]]},"734":{"position":[[348,6]]}}}],["dynam",{"_index":1899,"t":{"270":{"position":[[14,7],[53,7],[125,7]]},"272":{"position":[[0,7]]},"274":{"position":[[0,7]]},"276":{"position":[[0,7]]},"278":{"position":[[0,7]]},"280":{"position":[[0,7]]},"282":{"position":[[0,7],[290,7]]},"284":{"position":[[0,7]]},"286":{"position":[[59,7],[139,7],[172,7]]},"288":{"position":[[0,7],[401,7]]},"290":{"position":[[0,7]]},"292":{"position":[[0,7]]},"294":{"position":[[0,7]]},"516":{"position":[[707,7]]},"528":{"position":[[296,7]]},"846":{"position":[[995,7],[1053,7]]},"879":{"position":[[65,7],[123,7]]},"3126":{"position":[[312,7]]},"3168":{"position":[[28,7]]},"3972":{"position":[[82,7]]}}}],["dynamicapicontrol",{"_index":143,"t":{"11":{"position":[[258,20]]},"231":{"position":[[23,20]]},"597":{"position":[[330,20]]},"602":{"position":[[42,20]]},"625":{"position":[[142,20]]},"1064":{"position":[[63,20]]},"1066":{"position":[[665,20]]},"1109":{"position":[[92,20],[146,20],[615,20],[669,20]]},"1368":{"position":[[101,20]]},"1580":{"position":[[236,20]]},"1584":{"position":[[56,20],[138,20],[310,20],[348,20],[402,20]]},"1587":{"position":[[218,20]]},"1603":{"position":[[13,20]]},"1605":{"position":[[13,20]]},"1607":{"position":[[13,20]]},"1609":{"position":[[76,20],[390,20]]},"1611":{"position":[[200,20]]},"1613":{"position":[[13,20]]},"1615":{"position":[[13,20]]},"1617":{"position":[[65,20],[318,20],[560,20],[837,20]]},"1619":{"position":[[54,20]]},"1621":{"position":[[26,20],[428,20]]},"1643":{"position":[[53,20]]},"1645":{"position":[[45,20]]},"1647":{"position":[[86,20]]},"1649":{"position":[[46,20]]},"1651":{"position":[[56,20]]},"1653":{"position":[[47,20]]},"1655":{"position":[[62,20]]},"1657":{"position":[[179,20]]},"1659":{"position":[[73,20],[432,20],[867,20]]},"1845":{"position":[[21,20],[280,20]]},"1859":{"position":[[13,20]]},"1869":{"position":[[356,20]]},"1873":{"position":[[117,20]]},"1875":{"position":[[13,20]]},"2294":{"position":[[258,20]]},"2348":{"position":[[138,20]]},"2872":{"position":[[25,20]]},"2887":{"position":[[287,20]]},"3483":{"position":[[570,20]]},"3636":{"position":[[138,20]]},"3638":{"position":[[84,20]]},"3640":{"position":[[39,20]]},"3644":{"position":[[73,20],[432,20],[867,20]]},"3656":{"position":[[13,20]]},"3688":{"position":[[136,20]]},"3702":{"position":[[829,20]]},"3734":{"position":[[32,20]]},"3934":{"position":[[1237,20],[1696,20]]},"3984":{"position":[[953,20]]}}}],["dynamicapicontrollerapplicationmodelconvent",{"_index":5081,"t":{"1589":{"position":[[20,46]]}}}],["dynamicapicontrollerfeatureprovid",{"_index":5077,"t":{"1587":{"position":[[19,35]]}}}],["dynamicapicontrollerset",{"_index":5119,"t":{"1609":{"position":[[348,28],[644,28]]},"1625":{"position":[[58,28]]},"1627":{"position":[[265,28]]},"1631":{"position":[[443,28]]},"1637":{"position":[[3,28]]},"1661":{"position":[[1222,28]]},"1663":{"position":[[121,28]]},"3023":{"position":[[0,28],[1219,28]]},"3025":{"position":[[3,28]]},"3938":{"position":[[231,28]]},"3944":{"position":[[645,28]]}}}],["dynamicapiservicecompon",{"_index":2226,"t":{"340":{"position":[[779,26],[829,26],[1356,26],[1487,26],[1520,26]]}}}],["dynamiccontext",{"_index":2830,"t":{"528":{"position":[[265,14],[444,14],[512,14],[567,14]]},"554":{"position":[[63,14]]}}}],["dynamicdbcontext",{"_index":3621,"t":{"834":{"position":[[41,16]]}}}],["dynamicexpressionpars",{"_index":3696,"t":{"883":{"position":[[111,23],[221,23]]}}}],["dynamicmodelcachekeyfactori",{"_index":7461,"t":{"3126":{"position":[[540,27]]}}}],["dynamicobject",{"_index":1896,"t":{"267":{"position":[[12,13]]}}}],["dz",{"_index":6434,"t":{"2559":{"position":[[65,2]]}}}],["dzhang",{"_index":4807,"t":{"1511":{"position":[[2732,6]]}}}],["e",{"_index":2965,"t":{"570":{"position":[[597,1]]},"696":{"position":[[1979,1],[1984,1],[2943,1],[2948,1],[3024,1],[3029,1],[4585,1],[4590,1],[4642,1],[4647,1]]},"773":{"position":[[394,1],[399,1],[896,1],[901,1]]},"883":{"position":[[107,1],[217,1]]},"1485":{"position":[[110,1]]},"1803":{"position":[[1624,1],[1662,1]]},"2899":{"position":[[535,1],[599,1]]},"3136":{"position":[[90,1]]},"3910":{"position":[[1321,1],[1374,1]]}}}],["e02524c",{"_index":9498,"t":{"3934":{"position":[[397,7]]}}}],["e167651",{"_index":9674,"t":{"3954":{"position":[[578,7]]}}}],["e51557f",{"_index":9663,"t":{"3952":{"position":[[730,7]]}}}],["e5e1db0",{"_index":9552,"t":{"3938":{"position":[[142,7],[182,7]]}}}],["ea",{"_index":5566,"t":{"1801":{"position":[[1604,2],[1671,2],[1925,2]]}}}],["earliest",{"_index":5627,"t":{"1803":{"position":[[5348,8]]}}}],["easi",{"_index":9842,"t":{"3966":{"position":[[1554,4]]}}}],["easier",{"_index":8537,"t":{"3702":{"position":[[1652,6]]}}}],["eb56",{"_index":7271,"t":{"2929":{"position":[[631,4]]},"2945":{"position":[[688,4]]},"2959":{"position":[[657,4]]}}}],["eb7d18a",{"_index":9496,"t":{"3934":{"position":[[287,7],[993,7]]}}}],["ec",{"_index":6650,"t":{"2559":{"position":[[2207,2]]}}}],["ec4838c",{"_index":9118,"t":{"3914":{"position":[[1359,7],[2566,7]]}}}],["echo",{"_index":4176,"t":{"1379":{"position":[[297,4]]},"1488":{"position":[[17,4],[66,4],[111,4],[209,4],[312,4],[1095,4],[1545,4]]},"1495":{"position":[[17,4],[66,4],[111,4],[209,4],[312,4],[1199,4]]},"1499":{"position":[[94,4],[115,4],[137,4],[487,4]]}}}],["ecmascript",{"_index":6195,"t":{"2341":{"position":[[61,10]]}}}],["eddsa",{"_index":1023,"t":{"127":{"position":[[1588,5]]},"3039":{"position":[[489,5]]}}}],["edg",{"_index":793,"t":{"114":{"position":[[532,3]]},"3446":{"position":[[1007,3]]},"3452":{"position":[[1659,3]]},"3916":{"position":[[4655,3]]},"3928":{"position":[[1569,3]]}}}],["edit",{"_index":1504,"t":{"199":{"position":[[690,4]]}}}],["editor",{"_index":1992,"t":{"302":{"position":[[60,6]]},"306":{"position":[[83,6],[134,6]]},"314":{"position":[[113,6]]},"316":{"position":[[115,6]]},"331":{"position":[[81,6],[121,6],[199,6]]},"1474":{"position":[[206,6]]},"2497":{"position":[[283,6]]}}}],["editorconfig",{"_index":2359,"t":{"390":{"position":[[11,12]]}}}],["ee",{"_index":4823,"t":{"1511":{"position":[[3010,2]]},"2559":{"position":[[984,2]]}}}],["ef",{"_index":2865,"t":{"536":{"position":[[48,2]]},"722":{"position":[[36,2]]},"726":{"position":[[7,2],[64,2]]},"736":{"position":[[46,2]]},"771":{"position":[[24,2]]},"773":{"position":[[119,2],[139,2]]},"826":{"position":[[0,2]]},"836":{"position":[[0,2],[47,2],[89,2],[173,2],[312,2],[337,2]]},"887":{"position":[[6,2],[172,2]]},"941":{"position":[[73,2]]},"1153":{"position":[[46,2]]},"1307":{"position":[[7,2]]},"1566":{"position":[[414,2],[775,2]]},"1777":{"position":[[5,2]]},"3126":{"position":[[574,2]]},"3131":{"position":[[223,2]]},"3250":{"position":[[144,2],[155,2]]},"3291":{"position":[[1729,2]]},"3298":{"position":[[44,2]]},"3319":{"position":[[15,2]]},"3992":{"position":[[2342,2]]}}}],["efbulk",{"_index":3551,"t":{"771":{"position":[[35,6],[52,6]]}}}],["efcor",{"_index":532,"t":{"91":{"position":[[58,6],[545,6]]},"93":{"position":[[9,6]]},"199":{"position":[[99,6]]},"502":{"position":[[16,6],[174,6]]},"534":{"position":[[7,6],[741,6],[756,6]]},"538":{"position":[[22,6],[35,6]]},"653":{"position":[[6,6],[147,6]]},"655":{"position":[[217,6]]},"659":{"position":[[45,6]]},"739":{"position":[[66,6]]},"749":{"position":[[215,6],[517,6],[881,6]]},"756":{"position":[[64,6]]},"759":{"position":[[11,6],[41,6],[79,6],[111,6],[143,6]]},"765":{"position":[[12,6]]},"773":{"position":[[62,6]]},"775":{"position":[[35,6],[63,6]]},"919":{"position":[[6,6],[58,6],[65,6],[188,6]]},"1010":{"position":[[44,6]]},"1307":{"position":[[10,6],[35,6]]},"1353":{"position":[[6,6]]},"1566":{"position":[[19,6],[39,6]]},"1781":{"position":[[490,6]]},"2597":{"position":[[22,6],[35,6]]},"2774":{"position":[[413,6]]},"3131":{"position":[[180,6]]},"3207":{"position":[[181,6],[194,6]]},"3248":{"position":[[22,6],[35,6]]},"3287":{"position":[[373,6],[1207,6]]},"3321":{"position":[[60,6]]},"3323":{"position":[[41,6]]},"3470":{"position":[[6,6]]},"3922":{"position":[[1454,6],[1515,6],[1528,6],[1816,6]]},"3924":{"position":[[1224,6]]},"3930":{"position":[[326,6],[793,6],[845,6],[998,6],[1169,6]]},"3946":{"position":[[240,6]]},"3950":{"position":[[321,6]]},"3966":{"position":[[125,6]]},"3978":{"position":[[337,6]]},"3980":{"position":[[7,6],[521,6]]},"3986":{"position":[[595,6],[617,6],[1310,6],[1814,6]]},"3990":{"position":[[7,6]]},"3996":{"position":[[133,6],[1316,6],[1424,6]]},"3998":{"position":[[585,6]]}}}],["efcorerepositori",{"_index":3869,"t":{"990":{"position":[[32,16]]},"992":{"position":[[33,16]]},"994":{"position":[[53,16]]},"3978":{"position":[[466,16]]},"3986":{"position":[[498,16]]}}}],["effect",{"_index":2907,"t":{"552":{"position":[[163,7],[210,7],[257,7],[304,7],[360,7],[416,7],[472,7]]}}}],["effectivetyp",{"_index":5923,"t":{"2029":{"position":[[16,14]]},"3992":{"position":[[1199,14]]}}}],["eflay",{"_index":6958,"t":{"2768":{"position":[[901,5]]}}}],["eg",{"_index":6438,"t":{"2559":{"position":[[98,2]]}}}],["egota",{"_index":4704,"t":{"1511":{"position":[[1546,5]]}}}],["ehealth",{"_index":5286,"t":{"1691":{"position":[[121,7],[210,7]]}}}],["ehealth_cod",{"_index":5288,"t":{"1691":{"position":[[210,12]]}}}],["ehealth_code_id",{"_index":5285,"t":{"1691":{"position":[[121,15]]}}}],["ekt",{"_index":6067,"t":{"2264":{"position":[[13,3]]}}}],["el",{"_index":6565,"t":{"2559":{"position":[[1291,2],[1297,2]]}}}],["elk",{"_index":8062,"t":{"3414":{"position":[[258,3]]}}}],["email",{"_index":3216,"t":{"617":{"position":[[616,5]]},"639":{"position":[[97,5],[315,5]]},"3065":{"position":[[248,5]]},"3642":{"position":[[322,5]]},"3706":{"position":[[1996,5]]}}}],["emailaddress",{"_index":3079,"t":{"587":{"position":[[812,12]]},"606":{"position":[[208,12],[771,12]]},"615":{"position":[[1054,12]]},"617":{"position":[[584,12]]},"639":{"position":[[322,12]]}}}],["emailset",{"_index":2565,"t":{"445":{"position":[[188,12]]},"451":{"position":[[173,12],[203,12],[229,12]]}}}],["embed",{"_index":5344,"t":{"1719":{"position":[[53,8]]},"1724":{"position":[[481,8]]}}}],["embeddedfileprovid",{"_index":5349,"t":{"1724":{"position":[[194,20],[420,20]]},"1726":{"position":[[125,20]]},"1735":{"position":[[182,20]]}}}],["empti",{"_index":2325,"t":{"371":{"position":[[513,5]]},"1979":{"position":[[733,5],[760,5],[891,5]]},"1991":{"position":[[287,5]]},"2014":{"position":[[287,5]]},"2879":{"position":[[287,5]]},"2933":{"position":[[484,5]]},"2935":{"position":[[555,5]]},"2937":{"position":[[652,5]]},"3071":{"position":[[602,5],[1173,5],[1200,5]]},"3339":{"position":[[336,5],[359,5]]},"3345":{"position":[[198,5],[219,5]]},"3575":{"position":[[86,5]]},"3577":{"position":[[91,5]]},"3579":{"position":[[333,5]]},"3587":{"position":[[132,5]]},"3589":{"position":[[106,5],[723,5]]},"3704":{"position":[[215,5]]},"3914":{"position":[[2226,5]]},"3924":{"position":[[3749,5]]},"3932":{"position":[[2658,5]]},"3944":{"position":[[851,5],[872,5]]}}}],["emptylin",{"_index":5009,"t":{"1555":{"position":[[12,9]]}}}],["en",{"_index":4145,"t":{"1372":{"position":[[86,2],[210,2]]},"1444":{"position":[[86,2],[210,2]]},"2151":{"position":[[14,2]]},"2522":{"position":[[90,2]]},"2542":{"position":[[69,2]]},"2544":{"position":[[46,2]]},"2547":{"position":[[38,2],[50,2]]},"2559":{"position":[[773,2],[779,2],[792,2],[806,2],[820,2],[835,2],[849,2],[863,2],[878,2],[895,2],[909,2],[930,2],[944,2],[958,2]]},"2742":{"position":[[34,2]]},"2897":{"position":[[728,2]]},"3033":{"position":[[60,2]]},"3080":{"position":[[120,2]]},"3678":{"position":[[47,2]]}}}],["enabl",{"_index":124,"t":{"9":{"position":[[143,6]]},"713":{"position":[[217,7],[326,7]]},"734":{"position":[[231,7],[340,7]]},"1641":{"position":[[148,7]]},"1651":{"position":[[0,7]]},"1973":{"position":[[94,6]]},"1987":{"position":[[94,6]]},"2010":{"position":[[102,6]]},"2292":{"position":[[143,6]]},"2672":{"position":[[42,6]]},"3063":{"position":[[1172,7]]},"3291":{"position":[[1337,7]]},"3686":{"position":[[192,7],[411,7]]},"3706":{"position":[[1164,7]]},"3940":{"position":[[968,7]]}}}],["enableallgroup",{"_index":2133,"t":{"325":{"position":[[135,15]]},"3063":{"position":[[1337,15]]},"3690":{"position":[[140,15]]},"3706":{"position":[[1348,15]]},"3938":{"position":[[13,15],[944,15]]}}}],["enableauthor",{"_index":7308,"t":{"3063":{"position":[[133,16]]},"3650":{"position":[[136,16]]},"3706":{"position":[[125,16]]}}}],["enablebuff",{"_index":6060,"t":{"2255":{"position":[[232,15],[411,15],[470,15]]},"3914":{"position":[[1049,15]]},"3954":{"position":[[496,15]]}}}],["enabledentitychangedlisten",{"_index":2853,"t":{"532":{"position":[[109,28]]},"745":{"position":[[301,28]]}}}],["enabledentitystatetrack",{"_index":2852,"t":{"532":{"position":[[59,25]]},"4000":{"position":[[301,25]]}}}],["enabledirectorybrows",{"_index":5375,"t":{"1735":{"position":[[265,23]]}}}],["enabledreferenceassemblyscan",{"_index":6762,"t":{"2623":{"position":[[20,28]]},"2625":{"position":[[99,28],[154,28]]},"2981":{"position":[[156,28]]}}}],["enabledvirtualfileserv",{"_index":5968,"t":{"2096":{"position":[[103,24]]}}}],["enableenumschemafilt",{"_index":7327,"t":{"3063":{"position":[[901,22]]},"3706":{"position":[[893,22]]}}}],["enableglobalauthor",{"_index":959,"t":{"127":{"position":[[256,21]]},"139":{"position":[[28,21]]}}}],["enablelegacytimestampbehavior",{"_index":6791,"t":{"2674":{"position":[[380,29]]}}}],["enablelog",{"_index":1838,"t":{"251":{"position":[[362,10]]}}}],["enabletagsorderdocumentfilt",{"_index":7328,"t":{"3063":{"position":[[956,29]]},"3706":{"position":[[948,29]]}}}],["enableunsafebinaryformatterseri",{"_index":7829,"t":{"3277":{"position":[[106,40],[153,40]]}}}],["encod",{"_index":1846,"t":{"253":{"position":[[448,8],[638,8]]},"310":{"position":[[291,7],[364,7]]},"323":{"position":[[102,7],[138,7],[160,7]]},"445":{"position":[[397,8]]},"1286":{"position":[[238,8]]},"1729":{"position":[[227,8]]},"1755":{"position":[[100,8]]},"1801":{"position":[[1647,8],[2535,8]]},"2371":{"position":[[114,7]]},"3500":{"position":[[230,8],[352,8]]},"3504":{"position":[[55,8]]},"3506":{"position":[[556,7]]},"3520":{"position":[[223,8]]},"3918":{"position":[[2935,8]]},"3940":{"position":[[77,8]]}}}],["encodedcachedtimeutc",{"_index":1845,"t":{"253":{"position":[[333,20],[400,20],[472,20]]}}}],["encodedcurrenttimeutc",{"_index":1851,"t":{"253":{"position":[[614,21],[826,21]]}}}],["encodekey",{"_index":2037,"t":{"310":{"position":[[308,9],[455,9],[496,9]]}}}],["encodevalu",{"_index":2038,"t":{"310":{"position":[[320,11],[554,11],[597,11]]}}}],["encrypt",{"_index":1027,"t":{"127":{"position":[[1682,7],[1807,7]]},"144":{"position":[[137,7]]},"1677":{"position":[[44,7],[195,7],[281,7]]},"1679":{"position":[[45,7]]},"1681":{"position":[[101,7]]},"1683":{"position":[[26,7]]},"1685":{"position":[[75,7]]},"1687":{"position":[[156,7]]},"2132":{"position":[[44,7],[148,7],[254,7],[373,7]]}}}],["end",{"_index":3359,"t":{"696":{"position":[[761,3]]},"820":{"position":[[74,3]]},"1125":{"position":[[346,3]]},"1185":{"position":[[272,3]]},"1488":{"position":[[346,3]]},"1495":{"position":[[346,3]]},"3601":{"position":[[1343,3]]},"3770":{"position":[[2332,3],[4152,3]]},"3812":{"position":[[1925,3]]},"3832":{"position":[[2157,3],[3918,3],[4896,3]]}}}],["end_tim",{"_index":8743,"t":{"3770":{"position":[[2332,8],[4152,8]]},"3812":{"position":[[1925,8]]}}}],["enddat",{"_index":3707,"t":{"885":{"position":[[282,7],[320,7],[360,7]]},"977":{"position":[[49,7],[165,7]]}}}],["endpoint",{"_index":1596,"t":{"216":{"position":[[1181,9],[1196,9]]},"338":{"position":[[1076,9],[1091,9]]},"371":{"position":[[538,9],[553,9]]},"1979":{"position":[[785,9],[800,9]]},"2243":{"position":[[260,8]]},"2591":{"position":[[170,8]]},"2848":{"position":[[730,9],[745,9],[784,9]]},"2879":{"position":[[312,9],[327,9]]},"3144":{"position":[[504,9],[528,9],[549,9]]},"3156":{"position":[[556,9],[580,9]]},"3158":{"position":[[528,9],[557,9]]},"3630":{"position":[[611,9],[626,9]]}}}],["endpointfeatur",{"_index":6052,"t":{"2243":{"position":[[163,15],[243,15]]},"2591":{"position":[[64,15],[153,15]]}}}],["endswith",{"_index":3850,"t":{"979":{"position":[[100,8]]}}}],["endtim",{"_index":8724,"t":{"3770":{"position":[[898,7],[5676,7]]},"3798":{"position":[[335,7]]},"3802":{"position":[[894,7],[1519,7],[2138,7]]},"3808":{"position":[[3020,7]]},"3812":{"position":[[304,7],[1209,7],[2621,7]]},"3817":{"position":[[1105,7],[2111,7]]},"3821":{"position":[[603,7]]},"3896":{"position":[[528,7]]}}}],["english",{"_index":3217,"t":{"617":{"position":[[939,7]]}}}],["englishnam",{"_index":3155,"t":{"606":{"position":[[319,11]]},"617":{"position":[[908,11]]}}}],["enhancedstacktrac",{"_index":763,"t":{"112":{"position":[[1515,18]]},"1925":{"position":[[1377,18]]},"1933":{"position":[[590,18]]}}}],["ensureclasssingleton",{"_index":8022,"t":{"3391":{"position":[[924,20]]},"3393":{"position":[[1342,20]]}}}],["ensurecollectionsingleton",{"_index":8028,"t":{"3393":{"position":[[1440,25]]}}}],["ensurecr",{"_index":3429,"t":{"732":{"position":[[242,13]]}}}],["ensuredelet",{"_index":3430,"t":{"732":{"position":[[315,13]]}}}],["ensuresingleton",{"_index":8018,"t":{"3389":{"position":[[1373,15]]},"3391":{"position":[[828,15]]},"3393":{"position":[[1246,15]]}}}],["ensuresuccessstatuscod",{"_index":8037,"t":{"3397":{"position":[[831,23]]}}}],["ensuretransact",{"_index":7852,"t":{"3287":{"position":[[1116,17]]},"3289":{"position":[[97,17]]},"3972":{"position":[[205,17]]}}}],["enter",{"_index":7146,"t":{"2856":{"position":[[809,8],[1321,8],[1432,8]]}}}],["enterpris",{"_index":419,"t":{"51":{"position":[[181,10]]},"62":{"position":[[181,10]]},"75":{"position":[[181,10]]},"3934":{"position":[[2682,10]]}}}],["entiti",{"_index":2971,"t":{"570":{"position":[[866,8],[925,6],[1198,6],[1208,8],[1247,6],[1254,6],[1316,6],[1386,6],[1443,6],[1978,6],[2323,6],[2614,6]]},"645":{"position":[[138,8],[338,8]]},"653":{"position":[[111,6]]},"655":{"position":[[173,6]]},"698":{"position":[[362,8]]},"708":{"position":[[170,6]]},"713":{"position":[[406,6]]},"734":{"position":[[420,6]]},"747":{"position":[[203,6],[573,6],[793,6]]},"749":{"position":[[257,6],[412,6],[923,6],[1082,6]]},"767":{"position":[[721,6],[765,6]]},"773":{"position":[[230,8],[278,8],[362,8],[474,8],[584,8],[863,8]]},"779":{"position":[[154,8]]},"795":{"position":[[47,6],[88,6],[173,6],[309,6],[361,6],[474,6]]},"832":{"position":[[544,6]]},"844":{"position":[[255,6]]},"851":{"position":[[204,6],[1262,6],[1767,6]]},"877":{"position":[[264,6]]},"885":{"position":[[87,8]]},"887":{"position":[[137,8]]},"889":{"position":[[217,6]]},"933":{"position":[[614,8],[750,6],[760,8],[780,6],[832,6],[855,6],[947,6],[970,6]]},"947":{"position":[[961,6]]},"949":{"position":[[334,6]]},"954":{"position":[[138,8],[322,8]]},"956":{"position":[[454,8],[527,8],[599,8],[680,8],[752,8],[1327,8],[1411,8],[1494,8],[1586,8],[1669,8]]},"958":{"position":[[50,8]]},"960":{"position":[[1544,8]]},"965":{"position":[[145,8],[467,8]]},"967":{"position":[[140,8],[202,8],[466,8],[539,8]]},"969":{"position":[[29,6],[113,6],[133,8],[179,8],[320,6],[426,6],[452,8],[509,8]]},"971":{"position":[[29,6],[113,6],[133,8],[179,8],[320,6],[426,6],[452,8],[509,8]]},"973":{"position":[[46,8],[248,8]]},"975":{"position":[[46,8],[260,8]]},"986":{"position":[[56,6]]},"1037":{"position":[[568,6]]},"1325":{"position":[[155,8]]},"1353":{"position":[[111,6]]},"1566":{"position":[[382,6]]},"1763":{"position":[[124,6]]},"1765":{"position":[[113,6]]},"1771":{"position":[[75,6]]},"1779":{"position":[[181,6]]},"2682":{"position":[[61,6]]},"2684":{"position":[[40,6],[99,6],[121,6],[144,6],[170,6],[201,6],[220,6],[250,6]]},"2688":{"position":[[4,6],[43,6],[76,6]]},"2690":{"position":[[158,6]]},"2692":{"position":[[99,6]]},"2905":{"position":[[233,6]]},"2937":{"position":[[1052,8],[1221,6],[1231,8],[1251,6],[1303,6],[1326,6],[1418,6],[1441,6]]},"3126":{"position":[[184,6]]},"3291":{"position":[[341,6]]},"3914":{"position":[[3171,6],[3187,6]]},"3992":{"position":[[3354,6],[3938,6]]},"4004":{"position":[[480,6]]}}}],["entitieslist",{"_index":3524,"t":{"767":{"position":[[38,12],[88,12],[141,12],[191,12],[244,12],[294,12],[358,12],[416,12],[491,12],[557,12],[612,12],[660,12]]}}}],["entitybas",{"_index":3644,"t":{"851":{"position":[[863,10]]},"949":{"position":[[372,10]]},"1145":{"position":[[125,10]]},"1763":{"position":[[87,10],[143,10]]},"1765":{"position":[[74,10]]},"1769":{"position":[[75,10]]},"3914":{"position":[[3160,10]]},"4004":{"position":[[467,10]]}}}],["entitybuild",{"_index":3278,"t":{"655":{"position":[[366,13],[427,13]]},"696":{"position":[[1895,13],[1956,13],[2017,13],[2859,13],[2920,13],[3001,13],[4441,13],[4502,13],[4528,13],[4562,13],[4619,13]]},"844":{"position":[[505,13],[566,13]]},"846":{"position":[[650,13],[793,13],[873,13]]},"877":{"position":[[775,13],[926,13],[987,13]]},"889":{"position":[[344,13],[497,13],[558,13]]},"1779":{"position":[[407,13],[468,13],[501,13]]},"1781":{"position":[[259,13],[320,13],[353,13]]},"2935":{"position":[[632,13],[693,13],[745,13]]},"2937":{"position":[[729,13],[790,13],[842,13]]}}}],["entityframework",{"_index":1557,"t":{"210":{"position":[[298,15]]},"212":{"position":[[184,15],[473,15]]},"220":{"position":[[228,15],[290,15]]},"500":{"position":[[68,15]]},"502":{"position":[[184,15]]},"508":{"position":[[85,15]]},"510":{"position":[[85,15],[462,15]]},"514":{"position":[[7,15],[138,15]]},"516":{"position":[[85,15]]},"518":{"position":[[85,15]]},"522":{"position":[[36,15]]},"524":{"position":[[67,15],[217,15]]},"528":{"position":[[31,15],[145,15]]},"534":{"position":[[272,15]]},"570":{"position":[[290,15]]},"653":{"position":[[301,15]]},"745":{"position":[[85,15]]},"832":{"position":[[124,15]]},"846":{"position":[[347,15]]},"897":{"position":[[524,15]]},"947":{"position":[[198,15],[692,15]]},"1054":{"position":[[85,15]]},"1056":{"position":[[104,15]]},"1058":{"position":[[84,15]]},"1066":{"position":[[259,15]]},"1309":{"position":[[30,15],[72,15],[137,15],[688,15]]},"1311":{"position":[[85,15]]},"1313":{"position":[[788,15]]},"1317":{"position":[[7,15],[138,15]]},"1353":{"position":[[268,15]]},"2774":{"position":[[172,15],[205,15],[489,15]]},"2925":{"position":[[7,15],[148,15]]},"2927":{"position":[[96,15]]},"2929":{"position":[[7,15],[189,15]]},"2933":{"position":[[142,15]]},"2935":{"position":[[213,15]]},"2937":{"position":[[310,15]]},"2941":{"position":[[7,15],[148,15]]},"2943":{"position":[[96,15]]},"2945":{"position":[[7,15],[189,15]]},"2949":{"position":[[131,15]]},"2951":{"position":[[128,15]]},"2955":{"position":[[7,15],[148,15]]},"2957":{"position":[[96,15]]},"2959":{"position":[[7,15],[189,15]]},"2963":{"position":[[129,15]]},"3071":{"position":[[904,15]]},"3131":{"position":[[202,15]]},"3964":{"position":[[49,15]]}}}],["entityframeworkcor",{"_index":150,"t":{"11":{"position":[[561,19]]},"220":{"position":[[709,19]]},"508":{"position":[[47,19]]},"510":{"position":[[47,19]]},"516":{"position":[[47,19]]},"518":{"position":[[47,19]]},"534":{"position":[[44,19],[234,19]]},"570":{"position":[[130,19],[167,19]]},"572":{"position":[[88,19]]},"653":{"position":[[263,19]]},"655":{"position":[[41,19]]},"675":{"position":[[138,19]]},"679":{"position":[[69,19]]},"685":{"position":[[124,19]]},"688":{"position":[[268,19]]},"696":{"position":[[1282,19],[2463,19],[3385,19],[4067,19]]},"698":{"position":[[405,19],[469,19],[516,19],[560,19],[614,19],[656,19],[690,19],[728,19],[773,19],[806,19]]},"702":{"position":[[35,19]]},"713":{"position":[[147,19],[364,19],[504,19]]},"734":{"position":[[56,19],[161,19],[378,19],[501,19],[753,19],[848,19],[6909,19],[7061,19],[7205,19],[7311,19],[7422,19],[7550,19],[7645,19],[7799,19],[7839,19]]},"745":{"position":[[47,19]]},"747":{"position":[[47,19]]},"832":{"position":[[67,19]]},"844":{"position":[[119,19],[156,19]]},"846":{"position":[[209,19],[246,19]]},"877":{"position":[[60,19],[97,19]]},"889":{"position":[[47,19],[84,19]]},"897":{"position":[[20,19],[89,19],[133,19],[187,19],[229,19],[278,19],[333,19],[378,19],[436,19],[478,19]]},"899":{"position":[[691,19],[1479,19]]},"927":{"position":[[16,19]]},"929":{"position":[[16,19]]},"931":{"position":[[16,19]]},"947":{"position":[[160,19],[654,19]]},"1054":{"position":[[47,19]]},"1056":{"position":[[66,19]]},"1066":{"position":[[221,19]]},"1309":{"position":[[184,19],[253,19],[297,19],[351,19],[393,19],[442,19],[497,19],[542,19],[600,19],[642,19]]},"1311":{"position":[[47,19]]},"1313":{"position":[[750,19]]},"1353":{"position":[[230,19]]},"1779":{"position":[[47,19],[84,19]]},"1781":{"position":[[47,19],[84,19]]},"2294":{"position":[[590,19]]},"2361":{"position":[[363,19]]},"2501":{"position":[[345,19]]},"2774":{"position":[[375,19],[550,19]]},"2887":{"position":[[186,19]]},"2925":{"position":[[110,19]]},"2929":{"position":[[103,19]]},"2933":{"position":[[90,19]]},"2935":{"position":[[106,19],[143,19]]},"2937":{"position":[[184,19],[221,19]]},"2941":{"position":[[110,19]]},"2945":{"position":[[103,19]]},"2949":{"position":[[93,19]]},"2951":{"position":[[90,19]]},"2955":{"position":[[110,19]]},"2959":{"position":[[103,19]]},"2963":{"position":[[91,19]]},"3430":{"position":[[1674,19]]},"3468":{"position":[[222,19]]},"3601":{"position":[[1749,19]]},"3932":{"position":[[1827,19]]},"3982":{"position":[[49,19]]},"4004":{"position":[[14,19]]}}}],["entityframeworkrelationaldesignservicesbuild",{"_index":3489,"t":{"734":{"position":[[8109,46]]}}}],["entitynotkey",{"_index":3815,"t":{"949":{"position":[[438,12]]},"1360":{"position":[[36,12]]},"1364":{"position":[[79,12],[465,12]]},"1763":{"position":[[186,12]]},"1765":{"position":[[153,12]]},"1773":{"position":[[79,12]]}}}],["entityrepositori",{"_index":5976,"t":{"2105":{"position":[[4,16]]}}}],["entityst",{"_index":2974,"t":{"570":{"position":[[974,11],[1009,11],[1043,11]]},"645":{"position":[[200,11]]},"747":{"position":[[861,11]]},"749":{"position":[[464,11],[831,11],[1134,11]]},"779":{"position":[[114,11]]},"933":{"position":[[682,11],[714,11],[813,11],[925,11]]},"1325":{"position":[[114,11]]},"2937":{"position":[[1119,11],[1151,11],[1186,11],[1284,11],[1396,11],[1499,11]]}}}],["entitytyp",{"_index":2976,"t":{"570":{"position":[[1234,10],[1804,10],[2149,10],[2440,10]]}}}],["entitytypebuild",{"_index":3276,"t":{"655":{"position":[[336,17]]},"696":{"position":[[1871,17],[2827,17],[4414,17]]},"844":{"position":[[479,17]]},"846":{"position":[[632,17]]},"877":{"position":[[902,17]]},"889":{"position":[[471,17]]},"1779":{"position":[[383,17]]},"1781":{"position":[[235,17]]},"2935":{"position":[[614,17]]},"2937":{"position":[[711,17]]}}}],["entri",{"_index":1508,"t":{"202":{"position":[[78,5],[188,5]]},"204":{"position":[[108,5],[266,5]]},"216":{"position":[[118,5],[276,5]]},"231":{"position":[[487,5]]},"233":{"position":[[69,5],[80,5],[232,5],[511,5],[522,5],[575,5]]},"237":{"position":[[250,5],[313,5],[336,5],[351,5],[379,5],[1155,5]]},"435":{"position":[[163,5],[531,5]]},"445":{"position":[[182,5]]},"570":{"position":[[901,7]]},"617":{"position":[[2546,5]]},"627":{"position":[[97,5]]},"675":{"position":[[116,5]]},"681":{"position":[[21,5]]},"685":{"position":[[202,5]]},"698":{"position":[[868,5]]},"702":{"position":[[13,5]]},"713":{"position":[[230,7]]},"726":{"position":[[50,5],[101,5]]},"734":{"position":[[244,7],[7897,5]]},"933":{"position":[[649,7]]},"1377":{"position":[[201,5]]},"1379":{"position":[[633,5]]},"1408":{"position":[[622,5]]},"1410":{"position":[[637,5]]},"1412":{"position":[[1918,5]]},"1414":{"position":[[576,5]]},"1572":{"position":[[198,5],[365,5]]},"1609":{"position":[[618,5]]},"1663":{"position":[[95,5],[323,5]]},"1755":{"position":[[47,5]]},"1869":{"position":[[73,5]]},"2269":{"position":[[63,5],[173,5]]},"2272":{"position":[[232,5]]},"2281":{"position":[[137,5]]},"2653":{"position":[[68,5],[90,5],[172,5],[194,5]]},"2713":{"position":[[511,5],[942,5],[1828,5]]},"2745":{"position":[[128,5]]},"2747":{"position":[[68,5],[128,5]]},"2749":{"position":[[83,5],[146,5]]},"2751":{"position":[[98,5],[406,5]]},"2774":{"position":[[333,5],[529,5]]},"2776":{"position":[[161,5]]},"2937":{"position":[[1087,7]]},"3063":{"position":[[438,5]]},"3071":{"position":[[279,5]]},"3080":{"position":[[284,5],[344,5],[651,5],[714,5]]},"3131":{"position":[[307,5]]},"3329":{"position":[[100,5]]},"3430":{"position":[[486,5],[3186,5],[4489,5]]},"3432":{"position":[[3129,5],[5706,5]]},"3601":{"position":[[787,5]]},"3636":{"position":[[56,5]]},"3640":{"position":[[496,5]]},"3642":{"position":[[51,5]]},"3646":{"position":[[11,5]]},"3648":{"position":[[11,5]]},"3650":{"position":[[75,5]]},"3686":{"position":[[791,5]]},"3706":{"position":[[430,5]]},"3986":{"position":[[1616,5]]}}}],["entryopt",{"_index":2317,"t":{"369":{"position":[[427,11],[490,11],[729,11]]}}}],["entrypoint",{"_index":4157,"t":{"1377":{"position":[[167,10]]},"1379":{"position":[[599,10]]}}}],["entryproject",{"_index":3332,"t":{"685":{"position":[[180,12]]},"698":{"position":[[830,12]]}}}],["entryservicecompon",{"_index":2215,"t":{"340":{"position":[[130,21],[212,21],[499,21],[1583,21],[1706,21]]},"369":{"position":[[463,21],[536,21],[706,21]]}}}],["enum",{"_index":3184,"t":{"608":{"position":[[729,4]]},"615":{"position":[[78,4],[281,4]]},"617":{"position":[[1564,4]]},"1855":{"position":[[31,4],[193,4]]},"1865":{"position":[[86,4],[344,4]]},"1873":{"position":[[31,4]]},"2536":{"position":[[86,4]]},"3936":{"position":[[177,4]]}}}],["enumhandl",{"_index":5490,"t":{"1795":{"position":[[802,11]]}}}],["env",{"_index":1523,"t":{"204":{"position":[[427,3]]},"210":{"position":[[519,3],[695,3]]},"212":{"position":[[395,3],[684,3]]},"216":{"position":[[437,3],[961,3],[972,3]]},"218":{"position":[[327,3],[404,3]]},"314":{"position":[[589,3],[598,3],[674,3],[683,3]]},"338":{"position":[[769,3],[780,3]]},"346":{"position":[[300,3],[451,3]]},"371":{"position":[[432,3]]},"411":{"position":[[456,3]]},"455":{"position":[[1023,3]]},"730":{"position":[[144,3],[174,3]]},"732":{"position":[[67,3],[97,3]]},"1483":{"position":[[464,3],[523,3]]},"1979":{"position":[[558,3],[569,3]]},"2255":{"position":[[214,3]]},"2272":{"position":[[513,3]]},"2281":{"position":[[306,3]]},"2519":{"position":[[219,3],[230,3]]},"2579":{"position":[[926,3]]},"2751":{"position":[[445,3]]},"2848":{"position":[[446,3],[457,3]]},"2881":{"position":[[800,3]]},"2889":{"position":[[535,3]]},"3144":{"position":[[469,3]]},"3156":{"position":[[521,3]]},"3373":{"position":[[490,3]]},"3630":{"position":[[539,3]]},"3666":{"position":[[264,3]]},"3708":{"position":[[4015,3],[4026,3]]},"3918":{"position":[[2664,3]]}}}],["environ",{"_index":2078,"t":{"314":{"position":[[438,11],[460,12],[473,11],[633,11]]},"316":{"position":[[496,11],[518,12],[531,11],[620,11]]},"429":{"position":[[212,11],[238,11]]},"451":{"position":[[67,11]]},"1458":{"position":[[15,11]]},"1561":{"position":[[7,11],[72,11],[130,11]]},"2057":{"position":[[290,11]]},"2751":{"position":[[465,11]]},"2875":{"position":[[967,11]]},"3430":{"position":[[366,11],[3017,11],[4322,11]]},"3432":{"position":[[2972,11],[5539,11]]},"3452":{"position":[[1504,11]]},"3601":{"position":[[618,11]]},"3916":{"position":[[4500,11]]},"3918":{"position":[[1172,11]]},"3924":{"position":[[882,11],[1070,11]]}}}],["environmentnam",{"_index":5936,"t":{"2053":{"position":[[4,15],[42,15]]}}}],["environmentvari",{"_index":7160,"t":{"2875":{"position":[[930,20]]}}}],["equal",{"_index":3028,"t":{"585":{"position":[[231,6]]},"834":{"position":[[110,6]]},"860":{"position":[[110,6]]},"862":{"position":[[110,6]]},"866":{"position":[[380,6],[437,6]]},"960":{"position":[[118,6],[255,6],[337,6],[394,6],[497,6],[934,6],[1275,6]]},"3224":{"position":[[921,5]]},"3360":{"position":[[99,5]]},"3381":{"position":[[248,5]]},"3383":{"position":[[284,5]]},"3387":{"position":[[176,5]]},"3389":{"position":[[1317,5],[1400,5]]},"3391":{"position":[[772,5],[855,5],[956,5]]},"3393":{"position":[[1190,5],[1273,5],[1374,5],[1477,5]]},"3924":{"position":[[3466,5]]}}}],["err",{"_index":2106,"t":{"319":{"position":[[249,3],[271,3],[423,3],[485,3],[504,3]]},"321":{"position":[[508,3]]},"2751":{"position":[[202,3]]},"3194":{"position":[[814,3],[833,3]]}}}],["error",{"_index":1383,"t":{"190":{"position":[[542,5]]},"321":{"position":[[500,5]]},"1468":{"position":[[382,5]]},"1555":{"position":[[519,5]]},"1557":{"position":[[228,5],[466,5],[734,5],[811,5]]},"1795":{"position":[[1332,5],[1379,5],[1457,5]]},"1819":{"position":[[635,5],[973,5],[1066,5]]},"1855":{"position":[[404,5],[420,5]]},"1865":{"position":[[297,5],[313,5]]},"1875":{"position":[[504,5]]},"2171":{"position":[[202,5],[209,5]]},"2751":{"position":[[183,5]]},"2848":{"position":[[553,5]]},"3416":{"position":[[289,5]]},"3424":{"position":[[235,5],[242,5]]},"3432":{"position":[[1846,5],[2335,5],[2431,5]]},"3434":{"position":[[2037,5]]},"3452":{"position":[[3014,6]]},"3518":{"position":[[58,6]]},"3559":{"position":[[421,6],[571,6]]},"3595":{"position":[[241,6]]},"3708":{"position":[[388,6],[1373,6],[1390,6],[2190,6],[2850,6],[3063,6],[3346,6],[3518,6],[3638,6],[3647,6]]},"3770":{"position":[[2502,6],[2529,6],[4311,6],[4339,6]]},"3812":{"position":[[2084,6],[2112,6]]},"3832":{"position":[[1679,5],[3492,5]]},"3916":{"position":[[6010,6]]},"3920":{"position":[[1600,6]]},"3956":{"position":[[989,6],[1006,6],[1610,6],[2194,6],[2403,6],[2686,6],[2850,6],[2966,6],[2975,6]]}}}],["error_fil",{"_index":6885,"t":{"2751":{"position":[[183,10]]}}}],["errorcod",{"_index":5726,"t":{"1851":{"position":[[667,9],[800,9],[892,9],[1072,9]]},"1855":{"position":[[198,10],[391,9]]},"1859":{"position":[[207,10]]},"1863":{"position":[[35,10],[91,9]]},"1865":{"position":[[91,10],[284,9]]},"1867":{"position":[[272,10]]},"1869":{"position":[[267,9]]},"1873":{"position":[[36,10],[271,10],[382,10]]},"1875":{"position":[[272,10],[343,10],[434,10],[486,10],[585,10]]},"2536":{"position":[[91,10],[202,10]]},"3452":{"position":[[3995,9]]},"3916":{"position":[[6991,9]]},"3924":{"position":[[1320,9]]},"3930":{"position":[[58,9]]}}}],["errorcodeitemmetadata",{"_index":5728,"t":{"1855":{"position":[[81,21],[212,21],[259,21],[299,21],[358,21]]},"1857":{"position":[[13,21]]},"1865":{"position":[[105,21],[152,21],[192,21],[251,21],[367,21],[409,21]]},"1873":{"position":[[50,21]]},"1877":{"position":[[1,21],[137,21]]},"2536":{"position":[[105,21]]}}}],["errorcodemessageset",{"_index":5747,"t":{"1869":{"position":[[99,24]]},"3015":{"position":[[0,24]]},"3017":{"position":[[3,24]]}}}],["errorcodes2",{"_index":5746,"t":{"1867":{"position":[[292,11]]}}}],["errorcodetyp",{"_index":5727,"t":{"1855":{"position":[[51,13],[171,13],[449,13],[513,13]]},"1865":{"position":[[64,13],[322,13]]},"1867":{"position":[[59,13],[761,13]]},"1869":{"position":[[608,13]]},"1873":{"position":[[9,13]]},"2536":{"position":[[64,13]]}}}],["errorloggingwrit",{"_index":8161,"t":{"3434":{"position":[[1933,18]]}}}],["errormessag",{"_index":3118,"t":{"597":{"position":[[139,12],[214,12],[249,12]]},"599":{"position":[[169,12],[244,12],[279,12]]},"608":{"position":[[578,12]]},"1847":{"position":[[20,12]]},"1851":{"position":[[136,12],[273,12],[368,12],[552,12]]},"1869":{"position":[[291,12],[316,12]]},"1873":{"position":[[289,12]]},"1875":{"position":[[190,12],[233,12],[290,12],[381,12]]},"2534":{"position":[[10,12]]},"2725":{"position":[[330,12],[443,12],[1334,12],[1951,12]]},"2727":{"position":[[371,12]]},"3978":{"position":[[1375,12]]}}}],["errortoreadi",{"_index":8847,"t":{"3800":{"position":[[158,12]]}}}],["es",{"_index":6475,"t":{"2559":{"position":[[434,2],[519,2],[1173,2],[2098,2],[2105,2],[2120,2],[2136,2],[2150,2],[2166,2],[2184,2],[2204,2],[2220,2],[2237,2],[2253,2],[2269,2],[2284,2],[2300,2],[2315,2],[2330,2],[2344,2],[2361,2],[2364,2],[2376,2],[2391,2]]}}}],["es256",{"_index":1019,"t":{"127":{"position":[[1563,5]]},"3039":{"position":[[464,5]]}}}],["es256k",{"_index":1020,"t":{"127":{"position":[[1569,6]]},"3039":{"position":[[470,6]]}}}],["es384",{"_index":1021,"t":{"127":{"position":[[1576,5]]},"3039":{"position":[[477,5]]}}}],["es512",{"_index":1022,"t":{"127":{"position":[[1582,5]]},"3039":{"position":[[483,5]]}}}],["esc",{"_index":7900,"t":{"3309":{"position":[[70,3]]}}}],["escap",{"_index":1146,"t":{"152":{"position":[[292,6],[566,6]]}}}],["escapedatastr",{"_index":8324,"t":{"3532":{"position":[[21,16]]},"3571":{"position":[[21,16]]},"3978":{"position":[[1229,16]]}}}],["establish",{"_index":8373,"t":{"3585":{"position":[[48,11]]}}}],["et",{"_index":6535,"t":{"2559":{"position":[[973,2],[981,2]]}}}],["etc",{"_index":4476,"t":{"1488":{"position":[[1496,3],[1511,3]]},"1499":{"position":[[796,3],[811,3]]}}}],["eu",{"_index":6473,"t":{"2559":{"position":[[424,2],[431,2]]}}}],["event",{"_index":1958,"t":{"292":{"position":[[48,5]]},"1801":{"position":[[257,6]]},"1803":{"position":[[639,5],[742,5]]},"1811":{"position":[[12,5]]}}}],["eventbu",{"_index":5302,"t":{"1695":{"position":[[49,8]]},"1791":{"position":[[50,8]]},"1795":{"position":[[2526,8],[2545,8]]},"1799":{"position":[[706,8]]},"1801":{"position":[[202,8],[3343,8],[3420,8]]},"1803":{"position":[[2401,8],[5556,8]]},"1805":{"position":[[452,8]]},"1807":{"position":[[775,8]]},"1809":{"position":[[404,8]]},"1813":{"position":[[40,8]]},"3430":{"position":[[13,8],[47,8],[2518,8],[3863,8]]},"3432":{"position":[[2698,8],[2734,8],[5080,8]]},"3601":{"position":[[151,8]]},"3936":{"position":[[64,8],[99,8],[161,8]]},"3948":{"position":[[50,8],[110,8]]}}}],["eventbusfactori",{"_index":5665,"t":{"1815":{"position":[[228,15],[314,15],[368,15],[386,15],[464,15],[647,15]]}}}],["eventbushostedservic",{"_index":8083,"t":{"3430":{"position":[[22,21]]},"3432":{"position":[[2707,21]]}}}],["eventbusoptionsbuild",{"_index":5680,"t":{"1821":{"position":[[0,22]]}}}],["eventbusservic",{"_index":8095,"t":{"3430":{"position":[[2496,15],[3841,15]]},"3432":{"position":[[5058,15]]},"3601":{"position":[[129,15]]},"3918":{"position":[[4001,15]]}}}],["eventconsum",{"_index":5585,"t":{"1803":{"position":[[79,13],[282,13],[878,13],[2819,13],[2848,13],[3540,13],[3560,13],[3604,13],[3674,13],[3880,13],[5109,13]]}}}],["eventdata",{"_index":2953,"t":{"567":{"position":[[128,9],[253,9],[362,9]]},"570":{"position":[[671,9],[747,9]]},"572":{"position":[[438,9],[704,9],[836,9],[1154,9]]},"927":{"position":[[353,9],[435,9],[586,9],[720,9],[858,9],[905,9],[1025,9],[1131,9],[1275,9],[1357,9],[1510,9],[1597,9],[1718,9],[1765,9],[1887,9],[1946,9],[2059,9],[2106,9],[2228,9],[2334,9]]},"929":{"position":[[343,9],[422,9],[517,9],[575,9],[685,9],[726,9],[837,9],[937,9],[1081,9],[1172,9],[1325,9],[1468,9],[1607,9],[1677,9],[1817,9],[1939,9],[2104,9],[2185,9],[2317,9],[2401,9],[2553,9],[2689,9],[2827,9],[2890,9],[3029,9],[3144,9],[3299,9],[3384,9],[3540,9],[3677,9],[3819,9],[3883,9],[4026,9],[4142,9]]},"931":{"position":[[296,9],[367,9],[494,9],[617,9],[733,9],[783,9],[900,9],[1002,9],[1117,9],[1153,9],[1250,9],[1345,9]]},"933":{"position":[[128,9],[253,9],[362,9],[499,9],[575,9]]},"2937":{"position":[[934,9],[1010,9]]}}}],["eventenum",{"_index":5491,"t":{"1795":{"position":[[858,9]]},"3936":{"position":[[1239,9]]}}}],["eventfallbackpolici",{"_index":5673,"t":{"1819":{"position":[[78,19],[112,19],[182,19],[219,19],[247,19],[455,19],[540,19],[683,19],[1021,19]]}}}],["eventhandl",{"_index":5595,"t":{"1803":{"position":[[645,12],[748,12]]}}}],["eventhandler1",{"_index":9548,"t":{"3936":{"position":[[1059,13]]}}}],["eventhandler2",{"_index":9549,"t":{"3936":{"position":[[1181,13]]}}}],["eventhandlerexecutedcontext",{"_index":5647,"t":{"1807":{"position":[[517,27]]}}}],["eventhandlerexecutingcontext",{"_index":5487,"t":{"1795":{"position":[[311,28],[573,28],[814,28],[1170,28],[1584,28],[1803,28]]},"1807":{"position":[[354,28]]},"1809":{"position":[[204,28],[247,28]]},"1811":{"position":[[457,28]]},"1819":{"position":[[330,28],[742,28]]},"1823":{"position":[[463,28]]},"3936":{"position":[[1073,28],[1195,28]]}}}],["eventid",{"_index":5323,"t":{"1703":{"position":[[230,7],[280,7],[407,7],[457,7],[549,7]]},"1711":{"position":[[309,7]]},"1795":{"position":[[885,7],[1214,7],[1239,7],[1628,7],[1653,7],[1847,7],[1872,7]]},"1797":{"position":[[185,7],[213,7],[223,7],[354,7]]},"1807":{"position":[[424,7],[450,7],[586,7],[612,7],[699,7],[725,7]]},"1815":{"position":[[629,7],[675,7]]},"3432":{"position":[[3763,7]]},"3936":{"position":[[1266,7]]}}}],["eventingbasicconsum",{"_index":5564,"t":{"1801":{"position":[[1526,21]]}}}],["eventpublish",{"_index":5508,"t":{"1795":{"position":[[2067,14],[2121,14],[2140,14],[2157,14],[2247,14],[2396,14],[2462,14]]},"1797":{"position":[[778,14]]},"1815":{"position":[[177,14],[281,14],[334,14],[351,14]]},"3936":{"position":[[1350,14],[1438,14],[1495,14]]}}}],["eventsourc",{"_index":5537,"t":{"1799":{"position":[[420,11]]},"1801":{"position":[[1735,11],[1761,11],[1882,11],[2081,11],[2257,11],[2320,11],[2385,11],[2440,11],[2456,11],[2703,11],[2971,11],[3044,11]]},"1803":{"position":[[3730,11],[3853,11],[4043,11],[4219,11],[4275,11],[4340,11],[4395,11],[4411,11],[4675,11],[4943,11],[5016,11]]},"1805":{"position":[[345,11],[396,11],[409,11]]}}}],["eventsourcestor",{"_index":5640,"t":{"1805":{"position":[[174,17],[238,17],[260,17],[280,17],[367,17]]}}}],["eventsubscrib",{"_index":5485,"t":{"1795":{"position":[[251,14],[473,14],[505,14],[753,14],[981,14],[1311,14],[1358,14],[1436,14],[1727,14]]},"1811":{"position":[[397,14]]},"1819":{"position":[[572,14],[614,14],[952,14],[1045,14]]},"1823":{"position":[[407,14]]},"3922":{"position":[[52,14],[101,14]]},"3936":{"position":[[1007,14],[1124,14]]}}}],["every_minut",{"_index":6329,"t":{"2424":{"position":[[100,12]]}}}],["every_second",{"_index":6326,"t":{"2424":{"position":[[67,12]]},"2428":{"position":[[27,12]]}}}],["evict",{"_index":1745,"t":{"237":{"position":[[1165,7]]}}}],["evictionreason",{"_index":1742,"t":{"237":{"position":[[1093,14]]}}}],["evolv",{"_index":8534,"t":{"3702":{"position":[[1609,8]]}}}],["eway5",{"_index":4733,"t":{"1511":{"position":[[1903,5]]}}}],["ex",{"_index":4949,"t":{"1535":{"position":[[101,3]]},"1551":{"position":[[262,3]]},"1819":{"position":[[378,2],[401,2]]},"2747":{"position":[[74,3],[134,3],[206,3],[250,3]]},"2749":{"position":[[89,3],[152,3]]},"2762":{"position":[[65,3]]},"2836":{"position":[[830,3],[877,3],[947,3],[975,3],[1026,3],[1092,3],[1134,3],[1183,3],[1207,3]]},"3078":{"position":[[29,3]]},"3080":{"position":[[290,3],[350,3],[422,3],[466,3],[512,3],[657,3],[720,3]]},"3795":{"position":[[489,2]]}}}],["exampl",{"_index":6232,"t":{"2359":{"position":[[454,7]]},"2579":{"position":[[104,7]]},"2581":{"position":[[140,7],[643,7]]},"2587":{"position":[[49,7]]},"2589":{"position":[[68,7]]},"2856":{"position":[[130,7],[1279,7]]},"3664":{"position":[[24,7],[92,7],[105,7],[164,7],[176,7],[274,7],[288,7],[312,7],[328,7],[352,7],[365,7],[388,7],[402,7],[425,7],[446,7],[478,7],[554,7],[572,7]]},"3702":{"position":[[596,8],[691,8]]},"3972":{"position":[[375,7]]}}}],["except",{"_index":758,"t":{"112":{"position":[[1450,9]]},"585":{"position":[[121,9],[183,9],[281,9]]},"713":{"position":[[242,9]]},"734":{"position":[[256,9]]},"1665":{"position":[[319,9]]},"1803":{"position":[[1068,9],[1113,9]]},"1807":{"position":[[634,9],[680,9]]},"1819":{"position":[[368,9]]},"1832":{"position":[[15,9]]},"1847":{"position":[[73,9],[106,9]]},"1851":{"position":[[253,9],[532,9],[780,9],[1052,9]]},"1863":{"position":[[139,9]]},"1925":{"position":[[1312,9]]},"1933":{"position":[[513,9],[533,9]]},"2472":{"position":[[107,9],[146,9]]},"3287":{"position":[[1864,9],[1907,9],[2172,9],[2215,9],[2488,9],[2531,9],[2809,9],[2852,9]]},"3291":{"position":[[419,9],[1191,9],[2148,9]]},"3432":{"position":[[3848,9]]},"3452":{"position":[[3078,9]]},"3559":{"position":[[204,9],[333,9],[483,9]]},"3585":{"position":[[71,9]]},"3795":{"position":[[479,9]]},"3828":{"position":[[656,9],[702,9]]},"3830":{"position":[[484,9],[517,9]]},"3832":{"position":[[734,9],[1798,9],[3559,9],[4909,9]]},"3916":{"position":[[6074,9]]},"3920":{"position":[[1513,9]]},"3940":{"position":[[368,9]]}}}],["exceptinterfac",{"_index":9623,"t":{"3948":{"position":[[439,16]]}}}],["exceptioncontext",{"_index":5753,"t":{"1883":{"position":[[333,16]]},"1933":{"position":[[237,16]]},"1935":{"position":[[274,16]]},"1937":{"position":[[268,16]]},"3708":{"position":[[1235,16]]},"3716":{"position":[[243,16]]},"3956":{"position":[[876,16]]}}}],["exceptionfilterattribut",{"_index":5799,"t":{"1903":{"position":[[103,24]]},"1935":{"position":[[111,24]]}}}],["exceptionhandl",{"_index":5502,"t":{"1795":{"position":[[1567,16],[1786,16]]},"1933":{"position":[[305,16]]},"1955":{"position":[[259,16]]}}}],["exceptionjob",{"_index":6360,"t":{"2472":{"position":[[356,12]]}}}],["exceptionmetadata",{"_index":8577,"t":{"3708":{"position":[[1261,17]]},"3716":{"position":[[269,17]]},"3930":{"position":[[13,17],[593,17]]},"3956":{"position":[[902,17]]}}}],["exceptionsen",{"_index":1839,"t":{"251":{"position":[[395,17]]}}}],["exceptiontyp",{"_index":5500,"t":{"1795":{"position":[[1481,14]]},"1851":{"position":[[412,13],[571,13],[932,13],[1088,13]]},"1875":{"position":[[174,13]]},"3832":{"position":[[2329,14],[2582,14],[4090,14],[4343,14]]}}}],["exchang",{"_index":5989,"t":{"2136":{"position":[[29,8]]}}}],["excludeassembl",{"_index":7292,"t":{"2981":{"position":[[282,17]]},"3920":{"position":[[176,17]]}}}],["excludeofmethod",{"_index":8175,"t":{"3448":{"position":[[422,16],[1229,16]]}}}],["exec",{"_index":4033,"t":{"1160":{"position":[[603,4],[1537,4]]},"1162":{"position":[[631,4],[1613,4]]},"1164":{"position":[[300,4],[733,4]]},"1166":{"position":[[387,4],[943,4]]},"1234":{"position":[[400,4]]},"1236":{"position":[[406,4]]},"1238":{"position":[[488,4]]},"1240":{"position":[[530,4]]},"1497":{"position":[[116,4],[294,4]]},"2751":{"position":[[162,4]]}}}],["exec_mod",{"_index":6884,"t":{"2751":{"position":[[162,9]]}}}],["execut",{"_index":2895,"t":{"550":{"position":[[364,7]]},"734":{"position":[[7394,7],[7481,7]]},"2486":{"position":[[356,8],[441,8],[461,8],[519,8],[604,8],[687,8],[772,8],[858,8],[944,8]]},"3452":{"position":[[3496,7]]},"3768":{"position":[[859,7],[1054,7],[1359,7],[1554,7],[1861,7],[2057,7],[2364,7]]},"3832":{"position":[[1694,9],[3507,9]]},"3916":{"position":[[6492,7]]}}}],["executeasync",{"_index":2737,"t":{"492":{"position":[[331,12]]},"530":{"position":[[392,12]]},"763":{"position":[[288,12]]},"1039":{"position":[[392,12]]},"1809":{"position":[[191,12]]},"2482":{"position":[[231,12]]},"2484":{"position":[[331,12]]},"2805":{"position":[[321,12]]},"2813":{"position":[[465,12]]},"2817":{"position":[[134,12],[744,12]]},"2825":{"position":[[231,12]]},"2827":{"position":[[377,12]]},"2829":{"position":[[425,12]]},"2831":{"position":[[373,12]]},"3762":{"position":[[161,12]]},"3768":{"position":[[336,12]]},"3770":{"position":[[208,12],[1441,12],[2892,12],[4757,12]]},"3774":{"position":[[493,12]]},"3783":{"position":[[215,12]]},"3789":{"position":[[46,12]]},"3791":{"position":[[333,12],[976,12],[1780,12]]},"3793":{"position":[[26,12]]},"3795":{"position":[[205,12]]},"3806":{"position":[[3419,12]]},"3808":{"position":[[853,12],[2074,12]]},"3832":{"position":[[152,12],[323,12],[540,12],[1836,12],[2039,12],[2741,12],[3597,12],[3800,12],[4502,12]]}}}],["executecommand",{"_index":7671,"t":{"3224":{"position":[[1213,14],[1428,14],[1635,14]]},"3226":{"position":[[560,14]]},"3232":{"position":[[58,14],[91,14],[194,14]]},"3258":{"position":[[339,14]]},"3267":{"position":[[44,14],[283,14]]},"3269":{"position":[[76,14],[202,14],[330,14],[535,14]]},"3271":{"position":[[85,14],[143,14],[220,14]]},"3273":{"position":[[778,14]]}}}],["executedelet",{"_index":3564,"t":{"773":{"position":[[178,13]]}}}],["executedeleteasync",{"_index":3566,"t":{"773":{"position":[[239,18],[323,18],[427,18]]}}}],["executedtim",{"_index":8951,"t":{"3830":{"position":[[469,12],[498,12]]}}}],["executenonqueri",{"_index":7880,"t":{"3291":{"position":[[1705,15]]}}}],["executeread",{"_index":2929,"t":{"560":{"position":[[78,13]]}}}],["executereturnident",{"_index":7795,"t":{"3267":{"position":[[97,21],[442,21]]}}}],["executetyp",{"_index":6353,"t":{"2444":{"position":[[259,11]]},"2468":{"position":[[188,11]]},"2470":{"position":[[46,11]]},"2478":{"position":[[46,11]]}}}],["executeupd",{"_index":3563,"t":{"773":{"position":[[160,13]]}}}],["executeupdateasync",{"_index":3569,"t":{"773":{"position":[[483,18],[633,18],[930,18]]}}}],["executingtim",{"_index":8833,"t":{"3793":{"position":[[179,13]]},"3830":{"position":[[401,13],[419,13]]}}}],["executionpolici",{"_index":3310,"t":{"675":{"position":[[254,15]]}}}],["executor",{"_index":8226,"t":{"3452":{"position":[[3557,8]]},"3916":{"position":[[6553,8]]}}}],["exist",{"_index":284,"t":{"19":{"position":[[211,6]]},"777":{"position":[[14,6]]},"1323":{"position":[[14,6]]},"1741":{"position":[[281,6],[1090,6],[1942,6]]},"3236":{"position":[[355,6]]},"3842":{"position":[[521,6],[1151,6],[1716,6],[2306,6],[2947,6],[3564,6]]},"3968":{"position":[[192,6]]}}}],["exit",{"_index":5022,"t":{"1555":{"position":[[599,4]]},"1557":{"position":[[1006,4]]},"2856":{"position":[[1036,7],[1543,7],[1630,7]]}}}],["exiteventarg",{"_index":7185,"t":{"2899":{"position":[[521,13]]},"3910":{"position":[[1307,13]]}}}],["exp",{"_index":812,"t":{"114":{"position":[[1043,3]]},"152":{"position":[[684,3]]},"3222":{"position":[[72,3],[137,3],[226,3]]},"3446":{"position":[[1518,3]]},"3452":{"position":[[2299,3]]},"3916":{"position":[[5295,3]]},"3928":{"position":[[2080,3]]}}}],["expandoobject",{"_index":9936,"t":{"3976":{"position":[[139,13]]}}}],["expect",{"_index":7147,"t":{"2856":{"position":[[855,8],[1081,8],[1347,8],[1458,8],[1568,8],[1655,8]]}}}],["expectedvalu",{"_index":7145,"t":{"2856":{"position":[[773,13],[927,13],[1137,13]]}}}],["expectinterfac",{"_index":4288,"t":{"1416":{"position":[[494,16]]}}}],["experiment",{"_index":8526,"t":{"3702":{"position":[[162,12]]}}}],["expir",{"_index":1726,"t":{"237":{"position":[[301,6],[342,7]]},"253":{"position":[[308,7]]},"2846":{"position":[[135,7]]}}}],["expiredtim",{"_index":991,"t":{"127":{"position":[[1169,11]]},"3039":{"position":[[293,11]]},"3041":{"position":[[380,11]]}}}],["explicit",{"_index":4938,"t":{"1530":{"position":[[32,8],[88,8]]}}}],["explicitli",{"_index":5051,"t":{"1566":{"position":[[681,10]]}}}],["export",{"_index":2039,"t":{"310":{"position":[[375,6],[1128,6]]},"314":{"position":[[504,6]]},"316":{"position":[[562,6]]},"321":{"position":[[245,6]]}}}],["expos",{"_index":268,"t":{"15":{"position":[[469,6]]},"17":{"position":[[463,6]]},"417":{"position":[[83,6]]},"1377":{"position":[[137,6],[147,6]]},"1379":{"position":[[578,6],[588,6]]},"1739":{"position":[[636,6]]},"2995":{"position":[[60,6]]}}}],["express",{"_index":2751,"t":{"494":{"position":[[708,10]]},"846":{"position":[[317,11]]},"883":{"position":[[15,10],[63,10]]},"2165":{"position":[[4,10]]},"2167":{"position":[[19,10],[209,10],[256,10],[315,10],[361,10],[431,10]]},"2208":{"position":[[75,10]]},"2448":{"position":[[75,10]]},"3702":{"position":[[2572,7]]}}}],["expression",{"_index":7638,"t":{"3222":{"position":[[50,14],[82,14]]}}}],["expression2",{"_index":6000,"t":{"2165":{"position":[[63,11]]},"2167":{"position":[[58,11],[224,11],[283,11],[329,11],[387,11]]}}}],["expression3",{"_index":6002,"t":{"2167":{"position":[[103,11]]}}}],["expression4",{"_index":6003,"t":{"2167":{"position":[[142,11]]}}}],["expression5",{"_index":6006,"t":{"2167":{"position":[[195,11]]}}}],["expression6",{"_index":6007,"t":{"2167":{"position":[[242,11]]}}}],["expression7",{"_index":6009,"t":{"2167":{"position":[[301,11]]}}}],["expression8",{"_index":6010,"t":{"2167":{"position":[[347,11]]}}}],["extend",{"_index":2041,"t":{"310":{"position":[[415,7]]}}}],["extens",{"_index":25,"t":{"3":{"position":[[160,10],[188,10]]},"11":{"position":[[300,10]]},"146":{"position":[[167,10]]},"202":{"position":[[147,10]]},"204":{"position":[[213,10]]},"210":{"position":[[249,10]]},"212":{"position":[[135,10],[424,10]]},"216":{"position":[[223,10],[615,10],[663,10]]},"231":{"position":[[61,10]]},"241":{"position":[[36,10],[98,10],[177,10]]},"338":{"position":[[121,10],[169,10]]},"411":{"position":[[124,10],[172,10]]},"435":{"position":[[484,10]]},"514":{"position":[[89,10]]},"524":{"position":[[168,10]]},"595":{"position":[[53,10]]},"617":{"position":[[2229,10]]},"734":{"position":[[923,10],[1136,10],[1330,10],[1508,10],[1644,10],[1777,10],[1990,10],[2184,10],[2362,10],[2498,10],[2631,10],[2844,10],[3038,10],[3216,10],[3357,10],[3493,10],[3626,10],[3839,10],[4033,10],[4211,10],[4347,10],[4480,10],[4693,10],[4887,10],[5065,10],[5201,10],[5334,10],[5547,10],[5741,10],[5919,10],[6055,10],[6188,10],[6384,10],[6528,10],[6642,10],[6783,10],[7859,10]]},"747":{"position":[[84,10]]},"1058":{"position":[[35,10]]},"1317":{"position":[[89,10]]},"1582":{"position":[[127,10]]},"1689":{"position":[[77,10]]},"1843":{"position":[[53,10]]},"1867":{"position":[[396,10]]},"1977":{"position":[[52,10]]},"1979":{"position":[[88,10],[130,10],[178,10]]},"2055":{"position":[[309,10]]},"2269":{"position":[[132,10]]},"2294":{"position":[[300,10]]},"2557":{"position":[[107,13]]},"2711":{"position":[[143,10]]},"2713":{"position":[[901,10]]},"2725":{"position":[[667,10],[1659,10]]},"2727":{"position":[[190,10]]},"2776":{"position":[[118,10]]},"2805":{"position":[[130,10]]},"2807":{"position":[[167,10]]},"2813":{"position":[[141,10],[177,10],[740,10],[788,10]]},"2817":{"position":[[290,10],[326,10]]},"2819":{"position":[[98,10],[146,10]]},"2821":{"position":[[129,10],[177,10]]},"2836":{"position":[[91,10],[188,10],[236,10],[1319,10],[1401,10],[1449,10]]},"2881":{"position":[[571,10]]},"2889":{"position":[[280,10]]},"2897":{"position":[[303,10]]},"2899":{"position":[[307,10]]},"2901":{"position":[[90,10]]},"2905":{"position":[[175,10]]},"2927":{"position":[[47,10]]},"2943":{"position":[[47,10]]},"2957":{"position":[[47,10]]},"2973":{"position":[[96,10]]},"3069":{"position":[[74,10]]},"3144":{"position":[[156,10],[204,10]]},"3373":{"position":[[229,10]]},"3399":{"position":[[160,10],[208,10]]},"3483":{"position":[[619,10],[1301,10]]},"3630":{"position":[[177,10],[225,10]]},"3910":{"position":[[1134,10]]},"3992":{"position":[[1056,10]]}}}],["externalassembl",{"_index":4303,"t":{"1420":{"position":[[979,18]]},"2623":{"position":[[175,18]]},"2625":{"position":[[439,18]]},"2981":{"position":[[226,18]]}}}],["externalservic",{"_index":4300,"t":{"1420":{"position":[[500,15],[521,15]]},"3001":{"position":[[61,15],[82,15]]}}}],["extra",{"_index":533,"t":{"91":{"position":[[73,6],[127,6],[194,6],[248,6],[308,6],[364,6],[422,6]]},"127":{"position":[[10,6]]},"542":{"position":[[36,6]]},"546":{"position":[[208,6]]},"1683":{"position":[[348,6]]},"2601":{"position":[[37,6]]},"2680":{"position":[[51,6]]},"2686":{"position":[[76,6]]},"3071":{"position":[[959,6],[1253,6]]},"3207":{"position":[[43,6]]},"3252":{"position":[[38,6]]},"3254":{"position":[[1670,6]]},"3450":{"position":[[221,5]]},"3452":{"position":[[3030,6]]},"3708":{"position":[[461,6],[3655,6]]},"3712":{"position":[[12,6]]},"3916":{"position":[[6026,6]]},"3924":{"position":[[653,6]]},"3928":{"position":[[592,6]]},"3944":{"position":[[464,6]]},"3956":{"position":[[2983,6]]},"3972":{"position":[[14,6]]},"3986":{"position":[[1032,6]]},"3990":{"position":[[357,6]]},"3992":{"position":[[85,6],[324,6],[379,6]]},"3994":{"position":[[14,6],[64,6],[109,6]]}}}],["eyjhbgcioijiuzi1niisinr5cci6ikpxvcj9",{"_index":802,"t":{"114":{"position":[[687,36]]},"3446":{"position":[[1162,36]]},"3452":{"position":[[1717,36]]},"3916":{"position":[[4713,36]]},"3928":{"position":[[1724,36]]}}}],["eyjvc2vyswqiojesikfjy291bnqioijhzg1pbiisimlhdci6mty1odcxnjc5nywibmjmijoxnju4nze2nzk3lcjlehaioje2ntg3mtc5otcsimlzcyi6imrvdg5ldgnoaw5hiiwiyxvkijoicg93zxjiesbgdxjpb24ifq",{"_index":803,"t":{"114":{"position":[[724,166]]},"3446":{"position":[[1199,166]]},"3928":{"position":[[1761,166]]}}}],["eyjvc2vyswqiojesikfjy291bnqioijhzg1pbiisimlhdci6mty2ndq1mduwnswibmjmijoxnjy0nduwnta1lcjlehaioje2njq0nte3mdusimlzcyi6imrvdg5ldgnoaw5hiiwiyxvkijoicg93zxjiesbgdxjpb24ifq",{"_index":8195,"t":{"3452":{"position":[[1754,166]]},"3916":{"position":[[4750,166]]}}}],["f",{"_index":289,"t":{"19":{"position":[[288,1],[293,1]]},"830":{"position":[[37,1]]},"832":{"position":[[270,1],[558,1]]},"834":{"position":[[11,1]]},"1499":{"position":[[323,1]]},"1539":{"position":[[193,1]]},"1741":{"position":[[2028,1],[2033,1]]},"2639":{"position":[[131,1]]},"2666":{"position":[[131,1]]},"3323":{"position":[[30,1],[99,1],[141,1],[183,1],[248,1],[286,1],[324,1],[452,1]]},"3912":{"position":[[1304,1],[1380,1],[1431,1],[1482,1]]},"3922":{"position":[[440,1],[562,1],[640,1]]}}}],["f0aaec6",{"_index":9147,"t":{"3914":{"position":[[3320,7]]}}}],["f12",{"_index":6784,"t":{"2657":{"position":[[83,3]]}}}],["f5",{"_index":4984,"t":{"1541":{"position":[[475,2]]},"1981":{"position":[[63,2]]},"1993":{"position":[[63,2]]},"2016":{"position":[[71,2]]}}}],["f519",{"_index":7263,"t":{"2929":{"position":[[449,4]]},"2945":{"position":[[449,4]]},"2959":{"position":[[449,4]]}}}],["f9a6587",{"_index":9183,"t":{"3916":{"position":[[2332,7]]}}}],["f_person",{"_index":3614,"t":{"830":{"position":[[37,8]]},"832":{"position":[[270,8],[558,8]]},"834":{"position":[[11,8]]}}}],["fa",{"_index":6540,"t":{"2559":{"position":[[1030,2],[1037,2]]}}}],["fac",{"_index":4064,"t":{"1214":{"position":[[218,3]]}}}],["facebook",{"_index":8352,"t":{"3575":{"position":[[491,8]]},"3595":{"position":[[183,8]]},"3597":{"position":[[99,8],[208,8],[310,8]]}}}],["fact",{"_index":7989,"t":{"3360":{"position":[[64,4],[159,4]]},"3373":{"position":[[509,4]]},"3381":{"position":[[211,4]]},"3383":{"position":[[254,4]]},"3387":{"position":[[146,4]]},"3389":{"position":[[1280,4],[1355,4]]},"3391":{"position":[[735,4],[810,4],[906,4]]},"3393":{"position":[[1153,4],[1228,4],[1324,4],[1422,4]]},"3399":{"position":[[369,4],[697,4]]},"3924":{"position":[[3429,4]]}}}],["factori",{"_index":2725,"t":{"490":{"position":[[291,7]]},"1438":{"position":[[56,7]]},"1801":{"position":[[884,7],[1057,7],[1334,7],[3230,7],[3410,7]]},"1803":{"position":[[1423,7]]},"2182":{"position":[[21,7],[122,7]]},"2184":{"position":[[24,7],[127,7]]},"2186":{"position":[[81,7]]},"2188":{"position":[[84,7]]},"2309":{"position":[[58,7]]},"2315":{"position":[[166,7]]},"2551":{"position":[[171,7],[195,7]]},"3397":{"position":[[525,7],[602,7],[614,7],[624,7],[749,7]]}}}],["fail",{"_index":1091,"t":{"135":{"position":[[596,4]]},"146":{"position":[[690,4]]},"1887":{"position":[[395,6]]},"2383":{"position":[[239,5]]},"2472":{"position":[[413,6]]},"2725":{"position":[[994,4],[2436,4]]},"3768":{"position":[[849,6],[1044,6],[1349,6],[1544,6],[1851,6],[2047,6],[2354,6]]},"3832":{"position":[[1594,4],[3294,4]]},"3844":{"position":[[657,6]]},"3846":{"position":[[895,6]]}}}],["faild",{"_index":8987,"t":{"3842":{"position":[[99,5],[639,5],[1248,5],[1822,5],[2425,5],[3058,5]]},"3844":{"position":[[99,5]]},"3846":{"position":[[88,5],[344,5]]},"3882":{"position":[[76,5]]},"3886":{"position":[[76,5]]},"3888":{"position":[[76,5]]},"3892":{"position":[[76,5]]}}}],["failedautorollback",{"_index":2855,"t":{"532":{"position":[[182,18]]},"3970":{"position":[[54,18]]}}}],["fakedelet",{"_index":3579,"t":{"791":{"position":[[51,10]]},"793":{"position":[[31,10],[99,10],[112,10]]},"795":{"position":[[36,10],[115,10],[180,10]]},"3962":{"position":[[503,10]]}}}],["fakedeleteasync",{"_index":3583,"t":{"795":{"position":[[293,15],[394,15],[481,15]]}}}],["fakedeletenow",{"_index":3581,"t":{"795":{"position":[[74,13],[148,13]]}}}],["fakedeletenowasync",{"_index":3584,"t":{"795":{"position":[[342,18],[438,18]]}}}],["fakedeletequeryfilterexpress",{"_index":3640,"t":{"846":{"position":[[727,31],[761,31],[824,31],[902,31]]}}}],["fakestartup",{"_index":1580,"t":{"216":{"position":[[57,11]]},"3397":{"position":[[252,11],[440,11],[511,11],[589,11]]}}}],["fakestarup",{"_index":8031,"t":{"3397":{"position":[[141,10],[157,10]]}}}],["fal",{"_index":8732,"t":{"3770":{"position":[[1163,4]]}}}],["fallbackpolici",{"_index":5676,"t":{"1819":{"position":[[593,14],[659,14],[997,14],[1093,14]]},"3832":{"position":[[2352,14],[2605,14],[4113,14],[4366,14]]},"3910":{"position":[[2410,14]]}}}],["fals",{"_index":972,"t":{"127":{"position":[[730,5]]},"276":{"position":[[140,5]]},"280":{"position":[[215,5],[274,5]]},"308":{"position":[[583,5]]},"413":{"position":[[72,5]]},"415":{"position":[[472,5]]},"417":{"position":[[378,5]]},"419":{"position":[[126,5]]},"532":{"position":[[44,5],[152,5]]},"606":{"position":[[584,5],[706,5],[861,5]]},"608":{"position":[[861,5],[905,5]]},"615":{"position":[[782,5]]},"621":{"position":[[63,5],[93,5]]},"708":{"position":[[275,5]]},"747":{"position":[[345,5]]},"844":{"position":[[350,5]]},"877":{"position":[[1461,5],[1557,5],[1665,5],[1773,5],[1881,5]]},"887":{"position":[[124,5]]},"933":{"position":[[1001,5]]},"1623":{"position":[[66,5],[210,5]]},"1625":{"position":[[145,5]]},"1637":{"position":[[54,5]]},"1641":{"position":[[63,5],[142,5],[413,5]]},"1647":{"position":[[180,5]]},"1651":{"position":[[243,5]]},"1661":{"position":[[230,5],[262,5],[427,5],[489,5],[539,5]]},"1753":{"position":[[337,5]]},"1801":{"position":[[1468,5],[1475,5],[1482,5],[1941,5],[2001,5]]},"1821":{"position":[[168,5],[219,5]]},"1885":{"position":[[31,5],[149,5]]},"1915":{"position":[[148,5]]},"1921":{"position":[[148,5]]},"1929":{"position":[[148,5]]},"1937":{"position":[[148,5]]},"1945":{"position":[[148,5]]},"2285":{"position":[[128,5]]},"2315":{"position":[[432,5]]},"2333":{"position":[[213,5]]},"2402":{"position":[[212,5]]},"2413":{"position":[[176,5]]},"2432":{"position":[[196,5]]},"2438":{"position":[[328,5]]},"2440":{"position":[[362,5],[664,5]]},"2442":{"position":[[807,5]]},"2444":{"position":[[164,5],[189,5]]},"2723":{"position":[[118,5]]},"2796":{"position":[[520,5]]},"2829":{"position":[[257,5],[899,5]]},"2848":{"position":[[1730,5],[1750,5]]},"2937":{"position":[[1472,5]]},"2981":{"position":[[220,5]]},"2983":{"position":[[41,5]]},"2991":{"position":[[478,5]]},"3009":{"position":[[63,5],[181,5]]},"3023":{"position":[[231,5],[263,5],[424,5],[486,5],[536,5]]},"3047":{"position":[[207,5]]},"3063":{"position":[[209,5],[1192,5],[1408,5]]},"3287":{"position":[[732,5],[1163,5]]},"3432":{"position":[[156,5]]},"3446":{"position":[[511,5]]},"3448":{"position":[[327,5],[350,5],[412,5],[792,5],[834,5],[1136,5],[1177,5]]},"3454":{"position":[[290,5]]},"3470":{"position":[[273,5]]},"3532":{"position":[[130,5]]},"3571":{"position":[[169,5]]},"3654":{"position":[[152,5]]},"3658":{"position":[[34,5],[168,5]]},"3662":{"position":[[100,5]]},"3680":{"position":[[445,5]]},"3686":{"position":[[431,5]]},"3698":{"position":[[307,5]]},"3706":{"position":[[201,5],[1184,5],[1419,5]]},"3768":{"position":[[147,5],[2516,5],[2557,5]]},"3770":{"position":[[573,5],[602,5],[1955,5],[1984,5],[2617,5],[5252,5],[5280,5],[5905,5]]},"3772":{"position":[[200,5]]},"3777":{"position":[[250,5],[291,5]]},"3779":{"position":[[823,5],[1158,5],[1687,5],[1789,5]]},"3781":{"position":[[400,5],[419,5]]},"3785":{"position":[[283,5],[1689,5]]},"3798":{"position":[[653,5]]},"3802":{"position":[[1196,5],[1796,5]]},"3806":{"position":[[3062,5]]},"3808":{"position":[[3262,5]]},"3810":{"position":[[996,5]]},"3812":{"position":[[581,5],[2850,5]]},"3817":{"position":[[795,5],[1407,5],[1834,5],[2388,5]]},"3821":{"position":[[311,5],[880,5]]},"3826":{"position":[[106,5]]},"3896":{"position":[[236,5],[805,5]]},"3914":{"position":[[2863,5]]},"3916":{"position":[[9075,5]]},"3930":{"position":[[166,5],[190,5]]},"3944":{"position":[[696,5]]},"3974":{"position":[[278,5],[355,5]]}}}],["faroes",{"_index":6538,"t":{"2559":{"position":[[1002,7],[1016,7]]}}}],["fasl",{"_index":5194,"t":{"1661":{"position":[[294,5]]},"3023":{"position":[[295,5]]}}}],["faster",{"_index":8536,"t":{"3702":{"position":[[1641,6]]}}}],["fastest",{"_index":7717,"t":{"3236":{"position":[[47,7],[144,7],[236,7],[480,7],[559,7]]}}}],["fb08a65",{"_index":9493,"t":{"3934":{"position":[[140,7],[461,7]]}}}],["fb72fd7",{"_index":9645,"t":{"3950":{"position":[[795,7]]}}}],["featur",{"_index":2108,"t":{"319":{"position":[[372,7],[441,7]]},"329":{"position":[[142,7]]},"384":{"position":[[21,7]]},"773":{"position":[[552,8]]},"1753":{"position":[[68,8]]},"2243":{"position":[[144,8],[193,8]]},"2512":{"position":[[105,8]]},"2591":{"position":[[90,8]]},"3329":{"position":[[148,8],[232,8]]}}}],["feb",{"_index":6315,"t":{"2420":{"position":[[1058,3]]}}}],["fetch",{"_index":5095,"t":{"1594":{"position":[[69,5]]},"1596":{"position":[[93,5]]},"1631":{"position":[[172,5]]},"1661":{"position":[[1055,5]]},"3023":{"position":[[1052,5]]}}}],["few",{"_index":7716,"t":{"3236":{"position":[[32,3],[129,3],[220,3]]}}}],["ff52d38",{"_index":9641,"t":{"3950":{"position":[[583,7]]}}}],["fff8",{"_index":7264,"t":{"2929":{"position":[[454,4]]},"2945":{"position":[[454,4]]},"2959":{"position":[[454,4]]}}}],["fffffff",{"_index":8109,"t":{"3430":{"position":[[3765,7]]},"3432":{"position":[[4982,7]]}}}],["fi",{"_index":4475,"t":{"1488":{"position":[[1248,2]]},"1499":{"position":[[640,2]]},"2559":{"position":[[1053,2],[1060,2],[1063,2],[2445,2]]}}}],["field",{"_index":7707,"t":{"3234":{"position":[[299,5],[365,5],[444,5]]},"3986":{"position":[[1365,5]]}}}],["fieldnam",{"_index":7663,"t":{"3224":{"position":[[874,9]]}}}],["fieldvalu",{"_index":7665,"t":{"3224":{"position":[[927,10]]}}}],["fifo",{"_index":6097,"t":{"2305":{"position":[[12,5]]}}}],["file",{"_index":274,"t":{"19":{"position":[[86,5],[278,5],[329,5],[544,4],[677,5],[722,5],[794,5],[807,4],[816,5],[829,5]]},"1497":{"position":[[40,5],[240,5]]},"1741":{"position":[[154,4],[368,4],[425,4],[474,4],[610,4],[716,4],[747,4],[1817,5],[2018,5],[2083,5],[2312,4],[2445,5]]},"1743":{"position":[[109,4],[134,4],[166,4],[418,4],[438,4]]},"2751":{"position":[[189,4],[217,4]]},"3069":{"position":[[369,4]]},"3432":{"position":[[375,4],[934,4],[989,4]]},"3456":{"position":[[322,4]]},"3522":{"position":[[165,4],[1245,4],[1385,4],[1557,5]]},"3563":{"position":[[279,4],[483,4],[903,4],[1035,4],[1219,5],[1369,5]]},"3744":{"position":[[382,4]]},"3916":{"position":[[7225,4],[7297,4],[7566,4],[7837,4],[7917,5],[8225,5],[8476,4],[8681,4]]},"3918":{"position":[[1705,4],[1849,5],[1999,5],[2023,4],[2163,4],[2335,5]]}}}],["filebase64",{"_index":5385,"t":{"1741":{"position":[[934,10],[1206,10]]}}}],["filecontentresult",{"_index":5398,"t":{"1745":{"position":[[263,17],[295,17]]}}}],["filedownload",{"_index":237,"t":{"15":{"position":[[47,12]]},"17":{"position":[[41,12]]},"1739":{"position":[[49,12],[297,12]]}}}],["filedownloadnam",{"_index":251,"t":{"15":{"position":[[226,16]]},"17":{"position":[[220,16]]},"1739":{"position":[[200,16],[380,16]]}}}],["fileinfo",{"_index":5364,"t":{"1731":{"position":[[29,9],[100,8],[112,9],[128,8]]}}}],["filelength",{"_index":5391,"t":{"1743":{"position":[[121,10],[210,10],[250,10]]}}}],["filemod",{"_index":247,"t":{"15":{"position":[[180,8]]},"17":{"position":[[174,8]]},"1739":{"position":[[154,8]]},"1741":{"position":[[1487,8]]},"3916":{"position":[[7142,8],[7483,8],[7747,8],[8135,8],[8448,8]]}}}],["filenam",{"_index":239,"t":{"15":{"position":[[80,8],[245,8],[381,8]]},"17":{"position":[[74,8],[239,8],[375,8]]},"19":{"position":[[483,8]]},"1499":{"position":[[65,8],[144,8],[214,8],[288,8]]},"1739":{"position":[[219,8],[399,8],[548,8]]},"1741":{"position":[[430,8],[550,8],[615,8],[664,8],[833,8],[1309,8],[1424,8],[1595,8],[2145,8],[2260,8]]},"3432":{"position":[[385,8],[787,8],[1533,8],[1568,8],[1724,8],[1975,8],[2001,8]]},"3563":{"position":[[720,8]]},"3916":{"position":[[7347,8],[7604,8],[7999,8],[8295,8],[8591,8],[8602,8],[8763,8]]}}}],["filenamerul",{"_index":8129,"t":{"3432":{"position":[[1518,12],[1709,12],[1960,12]]}}}],["filepath",{"_index":240,"t":{"15":{"position":[[99,8],[170,8]]},"17":{"position":[[93,8],[164,8]]},"19":{"position":[[391,8],[556,8]]},"1739":{"position":[[73,8],[144,8]]},"1741":{"position":[[630,8],[728,8],[1390,8],[1477,8],[2226,8],[2324,8]]}}}],["fileprovid",{"_index":5358,"t":{"1729":{"position":[[43,12]]},"1731":{"position":[[42,12]]},"1733":{"position":[[28,12]]},"1735":{"position":[[163,12]]},"2090":{"position":[[4,12]]},"2092":{"position":[[4,12]]},"2094":{"position":[[4,12]]}}}],["fileproviderresolv",{"_index":5350,"t":{"1724":{"position":[[285,19],[344,19],[443,19]]}}}],["fileprovidertyp",{"_index":5345,"t":{"1724":{"position":[[18,17],[243,17],[364,17],[463,17]]},"2094":{"position":[[38,17]]}}}],["fileresult",{"_index":9107,"t":{"3914":{"position":[[770,10]]}}}],["fileserveropt",{"_index":5373,"t":{"1735":{"position":[[143,17]]}}}],["filesizelimitbyt",{"_index":8118,"t":{"3432":{"position":[[524,18],[704,18],[865,18]]}}}],["filestream",{"_index":246,"t":{"15":{"position":[[159,10]]},"17":{"position":[[153,10]]},"1739":{"position":[[133,10]]},"1741":{"position":[[1466,10]]},"3522":{"position":[[635,10],[814,10],[839,10]]},"3916":{"position":[[7101,10],[7118,10],[7304,10],[7406,10],[7442,10],[7459,10],[7573,10],[7663,10],[7706,10],[7723,10],[7926,10],[7954,10],[8058,10],[8094,10],[8111,10],[8234,10],[8262,10],[8354,10],[8407,10],[8424,10],[8566,10],[8579,10],[8822,10]]}}}],["filestreamresult",{"_index":245,"t":{"15":{"position":[[138,16]]},"17":{"position":[[132,16]]},"1739":{"position":[[112,16],[325,16]]}}}],["fill",{"_index":8597,"t":{"3712":{"position":[[51,4]]}}}],["filllin",{"_index":5015,"t":{"1555":{"position":[[229,8],[445,8]]}}}],["filter",{"_index":707,"t":{"112":{"position":[[212,7]]},"1424":{"position":[[74,6]]},"1883":{"position":[[161,7]]},"1905":{"position":[[64,6]]},"1907":{"position":[[201,7],[263,6],[290,7],[326,7],[391,7],[526,7]]},"1913":{"position":[[195,7],[230,7],[718,7],[1335,7]]},"1919":{"position":[[31,7],[111,7],[798,7]]},"1925":{"position":[[75,7],[166,7],[1527,7]]},"1927":{"position":[[31,7],[66,7],[844,7]]},"1933":{"position":[[75,7],[136,7],[964,7]]},"1935":{"position":[[31,7],[66,7],[459,7]]},"1941":{"position":[[107,7],[142,7],[1215,7]]},"1943":{"position":[[31,7],[66,7],[409,7]]},"1947":{"position":[[207,7]]},"1951":{"position":[[31,7],[856,7]]},"1953":{"position":[[31,7],[66,7]]},"1965":{"position":[[79,7]]},"3287":{"position":[[1325,7]]},"3708":{"position":[[826,7]]},"3956":{"position":[[463,7]]}}}],["filtercontext",{"_index":7859,"t":{"3287":{"position":[[1947,13],[2256,13],[2574,13],[2887,13],[2910,13]]},"3922":{"position":[[909,13],[989,13],[1068,13],[1155,13],[1234,13],[1257,13]]}}}],["final",{"_index":2094,"t":{"316":{"position":[[387,8]]},"319":{"position":[[281,7]]},"1803":{"position":[[1957,7]]},"1834":{"position":[[31,7]]}}}],["finalsql",{"_index":4102,"t":{"1279":{"position":[[577,8],[753,8]]}}}],["finalthrow",{"_index":6133,"t":{"2315":{"position":[[420,10]]},"3832":{"position":[[2310,10],[2563,10],[4071,10],[4324,10]]}}}],["find",{"_index":2833,"t":{"528":{"position":[[535,4]]},"954":{"position":[[49,4],[147,4],[378,4]]},"1396":{"position":[[220,4]]},"1408":{"position":[[497,4]]},"1410":{"position":[[512,4]]},"1414":{"position":[[433,4]]},"1594":{"position":[[64,4]]},"1596":{"position":[[88,4]]},"1631":{"position":[[167,4]]},"1661":{"position":[[1037,4]]},"2607":{"position":[[217,4],[640,4]]},"2684":{"position":[[60,4]]},"2688":{"position":[[24,4]]},"3023":{"position":[[1034,4]]},"3234":{"position":[[455,4]]},"3702":{"position":[[1193,4]]}}}],["findasync",{"_index":3817,"t":{"954":{"position":[[211,9],[331,9]]}}}],["findfirstvalu",{"_index":746,"t":{"112":{"position":[[1178,14]]},"150":{"position":[[41,14]]},"1925":{"position":[[1040,14]]},"2033":{"position":[[69,14]]}}}],["findordefault",{"_index":3816,"t":{"954":{"position":[[89,13]]},"3964":{"position":[[850,13]]}}}],["findordefaultasync",{"_index":3818,"t":{"954":{"position":[[262,18]]}}}],["firebird",{"_index":641,"t":{"102":{"position":[[157,8]]},"546":{"position":[[132,8]]},"803":{"position":[[65,8]]},"805":{"position":[[65,8]]},"895":{"position":[[65,8]]},"897":{"position":[[415,8],[456,8]]},"899":{"position":[[940,8],[995,8]]},"1105":{"position":[[65,8]]},"1309":{"position":[[579,8],[620,8]]}}}],["firebirdcli",{"_index":2883,"t":{"546":{"position":[[158,14]]}}}],["firebirdsql",{"_index":2882,"t":{"546":{"position":[[141,11]]},"897":{"position":[[424,11]]},"1309":{"position":[[588,11]]}}}],["first",{"_index":2918,"t":{"556":{"position":[[224,5]]},"677":{"position":[[96,5],[185,5],[248,5]]},"704":{"position":[[96,5],[185,5],[244,5]]},"956":{"position":[[186,5],[536,5]]},"1803":{"position":[[1237,5]]},"2929":{"position":[[771,5],[791,5]]},"2945":{"position":[[883,5],[903,5]]},"2951":{"position":[[626,5]]},"2959":{"position":[[826,5],[846,5]]},"3258":{"position":[[96,5]]},"3261":{"position":[[162,5]]},"3702":{"position":[[759,5]]},"3982":{"position":[[751,5]]},"3986":{"position":[[1757,5]]}}}],["firstasync",{"_index":3827,"t":{"956":{"position":[[1015,10],[1420,10]]}}}],["firsterrormessag",{"_index":9287,"t":{"3922":{"position":[[262,17]]}}}],["firsterrorproperti",{"_index":9286,"t":{"3922":{"position":[[241,18]]}}}],["firstinterfac",{"_index":4281,"t":{"1416":{"position":[[217,14]]}}}],["firstnam",{"_index":6800,"t":{"2684":{"position":[[208,9]]},"2690":{"position":[[212,9]]}}}],["firstordefault",{"_index":3625,"t":{"836":{"position":[[147,14]]},"885":{"position":[[164,14]]},"956":{"position":[[249,14],[608,14]]},"1919":{"position":[[486,14]]},"3964":{"position":[[742,14]]},"3974":{"position":[[824,14]]}}}],["firstordefaultasync",{"_index":3828,"t":{"956":{"position":[[1089,19],[1503,19]]}}}],["firststartup",{"_index":1574,"t":{"212":{"position":[[237,12],[697,12]]}}}],["fit",{"_index":8557,"t":{"3702":{"position":[[2658,3]]}}}],["fixedclienttoken",{"_index":2480,"t":{"415":{"position":[[369,16]]},"2991":{"position":[[375,16]]},"3932":{"position":[[384,16]]}}}],["fixtur",{"_index":8017,"t":{"3389":{"position":[[1147,7],[1218,7],[1258,7],[1268,7]]},"3391":{"position":[[495,7],[613,7],[683,7],[693,7]]},"3393":{"position":[[776,7],[951,7],[1061,7],[1071,7]]}}}],["fk",{"_index":3354,"t":{"696":{"position":[[682,2]]}}}],["fk_persondetail_person_personid",{"_index":3353,"t":{"696":{"position":[[682,31]]}}}],["flash",{"_index":3170,"t":{"606":{"position":[[454,5],[460,5]]},"617":{"position":[[1260,5],[1285,5]]}}}],["float",{"_index":5129,"t":{"1611":{"position":[[703,5]]},"1635":{"position":[[337,5],[343,5],[353,5]]}}}],["fluentvalid",{"_index":3022,"t":{"583":{"position":[[105,16]]},"633":{"position":[[51,16]]},"635":{"position":[[19,16]]},"639":{"position":[[450,16],[485,16]]},"3988":{"position":[[466,16]]}}}],["flush",{"_index":8157,"t":{"3434":{"position":[[363,5]]},"3452":{"position":[[736,5]]},"3458":{"position":[[408,5],[799,5]]},"3466":{"position":[[1054,5]]},"3916":{"position":[[3732,5]]}}}],["fmtmsg",{"_index":8114,"t":{"3430":{"position":[[4639,6],[4674,6]]}}}],["fn",{"_index":3608,"t":{"820":{"position":[[16,2]]},"822":{"position":[[195,2]]},"824":{"position":[[225,2]]},"913":{"position":[[57,2]]},"1160":{"position":[[691,2],[1636,2]]},"1162":{"position":[[725,2],[1718,2]]},"1164":{"position":[[359,2],[792,2]]},"1166":{"position":[[446,2],[1002,2]]},"1188":{"position":[[38,2],[88,2],[150,2],[208,2],[299,2],[360,2],[433,2],[502,2]]},"1190":{"position":[[42,2],[95,2],[158,2],[217,2],[314,2],[378,2],[452,2],[522,2]]},"1267":{"position":[[120,2],[184,2]]},"1275":{"position":[[165,2],[229,2]]},"1279":{"position":[[239,2],[295,2]]},"1281":{"position":[[74,2]]}}}],["fn_getid",{"_index":3607,"t":{"820":{"position":[[16,8]]},"822":{"position":[[195,8]]},"824":{"position":[[225,8]]},"913":{"position":[[57,8]]}}}],["fn_getperson",{"_index":4034,"t":{"1160":{"position":[[691,13],[1636,13]]},"1162":{"position":[[725,13],[1718,13]]},"1164":{"position":[[359,12],[792,12]]},"1166":{"position":[[446,12],[1002,12]]}}}],["fn_name",{"_index":4052,"t":{"1188":{"position":[[38,7],[88,7],[150,7],[208,7],[299,7],[360,7],[433,7],[502,7]]},"1190":{"position":[[42,7],[95,7],[158,7],[217,7],[314,7],[378,7],[452,7],[522,7]]},"1267":{"position":[[120,7],[184,7]]},"1275":{"position":[[165,7],[229,7]]},"1279":{"position":[[239,7],[295,7]]},"1281":{"position":[[74,7]]}}}],["fo",{"_index":6537,"t":{"2559":{"position":[[999,2],[1010,2],[1013,2]]}}}],["follow",{"_index":7148,"t":{"2856":{"position":[[1300,9]]}}}],["foo",{"_index":1904,"t":{"270":{"position":[[157,3]]},"272":{"position":[[33,3],[105,3]]},"274":{"position":[[33,3],[205,3]]},"276":{"position":[[33,3],[102,3]]},"278":{"position":[[33,3],[149,3]]},"280":{"position":[[33,3],[164,3],[234,3]]},"282":{"position":[[33,3],[366,3]]},"288":{"position":[[33,3],[174,3]]},"290":{"position":[[33,3]]},"1522":{"position":[[3,3],[17,3]]},"1524":{"position":[[2,3],[18,3],[28,3],[46,3],[56,3],[86,3]]},"1526":{"position":[[5,3],[65,3]]},"1530":{"position":[[3,3],[59,3]]},"1557":{"position":[[968,3]]},"2607":{"position":[[53,3],[486,3]]}}}],["foobar",{"_index":1908,"t":{"270":{"position":[[199,6]]},"272":{"position":[[71,6],[187,6],[235,6]]},"274":{"position":[[71,6]]},"276":{"position":[[71,6],[131,6],[158,6]]},"278":{"position":[[71,6]]},"280":{"position":[[71,6]]},"282":{"position":[[71,6],[395,6]]},"288":{"position":[[71,6],[213,6]]},"290":{"position":[[71,6]]},"3664":{"position":[[320,6]]}}}],["foooo",{"_index":1922,"t":{"280":{"position":[[203,5],[262,5]]}}}],["foot",{"_index":4788,"t":{"1511":{"position":[[2537,4]]}}}],["forbidden",{"_index":8593,"t":{"3708":{"position":[[3076,9]]},"3956":{"position":[[2416,9]]}}}],["forcewithrouteprefix",{"_index":5177,"t":{"1641":{"position":[[493,20]]},"1661":{"position":[[588,20]]},"3023":{"position":[[585,20]]},"3938":{"position":[[265,20]]}}}],["foreach",{"_index":291,"t":{"19":{"position":[[304,7]]},"135":{"position":[[482,7]]},"282":{"position":[[136,7],[260,7]]},"570":{"position":[[1185,7],[1481,7]]},"933":{"position":[[737,7]]},"1731":{"position":[[87,7]]},"1741":{"position":[[1729,7],[2058,7],[2520,7]]},"2607":{"position":[[272,7],[684,7]]},"2937":{"position":[[1208,7]]},"3222":{"position":[[107,7]]},"3432":{"position":[[1781,7]]},"3704":{"position":[[308,7],[630,7]]},"3738":{"position":[[58,7]]},"3740":{"position":[[186,7],[549,7]]},"3914":{"position":[[1461,7],[1481,7]]},"3924":{"position":[[3842,7],[4170,7]]}}}],["foreign",{"_index":3352,"t":{"696":{"position":[[670,7],[772,7]]}}}],["fork",{"_index":6875,"t":{"2749":{"position":[[159,4],[591,4]]},"2751":{"position":[[175,4]]},"3080":{"position":[[727,4],[1159,4]]}}}],["fork_mod",{"_index":6874,"t":{"2749":{"position":[[159,9]]},"3080":{"position":[[727,9]]}}}],["form",{"_index":327,"t":{"19":{"position":[[892,4]]},"1741":{"position":[[48,4]]},"1919":{"position":[[375,4],[550,4]]},"3500":{"position":[[392,4],[552,4],[770,4]]},"3522":{"position":[[129,4],[266,4],[410,4],[603,4],[782,4],[1346,4],[1510,4]]},"3545":{"position":[[243,4],[375,4]]},"3563":{"position":[[126,4],[252,4],[456,4],[842,4],[974,4],[1058,4],[1156,4],[1301,4]]},"3672":{"position":[[37,4],[121,4]]},"3916":{"position":[[7258,4],[7870,4],[8714,4]]},"3918":{"position":[[1644,4],[1786,4],[1931,4],[2124,4],[2288,4]]},"3950":{"position":[[688,4]]},"3966":{"position":[[916,4]]},"3974":{"position":[[418,4]]},"3980":{"position":[[243,4]]},"3984":{"position":[[56,4],[452,4]]}}}],["form1",{"_index":7180,"t":{"2899":{"position":[[273,5]]}}}],["format",{"_index":2745,"t":{"494":{"position":[[12,6],[29,6]]},"1851":{"position":[[193,6],[472,6],[720,6],[992,6]]},"1857":{"position":[[86,6]]},"2751":{"position":[[270,6]]},"3432":{"position":[[1561,6],[1994,6]]},"3984":{"position":[[198,6]]},"4004":{"position":[[91,6]]}}}],["formatasv2",{"_index":7309,"t":{"3063":{"position":[[172,10]]},"3706":{"position":[[164,10]]}}}],["formdata",{"_index":318,"t":{"19":{"position":[[750,8],[765,8],[777,8],[937,8]]}}}],["formfil",{"_index":292,"t":{"19":{"position":[[317,8],[342,8],[474,8],[575,8]]},"1741":{"position":[[2071,8],[2096,8],[2343,8]]}}}],["formvalueproviderfactori",{"_index":5857,"t":{"1919":{"position":[[399,24],[457,24],[508,24],[603,24]]}}}],["fortyp",{"_index":6809,"t":{"2690":{"position":[[150,7]]}}}],["forwardedhead",{"_index":6057,"t":{"2251":{"position":[[251,16],[270,16]]}}}],["forwardedheadersopt",{"_index":6056,"t":{"2251":{"position":[[205,23]]}}}],["found",{"_index":8453,"t":{"3624":{"position":[[140,5]]},"3844":{"position":[[534,5]]},"3846":{"position":[[773,5]]},"3942":{"position":[[418,5]]}}}],["foundat",{"_index":7532,"t":{"3148":{"position":[[196,10]]}}}],["fr",{"_index":6547,"t":{"2559":{"position":[[1074,2],[1080,2],[1094,2],[1108,2],[1111,2],[1121,2],[1135,2],[1149,2]]}}}],["framework",{"_index":1362,"t":{"190":{"position":[[199,9],[254,9]]},"524":{"position":[[50,9]]},"713":{"position":[[413,9]]},"724":{"position":[[27,9]]},"734":{"position":[[427,9]]},"1566":{"position":[[389,9]]},"2569":{"position":[[72,9]]},"2836":{"position":[[803,9]]},"3702":{"position":[[243,9]]},"3832":{"position":[[2404,9],[2657,9],[3056,9],[4165,9],[4418,9],[4817,9]]}}}],["frameworkrefer",{"_index":9528,"t":{"3934":{"position":[[3088,18]]}}}],["free",{"_index":4728,"t":{"1511":{"position":[[1844,4]]}}}],["freesql",{"_index":6923,"t":{"2768":{"position":[[270,7],[368,7]]}}}],["fri",{"_index":6307,"t":{"2420":{"position":[[229,3],[1222,3],[1694,3]]}}}],["friendlyexcept",{"_index":144,"t":{"11":{"position":[[332,17]]},"1845":{"position":[[56,17],[315,17]]},"1851":{"position":[[31,17]]},"1855":{"position":[[120,17]]},"1859":{"position":[[48,17]]},"1865":{"position":[[13,17]]},"1867":{"position":[[96,17]]},"1869":{"position":[[391,17]]},"1873":{"position":[[152,17]]},"1875":{"position":[[48,17]]},"1883":{"position":[[111,17]]},"1887":{"position":[[128,17]]},"2294":{"position":[[332,17]]},"2536":{"position":[[13,17]]},"3832":{"position":[[2213,17],[2421,17],[2466,17],[2674,17],[3974,17],[4182,17],[4227,17],[4435,17]]},"3930":{"position":[[624,17]]},"3934":{"position":[[1377,17]]}}}],["friendlyexceptionfilt",{"_index":9480,"t":{"3932":{"position":[[749,23]]}}}],["friendlyexceptionset",{"_index":5760,"t":{"1885":{"position":[[257,25]]},"3009":{"position":[[0,25]]},"3011":{"position":[[3,25]]},"3932":{"position":[[459,25]]}}}],["fromassemblyof",{"_index":4332,"t":{"1440":{"position":[[78,14],[203,14]]}}}],["frombase64str",{"_index":5387,"t":{"1741":{"position":[[1189,16]]}}}],["frombodi",{"_index":5115,"t":{"1609":{"position":[[47,8]]},"1615":{"position":[[322,8]]},"1629":{"position":[[78,8]]},"1741":{"position":[[917,8]]},"1749":{"position":[[106,8]]}}}],["fromcach",{"_index":8621,"t":{"3740":{"position":[[24,10]]}}}],["fromexpress",{"_index":3618,"t":{"832":{"position":[[302,14]]}}}],["fromform",{"_index":5158,"t":{"1629":{"position":[[111,8]]},"3672":{"position":[[179,8],[305,8]]},"3686":{"position":[[987,8]]}}}],["fromhead",{"_index":5160,"t":{"1629":{"position":[[132,10]]}}}],["fromjobbuild",{"_index":8802,"t":{"3779":{"position":[[1421,14]]}}}],["fromminut",{"_index":5210,"t":{"1667":{"position":[[298,11],[362,11],[526,11],[585,11]]},"3577":{"position":[[126,11],[217,11]]},"3579":{"position":[[383,11],[486,11]]},"3914":{"position":[[2261,11],[2352,11]]}}}],["fromqueri",{"_index":5118,"t":{"1609":{"position":[[331,9],[555,9]]},"1627":{"position":[[47,9]]},"1629":{"position":[[51,9]]},"1633":{"position":[[257,9],[302,9]]},"1661":{"position":[[523,9]]},"3023":{"position":[[520,9]]},"3992":{"position":[[904,9]]}}}],["fromquri",{"_index":10031,"t":{"3982":{"position":[[99,8]]}}}],["fromresult",{"_index":973,"t":{"127":{"position":[[748,10]]},"133":{"position":[[680,10],[726,10]]},"146":{"position":[[991,10],[1037,10]]}}}],["fromrout",{"_index":5132,"t":{"1611":{"position":[[887,9]]},"1627":{"position":[[21,9]]},"1629":{"position":[[29,9]]},"1633":{"position":[[24,9]]},"1661":{"position":[[546,9]]},"3023":{"position":[[543,9]]},"3964":{"position":[[161,9]]}}}],["fromschedulerbuild",{"_index":8927,"t":{"3817":{"position":[[2653,20]]}}}],["fromsecond",{"_index":1685,"t":{"233":{"position":[[115,11],[558,11],[624,11]]},"235":{"position":[[153,11]]},"253":{"position":[[769,11]]},"1803":{"position":[[1527,11]]},"2848":{"position":[[235,11]]}}}],["fromservic",{"_index":2531,"t":{"435":{"position":[[658,12],[1016,12],[1049,12]]},"1024":{"position":[[43,12]]},"1229":{"position":[[43,12]]},"1396":{"position":[[155,12]]},"3834":{"position":[[295,12]]},"3910":{"position":[[2477,12]]},"3912":{"position":[[2316,12]]}}}],["fromsqlinterpol",{"_index":10477,"t":{"4006":{"position":[[688,19]]}}}],["fromsqlraw",{"_index":10476,"t":{"4006":{"position":[[675,10]]}}}],["fromtriggerbuild",{"_index":8865,"t":{"3802":{"position":[[2051,18]]}}}],["fromxxx",{"_index":5157,"t":{"1627":{"position":[[394,7]]}}}],["fruion",{"_index":5525,"t":{"1799":{"position":[[0,6]]}}}],["fs",{"_index":5352,"t":{"1726":{"position":[[14,2],[67,2],[148,2]]},"1741":{"position":[[1457,2],[1513,2]]},"2090":{"position":[[19,2]]},"2092":{"position":[[19,2]]},"2094":{"position":[[19,2]]},"2098":{"position":[[47,2]]},"2100":{"position":[[91,2]]},"3918":{"position":[[1390,2],[1426,2]]},"3936":{"position":[[357,2]]},"3940":{"position":[[819,2]]},"3968":{"position":[[388,2]]}}}],["fsapi",{"_index":7910,"t":{"3319":{"position":[[153,5]]},"3323":{"position":[[228,5],[266,5],[304,5]]}}}],["fsapp",{"_index":7911,"t":{"3319":{"position":[[201,5]]}}}],["fsblazor",{"_index":7914,"t":{"3319":{"position":[[388,8]]}}}],["fsblazorapi",{"_index":7915,"t":{"3319":{"position":[[452,11]]}}}],["fsmvc",{"_index":7909,"t":{"3319":{"position":[[108,5]]}}}],["fsrazor",{"_index":7912,"t":{"3319":{"position":[[255,7]]}}}],["fsrazorapi",{"_index":7913,"t":{"3319":{"position":[[321,10]]}}}],["fu",{"_index":505,"t":{"85":{"position":[[222,2]]}}}],["fujin",{"_index":4866,"t":{"1511":{"position":[[3658,5]]}}}],["full",{"_index":7315,"t":{"3063":{"position":[[340,4]]},"3646":{"position":[[93,4],[153,4]]},"3706":{"position":[[332,4]]}}}],["fullmod",{"_index":5556,"t":{"1801":{"position":[[1187,8]]},"1803":{"position":[[3381,8]]}}}],["fullnam",{"_index":6799,"t":{"2684":{"position":[[190,8]]},"2688":{"position":[[113,8]]},"2690":{"position":[[191,8]]},"3448":{"position":[[913,8]]},"3668":{"position":[[163,8]]},"3777":{"position":[[138,8]]},"3779":{"position":[[362,8]]},"3798":{"position":[[145,8]]},"3802":{"position":[[398,8]]},"3914":{"position":[[3296,8]]}}}],["func",{"_index":1710,"t":{"235":{"position":[[6,4]]},"734":{"position":[[6350,4]]},"810":{"position":[[67,4],[216,4],[303,4],[353,4]]},"812":{"position":[[75,4],[232,4],[327,4],[377,4]]},"814":{"position":[[66,4],[214,4],[300,4],[350,4]]},"816":{"position":[[74,4],[230,4],[324,4],[374,4]]},"949":{"position":[[299,4]]},"1412":{"position":[[77,4],[814,4],[1756,4],[2162,4]]},"1566":{"position":[[722,4]]},"1724":{"position":[[13,4],[238,4]]},"1809":{"position":[[242,4]]},"1821":{"position":[[356,4]]},"3543":{"position":[[649,4]]},"3832":{"position":[[2249,4],[2345,4],[2502,4],[2598,4],[4010,4],[4106,4],[4263,4],[4359,4]]},"3930":{"position":[[666,4],[701,4]]}}}],["func_gett",{"_index":3604,"t":{"814":{"position":[[66,13],[214,13],[300,13],[350,13]]},"816":{"position":[[74,13],[230,13],[324,13],[374,13]]}}}],["func_getvalu",{"_index":3596,"t":{"810":{"position":[[67,13],[216,13],[303,13],[353,13]]},"812":{"position":[[75,13],[232,13],[327,13],[377,13]]}}}],["funcnam",{"_index":3884,"t":{"1037":{"position":[[653,8],[764,8]]}}}],["function",{"_index":1139,"t":{"152":{"position":[[167,8],[454,8]]},"419":{"position":[[187,8]]},"820":{"position":[[7,8]]},"828":{"position":[[7,8]]},"836":{"position":[[50,9],[92,9],[176,9],[340,9]]},"1803":{"position":[[1274,8]]},"3194":{"position":[[804,8]]}}}],["fundament",{"_index":2612,"t":{"461":{"position":[[133,12]]},"2557":{"position":[[81,12]]},"2573":{"position":[[250,12]]}}}],["fur",{"_index":1928,"t":{"284":{"position":[[64,3]]},"397":{"position":[[17,3],[55,3],[87,3],[134,3],[180,3],[221,3]]},"615":{"position":[[572,3]]},"675":{"position":[[108,3]]},"702":{"position":[[5,3]]},"1511":{"position":[[1647,3]]},"3383":{"position":[[357,3]]},"3387":{"position":[[213,3]]},"3920":{"position":[[497,3]]},"3926":{"position":[[36,3]]},"4000":{"position":[[514,3]]},"4002":{"position":[[17,3],[47,3],[81,3],[116,3],[148,3]]},"4006":{"position":[[640,3]]}}}],["fur2",{"_index":7276,"t":{"2945":{"position":[[836,4]]}}}],["furentityframeworkcorestartup",{"_index":2779,"t":{"514":{"position":[[199,29]]},"524":{"position":[[88,29],[278,29]]},"1058":{"position":[[145,29]]},"1317":{"position":[[199,29]]},"2927":{"position":[[157,29]]},"2943":{"position":[[157,29]]},"2957":{"position":[[157,29]]}}}],["furion",{"_index":0,"t":{"3":{"position":[[0,6],[91,6],[105,6],[139,6],[833,6]]},"11":{"position":[[49,6],[79,6],[100,6],[138,6],[174,6],[210,6],[251,6],[293,6],[325,6],[890,6],[921,6]]},"28":{"position":[[2,6]]},"32":{"position":[[0,6]]},"44":{"position":[[43,6],[68,6],[91,6]]},"48":{"position":[[125,6],[139,6]]},"53":{"position":[[0,6],[104,6]]},"57":{"position":[[43,6],[68,6],[104,6]]},"64":{"position":[[0,6],[130,6]]},"68":{"position":[[43,6],[68,6],[91,6]]},"72":{"position":[[125,6],[139,6]]},"77":{"position":[[0,6],[104,6]]},"85":{"position":[[214,6],[244,6],[278,6]]},"87":{"position":[[13,6],[45,6]]},"89":{"position":[[36,6],[78,6],[122,6]]},"91":{"position":[[13,6],[20,6],[31,6],[43,6],[66,6],[105,6],[120,6],[163,6],[187,6],[222,6],[241,6],[281,6],[301,6],[339,6],[357,6],[396,6],[415,6],[445,6],[464,6],[477,6],[498,6],[516,6],[553,6],[578,6]]},"93":{"position":[[0,6],[31,6],[58,6],[88,6],[122,6],[158,6],[211,6],[244,6],[294,6],[327,6],[363,6],[402,6],[445,6],[490,6],[552,6],[594,6]]},"98":{"position":[[0,6],[40,6],[116,6]]},"104":{"position":[[0,6]]},"106":{"position":[[0,6],[65,6]]},"108":{"position":[[4,6]]},"112":{"position":[[305,6]]},"114":{"position":[[4,6],[109,6],[158,6],[1121,6],[1247,6]]},"116":{"position":[[8,6]]},"127":{"position":[[3,6],[381,6],[1321,6],[1422,6]]},"131":{"position":[[0,6]]},"133":{"position":[[0,6],[89,6],[117,6],[260,6]]},"135":{"position":[[79,6],[107,6],[235,6]]},"146":{"position":[[6,6],[34,6],[53,6],[239,6]]},"148":{"position":[[121,6],[192,6],[384,6]]},"154":{"position":[[8,6]]},"194":{"position":[[8,6]]},"199":{"position":[[11,6],[51,6],[90,6],[163,6],[235,6],[278,6],[328,6],[369,6],[429,6],[450,6],[486,6],[524,6],[560,6],[597,6],[630,6],[663,6]]},"202":{"position":[[67,6],[177,6]]},"204":{"position":[[97,6],[255,6]]},"206":{"position":[[2,6],[234,6]]},"210":{"position":[[291,6]]},"212":{"position":[[177,6],[466,6]]},"216":{"position":[[13,6],[107,6],[265,6],[468,6],[500,6],[693,6]]},"220":{"position":[[123,6],[189,6],[221,6],[283,6],[401,6],[507,6]]},"222":{"position":[[8,6]]},"229":{"position":[[62,6]]},"231":{"position":[[16,6],[112,6]]},"245":{"position":[[226,6]]},"249":{"position":[[299,6]]},"257":{"position":[[8,6]]},"259":{"position":[[12,6]]},"261":{"position":[[6,6]]},"276":{"position":[[109,6]]},"284":{"position":[[54,6]]},"296":{"position":[[8,6]]},"302":{"position":[[0,6]]},"306":{"position":[[114,6]]},"308":{"position":[[288,6]]},"310":{"position":[[140,6]]},"314":{"position":[[18,6],[758,6]]},"316":{"position":[[18,6],[697,6]]},"327":{"position":[[12,6],[142,6]]},"329":{"position":[[36,6],[50,6]]},"331":{"position":[[99,6],[168,6]]},"333":{"position":[[8,6]]},"336":{"position":[[240,6]]},"338":{"position":[[199,6]]},"340":{"position":[[2,6],[1946,6]]},"342":{"position":[[2,6]]},"350":{"position":[[0,6]]},"357":{"position":[[39,6]]},"361":{"position":[[0,6]]},"375":{"position":[[8,6]]},"378":{"position":[[5,6],[32,6]]},"386":{"position":[[56,6]]},"397":{"position":[[229,6],[254,6],[299,6]]},"399":{"position":[[17,6],[64,6],[113,6],[165,6],[214,6],[264,6],[316,6],[365,6],[417,6],[466,6],[514,6],[556,6],[624,6],[670,6],[710,6],[757,6],[806,6],[837,6],[889,6]]},"401":{"position":[[17,6],[66,6],[118,6],[157,6],[223,6],[275,6],[322,6],[353,6],[403,6]]},"406":{"position":[[38,6],[61,6],[112,6],[136,6],[189,6],[259,6],[283,6],[325,6],[353,6]]},"411":{"position":[[202,6]]},"413":{"position":[[10,6],[204,6]]},"423":{"position":[[224,6]]},"425":{"position":[[8,6]]},"433":{"position":[[24,6]]},"435":{"position":[[2,6],[152,6],[520,6]]},"439":{"position":[[15,6],[142,6]]},"441":{"position":[[123,6],[345,6]]},"445":{"position":[[9,6],[136,6],[171,6],[738,6],[1002,6]]},"455":{"position":[[877,6]]},"461":{"position":[[247,6]]},"463":{"position":[[0,6]]},"465":{"position":[[8,6]]},"467":{"position":[[7,6],[65,6]]},"492":{"position":[[6,6]]},"496":{"position":[[8,6]]},"500":{"position":[[46,6]]},"502":{"position":[[77,6]]},"504":{"position":[[298,6]]},"506":{"position":[[2,6]]},"508":{"position":[[6,6],[78,6]]},"510":{"position":[[6,6],[78,6],[455,6]]},"512":{"position":[[0,6]]},"514":{"position":[[0,6],[45,6],[131,6]]},"516":{"position":[[6,6],[78,6],[412,6]]},"518":{"position":[[6,6],[78,6]]},"520":{"position":[[21,6],[68,6],[190,6]]},"522":{"position":[[7,6],[29,6]]},"524":{"position":[[43,6],[60,6],[127,6],[210,6]]},"526":{"position":[[2,6],[215,6]]},"528":{"position":[[2,6],[24,6],[63,6],[84,6],[111,6],[138,6],[177,6]]},"534":{"position":[[193,6],[265,6]]},"536":{"position":[[8,6]]},"538":{"position":[[7,6],[49,6],[64,6]]},"542":{"position":[[2,6],[29,6]]},"544":{"position":[[108,6],[197,6]]},"546":{"position":[[183,6],[201,6],[243,6]]},"552":{"position":[[0,6]]},"562":{"position":[[8,6]]},"567":{"position":[[0,6]]},"570":{"position":[[56,6],[283,6]]},"572":{"position":[[211,6]]},"576":{"position":[[8,6]]},"583":{"position":[[58,6]]},"587":{"position":[[2197,6]]},"589":{"position":[[17,6]]},"595":{"position":[[0,6],[95,6]]},"597":{"position":[[80,6],[323,6],[362,6]]},"599":{"position":[[89,6],[516,6],[568,6]]},"602":{"position":[[6,6],[35,6],[74,6]]},"604":{"position":[[0,6]]},"606":{"position":[[0,6],[882,6],[905,6]]},"608":{"position":[[0,6],[76,6],[109,6]]},"612":{"position":[[0,6]]},"615":{"position":[[3,6],[20,6],[165,6],[236,6],[489,6],[551,6]]},"617":{"position":[[0,6],[1479,6],[1512,6],[1767,6],[1839,6],[1908,6],[1955,6],[2176,6],[2271,6],[2535,6]]},"619":{"position":[[0,6]]},"625":{"position":[[106,6],[135,6],[206,6]]},"627":{"position":[[86,6]]},"633":{"position":[[0,6]]},"639":{"position":[[426,6]]},"641":{"position":[[8,6]]},"643":{"position":[[0,6]]},"653":{"position":[[222,6],[294,6]]},"655":{"position":[[551,6]]},"657":{"position":[[8,6]]},"659":{"position":[[13,6]]},"673":{"position":[[8,6]]},"675":{"position":[[67,6]]},"677":{"position":[[0,6]]},"679":{"position":[[12,6],[62,6]]},"681":{"position":[[10,6]]},"683":{"position":[[19,6]]},"685":{"position":[[438,6],[488,6]]},"688":{"position":[[31,6],[402,6],[508,6]]},"694":{"position":[[39,6]]},"696":{"position":[[396,6],[426,6],[452,6],[502,6],[531,6],[569,6],[595,6],[898,6],[924,6],[959,6],[1003,6],[1131,6],[1241,6],[1397,6],[2124,6],[2176,6],[2312,6],[2422,6],[2578,6],[3062,6],[3106,6],[3234,6],[3344,6],[3500,6],[3738,6],[3785,6],[3916,6],[4026,6],[4182,6],[4679,6]]},"698":{"position":[[0,6],[350,6],[857,6],[897,6],[1037,6]]},"700":{"position":[[8,6]]},"704":{"position":[[0,6]]},"706":{"position":[[5,6],[26,6],[81,6]]},"708":{"position":[[6,6],[134,6]]},"711":{"position":[[19,6]]},"713":{"position":[[631,6],[711,6]]},"724":{"position":[[43,6],[76,6]]},"726":{"position":[[39,6],[90,6]]},"728":{"position":[[0,6]]},"734":{"position":[[639,6],[8244,6]]},"736":{"position":[[8,6]]},"739":{"position":[[5,6]]},"743":{"position":[[2,6]]},"745":{"position":[[6,6],[78,6]]},"747":{"position":[[6,6],[169,6]]},"751":{"position":[[6,6]]},"753":{"position":[[8,6]]},"756":{"position":[[0,6],[81,6]]},"775":{"position":[[8,6]]},"777":{"position":[[26,6]]},"791":{"position":[[13,6],[35,6]]},"797":{"position":[[8,6]]},"810":{"position":[[394,6]]},"812":{"position":[[426,6]]},"814":{"position":[[390,6]]},"816":{"position":[[422,6]]},"818":{"position":[[0,6]]},"822":{"position":[[45,6],[94,6]]},"830":{"position":[[10,6]]},"832":{"position":[[26,6],[117,6]]},"834":{"position":[[118,6],[243,6]]},"838":{"position":[[8,6]]},"841":{"position":[[85,6]]},"844":{"position":[[78,6],[219,6]]},"846":{"position":[[168,6],[340,6]]},"848":{"position":[[8,6]]},"851":{"position":[[40,6],[168,6],[786,6],[821,6],[1175,6],[1224,6],[1650,6],[1733,6]]},"877":{"position":[[19,6],[194,6],[1965,6]]},"879":{"position":[[0,6],[40,6]]},"881":{"position":[[240,6]]},"885":{"position":[[13,6],[35,6],[195,6]]},"887":{"position":[[63,6]]},"889":{"position":[[6,6],[181,6]]},"891":{"position":[[8,6]]},"897":{"position":[[517,6],[556,6]]},"901":{"position":[[21,6],[68,6],[190,6]]},"903":{"position":[[0,6],[68,6]]},"917":{"position":[[42,6]]},"921":{"position":[[8,6]]},"924":{"position":[[0,6],[62,6]]},"927":{"position":[[139,6]]},"929":{"position":[[139,6]]},"931":{"position":[[113,6]]},"933":{"position":[[0,6]]},"937":{"position":[[8,6]]},"941":{"position":[[167,6]]},"945":{"position":[[144,6],[179,6]]},"947":{"position":[[2,6],[119,6],[191,6],[613,6],[685,6]]},"951":{"position":[[8,6]]},"956":{"position":[[72,6],[145,6],[208,6],[280,6],[342,6],[413,6],[486,6],[558,6],[639,6],[710,6],[791,6],[884,6],[968,6],[1042,6],[1125,6],[1198,6],[1280,6],[1364,6],[1447,6],[1539,6],[1621,6],[1713,6]]},"960":{"position":[[126,6],[181,6],[263,6],[345,6],[402,6],[505,6],[708,6],[803,6],[942,6],[1021,6],[1145,6],[1283,6],[1362,6],[1454,6],[1778,6]]},"979":{"position":[[48,6],[110,6],[172,6]]},"983":{"position":[[8,6]]},"988":{"position":[[0,6]]},"1010":{"position":[[12,6]]},"1020":{"position":[[0,6]]},"1026":{"position":[[166,6]]},"1035":{"position":[[0,6]]},"1043":{"position":[[8,6]]},"1052":{"position":[[0,6]]},"1054":{"position":[[6,6],[78,6],[432,6]]},"1056":{"position":[[6,6],[25,6],[97,6],[477,6],[512,6]]},"1058":{"position":[[6,6],[77,6]]},"1060":{"position":[[39,6],[171,6]]},"1064":{"position":[[6,6],[25,6],[56,6],[129,6]]},"1066":{"position":[[2,6],[180,6],[252,6],[608,6],[627,6],[658,6],[731,6]]},"1099":{"position":[[8,6]]},"1107":{"position":[[0,6]]},"1109":{"position":[[54,6],[85,6],[124,6],[327,6],[346,6],[415,6],[577,6],[608,6],[647,6]]},"1111":{"position":[[426,6]]},"1113":{"position":[[424,6]]},"1115":{"position":[[433,6]]},"1117":{"position":[[0,6],[4671,6]]},"1119":{"position":[[395,6]]},"1121":{"position":[[427,6]]},"1123":{"position":[[358,6]]},"1125":{"position":[[201,6]]},"1127":{"position":[[6,6],[60,6]]},"1129":{"position":[[1749,6]]},"1137":{"position":[[8,6]]},"1141":{"position":[[2,6]]},"1143":{"position":[[0,6]]},"1145":{"position":[[6,6],[89,6]]},"1147":{"position":[[6,6],[75,6]]},"1151":{"position":[[0,6],[37,6],[106,6]]},"1153":{"position":[[8,6]]},"1157":{"position":[[0,6]]},"1160":{"position":[[300,6],[432,6],[566,6],[1206,6],[1349,6],[1494,6]]},"1162":{"position":[[318,6],[456,6],[596,6],[1272,6],[1421,6],[1572,6]]},"1164":{"position":[[242,6],[336,6],[669,6],[769,6]]},"1166":{"position":[[298,6],[423,6],[848,6],[979,6]]},"1185":{"position":[[127,6],[283,6],[337,6]]},"1202":{"position":[[0,6]]},"1212":{"position":[[2,6]]},"1218":{"position":[[8,6]]},"1221":{"position":[[8,6],[77,6]]},"1223":{"position":[[22,6],[123,6],[158,6]]},"1234":{"position":[[6,6],[41,6]]},"1236":{"position":[[6,6],[41,6]]},"1238":{"position":[[6,6],[41,6]]},"1240":{"position":[[6,6],[41,6]]},"1242":{"position":[[6,6],[41,6]]},"1244":{"position":[[6,6],[41,6]]},"1246":{"position":[[12,6]]},"1248":{"position":[[12,6]]},"1251":{"position":[[6,6],[41,6]]},"1253":{"position":[[6,6],[41,6]]},"1255":{"position":[[6,6],[41,6]]},"1257":{"position":[[6,6],[41,6]]},"1259":{"position":[[6,6],[41,6]]},"1261":{"position":[[6,6],[41,6]]},"1263":{"position":[[6,6],[41,6]]},"1265":{"position":[[12,6]]},"1267":{"position":[[6,6],[41,6]]},"1277":{"position":[[15,6]]},"1279":{"position":[[2,6]]},"1283":{"position":[[8,6]]},"1286":{"position":[[56,6]]},"1302":{"position":[[13,6]]},"1304":{"position":[[8,6]]},"1309":{"position":[[56,6],[681,6],[720,6]]},"1311":{"position":[[6,6],[78,6]]},"1313":{"position":[[0,6],[115,6],[212,6],[389,6],[709,6],[781,6]]},"1315":{"position":[[21,6],[68,6],[190,6]]},"1317":{"position":[[0,6],[45,6],[131,6]]},"1319":{"position":[[5,6],[26,6],[81,6]]},"1321":{"position":[[8,6]]},"1323":{"position":[[26,6]]},"1353":{"position":[[189,6],[261,6]]},"1355":{"position":[[8,6]]},"1360":{"position":[[2,6]]},"1364":{"position":[[6,6],[41,6]]},"1368":{"position":[[44,6],[63,6],[94,6],[197,6]]},"1370":{"position":[[8,6]]},"1377":{"position":[[190,6],[611,6],[633,6],[751,6]]},"1379":{"position":[[622,6]]},"1381":{"position":[[8,6]]},"1394":{"position":[[7,6]]},"1405":{"position":[[0,6]]},"1408":{"position":[[56,6],[75,6],[106,6],[144,6],[549,6],[611,6],[1011,6]]},"1410":{"position":[[62,6],[81,6],[112,6],[150,6],[564,6],[626,6]]},"1412":{"position":[[359,6],[397,6],[761,6],[856,6],[895,6],[1797,6],[1823,6],[1907,6],[2570,6],[2608,6]]},"1414":{"position":[[76,6],[95,6],[126,6],[164,6],[484,6],[510,6],[565,6]]},"1416":{"position":[[0,6]]},"1418":{"position":[[6,6],[220,6]]},"1420":{"position":[[124,6],[143,6],[189,6],[208,6],[370,6],[389,6],[585,6],[604,6]]},"1422":{"position":[[0,6]]},"1424":{"position":[[144,6],[490,6],[567,6]]},"1426":{"position":[[0,6],[76,6],[119,6]]},"1428":{"position":[[0,6]]},"1438":{"position":[[14,6]]},"1440":{"position":[[0,6]]},"1442":{"position":[[8,6]]},"1476":{"position":[[8,6]]},"1501":{"position":[[8,6]]},"1507":{"position":[[6,6]]},"1509":{"position":[[3,6],[46,6],[110,6],[188,6]]},"1511":{"position":[[18,6],[106,6],[575,6],[915,6],[1076,6],[1691,6],[1927,6],[2307,6],[2499,6],[3352,6],[3381,6],[3708,6]]},"1513":{"position":[[9,6],[51,6]]},"1520":{"position":[[93,6]]},"1537":{"position":[[12,6],[27,6]]},"1539":{"position":[[201,6],[272,6],[1608,6]]},"1541":{"position":[[336,6],[452,6]]},"1543":{"position":[[224,6]]},"1549":{"position":[[357,6]]},"1551":{"position":[[639,6],[758,6],[958,6],[1045,6]]},"1553":{"position":[[11,6]]},"1563":{"position":[[8,6]]},"1566":{"position":[[2,6]]},"1568":{"position":[[8,6]]},"1572":{"position":[[187,6],[354,6],[523,6]]},"1580":{"position":[[45,6]]},"1582":{"position":[[74,6],[169,6]]},"1584":{"position":[[131,6],[170,6],[292,6],[341,6],[380,6],[501,6]]},"1587":{"position":[[0,6],[158,6]]},"1589":{"position":[[0,6]]},"1592":{"position":[[117,6],[187,6],[222,6]]},"1603":{"position":[[6,6],[45,6]]},"1605":{"position":[[6,6],[45,6]]},"1607":{"position":[[6,6],[45,6]]},"1609":{"position":[[69,6],[108,6],[309,6],[383,6],[454,6],[607,6]]},"1611":{"position":[[0,6],[193,6],[246,6]]},"1613":{"position":[[6,6],[77,6]]},"1615":{"position":[[6,6],[77,6]]},"1617":{"position":[[58,6],[129,6],[311,6],[382,6],[553,6],[624,6],[830,6],[901,6]]},"1619":{"position":[[0,6],[47,6],[118,6]]},"1621":{"position":[[19,6],[58,6],[173,6],[282,6],[393,6],[421,6],[460,6],[573,6],[622,6],[673,6],[748,6],[897,6]]},"1627":{"position":[[222,6]]},"1629":{"position":[[0,6]]},"1631":{"position":[[2,6]]},"1633":{"position":[[2,6]]},"1635":{"position":[[2,6]]},"1639":{"position":[[25,6]]},"1643":{"position":[[46,6],[85,6],[280,6]]},"1645":{"position":[[38,6],[77,6],[274,6]]},"1647":{"position":[[79,6],[118,6],[341,6]]},"1649":{"position":[[39,6],[78,6],[240,6]]},"1651":{"position":[[49,6],[88,6],[208,6],[292,6]]},"1653":{"position":[[40,6],[79,6],[285,6]]},"1655":{"position":[[55,6],[94,6],[328,6]]},"1657":{"position":[[172,6],[211,6],[370,6]]},"1659":{"position":[[66,6],[105,6],[218,6],[359,6],[425,6],[464,6],[615,6],[794,6],[860,6],[899,6],[1053,6],[1235,6]]},"1661":{"position":[[0,6]]},"1663":{"position":[[6,6],[84,6],[312,6],[425,6]]},"1669":{"position":[[8,6]]},"1674":{"position":[[42,6]]},"1677":{"position":[[234,6]]},"1679":{"position":[[61,6],[121,6]]},"1683":{"position":[[312,6],[328,6],[341,6]]},"1685":{"position":[[0,6]]},"1687":{"position":[[293,6]]},"1689":{"position":[[0,6],[55,6],[108,6],[141,6],[191,6],[350,6],[504,6],[544,6],[580,6],[745,6]]},"1691":{"position":[[0,6]]},"1693":{"position":[[8,6]]},"1695":{"position":[[14,6]]},"1699":{"position":[[2,6]]},"1707":{"position":[[79,6]]},"1711":{"position":[[2,6]]},"1713":{"position":[[8,6]]},"1715":{"position":[[12,6]]},"1719":{"position":[[0,6]]},"1724":{"position":[[0,6]]},"1726":{"position":[[0,6]]},"1743":{"position":[[300,6]]},"1757":{"position":[[8,6]]},"1763":{"position":[[0,6],[230,6],[252,6]]},"1765":{"position":[[7,6],[91,6]]},"1767":{"position":[[6,6],[41,6]]},"1769":{"position":[[6,6],[41,6]]},"1771":{"position":[[6,6],[41,6]]},"1773":{"position":[[6,6],[41,6],[275,6]]},"1775":{"position":[[65,6]]},"1777":{"position":[[62,6]]},"1779":{"position":[[6,6],[147,6]]},"1781":{"position":[[6,6],[147,6]]},"1783":{"position":[[0,6]]},"1789":{"position":[[8,6]]},"1791":{"position":[[15,6],[77,6]]},"1795":{"position":[[1290,6],[1707,6],[2664,6],[2799,6]]},"1797":{"position":[[0,6]]},"1799":{"position":[[949,6]]},"1801":{"position":[[12,6],[195,6],[419,6]]},"1803":{"position":[[130,6],[2394,6],[2477,6]]},"1805":{"position":[[0,6]]},"1807":{"position":[[0,6]]},"1809":{"position":[[0,6]]},"1811":{"position":[[2,6]]},"1815":{"position":[[12,6],[40,6]]},"1817":{"position":[[12,6],[35,6]]},"1819":{"position":[[12,6]]},"1829":{"position":[[8,6]]},"1841":{"position":[[0,6]]},"1843":{"position":[[0,6],[95,6]]},"1845":{"position":[[14,6],[49,6],[85,6],[273,6],[308,6],[358,6]]},"1851":{"position":[[24,6]]},"1853":{"position":[[2,6]]},"1855":{"position":[[113,6],[149,6],[435,6]]},"1857":{"position":[[0,6]]},"1859":{"position":[[6,6],[41,6],[77,6]]},"1865":{"position":[[6,6],[42,6]]},"1867":{"position":[[2,6],[89,6],[139,6],[343,6],[438,6]]},"1869":{"position":[[0,6],[62,6],[349,6],[384,6],[420,6]]},"1871":{"position":[[0,6]]},"1873":{"position":[[110,6],[145,6],[181,6]]},"1875":{"position":[[6,6],[41,6],[77,6]]},"1883":{"position":[[70,6],[104,6],[210,6]]},"1887":{"position":[[12,6],[33,6],[121,6]]},"1889":{"position":[[8,6]]},"1907":{"position":[[572,6]]},"1913":{"position":[[1383,6]]},"1919":{"position":[[841,6]]},"1925":{"position":[[1568,6]]},"1927":{"position":[[888,6]]},"1933":{"position":[[1008,6]]},"1935":{"position":[[506,6]]},"1941":{"position":[[768,6],[1256,6]]},"1943":{"position":[[453,6]]},"1967":{"position":[[8,6]]},"1969":{"position":[[96,6]]},"1971":{"position":[[8,6]]},"1973":{"position":[[58,6]]},"1983":{"position":[[8,6]]},"1985":{"position":[[8,6]]},"1987":{"position":[[58,6]]},"2006":{"position":[[8,6]]},"2008":{"position":[[8,6]]},"2010":{"position":[[66,6]]},"2063":{"position":[[12,6]]},"2065":{"position":[[12,6]]},"2067":{"position":[[12,6]]},"2077":{"position":[[11,6]]},"2098":{"position":[[12,6]]},"2169":{"position":[[12,6]]},"2173":{"position":[[12,6]]},"2175":{"position":[[250,6]]},"2186":{"position":[[7,6]]},"2188":{"position":[[7,6]]},"2233":{"position":[[15,6]]},"2237":{"position":[[2,6]]},"2241":{"position":[[0,6]]},"2245":{"position":[[35,6]]},"2255":{"position":[[12,6],[68,6]]},"2257":{"position":[[8,6]]},"2259":{"position":[[12,6]]},"2261":{"position":[[38,6],[126,6],[231,6],[320,6],[379,6],[449,6]]},"2264":{"position":[[69,6],[124,6]]},"2269":{"position":[[35,6],[52,6],[162,6]]},"2272":{"position":[[221,6]]},"2276":{"position":[[12,6]]},"2281":{"position":[[126,6]]},"2287":{"position":[[8,6]]},"2294":{"position":[[49,6],[79,6],[100,6],[138,6],[174,6],[210,6],[251,6],[293,6],[325,6],[364,6],[938,6],[969,6]]},"2300":{"position":[[8,6]]},"2305":{"position":[[49,6]]},"2307":{"position":[[19,6],[54,6],[88,6]]},"2309":{"position":[[13,6]]},"2311":{"position":[[165,6],[393,6]]},"2313":{"position":[[42,6],[115,6]]},"2315":{"position":[[6,6]]},"2319":{"position":[[2,6],[109,6]]},"2321":{"position":[[0,6]]},"2323":{"position":[[8,6]]},"2335":{"position":[[0,6]]},"2337":{"position":[[8,6]]},"2339":{"position":[[12,6]]},"2343":{"position":[[73,6],[275,6]]},"2345":{"position":[[0,6],[85,6]]},"2348":{"position":[[0,6],[131,6],[166,6],[202,6]]},"2350":{"position":[[81,6]]},"2352":{"position":[[61,6]]},"2354":{"position":[[0,6],[184,6]]},"2357":{"position":[[7,6],[106,6],[355,6],[389,6],[448,6]]},"2381":{"position":[[36,6]]},"2385":{"position":[[5,6]]},"2389":{"position":[[8,6]]},"2391":{"position":[[14,6],[131,6]]},"2395":{"position":[[0,6]]},"2424":{"position":[[16,6]]},"2426":{"position":[[237,6]]},"2442":{"position":[[22,6]]},"2466":{"position":[[0,6]]},"2472":{"position":[[21,6]]},"2484":{"position":[[6,6]]},"2486":{"position":[[2,6],[109,6],[143,6],[219,6]]},"2492":{"position":[[8,6]]},"2499":{"position":[[0,6],[16,6]]},"2501":{"position":[[70,6],[95,6],[166,6],[191,6]]},"2503":{"position":[[48,6],[73,6]]},"2514":{"position":[[8,6]]},"2517":{"position":[[127,6]]},"2526":{"position":[[0,6]]},"2532":{"position":[[7,6],[220,6]]},"2536":{"position":[[6,6],[42,6]]},"2538":{"position":[[12,6],[114,6],[202,6]]},"2540":{"position":[[2,6]]},"2544":{"position":[[0,6]]},"2551":{"position":[[0,6]]},"2561":{"position":[[8,6]]},"2569":{"position":[[87,6]]},"2595":{"position":[[8,6]]},"2597":{"position":[[7,6],[49,6],[64,6],[111,6]]},"2601":{"position":[[2,6],[30,6]]},"2611":{"position":[[8,6]]},"2621":{"position":[[2,6],[42,6]]},"2625":{"position":[[59,6]]},"2629":{"position":[[2,6],[140,6]]},"2631":{"position":[[8,6]]},"2635":{"position":[[5,6],[39,6]]},"2641":{"position":[[2,6]]},"2649":{"position":[[6,6],[17,6],[115,6],[142,6],[173,6],[261,6]]},"2651":{"position":[[33,6]]},"2653":{"position":[[111,6]]},"2657":{"position":[[0,6],[25,6]]},"2659":{"position":[[8,6]]},"2662":{"position":[[5,6],[39,6]]},"2668":{"position":[[2,6]]},"2674":{"position":[[113,6]]},"2680":{"position":[[19,6],[44,6]]},"2684":{"position":[[460,6]]},"2686":{"position":[[53,6],[69,6],[115,6]]},"2690":{"position":[[39,6],[348,6]]},"2696":{"position":[[0,6]]},"2698":{"position":[[8,6]]},"2707":{"position":[[24,6]]},"2709":{"position":[[6,6],[44,6],[261,6],[326,6]]},"2711":{"position":[[18,6],[185,6]]},"2713":{"position":[[2,6],[438,6],[500,6],[833,6],[931,6],[1755,6],[1817,6]]},"2719":{"position":[[26,6]]},"2725":{"position":[[14,6],[163,6],[246,6],[735,6],[1132,6],[1215,6],[1615,6],[1772,6]]},"2727":{"position":[[38,6],[146,6],[271,6],[640,6]]},"2729":{"position":[[0,6],[209,6],[247,6]]},"2731":{"position":[[2,6],[157,6]]},"2735":{"position":[[12,6],[132,6]]},"2737":{"position":[[8,6]]},"2766":{"position":[[8,6]]},"2768":{"position":[[7,6],[62,6],[1520,6],[1569,6]]},"2770":{"position":[[114,6],[149,6]]},"2772":{"position":[[8,6]]},"2774":{"position":[[0,6],[92,6],[116,6]]},"2776":{"position":[[11,6]]},"2778":{"position":[[8,6]]},"2780":{"position":[[12,6]]},"2782":{"position":[[192,6]]},"2784":{"position":[[0,6]]},"2788":{"position":[[140,6]]},"2790":{"position":[[32,6],[319,6]]},"2792":{"position":[[0,6],[129,6]]},"2794":{"position":[[0,6]]},"2800":{"position":[[8,6]]},"2813":{"position":[[1137,6]]},"2819":{"position":[[18,6],[36,6],[463,6],[594,6]]},"2823":{"position":[[39,6]]},"2827":{"position":[[52,6]]},"2829":{"position":[[70,6]]},"2836":{"position":[[574,6],[1780,6]]},"2840":{"position":[[8,6]]},"2856":{"position":[[1721,6],[1824,6]]},"2858":{"position":[[8,6]]},"2860":{"position":[[12,6],[41,6]]},"2866":{"position":[[60,6]]},"2868":{"position":[[50,6]]},"2872":{"position":[[112,6]]},"2877":{"position":[[12,6]]},"2879":{"position":[[38,6],[62,6],[392,6]]},"2881":{"position":[[263,6],[315,6],[475,6]]},"2885":{"position":[[31,6]]},"2887":{"position":[[265,6],[374,6]]},"2889":{"position":[[2,6],[184,6]]},"2893":{"position":[[12,6]]},"2895":{"position":[[37,6]]},"2901":{"position":[[66,6]]},"2907":{"position":[[8,6]]},"2921":{"position":[[0,6]]},"2925":{"position":[[0,6],[69,6],[141,6]]},"2927":{"position":[[6,6],[89,6]]},"2929":{"position":[[0,6],[62,6],[182,6]]},"2933":{"position":[[49,6],[135,6],[610,6]]},"2935":{"position":[[65,6],[206,6]]},"2937":{"position":[[143,6],[303,6]]},"2941":{"position":[[0,6],[69,6],[141,6]]},"2943":{"position":[[6,6],[89,6]]},"2945":{"position":[[0,6],[62,6],[182,6],[608,6]]},"2949":{"position":[[52,6],[124,6],[458,6]]},"2951":{"position":[[49,6],[121,6]]},"2955":{"position":[[0,6],[69,6],[141,6]]},"2957":{"position":[[6,6],[89,6]]},"2959":{"position":[[0,6],[62,6],[182,6],[781,6]]},"2963":{"position":[[50,6],[122,6],[477,6]]},"2967":{"position":[[6,6]]},"2971":{"position":[[76,6]]},"2973":{"position":[[0,6],[72,6]]},"2975":{"position":[[8,6]]},"2977":{"position":[[123,6],[148,6]]},"2979":{"position":[[8,6]]},"2985":{"position":[[6,6]]},"2987":{"position":[[123,6],[148,6]]},"2989":{"position":[[8,6]]},"2993":{"position":[[104,6]]},"2997":{"position":[[123,6],[148,6]]},"2999":{"position":[[10,6]]},"3001":{"position":[[146,6],[165,6]]},"3003":{"position":[[68,6],[87,6],[133,6],[152,6],[314,6],[333,6]]},"3005":{"position":[[123,6],[148,6]]},"3007":{"position":[[10,6]]},"3013":{"position":[[0,6]]},"3019":{"position":[[123,6],[148,6]]},"3021":{"position":[[13,6]]},"3027":{"position":[[123,6],[148,6]]},"3029":{"position":[[9,6]]},"3035":{"position":[[123,6],[148,6]]},"3043":{"position":[[123,6],[148,6]]},"3051":{"position":[[123,6],[148,6]]},"3053":{"position":[[10,6]]},"3059":{"position":[[123,6],[148,6]]},"3061":{"position":[[11,6]]},"3063":{"position":[[407,6],[427,6],[445,6],[1065,6],[1153,6],[1417,6]]},"3065":{"position":[[169,6],[348,6]]},"3067":{"position":[[12,6]]},"3069":{"position":[[147,6],[165,6],[226,6],[248,6]]},"3071":{"position":[[2,6],[566,6],[806,6],[952,6],[1116,6],[1246,6]]},"3084":{"position":[[8,6]]},"3126":{"position":[[64,6]]},"3128":{"position":[[8,6]]},"3131":{"position":[[57,6],[74,6],[87,6],[123,6],[153,6],[195,6],[235,6],[296,6],[360,6]]},"3133":{"position":[[8,6]]},"3144":{"position":[[2,6],[234,6]]},"3154":{"position":[[57,6],[128,6]]},"3156":{"position":[[39,6],[75,6],[190,6],[326,6]]},"3158":{"position":[[66,6],[181,6]]},"3205":{"position":[[8,6]]},"3207":{"position":[[36,6],[166,6],[208,6],[223,6]]},"3240":{"position":[[8,6]]},"3242":{"position":[[29,6],[247,6],[288,6]]},"3244":{"position":[[18,6]]},"3248":{"position":[[7,6],[49,6],[64,6]]},"3252":{"position":[[2,6],[31,6]]},"3254":{"position":[[1645,6],[1663,6],[1707,6]]},"3275":{"position":[[389,6]]},"3279":{"position":[[8,6]]},"3287":{"position":[[2,6],[1181,6],[1344,6]]},"3296":{"position":[[6,6]]},"3298":{"position":[[8,6]]},"3311":{"position":[[8,6]]},"3315":{"position":[[0,6]]},"3317":{"position":[[18,6],[58,6],[101,6],[148,6],[199,6],[270,6],[319,6]]},"3319":{"position":[[76,6],[121,6],[169,6],[221,6],[277,6],[353,6],[407,6]]},"3321":{"position":[[88,6],[148,6]]},"3325":{"position":[[39,6]]},"3329":{"position":[[3,6]]},"3331":{"position":[[149,6],[176,6]]},"3333":{"position":[[8,6]]},"3339":{"position":[[12,6]]},"3345":{"position":[[12,6]]},"3347":{"position":[[8,6]]},"3356":{"position":[[34,6]]},"3367":{"position":[[0,6]]},"3369":{"position":[[0,6],[18,6],[34,6],[78,6],[98,6],[116,6],[130,6]]},"3371":{"position":[[61,6],[421,6]]},"3373":{"position":[[0,6],[133,6],[648,6]]},"3377":{"position":[[33,6]]},"3379":{"position":[[6,6]]},"3383":{"position":[[320,6],[347,6]]},"3385":{"position":[[0,6]]},"3387":{"position":[[203,6]]},"3389":{"position":[[434,6]]},"3397":{"position":[[1086,6]]},"3403":{"position":[[14,6],[35,6],[46,6],[64,6],[80,6]]},"3409":{"position":[[8,6]]},"3424":{"position":[[12,6]]},"3426":{"position":[[2,6]]},"3428":{"position":[[12,6]]},"3430":{"position":[[6,6],[460,6],[475,6],[1823,6],[1907,6],[3160,6],[3175,6],[3446,6],[3551,6],[3660,6],[4463,6],[4478,6],[4521,6]]},"3432":{"position":[[2627,6],[2691,6],[3103,6],[3118,6],[4134,6],[4252,6],[4863,6],[5680,6],[5695,6]]},"3434":{"position":[[20,6],[119,6],[2499,6],[2626,6]]},"3436":{"position":[[0,6]]},"3438":{"position":[[0,6]]},"3444":{"position":[[2,6]]},"3446":{"position":[[6,6],[32,6],[309,6],[375,6],[441,6],[517,6],[584,6],[633,6],[1596,6],[1722,6]]},"3448":{"position":[[98,6],[119,6],[611,6],[679,6],[759,6],[840,6],[893,6],[925,6],[1035,6],[1103,6],[1183,6],[1267,6],[1312,6]]},"3450":{"position":[[12,6]]},"3452":{"position":[[12,6],[120,6],[200,6],[260,6],[312,6],[362,6],[492,6],[1217,6],[1266,6],[2478,6],[2595,6],[2752,6],[3194,6],[3282,6],[3299,6]]},"3454":{"position":[[12,6],[35,6]]},"3456":{"position":[[12,6]]},"3458":{"position":[[206,6],[597,6]]},"3460":{"position":[[2,6]]},"3464":{"position":[[2,6],[86,6],[174,6],[279,6],[368,6],[427,6],[497,6]]},"3466":{"position":[[12,6],[150,6],[316,6],[964,6],[1529,6]]},"3470":{"position":[[113,6]]},"3472":{"position":[[8,6]]},"3474":{"position":[[12,6]]},"3483":{"position":[[0,6],[156,6],[221,6],[287,6],[354,6],[426,6],[495,6],[563,6],[598,6],[641,6],[918,6],[980,6],[1044,6],[1106,6],[1174,6],[1240,6],[1280,6]]},"3486":{"position":[[47,6],[123,6],[200,6],[278,6],[361,6],[441,6],[519,6]]},"3488":{"position":[[8,6],[68,6]]},"3490":{"position":[[19,6]]},"3492":{"position":[[27,6],[142,6],[223,6],[292,6]]},"3494":{"position":[[27,6],[204,6]]},"3496":{"position":[[27,6],[112,6],[157,6],[206,6],[221,6],[268,6],[317,6],[406,6],[431,6]]},"3498":{"position":[[396,6],[436,6]]},"3500":{"position":[[27,6],[87,6],[137,6],[192,6],[261,6],[321,6],[430,6],[521,6],[621,6]]},"3502":{"position":[[19,6]]},"3504":{"position":[[19,6]]},"3506":{"position":[[0,6],[101,6],[212,6],[330,6],[478,6]]},"3508":{"position":[[19,6],[101,6]]},"3510":{"position":[[19,6]]},"3512":{"position":[[19,6]]},"3514":{"position":[[19,6]]},"3516":{"position":[[19,6]]},"3518":{"position":[[19,6]]},"3520":{"position":[[0,6],[175,6],[254,6],[322,6]]},"3522":{"position":[[0,6],[20,6],[221,6],[365,6],[499,6],[558,6],[678,6],[737,6],[1154,6],[1176,6],[1301,6],[1465,6]]},"3524":{"position":[[73,6]]},"3526":{"position":[[33,6],[72,6],[107,6]]},"3528":{"position":[[2,6],[59,6]]},"3530":{"position":[[2,6],[61,6]]},"3532":{"position":[[43,6],[104,6]]},"3535":{"position":[[77,6],[169,6],[261,6],[357,6],[457,6],[553,6]]},"3537":{"position":[[64,6]]},"3539":{"position":[[0,6],[183,6],[322,6],[435,6]]},"3541":{"position":[[64,6],[177,6],[283,6],[405,6],[518,6],[582,6],[770,6],[795,6]]},"3543":{"position":[[483,6]]},"3545":{"position":[[65,6],[160,6],[292,6]]},"3547":{"position":[[0,6],[139,6],[295,6]]},"3549":{"position":[[65,6],[202,6]]},"3551":{"position":[[0,6],[116,6]]},"3553":{"position":[[0,6],[116,6]]},"3555":{"position":[[0,6],[116,6]]},"3557":{"position":[[0,6],[116,6]]},"3559":{"position":[[0,6],[116,6]]},"3561":{"position":[[0,6],[174,6],[254,6],[321,6],[386,6]]},"3563":{"position":[[0,6],[20,6],[207,6],[411,6],[624,6],[646,6],[797,6],[929,6],[1111,6],[1256,6]]},"3565":{"position":[[69,6],[157,6],[192,6]]},"3567":{"position":[[2,6],[126,6]]},"3569":{"position":[[2,6],[95,6]]},"3571":{"position":[[43,6],[140,6]]},"3573":{"position":[[0,6]]},"3587":{"position":[[83,6]]},"3589":{"position":[[57,6]]},"3593":{"position":[[12,6]]},"3595":{"position":[[0,6]]},"3597":{"position":[[0,6]]},"3601":{"position":[[2,6],[761,6],[776,6]]},"3603":{"position":[[12,6],[73,6],[204,6]]},"3605":{"position":[[8,6]]},"3628":{"position":[[0,6]]},"3630":{"position":[[62,6],[255,6]]},"3632":{"position":[[2,6]]},"3634":{"position":[[0,6]]},"3636":{"position":[[10,6],[29,6],[45,6],[131,6],[170,6],[382,6]]},"3638":{"position":[[47,6],[77,6],[116,6],[336,6],[505,6]]},"3640":{"position":[[32,6],[71,6],[222,6],[314,6],[485,6]]},"3642":{"position":[[0,6],[40,6],[243,6],[422,6]]},"3644":{"position":[[66,6],[105,6],[218,6],[359,6],[425,6],[464,6],[615,6],[794,6],[860,6],[899,6],[1053,6],[1235,6]]},"3646":{"position":[[0,6]]},"3648":{"position":[[0,6]]},"3650":{"position":[[4,6],[64,6]]},"3656":{"position":[[6,6],[77,6],[270,6]]},"3658":{"position":[[0,6]]},"3666":{"position":[[0,6],[279,6]]},"3668":{"position":[[0,6]]},"3670":{"position":[[6,6]]},"3678":{"position":[[2,6]]},"3680":{"position":[[217,6]]},"3686":{"position":[[12,6],[392,6],[621,6],[780,6]]},"3688":{"position":[[12,6],[87,6],[129,6],[168,6],[385,6]]},"3690":{"position":[[12,6]]},"3692":{"position":[[12,6],[180,6]]},"3694":{"position":[[12,6]]},"3698":{"position":[[12,6],[127,6]]},"3700":{"position":[[12,6],[142,6]]},"3702":{"position":[[2,6],[106,6],[150,6],[394,6],[444,6],[512,6],[565,6],[629,6],[726,6],[936,6],[1117,6],[1152,6],[1166,6],[1202,6],[1247,6],[1302,6],[1367,6],[1389,6],[1438,6],[1495,6],[1542,6],[1618,6],[1681,6],[1749,6],[1885,6],[1965,6],[2006,6],[2051,6],[2090,6],[2142,6],[2253,6],[2460,6],[2814,6]]},"3704":{"position":[[2,6],[498,6],[806,6]]},"3706":{"position":[[8,6],[399,6],[419,6],[437,6],[1057,6],[1145,6],[1428,6],[1917,6],[2096,6]]},"3708":{"position":[[0,6],[638,6],[667,6],[701,6],[1455,6],[1817,6],[2282,6]]},"3716":{"position":[[12,6]]},"3718":{"position":[[125,6]]},"3720":{"position":[[183,6]]},"3722":{"position":[[12,6],[303,6]]},"3724":{"position":[[8,6]]},"3727":{"position":[[62,6]]},"3734":{"position":[[25,6],[60,6],[89,6],[357,6],[439,6]]},"3736":{"position":[[71,6],[93,6]]},"3738":{"position":[[135,6],[184,6]]},"3740":{"position":[[263,6],[312,6],[626,6],[675,6]]},"3744":{"position":[[101,6],[225,6],[253,6]]},"3746":{"position":[[69,6],[224,6],[313,6]]},"3754":{"position":[[0,6],[99,6],[154,6],[270,6],[300,6],[335,6]]},"3756":{"position":[[8,6]]},"3758":{"position":[[66,6],[135,6]]},"3770":{"position":[[759,6],[806,6],[2191,6],[2239,6],[4008,6],[4057,6],[5467,6],[5553,6],[5597,6]]},"3779":{"position":[[684,6],[732,6],[1030,6],[1074,6]]},"3781":{"position":[[209,6],[231,6],[621,6]]},"3783":{"position":[[1485,6],[1592,6]]},"3785":{"position":[[155,6],[199,6],[1573,6],[1614,6]]},"3802":{"position":[[454,6],[464,6],[744,6],[804,6],[1385,6],[1441,6]]},"3810":{"position":[[193,6],[203,6]]},"3812":{"position":[[170,6],[226,6],[1429,6],[1469,6],[1784,6],[1842,6],[2406,6],[2501,6],[2554,6]]},"3817":{"position":[[955,6],[1015,6],[1706,6],[1750,6],[1977,6],[2033,6]]},"3821":{"position":[[183,6],[227,6],[469,6],[525,6]]},"3832":{"position":[[2206,6],[2397,6],[2414,6],[2459,6],[2650,6],[2667,6],[2919,6],[3049,6],[3066,6],[3967,6],[4158,6],[4175,6],[4220,6],[4411,6],[4428,6],[4680,6],[4810,6],[4827,6]]},"3896":{"position":[[108,6],[152,6],[394,6],[450,6]]},"3906":{"position":[[8,6]]},"3908":{"position":[[0,6]]},"3910":{"position":[[4,6],[26,6],[244,6],[285,6],[344,6]]},"3912":{"position":[[52,6],[102,6],[162,6],[236,6],[310,6],[384,6],[458,6],[532,6],[606,6],[680,6],[1584,6],[1710,6]]},"3914":{"position":[[47,6],[121,6],[195,6],[269,6],[343,6],[417,6],[491,6],[565,6],[639,6],[713,6],[1718,6],[1850,6],[1998,6]]},"3916":{"position":[[47,6],[121,6],[195,6],[269,6],[343,6],[417,6],[491,6],[565,6],[639,6],[1395,6],[1418,6],[3307,6],[3386,6],[3495,6],[4213,6],[4262,6],[5474,6],[5591,6],[5748,6],[6190,6],[6278,6],[6295,6]]},"3918":{"position":[[47,6],[121,6],[195,6],[269,6],[343,6],[417,6],[491,6],[565,6],[639,6],[713,6],[1599,6],[1741,6],[1886,6],[2079,6],[2243,6],[2885,6],[2966,6],[4100,6]]},"3920":{"position":[[47,6],[121,6],[1002,6]]},"3924":{"position":[[7,6],[44,6],[590,6],[627,6],[646,6],[1408,6],[2093,6],[2134,6],[2241,6],[2538,6],[2623,6],[2669,6],[2719,6],[2764,6],[2796,6],[2809,6],[3169,6],[4032,6],[4346,6],[4576,6],[4712,6]]},"3926":{"position":[[345,6],[657,6]]},"3928":{"position":[[177,6],[272,6],[329,6],[585,6],[628,6],[896,6],[922,6],[1159,6],[1208,6],[2158,6],[2284,6]]},"3930":{"position":[[617,6]]},"3932":{"position":[[168,6],[581,6],[1648,6],[1673,6],[2710,6]]},"3934":{"position":[[1324,6],[1370,6],[1801,6],[2080,6],[2111,6],[2426,6],[2471,6],[2510,6],[2978,6],[3028,6],[3042,6]]},"3936":{"position":[[232,6],[446,6],[880,6],[898,6],[1591,6],[1910,6],[1992,6],[2090,6],[2179,6],[2238,6]]},"3938":{"position":[[404,6],[1128,6]]},"3940":{"position":[[1273,6]]},"3944":{"position":[[457,6]]},"3946":{"position":[[9,6],[455,6]]},"3948":{"position":[[14,6]]},"3952":{"position":[[7,6]]},"3956":{"position":[[275,6],[304,6],[338,6],[526,6]]},"3962":{"position":[[1665,6]]},"3964":{"position":[[74,6],[263,6],[297,6]]},"3968":{"position":[[452,6]]},"3970":{"position":[[322,6]]},"3972":{"position":[[7,6]]},"3978":{"position":[[1460,6]]},"3980":{"position":[[625,6]]},"3984":{"position":[[1007,6]]},"3986":{"position":[[1025,6],[1155,6]]},"3988":{"position":[[504,6]]},"3990":{"position":[[329,6],[350,6],[541,6]]},"3992":{"position":[[78,6],[317,6],[372,6],[1046,6],[1141,6],[3966,6]]},"3994":{"position":[[7,6],[57,6],[102,6],[1444,6]]},"3996":{"position":[[7,6],[38,6],[85,6],[931,6],[989,6],[1041,6]]},"4000":{"position":[[523,6],[790,6]]},"4006":{"position":[[658,6]]}}}],["furion_",{"_index":1828,"t":{"249":{"position":[[299,7]]}}}],["furion_nuget_test_packag",{"_index":6781,"t":{"2649":{"position":[[115,26]]},"2651":{"position":[[33,26]]},"2653":{"position":[[111,26]]}}}],["furionapi",{"_index":441,"t":{"53":{"position":[[152,9]]},"64":{"position":[[191,9]]},"77":{"position":[[152,9]]},"127":{"position":[[518,9]]},"3317":{"position":[[81,9]]},"3323":{"position":[[11,9],[75,9],[117,9],[159,9],[484,9]]},"3912":{"position":[[1361,9],[1412,9],[1463,9]]}}}],["furionapp",{"_index":7903,"t":{"3317":{"position":[[124,9]]}}}],["furionappservic",{"_index":3117,"t":{"597":{"position":[[8,16],[396,16]]},"602":{"position":[[108,16]]},"625":{"position":[[240,16]]},"1584":{"position":[[5,16],[204,16],[437,16]]},"1592":{"position":[[97,16]]},"1603":{"position":[[79,16]]},"1605":{"position":[[79,16]]},"1607":{"position":[[79,16]]},"1609":{"position":[[142,16],[488,16]]},"1611":{"position":[[280,16]]},"1613":{"position":[[111,16]]},"1615":{"position":[[111,16]]},"1617":{"position":[[204,16],[416,16],[699,16],[963,16]]},"1619":{"position":[[249,16]]},"1621":{"position":[[494,16]]},"1643":{"position":[[160,16]]},"1645":{"position":[[153,16]]},"1649":{"position":[[112,16]]},"1651":{"position":[[122,16]]},"1653":{"position":[[157,16]]},"1655":{"position":[[170,16]]},"1657":{"position":[[291,16]]},"1659":{"position":[[139,16],[536,16],[974,16]]},"1845":{"position":[[119,16],[392,16]]},"1859":{"position":[[111,16]]},"1869":{"position":[[454,16]]},"1873":{"position":[[215,16]]},"1875":{"position":[[111,16]]},"3636":{"position":[[241,16]]},"3638":{"position":[[185,16]]},"3640":{"position":[[142,16]]},"3644":{"position":[[139,16],[536,16],[974,16]]},"3656":{"position":[[111,16]]}}}],["furionappservicev1",{"_index":5091,"t":{"1592":{"position":[[196,18]]},"1621":{"position":[[92,18],[199,18],[308,18]]}}}],["furionappservicev1_1_0",{"_index":5090,"t":{"1592":{"position":[[196,22]]}}}],["furionappservicev1_2",{"_index":5142,"t":{"1621":{"position":[[199,20]]}}}],["furionappservicev1_2_1",{"_index":5143,"t":{"1621":{"position":[[308,22]]}}}],["furionappservicev2",{"_index":5089,"t":{"1592":{"position":[[165,18]]},"1621":{"position":[[726,18]]}}}],["furionblazor",{"_index":7906,"t":{"3317":{"position":[[296,12]]}}}],["furionblazorapi",{"_index":7907,"t":{"3317":{"position":[[355,15]]}}}],["furiondbcontext",{"_index":2768,"t":{"508":{"position":[[163,15],[194,15],[320,15],[353,15]]},"514":{"position":[[396,15],[711,15]]},"516":{"position":[[191,15],[222,15],[325,15],[358,15]]},"518":{"position":[[121,15],[152,15],[255,15],[288,15]]},"524":{"position":[[444,15],[546,15]]},"570":{"position":[[368,15],[399,15],[425,15],[458,15]]},"572":{"position":[[1295,15]]},"698":{"position":[[210,15]]},"706":{"position":[[164,15],[311,15]]},"713":{"position":[[461,15]]},"730":{"position":[[282,15]]},"732":{"position":[[205,15]]},"832":{"position":[[202,15],[233,15],[347,15],[380,15]]},"846":{"position":[[425,15],[456,15],[503,15],[536,15]]},"899":{"position":[[34,15],[92,15],[175,15],[271,15],[339,15],[417,15],[494,15],[548,15],[625,15],[747,15],[815,15],[870,15],[967,15],[1033,15],[1182,15],[1265,15],[1415,15],[1571,15],[1707,15],[1808,15]]},"935":{"position":[[69,15]]},"2927":{"position":[[323,15]]},"2933":{"position":[[239,15],[270,15],[338,15],[371,15]]},"2935":{"position":[[310,15],[341,15],[409,15],[442,15]]},"2937":{"position":[[407,15],[438,15],[506,15],[539,15]]},"2943":{"position":[[319,15]]},"2949":{"position":[[177,15],[208,15],[258,15],[291,15]]},"2951":{"position":[[164,15],[195,15],[245,15],[278,15]]},"2957":{"position":[[323,15]]},"2963":{"position":[[226,15],[257,15],[305,15],[338,15]]},"2969":{"position":[[125,15]]}}}],["furiondbcontextloc",{"_index":3804,"t":{"945":{"position":[[213,22]]}}}],["furionmvc",{"_index":7902,"t":{"3317":{"position":[[41,9]]}}}],["furionnet6",{"_index":442,"t":{"53":{"position":[[165,10]]},"64":{"position":[[204,10]]},"77":{"position":[[165,10]]}}}],["furionrazor",{"_index":7904,"t":{"3317":{"position":[[173,11]]}}}],["furionrazorapi",{"_index":7905,"t":{"3317":{"position":[[234,14]]}}}],["furionservic",{"_index":3877,"t":{"1022":{"position":[[63,13]]},"1227":{"position":[[35,13]]},"1368":{"position":[[239,13],[354,13]]},"1392":{"position":[[254,13],[319,13]]},"1394":{"position":[[205,13]]},"1396":{"position":[[116,13]]},"2790":{"position":[[390,13],[487,13]]}}}],["furionstart",{"_index":5913,"t":{"1977":{"position":[[82,11]]},"1979":{"position":[[208,11]]}}}],["furionwork",{"_index":7080,"t":{"2813":{"position":[[275,13],[818,13]]},"2817":{"position":[[424,13]]},"2819":{"position":[[176,13]]},"2821":{"position":[[207,13]]},"2836":{"position":[[266,13],[703,12],[921,12],[934,12],[1479,13]]}}}],["furionworkerservic",{"_index":7097,"t":{"2836":{"position":[[888,20],[985,20],[1036,20]]}}}],["furo",{"_index":3211,"t":{"615":{"position":[[789,5]]}}}],["furoin",{"_index":8640,"t":{"3754":{"position":[[230,6]]}}}],["furotherdbcontext",{"_index":2771,"t":{"510":{"position":[[163,17],[196,17],[350,17],[385,17]]}}}],["furotherdbcontextloc",{"_index":2772,"t":{"510":{"position":[[215,24]]}}}],["furslav",{"_index":3921,"t":{"1056":{"position":[[719,8]]}}}],["furwebcorestartup",{"_index":1586,"t":{"216":{"position":[[731,17]]},"338":{"position":[[236,17]]},"411":{"position":[[258,17]]},"595":{"position":[[16,17],[151,17]]},"617":{"position":[[2192,17],[2327,17]]},"1582":{"position":[[90,17],[225,17]]},"1843":{"position":[[16,17],[151,17]]},"1867":{"position":[[359,17],[494,17]]},"2711":{"position":[[34,17],[241,17]]},"3630":{"position":[[311,17]]}}}],["fuzzymatch",{"_index":5494,"t":{"1795":{"position":[[1119,10]]},"1821":{"position":[[174,10]]}}}],["fv",{"_index":3240,"t":{"637":{"position":[[47,2],[55,2]]}}}],["fyrom",{"_index":6605,"t":{"2559":{"position":[[1695,5]]}}}],["g",{"_index":1143,"t":{"152":{"position":[[234,1],[253,1],[508,1],[527,1]]},"490":{"position":[[195,1],[440,1]]},"685":{"position":[[467,1],[520,1]]},"688":{"position":[[6,1]]},"696":{"position":[[481,1],[529,1]]},"834":{"position":[[155,1],[163,1],[173,1],[182,1],[220,1],[230,1]]},"866":{"position":[[487,1],[508,1],[523,1]]},"1483":{"position":[[629,1]]},"2742":{"position":[[108,1]]},"2760":{"position":[[93,1]]},"3080":{"position":[[194,1]]},"3082":{"position":[[177,1]]},"3452":{"position":[[3702,1],[3850,1]]},"3916":{"position":[[6698,1],[6846,1]]}}}],["g__await",{"_index":8232,"t":{"3452":{"position":[[3850,10]]},"3916":{"position":[[6846,10]]}}}],["g__log",{"_index":8229,"t":{"3452":{"position":[[3702,9]]},"3916":{"position":[[6698,9]]}}}],["gb",{"_index":6531,"t":{"2559":{"position":[[933,2]]}}}],["gb2312",{"_index":9557,"t":{"3938":{"position":[[380,6],[594,6]]}}}],["gbk",{"_index":9237,"t":{"3918":{"position":[[3308,3]]},"3938":{"position":[[351,3],[590,3]]}}}],["gc",{"_index":5604,"t":{"1803":{"position":[[2089,2],[5131,2]]},"3850":{"position":[[405,2]]},"3852":{"position":[[523,2]]},"3854":{"position":[[350,2]]},"3856":{"position":[[245,2]]},"3874":{"position":[[338,2]]},"3876":{"position":[[455,2]]},"3914":{"position":[[2917,2]]},"3952":{"position":[[314,2]]}}}],["ge",{"_index":6559,"t":{"2559":{"position":[[1199,2]]}}}],["gecko",{"_index":787,"t":{"114":{"position":[[489,5]]},"3446":{"position":[[964,5]]},"3452":{"position":[[1621,5]]},"3916":{"position":[[4617,5]]},"3928":{"position":[[1526,5]]}}}],["gen",{"_index":8492,"t":{"3666":{"position":[[170,3]]},"3668":{"position":[[127,3],[136,3]]},"3680":{"position":[[143,3],[152,3]]},"3918":{"position":[[2571,3]]}}}],["gender",{"_index":3648,"t":{"851":{"position":[[1471,6],[1478,6]]}}}],["gener",{"_index":221,"t":{"13":{"position":[[100,9],[181,7]]},"306":{"position":[[183,8]]},"308":{"position":[[3,8]]},"310":{"position":[[3,8]]},"587":{"position":[[1674,7]]},"599":{"position":[[25,7]]},"696":{"position":[[1360,7],[2541,7],[3463,7],[4145,7]]},"708":{"position":[[70,7]]},"747":{"position":[[150,7]]},"851":{"position":[[104,7],[1714,7]]},"877":{"position":[[175,7],[1946,7]]},"889":{"position":[[162,7]]},"1064":{"position":[[110,7]]},"1066":{"position":[[712,7]]},"1109":{"position":[[396,7]]},"1145":{"position":[[70,7]]},"1147":{"position":[[56,7]]},"1151":{"position":[[87,7]]},"1368":{"position":[[148,7]]},"1539":{"position":[[337,7]]},"2296":{"position":[[100,9],[181,7]]},"2929":{"position":[[163,7]]},"2945":{"position":[[163,7]]},"2959":{"position":[[163,7]]},"4002":{"position":[[208,7]]}}}],["generatepackageonbuild",{"_index":4952,"t":{"1535":{"position":[[310,22],[339,22],[562,22]]},"1551":{"position":[[471,22],[500,22],[821,22],[850,22]]}}}],["generaterefreshtoken",{"_index":1098,"t":{"144":{"position":[[48,20],[299,20]]},"2134":{"position":[[33,20]]}}}],["generatesecretkey",{"_index":5260,"t":{"1687":{"position":[[57,17]]},"1689":{"position":[[669,17]]}}}],["generationopt",{"_index":6177,"t":{"2333":{"position":[[180,17]]}}}],["genericrunopt",{"_index":2258,"t":{"350":{"position":[[56,17]]},"2897":{"position":[[44,17],[172,17],[558,17],[592,17]]},"2903":{"position":[[176,17],[325,17],[356,17]]},"3924":{"position":[[2468,17],[2499,17]]}}}],["genr",{"_index":3100,"t":{"587":{"position":[[1490,5],[1499,5]]}}}],["getactu",{"_index":4319,"t":{"1424":{"position":[[1780,9]]}}}],["getactualcustomattribut",{"_index":4317,"t":{"1424":{"position":[[1719,24]]}}}],["getag",{"_index":3885,"t":{"1037":{"position":[[719,6]]}}}],["getal",{"_index":2906,"t":{"552":{"position":[[149,6]]},"1024":{"position":[[35,6]]},"1229":{"position":[[35,6]]},"1594":{"position":[[45,6]]},"1596":{"position":[[69,6]]},"1631":{"position":[[148,6],[501,6],[525,6]]},"1661":{"position":[[1281,6],[1306,6]]},"3023":{"position":[[1278,6],[1303,6]]},"3261":{"position":[[11,6]]}}}],["getallnolock",{"_index":7781,"t":{"3261":{"position":[[201,12]]}}}],["getallresponsehead",{"_index":2488,"t":{"417":{"position":[[309,21]]}}}],["getapi",{"_index":2100,"t":{"319":{"position":[[80,6],[123,6],[364,6],[449,6],[665,6]]}}}],["getasasync",{"_index":8291,"t":{"3506":{"position":[[614,10]]},"3520":{"position":[[335,10]]}}}],["getasstreamasync",{"_index":8301,"t":{"3520":{"position":[[267,16]]},"3918":{"position":[[2898,16],[2979,16]]}}}],["getasstringasync",{"_index":63,"t":{"3":{"position":[[607,16]]},"3520":{"position":[[405,16]]},"3599":{"position":[[97,16]]}}}],["getasync",{"_index":1778,"t":{"243":{"position":[[45,8]]},"253":{"position":[[369,8]]},"2182":{"position":[[200,8]]},"2184":{"position":[[205,8]]},"3373":{"position":[[584,8]]},"3397":{"position":[[807,8]]},"3483":{"position":[[934,8]]},"3486":{"position":[[63,8]]},"3520":{"position":[[188,8]]},"3526":{"position":[[57,8]]},"3528":{"position":[[95,8]]},"3530":{"position":[[84,8]]},"3532":{"position":[[137,8]]},"3597":{"position":[[113,8],[222,8],[352,8],[393,8],[481,8]]},"3603":{"position":[[86,8],[245,8],[286,8]]}}}],["getawait",{"_index":64,"t":{"3":{"position":[[626,10]]},"3597":{"position":[[124,10],[404,10]]}}}],["getbuild",{"_index":8997,"t":{"3844":{"position":[[798,10],[1399,10]]},"3866":{"position":[[33,10]]}}}],["getbyid",{"_index":4242,"t":{"1396":{"position":[[146,7]]},"3224":{"position":[[282,7]]},"3258":{"position":[[122,7]]}}}],["getbyprimarykey",{"_index":7783,"t":{"3261":{"position":[[284,15]]}}}],["getbyt",{"_index":1852,"t":{"253":{"position":[[652,8]]},"1801":{"position":[[2549,8]]}}}],["getcallsit",{"_index":3459,"t":{"734":{"position":[[1705,11],[2559,11],[3554,11],[4408,11],[5262,11],[6116,11]]}}}],["getcollect",{"_index":6740,"t":{"2607":{"position":[[86,13],[519,13]]}}}],["getcommandlineconfigur",{"_index":5955,"t":{"2065":{"position":[[53,27]]},"3918":{"position":[[997,27]]}}}],["getconfig",{"_index":2535,"t":{"439":{"position":[[170,9]]},"2023":{"position":[[135,9]]},"2713":{"position":[[332,9],[703,9]]},"3916":{"position":[[1849,9]]},"3952":{"position":[[385,9]]},"3978":{"position":[[1170,9]]}}}],["getconnect",{"_index":7683,"t":{"3226":{"position":[[356,13],[409,13]]}}}],["getconnectionstr",{"_index":2827,"t":{"526":{"position":[[320,19]]},"534":{"position":[[650,19]]},"915":{"position":[[204,19],[401,19]]},"3215":{"position":[[322,19]]}}}],["getcooki",{"_index":8406,"t":{"3603":{"position":[[121,10],[321,10]]},"3912":{"position":[[923,10]]}}}],["getcronnextoccurr",{"_index":6046,"t":{"2224":{"position":[[25,21]]},"2440":{"position":[[445,21]]},"2464":{"position":[[25,21]]}}}],["getcultur",{"_index":5997,"t":{"2153":{"position":[[13,11]]},"2526":{"position":[[152,11]]}}}],["getcurrentdirectori",{"_index":2598,"t":{"455":{"position":[[57,19]]}}}],["getcurrenthttpcontext",{"_index":1112,"t":{"146":{"position":[[610,21]]},"4000":{"position":[[60,21]]}}}],["getdat",{"_index":3631,"t":{"836":{"position":[[297,7]]}}}],["getdata",{"_index":2491,"t":{"419":{"position":[[73,7]]},"1117":{"position":[[1141,8],[1200,8],[1266,8],[1339,8],[1419,8],[1506,8],[1600,8],[1701,8]]},"1238":{"position":[[251,7],[426,7],[584,7],[735,7]]},"1240":{"position":[[272,7],[468,7],[647,7],[819,7],[1148,7]]},"1255":{"position":[[142,7],[200,7],[253,7]]},"1257":{"position":[[164,7],[244,7],[332,7],[440,7]]},"3483":{"position":[[828,7]]},"3575":{"position":[[411,7],[451,7],[472,7],[514,7]]},"3583":{"position":[[113,7],[525,7],[926,7]]},"3932":{"position":[[2375,7]]}}}],["getdataasync",{"_index":4084,"t":{"1238":{"position":[[892,12]]},"1240":{"position":[[1007,12]]}}}],["getdatabas",{"_index":6739,"t":{"2607":{"position":[[40,11],[473,11]]}}}],["getdatabaseconnectionstr",{"_index":7278,"t":{"2949":{"position":[[351,27],[495,27],[572,27]]},"2951":{"position":[[429,27],[513,27],[677,27]]}}}],["getdatabasevalu",{"_index":2983,"t":{"570":{"position":[[1450,17]]}}}],["getdataread",{"_index":7817,"t":{"3273":{"position":[[707,13]]}}}],["getdatasetal",{"_index":7819,"t":{"3273":{"position":[[748,13]]}}}],["getdatat",{"_index":7810,"t":{"3273":{"position":[[121,12],[295,12],[530,12],[679,12]]}}}],["getdatetim",{"_index":7826,"t":{"3273":{"position":[[949,11]]}}}],["getdbcontext",{"_index":2845,"t":{"530":{"position":[[592,12]]},"1039":{"position":[[592,12]]},"1434":{"position":[[118,12]]},"2115":{"position":[[19,12]]},"2117":{"position":[[26,12],[88,12]]},"2476":{"position":[[137,12]]},"2478":{"position":[[247,12]]},"2831":{"position":[[586,12]]},"2971":{"position":[[314,12]]},"4000":{"position":[[10,12],[567,12],[590,12]]}}}],["getdbrepositori",{"_index":5987,"t":{"2129":{"position":[[29,15]]},"3958":{"position":[[10,15]]}}}],["getdbtransact",{"_index":7876,"t":{"3291":{"position":[[1070,16]]}}}],["getdecim",{"_index":7825,"t":{"3273":{"position":[[923,10]]}}}],["getdefaultjsonserializeropt",{"_index":5960,"t":{"2083":{"position":[[36,31]]}}}],["getdependententri",{"_index":1733,"t":{"237":{"position":[[558,19],[604,19],[996,19]]}}}],["getdescript",{"_index":4979,"t":{"1539":{"position":[[1574,14]]},"1557":{"position":[[684,14]]},"1559":{"position":[[81,14]]}}}],["getdirectorycont",{"_index":5365,"t":{"1731":{"position":[[55,20]]}}}],["getdoubl",{"_index":7824,"t":{"3273":{"position":[[899,9]]}}}],["getduplicatedbcontext",{"_index":10221,"t":{"3992":{"position":[[1288,21]]},"4000":{"position":[[614,21]]}}}],["getduplicatexxx",{"_index":10219,"t":{"3992":{"position":[[1255,15]]}}}],["getembeddedfileprovid",{"_index":5354,"t":{"1726":{"position":[[151,23]]},"2092":{"position":[[22,23]]}}}],["getendpoinet",{"_index":10460,"t":{"4002":{"position":[[347,12]]}}}],["getendpoint",{"_index":10446,"t":{"4000":{"position":[[923,11]]}}}],["getentryassembl",{"_index":5351,"t":{"1724":{"position":[[500,16]]},"1726":{"position":[[184,16]]},"2049":{"position":[[27,16]]},"2092":{"position":[[55,16]]}}}],["geterrormessag",{"_index":3090,"t":{"587":{"position":[[1201,15],[1566,15]]}}}],["getexceptionmetadata",{"_index":10148,"t":{"3988":{"position":[[201,20]]}}}],["getexpressionpropertynam",{"_index":6013,"t":{"2167":{"position":[[442,25]]}}}],["getextens",{"_index":300,"t":{"19":{"position":[[461,12]]},"1741":{"position":[[597,12],[1356,12],[2192,12]]},"3432":{"position":[[4789,12]]}}}],["getfactori",{"_index":6026,"t":{"2177":{"position":[[33,10]]}}}],["getfileextensioncontenttypeprovid",{"_index":5975,"t":{"2100":{"position":[[94,35]]},"3918":{"position":[[1429,35]]}}}],["getfileinfo",{"_index":5359,"t":{"1729":{"position":[[56,11]]}}}],["getfilenam",{"_index":8311,"t":{"3522":{"position":[[1065,11]]}}}],["getfilenamewithoutextens",{"_index":8151,"t":{"3432":{"position":[[4716,27]]}}}],["getfileprovid",{"_index":5967,"t":{"2094":{"position":[[22,15]]}}}],["getfirst",{"_index":7650,"t":{"3224":{"position":[[389,8]]},"3261":{"position":[[127,8]]}}}],["getframeworknam",{"_index":8515,"t":{"3692":{"position":[[115,16]]},"3938":{"position":[[1063,16]]}}}],["gethelptext",{"_index":4975,"t":{"1539":{"position":[[1113,11]]}}}],["gethttpproxi",{"_index":6036,"t":{"2204":{"position":[[16,12]]}}}],["getid",{"_index":3609,"t":{"820":{"position":[[19,5]]},"822":{"position":[[198,5],[242,5]]},"824":{"position":[[51,5],[228,5]]},"913":{"position":[[60,5],[157,5]]}}}],["getint",{"_index":7822,"t":{"3273":{"position":[[861,6]]}}}],["getint32",{"_index":2940,"t":{"560":{"position":[[431,8]]},"2848":{"position":[[1064,8]]}}}],["getjob",{"_index":6028,"t":{"2179":{"position":[[26,6]]},"3836":{"position":[[80,7],[249,7]]},"3840":{"position":[[214,6]]},"3844":{"position":[[720,6],[781,6],[1382,6]]},"3862":{"position":[[214,6]]}}}],["getjobbuild",{"_index":8929,"t":{"3819":{"position":[[101,13]]},"3868":{"position":[[27,13]]}}}],["getjobsofmodel",{"_index":8979,"t":{"3836":{"position":[[183,15],[305,15]]}}}],["getjsonseri",{"_index":5957,"t":{"2069":{"position":[[22,17]]},"2348":{"position":[[87,17],[504,17]]}}}],["getjsonserializeropt",{"_index":8336,"t":{"3547":{"position":[[598,24]]}}}],["getlist",{"_index":5094,"t":{"1594":{"position":[[52,7]]},"1596":{"position":[[76,7]]},"1631":{"position":[[155,7]]},"3224":{"position":[[443,7],[477,7]]},"3236":{"position":[[85,7],[184,7],[276,7],[534,7]]},"3258":{"position":[[185,7]]}}}],["getlocalipaddresstoipv4",{"_index":369,"t":{"40":{"position":[[23,23]]},"2249":{"position":[[31,23]]}}}],["getlocalipaddresstoipv6",{"_index":371,"t":{"40":{"position":[[73,23]]},"2249":{"position":[[89,23]]}}}],["getlocalvalu",{"_index":6137,"t":{"2319":{"position":[[131,13],[215,13]]},"2856":{"position":[[1846,13],[1930,13]]}}}],["getlong",{"_index":7823,"t":{"3273":{"position":[[879,7]]}}}],["getmetadata",{"_index":363,"t":{"34":{"position":[[28,11]]},"133":{"position":[[991,11]]},"2243":{"position":[[50,11],[280,11]]},"2591":{"position":[[190,11]]}}}],["getmodel",{"_index":9019,"t":{"3864":{"position":[[81,8]]}}}],["getmsrepositori",{"_index":5985,"t":{"2125":{"position":[[22,15]]},"2127":{"position":[[29,15]]},"3966":{"position":[[51,15]]}}}],["getmynam",{"_index":9605,"t":{"3944":{"position":[[613,9],[626,9]]}}}],["getnam",{"_index":3886,"t":{"1037":{"position":[[839,7]]},"1119":{"position":[[73,7],[137,7],[221,7],[308,7],[359,7]]},"1121":{"position":[[81,7],[145,7],[237,7],[332,7],[383,7]]},"1412":{"position":[[461,7],[550,7],[687,7],[1203,7],[1655,7],[1682,7],[1709,7],[1736,7],[2409,7],[2445,7],[2494,7]]},"3448":{"position":[[1304,7],[1353,7]]},"3466":{"position":[[1456,7]]},"3688":{"position":[[340,7],[365,7],[608,7]]},"3692":{"position":[[96,7],[154,7]]},"3938":{"position":[[1044,7],[1102,7]]},"3940":{"position":[[1228,7],[1253,7],[1496,7]]}}}],["getnewdbcontext",{"_index":2746,"t":{"494":{"position":[[484,15]]},"2119":{"position":[[19,15]]},"2121":{"position":[[26,15],[91,15]]},"3960":{"position":[[198,15]]},"3988":{"position":[[272,15]]},"3992":{"position":[[1315,15]]}}}],["getnextoccurr",{"_index":2639,"t":{"472":{"position":[[86,17]]},"474":{"position":[[118,17]]},"476":{"position":[[120,17]]},"478":{"position":[[133,17]]},"494":{"position":[[430,17],[561,18]]},"3806":{"position":[[73,17],[182,17],[1567,17],[2681,17],[2897,17]]}}}],["getnextrunjob",{"_index":8981,"t":{"3838":{"position":[[87,14],[308,14]]}}}],["getnextrunjobsofmodel",{"_index":8983,"t":{"3838":{"position":[[216,22],[378,22]]}}}],["getnextruntim",{"_index":8885,"t":{"3806":{"position":[[3201,14]]}}}],["getobject",{"_index":6217,"t":{"2352":{"position":[[14,9]]}}}],["getopenapigroup",{"_index":8566,"t":{"3704":{"position":[[363,16],[685,16]]},"3924":{"position":[[217,16],[3897,16],[4225,16]]}}}],["getopt",{"_index":5925,"t":{"2039":{"position":[[18,10]]},"2357":{"position":[[1454,10]]},"2379":{"position":[[1181,10]]},"2713":{"position":[[31,10],[177,10],[289,10],[371,10],[409,10],[1977,10]]},"2715":{"position":[[32,10],[129,10]]},"2717":{"position":[[409,10]]},"3708":{"position":[[2884,10],[3094,10]]},"3916":{"position":[[1558,10],[1729,10],[1890,10]]},"3952":{"position":[[214,10],[422,10]]},"3956":{"position":[[2228,10],[2434,10]]}}}],["getoptionsmonitor",{"_index":5928,"t":{"2039":{"position":[[79,17]]},"2713":{"position":[[204,17],[2247,17]]},"2717":{"position":[[371,17]]}}}],["getoptionssnapshot",{"_index":5930,"t":{"2039":{"position":[[147,18]]},"2713":{"position":[[238,18],[2108,18]]},"3964":{"position":[[459,18]]}}}],["getopton",{"_index":9181,"t":{"3916":{"position":[[2293,9]]}}}],["getoradd",{"_index":3464,"t":{"734":{"position":[[6331,8]]}}}],["getorcr",{"_index":1679,"t":{"231":{"position":[[424,11],[460,11]]},"233":{"position":[[42,11],[484,11]]}}}],["getorcreateasync",{"_index":1687,"t":{"233":{"position":[[194,16]]}}}],["getordin",{"_index":2938,"t":{"560":{"position":[[344,10]]}}}],["getoutput",{"_index":4088,"t":{"1263":{"position":[[156,9],[239,9],[353,9]]}}}],["getpagelist",{"_index":7655,"t":{"3224":{"position":[[587,11],[671,11],[968,11]]}}}],["getperson",{"_index":768,"t":{"114":{"position":[[147,9],[216,9]]},"828":{"position":[[20,10]]},"832":{"position":[[280,10],[323,10],[614,10]]},"834":{"position":[[58,10],[202,10]]},"1109":{"position":[[512,10],[539,10],[911,10],[945,10]]},"1111":{"position":[[76,10],[147,10],[237,10],[330,10],[388,10]]},"1113":{"position":[[76,10],[145,10],[235,10],[328,10],[384,10]]},"1115":{"position":[[79,10],[145,10],[238,10],[334,10],[387,10]]},"1117":{"position":[[144,10],[238,10],[342,10],[456,10],[580,10],[714,10],[858,10],[1012,10],[1832,10],[1929,10],[2036,10],[2153,10],[2280,10],[2417,10],[2564,10],[2721,10],[2865,10],[2962,10],[3069,10],[3186,10],[3313,10],[3450,10],[3597,10],[3754,10],[3857,10],[3934,10],[4021,10],[4118,10],[4225,10],[4342,10],[4469,10],[4606,10]]},"1160":{"position":[[613,9],[694,10],[1547,9],[1639,10]]},"1162":{"position":[[641,9],[728,10],[1623,9],[1721,10]]},"1164":{"position":[[362,9],[795,9]]},"1166":{"position":[[449,9],[1005,9]]},"1234":{"position":[[206,9],[338,9],[475,9],[605,9]]},"1236":{"position":[[209,9],[344,9],[484,9],[616,9]]},"1246":{"position":[[161,9]]},"1251":{"position":[[144,10],[207,10],[265,10]]},"1253":{"position":[[147,10],[213,10],[274,10]]},"1265":{"position":[[139,9]]},"1267":{"position":[[216,10]]},"1269":{"position":[[136,9]]},"1273":{"position":[[136,9]]},"1275":{"position":[[261,10]]},"1277":{"position":[[103,9],[168,9],[225,9]]},"1279":{"position":[[319,10],[464,10],[639,10],[691,10]]},"3446":{"position":[[144,9],[622,9],[691,9]]},"3452":{"position":[[1171,9],[1255,9]]},"3714":{"position":[[156,9]]},"3916":{"position":[[4167,9],[4251,9]]},"3928":{"position":[[1034,9],[1197,9],[1266,9]]},"3932":{"position":[[2079,10],[2177,9]]}}}],["getpersonasync",{"_index":4078,"t":{"1234":{"position":[[731,14]]},"1236":{"position":[[744,14]]}}}],["getpersonsbynam",{"_index":4101,"t":{"1279":{"position":[[395,16],[812,16]]}}}],["getphysicalfileprovid",{"_index":5353,"t":{"1726":{"position":[[70,23]]},"2090":{"position":[[22,23]]}}}],["getproperti",{"_index":2312,"t":{"369":{"position":[[105,11],[158,11],[206,11],[257,13],[694,11]]},"3783":{"position":[[349,11],[1282,13],[1344,11],[1400,11]]}}}],["getrefererurladdress",{"_index":731,"t":{"112":{"position":[[981,20]]},"1925":{"position":[[830,20]]}}}],["getreloadtoken",{"_index":2594,"t":{"453":{"position":[[207,14],[381,14]]}}}],["getremoteipaddresstoipv4",{"_index":372,"t":{"42":{"position":[[23,24]]},"112":{"position":[[840,24]]},"1925":{"position":[[689,24]]},"2251":{"position":[[31,24]]}}}],["getremoteipaddresstoipv6",{"_index":373,"t":{"42":{"position":[[74,24]]},"2251":{"position":[[90,24]]}}}],["getrepositori",{"_index":2846,"t":{"530":{"position":[[644,13]]},"1026":{"position":[[29,13],[74,13],[193,13]]},"1039":{"position":[[645,13]]},"1434":{"position":[[171,13]]},"1566":{"position":[[124,13]]},"1711":{"position":[[88,13],[446,13]]},"2103":{"position":[[20,13]]},"2105":{"position":[[26,13]]},"2107":{"position":[[27,13]]},"2123":{"position":[[20,13]]},"2476":{"position":[[190,13]]},"2478":{"position":[[300,13]]},"2831":{"position":[[639,13]]},"3968":{"position":[[695,13]]}}}],["getrequestdbcontext",{"_index":10441,"t":{"4000":{"position":[[536,19]]}}}],["getrequestservic",{"_index":10443,"t":{"4000":{"position":[[721,17]]},"4004":{"position":[[256,17]]}}}],["getrequesturladdress",{"_index":729,"t":{"112":{"position":[[913,20]]},"1925":{"position":[[762,20]]}}}],["getrequiredservic",{"_index":3428,"t":{"730":{"position":[[263,18]]},"732":{"position":[[186,18]]},"734":{"position":[[6706,18],[6847,18]]},"1811":{"position":[[610,18]]},"1823":{"position":[[571,18]]},"2037":{"position":[[148,18],[217,18]]},"3164":{"position":[[42,18]]},"3170":{"position":[[132,18],[223,18]]},"3399":{"position":[[579,18]]},"4000":{"position":[[112,18]]}}}],["getresponsehead",{"_index":2487,"t":{"417":{"position":[[280,17]]}}}],["getresult",{"_index":65,"t":{"3":{"position":[[639,9]]},"3597":{"position":[[137,9],[417,9]]}}}],["getrowpars",{"_index":2931,"t":{"560":{"position":[[145,12],[209,12],[275,12]]}}}],["getscalar",{"_index":7820,"t":{"3273":{"position":[[813,9]]}}}],["getschemanam",{"_index":7281,"t":{"2963":{"position":[[398,13],[514,13],[577,13]]},"2965":{"position":[[64,13],[140,13]]}}}],["getsect",{"_index":2534,"t":{"439":{"position":[[109,10]]},"453":{"position":[[139,10],[431,10]]}}}],["getselectcultur",{"_index":5998,"t":{"2155":{"position":[[13,16]]},"2526":{"position":[[121,16]]},"3966":{"position":[[1722,16]]}}}],["getserializeropt",{"_index":5958,"t":{"2075":{"position":[[19,20]]},"2345":{"position":[[753,20]]},"2357":{"position":[[890,20],[1275,20],[1418,20]]},"2379":{"position":[[875,20],[1077,20],[1145,20]]},"3547":{"position":[[643,20]]},"3970":{"position":[[154,20]]}}}],["getserializerset",{"_index":8579,"t":{"3708":{"position":[[1413,21],[1775,21],[2240,21]]}}}],["getservic",{"_index":54,"t":{"3":{"position":[[462,10]]},"218":{"position":[[165,10],[214,10]]},"530":{"position":[[715,10]]},"570":{"position":[[1107,10]]},"587":{"position":[[1931,10]]},"599":{"position":[[471,10]]},"734":{"position":[[6431,10],[6600,10]]},"747":{"position":[[894,10]]},"1039":{"position":[[716,10]]},"1383":{"position":[[141,10],[197,10]]},"1394":{"position":[[56,10]]},"1412":{"position":[[1278,10],[1352,10],[1499,10],[1585,10]]},"1424":{"position":[[777,10]]},"1428":{"position":[[94,10],[158,10]]},"1434":{"position":[[242,10],[285,10]]},"1711":{"position":[[66,10],[518,10],[599,10],[662,10],[704,10],[768,10]]},"1799":{"position":[[866,10]]},"2037":{"position":[[18,10],[79,10]]},"2476":{"position":[[261,10],[304,10]]},"2478":{"position":[[371,10],[414,10]]},"2589":{"position":[[575,10]]},"2831":{"position":[[710,10]]},"3166":{"position":[[139,10]]},"3215":{"position":[[765,10]]},"3224":{"position":[[193,10]]},"3791":{"position":[[1156,10],[1904,10]]},"3916":{"position":[[1577,10],[1760,10],[1816,10]]},"3966":{"position":[[1629,10]]},"4000":{"position":[[150,10],[647,10]]}}}],["getserviceprovid",{"_index":9711,"t":{"3960":{"position":[[603,18]]}}}],["getsetcooki",{"_index":9074,"t":{"3912":{"position":[[939,13]]}}}],["getsimplecli",{"_index":7778,"t":{"3258":{"position":[[601,15]]}}}],["getsingl",{"_index":7648,"t":{"3224":{"position":[[319,9]]}}}],["getsleepmillisecond",{"_index":2724,"t":{"490":{"position":[[117,20],[362,20]]},"492":{"position":[[703,20]]},"494":{"position":[[648,20]]},"2484":{"position":[[709,20]]},"2827":{"position":[[755,20]]},"2829":{"position":[[939,20]]},"3920":{"position":[[288,20]]}}}],["getsqldispatchproxi",{"_index":4072,"t":{"1231":{"position":[[13,19]]},"3992":{"position":[[1345,19]]}}}],["getsqlproxi",{"_index":5980,"t":{"2113":{"position":[[17,11]]},"3992":{"position":[[1370,11]]}}}],["getsqlrepositori",{"_index":3878,"t":{"1026":{"position":[[132,16]]},"2109":{"position":[[23,16]]},"2111":{"position":[[30,16]]}}}],["getstr",{"_index":1848,"t":{"253":{"position":[[462,9]]},"1729":{"position":[[241,9]]},"1801":{"position":[[1661,9]]},"2538":{"position":[[334,9],[415,9]]},"2848":{"position":[[1001,9],[1478,9]]},"3273":{"position":[[837,9]]}}}],["getstringasync",{"_index":8361,"t":{"3575":{"position":[[1013,14]]},"3581":{"position":[[730,14]]},"3583":{"position":[[46,14],[558,14]]}}}],["getstud",{"_index":4039,"t":{"1164":{"position":[[310,11],[743,11]]},"1166":{"position":[[397,11],[953,11]]}}}],["gettabl",{"_index":3605,"t":{"814":{"position":[[71,8],[136,8],[219,8],[305,8],[355,8]]},"816":{"position":[[79,8],[144,8],[235,8],[329,8],[379,8]]}}}],["gettablenam",{"_index":7458,"t":{"3126":{"position":[[376,12],[510,12]]}}}],["gettag",{"_index":8248,"t":{"3466":{"position":[[1554,7]]}}}],["gettenantid",{"_index":3793,"t":{"933":{"position":[[888,11]]},"2933":{"position":[[431,11],[499,11],[647,11],[708,11]]},"2935":{"position":[[502,11]]},"2937":{"position":[[599,11],[1359,11]]}}}],["gettest",{"_index":5116,"t":{"1609":{"position":[[200,7],[546,7]]}}}],["gettext",{"_index":6216,"t":{"2350":{"position":[[14,7]]}}}],["gettrigg",{"_index":9030,"t":{"3884":{"position":[[199,10]]}}}],["gettriggerbuild",{"_index":8931,"t":{"3819":{"position":[[261,18],[337,17]]},"3870":{"position":[[32,18]]},"3872":{"position":[[31,17]]}}}],["gettyp",{"_index":2972,"t":{"570":{"position":[[932,7],[1261,7]]}}}],["getus",{"_index":4108,"t":{"1295":{"position":[[202,7]]},"1607":{"position":[[136,7],[186,7]]}}}],["getuserid",{"_index":7574,"t":{"3189":{"position":[[172,9]]}}}],["getv1",{"_index":5144,"t":{"1621":{"position":[[598,5],[873,5]]}}}],["getv2",{"_index":5146,"t":{"1621":{"position":[[647,5]]}}}],["getv2_1",{"_index":5145,"t":{"1621":{"position":[[647,7]]}}}],["getvalu",{"_index":3597,"t":{"810":{"position":[[72,8],[137,8],[221,8],[308,8],[358,8]]},"812":{"position":[[80,8],[145,8],[237,8],[332,8],[382,8]]},"1242":{"position":[[168,8],[244,8]]},"1259":{"position":[[141,8],[199,8],[249,8]]},"1261":{"position":[[139,8],[195,8],[246,8]]},"1267":{"position":[[146,8]]},"1275":{"position":[[191,8]]},"1279":{"position":[[257,8],[485,8],[517,8],[628,8],[673,8]]},"1281":{"position":[[113,8]]}}}],["getvalueasync",{"_index":4085,"t":{"1242":{"position":[[330,13]]}}}],["getvers",{"_index":4973,"t":{"1539":{"position":[[905,10]]},"1559":{"position":[[32,10]]},"1605":{"position":[[136,10]]},"1613":{"position":[[179,10]]},"1615":{"position":[[218,10]]},"1617":{"position":[[261,10],[503,10],[780,10],[1046,10]]},"1619":{"position":[[384,10]]},"1649":{"position":[[211,10]]},"1651":{"position":[[179,10]]},"1653":{"position":[[256,10]]},"3688":{"position":[[429,10],[688,10]]},"3940":{"position":[[1317,10],[1576,10]]}}}],["getversionv2",{"_index":5189,"t":{"1655":{"position":[[293,12]]}}}],["getversionv2_0_0",{"_index":5188,"t":{"1655":{"position":[[293,16]]}}}],["getvperson",{"_index":4142,"t":{"1368":{"position":[[591,10]]}}}],["getwordsasync",{"_index":7060,"t":{"2790":{"position":[[724,13],[783,13]]},"2796":{"position":[[281,13]]}}}],["getwork",{"_index":6043,"t":{"2220":{"position":[[24,10]]},"2222":{"position":[[23,9]]},"2460":{"position":[[24,10]]},"2462":{"position":[[23,9]]}}}],["getxxx",{"_index":10281,"t":{"3992":{"position":[[3120,6]]}}}],["getxxx2async",{"_index":8330,"t":{"3539":{"position":[[362,12],[475,12]]}}}],["getxxxasync",{"_index":8256,"t":{"3483":{"position":[[187,11],[863,11]]},"3535":{"position":[[121,11]]},"3537":{"position":[[160,11]]},"3539":{"position":[[270,11]]},"3541":{"position":[[125,11],[242,11],[327,11],[449,11],[657,11]]},"3543":{"position":[[409,11],[597,11]]}}}],["gi",{"_index":2045,"t":{"310":{"position":[[531,2],[634,2]]}}}],["git",{"_index":2351,"t":{"386":{"position":[[6,3],[16,3],[63,3]]},"1379":{"position":[[188,3],[201,3],[247,3],[257,3],[314,3],[343,3]]},"1488":{"position":[[181,3]]},"1495":{"position":[[181,3]]}}}],["gitbook",{"_index":1458,"t":{"196":{"position":[[49,7]]},"1505":{"position":[[40,7],[96,7]]},"2678":{"position":[[49,7]]}}}],["gite",{"_index":519,"t":{"89":{"position":[[0,5],[14,5]]},"148":{"position":[[170,5]]},"168":{"position":[[71,5]]},"170":{"position":[[8,5]]},"331":{"position":[[146,5]]},"386":{"position":[[34,5]]},"397":{"position":[[23,5],[94,5],[140,5],[308,5]]},"399":{"position":[[73,5],[174,5],[325,5],[426,5],[476,5],[766,5]]},"401":{"position":[[26,5]]},"655":{"position":[[529,5]]},"734":{"position":[[8222,5]]},"917":{"position":[[20,5]]},"1509":{"position":[[23,5]]},"1511":{"position":[[75,5]]},"1551":{"position":[[736,5],[797,5]]},"1691":{"position":[[42,5]]},"2501":{"position":[[48,5],[144,5]]},"2503":{"position":[[26,5]]},"2532":{"position":[[198,5]]},"2597":{"position":[[89,5]]},"2649":{"position":[[239,5]]},"2768":{"position":[[1329,5]]},"2977":{"position":[[101,5]]},"2987":{"position":[[101,5]]},"2997":{"position":[[101,5]]},"3005":{"position":[[101,5]]},"3019":{"position":[[101,5]]},"3027":{"position":[[101,5]]},"3035":{"position":[[101,5]]},"3043":{"position":[[101,5]]},"3051":{"position":[[101,5]]},"3059":{"position":[[101,5]]},"3065":{"position":[[226,5],[326,5]]},"3131":{"position":[[338,5]]},"3642":{"position":[[300,5],[400,5]]},"3702":{"position":[[128,5],[1401,5],[1416,5],[1711,5],[1727,5],[2029,5],[2120,5],[2438,5]]},"3706":{"position":[[1974,5],[2074,5]]},"3910":{"position":[[322,5]]},"3912":{"position":[[140,5],[214,5],[288,5],[362,5],[436,5],[510,5],[584,5],[658,5]]},"3914":{"position":[[25,5],[99,5],[173,5],[247,5],[321,5],[395,5],[469,5],[543,5],[617,5],[691,5]]},"3916":{"position":[[25,5],[99,5],[173,5],[247,5],[321,5],[395,5],[469,5],[543,5],[617,5]]},"3918":{"position":[[25,5],[99,5],[173,5],[247,5],[321,5],[395,5],[469,5],[543,5],[617,5],[691,5]]},"3920":{"position":[[25,5],[99,5]]},"3926":{"position":[[47,5]]},"3932":{"position":[[1626,5]]},"3934":{"position":[[2298,5],[2582,5]]}}}],["gitflow",{"_index":2361,"t":{"392":{"position":[[9,7]]}}}],["githash",{"_index":4442,"t":{"1488":{"position":[[172,7]]},"1495":{"position":[[172,7]]}}}],["github",{"_index":521,"t":{"89":{"position":[[43,6],[58,6]]},"168":{"position":[[77,6]]},"170":{"position":[[35,6]]},"239":{"position":[[262,6]]},"331":{"position":[[50,6]]},"540":{"position":[[95,6]]},"615":{"position":[[692,6]]},"846":{"position":[[1018,6]]},"879":{"position":[[88,6]]},"919":{"position":[[47,6]]},"1440":{"position":[[961,6]]},"2497":{"position":[[254,6]]},"2731":{"position":[[113,6]]},"2768":{"position":[[112,6],[286,6],[346,6],[698,6],[728,6],[1230,6],[1438,6],[1476,6]]},"3209":{"position":[[55,6]]},"3250":{"position":[[54,6]]},"3307":{"position":[[207,6]]},"3401":{"position":[[207,6]]},"3498":{"position":[[51,6],[86,6],[139,6],[209,6],[329,6],[361,6]]},"3543":{"position":[[51,6],[86,6],[139,6],[209,6],[373,6],[448,6]]},"3575":{"position":[[146,6],[199,6],[269,6],[430,6],[624,6],[974,6]]},"3577":{"position":[[180,6]]},"3579":{"position":[[434,6]]},"3581":{"position":[[193,6],[272,6]]},"3583":{"position":[[298,6],[377,6]]},"3587":{"position":[[297,6]]},"3589":{"position":[[282,6]]},"3591":{"position":[[72,6]]},"3914":{"position":[[2315,6]]},"3940":{"position":[[483,6]]}}}],["githubcli",{"_index":8369,"t":{"3581":{"position":[[40,12],[109,12],[438,12],[523,12],[537,12],[576,12],[589,12],[606,12],[621,12],[710,12]]},"3583":{"position":[[139,12],[214,12],[641,12],[739,12],[792,12],[809,12],[824,12],[913,12]]}}}],["gitwentao",{"_index":9482,"t":{"3932":{"position":[[1204,9]]}}}],["gl",{"_index":6554,"t":{"2559":{"position":[[1162,2],[1170,2]]}}}],["global",{"_index":139,"t":{"11":{"position":[[66,6],[87,6],[125,6],[161,6],[197,6],[238,6],[280,6],[312,6],[351,6],[373,6],[422,6],[462,6],[501,6],[538,6],[582,6],[640,6],[857,6],[869,6],[882,6]]},"13":{"position":[[112,6],[125,6],[141,6],[154,6],[190,6],[203,6],[222,6],[235,6],[256,6],[269,6],[294,6],[307,6],[333,6],[346,6]]},"722":{"position":[[22,6]]},"1516":{"position":[[86,6]]},"1547":{"position":[[117,6],[333,6],[405,6],[496,6]]},"1551":{"position":[[1176,6]]},"2294":{"position":[[66,6],[87,6],[125,6],[161,6],[197,6],[238,6],[280,6],[312,6],[351,6],[380,6],[402,6],[451,6],[491,6],[530,6],[567,6],[611,6],[669,6],[905,6],[917,6],[930,6]]},"2296":{"position":[[112,6],[125,6],[141,6],[154,6],[190,6],[203,6],[222,6],[235,6],[256,6],[269,6],[294,6],[307,6],[333,6],[346,6]]},"2555":{"position":[[228,13]]},"2579":{"position":[[68,13]]},"2581":{"position":[[104,13],[607,13]]},"2587":{"position":[[13,13]]},"2589":{"position":[[32,13]]},"2742":{"position":[[121,6]]},"3080":{"position":[[207,6]]},"3704":{"position":[[882,6]]},"3924":{"position":[[4422,6]]}}}],["globaladdhead",{"_index":5814,"t":{"1907":{"position":[[237,15]]}}}],["globalaxio",{"_index":2071,"t":{"314":{"position":[[247,11]]}}}],["globalen",{"_index":6087,"t":{"2285":{"position":[[112,13]]},"3448":{"position":[[311,13],[397,13],[461,13]]}}}],["globalset",{"_index":6816,"t":{"2696":{"position":[[38,14],[99,14]]}}}],["globalstorag",{"_index":6384,"t":{"2512":{"position":[[70,13]]}}}],["globalus",{"_index":86,"t":{"5":{"position":[[26,12],[57,12],[96,12]]},"7":{"position":[[22,12],[53,12],[92,12]]},"9":{"position":[[3,12],[51,12],[91,12]]},"11":{"position":[[24,12],[765,12],[819,12]]},"13":{"position":[[63,12],[400,12]]},"2290":{"position":[[22,12],[53,12],[92,12]]},"2292":{"position":[[3,12],[51,12],[91,12]]},"2294":{"position":[[24,12],[813,12],[867,12]]},"2296":{"position":[[63,12],[400,12]]},"2298":{"position":[[27,11]]},"3934":{"position":[[1099,12]]},"3936":{"position":[[833,12]]},"3938":{"position":[[728,12]]},"3940":{"position":[[555,12]]}}}],["good",{"_index":7417,"t":{"3108":{"position":[[25,5],[42,5],[156,5]]},"3110":{"position":[[22,5]]}}}],["goods_id",{"_index":7416,"t":{"3108":{"position":[[25,8],[42,8],[156,8]]},"3110":{"position":[[22,8]]}}}],["goto",{"_index":7089,"t":{"2829":{"position":[[535,4]]}}}],["gp",{"_index":7516,"t":{"3142":{"position":[[141,3]]}}}],["gr",{"_index":6567,"t":{"2559":{"position":[[1300,2]]}}}],["grate",{"_index":8539,"t":{"3702":{"position":[[1769,8]]}}}],["great",{"_index":4809,"t":{"1511":{"position":[[2755,5]]}}}],["grep",{"_index":4471,"t":{"1488":{"position":[[1051,4]]},"1499":{"position":[[443,4]]}}}],["group",{"_index":2137,"t":{"325":{"position":[[195,6],[217,6]]},"866":{"position":[[148,5],[450,5]]},"1641":{"position":[[229,6]]},"1657":{"position":[[0,6],[35,6],[105,6],[124,6]]},"3063":{"position":[[519,5],[1388,6],[1472,5]]},"3065":{"position":[[63,5]]},"3183":{"position":[[8,5]]},"3185":{"position":[[8,6]]},"3640":{"position":[[350,5],[582,5],[617,5],[652,5]]},"3642":{"position":[[137,5]]},"3658":{"position":[[139,5]]},"3706":{"position":[[511,5],[1399,6],[1483,5],[1811,5]]},"3785":{"position":[[1167,5]]},"3836":{"position":[[211,5]]},"3838":{"position":[[263,5]]},"3848":{"position":[[62,5]]},"3850":{"position":[[39,5]]},"3852":{"position":[[39,5]]},"3854":{"position":[[40,5]]},"3858":{"position":[[147,5]]},"3938":{"position":[[820,6]]}}}],["group1",{"_index":7343,"t":{"3065":{"position":[[72,6]]},"3638":{"position":[[162,6],[250,6],[367,6],[449,6]]},"3640":{"position":[[117,6],[258,6],[591,6]]},"3642":{"position":[[146,6]]},"3658":{"position":[[148,6]]},"3706":{"position":[[1820,6]]},"3781":{"position":[[178,6]]},"3836":{"position":[[258,6],[322,6]]},"3838":{"position":[[324,6],[402,6]]},"3848":{"position":[[124,6]]},"3850":{"position":[[76,6]]},"3852":{"position":[[76,6]]},"3854":{"position":[[78,6]]},"3858":{"position":[[186,6]]}}}],["group2",{"_index":8482,"t":{"3638":{"position":[[538,6],[642,6]]},"3640":{"position":[[626,6]]}}}],["group3",{"_index":8481,"t":{"3638":{"position":[[374,6],[459,6]]},"3640":{"position":[[268,6],[661,6]]}}}],["group_nam",{"_index":8828,"t":{"3785":{"position":[[1167,10]]}}}],["groupbi",{"_index":3662,"t":{"866":{"position":[[44,7]]}}}],["groupexcept",{"_index":7569,"t":{"3187":{"position":[[8,11]]}}}],["groupid",{"_index":5625,"t":{"1803":{"position":[[5292,7]]}}}],["groupinfo",{"_index":8565,"t":{"3704":{"position":[[321,9],[415,9],[440,9],[643,9],[737,9],[762,9]]},"3924":{"position":[[3855,9],[3949,9],[3974,9],[4183,9],[4277,9],[4302,9]]}}}],["groupnam",{"_index":8715,"t":{"3770":{"position":[[468,9],[1850,9],[3514,9],[5166,9]]},"3777":{"position":[[83,9]]},"3779":{"position":[[650,9],[1000,9],[1473,9]]},"3785":{"position":[[125,9],[847,9],[1551,9]]},"3817":{"position":[[634,9],[1676,9]]},"3821":{"position":[[153,9]]},"3896":{"position":[[78,9]]}}}],["groupopenapiinfo",{"_index":7317,"t":{"3063":{"position":[[461,17]]},"3065":{"position":[[38,17]]},"3640":{"position":[[557,17]]},"3642":{"position":[[112,17]]},"3658":{"position":[[114,17]]},"3706":{"position":[[453,17],[1786,17]]}}}],["grpc",{"_index":9920,"t":{"3974":{"position":[[477,4]]}}}],["gt",{"_index":6654,"t":{"2559":{"position":[[2240,2]]}}}],["gu",{"_index":6568,"t":{"2559":{"position":[[1310,2],[1322,2]]}}}],["gui",{"_index":3324,"t":{"679":{"position":[[160,3]]},"685":{"position":[[576,3]]},"688":{"position":[[14,3]]}}}],["guid",{"_index":295,"t":{"19":{"position":[[379,4],[425,4]]},"550":{"position":[[203,4],[210,4],[325,4]]},"1635":{"position":[[359,4],[364,4],[373,4]]},"1681":{"position":[[24,4]]},"1741":{"position":[[538,4],[561,4],[1297,4],[1320,4],[2133,4],[2156,4]]},"2328":{"position":[[15,4]]},"2331":{"position":[[16,4],[542,4]]},"2929":{"position":[[428,4],[600,4]]},"2933":{"position":[[479,4]]},"2935":{"position":[[550,4]]},"2937":{"position":[[647,4]]},"2945":{"position":[[428,4],[657,4]]},"2959":{"position":[[428,4],[626,4]]},"2971":{"position":[[166,4]]},"3924":{"position":[[1647,4]]},"3934":{"position":[[2319,5]]},"3966":{"position":[[499,4]]},"3968":{"position":[[225,4]]},"3976":{"position":[[102,4]]}}}],["guid2",{"_index":6162,"t":{"2331":{"position":[[56,5],[623,5]]}}}],["guidobject",{"_index":6169,"t":{"2331":{"position":[[426,10]]}}}],["gujarati",{"_index":6569,"t":{"2559":{"position":[[1313,8],[1328,8]]}}}],["gun",{"_index":6970,"t":{"2768":{"position":[[1066,3]]}}}],["gvp",{"_index":2371,"t":{"397":{"position":[[109,3]]}}}],["gz",{"_index":4399,"t":{"1483":{"position":[[242,2],[404,2],[430,2],[461,2],[776,2]]},"1495":{"position":[[1169,2]]},"1499":{"position":[[302,2]]}}}],["gzip",{"_index":8321,"t":{"3530":{"position":[[21,4]]},"3569":{"position":[[22,4]]},"3944":{"position":[[120,4]]}}}],["h",{"_index":4440,"t":{"1488":{"position":[[105,1]]},"1495":{"position":[[105,1]]},"1511":{"position":[[1240,1]]},"1539":{"position":[[114,1],[973,1]]},"1541":{"position":[[327,1]]},"1543":{"position":[[370,1],[467,1]]}}}],["han",{"_index":416,"t":{"51":{"position":[[135,4]]},"62":{"position":[[135,4]]},"75":{"position":[[135,4]]},"2555":{"position":[[121,4]]},"3934":{"position":[[2774,4]]}}}],["handl",{"_index":7579,"t":{"3189":{"position":[[548,8]]}}}],["handleasync",{"_index":1083,"t":{"135":{"position":[[53,11],[328,11]]},"146":{"position":[[493,11]]}}}],["handler",{"_index":1057,"t":{"133":{"position":[[55,7]]},"146":{"position":[[373,7]]},"530":{"position":[[847,7]]},"1039":{"position":[[848,7]]},"1539":{"position":[[591,7],[819,7],[1048,7],[1739,7],[1798,7]]},"1711":{"position":[[880,7]]},"1809":{"position":[[283,7],[362,7]]},"1951":{"position":[[796,7]]},"2182":{"position":[[302,7]]},"2243":{"position":[[11,7]]},"2478":{"position":[[527,7]]},"3950":{"position":[[613,7]]},"3962":{"position":[[1148,7]]},"3976":{"position":[[213,7]]}}}],["handlermethod",{"_index":5900,"t":{"1951":{"position":[[508,13]]}}}],["handlewriteerror",{"_index":8147,"t":{"3432":{"position":[[4477,16],[4643,16]]},"3434":{"position":[[2856,16]]}}}],["hangfir",{"_index":9873,"t":{"3968":{"position":[[544,8]]}}}],["hant",{"_index":6422,"t":{"2555":{"position":[[141,4]]}}}],["happen",{"_index":8538,"t":{"3702":{"position":[[1688,7]]}}}],["hascharset",{"_index":3723,"t":{"897":{"position":[[579,10]]},"1309":{"position":[[743,10]]}}}],["hascolumnnam",{"_index":3384,"t":{"696":{"position":[[3035,13]]}}}],["hasdata",{"_index":3689,"t":{"877":{"position":[[1306,7]]},"1145":{"position":[[298,7]]},"1147":{"position":[[189,7]]},"1151":{"position":[[267,7]]},"2929":{"position":[[324,7]]},"2945":{"position":[[324,7]]},"2959":{"position":[[324,7]]}}}],["hasdbfunct",{"_index":3620,"t":{"832":{"position":[[594,13]]}}}],["hasforeignkey",{"_index":3381,"t":{"696":{"position":[[2086,13]]},"877":{"position":[[1053,13]]}}}],["hash",{"_index":7414,"t":{"3106":{"position":[[44,4],[70,4]]},"3108":{"position":[[5,4]]},"3112":{"position":[[4,4],[20,4]]}}}],["hashset",{"_index":3370,"t":{"696":{"position":[[1511,7]]}}}],["hasindex",{"_index":3376,"t":{"696":{"position":[[1970,8],[2934,8]]},"1779":{"position":[[515,8]]},"1781":{"position":[[367,8]]}}}],["haskey",{"_index":5476,"t":{"1779":{"position":[[482,6]]},"1781":{"position":[[334,6]]}}}],["hasmani",{"_index":3682,"t":{"877":{"position":[[1002,7]]}}}],["hasmaxlength",{"_index":3390,"t":{"696":{"position":[[4655,12]]}}}],["hasnokey",{"_index":3386,"t":{"696":{"position":[[4516,8]]},"832":{"position":[[569,8]]}}}],["hason",{"_index":3379,"t":{"696":{"position":[[2031,6]]}}}],["hasqueryfilt",{"_index":3634,"t":{"844":{"position":[[580,14]]},"846":{"position":[[887,14]]},"2935":{"position":[[707,14]]},"2937":{"position":[[804,14]]}}}],["hastrigg",{"_index":3275,"t":{"655":{"position":[[297,10],[458,10]]}}}],["head",{"_index":4445,"t":{"1488":{"position":[[203,4]]},"1495":{"position":[[203,4]]},"1576":{"position":[[266,4]]},"1580":{"position":[[472,4]]},"1600":{"position":[[45,4]]},"1609":{"position":[[26,4],[263,4]]},"1615":{"position":[[343,4]]},"1631":{"position":[[317,4],[511,4],[677,4]]},"1661":{"position":[[399,4],[1291,4]]},"3023":{"position":[[396,4],[1288,4]]},"3483":{"position":[[477,4],[506,4],[1251,4]]},"3486":{"position":[[399,4],[452,4]]},"3535":{"position":[[526,4],[535,4],[564,4]]}}}],["headasync",{"_index":8267,"t":{"3483":{"position":[[1257,9]]},"3486":{"position":[[458,9]]}}}],["header",{"_index":261,"t":{"15":{"position":[[332,7],[441,7],[476,7]]},"17":{"position":[[326,7],[435,7],[470,7]]},"19":{"position":[[854,7]]},"144":{"position":[[426,7],[506,7]]},"417":{"position":[[54,6],[90,7]]},"419":{"position":[[336,6]]},"1629":{"position":[[155,6]]},"1739":{"position":[[499,7],[608,7],[643,7]]},"2569":{"position":[[63,7]]},"2995":{"position":[[31,6],[67,7]]},"3539":{"position":[[60,7],[85,7],[218,7],[384,7],[510,7]]},"3601":{"position":[[1214,7]]},"3650":{"position":[[279,6],[363,6]]},"3704":{"position":[[944,7]]},"3924":{"position":[[4484,7]]},"3934":{"position":[[877,7]]},"3968":{"position":[[286,7]]}}}],["headxxxasync",{"_index":8261,"t":{"3483":{"position":[[527,12]]},"3535":{"position":[[598,12]]}}}],["health",{"_index":4357,"t":{"1468":{"position":[[347,6]]}}}],["heart",{"_index":6953,"t":{"2768":{"position":[[851,5]]}}}],["heart_thousand",{"_index":6952,"t":{"2768":{"position":[[851,14]]}}}],["height",{"_index":5130,"t":{"1611":{"position":[[709,6]]}}}],["hello",{"_index":70,"t":{"3":{"position":[[827,5]]},"1424":{"position":[[373,5],[1992,5]]},"1524":{"position":[[66,5],[94,5]]},"1526":{"position":[[11,5],[69,5]]},"1530":{"position":[[12,5],[74,5]]},"1535":{"position":[[249,5]]},"1539":{"position":[[27,5],[68,5],[481,5],[672,5],[1126,5]]},"1543":{"position":[[7,5],[134,5]]},"1547":{"position":[[231,5]]},"1549":{"position":[[342,5]]},"1551":{"position":[[410,5]]},"1557":{"position":[[974,5]]},"1584":{"position":[[278,5],[487,5]]},"2149":{"position":[[22,5]]},"2530":{"position":[[115,5]]},"2538":{"position":[[54,5],[67,5],[91,5],[259,5],[324,5],[367,5],[388,5],[511,5],[548,5],[570,5]]},"2567":{"position":[[62,5]]},"2571":{"position":[[10,5],[121,5]]},"2872":{"position":[[105,5]]},"2887":{"position":[[367,5]]},"2903":{"position":[[104,5]]},"3194":{"position":[[612,5]]},"3702":{"position":[[929,5],[2796,5]]},"3734":{"position":[[323,5],[395,5]]},"3736":{"position":[[37,5],[87,5]]},"3738":{"position":[[39,5],[178,5]]},"3740":{"position":[[167,5],[306,5],[530,5],[669,5]]},"3750":{"position":[[257,5],[433,5]]},"3924":{"position":[[2297,5]]},"3932":{"position":[[2679,5],[2703,5]]},"3934":{"position":[[1317,5]]}}}],["hellofurion",{"_index":7152,"t":{"2864":{"position":[[90,11]]},"2866":{"position":[[22,11]]},"2881":{"position":[[613,11]]},"2889":{"position":[[322,11]]}}}],["hellosean1025",{"_index":6376,"t":{"2497":{"position":[[240,13]]}}}],["helloservic",{"_index":52,"t":{"3":{"position":[[443,12],[509,12],[749,12]]},"2872":{"position":[[60,12]]},"2887":{"position":[[322,12]]},"3702":{"position":[[868,12]]},"3934":{"position":[[1272,12],[1734,12]]}}}],["hellotool",{"_index":4946,"t":{"1532":{"position":[[68,10]]},"1539":{"position":[[356,10]]},"1541":{"position":[[245,10],[352,10],[388,10]]},"1543":{"position":[[43,10],[160,10],[284,10],[405,10]]},"1547":{"position":[[33,10],[145,10],[159,10],[191,10],[361,10],[412,10]]},"1549":{"position":[[30,10],[276,10],[441,10],[483,10]]}}}],["help",{"_index":4960,"t":{"1539":{"position":[[120,4],[978,4],[1008,4]]},"1543":{"position":[[376,4]]},"3323":{"position":[[565,4]]}}}],["helper",{"_index":7467,"t":{"3131":{"position":[[285,7]]}}}],["helphandl",{"_index":4974,"t":{"1539":{"position":[[1068,11]]}}}],["here",{"_index":8529,"t":{"3702":{"position":[[747,4]]}}}],["hh",{"_index":5965,"t":{"2087":{"position":[[73,2]]},"2361":{"position":[[203,2],[295,2],[600,2]]},"2398":{"position":[[74,2],[242,2]]},"2400":{"position":[[105,2]]},"2402":{"position":[[176,2]]},"2406":{"position":[[319,2],[626,2]]},"2409":{"position":[[113,2]]},"2411":{"position":[[101,2]]},"2413":{"position":[[101,2]]},"2415":{"position":[[306,2]]},"2426":{"position":[[122,2]]},"2428":{"position":[[124,2]]},"2430":{"position":[[108,2]]},"2432":{"position":[[108,2]]},"2434":{"position":[[310,2],[647,2]]},"2438":{"position":[[178,2]]},"2440":{"position":[[214,2],[587,2]]},"2442":{"position":[[419,2],[651,2],[924,2],[1207,2],[1441,2],[1698,2],[1926,2]]},"2468":{"position":[[142,2]]},"2470":{"position":[[200,2]]},"2472":{"position":[[331,2]]},"2751":{"position":[[291,2]]},"3430":{"position":[[3756,2]]},"3432":{"position":[[4973,2]]}}}],["hi",{"_index":6574,"t":{"2559":{"position":[[1362,2],[1370,2]]}}}],["hibern",{"_index":8768,"t":{"3772":{"position":[[672,11]]},"3850":{"position":[[389,11]]},"3852":{"position":[[507,11]]},"3854":{"position":[[334,11]]},"3856":{"position":[[229,11]]},"3874":{"position":[[322,11]]},"3876":{"position":[[439,11]]}}}],["hideerrorcod",{"_index":5754,"t":{"1885":{"position":[[0,13]]},"3009":{"position":[[32,13]]}}}],["hideserv",{"_index":7323,"t":{"3063":{"position":[[704,11]]},"3674":{"position":[[71,11]]},"3706":{"position":[[696,11]]}}}],["hk",{"_index":6483,"t":{"2559":{"position":[[538,2]]}}}],["hmacsha1",{"_index":5255,"t":{"1685":{"position":[[485,8]]}}}],["hmacsha256",{"_index":5250,"t":{"1685":{"position":[[359,10],[399,10],[494,10]]},"2132":{"position":[[476,10]]}}}],["hmacsha512",{"_index":5256,"t":{"1685":{"position":[[505,10]]}}}],["hn",{"_index":6656,"t":{"2559":{"position":[[2256,2]]}}}],["hnli",{"_index":4850,"t":{"1511":{"position":[[3429,4]]}}}],["hoa",{"_index":1459,"t":{"196":{"position":[[60,3]]},"587":{"position":[[148,3]]},"1505":{"position":[[51,3],[107,3]]},"2678":{"position":[[60,3]]}}}],["home",{"_index":952,"t":{"125":{"position":[[243,4]]},"129":{"position":[[324,4]]},"1483":{"position":[[503,4]]},"1485":{"position":[[165,4]]},"1488":{"position":[[820,4]]},"1495":{"position":[[764,4],[993,4],[1045,4],[1101,4]]},"1511":{"position":[[3422,6]]},"2848":{"position":[[548,4]]},"3144":{"position":[[618,4]]},"3162":{"position":[[326,4]]},"3215":{"position":[[900,4]]},"3265":{"position":[[171,4]]},"3267":{"position":[[687,4]]},"3269":{"position":[[583,4]]},"3271":{"position":[[268,4]]},"3686":{"position":[[222,4],[253,4]]}}}],["homecontrol",{"_index":1746,"t":{"237":{"position":[[1196,14]]},"2235":{"position":[[77,14]]},"3162":{"position":[[49,14],[145,14]]},"3426":{"position":[[99,14],[137,14]]},"3686":{"position":[[823,14]]}}}],["homing_hnli",{"_index":4849,"t":{"1511":{"position":[[3422,11]]}}}],["host",{"_index":1361,"t":{"190":{"position":[[186,4]]},"202":{"position":[[122,7],[158,7],[370,4]]},"204":{"position":[[188,7]]},"216":{"position":[[198,7],[590,7],[674,7]]},"220":{"position":[[664,7]]},"338":{"position":[[96,7],[180,7]]},"404":{"position":[[268,4]]},"411":{"position":[[99,7],[183,7]]},"455":{"position":[[436,4]]},"461":{"position":[[1150,4]]},"520":{"position":[[349,4],[452,4]]},"688":{"position":[[223,7]]},"901":{"position":[[377,4],[480,4]]},"1315":{"position":[[377,4],[480,4]]},"1503":{"position":[[62,4]]},"1667":{"position":[[115,4]]},"1977":{"position":[[27,7],[63,7],[264,4]]},"1979":{"position":[[63,7],[189,7]]},"2055":{"position":[[320,7]]},"2269":{"position":[[107,7],[143,7],[355,4]]},"2501":{"position":[[300,7]]},"2711":{"position":[[118,7]]},"2776":{"position":[[93,7],[129,7],[343,4]]},"2805":{"position":[[141,7]]},"2813":{"position":[[152,7],[799,7],[1002,4]]},"2817":{"position":[[301,7]]},"2819":{"position":[[157,7],[360,4]]},"2821":{"position":[[188,7],[391,4]]},"2836":{"position":[[102,7],[247,7],[450,4],[1330,7],[1460,7],[1663,4]]},"2862":{"position":[[82,4]]},"2881":{"position":[[546,7]]},"2887":{"position":[[141,7]]},"2889":{"position":[[255,7]]},"2897":{"position":[[150,4],[195,4],[278,7],[506,4],[624,4]]},"2899":{"position":[[173,4],[318,7],[411,4],[455,4],[552,4],[571,4]]},"2910":{"position":[[154,6]]},"2929":{"position":[[495,4],[667,4]]},"2945":{"position":[[495,4],[724,4]]},"2959":{"position":[[495,4],[693,4]]},"2971":{"position":[[241,4]]},"3144":{"position":[[131,7],[215,7]]},"3166":{"position":[[68,4],[125,4],[181,4],[258,4]]},"3373":{"position":[[204,7]]},"3399":{"position":[[219,7],[775,4],[790,4],[796,4]]},"3430":{"position":[[56,6],[99,7],[177,7],[254,7],[338,7],[358,7],[407,7],[537,4],[681,7],[943,7],[1349,7],[1766,7],[1989,4],[2527,6],[2604,7],[2735,7],[2865,7],[2986,7],[3009,7],[3092,7],[3872,6],[3947,7],[4060,7],[4172,7],[4291,7],[4314,7],[4395,7]]},"3432":{"position":[[2743,6],[2821,7],[2942,7],[2964,7],[3048,7],[5089,6],[5164,7],[5277,7],[5389,7],[5508,7],[5531,7],[5612,7]]},"3601":{"position":[[160,6],[237,7],[352,7],[466,7],[587,7],[610,7],[693,7]]},"3630":{"position":[[152,7],[236,7]]},"3772":{"position":[[649,6]]},"3850":{"position":[[366,6]]},"3852":{"position":[[484,6]]},"3854":{"position":[[311,6]]},"3856":{"position":[[206,6]]},"3874":{"position":[[299,6]]},"3876":{"position":[[416,6]]},"3910":{"position":[[1145,7],[1219,4],[1241,4],[1327,4],[1346,4]]},"3932":{"position":[[1782,7]]},"3978":{"position":[[1082,4]]}}}],["hostbuild",{"_index":7172,"t":{"2897":{"position":[[650,11],[665,11]]}}}],["hostcontext",{"_index":7081,"t":{"2813":{"position":[[1054,11]]},"2819":{"position":[[422,11]]},"2821":{"position":[[453,11]]},"2836":{"position":[[533,11],[1739,11]]}}}],["hostedservic",{"_index":8973,"t":{"3832":{"position":[[3082,14],[4843,14]]}}}],["hostenviron",{"_index":281,"t":{"19":{"position":[[152,15]]},"1741":{"position":[[221,15],[1030,15],[1883,15]]},"2025":{"position":[[29,15]]},"2043":{"position":[[26,15]]},"2045":{"position":[[22,15]]},"2053":{"position":[[26,15]]},"2055":{"position":[[36,15],[104,15],[173,15],[242,15]]},"2587":{"position":[[313,15]]},"2589":{"position":[[344,15]]}}}],["hostingcontext",{"_index":2601,"t":{"455":{"position":[[496,14]]}}}],["hostingstartup",{"_index":8041,"t":{"3401":{"position":[[112,14]]}}}],["hostingstartupassembl",{"_index":9618,"t":{"3948":{"position":[[309,24]]}}}],["hou",{"_index":4605,"t":{"1511":{"position":[[522,3]]}}}],["hour",{"_index":3628,"t":{"836":{"position":[[273,4]]},"2418":{"position":[[91,5],[148,5],[311,5]]}}}],["hourli",{"_index":2655,"t":{"480":{"position":[[182,6],[207,6],[562,6],[579,6]]},"494":{"position":[[153,6],[170,6]]},"2424":{"position":[[138,6]]},"3804":{"position":[[833,6]]},"3808":{"position":[[289,6]]},"3819":{"position":[[542,6],[617,6]]}}}],["hr",{"_index":6495,"t":{"2559":{"position":[[638,2],[647,2],[650,2]]}}}],["href",{"_index":6404,"t":{"2532":{"position":[[112,4],[184,4]]}}}],["hs256",{"_index":999,"t":{"127":{"position":[[1274,5],[1302,5],[1485,5]]},"3039":{"position":[[397,5],[410,5]]},"3041":{"position":[[485,5],[513,5]]}}}],["hs384",{"_index":1010,"t":{"127":{"position":[[1491,5]]},"3039":{"position":[[416,5]]}}}],["hs512",{"_index":1011,"t":{"127":{"position":[[1497,5]]},"3039":{"position":[[422,5]]}}}],["html",{"_index":777,"t":{"114":{"position":[[401,4]]},"306":{"position":[[166,4]]},"321":{"position":[[199,4]]},"331":{"position":[[227,4]]},"406":{"position":[[78,4],[153,4]]},"606":{"position":[[486,4],[491,4]]},"617":{"position":[[1334,4],[1358,4]]},"919":{"position":[[224,4]]},"1530":{"position":[[190,4]]},"2149":{"position":[[13,4]]},"2526":{"position":[[62,4],[67,4],[83,4]]},"2530":{"position":[[82,4],[106,4]]},"2627":{"position":[[89,4]]},"3112":{"position":[[99,4]]},"3307":{"position":[[321,4]]},"3331":{"position":[[85,4],[137,4]]},"3446":{"position":[[876,4]]},"3452":{"position":[[1471,4]]},"3727":{"position":[[15,4],[26,4]]},"3916":{"position":[[4467,4]]},"3928":{"position":[[1438,4]]},"3930":{"position":[[299,4],[307,4]]},"3938":{"position":[[137,4]]}}}],["http",{"_index":60,"t":{"3":{"position":[[584,5]]},"11":{"position":[[456,4]]},"13":{"position":[[288,4]]},"46":{"position":[[37,5]]},"51":{"position":[[97,5]]},"60":{"position":[[37,5]]},"62":{"position":[[97,5]]},"70":{"position":[[37,5]]},"75":{"position":[[97,5]]},"87":{"position":[[5,5],[37,5]]},"89":{"position":[[6,5],[50,5],[91,5]]},"112":{"position":[[175,4]]},"114":{"position":[[309,5],[367,5]]},"121":{"position":[[0,4],[29,4],[154,4],[339,4]]},"127":{"position":[[472,4]]},"133":{"position":[[199,4]]},"135":{"position":[[189,4]]},"146":{"position":[[145,4]]},"148":{"position":[[162,5]]},"170":{"position":[[0,5],[27,5]]},"196":{"position":[[32,5]]},"298":{"position":[[5,5]]},"302":{"position":[[52,5]]},"306":{"position":[[75,5]]},"314":{"position":[[105,5],[193,5],[707,5],[750,5]]},"316":{"position":[[107,5],[274,4],[317,4],[646,5],[689,5]]},"331":{"position":[[42,5],[138,5]]},"386":{"position":[[26,5]]},"406":{"position":[[27,4],[50,4],[101,4],[124,5],[166,4],[171,5],[178,4],[201,4],[248,4],[271,4],[314,4],[342,4]]},"413":{"position":[[171,4],[196,5]]},"419":{"position":[[39,5],[138,5],[417,4],[426,5]]},"423":{"position":[[63,4],[140,5]]},"461":{"position":[[88,5]]},"486":{"position":[[50,5]]},"540":{"position":[[87,5]]},"570":{"position":[[108,4]]},"615":{"position":[[678,5]]},"639":{"position":[[477,5]]},"655":{"position":[[202,5],[521,5]]},"675":{"position":[[5,5]]},"734":{"position":[[8214,5]]},"773":{"position":[[86,5]]},"846":{"position":[[1010,5]]},"879":{"position":[[80,5]]},"917":{"position":[[12,5]]},"919":{"position":[[39,5],[165,5]]},"1440":{"position":[[953,5]]},"1468":{"position":[[279,5],[377,4]]},"1483":{"position":[[245,5],[811,5]]},"1503":{"position":[[17,5]]},"1505":{"position":[[23,5],[79,5]]},"1516":{"position":[[163,5],[217,5]]},"1530":{"position":[[122,5]]},"1539":{"position":[[149,4],[223,5]]},"1547":{"position":[[445,5]]},"1549":{"position":[[516,5]]},"1551":{"position":[[104,5],[728,5],[950,5]]},"1566":{"position":[[194,4]]},"1627":{"position":[[196,5]]},"1745":{"position":[[345,5]]},"1755":{"position":[[988,4],[1041,4]]},"1947":{"position":[[146,5]]},"1965":{"position":[[18,5]]},"2204":{"position":[[4,4],[11,4]]},"2261":{"position":[[118,5],[312,5]]},"2294":{"position":[[485,4]]},"2296":{"position":[[288,4]]},"2383":{"position":[[150,5]]},"2387":{"position":[[0,5]]},"2422":{"position":[[0,5]]},"2497":{"position":[[86,5],[117,5],[232,5]]},"2501":{"position":[[40,5],[136,5]]},"2503":{"position":[[18,5]]},"2510":{"position":[[89,4],[94,5]]},"2532":{"position":[[190,5]]},"2555":{"position":[[177,5]]},"2557":{"position":[[36,5]]},"2564":{"position":[[95,4]]},"2573":{"position":[[205,5]]},"2597":{"position":[[81,5]]},"2637":{"position":[[0,5]]},"2649":{"position":[[231,5]]},"2653":{"position":[[212,5]]},"2664":{"position":[[0,5]]},"2678":{"position":[[32,5]]},"2731":{"position":[[105,5]]},"2740":{"position":[[144,5]]},"2742":{"position":[[15,5]]},"2745":{"position":[[145,5]]},"2747":{"position":[[148,5]]},"2749":{"position":[[862,4]]},"2751":{"position":[[426,4]]},"2764":{"position":[[124,5]]},"2768":{"position":[[104,5],[129,5],[159,5],[194,5],[278,5],[305,5],[338,5],[386,5],[431,5],[490,5],[528,5],[578,5],[611,5],[667,5],[690,5],[720,5],[752,5],[786,5],[822,5],[872,5],[917,5],[973,5],[1022,5],[1083,5],[1126,5],[1180,5],[1222,5],[1250,5],[1290,5],[1321,5],[1359,5],[1397,5],[1430,5],[1468,5]]},"2843":{"position":[[0,4],[20,4],[144,4]]},"2856":{"position":[[1976,5]]},"2875":{"position":[[64,5],[148,5],[206,5],[342,5],[721,4],[882,5],[905,4],[1085,4]]},"2897":{"position":[[701,5]]},"2977":{"position":[[93,5]]},"2987":{"position":[[93,5]]},"2993":{"position":[[71,4],[96,5]]},"2997":{"position":[[93,5]]},"3005":{"position":[[93,5]]},"3019":{"position":[[93,5]]},"3027":{"position":[[93,5]]},"3035":{"position":[[93,5]]},"3043":{"position":[[93,5]]},"3051":{"position":[[93,5]]},"3059":{"position":[[93,5]]},"3065":{"position":[[161,5],[218,5],[318,5]]},"3069":{"position":[[307,5]]},"3075":{"position":[[12,5],[145,5],[209,5]]},"3080":{"position":[[33,5],[101,5],[364,5],[566,4]]},"3082":{"position":[[337,5]]},"3112":{"position":[[59,5]]},"3131":{"position":[[330,5]]},"3138":{"position":[[171,5]]},"3189":{"position":[[426,5]]},"3194":{"position":[[494,5]]},"3215":{"position":[[877,5]]},"3250":{"position":[[110,4]]},"3265":{"position":[[149,4]]},"3267":{"position":[[665,4]]},"3269":{"position":[[561,4]]},"3271":{"position":[[246,4]]},"3291":{"position":[[144,4],[246,4],[792,4],[890,4],[1930,4],[2041,4]]},"3307":{"position":[[5,5],[99,5],[199,5],[274,5]]},"3331":{"position":[[34,5],[90,5]]},"3335":{"position":[[5,5]]},"3373":{"position":[[41,5],[561,5]]},"3401":{"position":[[199,5]]},"3430":{"position":[[138,5],[216,4],[2662,5],[2793,4],[3989,5],[4102,4]]},"3432":{"position":[[5206,5],[5319,4]]},"3440":{"position":[[46,4],[85,4]]},"3446":{"position":[[784,5],[842,5]]},"3452":{"position":[[1373,5],[1438,5]]},"3464":{"position":[[166,5],[360,5]]},"3468":{"position":[[271,4]]},"3476":{"position":[[70,4]]},"3483":{"position":[[144,5],[209,5],[275,5],[342,5],[414,5],[483,5],[746,4],[786,4],[795,4],[802,4],[858,4],[906,5],[968,5],[1032,5],[1094,5],[1162,5],[1228,5]]},"3486":{"position":[[35,5],[111,5],[188,5],[266,5],[349,5],[429,5],[507,5]]},"3488":{"position":[[56,5]]},"3490":{"position":[[7,5]]},"3492":{"position":[[15,5],[211,5]]},"3494":{"position":[[15,5],[192,5]]},"3496":{"position":[[15,5],[145,5],[256,5],[394,5]]},"3498":{"position":[[127,5],[349,5],[424,5]]},"3500":{"position":[[15,5],[125,5],[249,5],[418,5],[609,5]]},"3502":{"position":[[7,5]]},"3504":{"position":[[7,5]]},"3506":{"position":[[89,5],[200,5],[318,5],[466,5]]},"3508":{"position":[[7,5],[89,5]]},"3510":{"position":[[7,5]]},"3512":{"position":[[7,5]]},"3514":{"position":[[7,5]]},"3516":{"position":[[7,5]]},"3518":{"position":[[7,5]]},"3520":{"position":[[163,5],[242,5],[310,5],[382,5]]},"3522":{"position":[[209,5],[353,5],[546,5],[725,5],[963,5],[1289,5],[1453,5]]},"3524":{"position":[[61,5]]},"3526":{"position":[[95,5]]},"3528":{"position":[[47,5]]},"3530":{"position":[[49,5]]},"3532":{"position":[[92,5]]},"3535":{"position":[[65,5],[157,5],[249,5],[345,5],[445,5],[541,5]]},"3537":{"position":[[52,5]]},"3539":{"position":[[171,5],[310,5],[423,5]]},"3541":{"position":[[52,5],[165,5],[271,5],[393,5],[570,5],[758,5]]},"3543":{"position":[[127,5],[436,5]]},"3545":{"position":[[53,5],[148,5],[280,5]]},"3547":{"position":[[127,5],[283,5]]},"3549":{"position":[[53,5],[190,5]]},"3551":{"position":[[104,5]]},"3553":{"position":[[104,5]]},"3555":{"position":[[104,5]]},"3557":{"position":[[104,5]]},"3559":{"position":[[104,5]]},"3561":{"position":[[162,5],[242,5],[309,5],[374,5]]},"3563":{"position":[[195,5],[399,5],[785,5],[917,5],[1099,5],[1244,5]]},"3565":{"position":[[180,5]]},"3567":{"position":[[114,5]]},"3569":{"position":[[83,5]]},"3571":{"position":[[128,5]]},"3575":{"position":[[187,5],[568,4]]},"3581":{"position":[[181,5]]},"3583":{"position":[[286,5]]},"3589":{"position":[[672,5],[683,5]]},"3595":{"position":[[63,4],[117,4],[171,5],[351,4],[364,4],[412,4]]},"3597":{"position":[[87,5],[196,5],[298,5],[388,4],[476,4]]},"3599":{"position":[[73,5]]},"3601":{"position":[[279,5],[394,4],[845,4],[909,4],[926,5],[1000,4],[1054,4],[1071,5],[1145,4],[1200,4],[1296,4],[1358,4],[1445,4],[1509,4],[1526,5],[1620,4],[1798,4]]},"3603":{"position":[[61,5],[192,5],[281,4]]},"3605":{"position":[[67,4]]},"3614":{"position":[[36,4],[41,5],[66,5]]},"3620":{"position":[[298,4],[315,4]]},"3624":{"position":[[91,4],[104,4],[118,4],[146,4]]},"3642":{"position":[[235,5],[292,5],[392,5]]},"3650":{"position":[[213,4]]},"3696":{"position":[[65,5]]},"3702":{"position":[[120,5],[363,5],[481,5],[621,5],[718,5],[982,5],[1036,5],[1109,5],[1144,5],[1239,5],[1294,5],[1408,5],[1487,5],[1719,5],[1877,5],[2021,5],[2112,5],[2430,5]]},"3706":{"position":[[1909,5],[1966,5],[2066,5]]},"3708":{"position":[[757,4]]},"3754":{"position":[[323,5]]},"3910":{"position":[[314,5],[2224,4]]},"3912":{"position":[[132,5],[206,5],[280,5],[354,5],[428,5],[502,5],[576,5],[650,5]]},"3914":{"position":[[17,5],[91,5],[165,5],[239,5],[313,5],[387,5],[461,5],[535,5],[609,5],[683,5]]},"3916":{"position":[[17,5],[91,5],[165,5],[239,5],[313,5],[387,5],[461,5],[535,5],[609,5],[1410,5],[4369,5],[4434,5],[7178,5],[7519,4],[7783,5],[8171,4],[8634,5]]},"3918":{"position":[[17,5],[91,5],[165,5],[239,5],[313,5],[387,5],[461,5],[535,5],[609,5],[683,5],[1587,5],[1729,5],[1874,5],[2067,5],[2231,5],[2873,5],[2954,5]]},"3920":{"position":[[17,5],[91,5]]},"3928":{"position":[[1346,5],[1404,5]]},"3932":{"position":[[149,4],[1618,5]]},"3934":{"position":[[1615,5],[2290,5],[2574,5],[2736,5],[2817,5],[2884,5]]},"3936":{"position":[[1984,5],[2171,5]]},"3944":{"position":[[16,4]]},"3956":{"position":[[394,4]]},"3974":{"position":[[769,4],[778,5]]},"4006":{"position":[[650,5]]}}}],["http_interceptor",{"_index":2091,"t":{"316":{"position":[[274,17]]}}}],["httpclien",{"_index":9275,"t":{"3920":{"position":[[1436,9]]}}}],["httpclient",{"_index":8249,"t":{"3468":{"position":[[276,10]]},"3498":{"position":[[468,10]]},"3512":{"position":[[73,10]]},"3543":{"position":[[654,10],[741,10],[784,10]]},"3551":{"position":[[221,10],[358,10],[582,10]]},"3553":{"position":[[220,10],[340,10],[452,10]]},"3555":{"position":[[221,10],[355,10],[485,10]]},"3557":{"position":[[222,10],[361,10],[496,10]]},"3559":{"position":[[223,10],[370,10],[520,10]]},"3575":{"position":[[46,10]]},"3577":{"position":[[6,10],[51,10]]},"3579":{"position":[[47,10],[192,10],[293,10]]},"3581":{"position":[[62,10],[122,10],[133,10],[147,10],[208,10],[290,10],[379,10]]},"3583":{"position":[[187,10],[227,10],[238,10],[252,10],[313,10],[395,10],[485,10]]},"3587":{"position":[[70,10]]},"3589":{"position":[[44,10]]},"3601":{"position":[[15,10],[850,10],[1005,10],[1150,10],[1301,10],[1450,10],[1625,10],[1803,10]]},"3605":{"position":[[35,10]]},"3914":{"position":[[2141,10],[2186,10]]},"3920":{"position":[[576,10],[1234,10],[1323,10],[1549,10]]},"3966":{"position":[[166,10]]},"3984":{"position":[[505,10]]},"3990":{"position":[[116,10]]}}}],["httpclientfactori",{"_index":8280,"t":{"3498":{"position":[[270,17]]},"3543":{"position":[[270,17]]},"3575":{"position":[[330,17],[753,17],[815,17],[837,17],[857,17],[942,17]]},"3581":{"position":[[342,17]]},"3583":{"position":[[447,17]]}}}],["httpclienthandl",{"_index":8375,"t":{"3587":{"position":[[184,17],[370,17]]},"3589":{"position":[[158,17],[355,17],[452,17],[539,17],[573,17]]},"3591":{"position":[[145,17]]}}}],["httpclientmodul",{"_index":2085,"t":{"316":{"position":[[175,16]]}}}],["httpconnectiondispatcheropt",{"_index":7548,"t":{"3158":{"position":[[317,31]]}}}],["httpconnectiondispatcheroptionsset",{"_index":7547,"t":{"3158":{"position":[[277,39]]}}}],["httpconnectionresponsecont",{"_index":9794,"t":{"3964":{"position":[[793,29]]}}}],["httpcontext",{"_index":259,"t":{"15":{"position":[[311,11],[420,11]]},"17":{"position":[[305,11],[414,11]]},"21":{"position":[[0,11],[39,11],[82,11],[148,11]]},"23":{"position":[[21,11],[64,11],[130,11]]},"26":{"position":[[31,11],[48,11]]},"28":{"position":[[158,11],[192,11]]},"30":{"position":[[16,11],[31,11]]},"32":{"position":[[19,11]]},"34":{"position":[[16,11]]},"36":{"position":[[0,11]]},"38":{"position":[[0,11]]},"40":{"position":[[11,11],[61,11]]},"42":{"position":[[11,11],[62,11]]},"112":{"position":[[687,11],[720,11],[742,11],[773,11],[828,11],[1160,11]]},"127":{"position":[[683,11]]},"133":{"position":[[463,11],[606,11],[752,11],[824,11],[924,11],[979,11]]},"144":{"position":[[405,11],[485,11]]},"146":{"position":[[808,11],[951,11]]},"570":{"position":[[1142,11]]},"1214":{"position":[[66,11]]},"1739":{"position":[[478,11],[587,11]]},"1925":{"position":[[536,11],[569,11],[591,11],[622,11],[677,11],[1022,11]]},"2031":{"position":[[4,11],[22,11]]},"2138":{"position":[[40,11]]},"2142":{"position":[[51,11]]},"2231":{"position":[[21,11],[64,11],[130,11]]},"2233":{"position":[[30,11]]},"2235":{"position":[[31,11],[48,11],[144,11],[194,11],[208,11]]},"2237":{"position":[[158,11],[192,11]]},"2239":{"position":[[16,11],[31,11],[65,11],[115,11]]},"2241":{"position":[[12,11]]},"2243":{"position":[[38,11],[130,11],[181,11]]},"2245":{"position":[[137,11]]},"2247":{"position":[[36,11]]},"2249":{"position":[[19,11],[77,11]]},"2251":{"position":[[19,11],[78,11]]},"2253":{"position":[[0,11]]},"2255":{"position":[[541,11],[601,11],[633,11],[704,11]]},"2579":{"position":[[295,11]]},"2581":{"position":[[452,11],[979,11]]},"2585":{"position":[[31,11]]},"2587":{"position":[[396,11],[528,11]]},"2589":{"position":[[427,11]]},"2843":{"position":[[158,11]]},"2846":{"position":[[44,11],[179,11],[250,11],[297,11],[348,11]]},"2848":{"position":[[926,11],[981,11],[1044,11],[1105,11],[1161,11]]},"2850":{"position":[[13,11]]},"2852":{"position":[[0,11],[92,11],[124,11],[168,11]]},"3450":{"position":[[170,11],[192,11]]},"3684":{"position":[[103,11]]},"3708":{"position":[[2527,11]]},"3716":{"position":[[573,11]]},"3912":{"position":[[1220,11],[2664,11]]},"3916":{"position":[[1184,11],[2805,11]]},"3934":{"position":[[1081,11]]},"3954":{"position":[[425,11]]},"3956":{"position":[[1875,11]]},"3962":{"position":[[1929,11]]},"3978":{"position":[[612,11]]},"3990":{"position":[[142,11]]},"3992":{"position":[[2780,11]]},"3994":{"position":[[120,11],[1048,11]]},"4000":{"position":[[89,11],[911,11]]},"4002":{"position":[[335,11]]}}}],["httpcontextaccessor",{"_index":258,"t":{"15":{"position":[[291,19],[400,19]]},"17":{"position":[[285,19],[394,19]]},"28":{"position":[[131,19],[172,19]]},"144":{"position":[[385,19],[465,19]]},"1739":{"position":[[458,19],[567,19]]},"2237":{"position":[[131,19],[172,19]]},"3684":{"position":[[83,19]]},"3962":{"position":[[1909,19]]}}}],["httpcontextextens",{"_index":10040,"t":{"3982":{"position":[[332,21]]}}}],["httpcontextloc",{"_index":10328,"t":{"3994":{"position":[[566,16]]}}}],["httpcontextutil",{"_index":10327,"t":{"3994":{"position":[[540,20]]},"4000":{"position":[[41,18]]}}}],["httpdelet",{"_index":5108,"t":{"1596":{"position":[[190,10]]},"1631":{"position":[[269,10]]}}}],["httpevent",{"_index":2086,"t":{"316":{"position":[[193,9]]}}}],["httpfile",{"_index":8314,"t":{"3522":{"position":[[1368,8],[1532,8]]},"3563":{"position":[[71,8],[670,8],[706,8],[894,8],[1026,8],[1208,8],[1359,8]]},"3916":{"position":[[7280,8],[7549,8],[7892,8],[8200,8],[8512,8],[8527,8],[8736,8]]},"3918":{"position":[[1501,8],[1696,8],[1838,8],[1989,8],[2146,8],[2310,8]]}}}],["httpget",{"_index":234,"t":{"15":{"position":[[7,7]]},"17":{"position":[[1,7]]},"435":{"position":[[262,7],[630,7]]},"1408":{"position":[[886,7]]},"1410":{"position":[[911,7]]},"1412":{"position":[[2386,7]]},"1414":{"position":[[812,7]]},"1572":{"position":[[463,7]]},"1576":{"position":[[99,7]]},"1596":{"position":[[113,7]]},"1615":{"position":[[165,7]]},"1617":{"position":[[1007,7]]},"1619":{"position":[[293,7],[303,7]]},"1631":{"position":[[192,7]]},"1739":{"position":[[9,7],[257,7]]},"1745":{"position":[[121,7]]},"2713":{"position":[[610,7],[1431,7],[1927,7]]},"3397":{"position":[[1047,7]]},"3575":{"position":[[879,7]]},"3581":{"position":[[638,7]]},"3583":{"position":[[841,7]]}}}],["httphandler",{"_index":2087,"t":{"316":{"position":[[204,11]]}}}],["httphead",{"_index":5161,"t":{"1631":{"position":[[330,8],[540,8]]},"1661":{"position":[[1321,8]]},"3023":{"position":[[1318,8]]}}}],["httpheader",{"_index":2088,"t":{"316":{"position":[[217,11]]}}}],["httpinterceptor",{"_index":2089,"t":{"316":{"position":[[230,15]]}}}],["httplog",{"_index":6379,"t":{"2501":{"position":[[404,11]]}}}],["httploggingmiddlewar",{"_index":6380,"t":{"2501":{"position":[[416,21]]}}}],["httpmessagehandl",{"_index":8362,"t":{"3579":{"position":[[75,18],[100,18],[153,18],[216,18]]}}}],["httpmethod",{"_index":5063,"t":{"1576":{"position":[[81,10]]},"1580":{"position":[[290,10]]},"1619":{"position":[[454,10]]},"1631":{"position":[[20,10],[65,10]]},"1661":{"position":[[876,10]]},"3023":{"position":[[873,10]]},"3452":{"position":[[1338,10]]},"3486":{"position":[[550,10]]},"3490":{"position":[[50,10]]},"3916":{"position":[[4334,10]]},"3930":{"position":[[945,10]]},"3964":{"position":[[679,10]]}}}],["httpmodul",{"_index":4352,"t":{"1468":{"position":[[63,10]]}}}],["httponli",{"_index":7113,"t":{"2848":{"position":[[267,8]]}}}],["httppatch",{"_index":5109,"t":{"1596":{"position":[[222,9]]},"1631":{"position":[[301,9]]}}}],["httppost",{"_index":269,"t":{"19":{"position":[[1,8]]},"1596":{"position":[[53,8],[261,8]]},"1613":{"position":[[155,8]]},"1615":{"position":[[155,8]]},"1619":{"position":[[329,8],[340,8]]},"1631":{"position":[[132,8],[368,8]]},"1741":{"position":[[85,8],[872,8],[1742,8]]},"1743":{"position":[[40,8],[349,8]]},"1749":{"position":[[33,8]]},"3686":{"position":[[854,8],[929,8]]}}}],["httpput",{"_index":5107,"t":{"1596":{"position":[[147,7]]},"1631":{"position":[[226,7],[606,7]]},"1661":{"position":[[1389,7]]},"3023":{"position":[[1386,7]]}}}],["httprequest",{"_index":723,"t":{"112":{"position":[[701,11],[759,11],[901,11],[969,11]]},"316":{"position":[[247,11]]},"1925":{"position":[[550,11],[608,11],[750,11],[818,11]]},"2255":{"position":[[555,11],[672,11]]},"3912":{"position":[[2362,11]]},"3990":{"position":[[156,11]]}}}],["httprequestmessag",{"_index":8295,"t":{"3510":{"position":[[73,18]]},"3514":{"position":[[73,18]]},"3551":{"position":[[233,18],[377,18],[601,18]]},"3555":{"position":[[233,18],[374,18],[504,18]]},"3920":{"position":[[1342,18],[1661,18]]},"3984":{"position":[[224,18]]}}}],["httprequestpart",{"_index":8398,"t":{"3599":{"position":[[32,15]]}}}],["httprespons",{"_index":2090,"t":{"316":{"position":[[260,12]]}}}],["httpresponsemessag",{"_index":8300,"t":{"3516":{"position":[[73,19]]},"3518":{"position":[[80,19]]},"3520":{"position":[[24,19],[126,19]]},"3535":{"position":[[100,19],[193,19],[284,19],[383,19],[482,19],[577,19]]},"3537":{"position":[[139,19]]},"3539":{"position":[[249,19],[341,19],[454,19]]},"3541":{"position":[[104,19],[221,19],[306,19],[428,19],[636,19]]},"3543":{"position":[[388,19],[576,19]]},"3545":{"position":[[89,19],[184,19],[316,19]]},"3547":{"position":[[224,19],[380,19]]},"3549":{"position":[[89,19],[226,19]]},"3551":{"position":[[140,19]]},"3553":{"position":[[140,19]]},"3555":{"position":[[140,19]]},"3557":{"position":[[140,19],[234,19],[380,19],[515,19]]},"3559":{"position":[[140,19],[235,19],[389,19],[539,19]]},"3561":{"position":[[24,19],[198,19]]},"3563":{"position":[[311,19],[515,19],[860,19],[992,19],[1174,19],[1319,19]]},"3565":{"position":[[100,19]]},"3567":{"position":[[175,19]]},"3569":{"position":[[131,19]]},"3571":{"position":[[182,19]]},"3595":{"position":[[447,19]]},"3597":{"position":[[331,19]]},"3603":{"position":[[224,19]]},"3918":{"position":[[1662,19],[1804,19],[1949,19]]},"3920":{"position":[[1454,19],[1568,19]]},"3966":{"position":[[958,19]]}}}],["httpsi",{"_index":5399,"t":{"1747":{"position":[[20,7]]},"1755":{"position":[[972,7]]}}}],["httpurlencodingcodec",{"_index":2042,"t":{"310":{"position":[[423,20]]}}}],["httputil",{"_index":9986,"t":{"3978":{"position":[[1252,11]]}}}],["httpverb",{"_index":5065,"t":{"1576":{"position":[[189,8]]},"1580":{"position":[[318,8]]}}}],["hu",{"_index":6577,"t":{"2559":{"position":[[1385,2],[1392,2],[1395,2]]},"2768":{"position":[[1216,2]]}}}],["hub",{"_index":4162,"t":{"1377":{"position":[[475,3],[514,3],[679,3]]},"3152":{"position":[[28,3]]},"3154":{"position":[[11,3],[17,3],[44,3],[204,3],[366,3],[507,3],[677,3],[735,3]]},"3156":{"position":[[253,4],[292,3],[608,4]]},"3158":{"position":[[12,3],[40,3],[205,4],[244,3],[585,4]]},"3160":{"position":[[20,3]]},"3168":{"position":[[85,3]]},"3194":{"position":[[60,3]]}}}],["hubconnect",{"_index":7585,"t":{"3194":{"position":[[403,13]]}}}],["hubconnectionbuild",{"_index":7580,"t":{"3194":{"position":[[135,20],[219,20],[442,20]]}}}],["hubconnectioncontext",{"_index":7575,"t":{"3189":{"position":[[182,20]]}}}],["hubcontext",{"_index":7555,"t":{"3162":{"position":[[126,10],[189,10],[204,10],[217,10],[281,10]]},"3164":{"position":[[4,10]]},"3166":{"position":[[112,10]]}}}],["hubendpointconventionbuild",{"_index":7550,"t":{"3158":{"position":[[424,28]]}}}],["hubendpointconventionbuilderset",{"_index":7549,"t":{"3158":{"position":[[387,36]]}}}],["hy",{"_index":6464,"t":{"2559":{"position":[[330,2],[338,2]]}}}],["i1yywd",{"_index":10469,"t":{"4006":{"position":[[30,6]]}}}],["i23bkn",{"_index":10183,"t":{"3992":{"position":[[40,6]]}}}],["i24b8p",{"_index":10474,"t":{"4006":{"position":[[511,6]]}}}],["i24f3u",{"_index":10475,"t":{"4006":{"position":[[569,6],[625,6]]}}}],["i24m2t",{"_index":10472,"t":{"4006":{"position":[[463,6]]}}}],["i24n6j",{"_index":10473,"t":{"4006":{"position":[[486,6]]}}}],["i24q6w",{"_index":10466,"t":{"4004":{"position":[[452,6]]}}}],["i24tck",{"_index":10465,"t":{"4004":{"position":[[411,6]]}}}],["i24umn",{"_index":10464,"t":{"4004":{"position":[[381,6]]}}}],["i24zqk",{"_index":10461,"t":{"4004":{"position":[[55,6]]}}}],["i2524k",{"_index":10463,"t":{"4004":{"position":[[373,6]]}}}],["i253fi",{"_index":10462,"t":{"4004":{"position":[[149,6]]}}}],["i25i8r",{"_index":10459,"t":{"4002":{"position":[[325,6]]}}}],["i25kh6",{"_index":10458,"t":{"4002":{"position":[[283,6]]}}}],["i2647u",{"_index":10455,"t":{"4000":{"position":[[1177,6]]}}}],["i264q4",{"_index":10440,"t":{"4000":{"position":[[498,6]]}}}],["i265so",{"_index":10454,"t":{"4000":{"position":[[1140,6]]}}}],["i2662o",{"_index":10439,"t":{"4000":{"position":[[461,6]]}}}],["i268l",{"_index":10438,"t":{"4000":{"position":[[439,6]]}}}],["i268t5",{"_index":10453,"t":{"4000":{"position":[[1110,6]]}}}],["i2695d",{"_index":10437,"t":{"4000":{"position":[[418,6]]}}}],["i269q1",{"_index":10436,"t":{"4000":{"position":[[395,6]]}}}],["i26b26",{"_index":10452,"t":{"4000":{"position":[[1081,6]]}}}],["i26b6u",{"_index":10451,"t":{"4000":{"position":[[1048,6]]}}}],["i26dcb",{"_index":10442,"t":{"4000":{"position":[[707,6]]}}}],["i26dvt",{"_index":10450,"t":{"4000":{"position":[[1019,6]]}}}],["i26efu",{"_index":10448,"t":{"4000":{"position":[[980,6]]}}}],["i26glr",{"_index":10435,"t":{"4000":{"position":[[357,6]]}}}],["i26gm4",{"_index":10449,"t":{"4000":{"position":[[988,6]]}}}],["i26h1l",{"_index":10445,"t":{"4000":{"position":[[901,6]]}}}],["i26lx0",{"_index":10430,"t":{"3998":{"position":[[370,6]]}}}],["i26oxg",{"_index":10418,"t":{"3998":{"position":[[13,6],[520,6]]}}}],["i26u0a",{"_index":10429,"t":{"3998":{"position":[[348,6]]}}}],["i26xq6",{"_index":10431,"t":{"3998":{"position":[[400,6]]}}}],["i271x0",{"_index":10427,"t":{"3998":{"position":[[290,6]]}}}],["i272og",{"_index":10426,"t":{"3998":{"position":[[236,6]]}}}],["i273r4",{"_index":10428,"t":{"3998":{"position":[[317,6]]}}}],["i276q3",{"_index":10425,"t":{"3998":{"position":[[193,6]]}}}],["i278cp",{"_index":10424,"t":{"3998":{"position":[[143,6],[504,6]]}}}],["i278dd",{"_index":10422,"t":{"3998":{"position":[[107,6],[468,6]]}}}],["i278lq",{"_index":10423,"t":{"3998":{"position":[[116,6],[477,6]]}}}],["i27g3t",{"_index":10420,"t":{"3998":{"position":[[57,6]]}}}],["i27gst",{"_index":10433,"t":{"3998":{"position":[[738,6]]}}}],["i27m43",{"_index":10385,"t":{"3996":{"position":[[921,6]]}}}],["i27m4f",{"_index":10384,"t":{"3996":{"position":[[844,6]]}}}],["i27mlm",{"_index":10383,"t":{"3996":{"position":[[797,6]]}}}],["i27mqa",{"_index":10369,"t":{"3996":{"position":[[233,6]]}}}],["i27s2n",{"_index":10382,"t":{"3996":{"position":[[764,6]]}}}],["i27tn7",{"_index":10381,"t":{"3996":{"position":[[711,6]]}}}],["i27tp7",{"_index":10410,"t":{"3996":{"position":[[1600,6]]}}}],["i27un6",{"_index":10380,"t":{"3996":{"position":[[652,6]]}}}],["i27utx",{"_index":10379,"t":{"3996":{"position":[[593,6]]}}}],["i27wu",{"_index":10414,"t":{"3996":{"position":[[1732,5]]}}}],["i27xi5",{"_index":10386,"t":{"3996":{"position":[[956,6]]}}}],["i27z3o",{"_index":10366,"t":{"3996":{"position":[[123,6]]}}}],["i27zva",{"_index":10404,"t":{"3996":{"position":[[1414,6]]}}}],["i2801v",{"_index":10370,"t":{"3996":{"position":[[272,6]]}}}],["i2804i",{"_index":10387,"t":{"3996":{"position":[[979,6]]}}}],["i2805",{"_index":10372,"t":{"3996":{"position":[[316,5]]}}}],["i280t",{"_index":10388,"t":{"3996":{"position":[[1025,6]]}}}],["i2816m",{"_index":10390,"t":{"3996":{"position":[[1066,6]]}}}],["i281i",{"_index":10415,"t":{"3996":{"position":[[1769,6]]}}}],["i282j4",{"_index":10412,"t":{"3996":{"position":[[1672,6]]}}}],["i286ij",{"_index":10409,"t":{"3996":{"position":[[1582,6]]}}}],["i2888l",{"_index":10377,"t":{"3996":{"position":[[523,6]]}}}],["i2891g",{"_index":10378,"t":{"3996":{"position":[[552,6]]}}}],["i2891l",{"_index":10413,"t":{"3996":{"position":[[1696,6]]}}}],["i28aj",{"_index":10367,"t":{"3996":{"position":[[148,5],[1439,5]]}}}],["i28b77",{"_index":10364,"t":{"3996":{"position":[[28,6]]}}}],["i28ba9",{"_index":10391,"t":{"3996":{"position":[[1108,6]]}}}],["i28g0",{"_index":10375,"t":{"3996":{"position":[[421,6]]}}}],["i28kr",{"_index":10393,"t":{"3996":{"position":[[1148,5]]}}}],["i28m1v",{"_index":10411,"t":{"3996":{"position":[[1641,6]]}}}],["i28nmz",{"_index":10416,"t":{"3996":{"position":[[1790,6]]}}}],["i28nnl",{"_index":10417,"t":{"3996":{"position":[[1836,6]]}}}],["i28qgi",{"_index":10365,"t":{"3996":{"position":[[75,6]]}}}],["i28qtb",{"_index":10368,"t":{"3996":{"position":[[191,6]]}}}],["i28qu",{"_index":10374,"t":{"3996":{"position":[[386,5]]}}}],["i28quq",{"_index":10376,"t":{"3996":{"position":[[448,6]]}}}],["i28qv9",{"_index":10373,"t":{"3996":{"position":[[342,6]]}}}],["i28udt",{"_index":10316,"t":{"3994":{"position":[[208,6]]}}}],["i28vmt",{"_index":10357,"t":{"3994":{"position":[[1434,6]]}}}],["i28wmi",{"_index":10356,"t":{"3994":{"position":[[1397,6]]}}}],["i28y9d",{"_index":10359,"t":{"3994":{"position":[[1578,6]]}}}],["i28z1a",{"_index":10355,"t":{"3994":{"position":[[1355,6]]}}}],["i292lo",{"_index":10337,"t":{"3994":{"position":[[789,6]]}}}],["i294f2",{"_index":10360,"t":{"3994":{"position":[[1640,6]]}}}],["i294yt",{"_index":10354,"t":{"3994":{"position":[[1318,6]]}}}],["i2955t",{"_index":10353,"t":{"3994":{"position":[[1288,6]]}}}],["i29693",{"_index":10317,"t":{"3994":{"position":[[232,6]]}}}],["i29697",{"_index":10318,"t":{"3994":{"position":[[256,6]]}}}],["i2969a",{"_index":10352,"t":{"3994":{"position":[[1258,6]]}}}],["i296sr",{"_index":10319,"t":{"3994":{"position":[[282,6]]}}}],["i29789",{"_index":10351,"t":{"3994":{"position":[[1216,6]]}}}],["i297r9",{"_index":10324,"t":{"3994":{"position":[[450,6]]}}}],["i29buo",{"_index":10350,"t":{"3994":{"position":[[1171,6]]}}}],["i29d2m",{"_index":10334,"t":{"3994":{"position":[[734,6]]}}}],["i29e6p",{"_index":10332,"t":{"3994":{"position":[[659,6]]}}}],["i29e7p",{"_index":10349,"t":{"3994":{"position":[[1136,6]]}}}],["i29g6",{"_index":10361,"t":{"3994":{"position":[[1668,6]]}}}],["i29gt7",{"_index":10347,"t":{"3994":{"position":[[1100,6]]}}}],["i29k57",{"_index":10315,"t":{"3994":{"position":[[164,6]]}}}],["i29kih",{"_index":10358,"t":{"3994":{"position":[[1557,6]]}}}],["i29kq",{"_index":10329,"t":{"3994":{"position":[[584,6]]}}}],["i29lab",{"_index":10320,"t":{"3994":{"position":[[320,6]]}}}],["i29li4",{"_index":10326,"t":{"3994":{"position":[[530,6]]}}}],["i29llz",{"_index":10331,"t":{"3994":{"position":[[632,6]]}}}],["i29lsj",{"_index":10313,"t":{"3994":{"position":[[47,6]]}}}],["i29lsm",{"_index":10314,"t":{"3994":{"position":[[137,6]]}}}],["i29lu1",{"_index":10336,"t":{"3994":{"position":[[762,6]]}}}],["i29lu4",{"_index":10346,"t":{"3994":{"position":[[1069,6]]}}}],["i29m8i",{"_index":10345,"t":{"3994":{"position":[[1038,6]]}}}],["i29md9",{"_index":10325,"t":{"3994":{"position":[[497,6]]}}}],["i29nmv",{"_index":10333,"t":{"3994":{"position":[[701,6]]}}}],["i29r5",{"_index":10362,"t":{"3994":{"position":[[1697,6]]}}}],["i29smv",{"_index":10344,"t":{"3994":{"position":[[1000,6]]}}}],["i29vug",{"_index":10321,"t":{"3994":{"position":[[369,6]]}}}],["i29vuv",{"_index":10323,"t":{"3994":{"position":[[423,6]]}}}],["i29x90",{"_index":10343,"t":{"3994":{"position":[[968,6]]}}}],["i29y2r",{"_index":10322,"t":{"3994":{"position":[[399,6]]}}}],["i29zu9",{"_index":10342,"t":{"3994":{"position":[[907,6]]}}}],["i29zxj",{"_index":10339,"t":{"3994":{"position":[[831,6]]}}}],["i2a175",{"_index":10186,"t":{"3992":{"position":[[153,6]]},"3994":{"position":[[1477,6]]}}}],["i2a6ii",{"_index":10363,"t":{"3994":{"position":[[1725,6]]}}}],["i2a7t2",{"_index":10228,"t":{"3992":{"position":[[1539,6]]},"3994":{"position":[[1500,6]]}}}],["i2aan8",{"_index":10185,"t":{"3992":{"position":[[114,6]]},"3994":{"position":[[92,6]]}}}],["i2ab6c",{"_index":10227,"t":{"3992":{"position":[[1506,6]]},"3994":{"position":[[1528,6]]}}}],["i2acf3",{"_index":10226,"t":{"3992":{"position":[[1474,6]]}}}],["i2ah54",{"_index":10213,"t":{"3992":{"position":[[1070,6]]}}}],["i2ahh8",{"_index":10184,"t":{"3992":{"position":[[68,6]]}}}],["i2aiwc",{"_index":10187,"t":{"3992":{"position":[[191,6]]}}}],["i2akua",{"_index":10215,"t":{"3992":{"position":[[1131,6]]}}}],["i2amg0",{"_index":10188,"t":{"3992":{"position":[[237,6]]}}}],["i2apau",{"_index":10216,"t":{"3992":{"position":[[1164,6]]}}}],["i2apgj",{"_index":10189,"t":{"3992":{"position":[[258,6],[2638,6]]}}}],["i2asl",{"_index":10190,"t":{"3992":{"position":[[307,6]]}}}],["i2asnj",{"_index":10270,"t":{"3992":{"position":[[2843,6]]}}}],["i2asya",{"_index":10192,"t":{"3992":{"position":[[362,6]]}}}],["i2auga",{"_index":10194,"t":{"3992":{"position":[[418,6]]}}}],["i2awqi",{"_index":10229,"t":{"3992":{"position":[[1586,6]]}}}],["i2axuu",{"_index":10272,"t":{"3992":{"position":[[2886,6]]}}}],["i2b0nx",{"_index":10273,"t":{"3992":{"position":[[2911,6]]}}}],["i2b0zr",{"_index":10218,"t":{"3992":{"position":[[1215,6]]}}}],["i2b47r",{"_index":10230,"t":{"3992":{"position":[[1655,6]]}}}],["i2b9hq",{"_index":10224,"t":{"3992":{"position":[[1416,6]]}}}],["i2bb7b",{"_index":10274,"t":{"3992":{"position":[[2950,6]]}}}],["i2bebm",{"_index":10233,"t":{"3992":{"position":[[1703,6]]}}}],["i2bgxi",{"_index":10276,"t":{"3992":{"position":[[2992,6]]}}}],["i2bhhz",{"_index":10234,"t":{"3992":{"position":[[1730,6]]}}}],["i2bmr7",{"_index":10225,"t":{"3992":{"position":[[1436,6]]}}}],["i2bms5",{"_index":10235,"t":{"3992":{"position":[[1757,6]]}}}],["i2bs2i",{"_index":10236,"t":{"3992":{"position":[[1787,6]]}}}],["i2bst",{"_index":10238,"t":{"3992":{"position":[[1838,6]]}}}],["i2c2aq",{"_index":10277,"t":{"3992":{"position":[[3017,6]]}}}],["i2c6et",{"_index":10279,"t":{"3992":{"position":[[3047,6]]}}}],["i2c9vp",{"_index":10239,"t":{"3992":{"position":[[1885,6]]}}}],["i2ceh",{"_index":10280,"t":{"3992":{"position":[[3087,6]]}}}],["i2cjlz",{"_index":10282,"t":{"3992":{"position":[[3131,6]]}}}],["i2cpq0",{"_index":10195,"t":{"3992":{"position":[[441,6]]}}}],["i2crjc",{"_index":10240,"t":{"3992":{"position":[[1927,6]]}}}],["i2csul",{"_index":10283,"t":{"3992":{"position":[[3173,6]]}}}],["i2cvn0",{"_index":10241,"t":{"3992":{"position":[[1956,6]]}}}],["i2cw5t",{"_index":10242,"t":{"3992":{"position":[[1981,6]]}}}],["i2cw99",{"_index":10197,"t":{"3992":{"position":[[479,6]]}}}],["i2cx5l",{"_index":10198,"t":{"3992":{"position":[[503,6]]}}}],["i2cyz",{"_index":10220,"t":{"3992":{"position":[[1275,6]]}}}],["i2cz04",{"_index":10222,"t":{"3992":{"position":[[1332,6]]}}}],["i2czbc",{"_index":10243,"t":{"3992":{"position":[[2021,6]]}}}],["i2czlo",{"_index":10199,"t":{"3992":{"position":[[538,6]]}}}],["i2d0pz",{"_index":10212,"t":{"3992":{"position":[[1017,6]]}}}],["i2d1k9",{"_index":10200,"t":{"3992":{"position":[[583,6]]}}}],["i2d2cm",{"_index":10201,"t":{"3992":{"position":[[611,6]]}}}],["i2d44m",{"_index":10202,"t":{"3992":{"position":[[636,6]]}}}],["i2d4dg",{"_index":10244,"t":{"3992":{"position":[[2046,6]]}}}],["i2d608",{"_index":10284,"t":{"3992":{"position":[[3205,6]]}}}],["i2d685",{"_index":10203,"t":{"3992":{"position":[[688,6]]}}}],["i2d7p",{"_index":10204,"t":{"3992":{"position":[[711,6]]}}}],["i2dczx",{"_index":10285,"t":{"3992":{"position":[[3238,6]]}}}],["i2ddup",{"_index":10286,"t":{"3992":{"position":[[3283,6]]}}}],["i2dey8",{"_index":10287,"t":{"3992":{"position":[[3306,6]]}}}],["i2dh1d",{"_index":10245,"t":{"3992":{"position":[[2090,6]]}}}],["i2dimg",{"_index":10205,"t":{"3992":{"position":[[782,6]]}}}],["i2dnxt",{"_index":10207,"t":{"3992":{"position":[[817,6]]}}}],["i2do29",{"_index":10246,"t":{"3992":{"position":[[2120,6]]}}}],["i2do6i",{"_index":10208,"t":{"3992":{"position":[[854,6]]}}}],["i2do8l",{"_index":10247,"t":{"3992":{"position":[[2163,6]]}}}],["i2do9t",{"_index":10223,"t":{"3992":{"position":[[1383,6]]}}}],["i2docl",{"_index":10182,"t":{"3992":{"position":[[17,6],[2655,6]]}}}],["i2dsb8",{"_index":10288,"t":{"3992":{"position":[[3343,6]]}}}],["i2dvd2",{"_index":10248,"t":{"3992":{"position":[[2190,6]]}}}],["i2e04h",{"_index":10289,"t":{"3992":{"position":[[3377,6]]}}}],["i2e0if",{"_index":10290,"t":{"3992":{"position":[[3411,6]]}}}],["i2e5r4",{"_index":10291,"t":{"3992":{"position":[[3433,6]]}}}],["i2e77t",{"_index":10292,"t":{"3992":{"position":[[3454,6]]}}}],["i2e7i5",{"_index":10293,"t":{"3992":{"position":[[3489,6]]}}}],["i2eag1",{"_index":10295,"t":{"3992":{"position":[[3543,6]]}}}],["i2ectg",{"_index":10258,"t":{"3992":{"position":[[2580,6]]}}}],["i2ecuj",{"_index":10249,"t":{"3992":{"position":[[2223,6]]}}}],["i2eeo2",{"_index":10296,"t":{"3992":{"position":[[3566,6]]}}}],["i2ef2q",{"_index":10250,"t":{"3992":{"position":[[2254,6]]}}}],["i2eh66",{"_index":10297,"t":{"3992":{"position":[[3590,6]]}}}],["i2g8tf",{"_index":10209,"t":{"3992":{"position":[[919,6]]}}}],["i2gdgd",{"_index":10210,"t":{"3992":{"position":[[942,6]]}}}],["i2lb7m",{"_index":10091,"t":{"3986":{"position":[[207,6]]}}}],["i2m5iz",{"_index":10251,"t":{"3992":{"position":[[2281,6]]}}}],["i2m5p2",{"_index":10252,"t":{"3992":{"position":[[2325,6]]}}}],["i2m70x",{"_index":10211,"t":{"3992":{"position":[[973,6]]}}}],["i2m7dt",{"_index":10253,"t":{"3992":{"position":[[2355,6]]}}}],["i2nv8",{"_index":10298,"t":{"3992":{"position":[[3621,6]]}}}],["i2paod",{"_index":10254,"t":{"3992":{"position":[[2397,6]]}}}],["i2plqq",{"_index":10299,"t":{"3992":{"position":[[3655,6]]}}}],["i2sdox",{"_index":10255,"t":{"3992":{"position":[[2440,6]]}}}],["i2tj3n",{"_index":10301,"t":{"3992":{"position":[[3683,6]]}}}],["i2vr64",{"_index":10302,"t":{"3992":{"position":[[3727,6]]}}}],["i2vr8f",{"_index":10303,"t":{"3992":{"position":[[3751,6]]}}}],["i2wbyq",{"_index":10304,"t":{"3992":{"position":[[3785,6]]}}}],["i2woyv",{"_index":10305,"t":{"3992":{"position":[[3832,6]]}}}],["i2x3gv",{"_index":10307,"t":{"3992":{"position":[[3861,6]]}}}],["i2x8a",{"_index":10308,"t":{"3992":{"position":[[3887,6]]}}}],["i2yd4k",{"_index":10309,"t":{"3992":{"position":[[3918,6]]}}}],["i2ydkt",{"_index":10310,"t":{"3992":{"position":[[3956,6]]}}}],["i30446",{"_index":10311,"t":{"3992":{"position":[[4010,6]]}}}],["i3046u",{"_index":10312,"t":{"3992":{"position":[[4035,6]]}}}],["i34xaw",{"_index":10263,"t":{"3992":{"position":[[2675,6]]}}}],["i34xb4",{"_index":10264,"t":{"3992":{"position":[[2694,6]]}}}],["i34xb9",{"_index":10265,"t":{"3992":{"position":[[2715,6]]}}}],["i34xbi",{"_index":10266,"t":{"3992":{"position":[[2733,6]]}}}],["i34xbr",{"_index":10260,"t":{"3992":{"position":[[2620,6]]}}}],["i34xc0",{"_index":10267,"t":{"3992":{"position":[[2752,6]]}}}],["i34xc8",{"_index":10268,"t":{"3992":{"position":[[2770,6]]}}}],["i34xcb",{"_index":10269,"t":{"3992":{"position":[[2807,6]]}}}],["i34xd0",{"_index":10257,"t":{"3992":{"position":[[2536,6]]}}}],["i34ze5",{"_index":10167,"t":{"3990":{"position":[[456,6]]}}}],["i359q6",{"_index":10160,"t":{"3990":{"position":[[97,6]]}}}],["i35d59",{"_index":10166,"t":{"3990":{"position":[[394,6]]}}}],["i35f3",{"_index":10161,"t":{"3990":{"position":[[132,6]]}}}],["i3688z",{"_index":10162,"t":{"3990":{"position":[[178,6]]}}}],["i368bh",{"_index":10163,"t":{"3990":{"position":[[226,6]]}}}],["i36pi0",{"_index":10175,"t":{"3990":{"position":[[678,6]]}}}],["i36pik",{"_index":10176,"t":{"3990":{"position":[[710,6]]}}}],["i36pit",{"_index":10177,"t":{"3990":{"position":[[739,6]]}}}],["i36sig",{"_index":10174,"t":{"3990":{"position":[[636,6]]}}}],["i36ska",{"_index":10172,"t":{"3990":{"position":[[564,6]]}}}],["i36sl0",{"_index":10173,"t":{"3990":{"position":[[597,6]]}}}],["i36sov",{"_index":10178,"t":{"3990":{"position":[[771,6]]}}}],["i36sr5",{"_index":10171,"t":{"3990":{"position":[[531,6]]}}}],["i37ezk",{"_index":10165,"t":{"3990":{"position":[[319,6]]}}}],["i37qhp",{"_index":10181,"t":{"3990":{"position":[[799,6]]}}}],["i37wtv",{"_index":10169,"t":{"3990":{"position":[[503,6]]}}}],["i37yq2",{"_index":10159,"t":{"3990":{"position":[[65,6]]}}}],["i37yqq",{"_index":10164,"t":{"3990":{"position":[[271,6]]}}}],["i37z8",{"_index":10158,"t":{"3990":{"position":[[34,6],[660,6]]}}}],["i385x2",{"_index":10144,"t":{"3988":{"position":[[76,6]]}}}],["i386lb",{"_index":10143,"t":{"3988":{"position":[[24,6]]}}}],["i387qx",{"_index":10145,"t":{"3988":{"position":[[104,6]]}}}],["i38c7c",{"_index":10146,"t":{"3988":{"position":[[143,6]]}}}],["i38fhl",{"_index":10151,"t":{"3988":{"position":[[339,6]]}}}],["i38iot",{"_index":10155,"t":{"3988":{"position":[[489,6]]}}}],["i38j97",{"_index":10147,"t":{"3988":{"position":[[178,6]]}}}],["i38l9b",{"_index":10139,"t":{"3986":{"position":[[1742,6]]}}}],["i38nnp",{"_index":10150,"t":{"3988":{"position":[[302,6]]}}}],["i38onx",{"_index":10149,"t":{"3988":{"position":[[240,6]]}}}],["i38uqj",{"_index":10153,"t":{"3988":{"position":[[386,6]]}}}],["i38w8z",{"_index":10154,"t":{"3988":{"position":[[421,6]]}}}],["i38wmz",{"_index":10157,"t":{"3988":{"position":[[523,6]]}}}],["i39gt9",{"_index":10092,"t":{"3986":{"position":[[253,6]]}}}],["i39lm5",{"_index":10097,"t":{"3986":{"position":[[423,6]]}}}],["i39n5u",{"_index":10087,"t":{"3986":{"position":[[92,6]]}}}],["i39pdc",{"_index":10115,"t":{"3986":{"position":[[1085,6]]}}}],["i39prr",{"_index":10112,"t":{"3986":{"position":[[912,6]]}}}],["i39rnh",{"_index":10117,"t":{"3986":{"position":[[1126,6]]}}}],["i39xza",{"_index":10119,"t":{"3986":{"position":[[1145,6]]}}}],["i39yuv",{"_index":10098,"t":{"3986":{"position":[[455,6]]}}}],["i3a3z4",{"_index":10099,"t":{"3986":{"position":[[488,6]]}}}],["i3a4sb",{"_index":10121,"t":{"3986":{"position":[[1194,6]]}}}],["i3a5h",{"_index":10122,"t":{"3986":{"position":[[1215,6]]}}}],["i3a5xl",{"_index":10088,"t":{"3986":{"position":[[124,6]]}}}],["i3a824",{"_index":10101,"t":{"3986":{"position":[[540,6]]}}}],["i3aam7",{"_index":10123,"t":{"3986":{"position":[[1237,6]]}}}],["i3af32",{"_index":10102,"t":{"3986":{"position":[[570,6]]}}}],["i3afqw",{"_index":10093,"t":{"3986":{"position":[[285,6]]}}}],["i3afrj",{"_index":10096,"t":{"3986":{"position":[[387,6]]}}}],["i3alq7",{"_index":10124,"t":{"3986":{"position":[[1272,6]]}}}],["i3apo9",{"_index":10103,"t":{"3986":{"position":[[607,6]]}}}],["i3astl",{"_index":10090,"t":{"3986":{"position":[[187,6]]}}}],["i3at02",{"_index":10125,"t":{"3986":{"position":[[1300,6]]}}}],["i3avxu",{"_index":10133,"t":{"3986":{"position":[[1561,6]]}}}],["i3azxk",{"_index":10131,"t":{"3986":{"position":[[1460,6]]}}}],["i3b2lc",{"_index":10128,"t":{"3986":{"position":[[1381,6]]}}}],["i3b60",{"_index":10086,"t":{"3986":{"position":[[59,6]]}}}],["i3b64f",{"_index":10130,"t":{"3986":{"position":[[1415,6]]}}}],["i3b6cx",{"_index":9945,"t":{"3976":{"position":[[522,6]]}}}],["i3b6d8",{"_index":10114,"t":{"3986":{"position":[[982,6]]}}}],["i3b8ew",{"_index":10132,"t":{"3986":{"position":[[1500,6]]}}}],["i3bayh",{"_index":10104,"t":{"3986":{"position":[[647,6]]}}}],["i3bbyv",{"_index":10135,"t":{"3986":{"position":[[1600,6]]}}}],["i3bbyw",{"_index":10134,"t":{"3986":{"position":[[1592,6]]}}}],["i3bkh5",{"_index":10136,"t":{"3986":{"position":[[1649,6]]}}}],["i3blkx",{"_index":10106,"t":{"3986":{"position":[[694,6]]}}}],["i3bsdh",{"_index":10089,"t":{"3986":{"position":[[148,6]]}}}],["i3bsxv",{"_index":10111,"t":{"3986":{"position":[[879,6]]}}}],["i3bum3",{"_index":10137,"t":{"3986":{"position":[[1673,6]]}}}],["i3c2xr",{"_index":10138,"t":{"3986":{"position":[[1702,6]]}}}],["i3c3da",{"_index":10107,"t":{"3986":{"position":[[744,6]]}}}],["i3c8zh",{"_index":10109,"t":{"3986":{"position":[[788,6]]}}}],["i3cbmu",{"_index":10110,"t":{"3986":{"position":[[821,6]]}}}],["i3ccr0",{"_index":10140,"t":{"3986":{"position":[[1773,6]]}}}],["i3cet9",{"_index":10142,"t":{"3986":{"position":[[1835,6]]}}}],["i3cjci",{"_index":10141,"t":{"3986":{"position":[[1804,6]]}}}],["i3cpjo",{"_index":10074,"t":{"3984":{"position":[[782,6]]}}}],["i3cvb",{"_index":10066,"t":{"3984":{"position":[[403,6]]}}}],["i3cwb",{"_index":10067,"t":{"3984":{"position":[[473,6]]}}}],["i3cxkz",{"_index":10075,"t":{"3984":{"position":[[829,6]]}}}],["i3cy42",{"_index":10068,"t":{"3984":{"position":[[520,6]]}}}],["i3d5px",{"_index":10057,"t":{"3984":{"position":[[29,6]]}}}],["i3d5ul",{"_index":10080,"t":{"3984":{"position":[[997,6]]}}}],["i3d5y8",{"_index":10061,"t":{"3984":{"position":[[157,6]]}}}],["i3d7kg",{"_index":10058,"t":{"3984":{"position":[[74,6]]}}}],["i3d9e7",{"_index":10069,"t":{"3984":{"position":[[561,6]]}}}],["i3ddgo",{"_index":10076,"t":{"3984":{"position":[[857,6]]}}}],["i3dhbw",{"_index":10059,"t":{"3984":{"position":[[93,6]]}}}],["i3digr",{"_index":10060,"t":{"3984":{"position":[[133,6]]}}}],["i3diq1",{"_index":10065,"t":{"3984":{"position":[[334,6]]}}}],["i3djiv",{"_index":10072,"t":{"3984":{"position":[[717,6]]}}}],["i3doe4",{"_index":10070,"t":{"3984":{"position":[[586,6]]}}}],["i3dpbr",{"_index":10073,"t":{"3984":{"position":[[759,6]]}}}],["i3dwrf",{"_index":10077,"t":{"3984":{"position":[[889,6]]}}}],["i3dwwf",{"_index":10078,"t":{"3984":{"position":[[920,6]]}}}],["i3dym3",{"_index":10071,"t":{"3984":{"position":[[663,6]]}}}],["i3dzn6",{"_index":10079,"t":{"3984":{"position":[[943,6]]}}}],["i3e08w",{"_index":10062,"t":{"3984":{"position":[[209,6]]}}}],["i3e2x",{"_index":10084,"t":{"3984":{"position":[[1091,6]]}}}],["i3e3di",{"_index":10063,"t":{"3984":{"position":[[281,6]]}}}],["i3e6j1",{"_index":10030,"t":{"3982":{"position":[[73,6]]}}}],["i3e84x",{"_index":10050,"t":{"3982":{"position":[[673,6]]}}}],["i3ebjp",{"_index":10037,"t":{"3982":{"position":[[289,6]]}}}],["i3ed17",{"_index":10051,"t":{"3982":{"position":[[736,6]]}}}],["i3efyj",{"_index":10032,"t":{"3982":{"position":[[112,6]]}}}],["i3egsb",{"_index":10038,"t":{"3982":{"position":[[315,6]]}}}],["i3ehd0",{"_index":10052,"t":{"3982":{"position":[[784,6]]}}}],["i3ehnq",{"_index":10041,"t":{"3982":{"position":[[379,6]]}}}],["i3ehxa",{"_index":10045,"t":{"3982":{"position":[[555,6]]}}}],["i3eijj",{"_index":10036,"t":{"3982":{"position":[[257,6]]}}}],["i3eiv3",{"_index":10034,"t":{"3982":{"position":[[171,6]]}}}],["i3ejo5",{"_index":10035,"t":{"3982":{"position":[[198,6]]}}}],["i3enz8",{"_index":10054,"t":{"3982":{"position":[[859,6]]}}}],["i3eof9",{"_index":10056,"t":{"3982":{"position":[[904,6]]}}}],["i3eoqq",{"_index":10042,"t":{"3982":{"position":[[436,6]]}}}],["i3eqwo",{"_index":10047,"t":{"3982":{"position":[[589,6]]}}}],["i3er71",{"_index":10048,"t":{"3982":{"position":[[623,6]]}}}],["i3evl5",{"_index":10029,"t":{"3982":{"position":[[23,6]]}}}],["i3evlb",{"_index":10043,"t":{"3982":{"position":[[471,6]]}}}],["i3ex66",{"_index":10044,"t":{"3982":{"position":[[495,6]]}}}],["i3exeu",{"_index":10049,"t":{"3982":{"position":[[649,6]]}}}],["i3gy4r",{"_index":10022,"t":{"3980":{"position":[[637,6]]}}}],["i3gye",{"_index":10018,"t":{"3980":{"position":[[472,6]]}}}],["i3h5qp",{"_index":10023,"t":{"3980":{"position":[[656,6]]}}}],["i3hdpc",{"_index":10010,"t":{"3980":{"position":[[267,6]]}}}],["i3hgpz",{"_index":10025,"t":{"3980":{"position":[[703,6]]}}}],["i3hh2t",{"_index":10005,"t":{"3980":{"position":[[81,6]]}}}],["i3hhwu",{"_index":10004,"t":{"3980":{"position":[[73,6]]}}}],["i3hiss",{"_index":10011,"t":{"3980":{"position":[[310,6]]}}}],["i3hn7a",{"_index":10006,"t":{"3980":{"position":[[102,6]]}}}],["i3huwg",{"_index":10027,"t":{"3980":{"position":[[803,6]]}}}],["i3huyo",{"_index":10007,"t":{"3980":{"position":[[127,6]]}}}],["i3hwjm",{"_index":10026,"t":{"3980":{"position":[[759,6]]}}}],["i3hxeu",{"_index":10009,"t":{"3980":{"position":[[174,6]]}}}],["i3hyn5",{"_index":10013,"t":{"3980":{"position":[[346,6]]}}}],["i3hz9d",{"_index":10028,"t":{"3980":{"position":[[831,6]]}}}],["i3hzz6",{"_index":10003,"t":{"3980":{"position":[[46,6]]}}}],["i3i2kn",{"_index":10012,"t":{"3980":{"position":[[338,6]]}}}],["i3i2pn",{"_index":10014,"t":{"3980":{"position":[[374,6]]}}}],["i3i5ko",{"_index":10016,"t":{"3980":{"position":[[409,6]]}}}],["i3i7v",{"_index":9991,"t":{"3978":{"position":[[1450,6]]}}}],["i3i8vq",{"_index":10019,"t":{"3980":{"position":[[511,6]]}}}],["i3i9f2",{"_index":10017,"t":{"3980":{"position":[[437,6]]}}}],["i3i9fc",{"_index":10021,"t":{"3980":{"position":[[564,6]]}}}],["i3ic70",{"_index":9974,"t":{"3978":{"position":[[777,6]]}}}],["i3ic7i",{"_index":9976,"t":{"3978":{"position":[[897,6]]}}}],["i3ic84",{"_index":9975,"t":{"3978":{"position":[[827,6]]}}}],["i3icl3",{"_index":9990,"t":{"3978":{"position":[[1394,6]]}}}],["i3ictk",{"_index":9987,"t":{"3978":{"position":[[1275,6]]}}}],["i3id10",{"_index":9977,"t":{"3978":{"position":[[933,6]]}}}],["i3igcc",{"_index":9978,"t":{"3978":{"position":[[964,6]]}}}],["i3ihlr",{"_index":9973,"t":{"3978":{"position":[[731,6]]}}}],["i3ihmx",{"_index":9954,"t":{"3978":{"position":[[124,6]]}}}],["i3ijaz",{"_index":9955,"t":{"3978":{"position":[[152,6]]}}}],["i3ilf1",{"_index":9985,"t":{"3978":{"position":[[1201,6]]}}}],["i3iq9i",{"_index":9953,"t":{"3978":{"position":[[78,6]]}}}],["i3iqv6",{"_index":9993,"t":{"3978":{"position":[[1530,6]]}}}],["i3irux",{"_index":9952,"t":{"3978":{"position":[[56,6],[417,6]]}}}],["i3iufz",{"_index":9994,"t":{"3978":{"position":[[1554,6]]}}}],["i3ivaa",{"_index":9971,"t":{"3978":{"position":[[644,6]]}}}],["i3ivbl",{"_index":9956,"t":{"3978":{"position":[[196,6]]}}}],["i3ivc",{"_index":9966,"t":{"3978":{"position":[[512,6]]}}}],["i3iwlr",{"_index":10002,"t":{"3978":{"position":[[1818,6]]}}}],["i3iwsm",{"_index":9995,"t":{"3978":{"position":[[1592,6]]}}}],["i3j0wa",{"_index":9969,"t":{"3978":{"position":[[597,6]]}}}],["i3j18i",{"_index":9997,"t":{"3978":{"position":[[1656,6]]}}}],["i3j1dx",{"_index":9996,"t":{"3978":{"position":[[1612,6]]}}}],["i3j2k0",{"_index":9963,"t":{"3978":{"position":[[435,6]]}}}],["i3j46",{"_index":9964,"t":{"3978":{"position":[[453,6]]}}}],["i3j463",{"_index":9979,"t":{"3978":{"position":[[998,6]]}}}],["i3j609",{"_index":9968,"t":{"3978":{"position":[[568,6]]}}}],["i3j6v6",{"_index":9967,"t":{"3978":{"position":[[547,6]]}}}],["i3j6w5",{"_index":9965,"t":{"3978":{"position":[[487,6]]}}}],["i3j7zz",{"_index":10000,"t":{"3978":{"position":[[1743,6]]}}}],["i3jbxf",{"_index":9999,"t":{"3978":{"position":[[1720,6]]}}}],["i3jhhg",{"_index":9988,"t":{"3978":{"position":[[1303,6]]}}}],["i3jtzq",{"_index":10001,"t":{"3978":{"position":[[1768,6]]}}}],["i3k0sn",{"_index":9958,"t":{"3978":{"position":[[251,6],[296,6],[1156,6]]}}}],["i3k1sj",{"_index":9981,"t":{"3978":{"position":[[1024,6]]}}}],["i3k4dg",{"_index":9950,"t":{"3978":{"position":[[36,6]]}}}],["i3k5gn",{"_index":9989,"t":{"3978":{"position":[[1323,6]]}}}],["i3kr85",{"_index":9972,"t":{"3978":{"position":[[683,6]]}}}],["i3lcqi",{"_index":9982,"t":{"3978":{"position":[[1097,6]]}}}],["i3lzbx",{"_index":9960,"t":{"3978":{"position":[[327,6]]}}}],["i3m0zt",{"_index":9984,"t":{"3978":{"position":[[1129,6]]}}}],["i3n01i",{"_index":9961,"t":{"3978":{"position":[[365,6]]}}}],["i3n2j0",{"_index":9962,"t":{"3978":{"position":[[391,6]]}}}],["i3n3ew",{"_index":9948,"t":{"3976":{"position":[[628,6]]}}}],["i3n3j4",{"_index":9937,"t":{"3976":{"position":[[186,6]]}}}],["i3ndb9",{"_index":9940,"t":{"3976":{"position":[[327,6]]}}}],["i3nh3m",{"_index":9944,"t":{"3976":{"position":[[494,6]]}}}],["i3nklz",{"_index":9934,"t":{"3976":{"position":[[112,6],[349,6]]}}}],["i3np96",{"_index":9933,"t":{"3976":{"position":[[83,6]]}}}],["i3nqm8",{"_index":9941,"t":{"3976":{"position":[[389,6]]}}}],["i3nr4l",{"_index":9942,"t":{"3976":{"position":[[414,6]]}}}],["i3nrf6",{"_index":9943,"t":{"3976":{"position":[[462,6]]}}}],["i3nsu",{"_index":9946,"t":{"3976":{"position":[[543,6]]}}}],["i3ntux",{"_index":9932,"t":{"3976":{"position":[[61,6]]}}}],["i3nu1g",{"_index":9949,"t":{"3976":{"position":[[651,6]]}}}],["i3nu3g",{"_index":9938,"t":{"3976":{"position":[[241,6]]}}}],["i3o29b",{"_index":9925,"t":{"3974":{"position":[[648,6]]}}}],["i3o2cd",{"_index":9926,"t":{"3974":{"position":[[688,6]]}}}],["i3o2qq",{"_index":9909,"t":{"3974":{"position":[[41,6]]}}}],["i3o3n0",{"_index":9915,"t":{"3974":{"position":[[292,6]]}}}],["i3o46x",{"_index":9916,"t":{"3974":{"position":[[328,6]]}}}],["i3o47j",{"_index":9910,"t":{"3974":{"position":[[76,6]]}}}],["i3o4d8",{"_index":9927,"t":{"3974":{"position":[[712,6]]}}}],["i3o5of",{"_index":9930,"t":{"3974":{"position":[[867,6]]}}}],["i3oap5",{"_index":9911,"t":{"3974":{"position":[[121,6]]}}}],["i3oapf",{"_index":9922,"t":{"3974":{"position":[[539,6]]}}}],["i3oaw2",{"_index":9912,"t":{"3974":{"position":[[145,6]]}}}],["i3oawx",{"_index":9917,"t":{"3974":{"position":[[379,6]]}}}],["i3ob0a",{"_index":9928,"t":{"3974":{"position":[[759,6]]}}}],["i3ob8r",{"_index":9929,"t":{"3974":{"position":[[791,6]]}}}],["i3odur",{"_index":9919,"t":{"3974":{"position":[[465,6]]}}}],["i3og18",{"_index":9924,"t":{"3974":{"position":[[613,6]]}}}],["i3ogen",{"_index":9913,"t":{"3974":{"position":[[185,6]]}}}],["i3ogyf",{"_index":9923,"t":{"3974":{"position":[[590,6]]}}}],["i3olw4",{"_index":9914,"t":{"3974":{"position":[[228,6]]}}}],["i3orb",{"_index":9931,"t":{"3974":{"position":[[894,6]]}}}],["i3ow3i",{"_index":9921,"t":{"3974":{"position":[[499,6]]}}}],["i3oy27",{"_index":9892,"t":{"3972":{"position":[[94,6]]}}}],["i3p1sj",{"_index":9903,"t":{"3972":{"position":[[480,6]]}}}],["i3p2c7",{"_index":9896,"t":{"3972":{"position":[[283,6]]}}}],["i3pjkq",{"_index":9893,"t":{"3972":{"position":[[137,6]]}}}],["i3pk0l",{"_index":9899,"t":{"3972":{"position":[[397,6]]}}}],["i3pk2n",{"_index":9904,"t":{"3972":{"position":[[521,6]]}}}],["i3pkst",{"_index":9891,"t":{"3972":{"position":[[53,6]]}}}],["i3pl18",{"_index":9897,"t":{"3972":{"position":[[336,6]]}}}],["i3pokd",{"_index":9905,"t":{"3972":{"position":[[546,6]]}}}],["i3pqgv",{"_index":9894,"t":{"3972":{"position":[[184,6]]}}}],["i3pqgw",{"_index":9906,"t":{"3972":{"position":[[584,6]]}}}],["i3ptvb",{"_index":9907,"t":{"3972":{"position":[[615,6]]}}}],["i3pvf1",{"_index":9895,"t":{"3972":{"position":[[239,6]]}}}],["i3pws",{"_index":9902,"t":{"3972":{"position":[[441,6]]}}}],["i3pxgi",{"_index":9908,"t":{"3972":{"position":[[668,6]]}}}],["i3q7xh",{"_index":9885,"t":{"3970":{"position":[[238,6]]}}}],["i3q7xi",{"_index":9882,"t":{"3970":{"position":[[31,6]]}}}],["i3qcm5",{"_index":9886,"t":{"3970":{"position":[[266,6]]}}}],["i3qijn",{"_index":9884,"t":{"3970":{"position":[[183,6]]}}}],["i3qko5",{"_index":9890,"t":{"3970":{"position":[[432,6]]}}}],["i3qou",{"_index":9883,"t":{"3970":{"position":[[89,6]]}}}],["i3qrv3",{"_index":9888,"t":{"3970":{"position":[[307,6]]}}}],["i3r3b6",{"_index":9869,"t":{"3968":{"position":[[434,6]]}}}],["i3r3j4",{"_index":9870,"t":{"3968":{"position":[[465,6]]}}}],["i3r5zf",{"_index":9860,"t":{"3968":{"position":[[134,6]]}}}],["i3r6wz",{"_index":9867,"t":{"3968":{"position":[[371,6]]}}}],["i3r7tp",{"_index":9871,"t":{"3968":{"position":[[496,6]]}}}],["i3raf7",{"_index":9865,"t":{"3968":{"position":[[326,6]]}}}],["i3raji",{"_index":9872,"t":{"3968":{"position":[[534,6]]}}}],["i3rbr9",{"_index":9859,"t":{"3968":{"position":[[29,6]]}}}],["i3rcc4",{"_index":9868,"t":{"3968":{"position":[[398,6]]}}}],["i3rgua",{"_index":9864,"t":{"3968":{"position":[[256,6]]}}}],["i3ri9l",{"_index":9861,"t":{"3968":{"position":[[177,6]]}}}],["i3rj0t",{"_index":9862,"t":{"3968":{"position":[[211,6]]}}}],["i3roq5",{"_index":9874,"t":{"3968":{"position":[[563,6]]}}}],["i3rou5",{"_index":9875,"t":{"3968":{"position":[[608,6]]}}}],["i3rrz",{"_index":9876,"t":{"3968":{"position":[[654,6]]}}}],["i3rsco",{"_index":3742,"t":{"917":{"position":[[56,6]]},"3968":{"position":[[682,6]]}}}],["i3ruk5",{"_index":9877,"t":{"3968":{"position":[[735,6]]}}}],["i3rw9q",{"_index":9829,"t":{"3966":{"position":[[1123,6]]}}}],["i3ryji",{"_index":9878,"t":{"3968":{"position":[[755,6]]}}}],["i3ryp",{"_index":9879,"t":{"3968":{"position":[[786,6]]}}}],["i3rz1l",{"_index":9880,"t":{"3968":{"position":[[828,6]]}}}],["i3s1t6",{"_index":9822,"t":{"3966":{"position":[[852,6]]}}}],["i3s2nd",{"_index":9816,"t":{"3966":{"position":[[629,6]]}}}],["i3s33q",{"_index":9881,"t":{"3968":{"position":[[864,6]]}}}],["i3s9n8",{"_index":9804,"t":{"3966":{"position":[[115,6]]}}}],["i3s9t5",{"_index":9834,"t":{"3966":{"position":[[1255,6]]}}}],["i3sdbb",{"_index":9836,"t":{"3966":{"position":[[1360,6]]}}}],["i3se8x",{"_index":9805,"t":{"3966":{"position":[[147,6]]}}}],["i3si17",{"_index":9806,"t":{"3966":{"position":[[181,6]]}}}],["i3sjf6",{"_index":9818,"t":{"3966":{"position":[[738,6]]}}}],["i3sjpu",{"_index":9814,"t":{"3966":{"position":[[564,6]]}}}],["i3sjq3",{"_index":9821,"t":{"3966":{"position":[[819,6]]}}}],["i3ss0u",{"_index":9837,"t":{"3966":{"position":[[1398,6]]}}}],["i3t0vi",{"_index":9838,"t":{"3966":{"position":[[1437,6]]}}}],["i3t2aa",{"_index":9827,"t":{"3966":{"position":[[1078,6]]}}}],["i3t4f8",{"_index":9839,"t":{"3966":{"position":[[1485,6]]}}}],["i3t7jp",{"_index":9807,"t":{"3966":{"position":[[205,6]]}}}],["i3t8ip",{"_index":9840,"t":{"3966":{"position":[[1519,6]]}}}],["i3t906",{"_index":9841,"t":{"3966":{"position":[[1541,6]]}}}],["i3ta2u",{"_index":9843,"t":{"3966":{"position":[[1597,6]]}}}],["i3thia",{"_index":9808,"t":{"3966":{"position":[[248,6]]}}}],["i3tita",{"_index":9833,"t":{"3966":{"position":[[1215,6]]}}}],["i3tkfh",{"_index":9823,"t":{"3966":{"position":[[891,6]]}}}],["i3tm9b",{"_index":9846,"t":{"3966":{"position":[[1710,6]]}}}],["i3tmcc",{"_index":9845,"t":{"3966":{"position":[[1686,6]]}}}],["i3tno9",{"_index":9824,"t":{"3966":{"position":[[935,6]]}}}],["i3tqmv",{"_index":9844,"t":{"3966":{"position":[[1659,6]]}}}],["i3tqs4",{"_index":9847,"t":{"3966":{"position":[[1747,6]]}}}],["i3uaf6",{"_index":9848,"t":{"3966":{"position":[[1791,6]]}}}],["i3ubk0",{"_index":9812,"t":{"3966":{"position":[[508,6]]}}}],["i3uboq",{"_index":9835,"t":{"3966":{"position":[[1290,6]]}}}],["i3ubsj",{"_index":9803,"t":{"3966":{"position":[[82,6]]}}}],["i3udsi",{"_index":9810,"t":{"3966":{"position":[[402,6]]}}}],["i3udt8",{"_index":9850,"t":{"3966":{"position":[[1823,6]]}}}],["i3ufgb",{"_index":9852,"t":{"3966":{"position":[[1872,6]]}}}],["i3uh6u",{"_index":9817,"t":{"3966":{"position":[[693,6]]}}}],["i3ui7g",{"_index":9853,"t":{"3966":{"position":[[1895,6]]}}}],["i3uj3l",{"_index":9811,"t":{"3966":{"position":[[483,6]]}}}],["i3utkq",{"_index":9855,"t":{"3966":{"position":[[1958,6]]}}}],["i3uyc2",{"_index":9802,"t":{"3966":{"position":[[38,6]]}}}],["i3v161",{"_index":9825,"t":{"3966":{"position":[[982,6]]}}}],["i3v8hj",{"_index":9857,"t":{"3966":{"position":[[1999,6]]}}}],["i3vaq",{"_index":9826,"t":{"3966":{"position":[[1040,6]]}}}],["i3vdtd",{"_index":9779,"t":{"3964":{"position":[[137,6]]}}}],["i3vf96",{"_index":9858,"t":{"3966":{"position":[[2035,6]]}}}],["i3vfim",{"_index":9781,"t":{"3964":{"position":[[185,6]]}}}],["i3vfir",{"_index":9782,"t":{"3964":{"position":[[217,6]]}}}],["i3vfix",{"_index":9783,"t":{"3964":{"position":[[311,6]]}}}],["i3vgw8",{"_index":9778,"t":{"3964":{"position":[[88,6]]}}}],["i3vkqg",{"_index":9789,"t":{"3964":{"position":[[697,6]]}}}],["i3vs2x",{"_index":9786,"t":{"3964":{"position":[[494,6]]}}}],["i3vs7",{"_index":9790,"t":{"3964":{"position":[[732,6]]}}}],["i3vstu",{"_index":9787,"t":{"3964":{"position":[[543,6]]}}}],["i3vx3d",{"_index":9784,"t":{"3964":{"position":[[377,6]]}}}],["i3vxau",{"_index":9777,"t":{"3964":{"position":[[35,6],[610,6]]}}}],["i3vxnb",{"_index":9785,"t":{"3964":{"position":[[440,6]]}}}],["i3vzqh",{"_index":9719,"t":{"3962":{"position":[[152,6]]}}}],["i3w08p",{"_index":9788,"t":{"3964":{"position":[[572,6]]}}}],["i3w0vh",{"_index":9792,"t":{"3964":{"position":[[776,6]]}}}],["i3w17c",{"_index":9720,"t":{"3962":{"position":[[185,6]]},"3964":{"position":[[835,6]]}}}],["i3w33u",{"_index":9745,"t":{"3962":{"position":[[997,6]]}}}],["i3w71w",{"_index":9801,"t":{"3964":{"position":[[1111,6]]}}}],["i3w830",{"_index":9795,"t":{"3964":{"position":[[868,6]]}}}],["i3w8ww",{"_index":9796,"t":{"3964":{"position":[[908,6]]}}}],["i3w934",{"_index":9797,"t":{"3964":{"position":[[965,6]]}}}],["i3w9lw",{"_index":9756,"t":{"3962":{"position":[[1337,6]]}}}],["i3wa0l",{"_index":9754,"t":{"3962":{"position":[[1299,6]]}}}],["i3wad",{"_index":9757,"t":{"3962":{"position":[[1386,6]]}}}],["i3wb5o",{"_index":9799,"t":{"3964":{"position":[[1060,6]]}}}],["i3wbm1",{"_index":9798,"t":{"3964":{"position":[[995,6]]}}}],["i3wuoi",{"_index":9768,"t":{"3962":{"position":[[1789,6]]}}}],["i3xdcr",{"_index":9722,"t":{"3962":{"position":[[227,6]]}}}],["i3xequ",{"_index":9769,"t":{"3962":{"position":[[1819,6]]}}}],["i3xfp6",{"_index":9721,"t":{"3962":{"position":[[219,6]]}}}],["i3xkii",{"_index":9731,"t":{"3962":{"position":[[527,6]]}}}],["i3xkkx",{"_index":9734,"t":{"3962":{"position":[[681,6]]}}}],["i3xklz",{"_index":9736,"t":{"3962":{"position":[[745,6]]}}}],["i3xknp",{"_index":9738,"t":{"3962":{"position":[[795,6]]}}}],["i3xktb",{"_index":9740,"t":{"3962":{"position":[[883,6]]}}}],["i3xmol",{"_index":9753,"t":{"3962":{"position":[[1247,6]]}}}],["i3xn5n",{"_index":9742,"t":{"3962":{"position":[[927,6]]}}}],["i3xn7o",{"_index":9744,"t":{"3962":{"position":[[970,6]]}}}],["i3xnan",{"_index":9752,"t":{"3962":{"position":[[1207,6]]}}}],["i3xvz0",{"_index":9749,"t":{"3962":{"position":[[1121,6]]}}}],["i3xyhj",{"_index":9718,"t":{"3962":{"position":[[98,6]]}}}],["i3xyi8",{"_index":9717,"t":{"3962":{"position":[[60,6],[1864,6]]}}}],["i3xyp0",{"_index":9750,"t":{"3962":{"position":[[1163,6]]}}}],["i3y2ev",{"_index":9765,"t":{"3962":{"position":[[1756,6]]}}}],["i3y57q",{"_index":9748,"t":{"3962":{"position":[[1087,6]]}}}],["i3y5cf",{"_index":9770,"t":{"3962":{"position":[[1895,6]]}}}],["i3y6bi",{"_index":9771,"t":{"3962":{"position":[[1944,6]]}}}],["i3y74h",{"_index":9773,"t":{"3962":{"position":[[1992,6]]}}}],["i3y7gt",{"_index":9723,"t":{"3962":{"position":[[259,6]]}}}],["i3y7tj",{"_index":9747,"t":{"3962":{"position":[[1044,6]]}}}],["i3ybfd",{"_index":9762,"t":{"3962":{"position":[[1598,6]]}}}],["i3ycrh",{"_index":9763,"t":{"3962":{"position":[[1640,6]]}}}],["i3yhg4",{"_index":9724,"t":{"3962":{"position":[[284,6]]}}}],["i3yhxp",{"_index":9774,"t":{"3962":{"position":[[2015,6]]}}}],["i3yi3g",{"_index":9764,"t":{"3962":{"position":[[1706,6]]}}}],["i3yiwu",{"_index":9775,"t":{"3962":{"position":[[2061,6]]}}}],["i3ykm6",{"_index":9758,"t":{"3962":{"position":[[1444,6]]}}}],["i3ypd",{"_index":9725,"t":{"3962":{"position":[[308,6]]}}}],["i3yppk",{"_index":9726,"t":{"3962":{"position":[[339,6],[586,6]]}}}],["i3yvr7",{"_index":9776,"t":{"3962":{"position":[[2098,6]]}}}],["i3yznu",{"_index":9727,"t":{"3962":{"position":[[362,6]]}}}],["i3z0io",{"_index":9732,"t":{"3962":{"position":[[553,6]]}}}],["i3z6ri",{"_index":9729,"t":{"3962":{"position":[[409,6]]}}}],["i3zby",{"_index":9760,"t":{"3962":{"position":[[1480,6]]}}}],["i3zh3x",{"_index":9709,"t":{"3960":{"position":[[493,6]]},"3962":{"position":[[1521,6]]}}}],["i3zkwf",{"_index":9730,"t":{"3962":{"position":[[447,6],[487,6]]}}}],["i3zqu5",{"_index":9704,"t":{"3960":{"position":[[300,6]]},"3962":{"position":[[640,6]]}}}],["i400bk",{"_index":9702,"t":{"3960":{"position":[[222,6]]}}}],["i402bl",{"_index":9698,"t":{"3960":{"position":[[62,6]]}}}],["i405hi",{"_index":9703,"t":{"3960":{"position":[[246,6]]}}}],["i405ni",{"_index":9708,"t":{"3960":{"position":[[449,6]]}}}],["i408f5",{"_index":9699,"t":{"3960":{"position":[[88,6],[584,6]]}}}],["i40bc6",{"_index":9710,"t":{"3960":{"position":[[550,6]]}}}],["i40kh5",{"_index":9715,"t":{"3960":{"position":[[681,6]]}}}],["i40kwr",{"_index":9700,"t":{"3960":{"position":[[132,6]]}}}],["i40kxn",{"_index":9712,"t":{"3960":{"position":[[636,6]]}}}],["i40vv",{"_index":9706,"t":{"3960":{"position":[[399,6]]}}}],["i41d1m",{"_index":9688,"t":{"3958":{"position":[[105,6]]}}}],["i41mzp",{"_index":9686,"t":{"3958":{"position":[[39,6],[185,6]]}}}],["i41pbw",{"_index":9687,"t":{"3958":{"position":[[64,6],[210,6]]}}}],["i41ub1",{"_index":9691,"t":{"3958":{"position":[[335,6]]}}}],["i421da",{"_index":9689,"t":{"3958":{"position":[[253,6]]}}}],["i427z2",{"_index":9681,"t":{"3956":{"position":[[23,6],[191,6]]}}}],["i42ny7",{"_index":9682,"t":{"3956":{"position":[[104,6]]}}}],["i4321l",{"_index":9678,"t":{"3954":{"position":[[631,6]]}}}],["i434yj",{"_index":9683,"t":{"3956":{"position":[[136,6],[3178,6]]}}}],["i4354",{"_index":9685,"t":{"3956":{"position":[[3133,6]]}}}],["i44ji",{"_index":9673,"t":{"3954":{"position":[[546,6]]}}}],["i44mno",{"_index":9679,"t":{"3954":{"position":[[733,6]]}}}],["i45e6m",{"_index":9656,"t":{"3952":{"position":[[493,6]]}}}],["i45jr3",{"_index":9659,"t":{"3952":{"position":[[563,6]]}}}],["i468q1",{"_index":9627,"t":{"3950":{"position":[[35,6]]}}}],["i46lon",{"_index":9630,"t":{"3950":{"position":[[103,6],[496,6]]}}}],["i46lup",{"_index":9639,"t":{"3950":{"position":[[457,6]]}}}],["i46qj9",{"_index":9640,"t":{"3950":{"position":[[539,6]]}}}],["i4d21q",{"_index":9611,"t":{"3946":{"position":[[360,6]]},"3948":{"position":[[497,6]]}}}],["i4dtvl",{"_index":9607,"t":{"3946":{"position":[[152,6]]},"3948":{"position":[[185,6]]}}}],["i4hr5q",{"_index":9606,"t":{"3946":{"position":[[71,6]]},"3948":{"position":[[94,6]]}}}],["i4ila5",{"_index":9609,"t":{"3946":{"position":[[274,6]]}}}],["i4isok",{"_index":9608,"t":{"3946":{"position":[[230,6]]},"3948":{"position":[[255,6]]}}}],["i4j2lz",{"_index":9486,"t":{"3932":{"position":[[1298,6]]}}}],["i4koq5",{"_index":9471,"t":{"3932":{"position":[[42,6],[571,6]]}}}],["i4ojqi",{"_index":9612,"t":{"3946":{"position":[[389,6]]}}}],["i4pz0c",{"_index":9598,"t":{"3944":{"position":[[228,6]]}}}],["i4um3",{"_index":9146,"t":{"3914":{"position":[[3252,6]]}}}],["i4uzlm",{"_index":9597,"t":{"3944":{"position":[[220,6]]}}}],["i4w1r4",{"_index":9593,"t":{"3944":{"position":[[52,6]]}}}],["i4y3nt",{"_index":9599,"t":{"3944":{"position":[[285,6]]}}}],["i4yfa0",{"_index":9600,"t":{"3944":{"position":[[336,6]]}}}],["i4zzb",{"_index":9602,"t":{"3944":{"position":[[437,6]]}}}],["i506s5",{"_index":9596,"t":{"3944":{"position":[[131,6]]}}}],["i50gbd",{"_index":9601,"t":{"3944":{"position":[[369,6]]}}}],["i519aw",{"_index":9573,"t":{"3940":{"position":[[431,6]]}}}],["i53egm",{"_index":9572,"t":{"3940":{"position":[[397,6]]}}}],["i546l1",{"_index":9590,"t":{"3942":{"position":[[436,6]]}}}],["i54pk7",{"_index":9589,"t":{"3942":{"position":[[395,6]]}}}],["i57zmn",{"_index":9566,"t":{"3940":{"position":[[41,6],[87,6],[533,6]]}}}],["i59a6w",{"_index":9561,"t":{"3938":{"position":[[506,6]]}}}],["i59b74",{"_index":9553,"t":{"3938":{"position":[[330,6]]}}}],["i5ayfx",{"_index":9535,"t":{"3936":{"position":[[289,6]]}}}],["i5b2hn",{"_index":9530,"t":{"3936":{"position":[[54,6]]}}}],["i5d057",{"_index":9503,"t":{"3934":{"position":[[675,6]]}}}],["i5d3cu",{"_index":9495,"t":{"3934":{"position":[[234,6]]}}}],["i5dhl9",{"_index":9512,"t":{"3934":{"position":[[927,6]]}}}],["i5dq2b",{"_index":9513,"t":{"3934":{"position":[[958,6]]}}}],["i5ermq",{"_index":9481,"t":{"3932":{"position":[[1122,6]]}}}],["i5evf2",{"_index":9485,"t":{"3932":{"position":[[1261,6]]}}}],["i5g27b",{"_index":9483,"t":{"3932":{"position":[[1215,6]]}}}],["i5gj6d",{"_index":9439,"t":{"3930":{"position":[[72,6]]}}}],["i5gobc",{"_index":9441,"t":{"3930":{"position":[[198,6]]}}}],["i5grd9",{"_index":9466,"t":{"3930":{"position":[[1404,6]]}}}],["i5gxml",{"_index":9451,"t":{"3930":{"position":[[575,6],[911,6]]}}}],["i5gz0f",{"_index":9459,"t":{"3930":{"position":[[1020,6]]}}}],["i5h0t3",{"_index":9458,"t":{"3930":{"position":[[859,6]]}}}],["i5h47",{"_index":9460,"t":{"3930":{"position":[[1052,6]]}}}],["i5h6s4",{"_index":9461,"t":{"3930":{"position":[[1098,6]]}}}],["i5hb5l",{"_index":9440,"t":{"3930":{"position":[[118,6]]}}}],["i5hbei",{"_index":9446,"t":{"3930":{"position":[[382,6],[1200,6]]}}}],["i5hbkc",{"_index":9444,"t":{"3930":{"position":[[316,6],[1145,6]]}}}],["i5hef0",{"_index":9465,"t":{"3930":{"position":[[1331,6]]}}}],["i5hf98",{"_index":9447,"t":{"3930":{"position":[[432,6]]}}}],["i5im5c",{"_index":9438,"t":{"3928":{"position":[[676,6]]}}}],["i5ix2r",{"_index":9340,"t":{"3924":{"position":[[1334,6],[1386,6]]}}}],["i5j3s6",{"_index":9336,"t":{"3924":{"position":[[1202,6]]}}}],["i5j474",{"_index":9338,"t":{"3924":{"position":[[1245,6]]}}}],["i5j98t",{"_index":9322,"t":{"3924":{"position":[[171,6]]}}}],["i5jbsq",{"_index":9321,"t":{"3924":{"position":[[163,6]]}}}],["i5jc0d",{"_index":9325,"t":{"3924":{"position":[[297,6]]}}}],["i5jrem",{"_index":9326,"t":{"3924":{"position":[[370,6],[1506,6]]}}}],["i5jseu",{"_index":9327,"t":{"3924":{"position":[[462,6]]}}}],["i5jz1h",{"_index":9344,"t":{"3924":{"position":[[1590,6]]}}}],["i5k1ib",{"_index":9328,"t":{"3924":{"position":[[524,6],[1656,6]]}}}],["i5k8f",{"_index":9330,"t":{"3924":{"position":[[574,6]]}}}],["i5kalz",{"_index":9347,"t":{"3924":{"position":[[1715,6]]}}}],["i5kc5p",{"_index":9348,"t":{"3924":{"position":[[1763,6]]}}}],["i5kjd1",{"_index":9349,"t":{"3924":{"position":[[1814,6]]}}}],["i5liwf",{"_index":9297,"t":{"3922":{"position":[[1331,6]]}}}],["i5lpf",{"_index":9299,"t":{"3922":{"position":[[1407,6]]}}}],["i5mcz6",{"_index":9303,"t":{"3922":{"position":[[1508,6]]}}}],["i5mfjt",{"_index":9288,"t":{"3922":{"position":[[284,6],[1590,6]]}}}],["i5mhx5",{"_index":9296,"t":{"3922":{"position":[[924,6],[1708,6],[1743,6],[1790,6],[1842,6]]}}}],["i5mm3o",{"_index":6782,"t":{"2649":{"position":[[160,6],[191,6],[208,6],[275,6]]},"3922":{"position":[[2046,6],[2289,6]]}}}],["i5mnfn",{"_index":9308,"t":{"3922":{"position":[[1886,6]]}}}],["i5mojb",{"_index":9289,"t":{"3922":{"position":[[328,6]]}}}],["i5mpn7",{"_index":9309,"t":{"3922":{"position":[[1922,6]]}}}],["i5mrti",{"_index":9290,"t":{"3922":{"position":[[378,6]]}}}],["i5n7s2",{"_index":9312,"t":{"3922":{"position":[[2071,6]]}}}],["i5n8rc",{"_index":9291,"t":{"3922":{"position":[[403,6]]}}}],["i5n9xi",{"_index":9292,"t":{"3922":{"position":[[497,6]]}}}],["i5nfwc",{"_index":9314,"t":{"3922":{"position":[[2121,6]]}}}],["i5nnqx",{"_index":9283,"t":{"3922":{"position":[[36,6],[85,6],[129,6]]}}}],["i5nrt9",{"_index":9315,"t":{"3922":{"position":[[2159,6]]}}}],["i5ntu",{"_index":9316,"t":{"3922":{"position":[[2197,6]]}}}],["i5nvop",{"_index":9317,"t":{"3922":{"position":[[2236,6]]}}}],["i5o38",{"_index":9256,"t":{"3920":{"position":[[265,6]]}}}],["i5o397",{"_index":9276,"t":{"3920":{"position":[[1651,6]]}}}],["i5o5",{"_index":3492,"t":{"734":{"position":[[8258,6]]}}}],["i5out1",{"_index":9163,"t":{"3916":{"position":[[947,6]]}}}],["i5owbo",{"_index":9274,"t":{"3920":{"position":[[1249,6]]}}}],["i5p5ug",{"_index":9252,"t":{"3918":{"position":[[4138,6]]}}}],["i5pbr3",{"_index":9266,"t":{"3920":{"position":[[591,6]]}}}],["i5pcxk",{"_index":9254,"t":{"3920":{"position":[[135,6],[1871,6]]}}}],["i5penw",{"_index":9277,"t":{"3920":{"position":[[1698,6]]}}}],["i5pepa",{"_index":9268,"t":{"3920":{"position":[[634,6]]}}}],["i5pfj1",{"_index":9269,"t":{"3920":{"position":[[703,6],[762,6],[1761,6],[1917,6]]}}}],["i5pfow",{"_index":9270,"t":{"3920":{"position":[[711,6],[770,6]]}}}],["i5pfq2",{"_index":9279,"t":{"3920":{"position":[[1753,6]]}}}],["i5piwd",{"_index":9253,"t":{"3920":{"position":[[61,6]]}}}],["i5piyi",{"_index":9228,"t":{"3918":{"position":[[1380,6],[1522,6]]}}}],["i5pkjh",{"_index":9209,"t":{"3918":{"position":[[792,6]]}}}],["i5pms5",{"_index":9227,"t":{"3918":{"position":[[1372,6],[1514,6]]}}}],["i5polz",{"_index":9251,"t":{"3918":{"position":[[3964,6]]}}}],["i5ppk",{"_index":9250,"t":{"3918":{"position":[[3956,6]]}}}],["i5pqhr",{"_index":9208,"t":{"3918":{"position":[[727,6]]}}}],["i5q3sn",{"_index":9234,"t":{"3918":{"position":[[3235,6]]}}}],["i5q3sx",{"_index":9207,"t":{"3918":{"position":[[653,6]]}}}],["i5qcf0",{"_index":9230,"t":{"3918":{"position":[[2438,6]]}}}],["i5qcu1",{"_index":9235,"t":{"3918":{"position":[[3273,6]]}}}],["i5qdhx",{"_index":9206,"t":{"3918":{"position":[[579,6]]}}}],["i5qly5",{"_index":9211,"t":{"3918":{"position":[[901,6],[4018,6]]}}}],["i5qveb",{"_index":9232,"t":{"3918":{"position":[[2838,6],[3324,6]]}}}],["i5qvh3",{"_index":9205,"t":{"3918":{"position":[[505,6]]}}}],["i5qz37",{"_index":9212,"t":{"3918":{"position":[[940,6]]}}}],["i5r5ti",{"_index":9204,"t":{"3918":{"position":[[431,6]]}}}],["i5r9po",{"_index":9213,"t":{"3918":{"position":[[983,6]]}}}],["i5re4j",{"_index":9241,"t":{"3918":{"position":[[3431,6]]}}}],["i5rej9",{"_index":9215,"t":{"3918":{"position":[[1071,6]]}}}],["i5revf",{"_index":9240,"t":{"3918":{"position":[[3423,6]]}}}],["i5rfbq",{"_index":9217,"t":{"3918":{"position":[[1103,6],[3591,6],[3664,6]]}}}],["i5rhqx",{"_index":9203,"t":{"3918":{"position":[[357,6]]}}}],["i5rsfd",{"_index":9202,"t":{"3918":{"position":[[283,6]]}}}],["i5s4ec",{"_index":3283,"t":{"655":{"position":[[565,6]]}}}],["i5sdk5",{"_index":9247,"t":{"3918":{"position":[[3808,6]]}}}],["i5sef",{"_index":9201,"t":{"3918":{"position":[[209,6]]}}}],["i5sjjr",{"_index":9248,"t":{"3918":{"position":[[3855,6]]}}}],["i5sku",{"_index":9200,"t":{"3918":{"position":[[135,6]]}}}],["i5sp37",{"_index":9199,"t":{"3918":{"position":[[61,6]]}}}],["i5t9pr",{"_index":9191,"t":{"3916":{"position":[[2770,6]]}}}],["i5tbkl",{"_index":9177,"t":{"3916":{"position":[[1966,6]]}}}],["i5tcmo",{"_index":9158,"t":{"3916":{"position":[[722,6]]}}}],["i5td4x",{"_index":9157,"t":{"3916":{"position":[[653,6]]}}}],["i5tkl5",{"_index":9159,"t":{"3916":{"position":[[758,6],[813,6],[851,6],[2511,6]]}}}],["i5tli6",{"_index":9156,"t":{"3916":{"position":[[579,6],[2570,6],[2638,6]]}}}],["i5twc1",{"_index":9162,"t":{"3916":{"position":[[939,6],[989,6],[1051,6],[1510,6]]}}}],["i5twl3",{"_index":9179,"t":{"3916":{"position":[[2112,6]]}}}],["i5txon",{"_index":9155,"t":{"3916":{"position":[[505,6]]}}}],["i5u0a4",{"_index":9174,"t":{"3916":{"position":[[1611,6]]}}}],["i5u375",{"_index":9167,"t":{"3916":{"position":[[1108,6],[2190,6]]}}}],["i5u3mk",{"_index":9154,"t":{"3916":{"position":[[431,6]]}}}],["i5u3vo",{"_index":9180,"t":{"3916":{"position":[[2256,6]]}}}],["i5u413",{"_index":9153,"t":{"3916":{"position":[[357,6]]}}}],["i5u4oc",{"_index":9182,"t":{"3916":{"position":[[2325,6]]}}}],["i5u4sg",{"_index":9152,"t":{"3916":{"position":[[283,6]]}}}],["i5u8q9",{"_index":9151,"t":{"3916":{"position":[[209,6]]}}}],["i5uf3i",{"_index":9170,"t":{"3916":{"position":[[1273,6]]}}}],["i5ugca",{"_index":9185,"t":{"3916":{"position":[[2416,6]]}}}],["i5ugn",{"_index":9150,"t":{"3916":{"position":[[135,6]]}}}],["i5ujr",{"_index":9131,"t":{"3914":{"position":[[2510,6]]},"3916":{"position":[[1324,6],[2461,6]]}}}],["i5ulwn",{"_index":9149,"t":{"3916":{"position":[[61,6]]}}}],["i5uo2h",{"_index":9130,"t":{"3914":{"position":[[2473,6]]}}}],["i5uqz7",{"_index":9106,"t":{"3914":{"position":[[727,6]]}}}],["i5uvmv",{"_index":9110,"t":{"3914":{"position":[[904,6]]}}}],["i5uyqw",{"_index":9105,"t":{"3914":{"position":[[653,6]]}}}],["i5v6u",{"_index":9104,"t":{"3914":{"position":[[579,6]]}}}],["i5v99t",{"_index":9103,"t":{"3914":{"position":[[505,6]]}}}],["i5viaq",{"_index":9102,"t":{"3914":{"position":[[431,6]]}}}],["i5vjhc",{"_index":9112,"t":{"3914":{"position":[[1027,6],[2742,6],[2798,6]]}}}],["i5vpd1",{"_index":9101,"t":{"3914":{"position":[[357,6]]}}}],["i5woiv",{"_index":9100,"t":{"3914":{"position":[[283,6]]}}}],["i5wq18",{"_index":9136,"t":{"3914":{"position":[[2890,6]]}}}],["i5wqpp",{"_index":9099,"t":{"3914":{"position":[[209,6]]}}}],["i5wxhz",{"_index":9142,"t":{"3914":{"position":[[3011,6],[3071,6]]}}}],["i5x2q0",{"_index":9098,"t":{"3914":{"position":[[135,6]]}}}],["i5xiq4",{"_index":9144,"t":{"3914":{"position":[[3116,6]]}}}],["i5xkw4",{"_index":9097,"t":{"3914":{"position":[[61,6]]}}}],["i5y04n",{"_index":9069,"t":{"3912":{"position":[[694,6]]}}}],["i5y6u3",{"_index":9068,"t":{"3912":{"position":[[620,6]]}}}],["i5ybhl",{"_index":9089,"t":{"3912":{"position":[[2070,6],[2136,6]]}}}],["i5yezq",{"_index":9090,"t":{"3912":{"position":[[2205,6]]}}}],["i5yg48",{"_index":9067,"t":{"3912":{"position":[[546,6]]}}}],["i5yot3",{"_index":9083,"t":{"3912":{"position":[[1620,6]]}}}],["i5z8kc",{"_index":9073,"t":{"3912":{"position":[[907,6]]}}}],["i5z8rm",{"_index":9091,"t":{"3912":{"position":[[2285,6]]}}}],["i5z9ti",{"_index":9066,"t":{"3912":{"position":[[472,6]]}}}],["i5zy1l",{"_index":9075,"t":{"3912":{"position":[[967,6]]}}}],["i600r4",{"_index":9065,"t":{"3912":{"position":[[398,6]]}}}],["i602nu",{"_index":9076,"t":{"3912":{"position":[[1043,6]]}}}],["i603az",{"_index":9081,"t":{"3912":{"position":[[1324,6]]}}}],["i60591",{"_index":9064,"t":{"3912":{"position":[[324,6]]}}}],["i60gz8",{"_index":9063,"t":{"3912":{"position":[[250,6]]}}}],["i60iyu",{"_index":9080,"t":{"3912":{"position":[[1279,6],[2421,6]]}}}],["i60mfk",{"_index":9062,"t":{"3912":{"position":[[176,6]]}}}],["i60mp2",{"_index":9096,"t":{"3912":{"position":[[2772,6]]}}}],["i60ot6",{"_index":9045,"t":{"3910":{"position":[[515,6]]}}}],["i61xhv",{"_index":9048,"t":{"3910":{"position":[[1055,6]]}}}],["i62hp1",{"_index":9060,"t":{"3910":{"position":[[2505,6]]}}}],["i7",{"_index":1354,"t":{"190":{"position":[[113,2]]}}}],["iactionfilt",{"_index":5786,"t":{"1901":{"position":[[251,13]]},"1903":{"position":[[344,13]]},"1959":{"position":[[43,13]]}}}],["iactionresult",{"_index":236,"t":{"15":{"position":[[33,13]]},"17":{"position":[[27,13]]},"19":{"position":[[39,13],[639,13]]},"237":{"position":[[116,13],[590,13],[866,13]]},"253":{"position":[[517,13]]},"288":{"position":[[372,13]]},"627":{"position":[[182,13]]},"1408":{"position":[[902,13]]},"1410":{"position":[[927,13]]},"1572":{"position":[[267,13],[479,13]]},"1739":{"position":[[35,13],[283,13]]},"1741":{"position":[[113,13],[803,13],[1565,13],[1770,13],[2407,13]]},"1743":{"position":[[68,13],[377,13]]},"1745":{"position":[[164,13]]},"1749":{"position":[[82,13]]},"1887":{"position":[[78,13],[154,13]]},"1909":{"position":[[735,13],[1172,13]]},"1913":{"position":[[1530,13],[1686,13]]},"1915":{"position":[[365,13]]},"1919":{"position":[[978,13],[1124,13]]},"1921":{"position":[[384,13]]},"1925":{"position":[[1701,13],[1843,13]]},"1927":{"position":[[984,13]]},"1929":{"position":[[372,13]]},"1933":{"position":[[1147,13],[1295,13]]},"1935":{"position":[[608,13]]},"1937":{"position":[[339,13]]},"1941":{"position":[[1389,13],[1531,13]]},"1943":{"position":[[549,13]]},"1945":{"position":[[372,13]]},"2235":{"position":[[114,13]]},"2551":{"position":[[222,13]]},"3162":{"position":[[249,13]]},"3672":{"position":[[158,13]]},"3708":{"position":[[1209,13],[1611,13],[1979,13]]},"3716":{"position":[[217,13],[324,13],[421,13]]},"3720":{"position":[[43,13]]},"3934":{"position":[[1403,13]]},"3946":{"position":[[212,13]]},"3948":{"position":[[237,13]]},"3956":{"position":[[850,13],[1155,13],[1447,13]]}}}],["iactionresulttypemapp",{"_index":8224,"t":{"3452":{"position":[[3504,23]]},"3916":{"position":[[6500,23]]}}}],["iallowanonymousfilt",{"_index":5838,"t":{"1913":{"position":[[740,21]]}}}],["ialwaysrunresultfilt",{"_index":5793,"t":{"1901":{"position":[[466,22]]},"1947":{"position":[[0,22],[235,22]]},"1959":{"position":[[97,22]]}}}],["iamoldli",{"_index":6980,"t":{"2768":{"position":[[1241,8]]}}}],["iapplicationbuild",{"_index":1521,"t":{"204":{"position":[[382,19]]},"210":{"position":[[132,19],[474,19],[650,19]]},"212":{"position":[[350,19],[639,19]]},"216":{"position":[[392,19],[916,19]]},"218":{"position":[[359,19]]},"338":{"position":[[724,19]]},"346":{"position":[[252,19],[406,19]]},"371":{"position":[[387,19]]},"411":{"position":[[411,19]]},"730":{"position":[[99,19]]},"732":{"position":[[22,19]]},"1979":{"position":[[513,19]]},"2255":{"position":[[169,19]]},"2272":{"position":[[468,19]]},"2281":{"position":[[261,19]]},"2519":{"position":[[174,19]]},"2579":{"position":[[706,19],[749,19],[881,19]]},"2581":{"position":[[1165,19],[1208,19]]},"2848":{"position":[[401,19]]},"2881":{"position":[[755,19]]},"2889":{"position":[[490,19]]},"2905":{"position":[[343,19]]},"3144":{"position":[[424,19]]},"3156":{"position":[[476,19]]},"3373":{"position":[[445,19]]},"3630":{"position":[[494,19]]},"3666":{"position":[[219,19]]},"3708":{"position":[[3970,19]]},"3918":{"position":[[2619,19]]}}}],["iapplicationcompon",{"_index":2248,"t":{"342":{"position":[[86,21]]},"346":{"position":[[0,21],[143,21]]},"355":{"position":[[94,21],[180,21],[409,21],[564,21]]},"371":{"position":[[346,21]]}}}],["iapplicationmodelconvent",{"_index":5083,"t":{"1589":{"position":[[83,27]]}}}],["iasync",{"_index":5804,"t":{"1903":{"position":[[429,6]]}}}],["iasyncactionfilt",{"_index":705,"t":{"112":{"position":[[75,18],[129,18],[357,18]]},"1665":{"position":[[119,18]]},"1901":{"position":[[265,18]]},"1925":{"position":[[205,18]]},"1929":{"position":[[206,18]]},"1961":{"position":[[198,18]]}}}],["iasyncalwaysrunresultfilt",{"_index":5893,"t":{"1947":{"position":[[25,27],[262,27]]}}}],["iasyncalwaysrunreusltfilt",{"_index":5794,"t":{"1901":{"position":[[558,27]]}}}],["iasyncauthorizationfilt",{"_index":5782,"t":{"1901":{"position":[[78,25]]},"1903":{"position":[[21,25]]},"1913":{"position":[[318,25]]},"1915":{"position":[[213,25]]}}}],["iasyncexceptionfilt",{"_index":5789,"t":{"1901":{"position":[[338,21]]},"1933":{"position":[[178,21]]},"1937":{"position":[[209,21]]},"1955":{"position":[[216,21]]}}}],["iasyncpagefilt",{"_index":5796,"t":{"1901":{"position":[[680,16]]},"1951":{"position":[[95,16]]}}}],["iasyncresourcefilt",{"_index":5785,"t":{"1901":{"position":[[170,20]]},"1919":{"position":[[152,20]]},"1921":{"position":[[208,20]]}}}],["iasyncresultfilt",{"_index":5792,"t":{"1901":{"position":[[447,18]]},"1941":{"position":[[181,18]]},"1945":{"position":[[206,18]]},"1955":{"position":[[136,18]]}}}],["iat",{"_index":809,"t":{"114":{"position":[[987,3]]},"3446":{"position":[[1462,3]]},"3452":{"position":[[2167,3]]},"3916":{"position":[[5163,3]]},"3928":{"position":[[2024,3]]}}}],["iauthorizationfilt",{"_index":5781,"t":{"1901":{"position":[[57,20]]},"1959":{"position":[[0,20]]}}}],["ibaiqian",{"_index":4556,"t":{"1509":{"position":[[317,8]]}}}],["ibusinessservic",{"_index":4247,"t":{"1408":{"position":[[3,16],[182,16],[254,16],[752,16],[811,16],[1206,16]]},"1410":{"position":[[3,16],[188,16],[266,16],[767,16],[831,16]]},"1412":{"position":[[283,16],[435,16],[505,16],[642,16],[1011,16],[1099,16],[2047,16],[2099,16],[2274,16],[2365,16],[2692,16],[2800,16],[2904,16],[2983,16]]}}}],["icalcservic",{"_index":8005,"t":{"3379":{"position":[[84,12],[152,12]]},"3381":{"position":[[108,12],[152,12]]},"3389":{"position":[[1084,12],[1173,12]]},"3391":{"position":[[432,12],[568,12]]},"3393":{"position":[[713,12],[906,12]]},"3924":{"position":[[3326,12],[3370,12]]}}}],["ichatcli",{"_index":7544,"t":{"3154":{"position":[[405,11],[511,11],[681,11]]},"3168":{"position":[[173,11],[260,11]]}}}],["iclassfixtur",{"_index":8011,"t":{"3389":{"position":[[133,13]]},"3391":{"position":[[69,13],[383,13]]},"3393":{"position":[[25,13],[150,13],[664,13]]},"3397":{"position":[[388,13]]}}}],["icollect",{"_index":3375,"t":{"696":{"position":[[1803,11]]},"747":{"position":[[473,11]]},"851":{"position":[[648,11],[738,11],[1979,11]]},"855":{"position":[[107,11]]},"857":{"position":[[103,11]]},"877":{"position":[[676,11],[2193,11]]}}}],["icollectionfixtur",{"_index":8012,"t":{"3389":{"position":[[151,18]]},"3393":{"position":[[0,18],[67,18],[179,18],[489,18]]}}}],["icompon",{"_index":2245,"t":{"342":{"position":[[46,10]]},"344":{"position":[[166,10]]},"346":{"position":[[167,10]]},"348":{"position":[[186,10]]}}}],["iconditionalmodel",{"_index":7660,"t":{"3224":{"position":[[775,17],[815,17]]}}}],["iconfigur",{"_index":1605,"t":{"218":{"position":[[114,14]]},"435":{"position":[[29,14],[672,14],[886,14],[942,14],[1063,14],[1111,14]]},"437":{"position":[[14,14]]},"463":{"position":[[18,14]]},"1979":{"position":[[260,14],[332,14]]},"2023":{"position":[[6,14]]},"2725":{"position":[[1563,14]]},"2727":{"position":[[590,14],[853,14]]},"2729":{"position":[[167,14],[497,14],[657,14]]},"3215":{"position":[[115,14]]},"3791":{"position":[[61,14],[163,14],[231,14],[683,14],[803,14],[1482,14],[1596,14]]}}}],["iconfigurableopt",{"_index":6821,"t":{"2709":{"position":[[95,20],[294,20]]},"2721":{"position":[[216,20],[412,20],[650,20],[864,20]]},"2725":{"position":[[297,20],[1064,20],[1266,20],[1799,20],[1883,20],[2505,20],[2560,20]]},"2727":{"position":[[67,20],[322,20],[720,20],[775,20]]},"2729":{"position":[[743,20]]},"2735":{"position":[[219,20]]},"3936":{"position":[[1690,20]]}}}],["iconfigurableoptionslisten",{"_index":6837,"t":{"2717":{"position":[[316,28]]},"2729":{"position":[[88,28],[298,28],[700,28]]},"2731":{"position":[[180,28]]}}}],["iconnect",{"_index":5548,"t":{"1801":{"position":[[732,11]]}}}],["iconsum",{"_index":5592,"t":{"1803":{"position":[[444,9]]}}}],["icq",{"_index":7488,"t":{"3136":{"position":[[277,3]]}}}],["icu",{"_index":518,"t":{"87":{"position":[[52,3]]},"314":{"position":[[765,3]]},"316":{"position":[[704,3]]},"406":{"position":[[45,3],[68,3],[119,3],[143,3],[196,3],[266,3],[290,3],[332,3],[360,3]]},"413":{"position":[[211,3]]},"1483":{"position":[[583,3],[1013,3]]},"1551":{"position":[[965,3]]},"2261":{"position":[[133,3],[327,3]]},"2993":{"position":[[111,3]]},"3065":{"position":[[176,3]]},"3464":{"position":[[181,3],[375,3]]},"3483":{"position":[[163,3],[228,3],[294,3],[361,3],[433,3],[502,3],[925,3],[987,3],[1051,3],[1113,3],[1181,3],[1247,3]]},"3486":{"position":[[54,3],[130,3],[207,3],[285,3],[368,3],[448,3],[526,3]]},"3488":{"position":[[75,3]]},"3490":{"position":[[26,3]]},"3492":{"position":[[34,3],[230,3]]},"3494":{"position":[[34,3],[211,3]]},"3496":{"position":[[34,3],[164,3],[275,3],[413,3]]},"3498":{"position":[[443,3]]},"3500":{"position":[[34,3],[144,3],[268,3],[437,3],[628,3]]},"3502":{"position":[[26,3]]},"3504":{"position":[[26,3]]},"3506":{"position":[[108,3],[219,3],[337,3],[485,3]]},"3508":{"position":[[26,3],[108,3]]},"3510":{"position":[[26,3]]},"3512":{"position":[[26,3]]},"3514":{"position":[[26,3]]},"3516":{"position":[[26,3]]},"3518":{"position":[[26,3]]},"3520":{"position":[[182,3],[261,3],[329,3]]},"3522":{"position":[[228,3],[372,3],[565,3],[744,3],[1308,3],[1472,3]]},"3524":{"position":[[80,3]]},"3526":{"position":[[114,3]]},"3528":{"position":[[66,3]]},"3530":{"position":[[68,3]]},"3532":{"position":[[111,3]]},"3535":{"position":[[84,3],[176,3],[268,3],[364,3],[464,3],[560,3]]},"3537":{"position":[[71,3]]},"3539":{"position":[[190,3],[329,3],[442,3]]},"3541":{"position":[[71,3],[184,3],[290,3],[412,3],[589,3],[777,3]]},"3545":{"position":[[72,3],[167,3],[299,3]]},"3547":{"position":[[146,3],[302,3]]},"3549":{"position":[[72,3],[209,3]]},"3551":{"position":[[123,3]]},"3553":{"position":[[123,3]]},"3555":{"position":[[123,3]]},"3557":{"position":[[123,3]]},"3559":{"position":[[123,3]]},"3561":{"position":[[181,3],[261,3],[328,3],[393,3]]},"3563":{"position":[[214,3],[418,3],[804,3],[936,3],[1118,3],[1263,3]]},"3565":{"position":[[199,3]]},"3567":{"position":[[133,3]]},"3569":{"position":[[102,3]]},"3571":{"position":[[147,3]]},"3603":{"position":[[80,3],[211,3]]},"3642":{"position":[[250,3]]},"3702":{"position":[[1159,3],[1309,3]]},"3706":{"position":[[1924,3]]},"3754":{"position":[[342,3]]},"3918":{"position":[[1606,3],[1748,3],[1893,3],[2086,3],[2250,3],[2892,3],[2973,3]]},"3936":{"position":[[1999,3],[2186,3]]},"4006":{"position":[[665,3]]}}}],["id",{"_index":818,"t":{"114":{"position":[[1187,2],[1293,2]]},"127":{"position":[[1867,2],[1878,2]]},"144":{"position":[[197,2],[208,2]]},"284":{"position":[[248,2]]},"386":{"position":[[83,3]]},"520":{"position":[[80,2],[264,2],[490,2]]},"550":{"position":[[285,2],[291,2],[320,2],[544,2]]},"556":{"position":[[59,2],[85,2]]},"558":{"position":[[57,2],[101,2],[146,2],[219,2]]},"597":{"position":[[155,2],[187,2],[495,2],[551,2],[564,2]]},"599":{"position":[[185,2],[217,2]]},"608":{"position":[[206,2]]},"639":{"position":[[33,2],[249,2]]},"696":{"position":[[1541,2],[2683,2],[3563,2],[4277,2],[4592,2]]},"763":{"position":[[244,2]]},"820":{"position":[[28,2],[66,2]]},"822":{"position":[[252,2]]},"824":{"position":[[31,2],[83,2],[212,2]]},"828":{"position":[[34,2],[76,2],[121,2],[127,2]]},"830":{"position":[[68,2],[97,2]]},"832":{"position":[[295,2],[334,2]]},"834":{"position":[[158,2]]},"853":{"position":[[303,2],[604,2]]},"860":{"position":[[107,2],[242,2],[249,2]]},"862":{"position":[[107,2],[290,2],[297,2]]},"866":{"position":[[377,2],[434,2]]},"868":{"position":[[42,2],[90,2]]},"871":{"position":[[60,2],[124,2]]},"873":{"position":[[70,2],[144,2]]},"875":{"position":[[60,2]]},"877":{"position":[[495,2],[1395,2],[1491,2],[1599,2],[1707,2],[1815,2],[2064,2],[2327,2]]},"889":{"position":[[713,2]]},"901":{"position":[[80,2],[292,2],[518,2]]},"913":{"position":[[167,2]]},"933":{"position":[[433,2],[805,2],[917,2]]},"960":{"position":[[45,2],[100,2],[162,2],[228,2],[319,2],[376,2],[479,2],[590,2],[907,2],[1192,2],[1248,2],[1501,2],[1566,2],[1685,2],[1747,2]]},"962":{"position":[[63,2],[132,2],[230,2],[310,2]]},"965":{"position":[[102,2],[222,2],[278,2],[418,2],[560,2],[622,2]]},"967":{"position":[[100,2],[162,2],[280,2],[420,2],[493,2],[628,2]]},"969":{"position":[[97,2],[265,2],[410,2],[606,2]]},"971":{"position":[[97,2],[265,2],[410,2],[606,2]]},"1037":{"position":[[730,2]]},"1060":{"position":[[284,2],[373,2]]},"1125":{"position":[[99,2],[255,2],[261,2]]},"1127":{"position":[[123,2]]},"1145":{"position":[[391,2],[448,2]]},"1147":{"position":[[282,2],[339,2]]},"1151":{"position":[[360,2],[417,2]]},"1160":{"position":[[134,2],[140,2],[158,2],[200,2],[496,2],[500,2],[549,2],[624,2],[642,2],[706,2],[725,2],[816,2],[837,2],[843,2],[862,2],[1024,2],[1030,2],[1053,2],[1101,2],[1419,2],[1423,2],[1477,2],[1558,2],[1581,2],[1651,2],[1675,2],[1772,2],[1793,2],[1799,2],[1823,2]]},"1162":{"position":[[138,2],[144,2],[170,2],[210,2],[518,2],[522,2],[579,2],[652,2],[678,2],[740,2],[767,2],[856,2],[877,2],[883,2],[910,2],[1076,2],[1082,2],[1113,2],[1159,2],[1489,2],[1493,2],[1555,2],[1634,2],[1665,2],[1733,2],[1765,2],[1860,2],[1881,2],[1887,2],[1919,2]]},"1164":{"position":[[153,2],[159,2],[225,2],[323,2],[373,2],[395,2],[575,2],[581,2],[652,2],[756,2],[806,2],[833,2]]},"1166":{"position":[[193,2],[199,2],[281,2],[410,2],[460,2],[518,2],[738,2],[744,2],[831,2],[966,2],[1016,2],[1079,2]]},"1168":{"position":[[68,2],[74,2],[93,2],[153,2],[159,2],[186,2],[245,2],[251,2],[275,2],[359,2],[365,2],[389,2],[455,2],[461,2],[493,2],[558,2],[564,2],[593,2]]},"1170":{"position":[[372,2],[376,2],[397,2],[468,2],[494,2],[896,2],[900,2],[926,2],[1003,2],[1034,2]]},"1173":{"position":[[132,2],[200,2],[374,2],[453,2]]},"1175":{"position":[[144,2],[218,2],[404,2],[489,2]]},"1177":{"position":[[132,2],[200,2],[374,2],[453,2]]},"1179":{"position":[[167,2],[276,2],[421,2],[630,2],[750,2],[906,2]]},"1181":{"position":[[73,2],[146,2],[249,2],[362,2],[446,2],[560,2]]},"1183":{"position":[[146,2],[251,2],[333,2],[509,2],[625,2],[718,2]]},"1185":{"position":[[25,2],[181,2],[187,2],[400,2],[798,2],[896,2],[1056,2],[1183,2],[1292,2],[1463,2]]},"1188":{"position":[[120,2],[245,2],[397,2],[544,2]]},"1190":{"position":[[126,2],[256,2],[414,2],[566,2]]},"1194":{"position":[[200,2],[206,2],[217,2],[385,2],[391,2],[402,2]]},"1204":{"position":[[124,2],[130,2]]},"1234":{"position":[[165,2],[170,2],[220,2],[297,2],[302,2],[416,2],[489,2],[999,2],[1097,2],[1103,2]]},"1236":{"position":[[165,2],[170,2],[223,2],[300,2],[305,2],[422,2],[498,2]]},"1238":{"position":[[167,2],[172,2],[231,2],[236,2],[263,2],[342,2],[347,2],[406,2],[411,2],[504,2],[596,2]]},"1240":{"position":[[167,2],[172,2],[231,2],[236,2],[284,2],[363,2],[368,2],[427,2],[432,2],[546,2],[659,2],[1092,2],[1097,2],[1160,2]]},"1242":{"position":[[149,2],[155,2],[181,2],[228,2],[234,2],[257,2],[305,2],[311,2],[348,2]]},"1244":{"position":[[234,2],[240,2],[262,2],[315,2],[319,2],[341,2]]},"1246":{"position":[[144,2],[148,2],[175,2]]},"1248":{"position":[[194,2],[200,2],[241,2],[298,2],[304,2],[356,2]]},"1251":{"position":[[222,2],[280,2]]},"1253":{"position":[[228,2],[289,2]]},"1255":{"position":[[212,2],[265,2]]},"1257":{"position":[[256,2],[344,2],[452,2]]},"1259":{"position":[[212,2],[262,2]]},"1261":{"position":[[208,2],[259,2]]},"1265":{"position":[[153,2]]},"1267":{"position":[[231,2]]},"1269":{"position":[[68,2],[74,2],[150,2]]},"1275":{"position":[[276,2]]},"1279":{"position":[[334,2],[597,2],[773,2]]},"1286":{"position":[[199,2],[205,2],[312,2],[318,2]]},"1295":{"position":[[70,2],[138,2],[214,2]]},"1297":{"position":[[94,2],[114,2],[120,2]]},"1302":{"position":[[87,2],[93,2],[139,2]]},"1315":{"position":[[80,2],[292,2],[518,2]]},"1362":{"position":[[31,2]]},"1364":{"position":[[194,2],[223,2]]},"1366":{"position":[[68,2]]},"1396":{"position":[[196,2],[225,2]]},"1408":{"position":[[216,2],[466,2],[502,2],[924,2],[964,2]]},"1410":{"position":[[225,2],[481,2],[517,2],[949,2],[989,2]]},"1414":{"position":[[402,2],[438,2],[843,2],[873,2]]},"1566":{"position":[[816,2],[876,2],[882,2]]},"1607":{"position":[[148,2],[164,2],[198,2],[227,2]]},"1611":{"position":[[379,2],[484,2]]},"1627":{"position":[[137,2],[173,2],[212,2]]},"1633":{"position":[[93,2],[160,2],[226,2],[297,2]]},"1635":{"position":[[151,2]]},"1657":{"position":[[435,2],[448,2]]},"1659":{"position":[[248,2],[261,2],[389,2],[402,2],[645,2],[658,2],[824,2],[837,2],[1083,2],[1096,2],[1265,2],[1278,2]]},"1683":{"position":[[92,2]]},"1691":{"position":[[134,2]]},"1703":{"position":[[32,2]]},"1705":{"position":[[43,2]]},"1745":{"position":[[376,2]]},"1763":{"position":[[109,2]]},"1765":{"position":[[65,2]]},"1767":{"position":[[108,2],[137,2]]},"1769":{"position":[[96,2]]},"1771":{"position":[[92,2]]},"1773":{"position":[[149,2],[178,2]]},"1775":{"position":[[3739,2]]},"1779":{"position":[[496,2]]},"1781":{"position":[[348,2]]},"1795":{"position":[[915,2]]},"1797":{"position":[[322,2]]},"1821":{"position":[[205,2]]},"1845":{"position":[[181,2],[191,2],[218,2],[240,2],[454,2],[464,2],[491,2],[549,2]]},"1859":{"position":[[173,2],[183,2],[225,2],[242,2]]},"1869":{"position":[[516,2],[526,2],[556,2],[593,2]]},"1873":{"position":[[348,2],[358,2],[400,2],[417,2]]},"1875":{"position":[[551,2],[561,2],[603,2],[620,2]]},"2165":{"position":[[49,2],[113,2]]},"2179":{"position":[[37,2]]},"2326":{"position":[[15,2],[150,2],[161,2],[201,2],[293,2]]},"2328":{"position":[[7,2],[22,2],[30,2]]},"2331":{"position":[[181,2]]},"2333":{"position":[[2,2],[17,2],[52,2],[131,2],[322,2]]},"2335":{"position":[[28,2],[47,2],[67,2]]},"2350":{"position":[[65,2]]},"2352":{"position":[[43,2]]},"2354":{"position":[[168,2]]},"2559":{"position":[[1429,2],[1435,2],[1438,2]]},"2607":{"position":[[381,2]]},"2649":{"position":[[99,3]]},"2653":{"position":[[17,3]]},"2684":{"position":[[94,2],[106,2]]},"2694":{"position":[[129,2],[136,2]]},"2749":{"position":[[330,2]]},"2848":{"position":[[1580,2]]},"2937":{"position":[[1276,2],[1388,2]]},"3080":{"position":[[898,2]]},"3108":{"position":[[31,2],[48,2],[162,2]]},"3110":{"position":[[8,2],[28,2]]},"3118":{"position":[[331,2],[339,2]]},"3122":{"position":[[49,2]]},"3144":{"position":[[640,2]]},"3168":{"position":[[61,3]]},"3218":{"position":[[97,2],[146,2],[182,2],[227,2],[234,2],[294,2],[302,2],[402,2],[447,2],[485,2]]},"3222":{"position":[[272,2]]},"3224":{"position":[[297,2],[338,2],[407,2],[494,2],[885,2],[946,2],[1059,2],[1141,2],[1329,3],[1374,2],[1419,2],[1561,2]]},"3230":{"position":[[120,2],[274,2],[406,2]]},"3234":{"position":[[228,2]]},"3236":{"position":[[300,2]]},"3258":{"position":[[109,2],[271,2],[403,2],[494,2]]},"3261":{"position":[[175,2],[391,2],[452,2]]},"3263":{"position":[[103,2],[129,2],[135,2],[205,2],[213,2],[337,2]]},"3267":{"position":[[570,2]]},"3269":{"position":[[525,2]]},"3271":{"position":[[75,2],[211,2]]},"3273":{"position":[[161,2],[165,2],[233,2],[335,2],[339,2],[362,2]]},"3287":{"position":[[182,2],[240,2],[507,2],[565,2]]},"3430":{"position":[[1886,2]]},"3432":{"position":[[3771,2]]},"3446":{"position":[[158,2],[187,2],[192,2],[1662,2],[1768,2]]},"3452":{"position":[[2518,2],[2832,2],[3246,2]]},"3456":{"position":[[286,2],[305,2]]},"3466":{"position":[[213,2],[380,2],[498,2],[615,2],[661,2],[1468,2],[1566,2]]},"3492":{"position":[[44,2],[60,2],[66,2],[121,2],[158,2],[176,2],[240,2],[276,2]]},"3496":{"position":[[91,2],[190,2],[301,2],[421,2]]},"3500":{"position":[[71,2],[176,2],[305,2],[500,2]]},"3537":{"position":[[80,2],[176,2]]},"3539":{"position":[[199,2],[286,2],[379,2],[492,2]]},"3541":{"position":[[80,2],[141,2],[195,2],[356,2],[478,2],[686,2],[785,2]]},"3549":{"position":[[140,2]]},"3636":{"position":[[413,2],[456,2],[512,2],[525,2]]},"3638":{"position":[[580,2],[671,2],[684,2]]},"3640":{"position":[[380,2],[393,2]]},"3644":{"position":[[248,2],[261,2],[389,2],[402,2],[645,2],[658,2],[824,2],[837,2],[1083,2],[1096,2],[1265,2],[1278,2]]},"3650":{"position":[[189,2],[417,2]]},"3714":{"position":[[170,2]]},"3764":{"position":[[12,2]]},"3770":{"position":[[2134,2],[2161,2],[3948,2],[3976,2],[4486,2],[4517,2]]},"3772":{"position":[[516,2],[792,2],[1001,2],[1009,2],[1118,2],[1126,2],[1235,2],[1243,2],[1352,2],[1360,2],[1469,2],[1477,2],[1586,2],[1594,2],[1809,2],[1817,2],[1926,2],[1934,2],[2043,2],[2051,2]]},"3777":{"position":[[80,2]]},"3781":{"position":[[160,2]]},"3785":{"position":[[1152,2],[1394,2]]},"3793":{"position":[[96,2],[115,2]]},"3798":{"position":[[88,2],[107,2]]},"3808":{"position":[[2955,2]]},"3810":{"position":[[173,2]]},"3812":{"position":[[1724,2],[1752,2],[2259,2],[2290,2]]},"3819":{"position":[[989,2]]},"3826":{"position":[[446,2],[499,2]]},"3830":{"position":[[222,2],[241,2]]},"3914":{"position":[[1771,2],[1913,2],[2059,2]]},"3916":{"position":[[5514,2],[5828,2],[6242,2]]},"3922":{"position":[[71,2]]},"3924":{"position":[[4629,2],[4767,2],[4858,2]]},"3928":{"position":[[1048,2],[1077,2],[1082,2],[2224,2],[2330,2]]},"3932":{"position":[[2160,2],[2164,2],[2191,2],[2319,2],[2324,2],[2387,2]]},"3934":{"position":[[2652,3]]},"3936":{"position":[[78,2],[992,2],[1296,2]]},"3962":{"position":[[1140,2],[1891,2]]},"3964":{"position":[[725,2]]},"3966":{"position":[[196,2]]},"3974":{"position":[[846,2]]},"3976":{"position":[[340,2],[513,2]]},"3986":{"position":[[22,2]]}}}],["id0",{"_index":7633,"t":{"3218":{"position":[[492,3]]}}}],["id_trigger1",{"_index":8773,"t":{"3772":{"position":[[1009,11],[1126,11],[1243,11],[1360,11],[1477,11],[1594,11],[1817,11],[1934,11],[2051,11]]}}}],["idapperrepositori",{"_index":2885,"t":{"548":{"position":[[19,17],[39,17],[95,17],[153,17],[253,17],[319,17]]},"552":{"position":[[13,17],[33,17]]},"554":{"position":[[0,17],[20,17]]}}}],["idatabaseloggingwrit",{"_index":8154,"t":{"3434":{"position":[[79,22],[200,22],[1664,22],[1868,22]]},"3452":{"position":[[573,22]]},"3458":{"position":[[287,22],[678,22]]},"3466":{"position":[[985,22]]},"3470":{"position":[[44,22]]},"3912":{"position":[[1951,22]]},"3916":{"position":[[3569,22]]},"3920":{"position":[[1722,22]]}}}],["idbconnect",{"_index":2911,"t":{"554":{"position":[[87,13]]}}}],["idbcontextloc",{"_index":3803,"t":{"945":{"position":[[56,17],[238,17]]},"1041":{"position":[[351,17],[780,17]]},"1056":{"position":[[608,17]]},"1775":{"position":[[581,17],[746,17],[798,17],[983,17],[1035,17],[1087,17],[1292,17],[1344,17],[1396,17],[1448,17],[1673,17],[1725,17],[1777,17],[1829,17],[1881,17],[2126,17],[2178,17],[2230,17],[2282,17],[2334,17],[2386,17],[2651,17],[2703,17],[2755,17],[2807,17],[2859,17],[2911,17],[2963,17],[3248,17],[3300,17],[3352,17],[3404,17],[3456,17],[3508,17],[3560,17],[3612,17]]}}}],["idbrepositori",{"_index":3808,"t":{"949":{"position":[[154,13]]},"988":{"position":[[303,13]]},"1018":{"position":[[0,13]]},"3998":{"position":[[159,13]]}}}],["idcard",{"_index":3139,"t":{"606":{"position":[[123,6]]},"608":{"position":[[570,6],[622,6]]},"617":{"position":[[339,6],[365,6]]},"2684":{"position":[[241,6],[257,6]]},"2688":{"position":[[128,6]]},"2690":{"position":[[256,6],[275,6]]}}}],["idea",{"_index":7026,"t":{"2770":{"position":[[333,4]]}}}],["ideletablerepositori",{"_index":3873,"t":{"1008":{"position":[[0,20],[48,20]]}}}],["ident",{"_index":1087,"t":{"135":{"position":[[434,8]]},"1060":{"position":[[351,8]]},"3189":{"position":[[539,8]]}}}],["identitymodel",{"_index":1059,"t":{"133":{"position":[[221,13]]}}}],["idesigntimeservic",{"_index":3432,"t":{"734":{"position":[[25,19],[7958,19]]}}}],["idgen",{"_index":6160,"t":{"2331":{"position":[[3,5],[23,5],[64,5],[201,5],[497,5],[549,5]]},"3966":{"position":[[1763,5]]},"3968":{"position":[[249,5]]}}}],["idgen2",{"_index":6171,"t":{"2331":{"position":[[577,6],[631,6]]}}}],["idgener",{"_index":6168,"t":{"2331":{"position":[[323,11],[379,11],[395,11],[409,11],[440,11]]},"3986":{"position":[[7,11],[31,11]]}}}],["idgenerat",{"_index":9863,"t":{"3968":{"position":[[230,11]]}}}],["idictionari",{"_index":9632,"t":{"3950":{"position":[[182,11]]},"3976":{"position":[[155,11]]}}}],["idispatchproxi",{"_index":4287,"t":{"1416":{"position":[[471,14]]},"1424":{"position":[[641,14]]},"1426":{"position":[[26,14]]}}}],["idispos",{"_index":5543,"t":{"1801":{"position":[[500,11]]},"1803":{"position":[[312,11],[2590,11]]},"1823":{"position":[[123,11]]},"2175":{"position":[[56,11]]},"2731":{"position":[[287,11],[318,11]]},"3387":{"position":[[36,11],[131,11]]},"3389":{"position":[[245,11]]},"3391":{"position":[[140,11]]},"3393":{"position":[[276,11]]},"3466":{"position":[[1160,11],[1232,11]]},"3791":{"position":[[1410,11]]}}}],["idistributedcach",{"_index":1775,"t":{"239":{"position":[[313,17]]},"243":{"position":[[0,17]]},"245":{"position":[[45,17]]},"253":{"position":[[5,17],[28,17],[115,17],[159,17]]},"255":{"position":[[3,17]]}}}],["idistributedidgener",{"_index":6166,"t":{"2331":{"position":[[249,23],[298,23],[355,23]]}}}],["idl",{"_index":4384,"t":{"1474":{"position":[[415,4]]}}}],["idletimeout",{"_index":7112,"t":{"2848":{"position":[[212,11]]}}}],["idynamicapicontrol",{"_index":195,"t":{"11":{"position":[[1003,21]]},"129":{"position":[[539,21]]},"231":{"position":[[162,21]]},"597":{"position":[[415,21]]},"602":{"position":[[127,21]]},"625":{"position":[[259,21]]},"1064":{"position":[[179,21]]},"1066":{"position":[[781,21]]},"1368":{"position":[[255,21]]},"1412":{"position":[[948,21]]},"1580":{"position":[[208,21]]},"1584":{"position":[[26,21],[100,21],[223,21]]},"1587":{"position":[[191,21]]},"1603":{"position":[[98,21]]},"1605":{"position":[[98,21]]},"1607":{"position":[[98,21]]},"1609":{"position":[[161,21],[507,21]]},"1611":{"position":[[299,21]]},"1613":{"position":[[130,21]]},"1615":{"position":[[130,21]]},"1617":{"position":[[223,21],[435,21],[718,21],[982,21]]},"1619":{"position":[[268,21]]},"1621":{"position":[[113,21],[222,21],[333,21],[513,21]]},"1643":{"position":[[179,21]]},"1645":{"position":[[172,21]]},"1647":{"position":[[222,21]]},"1649":{"position":[[131,21]]},"1651":{"position":[[141,21]]},"1653":{"position":[[176,21]]},"1655":{"position":[[189,21]]},"1657":{"position":[[310,21]]},"1659":{"position":[[158,21],[299,21],[555,21],[734,21],[993,21],[1175,21]]},"1815":{"position":[[119,21]]},"1845":{"position":[[138,21],[411,21]]},"1859":{"position":[[130,21]]},"1869":{"position":[[473,21]]},"1873":{"position":[[234,21]]},"1875":{"position":[[130,21]]},"2294":{"position":[[1051,21]]},"2348":{"position":[[247,21]]},"3446":{"position":[[86,21]]},"3483":{"position":[[698,21]]},"3636":{"position":[[260,21]]},"3638":{"position":[[204,21]]},"3640":{"position":[[161,21]]},"3644":{"position":[[158,21],[299,21],[555,21],[734,21],[993,21],[1175,21]]},"3656":{"position":[[130,21]]},"3688":{"position":[[278,21]]},"3716":{"position":[[927,21]]},"3734":{"position":[[143,21]]},"3928":{"position":[[976,21]]},"3940":{"position":[[1166,21]]},"3982":{"position":[[696,21]]},"3992":{"position":[[2554,21]]}}}],["ie",{"_index":6518,"t":{"2559":{"position":[[838,2]]}}}],["iendpointfeatur",{"_index":6053,"t":{"2243":{"position":[[206,16]]},"2591":{"position":[[103,16]]}}}],["ientiti",{"_index":3367,"t":{"696":{"position":[[1439,7],[2628,7],[3542,7],[4227,7]]},"708":{"position":[[532,7]]},"793":{"position":[[20,7]]},"911":{"position":[[32,7],[107,7]]},"947":{"position":[[968,7],[1002,7]]},"949":{"position":[[502,7]]},"1060":{"position":[[207,7]]},"1763":{"position":[[24,7]]},"1765":{"position":[[29,7]]},"1767":{"position":[[75,7]]},"1773":{"position":[[301,7]]},"1783":{"position":[[19,7]]},"2971":{"position":[[114,7]]}}}],["ientitychangedlisten",{"_index":3493,"t":{"739":{"position":[[29,22]]},"747":{"position":[[211,22]]},"749":{"position":[[106,22]]},"3988":{"position":[[34,22],[359,22]]}}}],["ientitydatachangedlisten",{"_index":10421,"t":{"3998":{"position":[[79,26],[440,26]]}}}],["ientitymutablet",{"_index":7457,"t":{"3126":{"position":[[340,19]]}}}],["ientitynotkey",{"_index":5460,"t":{"1763":{"position":[[48,13]]},"1765":{"position":[[44,13]]},"3984":{"position":[[874,13]]}}}],["ientityseeddata",{"_index":3680,"t":{"877":{"position":[[298,15]]},"949":{"position":[[561,15]]},"1143":{"position":[[17,15]]},"1145":{"position":[[137,15]]},"1147":{"position":[[126,15]]},"1151":{"position":[[157,15]]},"2929":{"position":[[242,15]]},"2945":{"position":[[242,15]]},"2959":{"position":[[242,15]]}}}],["ientitytypebuild",{"_index":3368,"t":{"696":{"position":[[1448,18],[2637,18],[4236,18]]},"844":{"position":[[33,18],[263,18]]},"877":{"position":[[272,18]]},"889":{"position":[[225,18]]},"949":{"position":[[637,18]]},"1777":{"position":[[88,18],[123,18]]},"1779":{"position":[[189,18]]},"1781":{"position":[[186,18]]},"3992":{"position":[[2365,18]]}}}],["ienumer",{"_index":3103,"t":{"587":{"position":[[1810,11]]},"599":{"position":[[350,11]]},"877":{"position":[[1288,11]]},"1145":{"position":[[278,11]]},"1147":{"position":[[169,11]]},"1151":{"position":[[247,11]]},"1576":{"position":[[232,11]]},"1803":{"position":[[892,11]]},"2790":{"position":[[703,11]]},"2796":{"position":[[260,11]]},"2929":{"position":[[304,11]]},"2945":{"position":[[304,11]]},"2959":{"position":[[304,11]]}}}],["ierrorcodetypeprovid",{"_index":5733,"t":{"1855":{"position":[[468,22]]},"1867":{"position":[[18,22],[203,22],[315,22],[683,22],[735,22]]},"1869":{"position":[[625,22]]}}}],["ieventbusfactori",{"_index":5662,"t":{"1815":{"position":[[51,16],[210,16],[297,16]]},"3920":{"position":[[1048,16]]}}}],["ieventfallbackpolici",{"_index":5671,"t":{"1819":{"position":[[36,20],[134,20],[861,20]]}}}],["ieventhandlerexecutor",{"_index":5650,"t":{"1809":{"position":[[11,21],[149,21]]}}}],["ieventhandlermonitor",{"_index":5642,"t":{"1807":{"position":[[11,20],[149,20]]}}}],["ieventpublish",{"_index":5505,"t":{"1795":{"position":[[1937,15],[2017,15],[2050,15],[2105,15]]},"1805":{"position":[[63,15],[119,15],[469,15]]},"1815":{"position":[[160,15],[265,15]]}}}],["ieventsourc",{"_index":5516,"t":{"1797":{"position":[[10,12],[61,12],[111,12]]},"1799":{"position":[[26,12],[407,12],[570,12]]},"1801":{"position":[[583,12],[1274,12],[1698,12],[2244,12],[2893,12]]},"1803":{"position":[[2673,12],[3468,12],[4206,12],[4865,12]]},"1805":{"position":[[332,12]]},"3918":{"position":[[3734,12]]}}}],["ieventsourcestor",{"_index":5532,"t":{"1799":{"position":[[140,18],[203,18],[723,18]]},"1801":{"position":[[480,18]]},"1803":{"position":[[2570,18]]},"1805":{"position":[[154,18],[219,18]]},"1821":{"position":[[379,18]]}}}],["ieventsubscrib",{"_index":5484,"t":{"1795":{"position":[[35,16],[90,16],[2908,16]]},"1811":{"position":[[145,16]]},"1823":{"position":[[105,16]]}}}],["iexceptionfilt",{"_index":5788,"t":{"1901":{"position":[[321,16]]},"1955":{"position":[[199,16]]},"1959":{"position":[[60,16]]}}}],["ifexcept",{"_index":5735,"t":{"1857":{"position":[[154,11]]},"1871":{"position":[[14,11],[84,11]]},"1873":{"position":[[259,11]]},"1875":{"position":[[155,11],[221,11],[260,11],[331,11],[422,11],[474,11],[678,11]]},"1877":{"position":[[48,11],[71,11]]},"3922":{"position":[[1601,11],[1897,11]]},"3954":{"position":[[232,11]]}}}],["ifileprovid",{"_index":5340,"t":{"1717":{"position":[[43,13]]},"1724":{"position":[[45,13],[125,13],[179,13],[270,13]]}}}],["iformfil",{"_index":273,"t":{"19":{"position":[[75,9]]},"1741":{"position":[[4,9],[62,9],[144,9],[1691,9],[1806,9]]},"1743":{"position":[[99,9],[318,9],[408,9]]},"3942":{"position":[[7,9]]}}}],["igeekfan",{"_index":8560,"t":{"3704":{"position":[[39,8],[103,8]]},"3924":{"position":[[3559,8],[3631,8]]}}}],["igithubcli",{"_index":8371,"t":{"3583":{"position":[[84,13],[154,13],[626,13],[724,13],[778,13]]}}}],["iglobaldispatchproxi",{"_index":4320,"t":{"1426":{"position":[[45,20],[193,20]]}}}],["iglobalexceptionhandl",{"_index":5750,"t":{"1883":{"position":[[28,23],[266,23]]}}}],["ignor",{"_index":6240,"t":{"2363":{"position":[[433,6]]},"2383":{"position":[[449,6]]}}}],["ignoreapi",{"_index":5149,"t":{"1623":{"position":[[97,9]]}}}],["ignorecas",{"_index":3204,"t":{"615":{"position":[[602,10]]}}}],["ignorecolumn",{"_index":7802,"t":{"3269":{"position":[[149,13]]}}}],["ignoreconfigurationfil",{"_index":2585,"t":{"449":{"position":[[63,24],[97,24]]},"2985":{"position":[[96,24],[144,24]]}}}],["ignorecycl",{"_index":6238,"t":{"2363":{"position":[[150,12]]}}}],["ignorenullvalu",{"_index":3264,"t":{"653":{"position":[[68,16],[119,16]]},"1353":{"position":[[68,16],[119,16]]},"3779":{"position":[[1845,15]]},"3802":{"position":[[2622,15]]},"3912":{"position":[[878,15]]},"3996":{"position":[[627,16]]}}}],["ignorenullvaluequeri",{"_index":8332,"t":{"3541":{"position":[[534,22],[599,22]]}}}],["ignorepropertynam",{"_index":8238,"t":{"3456":{"position":[[163,19],[434,19]]}}}],["ignorepropertytyp",{"_index":8239,"t":{"3456":{"position":[[205,19],[482,19]]}}}],["ignorereferenceloop",{"_index":8250,"t":{"3470":{"position":[[251,19]]}}}],["ihelloservic",{"_index":55,"t":{"3":{"position":[[473,13],[699,13],[764,13]]}}}],["ihost",{"_index":7182,"t":{"2899":{"position":[[404,5]]},"3910":{"position":[[1042,5],[1212,5]]}}}],["ihostbuild",{"_index":1510,"t":{"202":{"position":[[315,12]]},"455":{"position":[[387,12]]},"461":{"position":[[1101,12]]},"1667":{"position":[[60,12]]},"1977":{"position":[[215,12]]},"2269":{"position":[[300,12]]},"2776":{"position":[[288,12]]},"2813":{"position":[[953,12]]},"2819":{"position":[[311,12]]},"2821":{"position":[[342,12]]},"2836":{"position":[[401,12],[1614,12]]},"3166":{"position":[[209,12]]}}}],["ihostenviron",{"_index":6724,"t":{"2587":{"position":[[296,16]]},"2589":{"position":[[327,16]]}}}],["ihostingenviron",{"_index":3427,"t":{"730":{"position":[[124,19]]},"732":{"position":[[47,19]]}}}],["ihostservic",{"_index":9504,"t":{"3934":{"position":[[685,12]]}}}],["ihttp",{"_index":8255,"t":{"3483":{"position":[[109,5],[739,5],[780,5]]},"3535":{"position":[[17,5]]},"3537":{"position":[[17,5]]},"3539":{"position":[[136,5]]},"3541":{"position":[[17,5]]},"3543":{"position":[[323,5],[521,5]]},"3545":{"position":[[17,5]]},"3547":{"position":[[91,5]]},"3549":{"position":[[17,5]]},"3551":{"position":[[58,5]]},"3553":{"position":[[58,5]]},"3555":{"position":[[58,5]]},"3557":{"position":[[58,5]]},"3559":{"position":[[58,5]]},"3561":{"position":[[126,5]]},"3563":{"position":[[159,5],[749,5]]},"3565":{"position":[[31,5]]},"3567":{"position":[[78,5]]},"3569":{"position":[[47,5]]},"3571":{"position":[[92,5]]},"3597":{"position":[[263,5]]},"3603":{"position":[[157,5]]},"3918":{"position":[[1551,5]]}}}],["ihttpclientfactori",{"_index":8357,"t":{"3575":{"position":[[648,18],[733,18],[796,18]]},"3579":{"position":[[4,18],[127,18]]},"3601":{"position":[[33,18]]}}}],["ihttpcontextaccessor",{"_index":351,"t":{"21":{"position":[[174,20]]},"23":{"position":[[156,20]]},"28":{"position":[[21,20],[110,20]]},"570":{"position":[[1118,20]]},"2231":{"position":[[156,20]]},"2237":{"position":[[21,20],[110,20]]},"2846":{"position":[[314,20]]},"3954":{"position":[[358,20],[404,20]]}}}],["ihttpdispatchproxi",{"_index":8254,"t":{"3483":{"position":[[23,18],[70,18],[117,18]]},"3535":{"position":[[25,18]]},"3537":{"position":[[25,18]]},"3539":{"position":[[144,18]]},"3541":{"position":[[25,18]]},"3543":{"position":[[331,18],[529,18]]},"3545":{"position":[[25,18]]},"3547":{"position":[[99,18]]},"3549":{"position":[[25,18]]},"3551":{"position":[[66,18]]},"3553":{"position":[[66,18]]},"3555":{"position":[[66,18]]},"3557":{"position":[[66,18]]},"3559":{"position":[[66,18]]},"3561":{"position":[[134,18]]},"3563":{"position":[[167,18],[757,18]]},"3565":{"position":[[39,18]]},"3567":{"position":[[86,18]]},"3569":{"position":[[55,18]]},"3571":{"position":[[100,18]]},"3597":{"position":[[271,18]]},"3603":{"position":[[165,18]]},"3918":{"position":[[1559,18]]},"3924":{"position":[[539,18]]},"3968":{"position":[[300,18]]}}}],["ihttpmaxrequestbodysizefeatur",{"_index":5412,"t":{"1753":{"position":[[81,30]]}}}],["ihubcontext",{"_index":7552,"t":{"3162":{"position":[[0,11],[96,11],[160,11]]},"3164":{"position":[[61,11]]},"3166":{"position":[[157,11]]},"3168":{"position":[[6,11],[152,11],[239,11]]},"3170":{"position":[[13,11],[45,11],[65,11],[151,11],[242,11],[300,11],[357,11]]}}}],["ii",{"_index":648,"t":{"102":{"position":[[205,3]]},"1377":{"position":[[52,3]]},"1468":{"position":[[6,3],[31,3],[343,3]]},"1470":{"position":[[8,3],[50,3]]},"1474":{"position":[[3,3],[83,3],[134,3],[165,3],[458,3]]},"1755":{"position":[[0,3],[320,3],[559,3]]},"1825":{"position":[[18,3],[31,3],[58,3]]},"2391":{"position":[[152,3],[164,3]]},"2490":{"position":[[18,3],[31,3],[45,3]]},"2834":{"position":[[65,3]]},"3063":{"position":[[1025,3]]},"3339":{"position":[[199,3]]},"3341":{"position":[[13,3]]},"3706":{"position":[[1017,3]]},"3912":{"position":[[2560,3]]},"3932":{"position":[[1546,3]]},"3942":{"position":[[90,3],[322,3]]}}}],["iinsertablerepositori",{"_index":3871,"t":{"1004":{"position":[[0,21],[49,21]]}}}],["iinterceptor",{"_index":3007,"t":{"572":{"position":[[1330,12]]},"935":{"position":[[104,12]]}}}],["iisexpress",{"_index":5417,"t":{"1755":{"position":[[13,10]]}}}],["ijob",{"_index":8642,"t":{"3762":{"position":[[37,4]]},"3768":{"position":[[212,4]]},"3770":{"position":[[84,4],[1317,4],[2768,4],[4633,4]]},"3774":{"position":[[13,4],[369,4]]},"3777":{"position":[[302,4]]},"3779":{"position":[[218,4]]},"3781":{"position":[[467,4]]},"3783":{"position":[[91,4]]},"3787":{"position":[[41,4]]},"3789":{"position":[[21,4]]},"3791":{"position":[[3,4],[98,4],[618,4],[1404,4]]},"3795":{"position":[[81,4]]},"3806":{"position":[[3295,4]]},"3808":{"position":[[56,4],[729,4],[1950,4],[3362,4]]},"3815":{"position":[[58,4]]},"3832":{"position":[[194,4],[416,4],[2783,4],[4544,4]]},"3842":{"position":[[1162,4],[1727,4],[2317,4],[2958,4]]}}}],["ijobexecutor",{"_index":8952,"t":{"3832":{"position":[[10,12],[119,12]]}}}],["ijobmonitor",{"_index":8945,"t":{"3828":{"position":[[10,11],[119,11]]},"3830":{"position":[[0,11]]}}}],["ijobpersist",{"_index":9016,"t":{"3858":{"position":[[15,15]]},"3894":{"position":[[15,15]]}}}],["ijsonserializerprovid",{"_index":6209,"t":{"2343":{"position":[[312,23]]},"2345":{"position":[[13,23],[174,23],[822,23]]},"2348":{"position":[[19,23],[54,23],[288,23],[346,23],[404,23]]},"2357":{"position":[[18,23],[321,23],[562,23]]},"2379":{"position":[[692,23]]},"3956":{"position":[[201,23]]},"3960":{"position":[[256,23]]},"3962":{"position":[[596,23]]},"3970":{"position":[[130,23]]}}}],["il",{"_index":6572,"t":{"2559":{"position":[[1350,2]]},"3950":{"position":[[572,2]]}}}],["ilifetim",{"_index":4257,"t":{"1412":{"position":[[827,9]]}}}],["ilist",{"_index":8349,"t":{"3563":{"position":[[1353,5]]},"3918":{"position":[[1983,5]]}}}],["ilogg",{"_index":2733,"t":{"492":{"position":[[110,7],[184,7]]},"530":{"position":[[144,7],[252,7]]},"1039":{"position":[[144,7],[252,7]]},"1795":{"position":[[126,7],[191,7]]},"1807":{"position":[[189,7],[262,7]]},"1811":{"position":[[181,7],[274,7]]},"1819":{"position":[[174,7],[239,7]]},"1823":{"position":[[154,7],[300,7]]},"2482":{"position":[[84,7],[155,7]]},"2484":{"position":[[110,7],[184,7]]},"2581":{"position":[[246,7],[344,7],[749,7],[847,7]]},"2587":{"position":[[155,7],[253,7]]},"2589":{"position":[[174,7],[284,7]]},"2813":{"position":[[350,7],[389,7]]},"2817":{"position":[[499,7],[538,7]]},"2825":{"position":[[84,7],[155,7]]},"2827":{"position":[[156,7],[230,7]]},"2829":{"position":[[174,7],[278,7]]},"2831":{"position":[[133,7],[237,7]]},"3420":{"position":[[12,7],[90,7],[141,7],[286,7]]},"3422":{"position":[[78,7]]},"3436":{"position":[[85,7]]},"3440":{"position":[[117,7]]},"3466":{"position":[[1191,7],[1282,7]]},"3762":{"position":[[61,7],[98,7]]},"3768":{"position":[[236,7],[273,7]]},"3770":{"position":[[108,7],[145,7],[1341,7],[1378,7],[2792,7],[2829,7],[4657,7],[4694,7]]},"3774":{"position":[[393,7],[430,7]]},"3783":{"position":[[115,7],[152,7]]},"3791":{"position":[[51,7],[122,7],[207,7],[642,7],[779,7],[1441,7],[1572,7]]},"3795":{"position":[[105,7],[142,7]]},"3806":{"position":[[3319,7],[3356,7]]},"3808":{"position":[[753,7],[790,7],[1974,7],[2011,7]]},"3828":{"position":[[150,7],[205,7]]},"3832":{"position":[[440,7],[477,7]]}}}],["iloggerfactori",{"_index":8079,"t":{"3422":{"position":[[115,14]]},"3436":{"position":[[122,14]]},"3918":{"position":[[950,14]]}}}],["im",{"_index":6148,"t":{"2326":{"position":[[174,2]]},"3136":{"position":[[26,2]]},"3140":{"position":[[84,2]]}}}],["imag",{"_index":3166,"t":{"606":{"position":[[412,5]]},"617":{"position":[[1147,5],[1172,5]]},"1488":{"position":[[77,5],[117,5]]},"1495":{"position":[[77,5],[117,5]]},"2098":{"position":[[69,5],[106,5]]},"3456":{"position":[[341,5]]},"3522":{"position":[[1400,5]]},"3916":{"position":[[7130,5],[7317,5],[7471,5],[7586,5],[7735,5],[8123,5],[8436,5],[8495,5]]},"3918":{"position":[[1130,5],[2178,5]]},"3934":{"position":[[1639,6]]},"3940":{"position":[[841,5],[878,5]]}}}],["image1",{"_index":8316,"t":{"3522":{"position":[[1574,6]]},"3916":{"position":[[7939,6],[8247,6]]},"3918":{"position":[[2352,6]]}}}],["image2",{"_index":8317,"t":{"3522":{"position":[[1597,6]]},"3916":{"position":[[7967,6],[8275,6]]},"3918":{"position":[[2375,6]]}}}],["image_vers",{"_index":4439,"t":{"1488":{"position":[[77,13],[117,13]]},"1495":{"position":[[77,13],[117,13]]}}}],["imapp",{"_index":6811,"t":{"2692":{"position":[[54,7]]},"3988":{"position":[[127,7]]}}}],["imemorycach",{"_index":1666,"t":{"229":{"position":[[36,12]]},"231":{"position":[[254,12],[302,12]]},"747":{"position":[[905,12]]},"2933":{"position":[[571,12]]}}}],["imessagesink",{"_index":7997,"t":{"3371":{"position":[[366,12]]},"3389":{"position":[[887,12]]},"3924":{"position":[[3114,12]]}}}],["img",{"_index":8308,"t":{"3522":{"position":[[993,3]]}}}],["img_sec_check",{"_index":8307,"t":{"3522":{"position":[[993,13]]}}}],["imgpath",{"_index":8312,"t":{"3522":{"position":[[1077,7]]}}}],["imodel",{"_index":5546,"t":{"1801":{"position":[[662,6]]}}}],["imodelbuilderfilt",{"_index":3636,"t":{"846":{"position":[[71,19],[474,19]]},"949":{"position":[[717,19]]},"2933":{"position":[[309,19]]},"2935":{"position":[[0,19],[380,19]]},"2937":{"position":[[477,19]]}}}],["imodelcachekeyfactori",{"_index":9302,"t":{"3922":{"position":[[1468,21]]}}}],["imongodbrepositori",{"_index":6736,"t":{"2605":{"position":[[19,18],[67,18],[125,18]]},"2609":{"position":[[0,18]]}}}],["implementationtyp",{"_index":3446,"t":{"734":{"position":[[1013,18],[1268,18],[1867,18],[2122,18],[2721,18],[2976,18],[3716,18],[3971,18],[4570,18],[4825,18],[5424,18],[5679,18]]}}}],["implementedinterfac",{"_index":4283,"t":{"1416":{"position":[[275,21]]}}}],["impli",{"_index":8553,"t":{"3702":{"position":[[2583,7]]}}}],["implicitus",{"_index":123,"t":{"9":{"position":[[128,14],[151,14]]},"2292":{"position":[[128,14],[151,14]]},"2672":{"position":[[27,14],[50,14]]}}}],["import",{"_index":2050,"t":{"310":{"position":[[714,6],[756,6],[815,6],[872,6],[920,6],[1011,7]]},"314":{"position":[[240,6],[292,6],[340,6],[429,6]]},"316":{"position":[[166,6],[324,6],[378,6],[428,6],[487,6]]},"319":{"position":[[71,6],[355,6]]},"321":{"position":[[30,6],[73,6]]},"3194":{"position":[[126,6],[210,6],[269,6]]}}}],["importsnotusedasvalu",{"_index":2035,"t":{"308":{"position":[[524,22]]}}}],["improv",{"_index":8541,"t":{"3702":{"position":[[1825,12],[1955,9]]}}}],["imsrepositori",{"_index":3809,"t":{"949":{"position":[[198,13]]},"988":{"position":[[184,13],[198,13],[237,13]]},"1016":{"position":[[0,13]]},"1052":{"position":[[71,13]]},"1064":{"position":[[265,13],[443,13]]},"1066":{"position":[[23,13],[39,13],[547,13],[563,13],[867,13],[1035,13],[1640,13],[1664,13],[1714,13]]},"3968":{"position":[[51,13],[67,13]]}}}],["imultitenantondatabas",{"_index":7277,"t":{"2949":{"position":[[17,22],[226,22]]},"2951":{"position":[[213,22]]}}}],["imultitenantonschema",{"_index":7280,"t":{"2963":{"position":[[17,20],[275,20]]}}}],["imultitenantont",{"_index":7274,"t":{"2933":{"position":[[17,19],[288,19]]},"2935":{"position":[[359,19]]},"2937":{"position":[[456,19]]}}}],["imvcbuild",{"_index":10470,"t":{"4006":{"position":[[102,11]]}}}],["imyrepositori",{"_index":3890,"t":{"1041":{"position":[[201,13],[651,13],[1212,13],[1237,13],[1506,13]]}}}],["inamedserviceprovid",{"_index":4256,"t":{"1412":{"position":[[783,21],[989,21],[1077,21]]},"3930":{"position":[[392,21]]}}}],["includ",{"_index":3362,"t":{"696":{"position":[[867,8]]},"713":{"position":[[265,7]]},"734":{"position":[[279,7]]},"853":{"position":[[31,7],[86,7],[110,7],[163,7],[215,7],[268,7],[363,7],[416,7],[503,7],[559,7],[664,7]]},"855":{"position":[[31,7]]},"857":{"position":[[31,7]]},"877":{"position":[[2287,7]]},"881":{"position":[[317,7]]},"885":{"position":[[140,7]]},"1551":{"position":[[1036,7]]},"1566":{"position":[[837,7]]},"3702":{"position":[[2592,9]]},"3779":{"position":[[1326,7]]},"3785":{"position":[[1297,7]]},"3802":{"position":[[1944,7]]},"3817":{"position":[[2540,7]]},"3934":{"position":[[3107,7]]}}}],["include_annot",{"_index":8800,"t":{"3779":{"position":[[1326,19]]},"3785":{"position":[[1297,19]]},"3802":{"position":[[1944,19]]},"3817":{"position":[[2540,19]]}}}],["includeannot",{"_index":8718,"t":{"3770":{"position":[[581,18],[1963,18],[3583,18],[5260,18]]},"3774":{"position":[[39,18],[67,18]]},"3777":{"position":[[267,18]]},"3779":{"position":[[801,18],[1137,18],[1506,18],[1796,18]]},"3785":{"position":[[262,18],[916,18],[1669,18]]},"3808":{"position":[[18,18]]},"3817":{"position":[[773,18],[1813,18]]},"3821":{"position":[[290,18]]},"3896":{"position":[[215,18]]}}}],["includeassembl",{"_index":7363,"t":{"3071":{"position":[[538,17],[698,17],[1037,17]]}}}],["includeassemblynam",{"_index":7362,"t":{"3071":{"position":[[456,20],[775,20],[1057,20],[1285,20]]}}}],["includefield",{"_index":6241,"t":{"2365":{"position":[[114,13]]}}}],["includenul",{"_index":8293,"t":{"3508":{"position":[[145,11]]}}}],["includeofmethod",{"_index":8174,"t":{"3448":{"position":[[358,16],[1210,16]]}}}],["includescop",{"_index":9128,"t":{"3914":{"position":[[2393,13]]},"3916":{"position":[[1300,13]]}}}],["includesecond",{"_index":6049,"t":{"2228":{"position":[[168,14]]},"2420":{"position":[[115,14],[157,14],[201,14],[294,14],[342,14],[430,14],[477,14],[1461,14],[1514,14],[1604,14],[1660,14],[1748,14],[1807,14],[1856,14],[1907,14],[2299,14]]},"2426":{"position":[[200,14],[289,14]]},"2442":{"position":[[780,14]]}}}],["inclusivebetween",{"_index":3246,"t":{"639":{"position":[[358,16]]}}}],["index",{"_index":776,"t":{"114":{"position":[[395,5]]},"306":{"position":[[160,5]]},"331":{"position":[[221,5]]},"406":{"position":[[72,5],[147,5]]},"627":{"position":[[196,5]]},"1572":{"position":[[281,5]]},"2235":{"position":[[128,5]]},"2653":{"position":[[237,5]]},"3144":{"position":[[632,5]]},"3162":{"position":[[264,5]]},"3446":{"position":[[870,5]]},"3452":{"position":[[1465,5]]},"3916":{"position":[[4461,5]]},"3928":{"position":[[1432,5]]}}}],["index2",{"_index":5826,"t":{"1909":{"position":[[749,6],[1186,6]]}}}],["indexand",{"_index":6001,"t":{"2167":{"position":[[87,8]]}}}],["indexmodel",{"_index":1841,"t":{"253":{"position":[[73,10],[148,10]]}}}],["indexor",{"_index":6004,"t":{"2167":{"position":[[171,7]]}}}],["inf",{"_index":8136,"t":{"3432":{"position":[[2685,3],[2805,3],[2926,3],[3032,3]]}}}],["info",{"_index":3226,"t":{"617":{"position":[[2685,4]]},"1379":{"position":[[318,4]]},"1488":{"position":[[141,4]]},"1495":{"position":[[141,4]]},"1795":{"position":[[3038,4]]},"1855":{"position":[[430,4]]},"2758":{"position":[[4,4]]},"3082":{"position":[[46,4]]},"3254":{"position":[[1516,4]]},"3275":{"position":[[288,4],[466,4]]},"3430":{"position":[[0,4],[83,4],[161,4],[238,4],[322,4],[391,4],[2441,4],[2554,4],[2685,4],[2815,4],[2936,4],[3042,4],[3788,4],[3899,4],[4012,4],[4124,4],[4243,4],[4347,4]]},"3432":{"position":[[5005,4],[5116,4],[5229,4],[5341,4],[5460,4],[5564,4]]},"3601":{"position":[[74,4],[187,4],[302,4],[416,4],[537,4],[643,4],[794,4],[949,4],[1094,4],[1245,4],[1394,4]]},"3762":{"position":[[522,4],[633,4],[744,4],[855,4],[965,4],[1076,4]]},"3764":{"position":[[131,4],[243,4],[356,4],[469,4],[582,4],[695,4]]},"3766":{"position":[[304,4],[410,4],[515,4],[620,4],[725,4],[834,4],[940,4],[1055,4],[1161,4],[1276,4],[1391,4],[1496,4],[1602,4]]},"3768":{"position":[[592,4],[1092,4],[1592,4],[2095,4],[2608,4],[2718,4],[2828,4],[2939,4],[3050,4]]},"3770":{"position":[[374,4],[1771,4],[2064,4],[3425,4],[3724,4],[3861,4],[5046,4],[5373,4]]},"3772":{"position":[[685,4],[832,4],[937,4],[1053,4],[1170,4],[1287,4],[1404,4],[1521,4],[1638,4],[1744,4],[1861,4],[1978,4]]},"3774":{"position":[[716,4],[822,4],[930,4],[1036,4],[1151,4],[1257,4],[1372,4],[1486,4],[1592,4]]},"3783":{"position":[[594,4],[714,4],[834,4],[955,4],[1076,4]]},"3806":{"position":[[410,4],[553,4],[696,4],[839,4],[983,4],[1126,4],[1815,4],[1957,4],[2099,4],[2241,4],[2383,4],[2525,4],[3643,4],[3767,4]]},"3808":{"position":[[1077,4],[1195,4],[1313,4],[1434,4],[1555,4],[2298,4],[2422,4],[2546,4],[2670,4],[2794,4]]},"3828":{"position":[[945,4],[1050,4],[1168,4]]},"3832":{"position":[[1008,4],[1114,4],[1234,4],[1354,4],[1474,4],[3188,4]]},"3842":{"position":[[265,4],[895,4],[1460,4],[2050,4],[2691,4],[3308,4]]},"3844":{"position":[[271,4]]},"3846":{"position":[[511,4]]},"3850":{"position":[[97,4]]},"3852":{"position":[[97,4],[216,4]]},"3854":{"position":[[99,4],[364,4]]},"3874":{"position":[[30,4]]},"3876":{"position":[[30,4],[148,4]]}}}],["info1",{"_index":6830,"t":{"2713":{"position":[[1466,5],[1718,5],[2011,5],[2376,5]]}}}],["info2",{"_index":6831,"t":{"2713":{"position":[[1548,5],[1726,5],[2150,5],[2384,5]]}}}],["info3",{"_index":6832,"t":{"2713":{"position":[[1630,5],[1734,5],[2288,5],[2392,5]]}}}],["infom",{"_index":8131,"t":{"3432":{"position":[[2189,10]]},"3466":{"position":[[820,10]]}}}],["infomationloggingwrit",{"_index":8160,"t":{"3434":{"position":[[1729,23]]}}}],["inform",{"_index":1630,"t":{"220":{"position":[[615,11],[684,11],[732,11]]},"445":{"position":[[586,11]]},"570":{"position":[[2380,11]]},"655":{"position":[[274,11]]},"688":{"position":[[174,11],[243,11],[291,11]]},"2171":{"position":[[146,11],[159,11]]},"2501":{"position":[[251,11],[320,11],[368,11],[441,11]]},"2887":{"position":[[92,11],[161,11],[209,11]]},"3416":{"position":[[179,11]]},"3424":{"position":[[179,11],[192,11]]},"3430":{"position":[[773,11],[1035,11],[1441,11],[1614,11],[1697,11],[1786,11]]},"3432":{"position":[[333,11],[497,11],[850,11],[1806,11],[2290,11]]},"3434":{"position":[[738,11],[810,11],[882,11],[1838,11]]},"3442":{"position":[[124,11]]},"3448":{"position":[[500,11],[551,11]]},"3468":{"position":[[162,11],[245,11]]},"3601":{"position":[[1689,11],[1772,11]]},"3924":{"position":[[1143,11],[1570,11]]},"3932":{"position":[[1733,11],[1802,11],[1850,11]]}}}],["infrastructur",{"_index":2962,"t":{"570":{"position":[[187,14]]},"713":{"position":[[384,14]]},"734":{"position":[[398,14]]},"3452":{"position":[[3435,14],[3638,14],[3782,14]]},"3916":{"position":[[6431,14],[6634,14],[6778,14]]}}}],["infring",{"_index":8555,"t":{"3702":{"position":[[2625,12]]}}}],["inherit",{"_index":5849,"t":{"1915":{"position":[[118,9]]},"1921":{"position":[[118,9]]},"1929":{"position":[[118,9]]},"1937":{"position":[[118,9]]},"1945":{"position":[[118,9]]},"3956":{"position":[[233,7]]},"3960":{"position":[[288,7]]},"3962":{"position":[[628,7]]}}}],["inheritdoc",{"_index":8509,"t":{"3688":{"position":[[194,10],[307,10],[401,10],[718,10],[759,10]]},"3938":{"position":[[435,10],[470,10]]},"3940":{"position":[[177,10],[297,10],[1082,10],[1195,10],[1289,10]]}}}],["inheritoc",{"_index":9545,"t":{"3936":{"position":[[794,9]]}}}],["init",{"_index":4173,"t":{"1379":{"position":[[192,4]]}}}],["initalcontenttypeprovid",{"_index":9537,"t":{"3936":{"position":[[360,25]]}}}],["initi",{"_index":1805,"t":{"247":{"position":[[232,7],[341,7]]},"713":{"position":[[448,11]]},"734":{"position":[[448,11]]},"2899":{"position":[[239,10]]},"3543":{"position":[[639,8],[723,8]]}}}],["initialcontenttypeprovid",{"_index":9229,"t":{"3918":{"position":[[1393,26]]}}}],["initialiterationcount",{"_index":5244,"t":{"1685":{"position":[[299,21]]}}}],["initkeytyp",{"_index":7768,"t":{"3254":{"position":[[224,11],[238,11],[502,11],[516,11],[877,11],[891,11]]},"3275":{"position":[[144,11],[158,11]]}}}],["inject",{"_index":43,"t":{"3":{"position":[[335,6],[871,6]]},"95":{"position":[[57,6]]},"316":{"position":[[333,10]]},"455":{"position":[[892,6]]},"461":{"position":[[685,6],[1236,6]]},"1385":{"position":[[164,9]]},"1412":{"position":[[2533,9],[2630,9],[2733,9]]},"1416":{"position":[[13,9],[51,9]]},"1420":{"position":[[749,9],[785,9],[819,9],[853,9],[906,9]]},"1422":{"position":[[48,9]]},"1424":{"position":[[1827,9],[1847,9]]},"1426":{"position":[[310,9]]},"1539":{"position":[[395,6],[450,6],[1631,6]]},"1557":{"position":[[21,6]]},"1667":{"position":[[200,6]]},"1977":{"position":[[350,6]]},"1991":{"position":[[49,6]]},"1995":{"position":[[128,6]]},"2014":{"position":[[49,6]]},"2018":{"position":[[128,6]]},"2255":{"position":[[339,6]]},"2264":{"position":[[0,6],[56,6]]},"2266":{"position":[[0,6]]},"2269":{"position":[[0,6],[440,6]]},"2285":{"position":[[4,6]]},"2674":{"position":[[49,6]]},"2776":{"position":[[41,6],[428,6],[529,6]]},"2819":{"position":[[67,6],[393,6],[540,6]]},"2821":{"position":[[424,6]]},"2836":{"position":[[504,6],[1710,6]]},"3075":{"position":[[110,6]]},"3918":{"position":[[3006,6],[3053,6]]},"3924":{"position":[[749,6]]},"3932":{"position":[[2522,6]]},"3966":{"position":[[1202,6]]}}}],["injectionact",{"_index":4276,"t":{"1416":{"position":[[86,16]]}}}],["injectionattribut",{"_index":9622,"t":{"3948":{"position":[[416,18],[512,18]]}}}],["injectionpattern",{"_index":4279,"t":{"1416":{"position":[[180,17]]}}}],["injectminiprofil",{"_index":7289,"t":{"2981":{"position":[[18,18]]},"2983":{"position":[[20,18]]},"3654":{"position":[[130,18]]},"3978":{"position":[[701,18]]}}}],["injectspecificationdocu",{"_index":7291,"t":{"2981":{"position":[[88,27]]},"3662":{"position":[[70,27]]}}}],["inlinedata",{"_index":8001,"t":{"3375":{"position":[[62,10],[113,10],[132,10],[151,10]]},"3397":{"position":[[645,10]]}}}],["inmemori",{"_index":3393,"t":{"698":{"position":[[634,8]]},"897":{"position":[[207,8]]},"1309":{"position":[[371,8]]}}}],["inmemorydatabas",{"_index":639,"t":{"102":{"position":[[133,16]]},"698":{"position":[[587,16]]},"803":{"position":[[24,16]]},"805":{"position":[[24,16]]},"895":{"position":[[24,16]]},"897":{"position":[[160,16]]},"899":{"position":[[382,16],[445,16]]},"1105":{"position":[[24,16]]},"1309":{"position":[[324,16]]}}}],["inner",{"_index":3660,"t":{"862":{"position":[[343,5]]},"3585":{"position":[[65,5]]},"3832":{"position":[[4903,5]]}}}],["innodb",{"_index":6141,"t":{"2326":{"position":[[54,6]]}}}],["input",{"_index":3995,"t":{"1125":{"position":[[23,5]]},"1131":{"position":[[108,5]]},"1555":{"position":[[567,6]]},"1887":{"position":[[410,5]]}}}],["insert",{"_index":2896,"t":{"550":{"position":[[374,6]]},"552":{"position":[[190,6],[331,6]]},"585":{"position":[[33,6],[325,6]]},"645":{"position":[[84,6],[110,6]]},"649":{"position":[[36,6],[75,6],[133,6]]},"653":{"position":[[104,6]]},"771":{"position":[[59,6]]},"1064":{"position":[[661,6],[716,6]]},"1066":{"position":[[1206,6],[1261,6]]},"1170":{"position":[[43,6],[157,6],[223,6],[551,6],[670,6],[736,6]]},"1244":{"position":[[119,6],[175,6]]},"1594":{"position":[[31,6]]},"1596":{"position":[[24,6]]},"1631":{"position":[[110,6]]},"1661":{"position":[[978,6]]},"3023":{"position":[[975,6]]},"3224":{"position":[[1088,6]]},"3226":{"position":[[469,10]]},"3228":{"position":[[306,6],[330,6]]},"3234":{"position":[[308,8],[338,8]]},"3236":{"position":[[2,6],[375,6]]},"3258":{"position":[[248,6],[516,6],[644,6]]},"3267":{"position":[[22,10],[75,10],[254,10],[413,10]]},"3291":{"position":[[119,6],[221,6],[767,6],[2016,6]]},"3770":{"position":[[3484,6]]},"3785":{"position":[[817,6]]},"3812":{"position":[[1089,6]]},"3964":{"position":[[1048,6]]},"3986":{"position":[[1320,6]]},"3996":{"position":[[606,6]]},"4000":{"position":[[471,6]]}}}],["insertasync",{"_index":2910,"t":{"552":{"position":[[505,11]]},"645":{"position":[[262,11],[299,11]]},"649":{"position":[[205,11],[255,11],[324,11]]},"3258":{"position":[[542,11]]},"3964":{"position":[[707,11]]}}}],["insertnow",{"_index":3256,"t":{"647":{"position":[[52,9],[97,9]]},"651":{"position":[[36,9],[78,9],[139,9]]}}}],["insertnowasync",{"_index":3257,"t":{"647":{"position":[[168,14],[233,14]]},"651":{"position":[[214,14],[267,14],[339,14]]}}}],["insertobj",{"_index":7667,"t":{"3224":{"position":[[1095,9],[1124,10],[1172,9],[1202,9],[1248,9],[1463,9],[1492,10],[1589,9]]},"3236":{"position":[[602,10]]},"3258":{"position":[[255,9],[300,9],[328,9],[372,9],[428,9],[523,9],[554,9]]},"3267":{"position":[[33,9],[86,9]]}}}],["insertoneasync",{"_index":6742,"t":{"2607":{"position":[[139,14],[566,14]]}}}],["insertorupd",{"_index":3289,"t":{"661":{"position":[[36,14],[70,14]]},"3968":{"position":[[150,14]]},"3998":{"position":[[209,14]]},"4000":{"position":[[367,14]]}}}],["insertorupdateasync",{"_index":3290,"t":{"661":{"position":[[130,19],[175,19]]}}}],["insertorupdateexclud",{"_index":3301,"t":{"669":{"position":[[36,21],[104,21],[166,21],[243,21],[307,21],[363,21],[413,21],[478,21]]}}}],["insertorupdateexcludeasync",{"_index":3302,"t":{"669":{"position":[[566,26],[645,26],[718,26],[806,26],[881,26],[948,26],[1009,26],[1085,26]]}}}],["insertorupdateexcludenow",{"_index":3303,"t":{"671":{"position":[[36,24],[107,24],[172,24],[252,24],[319,24],[378,24],[431,24],[499,24]]}}}],["insertorupdateexcludenowasync",{"_index":3304,"t":{"671":{"position":[[590,29],[672,29],[748,29],[839,29],[917,29],[987,29],[1051,29],[1130,29]]}}}],["insertorupdateignorenullvalu",{"_index":2850,"t":{"532":{"position":[[0,30]]},"653":{"position":[[536,30]]},"1353":{"position":[[503,30]]},"4000":{"position":[[268,30]]}}}],["insertorupdateinclud",{"_index":3293,"t":{"665":{"position":[[36,21],[104,21],[166,21],[243,21],[307,21],[363,21],[413,21],[478,21]]}}}],["insertorupdateincludeasync",{"_index":3298,"t":{"665":{"position":[[566,26],[645,26],[718,26],[806,26],[881,26],[948,26],[1009,26],[1085,26]]}}}],["insertorupdateincludenow",{"_index":3299,"t":{"667":{"position":[[36,24],[107,24],[172,24],[252,24],[319,24],[378,24],[431,24],[499,24]]}}}],["insertorupdateincludenowasync",{"_index":3300,"t":{"667":{"position":[[590,29],[672,29],[748,29],[839,29],[917,29],[987,29],[1051,29],[1130,29]]}}}],["insertorupdatenow",{"_index":3291,"t":{"663":{"position":[[36,17],[73,17]]}}}],["insertorupdatenowasync",{"_index":3292,"t":{"663":{"position":[[136,22],[184,22]]},"3970":{"position":[[405,22]]}}}],["insertrang",{"_index":7668,"t":{"3224":{"position":[[1112,11]]}}}],["insertreturnident",{"_index":7669,"t":{"3224":{"position":[[1151,20]]},"3258":{"position":[[279,20]]}}}],["insertsql",{"_index":8823,"t":{"3785":{"position":[[409,9]]},"3812":{"position":[[687,9]]}}}],["insingl",{"_index":7784,"t":{"3261":{"position":[[326,8]]}}}],["instal",{"_index":439,"t":{"53":{"position":[[96,7]]},"64":{"position":[[122,7]]},"77":{"position":[[96,7]]},"722":{"position":[[12,7]]},"1483":{"position":[[172,7],[575,7]]},"1547":{"position":[[107,7]]},"1549":{"position":[[247,7]]},"1551":{"position":[[1166,7]]},"1801":{"position":[[103,7]]},"1803":{"position":[[26,7]]},"2742":{"position":[[88,7]]},"2760":{"position":[[64,7],[107,7]]},"3080":{"position":[[174,7]]},"3082":{"position":[[148,7],[191,7]]},"3321":{"position":[[35,7],[47,7],[80,7],[140,7]]},"3325":{"position":[[31,7]]},"3702":{"position":[[321,12],[428,7]]}}}],["instanc",{"_index":4291,"t":{"1418":{"position":[[142,8],[201,8]]},"2749":{"position":[[172,8]]},"3080":{"position":[[740,8]]},"3321":{"position":[[258,8]]},"3750":{"position":[[373,8],[387,8],[404,8]]}}}],["instancenam",{"_index":1827,"t":{"249":{"position":[[283,12]]}}}],["instant",{"_index":7469,"t":{"3136":{"position":[[5,7],[207,7]]}}}],["instantiationcount",{"_index":8014,"t":{"3389":{"position":[[277,18],[326,18],[1427,18]]},"3391":{"position":[[172,18],[218,18],[882,18],[980,18]]},"3393":{"position":[[308,18],[359,18],[1300,18],[1398,18],[1506,18]]}}}],["instantmessag",{"_index":7540,"t":{"3154":{"position":[[64,16]]},"3156":{"position":[[82,16]]},"3158":{"position":[[73,16]]}}}],["int",{"_index":1334,"t":{"188":{"position":[[234,3]]},"292":{"position":[[33,3]]},"415":{"position":[[353,3]]},"550":{"position":[[309,3]]},"567":{"position":[[158,3],[264,3]]},"570":{"position":[[701,3]]},"572":{"position":[[379,3],[468,3],[771,3],[866,3]]},"587":{"position":[[481,3],[1135,3],[1169,3]]},"597":{"position":[[183,3],[539,3],[547,3]]},"599":{"position":[[213,3]]},"608":{"position":[[202,3],[297,3],[516,3]]},"639":{"position":[[29,3],[124,3]]},"696":{"position":[[1537,3],[1598,3],[2679,3],[2778,3],[3559,3],[4273,3],[4334,3]]},"708":{"position":[[412,3]]},"769":{"position":[[554,3]]},"820":{"position":[[31,3],[45,3]]},"822":{"position":[[238,3],[248,3]]},"828":{"position":[[37,3]]},"830":{"position":[[93,3],[226,3]]},"832":{"position":[[291,3]]},"844":{"position":[[399,3]]},"851":{"position":[[427,3],[1067,3],[1542,3]]},"877":{"position":[[520,3],[2060,3]]},"883":{"position":[[43,3],[91,3]]},"913":{"position":[[153,3],[163,3]]},"929":{"position":[[2258,3],[2347,3],[2488,3],[2583,3],[2762,3],[2838,3],[2958,3],[3040,3]]},"931":{"position":[[258,3],[326,3],[450,3],[524,3],[686,3],[744,3],[847,3],[911,3]]},"933":{"position":[[158,3],[264,3],[529,3]]},"1037":{"position":[[575,3],[715,3],[726,3]]},"1060":{"position":[[369,3],[502,3]]},"1125":{"position":[[102,3],[160,3]]},"1127":{"position":[[119,3],[289,3],[372,3]]},"1131":{"position":[[157,3]]},"1145":{"position":[[203,3]]},"1168":{"position":[[265,3],[583,3]]},"1181":{"position":[[239,3],[550,3]]},"1185":{"position":[[28,3],[86,3],[396,3],[566,3],[649,3]]},"1188":{"position":[[235,3],[534,3]]},"1234":{"position":[[216,3],[485,3],[995,3]]},"1236":{"position":[[219,3],[494,3]]},"1238":{"position":[[259,3],[592,3]]},"1240":{"position":[[280,3],[655,3],[1000,3],[1156,3]]},"1242":{"position":[[177,3],[240,3],[253,3],[344,3]]},"1244":{"position":[[258,3],[337,3]]},"1246":{"position":[[171,3]]},"1248":{"position":[[80,3],[92,3],[226,3],[237,3],[335,3],[352,3]]},"1251":{"position":[[218,3],[276,3]]},"1253":{"position":[[224,3],[285,3]]},"1255":{"position":[[208,3],[261,3]]},"1257":{"position":[[252,3],[327,3],[340,3],[448,3]]},"1259":{"position":[[208,3],[245,3],[258,3]]},"1261":{"position":[[204,3],[255,3]]},"1265":{"position":[[149,3]]},"1267":{"position":[[227,3]]},"1269":{"position":[[146,3]]},"1275":{"position":[[272,3]]},"1279":{"position":[[330,3]]},"1295":{"position":[[210,3]]},"1364":{"position":[[219,3],[352,3]]},"1396":{"position":[[192,3]]},"1408":{"position":[[212,3],[462,3],[920,3]]},"1410":{"position":[[221,3],[477,3],[784,3],[848,3],[945,3]]},"1414":{"position":[[398,3],[839,3]]},"1566":{"position":[[744,3],[812,3]]},"1607":{"position":[[144,3],[194,3]]},"1611":{"position":[[375,3],[480,3],[591,3]]},"1627":{"position":[[133,3]]},"1633":{"position":[[89,3],[156,3],[164,3],[222,3],[230,3],[293,3]]},"1635":{"position":[[147,3],[378,3],[382,3],[390,3]]},"1657":{"position":[[423,3],[431,3]]},"1659":{"position":[[236,3],[244,3],[377,3],[385,3],[633,3],[641,3],[812,3],[820,3],[1071,3],[1079,3],[1253,3],[1261,3]]},"1743":{"position":[[246,3]]},"1767":{"position":[[133,3]]},"1773":{"position":[[174,3]]},"1775":{"position":[[335,3]]},"1779":{"position":[[328,3]]},"1801":{"position":[[1083,3]]},"1803":{"position":[[3277,3]]},"1845":{"position":[[169,3],[177,3],[442,3],[450,3]]},"1859":{"position":[[161,3],[169,3]]},"1861":{"position":[[117,3]]},"1869":{"position":[[504,3],[512,3]]},"1873":{"position":[[336,3],[344,3]]},"1875":{"position":[[539,3],[547,3]]},"1887":{"position":[[286,3]]},"1909":{"position":[[994,3]]},"1961":{"position":[[255,3]]},"2199":{"position":[[137,3]]},"2313":{"position":[[607,3]]},"2319":{"position":[[166,3],[210,3]]},"2333":{"position":[[496,3]]},"2482":{"position":[[123,3]]},"2581":{"position":[[890,3],[1237,3]]},"2825":{"position":[[123,3]]},"2848":{"position":[[1087,3],[1207,3]]},"2856":{"position":[[1881,3],[1925,3]]},"2937":{"position":[[964,3]]},"2991":{"position":[[359,3]]},"3047":{"position":[[66,3],[124,3]]},"3063":{"position":[[1509,3]]},"3220":{"position":[[0,3],[19,3],[38,3]]},"3265":{"position":[[0,3],[19,3],[38,3]]},"3267":{"position":[[566,3],[594,3]]},"3273":{"position":[[809,3],[875,3]]},"3287":{"position":[[178,3],[503,3],[965,3]]},"3375":{"position":[[187,3],[194,3]]},"3379":{"position":[[99,3],[108,3],[115,3],[198,3],[207,3],[214,3]]},"3389":{"position":[[273,3]]},"3391":{"position":[[168,3]]},"3393":{"position":[[304,3]]},"3446":{"position":[[154,3],[358,3]]},"3456":{"position":[[282,3]]},"3466":{"position":[[1464,3],[1562,3]]},"3537":{"position":[[172,3]]},"3539":{"position":[[282,3],[375,3],[488,3]]},"3541":{"position":[[137,3],[352,3],[474,3],[682,3]]},"3549":{"position":[[136,3]]},"3636":{"position":[[500,3],[508,3]]},"3638":{"position":[[659,3],[667,3]]},"3640":{"position":[[368,3],[376,3]]},"3644":{"position":[[236,3],[244,3],[377,3],[385,3],[633,3],[641,3],[812,3],[820,3],[1071,3],[1079,3],[1253,3],[1261,3]]},"3664":{"position":[[219,3]]},"3686":{"position":[[897,3],[972,3]]},"3706":{"position":[[1520,3]]},"3708":{"position":[[168,3],[2548,3],[3446,3]]},"3714":{"position":[[166,3]]},"3716":{"position":[[594,3]]},"3748":{"position":[[109,3]]},"3750":{"position":[[91,3]]},"3783":{"position":[[361,3],[1412,3]]},"3798":{"position":[[566,3],[590,3]]},"3806":{"position":[[1366,3],[1467,3],[1521,3],[2807,3],[2851,3]]},"3808":{"position":[[1845,3],[3147,3],[3180,3]]},"3928":{"position":[[1044,3]]},"3932":{"position":[[2187,3],[2383,3]]},"3950":{"position":[[523,3]]},"3956":{"position":[[1896,3],[2778,3]]},"3976":{"position":[[378,3]]}}}],["int16",{"_index":4109,"t":{"1302":{"position":[[169,5]]}}}],["int32",{"_index":819,"t":{"114":{"position":[[1191,5]]},"734":{"position":[[1483,5],[2337,5],[3191,5],[4186,5],[5040,5],[5894,5]]},"3446":{"position":[[1666,5]]},"3452":{"position":[[2539,5],[3240,5]]},"3783":{"position":[[1789,5]]},"3832":{"position":[[2264,5],[2282,5],[2517,5],[2535,5],[4025,5],[4043,5],[4278,5],[4296,5]]},"3916":{"position":[[5535,5],[6236,5]]},"3928":{"position":[[2228,5]]}}}],["integ",{"_index":806,"t":{"114":{"position":[[947,7],[992,7],[1020,7],[1048,7]]},"606":{"position":[[79,7],[690,7],[999,7]]},"608":{"position":[[185,7],[280,7]]},"617":{"position":[[191,7],[218,7]]},"3446":{"position":[[1422,7],[1467,7],[1495,7],[1523,7]]},"3452":{"position":[[2066,7],[2187,7],[2253,7],[2319,7]]},"3916":{"position":[[5062,7],[5183,7],[5249,7],[5315,7]]},"3928":{"position":[[1984,7],[2029,7],[2057,7],[2085,7]]}}}],["integr",{"_index":1812,"t":{"247":{"position":[[367,10]]},"3702":{"position":[[266,9]]}}}],["intel",{"_index":1353,"t":{"190":{"position":[[102,5]]}}}],["intellisens",{"_index":7886,"t":{"3307":{"position":[[49,12]]}}}],["inter",{"_index":6092,"t":{"2303":{"position":[[11,5]]},"3954":{"position":[[11,5]]}}}],["interceptionresult",{"_index":2954,"t":{"567":{"position":[[139,18]]},"570":{"position":[[682,18]]},"572":{"position":[[360,18],[449,18],[752,18],[847,18]]},"927":{"position":[[271,18],[364,18],[498,18],[597,18],[1193,18],[1286,18],[1422,18],[1521,18]]},"929":{"position":[[270,18],[354,18],[996,18],[1092,18],[1234,18],[1336,18],[2017,18],[2115,18],[2239,18],[2328,18],[2469,18],[2564,18],[3220,18],[3310,18],[3455,18],[3551,18]]},"931":{"position":[[239,18],[307,18],[431,18],[505,18]]},"933":{"position":[[139,18],[510,18]]},"2937":{"position":[[945,18]]}}}],["interceptor",{"_index":2092,"t":{"316":{"position":[[279,12]]},"572":{"position":[[1237,12],[1312,12]]},"927":{"position":[[163,12]]},"935":{"position":[[86,12]]},"1279":{"position":[[162,11],[498,11],[654,11],[799,11],[915,11]]},"3543":{"position":[[610,11],[694,11]]},"3551":{"position":[[175,11],[293,11],[517,11]]},"3553":{"position":[[175,11],[272,11],[384,11]]},"3555":{"position":[[175,11],[293,11],[423,11]]},"3557":{"position":[[175,11],[295,11],[430,11]]},"3559":{"position":[[175,11],[304,11],[454,11]]},"3920":{"position":[[1262,11],[1371,11],[1484,11]]}}}],["interceptorid",{"_index":4100,"t":{"1279":{"position":[[378,13],[421,13],[841,13]]}}}],["interceptortyp",{"_index":8333,"t":{"3543":{"position":[[622,16],[706,16]]},"3551":{"position":[[187,16],[305,16],[529,16]]},"3553":{"position":[[187,16],[284,16],[396,16]]},"3555":{"position":[[187,16],[305,16],[435,16]]},"3557":{"position":[[187,16],[307,16],[442,16]]},"3559":{"position":[[187,16],[316,16],[466,16]]},"3920":{"position":[[1274,16],[1383,16],[1496,16]]}}}],["interfac",{"_index":67,"t":{"3":{"position":[[689,9]]},"344":{"position":[[136,9]]},"346":{"position":[[133,9]]},"348":{"position":[[160,9]]},"749":{"position":[[96,9]]},"1041":{"position":[[191,9],[1202,9]]},"1109":{"position":[[443,9]]},"1223":{"position":[[186,9]]},"1234":{"position":[[69,9]]},"1236":{"position":[[69,9]]},"1238":{"position":[[69,9]]},"1240":{"position":[[69,9]]},"1242":{"position":[[69,9]]},"1244":{"position":[[69,9]]},"1246":{"position":[[40,9]]},"1248":{"position":[[105,9]]},"1251":{"position":[[69,9]]},"1253":{"position":[[69,9]]},"1255":{"position":[[69,9]]},"1257":{"position":[[69,9]]},"1259":{"position":[[69,9]]},"1261":{"position":[[69,9]]},"1263":{"position":[[69,9]]},"1265":{"position":[[40,9]]},"1267":{"position":[[69,9]]},"1275":{"position":[[114,9]]},"1279":{"position":[[188,9]]},"1281":{"position":[[23,9]]},"1408":{"position":[[172,9]]},"1410":{"position":[[178,9]]},"1412":{"position":[[425,9]]},"1420":{"position":[[111,9],[548,9]]},"1424":{"position":[[216,9]]},"2345":{"position":[[164,9]]},"2768":{"position":[[907,9]]},"3001":{"position":[[109,9]]},"3003":{"position":[[55,9]]},"3154":{"position":[[395,9]]},"3379":{"position":[[74,9]]},"3483":{"position":[[99,9]]},"3535":{"position":[[7,9]]},"3537":{"position":[[7,9]]},"3539":{"position":[[126,9]]},"3541":{"position":[[7,9]]},"3543":{"position":[[313,9],[511,9]]},"3545":{"position":[[7,9]]},"3547":{"position":[[81,9]]},"3549":{"position":[[7,9]]},"3551":{"position":[[48,9]]},"3553":{"position":[[48,9]]},"3555":{"position":[[48,9]]},"3557":{"position":[[48,9]]},"3559":{"position":[[48,9]]},"3561":{"position":[[116,9]]},"3563":{"position":[[149,9],[739,9]]},"3565":{"position":[[21,9]]},"3567":{"position":[[68,9]]},"3569":{"position":[[37,9]]},"3571":{"position":[[82,9]]},"3583":{"position":[[74,9]]},"3597":{"position":[[253,9]]},"3603":{"position":[[147,9]]},"3688":{"position":[[511,9]]},"3918":{"position":[[1541,9]]},"3922":{"position":[[943,9]]},"3932":{"position":[[1984,9],[2240,9]]},"3940":{"position":[[1399,9]]}}}],["intern",{"_index":3441,"t":{"734":{"position":[[876,8],[6936,8],[7673,8]]},"929":{"position":[[165,8]]},"2899":{"position":[[82,8]]},"3708":{"position":[[720,8]]},"3956":{"position":[[357,8]]}}}],["internalnet",{"_index":7895,"t":{"3307":{"position":[[254,11],[298,11]]}}}],["internet",{"_index":7200,"t":{"2910":{"position":[[192,8]]}}}],["interv",{"_index":6039,"t":{"2208":{"position":[[23,8],[127,8]]},"2444":{"position":[[21,8]]},"2448":{"position":[[23,8],[127,8]]}}}],["introduct",{"_index":7508,"t":{"3138":{"position":[[224,12]]}}}],["invalid",{"_index":5764,"t":{"1887":{"position":[[334,7]]}}}],["invalidoperationexcept",{"_index":3435,"t":{"734":{"position":[[680,25]]},"1803":{"position":[[1084,25],[1200,25]]},"1845":{"position":[[511,25]]},"3832":{"position":[[3465,25]]}}}],["invers",{"_index":4207,"t":{"1387":{"position":[[64,9]]}}}],["inversepar",{"_index":3369,"t":{"696":{"position":[[1491,13],[1821,13],[2070,13]]}}}],["invok",{"_index":4313,"t":{"1424":{"position":[[1003,6],[1104,6],[1331,6],[1562,6]]},"1566":{"position":[[917,8]]},"1803":{"position":[[1580,6],[1649,6]]},"1861":{"position":[[30,6]]},"1951":{"position":[[534,6]]},"2199":{"position":[[30,6]]},"2315":{"position":[[319,6]]},"2569":{"position":[[119,6]]},"3452":{"position":[[3741,7],[3890,7]]},"3916":{"position":[[6737,7],[6886,7]]},"3930":{"position":[[659,6]]},"3952":{"position":[[579,6]]},"3954":{"position":[[338,6]]}}}],["invokeactionmethodasync",{"_index":8228,"t":{"3452":{"position":[[3678,23]]},"3916":{"position":[[6674,23]]}}}],["invokeasync",{"_index":4314,"t":{"1424":{"position":[[1227,11]]},"1809":{"position":[[330,11]]},"2199":{"position":[[45,11]]},"2313":{"position":[[370,11]]},"2315":{"position":[[389,11]]},"2579":{"position":[[283,11]]},"2581":{"position":[[440,11],[967,11]]},"2587":{"position":[[384,11]]},"2589":{"position":[[415,11]]},"3832":{"position":[[280,11],[2237,11],[2490,11],[3998,11],[4251,11]]},"3910":{"position":[[2390,11]]},"3930":{"position":[[689,11]]}}}],["invokeasynct",{"_index":4315,"t":{"1424":{"position":[[1453,12]]}}}],["invokenextactionfilterasync",{"_index":8231,"t":{"3452":{"position":[[3822,27]]},"3916":{"position":[[6818,27]]}}}],["io",{"_index":223,"t":{"13":{"position":[[218,2]]},"19":{"position":[[541,2]]},"196":{"position":[[57,2]]},"302":{"position":[[75,2]]},"306":{"position":[[98,2]]},"314":{"position":[[128,2]]},"316":{"position":[[130,2]]},"615":{"position":[[699,2]]},"1505":{"position":[[48,2],[104,2]]},"1741":{"position":[[713,2],[2309,2]]},"2296":{"position":[[218,2]]},"2497":{"position":[[261,2]]},"2678":{"position":[[57,2]]},"2740":{"position":[[167,2]]},"2764":{"position":[[147,2]]},"2843":{"position":[[231,2]]},"3080":{"position":[[56,2]]},"3082":{"position":[[360,2]]},"3088":{"position":[[121,2]]},"3096":{"position":[[76,2]]},"3744":{"position":[[14,2],[83,2],[206,2],[379,2]]},"3746":{"position":[[156,2],[205,2],[289,2]]}}}],["ioc",{"_index":4206,"t":{"1387":{"position":[[43,3],[88,3]]},"1389":{"position":[[194,3]]},"1392":{"position":[[66,3]]}}}],["iopengener",{"_index":4342,"t":{"1440":{"position":[[790,12]]}}}],["ioperablerepositori",{"_index":3874,"t":{"1010":{"position":[[84,19],[132,19]]}}}],["ioption",{"_index":5825,"t":{"1909":{"position":[[484,8]]},"2713":{"position":[[80,8],[1192,8]]},"2715":{"position":[[69,8]]},"2717":{"position":[[29,8]]},"3950":{"position":[[445,8]]}}}],["ioptionsmonitor",{"_index":6826,"t":{"2713":{"position":[[126,15],[1278,15]]},"2717":{"position":[[169,15]]},"2731":{"position":[[223,15],[400,15]]}}}],["ioptionsmonitorcach",{"_index":6836,"t":{"2717":{"position":[[275,20]]}}}],["ioptionssnapshot",{"_index":6825,"t":{"2713":{"position":[[99,16],[1227,16]]},"2717":{"position":[[93,16]]}}}],["iorderedfilt",{"_index":5811,"t":{"1905":{"position":[[118,14]]},"1961":{"position":[[149,14],[218,14]]}}}],["iot",{"_index":5693,"t":{"1823":{"position":[[14,3],[423,3]]}}}],["iotherservic",{"_index":5333,"t":{"1711":{"position":[[610,13]]},"3966":{"position":[[1640,13]]}}}],["ip",{"_index":796,"t":{"114":{"position":[[556,2],[577,2]]},"2251":{"position":[[134,2]]},"3446":{"position":[[1031,2],[1052,2]]},"3918":{"position":[[3264,2]]},"3928":{"position":[[1593,2],[1614,2]]},"3996":{"position":[[335,2]]}}}],["ipagefilt",{"_index":5795,"t":{"1901":{"position":[[668,11]]}}}],["ipc",{"_index":6091,"t":{"2303":{"position":[[7,3],[73,3]]},"2307":{"position":[[0,3]]},"3954":{"position":[[7,3]]}}}],["ipcchannel",{"_index":6123,"t":{"2313":{"position":[[49,10]]}}}],["iprivatedepend",{"_index":4254,"t":{"1412":{"position":[[90,18],[197,18]]}}}],["iprivateent",{"_index":3498,"t":{"749":{"position":[[161,14]]},"1041":{"position":[[296,14],[725,14],[1307,14],[1561,14]]},"1775":{"position":[[3684,14]]}}}],["iprivaterepositori",{"_index":3862,"t":{"988":{"position":[[366,18]]},"1041":{"position":[[245,18]]}}}],["iprivatesqlrepositori",{"_index":3863,"t":{"988":{"position":[[404,21]]}}}],["iproduc",{"_index":5612,"t":{"1803":{"position":[[2917,9]]}}}],["ipv4",{"_index":368,"t":{"40":{"position":[[4,4]]},"42":{"position":[[4,4]]},"112":{"position":[[803,4]]},"606":{"position":[[262,4],[267,4]]},"617":{"position":[[755,4],[779,4]]},"1925":{"position":[[652,4]]},"2249":{"position":[[3,4],[12,4]]},"2251":{"position":[[3,4],[12,4]]}}}],["ipv6",{"_index":370,"t":{"40":{"position":[[54,4]]},"42":{"position":[[55,4]]},"606":{"position":[[277,4],[282,4]]},"617":{"position":[[790,4],[814,4]]},"2249":{"position":[[61,4],[70,4]]},"2251":{"position":[[62,4],[71,4]]}}}],["iq",{"_index":6440,"t":{"2559":{"position":[[113,2]]}}}],["iquery",{"_index":3617,"t":{"832":{"position":[[259,10]]},"834":{"position":[[0,10]]},"3924":{"position":[[1796,10]]}}}],["iqueryhandl",{"_index":4343,"t":{"1440":{"position":[[896,13]]}}}],["iquerytranslationpostprocessorfactori",{"_index":3740,"t":{"915":{"position":[[255,37]]}}}],["ir",{"_index":6542,"t":{"2559":{"position":[[1040,2]]}}}],["ireadablerepositori",{"_index":3868,"t":{"988":{"position":[[532,19]]},"1000":{"position":[[0,19],[43,19]]},"1031":{"position":[[72,19]]},"1368":{"position":[[296,19],[459,19]]}}}],["irediscli",{"_index":5534,"t":{"1799":{"position":[[241,12],[298,12],[877,12]]}}}],["iregist",{"_index":6806,"t":{"2690":{"position":[[82,9]]}}}],["irepositori",{"_index":161,"t":{"11":{"position":[[678,11],[1044,11],[1106,11],[1170,11],[1252,11]]},"810":{"position":[[236,11]]},"812":{"position":[[252,11]]},"814":{"position":[[234,11]]},"816":{"position":[[250,11]]},"947":{"position":[[978,11],[1026,11]]},"949":{"position":[[65,11]]},"988":{"position":[[62,11],[74,11],[95,11]]},"990":{"position":[[0,11]]},"992":{"position":[[0,11]]},"994":{"position":[[0,11]]},"1022":{"position":[[17,11],[77,11]]},"1024":{"position":[[57,11]]},"1037":{"position":[[352,11]]},"1111":{"position":[[254,11]]},"1113":{"position":[[252,11]]},"1115":{"position":[[255,11]]},"1117":{"position":[[2776,11]]},"1119":{"position":[[235,11]]},"1121":{"position":[[251,11]]},"1123":{"position":[[212,11]]},"1129":{"position":[[370,11],[1256,11]]},"1196":{"position":[[0,11]]},"1198":{"position":[[0,11]]},"1210":{"position":[[6,11]]},"1368":{"position":[[368,11]]},"1392":{"position":[[287,11],[333,11]]},"1394":{"position":[[228,11]]},"1396":{"position":[[168,11]]},"1408":{"position":[[302,11],[364,11],[1154,11]]},"1410":{"position":[[317,11],[379,11]]},"1414":{"position":[[242,11],[300,11]]},"1566":{"position":[[69,11],[81,11]]},"2294":{"position":[[707,11],[1092,11],[1154,11],[1218,11],[1300,11]]},"2589":{"position":[[586,11]]},"3434":{"position":[[256,11]]},"3452":{"position":[[629,11]]},"3791":{"position":[[1167,11],[1915,11]]},"3916":{"position":[[3625,11]]},"3924":{"position":[[1363,11]]},"3958":{"position":[[115,11],[141,11]]},"3984":{"position":[[297,11]]},"3992":{"position":[[2921,11]]},"3996":{"position":[[1741,11]]}}}],["iresourcefilt",{"_index":5784,"t":{"1901":{"position":[[154,15],[513,15]]},"1959":{"position":[[24,15]]}}}],["iresultfilt",{"_index":5791,"t":{"1901":{"position":[[433,13]]},"1947":{"position":[[72,13]]},"1955":{"position":[[122,13]]},"1959":{"position":[[80,13]]}}}],["is16",{"_index":5230,"t":{"1677":{"position":[[296,4]]}}}],["is64bitoperatingsystem",{"_index":5949,"t":{"2057":{"position":[[265,22],[302,22]]}}}],["isajaxrequest",{"_index":9970,"t":{"3978":{"position":[[624,13]]}}}],["isani",{"_index":7786,"t":{"3261":{"position":[[407,5]]}}}],["isassignablefrom",{"_index":5840,"t":{"1913":{"position":[[1011,16]]}}}],["isattach",{"_index":10100,"t":{"3986":{"position":[[515,10]]}}}],["isauthent",{"_index":1086,"t":{"135":{"position":[[403,15],[443,15]]}}}],["isautocloseconnect",{"_index":7612,"t":{"3215":{"position":[[351,21]]},"3226":{"position":[[175,21],[307,21]]},"3228":{"position":[[156,21]]},"3254":{"position":[[194,21],[472,21],[847,21]]},"3275":{"position":[[114,21]]}}}],["iscancellationrequest",{"_index":2740,"t":{"492":{"position":[[401,23]]},"1803":{"position":[[1459,23]]},"2482":{"position":[[301,23]]},"2484":{"position":[[401,23]]},"2805":{"position":[[391,23]]},"2813":{"position":[[535,23]]},"2817":{"position":[[814,23]]},"2825":{"position":[[301,23]]},"2827":{"position":[[447,23]]},"2829":{"position":[[495,23]]},"2831":{"position":[[443,23]]}}}],["ischedul",{"_index":8923,"t":{"3815":{"position":[[119,10]]},"3836":{"position":[[8,10]]},"3838":{"position":[[8,10]]},"3840":{"position":[[166,10]]},"3846":{"position":[[254,10]]},"3860":{"position":[[24,10]]},"3862":{"position":[[166,10]]}}}],["ischedulerfactori",{"_index":8765,"t":{"3772":{"position":[[242,17],[321,17],[377,17]]},"3834":{"position":[[33,17],[137,17],[193,17],[308,17]]}}}],["iscomplet",{"_index":8235,"t":{"3452":{"position":[[3961,11]]},"3916":{"position":[[6957,11]]}}}],["iscontrol",{"_index":5079,"t":{"1587":{"position":[[111,12]]}}}],["iscop",{"_index":3894,"t":{"1041":{"position":[[694,7],[1530,7]]},"1401":{"position":[[61,7]]},"1405":{"position":[[58,7]]},"1412":{"position":[[236,7],[1442,7]]}}}],["iscopedprocessingservic",{"_index":5660,"t":{"1811":{"position":[[629,24]]},"1823":{"position":[[590,24]]}}}],["iscopedservic",{"_index":4339,"t":{"1440":{"position":[[544,14],[610,14],[669,14]]}}}],["isdefin",{"_index":1921,"t":{"280":{"position":[[153,9],[192,9]]},"1913":{"position":[[781,9],[844,9]]}}}],["isdelet",{"_index":3373,"t":{"696":{"position":[[1723,9],[3710,9]]},"708":{"position":[[263,9]]},"747":{"position":[[333,9]]},"793":{"position":[[72,9]]},"795":{"position":[[239,9],[556,9]]},"824":{"position":[[138,9]]},"841":{"position":[[18,9]]},"844":{"position":[[338,9],[603,9]]},"877":{"position":[[1451,9],[1547,9],[1655,9],[1763,9],[1871,9]]}}}],["isdevelop",{"_index":1589,"t":{"216":{"position":[[976,13]]},"338":{"position":[[784,13]]},"730":{"position":[[178,13]]},"732":{"position":[[101,13]]},"1979":{"position":[[573,13]]},"2055":{"position":[[16,13],[52,13]]},"2519":{"position":[[234,13]]},"2848":{"position":[[461,13]]},"3708":{"position":[[4030,13]]}}}],["isdirectori",{"_index":5366,"t":{"1731":{"position":[[137,11]]}}}],["isempti",{"_index":4977,"t":{"1539":{"position":[[1221,7],[1293,7],[1881,7]]},"1557":{"position":[[610,7],[649,7]]}}}],["isensitivedetectionprovid",{"_index":7057,"t":{"2790":{"position":[[286,27],[333,27],[423,27],[501,27]]},"2796":{"position":[[90,27]]}}}],["isenviron",{"_index":5941,"t":{"2055":{"position":[[258,13]]}}}],["isequ",{"_index":5228,"t":{"1677":{"position":[[70,7],[142,7]]},"1685":{"position":[[101,7]]}}}],["iservecompon",{"_index":2216,"t":{"340":{"position":[[173,15]]}}}],["iservicecollect",{"_index":1520,"t":{"204":{"position":[[327,18]]},"210":{"position":[[52,18],[389,18],[582,18]]},"212":{"position":[[295,18],[584,18]]},"216":{"position":[[337,18],[794,18]]},"338":{"position":[[299,18]]},"340":{"position":[[273,18],[661,18],[895,18],[1122,18]]},"344":{"position":[[255,18],[344,18]]},"353":{"position":[[262,18]]},"369":{"position":[[597,18]]},"371":{"position":[[170,18]]},"411":{"position":[[321,18]]},"514":{"position":[[274,18]]},"524":{"position":[[353,18]]},"595":{"position":[[214,18]]},"617":{"position":[[2390,18]]},"734":{"position":[[8020,18]]},"1058":{"position":[[220,18]]},"1317":{"position":[[274,18]]},"1582":{"position":[[288,18]]},"1701":{"position":[[85,18]]},"1843":{"position":[[214,18]]},"1867":{"position":[[557,18]]},"1907":{"position":[[98,18]]},"1979":{"position":[[400,18]]},"2272":{"position":[[293,18]]},"2281":{"position":[[198,18]]},"2519":{"position":[[52,18]]},"2711":{"position":[[304,18]]},"2786":{"position":[[30,18]]},"2798":{"position":[[30,18]]},"2807":{"position":[[314,18]]},"2848":{"position":[[88,18]]},"2881":{"position":[[692,18]]},"2889":{"position":[[403,18]]},"2901":{"position":[[215,18]]},"2905":{"position":[[295,18]]},"2927":{"position":[[232,18]]},"2943":{"position":[[232,18]]},"2957":{"position":[[232,18]]},"3144":{"position":[[325,18]]},"3215":{"position":[[86,18]]},"3373":{"position":[[351,18]]},"3481":{"position":[[58,18]]},"3630":{"position":[[374,18]]},"3666":{"position":[[79,18]]},"3732":{"position":[[60,18]]},"3918":{"position":[[2480,18]]},"4006":{"position":[[81,18]]}}}],["iservicecompon",{"_index":2217,"t":{"340":{"position":[[236,17],[624,17],[858,17],[1085,17],[1429,17],[1730,17]]},"342":{"position":[[66,17]]},"344":{"position":[[0,17],[146,17]]},"353":{"position":[[225,17]]},"355":{"position":[[74,17],[131,17],[324,17],[544,17]]},"369":{"position":[[560,17]]},"371":{"position":[[133,17]]}}}],["iserviceprovd",{"_index":8830,"t":{"3791":{"position":[[578,15]]}}}],["iserviceprovid",{"_index":3469,"t":{"734":{"position":[[6725,16],[6869,16]]},"1041":{"position":[[905,16],[1605,16]]},"1424":{"position":[[812,16]]},"1799":{"position":[[1089,16]]},"1811":{"position":[[62,16],[246,16],[361,16]]},"1821":{"position":[[361,16]]},"1823":{"position":[[265,16]]},"2037":{"position":[[40,16],[109,16],[178,16],[255,16]]},"2039":{"position":[[40,16],[108,16],[177,16]]},"3524":{"position":[[16,16]]},"3791":{"position":[[731,16],[834,16],[1627,16]]},"3932":{"position":[[878,16]]},"3978":{"position":[[178,16]]}}}],["iserviceprovidi",{"_index":10008,"t":{"3980":{"position":[[152,17]]}}}],["iservicescop",{"_index":5696,"t":{"1823":{"position":[[209,13]]},"3385":{"position":[[23,13]]},"3791":{"position":[[1530,13]]},"3964":{"position":[[359,13]]}}}],["iservicescopefactori",{"_index":2838,"t":{"530":{"position":[[42,20],[198,20],[281,20]]},"1039":{"position":[[42,20],[198,20],[281,20]]},"2831":{"position":[[187,20],[262,20]]}}}],["isess",{"_index":7125,"t":{"2848":{"position":[[1298,8],[1426,8]]}}}],["isessenti",{"_index":7114,"t":{"2848":{"position":[[299,11]]}}}],["isexist",{"_index":3837,"t":{"965":{"position":[[29,8],[69,8],[123,8],[172,8],[243,8],[323,8],[374,8],[439,8],[499,8],[581,8]]},"3848":{"position":[[4,7],[75,7]]},"3890":{"position":[[4,7]]}}}],["ishap",{"_index":2927,"t":{"560":{"position":[[22,6],[158,6],[222,6],[288,6],[388,6]]}}}],["isident",{"_index":7798,"t":{"3267":{"position":[[539,10]]}}}],["isinglefilepublish",{"_index":7357,"t":{"3071":{"position":[[26,18],[362,18]]}}}],["isingleton",{"_index":4245,"t":{"1403":{"position":[[38,10]]},"1405":{"position":[[79,10]]},"1412":{"position":[[244,10],[1451,10]]},"1795":{"position":[[2854,10],[2926,10]]},"1883":{"position":[[291,10]]},"2357":{"position":[[587,10]]},"2379":{"position":[[717,10]]},"2486":{"position":[[286,10]]},"3968":{"position":[[813,10]]}}}],["islock",{"_index":7088,"t":{"2829":{"position":[[248,6],[527,6],[547,6],[890,6]]}}}],["ismatch",{"_index":5033,"t":{"1557":{"position":[[384,7],[421,7]]},"2725":{"position":[[912,7],[2354,7]]}}}],["ismodifi",{"_index":3794,"t":{"933":{"position":[[988,10]]},"2937":{"position":[[1459,10]]}}}],["isnullorempti",{"_index":3652,"t":{"853":{"position":[[432,13],[519,13]]},"960":{"position":[[451,13],[562,13],[1164,13],[1473,13]]}}}],["isnulloremti",{"_index":3024,"t":{"585":{"position":[[75,12]]}}}],["isnullorwhitespac",{"_index":6714,"t":{"2577":{"position":[[110,18]]},"2579":{"position":[[383,18]]}}}],["isodatetimeconvert",{"_index":6266,"t":{"2383":{"position":[[574,20]]}}}],["isol",{"_index":7835,"t":{"3282":{"position":[[195,9]]}}}],["isolationlevel",{"_index":7848,"t":{"3287":{"position":[[878,14]]},"3291":{"position":[[1450,14],[1467,14]]}}}],["isomeservic",{"_index":4323,"t":{"1428":{"position":[[105,12],[169,12]]},"1711":{"position":[[529,12]]}}}],["isparetimelisten",{"_index":6362,"t":{"2486":{"position":[[31,18],[266,18]]},"3950":{"position":[[15,18]]}}}],["isparetimework",{"_index":6278,"t":{"2395":{"position":[[84,16],[115,16]]},"2406":{"position":[[25,16]]},"2415":{"position":[[25,16]]},"2434":{"position":[[25,16]]},"2442":{"position":[[36,16],[88,16],[228,16],[2015,16]]},"3960":{"position":[[103,16]]},"3968":{"position":[[636,16],[838,16]]},"3976":{"position":[[14,16]]}}}],["ispecservic",{"_index":4290,"t":{"1418":{"position":[[92,12]]}}}],["isprimarykey",{"_index":7705,"t":{"3234":{"position":[[195,12]]},"3267":{"position":[[518,12]]}}}],["isproduct",{"_index":5937,"t":{"2055":{"position":[[85,12],[120,12]]}}}],["isql",{"_index":4069,"t":{"1223":{"position":[[196,4]]},"1227":{"position":[[17,4],[49,4]]},"1229":{"position":[[57,4]]},"1231":{"position":[[33,4]]},"1234":{"position":[[79,4]]},"1236":{"position":[[79,4]]},"1238":{"position":[[79,4]]},"1240":{"position":[[79,4]]},"1242":{"position":[[79,4]]},"1244":{"position":[[79,4]]},"1246":{"position":[[50,4]]},"1248":{"position":[[115,4]]},"1251":{"position":[[79,4]]},"1253":{"position":[[79,4]]},"1255":{"position":[[79,4]]},"1257":{"position":[[79,4]]},"1259":{"position":[[79,4]]},"1261":{"position":[[79,4]]},"1263":{"position":[[79,4]]},"1265":{"position":[[50,4]]},"1267":{"position":[[79,4]]},"1275":{"position":[[124,4]]},"1279":{"position":[[198,4]]},"1281":{"position":[[33,4]]},"3932":{"position":[[1994,4],[2250,4]]}}}],["isqldispatchproxi",{"_index":3598,"t":{"810":{"position":[[87,17]]},"812":{"position":[[95,17]]},"814":{"position":[[86,17]]},"816":{"position":[[94,17]]},"1107":{"position":[[58,17]]},"1109":{"position":[[15,17],[472,17]]},"1111":{"position":[[93,17]]},"1113":{"position":[[93,17]]},"1115":{"position":[[96,17]]},"1117":{"position":[[1067,17]]},"1119":{"position":[[87,17]]},"1121":{"position":[[95,17]]},"1123":{"position":[[80,17]]},"1129":{"position":[[140,17],[948,17]]},"1223":{"position":[[0,17],[55,17],[203,17],[237,17]]},"1234":{"position":[[86,17]]},"1236":{"position":[[86,17]]},"1238":{"position":[[86,17]]},"1240":{"position":[[86,17]]},"1242":{"position":[[86,17]]},"1244":{"position":[[86,17]]},"1246":{"position":[[57,17]]},"1248":{"position":[[122,17]]},"1251":{"position":[[86,17]]},"1253":{"position":[[86,17]]},"1255":{"position":[[86,17]]},"1257":{"position":[[86,17]]},"1259":{"position":[[86,17]]},"1261":{"position":[[86,17]]},"1263":{"position":[[86,17]]},"1265":{"position":[[57,17]]},"1267":{"position":[[86,17]]},"1275":{"position":[[131,17]]},"1279":{"position":[[205,17]]},"1281":{"position":[[40,17]]},"1418":{"position":[[254,17]]},"3932":{"position":[[2001,17],[2257,17]]},"3980":{"position":[[277,17]]}}}],["isqlexecutablerepositori",{"_index":3876,"t":{"1014":{"position":[[0,24],[46,24]]}}}],["isqlexecuteproxi",{"_index":3959,"t":{"1109":{"position":[[453,16],[725,16],[778,16]]}}}],["isqlreaderrepositori",{"_index":3875,"t":{"1012":{"position":[[0,20],[41,20]]}}}],["isqlrepositori",{"_index":3592,"t":{"810":{"position":[[3,14]]},"812":{"position":[[3,14]]},"814":{"position":[[3,14]]},"816":{"position":[[3,14]]},"949":{"position":[[110,14]]},"988":{"position":[[135,14],[150,14]]},"996":{"position":[[0,14]]},"998":{"position":[[0,14]]},"1037":{"position":[[411,14]]},"1107":{"position":[[25,14]]},"1109":{"position":[[0,14],[202,14],[251,14]]},"1111":{"position":[[3,14]]},"1113":{"position":[[3,14]]},"1115":{"position":[[3,14]]},"1117":{"position":[[58,14]]},"1119":{"position":[[3,14]]},"1121":{"position":[[3,14]]},"1123":{"position":[[3,14]]},"1129":{"position":[[14,14],[770,14]]},"1194":{"position":[[0,14]]},"1206":{"position":[[6,14]]}}}],["isqlsugarcli",{"_index":7617,"t":{"3215":{"position":[[573,15],[661,15],[714,15],[776,15]]},"3224":{"position":[[110,15],[204,15]]},"3287":{"position":[[1535,15],[1674,15]]}}}],["isqlsugarrepositori",{"_index":7774,"t":{"3256":{"position":[[19,19],[62,19],[195,19]]},"3992":{"position":[[3097,19]]}}}],["isreadonli",{"_index":5416,"t":{"1753":{"position":[[299,10]]}}}],["isrequestsucce",{"_index":757,"t":{"112":{"position":[[1417,16]]},"1925":{"position":[[1279,16]]}}}],["isroot",{"_index":4995,"t":{"1549":{"position":[[176,6]]}}}],["iss",{"_index":814,"t":{"114":{"position":[[1071,3]]},"3446":{"position":[[1546,3]]},"3452":{"position":[[2365,3]]},"3916":{"position":[[5361,3]]},"3928":{"position":[[2108,3]]}}}],["isshow",{"_index":8503,"t":{"3680":{"position":[[240,6],[424,6],[462,6]]}}}],["issinglefileenviro",{"_index":5952,"t":{"2063":{"position":[[38,22]]}}}],["isstag",{"_index":5938,"t":{"2055":{"position":[[157,9],[189,9]]}}}],["issu",{"_index":672,"t":{"106":{"position":[[31,5]]},"116":{"position":[[17,5]]},"154":{"position":[[17,5]]},"194":{"position":[[17,5]]},"222":{"position":[[17,5]]},"257":{"position":[[17,5]]},"296":{"position":[[17,5]]},"333":{"position":[[17,5]]},"375":{"position":[[17,5]]},"378":{"position":[[44,6],[81,6]]},"382":{"position":[[8,6]]},"384":{"position":[[12,6]]},"425":{"position":[[17,5]]},"465":{"position":[[17,5]]},"496":{"position":[[17,5]]},"536":{"position":[[17,5]]},"562":{"position":[[17,5]]},"576":{"position":[[17,5]]},"641":{"position":[[17,5]]},"655":{"position":[[515,5],[558,6]]},"657":{"position":[[17,5]]},"673":{"position":[[17,5]]},"700":{"position":[[17,5]]},"734":{"position":[[8205,5],[8251,6]]},"736":{"position":[[17,5]]},"753":{"position":[[17,5]]},"775":{"position":[[17,5]]},"797":{"position":[[17,5]]},"838":{"position":[[17,5]]},"848":{"position":[[17,5]]},"891":{"position":[[17,5]]},"917":{"position":[[6,5],[49,6]]},"921":{"position":[[17,5]]},"937":{"position":[[17,5]]},"951":{"position":[[17,5]]},"983":{"position":[[17,5]]},"1043":{"position":[[17,5]]},"1099":{"position":[[17,5]]},"1137":{"position":[[17,5]]},"1153":{"position":[[17,5]]},"1218":{"position":[[17,5]]},"1283":{"position":[[17,5]]},"1304":{"position":[[17,5]]},"1321":{"position":[[17,5]]},"1355":{"position":[[17,5]]},"1370":{"position":[[17,5]]},"1381":{"position":[[17,5]]},"1442":{"position":[[17,5]]},"1476":{"position":[[17,5]]},"1501":{"position":[[17,5]]},"1563":{"position":[[17,5]]},"1568":{"position":[[17,5]]},"1669":{"position":[[17,5]]},"1693":{"position":[[17,5]]},"1713":{"position":[[17,5]]},"1757":{"position":[[17,5]]},"1789":{"position":[[17,5]]},"1829":{"position":[[17,5]]},"1889":{"position":[[17,5]]},"1967":{"position":[[17,5]]},"2257":{"position":[[17,5]]},"2287":{"position":[[17,5]]},"2300":{"position":[[17,5]]},"2323":{"position":[[17,5]]},"2333":{"position":[[55,5]]},"2337":{"position":[[17,5]]},"2389":{"position":[[17,5]]},"2492":{"position":[[17,5]]},"2514":{"position":[[17,5]]},"2561":{"position":[[17,5]]},"2595":{"position":[[17,5]]},"2611":{"position":[[17,5]]},"2631":{"position":[[17,5]]},"2649":{"position":[[33,5],[221,5],[268,6]]},"2659":{"position":[[17,5]]},"2698":{"position":[[17,5]]},"2731":{"position":[[142,6]]},"2737":{"position":[[17,5]]},"2766":{"position":[[17,5]]},"2778":{"position":[[17,5]]},"2800":{"position":[[17,5]]},"2840":{"position":[[17,5]]},"2858":{"position":[[17,5]]},"2907":{"position":[[17,5]]},"2975":{"position":[[17,5]]},"3084":{"position":[[17,5]]},"3128":{"position":[[17,5]]},"3133":{"position":[[17,5]]},"3205":{"position":[[17,5]]},"3240":{"position":[[17,5]]},"3279":{"position":[[17,5]]},"3298":{"position":[[17,5]]},"3307":{"position":[[193,5],[230,6]]},"3311":{"position":[[17,5]]},"3333":{"position":[[17,5]]},"3347":{"position":[[17,5]]},"3409":{"position":[[17,5]]},"3472":{"position":[[17,5]]},"3605":{"position":[[17,5]]},"3724":{"position":[[17,5]]},"3756":{"position":[[17,5]]},"3906":{"position":[[17,5]]},"3908":{"position":[[306,5]]},"3910":{"position":[[351,6]]},"3912":{"position":[[169,6],[243,6],[317,6],[391,6],[465,6],[539,6],[613,6],[687,6]]},"3914":{"position":[[54,6],[128,6],[202,6],[276,6],[350,6],[424,6],[498,6],[572,6],[646,6],[720,6]]},"3916":{"position":[[54,6],[128,6],[202,6],[276,6],[350,6],[424,6],[498,6],[572,6],[646,6]]},"3918":{"position":[[54,6],[128,6],[202,6],[276,6],[350,6],[424,6],[498,6],[572,6],[646,6],[720,6]]},"3920":{"position":[[54,6],[128,6]]},"3942":{"position":[[232,5]]},"3978":{"position":[[1407,5]]}}}],["issuccessstatuscod",{"_index":7999,"t":{"3373":{"position":[[612,19]]}}}],["issuersigningkey",{"_index":978,"t":{"127":{"position":[[868,16],[1368,16]]},"3039":{"position":[[64,16]]},"3041":{"position":[[79,16]]}}}],["issync",{"_index":5331,"t":{"1709":{"position":[[73,6]]}}}],["istest",{"_index":5940,"t":{"2055":{"position":[[229,6]]}}}],["istransmiss",{"_index":5031,"t":{"1557":{"position":[[159,14]]}}}],["istringloc",{"_index":6418,"t":{"2551":{"position":[[96,16]]}}}],["istringlocalizerfactori",{"_index":6420,"t":{"2551":{"position":[[147,23]]}}}],["isubscribehandl",{"_index":5319,"t":{"1703":{"position":[[70,17],[136,17]]},"1707":{"position":[[15,17]]},"1711":{"position":[[151,17],[900,17]]},"3962":{"position":[[70,17]]}}}],["isuniqu",{"_index":3383,"t":{"696":{"position":[[2989,8]]}}}],["isvaild",{"_index":5990,"t":{"2140":{"position":[[5,7]]}}}],["isvalid",{"_index":3096,"t":{"587":{"position":[[1324,7]]},"639":{"position":[[413,7]]},"1683":{"position":[[195,7]]},"1887":{"position":[[204,7]]},"2142":{"position":[[4,7]]},"3934":{"position":[[1453,7]]}}}],["item",{"_index":1925,"t":{"282":{"position":[[152,4],[190,4],[299,4],[333,4],[350,4]]},"570":{"position":[[1154,5]]},"769":{"position":[[201,4],[295,4],[396,4],[488,4],[587,4]]},"2843":{"position":[[170,5]]},"2852":{"position":[[18,5],[104,5],[136,5],[180,5]]},"3222":{"position":[[120,4],[167,4]]},"3738":{"position":[[70,4],[84,5],[97,4],[144,5]]},"3740":{"position":[[198,4],[212,5],[225,4],[272,5],[561,4],[575,5],[588,4],[635,5]]}}}],["itemgroup",{"_index":5004,"t":{"1551":{"position":[[1007,9],[1092,9]]}}}],["itemid",{"_index":3540,"t":{"769":{"position":[[36,6],[95,6],[165,6],[264,6],[360,6],[538,6]]}}}],["itestappservic",{"_index":8244,"t":{"3466":{"position":[[1143,15]]}}}],["itestinheritdoc",{"_index":8510,"t":{"3688":{"position":[[211,15],[261,15],[324,15],[521,15]]},"3940":{"position":[[1099,15],[1149,15],[1212,15],[1409,15]]}}}],["itestoutputhelp",{"_index":8007,"t":{"3383":{"position":[[25,17],[155,17],[198,17]]}}}],["itestservic",{"_index":4295,"t":{"1420":{"position":[[162,12],[623,12]]},"1424":{"position":[[176,12],[226,12],[299,12],[1918,12]]},"3001":{"position":[[184,12]]},"3003":{"position":[[106,12]]}}}],["itransi",{"_index":68,"t":{"3":{"position":[[779,10]]},"1399":{"position":[[77,10]]},"1405":{"position":[[31,10]]},"1408":{"position":[[272,10],[1066,10]]},"1410":{"position":[[287,10]]},"1412":{"position":[[225,10],[523,10],[660,10],[1430,10],[1510,10],[1596,10],[2175,10],[2710,10],[2818,10]]},"1414":{"position":[[212,10]]},"1424":{"position":[[313,10],[1932,10]]},"3379":{"position":[[166,10]]}}}],["itransientservic",{"_index":4335,"t":{"1440":{"position":[[177,17],[218,17],[306,17],[372,17]]}}}],["iunifyresultprovid",{"_index":8571,"t":{"3708":{"position":[[28,20],[560,20],[1045,20]]},"3716":{"position":[[187,20]]},"3956":{"position":[[158,20],[686,20]]},"3978":{"position":[[1666,20]]}}}],["iunitofwork",{"_index":7853,"t":{"3287":{"position":[[1225,11],[1459,11]]},"3922":{"position":[[836,11],[953,11]]}}}],["iupdateablerepositori",{"_index":3872,"t":{"1006":{"position":[[0,21],[49,21]]}}}],["iuseridprovid",{"_index":7573,"t":{"3189":{"position":[[132,15],[323,15]]}}}],["ivalidatableobject",{"_index":3101,"t":{"587":{"position":[[1625,18],[1707,18]]},"599":{"position":[[133,18]]},"602":{"position":[[301,18]]}}}],["ivalidateopt",{"_index":6842,"t":{"2725":{"position":[[120,16],[603,16],[789,16],[2231,16]]}}}],["ivalidationmessagetypeprovid",{"_index":3218,"t":{"617":{"position":[[1380,30],[1853,30],[2023,30],[2720,30],[2798,30]]}}}],["iview",{"_index":1474,"t":{"199":{"position":[[244,5]]}}}],["iviewadmin",{"_index":1495,"t":{"199":{"position":[[569,10]]}}}],["iviewengin",{"_index":8614,"t":{"3734":{"position":[[7,11],[184,11],[234,11]]},"3752":{"position":[[0,11]]}}}],["iviewenginemodel",{"_index":8637,"t":{"3752":{"position":[[885,16],[1205,16]]}}}],["iviewengineoptionsbuild",{"_index":8635,"t":{"3752":{"position":[[294,25],[544,25],[826,25],[1146,25]]}}}],["iviewenginetempl",{"_index":8634,"t":{"3752":{"position":[[243,19],[487,19],[769,19],[1083,19]]}}}],["iwebcompon",{"_index":2254,"t":{"348":{"position":[[0,13],[170,13]]},"355":{"position":[[509,13]]},"2879":{"position":[[511,13]]},"3430":{"position":[[1159,13],[2291,13]]},"3920":{"position":[[528,13],[880,13]]}}}],["iwebhost",{"_index":9603,"t":{"3944":{"position":[[491,8]]}}}],["iwebhostenviron",{"_index":1522,"t":{"204":{"position":[[407,19]]},"210":{"position":[[162,19],[499,19],[675,19]]},"212":{"position":[[375,19],[664,19]]},"216":{"position":[[417,19],[941,19]]},"218":{"position":[[384,19]]},"338":{"position":[[749,19]]},"346":{"position":[[316,19],[431,19]]},"371":{"position":[[412,19]]},"411":{"position":[[436,19]]},"1979":{"position":[[538,19]]},"2255":{"position":[[194,19]]},"2272":{"position":[[493,19]]},"2281":{"position":[[286,19]]},"2519":{"position":[[199,19]]},"2579":{"position":[[906,19]]},"2848":{"position":[[426,19]]},"2881":{"position":[[780,19]]},"2889":{"position":[[515,19]]},"3144":{"position":[[449,19]]},"3156":{"position":[[501,19]]},"3373":{"position":[[470,19]]},"3630":{"position":[[519,19]]},"3666":{"position":[[244,19]]},"3708":{"position":[[3995,19]]},"3918":{"position":[[2644,19]]}}}],["iwritablerepositori",{"_index":3870,"t":{"1002":{"position":[[0,19],[43,19]]},"1031":{"position":[[160,19]]}}}],["ix",{"_index":3378,"t":{"696":{"position":[[1997,2],[2961,2]]}}}],["ix_city_parentid",{"_index":3377,"t":{"696":{"position":[[1997,16]]}}}],["ix_persondetail_personid",{"_index":3382,"t":{"696":{"position":[[2961,24]]}}}],["iyourservic",{"_index":6852,"t":{"2731":{"position":[[273,12]]},"3399":{"position":[[478,12],[598,12]]},"3772":{"position":[[289,12]]},"3834":{"position":[[105,12]]}}}],["j",{"_index":8003,"t":{"3375":{"position":[[198,1],[227,1]]},"3379":{"position":[[119,1],[218,1],[234,1]]}}}],["ja",{"_index":6583,"t":{"2559":{"position":[[1484,2],[1490,2]]}}}],["jabber",{"_index":7487,"t":{"3136":{"position":[[270,6]]}}}],["jack",{"_index":6743,"t":{"2607":{"position":[[180,4],[248,4],[602,4],[661,4]]},"3261":{"position":[[536,4]]}}}],["jacoat",{"_index":9586,"t":{"3942":{"position":[[299,6]]}}}],["jaina",{"_index":5301,"t":{"1695":{"position":[[33,5]]},"1791":{"position":[[34,5]]},"1795":{"position":[[3044,5],[3091,5]]},"3948":{"position":[[34,5],[125,5]]}}}],["jami",{"_index":4844,"t":{"1511":{"position":[[3280,5]]}}}],["jan",{"_index":2672,"t":{"482":{"position":[[181,3]]},"2418":{"position":[[422,3]]},"2420":{"position":[[952,3],[1003,3],[1054,3],[1110,3],[1376,3]]}}}],["java",{"_index":7941,"t":{"3350":{"position":[[99,4]]}}}],["javascript",{"_index":1150,"t":{"152":{"position":[[362,10]]},"261":{"position":[[42,10]]},"272":{"position":[[253,10]]},"282":{"position":[[228,10]]},"304":{"position":[[16,10],[77,10]]},"404":{"position":[[201,10]]},"1516":{"position":[[145,10]]},"2341":{"position":[[6,10]]},"2379":{"position":[[36,10]]},"2627":{"position":[[97,10]]}}}],["javascriptencod",{"_index":6246,"t":{"2371":{"position":[[124,17]]},"3506":{"position":[[566,17]]}}}],["javay",{"_index":7028,"t":{"2770":{"position":[[356,7]]}}}],["jenkin",{"_index":4387,"t":{"1479":{"position":[[14,7]]},"1481":{"position":[[16,7]]},"1483":{"position":[[28,7],[60,7],[96,7],[104,7],[495,7],[636,7],[649,7],[682,7],[1046,7],[1077,7],[1106,7],[1170,7]]},"1485":{"position":[[144,7],[157,7],[294,7],[322,7]]},"1488":{"position":[[2,7],[662,7],[719,7],[812,7],[950,7],[1579,7],[1677,7]]},"1495":{"position":[[2,7],[606,7],[663,7],[756,7],[894,7],[985,7],[1037,7],[1093,7]]},"1497":{"position":[[324,7]]},"1499":{"position":[[13,7]]},"1505":{"position":[[71,7]]},"2555":{"position":[[32,7]]}}}],["jenkins_hom",{"_index":4407,"t":{"1483":{"position":[[495,12]]},"1485":{"position":[[157,12]]},"1488":{"position":[[812,12]]},"1495":{"position":[[756,12],[985,12],[1037,12],[1093,12]]}}}],["jenkinsscmbas",{"_index":4451,"t":{"1488":{"position":[[475,15]]},"1497":{"position":[[171,14]]}}}],["jenkinsscmbulk",{"_index":4488,"t":{"1495":{"position":[[475,14]]}}}],["jexu",{"_index":647,"t":{"102":{"position":[[199,5]]}}}],["ji",{"_index":9556,"t":{"3938":{"position":[[375,3]]}}}],["jianlong",{"_index":4901,"t":{"1511":{"position":[[4225,8]]}}}],["jianyisiqian",{"_index":6951,"t":{"2768":{"position":[[809,12]]}}}],["jie",{"_index":6969,"t":{"2768":{"position":[[1062,3]]}}}],["jm",{"_index":6520,"t":{"2559":{"position":[[852,2]]}}}],["jmeter",{"_index":657,"t":{"104":{"position":[[44,6]]}}}],["jnpf",{"_index":2411,"t":{"399":{"position":[[906,4]]}}}],["jo",{"_index":6442,"t":{"2559":{"position":[[129,2]]}}}],["job",{"_index":4461,"t":{"1488":{"position":[[770,3],[838,3],[887,3],[1014,3],[1316,3]]},"1495":{"position":[[714,3],[782,3],[831,3],[958,3],[1011,3],[1063,3],[1119,3],[1139,3],[1187,3]]},"1497":{"position":[[161,3],[188,3]]},"3764":{"position":[[21,3]]},"3768":{"position":[[838,3],[1033,3],[1338,3],[1533,3],[1840,3],[2036,3],[2343,3]]},"3770":{"position":[[2157,3],[3972,3],[4513,3]]},"3785":{"position":[[1148,3],[1188,3],[1390,3]]},"3812":{"position":[[1748,3],[2286,3]]},"3836":{"position":[[55,4],[224,4]]}}}],["job1",{"_index":8648,"t":{"3762":{"position":[[582,4],[587,4],[693,4],[698,4],[804,4],[809,4],[914,4],[919,4],[1025,4],[1030,4],[1136,4],[1141,4]]},"3766":{"position":[[364,4],[369,4],[469,4],[474,4],[574,4],[579,4],[679,4],[684,4],[785,4],[790,4],[894,4],[899,4],[1000,4],[1005,4],[1115,4],[1120,4],[1221,4],[1226,4],[1336,4],[1341,4],[1450,4],[1455,4],[1556,4],[1561,4],[1661,4],[1666,4]]},"3768":{"position":[[651,4],[656,4],[812,4],[843,4],[1007,4],[1038,4],[1151,4],[1156,4],[1312,4],[1343,4],[1507,4],[1538,4],[1652,4],[1657,4],[1814,4],[1845,4],[2010,4],[2041,4],[2155,4],[2160,4],[2317,4],[2348,4],[2667,4],[2672,4],[2777,4],[2782,4],[2888,4],[2893,4],[2999,4],[3004,4],[3110,4],[3115,4]]},"3770":{"position":[[460,4],[710,4],[736,4],[1842,4],[2140,4],[2167,4],[3643,4],[3824,4],[3854,4],[3955,4],[3983,4],[4493,4],[4524,4],[5159,4],[5510,4],[5533,4]]},"3772":{"position":[[891,4],[896,4],[1698,4],[1703,4]]},"3774":{"position":[[776,4],[781,4],[881,4],[886,4],[990,4],[995,4],[1096,4],[1101,4],[1211,4],[1216,4],[1317,4],[1322,4],[1431,4],[1436,4],[1546,4],[1551,4],[1652,4],[1657,4]]},"3779":{"position":[[640,4],[992,4]]},"3781":{"position":[[147,4]]},"3783":{"position":[[666,4],[671,4],[786,4],[791,4],[907,4],[912,4],[1028,4],[1033,4],[1149,4],[1154,4]]},"3785":{"position":[[117,4],[976,4],[1114,4],[1159,4],[1401,4],[1544,4]]},"3802":{"position":[[708,4],[1353,4]]},"3806":{"position":[[482,4],[487,4],[625,4],[630,4],[768,4],[773,4],[912,4],[917,4],[1055,4],[1060,4],[1199,4],[1204,4],[1887,4],[1892,4],[2029,4],[2034,4],[2171,4],[2176,4],[2313,4],[2318,4],[2455,4],[2460,4],[2597,4],[2602,4],[3715,4],[3720,4],[3839,4],[3844,4]]},"3808":{"position":[[1149,4],[1154,4],[1267,4],[1272,4],[1385,4],[1390,4],[1506,4],[1511,4],[1627,4],[1632,4],[2370,4],[2375,4],[2494,4],[2499,4],[2618,4],[2623,4],[2742,4],[2747,4],[2866,4],[2871,4]]},"3812":{"position":[[121,4],[147,4],[1404,4],[1421,4],[1652,4],[1682,4],[1731,4],[1759,4],[2266,4],[2297,4],[2458,4],[2481,4]]},"3817":{"position":[[624,4],[919,4],[1668,4],[1945,4]]},"3819":{"position":[[356,4],[1034,4],[1291,4],[1353,4],[1416,4],[1433,4]]},"3821":{"position":[[145,4],[422,4]]},"3828":{"position":[[1031,4],[1036,4],[1122,4],[1127,4],[1254,4],[1259,4]]},"3832":{"position":[[1095,4],[1100,4],[1187,4],[1192,4],[1307,4],[1312,4],[1427,4],[1432,4],[1547,4],[1552,4],[1704,4],[1709,4],[3275,4],[3280,4],[3382,4],[3387,4],[3517,4],[3522,4]]},"3840":{"position":[[133,4],[222,4]]},"3842":{"position":[[367,4],[507,4],[997,4],[1137,4],[1562,4],[1702,4],[1886,4],[1997,4],[2152,4],[2292,4],[2489,4],[2619,4],[2793,4],[2933,4],[3410,4],[3550,4]]},"3844":{"position":[[374,4],[521,4],[644,4]]},"3846":{"position":[[175,4],[243,4],[613,4],[882,4]]},"3848":{"position":[[45,4],[116,4]]},"3850":{"position":[[187,4],[228,4]]},"3852":{"position":[[170,4],[175,4],[306,4],[347,4]]},"3854":{"position":[[172,4],[177,4],[466,4]]},"3862":{"position":[[133,4],[222,4]]},"3874":{"position":[[120,4],[161,4]]},"3876":{"position":[[102,4],[107,4],[238,4],[279,4]]},"3896":{"position":[[70,4],[347,4]]}}}],["job12",{"_index":9002,"t":{"3846":{"position":[[759,5]]}}}],["job1_trigger1",{"_index":8649,"t":{"3762":{"position":[[587,13],[698,13],[809,13],[919,13],[1030,13],[1141,13]]},"3766":{"position":[[790,13]]},"3768":{"position":[[656,13],[812,13],[1007,13],[1156,13],[1312,13],[1507,13],[1657,13],[1814,13],[2010,13],[2160,13],[2317,13],[2672,13],[2782,13],[2893,13],[3004,13],[3115,13]]},"3770":{"position":[[710,13],[2140,13],[3824,13],[3955,13],[4493,13],[5510,13]]},"3772":{"position":[[896,13],[1703,13]]},"3774":{"position":[[781,13],[995,13],[1216,13],[1551,13],[1657,13]]},"3783":{"position":[[671,13],[791,13],[912,13],[1033,13],[1154,13]]},"3802":{"position":[[708,13],[1353,13]]},"3806":{"position":[[487,13],[630,13],[773,13],[917,13],[1060,13],[1204,13],[1892,13],[2034,13],[2176,13],[2318,13],[2460,13],[2602,13],[3720,13],[3844,13]]},"3808":{"position":[[1511,13],[2375,13],[2499,13],[2623,13],[2747,13],[2871,13]]},"3812":{"position":[[121,13],[1404,13],[1652,13],[1731,13],[2266,13],[2458,13]]},"3817":{"position":[[919,13],[1945,13]]},"3819":{"position":[[356,13],[1034,13],[1291,13],[1416,13]]},"3821":{"position":[[422,13]]},"3828":{"position":[[1036,13],[1127,13],[1259,13]]},"3832":{"position":[[1100,13],[1192,13],[1312,13],[1432,13],[1552,13],[1709,13],[3280,13],[3387,13],[3522,13]]},"3850":{"position":[[187,13]]},"3852":{"position":[[175,13],[306,13]]},"3854":{"position":[[177,13]]},"3874":{"position":[[120,13]]},"3876":{"position":[[107,13],[238,13]]},"3896":{"position":[[347,13]]}}}],["job1_trigger2",{"_index":8670,"t":{"3766":{"position":[[369,13],[474,13],[579,13],[684,13],[899,13],[1120,13],[1455,13],[1561,13],[1666,13]]},"3774":{"position":[[886,13]]},"3808":{"position":[[1154,13],[1272,13],[1632,13]]},"3819":{"position":[[1353,13],[1433,13]]}}}],["job1_trigger3",{"_index":8679,"t":{"3766":{"position":[[1005,13],[1226,13],[1341,13]]},"3774":{"position":[[1101,13],[1322,13],[1436,13]]},"3808":{"position":[[1390,13]]}}}],["job_id",{"_index":8739,"t":{"3770":{"position":[[2157,6],[3972,6],[4513,6]]},"3785":{"position":[[1148,6],[1390,6]]},"3812":{"position":[[1748,6],[2286,6]]}}}],["job_nam",{"_index":4460,"t":{"1488":{"position":[[770,8],[838,8],[887,8],[1014,8],[1316,8]]},"1495":{"position":[[714,8],[782,8],[831,8],[958,8],[1011,8],[1063,8],[1119,8],[1139,8],[1187,8]]},"1497":{"position":[[161,8],[188,8]]}}}],["job_typ",{"_index":8829,"t":{"3785":{"position":[[1188,8]]}}}],["jobbuild",{"_index":8784,"t":{"3774":{"position":[[138,10]]},"3779":{"position":[[61,10],[180,10],[235,10],[248,10],[296,10],[309,10],[378,10],[391,10],[487,10],[500,10],[593,10],[606,10],[947,10],[960,10],[1373,10],[1391,10],[1404,10],[1586,10],[1626,10],[1724,10]]},"3781":{"position":[[0,10],[96,10],[109,10],[676,10]]},"3783":{"position":[[1217,10],[1333,10]]},"3785":{"position":[[12,10]]},"3808":{"position":[[3,10],[478,10],[569,10]]},"3817":{"position":[[320,10],[2689,10]]},"3819":{"position":[[20,10],[71,10],[167,10]]},"3826":{"position":[[342,10]]},"3842":{"position":[[532,10],[695,10],[820,10]]},"3844":{"position":[[1273,10]]},"3868":{"position":[[4,10]]},"3882":{"position":[[130,10],[197,10]]}}}],["jobdetail",{"_index":8714,"t":{"3770":{"position":[[436,9],[1244,9],[1522,9],[1542,9],[1607,9],[2697,9],[2973,9],[2993,9],[3058,9],[4554,9],[4838,9],[4858,9],[4923,9],[5118,9],[5351,9]]},"3777":{"position":[[6,9],[26,9]]},"3779":{"position":[[5,9],[46,9],[90,9],[123,9],[449,9],[516,9]]},"3781":{"position":[[16,9]]},"3783":{"position":[[296,9],[316,9],[339,9],[376,9],[1205,9],[1272,9],[1390,9],[1455,9],[1554,9],[1666,9],[1734,9]]},"3785":{"position":[[0,9],[69,9],[421,9],[559,9],[701,9],[1438,9],[1490,9],[1760,9]]},"3793":{"position":[[118,9]]},"3806":{"position":[[3004,9],[3014,9],[3101,9]]},"3815":{"position":[[25,9]]},"3817":{"position":[[596,9],[1644,9]]},"3821":{"position":[[121,9]]},"3830":{"position":[[244,9]]},"3836":{"position":[[27,9],[122,9]]},"3838":{"position":[[27,9],[148,9]]},"3864":{"position":[[26,9]]},"3882":{"position":[[150,9]]},"3896":{"position":[[46,9]]}}}],["jobexecutedcontext",{"_index":8946,"t":{"3828":{"position":[[495,18]]},"3830":{"position":[[100,18],[439,18]]}}}],["jobexecutingcontext",{"_index":8643,"t":{"3762":{"position":[[174,19]]},"3768":{"position":[[349,19]]},"3770":{"position":[[221,19],[1454,19],[2905,19],[4770,19]]},"3774":{"position":[[506,19]]},"3783":{"position":[[228,19]]},"3789":{"position":[[59,19]]},"3791":{"position":[[346,19],[989,19],[1793,19]]},"3793":{"position":[[0,19],[62,19],[208,19]]},"3795":{"position":[[218,19]]},"3806":{"position":[[3432,19]]},"3808":{"position":[[866,19],[2087,19]]},"3828":{"position":[[288,19]]},"3830":{"position":[[76,19],[371,19]]},"3832":{"position":[[165,19],[553,19],[1849,19],[2754,19],[3610,19],[4515,19]]}}}],["jobexecutioncontext",{"_index":8950,"t":{"3830":{"position":[[131,19],[152,19],[188,19],[305,19]]}}}],["jobhandl",{"_index":8955,"t":{"3832":{"position":[[199,10],[312,10],[2788,10],[4549,10]]}}}],["jobid",{"_index":8644,"t":{"3762":{"position":[[272,5]]},"3768":{"position":[[447,5]]},"3770":{"position":[[451,5],[727,5],[1833,5],[3505,5],[3844,5],[5152,5],[5526,5]]},"3774":{"position":[[604,5]]},"3777":{"position":[[64,5]]},"3779":{"position":[[629,5],[983,5],[1542,5]]},"3783":{"position":[[473,5]]},"3785":{"position":[[108,5],[838,5],[1104,5],[1537,5]]},"3791":{"position":[[444,5],[1223,5],[1971,5]]},"3793":{"position":[[87,5]]},"3795":{"position":[[538,5]]},"3798":{"position":[[91,5]]},"3802":{"position":[[2240,5]]},"3806":{"position":[[3530,5]]},"3808":{"position":[[964,5],[2185,5]]},"3812":{"position":[[138,5],[1123,5],[1672,5],[2474,5]]},"3817":{"position":[[613,5],[1659,5]]},"3821":{"position":[[136,5],[439,5]]},"3828":{"position":[[382,5],[411,5],[588,5],[617,5],[721,5],[750,5]]},"3830":{"position":[[213,5]]},"3832":{"position":[[651,5]]},"3842":{"position":[[497,5],[1127,5],[1692,5],[1737,5],[2282,5],[2327,5],[2923,5],[3540,5]]},"3844":{"position":[[727,5],[789,5],[1390,5]]},"3846":{"position":[[3,5]]},"3896":{"position":[[61,5],[364,5]]}}}],["jobject",{"_index":9134,"t":{"3914":{"position":[[2722,7]]}}}],["jobnam",{"_index":6283,"t":{"2400":{"position":[[122,7],[150,7]]},"2402":{"position":[[192,7],[247,7]]},"2406":{"position":[[168,7],[464,7]]},"2411":{"position":[[157,7]]},"2413":{"position":[[157,7],[201,7]]},"2415":{"position":[[170,7]]},"2434":{"position":[[174,7],[500,7]]}}}],["jobname1",{"_index":6341,"t":{"2442":{"position":[[281,8],[1778,8]]},"2470":{"position":[[18,8]]},"2478":{"position":[[18,8]]}}}],["jobname2",{"_index":6343,"t":{"2442":{"position":[[513,8]]}}}],["jobname3",{"_index":6345,"t":{"2442":{"position":[[746,8]]}}}],["jobname4",{"_index":6347,"t":{"2442":{"position":[[1015,8]]}}}],["jobname5",{"_index":6348,"t":{"2442":{"position":[[1069,8],[1288,8]]}}}],["jobname6",{"_index":6351,"t":{"2442":{"position":[[1545,8]]}}}],["jobservic",{"_index":2839,"t":{"530":{"position":[[86,10],[152,10],[241,10],[260,10]]},"1039":{"position":[[86,10],[152,10],[241,10],[260,10]]},"2831":{"position":[[141,10]]}}}],["jobsofmodel",{"_index":8978,"t":{"3836":{"position":[[150,12],[272,12]]}}}],["jobtyp",{"_index":8716,"t":{"3770":{"position":[[487,7],[1869,7],[3527,7],[5179,7]]},"3777":{"position":[[106,7]]},"3779":{"position":[[671,7],[1019,7],[1465,7]]},"3785":{"position":[[144,7],[860,7],[1564,7]]},"3817":{"position":[[655,7],[1695,7]]},"3821":{"position":[[172,7]]},"3896":{"position":[[97,7]]}}}],["jobuild",{"_index":8925,"t":{"3817":{"position":[[238,9]]}}}],["jobwork",{"_index":6291,"t":{"2406":{"position":[[13,9]]},"2415":{"position":[[13,9]]},"2434":{"position":[[13,9]]},"2442":{"position":[[216,9]]}}}],["join",{"_index":2914,"t":{"556":{"position":[[40,4]]},"860":{"position":[[54,4]]},"862":{"position":[[54,4],[336,4],[349,4],[364,4]]},"864":{"position":[[6,4],[21,4]]},"866":{"position":[[336,4],[393,4]]},"1160":{"position":[[790,4],[1746,4]]},"1162":{"position":[[830,4],[1834,4]]},"1297":{"position":[[67,4]]},"1557":{"position":[[758,4],[834,4]]},"3096":{"position":[[105,4]]},"3104":{"position":[[75,4]]},"3118":{"position":[[12,4],[44,4],[74,4],[144,4],[221,4]]},"3218":{"position":[[356,4],[412,4]]},"3254":{"position":[[1391,4]]},"3263":{"position":[[294,4]]},"3275":{"position":[[316,4]]}}}],["joinqueryinfo",{"_index":7789,"t":{"3263":{"position":[[57,14]]}}}],["jointyp",{"_index":7790,"t":{"3263":{"position":[[73,8]]}}}],["joker",{"_index":4604,"t":{"1511":{"position":[[516,5]]}}}],["joyadmin",{"_index":1494,"t":{"199":{"position":[[548,8]]}}}],["jp",{"_index":6585,"t":{"2559":{"position":[[1493,2]]}}}],["jqueri",{"_index":2489,"t":{"419":{"position":[[3,6]]}}}],["js",{"_index":6193,"t":{"2341":{"position":[[34,2],[81,2]]},"3978":{"position":[[1811,2]]},"3996":{"position":[[1128,2]]}}}],["json",{"_index":1144,"t":{"152":{"position":[[266,4],[342,4],[353,4],[540,4],[616,4],[627,4]]},"220":{"position":[[37,4],[105,4],[157,4],[179,4],[264,4],[322,4],[538,4],[563,4],[834,4],[868,4]]},"270":{"position":[[95,4],[165,4]]},"272":{"position":[[40,4],[114,4]]},"274":{"position":[[40,4]]},"276":{"position":[[40,4]]},"278":{"position":[[40,4]]},"280":{"position":[[40,4]]},"282":{"position":[[40,4],[370,4]]},"288":{"position":[[40,4],[134,4],[143,4],[182,4],[266,4],[293,4]]},"290":{"position":[[40,4]]},"302":{"position":[[35,4]]},"306":{"position":[[47,4]]},"308":{"position":[[431,4],[459,4],[482,4]]},"325":{"position":[[64,4],[234,4]]},"327":{"position":[[47,4]]},"417":{"position":[[130,4]]},"427":{"position":[[17,4],[73,4],[129,4],[181,4]]},"429":{"position":[[94,4],[170,4],[206,4],[251,4]]},"433":{"position":[[95,4],[151,4],[172,4]]},"445":{"position":[[82,4],[149,4],[201,4],[770,4],[798,4],[898,4]]},"447":{"position":[[25,4]]},"449":{"position":[[12,4],[54,4],[134,4]]},"451":{"position":[[80,4],[115,4],[140,4],[168,4],[198,4],[224,4],[253,4]]},"453":{"position":[[53,4]]},"455":{"position":[[147,4],[565,4],[816,4],[1084,4]]},"498":{"position":[[29,4],[63,4]]},"508":{"position":[[140,4]]},"510":{"position":[[140,4]]},"516":{"position":[[163,4]]},"617":{"position":[[1437,4],[2527,4],[2564,4],[2702,4],[2844,4]]},"688":{"position":[[64,4],[93,4]]},"698":{"position":[[288,4]]},"893":{"position":[[29,4],[63,4]]},"1286":{"position":[[126,4],[148,4]]},"1313":{"position":[[39,4],[135,4],[245,4],[260,4],[300,4]]},"1422":{"position":[[105,4],[131,4]]},"1499":{"position":[[347,4],[385,4],[412,4]]},"1541":{"position":[[127,4]]},"1549":{"position":[[150,4]]},"1609":{"position":[[636,4]]},"1631":{"position":[[428,4]]},"1663":{"position":[[113,4]]},"1685":{"position":[[257,4]]},"1797":{"position":[[647,4],[677,4]]},"1801":{"position":[[316,4]]},"1803":{"position":[[2428,4]]},"1869":{"position":[[91,4],[662,4]]},"1871":{"position":[[67,4]]},"1877":{"position":[[39,4],[100,4],[127,4]]},"1887":{"position":[[496,4]]},"1981":{"position":[[106,4]]},"1993":{"position":[[106,4]]},"2016":{"position":[[114,4]]},"2069":{"position":[[17,4]]},"2071":{"position":[[10,4]]},"2073":{"position":[[10,4]]},"2075":{"position":[[14,4]]},"2077":{"position":[[43,4]]},"2341":{"position":[[0,4],[131,4],[190,4]]},"2343":{"position":[[17,4],[42,4],[60,4],[98,4],[113,4],[189,4],[208,4],[249,4]]},"2345":{"position":[[130,4],[512,4],[624,4],[699,4]]},"2348":{"position":[[82,4],[113,4],[499,4]]},"2352":{"position":[[32,4],[119,4],[157,4],[402,4]]},"2354":{"position":[[46,4],[68,4],[129,4]]},"2357":{"position":[[60,4],[84,4],[432,4],[491,4],[1039,4],[1158,4],[1243,4],[1357,4]]},"2359":{"position":[[12,4],[244,4],[419,4],[504,4],[644,4]]},"2361":{"position":[[12,4],[445,4],[467,4]]},"2363":{"position":[[12,4],[196,4],[263,4],[285,4]]},"2365":{"position":[[12,4],[156,4],[178,4]]},"2367":{"position":[[12,4],[162,4],[184,4]]},"2369":{"position":[[12,4],[182,4],[204,4]]},"2371":{"position":[[12,4],[189,4],[211,4]]},"2373":{"position":[[12,4],[170,4],[192,4],[248,4]]},"2375":{"position":[[68,4],[115,4],[164,4]]},"2379":{"position":[[86,4],[239,4],[393,4],[458,4],[960,4],[1045,4]]},"2381":{"position":[[69,4],[312,4]]},"2383":{"position":[[19,4],[195,4],[306,4],[330,4]]},"2385":{"position":[[27,4],[107,4]]},"2387":{"position":[[75,4]]},"2495":{"position":[[0,4],[18,4],[56,4]]},"2497":{"position":[[9,4],[62,4],[94,4],[171,4],[194,4],[208,4],[264,4]]},"2499":{"position":[[40,4],[87,4]]},"2501":{"position":[[15,4],[109,4],[205,4]]},"2503":{"position":[[87,4],[114,4]]},"2508":{"position":[[6,4],[41,4]]},"2512":{"position":[[91,4],[114,4]]},"2613":{"position":[[29,4],[62,4]]},"2653":{"position":[[243,4]]},"2729":{"position":[[45,4]]},"2735":{"position":[[52,4]]},"2751":{"position":[[16,4],[66,4],[108,4],[530,4]]},"2875":{"position":[[487,4],[669,4],[702,4],[728,4],[764,4],[1021,4],[1047,4],[1069,4]]},"2887":{"position":[[15,4]]},"2977":{"position":[[38,4],[60,4],[162,4]]},"2985":{"position":[[28,4],[80,4],[181,4],[223,4],[335,4]]},"2987":{"position":[[38,4],[60,4],[162,4]]},"2997":{"position":[[38,4],[60,4],[162,4]]},"3005":{"position":[[38,4],[60,4],[162,4]]},"3019":{"position":[[38,4],[60,4],[162,4]]},"3027":{"position":[[38,4],[60,4],[162,4]]},"3035":{"position":[[38,4],[60,4],[162,4]]},"3043":{"position":[[38,4],[60,4],[162,4]]},"3051":{"position":[[38,4],[60,4],[162,4]]},"3059":{"position":[[38,4],[60,4],[162,4]]},"3063":{"position":[[776,4],[822,4]]},"3211":{"position":[[93,4]]},"3321":{"position":[[317,4]]},"3339":{"position":[[292,4]]},"3399":{"position":[[673,4]]},"3430":{"position":[[1515,4],[1546,4],[3438,4],[3542,4],[3568,4]]},"3432":{"position":[[3412,4],[3895,4],[4126,4],[4243,4],[4269,4]]},"3434":{"position":[[2491,4],[2617,4],[2643,4]]},"3442":{"position":[[22,4],[53,4],[227,4]]},"3446":{"position":[[423,4],[489,4]]},"3448":{"position":[[741,4],[820,4],[1163,4]]},"3450":{"position":[[257,4]]},"3452":{"position":[[41,4],[195,4],[307,4],[879,4],[1036,4]]},"3468":{"position":[[48,4],[79,4]]},"3498":{"position":[[219,4]]},"3500":{"position":[[216,4],[345,4]]},"3502":{"position":[[64,4]]},"3506":{"position":[[27,4],[35,4],[54,4],[631,4],[650,4],[668,4]]},"3543":{"position":[[219,4]]},"3547":{"position":[[27,4],[35,4],[54,4],[638,4],[784,4],[801,4],[820,4],[838,4]]},"3575":{"position":[[279,4]]},"3581":{"position":[[282,4]]},"3583":{"position":[[387,4]]},"3601":{"position":[[1569,4],[1600,4]]},"3622":{"position":[[95,4]]},"3624":{"position":[[25,4],[156,4]]},"3640":{"position":[[514,4],[744,4],[773,4]]},"3642":{"position":[[27,4],[69,4]]},"3646":{"position":[[29,4]]},"3648":{"position":[[29,4]]},"3650":{"position":[[93,4]]},"3654":{"position":[[111,4]]},"3658":{"position":[[71,4]]},"3660":{"position":[[7,4],[60,4]]},"3662":{"position":[[39,4]]},"3670":{"position":[[59,4],[129,4],[215,4]]},"3696":{"position":[[43,4],[112,4],[146,4],[169,4]]},"3700":{"position":[[47,4]]},"3706":{"position":[[768,4],[814,4]]},"3722":{"position":[[142,4]]},"3770":{"position":[[31,4],[1236,4]]},"3779":{"position":[[531,4],[557,4],[574,4]]},"3785":{"position":[[49,4],[62,4]]},"3793":{"position":[[265,4]]},"3802":{"position":[[587,4],[613,4],[630,4]]},"3812":{"position":[[51,4],[64,4]]},"3817":{"position":[[486,4],[512,4],[529,4]]},"3821":{"position":[[55,4],[68,4]]},"3830":{"position":[[362,4]]},"3896":{"position":[[4,4]]},"3910":{"position":[[1388,4],[1489,4],[1524,4],[1549,4],[1602,4],[2169,4]]},"3912":{"position":[[1111,4],[2436,4],[2625,4],[2701,4]]},"3914":{"position":[[3407,4],[3433,4],[3585,4]]},"3916":{"position":[[921,4],[2165,4],[2839,4],[2944,4],[3055,4],[3176,4],[3207,4],[3228,4],[3875,4],[4032,4]]},"3920":{"position":[[1881,4]]},"3928":{"position":[[559,4]]},"3932":{"position":[[193,4],[202,4],[217,4],[606,4],[615,4],[630,4],[1183,4],[1422,4],[1435,4],[1495,4],[1563,4],[1582,4],[1687,4],[1895,4]]},"3938":{"position":[[573,4]]},"3940":{"position":[[671,4]]},"3954":{"position":[[165,4]]},"3956":{"position":[[93,4],[3111,4]]},"3962":{"position":[[1217,4],[1579,4]]},"3966":{"position":[[424,4],[474,4]]},"3970":{"position":[[369,4]]},"3978":{"position":[[113,4],[1424,4],[1645,4]]},"3980":{"position":[[116,4],[697,4]]},"3986":{"position":[[217,4],[245,4],[857,4],[969,4]]},"3990":{"position":[[579,4]]},"3992":{"position":[[574,4],[1642,4],[1912,4],[3532,4]]},"3996":{"position":[[577,4],[859,4],[1723,4]]},"4006":{"position":[[559,4],[594,4],[612,4]]}}}],["jsonbehavior",{"_index":8171,"t":{"3446":{"position":[[392,12]]},"3448":{"position":[[697,12]]},"3452":{"position":[[105,12],[135,12],[245,12],[275,12],[347,12],[377,12],[425,12],[444,12],[751,12],[823,12]]},"3456":{"position":[[124,12],[139,12]]},"3916":{"position":[[3292,12],[3322,12],[3371,12],[3401,12],[3428,12],[3447,12],[3747,12],[3819,12]]}}}],["jsoncommenthandl",{"_index":6244,"t":{"2369":{"position":[[136,19]]}}}],["jsonconvert",{"_index":2993,"t":{"570":{"position":[[2392,11]]},"1803":{"position":[[3744,11],[4473,11]]},"2357":{"position":[[829,11],[1210,11]]},"2379":{"position":[[814,11],[1012,11]]},"3914":{"position":[[977,11]]}}}],["jsondemo",{"_index":6212,"t":{"2348":{"position":[[236,8],[395,8]]}}}],["jsonel",{"_index":9628,"t":{"3950":{"position":[[55,11]]}}}],["jsonignor",{"_index":5523,"t":{"1797":{"position":[[652,10],[696,10]]},"2375":{"position":[[73,10],[134,10]]}}}],["jsonind",{"_index":8107,"t":{"3430":{"position":[[3618,12]]},"3432":{"position":[[4319,12]]},"3434":{"position":[[2693,12]]},"3446":{"position":[[458,12]]},"3448":{"position":[[777,12],[1121,12]]},"3452":{"position":[[166,12],[400,12]]},"3910":{"position":[[1418,12],[1465,12],[1586,12],[1702,12],[1823,12],[1954,12],[2041,12]]}}}],["jsonkey",{"_index":8182,"t":{"3450":{"position":[[293,7]]}}}],["jsonnamingpolici",{"_index":1953,"t":{"288":{"position":[[658,16]]}}}],["jsonopt",{"_index":8591,"t":{"3708":{"position":[[2895,11],[3105,11]]},"3956":{"position":[[2239,11],[2445,11]]}}}],["jsonp",{"_index":2458,"t":{"408":{"position":[[148,5]]}}}],["jsonpropertynam",{"_index":3189,"t":{"610":{"position":[[39,16],[129,16]]}}}],["jsonresult",{"_index":1950,"t":{"288":{"position":[[506,10]]},"1408":{"position":[[980,10]]},"1410":{"position":[[1005,10]]},"1933":{"position":[[798,10]]},"3708":{"position":[[1302,10],[1694,10],[2084,10]]},"3718":{"position":[[13,10],[49,10]]},"3720":{"position":[[83,10]]},"3956":{"position":[[943,10],[1238,10],[1552,10]]}}}],["jsonseri",{"_index":5570,"t":{"1801":{"position":[[1775,14],[2558,14]]},"2345":{"position":[[92,17]]},"2348":{"position":[[173,17],[313,14],[428,14],[447,14],[464,14]]},"2350":{"position":[[34,14]]},"2352":{"position":[[84,14],[367,14]]},"2354":{"position":[[137,14]]},"2357":{"position":[[396,17]]},"2848":{"position":[[1362,14],[1527,14]]},"3547":{"position":[[158,17],[314,17]]}}}],["jsonserializer2",{"_index":6215,"t":{"2348":{"position":[[371,15],[481,15]]}}}],["jsonserializeropt",{"_index":1951,"t":{"288":{"position":[[614,21]]},"2345":{"position":[[289,21],[383,21],[544,21],[637,21]]},"2352":{"position":[[289,21],[412,21]]},"2354":{"position":[[93,21],[199,21]]},"2357":{"position":[[689,21],[790,21],[865,21],[1071,21],[1171,21],[1250,21]]},"2359":{"position":[[92,21],[154,21],[554,21]]},"2361":{"position":[[132,21]]},"2363":{"position":[[92,21]]},"2365":{"position":[[92,21]]},"2367":{"position":[[92,21]]},"2369":{"position":[[92,21]]},"2371":{"position":[[92,21]]},"2373":{"position":[[92,21]]},"2379":{"position":[[166,21],[775,21],[850,21],[973,21],[1052,21]]},"2381":{"position":[[149,21],[227,21],[360,21],[438,21]]},"3506":{"position":[[524,21]]},"3547":{"position":[[432,21],[461,21],[561,21],[664,21],[719,21],[751,21]]},"3708":{"position":[[2911,21],[3121,21]]},"3720":{"position":[[260,21]]},"3722":{"position":[[101,21]]},"3956":{"position":[[2255,21],[2461,21]]}}}],["jsonserializerset",{"_index":6226,"t":{"2357":{"position":[[917,22],[1302,22]]},"2379":{"position":[[902,22],[1104,22]]},"3506":{"position":[[414,22]]},"3722":{"position":[[154,22]]}}}],["jsonserializerutil",{"_index":5959,"t":{"2079":{"position":[[10,21]]},"2081":{"position":[[10,21]]},"2083":{"position":[[14,21]]},"3986":{"position":[[346,21]]},"3994":{"position":[[1365,21]]}}}],["jsonstr",{"_index":8185,"t":{"3452":{"position":[[948,10]]},"3916":{"position":[[3944,10]]}}}],["jsonwebtoken",{"_index":1060,"t":{"133":{"position":[[235,13]]}}}],["jsonwriteropt",{"_index":9166,"t":{"3916":{"position":[[1080,17]]}}}],["juici",{"_index":9518,"t":{"3934":{"position":[[1926,5]]}}}],["june",{"_index":4796,"t":{"1511":{"position":[[2616,4],[2630,4],[3254,4],[3268,4]]}}}],["jwt",{"_index":536,"t":{"91":{"position":[[112,3]]},"112":{"position":[[1121,3]]},"114":{"position":[[669,3]]},"121":{"position":[[476,3],[480,3]]},"125":{"position":[[43,3]]},"127":{"position":[[774,3],[1345,3],[1650,3]]},"129":{"position":[[3,3]]},"133":{"position":[[296,3],[633,3]]},"146":{"position":[[275,3]]},"150":{"position":[[7,3]]},"152":{"position":[[15,3],[98,3],[127,3],[385,3],[414,3]]},"329":{"position":[[117,3]]},"1580":{"position":[[427,3]]},"1674":{"position":[[24,3]]},"1925":{"position":[[983,3]]},"2033":{"position":[[35,3]]},"3037":{"position":[[0,3],[12,3]]},"3189":{"position":[[257,3]]},"3446":{"position":[[1144,3]]},"3650":{"position":[[261,3],[330,3]]},"3912":{"position":[[1881,3]]},"3914":{"position":[[1165,3],[2957,3]]},"3920":{"position":[[1630,3]]},"3928":{"position":[[1706,3]]},"3930":{"position":[[559,3],[869,3]]},"3940":{"position":[[689,3]]},"3950":{"position":[[429,3]]},"3958":{"position":[[308,3]]},"3964":{"position":[[387,3]]},"3974":{"position":[[486,3]]},"3984":{"position":[[681,3]]},"3986":{"position":[[754,3]]},"3990":{"position":[[339,3],[414,3]]},"3992":{"position":[[2133,3],[3900,3]]},"3994":{"position":[[520,3]]},"4000":{"position":[[343,3],[765,3]]},"4004":{"position":[[507,3]]}}}],["jwtbearer",{"_index":535,"t":{"91":{"position":[[95,9]]},"127":{"position":[[32,9]]},"1683":{"position":[[370,9]]},"3990":{"position":[[379,9]]}}}],["jwtbearerdefault",{"_index":1045,"t":{"129":{"position":[[394,17],[471,17]]}}}],["jwtencrypt",{"_index":1026,"t":{"127":{"position":[[1668,13],[1793,13]]},"144":{"position":[[34,13],[123,13],[285,13]]},"146":{"position":[[562,13]]},"1683":{"position":[[12,13],[145,13],[235,13],[289,13]]},"2132":{"position":[[30,13],[134,13],[240,13],[359,13]]},"2134":{"position":[[19,13]]},"2136":{"position":[[15,13]]},"2138":{"position":[[0,13]]},"2140":{"position":[[45,13]]},"2142":{"position":[[14,13]]},"2144":{"position":[[16,13],[94,13]]},"3918":{"position":[[3909,13]]},"3930":{"position":[[213,13]]},"3966":{"position":[[574,13]]},"4000":{"position":[[210,13]]}}}],["jwthandler",{"_index":958,"t":{"127":{"position":[[244,10],[360,10],[551,10]]},"133":{"position":[[71,10],[338,10],[1115,10],[1146,10]]},"135":{"position":[[266,10]]},"139":{"position":[[16,10]]},"146":{"position":[[317,10]]},"3992":{"position":[[2407,10]]}}}],["jwtset",{"_index":975,"t":{"127":{"position":[[792,11]]},"3039":{"position":[[0,11]]},"3041":{"position":[[3,11]]},"3932":{"position":[[1166,11]]},"3972":{"position":[[147,11],[564,11]]}}}],["k",{"_index":2043,"t":{"310":{"position":[[465,1],[486,1],[506,1],[517,1]]}}}],["k3",{"_index":630,"t":{"102":{"position":[[49,3],[254,3]]}}}],["k8",{"_index":629,"t":{"102":{"position":[[45,3],[250,3]]}}}],["ka",{"_index":6556,"t":{"2559":{"position":[[1187,2],[1196,2]]}}}],["kabi",{"_index":1357,"t":{"190":{"position":[[135,4]]}}}],["kafka",{"_index":5529,"t":{"1799":{"position":[[65,5]]},"1803":{"position":[[16,5],[52,5],[113,5],[161,5],[2381,5],[2508,5]]},"3918":{"position":[[4128,5]]}}}],["kafkaeventsourcestor",{"_index":5606,"t":{"1803":{"position":[[2336,21],[2546,21],[3183,21],[5569,22],[5598,21],[5734,22]]}}}],["kaneleung",{"_index":9615,"t":{"3946":{"position":[[476,9]]}}}],["kazakh",{"_index":6590,"t":{"2559":{"position":[[1529,6],[1542,6]]}}}],["kb",{"_index":5380,"t":{"1741":{"position":[[398,2],[1280,2]]}}}],["ke",{"_index":6674,"t":{"2559":{"position":[[2421,2]]},"3704":{"position":[[879,2],[932,2]]},"3924":{"position":[[4419,2],[4472,2]]}}}],["keep",{"_index":6982,"t":{"2768":{"position":[[1281,4]]}}}],["keep_wan",{"_index":6981,"t":{"2768":{"position":[[1281,8]]}}}],["keepalivetimeout",{"_index":5209,"t":{"1667":{"position":[[270,16],[498,16]]}}}],["keepnam",{"_index":1678,"t":{"231":{"position":[[384,8]]},"1625":{"position":[[92,8]]},"1637":{"position":[[62,8]]},"1641":{"position":[[34,8]]},"1645":{"position":[[0,8],[122,8],[220,8]]},"1647":{"position":[[368,8],[402,8]]},"1661":{"position":[[268,8]]},"3023":{"position":[[269,8]]},"3944":{"position":[[704,8]]},"3994":{"position":[[927,8]]}}}],["keepverb",{"_index":5152,"t":{"1625":{"position":[[110,8]]},"1641":{"position":[[112,8]]},"1649":{"position":[[0,8],[179,8]]},"1661":{"position":[[236,8]]},"3023":{"position":[[237,8]]},"3994":{"position":[[936,8]]}}}],["keepwan",{"_index":6983,"t":{"2768":{"position":[[1313,7]]}}}],["kellyn",{"_index":6924,"t":{"2768":{"position":[[329,8]]}}}],["keni",{"_index":4870,"t":{"1511":{"position":[[3792,4]]}}}],["kestrel",{"_index":645,"t":{"102":{"position":[[185,7]]},"1747":{"position":[[10,7]]},"1755":{"position":[[539,7],[585,7],[1052,7],[1075,7]]}}}],["key",{"_index":1741,"t":{"237":{"position":[[1074,3]]},"282":{"position":[[338,3]]},"369":{"position":[[250,3],[406,3]]},"417":{"position":[[298,3],[339,3]]},"512":{"position":[[97,3]]},"516":{"position":[[516,3]]},"617":{"position":[[2712,3],[2756,3]]},"696":{"position":[[678,3],[780,3]]},"698":{"position":[[104,3],[318,3]]},"734":{"position":[[6345,3]]},"747":{"position":[[926,3]]},"866":{"position":[[232,3],[248,3],[510,3]]},"1060":{"position":[[303,3]]},"1286":{"position":[[106,3]]},"1313":{"position":[[598,3],[670,3]]},"1557":{"position":[[854,4]]},"1681":{"position":[[18,3],[116,3],[170,3]]},"1801":{"position":[[3333,3]]},"1803":{"position":[[5546,3]]},"2023":{"position":[[155,3]]},"2735":{"position":[[62,3],[402,3],[415,3],[444,3]]},"2846":{"position":[[73,3],[215,3],[286,3]]},"2848":{"position":[[951,3],[1012,3],[1074,3],[1136,3],[1191,3],[1323,3],[1357,3],[1451,3],[1488,3]]},"2850":{"position":[[40,3]]},"2852":{"position":[[111,3],[143,3],[194,3]]},"2971":{"position":[[154,3]]},"3236":{"position":[[346,3]]},"3466":{"position":[[776,3],[1640,3]]},"3539":{"position":[[69,3]]},"3783":{"position":[[1357,3],[1418,3],[1478,3],[1585,3],[1655,3],[1692,3]]},"3912":{"position":[[1663,3],[1754,3]]},"3914":{"position":[[3227,3]]},"3930":{"position":[[1086,3]]},"3936":{"position":[[25,3],[46,3],[1560,3]]},"3952":{"position":[[637,3]]},"3978":{"position":[[1183,3]]}}}],["key1",{"_index":8328,"t":{"3539":{"position":[[94,4]]},"3783":{"position":[[1507,4],[1622,4],[1714,4]]}}}],["key2",{"_index":5921,"t":{"2023":{"position":[[159,4]]},"3539":{"position":[[227,4]]}}}],["keyderiv",{"_index":5249,"t":{"1685":{"position":[[342,13],[466,13]]}}}],["keyderivationprf",{"_index":5251,"t":{"1685":{"position":[[382,16]]}}}],["keymetr",{"_index":6868,"t":{"2740":{"position":[[156,10]]},"2764":{"position":[[136,10]]},"3080":{"position":[[45,10]]},"3082":{"position":[[349,10]]}}}],["keyvaluepair",{"_index":1927,"t":{"282":{"position":[[269,12]]},"1803":{"position":[[904,12]]}}}],["keyword",{"_index":3653,"t":{"853":{"position":[[446,7],[533,7]]},"1024":{"position":[[96,7]]},"1109":{"position":[[557,7]]},"1229":{"position":[[70,7]]},"1633":{"position":[[319,7]]}}}],["khellang",{"_index":4344,"t":{"1440":{"position":[[972,8]]}}}],["khtml",{"_index":786,"t":{"114":{"position":[[477,5]]},"3446":{"position":[[952,5]]},"3452":{"position":[[1609,5]]},"3916":{"position":[[4605,5]]},"3928":{"position":[[1514,5]]}}}],["kibana",{"_index":8142,"t":{"3432":{"position":[[3430,6],[3918,6]]}}}],["kind",{"_index":8552,"t":{"3702":{"position":[[2559,4]]}}}],["kk",{"_index":6589,"t":{"2559":{"position":[[1526,2],[1536,2]]}}}],["kn",{"_index":6586,"t":{"2559":{"position":[[1503,2],[1511,2]]}}}],["knife4jui",{"_index":8561,"t":{"3704":{"position":[[59,9],[123,9],[137,9],[510,9]]},"3924":{"position":[[3579,9],[3651,9],[3671,9],[4050,9]]}}}],["knife4ui",{"_index":8564,"t":{"3704":{"position":[[294,8],[604,8]]},"3924":{"position":[[3828,8],[4144,8]]}}}],["ko",{"_index":6595,"t":{"2559":{"position":[[1583,2],[1589,2]]}}}],["kok",{"_index":6593,"t":{"2559":{"position":[[1553,3],[1565,3]]}}}],["konkani",{"_index":6594,"t":{"2559":{"position":[[1557,7],[1572,7]]}}}],["kr",{"_index":6597,"t":{"2559":{"position":[[1592,2]]}}}],["kw",{"_index":6444,"t":{"2559":{"position":[[144,2]]}}}],["ky",{"_index":6598,"t":{"2559":{"position":[[1602,2],[1612,2]]}}}],["kyrgyz",{"_index":6599,"t":{"2559":{"position":[[1605,6],[1618,6]]}}}],["kz",{"_index":6591,"t":{"2559":{"position":[[1539,2],[1615,2]]}}}],["l",{"_index":2669,"t":{"482":{"position":[[162,1],[231,1],[694,1]]},"2147":{"position":[[19,1]]},"2149":{"position":[[11,1]]},"2151":{"position":[[0,1]]},"2153":{"position":[[11,1]]},"2155":{"position":[[11,1]]},"2418":{"position":[[390,1],[495,1],[1010,1]]},"2420":{"position":[[1374,1],[1926,1],[1971,1]]},"2526":{"position":[[14,1],[41,1],[60,1],[92,1],[119,1],[150,1]]},"2528":{"position":[[20,1]]},"2530":{"position":[[28,1],[63,1],[104,1]]},"2532":{"position":[[125,1],[246,1]]},"2534":{"position":[[58,1]]},"2536":{"position":[[175,1]]},"2538":{"position":[[46,1],[332,1],[380,1],[413,1],[460,1],[519,1],[562,1],[595,1],[637,1]]},"2540":{"position":[[42,1]]},"2544":{"position":[[91,1]]},"2547":{"position":[[24,1]]},"2559":{"position":[[1798,1]]},"3601":{"position":[[112,1],[225,1],[340,1],[454,1],[575,1],[681,1],[832,1],[987,1],[1132,1],[1283,1],[1432,1]]},"3762":{"position":[[567,1],[678,1],[789,1],[900,1],[1010,1],[1121,1]]},"3764":{"position":[[176,1],[288,1],[401,1],[514,1],[627,1],[740,1]]},"3766":{"position":[[349,1],[455,1],[560,1],[665,1],[770,1],[879,1],[985,1],[1100,1],[1206,1],[1321,1],[1436,1],[1541,1],[1647,1]]},"3768":{"position":[[637,1],[747,1],[942,1],[1137,1],[1247,1],[1442,1],[1637,1],[1748,1],[1944,1],[2140,1],[2251,1],[2653,1],[2763,1],[2873,1],[2984,1],[3095,1]]},"3770":{"position":[[419,1],[1816,1],[2109,1],[3470,1],[3769,1],[3906,1],[5091,1],[5418,1]]},"3772":{"position":[[601,1],[730,1],[877,1],[982,1],[1098,1],[1215,1],[1332,1],[1449,1],[1566,1],[1683,1],[1789,1],[1906,1],[2023,1]]},"3774":{"position":[[761,1],[867,1],[975,1],[1081,1],[1196,1],[1302,1],[1417,1],[1531,1],[1637,1]]},"3783":{"position":[[639,1],[759,1],[879,1],[1000,1],[1121,1]]},"3806":{"position":[[455,1],[598,1],[741,1],[884,1],[1028,1],[1171,1],[1860,1],[2002,1],[2144,1],[2286,1],[2428,1],[2570,1],[3688,1],[3812,1]]},"3808":{"position":[[1122,1],[1240,1],[1358,1],[1479,1],[1600,1],[2343,1],[2467,1],[2591,1],[2715,1],[2839,1]]},"3828":{"position":[[990,1],[1095,1],[1213,1]]},"3832":{"position":[[1053,1],[1159,1],[1279,1],[1399,1],[1519,1],[1639,1],[3233,1],[3339,1]]},"3842":{"position":[[310,1],[454,1],[940,1],[1084,1],[1505,1],[1649,1],[2095,1],[2239,1],[2736,1],[2880,1],[3353,1],[3497,1]]},"3844":{"position":[[316,1],[463,1],[586,1]]},"3846":{"position":[[556,1],[702,1],[825,1]]},"3850":{"position":[[142,1],[317,1]]},"3852":{"position":[[142,1],[261,1],[435,1]]},"3854":{"position":[[144,1],[263,1],[409,1]]},"3856":{"position":[[158,1]]},"3874":{"position":[[75,1],[250,1]]},"3876":{"position":[[75,1],[193,1],[367,1]]},"3912":{"position":[[2080,1]]},"3966":{"position":[[1720,1]]}}}],["lake",{"_index":1358,"t":{"190":{"position":[[140,4]]}}}],["lambda",{"_index":3622,"t":{"836":{"position":[[28,6]]},"846":{"position":[[48,6]]},"3218":{"position":[[5,6]]},"3222":{"position":[[5,6]]},"3452":{"position":[[3356,6]]},"3916":{"position":[[6352,6]]}}}],["lambda_method103",{"_index":8219,"t":{"3452":{"position":[[3356,16]]},"3916":{"position":[[6352,16]]}}}],["lambdaexpress",{"_index":3641,"t":{"846":{"position":[[954,16]]}}}],["lang",{"_index":6410,"t":{"2542":{"position":[[48,4],[64,4],[135,4]]},"2553":{"position":[[207,4]]},"2555":{"position":[[93,4],[113,4],[133,4],[153,4]]},"3031":{"position":[[207,4]]},"3194":{"position":[[199,4]]},"3956":{"position":[[3163,4]]}}}],["languag",{"_index":6386,"t":{"2512":{"position":[[96,8]]}}}],["languagefileprefix",{"_index":6414,"t":{"2542":{"position":[[198,18]]},"2553":{"position":[[166,18]]},"3031":{"position":[[166,18]]}}}],["langvers",{"_index":6089,"t":{"2298":{"position":[[78,11],[96,11],[172,11],[190,11],[247,11],[267,11]]}}}],["laozhang",{"_index":7926,"t":{"3331":{"position":[[58,8]]}}}],["larg",{"_index":5404,"t":{"1747":{"position":[[106,5]]}}}],["last",{"_index":3820,"t":{"956":{"position":[[321,4],[689,4]]},"3770":{"position":[[2350,4],[4171,4]]},"3812":{"position":[[1944,4]]}}}],["last_run_tim",{"_index":8744,"t":{"3770":{"position":[[2350,13],[4171,13]]},"3812":{"position":[[1944,13]]}}}],["lastasync",{"_index":3829,"t":{"956":{"position":[[1172,9],[1595,9]]}}}],["lastnam",{"_index":6801,"t":{"2684":{"position":[[227,8]]},"2690":{"position":[[228,8]]}}}],["lastordefault",{"_index":3821,"t":{"956":{"position":[[383,13],[761,13]]},"2472":{"position":[[163,13]]}}}],["lastordefaultasync",{"_index":3830,"t":{"956":{"position":[[1245,18],[1678,18]]}}}],["lastruntim",{"_index":8725,"t":{"3770":{"position":[[915,11],[5687,11]]},"3798":{"position":[[358,11]]},"3802":{"position":[[913,11],[1536,11],[2253,11],[2577,11]]},"3812":{"position":[[321,11],[1220,11],[2632,11]]},"3817":{"position":[[1124,11],[2128,11]]},"3821":{"position":[[620,11]]},"3896":{"position":[[545,11]]}}}],["lasttask",{"_index":8234,"t":{"3452":{"position":[[3904,8]]},"3916":{"position":[[6900,8]]}}}],["later",{"_index":3094,"t":{"587":{"position":[[1267,5]]}}}],["latest",{"_index":6090,"t":{"2298":{"position":[[259,6]]},"2742":{"position":[[100,6]]},"3080":{"position":[[186,6]]}}}],["latn",{"_index":6471,"t":{"2559":{"position":[[402,4],[2020,4],[2708,4]]}}}],["launchbrows",{"_index":7157,"t":{"2875":{"position":[[824,13]]}}}],["launchset",{"_index":4980,"t":{"1541":{"position":[[112,14]]},"1981":{"position":[[91,14]]},"1993":{"position":[[91,14]]},"2016":{"position":[[99,14]]},"2875":{"position":[[654,14],[687,14],[749,14],[1006,14]]}}}],["launchurl",{"_index":5914,"t":{"1981":{"position":[[113,9]]},"1993":{"position":[[113,9]]},"2016":{"position":[[121,9]]},"2875":{"position":[[847,9]]}}}],["layui",{"_index":1467,"t":{"199":{"position":[[124,5],[183,5],[495,5]]}}}],["lazi",{"_index":6104,"t":{"2309":{"position":[[46,4]]}}}],["lazier",{"_index":473,"t":{"85":{"position":[[84,6]]}}}],["lb",{"_index":6446,"t":{"2559":{"position":[[160,2]]}}}],["learn",{"_index":8542,"t":{"3702":{"position":[[1924,5]]}}}],["left",{"_index":2913,"t":{"556":{"position":[[35,4]]},"862":{"position":[[331,4],[359,4]]},"864":{"position":[[16,4]]},"1160":{"position":[[785,4],[1741,4]]},"1162":{"position":[[825,4],[1829,4]]},"1297":{"position":[[62,4]]},"3218":{"position":[[351,4],[407,4]]},"3263":{"position":[[82,4],[289,4]]}}}],["leftjoin",{"_index":7625,"t":{"3218":{"position":[[49,8],[102,8]]}}}],["legacyrunopt",{"_index":2257,"t":{"350":{"position":[[39,16]]},"2897":{"position":[[25,16],[128,16],[228,16],[345,16]]},"2903":{"position":[[157,16],[258,16],[288,16]]},"2905":{"position":[[423,16]]},"3924":{"position":[[2401,16],[2431,16]]}}}],["length",{"_index":290,"t":{"19":{"position":[[295,6],[351,6]]},"639":{"position":[[285,6]]},"1557":{"position":[[718,6]]},"1635":{"position":[[413,6],[431,6],[444,6]]},"1729":{"position":[[129,6],[191,6]]},"1741":{"position":[[373,6],[1255,6],[2035,6],[2105,6]]},"1743":{"position":[[139,6]]},"2333":{"position":[[268,6]]}}}],["less",{"_index":10348,"t":{"3994":{"position":[[1113,4]]}}}],["level",{"_index":5828,"t":{"1909":{"position":[[998,5]]},"3430":{"position":[[1561,5]]},"3748":{"position":[[113,5],[126,5],[155,5],[163,5],[192,5],[230,5],[250,5],[270,5]]}}}],["level1",{"_index":6707,"t":{"2573":{"position":[[10,6],[81,6],[159,6]]}}}],["level1app",{"_index":6708,"t":{"2573":{"position":[[19,9],[34,9],[112,9]]}}}],["level2a",{"_index":6709,"t":{"2573":{"position":[[50,7],[88,7]]}}}],["level2aapp",{"_index":6710,"t":{"2573":{"position":[[60,10]]}}}],["level2b",{"_index":6711,"t":{"2573":{"position":[[128,7],[166,7]]}}}],["level2bapp",{"_index":6712,"t":{"2573":{"position":[[138,10]]}}}],["li",{"_index":6563,"t":{"2559":{"position":[[1251,2]]},"2768":{"position":[[1002,2],[1209,2]]}}}],["lian",{"_index":6941,"t":{"2768":{"position":[[655,4]]}}}],["lib",{"_index":4397,"t":{"1483":{"position":[[203,3]]}}}],["licens",{"_index":7341,"t":{"3063":{"position":[[1700,7]]},"3065":{"position":[[283,7],[366,7]]},"3642":{"position":[[357,7],[440,7]]},"3702":{"position":[[1990,7],[2066,7],[2157,7],[2178,7],[2263,8],[2475,7]]},"3706":{"position":[[1711,7],[2031,7],[2114,7]]}}}],["lifetim",{"_index":1632,"t":{"220":{"position":[[672,8]]},"688":{"position":[[231,8]]},"734":{"position":[[1235,8],[2089,8],[2943,8],[3938,8],[4792,8],[5646,8]]},"2501":{"position":[[308,8]]},"2887":{"position":[[149,8]]},"3430":{"position":[[107,8],[185,8],[262,8],[346,8],[415,8],[1774,8],[2612,8],[2743,8],[2873,8],[2994,8],[3100,8],[3955,8],[4068,8],[4180,8],[4299,8],[4403,8]]},"3432":{"position":[[2829,8],[2950,8],[3056,8],[5172,8],[5285,8],[5397,8],[5516,8],[5620,8]]},"3601":{"position":[[245,8],[360,8],[474,8],[595,8],[701,8]]},"3932":{"position":[[1790,8]]}}}],["limit",{"_index":4030,"t":{"1160":{"position":[[376,5],[1288,5]]},"1162":{"position":[[392,5],[1352,5]]},"1667":{"position":[[263,6],[322,6],[491,6],[545,6]]},"1755":{"position":[[698,6],[903,6]]},"3120":{"position":[[15,5]]},"3702":{"position":[[2610,7]]}}}],["line",{"_index":8217,"t":{"3452":{"position":[[3341,4]]},"3832":{"position":[[1976,4],[2145,4],[2448,4],[2701,4],[2908,4],[3122,4],[3737,4],[3906,4],[4209,4],[4462,4],[4669,4],[4883,4]]},"3916":{"position":[[6337,4]]}}}],["lingerm",{"_index":5632,"t":{"1803":{"position":[[5489,8]]}}}],["linhuiy",{"_index":6938,"t":{"2768":{"position":[[602,7]]}}}],["link",{"_index":2286,"t":{"359":{"position":[[74,5],[335,5],[384,5]]},"1499":{"position":[[771,4]]}}}],["linkcompon",{"_index":2311,"t":{"367":{"position":[[201,14]]}}}],["linq",{"_index":224,"t":{"13":{"position":[[250,4]]},"570":{"position":[[230,4]]},"818":{"position":[[18,4]]},"826":{"position":[[18,4]]},"832":{"position":[[101,4]]},"836":{"position":[[375,4]]},"846":{"position":[[312,4],[990,4],[1048,4]]},"879":{"position":[[60,4],[118,4]]},"1037":{"position":[[735,4]]},"1566":{"position":[[446,4]]},"2296":{"position":[[250,4]]},"2694":{"position":[[27,4]]},"2937":{"position":[[287,4]]},"3218":{"position":[[0,4]]},"3222":{"position":[[0,4]]}}}],["linqexpress",{"_index":5999,"t":{"2165":{"position":[[17,14],[77,14]]},"2167":{"position":[[32,14],[72,14],[117,14],[156,14]]},"3984":{"position":[[797,14]]}}}],["linux",{"_index":624,"t":{"102":{"position":[[13,5]]},"433":{"position":[[131,5]]},"1483":{"position":[[390,5]]},"1503":{"position":[[78,5]]},"1518":{"position":[[7,5]]},"2480":{"position":[[65,5]]},"2803":{"position":[[77,5],[143,5],[187,5]]},"2809":{"position":[[109,5]]},"2836":{"position":[[41,5],[1290,5],[1855,5]]},"3080":{"position":[[521,5]]},"3918":{"position":[[3618,5],[3645,5]]}}}],["lionkon",{"_index":4594,"t":{"1511":{"position":[[413,7]]}}}],["lis2t",{"_index":7711,"t":{"3234":{"position":[[542,5]]}}}],["list",{"_index":272,"t":{"19":{"position":[[70,4]]},"520":{"position":[[320,4]]},"560":{"position":[[17,4]]},"649":{"position":[[86,4],[271,4]]},"651":{"position":[[92,4],[286,4]]},"769":{"position":[[466,4]]},"877":{"position":[[1371,4],[2376,4]]},"881":{"position":[[180,4]]},"901":{"position":[[348,4]]},"1024":{"position":[[18,4],[188,4]]},"1064":{"position":[[804,4]]},"1066":{"position":[[1348,4],[1503,4]]},"1109":{"position":[[526,4]]},"1115":{"position":[[25,4],[121,4],[181,4],[277,4],[374,4]]},"1129":{"position":[[811,4],[823,4],[880,4],[892,4],[992,4],[1004,4],[1116,4],[1128,4],[1188,4],[1200,4],[1297,4],[1309,4],[1369,4],[1381,4],[1479,4],[1491,4],[1548,4],[1560,4]]},"1145":{"position":[[363,4]]},"1147":{"position":[[254,4]]},"1151":{"position":[[332,4]]},"1185":{"position":[[934,4],[948,4],[1005,4],[1019,4],[1330,4],[1344,4],[1412,4],[1426,4]]},"1229":{"position":[[18,4]]},"1236":{"position":[[196,4],[331,4],[471,4],[603,4],[730,4]]},"1240":{"position":[[244,4],[257,4],[440,4],[453,4],[619,4],[632,4],[791,4],[804,4],[968,4],[981,4],[995,4],[1134,4],[1185,4]]},"1253":{"position":[[134,4],[200,4],[261,4]]},"1257":{"position":[[135,4],[149,4],[215,4],[229,4],[290,4],[304,4],[426,4],[477,4]]},"1263":{"position":[[323,4],[337,4]]},"1267":{"position":[[203,4]]},"1269":{"position":[[123,4]]},"1273":{"position":[[123,4]]},"1275":{"position":[[248,4]]},"1279":{"position":[[306,4],[450,4]]},"1295":{"position":[[191,4]]},"1315":{"position":[[348,4]]},"1349":{"position":[[86,4],[271,4]]},"1351":{"position":[[92,4],[286,4]]},"1368":{"position":[[575,4],[610,4],[679,4]]},"1483":{"position":[[211,5]]},"1528":{"position":[[2,4],[11,4],[20,4],[35,4]]},"1741":{"position":[[1686,4],[1801,4],[2473,4]]},"2153":{"position":[[4,4]]},"2155":{"position":[[4,4]]},"2607":{"position":[[193,4],[296,4],[616,4],[706,4]]},"2929":{"position":[[389,4]]},"2945":{"position":[[389,4]]},"2959":{"position":[[389,4]]},"3063":{"position":[[312,4],[321,4]]},"3215":{"position":[[188,4]]},"3222":{"position":[[192,4]]},"3224":{"position":[[770,4],[810,4]]},"3226":{"position":[[43,4]]},"3232":{"position":[[132,4]]},"3254":{"position":[[295,4],[342,4]]},"3263":{"position":[[4,4]]},"3267":{"position":[[11,4],[142,4]]},"3273":{"position":[[12,4],[188,4],[604,4],[642,4],[648,4]]},"3323":{"position":[[529,4]]},"3620":{"position":[[211,4]]},"3646":{"position":[[134,4]]},"3706":{"position":[[304,4],[313,4]]},"3932":{"position":[[2066,4],[2361,4],[2412,4]]},"3986":{"position":[[1371,4]]},"3996":{"position":[[1370,4]]}}}],["list1",{"_index":3969,"t":{"1117":{"position":[[91,5],[174,5],[268,5],[372,5],[486,5],[610,5],[744,5],[888,5],[1118,5],[1169,5],[1228,5],[1294,5],[1367,5],[1447,5],[1534,5],[1628,5],[1776,5],[1862,5],[1959,5],[2066,5],[2183,5],[2310,5],[2447,5],[2594,5],[2809,5],[2895,5],[2992,5],[3099,5],[3216,5],[3343,5],[3480,5],[3627,5],[3843,5],[3912,5],[3992,5],[4082,5],[4182,5],[4292,5],[4412,5],[4542,5]]},"1129":{"position":[[1714,5]]}}}],["list2",{"_index":3970,"t":{"1117":{"position":[[181,5],[275,5],[379,5],[493,5],[617,5],[751,5],[895,5],[1176,5],[1235,5],[1301,5],[1374,5],[1454,5],[1541,5],[1635,5],[1869,5],[1966,5],[2073,5],[2190,5],[2317,5],[2454,5],[2601,5],[2902,5],[2999,5],[3106,5],[3223,5],[3350,5],[3487,5],[3634,5],[3919,5],[3999,5],[4089,5],[4189,5],[4299,5],[4419,5],[4549,5]]},"1129":{"position":[[1720,5]]},"3232":{"position":[[23,5]]},"3261":{"position":[[477,5]]}}}],["list3",{"_index":3972,"t":{"1117":{"position":[[282,5],[386,5],[500,5],[624,5],[758,5],[902,5],[1242,5],[1308,5],[1381,5],[1461,5],[1548,5],[1642,5],[1973,5],[2080,5],[2197,5],[2324,5],[2461,5],[2608,5],[3006,5],[3113,5],[3230,5],[3357,5],[3494,5],[3641,5],[4006,5],[4096,5],[4196,5],[4306,5],[4426,5],[4556,5]]}}}],["list4",{"_index":3975,"t":{"1117":{"position":[[393,5],[507,5],[631,5],[765,5],[909,5],[1315,5],[1388,5],[1468,5],[1555,5],[1649,5],[2087,5],[2204,5],[2331,5],[2468,5],[2615,5],[3120,5],[3237,5],[3364,5],[3501,5],[3648,5],[4103,5],[4203,5],[4313,5],[4433,5],[4563,5]]}}}],["list5",{"_index":3978,"t":{"1117":{"position":[[514,5],[638,5],[772,5],[916,5],[1395,5],[1475,5],[1562,5],[1656,5],[2211,5],[2338,5],[2475,5],[2622,5],[3244,5],[3371,5],[3508,5],[3655,5],[4210,5],[4320,5],[4440,5],[4570,5]]}}}],["list6",{"_index":3981,"t":{"1117":{"position":[[645,5],[779,5],[923,5],[1482,5],[1569,5],[1663,5],[2345,5],[2482,5],[2629,5],[3378,5],[3515,5],[3662,5],[4327,5],[4447,5],[4577,5]]}}}],["list7",{"_index":3984,"t":{"1117":{"position":[[786,5],[930,5],[1576,5],[1670,5],[2489,5],[2636,5],[3522,5],[3669,5],[4454,5],[4584,5]]}}}],["list8",{"_index":3987,"t":{"1117":{"position":[[937,5],[1677,5],[2643,5],[3676,5],[4591,5]]}}}],["listen",{"_index":8084,"t":{"3430":{"position":[[124,9],[202,9],[2648,9],[2779,9],[3975,9],[4088,9]]},"3432":{"position":[[5192,9],[5305,9]]},"3601":{"position":[[265,9],[380,9]]}}}],["listeningonaddress",{"_index":8097,"t":{"3430":{"position":[[2621,18],[2752,18]]}}}],["littleendianbinary16format",{"_index":6164,"t":{"2331":{"position":[[106,26],[674,26]]}}}],["liudank",{"_index":9095,"t":{"3912":{"position":[[2763,7]]}}}],["liupan",{"_index":4779,"t":{"1511":{"position":[[2420,6]]}}}],["live",{"_index":7482,"t":{"3136":{"position":[[188,4]]}}}],["lo",{"_index":4785,"t":{"1511":{"position":[[2515,2]]}}}],["load",{"_index":2218,"t":{"340":{"position":[[268,4],[656,4],[890,4],[1117,4]]},"344":{"position":[[339,4],[420,4]]},"346":{"position":[[401,4],[504,4]]},"348":{"position":[[365,4],[449,4]]},"353":{"position":[[257,4]]},"365":{"position":[[23,4]]},"369":{"position":[[592,4]]},"371":{"position":[[165,4],[382,4]]},"2879":{"position":[[539,4]]},"3162":{"position":[[336,6]]},"3430":{"position":[[1187,4],[2319,4]]},"3744":{"position":[[436,4]]},"3920":{"position":[[908,4]]}}}],["loadfrom",{"_index":8804,"t":{"3779":{"position":[[1567,8],[1637,8],[1735,8]]},"3802":{"position":[[2324,8],[2402,8],[2510,8]]}}}],["local",{"_index":4911,"t":{"1516":{"position":[[93,5]]},"1549":{"position":[[567,5]]},"2510":{"position":[[53,5]]},"2532":{"position":[[14,12]]},"2551":{"position":[[114,9],[183,9],[269,9]]},"2557":{"position":[[94,12],[141,12]]},"3914":{"position":[[855,5]]}}}],["localdb",{"_index":1809,"t":{"247":{"position":[[319,7]]}}}],["localhost",{"_index":774,"t":{"114":{"position":[[317,9],[375,9]]},"220":{"position":[[382,9]]},"314":{"position":[[715,9]]},"316":{"position":[[654,9]]},"413":{"position":[[178,9]]},"419":{"position":[[47,9],[399,9]]},"520":{"position":[[49,9],[171,9]]},"688":{"position":[[383,9]]},"901":{"position":[[49,9],[171,9]]},"1054":{"position":[[413,9]]},"1056":{"position":[[700,9]]},"1315":{"position":[[49,9],[171,9]]},"1745":{"position":[[353,9]]},"2603":{"position":[[109,9]]},"2745":{"position":[[153,9]]},"2747":{"position":[[156,9]]},"2749":{"position":[[869,9]]},"2875":{"position":[[72,9],[156,9],[214,9],[350,9],[418,9],[443,9],[890,9],[912,9],[1092,9]]},"2929":{"position":[[503,9],[675,9]]},"2945":{"position":[[503,9],[732,9]]},"2959":{"position":[[503,9],[701,9]]},"2993":{"position":[[78,9]]},"3075":{"position":[[20,9],[217,9]]},"3080":{"position":[[372,9],[573,9]]},"3194":{"position":[[502,9]]},"3430":{"position":[[146,9],[223,9],[2670,9],[2800,9],[3997,9],[4109,9]]},"3432":{"position":[[5214,9],[5326,9]]},"3446":{"position":[[792,9],[850,9]]},"3452":{"position":[[1381,9],[1446,9]]},"3601":{"position":[[287,9],[401,9]]},"3696":{"position":[[73,9]]},"3702":{"position":[[990,9],[1044,9]]},"3916":{"position":[[4377,9],[4442,9],[7186,9],[7791,9],[8642,9]]},"3928":{"position":[[1354,9],[1412,9]]},"3934":{"position":[[1623,9]]}}}],["localipv4",{"_index":8189,"t":{"3452":{"position":[[1289,9]]},"3916":{"position":[[4285,9]]}}}],["localizationset",{"_index":6391,"t":{"2522":{"position":[[3,20],[33,20]]},"2542":{"position":[[172,20]]},"2553":{"position":[[0,20]]},"3031":{"position":[[0,20]]},"3033":{"position":[[3,20]]}}}],["localstorag",{"_index":10214,"t":{"3992":{"position":[[1114,12]]}}}],["localtim",{"_index":4477,"t":{"1488":{"position":[[1500,9],[1515,9]]},"1499":{"position":[[800,9],[815,9]]}}}],["locat",{"_index":3694,"t":{"881":{"position":[[332,8],[356,8],[388,8]]},"3832":{"position":[[2190,8],[3951,8]]}}}],["locatordbcontext",{"_index":5982,"t":{"2117":{"position":[[4,16]]},"2121":{"position":[[4,16]]}}}],["locatordbcontext2",{"_index":5983,"t":{"2117":{"position":[[65,17]]},"2121":{"position":[[68,17]]}}}],["locatorrepositori",{"_index":5977,"t":{"2107":{"position":[[4,17]]}}}],["log",{"_index":333,"t":{"19":{"position":[[989,3]]},"91":{"position":[[429,7]]},"114":{"position":[[79,7],[1450,7]]},"220":{"position":[[577,7]]},"319":{"position":[[267,3],[305,3],[500,3],[556,3]]},"321":{"position":[[487,3]]},"445":{"position":[[557,7],[653,7]]},"688":{"position":[[136,7]]},"713":{"position":[[206,7],[226,3]]},"734":{"position":[[220,7],[240,3]]},"1823":{"position":[[427,3]]},"2171":{"position":[[23,3],[85,3],[142,3],[174,3],[198,3],[218,3],[238,3],[258,3]]},"2294":{"position":[[371,7]]},"2501":{"position":[[213,7]]},"2751":{"position":[[197,4],[206,3],[225,4],[234,3],[247,4],[261,3]]},"2756":{"position":[[4,4]]},"2813":{"position":[[188,7]]},"2817":{"position":[[337,7]]},"2887":{"position":[[54,7],[404,7]]},"3082":{"position":[[30,4]]},"3194":{"position":[[371,3],[724,3],[829,3]]},"3424":{"position":[[56,3],[118,3],[175,3],[207,3],[231,3],[251,3],[271,3],[291,3]]},"3430":{"position":[[587,7],[600,7],[862,7],[1268,7],[1553,7],[1576,7],[2039,7],[2052,7],[2154,7],[2400,7],[2488,7],[3833,7]]},"3432":{"position":[[58,3],[102,4],[119,3],[203,3],[295,7],[409,3],[435,3],[653,3],[811,3],[926,7],[981,7],[1406,3],[1491,3],[1682,3],[1933,3],[2200,3],[2341,3],[2502,3],[3198,3],[3482,3],[3970,3],[4184,3],[4450,3],[4616,3],[4921,3],[5050,7]]},"3434":{"position":[[126,7],[700,7],[911,7],[997,7]]},"3438":{"position":[[117,3]]},"3442":{"position":[[86,7]]},"3446":{"position":[[13,7],[251,7],[554,7],[1925,7]]},"3448":{"position":[[247,7],[285,7]]},"3452":{"position":[[127,7],[267,7],[369,7],[499,7],[917,7],[3705,6]]},"3458":{"position":[[162,7],[213,7],[604,7],[863,7]]},"3466":{"position":[[539,3],[831,3]]},"3468":{"position":[[124,7]]},"3601":{"position":[[121,7],[1651,7]]},"3768":{"position":[[756,7],[951,7],[1256,7],[1451,7],[1757,7],[1953,7],[2260,7]]},"3772":{"position":[[610,7],[739,7]]},"3832":{"position":[[1648,7]]},"3842":{"position":[[319,7],[463,7],[949,7],[1093,7],[1514,7],[1658,7],[2104,7],[2248,7],[2745,7],[2889,7],[3362,7],[3506,7]]},"3844":{"position":[[325,7],[472,7],[595,7]]},"3846":{"position":[[565,7],[711,7],[834,7]]},"3850":{"position":[[151,7],[326,7]]},"3852":{"position":[[270,7],[444,7]]},"3854":{"position":[[272,7],[418,7]]},"3856":{"position":[[167,7]]},"3874":{"position":[[84,7],[259,7]]},"3876":{"position":[[202,7],[376,7]]},"3910":{"position":[[1764,3]]},"3912":{"position":[[1591,7],[1717,7]]},"3914":{"position":[[1325,3]]},"3916":{"position":[[1118,3],[1143,3],[2996,3],[3314,7],[3393,7],[3502,7],[3913,7],[6701,6]]},"3918":{"position":[[3774,3],[3993,7]]},"3920":{"position":[[389,3]]},"3922":{"position":[[139,3],[2354,3]]},"3928":{"position":[[599,7],[763,4],[780,3],[903,7],[1129,7],[2487,7]]},"3932":{"position":[[1695,7]]},"3944":{"position":[[471,7]]},"3992":{"position":[[92,7]]},"3994":{"position":[[71,7]]}}}],["log4net",{"_index":2992,"t":{"570":{"position":[[2078,7]]},"3928":{"position":[[46,7]]}}}],["log_date_format",{"_index":6889,"t":{"2751":{"position":[[261,15]]}}}],["logcontext",{"_index":8181,"t":{"3450":{"position":[[140,10],[205,10]]},"3466":{"position":[[441,10],[560,10],[683,10]]},"3912":{"position":[[1564,10],[1647,10],[1678,10],[1738,10]]},"3924":{"position":[[4810,10]]}}}],["logcrit",{"_index":8074,"t":{"3416":{"position":[[366,11]]}}}],["logdatetim",{"_index":9164,"t":{"3916":{"position":[[1014,11]]}}}],["logdebug",{"_index":8071,"t":{"3416":{"position":[[145,8]]}}}],["logdispatchproxi",{"_index":4311,"t":{"1424":{"position":[[467,16],[601,16],[1872,16]]},"1426":{"position":[[153,16],[335,16]]}}}],["logdispathproxi",{"_index":4299,"t":{"1420":{"position":[[408,15]]},"3003":{"position":[[352,15]]}}}],["logen",{"_index":5688,"t":{"1821":{"position":[[225,10]]},"3768":{"position":[[2503,10]]},"3826":{"position":[[136,10]]},"3918":{"position":[[874,10]]}}}],["logentityframeworkcoresqlexecutecommand",{"_index":9705,"t":{"3960":{"position":[[326,39]]}}}],["logerror",{"_index":5648,"t":{"1807":{"position":[[663,8]]},"1819":{"position":[[392,8]]},"1885":{"position":[[215,8]]},"3009":{"position":[[247,8]]},"3416":{"position":[[301,8]]},"3426":{"position":[[128,8]]},"3828":{"position":[[685,8]]},"3918":{"position":[[770,8]]}}}],["logexceptionhandl",{"_index":5751,"t":{"1883":{"position":[[244,19]]}}}],["logfromiot",{"_index":5699,"t":{"1823":{"position":[[452,10]]}}}],["logger",{"_index":771,"t":{"114":{"position":[[263,6],[342,6]]},"492":{"position":[[127,6],[200,6],[211,6],[220,6],[566,6]]},"530":{"position":[[165,6],[272,6],[319,6],[328,6],[441,6]]},"570":{"position":[[2373,6]]},"1039":{"position":[[165,6],[272,6],[319,6],[328,6],[441,6]]},"1795":{"position":[[156,6],[220,6],[231,6],[240,6],[379,6],[641,6]]},"1807":{"position":[[223,6],[295,6],[306,6],[315,6],[395,6],[557,6],[656,6]]},"1811":{"position":[[211,6],[303,6],[335,6],[344,6]]},"1819":{"position":[[204,6],[268,6],[279,6],[288,6],[385,6]]},"1823":{"position":[[184,6],[329,6],[387,6],[396,6]]},"2171":{"position":[[14,6]]},"2226":{"position":[[49,6]]},"2228":{"position":[[67,6]]},"2482":{"position":[[101,6],[171,6],[182,6],[191,6],[466,6]]},"2484":{"position":[[127,6],[200,6],[211,6],[220,6],[566,6]]},"2581":{"position":[[281,6],[378,6],[403,6],[412,6],[484,6],[784,6],[881,6],[930,6],[939,6],[1011,6]]},"2587":{"position":[[190,6],[287,6],[347,6],[356,6]]},"2589":{"position":[[209,6],[318,6],[378,6],[387,6]]},"2813":{"position":[[367,6],[405,6],[416,6],[425,6],[563,6]]},"2817":{"position":[[516,6],[554,6],[565,6],[574,6],[842,6]]},"2825":{"position":[[101,6],[171,6],[182,6],[191,6],[466,6]]},"2827":{"position":[[173,6],[246,6],[257,6],[266,6],[612,6]]},"2829":{"position":[[191,6],[294,6],[305,6],[314,6],[730,6]]},"2831":{"position":[[154,6],[253,6],[300,6],[309,6]]},"3420":{"position":[[113,6],[163,6],[174,6],[183,6],[216,6]]},"3422":{"position":[[87,6],[130,6],[141,6],[150,6],[210,6]]},"3424":{"position":[[47,6]]},"3436":{"position":[[94,6],[137,6],[192,6],[201,6],[275,6]]},"3446":{"position":[[738,6],[817,6]]},"3450":{"position":[[132,6]]},"3452":{"position":[[1075,6],[1405,6]]},"3466":{"position":[[106,6],[182,6],[252,6],[349,6],[417,6],[467,6],[521,6],[584,6],[1216,6],[1306,6],[1317,6],[1326,6],[1369,6],[1488,6],[1604,6],[1658,6]]},"3762":{"position":[[77,6],[113,6],[124,6],[133,6],[239,6]]},"3768":{"position":[[252,6],[288,6],[299,6],[308,6],[414,6]]},"3770":{"position":[[124,6],[160,6],[171,6],[180,6],[286,6],[1357,6],[1393,6],[1404,6],[1413,6],[1585,6],[1636,6],[2808,6],[2844,6],[2855,6],[2864,6],[3036,6],[3134,6],[3256,6],[4673,6],[4709,6],[4720,6],[4729,6],[4901,6],[4955,6]]},"3774":{"position":[[409,6],[445,6],[456,6],[465,6],[571,6]]},"3783":{"position":[[131,6],[167,6],[178,6],[187,6],[440,6]]},"3791":{"position":[[138,6],[222,6],[264,6],[273,6],[411,6],[658,6],[794,6],[871,6],[880,6],[1190,6],[1457,6],[1587,6],[1664,6],[1673,6],[1938,6]]},"3795":{"position":[[121,6],[157,6],[168,6],[177,6],[505,6]]},"3806":{"position":[[3335,6],[3371,6],[3382,6],[3391,6],[3497,6]]},"3808":{"position":[[769,6],[805,6],[816,6],[825,6],[931,6],[1990,6],[2026,6],[2037,6],[2046,6],[2152,6]]},"3828":{"position":[[175,6],[229,6],[240,6],[249,6],[353,6],[559,6],[678,6]]},"3832":{"position":[[456,6],[492,6],[503,6],[512,6],[618,6]]},"3914":{"position":[[1674,6],[1806,6],[1882,6],[1954,6],[2028,6]]},"3916":{"position":[[4071,6],[4401,6]]},"3924":{"position":[[264,6],[4532,6],[4648,6],[4786,6]]},"3928":{"position":[[1313,6],[1379,6]]}}}],["loggerfactori",{"_index":6015,"t":{"2171":{"position":[[69,13]]},"3424":{"position":[[102,13]]}}}],["loggerformatt",{"_index":8105,"t":{"3430":{"position":[[3526,15],[3602,15]]},"3432":{"position":[[4227,15],[4303,15]]},"3434":{"position":[[2601,15],[2677,15]]},"3910":{"position":[[1402,15],[1533,15],[1570,15],[1686,15],[1807,15],[1938,15]]},"3916":{"position":[[2928,15],[3039,15],[3160,15]]}}}],["loggingmonitor",{"_index":681,"t":{"108":{"position":[[20,14],[48,14]]},"114":{"position":[[20,14],[48,14]]},"3444":{"position":[[22,14]]},"3446":{"position":[[111,14],[203,14],[408,14],[474,14]]},"3448":{"position":[[7,14],[726,14],[805,14],[1148,14]]},"3450":{"position":[[36,14]]},"3452":{"position":[[230,14],[332,14],[799,14],[925,14],[981,14]]},"3456":{"position":[[109,14]]},"3458":{"position":[[170,14],[871,14]]},"3910":{"position":[[1448,14],[1975,14]]},"3912":{"position":[[801,14],[1053,14],[2295,14],[2599,14]]},"3914":{"position":[[752,14],[914,14],[1145,14],[2760,14],[3267,14]]},"3916":{"position":[[1061,14],[1334,14],[1454,14],[2021,14],[2122,14],[2200,14],[2385,14],[3189,14],[3356,14],[3795,14],[3921,14],[3977,14],[8849,14]]},"3918":{"position":[[3245,14]]},"3920":{"position":[[606,14],[644,14],[721,14],[1896,14]]},"3922":{"position":[[699,14],[2132,14]]},"3924":{"position":[[1117,14],[1256,14],[1517,14],[1726,14],[1774,14],[1825,14],[1866,14]]},"3928":{"position":[[440,14],[864,14],[1001,14]]}}}],["loggingmonitorattribut",{"_index":8172,"t":{"3448":{"position":[[70,23]]},"3922":{"position":[[1957,23]]}}}],["logic",{"_index":1359,"t":{"190":{"position":[[156,7]]}}}],["logicalhandl",{"_index":8400,"t":{"3601":{"position":[[869,14],[1320,14],[1469,14]]}}}],["login",{"_index":953,"t":{"125":{"position":[[248,5]]},"129":{"position":[[329,5]]},"1377":{"position":[[666,5]]},"1913":{"position":[[1095,5]]}}}],["loginform",{"_index":2743,"t":{"492":{"position":[[573,14]]},"530":{"position":[[448,14]]},"1039":{"position":[[448,14]]},"1795":{"position":[[386,14],[648,14]]},"1807":{"position":[[402,14],[564,14]]},"2226":{"position":[[56,14]]},"2228":{"position":[[74,14]]},"2482":{"position":[[473,14]]},"2484":{"position":[[573,14]]},"2581":{"position":[[491,14],[1018,14]]},"2813":{"position":[[570,14]]},"2817":{"position":[[849,14]]},"2825":{"position":[[473,14]]},"2827":{"position":[[619,14]]},"2829":{"position":[[737,14]]},"3416":{"position":[[197,14]]},"3420":{"position":[[223,14]]},"3422":{"position":[[217,14]]},"3426":{"position":[[52,14],[84,14],[186,14]]},"3436":{"position":[[282,14]]},"3462":{"position":[[49,14]]},"3466":{"position":[[189,14],[356,14],[474,14],[591,14],[706,14],[1495,14],[1665,14]]},"3762":{"position":[[246,14]]},"3768":{"position":[[421,14]]},"3770":{"position":[[293,14],[1592,14],[1643,14],[3043,14],[3141,14],[3263,14],[4908,14],[4962,14]]},"3774":{"position":[[578,14]]},"3783":{"position":[[447,14]]},"3791":{"position":[[418,14],[1197,14],[1945,14]]},"3795":{"position":[[512,14]]},"3806":{"position":[[3504,14]]},"3808":{"position":[[938,14],[2159,14]]},"3828":{"position":[[360,14],[566,14]]},"3832":{"position":[[625,14]]},"3914":{"position":[[1747,14],[1889,14],[2035,14]]},"3924":{"position":[[4605,14],[4743,14],[4834,14]]}}}],["logininfo",{"_index":7330,"t":{"3063":{"position":[[1084,9]]},"3686":{"position":[[125,9],[177,9],[323,9],[1097,9],[1183,9]]},"3706":{"position":[[1076,9]]},"3940":{"position":[[953,9]]}}}],["loginpath",{"_index":951,"t":{"125":{"position":[[229,9]]},"129":{"position":[[310,9]]}}}],["loglevel",{"_index":1628,"t":{"220":{"position":[[590,8]]},"445":{"position":[[567,8],[641,8]]},"688":{"position":[[149,8]]},"2501":{"position":[[226,8]]},"2887":{"position":[[67,8],[412,8]]},"3430":{"position":[[639,8],[752,8],[764,8],[901,8],[1014,8],[1026,8],[1307,8],[1420,8],[1432,8],[1589,8]]},"3432":{"position":[[308,8],[1064,8],[1255,8],[1797,8],[1819,8],[1837,8],[1855,8],[2028,8],[2089,8],[2101,8],[2269,8],[2281,8],[2410,8],[2422,8],[3669,8]]},"3434":{"position":[[604,8],[713,8],[1128,8],[1436,8],[1579,8],[1817,8],[1829,8],[2016,8],[2028,8]]},"3442":{"position":[[99,8]]},"3468":{"position":[[137,8]]},"3601":{"position":[[1664,8]]},"3932":{"position":[[1708,8]]}}}],["logmessag",{"_index":8156,"t":{"3434":{"position":[[339,10]]},"3452":{"position":[[712,10]]},"3458":{"position":[[384,10],[775,10]]},"3466":{"position":[[726,10],[1030,10]]},"3914":{"position":[[803,10]]},"3916":{"position":[[999,10],[3708,10]]}}}],["logmsg",{"_index":8103,"t":{"3430":{"position":[[3273,6],[4608,6]]},"3432":{"position":[[2072,6],[2082,6],[2242,6],[2262,6],[2383,6],[2403,6],[2544,6],[2564,6],[3242,6],[3526,6],[3555,6],[3662,6],[3715,6],[3756,6],[3800,6],[3841,6],[4014,6],[4043,6]]},"3434":{"position":[[350,6],[1790,6],[1810,6],[1989,6],[2009,6],[2160,6],[2180,6],[2326,6]]},"3452":{"position":[[723,6],[857,6],[891,6],[961,6]]},"3458":{"position":[[116,6],[136,6],[395,6],[422,6],[786,6],[813,6],[837,6]]},"3466":{"position":[[756,6],[873,6],[901,6],[933,6],[1041,6],[1074,6]]},"3916":{"position":[[3719,6],[3853,6],[3887,6],[3957,6]]}}}],["lognam",{"_index":8132,"t":{"3432":{"position":[[2571,7],[3722,7]]},"3434":{"position":[[2187,7]]},"3452":{"position":[[898,7]]},"3458":{"position":[[143,7],[552,7],[844,7]]},"3916":{"position":[[3894,7]]}}}],["logo",{"_index":2379,"t":{"397":{"position":[[261,4]]},"399":{"position":[[533,4]]},"1539":{"position":[[138,4]]},"3934":{"position":[[1646,4]]}}}],["logout",{"_index":10055,"t":{"3982":{"position":[[881,6]]}}}],["logtrac",{"_index":8070,"t":{"3416":{"position":[[69,8]]}}}],["logwarn",{"_index":8072,"t":{"3416":{"position":[[245,10]]}}}],["london",{"_index":3699,"t":{"883":{"position":[[327,6]]}}}],["long",{"_index":286,"t":{"19":{"position":[[266,4]]},"127":{"position":[[1195,4],[1242,4]]},"1635":{"position":[[394,4],[399,4],[408,4]]},"1741":{"position":[[2006,4]]},"2379":{"position":[[9,4],[367,4]]},"2406":{"position":[[253,4],[560,4]]},"2415":{"position":[[240,4]]},"2434":{"position":[[244,4],[581,4]]},"2442":{"position":[[170,4],[353,4],[585,4],[858,4],[1141,4],[1375,4],[1632,4],[1860,4]]},"2470":{"position":[[134,4]]},"2478":{"position":[[134,4]]},"3039":{"position":[[310,4],[350,4]]},"3041":{"position":[[406,4],[453,4]]},"3234":{"position":[[223,4]]},"3273":{"position":[[894,4]]},"3708":{"position":[[526,4]]},"3798":{"position":[[430,4],[458,4],[499,4],[529,4]]},"3808":{"position":[[3066,4],[3111,4]]},"3914":{"position":[[964,4],[2778,4],[3418,4]]}}}],["longrun",{"_index":2729,"t":{"490":{"position":[[471,11]]},"1803":{"position":[[1697,11]]},"2315":{"position":[[465,11]]}}}],["longtext",{"_index":10471,"t":{"4006":{"position":[[425,8]]}}}],["loop",{"_index":6127,"t":{"2313":{"position":[[730,4]]}}}],["loos",{"_index":4218,"t":{"1389":{"position":[[136,5]]}}}],["love24",{"_index":6928,"t":{"2768":{"position":[[424,6],[455,6]]}}}],["lowercas",{"_index":3161,"t":{"606":{"position":[[353,9]]},"617":{"position":[[999,9],[1028,9]]}}}],["lowercaserout",{"_index":5153,"t":{"1625":{"position":[[128,14]]},"1637":{"position":[[37,14]]},"1641":{"position":[[338,14]]},"1661":{"position":[[160,14]]},"3023":{"position":[[161,14]]},"3944":{"position":[[679,14]]}}}],["ls",{"_index":4438,"t":{"1488":{"position":[[63,2]]},"1495":{"position":[[63,2],[1301,2]]}}}],["lt",{"_index":4390,"t":{"1481":{"position":[[24,3]]},"1483":{"position":[[112,3]]},"2559":{"position":[[1655,2],[1662,2],[1665,2]]}}}],["ltd",{"_index":516,"t":{"87":{"position":[[28,3]]},"1551":{"position":[[615,3],[696,3]]},"2261":{"position":[[171,3],[361,3]]},"3464":{"position":[[219,3],[409,3]]},"3702":{"position":[[644,3],[741,3],[1132,3],[1262,3],[1510,3],[1900,3],[2244,3]]},"3916":{"position":[[1433,3]]},"3936":{"position":[[2035,3],[2220,3]]}}}],["ltm0203",{"_index":6946,"t":{"2768":{"position":[[709,7]]}}}],["lu",{"_index":6549,"t":{"2559":{"position":[[1124,2],[1267,2]]}}}],["lv",{"_index":6600,"t":{"2559":{"position":[[1629,2],[1637,2],[1640,2]]}}}],["lw",{"_index":2708,"t":{"482":{"position":[[913,2]]},"2418":{"position":[[1279,2]]},"2420":{"position":[[2069,2]]}}}],["lx",{"_index":5283,"t":{"1691":{"position":[[94,2]]}}}],["ly",{"_index":6448,"t":{"2559":{"position":[[176,2]]}}}],["m",{"_index":4174,"t":{"1379":{"position":[[227,1]]},"1488":{"position":[[101,1],[107,1]]},"1495":{"position":[[101,1],[107,1]]},"1511":{"position":[[2989,1]]},"1753":{"position":[[178,1]]},"1755":{"position":[[761,1],[966,1],[1201,1]]}}}],["m1",{"_index":626,"t":{"102":{"position":[[31,2]]}}}],["ma",{"_index":6450,"t":{"2559":{"position":[[192,2]]}}}],["mac",{"_index":4916,"t":{"1518":{"position":[[13,3]]}}}],["machinenam",{"_index":5041,"t":{"1561":{"position":[[116,11],[142,11]]}}}],["maco",{"_index":625,"t":{"102":{"position":[[19,5],[25,5]]},"3080":{"position":[[527,5]]}}}],["macro",{"_index":2648,"t":{"480":{"position":[[38,5],[57,5]]}}}],["magic",{"_index":1483,"t":{"199":{"position":[[315,5]]}}}],["mail",{"_index":7476,"t":{"3136":{"position":[[92,4]]}}}],["main",{"_index":34,"t":{"3":{"position":[[286,4]]},"188":{"position":[[613,4]]},"202":{"position":[[238,4]]},"394":{"position":[[19,4]]},"455":{"position":[[310,4]]},"461":{"position":[[1024,4]]},"1379":{"position":[[369,4]]},"1539":{"position":[[423,4],[1665,4]]},"1541":{"position":[[40,4]]},"1557":{"position":[[874,4]]},"1977":{"position":[[138,4]]},"2269":{"position":[[223,4]]},"2776":{"position":[[211,4]]},"2813":{"position":[[876,4]]},"2819":{"position":[[234,4]]},"2821":{"position":[[265,4]]},"2836":{"position":[[324,4],[1537,4]]},"2856":{"position":[[1224,4]]},"2893":{"position":[[123,4]]},"2899":{"position":[[138,4]]},"3166":{"position":[[42,4]]},"3401":{"position":[[241,4]]},"3702":{"position":[[1562,4]]}}}],["make",{"_index":8535,"t":{"3702":{"position":[[1631,6]]}}}],["manag",{"_index":4996,"t":{"1551":{"position":[[135,6]]},"3702":{"position":[[353,7]]}}}],["manageddataaccess",{"_index":2881,"t":{"546":{"position":[[109,17]]},"3984":{"position":[[639,17]]}}}],["manifest",{"_index":4994,"t":{"1549":{"position":[[101,8]]}}}],["manual",{"_index":5478,"t":{"1783":{"position":[[108,6]]},"3591":{"position":[[226,6]]},"3962":{"position":[[672,6]]}}}],["manualcommit",{"_index":7882,"t":{"3296":{"position":[[91,12]]},"3962":{"position":[[780,12]]}}}],["manualsavechang",{"_index":9737,"t":{"3962":{"position":[[756,17]]}}}],["mao",{"_index":6972,"t":{"2768":{"position":[[1079,3]]}}}],["map",{"_index":5453,"t":{"1761":{"position":[[411,7]]},"2571":{"position":[[4,3],[89,3],[115,3]]},"2573":{"position":[[4,3],[44,3],[122,3]]},"2690":{"position":[[174,3],[239,3]]},"2692":{"position":[[90,3]]}}}],["mapcontrol",{"_index":1597,"t":{"216":{"position":[[1206,14]]},"338":{"position":[[1101,14]]},"371":{"position":[[563,14]]},"1979":{"position":[[810,14]]},"1991":{"position":[[205,14]]},"2014":{"position":[[205,14]]},"2255":{"position":[[434,14],[515,14]]},"2776":{"position":[[685,14]]},"2879":{"position":[[337,14]]},"3345":{"position":[[315,14]]},"3630":{"position":[[636,14]]}}}],["mapcontrollerrout",{"_index":7526,"t":{"3144":{"position":[[559,18]]}}}],["mapdefaultcontrollerrout",{"_index":7118,"t":{"2848":{"position":[[755,25]]}}}],["mapget",{"_index":9490,"t":{"3932":{"position":[[2670,6]]}}}],["maphub",{"_index":7525,"t":{"3144":{"position":[[538,7]]},"3156":{"position":[[55,6],[244,6],[340,6],[590,6]]},"3158":{"position":[[196,6],[567,6]]}}}],["mapper",{"_index":6805,"t":{"2690":{"position":[[73,6],[324,6]]},"2692":{"position":[[62,6],[83,6]]},"3452":{"position":[[3528,6]]},"3916":{"position":[[6524,6]]}}}],["maprazorpag",{"_index":7119,"t":{"2848":{"position":[[794,13]]}}}],["maproutecontrol",{"_index":7938,"t":{"3345":{"position":[[126,19],[251,19],[285,19]]},"3944":{"position":[[904,19]]}}}],["mapset",{"_index":6860,"t":{"2735":{"position":[[89,11],[312,11],[385,11]]},"3936":{"position":[[33,11],[1783,11]]}}}],["mapster",{"_index":145,"t":{"11":{"position":[[364,7]]},"91":{"position":[[214,7],[229,7]]},"2294":{"position":[[393,7]]},"2680":{"position":[[3,7],[32,7],[71,7]]},"2684":{"position":[[437,7],[476,7],[484,7]]},"2686":{"position":[[10,7],[96,7]]},"2690":{"position":[[6,7]]},"2692":{"position":[[0,7]]},"2694":{"position":[[0,7],[198,7]]},"2698":{"position":[[35,7],[49,7]]},"3071":{"position":[[979,7],[994,7],[1228,7],[1273,7]]},"3988":{"position":[[114,7]]},"3994":{"position":[[34,7],[711,7]]},"4004":{"position":[[165,7]]}}}],["mar",{"_index":6316,"t":{"2420":{"position":[[1114,3]]}}}],["margin",{"_index":6402,"t":{"2532":{"position":[[57,6]]}}}],["mariadb",{"_index":637,"t":{"102":{"position":[[114,7]]}}}],["mark",{"_index":4762,"t":{"1511":{"position":[[2207,4]]}}}],["markdown",{"_index":8524,"t":{"3702":{"position":[[21,8],[57,8]]},"3934":{"position":[[1507,8],[1542,8],[1590,8]]}}}],["markdowntest",{"_index":9529,"t":{"3934":{"position":[[3176,12]]}}}],["master",{"_index":2362,"t":{"394":{"position":[[12,6]]},"1064":{"position":[[699,6]]},"1066":{"position":[[1244,6]]},"1071":{"position":[[12,6]]},"1073":{"position":[[13,6]]},"1075":{"position":[[0,6]]},"1379":{"position":[[219,6],[229,6]]},"1488":{"position":[[1728,6]]},"3215":{"position":[[165,6]]}}}],["masterconnectionstr",{"_index":3917,"t":{"1054":{"position":[[165,22],[380,22]]}}}],["masterdbcontext",{"_index":3918,"t":{"1054":{"position":[[204,15],[235,15],[261,15],[294,15]]},"1058":{"position":[[312,15]]},"1062":{"position":[[40,15],[81,15]]},"1066":{"position":[[404,15],[435,15],[461,15],[494,15]]}}}],["masterdbcontextloc",{"_index":3396,"t":{"698":{"position":[[942,22],[972,22]]},"947":{"position":[[18,22],[473,22]]},"1041":{"position":[[1260,22],[1481,22]]},"1060":{"position":[[215,22]]},"1064":{"position":[[279,22],[457,22]]},"1066":{"position":[[910,22]]},"1277":{"position":[[351,22]]},"1311":{"position":[[419,22]]},"1775":{"position":[[340,22],[430,22]]},"3966":{"position":[[1325,22]]}}}],["matchnameswithunderscor",{"_index":2878,"t":{"544":{"position":[[252,25]]}}}],["maui",{"_index":17,"t":{"3":{"position":[[66,4]]},"102":{"position":[[69,4]]}}}],["max",{"_index":3840,"t":{"969":{"position":[[49,3],[86,3],[142,3],[205,3],[274,3]]},"1635":{"position":[[457,3],[466,3]]},"1747":{"position":[[117,3]]},"2751":{"position":[[324,3]]},"2762":{"position":[[36,3],[72,3]]},"3222":{"position":[[385,3],[448,3]]},"3770":{"position":[[2467,3],[2515,3],[4275,3],[4325,3]]},"3812":{"position":[[2048,3],[2098,3]]}}}],["max_number_of_error",{"_index":8749,"t":{"3770":{"position":[[2515,20],[4325,20]]},"3812":{"position":[[2098,20]]}}}],["max_number_of_run",{"_index":8747,"t":{"3770":{"position":[[2467,18],[4275,18]]},"3812":{"position":[[2048,18]]}}}],["max_restart",{"_index":6891,"t":{"2751":{"position":[[324,12]]}}}],["maxallowedcontentlength",{"_index":5420,"t":{"1755":{"position":[[199,23],[447,23]]}}}],["maxasync",{"_index":3841,"t":{"969":{"position":[[346,8],[394,8],[461,8],[535,8],[615,8]]}}}],["maxlength",{"_index":3062,"t":{"587":{"position":[[312,9]]},"708":{"position":[[321,9]]},"851":{"position":[[336,9]]},"1635":{"position":[[474,9],[495,9]]},"2725":{"position":[[518,9],[1451,9],[2068,9]]},"2727":{"position":[[488,9]]},"3549":{"position":[[155,9]]}}}],["maxnumberoferror",{"_index":8730,"t":{"3770":{"position":[[1069,17],[5816,17]]},"3798":{"position":[[511,17]]},"3802":{"position":[[1093,17],[1702,17],[2162,17]]},"3808":{"position":[[3086,17]]},"3812":{"position":[[487,17],[1303,17],[2761,17]]},"3817":{"position":[[1304,17],[2294,17]]},"3821":{"position":[[786,17]]},"3896":{"position":[[711,17]]}}}],["maxnumberofrun",{"_index":8728,"t":{"3770":{"position":[[1026,15],[5775,15]]},"3798":{"position":[[442,15]]},"3802":{"position":[[1046,15],[1659,15],[2146,15]]},"3808":{"position":[[3043,15]]},"3812":{"position":[[444,15],[1266,15],[2720,15]]},"3817":{"position":[[1257,15],[2251,15]]},"3821":{"position":[[743,15]]},"3896":{"position":[[668,15]]}}}],["maxpools",{"_index":3411,"t":{"713":{"position":[[596,11]]},"734":{"position":[[604,11]]}}}],["maxrequestbodys",{"_index":5413,"t":{"1753":{"position":[[115,18],[187,18]]},"1755":{"position":[[705,18],[910,18],[1138,18]]}}}],["maxrollingfil",{"_index":8122,"t":{"3432":{"position":[[658,15],[890,15]]}}}],["mc",{"_index":6551,"t":{"2559":{"position":[[1138,2]]}}}],["mcr",{"_index":4152,"t":{"1377":{"position":[[86,3]]},"1379":{"position":[[106,3],[501,3]]}}}],["md",{"_index":10180,"t":{"3990":{"position":[[792,2]]},"3996":{"position":[[1286,2],[1347,2]]},"4006":{"position":[[743,2]]}}}],["md5",{"_index":1338,"t":{"188":{"position":[[346,3],[350,3],[356,3],[537,3],[546,3]]},"190":{"position":[[787,3],[841,3],[898,3],[952,3],[1234,3],[1290,3],[1349,3],[1405,3]]},"606":{"position":[[386,3],[390,3]]},"617":{"position":[[1081,3],[1104,3]]},"1674":{"position":[[0,3]]},"1677":{"position":[[6,3],[160,3],[227,3]]},"1689":{"position":[[23,3],[92,3]]},"3740":{"position":[[379,3],[391,3]]},"3922":{"position":[[393,3]]},"3964":{"position":[[227,3]]},"3992":{"position":[[2590,3]]},"4004":{"position":[[544,3]]}}}],["md5encrypt",{"_index":5227,"t":{"1677":{"position":[[30,13],[80,13],[181,13],[267,13]]}}}],["md5hash",{"_index":5226,"t":{"1677":{"position":[[20,7],[109,7],[133,7],[171,7]]}}}],["md5hash16",{"_index":5229,"t":{"1677":{"position":[[255,9]]}}}],["md5vssha256",{"_index":1332,"t":{"188":{"position":[[206,11],[377,11],[669,11]]}}}],["mean",{"_index":1382,"t":{"190":{"position":[[537,4]]}}}],["mechan",{"_index":7142,"t":{"2856":{"position":[[456,10]]}}}],["media",{"_index":8310,"t":{"3522":{"position":[[1045,5]]}}}],["mem",{"_index":6878,"t":{"2749":{"position":[[405,3]]},"3080":{"position":[[973,3]]}}}],["memori",{"_index":1669,"t":{"231":{"position":[[80,6]]},"747":{"position":[[103,6]]}}}],["memorycach",{"_index":1676,"t":{"231":{"position":[[268,11],[315,11],[331,11],[345,11],[448,11]]},"233":{"position":[[30,11],[182,11],[472,11]]},"235":{"position":[[171,11]]},"1566":{"position":[[247,11]]}}}],["memorycacheentryopt",{"_index":1711,"t":{"235":{"position":[[11,23],[96,23]]}}}],["memorymapperfil",{"_index":6102,"t":{"2307":{"position":[[98,16]]},"2321":{"position":[[57,16],[95,16]]}}}],["merchant",{"_index":8556,"t":{"3702":{"position":[[2639,15]]}}}],["merg",{"_index":6888,"t":{"2751":{"position":[[241,5]]}}}],["merge_log",{"_index":6887,"t":{"2751":{"position":[[241,10]]}}}],["messag",{"_index":1738,"t":{"237":{"position":[[796,7],[1136,7],[1257,7]]},"713":{"position":[[252,8]]},"734":{"position":[[266,8]]},"1803":{"position":[[3797,7],[4559,7]]},"1909":{"position":[[985,7],[1148,7]]},"2313":{"position":[[307,7],[389,7],[418,7]]},"2315":{"position":[[266,7],[401,7]]},"2472":{"position":[[180,7]]},"2551":{"position":[[256,7]]},"3136":{"position":[[13,9]]},"3154":{"position":[[270,7],[350,7],[459,7],[592,7],[658,7]]},"3168":{"position":[[383,7],[455,7]]},"3194":{"position":[[302,8],[728,8],[782,8]]},"3432":{"position":[[3807,7]]},"3452":{"position":[[864,7],[3133,7],[4039,7]]},"3712":{"position":[[62,7]]},"3916":{"position":[[3860,7],[6129,7],[7035,7]]},"3922":{"position":[[1565,7]]}}}],["messagecent",{"_index":5308,"t":{"1699":{"position":[[31,13],[51,13],[130,13]]},"1701":{"position":[[6,13]]},"1703":{"position":[[0,13]]},"1705":{"position":[[59,13],[130,13],[201,13]]},"1707":{"position":[[106,13],[141,13]]},"1709":{"position":[[39,13]]},"1817":{"position":[[54,13],[112,13],[171,13],[291,13]]},"2158":{"position":[[0,13]]},"2160":{"position":[[6,13]]},"2162":{"position":[[0,13]]},"3920":{"position":[[475,13],[1994,13]]},"3986":{"position":[[892,13]]}}}],["messageformat",{"_index":8102,"t":{"3430":{"position":[[3256,13],[3510,13],[3586,13]]},"3432":{"position":[[3225,13],[3509,13],[3997,13],[4211,13],[4287,13]]},"3434":{"position":[[2309,13],[2585,13],[2661,13]]},"3910":{"position":[[1670,13],[1791,13],[1922,13]]},"3916":{"position":[[2912,13],[3023,13],[3144,13]]}}}],["messageid",{"_index":5670,"t":{"1817":{"position":[[140,9],[196,9],[318,9]]},"2158":{"position":[[25,9]]},"2160":{"position":[[34,9]]},"2162":{"position":[[27,9]]}}}],["messagesink",{"_index":7998,"t":{"3371":{"position":[[379,11],[399,11]]},"3389":{"position":[[900,11],[920,11]]},"3924":{"position":[[3127,11],[3147,11]]}}}],["messeageid",{"_index":5318,"t":{"1703":{"position":[[18,10]]}}}],["messeng",{"_index":7483,"t":{"3136":{"position":[[193,9],[215,9],[238,9],[252,9]]}}}],["metadata",{"_index":3363,"t":{"696":{"position":[[1302,8],[2483,8],[3405,8],[4087,8]]},"844":{"position":[[176,8]]},"846":{"position":[[266,8]]},"877":{"position":[[117,8]]},"889":{"position":[[104,8]]},"1779":{"position":[[104,8]]},"1781":{"position":[[104,8]]},"2243":{"position":[[270,8]]},"2591":{"position":[[180,8]]},"2935":{"position":[[163,8]]},"2937":{"position":[[241,8]]},"3708":{"position":[[1159,8],[1279,8],[1331,8],[1358,8],[1381,8],[1929,8],[2061,8],[2113,8],[2175,8],[2198,8]]},"3716":{"position":[[287,8],[503,8]]},"3956":{"position":[[800,8],[920,8],[968,8],[997,8],[1397,8],[1529,8],[1618,8]]}}}],["metadatapropertyhandl",{"_index":6264,"t":{"2383":{"position":[[397,24],[424,24]]}}}],["method",{"_index":721,"t":{"112":{"position":[[643,6]]},"190":{"position":[[520,6]]},"1279":{"position":[[560,6],[570,6],[736,6],[746,6],[895,6],[960,6]]},"1424":{"position":[[907,6],[1021,6],[1097,6],[1250,6],[1324,6],[1480,6],[1555,6],[1712,6],[1773,6]]},"1915":{"position":[[85,6]]},"1921":{"position":[[85,6]]},"1925":{"position":[[491,6]]},"1929":{"position":[[85,6]]},"1933":{"position":[[460,6]]},"1937":{"position":[[85,6]]},"1945":{"position":[[85,6]]},"2856":{"position":[[346,6]]},"3680":{"position":[[397,6]]},"3942":{"position":[[424,6]]}}}],["method1",{"_index":5166,"t":{"1633":{"position":[[81,7],[148,7],[214,7],[285,7]]},"1635":{"position":[[109,7]]}}}],["method103",{"_index":8220,"t":{"3452":{"position":[[3363,9]]},"3916":{"position":[[6359,9]]}}}],["methodasync",{"_index":5327,"t":{"1703":{"position":[[582,11]]}}}],["methodconst0",{"_index":7642,"t":{"3222":{"position":[[360,12]]},"3230":{"position":[[200,12]]}}}],["methodconst1",{"_index":7643,"t":{"3222":{"position":[[423,12]]},"3230":{"position":[[476,12]]}}}],["methoddescriptor",{"_index":5899,"t":{"1951":{"position":[[481,16]]}}}],["methodinfo",{"_index":722,"t":{"112":{"position":[[669,10]]},"1424":{"position":[[1010,10],[1239,10],[1469,10]]},"1913":{"position":[[666,10]]},"1925":{"position":[[518,10]]},"1933":{"position":[[487,10]]}}}],["methodnam",{"_index":8178,"t":{"3448":{"position":[[963,10]]}}}],["methodsset",{"_index":8177,"t":{"3448":{"position":[[858,15]]},"3920":{"position":[[740,15]]}}}],["methodtyp",{"_index":5836,"t":{"1913":{"position":[[636,10],[833,10]]}}}],["microsoft",{"_index":26,"t":{"3":{"position":[[178,9]]},"11":{"position":[[386,9],[435,9],[475,9],[514,9],[551,9]]},"46":{"position":[[52,9]]},"48":{"position":[[113,9]]},"51":{"position":[[118,9]]},"60":{"position":[[52,9]]},"62":{"position":[[118,9]]},"70":{"position":[[52,9]]},"72":{"position":[[113,9]]},"75":{"position":[[118,9]]},"112":{"position":[[154,9],[187,9]]},"127":{"position":[[409,9],[451,9]]},"133":{"position":[[136,9],[178,9],[211,9]]},"135":{"position":[[126,9],[168,9]]},"146":{"position":[[82,9],[124,9],[157,9]]},"202":{"position":[[101,9],[137,9]]},"204":{"position":[[131,9],[167,9],[203,9]]},"210":{"position":[[239,9]]},"212":{"position":[[125,9],[414,9]]},"216":{"position":[[141,9],[177,9],[213,9],[533,9],[569,9],[605,9],[653,9]]},"220":{"position":[[630,9],[654,9],[699,9]]},"231":{"position":[[51,9]]},"241":{"position":[[26,9],[88,9],[167,9]]},"338":{"position":[[39,9],[75,9],[111,9],[159,9]]},"411":{"position":[[42,9],[78,9],[114,9],[162,9]]},"423":{"position":[[153,9]]},"435":{"position":[[116,9],[442,9],[474,9]]},"445":{"position":[[609,9],[628,9]]},"461":{"position":[[101,9]]},"508":{"position":[[37,9]]},"510":{"position":[[37,9]]},"514":{"position":[[79,9]]},"516":{"position":[[37,9]]},"518":{"position":[[37,9]]},"524":{"position":[[158,9]]},"534":{"position":[[34,9],[224,9]]},"546":{"position":[[10,9],[42,9]]},"570":{"position":[[87,9],[120,9],[157,9]]},"572":{"position":[[78,9]]},"595":{"position":[[43,9]]},"617":{"position":[[2219,9]]},"625":{"position":[[170,9]]},"627":{"position":[[50,9]]},"653":{"position":[[253,9]]},"655":{"position":[[31,9]]},"675":{"position":[[128,9]]},"685":{"position":[[114,9]]},"688":{"position":[[189,9],[213,9],[258,9]]},"696":{"position":[[1272,9],[2453,9],[3375,9],[4057,9]]},"698":{"position":[[395,9],[459,9],[506,9],[550,9],[604,9],[796,9]]},"702":{"position":[[25,9]]},"713":{"position":[[137,9],[354,9],[494,9]]},"734":{"position":[[151,9],[368,9],[743,9],[913,9],[1126,9],[1320,9],[1498,9],[1634,9],[1767,9],[1980,9],[2174,9],[2352,9],[2488,9],[2621,9],[2834,9],[3028,9],[3206,9],[3347,9],[3483,9],[3616,9],[3829,9],[4023,9],[4201,9],[4337,9],[4470,9],[4683,9],[4877,9],[5055,9],[5191,9],[5324,9],[5537,9],[5731,9],[5909,9],[6045,9],[6178,9],[6374,9],[6518,9],[6632,9],[6773,9],[6899,9],[7051,9],[7195,9],[7301,9],[7412,9],[7540,9],[7789,9]]},"745":{"position":[[37,9]]},"747":{"position":[[37,9],[74,9]]},"773":{"position":[[99,9]]},"832":{"position":[[57,9]]},"844":{"position":[[109,9],[146,9]]},"846":{"position":[[199,9],[236,9]]},"877":{"position":[[50,9],[87,9]]},"889":{"position":[[37,9],[74,9]]},"897":{"position":[[10,9],[79,9],[123,9],[177,9],[468,9]]},"927":{"position":[[6,9]]},"929":{"position":[[6,9]]},"931":{"position":[[6,9]]},"947":{"position":[[150,9],[644,9]]},"1054":{"position":[[37,9]]},"1056":{"position":[[56,9]]},"1058":{"position":[[25,9]]},"1066":{"position":[[211,9]]},"1309":{"position":[[174,9],[243,9],[287,9],[341,9],[632,9]]},"1311":{"position":[[37,9]]},"1313":{"position":[[740,9]]},"1317":{"position":[[79,9]]},"1353":{"position":[[220,9]]},"1377":{"position":[[90,9]]},"1379":{"position":[[110,9],[505,9]]},"1408":{"position":[[575,9]]},"1410":{"position":[[590,9]]},"1412":{"position":[[1857,9]]},"1414":{"position":[[529,9]]},"1468":{"position":[[292,9]]},"1483":{"position":[[275,9],[826,9]]},"1503":{"position":[[30,9]]},"1535":{"position":[[53,9]]},"1547":{"position":[[458,9]]},"1549":{"position":[[529,9]]},"1551":{"position":[[214,9]]},"1566":{"position":[[261,9]]},"1572":{"position":[[151,9],[318,9]]},"1582":{"position":[[117,9]]},"1609":{"position":[[418,9]]},"1613":{"position":[[41,9]]},"1615":{"position":[[41,9]]},"1617":{"position":[[93,9],[346,9],[588,9],[865,9]]},"1619":{"position":[[82,9]]},"1663":{"position":[[276,9]]},"1779":{"position":[[37,9],[74,9]]},"1781":{"position":[[37,9],[74,9]]},"1843":{"position":[[43,9]]},"1867":{"position":[[386,9]]},"1883":{"position":[[136,9]]},"1913":{"position":[[6,9],[48,9],[80,9],[126,9],[170,9]]},"1919":{"position":[[6,9],[46,9]]},"1925":{"position":[[6,9],[50,9]]},"1927":{"position":[[6,9]]},"1933":{"position":[[6,9],[50,9]]},"1935":{"position":[[6,9]]},"1941":{"position":[[6,9],[38,9],[82,9]]},"1943":{"position":[[6,9]]},"1947":{"position":[[159,9]]},"1951":{"position":[[6,9]]},"1953":{"position":[[6,9]]},"1965":{"position":[[31,9]]},"1977":{"position":[[6,9],[42,9]]},"1979":{"position":[[6,9],[42,9],[78,9],[120,9],[168,9]]},"2055":{"position":[[299,9]]},"2269":{"position":[[86,9],[122,9]]},"2294":{"position":[[415,9],[464,9],[504,9],[543,9],[580,9]]},"2343":{"position":[[128,9]]},"2357":{"position":[[128,9],[200,9]]},"2387":{"position":[[13,9]]},"2501":{"position":[[266,9],[290,9],[335,9],[383,9]]},"2510":{"position":[[59,9]]},"2555":{"position":[[190,9]]},"2557":{"position":[[49,9]]},"2573":{"position":[[218,9]]},"2637":{"position":[[15,9]]},"2641":{"position":[[29,9]]},"2664":{"position":[[15,9]]},"2668":{"position":[[29,9]]},"2711":{"position":[[61,9],[97,9],[133,9]]},"2713":{"position":[[464,9],[859,9],[891,9],[1781,9]]},"2725":{"position":[[657,9],[1649,9]]},"2727":{"position":[[180,9]]},"2774":{"position":[[365,9],[540,9]]},"2776":{"position":[[72,9],[108,9]]},"2805":{"position":[[120,9]]},"2807":{"position":[[157,9]]},"2813":{"position":[[131,9],[167,9],[730,9],[778,9]]},"2817":{"position":[[280,9],[316,9]]},"2819":{"position":[[88,9],[136,9]]},"2821":{"position":[[119,9],[167,9]]},"2836":{"position":[[81,9],[178,9],[226,9],[1309,9],[1391,9],[1439,9]]},"2856":{"position":[[1989,9]]},"2875":{"position":[[569,9]]},"2881":{"position":[[489,9],[525,9],[561,9]]},"2887":{"position":[[107,9],[131,9],[176,9]]},"2889":{"position":[[198,9],[234,9],[270,9]]},"2891":{"position":[[52,9],[91,9]]},"2897":{"position":[[257,9],[293,9],[714,9]]},"2899":{"position":[[297,9]]},"2901":{"position":[[80,9]]},"2905":{"position":[[129,9],[165,9]]},"2925":{"position":[[100,9]]},"2927":{"position":[[37,9]]},"2929":{"position":[[93,9]]},"2933":{"position":[[80,9]]},"2935":{"position":[[96,9],[133,9]]},"2937":{"position":[[174,9],[211,9]]},"2941":{"position":[[100,9]]},"2943":{"position":[[37,9]]},"2945":{"position":[[93,9]]},"2949":{"position":[[83,9]]},"2951":{"position":[[80,9]]},"2955":{"position":[[100,9]]},"2957":{"position":[[37,9]]},"2959":{"position":[[93,9]]},"2963":{"position":[[81,9]]},"3069":{"position":[[64,9],[320,9]]},"3138":{"position":[[184,9]]},"3144":{"position":[[74,9],[110,9],[146,9],[194,9]]},"3154":{"position":[[88,9]]},"3156":{"position":[[106,9]]},"3158":{"position":[[97,9]]},"3189":{"position":[[439,9]]},"3194":{"position":[[91,9],[165,9],[249,9]]},"3287":{"position":[[1300,9]]},"3307":{"position":[[20,9]]},"3329":{"position":[[16,9],[118,9],[157,9],[197,9],[241,9],[283,9]]},"3373":{"position":[[147,9],[183,9],[219,9]]},"3397":{"position":[[58,9],[292,9],[890,9]]},"3399":{"position":[[52,9],[114,9],[150,9],[198,9]]},"3401":{"position":[[57,9],[270,9]]},"3430":{"position":[[89,9],[167,9],[244,9],[328,9],[397,9],[671,9],[692,9],[933,9],[954,9],[1339,9],[1360,9],[1629,9],[1664,9],[1732,9],[1756,9],[2594,9],[2725,9],[2855,9],[2976,9],[3082,9],[3937,9],[4050,9],[4162,9],[4281,9],[4385,9]]},"3432":{"position":[[2811,9],[2932,9],[3038,9],[5154,9],[5267,9],[5379,9],[5498,9],[5602,9]]},"3452":{"position":[[3410,9],[3613,9],[3757,9]]},"3468":{"position":[[177,9],[212,9]]},"3601":{"position":[[227,9],[342,9],[456,9],[577,9],[683,9],[1704,9],[1739,9]]},"3630":{"position":[[95,9],[131,9],[167,9],[215,9]]},"3656":{"position":[[41,9]]},"3676":{"position":[[18,9]]},"3686":{"position":[[657,9],[699,9]]},"3708":{"position":[[736,9],[769,9],[801,9]]},"3910":{"position":[[1124,9]]},"3914":{"position":[[1249,9]]},"3916":{"position":[[6406,9],[6609,9],[6753,9]]},"3932":{"position":[[1748,9],[1772,9],[1817,9]]},"3934":{"position":[[113,9],[434,9],[2658,9],[2757,9],[2832,9],[2897,9],[3116,9]]},"3956":{"position":[[373,9],[406,9],[438,9]]},"3996":{"position":[[880,9]]}}}],["mictxd",{"_index":4588,"t":{"1511":{"position":[[363,6]]}}}],["middlewar",{"_index":6050,"t":{"2243":{"position":[[80,10],[103,10]]},"2573":{"position":[[263,10]]},"2579":{"position":[[40,10],[93,10]]},"2581":{"position":[[129,10],[632,10]]},"2587":{"position":[[38,10]]},"2589":{"position":[[57,10]]}}}],["midnight",{"_index":6330,"t":{"2424":{"position":[[196,8]]}}}],["migrat",{"_index":3398,"t":{"706":{"position":[[42,10],[285,9]]},"711":{"position":[[35,10]]},"713":{"position":[[4,9],[86,9],[647,10],[690,9],[727,10],[745,10]]},"717":{"position":[[24,9]]},"719":{"position":[[58,9],[83,9]]},"724":{"position":[[59,10],[92,10]]},"726":{"position":[[10,10]]},"730":{"position":[[7,10],[319,7]]},"734":{"position":[[100,9],[662,10]]},"939":{"position":[[127,9]]},"1062":{"position":[[14,9],[111,9]]},"1139":{"position":[[34,9]]},"1319":{"position":[[42,10],[286,9]]},"1759":{"position":[[37,9]]},"2387":{"position":[[80,7]]},"2774":{"position":[[149,10],[306,10],[467,10]]},"2931":{"position":[[4,9]]},"2947":{"position":[[4,9]]},"2951":{"position":[[751,10]]},"2961":{"position":[[4,9]]},"3131":{"position":[[169,10]]},"3950":{"position":[[335,9]]},"3982":{"position":[[767,9]]},"3986":{"position":[[1486,9]]},"3992":{"position":[[3073,9],[3329,9],[3713,9],[3761,9]]}}}],["migrationsassembl",{"_index":3412,"t":{"713":{"position":[[612,18]]},"734":{"position":[[620,18]]},"2951":{"position":[[728,18]]}}}],["migrationsoper",{"_index":3471,"t":{"734":{"position":[[6945,20]]}}}],["million",{"_index":7714,"t":{"3236":{"position":[[11,7],[108,7],[199,7]]}}}],["mime",{"_index":5383,"t":{"1741":{"position":[[516,4]]},"2100":{"position":[[10,4]]},"3918":{"position":[[1123,4]]},"3940":{"position":[[35,4],[120,4],[777,4]]}}}],["min",{"_index":3842,"t":{"971":{"position":[[49,3],[86,3],[142,3],[205,3],[274,3]]},"1635":{"position":[[74,3],[136,3],[509,3],[518,3]]},"2751":{"position":[[303,3]]}}}],["min_uptim",{"_index":6890,"t":{"2751":{"position":[[303,10]]}}}],["minasync",{"_index":3843,"t":{"971":{"position":[[346,8],[394,8],[461,8],[535,8],[615,8]]}}}],["minhoz",{"_index":4768,"t":{"1511":{"position":[[2292,6]]}}}],["minim",{"_index":6077,"t":{"2266":{"position":[[242,7]]},"2276":{"position":[[46,7]]},"3932":{"position":[[7,7],[536,7],[2435,7],[2458,7],[2538,7]]}}}],["minimumlevel",{"_index":8117,"t":{"3432":{"position":[[481,12],[834,12],[1049,12],[1240,12]]},"3434":{"position":[[589,12],[794,12],[866,12],[1113,12],[1421,12],[1564,12]]}}}],["minimumsamesitepolici",{"_index":7128,"t":{"2848":{"position":[[1764,21]]}}}],["miniprofil",{"_index":596,"t":{"98":{"position":[[59,12]]},"2981":{"position":[[42,12],[364,12]]},"3460":{"position":[[18,12]]},"3654":{"position":[[11,12]]},"3912":{"position":[[2261,11]]},"3916":{"position":[[2651,11]]},"3956":{"position":[[3188,12]]},"3974":{"position":[[338,12]]},"3978":{"position":[[1798,12]]},"3980":{"position":[[487,12],[742,12]]},"3992":{"position":[[291,12],[2003,12]]},"3994":{"position":[[433,12],[1192,12]]}}}],["minlength",{"_index":3060,"t":{"587":{"position":[[232,9],[444,9]]},"597":{"position":[[236,9]]},"599":{"position":[[266,9]]},"1635":{"position":[[526,9],[547,9]]}}}],["minut",{"_index":2653,"t":{"480":{"position":[[129,8],[156,8],[519,8],[538,8]]},"494":{"position":[[110,8],[129,8]]},"1474":{"position":[[430,7]]},"2418":{"position":[[83,7],[140,7],[276,7],[596,7],[829,7],[901,7],[967,7]]},"2424":{"position":[[106,6]]},"3766":{"position":[[122,8]]},"3774":{"position":[[282,8]]},"3804":{"position":[[772,8]]},"3808":{"position":[[265,8],[659,8]]},"3817":{"position":[[385,8]]},"3819":{"position":[[431,8],[504,8],[597,8]]},"3964":{"position":[[431,7]]}}}],["minvalu",{"_index":6261,"t":{"2383":{"position":[[264,8]]}}}],["miss",{"_index":10053,"t":{"3982":{"position":[[820,7]]}}}],["mit",{"_index":666,"t":{"106":{"position":[[10,3]]},"401":{"position":[[253,3]]},"1507":{"position":[[17,3]]},"1551":{"position":[[900,3]]},"3065":{"position":[[304,3]]},"3642":{"position":[[378,3]]},"3702":{"position":[[2016,3],[2106,3]]},"3706":{"position":[[2052,3]]}}}],["mjenkin",{"_index":4423,"t":{"1485":{"position":[[49,8]]}}}],["mk",{"_index":6603,"t":{"2559":{"position":[[1677,2],[1684,2],[1687,2]]}}}],["mkdir",{"_index":4490,"t":{"1495":{"position":[[1029,5]]},"1499":{"position":[[241,5]]}}}],["mm",{"_index":5964,"t":{"2087":{"position":[[67,2],[76,2]]},"2361":{"position":[[197,2],[206,2],[289,2],[298,2],[594,2],[603,2]]},"2398":{"position":[[68,2],[77,2],[236,2],[245,2]]},"2400":{"position":[[99,2],[108,2]]},"2402":{"position":[[170,2],[179,2]]},"2406":{"position":[[313,2],[322,2],[620,2],[629,2]]},"2409":{"position":[[107,2],[116,2]]},"2411":{"position":[[95,2],[104,2]]},"2413":{"position":[[95,2],[104,2]]},"2415":{"position":[[300,2],[309,2]]},"2426":{"position":[[116,2],[125,2]]},"2428":{"position":[[118,2],[127,2]]},"2430":{"position":[[102,2],[111,2]]},"2432":{"position":[[102,2],[111,2]]},"2434":{"position":[[304,2],[313,2],[641,2],[650,2]]},"2438":{"position":[[172,2],[181,2]]},"2440":{"position":[[208,2],[217,2],[581,2],[590,2]]},"2442":{"position":[[413,2],[422,2],[645,2],[654,2],[918,2],[927,2],[1201,2],[1210,2],[1435,2],[1444,2],[1692,2],[1701,2],[1920,2],[1929,2]]},"2468":{"position":[[136,2],[145,2]]},"2470":{"position":[[194,2],[203,2]]},"2472":{"position":[[325,2],[334,2]]},"2751":{"position":[[285,2],[294,2]]},"3430":{"position":[[3750,2],[3759,2]]},"3432":{"position":[[1480,2],[1671,2],[1922,2],[4967,2],[4976,2]]}}}],["mn",{"_index":6612,"t":{"2559":{"position":[[1758,2],[1764,2],[1767,2]]}}}],["mo",{"_index":6487,"t":{"2559":{"position":[[556,2]]}}}],["mobil",{"_index":5136,"t":{"1617":{"position":[[168,6],[663,6]]},"1653":{"position":[[134,6]]}}}],["mode",{"_index":2792,"t":{"516":{"position":[[646,4]]},"713":{"position":[[306,4]]},"734":{"position":[[320,4]]},"2749":{"position":[[164,4],[364,4]]},"2751":{"position":[[167,4]]},"3080":{"position":[[732,4],[932,4]]},"3126":{"position":[[293,4]]}}}],["model",{"_index":3358,"t":{"696":{"position":[[751,5]]},"713":{"position":[[167,5]]},"734":{"position":[[181,5]]},"793":{"position":[[13,5]]},"919":{"position":[[195,8]]},"1801":{"position":[[670,5],[1393,5],[1439,5],[1549,5],[1910,5],[1972,5],[2600,5],[3125,5]]},"1863":{"position":[[231,5]]},"3734":{"position":[[330,5],[402,5]]},"3736":{"position":[[44,5]]},"3738":{"position":[[46,5],[78,5]]},"3740":{"position":[[174,5],[206,5],[537,5],[569,5]]},"3992":{"position":[[3164,5]]}}}],["modelbind",{"_index":3190,"t":{"610":{"position":[[85,11],[163,11]]},"1919":{"position":[[71,12]]}}}],["modelbuild",{"_index":3619,"t":{"832":{"position":[[466,12],[479,12],[516,12],[531,12],[581,12]]},"846":{"position":[[605,12],[618,12]]},"2935":{"position":[[587,12],[600,12]]},"2937":{"position":[[684,12],[697,12]]}}}],["modelqueri",{"_index":9918,"t":{"3974":{"position":[[439,10]]}}}],["modelst",{"_index":3248,"t":{"639":{"position":[[402,10]]},"1887":{"position":[[193,10],[323,10]]},"3934":{"position":[[1442,10]]}}}],["modeltoqueri",{"_index":5120,"t":{"1609":{"position":[[678,12]]},"1661":{"position":[[382,12]]},"3023":{"position":[[379,12]]}}}],["modifi",{"_index":1660,"t":{"227":{"position":[[71,8]]},"570":{"position":[[986,8]]},"933":{"position":[[726,8],[937,8]]},"1325":{"position":[[126,8]]},"2937":{"position":[[1163,8],[1408,8]]}}}],["modul",{"_index":2048,"t":{"310":{"position":[[666,6],[704,6],[863,6]]},"1468":{"position":[[143,7],[226,7]]},"1641":{"position":[[176,6]]},"1653":{"position":[[0,6],[124,6],[224,6]]},"3916":{"position":[[7211,6],[7816,6],[8667,6]]}}}],["module1",{"_index":6764,"t":{"2623":{"position":[[102,7],[206,7]]},"2625":{"position":[[470,7]]}}}],["module2",{"_index":6765,"t":{"2623":{"position":[[113,7],[229,7]]},"2625":{"position":[[493,7]]}}}],["mog",{"_index":4817,"t":{"1511":{"position":[[2897,3]]}}}],["mon",{"_index":6306,"t":{"2420":{"position":[[225,3],[1218,3],[1283,3],[2223,3]]}}}],["money",{"_index":3136,"t":{"606":{"position":[[92,5]]},"617":{"position":[[232,5],[257,5]]}}}],["mongocli",{"_index":6745,"t":{"2609":{"position":[[63,11]]}}}],["mongoclientset",{"_index":6734,"t":{"2603":{"position":[[159,19]]}}}],["mongodb",{"_index":541,"t":{"91":{"position":[[388,7],[403,7]]},"102":{"position":[[172,7]]},"2599":{"position":[[0,7],[65,7]]},"2601":{"position":[[18,7],[61,7]]},"2603":{"position":[[99,7]]},"2609":{"position":[[24,7]]},"2611":{"position":[[35,7],[49,7]]},"3930":{"position":[[1445,7]]},"3950":{"position":[[224,7]]},"3972":{"position":[[38,7]]}}}],["mongorepositori",{"_index":6738,"t":{"2605":{"position":[[87,15],[144,15],[164,15],[182,15]]},"2607":{"position":[[16,15],[449,15]]},"2609":{"position":[[95,15]]}}}],["mongourl",{"_index":6735,"t":{"2603":{"position":[[215,8]]}}}],["monit",{"_index":6895,"t":{"2754":{"position":[[4,5]]},"3082":{"position":[[13,5]]}}}],["monitor",{"_index":766,"t":{"114":{"position":[[87,7],[1458,7]]},"2715":{"position":[[87,7],[149,7]]},"3446":{"position":[[259,7],[562,7],[1933,7]]},"3448":{"position":[[255,7],[298,7]]},"3450":{"position":[[311,7]]},"3770":{"position":[[4543,7]]},"3785":{"position":[[1412,7],[1428,7]]},"3812":{"position":[[2308,7],[2324,7]]},"3928":{"position":[[1137,7],[2495,7]]}}}],["monk",{"_index":3174,"t":{"606":{"position":[[534,4]]}}}],["monksoul",{"_index":522,"t":{"89":{"position":[[69,8]]},"158":{"position":[[4,8]]},"170":{"position":[[18,8],[46,8]]},"196":{"position":[[40,8]]},"606":{"position":[[721,8]]},"960":{"position":[[745,8],[850,8],[1068,8],[1409,8]]},"1377":{"position":[[624,8],[742,8]]},"1505":{"position":[[31,8],[87,8]]},"1509":{"position":[[291,8]]},"2132":{"position":[[263,8],[382,8]]},"2678":{"position":[[40,8]]},"3065":{"position":[[236,8],[257,8]]},"3642":{"position":[[310,8],[331,8]]},"3706":{"position":[[1984,8],[2005,8]]},"3934":{"position":[[2592,8]]}}}],["mono",{"_index":1380,"t":{"190":{"position":[[481,4],[488,4],[742,4],[956,4],[1187,4],[1409,4]]}}}],["month",{"_index":6297,"t":{"2418":{"position":[[108,5],[165,5],[404,5]]},"3234":{"position":[[81,5],[137,5]]}}}],["monthli",{"_index":2657,"t":{"480":{"position":[[286,7],[312,7],[646,7],[664,7]]},"494":{"position":[[237,7],[255,7]]},"2424":{"position":[[256,7]]},"3804":{"position":[[958,7]]},"3808":{"position":[[335,7]]}}}],["more",{"_index":3274,"t":{"655":{"position":[[269,4]]},"3702":{"position":[[2717,4]]}}}],["movenext",{"_index":8965,"t":{"3832":{"position":[[2059,8],[3009,8],[3820,8],[4770,8]]}}}],["movi",{"_index":3092,"t":{"587":{"position":[[1232,6],[1389,5],[1398,5],[1484,5]]}}}],["mozilla",{"_index":779,"t":{"114":{"position":[[415,7]]},"3446":{"position":[[890,7]]},"3452":{"position":[[1547,7]]},"3916":{"position":[[4543,7]]},"3928":{"position":[[1452,7]]}}}],["mp3",{"_index":3169,"t":{"606":{"position":[[441,3],[445,3]]},"617":{"position":[[1227,3],[1250,3]]}}}],["mr",{"_index":4798,"t":{"1511":{"position":[[2644,2]]},"2559":{"position":[[1735,2],[1743,2]]}}}],["ms",{"_index":3273,"t":{"655":{"position":[[214,2]]},"1472":{"position":[[25,2]]},"2559":{"position":[[1701,2],[1707,2],[1720,2]]},"3080":{"position":[[463,2]]}}}],["msbuild",{"_index":7922,"t":{"3329":{"position":[[275,7]]}}}],["msdn",{"_index":7150,"t":{"2856":{"position":[[2065,4]]},"3291":{"position":[[157,4],[259,4],[805,4],[903,4],[1943,4],[2054,4]]}}}],["msg",{"_index":7584,"t":{"3194":{"position":[[345,3],[376,3],[382,3]]},"3978":{"position":[[875,3],[888,3]]}}}],["mslocatorrepositori",{"_index":5986,"t":{"2127":{"position":[[4,19]]},"2129":{"position":[[4,19]]}}}],["msrepositori",{"_index":3926,"t":{"1064":{"position":[[327,12],[399,12],[504,12],[521,12],[536,12],[686,12],[833,12]]},"1066":{"position":[[882,12],[991,12],[1049,12],[1066,12],[1081,12],[1231,12],[1377,12],[1532,12]]},"2125":{"position":[[4,12]]}}}],["mssql",{"_index":3508,"t":{"759":{"position":[[0,5],[24,5]]},"905":{"position":[[7,5]]},"907":{"position":[[7,5]]},"909":{"position":[[7,5]]},"1037":{"position":[[16,5]]}}}],["mssqldbcontextloc",{"_index":3735,"t":{"905":{"position":[[78,21]]},"907":{"position":[[72,21]]},"909":{"position":[[67,21]]},"1037":{"position":[[81,21],[372,21],[426,21],[506,21],[580,21]]}}}],["mssqllocaldb",{"_index":1810,"t":{"247":{"position":[[328,12]]}}}],["mssqlrepositori",{"_index":3734,"t":{"905":{"position":[[28,15]]},"907":{"position":[[28,15]]},"909":{"position":[[28,15]]},"1037":{"position":[[37,15],[395,15],[449,15]]}}}],["mstest",{"_index":7986,"t":{"3356":{"position":[[22,6]]}}}],["mudata",{"_index":4428,"t":{"1485":{"position":[[137,6],[260,6],[277,6]]},"1488":{"position":[[647,6],[704,6]]},"1495":{"position":[[591,6],[648,6]]},"1497":{"position":[[92,6],[135,6]]},"1499":{"position":[[163,6]]}}}],["mulan",{"_index":8545,"t":{"3702":{"position":[[2278,5],[2366,5],[2409,5],[2700,5]]}}}],["mulanpsl",{"_index":2397,"t":{"399":{"position":[[584,8]]},"401":{"position":[[232,8]]}}}],["muliti",{"_index":9197,"t":{"3916":{"position":[[7830,6]]}}}],["multi",{"_index":2920,"t":{"558":{"position":[[162,5],[253,5],[299,5],[343,5]]}}}],["multipart",{"_index":326,"t":{"19":{"position":[[882,9]]},"1741":{"position":[[38,9]]},"3522":{"position":[[119,9],[256,9],[400,9],[593,9],[772,9],[1336,9],[1500,9]]},"3563":{"position":[[116,9],[242,9],[446,9],[832,9],[964,9],[1048,9],[1146,9],[1291,9]]},"3916":{"position":[[7248,9],[7860,9],[8704,9]]},"3918":{"position":[[1634,9],[1776,9],[1921,9],[2114,9],[2278,9]]},"3950":{"position":[[678,9]]},"3966":{"position":[[906,9]]},"3984":{"position":[[46,9]]}}}],["multipl",{"_index":7137,"t":{"2856":{"position":[[331,8]]}}}],["multipleactiveresultset",{"_index":1624,"t":{"220":{"position":[[432,24]]},"520":{"position":[[221,24]]},"688":{"position":[[433,24]]},"901":{"position":[[221,24]]},"1054":{"position":[[463,24]]},"1056":{"position":[[752,24]]},"1315":{"position":[[221,24]]}}}],["multitenantdbcontext",{"_index":7258,"t":{"2925":{"position":[[39,20],[245,20],[281,20],[341,20],[379,20]]},"2927":{"position":[[361,20]]},"2931":{"position":[[40,20],[86,20]]},"2941":{"position":[[39,20],[245,20],[281,20],[341,20],[379,20]]},"2943":{"position":[[357,20]]},"2947":{"position":[[40,20],[86,20]]},"2955":{"position":[[39,20],[245,20],[281,20],[341,20],[379,20]]},"2957":{"position":[[361,20]]},"2961":{"position":[[40,20],[86,20]]}}}],["multitenantdbcontextloc",{"_index":7259,"t":{"2925":{"position":[[303,27],[463,27]]},"2927":{"position":[[383,27]]},"2929":{"position":[[266,27]]},"2941":{"position":[[303,27],[463,27]]},"2943":{"position":[[379,27]]},"2945":{"position":[[266,27]]},"2955":{"position":[[303,27],[463,27]]},"2957":{"position":[[383,27]]},"2959":{"position":[[266,27]]},"2971":{"position":[[122,27],[327,27]]}}}],["muphalem",{"_index":4651,"t":{"1511":{"position":[[928,8]]}}}],["musaa",{"_index":4447,"t":{"1488":{"position":[[423,6]]},"1495":{"position":[[423,6]]}}}],["mv",{"_index":4511,"t":{"1499":{"position":[[355,2]]},"2559":{"position":[[723,2]]}}}],["mvc",{"_index":148,"t":{"11":{"position":[[496,3]]},"93":{"position":[[47,3],[51,3],[108,3],[352,3],[356,3],[431,3]]},"112":{"position":[[208,3]]},"199":{"position":[[72,3],[138,3]]},"435":{"position":[[137,3],[463,3]]},"583":{"position":[[17,3],[26,3]]},"587":{"position":[[729,3],[988,3],[1001,3],[2056,3],[2102,3],[2235,3]]},"589":{"position":[[42,3]]},"591":{"position":[[5,3]]},"602":{"position":[[280,3]]},"608":{"position":[[453,3]]},"625":{"position":[[191,3]]},"627":{"position":[[18,3],[71,3]]},"1392":{"position":[[159,3]]},"1408":{"position":[[596,3]]},"1410":{"position":[[611,3]]},"1412":{"position":[[1878,3]]},"1414":{"position":[[34,3],[550,3]]},"1572":{"position":[[97,3],[126,3],[172,3],[339,3],[539,3]]},"1609":{"position":[[439,3]]},"1613":{"position":[[62,3]]},"1615":{"position":[[62,3]]},"1617":{"position":[[114,3],[367,3],[609,3],[886,3]]},"1619":{"position":[[103,3]]},"1653":{"position":[[22,3]]},"1661":{"position":[[461,3]]},"1663":{"position":[[223,3],[297,3],[455,3]]},"1883":{"position":[[157,3]]},"1898":{"position":[[0,3]]},"1905":{"position":[[60,3]]},"1907":{"position":[[132,3],[459,3],[557,3]]},"1913":{"position":[[69,3],[101,3],[147,3],[191,3],[965,3]]},"1919":{"position":[[27,3],[67,3]]},"1925":{"position":[[27,3],[71,3]]},"1927":{"position":[[27,3]]},"1933":{"position":[[27,3],[71,3],[637,3]]},"1935":{"position":[[27,3]]},"1939":{"position":[[24,3]]},"1941":{"position":[[27,3],[59,3],[103,3],[619,3]]},"1943":{"position":[[27,3]]},"1947":{"position":[[191,3]]},"1951":{"position":[[27,3]]},"1953":{"position":[[27,3]]},"1965":{"position":[[63,3]]},"1979":{"position":[[709,3]]},"2294":{"position":[[525,3]]},"2343":{"position":[[149,3]]},"2357":{"position":[[149,3],[221,3]]},"2713":{"position":[[485,3],[880,3],[1802,3]]},"3023":{"position":[[458,3]]},"3047":{"position":[[183,3]]},"3287":{"position":[[1321,3]]},"3317":{"position":[[34,3],[51,3],[134,3]]},"3319":{"position":[[101,3],[114,3],[207,3]]},"3397":{"position":[[79,3],[313,3],[911,3]]},"3399":{"position":[[73,3]]},"3452":{"position":[[3431,3],[3634,3],[3778,3]]},"3656":{"position":[[62,3]]},"3676":{"position":[[39,3]]},"3686":{"position":[[720,3]]},"3708":{"position":[[790,3],[822,3]]},"3914":{"position":[[1270,3]]},"3916":{"position":[[6427,3],[6630,3],[6774,3]]},"3924":{"position":[[1396,3]]},"3934":{"position":[[521,3]]},"3956":{"position":[[7,3],[427,3],[459,3],[3089,3]]},"3966":{"position":[[1833,3]]},"3980":{"position":[[615,3]]},"3986":{"position":[[402,3]]},"3990":{"position":[[215,3],[553,3]]},"3992":{"position":[[2853,3],[3845,3]]},"3996":{"position":[[901,3]]},"4002":{"position":[[7,3],[30,3],[67,3]]},"4006":{"position":[[444,3]]}}}],["mvccontrol",{"_index":3234,"t":{"627":{"position":[[146,13]]},"1572":{"position":[[231,13]]},"1663":{"position":[[356,13]]}}}],["mvcnewtonsoftjsonopt",{"_index":6227,"t":{"2357":{"position":[[1465,24]]},"2379":{"position":[[1192,24]]}}}],["mvcoption",{"_index":5815,"t":{"1907":{"position":[[279,10],[493,10]]},"1913":{"position":[[1302,10]]},"1919":{"position":[[765,10]]},"1925":{"position":[[1494,10]]},"1927":{"position":[[811,10]]},"1933":{"position":[[931,10]]},"1935":{"position":[[426,10]]},"1941":{"position":[[1182,10]]},"1943":{"position":[[376,10]]},"1951":{"position":[[823,10]]},"1961":{"position":[[28,10],[109,10]]}}}],["mx",{"_index":6658,"t":{"2559":{"position":[[2272,2]]}}}],["myaction",{"_index":5408,"t":{"1749":{"position":[[96,8]]},"1927":{"position":[[967,8]]}}}],["myactionattribut",{"_index":5864,"t":{"1927":{"position":[[88,17],[856,17],[924,17]]}}}],["myactionfilt",{"_index":5863,"t":{"1925":{"position":[[188,14],[1539,14],[1604,14],[1676,14],[1777,14],[1818,14]]},"1929":{"position":[[349,14]]},"1961":{"position":[[181,14],[399,14]]}}}],["myactionfilterattribut",{"_index":5822,"t":{"1909":{"position":[[351,23],[460,23],[577,23],[701,23]]},"1929":{"position":[[169,23]]},"1963":{"position":[[76,23]]}}}],["myapp",{"_index":8497,"t":{"3670":{"position":[[189,5]]}}}],["myassemblyfixtur",{"_index":8013,"t":{"3389":{"position":[[225,17],[304,17],[689,17],[1128,17],[1200,17],[1409,17]]},"3391":{"position":[[476,17],[595,17],[864,17]]},"3393":{"position":[[757,17],[933,17],[1282,17]]}}}],["myauthorizationfilt",{"_index":5831,"t":{"1913":{"position":[[294,21],[1347,21],[1419,21],[1498,21],[1606,21],[1654,21]]},"1915":{"position":[[335,21]]}}}],["myauthorizationfilterattribut",{"_index":5851,"t":{"1915":{"position":[[169,30]]}}}],["mybenchmark",{"_index":1331,"t":{"188":{"position":[[178,12]]}}}],["mycat",{"_index":7452,"t":{"3126":{"position":[[43,5],[53,5]]}}}],["mycategori",{"_index":8080,"t":{"3422":{"position":[[171,10]]},"3436":{"position":[[236,10]]}}}],["mychannelhandl",{"_index":6124,"t":{"2313":{"position":[[200,16],[677,16],[786,16]]},"2315":{"position":[[100,16],[369,16]]}}}],["myclassfixtur",{"_index":8019,"t":{"3391":{"position":[[123,14],[199,14],[397,14],[521,14],[623,14],[965,14]]},"3393":{"position":[[678,14],[802,14],[961,14],[1383,14]]}}}],["myclientmethodnam",{"_index":2142,"t":{"327":{"position":[[211,18]]},"3700":{"position":[[211,18]]}}}],["mycollect",{"_index":8025,"t":{"3393":{"position":[[445,12],[474,12],[623,12]]}}}],["mycollectionfixtur",{"_index":8023,"t":{"3393":{"position":[[254,19],[335,19],[508,19],[849,19],[991,19],[1486,19]]}}}],["myconfig",{"_index":2603,"t":{"455":{"position":[[556,8],[807,8],[1075,8]]}}}],["mydbcontext",{"_index":2832,"t":{"528":{"position":[[416,11],[469,11],[599,11]]}}}],["mydbcontextlocator2",{"_index":7454,"t":{"3126":{"position":[[192,19]]}}}],["myexcept",{"_index":5872,"t":{"1935":{"position":[[588,11]]}}}],["myexceptionattribut",{"_index":5871,"t":{"1935":{"position":[[88,20],[471,20],[542,20]]}}}],["myexceptionfilt",{"_index":5869,"t":{"1933":{"position":[[158,17],[976,17],[1044,17],[1119,17],[1223,17],[1267,17]]},"1937":{"position":[[313,17]]}}}],["myexceptionfilterattribut",{"_index":5873,"t":{"1937":{"position":[[169,26]]}}}],["myfur",{"_index":5179,"t":{"1643":{"position":[[138,5]]}}}],["myfurionappservic",{"_index":5182,"t":{"1647":{"position":[[201,18]]}}}],["myget",{"_index":5180,"t":{"1643":{"position":[[235,5]]}}}],["mygroup",{"_index":8480,"t":{"3634":{"position":[[92,7]]}}}],["myhub",{"_index":7563,"t":{"3170":{"position":[[163,5]]}}}],["myhubcontext",{"_index":7562,"t":{"3170":{"position":[[92,12],[312,12]]}}}],["myjob",{"_index":6022,"t":{"2175":{"position":[[120,5],[369,5]]},"2442":{"position":[[1530,5]]},"3762":{"position":[[9,5],[29,5],[69,5],[92,5],[106,5],[470,5],[569,5],[680,5],[791,5],[902,5],[1012,5],[1123,5]]},"3764":{"position":[[79,5],[87,5],[178,5],[190,5],[196,5],[290,5],[303,5],[309,5],[403,5],[416,5],[422,5],[516,5],[529,5],[535,5],[629,5],[642,5],[648,5],[742,5],[755,5],[761,5]]},"3766":{"position":[[106,5],[351,5],[457,5],[562,5],[667,5],[772,5],[881,5],[987,5],[1102,5],[1208,5],[1323,5],[1438,5],[1543,5],[1649,5]]},"3768":{"position":[[128,5],[204,5],[244,5],[267,5],[281,5],[639,5],[1139,5],[1639,5],[2142,5],[2538,5],[2655,5],[2765,5],[2875,5],[2986,5],[3097,5]]},"3770":{"position":[[76,5],[116,5],[139,5],[153,5],[421,5],[498,5],[1309,5],[1349,5],[1372,5],[1386,5],[1818,5],[1880,5],[2111,5],[2760,5],[2800,5],[2823,5],[2837,5],[3472,5],[3657,5],[3771,5],[3908,5],[4625,5],[4665,5],[4688,5],[4702,5],[5093,5],[5142,5],[5188,5],[5420,5]]},"3772":{"position":[[181,5],[503,5],[879,5],[984,5],[1100,5],[1217,5],[1334,5],[1451,5],[1568,5],[1685,5],[1791,5],[1908,5],[2025,5]]},"3774":{"position":[[156,5],[262,5],[361,5],[401,5],[424,5],[438,5],[763,5],[869,5],[977,5],[1083,5],[1198,5],[1304,5],[1419,5],[1533,5],[1639,5]]},"3779":{"position":[[266,5],[334,5],[437,5],[703,5],[1049,5]]},"3781":{"position":[[127,5],[250,5],[285,5],[328,5]]},"3783":{"position":[[83,5],[123,5],[146,5],[160,5],[654,5],[774,5],[894,5],[1015,5],[1136,5]]},"3785":{"position":[[174,5],[1003,5],[1214,5],[1527,5],[1592,5]]},"3789":{"position":[[13,5]]},"3791":{"position":[[90,5],[130,5],[201,5],[215,5],[610,5],[650,5],[773,5],[787,5],[1396,5],[1449,5],[1566,5],[1580,5]]},"3795":{"position":[[73,5],[113,5],[136,5],[150,5]]},"3806":{"position":[[349,5],[470,5],[613,5],[756,5],[899,5],[1043,5],[1186,5],[1743,5],[1875,5],[2017,5],[2159,5],[2301,5],[2443,5],[2585,5],[3287,5],[3327,5],[3350,5],[3364,5],[3703,5],[3827,5]]},"3808":{"position":[[496,5],[587,5],[721,5],[761,5],[784,5],[798,5],[1137,5],[1255,5],[1373,5],[1494,5],[1615,5],[1942,5],[1982,5],[2005,5],[2019,5],[2358,5],[2482,5],[2606,5],[2730,5],[2854,5],[3354,5]]},"3810":{"position":[[1038,5]]},"3817":{"position":[[338,5],[681,5],[1725,5]]},"3821":{"position":[[202,5]]},"3826":{"position":[[391,5],[435,5],[488,5],[559,5]]},"3828":{"position":[[1110,5]]},"3832":{"position":[[383,5],[408,5],[448,5],[471,5],[485,5],[960,5],[1174,5],[1294,5],[1414,5],[1534,5],[1830,5],[1967,5],[3591,5],[3728,5]]},"3842":{"position":[[713,5],[838,5],[1304,5],[1407,5],[1878,5],[1989,5],[2481,5],[2611,5],[3114,5],[3236,5]]},"3844":{"position":[[1291,5]]},"3852":{"position":[[157,5]]},"3854":{"position":[[159,5]]},"3876":{"position":[[90,5]]},"3896":{"position":[[127,5]]}}}],["myjob_trigger1",{"_index":8659,"t":{"3764":{"position":[[196,14],[309,14],[422,14],[535,14],[648,14],[761,14]]}}}],["mykey",{"_index":2575,"t":{"445":{"position":[[434,5],[457,5]]}}}],["mylang",{"_index":6415,"t":{"2542":{"position":[[220,6],[271,6]]}}}],["mylogfilterattribut",{"_index":5827,"t":{"1909":{"position":[[887,20],[957,20],[1097,20]]}}}],["mylogg",{"_index":8125,"t":{"3432":{"position":[[773,8],[1143,8],[1208,8]]},"3434":{"position":[[852,8],[1228,8],[1303,8],[1389,8],[1532,8]]}}}],["mymethod",{"_index":3891,"t":{"1041":{"position":[[415,8],[1045,8]]}}}],["mymodel",{"_index":4083,"t":{"1234":{"position":[[978,7]]}}}],["myotherhub",{"_index":7565,"t":{"3170":{"position":[[254,10]]}}}],["myotherhubcontext",{"_index":7564,"t":{"3170":{"position":[[178,17],[369,17]]}}}],["mypagefilt",{"_index":5895,"t":{"1951":{"position":[[80,12],[872,12]]}}}],["myparam",{"_index":4074,"t":{"1234":{"position":[[348,7]]},"1236":{"position":[[354,7]]},"1238":{"position":[[434,7]]},"1240":{"position":[[476,7]]},"1244":{"position":[[182,7]]},"1251":{"position":[[155,7]]},"1253":{"position":[[158,7]]},"1255":{"position":[[150,7]]},"1257":{"position":[[172,7]]},"1259":{"position":[[150,7]]},"1261":{"position":[[148,7]]},"1267":{"position":[[155,7]]},"1275":{"position":[[200,7]]},"1279":{"position":[[266,7]]},"1281":{"position":[[122,7]]}}}],["mypolici",{"_index":7297,"t":{"2993":{"position":[[43,8]]}}}],["myproject",{"_index":7916,"t":{"3323":{"position":[[88,9],[130,9],[172,9],[237,9],[275,9],[313,9]]}}}],["myredi",{"_index":4512,"t":{"1499":{"position":[[776,7],[784,7]]}}}],["myrepositori",{"_index":3892,"t":{"1041":{"position":[[580,12],[892,12],[1435,12],[1459,12],[1592,12]]}}}],["myresourcefilt",{"_index":5852,"t":{"1919":{"position":[[133,16],[810,16],[877,16],[951,16],[1054,16],[1097,16]]},"1921":{"position":[[359,16]]}}}],["myresourcefilterattribut",{"_index":5860,"t":{"1921":{"position":[[169,25]]}}}],["myresult",{"_index":5891,"t":{"1943":{"position":[[532,8]]},"1953":{"position":[[315,8]]},"3716":{"position":[[134,8],[693,8]]}}}],["myresultattribut",{"_index":5890,"t":{"1943":{"position":[[88,17],[421,17],[489,17]]},"1953":{"position":[[88,17]]}}}],["myresultfilt",{"_index":5877,"t":{"1941":{"position":[[164,14],[1227,14],[1292,14],[1364,14],[1465,14],[1506,14]]},"1945":{"position":[[349,14]]}}}],["myresultfilterattribut",{"_index":5892,"t":{"1945":{"position":[[169,23]]}}}],["mysampleactionfilt",{"_index":5816,"t":{"1907":{"position":[[345,20]]}}}],["mysql",{"_index":636,"t":{"102":{"position":[[108,5]]},"514":{"position":[[614,5],[623,5],[742,5]]},"520":{"position":[[31,5]]},"546":{"position":[[64,5],[70,5]]},"698":{"position":[[643,5],[676,5],[684,5]]},"734":{"position":[[50,5],[495,5],[842,5],[7639,5],[7833,5]]},"759":{"position":[[30,5],[54,5]]},"773":{"position":[[38,5]]},"803":{"position":[[41,5]]},"805":{"position":[[41,5]]},"895":{"position":[[41,5]]},"897":{"position":[[216,5],[249,5],[259,5],[272,5],[302,5],[573,5]]},"899":{"position":[[470,5],[522,5],[579,5],[675,5],[685,5],[1079,5],[1334,5],[1446,5],[1473,5]]},"901":{"position":[[31,5]]},"905":{"position":[[111,5]]},"907":{"position":[[105,5]]},"909":{"position":[[100,5]]},"1037":{"position":[[114,5]]},"1105":{"position":[[41,5]]},"1309":{"position":[[380,5],[413,5],[423,5],[436,5],[466,5],[737,5]]},"1315":{"position":[[31,5]]},"1799":{"position":[[119,5]]},"2326":{"position":[[48,5]]},"2361":{"position":[[341,5],[383,5]]},"3100":{"position":[[57,5]]},"3211":{"position":[[13,5],[135,5]]},"3215":{"position":[[282,5]]},"3226":{"position":[[257,5],[379,5]]},"3254":{"position":[[465,5],[840,5]]},"3932":{"position":[[973,5],[1040,5]]},"3966":{"position":[[748,5],[1447,5]]},"3968":{"position":[[664,5]]},"3982":{"position":[[33,5],[43,5]]},"3986":{"position":[[1394,5],[1473,5]]},"3992":{"position":[[1665,5],[3316,5],[3476,5],[3700,5]]},"3998":{"position":[[380,5]]},"4000":{"position":[[1120,5]]},"4004":{"position":[[34,5]]},"4006":{"position":[[412,5]]}}}],["mysql8",{"_index":3433,"t":{"734":{"position":[[527,6]]}}}],["mysqlconnect",{"_index":9819,"t":{"3966":{"position":[[785,15]]}}}],["mysqldb",{"_index":7682,"t":{"3226":{"position":[[343,7],[461,7],[578,7]]}}}],["mysqldbcontext",{"_index":4025,"t":{"1151":{"position":[[480,14]]}}}],["mysqldbcontextloc",{"_index":3397,"t":{"698":{"position":[[995,21]]},"905":{"position":[[182,21]]},"907":{"position":[[170,21]]},"909":{"position":[[160,21]]},"911":{"position":[[40,21],[115,21]]},"913":{"position":[[82,21]]},"1037":{"position":[[179,21],[603,21],[690,21],[807,21]]},"1151":{"position":[[181,21]]},"1204":{"position":[[46,21]]},"1212":{"position":[[117,21],[190,21]]},"1234":{"position":[[570,21],[690,21]]},"1236":{"position":[[579,21],[701,21]]},"1238":{"position":[[703,21],[854,21]]},"1240":{"position":[[766,21],[938,21]]},"1273":{"position":[[99,21]]},"1275":{"position":[[83,21]]},"1277":{"position":[[72,21]]}}}],["mysqlentityframeworkdesigntimeservic",{"_index":3484,"t":{"734":{"position":[[7730,38],[7917,38]]}}}],["mysqloffici",{"_index":3724,"t":{"899":{"position":[[653,13],[1599,13]]}}}],["mysqlparamet",{"_index":4031,"t":{"1160":{"position":[[409,14],[1326,14]]},"1162":{"position":[[433,14],[1398,14]]}}}],["mysqlrepositori",{"_index":3736,"t":{"905":{"position":[[132,15]]},"907":{"position":[[126,15]]},"909":{"position":[[121,15]]},"1037":{"position":[[135,15]]}}}],["mysqltypemappingsourc",{"_index":3442,"t":{"734":{"position":[[885,22],[7682,22]]}}}],["mystartup",{"_index":1558,"t":{"210":{"position":[[334,9]]},"2889":{"position":[[165,9],[348,9]]}}}],["mytabl",{"_index":2897,"t":{"550":{"position":[[381,7]]}}}],["mytempl",{"_index":8140,"t":{"3432":{"position":[[3187,10],[3471,10],[3959,10],[4173,10]]},"3910":{"position":[[1753,10]]},"3916":{"position":[[2985,10]]}}}],["myten",{"_index":7285,"t":{"2971":{"position":[[103,8],[363,8],[394,8]]}}}],["myvalidationmessagetyp",{"_index":3220,"t":{"617":{"position":[[1569,23],[2100,23]]}}}],["myvalidationmessagetype2",{"_index":3224,"t":{"617":{"position":[[2133,24]]}}}],["myvalidationtyp",{"_index":3197,"t":{"615":{"position":[[286,17],[741,17],[808,17],[895,17],[1004,17]]}}}],["myvalidationtypemessageprovid",{"_index":3222,"t":{"617":{"position":[[1989,31],[2466,31]]}}}],["myviewmodel",{"_index":5409,"t":{"1749":{"position":[[116,11]]}}}],["myxmlfil",{"_index":2576,"t":{"445":{"position":[[440,9],[493,9],[527,9]]}}}],["n",{"_index":299,"t":{"19":{"position":[[450,1]]},"53":{"position":[[163,1]]},"64":{"position":[[202,1]]},"77":{"position":[[163,1]]},"85":{"position":[[228,1]]},"188":{"position":[[238,1],[409,1]]},"190":{"position":[[535,1]]},"401":{"position":[[197,1]]},"441":{"position":[[283,1]]},"506":{"position":[[119,1]]},"514":{"position":[[319,1]]},"763":{"position":[[249,1],[375,1]]},"834":{"position":[[241,1]]},"1071":{"position":[[54,1]]},"1317":{"position":[[319,1]]},"1440":{"position":[[429,1]]},"1539":{"position":[[54,1],[516,1]]},"1541":{"position":[[366,1],[450,1]]},"1543":{"position":[[120,1],[222,1]]},"1549":{"position":[[355,1]]},"1566":{"position":[[556,1]]},"1681":{"position":[[49,1]]},"1741":{"position":[[586,1],[1345,1],[2181,1]]},"2264":{"position":[[9,1]]},"2625":{"position":[[560,1],[583,1]]},"2749":{"position":[[585,1]]},"2862":{"position":[[347,1]]},"2864":{"position":[[88,1]]},"3080":{"position":[[1153,1]]},"3254":{"position":[[1533,1]]},"3275":{"position":[[305,1]]},"3323":{"position":[[22,1],[86,1],[128,1],[170,1],[235,1],[273,1],[311,1]]},"3452":{"position":[[3351,1],[3405,1],[3608,1],[3752,1]]},"3798":{"position":[[478,1],[480,1],[549,1],[551,1]]},"3808":{"position":[[3080,1],[3082,1],[3125,1],[3127,1]]},"3912":{"position":[[95,1],[1372,1],[1423,1],[1474,1]]},"3916":{"position":[[6347,1],[6401,1],[6604,1],[6748,1]]},"3926":{"position":[[592,1],[651,1]]}}}],["name",{"_index":822,"t":{"114":{"position":[[1301,4]]},"133":{"position":[[422,4],[457,4],[818,4]]},"146":{"position":[[418,4],[767,4],[802,4]]},"284":{"position":[[256,4]]},"294":{"position":[[33,4],[54,4]]},"344":{"position":[[228,4],[296,4]]},"346":{"position":[[230,4],[294,4],[358,4]]},"348":{"position":[[256,4],[322,4]]},"433":{"position":[[16,4]]},"435":{"position":[[334,4],[741,4]]},"441":{"position":[[53,4],[115,4],[166,4],[331,4],[405,4]]},"445":{"position":[[512,4],[517,4],[538,4]]},"451":{"position":[[60,4]]},"453":{"position":[[237,4],[266,4]]},"508":{"position":[[289,4]]},"510":{"position":[[319,4]]},"516":{"position":[[294,4]]},"518":{"position":[[224,4]]},"520":{"position":[[400,4]]},"570":{"position":[[557,4],[591,4],[1540,4],[1815,4],[2160,4],[2451,4]]},"585":{"position":[[95,4]]},"587":{"position":[[475,4]]},"597":{"position":[[294,4],[489,4],[621,4]]},"599":{"position":[[324,4],[499,4],[596,4]]},"608":{"position":[[428,4]]},"610":{"position":[[97,4],[175,4]]},"617":{"position":[[897,4],[947,4]]},"639":{"position":[[64,4],[279,4]]},"645":{"position":[[22,4]]},"665":{"position":[[69,4],[140,4],[207,4],[286,4],[334,4],[393,4],[448,4],[515,4],[604,4],[686,4],[764,4],[854,4],[913,4],[983,4],[1049,4],[1127,4]]},"667":{"position":[[72,4],[146,4],[216,4],[298,4],[349,4],[411,4],[469,4],[539,4],[631,4],[716,4],[797,4],[890,4],[952,4],[1025,4],[1094,4],[1175,4]]},"669":{"position":[[69,4],[140,4],[207,4],[286,4],[334,4],[393,4],[448,4],[515,4],[604,4],[686,4],[764,4],[854,4],[913,4],[983,4],[1049,4],[1127,4]]},"671":{"position":[[72,4],[146,4],[216,4],[298,4],[349,4],[411,4],[469,4],[539,4],[631,4],[716,4],[797,4],[890,4],[952,4],[1025,4],[1094,4],[1175,4]]},"696":{"position":[[1572,4],[3594,4],[4308,4],[4649,4]]},"708":{"position":[[350,4]]},"734":{"position":[[6986,4],[7130,4]]},"747":{"position":[[404,4],[567,4],[604,4],[644,4],[687,4],[740,4]]},"749":{"position":[[61,4],[251,4],[285,4],[322,4],[366,4],[553,4],[592,4],[631,4],[668,4],[712,4],[917,4],[951,4],[988,4],[1032,4]]},"773":{"position":[[529,4],[542,4]]},"824":{"position":[[155,4]]},"828":{"position":[[80,4]]},"830":{"position":[[164,4]]},"834":{"position":[[105,4],[166,4],[233,4]]},"844":{"position":[[373,4]]},"851":{"position":[[365,4],[1409,4],[1910,4]]},"853":{"position":[[327,4],[628,4]]},"860":{"position":[[227,4],[236,4]]},"862":{"position":[[275,4],[284,4]]},"871":{"position":[[143,4]]},"873":{"position":[[173,4]]},"875":{"position":[[90,4]]},"877":{"position":[[456,4],[769,4],[810,4],[847,4],[1187,4],[1224,4],[1467,4],[1563,4],[1671,4],[1779,4],[1887,4],[2131,4]]},"881":{"position":[[153,4],[220,4],[366,4],[398,4]]},"885":{"position":[[186,4]]},"889":{"position":[[268,4],[338,4],[379,4],[416,4]]},"901":{"position":[[428,4]]},"919":{"position":[[217,6]]},"956":{"position":[[63,4],[136,4],[199,4],[271,4],[333,4],[404,4],[477,4],[549,4],[630,4],[701,4],[782,4],[875,4],[959,4],[1033,4],[1116,4],[1189,4],[1271,4],[1355,4],[1438,4],[1530,4],[1612,4],[1704,4]]},"960":{"position":[[113,4],[172,4],[250,4],[285,4],[298,4],[332,4],[357,4],[389,4],[465,4],[492,4],[576,4],[623,4],[701,4],[719,4],[736,4],[794,4],[819,4],[841,4],[929,4],[976,4],[1012,4],[1037,4],[1059,4],[1136,4],[1178,4],[1270,4],[1317,4],[1353,4],[1378,4],[1400,4],[1445,4],[1487,4],[1599,4],[1769,4]]},"979":{"position":[[31,4],[95,4],[157,4]]},"1041":{"position":[[103,4],[146,4],[486,4],[529,4],[853,4],[1167,4],[1394,4]]},"1060":{"position":[[440,4]]},"1064":{"position":[[393,4],[602,4]]},"1066":{"position":[[985,4],[1147,4]]},"1125":{"position":[[116,4],[193,4]]},"1127":{"position":[[214,4]]},"1145":{"position":[[177,4],[399,4],[456,4]]},"1147":{"position":[[290,4],[347,4]]},"1151":{"position":[[368,4],[425,4]]},"1160":{"position":[[204,4],[232,4],[243,4],[291,4],[365,4],[371,4],[425,4],[507,4],[518,4],[557,4],[1105,4],[1133,4],[1144,4],[1197,4],[1277,4],[1283,4],[1342,4],[1430,4],[1441,4],[1485,4]]},"1162":{"position":[[214,4],[242,4],[253,4],[309,4],[381,4],[387,4],[449,4],[529,4],[540,4],[587,4],[1163,4],[1191,4],[1202,4],[1263,4],[1341,4],[1347,4],[1414,4],[1500,4],[1511,4],[1563,4]]},"1164":{"position":[[191,4],[202,4],[233,4],[613,4],[624,4],[660,4]]},"1166":{"position":[[231,4],[242,4],[289,4],[776,4],[787,4],[839,4]]},"1168":{"position":[[45,4],[130,4],[336,4],[432,4]]},"1170":{"position":[[62,4],[88,4],[176,4],[202,4],[242,4],[268,4],[355,4],[361,4],[403,4],[570,4],[596,4],[689,4],[715,4],[755,4],[781,4],[879,4],[885,4],[932,4]]},"1173":{"position":[[47,4],[103,4],[171,4],[273,4],[340,4],[419,4]]},"1175":{"position":[[45,4],[107,4],[181,4],[289,4],[362,4],[447,4]]},"1177":{"position":[[45,4],[101,4],[169,4],[271,4],[338,4],[417,4]]},"1179":{"position":[[45,4],[120,4],[222,4],[354,4],[492,4],[578,4],[691,4],[834,4]]},"1181":{"position":[[43,4],[108,4],[154,4],[214,4],[327,4],[403,4],[454,4],[520,4]]},"1183":{"position":[[48,4],[114,4],[154,4],[219,4],[257,4],[301,4],[395,4],[472,4],[517,4],[588,4],[631,4],[681,4]]},"1185":{"position":[[42,4],[119,4],[491,4],[752,4],[850,4],[979,4],[1132,4],[1241,4],[1381,4]]},"1188":{"position":[[41,4],[91,4],[153,4],[211,4],[302,4],[363,4],[436,4],[505,4]]},"1190":{"position":[[45,4],[98,4],[161,4],[220,4],[317,4],[381,4],[455,4],[525,4]]},"1234":{"position":[[177,4],[188,4],[231,4],[309,4],[320,4],[410,4],[1027,4],[1110,4],[1118,4]]},"1236":{"position":[[177,4],[188,4],[234,4],[312,4],[323,4],[416,4]]},"1238":{"position":[[179,4],[190,4],[274,4],[354,4],[365,4],[498,4]]},"1240":{"position":[[179,4],[190,4],[295,4],[375,4],[386,4],[540,4]]},"1242":{"position":[[126,4],[282,4]]},"1244":{"position":[[138,4],[156,4],[298,4],[304,4],[352,4]]},"1251":{"position":[[126,4],[189,4],[247,4],[291,4]]},"1253":{"position":[[126,4],[192,4],[253,4],[300,4]]},"1255":{"position":[[126,4],[184,4],[237,4],[276,4]]},"1257":{"position":[[126,4],[206,4],[281,4],[355,4],[410,4]]},"1259":{"position":[[126,4],[184,4],[237,4],[273,4]]},"1261":{"position":[[126,4],[182,4],[233,4],[270,4]]},"1263":{"position":[[126,4],[209,4],[292,4]]},"1265":{"position":[[124,4]]},"1267":{"position":[[123,4],[187,4]]},"1269":{"position":[[82,4],[93,4],[161,4]]},"1275":{"position":[[168,4],[232,4]]},"1279":{"position":[[242,4],[298,4],[359,4]]},"1281":{"position":[[77,4]]},"1302":{"position":[[100,4],[108,4],[130,4],[194,4],[203,4]]},"1315":{"position":[[428,4]]},"1329":{"position":[[71,4],[137,4],[221,4],[303,4],[357,4],[429,4],[552,4],[629,4],[724,4],[817,4],[882,4],[965,4]]},"1331":{"position":[[74,4],[143,4],[230,4],[315,4],[372,4],[444,4],[570,4],[650,4],[748,4],[844,4],[912,4],[998,4]]},"1333":{"position":[[71,4],[137,4],[221,4],[303,4],[357,4],[429,4],[552,4],[629,4],[724,4],[817,4],[882,4],[965,4]]},"1335":{"position":[[74,4],[143,4],[230,4],[315,4],[372,4],[447,4],[573,4],[653,4],[751,4],[847,4],[915,4],[1001,4]]},"1341":{"position":[[77,4],[149,4],[239,4],[368,4],[451,4],[552,4]]},"1343":{"position":[[80,4],[155,4],[248,4],[380,4],[466,4],[570,4]]},"1345":{"position":[[77,4],[149,4],[239,4],[368,4],[451,4],[552,4]]},"1347":{"position":[[80,4],[155,4],[248,4],[380,4],[466,4],[570,4]]},"1362":{"position":[[34,4]]},"1364":{"position":[[290,4]]},"1377":{"position":[[419,4]]},"1412":{"position":[[2543,5],[2640,5],[2743,5]]},"1416":{"position":[[324,5]]},"1420":{"position":[[325,5],[800,5]]},"1424":{"position":[[901,4],[935,4]]},"1468":{"position":[[202,4]]},"1483":{"position":[[1101,4]]},"1485":{"position":[[44,4]]},"1488":{"position":[[774,4],[842,4],[891,4],[1018,4],[1320,4],[1379,4],[1431,4]]},"1495":{"position":[[718,4],[786,4],[835,4],[962,4],[1015,4],[1067,4],[1123,4],[1143,4],[1191,4]]},"1497":{"position":[[165,4],[192,4]]},"1499":{"position":[[708,4]]},"1520":{"position":[[33,4]]},"1539":{"position":[[60,4],[521,4],[551,4],[679,4]]},"1541":{"position":[[331,4]]},"1543":{"position":[[126,4]]},"1607":{"position":[[209,4],[232,4]]},"1611":{"position":[[390,4],[540,4]]},"1627":{"position":[[148,4],[178,4],[217,4]]},"1641":{"position":[[0,4]]},"1643":{"position":[[0,4],[130,4],[227,4]]},"1767":{"position":[[204,4]]},"1769":{"position":[[152,4]]},"1771":{"position":[[184,4]]},"1773":{"position":[[245,4]]},"1779":{"position":[[266,4],[531,4]]},"1781":{"position":[[383,4]]},"1795":{"position":[[413,4],[678,4],[2232,4],[2313,4],[2381,4],[2439,4]]},"1797":{"position":[[851,4]]},"1801":{"position":[[878,4],[917,4],[956,4],[2075,4],[2119,4],[2797,4]]},"1803":{"position":[[202,4],[242,4],[848,4],[2165,4],[3001,4],[3046,4],[3091,4],[3126,4],[4037,4],[4081,4],[4769,4]]},"1851":{"position":[[130,4],[174,4],[362,4],[406,4],[453,4],[661,4],[701,4],[886,4],[926,4],[973,4]]},"1927":{"position":[[183,4],[218,4],[487,4],[522,4]]},"1935":{"position":[[188,4]]},"1941":{"position":[[724,4],[758,4],[834,4]]},"1951":{"position":[[165,4],[200,4],[597,4]]},"2149":{"position":[[4,4],[45,4]]},"2167":{"position":[[475,4],[485,4]]},"2313":{"position":[[301,4]]},"2319":{"position":[[101,4],[146,4]]},"2345":{"position":[[250,4],[283,4],[473,4],[506,4],[538,4]]},"2350":{"position":[[73,4]]},"2352":{"position":[[52,4]]},"2354":{"position":[[176,4]]},"2357":{"position":[[650,4],[683,4],[1000,4],[1033,4],[1065,4]]},"2406":{"position":[[95,4],[128,4],[391,4],[424,4]]},"2415":{"position":[[97,4],[130,4]]},"2434":{"position":[[94,4],[127,4],[420,4],[453,4]]},"2486":{"position":[[350,4]]},"2530":{"position":[[97,4],[138,4]]},"2538":{"position":[[293,4],[406,4],[448,4],[468,4],[588,4],[624,4],[645,4]]},"2581":{"position":[[907,4],[1253,4],[1335,4]]},"2607":{"position":[[172,4],[240,4],[332,4],[412,4],[594,4],[652,4],[739,4]]},"2684":{"position":[[114,4],[128,4]]},"2694":{"position":[[140,4],[149,4]]},"2707":{"position":[[16,4]]},"2709":{"position":[[132,4]]},"2713":{"position":[[769,4],[1490,4],[1572,4],[1654,4],[2035,4],[2174,4],[2312,4]]},"2721":{"position":[[253,4],[449,4],[687,4],[901,4]]},"2725":{"position":[[370,4],[869,4],[1374,4],[1991,4],[2311,4]]},"2727":{"position":[[411,4],[630,4]]},"2729":{"position":[[359,4],[533,4],[548,4]]},"2735":{"position":[[124,4],[170,4],[256,4],[333,4],[466,4]]},"2745":{"position":[[41,4],[101,4],[223,4]]},"2747":{"position":[[51,4],[111,4],[258,4]]},"2749":{"position":[[66,4],[335,4]]},"2751":{"position":[[126,4]]},"2758":{"position":[[28,4]]},"2764":{"position":[[24,4],[52,4],[78,4],[106,4]]},"2790":{"position":[[857,4],[1069,4]]},"2796":{"position":[[391,4],[588,4],[620,4]]},"2856":{"position":[[1816,4],[1861,4]]},"2929":{"position":[[480,4],[652,4]]},"2945":{"position":[[480,4],[709,4]]},"2959":{"position":[[480,4],[678,4]]},"2971":{"position":[[208,4]]},"3001":{"position":[[342,5]]},"3003":{"position":[[269,5]]},"3065":{"position":[[196,4],[296,4]]},"3080":{"position":[[267,4],[327,4],[474,4],[634,4],[903,4]]},"3082":{"position":[[70,4],[237,4],[265,4],[291,4],[319,4]]},"3144":{"position":[[579,4]]},"3218":{"position":[[255,4],[314,4]]},"3222":{"position":[[17,5],[128,5],[153,4],[277,4],[338,4],[401,4]]},"3224":{"position":[[608,4],[692,4],[718,4],[1003,4],[1537,4],[1627,4]]},"3226":{"position":[[535,4]]},"3230":{"position":[[55,4],[125,4],[184,4],[460,4]]},"3234":{"position":[[259,4]]},"3236":{"position":[[319,4],[472,4]]},"3258":{"position":[[470,4]]},"3261":{"position":[[521,4]]},"3263":{"position":[[138,4],[146,4],[165,4],[225,4],[235,4],[249,4]]},"3267":{"position":[[210,4],[636,4]]},"3269":{"position":[[100,4],[225,4],[308,4],[417,4]]},"3273":{"position":[[172,4],[178,4],[262,4],[346,4],[352,4],[367,4],[418,4]]},"3287":{"position":[[1617,4],[1797,4],[1832,4],[2099,4],[2140,4],[2415,4],[2456,4],[2739,4],[2774,4]]},"3446":{"position":[[1776,4]]},"3452":{"position":[[2510,4],[2841,4]]},"3466":{"position":[[142,4],[308,4],[953,4],[1067,4],[1094,4]]},"3492":{"position":[[48,4],[54,4],[134,4],[244,4],[250,4],[284,4]]},"3496":{"position":[[104,4],[198,4],[309,4],[426,4]]},"3500":{"position":[[79,4],[184,4],[313,4],[513,4]]},"3537":{"position":[[84,4],[90,4],[187,4]]},"3539":{"position":[[203,4],[209,4],[297,4],[503,4]]},"3541":{"position":[[84,4],[90,4],[152,4],[199,4],[207,4],[380,4],[508,4],[710,4],[790,4]]},"3549":{"position":[[176,4]]},"3636":{"position":[[450,4]]},"3638":{"position":[[574,4]]},"3642":{"position":[[270,4],[370,4]]},"3650":{"position":[[221,4]]},"3698":{"position":[[53,4]]},"3706":{"position":[[1944,4],[2044,4]]},"3708":{"position":[[1118,4],[1153,4],[1524,4],[1559,4],[1888,4],[1923,4],[2354,4],[2389,4],[2427,4],[3233,4],[3271,4],[3308,4],[3340,4]]},"3720":{"position":[[175,4]]},"3722":{"position":[[295,4]]},"3734":{"position":[[336,4],[349,4],[408,4],[431,4]]},"3736":{"position":[[50,4],[63,4]]},"3738":{"position":[[52,4],[127,4]]},"3740":{"position":[[180,4],[255,4],[543,4],[618,4]]},"3752":{"position":[[154,4],[189,4],[393,4],[428,4],[647,4],[680,4],[715,4],[956,4],[989,4],[1024,4]]},"3754":{"position":[[59,4],[91,4],[126,4],[146,4],[187,4],[222,4]]},"3770":{"position":[[2231,4],[4048,4]]},"3777":{"position":[[189,4]]},"3781":{"position":[[613,4]]},"3785":{"position":[[1173,4],[1232,4]]},"3793":{"position":[[248,6]]},"3798":{"position":[[195,4]]},"3812":{"position":[[1833,4]]},"3830":{"position":[[345,6]]},"3914":{"position":[[1342,4],[1710,4],[1842,4],[1990,4]]},"3916":{"position":[[5506,4],[5837,4],[8538,4],[8545,4]]},"3924":{"position":[[4568,4],[4704,4]]},"3928":{"position":[[2338,4]]},"3936":{"position":[[1416,4],[1481,4],[1583,4],[1629,4],[1727,4],[1804,4]]},"3956":{"position":[[759,4],[794,4],[1068,4],[1103,4],[1356,4],[1391,4],[1702,4],[1737,4],[1775,4],[2573,4],[2611,4],[2648,4],[2680,4]]},"3978":{"position":[[864,4],[881,4]]}}}],["namedserviceprovid",{"_index":4260,"t":{"1412":{"position":[[1030,20],[1117,20],[1142,20],[1165,20],[1257,20],[1331,20],[1478,20],[1564,20]]}}}],["namehandl",{"_index":4970,"t":{"1539":{"position":[[611,11]]}}}],["nameof",{"_index":3106,"t":{"587":{"position":[[2020,6]]},"599":{"position":[[589,6]]},"769":{"position":[[481,6]]},"933":{"position":[[848,6],[963,6]]},"1279":{"position":[[510,6],[666,6],[684,6]]},"1329":{"position":[[125,6],[144,6],[209,6],[228,6],[345,6],[364,6],[417,6],[436,6],[617,6],[636,6],[712,6],[731,6],[870,6],[889,6],[953,6],[972,6]]},"1331":{"position":[[131,6],[150,6],[218,6],[237,6],[360,6],[379,6],[432,6],[451,6],[638,6],[657,6],[736,6],[755,6],[900,6],[919,6],[986,6],[1005,6]]},"1333":{"position":[[125,6],[144,6],[209,6],[228,6],[345,6],[364,6],[417,6],[436,6],[617,6],[636,6],[712,6],[731,6],[870,6],[889,6],[953,6],[972,6]]},"1335":{"position":[[131,6],[150,6],[218,6],[237,6],[360,6],[379,6],[435,6],[454,6],[641,6],[660,6],[739,6],[758,6],[903,6],[922,6],[989,6],[1008,6]]},"1341":{"position":[[137,6],[156,6],[227,6],[246,6],[439,6],[458,6],[540,6],[559,6]]},"1343":{"position":[[143,6],[162,6],[236,6],[255,6],[454,6],[473,6],[558,6],[577,6]]},"1345":{"position":[[137,6],[156,6],[227,6],[246,6],[439,6],[458,6],[540,6],[559,6]]},"1347":{"position":[[143,6],[162,6],[236,6],[255,6],[454,6],[473,6],[558,6],[577,6]]},"1412":{"position":[[169,6],[577,6],[714,6],[1289,6],[1363,6],[1522,6],[1608,6]]},"1557":{"position":[[106,6],[279,6]]},"1572":{"position":[[516,6]]},"1584":{"position":[[285,6],[494,6]]},"1621":{"position":[[166,6],[275,6],[386,6],[566,6],[615,6],[666,6],[890,6]]},"1627":{"position":[[163,6]]},"1643":{"position":[[273,6]]},"1645":{"position":[[267,6]]},"1647":{"position":[[334,6]]},"1649":{"position":[[233,6]]},"1651":{"position":[[201,6],[285,6]]},"1653":{"position":[[278,6]]},"1655":{"position":[[321,6]]},"1657":{"position":[[363,6]]},"1659":{"position":[[211,6],[352,6],[608,6],[787,6],[1046,6],[1228,6]]},"1663":{"position":[[418,6]]},"1801":{"position":[[2378,6]]},"1803":{"position":[[4333,6]]},"2538":{"position":[[497,6],[526,6],[602,6]]},"2937":{"position":[[1319,6],[1434,6]]},"3636":{"position":[[375,6]]},"3638":{"position":[[329,6],[498,6]]},"3640":{"position":[[215,6],[307,6]]},"3644":{"position":[[211,6],[352,6],[608,6],[787,6],[1046,6],[1228,6]]},"3656":{"position":[[263,6]]},"3692":{"position":[[173,6]]},"3934":{"position":[[1794,6]]},"3938":{"position":[[1121,6]]}}}],["namep",{"_index":7812,"t":{"3273":{"position":[[390,5],[555,5]]}}}],["namespac",{"_index":28,"t":{"3":{"position":[[234,9]]},"11":{"position":[[942,9]]},"112":{"position":[[295,9]]},"127":{"position":[[508,9]]},"133":{"position":[[250,9]]},"135":{"position":[[225,9]]},"146":{"position":[[229,9]]},"188":{"position":[[168,9]]},"202":{"position":[[167,9]]},"204":{"position":[[245,9]]},"210":{"position":[[281,9]]},"212":{"position":[[167,9],[456,9]]},"216":{"position":[[255,9],[683,9]]},"231":{"position":[[102,9]]},"338":{"position":[[189,9]]},"344":{"position":[[69,9]]},"346":{"position":[[67,9]]},"348":{"position":[[73,9]]},"355":{"position":[[247,9]]},"411":{"position":[[192,9]]},"435":{"position":[[142,9],[510,9]]},"492":{"position":[[26,9]]},"508":{"position":[[68,9]]},"510":{"position":[[68,9]]},"514":{"position":[[121,9]]},"516":{"position":[[68,9]]},"518":{"position":[[68,9]]},"524":{"position":[[200,9]]},"534":{"position":[[255,9]]},"570":{"position":[[273,9]]},"572":{"position":[[201,9]]},"587":{"position":[[138,9]]},"595":{"position":[[85,9]]},"597":{"position":[[70,9],[352,9]]},"599":{"position":[[79,9]]},"602":{"position":[[64,9]]},"608":{"position":[[99,9]]},"615":{"position":[[226,9]]},"617":{"position":[[1502,9],[1945,9],[2261,9]]},"625":{"position":[[196,9]]},"627":{"position":[[76,9]]},"653":{"position":[[284,9]]},"696":{"position":[[1387,9],[2568,9],[3490,9],[4172,9]]},"698":{"position":[[1081,9]]},"708":{"position":[[124,9]]},"734":{"position":[[7037,9],[7181,9],[7871,9]]},"745":{"position":[[68,9]]},"747":{"position":[[159,9]]},"822":{"position":[[84,9]]},"830":{"position":[[0,9]]},"832":{"position":[[107,9]]},"844":{"position":[[209,9]]},"846":{"position":[[330,9]]},"851":{"position":[[158,9],[811,9],[1214,9],[1723,9]]},"877":{"position":[[184,9],[1955,9]]},"889":{"position":[[171,9]]},"927":{"position":[[129,9]]},"929":{"position":[[129,9]]},"931":{"position":[[103,9]]},"945":{"position":[[169,9]]},"947":{"position":[[181,9],[675,9]]},"1054":{"position":[[68,9]]},"1056":{"position":[[87,9],[502,9]]},"1058":{"position":[[67,9]]},"1060":{"position":[[161,9]]},"1064":{"position":[[119,9]]},"1066":{"position":[[242,9],[721,9]]},"1109":{"position":[[114,9],[405,9],[637,9]]},"1127":{"position":[[50,9]]},"1145":{"position":[[79,9]]},"1147":{"position":[[65,9]]},"1151":{"position":[[96,9]]},"1185":{"position":[[327,9]]},"1223":{"position":[[148,9]]},"1234":{"position":[[31,9]]},"1236":{"position":[[31,9]]},"1238":{"position":[[31,9]]},"1240":{"position":[[31,9]]},"1242":{"position":[[31,9]]},"1244":{"position":[[31,9]]},"1251":{"position":[[31,9]]},"1253":{"position":[[31,9]]},"1255":{"position":[[31,9]]},"1257":{"position":[[31,9]]},"1259":{"position":[[31,9]]},"1261":{"position":[[31,9]]},"1263":{"position":[[31,9]]},"1267":{"position":[[31,9]]},"1311":{"position":[[68,9]]},"1313":{"position":[[771,9]]},"1317":{"position":[[121,9]]},"1353":{"position":[[251,9]]},"1364":{"position":[[31,9]]},"1368":{"position":[[187,9]]},"1408":{"position":[[134,9],[601,9]]},"1410":{"position":[[140,9],[616,9]]},"1412":{"position":[[387,9],[885,9],[1897,9],[2598,9]]},"1414":{"position":[[154,9],[555,9]]},"1424":{"position":[[557,9]]},"1426":{"position":[[109,9]]},"1539":{"position":[[346,9]]},"1572":{"position":[[177,9],[344,9]]},"1582":{"position":[[159,9]]},"1584":{"position":[[160,9],[370,9]]},"1603":{"position":[[35,9]]},"1605":{"position":[[35,9]]},"1607":{"position":[[35,9]]},"1609":{"position":[[98,9],[444,9]]},"1611":{"position":[[236,9]]},"1613":{"position":[[67,9]]},"1615":{"position":[[67,9]]},"1617":{"position":[[119,9],[372,9],[614,9],[891,9]]},"1619":{"position":[[108,9]]},"1621":{"position":[[48,9],[450,9]]},"1643":{"position":[[75,9]]},"1645":{"position":[[67,9]]},"1647":{"position":[[108,9]]},"1649":{"position":[[68,9]]},"1651":{"position":[[78,9]]},"1653":{"position":[[69,9]]},"1655":{"position":[[84,9]]},"1657":{"position":[[201,9]]},"1659":{"position":[[95,9],[454,9],[889,9]]},"1663":{"position":[[302,9]]},"1767":{"position":[[31,9]]},"1769":{"position":[[31,9]]},"1771":{"position":[[31,9]]},"1773":{"position":[[31,9]]},"1775":{"position":[[258,9],[273,9]]},"1779":{"position":[[137,9]]},"1781":{"position":[[137,9]]},"1801":{"position":[[409,9]]},"1803":{"position":[[120,9],[2467,9]]},"1843":{"position":[[85,9]]},"1845":{"position":[[75,9],[348,9]]},"1851":{"position":[[14,9]]},"1855":{"position":[[139,9]]},"1859":{"position":[[67,9]]},"1865":{"position":[[32,9]]},"1867":{"position":[[129,9],[428,9]]},"1869":{"position":[[410,9]]},"1873":{"position":[[171,9]]},"1875":{"position":[[67,9]]},"1883":{"position":[[200,9]]},"1913":{"position":[[204,9]]},"1919":{"position":[[85,9]]},"1925":{"position":[[140,9]]},"1927":{"position":[[40,9]]},"1933":{"position":[[110,9]]},"1935":{"position":[[40,9]]},"1941":{"position":[[116,9]]},"1943":{"position":[[40,9]]},"1951":{"position":[[40,9]]},"1953":{"position":[[40,9]]},"1977":{"position":[[72,9]]},"1979":{"position":[[198,9]]},"2269":{"position":[[152,9]]},"2272":{"position":[[211,9]]},"2281":{"position":[[116,9]]},"2294":{"position":[[990,9]]},"2313":{"position":[[105,9]]},"2345":{"position":[[75,9]]},"2348":{"position":[[192,9]]},"2357":{"position":[[438,9]]},"2379":{"position":[[616,9]]},"2482":{"position":[[0,9]]},"2484":{"position":[[26,9]]},"2486":{"position":[[209,9]]},"2536":{"position":[[32,9]]},"2538":{"position":[[192,9]]},"2579":{"position":[[83,9]]},"2581":{"position":[[119,9],[622,9]]},"2587":{"position":[[28,9]]},"2589":{"position":[[47,9]]},"2690":{"position":[[29,9]]},"2709":{"position":[[34,9]]},"2711":{"position":[[175,9]]},"2713":{"position":[[490,9],[921,9],[1807,9]]},"2725":{"position":[[236,9],[725,9],[1205,9],[1762,9]]},"2727":{"position":[[261,9]]},"2729":{"position":[[237,9]]},"2749":{"position":[[342,9]]},"2776":{"position":[[138,9]]},"2805":{"position":[[218,9]]},"2807":{"position":[[199,9]]},"2813":{"position":[[265,9],[808,9]]},"2817":{"position":[[414,9]]},"2819":{"position":[[166,9]]},"2821":{"position":[[197,9]]},"2825":{"position":[[0,9]]},"2827":{"position":[[72,9]]},"2829":{"position":[[90,9]]},"2836":{"position":[[256,9],[1469,9]]},"2881":{"position":[[603,9]]},"2889":{"position":[[312,9]]},"2899":{"position":[[58,9],[327,9]]},"2901":{"position":[[122,9]]},"2905":{"position":[[207,9]]},"2925":{"position":[[131,9]]},"2927":{"position":[[79,9]]},"2929":{"position":[[172,9]]},"2933":{"position":[[125,9]]},"2935":{"position":[[196,9]]},"2937":{"position":[[293,9]]},"2941":{"position":[[131,9]]},"2943":{"position":[[79,9]]},"2945":{"position":[[172,9]]},"2949":{"position":[[114,9]]},"2951":{"position":[[111,9]]},"2955":{"position":[[131,9]]},"2957":{"position":[[79,9]]},"2959":{"position":[[172,9]]},"2963":{"position":[[112,9]]},"2971":{"position":[[66,9]]},"3071":{"position":[[253,9]]},"3080":{"position":[[910,9]]},"3144":{"position":[[224,9]]},"3154":{"position":[[118,9]]},"3156":{"position":[[180,9]]},"3158":{"position":[[171,9]]},"3287":{"position":[[1334,9]]},"3360":{"position":[[13,9]]},"3371":{"position":[[241,9]]},"3373":{"position":[[261,9]]},"3379":{"position":[[34,9]]},"3381":{"position":[[42,9]]},"3383":{"position":[[88,9]]},"3387":{"position":[[81,9]]},"3389":{"position":[[762,9],[1018,9]]},"3391":{"position":[[334,9]]},"3393":{"position":[[217,9],[586,9]]},"3397":{"position":[[171,9],[339,9],[916,9]]},"3399":{"position":[[241,9]]},"3434":{"position":[[135,9]]},"3446":{"position":[[22,9]]},"3452":{"position":[[508,9]]},"3458":{"position":[[222,9],[613,9]]},"3483":{"position":[[631,9]]},"3630":{"position":[[245,9]]},"3636":{"position":[[160,9]]},"3638":{"position":[[106,9]]},"3640":{"position":[[61,9]]},"3644":{"position":[[95,9],[454,9],[889,9]]},"3656":{"position":[[67,9]]},"3686":{"position":[[770,9]]},"3688":{"position":[[158,9]]},"3708":{"position":[[879,9]]},"3734":{"position":[[79,9]]},"3916":{"position":[[3511,9]]},"3924":{"position":[[2989,9],[3260,9]]},"3928":{"position":[[912,9]]},"3956":{"position":[[516,9]]},"3992":{"position":[[135,9]]}}}],["namingconvent",{"_index":3743,"t":{"919":{"position":[[72,17]]},"3770":{"position":[[1680,17],[3217,17],[3339,17]]},"3785":{"position":[[486,17],[623,17],[765,17]]},"3812":{"position":[[762,17],[897,17],[1037,17]]},"3930":{"position":[[333,17],[1176,17]]}}}],["natasha",{"_index":6987,"t":{"2768":{"position":[[1460,7]]}}}],["nb",{"_index":6615,"t":{"2559":{"position":[[1783,2]]}}}],["nbf",{"_index":811,"t":{"114":{"position":[[1015,3]]},"3446":{"position":[[1490,3]]},"3452":{"position":[[2233,3]]},"3916":{"position":[[5229,3]]},"3928":{"position":[[2052,3]]}}}],["nbsp",{"_index":6405,"t":{"2532":{"position":[[146,4],[152,4],[158,4],[164,4],[170,4],[176,4]]}}}],["ncach",{"_index":1770,"t":{"239":{"position":[[272,6],[280,6]]},"241":{"position":[[143,6],[160,6]]},"251":{"position":[[0,6],[48,6],[127,6],[152,6],[165,6],[192,6],[236,6]]}}}],["ncconf",{"_index":1834,"t":{"251":{"position":[[218,6]]}}}],["neg",{"_index":3215,"t":{"617":{"position":[[169,8]]}}}],["negativenumb",{"_index":3133,"t":{"606":{"position":[[59,14],[838,14]]},"617":{"position":[[135,14]]}}}],["neovim",{"_index":1225,"t":{"174":{"position":[[4,6]]}}}],["nest",{"_index":1907,"t":{"270":{"position":[[188,4]]},"272":{"position":[[58,4],[182,4],[227,4]]},"274":{"position":[[58,4]]},"276":{"position":[[58,4],[124,4],[152,4]]},"278":{"position":[[58,4]]},"280":{"position":[[58,4]]},"282":{"position":[[58,4],[386,4]]},"288":{"position":[[58,4],[203,4]]},"290":{"position":[[58,4]]}}}],["net",{"_index":225,"t":{"13":{"position":[[284,3]]},"21":{"position":[[24,3],[71,3],[131,3]]},"23":{"position":[[6,3],[53,3],[113,3]]},"44":{"position":[[24,3],[99,3]]},"46":{"position":[[12,3]]},"51":{"position":[[4,3]]},"57":{"position":[[24,3],[112,3]]},"60":{"position":[[12,3]]},"62":{"position":[[4,3]]},"68":{"position":[[24,3],[99,3]]},"70":{"position":[[12,3]]},"75":{"position":[[4,3]]},"81":{"position":[[3,3]]},"85":{"position":[[16,3],[41,3],[63,3]]},"95":{"position":[[166,3]]},"100":{"position":[[27,3],[40,3]]},"154":{"position":[[50,3]]},"186":{"position":[[19,3]]},"190":{"position":[[195,3],[250,3],[311,3],[398,3],[569,3],[626,3],[792,3],[846,3],[1008,3],[1067,3],[1239,3],[1295,3]]},"199":{"position":[[44,3],[321,3]]},"202":{"position":[[15,3]]},"204":{"position":[[499,3]]},"220":{"position":[[11,3]]},"237":{"position":[[1386,3]]},"239":{"position":[[57,3]]},"251":{"position":[[11,3],[18,3],[99,3]]},"257":{"position":[[51,3]]},"336":{"position":[[3,3]]},"338":{"position":[[8,3],[1136,3]]},"399":{"position":[[640,3]]},"401":{"position":[[193,3]]},"425":{"position":[[50,3]]},"429":{"position":[[53,3]]},"435":{"position":[[1166,3]]},"439":{"position":[[4,3],[75,3]]},"441":{"position":[[6,3]]},"451":{"position":[[265,3]]},"453":{"position":[[3,3]]},"461":{"position":[[4,3]]},"465":{"position":[[48,3]]},"540":{"position":[[10,3],[44,3]]},"587":{"position":[[6,3],[1023,3]]},"639":{"position":[[502,3]]},"734":{"position":[[3,3]]},"773":{"position":[[316,3]]},"1157":{"position":[[51,3]]},"1389":{"position":[[281,3]]},"1403":{"position":[[89,3]]},"1418":{"position":[[313,3]]},"1440":{"position":[[41,3]]},"1452":{"position":[[3,3]]},"1454":{"position":[[0,3]]},"1456":{"position":[[0,3]]},"1474":{"position":[[11,3]]},"1479":{"position":[[6,3]]},"1511":{"position":[[2008,3],[3323,3],[3992,3]]},"1516":{"position":[[58,3]]},"1535":{"position":[[63,3]]},"1551":{"position":[[224,3]]},"1566":{"position":[[614,3]]},"1572":{"position":[[74,3]]},"1574":{"position":[[28,3]]},"1576":{"position":[[6,3]]},"1578":{"position":[[15,3],[61,3]]},"1580":{"position":[[9,3],[94,3]]},"1609":{"position":[[10,3]]},"1639":{"position":[[9,3]]},"1663":{"position":[[578,3]]},"1665":{"position":[[358,3]]},"1755":{"position":[[571,3],[1021,3]]},"1761":{"position":[[24,3]]},"1892":{"position":[[19,3]]},"1905":{"position":[[4,3]]},"1969":{"position":[[167,3],[180,3],[211,3]]},"1971":{"position":[[28,3]]},"1983":{"position":[[79,3],[92,3],[123,3]]},"1985":{"position":[[28,3]]},"2006":{"position":[[79,3],[92,3],[123,3]]},"2008":{"position":[[28,3]]},"2231":{"position":[[6,3],[53,3],[113,3]]},"2233":{"position":[[4,3]]},"2255":{"position":[[43,3]]},"2261":{"position":[[54,3],[258,3]]},"2264":{"position":[[100,3]]},"2296":{"position":[[284,3]]},"2309":{"position":[[99,3]]},"2311":{"position":[[12,3]]},"2343":{"position":[[48,3],[261,3]]},"2363":{"position":[[176,3],[227,3]]},"2383":{"position":[[200,3]]},"2480":{"position":[[21,3]]},"2499":{"position":[[29,3]]},"2532":{"position":[[82,3]]},"2551":{"position":[[14,3]]},"2555":{"position":[[259,3]]},"2557":{"position":[[6,3]]},"2561":{"position":[[49,3]]},"2564":{"position":[[216,3]]},"2593":{"position":[[23,3]]},"2625":{"position":[[556,3],[579,3]]},"2701":{"position":[[8,3]]},"2717":{"position":[[4,3],[459,3]]},"2723":{"position":[[128,3]]},"2731":{"position":[[85,3]]},"2737":{"position":[[48,3]]},"2747":{"position":[[18,3]]},"2749":{"position":[[837,3]]},"2768":{"position":[[805,3],[1309,3],[1506,3],[1535,3]]},"2770":{"position":[[9,3]]},"2803":{"position":[[1,3]]},"2856":{"position":[[2075,3]]},"2862":{"position":[[8,3],[22,3],[48,3],[200,3],[319,3],[329,3],[343,3]]},"2875":{"position":[[579,3]]},"2885":{"position":[[41,3]]},"2891":{"position":[[62,3],[101,3]]},"2895":{"position":[[47,3]]},"2981":{"position":[[497,3]]},"3069":{"position":[[3,3],[42,3],[293,3]]},"3136":{"position":[[248,3]]},"3142":{"position":[[4,3],[272,3]]},"3148":{"position":[[38,3],[78,3]]},"3150":{"position":[[118,3]]},"3205":{"position":[[68,3]]},"3209":{"position":[[12,3]]},"3242":{"position":[[279,3]]},"3250":{"position":[[12,3]]},"3287":{"position":[[369,3]]},"3291":{"position":[[1601,3]]},"3307":{"position":[[117,3]]},"3323":{"position":[[33,3],[380,3]]},"3409":{"position":[[49,3]]},"3418":{"position":[[3,3],[53,3]]},"3428":{"position":[[38,3]]},"3430":{"position":[[1850,3]]},"3440":{"position":[[6,3],[74,3]]},"3464":{"position":[[102,3],[306,3]]},"3468":{"position":[[7,3],[267,3],[337,3]]},"3472":{"position":[[48,3]]},"3601":{"position":[[841,3],[996,3],[1141,3],[1292,3],[1441,3],[1616,3],[1794,3]]},"3605":{"position":[[56,3]]},"3702":{"position":[[206,3],[285,3],[471,3]]},"3729":{"position":[[7,3]]},"3908":{"position":[[117,3],[260,3]]},"3910":{"position":[[276,3]]},"3912":{"position":[[825,3],[1310,3],[1496,3],[1510,3],[1541,3]]},"3914":{"position":[[1205,3],[1219,3],[3511,3]]},"3918":{"position":[[1297,3],[1310,3],[4056,3]]},"3922":{"position":[[658,3],[671,3]]},"3926":{"position":[[588,3],[647,3]]},"3928":{"position":[[37,3],[109,3]]},"3930":{"position":[[504,3]]},"3932":{"position":[[181,3],[594,3]]},"3934":{"position":[[123,3],[444,3],[2460,3],[2805,3],[3003,3]]},"3936":{"position":[[531,3],[1926,3],[2117,3]]},"3940":{"position":[[331,3]]},"3960":{"position":[[179,3]]},"3970":{"position":[[106,3]]},"3972":{"position":[[259,3]]},"3980":{"position":[[191,3]]},"3986":{"position":[[165,3]]},"3990":{"position":[[249,3]]},"3992":{"position":[[990,3],[1003,3]]},"3996":{"position":[[359,3],[372,3]]},"4004":{"position":[[44,3]]},"4006":{"position":[[189,3]]}}}],["net472",{"_index":1365,"t":{"190":{"position":[[240,6]]}}}],["net5",{"_index":404,"t":{"48":{"position":[[36,4]]},"72":{"position":[[36,4]]},"95":{"position":[[9,4]]},"202":{"position":[[59,4]]},"401":{"position":[[187,4]]},"455":{"position":[[246,4]]},"461":{"position":[[973,4]]},"1535":{"position":[[135,4]]},"1551":{"position":[[296,4]]},"1667":{"position":[[38,4]]},"1755":{"position":[[601,4],[1095,4]]},"1969":{"position":[[34,4],[73,4]]},"2255":{"position":[[138,4]]},"2298":{"position":[[7,4],[146,4]]},"2666":{"position":[[44,4]]},"2745":{"position":[[18,4]]},"2776":{"position":[[57,4]]},"2905":{"position":[[4,4]]},"3277":{"position":[[4,4],[80,4]]},"3323":{"position":[[54,4],[101,4],[207,4],[250,4],[463,4]]},"3430":{"position":[[528,4],[1981,4]]},"3910":{"position":[[2299,4]]},"3912":{"position":[[84,4],[1342,4],[1382,4]]},"3920":{"position":[[549,4]]},"3926":{"position":[[260,4],[408,4],[467,4],[572,4],[631,4]]},"3936":{"position":[[945,4]]},"3946":{"position":[[163,4],[313,4]]},"3948":{"position":[[196,4]]}}}],["net6",{"_index":80,"t":{"5":{"position":[[7,4]]},"7":{"position":[[3,4]]},"13":{"position":[[53,4]]},"48":{"position":[[80,4]]},"72":{"position":[[80,4]]},"202":{"position":[[489,4],[500,4]]},"336":{"position":[[125,4]]},"350":{"position":[[169,4],[412,4],[621,4]]},"399":{"position":[[863,4]]},"455":{"position":[[701,4]]},"461":{"position":[[626,4]]},"1372":{"position":[[157,4]]},"1444":{"position":[[157,4]]},"1667":{"position":[[390,4]]},"1755":{"position":[[769,4],[1209,4]]},"1969":{"position":[[55,4],[82,4]]},"1995":{"position":[[1,4]]},"2018":{"position":[[1,4]]},"2255":{"position":[[280,4]]},"2276":{"position":[[37,4]]},"2290":{"position":[[3,4]]},"2296":{"position":[[53,4]]},"2381":{"position":[[3,4]]},"2629":{"position":[[108,4]]},"2639":{"position":[[44,4]]},"2666":{"position":[[88,4]]},"2674":{"position":[[430,4]]},"2776":{"position":[[472,4]]},"2836":{"position":[[813,4]]},"2864":{"position":[[44,4]]},"3307":{"position":[[158,4]]},"3323":{"position":[[143,4],[288,4],[468,4]]},"3345":{"position":[[38,4]]},"3430":{"position":[[794,4],[2088,4]]},"3589":{"position":[[494,4]]},"3910":{"position":[[2287,4]]},"3912":{"position":[[1393,4],[1433,4]]},"3918":{"position":[[4032,4]]},"3926":{"position":[[424,4],[578,4],[637,4]]},"3936":{"position":[[954,4]]},"3944":{"position":[[148,4],[188,4],[754,4]]},"3946":{"position":[[27,4],[93,4],[176,4],[285,4],[438,4]]}}}],["net7",{"_index":1464,"t":{"199":{"position":[[80,4]]},"2633":{"position":[[1,4],[40,4]]},"2639":{"position":[[88,4]]},"3323":{"position":[[185,4],[326,4],[473,4]]},"3779":{"position":[[922,4]]},"3802":{"position":[[1271,4]]},"3817":{"position":[[1571,4]]},"3910":{"position":[[2467,4]]},"3912":{"position":[[1,4],[40,4],[90,4],[1444,4],[1484,4]]},"3918":{"position":[[4041,4]]}}}],["netcoreapp30",{"_index":1366,"t":{"190":{"position":[[295,12]]}}}],["netcoredemoworkerservic",{"_index":7099,"t":{"2836":{"position":[[1101,24],[1145,24],[1218,24]]}}}],["netmodular",{"_index":6977,"t":{"2768":{"position":[[1169,10]]}}}],["neutral",{"_index":8207,"t":{"3452":{"position":[[2695,7]]},"3916":{"position":[[5691,7]]}}}],["new",{"_index":244,"t":{"15":{"position":[[134,3],[155,3]]},"17":{"position":[[128,3],[149,3]]},"19":{"position":[[663,3],[761,3]]},"53":{"position":[[90,3],[148,3]]},"64":{"position":[[116,3],[187,3]]},"77":{"position":[[90,3],[148,3]]},"127":{"position":[[1815,3]]},"144":{"position":[[145,3]]},"188":{"position":[[400,3],[413,3]]},"235":{"position":[[92,3]]},"237":{"position":[[167,3],[490,3],[653,3]]},"253":{"position":[[703,3]]},"270":{"position":[[29,3],[81,3]]},"272":{"position":[[27,3],[65,3]]},"274":{"position":[[27,3],[65,3],[108,3],[161,3],[199,3]]},"276":{"position":[[27,3],[65,3]]},"278":{"position":[[27,3],[65,3],[94,3]]},"280":{"position":[[27,3],[65,3],[94,3]]},"282":{"position":[[27,3],[65,3],[94,3]]},"284":{"position":[[15,3],[38,3],[237,3]]},"288":{"position":[[27,3],[65,3],[94,3],[428,3],[502,3]]},"290":{"position":[[27,3],[65,3],[94,3]]},"292":{"position":[[15,3]]},"294":{"position":[[27,3]]},"314":{"position":[[531,3]]},"316":{"position":[[589,3]]},"359":{"position":[[392,3]]},"369":{"position":[[486,3],[837,3]]},"461":{"position":[[434,3],[783,3],[1334,3]]},"492":{"position":[[446,3]]},"550":{"position":[[296,3],[419,3],[427,3],[445,3],[463,3],[539,3]]},"558":{"position":[[214,3]]},"560":{"position":[[13,3],[673,3]]},"570":{"position":[[1784,3],[2129,3],[2420,3]]},"572":{"position":[[1326,3],[1347,3]]},"585":{"position":[[110,3],[172,3],[270,3]]},"587":{"position":[[1545,3],[1982,3],[2012,3]]},"599":{"position":[[541,3],[581,3]]},"617":{"position":[[2085,3]]},"645":{"position":[[11,3]]},"649":{"position":[[82,3],[140,3],[267,3],[336,3]]},"651":{"position":[[88,3],[149,3],[282,3],[354,3]]},"665":{"position":[[194,3],[271,3],[435,3],[500,3],[751,3],[839,3],[1036,3],[1112,3]]},"667":{"position":[[203,3],[283,3],[456,3],[524,3],[784,3],[875,3],[1081,3],[1160,3]]},"669":{"position":[[194,3],[271,3],[435,3],[500,3],[751,3],[839,3],[1036,3],[1112,3]]},"671":{"position":[[203,3],[283,3],[456,3],[524,3],[784,3],[875,3],[1081,3],[1160,3]]},"696":{"position":[[1507,3]]},"734":{"position":[[8105,3]]},"749":{"position":[[177,3]]},"769":{"position":[[197,3],[291,3],[392,3],[462,3],[583,3]]},"773":{"position":[[135,3]]},"822":{"position":[[265,3]]},"860":{"position":[[135,3]]},"862":{"position":[[183,3]]},"866":{"position":[[57,3],[213,3],[461,3],[496,3]]},"877":{"position":[[1367,3],[1384,3],[1480,3],[1588,3],[1696,3],[1804,3]]},"881":{"position":[[134,3]]},"883":{"position":[[148,3]]},"913":{"position":[[180,3]]},"935":{"position":[[100,3],[121,3],[165,3],[208,3]]},"1041":{"position":[[312,3],[741,3],[1064,3],[1323,3],[1577,3]]},"1129":{"position":[[113,3],[217,3],[343,3],[472,3],[583,3],[921,3],[1051,3],[1229,3],[1410,3],[1573,3]]},"1135":{"position":[[37,3],[49,3]]},"1145":{"position":[[359,3],[378,3],[435,3]]},"1147":{"position":[[250,3],[269,3],[326,3]]},"1151":{"position":[[328,3],[347,3],[404,3]]},"1160":{"position":[[153,3],[258,3],[397,3],[405,3],[533,3],[637,3],[720,3],[857,3],[1048,3],[1164,3],[1314,3],[1322,3],[1461,3],[1576,3],[1670,3],[1818,3]]},"1162":{"position":[[165,3],[276,3],[421,3],[429,3],[563,3],[673,3],[762,3],[905,3],[1108,3],[1230,3],[1386,3],[1394,3],[1539,3],[1660,3],[1760,3],[1914,3]]},"1164":{"position":[[220,3],[390,3],[647,3],[828,3]]},"1166":{"position":[[276,3],[513,3],[826,3],[1074,3]]},"1168":{"position":[[88,3],[181,3],[270,3],[384,3],[488,3],[588,3]]},"1170":{"position":[[392,3],[489,3],[921,3],[1029,3]]},"1173":{"position":[[127,3],[195,3],[369,3],[448,3]]},"1175":{"position":[[139,3],[213,3],[399,3],[484,3]]},"1177":{"position":[[127,3],[195,3],[369,3],[448,3]]},"1179":{"position":[[162,3],[271,3],[416,3],[625,3],[745,3],[901,3]]},"1181":{"position":[[68,3],[141,3],[244,3],[357,3],[441,3],[555,3]]},"1183":{"position":[[141,3],[246,3],[328,3],[504,3],[620,3],[713,3]]},"1185":{"position":[[777,3],[875,3],[1035,3],[1162,3],[1271,3],[1442,3]]},"1188":{"position":[[115,3],[240,3],[392,3],[539,3]]},"1190":{"position":[[121,3],[251,3],[409,3],[561,3]]},"1194":{"position":[[211,3],[396,3]]},"1200":{"position":[[45,3],[57,3],[161,3]]},"1295":{"position":[[64,3],[132,3]]},"1329":{"position":[[56,3],[118,3],[202,3],[288,3],[338,3],[410,3],[537,3],[610,3],[705,3],[802,3],[863,3],[946,3]]},"1331":{"position":[[59,3],[124,3],[211,3],[300,3],[353,3],[425,3],[555,3],[631,3],[729,3],[829,3],[893,3],[979,3]]},"1333":{"position":[[56,3],[118,3],[202,3],[288,3],[338,3],[410,3],[537,3],[610,3],[705,3],[802,3],[863,3],[946,3]]},"1335":{"position":[[59,3],[124,3],[211,3],[300,3],[353,3],[428,3],[558,3],[634,3],[732,3],[832,3],[896,3],[982,3]]},"1341":{"position":[[62,3],[130,3],[220,3],[353,3],[432,3],[533,3]]},"1343":{"position":[[65,3],[136,3],[229,3],[365,3],[447,3],[551,3]]},"1345":{"position":[[62,3],[130,3],[220,3],[353,3],[432,3],[533,3]]},"1347":{"position":[[65,3],[136,3],[229,3],[365,3],[447,3],[551,3]]},"1349":{"position":[[82,3],[140,3],[267,3],[336,3]]},"1351":{"position":[[88,3],[149,3],[282,3],[354,3]]},"1408":{"position":[[976,3]]},"1410":{"position":[[1001,3]]},"1418":{"position":[[153,3]]},"1526":{"position":[[24,3],[81,3]]},"1549":{"position":[[92,3]]},"1555":{"position":[[661,3]]},"1557":{"position":[[359,3],[513,3]]},"1566":{"position":[[945,3]]},"1683":{"position":[[34,3]]},"1691":{"position":[[402,3],[519,3]]},"1705":{"position":[[93,3],[164,3],[235,3]]},"1729":{"position":[[109,3]]},"1735":{"position":[[139,3],[178,3]]},"1739":{"position":[[108,3],[129,3],[321,3]]},"1741":{"position":[[827,3],[1462,3],[1589,3],[2431,3]]},"1743":{"position":[[201,3]]},"1745":{"position":[[291,3]]},"1795":{"position":[[1498,3],[2275,3]]},"1797":{"position":[[806,3]]},"1799":{"position":[[901,3],[1053,3],[1169,3]]},"1801":{"position":[[1149,3],[1522,3],[2352,3],[3240,3],[3380,3]]},"1803":{"position":[[954,3],[1196,3],[1342,3],[3343,3],[3556,3],[3637,3],[3924,3],[4307,3],[4555,3],[5228,3],[5392,3],[5594,3]]},"1817":{"position":[[152,3]]},"1819":{"position":[[817,3]]},"1863":{"position":[[227,3]]},"1867":{"position":[[257,3]]},"1887":{"position":[[222,3]]},"1907":{"position":[[213,3],[403,3]]},"1909":{"position":[[1132,3]]},"1913":{"position":[[1073,3],[1156,3]]},"1933":{"position":[[693,3],[794,3]]},"1941":{"position":[[926,3]]},"1951":{"position":[[868,3]]},"1955":{"position":[[70,3]]},"2100":{"position":[[45,3]]},"2132":{"position":[[52,3],[156,3],[286,3],[405,3]]},"2160":{"position":[[46,3]]},"2331":{"position":[[77,3],[505,3],[586,3],[645,3]]},"2333":{"position":[[176,3]]},"2350":{"position":[[59,3]]},"2352":{"position":[[408,3]]},"2354":{"position":[[162,3],[195,3]]},"2359":{"position":[[365,3]]},"2377":{"position":[[125,3]]},"2383":{"position":[[570,3]]},"2482":{"position":[[346,3]]},"2484":{"position":[[446,3]]},"2577":{"position":[[160,3]]},"2579":{"position":[[433,3]]},"2581":{"position":[[1316,3]]},"2603":{"position":[[155,3],[211,3]]},"2607":{"position":[[154,3],[222,3],[581,3]]},"2684":{"position":[[79,3]]},"2694":{"position":[[111,3]]},"2825":{"position":[[346,3]]},"2827":{"position":[[492,3]]},"2829":{"position":[[580,3]]},"2846":{"position":[[107,3]]},"2856":{"position":[[186,3],[260,3]]},"2864":{"position":[[75,3]]},"2899":{"position":[[269,3]]},"2929":{"position":[[385,3],[404,3],[576,3]]},"2945":{"position":[[385,3],[404,3],[633,3]]},"2959":{"position":[[385,3],[404,3],[602,3]]},"3071":{"position":[[836,3]]},"3194":{"position":[[438,3]]},"3215":{"position":[[232,3],[409,3]]},"3218":{"position":[[211,3]]},"3222":{"position":[[24,3],[78,3]]},"3224":{"position":[[84,3],[521,3],[806,3],[851,3],[1297,3],[1523,3],[1618,3]]},"3226":{"position":[[20,3],[39,3],[70,3],[205,3],[480,3]]},"3228":{"position":[[33,3],[51,3],[294,3],[318,3]]},"3230":{"position":[[19,3]]},"3236":{"position":[[286,3],[305,3]]},"3254":{"position":[[101,3],[338,3],[397,3],[567,3],[772,3],[942,3]]},"3258":{"position":[[456,3]]},"3263":{"position":[[53,3],[125,3]]},"3267":{"position":[[168,3]]},"3269":{"position":[[169,3],[299,3]]},"3271":{"position":[[59,3]]},"3273":{"position":[[184,3],[212,3],[241,3],[358,3],[397,3],[442,3]]},"3275":{"position":[[21,3]]},"3291":{"position":[[126,3],[228,3],[497,3],[559,3],[639,3],[774,3],[872,3],[982,3],[1371,3],[1425,3],[1526,3],[1758,3],[1862,3],[1912,3],[2023,3]]},"3321":{"position":[[74,3],[134,3]]},"3323":{"position":[[7,3],[71,3],[113,3],[155,3],[224,3],[262,3],[300,3],[523,3],[555,3]]},"3325":{"position":[[25,3]]},"3333":{"position":[[53,3]]},"3430":{"position":[[662,3],[924,3],[1330,3],[3306,3]]},"3432":{"position":[[1789,3],[3275,3]]},"3434":{"position":[[2359,3]]},"3446":{"position":[[171,3]]},"3456":{"position":[[185,3],[227,3],[299,3],[456,3],[504,3]]},"3466":{"position":[[272,3],[437,3],[556,3],[679,3]]},"3492":{"position":[[84,3],[163,3],[270,3]]},"3494":{"position":[[55,3],[232,3]]},"3496":{"position":[[54,3],[184,3],[295,3]]},"3498":{"position":[[118,3],[464,3]]},"3500":{"position":[[60,3],[170,3],[294,3],[463,3]]},"3506":{"position":[[410,3],[520,3]]},"3510":{"position":[[123,3]]},"3543":{"position":[[118,3],[780,3]]},"3547":{"position":[[715,3]]},"3551":{"position":[[431,3]]},"3575":{"position":[[178,3]]},"3581":{"position":[[172,3]]},"3583":{"position":[[277,3]]},"3587":{"position":[[180,3],[366,3]]},"3589":{"position":[[154,3],[351,3],[771,3],[809,3]]},"3591":{"position":[[141,3],[257,3],[292,3],[327,3]]},"3708":{"position":[[1298,3],[1690,3],[2080,3],[3545,3]]},"3712":{"position":[[56,3]]},"3718":{"position":[[9,3],[45,3]]},"3720":{"position":[[79,3],[94,3],[169,3],[256,3]]},"3722":{"position":[[97,3],[150,3],[289,3]]},"3734":{"position":[[343,3],[425,3]]},"3736":{"position":[[57,3]]},"3738":{"position":[[111,3],[152,3]]},"3740":{"position":[[239,3],[280,3],[602,3],[643,3]]},"3754":{"position":[[73,3],[140,3],[201,3],[216,3]]},"3779":{"position":[[1646,3],[1744,3]]},"3781":{"position":[[577,3]]},"3802":{"position":[[2411,3],[2519,3]]},"3824":{"position":[[225,3]]},"3832":{"position":[[730,3]]},"3842":{"position":[[724,3],[1311,3],[1893,3],[2515,3],[3140,3]]},"3912":{"position":[[1357,3],[1408,3],[1459,3]]},"3916":{"position":[[7114,3],[7455,3],[7719,3],[8107,3],[8420,3],[8523,3]]},"3924":{"position":[[4668,3],[4806,3]]},"3928":{"position":[[1061,3]]},"3934":{"position":[[1471,3],[2937,3]]},"3936":{"position":[[1378,3]]},"3956":{"position":[[939,3],[1234,3],[1548,3],[2877,3],[3107,3]]},"3994":{"position":[[1340,3]]}}}],["newapi",{"_index":8568,"t":{"3704":{"position":[[589,6],[623,6]]},"3924":{"position":[[4129,6],[4163,6]]}}}],["newent",{"_index":3255,"t":{"647":{"position":[[29,9],[80,9],[139,9],[210,9]]},"749":{"position":[[559,9],[757,9]]}}}],["newguid",{"_index":297,"t":{"19":{"position":[[430,7]]},"550":{"position":[[215,7]]},"1681":{"position":[[29,7]]},"1741":{"position":[[566,7],[1325,7],[2161,7]]}}}],["newtoken",{"_index":5988,"t":{"2136":{"position":[[4,8]]}}}],["newtonsoft",{"_index":5522,"t":{"1797":{"position":[[636,10]]},"1803":{"position":[[2417,10]]},"2343":{"position":[[87,10],[197,10]]},"2354":{"position":[[57,10]]},"2357":{"position":[[73,10],[421,10],[480,10]]},"2359":{"position":[[233,10],[408,10]]},"2361":{"position":[[456,10]]},"2363":{"position":[[274,10]]},"2365":{"position":[[167,10]]},"2367":{"position":[[173,10]]},"2369":{"position":[[193,10]]},"2371":{"position":[[200,10]]},"2373":{"position":[[181,10]]},"2375":{"position":[[57,10],[91,10]]},"2379":{"position":[[228,10],[447,10]]},"2381":{"position":[[301,10]]},"2383":{"position":[[8,10],[319,10]]},"2387":{"position":[[93,10]]},"3722":{"position":[[131,10]]},"4006":{"position":[[601,10]]}}}],["newtonsoftjson",{"_index":6206,"t":{"2343":{"position":[[153,14]]},"2357":{"position":[[153,14],[225,14]]},"2385":{"position":[[87,14]]},"3676":{"position":[[43,14]]},"3914":{"position":[[1274,14]]},"3996":{"position":[[905,14]]}}}],["newtonsoftjsonserializerprovid",{"_index":6225,"t":{"2357":{"position":[[527,32]]},"2379":{"position":[[572,32],[657,32]]},"3506":{"position":[[147,32],[265,32],[376,32]]},"3547":{"position":[[183,32],[339,32]]}}}],["newvalu",{"_index":2985,"t":{"570":{"position":[[1562,8],[1854,8],[1865,8],[2199,8],[2210,8],[2490,8],[2501,8]]}}}],["next",{"_index":714,"t":{"112":{"position":[[475,4],[1330,4]]},"199":{"position":[[393,4]]},"321":{"position":[[454,4]]},"1665":{"position":[[236,4],[278,4]]},"1919":{"position":[[278,4],[684,4]]},"1921":{"position":[[334,4]]},"1925":{"position":[[323,4],[1192,4]]},"1927":{"position":[[224,4],[363,4],[427,4],[528,4],[667,4],[731,4]]},"1929":{"position":[[324,4]]},"1941":{"position":[[299,4],[1055,4]]},"1943":{"position":[[232,4],[296,4]]},"1945":{"position":[[324,4]]},"1951":{"position":[[206,4],[357,4],[529,4]]},"1953":{"position":[[232,4],[296,4]]},"1955":{"position":[[27,4]]},"1961":{"position":[[371,4]]},"2569":{"position":[[24,4],[114,4]]},"2577":{"position":[[34,4],[289,4]]},"2579":{"position":[[187,4],[241,4],[250,4],[257,4],[563,4]]},"2581":{"position":[[223,4],[337,4],[389,4],[396,4],[533,4],[726,4],[840,4],[916,4],[923,4],[1060,4]]},"2587":{"position":[[132,4],[246,4],[333,4],[340,4],[446,4]]},"2589":{"position":[[151,4],[277,4],[364,4],[371,4],[621,4]]},"2829":{"position":[[540,4],[907,4]]},"3452":{"position":[[3920,4]]},"3770":{"position":[[2398,4],[4212,4]]},"3812":{"position":[[1985,4]]},"3916":{"position":[[6916,4]]}}}],["next_run_tim",{"_index":8745,"t":{"3770":{"position":[[2398,13],[4212,13]]},"3812":{"position":[[1985,13]]}}}],["nextbyt",{"_index":1341,"t":{"188":{"position":[[428,9]]}}}],["nextid",{"_index":6161,"t":{"2331":{"position":[[29,6],[70,6]]},"2333":{"position":[[93,6],[169,6]]},"3966":{"position":[[1769,6]]}}}],["nextoccurr",{"_index":2638,"t":{"472":{"position":[[61,14]]},"474":{"position":[[93,14]]},"476":{"position":[[95,14]]},"478":{"position":[[108,14]]},"494":{"position":[[405,14],[459,14],[535,15]]}}}],["nextrunjob",{"_index":8980,"t":{"3838":{"position":[[55,11],[276,11]]}}}],["nextrunjobsofmodel",{"_index":8982,"t":{"3838":{"position":[[176,19],[338,19]]}}}],["nextruntim",{"_index":8726,"t":{"3770":{"position":[[961,11],[5722,11]]},"3798":{"position":[[387,11]]},"3802":{"position":[[969,11],[1588,11],[2265,11]]},"3812":{"position":[[373,11],[1235,11],[2667,11]]},"3817":{"position":[[1180,11],[2180,11]]},"3821":{"position":[[672,11]]},"3896":{"position":[[597,11]]}}}],["nexttim",{"_index":6045,"t":{"2224":{"position":[[4,8]]},"2464":{"position":[[4,8]]}}}],["nginx",{"_index":646,"t":{"102":{"position":[[193,5]]},"1503":{"position":[[84,5]]},"2251":{"position":[[118,5],[150,5]]},"3942":{"position":[[314,5]]}}}],["ngmodul",{"_index":2051,"t":{"310":{"position":[[723,8],[970,8]]},"316":{"position":[[345,8]]}}}],["ngoninit",{"_index":2122,"t":{"321":{"position":[[366,8]]}}}],["ni",{"_index":6660,"t":{"2559":{"position":[[2287,2]]}}}],["nice",{"_index":4599,"t":{"1511":{"position":[[456,4]]}}}],["niupi",{"_index":1484,"t":{"199":{"position":[[359,5]]}}}],["nl",{"_index":6507,"t":{"2559":{"position":[[739,2],[745,2],[759,2],[762,2]]}}}],["nlog",{"_index":2991,"t":{"570":{"position":[[2073,4]]},"3928":{"position":[[54,4]]}}}],["nmsazulx",{"_index":6985,"t":{"2768":{"position":[[1350,8],[1388,8],[1487,8]]}}}],["nmslanx",{"_index":6986,"t":{"2768":{"position":[[1421,7]]}}}],["nn",{"_index":6617,"t":{"2559":{"position":[[1806,2]]}}}],["node",{"_index":2081,"t":{"314":{"position":[[593,4],[678,4]]},"1520":{"position":[[163,4]]},"3194":{"position":[[116,4]]}}}],["node_env",{"_index":2080,"t":{"314":{"position":[[593,8],[678,8]]}}}],["nodej",{"_index":4909,"t":{"1516":{"position":[[4,6]]},"2740":{"position":[[6,6]]},"2742":{"position":[[5,6],[23,6]]},"3080":{"position":[[12,6],[91,6],[109,6]]}}}],["nodyang",{"_index":4587,"t":{"1511":{"position":[[335,7]]}}}],["noexport",{"_index":5185,"t":{"1651":{"position":[[265,8]]}}}],["nolock",{"_index":7780,"t":{"3261":{"position":[[190,6],[253,6]]}}}],["nomatch",{"_index":4978,"t":{"1539":{"position":[[1276,9],[1930,9]]},"1557":{"position":[[629,9],[786,9],[844,9]]}}}],["nomatcheshandl",{"_index":4976,"t":{"1539":{"position":[[1166,16],[1199,16],[1841,16]]}}}],["non",{"_index":8554,"t":{"3702":{"position":[[2621,3]]}}}],["nonact",{"_index":5150,"t":{"1623":{"position":[[130,9]]}}}],["nonautomat",{"_index":9733,"t":{"3962":{"position":[[651,12]]}}}],["none",{"_index":2803,"t":{"520":{"position":[[135,4]]},"901":{"position":[[135,4]]},"1315":{"position":[[135,4]]},"2383":{"position":[[522,4]]},"2848":{"position":[[1801,4]]},"3063":{"position":[[350,4]]},"3446":{"position":[[436,4]]},"3448":{"position":[[713,4],[754,4]]},"3646":{"position":[[163,4]]},"3706":{"position":[[342,4]]}}}],["nonqueryexecut",{"_index":2998,"t":{"572":{"position":[[384,17],[677,17]]},"929":{"position":[[2263,17],[2374,17],[2766,16],[2864,16]]}}}],["nonqueryexecutedasync",{"_index":3780,"t":{"929":{"position":[[2963,21],[3113,21]]}}}],["nonqueryexecutingasync",{"_index":3006,"t":{"572":{"position":[[777,22],[1122,22]]},"929":{"position":[[2494,22],[2657,22]]}}}],["nonunifi",{"_index":235,"t":{"15":{"position":[[16,8]]},"17":{"position":[[10,8]]},"19":{"position":[[11,8]]},"1739":{"position":[[18,8],[266,8]]},"1745":{"position":[[111,8]]},"3686":{"position":[[880,8],[955,8]]},"3710":{"position":[[33,8]]},"3720":{"position":[[26,8]]},"3990":{"position":[[76,8]]}}}],["nonuntifi",{"_index":9898,"t":{"3972":{"position":[[350,9]]}}}],["nonvalid",{"_index":3124,"t":{"602":{"position":[[152,13]]},"612":{"position":[[24,13],[86,13]]},"619":{"position":[[31,13]]},"623":{"position":[[5,13]]}}}],["notat",{"_index":6192,"t":{"2341":{"position":[[24,8]]}}}],["notchangedlisten",{"_index":9735,"t":{"3962":{"position":[[692,18]]}}}],["note",{"_index":3128,"t":{"602":{"position":[[272,4]]},"612":{"position":[[80,4]]},"2313":{"position":[[461,4]]},"3938":{"position":[[513,4]]}}}],["note_10699021",{"_index":9562,"t":{"3938":{"position":[[513,13]]}}}],["notequ",{"_index":8004,"t":{"3375":{"position":[[210,8]]},"3383":{"position":[[337,8]]},"3387":{"position":[[193,8]]}}}],["notfound",{"_index":8985,"t":{"3840":{"position":[[74,8]]},"3846":{"position":[[112,8],[368,8]]},"3862":{"position":[[74,8]]},"3884":{"position":[[74,8]]},"3888":{"position":[[99,8]]}}}],["notfoundobjectresult",{"_index":9346,"t":{"3924":{"position":[[1688,20]]}}}],["notfoundresult",{"_index":9345,"t":{"3924":{"position":[[1671,14]]}}}],["notifi",{"_index":7556,"t":{"3162":{"position":[[315,6]]}}}],["notificationhub",{"_index":7553,"t":{"3162":{"position":[[108,15],[172,15]]}}}],["notimplementedexcept",{"_index":2945,"t":{"560":{"position":[[677,23]]},"1041":{"position":[[1075,23]]},"1819":{"position":[[821,23]]},"3287":{"position":[[1880,23],[2188,23],[2504,23],[2825,23]]}}}],["notmap",{"_index":10083,"t":{"3984":{"position":[[1076,9]]}}}],["notmapp",{"_index":2977,"t":{"570":{"position":[[1290,9]]},"3954":{"position":[[716,9]]},"3992":{"position":[[2519,9]]}}}],["notnul",{"_index":3245,"t":{"639":{"position":[[253,7]]}}}],["notstart",{"_index":8854,"t":{"3800":{"position":[[311,8]]}}}],["notsupportedexcept",{"_index":3612,"t":{"822":{"position":[[269,21]]},"913":{"position":[[184,21]]}}}],["now",{"_index":749,"t":{"112":{"position":[[1247,3]]},"233":{"position":[[657,3]]},"237":{"position":[[374,3],[485,3]]},"472":{"position":[[113,3]]},"474":{"position":[[145,3]]},"476":{"position":[[147,3]]},"478":{"position":[[160,3]]},"490":{"position":[[147,3],[181,3],[392,3],[426,3]]},"492":{"position":[[626,3],[733,3]]},"530":{"position":[[814,3]]},"570":{"position":[[1931,3],[2276,3],[2567,3]]},"651":{"position":[[385,3]]},"708":{"position":[[258,3]]},"763":{"position":[[225,3]]},"789":{"position":[[206,3]]},"836":{"position":[[137,3]]},"844":{"position":[[333,3]]},"851":{"position":[[292,3],[1352,3],[1853,3]]},"877":{"position":[[399,3]]},"1039":{"position":[[815,3]]},"1351":{"position":[[385,3]]},"1711":{"position":[[847,3]]},"1925":{"position":[[1109,3]]},"2182":{"position":[[269,3]]},"2208":{"position":[[195,3]]},"2226":{"position":[[115,3]]},"2228":{"position":[[133,3]]},"2398":{"position":[[49,3],[217,3]]},"2400":{"position":[[80,3]]},"2402":{"position":[[151,3]]},"2406":{"position":[[294,3],[601,3]]},"2409":{"position":[[88,3]]},"2411":{"position":[[76,3]]},"2413":{"position":[[76,3]]},"2415":{"position":[[281,3]]},"2426":{"position":[[97,3]]},"2428":{"position":[[99,3]]},"2430":{"position":[[83,3]]},"2432":{"position":[[83,3]]},"2434":{"position":[[285,3],[622,3]]},"2438":{"position":[[153,3]]},"2440":{"position":[[76,3],[189,3],[562,3]]},"2442":{"position":[[394,3],[626,3],[899,3],[1182,3],[1416,3],[1673,3],[1901,3]]},"2448":{"position":[[195,3]]},"2468":{"position":[[127,3]]},"2470":{"position":[[175,3]]},"2472":{"position":[[316,3]]},"2478":{"position":[[494,3]]},"2482":{"position":[[532,3]]},"2484":{"position":[[632,3]]},"2805":{"position":[[445,3]]},"2813":{"position":[[629,3]]},"2817":{"position":[[908,3]]},"2825":{"position":[[532,3]]},"2827":{"position":[[678,3]]},"2829":{"position":[[796,3]]},"2846":{"position":[[154,3]]},"3162":{"position":[[357,3]]},"3226":{"position":[[516,3]]},"3234":{"position":[[603,3],[635,3]]},"3430":{"position":[[120,3],[198,3],[2644,3],[2775,3],[3357,3],[3971,3],[4084,3]]},"3432":{"position":[[3326,3],[3618,3],[5188,3],[5301,3]]},"3434":{"position":[[2410,3]]},"3601":{"position":[[261,3],[376,3]]},"3770":{"position":[[2589,3],[4402,3]]},"3802":{"position":[[2460,3],[2572,3]]},"3810":{"position":[[535,3],[574,3],[630,3],[690,3]]},"3812":{"position":[[2175,3]]},"3838":{"position":[[111,3],[248,3]]},"3924":{"position":[[440,3],[457,3]]}}}],["nowarn",{"_index":9054,"t":{"3910":{"position":[[2133,6],[2146,6]]},"3912":{"position":[[1835,6],[1848,6]]}}}],["npgsql",{"_index":2880,"t":{"546":{"position":[[81,6],[88,6]]},"698":{"position":[[721,6]]},"759":{"position":[[67,6],[92,6]]},"897":{"position":[[326,6]]},"899":{"position":[[775,6]]},"919":{"position":[[177,6]]},"1309":{"position":[[490,6]]},"2674":{"position":[[373,6],[437,6]]}}}],["npm",{"_index":2022,"t":{"308":{"position":[[143,3],[167,3],[174,3]]},"1516":{"position":[[18,3],[34,3],[116,3],[133,3]]},"1520":{"position":[[159,3]]},"1535":{"position":[[513,3]]},"1545":{"position":[[24,3]]},"2742":{"position":[[56,3],[79,3],[84,3]]},"2760":{"position":[[60,3]]},"3080":{"position":[[142,3],[165,3],[170,3]]},"3082":{"position":[[144,3]]},"3194":{"position":[[84,3]]}}}],["npmj",{"_index":4913,"t":{"1516":{"position":[[175,5]]}}}],["nt",{"_index":780,"t":{"114":{"position":[[436,2]]},"3446":{"position":[[911,2]]},"3452":{"position":[[1568,2]]},"3916":{"position":[[4564,2]]},"3928":{"position":[[1473,2]]}}}],["nuget",{"_index":523,"t":{"89":{"position":[[85,5],[103,5]]},"188":{"position":[[18,5]]},"399":{"position":[[719,5]]},"401":{"position":[[284,5],[412,5]]},"706":{"position":[[69,5]]},"765":{"position":[[3,5]]},"1319":{"position":[[69,5]]},"1516":{"position":[[229,5]]},"1535":{"position":[[612,5]]},"1551":{"position":[[4,5],[61,5],[116,5],[152,5],[171,5],[1118,5],[1142,5]]},"2623":{"position":[[135,5],[158,5]]},"2625":{"position":[[197,5],[215,5],[315,5],[327,5]]},"2646":{"position":[[13,5],[42,5],[73,5]]},"2649":{"position":[[78,5],[122,5]]},"2651":{"position":[[40,5]]},"2653":{"position":[[118,5],[224,5]]},"3209":{"position":[[37,5]]},"3250":{"position":[[37,5]]},"3323":{"position":[[355,5]]},"3369":{"position":[[62,5]]},"3702":{"position":[[375,5],[493,5]]},"3922":{"position":[[2372,5]]},"3944":{"position":[[162,5]]},"3992":{"position":[[3981,5]]},"3996":{"position":[[1350,5]]}}}],["null",{"_index":759,"t":{"112":{"position":[[1463,4]]},"114":{"position":[[1307,4],[1330,4],[1349,4],[1359,4],[1418,4],[1431,4]]},"133":{"position":[[1062,4]]},"253":{"position":[[424,4]]},"550":{"position":[[314,4]]},"570":{"position":[[1616,4],[1684,4]]},"587":{"position":[[914,4]]},"653":{"position":[[42,4],[159,4]]},"846":{"position":[[859,4]]},"883":{"position":[[184,4]]},"1353":{"position":[[42,4]]},"1641":{"position":[[29,4],[197,4],[224,4],[270,4],[314,4]]},"1661":{"position":[[583,4]]},"1665":{"position":[[332,4]]},"1753":{"position":[[155,4],[208,4]]},"1755":{"position":[[726,4],[738,4],[931,4],[943,4],[1178,4]]},"1801":{"position":[[1489,4],[2634,4]]},"1803":{"position":[[1309,4],[1554,4],[1866,4],[1891,4],[1983,4],[2004,4],[2278,4],[2833,4],[2927,4],[3574,4],[3944,4],[4567,4]]},"1807":{"position":[[647,4]]},"1919":{"position":[[536,4]]},"1925":{"position":[[1325,4]]},"2047":{"position":[[66,4]]},"2239":{"position":[[145,4]]},"2357":{"position":[[814,4],[1195,4]]},"2359":{"position":[[137,4],[198,4],[599,4]]},"2379":{"position":[[799,4],[997,4]]},"2440":{"position":[[121,4],[294,4],[494,4]]},"2848":{"position":[[1510,4]]},"3023":{"position":[[580,4]]},"3055":{"position":[[101,4]]},"3057":{"position":[[74,4]]},"3063":{"position":[[1145,4]]},"3224":{"position":[[136,4],[164,4]]},"3267":{"position":[[244,4]]},"3269":{"position":[[447,4],[491,4]]},"3273":{"position":[[469,4]]},"3287":{"position":[[3142,4],[3167,4]]},"3446":{"position":[[1782,4],[1805,4],[1824,4],[1834,4],[1893,4],[1906,4]]},"3452":{"position":[[1195,4],[2848,4],[2875,4],[2896,4],[2908,4],[2971,4],[2986,4],[3023,4],[3039,4],[4007,4],[4032,4]]},"3496":{"position":[[240,4],[379,4]]},"3508":{"position":[[75,4]]},"3664":{"position":[[374,4],[396,4]]},"3686":{"position":[[384,4]]},"3706":{"position":[[1137,4]]},"3720":{"position":[[307,4]]},"3722":{"position":[[202,4]]},"3752":{"position":[[337,4],[587,4],[869,4],[1189,4]]},"3770":{"position":[[480,4],[553,4],[859,4],[891,4],[908,4],[1862,4],[1935,4],[2292,4],[2325,4],[2343,4],[3650,4],[3681,4],[4110,4],[4145,4],[4164,4]]},"3779":{"position":[[663,4],[771,4],[1012,4],[1110,4],[1715,4]]},"3783":{"position":[[1807,4]]},"3785":{"position":[[137,4],[235,4],[983,4],[1027,4],[1181,4],[1272,4]]},"3800":{"position":[[306,4],[358,4],[400,4]]},"3802":{"position":[[850,4],[886,4],[905,4],[1480,4],[1512,4],[1529,4],[2486,4]]},"3806":{"position":[[1382,4]]},"3812":{"position":[[265,4],[297,4],[314,4],[1485,4],[1494,4],[1500,4],[1883,4],[1918,4],[1937,4]]},"3817":{"position":[[647,4],[743,4],[1061,4],[1097,4],[1116,4],[1688,4],[1786,4],[2072,4],[2104,4],[2121,4]]},"3821":{"position":[[165,4],[263,4],[447,4],[564,4],[596,4],[613,4]]},"3828":{"position":[[669,4]]},"3896":{"position":[[90,4],[188,4],[372,4],[489,4],[521,4],[538,4]]},"3912":{"position":[[1692,4],[1782,4]]},"3916":{"position":[[4191,4],[5844,4],[5871,4],[5892,4],[5904,4],[5967,4],[5982,4],[6019,4],[6035,4],[7003,4],[7028,4]]},"3922":{"position":[[2176,4]]},"3928":{"position":[[2344,4],[2367,4],[2386,4],[2396,4],[2455,4],[2468,4]]},"3946":{"position":[[304,4]]},"3956":{"position":[[3124,4]]},"3964":{"position":[[529,4]]},"3970":{"position":[[255,4]]},"3996":{"position":[[1565,4]]},"4006":{"position":[[286,4]]}}}],["nullabl",{"_index":3364,"t":{"696":{"position":[[1370,8],[2551,8],[3473,8],[4155,8]]},"3996":{"position":[[741,8]]}}}],["nullvalu",{"_index":8273,"t":{"3496":{"position":[[326,9]]},"3541":{"position":[[736,9]]}}}],["num",{"_index":7121,"t":{"2848":{"position":[[1038,3]]},"3770":{"position":[[2542,3],[4353,3]]},"3812":{"position":[[2126,3]]}}}],["num_retri",{"_index":8750,"t":{"3770":{"position":[[2542,11],[4353,11]]},"3812":{"position":[[2126,11]]}}}],["number",{"_index":3192,"t":{"610":{"position":[[153,6],[189,6]]},"617":{"position":[[122,6],[178,6],[458,6],[558,6]]},"1488":{"position":[[920,6]]},"1495":{"position":[[864,6],[1157,6]]},"1497":{"position":[[206,6]]},"2004":{"position":[[67,6],[173,6]]},"3537":{"position":[[96,6]]},"3664":{"position":[[337,6]]},"3770":{"position":[[2446,6],[2471,6],[2492,6],[2519,6],[4253,6],[4279,6],[4301,6],[4329,6]]},"3812":{"position":[[2026,6],[2052,6],[2074,6],[2102,6]]}}}],["number_of_error",{"_index":8748,"t":{"3770":{"position":[[2492,16],[4301,16]]},"3812":{"position":[[2074,16]]}}}],["number_of_run",{"_index":8746,"t":{"3770":{"position":[[2446,14],[4253,14]]},"3812":{"position":[[2026,14]]}}}],["numberoferror",{"_index":8729,"t":{"3770":{"position":[[1048,14],[5796,14]]},"3798":{"position":[[484,14]]},"3802":{"position":[[1070,14],[1681,14],[2290,14]]},"3812":{"position":[[466,14],[1285,14],[2741,14]]},"3817":{"position":[[1281,14],[2273,14]]},"3821":{"position":[[765,14]]},"3896":{"position":[[690,14]]}}}],["numberofrun",{"_index":8727,"t":{"3770":{"position":[[1007,12],[5757,12]]},"3798":{"position":[[417,12]]},"3802":{"position":[[1025,12],[1640,12],[2277,12]]},"3812":{"position":[[425,12],[1250,12],[2702,12]]},"3817":{"position":[[1236,12],[2232,12]]},"3821":{"position":[[724,12]]},"3896":{"position":[[649,12]]}}}],["numbytesrequest",{"_index":5252,"t":{"1685":{"position":[[411,17]]}}}],["numer",{"_index":3130,"t":{"606":{"position":[[26,7],[628,7],[974,7]]},"608":{"position":[[255,7]]},"617":{"position":[[38,7],[65,7],[1626,7],[2625,7]]},"3057":{"position":[[84,7]]},"3962":{"position":[[1363,7]]}}}],["numretri",{"_index":5497,"t":{"1795":{"position":[[1340,10],[1387,10],[1465,10]]},"1819":{"position":[[643,10],[981,10],[1074,10]]},"3770":{"position":[[1093,10],[5839,10]]},"3798":{"position":[[555,10]]},"3802":{"position":[[1119,10],[1726,10],[2180,10]]},"3808":{"position":[[3131,10]]},"3812":{"position":[[511,10],[1324,10],[2784,10]]},"3817":{"position":[[1330,10],[2318,10]]},"3821":{"position":[[810,10]]},"3832":{"position":[[2270,10],[2523,10],[4031,10],[4284,10]]},"3896":{"position":[[735,10]]}}}],["nunit",{"_index":7985,"t":{"3356":{"position":[[16,5]]}}}],["nupkg",{"_index":4954,"t":{"1535":{"position":[[384,5],[596,5],[643,5],[662,5]]},"1547":{"position":[[139,5],[355,5]]},"1549":{"position":[[270,5],[435,5]]},"1551":{"position":[[72,5],[93,5],[545,5]]},"2649":{"position":[[47,5],[167,5]]}}}],["nvarchar",{"_index":3998,"t":{"1125":{"position":[[121,8]]},"1185":{"position":[[47,8]]},"3222":{"position":[[376,8],[439,8]]}}}],["nynorsk",{"_index":6618,"t":{"2559":{"position":[[1816,7]]}}}],["nz",{"_index":6522,"t":{"2559":{"position":[[866,2]]}}}],["o",{"_index":4183,"t":{"1379":{"position":[[470,1]]},"1440":{"position":[[113,1]]},"1483":{"position":[[229,1]]},"1488":{"position":[[873,1]]},"1495":{"position":[[817,1]]},"2836":{"position":[[698,1]]},"3218":{"position":[[68,1],[79,1],[124,1],[144,1],[175,1],[180,1],[200,1],[232,1],[290,1],[349,1],[379,1],[443,1],[481,1]]},"3230":{"position":[[253,1],[272,1],[375,1],[402,1],[456,1]]},"3430":{"position":[[3371,1]]},"3432":{"position":[[3340,1],[3632,1]]},"3434":{"position":[[2424,1]]}}}],["oas3",{"_index":5076,"t":{"1580":{"position":[[495,4]]}}}],["oauth",{"_index":915,"t":{"121":{"position":[[524,5],[530,5],[661,5],[687,5]]}}}],["obj",{"_index":216,"t":{"13":{"position":[[43,3]]},"282":{"position":[[255,3]]},"286":{"position":[[110,3]]},"461":{"position":[[494,3],[524,3],[843,3],[873,3],[1384,3],[1414,3]]},"1813":{"position":[[97,3]]},"1998":{"position":[[45,3]]},"2059":{"position":[[4,4]]},"2071":{"position":[[25,3]]},"2073":{"position":[[4,3]]},"2079":{"position":[[42,3]]},"2081":{"position":[[4,3]]},"2186":{"position":[[49,3]]},"2188":{"position":[[49,3]]},"2296":{"position":[[43,3]]},"2352":{"position":[[77,3],[133,3],[360,3]]},"3432":{"position":[[4446,3],[4612,3]]},"3826":{"position":[[221,3]]},"3912":{"position":[[873,3]]},"3964":{"position":[[1044,3]]}}}],["obj1",{"_index":1916,"t":{"274":{"position":[[154,4]]},"286":{"position":[[151,4]]}}}],["obj2",{"_index":1918,"t":{"274":{"position":[[192,4]]},"286":{"position":[[200,4]]}}}],["object",{"_index":1036,"t":{"127":{"position":[[1838,6]]},"144":{"position":[[168,6]]},"152":{"position":[[157,6],[444,6]]},"235":{"position":[[36,6]]},"237":{"position":[[1067,6],[1079,6],[1116,6]]},"270":{"position":[[74,6]]},"272":{"position":[[20,6]]},"274":{"position":[[20,6]]},"276":{"position":[[20,6]]},"278":{"position":[[20,6]]},"280":{"position":[[20,6]]},"282":{"position":[[20,6]]},"286":{"position":[[37,6],[99,6]]},"288":{"position":[[20,6],[421,6]]},"290":{"position":[[20,6]]},"294":{"position":[[20,6],[87,6]]},"359":{"position":[[396,6]]},"369":{"position":[[318,6],[353,6],[393,6]]},"570":{"position":[[1598,6]]},"587":{"position":[[1332,6]]},"606":{"position":[[1304,6]]},"929":{"position":[[3239,6],[3329,6],[3474,6],[3570,6],[3753,6],[3830,6],[3954,6],[4037,6]]},"1133":{"position":[[136,6]]},"1135":{"position":[[97,6]]},"1160":{"position":[[280,6],[1186,6]]},"1162":{"position":[[298,6],[1252,6]]},"1200":{"position":[[105,6],[206,6]]},"1234":{"position":[[831,6]]},"1259":{"position":[[134,6]]},"1412":{"position":[[110,6],[259,6],[838,6],[1780,6],[2187,6]]},"1424":{"position":[[705,6],[996,6],[1029,6],[1258,6],[1488,6]]},"1539":{"position":[[1268,6]]},"1633":{"position":[[74,6],[141,6],[207,6],[278,6]]},"1635":{"position":[[102,6]]},"1683":{"position":[[57,6]]},"1703":{"position":[[239,6],[416,6],[558,6]]},"1711":{"position":[[318,6]]},"1724":{"position":[[37,6],[262,6]]},"1761":{"position":[[393,6]]},"1797":{"position":[[427,6]]},"1851":{"position":[[294,6],[593,6],[793,6],[818,6],[1065,6],[1110,6]]},"1909":{"position":[[1136,6]]},"2132":{"position":[[75,6],[179,6],[309,6],[428,6]]},"2341":{"position":[[17,6]]},"2345":{"position":[[362,6],[376,6],[630,6],[746,6]]},"2352":{"position":[[7,6],[111,6],[394,6]]},"2357":{"position":[[769,6],[783,6],[1164,6],[1411,6]]},"2379":{"position":[[754,6],[768,6],[966,6],[1138,6]]},"2581":{"position":[[1320,6]]},"2933":{"position":[[424,6],[701,6]]},"2935":{"position":[[495,6]]},"2937":{"position":[[592,6]]},"3224":{"position":[[1301,6],[1340,6]]},"3267":{"position":[[191,6],[333,6]]},"3273":{"position":[[830,6]]},"3452":{"position":[[2638,6],[3383,6],[3392,6],[3567,6],[3586,6],[3939,6]]},"3456":{"position":[[261,6]]},"3466":{"position":[[287,6],[295,6]]},"3492":{"position":[[108,6]]},"3494":{"position":[[79,6]]},"3496":{"position":[[78,6],[346,6]]},"3500":{"position":[[487,6]]},"3510":{"position":[[146,6]]},"3547":{"position":[[454,6],[591,6]]},"3551":{"position":[[454,6]]},"3664":{"position":[[458,6],[497,6],[563,6]]},"3708":{"position":[[381,6],[454,6],[1668,6],[3420,6],[3488,6],[3511,6],[3567,6]]},"3716":{"position":[[381,6]]},"3720":{"position":[[116,6]]},"3722":{"position":[[260,6]]},"3750":{"position":[[165,6]]},"3777":{"position":[[380,6]]},"3779":{"position":[[1825,6]]},"3781":{"position":[[541,6],[600,6]]},"3783":{"position":[[1314,6]]},"3798":{"position":[[230,6]]},"3916":{"position":[[5634,6],[6379,6],[6388,6],[6563,6],[6582,6],[6935,6]]},"3924":{"position":[[4683,6],[4691,6]]},"3942":{"position":[[199,6]]},"3950":{"position":[[202,6]]},"3956":{"position":[[1212,6],[2756,6],[2820,6],[2843,6],[2895,6]]},"3962":{"position":[[1426,6]]},"3970":{"position":[[284,6]]},"3972":{"position":[[73,6]]},"3976":{"position":[[174,6]]},"3978":{"position":[[808,6],[1522,6]]},"3988":{"position":[[324,6]]},"3994":{"position":[[1247,6]]},"4000":{"position":[[143,6]]}}}],["objectid",{"_index":6744,"t":{"2607":{"position":[[372,8]]}}}],["objectinst",{"_index":3098,"t":{"587":{"position":[[1422,14]]}}}],["objectmapp",{"_index":538,"t":{"91":{"position":[[201,12]]},"2680":{"position":[[58,12]]},"2686":{"position":[[83,12]]},"3071":{"position":[[966,12],[1260,12]]},"3994":{"position":[[21,12]]}}}],["objectmethodexecutor",{"_index":8225,"t":{"3452":{"position":[[3536,20]]},"3916":{"position":[[6532,20]]}}}],["observ",{"_index":2095,"t":{"316":{"position":[[397,10]]}}}],["obsolet",{"_index":8514,"t":{"3692":{"position":[[69,8],[86,8],[192,8]]},"3938":{"position":[[165,8],[1017,8],[1034,8],[1140,8]]}}}],["obtain",{"_index":8549,"t":{"3702":{"position":[[2392,6]]}}}],["occur",{"_index":8963,"t":{"3832":{"position":[[1685,8],[3498,8]]}}}],["occurrencetim",{"_index":8646,"t":{"3762":{"position":[[308,14]]},"3768":{"position":[[483,14]]},"3774":{"position":[[640,14]]},"3783":{"position":[[509,14]]},"3791":{"position":[[480,14],[1259,14],[2007,14]]},"3793":{"position":[[147,14]]},"3795":{"position":[[574,14]]},"3806":{"position":[[3566,14]]},"3808":{"position":[[1000,14],[2221,14]]},"3830":{"position":[[273,14]]},"3832":{"position":[[687,14]]}}}],["octet",{"_index":249,"t":{"15":{"position":[[209,5]]},"17":{"position":[[203,5]]},"1739":{"position":[[183,5],[363,5]]},"3522":{"position":[[926,5],[1117,5]]},"3950":{"position":[[135,5]]}}}],["october2018upd",{"_index":1351,"t":{"190":{"position":[[73,17]]}}}],["office365",{"_index":2568,"t":{"445":{"position":[[247,9],[327,9]]},"447":{"position":[[155,9],[236,9]]}}}],["oftyp",{"_index":5858,"t":{"1919":{"position":[[450,6]]}}}],["og62i0rkxnq96ksjem3vgxtg",{"_index":805,"t":{"114":{"position":[[910,24]]},"3446":{"position":[[1385,24]]},"3928":{"position":[[1947,24]]}}}],["oh",{"_index":3888,"t":{"1037":{"position":[[862,2]]},"1845":{"position":[[212,2],[485,2]]},"1847":{"position":[[17,2],[91,2]]},"1849":{"position":[[14,2],[49,2]]},"1851":{"position":[[263,2],[542,2],[790,2],[1062,2]]},"1857":{"position":[[190,2]]},"1859":{"position":[[204,2]]},"1863":{"position":[[11,2],[32,2],[65,2],[88,2],[123,2],[163,2],[209,2]]},"1869":{"position":[[547,2]]},"1873":{"position":[[379,2]]},"1875":{"position":[[582,2],[714,2]]},"1885":{"position":[[125,2],[171,2]]},"2191":{"position":[[11,2],[34,2]]},"2193":{"position":[[11,2],[65,2]]},"2195":{"position":[[11,2],[32,2]]},"2197":{"position":[[11,2],[63,2]]},"2472":{"position":[[228,2]]},"2536":{"position":[[199,2]]},"3009":{"position":[[157,2],[203,2]]},"3448":{"position":[[525,2]]},"3918":{"position":[[3679,2]]},"3920":{"position":[[225,2]]},"3922":{"position":[[1622,2]]},"3924":{"position":[[1540,2]]},"3932":{"position":[[508,2]]},"3998":{"position":[[667,2]]},"4000":{"position":[[959,2]]}}}],["ok",{"_index":311,"t":{"19":{"position":[[634,2],[660,2]]},"1526":{"position":[[41,2],[97,2]]},"1741":{"position":[[798,2],[824,2],[1560,2],[1586,2],[2402,2],[2428,2]]},"3575":{"position":[[1041,2]]},"3581":{"position":[[758,2]]},"3583":{"position":[[944,2]]}}}],["old",{"_index":3571,"t":{"773":{"position":[[998,3]]}}}],["oldent",{"_index":3496,"t":{"747":{"position":[[610,9],[806,9]]},"749":{"position":[[598,9],[776,9]]},"3988":{"position":[[61,9]]}}}],["oldli",{"_index":6976,"t":{"2768":{"position":[[1162,5],[1274,5]]}}}],["oldvalu",{"_index":2986,"t":{"570":{"position":[[1605,8],[1692,8],[1881,8],[1892,8],[2226,8],[2237,8],[2517,8],[2528,8]]}}}],["om",{"_index":6452,"t":{"2559":{"position":[[208,2]]}}}],["on",{"_index":8530,"t":{"3702":{"position":[[765,3]]}}}],["onactionexecutionasync",{"_index":710,"t":{"112":{"position":[[396,22]]},"1665":{"position":[[158,22]]},"1925":{"position":[[244,22]]},"1927":{"position":[[284,22],[395,22]]},"1929":{"position":[[245,22]]},"1961":{"position":[[292,22]]}}}],["onauthorizationasync",{"_index":5832,"t":{"1913":{"position":[[364,20]]},"1915":{"position":[[259,20]]}}}],["onchang",{"_index":2591,"t":{"453":{"position":[[76,8],[174,8]]},"747":{"position":[[778,9]]},"749":{"position":[[393,10],[739,9]]},"1733":{"position":[[12,8]]},"2731":{"position":[[28,8],[483,8]]},"3858":{"position":[[33,9]]},"3894":{"position":[[33,9]]}}}],["onchangefail",{"_index":3499,"t":{"749":{"position":[[1059,14]]}}}],["onclientcr",{"_index":8298,"t":{"3512":{"position":[[32,16]]}}}],["onclientcreating1",{"_index":8339,"t":{"3553":{"position":[[322,17]]}}}],["onclientcreating2",{"_index":8340,"t":{"3553":{"position":[[434,17]]}}}],["oncomplet",{"_index":7865,"t":{"3287":{"position":[[2875,11]]},"3922":{"position":[[1222,11]]}}}],["onconfigur",{"_index":2775,"t":{"512":{"position":[[139,13]]},"518":{"position":[[358,13],[419,13],[554,13],[577,13]]},"534":{"position":[[170,13],[533,13],[697,13]]},"915":{"position":[[54,11],[109,13],[353,13]]},"1313":{"position":[[988,13],[1084,13]]},"2943":{"position":[[502,13]]},"2951":{"position":[[17,13],[348,13],[466,13]]}}}],["onconsumeexcept",{"_index":5598,"t":{"1803":{"position":[[779,18],[1629,18]]}}}],["oncreat",{"_index":3637,"t":{"846":{"position":[[105,10],[123,9],[594,10]]},"2935":{"position":[[576,10]]},"2937":{"position":[[673,10]]}}}],["ondelet",{"_index":3684,"t":{"877":{"position":[[1085,8]]}}}],["onexcept",{"_index":5759,"t":{"1885":{"position":[[203,11]]},"3009":{"position":[[235,11]]},"3518":{"position":[[32,11]]},"3595":{"position":[[204,11],[224,11],[330,11],[384,11]]},"3708":{"position":[[1223,11]]},"3716":{"position":[[231,11]]},"3920":{"position":[[1537,11]]},"3956":{"position":[[864,11]]}}}],["onexception1",{"_index":8345,"t":{"3559":{"position":[[357,12]]}}}],["onexception2",{"_index":8346,"t":{"3559":{"position":[[507,12]]}}}],["onexceptionasync",{"_index":5752,"t":{"1883":{"position":[[316,16]]},"1933":{"position":[[220,16]]},"1935":{"position":[[257,16],[326,16]]},"1937":{"position":[[251,16]]}}}],["onexecutedasync",{"_index":5646,"t":{"1807":{"position":[[501,15]]},"3828":{"position":[[479,15]]},"3830":{"position":[[35,15]]}}}],["onexecutingasync",{"_index":5645,"t":{"1807":{"position":[[337,16]]},"3828":{"position":[[271,16]]},"3830":{"position":[[16,16]]}}}],["onexit",{"_index":7184,"t":{"2899":{"position":[[514,6],[592,6]]},"3910":{"position":[[1300,6],[1367,6]]}}}],["onget",{"_index":5903,"t":{"1953":{"position":[[337,5]]},"3420":{"position":[[205,5]]},"3422":{"position":[[199,5]]},"3436":{"position":[[264,5]]}}}],["ongetasync",{"_index":1844,"t":{"253":{"position":[[264,10]]}}}],["onlin",{"_index":6881,"t":{"2749":{"position":[[615,6]]},"3080":{"position":[[1183,6]]}}}],["onlinepub",{"_index":4941,"t":{"1530":{"position":[[149,10]]}}}],["onlisten",{"_index":6364,"t":{"2486":{"position":[[411,10]]},"2729":{"position":[[138,10],[462,10]]},"2731":{"position":[[53,10]]}}}],["onlogexecut",{"_index":7615,"t":{"3215":{"position":[[477,14]]},"3228":{"position":[[202,14]]},"3254":{"position":[[621,14],[996,14],[1308,14]]},"3275":{"position":[[211,14]]}}}],["onlyjson",{"_index":8184,"t":{"3452":{"position":[[148,8],[288,8],[390,8],[457,8],[768,8],[840,8]]},"3456":{"position":[[152,8]]},"3916":{"position":[[3335,8],[3414,8],[3460,8],[3764,8],[3836,8]]}}}],["onmodelcr",{"_index":2763,"t":{"504":{"position":[[144,15]]},"832":{"position":[[450,15],[500,15]]},"1777":{"position":[[42,15],[172,15]]},"1783":{"position":[[74,15],[171,15]]},"3994":{"position":[[191,15]]}}}],["onpagehandlerexecutionasync",{"_index":5896,"t":{"1951":{"position":[[263,27]]}}}],["onpagehandlerselectionasync",{"_index":5901,"t":{"1951":{"position":[[657,27]]}}}],["onpostresetcachedtim",{"_index":1849,"t":{"253":{"position":[[532,21]]}}}],["onrequest",{"_index":8294,"t":{"3510":{"position":[[32,12]]},"3514":{"position":[[32,12]]},"3920":{"position":[[1313,9]]}}}],["onrequest1",{"_index":8341,"t":{"3555":{"position":[[344,10]]}}}],["onrequest2",{"_index":8342,"t":{"3555":{"position":[[474,10]]}}}],["onrequestfaild",{"_index":9588,"t":{"3942":{"position":[[369,16]]},"3952":{"position":[[121,16]]}}}],["onrequesting1",{"_index":8337,"t":{"3551":{"position":[[344,13]]}}}],["onrequesting2",{"_index":8338,"t":{"3551":{"position":[[568,13]]}}}],["onresourceexecutionasync",{"_index":5853,"t":{"1919":{"position":[[193,24]]},"1921":{"position":[[249,24]]}}}],["onrespons",{"_index":8299,"t":{"3516":{"position":[[32,12]]},"3920":{"position":[[1423,12]]}}}],["onresponsestatuscod",{"_index":8585,"t":{"3708":{"position":[[2505,21]]},"3716":{"position":[[551,21]]},"3912":{"position":[[2013,21]]},"3956":{"position":[[1853,21]]},"3976":{"position":[[265,21]]},"3996":{"position":[[1809,21]]}}}],["onresponsing1",{"_index":8343,"t":{"3557":{"position":[[347,13]]}}}],["onresponsing2",{"_index":8344,"t":{"3557":{"position":[[482,13]]}}}],["onresultexecutionasync",{"_index":5865,"t":{"1927":{"position":[[588,22],[699,22]]},"1941":{"position":[[220,22]]},"1943":{"position":[[153,22],[264,22]]},"1945":{"position":[[245,22]]},"1953":{"position":[[153,22],[264,22]]}}}],["onsucceed",{"_index":8580,"t":{"3708":{"position":[[1625,11]]},"3716":{"position":[[338,11]]},"3946":{"position":[[131,11]]},"3948":{"position":[[164,11]]},"3956":{"position":[[1169,11]]}}}],["ontriggerchang",{"_index":9017,"t":{"3858":{"position":[[45,16]]},"3894":{"position":[[45,16]]}}}],["onvalidatefail",{"_index":5758,"t":{"1885":{"position":[[179,16]]},"3009":{"position":[[211,16]]},"3708":{"position":[[1993,16]]},"3716":{"position":[[435,16]]},"3956":{"position":[[1461,16]]},"3996":{"position":[[1203,16]]}}}],["oop",{"_index":3887,"t":{"1037":{"position":[[857,4]]},"1845":{"position":[[207,4],[480,4]]},"1847":{"position":[[12,4],[86,4]]},"1849":{"position":[[18,4],[44,4]]},"1851":{"position":[[71,4]]},"1857":{"position":[[185,4]]},"1859":{"position":[[199,4]]},"1861":{"position":[[43,4],[106,4],[167,4]]},"1863":{"position":[[6,4],[27,4],[60,4],[83,4],[118,4],[158,4],[204,4],[258,4],[305,4]]},"1869":{"position":[[211,4],[542,4]]},"1873":{"position":[[374,4]]},"1875":{"position":[[577,4],[709,4]]},"1885":{"position":[[120,4],[166,4]]},"2191":{"position":[[6,4],[29,4]]},"2193":{"position":[[6,4],[60,4]]},"2195":{"position":[[6,4],[27,4]]},"2197":{"position":[[6,4],[58,4]]},"2199":{"position":[[63,4],[126,4],[187,4]]},"2201":{"position":[[6,4],[34,4]]},"2472":{"position":[[223,4]]},"2536":{"position":[[194,4]]},"3009":{"position":[[152,4],[198,4]]},"3017":{"position":[[115,4]]},"3432":{"position":[[4776,4]]},"3448":{"position":[[520,4],[530,4]]},"3918":{"position":[[3674,4]]},"3920":{"position":[[220,4],[230,4]]},"3922":{"position":[[1617,4]]},"3924":{"position":[[1535,4],[1545,4]]},"3930":{"position":[[1030,4]]},"3932":{"position":[[423,4],[503,4]]},"3954":{"position":[[309,4]]},"3956":{"position":[[39,4]]},"3966":{"position":[[13,4]]},"3972":{"position":[[107,4]]},"3998":{"position":[[663,3]]},"4000":{"position":[[954,4]]}}}],["open",{"_index":248,"t":{"15":{"position":[[189,4]]},"17":{"position":[[183,4]]},"1739":{"position":[[163,4]]},"3291":{"position":[[1576,4]]},"3702":{"position":[[1015,4],[1703,4],[2166,4]]},"3916":{"position":[[7151,4],[7492,4],[7756,4],[8144,4],[8457,4]]}}}],["openapi",{"_index":5911,"t":{"1973":{"position":[[101,7]]},"1987":{"position":[[101,7]]},"2010":{"position":[[109,7]]}}}],["openapicontact",{"_index":7340,"t":{"3063":{"position":[[1682,14]]},"3706":{"position":[[1693,14]]}}}],["openapilicens",{"_index":7342,"t":{"3063":{"position":[[1713,14]]},"3706":{"position":[[1724,14]]}}}],["openapiserv",{"_index":7322,"t":{"3063":{"position":[[633,13]]},"3706":{"position":[[625,13]]}}}],["opengroup",{"_index":4940,"t":{"1530":{"position":[[135,9]]}}}],["openreadstream",{"_index":5392,"t":{"1743":{"position":[[171,14]]}}}],["opensourc",{"_index":1777,"t":{"241":{"position":[[196,10]]},"251":{"position":[[199,10]]},"3430":{"position":[[3148,11],[4451,11]]},"3432":{"position":[[5668,11]]},"3452":{"position":[[3269,11]]},"3601":{"position":[[749,11]]},"3832":{"position":[[2385,11],[2638,11],[3037,11],[4146,11],[4399,11],[4798,11]]},"3916":{"position":[[6265,11]]},"3934":{"position":[[2308,10]]}}}],["oper",{"_index":2990,"t":{"570":{"position":[[1968,7],[2313,7],[2604,7]]},"771":{"position":[[0,10]]}}}],["operand",{"_index":4920,"t":{"1520":{"position":[[66,7],[80,7]]},"1530":{"position":[[41,7],[97,7]]},"1539":{"position":[[1239,8],[1911,8]]},"1557":{"position":[[619,8],[709,8],[768,8]]}}}],["operationbas",{"_index":3480,"t":{"734":{"position":[[7356,13],[7467,13]]}}}],["operationexecutor",{"_index":3474,"t":{"734":{"position":[[7088,17],[7232,17],[7338,17],[7449,17]]}}}],["operationid",{"_index":2140,"t":{"327":{"position":[[111,11],[198,11]]},"3700":{"position":[[111,11],[198,11]]},"3924":{"position":[[479,11],[1630,11]]}}}],["opt",{"_index":3510,"t":{"761":{"position":[[127,3],[156,3],[165,3]]},"899":{"position":[[1873,3],[1883,3]]},"3430":{"position":[[4647,3]]},"3932":{"position":[[980,3],[1058,3]]}}}],["option",{"_index":1040,"t":{"129":{"position":[[40,7],[53,7],[140,7],[289,7],[302,7]]},"247":{"position":[[472,7],[485,7],[551,7],[579,7]]},"249":{"position":[[164,7],[198,7],[275,7]]},"253":{"position":[[693,7],[849,7]]},"288":{"position":[[593,7],[606,7]]},"319":{"position":[[627,7]]},"350":{"position":[[559,7],[607,7],[698,7]]},"369":{"position":[[667,7],[762,7]]},"455":{"position":[[572,8],[823,8],[1091,8]]},"461":{"position":[[353,7],[367,7],[540,7],[702,7],[716,7],[889,7],[1253,7],[1267,7],[1430,7]]},"508":{"position":[[295,7],[370,7],[386,7]]},"510":{"position":[[325,7],[404,7],[420,7]]},"514":{"position":[[354,7],[378,7],[494,7],[680,7],[693,7]]},"516":{"position":[[300,7],[375,7],[391,7]]},"518":{"position":[[230,7],[305,7],[321,7]]},"524":{"position":[[413,7],[426,7],[528,7],[593,7],[694,7]]},"526":{"position":[[103,7],[127,7],[369,7]]},"534":{"position":[[480,7],[496,7]]},"570":{"position":[[475,7],[491,7]]},"653":{"position":[[509,7],[525,7]]},"706":{"position":[[133,7],[146,7]]},"713":{"position":[[537,7]]},"734":{"position":[[545,7]]},"745":{"position":[[274,7],[290,7]]},"761":{"position":[[29,7],[42,7]]},"832":{"position":[[397,7],[413,7]]},"846":{"position":[[553,7],[569,7]]},"899":{"position":[[16,7],[74,7],[157,7],[253,7],[321,7],[399,7],[476,7],[530,7],[607,7],[729,7],[797,7],[852,7],[949,7],[1015,7],[1151,7],[1164,7],[1247,7],[1384,7],[1397,7],[1540,7],[1553,7],[1664,7],[1689,7],[1790,7]]},"947":{"position":[[417,7],[433,7],[541,7],[925,7],[941,7]]},"1054":{"position":[[311,7],[327,7]]},"1056":{"position":[[348,7],[364,7]]},"1058":{"position":[[280,7]]},"1066":{"position":[[511,7],[527,7]]},"1311":{"position":[[293,7],[309,7]]},"1313":{"position":[[527,7],[543,7],[611,7],[935,7],[951,7]]},"1317":{"position":[[354,7],[378,7],[450,7]]},"1319":{"position":[[133,7],[146,7]]},"1353":{"position":[[476,7],[492,7]]},"1667":{"position":[[244,6],[256,6],[315,6]]},"1755":{"position":[[677,7],[690,7],[882,7],[895,7],[1117,7],[1130,7]]},"1801":{"position":[[3203,7],[3453,7]]},"1803":{"position":[[5196,7],[5684,7]]},"1819":{"position":[[501,7],[514,7],[891,7]]},"1827":{"position":[[24,7],[37,7],[67,7]]},"1907":{"position":[[180,7],[193,7],[318,7],[383,7],[505,7],[518,7]]},"1909":{"position":[[510,7]]},"1913":{"position":[[1314,7],[1327,7]]},"1919":{"position":[[777,7],[790,7]]},"1925":{"position":[[1506,7],[1519,7]]},"1927":{"position":[[823,7],[836,7]]},"1933":{"position":[[943,7],[956,7]]},"1935":{"position":[[438,7],[451,7]]},"1941":{"position":[[1194,7],[1207,7]]},"1943":{"position":[[388,7],[401,7]]},"1951":{"position":[[835,7],[848,7]]},"2039":{"position":[[4,7]]},"2071":{"position":[[31,7]]},"2073":{"position":[[36,7]]},"2075":{"position":[[4,7]]},"2079":{"position":[[48,7]]},"2081":{"position":[[53,7]]},"2083":{"position":[[4,7]]},"2175":{"position":[[92,7],[105,7],[344,7],[357,7]]},"2208":{"position":[[34,7],[88,7],[138,7],[218,7]]},"2251":{"position":[[230,7],[243,7]]},"2272":{"position":[[121,7]]},"2285":{"position":[[52,7],[65,7]]},"2352":{"position":[[268,7],[281,7]]},"2359":{"position":[[71,7],[84,7],[146,7],[306,7],[319,7],[533,7],[546,7]]},"2361":{"position":[[71,7],[124,7],[529,7],[542,7]]},"2363":{"position":[[71,7],[84,7],[347,7],[360,7]]},"2365":{"position":[[71,7],[84,7]]},"2367":{"position":[[71,7],[84,7]]},"2369":{"position":[[71,7],[84,7]]},"2371":{"position":[[71,7],[84,7]]},"2373":{"position":[[71,7],[84,7]]},"2377":{"position":[[66,7],[79,7]]},"2379":{"position":[[145,7],[158,7],[266,7],[279,7],[488,7],[501,7]]},"2381":{"position":[[128,7],[141,7],[219,7],[339,7],[352,7],[430,7]]},"2383":{"position":[[357,7],[370,7],[457,7],[528,7]]},"2395":{"position":[[68,7]]},"2448":{"position":[[34,7],[88,7],[138,7],[218,7]]},"2709":{"position":[[244,7]]},"2713":{"position":[[912,7],[1217,7],[1339,7]]},"2721":{"position":[[27,7],[42,7],[162,7],[349,7]]},"2725":{"position":[[678,7],[890,7],[920,7],[1554,7],[1670,7],[2171,7],[2332,7],[2362,7],[2629,7]]},"2727":{"position":[[127,7],[581,7],[622,7],[649,7],[678,7],[844,7]]},"2729":{"position":[[158,7],[488,7],[540,7],[578,7],[648,7]]},"2731":{"position":[[372,7],[429,7],[463,7],[475,7],[508,7],[572,7],[584,7],[594,7]]},"2821":{"position":[[521,7],[534,7]]},"2846":{"position":[[98,6],[128,6],[227,6]]},"2848":{"position":[[191,7],[204,7],[252,7],[284,7],[1677,7],[1690,7],[1756,7]]},"2925":{"position":[[401,7],[417,7]]},"2927":{"position":[[292,7],[305,7],[343,7]]},"2933":{"position":[[388,7],[404,7]]},"2935":{"position":[[459,7],[475,7]]},"2937":{"position":[[556,7],[572,7]]},"2941":{"position":[[401,7],[417,7]]},"2943":{"position":[[292,7],[305,7],[339,7]]},"2949":{"position":[[308,7],[324,7]]},"2951":{"position":[[295,7],[311,7],[708,7],[720,7]]},"2955":{"position":[[401,7],[417,7]]},"2957":{"position":[[292,7],[305,7],[343,7]]},"2963":{"position":[[355,7],[371,7]]},"2969":{"position":[[29,7],[42,7],[107,7]]},"3158":{"position":[[349,7],[600,7]]},"3291":{"position":[[487,7],[597,7],[660,7],[1003,7],[1748,7],[1832,7],[1882,7]]},"3430":{"position":[[3235,7],[3248,7],[3489,7],[3502,7],[3578,7],[3710,7],[3723,7],[4571,7],[4584,7]]},"3432":{"position":[[1028,7],[1041,7],[1219,7],[1232,7],[1497,7],[1510,7],[1688,7],[1701,7],[1939,7],[1952,7],[2050,7],[2206,7],[2219,7],[2347,7],[2360,7],[2508,7],[2521,7],[3204,7],[3217,7],[3488,7],[3501,7],[3976,7],[3989,7],[4190,7],[4203,7],[4279,7],[4456,7],[4469,7],[4622,7],[4635,7],[4927,7],[4940,7]]},"3434":{"position":[[488,7],[568,7],[581,7],[1092,7],[1105,7],[1400,7],[1413,7],[1543,7],[1556,7],[1754,7],[1767,7],[1953,7],[1966,7],[2124,7],[2137,7],[2288,7],[2301,7],[2564,7],[2577,7],[2653,7],[2835,7],[2848,7]]},"3450":{"position":[[94,7],[107,7]]},"3452":{"position":[[84,7],[97,7],[158,7]]},"3454":{"position":[[116,7],[129,7]]},"3456":{"position":[[413,7],[426,7],[474,7]]},"3458":{"position":[[80,7],[93,7]]},"3466":{"position":[[837,7],[850,7]]},"3470":{"position":[[230,7],[243,7]]},"3498":{"position":[[33,7],[63,7]]},"3543":{"position":[[33,7],[63,7]]},"3575":{"position":[[26,7],[57,7],[123,7]]},"3577":{"position":[[62,7],[157,7]]},"3579":{"position":[[304,7],[411,7]]},"3587":{"position":[[52,7],[103,7],[274,7]]},"3589":{"position":[[26,7],[77,7],[259,7],[694,7]]},"3591":{"position":[[26,7],[49,7]]},"3593":{"position":[[59,7],[88,7]]},"3666":{"position":[[129,7],[142,7],[312,7],[370,7],[383,7],[429,7]]},"3668":{"position":[[86,7],[99,7]]},"3680":{"position":[[102,7],[115,7]]},"3704":{"position":[[240,7],[253,7],[385,7],[553,7],[566,7],[707,7]]},"3762":{"position":[[425,7],[455,7]]},"3764":{"position":[[51,7],[64,7]]},"3766":{"position":[[78,7],[91,7]]},"3768":{"position":[[100,7],[113,7],[2482,7],[2495,7],[2523,7]]},"3772":{"position":[[153,7],[166,7]]},"3774":{"position":[[110,7],[123,7]]},"3781":{"position":[[79,7],[661,7]]},"3806":{"position":[[321,7],[334,7],[1715,7],[1728,7]]},"3808":{"position":[[450,7],[463,7],[554,7]]},"3810":{"position":[[82,7],[1023,7]]},"3817":{"position":[[432,7],[445,7],[1512,7],[1525,7]]},"3824":{"position":[[125,7],[141,7]]},"3826":{"position":[[28,7],[80,7],[128,7],[179,7],[272,7],[293,7],[327,7],[376,7],[420,7],[473,7],[544,7],[619,7],[668,7],[719,7]]},"3828":{"position":[[869,7]]},"3832":{"position":[[843,7],[856,7],[905,7],[945,7]]},"3910":{"position":[[1649,7],[1662,7],[1770,7],[1783,7],[1901,7],[1914,7],[2020,7],[2033,7]]},"3914":{"position":[[2197,7],[2292,7]]},"3916":{"position":[[781,7],[870,7],[2891,7],[2904,7],[3002,7],[3015,7],[3123,7],[3136,7],[3271,7],[3284,7],[8901,7],[8914,7]]},"3918":{"position":[[2530,7],[2543,7],[2696,7],[2709,7],[2754,7],[3070,7],[3084,7],[3145,7]]},"3922":{"position":[[176,7]]},"3924":{"position":[[3774,7],[3787,7],[3919,7],[4093,7],[4106,7],[4247,7]]},"3932":{"position":[[932,7],[999,7]]},"3934":{"position":[[249,7]]},"3936":{"position":[[7,7]]}}}],["optionbuild",{"_index":3509,"t":{"761":{"position":[[101,13]]},"899":{"position":[[1852,13]]}}}],["options1",{"_index":6827,"t":{"2713":{"position":[[1072,8],[1328,8],[1481,8],[1501,8],[1524,8],[1962,8],[2026,8],[2046,8],[2069,8]]}}}],["options2",{"_index":5927,"t":{"2039":{"position":[[64,8]]},"2713":{"position":[[1114,8],[1354,8],[1563,8],[1583,8],[1606,8],[2093,8],[2165,8],[2185,8],[2208,8]]}}}],["options3",{"_index":5929,"t":{"2039":{"position":[[132,8]]},"2713":{"position":[[1156,8],[1388,8],[1645,8],[1665,8],[1688,8],[2232,8],[2303,8],[2323,8],[2346,8]]}}}],["optionsbuild",{"_index":2777,"t":{"512":{"position":[[177,14]]},"518":{"position":[[396,14],[433,14],[450,14]]},"534":{"position":[[571,14],[589,14],[711,14]]},"915":{"position":[[147,14],[165,14],[367,14]]},"1313":{"position":[[1026,14],[1044,14],[1098,14]]},"2951":{"position":[[386,14],[404,14],[480,14],[652,14]]}}}],["optionsmonitor",{"_index":6829,"t":{"2713":{"position":[[1310,14],[1399,14]]}}}],["optionsreloadtoken",{"_index":6854,"t":{"2731":{"position":[[331,18],[442,18],[630,18]]}}}],["optionsset",{"_index":6839,"t":{"2721":{"position":[[5,15],[67,15],[124,15],[143,15],[580,15],[816,15]]},"2723":{"position":[[9,15]]}}}],["optionssnapshot",{"_index":6828,"t":{"2713":{"position":[[1260,15],[1365,15]]}}}],["ora",{"_index":3727,"t":{"899":{"position":[[1762,3]]}}}],["oracl",{"_index":640,"t":{"102":{"position":[[150,6]]},"520":{"position":[[252,6]]},"546":{"position":[[95,6],[102,6]]},"698":{"position":[[759,6],[766,6]]},"759":{"position":[[99,6],[124,6]]},"773":{"position":[[31,6]]},"803":{"position":[[58,6]]},"805":{"position":[[58,6]]},"895":{"position":[[58,6]]},"897":{"position":[[364,6],[371,6],[402,6]]},"899":{"position":[[790,6],[843,6],[901,6],[921,6],[1085,6],[1619,6],[1738,6],[1839,6]]},"901":{"position":[[280,6]]},"1105":{"position":[[58,6]]},"1155":{"position":[[138,6]]},"1309":{"position":[[528,6],[535,6],[566,6]]},"1315":{"position":[[280,6]]},"2917":{"position":[[74,6]]},"3211":{"position":[[25,6],[158,6]]},"3934":{"position":[[634,6]]},"3936":{"position":[[335,6]]},"3962":{"position":[[1454,6]]},"3964":{"position":[[1094,6]]},"3982":{"position":[[7,6]]},"3984":{"position":[[612,6],[632,6]]},"3986":{"position":[[1095,6]]},"3990":{"position":[[20,6]]},"3992":{"position":[[3774,6]]}}}],["oracledbcontextloc",{"_index":4095,"t":{"1277":{"position":[[136,22]]}}}],["orcl",{"_index":2805,"t":{"520":{"position":[[267,4],[281,4],[405,4]]},"901":{"position":[[295,4],[309,4],[433,4]]},"1315":{"position":[[295,4],[309,4],[433,4]]}}}],["order",{"_index":1569,"t":{"212":{"position":[[84,5],[98,5]]},"556":{"position":[[74,5]]},"558":{"position":[[74,6],[290,6],[310,5]]},"881":{"position":[[67,6]]},"883":{"position":[[305,6]]},"1416":{"position":[[387,5]]},"1420":{"position":[[349,5],[834,5]]},"1422":{"position":[[58,5],[71,5]]},"1641":{"position":[[319,5]]},"1795":{"position":[[1698,5],[1748,5],[1756,5]]},"1905":{"position":[[144,5]]},"1961":{"position":[[259,5],[414,5]]},"3001":{"position":[[366,5]]},"3003":{"position":[[293,5]]},"3063":{"position":[[1498,5]]},"3120":{"position":[[24,5]]},"3218":{"position":[[39,5],[342,5]]},"3222":{"position":[[65,5],[97,5],[211,5],[321,5]]},"3224":{"position":[[1527,5]]},"3226":{"position":[[484,5],[596,5],[637,5]]},"3230":{"position":[[39,5],[90,5],[169,5],[242,5],[368,5]]},"3236":{"position":[[404,5],[567,5]]},"3258":{"position":[[460,5],[617,5],[651,5]]},"3261":{"position":[[498,5]]},"3269":{"position":[[387,5]]},"3616":{"position":[[67,5]]},"3640":{"position":[[601,5],[636,5],[671,5],[708,5],[781,5]]},"3706":{"position":[[1509,5]]},"3910":{"position":[[454,5]]}}}],["orderbi",{"_index":3651,"t":{"853":{"position":[[312,7],[613,7]]},"871":{"position":[[45,7],[109,7]]},"875":{"position":[[45,7]]},"881":{"position":[[102,7]]},"3291":{"position":[[349,7],[1119,7]]}}}],["orderbydescend",{"_index":3676,"t":{"873":{"position":[[45,17],[119,17]]},"875":{"position":[[65,17]]}}}],["orderbytyp",{"_index":7658,"t":{"3224":{"position":[[724,11],[1009,11]]}}}],["orderdetail",{"_index":7632,"t":{"3218":{"position":[[418,11]]},"3230":{"position":[[351,11]]}}}],["orderid",{"_index":7629,"t":{"3218":{"position":[[159,7],[463,7]]},"3230":{"position":[[261,7],[292,7],[390,7],[426,7]]}}}],["orderid0",{"_index":7693,"t":{"3230":{"position":[[439,8]]}}}],["orderitem",{"_index":7627,"t":{"3218":{"position":[[111,9]]},"3224":{"position":[[1758,9],[1841,9]]},"3230":{"position":[[231,9]]}}}],["orderrespositori",{"_index":7777,"t":{"3258":{"position":[[581,16],[627,16]]}}}],["ordersplitetest",{"_index":7712,"t":{"3234":{"position":[[563,15]]}}}],["org",{"_index":524,"t":{"89":{"position":[[109,3]]},"919":{"position":[[184,3]]},"1516":{"position":[[235,3]]},"1530":{"position":[[145,3]]},"1551":{"position":[[122,3]]},"2653":{"position":[[230,3]]},"2742":{"position":[[30,3]]},"2875":{"position":[[745,3]]},"3080":{"position":[[116,3]]},"3702":{"position":[[381,3],[499,3]]}}}],["orif",{"_index":6011,"t":{"2167":{"position":[[372,4]]}}}],["origin",{"_index":2500,"t":{"419":{"position":[[328,6]]},"1379":{"position":[[236,6],[362,6]]}}}],["originalvalu",{"_index":2979,"t":{"570":{"position":[[1323,14]]}}}],["originerrorcod",{"_index":8236,"t":{"3452":{"position":[[4014,15]]},"3916":{"position":[[7010,15]]}}}],["oritem",{"_index":7628,"t":{"3218":{"position":[[132,6],[152,6],[431,6],[454,6]]}}}],["orm",{"_index":2869,"t":{"540":{"position":[[28,3]]},"1761":{"position":[[364,3],[377,3],[424,3],[488,3]]},"2774":{"position":[[424,3]]},"3209":{"position":[[27,3],[87,3]]},"3250":{"position":[[27,3],[86,3]]},"3287":{"position":[[358,3],[1214,3],[3066,3]]},"3458":{"position":[[321,3],[712,3]]},"3470":{"position":[[19,3]]},"3932":{"position":[[366,3],[711,3]]}}}],["os",{"_index":1347,"t":{"190":{"position":[[41,2]]}}}],["osarchitectur",{"_index":5943,"t":{"2057":{"position":[[14,14],[50,14]]}}}],["oschina",{"_index":6950,"t":{"2768":{"position":[[797,7],[1301,7]]}}}],["osdescript",{"_index":5945,"t":{"2057":{"position":[[90,13],[125,13]]}}}],["oss",{"_index":4531,"t":{"1509":{"position":[[64,3]]},"1511":{"position":[[135,3]]}}}],["other",{"_index":7568,"t":{"3177":{"position":[[8,6]]}}}],["other_",{"_index":8519,"t":{"3698":{"position":[[168,6]]}}}],["other_persondto",{"_index":8522,"t":{"3698":{"position":[[342,15]]}}}],["otherbusinessservic",{"_index":4255,"t":{"1412":{"position":[[320,20],[619,20],[721,20],[1370,20],[1615,20],[2117,20],[2293,20],[2330,20],[2473,20],[2777,20],[2923,20]]}}}],["otherdbcontext",{"_index":3805,"t":{"947":{"position":[[559,14],[789,14],[819,14],[877,14],[909,14]]},"1311":{"position":[[481,14]]}}}],["otherdbcontextloc",{"_index":3806,"t":{"947":{"position":[[575,21],[835,21]]},"1311":{"position":[[497,21]]}}}],["othereventfallbackpolici",{"_index":5679,"t":{"1819":{"position":[[1117,24]]}}}],["otherservic",{"_index":2847,"t":{"530":{"position":[[691,12]]},"1039":{"position":[[692,12]]},"1434":{"position":[[218,12]]},"1711":{"position":[[575,12]]},"2476":{"position":[[237,12]]},"2478":{"position":[[347,12]]},"2831":{"position":[[686,12]]}}}],["otherservice2",{"_index":4329,"t":{"1434":{"position":[[265,13]]},"2476":{"position":[[284,13]]},"2478":{"position":[[394,13]]}}}],["otherservicecompon",{"_index":2273,"t":{"353":{"position":[[101,21],[156,21]]}}}],["out",{"_index":4385,"t":{"1474":{"position":[[425,3]]},"2065":{"position":[[111,3]]},"2098":{"position":[[81,3]]},"2142":{"position":[[64,3]]},"2315":{"position":[[258,3]]},"2751":{"position":[[213,3],[230,3]]},"3234":{"position":[[460,3]]},"3680":{"position":[[389,3]]},"3819":{"position":[[1050,3],[1307,3],[1369,3]]},"3840":{"position":[[140,3]]},"3842":{"position":[[172,3],[763,3],[1350,3],[1932,3],[2554,3],[3179,3]]},"3844":{"position":[[175,3]]},"3846":{"position":[[182,3]]},"3862":{"position":[[140,3]]},"3882":{"position":[[142,3]]},"3884":{"position":[[140,3]]},"3886":{"position":[[144,3]]},"3888":{"position":[[169,3]]},"3940":{"position":[[853,3]]}}}],["out_fil",{"_index":6886,"t":{"2751":{"position":[[213,8]]}}}],["outlook",{"_index":2566,"t":{"445":{"position":[[209,7],[319,7]]},"447":{"position":[[121,7],[202,7]]},"606":{"position":[[730,7]]},"1509":{"position":[[300,7]]},"2132":{"position":[[272,7],[391,7]]},"3065":{"position":[[266,7]]},"3642":{"position":[[340,7]]},"3706":{"position":[[2014,7]]}}}],["output",{"_index":3996,"t":{"1125":{"position":[[35,6],[91,6],[134,6],[164,6],[208,6]]},"1127":{"position":[[180,6],[273,6]]},"1129":{"position":[[613,6],[628,7],[1603,6],[1618,7]]},"1185":{"position":[[17,6],[60,6],[90,6],[134,6],[457,6],[550,6]]},"1200":{"position":[[134,6]]},"2856":{"position":[[1310,6]]},"3273":{"position":[[486,6]]},"3383":{"position":[[173,6],[230,6],[294,6]]}}}],["outputclay",{"_index":1947,"t":{"288":{"position":[[386,10]]}}}],["outputdir",{"_index":3392,"t":{"698":{"position":[[323,9]]},"734":{"position":[[6999,9],[7143,9]]}}}],["outputoriginalsqlexecutelog",{"_index":7294,"t":{"2981":{"position":[[449,27]]},"3960":{"position":[[370,27]]}}}],["outputtyp",{"_index":4948,"t":{"1535":{"position":[[90,10],[106,10]]},"1551":{"position":[[251,10],[267,10]]}}}],["outputvalu",{"_index":4007,"t":{"1129":{"position":[[645,12],[1635,12]]},"1133":{"position":[[77,12]]},"3978":{"position":[[849,12]]}}}],["over",{"_index":4484,"t":{"1491":{"position":[[8,4]]},"1493":{"position":[[16,4]]},"1497":{"position":[[24,4]]}}}],["overrid",{"_index":966,"t":{"127":{"position":[[593,8]]},"133":{"position":[[516,8]]},"135":{"position":[[308,8]]},"146":{"position":[[473,8],[861,8]]},"310":{"position":[[336,8],[446,8],[545,8]]},"492":{"position":[[311,8]]},"518":{"position":[[344,8]]},"530":{"position":[[378,8]]},"534":{"position":[[519,8]]},"570":{"position":[[619,8]]},"572":{"position":[[351,8],[733,8],[1201,8]]},"587":{"position":[[1298,8]]},"832":{"position":[[436,8]]},"915":{"position":[[95,8]]},"927":{"position":[[262,8],[479,8],[779,8],[941,8],[1184,8],[1403,8],[1639,8],[1803,8],[1978,8],[2142,8]]},"929":{"position":[[261,8],[463,8],[616,8],[763,8],[987,8],[1215,8],[1526,8],[1720,8],[2008,8],[2230,8],[2450,8],[2753,8],[2939,8],[3211,8],[3436,8],[3744,8],[3935,8]]},"931":{"position":[[230,8],[412,8],[677,8],[828,8],[1061,8],[1189,8]]},"933":{"position":[[447,8]]},"1039":{"position":[[378,8]]},"1313":{"position":[[974,8]]},"1424":{"position":[[987,8],[1207,8],[1430,8]]},"1927":{"position":[[270,8],[574,8]]},"1935":{"position":[[243,8]]},"1943":{"position":[[139,8]]},"1953":{"position":[[139,8]]},"2313":{"position":[[356,8]]},"2482":{"position":[[211,8]]},"2484":{"position":[[311,8]]},"2805":{"position":[[301,8]]},"2813":{"position":[[445,8]]},"2817":{"position":[[597,8],[724,8],[970,8]]},"2825":{"position":[[211,8]]},"2827":{"position":[[357,8]]},"2829":{"position":[[405,8]]},"2831":{"position":[[359,8]]},"2899":{"position":[[500,8]]},"2937":{"position":[[882,8]]},"2951":{"position":[[334,8]]},"3806":{"position":[[164,8],[1549,8],[2879,8],[2980,8],[3131,8]]},"3910":{"position":[[1286,8]]}}}],["overrun",{"_index":8851,"t":{"3800":{"position":[[253,7]]}}}],["overview",{"_index":7356,"t":{"3069":{"position":[[374,8]]}}}],["owner",{"_index":2917,"t":{"556":{"position":[[178,5]]}}}],["ownerid",{"_index":2916,"t":{"556":{"position":[[66,7]]}}}],["p",{"_index":1926,"t":{"282":{"position":[[250,1]]},"556":{"position":[[33,1],[64,1],[83,1]]},"696":{"position":[[2063,1],[2068,1]]},"773":{"position":[[600,1],[605,1]]},"824":{"position":[[79,1],[89,1],[104,1],[115,1],[134,1],[151,1],[163,1],[198,1],[208,1]]},"860":{"position":[[17,1],[105,1],[165,1],[203,1],[220,1],[234,1],[247,1],[258,1]]},"862":{"position":[[17,1],[105,1],[213,1],[251,1],[268,1],[282,1],[295,1],[306,1]]},"1160":{"position":[[783,1],[814,1],[835,1],[1739,1],[1770,1],[1791,1]]},"1162":{"position":[[823,1],[854,1],[875,1],[1827,1],[1858,1],[1879,1]]},"1377":{"position":[[430,1]]},"1485":{"position":[[15,1],[28,1]]},"1488":{"position":[[898,1],[1364,1],[1474,1]]},"1495":{"position":[[842,1]]},"1499":{"position":[[751,1]]},"1539":{"position":[[183,1]]},"1707":{"position":[[189,1]]},"2497":{"position":[[144,1]]},"2532":{"position":[[77,1],[102,1],[106,1],[268,1]]},"2694":{"position":[[106,1],[134,1],[147,1],[165,1]]},"2768":{"position":[[971,1]]},"3080":{"position":[[461,1]]},"3112":{"position":[[89,1]]},"3224":{"position":[[517,1],[622,1],[640,1],[706,1],[756,1],[991,1]]},"3228":{"position":[[223,1]]},"3269":{"position":[[444,1],[476,1],[487,1]]},"3307":{"position":[[310,1]]},"3331":{"position":[[74,1],[126,1]]},"3492":{"position":[[64,1],[156,1]]},"3537":{"position":[[104,1],[200,1]]},"3541":{"position":[[193,1],[205,1],[261,1]]},"3738":{"position":[[94,1],[103,1],[192,1],[197,1],[201,1],[206,1],[210,1],[215,1]]},"3740":{"position":[[222,1],[231,1],[320,1],[325,1],[329,1],[334,1],[338,1],[343,1],[585,1],[594,1],[683,1],[688,1],[692,1],[697,1],[701,1],[706,1],[710,1],[715,1]]}}}],["pa",{"_index":6625,"t":{"2559":{"position":[[1884,2],[1896,2],[2303,2]]}}}],["packag",{"_index":525,"t":{"89":{"position":[[113,8]]},"635":{"position":[[11,7]]},"1551":{"position":[[126,8]]},"1801":{"position":[[111,7]]},"1803":{"position":[[34,7]]},"2649":{"position":[[133,8]]},"2651":{"position":[[51,8]]},"2653":{"position":[[129,8]]},"2866":{"position":[[52,7]]},"3702":{"position":[[345,7],[385,8],[436,7],[503,8],[557,7]]}}}],["packagelicenseexpress",{"_index":5002,"t":{"1551":{"position":[[875,24],[905,24]]}}}],["packageoutputpath",{"_index":4953,"t":{"1535":{"position":[[364,17],[391,17],[621,17]]},"1551":{"position":[[525,17],[552,17]]}}}],["packageprojecturl",{"_index":5003,"t":{"1551":{"position":[[932,17],[970,17]]}}}],["packagerefer",{"_index":5005,"t":{"1551":{"position":[[1019,16]]}}}],["packagesgroup",{"_index":7326,"t":{"3063":{"position":[[856,14]]},"3706":{"position":[[848,14]]}}}],["packastool",{"_index":4951,"t":{"1535":{"position":[[280,10],[297,10],[532,10]]},"1551":{"position":[[441,10],[458,10]]}}}],["page",{"_index":1505,"t":{"199":{"position":[[700,4]]},"1898":{"position":[[28,5]]},"1901":{"position":[[240,5],[592,5],[611,5]]},"1949":{"position":[[6,5],[25,5]]},"1951":{"position":[[791,4]]},"2551":{"position":[[309,4]]},"3162":{"position":[[331,4]]},"3220":{"position":[[60,4]]},"3236":{"position":[[551,4]]},"3265":{"position":[[60,4]]},"3420":{"position":[[243,5]]},"3422":{"position":[[237,5]]},"3436":{"position":[[302,5]]},"3922":{"position":[[1689,5],[1724,5],[1759,5],[1806,5]]},"4002":{"position":[[107,5]]}}}],["pagecount",{"_index":7656,"t":{"3224":{"position":[[642,9],[758,9]]}}}],["pagedlist",{"_index":10196,"t":{"3992":{"position":[[465,9]]},"4002":{"position":[[177,9]]}}}],["pagehandlerexecutingcontext",{"_index":5897,"t":{"1951":{"position":[[291,27]]}}}],["pagehandlerexecutiondeleg",{"_index":5898,"t":{"1951":{"position":[[328,28]]}}}],["pagehandlerselectedcontext",{"_index":5902,"t":{"1951":{"position":[[685,26]]}}}],["pageindex",{"_index":7634,"t":{"3220":{"position":[[4,9],[102,9]]},"3224":{"position":[[539,9]]},"3265":{"position":[[4,9],[102,9]]}}}],["pagemodel",{"_index":1842,"t":{"253":{"position":[[86,9]]},"3224":{"position":[[525,9]]},"3420":{"position":[[61,9]]},"3422":{"position":[[49,9]]},"3436":{"position":[[56,9]]}}}],["pages",{"_index":7635,"t":{"3220":{"position":[[23,8],[113,8]]},"3224":{"position":[[554,8]]},"3236":{"position":[[576,8]]},"3265":{"position":[[23,8],[113,8]]}}}],["pagin",{"_index":7298,"t":{"2995":{"position":[[166,10]]}}}],["pam",{"_index":4089,"t":{"1263":{"position":[[182,4],[265,4],[379,4]]}}}],["panic",{"_index":8849,"t":{"3800":{"position":[[229,5]]}}}],["par",{"_index":7616,"t":{"3215":{"position":[[500,4]]},"3254":{"position":[[644,4],[706,4],[1019,4],[1081,4],[1331,4],[1401,4],[1567,4]]},"3275":{"position":[[234,4],[326,4],[504,4]]}}}],["para",{"_index":4075,"t":{"1234":{"position":[[356,5]]},"1236":{"position":[[362,5]]},"1238":{"position":[[442,5]]},"1240":{"position":[[484,5]]}}}],["parallel",{"_index":6355,"t":{"2444":{"position":[[332,8]]},"3914":{"position":[[1472,8]]}}}],["param",{"_index":1063,"t":{"133":{"position":[[416,5],[439,5],[451,5],[478,5],[812,5],[839,5]]},"146":{"position":[[412,5],[435,5],[761,5],[784,5],[796,5],[823,5]]},"152":{"position":[[115,5],[402,5]]},"344":{"position":[[222,5],[278,5],[290,5],[327,5]]},"346":{"position":[[224,5],[276,5],[288,5],[340,5],[352,5],[389,5]]},"348":{"position":[[250,5],[304,5],[316,5],[353,5]]},"508":{"position":[[283,5],[306,5]]},"510":{"position":[[313,5],[336,5]]},"516":{"position":[[288,5],[311,5]]},"518":{"position":[[218,5],[241,5]]},"570":{"position":[[551,5],[573,5],[585,5],[602,5]]},"597":{"position":[[483,5],[501,5],[615,5],[638,5]]},"606":{"position":[[1297,6]]},"747":{"position":[[561,5],[586,5],[598,5],[626,5],[638,5],[669,5],[681,5],[722,5],[734,5],[759,5]]},"749":{"position":[[245,5],[267,5],[279,5],[304,5],[316,5],[348,5],[360,5],[381,5],[547,5],[574,5],[586,5],[613,5],[625,5],[650,5],[662,5],[694,5],[706,5],[727,5],[911,5],[933,5],[945,5],[970,5],[982,5],[1014,5],[1026,5],[1047,5]]},"877":{"position":[[763,5],[792,5],[804,5],[829,5],[841,5],[873,5],[1181,5],[1206,5],[1218,5],[1250,5]]},"889":{"position":[[332,5],[361,5],[373,5],[398,5],[410,5],[442,5]]},"1041":{"position":[[847,5],[878,5]]},"1064":{"position":[[387,5],[415,5],[596,5],[618,5]]},"1066":{"position":[[979,5],[1007,5],[1141,5],[1163,5]]},"1302":{"position":[[116,6]]},"1424":{"position":[[895,5],[917,5],[929,5],[949,5]]},"1657":{"position":[[98,6]]},"1801":{"position":[[872,5],[899,5],[911,5],[938,5],[950,5],[999,5],[2069,5],[2101,5],[2113,5],[2156,5],[2791,5],[2834,5]]},"1803":{"position":[[842,5],[864,5],[2159,5],[2184,5],[2995,5],[3028,5],[3040,5],[3073,5],[3085,5],[3108,5],[3120,5],[3169,5],[4031,5],[4063,5],[4075,5],[4118,5],[4763,5],[4806,5]]},"1851":{"position":[[124,5],[156,5],[168,5],[204,5],[287,6],[356,5],[388,5],[400,5],[435,5],[447,5],[483,5],[586,6],[655,5],[683,5],[695,5],[731,5],[811,6],[880,5],[908,5],[920,5],[955,5],[967,5],[1003,5],[1103,6]]},"1927":{"position":[[177,5],[200,5],[212,5],[232,5],[481,5],[504,5],[516,5],[536,5]]},"1935":{"position":[[182,5],[205,5]]},"1951":{"position":[[159,5],[182,5],[194,5],[214,5],[591,5],[614,5]]},"2313":{"position":[[295,5],[318,5]]},"2345":{"position":[[244,5],[265,5],[277,5],[314,5],[500,5],[520,5],[532,5],[569,5]]},"2357":{"position":[[644,5],[665,5],[677,5],[714,5],[1027,5],[1047,5],[1059,5],[1096,5]]},"2406":{"position":[[89,5],[110,5],[122,5],[143,5],[385,5],[406,5],[418,5],[439,5]]},"2415":{"position":[[91,5],[112,5],[124,5],[145,5]]},"2434":{"position":[[88,5],[109,5],[121,5],[142,5],[414,5],[435,5],[447,5],[468,5]]},"2486":{"position":[[344,5],[368,5]]},"2790":{"position":[[851,5],[871,5],[1063,5],[1083,5]]},"2796":{"position":[[385,5],[405,5],[582,5],[602,5],[614,5],[638,5]]},"3287":{"position":[[1611,5],[1641,5],[1791,5],[1814,5],[1826,5],[1852,5],[2093,5],[2122,5],[2134,5],[2160,5],[2409,5],[2438,5],[2450,5],[2476,5],[2733,5],[2756,5],[2768,5],[2797,5]]},"3636":{"position":[[444,5],[462,5]]},"3638":{"position":[[568,5],[586,5]]},"3708":{"position":[[1112,5],[1135,5],[1147,5],[1171,5],[1518,5],[1541,5],[1553,5],[1573,5],[1882,5],[1905,5],[1917,5],[1941,5],[2348,5],[2371,5],[2383,5],[2409,5],[2421,5],[2456,5],[3227,5],[3253,5],[3265,5],[3290,5],[3302,5],[3322,5],[3334,5],[3356,5]]},"3752":{"position":[[148,5],[171,5],[183,5],[212,5],[387,5],[410,5],[422,5],[451,5],[674,5],[697,5],[709,5],[738,5],[983,5],[1006,5],[1018,5],[1047,5]]},"3956":{"position":[[753,5],[776,5],[788,5],[812,5],[1062,5],[1085,5],[1097,5],[1117,5],[1350,5],[1373,5],[1385,5],[1409,5],[1696,5],[1719,5],[1731,5],[1757,5],[1769,5],[1804,5],[2567,5],[2593,5],[2605,5],[2630,5],[2642,5],[2662,5],[2674,5],[2696,5]]}}}],["paramet",{"_index":736,"t":{"112":{"position":[[1037,10]]},"572":{"position":[[621,10],[642,10],[1066,10],[1087,10]]},"734":{"position":[[1078,10],[1932,10],[2786,10],[3781,10],[4635,10],[5489,10]]},"883":{"position":[[26,9],[74,9]]},"1925":{"position":[[899,10]]},"3452":{"position":[[2492,10]]},"3916":{"position":[[5488,10]]}}}],["parameterdirect",{"_index":4001,"t":{"1127":{"position":[[161,18],[254,18],[332,18]]},"1131":{"position":[[62,18],[89,18]]},"1185":{"position":[[438,18],[531,18],[609,18]]}}}],["parameterexpress",{"_index":3698,"t":{"883":{"position":[[152,19]]}}}],["parameterformat",{"_index":7772,"t":{"3254":{"position":[[685,15],[1060,15]]},"3275":{"position":[[484,15]]}}}],["parameterinfo",{"_index":3448,"t":{"734":{"position":[[1062,13],[1916,13],[2770,13],[3765,13],[4619,13],[5473,13]]}}}],["parameternam",{"_index":7773,"t":{"3254":{"position":[[1423,13],[1594,13]]},"3275":{"position":[[348,13]]}}}],["parent",{"_index":1725,"t":{"237":{"position":[[287,6],[729,6],[1148,6]]},"696":{"position":[[1767,6],[2045,6]]},"877":{"position":[[604,6],[1044,6]]}}}],["parentcachedtim",{"_index":1736,"t":{"237":{"position":[[678,16]]}}}],["parentid",{"_index":3371,"t":{"696":{"position":[[1603,8],[1986,8],[2005,8],[2107,8]]},"877":{"position":[[525,8],[1074,8],[1574,8],[1682,8],[1790,8],[1898,8]]}}}],["parm",{"_index":1961,"t":{"294":{"position":[[95,5]]}}}],["pars",{"_index":1149,"t":{"152":{"position":[[347,5],[621,5]]},"270":{"position":[[146,5]]},"472":{"position":[[37,5]]},"474":{"position":[[39,5]]},"476":{"position":[[39,5]]},"478":{"position":[[42,5]]},"480":{"position":[[90,5],[148,5],[199,5],[250,5],[304,5],[363,5],[418,5]]},"490":{"position":[[30,5],[234,5]]},"492":{"position":[[247,5]]},"494":{"position":[[780,5]]},"877":{"position":[[1422,5],[1518,5],[1626,5],[1734,5],[1842,5]]},"977":{"position":[[24,5],[68,5]]},"1488":{"position":[[189,5]]},"1495":{"position":[[189,5]]},"1557":{"position":[[910,5],[956,5]]},"2484":{"position":[[247,5]]},"2827":{"position":[[293,5]]},"2829":{"position":[[341,5]]},"2929":{"position":[[433,5],[544,5],[605,5],[715,5]]},"2945":{"position":[[433,5],[544,5],[662,5],[772,5]]},"2959":{"position":[[433,5],[544,5],[631,5],[741,5]]}}}],["parselambda",{"_index":3697,"t":{"883":{"position":[[136,11],[245,11]]}}}],["parsetoenum",{"_index":5492,"t":{"1795":{"position":[[893,11]]},"3936":{"position":[[207,11],[1274,11]]}}}],["parsetostr",{"_index":9533,"t":{"3936":{"position":[[182,13]]}}}],["part",{"_index":8543,"t":{"3702":{"position":[[1947,4]]}}}],["partial",{"_index":3366,"t":{"696":{"position":[[1418,7],[2599,7],[3521,7],[4203,7]]},"2899":{"position":[[353,7]]},"3910":{"position":[[1161,7]]}}}],["particular",{"_index":8558,"t":{"3702":{"position":[[2668,10]]}}}],["pascal",{"_index":5105,"t":{"1594":{"position":[[337,6]]},"3770":{"position":[[3235,6]]},"3779":{"position":[[1274,6],[1899,6]]},"3785":{"position":[[531,6],[641,6]]},"3802":{"position":[[1892,6],[2676,6]]},"3812":{"position":[[807,6],[915,6]]},"3817":{"position":[[2488,6]]},"4006":{"position":[[159,6]]}}}],["password",{"_index":1622,"t":{"220":{"position":[[416,8]]},"249":{"position":[[239,8]]},"520":{"position":[[88,8],[205,8],[272,8],[467,8]]},"585":{"position":[[222,8]]},"587":{"position":[[351,8],[568,8]]},"615":{"position":[[944,8]]},"688":{"position":[[417,8]]},"901":{"position":[[88,8],[205,8],[300,8],[495,8]]},"1054":{"position":[[447,8]]},"1056":{"position":[[736,8]]},"1315":{"position":[[88,8],[205,8],[300,8],[495,8]]},"1801":{"position":[[3284,8]]},"3686":{"position":[[292,8],[1123,8],[1193,8],[1243,8],[1255,8]]}}}],["patch",{"_index":5098,"t":{"1594":{"position":[[119,5]]},"1596":{"position":[[208,5]]},"1603":{"position":[[312,5],[331,5]]},"1631":{"position":[[287,5],[699,5]]},"1661":{"position":[[1198,5],[1209,5]]},"3023":{"position":[[1195,5],[1206,5]]},"3483":{"position":[[407,5],[437,5],[1185,5]]},"3486":{"position":[[318,5],[372,5]]},"3535":{"position":[[428,5],[438,5],[468,5]]},"3620":{"position":[[391,5]]}}}],["patchasync",{"_index":8266,"t":{"3483":{"position":[[1192,10]]},"3486":{"position":[[379,10]]}}}],["patchxxxasync",{"_index":8260,"t":{"3483":{"position":[[459,13]]},"3535":{"position":[[503,13]]}}}],["path",{"_index":238,"t":{"15":{"position":[[67,4]]},"17":{"position":[[61,4]]},"19":{"position":[[135,4],[402,4],[456,4]]},"314":{"position":[[363,4]]},"435":{"position":[[70,4],[97,4]]},"437":{"position":[[66,4]]},"447":{"position":[[72,4]]},"1483":{"position":[[468,4],[476,4],[938,4]]},"1488":{"position":[[72,4]]},"1495":{"position":[[72,4]]},"1741":{"position":[[204,4],[592,4],[641,4],[1013,4],[1351,4],[1401,4],[1866,4],[2187,4],[2237,4]]},"2713":{"position":[[52,4],[392,4]]},"2721":{"position":[[93,4],[105,4],[546,4],[785,4]]},"2723":{"position":[[36,4]]},"3430":{"position":[[440,4],[3128,4],[4431,4]]},"3432":{"position":[[3083,4],[4711,4],[4784,4],[5648,4]]},"3522":{"position":[[1060,4]]},"3601":{"position":[[729,4]]},"3744":{"position":[[86,4]]},"3746":{"position":[[54,4]]}}}],["patorjk",{"_index":4961,"t":{"1539":{"position":[[156,7]]}}}],["pattern",{"_index":4278,"t":{"1416":{"position":[[165,7]]},"1420":{"position":[[288,7],[764,7]]},"3001":{"position":[[315,7]]},"3003":{"position":[[232,7]]},"3144":{"position":[[596,7]]}}}],["paus",{"_index":8845,"t":{"3800":{"position":[[123,5]]},"3852":{"position":[[366,6]]},"3876":{"position":[[10,5],[298,6]]}}}],["pauseal",{"_index":9007,"t":{"3852":{"position":[[18,8],[66,8]]}}}],["pausetrigg",{"_index":9026,"t":{"3880":{"position":[[10,12]]}}}],["pay",{"_index":4305,"t":{"1420":{"position":[[1020,3]]},"3616":{"position":[[53,3]]}}}],["payload",{"_index":743,"t":{"112":{"position":[[1132,7]]},"1703":{"position":[[246,7],[423,7],[565,7]]},"1711":{"position":[[325,7]]},"1795":{"position":[[426,7],[691,7]]},"1797":{"position":[[434,7]]},"1925":{"position":[[994,7]]}}}],["pbkdf2",{"_index":5224,"t":{"1674":{"position":[[32,6]]},"1685":{"position":[[28,6],[171,6]]},"1689":{"position":[[493,6]]},"3962":{"position":[[540,6]]},"3980":{"position":[[91,6]]}}}],["pbkdf2encrypt",{"_index":5241,"t":{"1685":{"position":[[58,16],[111,16]]}}}],["pbkdf2encryptionset",{"_index":5243,"t":{"1685":{"position":[[269,24]]}}}],["pcd",{"_index":9218,"t":{"3918":{"position":[[1114,3]]}}}],["pd",{"_index":4035,"t":{"1160":{"position":[[808,2],[822,2],[1764,2],[1778,2]]},"1162":{"position":[[848,2],[862,2],[1852,2],[1866,2]]}}}],["pdb",{"_index":7365,"t":{"3073":{"position":[[11,3]]}}}],["pe",{"_index":6665,"t":{"2559":{"position":[[2333,2]]}}}],["pear",{"_index":1466,"t":{"199":{"position":[[119,4],[172,4],[510,4]]}}}],["pearadmin",{"_index":1493,"t":{"199":{"position":[[533,9]]}}}],["pem",{"_index":9509,"t":{"3934":{"position":[[815,3]]}}}],["pendingrequir",{"_index":1089,"t":{"135":{"position":[[510,19]]}}}],["peng",{"_index":6935,"t":{"2768":{"position":[[562,4]]}}}],["peo",{"_index":3673,"t":{"866":{"position":[[502,3]]}}}],["peopl",{"_index":6915,"t":{"2768":{"position":[[181,6],[550,6],[633,6],[844,6],[894,6],[939,6],[995,6],[1044,6],[1148,6],[1202,6],[1381,6]]}}}],["perform",{"_index":4358,"t":{"1468":{"position":[[365,11]]}}}],["period",{"_index":8666,"t":{"3766":{"position":[[153,6]]},"3804":{"position":[[24,6],[168,6],[482,6]]},"3808":{"position":[[116,6]]},"3810":{"position":[[125,6]]}}}],["periodsecond",{"_index":8667,"t":{"3766":{"position":[[190,13]]},"3772":{"position":[[216,13]]},"3774":{"position":[[204,13]]},"3781":{"position":[[697,13]]},"3804":{"position":[[239,13],[547,13]]},"3808":{"position":[[147,13],[635,13],[670,13],[3275,13]]},"3817":{"position":[[358,13]]},"3832":{"position":[[976,13]]},"3842":{"position":[[741,13],[858,13],[1328,13],[1423,13],[1910,13],[2013,13],[2532,13],[2654,13],[3157,13],[3271,13]]}}}],["periodsecondstrigg",{"_index":8860,"t":{"3802":{"position":[[760,20],[1401,20]]},"3812":{"position":[[186,20],[1445,20],[1800,20],[2422,20],[2517,20]]},"3817":{"position":[[971,20],[1993,20]]},"3821":{"position":[[485,20]]},"3896":{"position":[[410,20]]}}}],["periodtrigg",{"_index":8859,"t":{"3802":{"position":[[278,13],[362,13],[480,13]]},"3806":{"position":[[14,13]]},"3810":{"position":[[219,13],[269,13],[327,13]]}}}],["persion",{"_index":7460,"t":{"3126":{"position":[[473,7]]}}}],["persion2",{"_index":7843,"t":{"3287":{"position":[[329,8],[654,8]]}}}],["persist",{"_index":9037,"t":{"3894":{"position":[[116,7]]}}}],["persistal",{"_index":9018,"t":{"3858":{"position":[[124,10],[174,10]]}}}],["persistencebehavior",{"_index":8757,"t":{"3770":{"position":[[3091,19],[3188,19],[3310,19]]},"3785":{"position":[[455,19],[593,19],[735,19]]},"3812":{"position":[[731,19],[867,19],[1007,19]]},"3817":{"position":[[2736,19]]},"3844":{"position":[[835,19]]},"3858":{"position":[[77,19]]},"3894":{"position":[[77,19]]}}}],["persistentconnect",{"_index":7530,"t":{"3148":{"position":[[47,20],[98,20]]}}}],["person",{"_index":773,"t":{"114":{"position":[[281,6],[349,6],[1266,7]]},"528":{"position":[[491,7],[527,7]]},"530":{"position":[[658,6]]},"548":{"position":[[271,6],[337,6]]},"550":{"position":[[50,6],[121,6],[166,6],[189,6]]},"552":{"position":[[84,6],[122,7],[197,6],[244,6],[291,6],[338,7],[394,7],[450,7],[517,6]]},"585":{"position":[[40,6],[47,6],[88,6],[147,6],[215,6],[238,6],[332,6],[450,6],[506,6]]},"639":{"position":[[13,6],[197,6]]},"696":{"position":[[698,6],[807,6],[4552,6]]},"698":{"position":[[168,6]]},"708":{"position":[[161,6],[224,6]]},"747":{"position":[[441,6],[485,6],[493,7]]},"816":{"position":[[65,6],[221,6],[315,6],[406,6]]},"824":{"position":[[186,6]]},"828":{"position":[[108,6]]},"830":{"position":[[39,6]]},"832":{"position":[[272,6],[560,6]]},"834":{"position":[[13,6]]},"844":{"position":[[246,6],[282,6],[299,6],[497,6]]},"851":{"position":[[0,6],[195,6],[258,6],[1137,6],[1144,6],[1612,6],[1619,6],[1947,6],[1991,6],[1999,7]]},"853":{"position":[[11,6],[66,6],[143,6],[248,6],[396,6],[483,6]]},"855":{"position":[[11,6]]},"857":{"position":[[11,6]]},"877":{"position":[[1984,7]]},"889":{"position":[[208,6],[244,6],[489,6],[604,6],[650,6]]},"905":{"position":[[16,6],[70,6],[120,6],[174,6],[225,6],[280,6]]},"907":{"position":[[16,6],[64,6],[114,6],[162,6],[213,6],[262,6]]},"909":{"position":[[16,6],[109,6],[203,6]]},"911":{"position":[[24,6],[99,6]]},"954":{"position":[[29,6],[69,6],[118,6],[185,6],[236,6],[296,6]]},"956":{"position":[[29,6],[93,6],[166,6],[229,6],[301,6],[363,6],[434,6],[507,6],[579,6],[660,6],[732,6],[830,6],[905,6],[989,6],[1063,6],[1146,6],[1219,6],[1301,6],[1385,6],[1468,6],[1560,6],[1643,6]]},"958":{"position":[[29,7],[71,7],[121,7],[168,7],[216,7]]},"960":{"position":[[11,7],[66,7],[194,7],[416,7],[527,7],[760,7],[873,7],[1091,7],[1214,7],[1523,7],[1634,7],[1707,7]]},"962":{"position":[[29,7],[98,7],[190,7],[270,7]]},"1022":{"position":[[29,6],[89,6]]},"1024":{"position":[[69,6],[111,7],[174,7]]},"1026":{"position":[[88,6]]},"1037":{"position":[[25,6],[73,6],[123,6],[171,6],[222,6],[271,6],[364,6],[491,6]]},"1039":{"position":[[659,6]]},"1060":{"position":[[198,6]]},"1064":{"position":[[608,6],[668,6],[675,6],[706,6],[723,6],[809,6],[853,6]]},"1066":{"position":[[1153,6],[1213,6],[1220,6],[1251,6],[1268,6],[1353,6],[1396,6],[1508,6],[1551,6]]},"1109":{"position":[[531,6],[860,7],[929,7]]},"1115":{"position":[[65,6],[224,6],[320,6],[417,6]]},"1143":{"position":[[82,6]]},"1145":{"position":[[116,6],[153,6],[290,6],[368,6],[382,6],[439,6]]},"1147":{"position":[[142,6],[181,6],[259,6],[273,6],[330,6]]},"1151":{"position":[[173,6],[259,6],[337,6],[351,6],[408,6]]},"1160":{"position":[[56,6],[121,6],[219,6],[352,6],[483,6],[776,6],[935,6],[1011,6],[1120,6],[1264,6],[1406,6],[1732,6]]},"1162":{"position":[[29,7],[54,6],[71,6],[93,7],[125,6],[157,6],[192,7],[229,6],[268,6],[343,7],[368,6],[413,6],[480,7],[505,6],[555,6],[620,7],[665,6],[700,7],[754,6],[789,7],[816,6],[897,6],[950,7],[981,6],[1003,6],[1025,7],[1063,6],[1100,6],[1135,7],[1178,6],[1222,6],[1297,7],[1328,6],[1378,6],[1445,7],[1476,6],[1531,6],[1596,7],[1652,6],[1687,7],[1752,6],[1787,7],[1820,6],[1906,6]]},"1164":{"position":[[56,6],[140,6],[292,6],[467,6],[562,6],[725,6]]},"1166":{"position":[[30,7],[68,6],[111,6],[142,7],[180,6],[260,6],[322,7],[379,6],[477,6],[558,7],[602,6],[650,6],[681,7],[725,6],[810,6],[872,7],[935,6],[1038,6]]},"1168":{"position":[[55,6],[140,6],[232,6],[346,6],[442,6],[545,6]]},"1170":{"position":[[55,6],[121,6],[169,6],[235,6],[302,7],[344,6],[454,6],[563,6],[634,6],[682,6],[748,6],[820,7],[868,6],[989,6]]},"1175":{"position":[[29,7],[69,6],[91,7],[131,6],[165,7],[205,6],[267,7],[318,6],[340,7],[391,6],[425,7],[476,6]]},"1179":{"position":[[29,7],[71,6],[94,7],[146,6],[189,7],[248,6],[308,7],[380,6],[470,7],[523,6],[546,7],[609,6],[652,7],[722,6],[782,7],[865,6]]},"1183":{"position":[[75,6],[427,6]]},"1185":{"position":[[939,6],[1010,6],[1335,6],[1417,6]]},"1190":{"position":[[147,7],[184,6],[206,7],[243,6],[435,7],[483,6],[505,7],[553,6]]},"1194":{"position":[[116,6],[187,6],[239,7],[272,6],[295,6],[316,7],[349,6],[372,6]]},"1196":{"position":[[94,6]]},"1198":{"position":[[103,6]]},"1204":{"position":[[31,6],[87,7],[112,6],[176,6]]},"1216":{"position":[[51,6]]},"1234":{"position":[[152,6],[284,6],[533,6],[653,6],[1084,6]]},"1236":{"position":[[152,6],[201,6],[287,6],[336,6],[476,6],[542,6],[608,6],[664,6],[735,6]]},"1238":{"position":[[154,6],[329,6],[522,6],[642,6],[783,6]]},"1240":{"position":[[154,6],[249,6],[350,6],[445,6],[564,6],[624,6],[705,6],[796,6],[867,6],[973,6],[1079,6],[1115,6],[1126,6],[1139,6],[1177,6],[1190,6]]},"1242":{"position":[[136,6],[215,6],[292,6]]},"1244":{"position":[[131,6],[221,6],[287,6]]},"1246":{"position":[[131,6],[154,6]]},"1248":{"position":[[168,6],[272,6]]},"1253":{"position":[[139,6],[205,6],[266,6]]},"1257":{"position":[[140,6],[220,6],[295,6],[319,6],[418,6],[431,6],[469,6],[482,6]]},"1263":{"position":[[328,6]]},"1265":{"position":[[132,6]]},"1267":{"position":[[208,6]]},"1269":{"position":[[55,6],[128,6]]},"1273":{"position":[[62,6],[128,6]]},"1275":{"position":[[253,6]]},"1279":{"position":[[311,6],[369,6]]},"1362":{"position":[[14,6],[56,6]]},"1364":{"position":[[70,6],[142,6],[161,6]]},"1368":{"position":[[216,7],[318,6],[382,6],[481,6],[582,6]]},"1396":{"position":[[139,6]]},"1408":{"position":[[201,6],[314,6],[376,6],[451,6],[934,6],[991,6],[1166,6]]},"1410":{"position":[[210,6],[329,6],[391,6],[466,6],[959,6],[1016,6]]},"1414":{"position":[[254,6],[312,6],[387,6],[828,6]]},"1434":{"position":[[185,6]]},"1711":{"position":[[460,6]]},"1887":{"position":[[172,6],[179,6]]},"2476":{"position":[[204,6]]},"2478":{"position":[[314,6]]},"2607":{"position":[[356,6],[533,6],[585,6],[696,6],[732,6]]},"2692":{"position":[[47,6]]},"2831":{"position":[[653,6]]},"3446":{"position":[[756,6],[824,6],[1741,7]]},"3452":{"position":[[1143,6],[1412,6],[2771,7]]},"3492":{"position":[[167,6]]},"3537":{"position":[[193,6]]},"3541":{"position":[[254,6]]},"3714":{"position":[[132,6],[149,6]]},"3916":{"position":[[4139,6],[4408,6],[5767,7]]},"3928":{"position":[[1331,6],[1386,6],[2303,7]]},"3932":{"position":[[2056,6],[2071,6],[2147,6],[2170,6],[2306,6],[2342,6],[2353,6],[2366,6],[2404,6],[2417,6]]},"3934":{"position":[[1421,6],[1428,6]]}}}],["personcontrol",{"_index":4249,"t":{"1408":{"position":[[516,16],[699,16],[794,16],[1182,16],[1230,16]]},"1410":{"position":[[531,16],[714,16],[814,16]]}}}],["persondetail",{"_index":3355,"t":{"696":{"position":[[685,12],[727,12],[2149,12],[2201,12],[2613,12],[2656,12],[2845,12],[2964,12]]},"698":{"position":[[175,13]]},"851":{"position":[[7,12],[564,12],[577,12],[848,12]]},"860":{"position":[[167,12],[260,12]]},"862":{"position":[[215,12],[308,12]]},"1160":{"position":[[795,12],[1751,12]]},"1162":{"position":[[835,12],[1839,12]]},"1179":{"position":[[325,12],[395,12],[799,12],[880,12]]},"3537":{"position":[[106,12]]}}}],["persondetailrepositori",{"_index":3658,"t":{"860":{"position":[[65,22]]},"862":{"position":[[65,22]]}}}],["persondto",{"_index":820,"t":{"114":{"position":[[1274,9]]},"327":{"position":[[185,9]]},"860":{"position":[[139,9]]},"862":{"position":[[187,9]]},"1024":{"position":[[23,9],[193,9]]},"1166":{"position":[[349,9],[502,9],[899,9],[1063,9]]},"1229":{"position":[[23,9]]},"3446":{"position":[[134,9],[175,9],[1749,9]]},"3452":{"position":[[2779,9]]},"3698":{"position":[[191,9],[328,9],[348,9]]},"3700":{"position":[[185,9]]},"3916":{"position":[[5775,9]]},"3928":{"position":[[1024,9],[1065,9],[2311,9]]}}}],["personent",{"_index":3033,"t":{"585":{"position":[[345,12]]}}}],["personid",{"_index":3356,"t":{"696":{"position":[[705,8],[2782,8],[2950,8],[2977,8]]},"851":{"position":[[1071,8],[1546,8]]},"860":{"position":[[119,8]]},"862":{"position":[[119,8]]}}}],["personrepositori",{"_index":2890,"t":{"548":{"position":[[280,16],[345,16],[366,16],[385,16]]},"552":{"position":[[93,16],[132,16],[173,16],[220,16],[267,16],[314,16],[370,16],[426,16],[488,16]]},"810":{"position":[[180,16]]},"812":{"position":[[188,16]]},"814":{"position":[[179,16]]},"816":{"position":[[187,16]]},"824":{"position":[[1,16]]},"860":{"position":[[23,16]]},"862":{"position":[[23,16]]},"905":{"position":[[46,16],[150,16],[256,16]]},"1022":{"position":[[38,16],[97,16],[118,16],[137,16]]},"1029":{"position":[[21,16]]},"1031":{"position":[[44,16],[132,16]]},"1107":{"position":[[105,16]]},"1109":{"position":[[870,16]]},"1111":{"position":[[196,16]]},"1113":{"position":[[192,16]]},"1115":{"position":[[189,16]]},"1117":{"position":[[1785,16],[1879,16],[1983,16],[2097,16],[2221,16],[2355,16],[2499,16],[2653,16]]},"1119":{"position":[[179,16]]},"1121":{"position":[[187,16]]},"1123":{"position":[[151,16]]},"1129":{"position":[[291,16],[1151,16]]},"1198":{"position":[[62,16]]},"1210":{"position":[[52,16]]},"1408":{"position":[[323,16],[384,16],[405,16],[424,16],[480,16]]},"1410":{"position":[[338,16],[399,16],[420,16],[439,16],[495,16]]},"1414":{"position":[[263,16],[320,16],[341,16],[360,16],[416,16]]},"3287":{"position":[[208,16],[281,16],[533,16],[606,16]]}}}],["personseeddata",{"_index":4024,"t":{"1147":{"position":[[109,14]]},"1151":{"position":[[140,14]]}}}],["personservic",{"_index":2114,"t":{"321":{"position":[[82,13],[299,13],[333,13],[348,13],[391,13],[410,13]]},"548":{"position":[[139,13],[305,13]]},"1064":{"position":[[163,13],[429,13]]},"1066":{"position":[[765,13],[1021,13]]},"1724":{"position":[[91,14],[223,14]]},"2605":{"position":[[111,13]]},"3256":{"position":[[181,13]]}}}],["personvalid",{"_index":3242,"t":{"639":{"position":[[161,15],[214,15]]}}}],["petapoco",{"_index":10193,"t":{"3992":{"position":[[403,8]]}}}],["pgsql",{"_index":6789,"t":{"2674":{"position":[[332,5]]},"3211":{"position":[[19,5]]}}}],["ph",{"_index":6524,"t":{"2559":{"position":[[881,2]]}}}],["phi",{"_index":7927,"t":{"3331":{"position":[[70,3]]}}}],["phone",{"_index":3081,"t":{"587":{"position":[[834,5]]},"610":{"position":[[147,5],[183,5]]},"617":{"position":[[452,5],[552,5]]},"881":{"position":[[159,5]]}}}],["phone_numb",{"_index":3191,"t":{"610":{"position":[[147,12],[183,12]]}}}],["phonenumb",{"_index":825,"t":{"114":{"position":[[1336,11]]},"606":{"position":[[150,11]]},"610":{"position":[[213,11]]},"617":{"position":[[421,11]]},"696":{"position":[[2714,11]]},"851":{"position":[[928,11]]},"860":{"position":[[151,11],[180,11]]},"862":{"position":[[199,11],[228,11]]},"3446":{"position":[[1811,11]]},"3452":{"position":[[2882,11]]},"3916":{"position":[[5878,11]]},"3928":{"position":[[2373,11]]},"3978":{"position":[[907,11]]}}}],["phoneortelnumb",{"_index":3146,"t":{"606":{"position":[[183,16]]},"617":{"position":[[516,16]]}}}],["phonnumb",{"_index":8327,"t":{"3537":{"position":[[119,10]]}}}],["photo",{"_index":9219,"t":{"3918":{"position":[[1138,5]]}}}],["physic",{"_index":1360,"t":{"190":{"position":[[170,8]]},"1719":{"position":[[20,8]]},"1724":{"position":[[382,8]]},"2094":{"position":[[56,8]]}}}],["physicalfileprovid",{"_index":5347,"t":{"1724":{"position":[[140,20],[321,20]]},"1726":{"position":[[44,20]]}}}],["pi",{"_index":6963,"t":{"2768":{"position":[[1005,2],[1008,2]]}}}],["pid",{"_index":4036,"t":{"1160":{"position":[[825,3],[1781,3]]},"1162":{"position":[[865,3],[1869,3]]},"2749":{"position":[[371,3]]},"3080":{"position":[[939,3]]}}}],["pipelineasync",{"_index":968,"t":{"127":{"position":[[613,13]]},"133":{"position":[[536,13]]},"146":{"position":[[881,13]]}}}],["pivot",{"_index":6270,"t":{"2387":{"position":[[111,6]]}}}],["pk",{"_index":6694,"t":{"2559":{"position":[[2647,2]]}}}],["pl",{"_index":6619,"t":{"2559":{"position":[[1829,2],[1835,2],[1838,2]]}}}],["plain",{"_index":5389,"t":{"1741":{"position":[[1642,5]]}}}],["platform",{"_index":2053,"t":{"310":{"position":[[796,8]]}}}],["pleas",{"_index":3270,"t":{"655":{"position":[[151,6]]},"1887":{"position":[[403,6]]}}}],["plu",{"_index":8006,"t":{"3379":{"position":[[103,4],[202,4]]},"3381":{"position":[[270,4]]},"3389":{"position":[[1339,4]]},"3391":{"position":[[794,4]]},"3393":{"position":[[1212,4]]},"3924":{"position":[[3488,4]]}}}],["plugin",{"_index":6766,"t":{"2623":{"position":[[198,7],[221,7],[258,7]]},"2625":{"position":[[398,7],[462,7],[485,7],[532,7]]}}}],["pm",{"_index":3328,"t":{"685":{"position":[[0,2]]},"696":{"position":[[8,2],[4709,2]]},"713":{"position":[[78,2],[701,2]]},"734":{"position":[[92,2],[7707,2]]},"2745":{"position":[[120,3]]},"2747":{"position":[[60,3],[120,3]]},"2749":{"position":[[49,3],[71,3],[75,3],[134,3],[138,3],[569,3],[823,3]]},"2751":{"position":[[90,3],[398,3]]},"2758":{"position":[[9,3],[16,3]]},"3080":{"position":[[272,3],[276,3],[332,3],[336,3],[418,3],[617,3],[639,3],[643,3],[702,3],[706,3],[1137,3],[1391,3]]},"3082":{"position":[[51,3],[58,3]]},"3950":{"position":[[359,2]]}}}],["pm2",{"_index":650,"t":{"102":{"position":[[216,3]]},"2740":{"position":[[0,3],[61,3],[134,3],[152,3]]},"2742":{"position":[[72,3],[96,3],[132,3]]},"2745":{"position":[[29,3],[89,3],[236,3]]},"2747":{"position":[[39,3],[99,3],[271,3]]},"2749":{"position":[[54,3],[94,3],[183,3]]},"2751":{"position":[[0,3],[62,3],[104,3],[516,3],[526,3]]},"2754":{"position":[[0,3]]},"2756":{"position":[[0,3]]},"2758":{"position":[[0,3]]},"2760":{"position":[[0,3],[12,3],[39,3],[72,3],[95,3],[115,3]]},"2762":{"position":[[13,3],[51,3]]},"2764":{"position":[[8,3],[37,3],[65,3],[91,3],[114,3],[132,3]]},"3080":{"position":[[29,3],[41,3],[158,3],[182,3],[218,3],[232,3],[255,3],[315,3],[487,3],[622,3],[662,3],[751,3]]},"3082":{"position":[[9,3],[26,3],[42,3],[84,3],[96,3],[123,3],[156,3],[179,3],[199,3],[221,3],[250,3],[278,3],[304,3],[327,3],[345,3]]},"3912":{"position":[[2692,3]]},"3930":{"position":[[1506,3]]}}}],["png",{"_index":5970,"t":{"2098":{"position":[[75,3],[112,3]]},"3456":{"position":[[347,3]]},"3522":{"position":[[1406,3],[1581,3],[1604,3]]},"3916":{"position":[[7136,3],[7323,3],[7477,3],[7592,3],[7741,3],[7946,3],[7974,3],[8129,3],[8254,3],[8282,3],[8442,3],[8501,3]]},"3918":{"position":[[2184,3],[2359,3],[2382,3]]},"3934":{"position":[[1651,3]]},"3940":{"position":[[847,3],[884,3]]}}}],["poco",{"_index":5455,"t":{"1761":{"position":[[434,4],[517,4],[594,4]]}}}],["podman",{"_index":654,"t":{"102":{"position":[[266,6]]}}}],["pojo",{"_index":4230,"t":{"1392":{"position":[[83,4]]}}}],["polici",{"_index":2467,"t":{"415":{"position":[[63,6]]},"419":{"position":[[295,6]]},"1578":{"position":[[141,6]]},"2991":{"position":[[69,6]]},"3932":{"position":[[1241,6]]}}}],["policynam",{"_index":2463,"t":{"413":{"position":[[129,10]]},"415":{"position":[[21,10]]},"2991":{"position":[[27,10]]},"2993":{"position":[[29,10]]}}}],["policypipelin",{"_index":10434,"t":{"4000":{"position":[[178,14]]}}}],["pomelo",{"_index":3394,"t":{"698":{"position":[[649,6]]},"759":{"position":[[60,6]]},"897":{"position":[[222,6]]},"1309":{"position":[[386,6]]},"2361":{"position":[[356,6]]},"4004":{"position":[[7,6]]}}}],["pool",{"_index":2800,"t":{"520":{"position":[[104,7]]},"901":{"position":[[104,7]]},"1315":{"position":[[104,7]]},"1474":{"position":[[350,5],[379,4]]},"3339":{"position":[[90,4]]}}}],["pop",{"_index":2572,"t":{"445":{"position":[[300,3]]}}}],["port",{"_index":2441,"t":{"404":{"position":[[278,4]]},"445":{"position":[[264,4],[344,4]]},"520":{"position":[[117,4],[365,4],[424,4]]},"901":{"position":[[117,4],[393,4],[452,4]]},"1315":{"position":[[117,4],[393,4],[452,4]]},"1488":{"position":[[501,4],[1368,4],[1478,4],[1486,4]]},"1495":{"position":[[500,4]]},"1499":{"position":[[77,4],[755,4],[763,4]]}}}],["posit",{"_index":2577,"t":{"445":{"position":[[465,8],[546,8]]},"617":{"position":[[113,8]]}}}],["positionopt",{"_index":5823,"t":{"1909":{"position":[[426,15],[493,15]]}}}],["positivenumb",{"_index":3131,"t":{"606":{"position":[[39,14]]},"617":{"position":[[79,14],[1664,14]]}}}],["post",{"_index":329,"t":{"19":{"position":[[916,4]]},"114":{"position":[[296,4],[1424,5]]},"423":{"position":[[77,4]]},"556":{"position":[[27,5],[132,4],[144,4],[156,4],[173,4],[199,4],[212,4]]},"597":{"position":[[684,4]]},"602":{"position":[[205,4]]},"625":{"position":[[341,4]]},"696":{"position":[[3087,4],[3131,4],[3535,4]]},"747":{"position":[[196,4],[234,4],[287,4],[788,4],[801,4]]},"773":{"position":[[384,5],[886,5]]},"851":{"position":[[29,4],[750,4],[756,5],[1760,4],[1821,4]]},"853":{"position":[[125,4],[230,4],[378,4],[679,4]]},"857":{"position":[[46,5]]},"889":{"position":[[681,5]]},"1576":{"position":[[207,4]]},"1594":{"position":[[15,4]]},"1596":{"position":[[8,4]]},"1603":{"position":[[178,4],[196,4]]},"1615":{"position":[[287,4]]},"1619":{"position":[[350,4]]},"1631":{"position":[[94,4],[693,4]]},"1661":{"position":[[109,4],[920,4],[930,4],[948,4],[969,4],[990,4],[1011,4]]},"3023":{"position":[[110,4],[917,4],[927,4],[945,4],[966,4],[987,4],[1008,4]]},"3063":{"position":[[1229,4],[1267,4]]},"3446":{"position":[[771,4],[1899,5]]},"3452":{"position":[[2978,5]]},"3483":{"position":[[203,4],[232,4],[991,4]]},"3486":{"position":[[81,4],[134,4],[530,4],[561,4]]},"3490":{"position":[[30,4]]},"3492":{"position":[[38,4],[234,4]]},"3494":{"position":[[38,4],[215,4]]},"3502":{"position":[[30,4]]},"3504":{"position":[[30,4]]},"3535":{"position":[[142,4],[151,4],[180,4]]},"3545":{"position":[[47,4],[76,4],[142,4],[171,4],[274,4],[303,4]]},"3547":{"position":[[121,4],[150,4],[277,4],[306,4]]},"3549":{"position":[[47,4],[76,4],[184,4],[213,4]]},"3551":{"position":[[98,4],[127,4]]},"3553":{"position":[[98,4],[127,4]]},"3555":{"position":[[98,4],[127,4]]},"3557":{"position":[[98,4],[127,4]]},"3559":{"position":[[98,4],[127,4]]},"3561":{"position":[[156,4],[185,4],[236,4],[265,4],[303,4],[332,4],[368,4],[397,4]]},"3563":{"position":[[189,4],[393,4],[779,4],[911,4],[1093,4],[1238,4]]},"3565":{"position":[[61,4]]},"3567":{"position":[[108,4]]},"3569":{"position":[[77,4]]},"3571":{"position":[[122,4]]},"3595":{"position":[[417,4]]},"3620":{"position":[[347,4]]},"3622":{"position":[[12,4]]},"3638":{"position":[[313,4]]},"3640":{"position":[[199,4]]},"3686":{"position":[[468,4],[539,4]]},"3706":{"position":[[1221,4],[1278,4]]},"3916":{"position":[[5974,5]]},"3918":{"position":[[1581,4],[1723,4],[1868,4]]},"3928":{"position":[[2461,5]]}}}],["postasasync",{"_index":8393,"t":{"3595":{"position":[[27,11],[285,11]]}}}],["postasstringasync",{"_index":8313,"t":{"3522":{"position":[[1133,17]]},"3595":{"position":[[303,17]]}}}],["postasync",{"_index":8264,"t":{"3483":{"position":[[997,9]]},"3486":{"position":[[140,9]]},"3522":{"position":[[313,9],[477,9],[655,9],[859,9],[1413,9],[1612,9]]},"3575":{"position":[[633,9]]},"3595":{"position":[[432,9]]},"3916":{"position":[[7330,9],[7982,9],[8746,9]]},"3918":{"position":[[2191,9],[2390,9]]}}}],["postcod",{"_index":3141,"t":{"606":{"position":[[136,8]]},"617":{"position":[[378,8],[406,8]]}}}],["postconfigur",{"_index":6846,"t":{"2725":{"position":[[1525,13],[2142,13],[2606,13]]},"2727":{"position":[[104,13],[552,13],[821,13]]},"2729":{"position":[[619,13]]}}}],["postconfigureal",{"_index":6841,"t":{"2723":{"position":[[91,16]]}}}],["postgr",{"_index":2814,"t":{"520":{"position":[[443,8],[476,8],[493,8]]},"901":{"position":[[471,8],[504,8],[521,8]]},"1315":{"position":[[471,8],[504,8],[521,8]]}}}],["postgresql",{"_index":638,"t":{"102":{"position":[[122,10]]},"174":{"position":[[30,10]]},"520":{"position":[[413,10]]},"698":{"position":[[710,10],[748,10]]},"773":{"position":[[44,10]]},"803":{"position":[[47,10]]},"805":{"position":[[47,10]]},"895":{"position":[[47,10]]},"897":{"position":[[315,10],[353,10]]},"899":{"position":[[718,10]]},"901":{"position":[[441,10]]},"1105":{"position":[[47,10]]},"1309":{"position":[[479,10],[517,10]]},"1315":{"position":[[441,10]]},"3211":{"position":[[165,10]]},"3974":{"position":[[803,10]]}}}],["postxxxasync",{"_index":8257,"t":{"3483":{"position":[[253,12]]},"3535":{"position":[[214,12]]},"3545":{"position":[[110,12],[205,12],[337,12]]},"3547":{"position":[[245,12],[401,12]]},"3549":{"position":[[110,12],[247,12]]},"3551":{"position":[[161,12]]},"3553":{"position":[[161,12]]},"3555":{"position":[[161,12]]},"3557":{"position":[[161,12]]},"3559":{"position":[[161,12]]},"3561":{"position":[[219,12],[286,12],[351,12],[418,12]]},"3563":{"position":[[332,12],[536,12],[881,12],[1013,12],[1195,12],[1340,12]]},"3565":{"position":[[121,12]]},"3567":{"position":[[196,12]]},"3569":{"position":[[152,12]]},"3571":{"position":[[203,12]]},"3918":{"position":[[1683,12],[1825,12],[1970,12]]}}}],["powerbi",{"_index":816,"t":{"114":{"position":[[1113,7]]},"2770":{"position":[[348,7]]},"3446":{"position":[[1588,7]]},"3452":{"position":[[2470,7]]},"3916":{"position":[[5466,7]]},"3928":{"position":[[2150,7]]}}}],["powershel",{"_index":436,"t":{"53":{"position":[[64,10]]},"64":{"position":[[90,10]]},"77":{"position":[[64,10]]},"675":{"position":[[236,10]]},"1377":{"position":[[334,10]]},"1545":{"position":[[38,10]]},"1547":{"position":[[57,10]]},"1549":{"position":[[54,10]]},"2745":{"position":[[268,10]]},"2747":{"position":[[303,10]]},"3313":{"position":[[30,10]]},"3321":{"position":[[9,10]]},"3702":{"position":[[413,10],[531,10]]}}}],["pr",{"_index":671,"t":{"106":{"position":[[26,2]]},"1483":{"position":[[298,2]]},"2559":{"position":[[2347,2]]},"3986":{"position":[[48,2]]}}}],["pr158",{"_index":10259,"t":{"3992":{"position":[[2600,5]]}}}],["pr159",{"_index":10256,"t":{"3992":{"position":[[2488,5]]}}}],["pr200",{"_index":10094,"t":{"3986":{"position":[[316,5]]}}}],["pr204",{"_index":10085,"t":{"3986":{"position":[[52,5]]}}}],["pr209",{"_index":10113,"t":{"3986":{"position":[[960,5]]}}}],["pr236",{"_index":10039,"t":{"3982":{"position":[[323,5]]}}}],["pr70",{"_index":10478,"t":{"4006":{"position":[[725,4]]}}}],["pr71",{"_index":10468,"t":{"4004":{"position":[[554,4]]}}}],["pr73",{"_index":10447,"t":{"4000":{"position":[[946,4]]},"4002":{"position":[[371,4]]}}}],["pr78",{"_index":10419,"t":{"3998":{"position":[[22,4],[529,4]]}}}],["pr83",{"_index":10408,"t":{"3996":{"position":[[1515,4]]}}}],["pr85",{"_index":10401,"t":{"3996":{"position":[[1360,4]]}}}],["pr86",{"_index":10407,"t":{"3996":{"position":[[1487,4]]}}}],["pr87",{"_index":10400,"t":{"3996":{"position":[[1332,4]]}}}],["pr88",{"_index":10399,"t":{"3996":{"position":[[1297,4]]}}}],["pr89",{"_index":10397,"t":{"3996":{"position":[[1266,4]]}}}],["pr90",{"_index":10406,"t":{"3996":{"position":[[1467,4]]}}}],["pr91",{"_index":10389,"t":{"3996":{"position":[[1033,4]]}}}],["pr92",{"_index":10396,"t":{"3996":{"position":[[1239,4]]}}}],["pr93",{"_index":10395,"t":{"3996":{"position":[[1233,4]]}}}],["pr97",{"_index":10403,"t":{"3996":{"position":[[1391,4]]}}}],["pr98",{"_index":10394,"t":{"3996":{"position":[[1190,4]]}}}],["pre",{"_index":421,"t":{"51":{"position":[[195,3]]},"62":{"position":[[195,3]]},"75":{"position":[[195,3]]}}}],["prefix",{"_index":4503,"t":{"1497":{"position":[[63,6]]}}}],["preserverefer",{"_index":6817,"t":{"2696":{"position":[[123,17]]}}}],["preservevalueimport",{"_index":2036,"t":{"308":{"position":[[560,20]]}}}],["press",{"_index":8085,"t":{"3430":{"position":[[295,5],[2909,5],[4216,5]]},"3432":{"position":[[2864,5],[5433,5]]},"3601":{"position":[[510,5]]}}}],["preview",{"_index":382,"t":{"44":{"position":[[30,7],[105,7]]},"46":{"position":[[18,7]]},"51":{"position":[[10,7],[44,7],[60,7],[79,7],[231,7]]},"57":{"position":[[30,7],[82,7],[118,7]]},"60":{"position":[[18,7]]},"62":{"position":[[10,7],[44,7],[60,7],[79,7],[231,7]]},"64":{"position":[[14,7],[58,7],[157,7]]},"68":{"position":[[30,7],[105,7]]},"70":{"position":[[18,7]]},"75":{"position":[[10,7],[44,7],[60,7],[79,7],[231,7]]},"2008":{"position":[[61,7]]},"2010":{"position":[[22,7]]},"2016":{"position":[[43,7]]},"2363":{"position":[[233,7]]},"3922":{"position":[[677,7]]},"3934":{"position":[[2698,7],[2722,7],[2782,7]]},"3972":{"position":[[269,7]]}}}],["previou",{"_index":8967,"t":{"3832":{"position":[[2181,8],[3942,8]]}}}],["price",{"_index":3515,"t":{"763":{"position":[[65,5],[79,5],[367,5]]},"3222":{"position":[[284,5]]},"3226":{"position":[[547,5]]},"3230":{"position":[[132,5]]}}}],["primari",{"_index":7721,"t":{"3236":{"position":[[338,7]]},"3914":{"position":[[3219,7]]}}}],["primarynam",{"_index":8190,"t":{"3452":{"position":[[1481,11]]},"3916":{"position":[[4477,11]]}}}],["princip",{"_index":3360,"t":{"696":{"position":[[787,9],[843,9]]}}}],["print",{"_index":4473,"t":{"1488":{"position":[[1083,5]]},"1499":{"position":[[475,5]]}}}],["printdbconnectioninfo",{"_index":7293,"t":{"2981":{"position":[[329,21]]}}}],["printtominiprofil",{"_index":5931,"t":{"2041":{"position":[[4,19]]},"3254":{"position":[[1483,19]]},"3275":{"position":[[255,19],[434,19]]},"3460":{"position":[[78,19]]}}}],["privacymodel",{"_index":8077,"t":{"3420":{"position":[[46,12],[98,12],[128,12],[149,12],[249,12]]}}}],["privat",{"_index":196,"t":{"11":{"position":[[1027,7],[1089,7],[1153,7],[1235,7]]},"133":{"position":[[870,7]]},"188":{"position":[[220,7],[249,7],[279,7],[329,7]]},"231":{"position":[[186,7],[237,7]]},"237":{"position":[[1021,7]]},"253":{"position":[[98,7]]},"321":{"position":[[325,7]]},"435":{"position":[[869,7]]},"492":{"position":[[93,7],[135,7]]},"530":{"position":[[127,7],[181,7]]},"548":{"position":[[78,7],[236,7]]},"1022":{"position":[[0,7]]},"1039":{"position":[[127,7],[181,7]]},"1064":{"position":[[248,7]]},"1066":{"position":[[850,7]]},"1109":{"position":[[194,7],[717,7]]},"1227":{"position":[[0,7]]},"1368":{"position":[[279,7]]},"1392":{"position":[[270,7]]},"1408":{"position":[[285,7],[735,7]]},"1410":{"position":[[300,7],[750,7]]},"1412":{"position":[[972,7],[2030,7],[2082,7]]},"1414":{"position":[[225,7],[688,7]]},"1566":{"position":[[707,7]]},"1724":{"position":[[108,7],[162,7]]},"1795":{"position":[[109,7],[2033,7]]},"1799":{"position":[[224,7]]},"1801":{"position":[[558,7],[645,7],[715,7],[794,7]]},"1803":{"position":[[326,7],[354,7],[2648,7],[2733,7],[2802,7],[2900,7]]},"1805":{"position":[[137,7]]},"1807":{"position":[[172,7]]},"1811":{"position":[[164,7]]},"1815":{"position":[[143,7],[193,7]]},"1819":{"position":[[157,7]]},"1823":{"position":[[137,7],[192,7]]},"1909":{"position":[[409,7]]},"2294":{"position":[[1075,7],[1137,7],[1201,7],[1283,7]]},"2331":{"position":[[281,7]]},"2348":{"position":[[271,7],[329,7]]},"2482":{"position":[[67,7],[109,7]]},"2484":{"position":[[93,7],[135,7]]},"2551":{"position":[[79,7]]},"2579":{"position":[[153,7]]},"2581":{"position":[[189,7],[229,7],[692,7],[732,7]]},"2587":{"position":[[98,7],[138,7]]},"2589":{"position":[[117,7],[157,7]]},"2605":{"position":[[50,7]]},"2713":{"position":[[1040,7],[1082,7],[1124,7]]},"2731":{"position":[[301,7],[351,7],[533,7]]},"2790":{"position":[[406,7]]},"2813":{"position":[[333,7]]},"2817":{"position":[[482,7]]},"2825":{"position":[[67,7],[109,7]]},"2827":{"position":[[139,7],[181,7]]},"2829":{"position":[[157,7],[199,7],[234,7]]},"2831":{"position":[[116,7],[170,7]]},"2899":{"position":[[387,7]]},"3162":{"position":[[79,7]]},"3256":{"position":[[45,7],[112,7]]},"3287":{"position":[[1518,7]]},"3381":{"position":[[91,7]]},"3383":{"position":[[138,7]]},"3389":{"position":[[1067,7],[1111,7]]},"3391":{"position":[[415,7],[459,7],[504,7]]},"3393":{"position":[[696,7],[740,7],[785,7],[832,7]]},"3397":{"position":[[456,7]]},"3420":{"position":[[73,7]]},"3422":{"position":[[61,7]]},"3436":{"position":[[68,7]]},"3452":{"position":[[2653,7]]},"3466":{"position":[[1174,7],[1224,7]]},"3483":{"position":[[722,7]]},"3575":{"position":[[716,7]]},"3581":{"position":[[87,7],[506,7]]},"3583":{"position":[[170,7],[707,7]]},"3708":{"position":[[3387,7]]},"3734":{"position":[[167,7]]},"3762":{"position":[[44,7]]},"3768":{"position":[[219,7]]},"3770":{"position":[[91,7],[1324,7],[2775,7],[4640,7]]},"3772":{"position":[[304,7]]},"3774":{"position":[[376,7]]},"3783":{"position":[[98,7]]},"3791":{"position":[[105,7],[146,7],[625,7],[666,7],[714,7],[1424,7],[1465,7],[1513,7]]},"3795":{"position":[[88,7]]},"3806":{"position":[[1513,7],[2843,7],[3302,7]]},"3808":{"position":[[736,7],[1957,7]]},"3828":{"position":[[133,7]]},"3832":{"position":[[423,7]]},"3834":{"position":[[120,7]]},"3910":{"position":[[1195,7]]},"3916":{"position":[[5649,7]]},"3924":{"position":[[3309,7]]},"3956":{"position":[[2727,7]]}}}],["privatecommonent",{"_index":5467,"t":{"1775":{"position":[[521,19],[686,19],[923,19],[1232,19],[1613,19],[2066,19],[2591,19],[3188,19],[3656,19]]}}}],["privateentitybas",{"_index":9992,"t":{"3978":{"position":[[1484,17]]}}}],["privatekey",{"_index":5258,"t":{"1687":{"position":[[29,10],[234,10]]},"1689":{"position":[[641,10],[807,10]]}}}],["privaterepositori",{"_index":3893,"t":{"1041":{"position":[[623,17]]}}}],["privatexxxx",{"_index":5475,"t":{"1775":{"position":[[3873,11]]}}}],["privileg",{"_index":4424,"t":{"1485":{"position":[[62,10]]}}}],["proc",{"_index":3962,"t":{"1109":{"position":[[507,4],[906,4],[940,4]]},"1111":{"position":[[71,4],[232,4],[325,4],[383,4]]},"1113":{"position":[[71,4],[230,4],[323,4],[379,4]]},"1115":{"position":[[74,4],[233,4],[329,4],[382,4]]},"1117":{"position":[[139,4],[233,4],[337,4],[451,4],[575,4],[709,4],[853,4],[1007,4],[1827,4],[1924,4],[2031,4],[2148,4],[2275,4],[2412,4],[2559,4],[2716,4],[2860,4],[2957,4],[3064,4],[3181,4],[3308,4],[3445,4],[3592,4],[3749,4],[3852,4],[3929,4],[4016,4],[4113,4],[4220,4],[4337,4],[4464,4],[4601,4]]},"1119":{"position":[[68,4],[216,4],[303,4],[354,4]]},"1121":{"position":[[76,4],[232,4],[327,4],[378,4]]},"1123":{"position":[[58,4],[190,4],[270,4],[312,4]]},"1125":{"position":[[81,4],[86,4]]},"1129":{"position":[[98,4],[328,4],[457,4],[550,4],[906,4],[1214,4],[1395,4],[1514,4]]},"1160":{"position":[[608,4],[1542,4]]},"1162":{"position":[[636,4],[1618,4]]},"1164":{"position":[[305,4],[738,4]]},"1166":{"position":[[392,4],[948,4]]},"1173":{"position":[[42,4],[98,4],[166,4],[268,4],[335,4],[414,4]]},"1175":{"position":[[40,4],[102,4],[176,4],[284,4],[357,4],[442,4]]},"1177":{"position":[[40,4],[96,4],[164,4],[266,4],[333,4],[412,4]]},"1179":{"position":[[40,4],[115,4],[217,4],[349,4],[487,4],[573,4],[686,4],[829,4]]},"1181":{"position":[[38,4],[103,4],[209,4],[322,4],[398,4],[515,4]]},"1183":{"position":[[43,4],[109,4],[214,4],[296,4],[390,4],[467,4],[583,4],[676,4]]},"1185":{"position":[[7,4],[12,4],[747,4],[845,4],[974,4],[1127,4],[1236,4],[1376,4]]},"1251":{"position":[[121,4],[184,4],[242,4]]},"1253":{"position":[[121,4],[187,4],[248,4]]},"1255":{"position":[[121,4],[179,4],[232,4]]},"1257":{"position":[[121,4],[201,4],[276,4],[405,4]]},"1259":{"position":[[121,4],[179,4],[232,4]]},"1261":{"position":[[121,4],[177,4],[228,4]]},"1263":{"position":[[121,4],[204,4],[287,4]]},"1265":{"position":[[119,4]]}}}],["proc_complex",{"_index":4005,"t":{"1129":{"position":[[98,12],[328,12],[457,12],[550,12],[906,12],[1214,12],[1395,12],[1514,12]]}}}],["proc_getnam",{"_index":3989,"t":{"1119":{"position":[[68,12],[216,12],[303,12],[354,12]]},"1121":{"position":[[76,12],[232,12],[327,12],[378,12]]}}}],["proc_getperson",{"_index":3961,"t":{"1109":{"position":[[507,15],[906,15],[940,15]]},"1111":{"position":[[71,15],[232,15],[325,15],[383,15]]},"1113":{"position":[[71,15],[230,15],[323,15],[379,15]]},"1115":{"position":[[74,15],[233,15],[329,15],[382,15]]},"1117":{"position":[[139,15],[233,15],[337,15],[451,15],[575,15],[709,15],[853,15],[1007,15],[1827,15],[1924,15],[2031,15],[2148,15],[2275,15],[2412,15],[2559,15],[2716,15],[2860,15],[2957,15],[3064,15],[3181,15],[3308,15],[3445,15],[3592,15],[3749,15],[3852,15],[3929,15],[4016,15],[4113,15],[4220,15],[4337,15],[4464,15],[4601,15]]},"1160":{"position":[[608,14],[1542,14]]},"1162":{"position":[[636,14],[1618,14]]}}}],["proc_getstud",{"_index":4038,"t":{"1164":{"position":[[305,16],[738,16]]},"1166":{"position":[[392,16],[948,16]]}}}],["proc_nam",{"_index":4046,"t":{"1173":{"position":[[42,9],[98,9],[166,9],[268,9],[335,9],[414,9]]},"1175":{"position":[[40,9],[102,9],[176,9],[284,9],[357,9],[442,9]]},"1177":{"position":[[40,9],[96,9],[164,9],[266,9],[333,9],[412,9]]},"1179":{"position":[[40,9],[115,9],[217,9],[349,9],[487,9],[573,9],[686,9],[829,9]]},"1181":{"position":[[38,9],[103,9],[209,9],[322,9],[398,9],[515,9]]},"1183":{"position":[[43,9],[109,9],[214,9],[296,9],[390,9],[467,9],[583,9],[676,9]]},"1185":{"position":[[747,9],[845,9],[974,9],[1127,9],[1236,9],[1376,9]]},"1251":{"position":[[121,9],[184,9],[242,9]]},"1253":{"position":[[121,9],[187,9],[248,9]]},"1255":{"position":[[121,9],[179,9],[232,9]]},"1257":{"position":[[121,9],[201,9],[276,9],[405,9]]},"1259":{"position":[[121,9],[179,9],[232,9]]},"1261":{"position":[[121,9],[177,9],[228,9]]},"1263":{"position":[[121,9],[204,9],[287,9]]},"1265":{"position":[[119,9]]}}}],["proc_output",{"_index":3997,"t":{"1125":{"position":[[86,11]]},"1185":{"position":[[12,11]]}}}],["proc_updatedata",{"_index":3991,"t":{"1123":{"position":[[58,15],[190,15],[270,15],[312,15]]}}}],["procedur",{"_index":3948,"t":{"1103":{"position":[[20,9]]}}}],["procedureoutputresult",{"_index":4003,"t":{"1129":{"position":[[32,21],[161,21],[259,21],[388,21],[518,21],[788,21],[969,21],[1093,21],[1274,21],[1456,21]]},"1133":{"position":[[0,21],[24,21]]},"1185":{"position":[[715,21],[813,21],[911,21],[1089,21],[1198,21],[1307,21]]},"1263":{"position":[[134,21],[217,21],[300,21]]}}}],["procedureoutputvalu",{"_index":4016,"t":{"1133":{"position":[[96,20]]}}}],["process",{"_index":2079,"t":{"314":{"position":[[581,7],[666,7]]},"2303":{"position":[[17,7]]},"2573":{"position":[[97,10],[175,10]]},"3601":{"position":[[898,10],[1347,10],[1498,10]]},"3954":{"position":[[17,7]]}}}],["processarchitectur",{"_index":5948,"t":{"2057":{"position":[[175,19],[216,19]]}}}],["processchannel",{"_index":9664,"t":{"3954":{"position":[[71,14]]}}}],["procnam",{"_index":3957,"t":{"1107":{"position":[[140,8],[160,8]]}}}],["procoutputmodel",{"_index":3999,"t":{"1127":{"position":[[94,15]]},"1129":{"position":[[117,15],[221,15],[347,15],[476,15],[587,15],[925,15],[1055,15],[1233,15],[1414,15],[1577,15]]},"1185":{"position":[[371,15],[781,15],[879,15],[1039,15],[1166,15],[1275,15],[1446,15]]},"1263":{"position":[[166,15],[249,15],[363,15]]}}}],["prod",{"_index":4507,"t":{"1499":{"position":[[21,4],[380,4]]}}}],["produc",{"_index":5614,"t":{"1803":{"position":[[2942,8],[3913,8],[4525,8]]}}}],["produceasync",{"_index":5622,"t":{"1803":{"position":[[4534,12]]}}}],["producerbuild",{"_index":5621,"t":{"1803":{"position":[[3928,15]]}}}],["producerconf",{"_index":5616,"t":{"1803":{"position":[[3052,12],[3249,12],[3958,12],[5377,12],[5634,12]]}}}],["producerconfig",{"_index":5618,"t":{"1803":{"position":[[3234,14],[5396,14]]}}}],["producesresponsetyp",{"_index":8486,"t":{"3656":{"position":[[155,20],[207,20]]},"3714":{"position":[[70,20]]}}}],["product",{"_index":2082,"t":{"314":{"position":[[607,10],[645,10],[692,10]]},"316":{"position":[[632,10]]},"451":{"position":[[157,10],[242,10]]},"698":{"position":[[1018,7]]},"1458":{"position":[[27,10]]},"1551":{"position":[[631,7],[647,7]]},"2751":{"position":[[480,10]]}}}],["profil",{"_index":4981,"t":{"1541":{"position":[[147,8],[374,8]]},"1543":{"position":[[29,8],[146,8],[270,8],[391,8]]},"2875":{"position":[[772,8]]}}}],["progam",{"_index":5422,"t":{"1755":{"position":[[779,7]]},"3944":{"position":[[791,7]]}}}],["program",{"_index":31,"t":{"3":{"position":[[264,7]]},"188":{"position":[[584,7]]},"202":{"position":[[42,7],[84,7],[209,7]]},"348":{"position":[[30,7]]},"455":{"position":[[253,7],[281,7],[708,7]]},"461":{"position":[[995,7]]},"1539":{"position":[[375,7]]},"1667":{"position":[[2,7]]},"1977":{"position":[[109,7]]},"2266":{"position":[[11,7]]},"2269":{"position":[[16,7],[69,7],[194,7]]},"2776":{"position":[[25,7],[182,7]]},"2813":{"position":[[704,7],[847,7]]},"2819":{"position":[[51,7],[205,7]]},"2821":{"position":[[70,7],[236,7]]},"2836":{"position":[[136,7],[295,7],[1356,7],[1508,7]]},"2862":{"position":[[71,7],[224,7]]},"2868":{"position":[[3,7],[19,7]]},"2872":{"position":[[0,7]]},"2881":{"position":[[120,7],[214,7],[286,7],[388,7]]},"2889":{"position":[[39,7]]},"2899":{"position":[[104,7]]},"3075":{"position":[[45,7]]},"3166":{"position":[[13,7]]},"3934":{"position":[[1212,7]]}}}],["project",{"_index":4810,"t":{"1511":{"position":[[2761,7]]},"1535":{"position":[[40,7],[429,7]]},"1541":{"position":[[186,7],[272,7],[419,7]]},"1543":{"position":[[74,7],[191,7],[315,7],[436,7]]},"1551":{"position":[[201,7],[1105,7]]},"2875":{"position":[[542,7],[556,7],[813,7]]},"2891":{"position":[[22,7],[39,7],[78,7]]},"3934":{"position":[[100,7],[421,7]]}}}],["projecttotyp",{"_index":6813,"t":{"2694":{"position":[[13,13],[245,13]]}}}],["promis",{"_index":2099,"t":{"319":{"position":[[25,7],[60,7]]}}}],["prop",{"_index":2978,"t":{"570":{"position":[[1308,5],[1494,4],[1502,5],[1535,4]]},"1234":{"position":[[405,4]]},"1236":{"position":[[411,4]]},"1238":{"position":[[493,4]]},"1240":{"position":[[535,4]]}}}],["prop_nam",{"_index":4076,"t":{"1234":{"position":[[405,9]]},"1236":{"position":[[411,9]]},"1238":{"position":[[493,9]]},"1240":{"position":[[535,9]]}}}],["properti",{"_index":2980,"t":{"570":{"position":[[1338,10]]},"696":{"position":[[3015,8],[4576,8],[4633,8]]},"933":{"position":[[839,8],[954,8]]},"1541":{"position":[[79,10],[95,10]]},"2875":{"position":[[630,10]]},"2937":{"position":[[1310,8],[1425,8]]},"3770":{"position":[[610,10],[1992,10],[3605,10],[5288,10]]},"3777":{"position":[[327,10]]},"3779":{"position":[[832,10],[1166,10],[1525,10]]},"3783":{"position":[[1259,10]]},"3785":{"position":[[291,10],[938,10],[1324,10],[1697,10]]},"3817":{"position":[[804,10],[1842,10]]},"3821":{"position":[[319,10]]},"3896":{"position":[[244,10]]}}}],["propertygroup",{"_index":126,"t":{"9":{"position":[[173,13]]},"1372":{"position":[[125,13],[247,13]]},"1444":{"position":[[125,13],[247,13]]},"1535":{"position":[[74,13],[412,13]]},"1551":{"position":[[235,13],[991,13]]},"2292":{"position":[[173,13]]},"2298":{"position":[[114,13],[219,13]]},"3071":{"position":[[75,13]]},"3277":{"position":[[48,13],[197,13]]}}}],["propertynam",{"_index":6248,"t":{"2375":{"position":[[183,12]]}}}],["propertynamecaseinsensit",{"_index":6220,"t":{"2352":{"position":[[311,27],[436,27]]},"2373":{"position":[[114,27]]}}}],["propertynamingpolici",{"_index":6229,"t":{"2359":{"position":[[114,20],[576,20]]},"3720":{"position":[[284,20]]},"3722":{"position":[[179,20]]},"3992":{"position":[[666,20]]}}}],["properynam",{"_index":6012,"t":{"2167":{"position":[[417,11]]}}}],["propnam",{"_index":2984,"t":{"570":{"position":[[1524,8],[1587,8],[1718,8],[1836,8],[2181,8],[2472,8]]}}}],["protect",{"_index":2736,"t":{"492":{"position":[[301,9]]},"518":{"position":[[334,9]]},"530":{"position":[[368,9]]},"534":{"position":[[509,9]]},"570":{"position":[[609,9]]},"587":{"position":[[1288,9]]},"832":{"position":[[426,9]]},"915":{"position":[[85,9]]},"933":{"position":[[437,9]]},"1039":{"position":[[368,9]]},"1313":{"position":[[964,9]]},"1803":{"position":[[2191,9]]},"2482":{"position":[[201,9]]},"2484":{"position":[[301,9]]},"2805":{"position":[[291,9]]},"2813":{"position":[[435,9]]},"2817":{"position":[[714,9]]},"2825":{"position":[[201,9]]},"2827":{"position":[[347,9]]},"2829":{"position":[[395,9]]},"2831":{"position":[[349,9]]},"2899":{"position":[[490,9]]},"2937":{"position":[[872,9]]},"2951":{"position":[[324,9]]},"3910":{"position":[[1276,9]]}}}],["protocol",{"_index":2439,"t":{"404":{"position":[[255,8]]},"520":{"position":[[335,8]]},"901":{"position":[[363,8]]},"1315":{"position":[[363,8]]}}}],["provid",{"_index":2062,"t":{"310":{"position":[[1083,9]]},"461":{"position":[[202,8]]},"713":{"position":[[484,8]]},"734":{"position":[[485,8],[6742,8],[6886,8]]},"1418":{"position":[[107,8]]},"2910":{"position":[[132,8]]},"3430":{"position":[[619,8],[881,8],[1287,8]]},"3702":{"position":[[2504,8]]},"3982":{"position":[[847,8]]}}}],["providernam",{"_index":2791,"t":{"516":{"position":[[604,12]]},"761":{"position":[[78,12]]}}}],["provinc",{"_index":2541,"t":{"441":{"position":[[212,8]]}}}],["proxi",{"_index":2860,"t":{"534":{"position":[[64,7]]},"1416":{"position":[[416,5]]},"1420":{"position":[[361,5],[868,5]]},"1424":{"position":[[1857,5]]},"1426":{"position":[[320,5]]},"1428":{"position":[[13,5]]},"3001":{"position":[[390,5]]},"3003":{"position":[[305,5]]}}}],["ps",{"_index":4470,"t":{"1488":{"position":[[1046,2]]},"1499":{"position":[[438,2]]},"2749":{"position":[[20,2],[794,2]]},"3080":{"position":[[588,2],[1362,2]]},"3254":{"position":[[1184,2]]},"3992":{"position":[[128,2],[3468,2]]},"4000":{"position":[[1002,2]]}}}],["ps1",{"_index":3307,"t":{"675":{"position":[[92,3],[189,3]]},"685":{"position":[[30,3],[96,3],[384,3]]},"696":{"position":[[27,3]]},"698":{"position":[[61,3]]},"3932":{"position":[[1142,3]]},"3966":{"position":[[1468,3]]},"3972":{"position":[[318,3]]},"3986":{"position":[[584,3]]},"3992":{"position":[[3145,3]]},"4000":{"position":[[1154,3]]}}}],["ps256",{"_index":1012,"t":{"127":{"position":[[1503,5]]},"3039":{"position":[[428,5]]}}}],["ps384",{"_index":1013,"t":{"127":{"position":[[1509,5]]},"3039":{"position":[[434,5]]}}}],["ps512",{"_index":1014,"t":{"127":{"position":[[1515,5]]},"3039":{"position":[[440,5]]}}}],["psl",{"_index":8546,"t":{"3702":{"position":[[2284,3],[2372,3],[2415,3],[2706,3]]},"3966":{"position":[[838,3]]}}}],["pt",{"_index":6621,"t":{"2559":{"position":[[1848,2],[1855,2],[1869,2],[1872,2]]}}}],["pub",{"_index":4939,"t":{"1530":{"position":[[130,4]]}}}],["publi",{"_index":4508,"t":{"1499":{"position":[[87,6]]}}}],["public",{"_index":66,"t":{"3":{"position":[[682,6],[736,6],[792,6]]},"11":{"position":[[970,6]]},"15":{"position":[[26,6]]},"17":{"position":[[20,6]]},"19":{"position":[[21,6]]},"28":{"position":[[66,6],[92,6]]},"112":{"position":[[323,6],[378,6]]},"127":{"position":[[538,6],[586,6]]},"129":{"position":[[512,6]]},"133":{"position":[[325,6],[509,6]]},"135":{"position":[[253,6],[301,6]]},"146":{"position":[[304,6],[466,6],[854,6]]},"188":{"position":[[193,6],[370,6],[459,6],[523,6],[571,6],[594,6]]},"202":{"position":[[196,6],[219,6],[301,6]]},"204":{"position":[[274,6],[297,6],[360,6]]},"210":{"position":[[321,6],[359,6],[452,6],[561,6],[630,6]]},"212":{"position":[[224,6],[265,6],[328,6],[512,6],[554,6],[617,6]]},"216":{"position":[[284,6],[307,6],[370,6],[711,6],[764,6],[894,6]]},"218":{"position":[[337,6]]},"231":{"position":[[133,6],[281,6],[402,6]]},"237":{"position":[[109,6],[583,6],[859,6]]},"253":{"position":[[60,6],[141,6],[204,6],[246,6],[499,6]]},"288":{"position":[[365,6]]},"327":{"position":[[172,6],[233,6]]},"338":{"position":[[216,6],[269,6],[702,6]]},"340":{"position":[[192,6],[256,6],[581,6],[644,6],[809,6],[878,6],[1043,6],[1105,6],[1387,6],[1686,6]]},"344":{"position":[[129,6]]},"346":{"position":[[126,6]]},"348":{"position":[[153,6]]},"353":{"position":[[182,6],[245,6]]},"355":{"position":[[282,6],[363,6],[471,6]]},"369":{"position":[[516,6],[580,6]]},"371":{"position":[[87,6],[153,6],[296,6],[370,6]]},"411":{"position":[[238,6],[291,6],[389,6]]},"435":{"position":[[211,6],[271,6],[579,6],[639,6],[917,6],[1030,6],[1104,6]]},"455":{"position":[[268,6],[291,6],[373,6]]},"461":{"position":[[982,6],[1005,6],[1087,6]]},"492":{"position":[[51,6],[170,6]]},"508":{"position":[[150,6],[313,6]]},"510":{"position":[[150,6],[343,6]]},"514":{"position":[[179,6],[244,6]]},"516":{"position":[[178,6],[318,6]]},"518":{"position":[[108,6],[248,6]]},"524":{"position":[[258,6],[323,6]]},"530":{"position":[[73,6],[234,6]]},"534":{"position":[[356,6],[421,6]]},"548":{"position":[[132,6],[298,6]]},"570":{"position":[[355,6],[418,6]]},"572":{"position":[[272,6],[344,6],[726,6]]},"585":{"position":[[21,6]]},"587":{"position":[[185,6],[256,6],[337,6],[385,6],[1047,6],[1106,6],[1162,6],[1187,6],[1683,6],[1759,6],[1803,6]]},"595":{"position":[[131,6],[184,6]]},"597":{"position":[[101,6],[176,6],[280,6],[383,6],[532,6],[669,6]]},"599":{"position":[[110,6],[206,6],[310,6],[343,6]]},"602":{"position":[[95,6],[177,6]]},"608":{"position":[[130,6],[195,6],[290,6],[414,6],[509,6],[608,6]]},"610":{"position":[[199,6]]},"615":{"position":[[274,6],[930,6]]},"617":{"position":[[1557,6],[1976,6],[2056,6],[2307,6],[2360,6]]},"625":{"position":[[227,6],[326,6]]},"627":{"position":[[133,6],[175,6]]},"639":{"position":[[0,6],[22,6],[50,6],[83,6],[117,6],[148,6],[207,6]]},"653":{"position":[[385,6],[450,6]]},"655":{"position":[[314,6]]},"696":{"position":[[1411,6],[1475,6],[1530,6],[1558,6],[1591,6],[1626,6],[1668,6],[1711,6],[1747,6],[1788,6],[1849,6],[2592,6],[2672,6],[2700,6],[2740,6],[2771,6],[2805,6],[3514,6],[3552,6],[3580,6],[3613,6],[3655,6],[3698,6],[4196,6],[4266,6],[4294,6],[4327,6],[4356,6],[4392,6]]},"708":{"position":[[148,6],[217,6],[336,6],[405,6],[470,6]]},"730":{"position":[[77,6]]},"732":{"position":[[0,6]]},"734":{"position":[[7904,6],[7980,6]]},"745":{"position":[[150,6],[215,6]]},"747":{"position":[[183,6],[280,6],[390,6],[466,6],[766,6]]},"749":{"position":[[89,6]]},"793":{"position":[[0,6],[60,6]]},"822":{"position":[[127,6],[224,6]]},"830":{"position":[[24,6],[86,6],[150,6],[219,6],[284,6]]},"832":{"position":[[189,6],[252,6],[340,6]]},"844":{"position":[[233,6],[292,6],[359,6],[392,6],[421,6],[457,6]]},"846":{"position":[[412,6],[496,6],[582,6]]},"851":{"position":[[182,6],[251,6],[351,6],[420,6],[485,6],[557,6],[641,6],[731,6],[835,6],[914,6],[993,6],[1060,6],[1130,6],[1238,6],[1309,6],[1395,6],[1464,6],[1535,6],[1605,6],[1747,6],[1814,6],[1896,6],[1972,6]]},"877":{"position":[[244,6],[360,6],[442,6],[513,6],[584,6],[661,6],[880,6],[1281,6],[1994,6],[2053,6],[2117,6],[2186,6]]},"889":{"position":[[195,6],[254,6],[449,6]]},"911":{"position":[[11,6],[86,6]]},"913":{"position":[[0,6],[139,6]]},"927":{"position":[[178,6],[255,6],[472,6],[772,6],[934,6],[1177,6],[1396,6],[1632,6],[1796,6],[1971,6],[2135,6]]},"929":{"position":[[254,6],[456,6],[609,6],[756,6],[980,6],[1208,6],[1519,6],[1713,6],[2001,6],[2223,6],[2443,6],[2746,6],[2932,6],[3204,6],[3429,6],[3737,6],[3928,6]]},"931":{"position":[[139,6],[223,6],[405,6],[670,6],[821,6],[1054,6],[1182,6]]},"945":{"position":[[193,6]]},"947":{"position":[[282,6],[358,6],[776,6],[870,6]]},"1022":{"position":[[56,6]]},"1024":{"position":[[0,6]]},"1037":{"position":[[550,6]]},"1039":{"position":[[73,6],[234,6]]},"1041":{"position":[[184,6],[567,6],[885,6],[1033,6],[1195,6],[1422,6],[1585,6]]},"1054":{"position":[[191,6],[254,6]]},"1056":{"position":[[209,6],[293,6],[571,6]]},"1058":{"position":[[125,6],[190,6]]},"1060":{"position":[[185,6],[362,6],[426,6],[495,6]]},"1064":{"position":[[150,6],[422,6],[649,6],[797,6]]},"1066":{"position":[[391,6],[454,6],[752,6],[1014,6],[1194,6],[1341,6],[1496,6]]},"1109":{"position":[[168,6],[233,6],[436,6],[691,6],[760,6]]},"1127":{"position":[[81,6],[112,6],[200,6],[282,6],[365,6]]},"1145":{"position":[[103,6],[163,6],[196,6],[225,6],[271,6]]},"1147":{"position":[[96,6],[162,6]]},"1151":{"position":[[127,6],[240,6]]},"1185":{"position":[[358,6],[389,6],[477,6],[559,6],[642,6]]},"1223":{"position":[[179,6]]},"1227":{"position":[[28,6]]},"1229":{"position":[[0,6]]},"1234":{"position":[[62,6],[965,6],[988,6],[1013,6]]},"1236":{"position":[[62,6]]},"1238":{"position":[[62,6]]},"1240":{"position":[[62,6]]},"1242":{"position":[[62,6]]},"1244":{"position":[[62,6]]},"1246":{"position":[[33,6]]},"1248":{"position":[[98,6]]},"1251":{"position":[[62,6]]},"1253":{"position":[[62,6]]},"1255":{"position":[[62,6]]},"1257":{"position":[[62,6]]},"1259":{"position":[[62,6]]},"1261":{"position":[[62,6]]},"1263":{"position":[[62,6]]},"1265":{"position":[[33,6]]},"1267":{"position":[[62,6]]},"1275":{"position":[[107,6]]},"1279":{"position":[[181,6]]},"1281":{"position":[[16,6]]},"1311":{"position":[[169,6],[234,6]]},"1313":{"position":[[421,6],[811,6],[876,6]]},"1317":{"position":[[179,6],[244,6]]},"1353":{"position":[[352,6],[417,6]]},"1364":{"position":[[55,6],[133,6],[212,6],[276,6],[345,6],[410,6]]},"1368":{"position":[[226,6],[347,6],[557,6]]},"1392":{"position":[[241,6],[312,6]]},"1394":{"position":[[192,6],[221,6]]},"1396":{"position":[[103,6],[132,6]]},"1408":{"position":[[165,6],[223,6],[341,6],[444,6],[686,6],[787,6],[895,6]]},"1410":{"position":[[171,6],[232,6],[356,6],[459,6],[701,6],[807,6],[920,6]]},"1412":{"position":[[418,6],[474,6],[536,6],[606,6],[673,6],[915,6],[1052,6],[1189,6],[1982,6],[2139,6],[2395,6],[2661,6],[2764,6]]},"1414":{"position":[[185,6],[281,6],[380,6],[640,6],[731,6],[821,6]]},"1424":{"position":[[209,6],[273,6],[326,6],[588,6],[698,6],[805,6],[980,6],[1200,6],[1423,6],[1892,6],[1945,6]]},"1426":{"position":[[140,6]]},"1572":{"position":[[218,6],[260,6],[413,6],[472,6]]},"1582":{"position":[[205,6],[258,6]]},"1584":{"position":[[191,6],[247,6],[424,6],[456,6]]},"1603":{"position":[[66,6],[122,6],[164,6],[208,6],[256,6],[298,6]]},"1605":{"position":[[66,6],[122,6],[171,6],[220,6]]},"1607":{"position":[[66,6],[122,6],[172,6],[242,6]]},"1609":{"position":[[129,6],[185,6],[475,6],[531,6]]},"1611":{"position":[[267,6],[351,6],[419,6]]},"1613":{"position":[[98,6],[165,6]]},"1615":{"position":[[98,6],[204,6]]},"1617":{"position":[[191,6],[247,6],[403,6],[489,6],[686,6],[766,6],[950,6],[1032,6]]},"1619":{"position":[[236,6],[370,6]]},"1621":{"position":[[79,6],[137,6],[186,6],[246,6],[295,6],[357,6],[481,6],[537,6],[584,6],[633,6],[859,6]]},"1627":{"position":[[115,6]]},"1633":{"position":[[67,6],[134,6],[200,6],[271,6]]},"1635":{"position":[[95,6]]},"1643":{"position":[[147,6],[244,6]]},"1645":{"position":[[140,6],[238,6]]},"1647":{"position":[[188,6],[294,6]]},"1649":{"position":[[99,6],[197,6]]},"1651":{"position":[[109,6],[165,6],[251,6]]},"1653":{"position":[[144,6],[242,6]]},"1655":{"position":[[157,6],[279,6]]},"1657":{"position":[[278,6],[334,6],[416,6]]},"1659":{"position":[[126,6],[182,6],[229,6],[269,6],[323,6],[370,6],[523,6],[579,6],[626,6],[704,6],[758,6],[805,6],[961,6],[1017,6],[1064,6],[1145,6],[1199,6],[1246,6]]},"1663":{"position":[[343,6],[389,6]]},"1665":{"position":[[80,6],[140,6]]},"1667":{"position":[[46,6]]},"1701":{"position":[[55,6]]},"1703":{"position":[[94,6],[200,6],[377,6],[511,6]]},"1711":{"position":[[109,6],[171,6],[279,6]]},"1724":{"position":[[78,6],[216,6]]},"1739":{"position":[[28,6],[276,6]]},"1741":{"position":[[95,6],[882,6],[1752,6]]},"1743":{"position":[[50,6],[359,6]]},"1745":{"position":[[146,6]]},"1749":{"position":[[75,6]]},"1767":{"position":[[55,6],[126,6],[190,6]]},"1769":{"position":[[55,6],[138,6]]},"1771":{"position":[[55,6],[170,6]]},"1773":{"position":[[55,6],[94,6],[167,6],[231,6]]},"1775":{"position":[[285,6],[368,6],[458,6],[603,6],[820,6],[1109,6],[1470,6],[1903,6],[2408,6],[2985,6],[3634,6],[3719,6],[3756,6]]},"1779":{"position":[[161,6],[252,6],[321,6],[361,6]]},"1781":{"position":[[161,6],[213,6],[449,6]]},"1795":{"position":[[55,6],[164,6],[282,6],[536,6],[784,6],[1139,6],[1549,6],[1768,6],[1957,6],[2083,6],[2196,6],[2345,6],[2873,6]]},"1797":{"position":[[80,6],[126,6],[155,6],[264,6],[340,6],[420,6],[496,6],[708,6]]},"1799":{"position":[[165,6],[268,6],[373,6],[547,6]]},"1801":{"position":[[432,6],[1006,6],[2210,6],[2870,6],[3100,6]]},"1803":{"position":[[269,6],[437,6],[535,6],[632,6],[735,6],[871,6],[1124,6],[1819,6],[2050,6],[2533,6],[3176,6],[4172,6],[4842,6],[5072,6]]},"1805":{"position":[[85,6],[193,6],[301,6]]},"1807":{"position":[[110,6],[231,6],[325,6],[489,6]]},"1809":{"position":[[108,6],[173,6]]},"1811":{"position":[[110,6],[219,6],[354,6],[428,6]]},"1815":{"position":[[91,6],[245,6],[421,6],[590,6]]},"1819":{"position":[[99,6],[212,6],[298,6],[714,6]]},"1823":{"position":[[70,6],[238,6],[434,6],[670,6]]},"1843":{"position":[[131,6],[184,6]]},"1845":{"position":[[106,6],[162,6],[379,6],[435,6]]},"1851":{"position":[[51,6],[239,6],[518,6],[766,6],[1038,6]]},"1855":{"position":[[186,6]]},"1859":{"position":[[98,6],[154,6]]},"1865":{"position":[[79,6],[337,6]]},"1867":{"position":[[160,6],[228,6],[474,6],[527,6]]},"1869":{"position":[[441,6],[497,6]]},"1873":{"position":[[24,6],[202,6],[329,6]]},"1875":{"position":[[98,6],[532,6]]},"1883":{"position":[[231,6],[304,6]]},"1887":{"position":[[147,6]]},"1907":{"position":[[68,6]]},"1909":{"position":[[71,6],[177,6],[338,6],[453,6],[609,6],[728,6],[874,6],[950,6],[1011,6],[1165,6]]},"1913":{"position":[[281,6],[346,6],[1523,6],[1679,6]]},"1915":{"position":[[156,6],[241,6],[358,6]]},"1919":{"position":[[120,6],[175,6],[971,6],[1117,6]]},"1921":{"position":[[156,6],[231,6],[377,6]]},"1925":{"position":[[175,6],[226,6],[1694,6],[1836,6]]},"1927":{"position":[[75,6],[263,6],[567,6],[977,6]]},"1929":{"position":[[156,6],[227,6],[365,6]]},"1933":{"position":[[145,6],[202,6],[1140,6],[1288,6]]},"1935":{"position":[[75,6],[236,6],[601,6]]},"1937":{"position":[[156,6],[233,6],[332,6]]},"1941":{"position":[[151,6],[202,6],[1382,6],[1524,6]]},"1943":{"position":[[75,6],[132,6],[542,6]]},"1945":{"position":[[156,6],[227,6],[365,6]]},"1951":{"position":[[67,6],[245,6],[645,6]]},"1953":{"position":[[75,6],[132,6],[325,6]]},"1961":{"position":[[168,6],[248,6],[274,6],[429,6]]},"1977":{"position":[[96,6],[119,6],[201,6]]},"1979":{"position":[[222,6],[245,6],[325,6],[370,6],[491,6]]},"2235":{"position":[[64,6],[107,6]]},"2237":{"position":[[66,6],[92,6]]},"2255":{"position":[[147,6]]},"2269":{"position":[[181,6],[204,6],[286,6]]},"2272":{"position":[[240,6],[263,6],[446,6]]},"2281":{"position":[[145,6],[168,6],[239,6]]},"2294":{"position":[[1018,6]]},"2313":{"position":[[187,6],[349,6],[570,6]]},"2331":{"position":[[336,6]]},"2345":{"position":[[157,6]]},"2348":{"position":[[223,6],[388,6]]},"2350":{"position":[[0,6]]},"2352":{"position":[[0,6]]},"2357":{"position":[[514,6],[745,6],[1127,6],[1404,6]]},"2375":{"position":[[169,6]]},"2379":{"position":[[644,6],[730,6],[929,6],[1131,6]]},"2406":{"position":[[0,6],[211,6],[507,6]]},"2415":{"position":[[0,6],[198,6]]},"2434":{"position":[[0,6],[202,6],[528,6]]},"2442":{"position":[[203,6],[310,6],[542,6],[815,6],[1098,6],[1332,6],[1589,6],[1807,6]]},"2470":{"position":[[91,6]]},"2478":{"position":[[91,6]]},"2482":{"position":[[25,6],[141,6]]},"2484":{"position":[[51,6],[170,6]]},"2486":{"position":[[233,6],[399,6]]},"2519":{"position":[[22,6],[152,6]]},"2536":{"position":[[79,6]]},"2538":{"position":[[215,6],[245,6],[279,6]]},"2551":{"position":[[36,6],[125,6],[215,6]]},"2579":{"position":[[113,6],[193,6],[265,6],[635,6],[692,6],[859,6]]},"2581":{"position":[[149,6],[289,6],[422,6],[652,6],[792,6],[949,6],[1094,6],[1151,6]]},"2587":{"position":[[58,6],[198,6],[366,6]]},"2589":{"position":[[77,6],[229,6],[397,6]]},"2605":{"position":[[104,6]]},"2607":{"position":[[343,6],[365,6],[398,6]]},"2690":{"position":[[60,6],[94,6]]},"2692":{"position":[[40,6]]},"2709":{"position":[[65,6],[118,6],[151,6],[187,6]]},"2711":{"position":[[221,6],[274,6]]},"2713":{"position":[[559,6],[619,6],[990,6],[1166,6],[1440,6],[1876,6],[1936,6]]},"2721":{"position":[[186,6],[239,6],[272,6],[308,6],[381,6],[435,6],[468,6],[504,6],[620,6],[673,6],[706,6],[742,6],[833,6],[887,6],[920,6],[956,6]]},"2725":{"position":[[267,6],[356,6],[471,6],[534,6],[756,6],[824,6],[1236,6],[1360,6],[1404,6],[1467,6],[1513,6],[1853,6],[1977,6],[2021,6],[2084,6],[2130,6],[2198,6],[2266,6]]},"2727":{"position":[[292,6],[397,6],[441,6],[504,6],[540,6]]},"2729":{"position":[[268,6],[345,6],[378,6],[414,6],[450,6],[607,6]]},"2731":{"position":[[246,6],[381,6],[605,6]]},"2735":{"position":[[189,6],[242,6],[275,6],[341,6]]},"2776":{"position":[[169,6],[192,6],[274,6]]},"2786":{"position":[[0,6]]},"2790":{"position":[[123,6],[167,6],[228,6],[377,6],[480,6],[685,6],[902,6],[1114,6]]},"2792":{"position":[[38,6],[87,6],[157,6]]},"2796":{"position":[[44,6],[132,6],[242,6],[436,6],[669,6]]},"2798":{"position":[[0,6]]},"2805":{"position":[[249,6]]},"2807":{"position":[[241,6],[284,6]]},"2813":{"position":[[291,6],[375,6],[834,6],[857,6],[939,6]]},"2817":{"position":[[440,6],[524,6],[590,6],[963,6]]},"2819":{"position":[[192,6],[215,6],[297,6]]},"2821":{"position":[[223,6],[246,6],[328,6]]},"2825":{"position":[[25,6],[141,6]]},"2827":{"position":[[97,6],[216,6]]},"2829":{"position":[[115,6],[264,6]]},"2831":{"position":[[66,6],[223,6]]},"2836":{"position":[[282,6],[305,6],[387,6],[1495,6],[1518,6],[1600,6]]},"2848":{"position":[[35,6],[58,6],[379,6],[1227,6],[1267,6],[1398,6]]},"2872":{"position":[[47,6],[75,6]]},"2879":{"position":[[480,6],[527,6]]},"2881":{"position":[[626,6],[662,6],[733,6]]},"2887":{"position":[[309,6],[337,6]]},"2889":{"position":[[335,6],[373,6],[468,6]]},"2899":{"position":[[346,6],[417,6]]},"2901":{"position":[[145,6],[185,6]]},"2905":{"position":[[242,6],[265,6],[321,6]]},"2925":{"position":[[232,6],[334,6]]},"2927":{"position":[[137,6],[202,6]]},"2929":{"position":[[212,6],[297,6]]},"2933":{"position":[[226,6],[331,6],[417,6],[694,6]]},"2935":{"position":[[297,6],[402,6],[488,6],[564,6]]},"2937":{"position":[[394,6],[499,6],[585,6],[661,6]]},"2941":{"position":[[232,6],[334,6]]},"2943":{"position":[[137,6],[202,6]]},"2945":{"position":[[212,6],[297,6]]},"2949":{"position":[[164,6],[251,6],[337,6],[558,6]]},"2951":{"position":[[151,6],[238,6],[499,6]]},"2955":{"position":[[232,6],[334,6]]},"2957":{"position":[[137,6],[202,6]]},"2959":{"position":[[212,6],[297,6]]},"2963":{"position":[[213,6],[298,6],[384,6],[563,6]]},"2965":{"position":[[50,6],[126,6]]},"2971":{"position":[[90,6],[159,6],[194,6],[227,6]]},"3071":{"position":[[329,6],[520,6],[759,6]]},"3144":{"position":[[252,6],[295,6],[402,6]]},"3154":{"position":[[181,6],[226,6],[388,6],[471,6],[542,6]]},"3156":{"position":[[269,6],[403,6],[454,6]]},"3158":{"position":[[221,6],[258,6],[368,6]]},"3162":{"position":[[36,6],[138,6],[231,6]]},"3166":{"position":[[0,6],[23,6],[195,6]]},"3168":{"position":[[102,6],[145,6],[217,6],[333,6]]},"3189":{"position":[[98,6],[150,6]]},"3215":{"position":[[9,6],[45,6],[681,6]]},"3224":{"position":[[22,6],[92,6]]},"3228":{"position":[[0,6]]},"3234":{"position":[[152,6],[216,6],[245,6],[495,6]]},"3256":{"position":[[174,6]]},"3267":{"position":[[482,6],[559,6],[587,6],[622,6]]},"3287":{"position":[[153,6],[478,6],[1418,6],[1648,6],[1918,6],[2226,6],[2542,6],[2863,6]]},"3360":{"position":[[38,6],[70,6]]},"3371":{"position":[[306,6],[347,6]]},"3373":{"position":[[285,6],[321,6],[423,6],[515,6]]},"3375":{"position":[[169,6]]},"3379":{"position":[[67,6],[125,6],[191,6]]},"3381":{"position":[[66,6],[135,6],[217,6]]},"3383":{"position":[[113,6],[181,6],[260,6]]},"3387":{"position":[[106,6],[152,6],[222,6]]},"3389":{"position":[[212,6],[259,6],[297,6],[350,6],[827,6],[868,6],[1042,6],[1156,6],[1286,6],[1361,6]]},"3391":{"position":[[110,6],[154,6],[192,6],[242,6],[358,6],[551,6],[741,6],[816,6],[912,6]]},"3393":{"position":[[241,6],[290,6],[328,6],[383,6],[461,6],[639,6],[889,6],[1159,6],[1234,6],[1330,6],[1428,6]]},"3397":{"position":[[239,6],[363,6],[534,6],[669,6],[996,6],[1056,6]]},"3399":{"position":[[265,6],[375,6],[703,6]]},"3420":{"position":[[33,6],[121,6],[193,6]]},"3422":{"position":[[21,6],[95,6],[187,6]]},"3430":{"position":[[1131,6],[1175,6],[2263,6],[2307,6]]},"3434":{"position":[[163,6],[286,6],[321,6]]},"3436":{"position":[[28,6],[102,6],[252,6]]},"3446":{"position":[[52,6],[127,6]]},"3452":{"position":[[536,6],[659,6],[694,6]]},"3456":{"position":[[254,6]]},"3458":{"position":[[250,6],[331,6],[366,6],[641,6],[722,6],[757,6]]},"3466":{"position":[[1012,6],[1120,6],[1260,6],[1442,6],[1540,6],[1712,6]]},"3481":{"position":[[28,6]]},"3483":{"position":[[92,6],[662,6],[752,6],[810,6]]},"3535":{"position":[[0,6]]},"3537":{"position":[[0,6]]},"3539":{"position":[[119,6]]},"3541":{"position":[[0,6]]},"3543":{"position":[[306,6],[504,6]]},"3545":{"position":[[0,6]]},"3547":{"position":[[74,6]]},"3549":{"position":[[0,6]]},"3551":{"position":[[41,6]]},"3553":{"position":[[41,6]]},"3555":{"position":[[41,6]]},"3557":{"position":[[41,6]]},"3559":{"position":[[41,6]]},"3561":{"position":[[109,6]]},"3563":{"position":[[142,6],[732,6]]},"3565":{"position":[[14,6]]},"3567":{"position":[[61,6]]},"3569":{"position":[[30,6]]},"3571":{"position":[[75,6]]},"3575":{"position":[[671,6],[772,6],[888,6]]},"3581":{"position":[[27,6],[55,6],[102,6],[461,6],[552,6],[647,6]]},"3583":{"position":[[67,6],[126,6],[207,6],[499,6],[662,6],[754,6],[850,6]]},"3597":{"position":[[246,6]]},"3603":{"position":[[140,6]]},"3630":{"position":[[291,6],[344,6],[472,6]]},"3636":{"position":[[228,6],[346,6],[493,6]]},"3638":{"position":[[172,6],[299,6],[469,6],[652,6]]},"3640":{"position":[[129,6],[185,6],[278,6],[361,6]]},"3644":{"position":[[126,6],[182,6],[229,6],[269,6],[323,6],[370,6],[523,6],[579,6],[626,6],[704,6],[758,6],[805,6],[961,6],[1017,6],[1064,6],[1145,6],[1199,6],[1246,6]]},"3656":{"position":[[98,6],[234,6]]},"3664":{"position":[[212,6]]},"3666":{"position":[[49,6],[197,6]]},"3672":{"position":[[140,6],[226,6],[253,6]]},"3686":{"position":[[810,6],[890,6],[965,6]]},"3688":{"position":[[231,6],[351,6],[415,6],[504,6]]},"3692":{"position":[[140,6],[202,6]]},"3694":{"position":[[173,6]]},"3698":{"position":[[178,6]]},"3700":{"position":[[172,6],[233,6]]},"3702":{"position":[[855,6],[891,6],[2782,6]]},"3708":{"position":[[88,6],[161,6],[234,6],[300,6],[374,6],[447,6],[519,6],[1004,6],[1202,6],[1604,6],[1972,6],[2487,6],[3948,6]]},"3714":{"position":[[142,6]]},"3716":{"position":[[148,6],[210,6],[317,6],[414,6],[533,6],[680,6],[743,6],[894,6],[951,6],[1015,6],[1093,6]]},"3720":{"position":[[36,6]]},"3722":{"position":[[253,6]]},"3732":{"position":[[30,6]]},"3734":{"position":[[110,6],[209,6]]},"3750":{"position":[[39,6],[84,6],[111,6],[141,6]]},"3762":{"position":[[16,6],[85,6],[143,6]]},"3768":{"position":[[191,6],[260,6],[318,6]]},"3770":{"position":[[63,6],[132,6],[190,6],[1296,6],[1365,6],[1423,6],[2747,6],[2816,6],[2874,6],[4612,6],[4681,6],[4739,6]]},"3772":{"position":[[263,6],[358,6],[455,6]]},"3774":{"position":[[348,6],[417,6],[475,6]]},"3783":{"position":[[70,6],[139,6],[197,6]]},"3789":{"position":[[0,6],[28,6]]},"3791":{"position":[[77,6],[194,6],[315,6],[597,6],[766,6],[958,6],[1383,6],[1559,6],[1762,6],[2072,6]]},"3795":{"position":[[60,6],[129,6],[187,6]]},"3806":{"position":[[113,6],[157,6],[1399,6],[1442,6],[1542,6],[2739,6],[2782,6],[2872,6],[2973,6],[3124,6],[3274,6],[3343,6],[3401,6]]},"3808":{"position":[[708,6],[777,6],[835,6],[1764,6],[1818,6],[1929,6],[1998,6],[2056,6],[3341,6]]},"3828":{"position":[[89,6],[183,6],[259,6],[467,6]]},"3832":{"position":[[88,6],[134,6],[395,6],[464,6],[522,6]]},"3834":{"position":[[79,6],[174,6],[271,6]]},"3910":{"position":[[1154,6],[1225,6]]},"3916":{"position":[[3532,6],[3655,6],[3690,6]]},"3918":{"position":[[1534,6],[2450,6],[2597,6]]},"3920":{"position":[[849,6],[896,6]]},"3922":{"position":[[936,6]]},"3924":{"position":[[3054,6],[3095,6],[3284,6],[3353,6],[3435,6]]},"3928":{"position":[[942,6],[1017,6]]},"3932":{"position":[[1977,6],[2233,6]]},"3934":{"position":[[1259,6],[1287,6],[1396,6],[1721,6],[1757,6],[3164,6]]},"3936":{"position":[[1041,6],[1163,6],[1660,6],[1713,6],[1746,6],[1821,6]]},"3938":{"position":[[1088,6],[1150,6],[1337,6]]},"3940":{"position":[[1119,6],[1239,6],[1303,6],[1392,6]]},"3956":{"position":[[649,6],[843,6],[1148,6],[1440,6],[1835,6]]}}}],["publickey",{"_index":5257,"t":{"1687":{"position":[[18,9],[171,9]]},"1689":{"position":[[630,9],[766,9]]}}}],["publickeytoken",{"_index":8208,"t":{"3452":{"position":[[2704,14]]},"3916":{"position":[[5700,14]]},"3920":{"position":[[1013,14]]}}}],["publish",{"_index":3570,"t":{"773":{"position":[[801,9]]},"1379":{"position":[[388,7],[450,7]]},"1488":{"position":[[670,7],[727,7],[802,7],[1594,7]]},"1491":{"position":[[0,7]]},"1493":{"position":[[8,7]]},"1495":{"position":[[614,7],[671,7],[746,7],[1021,7],[1073,7],[1129,7]]},"1497":{"position":[[47,7],[107,7],[148,7]]},"1499":{"position":[[0,7],[178,7],[204,7],[278,7]]},"2836":{"position":[[678,7],[769,7]]},"2897":{"position":[[759,7]]}}}],["publishasync",{"_index":5510,"t":{"1795":{"position":[[2262,12],[2411,12],[2477,12]]},"1797":{"position":[[793,12]]},"1805":{"position":[[319,12]]},"1817":{"position":[[126,12]]},"2160":{"position":[[20,12]]},"3936":{"position":[[114,12],[1365,12],[1453,12],[1510,12]]}}}],["publishdelayasync",{"_index":9532,"t":{"3936":{"position":[[129,17]]}}}],["publishedon",{"_index":3568,"t":{"773":{"position":[[401,11],[607,11],[710,11],[820,11],[903,11]]}}}],["publishreadytoruncomposit",{"_index":7358,"t":{"3071":{"position":[[95,26],[128,26]]}}}],["pubtim",{"_index":3519,"t":{"763":{"position":[[202,7]]}}}],["pull",{"_index":4180,"t":{"1379":{"position":[[347,4]]},"2597":{"position":[[118,5]]},"3934":{"position":[[1179,4]]}}}],["punjab",{"_index":6626,"t":{"2559":{"position":[[1887,6],[1902,6]]}}}],["pure",{"_index":528,"t":{"91":{"position":[[38,4],[505,4]]},"538":{"position":[[56,4]]},"2597":{"position":[[56,4]]},"2774":{"position":[[123,4]]},"3207":{"position":[[215,4]]},"3248":{"position":[[56,4]]},"3369":{"position":[[25,4],[41,4]]},"3403":{"position":[[71,4],[87,4]]},"3964":{"position":[[81,4]]}}}],["purpos",{"_index":8533,"t":{"3702":{"position":[[1567,7],[2679,7]]}}}],["push",{"_index":4167,"t":{"1377":{"position":[[701,4],[737,4]]}}}],["put",{"_index":4350,"t":{"1468":{"position":[[12,3]]},"1576":{"position":[[219,3]]},"1594":{"position":[[88,3]]},"1596":{"position":[[128,3]]},"1603":{"position":[[270,3],[287,3]]},"1615":{"position":[[187,3],[292,3]]},"1631":{"position":[[207,3],[562,3],[688,3]]},"1661":{"position":[[1093,3],[1102,3],[1122,3],[1344,3]]},"3023":{"position":[[1090,3],[1099,3],[1119,3],[1341,3]]},"3483":{"position":[[270,3],[298,3],[1055,3]]},"3486":{"position":[[159,3],[211,3]]},"3535":{"position":[[236,3],[244,3],[272,3]]},"3575":{"position":[[463,3]]},"3620":{"position":[[363,3]]},"3622":{"position":[[17,3]]}}}],["putasync",{"_index":8265,"t":{"3483":{"position":[[1060,8]]},"3486":{"position":[[216,8]]}}}],["putxxxasync",{"_index":8258,"t":{"3483":{"position":[[318,11]]},"3535":{"position":[[305,11]]}}}],["pwd",{"_index":3335,"t":{"685":{"position":[[305,3]]},"1488":{"position":[[59,3]]},"1495":{"position":[[59,3]]}}}],["py",{"_index":6663,"t":{"2559":{"position":[[2318,2]]}}}],["q",{"_index":3547,"t":{"769":{"position":[[510,1],[569,1]]}}}],["q1w2e3",{"_index":3210,"t":{"615":{"position":[[721,6]]},"1801":{"position":[[3296,6]]}}}],["q1w2e3r4t5",{"_index":3213,"t":{"615":{"position":[[978,10]]}}}],["qa",{"_index":6454,"t":{"2559":{"position":[[223,2]]}}}],["qixin",{"_index":6916,"t":{"2768":{"position":[[206,5]]}}}],["qp",{"_index":7406,"t":{"3100":{"position":[[36,3],[77,3]]}}}],["qq",{"_index":497,"t":{"85":{"position":[[189,2]]},"114":{"position":[[1355,2]]},"121":{"position":[[679,2]]},"401":{"position":[[363,2]]},"696":{"position":[[2754,2],[3031,2],[3050,2]]},"851":{"position":[[972,2],[1007,2]]},"860":{"position":[[253,2],[273,2]]},"862":{"position":[[301,2],[321,2]]},"1511":{"position":[[526,2],[546,2],[630,2],[704,2],[1060,2],[1128,2],[1151,2],[1307,2],[1334,2],[1773,2],[1797,2]]},"1691":{"position":[[54,2]]},"3136":{"position":[[283,2]]},"3138":{"position":[[34,2]]},"3140":{"position":[[76,2]]},"3446":{"position":[[1830,2]]},"3452":{"position":[[2903,2]]},"3522":{"position":[[982,2]]},"3916":{"position":[[5899,2]]},"3928":{"position":[[2392,2]]},"3986":{"position":[[1227,2]]}}}],["qq82683656",{"_index":4679,"t":{"1511":{"position":[[1252,10]]}}}],["qqe2",{"_index":2719,"t":{"486":{"position":[[63,4]]},"2422":{"position":[[13,4]]}}}],["qqxiuzi",{"_index":4967,"t":{"1539":{"position":[[235,7]]}}}],["quantiti",{"_index":3544,"t":{"769":{"position":[[208,8],[221,8],[493,8]]}}}],["quarter",{"_index":7698,"t":{"3234":{"position":[[72,7]]}}}],["queer",{"_index":1491,"t":{"199":{"position":[[477,5]]}}}],["queri",{"_index":2891,"t":{"550":{"position":[[29,5],[160,5],[254,5],[514,5]]},"556":{"position":[[126,5]]},"834":{"position":[[21,5],[86,5]]},"860":{"position":[[4,5]]},"862":{"position":[[4,5]]},"866":{"position":[[11,5],[99,5],[293,5]]},"868":{"position":[[4,5]]},"871":{"position":[[11,5],[76,5]]},"873":{"position":[[11,5],[86,5]]},"875":{"position":[[11,5]]},"881":{"position":[[11,5]]},"977":{"position":[[93,5]]},"1566":{"position":[[701,5],[908,5]]},"1576":{"position":[[277,5]]},"1594":{"position":[[75,5]]},"1596":{"position":[[99,5]]},"1609":{"position":[[297,5]]},"1631":{"position":[[178,5]]},"1661":{"position":[[1074,5]]},"2577":{"position":[[80,5]]},"2579":{"position":[[353,5]]},"2836":{"position":[[979,5]]},"2843":{"position":[[127,5]]},"2850":{"position":[[33,5]]},"3023":{"position":[[1071,5]]},"3620":{"position":[[184,5]]},"3984":{"position":[[269,5]]}}}],["query5",{"_index":7623,"t":{"3218":{"position":[[17,6]]}}}],["queryabl",{"_index":7624,"t":{"3218":{"position":[[29,9]]},"3220":{"position":[[70,9]]},"3222":{"position":[[201,9]]},"3226":{"position":[[586,9],[627,9]]},"3230":{"position":[[80,9],[221,9]]},"3234":{"position":[[553,9]]},"3258":{"position":[[75,9],[149,9]]},"3261":{"position":[[23,9],[76,9],[141,9],[219,9],[305,9],[359,9],[418,9],[488,9]]},"3263":{"position":[[14,9]]},"3265":{"position":[[70,9]]}}}],["queryablefunct",{"_index":3606,"t":{"818":{"position":[[98,17]]},"822":{"position":[[176,17]]},"913":{"position":[[38,17]]},"949":{"position":[[790,17]]},"1037":{"position":[[745,17]]}}}],["queryasync",{"_index":2893,"t":{"550":{"position":[[95,10]]}}}],["queryfilt",{"_index":7691,"t":{"3230":{"position":[[3,11]]}}}],["queryfunct",{"_index":3611,"t":{"822":{"position":[[8,14],[147,14]]},"824":{"position":[[36,14]]},"913":{"position":[[20,14]]}}}],["querymultipl",{"_index":2921,"t":{"558":{"position":[[195,13]]}}}],["queryorderdetail",{"_index":8436,"t":{"3620":{"position":[[239,16]]}}}],["queryparamet",{"_index":5155,"t":{"1627":{"position":[[72,15],[98,15],[339,15]]},"3992":{"position":[[865,15]]}}}],["querystr",{"_index":8331,"t":{"3541":{"position":[[340,11],[361,11],[462,11],[483,11],[670,11],[691,11],[717,11]]}}}],["question",{"_index":6259,"t":{"2383":{"position":[[176,9]]}}}],["queuedeclar",{"_index":5562,"t":{"1801":{"position":[[1445,12]]}}}],["quick",{"_index":6898,"t":{"2764":{"position":[[161,5]]},"3082":{"position":[[374,5]]}}}],["r",{"_index":506,"t":{"85":{"position":[[225,1]]},"2836":{"position":[[789,1]]},"3254":{"position":[[1531,1]]},"3275":{"position":[[303,1]]},"3452":{"position":[[3349,1],[3403,1],[3606,1],[3750,1]]},"3916":{"position":[[6345,1],[6399,1],[6602,1],[6746,1]]}}}],["r1",{"_index":1909,"t":{"272":{"position":[[95,2]]}}}],["r2",{"_index":1910,"t":{"272":{"position":[[135,2]]}}}],["r3",{"_index":1912,"t":{"272":{"position":[[172,2]]}}}],["r4",{"_index":1913,"t":{"272":{"position":[[216,2]]}}}],["rabbitmq",{"_index":5530,"t":{"1799":{"position":[[71,8]]},"1801":{"position":[[38,8],[83,8],[119,8],[218,8],[241,8]]},"3920":{"position":[[1930,8]]}}}],["rabbitmqeventsourcestor",{"_index":5542,"t":{"1801":{"position":[[156,25],[452,25],[1013,25],[3384,25]]}}}],["rancher",{"_index":631,"t":{"102":{"position":[[53,7],[258,7]]}}}],["random",{"_index":1339,"t":{"188":{"position":[[417,6]]}}}],["rang",{"_index":3083,"t":{"587":{"position":[[849,5]]},"597":{"position":[[125,5]]},"599":{"position":[[155,5]]},"1635":{"position":[[561,5],[573,5]]},"3106":{"position":[[57,5]]},"3549":{"position":[[124,5]]},"3664":{"position":[[196,5]]}}}],["rangeattribut",{"_index":5918,"t":{"2000":{"position":[[85,14]]}}}],["rar",{"_index":2013,"t":{"306":{"position":[[141,3]]},"331":{"position":[[128,3],[206,3]]}}}],["ratio",{"_index":1385,"t":{"190":{"position":[[555,5]]}}}],["raw",{"_index":6378,"t":{"2501":{"position":[[77,3],[173,3]]},"2503":{"position":[[55,3]]},"2977":{"position":[[130,3]]},"2987":{"position":[[130,3]]},"2997":{"position":[[130,3]]},"3005":{"position":[[130,3]]},"3019":{"position":[[130,3]]},"3027":{"position":[[130,3]]},"3035":{"position":[[130,3]]},"3043":{"position":[[130,3]]},"3051":{"position":[[130,3]]},"3059":{"position":[[130,3]]},"3932":{"position":[[1655,3]]}}}],["ray",{"_index":4755,"t":{"1511":{"position":[[2141,3],[2156,3]]}}}],["razar",{"_index":10456,"t":{"4002":{"position":[[101,5]]}}}],["razor",{"_index":551,"t":{"93":{"position":[[138,5],[470,5]]},"1898":{"position":[[22,5]]},"1901":{"position":[[234,5],[586,5],[605,5],[621,5]]},"1941":{"position":[[698,5],[789,5]]},"1949":{"position":[[0,5],[19,5]]},"3317":{"position":[[164,5]]},"3319":{"position":[[246,5]]},"3727":{"position":[[84,5]]},"3729":{"position":[[20,5]]},"3922":{"position":[[1683,5],[1718,5],[1753,5],[1800,5]]},"3986":{"position":[[802,5]]},"4002":{"position":[[129,5]]}}}],["razorpag",{"_index":552,"t":{"93":{"position":[[144,10],[190,10],[476,10],[531,10]]},"3317":{"position":[[185,10],[249,10]]},"3319":{"position":[[263,10],[332,10]]}}}],["razorwithwebapi",{"_index":553,"t":{"93":{"position":[[174,15],[515,15]]},"3317":{"position":[[215,15]]},"3319":{"position":[[302,15]]},"3996":{"position":[[54,15]]}}}],["rbmqeventsourcestor",{"_index":5583,"t":{"1801":{"position":[[3356,21],[3503,21]]}}}],["rc",{"_index":389,"t":{"44":{"position":[[82,2]]},"48":{"position":[[159,2]]},"53":{"position":[[14,2],[45,2],[131,2]]},"68":{"position":[[82,2]]},"72":{"position":[[159,2]]},"77":{"position":[[14,2],[45,2],[131,2]]},"713":{"position":[[434,2]]},"722":{"position":[[55,2]]}}}],["rc1",{"_index":1465,"t":{"199":{"position":[[85,3]]},"3918":{"position":[[1318,3]]}}}],["rc2",{"_index":9116,"t":{"3914":{"position":[[1225,3]]}}}],["rdbm",{"_index":6144,"t":{"2326":{"position":[[79,5]]}}}],["re",{"_index":331,"t":{"19":{"position":[[961,3],[993,3]]},"319":{"position":[[201,3],[222,3],[428,3],[530,3]]},"321":{"position":[[461,3],[491,3]]},"419":{"position":[[197,3],[211,3]]},"3516":{"position":[[54,3],[67,3]]},"3518":{"position":[[53,3],[74,3]]},"3520":{"position":[[150,3]]},"3522":{"position":[[196,3],[340,3],[533,3],[712,3],[1276,3],[1440,3]]},"3524":{"position":[[48,3]]},"3526":{"position":[[18,3]]},"3528":{"position":[[34,3]]},"3530":{"position":[[36,3]]},"3532":{"position":[[79,3]]},"3557":{"position":[[400,3],[535,3]]},"3559":{"position":[[409,3],[559,3]]},"3595":{"position":[[237,3]]},"3918":{"position":[[2054,3],[2218,3]]},"3920":{"position":[[1474,3],[1588,3]]}}}],["react",{"_index":1117,"t":{"148":{"position":[[138,5],[232,5],[259,5]]},"172":{"position":[[57,5]]},"300":{"position":[[34,5]]},"304":{"position":[[40,5]]},"308":{"position":[[83,5],[303,5]]},"314":{"position":[[6,5]]},"319":{"position":[[6,5]]},"3914":{"position":[[3030,5]]},"3932":{"position":[[1471,5],[1928,5]]},"3940":{"position":[[220,5]]}}}],["read",{"_index":2923,"t":{"558":{"position":[[259,4],[305,4],[349,4]]},"560":{"position":[[378,4]]},"1743":{"position":[[230,4]]},"3702":{"position":[[1847,4]]}}}],["readablerepositori",{"_index":4141,"t":{"1368":{"position":[[327,18],[416,18],[624,18]]}}}],["readallbyt",{"_index":8240,"t":{"3456":{"position":[[327,12]]},"3522":{"position":[[170,12],[1250,12]]},"3563":{"position":[[284,12],[488,12]]},"3916":{"position":[[8481,12]]},"3918":{"position":[[2028,12]]}}}],["readasstringasync",{"_index":9194,"t":{"3916":{"position":[[7379,17],[7636,17],[8031,17],[8327,17],[8795,17]]}}}],["readasync",{"_index":5361,"t":{"1729":{"position":[[155,9]]},"1799":{"position":[[584,9],[659,9]]},"1801":{"position":[[2907,9],[3007,9]]},"1803":{"position":[[4879,9],[4979,9]]}}}],["readbodycontentasync",{"_index":6061,"t":{"2255":{"position":[[571,20],[645,20],[724,20]]},"3912":{"position":[[1232,20],[2378,20]]}}}],["readcommenthandl",{"_index":6243,"t":{"2369":{"position":[[114,19]]}}}],["readcommit",{"_index":7878,"t":{"3291":{"position":[[1482,13]]}}}],["reader",{"_index":2928,"t":{"560":{"position":[[44,6],[138,6],[202,6],[268,6],[337,6],[371,6],[424,6],[518,6],[578,6],[642,6]]},"1801":{"position":[[3000,6]]},"1803":{"position":[[4972,6]]},"2315":{"position":[[68,6],[133,6],[210,6],[243,6]]}}}],["readerexecut",{"_index":3772,"t":{"929":{"position":[[1029,15],[1147,15],[1548,14],[1653,14]]}}}],["readerexecutedasync",{"_index":3775,"t":{"929":{"position":[[1753,19],[1910,19]]}}}],["readerexecutingasync",{"_index":3773,"t":{"929":{"position":[[1268,20],[1438,20]]}}}],["readi",{"_index":8840,"t":{"3798":{"position":[[296,5]]},"3800":{"position":[[97,5]]},"3810":{"position":[[494,5]]}}}],["readinput",{"_index":5021,"t":{"1555":{"position":[[580,9]]}}}],["readjwttoken",{"_index":5239,"t":{"1683":{"position":[[159,12]]},"2144":{"position":[[30,12]]}}}],["readkey",{"_index":7187,"t":{"2903":{"position":[[129,7]]},"3924":{"position":[[2322,7]]}}}],["readm",{"_index":10179,"t":{"3990":{"position":[[785,6]]},"3996":{"position":[[1279,6],[1340,6]]},"4006":{"position":[[736,6]]}}}],["readonli",{"_index":197,"t":{"11":{"position":[[1035,8],[1097,8],[1161,8],[1243,8]]},"188":{"position":[[257,8],[287,8],[337,8]]},"231":{"position":[[245,8]]},"253":{"position":[[106,8]]},"435":{"position":[[877,8]]},"492":{"position":[[101,8],[143,8]]},"530":{"position":[[135,8],[189,8]]},"548":{"position":[[86,8],[244,8]]},"1022":{"position":[[8,8]]},"1039":{"position":[[135,8],[189,8]]},"1064":{"position":[[256,8]]},"1066":{"position":[[858,8]]},"1227":{"position":[[8,8]]},"1368":{"position":[[287,8]]},"1392":{"position":[[278,8]]},"1408":{"position":[[293,8],[743,8]]},"1410":{"position":[[308,8],[758,8]]},"1412":{"position":[[980,8],[2038,8],[2090,8]]},"1414":{"position":[[233,8],[696,8]]},"1724":{"position":[[116,8],[170,8]]},"1795":{"position":[[117,8],[2041,8]]},"1799":{"position":[[232,8]]},"1801":{"position":[[566,8],[653,8],[723,8],[802,8]]},"1803":{"position":[[2656,8],[2741,8],[2810,8],[2908,8]]},"1805":{"position":[[145,8]]},"1807":{"position":[[180,8]]},"1811":{"position":[[172,8]]},"1815":{"position":[[151,8],[201,8]]},"1819":{"position":[[165,8]]},"1823":{"position":[[145,8],[200,8]]},"1909":{"position":[[417,8]]},"2294":{"position":[[1083,8],[1145,8],[1209,8],[1291,8]]},"2331":{"position":[[289,8]]},"2348":{"position":[[279,8],[337,8]]},"2482":{"position":[[75,8]]},"2484":{"position":[[101,8],[143,8]]},"2551":{"position":[[87,8]]},"2579":{"position":[[161,8]]},"2581":{"position":[[197,8],[237,8],[700,8],[740,8]]},"2587":{"position":[[106,8],[146,8]]},"2589":{"position":[[125,8],[165,8]]},"2605":{"position":[[58,8]]},"2713":{"position":[[1048,8],[1090,8],[1132,8]]},"2731":{"position":[[309,8]]},"2790":{"position":[[414,8]]},"2813":{"position":[[341,8]]},"2817":{"position":[[490,8]]},"2825":{"position":[[75,8]]},"2827":{"position":[[147,8],[189,8]]},"2829":{"position":[[165,8],[207,8]]},"2831":{"position":[[124,8],[178,8]]},"2899":{"position":[[395,8]]},"3162":{"position":[[87,8]]},"3256":{"position":[[53,8],[120,8]]},"3287":{"position":[[1526,8]]},"3381":{"position":[[99,8]]},"3383":{"position":[[146,8]]},"3389":{"position":[[1075,8],[1119,8]]},"3391":{"position":[[423,8],[467,8],[512,8]]},"3393":{"position":[[704,8],[748,8],[793,8],[840,8]]},"3397":{"position":[[464,8]]},"3420":{"position":[[81,8]]},"3422":{"position":[[69,8]]},"3436":{"position":[[76,8]]},"3466":{"position":[[1182,8]]},"3483":{"position":[[730,8]]},"3575":{"position":[[724,8]]},"3581":{"position":[[514,8]]},"3583":{"position":[[178,8],[715,8]]},"3734":{"position":[[175,8]]},"3762":{"position":[[52,8]]},"3768":{"position":[[227,8]]},"3770":{"position":[[99,8],[1332,8],[2783,8],[4648,8]]},"3772":{"position":[[312,8]]},"3774":{"position":[[384,8]]},"3783":{"position":[[106,8]]},"3791":{"position":[[113,8],[154,8],[633,8],[674,8],[722,8],[1432,8],[1473,8],[1521,8]]},"3795":{"position":[[96,8]]},"3806":{"position":[[3310,8]]},"3808":{"position":[[744,8],[1965,8]]},"3828":{"position":[[141,8]]},"3832":{"position":[[431,8]]},"3834":{"position":[[128,8]]},"3910":{"position":[[1203,8]]},"3924":{"position":[[3317,8]]}}}],["readopt",{"_index":5025,"t":{"1555":{"position":[[636,11]]}}}],["readrepositori",{"_index":3867,"t":{"988":{"position":[[500,14]]},"1031":{"position":[[27,14]]}}}],["readstream",{"_index":5356,"t":{"1729":{"position":[[29,10],[118,10],[144,10]]}}}],["readytorun",{"_index":7359,"t":{"3071":{"position":[[159,10],[179,10]]}}}],["realmauctiondatum",{"_index":7718,"t":{"3236":{"position":[[55,17],[152,17],[244,17],[488,17]]}}}],["reason",{"_index":1743,"t":{"237":{"position":[[1108,6],[1174,6],[1183,6]]}}}],["receiv",{"_index":5565,"t":{"1801":{"position":[[1587,8]]},"1803":{"position":[[687,8],[1570,8],[3688,8]]},"3601":{"position":[[1191,8]]}}}],["receivemessag",{"_index":7543,"t":{"3154":{"position":[[327,14],[424,14],[637,14]]},"3168":{"position":[[434,14]]}}}],["recivemessag",{"_index":7583,"t":{"3194":{"position":[[328,13],[654,13],[670,13]]}}}],["recursiontest",{"_index":8628,"t":{"3748":{"position":[[59,13],[95,13],[178,13]]}}}],["redi",{"_index":1768,"t":{"239":{"position":[[237,5]]},"241":{"position":[[72,5]]},"249":{"position":[[0,5],[90,5],[116,5]]},"255":{"position":[[126,5]]},"1799":{"position":[[102,5],[361,5],[535,5]]},"3918":{"position":[[3717,5]]},"3982":{"position":[[578,5]]}}}],["redirectedfrom",{"_index":7149,"t":{"2856":{"position":[[2050,14]]}}}],["redirectresult",{"_index":5842,"t":{"1913":{"position":[[1077,14]]}}}],["redirecttoact",{"_index":1732,"t":{"237":{"position":[[540,16],[978,16]]}}}],["redirecttopag",{"_index":1854,"t":{"253":{"position":[[866,14]]}}}],["rediscli",{"_index":5536,"t":{"1799":{"position":[[255,11],[311,11],[327,11],[341,11],[479,11],[647,11],[836,11],[928,11]]}}}],["rediseventsourcestor",{"_index":5533,"t":{"1799":{"position":[[178,22],[275,22],[905,22]]}}}],["redstone5",{"_index":1352,"t":{"190":{"position":[[91,9]]}}}],["ref",{"_index":7582,"t":{"3194":{"position":[[278,3],[313,3]]},"3220":{"position":[[123,3]]},"3265":{"position":[[123,3]]},"3273":{"position":[[85,3]]}}}],["refer",{"_index":8484,"t":{"3650":{"position":[[402,9]]}}}],["referenceassembl",{"_index":9959,"t":{"3978":{"position":[[269,17]]}}}],["referencehandl",{"_index":6237,"t":{"2363":{"position":[[114,16],[133,16]]}}}],["referenceloophandl",{"_index":6239,"t":{"2363":{"position":[[387,21],[411,21]]}}}],["refererurl",{"_index":730,"t":{"112":{"position":[[956,10]]},"1925":{"position":[[805,10]]},"3452":{"position":[[1424,10]]},"3916":{"position":[[4420,10]]}}}],["reflect",{"_index":4312,"t":{"1424":{"position":[[545,10]]},"1426":{"position":[[97,10]]},"3071":{"position":[[241,10]]}}}],["refresh",{"_index":1783,"t":{"243":{"position":[[134,7]]}}}],["refreshasync",{"_index":1784,"t":{"243":{"position":[[142,12]]}}}],["refreshtenantcach",{"_index":7288,"t":{"2973":{"position":[[142,18]]}}}],["refreshtoken",{"_index":1103,"t":{"144":{"position":[[270,12],[534,12],[572,12]]},"148":{"position":[[24,12],[290,12],[402,12]]},"2134":{"position":[[4,12]]}}}],["regex",{"_index":5172,"t":{"1635":{"position":[[586,5],[599,5]]},"2725":{"position":[[906,5],[2348,5]]}}}],["regexhandl",{"_index":5495,"t":{"1795":{"position":[[1157,12]]}}}],["regexopt",{"_index":3203,"t":{"615":{"position":[[589,12]]}}}],["regist",{"_index":6807,"t":{"2690":{"position":[[106,8]]}}}],["registerpostevictioncallback",{"_index":1729,"t":{"237":{"position":[[385,28]]}}}],["registertyp",{"_index":4297,"t":{"1420":{"position":[[242,12],[658,12]]},"3001":{"position":[[219,12]]},"3003":{"position":[[186,12]]}}}],["registervalidatorsfromassembl",{"_index":3241,"t":{"637":{"position":[[58,32]]}}}],["regularexpress",{"_index":3065,"t":{"587":{"position":[[510,17],[598,17],[864,17]]},"615":{"position":[[206,18]]},"2725":{"position":[[400,17],[705,18],[1742,18]]}}}],["rel",{"_index":422,"t":{"51":{"position":[[199,3]]},"62":{"position":[[199,3]]},"75":{"position":[[199,3]]}}}],["relat",{"_index":5452,"t":{"1761":{"position":[[400,10]]},"3234":{"position":[[468,7]]}}}],["releas",{"_index":3093,"t":{"587":{"position":[[1251,7]]},"1379":{"position":[[461,7]]},"1488":{"position":[[864,7]]},"1495":{"position":[[808,7]]},"1551":{"position":[[43,7]]},"2625":{"position":[[571,7]]},"2836":{"position":[[689,7],[780,7]]},"3636":{"position":[[637,7],[719,7],[754,7]]}}}],["releaseyear",{"_index":3099,"t":{"587":{"position":[[1442,11],[1516,11]]}}}],["reload",{"_index":2624,"t":{"463":{"position":[[110,6]]},"2023":{"position":[[196,6]]},"2764":{"position":[[41,6]]},"3082":{"position":[[254,6]]},"3962":{"position":[[47,6]]}}}],["reloadonchang",{"_index":2604,"t":{"455":{"position":[[588,14],[839,14],[1107,14]]}}}],["reloadopt",{"_index":6857,"t":{"2731":{"position":[[492,13],[546,13]]}}}],["remark",{"_index":5521,"t":{"1797":{"position":[[606,7],[626,7]]},"3071":{"position":[[435,7],[487,7],[677,7],[726,7]]},"3399":{"position":[[338,7],[359,7],[660,7],[687,7]]},"3702":{"position":[[86,7],[2749,7]]},"3934":{"position":[[1571,7],[3155,7]]}}}],["remot",{"_index":3085,"t":{"587":{"position":[[964,6]]},"1379":{"position":[[205,6]]},"1497":{"position":[[74,6],[265,6]]}}}],["remotecertificatevalidationcallback",{"_index":8385,"t":{"3589":{"position":[[846,35]]}}}],["remoteipv4",{"_index":726,"t":{"112":{"position":[[815,10]]},"1925":{"position":[[664,10]]},"3452":{"position":[[1313,10]]},"3916":{"position":[[4309,10]]}}}],["remoterequest",{"_index":24,"t":{"3":{"position":[[146,13]]},"3483":{"position":[[605,13],[1287,13]]},"4002":{"position":[[293,13]]},"4006":{"position":[[12,13]]}}}],["remoterequestservic",{"_index":8262,"t":{"3483":{"position":[[675,20],[759,20]]}}}],["remotesign",{"_index":3311,"t":{"675":{"position":[[270,12]]}}}],["remov",{"_index":1788,"t":{"243":{"position":[[184,6]]},"308":{"position":[[550,6]]},"713":{"position":[[683,6]]},"779":{"position":[[163,6]]},"1468":{"position":[[195,6]]},"1497":{"position":[[56,6]]},"1594":{"position":[[106,6]]},"1596":{"position":[[169,6]]},"1631":{"position":[[248,6]]},"1661":{"position":[[1153,6]]},"1703":{"position":[[362,6]]},"1705":{"position":[[221,6],[260,6]]},"1919":{"position":[[596,6]]},"2852":{"position":[[186,6]]},"3023":{"position":[[1150,6]]},"3770":{"position":[[3208,7]]},"3785":{"position":[[613,7]]},"3812":{"position":[[887,7]]},"3819":{"position":[[1705,7]]},"3844":{"position":[[918,7],[1064,7],[1094,7],[1482,7],[1501,7]]},"3846":{"position":[[632,7],[888,6]]},"3854":{"position":[[485,7]]},"3892":{"position":[[149,6]]}}}],["removeal",{"_index":9011,"t":{"3854":{"position":[[18,9],[67,9]]}}}],["removeasync",{"_index":1789,"t":{"243":{"position":[[191,11]]}}}],["removechildentri",{"_index":1740,"t":{"237":{"position":[[880,16]]}}}],["removedynam",{"_index":5667,"t":{"1815":{"position":[[608,13]]}}}],["removejob",{"_index":8999,"t":{"3846":{"position":[[232,9],[472,9]]}}}],["removeproperti",{"_index":8817,"t":{"3783":{"position":[[1676,14],[1698,14]]}}}],["removesubscrib",{"_index":9272,"t":{"3920":{"position":[[1099,16]]}}}],["removetrigg",{"_index":9034,"t":{"3888":{"position":[[209,13]]}}}],["removetriggerbuild",{"_index":8936,"t":{"3819":{"position":[[938,20],[1012,20],[1101,20],[1139,20],[1195,21],[1269,20],[1331,20],[1394,20]]}}}],["removeus",{"_index":5325,"t":{"1703":{"position":[[389,10]]}}}],["render",{"_index":2496,"t":{"419":{"position":[[204,6]]},"3754":{"position":[[66,6],[133,6],[194,6],[287,6]]},"3940":{"position":[[449,6]]}}}],["rep",{"_index":3700,"t":{"885":{"position":[[83,3]]},"988":{"position":[[451,3],[517,3]]},"3126":{"position":[[435,3]]},"3373":{"position":[[548,3],[608,3]]},"3974":{"position":[[820,3]]},"3984":{"position":[[345,3]]}}}],["replac",{"_index":1141,"t":{"152":{"position":[[223,7],[242,7],[497,7],[516,7]]},"310":{"position":[[519,7],[622,7]]},"2684":{"position":[[264,7]]},"2690":{"position":[[282,7]]},"3698":{"position":[[281,7]]}}}],["replaceasync",{"_index":7063,"t":{"2790":{"position":[[1140,12],[1209,12]]},"2796":{"position":[[695,12]]}}}],["replacepublish",{"_index":5641,"t":{"1805":{"position":[[540,16]]},"1821":{"position":[[302,16]]}}}],["replaceservic",{"_index":3739,"t":{"915":{"position":[[240,14]]}}}],["replacestor",{"_index":5538,"t":{"1799":{"position":[[797,13]]},"1801":{"position":[[3461,13]]},"1803":{"position":[[5692,13]]},"1821":{"position":[[342,13]]}}}],["replacestorerorfallback",{"_index":5539,"t":{"1799":{"position":[[967,23],[1023,23],[1117,23]]},"3912":{"position":[[983,23]]}}}],["repositori",{"_index":2829,"t":{"528":{"position":[[204,10],[254,10],[335,10],[360,10],[433,10],[501,10],[556,10]]},"530":{"position":[[628,10]]},"585":{"position":[[314,10]]},"645":{"position":[[73,10],[127,10],[165,10],[251,10],[327,10]]},"647":{"position":[[41,10],[157,10]]},"649":{"position":[[25,10],[64,10],[122,10],[194,10],[244,10],[313,10]]},"651":{"position":[[25,10],[67,10],[128,10],[203,10],[256,10],[328,10]]},"653":{"position":[[93,10]]},"661":{"position":[[25,10],[119,10]]},"663":{"position":[[25,10],[125,10]]},"665":{"position":[[25,10],[93,10],[155,10],[232,10],[555,10],[634,10],[707,10],[795,10]]},"667":{"position":[[25,10],[96,10],[161,10],[241,10],[579,10],[661,10],[737,10],[828,10]]},"669":{"position":[[25,10],[93,10],[155,10],[232,10],[555,10],[634,10],[707,10],[795,10]]},"671":{"position":[[25,10],[96,10],[161,10],[241,10],[579,10],[661,10],[737,10],[828,10]]},"763":{"position":[[14,10],[318,10]]},"767":{"position":[[8,10],[53,10],[111,10],[156,10],[214,10],[259,10],[320,10],[373,10],[445,10],[506,10],[584,10],[627,10],[693,10],[732,10]]},"769":{"position":[[12,10],[71,10],[141,10],[240,10],[336,10],[514,10]]},"773":{"position":[[219,10],[267,10],[351,10],[463,10],[573,10],[852,10]]},"779":{"position":[[25,10],[79,10],[143,10],[208,10]]},"781":{"position":[[25,10],[109,10]]},"783":{"position":[[25,10],[101,10]]},"785":{"position":[[25,10],[107,10]]},"787":{"position":[[25,10],[113,10]]},"789":{"position":[[25,10],[119,10]]},"795":{"position":[[25,10],[63,10],[104,10],[137,10],[201,10],[282,10],[331,10],[383,10],[427,10],[513,10]]},"810":{"position":[[267,10]]},"812":{"position":[[283,10]]},"814":{"position":[[265,10]]},"816":{"position":[[281,10]]},"834":{"position":[[30,10]]},"836":{"position":[[67,10]]},"853":{"position":[[20,10],[75,10],[152,10],[257,10],[405,10],[492,10]]},"855":{"position":[[20,10]]},"857":{"position":[[20,10]]},"866":{"position":[[19,10],[123,10],[311,10]]},"868":{"position":[[12,10]]},"871":{"position":[[19,10],[83,10]]},"873":{"position":[[19,10],[93,10]]},"875":{"position":[[19,10]]},"877":{"position":[[2261,10]]},"881":{"position":[[19,10],[187,10],[291,10]]},"889":{"position":[[689,10]]},"907":{"position":[[46,10],[144,10],[244,10]]},"954":{"position":[[38,10],[78,10],[127,10],[200,10],[251,10],[311,10],[367,10]]},"956":{"position":[[38,10],[102,10],[175,10],[238,10],[310,10],[372,10],[443,10],[516,10],[588,10],[669,10],[741,10],[845,10],[920,10],[1004,10],[1078,10],[1161,10],[1234,10],[1316,10],[1400,10],[1483,10],[1575,10],[1658,10]]},"958":{"position":[[39,10],[81,10],[131,10],[178,10],[232,10]]},"960":{"position":[[21,10],[76,10],[204,10],[426,10],[537,10],[770,10],[883,10],[1101,10],[1224,10],[1533,10],[1644,10],[1717,10]]},"962":{"position":[[39,10],[108,10],[206,10],[286,10]]},"965":{"position":[[40,10],[80,10],[134,10],[183,10],[254,10],[340,10],[391,10],[456,10],[516,10],[598,10]]},"967":{"position":[[37,10],[76,10],[129,10],[191,10],[256,10],[341,10],[391,10],[455,10],[528,10],[604,10]]},"969":{"position":[[38,10],[75,10],[122,10],[168,10],[241,10],[335,10],[383,10],[441,10],[498,10],[582,10]]},"971":{"position":[[38,10],[75,10],[122,10],[168,10],[241,10],[335,10],[383,10],[441,10],[498,10],[582,10]]},"973":{"position":[[35,10],[90,10],[150,10],[237,10],[303,10],[374,10]]},"975":{"position":[[35,10],[94,10],[158,10],[249,10],[319,10],[394,10]]},"977":{"position":[[101,10]]},"979":{"position":[[7,10]]},"1024":{"position":[[77,10],[127,10]]},"1026":{"position":[[13,10],[58,10]]},"1033":{"position":[[20,10]]},"1037":{"position":[[55,10],[153,10],[253,10]]},"1107":{"position":[[192,10]]},"1111":{"position":[[289,10]]},"1113":{"position":[[285,10]]},"1115":{"position":[[285,10]]},"1117":{"position":[[2818,10],[2912,10],[3016,10],[3130,10],[3254,10],[3388,10],[3532,10],[3686,10]]},"1119":{"position":[[266,10]]},"1121":{"position":[[282,10]]},"1123":{"position":[[231,10]]},"1129":{"position":[[420,10],[1332,10]]},"1196":{"position":[[53,10]]},"1208":{"position":[[6,10]]},"1295":{"position":[[20,10]]},"1297":{"position":[[12,10]]},"1325":{"position":[[25,10],[79,10],[144,10],[209,10]]},"1327":{"position":[[25,10],[109,10]]},"1329":{"position":[[25,10],[87,10],[171,10],[501,10],[574,10],[669,10]]},"1331":{"position":[[25,10],[90,10],[177,10],[516,10],[592,10],[690,10]]},"1333":{"position":[[25,10],[87,10],[171,10],[501,10],[574,10],[669,10]]},"1335":{"position":[[25,10],[90,10],[177,10],[519,10],[595,10],[693,10]]},"1337":{"position":[[25,10],[87,10]]},"1339":{"position":[[25,10],[90,10]]},"1341":{"position":[[25,10],[93,10],[183,10],[311,10],[390,10],[491,10]]},"1343":{"position":[[25,10],[96,10],[189,10],[320,10],[402,10],[506,10]]},"1345":{"position":[[25,10],[93,10],[183,10],[311,10],[390,10],[491,10]]},"1347":{"position":[[25,10],[96,10],[189,10],[320,10],[402,10],[506,10]]},"1349":{"position":[[25,10],[64,10],[122,10],[194,10],[244,10],[313,10]]},"1351":{"position":[[25,10],[67,10],[128,10],[203,10],[256,10],[328,10]]},"1353":{"position":[[93,10]]},"1366":{"position":[[44,10]]},"1368":{"position":[[390,10],[437,10]]},"1392":{"position":[[300,10],[345,10],[360,10],[373,10]]},"1394":{"position":[[240,10]]},"1396":{"position":[[180,10],[209,10]]},"1711":{"position":[[430,10]]},"2103":{"position":[[4,10]]},"2123":{"position":[[4,10]]},"2589":{"position":[[530,10]]},"2684":{"position":[[49,10]]},"2688":{"position":[[13,10]]},"2973":{"position":[[123,10]]},"3126":{"position":[[110,10],[166,10],[450,10]]},"3224":{"position":[[35,10],[99,10],[1747,10]]},"3256":{"position":[[82,10],[237,10],[275,10]]},"3289":{"position":[[86,10]]},"3702":{"position":[[1583,10]]},"3791":{"position":[[1114,10],[1861,10]]},"3964":{"position":[[321,10]]},"3966":{"position":[[992,10]]},"3972":{"position":[[194,10]]}}}],["repository2",{"_index":3666,"t":{"866":{"position":[[165,11],[346,11]]},"868":{"position":[[59,11]]}}}],["repository3",{"_index":3670,"t":{"866":{"position":[[403,11]]}}}],["repositorytyp",{"_index":5001,"t":{"1551":{"position":[[782,14],[804,14]]}}}],["repositoryurl",{"_index":5000,"t":{"1551":{"position":[[714,13],[766,13]]}}}],["req",{"_index":4059,"t":{"1212":{"position":[[179,3]]},"3510":{"position":[[54,3],[67,3],[105,3]]},"3514":{"position":[[54,3],[67,3]]},"3551":{"position":[[396,3],[413,3],[620,3]]},"3555":{"position":[[393,3],[523,3]]},"3920":{"position":[[1361,3]]}}}],["request",{"_index":724,"t":{"112":{"position":[[785,7]]},"319":{"position":[[314,7],[565,7]]},"1629":{"position":[[91,7],[147,7]]},"1747":{"position":[[89,7],[121,7]]},"1925":{"position":[[634,7]]},"2239":{"position":[[51,7],[77,7]]},"2255":{"position":[[716,7]]},"2577":{"position":[[72,7]]},"2579":{"position":[[345,7]]},"2846":{"position":[[56,7]]},"2850":{"position":[[25,7]]},"3551":{"position":[[204,7],[322,7],[546,7]]},"3555":{"position":[[204,7],[322,7],[452,7]]},"3601":{"position":[[914,7],[1059,7],[1363,7],[1514,7]]},"3914":{"position":[[1073,7]]},"3920":{"position":[[1291,7]]},"3934":{"position":[[1184,7]]},"3954":{"position":[[469,7],[488,7]]},"3992":{"position":[[201,7]]}}}],["requestauditfilt",{"_index":706,"t":{"112":{"position":[[106,18],[336,18],[1596,18],[1641,18]]}}}],["requestculturemiddlewar",{"_index":6718,"t":{"2579":{"position":[[126,24],[200,24],[809,24]]},"2581":{"position":[[162,24],[254,24],[296,24],[352,24],[665,24],[757,24],[799,24],[855,24],[1290,24]]},"2587":{"position":[[71,24],[163,24],[205,24],[261,24]]},"2589":{"position":[[90,24],[182,24],[236,24],[292,24]]}}}],["requestculturemiddlewareextens",{"_index":6721,"t":{"2579":{"position":[[655,34]]},"2581":{"position":[[1114,34]]}}}],["requestdeleg",{"_index":6719,"t":{"2579":{"position":[[170,15],[225,15]]},"2581":{"position":[[24,15],[206,15],[321,15],[709,15],[824,15]]},"2587":{"position":[[115,15],[230,15]]},"2589":{"position":[[134,15],[261,15]]}}}],["requestedtim",{"_index":747,"t":{"112":{"position":[[1216,13]]},"1925":{"position":[[1078,13]]}}}],["requestfilt",{"_index":5418,"t":{"1755":{"position":[[166,16],[241,16],[414,16],[489,16]]}}}],["requestheaderauthor",{"_index":8194,"t":{"3452":{"position":[[1680,26]]},"3916":{"position":[[4676,26]]}}}],["requestheaderstimeout",{"_index":5211,"t":{"1667":{"position":[[329,21],[552,21]]}}}],["requestlimit",{"_index":5419,"t":{"1755":{"position":[[185,13],[433,13]]}}}],["requestpath",{"_index":5374,"t":{"1735":{"position":[[211,11]]}}}],["requestservic",{"_index":4060,"t":{"1214":{"position":[[78,15]]},"2585":{"position":[[43,15]]},"2587":{"position":[[540,15]]},"2589":{"position":[[495,15]]},"3164":{"position":[[25,15]]},"3170":{"position":[[115,15],[206,15]]}}}],["requestsizelimit",{"_index":5406,"t":{"1749":{"position":[[5,16],[44,16]]}}}],["requesturl",{"_index":728,"t":{"112":{"position":[[888,10]]},"1925":{"position":[[737,10]]},"3452":{"position":[[1359,10]]},"3916":{"position":[[4355,10]]},"3960":{"position":[[529,10]]}}}],["requir",{"_index":1088,"t":{"135":{"position":[[495,11],[557,11]]},"587":{"position":[[213,8],[293,8],[425,8],[491,8],[579,8],[899,8],[1729,8]]},"597":{"position":[[205,8]]},"599":{"position":[[235,8]]},"608":{"position":[[462,8]]},"2004":{"position":[[197,8]]},"2534":{"position":[[1,8]]},"2725":{"position":[[321,8],[390,8],[508,8],[1325,8],[1394,8],[1441,8],[1942,8],[2011,8],[2058,8]]},"2727":{"position":[[362,8],[431,8],[478,8]]},"3055":{"position":[[83,8]]},"3057":{"position":[[56,8]]},"3291":{"position":[[1415,8]]},"3508":{"position":[[171,8]]},"3549":{"position":[[145,8],[261,8]]},"3650":{"position":[[373,11]]},"3664":{"position":[[186,8]]},"3914":{"position":[[3208,8]]},"3930":{"position":[[1230,8]]},"3978":{"position":[[670,8]]},"3982":{"position":[[828,8]]},"3996":{"position":[[1173,8]]}}}],["requiredattribur",{"_index":5917,"t":{"2000":{"position":[[58,17]]}}}],["reset",{"_index":6190,"t":{"2333":{"position":[[569,5]]}}}],["resetit",{"_index":4097,"t":{"1277":{"position":[[209,7]]}}}],["resolv",{"_index":3436,"t":{"734":{"position":[[717,7],[7514,7]]}}}],["resolvenam",{"_index":4271,"t":{"1412":{"position":[[2195,12],[2230,12],[2316,12],[2867,12],[2946,12]]}}}],["resourc",{"_index":6395,"t":{"2524":{"position":[[17,9]]},"2542":{"position":[[14,9]]},"2553":{"position":[[62,9]]},"2557":{"position":[[154,9]]},"3031":{"position":[[62,9]]}}}],["resourcecontext",{"_index":5859,"t":{"1919":{"position":[[660,15]]}}}],["resourceexecutingcontext",{"_index":5854,"t":{"1919":{"position":[[218,24]]},"1921":{"position":[[274,24]]}}}],["resourceexecutiondeleg",{"_index":5855,"t":{"1919":{"position":[[252,25]]},"1921":{"position":[[308,25]]}}}],["resourceid",{"_index":5397,"t":{"1745":{"position":[[197,10],[217,10]]}}}],["resourcespath",{"_index":6421,"t":{"2553":{"position":[[30,13]]},"3031":{"position":[[30,13]]}}}],["respons",{"_index":260,"t":{"15":{"position":[[323,8],[432,8]]},"17":{"position":[[317,8],[426,8]]},"144":{"position":[[417,8],[497,8]]},"1739":{"position":[[490,8],[599,8]]},"2567":{"position":[[41,8]]},"2569":{"position":[[54,8]]},"2571":{"position":[[68,8]]},"2846":{"position":[[191,8],[262,8]]},"3397":{"position":[[783,8],[822,8]]},"3483":{"position":[[888,8],[950,8],[1014,8],[1076,8],[1144,8],[1210,8]]},"3486":{"position":[[17,8],[93,8],[170,8],[248,8],[331,8],[411,8],[489,8]]},"3557":{"position":[[204,8],[324,8],[459,8]]},"3575":{"position":[[550,8]]},"3601":{"position":[[1205,8]]},"3603":{"position":[[43,8],[112,8],[263,8],[312,8]]},"3704":{"position":[[935,8]]},"3708":{"position":[[2794,8],[3007,8]]},"3912":{"position":[[2039,8],[2105,8]]},"3920":{"position":[[1400,8]]},"3924":{"position":[[4475,8]]},"3956":{"position":[[2142,8],[2351,8]]}}}],["responsetyp",{"_index":2112,"t":{"319":{"position":[[638,12],[685,12]]}}}],["respositori",{"_index":3889,"t":{"1039":{"position":[[628,11]]},"1434":{"position":[[154,11]]},"2476":{"position":[[173,11]]},"2478":{"position":[[283,11]]},"2831":{"position":[[622,11]]}}}],["rest",{"_index":5061,"t":{"1572":{"position":[[113,7]]},"1578":{"position":[[182,7]]},"1625":{"position":[[26,7]]},"3476":{"position":[[43,7]]},"3626":{"position":[[516,7]]},"3708":{"position":[[933,7],[3193,7]]},"3956":{"position":[[565,7],[2533,7]]}}}],["restart",{"_index":4160,"t":{"1377":{"position":[[442,7]]},"1485":{"position":[[82,7]]},"1488":{"position":[[1455,7]]},"1499":{"position":[[732,7]]},"2751":{"position":[[328,8],[365,7]]},"2764":{"position":[[12,7]]},"3082":{"position":[[225,7]]}}}],["restart_delay",{"_index":6893,"t":{"2751":{"position":[[365,13]]}}}],["restfulresult",{"_index":8205,"t":{"3452":{"position":[[2614,13]]},"3916":{"position":[[5610,13]]},"3956":{"position":[[630,13],[954,13],[1249,13],[1563,13],[2168,13],[2377,13],[2742,13],[2764,13],[2881,13]]}}}],["restfulresultprovid",{"_index":9684,"t":{"3956":{"position":[[662,21]]}}}],["restor",{"_index":4182,"t":{"1379":{"position":[[376,7],[431,7],[482,7]]},"1488":{"position":[[249,7],[304,7],[350,7]]},"1495":{"position":[[249,7],[304,7],[350,7]]},"2653":{"position":[[43,7],[147,7]]}}}],["result",{"_index":752,"t":{"112":{"position":[[1382,6]]},"567":{"position":[[163,6],[268,6]]},"570":{"position":[[706,6]]},"572":{"position":[[473,6],[715,6],[871,6],[1165,6]]},"834":{"position":[[77,6]]},"862":{"position":[[133,7],[151,7]]},"885":{"position":[[74,6]]},"927":{"position":[[383,6],[446,6],[616,6],[731,6],[1305,6],[1368,6],[1540,6],[1608,6]]},"929":{"position":[[384,6],[433,6],[538,6],[586,6],[1125,6],[1183,6],[1369,6],[1479,6],[1631,6],[1688,6],[1841,6],[1950,6],[2134,6],[2196,6],[2352,6],[2412,6],[2588,6],[2700,6],[2842,6],[2901,6],[3044,6],[3155,6],[3337,6],[3395,6],[3578,6],[3688,6],[3837,6],[3894,6],[4044,6],[4153,6]]},"931":{"position":[[331,6],[378,6],[529,6],[628,6],[748,6],[794,6],[915,6],[1013,6]]},"933":{"position":[[163,6],[268,6],[534,6]]},"1129":{"position":[[54,6],[183,6],[281,6],[410,6],[540,6],[638,6],[688,6],[733,6],[740,6],[836,6],[1017,6],[1141,6],[1322,6],[1504,6],[1628,6],[1678,6],[1729,6],[1736,6]]},"1133":{"position":[[146,6]]},"1185":{"position":[[737,6],[835,6],[964,6],[1111,6],[1220,6],[1360,6]]},"1424":{"position":[[1088,6],[1164,6],[1180,6],[1599,6],[1659,6],[1675,6]]},"1892":{"position":[[120,6]]},"1901":{"position":[[533,6],[551,6]]},"1907":{"position":[[256,6]]},"1913":{"position":[[1064,6],[1147,6]]},"1923":{"position":[[64,6]]},"1925":{"position":[[1244,6]]},"1933":{"position":[[684,6],[785,6]]},"1941":{"position":[[651,6],[899,6],[917,6],[1078,6],[1101,6]]},"1955":{"position":[[61,6]]},"1998":{"position":[[4,6]]},"2000":{"position":[[4,6]]},"2002":{"position":[[4,6]]},"2004":{"position":[[4,6]]},"2937":{"position":[[969,6]]},"3269":{"position":[[43,6],[117,6],[247,6]]},"3483":{"position":[[179,6],[245,6],[310,6],[380,6],[451,6],[519,6]]},"3522":{"position":[[946,6]]},"3575":{"position":[[991,6],[1044,6]]},"3581":{"position":[[694,6],[761,6]]},"3583":{"position":[[897,6],[947,6]]},"3595":{"position":[[155,6]]},"3597":{"position":[[77,6],[175,6],[186,6],[233,6],[378,6],[455,6],[466,6],[492,6]]},"3734":{"position":[[290,6],[385,6]]},"3736":{"position":[[4,6]]},"3738":{"position":[[4,6]]},"3740":{"position":[[122,6],[485,6]]},"3744":{"position":[[26,6]]},"3746":{"position":[[4,6]]},"3748":{"position":[[4,6]]},"3750":{"position":[[351,6]]},"3916":{"position":[[7162,6],[7364,6],[7503,6],[7621,6],[7767,6],[8016,6],[8155,6],[8312,6],[8618,6],[8780,6]]}}}],["result2",{"_index":5919,"t":{"2004":{"position":[[80,7]]}}}],["result71",{"_index":7803,"t":{"3269":{"position":[[362,8]]}}}],["resultcach",{"_index":3452,"t":{"734":{"position":[[1223,11],[2077,11],[2931,11],[3926,11],[4780,11],[5634,11]]}}}],["resultcontext",{"_index":5207,"t":{"1665":{"position":[[256,13],[305,13]]},"1941":{"position":[[1033,13],[1087,13]]},"3287":{"position":[[2105,13],[2270,13],[2421,13],[2588,13],[2780,13],[2924,13]]},"3922":{"position":[[1082,13],[1169,13],[1271,13]]}}}],["resultdata",{"_index":3668,"t":{"866":{"position":[[217,10]]}}}],["resultexecutingcontext",{"_index":5866,"t":{"1927":{"position":[[611,22]]},"1941":{"position":[[243,22]]},"1943":{"position":[[176,22]]},"1945":{"position":[[268,22]]},"1953":{"position":[[176,22]]}}}],["resultexecutiondeleg",{"_index":5867,"t":{"1927":{"position":[[643,23]]},"1941":{"position":[[275,23]]},"1943":{"position":[[208,23]]},"1945":{"position":[[300,23]]},"1953":{"position":[[208,23]]}}}],["resultfilt",{"_index":5205,"t":{"1665":{"position":[[57,12]]}}}],["resultfilterattribut",{"_index":5800,"t":{"1903":{"position":[[145,21]]},"1909":{"position":[[105,21]]},"1943":{"position":[[108,21]]},"1953":{"position":[[108,21]]}}}],["resx",{"_index":6411,"t":{"2542":{"position":[[57,4],[75,4],[282,4]]},"2555":{"position":[[104,4],[126,4],[146,4],[161,4]]}}}],["retri",{"_index":5656,"t":{"1809":{"position":[[324,5]]},"1861":{"position":[[24,5],[48,5],[111,5],[172,5]]},"2199":{"position":[[24,5],[39,5],[68,5],[131,5],[192,5]]},"2315":{"position":[[313,5]]},"3770":{"position":[[2546,7],[2560,5],[4357,7],[4372,5]]},"3812":{"position":[[2130,7],[2145,5]]},"3832":{"position":[[274,5],[2231,5],[2439,5],[2484,5],[2692,5],[3992,5],[4200,5],[4245,5],[4453,5]]},"3910":{"position":[[2384,5]]},"3930":{"position":[[653,5],[683,5]]},"3952":{"position":[[573,5]]},"3954":{"position":[[314,5],[332,5]]},"3972":{"position":[[112,5]]}}}],["retry_timeout",{"_index":8751,"t":{"3770":{"position":[[2560,13],[4372,13]]},"3812":{"position":[[2145,13]]}}}],["retryeventhandlerexecutor",{"_index":5653,"t":{"1809":{"position":[[81,25],[121,25],[419,25],[511,25]]}}}],["retrypolici",{"_index":8350,"t":{"3567":{"position":[[31,11],[140,11]]}}}],["retrytimeout",{"_index":5498,"t":{"1795":{"position":[[1403,12]]},"3770":{"position":[[1110,12],[5855,12]]},"3798":{"position":[[577,12]]},"3802":{"position":[[1138,12],[1743,12],[2191,12]]},"3808":{"position":[[3160,12]]},"3812":{"position":[[528,12],[1338,12],[2800,12]]},"3817":{"position":[[1349,12],[2335,12]]},"3821":{"position":[[827,12]]},"3832":{"position":[[2288,12],[2541,12],[4049,12],[4302,12]]},"3896":{"position":[[752,12]]}}}],["return",{"_index":69,"t":{"3":{"position":[[819,6]]},"15":{"position":[[127,6]]},"17":{"position":[[121,6]]},"19":{"position":[[653,6]]},"127":{"position":[[736,6]]},"133":{"position":[[490,7],[500,7],[714,6],[851,7],[861,7],[1068,6],[1081,6]]},"146":{"position":[[447,7],[457,7],[835,7],[845,7],[1025,6]]},"152":{"position":[[144,7],[335,6],[431,7],[609,6]]},"202":{"position":[[363,6]]},"231":{"position":[[440,6],[498,6]]},"233":{"position":[[141,6],[641,6]]},"237":{"position":[[533,6],[628,6],[971,6]]},"253":{"position":[[859,6]]},"288":{"position":[[495,6]]},"310":{"position":[[510,6],[613,6]]},"435":{"position":[[293,6],[704,6]]},"530":{"position":[[736,6]]},"556":{"position":[[192,6]]},"558":{"position":[[118,7],[333,7],[354,6]]},"572":{"position":[[665,6],[1110,6]]},"587":{"position":[[1538,6],[1588,6],[1975,6]]},"597":{"position":[[513,7],[523,7],[557,6],[650,7],[660,7],[708,6]]},"599":{"position":[[534,6]]},"602":{"position":[[229,6]]},"625":{"position":[[365,6]]},"627":{"position":[[206,6]]},"820":{"position":[[37,7],[58,6]]},"828":{"position":[[43,7],[60,6]]},"846":{"position":[[865,6]]},"877":{"position":[[1262,7],[1272,7],[1360,6]]},"927":{"position":[[393,6],[673,6],[1085,6],[1315,6],[1550,6],[1900,6],[2288,6]]},"929":{"position":[[394,6],[548,6],[897,6],[1135,6],[1426,6],[1641,6],[1898,6],[2144,6],[2362,6],[2645,6],[2852,6],[3101,6],[3347,6],[3635,6],[3847,6],[4101,6]]},"931":{"position":[[341,6],[586,6],[758,6],[972,6],[1310,6]]},"1024":{"position":[[167,6]]},"1039":{"position":[[737,6]]},"1064":{"position":[[630,7],[640,7],[778,7],[788,7],[825,6]]},"1066":{"position":[[1175,7],[1185,7],[1322,7],[1332,7],[1369,6],[1477,7],[1487,7],[1524,6],[1585,6]]},"1125":{"position":[[48,6],[325,6],[335,6]]},"1129":{"position":[[665,6],[1655,6]]},"1145":{"position":[[352,6]]},"1147":{"position":[[243,6]]},"1151":{"position":[[321,6]]},"1185":{"position":[[251,6],[261,6]]},"1200":{"position":[[141,6]]},"1368":{"position":[[538,7],[548,7],[672,6]]},"1396":{"position":[[202,6]]},"1408":{"position":[[472,6],[969,6]]},"1410":{"position":[[487,6],[994,6]]},"1412":{"position":[[562,6],[699,6],[1639,6],[2421,6]]},"1414":{"position":[[408,6],[849,6]]},"1418":{"position":[[194,6]]},"1424":{"position":[[364,6],[961,7],[971,7],[1173,6],[1668,6],[1983,6]]},"1572":{"position":[[291,6],[501,6]]},"1584":{"position":[[269,6],[478,6]]},"1603":{"position":[[144,6],[187,6],[233,6],[278,6],[322,6]]},"1605":{"position":[[151,6],[203,6],[249,6]]},"1607":{"position":[[154,6],[217,6],[280,6]]},"1609":{"position":[[227,6],[585,6]]},"1611":{"position":[[398,6],[797,6]]},"1613":{"position":[[194,6]]},"1615":{"position":[[233,6]]},"1617":{"position":[[276,6],[518,6],[795,6],[1061,6]]},"1619":{"position":[[399,6]]},"1621":{"position":[[159,6],[268,6],[379,6],[559,6],[608,6],[659,6],[883,6]]},"1627":{"position":[[156,6]]},"1643":{"position":[[266,6]]},"1645":{"position":[[260,6]]},"1647":{"position":[[327,6]]},"1649":{"position":[[226,6]]},"1651":{"position":[[194,6],[278,6]]},"1653":{"position":[[271,6]]},"1655":{"position":[[314,6]]},"1657":{"position":[[356,6],[441,6]]},"1659":{"position":[[204,6],[254,6],[345,6],[395,6],[601,6],[651,6],[780,6],[830,6],[1039,6],[1089,6],[1221,6],[1271,6]]},"1663":{"position":[[411,6]]},"1667":{"position":[[108,6]]},"1677":{"position":[[125,6]]},"1679":{"position":[[137,6]]},"1681":{"position":[[182,6]]},"1687":{"position":[[253,6]]},"1739":{"position":[[101,6],[314,6]]},"1741":{"position":[[817,6],[1579,6],[2421,6]]},"1745":{"position":[[284,6]]},"1799":{"position":[[633,6],[894,6],[1162,6]]},"1801":{"position":[[2168,7],[2201,7],[2846,7],[2861,7],[3037,6],[3496,6]]},"1803":{"position":[[1317,6],[1800,7],[1810,7],[1897,6],[4130,7],[4163,7],[4818,7],[4833,7],[5009,6],[5727,6]]},"1807":{"position":[[460,6],[737,6]]},"1845":{"position":[[233,6],[542,6]]},"1851":{"position":[[216,7],[230,7],[495,7],[509,7],[743,7],[757,7],[1015,7],[1029,7]]},"1859":{"position":[[235,6]]},"1869":{"position":[[586,6]]},"1873":{"position":[[410,6]]},"1875":{"position":[[613,6]]},"1883":{"position":[[368,6]]},"1887":{"position":[[215,6]]},"1927":{"position":[[244,7],[254,7],[383,6],[548,7],[558,7],[687,6]]},"1933":{"position":[[323,6]]},"1935":{"position":[[217,7],[227,7],[314,6]]},"1943":{"position":[[252,6]]},"1951":{"position":[[226,7],[236,7],[626,7],[636,7],[723,6]]},"1953":{"position":[[252,6]]},"2186":{"position":[[140,6]]},"2188":{"position":[[143,6]]},"2208":{"position":[[179,6]]},"2235":{"position":[[221,6]]},"2269":{"position":[[348,6]]},"2313":{"position":[[330,7],[340,7],[428,6]]},"2345":{"position":[[326,7],[336,7],[581,7],[591,7],[727,7],[737,7]]},"2350":{"position":[[26,6]]},"2352":{"position":[[126,6]]},"2357":{"position":[[726,7],[736,7],[822,6],[1108,7],[1118,7],[1203,6],[1385,7],[1395,7],[1443,6]]},"2379":{"position":[[807,6],[1005,6],[1170,6]]},"2438":{"position":[[54,6],[82,6]]},"2440":{"position":[[54,6],[114,6],[428,6],[487,6]]},"2448":{"position":[[179,6]]},"2486":{"position":[[380,7],[390,7],[1006,6]]},"2579":{"position":[[780,6]]},"2581":{"position":[[1261,6]]},"2713":{"position":[[747,6],[1708,6],[2366,6]]},"2725":{"position":[[965,6],[1014,6],[2407,6],[2456,6]]},"2776":{"position":[[336,6]]},"2790":{"position":[[666,7],[676,7],[742,6],[883,7],[893,7],[954,6],[1095,7],[1105,7],[1168,6]]},"2796":{"position":[[223,7],[233,7],[417,7],[427,7],[650,7],[660,7]]},"2817":{"position":[[661,6],[1033,6]]},"2831":{"position":[[731,6]]},"2848":{"position":[[1494,6]]},"2872":{"position":[[97,6]]},"2887":{"position":[[359,6]]},"2929":{"position":[[378,6]]},"2933":{"position":[[447,6],[747,6]]},"2935":{"position":[[518,6]]},"2937":{"position":[[615,6]]},"2945":{"position":[[378,6]]},"2949":{"position":[[383,6],[642,6]]},"2951":{"position":[[545,6]]},"2959":{"position":[[378,6]]},"2963":{"position":[[416,6],[616,6]]},"2965":{"position":[[82,6],[158,6]]},"3071":{"position":[[501,7],[511,7],[589,6],[740,7],[750,7],[829,6]]},"3154":{"position":[[297,6]]},"3162":{"position":[[365,6]]},"3379":{"position":[[223,6]]},"3397":{"position":[[1078,6]]},"3430":{"position":[[654,6],[916,6],[1322,6],[3391,6]]},"3432":{"position":[[1547,6],[2255,6],[2396,6],[2557,6],[3360,6],[3548,6],[4036,6]]},"3434":{"position":[[1803,6],[2002,6],[2173,6],[2444,6]]},"3446":{"position":[[164,6]]},"3454":{"position":[[304,6]]},"3456":{"position":[[292,6]]},"3458":{"position":[[129,6]]},"3466":{"position":[[926,6],[1521,6],[1696,6]]},"3543":{"position":[[773,6]]},"3547":{"position":[[541,7],[551,7],[708,6]]},"3575":{"position":[[1034,6]]},"3581":{"position":[[751,6]]},"3583":{"position":[[537,6],[937,6]]},"3636":{"position":[[327,7],[337,7],[368,6],[474,7],[484,7],[518,6]]},"3638":{"position":[[280,7],[290,7],[322,6],[405,7],[415,7],[491,6],[598,7],[608,7],[677,6]]},"3640":{"position":[[208,6],[300,6],[386,6]]},"3644":{"position":[[204,6],[254,6],[345,6],[395,6],[601,6],[651,6],[780,6],[830,6],[1039,6],[1089,6],[1221,6],[1271,6]]},"3656":{"position":[[256,6]]},"3680":{"position":[[455,6]]},"3686":{"position":[[914,6],[1267,6],[1288,6]]},"3688":{"position":[[377,6],[444,6],[582,7],[592,7],[662,7],[672,7]]},"3692":{"position":[[166,6]]},"3702":{"position":[[921,6],[2763,7],[2773,7],[2806,6]]},"3708":{"position":[[1183,7],[1193,7],[1291,6],[1585,7],[1595,7],[1683,6],[1953,7],[1963,7],[2073,6],[2468,7],[2478,7],[3368,7],[3378,7],[3538,6]]},"3716":{"position":[[982,6],[1047,6],[1126,6]]},"3720":{"position":[[72,6]]},"3722":{"position":[[282,6]]},"3748":{"position":[[140,6]]},"3750":{"position":[[181,6]]},"3752":{"position":[[224,7],[234,7],[463,7],[473,7],[750,7],[760,7],[1059,7],[1069,7]]},"3806":{"position":[[220,6],[1605,6],[2935,6],[3079,6],[3160,6]]},"3828":{"position":[[438,6],[779,6]]},"3916":{"position":[[9089,6]]},"3928":{"position":[[1054,6]]},"3932":{"position":[[2695,6]]},"3934":{"position":[[1309,6],[1464,6],[1787,6]]},"3938":{"position":[[1114,6]]},"3940":{"position":[[1265,6],[1332,6],[1470,7],[1480,7],[1550,7],[1560,7]]},"3956":{"position":[[824,7],[834,7],[932,6],[1129,7],[1139,7],[1227,6],[1421,7],[1431,7],[1541,6],[1816,7],[1826,7],[2708,7],[2718,7],[2870,6]]}}}],["return200statuscod",{"_index":7301,"t":{"3047":{"position":[[29,20]]},"3049":{"position":[[28,20]]}}}],["returninform",{"_index":8203,"t":{"3452":{"position":[[2564,17]]},"3916":{"position":[[5560,17]]}}}],["returnresult",{"_index":751,"t":{"112":{"position":[[1353,12]]},"1925":{"position":[[1215,12]]}}}],["returnvalu",{"_index":4002,"t":{"1127":{"position":[[351,11],[376,11]]},"1129":{"position":[[695,11],[1685,11]]},"1133":{"position":[[120,11]]},"1185":{"position":[[628,11],[653,11]]}}}],["returnvaluethreshold",{"_index":8169,"t":{"3446":{"position":[[326,20]]},"3448":{"position":[[629,20],[1053,20]]},"3916":{"position":[[2141,20]]},"3920":{"position":[[681,20]]}}}],["rev",{"_index":4443,"t":{"1488":{"position":[[185,3]]},"1495":{"position":[[185,3]]}}}],["reval",{"_index":4008,"t":{"1129":{"position":[[680,5],[1670,5]]}}}],["review",{"_index":3650,"t":{"853":{"position":[[206,6],[354,6],[655,6]]},"3352":{"position":[[601,6],[658,6],[701,6]]}}}],["rf",{"_index":4396,"t":{"1483":{"position":[[195,2],[447,2]]},"1488":{"position":[[755,2],[941,2]]},"1495":{"position":[[699,2],[885,2],[980,2]]},"1499":{"position":[[228,2]]}}}],["richfit",{"_index":6926,"t":{"2768":{"position":[[376,9]]}}}],["rider",{"_index":9455,"t":{"3930":{"position":[[775,5]]}}}],["right",{"_index":3661,"t":{"864":{"position":[[0,5]]}}}],["rm",{"_index":4395,"t":{"1483":{"position":[[191,2],[443,2]]},"1488":{"position":[[751,2],[1166,2],[1240,2]]},"1495":{"position":[[695,2],[976,2]]},"1499":{"position":[[224,2],[319,2],[558,2],[632,2]]}}}],["rmi",{"_index":4474,"t":{"1488":{"position":[[1193,3]]},"1499":{"position":[[585,3]]}}}],["ro",{"_index":4478,"t":{"1488":{"position":[[1525,2]]},"1499":{"position":[[825,2]]},"2559":{"position":[[1915,2],[1924,2],[1927,2]]}}}],["roam",{"_index":6383,"t":{"2512":{"position":[[52,7]]}}}],["rollback",{"_index":7871,"t":{"3291":{"position":[[455,8],[1227,8]]}}}],["rollbacktran",{"_index":7863,"t":{"3287":{"position":[[2664,12]]}}}],["rollbacktransact",{"_index":7862,"t":{"3287":{"position":[[2554,19]]},"3922":{"position":[[1135,19]]}}}],["root",{"_index":2116,"t":{"321":{"position":[[162,4]]},"520":{"position":[[83,4]]},"901":{"position":[[83,4]]},"986":{"position":[[111,4]]},"1315":{"position":[[83,4]]},"1483":{"position":[[121,4],[534,4],[631,4],[702,4],[717,4],[974,4],[1056,4]]},"1485":{"position":[[102,4]]},"3430":{"position":[[435,4],[3123,4],[4426,4]]},"3432":{"position":[[3078,4],[5643,4]]},"3601":{"position":[[724,4]]}}}],["rootcontext",{"_index":2310,"t":{"367":{"position":[[121,11]]}}}],["rootpath",{"_index":5363,"t":{"1731":{"position":[[4,8],[76,8]]}}}],["rootservic",{"_index":4193,"t":{"1383":{"position":[[184,12]]},"2035":{"position":[[71,11],[89,12]]}}}],["rout",{"_index":2056,"t":{"310":{"position":[[855,7]]},"435":{"position":[[184,5],[552,5]]},"1408":{"position":[[643,5]]},"1410":{"position":[[658,5]]},"1412":{"position":[[1939,5]]},"1414":{"position":[[597,5]]},"1572":{"position":[[386,5]]},"1576":{"position":[[125,5]]},"1580":{"position":[[335,5]]},"1617":{"position":[[151,5],[460,5],[646,5],[743,5],[923,5]]},"1619":{"position":[[140,5],[168,5],[203,5],[444,5]]},"1641":{"position":[[552,5]]},"1661":{"position":[[647,5]]},"1663":{"position":[[469,5]]},"2713":{"position":[[532,5],[963,5],[1849,5]]},"3023":{"position":[[644,5]]},"3397":{"position":[[973,5]]},"3912":{"position":[[2163,5]]},"3938":{"position":[[297,5]]},"3996":{"position":[[682,5]]}}}],["routeconstraint",{"_index":5167,"t":{"1635":{"position":[[25,15],[56,15],[118,15],[160,15]]}}}],["routedata",{"_index":5879,"t":{"1941":{"position":[[436,9],[456,9],[488,9],[537,9],[580,9]]},"1951":{"position":[[377,9],[397,9]]}}}],["routekey",{"_index":5551,"t":{"1801":{"position":[[819,8],[923,8],[1073,8],[1363,8],[1374,8],[1458,8],[1991,8],[2624,8]]}}}],["routeprefix",{"_index":7311,"t":{"3063":{"position":[[219,11]]},"3632":{"position":[[182,11]]},"3704":{"position":[[158,11],[261,11],[275,11],[478,11],[574,11]]},"3706":{"position":[[211,11]]},"3924":{"position":[[3692,11],[3795,11],[3809,11],[4012,11],[4114,11]]}}}],["routeseat",{"_index":5126,"t":{"1611":{"position":[[365,9],[433,9]]}}}],["routetempl",{"_index":7324,"t":{"3063":{"position":[[749,13]]},"3670":{"position":[[100,13],[172,13]]},"3704":{"position":[[425,13],[747,13]]},"3706":{"position":[[741,13]]},"3924":{"position":[[3959,13],[4287,13]]}}}],["row",{"_index":3549,"t":{"771":{"position":[[11,4]]}}}],["roweffect",{"_index":4043,"t":{"1170":{"position":[[29,10],[141,10],[323,10],[428,10],[531,10],[654,10],[841,10],[957,10]]},"1183":{"position":[[29,10],[95,10],[200,10],[282,10],[370,10],[447,10],[563,10],[656,10]]},"1248":{"position":[[56,10],[206,10],[310,10]]}}}],["rs256",{"_index":1015,"t":{"127":{"position":[[1521,5]]},"3039":{"position":[[446,5]]}}}],["rs384",{"_index":1017,"t":{"127":{"position":[[1535,5]]},"3039":{"position":[[452,5]]}}}],["rs512",{"_index":1018,"t":{"127":{"position":[[1549,5]]},"3039":{"position":[[458,5]]}}}],["rsa",{"_index":5225,"t":{"1674":{"position":[[64,3]]},"1687":{"position":[[6,3],[87,3],[283,3],[308,3],[342,3]]},"1689":{"position":[[41,3],[617,3],[699,3]]},"3962":{"position":[[352,3]]}}}],["rsaencrypt",{"_index":5259,"t":{"1687":{"position":[[43,13],[142,13],[200,13]]},"1689":{"position":[[655,13]]}}}],["ru",{"_index":6629,"t":{"2559":{"position":[[1942,2],[1948,2],[1951,2],[2533,2]]}}}],["rule",{"_index":3206,"t":{"615":{"position":[[646,4],[706,4]]},"3432":{"position":[[1746,4]]}}}],["rulefor",{"_index":3244,"t":{"639":{"position":[[234,7],[264,7],[300,7],[338,7]]}}}],["run",{"_index":1330,"t":{"188":{"position":[[159,7],[665,3]]},"202":{"position":[[292,3]]},"340":{"position":[[463,3]]},"350":{"position":[[84,3],[216,3]]},"371":{"position":[[652,3],[674,3]]},"401":{"position":[[89,3]]},"455":{"position":[[364,3],[933,3],[951,3],[976,3]]},"461":{"position":[[274,3],[288,3],[1078,3]]},"492":{"position":[[596,7]]},"1377":{"position":[[413,3]]},"1379":{"position":[[184,3],[197,3],[253,3],[293,3],[339,3],[420,3],[439,3],[492,3]]},"1483":{"position":[[142,3],[219,3],[407,3],[439,3],[549,3],[567,3],[613,3]]},"1485":{"position":[[7,3],[217,3],[238,3]]},"1488":{"position":[[452,3],[494,3],[1336,3],[1356,3],[1425,3],[1622,3]]},"1495":{"position":[[452,3],[493,3]]},"1499":{"position":[[702,3]]},"1753":{"position":[[37,3]]},"1977":{"position":[[192,3]]},"1991":{"position":[[227,3]]},"2014":{"position":[[227,3]]},"2175":{"position":[[88,3],[218,3],[269,3],[305,3],[446,3]]},"2226":{"position":[[79,7]]},"2228":{"position":[[97,7]]},"2255":{"position":[[456,3]]},"2269":{"position":[[277,3]]},"2482":{"position":[[496,7]]},"2484":{"position":[[596,7]]},"2567":{"position":[[4,3]]},"2571":{"position":[[31,3]]},"2674":{"position":[[90,3],[142,3],[243,3]]},"2776":{"position":[[265,3],[707,3]]},"2813":{"position":[[593,7],[930,3]]},"2817":{"position":[[872,7]]},"2819":{"position":[[288,3]]},"2821":{"position":[[319,3]]},"2825":{"position":[[496,7]]},"2827":{"position":[[642,7]]},"2829":{"position":[[760,7]]},"2836":{"position":[[378,3],[1591,3]]},"2862":{"position":[[415,3]]},"2868":{"position":[[36,3],[76,3],[138,3]]},"2872":{"position":[[17,3]]},"2875":{"position":[[59,3],[103,3],[122,3],[137,3],[195,3],[264,3]]},"2877":{"position":[[39,3],[216,3]]},"2879":{"position":[[81,3],[123,3],[419,3]]},"2881":{"position":[[12,3],[137,3],[405,3]]},"2883":{"position":[[21,3]]},"2885":{"position":[[6,3]]},"2887":{"position":[[279,3]]},"2889":{"position":[[56,3],[96,3],[133,3]]},"2893":{"position":[[39,3],[62,3],[108,3]]},"2895":{"position":[[15,3]]},"2897":{"position":[[6,3],[341,3],[588,3]]},"2899":{"position":[[30,3],[186,3],[265,3],[468,3]]},"2903":{"position":[[12,3],[65,3],[223,3],[284,3],[352,3]]},"2905":{"position":[[44,3],[394,3],[410,3]]},"3075":{"position":[[194,3]]},"3166":{"position":[[186,3]]},"3371":{"position":[[434,3]]},"3389":{"position":[[941,3]]},"3430":{"position":[[74,7],[1061,3],[1074,3],[2191,3],[2206,3],[2545,7],[3890,7]]},"3432":{"position":[[2761,7],[5107,7]]},"3601":{"position":[[178,7]]},"3702":{"position":[[813,3]]},"3750":{"position":[[369,3]]},"3752":{"position":[[55,3],[79,3]]},"3770":{"position":[[2355,3],[2403,3],[2456,4],[2481,4],[2602,3],[4176,3],[4217,3],[4263,4],[4289,4],[4413,3],[5653,7]]},"3800":{"position":[[108,7]]},"3812":{"position":[[1949,3],[1990,3],[2036,4],[2062,4],[2186,3],[2598,7]]},"3910":{"position":[[531,3],[627,3],[719,3],[896,3],[1032,3],[1254,3],[2574,3]]},"3916":{"position":[[2586,3]]},"3920":{"position":[[788,3]]},"3922":{"position":[[300,3]]},"3924":{"position":[[129,3],[792,3],[822,3],[940,3],[1023,3],[1441,3],[2035,3],[2122,3],[2198,3],[2366,3],[2427,3],[2495,3],[3182,3]]},"3930":{"position":[[979,3]]},"3932":{"position":[[2727,3]]},"3934":{"position":[[13,3],[478,3],[766,3],[1069,3],[1229,3],[1680,3]]},"3980":{"position":[[818,3]]}}}],["run_on_start",{"_index":8753,"t":{"3770":{"position":[[2602,12],[4413,12]]},"3812":{"position":[[2186,12]]}}}],["runallmanagedmodulesforallrequest",{"_index":4354,"t":{"1468":{"position":[[151,34]]}}}],["runcompil",{"_index":8618,"t":{"3734":{"position":[[311,10],[414,10]]},"3736":{"position":[[25,10]]},"3738":{"position":[[25,10]]},"3752":{"position":[[21,10]]}}}],["runcompileasync",{"_index":8619,"t":{"3736":{"position":[[105,15]]},"3738":{"position":[[223,15]]}}}],["runcompilefromcach",{"_index":8622,"t":{"3740":{"position":[[39,20],[143,20],[349,20],[506,20]]},"3744":{"position":[[47,20]]},"3746":{"position":[[25,20]]},"3748":{"position":[[25,20]]}}}],["rungener",{"_index":6023,"t":{"2175":{"position":[[232,10],[426,10]]},"2877":{"position":[[120,10],[285,10]]},"3910":{"position":[[584,10],[800,10],[965,10]]}}}],["runonstart",{"_index":8731,"t":{"3770":{"position":[[1150,10],[5893,10]]},"3798":{"position":[[637,10]]},"3802":{"position":[[1182,10],[1783,10],[2213,10]]},"3808":{"position":[[3229,10]]},"3812":{"position":[[568,10],[1366,10],[2838,10]]},"3817":{"position":[[1393,10],[2375,10]]},"3821":{"position":[[867,10]]},"3896":{"position":[[792,10]]}}}],["runopt",{"_index":2224,"t":{"340":{"position":[[467,10]]},"350":{"position":[[28,10],[88,10],[220,10]]},"371":{"position":[[678,10]]},"455":{"position":[[980,10]]},"461":{"position":[[292,10]]},"2674":{"position":[[146,10],[247,10]]},"2868":{"position":[[142,10]]},"2875":{"position":[[268,10]]},"2879":{"position":[[3,10],[85,10],[127,10],[423,10]]},"2881":{"position":[[98,10],[141,10],[409,10]]},"2883":{"position":[[25,10]]},"2889":{"position":[[100,10]]},"2893":{"position":[[66,10],[112,10]]},"2897":{"position":[[14,10],[78,10]]},"2903":{"position":[[146,10],[203,10],[227,10]]},"3430":{"position":[[1078,10],[2210,10]]},"3920":{"position":[[792,10]]},"3924":{"position":[[944,10],[1027,10],[2346,10],[2370,10]]}}}],["runtim",{"_index":1381,"t":{"190":{"position":[[527,7]]},"449":{"position":[[126,7]]},"2985":{"position":[[173,7]]}}}],["runtimeinform",{"_index":5944,"t":{"2057":{"position":[[31,18],[106,18],[197,18]]}}}],["rust",{"_index":1223,"t":{"172":{"position":[[50,4]]}}}],["rustln",{"_index":1165,"t":{"158":{"position":[[13,6]]}}}],["rwing",{"_index":6913,"t":{"2768":{"position":[[98,5],[123,5],[153,5],[188,5]]}}}],["rxj",{"_index":2097,"t":{"316":{"position":[[421,4]]}}}],["ryujit",{"_index":1364,"t":{"190":{"position":[[233,6],[288,6],[379,6]]}}}],["s",{"_index":3423,"t":{"726":{"position":[[33,1],[84,1]]},"763":{"position":[[114,1]]},"771":{"position":[[72,1],[79,1],[87,1],[103,1],[110,1],[118,1],[132,1],[139,1],[147,1],[231,1],[238,1],[246,1]]},"773":{"position":[[503,1],[508,1],[652,1],[657,1],[949,1],[954,1]]},"1689":{"position":[[103,1],[162,1],[186,1],[268,1],[345,1],[428,1],[539,1],[604,1],[741,1],[792,1]]},"2653":{"position":[[105,1],[209,1]]},"3228":{"position":[[220,1],[249,1]]},"3806":{"position":[[3184,1]]},"3922":{"position":[[442,1],[565,1],[643,1]]}}}],["sa",{"_index":1621,"t":{"220":{"position":[[413,2]]},"520":{"position":[[202,2]]},"688":{"position":[[414,2]]},"901":{"position":[[202,2]]},"1054":{"position":[[444,2]]},"1056":{"position":[[733,2]]},"1315":{"position":[[202,2]]},"2559":{"position":[[239,2],[1961,2],[1967,2]]}}}],["saa",{"_index":7190,"t":{"2910":{"position":[[0,4],[437,4]]},"2912":{"position":[[17,4]]},"2967":{"position":[[41,4]]},"3962":{"position":[[1874,4]]},"3986":{"position":[[1510,4]]},"4006":{"position":[[387,4]]}}}],["safari",{"_index":792,"t":{"114":{"position":[[518,6]]},"3446":{"position":[[993,6]]},"3452":{"position":[[1645,6]]},"3916":{"position":[[4641,6]]},"3928":{"position":[[1555,6]]}}}],["sakuraneko",{"_index":6974,"t":{"2768":{"position":[[1115,10]]}}}],["sameoriginpolici",{"_index":2431,"t":{"404":{"position":[[81,16]]}}}],["samesitemod",{"_index":7129,"t":{"2848":{"position":[[1788,12]]}}}],["sampl",{"_index":4177,"t":{"1379":{"position":[[302,7],[412,7]]},"1795":{"position":[[3050,7]]},"3131":{"position":[[7,7],[375,7]]},"3430":{"position":[[467,7],[3167,7],[4470,7]]},"3432":{"position":[[3110,7],[5687,7]]},"3452":{"position":[[3290,7]]},"3498":{"position":[[288,6]]},"3543":{"position":[[288,6]]},"3575":{"position":[[348,6]]},"3581":{"position":[[360,6]]},"3583":{"position":[[465,6]]},"3601":{"position":[[768,7]]},"3916":{"position":[[6286,7]]}}}],["sampleasyncactionfilt",{"_index":5206,"t":{"1665":{"position":[[93,23]]}}}],["samplecontrol",{"_index":5820,"t":{"1909":{"position":[[190,16],[622,16],[1024,16]]}}}],["sampleglobalactionfilt",{"_index":5817,"t":{"1907":{"position":[[407,24]]}}}],["samwangcod",{"_index":10095,"t":{"3986":{"position":[[327,12]]}}}],["sar",{"_index":6486,"t":{"2559":{"position":[[549,3],[567,3]]}}}],["sat",{"_index":2676,"t":{"482":{"position":[[216,3]]},"2418":{"position":[[472,3]]}}}],["satelliteresourcelanguag",{"_index":4144,"t":{"1372":{"position":[[59,26],[93,26],[183,26],[217,26]]},"1444":{"position":[[59,26],[93,26],[183,26],[217,26]]}}}],["save",{"_index":3266,"t":{"655":{"position":[[90,4],[239,4]]},"2760":{"position":[[16,4],[119,4]]},"3082":{"position":[[100,4],[203,4]]},"3620":{"position":[[199,4]]}}}],["savechang",{"_index":2831,"t":{"528":{"position":[[379,11]]},"530":{"position":[[799,11]]},"651":{"position":[[411,11]]},"789":{"position":[[232,11]]},"1039":{"position":[[800,11]]},"1351":{"position":[[411,11]]},"1711":{"position":[[832,11]]},"2182":{"position":[[254,11]]},"2184":{"position":[[244,11]]},"2478":{"position":[[479,11]]},"3291":{"position":[[933,11],[1972,11],[2091,11]]},"3296":{"position":[[30,11],[56,11]]},"3922":{"position":[[1826,11]]},"3978":{"position":[[347,11]]},"3994":{"position":[[772,11]]}}}],["savechangesasync",{"_index":3261,"t":{"651":{"position":[[425,16]]},"789":{"position":[[246,16]]},"1351":{"position":[[425,16]]}}}],["savechangescompletedeventdata",{"_index":2957,"t":{"567":{"position":[[223,29]]},"931":{"position":[[703,29],[870,29]]},"933":{"position":[[223,29]]}}}],["savechangesfail",{"_index":2958,"t":{"567":{"position":[[286,17]]},"931":{"position":[[1075,17],[1135,17]]},"933":{"position":[[286,17]]}}}],["savechangesfailedasync",{"_index":3789,"t":{"931":{"position":[[1203,22],[1322,22]]}}}],["savechangesfailedev",{"_index":2959,"t":{"567":{"position":[[315,22]]},"933":{"position":[[315,22]]}}}],["savechangesinterceptor",{"_index":3749,"t":{"924":{"position":[[147,22]]},"931":{"position":[[186,22]]}}}],["savedchang",{"_index":2955,"t":{"567":{"position":[[181,12]]},"931":{"position":[[690,12],[770,12]]},"933":{"position":[[181,12]]}}}],["savedchangesasync",{"_index":3788,"t":{"931":{"position":[[852,17],[984,17]]}}}],["savedchangesev",{"_index":2956,"t":{"567":{"position":[[205,17]]},"924":{"position":[[191,17]]},"933":{"position":[[205,17]]}}}],["savenow",{"_index":7870,"t":{"3291":{"position":[[194,7],[302,7],[842,7]]},"3968":{"position":[[518,7]]}}}],["savepath",{"_index":279,"t":{"19":{"position":[[124,8],[218,8],[255,8],[415,8]]},"1741":{"position":[[193,8],[288,8],[325,8],[654,8],[1002,8],[1097,8],[1134,8],[1414,8],[1855,8],[1949,8],[1986,8],[2250,8]]}}}],["savingchang",{"_index":2950,"t":{"567":{"position":[[65,13]]},"570":{"position":[[26,13]]},"931":{"position":[[263,13],[353,13]]},"933":{"position":[[65,13]]}}}],["savingchangesasync",{"_index":3787,"t":{"931":{"position":[[456,18],[598,18]]}}}],["savingchangesev",{"_index":2951,"t":{"567":{"position":[[90,18]]},"570":{"position":[[633,18]]},"933":{"position":[[90,18],[461,18]]},"2937":{"position":[[110,18],[896,18]]}}}],["sayhello",{"_index":58,"t":{"3":{"position":[[522,8],[722,8],[806,8]]},"1424":{"position":[[248,8],[340,8],[409,8],[1065,8],[1145,8],[1294,8],[1392,8],[1524,8],[1640,8],[1959,8],[2014,8]]}}}],["sc",{"_index":7096,"t":{"2836":{"position":[[827,2],[874,2],[972,2],[1023,2],[1089,2],[1131,2],[1180,2],[1204,2]]},"3263":{"position":[[46,2],[100,2],[120,2],[162,2],[244,2],[306,2],[332,2]]}}}],["scalarexecut",{"_index":3783,"t":{"929":{"position":[[3247,15],[3359,15],[3760,14],[3859,14]]}}}],["scalarexecutedasync",{"_index":3785,"t":{"929":{"position":[[3962,19],[4113,19]]}}}],["scalarexecutingasync",{"_index":3784,"t":{"929":{"position":[[3483,20],[3647,20]]}}}],["scan",{"_index":4334,"t":{"1440":{"position":[[139,4],[144,4],[152,4]]}}}],["schedul",{"_index":6027,"t":{"2179":{"position":[[4,9]]},"3762":{"position":[[391,8]]},"3768":{"position":[[870,9],[1065,9],[1370,9],[1565,9],[1872,9],[2068,9],[2375,9]]},"3770":{"position":[[766,8],[2198,8],[4015,8],[5474,8],[5560,8]]},"3772":{"position":[[640,8],[773,9],[822,8]]},"3802":{"position":[[471,8],[751,8],[1392,8]]},"3810":{"position":[[210,8]]},"3812":{"position":[[177,8],[1436,8],[1791,8],[2413,8],[2508,8]]},"3815":{"position":[[8,9],[91,9]]},"3817":{"position":[[5,9],[46,9],[96,9],[129,9],[962,8],[1984,8]]},"3819":{"position":[[0,9]]},"3821":{"position":[[0,9],[476,8]]},"3828":{"position":[[817,8]]},"3832":{"position":[[790,8],[2926,8],[3073,8],[4687,8],[4834,8]]},"3840":{"position":[[148,9],[184,9]]},"3842":{"position":[[180,9],[353,9],[399,8],[771,9],[983,9],[1029,8],[1358,9],[1548,9],[1594,8],[1940,9],[2138,9],[2184,8],[2562,9],[2779,9],[2825,8],[3187,9],[3396,9],[3442,8]]},"3844":{"position":[[183,9],[360,9],[408,8],[507,9],[630,9]]},"3846":{"position":[[190,9],[430,9],[482,9],[599,9],[647,8],[745,9],[868,9]]},"3850":{"position":[[214,9],[262,8],[357,8]]},"3852":{"position":[[333,9],[380,8],[475,8]]},"3854":{"position":[[302,8],[452,9],[500,8]]},"3856":{"position":[[197,8]]},"3860":{"position":[[5,9]]},"3862":{"position":[[148,9],[184,9]]},"3864":{"position":[[71,9]]},"3866":{"position":[[23,9]]},"3868":{"position":[[17,9]]},"3870":{"position":[[22,9]]},"3872":{"position":[[21,9]]},"3874":{"position":[[0,9],[147,9],[195,8],[290,8]]},"3876":{"position":[[265,9],[312,8],[407,8]]},"3878":{"position":[[0,9]]},"3880":{"position":[[0,9]]},"3882":{"position":[[104,9],[174,9]]},"3884":{"position":[[104,9],[189,9]]},"3886":{"position":[[104,9],[174,9]]},"3888":{"position":[[130,9],[199,9]]},"3890":{"position":[[14,9]]},"3892":{"position":[[104,9],[139,9]]},"3894":{"position":[[106,9]]},"3896":{"position":[[9,9],[401,8]]}}}],["schedular",{"_index":6020,"t":{"2175":{"position":[[78,9]]},"2177":{"position":[[23,9]]},"2179":{"position":[[16,9]]},"3876":{"position":[[0,9]]},"3910":{"position":[[2547,9]]}}}],["schedulehostedservic",{"_index":8968,"t":{"3832":{"position":[[2935,21],[3097,21],[4696,21],[4858,21]]}}}],["scheduleoptionsbuild",{"_index":8940,"t":{"3824":{"position":[[0,22],[153,22],[200,22],[229,22],[276,22]]}}}],["schedulerbuild",{"_index":8924,"t":{"3817":{"position":[[61,16],[186,16],[276,16],[295,16],[460,16],[548,16],[567,16],[1540,16],[1596,16],[1615,16],[2587,16],[2611,16],[2630,16]]},"3819":{"position":[[84,16],[133,16],[244,16],[320,16],[387,16],[460,16],[553,16],[642,16],[739,16],[833,16],[921,16],[995,16],[1084,16],[1178,16],[1252,16],[1377,16],[1466,16],[1534,16],[1584,16],[1640,16],[1688,16]]},"3821":{"position":[[12,16],[75,16]]},"3826":{"position":[[308,16]]},"3842":{"position":[[3,16],[154,16],[229,16]]},"3844":{"position":[[3,16],[157,16],[235,16],[692,16],[744,16],[973,16],[1034,16],[1077,16],[1140,16],[1249,16],[1345,16],[1465,16]]},"3866":{"position":[[4,16]]}}}],["scheduleresult",{"_index":8984,"t":{"3840":{"position":[[6,14],[31,14],[59,14],[87,14]]},"3842":{"position":[[29,14],[56,14],[84,14],[109,14],[569,14],[596,14],[624,14],[1178,14],[1205,14],[1233,14],[1752,14],[1779,14],[1807,14],[2355,14],[2382,14],[2410,14],[2988,14],[3015,14],[3043,14]]},"3844":{"position":[[29,14],[56,14],[84,14],[109,14],[1200,14],[1417,14]]},"3846":{"position":[[18,14],[45,14],[73,14],[97,14],[274,14],[301,14],[329,14],[353,14]]},"3862":{"position":[[6,14],[31,14],[59,14],[87,14]]},"3882":{"position":[[6,14],[33,14],[61,14]]},"3884":{"position":[[6,14],[31,14],[59,14],[87,14]]},"3886":{"position":[[6,14],[33,14],[61,14]]},"3888":{"position":[[6,14],[33,14],[61,14],[84,14]]},"3892":{"position":[[6,14],[33,14],[61,14]]}}}],["schedulerfactori",{"_index":6025,"t":{"2177":{"position":[[4,16]]},"3772":{"position":[[340,16],[395,16],[416,16],[435,16],[479,16]]},"3834":{"position":[[156,16],[211,16],[232,16],[251,16],[326,16]]},"3836":{"position":[[63,16],[166,16],[232,16],[288,16]]},"3838":{"position":[[70,16],[199,16],[291,16],[361,16]]},"3840":{"position":[[105,16],[197,16]]},"3842":{"position":[[127,16],[205,16],[668,16],[796,16],[1277,16],[1383,16],[1851,16],[1965,16],[2454,16],[2587,16],[3087,16],[3212,16]]},"3844":{"position":[[127,16],[208,16],[764,16],[1218,16],[1365,16],[1435,16]]},"3846":{"position":[[144,16],[215,16],[400,16],[455,16]]},"3848":{"position":[[15,16],[86,16]]},"3850":{"position":[[1,16],[49,16]]},"3852":{"position":[[1,16],[49,16]]},"3854":{"position":[[1,16],[50,16]]},"3856":{"position":[[70,16]]},"3858":{"position":[[107,16],[157,16]]},"3862":{"position":[[105,16],[197,16]]}}}],["schedulermodel",{"_index":8977,"t":{"3836":{"position":[[99,14]]},"3838":{"position":[[125,14]]},"3864":{"position":[[3,14],[54,14]]}}}],["schedulerresult",{"_index":8992,"t":{"3842":{"position":[[649,15],[1258,15],[1832,15],[2435,15],[3068,15]]},"3846":{"position":[[125,15],[381,15]]},"3882":{"position":[[86,15]]},"3886":{"position":[[86,15]]},"3888":{"position":[[112,15]]},"3892":{"position":[[86,15]]}}}],["scheduleservic",{"_index":8689,"t":{"3768":{"position":[[764,15],[959,15],[1264,15],[1459,15],[1765,15],[1961,15],[2268,15]]},"3772":{"position":[[618,15],[747,15]]},"3832":{"position":[[1656,15]]},"3842":{"position":[[327,15],[471,15],[957,15],[1101,15],[1522,15],[1666,15],[2112,15],[2256,15],[2753,15],[2897,15],[3370,15],[3514,15]]},"3844":{"position":[[333,15],[480,15],[603,15]]},"3846":{"position":[[573,15],[719,15],[842,15]]},"3850":{"position":[[159,15],[334,15]]},"3852":{"position":[[278,15],[452,15]]},"3854":{"position":[[280,15],[426,15]]},"3856":{"position":[[175,15]]},"3874":{"position":[[92,15],[267,15]]},"3876":{"position":[[210,15],[384,15]]}}}],["schema",{"_index":3922,"t":{"1060":{"position":[[153,6]]},"1775":{"position":[[250,6]]},"2495":{"position":[[5,6],[33,6],[61,6]]},"2497":{"position":[[14,6],[67,6],[99,6],[176,6],[213,6],[269,6]]},"2499":{"position":[[45,6],[92,6]]},"2501":{"position":[[30,6],[84,7],[102,6],[126,6],[180,7],[198,6]]},"2503":{"position":[[8,6],[62,7],[80,6]]},"2508":{"position":[[11,6]]},"2512":{"position":[[119,6]]},"2875":{"position":[[711,6]]},"2917":{"position":[[37,6],[95,6]]},"2919":{"position":[[36,6]]},"2953":{"position":[[34,6]]},"2959":{"position":[[574,6],[592,6],[771,6],[792,6]]},"2963":{"position":[[436,6],[605,6],[626,6]]},"2965":{"position":[[3,6],[102,6],[115,6],[178,6],[191,6]]},"2971":{"position":[[58,6]]},"2977":{"position":[[43,6],[83,6],[137,7],[155,6]]},"2987":{"position":[[43,6],[83,6],[137,7],[155,6]]},"2997":{"position":[[43,6],[83,6],[137,7],[155,6]]},"3005":{"position":[[43,6],[83,6],[137,7],[155,6]]},"3019":{"position":[[43,6],[83,6],[137,7],[155,6]]},"3027":{"position":[[43,6],[83,6],[137,7],[155,6]]},"3035":{"position":[[43,6],[83,6],[137,7],[155,6]]},"3043":{"position":[[43,6],[83,6],[137,7],[155,6]]},"3051":{"position":[[43,6],[83,6],[137,7],[155,6]]},"3059":{"position":[[43,6],[83,6],[137,7],[155,6]]},"3063":{"position":[[929,6]]},"3706":{"position":[[921,6]]},"3722":{"position":[[344,6]]},"3912":{"position":[[2441,6]]},"3920":{"position":[[1886,6]]},"3932":{"position":[[207,6],[222,6],[620,6],[635,6],[1188,6],[1440,6],[1500,6],[1568,6],[1608,6],[1662,7],[1680,6],[1900,6]]},"3936":{"position":[[554,6],[594,6],[613,6],[645,6]]},"3942":{"position":[[183,6]]},"3950":{"position":[[478,6],[780,6]]}}}],["schemaid",{"_index":8518,"t":{"3698":{"position":[[77,8],[103,8],[158,8],[236,8],[249,8]]},"3934":{"position":[[181,8],[219,8]]},"3954":{"position":[[761,9]]}}}],["schemaidattribut",{"_index":8520,"t":{"3698":{"position":[[212,17]]}}}],["schemanam",{"_index":1815,"t":{"247":{"position":[[559,10]]}}}],["schemastor",{"_index":7156,"t":{"2875":{"position":[[733,11]]}}}],["scheme",{"_index":1044,"t":{"129":{"position":[[383,6],[571,6]]},"3650":{"position":[[303,6],[337,6],[390,6]]}}}],["school",{"_index":7787,"t":{"3263":{"position":[[33,6],[299,6]]},"3273":{"position":[[547,6]]}}}],["schoolid",{"_index":7791,"t":{"3263":{"position":[[90,8],[320,8]]},"3267":{"position":[[599,8]]}}}],["schoolnam",{"_index":7792,"t":{"3263":{"position":[[151,10],[259,10]]}}}],["scm",{"_index":4448,"t":{"1488":{"position":[[430,3]]},"1495":{"position":[[430,3]]}}}],["scope",{"_index":2834,"t":{"530":{"position":[[19,6],[484,5],[538,5],[830,6]]},"730":{"position":[[197,6],[215,5],[241,5]]},"732":{"position":[[120,6],[138,5],[164,5]]},"1039":{"position":[[19,6],[484,5],[538,5],[831,6]]},"1214":{"position":[[203,6],[223,5],[274,5]]},"1383":{"position":[[270,6]]},"1420":{"position":[[697,6]]},"1434":{"position":[[10,5],[64,5]]},"1436":{"position":[[10,5],[68,5]]},"1438":{"position":[[27,6],[41,6],[65,5],[92,5]]},"1711":{"position":[[358,6],[376,5],[403,5],[746,5],[863,6]]},"1811":{"position":[[518,5],[588,5]]},"2182":{"position":[[6,6],[30,5],[57,5],[96,6],[131,5],[158,5],[285,6]]},"2184":{"position":[[6,6],[33,5],[60,5],[99,5],[136,5],[163,5]]},"2186":{"position":[[55,6],[90,5],[117,5]]},"2188":{"position":[[55,6],[93,5],[120,5]]},"2476":{"position":[[38,6],[56,5],[83,5]]},"2478":{"position":[[148,6],[166,5],[193,5],[510,6]]},"2831":{"position":[[480,5],[532,5]]},"3001":{"position":[[258,6]]},"3126":{"position":[[440,6]]},"3224":{"position":[[1820,5]]},"3291":{"position":[[1363,5],[2114,5]]},"3452":{"position":[[3926,5],[3932,5]]},"3466":{"position":[[97,5],[243,5],[408,5],[529,6],[626,6],[1595,5]]},"3914":{"position":[[1797,5],[1945,5],[2619,5]]},"3916":{"position":[[1590,6],[1696,6],[1796,6],[6922,5],[6928,5]]},"3922":{"position":[[419,6],[515,6],[541,6],[583,6],[614,6]]},"3950":{"position":[[305,6]]},"3952":{"position":[[158,6]]},"3964":{"position":[[1005,6]]},"3966":{"position":[[518,6],[546,6],[703,6],[1304,6],[1607,5]]},"3974":{"position":[[54,6],[89,6],[665,5]]},"3976":{"position":[[196,6]]}}}],["scopecontext",{"_index":8243,"t":{"3466":{"position":[[58,12],[113,12],[259,12],[424,12],[543,12],[666,12],[1376,12],[1611,12]]},"3914":{"position":[[1681,12],[1813,12],[1961,12]]},"3916":{"position":[[1122,12],[1148,12],[1481,12],[1986,12]]},"3924":{"position":[[271,12],[4539,12],[4655,12],[4793,12]]}}}],["scopedprocessingservic",{"_index":5659,"t":{"1811":{"position":[[562,23]]},"1823":{"position":[[515,23]]}}}],["scopefactori",{"_index":2842,"t":{"530":{"position":[[220,12],[302,12],[337,12],[352,12],[493,12]]},"1039":{"position":[[220,12],[302,12],[337,12],[352,12],[493,12]]},"2831":{"position":[[209,12],[283,12],[318,12],[333,12],[489,12]]}}}],["scopeprovid",{"_index":8113,"t":{"3430":{"position":[[4616,13]]},"3466":{"position":[[1245,13],[1352,13],[1737,13]]}}}],["script",{"_index":3419,"t":{"719":{"position":[[51,6],[76,6]]},"2751":{"position":[[142,6]]},"3194":{"position":[[186,6],[847,6]]},"3329":{"position":[[187,9]]}}}],["scrutor",{"_index":4331,"t":{"1440":{"position":[[58,7],[981,7]]}}}],["sd7o95o",{"_index":7889,"t":{"3307":{"position":[[121,7]]}}}],["sdk",{"_index":397,"t":{"46":{"position":[[28,3]]},"60":{"position":[[28,3]]},"70":{"position":[[28,3]]},"100":{"position":[[33,3]]},"251":{"position":[[210,3]]},"1379":{"position":[[131,3]]},"1483":{"position":[[83,3],[378,3],[757,3],[791,3],[863,3],[897,3]]},"1535":{"position":[[48,3],[67,3]]},"1551":{"position":[[209,3],[228,3]]},"1971":{"position":[[34,3]]},"1985":{"position":[[34,3]]},"2008":{"position":[[34,3]]},"2836":{"position":[[755,3]]},"2875":{"position":[[564,3],[583,3],[601,3]]},"2891":{"position":[[34,3],[47,3],[66,3],[86,3],[105,3]]},"3142":{"position":[[278,3]]},"3371":{"position":[[113,3]]},"3389":{"position":[[519,3]]},"3908":{"position":[[121,3],[264,3]]},"3924":{"position":[[2861,3]]},"3934":{"position":[[108,3],[127,3],[429,3],[448,3],[2798,3],[2809,3]]},"3960":{"position":[[172,3]]},"3970":{"position":[[112,3]]},"3980":{"position":[[197,3]]},"3986":{"position":[[171,3]]},"3990":{"position":[[255,3]]},"3992":{"position":[[229,3],[996,3]]}}}],["se",{"_index":3729,"t":{"899":{"position":[[1868,3]]},"2559":{"position":[[2458,2]]}}}],["seal",{"_index":1585,"t":{"216":{"position":[[718,6]]},"338":{"position":[[223,6]]},"340":{"position":[[199,6],[588,6],[816,6],[1050,6],[1394,6],[1693,6]]},"353":{"position":[[189,6]]},"355":{"position":[[289,6],[370,6],[478,6]]},"369":{"position":[[523,6]]},"371":{"position":[[94,6],[303,6]]},"411":{"position":[[245,6]]},"514":{"position":[[186,6]]},"524":{"position":[[265,6]]},"572":{"position":[[279,6]]},"595":{"position":[[138,6]]},"617":{"position":[[2314,6]]},"929":{"position":[[174,6]]},"945":{"position":[[200,6]]},"1058":{"position":[[132,6]]},"1317":{"position":[[186,6]]},"1582":{"position":[[212,6]]},"1801":{"position":[[439,6]]},"1843":{"position":[[138,6]]},"1867":{"position":[[481,6]]},"2711":{"position":[[228,6]]},"2807":{"position":[[248,6]]},"2927":{"position":[[144,6]]},"2943":{"position":[[144,6]]},"2957":{"position":[[144,6]]},"3144":{"position":[[259,6]]},"3156":{"position":[[410,6]]},"3287":{"position":[[1425,6]]},"3630":{"position":[[298,6]]}}}],["search",{"_index":5096,"t":{"1594":{"position":[[81,6]]}}}],["sec",{"_index":8309,"t":{"3522":{"position":[[997,3]]}}}],["second",{"_index":5139,"t":{"1619":{"position":[[192,6]]},"2418":{"position":[[75,7],[132,7],[242,7]]},"2424":{"position":[[73,6]]},"2428":{"position":[[33,6]]},"3236":{"position":[[36,7],[133,7],[224,7]]},"3806":{"position":[[1471,7],[1492,7],[1502,7],[1525,7],[1631,7],[2811,7],[2822,7],[2832,7],[2855,7],[2961,7],[3176,7]]},"3808":{"position":[[1849,7],[1892,7]]}}}],["seconddbcontext",{"_index":2816,"t":{"524":{"position":[[611,15]]}}}],["seconddbcontextdbcontextloc",{"_index":2817,"t":{"524":{"position":[[628,31]]}}}],["secondli",{"_index":2650,"t":{"480":{"position":[[71,8],[98,8],[471,8],[490,8]]},"494":{"position":[[62,8],[81,8]]},"2175":{"position":[[136,8],[385,8]]},"3762":{"position":[[486,8]]},"3764":{"position":[[104,8]]},"3768":{"position":[[163,8],[2573,8]]},"3770":{"position":[[828,8],[2261,8],[4079,8],[5615,8]]},"3772":{"position":[[530,8]]},"3804":{"position":[[711,8]]},"3808":{"position":[[242,8]]}}}],["secondstartup",{"_index":1575,"t":{"212":{"position":[[525,13],[713,13]]}}}],["secretkey",{"_index":5296,"t":{"1691":{"position":[[427,9],[544,9]]}}}],["section",{"_index":4377,"t":{"1474":{"position":[[222,7]]}}}],["secur",{"_index":708,"t":{"112":{"position":[[248,8]]},"150":{"position":[[74,8]]},"188":{"position":[[80,8]]},"247":{"position":[[378,8]]},"408":{"position":[[59,8]]},"423":{"position":[[193,8]]},"570":{"position":[[249,8]]},"1755":{"position":[[155,8],[261,8],[403,8],[509,8]]},"1925":{"position":[[123,8]]},"2033":{"position":[[102,8]]},"3744":{"position":[[316,8]]}}}],["securityalgorithm",{"_index":1025,"t":{"127":{"position":[[1600,18]]},"2132":{"position":[[457,18]]}}}],["securitydefin",{"_index":10206,"t":{"3992":{"position":[[793,14]]}}}],["securitydefineattribut",{"_index":1072,"t":{"133":{"position":[[953,23],[1003,23],[1035,23]]}}}],["securitydefinit",{"_index":7319,"t":{"3063":{"position":[[538,19]]},"3650":{"position":[[162,19]]},"3706":{"position":[[530,19]]},"3992":{"position":[[749,19]]}}}],["securityreadjwttoken",{"_index":5994,"t":{"2144":{"position":[[108,20]]},"3930":{"position":[[227,20]]}}}],["securityschem",{"_index":8485,"t":{"3650":{"position":[[441,14]]}}}],["securitytoken",{"_index":5993,"t":{"2144":{"position":[[78,13]]}}}],["see",{"_index":2251,"t":{"344":{"position":[[245,3]]},"346":{"position":[[242,3],[306,3]]},"348":{"position":[[268,3]]},"655":{"position":[[198,3]]},"1801":{"position":[[2177,3]]},"1803":{"position":[[4139,3]]},"3071":{"position":[[446,3],[688,3]]},"3585":{"position":[[61,3]]},"3702":{"position":[[2692,3]]}}}],["seed",{"_index":6187,"t":{"2333":{"position":[[500,4],[538,4]]}}}],["seeddata",{"_index":7260,"t":{"2929":{"position":[[28,9]]},"2945":{"position":[[28,9]]},"2959":{"position":[[28,9]]}}}],["select",{"_index":2892,"t":{"550":{"position":[[36,6],[107,6],[175,6],[266,6]]},"556":{"position":[[12,6]]},"558":{"position":[[13,6],[60,6],[104,6]]},"560":{"position":[[93,6]]},"696":{"position":[[883,9]]},"824":{"position":[[71,6]]},"828":{"position":[[69,6]]},"834":{"position":[[147,6]]},"836":{"position":[[213,6]]},"860":{"position":[[128,6]]},"862":{"position":[[176,6]]},"866":{"position":[[206,6],[489,6]]},"881":{"position":[[126,6]]},"889":{"position":[[586,6],[632,6]]},"1037":{"position":[[477,6]]},"1125":{"position":[[226,6],[274,6]]},"1160":{"position":[[42,6],[100,6],[193,6],[338,6],[469,6],[677,6],[762,6],[921,6],[990,6],[1094,6],[1250,6],[1392,6],[1622,6],[1718,6]]},"1162":{"position":[[40,6],[104,6],[203,6],[354,6],[491,6],[711,6],[802,6],[967,6],[1042,6],[1152,6],[1314,6],[1462,6],[1704,6],[1806,6]]},"1164":{"position":[[42,6],[64,6],[126,6],[163,6],[278,6],[328,6],[345,6],[453,6],[475,6],[548,6],[585,6],[711,6],[761,6],[778,6]]},"1166":{"position":[[54,6],[76,6],[166,6],[203,6],[365,6],[415,6],[432,6],[588,6],[610,6],[711,6],[748,6],[921,6],[971,6],[988,6]]},"1168":{"position":[[38,6],[123,6],[216,6],[329,6],[425,6],[529,6]]},"1185":{"position":[[152,6],[200,6]]},"1192":{"position":[[12,6]]},"1194":{"position":[[102,6],[173,6],[281,6],[358,6]]},"1196":{"position":[[80,6]]},"1198":{"position":[[89,6]]},"1204":{"position":[[17,6],[98,6]]},"1212":{"position":[[89,6],[231,6]]},"1214":{"position":[[236,6]]},"1216":{"position":[[37,6]]},"1234":{"position":[[138,6],[270,6],[519,6],[639,6],[1070,6]]},"1236":{"position":[[138,6],[273,6],[528,6],[650,6]]},"1238":{"position":[[140,6],[196,6],[315,6],[371,6],[508,6],[628,6],[650,6],[769,6],[791,6],[814,6]]},"1240":{"position":[[140,6],[196,6],[336,6],[392,6],[550,6],[691,6],[713,6],[853,6],[875,6],[898,6],[1065,6],[1101,6]]},"1242":{"position":[[119,6],[199,6],[275,6]]},"1246":{"position":[[117,6]]},"1269":{"position":[[41,6]]},"1273":{"position":[[48,6]]},"1279":{"position":[[352,6]]},"1286":{"position":[[159,6],[174,6],[275,6],[287,6],[322,6]]},"1295":{"position":[[49,6],[103,6],[175,6]]},"1297":{"position":[[41,6]]},"1300":{"position":[[3,6],[18,6]]},"1302":{"position":[[38,6],[62,6]]},"1362":{"position":[[24,6]]},"1566":{"position":[[468,6]]},"2694":{"position":[[43,6],[99,6]]},"3218":{"position":[[192,6],[282,6]]},"3222":{"position":[[264,6]]},"3230":{"position":[[112,6],[307,6],[334,6]]},"3254":{"position":[[1407,6]]},"3263":{"position":[[109,6],[192,6]]},"3273":{"position":[[45,6],[135,6],[309,6]]},"3275":{"position":[[332,6]]},"3287":{"position":[[315,6],[640,6]]},"3932":{"position":[[2042,6],[2133,6],[2292,6],[2328,6]]}}}],["selectedid",{"_index":2922,"t":{"558":{"position":[[222,10]]}}}],["selectid",{"_index":5024,"t":{"1555":{"position":[[621,8],[692,8]]}}}],["selector",{"_index":2115,"t":{"321":{"position":[[147,8]]}}}],["self",{"_index":4280,"t":{"1416":{"position":[[206,4]]}}}],["selfservic",{"_index":4274,"t":{"1414":{"position":[[48,11],[198,11],[288,11],[705,11],[718,11],[754,11],[766,11],[782,11],[796,11],[857,11]]}}}],["selfwithfirstinterfac",{"_index":4282,"t":{"1416":{"position":[[241,22]]},"1420":{"position":[[299,22]]},"3003":{"position":[[243,22]]}}}],["send",{"_index":4501,"t":{"1497":{"position":[[3,4]]},"1705":{"position":[[73,4],[144,4],[215,4]]},"1709":{"position":[[53,4]]},"1803":{"position":[[3701,4]]},"3194":{"position":[[591,4],[762,4]]},"3601":{"position":[[1046,7]]},"3620":{"position":[[194,4]]}}}],["sendasbytearrayasync",{"_index":9594,"t":{"3944":{"position":[[67,20]]}}}],["sendasync",{"_index":6126,"t":{"2313":{"position":[[588,9]]},"3154":{"position":[[316,9]]},"3162":{"position":[[304,9]]},"3486":{"position":[[568,9]]}}}],["sender",{"_index":2964,"t":{"570":{"position":[[563,6]]},"3589":{"position":[[885,6]]}}}],["sendmessag",{"_index":7542,"t":{"3154":{"position":[[238,11],[560,11]]},"3168":{"position":[[351,11]]},"3194":{"position":[[67,11],[597,11],[768,11]]}}}],["sendmsg",{"_index":7588,"t":{"3194":{"position":[[692,7]]}}}],["senparcsdk",{"_index":1479,"t":{"199":{"position":[[287,10]]}}}],["sensit",{"_index":3405,"t":{"713":{"position":[[191,9],[273,9]]},"734":{"position":[[205,9],[287,9]]},"2788":{"position":[[15,9],[78,9]]}}}],["sensitivedataloggingen",{"_index":3409,"t":{"713":{"position":[[546,27]]},"734":{"position":[[554,27]]}}}],["sensitivedetect",{"_index":7056,"t":{"2790":{"position":[[12,18],[46,18],[147,18],[246,18]]},"2792":{"position":[[62,18],[175,18]]},"3966":{"position":[[216,18],[664,18]]}}}],["sensitivedetectionprovid",{"_index":7059,"t":{"2790":{"position":[[452,26],[529,26],[560,26],[589,26],[756,26],[968,26],[1182,26]]}}}],["sequentialguididgener",{"_index":6170,"t":{"2331":{"position":[[464,25],[509,25],[590,25]]}}}],["sequentialguidset",{"_index":6163,"t":{"2331":{"position":[[81,22],[148,22],[649,22]]}}}],["serial",{"_index":5524,"t":{"1797":{"position":[[682,13]]},"1801":{"position":[[2573,9]]},"2069":{"position":[[4,10]]},"2071":{"position":[[15,9]]},"2079":{"position":[[32,9]]},"2345":{"position":[[352,9]]},"2350":{"position":[[49,9]]},"2354":{"position":[[152,9]]},"2357":{"position":[[759,9]]},"2375":{"position":[[120,13]]},"2379":{"position":[[744,9]]},"2387":{"position":[[49,13]]},"2468":{"position":[[223,6]]},"2470":{"position":[[82,6]]},"2478":{"position":[[82,6]]},"2848":{"position":[[1377,9]]}}}],["serializeobject",{"_index":2994,"t":{"570":{"position":[[2404,15]]},"1803":{"position":[[4485,15]]},"2357":{"position":[[841,15]]},"2379":{"position":[[826,15]]},"3254":{"position":[[1551,15]]}}}],["serializerset",{"_index":6228,"t":{"2357":{"position":[[1494,18]]},"2359":{"position":[[327,18]]},"2361":{"position":[[550,18]]},"2363":{"position":[[368,18]]},"2377":{"position":[[87,18]]},"2379":{"position":[[287,18],[509,18],[1221,18]]},"2383":{"position":[[378,18],[465,18],[536,18]]},"3718":{"position":[[66,18]]}}}],["serialnam",{"_index":6358,"t":{"2468":{"position":[[165,10]]}}}],["serilog",{"_index":542,"t":{"91":{"position":[[437,7],[452,7]]},"2674":{"position":[[185,7]]},"3472":{"position":[[67,7]]},"3928":{"position":[[59,7],[234,7],[607,7]]},"3930":{"position":[[525,7]]},"3934":{"position":[[937,7]]},"3944":{"position":[[479,7]]},"3962":{"position":[[1260,7]]},"3980":{"position":[[356,7],[713,7]]},"3992":{"position":[[100,7]]},"3994":{"position":[[79,7]]},"3996":{"position":[[1660,7]]}}}],["serivc",{"_index":9132,"t":{"3914":{"position":[[2594,7]]}}}],["serv",{"_index":2223,"t":{"340":{"position":[[457,5]]},"350":{"position":[[78,5],[210,5]]},"371":{"position":[[646,5],[668,5]]},"401":{"position":[[83,5]]},"455":{"position":[[945,5],[970,5]]},"461":{"position":[[268,5],[282,5]]},"2175":{"position":[[212,5],[226,5],[263,5],[299,5],[420,5],[440,5]]},"2674":{"position":[[136,5],[237,5]]},"2862":{"position":[[409,5]]},"2868":{"position":[[30,5],[70,5],[132,5]]},"2872":{"position":[[11,5]]},"2875":{"position":[[53,5],[258,5]]},"2877":{"position":[[33,5],[114,5],[210,5],[279,5]]},"2879":{"position":[[75,5],[117,5],[413,5]]},"2881":{"position":[[6,5],[131,5],[399,5]]},"2883":{"position":[[15,5]]},"2885":{"position":[[0,5]]},"2887":{"position":[[273,5]]},"2889":{"position":[[50,5],[90,5],[127,5]]},"2893":{"position":[[33,5],[56,5],[102,5]]},"2895":{"position":[[9,5]]},"2897":{"position":[[0,5],[335,5],[582,5]]},"2899":{"position":[[24,5],[180,5],[462,5]]},"2903":{"position":[[6,5],[59,5],[217,5],[278,5],[346,5]]},"2905":{"position":[[38,5],[388,5],[404,5]]},"3371":{"position":[[428,5]]},"3389":{"position":[[935,5]]},"3430":{"position":[[1055,5],[1068,5],[2185,5],[2200,5]]},"3702":{"position":[[807,5]]},"3910":{"position":[[525,5],[578,5],[621,5],[713,5],[794,5],[890,5],[959,5],[1026,5],[1108,5],[1248,5],[2568,5]]},"3916":{"position":[[2580,5]]},"3920":{"position":[[782,5]]},"3922":{"position":[[294,5]]},"3924":{"position":[[123,5],[786,5],[816,5],[934,5],[1017,5],[1435,5],[2029,5],[2116,5],[2192,5],[2360,5],[2421,5],[2489,5],[3176,5]]},"3930":{"position":[[973,5]]},"3934":{"position":[[7,5],[472,5],[1063,5],[1223,5],[1674,5]]}}}],["serveconfig",{"_index":2066,"t":{"314":{"position":[[52,11],[517,11]]},"316":{"position":[[54,11],[575,11]]}}}],["servedir",{"_index":9580,"t":{"3942":{"position":[[53,8]]}}}],["servemodul",{"_index":2049,"t":{"310":{"position":[[680,11],[929,11],[1055,11]]}}}],["server",{"_index":1619,"t":{"220":{"position":[[375,6]]},"239":{"position":[[228,6]]},"241":{"position":[[9,6]]},"247":{"position":[[8,6],[65,6],[92,6],[109,6],[202,6]]},"255":{"position":[[142,6],[198,6],[282,6]]},"373":{"position":[[71,7]]},"445":{"position":[[232,6],[309,6]]},"447":{"position":[[134,6],[215,6]]},"520":{"position":[[164,6]]},"544":{"position":[[164,7]]},"685":{"position":[[562,6]]},"688":{"position":[[376,6]]},"901":{"position":[[164,6]]},"1054":{"position":[[406,6]]},"1056":{"position":[[693,6]]},"1155":{"position":[[76,6],[126,6]]},"1315":{"position":[[164,6]]},"1799":{"position":[[112,6]]},"1855":{"position":[[413,6]]},"1865":{"position":[[306,6]]},"1875":{"position":[[497,6]]},"3063":{"position":[[610,7],[621,6],[661,7],[721,6]]},"3254":{"position":[[144,6]]},"3275":{"position":[[64,6]]},"3706":{"position":[[602,7],[613,6],[653,7],[713,6]]},"3914":{"position":[[2659,6]]},"3922":{"position":[[1859,6]]},"3992":{"position":[[3399,7]]}}}],["server_error",{"_index":5732,"t":{"1855":{"position":[[413,12]]},"1865":{"position":[[306,12]]},"1875":{"position":[[497,12]]}}}],["servercertificatecustomvalidationcallback",{"_index":8378,"t":{"3589":{"position":[[178,41],[375,41]]}}}],["serverdir",{"_index":7329,"t":{"3063":{"position":[[1012,9]]},"3339":{"position":[[186,9]]},"3706":{"position":[[1004,9]]}}}],["servic",{"_index":42,"t":{"3":{"position":[[324,8],[360,8],[415,8],[860,8],[902,8]]},"112":{"position":[[1619,8]]},"125":{"position":[[80,8]]},"127":{"position":[[145,8],[228,8],[295,8],[330,8]]},"129":{"position":[[24,8]]},"133":{"position":[[1130,8]]},"139":{"position":[[0,8]]},"204":{"position":[[346,8]]},"210":{"position":[[408,8],[420,8],[601,8]]},"212":{"position":[[314,8],[603,8]]},"216":{"position":[[356,8],[813,8],[825,8],[853,8]]},"245":{"position":[[260,8]]},"247":{"position":[[434,8]]},"249":{"position":[[39,8],[128,8]]},"251":{"position":[[246,8]]},"288":{"position":[[551,8]]},"308":{"position":[[109,8],[338,8]]},"310":{"position":[[107,8],[190,8],[282,8],[355,8]]},"314":{"position":[[329,8],[382,8]]},"316":{"position":[[476,8]]},"321":{"position":[[112,8]]},"323":{"position":[[26,8],[93,8]]},"336":{"position":[[278,7]]},"338":{"position":[[318,8],[330,8],[358,8],[397,8],[426,8],[450,8],[481,8],[507,8],[541,8],[574,8],[591,8],[609,8],[628,8],[648,8],[669,8]]},"340":{"position":[[292,8],[354,7],[680,8],[727,8],[914,8],[961,8],[1141,8],[1188,8]]},"344":{"position":[[234,8],[363,8]]},"350":{"position":[[279,8],[331,7],[526,7]]},"353":{"position":[[281,8],[328,8]]},"369":{"position":[[442,7],[616,8],[745,8]]},"371":{"position":[[189,8],[236,8],[595,7]]},"373":{"position":[[31,7]]},"411":{"position":[[340,8],[352,8],[510,8],[541,8]]},"461":{"position":[[573,8],[588,8],[922,8],[937,8],[1463,8],[1478,8]]},"514":{"position":[[293,8],[325,8],[651,8]]},"520":{"position":[[392,7]]},"524":{"position":[[372,8],[384,8]]},"526":{"position":[[74,8],[157,8],[399,8]]},"530":{"position":[[527,8],[605,8],[666,8],[706,8]]},"544":{"position":[[27,8],[74,8]]},"572":{"position":[[1258,8],[1276,8]]},"587":{"position":[[1903,7]]},"595":{"position":[[233,8],[245,8],[328,8]]},"599":{"position":[[443,7]]},"617":{"position":[[2409,8],[2421,8]]},"637":{"position":[[0,8]]},"706":{"position":[[104,8]]},"734":{"position":[[725,7],[7522,7]]},"761":{"position":[[0,8],[117,8]]},"899":{"position":[[1122,8],[1355,8],[1511,8],[1635,8]]},"901":{"position":[[420,7]]},"935":{"position":[[28,8],[50,8]]},"1039":{"position":[[527,8],[605,8],[667,8],[707,8]]},"1058":{"position":[[239,8],[251,8],[293,8],[332,8]]},"1214":{"position":[[176,7]]},"1313":{"position":[[498,8]]},"1315":{"position":[[420,7]]},"1317":{"position":[[293,8],[325,8]]},"1319":{"position":[[104,8]]},"1412":{"position":[[875,8]]},"1418":{"position":[[66,8]]},"1420":{"position":[[178,7],[636,7]]},"1424":{"position":[[768,8],[829,8]]},"1426":{"position":[[238,7]]},"1428":{"position":[[34,8],[85,8]]},"1434":{"position":[[53,8],[131,8],[193,8],[233,8],[301,8]]},"1436":{"position":[[57,8]]},"1438":{"position":[[81,8]]},"1440":{"position":[[130,8]]},"1582":{"position":[[307,8],[319,8],[417,8]]},"1592":{"position":[[61,8],[70,7]]},"1661":{"position":[[774,8],[783,7]]},"1685":{"position":[[206,8]]},"1701":{"position":[[104,8],[116,8]]},"1711":{"position":[[392,8],[468,8],[482,8],[543,8],[557,8],[590,8],[635,8]]},"1721":{"position":[[0,8]]},"1795":{"position":[[2557,8],[3003,8]]},"1799":{"position":[[743,8]]},"1801":{"position":[[3182,8]]},"1803":{"position":[[5175,8]]},"1805":{"position":[[486,8]]},"1807":{"position":[[815,8]]},"1809":{"position":[[446,8]]},"1811":{"position":[[263,8],[313,8],[324,8],[378,8],[526,8]]},"1813":{"position":[[0,8]]},"1819":{"position":[[480,8]]},"1827":{"position":[[8,8]]},"1843":{"position":[[233,8],[245,8],[334,8]]},"1867":{"position":[[576,8],[588,8]]},"1907":{"position":[[117,8],[147,8],[474,8],[586,8]]},"1909":{"position":[[306,8],[558,8]]},"1913":{"position":[[1283,8],[1397,8],[1587,8]]},"1919":{"position":[[746,8],[855,8],[1035,8]]},"1925":{"position":[[1475,8],[1582,8],[1758,8]]},"1927":{"position":[[792,8],[902,8]]},"1933":{"position":[[912,8],[1022,8],[1204,8]]},"1935":{"position":[[407,8],[520,8]]},"1941":{"position":[[1163,8],[1270,8],[1446,8]]},"1943":{"position":[[357,8],[467,8]]},"1951":{"position":[[804,8]]},"1961":{"position":[[9,8],[86,8]]},"1963":{"position":[[57,8]]},"1979":{"position":[[419,8],[431,8]]},"1991":{"position":[[67,8]]},"1995":{"position":[[55,8],[146,8],[193,8]]},"2014":{"position":[[67,8]]},"2018":{"position":[[55,8],[146,8],[193,8]]},"2037":{"position":[[4,7]]},"2085":{"position":[[0,8]]},"2087":{"position":[[0,8]]},"2096":{"position":[[9,8],[160,8]]},"2175":{"position":[[14,8],[309,8],[323,8]]},"2182":{"position":[[46,8],[147,8]]},"2184":{"position":[[49,8],[152,8]]},"2186":{"position":[[106,8]]},"2188":{"position":[[109,8]]},"2251":{"position":[[186,8]]},"2272":{"position":[[85,8],[312,8],[324,8],[375,8]]},"2274":{"position":[[93,8]]},"2276":{"position":[[70,8]]},"2278":{"position":[[37,8]]},"2281":{"position":[[217,8]]},"2352":{"position":[[217,8]]},"2357":{"position":[[261,8]]},"2359":{"position":[[20,8],[252,8]]},"2361":{"position":[[20,8],[475,8]]},"2363":{"position":[[20,8],[293,8]]},"2365":{"position":[[20,8]]},"2367":{"position":[[20,8]]},"2369":{"position":[[20,8]]},"2371":{"position":[[20,8]]},"2373":{"position":[[20,8]]},"2379":{"position":[[94,8]]},"2381":{"position":[[77,8]]},"2391":{"position":[[214,7]]},"2395":{"position":[[166,8]]},"2406":{"position":[[688,8]]},"2415":{"position":[[381,8]]},"2434":{"position":[[748,8]]},"2476":{"position":[[72,8],[150,8],[212,8],[252,8],[320,8]]},"2478":{"position":[[182,8],[260,8],[322,8],[362,8],[430,8]]},"2490":{"position":[[79,7],[120,7]]},"2519":{"position":[[71,8],[83,8]]},"2603":{"position":[[27,8],[78,8],[135,8],[191,8]]},"2711":{"position":[[323,8],[335,8]]},"2725":{"position":[[28,8]]},"2776":{"position":[[547,8]]},"2786":{"position":[[49,8],[61,8]]},"2798":{"position":[[49,8],[61,8]]},"2803":{"position":[[25,7],[162,7]]},"2805":{"position":[[528,8]]},"2807":{"position":[[333,8],[345,8],[382,8]]},"2809":{"position":[[10,7],[98,7]]},"2811":{"position":[[33,7]]},"2813":{"position":[[14,7],[1067,8],[1082,8]]},"2815":{"position":[[7,7]]},"2817":{"position":[[7,7],[69,7],[115,7],[154,7],[210,7],[255,7]]},"2819":{"position":[[7,7],[435,8],[489,8]]},"2821":{"position":[[7,7],[60,7],[466,8],[492,8],[583,8]]},"2831":{"position":[[7,7],[521,8],[599,8],[661,8],[701,8]]},"2834":{"position":[[83,7]]},"2836":{"position":[[7,7],[29,7],[65,7],[546,8],[600,8],[659,7],[1752,8],[1806,8]]},"2838":{"position":[[17,8]]},"2848":{"position":[[107,8],[122,8],[171,8],[341,8],[1637,8]]},"2877":{"position":[[55,8],[69,8],[143,8],[157,8],[220,8],[234,8],[296,8],[310,8]]},"2879":{"position":[[185,8]]},"2881":{"position":[[711,8]]},"2889":{"position":[[422,8]]},"2897":{"position":[[442,8]]},"2901":{"position":[[234,8],[246,8]]},"2910":{"position":[[21,7],[124,7]]},"2927":{"position":[[251,8],[263,8]]},"2943":{"position":[[251,8],[263,8]]},"2957":{"position":[[251,8],[263,8]]},"2969":{"position":[[0,8]]},"3001":{"position":[[197,7]]},"3003":{"position":[[122,7]]},"3023":{"position":[[771,8],[780,7]]},"3136":{"position":[[262,7]]},"3144":{"position":[[344,8],[377,8]]},"3166":{"position":[[130,8]]},"3189":{"position":[[301,8]]},"3215":{"position":[[105,8],[551,8],[814,8]]},"3254":{"position":[[27,8],[80,8],[1118,8],[1234,8]]},"3275":{"position":[[0,8]]},"3287":{"position":[[1244,8],[2980,8]]},"3373":{"position":[[370,8],[392,8]]},"3379":{"position":[[57,8]]},"3381":{"position":[[19,8]]},"3389":{"position":[[995,8]]},"3391":{"position":[[311,8]]},"3393":{"position":[[563,8]]},"3399":{"position":[[459,8],[545,8],[560,8],[570,8]]},"3430":{"position":[[63,7],[1948,8],[2534,7],[3206,8],[3460,8],[3681,8],[3879,7],[4542,8]]},"3432":{"position":[[21,8],[77,8],[166,8],[942,8],[1004,8],[1112,8],[1177,8],[1343,8],[1431,8],[1622,8],[1869,8],[2164,8],[2310,8],[2467,8],[2750,7],[3162,8],[3446,8],[3934,8],[4148,8],[4412,8],[4578,8],[4884,8],[5096,7]]},"3434":{"position":[[437,8],[517,8],[931,8],[1024,8],[1176,8],[1245,8],[1337,8],[1474,8],[1701,8],[1905,8],[2073,8],[2237,8],[2513,8],[2784,8]]},"3438":{"position":[[14,8],[56,8]]},"3448":{"position":[[48,8],[146,8],[209,8]]},"3450":{"position":[[67,8],[266,8]]},"3452":{"position":[[57,8]]},"3454":{"position":[[89,8]]},"3456":{"position":[[386,8]]},"3458":{"position":[[29,8],[486,8]]},"3466":{"position":[[795,8]]},"3470":{"position":[[179,8]]},"3481":{"position":[[77,8],[89,8]]},"3498":{"position":[[7,8]]},"3524":{"position":[[109,8]]},"3543":{"position":[[7,8]]},"3575":{"position":[[0,8]]},"3581":{"position":[[415,8]]},"3583":{"position":[[603,8]]},"3587":{"position":[[26,8]]},"3589":{"position":[[0,8]]},"3591":{"position":[[0,8]]},"3593":{"position":[[33,8]]},"3601":{"position":[[167,7]]},"3630":{"position":[[393,8],[405,8],[443,8],[668,8]]},"3666":{"position":[[98,8],[110,8]]},"3668":{"position":[[40,8]]},"3676":{"position":[[190,8]]},"3680":{"position":[[83,8]]},"3708":{"position":[[3775,8]]},"3716":{"position":[[784,8]]},"3722":{"position":[[57,8]]},"3732":{"position":[[79,8],[91,8]]},"3762":{"position":[[404,8]]},"3764":{"position":[[30,8]]},"3766":{"position":[[57,8]]},"3768":{"position":[[79,8],[2461,8]]},"3772":{"position":[[42,8],[90,8],[132,8],[656,7]]},"3774":{"position":[[89,8]]},"3781":{"position":[[58,8]]},"3806":{"position":[[300,8],[1694,8]]},"3808":{"position":[[429,8]]},"3810":{"position":[[61,8]]},"3817":{"position":[[411,8],[1491,8]]},"3824":{"position":[[57,8],[104,8],[255,8]]},"3826":{"position":[[7,8],[251,8]]},"3828":{"position":[[848,8]]},"3832":{"position":[[822,8]]},"3850":{"position":[[373,7]]},"3852":{"position":[[491,7]]},"3854":{"position":[[318,7]]},"3856":{"position":[[213,7]]},"3874":{"position":[[306,7]]},"3876":{"position":[[423,7]]},"3910":{"position":[[735,8],[749,8],[823,8],[837,8],[900,8],[914,8],[976,8],[990,8],[1620,8],[1728,8],[1850,8],[1993,8],[2622,7]]},"3914":{"position":[[3485,7]]},"3916":{"position":[[2532,8],[2600,8],[2862,8],[2960,8],[3072,8],[3244,8],[8874,8]]},"3918":{"position":[[2499,8],[2511,8],[3181,8],[3934,8],[4197,7]]},"3922":{"position":[[1935,8],[2414,7]]},"3924":{"position":[[63,8],[2012,8],[3237,8]]},"3928":{"position":[[738,8],[796,8]]},"3932":{"position":[[1048,8],[2557,8]]},"3934":{"position":[[574,8]]},"3938":{"position":[[787,7]]},"3942":{"position":[[256,7],[276,8]]},"3950":{"position":[[644,8]]},"3958":{"position":[[270,7]]},"3960":{"position":[[421,8],[466,8]]},"3962":{"position":[[1279,7],[1497,8]]},"3970":{"position":[[201,8]]},"3974":{"position":[[202,7]]},"3978":{"position":[[23,8]]},"3982":{"position":[[139,8]]},"3990":{"position":[[188,8]]},"4004":{"position":[[191,8],[302,8]]}}}],["service1",{"_index":4263,"t":{"1412":{"position":[[1245,8],[1646,8]]}}}],["service2",{"_index":4264,"t":{"1412":{"position":[[1319,8],[1673,8]]},"2037":{"position":[[64,8]]}}}],["service3",{"_index":4266,"t":{"1412":{"position":[[1466,8],[1700,8]]},"2037":{"position":[[133,8]]}}}],["service4",{"_index":4267,"t":{"1412":{"position":[[1552,8],[1727,8]]},"2037":{"position":[[202,8]]}}}],["service_nam",{"_index":2812,"t":{"520":{"position":[[392,12]]},"901":{"position":[[420,12]]},"1315":{"position":[[420,12]]}}}],["servicecollect",{"_index":3487,"t":{"734":{"position":[[8039,17],[8060,17],[8156,17]]}}}],["servicecompon",{"_index":2277,"t":{"355":{"position":[[151,16]]}}}],["servicedescriptor",{"_index":3455,"t":{"734":{"position":[[1406,17],[2260,17],[3114,17],[4109,17],[4963,17],[5817,17]]}}}],["servicefilt",{"_index":5821,"t":{"1909":{"position":[[228,13],[661,13],[680,13],[806,13]]},"1913":{"position":[[1562,13],[1633,13]]},"1919":{"position":[[1010,13],[1076,13]]},"1925":{"position":[[1733,13],[1797,13]]},"1933":{"position":[[1179,13],[1246,13]]},"1941":{"position":[[1421,13],[1485,13]]}}}],["servicefilterattribut",{"_index":5801,"t":{"1903":{"position":[[184,22]]}}}],["servicelookup",{"_index":3443,"t":{"734":{"position":[[954,13],[1167,13],[1361,13],[1539,13],[1675,13],[1808,13],[2021,13],[2215,13],[2393,13],[2529,13],[2662,13],[2875,13],[3069,13],[3247,13],[3388,13],[3524,13],[3657,13],[3870,13],[4064,13],[4242,13],[4378,13],[4511,13],[4724,13],[4918,13],[5096,13],[5232,13],[5365,13],[5578,13],[5772,13],[5950,13],[6086,13],[6559,13]]}}}],["serviceprovid",{"_index":2844,"t":{"530":{"position":[[544,15]]},"730":{"position":[[247,15]]},"732":{"position":[[170,15]]},"734":{"position":[[6219,15],[6415,15]]},"1039":{"position":[[544,15]]},"1041":{"position":[[859,15],[922,15],[973,15],[1622,15],[1646,15]]},"1214":{"position":[[31,15],[280,15]]},"1434":{"position":[[18,15],[70,15]]},"1436":{"position":[[74,15]]},"1438":{"position":[[98,15]]},"1711":{"position":[[409,15],[752,15]]},"1799":{"position":[[811,15],[850,15],[1141,15]]},"1801":{"position":[[3475,15]]},"1803":{"position":[[5706,15]]},"1811":{"position":[[594,15]]},"1823":{"position":[[282,15],[355,15],[555,15]]},"2035":{"position":[[4,15],[26,15]]},"2182":{"position":[[63,15],[164,15]]},"2184":{"position":[[66,15],[169,15]]},"2186":{"position":[[123,15]]},"2188":{"position":[[126,15]]},"2476":{"position":[[89,15]]},"2478":{"position":[[199,15]]},"2589":{"position":[[469,15],[543,15],[559,15]]},"2831":{"position":[[538,15]]},"3791":{"position":[[749,15],[851,15],[921,15],[939,15],[1079,15],[1140,15],[1644,15],[1729,15],[1888,15]]},"3910":{"position":[[2183,15],[2238,15]]},"3966":{"position":[[1613,15]]},"3992":{"position":[[1229,15]]},"4004":{"position":[[207,15]]}}}],["serviceproviderenginescop",{"_index":3467,"t":{"734":{"position":[[6460,26],[6487,26],[6573,26]]}}}],["serviceproviderserviceextens",{"_index":3468,"t":{"734":{"position":[[6673,32],[6814,32]]}}}],["servicescop",{"_index":5698,"t":{"1823":{"position":[[224,12],[340,12],[542,12],[695,12]]},"3791":{"position":[[1063,12],[1127,12],[1545,12],[1714,12],[1875,12],[2097,12]]}}}],["servicescopefactori",{"_index":4330,"t":{"1436":{"position":[[18,19]]}}}],["servicetyp",{"_index":3453,"t":{"734":{"position":[[1250,11],[1441,11],[1589,11],[1722,11],[2104,11],[2295,11],[2443,11],[2576,11],[2958,11],[3149,11],[3302,11],[3438,11],[3571,11],[3953,11],[4144,11],[4292,11],[4425,11],[4807,11],[4998,11],[5146,11],[5279,11],[5661,11],[5852,11],[6000,11],[6133,11],[6262,11],[6447,11],[6616,11],[6757,11]]}}}],["session",{"_index":868,"t":{"121":{"position":[[91,7],[116,7],[221,7],[285,7]]},"2843":{"position":[[92,7]]},"2848":{"position":[[4,7],[20,7],[904,7],[938,7],[993,7],[1056,7],[1097,7],[1117,7],[1173,7],[1307,7],[1339,7],[1435,7],[1470,7],[1572,7],[1587,7]]},"3992":{"position":[[1100,7]]}}}],["sessionextens",{"_index":7124,"t":{"2848":{"position":[[1247,17]]}}}],["set",{"_index":1713,"t":{"235":{"position":[[183,3]]},"237":{"position":[[205,3],[455,3],[1225,3]]},"243":{"position":[[90,3]]},"253":{"position":[[239,3]]},"435":{"position":[[1147,3]]},"570":{"position":[[1767,3],[2112,3]]},"587":{"position":[[285,3],[367,3],[1786,3]]},"597":{"position":[[197,3],[306,3]]},"599":{"position":[[227,3],[336,3]]},"608":{"position":[[216,3],[313,3],[440,3],[531,3],[636,3]]},"610":{"position":[[232,3]]},"615":{"position":[[960,3]]},"639":{"position":[[43,3],[76,3],[110,3],[139,3]]},"675":{"position":[[250,3]]},"696":{"position":[[893,3],[1551,3],[1584,3],[1619,3],[1661,3],[1704,3],[1740,3],[1781,3],[1842,3],[2693,3],[2733,3],[2764,3],[2798,3],[3573,3],[3606,3],[3648,3],[3691,3],[3727,3],[4287,3],[4320,3],[4349,3],[4385,3]]},"708":{"position":[[362,3],[427,3],[499,3]]},"747":{"position":[[416,3],[508,3],[921,3]]},"763":{"position":[[54,3],[91,3],[118,3],[191,3]]},"793":{"position":[[89,3]]},"830":{"position":[[107,3],[176,3],[241,3],[313,3]]},"844":{"position":[[385,3],[414,3],[450,3]]},"851":{"position":[[377,3],[442,3],[514,3],[597,3],[687,3],[769,3],[947,3],[1017,3],[1087,3],[1158,3],[1421,3],[1492,3],[1562,3],[1633,3],[1922,3],[2014,3]]},"877":{"position":[[468,3],[541,3],[618,3],[711,3],[2074,3],[2143,3],[2231,3]]},"889":{"position":[[280,3]]},"1060":{"position":[[383,3],[452,3],[517,3]]},"1125":{"position":[[188,3],[305,3]]},"1127":{"position":[[133,3],[226,3],[304,3],[395,3]]},"1145":{"position":[[189,3],[218,3],[254,3]]},"1170":{"position":[[351,3],[875,3]]},"1185":{"position":[[114,3],[231,3],[410,3],[503,3],[581,3],[672,3]]},"1234":{"position":[[1007,3],[1038,3]]},"1244":{"position":[[294,3]]},"1248":{"position":[[175,3],[279,3]]},"1364":{"position":[[233,3],[302,3],[367,3],[439,3]]},"1394":{"position":[[258,3]]},"1424":{"position":[[726,3],[845,3]]},"1458":{"position":[[0,3]]},"1474":{"position":[[364,3]]},"1539":{"position":[[563,3],[791,3],[1020,3]]},"1767":{"position":[[147,3],[216,3]]},"1769":{"position":[[164,3]]},"1771":{"position":[[196,3]]},"1773":{"position":[[188,3],[257,3]]},"1775":{"position":[[3749,3],[3799,3]]},"1779":{"position":[[278,3],[343,3]]},"1797":{"position":[[294,3],[369,3],[449,3],[531,3],[758,3]]},"1803":{"position":[[587,3]]},"1909":{"position":[[443,8]]},"2021":{"position":[[4,8],[19,8]]},"2375":{"position":[[202,3]]},"2538":{"position":[[272,3],[305,3]]},"2607":{"position":[[391,3],[424,3]]},"2709":{"position":[[144,3],[180,3],[216,3]]},"2721":{"position":[[265,3],[301,3],[337,3],[461,3],[497,3],[533,3],[699,3],[735,3],[771,3],[913,3],[949,3],[985,3]]},"2725":{"position":[[382,3],[500,3],[563,3],[1386,3],[1433,3],[1496,3],[2003,3],[2050,3],[2113,3]]},"2727":{"position":[[423,3],[470,3],[533,3]]},"2729":{"position":[[371,3],[407,3],[443,3]]},"2735":{"position":[[268,3],[304,3],[370,3]]},"2790":{"position":[[193,3]]},"2792":{"position":[[113,3]]},"2848":{"position":[[1286,3]]},"2856":{"position":[[405,3]]},"2971":{"position":[[187,3],[220,3],[253,3],[390,3]]},"3234":{"position":[[238,3],[271,3],[529,3]]},"3236":{"position":[[462,3],[547,3]]},"3267":{"position":[[580,3],[615,3],[648,3]]},"3450":{"position":[[216,3]]},"3466":{"position":[[137,3],[159,3],[916,3],[1400,3],[1418,3],[1635,3]]},"3581":{"position":[[95,3]]},"3664":{"position":[[234,3]]},"3672":{"position":[[284,3]]},"3708":{"position":[[191,3],[255,3],[329,3],[402,3],[475,3],[548,3]]},"3716":{"position":[[764,3]]},"3750":{"position":[[104,3],[134,3]]},"3770":{"position":[[3935,3]]},"3781":{"position":[[32,3]]},"3785":{"position":[[1143,3]]},"3810":{"position":[[34,3]]},"3812":{"position":[[1711,3]]},"3914":{"position":[[1705,3],[1727,3],[1837,3],[1859,3],[1985,3],[2007,3]]},"3924":{"position":[[4563,3],[4585,3]]},"3936":{"position":[[1739,3],[1775,3],[1850,3]]}}}],["setallhead",{"_index":8570,"t":{"3704":{"position":[[889,12]]},"3924":{"position":[[4429,12]]}}}],["setarg",{"_index":8903,"t":{"3810":{"position":[[362,7],[399,7]]}}}],["setasync",{"_index":1782,"t":{"243":{"position":[[94,8]]},"253":{"position":[[800,8]]}}}],["setbodi",{"_index":8282,"t":{"3500":{"position":[[52,7],[162,7],[286,7],[455,7],[646,7]]},"3964":{"position":[[980,7]]}}}],["setbodybyt",{"_index":8302,"t":{"3522":{"position":[[41,12],[279,12],[423,12],[616,12],[795,12],[1030,12],[1214,12]]},"3918":{"position":[[1346,12]]}}}],["setcategori",{"_index":8081,"t":{"3426":{"position":[[168,11]]},"3914":{"position":[[1330,11]]}}}],["setcharact",{"_index":6184,"t":{"2333":{"position":[[452,13]]}}}],["setclient",{"_index":8281,"t":{"3498":{"position":[[318,9],[448,9]]},"3575":{"position":[[613,9]]}}}],["setcolumn",{"_index":7804,"t":{"3269":{"position":[[397,10]]}}}],["setcolumnsif",{"_index":7805,"t":{"3269":{"position":[[431,12]]}}}],["setcommandtimeout",{"_index":4055,"t":{"1192":{"position":[[33,17]]},"3966":{"position":[[1012,17]]}}}],["setconcurr",{"_index":8809,"t":{"3781":{"position":[[386,13]]}}}],["setcontentencod",{"_index":8288,"t":{"3504":{"position":[[36,18]]}}}],["setcontenttyp",{"_index":8287,"t":{"3502":{"position":[[36,14]]},"3522":{"position":[[240,14],[384,14],[577,14],[756,14],[1089,14],[1320,14],[1484,14]]},"3916":{"position":[[7232,14],[7844,14],[8688,14]]},"3918":{"position":[[2098,14],[2262,14]]}}}],["setcontextscop",{"_index":4065,"t":{"1214":{"position":[[257,16]]}}}],["setcultur",{"_index":5996,"t":{"2151":{"position":[[2,10]]},"2526":{"position":[[94,10]]},"2544":{"position":[[93,10]]},"2547":{"position":[[26,10]]},"3912":{"position":[[2082,10]]}}}],["setdescript",{"_index":8808,"t":{"3781":{"position":[[352,14]]},"3810":{"position":[[432,14]]},"3819":{"position":[[178,14],[695,14]]}}}],["setendtim",{"_index":8906,"t":{"3810":{"position":[[554,10]]}}}],["setfil",{"_index":8303,"t":{"3522":{"position":[[74,8],[1201,8],[1359,8],[1523,8]]},"3916":{"position":[[7271,8],[7883,8],[8727,8]]},"3918":{"position":[[1362,8],[2137,8],[2301,8]]}}}],["setgroupnam",{"_index":8806,"t":{"3781":{"position":[[164,12]]}}}],["sethandlerlifetim",{"_index":8368,"t":{"3579":{"position":[[355,18],[458,18]]}}}],["sethead",{"_index":8271,"t":{"3494":{"position":[[44,10],[221,10]]}}}],["sethttpmethod",{"_index":8268,"t":{"3486":{"position":[[536,13]]},"3490":{"position":[[36,13]]}}}],["setincludeannot",{"_index":8785,"t":{"3774":{"position":[[165,21]]},"3781":{"position":[[431,21]]},"3808":{"position":[[505,21],[596,21]]}}}],["setint32",{"_index":7123,"t":{"2848":{"position":[[1181,8]]}}}],["setjobid",{"_index":8805,"t":{"3781":{"position":[[137,8]]}}}],["setjobtyp",{"_index":8807,"t":{"3781":{"position":[[197,10],[274,10],[310,10]]}}}],["setjsonseri",{"_index":8289,"t":{"3506":{"position":[[126,20],[237,20],[355,20],[490,20]]}}}],["setlastruntim",{"_index":8908,"t":{"3810":{"position":[[606,14]]}}}],["setlocalvalu",{"_index":6136,"t":{"2319":{"position":[[86,13],[171,13]]},"2856":{"position":[[1801,13],[1886,13]]}}}],["setmaxnumberoferror",{"_index":8913,"t":{"3810":{"position":[[835,20]]}}}],["setmaxnumberofrun",{"_index":8911,"t":{"3810":{"position":[[759,18]]}}}],["setmessag",{"_index":8242,"t":{"3462":{"position":[[28,10]]}}}],["setnextruntim",{"_index":8909,"t":{"3810":{"position":[[666,14]]}}}],["setnumberoferror",{"_index":8912,"t":{"3810":{"position":[[800,17]]}}}],["setnumberofrun",{"_index":8910,"t":{"3810":{"position":[[726,15]]}}}],["setnumretri",{"_index":8914,"t":{"3810":{"position":[[877,13]]}}}],["setpreflightmaxag",{"_index":2476,"t":{"415":{"position":[[325,18]]},"2991":{"position":[[331,18]]}}}],["setproperti",{"_index":2314,"t":{"369":{"position":[[294,11],[335,11],[373,11],[804,11]]},"773":{"position":[[510,11],[660,11],[735,11],[956,11]]},"3781":{"position":[[492,13],[563,13]]}}}],["setqueri",{"_index":8272,"t":{"3496":{"position":[[43,10],[173,10],[284,10]]},"3912":{"position":[[862,10]]}}}],["setrequestscop",{"_index":8318,"t":{"3524":{"position":[[92,16]]}}}],["setrequesturl",{"_index":8269,"t":{"3488":{"position":[[41,13]]},"3599":{"position":[[58,13]]}}}],["setresponsestatuscod",{"_index":8587,"t":{"3708":{"position":[[2638,22]]},"3956":{"position":[[1986,22]]}}}],["setretrypolici",{"_index":8319,"t":{"3528":{"position":[[71,14]]}}}],["setretrytimeout",{"_index":8915,"t":{"3810":{"position":[[910,15]]}}}],["setrunonstart",{"_index":8917,"t":{"3810":{"position":[[982,13]]}}}],["setse",{"_index":6189,"t":{"2333":{"position":[[530,7]]}}}],["setslidingexpir",{"_index":1703,"t":{"233":{"position":[[528,20]]},"235":{"position":[[123,20]]},"253":{"position":[[739,20]]}}}],["setsqlstr",{"_index":4067,"t":{"1216":{"position":[[23,12]]}}}],["setstartnow",{"_index":8916,"t":{"3810":{"position":[[948,11]]}}}],["setstarttim",{"_index":8905,"t":{"3810":{"position":[[513,12]]}}}],["setstatu",{"_index":8904,"t":{"3810":{"position":[[470,9]]}}}],["setstr",{"_index":7122,"t":{"2848":{"position":[[1125,9],[1347,9]]}}}],["setswitch",{"_index":6790,"t":{"2674":{"position":[[362,9]]}}}],["settempl",{"_index":8270,"t":{"3492":{"position":[[71,12],[257,12]]}}}],["settimeout",{"_index":9127,"t":{"3914":{"position":[[2079,10]]}}}],["settokensofresponsehead",{"_index":6059,"t":{"2253":{"position":[[12,26]]},"3916":{"position":[[1196,26]]}}}],["settriggerid",{"_index":8901,"t":{"3810":{"position":[[139,12]]}}}],["settriggertyp",{"_index":8902,"t":{"3810":{"position":[[177,14],[254,14],[305,14]]}}}],["setup",{"_index":7581,"t":{"3194":{"position":[[193,5]]}}}],["setvalidationst",{"_index":8292,"t":{"3508":{"position":[[44,18],[126,18]]}}}],["setxxxscop",{"_index":4063,"t":{"1214":{"position":[[163,12]]}}}],["sever",{"_index":8528,"t":{"3702":{"position":[[683,7]]}}}],["sex",{"_index":3672,"t":{"866":{"position":[[476,3]]}}}],["sfdsfdsfdsfdsfdsfdsfdsfdsfdfdsfdsfdfdfdfd",{"_index":5270,"t":{"1689":{"position":[[213,41],[284,41],[373,41],[445,41]]}}}],["sg",{"_index":6490,"t":{"2559":{"position":[[601,2]]}}}],["sh",{"_index":4506,"t":{"1497":{"position":[[156,2]]},"1499":{"position":[[8,2]]}}}],["sha256",{"_index":1337,"t":{"188":{"position":[[296,6],[303,6],[312,6],[473,6],[485,6]]},"190":{"position":[[561,6],[618,6],[678,6],[735,6],[1000,6],[1059,6],[1121,6],[1180,6]]}}}],["shanghai",{"_index":4427,"t":{"1485":{"position":[[121,8]]}}}],["shape",{"_index":2926,"t":{"560":{"position":[[4,6],[107,6],[395,5],[497,5],[557,5],[619,5],[706,6],[717,5]]}}}],["shapetyp",{"_index":2939,"t":{"560":{"position":[[414,9],[479,9],[539,9],[599,9]]}}}],["sharedresourc",{"_index":6409,"t":{"2538":{"position":[[125,14],[151,14],[228,14],[344,14],[425,14],[533,14],[609,14]]},"3920":{"position":[[435,14]]}}}],["shell",{"_index":4495,"t":{"1495":{"position":[[1242,5]]},"1497":{"position":[[142,5],[312,5]]}}}],["shift",{"_index":9555,"t":{"3938":{"position":[[369,5]]}}}],["short",{"_index":4444,"t":{"1488":{"position":[[197,5]]},"1495":{"position":[[197,5]]}}}],["shortid",{"_index":6173,"t":{"2333":{"position":[[72,7],[148,7]]}}}],["shortidgen",{"_index":6174,"t":{"2333":{"position":[[82,10],[158,10],[441,10],[519,10],[558,10]]}}}],["shouldrun",{"_index":8884,"t":{"3806":{"position":[[2709,9],[2994,9],[3091,9]]}}}],["show",{"_index":3329,"t":{"685":{"position":[[4,4],[51,4]]}}}],["shuang",{"_index":6968,"t":{"2768":{"position":[[1055,6]]}}}],["shut",{"_index":4368,"t":{"1474":{"position":[[59,8]]},"3430":{"position":[[311,4],[2925,4],[4232,4]]},"3432":{"position":[[2880,4],[5449,4]]},"3601":{"position":[[526,4]]}}}],["si",{"_index":6640,"t":{"2559":{"position":[[2082,2]]}}}],["signalr",{"_index":2482,"t":{"415":{"position":[[448,7]]},"423":{"position":[[0,7],[185,7],[244,7]]},"1470":{"position":[[25,7]]},"2991":{"position":[[454,7]]},"3138":{"position":[[216,7]]},"3140":{"position":[[53,7]]},"3142":{"position":[[13,7],[91,7],[257,7],[287,7]]},"3144":{"position":[[30,7]]},"3146":{"position":[[0,7]]},"3148":{"position":[[87,7],[139,7]]},"3150":{"position":[[43,7],[205,7]]},"3154":{"position":[[109,7]]},"3156":{"position":[[2,7],[127,7],[309,7],[371,7]]},"3158":{"position":[[118,7],[484,7]]},"3160":{"position":[[0,7]]},"3189":{"position":[[6,7],[471,7]]},"3194":{"position":[[21,7],[101,7],[175,7],[259,7],[395,7],[478,7]]},"3205":{"position":[[35,7],[49,7],[77,7]]},"3924":{"position":[[358,7],[1490,7]]},"3986":{"position":[[1258,7]]}}}],["signalrsupport",{"_index":2481,"t":{"415":{"position":[[428,14]]},"423":{"position":[[263,14],[315,14]]},"2991":{"position":[[434,14]]},"3924":{"position":[[333,14]]}}}],["signininput",{"_index":3059,"t":{"587":{"position":[[198,11]]}}}],["signintoswagg",{"_index":365,"t":{"36":{"position":[[12,15]]},"2245":{"position":[[149,15]]},"3684":{"position":[[115,15]]},"3954":{"position":[[379,15],[437,15]]}}}],["signouttoswagg",{"_index":367,"t":{"38":{"position":[[12,16]]},"2247":{"position":[[48,16]]},"3982":{"position":[[356,16]]}}}],["silenc",{"_index":7177,"t":{"2899":{"position":[[190,7],[472,7]]},"2903":{"position":[[69,7]]},"3371":{"position":[[438,7]]},"3389":{"position":[[945,7]]},"3910":{"position":[[1258,7]]},"3924":{"position":[[133,7],[2202,7],[3186,7]]}}}],["simplecli",{"_index":7645,"t":{"3224":{"position":[[51,12]]}}}],["singl",{"_index":2924,"t":{"558":{"position":[[276,6]]},"956":{"position":[[49,6],[463,6]]},"1566":{"position":[[862,6]]},"3069":{"position":[[362,6]]}}}],["singleasync",{"_index":3825,"t":{"956":{"position":[[856,11],[1336,11]]}}}],["singlefileenviron",{"_index":5953,"t":{"2063":{"position":[[67,21]]},"3934":{"position":[[319,21]]}}}],["singlefilepublish",{"_index":7361,"t":{"3071":{"position":[[342,17]]}}}],["singleordefault",{"_index":2903,"t":{"550":{"position":[[595,15]]},"956":{"position":[[113,15]]}}}],["singleordefaultasync",{"_index":3826,"t":{"956":{"position":[[931,20]]}}}],["singleton",{"_index":4301,"t":{"1420":{"position":[[704,9]]},"3001":{"position":[[265,9]]}}}],["site",{"_index":7934,"t":{"3339":{"position":[[40,4]]}}}],["size",{"_index":287,"t":{"19":{"position":[[271,4],[690,4]]},"1127":{"position":[[188,4]]},"1131":{"position":[[144,4]]},"1185":{"position":[[465,4]]},"1302":{"position":[[178,4],[247,4]]},"1741":{"position":[[361,4],[1242,4],[2011,4],[2458,4]]},"1747":{"position":[[134,4]]}}}],["sk",{"_index":6636,"t":{"2559":{"position":[[2045,2],[2053,2],[2056,2]]}}}],["skip",{"_index":6245,"t":{"2369":{"position":[[156,4]]}}}],["skipproxi",{"_index":9743,"t":{"3962":{"position":[[938,9]]}}}],["skipscan",{"_index":9741,"t":{"3962":{"position":[[894,8]]}}}],["sku",{"_index":418,"t":{"51":{"position":[[177,3]]},"62":{"position":[[177,3]]},"75":{"position":[[177,3]]}}}],["skype",{"_index":7485,"t":{"3136":{"position":[[225,5]]}}}],["sl",{"_index":6638,"t":{"2559":{"position":[[2070,2],[2079,2]]}}}],["slash",{"_index":4937,"t":{"1526":{"position":[[29,7],[85,7]]}}}],["slave",{"_index":3930,"t":{"1066":{"position":[[1390,5],[1545,5]]},"1071":{"position":[[28,5],[36,5],[48,5]]},"1073":{"position":[[39,6]]},"1075":{"position":[[11,6],[34,5]]}}}],["slave1",{"_index":3928,"t":{"1064":{"position":[[846,6]]}}}],["slaveconnectionstr",{"_index":3919,"t":{"1056":{"position":[[184,21],[668,21]]}}}],["slavedbcontext",{"_index":3920,"t":{"1056":{"position":[[222,14],[252,14],[300,14],[332,14]]},"1058":{"position":[[351,14]]},"1062":{"position":[[137,14],[177,14]]}}}],["slavedbcontextloc",{"_index":2795,"t":{"516":{"position":[[726,22]]},"1056":{"position":[[268,21],[436,21],[584,21]]},"1058":{"position":[[367,21]]},"1060":{"position":[[239,21]]},"1064":{"position":[[303,21],[481,21]]},"1066":{"position":[[131,22]]}}}],["sleep",{"_index":2723,"t":{"490":{"position":[[103,5]]},"2468":{"position":[[38,5]]}}}],["sleepmillisecond",{"_index":2750,"t":{"494":{"position":[[620,17]]}}}],["slidingexpir",{"_index":1683,"t":{"233":{"position":[[86,17]]}}}],["sln",{"_index":3421,"t":{"724":{"position":[[15,3]]},"1488":{"position":[[513,3],[563,3]]}}}],["slot",{"_index":3457,"t":{"734":{"position":[[1489,4],[2343,4],[3197,4],[4192,4],[5046,4],[5900,4]]}}}],["sm2",{"_index":5280,"t":{"1691":{"position":[[17,3],[314,3]]}}}],["sm2util",{"_index":5290,"t":{"1691":{"position":[[326,8],[355,8]]}}}],["sm3",{"_index":5293,"t":{"1691":{"position":[[374,3]]}}}],["sm3util",{"_index":5295,"t":{"1691":{"position":[[391,8],[406,8],[418,8],[477,8]]}}}],["sm4",{"_index":5298,"t":{"1691":{"position":[[500,3]]}}}],["sm4util",{"_index":5299,"t":{"1691":{"position":[[508,8],[523,8],[535,8],[598,8],[626,8]]}}}],["smell",{"_index":4233,"t":{"1392":{"position":[[135,5],[228,5]]}}}],["smtp",{"_index":2567,"t":{"445":{"position":[[222,4],[242,4]]},"447":{"position":[[129,4],[150,4],[210,4],[231,4]]}}}],["smtpserver",{"_index":2584,"t":{"447":{"position":[[89,10],[173,10]]}}}],["snapshot",{"_index":6833,"t":{"2715":{"position":[[78,8],[140,8]]}}}],["snupkg",{"_index":6780,"t":{"2649":{"position":[[56,6],[198,6]]},"2657":{"position":[[12,6]]},"3964":{"position":[[277,6]]}}}],["sock",{"_index":4431,"t":{"1485":{"position":[[228,4],[249,4]]}}}],["socket",{"_index":6100,"t":{"2305":{"position":[[69,6]]}}}],["socketshttphandl",{"_index":8379,"t":{"3589":{"position":[[472,18],[506,18],[602,18],[628,18],[775,18]]}}}],["softwar",{"_index":4962,"t":{"1539":{"position":[[168,8]]},"2910":{"position":[[7,8],[98,8],[161,8]]},"3702":{"position":[[2313,8],[2492,8]]}}}],["solidifi",{"_index":1940,"t":{"286":{"position":[[121,8],[163,8],[212,8]]}}}],["solut",{"_index":4454,"t":{"1488":{"position":[[538,8]]}}}],["solutiondir",{"_index":4453,"t":{"1488":{"position":[[523,11]]}}}],["solutionnam",{"_index":4446,"t":{"1488":{"position":[[410,12],[549,12],[593,12],[609,12]]},"1495":{"position":[[410,12],[537,12],[553,12]]},"1499":{"position":[[32,12],[101,12]]}}}],["someattribut",{"_index":364,"t":{"34":{"position":[[40,13]]},"2243":{"position":[[62,13],[292,13]]}}}],["someclass",{"_index":5477,"t":{"1781":{"position":[[174,9],[405,9],[435,9]]},"3432":{"position":[[2492,9]]}}}],["someclassnam",{"_index":8133,"t":{"3432":{"position":[[2589,13]]},"3434":{"position":[[2205,13]]}}}],["somedto",{"_index":8284,"t":{"3500":{"position":[[656,7],[694,7]]}}}],["somemethod",{"_index":8976,"t":{"3834":{"position":[[283,10]]}}}],["somemethodasync",{"_index":8838,"t":{"3795":{"position":[[422,15],[625,15]]}}}],["somesecond",{"_index":8895,"t":{"3808":{"position":[[1914,10]]}}}],["somesecondattribut",{"_index":8894,"t":{"3808":{"position":[[1777,19],[1825,19]]}}}],["somesecondtrigg",{"_index":8877,"t":{"3806":{"position":[[1412,17],[1449,17],[1766,17],[1939,17],[2081,17],[2223,17],[2365,17],[2507,17],[2649,17],[2752,17],[2789,17]]},"3808":{"position":[[1872,17]]}}}],["someservic",{"_index":4322,"t":{"1428":{"position":[[70,12],[139,12]]},"1711":{"position":[[500,11]]}}}],["sometag",{"_index":8285,"t":{"3500":{"position":[[665,7],[684,7]]}}}],["someth",{"_index":5329,"t":{"1707":{"position":[[203,9]]}}}],["somevalu",{"_index":8286,"t":{"3500":{"position":[[673,9]]}}}],["sourc",{"_index":1626,"t":{"220":{"position":[[498,6]]},"247":{"position":[[218,6],[311,6]]},"520":{"position":[[12,6],[42,6],[291,6]]},"544":{"position":[[99,6],[188,6]]},"688":{"position":[[499,6]]},"901":{"position":[[12,6],[42,6],[319,6]]},"1313":{"position":[[106,6],[203,6],[380,6]]},"1315":{"position":[[12,6],[42,6],[319,6]]},"1379":{"position":[[159,6],[177,6],[405,6]]},"1497":{"position":[[33,6],[233,6]]},"1547":{"position":[[130,6],[346,6]]},"1549":{"position":[[261,6],[426,6]]},"1795":{"position":[[370,6],[632,6],[878,6],[1232,6],[1646,6],[1865,6]]},"1801":{"position":[[2490,6],[2583,6]]},"1803":{"position":[[4445,6],[4501,6]]},"1807":{"position":[[443,6],[605,6],[718,6]]},"2694":{"position":[[90,7],[237,7]]},"2945":{"position":[[599,6],[827,6]]},"3399":{"position":[[848,7]]},"3702":{"position":[[2171,6]]},"3744":{"position":[[442,6]]},"3936":{"position":[[1259,6]]}}}],["sourcecod",{"_index":6397,"t":{"2530":{"position":[[50,10]]}}}],["sp",{"_index":6633,"t":{"2559":{"position":[[1983,2],[2017,2]]},"3273":{"position":[[544,2]]}}}],["sp_school",{"_index":7815,"t":{"3273":{"position":[[544,9]]}}}],["sparetim",{"_index":6038,"t":{"2206":{"position":[[0,9]]},"2208":{"position":[[10,9],[62,9],[110,9],[160,9]]},"2210":{"position":[[10,9]]},"2212":{"position":[[0,9]]},"2214":{"position":[[0,9],[41,9]]},"2216":{"position":[[0,9]]},"2218":{"position":[[0,9]]},"2220":{"position":[[14,9]]},"2222":{"position":[[13,9]]},"2224":{"position":[[15,9]]},"2226":{"position":[[16,9]]},"2228":{"position":[[23,9]]},"2395":{"position":[[24,9],[38,9],[54,9]]},"2398":{"position":[[137,9]]},"2400":{"position":[[0,9]]},"2402":{"position":[[71,9],[230,9]]},"2404":{"position":[[65,9],[144,9]]},"2406":{"position":[[151,9],[235,10],[447,9],[542,10]]},"2409":{"position":[[12,9]]},"2411":{"position":[[0,9]]},"2413":{"position":[[0,9],[184,9]]},"2415":{"position":[[153,9],[222,10]]},"2426":{"position":[[12,9]]},"2428":{"position":[[12,9]]},"2430":{"position":[[0,9]]},"2432":{"position":[[0,9],[204,9]]},"2434":{"position":[[150,9],[226,10],[476,9],[563,10]]},"2438":{"position":[[0,9]]},"2440":{"position":[[0,9],[374,9],[435,9]]},"2442":{"position":[[6,9],[157,10],[186,9],[264,9],[335,10],[489,9],[567,10],[720,9],[840,10],[998,9],[1045,9],[1123,10],[1271,9],[1357,10],[1517,9],[1614,10],[1761,9],[1842,10]]},"2444":{"position":[[1,9]]},"2446":{"position":[[0,9]]},"2448":{"position":[[10,9],[62,9],[110,9],[160,9]]},"2450":{"position":[[10,9]]},"2452":{"position":[[0,9]]},"2454":{"position":[[0,9],[41,9]]},"2456":{"position":[[0,9]]},"2458":{"position":[[0,9]]},"2460":{"position":[[14,9]]},"2462":{"position":[[13,9]]},"2464":{"position":[[15,9]]},"2468":{"position":[[0,9]]},"2470":{"position":[[1,9],[116,10]]},"2472":{"position":[[59,9]]},"2476":{"position":[[0,9]]},"2478":{"position":[[1,9],[116,10]]},"2488":{"position":[[6,10]]},"3950":{"position":[[910,9]]},"3962":{"position":[[1802,9]]},"3972":{"position":[[407,10]]},"3974":{"position":[[302,9]]},"3976":{"position":[[37,9]]}}}],["sparetimeattribut",{"_index":9854,"t":{"3966":{"position":[[1905,18]]}}}],["sparetimeexecutetyp",{"_index":6354,"t":{"2444":{"position":[[280,21],[310,21]]},"2468":{"position":[[201,21]]},"2470":{"position":[[60,21]]},"2478":{"position":[[60,21]]}}}],["sparetimelisten",{"_index":6363,"t":{"2486":{"position":[[84,17],[246,17]]}}}],["sparetimerexecut",{"_index":6365,"t":{"2486":{"position":[[422,18]]}}}],["spars",{"_index":4178,"t":{"1379":{"position":[[323,6]]}}}],["sparsecheckout",{"_index":4175,"t":{"1379":{"position":[[273,14]]}}}],["special",{"_index":8601,"t":{"3716":{"position":[[836,9],[1080,9]]},"3722":{"position":[[87,7],[242,7]]}}}],["specialapi",{"_index":8608,"t":{"3720":{"position":[[57,10]]},"3722":{"position":[[267,10]]}}}],["speciallyresultprovid",{"_index":8599,"t":{"3716":{"position":[[161,23],[810,23]]}}}],["speciallyunifi",{"_index":8606,"t":{"3716":{"position":[[1107,14]]}}}],["specif",{"_index":7306,"t":{"3063":{"position":[[65,13]]},"3706":{"position":[[57,13]]}}}],["specificationauth",{"_index":7334,"t":{"3063":{"position":[[1280,17]]},"3686":{"position":[[552,17],[997,17]]},"3706":{"position":[[1291,17]]}}}],["specificationdocu",{"_index":2141,"t":{"327":{"position":[[149,21]]},"3686":{"position":[[628,21]]},"3698":{"position":[[134,21]]},"3700":{"position":[[149,21]]}}}],["specificationdocumentbuild",{"_index":8504,"t":{"3680":{"position":[[249,28]]},"3704":{"position":[[334,28],[656,28]]},"3924":{"position":[[188,28],[1918,28],[3868,28],[4196,28]]},"3966":{"position":[[258,28],[304,28]]}}}],["specificationdocumentset",{"_index":2132,"t":{"325":{"position":[[100,29]]},"3063":{"position":[[0,29]]},"3065":{"position":[[3,29]]},"3339":{"position":[[151,29]]},"3632":{"position":[[147,29]]},"3634":{"position":[[37,29]]},"3640":{"position":[[522,29]]},"3642":{"position":[[77,29]]},"3646":{"position":[[37,29]]},"3648":{"position":[[37,29]]},"3650":{"position":[[101,29]]},"3658":{"position":[[79,29]]},"3670":{"position":[[137,29]]},"3674":{"position":[[36,29]]},"3686":{"position":[[93,29],[142,29],[1067,29],[1153,29]]},"3690":{"position":[[105,29]]},"3706":{"position":[[1751,29]]},"3938":{"position":[[909,29]]},"3940":{"position":[[918,29]]}}}],["specificationlogininfo",{"_index":7331,"t":{"3063":{"position":[[1116,22]]},"3686":{"position":[[355,22]]},"3706":{"position":[[1108,22]]}}}],["specificationopenapiinfo",{"_index":7318,"t":{"3063":{"position":[[486,24],[1439,24]]},"3706":{"position":[[478,24],[1450,24]]}}}],["specificationopenapisecurityschem",{"_index":7321,"t":{"3063":{"position":[[567,34]]},"3706":{"position":[[559,34]]}}}],["specservic",{"_index":4292,"t":{"1418":{"position":[[157,11]]}}}],["spgetus",{"_index":2900,"t":{"550":{"position":[[527,9]]}}}],["split",{"_index":1148,"t":{"152":{"position":[[317,5],[591,5]]}}}],["splitcamelcas",{"_index":5174,"t":{"1641":{"position":[[69,14]]},"1647":{"position":[[0,14],[163,14],[270,14],[383,14],[426,14]]},"3994":{"position":[[945,14]]}}}],["splitfield",{"_index":7710,"t":{"3234":{"position":[[483,10]]}}}],["splitinsert",{"_index":7695,"t":{"3232":{"position":[[138,11]]}}}],["splittabl",{"_index":7696,"t":{"3234":{"position":[[1,10],[583,10]]}}}],["splittestt",{"_index":7703,"t":{"3234":{"position":[[115,14],[165,14]]}}}],["splittesttable_",{"_index":7702,"t":{"3234":{"position":[[115,15]]}}}],["splittyp",{"_index":7697,"t":{"3234":{"position":[[12,9]]}}}],["spring",{"_index":4593,"t":{"1511":{"position":[[400,6]]}}}],["sq",{"_index":6429,"t":{"2559":{"position":[[26,2],[35,2]]}}}],["sql",{"_index":693,"t":{"110":{"position":[[83,3]]},"239":{"position":[[224,3]]},"241":{"position":[[5,3]]},"247":{"position":[[4,3],[61,3],[88,3],[105,3],[127,3],[172,3],[198,3],[288,3]]},"255":{"position":[[138,3],[194,3],[278,3]]},"504":{"position":[[267,3]]},"540":{"position":[[64,3]]},"556":{"position":[[4,3],[150,3]]},"558":{"position":[[4,3],[209,3]]},"572":{"position":[[250,3],[492,3],[503,3],[539,3],[548,3],[605,3],[937,3],[948,3],[984,3],[993,3],[1050,3]]},"653":{"position":[[169,3]]},"685":{"position":[[558,3]]},"719":{"position":[[35,3]]},"799":{"position":[[16,3],[33,3]]},"801":{"position":[[84,3]]},"810":{"position":[[278,3]]},"812":{"position":[[294,3]]},"814":{"position":[[276,3]]},"816":{"position":[[292,3]]},"834":{"position":[[143,3]]},"836":{"position":[[205,3]]},"879":{"position":[[16,3]]},"887":{"position":[[194,3]]},"899":{"position":[[1773,3]]},"924":{"position":[[47,3],[139,3]]},"929":{"position":[[2216,3],[2432,3],[2739,3],[2921,3],[3191,3],[3412,3],[3724,3],[3911,3]]},"949":{"position":[[145,3]]},"996":{"position":[[21,3],[52,3]]},"998":{"position":[[41,3],[92,3]]},"1012":{"position":[[30,3],[89,3]]},"1014":{"position":[[34,3],[98,3]]},"1026":{"position":[[102,3]]},"1033":{"position":[[31,3]]},"1037":{"position":[[469,3],[630,3]]},"1101":{"position":[[16,3],[33,3]]},"1103":{"position":[[53,3],[216,3]]},"1107":{"position":[[40,3],[76,3],[203,3]]},"1111":{"position":[[300,3]]},"1113":{"position":[[296,3]]},"1115":{"position":[[296,3]]},"1117":{"position":[[2829,3],[2923,3],[3027,3],[3141,3],[3265,3],[3399,3],[3543,3],[3697,3]]},"1119":{"position":[[277,3]]},"1121":{"position":[[293,3]]},"1123":{"position":[[242,3]]},"1129":{"position":[[431,3],[1343,3]]},"1131":{"position":[[22,3]]},"1135":{"position":[[3,3]]},"1155":{"position":[[16,3],[33,3],[72,3],[122,3],[153,3]]},"1157":{"position":[[19,3]]},"1194":{"position":[[23,3],[440,3]]},"1196":{"position":[[17,3],[64,3]]},"1198":{"position":[[26,3]]},"1200":{"position":[[3,3]]},"1221":{"position":[[0,3],[20,3],[49,3],[68,3]]},"1223":{"position":[[91,3],[108,3]]},"1225":{"position":[[14,3],[36,3]]},"1227":{"position":[[23,3],[54,3],[62,3],[68,3]]},"1231":{"position":[[4,3]]},"1234":{"position":[[111,3],[243,3],[374,3],[758,3],[842,3],[1049,3]]},"1236":{"position":[[111,3],[246,3],[380,3]]},"1238":{"position":[[111,3],[286,3],[460,3]]},"1240":{"position":[[111,3],[307,3],[502,3]]},"1267":{"position":[[245,3]]},"1271":{"position":[[0,3]]},"1277":{"position":[[42,3],[61,3],[99,3],[125,3],[164,3],[205,3],[221,3]]},"1279":{"position":[[23,3],[59,3],[79,3],[616,3],[792,3]]},"1286":{"position":[[14,3],[69,3],[84,3],[117,3]]},"1289":{"position":[[3,3],[24,3],[36,3]]},"1291":{"position":[[16,3]]},"1293":{"position":[[4,3]]},"1295":{"position":[[151,3]]},"1302":{"position":[[55,3]]},"1566":{"position":[[565,3]]},"1761":{"position":[[88,3],[177,3],[208,3],[222,3],[264,3],[271,3],[305,3],[323,3],[342,3],[449,3],[464,3],[470,3],[495,3]]},"1799":{"position":[[108,3]]},"2981":{"position":[[484,3]]},"3215":{"position":[[495,3],[531,3],[540,3]]},"3218":{"position":[[277,3]]},"3222":{"position":[[259,3]]},"3254":{"position":[[615,3],[639,3],[701,3],[990,3],[1014,3],[1076,3],[1217,3],[1326,3],[1360,3],[1523,3]]},"3263":{"position":[[185,3]]},"3273":{"position":[[2,3],[101,3]]},"3275":{"position":[[229,3],[295,3],[412,3],[425,3],[500,3]]},"3287":{"position":[[1141,3]]},"3770":{"position":[[2690,3]]},"3785":{"position":[[367,3],[383,3],[524,3],[658,3]]},"3812":{"position":[[645,3],[661,3],[800,3],[932,3]]},"3914":{"position":[[2439,3],[2655,3]]},"3918":{"position":[[1054,3]]},"3932":{"position":[[232,3],[261,3],[1097,3],[1954,3],[2198,3]]},"3934":{"position":[[647,3],[661,3]]},"3936":{"position":[[299,3]]},"3946":{"position":[[336,3]]},"3948":{"position":[[473,3]]},"3950":{"position":[[48,3]]},"3952":{"position":[[760,3]]},"3962":{"position":[[198,3],[269,3],[419,3],[457,3],[980,3],[1736,3]]},"3964":{"position":[[1023,3]]},"3966":{"position":[[135,3]]},"3974":{"position":[[743,3]]},"3978":{"position":[[497,3],[787,3]]},"3980":{"position":[[56,3],[769,3]]},"3986":{"position":[[1075,3],[1425,3]]},"3990":{"position":[[698,3]]},"3992":{"position":[[285,3],[1671,3],[1767,3],[2505,3],[2896,3],[3153,3]]},"3994":{"position":[[292,3],[978,3],[1149,3]]},"3996":{"position":[[734,3],[807,3],[819,3]]},"3998":{"position":[[724,3]]},"4004":{"position":[[391,3]]}}}],["sqlclient",{"_index":2879,"t":{"546":{"position":[[25,9]]}}}],["sqlcommandauditinterceptor",{"_index":2997,"t":{"572":{"position":[[292,26],[1351,26]]}}}],["sqlcommandprofilerinterceptor",{"_index":3763,"t":{"929":{"position":[[187,29]]}}}],["sqlconnect",{"_index":7872,"t":{"3291":{"position":[[563,13],[1530,13]]},"3992":{"position":[[2303,13]]}}}],["sqlconnectioninterceptor",{"_index":3750,"t":{"927":{"position":[[191,24]]}}}],["sqldbcontextloc",{"_index":4077,"t":{"1234":{"position":[[543,19],[663,19]]},"1236":{"position":[[552,19],[674,19]]},"1238":{"position":[[676,19],[827,19]]},"1240":{"position":[[739,19],[911,19]]},"1273":{"position":[[11,19],[72,19]]},"1275":{"position":[[7,19],[56,19]]},"1277":{"position":[[267,19],[296,19]]}}}],["sqlexcuet",{"_index":4086,"t":{"1248":{"position":[[38,10]]}}}],["sqlexecut",{"_index":4073,"t":{"1234":{"position":[[126,10],[258,10],[388,10],[507,10],[627,10]]},"1236":{"position":[[126,10],[261,10],[394,10],[516,10],[638,10]]},"1238":{"position":[[126,10],[301,10],[474,10],[614,10],[755,10]]},"1240":{"position":[[126,10],[322,10],[516,10],[677,10],[839,10],[1051,10]]},"1242":{"position":[[107,10],[187,10],[263,10]]},"1244":{"position":[[107,10],[197,10],[268,10]]},"1246":{"position":[[105,10]]},"1248":{"position":[[149,10],[253,10]]},"1269":{"position":[[29,10]]},"1273":{"position":[[36,10]]},"1279":{"position":[[340,10]]},"1295":{"position":[[161,10]]},"3932":{"position":[[2030,10],[2121,10],[2278,10]]}}}],["sqlexecutepart",{"_index":4066,"t":{"1216":{"position":[[0,14]]}}}],["sqlexecuteproxi",{"_index":3600,"t":{"810":{"position":[[121,15]]},"812":{"position":[[129,15]]},"814":{"position":[[120,15]]},"816":{"position":[[128,15]]},"1109":{"position":[[743,15],[795,15],[815,15],[833,15]]},"1111":{"position":[[131,15]]},"1113":{"position":[[129,15]]},"1115":{"position":[[129,15]]},"1119":{"position":[[121,15]]},"1121":{"position":[[129,15]]},"1123":{"position":[[102,15]]},"1129":{"position":[[193,15],[1027,15]]}}}],["sqlfunction",{"_index":3883,"t":{"1037":{"position":[[640,11]]},"1267":{"position":[[107,11]]},"1275":{"position":[[152,11]]},"1279":{"position":[[226,11]]},"1281":{"position":[[61,11]]}}}],["sqlfunctionqueri",{"_index":3603,"t":{"814":{"position":[[48,16],[196,16],[282,16],[365,16]]},"816":{"position":[[48,16],[204,16],[298,16],[389,16]]},"1190":{"position":[[51,16],[104,16],[167,16],[226,16]]},"1194":{"position":[[823,16],[840,16]]}}}],["sqlfunctionqueryasync",{"_index":4054,"t":{"1190":{"position":[[323,21],[387,21],[461,21],[531,21]]}}}],["sqlfunctionscalar",{"_index":3595,"t":{"810":{"position":[[48,17],[197,17],[284,17],[368,17]]},"812":{"position":[[48,17],[205,17],[300,17],[392,17]]},"1188":{"position":[[47,17],[97,17],[159,17],[217,17]]},"1194":{"position":[[782,17]]}}}],["sqlfunctionscalarasync",{"_index":4053,"t":{"1188":{"position":[[308,22],[369,22],[442,22],[511,22]]},"1194":{"position":[[800,22]]}}}],["sqlite",{"_index":633,"t":{"102":{"position":[[88,6]]},"514":{"position":[[564,6]]},"520":{"position":[[0,6]]},"524":{"position":[[472,6],[574,6]]},"534":{"position":[[347,6]]},"544":{"position":[[132,6],[221,6]]},"546":{"position":[[35,6],[57,6]]},"653":{"position":[[376,6]]},"698":{"position":[[499,6],[536,6]]},"706":{"position":[[192,6]]},"713":{"position":[[524,6]]},"759":{"position":[[131,6],[156,6]]},"761":{"position":[[180,6],[193,6]]},"803":{"position":[[10,6]]},"805":{"position":[[10,6]]},"895":{"position":[[10,6]]},"897":{"position":[[72,6],[109,6]]},"899":{"position":[[246,6],[299,6]]},"901":{"position":[[0,6]]},"905":{"position":[[215,6]]},"907":{"position":[[203,6]]},"909":{"position":[[193,6]]},"947":{"position":[[273,6],[767,6]]},"1037":{"position":[[212,6]]},"1066":{"position":[[334,6]]},"1103":{"position":[[183,6]]},"1105":{"position":[[10,6]]},"1234":{"position":[[955,6]]},"1309":{"position":[[236,6],[273,6]]},"1311":{"position":[[160,6]]},"1313":{"position":[[412,6]]},"1315":{"position":[[0,6]]},"1319":{"position":[[193,6]]},"1353":{"position":[[343,6]]},"2925":{"position":[[223,6]]},"2933":{"position":[[217,6]]},"2935":{"position":[[288,6]]},"2937":{"position":[[385,6]]},"2941":{"position":[[223,6]]},"2955":{"position":[[223,6]]},"2963":{"position":[[204,6]]},"3211":{"position":[[151,6]]},"3287":{"position":[[402,6],[742,6]]},"3980":{"position":[[419,6],[536,6]]}}}],["sqlite3connectionstr",{"_index":1625,"t":{"220":{"position":[[466,23]]},"534":{"position":[[310,23]]},"570":{"position":[[328,23]]},"653":{"position":[[339,23]]},"688":{"position":[[467,23]]},"745":{"position":[[123,23]]},"832":{"position":[[162,23]]},"846":{"position":[[385,23]]},"947":{"position":[[236,23],[730,23]]},"1066":{"position":[[297,23]]},"1311":{"position":[[123,23]]},"1313":{"position":[[74,23],[171,23]]},"1353":{"position":[[306,23]]},"2925":{"position":[[186,23]]},"2933":{"position":[[180,23]]},"2935":{"position":[[251,23]]},"2937":{"position":[[348,23]]},"2941":{"position":[[186,23]]},"2955":{"position":[[186,23]]},"2963":{"position":[[167,23]]}}}],["sqlitedbcontext",{"_index":2783,"t":{"514":{"position":[[512,15]]},"1151":{"position":[[497,15]]},"1317":{"position":[[468,15]]}}}],["sqlitedbcontextloc",{"_index":3738,"t":{"905":{"position":[[288,22]]},"907":{"position":[[270,22]]},"909":{"position":[[255,22]]},"911":{"position":[[138,22]]},"913":{"position":[[113,22]]},"1037":{"position":[[279,22]]},"1151":{"position":[[204,22]]},"1204":{"position":[[141,22]]}}}],["sqlitedbcontextlocaotr",{"_index":2784,"t":{"514":{"position":[[529,22]]},"1317":{"position":[[485,22]]}}}],["sqliterepositori",{"_index":3737,"t":{"905":{"position":[[237,16]]},"907":{"position":[[225,16]]},"909":{"position":[[215,16]]},"1037":{"position":[[234,16]]}}}],["sqllocatorrepositori",{"_index":5978,"t":{"2111":{"position":[[4,20]]}}}],["sqlnonqueri",{"_index":4044,"t":{"1170":{"position":[[109,11],[290,11],[380,11],[477,11]]},"1194":{"position":[[509,11]]},"3964":{"position":[[878,11],[1027,11]]}}}],["sqlnonqueryasync",{"_index":4045,"t":{"1170":{"position":[[617,16],[803,16],[904,16],[1012,16]]},"1194":{"position":[[521,16]]}}}],["sqlprocedur",{"_index":3960,"t":{"1109":{"position":[[493,12]]},"1251":{"position":[[107,12],[170,12],[228,12]]},"1253":{"position":[[107,12],[173,12],[234,12]]},"1255":{"position":[[107,12],[165,12],[218,12]]},"1257":{"position":[[107,12],[187,12],[262,12],[390,12]]},"1259":{"position":[[107,12],[165,12],[218,12]]},"1261":{"position":[[107,12],[163,12],[214,12]]},"1263":{"position":[[107,12],[190,12],[273,12]]},"1265":{"position":[[105,12]]},"1267":{"position":[[170,12]]},"1275":{"position":[[215,12]]},"1279":{"position":[[281,12]]}}}],["sqlprocedurenonqueri",{"_index":3990,"t":{"1123":{"position":[[36,20],[168,20],[248,20],[329,20]]},"1183":{"position":[[54,20],[120,20],[225,20],[307,20]]},"1194":{"position":[[692,20]]}}}],["sqlprocedurenonqueryasync",{"_index":4050,"t":{"1183":{"position":[[401,25],[478,25],[594,25],[687,25]]},"1194":{"position":[[713,25]]}}}],["sqlprocedureoutput",{"_index":4004,"t":{"1129":{"position":[[78,18],[308,18],[437,18],[564,18],[860,18],[1168,18],[1349,18],[1528,18]]},"1185":{"position":[[758,18],[856,18],[985,18]]},"1194":{"position":[[739,18]]}}}],["sqlprocedureoutputasync",{"_index":4051,"t":{"1185":{"position":[[1138,23],[1247,23],[1387,23]]},"1194":{"position":[[758,23]]}}}],["sqlprocedurequeri",{"_index":3956,"t":{"1107":{"position":[[122,17],[169,17],[209,17]]},"1109":{"position":[[887,17],[957,17]]},"1111":{"position":[[52,17],[213,17],[306,17],[400,17]]},"1113":{"position":[[50,19],[209,19],[302,19],[396,19]]},"1115":{"position":[[47,17],[206,17],[302,17],[399,17]]},"1117":{"position":[[114,19],[205,19],[306,19],[417,19],[538,19],[669,19],[810,19],[961,19],[1802,19],[1896,19],[2000,19],[2114,19],[2238,19],[2372,19],[2516,19],[2670,19],[2835,19],[2929,19],[3033,19],[3147,19],[3271,19],[3405,19],[3549,19],[3703,19],[3869,19],[3946,19],[4033,19],[4130,19],[4237,19],[4354,19],[4481,19],[4618,19]]},"1173":{"position":[[53,17],[109,17],[177,17]]},"1175":{"position":[[51,17],[113,17],[187,17]]},"1177":{"position":[[51,19],[107,19],[175,19]]},"1179":{"position":[[51,19],[126,19],[228,19],[360,19]]},"1194":{"position":[[563,17],[604,19]]}}}],["sqlprocedurequeriesasync",{"_index":4048,"t":{"1177":{"position":[[277,24],[344,24],[423,24]]},"1179":{"position":[[498,24],[584,24],[697,24],[840,24]]},"1194":{"position":[[624,24]]}}}],["sqlprocedurequeryasync",{"_index":4047,"t":{"1173":{"position":[[279,22],[346,22],[425,22]]},"1175":{"position":[[295,22],[368,22],[453,22]]},"1194":{"position":[[581,22]]}}}],["sqlprocedurescalar",{"_index":3988,"t":{"1119":{"position":[[48,18],[196,18],[283,18],[368,18]]},"1121":{"position":[[48,18],[204,18],[299,18],[392,18]]},"1181":{"position":[[49,18],[114,18],[220,18]]},"1194":{"position":[[649,18]]}}}],["sqlprocedurescalarasync",{"_index":4049,"t":{"1181":{"position":[[333,23],[409,23],[526,23]]},"1194":{"position":[[668,23]]}}}],["sqlprofil",{"_index":7771,"t":{"3254":{"position":[[673,11],[1048,11]]},"3275":{"position":[[472,11]]}}}],["sqlprovid",{"_index":2876,"t":{"544":{"position":[[55,11],[120,11],[209,11]]}}}],["sqlproxi",{"_index":5979,"t":{"2113":{"position":[[4,8]]},"4006":{"position":[[207,8]]}}}],["sqlproxymethod",{"_index":4099,"t":{"1279":{"position":[[137,14],[545,14],[721,14],[880,14],[945,14]]}}}],["sqlqueri",{"_index":3882,"t":{"1037":{"position":[[531,8]]},"1160":{"position":[[64,8],[144,8],[249,8],[388,8],[524,8],[628,8],[711,8],[848,8]]},"1162":{"position":[[62,8],[148,8],[259,8],[404,8],[546,8],[656,8],[745,8],[888,8]]},"1164":{"position":[[88,10],[209,10],[379,10]]},"1166":{"position":[[100,10],[249,10],[466,10]]},"1192":{"position":[[56,8]]},"1194":{"position":[[92,8],[163,8],[263,8],[340,8],[459,8],[482,10]]},"1196":{"position":[[70,8]]},"1198":{"position":[[79,8]]},"1204":{"position":[[71,8],[167,8]]},"1212":{"position":[[142,8],[215,8]]},"1214":{"position":[[297,8]]},"1216":{"position":[[60,8]]},"1295":{"position":[[31,8],[117,8]]},"1297":{"position":[[23,8]]},"3273":{"position":[[579,8],[609,8]]},"3996":{"position":[[1619,8]]}}}],["sqlqueriesasync",{"_index":4040,"t":{"1164":{"position":[[499,15],[631,15],[812,15]]},"1166":{"position":[[634,15],[794,15],[1022,15]]},"1194":{"position":[[493,15]]},"3287":{"position":[[298,15],[623,15]]}}}],["sqlquerizeasync",{"_index":10237,"t":{"3992":{"position":[[1804,15]]}}}],["sqlqueryabl",{"_index":7808,"t":{"3273":{"position":[[22,12]]}}}],["sqlqueryasync",{"_index":4037,"t":{"1160":{"position":[[943,13],[1034,13],[1150,13],[1300,13],[1447,13],[1562,13],[1656,13],[1804,13]]},"1162":{"position":[[989,13],[1086,13],[1208,13],[1364,13],[1517,13],[1638,13],[1738,13],[1892,13]]},"1194":{"position":[[468,13]]}}}],["sqlquerysingl",{"_index":7816,"t":{"3273":{"position":[[654,14]]}}}],["sqlrepositori",{"_index":3594,"t":{"810":{"position":[[34,13]]},"812":{"position":[[34,13]]},"814":{"position":[[34,13]]},"816":{"position":[[34,13]]},"909":{"position":[[46,13],[139,13],[234,13]]},"996":{"position":[[32,13]]},"998":{"position":[[52,13]]},"1026":{"position":[[113,13]]},"1033":{"position":[[4,13]]},"1109":{"position":[[218,13],[266,13],[284,13],[300,13]]},"1111":{"position":[[38,13]]},"1113":{"position":[[36,13]]},"1115":{"position":[[33,13]]},"1117":{"position":[[100,13],[191,13],[292,13],[403,13],[524,13],[655,13],[796,13],[947,13],[1127,13],[1186,13],[1252,13],[1325,13],[1405,13],[1492,13],[1586,13],[1687,13]]},"1119":{"position":[[34,13]]},"1121":{"position":[[34,13]]},"1123":{"position":[[22,13]]},"1129":{"position":[[64,13],[846,13]]},"1194":{"position":[[78,13],[149,13],[249,13],[326,13]]},"1206":{"position":[[46,13]]},"2109":{"position":[[4,13]]},"3978":{"position":[[525,13]]}}}],["sqlscalar",{"_index":4041,"t":{"1168":{"position":[[78,9],[163,9],[255,9]]},"1194":{"position":[[538,9]]},"3996":{"position":[[721,9]]}}}],["sqlscalarasync",{"_index":4042,"t":{"1168":{"position":[[369,14],[465,14],[568,14]]},"1194":{"position":[[548,14]]}}}],["sqlserver",{"_index":632,"t":{"102":{"position":[[78,9]]},"241":{"position":[[55,9]]},"514":{"position":[[424,9]]},"520":{"position":[[154,9]]},"524":{"position":[[672,9],[771,9]]},"546":{"position":[[0,9]]},"655":{"position":[[229,9]]},"679":{"position":[[141,9]]},"685":{"position":[[144,9],[246,9]]},"698":{"position":[[425,9],[449,9],[489,9]]},"803":{"position":[[0,9]]},"805":{"position":[[0,9]]},"895":{"position":[[0,9]]},"897":{"position":[[0,9],[40,9],[54,9]]},"899":{"position":[[6,9],[62,9],[123,9],[206,9],[1069,9],[1095,9],[1213,9],[1296,9]]},"901":{"position":[[154,9]]},"1075":{"position":[[50,9]]},"1105":{"position":[[0,9]]},"1309":{"position":[[164,9],[204,9],[218,9]]},"1315":{"position":[[154,9]]},"2917":{"position":[[64,9]]},"3126":{"position":[[234,9]]},"3211":{"position":[[3,9],[141,9]]},"3226":{"position":[[122,9],[432,9]]},"3228":{"position":[[101,9]]},"3254":{"position":[[183,9]]},"3275":{"position":[[103,9]]},"3946":{"position":[[254,9]]},"3966":{"position":[[2009,9]]},"3980":{"position":[[21,9]]},"3992":{"position":[[2461,9]]}}}],["sqlserver2008querytranslationpostprocessorfactori",{"_index":3741,"t":{"915":{"position":[[294,49]]}}}],["sqlserverdb",{"_index":7684,"t":{"3226":{"position":[[392,11],[615,11]]}}}],["sqlservic",{"_index":3958,"t":{"1109":{"position":[[181,10],[240,10],[704,10],[767,10]]}}}],["sqlsugar",{"_index":539,"t":{"91":{"position":[[272,8],[288,8]]},"93":{"position":[[303,8],[334,8],[370,8],[409,8],[452,8],[497,8],[559,8],[601,8]]},"199":{"position":[[108,8],[337,8],[378,8]]},"2774":{"position":[[102,8],[433,8]]},"3207":{"position":[[9,8],[67,8],[104,8],[128,8]]},"3209":{"position":[[0,8],[97,8]]},"3213":{"position":[[12,8]]},"3215":{"position":[[266,8],[398,8],[590,8],[652,8]]},"3228":{"position":[[85,8]]},"3238":{"position":[[4,8]]},"3240":{"position":[[35,8],[50,8]]},"3248":{"position":[[85,8]]},"3250":{"position":[[0,8],[96,8],[133,8],[169,8],[191,8]]},"3252":{"position":[[18,8],[62,8]]},"3254":{"position":[[1504,8],[1694,8]]},"3256":{"position":[[161,8]]},"3273":{"position":[[983,8],[998,8]]},"3275":{"position":[[276,8],[455,8]]},"3287":{"position":[[1387,8],[1491,8]]},"3319":{"position":[[0,8],[83,8],[128,8],[176,8],[228,8],[284,8],[360,8],[414,8]]},"3321":{"position":[[118,8],[155,8],[184,8],[203,8],[355,8]]},"3323":{"position":[[192,8]]},"3924":{"position":[[677,8]]},"3930":{"position":[[802,8]]},"3936":{"position":[[241,8],[907,8]]},"3938":{"position":[[413,8]]},"3966":{"position":[[1986,8]]},"3972":{"position":[[490,8]]},"3982":{"position":[[181,8],[510,8]]},"3986":{"position":[[1056,8]]},"3990":{"position":[[610,8]]},"3992":{"position":[[268,8],[451,8],[2056,8],[3002,8]]},"3994":{"position":[[1407,8]]}}}],["sqlsugarcli",{"_index":7679,"t":{"3224":{"position":[[1805,14]]},"3226":{"position":[[0,14],[24,14]]},"3256":{"position":[[129,14]]},"3258":{"position":[[22,14]]},"3287":{"position":[[1552,14],[1623,14],[1690,14],[1709,14],[1726,14],[2005,14],[2320,14],[2638,14],[2942,14]]},"3434":{"position":[[271,14]]},"3452":{"position":[[644,14]]},"3916":{"position":[[3640,14]]},"3982":{"position":[[539,14]]}}}],["sqlsugarcor",{"_index":9282,"t":{"3920":{"position":[[1837,12]]}}}],["sqlsugarrepositori",{"_index":7776,"t":{"3256":{"position":[[215,18],[250,18]]}}}],["sqlsugarscop",{"_index":7613,"t":{"3215":{"position":[[384,13],[413,13],[605,13]]},"3224":{"position":[[1787,13]]},"3228":{"position":[[14,13],[37,13]]},"3321":{"position":[[274,13]]}}}],["sqlsugarsetup",{"_index":7605,"t":{"3215":{"position":[[29,13]]}}}],["sqlsugarunitofwork",{"_index":7856,"t":{"3287":{"position":[[1438,18],[1655,18],[3003,18]]},"3924":{"position":[[694,18]]}}}],["sqlwith",{"_index":7782,"t":{"3261":{"position":[[245,7]]}}}],["squar",{"_index":2934,"t":{"560":{"position":[[237,6],[549,6]]}}}],["squarepars",{"_index":2933,"t":{"560":{"position":[[187,12],[565,12]]}}}],["sr",{"_index":6632,"t":{"2559":{"position":[[1980,2],[2014,2]]}}}],["src",{"_index":2020,"t":{"308":{"position":[[95,3]]},"310":{"position":[[93,3],[654,3],[692,3],[949,3]]},"321":{"position":[[104,3]]},"2690":{"position":[[201,3],[208,3],[224,3],[264,3],[271,3]]},"3401":{"position":[[246,3]]}}}],["ss",{"_index":5966,"t":{"2087":{"position":[[79,2]]},"2361":{"position":[[209,2],[301,2],[606,2]]},"2398":{"position":[[80,2],[248,2]]},"2400":{"position":[[111,2]]},"2402":{"position":[[182,2]]},"2406":{"position":[[325,2],[632,2]]},"2409":{"position":[[119,2]]},"2411":{"position":[[107,2]]},"2413":{"position":[[107,2]]},"2415":{"position":[[312,2]]},"2426":{"position":[[128,2]]},"2428":{"position":[[130,2]]},"2430":{"position":[[114,2]]},"2432":{"position":[[114,2]]},"2434":{"position":[[316,2],[653,2]]},"2438":{"position":[[184,2]]},"2440":{"position":[[220,2],[593,2]]},"2442":{"position":[[425,2],[657,2],[930,2],[1213,2],[1447,2],[1704,2],[1932,2]]},"2468":{"position":[[148,2]]},"2470":{"position":[[206,2]]},"2472":{"position":[[337,2]]},"2751":{"position":[[297,2]]},"3430":{"position":[[3762,2]]},"3432":{"position":[[4979,2]]}}}],["ssh",{"_index":4485,"t":{"1491":{"position":[[13,3]]},"1493":{"position":[[21,3]]},"1497":{"position":[[29,3],[225,3]]}}}],["ssl",{"_index":2570,"t":{"445":{"position":[[279,3],[359,3]]},"3585":{"position":[[20,3]]},"3589":{"position":[[660,3]]},"3934":{"position":[[986,3]]}}}],["sslclientauthenticationopt",{"_index":8384,"t":{"3589":{"position":[[813,30]]}}}],["sslmode",{"_index":2802,"t":{"520":{"position":[[127,7]]},"901":{"position":[[127,7]]},"1315":{"position":[[127,7]]}}}],["ssloption",{"_index":8383,"t":{"3589":{"position":[[796,10]]}}}],["sslpolicyerror",{"_index":8388,"t":{"3589":{"position":[[913,15]]}}}],["sso",{"_index":7110,"t":{"2846":{"position":[[391,3]]}}}],["st",{"_index":7788,"t":{"3263":{"position":[[42,2],[87,2],[117,2],[132,2],[143,2],[200,2],[220,2],[286,2],[315,2]]}}}],["stack",{"_index":8966,"t":{"3832":{"position":[[2164,5],[3925,5],[4919,5]]}}}],["stackexchang",{"_index":2873,"t":{"540":{"position":[[106,13]]}}}],["stackexchangeredi",{"_index":1776,"t":{"241":{"position":[[117,18]]}}}],["stackoverflow",{"_index":6258,"t":{"2383":{"position":[[158,13]]}}}],["stacktrac",{"_index":762,"t":{"112":{"position":[[1502,10]]},"1925":{"position":[[1364,10]]},"1933":{"position":[[577,10]]},"3452":{"position":[[3176,10]]},"3916":{"position":[[6172,10]]}}}],["stage",{"_index":2521,"t":{"429":{"position":[[175,7],[198,7]]},"451":{"position":[[132,7],[216,7]]},"2055":{"position":[[144,5]]}}}],["standard",{"_index":620,"t":{"100":{"position":[[44,8]]},"2387":{"position":[[40,8]]},"2420":{"position":[[41,8],[77,8],[259,8],[387,8],[531,8],[569,8],[628,8],[670,8],[718,8],[773,8],[836,8],[882,8],[935,8],[986,8],[1037,8],[1093,8],[1149,8],[1198,8],[1266,8],[1314,8],[1359,8],[1413,8],[1958,8],[2006,8],[2056,8],[2108,8],[2157,8],[2206,8],[2258,8]]},"2426":{"position":[[335,8]]},"2444":{"position":[[250,8]]}}}],["stanee",{"_index":6973,"t":{"2768":{"position":[[1107,7]]}}}],["star",{"_index":2373,"t":{"397":{"position":[[156,5],[324,5]]},"399":{"position":[[89,5],[190,5],[341,5],[442,5],[782,5]]},"401":{"position":[[42,5]]}}}],["stardat",{"_index":3847,"t":{"977":{"position":[[4,8],[138,8]]}}}],["start",{"_index":3350,"t":{"696":{"position":[[638,7]]},"713":{"position":[[109,7]]},"734":{"position":[[123,7]]},"1456":{"position":[[4,5]]},"1803":{"position":[[1136,5],[3894,5]]},"2212":{"position":[[10,5]]},"2402":{"position":[[240,5]]},"2413":{"position":[[194,5]]},"2432":{"position":[[214,5]]},"2452":{"position":[[10,5]]},"2745":{"position":[[33,5],[93,5]]},"2747":{"position":[[43,5],[103,5]]},"2749":{"position":[[58,5],[99,8]]},"2751":{"position":[[520,5]]},"2762":{"position":[[17,5],[55,5]]},"2764":{"position":[[167,5]]},"2836":{"position":[[1030,5]]},"2856":{"position":[[325,5]]},"3080":{"position":[[259,5],[319,5],[499,5],[626,5],[667,8]]},"3082":{"position":[[380,5]]},"3194":{"position":[[560,5]]},"3430":{"position":[[286,7],[2900,7],[4207,7]]},"3432":{"position":[[2855,7],[5424,7]]},"3601":{"position":[[501,7],[892,5],[1492,5]]},"3702":{"position":[[780,7]]},"3770":{"position":[[2312,5],[2583,5],[2609,5],[4131,5],[4396,5],[4420,5]]},"3812":{"position":[[1904,5],[2169,5],[2193,5]]},"3850":{"position":[[247,7]]},"3874":{"position":[[10,5],[180,7]]}}}],["start_now",{"_index":8752,"t":{"3770":{"position":[[2583,9],[4396,9]]},"3812":{"position":[[2169,9]]}}}],["start_tim",{"_index":8742,"t":{"3770":{"position":[[2312,10],[4131,10]]},"3812":{"position":[[1904,10]]}}}],["startal",{"_index":9004,"t":{"3850":{"position":[[18,8],[66,8]]}}}],["startasync",{"_index":7083,"t":{"2817":{"position":[[46,10],[82,10],[611,10],[673,10]]}}}],["startat",{"_index":8868,"t":{"3806":{"position":[[209,7],[227,7],[1594,7],[1612,7],[2924,7],[2942,7],[3034,7],[3112,7]]}}}],["startdat",{"_index":3706,"t":{"885":{"position":[[271,9],[309,9],[349,9]]}}}],["startmod",{"_index":4380,"t":{"1474":{"position":[[279,9]]}}}],["startnew",{"_index":2726,"t":{"490":{"position":[[299,8]]},"492":{"position":[[527,8]]},"1803":{"position":[[1431,8]]},"2315":{"position":[[174,8]]},"2482":{"position":[[427,8]]},"2484":{"position":[[527,8]]},"2825":{"position":[[427,8]]},"2827":{"position":[[573,8]]},"2829":{"position":[[672,8]]}}}],["startnow",{"_index":6286,"t":{"2402":{"position":[[58,8],[202,8]]},"2406":{"position":[[193,8],[489,8]]},"2413":{"position":[[167,8]]},"2415":{"position":[[180,8]]},"2432":{"position":[[186,8]]},"2434":{"position":[[184,8],[510,8]]},"2442":{"position":[[292,8],[524,8],[796,8],[1026,8],[1080,8],[1299,8],[1556,8],[1789,8]]},"2444":{"position":[[170,8]]},"2470":{"position":[[29,8]]},"2478":{"position":[[29,8]]},"3770":{"position":[[1132,8],[5876,8]]},"3798":{"position":[[611,8]]},"3802":{"position":[[1162,8],[1765,8],[2204,8]]},"3808":{"position":[[3196,8]]},"3812":{"position":[[550,8],[1354,8],[2821,8]]},"3817":{"position":[[1373,8],[2357,8]]},"3821":{"position":[[849,8]]},"3896":{"position":[[774,8]]}}}],["startswith",{"_index":3123,"t":{"599":{"position":[[504,10]]},"763":{"position":[[267,10]]},"979":{"position":[[36,10]]},"3430":{"position":[[734,10],[996,10],[1402,10]]}}}],["starttim",{"_index":8723,"t":{"3770":{"position":[[879,9],[5663,9]]},"3798":{"position":[[310,9]]},"3802":{"position":[[873,9],[1500,9],[2128,9],[2439,9],[2551,9]]},"3808":{"position":[[2995,9]]},"3812":{"position":[[285,9],[1196,9],[2608,9]]},"3817":{"position":[[1084,9],[2092,9]]},"3821":{"position":[[584,9]]},"3896":{"position":[[509,9]]}}}],["starttl",{"_index":2571,"t":{"445":{"position":[[286,8]]}}}],["starttrigg",{"_index":9025,"t":{"3878":{"position":[[10,12]]}}}],["startup",{"_index":939,"t":{"123":{"position":[[20,7]]},"127":{"position":[[48,7]]},"202":{"position":[[0,7],[466,7]]},"204":{"position":[[0,7],[114,7],[287,7],[451,7],[481,7],[510,7]]},"206":{"position":[[22,7],[92,7],[142,7],[184,7],[208,7],[316,7]]},"216":{"position":[[38,7],[85,7],[124,7],[297,7],[484,7],[516,7],[1258,7]]},"218":{"position":[[73,7],[89,7]]},"220":{"position":[[55,7]]},"247":{"position":[[416,7]]},"336":{"position":[[24,7],[65,7],[142,7],[165,7]]},"344":{"position":[[31,7]]},"346":{"position":[[36,7]]},"371":{"position":[[33,7]]},"455":{"position":[[678,7]]},"461":{"position":[[1524,7]]},"514":{"position":[[28,7]]},"544":{"position":[[12,7]]},"730":{"position":[[29,7]]},"1317":{"position":[[28,7]]},"1418":{"position":[[49,7]]},"1667":{"position":[[221,7]]},"1685":{"position":[[189,7]]},"1701":{"position":[[33,7]]},"1753":{"position":[[15,7]]},"1755":{"position":[[654,7]]},"1795":{"position":[[2512,7]]},"1907":{"position":[[16,7],[57,7]]},"1909":{"position":[[529,7],[547,7]]},"1963":{"position":[[28,7],[46,7]]},"1977":{"position":[[380,7]]},"1979":{"position":[[235,7],[252,7]]},"2251":{"position":[[175,7]]},"2255":{"position":[[99,7]]},"2266":{"position":[[40,7],[93,7],[188,7],[268,7],[313,7]]},"2269":{"position":[[461,7]]},"2272":{"position":[[17,7],[253,7]]},"2274":{"position":[[21,7]]},"2281":{"position":[[17,7],[158,7]]},"2283":{"position":[[21,7]]},"2357":{"position":[[179,7],[246,7]]},"2395":{"position":[[151,7]]},"2406":{"position":[[673,7]]},"2415":{"position":[[366,7]]},"2434":{"position":[[733,7]]},"2579":{"position":[[844,7]]},"2603":{"position":[[12,7]]},"2670":{"position":[[13,7]]},"2696":{"position":[[64,7]]},"2760":{"position":[[4,7],[51,7],[84,7],[99,7]]},"2776":{"position":[[449,7]]},"2805":{"position":[[510,7]]},"2807":{"position":[[121,7],[261,7]]},"2819":{"position":[[575,7]]},"2848":{"position":[[48,7],[1600,7]]},"2862":{"position":[[178,7]]},"2881":{"position":[[438,7],[458,7],[639,7],[833,7]]},"2905":{"position":[[84,7],[112,7],[255,7],[376,7],[414,7]]},"3082":{"position":[[88,7],[135,7],[168,7],[183,7]]},"3144":{"position":[[48,7],[272,7]]},"3156":{"position":[[388,7],[423,7]]},"3158":{"position":[[494,7]]},"3166":{"position":[[354,7]]},"3189":{"position":[[275,7]]},"3215":{"position":[[798,7]]},"3254":{"position":[[12,7]]},"3373":{"position":[[85,7],[116,7],[298,7]]},"3430":{"position":[[1934,7]]},"3481":{"position":[[7,7]]},"3547":{"position":[[692,7]]},"3581":{"position":[[399,7]]},"3583":{"position":[[587,7]]},"3630":{"position":[[78,7]]},"3708":{"position":[[3757,7],[3917,7]]},"3722":{"position":[[35,7]]},"3732":{"position":[[7,7]]},"3762":{"position":[[377,7]]},"3910":{"position":[[701,7]]},"3952":{"position":[[259,7]]},"3966":{"position":[[1505,7]]},"3992":{"position":[[1516,7],[3254,7]]}}}],["startupapplicationcompon",{"_index":2324,"t":{"371":{"position":[[316,27],[752,27]]}}}],["startupcompon",{"_index":2322,"t":{"371":{"position":[[47,16],[616,16]]}}}],["startupservicecompon",{"_index":2323,"t":{"371":{"position":[[107,23],[711,23]]}}}],["startwithfurstr",{"_index":3205,"t":{"615":{"position":[[615,18],[826,18]]},"617":{"position":[[1780,18]]}}}],["starup",{"_index":5845,"t":{"1913":{"position":[[1577,6]]},"1919":{"position":[[1025,6]]},"1925":{"position":[[1748,6]]},"1933":{"position":[[1194,6]]},"1941":{"position":[[1436,6]]},"2577":{"position":[[0,6]]},"2821":{"position":[[38,6]]}}}],["state",{"_index":1744,"t":{"237":{"position":[[1123,5],[1211,5]]},"570":{"position":[[965,5],[1000,5],[1034,5],[1985,5],[2330,5],[2621,5]]},"747":{"position":[[746,5],[873,5]]},"749":{"position":[[372,5],[476,5],[718,5],[843,5],[1038,5],[1146,5]]},"933":{"position":[[673,5],[705,5],[787,5]]},"2937":{"position":[[1110,5],[1142,5],[1177,5],[1258,5]]},"3452":{"position":[[3914,5],[3946,5]]},"3916":{"position":[[1035,5],[6910,5],[6942,5]]}}}],["stathread",{"_index":7176,"t":{"2899":{"position":[[115,9]]}}}],["static",{"_index":32,"t":{"3":{"position":[[274,6]]},"133":{"position":[[878,6]]},"188":{"position":[[601,6]]},"202":{"position":[[226,6],[308,6]]},"237":{"position":[[1029,6]]},"455":{"position":[[298,6],[380,6]]},"461":{"position":[[1012,6],[1094,6]]},"822":{"position":[[134,6],[231,6]]},"913":{"position":[[7,6],[146,6]]},"1279":{"position":[[109,6],[529,6],[705,6],[858,6],[928,6]]},"1539":{"position":[[411,6],[537,6],[599,6],[764,6],[827,6],[996,6],[1056,6],[1187,6],[1721,6],[1783,6]]},"1566":{"position":[[715,6]]},"1667":{"position":[[53,6]]},"1851":{"position":[[58,6],[246,6],[525,6],[773,6],[1045,6]]},"1977":{"position":[[126,6],[208,6]]},"2269":{"position":[[211,6],[293,6]]},"2579":{"position":[[642,6],[699,6]]},"2581":{"position":[[1101,6],[1158,6]]},"2776":{"position":[[199,6],[281,6]]},"2813":{"position":[[864,6],[946,6]]},"2819":{"position":[[222,6],[304,6]]},"2821":{"position":[[253,6],[335,6]]},"2836":{"position":[[312,6],[394,6],[1525,6],[1607,6]]},"2848":{"position":[[1234,6],[1274,6],[1405,6]]},"2856":{"position":[[140,6],[212,6],[287,6],[735,6],[1206,6]]},"2899":{"position":[[91,6],[126,6]]},"3158":{"position":[[265,6],[375,6]]},"3166":{"position":[[30,6],[202,6]]},"3215":{"position":[[16,6],[52,6]]},"3228":{"position":[[7,6]]},"3389":{"position":[[266,6]]},"3391":{"position":[[161,6]]},"3393":{"position":[[297,6]]},"3543":{"position":[[734,6]]},"3547":{"position":[[584,6]]},"3551":{"position":[[332,6],[556,6]]},"3553":{"position":[[310,6],[422,6]]},"3555":{"position":[[332,6],[462,6]]},"3557":{"position":[[335,6],[470,6]]},"3559":{"position":[[345,6],[495,6]]},"3708":{"position":[[3395,6]]},"3920":{"position":[[1301,6],[1411,6],[1525,6]]},"3956":{"position":[[2735,6]]}}}],["staticfileopt",{"_index":5973,"t":{"2100":{"position":[[49,17]]}}}],["statu",{"_index":6366,"t":{"2486":{"position":[[470,6]]},"2488":{"position":[[23,6]]},"2749":{"position":[[390,6]]},"3080":{"position":[[958,6]]},"3770":{"position":[[866,6],[2299,6],[4117,6],[5645,6]]},"3798":{"position":[[275,6]]},"3802":{"position":[[858,6],[1487,6],[2246,6]]},"3812":{"position":[[272,6],[1186,6],[1890,6],[2590,6]]},"3817":{"position":[[1069,6],[2079,6]]},"3821":{"position":[[571,6]]},"3896":{"position":[[496,6]]}}}],["status200ok",{"_index":8582,"t":{"3708":{"position":[[1735,11]]},"3956":{"position":[[1275,11]]}}}],["status400badrequest",{"_index":8584,"t":{"3708":{"position":[[2148,19]]},"3956":{"position":[[1589,19]]}}}],["status401unauthor",{"_index":8588,"t":{"3708":{"position":[[2757,21]]},"3956":{"position":[[2105,21]]}}}],["status403forbidden",{"_index":8592,"t":{"3708":{"position":[[2973,18]]},"3956":{"position":[[2317,18]]}}}],["status500internalservererror",{"_index":5870,"t":{"1933":{"position":[[723,28]]}}}],["statuscod",{"_index":5737,"t":{"1863":{"position":[[172,10]]},"1887":{"position":[[271,10]]},"1933":{"position":[[711,11]]},"3452":{"position":[[2803,10]]},"3708":{"position":[[173,10],[1340,10],[1723,11],[2122,10],[2136,11],[2395,10],[2552,10],[2670,10],[2712,10],[2745,11],[2838,10],[2961,11],[3051,10],[3239,10],[3450,10],[3577,10],[3590,10]]},"3716":{"position":[[598,10]]},"3720":{"position":[[126,10]]},"3916":{"position":[[5799,10]]},"3930":{"position":[[103,10]]},"3956":{"position":[[977,10],[1263,11],[1577,11],[1743,10],[1900,10],[2018,10],[2060,10],[2093,11],[2182,10],[2305,11],[2391,10],[2579,10],[2782,10],[2905,10],[2918,10]]},"4006":{"position":[[131,10]]}}}],["stddev",{"_index":1384,"t":{"190":{"position":[[548,6]]}}}],["stop",{"_index":4346,"t":{"1454":{"position":[[4,4]]},"1488":{"position":[[1137,4],[1222,4]]},"1499":{"position":[[529,4],[614,4]]},"1803":{"position":[[1837,4],[2286,4],[5123,4]]},"2214":{"position":[[10,4],[51,4]]},"2454":{"position":[[10,4],[51,4]]},"2764":{"position":[[69,4]]},"2836":{"position":[[1096,4]]},"3082":{"position":[[282,4]]}}}],["stopasync",{"_index":7085,"t":{"2817":{"position":[[188,9],[223,9],[984,9],[1045,9]]},"2899":{"position":[[557,9]]},"3910":{"position":[[1332,9]]}}}],["stoppingtoken",{"_index":2739,"t":{"492":{"position":[[362,13],[387,13],[661,13],[739,13]]},"530":{"position":[[423,13]]},"1039":{"position":[[423,13]]},"2226":{"position":[[124,13]]},"2228":{"position":[[142,13]]},"2482":{"position":[[262,13],[287,13],[567,13],[607,13]]},"2484":{"position":[[362,13],[387,13],[667,13],[748,13]]},"2805":{"position":[[352,13],[377,13],[484,13]]},"2813":{"position":[[496,13],[521,13],[658,13]]},"2817":{"position":[[775,13],[800,13],[937,13]]},"2825":{"position":[[262,13],[287,13],[567,13],[607,13]]},"2827":{"position":[[408,13],[433,13],[713,13],[794,13]]},"2829":{"position":[[456,13],[481,13],[831,13],[978,13]]},"2831":{"position":[[404,13],[429,13]]},"3762":{"position":[[221,13]]},"3768":{"position":[[396,13],[543,13]]},"3770":{"position":[[268,13],[1501,13],[2952,13],[4817,13]]},"3774":{"position":[[553,13]]},"3783":{"position":[[275,13]]},"3789":{"position":[[106,13]]},"3791":{"position":[[393,13],[1036,13],[1840,13]]},"3795":{"position":[[265,13],[378,13]]},"3806":{"position":[[3479,13]]},"3808":{"position":[[913,13],[2134,13]]},"3828":{"position":[[335,13],[541,13]]},"3832":{"position":[[229,13],[345,13],[600,13],[1896,13],[2818,13],[3657,13],[4579,13]]}}}],["storag",{"_index":3437,"t":{"734":{"position":[[773,7],[868,7],[7570,7],[7665,7]]},"3232":{"position":[[11,11],[120,11]]},"3236":{"position":[[392,11]]}}}],["store",{"_index":3947,"t":{"1103":{"position":[[13,6]]}}}],["storedprocedur",{"_index":2902,"t":{"550":{"position":[[578,15]]},"1234":{"position":[[447,15]]},"1236":{"position":[[453,15]]},"1238":{"position":[[558,15]]},"1240":{"position":[[600,15]]}}}],["str",{"_index":5233,"t":{"1679":{"position":[[81,3],[155,3]]},"1689":{"position":[[262,3],[422,3],[788,3]]},"2071":{"position":[[4,3]]},"2073":{"position":[[30,3]]},"2079":{"position":[[4,3]]},"2081":{"position":[[47,3]]},"2848":{"position":[[975,3]]},"3520":{"position":[[369,3]]},"3754":{"position":[[49,3],[116,3],[170,3],[259,3]]}}}],["str2",{"_index":5237,"t":{"1681":{"position":[[132,4],[199,4]]},"1687":{"position":[[193,4],[273,4]]}}}],["stream",{"_index":250,"t":{"15":{"position":[[215,6]]},"17":{"position":[[209,6]]},"19":{"position":[[525,6],[596,6]]},"1729":{"position":[[22,6]]},"1739":{"position":[[189,6],[369,6]]},"1741":{"position":[[697,6],[764,6],[2293,6],[2364,6]]},"1743":{"position":[[157,6],[223,6]]},"3520":{"position":[[53,6],[203,6],[215,6]]},"3522":{"position":[[517,6],[696,6],[932,6],[1123,6]]},"3561":{"position":[[53,6],[278,6]]},"3916":{"position":[[1252,6],[7071,6],[8393,6]]},"3918":{"position":[[2857,6],[2927,6]]},"3950":{"position":[[141,6]]},"3964":{"position":[[520,6]]}}}],["string",{"_index":35,"t":{"3":{"position":[[291,6],[715,6],[799,6]]},"15":{"position":[[60,6],[73,6],[92,6]]},"17":{"position":[[54,6],[67,6],[86,6]]},"114":{"position":[[970,6],[1076,6],[1104,6]]},"127":{"position":[[901,6],[1005,6],[1098,6],[1289,6],[1830,6]]},"144":{"position":[[160,6]]},"152":{"position":[[194,6]]},"188":{"position":[[618,6]]},"202":{"position":[[243,6],[346,6]]},"231":{"position":[[200,6]]},"237":{"position":[[817,6]]},"253":{"position":[[211,6]]},"272":{"position":[[122,6]]},"274":{"position":[[112,6]]},"278":{"position":[[98,6]]},"280":{"position":[[98,6]]},"282":{"position":[[98,6],[145,6],[282,6]]},"284":{"position":[[42,6],[112,6],[156,6],[183,6]]},"288":{"position":[[98,6]]},"290":{"position":[[98,6]]},"294":{"position":[[79,6]]},"310":{"position":[[468,6],[477,6],[569,6],[578,6]]},"327":{"position":[[240,6]]},"359":{"position":[[213,6]]},"369":{"position":[[237,6],[385,6]]},"371":{"position":[[506,6]]},"415":{"position":[[38,6],[92,6],[138,6],[183,6],[266,6]]},"435":{"position":[[278,6],[646,6],[1037,6]]},"455":{"position":[[315,6],[418,6]]},"461":{"position":[[1029,6],[1132,6]]},"585":{"position":[[68,6]]},"587":{"position":[[263,6],[344,6],[468,6],[561,6],[649,6],[1194,6],[1766,6]]},"597":{"position":[[287,6]]},"599":{"position":[[317,6]]},"608":{"position":[[421,6],[615,6]]},"610":{"position":[[206,6]]},"615":{"position":[[937,6]]},"639":{"position":[[57,6],[90,6]]},"696":{"position":[[1565,6],[2707,6],[2747,6],[3587,6],[4301,6],[4363,6]]},"708":{"position":[[343,6],[477,6]]},"734":{"position":[[6979,6],[6992,6],[7010,6],[7030,6],[7123,6],[7136,6],[7154,6],[7174,6]]},"747":{"position":[[397,6]]},"769":{"position":[[471,6]]},"812":{"position":[[66,6],[223,6],[318,6],[410,6]]},"830":{"position":[[157,6],[291,6]]},"844":{"position":[[366,6],[428,6]]},"851":{"position":[[358,6],[492,6],[921,6],[1000,6],[1402,6],[1903,6]]},"853":{"position":[[425,6],[512,6]]},"877":{"position":[[449,6],[2124,6]]},"889":{"position":[[261,6]]},"960":{"position":[[444,6],[555,6],[1157,6],[1466,6]]},"1024":{"position":[[89,6]]},"1037":{"position":[[832,6]]},"1060":{"position":[[433,6]]},"1109":{"position":[[550,6]]},"1121":{"position":[[67,6],[223,6],[318,6],[411,6]]},"1127":{"position":[[207,6]]},"1135":{"position":[[90,6]]},"1145":{"position":[[170,6],[232,6]]},"1160":{"position":[[273,6],[1179,6]]},"1162":{"position":[[291,6],[1245,6]]},"1166":{"position":[[341,6],[494,6],[891,6],[1055,6]]},"1168":{"position":[[173,6],[480,6]]},"1179":{"position":[[206,6],[263,6],[338,6],[408,6],[669,6],[737,6],[812,6],[893,6]]},"1181":{"position":[[133,6],[433,6]]},"1185":{"position":[[484,6]]},"1188":{"position":[[177,6],[465,6]]},"1200":{"position":[[98,6],[199,6]]},"1229":{"position":[[63,6]]},"1234":{"position":[[224,6],[788,6],[823,6],[1020,6]]},"1236":{"position":[[227,6]]},"1238":{"position":[[267,6]]},"1240":{"position":[[288,6]]},"1242":{"position":[[161,6],[322,6]]},"1244":{"position":[[345,6]]},"1251":{"position":[[284,6]]},"1253":{"position":[[293,6]]},"1255":{"position":[[269,6]]},"1257":{"position":[[348,6]]},"1259":{"position":[[192,6],[266,6]]},"1261":{"position":[[263,6]]},"1267":{"position":[[139,6]]},"1269":{"position":[[154,6]]},"1275":{"position":[[184,6]]},"1279":{"position":[[250,6],[455,6]]},"1281":{"position":[[106,6]]},"1302":{"position":[[237,6]]},"1364":{"position":[[283,6],[417,6]]},"1412":{"position":[[82,6],[145,6],[454,6],[543,6],[680,6],[819,6],[1196,6],[1761,6],[2167,6],[2402,6]]},"1424":{"position":[[241,6],[257,6],[333,6],[349,6],[1952,6],[1968,6]]},"1539":{"position":[[428,6],[544,6],[1230,6],[1260,6]]},"1557":{"position":[[751,6],[827,6]]},"1584":{"position":[[254,6],[463,6]]},"1603":{"position":[[129,6],[171,6],[215,6],[263,6],[305,6]]},"1605":{"position":[[129,6],[178,6],[227,6]]},"1607":{"position":[[129,6],[179,6],[202,6]]},"1611":{"position":[[358,6],[383,6],[426,6],[533,6]]},"1613":{"position":[[172,6]]},"1615":{"position":[[211,6]]},"1617":{"position":[[254,6],[496,6],[773,6],[1039,6]]},"1619":{"position":[[377,6]]},"1621":{"position":[[144,6],[253,6],[364,6],[544,6],[591,6],[640,6],[866,6]]},"1627":{"position":[[122,6],[141,6]]},"1633":{"position":[[312,6]]},"1641":{"position":[[19,6],[187,6],[214,6],[258,6],[302,6]]},"1643":{"position":[[251,6]]},"1645":{"position":[[245,6]]},"1647":{"position":[[301,6]]},"1649":{"position":[[204,6]]},"1651":{"position":[[172,6],[258,6]]},"1653":{"position":[[249,6]]},"1655":{"position":[[286,6]]},"1657":{"position":[[341,6]]},"1659":{"position":[[189,6],[330,6],[586,6],[765,6],[1024,6],[1206,6]]},"1661":{"position":[[60,6],[99,6],[147,6],[335,6],[370,6],[713,6],[829,6],[891,6]]},"1663":{"position":[[396,6]]},"1667":{"position":[[91,6]]},"1683":{"position":[[49,6]]},"1703":{"position":[[223,6],[400,6],[542,6]]},"1711":{"position":[[302,6]]},"1739":{"position":[[66,6]]},"1741":{"position":[[927,6],[946,6],[2478,6]]},"1745":{"position":[[190,6]]},"1767":{"position":[[197,6]]},"1769":{"position":[[145,6]]},"1771":{"position":[[177,6]]},"1773":{"position":[[238,6]]},"1779":{"position":[[259,6]]},"1795":{"position":[[2225,6],[2374,6]]},"1797":{"position":[[178,6],[194,6],[271,6],[347,6]]},"1801":{"position":[[811,6],[1066,6]]},"1803":{"position":[[917,6],[925,6],[2750,6],[2839,6],[2933,6],[3263,6],[3580,6],[3950,6],[4573,6]]},"1815":{"position":[[622,6]]},"1851":{"position":[[186,6],[266,6],[465,6],[545,6],[713,6],[985,6]]},"1857":{"position":[[79,6]]},"1885":{"position":[[60,6],[97,6]]},"1887":{"position":[[310,6],[359,6],[442,6],[483,6],[517,6]]},"1909":{"position":[[978,6]]},"1977":{"position":[[143,6],[246,6]]},"1979":{"position":[[726,6],[753,6],[884,6]]},"1991":{"position":[[280,6]]},"2014":{"position":[[280,6]]},"2132":{"position":[[67,6],[171,6],[301,6],[420,6]]},"2186":{"position":[[72,6]]},"2188":{"position":[[75,6]]},"2269":{"position":[[228,6],[331,6]]},"2313":{"position":[[159,6],[234,6],[382,6],[669,6],[778,6]]},"2315":{"position":[[92,6]]},"2333":{"position":[[332,6]]},"2345":{"position":[[345,6],[617,6]]},"2350":{"position":[[7,6]]},"2357":{"position":[[752,6],[1151,6]]},"2375":{"position":[[176,6]]},"2379":{"position":[[23,6],[737,6],[953,6]]},"2383":{"position":[[97,6]]},"2444":{"position":[[70,6],[98,6],[128,6]]},"2538":{"position":[[252,6],[286,6]]},"2553":{"position":[[49,6],[101,6],[194,6],[238,6]]},"2577":{"position":[[103,6]]},"2579":{"position":[[376,6]]},"2581":{"position":[[900,6],[1246,6]]},"2607":{"position":[[405,6]]},"2709":{"position":[[125,6],[158,6],[194,6]]},"2713":{"position":[[626,6],[1447,6],[1943,6]]},"2721":{"position":[[246,6],[279,6],[315,6],[442,6],[475,6],[511,6],[680,6],[713,6],[749,6],[894,6],[927,6],[963,6]]},"2725":{"position":[[363,6],[478,6],[541,6],[862,6],[1367,6],[1411,6],[1474,6],[1984,6],[2028,6],[2091,6],[2304,6]]},"2727":{"position":[[404,6],[448,6],[511,6]]},"2729":{"position":[[352,6],[385,6],[421,6]]},"2735":{"position":[[249,6],[282,6],[348,6]]},"2776":{"position":[[216,6],[319,6]]},"2790":{"position":[[174,6],[266,6],[715,6],[939,6],[1132,6],[1153,6]]},"2792":{"position":[[94,6],[200,6]]},"2796":{"position":[[272,6],[473,6],[687,6],[708,6]]},"2813":{"position":[[881,6],[984,6]]},"2819":{"position":[[239,6],[342,6]]},"2821":{"position":[[270,6],[373,6]]},"2836":{"position":[[329,6],[432,6],[1542,6],[1645,6]]},"2843":{"position":[[133,7]]},"2848":{"position":[[1025,6],[1316,6],[1444,6]]},"2856":{"position":[[158,6],[201,6],[231,6],[276,6],[766,6],[1229,6]]},"2872":{"position":[[82,6]]},"2879":{"position":[[280,6]]},"2887":{"position":[[344,6]]},"2949":{"position":[[344,6],[565,6]]},"2951":{"position":[[506,6]]},"2963":{"position":[[391,6],[570,6]]},"2965":{"position":[[57,6],[133,6]]},"2971":{"position":[[201,6],[234,6]]},"2981":{"position":[[264,6],[311,6],[431,6]]},"2985":{"position":[[126,6]]},"2991":{"position":[[44,6],[98,6],[144,6],[189,6],[272,6]]},"3009":{"position":[[92,6],[129,6]]},"3023":{"position":[[61,6],[100,6],[148,6],[332,6],[367,6],[710,6],[826,6],[888,6]]},"3031":{"position":[[49,6],[101,6],[194,6],[238,6]]},"3039":{"position":[[84,6],[165,6],[234,6],[384,6]]},"3041":{"position":[[112,6],[216,6],[309,6],[500,6]]},"3063":{"position":[[55,6],[115,6],[239,6],[397,6],[883,6],[1048,6],[1485,6],[1575,6],[1604,6]]},"3071":{"position":[[766,6],[1206,6]]},"3154":{"position":[[250,6],[263,6],[439,6],[452,6],[572,6],[585,6]]},"3166":{"position":[[47,6],[240,6]]},"3168":{"position":[[363,6],[376,6]]},"3189":{"position":[[165,6]]},"3194":{"position":[[350,6]]},"3215":{"position":[[145,6]]},"3222":{"position":[[28,6]]},"3234":{"position":[[252,6]]},"3236":{"position":[[290,6],[309,6]]},"3254":{"position":[[1384,6]]},"3267":{"position":[[183,6],[326,6],[629,6]]},"3273":{"position":[[854,6]]},"3275":{"position":[[309,6]]},"3339":{"position":[[329,6]]},"3345":{"position":[[191,6],[212,6]]},"3383":{"position":[[277,6]]},"3387":{"position":[[169,6]]},"3397":{"position":[[715,6],[1063,6]]},"3432":{"position":[[1554,6],[1987,6]]},"3434":{"position":[[1083,6]]},"3446":{"position":[[238,6],[1445,6],[1551,6],[1579,6]]},"3452":{"position":[[2127,6],[2385,6],[2451,6]]},"3466":{"position":[[1449,6],[1547,6]]},"3492":{"position":[[99,6]]},"3494":{"position":[[70,6]]},"3496":{"position":[[69,6]]},"3500":{"position":[[478,6]]},"3510":{"position":[[138,6]]},"3520":{"position":[[74,6],[358,6]]},"3537":{"position":[[180,6]]},"3539":{"position":[[290,6],[392,6],[496,6],[524,6]]},"3541":{"position":[[145,6],[373,6],[501,6],[703,6],[729,6]]},"3549":{"position":[[169,6]]},"3551":{"position":[[446,6]]},"3559":{"position":[[256,6],[414,6],[564,6]]},"3561":{"position":[[74,6],[410,6]]},"3575":{"position":[[79,6],[984,6]]},"3577":{"position":[[84,6]]},"3579":{"position":[[326,6]]},"3581":{"position":[[687,6]]},"3583":{"position":[[105,6],[517,6],[890,6]]},"3587":{"position":[[125,6]]},"3589":{"position":[[99,6],[716,6]]},"3636":{"position":[[353,6]]},"3638":{"position":[[306,6],[476,6]]},"3640":{"position":[[192,6],[285,6]]},"3644":{"position":[[189,6],[330,6],[586,6],[765,6],[1024,6],[1206,6]]},"3656":{"position":[[241,6]]},"3664":{"position":[[297,6]]},"3672":{"position":[[260,6]]},"3688":{"position":[[358,6],[422,6],[601,6],[681,6]]},"3692":{"position":[[147,6],[209,6]]},"3694":{"position":[[180,6]]},"3700":{"position":[[240,6]]},"3702":{"position":[[898,6],[2789,6]]},"3704":{"position":[[208,6]]},"3706":{"position":[[47,6],[107,6],[231,6],[389,6],[875,6],[1040,6],[1496,6],[1586,6],[1615,6]]},"3716":{"position":[[958,6],[1022,6],[1100,6]]},"3750":{"position":[[118,6],[148,6]]},"3752":{"position":[[271,6],[521,6],[803,6],[1123,6]]},"3777":{"position":[[70,6],[93,6],[114,6],[160,6],[206,6],[338,6],[372,6]]},"3781":{"position":[[533,6],[592,6]]},"3783":{"position":[[1795,6]]},"3798":{"position":[[75,6],[97,6],[122,6],[167,6],[205,6],[263,6]]},"3806":{"position":[[1370,6],[3140,6]]},"3808":{"position":[[2958,6],[2985,6],[3010,6],[3033,6]]},"3914":{"position":[[2219,6]]},"3916":{"position":[[5123,6],[5381,6],[5447,6]]},"3920":{"position":[[1593,6]]},"3924":{"position":[[3742,6]]},"3928":{"position":[[2007,6],[2113,6],[2141,6]]},"3932":{"position":[[2651,6]]},"3934":{"position":[[901,6],[909,6],[1294,6],[1764,6]]},"3936":{"position":[[200,6],[1720,6],[1753,6],[1828,6]]},"3938":{"position":[[1095,6],[1157,6],[1344,6]]},"3940":{"position":[[476,6],[1246,6],[1310,6],[1489,6],[1569,6]]},"3944":{"position":[[844,6],[865,6]]},"3950":{"position":[[194,6]]},"3952":{"position":[[676,6]]},"3976":{"position":[[167,6]]},"3984":{"position":[[122,6],[191,6]]},"3992":{"position":[[1797,6]]}}}],["stringbuild",{"_index":8104,"t":{"3430":{"position":[[3290,13],[3310,13],[3327,13],[3398,13]]},"3432":{"position":[[3259,13],[3279,13],[3296,13],[3367,13]]},"3434":{"position":[[2343,13],[2363,13],[2380,13],[2451,13]]}}}],["stringeventsourc",{"_index":5568,"t":{"1801":{"position":[[1627,17],[1822,17]]}}}],["stringlength",{"_index":3084,"t":{"587":{"position":[[920,12],[1740,12]]}}}],["stringloggingpart",{"_index":8241,"t":{"3462":{"position":[[0,17]]}}}],["strng",{"_index":7936,"t":{"3339":{"position":[[353,5]]}}}],["strongchathubcontext",{"_index":7560,"t":{"3168":{"position":[[187,20],[292,20],[401,20]]}}}],["stronglytypedchathub",{"_index":7545,"t":{"3154":{"position":[[484,20]]}}}],["strongpassword",{"_index":3202,"t":{"615":{"position":[[453,14],[759,14],[913,14],[1022,14]]},"617":{"position":[[1727,14],[2649,14]]},"3057":{"position":[[108,14]]}}}],["student",{"_index":3665,"t":{"866":{"position":[[112,7],[154,7]]},"1164":{"position":[[78,7],[177,7],[489,7],[599,7]]},"1166":{"position":[[39,8],[90,7],[118,7],[151,8],[217,7],[267,7],[331,8],[485,7],[567,8],[624,7],[657,7],[690,8],[762,7],[817,7],[881,8],[1046,7]]},"1179":{"position":[[102,8],[153,7],[197,8],[255,7],[316,8],[387,7],[554,8],[616,7],[660,8],[729,7],[790,8],[872,7]]},"1185":{"position":[[953,7],[1024,7],[1349,7],[1431,7]]},"1238":{"position":[[217,7],[392,7],[664,7],[805,7]]},"1240":{"position":[[217,7],[262,7],[413,7],[458,7],[637,7],[727,7],[809,7],[889,7],[986,7]]},"1257":{"position":[[154,7],[234,7],[309,7]]},"1263":{"position":[[342,7]]},"3220":{"position":[[80,7]]},"3258":{"position":[[85,7],[159,7]]},"3261":{"position":[[33,7],[86,7],[151,7],[229,7],[315,7],[369,7],[428,7]]},"3263":{"position":[[24,7],[277,7]]},"3265":{"position":[[80,7]]},"3267":{"position":[[273,7],[432,7],[495,7]]},"3271":{"position":[[42,7],[63,7],[126,7],[185,7]]},"3273":{"position":[[35,7],[59,7]]}}}],["studi",{"_index":8964,"t":{"3832":{"position":[[1928,5],[2087,5],[2850,5],[3689,5],[3848,5],[4611,5]]}}}],["studio",{"_index":169,"t":{"11":{"position":[[718,6],[803,6]]},"51":{"position":[[32,6],[169,6],[219,6],[273,6]]},"62":{"position":[[32,6],[169,6],[219,6],[273,6]]},"75":{"position":[[32,6],[169,6],[219,6],[273,6]]},"100":{"position":[[7,6]]},"104":{"position":[[19,6]]},"174":{"position":[[18,6],[48,6]]},"190":{"position":[[507,6]]},"427":{"position":[[29,6]]},"498":{"position":[[51,6]]},"675":{"position":[[313,6]]},"893":{"position":[[51,6]]},"1313":{"position":[[288,6]]},"1377":{"position":[[19,6]]},"1971":{"position":[[49,6]]},"1973":{"position":[[10,6]]},"1981":{"position":[[31,6]]},"1985":{"position":[[49,6]]},"1987":{"position":[[10,6]]},"1993":{"position":[[31,6]]},"2008":{"position":[[49,6]]},"2010":{"position":[[10,6]]},"2016":{"position":[[31,6]]},"2294":{"position":[[747,6],[851,6]]},"2506":{"position":[[10,6]]},"2646":{"position":[[31,6]]},"2811":{"position":[[10,6]]},"2836":{"position":[[731,6]]},"2864":{"position":[[10,6]]},"3301":{"position":[[7,6]]},"3305":{"position":[[36,6]]},"3309":{"position":[[7,6]]},"3323":{"position":[[436,6]]},"3327":{"position":[[21,6]]},"3329":{"position":[[62,6]]},"3407":{"position":[[7,6]]},"3636":{"position":[[698,6]]},"3930":{"position":[[1522,6]]},"3934":{"position":[[2675,6]]}}}],["style",{"_index":6399,"t":{"2532":{"position":[[32,5]]}}}],["styleurl",{"_index":2118,"t":{"321":{"position":[[206,9]]}}}],["su",{"_index":4819,"t":{"1511":{"position":[[2944,2]]}}}],["suagger",{"_index":10024,"t":{"3980":{"position":[[676,7]]}}}],["sub",{"_index":7706,"t":{"3234":{"position":[[289,3]]}}}],["submit",{"_index":5093,"t":{"1594":{"position":[[38,6]]},"1596":{"position":[[31,6]]},"1631":{"position":[[117,6]]},"1661":{"position":[[999,6]]},"3023":{"position":[[996,6]]}}}],["submiturl",{"_index":7333,"t":{"3063":{"position":[[1237,9]]},"3686":{"position":[[239,9],[258,9],[509,9],[976,9]]},"3706":{"position":[[1248,9]]},"3940":{"position":[[1007,9]]}}}],["subscrib",{"_index":2124,"t":{"321":{"position":[[442,9]]},"1707":{"position":[[120,9],[155,9]]},"1803":{"position":[[1227,9],[1262,9],[3627,9]]},"1815":{"position":[[480,9]]},"1817":{"position":[[185,9]]},"2158":{"position":[[14,9]]},"3920":{"position":[[1089,9]]}}}],["subscribemessag",{"_index":5321,"t":{"1703":{"position":[[167,16],[310,16],[344,16],[478,16]]},"1711":{"position":[[246,16]]}}}],["subscript",{"_index":5599,"t":{"1803":{"position":[[1159,12]]}}}],["substr",{"_index":3517,"t":{"763":{"position":[[151,9]]}}}],["succe",{"_index":1090,"t":{"135":{"position":[[549,7]]},"3840":{"position":[[46,7]]},"3842":{"position":[[71,7],[611,7],[1220,7],[1794,7],[2397,7],[3030,7]]},"3844":{"position":[[71,7]]},"3846":{"position":[[60,7],[316,7]]},"3862":{"position":[[46,7]]},"3882":{"position":[[48,7]]},"3884":{"position":[[46,7]]},"3886":{"position":[[48,7]]},"3888":{"position":[[48,7]]},"3892":{"position":[[48,7]]}}}],["succeed",{"_index":3351,"t":{"696":{"position":[[655,9]]},"713":{"position":[[126,9]]},"734":{"position":[[140,9]]},"3452":{"position":[[2995,9]]},"3708":{"position":[[312,9],[3277,9],[3467,9],[3602,9],[3614,9]]},"3720":{"position":[[144,9]]},"3916":{"position":[[5991,9]]},"3956":{"position":[[2617,9],[2799,9],[2930,9],[2942,9]]},"3994":{"position":[[690,9]]}}}],["success",{"_index":2495,"t":{"419":{"position":[[178,7]]},"587":{"position":[[1612,7]]},"1488":{"position":[[1551,7]]},"1495":{"position":[[1205,7]]},"1555":{"position":[[484,7]]},"2098":{"position":[[37,7]]},"2725":{"position":[[1043,7],[2485,7]]},"3940":{"position":[[809,7]]},"3994":{"position":[[675,9]]}}}],["successfulli",{"_index":8770,"t":{"3772":{"position":[[796,12]]},"3842":{"position":[[373,12],[1003,12],[1568,12],[2158,12],[2799,12],[3416,12]]},"3844":{"position":[[380,12]]},"3846":{"position":[[619,12]]},"3850":{"position":[[234,12]]},"3852":{"position":[[353,12]]},"3854":{"position":[[472,12]]},"3874":{"position":[[167,12]]},"3876":{"position":[[285,12]]}}}],["sugarcolumn",{"_index":7704,"t":{"3234":{"position":[[183,11]]},"3267":{"position":[[506,11]]}}}],["sugarparamet",{"_index":7811,"t":{"3273":{"position":[[193,14],[216,14],[245,14],[401,14],[446,14]]}}}],["sugart",{"_index":7701,"t":{"3234":{"position":[[103,10]]}}}],["sum",{"_index":288,"t":{"19":{"position":[[284,3]]},"973":{"position":[[29,3],[55,3],[84,3],[115,3],[144,3],[178,3],[225,3],[291,3],[362,3]]},"975":{"position":[[29,3],[88,3],[152,3],[237,3],[307,3],[382,3]]},"1566":{"position":[[477,3]]},"1741":{"position":[[2024,3]]},"3261":{"position":[[350,3],[380,3]]}}}],["sumasync",{"_index":3844,"t":{"973":{"position":[[257,8],[328,8],[402,8]]}}}],["summari",{"_index":1061,"t":{"133":{"position":[[283,7],[316,7],[378,7],[402,7],[774,7],[798,7]]},"146":{"position":[[262,7],[295,7],[357,7],[398,7],[713,7],[747,7]]},"188":{"position":[[639,7]]},"344":{"position":[[92,7],[120,7],[184,7],[208,7]]},"346":{"position":[[90,7],[117,7],[185,7],[210,7]]},"348":{"position":[[96,7],[144,7],[204,7],[236,7]]},"508":{"position":[[241,7],[269,7]]},"510":{"position":[[271,7],[299,7]]},"516":{"position":[[246,7],[274,7]]},"518":{"position":[[176,7],[204,7]]},"570":{"position":[[509,7],[537,7]]},"572":{"position":[[234,7],[263,7]]},"597":{"position":[[444,7],[469,7],[575,7],[601,7]]},"615":{"position":[[311,7],[336,7],[474,7],[514,7]]},"708":{"position":[[184,7],[208,7],[289,7],[311,7],[374,7],[396,7],[439,7],[461,7]]},"747":{"position":[[247,7],[271,7],[359,7],[381,7],[428,7],[457,7],[520,7],[547,7]]},"749":{"position":[[5,7],[37,7],[190,7],[231,7],[492,7],[533,7],[856,7],[897,7]]},"830":{"position":[[53,7],[77,7],[119,7],[141,7],[188,7],[210,7],[253,7],[275,7]]},"851":{"position":[[218,7],[242,7],[304,7],[326,7],[389,7],[411,7],[454,7],[476,7],[526,7],[548,7],[609,7],[632,7],[699,7],[722,7],[881,7],[905,7],[959,7],[984,7],[1029,7],[1051,7],[1099,7],[1121,7],[1276,7],[1300,7],[1364,7],[1386,7],[1433,7],[1455,7],[1504,7],[1526,7],[1574,7],[1596,7],[1781,7],[1805,7],[1865,7],[1887,7],[1934,7],[1963,7]]},"877":{"position":[[213,7],[235,7],[327,7],[351,7],[411,7],[433,7],[480,7],[504,7],[553,7],[575,7],[630,7],[652,7],[723,7],[749,7],[1143,7],[1167,7],[2022,7],[2044,7],[2086,7],[2108,7],[2155,7],[2177,7]]},"889":{"position":[[292,7],[318,7]]},"1041":{"position":[[52,7],[79,7],[376,7],[401,7],[434,7],[462,7],[805,7],[833,7],[999,7],[1024,7],[1111,7],[1143,7],[1338,7],[1370,7]]},"1054":{"position":[[113,7],[141,7]]},"1056":{"position":[[132,7],[160,7],[531,7],[562,7]]},"1060":{"position":[[269,7],[293,7],[395,7],[417,7],[464,7],[486,7]]},"1064":{"position":[[208,7],[239,7],[346,7],[373,7],[557,7],[582,7],[739,7],[764,7]]},"1066":{"position":[[810,7],[841,7],[938,7],[965,7],[1102,7],[1127,7],[1284,7],[1308,7],[1438,7],[1463,7]]},"1364":{"position":[[99,7],[124,7],[179,7],[203,7],[245,7],[267,7],[314,7],[336,7],[379,7],[401,7]]},"1368":{"position":[[500,7],[524,7]]},"1424":{"position":[[663,7],[689,7],[738,7],[796,7],[857,7],[881,7]]},"1539":{"position":[[465,7],[496,7],[695,7],[719,7],[927,7],[953,7]]},"1767":{"position":[[90,7],[117,7],[159,7],[181,7]]},"1769":{"position":[[107,7],[129,7]]},"1771":{"position":[[139,7],[161,7]]},"1773":{"position":[[136,7],[158,7],[200,7],[222,7]]},"1779":{"position":[[221,7],[243,7],[290,7],[312,7]]},"1797":{"position":[[306,7],[331,7],[381,7],[411,7],[461,7],[487,7],[562,7],[592,7]]},"1801":{"position":[[519,7],[549,7],[612,7],[636,7],[682,7],[706,7],[762,7],[785,7],[834,7],[858,7],[2026,7],[2055,7],[2745,7],[2777,7],[3064,7],[3091,7]]},"1803":{"position":[[148,7],[178,7],[405,7],[428,7],[491,7],[526,7],[599,7],[623,7],[702,7],[726,7],[804,7],[828,7],[1032,7],[1054,7],[1764,7],[1786,7],[2019,7],[2041,7],[2123,7],[2145,7],[2495,7],[2524,7],[2609,7],[2639,7],[2702,7],[2724,7],[2770,7],[2793,7],[2868,7],[2891,7],[2957,7],[2981,7],[3988,7],[4017,7],[4717,7],[4749,7],[5036,7],[5063,7]]},"1823":{"position":[[634,7],[661,7]]},"1851":{"position":[[83,7],[110,7],[315,7],[342,7],[614,7],[641,7],[839,7],[866,7]]},"1913":{"position":[[244,7],[272,7]]},"1927":{"position":[[137,7],[163,7],[441,7],[467,7]]},"1935":{"position":[[143,7],[168,7]]},"1951":{"position":[[119,7],[145,7],[551,7],[577,7]]},"2313":{"position":[[134,7],[178,7],[249,7],[281,7]]},"2345":{"position":[[117,7],[148,7],[205,7],[230,7],[422,7],[449,7],[676,7],[713,7]]},"2357":{"position":[[467,7],[505,7],[605,7],[630,7],[949,7],[976,7],[1334,7],[1371,7]]},"2406":{"position":[[49,7],[75,7],[339,7],[371,7]]},"2415":{"position":[[49,7],[77,7]]},"2434":{"position":[[49,7],[74,7],[369,7],[400,7]]},"2486":{"position":[[304,7],[330,7]]},"2790":{"position":[[624,7],[652,7],[807,7],[837,7],[1022,7],[1049,7]]},"2796":{"position":[[5,7],[35,7],[181,7],[209,7],[341,7],[371,7],[542,7],[568,7]]},"3071":{"position":[[291,7],[320,7],[388,7],[421,7],[628,7],[663,7]]},"3154":{"position":[[147,7],[172,7]]},"3156":{"position":[[209,7],[234,7]]},"3287":{"position":[[1374,7],[1409,7],[1478,7],[1509,7],[1573,7],[1597,7],[1749,7],[1777,7],[2051,7],[2079,7],[2367,7],[2395,7],[2687,7],[2719,7]]},"3371":{"position":[[270,7],[297,7]]},"3389":{"position":[[791,7],[818,7]]},"3397":{"position":[[203,7],[230,7]]},"3399":{"position":[[295,7],[324,7],[622,7],[646,7]]},"3547":{"position":[[500,7],[527,7]]},"3636":{"position":[[196,7],[219,7],[289,7],[313,7],[398,7],[430,7]]},"3638":{"position":[[233,7],[266,7],[352,7],[391,7],[521,7],[554,7]]},"3664":{"position":[[128,7],[150,7]]},"3688":{"position":[[469,7],[495,7],[544,7],[568,7],[624,7],[648,7]]},"3702":{"position":[[41,7],[72,7]]},"3708":{"position":[[129,7],[152,7],[203,7],[225,7],[267,7],[291,7],[341,7],[365,7],[414,7],[438,7],[487,7],[510,7],[920,7],[953,7],[1073,7],[1098,7],[1479,7],[1504,7],[1841,7],[1868,7],[2306,7],[2334,7],[3177,7],[3213,7]]},"3716":{"position":[[712,7],[734,7]]},"3752":{"position":[[110,7],[134,7],[349,7],[373,7],[599,7],[623,7],[908,7],[932,7]]},"3924":{"position":[[3018,7],[3045,7]]},"3934":{"position":[[1526,7],[1557,7]]},"3940":{"position":[[1357,7],[1383,7],[1432,7],[1456,7],[1512,7],[1536,7]]},"3956":{"position":[[552,7],[585,7],[714,7],[739,7],[1023,7],[1048,7],[1309,7],[1336,7],[1654,7],[1682,7],[2517,7],[2553,7]]}}}],["sun",{"_index":2675,"t":{"482":{"position":[[212,3]]},"1511":{"position":[[263,3]]},"2418":{"position":[[468,3],[479,3]]},"2420":{"position":[[1168,3]]}}}],["sundial",{"_index":6271,"t":{"2391":{"position":[[33,7]]},"3758":{"position":[[85,7]]}}}],["sunshuaiz",{"_index":4743,"t":{"1511":{"position":[[2027,10]]}}}],["super",{"_index":2044,"t":{"310":{"position":[[490,5],[591,5]]}}}],["supersocket",{"_index":9342,"t":{"3924":{"position":[[1453,11]]}}}],["supervisor",{"_index":651,"t":{"102":{"position":[[220,10]]}}}],["support",{"_index":5912,"t":{"1973":{"position":[[109,7]]},"1987":{"position":[[109,7]]},"2010":{"position":[[117,7]]},"3234":{"position":[[57,8]]}}}],["supportasync",{"_index":5326,"t":{"1703":{"position":[[529,12]]}}}],["supportedcultur",{"_index":6392,"t":{"2522":{"position":[[59,17],[156,17]]},"2553":{"position":[[72,17],[144,17]]},"3031":{"position":[[72,17],[144,17]]},"3033":{"position":[[29,17],[126,17]]}}}],["supportedmvccontrol",{"_index":5197,"t":{"1661":{"position":[[433,22]]},"1663":{"position":[[155,22],[192,22]]},"3023":{"position":[[430,22]]},"3025":{"position":[[37,22]]}}}],["supportmvccontrol",{"_index":7303,"t":{"3047":{"position":[[157,20]]},"3049":{"position":[[112,20]]},"3682":{"position":[[28,20]]}}}],["supportpackagenameprefix",{"_index":6763,"t":{"2623":{"position":[[72,25]]},"2625":{"position":[[233,25],[285,25]]},"2981":{"position":[[395,25]]},"3978":{"position":[[213,25]]}}}],["suppresschangedlisten",{"_index":3500,"t":{"751":{"position":[[60,23]]},"3962":{"position":[[719,23]]}}}],["suppressfin",{"_index":5605,"t":{"1803":{"position":[[2092,16],[5134,16]]}}}],["suppressmodelstateinvalidfilt",{"_index":9514,"t":{"3934":{"position":[[1013,31]]}}}],["suppressmonitor",{"_index":8179,"t":{"3448":{"position":[[1400,15]]}}}],["suppressproxi",{"_index":4321,"t":{"1426":{"position":[[260,13],[292,13]]},"3962":{"position":[[954,13]]}}}],["suppresssniff",{"_index":5479,"t":{"1783":{"position":[[119,15]]},"3956":{"position":[[595,15]]},"3962":{"position":[[909,15]]}}}],["surnam",{"_index":6815,"t":{"2694":{"position":[[155,7],[167,7]]}}}],["sv",{"_index":6652,"t":{"2559":{"position":[[2223,2],[2436,2],[2442,2],[2455,2]]}}}],["sw",{"_index":6672,"t":{"2559":{"position":[[2407,2],[2418,2]]}}}],["swagger",{"_index":601,"t":{"98":{"position":[[94,7]]},"129":{"position":[[587,7]]},"302":{"position":[[27,7],[67,7],[87,7]]},"306":{"position":[[8,7],[26,7],[39,7],[90,7],[126,7]]},"314":{"position":[[120,7]]},"316":{"position":[[122,7]]},"319":{"position":[[159,7]]},"325":{"position":[[27,7],[56,7],[170,7],[226,7]]},"327":{"position":[[39,7],[60,7]]},"331":{"position":[[61,7],[73,7],[113,7],[191,7]]},"1578":{"position":[[121,7]]},"1580":{"position":[[377,7],[400,7]]},"1623":{"position":[[27,7]]},"1641":{"position":[[245,7],[289,7]]},"1657":{"position":[[16,7]]},"1659":{"position":[[13,7]]},"1973":{"position":[[71,7]]},"1987":{"position":[[71,7]]},"2010":{"position":[[79,7]]},"2245":{"position":[[0,7],[119,7]]},"2247":{"position":[[11,7]]},"2281":{"position":[[338,7]]},"2359":{"position":[[441,7],[615,7]]},"2375":{"position":[[27,7]]},"2981":{"position":[[74,7],[121,7]]},"3061":{"position":[[21,7]]},"3063":{"position":[[186,7],[768,7],[791,7],[814,7],[1097,7],[1356,7]]},"3339":{"position":[[236,7],[268,7],[284,7]]},"3460":{"position":[[36,7]]},"3626":{"position":[[265,7],[313,7],[420,7],[482,7],[604,7]]},"3628":{"position":[[21,7]]},"3644":{"position":[[13,7]]},"3654":{"position":[[66,7]]},"3662":{"position":[[12,7]]},"3664":{"position":[[0,7],[515,7]]},"3666":{"position":[[30,7]]},"3670":{"position":[[28,7],[51,7]]},"3672":{"position":[[6,7]]},"3674":{"position":[[3,7]]},"3678":{"position":[[25,7],[68,7]]},"3680":{"position":[[11,7]]},"3684":{"position":[[6,7]]},"3686":{"position":[[39,7],[336,7]]},"3688":{"position":[[106,7]]},"3690":{"position":[[55,7]]},"3696":{"position":[[15,7],[88,7],[104,7],[122,7],[138,7],[154,7]]},"3698":{"position":[[67,7]]},"3700":{"position":[[39,7],[60,7]]},"3704":{"position":[[185,7],[522,7]]},"3706":{"position":[[178,7],[760,7],[783,7],[806,7],[1089,7],[1367,7]]},"3722":{"position":[[323,7]]},"3912":{"position":[[2251,7]]},"3916":{"position":[[2673,7]]},"3924":{"position":[[501,7],[1604,7],[1963,7],[3539,7],[3719,7],[4062,7]]},"3930":{"position":[[1210,7],[1428,7]]},"3932":{"position":[[1913,7]]},"3934":{"position":[[209,7],[1496,7]]},"3936":{"position":[[488,7],[778,7]]},"3938":{"position":[[113,7],[153,7],[542,7],[859,7]]},"3940":{"position":[[897,7],[1056,7]]},"3942":{"position":[[173,7],[221,7]]},"3950":{"position":[[81,7],[467,7],[511,7],[759,7]]},"3954":{"position":[[748,7]]},"3964":{"position":[[98,7],[920,7],[936,7]]},"3972":{"position":[[365,7]]},"3976":{"position":[[364,7]]},"3978":{"position":[[91,7],[105,7],[1788,7]]},"3980":{"position":[[689,7],[732,7]]},"3986":{"position":[[1285,7]]},"3988":{"position":[[312,7]]},"3992":{"position":[[50,7],[163,7],[1080,7],[1451,7],[1634,7],[1869,7],[3188,7],[3387,7],[3499,7],[3631,7],[3801,7],[3815,7]]},"3994":{"position":[[507,7],[1181,7],[1328,7],[1622,7]]},"3996":{"position":[[696,7]]},"4000":{"position":[[335,7],[1029,7]]},"4006":{"position":[[145,7],[521,7]]}}}],["swaggerendpoint",{"_index":8567,"t":{"3704":{"position":[[393,15],[715,15]]},"3924":{"position":[[3927,15],[4255,15]]}}}],["swaggergen",{"_index":6081,"t":{"2278":{"position":[[57,10]]}}}],["swaggerui",{"_index":8559,"t":{"3704":{"position":[[19,9]]},"3992":{"position":[[771,9]]}}}],["swahili",{"_index":6673,"t":{"2559":{"position":[[2410,7],[2424,7]]}}}],["swashbuckl",{"_index":600,"t":{"98":{"position":[[82,11]]},"3990":{"position":[[281,11]]}}}],["swg",{"_index":8494,"t":{"3666":{"position":[[408,3]]},"3918":{"position":[[2734,3]]}}}],["switch",{"_index":2941,"t":{"560":{"position":[[458,6]]},"933":{"position":[[772,6]]},"2486":{"position":[[453,6]]},"2937":{"position":[[1243,6]]},"3708":{"position":[[2704,6]]},"3956":{"position":[[2052,6]]}}}],["sy",{"_index":5423,"t":{"1755":{"position":[[993,3],[1046,3]]},"2559":{"position":[[258,2],[2483,2]]}}}],["symmme",{"_index":4723,"t":{"1511":{"position":[[1765,7]]}}}],["syncobjectresultexecutor",{"_index":8223,"t":{"3452":{"position":[[3471,24]]},"3916":{"position":[[6467,24]]}}}],["syr",{"_index":6677,"t":{"2559":{"position":[[2468,3],[2479,3]]}}}],["syriac",{"_index":6678,"t":{"2559":{"position":[[2472,6],[2486,6]]}}}],["sysdata",{"_index":8356,"t":{"3575":{"position":[[593,7]]}}}],["system",{"_index":27,"t":{"3":{"position":[[226,6]]},"11":{"position":[[595,6]]},"13":{"position":[[133,6],[162,6],[211,6],[243,6],[277,6],[315,6],[354,6]]},"19":{"position":[[534,6]]},"112":{"position":[[227,6],[241,6],[271,6]]},"127":{"position":[[484,6]]},"135":{"position":[[201,6]]},"146":{"position":[[205,6]]},"150":{"position":[[67,6]]},"188":{"position":[[59,6],[73,6]]},"231":{"position":[[94,6]]},"344":{"position":[[79,6]]},"346":{"position":[[77,6]]},"348":{"position":[[83,6]]},"419":{"position":[[66,6]]},"492":{"position":[[462,6]]},"570":{"position":[[209,6],[223,6],[242,6]]},"572":{"position":[[127,6],[153,6],[177,6]]},"585":{"position":[[114,6],[176,6],[274,6]]},"587":{"position":[[99,6],[1655,6]]},"597":{"position":[[31,6]]},"599":{"position":[[6,6],[40,6]]},"615":{"position":[[194,6]]},"617":{"position":[[1937,6]]},"696":{"position":[[1327,6],[1341,6],[2508,6],[2522,6],[3430,6],[3444,6],[4112,6],[4126,6]]},"708":{"position":[[37,6],[51,6],[85,6]]},"734":{"position":[[673,6],[6278,6]]},"747":{"position":[[117,6],[131,6]]},"822":{"position":[[76,6]]},"832":{"position":[[94,6]]},"844":{"position":[[201,6]]},"846":{"position":[[291,6],[305,6],[983,6],[1041,6]]},"851":{"position":[[71,6],[85,6],[119,6],[1206,6],[1681,6],[1695,6]]},"877":{"position":[[142,6],[156,6],[1927,6]]},"879":{"position":[[53,6],[111,6]]},"889":{"position":[[129,6],[143,6]]},"927":{"position":[[55,6],[81,6],[105,6]]},"929":{"position":[[55,6],[81,6],[105,6]]},"931":{"position":[[55,6],[79,6]]},"1041":{"position":[[1068,6]]},"1060":{"position":[[70,6],[115,6]]},"1064":{"position":[[91,6]]},"1066":{"position":[[693,6]]},"1109":{"position":[[377,6]]},"1127":{"position":[[37,6]]},"1145":{"position":[[37,6],[51,6]]},"1147":{"position":[[37,6]]},"1151":{"position":[[68,6]]},"1185":{"position":[[314,6]]},"1368":{"position":[[129,6],[163,6]]},"1412":{"position":[[1889,6]]},"1424":{"position":[[524,6],[538,6]]},"1426":{"position":[[90,6]]},"1468":{"position":[[124,6],[237,6]]},"1474":{"position":[[235,6]]},"1539":{"position":[[304,6],[318,6]]},"1611":{"position":[[228,6]]},"1741":{"position":[[706,6],[2302,6]]},"1755":{"position":[[136,6],[273,6],[384,6],[521,6]]},"1775":{"position":[[153,6],[167,6],[212,6]]},"1779":{"position":[[129,6]]},"1781":{"position":[[129,6]]},"1797":{"position":[[665,6]]},"1801":{"position":[[271,6],[285,6],[304,6],[328,6],[352,6],[385,6]]},"1803":{"position":[[1710,6],[2440,6]]},"1845":{"position":[[340,6]]},"1851":{"position":[[6,6]]},"1867":{"position":[[121,6]]},"1883":{"position":[[176,6]]},"1925":{"position":[[90,6],[116,6]]},"1933":{"position":[[90,6]]},"2033":{"position":[[95,6]]},"2294":{"position":[[624,6]]},"2296":{"position":[[133,6],[162,6],[211,6],[243,6],[277,6],[315,6],[354,6]]},"2313":{"position":[[67,6],[81,6]]},"2343":{"position":[[30,6],[177,6],[237,6]]},"2352":{"position":[[145,6]]},"2354":{"position":[[34,6]]},"2357":{"position":[[48,6]]},"2359":{"position":[[0,6],[492,6],[632,6]]},"2361":{"position":[[0,6],[433,6]]},"2363":{"position":[[0,6],[184,6],[251,6]]},"2365":{"position":[[0,6],[144,6]]},"2367":{"position":[[0,6],[150,6]]},"2369":{"position":[[0,6],[170,6]]},"2371":{"position":[[0,6],[177,6]]},"2373":{"position":[[0,6],[158,6],[236,6]]},"2375":{"position":[[103,6],[152,6]]},"2379":{"position":[[74,6],[381,6]]},"2381":{"position":[[57,6]]},"2383":{"position":[[294,6]]},"2385":{"position":[[15,6]]},"2387":{"position":[[63,6]]},"2482":{"position":[[362,6]]},"2484":{"position":[[462,6]]},"2486":{"position":[[171,6],[185,6]]},"2555":{"position":[[221,6]]},"2579":{"position":[[61,6]]},"2581":{"position":[[97,6],[600,6]]},"2587":{"position":[[6,6]]},"2589":{"position":[[25,6]]},"2690":{"position":[[21,6]]},"2725":{"position":[[197,6],[693,6],[1166,6],[1685,6],[1730,6]]},"2727":{"position":[[222,6]]},"2805":{"position":[[156,6],[170,6],[194,6]]},"2813":{"position":[[203,6],[217,6],[241,6]]},"2817":{"position":[[352,6],[366,6],[390,6]]},"2825":{"position":[[362,6]]},"2827":{"position":[[508,6]]},"2829":{"position":[[596,6]]},"2856":{"position":[[62,6],[76,6],[100,6],[2020,6]]},"2929":{"position":[[130,6],[144,6]]},"2933":{"position":[[117,6]]},"2935":{"position":[[188,6]]},"2937":{"position":[[266,6],[280,6]]},"2945":{"position":[[130,6],[144,6]]},"2959":{"position":[[130,6],[144,6]]},"2971":{"position":[[6,6],[20,6]]},"3071":{"position":[[234,6]]},"3156":{"position":[[142,6],[156,6]]},"3158":{"position":[[133,6],[147,6]]},"3287":{"position":[[3099,6]]},"3291":{"position":[[2141,6]]},"3387":{"position":[[60,6]]},"3430":{"position":[[2481,6],[3826,6]]},"3432":{"position":[[5043,6]]},"3452":{"position":[[910,6],[2532,6],[2631,6],[2646,6],[3101,6]]},"3458":{"position":[[155,6],[856,6]]},"3468":{"position":[[260,6]]},"3506":{"position":[[15,6]]},"3547":{"position":[[15,6]]},"3601":{"position":[[114,6],[834,6],[989,6],[1134,6],[1285,6],[1434,6],[1609,6],[1787,6]]},"3686":{"position":[[731,6]]},"3708":{"position":[[841,6],[855,6]]},"3744":{"position":[[7,6],[76,6],[199,6],[309,6],[372,6]]},"3746":{"position":[[149,6],[198,6],[282,6]]},"3768":{"position":[[749,6],[944,6],[1249,6],[1444,6],[1750,6],[1946,6],[2253,6]]},"3772":{"position":[[603,6],[732,6]]},"3832":{"position":[[1641,6],[1791,6],[3458,6],[3552,6]]},"3842":{"position":[[312,6],[456,6],[942,6],[1086,6],[1507,6],[1651,6],[2097,6],[2241,6],[2738,6],[2882,6],[3355,6],[3499,6]]},"3844":{"position":[[318,6],[465,6],[588,6]]},"3846":{"position":[[558,6],[704,6],[827,6]]},"3850":{"position":[[144,6],[319,6]]},"3852":{"position":[[263,6],[437,6]]},"3854":{"position":[[265,6],[411,6]]},"3856":{"position":[[160,6]]},"3874":{"position":[[77,6],[252,6]]},"3876":{"position":[[195,6],[369,6]]},"3916":{"position":[[3906,6],[5528,6],[5627,6],[5642,6],[6097,6]]},"3918":{"position":[[3559,6],[3986,6]]},"3922":{"position":[[721,6]]},"3956":{"position":[[478,6],[492,6]]},"3986":{"position":[[845,6]]},"3994":{"position":[[1240,6]]},"4002":{"position":[[189,6]]},"4006":{"position":[[582,6]]}}}],["system32",{"_index":7103,"t":{"2838":{"position":[[43,8]]}}}],["systemapi",{"_index":2101,"t":{"319":{"position":[[130,9],[144,9],[456,9],[672,9]]}}}],["systemd",{"_index":7100,"t":{"2836":{"position":[[1338,7]]}}}],["systemdr",{"_index":8127,"t":{"3432":{"position":[[1317,11],[1380,11]]}}}],["systemroot",{"_index":8128,"t":{"3432":{"position":[[1331,10],[1394,10]]}}}],["systemtextjsonserializerprovid",{"_index":6211,"t":{"2345":{"position":[[786,32]]}}}],["t",{"_index":162,"t":{"11":{"position":[[690,1]]},"734":{"position":[[6866,1]]},"773":{"position":[[293,1],[298,1],[377,1],[382,1],[879,1],[884,1],[968,1],[973,1],[981,1],[986,1]]},"1377":{"position":[[367,1]]},"1379":{"position":[[217,1]]},"1410":{"position":[[20,1],[43,1],[205,1],[261,1],[283,1]]},"1424":{"position":[[1450,1],[1466,1],[1591,1]]},"1483":{"position":[[1168,1]]},"1488":{"position":[[1285,1]]},"1499":{"position":[[674,1]]},"1539":{"position":[[199,1]]},"1576":{"position":[[244,1]]},"1707":{"position":[[130,1]]},"1795":{"position":[[2836,1]]},"1819":{"position":[[917,1]]},"2023":{"position":[[115,1]]},"2073":{"position":[[27,1]]},"2081":{"position":[[44,1]]},"2165":{"position":[[39,1],[99,1]]},"2266":{"position":[[181,1]]},"2294":{"position":[[719,1]]},"2319":{"position":[[54,1]]},"2345":{"position":[[479,1],[600,1],[614,1]]},"2357":{"position":[[1006,1],[1134,1],[1148,1],[1240,1]]},"2379":{"position":[[936,1],[950,1],[1042,1]]},"2468":{"position":[[20,1],[84,1],[100,1]]},"2472":{"position":[[79,1],[105,1],[144,1],[273,1],[289,1]]},"2843":{"position":[[261,1]]},"2848":{"position":[[1290,1],[1328,1],[1412,1],[1418,1],[1554,1]]},"2856":{"position":[[11,1],[1777,1],[1970,1]]},"3154":{"position":[[739,1]]},"3224":{"position":[[46,1],[64,1],[73,1]]},"3273":{"position":[[589,1],[618,1],[677,1]]},"3309":{"position":[[52,1]]},"3420":{"position":[[20,1],[294,1],[310,1]]},"3520":{"position":[[64,1],[69,1],[290,1]]},"3561":{"position":[[64,1],[69,1]]},"3595":{"position":[[39,1],[297,1]]},"3708":{"position":[[119,1],[241,1]]},"3716":{"position":[[702,1],[750,1]]},"3752":{"position":[[653,1],[789,1],[800,1],[881,1],[962,1],[1103,1],[1120,1],[1201,1]]},"3916":{"position":[[1771,1],[1827,1]]},"3952":{"position":[[58,1]]},"3996":{"position":[[1375,1],[1628,1]]}}}],["t1",{"_index":3967,"t":{"1117":{"position":[[42,2],[134,2],[225,2],[326,2],[437,2],[558,2],[689,2],[830,2],[981,2],[1822,2],[1916,2],[2020,2],[2134,2],[2258,2],[2392,2],[2536,2],[2690,2],[2855,2],[2949,2],[3053,2],[3167,2],[3291,2],[3425,2],[3569,2],[3723,2],[3889,2],[3966,2],[4053,2],[4150,2],[4257,2],[4374,2],[4501,2],[4638,2]]},"1129":{"position":[[754,2]]},"2856":{"position":[[554,2],[719,2]]},"3992":{"position":[[1820,2]]}}}],["t2",{"_index":3971,"t":{"1117":{"position":[[228,2],[329,2],[440,2],[561,2],[692,2],[833,2],[984,2],[1919,2],[2023,2],[2137,2],[2261,2],[2395,2],[2539,2],[2693,2],[2952,2],[3056,2],[3170,2],[3294,2],[3428,2],[3572,2],[3726,2],[3969,2],[4056,2],[4153,2],[4260,2],[4377,2],[4504,2],[4641,2]]},"2856":{"position":[[663,2],[729,2]]},"3273":{"position":[[620,2]]}}}],["t3",{"_index":3973,"t":{"1117":{"position":[[332,2],[443,2],[564,2],[695,2],[836,2],[987,2],[2026,2],[2140,2],[2264,2],[2398,2],[2542,2],[2696,2],[3059,2],[3173,2],[3297,2],[3431,2],[3575,2],[3729,2],[4059,2],[4156,2],[4263,2],[4380,2],[4507,2],[4644,2]]}}}],["t4",{"_index":3976,"t":{"1117":{"position":[[446,2],[567,2],[698,2],[839,2],[990,2],[2143,2],[2267,2],[2401,2],[2545,2],[2699,2],[3176,2],[3300,2],[3434,2],[3578,2],[3732,2],[4159,2],[4266,2],[4383,2],[4510,2],[4647,2]]}}}],["t5",{"_index":3979,"t":{"1117":{"position":[[570,2],[701,2],[842,2],[993,2],[2270,2],[2404,2],[2548,2],[2702,2],[3303,2],[3437,2],[3581,2],[3735,2],[4269,2],[4386,2],[4513,2],[4650,2]]}}}],["t6",{"_index":3982,"t":{"1117":{"position":[[704,2],[845,2],[996,2],[2407,2],[2551,2],[2705,2],[3440,2],[3584,2],[3738,2],[4389,2],[4516,2],[4653,2]]}}}],["t7",{"_index":3985,"t":{"1117":{"position":[[848,2],[999,2],[2554,2],[2708,2],[3587,2],[3741,2],[4519,2],[4656,2]]}}}],["t8",{"_index":3968,"t":{"1117":{"position":[[48,2],[1002,2],[2711,2],[3744,2],[4659,2]]},"1129":{"position":[[760,2]]}}}],["ta",{"_index":6679,"t":{"2559":{"position":[[2500,2],[2507,2]]},"2768":{"position":[[640,2]]}}}],["taag",{"_index":4963,"t":{"1539":{"position":[[177,4]]}}}],["tabl",{"_index":2987,"t":{"570":{"position":[[1796,5],[2141,5],[2432,5]]},"655":{"position":[[122,5]]},"696":{"position":[[717,5],[797,5],[853,5]]},"698":{"position":[[117,6],[161,6]]},"828":{"position":[[51,5]]},"919":{"position":[[204,5]]},"1192":{"position":[[26,5]]},"1212":{"position":[[103,5],[245,5]]},"1214":{"position":[[250,5]]},"1787":{"position":[[12,5]]},"2931":{"position":[[25,5]]},"2947":{"position":[[25,5]]},"2961":{"position":[[25,5]]},"3234":{"position":[[32,5],[51,5],[293,5],[324,5],[476,5]]},"3236":{"position":[[466,5]]},"3273":{"position":[[149,5],[323,5]]},"3936":{"position":[[588,5]]},"3986":{"position":[[630,5]]}}}],["tablefilteritem",{"_index":7692,"t":{"3230":{"position":[[23,15]]}}}],["tablenam",{"_index":1816,"t":{"247":{"position":[[587,9]]},"3236":{"position":[[513,9]]}}}],["tableprefix",{"_index":2788,"t":{"516":{"position":[[552,11]]},"3962":{"position":[[1070,11]]}}}],["tablesuffix",{"_index":2789,"t":{"516":{"position":[[578,11]]}}}],["tag",{"_index":4164,"t":{"1377":{"position":[[547,3],[561,3],[607,3]]},"1641":{"position":[[275,4]]},"1659":{"position":[[0,3],[509,3],[690,3],[944,3],[1128,3],[1302,3]]},"3644":{"position":[[0,3],[509,3],[690,3],[944,3],[1128,3],[1302,3]]},"3918":{"position":[[3400,3]]},"3992":{"position":[[1620,3]]}}}],["take",{"_index":7715,"t":{"3236":{"position":[[24,5],[121,5],[212,5]]},"3261":{"position":[[97,4]]},"3702":{"position":[[1942,4]]},"3708":{"position":[[3677,4]]},"3956":{"position":[[3005,4]]}}}],["talk",{"_index":4874,"t":{"1511":{"position":[[3826,4]]}}}],["talli",{"_index":9900,"t":{"3972":{"position":[[418,5]]}}}],["tanantid",{"_index":9791,"t":{"3964":{"position":[[763,8]]}}}],["taobao",{"_index":4304,"t":{"1420":{"position":[[1013,6]]}}}],["taotaodetu",{"_index":6927,"t":{"2768":{"position":[[410,12]]}}}],["tap",{"_index":2096,"t":{"316":{"position":[[409,3]]}}}],["tar",{"_index":4398,"t":{"1483":{"position":[[238,3],[400,3],[411,3],[426,3],[457,3],[772,3]]},"1495":{"position":[[1081,3],[1165,3]]},"1499":{"position":[[257,3],[298,3]]}}}],["target",{"_index":3268,"t":{"655":{"position":[[115,6]]},"1424":{"position":[[712,6],[1111,6],[1338,6],[1569,6]]},"2532":{"position":[[228,6]]}}}],["targetframework",{"_index":128,"t":{"9":{"position":[[197,15]]},"48":{"position":[[20,15],[44,15],[64,15],[88,15]]},"72":{"position":[[20,15],[44,15],[64,15],[88,15]]},"1372":{"position":[[141,15],[165,15]]},"1444":{"position":[[141,15],[165,15]]},"1535":{"position":[[119,15],[143,15]]},"1551":{"position":[[280,15],[304,15]]},"2292":{"position":[[197,15]]},"2298":{"position":[[130,15],[154,15]]},"2639":{"position":[[28,15],[52,15],[72,15],[96,15]]},"2666":{"position":[[28,15],[52,15],[72,15],[96,15]]},"3277":{"position":[[64,15],[88,15]]}}}],["tarrbut",{"_index":4318,"t":{"1424":{"position":[[1744,8]]}}}],["task",{"_index":227,"t":{"13":{"position":[[371,5]]},"19":{"position":[[34,4]]},"112":{"position":[[288,5],[391,4]]},"127":{"position":[[501,5],[602,4],[743,4]]},"133":{"position":[[525,4],[675,4],[721,4]]},"135":{"position":[[218,5],[323,4]]},"146":{"position":[[222,5],[488,4],[870,4],[986,4],[1032,4]]},"253":{"position":[[259,4],[512,4]]},"490":{"position":[[286,4],[343,4]]},"492":{"position":[[326,4],[479,5],[638,4],[683,4]]},"530":{"position":[[387,4],[743,4]]},"572":{"position":[[194,5]]},"927":{"position":[[122,5],[950,4],[1812,4],[2151,4]]},"929":{"position":[[122,5],[772,4]]},"931":{"position":[[96,5],[1198,4]]},"1024":{"position":[[13,4]]},"1039":{"position":[[387,4],[744,4]]},"1229":{"position":[[13,4]]},"1234":{"position":[[715,4]]},"1236":{"position":[[725,4]]},"1238":{"position":[[878,4]]},"1240":{"position":[[962,4]]},"1242":{"position":[[317,4]]},"1248":{"position":[[87,4],[330,4]]},"1279":{"position":[[445,4]]},"1368":{"position":[[180,5],[570,4]]},"1424":{"position":[[1222,4],[1317,4],[1355,4],[1367,4],[1445,4],[1586,4]]},"1665":{"position":[[153,4]]},"1703":{"position":[[524,4]]},"1741":{"position":[[108,4],[895,4],[1765,4]]},"1743":{"position":[[63,4],[372,4]]},"1745":{"position":[[159,4]]},"1795":{"position":[[295,4],[442,4],[549,4],[707,4],[797,4],[932,4],[1152,4],[1254,4],[1562,4],[1668,4],[1781,4],[1887,4],[2209,4],[2358,4]]},"1801":{"position":[[402,5]]},"1803":{"position":[[334,4],[1418,4],[1727,5],[1832,4]]},"1805":{"position":[[314,4]]},"1807":{"position":[[332,4],[467,4],[496,4],[744,4]]},"1809":{"position":[[186,4],[277,4]]},"1811":{"position":[[441,4]]},"1815":{"position":[[434,4],[548,4],[603,4]]},"1817":{"position":[[259,4]]},"1819":{"position":[[311,4],[428,4],[727,4]]},"1823":{"position":[[447,4]]},"1883":{"position":[[193,5],[311,4],[375,4]]},"1913":{"position":[[359,4],[1209,4]]},"1915":{"position":[[254,4]]},"1919":{"position":[[188,4]]},"1921":{"position":[[244,4]]},"1925":{"position":[[239,4]]},"1927":{"position":[[279,4],[583,4]]},"1929":{"position":[[240,4]]},"1933":{"position":[[215,4],[838,4]]},"1935":{"position":[[252,4]]},"1937":{"position":[[246,4]]},"1941":{"position":[[215,4]]},"1943":{"position":[[148,4]]},"1945":{"position":[[240,4]]},"1951":{"position":[[258,4],[652,4],[730,4]]},"1953":{"position":[[148,4]]},"1961":{"position":[[287,4]]},"2158":{"position":[[88,4]]},"2296":{"position":[[371,5]]},"2309":{"position":[[53,4]]},"2313":{"position":[[98,5],[365,4],[435,4],[583,4]]},"2315":{"position":[[24,4],[161,4]]},"2406":{"position":[[520,4],[645,4]]},"2434":{"position":[[541,4],[705,4]]},"2442":{"position":[[1820,4],[1984,4]]},"2482":{"position":[[226,4],[379,5],[544,4],[589,4]]},"2484":{"position":[[326,4],[479,5],[644,4],[689,4]]},"2486":{"position":[[202,5],[406,4],[1013,4]]},"2579":{"position":[[278,4]]},"2581":{"position":[[435,4],[962,4]]},"2587":{"position":[[379,4]]},"2589":{"position":[[410,4]]},"2790":{"position":[[698,4],[915,4],[1127,4]]},"2796":{"position":[[255,4],[449,4],[682,4]]},"2805":{"position":[[211,5],[316,4],[467,4]]},"2813":{"position":[[258,5],[460,4],[641,4]]},"2817":{"position":[[407,5],[606,4],[739,4],[920,4],[979,4]]},"2825":{"position":[[226,4],[379,5],[544,4],[589,4]]},"2827":{"position":[[372,4],[525,5],[690,4],[735,4]]},"2829":{"position":[[420,4],[613,5],[647,4],[711,4],[808,4],[863,4],[881,4],[919,4]]},"2831":{"position":[[368,4],[738,4]]},"2856":{"position":[[117,5],[300,4],[748,4],[1000,4],[1219,4]]},"3154":{"position":[[233,4],[419,4],[555,4]]},"3156":{"position":[[173,5]]},"3158":{"position":[[164,5]]},"3162":{"position":[[244,4]]},"3168":{"position":[[346,4]]},"3287":{"position":[[166,4],[491,4]]},"3373":{"position":[[528,4]]},"3397":{"position":[[682,4]]},"3452":{"position":[[3899,4]]},"3483":{"position":[[174,4],[240,4],[305,4],[375,4],[446,4],[514,4],[823,4]]},"3535":{"position":[[95,4],[188,4],[279,4],[378,4],[477,4],[572,4]]},"3537":{"position":[[134,4]]},"3539":{"position":[[244,4],[336,4],[449,4]]},"3541":{"position":[[99,4],[216,4],[301,4],[423,4],[631,4]]},"3543":{"position":[[383,4],[571,4]]},"3545":{"position":[[84,4],[179,4],[311,4]]},"3547":{"position":[[219,4],[375,4]]},"3549":{"position":[[84,4],[221,4]]},"3551":{"position":[[135,4]]},"3553":{"position":[[135,4]]},"3555":{"position":[[135,4]]},"3557":{"position":[[135,4]]},"3559":{"position":[[135,4]]},"3561":{"position":[[193,4],[273,4],[340,4],[405,4]]},"3563":{"position":[[306,4],[510,4],[855,4],[987,4],[1169,4],[1314,4]]},"3565":{"position":[[95,4]]},"3567":{"position":[[170,4]]},"3569":{"position":[[126,4]]},"3571":{"position":[[177,4]]},"3575":{"position":[[440,4],[503,4],[901,4]]},"3581":{"position":[[660,4]]},"3583":{"position":[[100,4],[512,4],[863,4]]},"3597":{"position":[[159,4],[326,4],[439,4]]},"3603":{"position":[[219,4]]},"3672":{"position":[[153,4]]},"3708":{"position":[[872,5],[2500,4]]},"3716":{"position":[[546,4]]},"3752":{"position":[[482,4],[1078,4]]},"3762":{"position":[[156,4],[351,4]]},"3768":{"position":[[331,4],[526,4]]},"3770":{"position":[[203,4],[340,4],[1436,4],[1737,4],[2887,4],[3391,4],[4752,4],[5012,4]]},"3774":{"position":[[488,4],[683,4]]},"3783":{"position":[[210,4],[560,4]]},"3789":{"position":[[41,4]]},"3791":{"position":[[328,4],[531,4],[971,4],[1302,4],[1775,4],[2050,4]]},"3795":{"position":[[200,4]]},"3806":{"position":[[3414,4],[3609,4]]},"3808":{"position":[[848,4],[1043,4],[2069,4],[2264,4]]},"3826":{"position":[[171,4]]},"3828":{"position":[[266,4],[445,4],[474,4],[786,4]]},"3832":{"position":[[147,4],[535,4],[759,4]]},"3916":{"position":[[6895,4]]},"3918":{"position":[[1657,4],[1799,4],[1944,4]]},"3930":{"position":[[671,4],[706,4]]},"3936":{"position":[[1054,4],[1176,4]]},"3956":{"position":[[509,5],[1848,4]]},"3966":{"position":[[719,4]]},"3980":{"position":[[813,4]]}}}],["taskcreationopt",{"_index":2728,"t":{"490":{"position":[[451,19]]},"1803":{"position":[[1677,19]]},"2315":{"position":[[445,19]]}}}],["taskfactori",{"_index":2741,"t":{"492":{"position":[[432,11],[450,11],[515,11]]},"2482":{"position":[[332,11],[350,11],[415,11]]},"2484":{"position":[[432,11],[450,11],[515,11]]},"2825":{"position":[[332,11],[350,11],[415,11]]},"2827":{"position":[[478,11],[496,11],[561,11]]},"2829":{"position":[[566,11],[584,11],[660,11]]}}}],["taskschedul",{"_index":2742,"t":{"492":{"position":[[485,13]]},"1803":{"position":[[1733,13]]},"2391":{"position":[[51,13]]},"2482":{"position":[[385,13]]},"2484":{"position":[[485,13]]},"2486":{"position":[[150,13]]},"2825":{"position":[[385,13]]},"2827":{"position":[[531,13]]},"2829":{"position":[[619,13]]},"3758":{"position":[[103,13]]}}}],["taskt",{"_index":4316,"t":{"1424":{"position":[[1547,5],[1614,5]]}}}],["tatar",{"_index":6682,"t":{"2559":{"position":[[2524,5],[2536,5]]}}}],["tb",{"_index":3280,"t":{"655":{"position":[[449,2],[455,2]]}}}],["tbname",{"_index":8824,"t":{"3785":{"position":[[445,6],[583,6],[725,6],[829,6],[1090,6],[1136,6]]},"3812":{"position":[[721,6],[857,6],[997,6],[1101,6],[1624,6],[1704,6]]}}}],["tcompon",{"_index":2259,"t":{"350":{"position":[[121,10],[149,10],[195,10],[256,10],[352,10],[393,10],[438,10],[477,10],[547,10],[595,10],[647,10],[686,10]]},"369":{"position":[[117,10],[306,10]]}}}],["tcomponentopt",{"_index":2313,"t":{"369":{"position":[[129,17],[170,17],[218,17]]}}}],["tconfig",{"_index":5920,"t":{"2023":{"position":[[145,7]]}}}],["tcp",{"_index":2808,"t":{"520":{"position":[[344,3]]},"901":{"position":[[372,3]]},"1315":{"position":[[372,3]]},"3614":{"position":[[32,3]]}}}],["tdbcontext",{"_index":2759,"t":{"502":{"position":[[103,10]]},"504":{"position":[[87,10]]},"506":{"position":[[52,10],[85,10],[142,10],[173,10]]},"512":{"position":[[49,10]]},"534":{"position":[[89,10],[123,10],[150,10]]},"915":{"position":[[224,10],[421,10]]},"947":{"position":[[81,10]]},"1311":{"position":[[358,10]]},"3932":{"position":[[950,10],[1017,10]]}}}],["tdbcontextloc",{"_index":2760,"t":{"502":{"position":[[115,17]]},"504":{"position":[[99,17]]},"506":{"position":[[97,17],[185,17]]},"510":{"position":[[529,17]]},"949":{"position":[[40,17],[86,17],[125,17],[168,17],[347,17]]},"988":{"position":[[116,17],[165,17],[317,17]]},"994":{"position":[[21,17],[79,17]]},"998":{"position":[[15,17],[66,17]]},"1000":{"position":[[72,17]]},"1002":{"position":[[72,17]]},"1004":{"position":[[80,17]]},"1006":{"position":[[80,17]]},"1008":{"position":[[78,17]]},"1010":{"position":[[161,17]]},"1012":{"position":[[62,17]]},"1014":{"position":[[71,17]]},"1018":{"position":[[14,17]]},"1041":{"position":[[152,17],[224,17],[324,17],[535,17],[602,17],[674,17],[753,17],[953,17]]},"1204":{"position":[[210,17]]},"1206":{"position":[[21,17],[67,17]]},"1208":{"position":[[24,17]]},"1210":{"position":[[27,17],[85,17]]},"1212":{"position":[[39,17]]},"1311":{"position":[[370,17],[399,17]]},"1368":{"position":[[718,17]]},"2107":{"position":[[50,17]]},"2111":{"position":[[47,17]]},"2117":{"position":[[39,17],[108,17]]},"2121":{"position":[[42,17],[114,17]]},"2129":{"position":[[45,17]]},"3958":{"position":[[162,17]]},"3998":{"position":[[173,17]]}}}],["tdbcontextlocator1",{"_index":3813,"t":{"949":{"position":[[389,18],[451,18],[510,18],[586,18],[665,18],[737,18]]},"1775":{"position":[[499,18],[553,18],[644,18],[718,18],[861,18],[955,18],[1150,18],[1264,18],[1511,18],[1645,18],[1944,18],[2098,18],[2449,18],[2623,18],[3026,18],[3220,18]]}}}],["tdbcontextlocator2",{"_index":5468,"t":{"1775":{"position":[[664,18],[770,18],[881,18],[1007,18],[1170,18],[1316,18],[1531,18],[1697,18],[1964,18],[2150,18],[2469,18],[2675,18],[3046,18],[3272,18]]}}}],["tdbcontextlocator3",{"_index":5469,"t":{"1775":{"position":[[901,18],[1059,18],[1190,18],[1368,18],[1551,18],[1749,18],[1984,18],[2202,18],[2489,18],[2727,18],[3066,18],[3324,18]]}}}],["tdbcontextlocator4",{"_index":5470,"t":{"1775":{"position":[[1210,18],[1420,18],[1571,18],[1801,18],[2004,18],[2254,18],[2509,18],[2779,18],[3086,18],[3376,18]]}}}],["tdbcontextlocator5",{"_index":5471,"t":{"1775":{"position":[[1591,18],[1853,18],[2024,18],[2306,18],[2529,18],[2831,18],[3106,18],[3428,18]]}}}],["tdbcontextlocator6",{"_index":5472,"t":{"1775":{"position":[[2044,18],[2358,18],[2549,18],[2883,18],[3126,18],[3480,18]]}}}],["tdbcontextlocator7",{"_index":5473,"t":{"1775":{"position":[[2569,18],[2935,18],[3146,18],[3532,18]]}}}],["tdbcontextlocator8",{"_index":3814,"t":{"949":{"position":[[413,18],[475,18],[534,18],[610,18],[689,18],[761,18]]},"1775":{"position":[[3166,18],[3584,18]]}}}],["tdocument",{"_index":9468,"t":{"3930":{"position":[[1456,9]]}}}],["te",{"_index":6683,"t":{"2559":{"position":[[2545,2],[2555,2]]}}}],["telephon",{"_index":3144,"t":{"606":{"position":[[168,9]]},"617":{"position":[[471,9],[500,9],[568,9]]}}}],["telugu",{"_index":6684,"t":{"2559":{"position":[[2548,6],[2561,6]]}}}],["tempdata",{"_index":5885,"t":{"1941":{"position":[[714,8],[748,8]]}}}],["templat",{"_index":440,"t":{"53":{"position":[[111,8]]},"64":{"position":[[137,8]]},"77":{"position":[[111,8]]},"93":{"position":[[38,8],[65,8],[95,8],[129,8],[165,8],[218,8],[251,8],[343,8],[379,8],[418,8],[461,8],[506,8],[568,8],[610,8]]},"2261":{"position":[[15,8],[197,8]]},"3317":{"position":[[25,8],[65,8],[108,8],[155,8],[206,8],[277,8],[326,8]]},"3319":{"position":[[92,8],[137,8],[185,8],[237,8],[293,8],[369,8],[423,8]]},"3321":{"position":[[95,8],[164,8]]},"3325":{"position":[[46,8]]},"3432":{"position":[[4437,8],[4603,8]]},"3464":{"position":[[63,8],[245,8]]},"3740":{"position":[[415,9]]},"3750":{"position":[[293,8],[360,8]]},"3936":{"position":[[1887,8],[2061,8]]},"3996":{"position":[[45,8],[92,8]]},"4002":{"position":[[21,8],[51,8],[85,8],[120,8],[152,8]]}}}],["templateurl",{"_index":2117,"t":{"321":{"position":[[169,11]]}}}],["tempoutput",{"_index":8008,"t":{"3383":{"position":[[216,10],[239,10]]}}}],["tenant",{"_index":2854,"t":{"532":{"position":[[167,6]]},"2929":{"position":[[258,6],[316,6],[394,6],[408,6],[580,6]]},"2931":{"position":[[18,6]]},"2933":{"position":[[459,6],[600,6],[684,6]]},"2935":{"position":[[530,6]]},"2937":{"position":[[627,6]]},"2945":{"position":[[258,6],[316,6],[394,6],[408,6],[637,6]]},"2947":{"position":[[18,6]]},"2949":{"position":[[395,6],[448,6],[548,6]]},"2951":{"position":[[557,6]]},"2959":{"position":[[258,6],[316,6],[394,6],[408,6],[606,6]]},"2961":{"position":[[18,6]]},"2963":{"position":[[428,6],[467,6],[553,6]]},"2965":{"position":[[94,6],[170,6]]},"2967":{"position":[[22,6],[63,6]]},"3914":{"position":[[3130,6],[3200,6]]},"3958":{"position":[[236,6]]},"3978":{"position":[[749,6]]},"3986":{"position":[[1541,6]]},"4000":{"position":[[817,6]]},"4006":{"position":[[396,6]]}}}],["tenantdbcontext",{"_index":7286,"t":{"2971":{"position":[[293,15],[374,15]]}}}],["tenantid",{"_index":3792,"t":{"933":{"position":[[862,8],[977,8]]},"1763":{"position":[[112,8]]},"2919":{"position":[[50,8]]},"2929":{"position":[[417,8],[589,8]]},"2933":{"position":[[467,8],[546,8],[734,8],[757,8]]},"2935":{"position":[[46,8],[538,8]]},"2937":{"position":[[56,8],[79,8],[635,8],[1333,8],[1448,8]]},"2945":{"position":[[417,8],[646,8]]},"2959":{"position":[[417,8],[615,8]]},"2971":{"position":[[171,8]]},"3914":{"position":[[3143,8]]},"3978":{"position":[[1505,8]]}}}],["tenantidqueryfilterexpress",{"_index":9739,"t":{"3962":{"position":[[815,29]]}}}],["tenantseeddata",{"_index":7261,"t":{"2929":{"position":[[38,14],[225,14]]},"2945":{"position":[[38,14],[225,14]]},"2959":{"position":[[38,14],[225,14]]}}}],["tentiti",{"_index":2886,"t":{"548":{"position":[[57,7]]},"552":{"position":[[51,7]]},"554":{"position":[[38,7]]},"749":{"position":[[67,7],[129,7],[144,7],[404,7],[749,7],[768,7],[1074,7]]},"844":{"position":[[52,7]]},"855":{"position":[[119,7]]},"857":{"position":[[115,7]]},"947":{"position":[[1038,7]]},"949":{"position":[[31,7],[77,7],[577,7],[656,7]]},"988":{"position":[[86,7],[107,7],[385,7],[552,7]]},"992":{"position":[[12,7],[50,7]]},"994":{"position":[[12,7],[70,7]]},"1000":{"position":[[20,7],[63,7]]},"1002":{"position":[[20,7],[63,7]]},"1004":{"position":[[22,7],[71,7]]},"1006":{"position":[[22,7],[71,7]]},"1008":{"position":[[21,7],[69,7]]},"1010":{"position":[[104,7],[152,7]]},"1026":{"position":[[207,7]]},"1041":{"position":[[109,7],[215,7],[264,7],[279,7],[492,7],[593,7],[641,7],[665,7],[708,7],[1173,7],[1226,7],[1251,7],[1290,7],[1400,7],[1448,7],[1472,7],[1520,7],[1544,7]]},"1143":{"position":[[33,7]]},"1198":{"position":[[12,7]]},"1210":{"position":[[18,7],[76,7]]},"1368":{"position":[[710,7]]},"1566":{"position":[[93,7],[138,7]]},"1777":{"position":[[107,7],[142,7]]},"1783":{"position":[[40,7]]},"2105":{"position":[[40,7]]},"2107":{"position":[[41,7]]},"2123":{"position":[[34,7]]},"3126":{"position":[[360,7],[415,7]]},"3958":{"position":[[127,7],[153,7]]},"3996":{"position":[[1753,7]]}}}],["term",{"_index":8547,"t":{"3702":{"position":[[2339,5]]}}}],["termsofservic",{"_index":7337,"t":{"3063":{"position":[[1636,14]]},"3065":{"position":[[143,14]]},"3642":{"position":[[217,14]]},"3706":{"position":[[1647,14],[1891,14]]}}}],["test",{"_index":770,"t":{"114":{"position":[[258,4],[337,4]]},"836":{"position":[[245,4]]},"881":{"position":[[375,4]]},"1125":{"position":[[244,4],[299,4]]},"1129":{"position":[[816,4],[828,4],[885,4],[897,4],[997,4],[1009,4],[1121,4],[1133,4],[1193,4],[1205,4],[1302,4],[1314,4],[1374,4],[1386,4],[1484,4],[1496,4],[1553,4],[1565,4]]},"1185":{"position":[[170,4],[225,4]]},"1724":{"position":[[397,4]]},"1726":{"position":[[99,4]]},"1795":{"position":[[1327,4],[1374,4],[1452,4],[1743,4]]},"1819":{"position":[[630,4],[968,4],[1061,4]]},"2090":{"position":[[51,4]]},"2094":{"position":[[71,4]]},"2571":{"position":[[93,4]]},"2649":{"position":[[128,4]]},"2651":{"position":[[46,4]]},"2653":{"position":[[124,4]]},"2790":{"position":[[240,4]]},"2792":{"position":[[169,4]]},"3350":{"position":[[19,7]]},"3383":{"position":[[272,4]]},"3387":{"position":[[164,4]]},"3397":{"position":[[83,7],[317,7]]},"3399":{"position":[[77,7]]},"3401":{"position":[[265,4],[291,5]]},"3446":{"position":[[733,4],[812,4]]},"3452":{"position":[[1070,4],[1400,4]]},"3672":{"position":[[173,4]]},"3698":{"position":[[375,4]]},"3716":{"position":[[990,4],[1055,4]]},"3916":{"position":[[4066,4],[4396,4],[7206,4],[7811,4],[8662,4]]},"3928":{"position":[[1308,4],[1374,4]]}}}],["test1",{"_index":7690,"t":{"3228":{"position":[[322,5]]},"3360":{"position":[[82,5]]},"3399":{"position":[[387,5]]}}}],["test2",{"_index":7689,"t":{"3228":{"position":[[298,5]]},"3399":{"position":[[715,5]]}}}],["test_",{"_index":8523,"t":{"3698":{"position":[[375,5]]}}}],["test_string_equ",{"_index":8009,"t":{"3383":{"position":[[272,17]]},"3387":{"position":[[164,17]]}}}],["testapi",{"_index":8479,"t":{"3632":{"position":[[102,7],[120,7],[197,7]]}}}],["testappservic",{"_index":5191,"t":{"1659":{"position":[[282,14],[717,14],[1158,14]]},"3466":{"position":[[1127,14],[1199,14],[1267,14],[1290,14]]},"3644":{"position":[[282,14],[717,14],[1158,14]]}}}],["testcach",{"_index":1808,"t":{"247":{"position":[[270,9],[398,9],[600,9]]}}}],["testcontrol",{"_index":6417,"t":{"2551":{"position":[[49,14],[132,14]]}}}],["testdto",{"_index":3116,"t":{"597":{"position":[[0,7],[114,7],[627,7],[676,7],[689,7],[697,7],[715,7]]},"599":{"position":[[123,7]]},"602":{"position":[[210,7],[218,7],[236,7]]},"608":{"position":[[143,7]]},"625":{"position":[[333,7],[346,7],[354,7],[372,7]]},"1607":{"position":[[249,7],[261,7],[269,7],[287,7]]},"1609":{"position":[[192,7],[208,7],[216,7],[234,7],[538,7],[566,7],[574,7],[592,7]]},"3656":{"position":[[195,7]]}}}],["testensuresuccessstatuscod",{"_index":8035,"t":{"3397":{"position":[[687,27]]}}}],["testenviron",{"_index":5942,"t":{"2055":{"position":[[273,15]]}}}],["testerror",{"_index":5677,"t":{"1819":{"position":[[732,9]]}}}],["testeventbu",{"_index":5663,"t":{"1815":{"position":[[104,12],[252,12]]}}}],["testframework",{"_index":7995,"t":{"3371":{"position":[[182,13]]},"3389":{"position":[[588,13]]},"3924":{"position":[[2930,13]]}}}],["testhost",{"_index":8040,"t":{"3401":{"position":[[78,8]]}}}],["testhostingstartup",{"_index":8043,"t":{"3401":{"position":[[154,18],[317,18]]}}}],["testid",{"_index":7801,"t":{"3269":{"position":[[106,6],[192,6]]}}}],["testinheritdoc",{"_index":8511,"t":{"3688":{"position":[[244,14]]},"3940":{"position":[[1132,14]]}}}],["testloggerservic",{"_index":767,"t":{"114":{"position":[[128,18],[189,18]]},"3446":{"position":[[65,18],[603,18],[664,18]]},"3448":{"position":[[944,18]]},"3452":{"position":[[1107,18],[1236,18],[3213,18],[3319,18]]},"3916":{"position":[[4103,18],[4232,18],[6209,18],[6315,18]]},"3928":{"position":[[955,18],[1178,18],[1239,18]]}}}],["testm",{"_index":3434,"t":{"734":{"position":[[646,6]]}}}],["testmethod",{"_index":2143,"t":{"327":{"position":[[247,10]]},"3700":{"position":[[247,10]]}}}],["testmodel",{"_index":8620,"t":{"3738":{"position":[[115,9]]},"3740":{"position":[[243,9],[606,9]]}}}],["testmultifileproxyasync",{"_index":9198,"t":{"3916":{"position":[[8176,23]]}}}],["testnamedservic",{"_index":4258,"t":{"1412":{"position":[[928,17],[1059,17]]},"3448":{"position":[[1286,17],[1331,17]]}}}],["testprogram",{"_index":7994,"t":{"3371":{"position":[[14,11],[40,11],[136,11],[210,11],[319,11],[354,11],[462,11]]},"3389":{"position":[[391,11],[413,11],[542,11],[616,11],[840,11],[875,11]]},"3924":{"position":[[2884,11],[2958,11],[3067,11],[3102,11]]}}}],["testproject1",{"_index":7987,"t":{"3360":{"position":[[23,12]]},"3371":{"position":[[197,12],[225,12],[251,12]]},"3373":{"position":[[271,12]]},"3379":{"position":[[44,12]]},"3381":{"position":[[6,12],[52,12]]},"3383":{"position":[[98,12]]},"3387":{"position":[[91,12]]},"3389":{"position":[[454,12],[603,12],[631,12],[772,12],[982,12],[1028,12]]},"3391":{"position":[[298,12],[344,12]]},"3393":{"position":[[227,12],[550,12],[596,12]]},"3924":{"position":[[2945,12],[2973,12],[2999,12],[3224,12],[3270,12]]}}}],["testproject2",{"_index":8032,"t":{"3397":{"position":[[349,12]]}}}],["testproject3",{"_index":8038,"t":{"3399":{"position":[[251,12]]}}}],["testrepositori",{"_index":3849,"t":{"979":{"position":[[67,14],[129,14]]},"3291":{"position":[[51,14],[104,14],[179,14],[206,14],[287,14],[326,14],[752,14],[827,14],[2001,14],[2076,14]]}}}],["testrequest",{"_index":8498,"t":{"3672":{"position":[[189,11],[201,11],[239,11]]}}}],["testserv",{"_index":9658,"t":{"3952":{"position":[[547,10]]}}}],["testservic",{"_index":4296,"t":{"1420":{"position":[[227,11],[334,11]]},"1424":{"position":[[191,11],[286,11],[1811,11],[1905,11]]},"3003":{"position":[[171,11],[278,11]]}}}],["testsinglefileproxyasync",{"_index":9196,"t":{"3916":{"position":[[7524,24]]}}}],["teststartup",{"_index":7996,"t":{"3371":{"position":[[333,11],[489,11]]},"3389":{"position":[[854,11]]},"3924":{"position":[[3081,11]]}}}],["testtop",{"_index":5635,"t":{"1803":{"position":[[5649,9]]}}}],["testunifyprovid",{"_index":8602,"t":{"3716":{"position":[[907,17]]}}}],["testvalu",{"_index":8499,"t":{"3672":{"position":[[267,9]]}}}],["teventhandlerexecutor",{"_index":5692,"t":{"1821":{"position":[[457,21]]}}}],["teventhandlermonitor",{"_index":5691,"t":{"1821":{"position":[[417,20]]}}}],["teventpublish",{"_index":5690,"t":{"1821":{"position":[[319,15]]}}}],["teventsubscrib",{"_index":5689,"t":{"1821":{"position":[[278,16]]}}}],["text",{"_index":3196,"t":{"615":{"position":[[201,4]]},"773":{"position":[[300,4],[975,4],[988,4]]},"1741":{"position":[[1637,4]]},"1797":{"position":[[672,4]]},"1801":{"position":[[292,4],[311,4]]},"2147":{"position":[[21,4]]},"2343":{"position":[[37,4],[184,4],[244,4]]},"2352":{"position":[[152,4]]},"2354":{"position":[[41,4]]},"2357":{"position":[[55,4]]},"2359":{"position":[[7,4],[499,4],[639,4]]},"2361":{"position":[[7,4],[440,4]]},"2363":{"position":[[7,4],[191,4],[258,4]]},"2365":{"position":[[7,4],[151,4]]},"2367":{"position":[[7,4],[157,4]]},"2369":{"position":[[7,4],[177,4]]},"2371":{"position":[[7,4],[184,4]]},"2373":{"position":[[7,4],[165,4],[243,4]]},"2375":{"position":[[110,4],[159,4]]},"2379":{"position":[[81,4],[388,4]]},"2381":{"position":[[64,4]]},"2383":{"position":[[301,4]]},"2385":{"position":[[22,4]]},"2387":{"position":[[70,4]]},"2526":{"position":[[43,4]]},"2530":{"position":[[30,4],[65,4]]},"2532":{"position":[[39,4],[127,4],[248,4]]},"2534":{"position":[[60,4]]},"2536":{"position":[[177,4]]},"2538":{"position":[[48,4],[382,4],[462,4],[521,4],[564,4],[597,4],[639,4]]},"2540":{"position":[[44,4]]},"2725":{"position":[[700,4],[1737,4]]},"2790":{"position":[[181,4],[273,4],[863,4],[946,4],[1008,4],[1075,4],[1160,4],[1222,4]]},"2792":{"position":[[101,4],[207,4]]},"2796":{"position":[[397,4],[480,4],[594,4],[715,4]]},"3500":{"position":[[593,4]]},"3506":{"position":[[22,4]]},"3547":{"position":[[22,4]]},"3954":{"position":[[112,4]]},"3986":{"position":[[852,4]]},"4006":{"position":[[589,4]]}}}],["tfilter",{"_index":5818,"t":{"1907":{"position":[[538,7],[608,7]]},"1909":{"position":[[325,7]]}}}],["th",{"_index":6685,"t":{"2559":{"position":[[2571,2],[2577,2],[2580,2]]}}}],["thandler",{"_index":6111,"t":{"2311":{"position":[[203,8]]},"2313":{"position":[[554,8]]}}}],["thank",{"_index":417,"t":{"51":{"position":[[140,5]]},"62":{"position":[[140,5]]},"75":{"position":[[140,5]]}}}],["thenbi",{"_index":3675,"t":{"871":{"position":[[129,6]]},"875":{"position":[[97,6]]}}}],["thenbydescend",{"_index":3677,"t":{"873":{"position":[[149,16]]}}}],["theninclud",{"_index":3649,"t":{"853":{"position":[[187,11],[335,11],[636,11]]}}}],["theori",{"_index":8000,"t":{"3375":{"position":[[51,6],[104,6]]},"3397":{"position":[[636,6]]}}}],["thirddbcontext",{"_index":2818,"t":{"524":{"position":[[712,14]]}}}],["thirddbcontextdbcontextloc",{"_index":2819,"t":{"524":{"position":[[728,30]]}}}],["thousand",{"_index":6954,"t":{"2768":{"position":[[857,8]]}}}],["thread",{"_index":226,"t":{"13":{"position":[[322,9],[361,9]]},"112":{"position":[[278,9]]},"127":{"position":[[491,9]]},"135":{"position":[[208,9]]},"146":{"position":[[212,9]]},"490":{"position":[[96,6]]},"492":{"position":[[469,9]]},"572":{"position":[[160,9],[184,9]]},"927":{"position":[[88,9],[112,9]]},"929":{"position":[[88,9],[112,9]]},"931":{"position":[[62,9],[86,9]]},"1368":{"position":[[170,9]]},"1801":{"position":[[335,9],[359,9],[392,9]]},"1803":{"position":[[1717,9],[2447,9]]},"1883":{"position":[[183,9]]},"2296":{"position":[[322,9],[361,9]]},"2313":{"position":[[88,9]]},"2468":{"position":[[31,6]]},"2482":{"position":[[369,9]]},"2484":{"position":[[469,9]]},"2486":{"position":[[192,9]]},"2805":{"position":[[177,9],[201,9]]},"2813":{"position":[[224,9],[248,9]]},"2817":{"position":[[373,9],[397,9]]},"2825":{"position":[[369,9]]},"2827":{"position":[[515,9]]},"2829":{"position":[[603,9]]},"2856":{"position":[[83,9],[107,9],[2027,9]]},"3156":{"position":[[163,9]]},"3158":{"position":[[154,9]]},"3708":{"position":[[862,9]]},"3956":{"position":[[499,9]]}}}],["threadid",{"_index":9165,"t":{"3916":{"position":[[1026,8]]}}}],["threadloc",{"_index":7133,"t":{"2856":{"position":[[219,11],[264,11],[409,11],[898,11],[1108,11],[1398,11],[1509,11],[1603,11],[1690,11]]}}}],["threadlocalstr",{"_index":7135,"t":{"2856":{"position":[[240,17],[513,17],[622,17],[968,17],[1178,17]]}}}],["three",{"_index":5140,"t":{"1619":{"position":[[227,5]]}}}],["throw",{"_index":2944,"t":{"560":{"position":[[667,5]]},"585":{"position":[[104,5],[166,5],[264,5]]},"822":{"position":[[259,5]]},"913":{"position":[[174,5]]},"1037":{"position":[[851,5]]},"1041":{"position":[[1058,5]]},"1801":{"position":[[2346,5]]},"1803":{"position":[[1190,5],[4301,5]]},"1819":{"position":[[811,5]]},"1845":{"position":[[201,5],[474,5]]},"1847":{"position":[[39,5],[62,5]]},"1859":{"position":[[193,5]]},"1863":{"position":[[0,5],[21,5],[54,5],[77,5],[112,5],[152,5],[198,5],[252,5],[299,5]]},"1869":{"position":[[536,5]]},"1873":{"position":[[368,5]]},"1875":{"position":[[571,5]]},"2191":{"position":[[0,5],[23,5]]},"2193":{"position":[[0,5],[54,5]]},"2195":{"position":[[0,5],[21,5]]},"2197":{"position":[[0,5],[52,5]]},"2201":{"position":[[0,5],[28,5]]},"2472":{"position":[[217,5]]},"2536":{"position":[[188,5]]},"3832":{"position":[[724,5]]},"3932":{"position":[[417,5]]},"3956":{"position":[[33,5]]},"3966":{"position":[[7,5]]}}}],["throwbah",{"_index":5757,"t":{"1885":{"position":[[107,8]]},"3009":{"position":[[139,8]]},"3932":{"position":[[487,8]]}}}],["throwifcallsitenotfound",{"_index":3450,"t":{"734":{"position":[[1098,23],[1952,23],[2806,23],[3801,23],[4655,23],[5509,23]]}}}],["thttpdispatchproxi",{"_index":6037,"t":{"2204":{"position":[[29,18]]}}}],["tier2",{"_index":2554,"t":{"441":{"position":[[561,5]]}}}],["tier3",{"_index":2555,"t":{"441":{"position":[[567,5]]}}}],["tier4",{"_index":2556,"t":{"441":{"position":[[573,5]]}}}],["tiern1",{"_index":2557,"t":{"441":{"position":[[581,6]]}}}],["tiern3",{"_index":2558,"t":{"441":{"position":[[588,6]]}}}],["tiggerbuild",{"_index":8926,"t":{"3817":{"position":[[258,13]]}}}],["tight",{"_index":4215,"t":{"1389":{"position":[[107,5]]}}}],["time",{"_index":1674,"t":{"231":{"position":[[230,4]]},"253":{"position":[[303,4]]},"492":{"position":[[609,4]]},"606":{"position":[[113,4],[1127,4],[1236,4]]},"617":{"position":[[304,4],[328,4]]},"1474":{"position":[[420,4]]},"2226":{"position":[[92,4]]},"2228":{"position":[[110,4]]},"2313":{"position":[[739,5]]},"2442":{"position":[[1536,4]]},"2482":{"position":[[509,4]]},"2484":{"position":[[609,4]]},"2813":{"position":[[606,4]]},"2817":{"position":[[885,4]]},"2825":{"position":[[509,4]]},"2827":{"position":[[655,4]]},"2829":{"position":[[773,4]]},"3236":{"position":[[326,4]]},"3770":{"position":[[2318,4],[2336,4],[2359,4],[2407,4],[2633,4],[4137,4],[4156,4],[4180,4],[4221,4],[4441,4]]},"3785":{"position":[[1353,4]]},"3812":{"position":[[1910,4],[1929,4],[1953,4],[1994,4],[2214,4]]}}}],["timecachekey",{"_index":1672,"t":{"231":{"position":[[208,12],[473,12]]},"233":{"position":[[55,12],[212,12],[497,12]]},"235":{"position":[[188,12]]}}}],["timecrontab",{"_index":2625,"t":{"467":{"position":[[26,11]]},"492":{"position":[[13,11]]},"2484":{"position":[[13,11]]},"2827":{"position":[[59,11]]},"2829":{"position":[[77,11]]}}}],["timeonli",{"_index":6254,"t":{"2381":{"position":[[24,8],[288,8],[499,8]]},"3912":{"position":[[1131,8],[2645,8]]}}}],["timeoperationelapsedmillisecond",{"_index":8197,"t":{"3452":{"position":[[1968,32]]},"3916":{"position":[[4964,32]]}}}],["timeout",{"_index":4103,"t":{"1281":{"position":[[1,7],[85,7]]},"3512":{"position":[[94,7]]},"3577":{"position":[[107,7],[198,7]]},"3770":{"position":[[2566,7],[4378,7]]},"3812":{"position":[[2151,7]]},"3914":{"position":[[2093,7],[2242,7],[2333,7]]},"3962":{"position":[[325,7],[433,7],[467,7]]}}}],["timer",{"_index":6281,"t":{"2398":{"position":[[90,5],[161,5]]},"2400":{"position":[[24,5]]},"2402":{"position":[[95,5]]},"2406":{"position":[[101,5],[246,5],[397,5],[553,5]]},"2409":{"position":[[32,5]]},"2411":{"position":[[20,5]]},"2413":{"position":[[20,5]]},"2415":{"position":[[103,5],[233,5]]},"2426":{"position":[[41,5]]},"2428":{"position":[[43,5]]},"2430":{"position":[[27,5]]},"2432":{"position":[[27,5]]},"2434":{"position":[[100,5],[237,5],[426,5],[574,5]]},"2438":{"position":[[110,5]]},"2440":{"position":[[144,5],[517,5]]},"2442":{"position":[[346,5],[578,5],[851,5],[1134,5],[1368,5],[1625,5],[1853,5]]},"2470":{"position":[[127,5]]},"2476":{"position":[[20,5]]},"2478":{"position":[[127,5]]},"2486":{"position":[[528,5],[613,5],[696,5],[781,5],[867,5],[953,5]]},"2488":{"position":[[0,5]]}}}],["timespan",{"_index":1684,"t":{"233":{"position":[[106,8],[549,8],[615,8]]},"235":{"position":[[144,8]]},"253":{"position":[[760,8]]},"1667":{"position":[[289,8],[353,8],[517,8],[576,8]]},"1803":{"position":[[1518,8]]},"2848":{"position":[[226,8]]},"3577":{"position":[[117,8],[208,8]]},"3579":{"position":[[374,8],[477,8]]},"3914":{"position":[[2252,8],[2343,8]]}}}],["timestamp",{"_index":8211,"t":{"3452":{"position":[[3046,9]]},"3708":{"position":[[531,9],[3685,9]]},"3720":{"position":[[194,9]]},"3916":{"position":[[6042,9]]},"3956":{"position":[[3013,9]]}}}],["tinyint",{"_index":10231,"t":{"3992":{"position":[[1683,7]]}}}],["tip",{"_index":4110,"t":{"1309":{"position":[[0,3]]},"1555":{"position":[[536,3]]}}}],["titl",{"_index":2120,"t":{"321":{"position":[[273,5]]},"445":{"position":[[476,5],[482,5],[504,5]]},"587":{"position":[[1773,5],[2027,5]]},"763":{"position":[[102,5],[145,5]]},"773":{"position":[[679,5],[693,5]]},"1887":{"position":[[299,5]]},"3063":{"position":[[1562,5]]},"3065":{"position":[[82,5]]},"3446":{"position":[[227,5]]},"3642":{"position":[[156,5]]},"3704":{"position":[[450,5],[772,5]]},"3706":{"position":[[1573,5],[1830,5]]},"3924":{"position":[[3984,5],[4312,5]]}}}],["tiya",{"_index":4705,"t":{"1511":{"position":[[1552,4]]}}}],["tkey",{"_index":3465,"t":{"734":{"position":[[6340,4]]},"947":{"position":[[1010,4]]},"949":{"position":[[341,4],[383,4]]},"1775":{"position":[[403,4],[424,4],[493,4],[541,4],[638,4],[706,4],[855,4],[943,4],[1144,4],[1252,4],[1505,4],[1633,4],[1938,4],[2086,4],[2443,4],[2611,4],[3020,4],[3208,4],[3676,4],[3734,4]]},"1803":{"position":[[208,4],[296,4],[454,4],[558,4],[672,4],[974,4]]}}}],["tl",{"_index":2574,"t":{"445":{"position":[[366,3]]},"3914":{"position":[[2670,3]]}}}],["tlifetim",{"_index":4268,"t":{"1412":{"position":[[1769,9]]}}}],["tlocat",{"_index":3807,"t":{"947":{"position":[[1016,8],[1047,8]]}}}],["tmasterdbcontextloc",{"_index":3810,"t":{"949":{"position":[[212,23]]},"988":{"position":[[212,23],[251,23]]},"1066":{"position":[[53,23],[577,23],[1678,23]]},"2127":{"position":[[45,23]]},"3968":{"position":[[81,23]]}}}],["tmessag",{"_index":6110,"t":{"2311":{"position":[[193,8]]},"2313":{"position":[[18,8],[481,8],[544,8]]}}}],["tn",{"_index":6459,"t":{"2559":{"position":[[277,2]]}}}],["toaesdecrypt",{"_index":5271,"t":{"1689":{"position":[[270,12]]},"3976":{"position":[[570,12]]}}}],["toaesencrypt",{"_index":5269,"t":{"1689":{"position":[[199,12]]}}}],["toarray",{"_index":5569,"t":{"1801":{"position":[[1679,7]]},"1827":{"position":[[142,7]]},"3254":{"position":[[1157,7],[1273,7]]}}}],["tobytearray",{"_index":5395,"t":{"1743":{"position":[[330,11],[443,11]]},"3942":{"position":[[22,11]]}}}],["todescdecrypt",{"_index":5273,"t":{"1689":{"position":[[430,13]]}}}],["todescencrypt",{"_index":5272,"t":{"1689":{"position":[[358,13]]}}}],["todictionari",{"_index":1949,"t":{"288":{"position":[[479,12]]},"294":{"position":[[108,12]]},"3254":{"position":[[1572,12]]},"3914":{"position":[[2701,12]]}}}],["todo",{"_index":3070,"t":{"587":{"position":[[679,4]]},"1795":{"position":[[267,4],[355,4],[407,4],[421,4],[489,4],[521,4],[617,4],[672,4],[686,4],[2181,4],[2299,4],[2425,4],[2597,4],[3086,4]]},"1797":{"position":[[828,4],[846,4]]},"1811":{"position":[[413,4]]},"3795":{"position":[[417,4]]},"3936":{"position":[[1402,4],[1467,4]]}}}],["todocontrol",{"_index":5504,"t":{"1795":{"position":[[1917,14],[1970,14],[2090,14]]}}}],["todoeventhandlermonitor",{"_index":5644,"t":{"1807":{"position":[[85,23],[123,23],[197,23],[238,23],[270,23],[790,23],[881,23]]}}}],["todoeventpublish",{"_index":5638,"t":{"1805":{"position":[[98,18],[200,18],[557,18]]}}}],["todoeventsourc",{"_index":5518,"t":{"1797":{"position":[[93,15],[133,15],[162,15],[810,15]]}}}],["todoeventsubscrib",{"_index":5483,"t":{"1795":{"position":[[8,19],[68,19],[134,19],[171,19],[199,19],[2630,19],[2710,19],[2886,19],[2970,19],[3058,19]]},"1811":{"position":[[123,19],[189,19],[226,19],[282,19]]},"1823":{"position":[[83,19],[162,19],[245,19],[308,19]]}}}],["todonam",{"_index":5519,"t":{"1797":{"position":[[201,8],[232,8],[243,8],[278,8]]}}}],["toexpress",{"_index":7639,"t":{"3222":{"position":[[230,12]]}}}],["togeth",{"_index":3557,"t":{"771":{"position":[[216,8]]}}}],["token",{"_index":366,"t":{"36":{"position":[[31,5]]},"114":{"position":[[673,5]]},"121":{"position":[[314,5],[354,5],[370,5],[400,5],[434,5],[459,5]]},"127":{"position":[[1435,5],[1628,5],[1654,5],[1703,5],[1769,5]]},"133":{"position":[[637,5]]},"144":{"position":[[76,5],[99,5],[260,5],[353,5],[442,5],[524,5]]},"146":{"position":[[552,5]]},"148":{"position":[[81,5],[115,5],[372,5],[457,5],[466,5],[481,5],[492,5],[503,5],[525,5],[535,5],[554,5],[564,5]]},"150":{"position":[[100,5]]},"152":{"position":[[19,5],[47,5],[102,5],[121,5],[131,5],[187,5],[209,5],[217,5],[311,5],[389,5],[408,5],[418,5],[474,5],[483,5],[491,5],[585,5],[647,5],[702,5]]},"237":{"position":[[522,5]]},"329":{"position":[[103,5],[121,5]]},"415":{"position":[[207,5],[225,5]]},"417":{"position":[[194,5],[211,5]]},"1683":{"position":[[4,5],[175,5],[261,5],[275,5]]},"1691":{"position":[[470,5]]},"1797":{"position":[[580,5]]},"1801":{"position":[[2149,5],[2827,5]]},"1803":{"position":[[1395,5],[4111,5],[4799,5]]},"2132":{"position":[[12,5],[22,5],[111,5],[126,5],[219,5],[232,5],[351,5]]},"2134":{"position":[[55,5]]},"2136":{"position":[[42,5],[59,5],[70,5]]},"2140":{"position":[[69,5]]},"2144":{"position":[[44,5],[130,5]]},"2245":{"position":[[79,5],[168,5]]},"2253":{"position":[[40,5],[51,5]]},"2991":{"position":[[213,5],[231,5]]},"2995":{"position":[[186,5],[203,5]]},"3037":{"position":[[16,5]]},"3446":{"position":[[1148,5]]},"3494":{"position":[[118,5],[160,5],[264,5]]},"3510":{"position":[[166,5]]},"3522":{"position":[[1014,5],[1021,5]]},"3539":{"position":[[399,5],[531,5]]},"3551":{"position":[[474,5]]},"3622":{"position":[[124,5]]},"3650":{"position":[[26,5]]},"3684":{"position":[[135,5]]},"3704":{"position":[[841,5],[960,5]]},"3795":{"position":[[294,5],[462,5]]},"3912":{"position":[[1885,5]]},"3914":{"position":[[2968,5],[3055,5]]},"3920":{"position":[[1634,5]]},"3924":{"position":[[4381,5],[4500,5]]},"3928":{"position":[[1710,5]]},"3930":{"position":[[249,5],[262,5],[563,5],[875,5],[896,5]]},"3932":{"position":[[86,5],[103,5]]},"3936":{"position":[[749,5]]},"3952":{"position":[[609,5],[619,5]]},"3964":{"position":[[394,5],[952,5]]},"3974":{"position":[[554,5],[576,5]]},"3982":{"position":[[568,5],[898,5]]},"3984":{"position":[[685,5],[698,5],[730,5]]},"3986":{"position":[[758,5],[772,5]]},"3990":{"position":[[418,5],[434,5]]},"3992":{"position":[[1549,5],[1563,5],[2105,5],[2137,5],[3904,5]]},"3994":{"position":[[150,5],[1543,5]]}}}],["tokendata",{"_index":5238,"t":{"1683":{"position":[[133,9],[204,9]]},"2140":{"position":[[14,9]]}}}],["tokeninfo",{"_index":5992,"t":{"2142":{"position":[[68,9]]},"2144":{"position":[[4,9]]}}}],["tokenvalidationresult",{"_index":9815,"t":{"3966":{"position":[[606,21]]}}}],["tolist",{"_index":2925,"t":{"558":{"position":[[319,6],[364,6]]},"570":{"position":[[1064,6]]},"824":{"position":[[61,6]]},"834":{"position":[[128,6]]},"881":{"position":[[250,6],[404,6]]},"889":{"position":[[722,6]]},"1064":{"position":[[878,6]]},"1066":{"position":[[1421,6],[1619,6]]},"1366":{"position":[[76,6]]},"2694":{"position":[[185,6],[274,6]]},"3218":{"position":[[264,6]]},"3222":{"position":[[246,6]]},"3224":{"position":[[1068,6]]},"3226":{"position":[[605,6],[646,6]]},"3230":{"position":[[99,6],[321,6]]},"3258":{"position":[[170,6]]},"3261":{"position":[[44,6],[106,6],[261,6],[544,6]]},"3263":{"position":[[172,6]]},"3291":{"position":[[370,6],[1140,6]]}}}],["tolistasync",{"_index":3692,"t":{"877":{"position":[[2337,11]]},"958":{"position":[[257,11]]},"1024":{"position":[[152,11]]},"1368":{"position":[[657,11]]},"2607":{"position":[[257,11],[669,11]]},"3984":{"position":[[363,11]]}}}],["tomd5compar",{"_index":5268,"t":{"1689":{"position":[[149,12]]}}}],["tomd5encrypt",{"_index":5267,"t":{"1689":{"position":[[116,12]]}}}],["tool",{"_index":545,"t":{"91":{"position":[[560,5],[585,5]]},"675":{"position":[[82,5],[158,5]]},"679":{"position":[[19,5]]},"685":{"position":[[20,5],[86,5],[374,5],[445,5],[495,5]]},"688":{"position":[[38,5]]},"696":{"position":[[17,5],[403,5],[433,5],[459,5],[509,5],[538,5],[576,5],[602,5],[905,5],[931,5],[966,5],[1010,5],[1138,5],[2131,5],[2183,5],[2319,5],[3069,5],[3113,5],[3241,5],[3745,5],[3792,5],[3923,5],[4686,5]]},"698":{"position":[[7,5],[51,5]]},"702":{"position":[[55,5]]},"722":{"position":[[7,4]]},"1483":{"position":[[516,5],[924,5]]},"1516":{"position":[[99,5],[198,5]]},"1532":{"position":[[7,5]]},"1535":{"position":[[17,5],[209,5],[255,5]]},"1537":{"position":[[34,5]]},"1539":{"position":[[33,5],[279,5],[1132,5]]},"1543":{"position":[[13,5]]},"1547":{"position":[[102,4],[237,5],[319,4],[388,4],[490,5],[503,5]]},"1549":{"position":[[96,4],[144,5],[192,5],[242,4],[348,5],[408,4],[468,4],[561,5],[573,5]]},"1551":{"position":[[370,5],[416,5],[1052,5],[1161,4]]},"1553":{"position":[[18,5]]},"2774":{"position":[[395,5],[570,5]]},"2897":{"position":[[746,5]]},"3932":{"position":[[1132,5]]},"3952":{"position":[[14,5]]},"3966":{"position":[[829,4],[1458,5]]},"3972":{"position":[[308,5]]},"3982":{"position":[[794,5]]},"3994":{"position":[[1451,5]]},"3996":{"position":[[938,5],[996,5],[1048,5],[1323,5]]}}}],["toolcommandnam",{"_index":4950,"t":{"1535":{"position":[[233,15],[262,15],[481,15]]},"1547":{"position":[[215,15],[244,15]]},"1551":{"position":[[394,15],[423,15]]}}}],["top",{"_index":3626,"t":{"836":{"position":[[220,3]]},"1125":{"position":[[281,3]]},"1160":{"position":[[107,3],[997,3]]},"1162":{"position":[[111,3],[1049,3]]},"1185":{"position":[[207,3]]},"1238":{"position":[[203,3],[378,3]]},"1240":{"position":[[203,3],[399,3]]},"2532":{"position":[[64,3]]}}}],["top10",{"_index":7779,"t":{"3261":{"position":[[66,5]]}}}],["topagedlist",{"_index":3835,"t":{"962":{"position":[[72,11],[141,11]]},"3946":{"position":[[404,11]]},"3948":{"position":[[542,11]]},"3962":{"position":[[1174,11]]},"3966":{"position":[[759,11]]}}}],["topagedlistasync",{"_index":3836,"t":{"962":{"position":[[239,16],[319,16]]}}}],["topagelist",{"_index":7637,"t":{"3220":{"position":[[91,10]]},"3234":{"position":[[641,10]]},"3265":{"position":[[91,10]]},"3273":{"position":[[69,10]]}}}],["topbkdf2compar",{"_index":5275,"t":{"1689":{"position":[[588,15]]}}}],["topbkdf2encrypt",{"_index":5274,"t":{"1689":{"position":[[552,15]]}}}],["topic",{"_index":5609,"t":{"1803":{"position":[[2758,5],[3097,5],[3270,5],[3513,5],[3521,5],[3645,5],[4548,5]]}}}],["toption",{"_index":5926,"t":{"2039":{"position":[[29,8],[97,8],[166,8]]},"2075":{"position":[[40,7]]},"2713":{"position":[[42,8],[89,8],[116,8],[142,8],[188,8],[222,8],[257,8],[300,8],[342,8],[382,8],[420,8]]},"2715":{"position":[[43,8],[96,8],[158,8]]},"2717":{"position":[[38,8],[110,8],[185,8],[206,8],[296,8],[389,8],[420,8]]},"2725":{"position":[[60,8],[137,8],[620,8],[1085,8],[1820,8],[2526,8],[2581,8],[2620,8]]},"2727":{"position":[[88,8],[118,8],[741,8],[796,8],[835,8]]},"2729":{"position":[[117,8],[149,8],[729,8],[764,8]]},"3916":{"position":[[1859,8],[1901,8],[2303,8]]},"3952":{"position":[[395,8],[433,7]]}}}],["toptionsvalid",{"_index":6845,"t":{"2725":{"position":[[1095,18],[1830,18],[2536,18]]},"2727":{"position":[[751,18]]}}}],["torsadecrypt",{"_index":5277,"t":{"1689":{"position":[[794,12]]}}}],["torsaencrpyt",{"_index":5276,"t":{"1689":{"position":[[753,12]]}}}],["tosqlqueri",{"_index":3721,"t":{"889":{"position":[[572,10]]}}}],["tostorag",{"_index":7694,"t":{"3232":{"position":[[30,9],[167,9]]},"3236":{"position":[[417,9]]}}}],["tostr",{"_index":298,"t":{"19":{"position":[[440,8]]},"253":{"position":[[595,8]]},"288":{"position":[[155,8]]},"490":{"position":[[185,8],[430,8]]},"494":{"position":[[729,8]]},"570":{"position":[[1991,8],[2336,8],[2627,8]]},"1681":{"position":[[39,8]]},"1741":{"position":[[576,8],[1335,8],[2171,8]]},"2398":{"position":[[53,8],[221,8]]},"2400":{"position":[[84,8]]},"2402":{"position":[[155,8]]},"2406":{"position":[[298,8],[605,8]]},"2409":{"position":[[92,8]]},"2411":{"position":[[80,8]]},"2413":{"position":[[80,8]]},"2415":{"position":[[285,8]]},"2426":{"position":[[101,8]]},"2428":{"position":[[103,8]]},"2430":{"position":[[87,8]]},"2432":{"position":[[87,8]]},"2434":{"position":[[289,8],[626,8]]},"2438":{"position":[[157,8]]},"2440":{"position":[[193,8],[566,8]]},"2442":{"position":[[398,8],[630,8],[903,8],[1186,8],[1420,8],[1677,8],[1905,8]]},"2470":{"position":[[179,8]]},"3222":{"position":[[172,8]]},"3430":{"position":[[3361,8],[3412,8]]},"3432":{"position":[[2037,8],[3330,8],[3381,8],[3622,8],[3678,8],[3859,8]]},"3434":{"position":[[2414,8],[2465,8]]},"3806":{"position":[[2721,8],[3147,8],[3218,8],[3238,8]]}}}],["totabl",{"_index":3279,"t":{"655":{"position":[[441,7]]}}}],["total",{"_index":7809,"t":{"3273":{"position":[[89,5]]}}}],["totalcount",{"_index":7636,"t":{"3220":{"position":[[42,10],[127,10]]},"3265":{"position":[[42,10],[127,10]]}}}],["totoaesdecrypt",{"_index":9947,"t":{"3976":{"position":[[587,14]]}}}],["tounixtimemillisecond",{"_index":8594,"t":{"3708":{"position":[[3719,22]]},"3720":{"position":[[228,22]]},"3956":{"position":[[3047,22]]}}}],["toupper",{"_index":3518,"t":{"763":{"position":[[179,7]]}}}],["toview",{"_index":3387,"t":{"696":{"position":[[4542,6]]}}}],["tp",{"_index":6062,"t":{"2261":{"position":[[26,2]]},"3464":{"position":[[21,2],[74,2]]},"3928":{"position":[[515,2]]},"3934":{"position":[[46,2],[1118,2]]},"3936":{"position":[[1898,2]]}}}],["tr",{"_index":4858,"t":{"1511":{"position":[[3531,2]]},"2559":{"position":[[2590,2],[2598,2],[2601,2]]}}}],["trace",{"_index":6017,"t":{"2171":{"position":[[242,5],[249,5]]},"3416":{"position":[[57,5]]},"3424":{"position":[[275,5],[282,5]]},"3442":{"position":[[170,5]]},"3832":{"position":[[2170,5],[3931,5],[4925,5]]}}}],["tran",{"_index":7687,"t":{"3228":{"position":[[271,4],[348,4]]}}}],["transact",{"_index":7866,"t":{"3287":{"position":[[3106,12],[3119,11]]},"3291":{"position":[[36,11],[388,11],[443,11],[691,11],[1058,11],[1160,11],[1215,11]]}}}],["transactionisolationlevel",{"_index":7847,"t":{"3287":{"position":[[838,25]]}}}],["transactionopt",{"_index":7877,"t":{"3291":{"position":[[1429,18]]}}}],["transactionscop",{"_index":7845,"t":{"3287":{"position":[[749,16]]},"3291":{"position":[[1375,16]]},"3922":{"position":[[357,16]]}}}],["transactionscopeasyncflow",{"_index":7850,"t":{"3287":{"position":[[1006,25]]}}}],["transactionscopeasyncflowopt",{"_index":7851,"t":{"3287":{"position":[[1047,31]]},"3291":{"position":[[1305,31]]}}}],["transactionscopeopt",{"_index":7846,"t":{"3287":{"position":[[778,22]]},"3291":{"position":[[1392,22]]}}}],["transactiontimeout",{"_index":7849,"t":{"3287":{"position":[[930,18]]}}}],["transfer",{"_index":7067,"t":{"2796":{"position":[[626,8],[726,8]]}}}],["transient",{"_index":4298,"t":{"1420":{"position":[[258,9],[687,9]]},"3001":{"position":[[248,9]]},"3003":{"position":[[202,9]]}}}],["tree",{"_index":1120,"t":{"148":{"position":[[199,4]]},"2326":{"position":[[90,4]]},"3131":{"position":[[367,4]]},"3401":{"position":[[236,4]]},"3702":{"position":[[157,4]]}}}],["trepositori",{"_index":3865,"t":{"988":{"position":[[466,11]]}}}],["tresult",{"_index":4015,"t":{"1133":{"position":[[46,7]]}}}],["tri",{"_index":5600,"t":{"1803":{"position":[[1486,3],[1928,3]]},"1834":{"position":[[21,3]]},"1837":{"position":[[48,3]]},"1839":{"position":[[44,3]]},"3291":{"position":[[97,3],[745,3],[1584,3]]},"3434":{"position":[[393,3]]},"3452":{"position":[[1022,3]]},"3795":{"position":[[394,3]]},"3916":{"position":[[4018,3]]}}}],["triangl",{"_index":2936,"t":{"560":{"position":[[303,8],[609,8]]}}}],["trianglepars",{"_index":2935,"t":{"560":{"position":[[251,14],[627,14]]}}}],["trigger",{"_index":3269,"t":{"655":{"position":[[141,8],[256,8]]},"2175":{"position":[[127,8],[376,8]]},"3762":{"position":[[333,7],[477,8]]},"3764":{"position":[[95,8]]},"3766":{"position":[[113,8],[144,8],[181,8],[209,8]]},"3768":{"position":[[154,8],[508,7],[827,7],[1022,7],[1327,7],[1522,7],[1829,7],[2025,7],[2332,7],[2564,8]]},"3770":{"position":[[684,7],[1272,7],[1557,7],[1575,7],[1658,7],[2126,7],[2175,7],[2724,7],[3008,7],[3026,7],[3156,7],[3278,7],[3940,7],[3991,7],[4478,7],[4585,7],[4873,7],[4891,7],[4977,7],[5445,7],[5959,7]]},"3772":{"position":[[207,8],[521,8]]},"3774":{"position":[[195,8],[665,7]]},"3777":{"position":[[312,7]]},"3781":{"position":[[688,8]]},"3783":{"position":[[534,7]]},"3791":{"position":[[505,7],[1284,7],[2032,7]]},"3793":{"position":[[133,7]]},"3795":{"position":[[599,7]]},"3798":{"position":[[6,7],[29,7]]},"3802":{"position":[[6,7],[45,7],[91,7],[122,7],[219,7],[500,7],[574,7]]},"3804":{"position":[[76,8],[361,8],[376,8],[473,8],[538,8],[609,8],[702,8],[763,8],[824,8],[886,8],[949,8],[1013,8],[1079,8]]},"3806":{"position":[[61,7],[147,7],[260,8],[278,8],[356,8],[1432,7],[1651,8],[1669,8],[1750,8],[2772,7],[3259,7],[3591,7]]},"3808":{"position":[[626,8],[1025,7],[2246,7]]},"3810":{"position":[[20,7],[116,8]]},"3812":{"position":[[0,7],[71,7],[699,7],[835,7],[975,7],[1716,7],[1767,7],[2251,7],[2334,7],[2384,7],[2904,7]]},"3815":{"position":[[42,7]]},"3817":{"position":[[349,8],[376,8],[886,8],[1916,8]]},"3819":{"position":[[422,8],[495,8],[534,7],[589,7],[609,7]]},"3821":{"position":[[393,8]]},"3830":{"position":[[259,7]]},"3832":{"position":[[712,7],[967,8]]},"3836":{"position":[[39,8],[134,8]]},"3838":{"position":[[39,8],[160,8]]},"3842":{"position":[[732,8],[849,8],[1319,8],[1414,8],[1901,8],[2004,8],[2523,8],[2645,8],[3148,8],[3262,8]]},"3850":{"position":[[202,7]]},"3852":{"position":[[321,7]]},"3864":{"position":[[38,7]]},"3874":{"position":[[135,7]]},"3876":{"position":[[253,7]]},"3884":{"position":[[148,7],[164,7],[179,7]]},"3886":{"position":[[152,7]]},"3888":{"position":[[177,7]]},"3896":{"position":[[318,8]]}}}],["trigger1",{"_index":8650,"t":{"3762":{"position":[[592,8],[703,8],[814,8],[924,8],[1035,8],[1146,8]]},"3764":{"position":[[202,8],[315,8],[428,8],[541,8],[654,8],[767,8]]},"3766":{"position":[[795,8]]},"3768":{"position":[[661,8],[817,8],[1012,8],[1161,8],[1317,8],[1512,8],[1662,8],[1819,8],[2015,8],[2165,8],[2322,8],[2677,8],[2787,8],[2898,8],[3009,8],[3120,8]]},"3770":{"position":[[715,8],[2145,8],[3829,8],[3960,8],[4498,8],[5515,8]]},"3772":{"position":[[901,8],[1012,8],[1129,8],[1246,8],[1363,8],[1480,8],[1597,8],[1708,8],[1820,8],[1937,8],[2054,8]]},"3774":{"position":[[786,8],[1000,8],[1221,8],[1556,8],[1662,8]]},"3783":{"position":[[676,8],[796,8],[917,8],[1038,8],[1159,8]]},"3802":{"position":[[713,8],[1358,8]]},"3806":{"position":[[492,8],[635,8],[778,8],[922,8],[1065,8],[1209,8],[1897,8],[2039,8],[2181,8],[2323,8],[2465,8],[2607,8],[3725,8],[3849,8]]},"3808":{"position":[[1516,8],[2380,8],[2504,8],[2628,8],[2752,8],[2876,8],[3305,8]]},"3810":{"position":[[153,8]]},"3812":{"position":[[126,8],[1409,8],[1657,8],[1736,8],[2271,8],[2463,8]]},"3817":{"position":[[924,8],[1950,8]]},"3819":{"position":[[361,8],[1039,8],[1296,8],[1421,8]]},"3821":{"position":[[427,8]]},"3828":{"position":[[1041,8],[1132,8],[1264,8]]},"3832":{"position":[[1105,8],[1197,8],[1317,8],[1437,8],[1557,8],[1714,8],[3285,8],[3392,8],[3527,8]]},"3850":{"position":[[192,8]]},"3852":{"position":[[180,8],[311,8]]},"3854":{"position":[[182,8]]},"3872":{"position":[[50,8]]},"3874":{"position":[[125,8]]},"3876":{"position":[[112,8],[243,8]]},"3884":{"position":[[129,8],[211,8]]},"3888":{"position":[[158,8]]},"3890":{"position":[[41,8]]},"3896":{"position":[[352,8]]}}}],["trigger2",{"_index":8671,"t":{"3766":{"position":[[374,8],[479,8],[584,8],[689,8],[904,8],[1125,8],[1460,8],[1566,8],[1671,8]]},"3774":{"position":[[891,8]]},"3808":{"position":[[1159,8],[1277,8],[1637,8]]},"3819":{"position":[[1358,8],[1438,8]]}}}],["trigger3",{"_index":8680,"t":{"3766":{"position":[[1010,8],[1231,8],[1346,8]]},"3774":{"position":[[1106,8],[1327,8],[1441,8]]},"3808":{"position":[[1395,8]]}}}],["trigger_id",{"_index":8738,"t":{"3770":{"position":[[2126,10],[3940,10],[4478,10]]},"3812":{"position":[[1716,10],[2251,10]]}}}],["trigger_typ",{"_index":8740,"t":{"3770":{"position":[[2175,12],[3991,12]]},"3812":{"position":[[1767,12]]}}}],["triggerattribut",{"_index":8888,"t":{"3808":{"position":[[72,16],[1799,16]]}}}],["triggerbuild",{"_index":8858,"t":{"3802":{"position":[[58,14],[177,14],[239,14],[256,14],[316,14],[333,14],[414,14],[431,14],[537,14],[554,14],[649,14],[666,14],[1296,14],[1313,14],[1991,14],[2013,14],[2030,14],[2343,14],[2387,14],[2495,14]]},"3804":{"position":[[57,14],[92,14],[136,14],[153,14],[207,14],[224,14],[284,14],[301,14],[388,14],[456,14],[521,14],[592,14],[685,14],[746,14],[807,14],[869,14],[932,14],[996,14],[1062,14]]},"3810":{"position":[[0,14],[99,14],[1045,14]]},"3812":{"position":[[10,14]]},"3817":{"position":[[2702,15]]},"3819":{"position":[[33,14],[226,15],[303,14],[680,14],[959,14],[1315,14]]},"3826":{"position":[[354,14],[398,14],[451,14],[522,14],[584,14]]},"3842":{"position":[[545,14]]},"3870":{"position":[[4,15]]},"3872":{"position":[[4,14]]},"3886":{"position":[[128,14],[195,14]]},"3888":{"position":[[223,14]]}}}],["triggerbuilder1",{"_index":8934,"t":{"3819":{"position":[[777,15],[872,15],[1122,15],[1217,15]]}}}],["triggerbuilder2",{"_index":8935,"t":{"3819":{"position":[[815,15],[889,15],[1160,15],[1234,15]]}}}],["triggerid",{"_index":8645,"t":{"3762":{"position":[[288,9]]},"3768":{"position":[[463,9]]},"3770":{"position":[[697,9],[3810,9],[5499,9]]},"3774":{"position":[[620,9]]},"3783":{"position":[[489,9]]},"3791":{"position":[[460,9],[1239,9],[1987,9]]},"3793":{"position":[[99,9]]},"3795":{"position":[[554,9]]},"3798":{"position":[[65,9]]},"3802":{"position":[[693,9],[1340,9],[2230,9]]},"3806":{"position":[[3546,9]]},"3808":{"position":[[980,9],[2201,9],[2939,9],[3292,9]]},"3812":{"position":[[108,9],[1110,9],[1638,9],[2447,9]]},"3817":{"position":[[904,9],[1932,9]]},"3821":{"position":[[409,9]]},"3828":{"position":[[390,9],[426,9],[596,9],[632,9],[729,9],[765,9]]},"3830":{"position":[[225,9]]},"3832":{"position":[[667,9]]},"3878":{"position":[[24,9]]},"3880":{"position":[[24,9]]},"3896":{"position":[[334,9]]}}}],["triggernam",{"_index":3281,"t":{"655":{"position":[[470,11]]}}}],["triggerstatu",{"_index":8839,"t":{"3798":{"position":[[282,13]]},"3800":{"position":[[24,13]]},"3810":{"position":[[480,13]]}}}],["triggertyp",{"_index":8721,"t":{"3770":{"position":[[744,11],[5540,11]]},"3798":{"position":[[110,11]]},"3802":{"position":[[727,11],[1370,11],[2099,11]]},"3812":{"position":[[155,11],[1132,11],[2488,11]]},"3817":{"position":[[938,11],[1962,11]]},"3821":{"position":[[454,11]]},"3896":{"position":[[379,11]]}}}],["troubleshoot",{"_index":4355,"t":{"1468":{"position":[[312,12]]}}}],["trube",{"_index":4710,"t":{"1511":{"position":[[1608,5]]}}}],["true",{"_index":960,"t":{"127":{"position":[[278,4],[720,4],[759,4],[836,4],[862,4],[944,4],[971,4],[1035,4],[1062,4],[1128,4],[1156,4],[1163,4]]},"133":{"position":[[1075,4]]},"139":{"position":[[50,4]]},"146":{"position":[[1048,4]]},"220":{"position":[[457,4]]},"231":{"position":[[395,4]]},"247":{"position":[[387,4]]},"251":{"position":[[375,4],[415,4]]},"270":{"position":[[208,4]]},"272":{"position":[[80,4],[198,4]]},"274":{"position":[[80,4]]},"276":{"position":[[80,4],[169,4]]},"278":{"position":[[80,4]]},"280":{"position":[[80,4],[174,4],[244,4]]},"282":{"position":[[80,4],[403,4]]},"288":{"position":[[80,4],[222,4]]},"290":{"position":[[80,4]]},"325":{"position":[[153,4]]},"415":{"position":[[320,4],[423,4]]},"419":{"position":[[151,4],[172,4]]},"423":{"position":[[332,4]]},"455":{"position":[[582,4],[604,4],[833,4],[855,4],[1101,4],[1123,4]]},"490":{"position":[[88,4],[329,4]]},"520":{"position":[[112,4],[246,4]]},"532":{"position":[[95,4],[220,4]]},"544":{"position":[[280,4]]},"606":{"position":[[644,4],[657,4],[792,4],[922,4],[1015,4],[1140,4],[1249,4]]},"615":{"position":[[853,4],[1075,4]]},"653":{"position":[[137,4],[569,4]]},"688":{"position":[[458,4]]},"745":{"position":[[332,4]]},"793":{"position":[[42,4]]},"901":{"position":[[112,4],[246,4],[274,4]]},"1054":{"position":[[488,4]]},"1056":{"position":[[777,4]]},"1248":{"position":[[69,4],[219,4],[323,4]]},"1315":{"position":[[112,4],[246,4],[274,4]]},"1329":{"position":[[247,4],[455,4],[750,4],[991,4]]},"1331":{"position":[[256,4],[470,4],[774,4],[1024,4]]},"1333":{"position":[[247,4],[455,4],[750,4],[991,4]]},"1335":{"position":[[256,4],[473,4],[777,4],[1027,4]]},"1341":{"position":[[265,4],[578,4]]},"1343":{"position":[[274,4],[596,4]]},"1345":{"position":[[265,4],[578,4]]},"1347":{"position":[[274,4],[596,4]]},"1353":{"position":[[137,4],[536,4]]},"1379":{"position":[[288,4]]},"1468":{"position":[[187,4]]},"1485":{"position":[[73,4]]},"1535":{"position":[[291,4],[333,4],[557,4]]},"1549":{"position":[[185,4]]},"1551":{"position":[[452,4],[494,4],[844,4]]},"1555":{"position":[[239,4],[455,4]]},"1557":{"position":[[177,4]]},"1609":{"position":[[693,4]]},"1623":{"position":[[109,4]]},"1625":{"position":[[103,4],[121,4]]},"1627":{"position":[[321,4]]},"1637":{"position":[[73,4],[99,4]]},"1641":{"position":[[107,4],[171,4],[373,4]]},"1645":{"position":[[133,4],[231,4]]},"1647":{"position":[[65,4],[287,4],[415,4]]},"1649":{"position":[[190,4]]},"1661":{"position":[[190,4]]},"1663":{"position":[[180,4],[216,4]]},"1677":{"position":[[210,4],[302,4]]},"1709":{"position":[[81,4]]},"1735":{"position":[[291,4]]},"1753":{"position":[[319,4]]},"1795":{"position":[[1132,4]]},"1803":{"position":[[1182,4],[2082,4]]},"1821":{"position":[[256,4]]},"1885":{"position":[[158,4],[244,4]]},"1913":{"position":[[824,4],[887,4]]},"1915":{"position":[[128,4]]},"1921":{"position":[[128,4]]},"1929":{"position":[[128,4]]},"1937":{"position":[[128,4]]},"1941":{"position":[[997,4]]},"1945":{"position":[[128,4]]},"1955":{"position":[[185,4],[278,4]]},"2057":{"position":[[332,4]]},"2096":{"position":[[130,4]]},"2214":{"position":[[64,4]]},"2331":{"position":[[135,4],[703,4]]},"2333":{"position":[[252,4]]},"2352":{"position":[[341,4],[466,4]]},"2354":{"position":[[239,4]]},"2361":{"position":[[306,4],[319,4],[423,4]]},"2365":{"position":[[130,4]]},"2367":{"position":[[136,4]]},"2373":{"position":[[144,4]]},"2406":{"position":[[187,4],[204,4],[483,4],[500,4]]},"2415":{"position":[[191,4]]},"2434":{"position":[[195,4],[521,4]]},"2442":{"position":[[303,4],[535,4],[1037,4],[1091,4],[1310,4],[1325,4],[1567,4],[1582,4],[1800,4]]},"2454":{"position":[[64,4]]},"2470":{"position":[[40,4]]},"2478":{"position":[[40,4]]},"2623":{"position":[[51,4]]},"2625":{"position":[[185,4]]},"2674":{"position":[[412,4]]},"2696":{"position":[[141,4]]},"2713":{"position":[[360,4],[740,4]]},"2751":{"position":[[254,4],[358,4]]},"2796":{"position":[[509,4]]},"2829":{"position":[[556,4]]},"2848":{"position":[[278,4],[313,4],[1743,4]]},"2875":{"position":[[840,4]]},"2899":{"position":[[199,4],[481,4]]},"2903":{"position":[[78,4]]},"2981":{"position":[[66,4],[143,4],[390,4],[505,4]]},"2991":{"position":[[326,4],[429,4]]},"3009":{"position":[[190,4],[276,4]]},"3023":{"position":[[191,4]]},"3025":{"position":[[62,4]]},"3039":{"position":[[59,4],[144,4],[211,4],[280,4],[288,4]]},"3041":{"position":[[47,4],[73,4],[155,4],[182,4],[246,4],[273,4],[339,4],[367,4],[374,4]]},"3049":{"position":[[135,4]]},"3063":{"position":[[167,4],[744,4],[951,4],[1007,4],[1557,4]]},"3071":{"position":[[122,4]]},"3215":{"position":[[375,4]]},"3226":{"position":[[197,4],[329,4]]},"3228":{"position":[[180,4]]},"3234":{"position":[[209,4]]},"3254":{"position":[[218,4],[496,4],[871,4]]},"3267":{"position":[[533,4],[552,4]]},"3273":{"position":[[475,4]]},"3275":{"position":[[138,4]]},"3277":{"position":[[147,4]]},"3287":{"position":[[445,4],[830,4],[922,4],[998,4],[1108,4]]},"3289":{"position":[[145,4]]},"3291":{"position":[[1347,4]]},"3371":{"position":[[447,4]]},"3373":{"position":[[603,4]]},"3389":{"position":[[954,4]]},"3432":{"position":[[147,4],[209,4],[455,4],[827,4]]},"3446":{"position":[[304,4]]},"3448":{"position":[[476,4],[582,4],[605,4],[1006,4],[1029,4]]},"3452":{"position":[[181,4],[415,4],[3007,4]]},"3454":{"position":[[299,4],[311,4]]},"3496":{"position":[[357,4],[370,4]]},"3508":{"position":[[158,4]]},"3541":{"position":[[624,4]]},"3569":{"position":[[119,4]]},"3587":{"position":[[224,4],[254,4],[410,4],[440,4]]},"3589":{"position":[[238,4],[435,4],[933,4]]},"3650":{"position":[[155,4]]},"3664":{"position":[[282,4]]},"3674":{"position":[[85,4]]},"3680":{"position":[[434,4]]},"3682":{"position":[[51,4]]},"3686":{"position":[[202,4]]},"3690":{"position":[[158,4]]},"3698":{"position":[[364,4]]},"3706":{"position":[[159,4],[736,4],[943,4],[999,4],[1568,4]]},"3708":{"position":[[1748,4]]},"3720":{"position":[[156,4]]},"3770":{"position":[[1143,4],[2595,4],[5886,4]]},"3774":{"position":[[187,4]]},"3777":{"position":[[234,4]]},"3779":{"position":[[793,4],[1130,4],[1348,4],[1862,4]]},"3781":{"position":[[453,4],[481,4]]},"3785":{"position":[[255,4],[1662,4]]},"3798":{"position":[[625,4]]},"3802":{"position":[[1174,4],[1776,4],[1966,4],[2639,4]]},"3808":{"position":[[42,4],[527,4],[618,4],[1757,4],[3224,4]]},"3810":{"position":[[960,4]]},"3812":{"position":[[561,4],[2831,4]]},"3817":{"position":[[765,4],[1385,4],[1806,4],[2368,4],[2562,4]]},"3821":{"position":[[283,4],[860,4]]},"3826":{"position":[[149,4],[516,4],[578,4]]},"3842":{"position":[[2508,4],[2638,4],[3133,4],[3255,4]]},"3896":{"position":[[208,4],[785,4]]},"3910":{"position":[[1267,4],[2056,4]]},"3916":{"position":[[1877,4],[6003,4],[9084,4],[9096,4]]},"3918":{"position":[[780,4]]},"3924":{"position":[[142,4],[2211,4],[3195,4]]},"3938":{"position":[[962,4]]},"3940":{"position":[[978,4]]},"3944":{"position":[[715,4],[741,4]]},"3952":{"position":[[409,4]]},"3956":{"position":[[1288,4]]}}}],["truncat",{"_index":3538,"t":{"767":{"position":[[712,8]]}}}],["truncateasync",{"_index":3539,"t":{"767":{"position":[[751,13]]}}}],["trustservercertif",{"_index":3732,"t":{"901":{"position":[[251,22]]},"1315":{"position":[[251,22]]}}}],["tryadd",{"_index":4277,"t":{"1416":{"position":[[145,6]]},"1420":{"position":[[734,6]]},"3001":{"position":[[295,6]]}}}],["tryaddcoreservic",{"_index":3490,"t":{"734":{"position":[[8176,18]]}}}],["tryaddjob",{"_index":8988,"t":{"3842":{"position":[[144,9],[685,9],[1294,9],[1868,9],[2471,9],[3104,9]]},"3844":{"position":[[1024,9]]}}}],["tryaddtrigg",{"_index":9031,"t":{"3886":{"position":[[114,13]]}}}],["trycreateenumer",{"_index":3460,"t":{"734":{"position":[[3277,19]]}}}],["trycreateexact",{"_index":3454,"t":{"734":{"position":[[1391,14],[2245,14],[3099,14],[4094,14],[4948,14],[5802,14]]}}}],["tryget",{"_index":5956,"t":{"2065":{"position":[[98,6]]}}}],["trygetcontenttyp",{"_index":5969,"t":{"2098":{"position":[[50,17]]},"3940":{"position":[[822,17]]}}}],["trygetjob",{"_index":8986,"t":{"3840":{"position":[[122,9]]},"3862":{"position":[[122,9]]}}}],["trygetmethodinfo",{"_index":8506,"t":{"3680":{"position":[[372,16]]}}}],["trygettrigg",{"_index":9029,"t":{"3884":{"position":[[114,13]]}}}],["trypars",{"_index":2752,"t":{"494":{"position":[[863,8]]}}}],["tryread",{"_index":6131,"t":{"2315":{"position":[[250,7]]}}}],["tryremov",{"_index":9036,"t":{"3892":{"position":[[114,9]]}}}],["tryremovejob",{"_index":8998,"t":{"3844":{"position":[[1127,12]]},"3846":{"position":[[161,12],[417,12]]}}}],["tryremovetrigg",{"_index":9033,"t":{"3888":{"position":[[140,16]]}}}],["tryupdatedetail",{"_index":9027,"t":{"3882":{"position":[[114,15]]}}}],["tryupdatejob",{"_index":8993,"t":{"3844":{"position":[[144,12],[1235,12],[1452,12]]}}}],["tryvalid",{"_index":3127,"t":{"602":{"position":[[244,11]]},"604":{"position":[[11,11]]},"606":{"position":[[540,11],[600,11],[662,11],[743,11],[810,11],[890,11],[946,11],[1047,11],[1156,11],[1264,11]]},"615":{"position":[[729,11],[796,11],[992,11]]}}}],["tryvalidateobject",{"_index":5915,"t":{"1998":{"position":[[27,17]]}}}],["tryvalidatevalu",{"_index":5916,"t":{"2000":{"position":[[27,16]]},"2002":{"position":[[27,16]]},"2004":{"position":[[27,16],[104,16]]}}}],["trywrit",{"_index":6128,"t":{"2313":{"position":[[826,8]]}}}],["ts",{"_index":2027,"t":{"308":{"position":[[325,2],[366,2]]},"310":{"position":[[177,2],[220,2],[299,2],[372,2],[673,2],[711,2]]},"314":{"position":[[43,2]]},"316":{"position":[[45,2]]},"323":{"position":[[110,2],[146,2],[168,2]]},"329":{"position":[[12,2],[31,2]]},"3194":{"position":[[205,2]]},"3936":{"position":[[715,2],[734,2]]},"3938":{"position":[[693,2],[712,2]]}}}],["tsconfig",{"_index":2030,"t":{"308":{"position":[[418,8],[438,8],[466,8]]}}}],["tservic",{"_index":1607,"t":{"218":{"position":[[176,8],[225,8]]},"1394":{"position":[[67,8]]},"1711":{"position":[[673,8],[715,8],[779,8],[791,8]]},"2037":{"position":[[29,8],[97,8],[167,8],[243,8]]}}}],["tslavedbcontextlocator1",{"_index":3811,"t":{"949":{"position":[[237,23]]}}}],["tslavedbcontextlocator7",{"_index":3812,"t":{"949":{"position":[[266,23]]}}}],["tslavedbcontextlocator8",{"_index":3860,"t":{"988":{"position":[[278,23]]}}}],["tsqldispatchproxi",{"_index":5981,"t":{"2113":{"position":[[29,17]]}}}],["tstarup",{"_index":1516,"t":{"202":{"position":[[525,7]]}}}],["tstrongtyp",{"_index":7539,"t":{"3154":{"position":[[21,11],[370,11]]}}}],["tt",{"_index":6526,"t":{"2559":{"position":[[912,2],[2521,2],[2530,2]]}}}],["tulingmemb",{"_index":1473,"t":{"199":{"position":[[218,12]]}}}],["tunitofwork",{"_index":7855,"t":{"3287":{"position":[[1267,11]]}}}],["tupl",{"_index":3965,"t":{"1117":{"position":[[15,5],[36,5]]},"1129":{"position":[[748,5]]},"2385":{"position":[[70,5]]},"3273":{"position":[[636,5]]},"3916":{"position":[[2237,5]]}}}],["tvalu",{"_index":5587,"t":{"1803":{"position":[[248,6],[302,6],[460,6],[564,6],[678,6],[980,6]]}}}],["tvp",{"_index":6992,"t":{"2768":{"position":[[1560,3]]}}}],["tw",{"_index":6492,"t":{"2559":{"position":[[614,2]]}}}],["twicesecondtrigg",{"_index":8867,"t":{"3806":{"position":[[126,18],[372,18],[534,18],[677,18],[820,18],[964,18],[1107,18],[1251,18]]}}}],["two",{"_index":7141,"t":{"2856":{"position":[[452,3]]}}}],["txt",{"_index":7047,"t":{"2788":{"position":[[31,3],[94,3]]}}}],["type",{"_index":325,"t":{"19":{"position":[[874,4]]},"112":{"position":[[1116,4]]},"114":{"position":[[1177,4]]},"350":{"position":[[711,4]]},"359":{"position":[[36,4],[89,4],[206,4]]},"367":{"position":[[36,4],[191,4],[228,4]]},"369":{"position":[[189,4],[347,4]]},"419":{"position":[[83,4]]},"516":{"position":[[765,4]]},"560":{"position":[[356,4],[406,4],[466,4]]},"572":{"position":[[571,4],[1016,4]]},"617":{"position":[[73,4],[129,4],[185,4],[226,4],[263,4],[298,4],[333,4],[372,4],[415,4],[465,4],[510,4],[578,4],[630,4],[671,4],[708,4],[749,4],[784,4],[819,4],[852,4],[902,4],[952,4],[993,4],[1038,4],[1075,4],[1108,4],[1141,4],[1178,4],[1221,4],[1254,4],[1291,4],[1328,4],[1363,4],[2063,4]]},"655":{"position":[[180,4],[402,4]]},"696":{"position":[[1931,4],[2895,4],[4477,4]]},"734":{"position":[[737,4],[1008,4],[1245,4],[1263,4],[1436,4],[1584,4],[1717,4],[1862,4],[2099,4],[2117,4],[2290,4],[2438,4],[2571,4],[2716,4],[2953,4],[2971,4],[3144,4],[3297,4],[3433,4],[3566,4],[3711,4],[3948,4],[3966,4],[4139,4],[4287,4],[4420,4],[4565,4],[4802,4],[4820,4],[4993,4],[5141,4],[5274,4],[5419,4],[5656,4],[5674,4],[5847,4],[5995,4],[6128,4],[6257,4],[6442,4],[6611,4],[6752,4],[7534,4]]},"747":{"position":[[838,4]]},"749":{"position":[[441,4],[808,4],[1111,4]]},"844":{"position":[[541,4]]},"846":{"position":[[686,4]]},"877":{"position":[[962,4],[1335,4]]},"889":{"position":[[533,4]]},"949":{"position":[[304,4],[826,4]]},"986":{"position":[[74,5]]},"1145":{"position":[[327,4]]},"1147":{"position":[[218,4]]},"1151":{"position":[[296,4]]},"1412":{"position":[[189,4]]},"1416":{"position":[[521,4]]},"1741":{"position":[[30,4]]},"1745":{"position":[[252,4],[326,4]]},"1779":{"position":[[443,4]]},"1781":{"position":[[295,4]]},"1851":{"position":[[566,4],[1083,4]]},"1867":{"position":[[235,4]]},"1907":{"position":[[375,4]]},"1925":{"position":[[978,4]]},"2029":{"position":[[4,5]]},"2929":{"position":[[353,4]]},"2935":{"position":[[668,4]]},"2937":{"position":[[765,4]]},"2945":{"position":[[353,4]]},"2959":{"position":[[353,4]]},"3194":{"position":[[110,5]]},"3446":{"position":[[1652,4]]},"3452":{"position":[[2035,4],[2095,4],[2159,4],[2225,4],[2291,4],[2357,4],[2423,4],[2524,4],[2587,4],[3093,4]]},"3500":{"position":[[113,4],[743,4]]},"3522":{"position":[[112,4],[907,4]]},"3563":{"position":[[109,4]]},"3650":{"position":[[205,4],[433,4]]},"3656":{"position":[[181,4]]},"3770":{"position":[[2183,4],[3999,4]]},"3779":{"position":[[282,4]]},"3785":{"position":[[1192,4]]},"3802":{"position":[[302,4]]},"3812":{"position":[[1775,4]]},"3832":{"position":[[2322,4],[2575,4],[4083,4],[4336,4]]},"3914":{"position":[[3194,4]]},"3916":{"position":[[5031,4],[5091,4],[5155,4],[5221,4],[5287,4],[5353,4],[5419,4],[5520,4],[5583,4],[6089,4]]},"3922":{"position":[[198,4]]},"3928":{"position":[[2214,4]]},"3936":{"position":[[412,4]]},"3938":{"position":[[640,4]]},"3940":{"position":[[28,4],[70,4],[113,4],[527,4],[792,4]]},"3960":{"position":[[622,4]]},"3978":{"position":[[1706,4]]},"3982":{"position":[[163,5]]}}}],["typeadapterconfig",{"_index":6808,"t":{"2690":{"position":[[115,17]]},"2696":{"position":[[20,17],[81,17]]}}}],["typecolumnindex",{"_index":2937,"t":{"560":{"position":[[319,15],[440,15]]}}}],["typefilt",{"_index":3228,"t":{"619":{"position":[[52,10]]},"625":{"position":[[47,10],[284,10]]},"1909":{"position":[[775,10],[791,10],[833,10],[1063,10],[1079,10]]},"1913":{"position":[[1466,10],[1480,10]]},"1919":{"position":[[919,10],[933,10]]},"1925":{"position":[[1644,10],[1658,10]]},"1933":{"position":[[1087,10],[1101,10]]},"1941":{"position":[[1332,10],[1346,10]]}}}],["typefilterattribut",{"_index":5802,"t":{"1903":{"position":[[232,19]]}}}],["typeid",{"_index":7621,"t":{"3215":{"position":[[909,6]]},"3265":{"position":[[180,6]]},"3267":{"position":[[696,6]]},"3269":{"position":[[592,6]]},"3271":{"position":[[277,6]]}}}],["typeinfo",{"_index":5080,"t":{"1587":{"position":[[124,8],[133,8]]}}}],["typemappingsourcedepend",{"_index":3438,"t":{"734":{"position":[[781,29],[7578,29]]}}}],["typenam",{"_index":5481,"t":{"1785":{"position":[[62,8]]}}}],["typeof",{"_index":2235,"t":{"340":{"position":[[1349,6],[1625,6],[1655,6]]},"350":{"position":[[754,6],[792,6]]},"353":{"position":[[94,6]]},"359":{"position":[[238,6],[260,6],[362,6],[406,6],[428,6]]},"560":{"position":[[166,6],[230,6],[296,6]]},"570":{"position":[[945,6]]},"587":{"position":[[1942,6]]},"599":{"position":[[482,6]]},"617":{"position":[[2093,6],[2126,6]]},"619":{"position":[[63,6]]},"625":{"position":[[58,6],[295,6]]},"832":{"position":[[551,6]]},"883":{"position":[[36,6],[84,6],[258,6],[276,6]]},"913":{"position":[[75,6],[106,6]]},"1037":{"position":[[683,6],[800,6]]},"1041":{"position":[[946,6]]},"1066":{"position":[[342,6],[358,6],[374,6]]},"1234":{"position":[[563,6],[683,6]]},"1236":{"position":[[572,6],[694,6]]},"1238":{"position":[[696,6],[847,6]]},"1240":{"position":[[759,6],[931,6]]},"1273":{"position":[[92,6]]},"1275":{"position":[[76,6]]},"1418":{"position":[[85,6]]},"1424":{"position":[[1865,6]]},"1426":{"position":[[328,6]]},"1440":{"position":[[783,6],[889,6]]},"1795":{"position":[[1506,6],[2703,6]]},"1819":{"position":[[676,6],[1014,6],[1110,6]]},"1845":{"position":[[504,6]]},"1861":{"position":[[198,6]]},"1863":{"position":[[132,6]]},"1867":{"position":[[265,6],[285,6]]},"1875":{"position":[[167,6]]},"1907":{"position":[[338,6]]},"1909":{"position":[[694,6],[1090,6]]},"1913":{"position":[[791,6],[854,6],[992,6],[1491,6],[1647,6]]},"1919":{"position":[[944,6],[1090,6]]},"1925":{"position":[[1669,6],[1811,6]]},"1933":{"position":[[1112,6],[1260,6]]},"1941":{"position":[[1357,6],[1499,6]]},"2000":{"position":[[51,6],[78,6]]},"2037":{"position":[[90,6],[236,6]]},"2117":{"position":[[101,6]]},"2121":{"position":[[107,6]]},"2193":{"position":[[22,6],[80,6]]},"2197":{"position":[[20,6],[72,6]]},"2199":{"position":[[218,6]]},"3166":{"position":[[150,6]]},"3389":{"position":[[682,6],[740,6]]},"3401":{"position":[[127,6]]},"3456":{"position":[[235,6],[512,6]]},"3506":{"position":[[258,6]]},"3547":{"position":[[176,6],[332,6]]},"3656":{"position":[[188,6]]},"3708":{"position":[[602,6],[974,6]]},"3714":{"position":[[53,6],[91,6],[125,6]]},"3716":{"position":[[127,6]]},"3744":{"position":[[365,6]]},"3779":{"position":[[327,6]]},"3781":{"position":[[321,6]]},"3802":{"position":[[355,6]]},"3808":{"position":[[1865,6]]},"3810":{"position":[[320,6]]},"3956":{"position":[[623,6]]}}}],["typeparam",{"_index":3497,"t":{"749":{"position":[[51,9],[78,9]]},"1041":{"position":[[93,9],[120,9],[136,9],[173,9],[476,9],[503,9],[519,9],[556,9],[1157,9],[1184,9],[1384,9],[1411,9]]},"1803":{"position":[[192,9],[216,9],[232,9],[258,9]]},"2345":{"position":[[463,9],[484,9]]},"2357":{"position":[[990,9],[1011,9]]},"3752":{"position":[[637,9],[658,9],[946,9],[967,9]]}}}],["typescript",{"_index":1137,"t":{"152":{"position":[[75,10]]},"304":{"position":[[3,10],[56,10],[107,10]]},"308":{"position":[[27,10]]},"310":{"position":[[27,10]]},"314":{"position":[[136,10]]},"316":{"position":[[138,10]]},"3194":{"position":[[29,10]]}}}],["tz",{"_index":4425,"t":{"1485":{"position":[[112,2]]}}}],["u",{"_index":2915,"t":{"556":{"position":[[52,1],[57,1]]},"570":{"position":[[918,1],[923,1],[963,1],[998,1],[1032,1]]},"665":{"position":[[64,1],[67,1],[75,1],[78,1],[202,1],[205,1],[213,1],[216,1],[329,1],[332,1],[340,1],[343,1],[443,1],[446,1],[454,1],[457,1],[599,1],[602,1],[610,1],[613,1],[759,1],[762,1],[770,1],[773,1],[908,1],[911,1],[919,1],[922,1],[1044,1],[1047,1],[1055,1],[1058,1]]},"667":{"position":[[67,1],[70,1],[78,1],[81,1],[211,1],[214,1],[222,1],[225,1],[344,1],[347,1],[355,1],[358,1],[464,1],[467,1],[475,1],[478,1],[626,1],[629,1],[637,1],[640,1],[792,1],[795,1],[803,1],[806,1],[947,1],[950,1],[958,1],[961,1],[1089,1],[1092,1],[1100,1],[1103,1]]},"669":{"position":[[64,1],[67,1],[75,1],[78,1],[202,1],[205,1],[213,1],[216,1],[329,1],[332,1],[340,1],[343,1],[443,1],[446,1],[454,1],[457,1],[599,1],[602,1],[610,1],[613,1],[759,1],[762,1],[770,1],[773,1],[908,1],[911,1],[919,1],[922,1],[1044,1],[1047,1],[1055,1],[1058,1]]},"671":{"position":[[67,1],[70,1],[78,1],[81,1],[211,1],[214,1],[222,1],[225,1],[344,1],[347,1],[355,1],[358,1],[464,1],[467,1],[475,1],[478,1],[626,1],[629,1],[637,1],[640,1],[792,1],[795,1],[803,1],[806,1],[947,1],[950,1],[958,1],[961,1],[1089,1],[1092,1],[1100,1],[1103,1]]},"795":{"position":[[232,1],[237,1],[549,1],[554,1]]},"824":{"position":[[24,1],[29,1]]},"834":{"position":[[98,1],[103,1]]},"836":{"position":[[84,1],[115,1]]},"844":{"position":[[595,1],[601,1]]},"853":{"position":[[39,1],[44,1],[94,1],[99,1],[118,1],[123,1],[171,1],[176,1],[223,1],[228,1],[276,1],[281,1],[371,1],[376,1],[456,1],[461,1],[543,1],[548,1],[577,1],[582,1],[672,1],[677,1]]},"855":{"position":[[39,1],[44,1]]},"857":{"position":[[39,1],[44,1]]},"868":{"position":[[35,1],[40,1],[83,1],[88,1]]},"871":{"position":[[53,1],[58,1],[117,1],[122,1],[136,1],[141,1]]},"873":{"position":[[63,1],[68,1],[137,1],[142,1],[166,1],[171,1]]},"875":{"position":[[53,1],[58,1],[83,1],[88,1],[104,1],[109,1]]},"877":{"position":[[2295,1],[2300,1],[2320,1],[2325,1]]},"889":{"position":[[706,1],[711,1]]},"933":{"position":[[666,1],[671,1],[703,1]]},"956":{"position":[[56,1],[61,1],[129,1],[134,1],[192,1],[197,1],[264,1],[269,1],[326,1],[331,1],[397,1],[402,1],[470,1],[475,1],[542,1],[547,1],[623,1],[628,1],[694,1],[699,1],[775,1],[780,1],[868,1],[873,1],[952,1],[957,1],[1026,1],[1031,1],[1109,1],[1114,1],[1182,1],[1187,1],[1264,1],[1269,1],[1348,1],[1353,1],[1431,1],[1436,1],[1523,1],[1528,1],[1605,1],[1610,1],[1697,1],[1702,1]]},"960":{"position":[[38,1],[43,1],[93,1],[98,1],[111,1],[221,1],[226,1],[243,1],[248,1],[312,1],[317,1],[330,1],[369,1],[374,1],[387,1],[472,1],[477,1],[490,1],[583,1],[588,1],[616,1],[621,1],[652,1],[657,1],[787,1],[792,1],[812,1],[817,1],[834,1],[839,1],[900,1],[905,1],[922,1],[927,1],[969,1],[974,1],[1005,1],[1010,1],[1030,1],[1035,1],[1052,1],[1057,1],[1129,1],[1134,1],[1185,1],[1190,1],[1241,1],[1246,1],[1263,1],[1268,1],[1310,1],[1315,1],[1346,1],[1351,1],[1371,1],[1376,1],[1393,1],[1398,1],[1438,1],[1443,1],[1494,1],[1499,1],[1559,1],[1564,1],[1592,1],[1597,1],[1678,1],[1683,1],[1740,1],[1745,1],[1762,1],[1767,1]]},"962":{"position":[[56,1],[61,1],[125,1],[130,1],[223,1],[228,1],[303,1],[308,1]]},"965":{"position":[[95,1],[100,1],[215,1],[220,1],[271,1],[276,1],[411,1],[416,1],[553,1],[558,1],[615,1],[620,1]]},"967":{"position":[[93,1],[98,1],[155,1],[160,1],[273,1],[278,1],[413,1],[418,1],[486,1],[491,1],[621,1],[626,1]]},"969":{"position":[[90,1],[95,1],[209,1],[214,1],[258,1],[263,1],[278,1],[283,1],[403,1],[408,1],[544,1],[549,1],[599,1],[604,1],[624,1],[629,1]]},"971":{"position":[[90,1],[95,1],[209,1],[214,1],[258,1],[263,1],[278,1],[283,1],[403,1],[408,1],[544,1],[549,1],[599,1],[604,1],[624,1],[629,1]]},"973":{"position":[[59,1],[64,1],[119,1],[124,1],[182,1],[187,1],[266,1],[271,1],[337,1],[342,1],[411,1],[416,1]]},"975":{"position":[[63,1],[68,1],[127,1],[132,1],[194,1],[199,1],[282,1],[287,1],[357,1],[362,1],[435,1],[440,1]]},"977":{"position":[[118,1],[123,1],[150,1]]},"979":{"position":[[24,1],[29,1],[88,1],[93,1],[150,1],[155,1]]},"1297":{"position":[[60,1],[92,1]]},"1366":{"position":[[61,1],[66,1]]},"1485":{"position":[[100,1]]},"1779":{"position":[[489,1],[494,1],[524,1],[529,1]]},"1781":{"position":[[341,1],[346,1],[376,1],[381,1]]},"1913":{"position":[[730,1],[735,1]]},"2165":{"position":[[42,1],[47,1],[103,1],[111,1]]},"2167":{"position":[[468,1],[473,1]]},"2538":{"position":[[360,1],[365,1],[441,1],[446,1]]},"2937":{"position":[[1103,1],[1108,1],[1140,1],[1175,1]]},"3430":{"position":[[720,1],[745,1],[982,1],[1007,1],[1388,1],[1413,1]]},"3587":{"position":[[175,1],[361,1]]},"3589":{"position":[[149,1],[346,1],[766,1]]},"3591":{"position":[[136,1]]},"3974":{"position":[[839,1],[844,1]]}}}],["u1000",{"_index":5741,"t":{"1865":{"position":[[401,5]]}}}],["u1001",{"_index":5742,"t":{"1865":{"position":[[440,5]]}}}],["ua",{"_index":6691,"t":{"2559":{"position":[[2624,2]]}}}],["ubuntu",{"_index":9772,"t":{"3962":{"position":[[1954,6]]}}}],["ui",{"_index":6760,"t":{"2619":{"position":[[45,2]]},"2627":{"position":[[80,2]]},"3666":{"position":[[456,2]]},"3918":{"position":[[2781,2]]},"3924":{"position":[[509,2],[1612,2],[1620,2],[1971,2],[3547,2]]}}}],["uid",{"_index":8246,"t":{"3466":{"position":[[1405,3]]}}}],["uint",{"_index":8841,"t":{"3800":{"position":[[43,4]]}}}],["uk",{"_index":6689,"t":{"2559":{"position":[[2614,2],[2621,2]]}}}],["unabl",{"_index":3357,"t":{"696":{"position":[[741,6]]},"734":{"position":[[707,6],[7504,6]]}}}],["unam",{"_index":8247,"t":{"3466":{"position":[[1423,5]]}}}],["unauthor",{"_index":8590,"t":{"3708":{"position":[[2863,12]]},"3956":{"position":[[2207,12]]}}}],["unauthorizedresult",{"_index":5843,"t":{"1913":{"position":[[1160,18]]}}}],["unboundedchannel",{"_index":6113,"t":{"2311":{"position":[[220,16],[264,16]]}}}],["under",{"_index":8544,"t":{"3702":{"position":[[2272,5]]}}}],["underscorecas",{"_index":8734,"t":{"3770":{"position":[[1698,14],[3357,14]]},"3779":{"position":[[1299,14],[1916,14]]},"3785":{"position":[[665,14],[783,14]]},"3802":{"position":[[1917,14],[2693,14]]},"3812":{"position":[[939,14],[1055,14]]},"3817":{"position":[[2513,14]]}}}],["undo",{"_index":3413,"t":{"713":{"position":[[661,4]]}}}],["unhandl",{"_index":8857,"t":{"3800":{"position":[[363,9]]}}}],["unifycontext",{"_index":8578,"t":{"3708":{"position":[[1400,12],[1762,12],[2227,12],[2625,12],[3664,12]]},"3712":{"position":[[38,12]]},"3956":{"position":[[1973,12],[2992,12]]},"3988":{"position":[[188,12]]},"3994":{"position":[[618,12]]}}}],["unifymodel",{"_index":8575,"t":{"3708":{"position":[[591,10],[963,10]]},"3716":{"position":[[116,10]]},"3956":{"position":[[612,10]]},"3978":{"position":[[1693,10]]}}}],["unifyprovid",{"_index":8604,"t":{"3716":{"position":[[1000,13],[1065,13]]}}}],["unifyresult",{"_index":8204,"t":{"3452":{"position":[[2602,11]]},"3708":{"position":[[708,11],[901,11]]},"3714":{"position":[[41,11],[113,11]]},"3916":{"position":[[5598,11]]},"3956":{"position":[[345,11],[533,11]]}}}],["unifyresultcontext",{"_index":10330,"t":{"3994":{"position":[[594,18]]}}}],["unifyresultset",{"_index":7300,"t":{"3047":{"position":[[0,19]]},"3049":{"position":[[3,19]]},"3682":{"position":[[3,19]]},"3708":{"position":[[2433,19],[2591,19],[2682,19]]},"3716":{"position":[[637,19]]},"3956":{"position":[[69,19],[1781,19],[1939,19],[2030,19]]}}}],["unifyresultsettingsopt",{"_index":8586,"t":{"3708":{"position":[[2564,26]]},"3716":{"position":[[610,26]]},"3956":{"position":[[1912,26]]}}}],["unifyresultstatuscodesopt",{"_index":9939,"t":{"3976":{"position":[[293,29]]}}}],["unifyserializerset",{"_index":8610,"t":{"3722":{"position":[[218,22]]}}}],["uninstal",{"_index":4991,"t":{"1547":{"position":[[393,9]]},"1549":{"position":[[473,9]]}}}],["union",{"_index":3674,"t":{"868":{"position":[[52,5]]},"889":{"position":[[622,5]]}}}],["unit",{"_index":7939,"t":{"3350":{"position":[[14,4]]}}}],["unitofwork",{"_index":7840,"t":{"3284":{"position":[[60,10]]},"3287":{"position":[[34,10],[115,10],[410,10],[670,10],[1838,10],[1990,10],[2146,10],[2305,10],[2462,10],[2623,10]]},"3289":{"position":[[46,10],[134,10]]},"3294":{"position":[[1,10],[39,10]]},"3922":{"position":[[339,10],[1032,10],[1117,10],[1204,10],[1774,10]]},"3930":{"position":[[828,10]]},"3962":{"position":[[2028,10]]},"3964":{"position":[[892,10]]},"3968":{"position":[[717,10]]},"3996":{"position":[[775,10]]},"4004":{"position":[[427,10]]}}}],["unitofworkattribut",{"_index":7860,"t":{"3287":{"position":[[1970,19],[2285,19],[2603,19]]},"3922":{"position":[[1012,19],[1097,19],[1184,19]]}}}],["unittest1",{"_index":7988,"t":{"3360":{"position":[[51,9]]},"3381":{"position":[[79,9],[142,9]]},"3383":{"position":[[126,9],[188,9]]},"3387":{"position":[[119,9]]},"3389":{"position":[[1055,9],[1163,9]]},"3391":{"position":[[371,9],[558,9]]},"3393":{"position":[[652,9],[896,9]]},"3397":{"position":[[376,9],[541,9]]},"3399":{"position":[[278,9]]},"3924":{"position":[[3297,9],[3360,9]]}}}],["unix",{"_index":6096,"t":{"2305":{"position":[[4,4]]}}}],["unknown",{"_index":8855,"t":{"3800":{"position":[[327,7]]},"3986":{"position":[[1330,7]]}}}],["unmanagedobject",{"_index":5950,"t":{"2059":{"position":[[15,16]]}}}],["unobservedtaskexceptionhandl",{"_index":5661,"t":{"1813":{"position":[[63,30]]},"1821":{"position":[[86,30]]},"3826":{"position":[[187,30]]}}}],["unoccupi",{"_index":8853,"t":{"3800":{"position":[[278,10]]}}}],["unsaferelaxedjsonescap",{"_index":6247,"t":{"2371":{"position":[[142,25]]},"3506":{"position":[[584,25]]}}}],["unsubscrib",{"_index":5668,"t":{"1815":{"position":[[663,11]]},"1817":{"position":[[305,11]]},"2162":{"position":[[14,11]]},"3920":{"position":[[1119,11]]}}}],["unzip",{"_index":4410,"t":{"1483":{"position":[[604,5]]}}}],["uow",{"_index":5775,"t":{"1894":{"position":[[41,3]]}}}],["updat",{"_index":2908,"t":{"552":{"position":[[237,6],[387,6]]},"715":{"position":[[0,6],[49,6],[92,6]]},"717":{"position":[[41,6]]},"726":{"position":[[76,6]]},"730":{"position":[[55,6]]},"769":{"position":[[317,7],[418,7],[609,7]]},"771":{"position":[[89,6]]},"773":{"position":[[197,7]]},"939":{"position":[[139,6]]},"1062":{"position":[[56,6],[152,6]]},"1139":{"position":[[46,6]]},"1170":{"position":[[337,6],[861,6]]},"1244":{"position":[[280,6],[330,6]]},"1248":{"position":[[161,6],[230,6],[265,6]]},"1325":{"position":[[36,6],[62,6],[164,6]]},"1349":{"position":[[36,6],[75,6],[133,6]]},"1353":{"position":[[104,6]]},"1483":{"position":[[154,6],[557,6]]},"1547":{"position":[[324,6]]},"1549":{"position":[[413,6]]},"1594":{"position":[[92,6]]},"1596":{"position":[[132,6]]},"1631":{"position":[[211,6]]},"1661":{"position":[[1110,6]]},"1759":{"position":[[49,6]]},"1795":{"position":[[526,6]]},"2931":{"position":[[61,6]]},"2947":{"position":[[61,6]]},"2961":{"position":[[61,6]]},"3023":{"position":[[1107,6]]},"3224":{"position":[[1456,6],[1510,6]]},"3234":{"position":[[385,7]]},"3236":{"position":[[99,6],[362,6]]},"3258":{"position":[[421,6],[443,6]]},"3269":{"position":[[54,10],[127,10],[257,10],[376,10]]},"3620":{"position":[[177,6]]},"3770":{"position":[[2625,7],[3330,7],[3920,6],[4433,7]]},"3785":{"position":[[755,7],[1129,6],[1345,7]]},"3812":{"position":[[1027,7],[1697,6],[2206,7]]},"3819":{"position":[[1657,7]]},"3844":{"position":[[393,7],[650,6],[855,7]]},"3858":{"position":[[97,7]]},"3894":{"position":[[97,7]]},"3996":{"position":[[615,6]]},"4000":{"position":[[480,6]]}}}],["updateasync",{"_index":4087,"t":{"1248":{"position":[[340,11]]},"1325":{"position":[[220,11],[257,11]]},"1349":{"position":[[205,11],[255,11],[324,11]]}}}],["updatecolumn",{"_index":3546,"t":{"769":{"position":[[446,13],[621,13]]},"3224":{"position":[[1600,13]]},"3269":{"position":[[279,13]]}}}],["updated_tim",{"_index":8754,"t":{"3770":{"position":[[2625,12],[4433,12]]},"3785":{"position":[[1345,12]]},"3812":{"position":[[2206,12]]}}}],["updatedata",{"_index":3992,"t":{"1123":{"position":[[63,10],[118,10],[195,10],[275,10],[317,10]]}}}],["updatedetail",{"_index":9028,"t":{"3882":{"position":[[184,12]]}}}],["updatedtim",{"_index":3372,"t":{"696":{"position":[[1685,11],[3672,11]]},"824":{"position":[[167,11]]},"1763":{"position":[[171,11]]},"1771":{"position":[[119,11]]},"3770":{"position":[[630,11],[1170,11],[2012,11],[3619,11],[5305,11],[5913,11]]},"3777":{"position":[[398,11]]},"3779":{"position":[[856,11],[1186,11],[1548,11]]},"3785":{"position":[[311,11],[952,11],[1714,11]]},"3798":{"position":[[669,11]]},"3802":{"position":[[1205,11],[1804,11],[2305,11]]},"3812":{"position":[[589,11],[1380,11],[2858,11]]},"3817":{"position":[[828,11],[1416,11],[1862,11],[2396,11]]},"3821":{"position":[[339,11],[888,11]]},"3896":{"position":[[264,11],[813,11]]}}}],["updateexclud",{"_index":4117,"t":{"1333":{"position":[[36,13],[98,13],[182,13],[274,13],[324,13],[396,13]]},"3994":{"position":[[346,13]]},"3998":{"position":[[268,13]]}}}],["updateexcludeasync",{"_index":4118,"t":{"1333":{"position":[[512,18],[585,18],[680,18],[783,18],[844,18],[927,18]]}}}],["updateexcludeexist",{"_index":4129,"t":{"1345":{"position":[[36,19],[104,19],[194,19]]}}}],["updateexcludeexistsasync",{"_index":4130,"t":{"1345":{"position":[[322,24],[401,24],[502,24]]}}}],["updateexcludeexistsnow",{"_index":4131,"t":{"1347":{"position":[[36,22],[107,22],[200,22]]}}}],["updateexcludeexistsnowasync",{"_index":4132,"t":{"1347":{"position":[[331,27],[413,27],[517,27]]}}}],["updateexcludenow",{"_index":4119,"t":{"1335":{"position":[[36,16],[101,16],[188,16],[283,16],[336,16],[411,16]]}}}],["updateexcludenowasync",{"_index":4120,"t":{"1335":{"position":[[530,21],[606,21],[704,21],[810,21],[874,21],[960,21]]}}}],["updateexist",{"_index":4121,"t":{"1337":{"position":[[36,12]]}}}],["updateexistsasync",{"_index":4122,"t":{"1337":{"position":[[98,17]]}}}],["updateexistsnow",{"_index":4123,"t":{"1339":{"position":[[36,15]]}}}],["updateexistsnowasync",{"_index":4124,"t":{"1339":{"position":[[101,20]]}}}],["updateinclud",{"_index":3582,"t":{"795":{"position":[[212,13]]},"1329":{"position":[[36,13],[98,13],[182,13],[274,13],[324,13],[396,13]]},"1331":{"position":[[411,13]]},"3994":{"position":[[330,13]]},"3998":{"position":[[252,13]]}}}],["updateincludeasync",{"_index":3585,"t":{"795":{"position":[[524,18]]},"1329":{"position":[[512,18],[585,18],[680,18],[783,18],[844,18],[927,18]]}}}],["updateincludeexist",{"_index":4125,"t":{"1341":{"position":[[36,19],[104,19],[194,19]]}}}],["updateincludeexistsasync",{"_index":4126,"t":{"1341":{"position":[[322,24],[401,24],[502,24]]}}}],["updateincludeexistsnow",{"_index":4127,"t":{"1343":{"position":[[36,22],[107,22],[200,22]]}}}],["updateincludeexistsnowasync",{"_index":4128,"t":{"1343":{"position":[[331,27],[413,27],[517,27]]}}}],["updateincludenow",{"_index":4115,"t":{"1331":{"position":[[36,16],[101,16],[188,16],[283,16],[336,16]]}}}],["updateincludenowasync",{"_index":4116,"t":{"1331":{"position":[[527,21],[603,21],[701,21],[807,21],[871,21],[957,21]]},"3966":{"position":[[1094,21]]}}}],["updatejob",{"_index":8994,"t":{"3844":{"position":[[225,9]]}}}],["updatejobbuild",{"_index":8930,"t":{"3819":{"position":[[150,16]]}}}],["updatenow",{"_index":4113,"t":{"1327":{"position":[[36,9],[65,9]]},"1351":{"position":[[36,9],[78,9],[139,9]]}}}],["updatenowasync",{"_index":4114,"t":{"1327":{"position":[[120,14],[160,14]]},"1351":{"position":[[214,14],[267,14],[339,14]]}}}],["updateobj",{"_index":7800,"t":{"3269":{"position":[[65,9],[138,9],[268,9]]}}}],["updaterang",{"_index":7674,"t":{"3224":{"position":[[1480,11]]}}}],["updatesql",{"_index":8826,"t":{"3785":{"position":[[689,9]]},"3812":{"position":[[963,9]]}}}],["updatetriggerbuild",{"_index":8933,"t":{"3819":{"position":[[659,20],[756,20],[794,20],[850,21]]}}}],["upload",{"_index":277,"t":{"19":{"position":[[109,7],[186,7]]},"1551":{"position":[[142,6]]},"1741":{"position":[[178,7],[255,7],[987,7],[1064,7],[1840,7],[1917,7]]},"3522":{"position":[[232,6],[376,6],[569,6],[748,6],[1312,6],[1476,6]]},"3524":{"position":[[84,6]]},"3526":{"position":[[49,6]]},"3563":{"position":[[218,6],[422,6],[808,6],[940,6],[1122,6],[1267,6]]},"3565":{"position":[[85,6]]},"3916":{"position":[[7218,6],[7823,6],[8674,6]]},"3918":{"position":[[1610,6],[1752,6],[1897,6],[2090,6],[2254,6]]}}}],["uploadfileasync",{"_index":271,"t":{"19":{"position":[[54,15]]},"1741":{"position":[[128,15],[900,15],[1785,15]]},"1743":{"position":[[83,15],[392,15]]}}}],["uploadurl",{"_index":330,"t":{"19":{"position":[[926,9]]}}}],["uptim",{"_index":6877,"t":{"2749":{"position":[[377,6]]},"2751":{"position":[[307,6]]},"3080":{"position":[[945,6]]}}}],["ur",{"_index":6692,"t":{"2559":{"position":[[2636,2],[2644,2]]}}}],["urdu",{"_index":6693,"t":{"2559":{"position":[[2639,4],[2650,4]]}}}],["uri",{"_index":7338,"t":{"3063":{"position":[[1660,3]]},"3498":{"position":[[122,3]]},"3532":{"position":[[17,3]]},"3543":{"position":[[122,3]]},"3571":{"position":[[17,3]]},"3575":{"position":[[182,3]]},"3581":{"position":[[176,3]]},"3583":{"position":[[281,3]]},"3706":{"position":[[1671,3]]},"3978":{"position":[[1225,3]]}}}],["url",{"_index":727,"t":{"112":{"position":[[877,3],[945,3]]},"404":{"position":[[11,3],[38,3]]},"406":{"position":[[5,3],[15,3]]},"419":{"position":[[33,3],[360,3]]},"587":{"position":[[943,3],[956,3]]},"606":{"position":[[228,3]]},"617":{"position":[[636,3],[659,3]]},"1629":{"position":[[65,3]]},"1745":{"position":[[67,3]]},"1925":{"position":[[726,3],[794,3]]},"2326":{"position":[[239,3]]},"2544":{"position":[[26,3]]},"2564":{"position":[[160,3]]},"2745":{"position":[[140,4]]},"2747":{"position":[[143,4]]},"2751":{"position":[[421,4]]},"2875":{"position":[[143,4],[201,4],[402,4],[1077,4]]},"3063":{"position":[[673,3],[1215,3],[1253,3]]},"3065":{"position":[[211,3],[311,3]]},"3080":{"position":[[359,4]]},"3291":{"position":[[137,3],[239,3],[364,3],[785,3],[883,3],[1134,3],[1923,3],[2034,3]]},"3397":{"position":[[722,3],[816,3]]},"3452":{"position":[[1476,4]]},"3532":{"position":[[10,3],[63,3]]},"3571":{"position":[[10,3],[63,3]]},"3583":{"position":[[37,3]]},"3642":{"position":[[285,3],[385,3]]},"3672":{"position":[[328,3]]},"3686":{"position":[[454,3],[525,3]]},"3706":{"position":[[665,3],[1207,3],[1264,3],[1959,3],[2059,3]]},"3914":{"position":[[3102,3]]},"3916":{"position":[[4472,4]]},"3930":{"position":[[134,3],[1128,3]]},"3932":{"position":[[1390,4]]},"3934":{"position":[[772,4]]},"3940":{"position":[[710,3]]},"3982":{"position":[[726,3]]}}}],["urlencod",{"_index":8283,"t":{"3500":{"position":[[397,10],[557,10],[775,10],[801,9]]},"3545":{"position":[[248,10],[380,10]]},"3672":{"position":[[42,10],[126,10]]},"3974":{"position":[[423,10]]},"3978":{"position":[[1211,9],[1264,9]]},"3980":{"position":[[248,10]]},"3984":{"position":[[457,10]]}}}],["urlparameter",{"_index":5156,"t":{"1627":{"position":[[299,19]]},"1661":{"position":[[495,19]]},"3023":{"position":[[492,19]]}}}],["us",{"_index":22,"t":{"3":{"position":[[85,5],[99,5],[133,5],[172,5],[220,5]]},"5":{"position":[[81,5],[130,5]]},"7":{"position":[[77,5],[126,5]]},"9":{"position":[[35,5]]},"11":{"position":[[15,5],[73,5],[94,5],[132,5],[168,5],[204,5],[245,5],[287,5],[319,5],[358,5],[380,5],[429,5],[469,5],[508,5],[545,5],[589,5],[756,5],[847,5],[876,5],[915,5]]},"13":{"position":[[16,5],[119,5],[148,5],[197,5],[229,5],[263,5],[301,5],[340,5],[385,5]]},"19":{"position":[[514,5]]},"112":{"position":[[148,5],[181,5],[221,5],[235,5],[265,5]]},"127":{"position":[[375,5],[403,5],[445,5],[478,5]]},"133":{"position":[[83,5],[111,5],[130,5],[172,5],[205,5]]},"135":{"position":[[73,5],[101,5],[120,5],[162,5],[195,5]]},"146":{"position":[[0,5],[28,5],[47,5],[76,5],[118,5],[151,5],[199,5]]},"188":{"position":[[53,5],[67,5],[103,5],[137,5]]},"202":{"position":[[95,5],[131,5]]},"204":{"position":[[125,5],[161,5],[197,5]]},"210":{"position":[[233,5]]},"212":{"position":[[119,5],[408,5]]},"216":{"position":[[135,5],[171,5],[207,5],[527,5],[563,5],[599,5],[647,5]]},"231":{"position":[[10,5],[45,5],[88,5]]},"237":{"position":[[239,5],[1314,5],[1339,5]]},"327":{"position":[[136,5]]},"338":{"position":[[33,5],[69,5],[105,5],[153,5]]},"411":{"position":[[36,5],[72,5],[108,5],[156,5]]},"435":{"position":[[110,5],[436,5],[468,5]]},"492":{"position":[[0,5]]},"508":{"position":[[0,5],[31,5]]},"510":{"position":[[0,5],[31,5]]},"514":{"position":[[39,5],[73,5]]},"516":{"position":[[0,5],[31,5]]},"518":{"position":[[0,5],[31,5]]},"524":{"position":[[121,5],[152,5]]},"530":{"position":[[473,5]]},"534":{"position":[[187,5],[218,5]]},"558":{"position":[[151,5]]},"560":{"position":[[33,5]]},"570":{"position":[[50,5],[81,5],[114,5],[151,5],[203,5],[217,5],[236,5]]},"572":{"position":[[72,5],[121,5],[147,5],[171,5]]},"587":{"position":[[93,5],[1649,5]]},"595":{"position":[[37,5]]},"597":{"position":[[25,5],[317,5]]},"599":{"position":[[0,5],[34,5]]},"602":{"position":[[0,5],[29,5]]},"608":{"position":[[70,5]]},"615":{"position":[[159,5],[188,5]]},"617":{"position":[[1473,5],[1902,5],[1931,5],[2213,5]]},"625":{"position":[[100,5],[129,5],[164,5]]},"627":{"position":[[44,5]]},"653":{"position":[[216,5],[247,5]]},"696":{"position":[[1235,5],[1266,5],[1321,5],[1335,5],[2416,5],[2447,5],[2502,5],[2516,5],[3338,5],[3369,5],[3424,5],[3438,5],[4020,5],[4051,5],[4106,5],[4120,5]]},"708":{"position":[[0,5],[31,5],[45,5],[79,5]]},"713":{"position":[[478,5],[679,3]]},"734":{"position":[[479,5],[7783,5],[7827,5]]},"745":{"position":[[0,5],[31,5]]},"747":{"position":[[0,5],[31,5],[68,5],[111,5],[125,5]]},"822":{"position":[[39,5],[70,5]]},"832":{"position":[[20,5],[51,5],[88,5]]},"844":{"position":[[72,5],[103,5],[140,5],[195,5]]},"846":{"position":[[162,5],[193,5],[230,5],[285,5],[299,5]]},"851":{"position":[[34,5],[65,5],[79,5],[113,5],[780,5],[1169,5],[1200,5],[1644,5],[1675,5],[1689,5]]},"877":{"position":[[13,5],[44,5],[81,5],[136,5],[150,5],[1921,5]]},"889":{"position":[[0,5],[31,5],[68,5],[123,5],[137,5]]},"927":{"position":[[0,5],[49,5],[75,5],[99,5]]},"929":{"position":[[0,5],[49,5],[75,5],[99,5]]},"931":{"position":[[0,5],[49,5],[73,5]]},"945":{"position":[[138,5]]},"947":{"position":[[113,5],[144,5],[607,5],[638,5]]},"1039":{"position":[[473,5]]},"1054":{"position":[[0,5],[31,5]]},"1056":{"position":[[0,5],[19,5],[50,5],[471,5]]},"1058":{"position":[[0,5],[19,5]]},"1060":{"position":[[33,5],[64,5],[109,5]]},"1064":{"position":[[0,5],[19,5],[50,5],[85,5]]},"1066":{"position":[[174,5],[205,5],[602,5],[621,5],[652,5],[687,5]]},"1109":{"position":[[48,5],[79,5],[321,5],[340,5],[371,5],[571,5],[602,5]]},"1127":{"position":[[0,5],[31,5]]},"1145":{"position":[[0,5],[31,5],[45,5]]},"1147":{"position":[[0,5],[31,5]]},"1151":{"position":[[31,5],[62,5]]},"1185":{"position":[[277,5],[308,5]]},"1223":{"position":[[117,5]]},"1234":{"position":[[0,5]]},"1236":{"position":[[0,5]]},"1238":{"position":[[0,5]]},"1240":{"position":[[0,5]]},"1242":{"position":[[0,5]]},"1244":{"position":[[0,5]]},"1251":{"position":[[0,5]]},"1253":{"position":[[0,5]]},"1255":{"position":[[0,5]]},"1257":{"position":[[0,5]]},"1259":{"position":[[0,5]]},"1261":{"position":[[0,5]]},"1263":{"position":[[0,5]]},"1267":{"position":[[0,5]]},"1311":{"position":[[0,5],[31,5]]},"1313":{"position":[[703,5],[734,5]]},"1317":{"position":[[39,5],[73,5]]},"1353":{"position":[[183,5],[214,5]]},"1364":{"position":[[0,5]]},"1368":{"position":[[38,5],[57,5],[88,5],[123,5],[157,5]]},"1408":{"position":[[50,5],[69,5],[100,5],[543,5],[569,5]]},"1410":{"position":[[56,5],[75,5],[106,5],[558,5],[584,5]]},"1412":{"position":[[353,5],[850,5],[1791,5],[1817,5],[1851,5],[1883,5],[2564,5]]},"1414":{"position":[[70,5],[89,5],[120,5],[478,5],[504,5],[523,5]]},"1424":{"position":[[484,5],[518,5],[532,5]]},"1426":{"position":[[70,5],[84,5]]},"1432":{"position":[[208,5]]},"1434":{"position":[[0,5]]},"1436":{"position":[[0,5]]},"1539":{"position":[[266,5],[298,5],[312,5]]},"1547":{"position":[[516,3]]},"1549":{"position":[[586,3]]},"1566":{"position":[[891,3],[929,5]]},"1572":{"position":[[145,5],[312,5]]},"1582":{"position":[[111,5]]},"1584":{"position":[[125,5],[335,5]]},"1603":{"position":[[0,5]]},"1605":{"position":[[0,5]]},"1607":{"position":[[0,5]]},"1609":{"position":[[63,5],[377,5],[412,5]]},"1611":{"position":[[187,5],[222,5]]},"1613":{"position":[[0,5],[35,5]]},"1615":{"position":[[0,5],[35,5]]},"1617":{"position":[[52,5],[87,5],[305,5],[340,5],[547,5],[582,5],[824,5],[859,5]]},"1619":{"position":[[41,5],[76,5]]},"1621":{"position":[[13,5],[415,5]]},"1643":{"position":[[40,5]]},"1645":{"position":[[32,5]]},"1647":{"position":[[73,5]]},"1649":{"position":[[33,5]]},"1651":{"position":[[43,5]]},"1653":{"position":[[34,5]]},"1655":{"position":[[49,5]]},"1657":{"position":[[166,5]]},"1659":{"position":[[60,5],[419,5],[854,5]]},"1663":{"position":[[270,5]]},"1689":{"position":[[49,5]]},"1729":{"position":[[15,5]]},"1741":{"position":[[686,5],[1446,5],[2282,5]]},"1743":{"position":[[147,5]]},"1767":{"position":[[0,5]]},"1769":{"position":[[0,5]]},"1771":{"position":[[0,5]]},"1773":{"position":[[0,5]]},"1775":{"position":[[147,5],[161,5],[206,5]]},"1779":{"position":[[0,5],[31,5],[68,5],[123,5]]},"1781":{"position":[[0,5],[31,5],[68,5],[123,5]]},"1801":{"position":[[189,5],[212,5],[235,5],[265,5],[279,5],[298,5],[322,5],[346,5],[379,5]]},"1803":{"position":[[97,5],[1243,5],[2365,5],[2388,5],[2411,5],[2434,5]]},"1811":{"position":[[508,5]]},"1843":{"position":[[37,5]]},"1845":{"position":[[8,5],[43,5],[267,5],[302,5],[334,5]]},"1851":{"position":[[0,5]]},"1855":{"position":[[107,5]]},"1859":{"position":[[0,5],[35,5]]},"1865":{"position":[[0,5]]},"1867":{"position":[[83,5],[115,5],[380,5]]},"1869":{"position":[[343,5],[378,5]]},"1873":{"position":[[104,5],[139,5]]},"1875":{"position":[[0,5],[35,5]]},"1883":{"position":[[64,5],[98,5],[130,5],[170,5]]},"1887":{"position":[[115,5]]},"1913":{"position":[[0,5],[42,5],[74,5],[120,5],[164,5]]},"1919":{"position":[[0,5],[40,5]]},"1925":{"position":[[0,5],[44,5],[84,5],[110,5]]},"1927":{"position":[[0,5]]},"1933":{"position":[[0,5],[44,5],[84,5]]},"1935":{"position":[[0,5]]},"1941":{"position":[[0,5],[32,5],[76,5]]},"1943":{"position":[[0,5]]},"1951":{"position":[[0,5]]},"1953":{"position":[[0,5]]},"1977":{"position":[[0,5],[36,5]]},"1979":{"position":[[0,5],[36,5],[72,5],[114,5],[162,5]]},"2171":{"position":[[59,5]]},"2269":{"position":[[80,5],[116,5]]},"2290":{"position":[[77,5],[126,5]]},"2292":{"position":[[35,5]]},"2294":{"position":[[15,5],[73,5],[94,5],[132,5],[168,5],[204,5],[245,5],[287,5],[319,5],[358,5],[387,5],[409,5],[458,5],[498,5],[537,5],[574,5],[618,5],[804,5],[895,5],[924,5],[963,5]]},"2296":{"position":[[16,5],[119,5],[148,5],[197,5],[229,5],[263,5],[301,5],[340,5],[385,5]]},"2313":{"position":[[36,5],[61,5],[75,5]]},"2348":{"position":[[125,5],[160,5]]},"2357":{"position":[[349,5],[383,5],[415,5]]},"2484":{"position":[[0,5]]},"2486":{"position":[[103,5],[137,5],[165,5],[179,5]]},"2532":{"position":[[1,5]]},"2536":{"position":[[0,5]]},"2569":{"position":[[4,3],[143,3]]},"2575":{"position":[[24,3]]},"2577":{"position":[[14,3]]},"2579":{"position":[[55,5],[625,3]]},"2581":{"position":[[91,5],[594,5]]},"2587":{"position":[[0,5]]},"2589":{"position":[[19,5],[459,5]]},"2690":{"position":[[0,5],[15,5]]},"2709":{"position":[[0,5]]},"2711":{"position":[[55,5],[91,5],[127,5]]},"2713":{"position":[[432,5],[458,5],[827,5],[853,5],[885,5],[1749,5],[1775,5]]},"2725":{"position":[[157,5],[191,5],[651,5],[687,5],[1126,5],[1160,5],[1609,5],[1643,5],[1679,5],[1724,5]]},"2727":{"position":[[140,5],[174,5],[216,5]]},"2729":{"position":[[203,5]]},"2776":{"position":[[66,5],[102,5]]},"2805":{"position":[[114,5],[150,5],[164,5],[188,5]]},"2807":{"position":[[151,5]]},"2813":{"position":[[125,5],[161,5],[197,5],[211,5],[235,5],[724,5],[772,5]]},"2817":{"position":[[274,5],[310,5],[346,5],[360,5],[384,5]]},"2819":{"position":[[82,5],[130,5]]},"2821":{"position":[[113,5],[161,5]]},"2827":{"position":[[46,5]]},"2829":{"position":[[64,5]]},"2831":{"position":[[470,5]]},"2836":{"position":[[172,5],[220,5],[1385,5],[1433,5]]},"2856":{"position":[[56,5],[70,5],[94,5]]},"2881":{"position":[[469,5],[483,5],[519,5],[555,5]]},"2887":{"position":[[259,5]]},"2889":{"position":[[178,5],[192,5],[228,5],[264,5]]},"2897":{"position":[[251,5],[287,5]]},"2899":{"position":[[291,5]]},"2901":{"position":[[60,5],[74,5]]},"2905":{"position":[[123,5],[159,5]]},"2925":{"position":[[63,5],[94,5]]},"2927":{"position":[[0,5],[31,5]]},"2929":{"position":[[56,5],[87,5],[124,5],[138,5]]},"2933":{"position":[[43,5],[74,5],[111,5]]},"2935":{"position":[[59,5],[90,5],[127,5],[182,5]]},"2937":{"position":[[137,5],[168,5],[205,5],[260,5],[274,5]]},"2941":{"position":[[63,5],[94,5]]},"2943":{"position":[[0,5],[31,5]]},"2945":{"position":[[56,5],[87,5],[124,5],[138,5]]},"2949":{"position":[[46,5],[77,5]]},"2951":{"position":[[43,5],[74,5]]},"2955":{"position":[[63,5],[94,5]]},"2957":{"position":[[0,5],[31,5]]},"2959":{"position":[[56,5],[87,5],[124,5],[138,5]]},"2963":{"position":[[44,5],[75,5]]},"2971":{"position":[[0,5],[14,5]]},"2973":{"position":[[66,5]]},"3071":{"position":[[228,5]]},"3144":{"position":[[68,5],[104,5],[140,5],[188,5]]},"3154":{"position":[[51,5],[82,5]]},"3156":{"position":[[69,5],[100,5],[136,5],[150,5]]},"3158":{"position":[[60,5],[91,5],[127,5],[141,5]]},"3189":{"position":[[515,3]]},"3228":{"position":[[260,5]]},"3234":{"position":[[435,3]]},"3287":{"position":[[1294,5]]},"3291":{"position":[[25,5],[617,5],[680,5],[960,5],[1352,5],[1502,5],[1841,5]]},"3360":{"position":[[0,5]]},"3371":{"position":[[55,5],[75,5],[101,5]]},"3373":{"position":[[127,5],[141,5],[177,5],[213,5]]},"3379":{"position":[[0,5]]},"3381":{"position":[[0,5],[29,5]]},"3383":{"position":[[49,5],[62,5]]},"3387":{"position":[[54,5],[68,5]]},"3389":{"position":[[428,5],[448,5],[468,5],[481,5],[507,5],[976,5],[1005,5]]},"3391":{"position":[[292,5],[321,5]]},"3393":{"position":[[204,5],[544,5],[573,5]]},"3397":{"position":[[286,5],[326,5],[729,5],[773,5],[884,5]]},"3399":{"position":[[108,5],[144,5],[192,5],[228,5],[508,5]]},"3424":{"position":[[92,5]]},"3434":{"position":[[113,5]]},"3446":{"position":[[0,5]]},"3452":{"position":[[486,5]]},"3458":{"position":[[200,5],[591,5]]},"3466":{"position":[[86,5],[233,5],[398,5],[1585,5]]},"3483":{"position":[[557,5],[592,5],[1274,5]]},"3630":{"position":[[89,5],[125,5],[161,5],[209,5]]},"3636":{"position":[[125,5]]},"3638":{"position":[[71,5]]},"3640":{"position":[[26,5]]},"3644":{"position":[[60,5],[419,5],[854,5]]},"3650":{"position":[[286,5]]},"3656":{"position":[[0,5],[35,5]]},"3686":{"position":[[615,5],[651,5],[693,5],[725,5]]},"3688":{"position":[[123,5]]},"3698":{"position":[[121,5]]},"3700":{"position":[[136,5]]},"3702":{"position":[[1662,3],[2097,4],[2304,3]]},"3708":{"position":[[632,5],[661,5],[695,5],[730,5],[763,5],[795,5],[835,5],[849,5]]},"3734":{"position":[[19,5],[54,5]]},"3746":{"position":[[257,5]]},"3791":{"position":[[1053,5]]},"3910":{"position":[[1118,5]]},"3912":{"position":[[1704,5]]},"3914":{"position":[[1786,5],[1935,5]]},"3916":{"position":[[3489,5]]},"3924":{"position":[[2803,5],[2823,5],[2849,5],[3218,5],[3247,5]]},"3928":{"position":[[890,5]]},"3934":{"position":[[1364,5]]},"3956":{"position":[[269,5],[298,5],[332,5],[367,5],[400,5],[432,5],[472,5],[486,5]]},"3966":{"position":[[811,3]]}}}],["usag",{"_index":6897,"t":{"2764":{"position":[[155,5]]},"3082":{"position":[[368,5]]}}}],["useambienttransact",{"_index":7844,"t":{"3287":{"position":[[421,21],[687,21],[806,21],[898,21],[974,21],[1084,21]]}}}],["useapploc",{"_index":6390,"t":{"2519":{"position":[[312,18],[394,18]]}}}],["useauthent",{"_index":942,"t":{"123":{"position":[[61,17]]},"216":{"position":[[1102,17]]},"338":{"position":[[910,17]]},"411":{"position":[[623,17]]},"2848":{"position":[[650,17]]}}}],["useauthor",{"_index":943,"t":{"123":{"position":[[86,16]]},"216":{"position":[[1127,16]]},"338":{"position":[[935,16]]},"1979":{"position":[[676,16]]},"1991":{"position":[[164,16]]},"2014":{"position":[[164,16]]},"2776":{"position":[[644,16]]},"2848":{"position":[[675,16]]}}}],["usebatchef",{"_index":3512,"t":{"761":{"position":[[169,10]]}}}],["usebatchef_sqlit",{"_index":3511,"t":{"761":{"position":[[169,17]]}}}],["usecompon",{"_index":2260,"t":{"350":{"position":[[136,12],[307,12],[380,12],[582,12],[779,12]]},"369":{"position":[[33,12]]},"371":{"position":[[739,12]]}}}],["usecorsaccessor",{"_index":1593,"t":{"216":{"position":[[1079,15]]},"338":{"position":[[887,15]]},"411":{"position":[[473,15],[577,15]]}}}],["usedatabasenam",{"_index":3337,"t":{"685":{"position":[[344,16],[390,16]]},"698":{"position":[[1045,16]]}}}],["usedefaultcredenti",{"_index":8377,"t":{"3587":{"position":[[230,21],[416,21]]}}}],["usedeveloperexceptionpag",{"_index":1590,"t":{"216":{"position":[[999,25]]},"338":{"position":[[807,25]]},"1979":{"position":[[596,25]]},"2519":{"position":[[257,25]]},"2848":{"position":[[484,25]]},"3708":{"position":[[4053,25]]}}}],["useendpoint",{"_index":1595,"t":{"216":{"position":[[1168,12]]},"338":{"position":[[1063,12]]},"371":{"position":[[525,12]]},"1979":{"position":[[772,12]]},"2848":{"position":[[717,12],[871,12]]},"2879":{"position":[[299,12]]},"3144":{"position":[[491,12]]},"3156":{"position":[[543,12]]},"3158":{"position":[[515,12]]},"3630":{"position":[[598,12]]}}}],["useexceptionhandl",{"_index":7115,"t":{"2848":{"position":[[526,19]]}}}],["usefileserv",{"_index":5370,"t":{"1735":{"position":[[38,13],[125,13]]}}}],["useforwardedhead",{"_index":6058,"t":{"2251":{"position":[[323,19]]}}}],["usehst",{"_index":7116,"t":{"2848":{"position":[[566,7]]}}}],["usehttplog",{"_index":8167,"t":{"3440":{"position":[[26,14]]},"3932":{"position":[[132,14]]}}}],["usehttpsi",{"_index":5425,"t":{"1755":{"position":[[1106,10]]}}}],["usehttpsredirect",{"_index":1591,"t":{"216":{"position":[[1034,19]]},"338":{"position":[[842,19]]},"1979":{"position":[[631,19]]},"1991":{"position":[[137,19]]},"2014":{"position":[[137,19]]},"2776":{"position":[[617,19]]},"2848":{"position":[[583,19]]},"3932":{"position":[[2614,19]]}}}],["useinject",{"_index":1594,"t":{"216":{"position":[[1151,9]]},"338":{"position":[[959,9]]},"371":{"position":[[496,9]]},"1979":{"position":[[743,9],[849,9]]},"1991":{"position":[[188,9],[245,9]]},"2014":{"position":[[188,9],[245,9]]},"2255":{"position":[[394,9]]},"2266":{"position":[[254,9]]},"2281":{"position":[[0,9],[53,9],[317,9]]},"2283":{"position":[[101,9]]},"2776":{"position":[[668,9]]},"2879":{"position":[[270,9]]},"3339":{"position":[[319,9]]},"3345":{"position":[[108,9],[181,9]]},"3630":{"position":[[4,9]]},"3632":{"position":[[66,9],[91,9],[220,9]]},"3666":{"position":[[302,9],[349,9]]},"3704":{"position":[[468,9],[790,9]]},"3916":{"position":[[2347,9]]},"3918":{"position":[[1222,9],[2422,9],[2675,9]]},"3920":{"position":[[1158,9]]},"3924":{"position":[[4002,9],[4330,9]]},"3932":{"position":[[2641,9]]},"3944":{"position":[[834,9]]},"3992":{"position":[[733,9]]}}}],["useinjectbas",{"_index":6078,"t":{"2266":{"position":[[295,13]]},"2283":{"position":[[0,13],[57,13]]}}}],["useinjectopt",{"_index":9223,"t":{"3918":{"position":[[1239,16]]}}}],["useinmemorymessagequeu",{"_index":5703,"t":{"1827":{"position":[[75,23]]}}}],["useinmemorystorag",{"_index":5702,"t":{"1827":{"position":[[45,18]]}}}],["usekestrel",{"_index":5208,"t":{"1667":{"position":[[18,10],[233,10]]},"1755":{"position":[[666,10]]}}}],["useknife4ui",{"_index":8563,"t":{"3704":{"position":[[228,11],[541,11]]},"3924":{"position":[[3762,11],[4081,11]]}}}],["uselazyloadingproxi",{"_index":2864,"t":{"534":{"position":[[604,21]]}}}],["uselowercasenamingconvent",{"_index":3745,"t":{"919":{"position":[[128,28]]}}}],["usemiddlewar",{"_index":6723,"t":{"2579":{"position":[[795,13]]},"2581":{"position":[[1276,13]]}}}],["usenpgsql",{"_index":3744,"t":{"919":{"position":[[115,9]]}}}],["usenumb",{"_index":6178,"t":{"2333":{"position":[[200,10]]}}}],["useoracl",{"_index":3730,"t":{"899":{"position":[[1887,9]]}}}],["useoraclesqlcompat",{"_index":3731,"t":{"899":{"position":[[1904,25]]}}}],["user",{"_index":745,"t":{"112":{"position":[[1172,4]]},"127":{"position":[[1862,4],[1893,4]]},"135":{"position":[[429,4]]},"144":{"position":[[192,4],[223,4]]},"150":{"position":[[35,4]]},"220":{"position":[[408,4]]},"520":{"position":[[75,4],[197,4],[259,4],[485,4]]},"528":{"position":[[548,5],[582,5]]},"550":{"position":[[489,4],[520,4]]},"556":{"position":[[46,5],[138,4],[162,4],[186,4]]},"645":{"position":[[4,4],[15,4],[91,4],[105,4],[151,4],[194,4],[274,4],[294,4],[356,4]]},"647":{"position":[[62,4],[92,4],[183,4],[228,4]]},"649":{"position":[[43,4],[91,4],[99,4],[147,4],[217,4],[276,4],[284,4],[343,4]]},"651":{"position":[[46,4],[97,4],[105,4],[156,4],[229,4],[291,4],[299,4],[361,4]]},"661":{"position":[[51,4],[65,4],[150,4],[170,4]]},"663":{"position":[[54,4],[68,4],[159,4],[179,4]]},"665":{"position":[[58,4],[126,4],[188,4],[265,4],[302,4],[358,4],[408,4],[473,4],[593,4],[672,4],[745,4],[833,4],[876,4],[943,4],[1004,4],[1080,4]]},"667":{"position":[[61,4],[132,4],[197,4],[277,4],[314,4],[373,4],[426,4],[494,4],[620,4],[702,4],[778,4],[869,4],[912,4],[982,4],[1046,4],[1125,4]]},"669":{"position":[[58,4],[126,4],[188,4],[265,4],[302,4],[358,4],[408,4],[473,4],[593,4],[672,4],[745,4],[833,4],[876,4],[943,4],[1004,4],[1080,4]]},"671":{"position":[[61,4],[132,4],[197,4],[277,4],[314,4],[373,4],[426,4],[494,4],[620,4],[702,4],[778,4],[869,4],[912,4],[982,4],[1046,4],[1125,4]]},"688":{"position":[[409,4]]},"779":{"position":[[43,4],[57,4],[108,4],[170,4],[231,4],[251,4]]},"781":{"position":[[46,4],[60,4],[135,4],[155,4]]},"783":{"position":[[54,4],[141,4]]},"785":{"position":[[57,4],[150,4]]},"787":{"position":[[60,4],[159,4]]},"789":{"position":[[63,4],[168,4]]},"795":{"position":[[226,4],[543,4]]},"901":{"position":[[75,4],[197,4],[287,4],[513,4]]},"1029":{"position":[[45,4]]},"1031":{"position":[[92,4],[180,4]]},"1037":{"position":[[563,4]]},"1054":{"position":[[439,4]]},"1056":{"position":[[728,4]]},"1269":{"position":[[110,4],[167,4],[172,4]]},"1286":{"position":[[166,4],[188,4],[282,4],[301,4],[329,4]]},"1295":{"position":[[12,5],[40,4],[56,4],[92,5],[110,4],[126,4],[182,4],[196,4]]},"1297":{"position":[[4,5],[32,4],[55,4],[74,4]]},"1300":{"position":[[10,4],[32,4]]},"1302":{"position":[[45,4],[76,4]]},"1315":{"position":[[75,4],[197,4],[287,4],[513,4]]},"1325":{"position":[[43,4],[57,4],[108,4],[171,4],[232,4],[252,4]]},"1327":{"position":[[46,4],[60,4],[135,4],[155,4]]},"1329":{"position":[[50,4],[112,4],[132,4],[151,4],[196,4],[216,4],[235,4],[269,4],[319,4],[352,4],[371,4],[391,4],[424,4],[443,4],[531,4],[604,4],[624,4],[643,4],[699,4],[719,4],[738,4],[778,4],[839,4],[877,4],[896,4],[922,4],[960,4],[979,4]]},"1331":{"position":[[53,4],[118,4],[138,4],[157,4],[205,4],[225,4],[244,4],[278,4],[331,4],[367,4],[386,4],[406,4],[439,4],[458,4],[549,4],[625,4],[645,4],[664,4],[723,4],[743,4],[762,4],[802,4],[866,4],[907,4],[926,4],[952,4],[993,4],[1012,4]]},"1333":{"position":[[50,4],[112,4],[132,4],[151,4],[196,4],[216,4],[235,4],[269,4],[319,4],[352,4],[371,4],[391,4],[424,4],[443,4],[531,4],[604,4],[624,4],[643,4],[699,4],[719,4],[738,4],[778,4],[839,4],[877,4],[896,4],[922,4],[960,4],[979,4]]},"1335":{"position":[[53,4],[118,4],[138,4],[157,4],[205,4],[225,4],[244,4],[278,4],[331,4],[367,4],[386,4],[406,4],[442,4],[461,4],[552,4],[628,4],[648,4],[667,4],[726,4],[746,4],[765,4],[805,4],[869,4],[910,4],[929,4],[955,4],[996,4],[1015,4]]},"1337":{"position":[[49,4],[116,4]]},"1339":{"position":[[52,4],[122,4]]},"1341":{"position":[[56,4],[124,4],[144,4],[163,4],[214,4],[234,4],[253,4],[347,4],[426,4],[446,4],[465,4],[527,4],[547,4],[566,4]]},"1343":{"position":[[59,4],[130,4],[150,4],[169,4],[223,4],[243,4],[262,4],[359,4],[441,4],[461,4],[480,4],[545,4],[565,4],[584,4]]},"1345":{"position":[[56,4],[124,4],[144,4],[163,4],[214,4],[234,4],[253,4],[347,4],[426,4],[446,4],[465,4],[527,4],[547,4],[566,4]]},"1347":{"position":[[59,4],[130,4],[150,4],[169,4],[223,4],[243,4],[262,4],[359,4],[441,4],[461,4],[480,4],[545,4],[565,4],[584,4]]},"1349":{"position":[[43,4],[91,4],[99,4],[147,4],[217,4],[276,4],[284,4],[343,4]]},"1351":{"position":[[46,4],[97,4],[105,4],[156,4],[229,4],[291,4],[299,4],[361,4]]},"1483":{"position":[[116,4],[644,4]]},"1653":{"position":[[234,4]]},"1683":{"position":[[87,4],[110,4]]},"1703":{"position":[[192,4],[335,4],[369,4],[503,4]]},"1705":{"position":[[86,4],[97,4],[125,4],[157,4],[168,4],[196,4],[228,4],[239,4],[267,4]]},"1707":{"position":[[165,4],[179,4]]},"1709":{"position":[[66,4]]},"1711":{"position":[[271,4]]},"1767":{"position":[[68,4]]},"1769":{"position":[[68,4]]},"1771":{"position":[[68,4]]},"1779":{"position":[[174,4],[208,4],[401,4]]},"1781":{"position":[[205,4],[253,4],[418,4]]},"1887":{"position":[[372,4]]},"1925":{"position":[[1034,4]]},"2033":{"position":[[22,4],[63,4]]},"2510":{"position":[[31,5]]},"2512":{"position":[[30,5],[65,4]]},"2749":{"position":[[26,5],[111,5],[411,4],[800,5]]},"2917":{"position":[[51,4]]},"3080":{"position":[[594,5],[679,5],[979,4],[1368,5]]},"3118":{"position":[[287,4]]},"3154":{"position":[[257,4],[344,4],[446,4],[579,4],[652,4]]},"3168":{"position":[[370,4],[449,4]]},"3179":{"position":[[8,4]]},"3181":{"position":[[8,5]]},"3189":{"position":[[249,4],[395,4]]},"3498":{"position":[[256,4]]},"3500":{"position":[[42,4],[64,4],[152,4],[276,4],[298,4],[445,4],[636,4]]},"3506":{"position":[[116,4],[227,4],[345,4]]},"3508":{"position":[[34,4],[116,4]]},"3520":{"position":[[296,4],[346,4]]},"3543":{"position":[[256,4]]},"3545":{"position":[[129,4],[134,4],[261,4],[266,4],[402,4],[407,4]]},"3547":{"position":[[264,4],[269,4],[420,4],[425,4]]},"3549":{"position":[[270,4],[275,4]]},"3561":{"position":[[345,4]]},"3563":{"position":[[1070,4],[1075,4]]},"3565":{"position":[[140,4],[145,4]]},"3567":{"position":[[215,4],[220,4]]},"3569":{"position":[[171,4],[176,4]]},"3571":{"position":[[222,4],[227,4]]},"3575":{"position":[[316,4],[445,4],[508,4]]},"3581":{"position":[[328,4]]},"3583":{"position":[[433,4]]},"3791":{"position":[[1179,4],[1927,4]]},"3962":{"position":[[171,4]]},"3992":{"position":[[517,4]]}}}],["user2",{"_index":3259,"t":{"649":{"position":[[49,5],[105,5],[153,5],[223,5],[290,5],[349,5]]},"651":{"position":[[52,5],[111,5],[162,5],[235,5],[305,5],[367,5]]},"1349":{"position":[[49,5],[105,5],[153,5],[223,5],[290,5],[349,5]]},"1351":{"position":[[52,5],[111,5],[162,5],[235,5],[305,5],[367,5]]}}}],["userag",{"_index":8191,"t":{"3452":{"position":[[1534,9]]},"3916":{"position":[[4530,9]]}}}],["userchangesubscribehandl",{"_index":5320,"t":{"1703":{"position":[[107,26]]},"1711":{"position":[[122,26],[178,26]]}}}],["userequestcultur",{"_index":6722,"t":{"2579":{"position":[[726,17],[950,17]]},"2581":{"position":[[1185,17],[1356,17]]}}}],["usererrorcod",{"_index":5740,"t":{"1865":{"position":[[349,14]]}}}],["userid",{"_index":742,"t":{"112":{"position":[[1095,6],[1151,6],[1194,6]]},"114":{"position":[[939,6]]},"127":{"position":[[1853,6]]},"144":{"position":[[183,6]]},"150":{"position":[[22,6]]},"570":{"position":[[1094,6],[1161,6],[1944,6],[1953,6],[2289,6],[2298,6],[2580,6],[2589,6]]},"1297":{"position":[[101,6]]},"1683":{"position":[[78,6]]},"1925":{"position":[[957,6],[1013,6],[1056,6]]},"2033":{"position":[[50,6]]},"2132":{"position":[[88,6],[192,6],[322,6],[441,6]]},"3118":{"position":[[237,6]]},"3189":{"position":[[226,6],[374,6],[400,6]]},"3446":{"position":[[1414,6]]},"3452":{"position":[[2043,6]]},"3466":{"position":[[164,6],[330,6]]},"3914":{"position":[[1732,6],[1864,6],[2012,6]]},"3916":{"position":[[5039,6]]},"3924":{"position":[[4590,6],[4726,6]]},"3928":{"position":[[1976,6]]},"3974":{"position":[[852,6]]}}}],["usermod",{"_index":4411,"t":{"1483":{"position":[[617,7]]}}}],["usernam",{"_index":5582,"t":{"1801":{"position":[[3264,8]]},"3118":{"position":[[250,8]]},"3686":{"position":[[271,8],[1037,8],[1107,8],[1214,8],[1226,8]]}}}],["userollbackfilenam",{"_index":8150,"t":{"3432":{"position":[[4691,19]]}}}],["userout",{"_index":1592,"t":{"216":{"position":[[1061,10]]},"338":{"position":[[869,10]]},"371":{"position":[[478,10]]},"411":{"position":[[603,10]]},"1979":{"position":[[658,10]]},"2255":{"position":[[255,10],[496,10]]},"2519":{"position":[[360,10],[424,10]]},"2848":{"position":[[632,10],[852,10]]},"2879":{"position":[[252,10]]}}}],["userrepositori",{"_index":3880,"t":{"1029":{"position":[[4,14]]}}}],["userview",{"_index":5462,"t":{"1773":{"position":[[68,8],[101,8]]}}}],["useserilogdefault",{"_index":6787,"t":{"2674":{"position":[[210,17],[302,17]]},"3934":{"position":[[374,17]]}}}],["usesess",{"_index":7117,"t":{"2848":{"position":[[699,10],[831,10]]}}}],["usespecialcharact",{"_index":6179,"t":{"2333":{"position":[[229,20]]}}}],["usespecificationdocu",{"_index":6083,"t":{"2281":{"position":[[81,25]]},"3630":{"position":[[23,25],[565,25]]}}}],["usesqlit",{"_index":2825,"t":{"526":{"position":[[189,9],[431,9]]},"534":{"position":[[629,9]]},"1313":{"position":[[1059,9]]},"2951":{"position":[[419,9],[667,9]]}}}],["usesqlserv",{"_index":2797,"t":{"518":{"position":[[465,12]]},"915":{"position":[[180,12]]},"3291":{"position":[[546,12],[1806,12]]}}}],["usestartup",{"_index":1514,"t":{"202":{"position":[[455,10],[514,10]]},"336":{"position":[[217,10]]},"455":{"position":[[667,10]]},"461":{"position":[[1513,10]]},"1667":{"position":[[210,10]]},"1755":{"position":[[643,10]]},"1977":{"position":[[369,10]]},"2269":{"position":[[450,10]]},"2776":{"position":[[438,10]]},"2862":{"position":[[167,10]]},"2905":{"position":[[16,10]]},"3166":{"position":[[343,10]]}}}],["usestaticfil",{"_index":5372,"t":{"1735":{"position":[[90,14]]},"2100":{"position":[[30,14]]},"2519":{"position":[[338,14]]},"2848":{"position":[[610,14]]}}}],["usestoredprocedur",{"_index":7814,"t":{"3273":{"position":[[509,18]]}}}],["useswagg",{"_index":1560,"t":{"210":{"position":[[530,10]]}}}],["usesystemd",{"_index":7101,"t":{"2836":{"position":[[1372,10],[1696,10]]}}}],["usetran",{"_index":7688,"t":{"3228":{"position":[[281,7]]}}}],["usetransact",{"_index":7875,"t":{"3291":{"position":[[1043,14]]}}}],["useunifyresultstatuscod",{"_index":8595,"t":{"3708":{"position":[[4110,25]]},"3962":{"position":[[112,25]]}}}],["useurl",{"_index":7154,"t":{"2875":{"position":[[333,7]]},"3075":{"position":[[136,7]]}}}],["useutctimestamp",{"_index":5684,"t":{"1821":{"position":[[129,15]]},"3826":{"position":[[88,15]]},"3914":{"position":[[817,15]]},"3924":{"position":[[385,15]]}}}],["usevirtualpath",{"_index":7937,"t":{"3345":{"position":[[84,14],[153,14]]},"3944":{"position":[[806,14]]}}}],["usewindowsservic",{"_index":7093,"t":{"2836":{"position":[[152,17],[483,17]]}}}],["usex",{"_index":2181,"t":{"338":{"position":[[976,4]]}}}],["usexx",{"_index":2182,"t":{"338":{"position":[[988,5]]}}}],["usexxx",{"_index":2183,"t":{"338":{"position":[[1001,6]]}}}],["usexxxx",{"_index":2184,"t":{"338":{"position":[[1015,7],[1184,7]]}}}],["usexxxxx",{"_index":2185,"t":{"338":{"position":[[1030,8]]}}}],["usexxxxxx",{"_index":2186,"t":{"338":{"position":[[1046,9]]}}}],["usr",{"_index":4429,"t":{"1485":{"position":[[176,3],[192,3]]}}}],["usual",{"_index":3361,"t":{"696":{"position":[[823,7]]}}}],["ut",{"_index":7976,"t":{"3352":{"position":[[616,2],[682,2]]}}}],["utc",{"_index":5685,"t":{"1821":{"position":[[150,3]]},"3826":{"position":[[49,3]]},"3914":{"position":[[848,3]]}}}],["utcnow",{"_index":1680,"t":{"231":{"position":[[520,6]]},"233":{"position":[[163,6]]},"235":{"position":[[217,6]]},"253":{"position":[[588,6]]},"747":{"position":[[325,6]]},"885":{"position":[[119,6]]},"1797":{"position":[[549,6]]},"2484":{"position":[[739,6]]},"2827":{"position":[[785,6]]},"2829":{"position":[[969,6]]},"3432":{"position":[[1587,6],[2020,6]]},"3708":{"position":[[3712,6]]},"3720":{"position":[[221,6]]},"3924":{"position":[[421,6]]},"3956":{"position":[[3040,6]]}}}],["utf",{"_index":2519,"t":{"427":{"position":[[141,3],[192,3]]},"445":{"position":[[407,3]]},"1286":{"position":[[248,3]]},"1755":{"position":[[110,3]]},"2788":{"position":[[43,3]]},"3545":{"position":[[394,3]]},"3660":{"position":[[19,3],[71,3]]}}}],["utf8",{"_index":1847,"t":{"253":{"position":[[457,4],[647,4]]},"520":{"position":[[148,4]]},"901":{"position":[[148,4]]},"1315":{"position":[[148,4]]},"1729":{"position":[[236,4]]},"1801":{"position":[[1656,4],[2544,4]]},"3500":{"position":[[361,4]]},"3504":{"position":[[64,4]]}}}],["utf8jsonwrit",{"_index":8146,"t":{"3432":{"position":[[4081,14]]}}}],["util",{"_index":2026,"t":{"308":{"position":[[319,5],[360,5]]},"310":{"position":[[171,5],[214,5],[961,5]]},"314":{"position":[[37,5]]},"316":{"position":[[39,5]]},"319":{"position":[[104,5],[397,5]]},"329":{"position":[[6,5],[25,5]]},"3254":{"position":[[1541,9]]},"3267":{"position":[[348,9]]},"3936":{"position":[[709,5],[728,5]]},"3938":{"position":[[67,5],[687,5],[706,5]]},"3940":{"position":[[269,5]]}}}],["uuid",{"_index":7447,"t":{"3122":{"position":[[18,4]]}}}],["uy",{"_index":6668,"t":{"2559":{"position":[[2379,2]]}}}],["uz",{"_index":6696,"t":{"2559":{"position":[[2660,2],[2669,2],[2672,2],[2702,2],[2705,2]]}}}],["uzbek",{"_index":6697,"t":{"2559":{"position":[[2663,5],[2680,5],[2713,5]]}}}],["v",{"_index":2047,"t":{"310":{"position":[[566,1],[587,1],[609,1],[620,1]]},"696":{"position":[[4550,1]]},"1362":{"position":[[12,1]]},"1364":{"position":[[68,1],[140,1],[159,1]]},"1366":{"position":[[42,1]]},"1368":{"position":[[316,1],[380,1],[479,1],[580,1]]},"1485":{"position":[[134,1],[173,1],[210,1],[257,1]]},"1488":{"position":[[1493,1]]},"1499":{"position":[[793,1]]},"1520":{"position":[[212,1],[217,1]]},"1539":{"position":[[85,1],[739,1]]},"1541":{"position":[[321,1],[324,1]]},"1543":{"position":[[246,1]]},"1557":{"position":[[367,1],[521,1]]},"1592":{"position":[[139,1]]},"1594":{"position":[[187,1]]},"1621":{"position":[[702,1]]}}}],["v0",{"_index":1345,"t":{"190":{"position":[[32,2]]},"314":{"position":[[178,2]]},"715":{"position":[[108,2],[123,2]]},"734":{"position":[[110,2]]},"1062":{"position":[[24,2],[121,2]]}}}],["v1",{"_index":2067,"t":{"314":{"position":[[91,2]]},"316":{"position":[[93,2]]},"685":{"position":[[451,2],[501,2]]},"696":{"position":[[409,2],[439,2],[465,2],[515,2],[544,2],[582,2],[608,2],[911,2],[937,2],[972,2],[1016,2],[1144,2],[2137,2],[2189,2],[2325,2],[3075,2],[3119,2],[3247,2],[3751,2],[3798,2],[3929,2],[4692,2]]},"706":{"position":[[295,2]]},"713":{"position":[[14,2],[26,2],[96,2]]},"717":{"position":[[34,2]]},"726":{"position":[[25,2]]},"1319":{"position":[[296,2]]},"1530":{"position":[[180,2]]},"1605":{"position":[[160,2]]},"1661":{"position":[[157,2]]},"3023":{"position":[[158,2]]},"3618":{"position":[[59,2]]},"3920":{"position":[[501,2]]},"3926":{"position":[[220,2]]},"3982":{"position":[[800,2]]}}}],["v1_chap12",{"_index":4944,"t":{"1530":{"position":[[180,9]]}}}],["v2",{"_index":1,"t":{"3":{"position":[[9,2]]},"445":{"position":[[16,2],[909,2]]},"455":{"position":[[166,2]]},"1279":{"position":[[9,2]]},"1377":{"position":[[618,2],[640,2],[758,2]]},"1633":{"position":[[9,2]]},"1635":{"position":[[9,2]]},"1655":{"position":[[216,2],[228,2]]},"1674":{"position":[[49,2]]},"1685":{"position":[[7,2]]},"1689":{"position":[[511,2]]},"1695":{"position":[[0,2],[21,2]]},"1791":{"position":[[0,2],[22,2]]},"1861":{"position":[[5,2]]},"2186":{"position":[[14,2]]},"2188":{"position":[[14,2]]},"2199":{"position":[[5,2]]},"2319":{"position":[[9,2]]},"2486":{"position":[[9,2]]},"2629":{"position":[[9,2],[127,2]]},"2856":{"position":[[1728,2]]},"2985":{"position":[[244,2]]},"3528":{"position":[[9,2]]},"3567":{"position":[[9,2]]},"3618":{"position":[[64,2]]},"3702":{"position":[[2288,2],[2376,2],[2419,2],[2710,2]]},"3946":{"position":[[462,2]]},"3948":{"position":[[0,2],[21,2]]},"3950":{"position":[[869,2]]},"3952":{"position":[[451,2],[531,2]]}}}],["v3",{"_index":388,"t":{"44":{"position":[[75,2]]},"48":{"position":[[152,2]]},"53":{"position":[[7,2]]},"57":{"position":[[75,2]]},"64":{"position":[[7,2]]},"68":{"position":[[75,2]]},"72":{"position":[[152,2]]},"77":{"position":[[7,2]]},"216":{"position":[[0,2],[20,2]]},"544":{"position":[[151,2]]},"761":{"position":[[142,2]]},"1240":{"position":[[1028,2]]},"1246":{"position":[[82,2]]},"1257":{"position":[[367,2]]},"1265":{"position":[[82,2]]},"1641":{"position":[[481,2],[565,2]]},"1661":{"position":[[660,2]]},"1743":{"position":[[307,2]]},"1795":{"position":[[739,2],[2326,2]]},"2261":{"position":[[99,2],[297,2]]},"2653":{"position":[[234,2]]},"2674":{"position":[[97,2]]},"2735":{"position":[[19,2]]},"3023":{"position":[[657,2]]},"3063":{"position":[[1072,2],[1160,2],[1424,2]]},"3069":{"position":[[255,2]]},"3071":{"position":[[9,2],[1010,2],[1312,2]]},"3464":{"position":[[9,2],[147,2],[345,2]]},"3488":{"position":[[15,2]]},"3498":{"position":[[216,2]]},"3530":{"position":[[9,2]]},"3532":{"position":[[50,2]]},"3543":{"position":[[216,2]]},"3569":{"position":[[9,2]]},"3571":{"position":[[50,2]]},"3575":{"position":[[276,2]]},"3581":{"position":[[279,2]]},"3583":{"position":[[384,2]]},"3593":{"position":[[19,2]]},"3686":{"position":[[19,2],[399,2]]},"3688":{"position":[[19,2]]},"3690":{"position":[[19,2]]},"3692":{"position":[[19,2]]},"3694":{"position":[[19,2]]},"3698":{"position":[[19,2]]},"3706":{"position":[[1064,2],[1152,2],[1435,2]]},"3930":{"position":[[1155,2]]},"3932":{"position":[[1080,2],[2098,2]]},"3936":{"position":[[1967,2],[2156,2]]},"3938":{"position":[[530,2]]},"3946":{"position":[[0,2],[16,2],[468,2]]}}}],["v4",{"_index":1121,"t":{"148":{"position":[[204,2]]},"331":{"position":[[180,2]]},"2501":{"position":[[81,2],[92,2],[177,2],[188,2]]},"2503":{"position":[[59,2],[70,2]]},"2635":{"position":[[46,2]]},"2641":{"position":[[16,2]]},"2662":{"position":[[46,2]]},"2668":{"position":[[16,2]]},"2977":{"position":[[134,2],[145,2]]},"2987":{"position":[[134,2],[145,2]]},"2997":{"position":[[134,2],[145,2]]},"3005":{"position":[[134,2],[145,2]]},"3019":{"position":[[134,2],[145,2]]},"3027":{"position":[[134,2],[145,2]]},"3035":{"position":[[134,2],[145,2]]},"3043":{"position":[[134,2],[145,2]]},"3051":{"position":[[134,2],[145,2]]},"3059":{"position":[[134,2],[145,2]]},"3131":{"position":[[372,2]]},"3702":{"position":[[2063,2],[2154,2],[2472,2]]},"3910":{"position":[[302,2]]},"3912":{"position":[[69,2],[120,2],[194,2],[268,2],[342,2],[416,2],[490,2],[564,2],[638,2]]},"3914":{"position":[[5,2],[79,2],[153,2],[227,2],[301,2],[375,2],[449,2],[523,2],[597,2],[671,2]]},"3916":{"position":[[5,2],[79,2],[153,2],[227,2],[301,2],[375,2],[449,2],[523,2],[597,2],[2074,2],[2268,2]]},"3918":{"position":[[5,2],[79,2],[153,2],[227,2],[301,2],[375,2],[449,2],[523,2],[597,2],[671,2]]},"3920":{"position":[[5,2],[79,2]]},"3922":{"position":[[1868,2]]},"3926":{"position":[[620,2]]},"3932":{"position":[[1659,2],[1670,2]]}}}],["v6",{"_index":6786,"t":{"2668":{"position":[[46,2]]},"3940":{"position":[[342,2]]},"3944":{"position":[[172,2]]}}}],["v7",{"_index":6776,"t":{"2641":{"position":[[46,2]]}}}],["v_person",{"_index":3388,"t":{"696":{"position":[[4550,8]]},"1362":{"position":[[12,8]]},"1364":{"position":[[68,8],[140,8],[159,8]]},"1368":{"position":[[316,8],[380,8],[479,8],[580,8]]}}}],["v_repositori",{"_index":4139,"t":{"1366":{"position":[[42,12]]}}}],["vail",{"_index":6086,"t":{"2285":{"position":[[97,4],[107,4]]}}}],["vaildedasync",{"_index":7061,"t":{"2790":{"position":[[926,12],[995,12]]},"2796":{"position":[[460,12]]}}}],["valiationtyp",{"_index":9443,"t":{"3930":{"position":[[284,14],[1113,14]]},"3996":{"position":[[282,14]]}}}],["valid",{"_index":3104,"t":{"587":{"position":[[1840,8]]},"599":{"position":[[380,8]]},"604":{"position":[[27,8]]},"713":{"position":[[173,10]]},"734":{"position":[[187,10]]},"1683":{"position":[[249,8]]},"2140":{"position":[[59,8]]},"2725":{"position":[[638,8],[853,8],[2295,8]]},"3452":{"position":[[3979,10]]},"3916":{"position":[[6975,10]]},"3966":{"position":[[588,8]]}}}],["validateaudi",{"_index":985,"t":{"127":{"position":[[1016,16]]},"3039":{"position":[[175,16]]},"3041":{"position":[[227,16]]}}}],["validateissu",{"_index":981,"t":{"127":{"position":[[927,14]]},"3039":{"position":[[110,14]]},"3041":{"position":[[138,14]]}}}],["validateissuersigningkey",{"_index":976,"t":{"127":{"position":[[809,24]]},"3039":{"position":[[16,24]]},"3041":{"position":[[20,24]]}}}],["validatejwtbear",{"_index":10444,"t":{"4000":{"position":[[747,17]]}}}],["validatejwtbearertoken",{"_index":5991,"t":{"2142":{"position":[[28,22]]},"4000":{"position":[[224,22]]}}}],["validatelifetim",{"_index":988,"t":{"127":{"position":[[1109,16]]},"3039":{"position":[[244,15]]},"3041":{"position":[[320,16]]}}}],["validatenev",{"_index":3073,"t":{"587":{"position":[[739,13]]}}}],["validateoptionsresult",{"_index":6844,"t":{"2725":{"position":[[831,21],[972,21],[1021,21],[2273,21],[2414,21],[2463,21]]}}}],["validationattribut",{"_index":3088,"t":{"587":{"position":[[1084,19]]},"608":{"position":[[669,19]]}}}],["validationcontext",{"_index":3097,"t":{"587":{"position":[[1346,17],[1364,17],[1404,17],[1849,17],[1867,17],[1913,17]]},"599":{"position":[[389,17],[407,17],[453,17]]}}}],["validationitemmetadata",{"_index":3195,"t":{"615":{"position":[[129,22],[346,22],[524,22]]}}}],["validationmessag",{"_index":3221,"t":{"617":{"position":[[1596,17],[1636,17],[1698,17],[1744,17]]}}}],["validationmessagetyp",{"_index":3219,"t":{"617":{"position":[[1447,21],[1534,21],[1812,21]]}}}],["validationmetadata",{"_index":8583,"t":{"3708":{"position":[[2042,18]]},"3716":{"position":[[484,18]]},"3922":{"position":[[219,18],[1543,18]]},"3930":{"position":[[33,18],[82,18]]},"3956":{"position":[[1510,18]]}}}],["validationpattern",{"_index":3178,"t":{"606":{"position":[[1059,17],[1168,17],[1277,17],[1334,17]]},"608":{"position":[[336,17],[740,17],[763,17]]},"2004":{"position":[[128,17]]}}}],["validationproblemdetail",{"_index":10341,"t":{"3994":{"position":[[864,24]]}}}],["validationresult",{"_index":3095,"t":{"587":{"position":[[1307,16],[1549,16],[1595,16],[1822,16],[1986,16]]},"599":{"position":[[362,16],[545,16]]},"1683":{"position":[[215,16]]},"2140":{"position":[[25,16]]},"3708":{"position":[[2207,16]]},"3956":{"position":[[1627,16]]}}}],["validationtyp",{"_index":3175,"t":{"606":{"position":[[552,15],[612,15],[674,15],[755,15],[822,15],[958,15],[983,15],[1089,15],[1111,15],[1198,15],[1220,15],[1313,15]]},"608":{"position":[[42,15],[169,15],[239,15],[264,15],[366,15],[391,15],[487,15],[554,15],[708,15]]},"615":{"position":[[98,14],[258,14],[1038,15]]},"617":{"position":[[11,15]]},"2004":{"position":[[51,15],[157,15],[181,15]]},"3962":{"position":[[1347,15]]},"3978":{"position":[[654,15]]},"3996":{"position":[[243,15],[1157,15]]}}}],["validationtypemessageset",{"_index":3225,"t":{"617":{"position":[[2572,29]]},"3055":{"position":[[0,29]]},"3057":{"position":[[3,29]]}}}],["validaudi",{"_index":987,"t":{"127":{"position":[[1068,13],[1397,13]]},"3039":{"position":[[216,13]]},"3041":{"position":[[279,13]]}}}],["validissu",{"_index":984,"t":{"127":{"position":[[977,11],[1385,11]]},"3039":{"position":[[149,11]]},"3041":{"position":[[188,11]]}}}],["valu",{"_index":1728,"t":{"237":{"position":[[357,5],[1086,5]]},"282":{"position":[[355,5]]},"445":{"position":[[450,5]]},"550":{"position":[[401,6]]},"587":{"position":[[1339,5],[1467,5]]},"617":{"position":[[50,5],[98,5],[154,5],[203,5],[242,5],[278,5],[313,5],[350,5],[391,5],[437,5],[485,5],[537,5],[601,5],[644,5],[687,5],[726,5],[764,5],[799,5],[833,5],[874,5],[924,5],[970,5],[1013,5],[1054,5],[1089,5],[1122,5],[1157,5],[1197,5],[1235,5],[1270,5],[1307,5],[1343,5]]},"747":{"position":[[933,5]]},"810":{"position":[[25,5],[112,5],[171,5],[258,5],[344,5]]},"812":{"position":[[25,5],[120,5],[179,5],[274,5],[368,5]]},"814":{"position":[[25,5],[111,5],[170,5],[256,5],[341,5]]},"816":{"position":[[25,5],[119,5],[178,5],[272,5],[365,5]]},"866":{"position":[[253,5]]},"969":{"position":[[67,5],[160,5],[233,5],[369,5],[484,5],[568,5]]},"971":{"position":[[67,5],[160,5],[233,5],[369,5],[484,5],[568,5]]},"986":{"position":[[68,5]]},"1119":{"position":[[25,5],[112,5],[170,5],[257,5],[345,5]]},"1121":{"position":[[25,5],[120,5],[178,5],[273,5],[369,5]]},"1168":{"position":[[29,5],[114,5],[207,5],[314,5],[410,5],[514,5]]},"1170":{"position":[[80,6],[194,6],[260,6],[588,6],[707,6],[773,6]]},"1181":{"position":[[29,5],[94,5],[200,5],[307,5],[383,5],[500,5]]},"1188":{"position":[[29,5],[79,5],[141,5],[199,5],[284,5],[345,5],[418,5],[487,5]]},"1244":{"position":[[148,6]]},"1302":{"position":[[145,5],[211,5]]},"1520":{"position":[[49,5]]},"1557":{"position":[[207,5],[329,5],[393,5],[445,5],[537,5],[562,5]]},"1803":{"position":[[3805,5],[4583,5]]},"1861":{"position":[[98,5]]},"1941":{"position":[[498,6],[547,6]]},"2000":{"position":[[44,5]]},"2002":{"position":[[44,5]]},"2004":{"position":[[44,5],[121,5]]},"2023":{"position":[[67,5]]},"2065":{"position":[[119,5]]},"2199":{"position":[[118,5]]},"2345":{"position":[[256,5],[369,5]]},"2357":{"position":[[656,5],[776,5],[857,5]]},"2359":{"position":[[462,6]]},"2379":{"position":[[761,5],[842,5]]},"2383":{"position":[[233,5]]},"2472":{"position":[[156,6]]},"2713":{"position":[[1347,5],[1381,5]]},"2846":{"position":[[36,5],[220,5]]},"2848":{"position":[[1143,5],[1330,5],[1387,5],[1462,5],[1501,5],[1557,5]]},"2852":{"position":[[84,5]]},"2856":{"position":[[386,6],[421,6],[493,5],[502,5],[531,5],[540,5],[573,5],[602,5],[611,5],[640,5],[649,5],[682,5],[882,5],[910,5],[960,5],[986,5],[1120,5],[1170,5],[1196,5],[1357,5],[1378,5],[1388,5],[1410,5],[1420,5],[1468,5],[1489,5],[1499,5],[1521,5],[1531,5],[1578,5],[1593,5],[1615,5],[1665,5],[1680,5],[1702,5]]},"3194":{"position":[[737,5],[791,5]]},"3254":{"position":[[1448,5],[1618,5]]},"3269":{"position":[[478,5]]},"3275":{"position":[[373,5]]},"3452":{"position":[[2077,5],[2137,5],[2198,5],[2264,5],[2330,5],[2395,5],[2461,5],[2548,5],[2792,5]]},"3466":{"position":[[748,5],[1647,5]]},"3539":{"position":[[75,5]]},"3664":{"position":[[32,5],[486,5]]},"3750":{"position":[[172,5],[195,5],[230,5]]},"3770":{"position":[[3634,6]]},"3783":{"position":[[1325,5],[1382,5]]},"3785":{"position":[[967,6]]},"3812":{"position":[[1395,6]]},"3912":{"position":[[1639,5],[1730,5],[1774,5]]},"3916":{"position":[[5073,5],[5133,5],[5194,5],[5260,5],[5326,5],[5391,5],[5457,5],[5544,5],[5788,5]]},"3962":{"position":[[1418,5]]},"3972":{"position":[[383,5]]}}}],["value2",{"_index":8329,"t":{"3539":{"position":[[101,6],[234,6]]}}}],["valuecontrol",{"_index":4269,"t":{"1412":{"position":[[1995,15],[2146,15]]},"1414":{"position":[[452,15],[653,15],[738,15]]}}}],["valuefactori",{"_index":3466,"t":{"734":{"position":[[6357,12]]}}}],["valuegeneratedonadd",{"_index":3389,"t":{"696":{"position":[[4596,19]]}}}],["valueproviderfactori",{"_index":5856,"t":{"1919":{"position":[[305,22],[338,22],[426,22],[573,22]]}}}],["valuescontrol",{"_index":8358,"t":{"3575":{"position":[[684,16],[779,16]]},"3581":{"position":[[474,16],[559,16]]},"3583":{"position":[[675,16],[761,16]]}}}],["valuetask",{"_index":3005,"t":{"572":{"position":[[742,9]]},"927":{"position":[[488,9],[1412,9]]},"929":{"position":[[1224,9],[1729,9],[2459,9],[2948,9],[3445,9],[3944,9]]},"931":{"position":[[421,9],[837,9]]},"1799":{"position":[[386,9],[560,9]]},"1801":{"position":[[2187,9],[2223,9],[2883,9]]},"1803":{"position":[[4149,9],[4185,9],[4855,9]]}}}],["valuetupl",{"_index":9474,"t":{"3932":{"position":[[272,10],[2209,10]]}}}],["valuetyp",{"_index":8200,"t":{"3452":{"position":[[2053,9],[2114,9],[2174,9],[2240,9],[2306,9],[2372,9],[2438,9]]},"3916":{"position":[[5049,9],[5110,9],[5170,9],[5236,9],[5302,9],[5368,9],[5434,9]]}}}],["var",{"_index":41,"t":{"3":{"position":[[320,3],[439,3],[571,3],[856,3]]},"19":{"position":[[120,3],[313,3],[387,3],[521,3]]},"28":{"position":[[154,3]]},"34":{"position":[[0,3]]},"40":{"position":[[0,3],[50,3]]},"42":{"position":[[0,3],[51,3]]},"112":{"position":[[549,3],[639,3],[716,3],[755,3],[811,3],[884,3],[952,3],[1033,3],[1147,3],[1212,3],[1304,3],[1349,3],[1413,3],[1498,3]]},"127":{"position":[[1775,3]]},"133":{"position":[[949,3]]},"135":{"position":[[399,3],[491,3]]},"144":{"position":[[105,3],[266,3]]},"150":{"position":[[18,3]]},"152":{"position":[[262,3],[536,3]]},"188":{"position":[[635,3]]},"235":{"position":[[68,3]]},"237":{"position":[[157,3],[246,3],[1132,3]]},"253":{"position":[[329,3],[558,3],[689,3]]},"272":{"position":[[91,3],[131,3],[168,3],[212,3]]},"280":{"position":[[140,3],[179,3],[221,3],[249,3]]},"282":{"position":[[246,3]]},"284":{"position":[[82,3],[146,3],[272,3],[333,3]]},"286":{"position":[[106,3],[147,3],[196,3]]},"288":{"position":[[139,3],[464,3]]},"290":{"position":[[143,3]]},"319":{"position":[[211,3],[519,3]]},"369":{"position":[[663,3]]},"439":{"position":[[84,3],[155,3]]},"441":{"position":[[286,3],[352,3],[427,3],[516,3]]},"447":{"position":[[85,3],[169,3]]},"453":{"position":[[94,3],[233,3],[284,3]]},"455":{"position":[[723,3],[902,3]]},"461":{"position":[[635,3]]},"472":{"position":[[15,3],[57,3]]},"474":{"position":[[17,3],[89,3]]},"476":{"position":[[17,3],[91,3]]},"478":{"position":[[20,3],[104,3]]},"480":{"position":[[67,3],[125,3],[178,3],[230,3],[282,3],[342,3],[397,3],[467,3],[515,3],[558,3],[600,3],[642,3],[692,3],[737,3]]},"490":{"position":[[8,3],[212,3]]},"492":{"position":[[428,3]]},"494":{"position":[[8,3],[58,3],[106,3],[149,3],[191,3],[233,3],[283,3],[328,3],[401,3],[455,3],[531,3],[616,3],[704,3],[758,3],[841,3]]},"526":{"position":[[295,3]]},"528":{"position":[[487,3],[544,3]]},"530":{"position":[[480,3],[523,3],[573,3],[624,3],[687,3]]},"550":{"position":[[0,3],[60,3],[131,3],[199,3],[226,3],[334,3],[485,3]]},"552":{"position":[[80,3],[118,3],[159,3],[206,3],[253,3],[300,3],[356,3],[412,3],[468,3]]},"556":{"position":[[0,3],[90,3],[208,3]]},"558":{"position":[[0,3],[158,3],[238,3],[286,3],[329,3]]},"560":{"position":[[0,3],[40,3],[119,3],[183,3],[247,3],[315,3],[402,3]]},"570":{"position":[[731,3],[862,3],[1090,3],[1194,3],[1230,3],[1304,3],[1366,3],[1422,3],[1490,3],[1520,3],[1558,3]]},"572":{"position":[[499,3],[567,3],[617,3],[944,3],[1012,3],[1062,3]]},"587":{"position":[[1385,3],[1438,3],[1899,3]]},"599":{"position":[[439,3]]},"645":{"position":[[0,3]]},"647":{"position":[[25,3],[76,3],[135,3],[206,3]]},"730":{"position":[[227,3]]},"732":{"position":[[150,3]]},"769":{"position":[[442,3],[506,3]]},"810":{"position":[[21,3],[108,3],[167,3],[254,3],[340,3]]},"812":{"position":[[21,3],[116,3],[175,3],[270,3],[364,3]]},"814":{"position":[[21,3],[107,3],[166,3],[252,3],[337,3]]},"816":{"position":[[21,3],[115,3],[174,3],[268,3],[361,3]]},"834":{"position":[[73,3]]},"846":{"position":[[723,3]]},"853":{"position":[[7,3],[62,3],[139,3],[244,3],[392,3],[479,3]]},"855":{"position":[[7,3]]},"857":{"position":[[7,3]]},"860":{"position":[[0,3]]},"862":{"position":[[0,3]]},"866":{"position":[[7,3],[95,3],[289,3]]},"868":{"position":[[0,3]]},"871":{"position":[[7,3],[72,3]]},"873":{"position":[[7,3],[82,3]]},"875":{"position":[[7,3]]},"877":{"position":[[2242,3],[2352,3]]},"881":{"position":[[7,3],[176,3],[275,3]]},"883":{"position":[[7,3],[55,3],[103,3],[213,3]]},"885":{"position":[[70,3]]},"889":{"position":[[677,3]]},"905":{"position":[[24,3],[128,3],[233,3]]},"907":{"position":[[24,3],[122,3],[221,3]]},"909":{"position":[[24,3],[117,3],[211,3]]},"933":{"position":[[559,3],[610,3],[746,3]]},"954":{"position":[[25,3],[65,3],[114,3],[181,3],[232,3],[292,3]]},"956":{"position":[[25,3],[89,3],[162,3],[225,3],[297,3],[359,3],[430,3],[503,3],[575,3],[656,3],[728,3],[826,3],[901,3],[985,3],[1059,3],[1142,3],[1215,3],[1297,3],[1381,3],[1464,3],[1556,3],[1639,3]]},"958":{"position":[[25,3],[67,3],[117,3],[164,3],[212,3]]},"960":{"position":[[7,3],[62,3],[190,3],[412,3],[523,3],[756,3],[869,3],[1087,3],[1210,3],[1519,3],[1630,3],[1703,3]]},"962":{"position":[[25,3],[94,3],[186,3],[266,3]]},"965":{"position":[[25,3],[65,3],[119,3],[168,3],[239,3],[319,3],[370,3],[435,3],[495,3],[577,3]]},"967":{"position":[[25,3],[64,3],[117,3],[179,3],[244,3],[323,3],[373,3],[437,3],[510,3],[586,3]]},"969":{"position":[[25,3],[63,3],[109,3],[156,3],[229,3],[316,3],[365,3],[422,3],[480,3],[564,3]]},"971":{"position":[[25,3],[63,3],[109,3],[156,3],[229,3],[316,3],[365,3],[422,3],[480,3],[564,3]]},"973":{"position":[[25,3],[80,3],[140,3],[221,3],[287,3],[358,3]]},"975":{"position":[[25,3],[84,3],[148,3],[233,3],[303,3],[378,3]]},"977":{"position":[[0,3],[45,3],[89,3]]},"988":{"position":[[496,3]]},"1024":{"position":[[107,3]]},"1026":{"position":[[9,3],[54,3],[109,3]]},"1029":{"position":[[0,3]]},"1031":{"position":[[23,3],[110,3]]},"1033":{"position":[[0,3]]},"1037":{"position":[[33,3],[131,3],[230,3]]},"1039":{"position":[[480,3],[523,3],[573,3],[624,3],[688,3]]},"1109":{"position":[[856,3],[925,3]]},"1111":{"position":[[21,3],[114,3],[179,3],[272,3],[366,3]]},"1113":{"position":[[21,3],[114,3],[177,3],[270,3],[364,3]]},"1115":{"position":[[21,3],[117,3],[177,3],[273,3],[370,3]]},"1117":{"position":[[87,3],[169,3],[263,3],[367,3],[481,3],[605,3],[739,3],[883,3],[1114,3],[1164,3],[1223,3],[1289,3],[1362,3],[1442,3],[1529,3],[1623,3],[1772,3],[1857,3],[1954,3],[2061,3],[2178,3],[2305,3],[2442,3],[2589,3],[2805,3],[2890,3],[2987,3],[3094,3],[3211,3],[3338,3],[3475,3],[3622,3],[3839,3],[3907,3],[3987,3],[4077,3],[4177,3],[4287,3],[4407,3],[4537,3]]},"1119":{"position":[[21,3],[108,3],[166,3],[253,3],[341,3]]},"1121":{"position":[[21,3],[116,3],[174,3],[269,3],[365,3]]},"1129":{"position":[[624,3],[676,3],[719,3],[1614,3],[1666,3],[1709,3]]},"1160":{"position":[[25,3],[83,3],[176,3],[321,3],[452,3],[586,3],[660,3],[743,3],[898,3],[967,3],[1071,3],[1227,3],[1369,3],[1514,3],[1599,3],[1693,3]]},"1162":{"position":[[25,3],[89,3],[188,3],[339,3],[476,3],[616,3],[696,3],[785,3],[946,3],[1021,3],[1131,3],[1293,3],[1441,3],[1592,3],[1683,3],[1783,3]]},"1164":{"position":[[25,3],[109,3],[261,3],[430,3],[525,3],[688,3]]},"1166":{"position":[[25,3],[137,3],[317,3],[553,3],[676,3],[867,3]]},"1168":{"position":[[25,3],[110,3],[203,3],[310,3],[406,3],[510,3]]},"1170":{"position":[[25,3],[137,3],[319,3],[424,3],[527,3],[650,3],[837,3],[953,3]]},"1173":{"position":[[25,3],[81,3],[149,3],[245,3],[312,3],[391,3]]},"1175":{"position":[[25,3],[87,3],[161,3],[263,3],[336,3],[421,3]]},"1177":{"position":[[25,3],[81,3],[149,3],[245,3],[312,3],[391,3]]},"1179":{"position":[[25,3],[89,3],[184,3],[303,3],[466,3],[541,3],[647,3],[777,3]]},"1181":{"position":[[25,3],[90,3],[196,3],[303,3],[379,3],[496,3]]},"1183":{"position":[[25,3],[91,3],[196,3],[278,3],[366,3],[443,3],[559,3],[652,3]]},"1188":{"position":[[25,3],[75,3],[137,3],[195,3],[280,3],[341,3],[414,3],[483,3]]},"1190":{"position":[[25,3],[78,3],[143,3],[202,3],[291,3],[355,3],[431,3],[501,3]]},"1192":{"position":[[0,3]]},"1194":{"position":[[62,3],[133,3],[235,3],[312,3]]},"1196":{"position":[[37,3]]},"1198":{"position":[[46,3]]},"1204":{"position":[[0,3],[83,3]]},"1212":{"position":[[77,3],[168,3]]},"1231":{"position":[[0,3]]},"1295":{"position":[[8,3],[88,3]]},"1297":{"position":[[0,3]]},"1366":{"position":[[26,3]]},"1368":{"position":[[606,3]]},"1408":{"position":[[930,3]]},"1410":{"position":[[955,3]]},"1412":{"position":[[1241,3],[1315,3],[1462,3],[1548,3]]},"1418":{"position":[[138,3]]},"1424":{"position":[[1084,3],[1313,3],[1543,3],[1595,3]]},"1428":{"position":[[66,3],[135,3]]},"1434":{"position":[[6,3],[49,3],[99,3],[150,3],[214,3],[261,3]]},"1436":{"position":[[6,3],[53,3]]},"1438":{"position":[[77,3]]},"1483":{"position":[[199,3],[491,3]]},"1485":{"position":[[153,3],[213,3],[234,3]]},"1555":{"position":[[563,3],[617,3]]},"1557":{"position":[[43,3],[886,3],[932,3]]},"1559":{"position":[[14,3],[59,3]]},"1561":{"position":[[49,3],[112,3]]},"1566":{"position":[[936,3],[970,3]]},"1665":{"position":[[252,3]]},"1667":{"position":[[398,3]]},"1677":{"position":[[16,3],[66,3],[167,3],[251,3]]},"1679":{"position":[[15,3],[77,3]]},"1681":{"position":[[14,3],[73,3],[128,3]]},"1683":{"position":[[0,3],[129,3],[190,3]]},"1685":{"position":[[41,3],[97,3]]},"1687":{"position":[[13,3],[125,3],[189,3]]},"1689":{"position":[[99,3],[132,3],[182,3],[258,3],[341,3],[418,3],[535,3],[571,3],[625,3],[737,3],[784,3]]},"1691":{"position":[[79,3],[318,3],[346,3],[387,3],[466,3],[504,3],[590,3],[617,3]]},"1711":{"position":[[388,3],[426,3],[496,3],[571,3]]},"1726":{"position":[[40,3],[121,3]]},"1729":{"position":[[213,3]]},"1731":{"position":[[0,3],[25,3],[96,3]]},"1741":{"position":[[189,3],[357,3],[404,3],[456,3],[546,3],[626,3],[693,3],[998,3],[1169,3],[1238,3],[1305,3],[1386,3],[1453,3],[1851,3],[2067,3],[2141,3],[2222,3],[2289,3]]},"1743":{"position":[[117,3],[153,3],[189,3],[426,3]]},"1755":{"position":[[793,3]]},"1795":{"position":[[351,3],[613,3],[854,3],[1210,3],[1624,3],[1843,3]]},"1799":{"position":[[832,3]]},"1801":{"position":[[1121,3],[1507,3],[1623,3],[1757,3],[2524,3],[2967,3],[3226,3],[3352,3]]},"1803":{"position":[[1373,3],[1492,3],[3315,3],[3726,3],[4462,3],[4939,3],[5209,3],[5373,3],[5565,3]]},"1811":{"position":[[514,3],[558,3]]},"1823":{"position":[[511,3]]},"1861":{"position":[[94,3]]},"1913":{"position":[[467,3],[557,3],[632,3],[688,3]]},"1919":{"position":[[301,3],[395,3],[656,3]]},"1925":{"position":[[397,3],[487,3],[565,3],[604,3],[660,3],[733,3],[801,3],[895,3],[1009,3],[1074,3],[1166,3],[1211,3],[1275,3],[1360,3]]},"1933":{"position":[[456,3],[509,3],[573,3]]},"1941":{"position":[[432,3],[467,3],[520,3],[565,3],[1029,3],[1074,3]]},"1951":{"position":[[373,3],[418,3],[477,3]]},"1991":{"position":[[0,3],[106,3]]},"1995":{"position":[[79,3]]},"1998":{"position":[[0,3]]},"2000":{"position":[[0,3]]},"2002":{"position":[[0,3]]},"2004":{"position":[[0,3],[76,3]]},"2014":{"position":[[0,3],[106,3]]},"2018":{"position":[[79,3]]},"2021":{"position":[[0,3]]},"2023":{"position":[[24,3],[63,3],[120,3]]},"2025":{"position":[[0,3]]},"2027":{"position":[[0,3]]},"2029":{"position":[[0,3]]},"2031":{"position":[[0,3]]},"2033":{"position":[[0,3],[46,3]]},"2035":{"position":[[0,3],[67,3]]},"2037":{"position":[[0,3],[60,3],[129,3],[198,3]]},"2039":{"position":[[0,3],[60,3],[128,3]]},"2043":{"position":[[0,3]]},"2045":{"position":[[0,3]]},"2047":{"position":[[0,3]]},"2049":{"position":[[0,3]]},"2051":{"position":[[0,3]]},"2053":{"position":[[0,3]]},"2055":{"position":[[12,3],[81,3],[153,3],[225,3]]},"2057":{"position":[[10,3],[86,3],[171,3],[261,3]]},"2059":{"position":[[0,3]]},"2065":{"position":[[33,3],[115,3]]},"2069":{"position":[[0,3]]},"2071":{"position":[[0,3]]},"2073":{"position":[[0,3]]},"2075":{"position":[[0,3]]},"2079":{"position":[[0,3]]},"2081":{"position":[[0,3]]},"2083":{"position":[[0,3]]},"2090":{"position":[[0,3]]},"2092":{"position":[[0,3]]},"2094":{"position":[[0,3]]},"2098":{"position":[[33,3],[85,3]]},"2103":{"position":[[0,3]]},"2105":{"position":[[0,3]]},"2107":{"position":[[0,3]]},"2109":{"position":[[0,3]]},"2111":{"position":[[0,3]]},"2113":{"position":[[0,3]]},"2115":{"position":[[0,3]]},"2117":{"position":[[0,3],[61,3]]},"2119":{"position":[[0,3]]},"2121":{"position":[[0,3],[64,3]]},"2123":{"position":[[0,3]]},"2125":{"position":[[0,3]]},"2127":{"position":[[0,3]]},"2129":{"position":[[0,3]]},"2132":{"position":[[18,3],[122,3],[228,3],[347,3]]},"2134":{"position":[[0,3]]},"2136":{"position":[[0,3]]},"2140":{"position":[[0,3]]},"2142":{"position":[[0,3]]},"2144":{"position":[[0,3],[74,3]]},"2147":{"position":[[0,3]]},"2149":{"position":[[0,3]]},"2153":{"position":[[0,3]]},"2155":{"position":[[0,3]]},"2165":{"position":[[0,3],[59,3]]},"2167":{"position":[[15,3],[54,3],[99,3],[138,3],[191,3],[238,3],[297,3],[343,3],[413,3]]},"2171":{"position":[[10,3],[65,3]]},"2177":{"position":[[0,3]]},"2179":{"position":[[0,3]]},"2182":{"position":[[42,3],[143,3]]},"2184":{"position":[[45,3],[148,3]]},"2186":{"position":[[45,3],[102,3]]},"2188":{"position":[[45,3],[105,3]]},"2199":{"position":[[114,3]]},"2204":{"position":[[0,3]]},"2220":{"position":[[0,3]]},"2222":{"position":[[0,3]]},"2224":{"position":[[0,3]]},"2235":{"position":[[190,3]]},"2237":{"position":[[154,3]]},"2239":{"position":[[47,3]]},"2243":{"position":[[22,3],[159,3],[227,3]]},"2249":{"position":[[8,3],[66,3]]},"2251":{"position":[[8,3],[67,3]]},"2255":{"position":[[290,3],[356,3],[616,3],[687,3]]},"2261":{"position":[[11,3]]},"2315":{"position":[[64,3],[262,3]]},"2331":{"position":[[12,3],[52,3],[422,3],[493,3],[538,3],[573,3],[619,3]]},"2333":{"position":[[68,3],[144,3]]},"2352":{"position":[[28,3],[73,3],[356,3]]},"2354":{"position":[[125,3]]},"2460":{"position":[[0,3]]},"2462":{"position":[[0,3]]},"2464":{"position":[[0,3]]},"2476":{"position":[[68,3],[118,3],[169,3],[233,3],[280,3]]},"2478":{"position":[[178,3],[228,3],[279,3],[343,3],[390,3]]},"2482":{"position":[[328,3]]},"2484":{"position":[[428,3]]},"2530":{"position":[[9,3],[46,3],[93,3]]},"2538":{"position":[[320,3],[402,3],[507,3],[584,3]]},"2577":{"position":[[45,3],[146,3]]},"2579":{"position":[[318,3],[419,3]]},"2589":{"position":[[465,3],[526,3]]},"2591":{"position":[[60,3],[137,3]]},"2607":{"position":[[0,3],[60,3],[189,3],[280,3],[433,3],[493,3],[612,3],[692,3]]},"2609":{"position":[[81,3]]},"2674":{"position":[[0,3],[59,3]]},"2684":{"position":[[36,3],[69,3]]},"2688":{"position":[[0,3],[33,3]]},"2692":{"position":[[72,3]]},"2694":{"position":[[63,3],[210,3]]},"2713":{"position":[[685,3],[1462,3],[1544,3],[1626,3],[1958,3],[2007,3],[2089,3],[2146,3],[2228,3],[2284,3]]},"2729":{"position":[[529,3],[564,3]]},"2776":{"position":[[480,3],[586,3]]},"2825":{"position":[[328,3]]},"2827":{"position":[[474,3]]},"2829":{"position":[[562,3],[643,3]]},"2831":{"position":[[476,3],[517,3],[567,3],[618,3],[682,3]]},"2846":{"position":[[32,3],[94,3]]},"2848":{"position":[[912,3],[971,3],[1034,3],[1458,3]]},"2852":{"position":[[80,3]]},"2856":{"position":[[550,3],[659,3]]},"2862":{"position":[[235,3],[285,3]]},"2899":{"position":[[169,3]]},"2937":{"position":[[994,3],[1048,3],[1217,3]]},"2971":{"position":[[289,3],[359,3]]},"3075":{"position":[[61,3],[163,3]]},"3126":{"position":[[430,3]]},"3158":{"position":[[543,3]]},"3164":{"position":[[0,3]]},"3166":{"position":[[64,3],[108,3]]},"3170":{"position":[[88,3],[174,3]]},"3215":{"position":[[211,3]]},"3218":{"position":[[13,3]]},"3220":{"position":[[56,3]]},"3222":{"position":[[13,3],[116,3],[188,3]]},"3224":{"position":[[265,3],[302,3],[373,3],[426,3],[460,3],[513,3],[570,3],[654,3],[951,3],[1137,3]]},"3226":{"position":[[339,3],[388,3]]},"3228":{"position":[[267,3]]},"3232":{"position":[[0,3],[109,3]]},"3234":{"position":[[538,3]]},"3236":{"position":[[382,3]]},"3258":{"position":[[61,3],[134,3],[267,3],[577,3]]},"3261":{"position":[[7,3],[62,3],[123,3],[197,3],[280,3],[346,3],[403,3],[473,3]]},"3263":{"position":[[0,3]]},"3265":{"position":[[56,3]]},"3267":{"position":[[160,3]]},"3269":{"position":[[39,3],[113,3],[243,3],[358,3]]},"3273":{"position":[[8,3],[107,3],[281,3],[386,3],[432,3],[493,3]]},"3287":{"position":[[266,3],[591,3]]},"3291":{"position":[[32,3],[313,3],[483,3],[624,3],[687,3],[967,3],[1091,3],[1359,3],[1509,3],[1608,3],[1744,3],[1848,3]]},"3373":{"position":[[544,3]]},"3397":{"position":[[735,3],[779,3]]},"3399":{"position":[[397,3],[514,3],[541,3],[725,3],[771,3],[869,3]]},"3424":{"position":[[43,3],[98,3]]},"3430":{"position":[[804,3],[2096,3],[3286,3]]},"3432":{"position":[[3255,3]]},"3434":{"position":[[2339,3]]},"3450":{"position":[[166,3]]},"3452":{"position":[[944,3]]},"3454":{"position":[[181,3]]},"3464":{"position":[[59,3]]},"3466":{"position":[[93,3],[239,3],[404,3],[516,3],[744,3],[1063,3],[1591,3]]},"3483":{"position":[[840,3],[884,3],[946,3],[1010,3],[1072,3],[1140,3],[1206,3]]},"3486":{"position":[[13,3],[89,3],[166,3],[244,3],[327,3],[407,3],[485,3]]},"3520":{"position":[[146,3],[210,3],[292,3],[365,3]]},"3522":{"position":[[192,3],[336,3],[529,3],[708,3],[942,3],[1272,3],[1436,3]]},"3524":{"position":[[44,3]]},"3526":{"position":[[14,3]]},"3528":{"position":[[30,3]]},"3530":{"position":[[32,3]]},"3532":{"position":[[75,3]]},"3575":{"position":[[546,3],[928,3]]},"3595":{"position":[[151,3]]},"3597":{"position":[[73,3],[182,3],[374,3],[462,3]]},"3603":{"position":[[39,3],[98,3],[259,3],[298,3]]},"3680":{"position":[[236,3],[393,3]]},"3686":{"position":[[1033,3],[1119,3]]},"3704":{"position":[[154,3],[317,3],[639,3]]},"3734":{"position":[[286,3],[381,3]]},"3736":{"position":[[0,3]]},"3738":{"position":[[0,3],[66,3]]},"3740":{"position":[[118,3],[194,3],[481,3],[557,3]]},"3744":{"position":[[22,3]]},"3746":{"position":[[0,3]]},"3748":{"position":[[0,3]]},"3750":{"position":[[241,3],[289,3],[347,3]]},"3754":{"position":[[45,3],[112,3],[166,3],[255,3]]},"3770":{"position":[[1518,3],[1553,3],[2969,3],[3004,3],[4834,3],[4869,3]]},"3779":{"position":[[231,3],[292,3],[374,3],[483,3],[589,3],[943,3],[1387,3]]},"3781":{"position":[[92,3]]},"3783":{"position":[[292,3],[327,3],[1255,3],[1321,3],[1378,3]]},"3785":{"position":[[58,3],[405,3],[543,3],[685,3],[1424,3]]},"3791":{"position":[[1059,3],[1110,3],[1857,3]]},"3795":{"position":[[300,3]]},"3802":{"position":[[235,3],[312,3],[410,3],[533,3],[645,3],[1292,3],[2009,3]]},"3804":{"position":[[132,3],[203,3],[280,3],[452,3],[517,3],[588,3],[681,3],[742,3],[803,3],[865,3],[928,3],[992,3],[1058,3]]},"3810":{"position":[[95,3]]},"3812":{"position":[[60,3],[683,3],[819,3],[959,3],[2320,3]]},"3817":{"position":[[272,3],[544,3],[1592,3],[2607,3]]},"3819":{"position":[[67,3],[222,3],[299,3],[1054,3],[1311,3]]},"3821":{"position":[[64,3]]},"3824":{"position":[[196,3]]},"3836":{"position":[[51,3],[146,3],[220,3],[268,3]]},"3838":{"position":[[51,3],[172,3],[272,3],[334,3]]},"3840":{"position":[[83,3],[144,3],[180,3]]},"3842":{"position":[[105,3],[176,3],[645,3],[767,3],[1254,3],[1354,3],[1828,3],[1936,3],[2431,3],[2558,3],[3064,3],[3183,3]]},"3844":{"position":[[105,3],[179,3],[740,3],[1196,3],[1341,3],[1413,3]]},"3846":{"position":[[121,3],[186,3],[377,3]]},"3848":{"position":[[0,3],[71,3]]},"3862":{"position":[[83,3],[144,3],[180,3]]},"3864":{"position":[[50,3]]},"3866":{"position":[[0,3]]},"3868":{"position":[[0,3]]},"3870":{"position":[[0,3]]},"3872":{"position":[[0,3]]},"3882":{"position":[[82,3],[146,3]]},"3884":{"position":[[83,3],[144,3],[175,3]]},"3886":{"position":[[82,3],[148,3]]},"3888":{"position":[[108,3],[173,3]]},"3890":{"position":[[0,3]]},"3892":{"position":[[82,3]]},"3896":{"position":[[0,3]]},"3912":{"position":[[1635,3],[1726,3]]},"3914":{"position":[[1793,3],[1941,3]]},"3916":{"position":[[3940,3],[7097,3],[7158,3],[7343,3],[7438,3],[7499,3],[7600,3],[7702,3],[7763,3],[7995,3],[8090,3],[8151,3],[8291,3],[8403,3],[8464,3],[8508,3],[8614,3],[8759,3],[8966,3]]},"3918":{"position":[[2050,3],[2214,3],[2853,3],[2922,3]]},"3924":{"position":[[3688,3],[3851,3],[4179,3]]},"3932":{"position":[[2473,3],[2583,3]]},"3936":{"position":[[1235,3],[1883,3]]},"3940":{"position":[[805,3],[857,3]]}}}],["vben",{"_index":1500,"t":{"199":{"position":[[639,4]]}}}],["vboot",{"_index":1499,"t":{"199":{"position":[[620,5]]}}}],["vdb1",{"_index":4465,"t":{"1488":{"position":[[945,4]]},"1495":{"position":[[889,4]]}}}],["ve",{"_index":6670,"t":{"2559":{"position":[[2394,2]]}}}],["ventiti",{"_index":4138,"t":{"1366":{"position":[[30,9]]}}}],["verbtohttpmethod",{"_index":5162,"t":{"1631":{"position":[[477,17]]},"1661":{"position":[[848,17],[1256,17]]},"3023":{"position":[[845,17],[1253,17]]}}}],["verif",{"_index":5765,"t":{"1887":{"position":[[382,12]]}}}],["version",{"_index":2527,"t":{"433":{"position":[[34,7]]},"435":{"position":[[374,7],[777,7]]},"441":{"position":[[133,7]]},"445":{"position":[[383,7]]},"453":{"position":[[288,7],[320,7]]},"722":{"position":[[41,7]]},"1286":{"position":[[224,7]]},"1488":{"position":[[83,7],[123,7],[155,7],[900,7]]},"1495":{"position":[[83,7],[123,7],[155,7],[844,7]]},"1520":{"position":[[284,7],[296,7]]},"1535":{"position":[[161,7],[176,7],[448,7]]},"1539":{"position":[[91,7],[744,7],[776,7]]},"1543":{"position":[[252,7],[347,7]]},"1549":{"position":[[162,7]]},"1551":{"position":[[322,7],[337,7],[1071,7],[1189,7]]},"1557":{"position":[[372,7],[526,7]]},"1559":{"position":[[18,7]]},"1619":{"position":[[359,7]]},"1621":{"position":[[841,7]]},"1641":{"position":[[202,7]]},"1655":{"position":[[0,7],[139,7],[259,7]]},"1755":{"position":[[86,7]]},"1801":{"position":[[136,7]]},"1803":{"position":[[59,7]]},"1941":{"position":[[813,7],[868,7]]},"2707":{"position":[[34,7]]},"2709":{"position":[[165,7]]},"2713":{"position":[[788,7],[1510,7],[1592,7],[1674,7],[2055,7],[2194,7],[2332,7]]},"2721":{"position":[[286,7],[482,7],[720,7],[934,7]]},"2725":{"position":[[485,7],[928,7],[1418,7],[2035,7],[2370,7]]},"2727":{"position":[[455,7],[657,7]]},"2729":{"position":[[392,7],[568,7],[586,7]]},"2735":{"position":[[142,7],[289,7]]},"2749":{"position":[[354,7]]},"3063":{"position":[[1614,7]]},"3065":{"position":[[125,7]]},"3080":{"position":[[922,7]]},"3452":{"position":[[2670,7]]},"3642":{"position":[[199,7]]},"3706":{"position":[[1625,7],[1873,7]]},"3916":{"position":[[5666,7]]},"3936":{"position":[[1601,7],[1760,7]]}}}],["versionhandl",{"_index":4972,"t":{"1539":{"position":[[839,14],[1764,14]]}}}],["versionsepar",{"_index":5196,"t":{"1661":{"position":[[347,16]]},"3023":{"position":[[344,16]]}}}],["vi",{"_index":6699,"t":{"2559":{"position":[[2732,2],[2738,2]]}}}],["video",{"_index":1963,"t":{"298":{"position":[[30,5]]},"314":{"position":[[218,5]]},"606":{"position":[[471,5]]},"617":{"position":[[1297,5],[1322,5]]},"675":{"position":[[30,5]]},"3335":{"position":[[30,5]]}}}],["view",{"_index":1734,"t":{"237":{"position":[[635,4]]},"423":{"position":[[202,4]]},"461":{"position":[[161,4]]},"627":{"position":[[213,4]]},"1362":{"position":[[7,4]]},"1503":{"position":[[90,4]]},"1572":{"position":[[298,4]]},"1947":{"position":[[215,4]]},"1965":{"position":[[87,4]]},"2235":{"position":[[228,4]]},"2555":{"position":[[254,4]]},"2557":{"position":[[121,4]]},"2573":{"position":[[275,4]]},"2856":{"position":[[2070,4]]},"2905":{"position":[[59,5]]},"3138":{"position":[[237,4]]},"3162":{"position":[[372,4]]},"3189":{"position":[[495,4]]},"3966":{"position":[[1861,4]]}}}],["viewbag",{"_index":5874,"t":{"1939":{"position":[[31,7]]},"1941":{"position":[[805,7]]}}}],["viewdata",{"_index":5875,"t":{"1939":{"position":[[39,8]]},"1941":{"position":[[824,8],[858,8]]},"2551":{"position":[[246,8]]}}}],["viewengin",{"_index":8615,"t":{"3734":{"position":[[67,10],[197,10],[246,10],[261,10],[274,10],[300,10]]},"3736":{"position":[[14,10]]},"3738":{"position":[[14,10]]},"3740":{"position":[[132,10],[495,10]]},"3744":{"position":[[36,10],[113,10],[233,10]]},"3746":{"position":[[14,10],[81,10],[232,10]]},"3748":{"position":[[14,10]]},"3750":{"position":[[305,10]]}}}],["viewenginemodel",{"_index":8630,"t":{"3750":{"position":[[20,15],[66,15]]}}}],["viewengineservic",{"_index":8616,"t":{"3734":{"position":[[123,17],[216,17]]}}}],["viewmodel",{"_index":1888,"t":{"263":{"position":[[29,9]]}}}],["vieword",{"_index":7630,"t":{"3218":{"position":[[215,9]]}}}],["viewresult",{"_index":5884,"t":{"1941":{"position":[[661,10],[672,10],[737,10],[847,10]]}}}],["vim",{"_index":1224,"t":{"174":{"position":[[0,3]]},"1483":{"position":[[596,3]]}}}],["virtual",{"_index":3374,"t":{"696":{"position":[[1754,7],[1795,7]]},"877":{"position":[[591,7],[668,7]]},"1775":{"position":[[3726,7],[3763,7]]},"1803":{"position":[[2201,7]]},"3189":{"position":[[157,7]]},"4000":{"position":[[831,7]]}}}],["virtualpath",{"_index":7295,"t":{"2981":{"position":[[510,11]]},"3343":{"position":[[44,11]]},"3912":{"position":[[2236,11]]}}}],["visibl",{"_index":7336,"t":{"3063":{"position":[[1529,7]]},"3658":{"position":[[19,7],[158,7]]},"3706":{"position":[[1540,7]]}}}],["visual",{"_index":168,"t":{"11":{"position":[[711,6],[796,6]]},"51":{"position":[[25,6],[162,6],[212,6],[266,6]]},"62":{"position":[[25,6],[162,6],[212,6],[266,6]]},"75":{"position":[[25,6],[162,6],[212,6],[266,6]]},"100":{"position":[[0,6]]},"104":{"position":[[12,6]]},"174":{"position":[[11,6],[41,6]]},"190":{"position":[[500,6]]},"498":{"position":[[44,6]]},"675":{"position":[[306,6]]},"893":{"position":[[44,6]]},"1313":{"position":[[281,6]]},"1377":{"position":[[12,6]]},"1971":{"position":[[42,6]]},"1973":{"position":[[3,6]]},"1981":{"position":[[24,6]]},"1985":{"position":[[42,6]]},"1987":{"position":[[3,6]]},"1993":{"position":[[24,6]]},"2008":{"position":[[42,6]]},"2010":{"position":[[3,6]]},"2016":{"position":[[24,6]]},"2294":{"position":[[740,6],[844,6]]},"2497":{"position":[[276,6]]},"2506":{"position":[[3,6]]},"2646":{"position":[[24,6]]},"2811":{"position":[[3,6]]},"2836":{"position":[[724,6]]},"2864":{"position":[[3,6]]},"3301":{"position":[[0,6]]},"3305":{"position":[[29,6]]},"3309":{"position":[[0,6]]},"3323":{"position":[[429,6]]},"3327":{"position":[[14,6]]},"3407":{"position":[[0,6]]},"3636":{"position":[[691,6]]},"3930":{"position":[[1515,6]]},"3934":{"position":[[2668,6]]}}}],["visualbas",{"_index":7921,"t":{"3329":{"position":[[220,11]]}}}],["visualstudio",{"_index":414,"t":{"51":{"position":[[105,12]]},"62":{"position":[[105,12]]},"75":{"position":[[105,12]]},"1483":{"position":[[262,12]]},"2510":{"position":[[69,12]]},"3291":{"position":[[268,12]]},"3329":{"position":[[293,12]]},"3934":{"position":[[2744,12]]}}}],["vite",{"_index":2031,"t":{"308":{"position":[[447,4]]}}}],["vitest",{"_index":2032,"t":{"308":{"position":[[475,6]]}}}],["vitur",{"_index":10467,"t":{"4004":{"position":[[493,7]]}}}],["viusal",{"_index":7920,"t":{"3329":{"position":[[55,6]]}}}],["vn",{"_index":6701,"t":{"2559":{"position":[[2741,2]]}}}],["vnd",{"_index":8278,"t":{"3498":{"position":[[205,3]]},"3543":{"position":[[205,3]]},"3575":{"position":[[265,3]]},"3581":{"position":[[268,3]]},"3583":{"position":[[373,3]]}}}],["void",{"_index":33,"t":{"3":{"position":[[281,4]]},"188":{"position":[[608,4]]},"202":{"position":[[233,4]]},"204":{"position":[[304,4],[367,4]]},"210":{"position":[[37,4],[117,4],[366,4],[459,4],[568,4],[637,4]]},"212":{"position":[[272,4],[335,4],[561,4],[624,4]]},"216":{"position":[[314,4],[377,4],[771,4],[901,4]]},"218":{"position":[[344,4]]},"237":{"position":[[1036,4]]},"321":{"position":[[378,4]]},"338":{"position":[[276,4],[709,4]]},"340":{"position":[[263,4],[651,4],[885,4],[1112,4]]},"344":{"position":[[334,4]]},"346":{"position":[[396,4]]},"348":{"position":[[360,4]]},"353":{"position":[[252,4]]},"369":{"position":[[587,4]]},"371":{"position":[[160,4],[377,4]]},"411":{"position":[[298,4],[396,4]]},"455":{"position":[[305,4]]},"461":{"position":[[1019,4]]},"514":{"position":[[251,4]]},"518":{"position":[[353,4]]},"524":{"position":[[330,4]]},"534":{"position":[[528,4]]},"567":{"position":[[85,4],[200,4],[310,4]]},"570":{"position":[[628,4]]},"587":{"position":[[392,4]]},"595":{"position":[[191,4]]},"617":{"position":[[2367,4]]},"655":{"position":[[321,4]]},"696":{"position":[[1856,4],[2812,4],[4399,4]]},"730":{"position":[[84,4]]},"732":{"position":[[7,4]]},"734":{"position":[[7987,4]]},"747":{"position":[[773,4]]},"749":{"position":[[388,4],[734,4],[1054,4]]},"832":{"position":[[445,4]]},"844":{"position":[[464,4]]},"846":{"position":[[589,4]]},"877":{"position":[[887,4]]},"889":{"position":[[456,4]]},"915":{"position":[[104,4]]},"927":{"position":[[788,4],[1648,4],[1987,4]]},"929":{"position":[[625,4]]},"931":{"position":[[1070,4]]},"933":{"position":[[85,4],[200,4],[310,4],[456,4]]},"1041":{"position":[[410,4],[1040,4]]},"1058":{"position":[[197,4]]},"1064":{"position":[[656,4]]},"1066":{"position":[[1201,4]]},"1244":{"position":[[170,4],[246,4],[325,4]]},"1261":{"position":[[134,4],[190,4],[241,4]]},"1279":{"position":[[126,4],[536,4],[712,4],[865,4],[935,4]]},"1313":{"position":[[983,4]]},"1317":{"position":[[251,4]]},"1539":{"position":[[418,4],[606,4],[834,4],[1063,4],[1194,4],[1790,4]]},"1582":{"position":[[265,4]]},"1589":{"position":[[120,4]]},"1701":{"position":[[62,4]]},"1703":{"position":[[207,4],[384,4]]},"1711":{"position":[[286,4]]},"1779":{"position":[[368,4]]},"1781":{"position":[[220,4]]},"1801":{"position":[[3107,4]]},"1803":{"position":[[1131,4],[2057,4],[2209,4],[5085,4]]},"1823":{"position":[[677,4]]},"1843":{"position":[[191,4]]},"1867":{"position":[[534,4]]},"1907":{"position":[[75,4]]},"1953":{"position":[[332,4]]},"1977":{"position":[[133,4]]},"1979":{"position":[[377,4],[498,4]]},"2255":{"position":[[154,4]]},"2269":{"position":[[218,4]]},"2272":{"position":[[270,4],[453,4]]},"2281":{"position":[[175,4],[246,4]]},"2406":{"position":[[218,4]]},"2415":{"position":[[205,4]]},"2434":{"position":[[209,4]]},"2442":{"position":[[148,4],[317,4],[549,4],[822,4],[1105,4],[1339,4],[1596,4]]},"2470":{"position":[[98,4]]},"2478":{"position":[[98,4]]},"2519":{"position":[[29,4],[159,4]]},"2579":{"position":[[866,4]]},"2690":{"position":[[101,4]]},"2711":{"position":[[281,4]]},"2725":{"position":[[1520,4],[2137,4]]},"2727":{"position":[[547,4]]},"2729":{"position":[[133,4],[457,4],[614,4]]},"2731":{"position":[[541,4],[612,4]]},"2776":{"position":[[206,4]]},"2786":{"position":[[7,4]]},"2790":{"position":[[235,4]]},"2792":{"position":[[164,4]]},"2798":{"position":[[7,4]]},"2807":{"position":[[291,4]]},"2813":{"position":[[871,4]]},"2819":{"position":[[229,4]]},"2821":{"position":[[260,4]]},"2836":{"position":[[319,4],[1532,4]]},"2848":{"position":[[65,4],[386,4],[1281,4]]},"2879":{"position":[[534,4]]},"2881":{"position":[[669,4],[740,4]]},"2889":{"position":[[380,4],[475,4]]},"2899":{"position":[[133,4],[509,4]]},"2901":{"position":[[192,4]]},"2905":{"position":[[272,4],[328,4]]},"2927":{"position":[[209,4]]},"2935":{"position":[[571,4]]},"2937":{"position":[[668,4],[891,4]]},"2943":{"position":[[209,4]]},"2951":{"position":[[343,4]]},"2957":{"position":[[209,4]]},"3144":{"position":[[302,4],[409,4]]},"3156":{"position":[[461,4]]},"3158":{"position":[[272,4],[382,4]]},"3166":{"position":[[37,4]]},"3215":{"position":[[59,4]]},"3287":{"position":[[1925,4],[2233,4],[2549,4],[2870,4]]},"3360":{"position":[[77,4]]},"3373":{"position":[[328,4],[430,4]]},"3375":{"position":[[176,4]]},"3381":{"position":[[224,4]]},"3383":{"position":[[267,4]]},"3387":{"position":[[159,4],[229,4]]},"3389":{"position":[[357,4],[1293,4],[1368,4]]},"3391":{"position":[[249,4],[748,4],[823,4],[919,4]]},"3393":{"position":[[390,4],[1166,4],[1241,4],[1337,4],[1435,4]]},"3399":{"position":[[382,4],[710,4]]},"3420":{"position":[[200,4]]},"3422":{"position":[[194,4]]},"3430":{"position":[[1182,4],[2314,4]]},"3434":{"position":[[328,4]]},"3436":{"position":[[259,4]]},"3452":{"position":[[701,4]]},"3458":{"position":[[373,4],[764,4]]},"3466":{"position":[[1019,4],[1719,4]]},"3481":{"position":[[35,4]]},"3551":{"position":[[339,4],[563,4]]},"3553":{"position":[[317,4],[429,4]]},"3555":{"position":[[339,4],[469,4]]},"3557":{"position":[[342,4],[477,4]]},"3559":{"position":[[352,4],[502,4]]},"3630":{"position":[[351,4],[479,4]]},"3666":{"position":[[56,4],[204,4]]},"3708":{"position":[[3955,4]]},"3732":{"position":[[37,4]]},"3748":{"position":[[90,4]]},"3772":{"position":[[462,4]]},"3791":{"position":[[2079,4]]},"3834":{"position":[[278,4]]},"3910":{"position":[[1295,4]]},"3916":{"position":[[3697,4]]},"3918":{"position":[[2457,4],[2604,4]]},"3920":{"position":[[903,4],[1308,4],[1418,4],[1532,4]]},"3922":{"position":[[967,4],[1045,4],[1130,4],[1217,4]]},"3924":{"position":[[3442,4]]},"3934":{"position":[[3171,4]]},"3940":{"position":[[463,4]]}}}],["vperson",{"_index":3385,"t":{"696":{"position":[[3763,7],[3810,7],[4217,7],[4255,7],[4432,7]]}}}],["vs",{"_index":2514,"t":{"427":{"position":[[26,2]]},"724":{"position":[[3,2]]},"3934":{"position":[[2779,2]]}}}],["vscode",{"_index":6385,"t":{"2512":{"position":[[84,6]]}}}],["vue",{"_index":1116,"t":{"148":{"position":[[134,3],[228,3],[255,3]]},"199":{"position":[[389,3],[606,3]]},"300":{"position":[[30,3]]},"304":{"position":[[36,3]]},"308":{"position":[[77,3],[299,3]]},"314":{"position":[[2,3]]},"319":{"position":[[2,3]]},"3194":{"position":[[290,3]]},"3914":{"position":[[3026,3]]},"3932":{"position":[[1467,3],[1924,3]]}}}],["vue2",{"_index":9570,"t":{"3940":{"position":[[213,4]]}}}],["vue3",{"_index":2029,"t":{"308":{"position":[[374,4],[392,4]]},"3194":{"position":[[2,4]]},"3986":{"position":[[1247,4]]}}}],["vyzkwwqcwluy3ajjul",{"_index":804,"t":{"114":{"position":[[891,18]]},"3446":{"position":[[1366,18]]},"3928":{"position":[[1928,18]]}}}],["w",{"_index":2670,"t":{"482":{"position":[[164,1],[749,1],[898,1]]},"2418":{"position":[[392,1],[1088,1],[1260,1]]}}}],["w3c",{"_index":2452,"t":{"408":{"position":[[20,3]]},"2341":{"position":[[73,3]]}}}],["w3svc",{"_index":4347,"t":{"1456":{"position":[[10,5]]}}}],["wait",{"_index":5558,"t":{"1801":{"position":[[1221,4]]},"1803":{"position":[[2293,4],[3415,4]]}}}],["waittoreadasync",{"_index":6130,"t":{"2315":{"position":[[217,15]]}}}],["wan",{"_index":6967,"t":{"2768":{"position":[[1051,3],[1286,3]]}}}],["wang",{"_index":6934,"t":{"2768":{"position":[[557,4]]}}}],["wangpengzong",{"_index":6929,"t":{"2768":{"position":[[463,12],[514,12]]}}}],["wangshiqiao125",{"_index":4860,"t":{"1511":{"position":[[3563,14]]}}}],["want",{"_index":6183,"t":{"2333":{"position":[[435,4]]}}}],["wanwenfeng",{"_index":6984,"t":{"2768":{"position":[[1339,10]]}}}],["warn",{"_index":1631,"t":{"220":{"position":[[643,7]]},"445":{"position":[[619,7]]},"688":{"position":[[202,7]]},"1555":{"position":[[503,4]]},"2171":{"position":[[178,7],[187,7]]},"2501":{"position":[[279,7]]},"2887":{"position":[[120,7]]},"3416":{"position":[[231,7]]},"3424":{"position":[[211,7],[220,7]]},"3430":{"position":[[1653,7],[1745,7]]},"3432":{"position":[[1073,7],[1264,7],[1828,7]]},"3434":{"position":[[613,7],[1137,7],[1445,7],[1588,7]]},"3468":{"position":[[201,7],[290,7],[314,7],[362,7]]},"3601":{"position":[[1728,7],[1817,7]]},"3768":{"position":[[702,4],[897,4],[1202,4],[1397,4],[1703,4],[1899,4],[2206,4],[2442,4]]},"3772":{"position":[[556,4]]},"3842":{"position":[[409,4],[1039,4],[1604,4],[2194,4],[2835,4],[3452,4]]},"3844":{"position":[[418,4],[541,4]]},"3846":{"position":[[657,4],[780,4]]},"3850":{"position":[[272,4]]},"3852":{"position":[[390,4]]},"3854":{"position":[[218,4]]},"3856":{"position":[[113,4]]},"3874":{"position":[[205,4]]},"3876":{"position":[[322,4]]},"3932":{"position":[[1761,7]]}}}],["wash",{"_index":4786,"t":{"1511":{"position":[[2528,4]]}}}],["watch",{"_index":5368,"t":{"1733":{"position":[[41,5]]},"2749":{"position":[[418,8]]},"2875":{"position":[[116,5],[173,5],[189,5]]},"3080":{"position":[[986,8]]}}}],["weatherforecastcontrol",{"_index":7619,"t":{"3215":{"position":[[688,25]]}}}],["web",{"_index":12,"t":{"3":{"position":[[38,3]]},"112":{"position":[[312,3]]},"127":{"position":[[528,3]]},"133":{"position":[[267,3]]},"135":{"position":[[242,3]]},"146":{"position":[[246,3]]},"182":{"position":[[142,3]]},"202":{"position":[[74,3],[184,3]]},"204":{"position":[[104,3],[262,3]]},"206":{"position":[[40,3],[105,3],[134,3]]},"216":{"position":[[76,3],[114,3],[272,3],[454,3],[475,3],[507,3],[700,3],[1242,3]]},"220":{"position":[[82,3]]},"300":{"position":[[7,3]]},"338":{"position":[[206,3]]},"348":{"position":[[19,3],[220,3]]},"404":{"position":[[154,3]]},"411":{"position":[[209,3]]},"435":{"position":[[159,3],[527,3]]},"445":{"position":[[178,3],[876,3]]},"572":{"position":[[218,3]]},"595":{"position":[[7,3],[102,3]]},"617":{"position":[[2183,3],[2278,3],[2542,3]]},"627":{"position":[[93,3]]},"675":{"position":[[112,3]]},"681":{"position":[[17,3]]},"685":{"position":[[198,3]]},"698":{"position":[[843,3],[864,3]]},"702":{"position":[[9,3]]},"726":{"position":[[46,3],[97,3]]},"734":{"position":[[7893,3]]},"1071":{"position":[[79,3]]},"1214":{"position":[[54,3],[99,3]]},"1372":{"position":[[38,3]]},"1377":{"position":[[197,3]]},"1379":{"position":[[629,3]]},"1383":{"position":[[116,3],[219,3]]},"1408":{"position":[[618,3]]},"1410":{"position":[[633,3]]},"1412":{"position":[[1914,3]]},"1414":{"position":[[572,3]]},"1432":{"position":[[8,3],[94,3],[178,3]]},"1444":{"position":[[38,3]]},"1468":{"position":[[90,3]]},"1566":{"position":[[271,3]]},"1572":{"position":[[194,3],[361,3]]},"1582":{"position":[[81,3],[176,3]]},"1609":{"position":[[614,3]]},"1663":{"position":[[91,3],[319,3]]},"1747":{"position":[[2,3]]},"1755":{"position":[[27,3],[43,3],[60,3],[332,3],[1032,3]]},"1843":{"position":[[7,3],[102,3]]},"1867":{"position":[[350,3],[445,3]]},"1869":{"position":[[69,3]]},"1973":{"position":[[26,3]]},"1987":{"position":[[26,3]]},"2010":{"position":[[34,3]]},"2061":{"position":[[40,3]]},"2175":{"position":[[409,3]]},"2239":{"position":[[88,3],[98,3],[137,3]]},"2264":{"position":[[109,3]]},"2269":{"position":[[59,3],[169,3]]},"2272":{"position":[[228,3]]},"2281":{"position":[[133,3]]},"2490":{"position":[[99,3]]},"2524":{"position":[[5,3]]},"2599":{"position":[[40,3]]},"2653":{"position":[[64,3],[86,3],[168,3],[190,3]]},"2670":{"position":[[3,3]]},"2672":{"position":[[3,3]]},"2711":{"position":[[25,3],[192,3]]},"2713":{"position":[[507,3],[938,3],[1824,3]]},"2745":{"position":[[124,3]]},"2747":{"position":[[64,3],[124,3]]},"2749":{"position":[[79,3],[142,3]]},"2751":{"position":[[94,3],[402,3]]},"2774":{"position":[[255,3],[329,3],[351,3],[525,3]]},"2776":{"position":[[157,3]]},"2788":{"position":[[2,3]]},"2805":{"position":[[13,3],[239,3]]},"2821":{"position":[[21,3],[30,3]]},"2834":{"position":[[23,3]]},"2862":{"position":[[63,3],[216,3]]},"2875":{"position":[[10,3],[587,3],[610,3]]},"2881":{"position":[[866,3]]},"2889":{"position":[[77,3],[148,3]]},"2891":{"position":[[109,3],[132,3]]},"2897":{"position":[[115,3],[165,3],[376,3]]},"2905":{"position":[[229,3]]},"2910":{"position":[[321,3]]},"3063":{"position":[[434,3],[452,3]]},"3071":{"position":[[206,3],[275,3],[940,3]]},"3080":{"position":[[280,3],[340,3],[647,3],[710,3]]},"3131":{"position":[[242,3],[251,3],[262,3],[281,3],[303,3],[313,3]]},"3142":{"position":[[38,3],[59,3],[298,3]]},"3144":{"position":[[241,3]]},"3194":{"position":[[626,3]]},"3315":{"position":[[15,3]]},"3329":{"position":[[96,3],[306,3]]},"3395":{"position":[[0,3]]},"3397":{"position":[[129,3],[273,3]]},"3401":{"position":[[10,3],[343,3]]},"3403":{"position":[[0,3]]},"3430":{"position":[[482,3],[3182,3],[4485,3]]},"3432":{"position":[[3125,3],[5702,3]]},"3601":{"position":[[783,3]]},"3626":{"position":[[528,3]]},"3630":{"position":[[69,3],[262,3]]},"3636":{"position":[[36,3],[52,3]]},"3640":{"position":[[492,3]]},"3642":{"position":[[47,3]]},"3646":{"position":[[7,3]]},"3648":{"position":[[7,3]]},"3650":{"position":[[71,3]]},"3686":{"position":[[787,3]]},"3704":{"position":[[90,3]]},"3706":{"position":[[426,3],[444,3]]},"3922":{"position":[[753,3]]},"3924":{"position":[[2160,3],[3618,3]]},"3934":{"position":[[3069,3]]},"3938":{"position":[[580,3]]},"3954":{"position":[[683,3]]},"3962":{"position":[[1676,3]]},"3966":{"position":[[1498,3]]},"3968":{"position":[[592,3]]},"3986":{"position":[[1612,3]]},"3994":{"position":[[116,3]]},"3998":{"position":[[616,3]]},"4004":{"position":[[283,3]]}}}],["webapi",{"_index":550,"t":{"93":{"position":[[78,6],[112,6],[201,6],[284,6],[392,6],[435,6],[542,6],[643,6]]},"125":{"position":[[13,6],[31,6]]},"129":{"position":[[359,6]]},"329":{"position":[[61,6]]},"340":{"position":[[766,6]]},"1570":{"position":[[6,6],[43,6]]},"1572":{"position":[[106,6],[134,6],[548,6],[565,6]]},"1574":{"position":[[6,6],[39,6]]},"1576":{"position":[[22,6],[138,6],[294,6]]},"1578":{"position":[[29,6],[70,6]]},"1580":{"position":[[22,6],[66,6],[103,6],[133,6]]},"1584":{"position":[[527,6]]},"1589":{"position":[[219,6]]},"1643":{"position":[[14,6]]},"1661":{"position":[[13,6]]},"1663":{"position":[[16,6],[250,6]]},"1665":{"position":[[2,6]]},"1898":{"position":[[4,6],[46,6]]},"1909":{"position":[[152,6]]},"1913":{"position":[[1109,6]]},"1933":{"position":[[763,6]]},"1973":{"position":[[43,6]]},"1987":{"position":[[43,6]]},"2010":{"position":[[51,6]]},"2868":{"position":[[91,6],[106,6]]},"3317":{"position":[[91,6],[138,6],[260,6],[378,6]]},"3319":{"position":[[159,6],[211,6],[343,6],[471,6]]},"3716":{"position":[[58,6],[883,6]]},"3910":{"position":[[2454,6]]},"3912":{"position":[[2149,6]]},"3914":{"position":[[2819,6]]},"3916":{"position":[[2790,6]]},"3918":{"position":[[3362,6]]},"3944":{"position":[[36,6],[596,6]]},"3962":{"position":[[1015,6]]},"3964":{"position":[[150,6],[198,6],[660,6]]},"3974":{"position":[[631,6]]},"3978":{"position":[[141,6],[1336,6],[1625,6]]},"3982":{"position":[[88,6],[394,6],[453,6]]},"3984":{"position":[[10,6]]},"3986":{"position":[[660,6],[709,6],[1577,6],[1686,6],[1783,6]]},"3992":{"position":[[952,6]]},"3994":{"position":[[920,6],[1681,6]]},"4002":{"position":[[37,6],[71,6]]}}}],["webapicontrol",{"_index":5062,"t":{"1572":{"position":[[426,16]]}}}],["webapp",{"_index":4356,"t":{"1468":{"position":[[335,7]]},"1488":{"position":[[678,6]]},"1495":{"position":[[622,6]]}}}],["webappl",{"_index":2605,"t":{"455":{"position":[[737,14]]},"461":{"position":[[649,14]]},"1991":{"position":[[14,14]]},"1995":{"position":[[12,14],[93,14]]},"2014":{"position":[[14,14]]},"2018":{"position":[[12,14],[93,14]]},"2255":{"position":[[304,14]]},"2674":{"position":[[14,14]]},"2776":{"position":[[494,14]]},"2862":{"position":[[249,14]]},"2897":{"position":[[94,14]]},"3075":{"position":[[75,14]]},"3345":{"position":[[45,14]]},"3399":{"position":[[411,14],[739,14]]},"3430":{"position":[[818,14],[2110,14]]},"3932":{"position":[[2487,14]]},"3944":{"position":[[193,14],[759,14]]}}}],["webapplication1",{"_index":5894,"t":{"1951":{"position":[[50,15]]},"1953":{"position":[[50,15]]},"3397":{"position":[[181,15],[424,15],[495,15],[573,15],[926,15]]}}}],["webapplication4",{"_index":5830,"t":{"1913":{"position":[[214,15]]},"1919":{"position":[[95,15]]},"1925":{"position":[[150,15]]},"1927":{"position":[[50,15]]},"1933":{"position":[[120,15]]},"1935":{"position":[[50,15]]},"1941":{"position":[[126,15]]},"1943":{"position":[[50,15]]}}}],["webapplicationbuild",{"_index":2255,"t":{"348":{"position":[[44,21],[109,21],[278,21],[370,21]]},"355":{"position":[[446,21]]},"2879":{"position":[[544,21]]},"3430":{"position":[[1192,21],[2324,21]]},"3920":{"position":[[913,21]]},"3934":{"position":[[352,21]]}}}],["webapplicationfactori",{"_index":8033,"t":{"3397":{"position":[[402,21],[473,21],[551,21]]}}}],["webapplicationtest",{"_index":8042,"t":{"3401":{"position":[[134,19],[297,19]]}}}],["webassembl",{"_index":5934,"t":{"2049":{"position":[[4,11]]}}}],["webbuild",{"_index":1513,"t":{"202":{"position":[[428,10],[444,10]]},"455":{"position":[[640,10],[656,10]]},"461":{"position":[[1208,10],[1224,10]]},"1667":{"position":[[173,10],[189,10]]},"1977":{"position":[[322,10],[338,10]]},"2269":{"position":[[413,10],[429,10]]},"2776":{"position":[[401,10],[417,10]]},"2862":{"position":[[140,10],[156,10]]},"3166":{"position":[[316,10],[332,10]]}}}],["webcompon",{"_index":7164,"t":{"2879":{"position":[[364,12]]},"3430":{"position":[[1113,12],[1144,12],[2245,12],[2276,12]]}}}],["webdavmodul",{"_index":4351,"t":{"1468":{"position":[[45,12],[208,12]]}}}],["webdir",{"_index":4456,"t":{"1488":{"position":[[639,6],[760,6],[788,6],[877,6],[1004,6],[1306,6]]},"1495":{"position":[[583,6],[704,6],[732,6],[821,6],[948,6],[1177,6]]},"1499":{"position":[[186,6],[233,6],[249,6],[310,6],[327,6],[360,6],[392,6],[648,6]]}}}],["webhost",{"_index":7153,"t":{"2875":{"position":[[325,7]]},"2883":{"position":[[4,7],[83,7]]},"3075":{"position":[[128,7]]}}}],["webhostbuild",{"_index":5212,"t":{"1667":{"position":[[447,14]]},"1755":{"position":[[847,14]]}}}],["webhostenviron",{"_index":5922,"t":{"2025":{"position":[[4,18]]},"2047":{"position":[[18,18]]},"3978":{"position":[[1059,18]]}}}],["webroot",{"_index":4432,"t":{"1485":{"position":[[267,7],[284,7]]},"1488":{"position":[[654,7],[711,7]]},"1495":{"position":[[598,7],[655,7]]},"1497":{"position":[[99,7]]},"1499":{"position":[[170,7]]}}}],["webrootpath",{"_index":5933,"t":{"2045":{"position":[[4,11]]},"2047":{"position":[[37,11]]}}}],["webserv",{"_index":4353,"t":{"1468":{"position":[[131,9],[244,9]]},"1755":{"position":[[143,9],[280,9],[391,9],[528,9]]}}}],["websit",{"_index":4360,"t":{"1468":{"position":[[392,7]]},"3702":{"position":[[708,7],[1230,7],[1285,7]]}}}],["websocket",{"_index":4362,"t":{"1470":{"position":[[59,9]]}}}],["websoket",{"_index":4361,"t":{"1470":{"position":[[16,8]]}}}],["wechat",{"_index":7490,"t":{"3138":{"position":[[37,6]]}}}],["wed",{"_index":6320,"t":{"2420":{"position":[[1690,3]]}}}],["week",{"_index":7699,"t":{"3234":{"position":[[88,4]]}}}],["weekli",{"_index":2658,"t":{"480":{"position":[[346,6],[371,6],[696,6],[713,6]]},"494":{"position":[[287,6],[304,6]]},"2424":{"position":[[225,6]]},"3804":{"position":[[1022,6]]},"3808":{"position":[[365,6]]}}}],["wei",{"_index":6939,"t":{"2768":{"position":[[643,3]]}}}],["weight",{"_index":5128,"t":{"1611":{"position":[[651,6]]}}}],["weixin",{"_index":8305,"t":{"3522":{"position":[[975,6]]}}}],["weixinapi",{"_index":1478,"t":{"199":{"position":[[265,9]]}}}],["wen",{"_index":6959,"t":{"2768":{"position":[[946,3],[964,3]]}}}],["wget",{"_index":4394,"t":{"1483":{"position":[[183,4],[223,4]]}}}],["what",{"_index":9526,"t":{"3934":{"position":[[2931,5]]}}}],["whatev",{"_index":6182,"t":{"2333":{"position":[[422,8]]}}}],["whatsnew",{"_index":3562,"t":{"773":{"position":[[151,8]]}}}],["whd",{"_index":4828,"t":{"1511":{"position":[[3055,3]]}}}],["white",{"_index":5013,"t":{"1555":{"position":[[154,5],[222,5],[374,5],[438,5]]}}}],["whq",{"_index":4797,"t":{"1511":{"position":[[2635,3],[3273,3]]}}}],["whre",{"_index":4058,"t":{"1204":{"position":[[119,4]]}}}],["wi",{"_index":6262,"t":{"2383":{"position":[[273,2]]}}}],["wiki",{"_index":6818,"t":{"2698":{"position":[[59,4]]}}}],["win",{"_index":4365,"t":{"1472":{"position":[[28,3]]}}}],["win10",{"_index":7094,"t":{"2836":{"position":[[791,5]]}}}],["win64",{"_index":781,"t":{"114":{"position":[[445,5]]},"3446":{"position":[[920,5]]},"3452":{"position":[[1577,5]]},"3916":{"position":[[4573,5]]},"3928":{"position":[[1482,5]]}}}],["window",{"_index":623,"t":{"102":{"position":[[5,7]]},"114":{"position":[[428,7]]},"152":{"position":[[299,6],[573,6]]},"190":{"position":[[44,7]]},"251":{"position":[[142,7]]},"1518":{"position":[[17,7]]},"1755":{"position":[[1001,7]]},"2057":{"position":[[146,7]]},"2480":{"position":[[53,7]]},"2760":{"position":[[21,7],[43,7],[76,7]]},"2803":{"position":[[65,7],[135,7],[179,7]]},"2809":{"position":[[90,7]]},"2836":{"position":[[21,7],[57,7],[843,7],[1066,7],[1253,7]]},"2838":{"position":[[9,7]]},"3082":{"position":[[105,7],[127,7],[160,7]]},"3136":{"position":[[180,7]]},"3148":{"position":[[174,7]]},"3446":{"position":[[903,7]]},"3452":{"position":[[1560,7]]},"3916":{"position":[[4556,7]]},"3918":{"position":[[3608,7]]},"3928":{"position":[[1465,7]]},"3938":{"position":[[355,7]]},"3942":{"position":[[268,7]]}}}],["windowsservic",{"_index":7092,"t":{"2836":{"position":[[110,15]]}}}],["winfom",{"_index":9049,"t":{"3910":{"position":[[1069,6]]}}}],["winform",{"_index":14,"t":{"3":{"position":[[46,7]]},"2899":{"position":[[2,7],[50,7]]}}}],["winformsapp2",{"_index":7175,"t":{"2899":{"position":[[68,12]]}}}],["winfrom",{"_index":6019,"t":{"2175":{"position":[[41,7]]}}}],["witharg",{"_index":2616,"t":{"461":{"position":[[311,8]]},"2893":{"position":[[85,8]]},"3922":{"position":[[309,8]]}}}],["withcredenti",{"_index":2461,"t":{"413":{"position":[[56,15]]},"417":{"position":[[361,15]]},"419":{"position":[[109,15]]}}}],["withdata",{"_index":5738,"t":{"1863":{"position":[[218,8]]},"3918":{"position":[[3690,8]]},"3920":{"position":[[249,8]]}}}],["withencodeurl",{"_index":8326,"t":{"3532":{"position":[[116,13]]},"3571":{"position":[[153,13]]},"3930":{"position":[[150,13],[176,13],[926,13]]}}}],["withexposedhead",{"_index":2470,"t":{"415":{"position":[[150,18],[393,18]]},"417":{"position":[[164,18],[234,18]]},"2991":{"position":[[156,18],[399,18]]},"2995":{"position":[[141,18]]},"3932":{"position":[[55,18]]}}}],["withgzip",{"_index":8323,"t":{"3530":{"position":[[73,8]]},"3569":{"position":[[108,8]]}}}],["withhead",{"_index":2468,"t":{"415":{"position":[[109,11]]},"2991":{"position":[[115,11]]}}}],["withmani",{"_index":3380,"t":{"696":{"position":[[2054,8]]}}}],["withmethod",{"_index":2472,"t":{"415":{"position":[[233,11]]},"2991":{"position":[[239,11]]}}}],["withon",{"_index":3683,"t":{"877":{"position":[[1029,7]]}}}],["withorigin",{"_index":2464,"t":{"413":{"position":[[155,11]]},"415":{"position":[[70,11]]},"2991":{"position":[[76,11]]},"2993":{"position":[[55,11]]}}}],["withoutwarranti",{"_index":8551,"t":{"3702":{"position":[[2534,17]]}}}],["withreturnvalu",{"_index":8168,"t":{"3446":{"position":[[267,15]]},"3448":{"position":[[564,15],[988,15]]},"3920":{"position":[[663,15]]}}}],["withscopedlifetim",{"_index":4341,"t":{"1440":{"position":[[700,18]]}}}],["withsecond",{"_index":2644,"t":{"476":{"position":[[77,11]]},"482":{"position":[[51,11]]},"484":{"position":[[196,11]]},"490":{"position":[[68,11],[272,11]]},"492":{"position":[[285,11]]},"2484":{"position":[[285,11]]},"2827":{"position":[[331,11]]},"2829":{"position":[[379,11]]},"3766":{"position":[[259,11]]},"3774":{"position":[[334,11]]}}}],["withsecondsandyear",{"_index":2645,"t":{"478":{"position":[[82,19]]},"482":{"position":[[82,19],[307,19]]},"484":{"position":[[247,19]]}}}],["withtransientlifetim",{"_index":4338,"t":{"1440":{"position":[[503,21]]}}}],["withurl",{"_index":7586,"t":{"3194":{"position":[[466,7]]}}}],["withyear",{"_index":2642,"t":{"474":{"position":[[77,9]]},"482":{"position":[[278,9]]},"484":{"position":[[146,9]]}}}],["woodi",{"_index":4603,"t":{"1511":{"position":[[494,5]]}}}],["word",{"_index":4310,"t":{"1424":{"position":[[264,4],[356,4],[380,4],[1975,4],[1999,4]]},"2788":{"position":[[25,5],[88,5]]}}}],["wordwithnumb",{"_index":10371,"t":{"3996":{"position":[[297,14]]}}}],["workdir",{"_index":4153,"t":{"1377":{"position":[[124,7]]},"1379":{"position":[[150,7],[396,7],[539,7]]},"1483":{"position":[[126,7]]}}}],["worker",{"_index":2731,"t":{"492":{"position":[[64,6],[118,6],[177,6],[192,6],[589,6]]},"2220":{"position":[[4,7]]},"2222":{"position":[[4,6]]},"2226":{"position":[[72,6]]},"2228":{"position":[[90,6]]},"2391":{"position":[[207,6]]},"2460":{"position":[[4,7]]},"2462":{"position":[[4,6]]},"2482":{"position":[[38,6],[92,6],[148,6],[163,6],[489,6]]},"2484":{"position":[[64,6],[118,6],[177,6],[192,6],[589,6]]},"2490":{"position":[[72,6],[113,6]]},"2803":{"position":[[18,6],[155,6]]},"2805":{"position":[[262,6],[554,6]]},"2807":{"position":[[104,6],[136,6],[371,6]]},"2809":{"position":[[3,6]]},"2811":{"position":[[26,6]]},"2813":{"position":[[7,6],[34,6],[69,6],[111,6],[304,6],[358,6],[382,6],[397,6],[586,6],[689,6],[1108,6]]},"2815":{"position":[[0,6],[23,6],[41,6]]},"2817":{"position":[[0,6],[17,6],[62,6],[108,6],[147,6],[203,6],[248,6],[453,6],[507,6],[531,6],[546,6],[865,6]]},"2819":{"position":[[0,6],[478,6],[515,6],[608,6]]},"2821":{"position":[[0,6],[53,6]]},"2825":{"position":[[38,6],[92,6],[148,6],[163,6],[489,6]]},"2827":{"position":[[110,6],[164,6],[223,6],[238,6],[635,6]]},"2829":{"position":[[128,6],[182,6],[271,6],[286,6],[753,6]]},"2831":{"position":[[0,6],[18,6],[79,6],[230,6],[245,6]]},"2834":{"position":[[76,6]]},"2836":{"position":[[0,6],[589,6],[626,6],[652,6],[1795,6],[1832,6]]},"3910":{"position":[[2615,6]]},"3914":{"position":[[2587,6],[3478,6]]},"3918":{"position":[[4190,6]]},"3922":{"position":[[2407,6]]},"3924":{"position":[[2005,6]]},"3938":{"position":[[780,6]]},"3942":{"position":[[249,6]]},"3950":{"position":[[637,6]]},"3958":{"position":[[263,6],[281,6]]},"3960":{"position":[[414,6],[459,6]]},"3962":{"position":[[1272,6],[1490,6]]},"3974":{"position":[[195,6],[220,6]]},"3978":{"position":[[16,6]]}}}],["worker2",{"_index":7076,"t":{"2807":{"position":[[408,7]]}}}],["workernam",{"_index":6044,"t":{"2222":{"position":[[34,10]]},"2444":{"position":[[80,10]]},"2462":{"position":[[34,10]]},"2468":{"position":[[86,10]]},"2472":{"position":[[275,10]]},"2486":{"position":[[534,10],[619,10],[702,10],[787,10],[873,10],[959,10]]}}}],["workerservic",{"_index":2730,"t":{"492":{"position":[[36,13]]},"2482":{"position":[[10,13]]},"2484":{"position":[[36,13]]},"2825":{"position":[[10,13]]},"2827":{"position":[[82,13]]},"2829":{"position":[[100,13]]},"2897":{"position":[[214,13]]},"3978":{"position":[[1036,13]]}}}],["workplac",{"_index":8086,"t":{"3430":{"position":[[449,10],[3137,10],[4440,10]]},"3432":{"position":[[3092,10],[5657,10]]},"3452":{"position":[[3257,10]]},"3601":{"position":[[738,10]]},"3832":{"position":[[1917,10],[2076,10],[2374,10],[2627,10],[2839,10],[3026,10],[3678,10],[3837,10],[4135,10],[4388,10],[4600,10],[4787,10]]},"3916":{"position":[[6253,10]]}}}],["workservic",{"_index":9856,"t":{"3966":{"position":[[1971,11]]},"3968":{"position":[[796,11]]}}}],["workspac",{"_index":4462,"t":{"1488":{"position":[[826,9]]},"1495":{"position":[[770,9],[999,9],[1051,9],[1107,9],[1262,9]]},"1497":{"position":[[250,9]]},"3329":{"position":[[264,10]]}}}],["world",{"_index":4936,"t":{"1524":{"position":[[72,5],[100,5]]},"1526":{"position":[[17,5],[75,5]]},"1530":{"position":[[18,5],[80,5]]},"1557":{"position":[[980,5]]},"2567":{"position":[[68,5]]},"2903":{"position":[[111,5]]},"3924":{"position":[[2304,5]]}}}],["wpf",{"_index":15,"t":{"3":{"position":[[54,3]]},"2175":{"position":[[49,3]]},"2899":{"position":[[12,3],[287,3]]},"3910":{"position":[[1076,3]]},"3966":{"position":[[1673,3]]}}}],["wpfapp1",{"_index":7181,"t":{"2899":{"position":[[337,7]]}}}],["wrapper",{"_index":6063,"t":{"2261":{"position":[[29,7]]},"3464":{"position":[[24,7],[77,7]]},"3928":{"position":[[518,7]]},"3934":{"position":[[49,7]]},"3936":{"position":[[1901,7]]}}}],["write",{"_index":5019,"t":{"1555":{"position":[[269,5],[286,5],[330,5],[394,5]]},"1913":{"position":[[941,5]]},"3224":{"position":[[634,5],[750,5]]},"3432":{"position":[[4050,5],[4071,5]]},"3434":{"position":[[333,5]]},"3452":{"position":[[706,5]]},"3458":{"position":[[378,5],[769,5]]},"3466":{"position":[[1024,5]]},"3470":{"position":[[69,5]]},"3916":{"position":[[3702,5]]}}}],["writearray",{"_index":8143,"t":{"3432":{"position":[[3562,10]]}}}],["writeasjsonasync",{"_index":8589,"t":{"3708":{"position":[[2803,16],[3016,16]]},"3956":{"position":[[2151,16],[2360,16]]}}}],["writeasync",{"_index":5388,"t":{"1741":{"position":[[1516,10]]},"1799":{"position":[[396,10],[491,10]]},"1801":{"position":[[1871,10],[2233,10],[2692,10]]},"1803":{"position":[[3842,10],[4195,10],[4664,10]]},"1805":{"position":[[385,10]]},"2313":{"position":[[717,10]]},"2567":{"position":[[50,10]]},"2571":{"position":[[77,10]]}}}],["writeerror",{"_index":8148,"t":{"3432":{"position":[[4497,10],[4663,10],[4680,10],[4744,10],[4802,10]]},"3434":{"position":[[2876,10]]}}}],["writefilt",{"_index":8130,"t":{"3432":{"position":[[2058,11],[2227,11],[2368,11],[2529,11]]},"3434":{"position":[[1775,11],[1974,11],[2145,11]]},"3454":{"position":[[55,11],[137,11]]},"3458":{"position":[[101,11]]},"3466":{"position":[[858,11]]},"3916":{"position":[[1354,11],[8922,11]]}}}],["writehandl",{"_index":8112,"t":{"3430":{"position":[[4592,12]]},"3916":{"position":[[878,12]]}}}],["writeind",{"_index":6222,"t":{"2354":{"position":[[223,13]]}}}],["writelin",{"_index":57,"t":{"3":{"position":[[499,9],[543,9],[660,9]]},"282":{"position":[[180,9],[323,9]]},"461":{"position":[[511,9],[860,9],[1401,9]]},"490":{"position":[[162,9],[407,9]]},"1424":{"position":[[1054,9],[1134,9],[1283,9],[1381,9],[1513,9],[1629,9]]},"1539":{"position":[[660,9],[891,9],[1312,9],[1553,9]]},"1555":{"position":[[37,9],[58,9],[106,9],[174,9]]},"1557":{"position":[[188,9],[310,9],[435,9],[552,9],[662,9]]},"1703":{"position":[[265,9],[442,9]]},"1815":{"position":[[522,9]]},"1817":{"position":[[233,9]]},"1819":{"position":[[790,9]]},"1913":{"position":[[431,9]]},"2158":{"position":[[62,9]]},"2261":{"position":[[187,9]]},"2313":{"position":[[408,9]]},"2398":{"position":[[20,9],[188,9]]},"2400":{"position":[[51,9]]},"2402":{"position":[[122,9]]},"2406":{"position":[[275,9],[582,9]]},"2409":{"position":[[59,9],[134,9]]},"2411":{"position":[[47,9],[122,9]]},"2413":{"position":[[47,9],[122,9]]},"2415":{"position":[[262,9],[327,9]]},"2426":{"position":[[68,9],[143,9]]},"2428":{"position":[[70,9],[145,9]]},"2430":{"position":[[54,9],[129,9]]},"2432":{"position":[[54,9],[129,9]]},"2434":{"position":[[266,9],[331,9],[603,9],[668,9]]},"2438":{"position":[[134,9],[199,9]]},"2440":{"position":[[170,9],[235,9],[543,9],[608,9]]},"2442":{"position":[[375,9],[440,9],[607,9],[672,9],[880,9],[945,9],[1163,9],[1228,9],[1397,9],[1462,9],[1654,9],[1719,9],[1882,9],[1947,9]]},"2468":{"position":[[71,9]]},"2470":{"position":[[156,9],[221,9]]},"2472":{"position":[[134,9],[260,9]]},"2486":{"position":[[506,9],[591,9],[674,9],[759,9],[845,9],[931,9]]},"2607":{"position":[[312,9],[722,9]]},"2805":{"position":[[426,9]]},"2856":{"position":[[798,9],[843,9],[1025,9],[1069,9]]},"2889":{"position":[[442,9],[550,9]]},"2903":{"position":[[93,9]]},"3215":{"position":[[521,9]]},"3228":{"position":[[239,9]]},"3254":{"position":[[663,9],[722,9],[1038,9],[1097,9],[1350,9],[1374,9],[1466,9]]},"3383":{"position":[[301,9]]},"3430":{"position":[[4664,9]]},"3464":{"position":[[235,9]]},"3924":{"position":[[2286,9]]},"3936":{"position":[[2051,9]]}}}],["writenumbervalu",{"_index":8145,"t":{"3432":{"position":[[3739,16]]}}}],["writer",{"_index":5571,"t":{"1801":{"position":[[1864,6],[2685,6]]},"1803":{"position":[[3835,6],[4657,6]]},"2313":{"position":[[710,6],[819,6]]},"3430":{"position":[[4631,6],[4657,6]]},"3432":{"position":[[3573,6],[3585,6],[3638,6],[3691,6],[3732,6],[3776,6],[3817,6],[4056,6]]}}}],["writerepositori",{"_index":3881,"t":{"1031":{"position":[[114,15]]}}}],["writestringvalu",{"_index":8144,"t":{"3432":{"position":[[3592,16],[3645,16],[3698,16],[3783,16],[3824,16]]}}}],["wwad",{"_index":4756,"t":{"1511":{"position":[[2160,5]]}}}],["www",{"_index":61,"t":{"3":{"position":[[592,3]]},"89":{"position":[[99,3]]},"298":{"position":[[13,3]]},"314":{"position":[[201,3]]},"406":{"position":[[34,3],[57,3],[108,3],[132,3],[185,3],[208,3],[255,3],[304,3],[321,3],[349,3]]},"675":{"position":[[13,3]]},"919":{"position":[[173,3]]},"1516":{"position":[[171,3],[225,3]]},"1539":{"position":[[231,3]]},"1551":{"position":[[112,3]]},"2768":{"position":[[137,3],[167,3],[202,3],[313,3],[394,3],[439,3],[498,3],[536,3],[586,3],[619,3],[675,3],[760,3],[830,3],[880,3],[925,3],[981,3],[1030,3],[1091,3],[1134,3],[1188,3],[1258,3],[1367,3],[1405,3]]},"3112":{"position":[[67,3]]},"3215":{"position":[[885,3]]},"3250":{"position":[[117,3]]},"3265":{"position":[[156,3]]},"3267":{"position":[[672,3]]},"3269":{"position":[[568,3]]},"3271":{"position":[[253,3]]},"3307":{"position":[[282,3]]},"3331":{"position":[[42,3],[98,3]]},"3335":{"position":[[13,3]]},"3373":{"position":[[49,3],[569,3]]},"3483":{"position":[[152,3],[217,3],[283,3],[350,3],[422,3],[491,3],[914,3],[976,3],[1040,3],[1102,3],[1170,3],[1236,3]]},"3486":{"position":[[43,3],[119,3],[196,3],[274,3],[357,3],[437,3],[515,3]]},"3488":{"position":[[64,3]]},"3490":{"position":[[15,3]]},"3492":{"position":[[23,3],[219,3]]},"3494":{"position":[[23,3],[200,3]]},"3496":{"position":[[23,3],[153,3],[264,3],[402,3]]},"3498":{"position":[[432,3]]},"3500":{"position":[[23,3],[133,3],[257,3],[388,3],[426,3],[548,3],[617,3],[766,3]]},"3502":{"position":[[15,3]]},"3504":{"position":[[15,3]]},"3506":{"position":[[97,3],[208,3],[326,3],[474,3]]},"3508":{"position":[[15,3],[97,3]]},"3510":{"position":[[15,3]]},"3512":{"position":[[15,3]]},"3514":{"position":[[15,3]]},"3516":{"position":[[15,3]]},"3518":{"position":[[15,3]]},"3520":{"position":[[171,3],[250,3],[318,3],[390,3]]},"3522":{"position":[[217,3],[361,3],[554,3],[733,3],[1297,3],[1461,3]]},"3524":{"position":[[69,3]]},"3526":{"position":[[103,3]]},"3528":{"position":[[55,3]]},"3530":{"position":[[57,3]]},"3532":{"position":[[100,3]]},"3535":{"position":[[73,3],[165,3],[257,3],[353,3],[453,3],[549,3]]},"3537":{"position":[[60,3]]},"3539":{"position":[[179,3],[318,3],[431,3]]},"3541":{"position":[[60,3],[173,3],[279,3],[401,3],[578,3],[766,3]]},"3545":{"position":[[61,3],[156,3],[239,3],[288,3],[371,3]]},"3547":{"position":[[135,3],[291,3]]},"3549":{"position":[[61,3],[198,3]]},"3551":{"position":[[112,3]]},"3553":{"position":[[112,3]]},"3555":{"position":[[112,3]]},"3557":{"position":[[112,3]]},"3559":{"position":[[112,3]]},"3561":{"position":[[170,3],[250,3],[317,3],[382,3]]},"3563":{"position":[[203,3],[407,3],[793,3],[925,3],[1107,3],[1252,3]]},"3565":{"position":[[188,3]]},"3567":{"position":[[122,3]]},"3569":{"position":[[91,3]]},"3571":{"position":[[136,3]]},"3599":{"position":[[81,3]]},"3601":{"position":[[934,3],[1079,3],[1534,3]]},"3603":{"position":[[69,3],[200,3]]},"3672":{"position":[[33,3],[117,3]]},"3702":{"position":[[371,3],[489,3]]},"3754":{"position":[[331,3]]},"3918":{"position":[[1595,3],[1737,3],[1882,3],[2075,3],[2239,3],[2881,3],[2962,3]]},"3974":{"position":[[414,3]]},"3980":{"position":[[239,3]]},"3984":{"position":[[448,3]]}}}],["wwwroot",{"_index":5371,"t":{"1735":{"position":[[78,7]]},"2047":{"position":[[4,7]]}}}],["wxa",{"_index":8306,"t":{"3522":{"position":[[989,3]]}}}],["wxid",{"_index":5284,"t":{"1691":{"position":[[107,4]]}}}],["x",{"_index":1108,"t":{"144":{"position":[[515,1]]},"148":{"position":[[87,1],[472,1]]},"415":{"position":[[216,1]]},"417":{"position":[[202,1]]},"639":{"position":[[242,1],[247,1],[272,1],[277,1],[308,1],[313,1],[346,1],[351,1]]},"866":{"position":[[52,1],[63,1],[74,1]]},"877":{"position":[[1010,1],[1015,1],[1037,1],[1042,1],[1067,1],[1072,1]]},"883":{"position":[[11,1],[50,1],[176,1],[192,1]]},"897":{"position":[[267,1],[310,1]]},"1309":{"position":[[431,1],[474,1]]},"1667":{"position":[[482,1],[489,1],[543,1]]},"2607":{"position":[[645,1],[650,1]]},"2635":{"position":[[19,1],[23,1],[49,1]]},"2662":{"position":[[19,1],[23,1],[49,1]]},"2747":{"position":[[245,1]]},"2991":{"position":[[222,1]]},"2995":{"position":[[164,1],[194,1]]},"3224":{"position":[[1052,1],[1057,1]]},"3232":{"position":[[4,1],[43,1],[76,1],[113,1],[179,1]]},"3236":{"position":[[386,1],[430,1],[444,1]]},"3494":{"position":[[130,1]]},"3500":{"position":[[386,1],[546,1],[764,1]]},"3545":{"position":[[237,1],[369,1]]},"3668":{"position":[[156,1],[161,1]]},"3672":{"position":[[31,1],[115,1]]},"3918":{"position":[[1136,1]]},"3920":{"position":[[504,1]]},"3930":{"position":[[1160,1]]},"3932":{"position":[[94,1]]},"3946":{"position":[[19,1]]},"3974":{"position":[[412,1]]},"3980":{"position":[[237,1]]},"3984":{"position":[[446,1]]},"3990":{"position":[[313,1]]}}}],["x1000",{"_index":5730,"t":{"1855":{"position":[[291,5]]},"1863":{"position":[[46,5]]},"1865":{"position":[[184,5]]},"1875":{"position":[[445,5]]}}}],["x1001",{"_index":5731,"t":{"1855":{"position":[[350,5]]},"1863":{"position":[[103,5]]},"1865":{"position":[[243,5]]},"1875":{"position":[[354,5]]}}}],["x509certificate2",{"_index":8391,"t":{"3591":{"position":[[261,16],[296,16],[331,16]]}}}],["x64",{"_index":782,"t":{"114":{"position":[[452,3]]},"190":{"position":[[229,3],[284,3],[375,3],[473,3],[516,3]]},"1483":{"position":[[396,3]]},"2057":{"position":[[72,3],[243,3]]},"2836":{"position":[[797,3]]},"3446":{"position":[[927,3]]},"3452":{"position":[[1584,3]]},"3916":{"position":[[4580,3]]},"3928":{"position":[[1489,3]]}}}],["xamarin",{"_index":16,"t":{"3":{"position":[[58,7]]},"102":{"position":[[61,7]]}}}],["xelement",{"_index":1955,"t":{"290":{"position":[[134,8]]}}}],["xhr",{"_index":2486,"t":{"417":{"position":[[276,3],[305,3]]}}}],["xhrfield",{"_index":2492,"t":{"419":{"position":[[96,9]]}}}],["xiang",{"_index":6960,"t":{"2768":{"position":[[950,5]]}}}],["xiao",{"_index":6940,"t":{"2768":{"position":[[647,4]]}}}],["xiong",{"_index":6971,"t":{"2768":{"position":[[1073,5]]}}}],["xiuxin",{"_index":4716,"t":{"1511":{"position":[[1701,6]]}}}],["xixixiao",{"_index":6949,"t":{"2768":{"position":[[776,8]]}}}],["xixixixixiao",{"_index":6948,"t":{"2768":{"position":[[739,12]]}}}],["xm",{"_index":5289,"t":{"1691":{"position":[[296,2]]}}}],["xml",{"_index":1956,"t":{"290":{"position":[[147,3]]},"445":{"position":[[0,3],[30,3],[157,3],[379,3],[679,3],[693,3],[717,3]]},"449":{"position":[[20,3]]},"1286":{"position":[[134,3],[211,3],[220,3]]},"1755":{"position":[[82,3]]},"2627":{"position":[[174,3]]},"2985":{"position":[[44,3]]},"3063":{"position":[[393,3]]},"3500":{"position":[[589,3],[598,3],[718,3]]},"3636":{"position":[[68,3],[576,3],[608,3]]},"3706":{"position":[[385,3]]},"3954":{"position":[[106,3],[117,3]]},"3966":{"position":[[432,3],[460,3]]},"3970":{"position":[[21,3]]}}}],["xmlcomment",{"_index":7316,"t":{"3063":{"position":[[366,11]]},"3706":{"position":[[358,11]]}}}],["xmlelement",{"_index":1957,"t":{"290":{"position":[[158,10]]}}}],["xmlhttprequest",{"_index":2497,"t":{"419":{"position":[[253,14]]}}}],["xocncdqgoxclceovu5qahiktcoz7zxo0hebzghdffi",{"_index":8196,"t":{"3452":{"position":[[1922,42]]},"3916":{"position":[[4918,42]]}}}],["xor",{"_index":1915,"t":{"274":{"position":[[131,3]]},"278":{"position":[[117,3]]},"280":{"position":[[117,3]]},"282":{"position":[[117,3],[205,3],[422,3]]},"288":{"position":[[117,3],[247,3]]},"290":{"position":[[117,3]]}}}],["xukaig",{"_index":4852,"t":{"1511":{"position":[[3462,7],[3594,7]]}}}],["xunit",{"_index":543,"t":{"91":{"position":[[471,5],[484,5],[510,5],[528,5]]},"3356":{"position":[[0,5],[46,5]]},"3360":{"position":[[6,5]]},"3369":{"position":[[46,5],[85,5],[105,5]]},"3371":{"position":[[68,5],[81,5],[107,5]]},"3377":{"position":[[40,5]]},"3381":{"position":[[35,5]]},"3383":{"position":[[55,5],[68,5]]},"3387":{"position":[[74,5]]},"3389":{"position":[[441,5],[474,5],[487,5],[513,5],[1011,5]]},"3391":{"position":[[327,5]]},"3393":{"position":[[210,5],[579,5]]},"3397":{"position":[[42,5],[332,5]]},"3399":{"position":[[36,5],[234,5]]},"3403":{"position":[[92,5]]},"3924":{"position":[[14,5],[29,5],[597,5],[612,5],[2545,5],[2750,5],[2816,5],[2829,5],[2855,5],[3253,5]]}}}],["xx",{"_index":5332,"t":{"1711":{"position":[[77,2],[102,2]]},"2747":{"position":[[247,2]]},"3224":{"position":[[617,2],[701,2]]},"3228":{"position":[[313,2],[337,2]]},"3992":{"position":[[1625,2]]}}}],["xxx",{"_index":2228,"t":{"340":{"position":[[1007,3]]},"516":{"position":[[642,3]]},"530":{"position":[[726,3]]},"685":{"position":[[169,3],[194,3]]},"1039":{"position":[[727,3]]},"1434":{"position":[[253,3],[296,3]]},"1627":{"position":[[204,3]]},"1735":{"position":[[254,3]]},"1755":{"position":[[39,3]]},"1803":{"position":[[5269,3],[5273,3],[5277,3],[5281,3],[5433,3],[5437,3],[5441,3],[5445,3]]},"1815":{"position":[[491,3]]},"2023":{"position":[[90,3],[94,3]]},"2476":{"position":[[272,3],[315,3]]},"2478":{"position":[[382,3],[425,3]]},"2745":{"position":[[46,3],[60,3],[106,3],[199,3]]},"2747":{"position":[[56,3],[116,3],[202,3]]},"2762":{"position":[[24,3],[61,3]]},"2831":{"position":[[721,3]]},"3616":{"position":[[57,3],[73,3]]}}}],["xxxapplicationcompon",{"_index":2280,"t":{"355":{"position":[[383,23]]}}}],["xxxasstreamasync",{"_index":9231,"t":{"3918":{"position":[[2816,16]]}}}],["xxxcompon",{"_index":2265,"t":{"350":{"position":[[761,12],[799,12]]},"355":{"position":[[33,12],[53,12],[231,12]]},"359":{"position":[[245,12],[369,12],[413,12]]}}}],["xxxoption",{"_index":2319,"t":{"369":{"position":[[841,10]]}}}],["xxxresult",{"_index":5904,"t":{"1955":{"position":[[74,9]]}}}],["xxxservicecompon",{"_index":2229,"t":{"340":{"position":[[1020,19],[1063,19],[1307,19],[1407,19],[1464,19],[1556,19],[1662,19]]},"355":{"position":[[302,19]]},"369":{"position":[[816,19]]}}}],["xxxwebcompon",{"_index":2281,"t":{"355":{"position":[[491,15]]},"2879":{"position":[[459,15],[493,15]]},"3920":{"position":[[828,15],[862,15]]}}}],["xxxx",{"_index":2005,"t":{"306":{"position":[[34,4]]},"427":{"position":[[12,4]]},"1472":{"position":[[32,4]]},"3510":{"position":[[175,4]]},"3551":{"position":[[483,4]]},"3670":{"position":[[210,4]]}}}],["xxxxcompon",{"_index":2290,"t":{"359":{"position":[[267,13],[435,13]]}}}],["xxxxfixtur",{"_index":8015,"t":{"3389":{"position":[[747,11]]}}}],["xxxxname",{"_index":1563,"t":{"210":{"position":[[573,8]]}}}],["xxxxx",{"_index":2484,"t":{"417":{"position":[[99,5]]},"1747":{"position":[[142,5]]},"2995":{"position":[[76,5]]},"3078":{"position":[[23,5]]},"3254":{"position":[[152,5]]},"3275":{"position":[[72,5]]}}}],["y",{"_index":3695,"t":{"883":{"position":[[59,1],[98,1],[179,1],[196,1]]},"1454":{"position":[[14,1]]},"1483":{"position":[[181,1],[565,1],[611,1]]},"1488":{"position":[[99,1]]},"1495":{"position":[[99,1]]}}}],["yachengmu",{"_index":9094,"t":{"3912":{"position":[[2747,9]]},"3950":{"position":[[949,9]]}}}],["yahoo",{"_index":7486,"t":{"3136":{"position":[[231,5]]}}}],["yaml",{"_index":10300,"t":{"3992":{"position":[[3672,4]]}}}],["yang",{"_index":3521,"t":{"763":{"position":[[402,4]]}}}],["yarn",{"_index":2023,"t":{"308":{"position":[[149,4],[195,4],[203,4]]},"2742":{"position":[[62,4],[110,4],[116,4]]},"3080":{"position":[[148,4],[196,4],[202,4]]}}}],["ye",{"_index":6462,"t":{"2559":{"position":[[318,2]]}}}],["year",{"_index":3089,"t":{"587":{"position":[[1139,4],[1147,4],[1154,4],[1173,4],[1259,4],[1279,4],[1474,4],[1530,4]]},"773":{"position":[[413,4],[619,4],[722,4],[832,4],[915,4]]},"2418":{"position":[[124,4],[515,4]]},"3234":{"position":[[22,4],[41,4],[66,4],[131,4]]}}}],["yearli",{"_index":2660,"t":{"480":{"position":[[401,6],[426,6],[741,6],[758,6]]},"494":{"position":[[332,6],[349,6]]},"2424":{"position":[[291,6]]},"3804":{"position":[[1088,6]]},"3808":{"position":[[391,6]]}}}],["yield",{"_index":3105,"t":{"587":{"position":[[1969,5]]},"599":{"position":[[528,5]]}}}],["yourattribut",{"_index":6726,"t":{"2591":{"position":[[202,13]]}}}],["yourdbcontext",{"_index":2824,"t":{"526":{"position":[[141,13],[340,13],[383,13]]}}}],["yourdbcontextsavechangesinterceptor",{"_index":3796,"t":{"935":{"position":[[169,35]]}}}],["yourent",{"_index":3277,"t":{"655":{"position":[[354,10]]}}}],["yourenum",{"_index":5489,"t":{"1795":{"position":[[768,8],[2490,8]]},"3936":{"position":[[1139,8],[1523,8]]}}}],["youreventsourcestor",{"_index":5541,"t":{"1799":{"position":[[1057,21],[1173,21]]}}}],["yourjobexecutor",{"_index":8954,"t":{"3832":{"position":[[71,15],[101,15],[805,15],[925,15],[2000,15],[2126,15],[2725,15],[2889,15],[3761,15],[3887,15],[4486,15],[4650,15]]}}}],["yourjobmonitor",{"_index":8941,"t":{"3826":{"position":[[638,14],[688,14]]},"3828":{"position":[[73,14],[102,14],[158,14],[190,14],[213,14],[832,14],[914,14],[1005,14],[1228,14]]},"3832":{"position":[[875,14],[1068,14],[3248,14],[3354,14]]}}}],["yourjobpersist",{"_index":8944,"t":{"3826":{"position":[[742,18]]}}}],["yourkey",{"_index":8183,"t":{"3450":{"position":[[303,7]]}}}],["yourmodel",{"_index":4032,"t":{"1160":{"position":[[537,9],[1465,9]]},"1162":{"position":[[567,9],[1543,9]]}}}],["yournam",{"_index":7029,"t":{"2774":{"position":[[34,8],[58,8],[75,8],[131,8],[163,8],[196,8],[229,8],[246,8],[267,8],[288,8],[320,8],[342,8],[449,8],[480,8],[516,8]]},"2776":{"position":[[148,8]]}}}],["youropt",{"_index":6855,"t":{"2731":{"position":[[359,11],[416,11],[560,11]]}}}],["yourpoject",{"_index":7073,"t":{"2805":{"position":[[228,10]]},"2807":{"position":[[54,10],[79,10]]},"3704":{"position":[[79,10]]},"3924":{"position":[[3607,10]]}}}],["yourproject",{"_index":3485,"t":{"734":{"position":[[7881,11]]},"2379":{"position":[[626,11]]},"2653":{"position":[[52,11],[74,11],[156,11],[178,11]]},"2807":{"position":[[18,11],[209,11]]},"2881":{"position":[[854,11]]},"2901":{"position":[[132,11]]},"2905":{"position":[[217,11]]},"3071":{"position":[[263,11],[845,11],[872,11],[892,11],[928,11]]},"3434":{"position":[[145,11]]},"3452":{"position":[[518,11]]},"3458":{"position":[[232,11],[623,11]]},"3708":{"position":[[889,11]]},"3779":{"position":[[410,11],[425,11]]}}}],["yourrestfulresult",{"_index":8573,"t":{"3708":{"position":[[101,17],[609,17],[981,17],[1313,17],[1705,17],[2095,17],[2820,17],[3033,17],[3402,17],[3428,17],[3549,17]]},"3720":{"position":[[98,17]]}}}],["yourrestfulresultprovid",{"_index":8576,"t":{"3708":{"position":[[1017,25],[3827,25]]}}}],["yoursensitivedetectionprovid",{"_index":7065,"t":{"2796":{"position":[[57,30],[139,30]]},"2798":{"position":[[92,30]]}}}],["yourservic",{"_index":6851,"t":{"2731":{"position":[[259,11],[388,11]]},"3399":{"position":[[492,11]]},"3772":{"position":[[276,11],[365,11]]},"3834":{"position":[[92,11],[181,11]]}}}],["yourservicecompon",{"_index":2275,"t":{"353":{"position":[[202,20]]}}}],["yoursqlcommandprofilerinterceptor",{"_index":3797,"t":{"935":{"position":[[212,33]]}}}],["yoursqlconnectionprofilerinterceptor",{"_index":3795,"t":{"935":{"position":[[125,36]]}}}],["yourstartup",{"_index":7186,"t":{"2901":{"position":[[12,11],[45,11],[158,11]]}}}],["youruseridprovid",{"_index":7572,"t":{"3189":{"position":[[111,18],[340,18]]}}}],["yshop",{"_index":1496,"t":{"199":{"position":[[588,5]]}}}],["yuan",{"_index":6961,"t":{"2768":{"position":[[956,4]]}}}],["yyd",{"_index":4812,"t":{"1511":{"position":[[2782,4]]}}}],["yyyi",{"_index":5963,"t":{"2087":{"position":[[62,4]]},"2361":{"position":[[192,4],[284,4],[589,4]]},"2398":{"position":[[63,4],[231,4]]},"2400":{"position":[[94,4]]},"2402":{"position":[[165,4]]},"2406":{"position":[[308,4],[615,4]]},"2409":{"position":[[102,4]]},"2411":{"position":[[90,4]]},"2413":{"position":[[90,4]]},"2415":{"position":[[295,4]]},"2426":{"position":[[111,4]]},"2428":{"position":[[113,4]]},"2430":{"position":[[97,4]]},"2432":{"position":[[97,4]]},"2434":{"position":[[299,4],[636,4]]},"2438":{"position":[[167,4]]},"2440":{"position":[[203,4],[576,4]]},"2442":{"position":[[408,4],[640,4],[913,4],[1196,4],[1430,4],[1687,4],[1915,4]]},"2468":{"position":[[131,4]]},"2470":{"position":[[189,4]]},"2472":{"position":[[320,4]]},"2751":{"position":[[280,4]]},"3430":{"position":[[3745,4]]},"3432":{"position":[[1471,4],[1662,4],[1913,4],[4962,4]]}}}],["z",{"_index":3198,"t":{"615":{"position":[[388,1],[399,1]]},"1511":{"position":[[1201,1]]},"1635":{"position":[[220,1],[224,1]]}}}],["z0",{"_index":3067,"t":{"587":{"position":[[535,2],[623,2]]}}}],["z1000",{"_index":5729,"t":{"1855":{"position":[[251,5]]},"1859":{"position":[[218,5]]},"1865":{"position":[[144,5]]},"1873":{"position":[[89,5],[282,5],[393,5]]},"1875":{"position":[[283,5],[596,5]]},"2536":{"position":[[139,5],[213,5]]}}}],["za",{"_index":3066,"t":{"587":{"position":[[532,2],[620,2]]},"2559":{"position":[[12,2],[898,2]]}}}],["zack",{"_index":3504,"t":{"756":{"position":[[59,4]]},"759":{"position":[[6,4],[36,4],[74,4],[106,4],[138,4]]},"763":{"position":[[279,4],[397,4]]}}}],["zero",{"_index":8215,"t":{"3452":{"position":[[3167,4]]},"3916":{"position":[[6163,4]]}}}],["zh",{"_index":415,"t":{"51":{"position":[[132,2]]},"62":{"position":[[132,2]]},"75":{"position":[[132,2]]},"423":{"position":[[167,2]]},"461":{"position":[[115,2]]},"773":{"position":[[113,2]]},"1468":{"position":[[306,2]]},"1503":{"position":[[44,2]]},"1539":{"position":[[246,2]]},"1547":{"position":[[472,2]]},"1549":{"position":[[543,2]]},"1947":{"position":[[173,2]]},"1965":{"position":[[45,2]]},"2387":{"position":[[27,2]]},"2522":{"position":[[81,2],[131,2]]},"2555":{"position":[[61,2],[98,2],[118,2],[138,2],[158,2],[204,2]]},"2557":{"position":[[63,2]]},"2559":{"position":[[535,2],[553,2],[571,2],[583,2],[598,2],[611,2],[623,2]]},"2573":{"position":[[232,2]]},"2856":{"position":[[2003,2]]},"3033":{"position":[[51,2],[101,2]]},"3069":{"position":[[334,2]]},"3138":{"position":[[198,2]]},"3189":{"position":[[453,2]]},"3307":{"position":[[34,2]]},"3912":{"position":[[2094,2]]},"3934":{"position":[[2771,2],[2911,2]]}}}],["zhi",{"_index":6978,"t":{"2768":{"position":[[1212,3]]}}}],["zhihu",{"_index":6373,"t":{"2497":{"position":[[134,5]]},"2768":{"position":[[171,5],[540,5],[623,5],[834,5],[884,5],[929,5],[985,5],[1034,5],[1138,5],[1192,5],[1371,5]]}}}],["zhuanlan",{"_index":6372,"t":{"2497":{"position":[[125,8]]}}}],["zifu",{"_index":4969,"t":{"1539":{"position":[[260,4]]}}}],["zip",{"_index":3164,"t":{"606":{"position":[[400,3]]},"617":{"position":[[1114,3],[1137,3]]},"1483":{"position":[[600,3]]}}}],["zong",{"_index":6936,"t":{"2768":{"position":[[567,4]]}}}],["zw",{"_index":6533,"t":{"2559":{"position":[[961,2]]}}}],["zxf",{"_index":4406,"t":{"1483":{"position":[[415,3]]}}}],["zxvf",{"_index":4510,"t":{"1499":{"position":[[262,4]]}}}],["zzz",{"_index":8110,"t":{"3430":{"position":[[3773,3]]},"3432":{"position":[[4990,3]]}}}],["zzzname",{"_index":1564,"t":{"210":{"position":[[642,7]]}}}],["zzzproject",{"_index":3642,"t":{"846":{"position":[[1029,11]]},"879":{"position":[[99,11]]}}}],["一一",{"_index":1983,"t":{"300":{"position":[[278,2]]},"836":{"position":[[326,2]]},"1795":{"position":[[2843,2]]},"3458":{"position":[[432,2],[823,2]]}}}],["一一对应",{"_index":1979,"t":{"300":{"position":[[220,4]]},"1761":{"position":[[576,4]]}}}],["一下",{"_index":888,"t":{"121":{"position":[[268,2]]},"570":{"position":[[1659,2]]},"585":{"position":[[442,2]]},"734":{"position":[[86,2]]},"1511":{"position":[[1811,2],[1874,2],[3159,2],[3511,2],[3551,2],[4077,2]]},"2400":{"position":[[135,2]]},"3795":{"position":[[0,2]]}}}],["一个",{"_index":38,"t":{"3":{"position":[[313,2],[890,2]]},"5":{"position":[[54,2]]},"7":{"position":[[50,2]]},"9":{"position":[[88,2]]},"21":{"position":[[95,2]]},"23":{"position":[[77,2]]},"85":{"position":[[35,2]]},"95":{"position":[[54,2]]},"98":{"position":[[180,2]]},"110":{"position":[[1,2]]},"121":{"position":[[216,2],[542,2]]},"179":{"position":[[52,2]]},"188":{"position":[[2,2]]},"208":{"position":[[12,2]]},"210":{"position":[[79,2],[190,2]]},"245":{"position":[[35,2]]},"247":{"position":[[147,2],[191,2]]},"263":{"position":[[46,2]]},"267":{"position":[[27,2]]},"270":{"position":[[5,2]]},"274":{"position":[[144,2],[180,2],[236,2]]},"300":{"position":[[180,2]]},"338":{"position":[[1,2]]},"340":{"position":[[109,2],[121,2],[448,2],[1860,2],[1866,2]]},"353":{"position":[[35,2]]},"355":{"position":[[124,2],[172,2]]},"367":{"position":[[112,2]]},"373":{"position":[[98,2]]},"378":{"position":[[16,2],[76,2],[93,2]]},"384":{"position":[[82,2]]},"404":{"position":[[6,2],[30,2],[196,2],[217,2]]},"445":{"position":[[757,2]]},"469":{"position":[[9,2],[45,2],[50,2]]},"482":{"position":[[739,2],[934,2],[943,2]]},"494":{"position":[[394,2],[604,2]]},"522":{"position":[[61,2]]},"565":{"position":[[1,2]]},"585":{"position":[[394,2],[407,2],[478,2]]},"606":{"position":[[1372,2]]},"608":{"position":[[820,2]]},"685":{"position":[[428,2]]},"793":{"position":[[129,2]]},"807":{"position":[[44,2]]},"810":{"position":[[404,2]]},"812":{"position":[[436,2]]},"814":{"position":[[400,2]]},"816":{"position":[[432,2]]},"846":{"position":[[22,2],[24,2]]},"887":{"position":[[191,2]]},"911":{"position":[[5,2]]},"941":{"position":[[115,2]]},"947":{"position":[[101,2]]},"960":{"position":[[679,2]]},"988":{"position":[[12,2]]},"1046":{"position":[[15,2]]},"1068":{"position":[[40,2],[54,2]]},"1075":{"position":[[20,2]]},"1103":{"position":[[127,2]]},"1111":{"position":[[436,2]]},"1113":{"position":[[434,2]]},"1115":{"position":[[443,2]]},"1117":{"position":[[81,2],[1108,2],[1766,2],[2799,2],[3833,2],[4681,2]]},"1119":{"position":[[405,2]]},"1121":{"position":[[437,2]]},"1123":{"position":[[368,2]]},"1129":{"position":[[1759,2]]},"1149":{"position":[[32,2]]},"1221":{"position":[[26,2],[87,2]]},"1223":{"position":[[105,2]]},"1234":{"position":[[918,2]]},"1279":{"position":[[134,2]]},"1311":{"position":[[332,2]]},"1385":{"position":[[24,2]]},"1387":{"position":[[6,2]]},"1408":{"position":[[1084,2]]},"1412":{"position":[[6,2],[13,2]]},"1416":{"position":[[136,2],[350,2]]},"1424":{"position":[[397,2],[457,2]]},"1440":{"position":[[32,2]]},"1468":{"position":[[40,2]]},"1474":{"position":[[99,2]]},"1481":{"position":[[98,2]]},"1507":{"position":[[41,2]]},"1509":{"position":[[120,2]]},"1511":{"position":[[4,2],[762,2],[1099,2]]},"1520":{"position":[[198,2],[235,2]]},"1532":{"position":[[19,2],[65,2]]},"1539":{"position":[[1708,2]]},"1572":{"position":[[9,2]]},"1576":{"position":[[19,2],[119,2]]},"1580":{"position":[[309,2]]},"1584":{"position":[[2,2],[89,2],[524,2]]},"1623":{"position":[[145,2]]},"1631":{"position":[[637,2]]},"1711":{"position":[[341,2]]},"1717":{"position":[[25,2],[36,2]]},"1795":{"position":[[404,2],[669,2],[3083,2]]},"1811":{"position":[[101,2]]},"1815":{"position":[[415,2],[584,2]]},"1832":{"position":[[125,2]]},"1849":{"position":[[7,2]]},"1869":{"position":[[256,2]]},"1903":{"position":[[379,2],[458,2],[500,2],[564,2]]},"1941":{"position":[[959,2],[1011,2]]},"1947":{"position":[[58,2]]},"1955":{"position":[[41,2],[106,2]]},"2167":{"position":[[5,2]]},"2175":{"position":[[158,2]]},"2214":{"position":[[32,2]]},"2231":{"position":[[77,2]]},"2290":{"position":[[50,2]]},"2292":{"position":[[88,2]]},"2311":{"position":[[46,2]]},"2315":{"position":[[17,2]]},"2326":{"position":[[147,2],[158,2]]},"2333":{"position":[[108,2]]},"2341":{"position":[[88,2]]},"2354":{"position":[[12,2]]},"2404":{"position":[[18,2]]},"2411":{"position":[[170,2]]},"2418":{"position":[[9,2],[45,2],[50,2],[546,2],[1076,2],[1300,2],[1309,2]]},"2420":{"position":[[1885,2],[2082,2],[2132,2]]},"2442":{"position":[[72,2]]},"2454":{"position":[[32,2]]},"2472":{"position":[[379,2]]},"2474":{"position":[[35,2]]},"2486":{"position":[[73,2]]},"2497":{"position":[[2,2],[161,2]]},"2538":{"position":[[148,2]]},"2547":{"position":[[8,2]]},"2564":{"position":[[47,2],[60,2]]},"2569":{"position":[[102,2]]},"2577":{"position":[[277,2]]},"2579":{"position":[[550,2]]},"2581":{"position":[[21,2],[520,2],[586,2],[1047,2]]},"2587":{"position":[[433,2]]},"2589":{"position":[[608,2]]},"2599":{"position":[[9,2],[74,2]]},"2615":{"position":[[40,2]]},"2625":{"position":[[377,2]]},"2682":{"position":[[8,2],[27,2]]},"2684":{"position":[[9,2],[19,2],[341,2]]},"2701":{"position":[[42,2]]},"2740":{"position":[[27,2]]},"2768":{"position":[[1531,2]]},"2774":{"position":[[21,2]]},"2788":{"position":[[108,2]]},"2809":{"position":[[29,2]]},"2813":{"position":[[31,2]]},"2836":{"position":[[958,2]]},"2862":{"position":[[355,2]]},"2915":{"position":[[9,2],[13,2],[153,2]]},"2917":{"position":[[34,2],[48,2],[83,2]]},"2919":{"position":[[101,2]]},"2925":{"position":[[448,2]]},"2939":{"position":[[17,2],[25,2]]},"2941":{"position":[[448,2]]},"2953":{"position":[[17,2]]},"2955":{"position":[[448,2]]},"2969":{"position":[[90,2]]},"3063":{"position":[[1277,2]]},"3071":{"position":[[1145,2],[1156,2],[1162,2]]},"3080":{"position":[[19,2]]},"3092":{"position":[[80,2],[105,2],[150,2],[172,2]]},"3094":{"position":[[1,2],[31,2],[38,2]]},"3098":{"position":[[1,2]]},"3100":{"position":[[27,2]]},"3124":{"position":[[50,2]]},"3140":{"position":[[39,2]]},"3154":{"position":[[215,2],[531,2]]},"3156":{"position":[[15,2]]},"3168":{"position":[[78,2]]},"3189":{"position":[[17,2]]},"3215":{"position":[[2,2]]},"3224":{"position":[[2,2]]},"3244":{"position":[[5,2]]},"3282":{"position":[[63,2],[72,2],[170,2],[181,2],[206,2],[241,2]]},"3284":{"position":[[96,2]]},"3287":{"position":[[69,2]]},"3321":{"position":[[226,2]]},"3350":{"position":[[94,2],[108,2],[122,2],[127,2]]},"3352":{"position":[[162,2],[655,2]]},"3385":{"position":[[20,2]]},"3399":{"position":[[17,2]]},"3432":{"position":[[554,2],[1424,2]]},"3458":{"position":[[566,2]]},"3462":{"position":[[42,2]]},"3466":{"position":[[207,2],[374,2],[492,2],[609,2],[655,2]]},"3524":{"position":[[9,2]]},"3547":{"position":[[781,2]]},"3551":{"position":[[283,2],[507,2]]},"3553":{"position":[[262,2],[374,2]]},"3555":{"position":[[283,2],[413,2]]},"3557":{"position":[[285,2],[420,2]]},"3559":{"position":[[294,2],[444,2]]},"3579":{"position":[[43,2],[72,2]]},"3620":{"position":[[358,2]]},"3626":{"position":[[108,2],[491,2]]},"3638":{"position":[[4,2]]},"3678":{"position":[[99,2]]},"3686":{"position":[[549,2]]},"3702":{"position":[[186,2]]},"3706":{"position":[[1288,2]]},"3766":{"position":[[4,2]]},"3779":{"position":[[1370,2],[1769,2]]},"3783":{"position":[[52,2],[61,2]]},"3802":{"position":[[1988,2],[2544,2]]},"3806":{"position":[[99,2],[1350,2]]},"3817":{"position":[[2584,2]]},"3830":{"position":[[58,2],[123,2]]},"3914":{"position":[[1765,2],[1907,2],[2053,2]]},"3920":{"position":[[322,2],[1747,2]]},"3924":{"position":[[2582,2],[4623,2],[4761,2],[4852,2]]},"3926":{"position":[[32,2],[294,2],[300,2]]},"3928":{"position":[[148,2]]},"3930":{"position":[[815,2]]},"3938":{"position":[[42,2]]},"3944":{"position":[[328,2]]},"3962":{"position":[[1135,2]]},"3964":{"position":[[356,2]]},"3972":{"position":[[657,2],[660,2]]},"3974":{"position":[[26,2]]},"3984":{"position":[[986,2]]},"3986":{"position":[[1627,2],[1717,2]]},"3992":{"position":[[3932,2]]}}}],["一个个",{"_index":2329,"t":{"373":{"position":[[62,3]]}}}],["一个月",{"_index":4608,"t":{"1511":{"position":[[533,3]]}}}],["一个组",{"_index":1747,"t":{"237":{"position":[[1307,3]]}}}],["一些",{"_index":212,"t":{"13":{"position":[[10,2]]},"32":{"position":[[13,2]]},"331":{"position":[[1,2]]},"359":{"position":[[106,2]]},"365":{"position":[[47,2]]},"408":{"position":[[122,2]]},"445":{"position":[[94,2]]},"841":{"position":[[9,2]]},"1141":{"position":[[34,2],[70,2]]},"1483":{"position":[[998,2]]},"1574":{"position":[[47,2]]},"1661":{"position":[[22,2]]},"1745":{"position":[[2,2]]},"1755":{"position":[[1072,2]]},"1775":{"position":[[24,2]]},"1823":{"position":[[1,2]]},"2206":{"position":[[16,2]]},"2241":{"position":[[27,2]]},"2296":{"position":[[10,2]]},"2326":{"position":[[280,2]]},"2436":{"position":[[10,2]]},"2446":{"position":[[16,2]]},"2674":{"position":[[460,2]]},"2770":{"position":[[28,2]]},"2782":{"position":[[60,2]]},"2881":{"position":[[254,2]]},"3118":{"position":[[90,2],[133,2]]},"3170":{"position":[[33,2]]},"3301":{"position":[[47,2]]},"3337":{"position":[[81,2]]},"3352":{"position":[[115,2],[286,2],[305,2],[503,2],[533,2],[563,2]]},"3387":{"position":[[15,2]]},"3389":{"position":[[378,2]]},"3391":{"position":[[270,2]]},"3393":{"position":[[411,2]]},"3587":{"position":[[1,2]]},"3686":{"position":[[64,2]]},"3706":{"position":[[18,2]]},"3716":{"position":[[34,2]]},"3768":{"position":[[51,2]]},"3783":{"position":[[17,2]]},"3856":{"position":[[23,2]]},"3922":{"position":[[479,2]]},"3934":{"position":[[833,2]]},"3992":{"position":[[3947,2]]}}}],["一件",{"_index":2239,"t":{"340":{"position":[[1879,2]]},"353":{"position":[[45,2]]},"3622":{"position":[[195,2]]}}}],["一份",{"_index":6998,"t":{"2770":{"position":[[56,2]]},"3118":{"position":[[169,2],[263,2]]}}}],["一位",{"_index":679,"t":{"106":{"position":[[61,2]]},"482":{"position":[[479,2]]},"2418":{"position":[[774,2]]}}}],["一共",{"_index":6294,"t":{"2409":{"position":[[146,2]]},"2411":{"position":[[134,2]]},"2413":{"position":[[134,2]]},"2415":{"position":[[339,2]]},"2426":{"position":[[155,2]]},"2428":{"position":[[157,2]]},"2430":{"position":[[141,2]]},"2432":{"position":[[141,2]]},"2434":{"position":[[343,2],[680,2]]},"2438":{"position":[[211,2]]},"2440":{"position":[[247,2],[620,2]]},"2442":{"position":[[452,2],[684,2],[957,2],[1240,2],[1474,2],[1731,2],[1959,2]]},"2470":{"position":[[233,2]]}}}],["一分钟",{"_index":6310,"t":{"2420":{"position":[[613,3],[1335,3]]},"3345":{"position":[[241,3]]},"3944":{"position":[[894,3]]},"3946":{"position":[[443,3]]},"3994":{"position":[[1604,3]]},"3998":{"position":[[767,3]]},"4000":{"position":[[1212,3]]},"4004":{"position":[[589,3]]}}}],["一切",{"_index":479,"t":{"85":{"position":[[116,2]]},"1570":{"position":[[61,2]]}}}],["一半",{"_index":1998,"t":{"302":{"position":[[163,2]]}}}],["一句",{"_index":3906,"t":{"1048":{"position":[[104,2]]},"2564":{"position":[[104,2]]},"2881":{"position":[[299,2]]}}}],["一台",{"_index":7222,"t":{"2912":{"position":[[96,2]]},"3088":{"position":[[102,2]]}}}],["一周",{"_index":9084,"t":{"3912":{"position":[[1805,2]]}}}],["一周年",{"_index":2408,"t":{"399":{"position":[[815,3]]}}}],["一块",{"_index":6748,"t":{"2615":{"position":[[29,2],[31,2]]}}}],["一堆",{"_index":7959,"t":{"3352":{"position":[[323,2]]}}}],["一天",{"_index":2704,"t":{"482":{"position":[[880,2]]},"2326":{"position":[[270,2]]},"2418":{"position":[[1242,2]]},"2420":{"position":[[1345,2],[1936,2],[1983,2]]}}}],["一套",{"_index":3011,"t":{"579":{"position":[[32,2]]},"941":{"position":[[177,2]]},"2784":{"position":[[12,2]]},"2794":{"position":[[14,2]]},"2912":{"position":[[161,2],[198,2]]},"2915":{"position":[[158,2],[163,2]]},"3612":{"position":[[96,2]]},"3722":{"position":[[49,2]]},"3912":{"position":[[76,2]]}}}],["一定",{"_index":3020,"t":{"581":{"position":[[58,2]]},"1097":{"position":[[10,2],[24,2]]},"1307":{"position":[[18,2]]},"1389":{"position":[[219,2]]},"1495":{"position":[[1252,2]]},"1497":{"position":[[246,2]]},"1516":{"position":[[14,2]]},"1761":{"position":[[565,2]]},"1969":{"position":[[190,2]]},"1983":{"position":[[102,2]]},"2006":{"position":[[102,2]]},"2326":{"position":[[153,2]]},"2395":{"position":[[137,2]]},"2770":{"position":[[121,2]]},"2917":{"position":[[121,2],[212,2]]},"3088":{"position":[[9,2]]},"3096":{"position":[[68,2]]},"3414":{"position":[[320,2]]},"3581":{"position":[[6,2]]}}}],["一对",{"_index":3643,"t":{"851":{"position":[[622,2]]},"855":{"position":[[82,2],[100,2]]},"1149":{"position":[[9,2]]},"1619":{"position":[[28,2]]}}}],["一对一",{"_index":3654,"t":{"855":{"position":[[64,3],[76,3]]},"857":{"position":[[60,3],[72,3]]},"945":{"position":[[96,3]]}}}],["一层",{"_index":2540,"t":{"441":{"position":[[78,2]]}}}],["一岁",{"_index":9393,"t":{"3926":{"position":[[217,2]]}}}],["一年",{"_index":9522,"t":{"3934":{"position":[[2104,2]]}}}],["一张",{"_index":4133,"t":{"1358":{"position":[[16,2]]},"2919":{"position":[[115,2]]},"3094":{"position":[[171,2]]},"3102":{"position":[[4,2]]},"3106":{"position":[[12,2]]}}}],["一把",{"_index":7952,"t":{"3352":{"position":[[185,2]]}}}],["一抹",{"_index":4748,"t":{"1511":{"position":[[2107,2]]}}}],["一旦",{"_index":1612,"t":{"220":{"position":[[74,2]]},"300":{"position":[[254,2],[285,2]]},"359":{"position":[[46,2]]},"453":{"position":[[36,2]]},"612":{"position":[[59,2]]},"1139":{"position":[[5,2]]},"1223":{"position":[[49,2],[227,2]]},"1392":{"position":[[92,2],[180,2]]},"1759":{"position":[[5,2]]},"1783":{"position":[[141,2]]},"2245":{"position":[[19,2]]},"2921":{"position":[[61,2]]},"3282":{"position":[[245,2]]},"3294":{"position":[[33,2]]},"3352":{"position":[[140,2]]},"3982":{"position":[[226,2]]}}}],["一条",{"_index":5163,"t":{"1631":{"position":[[576,2]]},"1661":{"position":[[1359,2]]},"1703":{"position":[[161,2]]},"1711":{"position":[[240,2]]},"1799":{"position":[[370,2],[544,2]]},"1801":{"position":[[2765,2],[2961,2]]},"1803":{"position":[[4737,2],[4933,2]]},"1832":{"position":[[113,2]]},"2919":{"position":[[92,2]]},"3023":{"position":[[1356,2]]},"3426":{"position":[[78,2]]},"3984":{"position":[[905,2]]}}}],["一来",{"_index":7969,"t":{"3352":{"position":[[440,2]]}}}],["一样",{"_index":323,"t":{"19":{"position":[[836,2]]},"135":{"position":[[16,2]]},"218":{"position":[[100,2]]},"220":{"position":[[68,2]]},"261":{"position":[[53,2]]},"267":{"position":[[41,2]]},"272":{"position":[[264,2]]},"572":{"position":[[1273,2]]},"585":{"position":[[531,2]]},"615":{"position":[[1117,2]]},"855":{"position":[[90,2]]},"857":{"position":[[86,2]]},"935":{"position":[[45,2]]},"1037":{"position":[[316,2]]},"1073":{"position":[[10,2]]},"1194":{"position":[[51,2]]},"1396":{"position":[[93,2]]},"1440":{"position":[[638,2]]},"1511":{"position":[[59,2]]},"1545":{"position":[[29,2]]},"1549":{"position":[[306,2]]},"1659":{"position":[[1308,2]]},"1663":{"position":[[257,2]]},"1909":{"position":[[161,2]]},"2615":{"position":[[26,2]]},"2735":{"position":[[76,2]]},"3150":{"position":[[55,2],[79,2]]},"3168":{"position":[[89,2]]},"3620":{"position":[[9,2]]},"3626":{"position":[[137,2]]},"3644":{"position":[[1308,2]]},"3922":{"position":[[532,2],[605,2]]},"3936":{"position":[[1655,2]]},"3954":{"position":[[458,2]]}}}],["一根",{"_index":4622,"t":{"1511":{"position":[[644,2]]}}}],["一模一样",{"_index":3336,"t":{"685":{"position":[[331,4]]},"1068":{"position":[[101,4]]}}}],["一次",{"_index":496,"t":{"85":{"position":[[185,2]]},"179":{"position":[[87,2]]},"220":{"position":[[116,2]]},"482":{"position":[[565,2],[592,2],[622,2],[638,2],[690,2]]},"841":{"position":[[115,2]]},"1026":{"position":[[179,2]]},"1103":{"position":[[70,2]]},"1401":{"position":[[23,2]]},"1440":{"position":[[662,2]]},"1566":{"position":[[659,2]]},"1707":{"position":[[69,2]]},"1711":{"position":[[40,2]]},"2208":{"position":[[105,2]]},"2247":{"position":[[28,2]]},"2393":{"position":[[80,2],[140,2],[200,2]]},"2398":{"position":[[134,2]]},"2418":{"position":[[865,2],[894,2],[929,2],[945,2],[1003,2]]},"2420":{"position":[[1384,2],[2285,2]]},"2424":{"position":[[96,2],[134,2],[166,2],[192,2],[221,2],[252,2],[287,2],[322,2],[359,2]]},"2430":{"position":[[181,2]]},"2432":{"position":[[181,2]]},"2436":{"position":[[30,2]]},"2442":{"position":[[985,2],[994,2],[1267,2]]},"2444":{"position":[[150,2]]},"2448":{"position":[[105,2]]},"2466":{"position":[[38,2],[56,2]]},"2829":{"position":[[30,2],[44,2]]},"3242":{"position":[[237,2]]},"3284":{"position":[[11,2],[87,2]]},"3287":{"position":[[63,2]]},"3296":{"position":[[17,2]]},"3636":{"position":[[733,2]]},"3688":{"position":[[70,2]]},"3766":{"position":[[26,2],[36,2],[53,2]]},"3768":{"position":[[27,2],[66,2]]},"3791":{"position":[[1341,2]]},"3798":{"position":[[410,2],[666,2]]},"3800":{"position":[[298,2]]},"3806":{"position":[[1798,2]]},"3808":{"position":[[3247,2]]},"3810":{"position":[[718,2],[1018,2]]},"3910":{"position":[[234,2]]},"3924":{"position":[[2712,2]]},"3926":{"position":[[562,2]]},"3928":{"position":[[269,2]]},"3934":{"position":[[2415,2]]},"3974":{"position":[[284,2]]}}}],["一次性",{"_index":2609,"t":{"459":{"position":[[5,3]]},"1511":{"position":[[84,3]]},"1539":{"position":[[1647,3]]},"2703":{"position":[[77,3]]}}}],["一款",{"_index":6803,"t":{"2684":{"position":[[493,2]]}}}],["一步",{"_index":2065,"t":{"312":{"position":[[13,2]]},"1495":{"position":[[1277,2]]},"3414":{"position":[[312,2]]}}}],["一步到位",{"_index":4171,"t":{"1379":{"position":[[47,4]]}}}],["一段",{"_index":6275,"t":{"2393":{"position":[[94,2]]},"3414":{"position":[[169,2]]},"3694":{"position":[[136,2]]},"3781":{"position":[[370,2]]},"3808":{"position":[[3333,2]]},"3938":{"position":[[1300,2]]}}}],["一点",{"_index":2705,"t":{"482":{"position":[[895,2]]},"2418":{"position":[[1257,2]]},"2591":{"position":[[42,2]]},"2727":{"position":[[8,2]]}}}],["一片",{"_index":4854,"t":{"1511":{"position":[[3482,2],[3614,2]]}}}],["一直",{"_index":4880,"t":{"1511":{"position":[[3895,2]]},"2438":{"position":[[295,2]]},"2440":{"position":[[329,2]]},"2817":{"position":[[99,2],[127,2],[239,2],[267,2]]},"3078":{"position":[[100,2]]},"3950":{"position":[[393,2]]},"3982":{"position":[[815,2]]},"3992":{"position":[[2082,2]]}}}],["一眼",{"_index":4226,"t":{"1392":{"position":[[41,2]]}}}],["一种",{"_index":836,"t":{"119":{"position":[[7,2],[144,2]]},"179":{"position":[[19,2]]},"261":{"position":[[18,2],[24,2]]},"319":{"position":[[21,2],[35,2]]},"363":{"position":[[8,2]]},"404":{"position":[[99,2],[184,2]]},"408":{"position":[[17,2]]},"903":{"position":[[41,2]]},"1046":{"position":[[58,2]]},"1068":{"position":[[6,2]]},"1125":{"position":[[8,2]]},"1286":{"position":[[66,2]]},"1389":{"position":[[125,2]]},"1580":{"position":[[57,2]]},"1697":{"position":[[14,2],[21,2],[60,2]]},"1699":{"position":[[16,2]]},"1793":{"position":[[14,2],[21,2],[60,2]]},"1832":{"position":[[44,2]]},"1961":{"position":[[79,2],[128,2]]},"2341":{"position":[[44,2],[196,2]]},"2564":{"position":[[4,2]]},"2585":{"position":[[13,2],[25,2]]},"2615":{"position":[[10,2]]},"2731":{"position":[[170,2]]},"2910":{"position":[[71,2],[187,2]]},"2912":{"position":[[23,2],[141,2]]},"3142":{"position":[[22,2]]},"3150":{"position":[[4,2]]},"3966":{"position":[[1424,2]]},"3974":{"position":[[751,2]]}}}],["一秒",{"_index":6340,"t":{"2442":{"position":[[252,2]]},"3954":{"position":[[623,2]]}}}],["一秒钟",{"_index":6327,"t":{"2424":{"position":[[92,3]]}}}],["一类",{"_index":10152,"t":{"3988":{"position":[[350,2]]}}}],["一系列",{"_index":7830,"t":{"3282":{"position":[[16,3]]},"3284":{"position":[[24,3]]},"3626":{"position":[[326,3]]},"3924":{"position":[[149,3]]},"3944":{"position":[[89,3]]},"3968":{"position":[[165,3]]},"3974":{"position":[[105,3]]}}}],["一级",{"_index":4499,"t":{"1495":{"position":[[1307,2],[1309,2]]},"3942":{"position":[[76,2]]}}}],["一组",{"_index":3950,"t":{"1103":{"position":[[41,2]]},"2517":{"position":[[31,2]]}}}],["一致",{"_index":1293,"t":{"182":{"position":[[202,2]]},"447":{"position":[[30,2]]},"550":{"position":[[619,2]]},"585":{"position":[[297,2]]},"698":{"position":[[1074,2]]},"919":{"position":[[21,2]]},"1194":{"position":[[452,2]]},"1196":{"position":[[30,2]]},"1198":{"position":[[39,2]]},"1200":{"position":[[246,2]]},"1379":{"position":[[679,2]]},"1741":{"position":[[1723,2],[2514,2]]},"1761":{"position":[[254,2]]},"1973":{"position":[[127,2]]},"1987":{"position":[[127,2]]},"2010":{"position":[[135,2]]},"2790":{"position":[[107,2]]},"2862":{"position":[[389,2]]},"3405":{"position":[[52,2]]},"3622":{"position":[[32,2]]},"3626":{"position":[[49,2]]},"3918":{"position":[[3630,2]]},"3924":{"position":[[2780,2]]},"3934":{"position":[[671,2]]},"3992":{"position":[[1466,2]]},"4000":{"position":[[698,2],[1075,2]]}}}],["一致性",{"_index":1761,"t":{"239":{"position":[[159,3]]},"1050":{"position":[[66,3]]},"3104":{"position":[[63,3]]},"3106":{"position":[[66,3]]},"3112":{"position":[[0,3]]},"3116":{"position":[[20,3],[26,3]]},"3118":{"position":[[192,3]]},"3282":{"position":[[138,3],[172,3],[183,3]]},"3626":{"position":[[474,3]]}}}],["一般",{"_index":156,"t":{"11":{"position":[[655,2]]},"384":{"position":[[68,2]]},"565":{"position":[[96,2]]},"1691":{"position":[[378,2]]},"1832":{"position":[[2,2]]},"2294":{"position":[[684,2]]},"2912":{"position":[[51,2]]},"2915":{"position":[[251,2]]},"3094":{"position":[[17,2]]},"3100":{"position":[[54,2]]},"3102":{"position":[[0,2]]},"3108":{"position":[[0,2]]},"3273":{"position":[[801,2]]}}}],["一般来说",{"_index":3855,"t":{"986":{"position":[[81,4]]},"3350":{"position":[[63,4]]}}}],["一行",{"_index":3687,"t":{"877":{"position":[[1133,2]]},"1555":{"position":[[30,2]]},"1977":{"position":[[365,2]]},"1979":{"position":[[702,2]]},"2688":{"position":[[66,2]]},"2788":{"position":[[104,2]]},"3277":{"position":[[41,2]]},"3910":{"position":[[1558,2]]}}}],["一贯",{"_index":7006,"t":{"2770":{"position":[[156,2]]}}}],["一起",{"_index":1109,"t":{"144":{"position":[[585,2]]},"206":{"position":[[116,2]]},"233":{"position":[[331,2]]},"1286":{"position":[[32,2]]},"1641":{"position":[[253,2],[297,2]]},"2617":{"position":[[16,2],[34,2]]},"3624":{"position":[[101,2]]},"3928":{"position":[[361,2]]}}}],["一路",{"_index":4693,"t":{"1511":{"position":[[1388,2]]},"3242":{"position":[[64,2]]},"3910":{"position":[[61,2]]},"3926":{"position":[[165,2]]},"3934":{"position":[[2158,2]]}}}],["一轮",{"_index":8848,"t":{"3800":{"position":[[199,2]]}}}],["一边",{"_index":2966,"t":{"570":{"position":[[775,2]]}}}],["一部分",{"_index":5217,"t":{"1672":{"position":[[23,3]]}}}],["一键",{"_index":9581,"t":{"3942":{"position":[[73,2]]},"3992":{"position":[[887,2]]}}}],["一面",{"_index":1179,"t":{"166":{"position":[[10,2]]},"3242":{"position":[[188,2]]},"3910":{"position":[[185,2]]},"3934":{"position":[[2354,2]]}}}],["一项",{"_index":2454,"t":{"408":{"position":[[44,2]]},"1509":{"position":[[96,2]]},"3620":{"position":[[340,2]]}}}],["七",{"_index":3296,"t":{"665":{"position":[[406,1],[996,1]]},"667":{"position":[[424,1],[1038,1]]},"669":{"position":[[406,1],[996,1]]},"671":{"position":[[424,1],[1038,1]]},"956":{"position":[[428,1],[1295,1]]},"960":{"position":[[867,1]]},"1160":{"position":[[658,1],[1597,1]]},"1162":{"position":[[694,1],[1681,1]]}}}],["七个",{"_index":3983,"t":{"1117":{"position":[[733,2],[1523,2],[2436,2],[3469,2],[4401,2]]}}}],["七色",{"_index":4881,"t":{"1511":{"position":[[3904,2]]}}}],["万",{"_index":2406,"t":{"399":{"position":[[733,1]]},"401":{"position":[[298,1],[426,1]]},"1509":{"position":[[44,1]]}}}],["万里",{"_index":4649,"t":{"1511":{"position":[[896,2]]}}}],["三",{"_index":1960,"t":{"294":{"position":[[42,1]]},"300":{"position":[[48,1],[58,1]]},"350":{"position":[[494,1]]},"455":{"position":[[698,1]]},"645":{"position":[[125,1],[319,1]]},"647":{"position":[[74,1]]},"649":{"position":[[120,1],[305,1]]},"651":{"position":[[126,1],[320,1]]},"665":{"position":[[153,1],[699,1]]},"667":{"position":[[159,1],[729,1]]},"669":{"position":[[153,1],[699,1]]},"671":{"position":[[159,1],[729,1]]},"779":{"position":[[77,1]]},"795":{"position":[[102,1],[375,1]]},"853":{"position":[[137,1]]},"866":{"position":[[287,1]]},"881":{"position":[[265,1]]},"954":{"position":[[112,1],[290,1]]},"956":{"position":[[160,1],[983,1]]},"958":{"position":[[115,1]]},"960":{"position":[[142,1]]},"965":{"position":[[117,1],[433,1]]},"967":{"position":[[115,1],[435,1]]},"969":{"position":[[107,1],[420,1]]},"971":{"position":[[107,1],[420,1]]},"973":{"position":[[138,1],[356,1]]},"975":{"position":[[146,1],[376,1]]},"979":{"position":[[126,1]]},"1160":{"position":[[174,1],[1069,1]]},"1162":{"position":[[186,1],[1129,1]]},"1164":{"position":[[259,1],[686,1]]},"1166":{"position":[[315,1],[865,1]]},"1168":{"position":[[201,1],[508,1]]},"1170":{"position":[[317,1],[835,1]]},"1173":{"position":[[147,1],[389,1]]},"1175":{"position":[[159,1],[419,1]]},"1177":{"position":[[147,1],[389,1]]},"1179":{"position":[[182,1],[645,1]]},"1181":{"position":[[194,1],[494,1]]},"1183":{"position":[[194,1],[557,1]]},"1185":{"position":[[909,1],[1305,1]]},"1188":{"position":[[135,1],[412,1]]},"1190":{"position":[[141,1],[429,1]]},"1325":{"position":[[77,1]]},"1329":{"position":[[169,1],[661,1]]},"1331":{"position":[[175,1],[682,1]]},"1333":{"position":[[169,1],[661,1]]},"1335":{"position":[[175,1],[685,1]]},"1341":{"position":[[181,1],[483,1]]},"1343":{"position":[[187,1],[498,1]]},"1345":{"position":[[181,1],[483,1]]},"1347":{"position":[[187,1],[498,1]]},"1349":{"position":[[120,1],[305,1]]},"1351":{"position":[[126,1],[320,1]]},"1511":{"position":[[3687,1]]},"1539":{"position":[[79,1]]},"1543":{"position":[[240,1]]},"1633":{"position":[[187,1]]},"1907":{"position":[[565,1]]},"2603":{"position":[[189,1]]},"3273":{"position":[[427,1]]},"3291":{"position":[[10,1]]},"3432":{"position":[[131,1],[1102,1],[1608,1]]},"3434":{"position":[[1166,1]]},"3466":{"position":[[396,1]]},"3924":{"position":[[4783,1]]}}}],["三个",{"_index":1004,"t":{"127":{"position":[[1412,2]]},"565":{"position":[[103,2]]},"567":{"position":[[33,2],[43,2],[50,2],[379,2]]},"647":{"position":[[194,2],[255,2]]},"933":{"position":[[33,2],[43,2],[50,2],[379,2]]},"945":{"position":[[15,2]]},"1117":{"position":[[257,2],[1217,2],[1948,2],[2981,2],[3981,2]]},"1405":{"position":[[11,2],[110,2]]},"1440":{"position":[[440,2]]},"1539":{"position":[[1875,2]]},"2557":{"position":[[27,2]]},"2817":{"position":[[27,2],[38,2]]},"3636":{"position":[[62,2]]}}}],["三元",{"_index":3851,"t":{"981":{"position":[[30,2],[43,2]]}}}],["三十天",{"_index":1107,"t":{"144":{"position":[[370,3]]}}}],["三次",{"_index":5655,"t":{"1809":{"position":[[315,2]]},"1819":{"position":[[711,2]]}}}],["三百万",{"_index":7725,"t":{"3242":{"position":[[47,3]]},"3910":{"position":[[44,3]]}}}],["三种",{"_index":2798,"t":{"518":{"position":[[503,2]]},"1271":{"position":[[11,2]]},"2544":{"position":[[10,2]]},"2919":{"position":[[135,2]]},"2921":{"position":[[13,2],[39,2]]},"3395":{"position":[[9,2],[17,2]]},"3539":{"position":[[19,2]]},"3770":{"position":[[1721,2]]}}}],["三者",{"_index":2428,"t":{"404":{"position":[[24,2]]}}}],["三重",{"_index":4657,"t":{"1511":{"position":[[992,2]]}}}],["上下文",{"_index":341,"t":{"21":{"position":[[60,3]]},"23":{"position":[[42,3]]},"340":{"position":[[1915,3]]},"344":{"position":[[322,3]]},"346":{"position":[[384,3]]},"348":{"position":[[348,3]]},"367":{"position":[[101,3],[117,3]]},"500":{"position":[[8,3],[98,3]]},"502":{"position":[[137,3],[142,3]]},"506":{"position":[[211,3]]},"510":{"position":[[447,3],[519,3],[562,3]]},"514":{"position":[[313,3],[487,3]]},"516":{"position":[[569,3],[595,3],[656,3],[699,3],[722,3]]},"522":{"position":[[21,3],[66,3]]},"524":{"position":[[3,3],[27,3],[518,3]]},"528":{"position":[[16,3],[172,3],[229,3],[285,3],[408,3]]},"530":{"position":[[569,3]]},"534":{"position":[[22,3],[111,3]]},"536":{"position":[[38,3]]},"570":{"position":[[727,3]]},"572":{"position":[[1230,3]]},"698":{"position":[[78,3],[203,3],[234,3],[932,3]]},"706":{"position":[[236,3],[269,3]]},"743":{"position":[[39,3]]},"747":{"position":[[664,3],[714,3]]},"903":{"position":[[16,3],[54,3]]},"911":{"position":[[207,3]]},"915":{"position":[[440,3]]},"924":{"position":[[184,3]]},"933":{"position":[[555,3]]},"935":{"position":[[17,3]]},"939":{"position":[[9,3],[20,3],[71,3],[83,3]]},"941":{"position":[[6,3],[90,3],[120,3],[140,3],[221,3]]},"943":{"position":[[16,3]]},"945":{"position":[[5,3],[80,3],[90,3],[115,3],[124,3]]},"947":{"position":[[46,3],[60,3],[106,3],[536,3],[603,3]]},"949":{"position":[[5,3],[61,3],[330,3]]},"1035":{"position":[[30,3]]},"1039":{"position":[[569,3]]},"1052":{"position":[[46,3]]},"1054":{"position":[[131,3]]},"1056":{"position":[[150,3],[408,3],[427,3],[463,3],[549,3]]},"1202":{"position":[[33,3]]},"1277":{"position":[[192,3]]},"1311":{"position":[[337,3],[534,3]]},"1313":{"position":[[491,3]]},"1317":{"position":[[313,3],[440,3]]},"1319":{"position":[[237,3],[270,3]]},"1418":{"position":[[248,3]]},"1434":{"position":[[95,3]]},"1807":{"position":[[74,3]]},"2231":{"position":[[42,3]]},"2476":{"position":[[114,3]]},"2478":{"position":[[224,3]]},"2831":{"position":[[563,3]]},"2921":{"position":[[67,3]]},"2925":{"position":[[453,3],[494,3]]},"2933":{"position":[[10,3]]},"2937":{"position":[[990,3]]},"2941":{"position":[[453,3],[494,3]]},"2943":{"position":[[447,3]]},"2949":{"position":[[10,3]]},"2951":{"position":[[10,3]]},"2955":{"position":[[453,3],[494,3]]},"2963":{"position":[[10,3]]},"2973":{"position":[[13,3]]},"3126":{"position":[[157,3],[273,3]]},"3215":{"position":[[464,3]]},"3289":{"position":[[174,3]]},"3291":{"position":[[1740,3]]},"3466":{"position":[[1113,3],[1345,3],[1481,3],[1579,3],[1687,3]]},"3793":{"position":[[20,3]]},"3914":{"position":[[1598,3],[1635,3],[1662,3],[2413,3],[2554,3]]},"3916":{"position":[[1294,3],[2440,3]]},"3918":{"position":[[3547,3]]},"3922":{"position":[[1299,3],[2084,3]]},"3924":{"position":[[290,3],[4518,3]]},"3940":{"position":[[412,3]]},"3950":{"position":[[730,3]]},"3952":{"position":[[770,3]]},"3962":{"position":[[211,3],[1727,3],[2005,3]]},"3968":{"position":[[509,3]]},"3970":{"position":[[391,3]]},"3972":{"position":[[512,3]]},"3974":{"position":[[366,3]]},"3978":{"position":[[766,3],[1352,3]]},"3980":{"position":[[582,3]]},"3982":{"position":[[222,3],[229,3],[240,3]]},"3986":{"position":[[925,3],[1210,3]]},"3990":{"position":[[474,3]]},"3994":{"position":[[179,3],[382,3],[811,3],[1591,3],[1712,3]]},"3996":{"position":[[500,3],[539,3],[1526,3]]},"3998":{"position":[[696,3]]},"4000":{"position":[[32,3],[101,3],[264,3]]},"4002":{"position":[[392,3]]},"4004":{"position":[[351,3],[580,3]]},"4006":{"position":[[754,3]]}}}],["上传",{"_index":314,"t":{"19":{"position":[[710,2]]},"1551":{"position":[[69,2],[149,2]]},"1741":{"position":[[446,2],[2001,2],[2055,2]]},"2619":{"position":[[82,2]]},"3522":{"position":[[94,2],[876,2],[887,2]]},"3563":{"position":[[91,2]]},"3916":{"position":[[1263,2],[7066,2],[7088,2],[7693,2]]},"3930":{"position":[[1281,2]]},"3934":{"position":[[796,2]]},"3938":{"position":[[757,2]]},"3940":{"position":[[13,2],[503,2],[740,2]]},"3942":{"position":[[501,2]]},"3948":{"position":[[269,2]]},"3950":{"position":[[707,2]]},"3966":{"position":[[867,2]]},"3994":{"position":[[1692,2]]},"4000":{"position":[[1039,2]]}}}],["上传下载",{"_index":5376,"t":{"1737":{"position":[[9,4],[32,4]]},"3992":{"position":[[2796,4]]}}}],["上午",{"_index":6309,"t":{"2420":{"position":[[511,2],[592,2],[1938,2],[2036,2],[2088,2],[2137,2],[2186,2],[2238,2]]},"2424":{"position":[[244,2]]}}}],["上去",{"_index":7966,"t":{"3352":{"position":[[399,2]]}}}],["上游",{"_index":6704,"t":{"2564":{"position":[[123,2]]}}}],["上级",{"_index":2309,"t":{"367":{"position":[[58,2]]},"877":{"position":[[493,2],[566,2]]}}}],["上线",{"_index":1265,"t":{"182":{"position":[[51,2]]},"3352":{"position":[[168,2],[181,2],[215,2]]},"3395":{"position":[[39,2]]},"3992":{"position":[[3809,2]]}}}],["上述",{"_index":2538,"t":{"441":{"position":[[38,2]]},"1379":{"position":[[675,2]]},"1576":{"position":[[288,2]]},"1639":{"position":[[2,2]]},"1915":{"position":[[3,2]]},"1921":{"position":[[3,2]]},"1929":{"position":[[3,2]]},"1937":{"position":[[3,2]]},"1945":{"position":[[3,2]]},"2749":{"position":[[2,2]]},"3071":{"position":[[198,2]]},"3080":{"position":[[4,2],[69,2]]},"3275":{"position":[[396,2]]},"3430":{"position":[[1475,2]]},"3706":{"position":[[2,2]]}}}],["上限",{"_index":1698,"t":{"233":{"position":[[362,2]]},"2311":{"position":[[413,2]]}}}],["上面",{"_index":1709,"t":{"235":{"position":[[2,2]]},"237":{"position":[[1321,2]]},"312":{"position":[[2,2]]},"570":{"position":[[2662,2]]},"585":{"position":[[373,2]]},"587":{"position":[[722,2]]},"685":{"position":[[414,2]]},"717":{"position":[[10,2]]},"1151":{"position":[[469,2]]},"1196":{"position":[[28,2]]},"1198":{"position":[[37,2]]},"1279":{"position":[[837,2]]},"1408":{"position":[[1127,2]]},"1440":{"position":[[255,2],[398,2],[532,2],[635,2]]},"1596":{"position":[[248,2]]},"1627":{"position":[[67,2]]},"1631":{"position":[[355,2]]},"1707":{"position":[[1,2]]},"1761":{"position":[[511,2]]},"1775":{"position":[[3827,2]]},"1781":{"position":[[397,2]]},"1785":{"position":[[44,2]]},"1847":{"position":[[2,2]]},"1867":{"position":[[721,2]]},"1913":{"position":[[1450,2]]},"1919":{"position":[[903,2]]},"1925":{"position":[[1628,2]]},"1927":{"position":[[951,2]]},"1933":{"position":[[1071,2]]},"1935":{"position":[[572,2]]},"1941":{"position":[[1316,2]]},"1943":{"position":[[516,2]]},"2272":{"position":[[426,2]]},"2326":{"position":[[115,2]]},"2442":{"position":[[2,2]]},"2503":{"position":[[130,2]]},"2528":{"position":[[2,2]]},"2674":{"position":[[169,2]]},"2684":{"position":[[289,2]]},"2686":{"position":[[38,2]]},"2937":{"position":[[2,2],[95,2]]},"3100":{"position":[[0,2]]},"3254":{"position":[[1225,2]]},"3267":{"position":[[401,2]]},"3323":{"position":[[498,2]]},"3375":{"position":[[0,2]]},"3391":{"position":[[2,2]]},"3403":{"position":[[26,2]]},"3583":{"position":[[42,2]]},"3692":{"position":[[64,2]]},"3698":{"position":[[324,2]]},"3716":{"position":[[304,2],[401,2],[520,2],[665,2]]},"3819":{"position":[[1511,2]]},"3938":{"position":[[1012,2]]}}}],["下划线",{"_index":8521,"t":{"3698":{"position":[[274,3]]},"3779":{"position":[[1314,3],[1931,3]]},"3802":{"position":[[1932,3],[2708,3]]},"3817":{"position":[[2528,3]]},"3936":{"position":[[324,3]]}}}],["下列",{"_index":2033,"t":{"308":{"position":[[492,2]]},"455":{"position":[[962,2]]},"655":{"position":[[25,2]]},"1582":{"position":[[64,2]]},"1941":{"position":[[1020,2]]},"2243":{"position":[[0,2]]},"2512":{"position":[[22,2]]},"2587":{"position":[[525,2]]},"2653":{"position":[[27,2]]},"2745":{"position":[[83,2]]},"2747":{"position":[[93,2]]},"2977":{"position":[[71,2]]},"2987":{"position":[[71,2]]},"2997":{"position":[[71,2]]},"3005":{"position":[[71,2]]},"3019":{"position":[[71,2]]},"3027":{"position":[[71,2]]},"3035":{"position":[[71,2]]},"3043":{"position":[[71,2]]},"3051":{"position":[[71,2]]},"3059":{"position":[[71,2]]},"3071":{"position":[[68,2]]},"3080":{"position":[[309,2]]}}}],["下午",{"_index":6311,"t":{"2420":{"position":[[742,2],[808,2],[904,2],[958,2],[1009,2],[1064,2],[1120,2],[1172,2],[1233,2],[1437,2],[1709,2],[1836,2]]}}}],["下单",{"_index":7502,"t":{"3138":{"position":[[90,2]]}}}],["下图",{"_index":2019,"t":{"308":{"position":[[58,2]]},"310":{"position":[[60,2]]},"2583":{"position":[[35,2]]}}}],["下来",{"_index":4479,"t":{"1488":{"position":[[1591,2]]}}}],["下次",{"_index":4659,"t":{"1511":{"position":[[1007,2]]},"2393":{"position":[[180,2]]},"3740":{"position":[[86,2]]},"3974":{"position":[[315,2]]}}}],["下游",{"_index":2320,"t":{"369":{"position":[[858,2]]}}}],["下载",{"_index":233,"t":{"15":{"position":[[2,2],[120,2]]},"17":{"position":[[114,2]]},"46":{"position":[[32,2],[86,2]]},"51":{"position":[[92,2]]},"60":{"position":[[32,2],[86,2]]},"62":{"position":[[92,2]]},"70":{"position":[[32,2],[86,2]]},"75":{"position":[[92,2]]},"306":{"position":[[152,2]]},"308":{"position":[[46,2],[50,2],[285,2],[369,2]]},"310":{"position":[[48,2],[52,2],[137,2],[223,2]]},"319":{"position":[[595,2],[603,2],[609,2]]},"331":{"position":[[39,2],[135,2],[210,2]]},"1452":{"position":[[21,2]]},"1483":{"position":[[748,2],[784,2],[806,2]]},"1739":{"position":[[94,2],[235,2],[415,2]]},"2326":{"position":[[234,2]]},"2657":{"position":[[37,2]]},"3209":{"position":[[44,2]]},"3250":{"position":[[44,2]]},"3307":{"position":[[62,2]]},"3942":{"position":[[504,2]]},"3984":{"position":[[112,2]]},"3992":{"position":[[3987,2],[3999,2]]}}}],["下面",{"_index":1136,"t":{"152":{"position":[[67,2]]},"220":{"position":[[547,2]]},"237":{"position":[[0,2]]},"314":{"position":[[419,2],[572,2]]},"423":{"position":[[16,2]]},"461":{"position":[[211,2]]},"506":{"position":[[205,2]]},"675":{"position":[[57,2]]},"1052":{"position":[[120,2]]},"1075":{"position":[[44,2]]},"1225":{"position":[[0,2]]},"1412":{"position":[[1410,2]]},"1440":{"position":[[298,2]]},"1532":{"position":[[57,2]]},"1545":{"position":[[64,2]]},"1755":{"position":[[375,2]]},"1861":{"position":[[16,2]]},"2199":{"position":[[16,2]]},"2272":{"position":[[357,2]]},"2331":{"position":[[241,2]]},"2503":{"position":[[146,2]]},"2881":{"position":[[272,2]]},"2921":{"position":[[33,2]]},"2985":{"position":[[231,2]]},"3287":{"position":[[97,2]]},"3329":{"position":[[109,2]]},"3339":{"position":[[45,2]]},"3373":{"position":[[21,2]]},"3375":{"position":[[81,2]]},"3585":{"position":[[101,2]]},"3684":{"position":[[42,2]]}}}],["不了",{"_index":7084,"t":{"2817":{"position":[[131,2],[271,2]]},"3964":{"position":[[992,2]]}}}],["不仅",{"_index":8423,"t":{"3620":{"position":[[25,2]]}}}],["不仅仅",{"_index":7451,"t":{"3126":{"position":[[11,3]]}}}],["不会",{"_index":1548,"t":{"206":{"position":[[336,2]]},"445":{"position":[[832,2]]},"482":{"position":[[398,2],[905,2]]},"612":{"position":[[70,2]]},"960":{"position":[[307,2]]},"1313":{"position":[[267,2]]},"1432":{"position":[[107,2]]},"1516":{"position":[[24,2]]},"1617":{"position":[[1113,2]]},"1647":{"position":[[421,2]]},"1941":{"position":[[1006,2]]},"1955":{"position":[[100,2]]},"1981":{"position":[[71,2]]},"1993":{"position":[[71,2]]},"2016":{"position":[[79,2]]},"2352":{"position":[[187,2]]},"2418":{"position":[[676,2],[1267,2]]},"2627":{"position":[[39,2]]},"2809":{"position":[[137,2]]},"2829":{"position":[[25,2]]},"2862":{"position":[[352,2]]},"3352":{"position":[[342,2],[444,2],[570,2]]},"3414":{"position":[[25,2]]},"3416":{"position":[[273,2]]},"3452":{"position":[[468,2]]},"3664":{"position":[[492,2]]},"3708":{"position":[[3873,2]]},"3740":{"position":[[445,2]]},"3768":{"position":[[22,2]]},"3774":{"position":[[8,2]]},"3779":{"position":[[1537,2]]},"3802":{"position":[[2225,2]]},"3908":{"position":[[324,2]]},"3912":{"position":[[1767,2]]},"3916":{"position":[[3471,2]]},"3924":{"position":[[2221,2]]}}}],["不伦不类",{"_index":9358,"t":{"3924":{"position":[[2702,4]]}}}],["不但",{"_index":3053,"t":{"585":{"position":[[558,2]]}}}],["不值钱",{"_index":7027,"t":{"2770":{"position":[[339,3]]}}}],["不再",{"_index":1515,"t":{"202":{"position":[[509,2]]},"336":{"position":[[135,2]]},"550":{"position":[[624,2]]},"1194":{"position":[[416,2]]},"1196":{"position":[[116,2]]},"1198":{"position":[[125,2]]},"1379":{"position":[[682,2]]},"1408":{"position":[[1274,2]]},"1412":{"position":[[1751,2]]},"1933":{"position":[[288,2]]},"3307":{"position":[[175,2]]},"3608":{"position":[[25,2]]},"3740":{"position":[[720,2]]},"3924":{"position":[[2714,2]]},"3928":{"position":[[279,2],[618,2]]}}}],["不利于",{"_index":5066,"t":{"1576":{"position":[[313,3],[319,3]]},"1578":{"position":[[107,3]]},"3720":{"position":[[18,3]]}}}],["不到",{"_index":255,"t":{"15":{"position":[[275,2]]},"17":{"position":[[269,2]]},"150":{"position":[[97,2]]},"378":{"position":[[68,2]]},"498":{"position":[[110,2]]},"773":{"position":[[78,2]]},"893":{"position":[[110,2]]},"1495":{"position":[[1282,2],[1290,2]]},"1739":{"position":[[442,2]]},"2905":{"position":[[56,2]]},"3352":{"position":[[136,2],[519,2]]},"3910":{"position":[[2305,2]]},"3912":{"position":[[2403,2]]},"3962":{"position":[[1987,2]]},"3964":{"position":[[828,2]]},"3966":{"position":[[1384,2]]},"3980":{"position":[[797,2]]},"3984":{"position":[[624,2]]},"4000":{"position":[[1132,2],[1161,2]]}}}],["不变",{"_index":8624,"t":{"3740":{"position":[[435,2]]},"3922":{"position":[[493,2]]}}}],["不可",{"_index":5744,"t":{"1865":{"position":[[475,2]]},"1901":{"position":[[230,2]]},"3968":{"position":[[730,2]]}}}],["不可避免",{"_index":5072,"t":{"1580":{"position":[[37,4]]},"3414":{"position":[[8,4]]}}}],["不合理",{"_index":4371,"t":{"1474":{"position":[[115,3]]},"3122":{"position":[[10,3]]},"3664":{"position":[[527,3]]}}}],["不同",{"_index":1076,"t":{"135":{"position":[[8,2]]},"220":{"position":[[784,2]]},"300":{"position":[[72,2]]},"336":{"position":[[345,2],[354,2]]},"404":{"position":[[42,2]]},"406":{"position":[[163,2],[229,2],[301,2],[376,2]]},"429":{"position":[[31,2],[111,2]]},"451":{"position":[[16,2],[23,2],[285,2]]},"862":{"position":[[354,2]]},"986":{"position":[[90,2]]},"1020":{"position":[[32,2]]},"1155":{"position":[[105,2]]},"1200":{"position":[[228,2]]},"1405":{"position":[[21,2]]},"1412":{"position":[[155,2]]},"1416":{"position":[[370,2]]},"1516":{"position":[[128,2]]},"1532":{"position":[[31,2]]},"1697":{"position":[[35,2]]},"1761":{"position":[[278,2]]},"1793":{"position":[[35,2]]},"1819":{"position":[[931,2],[942,2]]},"1905":{"position":[[31,2],[42,2]]},"2303":{"position":[[81,2]]},"2313":{"position":[[510,2]]},"2517":{"position":[[9,2]]},"2538":{"position":[[74,2]]},"2617":{"position":[[8,2]]},"2862":{"position":[[361,2]]},"2915":{"position":[[53,2],[84,2]]},"2919":{"position":[[122,2]]},"2921":{"position":[[41,2]]},"2953":{"position":[[31,2]]},"3092":{"position":[[14,2],[20,2]]},"3096":{"position":[[33,2]]},"3118":{"position":[[34,2]]},"3120":{"position":[[113,2],[135,2]]},"3375":{"position":[[32,2]]},"3393":{"position":[[46,2]]},"3442":{"position":[[181,2],[187,2]]},"3612":{"position":[[42,2],[47,2]]},"3614":{"position":[[4,2]]},"3616":{"position":[[18,2],[28,2]]},"3624":{"position":[[178,2]]},"3680":{"position":[[32,2]]},"3698":{"position":[[37,2]]},"3716":{"position":[[73,2]]},"3729":{"position":[[31,2],[42,2]]},"3934":{"position":[[196,2]]},"3942":{"position":[[335,2]]},"3982":{"position":[[267,2]]},"3986":{"position":[[1798,2]]},"3994":{"position":[[1462,2]]}}}],["不同于",{"_index":6823,"t":{"2711":{"position":[[2,3]]},"3136":{"position":[[86,3]]}}}],["不够",{"_index":8467,"t":{"3626":{"position":[[194,2]]},"3912":{"position":[[1911,2]]},"3928":{"position":[[171,2]]}}}],["不好",{"_index":7015,"t":{"2770":{"position":[[237,2]]},"2881":{"position":[[232,2]]}}}],["不妥",{"_index":3036,"t":{"585":{"position":[[388,2]]}}}],["不宜",{"_index":8430,"t":{"3620":{"position":[[105,2]]}}}],["不小",{"_index":4908,"t":{"1513":{"position":[[63,2]]}}}],["不少",{"_index":192,"t":{"11":{"position":[[939,2]]},"98":{"position":[[183,2]]},"2294":{"position":[[987,2]]},"2953":{"position":[[13,2]]},"3242":{"position":[[118,2]]},"3626":{"position":[[69,2]]},"3666":{"position":[[14,2]]},"3702":{"position":[[650,2]]},"3804":{"position":[[417,2]]},"3910":{"position":[[115,2]]},"3928":{"position":[[260,2]]},"3934":{"position":[[2224,2]]}}}],["不巧",{"_index":7348,"t":{"3069":{"position":[[144,2]]}}}],["不已",{"_index":5446,"t":{"1761":{"position":[[299,2]]}}}],["不必要",{"_index":1989,"t":{"300":{"position":[[318,3]]},"581":{"position":[[19,3]]},"1214":{"position":[[141,3]]},"1372":{"position":[[25,3]]},"1374":{"position":[[50,3]]},"1444":{"position":[[25,3]]},"3620":{"position":[[44,3]]},"3916":{"position":[[2663,3]]},"3922":{"position":[[2228,3]]},"3956":{"position":[[3206,3]]},"3974":{"position":[[528,3]]}}}],["不怕",{"_index":6368,"t":{"2495":{"position":[[70,2]]}}}],["不想",{"_index":3233,"t":{"621":{"position":[[50,2]]},"1414":{"position":[[7,2]]},"2375":{"position":[[23,2]]},"3458":{"position":[[561,2]]}}}],["不成方圆",{"_index":8419,"t":{"3612":{"position":[[71,4]]}}}],["不断",{"_index":4189,"t":{"1383":{"position":[[70,2]]},"2331":{"position":[[223,2]]},"3102":{"position":[[37,2]]},"3124":{"position":[[59,2]]},"3924":{"position":[[2678,2]]},"3926":{"position":[[177,2]]}}}],["不断完善",{"_index":7883,"t":{"3301":{"position":[[57,4]]}}}],["不易",{"_index":2138,"t":{"327":{"position":[[98,2]]},"587":{"position":[[2177,2]]},"1511":{"position":[[2093,2]]},"3700":{"position":[[98,2]]}}}],["不是",{"_index":457,"t":{"83":{"position":[[4,2]]},"85":{"position":[[163,2]]},"164":{"position":[[4,2]]},"245":{"position":[[82,2],[160,2]]},"359":{"position":[[111,2]]},"408":{"position":[[42,2]]},"419":{"position":[[396,2],[423,2],[447,2]]},"482":{"position":[[518,2]]},"1149":{"position":[[44,2]]},"1566":{"position":[[176,2],[324,2]]},"1623":{"position":[[143,2]]},"1631":{"position":[[397,2]]},"1743":{"position":[[29,2]]},"1885":{"position":[[200,2]]},"1903":{"position":[[504,2],[546,2]]},"1913":{"position":[[897,2]]},"2418":{"position":[[809,2]]},"2623":{"position":[[153,2]]},"2717":{"position":[[402,2]]},"2725":{"position":[[459,2],[1000,2],[2442,2]]},"2768":{"position":[[82,2]]},"2770":{"position":[[325,2]]},"2917":{"position":[[134,2]]},"2943":{"position":[[465,2]]},"3009":{"position":[[232,2]]},"3069":{"position":[[38,2]]},"3313":{"position":[[8,2]]},"3352":{"position":[[679,2]]},"3416":{"position":[[341,2]]},"3918":{"position":[[3878,2]]},"3966":{"position":[[1784,2]]},"3978":{"position":[[869,2],[1249,2],[1711,2]]},"4000":{"position":[[828,2]]},"4006":{"position":[[544,2]]}}}],["不法",{"_index":6911,"t":{"2768":{"position":[[84,2]]}}}],["不测",{"_index":7961,"t":{"3352":{"position":[[347,2]]}}}],["不然",{"_index":2517,"t":{"427":{"position":[[99,2]]},"2391":{"position":[[190,2]]},"3224":{"position":[[365,2]]}}}],["不用",{"_index":1069,"t":{"133":{"position":[[672,2]]},"146":{"position":[[983,2]]},"1073":{"position":[[63,2]]},"1511":{"position":[[1304,2]]},"1795":{"position":[[2809,2]]},"2547":{"position":[[73,2]]},"2819":{"position":[[458,2]]},"2836":{"position":[[569,2],[1775,2]]},"2862":{"position":[[433,2]]},"2910":{"position":[[301,2]]}}}],["不知",{"_index":3286,"t":{"659":{"position":[[65,2]]},"1010":{"position":[[64,2]]}}}],["不管",{"_index":2160,"t":{"336":{"position":[[313,2]]},"482":{"position":[[434,2],[504,2]]},"1026":{"position":[[157,2]]},"1075":{"position":[[40,2]]},"1194":{"position":[[430,2]]},"1212":{"position":[[13,2]]},"1511":{"position":[[4068,2]]},"2418":{"position":[[728,2],[795,2]]},"3636":{"position":[[741,2]]},"3924":{"position":[[2151,2]]}}}],["不能",{"_index":1634,"t":{"220":{"position":[[818,2]]},"308":{"position":[[381,2]]},"310":{"position":[[238,2]]},"331":{"position":[[21,2]]},"336":{"position":[[367,2],[412,2]]},"408":{"position":[[73,2]]},"417":{"position":[[349,2]]},"445":{"position":[[843,2],[871,2]]},"457":{"position":[[49,2],[57,2],[70,2]]},"482":{"position":[[488,2]]},"528":{"position":[[105,2]]},"585":{"position":[[134,2],[196,2]]},"597":{"position":[[270,2]]},"599":{"position":[[300,2],[564,2]]},"615":{"position":[[431,2],[1113,2]]},"836":{"position":[[357,2]]},"945":{"position":[[105,2]]},"1366":{"position":[[4,2]]},"1377":{"position":[[393,2]]},"1405":{"position":[[135,2]]},"1470":{"position":[[33,2]]},"1483":{"position":[[1197,2]]},"1619":{"position":[[437,2]]},"1845":{"position":[[222,2],[495,2]]},"1855":{"position":[[239,2]]},"1865":{"position":[[132,2]]},"1867":{"position":[[54,2]]},"1869":{"position":[[159,2]]},"1873":{"position":[[77,2],[317,2]]},"1875":{"position":[[318,2],[409,2]]},"1901":{"position":[[652,2]]},"2175":{"position":[[9,2]]},"2245":{"position":[[10,2]]},"2272":{"position":[[365,2],[434,2]]},"2278":{"position":[[134,2]]},"2326":{"position":[[7,2]]},"2391":{"position":[[196,2]]},"2418":{"position":[[782,2]]},"2536":{"position":[[131,2]]},"2587":{"position":[[501,2]]},"2725":{"position":[[348,2],[1352,2],[1969,2]]},"2727":{"position":[[389,2]]},"2788":{"position":[[54,2]]},"2817":{"position":[[176,2]]},"2881":{"position":[[68,2]]},"2933":{"position":[[633,2]]},"2949":{"position":[[481,2]]},"2963":{"position":[[500,2]]},"3015":{"position":[[89,2]]},"3017":{"position":[[63,2]]},"3055":{"position":[[96,2]]},"3057":{"position":[[69,2]]},"3071":{"position":[[406,2],[646,2],[1236,2]]},"3207":{"position":[[86,2]]},"3224":{"position":[[168,2],[359,2]]},"3282":{"position":[[213,2]]},"3307":{"position":[[83,2]]},"3323":{"position":[[399,2]]},"3339":{"position":[[279,2]]},"3387":{"position":[[17,2]]},"3430":{"position":[[1484,2]]},"3456":{"position":[[43,2]]},"3597":{"position":[[39,2]]},"3696":{"position":[[23,2]]},"3836":{"position":[[22,2]]},"3838":{"position":[[22,2]]},"3908":{"position":[[295,2]]},"3914":{"position":[[1086,2],[2583,2]]},"3916":{"position":[[1934,2]]},"3924":{"position":[[512,2],[1841,2]]},"3934":{"position":[[700,2],[754,2]]},"3936":{"position":[[453,2]]},"3938":{"position":[[449,2],[550,2],[654,2]]},"3964":{"position":[[945,2]]},"3968":{"position":[[294,2]]},"3974":{"position":[[888,2]]},"3976":{"position":[[372,2]]},"3978":{"position":[[804,2]]},"3992":{"position":[[3232,2],[3876,2],[4029,2]]}}}],["不要",{"_index":1653,"t":{"225":{"position":[[100,2]]},"378":{"position":[[100,2]]},"1566":{"position":[[378,2],[534,2]]},"2354":{"position":[[52,2]]},"2438":{"position":[[283,2]]},"2440":{"position":[[317,2]]},"3102":{"position":[[10,2]]},"3414":{"position":[[144,2]]}}}],["不见",{"_index":7868,"t":{"3289":{"position":[[59,2]]}}}],["不规则",{"_index":6158,"t":{"2326":{"position":[[301,3]]}}}],["不言而喻",{"_index":8056,"t":{"3414":{"position":[[79,4]]}}}],["不计",{"_index":6997,"t":{"2770":{"position":[[39,2]]}}}],["不该",{"_index":3633,"t":{"841":{"position":[[76,2]]}}}],["不起作用",{"_index":9980,"t":{"3978":{"position":[[1018,4]]},"4002":{"position":[[273,4]]}}}],["不足",{"_index":8076,"t":{"3416":{"position":[[400,2]]}}}],["不足之处",{"_index":6207,"t":{"2343":{"position":[[222,4]]}}}],["不辍",{"_index":6931,"t":{"2768":{"position":[[481,2]]}}}],["不过",{"_index":3693,"t":{"879":{"position":[[25,2]]},"1379":{"position":[[15,2]]},"2768":{"position":[[1587,2]]},"3352":{"position":[[233,2]]}}}],["不错",{"_index":4597,"t":{"1511":{"position":[[439,2],[764,2],[1101,2],[1570,2],[3518,2]]},"2317":{"position":[[44,2]]},"3934":{"position":[[1841,2]]}}}],["与否",{"_index":8048,"t":{"3405":{"position":[[60,2]]}}}],["丑",{"_index":4816,"t":{"1511":{"position":[[2875,1]]}}}],["专属",{"_index":4610,"t":{"1511":{"position":[[549,2],[633,2],[707,2],[1063,2],[1131,2],[1154,2],[1776,2],[1800,2]]}}}],["专注",{"_index":4843,"t":{"1511":{"position":[[3245,2]]}}}],["专用",{"_index":1872,"t":{"255":{"position":[[275,2]]}}}],["专门",{"_index":2144,"t":{"329":{"position":[[45,2]]},"1194":{"position":[[18,2]]},"3426":{"position":[[227,2]]},"3938":{"position":[[80,2]]}}}],["世人",{"_index":6910,"t":{"2768":{"position":[[76,2]]}}}],["世界",{"_index":1205,"t":{"168":{"position":[[51,2]]},"1511":{"position":[[1406,2]]},"2615":{"position":[[45,2]]},"3926":{"position":[[107,2],[277,2]]}}}],["世纪",{"_index":7193,"t":{"2910":{"position":[[64,2]]}}}],["业务",{"_index":1291,"t":{"182":{"position":[[194,2]]},"206":{"position":[[159,2]]},"492":{"position":[[555,2]]},"579":{"position":[[56,2]]},"581":{"position":[[23,2]]},"583":{"position":[[6,2]]},"585":{"position":[[308,2],[418,2],[429,2],[483,2],[563,2],[572,2]]},"587":{"position":[[66,2],[2068,2]]},"943":{"position":[[24,2]]},"1048":{"position":[[6,2]]},"1082":{"position":[[14,2]]},"1424":{"position":[[136,2]]},"1511":{"position":[[3248,2]]},"1572":{"position":[[50,2]]},"1837":{"position":[[65,2]]},"1839":{"position":[[32,2]]},"1863":{"position":[[285,2]]},"1885":{"position":[[133,2]]},"1894":{"position":[[55,2]]},"1896":{"position":[[8,2],[21,2]]},"2436":{"position":[[12,2]]},"2438":{"position":[[39,2]]},"2440":{"position":[[39,2],[413,2]]},"2482":{"position":[[455,2]]},"2484":{"position":[[555,2]]},"2619":{"position":[[68,2]]},"2731":{"position":[[681,2]]},"2813":{"position":[[103,2]]},"2817":{"position":[[166,2]]},"2825":{"position":[[455,2]]},"2827":{"position":[[601,2]]},"2933":{"position":[[637,2],[664,2]]},"2949":{"position":[[485,2],[528,2]]},"2963":{"position":[[504,2],[533,2]]},"3009":{"position":[[165,2]]},"3088":{"position":[[34,2]]},"3092":{"position":[[2,2],[45,2],[127,2]]},"3096":{"position":[[5,2],[15,2],[35,2]]},"3100":{"position":[[22,2]]},"3104":{"position":[[49,2]]},"3116":{"position":[[36,2]]},"3131":{"position":[[106,2],[112,2]]},"3448":{"position":[[539,2]]},"3470":{"position":[[139,2]]},"3620":{"position":[[75,2],[80,2]]},"3624":{"position":[[81,2]]},"3787":{"position":[[14,2]]},"3932":{"position":[[782,2]]},"3956":{"position":[[52,2]]}}}],["东区",{"_index":2544,"t":{"441":{"position":[[244,2],[507,2],[610,2]]}}}],["东西",{"_index":4702,"t":{"1511":{"position":[[1511,2]]},"3926":{"position":[[523,2]]}}}],["丝",{"_index":7763,"t":{"3250":{"position":[[209,1]]}}}],["丢",{"_index":4494,"t":{"1495":{"position":[[1231,1]]},"3914":{"position":[[972,1],[2785,1]]}}}],["丢失",{"_index":4364,"t":{"1472":{"position":[[18,2]]},"3416":{"position":[[393,2]]},"3918":{"position":[[3341,2],[3419,2]]},"3924":{"position":[[1314,2]]},"3930":{"position":[[903,2]]}}}],["丢掉",{"_index":9087,"t":{"3912":{"position":[[1924,2]]}}}],["两",{"_index":7472,"t":{"3136":{"position":[[51,1]]}}}],["两个",{"_index":111,"t":{"9":{"position":[[22,2]]},"95":{"position":[[39,2]]},"98":{"position":[[53,2],[130,2]]},"121":{"position":[[708,2]]},"123":{"position":[[50,2]]},"204":{"position":[[11,2]]},"210":{"position":[[16,2]]},"237":{"position":[[102,2]]},"336":{"position":[[79,2]]},"342":{"position":[[59,2]]},"355":{"position":[[14,2]]},"394":{"position":[[31,2]]},"404":{"position":[[243,2]]},"482":{"position":[[381,2],[917,2]]},"552":{"position":[[60,2]]},"587":{"position":[[801,2]]},"604":{"position":[[38,2]]},"818":{"position":[[51,2]]},"846":{"position":[[99,2],[145,2]]},"988":{"position":[[338,2]]},"1068":{"position":[[25,2],[28,2]]},"1117":{"position":[[163,2],[1158,2],[1851,2],[2884,2],[3901,2]]},"1279":{"position":[[97,2]]},"1412":{"position":[[341,2]]},"1424":{"position":[[203,2]]},"1541":{"position":[[62,2]]},"1551":{"position":[[20,2]]},"2292":{"position":[[22,2]]},"2303":{"position":[[53,2]]},"2343":{"position":[[11,2]]},"2418":{"position":[[659,2],[1283,2]]},"2442":{"position":[[175,2]]},"2651":{"position":[[3,2]]},"2684":{"position":[[425,2]]},"2875":{"position":[[511,2]]},"3375":{"position":[[85,2]]},"3381":{"position":[[231,2]]},"3389":{"position":[[1300,2]]},"3391":{"position":[[755,2]]},"3393":{"position":[[1173,2]]},"3405":{"position":[[47,2]]},"3676":{"position":[[6,2]]},"3806":{"position":[[1320,2]]},"3924":{"position":[[3449,2]]}}}],["两侧",{"_index":4933,"t":{"1520":{"position":[[369,2]]}}}],["两分钟",{"_index":8367,"t":{"3579":{"position":[[263,3]]}}}],["两周年",{"_index":2420,"t":{"401":{"position":[[331,3]]}}}],["两年",{"_index":7350,"t":{"3069":{"position":[[161,2]]},"3242":{"position":[[23,2]]},"3910":{"position":[[20,2]]}}}],["两次",{"_index":3030,"t":{"585":{"position":[[292,2]]},"2272":{"position":[[371,2],[440,2]]},"2731":{"position":[[66,2]]},"3118":{"position":[[309,2]]},"3916":{"position":[[2052,2]]}}}],["两种",{"_index":1869,"t":{"255":{"position":[[246,2]]},"319":{"position":[[16,2]]},"435":{"position":[[16,2]]},"445":{"position":[[161,2]]},"506":{"position":[[17,2]]},"528":{"position":[[196,2]]},"677":{"position":[[9,2]]},"704":{"position":[[9,2]]},"807":{"position":[[16,2]]},"1277":{"position":[[4,2]]},"1374":{"position":[[15,2]]},"1572":{"position":[[89,2]]},"1609":{"position":[[322,2]]},"1719":{"position":[[10,2]]},"2096":{"position":[[49,2]]},"2307":{"position":[[38,2]]},"2311":{"position":[[254,2]]},"2331":{"position":[[243,2]]},"2348":{"position":[[12,2]]},"2395":{"position":[[12,2]]},"2418":{"position":[[63,2]]},"2466":{"position":[[14,2]]},"2544":{"position":[[131,2]]},"2585":{"position":[[4,2]]},"2803":{"position":[[96,2]]},"3146":{"position":[[10,2]]},"3418":{"position":[[67,2]]},"3483":{"position":[[9,2]]},"3551":{"position":[[17,2]]},"3553":{"position":[[17,2]]},"3555":{"position":[[17,2]]},"3557":{"position":[[17,2]]},"3559":{"position":[[17,2]]},"3632":{"position":[[54,2]]},"3718":{"position":[[136,2]]},"3992":{"position":[[1410,2]]}}}],["两秒",{"_index":8866,"t":{"3806":{"position":[[103,2]]}}}],["两篇",{"_index":7924,"t":{"3331":{"position":[[23,2]]}}}],["两级",{"_index":8432,"t":{"3620":{"position":[[110,2]]}}}],["两者",{"_index":4091,"t":{"1269":{"position":[[179,2]]}}}],["两面性",{"_index":7436,"t":{"3114":{"position":[[6,3]]}}}],["严重",{"_index":6908,"t":{"2768":{"position":[[55,2]]},"3416":{"position":[[360,2]]}}}],["个人",{"_index":4567,"t":{"1511":{"position":[[129,2]]},"1513":{"position":[[32,2]]}}}],["个人信息",{"_index":7039,"t":{"2782":{"position":[[120,4]]}}}],["个人用户",{"_index":4557,"t":{"1511":{"position":[[6,4]]}}}],["个别",{"_index":4082,"t":{"1234":{"position":[[945,2]]},"2047":{"position":[[55,2]]},"2985":{"position":[[60,2]]},"3287":{"position":[[3063,2]]},"3389":{"position":[[120,2]]},"3448":{"position":[[1382,2]]},"3722":{"position":[[335,2]]},"3914":{"position":[[2648,2],[3460,2]]},"3924":{"position":[[1617,2]]}}}],["个别情况",{"_index":180,"t":{"11":{"position":[[786,4]]},"2294":{"position":[[834,4]]},"3339":{"position":[[255,4]]},"3916":{"position":[[2093,4]]},"3922":{"position":[[1341,4]]},"3928":{"position":[[664,4]]},"3944":{"position":[[355,4]]}}}],["中",{"_index":19,"t":{"3":{"position":[[78,1]]},"9":{"position":[[188,1]]},"11":{"position":[[40,1],[725,1],[904,1]]},"13":{"position":[[29,1],[81,1],[416,1]]},"21":{"position":[[80,1],[140,1]]},"23":{"position":[[62,1],[122,1]]},"26":{"position":[[20,1]]},"28":{"position":[[11,1]]},"85":{"position":[[193,1]]},"110":{"position":[[9,1]]},"112":{"position":[[1140,1],[1562,1]]},"119":{"position":[[45,1],[60,1]]},"121":{"position":[[249,1]]},"123":{"position":[[31,1]]},"127":{"position":[[59,1],[1726,1]]},"129":{"position":[[379,1]]},"148":{"position":[[44,1],[288,1],[443,1]]},"152":{"position":[[31,1]]},"186":{"position":[[126,1]]},"196":{"position":[[22,1]]},"202":{"position":[[53,1],[505,1]]},"204":{"position":[[51,1]]},"206":{"position":[[11,1],[48,1]]},"212":{"position":[[69,1]]},"216":{"position":[[495,1]]},"218":{"position":[[301,1]]},"220":{"position":[[42,1],[543,1]]},"227":{"position":[[27,1]]},"229":{"position":[[71,1]]},"233":{"position":[[461,1]]},"237":{"position":[[1326,1],[1330,1],[1371,1]]},"243":{"position":[[36,1],[85,1],[132,1],[165,1]]},"245":{"position":[[72,1],[146,1],[235,1]]},"247":{"position":[[101,1],[427,1]]},"249":{"position":[[9,1],[77,1]]},"251":{"position":[[27,1],[40,1],[225,1]]},"255":{"position":[[75,1],[120,1]]},"300":{"position":[[15,1],[112,1]]},"308":{"position":[[399,1]]},"310":{"position":[[259,1],[676,1]]},"314":{"position":[[14,1]]},"319":{"position":[[12,1]]},"321":{"position":[[12,1]]},"325":{"position":[[7,1],[69,1],[87,1]]},"329":{"position":[[86,1]]},"331":{"position":[[17,1]]},"336":{"position":[[44,1],[114,1]]},"338":{"position":[[19,1]]},"344":{"position":[[42,1],[427,1]]},"346":{"position":[[47,1],[511,1]]},"348":{"position":[[41,1],[456,1]]},"355":{"position":[[69,1]]},"361":{"position":[[9,1]]},"367":{"position":[[97,1]]},"369":{"position":[[7,1],[67,1]]},"373":{"position":[[187,1]]},"378":{"position":[[12,1],[41,1],[51,1]]},"380":{"position":[[3,1]]},"415":{"position":[[303,1]]},"417":{"position":[[48,1],[255,1]]},"421":{"position":[[31,1]]},"427":{"position":[[36,1]]},"435":{"position":[[11,1]]},"437":{"position":[[7,1],[43,1]]},"441":{"position":[[15,1],[42,1]]},"445":{"position":[[87,1],[781,1],[859,1]]},"447":{"position":[[45,1]]},"449":{"position":[[30,1],[59,1]]},"451":{"position":[[7,1]]},"453":{"position":[[16,1]]},"455":{"position":[[152,1],[251,1],[264,1],[706,1],[719,1]]},"457":{"position":[[64,1]]},"482":{"position":[[878,1]]},"498":{"position":[[36,1],[58,1]]},"500":{"position":[[55,1]]},"502":{"position":[[11,1]]},"504":{"position":[[160,1]]},"506":{"position":[[11,1]]},"510":{"position":[[485,1]]},"514":{"position":[[634,1]]},"516":{"position":[[513,1]]},"522":{"position":[[16,1],[57,1]]},"526":{"position":[[11,1]]},"528":{"position":[[11,1]]},"530":{"position":[[38,1],[780,1]]},"532":{"position":[[55,1],[105,1],[163,1]]},"538":{"position":[[15,1]]},"542":{"position":[[11,1]]},"544":{"position":[[23,1]]},"546":{"position":[[192,1],[256,1]]},"565":{"position":[[9,1]]},"567":{"position":[[9,1],[409,1]]},"570":{"position":[[22,1],[1081,1],[1416,1]]},"572":{"position":[[1233,1]]},"579":{"position":[[41,1]]},"585":{"position":[[6,1],[422,1]]},"587":{"position":[[15,1],[89,1],[381,1],[764,1],[2130,1],[2145,1],[2160,1]]},"593":{"position":[[44,1]]},"608":{"position":[[38,1]]},"612":{"position":[[54,1]]},"615":{"position":[[119,1],[875,1]]},"617":{"position":[[2707,1]]},"623":{"position":[[34,1]]},"639":{"position":[[392,1]]},"653":{"position":[[209,1]]},"659":{"position":[[30,1]]},"675":{"position":[[103,1]]},"688":{"position":[[102,1]]},"696":{"position":[[418,1]]},"698":{"position":[[293,1]]},"706":{"position":[[227,1]]},"730":{"position":[[42,1]]},"739":{"position":[[23,1]]},"743":{"position":[[11,1],[47,1]]},"756":{"position":[[9,1]]},"777":{"position":[[43,1]]},"791":{"position":[[29,1],[44,1]]},"801":{"position":[[24,1]]},"807":{"position":[[7,1]]},"818":{"position":[[23,1],[71,1]]},"822":{"position":[[36,1]]},"826":{"position":[[23,1]]},"832":{"position":[[13,1]]},"836":{"position":[[37,1]]},"841":{"position":[[7,1],[119,1]]},"846":{"position":[[18,1]]},"885":{"position":[[29,1]]},"887":{"position":[[180,1]]},"893":{"position":[[36,1],[58,1]]},"897":{"position":[[569,1]]},"915":{"position":[[66,1]]},"924":{"position":[[187,1]]},"933":{"position":[[9,1]]},"935":{"position":[[20,1]]},"947":{"position":[[11,1]]},"981":{"position":[[3,1],[27,1]]},"1010":{"position":[[29,1]]},"1020":{"position":[[37,1]]},"1026":{"position":[[227,1]]},"1037":{"position":[[740,1]]},"1039":{"position":[[38,1],[781,1]]},"1068":{"position":[[71,1]]},"1075":{"position":[[18,1]]},"1103":{"position":[[39,1],[68,1],[125,1],[181,1],[193,1]]},"1107":{"position":[[9,1]]},"1125":{"position":[[5,1]]},"1141":{"position":[[11,1],[83,1]]},"1143":{"position":[[71,1]]},"1149":{"position":[[52,1]]},"1212":{"position":[[11,1]]},"1214":{"position":[[60,1]]},"1221":{"position":[[17,1],[86,1]]},"1248":{"position":[[52,1]]},"1269":{"position":[[14,1]]},"1275":{"position":[[3,1]]},"1279":{"position":[[85,1]]},"1286":{"position":[[6,1],[142,1]]},"1302":{"position":[[29,1]]},"1309":{"position":[[13,1],[733,1]]},"1313":{"position":[[44,1],[276,1],[295,1],[699,1]]},"1319":{"position":[[228,1]]},"1323":{"position":[[43,1]]},"1353":{"position":[[176,1]]},"1358":{"position":[[6,1]]},"1360":{"position":[[9,1]]},"1374":{"position":[[9,1],[100,1]]},"1377":{"position":[[39,1],[529,1]]},"1383":{"position":[[111,1],[301,1]]},"1385":{"position":[[15,1],[37,1],[76,1]]},"1387":{"position":[[50,1]]},"1392":{"position":[[29,1]]},"1394":{"position":[[17,1]]},"1399":{"position":[[53,1]]},"1401":{"position":[[34,1]]},"1408":{"position":[[1132,1]]},"1414":{"position":[[38,1]]},"1418":{"position":[[57,1],[229,1],[300,1]]},"1420":{"position":[[5,1]]},"1422":{"position":[[9,1]]},"1424":{"position":[[153,1]]},"1432":{"position":[[102,1],[186,1]]},"1440":{"position":[[9,1]]},"1470":{"position":[[12,1],[56,1]]},"1481":{"position":[[11,1],[70,1]]},"1503":{"position":[[6,1]]},"1505":{"position":[[6,1]]},"1509":{"position":[[166,1]]},"1511":{"position":[[2821,1]]},"1516":{"position":[[137,1]]},"1520":{"position":[[317,1],[367,1]]},"1541":{"position":[[108,1]]},"1545":{"position":[[49,1]]},"1547":{"position":[[17,1],[209,1]]},"1566":{"position":[[111,1],[368,1],[404,1]]},"1572":{"position":[[44,1],[83,1]]},"1574":{"position":[[37,1]]},"1576":{"position":[[17,1],[335,1]]},"1582":{"position":[[51,1]]},"1584":{"position":[[86,1]]},"1587":{"position":[[167,1]]},"1589":{"position":[[170,1]]},"1592":{"position":[[94,1]]},"1596":{"position":[[252,1]]},"1609":{"position":[[33,1]]},"1615":{"position":[[273,1],[350,1]]},"1631":{"position":[[11,1],[359,1],[433,1],[634,1]]},"1633":{"position":[[18,1]]},"1635":{"position":[[18,1]]},"1641":{"position":[[440,1],[474,1]]},"1659":{"position":[[38,1]]},"1667":{"position":[[13,1]]},"1672":{"position":[[76,1]]},"1683":{"position":[[321,1]]},"1685":{"position":[[200,1]]},"1699":{"position":[[11,1],[92,1],[110,1]]},"1701":{"position":[[44,1]]},"1707":{"position":[[6,1],[88,1]]},"1711":{"position":[[11,1],[697,1],[813,1]]},"1719":{"position":[[44,1]]},"1737":{"position":[[5,1]]},"1743":{"position":[[36,1],[285,1],[480,1]]},"1745":{"position":[[20,1],[58,1]]},"1747":{"position":[[8,1]]},"1753":{"position":[[26,1]]},"1761":{"position":[[9,1],[287,1]]},"1763":{"position":[[239,1]]},"1773":{"position":[[284,1]]},"1775":{"position":[[7,1],[74,1],[3888,1]]},"1777":{"position":[[17,1],[58,1],[188,1]]},"1795":{"position":[[2806,1]]},"1799":{"position":[[367,1],[541,1],[717,1]]},"1801":{"position":[[2762,1]]},"1803":{"position":[[4734,1]]},"1805":{"position":[[463,1]]},"1807":{"position":[[786,1]]},"1809":{"position":[[415,1]]},"1811":{"position":[[9,1]]},"1815":{"position":[[38,1]]},"1825":{"position":[[5,1],[22,1]]},"1832":{"position":[[65,1],[90,1],[100,1]]},"1841":{"position":[[74,1]]},"1853":{"position":[[11,1]]},"1855":{"position":[[71,1]]},"1857":{"position":[[118,1],[193,1]]},"1865":{"position":[[462,1]]},"1867":{"position":[[11,1]]},"1869":{"position":[[253,1]]},"1871":{"position":[[72,1]]},"1875":{"position":[[642,1],[717,1]]},"1887":{"position":[[108,1]]},"1892":{"position":[[28,1],[38,1]]},"1901":{"position":[[246,1]]},"1903":{"position":[[462,1],[567,1]]},"1905":{"position":[[87,1]]},"1907":{"position":[[27,1]]},"1909":{"position":[[302,1],[540,1]]},"1913":{"position":[[971,1],[1257,1],[1392,1]]},"1915":{"position":[[9,1]]},"1919":{"position":[[720,1],[850,1]]},"1921":{"position":[[9,1]]},"1925":{"position":[[1002,1],[1449,1],[1577,1]]},"1927":{"position":[[766,1],[897,1]]},"1929":{"position":[[9,1]]},"1933":{"position":[[886,1],[1017,1]]},"1935":{"position":[[381,1],[515,1]]},"1937":{"position":[[9,1]]},"1939":{"position":[[28,1]]},"1941":{"position":[[637,1],[704,1],[795,1],[1137,1],[1265,1]]},"1943":{"position":[[331,1],[462,1]]},"1945":{"position":[[9,1]]},"1951":{"position":[[778,1]]},"1955":{"position":[[160,1],[243,1]]},"1963":{"position":[[39,1]]},"2061":{"position":[[47,1]]},"2077":{"position":[[29,1]]},"2182":{"position":[[235,1]]},"2231":{"position":[[62,1],[122,1]]},"2235":{"position":[[20,1]]},"2237":{"position":[[11,1]]},"2239":{"position":[[92,1],[141,1],[167,1]]},"2243":{"position":[[19,1],[117,1]]},"2266":{"position":[[22,1],[71,1],[124,1],[219,1],[291,1],[336,1]]},"2269":{"position":[[27,1]]},"2272":{"position":[[48,1]]},"2274":{"position":[[52,1]]},"2281":{"position":[[40,1]]},"2283":{"position":[[44,1]]},"2292":{"position":[[188,1]]},"2294":{"position":[[40,1],[754,1],[952,1]]},"2296":{"position":[[29,1],[81,1],[416,1]]},"2311":{"position":[[102,1]]},"2326":{"position":[[63,1]]},"2331":{"position":[[197,1],[235,1]]},"2333":{"position":[[45,1]]},"2341":{"position":[[212,1]]},"2343":{"position":[[9,1]]},"2354":{"position":[[16,1]]},"2357":{"position":[[190,1],[257,1]]},"2359":{"position":[[451,1]]},"2363":{"position":[[182,1]]},"2375":{"position":[[10,1],[35,1]]},"2391":{"position":[[103,1]]},"2395":{"position":[[162,1]]},"2406":{"position":[[684,1]]},"2415":{"position":[[377,1]]},"2418":{"position":[[207,1],[217,1],[1240,1]]},"2434":{"position":[[744,1]]},"2442":{"position":[[112,1]]},"2472":{"position":[[15,1],[54,1]]},"2474":{"position":[[11,1]]},"2478":{"position":[[460,1]]},"2480":{"position":[[75,1]]},"2490":{"position":[[5,1],[22,1],[107,1]]},"2540":{"position":[[11,1]]},"2542":{"position":[[27,1]]},"2557":{"position":[[21,1]]},"2564":{"position":[[44,1],[57,1]]},"2579":{"position":[[855,1]]},"2597":{"position":[[15,1]]},"2601":{"position":[[11,1]]},"2603":{"position":[[23,1]]},"2625":{"position":[[10,1]]},"2627":{"position":[[155,1]]},"2651":{"position":[[17,1]]},"2674":{"position":[[435,1]]},"2678":{"position":[[22,1]]},"2682":{"position":[[31,1],[70,1]]},"2684":{"position":[[23,1],[344,1],[469,1]]},"2690":{"position":[[346,1]]},"2696":{"position":[[72,1]]},"2713":{"position":[[11,1]]},"2715":{"position":[[62,1],[120,1]]},"2717":{"position":[[137,1]]},"2719":{"position":[[45,1]]},"2723":{"position":[[47,1]]},"2725":{"position":[[23,1]]},"2727":{"position":[[47,1]]},"2733":{"position":[[44,1]]},"2735":{"position":[[57,1]]},"2745":{"position":[[240,1]]},"2747":{"position":[[275,1]]},"2776":{"position":[[36,1]]},"2782":{"position":[[201,1]]},"2788":{"position":[[11,1]]},"2790":{"position":[[119,1],[224,1]]},"2792":{"position":[[34,1]]},"2805":{"position":[[23,1],[521,1]]},"2809":{"position":[[69,1]]},"2813":{"position":[[715,1]]},"2819":{"position":[[62,1]]},"2821":{"position":[[49,1],[106,1]]},"2834":{"position":[[69,1]]},"2836":{"position":[[37,1],[51,1],[147,1],[1078,1],[1367,1]]},"2843":{"position":[[124,1]]},"2856":{"position":[[47,1]]},"2862":{"position":[[54,1],[206,1]]},"2875":{"position":[[605,1],[626,1],[650,1]]},"2881":{"position":[[225,1]]},"2887":{"position":[[252,1]]},"2889":{"position":[[9,1]]},"2899":{"position":[[16,1]]},"2912":{"position":[[129,1]]},"2919":{"position":[[46,1],[118,1]]},"2923":{"position":[[11,1]]},"2933":{"position":[[13,1],[515,1]]},"2939":{"position":[[4,1],[11,1]]},"2949":{"position":[[13,1]]},"2951":{"position":[[13,1]]},"2953":{"position":[[11,1]]},"2963":{"position":[[13,1]]},"2981":{"position":[[377,1]]},"2985":{"position":[[54,1],[228,1],[342,1]]},"2991":{"position":[[309,1]]},"2995":{"position":[[25,1]]},"3053":{"position":[[23,1]]},"3063":{"position":[[1395,1]]},"3069":{"position":[[163,1]]},"3071":{"position":[[92,1],[1308,1]]},"3073":{"position":[[22,1]]},"3075":{"position":[[56,1]]},"3080":{"position":[[491,1]]},"3088":{"position":[[3,1],[41,1],[51,1]]},"3094":{"position":[[63,1]]},"3108":{"position":[[139,1],[152,1],[201,1]]},"3118":{"position":[[122,1],[165,1]]},"3126":{"position":[[73,1]]},"3131":{"position":[[4,1]]},"3138":{"position":[[160,1]]},"3142":{"position":[[282,1]]},"3144":{"position":[[11,1],[59,1]]},"3148":{"position":[[44,1],[95,1]]},"3152":{"position":[[4,1]]},"3154":{"position":[[750,1]]},"3156":{"position":[[11,1],[333,1]]},"3158":{"position":[[47,1],[505,1]]},"3189":{"position":[[286,1]]},"3194":{"position":[[10,1],[64,1]]},"3199":{"position":[[2,1]]},"3201":{"position":[[2,1]]},"3203":{"position":[[2,1]]},"3207":{"position":[[174,1]]},"3215":{"position":[[809,1]]},"3224":{"position":[[20,1]]},"3242":{"position":[[170,1]]},"3244":{"position":[[53,1]]},"3248":{"position":[[15,1]]},"3252":{"position":[[11,1]]},"3254":{"position":[[23,1],[1654,1],[1720,1]]},"3275":{"position":[[428,1]]},"3282":{"position":[[120,1],[255,1]]},"3284":{"position":[[50,1],[102,1]]},"3287":{"position":[[11,1],[30,1]]},"3289":{"position":[[178,1]]},"3291":{"position":[[1280,1]]},"3294":{"position":[[31,1]]},"3296":{"position":[[87,1]]},"3313":{"position":[[15,1],[48,1]]},"3321":{"position":[[215,1],[346,1],[364,1]]},"3339":{"position":[[202,1]]},"3350":{"position":[[33,1],[56,1],[90,1],[118,1],[169,1]]},"3352":{"position":[[49,1],[65,1],[277,1],[493,1],[622,1]]},"3360":{"position":[[174,1]]},"3362":{"position":[[7,1]]},"3365":{"position":[[28,1]]},"3373":{"position":[[28,1]]},"3375":{"position":[[4,1]]},"3383":{"position":[[7,1]]},"3389":{"position":[[208,1]]},"3391":{"position":[[106,1]]},"3393":{"position":[[135,1]]},"3409":{"position":[[53,1]]},"3412":{"position":[[28,1],[52,1],[129,1]]},"3414":{"position":[[5,1],[74,1],[278,1]]},"3416":{"position":[[128,1],[172,1]]},"3418":{"position":[[11,1]]},"3426":{"position":[[11,1]]},"3428":{"position":[[51,1]]},"3432":{"position":[[279,1],[748,1]]},"3434":{"position":[[9,1],[642,1]]},"3440":{"position":[[12,1]]},"3442":{"position":[[58,1]]},"3444":{"position":[[50,1]]},"3448":{"position":[[37,1],[134,1],[184,1]]},"3458":{"position":[[440,1],[584,1],[831,1]]},"3460":{"position":[[11,1]]},"3466":{"position":[[739,1],[791,1],[1008,1]]},"3468":{"position":[[84,1]]},"3508":{"position":[[168,1]]},"3539":{"position":[[37,1],[46,1],[55,1]]},"3547":{"position":[[703,1]]},"3551":{"position":[[281,1],[505,1]]},"3553":{"position":[[260,1],[372,1]]},"3555":{"position":[[281,1],[411,1]]},"3557":{"position":[[283,1],[418,1]]},"3559":{"position":[[292,1],[442,1]]},"3575":{"position":[[667,1]]},"3579":{"position":[[178,1],[213,1]]},"3581":{"position":[[410,1]]},"3583":{"position":[[598,1]]},"3589":{"position":[[621,1]]},"3601":{"position":[[13,1],[1605,1]]},"3618":{"position":[[22,1],[53,1]]},"3620":{"position":[[275,1]]},"3624":{"position":[[65,1],[163,1]]},"3632":{"position":[[11,1]]},"3634":{"position":[[9,1]]},"3636":{"position":[[574,1],[705,1]]},"3638":{"position":[[8,1],[56,1]]},"3640":{"position":[[778,1]]},"3644":{"position":[[38,1]]},"3654":{"position":[[116,1]]},"3658":{"position":[[55,1]]},"3672":{"position":[[345,1]]},"3678":{"position":[[111,1]]},"3688":{"position":[[64,1],[114,1]]},"3696":{"position":[[56,1]]},"3702":{"position":[[12,1],[217,1]]},"3704":{"position":[[11,1]]},"3706":{"position":[[1406,1]]},"3708":{"position":[[3768,1],[3928,1],[3941,1]]},"3712":{"position":[[8,1]]},"3716":{"position":[[890,1]]},"3722":{"position":[[46,1]]},"3727":{"position":[[71,1]]},"3732":{"position":[[18,1]]},"3740":{"position":[[427,1]]},"3742":{"position":[[29,1]]},"3750":{"position":[[216,1]]},"3758":{"position":[[17,1]]},"3774":{"position":[[268,1]]},"3783":{"position":[[48,1]]},"3815":{"position":[[77,1]]},"3817":{"position":[[409,1],[1489,1]]},"3828":{"position":[[828,1]]},"3832":{"position":[[801,1]]},"3898":{"position":[[4,1]]},"3900":{"position":[[4,1]]},"3902":{"position":[[4,1]]},"3904":{"position":[[4,1]]},"3908":{"position":[[312,1]]},"3910":{"position":[[167,1],[1084,1],[2128,1]]},"3912":{"position":[[1830,1],[1977,1]]},"3914":{"position":[[2602,1]]},"3918":{"position":[[3296,1]]},"3920":{"position":[[1682,1]]},"3922":{"position":[[759,1],[1420,1]]},"3924":{"position":[[690,1],[1562,1],[2647,1],[2791,1]]},"3926":{"position":[[56,1],[434,1]]},"3928":{"position":[[43,1],[143,1]]},"3930":{"position":[[852,1],[873,1]]},"3934":{"position":[[2336,1],[3016,1]]},"3938":{"position":[[46,1]]},"3950":{"position":[[364,1],[778,1]]},"3952":{"position":[[206,1],[295,1],[353,1]]},"3962":{"position":[[1961,1]]},"3964":{"position":[[944,1]]},"3966":{"position":[[444,1],[1252,1],[1374,1],[1679,1],[1759,1],[1924,1]]},"3968":{"position":[[516,1]]},"3972":{"position":[[434,1],[468,1]]},"3974":{"position":[[482,1]]},"3978":{"position":[[745,1],[793,1],[1413,1],[1502,1],[1689,1]]},"3982":{"position":[[584,1]]},"3984":{"position":[[852,1]]},"3986":{"position":[[1437,1]]},"3988":{"position":[[265,1]]},"3990":{"position":[[90,1],[389,1]]},"3992":{"position":[[304,1],[2459,1],[3395,1]]},"3994":{"position":[[1209,1]]},"3996":{"position":[[704,1],[1807,1]]}}}],["中介",{"_index":3854,"t":{"986":{"position":[[11,2]]}}}],["中国",{"_index":1208,"t":{"168":{"position":[[62,2]]},"441":{"position":[[206,2]]},"877":{"position":[[1473,2]]},"1761":{"position":[[126,2]]},"2559":{"position":[[580,2]]}}}],["中将",{"_index":1048,"t":{"129":{"position":[[595,2]]},"3120":{"position":[[120,2]]}}}],["中小型",{"_index":5310,"t":{"1699":{"position":[[87,3]]},"2803":{"position":[[120,3]]},"2805":{"position":[[101,3]]},"2923":{"position":[[4,3]]},"2953":{"position":[[4,3]]}}}],["中山市",{"_index":1934,"t":{"284":{"position":[[264,3]]},"441":{"position":[[241,3],[504,3],[607,3]]},"877":{"position":[[1677,3]]},"1145":{"position":[[427,3]]},"1147":{"position":[[318,3]]},"1151":{"position":[[396,3]]},"1181":{"position":[[181,3],[270,3],[481,3],[581,3]]},"1183":{"position":[[181,3],[544,3]]}}}],["中心",{"_index":2611,"t":{"461":{"position":[[59,2]]},"1699":{"position":[[47,2]]},"3146":{"position":[[43,2]]},"3150":{"position":[[133,2],[198,2]]},"3918":{"position":[[3872,2],[4077,2]]},"3992":{"position":[[36,2]]}}}],["中招",{"_index":7349,"t":{"3069":{"position":[[154,2]]}}}],["中文",{"_index":475,"t":{"85":{"position":[[99,2],[146,2],[251,2]]},"427":{"position":[[115,2],[156,2]]},"606":{"position":[[257,2],[527,2]]},"1539":{"position":[[146,2]]},"2555":{"position":[[75,2]]},"3307":{"position":[[87,2],[164,2]]},"3506":{"position":[[551,2]]},"3660":{"position":[[34,2]]},"3920":{"position":[[1625,2]]},"3944":{"position":[[361,2]]},"3962":{"position":[[1592,2]]},"3992":{"position":[[3537,2]]},"4000":{"position":[[1100,2]]},"4006":{"position":[[303,2]]}}}],["中文名",{"_index":3154,"t":{"606":{"position":[[313,3]]}}}],["中断",{"_index":5709,"t":{"1834":{"position":[[6,2]]}}}],["中止",{"_index":5708,"t":{"1832":{"position":[[37,2]]}}}],["中长篇",{"_index":7020,"t":{"2770":{"position":[[302,3]]}}}],["中间件",{"_index":941,"t":{"123":{"position":[[52,3]]},"336":{"position":[[54,3],[334,3]]},"346":{"position":[[26,3],[105,3],[200,3],[498,3]]},"348":{"position":[[443,3]]},"350":{"position":[[370,3],[572,3]]},"355":{"position":[[11,3],[174,3],[357,3]]},"1753":{"position":[[7,3],[268,3],[285,3]]},"2243":{"position":[[91,3],[114,3]]},"2519":{"position":[[379,3]]},"2564":{"position":[[0,3],[110,3],[173,3],[189,3],[227,3]]},"2569":{"position":[[104,3]]},"2575":{"position":[[3,3]]},"2577":{"position":[[279,3]]},"2579":{"position":[[32,3],[552,3],[584,3],[594,3],[606,3],[614,3],[942,3],[980,3]]},"2581":{"position":[[12,3],[522,3],[1049,3],[1086,3]]},"2583":{"position":[[0,3]]},"2585":{"position":[[0,3]]},"2587":{"position":[[435,3]]},"2589":{"position":[[610,3]]},"2591":{"position":[[2,3]]},"2593":{"position":[[5,3],[34,3]]},"2848":{"position":[[819,3]]},"2879":{"position":[[113,3]]},"2881":{"position":[[46,3],[79,3],[207,3]]},"2889":{"position":[[563,3]]},"3116":{"position":[[7,3]]},"3126":{"position":[[34,3],[49,3]]},"3131":{"position":[[277,3]]},"3440":{"position":[[103,3]]},"3934":{"position":[[1132,3]]},"3966":{"position":[[1062,3]]},"3978":{"position":[[1760,3]]},"3992":{"position":[[3603,3]]}}}],["丰富",{"_index":568,"t":{"95":{"position":[[80,2]]},"2599":{"position":[[108,2]]},"3250":{"position":[[204,2]]}}}],["串行",{"_index":6357,"t":{"2466":{"position":[[26,2],[49,2]]},"2468":{"position":[[181,2]]},"2829":{"position":[[57,2]]},"3768":{"position":[[179,2],[2411,2]]},"3777":{"position":[[261,2]]},"3781":{"position":[[414,2],[427,2]]},"3783":{"position":[[43,2]]},"3914":{"position":[[3496,2]]}}}],["临时",{"_index":8835,"t":{"3795":{"position":[[9,2]]}}}],["临界值",{"_index":9141,"t":{"3914":{"position":[[2976,3]]}}}],["丹麦",{"_index":6504,"t":{"2559":{"position":[[704,2]]}}}],["丹麦文",{"_index":6502,"t":{"2559":{"position":[[689,3],[699,3]]}}}],["为了",{"_index":481,"t":{"85":{"position":[[122,2]]},"98":{"position":[[7,2]]},"121":{"position":[[612,2]]},"127":{"position":[[1330,2]]},"304":{"position":[[89,2]]},"325":{"position":[[9,2]]},"423":{"position":[[82,2]]},"480":{"position":[[0,2]]},"526":{"position":[[13,2]]},"528":{"position":[[184,2]]},"1020":{"position":[[24,2]]},"1050":{"position":[[38,2]]},"1103":{"position":[[43,2]]},"1438":{"position":[[0,2]]},"1537":{"position":[[0,2]]},"1553":{"position":[[0,2]]},"1707":{"position":[[90,2]]},"1777":{"position":[[69,2]]},"2283":{"position":[[82,2]]},"2343":{"position":[[284,2]]},"2424":{"position":[[0,2]]},"2856":{"position":[[1714,2]]},"2862":{"position":[[385,2]]},"2912":{"position":[[149,2]]},"3080":{"position":[[0,2]]},"3118":{"position":[[137,2],[213,2]]},"3140":{"position":[[22,2]]},"3242":{"position":[[93,2]]},"3284":{"position":[[7,2]]},"3612":{"position":[[76,2]]},"3614":{"position":[[0,2],[50,2]]},"3616":{"position":[[7,2]]},"3618":{"position":[[0,2]]},"3690":{"position":[[38,2]]},"3791":{"position":[[1353,2]]},"3804":{"position":[[0,2]]},"3908":{"position":[[195,2]]},"3910":{"position":[[90,2]]},"3934":{"position":[[2187,2]]},"3938":{"position":[[842,2]]}}}],["为什么",{"_index":1531,"t":{"206":{"position":[[75,3]]},"261":{"position":[[78,3]]},"404":{"position":[[50,3]]},"941":{"position":[[59,3]]},"1225":{"position":[[24,3]]},"3352":{"position":[[298,3]]}}}],["为准",{"_index":3316,"t":{"677":{"position":[[58,2],[66,2],[80,2],[165,2]]},"704":{"position":[[58,2],[66,2],[80,2],[165,2]]}}}],["为所欲为",{"_index":4918,"t":{"1518":{"position":[[45,4]]}}}],["主",{"_index":2443,"t":{"406":{"position":[[226,1]]},"1016":{"position":[[20,1]]},"1068":{"position":[[47,1],[67,1]]},"2815":{"position":[[65,1]]},"3086":{"position":[[29,1]]},"3908":{"position":[[61,1],[268,1],[281,1]]}}}],["主从",{"_index":2796,"t":{"516":{"position":[[749,2]]},"864":{"position":[[26,2]]},"943":{"position":[[59,2]]},"1031":{"position":[[8,2]]},"1046":{"position":[[11,2],[38,2]]},"1050":{"position":[[63,2]]},"1060":{"position":[[3,2],[28,2]]},"3966":{"position":[[71,2]]}}}],["主从复制",{"_index":3931,"t":{"1068":{"position":[[0,4]]},"1075":{"position":[[64,4]]},"1097":{"position":[[5,4]]},"3968":{"position":[[44,4],[413,4]]}}}],["主动",{"_index":2298,"t":{"363":{"position":[[54,2]]},"1432":{"position":[[194,2]]},"3924":{"position":[[1666,2]]}}}],["主库",{"_index":3896,"t":{"1046":{"position":[[17,2]]},"1054":{"position":[[126,2]]},"1062":{"position":[[2,2]]},"1064":{"position":[[573,2]]},"1066":{"position":[[109,2],[1118,2]]},"3962":{"position":[[2083,2]]}}}],["主机",{"_index":2155,"t":{"336":{"position":[[207,2]]},"404":{"position":[[265,2]]},"419":{"position":[[409,2],[432,2],[455,2]]},"2713":{"position":[[277,2]]},"2862":{"position":[[67,2],[220,2]]},"2875":{"position":[[14,2],[460,2]]},"2877":{"position":[[109,2],[274,2]]},"2897":{"position":[[119,2],[169,2],[207,2],[380,2],[511,2],[629,2]]},"2933":{"position":[[525,2],[534,2]]},"3399":{"position":[[2,2],[25,2],[101,2],[310,2]]},"3401":{"position":[[14,2]]},"3428":{"position":[[53,2]]},"3430":{"position":[[1491,2]]},"3910":{"position":[[599,2],[789,2],[954,2],[1036,2],[1114,2]]},"3916":{"position":[[1520,2],[1641,2]]},"3918":{"position":[[3490,2]]},"3922":{"position":[[2056,2]]},"3934":{"position":[[21,2],[486,2],[752,2],[850,2]]},"3994":{"position":[[1124,2]]},"4004":{"position":[[287,2]]}}}],["主流",{"_index":586,"t":{"95":{"position":[[157,2]]},"98":{"position":[[137,2]]},"172":{"position":[[31,2]]},"300":{"position":[[3,2]]},"1389":{"position":[[190,2]]},"2343":{"position":[[13,2]]}}}],["主线",{"_index":5312,"t":{"1699":{"position":[[107,2]]},"2404":{"position":[[47,2]]}}}],["主表",{"_index":3646,"t":{"851":{"position":[[1112,2],[1587,2]]},"1149":{"position":[[50,2]]}}}],["主要",{"_index":704,"t":{"112":{"position":[[69,2]]},"121":{"position":[[748,2]]},"359":{"position":[[102,2]]},"540":{"position":[[35,2]]},"572":{"position":[[0,2]]},"677":{"position":[[11,2]]},"704":{"position":[[11,2]]},"836":{"position":[[41,2]]},"1052":{"position":[[66,2]]},"1273":{"position":[[0,2]]},"1440":{"position":[[73,2]]},"1541":{"position":[[17,2]]},"1657":{"position":[[9,2]]},"1659":{"position":[[6,2]]},"1711":{"position":[[920,2]]},"1901":{"position":[[492,2]]},"1939":{"position":[[52,2]]},"2243":{"position":[[125,2]]},"2311":{"position":[[82,2]]},"2321":{"position":[[31,2],[51,2]]},"2359":{"position":[[609,2]]},"2442":{"position":[[2034,2]]},"2526":{"position":[[9,2]]},"2782":{"position":[[150,2]]},"2809":{"position":[[21,2]]},"2813":{"position":[[85,2]]},"2821":{"position":[[34,2]]},"2897":{"position":[[72,2]]},"3131":{"position":[[26,2],[116,2]]},"3152":{"position":[[5,2],[23,2]]},"3194":{"position":[[45,2]]},"3339":{"position":[[230,2]]},"3644":{"position":[[6,2]]},"3702":{"position":[[1357,2]]},"3824":{"position":[[27,2]]},"3826":{"position":[[59,2]]},"3860":{"position":[[38,2]]},"3934":{"position":[[67,2]]},"3940":{"position":[[617,2]]},"3958":{"position":[[325,2]]},"3992":{"position":[[222,2]]}}}],["主键",{"_index":3615,"t":{"830":{"position":[[66,2]]},"877":{"position":[[2035,2]]},"954":{"position":[[360,2]]},"1060":{"position":[[282,2]]},"1145":{"position":[[505,2],[523,2]]},"1364":{"position":[[192,2]]},"2326":{"position":[[110,2],[128,2]]},"3122":{"position":[[4,2],[31,2],[59,2]]},"3254":{"position":[[266,2]]},"3261":{"position":[[275,2]]},"3267":{"position":[[475,2]]},"3269":{"position":[[14,2],[23,2]]},"3271":{"position":[[14,2],[107,2]]},"3275":{"position":[[186,2]]},"3984":{"position":[[901,2]]}}}],["主页",{"_index":8527,"t":{"3702":{"position":[[617,2],[1104,2],[1140,2]]}}}],["主题",{"_index":5607,"t":{"1803":{"position":[[2715,2],[3104,2],[3509,2]]}}}],["举",{"_index":2905,"t":{"550":{"position":[[626,1]]},"1194":{"position":[[418,1]]}}}],["举例",{"_index":7958,"t":{"3352":{"position":[[302,2]]}}}],["之一",{"_index":7041,"t":{"2782":{"position":[[140,2]]},"3209":{"position":[[93,2]]},"3250":{"position":[[92,2]]}}}],["之上",{"_index":2433,"t":{"404":{"position":[[168,2]]}}}],["之前",{"_index":394,"t":{"46":{"position":[[2,2]]},"60":{"position":[[2,2]]},"70":{"position":[[2,2]]},"112":{"position":[[507,2]]},"121":{"position":[[184,2]]},"123":{"position":[[2,2],[12,2]]},"127":{"position":[[98,2]]},"148":{"position":[[543,2]]},"212":{"position":[[727,2]]},"336":{"position":[[428,2]]},"397":{"position":[[267,2]]},"411":{"position":[[567,2]]},"548":{"position":[[3,2]]},"567":{"position":[[62,2]]},"570":{"position":[[526,2]]},"583":{"position":[[10,2]]},"675":{"position":[[61,2]]},"679":{"position":[[2,2]]},"681":{"position":[[5,2]]},"702":{"position":[[2,2]]},"732":{"position":[[285,2]]},"749":{"position":[[209,2]]},"761":{"position":[[150,2]]},"846":{"position":[[120,2]]},"927":{"position":[[252,2],[465,2],[1174,2],[1389,2]]},"929":{"position":[[251,2],[977,2],[1201,2],[1998,2],[2220,2],[2436,2],[3201,2],[3422,2]]},"931":{"position":[[220,2],[398,2]]},"933":{"position":[[62,2]]},"941":{"position":[[12,2]]},"1394":{"position":[[159,2]]},"1422":{"position":[[144,2]]},"1424":{"position":[[433,2]]},"1432":{"position":[[16,2],[42,2]]},"1547":{"position":[[188,2]]},"1574":{"position":[[16,2]]},"1611":{"position":[[97,2],[154,2],[496,2],[668,2],[726,2]]},"1659":{"position":[[56,2]]},"1665":{"position":[[249,2]]},"1741":{"position":[[1669,2]]},"1807":{"position":[[59,2],[420,2]]},"1837":{"position":[[9,2]]},"1892":{"position":[[43,2]]},"1901":{"position":[[204,2],[302,2],[373,2]]},"1911":{"position":[[29,2]]},"1923":{"position":[[33,2]]},"1925":{"position":[[355,2]]},"1951":{"position":[[136,2],[568,2]]},"1971":{"position":[[15,2]]},"1985":{"position":[[15,2]]},"2008":{"position":[[15,2]]},"2255":{"position":[[532,2]]},"2261":{"position":[[462,2]]},"2361":{"position":[[95,2]]},"2486":{"position":[[570,2],[633,2]]},"2488":{"position":[[46,2]]},"2519":{"position":[[8,2],[305,2],[438,2]]},"2605":{"position":[[3,2]]},"2655":{"position":[[9,2]]},"2848":{"position":[[12,2],[332,2]]},"2899":{"position":[[43,2],[160,2],[445,2]]},"3092":{"position":[[147,2]]},"3118":{"position":[[2,2]]},"3246":{"position":[[18,2]]},"3256":{"position":[[3,2]]},"3352":{"position":[[22,2],[207,2],[225,2]]},"3414":{"position":[[130,2]]},"3434":{"position":[[62,2]]},"3464":{"position":[[510,2]]},"3481":{"position":[[2,2]]},"3593":{"position":[[83,2]]},"3644":{"position":[[56,2]]},"3732":{"position":[[2,2]]},"3828":{"position":[[55,2],[378,2],[1028,2]]},"3832":{"position":[[1092,2]]},"3934":{"position":[[709,2]]},"3966":{"position":[[1159,2]]}}}],["之后",{"_index":83,"t":{"5":{"position":[[17,2]]},"7":{"position":[[13,2]]},"11":{"position":[[2,2]]},"85":{"position":[[26,2]]},"112":{"position":[[1276,2]]},"127":{"position":[[346,2],[1645,2]]},"133":{"position":[[1110,2]]},"144":{"position":[[7,2],[29,2],[554,2]]},"148":{"position":[[331,2]]},"152":{"position":[[674,2]]},"179":{"position":[[82,2]]},"216":{"position":[[30,2]]},"220":{"position":[[789,2]]},"308":{"position":[[54,2]]},"310":{"position":[[56,2]]},"312":{"position":[[6,2]]},"325":{"position":[[166,2]]},"336":{"position":[[15,2],[130,2],[438,2]]},"340":{"position":[[18,2]]},"445":{"position":[[922,2]]},"567":{"position":[[178,2]]},"595":{"position":[[354,2]]},"675":{"position":[[301,2]]},"690":{"position":[[7,2]]},"724":{"position":[[38,2]]},"749":{"position":[[511,2]]},"846":{"position":[[137,2]]},"929":{"position":[[453,2],[1516,2],[1706,2],[2743,2],[2925,2],[3734,2],[3921,2]]},"931":{"position":[[667,2],[814,2]]},"933":{"position":[[178,2]]},"935":{"position":[[6,2]]},"988":{"position":[[439,2]]},"1403":{"position":[[13,2]]},"1412":{"position":[[777,2]]},"1424":{"position":[[1802,2],[2011,2]]},"1432":{"position":[[47,2]]},"1440":{"position":[[281,2]]},"1474":{"position":[[305,2]]},"1488":{"position":[[1687,2]]},"1516":{"position":[[72,2]]},"1520":{"position":[[353,2]]},"1545":{"position":[[52,2]]},"1547":{"position":[[179,2]]},"1582":{"position":[[443,2]]},"1611":{"position":[[126,2],[180,2],[554,2],[608,2],[787,2]]},"1627":{"position":[[356,2]]},"1659":{"position":[[415,2]]},"1665":{"position":[[291,2]]},"1745":{"position":[[335,2]]},"1755":{"position":[[820,2]]},"1807":{"position":[[64,2],[582,2]]},"1843":{"position":[[360,2]]},"1885":{"position":[[163,2]]},"1887":{"position":[[44,2]]},"1892":{"position":[[46,2]]},"1901":{"position":[[207,2],[376,2]]},"1923":{"position":[[58,2]]},"1925":{"position":[[1138,2]]},"1955":{"position":[[86,2]]},"1961":{"position":[[54,2]]},"2144":{"position":[[63,2]]},"2184":{"position":[[237,2]]},"2245":{"position":[[103,2]]},"2290":{"position":[[13,2]]},"2294":{"position":[[2,2]]},"2311":{"position":[[28,2]]},"2343":{"position":[[267,2]]},"2391":{"position":[[93,2]]},"2480":{"position":[[32,2]]},"2486":{"position":[[18,2]]},"2497":{"position":[[220,2]]},"2508":{"position":[[24,2]]},"2510":{"position":[[23,2],[84,2]]},"2512":{"position":[[18,2],[132,2]]},"2528":{"position":[[9,2]]},"2542":{"position":[[264,2]]},"2579":{"position":[[597,2]]},"2581":{"position":[[45,2],[1079,2]]},"2629":{"position":[[20,2],[137,2]]},"2651":{"position":[[6,2]]},"2657":{"position":[[67,2]]},"2694":{"position":[[206,2]]},"2776":{"position":[[5,2]]},"2798":{"position":[[129,2]]},"2805":{"position":[[506,2]]},"2807":{"position":[[49,2]]},"2813":{"position":[[697,2]]},"2836":{"position":[[1059,2]]},"2868":{"position":[[162,2]]},"3009":{"position":[[195,2]]},"3071":{"position":[[19,2]]},"3078":{"position":[[55,2]]},"3118":{"position":[[24,2]]},"3126":{"position":[[502,2]]},"3189":{"position":[[363,2]]},"3287":{"position":[[1239,2],[2972,2],[3060,2]]},"3296":{"position":[[23,2]]},"3323":{"position":[[346,2],[424,2]]},"3339":{"position":[[264,2]]},"3589":{"position":[[499,2]]},"3608":{"position":[[110,2]]},"3644":{"position":[[415,2]]},"3658":{"position":[[40,2]]},"3686":{"position":[[77,2]]},"3704":{"position":[[835,2]]},"3708":{"position":[[3753,2]]},"3740":{"position":[[96,2],[372,2],[464,2]]},"3806":{"position":[[254,2],[1645,2],[2701,2]]},"3828":{"position":[[60,2],[584,2],[1251,2]]},"3832":{"position":[[3272,2]]},"3844":{"position":[[932,2]]},"3864":{"position":[[18,2]]},"3916":{"position":[[2162,2]]},"3918":{"position":[[3413,2],[3699,2]]},"3922":{"position":[[1465,2]]},"3924":{"position":[[1615,2],[4375,2]]},"3950":{"position":[[878,2]]},"3952":{"position":[[483,2]]},"3984":{"position":[[516,2]]},"3994":{"position":[[1205,2]]}}}],["之外",{"_index":8638,"t":{"3754":{"position":[[15,2]]}}}],["之间",{"_index":1764,"t":{"239":{"position":[[188,2]]},"336":{"position":[[403,2]]},"338":{"position":[[1236,2]]},"340":{"position":[[82,2],[1885,2],[1909,2]]},"353":{"position":[[53,2]]},"357":{"position":[[7,2]]},"365":{"position":[[44,2]]},"404":{"position":[[26,2]]},"411":{"position":[[644,2]]},"615":{"position":[[447,2]]},"1046":{"position":[[41,2]]},"1408":{"position":[[1265,2]]},"1697":{"position":[[40,2]]},"1793":{"position":[[40,2]]},"2303":{"position":[[60,2]]},"2311":{"position":[[65,2]]},"2404":{"position":[[140,2]]},"2420":{"position":[[609,2],[1566,2],[1726,2]]},"2599":{"position":[[90,2]]},"2848":{"position":[[886,2]]},"3126":{"position":[[588,2]]}}}],["乌克兰",{"_index":6690,"t":{"2559":{"position":[[2617,3],[2627,3],[2632,3]]}}}],["乌兹别克斯坦",{"_index":6698,"t":{"2559":{"position":[[2695,6],[2725,6]]}}}],["乌拉圭",{"_index":6669,"t":{"2559":{"position":[[2387,3]]}}}],["乐",{"_index":6746,"t":{"2615":{"position":[[22,1]]}}}],["乐此不疲",{"_index":9391,"t":{"3926":{"position":[[182,4]]}}}],["九",{"_index":3822,"t":{"956":{"position":[[573,1],[1462,1]]},"960":{"position":[[1208,1]]}}}],["也好",{"_index":7967,"t":{"3352":{"position":[[405,2]]}}}],["也就是说",{"_index":4148,"t":{"1374":{"position":[[83,4]]},"2354":{"position":[[27,4]]}}}],["也许",{"_index":7747,"t":{"3242":{"position":[[259,2]]},"3910":{"position":[[256,2]]},"3934":{"position":[[2439,2]]}}}],["也门",{"_index":6463,"t":{"2559":{"position":[[327,2]]}}}],["书写",{"_index":1576,"t":{"214":{"position":[[21,2]]},"484":{"position":[[114,2],[162,2],[213,2],[274,2]]},"1221":{"position":[[53,2]]},"1511":{"position":[[193,2]]},"1576":{"position":[[316,2]]},"3996":{"position":[[1457,2],[1505,2]]}}}],["书面上",{"_index":8427,"t":{"3620":{"position":[[51,3]]}}}],["买",{"_index":4562,"t":{"1511":{"position":[[56,1]]}}}],["买家",{"_index":7441,"t":{"3118":{"position":[[284,2]]}}}],["乱码",{"_index":2518,"t":{"427":{"position":[[117,2],[165,2]]},"3506":{"position":[[553,2]]},"3660":{"position":[[44,2]]},"3918":{"position":[[3318,2]]},"3920":{"position":[[1645,2]]},"3944":{"position":[[363,2]]},"3986":{"position":[[815,2]]},"3992":{"position":[[3539,2]]},"4000":{"position":[[1011,2],[1102,2]]},"4006":{"position":[[307,2]]}}}],["了解",{"_index":1156,"t":{"154":{"position":[[24,2],[30,2]]},"182":{"position":[[103,2],[135,2]]},"194":{"position":[[24,2],[30,2]]},"204":{"position":[[470,2],[476,2]]},"237":{"position":[[1358,2],[1364,2]]},"257":{"position":[[24,2],[30,2]]},"401":{"position":[[380,2]]},"425":{"position":[[24,2],[30,2]]},"435":{"position":[[1155,2]]},"465":{"position":[[24,2],[30,2]]},"536":{"position":[[24,2],[30,2]]},"562":{"position":[[24,2],[30,2]]},"587":{"position":[[998,2]]},"639":{"position":[[445,2]]},"659":{"position":[[42,2]]},"736":{"position":[[24,2],[30,2]]},"775":{"position":[[24,2],[30,2]]},"941":{"position":[[1,2],[18,2]]},"1010":{"position":[[41,2]]},"1153":{"position":[[24,2],[30,2]]},"1307":{"position":[[22,2]]},"1311":{"position":[[522,2]]},"1317":{"position":[[522,2],[539,2]]},"1389":{"position":[[265,2]]},"1403":{"position":[[62,2],[68,2]]},"1408":{"position":[[1270,2]]},"1418":{"position":[[291,2]]},"1530":{"position":[[105,2]]},"1547":{"position":[[424,2]]},"1549":{"position":[[495,2]]},"1574":{"position":[[21,2]]},"1781":{"position":[[473,2]]},"1837":{"position":[[1,2]]},"1965":{"position":[[1,2]]},"1969":{"position":[[194,2]]},"1983":{"position":[[106,2]]},"2006":{"position":[[106,2]]},"2321":{"position":[[90,2]]},"2561":{"position":[[24,2],[30,2]]},"2564":{"position":[[197,2]]},"2593":{"position":[[1,2]]},"2611":{"position":[[24,2],[30,2]]},"2698":{"position":[[24,2],[30,2]]},"2717":{"position":[[433,2],[439,2]]},"2737":{"position":[[24,2],[30,2]]},"2740":{"position":[[129,2]]},"2827":{"position":[[6,2]]},"2856":{"position":[[1954,2]]},"3126":{"position":[[529,2],[535,2]]},"3150":{"position":[[180,2]]},"3205":{"position":[[24,2],[30,2]]},"3240":{"position":[[24,2],[30,2]]},"3273":{"position":[[978,2]]},"3298":{"position":[[24,2],[30,2]]},"3323":{"position":[[539,2]]},"3333":{"position":[[24,2],[30,2]]},"3409":{"position":[[24,2],[30,2]]},"3440":{"position":[[60,2]]},"3472":{"position":[[24,2],[30,2]]},"3506":{"position":[[645,2]]},"3547":{"position":[[815,2]]},"3605":{"position":[[24,2],[30,2]]},"3702":{"position":[[1533,2]]},"3932":{"position":[[2455,2]]}}}],["事",{"_index":2240,"t":{"340":{"position":[[1881,1]]},"353":{"position":[[47,1]]},"3622":{"position":[[197,1]]}}}],["事业",{"_index":1197,"t":{"168":{"position":[[13,2]]}}}],["事件",{"_index":612,"t":{"98":{"position":[[162,2]]},"292":{"position":[[57,2]]},"482":{"position":[[363,2],[796,2]]},"504":{"position":[[235,2]]},"567":{"position":[[52,2],[79,2],[194,2],[304,2],[381,2]]},"570":{"position":[[40,2],[528,2],[723,2]]},"924":{"position":[[211,2]]},"933":{"position":[[52,2],[79,2],[194,2],[304,2],[381,2],[551,2]]},"1214":{"position":[[115,2]]},"1383":{"position":[[240,2]]},"1511":{"position":[[2932,2],[3153,2]]},"1695":{"position":[[39,2]]},"1697":{"position":[[0,2],[74,2]]},"1699":{"position":[[22,2]]},"1701":{"position":[[23,2]]},"1705":{"position":[[30,2]]},"1709":{"position":[[6,2]]},"1711":{"position":[[13,2],[929,2]]},"1791":{"position":[[40,2]]},"1793":{"position":[[0,2]]},"1795":{"position":[[2,2],[912,2],[2011,2],[2602,2],[2740,2]]},"1797":{"position":[[319,2],[394,2],[474,2]]},"1799":{"position":[[22,2],[782,2],[997,2]]},"1801":{"position":[[49,2],[536,2],[2040,2],[2094,2],[2767,2],[2854,2],[2963,2],[3176,2],[3319,2],[3445,2]]},"1803":{"position":[[2626,2],[4002,2],[4056,2],[4739,2],[4826,2],[4935,2],[5169,2],[5532,2],[5676,2]]},"1805":{"position":[[23,2],[525,2]]},"1807":{"position":[[51,2],[854,2]]},"1809":{"position":[[485,2]]},"1817":{"position":[[80,2]]},"1819":{"position":[[934,2]]},"1821":{"position":[[154,2],[202,2]]},"1825":{"position":[[9,2],[42,2]]},"2239":{"position":[[157,2]]},"2311":{"position":[[108,2]]},"2418":{"position":[[622,2],[1144,2]]},"2937":{"position":[[129,2],[986,2]]},"3254":{"position":[[601,2],[976,2],[1203,2]]},"3412":{"position":[[56,2]]},"3416":{"position":[[260,2]]},"3828":{"position":[[47,2]]},"3910":{"position":[[444,2],[2603,2]]},"3912":{"position":[[977,2],[1010,2]]},"3914":{"position":[[881,2],[1442,2],[2907,2],[3570,2]]},"3918":{"position":[[869,2],[3725,2],[3974,2],[4094,2],[4121,2],[4183,2]]},"3920":{"position":[[470,2],[1043,2],[1065,2],[1939,2],[1966,2]]},"3922":{"position":[[7,2],[46,2],[68,2],[95,2],[171,2],[2004,2],[2207,2],[2251,2]]},"3924":{"position":[[380,2]]},"3936":{"position":[[75,2],[925,2],[987,2],[1293,2],[1317,2]]},"3948":{"position":[[40,2],[572,2]]},"3950":{"position":[[836,2]]},"3952":{"position":[[138,2]]},"3960":{"position":[[35,2]]},"3962":{"position":[[1131,2]]},"3966":{"position":[[1370,2]]},"3974":{"position":[[133,2]]},"3978":{"position":[[578,2],[580,2]]},"3982":{"position":[[303,2]]},"3992":{"position":[[27,2],[2725,2]]}}}],["事件处理",{"_index":5305,"t":{"1697":{"position":[[26,4]]},"1793":{"position":[[26,4]]},"1809":{"position":[[48,4]]}}}],["事先",{"_index":8420,"t":{"3614":{"position":[[20,2]]}}}],["事务",{"_index":2856,"t":{"532":{"position":[[210,2]]},"1837":{"position":[[137,2]]},"1839":{"position":[[122,2]]},"1894":{"position":[[38,2]]},"1896":{"position":[[57,2]]},"1923":{"position":[[124,2]]},"2326":{"position":[[167,2]]},"3104":{"position":[[61,2]]},"3116":{"position":[[5,2],[32,2]]},"3211":{"position":[[53,2]]},"3254":{"position":[[1298,2]]},"3282":{"position":[[0,2],[45,2],[83,2],[118,2],[155,2],[208,2],[218,2],[243,2]]},"3284":{"position":[[38,2]]},"3287":{"position":[[175,2],[500,2],[718,2],[773,2],[871,2],[956,2],[1039,2],[1147,2],[3044,2],[3078,2],[3160,2]]},"3289":{"position":[[78,2],[183,2]]},"3291":{"position":[[22,2],[385,2],[437,2],[677,2],[1022,2],[1157,2],[1209,2],[1265,2],[1273,2],[2111,2]]},"3298":{"position":[[35,2],[56,2]]},"3319":{"position":[[39,2]]},"3922":{"position":[[354,2]]},"3950":{"position":[[741,2]]},"3962":{"position":[[2041,2]]},"3966":{"position":[[111,2]]},"3968":{"position":[[512,2],[555,2],[745,2]]},"3970":{"position":[[79,2]]},"3972":{"position":[[233,2]]},"3980":{"position":[[428,2]]},"3992":{"position":[[2906,2]]}}}],["事务处理",{"_index":7403,"t":{"3096":{"position":[[139,4]]}}}],["事实",{"_index":1327,"t":{"186":{"position":[[163,2]]}}}],["事情",{"_index":2220,"t":{"340":{"position":[[349,2]]},"1430":{"position":[[89,2]]},"1432":{"position":[[113,2]]},"2770":{"position":[[44,2]]},"3114":{"position":[[2,2]]},"3680":{"position":[[421,2]]}}}],["事项",{"_index":1857,"t":{"255":{"position":[[38,2]]},"445":{"position":[[685,2]]}}}],["二",{"_index":2262,"t":{"350":{"position":[[274,1]]},"455":{"position":[[243,1]]},"645":{"position":[[103,1],[286,1]]},"647":{"position":[[133,1]]},"649":{"position":[[62,1],[236,1]]},"651":{"position":[[65,1],[248,1]]},"661":{"position":[[63,1],[162,1]]},"663":{"position":[[66,1],[171,1]]},"665":{"position":[[91,1],[626,1]]},"667":{"position":[[94,1],[653,1]]},"669":{"position":[[91,1],[626,1]]},"671":{"position":[[94,1],[653,1]]},"779":{"position":[[55,1],[243,1]]},"781":{"position":[[58,1],[147,1]]},"783":{"position":[[52,1],[133,1]]},"785":{"position":[[55,1],[142,1]]},"787":{"position":[[58,1],[151,1]]},"789":{"position":[[61,1],[160,1]]},"795":{"position":[[61,1],[323,1]]},"853":{"position":[[60,1]]},"866":{"position":[[93,1]]},"871":{"position":[[70,1]]},"873":{"position":[[80,1]]},"881":{"position":[[174,1]]},"883":{"position":[[211,1]]},"954":{"position":[[63,1],[230,1]]},"956":{"position":[[87,1],[899,1]]},"958":{"position":[[65,1]]},"960":{"position":[[60,1]]},"962":{"position":[[92,1],[264,1]]},"965":{"position":[[63,1],[368,1]]},"967":{"position":[[62,1],[371,1]]},"969":{"position":[[61,1],[363,1]]},"971":{"position":[[61,1],[363,1]]},"973":{"position":[[78,1],[285,1]]},"975":{"position":[[82,1],[301,1]]},"979":{"position":[[64,1]]},"1160":{"position":[[81,1],[965,1]]},"1162":{"position":[[87,1],[1019,1]]},"1164":{"position":[[107,1],[523,1]]},"1166":{"position":[[135,1],[674,1]]},"1168":{"position":[[108,1],[404,1]]},"1170":{"position":[[135,1],[648,1]]},"1173":{"position":[[79,1],[310,1]]},"1175":{"position":[[85,1],[334,1]]},"1177":{"position":[[79,1],[310,1]]},"1179":{"position":[[87,1],[539,1]]},"1181":{"position":[[88,1],[377,1]]},"1183":{"position":[[89,1],[441,1]]},"1185":{"position":[[811,1],[1196,1]]},"1188":{"position":[[73,1],[339,1]]},"1190":{"position":[[76,1],[353,1]]},"1194":{"position":[[131,1]]},"1325":{"position":[[55,1],[244,1]]},"1327":{"position":[[58,1],[147,1]]},"1329":{"position":[[85,1],[566,1]]},"1331":{"position":[[88,1],[584,1]]},"1333":{"position":[[85,1],[566,1]]},"1335":{"position":[[88,1],[587,1]]},"1341":{"position":[[91,1],[382,1]]},"1343":{"position":[[94,1],[394,1]]},"1345":{"position":[[91,1],[382,1]]},"1347":{"position":[[94,1],[394,1]]},"1349":{"position":[[62,1],[236,1]]},"1351":{"position":[[65,1],[248,1]]},"1539":{"position":[[48,1]]},"1543":{"position":[[114,1]]},"1619":{"position":[[471,1]]},"1633":{"position":[[126,1]]},"1659":{"position":[[699,1]]},"1761":{"position":[[18,1]]},"1907":{"position":[[467,1]]},"2272":{"position":[[361,1],[430,1]]},"2603":{"position":[[133,1]]},"2965":{"position":[[190,1]]},"3275":{"position":[[387,1]]},"3291":{"position":[[6,1]]},"3432":{"position":[[70,1],[974,1],[1418,1],[2450,1],[3405,1],[3888,1],[4532,1]]},"3434":{"position":[[509,1],[990,1],[2056,1]]},"3466":{"position":[[231,1]]},"3640":{"position":[[6,1]]},"3644":{"position":[[699,1]]},"3924":{"position":[[4645,1]]}}}],["二义性",{"_index":9828,"t":{"3966":{"position":[[1118,3]]}}}],["二次",{"_index":7827,"t":{"3275":{"position":[[402,2]]},"3982":{"position":[[245,2],[611,2]]}}}],["二级",{"_index":7933,"t":{"3337":{"position":[[44,2]]},"3912":{"position":[[2217,2]]},"3940":{"position":[[720,2]]},"3942":{"position":[[83,2],[327,2]]},"3944":{"position":[[210,2],[577,2],[776,2]]},"3960":{"position":[[146,2]]},"3978":{"position":[[1778,2]]},"3996":{"position":[[16,2]]}}}],["二维",{"_index":5164,"t":{"1631":{"position":[[630,2]]},"1661":{"position":[[902,2]]},"1869":{"position":[[244,2],[249,2]]},"3023":{"position":[[899,2]]}}}],["二维码",{"_index":4628,"t":{"1511":{"position":[[683,3],[750,3],[821,3],[970,3]]}}}],["二者",{"_index":3935,"t":{"1068":{"position":[[99,2]]}}}],["二进制",{"_index":3940,"t":{"1073":{"position":[[50,3]]},"1745":{"position":[[11,3]]}}}],["于是",{"_index":7963,"t":{"3352":{"position":[[359,2],[525,2]]}}}],["云",{"_index":1752,"t":{"239":{"position":[[88,1]]},"1511":{"position":[[4048,1]]},"3432":{"position":[[3426,1],[3914,1]]}}}],["互",{"_index":8408,"t":{"3608":{"position":[[10,1]]}}}],["互动",{"_index":4534,"t":{"1509":{"position":[[87,2]]}}}],["互换",{"_index":9634,"t":{"3950":{"position":[[288,2]]}}}],["互斥",{"_index":5889,"t":{"1941":{"position":[[1025,2]]}}}],["互相",{"_index":6755,"t":{"2615":{"position":[[74,2],[79,2]]}}}],["互联网",{"_index":1219,"t":{"172":{"position":[[28,3]]},"1048":{"position":[[3,3]]},"1672":{"position":[[5,3]]},"1761":{"position":[[128,3]]},"2910":{"position":[[41,3],[244,3],[286,3],[376,3]]},"3136":{"position":[[33,3],[160,3]]},"3476":{"position":[[1,3]]},"3608":{"position":[[67,3]]}}}],["五",{"_index":3294,"t":{"665":{"position":[[300,1],[868,1]]},"667":{"position":[[312,1],[904,1]]},"669":{"position":[[300,1],[868,1]]},"671":{"position":[[312,1],[904,1]]},"795":{"position":[[171,1],[466,1]]},"853":{"position":[[390,1]]},"956":{"position":[[295,1],[1140,1]]},"958":{"position":[[210,1]]},"960":{"position":[[521,1]]},"965":{"position":[[237,1],[575,1]]},"967":{"position":[[242,1],[584,1]]},"969":{"position":[[227,1],[562,1]]},"971":{"position":[[227,1],[562,1]]},"1160":{"position":[[450,1],[1367,1]]},"1162":{"position":[[474,1],[1439,1]]},"1194":{"position":[[310,1]]},"1329":{"position":[[317,1],[831,1]]},"1331":{"position":[[329,1],[858,1]]},"1333":{"position":[[317,1],[831,1]]},"1335":{"position":[[329,1],[861,1]]},"3466":{"position":[[650,1]]}}}],["五个",{"_index":3977,"t":{"1117":{"position":[[475,2],[1356,2],[2172,2],[3205,2],[4171,2]]}}}],["五分钟",{"_index":6319,"t":{"2420":{"position":[[1645,3]]}}}],["五脏俱全",{"_index":604,"t":{"98":{"position":[[111,4]]}}}],["五花八门",{"_index":8417,"t":{"3612":{"position":[[37,4]]}}}],["亚美尼亚",{"_index":6465,"t":{"2559":{"position":[[333,4],[344,4],[351,4]]}}}],["交互",{"_index":1774,"t":{"239":{"position":[[310,2]]},"404":{"position":[[225,2]]},"500":{"position":[[18,2]]},"2303":{"position":[[64,2],[91,2]]},"2341":{"position":[[210,2]]},"3138":{"position":[[17,2]]},"3476":{"position":[[30,2],[88,2]]},"3478":{"position":[[20,2]]},"3614":{"position":[[15,2],[56,2]]}}}],["交替",{"_index":7462,"t":{"3126":{"position":[[590,2]]}}}],["交流",{"_index":832,"t":{"116":{"position":[[3,2]]},"154":{"position":[[3,2]]},"194":{"position":[[3,2]]},"222":{"position":[[3,2]]},"257":{"position":[[3,2]]},"296":{"position":[[3,2]]},"333":{"position":[[3,2]]},"375":{"position":[[3,2]]},"425":{"position":[[3,2]]},"465":{"position":[[3,2]]},"496":{"position":[[3,2]]},"536":{"position":[[3,2]]},"562":{"position":[[3,2]]},"576":{"position":[[3,2]]},"641":{"position":[[3,2]]},"657":{"position":[[3,2]]},"673":{"position":[[3,2]]},"700":{"position":[[3,2]]},"736":{"position":[[3,2]]},"753":{"position":[[3,2]]},"775":{"position":[[3,2]]},"797":{"position":[[3,2]]},"838":{"position":[[3,2]]},"848":{"position":[[3,2]]},"891":{"position":[[3,2]]},"921":{"position":[[3,2]]},"937":{"position":[[3,2]]},"951":{"position":[[3,2]]},"983":{"position":[[3,2]]},"1043":{"position":[[3,2]]},"1099":{"position":[[3,2]]},"1137":{"position":[[3,2]]},"1153":{"position":[[3,2]]},"1218":{"position":[[3,2]]},"1283":{"position":[[3,2]]},"1304":{"position":[[3,2]]},"1321":{"position":[[3,2]]},"1355":{"position":[[3,2]]},"1370":{"position":[[3,2]]},"1381":{"position":[[3,2]]},"1442":{"position":[[3,2]]},"1476":{"position":[[3,2]]},"1501":{"position":[[3,2]]},"1563":{"position":[[3,2]]},"1568":{"position":[[3,2]]},"1669":{"position":[[3,2]]},"1693":{"position":[[3,2]]},"1713":{"position":[[3,2]]},"1757":{"position":[[3,2]]},"1789":{"position":[[3,2]]},"1829":{"position":[[3,2]]},"1889":{"position":[[3,2]]},"1967":{"position":[[3,2]]},"2257":{"position":[[3,2]]},"2287":{"position":[[3,2]]},"2300":{"position":[[3,2]]},"2323":{"position":[[3,2]]},"2337":{"position":[[3,2]]},"2389":{"position":[[3,2]]},"2492":{"position":[[3,2]]},"2514":{"position":[[3,2]]},"2561":{"position":[[3,2]]},"2595":{"position":[[3,2]]},"2611":{"position":[[3,2]]},"2631":{"position":[[3,2]]},"2659":{"position":[[3,2]]},"2698":{"position":[[3,2]]},"2737":{"position":[[3,2]]},"2766":{"position":[[3,2]]},"2778":{"position":[[3,2]]},"2800":{"position":[[3,2]]},"2840":{"position":[[3,2]]},"2858":{"position":[[3,2]]},"2907":{"position":[[3,2]]},"2975":{"position":[[3,2]]},"3084":{"position":[[3,2]]},"3128":{"position":[[3,2]]},"3133":{"position":[[3,2]]},"3136":{"position":[[78,2]]},"3205":{"position":[[3,2]]},"3240":{"position":[[3,2]]},"3279":{"position":[[3,2]]},"3298":{"position":[[3,2]]},"3311":{"position":[[3,2]]},"3333":{"position":[[3,2]]},"3347":{"position":[[3,2]]},"3409":{"position":[[3,2]]},"3472":{"position":[[3,2]]},"3605":{"position":[[3,2]]},"3724":{"position":[[3,2]]},"3756":{"position":[[3,2]]},"3906":{"position":[[3,2]]},"3986":{"position":[[1230,2]]}}}],["交给",{"_index":4213,"t":{"1389":{"position":[[87,2]]},"2862":{"position":[[438,2]]}}}],["交谈",{"_index":7477,"t":{"3136":{"position":[[101,2],[155,2]]}}}],["产品",{"_index":1202,"t":{"168":{"position":[[39,2]]},"1509":{"position":[[124,2],[146,2],[224,2]]},"2599":{"position":[[93,2]]},"2915":{"position":[[239,2]]}}}],["产物",{"_index":5447,"t":{"1761":{"position":[[313,2]]}}}],["产生",{"_index":1870,"t":{"255":{"position":[[253,2]]},"336":{"position":[[352,2]]},"659":{"position":[[56,2]]},"1010":{"position":[[55,2]]},"1374":{"position":[[128,2]]},"1511":{"position":[[146,2]]},"1973":{"position":[[129,2]]},"1987":{"position":[[129,2]]},"2010":{"position":[[137,2]]},"2303":{"position":[[62,2]]},"3112":{"position":[[28,2]]},"3284":{"position":[[21,2]]},"3412":{"position":[[130,2]]},"3676":{"position":[[0,2]]},"3729":{"position":[[40,2]]},"3982":{"position":[[722,2]]},"3988":{"position":[[453,2]]}}}],["亮",{"_index":9160,"t":{"3916":{"position":[[837,1]]}}}],["亮灯",{"_index":4625,"t":{"1511":{"position":[[654,2]]}}}],["亮点",{"_index":9193,"t":{"3916":{"position":[[2829,2]]},"3924":{"position":[[2026,2]]},"3928":{"position":[[709,2]]},"3932":{"position":[[1557,2]]},"3934":{"position":[[1199,2]]},"3936":{"position":[[984,2]]},"3938":{"position":[[810,2]]},"3940":{"position":[[760,2]]},"3944":{"position":[[588,2]]}}}],["亲儿子",{"_index":2754,"t":{"500":{"position":[[64,3]]}}}],["亲切",{"_index":4653,"t":{"1511":{"position":[[944,2]]}}}],["亲自",{"_index":1168,"t":{"160":{"position":[[19,2]]}}}],["人为",{"_index":6797,"t":{"2682":{"position":[[42,2]]},"3350":{"position":[[142,2]]}}}],["人员",{"_index":1279,"t":{"182":{"position":[[126,2],[227,2]]},"380":{"position":[[19,2]]},"384":{"position":[[58,2]]},"1847":{"position":[[57,2]]},"3414":{"position":[[213,2]]},"3610":{"position":[[35,2],[45,2]]},"3612":{"position":[[8,2]]}}}],["人大",{"_index":7601,"t":{"3211":{"position":[[179,2]]}}}],["什么",{"_index":1277,"t":{"182":{"position":[[115,2]]},"265":{"position":[[34,2]]},"394":{"position":[[1,2]]},"565":{"position":[[131,2],[201,2]]},"585":{"position":[[386,2]]},"941":{"position":[[20,2]]},"1488":{"position":[[1693,2]]},"2768":{"position":[[1591,2]]},"2770":{"position":[[169,2],[178,2]]}}}],["仅",{"_index":594,"t":{"98":{"position":[[47,1]]},"255":{"position":[[109,1]]},"304":{"position":[[31,1]]},"544":{"position":[[149,1]]},"749":{"position":[[212,1],[514,1],[878,1]]},"1566":{"position":[[188,1],[655,1]]},"1755":{"position":[[998,1]]},"1901":{"position":[[385,1]]},"1903":{"position":[[581,1],[631,1],[639,1]]},"1949":{"position":[[15,1]]},"2420":{"position":[[1181,1],[1729,1]]},"2713":{"position":[[658,1]]},"2879":{"position":[[58,1]]},"3063":{"position":[[1062,1],[1150,1],[1414,1]]},"3428":{"position":[[9,1]]},"3686":{"position":[[389,1]]},"3706":{"position":[[1054,1],[1142,1],[1425,1]]},"3958":{"position":[[417,1]]}}}],["仅仅",{"_index":2213,"t":{"340":{"position":[[103,2]]},"1717":{"position":[[31,2]]},"2402":{"position":[[35,2]]},"2688":{"position":[[64,2]]},"3626":{"position":[[181,2]]}}}],["仅次于",{"_index":5868,"t":{"1931":{"position":[[9,3]]}}}],["仅限",{"_index":1874,"t":{"259":{"position":[[9,2]]},"327":{"position":[[9,2]]},"461":{"position":[[244,2]]},"467":{"position":[[62,2]]},"1246":{"position":[[9,2]]},"1248":{"position":[[9,2]]},"1265":{"position":[[9,2]]},"1641":{"position":[[478,2],[562,2]]},"1661":{"position":[[657,2]]},"1715":{"position":[[9,2]]},"1791":{"position":[[74,2]]},"1801":{"position":[[9,2]]},"1815":{"position":[[9,2]]},"1817":{"position":[[9,2]]},"1819":{"position":[[9,2]]},"1887":{"position":[[9,2]]},"2063":{"position":[[9,2]]},"2065":{"position":[[9,2]]},"2067":{"position":[[9,2]]},"2098":{"position":[[9,2]]},"2169":{"position":[[9,2]]},"2173":{"position":[[9,2]]},"2175":{"position":[[7,2]]},"2255":{"position":[[9,2]]},"2259":{"position":[[9,2]]},"2276":{"position":[[9,2]]},"2339":{"position":[[9,2]]},"2363":{"position":[[221,2]]},"2391":{"position":[[128,2]]},"2538":{"position":[[9,2]]},"2735":{"position":[[9,2]]},"2780":{"position":[[9,2]]},"2860":{"position":[[9,2]]},"2877":{"position":[[9,2]]},"2879":{"position":[[389,2]]},"2893":{"position":[[9,2]]},"3023":{"position":[[654,2]]},"3067":{"position":[[9,2]]},"3287":{"position":[[1178,2]]},"3339":{"position":[[9,2]]},"3345":{"position":[[9,2]]},"3424":{"position":[[9,2]]},"3430":{"position":[[1820,2],[3657,2],[4518,2]]},"3432":{"position":[[4860,2]]},"3450":{"position":[[9,2]]},"3452":{"position":[[9,2]]},"3454":{"position":[[9,2]]},"3456":{"position":[[9,2]]},"3466":{"position":[[9,2]]},"3474":{"position":[[9,2]]},"3498":{"position":[[393,2]]},"3543":{"position":[[480,2]]},"3593":{"position":[[9,2]]},"3603":{"position":[[9,2]]},"3686":{"position":[[9,2]]},"3688":{"position":[[9,2],[741,2]]},"3690":{"position":[[9,2]]},"3692":{"position":[[9,2]]},"3694":{"position":[[9,2]]},"3698":{"position":[[9,2]]},"3700":{"position":[[9,2]]},"3708":{"position":[[1452,2],[1814,2],[2279,2]]},"3716":{"position":[[9,2]]},"3722":{"position":[[9,2]]},"3758":{"position":[[132,2]]}}}],["今日",{"_index":4645,"t":{"1511":{"position":[[840,2]]}}}],["介于",{"_index":6729,"t":{"2599":{"position":[[76,2]]}}}],["介绍",{"_index":1767,"t":{"239":{"position":[[217,2]]},"1520":{"position":[[103,2]]},"1535":{"position":[[478,2]]},"1539":{"position":[[41,2],[1908,2]]},"1543":{"position":[[21,2]]},"3990":{"position":[[795,2]]},"4006":{"position":[[748,2]]}}}],["介质",{"_index":5393,"t":{"1743":{"position":[[283,2],[478,2]]},"2843":{"position":[[122,2]]}}}],["仍然",{"_index":4229,"t":{"1392":{"position":[[76,2]]}}}],["从头",{"_index":8124,"t":{"3432":{"position":[[749,2]]}}}],["从左到右",{"_index":6299,"t":{"2418":{"position":[[186,4]]}}}],["从无到有",{"_index":7723,"t":{"3242":{"position":[[36,4]]},"3910":{"position":[[33,4]]},"3934":{"position":[[2119,4]]}}}],["从未",{"_index":8478,"t":{"3626":{"position":[[630,2]]}}}],["从简",{"_index":480,"t":{"85":{"position":[[118,2]]}}}],["从而",{"_index":1642,"t":{"225":{"position":[[16,2]]},"300":{"position":[[314,2]]},"1048":{"position":[[68,2]]},"1383":{"position":[[58,2]]},"1894":{"position":[[52,2]]},"3094":{"position":[[42,2]]},"3108":{"position":[[179,2]]},"3150":{"position":[[165,2]]},"3170":{"position":[[77,2]]}}}],["仓",{"_index":7603,"t":{"3211":{"position":[[182,1]]}}}],["仓储",{"_index":160,"t":{"11":{"position":[[675,2]]},"530":{"position":[[621,2]]},"552":{"position":[[64,2]]},"554":{"position":[[47,2]]},"810":{"position":[[162,2]]},"812":{"position":[[170,2]]},"814":{"position":[[161,2]]},"816":{"position":[[169,2]]},"939":{"position":[[32,2]]},"949":{"position":[[107,2],[151,2],[195,2],[296,2]]},"986":{"position":[[35,2],[123,2],[132,2]]},"988":{"position":[[20,2],[57,2],[342,2],[349,2],[398,2],[444,2],[492,2]]},"990":{"position":[[17,2],[29,2],[54,2]]},"992":{"position":[[28,2],[66,2]]},"994":{"position":[[48,2],[106,2]]},"996":{"position":[[27,2],[58,2]]},"998":{"position":[[47,2],[98,2]]},"1000":{"position":[[38,2],[99,2]]},"1002":{"position":[[38,2],[99,2]]},"1004":{"position":[[44,2],[111,2]]},"1006":{"position":[[44,2],[111,2]]},"1008":{"position":[[43,2],[109,2]]},"1010":{"position":[[127,2],[193,2]]},"1012":{"position":[[36,2],[95,2]]},"1014":{"position":[[41,2],[105,2]]},"1016":{"position":[[26,2]]},"1018":{"position":[[41,2]]},"1020":{"position":[[18,2]]},"1026":{"position":[[6,2],[51,2],[106,2],[177,2]]},"1031":{"position":[[11,2],[20,2],[107,2],[212,2]]},"1037":{"position":[[326,2],[347,2]]},"1039":{"position":[[621,2]]},"1041":{"position":[[11,2],[19,2],[36,2],[41,2],[68,2],[450,2],[1132,2],[1359,2]]},"1052":{"position":[[85,2],[89,2],[116,2]]},"1064":{"position":[[224,2]]},"1066":{"position":[[78,2],[89,2],[95,2],[826,2]]},"1107":{"position":[[46,2],[100,2]]},"1109":{"position":[[35,2]]},"1111":{"position":[[174,2]]},"1113":{"position":[[172,2]]},"1115":{"position":[[172,2]]},"1117":{"position":[[1756,2]]},"1119":{"position":[[161,2]]},"1121":{"position":[[169,2]]},"1123":{"position":[[145,2]]},"1129":{"position":[[254,2],[1088,2]]},"1194":{"position":[[15,2]]},"1212":{"position":[[22,2],[163,2]]},"1295":{"position":[[3,2]]},"1368":{"position":[[29,2],[412,2],[742,2],[749,2],[755,2],[762,2],[768,2]]},"1408":{"position":[[1174,2]]},"1434":{"position":[[147,2]]},"1566":{"position":[[102,2]]},"1773":{"position":[[313,2]]},"2294":{"position":[[704,2]]},"2476":{"position":[[166,2]]},"2478":{"position":[[276,2]]},"2831":{"position":[[615,2]]},"3131":{"position":[[142,2]]},"3224":{"position":[[4,2],[17,2],[236,2],[245,2],[253,2],[1722,2]]},"3256":{"position":[[97,2]]},"3258":{"position":[[220,2],[574,2]]},"3289":{"position":[[166,2]]},"3291":{"position":[[1997,2]]},"3924":{"position":[[1375,2]]},"3930":{"position":[[1453,2]]},"3966":{"position":[[74,2]]},"3968":{"position":[[48,2],[106,2],[421,2]]},"3972":{"position":[[508,2]]},"3978":{"position":[[483,2]]},"3980":{"position":[[590,2]]},"3982":{"position":[[522,2]]},"3996":{"position":[[603,2],[1453,2]]},"3998":{"position":[[156,2],[611,2]]},"4006":{"position":[[672,2]]}}}],["仓库",{"_index":2338,"t":{"378":{"position":[[39,2]]},"382":{"position":[[4,2]]},"397":{"position":[[34,2]]},"540":{"position":[[82,2]]},"775":{"position":[[87,2]]},"1691":{"position":[[48,2]]},"2611":{"position":[[57,2]]},"3131":{"position":[[2,2]]}}}],["仔细",{"_index":2189,"t":{"338":{"position":[[1156,2]]}}}],["他们",{"_index":918,"t":{"121":{"position":[[562,2],[602,2]]},"166":{"position":[[42,2]]},"1761":{"position":[[352,2]]},"2897":{"position":[[69,2]]},"3242":{"position":[[220,2]]},"3910":{"position":[[217,2]]},"3926":{"position":[[501,2],[509,2]]},"3934":{"position":[[2386,2]]}}}],["付出",{"_index":4777,"t":{"1511":{"position":[[2398,2],[4041,2]]},"2770":{"position":[[41,2]]}}}],["代替",{"_index":2610,"t":{"459":{"position":[[36,2]]},"502":{"position":[[181,2]]},"530":{"position":[[856,2]]},"538":{"position":[[61,2]]},"799":{"position":[[25,2]]},"1039":{"position":[[857,2]]},"1101":{"position":[[25,2]]},"1155":{"position":[[25,2]]},"1663":{"position":[[567,2]]},"1711":{"position":[[889,2]]},"1913":{"position":[[1448,2]]},"1919":{"position":[[901,2]]},"1925":{"position":[[1626,2]]},"1927":{"position":[[949,2]]},"1933":{"position":[[1069,2]]},"1935":{"position":[[570,2]]},"1941":{"position":[[1314,2]]},"1943":{"position":[[514,2]]},"1969":{"position":[[150,2]]},"1983":{"position":[[62,2]]},"2006":{"position":[[62,2]]},"2182":{"position":[[311,2]]},"2478":{"position":[[536,2]]},"2597":{"position":[[61,2]]},"2772":{"position":[[62,2]]},"2860":{"position":[[95,2]]},"2875":{"position":[[440,2]]},"2881":{"position":[[368,2]]},"3207":{"position":[[220,2]]},"3248":{"position":[[61,2]]},"3952":{"position":[[415,2]]}}}],["代理",{"_index":1123,"t":{"148":{"position":[[246,2],[275,2]]},"329":{"position":[[76,2],[83,2]]},"799":{"position":[[22,2],[39,2]]},"1037":{"position":[[634,2]]},"1101":{"position":[[22,2],[39,2]]},"1107":{"position":[[80,2]]},"1155":{"position":[[22,2],[39,2]]},"1221":{"position":[[4,2],[72,2]]},"1223":{"position":[[32,2],[112,2]]},"1225":{"position":[[18,2]]},"1234":{"position":[[762,2]]},"1271":{"position":[[4,2]]},"1277":{"position":[[46,2]]},"1279":{"position":[[27,2],[45,2],[83,2]]},"1295":{"position":[[155,2]]},"1416":{"position":[[424,2],[439,2]]},"1418":{"position":[[189,2]]},"1420":{"position":[[876,2],[890,2]]},"1424":{"position":[[459,2]]},"1430":{"position":[[15,2]]},"2251":{"position":[[159,2]]},"3001":{"position":[[398,2],[412,2]]},"3483":{"position":[[42,2],[57,2]]},"3539":{"position":[[13,2]]},"3551":{"position":[[11,2]]},"3553":{"position":[[11,2]]},"3555":{"position":[[11,2]]},"3557":{"position":[[11,2]]},"3559":{"position":[[11,2]]},"3575":{"position":[[393,2]]},"3597":{"position":[[241,2]]},"3603":{"position":[[135,2]]},"3910":{"position":[[486,2],[2598,2]]},"3914":{"position":[[3616,2]]},"3916":{"position":[[7433,2],[8085,2]]},"3918":{"position":[[1058,2],[3216,2]]},"3932":{"position":[[236,2],[265,2],[1487,2],[1958,2],[2202,2]]},"3938":{"position":[[97,2]]},"3940":{"position":[[260,2]]},"3950":{"position":[[170,2]]},"3962":{"position":[[204,2],[275,2],[463,2],[1742,2]]},"3966":{"position":[[949,2]]},"3978":{"position":[[791,2]]},"3980":{"position":[[62,2],[775,2]]},"3986":{"position":[[1431,2]]},"3992":{"position":[[849,2],[1997,2]]},"3994":{"position":[[981,2]]},"3996":{"position":[[825,2]]},"3998":{"position":[[567,2],[727,2]]},"4004":{"position":[[394,2]]},"4006":{"position":[[216,2]]}}}],["代理会",{"_index":4090,"t":{"1267":{"position":[[249,3]]}}}],["代理服务",{"_index":2060,"t":{"310":{"position":[[1073,4]]}}}],["代码",{"_index":72,"t":{"3":{"position":[[851,2]]},"5":{"position":[[150,2]]},"7":{"position":[[146,2]]},"11":{"position":[[902,2]]},"13":{"position":[[27,2]]},"106":{"position":[[74,2]]},"127":{"position":[[371,2]]},"146":{"position":[[738,2]]},"148":{"position":[[159,2]]},"204":{"position":[[91,2]]},"220":{"position":[[570,2]]},"233":{"position":[[669,2]]},"237":{"position":[[1324,2]]},"302":{"position":[[102,2],[138,2],[144,2]]},"327":{"position":[[56,2]]},"331":{"position":[[7,2],[88,2]]},"336":{"position":[[310,2]]},"338":{"position":[[29,2]]},"340":{"position":[[1606,2]]},"397":{"position":[[66,2]]},"453":{"position":[[88,2]]},"455":{"position":[[964,2]]},"492":{"position":[[557,2]]},"583":{"position":[[8,2]]},"585":{"position":[[17,2],[310,2],[376,2],[412,2],[420,2],[485,2],[519,2],[565,2]]},"587":{"position":[[68,2],[1963,2]]},"679":{"position":[[54,2]]},"696":{"position":[[623,2],[994,2],[1038,2],[1127,2],[2167,2],[2219,2],[2308,2],[3097,2],[3141,2],[3230,2],[3776,2],[3823,2],[3912,2]]},"698":{"position":[[337,2]]},"730":{"position":[[40,2],[341,2]]},"732":{"position":[[270,2],[332,2]]},"915":{"position":[[81,2]]},"945":{"position":[[132,2]]},"1041":{"position":[[29,2]]},"1286":{"position":[[49,2]]},"1291":{"position":[[20,2]]},"1360":{"position":[[54,2]]},"1385":{"position":[[35,2]]},"1387":{"position":[[34,2]]},"1389":{"position":[[3,2],[101,2],[128,2],[157,2]]},"1392":{"position":[[235,2]]},"1408":{"position":[[44,2],[537,2]]},"1410":{"position":[[50,2],[552,2]]},"1412":{"position":[[347,2]]},"1414":{"position":[[64,2],[472,2]]},"1420":{"position":[[3,2],[29,2]]},"1424":{"position":[[124,2],[138,2]]},"1430":{"position":[[66,2]]},"1539":{"position":[[16,2],[1603,2]]},"1582":{"position":[[66,2]]},"1663":{"position":[[264,2]]},"1687":{"position":[[336,2]]},"1741":{"position":[[1714,2],[2505,2]]},"1761":{"position":[[268,2]]},"1795":{"position":[[2994,2]]},"1837":{"position":[[58,2]]},"1839":{"position":[[36,2],[54,2]]},"1887":{"position":[[455,2]]},"1892":{"position":[[50,2]]},"1896":{"position":[[23,2]]},"1901":{"position":[[211,2],[382,2],[637,2]]},"1915":{"position":[[321,2]]},"1921":{"position":[[345,2]]},"1927":{"position":[[374,2],[678,2]]},"1929":{"position":[[335,2]]},"1935":{"position":[[305,2]]},"1937":{"position":[[299,2]]},"1941":{"position":[[1022,2]]},"1943":{"position":[[243,2]]},"1945":{"position":[[335,2]]},"1953":{"position":[[243,2]]},"2243":{"position":[[2,2]]},"2245":{"position":[[85,2]]},"2247":{"position":[[4,2]]},"2251":{"position":[[169,2]]},"2272":{"position":[[359,2],[428,2],[525,2]]},"2281":{"position":[[234,2]]},"2283":{"position":[[87,2]]},"2290":{"position":[[146,2]]},"2294":{"position":[[950,2]]},"2296":{"position":[[27,2]]},"2313":{"position":[[755,2]]},"2345":{"position":[[69,2]]},"2391":{"position":[[98,2]]},"2482":{"position":[[457,2]]},"2484":{"position":[[557,2]]},"2526":{"position":[[71,2]]},"2528":{"position":[[26,2]]},"2547":{"position":[[18,2]]},"2555":{"position":[[26,2]]},"2581":{"position":[[480,2],[1007,2]]},"2587":{"position":[[424,2]]},"2615":{"position":[[4,2]]},"2646":{"position":[[125,2]]},"2684":{"position":[[380,2]]},"2688":{"position":[[68,2]]},"2725":{"position":[[1603,2]]},"2731":{"position":[[683,2]]},"2817":{"position":[[182,2]]},"2819":{"position":[[455,2]]},"2825":{"position":[[457,2]]},"2827":{"position":[[603,2]]},"2836":{"position":[[566,2],[1772,2]]},"2862":{"position":[[392,2]]},"2868":{"position":[[14,2]]},"2881":{"position":[[245,2],[249,2],[452,2]]},"2887":{"position":[[250,2]]},"2903":{"position":[[44,2]]},"2933":{"position":[[666,2]]},"2949":{"position":[[530,2]]},"2963":{"position":[[535,2]]},"2971":{"position":[[281,2]]},"3071":{"position":[[70,2],[200,2]]},"3124":{"position":[[10,2],[31,2]]},"3126":{"position":[[18,2]]},"3131":{"position":[[114,2],[149,2],[268,2]]},"3142":{"position":[[70,2]]},"3144":{"position":[[361,2],[481,2]]},"3148":{"position":[[42,2]]},"3156":{"position":[[451,2],[533,2]]},"3158":{"position":[[255,2]]},"3194":{"position":[[123,2]]},"3277":{"position":[[43,2]]},"3287":{"position":[[1290,2]]},"3291":{"position":[[1278,2]]},"3301":{"position":[[20,2]]},"3305":{"position":[[10,2]]},"3309":{"position":[[28,2]]},"3323":{"position":[[340,2]]},"3339":{"position":[[311,2]]},"3352":{"position":[[117,2],[178,2],[198,2],[244,2],[263,2],[313,2],[389,2],[410,2],[608,2],[642,2],[667,2],[710,2]]},"3354":{"position":[[29,2]]},"3371":{"position":[[36,2]]},"3430":{"position":[[1477,2]]},"3458":{"position":[[582,2]]},"3460":{"position":[[59,2]]},"3528":{"position":[[109,2]]},"3567":{"position":[[231,2]]},"3626":{"position":[[149,2],[163,2],[223,2],[367,2],[451,2],[459,2],[465,2],[586,2]]},"3684":{"position":[[44,2]]},"3690":{"position":[[83,2]]},"3700":{"position":[[56,2]]},"3704":{"position":[[875,2]]},"3720":{"position":[[10,2]]},"3722":{"position":[[211,2]]},"3787":{"position":[[18,2]]},"3844":{"position":[[1167,2]]},"3908":{"position":[[225,2]]},"3912":{"position":[[78,2]]},"3916":{"position":[[2524,2],[2592,2]]},"3924":{"position":[[4415,2]]},"3932":{"position":[[1946,2]]},"3938":{"position":[[887,2]]},"3940":{"position":[[164,2],[284,2],[573,2],[1049,2]]},"3942":{"position":[[132,2],[216,2]]},"3948":{"position":[[531,2]]},"3950":{"position":[[440,2]]},"3958":{"position":[[387,2]]},"3962":{"position":[[1654,2],[1659,2]]},"3966":{"position":[[446,2],[504,2],[1182,2],[1234,2]]},"3974":{"position":[[519,2]]},"3976":{"position":[[345,2]]},"3978":{"position":[[508,2],[543,2]]},"3988":{"position":[[436,2],[450,2]]},"3990":{"position":[[560,2]]},"3994":{"position":[[1721,2]]},"4000":{"position":[[690,2],[1192,2]]},"4002":{"position":[[236,2]]},"4004":{"position":[[524,2],[568,2]]}}}],["代码执行",{"_index":7978,"t":{"3352":{"position":[[633,4]]}}}],["代码生成",{"_index":2068,"t":{"314":{"position":[[131,4]]},"316":{"position":[[133,4]]},"3211":{"position":[[122,4]]}}}],["代表",{"_index":2631,"t":{"469":{"position":[[48,2]]},"1474":{"position":[[80,2]]},"2418":{"position":[[48,2]]},"2420":{"position":[[7,2]]},"2424":{"position":[[61,2]]},"2768":{"position":[[487,2]]},"2817":{"position":[[36,2]]},"3063":{"position":[[843,2]]},"3706":{"position":[[835,2]]}}}],["以上",{"_index":71,"t":{"3":{"position":[[849,2]]},"13":{"position":[[381,2]]},"265":{"position":[[43,2]]},"302":{"position":[[165,2]]},"394":{"position":[[34,2]]},"1068":{"position":[[30,2]]},"1277":{"position":[[2,2]]},"1405":{"position":[[108,2]]},"1580":{"position":[[2,2]]},"2096":{"position":[[139,2]]},"2296":{"position":[[381,2]]},"2313":{"position":[[753,2]]},"2363":{"position":[[214,2]]},"2836":{"position":[[1175,2]]},"2921":{"position":[[11,2]]},"3138":{"position":[[122,2]]},"3158":{"position":[[476,2]]},"3528":{"position":[[107,2]]},"3567":{"position":[[229,2]]},"3595":{"position":[[106,2]]},"3817":{"position":[[254,2]]}}}],["以下",{"_index":110,"t":{"9":{"position":[[20,2]]},"15":{"position":[[284,2]]},"17":{"position":[[278,2]]},"53":{"position":[[77,2]]},"64":{"position":[[103,2]]},"77":{"position":[[77,2]]},"98":{"position":[[51,2]]},"123":{"position":[[48,2]]},"190":{"position":[[11,2]]},"199":{"position":[[25,2]]},"243":{"position":[[22,2]]},"255":{"position":[[36,2]]},"304":{"position":[[27,2]]},"413":{"position":[[92,2]]},"417":{"position":[[112,2]]},"419":{"position":[[18,2]]},"441":{"position":[[91,2]]},"455":{"position":[[123,2]]},"463":{"position":[[82,2]]},"484":{"position":[[77,2]]},"565":{"position":[[101,2]]},"608":{"position":[[702,2]]},"615":{"position":[[60,2]]},"696":{"position":[[1125,2],[2306,2],[3228,2],[3910,2]]},"818":{"position":[[49,2]]},"887":{"position":[[75,2]]},"899":{"position":[[1505,2],[1784,2]]},"903":{"position":[[64,2]]},"915":{"position":[[79,2]]},"949":{"position":[[10,2]]},"1041":{"position":[[27,2]]},"1133":{"position":[[71,2]]},"1379":{"position":[[95,2]]},"1416":{"position":[[64,2]]},"1428":{"position":[[60,2]]},"1474":{"position":[[128,2]]},"1520":{"position":[[10,2]]},"1535":{"position":[[27,2]]},"1541":{"position":[[60,2],[138,2]]},"1547":{"position":[[80,2]]},"1549":{"position":[[67,2]]},"1551":{"position":[[194,2]]},"1576":{"position":[[35,2]]},"1578":{"position":[[78,2]]},"1580":{"position":[[142,2]]},"1609":{"position":[[320,2]]},"1611":{"position":[[61,2]]},"1633":{"position":[[45,2]]},"1739":{"position":[[451,2]]},"1775":{"position":[[87,2]]},"1791":{"position":[[6,2]]},"1821":{"position":[[49,2]]},"1855":{"position":[[15,2]]},"1947":{"position":[[94,2]]},"1957":{"position":[[12,2]]},"2251":{"position":[[167,2]]},"2255":{"position":[[89,2]]},"2272":{"position":[[75,2]]},"2274":{"position":[[83,2]]},"2281":{"position":[[67,2]]},"2292":{"position":[[20,2]]},"2357":{"position":[[91,2]]},"2377":{"position":[[39,2]]},"2379":{"position":[[66,2]]},"2383":{"position":[[0,2]]},"2442":{"position":[[123,2]]},"2444":{"position":[[14,2]]},"2497":{"position":[[80,2]]},"2526":{"position":[[32,2]]},"2613":{"position":[[5,2]]},"2657":{"position":[[57,2]]},"2713":{"position":[[72,2]]},"2819":{"position":[[453,2]]},"2836":{"position":[[564,2],[1770,2]]},"2843":{"position":[[48,2]]},"2967":{"position":[[78,2]]},"2971":{"position":[[279,2]]},"2995":{"position":[[106,2]]},"3078":{"position":[[84,2]]},"3158":{"position":[[50,2]]},"3207":{"position":[[145,2]]},"3213":{"position":[[2,2]]},"3289":{"position":[[71,2]]},"3315":{"position":[[47,2]]},"3339":{"position":[[69,2]]},"3371":{"position":[[34,2]]},"3416":{"position":[[40,2]]},"3428":{"position":[[5,2]]},"3430":{"position":[[513,2],[1721,2]]},"3446":{"position":[[221,2]]},"3460":{"position":[[66,2]]},"3470":{"position":[[86,2]]},"3506":{"position":[[68,2]]},"3522":{"position":[[13,2],[1196,2]]},"3547":{"position":[[68,2]]},"3563":{"position":[[13,2],[666,2]]},"3595":{"position":[[51,2]]},"3650":{"position":[[56,2]]},"3674":{"position":[[13,2],[27,2]]},"3704":{"position":[[873,2]]},"3754":{"position":[[21,2]]},"3758":{"position":[[57,2]]},"3777":{"position":[[40,2]]},"3793":{"position":[[51,2]]},"3798":{"position":[[41,2]]},"3800":{"position":[[54,2]]},"3806":{"position":[[1318,2]]},"3808":{"position":[[104,2]]},"3830":{"position":[[175,2]]},"3844":{"position":[[1164,2]]},"3856":{"position":[[63,2]]},"3924":{"position":[[4413,2]]}}}],["以下内容",{"_index":1873,"t":{"259":{"position":[[5,4]]},"327":{"position":[[5,4]]},"461":{"position":[[240,4]]},"467":{"position":[[58,4]]},"659":{"position":[[7,4]]},"734":{"position":[[7775,4]]},"777":{"position":[[7,4]]},"791":{"position":[[7,4]]},"885":{"position":[[7,4]]},"1246":{"position":[[5,4]]},"1248":{"position":[[5,4]]},"1265":{"position":[[5,4]]},"1302":{"position":[[7,4]]},"1323":{"position":[[7,4]]},"1715":{"position":[[5,4]]},"1791":{"position":[[70,4]]},"1801":{"position":[[5,4]]},"1815":{"position":[[5,4]]},"1817":{"position":[[5,4]]},"1819":{"position":[[5,4]]},"1887":{"position":[[5,4]]},"2063":{"position":[[5,4]]},"2065":{"position":[[5,4]]},"2067":{"position":[[5,4]]},"2077":{"position":[[5,4]]},"2098":{"position":[[5,4]]},"2169":{"position":[[5,4]]},"2173":{"position":[[5,4]]},"2255":{"position":[[5,4]]},"2259":{"position":[[5,4]]},"2276":{"position":[[5,4]]},"2339":{"position":[[5,4]]},"2391":{"position":[[124,4]]},"2538":{"position":[[5,4]]},"2735":{"position":[[5,4]]},"2780":{"position":[[5,4]]},"2860":{"position":[[5,4]]},"2875":{"position":[[681,4]]},"2877":{"position":[[5,4]]},"2879":{"position":[[385,4]]},"2893":{"position":[[5,4]]},"3067":{"position":[[5,4]]},"3246":{"position":[[22,4]]},"3287":{"position":[[1174,4]]},"3339":{"position":[[5,4]]},"3345":{"position":[[5,4]]},"3424":{"position":[[5,4]]},"3430":{"position":[[1816,4],[3653,4],[4514,4]]},"3432":{"position":[[4856,4]]},"3450":{"position":[[5,4]]},"3452":{"position":[[5,4]]},"3454":{"position":[[5,4]]},"3456":{"position":[[5,4]]},"3466":{"position":[[5,4]]},"3474":{"position":[[5,4]]},"3498":{"position":[[389,4]]},"3543":{"position":[[476,4]]},"3593":{"position":[[5,4]]},"3603":{"position":[[5,4]]},"3686":{"position":[[5,4]]},"3688":{"position":[[5,4]]},"3690":{"position":[[5,4]]},"3692":{"position":[[5,4]]},"3694":{"position":[[5,4]]},"3698":{"position":[[5,4]]},"3700":{"position":[[5,4]]},"3716":{"position":[[5,4]]},"3722":{"position":[[5,4]]},"3758":{"position":[[128,4]]}}}],["以为",{"_index":8058,"t":{"3414":{"position":[[146,2]]}}}],["以便",{"_index":5048,"t":{"1566":{"position":[[485,2]]},"3740":{"position":[[84,2]]}}}],["以内",{"_index":3502,"t":{"756":{"position":[[26,2]]}}}],["以及",{"_index":1308,"t":{"184":{"position":[[82,2]]},"329":{"position":[[109,2]]},"1389":{"position":[[176,2]]},"2555":{"position":[[40,2]]},"2843":{"position":[[242,2]]},"3626":{"position":[[370,2],[467,2]]},"3922":{"position":[[1313,2]]},"3924":{"position":[[2653,2]]},"3930":{"position":[[1226,2]]},"3938":{"position":[[577,2]]}}}],["以后",{"_index":892,"t":{"121":{"position":[[328,2]]},"302":{"position":[[153,2]]},"3926":{"position":[[233,2]]},"3968":{"position":[[481,2]]}}}],["以外",{"_index":3183,"t":{"608":{"position":[[696,2]]},"615":{"position":[[17,2]]},"653":{"position":[[29,2]]},"685":{"position":[[66,2]]},"1200":{"position":[[149,2]]},"1353":{"position":[[29,2]]},"1366":{"position":[[11,2]]},"1383":{"position":[[259,2]]},"1621":{"position":[[773,2]]},"2680":{"position":[[11,2]]},"2692":{"position":[[23,2]]},"2703":{"position":[[87,2]]},"2774":{"position":[[420,2]]},"2879":{"position":[[45,2]]},"3666":{"position":[[18,2]]},"3806":{"position":[[42,2]]},"3819":{"position":[[1522,2]]}}}],["以此类推",{"_index":7427,"t":{"3110":{"position":[[68,4]]}}}],["以示",{"_index":6909,"t":{"2768":{"position":[[74,2]]}}}],["以至于",{"_index":9357,"t":{"3924":{"position":[[2685,3]]}}}],["以色列",{"_index":6573,"t":{"2559":{"position":[[1358,3]]}}}],["以防",{"_index":2340,"t":{"378":{"position":[[55,2]]}}}],["仪表板",{"_index":7517,"t":{"3142":{"position":[[149,3],[165,3]]}}}],["仪表盘",{"_index":1283,"t":{"182":{"position":[[149,3]]}}}],["价值",{"_index":2370,"t":{"397":{"position":[[102,2]]}}}],["价格",{"_index":9517,"t":{"3934":{"position":[[1862,2]]}}}],["任何",{"_index":1053,"t":{"131":{"position":[[42,2]]},"206":{"position":[[58,2]]},"208":{"position":[[22,2]]},"210":{"position":[[23,2],[103,2]]},"220":{"position":[[166,2]]},"261":{"position":[[119,2]]},"302":{"position":[[80,2]]},"336":{"position":[[48,2]]},"338":{"position":[[1149,2]]},"340":{"position":[[343,2]]},"413":{"position":[[35,2]]},"423":{"position":[[36,2]]},"530":{"position":[[786,2]]},"532":{"position":[[228,2]]},"591":{"position":[[70,2],[74,2],[79,2]]},"679":{"position":[[34,2]]},"713":{"position":[[49,2]]},"739":{"position":[[73,2]]},"887":{"position":[[25,2]]},"990":{"position":[[27,2]]},"1026":{"position":[[222,2]]},"1031":{"position":[[210,2]]},"1037":{"position":[[324,2]]},"1039":{"position":[[787,2]]},"1143":{"position":[[60,2]]},"1223":{"position":[[42,2]]},"1418":{"position":[[128,2]]},"1509":{"position":[[80,2]]},"1520":{"position":[[328,2],[340,2]]},"1539":{"position":[[1897,2]]},"1547":{"position":[[20,2]]},"1663":{"position":[[47,2],[465,2]]},"1705":{"position":[[19,2]]},"1711":{"position":[[819,2]]},"1765":{"position":[[19,2]]},"1797":{"position":[[30,2]]},"1799":{"position":[[50,2]]},"1817":{"position":[[74,2]]},"1901":{"position":[[298,2]]},"2175":{"position":[[177,2]]},"2182":{"position":[[241,2]]},"2264":{"position":[[93,2]]},"2438":{"position":[[37,2]]},"2440":{"position":[[37,2],[411,2]]},"2478":{"position":[[466,2]]},"2528":{"position":[[28,2]]},"2538":{"position":[[173,2]]},"2581":{"position":[[76,2]]},"2625":{"position":[[54,2]]},"2629":{"position":[[168,2]]},"2684":{"position":[[298,2]]},"2690":{"position":[[338,2]]},"2715":{"position":[[17,2]]},"2717":{"position":[[85,2],[237,2]]},"2729":{"position":[[61,2]]},"2747":{"position":[[22,2]]},"2852":{"position":[[58,2],[152,2]]},"2879":{"position":[[52,2]]},"3114":{"position":[[0,2]]},"3144":{"position":[[13,2]]},"3162":{"position":[[24,2]]},"3373":{"position":[[657,2],[664,2]]},"3379":{"position":[[182,2]]},"3389":{"position":[[68,2]]},"3426":{"position":[[216,2]]},"3428":{"position":[[108,2]]},"3432":{"position":[[1610,2],[2454,2]]},"3434":{"position":[[41,2],[236,2],[246,2],[379,2],[2060,2]]},"3452":{"position":[[609,2],[619,2],[1008,2]]},"3458":{"position":[[315,2],[706,2]]},"3589":{"position":[[592,2]]},"3702":{"position":[[203,2]]},"3779":{"position":[[140,2]]},"3802":{"position":[[137,2]]},"3817":{"position":[[146,2]]},"3834":{"position":[[63,2]]},"3844":{"position":[[881,2]]},"3916":{"position":[[3605,2],[3615,2],[4004,2]]},"3918":{"position":[[914,2]]},"3924":{"position":[[2248,2]]},"3928":{"position":[[10,2]]},"3930":{"position":[[1390,2]]},"3932":{"position":[[360,2],[705,2]]},"3982":{"position":[[450,2]]}}}],["任何事物",{"_index":9376,"t":{"3926":{"position":[[115,4]]}}}],["任何人",{"_index":8507,"t":{"3686":{"position":[[48,3]]}}}],["任务",{"_index":2350,"t":{"384":{"position":[[87,2]]},"469":{"position":[[72,2]]},"488":{"position":[[35,2],[71,2]]},"1383":{"position":[[247,2]]},"1711":{"position":[[695,2]]},"1797":{"position":[[577,2]]},"1801":{"position":[[2146,2],[2824,2]]},"1803":{"position":[[4108,2],[4796,2]]},"1821":{"position":[[121,2]]},"2206":{"position":[[28,2]]},"2208":{"position":[[7,2],[59,2],[107,2],[157,2]]},"2212":{"position":[[17,2]]},"2214":{"position":[[16,2],[34,2],[57,2]]},"2216":{"position":[[18,2]]},"2226":{"position":[[7,2]]},"2228":{"position":[[14,2]]},"2239":{"position":[[164,2]]},"2315":{"position":[[29,2],[58,2]]},"2333":{"position":[[50,2]]},"2391":{"position":[[43,2],[179,2]]},"2393":{"position":[[7,2],[29,2],[36,2],[66,2],[73,2],[102,2],[110,2],[150,2]]},"2395":{"position":[[20,2]]},"2400":{"position":[[139,2],[160,2],[184,2]]},"2402":{"position":[[6,2]]},"2404":{"position":[[20,2]]},"2411":{"position":[[175,2]]},"2438":{"position":[[103,2],[268,2],[281,2]]},"2440":{"position":[[137,2],[302,2],[315,2]]},"2442":{"position":[[116,2]]},"2444":{"position":[[91,2],[123,2],[273,2]]},"2446":{"position":[[28,2]]},"2448":{"position":[[7,2],[59,2],[107,2],[157,2]]},"2452":{"position":[[17,2]]},"2454":{"position":[[16,2],[34,2],[57,2]]},"2456":{"position":[[18,2]]},"2466":{"position":[[12,2],[40,2],[58,2]]},"2468":{"position":[[60,2],[183,2]]},"2472":{"position":[[11,2],[381,2],[396,2],[407,2]]},"2474":{"position":[[9,2]]},"2476":{"position":[[339,2]]},"2486":{"position":[[25,2],[63,2],[321,2],[546,2],[566,2],[734,2],[819,2],[905,2]]},"2488":{"position":[[37,2],[66,2],[74,2]]},"2490":{"position":[[11,2],[67,2]]},"2823":{"position":[[35,2],[73,2]]},"2829":{"position":[[8,2],[32,2],[46,2],[852,2]]},"3246":{"position":[[37,2]]},"3758":{"position":[[95,2]]},"3760":{"position":[[8,2],[18,2],[44,2]]},"3791":{"position":[[1332,2],[1350,2]]},"3795":{"position":[[287,2]]},"3910":{"position":[[389,2],[2080,2],[2523,2]]},"3912":{"position":[[1795,2],[2723,2]]},"3920":{"position":[[277,2],[1989,2]]},"3942":{"position":[[453,2],[486,2]]},"3946":{"position":[[377,2]]},"3948":{"position":[[347,2]]},"3950":{"position":[[9,2],[384,2],[907,2]]},"3954":{"position":[[614,2]]},"3958":{"position":[[290,2]]},"3960":{"position":[[44,2],[100,2],[432,2],[445,2]]},"3962":{"position":[[239,2],[1101,2]]},"3968":{"position":[[623,2]]},"3974":{"position":[[251,2],[660,2],[879,2]]},"3976":{"position":[[11,2],[73,2],[617,2]]},"3978":{"position":[[1109,2],[1292,2]]}}}],["任务调度",{"_index":9951,"t":{"3978":{"position":[[48,4],[409,4]]}}}],["任意",{"_index":1941,"t":{"286":{"position":[[191,2]]},"404":{"position":[[28,2]]},"482":{"position":[[336,2],[391,2]]},"587":{"position":[[2152,2],[2156,2]]},"685":{"position":[[476,2],[533,2]]},"696":{"position":[[490,2]]},"994":{"position":[[40,2],[98,2]]},"998":{"position":[[34,2],[85,2]]},"1107":{"position":[[96,2]]},"1580":{"position":[[176,2]]},"1615":{"position":[[303,2]]},"1777":{"position":[[194,2]]},"1903":{"position":[[496,2]]},"1979":{"position":[[909,2],[919,2]]},"1991":{"position":[[305,2],[315,2]]},"2014":{"position":[[305,2],[315,2]]},"2418":{"position":[[588,2],[669,2]]},"2524":{"position":[[40,2]]},"2848":{"position":[[1219,2]]},"2921":{"position":[[77,2]]},"3367":{"position":[[23,2]]},"3918":{"position":[[1081,2]]}}}],["仿佛",{"_index":9366,"t":{"3926":{"position":[[66,2],[507,2]]}}}],["企业",{"_index":5946,"t":{"2057":{"position":[[157,2]]},"2910":{"position":[[332,2],[459,2]]},"2912":{"position":[[56,2]]},"2923":{"position":[[7,2]]},"2939":{"position":[[7,2]]},"2953":{"position":[[7,2]]}}}],["企业应用",{"_index":569,"t":{"95":{"position":[[83,4]]},"110":{"position":[[3,4]]},"565":{"position":[[3,4]]}}}],["企业级",{"_index":7004,"t":{"2770":{"position":[[135,3]]}}}],["伊拉克",{"_index":6441,"t":{"2559":{"position":[[122,3]]}}}],["伊朗",{"_index":6543,"t":{"2559":{"position":[[1048,2]]}}}],["休眠",{"_index":5700,"t":{"1825":{"position":[[50,2]]},"3856":{"position":[[16,2]]}}}],["优",{"_index":1264,"t":{"182":{"position":[[49,1],[243,1]]}}}],["优先",{"_index":4192,"t":{"1383":{"position":[[168,2]]},"1961":{"position":[[243,2]]},"2897":{"position":[[121,2]]},"3640":{"position":[[756,2]]},"3966":{"position":[[1513,2]]}}}],["优先级",{"_index":2799,"t":{"518":{"position":[[517,3]]},"617":{"position":[[2770,3]]},"1277":{"position":[[240,3],[256,3]]},"1422":{"position":[[113,3]]},"1426":{"position":[[287,3]]},"1647":{"position":[[377,3]]},"2544":{"position":[[55,3]]},"3565":{"position":[[211,3],[221,3]]},"3632":{"position":[[214,3]]},"3944":{"position":[[304,3]]}}}],["优势",{"_index":1758,"t":{"239":{"position":[[120,2]]},"3250":{"position":[[147,2],[187,2]]}}}],["优化",{"_index":4836,"t":{"1511":{"position":[[3157,2]]},"1580":{"position":[[125,2],[128,2]]},"2035":{"position":[[62,2]]},"3914":{"position":[[3331,2]]},"3922":{"position":[[2305,2]]},"3928":{"position":[[385,2],[469,2]]},"3930":{"position":[[556,2],[724,2]]},"3932":{"position":[[723,2]]},"3936":{"position":[[810,2]]},"3942":{"position":[[121,2]]},"3944":{"position":[[514,2]]},"3948":{"position":[[107,2]]},"3962":{"position":[[977,2],[1657,2]]},"3966":{"position":[[415,2],[490,2],[1175,2],[1185,2]]},"3978":{"position":[[404,2],[424,2],[442,2],[460,2],[494,2],[519,2],[554,2]]},"3986":{"position":[[194,2],[214,2],[260,2],[889,2],[932,2]]},"3992":{"position":[[1390,2],[1423,2],[2611,2],[2814,2],[2824,2]]},"3994":{"position":[[769,2]]},"3996":{"position":[[392,2],[402,2],[428,2],[442,2]]},"4000":{"position":[[640,2],[683,2],[1189,2],[1197,2]]},"4002":{"position":[[240,2]]},"4004":{"position":[[522,2]]}}}],["优惠券",{"_index":8613,"t":{"3729":{"position":[[83,3]]}}}],["优点",{"_index":1186,"t":{"166":{"position":[[27,2]]},"245":{"position":[[126,2]]},"336":{"position":[[177,2]]},"457":{"position":[[0,2]]},"1389":{"position":[[74,2]]},"1392":{"position":[[21,2]]},"1394":{"position":[[110,2]]},"1396":{"position":[[34,2]]},"1580":{"position":[[112,2],[144,2]]},"2733":{"position":[[0,2]]},"2740":{"position":[[65,2]]},"2915":{"position":[[48,2]]},"2917":{"position":[[103,2]]},"2919":{"position":[[131,2]]},"3096":{"position":[[0,2]]},"3104":{"position":[[0,2]]},"3108":{"position":[[64,2]]},"3110":{"position":[[78,2]]},"3242":{"position":[[205,2]]},"3319":{"position":[[9,2]]},"3910":{"position":[[202,2]]},"3934":{"position":[[2371,2]]}}}],["优秀",{"_index":2867,"t":{"540":{"position":[[21,2]]},"1440":{"position":[[36,2]]},"1511":{"position":[[1944,2]]},"2684":{"position":[[427,2]]},"3209":{"position":[[23,2],[84,2]]},"3250":{"position":[[23,2],[83,2]]},"3928":{"position":[[79,2]]},"3934":{"position":[[1176,2]]}}}],["优缺点",{"_index":3955,"t":{"1103":{"position":[[252,3]]},"3108":{"position":[[60,3]]},"3110":{"position":[[74,3]]}}}],["会",{"_index":230,"t":{"13":{"position":[[421,1]]},"121":{"position":[[124,1],[218,1],[247,1],[386,1]]},"129":{"position":[[619,1]]},"152":{"position":[[12,1]]},"166":{"position":[[19,1],[30,1]]},"206":{"position":[[67,1],[122,1],[194,1],[328,1]]},"212":{"position":[[710,1]]},"218":{"position":[[331,1]]},"220":{"position":[[200,1],[842,1]]},"233":{"position":[[358,1]]},"239":{"position":[[302,1]]},"245":{"position":[[175,1]]},"249":{"position":[[105,1]]},"255":{"position":[[243,1]]},"300":{"position":[[295,1]]},"302":{"position":[[19,1]]},"308":{"position":[[271,1]]},"325":{"position":[[43,1]]},"327":{"position":[[68,1]]},"338":{"position":[[21,1],[1222,1]]},"340":{"position":[[1552,1],[1609,1]]},"359":{"position":[[64,1],[300,1]]},"361":{"position":[[24,1]]},"363":{"position":[[20,1]]},"384":{"position":[[60,1],[78,1]]},"404":{"position":[[53,1],[144,1],[193,1]]},"423":{"position":[[98,1]]},"427":{"position":[[162,1]]},"433":{"position":[[164,1]]},"445":{"position":[[747,1]]},"447":{"position":[[35,1]]},"451":{"position":[[13,1],[274,1]]},"453":{"position":[[72,1]]},"463":{"position":[[7,1]]},"482":{"position":[[360,1],[411,1],[510,1]]},"498":{"position":[[106,1]]},"518":{"position":[[593,1],[626,1]]},"565":{"position":[[98,1]]},"610":{"position":[[12,1]]},"617":{"position":[[2716,1]]},"639":{"position":[[433,1]]},"653":{"position":[[15,1],[156,1]]},"655":{"position":[[22,1]]},"677":{"position":[[118,1]]},"688":{"position":[[44,1]]},"694":{"position":[[12,1]]},"704":{"position":[[118,1]]},"713":{"position":[[741,1]]},"715":{"position":[[27,1],[75,1]]},"719":{"position":[[30,1]]},"751":{"position":[[15,1]]},"773":{"position":[[74,1]]},"862":{"position":[[369,1]]},"887":{"position":[[14,1],[32,1],[188,1]]},"893":{"position":[[106,1]]},"941":{"position":[[157,1]]},"960":{"position":[[365,1]]},"986":{"position":[[116,1]]},"1048":{"position":[[25,1]]},"1050":{"position":[[33,1]]},"1145":{"position":[[518,1]]},"1214":{"position":[[123,1]]},"1223":{"position":[[259,1]]},"1279":{"position":[[975,1]]},"1353":{"position":[[15,1]]},"1374":{"position":[[120,1],[127,1]]},"1389":{"position":[[223,1]]},"1392":{"position":[[124,1]]},"1396":{"position":[[96,1]]},"1422":{"position":[[141,1]]},"1426":{"position":[[231,1]]},"1432":{"position":[[18,1]]},"1440":{"position":[[438,1]]},"1474":{"position":[[36,1]]},"1488":{"position":[[1652,1]]},"1549":{"position":[[116,1]]},"1566":{"position":[[549,1]]},"1576":{"position":[[178,1]]},"1587":{"position":[[9,1],[243,1]]},"1592":{"position":[[151,1],[267,1]]},"1594":{"position":[[199,1],[345,1]]},"1609":{"position":[[19,1]]},"1615":{"position":[[315,1]]},"1625":{"position":[[13,1]]},"1627":{"position":[[16,1],[249,1],[359,1]]},"1631":{"position":[[39,1],[532,1],[599,1]]},"1659":{"position":[[1312,1]]},"1661":{"position":[[1313,1],[1382,1]]},"1663":{"position":[[503,1]]},"1705":{"position":[[34,1]]},"1711":{"position":[[37,1],[727,1]]},"1761":{"position":[[502,1]]},"1783":{"position":[[9,1]]},"1832":{"position":[[27,1]]},"1857":{"position":[[75,1],[139,1],[181,1]]},"1875":{"position":[[663,1],[705,1]]},"1877":{"position":[[84,1],[132,1]]},"1901":{"position":[[149,1],[400,1],[541,1]]},"1913":{"position":[[1264,1]]},"1919":{"position":[[727,1]]},"1925":{"position":[[1456,1]]},"1927":{"position":[[773,1]]},"1933":{"position":[[893,1]]},"1935":{"position":[[388,1]]},"1941":{"position":[[1144,1]]},"1943":{"position":[[338,1]]},"1951":{"position":[[785,1]]},"1955":{"position":[[37,1]]},"1981":{"position":[[48,1]]},"1993":{"position":[[48,1]]},"2016":{"position":[[56,1]]},"2296":{"position":[[421,1]]},"2311":{"position":[[342,1],[348,1]]},"2313":{"position":[[517,1]]},"2326":{"position":[[289,1]]},"2361":{"position":[[393,1]]},"2393":{"position":[[76,1]]},"2418":{"position":[[619,1],[705,1],[801,1]]},"2438":{"position":[[253,1]]},"2440":{"position":[[289,1]]},"2508":{"position":[[26,1],[36,1]]},"2538":{"position":[[87,1]]},"2555":{"position":[[72,1]]},"2649":{"position":[[13,1]]},"2686":{"position":[[122,1]]},"2690":{"position":[[355,1]]},"2729":{"position":[[66,1]]},"2731":{"position":[[49,1]]},"2735":{"position":[[406,1]]},"2749":{"position":[[7,1]]},"2819":{"position":[[602,1]]},"2834":{"position":[[39,1]]},"2836":{"position":[[1279,1]]},"2838":{"position":[[36,1]]},"2862":{"position":[[351,1]]},"2881":{"position":[[238,1]]},"2889":{"position":[[154,1]]},"2905":{"position":[[52,1]]},"2910":{"position":[[355,1]]},"2973":{"position":[[9,1]]},"2985":{"position":[[15,1]]},"3023":{"position":[[1310,1],[1379,1]]},"3071":{"position":[[1123,1]]},"3078":{"position":[[114,1]]},"3088":{"position":[[44,1],[57,1],[79,1]]},"3094":{"position":[[140,1]]},"3108":{"position":[[168,1]]},"3110":{"position":[[227,1]]},"3114":{"position":[[28,1]]},"3118":{"position":[[180,1]]},"3120":{"position":[[11,1]]},"3126":{"position":[[504,1]]},"3152":{"position":[[60,1]]},"3189":{"position":[[14,1]]},"3224":{"position":[[367,1]]},"3242":{"position":[[197,1],[208,1]]},"3254":{"position":[[607,1],[982,1],[1209,1]]},"3275":{"position":[[417,1]]},"3287":{"position":[[147,1],[472,1],[3084,1]]},"3289":{"position":[[162,1]]},"3296":{"position":[[15,1]]},"3337":{"position":[[59,1]]},"3352":{"position":[[282,1],[341,1],[363,1],[528,1],[557,1],[627,1]]},"3385":{"position":[[7,1]]},"3432":{"position":[[256,1],[619,1],[4375,1]]},"3434":{"position":[[241,1],[677,1],[2747,1]]},"3452":{"position":[[614,1]]},"3470":{"position":[[40,1]]},"3532":{"position":[[4,1]]},"3551":{"position":[[288,1],[512,1]]},"3553":{"position":[[267,1],[379,1]]},"3555":{"position":[[288,1],[418,1]]},"3557":{"position":[[290,1],[425,1]]},"3559":{"position":[[299,1],[449,1]]},"3571":{"position":[[4,1]]},"3575":{"position":[[380,1]]},"3579":{"position":[[40,1],[209,1]]},"3589":{"position":[[597,1]]},"3595":{"position":[[79,1],[217,1],[397,1]]},"3601":{"position":[[63,1]]},"3620":{"position":[[39,1]]},"3626":{"position":[[66,1],[142,1]]},"3636":{"position":[[614,1],[765,1]]},"3644":{"position":[[1312,1]]},"3660":{"position":[[41,1]]},"3664":{"position":[[8,1]]},"3670":{"position":[[15,1],[79,1]]},"3698":{"position":[[61,1],[338,1]]},"3700":{"position":[[68,1]]},"3716":{"position":[[868,1]]},"3740":{"position":[[69,1],[375,1]]},"3764":{"position":[[15,1]]},"3768":{"position":[[2436,1]]},"3774":{"position":[[237,1]]},"3779":{"position":[[1448,1],[1616,1],[1836,1]]},"3795":{"position":[[642,1]]},"3802":{"position":[[2082,1],[2377,1],[2613,1]]},"3808":{"position":[[50,1]]},"3817":{"position":[[2730,1]]},"3844":{"position":[[886,1],[1020,1],[1123,1]]},"3856":{"position":[[11,1]]},"3858":{"position":[[3,1]]},"3894":{"position":[[3,1]]},"3908":{"position":[[303,1]]},"3910":{"position":[[194,1],[205,1],[1554,1]]},"3916":{"position":[[1539,1],[1664,1],[3610,1]]},"3930":{"position":[[1399,1]]},"3934":{"position":[[2363,1],[2374,1]]},"3962":{"position":[[1694,1],[2055,1]]},"3972":{"position":[[632,1]]},"3978":{"position":[[1090,1],[1436,1],[1715,1]]},"3990":{"position":[[478,1]]},"3992":{"position":[[2938,1]]}}}],["会员",{"_index":4607,"t":{"1511":{"position":[[531,2]]}}}],["会议",{"_index":7506,"t":{"3138":{"position":[[117,2]]},"3142":{"position":[[204,2]]}}}],["传",{"_index":7609,"t":{"3215":{"position":[[186,1]]},"3224":{"position":[[1338,1]]},"3774":{"position":[[229,1],[232,1],[234,1]]},"3992":{"position":[[2144,1]]}}}],["传入",{"_index":2316,"t":{"369":{"position":[[424,2]]},"453":{"position":[[360,2],[410,2]]},"516":{"position":[[628,2]]},"621":{"position":[[60,2]]},"1066":{"position":[[168,2]]},"1234":{"position":[[115,2],[247,2]]},"1236":{"position":[[115,2],[250,2]]},"1238":{"position":[[115,2],[290,2]]},"1240":{"position":[[115,2],[311,2]]},"1412":{"position":[[1417,2]]},"1657":{"position":[[118,2]]},"1857":{"position":[[57,2]]},"1903":{"position":[[263,2]]},"2285":{"position":[[16,2]]},"2581":{"position":[[74,2]]},"2879":{"position":[[0,2]]},"3168":{"position":[[76,2]]},"3422":{"position":[[10,2]]},"3448":{"position":[[269,2]]},"3500":{"position":[[3,2]]},"3622":{"position":[[119,2]]},"3684":{"position":[[132,2]]},"3740":{"position":[[473,2]]},"3806":{"position":[[1339,2],[1688,2]]},"3817":{"position":[[235,2]]},"3910":{"position":[[2407,2]]},"3922":{"position":[[1384,2],[2173,2]]},"3924":{"position":[[1752,2]]},"3934":{"position":[[874,2]]},"3946":{"position":[[344,2]]},"3948":{"position":[[481,2]]},"3960":{"position":[[524,2]]},"3962":{"position":[[1192,2]]},"3966":{"position":[[875,2]]},"3974":{"position":[[112,2]]},"3978":{"position":[[170,2]]},"3980":{"position":[[149,2]]},"3990":{"position":[[409,2]]},"3998":{"position":[[304,2]]}}}],["传到",{"_index":4956,"t":{"1535":{"position":[[609,2]]},"1551":{"position":[[168,2]]}}}],["传播",{"_index":5713,"t":{"1837":{"position":[[149,2]]},"1839":{"position":[[135,2]]}}}],["传统",{"_index":1965,"t":{"300":{"position":[[63,2]]},"371":{"position":[[29,2]]},"583":{"position":[[0,2]]},"1389":{"position":[[0,2]]},"2559":{"position":[[633,2]]},"2915":{"position":[[150,2]]}}}],["传输",{"_index":6201,"t":{"2341":{"position":[[179,2]]}}}],["传送",{"_index":1114,"t":{"148":{"position":[[45,2]]}}}],["传递",{"_index":702,"t":{"112":{"position":[[61,2]]},"350":{"position":[[502,2]]},"369":{"position":[[71,2]]},"572":{"position":[[609,2],[1054,2]]},"1539":{"position":[[1895,2]]},"1541":{"position":[[37,2]]},"1711":{"position":[[491,2],[566,2]]},"1901":{"position":[[218,2]]},"1909":{"position":[[860,2]]},"2547":{"position":[[63,2]]},"2564":{"position":[[39,2]]},"2745":{"position":[[262,2]]},"2747":{"position":[[297,2]]},"3136":{"position":[[63,2]]},"3718":{"position":[[97,2],[108,2]]},"3779":{"position":[[1601,2]]},"3795":{"position":[[403,2]]},"3802":{"position":[[2362,2]]},"3806":{"position":[[1284,2]]},"3844":{"position":[[689,2]]},"3940":{"position":[[415,2]]}}}],["传递数据",{"_index":6106,"t":{"2311":{"position":[[67,4]]}}}],["伯利兹",{"_index":6514,"t":{"2559":{"position":[[802,3]]}}}],["伴",{"_index":7729,"t":{"3242":{"position":[[76,1]]},"3910":{"position":[[73,1]]},"3934":{"position":[[2170,1]]}}}],["似乎",{"_index":3035,"t":{"585":{"position":[[382,2]]},"2684":{"position":[[294,2]]},"3926":{"position":[[102,2]]}}}],["但凡",{"_index":7749,"t":{"3242":{"position":[[271,2]]},"3910":{"position":[[268,2]]},"3934":{"position":[[2451,2]]}}}],["但是",{"_index":348,"t":{"21":{"position":[[163,2]]},"23":{"position":[[145,2]]},"85":{"position":[[135,2]]},"98":{"position":[[135,2]]},"220":{"position":[[46,2]]},"255":{"position":[[90,2],[165,2]]},"265":{"position":[[12,2]]},"286":{"position":[[16,2]]},"338":{"position":[[1154,2]]},"363":{"position":[[62,2]]},"518":{"position":[[514,2]]},"585":{"position":[[391,2]]},"587":{"position":[[2099,2]]},"610":{"position":[[24,2]]},"633":{"position":[[27,2]]},"728":{"position":[[39,2]]},"941":{"position":[[96,2]]},"1379":{"position":[[8,2]]},"1428":{"position":[[28,2]]},"1432":{"position":[[131,2]]},"1545":{"position":[[15,2]]},"1609":{"position":[[256,2]]},"1631":{"position":[[389,2]]},"1663":{"position":[[479,2]]},"1691":{"position":[[23,2]]},"1709":{"position":[[22,2]]},"2231":{"position":[[145,2]]},"2359":{"position":[[438,2]]},"2385":{"position":[[38,2]]},"2418":{"position":[[365,2]]},"2438":{"position":[[274,2]]},"2440":{"position":[[308,2]]},"2538":{"position":[[85,2]]},"2540":{"position":[[71,2]]},"2684":{"position":[[303,2]]},"2731":{"position":[[44,2],[674,2]]},"2843":{"position":[[40,2]]},"2895":{"position":[[26,2]]},"2917":{"position":[[28,2]]},"2937":{"position":[[26,2]]},"3078":{"position":[[77,2]]},"3094":{"position":[[74,2]]},"3100":{"position":[[18,2]]},"3189":{"position":[[37,2]]},"3337":{"position":[[21,2]]},"3414":{"position":[[37,2]]},"3626":{"position":[[117,2]]},"3664":{"position":[[42,2]]},"3800":{"position":[[151,2]]},"3914":{"position":[[2914,2]]},"3918":{"position":[[3448,2]]},"3924":{"position":[[2603,2]]},"3962":{"position":[[2051,2]]}}}],["位",{"_index":3121,"t":{"597":{"position":[[275,1]]},"599":{"position":[[305,1]]},"1677":{"position":[[225,1]]},"1681":{"position":[[67,1],[71,1]]},"2057":{"position":[[255,1]]},"2333":{"position":[[129,1]]},"3912":{"position":[[2494,1]]},"3922":{"position":[[391,1]]},"3934":{"position":[[2709,1]]}}}],["位于",{"_index":6822,"t":{"2709":{"position":[[323,2]]}}}],["位置",{"_index":2884,"t":{"546":{"position":[[178,2]]},"591":{"position":[[81,2]]},"864":{"position":[[29,2]]},"1495":{"position":[[1284,2],[1292,2]]},"1611":{"position":[[22,2],[56,2],[65,2],[412,2],[811,2],[838,2]]},"1763":{"position":[[227,2]]},"2528":{"position":[[30,2]]},"3254":{"position":[[1640,2]]},"3414":{"position":[[221,2]]},"4006":{"position":[[710,2]]}}}],["低",{"_index":1864,"t":{"255":{"position":[[159,1]]},"300":{"position":[[187,1]]},"518":{"position":[[568,1]]},"617":{"position":[[2850,1]]},"1877":{"position":[[62,1]]},"2684":{"position":[[372,1]]},"2915":{"position":[[237,1]]},"3092":{"position":[[12,1]]},"3148":{"position":[[150,1]]}}}],["低下",{"_index":1891,"t":{"265":{"position":[[19,2]]}}}],["低于",{"_index":6116,"t":{"2311":{"position":[[323,2]]}}}],["低价",{"_index":7240,"t":{"2915":{"position":[[242,2]]}}}],["低级",{"_index":4751,"t":{"1511":{"position":[[2124,2]]},"3352":{"position":[[2,2],[31,2]]}}}],["住址",{"_index":3403,"t":{"708":{"position":[[452,2]]},"830":{"position":[[266,2]]},"851":{"position":[[467,2]]},"1364":{"position":[[392,2]]}}}],["体",{"_index":1583,"t":{"216":{"position":[[102,1]]},"3622":{"position":[[148,1]]}}}],["体现",{"_index":4225,"t":{"1392":{"position":[[30,2]]},"3624":{"position":[[115,2],[176,2]]}}}],["体积",{"_index":9575,"t":{"3940":{"position":[[575,2]]},"3992":{"position":[[1160,2]]}}}],["体验",{"_index":1289,"t":{"182":{"position":[[179,2]]},"2862":{"position":[[394,2]]},"2895":{"position":[[59,2]]},"3207":{"position":[[92,2]]},"3612":{"position":[[60,2]]},"3924":{"position":[[2087,2]]},"3944":{"position":[[518,2]]}}}],["何其",{"_index":1161,"t":{"156":{"position":[[9,2]]}}}],["何尝",{"_index":7024,"t":{"2770":{"position":[[323,2]]}}}],["何时",{"_index":3287,"t":{"659":{"position":[[67,2],[72,2]]},"1010":{"position":[[66,2],[71,2]]}}}],["何种",{"_index":3942,"t":{"1082":{"position":[[4,2]]}}}],["作业",{"_index":2721,"t":{"488":{"position":[[17,2]]},"2175":{"position":[[183,2],[200,2]]},"2179":{"position":[[34,2]]},"2823":{"position":[[17,2]]},"3760":{"position":[[2,2]]},"3762":{"position":[[2,2],[443,2],[449,2],[515,2]]},"3764":{"position":[[9,2],[123,2]]},"3766":{"position":[[6,2],[296,2]]},"3768":{"position":[[6,2],[29,2],[68,2],[584,2],[2600,2]]},"3770":{"position":[[11,2],[28,2],[366,2],[1233,2],[1763,2],[2687,2],[3082,2],[3178,2],[3300,2],[3417,2],[3496,2],[3795,2],[3927,2],[4540,2],[5038,2]]},"3772":{"position":[[13,2],[35,2],[513,2],[549,2],[789,2],[998,2],[1006,2],[1115,2],[1123,2],[1232,2],[1240,2],[1349,2],[1357,2],[1466,2],[1474,2],[1583,2],[1591,2],[1806,2],[1814,2],[1923,2],[1931,2],[2040,2],[2048,2]]},"3774":{"position":[[22,2],[35,2],[250,2],[273,2],[709,2]]},"3777":{"position":[[21,2],[77,2],[121,2],[167,2],[350,2],[420,2]]},"3779":{"position":[[0,2],[16,2],[73,2],[162,2],[477,2]]},"3781":{"position":[[46,2],[157,2],[261,2],[297,2],[339,2],[380,2],[515,2],[637,2]]},"3783":{"position":[[8,2],[586,2],[1197,2],[1763,2],[1774,2]]},"3787":{"position":[[0,2],[7,2],[30,2]]},"3791":{"position":[[9,2]]},"3793":{"position":[[93,2],[128,2],[141,2],[257,2]]},"3795":{"position":[[6,2],[18,2],[618,2]]},"3798":{"position":[[19,2],[82,2],[104,2],[129,2],[174,2],[212,2],[302,2],[691,2]]},"3800":{"position":[[0,2],[12,2],[340,2],[346,2],[378,2],[385,2]]},"3802":{"position":[[0,2],[15,2],[74,2],[159,2],[526,2]]},"3804":{"position":[[8,2],[14,2],[47,2],[123,2],[194,2],[271,2],[443,2],[508,2],[579,2],[672,2],[733,2],[794,2],[856,2],[919,2],[983,2],[1049,2]]},"3806":{"position":[[4,2],[49,2],[106,2],[402,2],[1276,2],[1302,2],[1807,2],[2670,2],[3069,2],[3635,2]]},"3808":{"position":[[95,2],[106,2],[138,2],[172,2],[233,2],[256,2],[280,2],[302,2],[326,2],[356,2],[382,2],[415,2],[1069,2],[1690,2],[2290,2],[2918,2],[2949,2]]},"3810":{"position":[[48,2],[167,2],[238,2],[289,2],[346,2],[383,2],[416,2],[448,2],[461,2],[504,2],[543,2],[595,2],[653,2],[712,2],[748,2],[786,2],[824,2],[864,2],[897,2],[935,2],[969,2],[1006,2]]},"3815":{"position":[[3,2],[20,2],[36,2],[51,2],[72,2]]},"3817":{"position":[[0,2],[16,2],[79,2],[168,2],[229,2],[404,2],[1484,2]]},"3819":{"position":[[59,2],[125,2],[211,2],[290,2],[378,2],[633,2],[912,2],[983,2],[1457,2],[1571,2],[1627,2],[1675,2]]},"3824":{"position":[[37,2],[42,2]]},"3826":{"position":[[65,2],[120,2],[290,2],[443,2],[496,2],[611,2],[662,2],[712,2]]},"3828":{"position":[[2,2],[39,2],[887,2]]},"3830":{"position":[[219,2],[254,2],[267,2],[354,2]]},"3832":{"position":[[2,2],[899,2]]},"3834":{"position":[[0,2],[16,2],[22,2]]},"3842":{"position":[[248,2],[878,2],[1443,2],[2033,2],[2674,2],[3291,2]]},"3844":{"position":[[254,2],[669,2],[685,2]]},"3846":{"position":[[494,2]]},"3850":{"position":[[86,2]]},"3852":{"position":[[86,2]]},"3854":{"position":[[88,2]]},"3856":{"position":[[6,2],[36,2],[102,2]]},"3858":{"position":[[8,2],[68,2]]},"3860":{"position":[[0,2],[50,2]]},"3874":{"position":[[19,2]]},"3876":{"position":[[19,2]]},"3894":{"position":[[8,2],[68,2]]}}}],["作业处理",{"_index":8953,"t":{"3832":{"position":[[38,4]]}}}],["作业组",{"_index":8795,"t":{"3777":{"position":[[100,3]]},"3781":{"position":[[190,3]]}}}],["作为",{"_index":474,"t":{"85":{"position":[[91,2]]},"237":{"position":[[1305,2]]},"239":{"position":[[22,2]]},"243":{"position":[[67,2],[113,2]]},"247":{"position":[[75,2]]},"278":{"position":[[238,2],[265,2]]},"399":{"position":[[530,2]]},"429":{"position":[[99,2]]},"467":{"position":[[38,2]]},"469":{"position":[[66,2]]},"1234":{"position":[[839,2],[1064,2]]},"1408":{"position":[[1105,2]]},"1414":{"position":[[21,2]]},"1440":{"position":[[403,2]]},"1592":{"position":[[78,2]]},"1594":{"position":[[161,2]]},"1797":{"position":[[23,2]]},"1799":{"position":[[20,2]]},"1801":{"position":[[47,2]]},"1869":{"position":[[313,2],[575,2]]},"2261":{"position":[[436,2]]},"2497":{"position":[[0,2]]},"2735":{"position":[[419,2]]},"2768":{"position":[[1527,2]]},"3122":{"position":[[53,2]]},"3282":{"position":[[3,2]]},"3337":{"position":[[42,2]]},"3420":{"position":[[320,2]]},"3432":{"position":[[439,2]]},"3464":{"position":[[484,2]]},"3589":{"position":[[525,2]]},"3616":{"position":[[0,2],[36,2]]},"3626":{"position":[[550,2]]},"3698":{"position":[[316,2]]},"3793":{"position":[[23,2]]},"3798":{"position":[[242,2]]},"3815":{"position":[[86,2]]},"3824":{"position":[[54,2]]},"3826":{"position":[[63,2]]},"3928":{"position":[[184,2]]}}}],["作用",{"_index":1527,"t":{"204":{"position":[[466,2]]},"1520":{"position":[[408,2]]},"1572":{"position":[[16,2]]},"1641":{"position":[[436,2]]},"1649":{"position":[[11,2]]},"1651":{"position":[[37,2]]},"1653":{"position":[[30,2]]},"1657":{"position":[[160,2]]},"1753":{"position":[[277,2]]},"1909":{"position":[[35,2]]},"1913":{"position":[[1265,2]]},"1919":{"position":[[728,2]]},"1925":{"position":[[1457,2]]},"1927":{"position":[[774,2]]},"1933":{"position":[[894,2]]},"1935":{"position":[[389,2]]},"1941":{"position":[[1145,2]]},"1943":{"position":[[339,2]]},"1951":{"position":[[786,2]]},"2333":{"position":[[29,2]]},"3138":{"position":[[145,2]]},"3152":{"position":[[47,2]]},"3284":{"position":[[41,2]]},"3414":{"position":[[76,2],[324,2]]},"3470":{"position":[[174,2]]}}}],["作用域",{"_index":2848,"t":{"530":{"position":[[777,3]]},"1039":{"position":[[778,3]]},"1214":{"position":[[47,3],[130,3],[194,3]]},"1383":{"position":[[40,3],[290,3]]},"1401":{"position":[[0,3],[46,3]]},"1405":{"position":[[49,3],[70,3],[94,3]]},"1408":{"position":[[1093,3]]},"1432":{"position":[[25,3],[31,3],[56,3],[198,3]]},"1438":{"position":[[10,3]]},"1440":{"position":[[493,3]]},"1711":{"position":[[343,3],[810,3]]},"1811":{"position":[[37,3],[103,3],[504,3]]},"1823":{"position":[[40,3],[51,3],[651,3]]},"2182":{"position":[[232,3]]},"2186":{"position":[[30,3]]},"2188":{"position":[[30,3]]},"2474":{"position":[[39,3]]},"2478":{"position":[[457,3]]},"2587":{"position":[[515,3]]},"2831":{"position":[[30,3],[48,3],[59,3]]},"3524":{"position":[[11,3]]},"3791":{"position":[[1361,3],[1367,3],[1378,3]]},"3914":{"position":[[2627,3]]},"3916":{"position":[[1712,3]]},"3922":{"position":[[456,3]]},"3962":{"position":[[2008,3]]},"3974":{"position":[[114,3]]},"3976":{"position":[[224,3]]},"3990":{"position":[[468,3]]},"3998":{"position":[[701,3]]}}}],["作者",{"_index":4667,"t":{"1511":{"position":[[1114,2],[1194,2]]},"1761":{"position":[[492,2]]},"2261":{"position":[[78,2],[281,2]]},"3207":{"position":[[113,2]]},"3464":{"position":[[126,2],[329,2]]},"3934":{"position":[[2564,2]]},"3936":{"position":[[1949,2],[2140,2]]},"3986":{"position":[[43,2]]}}}],["佩服",{"_index":4813,"t":{"1511":{"position":[[2787,2]]}}}],["使命",{"_index":9367,"t":{"3926":{"position":[[72,2]]}}}],["使得",{"_index":4212,"t":{"1389":{"position":[[60,2]]},"1509":{"position":[[180,2]]},"2341":{"position":[[128,2]]},"3414":{"position":[[244,2]]},"3595":{"position":[[344,2]]},"3924":{"position":[[3531,2]]}}}],["使用",{"_index":20,"t":{"3":{"position":[[79,2],[436,2]]},"11":{"position":[[693,2],[905,2]]},"19":{"position":[[703,2]]},"51":{"position":[[22,2],[263,2]]},"62":{"position":[[22,2],[263,2]]},"75":{"position":[[22,2],[263,2]]},"93":{"position":[[655,2]]},"98":{"position":[[26,2]]},"108":{"position":[[45,2]]},"114":{"position":[[45,2]]},"121":{"position":[[81,2]]},"125":{"position":[[0,2],[8,2],[38,2]]},"127":{"position":[[291,2],[1754,2]]},"133":{"position":[[696,2]]},"146":{"position":[[1007,2]]},"148":{"position":[[221,2]]},"199":{"position":[[8,2],[659,2]]},"218":{"position":[[102,2]]},"233":{"position":[[250,2]]},"237":{"position":[[1269,2]]},"239":{"position":[[192,2],[303,2]]},"241":{"position":[[2,2],[69,2],[140,2]]},"243":{"position":[[103,2]]},"245":{"position":[[147,2]]},"247":{"position":[[58,2],[124,2]]},"249":{"position":[[33,2],[106,2]]},"253":{"position":[[2,2]]},"255":{"position":[[221,2],[263,2]]},"259":{"position":[[30,2]]},"265":{"position":[[38,2],[47,2]]},"300":{"position":[[27,2]]},"302":{"position":[[43,2]]},"304":{"position":[[104,2]]},"314":{"position":[[100,2]]},"316":{"position":[[102,2]]},"319":{"position":[[13,2],[54,2]]},"321":{"position":[[388,2]]},"325":{"position":[[23,2],[208,2]]},"327":{"position":[[28,2]]},"336":{"position":[[139,2]]},"371":{"position":[[643,2]]},"384":{"position":[[9,2]]},"388":{"position":[[0,2]]},"417":{"position":[[263,2]]},"419":{"position":[[0,2],[381,2],[414,2],[437,2]]},"423":{"position":[[53,2],[60,2],[109,2],[117,2]]},"431":{"position":[[47,2]]},"455":{"position":[[942,2],[960,2]]},"459":{"position":[[16,2],[25,2]]},"461":{"position":[[264,2]]},"463":{"position":[[42,2]]},"467":{"position":[[82,2]]},"482":{"position":[[348,2],[451,2],[490,2],[497,2],[539,2],[603,2],[661,2],[725,2],[806,2]]},"486":{"position":[[32,2]]},"488":{"position":[[6,2]]},"502":{"position":[[13,2]]},"512":{"position":[[73,2]]},"516":{"position":[[421,2]]},"518":{"position":[[511,2]]},"526":{"position":[[25,2],[59,2]]},"528":{"position":[[135,2],[313,2],[332,2],[430,2]]},"530":{"position":[[39,2],[827,2]]},"538":{"position":[[32,2]]},"544":{"position":[[0,2]]},"548":{"position":[[1,2]]},"552":{"position":[[74,2]]},"572":{"position":[[33,2]]},"583":{"position":[[94,2]]},"587":{"position":[[79,2],[2146,2],[2161,2]]},"606":{"position":[[501,2]]},"608":{"position":[[39,2]]},"612":{"position":[[55,2]]},"615":{"position":[[433,2],[712,2],[717,2],[876,2]]},"639":{"position":[[393,2]]},"677":{"position":[[84,2],[169,2],[193,2]]},"685":{"position":[[241,2],[340,2],[593,2]]},"698":{"position":[[26,2]]},"704":{"position":[[84,2],[169,2],[193,2]]},"728":{"position":[[13,2]]},"756":{"position":[[52,2]]},"761":{"position":[[153,2]]},"773":{"position":[[15,2]]},"799":{"position":[[7,2]]},"801":{"position":[[38,2]]},"818":{"position":[[24,2],[37,2]]},"836":{"position":[[38,2],[169,2]]},"844":{"position":[[21,2]]},"846":{"position":[[30,2],[980,2]]},"899":{"position":[[672,2],[1469,2]]},"919":{"position":[[14,2]]},"945":{"position":[[118,2]]},"981":{"position":[[40,2]]},"986":{"position":[[14,2]]},"1020":{"position":[[38,2]]},"1026":{"position":[[228,2]]},"1039":{"position":[[39,2],[828,2]]},"1048":{"position":[[85,2]]},"1052":{"position":[[68,2],[113,2]]},"1066":{"position":[[98,2],[544,2],[1711,2]]},"1068":{"position":[[23,2]]},"1075":{"position":[[47,2]]},"1101":{"position":[[7,2]]},"1143":{"position":[[72,2]]},"1155":{"position":[[7,2]]},"1200":{"position":[[158,2],[185,2]]},"1234":{"position":[[854,2],[1059,2]]},"1246":{"position":[[29,2]]},"1248":{"position":[[29,2]]},"1265":{"position":[[29,2]]},"1286":{"position":[[93,2]]},"1309":{"position":[[119,2]]},"1383":{"position":[[64,2],[134,2]]},"1392":{"position":[[15,2],[182,2],[194,2]]},"1394":{"position":[[32,2],[106,2]]},"1399":{"position":[[74,2]]},"1401":{"position":[[58,2]]},"1403":{"position":[[22,2],[35,2]]},"1412":{"position":[[756,2]]},"1424":{"position":[[33,2]]},"1432":{"position":[[187,2]]},"1440":{"position":[[66,2],[124,2]]},"1483":{"position":[[0,2],[715,2],[948,2]]},"1507":{"position":[[29,2]]},"1509":{"position":[[107,2]]},"1511":{"position":[[15,2],[613,2],[847,2],[1575,2],[2495,2],[3724,2],[3898,2]]},"1516":{"position":[[0,2],[245,2]]},"1518":{"position":[[30,2]]},"1520":{"position":[[193,2],[267,2]]},"1535":{"position":[[519,2],[529,2],[657,2]]},"1539":{"position":[[1567,2]]},"1541":{"position":[[29,2]]},"1547":{"position":[[27,2],[70,2],[261,2]]},"1549":{"position":[[24,2]]},"1557":{"position":[[676,2]]},"1566":{"position":[[16,2],[118,2],[244,2],[317,2],[353,2],[405,2],[465,2],[539,2],[573,2]]},"1617":{"position":[[1154,2]]},"1623":{"position":[[165,2],[183,2]]},"1641":{"position":[[255,2],[299,2]]},"1663":{"position":[[544,2]]},"1701":{"position":[[3,2]]},"1711":{"position":[[349,2],[744,2],[860,2]]},"1715":{"position":[[29,2]]},"1755":{"position":[[556,2],[582,2]]},"1791":{"position":[[95,2]]},"1797":{"position":[[7,2],[767,2]]},"1799":{"position":[[48,2],[94,2]]},"1801":{"position":[[29,2],[35,2],[71,2]]},"1811":{"position":[[35,2]]},"1815":{"position":[[30,2]]},"1817":{"position":[[29,2]]},"1819":{"position":[[29,2],[610,2]]},"1821":{"position":[[147,2]]},"1823":{"position":[[45,2]]},"1825":{"position":[[6,2]]},"1857":{"position":[[76,2]]},"1861":{"position":[[21,2]]},"1867":{"position":[[79,2],[680,2],[710,2]]},"1869":{"position":[[337,2],[671,2]]},"1883":{"position":[[24,2]]},"1887":{"position":[[29,2]]},"1901":{"position":[[247,2]]},"1903":{"position":[[398,2],[408,2],[425,2],[590,2]]},"1909":{"position":[[605,2]]},"1913":{"position":[[1445,2]]},"1915":{"position":[[330,2]]},"1917":{"position":[[5,2]]},"1919":{"position":[[898,2]]},"1921":{"position":[[354,2]]},"1923":{"position":[[6,2],[80,2]]},"1925":{"position":[[1623,2]]},"1927":{"position":[[946,2]]},"1929":{"position":[[344,2]]},"1931":{"position":[[5,2]]},"1933":{"position":[[1066,2]]},"1935":{"position":[[567,2]]},"1937":{"position":[[308,2]]},"1941":{"position":[[710,2],[801,2],[1311,2]]},"1943":{"position":[[511,2]]},"1945":{"position":[[344,2]]},"1947":{"position":[[134,2]]},"1955":{"position":[[163,2],[246,2]]},"1961":{"position":[[76,2]]},"1963":{"position":[[18,2]]},"1969":{"position":[[90,2],[136,2]]},"1971":{"position":[[5,2]]},"1981":{"position":[[60,2]]},"1983":{"position":[[2,2],[48,2]]},"1985":{"position":[[5,2]]},"1993":{"position":[[60,2]]},"2006":{"position":[[2,2],[48,2]]},"2008":{"position":[[5,2]]},"2016":{"position":[[68,2]]},"2063":{"position":[[29,2]]},"2065":{"position":[[29,2]]},"2067":{"position":[[30,2]]},"2077":{"position":[[35,2]]},"2096":{"position":[[0,2]]},"2098":{"position":[[29,2]]},"2169":{"position":[[29,2]]},"2173":{"position":[[29,2]]},"2175":{"position":[[32,2],[209,2],[282,2]]},"2182":{"position":[[282,2]]},"2199":{"position":[[21,2]]},"2239":{"position":[[168,2]]},"2251":{"position":[[146,2]]},"2255":{"position":[[29,2],[538,2]]},"2259":{"position":[[29,2]]},"2261":{"position":[[466,2]]},"2264":{"position":[[37,2]]},"2269":{"position":[[28,2]]},"2272":{"position":[[205,2]]},"2274":{"position":[[147,2]]},"2276":{"position":[[29,2]]},"2278":{"position":[[89,2]]},"2281":{"position":[[110,2]]},"2283":{"position":[[96,2]]},"2294":{"position":[[722,2],[953,2]]},"2298":{"position":[[236,2]]},"2311":{"position":[[103,2],[340,2],[452,2]]},"2313":{"position":[[526,2],[637,2]]},"2319":{"position":[[40,2]]},"2326":{"position":[[64,2],[85,2],[123,2]]},"2331":{"position":[[198,2]]},"2335":{"position":[[50,2]]},"2339":{"position":[[30,2]]},"2343":{"position":[[105,2]]},"2354":{"position":[[31,2],[54,2]]},"2361":{"position":[[100,2],[225,2],[227,2],[337,2],[352,2]]},"2377":{"position":[[3,2],[37,2]]},"2379":{"position":[[64,2]]},"2391":{"position":[[110,2],[148,2]]},"2418":{"position":[[550,2],[605,2],[745,2],[784,2],[790,2],[838,2],[910,2],[976,2],[1063,2],[1163,2]]},"2442":{"position":[[56,2]]},"2478":{"position":[[507,2]]},"2490":{"position":[[6,2]]},"2501":{"position":[[0,2]]},"2519":{"position":[[1,2]]},"2528":{"position":[[32,2]]},"2538":{"position":[[29,2],[314,2],[494,2]]},"2579":{"position":[[856,2]]},"2581":{"position":[[1348,2]]},"2587":{"position":[[510,2],[523,2]]},"2589":{"position":[[8,2]]},"2597":{"position":[[32,2]]},"2603":{"position":[[0,2]]},"2605":{"position":[[1,2]]},"2635":{"position":[[2,2]]},"2639":{"position":[[121,2]]},"2646":{"position":[[88,2]]},"2653":{"position":[[11,2]]},"2662":{"position":[[2,2]]},"2666":{"position":[[121,2]]},"2674":{"position":[[110,2],[133,2],[181,2],[234,2],[328,2]]},"2680":{"position":[[0,2],[81,2]]},"2684":{"position":[[335,2],[473,2],[497,2]]},"2694":{"position":[[195,2]]},"2703":{"position":[[82,2]]},"2705":{"position":[[47,2]]},"2713":{"position":[[682,2]]},"2715":{"position":[[11,2],[25,2]]},"2717":{"position":[[313,2],[364,2]]},"2729":{"position":[[75,2]]},"2731":{"position":[[11,2]]},"2735":{"position":[[29,2]]},"2745":{"position":[[81,2]]},"2747":{"position":[[91,2],[234,2]]},"2772":{"position":[[2,2],[48,2]]},"2780":{"position":[[29,2]]},"2782":{"position":[[100,2]]},"2788":{"position":[[202,2]]},"2790":{"position":[[120,2],[225,2],[316,2]]},"2792":{"position":[[35,2]]},"2805":{"position":[[106,2]]},"2809":{"position":[[74,2]]},"2813":{"position":[[1133,2]]},"2823":{"position":[[6,2]]},"2838":{"position":[[6,2]]},"2843":{"position":[[192,2]]},"2846":{"position":[[0,2]]},"2848":{"position":[[1,2]]},"2850":{"position":[[3,2]]},"2852":{"position":[[63,2]]},"2856":{"position":[[1763,2],[1783,2]]},"2860":{"position":[[29,2],[35,2],[81,2]]},"2864":{"position":[[49,2]]},"2866":{"position":[[0,2]]},"2868":{"position":[[129,2]]},"2875":{"position":[[435,2],[469,2]]},"2877":{"position":[[29,2]]},"2879":{"position":[[409,2]]},"2881":{"position":[[308,2],[354,2]]},"2893":{"position":[[29,2]]},"2897":{"position":[[89,2],[145,2],[190,2]]},"2899":{"position":[[17,2]]},"2903":{"position":[[18,2],[48,2]]},"2905":{"position":[[12,2]]},"2910":{"position":[[413,2]]},"2912":{"position":[[158,2]]},"2921":{"position":[[23,2],[37,2]]},"2933":{"position":[[567,2]]},"2977":{"position":[[50,2]]},"2987":{"position":[[50,2]]},"2995":{"position":[[89,2]]},"2997":{"position":[[50,2]]},"3005":{"position":[[50,2]]},"3019":{"position":[[50,2]]},"3027":{"position":[[50,2]]},"3035":{"position":[[50,2]]},"3043":{"position":[[50,2]]},"3051":{"position":[[50,2]]},"3059":{"position":[[50,2]]},"3067":{"position":[[29,2]]},"3069":{"position":[[118,2]]},"3078":{"position":[[146,2]]},"3080":{"position":[[229,2],[307,2],[450,2]]},"3092":{"position":[[75,2]]},"3110":{"position":[[138,2]]},"3116":{"position":[[0,2]]},"3118":{"position":[[71,2]]},"3136":{"position":[[56,2],[166,2]]},"3140":{"position":[[46,2]]},"3142":{"position":[[248,2]]},"3144":{"position":[[27,2]]},"3148":{"position":[[159,2],[214,2]]},"3150":{"position":[[107,2],[131,2],[145,2]]},"3152":{"position":[[9,2],[69,2]]},"3154":{"position":[[674,2],[718,2]]},"3156":{"position":[[336,2],[368,2]]},"3194":{"position":[[11,2]]},"3207":{"position":[[125,2],[191,2]]},"3215":{"position":[[636,2]]},"3224":{"position":[[251,2],[1785,2]]},"3248":{"position":[[32,2],[98,2]]},"3254":{"position":[[0,2]]},"3256":{"position":[[1,2]]},"3287":{"position":[[1198,2],[1203,2]]},"3298":{"position":[[54,2]]},"3307":{"position":[[245,2]]},"3321":{"position":[[198,2]]},"3323":{"position":[[545,2]]},"3327":{"position":[[33,2]]},"3339":{"position":[[29,2]]},"3341":{"position":[[19,2]]},"3345":{"position":[[29,2],[77,2]]},"3356":{"position":[[43,2]]},"3360":{"position":[[175,2]]},"3369":{"position":[[13,2]]},"3373":{"position":[[668,2]]},"3389":{"position":[[130,2]]},"3393":{"position":[[62,2]]},"3397":{"position":[[110,2],[221,2]]},"3403":{"position":[[59,2]]},"3414":{"position":[[13,2]]},"3416":{"position":[[175,2]]},"3420":{"position":[[0,2]]},"3422":{"position":[[0,2]]},"3424":{"position":[[29,2]]},"3430":{"position":[[1473,2],[1840,2],[3677,2],[4538,2]]},"3432":{"position":[[2,2],[723,2],[3441,2],[3929,2],[4880,2]]},"3434":{"position":[[422,2]]},"3450":{"position":[[29,2]]},"3452":{"position":[[29,2]]},"3454":{"position":[[29,2]]},"3456":{"position":[[29,2]]},"3464":{"position":[[42,2],[514,2]]},"3466":{"position":[[29,2],[740,2],[792,2],[898,2],[1009,2]]},"3474":{"position":[[30,2]]},"3481":{"position":[[0,2]]},"3498":{"position":[[413,2]]},"3522":{"position":[[70,2],[1173,2],[1194,2]]},"3543":{"position":[[500,2]]},"3563":{"position":[[68,2],[643,2],[664,2]]},"3575":{"position":[[398,2],[533,2],[668,2]]},"3581":{"position":[[455,2]]},"3583":{"position":[[658,2]]},"3587":{"position":[[10,2]]},"3589":{"position":[[503,2],[625,2]]},"3593":{"position":[[29,2]]},"3595":{"position":[[324,2],[429,2]]},"3597":{"position":[[27,2],[41,2]]},"3603":{"position":[[29,2]]},"3614":{"position":[[63,2]]},"3620":{"position":[[59,2]]},"3626":{"position":[[618,2]]},"3666":{"position":[[276,2]]},"3676":{"position":[[14,2]]},"3686":{"position":[[29,2]]},"3688":{"position":[[29,2]]},"3690":{"position":[[29,2]]},"3692":{"position":[[29,2]]},"3694":{"position":[[29,2]]},"3698":{"position":[[29,2],[372,2]]},"3700":{"position":[[28,2]]},"3702":{"position":[[1385,2]]},"3708":{"position":[[1469,2],[1831,2],[2296,2]]},"3716":{"position":[[29,2],[71,2],[891,2]]},"3722":{"position":[[29,2],[128,2],[213,2]]},"3732":{"position":[[0,2]]},"3740":{"position":[[20,2],[88,2],[98,2],[376,2]]},"3742":{"position":[[30,2]]},"3758":{"position":[[152,2]]},"3766":{"position":[[178,2]]},"3768":{"position":[[2408,2]]},"3777":{"position":[[258,2]]},"3779":{"position":[[916,2],[928,2]]},"3785":{"position":[[387,2],[528,2],[662,2]]},"3800":{"position":[[21,2]]},"3802":{"position":[[1265,2],[1277,2]]},"3806":{"position":[[2,2]]},"3808":{"position":[[423,2],[1675,2],[1907,2],[3268,2]]},"3812":{"position":[[665,2],[804,2],[936,2]]},"3817":{"position":[[1565,2],[1577,2]]},"3826":{"position":[[46,2]]},"3914":{"position":[[1117,2],[1298,2],[2526,2]]},"3916":{"position":[[1793,2],[2286,2]]},"3918":{"position":[[3771,2],[3952,2]]},"3922":{"position":[[730,2],[763,2],[1421,2],[2040,2],[2283,2]]},"3924":{"position":[[409,2],[722,2],[2238,2]]},"3928":{"position":[[141,2],[168,2],[714,2]]},"3952":{"position":[[378,2]]},"3954":{"position":[[401,2]]},"3962":{"position":[[1103,2],[1962,2],[2025,2]]},"3966":{"position":[[1453,2],[1680,2],[1760,2],[1968,2]]},"3968":{"position":[[553,2],[619,2]]},"3972":{"position":[[298,2]]},"3974":{"position":[[483,2],[662,2],[817,2]]},"3978":{"position":[[1056,2]]},"3986":{"position":[[1433,2],[1470,2]]},"3990":{"position":[[722,2]]},"3992":{"position":[[3066,2],[3741,2],[3979,2]]},"4004":{"position":[[566,2]]}}}],["使用不当",{"_index":5042,"t":{"1566":{"position":[[46,4]]}}}],["使用者",{"_index":3009,"t":{"579":{"position":[[13,3]]},"3928":{"position":[[337,3]]}}}],["例",{"_index":4191,"t":{"1383":{"position":[[164,1],[256,1]]},"1405":{"position":[[93,1]]},"1440":{"position":[[500,1]]},"1811":{"position":[[31,1],[44,1]]},"1823":{"position":[[64,1]]},"2035":{"position":[[59,1]]},"2345":{"position":[[60,1]]},"2486":{"position":[[77,1]]},"2581":{"position":[[64,1]]},"2587":{"position":[[485,1]]},"2589":{"position":[[12,1],[227,1],[455,1]]},"2831":{"position":[[29,1]]},"3108":{"position":[[138,1]]},"3118":{"position":[[229,1]]},"3162":{"position":[[18,1]]},"3215":{"position":[[456,1]]},"3224":{"position":[[1801,1]]},"3624":{"position":[[33,1]]},"3791":{"position":[[24,1],[32,1],[560,1]]},"3834":{"position":[[56,1]]}}}],["例外",{"_index":5905,"t":{"1955":{"position":[[116,2]]},"3114":{"position":[[16,2]]},"3144":{"position":[[40,2]]},"3612":{"position":[[25,2]]},"3926":{"position":[[313,2]]}}}],["例如",{"_index":850,"t":{"119":{"position":[[127,2]]},"239":{"position":[[259,2]]},"247":{"position":[[254,2],[267,2]]},"482":{"position":[[417,2],[531,2],[595,2],[652,2],[799,2],[982,2]]},"1440":{"position":[[296,2]]},"1566":{"position":[[454,2]]},"2326":{"position":[[165,2]]},"2418":{"position":[[711,2],[825,2],[897,2],[962,2],[1147,2],[1354,2]]},"3108":{"position":[[18,2]]},"3110":{"position":[[17,2],[199,2]]},"3352":{"position":[[113,2],[538,2]]},"3416":{"position":[[389,2]]}}}],["例子",{"_index":1820,"t":{"249":{"position":[[110,2]]},"340":{"position":[[123,2]]},"369":{"position":[[415,2]]},"441":{"position":[[40,2]]},"461":{"position":[[231,2]]},"506":{"position":[[219,2]]},"550":{"position":[[629,2]]},"570":{"position":[[2665,2]]},"855":{"position":[[68,2]]},"857":{"position":[[64,2]]},"1066":{"position":[[100,2]]},"1125":{"position":[[10,2]]},"1151":{"position":[[472,2]]},"1155":{"position":[[59,2],[67,2],[88,2]]},"1194":{"position":[[419,2]]},"1196":{"position":[[122,2]]},"1198":{"position":[[131,2]]},"1225":{"position":[[8,2]]},"1408":{"position":[[1006,2],[1130,2],[1319,2]]},"1592":{"position":[[92,2]]},"1635":{"position":[[195,2]]},"1707":{"position":[[4,2]]},"1781":{"position":[[399,2]]},"1801":{"position":[[73,2]]},"1847":{"position":[[5,2]]},"2573":{"position":[[196,2]]},"2684":{"position":[[292,2]]},"2686":{"position":[[41,2]]},"2848":{"position":[[894,2]]},"2897":{"position":[[247,2],[578,2]]},"3152":{"position":[[58,2]]},"3345":{"position":[[227,2]]},"3375":{"position":[[2,2]]},"3401":{"position":[[188,2]]},"3432":{"position":[[8,2],[68,2],[129,2],[917,2],[972,2],[1100,2],[1158,2],[1302,2],[1416,2],[1606,2],[1764,2],[2151,2],[2448,2],[3146,2],[3403,2],[3886,2],[4403,2],[4530,2]]},"3434":{"position":[[428,2],[507,2],[902,2],[988,2],[1164,2],[1318,2],[1644,2],[2054,2],[2775,2]]},"3702":{"position":[[591,2],[652,2]]},"3706":{"position":[[4,2]]},"3910":{"position":[[686,2]]},"3944":{"position":[[880,2]]},"3994":{"position":[[278,2]]},"3996":{"position":[[1668,2]]}}}],["供",{"_index":4914,"t":{"1516":{"position":[[242,1]]},"1518":{"position":[[27,1]]},"1724":{"position":[[62,1]]},"2703":{"position":[[56,1]]},"3154":{"position":[[219,1],[535,1]]},"3194":{"position":[[633,1]]},"3397":{"position":[[216,1]]}}}],["依托",{"_index":6367,"t":{"2490":{"position":[[96,2]]}}}],["依据",{"_index":1301,"t":{"184":{"position":[[36,2]]},"3405":{"position":[[17,2]]},"3826":{"position":[[77,2]]}}}],["依旧",{"_index":10108,"t":{"3986":{"position":[[778,2]]}}}],["依然",{"_index":3726,"t":{"899":{"position":[[1757,2]]},"2359":{"position":[[469,2]]},"2503":{"position":[[94,2],[134,2]]},"3096":{"position":[[146,2]]},"3242":{"position":[[104,2]]},"3910":{"position":[[101,2]]},"3934":{"position":[[2198,2]]},"3978":{"position":[[992,2]]}}}],["依赖",{"_index":562,"t":{"95":{"position":[[31,2],[37,2]]},"98":{"position":[[34,2],[55,2],[132,2],[141,2]]},"218":{"position":[[19,2]]},"237":{"position":[[10,2]]},"253":{"position":[[52,2]]},"314":{"position":[[161,2]]},"336":{"position":[[405,2]]},"340":{"position":[[1329,2],[1484,2],[1904,2]]},"344":{"position":[[109,2]]},"348":{"position":[[133,2]]},"353":{"position":[[56,2]]},"357":{"position":[[11,2],[20,2]]},"359":{"position":[[31,2],[51,2],[59,2]]},"361":{"position":[[19,2],[42,2]]},"363":{"position":[[2,2],[46,2],[88,2]]},"367":{"position":[[181,2]]},"369":{"position":[[286,2]]},"435":{"position":[[24,2],[103,2],[835,2],[845,2],[1177,2]]},"437":{"position":[[2,2],[9,2],[38,2]]},"447":{"position":[[78,2]]},"749":{"position":[[26,2]]},"911":{"position":[[184,2]]},"941":{"position":[[101,2],[205,2]]},"949":{"position":[[321,2]]},"988":{"position":[[36,2],[48,2]]},"1107":{"position":[[53,2]]},"1143":{"position":[[42,2]]},"1223":{"position":[[39,2],[273,2]]},"1309":{"position":[[27,2]]},"1383":{"position":[[17,2]]},"1385":{"position":[[2,2],[66,2],[105,2],[144,2]]},"1389":{"position":[[19,2],[33,2],[77,2],[213,2],[244,2],[290,2]]},"1392":{"position":[[9,2],[38,2],[52,2],[221,2]]},"1394":{"position":[[134,2],[155,2]]},"1396":{"position":[[30,2],[50,2]]},"1399":{"position":[[90,2]]},"1401":{"position":[[71,2]]},"1403":{"position":[[51,2],[100,2]]},"1405":{"position":[[15,2]]},"1408":{"position":[[1033,2],[1306,2]]},"1412":{"position":[[72,2],[1425,2]]},"1414":{"position":[[24,2]]},"1418":{"position":[[27,2],[322,2]]},"1420":{"position":[[8,2],[20,2],[467,2],[491,2],[541,2],[560,2],[673,2]]},"1440":{"position":[[19,2],[50,2]]},"1509":{"position":[[149,2]]},"1711":{"position":[[895,2],[947,2],[970,2]]},"1763":{"position":[[20,2],[82,2],[217,2]]},"1795":{"position":[[1932,2],[2007,2]]},"1811":{"position":[[57,2]]},"1903":{"position":[[210,2],[256,2]]},"1963":{"position":[[10,2]]},"2359":{"position":[[628,2]]},"2395":{"position":[[101,2]]},"2442":{"position":[[2010,2],[2060,2],[2083,2]]},"2551":{"position":[[26,2]]},"2615":{"position":[[76,2]]},"2646":{"position":[[57,2]]},"2692":{"position":[[31,2]]},"2713":{"position":[[68,2],[398,2]]},"2715":{"position":[[57,2],[64,2],[115,2]]},"2774":{"position":[[27,2]]},"2819":{"position":[[561,2]]},"2836":{"position":[[752,2]]},"2999":{"position":[[0,2],[19,2]]},"3001":{"position":[[28,2],[52,2],[102,2],[121,2],[234,2],[305,2],[331,2],[356,2],[380,2],[423,2]]},"3069":{"position":[[172,2]]},"3118":{"position":[[130,2]]},"3246":{"position":[[112,2]]},"3329":{"position":[[12,2]]},"3377":{"position":[[19,2]]},"3389":{"position":[[14,2]]},"3834":{"position":[[66,2]]},"3918":{"position":[[4169,2]]},"3922":{"position":[[2038,2],[2281,2],[2432,2]]},"3924":{"position":[[2659,2],[3213,2]]},"3930":{"position":[[508,2]]},"3932":{"position":[[1089,2]]},"3934":{"position":[[2531,2],[2995,2],[3038,2],[3060,2]]},"3936":{"position":[[962,2]]},"3940":{"position":[[337,2]]},"3942":{"position":[[113,2],[124,2],[405,2]]},"3944":{"position":[[153,2]]},"3948":{"position":[[411,2]]},"3954":{"position":[[259,2]]},"3958":{"position":[[87,2]]},"3960":{"position":[[169,2]]},"3968":{"position":[[808,2]]},"3978":{"position":[[306,2],[943,2]]},"3982":{"position":[[128,2],[481,2]]},"3988":{"position":[[135,2]]},"3990":{"position":[[244,2]]},"3992":{"position":[[2546,2]]},"3994":{"position":[[220,2],[1308,2]]},"3998":{"position":[[563,2]]},"4006":{"position":[[338,2]]}}}],["依赖于",{"_index":1655,"t":{"225":{"position":[[104,3]]},"255":{"position":[[70,3]]},"846":{"position":[[67,3]]},"1385":{"position":[[47,3]]},"1408":{"position":[[1276,3]]}}}],["侵入",{"_index":6070,"t":{"2264":{"position":[[42,2],[83,2]]}}}],["便",{"_index":1180,"t":{"166":{"position":[[12,1]]},"1474":{"position":[[146,1]]},"3242":{"position":[[190,1]]},"3910":{"position":[[187,1]]},"3934":{"position":[[2356,1]]}}}],["便于",{"_index":7429,"t":{"3110":{"position":[[90,2]]},"3414":{"position":[[123,2]]},"3618":{"position":[[2,2]]}}}],["便于管理",{"_index":8422,"t":{"3618":{"position":[[29,4]]}}}],["便捷",{"_index":5394,"t":{"1743":{"position":[[291,2]]},"2497":{"position":[[165,2]]},"3804":{"position":[[421,2]]},"3910":{"position":[[676,2]]},"3924":{"position":[[1956,2]]},"3932":{"position":[[328,2],[671,2]]},"3992":{"position":[[532,2]]}}}],["俄国",{"_index":6630,"t":{"2559":{"position":[[1945,2],[1954,2],[1958,2],[2542,2]]}}}],["俗套",{"_index":4433,"t":{"1485":{"position":[[316,2]]}}}],["俗称",{"_index":6103,"t":{"2309":{"position":[[5,2]]}}}],["保加利亚",{"_index":6479,"t":{"2559":{"position":[[485,4],[496,4],[502,4]]}}}],["保存",{"_index":275,"t":{"19":{"position":[[98,2]]},"532":{"position":[[205,2]]},"567":{"position":[[399,2]]},"570":{"position":[[524,2]]},"694":{"position":[[17,2],[35,2]]},"1141":{"position":[[77,2]]},"1474":{"position":[[316,2]]},"1483":{"position":[[762,2]]},"1741":{"position":[[167,2],[678,2],[976,2],[1438,2],[1829,2],[2274,2]]},"3118":{"position":[[167,2],[234,2],[261,2]]},"3960":{"position":[[650,2]]}}}],["保护",{"_index":923,"t":{"121":{"position":[[614,2]]},"186":{"position":[[99,2]]},"2646":{"position":[[119,2]]},"2782":{"position":[[46,2]]}}}],["保持",{"_index":1582,"t":{"216":{"position":[[96,2]]},"288":{"position":[[300,2]]},"677":{"position":[[17,2],[143,2]]},"685":{"position":[[325,2]]},"698":{"position":[[1064,2]]},"704":{"position":[[17,2],[143,2]]},"1509":{"position":[[154,2]]},"1641":{"position":[[45,2]]},"2245":{"position":[[58,2]]},"2740":{"position":[[43,2]]},"3595":{"position":[[276,2]]},"4000":{"position":[[693,2]]}}}],["保持一致",{"_index":8445,"t":{"3622":{"position":[[175,4],[182,4]]}}}],["保留",{"_index":2126,"t":{"323":{"position":[[86,2]]},"338":{"position":[[1254,2]]},"1625":{"position":[[42,2]]},"1641":{"position":[[123,2]]},"1645":{"position":[[13,2]]},"1649":{"position":[[23,2]]},"1661":{"position":[[247,2],[279,2]]},"1795":{"position":[[3000,2]]},"2843":{"position":[[29,2],[54,2]]},"3023":{"position":[[248,2],[280,2]]},"3063":{"position":[[851,2]]},"3706":{"position":[[843,2]]},"3966":{"position":[[470,2]]},"3986":{"position":[[718,2]]},"3990":{"position":[[390,2]]}}}],["保证",{"_index":1697,"t":{"233":{"position":[[335,2]]},"427":{"position":[[92,2]]},"445":{"position":[[853,2]]},"615":{"position":[[1095,2]]},"1026":{"position":[[174,2]]},"1050":{"position":[[40,2]]},"1075":{"position":[[8,2]]},"1865":{"position":[[466,2]]},"2326":{"position":[[130,2],[144,2]]},"2627":{"position":[[3,2],[37,2]]},"2862":{"position":[[387,2]]},"2912":{"position":[[167,2]]},"3078":{"position":[[92,2]]},"3104":{"position":[[68,2]]},"3284":{"position":[[9,2],[81,2]]},"3287":{"position":[[59,2]]},"3352":{"position":[[172,2]]},"3395":{"position":[[35,2]]},"3924":{"position":[[2580,2],[2778,2]]}}}],["保证数据",{"_index":1706,"t":{"233":{"position":[[671,4]]}}}],["信",{"_index":934,"t":{"121":{"position":[[684,1]]},"199":{"position":[[300,1]]},"1511":{"position":[[36,1],[43,1],[67,1],[601,1],[682,1],[749,1],[820,1],[969,1],[999,1],[1182,1],[1204,1],[1243,1],[1274,1],[1317,1],[1355,1],[1379,1],[1410,1],[1436,1],[1450,1],[1474,1],[1499,1],[1529,1],[1558,1],[1591,1],[1615,1],[1638,1],[1660,1],[1709,1],[1741,1],[1822,1],[1850,1],[1886,1],[1910,1],[1960,1],[1986,1],[2082,1],[2113,1],[2146,1],[2180,1],[2213,1],[2248,1],[2269,1],[2300,1],[2366,1],[2382,1],[2409,1],[2428,1],[2446,1],[2461,1],[2483,1],[2519,1],[2555,1],[2576,1],[2598,1],[2622,1],[2651,1],[2673,1],[2698,1],[2720,1],[2809,1],[2837,1],[2860,1],[2878,1],[2902,1],[2924,1],[2948,1],[2971,1],[2992,1],[3014,1],[3039,1],[3060,1],[3081,1],[3109,1],[3143,1],[3171,1],[3201,1],[3226,1],[3260,1],[3287,1],[3315,1],[3341,1],[3372,1],[3401,1],[3435,1],[3471,1],[3501,1],[3535,1],[3603,1],[3665,1],[3697,1],[3740,1],[3771,1],[3798,1],[3841,1],[3878,1],[3911,1],[3940,1],[3981,1],[4018,1],[4051,1],[4121,1],[4145,1],[4166,1],[4193,1],[4235,1]]},"3140":{"position":[[80,1]]},"3522":{"position":[[875,1],[886,1]]},"3950":{"position":[[703,1]]},"3992":{"position":[[227,1]]}}}],["信任",{"_index":1079,"t":{"135":{"position":[[28,2]]},"3926":{"position":[[12,2],[612,2]]}}}],["信号",{"_index":4555,"t":{"1509":{"position":[[314,2]]}}}],["信号量",{"_index":6098,"t":{"2305":{"position":[[35,3]]}}}],["信息",{"_index":718,"t":{"112":{"position":[[546,2],[1478,2]]},"114":{"position":[[230,2],[648,2],[1222,2]]},"121":{"position":[[494,2],[577,2]]},"150":{"position":[[15,2],[106,2]]},"152":{"position":[[58,2],[109,2],[396,2],[656,2]]},"382":{"position":[[28,2]]},"386":{"position":[[80,2],[91,2]]},"417":{"position":[[37,2]]},"431":{"position":[[25,2],[30,2],[58,2]]},"441":{"position":[[95,2]]},"459":{"position":[[12,2]]},"461":{"position":[[25,2]]},"504":{"position":[[137,2]]},"526":{"position":[[278,2]]},"570":{"position":[[781,2]]},"610":{"position":[[10,2]]},"1141":{"position":[[99,2]]},"1420":{"position":[[545,2],[564,2],[650,2]]},"1539":{"position":[[43,2]]},"1543":{"position":[[23,2]]},"1551":{"position":[[162,2],[196,2]]},"1557":{"position":[[40,2]]},"1561":{"position":[[27,2]]},"1589":{"position":[[245,2]]},"1657":{"position":[[26,2]]},"1659":{"position":[[25,2]]},"1672":{"position":[[57,2]]},"1741":{"position":[[351,2],[1232,2]]},"1834":{"position":[[59,2]]},"1837":{"position":[[41,2]]},"1839":{"position":[[81,2]]},"1853":{"position":[[54,2]]},"1855":{"position":[[7,2],[501,2]]},"1869":{"position":[[39,2]]},"1913":{"position":[[464,2]]},"1925":{"position":[[394,2],[1340,2]]},"1933":{"position":[[339,2],[553,2]]},"1941":{"position":[[315,2],[429,2]]},"1951":{"position":[[370,2],[415,2],[474,2]]},"2033":{"position":[[43,2]]},"2132":{"position":[[7,2]]},"2245":{"position":[[16,2]]},"2398":{"position":[[111,2]]},"2472":{"position":[[44,2]]},"2591":{"position":[[36,2]]},"2703":{"position":[[48,2]]},"2705":{"position":[[25,2],[30,2],[58,2]]},"2717":{"position":[[360,2]]},"2782":{"position":[[19,2]]},"2815":{"position":[[68,2]]},"2965":{"position":[[33,2]]},"2971":{"position":[[273,2]]},"2973":{"position":[[60,2],[116,2]]},"2981":{"position":[[360,2]]},"3001":{"position":[[106,2],[125,2],[211,2]]},"3063":{"position":[[481,2]]},"3082":{"position":[[39,2]]},"3094":{"position":[[124,2],[147,2]]},"3136":{"position":[[67,2],[123,2]]},"3254":{"position":[[270,2]]},"3275":{"position":[[190,2]]},"3412":{"position":[[40,2]]},"3414":{"position":[[99,2]]},"3416":{"position":[[12,2],[191,2]]},"3446":{"position":[[705,2],[1123,2],[1697,2]]},"3448":{"position":[[890,2]]},"3466":{"position":[[1343,2]]},"3498":{"position":[[60,2]]},"3543":{"position":[[60,2]]},"3573":{"position":[[39,2]]},"3624":{"position":[[53,2],[73,2]]},"3626":{"position":[[306,2]]},"3642":{"position":[[36,2]]},"3644":{"position":[[25,2]]},"3654":{"position":[[59,2]]},"3660":{"position":[[38,2]]},"3686":{"position":[[1030,2]]},"3706":{"position":[[473,2]]},"3729":{"position":[[86,2]]},"3770":{"position":[[15,2],[36,2],[1241,2],[2694,2],[3084,2],[3498,2],[4551,2]]},"3777":{"position":[[23,2],[215,2],[241,2],[352,2]]},"3779":{"position":[[2,2],[479,2]]},"3781":{"position":[[48,2]]},"3793":{"position":[[58,2],[130,2]]},"3798":{"position":[[272,2]]},"3808":{"position":[[2982,2]]},"3815":{"position":[[22,2]]},"3819":{"position":[[61,2],[127,2]]},"3830":{"position":[[256,2]]},"3912":{"position":[[821,2],[1073,2],[1091,2]]},"3916":{"position":[[1498,2]]},"3920":{"position":[[369,2],[758,2]]},"3922":{"position":[[2329,2]]},"3924":{"position":[[250,2]]},"3928":{"position":[[1280,2],[1685,2],[2259,2]]},"3966":{"position":[[1388,2]]},"3980":{"position":[[507,2]]},"3984":{"position":[[691,2],[841,2]]},"3990":{"position":[[61,2],[765,2]]},"3992":{"position":[[530,2],[1578,2]]}}}],["信息安全",{"_index":6149,"t":{"2326":{"position":[[192,4]]}}}],["信用卡",{"_index":3077,"t":{"587":{"position":[[781,3]]}}}],["修复",{"_index":7955,"t":{"3352":{"position":[[255,2]]},"3702":{"position":[[1462,2]]},"3908":{"position":[[40,2],[94,2]]},"3910":{"position":[[2278,2],[2281,2],[2381,2],[2448,2]]},"3912":{"position":[[1872,2],[1875,2],[1946,2],[2004,2],[2077,2],[2143,2],[2212,2],[2292,2],[2359,2]]},"3914":{"position":[[2374,2],[2377,2],[2433,2],[2480,2],[2517,2],[2574,2],[2577,2],[2645,2],[2697,2],[2757,2],[2813,2],[2897,2],[2954,2],[3018,2],[3078,2],[3123,2]]},"3916":{"position":[[1916,2],[1919,2],[1973,2],[2018,2],[2071,2],[2119,2],[2197,2],[2263,2],[2340,2],[2382,2],[2428,2]]},"3918":{"position":[[3206,2],[3209,2],[3242,2],[3285,2],[3331,2],[3356,2],[3438,2],[3474,2],[3505,2],[3529,2],[3598,2],[3671,2],[3711,2],[3768,2],[3815,2],[3862,2]]},"3920":{"position":[[1614,2],[1617,2],[1658,2],[1710,2]]},"3922":{"position":[[1291,2],[1294,2],[1338,2],[1377,2],[1414,2],[1451,2],[1540,2],[1597,2],[1644,2],[1680,2],[1715,2],[1750,2],[1797,2],[1849,2],[1893,2],[1929,2],[2001,2],[2053,2],[2078,2],[2128,2],[2166,2],[2204,2]]},"3924":{"position":[[1110,2],[1113,2],[1168,2],[1209,2],[1252,2],[1301,2],[1341,2],[1393,2],[1432,2],[1487,2],[1513,2],[1597,2],[1663,2],[1722,2],[1770,2],[1821,2],[1862,2]]},"3928":{"position":[[648,2],[651,2],[654,2]]},"3930":{"position":[[769,2],[772,2],[825,2],[866,2],[918,2],[970,2],[1027,2],[1059,2],[1110,2],[1152,2],[1207,2],[1274,2],[1338,2]]},"3932":{"position":[[1072,2],[1075,2],[1129,2],[1163,2],[1227,2],[1268,2],[1305,2],[1338,2],[1363,2]]},"3934":{"position":[[560,2],[563,2],[566,2],[631,2],[682,2],[745,2],[789,2],[830,2],[867,2],[934,2]]},"3936":{"position":[[437,2],[474,2],[477,2],[548,2],[579,2],[633,2],[665,2]]},"3938":{"position":[[428,2],[431,2],[466,2],[527,2],[565,2],[617,2]]},"3940":{"position":[[354,2],[357,2],[404,2],[438,2],[494,2]]},"3942":{"position":[[167,2],[170,2],[246,2],[311,2],[355,2],[402,2]]},"3944":{"position":[[181,2],[184,2],[235,2],[292,2],[310,2],[343,2],[376,2]]},"3946":{"position":[[103,2],[106,2],[159,2],[237,2],[281,2],[333,2],[367,2]]},"3948":{"position":[[136,2],[139,2],[192,2],[262,2],[283,2],[342,2],[379,2],[408,2],[470,2]]},"3950":{"position":[[299,2],[302,2],[379,2],[426,2],[464,2],[508,2],[546,2],[591,2],[634,2],[670,2],[723,2],[756,2],[803,2],[830,2],[866,2],[902,2]]},"3952":{"position":[[445,2],[448,2],[500,2],[528,2],[570,2],[603,2],[656,2],[698,2]]},"3954":{"position":[[524,2],[527,2],[553,2],[586,2],[609,2],[638,2],[676,2],[679,2],[703,2]]},"3956":{"position":[[3083,2],[3086,2]]},"3958":{"position":[[73,2],[76,2],[112,2],[192,2],[217,2],[220,2],[260,2],[305,2]]},"3960":{"position":[[408,2],[411,2],[456,2],[500,2],[557,2]]},"3962":{"position":[[1006,2],[1009,2],[1051,2],[1094,2],[1097,2],[1128,2],[1170,2],[1214,2],[1254,2],[1311,2],[1344,2],[1393,2],[1451,2],[1487,2],[1528,2],[1531,2]]},"3964":{"position":[[449,2],[452,2],[501,2],[504,2],[550,2]]},"3966":{"position":[[638,2],[641,2],[700,2],[745,2],[826,2],[859,2],[898,2],[942,2],[989,2],[1262,2]]},"3968":{"position":[[265,2],[268,2]]},"3970":{"position":[[192,2],[195,2],[245,2],[273,2]]},"3972":{"position":[[292,2],[295,2],[343,2],[404,2]]},"3974":{"position":[[243,2],[246,2],[299,2],[335,2],[386,2],[472,2]]},"3976":{"position":[[358,2],[361,2],[396,2],[421,2]]},"3978":{"position":[[692,2],[695,2],[738,2],[784,2],[834,2],[904,2],[940,2],[971,2],[1005,2],[1031,2],[1104,2]]},"3980":{"position":[[214,2],[217,2],[274,2],[317,2],[353,2],[381,2],[416,2]]},"3982":{"position":[[213,2],[216,2],[264,2],[296,2],[301,2],[329,2],[386,2],[443,2],[478,2]]},"3984":{"position":[[379,2],[382,2],[410,2],[480,2],[527,2],[568,2],[593,2]]},"3986":{"position":[[396,2],[399,2],[430,2],[462,2],[495,2],[547,2],[577,2],[614,2],[654,2],[701,2],[704,2],[751,2],[795,2]]},"3988":{"position":[[255,2],[258,2],[309,2],[346,2],[393,2]]},"3990":{"position":[[403,2],[406,2],[463,2]]},"3992":{"position":[[1445,2],[1448,2],[1481,2],[1513,2],[1546,2],[1593,2],[1662,2],[1710,2],[1737,2],[1764,2],[1794,2],[1845,2],[1892,2],[1934,2],[1963,2],[1988,2],[2028,2],[2053,2],[2097,2],[2127,2],[2170,2],[2197,2],[2230,2],[2261,2],[2288,2],[2332,2],[2362,2],[2404,2],[2447,2]]},"3994":{"position":[[798,2],[801,2],[838,2],[914,2],[975,2],[1007,2],[1045,2],[1076,2],[1107,2],[1143,2],[1178,2],[1223,2],[1265,2],[1295,2],[1325,2],[1362,2],[1404,2],[1441,2],[1484,2],[1507,2]]},"3996":{"position":[[490,2],[493,2],[530,2],[559,2],[600,2],[659,2],[718,2],[771,2],[804,2],[851,2],[854,2],[928,2],[963,2],[986,2],[1038,2],[1073,2],[1115,2],[1154,2],[1195,2],[1244,2]]},"3998":{"position":[[536,2],[539,2],[560,2],[582,2],[605,2],[633,2],[655,2],[682,2],[713,2]]},"4000":{"position":[[784,2],[787,2],[814,2],[846,2],[872,2],[908,2],[951,2],[995,2],[1026,2],[1055,2],[1088,2],[1117,2],[1147,2]]},"4002":{"position":[[245,2],[248,2],[290,2],[332,2]]},"4004":{"position":[[296,2],[299,2],[345,2],[388,2],[418,2]]},"4006":{"position":[[201,2],[204,2],[227,2],[266,2],[295,2],[314,2],[331,2],[353,2],[384,2],[441,2],[470,2],[493,2],[518,2],[576,2]]}}}],["修改",{"_index":403,"t":{"48":{"position":[[16,2]]},"72":{"position":[[16,2]]},"182":{"position":[[240,2]]},"308":{"position":[[410,2]]},"310":{"position":[[270,2]]},"312":{"position":[[18,2]]},"314":{"position":[[64,2]]},"316":{"position":[[66,2]]},"323":{"position":[[157,2]]},"399":{"position":[[580,2]]},"401":{"position":[[249,2]]},"427":{"position":[[177,2]]},"514":{"position":[[639,2]]},"617":{"position":[[1683,2]]},"734":{"position":[[21,2]]},"924":{"position":[[31,2],[44,2]]},"1286":{"position":[[41,2]]},"1389":{"position":[[45,2]]},"1420":{"position":[[27,2]]},"1426":{"position":[[41,2]]},"1430":{"position":[[41,2],[48,2],[64,2]]},"1483":{"position":[[1044,2]]},"1605":{"position":[[211,2]]},"1803":{"position":[[5478,2],[5506,2]]},"2497":{"position":[[226,2]]},"2555":{"position":[[109,2]]},"2581":{"position":[[1084,2]]},"2829":{"position":[[53,2]]},"2868":{"position":[[0,2]]},"2875":{"position":[[539,2]]},"2891":{"position":[[72,2]]},"3075":{"position":[[39,2]]},"3118":{"position":[[183,2]]},"3124":{"position":[[8,2]]},"3126":{"position":[[330,2]]},"3323":{"position":[[447,2]]},"3331":{"position":[[164,2]]},"3339":{"position":[[305,2]]},"3442":{"position":[[149,2],[200,2]]},"3660":{"position":[[56,2]]},"3779":{"position":[[117,2],[142,2]]},"3802":{"position":[[116,2],[139,2]]},"3817":{"position":[[123,2],[148,2]]},"3946":{"position":[[185,2]]},"3948":{"position":[[210,2]]},"3962":{"position":[[143,2]]},"3968":{"position":[[860,2]]},"3992":{"position":[[3185,2],[3693,2]]}}}],["修正",{"_index":2513,"t":{"423":{"position":[[241,2]]},"3950":{"position":[[402,2]]}}}],["修订",{"_index":9040,"t":{"3908":{"position":[[71,2],[102,2],[141,2],[175,2],[209,2],[245,2]]}}}],["修车",{"_index":6932,"t":{"2768":{"position":[[484,2]]}}}],["修饰",{"_index":5154,"t":{"1627":{"position":[[58,2]]},"1633":{"position":[[268,2]]},"4000":{"position":[[839,2]]},"4004":{"position":[[501,2]]}}}],["倍",{"_index":9122,"t":{"3914":{"position":[[1498,1]]}}}],["倍数",{"_index":5265,"t":{"1687":{"position":[[122,2]]},"1689":{"position":[[734,2]]}}}],["倍速",{"_index":3954,"t":{"1103":{"position":[[155,2]]}}}],["借助",{"_index":2207,"t":{"340":{"position":[[21,2]]}}}],["值",{"_index":741,"t":{"112":{"position":[[1092,1]]},"127":{"position":[[1240,1],[1710,1],[1728,1],[1745,1],[1760,1]]},"282":{"position":[[223,1]]},"453":{"position":[[282,1],[339,1]]},"482":{"position":[[338,1],[393,1],[650,1]]},"484":{"position":[[81,1]]},"565":{"position":[[171,1],[177,1]]},"570":{"position":[[1364,1],[1420,1],[1556,1],[1879,1],[1906,1],[2224,1],[2251,1],[2515,1],[2542,1]]},"587":{"position":[[805,1],[887,1]]},"597":{"position":[[457,1]]},"606":{"position":[[245,1]]},"612":{"position":[[110,1]]},"617":{"position":[[2761,1]]},"653":{"position":[[47,1],[164,1]]},"749":{"position":[[571,1],[610,1]]},"793":{"position":[[58,1],[148,1]]},"807":{"position":[[33,1],[36,1]]},"826":{"position":[[28,1]]},"960":{"position":[[293,1],[363,1]]},"986":{"position":[[64,1]]},"1133":{"position":[[94,1]]},"1145":{"position":[[508,1]]},"1234":{"position":[[795,1]]},"1267":{"position":[[199,1]]},"1275":{"position":[[244,1]]},"1353":{"position":[[47,1]]},"1416":{"position":[[108,1],[203,1]]},"1420":{"position":[[728,1]]},"1422":{"position":[[77,1]]},"1520":{"position":[[207,1],[278,1]]},"1611":{"position":[[910,1]]},"1629":{"position":[[48,1],[75,1],[108,1],[129,1],[166,1]]},"1685":{"position":[[339,1],[482,1]]},"1753":{"position":[[168,1]]},"1755":{"position":[[751,1],[956,1],[1191,1]]},"1865":{"position":[[470,1]]},"1905":{"position":[[152,1]]},"1917":{"position":[[29,1]]},"1919":{"position":[[559,1]]},"1925":{"position":[[954,1]]},"1961":{"position":[[238,1]]},"2023":{"position":[[110,1]]},"2047":{"position":[[63,1]]},"2136":{"position":[[85,1]]},"2418":{"position":[[590,1],[671,1],[960,1]]},"2684":{"position":[[14,1]]},"2721":{"position":[[111,1]]},"2723":{"position":[[33,1]]},"2727":{"position":[[21,1]]},"2729":{"position":[[562,1],[603,1]]},"2843":{"position":[[33,1]]},"2852":{"position":[[154,1]]},"2937":{"position":[[66,1]]},"3001":{"position":[[289,1]]},"3039":{"position":[[348,1]]},"3041":{"position":[[451,1]]},"3055":{"position":[[95,1]]},"3057":{"position":[[68,1]]},"3375":{"position":[[35,1]]},"3405":{"position":[[42,1],[49,1]]},"3416":{"position":[[49,1],[228,1]]},"3432":{"position":[[602,1],[732,1],[739,1]]},"3452":{"position":[[815,1]]},"3496":{"position":[[245,1],[384,1]]},"3508":{"position":[[80,1]]},"3563":{"position":[[729,1]]},"3779":{"position":[[1624,1],[1720,1]]},"3783":{"position":[[1784,1]]},"3800":{"position":[[68,1]]},"3802":{"position":[[2385,1],[2491,1]]},"3912":{"position":[[2499,1]]},"3916":{"position":[[3811,1]]},"3930":{"position":[[454,1],[755,1],[890,1],[908,1]]},"3950":{"position":[[491,1],[769,1]]},"3952":{"position":[[509,1]]},"3962":{"position":[[1989,1]]},"3974":{"position":[[567,1]]},"3978":{"position":[[1196,1]]},"3996":{"position":[[1560,1]]}}}],["假",{"_index":3580,"t":{"791":{"position":[[67,1]]},"793":{"position":[[54,1],[144,1]]},"3962":{"position":[[514,1]]},"3986":{"position":[[1136,1]]},"3994":{"position":[[387,1]]}}}],["假如",{"_index":2678,"t":{"482":{"position":[[340,2]]},"2418":{"position":[[592,2]]},"3430":{"position":[[1471,2]]}}}],["假死",{"_index":7367,"t":{"3078":{"position":[[117,2]]},"3856":{"position":[[47,2]]}}}],["假设",{"_index":2522,"t":{"431":{"position":[[0,2]]},"441":{"position":[[86,2]]},"1424":{"position":[[170,2]]},"2705":{"position":[[0,2]]},"3108":{"position":[[21,2]]}}}],["偏好",{"_index":8066,"t":{"3414":{"position":[[299,2]]}}}],["做",{"_index":468,"t":{"85":{"position":[[56,1]]},"182":{"position":[[17,1],[59,1]]},"340":{"position":[[342,1],[347,1],[1878,1]]},"353":{"position":[[44,1]]},"373":{"position":[[132,1],[150,1]]},"565":{"position":[[160,1]]},"887":{"position":[[45,1]]},"933":{"position":[[391,1],[399,1]]},"1430":{"position":[[83,1]]},"1432":{"position":[[109,1]]},"1511":{"position":[[4206,1]]},"1589":{"position":[[212,1]]},"1663":{"position":[[531,1]]},"2326":{"position":[[224,1]]},"2635":{"position":[[57,1]]},"2646":{"position":[[108,1]]},"2662":{"position":[[57,1]]},"2684":{"position":[[31,1]]},"2770":{"position":[[37,1],[236,1],[283,1]]},"2951":{"position":[[619,1]]},"3282":{"position":[[128,1],[134,1]]},"3389":{"position":[[377,1]]},"3391":{"position":[[269,1]]},"3393":{"position":[[410,1]]},"3595":{"position":[[266,1]]},"3680":{"position":[[416,1],[419,1]]},"3688":{"position":[[76,1]]},"3779":{"position":[[106,1]]},"3802":{"position":[[105,1]]},"3817":{"position":[[112,1]]},"3844":{"position":[[1190,1],[1335,1]]},"3966":{"position":[[866,1]]}}}],["做事",{"_index":7023,"t":{"2770":{"position":[[321,2]]}}}],["做出",{"_index":674,"t":{"106":{"position":[[44,2]]},"429":{"position":[[39,2]]}}}],["做到",{"_index":460,"t":{"83":{"position":[[20,2]]},"164":{"position":[[20,2]]},"1379":{"position":[[45,2]]},"1545":{"position":[[19,2]]},"3122":{"position":[[27,2]]},"3434":{"position":[[31,2]]},"3626":{"position":[[338,2],[454,2]]}}}],["做好",{"_index":7066,"t":{"2796":{"position":[[327,2]]}}}],["做成",{"_index":4480,"t":{"1488":{"position":[[1659,2]]}}}],["做法",{"_index":2501,"t":{"419":{"position":[[376,2]]},"3092":{"position":[[27,2],[65,2]]},"3916":{"position":[[1782,2]]}}}],["停止",{"_index":5603,"t":{"1803":{"position":[[1777,2]]},"1969":{"position":[[29,2]]},"2472":{"position":[[401,2]]},"2486":{"position":[[823,2],[887,2]]},"2488":{"position":[[68,2]]},"2764":{"position":[[60,2]]},"2805":{"position":[[88,2]]},"2817":{"position":[[960,2]]},"2836":{"position":[[1084,2]]},"2899":{"position":[[543,2]]},"3082":{"position":[[273,2]]},"3922":{"position":[[1325,2],[2058,2]]}}}],["健康",{"_index":4540,"t":{"1509":{"position":[[156,2]]}}}],["偶尔",{"_index":4561,"t":{"1511":{"position":[[52,2]]}}}],["偶然性",{"_index":9187,"t":{"3916":{"position":[[2445,3]]},"3978":{"position":[[760,3]]}}}],["偷懒",{"_index":4168,"t":{"1379":{"position":[[5,2]]}}}],["催",{"_index":9038,"t":{"3898":{"position":[[29,1]]},"3900":{"position":[[29,1]]},"3902":{"position":[[29,1]]},"3904":{"position":[[29,1]]}}}],["像",{"_index":1604,"t":{"218":{"position":[[87,1]]},"267":{"position":[[37,1]]},"286":{"position":[[14,1]]},"818":{"position":[[36,1]]},"1511":{"position":[[51,1]]},"2599":{"position":[[112,1]]},"2615":{"position":[[21,1]]},"3150":{"position":[[52,1],[74,1]]},"3352":{"position":[[311,1]]}}}],["像是",{"_index":9379,"t":{"3926":{"position":[[126,2],[271,2]]}}}],["僧",{"_index":1164,"t":{"158":{"position":[[2,1]]},"172":{"position":[[1,1]]},"294":{"position":[[64,1]]},"399":{"position":[[526,1]]},"645":{"position":[[32,1]]},"954":{"position":[[389,1]]},"960":{"position":[[640,1],[730,1],[830,1],[993,1],[1048,1],[1334,1],[1389,1],[1616,1]]},"1145":{"position":[[409,1]]},"1147":{"position":[[300,1]]},"1151":{"position":[[378,1]]},"1170":{"position":[[411,1],[940,1]]},"1183":{"position":[[265,1],[639,1]]},"1302":{"position":[[222,1]]},"1511":{"position":[[463,1]]},"1551":{"position":[[582,1],[681,1]]},"1677":{"position":[[55,1],[105,1],[206,1],[292,1]]},"1679":{"position":[[56,1]]},"1681":{"position":[[112,1]]},"1685":{"position":[[86,1],[139,1]]},"1687":{"position":[[167,1]]},"1855":{"position":[[342,1]]},"1865":{"position":[[235,1]]},"1869":{"position":[[196,1]]},"2261":{"position":[[85,1],[156,1],[287,1],[346,1]]},"2581":{"position":[[1381,1]]},"3017":{"position":[[100,1]]},"3065":{"position":[[206,1]]},"3426":{"position":[[73,1]]},"3464":{"position":[[133,1],[204,1],[335,1],[394,1]]},"3466":{"position":[[1434,1],[1706,1]]},"3642":{"position":[[280,1]]},"3702":{"position":[[2228,1]]},"3706":{"position":[[1954,1]]},"3926":{"position":[[338,1]]},"3934":{"position":[[2570,1]]},"3936":{"position":[[1955,1],[2020,1],[2146,1],[2205,1]]}}}],["允许",{"_index":847,"t":{"119":{"position":[[97,2]]},"121":{"position":[[549,2]]},"137":{"position":[[13,2],[149,2]]},"141":{"position":[[29,2]]},"233":{"position":[[378,2]]},"237":{"position":[[1296,2]]},"247":{"position":[[51,2]]},"408":{"position":[[77,2],[113,2],[120,2]]},"413":{"position":[[17,2]]},"415":{"position":[[82,2],[131,2],[249,2],[261,2],[297,2]]},"423":{"position":[[24,2],[34,2],[58,2],[107,2]]},"482":{"position":[[7,2]]},"608":{"position":[[845,2],[887,2]]},"1004":{"position":[[37,2],[104,2]]},"1006":{"position":[[37,2],[104,2]]},"1008":{"position":[[36,2],[102,2]]},"1010":{"position":[[119,2],[185,2]]},"1012":{"position":[[27,2],[86,2]]},"1014":{"position":[[31,2],[95,2]]},"1566":{"position":[[639,2]]},"1697":{"position":[[33,2]]},"1793":{"position":[[33,2]]},"1901":{"position":[[602,2]]},"2418":{"position":[[232,2]]},"2919":{"position":[[158,2]]},"2991":{"position":[[88,2],[137,2],[255,2],[267,2],[303,2]]},"3136":{"position":[[49,2]]},"3150":{"position":[[26,2]]},"3397":{"position":[[1106,2]]},"3626":{"position":[[589,2]]},"3834":{"position":[[60,2]]},"3930":{"position":[[1385,2]]},"3992":{"position":[[743,2]]}}}],["允许值",{"_index":2664,"t":{"482":{"position":[[3,3]]},"2418":{"position":[[228,3]]}}}],["元",{"_index":2306,"t":{"365":{"position":[[49,1]]},"1511":{"position":[[207,1]]},"1611":{"position":[[917,1]]},"1857":{"position":[[48,1]]},"3744":{"position":[[458,1]]}}}],["元素",{"_index":5165,"t":{"1631":{"position":[[639,2],[645,2],[657,2],[671,2]]},"2627":{"position":[[83,2]]}}}],["元组",{"_index":6269,"t":{"2385":{"position":[[76,2]]},"3994":{"position":[[987,2]]}}}],["兄弟",{"_index":4838,"t":{"1511":{"position":[[3211,2]]}}}],["充当",{"_index":5517,"t":{"1797":{"position":[[42,2]]}}}],["充斥",{"_index":2191,"t":{"338":{"position":[[1163,2]]}}}],["充满",{"_index":9374,"t":{"3926":{"position":[[109,2]]}}}],["先",{"_index":396,"t":{"46":{"position":[[7,1]]},"60":{"position":[[7,1]]},"70":{"position":[[7,1]]},"121":{"position":[[265,1]]},"123":{"position":[[16,1]]},"196":{"position":[[26,1]]},"214":{"position":[[36,1]]},"288":{"position":[[322,1]]},"340":{"position":[[119,1]]},"455":{"position":[[867,1]]},"681":{"position":[[7,1]]},"732":{"position":[[287,1],[294,1]]},"862":{"position":[[370,1]]},"941":{"position":[[17,1]]},"1307":{"position":[[31,1]]},"1374":{"position":[[31,1]]},"1420":{"position":[[949,1]]},"1505":{"position":[[10,1]]},"1511":{"position":[[4074,1]]},"1539":{"position":[[2,1]]},"1903":{"position":[[516,1]]},"1905":{"position":[[103,1],[106,1],[156,1]]},"1909":{"position":[[526,1]]},"1961":{"position":[[47,1],[50,1],[66,1],[69,1]]},"1969":{"position":[[203,1]]},"1971":{"position":[[17,1]]},"1983":{"position":[[115,1]]},"1985":{"position":[[17,1]]},"2006":{"position":[[115,1]]},"2008":{"position":[[17,1]]},"2519":{"position":[[13,1]]},"2583":{"position":[[14,1],[18,1]]},"2646":{"position":[[93,1]]},"2678":{"position":[[26,1]]},"3120":{"position":[[111,1]]},"3138":{"position":[[164,1]]},"3144":{"position":[[22,1]]},"3676":{"position":[[153,1]]}}}],["先于",{"_index":2285,"t":{"359":{"position":[[65,2]]}}}],["先后",{"_index":1577,"t":{"214":{"position":[[23,2]]}}}],["先生",{"_index":3417,"t":{"719":{"position":[[31,2]]},"1511":{"position":[[4162,2]]}}}],["先知",{"_index":503,"t":{"85":{"position":[[206,2],[255,2]]},"3702":{"position":[[101,2]]}}}],["先进",{"_index":7213,"t":{"2910":{"position":[[445,2]]}}}],["光",{"_index":7025,"t":{"2770":{"position":[[330,1]]},"3922":{"position":[[1439,1]]}}}],["克罗",{"_index":6496,"t":{"2559":{"position":[[641,2],[653,2],[660,2]]}}}],["克隆",{"_index":8803,"t":{"3779":{"position":[[1438,2],[1443,2],[1449,2],[1539,2]]},"3802":{"position":[[2072,2],[2077,2],[2083,2],[2227,2]]},"3817":{"position":[[2676,2],[2681,2],[2686,2]]}}}],["免",{"_index":1081,"t":{"135":{"position":[[38,1]]}}}],["免不了",{"_index":8251,"t":{"3476":{"position":[[17,3]]}}}],["免受",{"_index":1316,"t":{"186":{"position":[[102,2]]}}}],["党",{"_index":6900,"t":{"2768":{"position":[[25,1],[31,1]]}}}],["入口",{"_index":2214,"t":{"340":{"position":[[111,2],[152,2],[164,2],[421,2],[450,2],[1868,2]]},"359":{"position":[[143,2]]},"367":{"position":[[137,2]]},"401":{"position":[[78,2]]},"3131":{"position":[[317,2]]}}}],["入门",{"_index":565,"t":{"95":{"position":[[48,2]]},"98":{"position":[[13,2]]},"251":{"position":[[159,2]]},"1307":{"position":[[0,2]]},"1969":{"position":[[159,2]]},"1983":{"position":[[71,2]]},"2006":{"position":[[71,2]]},"3213":{"position":[[32,2],[62,2]]},"3345":{"position":[[244,2]]},"3702":{"position":[[659,2]]},"3910":{"position":[[670,2],[2580,2]]},"3914":{"position":[[3580,2]]},"3918":{"position":[[4215,2]]},"3920":{"position":[[2024,2]]},"3924":{"position":[[1998,2]]},"3934":{"position":[[32,2],[497,2],[1204,2]]},"3944":{"position":[[897,2]]},"3946":{"position":[[446,2]]},"3990":{"position":[[654,2]]},"3994":{"position":[[1607,2]]},"3998":{"position":[[770,2]]},"4000":{"position":[[1215,2]]},"4002":{"position":[[384,2]]},"4004":{"position":[[592,2]]}}}],["全",{"_index":7,"t":{"3":{"position":[[25,1]]},"95":{"position":[[149,1]]},"399":{"position":[[635,1],[644,1]]},"685":{"position":[[34,1]]},"1488":{"position":[[518,1],[577,1]]},"1495":{"position":[[520,1]]},"1511":{"position":[[388,1]]},"1631":{"position":[[650,1],[662,1]]},"3282":{"position":[[133,1]]},"3446":{"position":[[370,1]]},"3448":{"position":[[674,1],[1098,1]]},"3924":{"position":[[2047,1],[2147,1]]},"3928":{"position":[[186,1]]},"3930":{"position":[[1140,1]]},"3966":{"position":[[1430,1]]}}}],["全家",{"_index":4783,"t":{"1511":{"position":[[2506,2]]}}}],["全局",{"_index":113,"t":{"9":{"position":[[32,2]]},"11":{"position":[[59,2]]},"21":{"position":[[51,2]]},"23":{"position":[[33,2]]},"127":{"position":[[169,2]]},"150":{"position":[[133,2]]},"453":{"position":[[354,2]]},"504":{"position":[[202,2]]},"591":{"position":[[38,2]]},"602":{"position":[[172,2]]},"615":{"position":[[1099,2]]},"619":{"position":[[21,2]]},"621":{"position":[[43,2],[54,2]]},"623":{"position":[[37,2]]},"653":{"position":[[180,2]]},"841":{"position":[[101,2]]},"846":{"position":[[0,2],[62,2],[153,2]]},"1279":{"position":[[940,2]]},"1353":{"position":[[147,2]]},"1426":{"position":[[13,2],[277,2],[357,2]]},"1545":{"position":[[59,2],[75,2]]},"1547":{"position":[[0,2],[90,2],[270,2],[279,2],[376,2],[428,2]]},"1549":{"position":[[302,2]]},"1627":{"position":[[243,2]]},"1661":{"position":[[24,2]]},"1821":{"position":[[189,2]]},"1823":{"position":[[49,2]]},"1834":{"position":[[47,2]]},"1875":{"position":[[212,2],[249,2]]},"1898":{"position":[[60,2]]},"1901":{"position":[[315,2]]},"1903":{"position":[[390,2]]},"1907":{"position":[[37,2],[142,2],[469,2],[567,2]]},"1913":{"position":[[1233,2]]},"1919":{"position":[[696,2]]},"1925":{"position":[[1425,2]]},"1927":{"position":[[742,2]]},"1933":{"position":[[862,2]]},"1935":{"position":[[357,2]]},"1941":{"position":[[1113,2]]},"1943":{"position":[[307,2]]},"1951":{"position":[[754,2]]},"2231":{"position":[[33,2]]},"2292":{"position":[[32,2]]},"2294":{"position":[[59,2]]},"2326":{"position":[[0,2]]},"2345":{"position":[[693,2]]},"2352":{"position":[[201,2],[212,2]]},"2357":{"position":[[1351,2]]},"2561":{"position":[[60,2]]},"2639":{"position":[[133,2]]},"2666":{"position":[[133,2]]},"2696":{"position":[[9,2]]},"2742":{"position":[[67,2]]},"2935":{"position":[[23,2]]},"2979":{"position":[[17,2]]},"3080":{"position":[[153,2]]},"3118":{"position":[[96,2],[100,2]]},"3389":{"position":[[408,2]]},"3391":{"position":[[33,2]]},"3448":{"position":[[2,2],[40,2],[341,2],[1372,2]]},"3452":{"position":[[33,2],[54,2]]},"3456":{"position":[[358,2]]},"3458":{"position":[[479,2]]},"3466":{"position":[[1339,2],[1479,2]]},"3498":{"position":[[0,2]]},"3543":{"position":[[0,2],[686,2]]},"3551":{"position":[[275,2],[499,2]]},"3553":{"position":[[254,2],[366,2]]},"3555":{"position":[[275,2],[405,2]]},"3557":{"position":[[277,2],[412,2]]},"3559":{"position":[[286,2],[436,2]]},"3567":{"position":[[58,2]]},"3718":{"position":[[113,2]]},"3910":{"position":[[2557,2]]},"3914":{"position":[[2109,2]]},"3916":{"position":[[2044,2],[3220,2],[3241,2],[8864,2]]},"3922":{"position":[[143,2],[1698,2],[1733,2],[2346,2]]},"3924":{"position":[[560,2],[1415,2],[1845,2]]},"3928":{"position":[[1101,2]]},"3930":{"position":[[1041,2]]},"3934":{"position":[[1121,2]]},"3936":{"position":[[281,2]]},"3940":{"position":[[363,2]]},"3946":{"position":[[120,2]]},"3948":{"position":[[153,2]]},"3954":{"position":[[140,2],[226,2],[464,2]]},"3964":{"position":[[9,2]]},"3978":{"position":[[206,2],[974,2],[1011,2]]},"3982":{"position":[[83,2]]},"3992":{"position":[[1531,2],[2685,2],[3421,2]]},"3994":{"position":[[818,2],[1487,2]]},"3998":{"position":[[126,2],[487,2]]},"4000":{"position":[[86,2],[259,2],[327,2],[349,2],[449,2]]}}}],["全文",{"_index":10261,"t":{"3992":{"position":[[2667,2]]}}}],["全新",{"_index":557,"t":{"95":{"position":[[0,2]]},"340":{"position":[[48,2]]},"399":{"position":[[858,2]]},"587":{"position":[[25,2]]},"589":{"position":[[29,2]]},"3910":{"position":[[384,2],[413,2]]}}}],["全方位",{"_index":1270,"t":{"182":{"position":[[71,3]]},"3395":{"position":[[28,3]]}}}],["全权",{"_index":7209,"t":{"2910":{"position":[[356,2]]}}}],["全球",{"_index":4528,"t":{"1509":{"position":[[37,2]]}}}],["全球化",{"_index":3236,"t":{"631":{"position":[[4,3]]},"1879":{"position":[[4,3]]},"2517":{"position":[[0,3],[24,3],[82,3]]},"3029":{"position":[[18,3]]}}}],["全站",{"_index":8612,"t":{"3729":{"position":[[61,2]]}}}],["全自动",{"_index":7597,"t":{"3211":{"position":[[43,3]]}}}],["全选",{"_index":2008,"t":{"306":{"position":[[62,2]]}}}],["全速进行",{"_index":6115,"t":{"2311":{"position":[[303,4]]}}}],["全部",{"_index":588,"t":{"95":{"position":[[170,2]]},"302":{"position":[[146,2]]},"338":{"position":[[1245,2],[1252,2]]},"433":{"position":[[181,2]]},"608":{"position":[[797,2]]},"696":{"position":[[4699,2]]},"3256":{"position":[[169,2]]},"3924":{"position":[[2776,2]]},"3944":{"position":[[156,2]]},"3992":{"position":[[1040,2]]}}}],["全部内容",{"_index":2009,"t":{"306":{"position":[[67,4]]}}}],["全部列",{"_index":3262,"t":{"653":{"position":[[18,3]]},"1353":{"position":[[18,3]]}}}],["全面",{"_index":4877,"t":{"1511":{"position":[[3862,2]]},"3207":{"position":[[121,2]]},"3946":{"position":[[87,2]]}}}],["八",{"_index":3297,"t":{"665":{"position":[[471,1],[1072,1]]},"667":{"position":[[492,1],[1117,1]]},"669":{"position":[[471,1],[1072,1]]},"671":{"position":[[492,1],[1117,1]]},"956":{"position":[[501,1],[1379,1]]},"960":{"position":[[1085,1]]},"1160":{"position":[[741,1],[1691,1]]},"1162":{"position":[[783,1],[1781,1]]}}}],["八个",{"_index":3986,"t":{"1117":{"position":[[877,2],[1617,2],[2583,2],[3616,2],[4531,2]]},"2418":{"position":[[396,2],[501,2]]}}}],["八嘎",{"_index":7051,"t":{"2788":{"position":[[125,2],[197,2]]}}}],["公众",{"_index":1480,"t":{"199":{"position":[[301,2]]}}}],["公共",{"_index":5463,"t":{"1775":{"position":[[26,2],[55,2],[78,2],[93,2],[109,2],[125,2],[3714,2],[3862,2]]},"3131":{"position":[[266,2]]},"3830":{"position":[[177,2],[182,2]]}}}],["公司",{"_index":2149,"t":{"331":{"position":[[15,2]]},"435":{"position":[[386,2],[789,2]]},"1509":{"position":[[90,2]]},"1511":{"position":[[609,2],[905,2],[3719,2],[4204,2]]},"2646":{"position":[[121,2]]},"2713":{"position":[[798,2],[1520,2],[1602,2],[1684,2],[2065,2],[2204,2],[2342,2]]},"3138":{"position":[[101,2]]},"3142":{"position":[[163,2]]},"3414":{"position":[[309,2]]},"3612":{"position":[[4,2],[49,2]]}}}],["公园",{"_index":2547,"t":{"441":{"position":[[248,2],[511,2],[614,2]]}}}],["公开",{"_index":1555,"t":{"210":{"position":[[25,2],[105,2]]},"378":{"position":[[104,2]]},"417":{"position":[[49,2]]},"615":{"position":[[73,2]]},"818":{"position":[[66,2],[78,2],[86,2]]},"822":{"position":[[121,2]]},"945":{"position":[[26,2]]},"1223":{"position":[[44,2]]},"1234":{"position":[[891,2]]},"1377":{"position":[[501,2]]},"1440":{"position":[[269,2]]},"1580":{"position":[[178,2]]},"1775":{"position":[[101,2]]},"1855":{"position":[[26,2]]},"2442":{"position":[[74,2],[132,2]]},"2768":{"position":[[1564,2]]},"3148":{"position":[[147,2]]},"3156":{"position":[[17,2]]},"3702":{"position":[[1447,2]]},"3815":{"position":[[107,2]]},"3966":{"position":[[397,2]]},"3982":{"position":[[122,2]]},"3984":{"position":[[984,2]]},"3994":{"position":[[1389,2]]}}}],["公用",{"_index":6426,"t":{"2559":{"position":[[3,2],[15,2]]}}}],["六",{"_index":3295,"t":{"665":{"position":[[356,1],[935,1]]},"667":{"position":[[371,1],[974,1]]},"669":{"position":[[356,1],[935,1]]},"671":{"position":[[371,1],[974,1]]},"795":{"position":[[199,1],[505,1]]},"853":{"position":[[477,1]]},"956":{"position":[[357,1],[1213,1]]},"960":{"position":[[675,1]]},"1160":{"position":[[584,1],[1512,1]]},"1162":{"position":[[614,1],[1590,1]]},"1329":{"position":[[389,1],[914,1]]},"1331":{"position":[[404,1],[944,1]]},"1333":{"position":[[389,1],[914,1]]},"1335":{"position":[[404,1],[947,1]]},"1511":{"position":[[596,1]]}}}],["六个",{"_index":3980,"t":{"1117":{"position":[[599,2],[1436,2],[2299,2],[3332,2],[4281,2]]},"3612":{"position":[[110,2]]}}}],["兮",{"_index":4650,"t":{"1511":{"position":[[898,1]]}}}],["共",{"_index":7069,"t":{"2803":{"position":[[114,1]]},"2805":{"position":[[0,1],[70,1]]},"2834":{"position":[[0,1]]},"3926":{"position":[[597,1]]}}}],["共享",{"_index":1314,"t":{"186":{"position":[[71,2]]},"220":{"position":[[800,2]]},"227":{"position":[[49,2]]},"239":{"position":[[14,2]]},"340":{"position":[[97,2],[1913,2]]},"1214":{"position":[[185,2]]},"1657":{"position":[[67,2]]},"1807":{"position":[[72,2]]},"2815":{"position":[[61,2]]},"2843":{"position":[[155,2]]},"2846":{"position":[[398,2]]},"2852":{"position":[[40,2]]},"2856":{"position":[[21,2],[48,2]]},"2917":{"position":[[16,2]]},"2919":{"position":[[0,2],[17,2],[70,2]]},"2953":{"position":[[25,2]]},"3291":{"position":[[1018,2]]},"3466":{"position":[[1109,2],[1477,2]]},"3783":{"position":[[33,2]]},"3924":{"position":[[1197,2]]},"3934":{"position":[[3081,2]]},"3950":{"position":[[739,2]]},"3966":{"position":[[109,2]]}}}],["共享内存",{"_index":6099,"t":{"2305":{"position":[[39,4]]},"2307":{"position":[[115,4]]},"2321":{"position":[[76,4]]},"3954":{"position":[[61,4]]}}}],["共同",{"_index":8413,"t":{"3608":{"position":[[96,2]]},"3830":{"position":[[125,2]]}}}],["共和国",{"_index":6458,"t":{"2559":{"position":[[270,3],[289,3],[926,3],[2496,3]]}}}],["共存",{"_index":3182,"t":{"608":{"position":[[458,2]]},"1979":{"position":[[716,2]]},"3704":{"position":[[530,2]]},"3924":{"position":[[4070,2]]},"3998":{"position":[[642,2]]},"4000":{"position":[[887,2]]}}}],["共用",{"_index":1544,"t":{"206":{"position":[[228,2]]},"220":{"position":[[797,2]]},"1703":{"position":[[299,2]]},"2912":{"position":[[61,2]]},"3914":{"position":[[2443,2]]}}}],["关于",{"_index":252,"t":{"15":{"position":[[259,2]]},"17":{"position":[[253,2]]},"19":{"position":[[701,2]]},"110":{"position":[[66,2]]},"127":{"position":[[1700,2]]},"218":{"position":[[237,2]]},"233":{"position":[[261,2]]},"304":{"position":[[0,2]]},"319":{"position":[[587,2],[590,2]]},"323":{"position":[[55,2]]},"435":{"position":[[1159,2]]},"510":{"position":[[526,2]]},"574":{"position":[[0,2]]},"675":{"position":[[49,2]]},"685":{"position":[[313,2]]},"810":{"position":[[389,2]]},"812":{"position":[[421,2]]},"814":{"position":[[385,2]]},"816":{"position":[[417,2]]},"947":{"position":[[450,2]]},"988":{"position":[[34,2]]},"1111":{"position":[[421,2]]},"1113":{"position":[[419,2]]},"1115":{"position":[[428,2]]},"1117":{"position":[[4666,2]]},"1119":{"position":[[390,2]]},"1121":{"position":[[422,2]]},"1123":{"position":[[353,2]]},"1129":{"position":[[1744,2]]},"1234":{"position":[[753,2]]},"1277":{"position":[[238,2]]},"1420":{"position":[[921,2]]},"1424":{"position":[[0,2]]},"1530":{"position":[[109,2]]},"1687":{"position":[[280,2]]},"1711":{"position":[[655,2],[893,2]]},"1739":{"position":[[426,2]]},"1903":{"position":[[366,2]]},"2261":{"position":[[401,2]]},"2379":{"position":[[345,2]]},"2426":{"position":[[217,2]]},"2442":{"position":[[2008,2]]},"2653":{"position":[[0,2]]},"2725":{"position":[[2647,2]]},"2749":{"position":[[828,2]]},"2875":{"position":[[415,2]]},"3071":{"position":[[156,2]]},"3150":{"position":[[184,2]]},"3207":{"position":[[0,2]]},"3307":{"position":[[155,2]]},"3323":{"position":[[371,2]]},"3452":{"position":[[422,2]]},"3464":{"position":[[449,2]]},"3506":{"position":[[628,2]]},"3522":{"position":[[872,2]]},"3547":{"position":[[798,2]]},"3589":{"position":[[449,2]]},"3664":{"position":[[455,2]]},"3779":{"position":[[1244,2],[1869,2]]},"3802":{"position":[[1862,2],[2646,2]]},"3817":{"position":[[2458,2]]},"3844":{"position":[[665,2]]},"3916":{"position":[[3425,2]]},"3920":{"position":[[1893,2]]},"3928":{"position":[[0,2]]},"3962":{"position":[[1799,2]]},"3968":{"position":[[449,2]]},"3992":{"position":[[3897,2]]}}}],["关卡",{"_index":3014,"t":{"579":{"position":[[63,2]]}}}],["关心",{"_index":3941,"t":{"1073":{"position":[[65,2]]}}}],["关注",{"_index":4618,"t":{"1511":{"position":[[590,2],[2964,2],[3129,2]]},"3209":{"position":[[62,2]]},"3250":{"position":[[61,2]]},"3385":{"position":[[77,2]]},"3416":{"position":[[382,2]]},"3908":{"position":[[22,2]]}}}],["关系",{"_index":1840,"t":{"253":{"position":[[54,2]]},"357":{"position":[[22,2]]},"359":{"position":[[33,2],[53,2],[86,2]]},"807":{"position":[[1,2]]},"877":{"position":[[740,2]]},"889":{"position":[[309,2]]},"945":{"position":[[99,2]]},"1103":{"position":[[175,2]]},"1149":{"position":[[19,2]]},"1385":{"position":[[68,2]]},"1761":{"position":[[385,2]]},"2809":{"position":[[49,2]]},"3287":{"position":[[105,2],[389,2]]},"3954":{"position":[[557,2]]},"3986":{"position":[[1831,2]]}}}],["关系数据库",{"_index":6730,"t":{"2599":{"position":[[78,5],[85,5],[98,5],[113,5]]}}}],["关联",{"_index":2232,"t":{"340":{"position":[[1227,2]]},"1839":{"position":[[124,2]]},"2809":{"position":[[47,2]]},"3104":{"position":[[80,2]]},"3118":{"position":[[326,2],[351,2]]},"3189":{"position":[[67,2]]},"3795":{"position":[[289,2]]},"3815":{"position":[[63,2]]},"3980":{"position":[[650,2]]},"3992":{"position":[[1948,2]]}}}],["关联度",{"_index":7386,"t":{"3092":{"position":[[9,3]]}}}],["关键",{"_index":4955,"t":{"1535":{"position":[[440,2]]},"2740":{"position":[[116,2]]}}}],["关键字",{"_index":4922,"t":{"1520":{"position":[[135,3]]},"1535":{"position":[[500,3],[526,3]]},"1549":{"position":[[324,3]]},"3323":{"position":[[504,3],[559,3]]}}}],["关键词",{"_index":7901,"t":{"3317":{"position":[[11,3]]},"3319":{"position":[[69,3]]}}}],["关闭",{"_index":3711,"t":{"887":{"position":[[53,2],[163,2]]},"927":{"position":[[1172,2],[1387,2],[1627,2],[1787,2]]},"1145":{"position":[[521,2]]},"1923":{"position":[[130,2]]},"2503":{"position":[[110,2]]},"2836":{"position":[[1265,2]]},"2981":{"position":[[71,2],[153,2]]},"3468":{"position":[[30,2]]},"3470":{"position":[[104,2],[154,2]]},"3601":{"position":[[1551,2]]},"3654":{"position":[[158,2]]},"3768":{"position":[[2454,2]]},"3910":{"position":[[1090,2],[1105,2]]},"3914":{"position":[[3507,2]]},"3978":{"position":[[698,2]]},"3992":{"position":[[3812,2]]},"3994":{"position":[[1189,2]]},"3996":{"position":[[1609,2]]}}}],["兴起",{"_index":7194,"t":{"2910":{"position":[[68,2]]},"3414":{"position":[[241,2]]}}}],["兴趣",{"_index":8065,"t":{"3414":{"position":[[297,2]]}}}],["其一",{"_index":2282,"t":{"355":{"position":[[588,2]]},"2278":{"position":[[144,2]]}}}],["其中",{"_index":95,"t":{"5":{"position":[[89,2]]},"7":{"position":[[85,2]]},"239":{"position":[[123,2]]},"247":{"position":[[151,2]]},"382":{"position":[[37,2]]},"482":{"position":[[475,2]]},"506":{"position":[[126,2]]},"1131":{"position":[[164,2]]},"1412":{"position":[[128,2]]},"1483":{"position":[[1011,2]]},"1547":{"position":[[156,2]]},"2290":{"position":[[85,2]]},"2418":{"position":[[770,2]]},"2649":{"position":[[205,2]]},"3071":{"position":[[1143,2]]}}}],["其他",{"_index":1124,"t":{"148":{"position":[[278,2]]},"179":{"position":[[120,2]]},"206":{"position":[[220,2]]},"220":{"position":[[810,2],[859,2]]},"239":{"position":[[102,2]]},"251":{"position":[[84,2]]},"286":{"position":[[189,2]]},"308":{"position":[[265,2]]},"323":{"position":[[118,2]]},"357":{"position":[[29,2]]},"408":{"position":[[133,2]]},"445":{"position":[[880,2]]},"530":{"position":[[682,2]]},"572":{"position":[[564,2],[1009,2],[1198,2]]},"583":{"position":[[89,2]]},"585":{"position":[[494,2]]},"679":{"position":[[167,2]]},"683":{"position":[[35,2]]},"685":{"position":[[531,2],[587,2]]},"698":{"position":[[435,2]]},"730":{"position":[[339,2]]},"732":{"position":[[268,2]]},"919":{"position":[[160,2]]},"933":{"position":[[417,2]]},"1037":{"position":[[309,2]]},"1039":{"position":[[683,2]]},"1056":{"position":[[415,2]]},"1075":{"position":[[31,2]]},"1366":{"position":[[14,2]]},"1392":{"position":[[34,2]]},"1396":{"position":[[73,2]]},"1405":{"position":[[122,2]]},"1408":{"position":[[1119,2]]},"1434":{"position":[[209,2]]},"1513":{"position":[[38,2]]},"1865":{"position":[[432,2]]},"1913":{"position":[[1118,2]]},"1925":{"position":[[1410,2]]},"1933":{"position":[[273,2],[623,2]]},"2272":{"position":[[523,2]]},"2281":{"position":[[232,2]]},"2298":{"position":[[208,2]]},"2476":{"position":[[228,2]]},"2478":{"position":[[338,2]]},"2519":{"position":[[377,2]]},"2542":{"position":[[250,2]]},"2555":{"position":[[42,2]]},"2579":{"position":[[940,2],[978,2]]},"2581":{"position":[[78,2],[478,2],[1005,2]]},"2583":{"position":[[26,2]]},"2587":{"position":[[422,2]]},"2591":{"position":[[34,2]]},"2768":{"position":[[1496,2]]},"2805":{"position":[[18,2]]},"2821":{"position":[[617,2]]},"2831":{"position":[[677,2]]},"2834":{"position":[[28,2]]},"2881":{"position":[[877,2]]},"2917":{"position":[[189,2]]},"2929":{"position":[[660,2]]},"2945":{"position":[[717,2]]},"2959":{"position":[[686,2]]},"3082":{"position":[[208,2]]},"3110":{"position":[[126,2]]},"3131":{"position":[[145,2]]},"3142":{"position":[[242,2]]},"3144":{"position":[[359,2],[479,2]]},"3156":{"position":[[449,2],[531,2]]},"3158":{"position":[[253,2]]},"3282":{"position":[[216,2]]},"3287":{"position":[[248,2],[573,2]]},"3289":{"position":[[13,2]]},"3345":{"position":[[236,2]]},"3350":{"position":[[197,2]]},"3430":{"position":[[3380,2]]},"3432":{"position":[[1085,2],[1276,2],[3349,2],[4362,2],[4392,2],[4407,2]]},"3434":{"position":[[56,2],[625,2],[1149,2],[1457,2],[1600,2],[2433,2],[2735,2],[2764,2],[2779,2]]},"3450":{"position":[[230,2]]},"3458":{"position":[[916,2]]},"3575":{"position":[[103,2]]},"3587":{"position":[[315,2]]},"3589":{"position":[[300,2]]},"3591":{"position":[[90,2]]},"3708":{"position":[[4142,2]]},"3779":{"position":[[567,2]]},"3802":{"position":[[623,2]]},"3817":{"position":[[522,2]]},"3912":{"position":[[2428,2]]},"3914":{"position":[[3259,2]]},"3916":{"position":[[2468,2]]},"3918":{"position":[[3901,2]]},"3920":{"position":[[1768,2]]},"3922":{"position":[[2243,2]]},"3924":{"position":[[1901,2]]},"3930":{"position":[[1367,2]]},"3932":{"position":[[1407,2]]},"3934":{"position":[[965,2],[1869,2]]},"3936":{"position":[[695,2]]},"3938":{"position":[[673,2]]},"3940":{"position":[[540,2]]},"3942":{"position":[[443,2]]},"3944":{"position":[[444,2],[889,2]]},"3946":{"position":[[396,2]]},"3948":{"position":[[504,2]]},"3954":{"position":[[740,2]]},"3956":{"position":[[3140,2]]},"3958":{"position":[[350,2]]},"3960":{"position":[[591,2]]},"3962":{"position":[[1556,2]]},"3964":{"position":[[579,2]]},"3966":{"position":[[1047,2],[1495,2]]},"3968":{"position":[[333,2]]},"3970":{"position":[[314,2]]},"3972":{"position":[[448,2]]},"3974":{"position":[[506,2]]},"3976":{"position":[[469,2]]},"3978":{"position":[[1136,2]]},"3980":{"position":[[444,2]]},"3982":{"position":[[502,2]]},"3984":{"position":[[670,2]]},"3986":{"position":[[828,2]]},"3988":{"position":[[428,2]]},"3990":{"position":[[510,2]]},"3992":{"position":[[2494,2]]},"3994":{"position":[[1535,2]]},"3996":{"position":[[1271,2]]},"4000":{"position":[[1184,2]]},"4004":{"position":[[459,2]]},"4006":{"position":[[632,2]]}}}],["其实",{"_index":3895,"t":{"1046":{"position":[[0,2]]},"1511":{"position":[[2918,2]]},"1717":{"position":[[18,2]]},"2770":{"position":[[265,2]]},"3352":{"position":[[651,2]]},"3626":{"position":[[83,2]]}}}],["其次",{"_index":5808,"t":{"1905":{"position":[[56,2]]}}}],["具",{"_index":5214,"t":{"1672":{"position":[[9,1]]}}}],["具体",{"_index":914,"t":{"121":{"position":[[518,2]]},"204":{"position":[[461,2]]},"461":{"position":[[75,2]]},"528":{"position":[[402,2],[465,2]]},"572":{"position":[[31,2]]},"1082":{"position":[[0,2],[12,2]]},"1389":{"position":[[254,2]]},"1408":{"position":[[1279,2]]},"1412":{"position":[[271,2]]},"1432":{"position":[[149,2]]},"1566":{"position":[[293,2]]},"1753":{"position":[[166,2]]},"1755":{"position":[[749,2],[954,2],[1189,2]]},"1851":{"position":[[427,2],[947,2]]},"3112":{"position":[[51,2]]},"3116":{"position":[[13,2]]},"3305":{"position":[[18,2]]},"3350":{"position":[[79,2]]},"3360":{"position":[[148,2]]},"3583":{"position":[[17,2]]},"3620":{"position":[[278,2]]},"3624":{"position":[[56,2],[78,2]]},"3787":{"position":[[9,2]]},"3798":{"position":[[21,2]]},"3908":{"position":[[315,2]]}}}],["具体步骤",{"_index":2525,"t":{"431":{"position":[[65,4]]},"2705":{"position":[[65,4]]}}}],["具备",{"_index":1303,"t":{"184":{"position":[[51,2]]},"502":{"position":[[58,2]]},"504":{"position":[[27,2]]},"608":{"position":[[666,2]]},"945":{"position":[[39,2]]},"1580":{"position":[[148,2]]},"2621":{"position":[[33,2]]},"3804":{"position":[[385,2]]}}}],["具有",{"_index":1661,"t":{"229":{"position":[[14,2]]},"233":{"position":[[268,2]]},"239":{"position":[[116,2]]},"261":{"position":[[124,2]]},"353":{"position":[[17,2]]},"404":{"position":[[247,2]]},"1060":{"position":[[7,2]]},"1580":{"position":[[140,2]]},"2311":{"position":[[281,2],[377,2]]},"2725":{"position":[[2603,2]]},"2727":{"position":[[818,2]]},"2809":{"position":[[120,2]]},"2910":{"position":[[176,2]]},"3209":{"position":[[110,2]]},"3416":{"position":[[224,2]]},"3966":{"position":[[1116,2]]}}}],["典型",{"_index":7071,"t":{"2805":{"position":[[61,2]]}}}],["典范",{"_index":4879,"t":{"1511":{"position":[[3868,2]]},"3934":{"position":[[1194,2]]}}}],["兼容",{"_index":3113,"t":{"587":{"position":[[2232,2]]},"589":{"position":[[39,2]]},"591":{"position":[[2,2]]},"677":{"position":[[150,2]]},"704":{"position":[[150,2]]},"899":{"position":[[1105,2],[1340,2],[1626,2]]},"2551":{"position":[[10,2]]},"3319":{"position":[[44,2]]},"3928":{"position":[[104,2]]},"3962":{"position":[[1634,2]]},"3992":{"position":[[3842,2]]}}}],["内",{"_index":853,"t":{"119":{"position":[[173,1]]},"148":{"position":[[399,1]]},"233":{"position":[[391,1]]},"384":{"position":[[57,1]]},"390":{"position":[[2,1]]},"433":{"position":[[177,1]]},"1383":{"position":[[129,1]]},"1394":{"position":[[123,1]]},"1432":{"position":[[59,1]]},"2239":{"position":[[109,1]]},"2307":{"position":[[36,1],[50,1],[78,1]]},"2309":{"position":[[2,1]]},"2393":{"position":[[163,1]]},"2717":{"position":[[146,1]]},"2843":{"position":[[191,1]]},"2856":{"position":[[20,1]]},"3110":{"position":[[220,1]]},"3912":{"position":[[1807,1]]},"3936":{"position":[[397,1]]},"3954":{"position":[[57,1]]},"3966":{"position":[[1573,1]]},"3992":{"position":[[1029,1]]}}}],["内存",{"_index":1656,"t":{"227":{"position":[[0,2],[25,2]]},"229":{"position":[[0,2],[27,2],[73,2]]},"233":{"position":[[0,2]]},"237":{"position":[[1369,2],[1397,2]]},"239":{"position":[[196,2]]},"245":{"position":[[3,2],[70,2],[78,2],[122,2],[156,2],[171,2],[240,2]]},"249":{"position":[[7,2]]},"251":{"position":[[38,2]]},"255":{"position":[[73,2],[93,2]]},"363":{"position":[[25,2]]},"516":{"position":[[537,2]]},"1214":{"position":[[145,2]]},"1383":{"position":[[68,2]]},"1432":{"position":[[163,2]]},"1711":{"position":[[730,2]]},"1745":{"position":[[25,2]]},"1801":{"position":[[532,2],[1567,2],[1847,2],[3315,2]]},"1803":{"position":[[2622,2],[3818,2],[5528,2]]},"1821":{"position":[[79,2]]},"2843":{"position":[[116,2],[218,2],[226,2]]},"2933":{"position":[[584,2]]},"3078":{"position":[[157,2]]},"3088":{"position":[[118,2]]},"3108":{"position":[[199,2]]},"3414":{"position":[[189,2]]},"3914":{"position":[[1646,2],[2493,2],[2927,2]]},"3916":{"position":[[1542,2],[1670,2]]},"3948":{"position":[[349,2]]},"3950":{"position":[[397,2]]},"3952":{"position":[[305,2]]},"3954":{"position":[[564,2]]},"3964":{"position":[[590,2]]},"3966":{"position":[[1144,2],[1156,2]]},"3968":{"position":[[350,2]]},"3970":{"position":[[338,2]]},"3972":{"position":[[536,2]]},"3978":{"position":[[723,2]]},"3984":{"position":[[745,2]]},"4004":{"position":[[363,2]]}}}],["内存条",{"_index":4623,"t":{"1511":{"position":[[646,3]]}}}],["内容",{"_index":219,"t":{"13":{"position":[[85,2]]},"121":{"position":[[609,2]]},"129":{"position":[[629,2]]},"225":{"position":[[8,2]]},"249":{"position":[[98,2]]},"380":{"position":[[29,2]]},"388":{"position":[[17,2]]},"404":{"position":[[221,2]]},"427":{"position":[[65,2]]},"433":{"position":[[121,2]]},"488":{"position":[[23,2]]},"498":{"position":[[99,2]]},"677":{"position":[[258,2]]},"704":{"position":[[254,2]]},"893":{"position":[[99,2]]},"1269":{"position":[[225,2]]},"1313":{"position":[[336,2]]},"1379":{"position":[[90,2]]},"1549":{"position":[[215,2]]},"1717":{"position":[[109,2],[116,2]]},"1729":{"position":[[210,2]]},"1755":{"position":[[74,2],[377,2]]},"1857":{"position":[[62,2],[95,2],[116,2]]},"1869":{"position":[[306,2]]},"1875":{"position":[[640,2]]},"1901":{"position":[[300,2]]},"2255":{"position":[[65,2]]},"2296":{"position":[[85,2]]},"2497":{"position":[[201,2]]},"2564":{"position":[[178,2]]},"2751":{"position":[[79,2]]},"2770":{"position":[[295,2]]},"2788":{"position":[[98,2]]},"2823":{"position":[[23,2]]},"2827":{"position":[[17,2],[42,2]]},"2887":{"position":[[42,2]]},"3086":{"position":[[51,2]]},"3142":{"position":[[77,2]]},"3416":{"position":[[30,2]]},"3520":{"position":[[99,2]]},"3561":{"position":[[99,2]]},"3694":{"position":[[145,2]]},"3702":{"position":[[1530,2]]},"3740":{"position":[[433,2]]},"3912":{"position":[[1269,2],[2684,2]]},"3928":{"position":[[564,2]]},"3938":{"position":[[1309,2]]},"3966":{"position":[[926,2]]},"3984":{"position":[[66,2],[117,2]]},"3992":{"position":[[2882,2]]}}}],["内嵌",{"_index":9501,"t":{"3934":{"position":[[615,2]]}}}],["内心",{"_index":9414,"t":{"3926":{"position":[[477,2]]}}}],["内置",{"_index":567,"t":{"95":{"position":[[78,2]]},"504":{"position":[[179,2]]},"516":{"position":[[453,2]]},"532":{"position":[[176,2]]},"583":{"position":[[30,2],[67,2]]},"587":{"position":[[733,2],[992,2],[1005,2],[2164,2],[2239,2]]},"589":{"position":[[46,2]]},"591":{"position":[[9,2],[16,2]]},"602":{"position":[[284,2]]},"606":{"position":[[7,2]]},"615":{"position":[[10,2]]},"617":{"position":[[7,2]]},"633":{"position":[[7,2]]},"836":{"position":[[19,2],[320,2]]},"988":{"position":[[9,2]]},"1661":{"position":[[909,2]]},"1687":{"position":[[305,2]]},"1691":{"position":[[10,2]]},"1763":{"position":[[105,2],[156,2]]},"1765":{"position":[[21,2]]},"1805":{"position":[[9,2]]},"1887":{"position":[[46,2]]},"1973":{"position":[[67,2]]},"1987":{"position":[[67,2]]},"2010":{"position":[[75,2]]},"2307":{"position":[[29,2]]},"2343":{"position":[[57,2]]},"2357":{"position":[[124,2]]},"2646":{"position":[[38,2]]},"2740":{"position":[[83,2]]},"2784":{"position":[[9,2]]},"2794":{"position":[[11,2]]},"2881":{"position":[[18,2]]},"2967":{"position":[[18,2]]},"3023":{"position":[[906,2]]},"3063":{"position":[[876,2],[1464,2]]},"3126":{"position":[[16,2]]},"3287":{"position":[[681,2]]},"3418":{"position":[[20,2]]},"3666":{"position":[[11,2]]},"3706":{"position":[[868,2],[1475,2]]},"3754":{"position":[[9,2]]},"3804":{"position":[[20,2]]},"3808":{"position":[[101,2],[1677,2]]},"3826":{"position":[[0,2],[244,2]]},"3914":{"position":[[989,2],[1246,2]]},"3928":{"position":[[393,2],[477,2]]},"3934":{"position":[[1353,2]]},"3938":{"position":[[348,2]]},"3994":{"position":[[147,2],[385,2]]},"4000":{"position":[[824,2]]},"4006":{"position":[[579,2]]}}}],["内置在",{"_index":7523,"t":{"3142":{"position":[[267,3]]}}}],["内联",{"_index":7884,"t":{"3305":{"position":[[46,2]]}}}],["内部",{"_index":1579,"t":{"216":{"position":[[51,2]]},"369":{"position":[[510,2]]},"1383":{"position":[[297,2]]},"1663":{"position":[[529,2]]},"1839":{"position":[[129,2]]},"2319":{"position":[[38,2]]},"2333":{"position":[[41,2]]},"2848":{"position":[[162,2]]},"2856":{"position":[[1761,2]]},"3069":{"position":[[116,2]]},"3138":{"position":[[103,2]]},"3587":{"position":[[92,2]]},"3589":{"position":[[66,2]]},"3597":{"position":[[9,2]]},"3680":{"position":[[224,2]]},"3844":{"position":[[816,2],[1018,2],[1121,2]]},"3914":{"position":[[2522,2]]},"3928":{"position":[[102,2]]},"3934":{"position":[[3036,2]]},"3954":{"position":[[655,2]]},"3978":{"position":[[958,2]]}}}],["再也",{"_index":1994,"t":{"302":{"position":[[114,2]]},"2495":{"position":[[68,2]]},"3924":{"position":[[768,2]]},"3928":{"position":[[410,2],[494,2]]}}}],["再接再厉",{"_index":4803,"t":{"1511":{"position":[[2681,4]]}}}],["再有",{"_index":7448,"t":{"3124":{"position":[[48,2]]}}}],["再次",{"_index":893,"t":{"121":{"position":[[334,2]]},"593":{"position":[[49,2]]},"1582":{"position":[[56,2]]},"1841":{"position":[[79,2]]},"3120":{"position":[[150,2]]},"3369":{"position":[[125,2]]},"3630":{"position":[[56,2]]},"3950":{"position":[[565,2]]}}}],["再者",{"_index":3045,"t":{"585":{"position":[[489,2]]},"1576":{"position":[[325,2]]}}}],["冗余",{"_index":4151,"t":{"1374":{"position":[[130,2]]},"2684":{"position":[[387,2]]},"3118":{"position":[[202,2],[259,2]]}}}],["写",{"_index":229,"t":{"13":{"position":[[393,1]]},"127":{"position":[[703,1]]},"355":{"position":[[72,1],[587,1]]},"373":{"position":[[1,1]]},"492":{"position":[[559,1]]},"526":{"position":[[360,1],[363,1]]},"530":{"position":[[464,1]]},"572":{"position":[[657,1],[1102,1]]},"688":{"position":[[90,1],[110,1]]},"713":{"position":[[48,1],[58,1]]},"1002":{"position":[[35,1],[96,1]]},"1031":{"position":[[106,1]]},"1039":{"position":[[464,1]]},"1046":{"position":[[21,1]]},"1048":{"position":[[13,1],[76,1]]},"1050":{"position":[[23,1]]},"1066":{"position":[[1572,1]]},"1149":{"position":[[48,1]]},"1155":{"position":[[86,1]]},"1286":{"position":[[21,1]]},"1366":{"position":[[9,1]]},"1368":{"position":[[16,1],[761,1]]},"1424":{"position":[[2046,1]]},"1511":{"position":[[984,1]]},"1541":{"position":[[233,1],[306,1]]},"1733":{"position":[[70,1]]},"1761":{"position":[[86,1]]},"1795":{"position":[[2946,1]]},"1801":{"position":[[1755,1]]},"1883":{"position":[[14,1],[364,1]]},"2296":{"position":[[393,1]]},"2317":{"position":[[42,1]]},"2482":{"position":[[459,1]]},"2484":{"position":[[559,1]]},"2745":{"position":[[178,1]]},"2747":{"position":[[181,1]]},"2770":{"position":[[292,1]]},"2796":{"position":[[304,1],[493,1],[749,1]]},"2825":{"position":[[459,1]]},"2827":{"position":[[605,1]]},"2933":{"position":[[661,1]]},"2949":{"position":[[525,1]]},"2963":{"position":[[530,1]]},"3080":{"position":[[397,1]]},"3124":{"position":[[3,1],[72,1],[76,1]]},"3224":{"position":[[15,1]]},"3242":{"position":[[0,1]]},"3305":{"position":[[8,1]]},"3352":{"position":[[269,1],[322,1],[614,1]]},"3434":{"position":[[377,1]]},"3440":{"position":[[109,1]]},"3452":{"position":[[1006,1]]},"3626":{"position":[[147,1],[153,1],[161,1],[175,1]]},"3676":{"position":[[109,1]]},"3688":{"position":[[69,1]]},"3910":{"position":[[683,1]]},"3916":{"position":[[4002,1]]},"3918":{"position":[[3539,1],[3786,1]]},"3922":{"position":[[1427,1]]},"3970":{"position":[[302,1]]},"3990":{"position":[[489,1]]}}}],["写上去",{"_index":7364,"t":{"3071":{"position":[[583,3],[823,3]]}}}],["写下",{"_index":2369,"t":{"397":{"position":[[61,2]]},"3371":{"position":[[32,2]]}}}],["写入",{"_index":732,"t":{"112":{"position":[[1015,2],[1550,2]]},"570":{"position":[[2063,2]]},"734":{"position":[[7773,2]]},"1799":{"position":[[368,2]]},"1801":{"position":[[995,2],[1565,2],[1845,2],[2043,2]]},"1803":{"position":[[3165,2],[3662,2],[3816,2],[4005,2]]},"1901":{"position":[[296,2]]},"1925":{"position":[[864,2],[1416,2]]},"2311":{"position":[[424,2]]},"2313":{"position":[[839,2]]},"2326":{"position":[[132,2]]},"2379":{"position":[[610,2]]},"2875":{"position":[[679,2]]},"3275":{"position":[[420,2]]},"3420":{"position":[[299,2]]},"3426":{"position":[[21,2],[39,2]]},"3430":{"position":[[4506,2]]},"3432":{"position":[[751,2],[2145,2],[3545,2],[4033,2],[4100,2],[4339,2],[4380,2],[4569,2]]},"3434":{"position":[[50,2],[72,2],[1638,2],[2713,2],[2752,2]]},"3436":{"position":[[24,2]]},"3450":{"position":[[51,2]]},"3452":{"position":[[479,2]]},"3458":{"position":[[194,2],[893,2],[914,2]]},"3466":{"position":[[1511,2]]},"3912":{"position":[[767,2],[2051,2],[2117,2],[2614,2]]},"3914":{"position":[[2486,2]]},"3916":{"position":[[962,2],[3482,2]]},"3922":{"position":[[1306,2],[1327,2],[1652,2],[1656,2],[2061,2]]},"3928":{"position":[[395,2],[479,2],[733,2],[790,2]]}}}],["写出",{"_index":3426,"t":{"728":{"position":[[60,2]]},"1761":{"position":[[204,2]]}}}],["写成",{"_index":5187,"t":{"1655":{"position":[[225,2]]},"3976":{"position":[[583,2]]}}}],["写法",{"_index":134,"t":{"11":{"position":[[43,2]]},"482":{"position":[[455,2]]},"899":{"position":[[1118,2],[1351,2]]},"1761":{"position":[[288,2]]},"2294":{"position":[[43,2]]},"2418":{"position":[[749,2]]},"3466":{"position":[[82,2],[229,2],[394,2],[512,2],[648,2]]},"3716":{"position":[[312,2],[409,2],[528,2],[673,2]]},"3914":{"position":[[1666,2]]},"3924":{"position":[[2697,2],[2783,2],[4527,2],[4643,2],[4781,2]]}}}],["写错",{"_index":6369,"t":{"2495":{"position":[[74,2]]},"3952":{"position":[[485,2]]}}}],["农",{"_index":4655,"t":{"1511":{"position":[[966,1],[1657,1]]}}}],["冰岛",{"_index":6580,"t":{"2559":{"position":[[1421,2],[1426,2]]}}}],["冰岛语",{"_index":6579,"t":{"2559":{"position":[[1411,3]]}}}],["冲",{"_index":4656,"t":{"1511":{"position":[[979,1]]}}}],["冲突",{"_index":3905,"t":{"1048":{"position":[[66,2]]},"1973":{"position":[[131,2]]},"1987":{"position":[[131,2]]},"2010":{"position":[[139,2]]},"2627":{"position":[[49,2]]},"3698":{"position":[[88,2]]},"3914":{"position":[[2461,2]]},"3924":{"position":[[1419,2]]},"3928":{"position":[[566,2]]},"3932":{"position":[[1350,2]]},"3934":{"position":[[228,2]]},"3980":{"position":[[755,2]]},"4006":{"position":[[617,2]]}}}],["决定",{"_index":5810,"t":{"1905":{"position":[[96,2]]},"2313":{"position":[[495,2]]},"3207":{"position":[[119,2]]},"3984":{"position":[[980,2]]}}}],["冷",{"_index":4680,"t":{"1511":{"position":[[1269,1]]}}}],["冷字",{"_index":7395,"t":{"3094":{"position":[[35,2]]}}}],["冷热",{"_index":7394,"t":{"3094":{"position":[[23,2]]}}}],["准备",{"_index":4706,"t":{"1511":{"position":[[1573,2]]},"1539":{"position":[[406,2]]}}}],["准确",{"_index":1290,"t":{"182":{"position":[[191,2]]},"2719":{"position":[[36,2]]},"3416":{"position":[[21,2]]},"3793":{"position":[[171,2]]},"3830":{"position":[[297,2]]}}}],["准确率",{"_index":9454,"t":{"3930":{"position":[[741,3]]}}}],["凌晨",{"_index":6322,"t":{"2420":{"position":[[1986,2]]}}}],["减分",{"_index":2164,"t":{"336":{"position":[[325,2]]}}}],["减少",{"_index":593,"t":{"98":{"position":[[29,2]]},"225":{"position":[[4,2]]},"581":{"position":[[17,2]]},"1374":{"position":[[48,2]]},"2311":{"position":[[147,2]]},"2682":{"position":[[33,2]]},"2694":{"position":[[36,2]]},"3352":{"position":[[41,2],[58,2],[391,2]]},"3579":{"position":[[181,2]]},"3620":{"position":[[40,2]]},"3740":{"position":[[91,2]]},"3916":{"position":[[2648,2]]},"3940":{"position":[[571,2]]},"3942":{"position":[[148,2]]},"3956":{"position":[[3204,2]]},"3958":{"position":[[372,2],[401,2]]},"3968":{"position":[[348,2]]},"3970":{"position":[[336,2]]},"3974":{"position":[[526,2]]},"3992":{"position":[[1156,2]]}}}],["几个",{"_index":2153,"t":{"336":{"position":[[183,2]]},"423":{"position":[[18,2]]},"587":{"position":[[2113,2]]},"1539":{"position":[[5,2]]},"3329":{"position":[[111,2]]},"3793":{"position":[[53,2]]}}}],["几乎",{"_index":7001,"t":{"2770":{"position":[[85,2]]},"3928":{"position":[[316,2]]}}}],["几十个",{"_index":3042,"t":{"585":{"position":[[459,3]]}}}],["几口",{"_index":4340,"t":{"1440":{"position":[[653,2]]}}}],["几点",{"_index":1535,"t":{"206":{"position":[[88,2]]},"2420":{"position":[[2281,2]]}}}],["几百个",{"_index":1976,"t":{"300":{"position":[[208,3]]}}}],["几种",{"_index":2532,"t":{"435":{"position":[[854,2]]},"455":{"position":[[125,2]]},"1432":{"position":[[221,2]]},"1633":{"position":[[47,2]]},"2843":{"position":[[50,2]]},"3160":{"position":[[11,2]]},"3585":{"position":[[104,2]]},"3754":{"position":[[23,2]]}}}],["凤梨",{"_index":5029,"t":{"1555":{"position":[[682,2]]}}}],["凭据",{"_index":839,"t":{"119":{"position":[[20,2],[47,2],[64,2]]},"415":{"position":[[305,2]]},"423":{"position":[[111,2]]},"2991":{"position":[[311,2]]}}}],["出",{"_index":861,"t":{"121":{"position":[[63,1]]},"587":{"position":[[711,1]]},"694":{"position":[[14,1]]},"719":{"position":[[23,1]]},"841":{"position":[[75,1]]},"1286":{"position":[[65,1]]},"1385":{"position":[[96,1]]},"1392":{"position":[[32,1]]},"1580":{"position":[[56,1]]},"1737":{"position":[[26,1]]},"1777":{"position":[[85,1]]},"2343":{"position":[[309,1]]},"2862":{"position":[[406,1]]},"2919":{"position":[[121,1]]},"3069":{"position":[[266,1]]},"3140":{"position":[[37,1]]},"3309":{"position":[[55,1]]},"3612":{"position":[[95,1]]},"3928":{"position":[[365,1]]},"3964":{"position":[[1082,1]]}}}],["出于",{"_index":2429,"t":{"404":{"position":[[63,2]]}}}],["出去",{"_index":4163,"t":{"1377":{"position":[[503,2]]}}}],["出来",{"_index":1152,"t":{"152":{"position":[[660,2]]},"1511":{"position":[[2201,2]]},"2375":{"position":[[19,2]]},"3626":{"position":[[323,2]]}}}],["出现",{"_index":1319,"t":{"186":{"position":[[127,2]]},"300":{"position":[[287,2]]},"308":{"position":[[272,2]]},"325":{"position":[[188,2]]},"363":{"position":[[23,2]]},"404":{"position":[[54,2]]},"419":{"position":[[240,2]]},"427":{"position":[[104,2],[163,2]]},"445":{"position":[[845,2]]},"482":{"position":[[703,2],[768,2],[973,2]]},"615":{"position":[[1115,2]]},"655":{"position":[[23,2]]},"675":{"position":[[182,2]]},"773":{"position":[[75,2]]},"841":{"position":[[78,2]]},"899":{"position":[[1759,2]]},"1470":{"position":[[13,2]]},"1472":{"position":[[16,2]]},"1520":{"position":[[342,2]]},"1711":{"position":[[728,2]]},"1761":{"position":[[257,2]]},"2100":{"position":[[15,2]]},"2326":{"position":[[9,2]]},"2361":{"position":[[394,2]]},"2377":{"position":[[16,2]]},"2379":{"position":[[47,2]]},"2418":{"position":[[559,2],[1019,2],[1107,2],[1337,2]]},"2555":{"position":[[73,2]]},"2627":{"position":[[47,2]]},"2745":{"position":[[301,2]]},"2915":{"position":[[96,2]]},"2917":{"position":[[164,2]]},"3071":{"position":[[1225,2]]},"3078":{"position":[[115,2]]},"3100":{"position":[[33,2]]},"3108":{"position":[[81,2]]},"3120":{"position":[[12,2]]},"3287":{"position":[[132,2],[457,2],[3085,2]]},"3337":{"position":[[60,2]]},"3339":{"position":[[244,2],[277,2]]},"3522":{"position":[[889,2]]},"3630":{"position":[[739,2]]},"3638":{"position":[[545,2]]},"3660":{"position":[[42,2]]},"3674":{"position":[[11,2]]},"3698":{"position":[[86,2]]},"3914":{"position":[[2459,2],[3180,2]]},"3916":{"position":[[2098,2],[2281,2],[2443,2],[2757,2]]},"3918":{"position":[[3458,2],[3556,2]]},"3920":{"position":[[1643,2]]},"3922":{"position":[[1578,2],[2111,2]]},"3924":{"position":[[1235,2],[1644,2],[1755,2]]},"3926":{"position":[[247,2]]},"3930":{"position":[[1351,2]]},"3932":{"position":[[1150,2],[1252,2]]},"3936":{"position":[[678,2]]},"3940":{"position":[[505,2]]},"3942":{"position":[[411,2]]},"3944":{"position":[[359,2]]},"3950":{"position":[[569,2]]},"3966":{"position":[[716,2],[782,2]]},"3968":{"position":[[557,2],[627,2]]},"3974":{"position":[[321,2],[492,2]]},"3978":{"position":[[758,2]]},"3982":{"position":[[243,2]]},"3986":{"position":[[1409,2]]},"3990":{"position":[[440,2]]},"3992":{"position":[[2149,2],[2216,2]]},"3996":{"position":[[692,2],[752,2],[1762,2]]},"3998":{"position":[[623,2],[646,2],[699,2]]},"4000":{"position":[[889,2]]},"4006":{"position":[[283,2],[305,2],[422,2]]}}}],["出现异常",{"_index":2165,"t":{"336":{"position":[[362,4]]},"1931":{"position":[[24,4]]},"2472":{"position":[[16,4]]},"3414":{"position":[[194,4]]},"3426":{"position":[[121,4]]},"3912":{"position":[[2056,4],[2122,4]]},"3922":{"position":[[1320,4]]},"3960":{"position":[[574,4]]},"3964":{"position":[[512,4]]}}}],["出生",{"_index":9365,"t":{"3926":{"position":[[64,2]]}}}],["出错",{"_index":186,"t":{"11":{"position":[[837,2]]},"300":{"position":[[190,2]]},"457":{"position":[[46,2]]},"1578":{"position":[[49,2]]},"1807":{"position":[[694,2]]},"1832":{"position":[[77,2]]},"1849":{"position":[[33,2]]},"1869":{"position":[[217,2]]},"2191":{"position":[[50,2]]},"2193":{"position":[[112,2]]},"2195":{"position":[[42,2]]},"2197":{"position":[[104,2]]},"2294":{"position":[[885,2]]},"2684":{"position":[[376,2]]},"3017":{"position":[[121,2]]},"3287":{"position":[[263,2],[588,2]]},"3329":{"position":[[85,2]]},"3352":{"position":[[572,2]]},"3452":{"position":[[4050,2]]},"3798":{"position":[[506,2],[538,2]]},"3808":{"position":[[3106,2]]},"3810":{"position":[[829,2],[871,2],[902,2]]},"3828":{"position":[[716,2]]},"3832":{"position":[[391,2],[747,2],[1811,2],[3378,2],[3572,2]]},"3912":{"position":[[2342,2]]},"3914":{"position":[[3464,2]]},"3916":{"position":[[7046,2]]},"3946":{"position":[[270,2]]},"3966":{"position":[[1868,2]]},"3980":{"position":[[306,2]]},"3986":{"position":[[1268,2]]},"3992":{"position":[[625,2],[1695,2]]},"3994":{"position":[[992,2]]},"3998":{"position":[[553,2],[598,2]]}}}],["出错率",{"_index":6798,"t":{"2682":{"position":[[44,3]]}}}],["击",{"_index":9381,"t":{"3926":{"position":[[129,1]]}}}],["函数",{"_index":2413,"t":{"401":{"position":[[80,2]]},"587":{"position":[[692,2]]},"801":{"position":[[11,2],[46,2],[58,2],[68,2]]},"807":{"position":[[12,2],[24,2],[37,2]]},"810":{"position":[[334,2]]},"812":{"position":[[358,2]]},"814":{"position":[[331,2]]},"816":{"position":[[355,2]]},"818":{"position":[[28,2],[59,2]]},"822":{"position":[[28,2],[221,2]]},"826":{"position":[[29,2]]},"836":{"position":[[21,2],[322,2],[382,2]]},"939":{"position":[[47,2]]},"949":{"position":[[837,2]]},"1103":{"position":[[199,2]]},"1131":{"position":[[26,2]]},"1200":{"position":[[12,2]]},"1267":{"position":[[136,2],[200,2],[267,2]]},"1275":{"position":[[181,2],[245,2]]},"1763":{"position":[[80,2],[215,2]]},"1765":{"position":[[133,2]]},"1809":{"position":[[52,2]]},"3350":{"position":[[96,2]]},"3352":{"position":[[575,2]]},"3832":{"position":[[42,2]]}}}],["函数参数",{"_index":4014,"t":{"1131":{"position":[[184,4]]},"1903":{"position":[[270,4]]},"1909":{"position":[[868,4]]},"3798":{"position":[[246,4]]}}}],["分",{"_index":2635,"t":{"472":{"position":[[5,1]]},"474":{"position":[[5,1]]},"476":{"position":[[7,1]]},"478":{"position":[[8,1]]},"482":{"position":[[552,1]]},"484":{"position":[[119,1],[167,1],[220,1],[281,1]]},"2418":{"position":[[200,1],[274,1],[852,1],[997,1]]},"2420":{"position":[[751,1],[760,1],[1894,1]]},"3108":{"position":[[34,1]]},"3110":{"position":[[43,1],[61,1]]},"3118":{"position":[[308,1]]}}}],["分为",{"_index":2630,"t":{"469":{"position":[[32,2]]},"1046":{"position":[[8,2]]},"2418":{"position":[[32,2]]},"3088":{"position":[[186,2]]},"3090":{"position":[[7,2]]},"3092":{"position":[[34,2]]},"3098":{"position":[[64,2]]},"3612":{"position":[[108,2]]}}}],["分享",{"_index":922,"t":{"121":{"position":[[600,2]]},"168":{"position":[[18,2]]},"3138":{"position":[[107,2]]}}}],["分别",{"_index":2276,"t":{"355":{"position":[[70,2]]},"482":{"position":[[634,2],[686,2]]},"567":{"position":[[47,2]]},"933":{"position":[[47,2]]},"1405":{"position":[[17,2]]},"1412":{"position":[[135,2]]},"2418":{"position":[[941,2]]},"2774":{"position":[[29,2]]},"2817":{"position":[[34,2]]},"2921":{"position":[[35,2]]},"3094":{"position":[[9,2]]},"3434":{"position":[[1659,2],[1863,2]]},"3842":{"position":[[257,2],[887,2],[1452,2],[2042,2],[2683,2],[3300,2]]},"3844":{"position":[[263,2]]},"3846":{"position":[[503,2]]}}}],["分割",{"_index":7052,"t":{"2788":{"position":[[166,2]]},"2875":{"position":[[474,2]]},"3930":{"position":[[478,2]]},"3936":{"position":[[327,2]]},"3966":{"position":[[928,2]]}}}],["分层",{"_index":2537,"t":{"441":{"position":[[30,2]]},"2723":{"position":[[54,2]]},"3131":{"position":[[21,2]]},"3992":{"position":[[3249,2]]}}}],["分布",{"_index":7437,"t":{"3118":{"position":[[31,2]]}}}],["分布式",{"_index":1658,"t":{"227":{"position":[[29,3],[35,3]]},"239":{"position":[[0,3],[43,3],[111,3],[144,3],[199,3],[243,3]]},"241":{"position":[[16,3],[78,3],[150,3]]},"243":{"position":[[29,3]]},"245":{"position":[[0,3],[75,3],[87,3],[119,3],[168,3],[210,3],[237,3]]},"247":{"position":[[0,3],[53,3]]},"249":{"position":[[26,3]]},"251":{"position":[[41,3],[64,3]]},"253":{"position":[[323,3],[683,3]]},"255":{"position":[[207,3],[265,3]]},"257":{"position":[[35,3],[62,3]]},"488":{"position":[[30,3]]},"1699":{"position":[[120,3]]},"1837":{"position":[[134,3]]},"1839":{"position":[[119,3]]},"1896":{"position":[[54,3]]},"2328":{"position":[[3,3]]},"2331":{"position":[[178,3]]},"2333":{"position":[[13,3]]},"2599":{"position":[[13,3]]},"2619":{"position":[[87,3]]},"2823":{"position":[[30,3]]},"2843":{"position":[[223,3]]},"2854":{"position":[[3,3]]},"3088":{"position":[[95,3]]},"3096":{"position":[[136,3]]},"3116":{"position":[[2,3],[29,3]]},"3287":{"position":[[713,3],[768,3],[866,3],[951,3],[1034,3],[3039,3],[3073,3],[3155,3]]},"3291":{"position":[[12,3],[1262,3]]},"3922":{"position":[[351,3]]},"3966":{"position":[[493,3]]},"3968":{"position":[[221,3]]},"3972":{"position":[[533,3]]},"3976":{"position":[[96,3],[509,3]]},"3982":{"position":[[642,3]]},"3984":{"position":[[752,3]]}}}],["分库",{"_index":7377,"t":{"3086":{"position":[[39,2]]},"3088":{"position":[[20,2]]},"3090":{"position":[[13,2]]},"3096":{"position":[[99,2],[133,2]]},"3098":{"position":[[69,2]]},"3100":{"position":[[95,2]]},"3108":{"position":[[217,2]]},"3114":{"position":[[10,2],[23,2]]},"3124":{"position":[[18,2]]},"3126":{"position":[[9,2],[84,2]]},"3922":{"position":[[1500,2]]},"3964":{"position":[[644,2]]}}}],["分开",{"_index":5805,"t":{"1903":{"position":[[449,2]]},"2809":{"position":[[54,2]]},"2965":{"position":[[40,2]]}}}],["分成",{"_index":7392,"t":{"3092":{"position":[[157,2]]},"3100":{"position":[[10,2]]},"3106":{"position":[[18,2]]}}}],["分支",{"_index":2360,"t":{"392":{"position":[[0,2]]},"1488":{"position":[[1662,2],[1705,2]]},"3352":{"position":[[119,2],[507,2],[544,2],[587,2]]}}}],["分散",{"_index":1613,"t":{"220":{"position":[[207,2],[781,2]]}}}],["分析",{"_index":597,"t":{"98":{"position":[[74,2]]},"182":{"position":[[249,2]]},"801":{"position":[[18,2]]},"1631":{"position":[[54,2]]},"3407":{"position":[[17,2]]},"3414":{"position":[[251,2],[266,2]]}}}],["分析测试",{"_index":1275,"t":{"182":{"position":[[106,4]]}}}],["分片",{"_index":7411,"t":{"3104":{"position":[[58,2]]},"3106":{"position":[[31,2]]},"3108":{"position":[[69,2],[100,2],[125,2]]},"3110":{"position":[[105,2],[128,2],[140,2],[154,2],[161,2],[175,2],[206,2],[211,2],[238,2]]},"3112":{"position":[[31,2]]},"3120":{"position":[[61,2],[69,2],[84,2],[94,2],[116,2],[137,2]]}}}],["分离",{"_index":1968,"t":{"300":{"position":[[82,2],[107,2]]},"502":{"position":[[62,2]]},"504":{"position":[[276,2]]},"943":{"position":[[56,2]]},"949":{"position":[[294,2]]},"1031":{"position":[[5,2]]},"1048":{"position":[[96,2],[112,2]]},"1052":{"position":[[24,2],[62,2]]},"1064":{"position":[[229,2]]},"1066":{"position":[[831,2]]},"1653":{"position":[[15,2]]},"1894":{"position":[[68,2]]},"1896":{"position":[[15,2]]},"3608":{"position":[[78,2]]},"3962":{"position":[[2076,2]]},"3968":{"position":[[41,2],[410,2]]}}}],["分类",{"_index":4934,"t":{"1520":{"position":[[406,2]]},"2041":{"position":[[25,2]]},"3092":{"position":[[47,2]]},"3460":{"position":[[99,2]]}}}],["分级管理",{"_index":7398,"t":{"3096":{"position":[[42,4]]}}}],["分组",{"_index":2102,"t":{"319":{"position":[[167,2]]},"325":{"position":[[36,2],[91,2],[185,2]]},"1048":{"position":[[88,2]]},"1578":{"position":[[131,2]]},"1580":{"position":[[408,2]]},"1641":{"position":[[238,2]]},"1657":{"position":[[24,2],[63,2]]},"1659":{"position":[[23,2],[516,2],[697,2]]},"3063":{"position":[[111,2],[479,2],[845,2],[878,2],[1365,2],[1375,2],[1478,2],[1504,2],[1539,2],[1570,2],[1599,2],[1624,2]]},"3065":{"position":[[91,2],[117,2]]},"3148":{"position":[[13,2]]},"3183":{"position":[[15,2]]},"3185":{"position":[[16,2],[21,2]]},"3187":{"position":[[21,2]]},"3634":{"position":[[12,2]]},"3638":{"position":[[1,2],[61,2],[257,2]]},"3640":{"position":[[10,2],[408,2],[436,2],[461,2],[701,2]]},"3642":{"position":[[34,2],[165,2],[191,2]]},"3644":{"position":[[23,2],[516,2],[697,2]]},"3658":{"position":[[15,2],[43,2]]},"3660":{"position":[[36,2]]},"3670":{"position":[[21,2],[87,2]]},"3690":{"position":[[65,2]]},"3706":{"position":[[103,2],[471,2],[837,2],[870,2],[1376,2],[1386,2],[1489,2],[1515,2],[1550,2],[1581,2],[1610,2],[1635,2],[1839,2],[1865,2]]},"3922":{"position":[[2324,2]]},"3924":{"position":[[248,2],[3526,2]]},"3938":{"position":[[37,2],[44,2],[827,2],[869,2]]},"3966":{"position":[[1278,2]]},"3982":{"position":[[585,2]]},"3992":{"position":[[58,2]]}}}],["分表",{"_index":7378,"t":{"3086":{"position":[[41,2]]},"3088":{"position":[[22,2]]},"3090":{"position":[[18,2]]},"3098":{"position":[[74,2]]},"3102":{"position":[[50,2]]},"3106":{"position":[[51,2],[63,2],[77,2]]},"3114":{"position":[[12,2],[25,2]]},"3124":{"position":[[20,2]]},"3126":{"position":[[7,2],[82,2]]},"3209":{"position":[[123,2]]},"3211":{"position":[[46,2]]},"3922":{"position":[[1498,2]]},"3964":{"position":[[642,2]]}}}],["分配",{"_index":9866,"t":{"3968":{"position":[[352,2]]}}}],["分钟",{"_index":994,"t":{"127":{"position":[[1205,2],[1212,2]]},"144":{"position":[[364,2]]},"152":{"position":[[718,2]]},"482":{"position":[[102,2],[344,2],[535,2],[557,2],[599,2],[617,2],[657,2],[683,2]]},"1474":{"position":[[444,2]]},"2418":{"position":[[858,2],[925,2]]},"2420":{"position":[[373,2],[416,2],[463,2],[1230,2],[1391,2],[1590,2],[1706,2],[1793,2]]},"2424":{"position":[[124,2]]},"3039":{"position":[[320,2],[329,2]]},"3041":{"position":[[416,2],[423,2]]},"3962":{"position":[[577,2]]}}}],["分隔",{"_index":3833,"t":{"960":{"position":[[692,2]]}}}],["分隔符",{"_index":2536,"t":{"441":{"position":[[24,3]]},"1592":{"position":[[239,3]]},"1594":{"position":[[300,3]]},"1655":{"position":[[39,3]]},"1661":{"position":[[331,3],[366,3]]},"2788":{"position":[[161,3]]},"3023":{"position":[[328,3],[363,3]]},"3918":{"position":[[3626,3]]}}}],["分页",{"_index":7445,"t":{"3120":{"position":[[21,2],[39,2]]},"3273":{"position":[[5,2]]},"3962":{"position":[[1188,2]]},"3966":{"position":[[2024,2]]}}}],["切",{"_index":7413,"t":{"3106":{"position":[[17,1]]}}}],["切分",{"_index":7384,"t":{"3088":{"position":[[182,2],[191,2],[198,2]]},"3090":{"position":[[2,2]]},"3094":{"position":[[169,2]]},"3096":{"position":[[66,2],[165,2]]},"3098":{"position":[[14,2],[17,2],[52,2],[59,2]]},"3106":{"position":[[7,2]]},"3108":{"position":[[13,2]]},"3110":{"position":[[14,2]]},"3118":{"position":[[0,2],[22,2]]}}}],["切割",{"_index":5175,"t":{"1641":{"position":[[84,2]]}}}],["切割成",{"_index":3720,"t":{"887":{"position":[[242,3]]},"1592":{"position":[[270,3]]},"1594":{"position":[[348,3]]},"1647":{"position":[[28,3]]}}}],["切换",{"_index":3327,"t":{"683":{"position":[[41,2]]},"903":{"position":[[33,2]]},"905":{"position":[[3,2],[107,2],[211,2]]},"907":{"position":[[3,2],[101,2],[199,2]]},"909":{"position":[[3,2],[96,2],[189,2]]},"943":{"position":[[48,2]]},"990":{"position":[[24,2]]},"1031":{"position":[[208,2]]},"1035":{"position":[[50,2]]},"1037":{"position":[[2,2],[12,2],[110,2],[208,2]]},"1052":{"position":[[41,2]]},"1202":{"position":[[43,2]]},"1204":{"position":[[235,2]]},"1206":{"position":[[88,2]]},"1210":{"position":[[106,2]]},"1212":{"position":[[60,2]]},"1271":{"position":[[13,2]]},"1277":{"position":[[51,2],[121,2]]},"1389":{"position":[[31,2]]},"1551":{"position":[[28,2]]},"2517":{"position":[[124,2]]},"2544":{"position":[[14,2],[20,2],[111,2]]},"2547":{"position":[[125,2]]},"3126":{"position":[[93,2],[163,2],[257,2],[424,2]]},"3224":{"position":[[234,2],[1720,2]]},"3258":{"position":[[572,2]]},"3319":{"position":[[54,2]]},"3636":{"position":[[706,2]]},"3942":{"position":[[80,2]]},"3962":{"position":[[206,2]]},"3984":{"position":[[608,2]]},"3986":{"position":[[1555,2]]}}}],["切面",{"_index":610,"t":{"98":{"position":[[157,2]]},"1424":{"position":[[107,2]]},"1430":{"position":[[4,2]]},"1892":{"position":[[64,2],[112,2]]},"1894":{"position":[[47,2]]},"2564":{"position":[[128,2]]},"2591":{"position":[[11,2]]}}}],["划分",{"_index":7388,"t":{"3092":{"position":[[53,2]]},"3638":{"position":[[21,2]]}}}],["列",{"_index":2989,"t":{"570":{"position":[[1852,1],[2197,1],[2488,1]]},"653":{"position":[[165,1]]},"769":{"position":[[440,1]]},"1358":{"position":[[63,1]]},"1785":{"position":[[14,1]]},"3269":{"position":[[507,1]]},"3966":{"position":[[1092,1]]}}}],["列举",{"_index":2152,"t":{"336":{"position":[[181,2]]},"810":{"position":[[428,2]]},"812":{"position":[[460,2]]},"814":{"position":[[424,2]]},"816":{"position":[[456,2]]},"1111":{"position":[[460,2]]},"1113":{"position":[[458,2]]},"1115":{"position":[[467,2]]},"1117":{"position":[[4705,2]]},"1119":{"position":[[429,2]]},"1121":{"position":[[461,2]]},"1123":{"position":[[392,2]]},"1129":{"position":[[1783,2]]},"1196":{"position":[[118,2]]},"1198":{"position":[[127,2]]},"2373":{"position":[[211,2]]},"3138":{"position":[[126,2]]},"3301":{"position":[[45,2]]}}}],["列出",{"_index":2689,"t":{"482":{"position":[[646,2]]},"836":{"position":[[328,2]]},"2418":{"position":[[956,2]]}}}],["列名",{"_index":5480,"t":{"1785":{"position":[[11,2],[57,2]]}}}],["列支敦士登",{"_index":6564,"t":{"2559":{"position":[[1258,5]]}}}],["列表",{"_index":817,"t":{"114":{"position":[[1148,2]]},"127":{"position":[[1472,2]]},"367":{"position":[[188,2],[225,2]]},"369":{"position":[[281,2]]},"382":{"position":[[15,2]]},"384":{"position":[[89,2]]},"415":{"position":[[89,2]]},"587":{"position":[[1009,2]]},"1511":{"position":[[181,2]]},"1539":{"position":[[1927,2]]},"1598":{"position":[[60,2],[94,2],[115,2],[139,2]]},"1661":{"position":[[709,2],[825,2]]},"2261":{"position":[[410,2]]},"2522":{"position":[[109,2]]},"2526":{"position":[[176,2]]},"2991":{"position":[[95,2]]},"3023":{"position":[[706,2],[822,2]]},"3033":{"position":[[79,2]]},"3063":{"position":[[326,2],[355,2],[630,2],[730,2]]},"3094":{"position":[[102,2]]},"3244":{"position":[[10,2]]},"3323":{"position":[[500,2]]},"3446":{"position":[[1623,2]]},"3464":{"position":[[458,2]]},"3646":{"position":[[139,2],[168,2]]},"3706":{"position":[[318,2],[347,2],[622,2],[722,2]]},"3793":{"position":[[84,2],[230,2]]},"3830":{"position":[[210,2],[327,2]]},"3928":{"position":[[2185,2]]}}}],["刘",{"_index":4837,"t":{"1511":{"position":[[3167,1],[3197,1]]}}}],["刚",{"_index":4664,"t":{"1511":{"position":[[1072,1]]}}}],["刚刚",{"_index":2021,"t":{"308":{"position":[[122,2]]},"310":{"position":[[120,2]]},"1545":{"position":[[0,2]]},"2542":{"position":[[10,2]]},"3339":{"position":[[129,2]]}}}],["刚好",{"_index":495,"t":{"85":{"position":[[182,2]]}}}],["创建",{"_index":37,"t":{"3":{"position":[[311,2],[888,2]]},"5":{"position":[[52,2]]},"7":{"position":[[48,2]]},"9":{"position":[[48,2]]},"13":{"position":[[396,2]]},"21":{"position":[[109,2]]},"23":{"position":[[91,2]]},"53":{"position":[[136,2]]},"64":{"position":[[175,2]]},"77":{"position":[[136,2]]},"121":{"position":[[214,2],[282,2]]},"133":{"position":[[49,2]]},"188":{"position":[[0,2]]},"206":{"position":[[128,2]]},"216":{"position":[[34,2]]},"220":{"position":[[175,2],[250,2],[862,2]]},"235":{"position":[[59,2]]},"237":{"position":[[1331,2]]},"247":{"position":[[102,2],[145,2],[189,2],[408,2]]},"263":{"position":[[44,2]]},"270":{"position":[[3,2],[50,2],[103,2]]},"308":{"position":[[102,2]]},"310":{"position":[[100,2]]},"340":{"position":[[127,2],[162,2],[554,2],[776,2],[1017,2]]},"378":{"position":[[74,2]]},"397":{"position":[[31,2]]},"506":{"position":[[214,2]]},"510":{"position":[[486,2]]},"617":{"position":[[1375,2]]},"732":{"position":[[280,2]]},"822":{"position":[[0,2]]},"929":{"position":[[245,2],[447,2],[600,2],[743,2]]},"933":{"position":[[407,2]]},"986":{"position":[[117,2]]},"988":{"position":[[485,2]]},"1020":{"position":[[16,2]]},"1062":{"position":[[0,2],[97,2]]},"1151":{"position":[[513,2]]},"1214":{"position":[[126,2]]},"1360":{"position":[[25,2]]},"1383":{"position":[[288,2]]},"1385":{"position":[[38,2]]},"1394":{"position":[[148,2]]},"1399":{"position":[[20,2]]},"1401":{"position":[[21,2]]},"1403":{"position":[[10,2]]},"1408":{"position":[[0,2],[513,2]]},"1410":{"position":[[0,2],[528,2]]},"1412":{"position":[[280,2]]},"1414":{"position":[[45,2],[449,2]]},"1418":{"position":[[130,2],[280,2]]},"1424":{"position":[[455,2]]},"1432":{"position":[[21,2],[76,2],[128,2],[196,2]]},"1438":{"position":[[6,2]]},"1483":{"position":[[14,2]]},"1549":{"position":[[75,2],[119,2]]},"1580":{"position":[[63,2],[397,2]]},"1584":{"position":[[0,2]]},"1707":{"position":[[12,2]]},"1711":{"position":[[339,2]]},"1726":{"position":[[22,2]]},"1755":{"position":[[57,2]]},"1775":{"position":[[37,2],[76,2]]},"1781":{"position":[[499,2]]},"1795":{"position":[[402,2],[664,2],[1911,2],[3081,2]]},"1797":{"position":[[476,2]]},"1801":{"position":[[153,2],[1232,2],[1315,2],[1387,2],[1499,2],[3219,2],[3311,2]]},"1803":{"position":[[76,2],[2333,2],[3426,2],[3531,2],[3906,2],[5524,2]]},"1811":{"position":[[99,2],[500,2]]},"1819":{"position":[[33,2]]},"1823":{"position":[[38,2]]},"1907":{"position":[[307,2],[441,2]]},"1969":{"position":[[124,2]]},"1973":{"position":[[23,2],[86,2]]},"1981":{"position":[[43,2]]},"1983":{"position":[[36,2]]},"1987":{"position":[[23,2],[86,2]]},"1993":{"position":[[43,2]]},"2006":{"position":[[36,2]]},"2010":{"position":[[31,2],[94,2]]},"2016":{"position":[[51,2]]},"2167":{"position":[[3,2]]},"2171":{"position":[[3,2],[52,2]]},"2175":{"position":[[181,2],[196,2]]},"2231":{"position":[[91,2]]},"2290":{"position":[[48,2]]},"2292":{"position":[[48,2]]},"2296":{"position":[[396,2]]},"2313":{"position":[[0,2],[147,2]]},"2315":{"position":[[52,2],[144,2]]},"2354":{"position":[[90,2]]},"2379":{"position":[[569,2]]},"2474":{"position":[[33,2]]},"2486":{"position":[[71,2]]},"2497":{"position":[[168,2]]},"2538":{"position":[[146,2]]},"2579":{"position":[[602,2]]},"2625":{"position":[[375,2]]},"2651":{"position":[[18,2]]},"2725":{"position":[[2189,2]]},"2772":{"position":[[36,2]]},"2774":{"position":[[446,2]]},"2788":{"position":[[12,2]]},"2803":{"position":[[100,2]]},"2805":{"position":[[24,2]]},"2807":{"position":[[8,2],[118,2]]},"2811":{"position":[[44,2]]},"2813":{"position":[[3,2],[685,2]]},"2831":{"position":[[57,2]]},"2836":{"position":[[840,2],[963,2]]},"2860":{"position":[[69,2]]},"2862":{"position":[[60,2],[213,2],[364,2],[425,2]]},"2864":{"position":[[23,2],[60,2]]},"2866":{"position":[[13,2]]},"2875":{"position":[[6,2],[651,2]]},"2887":{"position":[[0,2]]},"2897":{"position":[[112,2]]},"2901":{"position":[[9,2]]},"2905":{"position":[[81,2]]},"3071":{"position":[[214,2]]},"3189":{"position":[[21,2]]},"3215":{"position":[[0,2]]},"3244":{"position":[[2,2]]},"3289":{"position":[[20,2]]},"3291":{"position":[[609,2],[951,2],[1727,2]]},"3315":{"position":[[34,2]]},"3323":{"position":[[50,2],[203,2]]},"3327":{"position":[[40,2]]},"3339":{"position":[[131,2]]},"3385":{"position":[[9,2],[18,2]]},"3397":{"position":[[39,2]]},"3399":{"position":[[33,2],[99,2],[308,2]]},"3418":{"position":[[73,2]]},"3424":{"position":[[36,2],[85,2]]},"3432":{"position":[[620,2],[685,2],[1422,2],[4559,2]]},"3434":{"position":[[65,2]]},"3470":{"position":[[92,2]]},"3579":{"position":[[70,2],[149,2]]},"3601":{"position":[[52,2]]},"3727":{"position":[[12,2]]},"3779":{"position":[[40,2],[177,2],[209,2],[228,2],[289,2],[371,2],[461,2],[539,2],[585,2],[1384,2]]},"3791":{"position":[[594,2],[1359,2],[1372,2]]},"3795":{"position":[[285,2]]},"3802":{"position":[[39,2],[174,2],[210,2],[232,2],[309,2],[407,2],[510,2],[595,2],[641,2],[2006,2]]},"3804":{"position":[[88,2],[113,2],[185,2],[260,2],[433,2],[499,2],[568,2],[666,2],[726,2],[787,2],[846,2],[907,2],[972,2],[1035,2]]},"3806":{"position":[[294,2],[1685,2]]},"3817":{"position":[[40,2],[183,2],[221,2],[227,2],[494,2],[540,2],[2604,2]]},"3912":{"position":[[1338,2],[1389,2],[1440,2]]},"3914":{"position":[[2543,2],[3355,2]]},"3916":{"position":[[1710,2]]},"3922":{"position":[[454,2],[1661,2]]},"3952":{"position":[[544,2]]},"3956":{"position":[[3160,2]]},"3966":{"position":[[1858,2]]},"3970":{"position":[[291,2]]},"3974":{"position":[[24,2]]},"3976":{"position":[[222,2]]},"3992":{"position":[[3361,2]]}}}],["创建人",{"_index":5464,"t":{"1775":{"position":[[33,3]]}}}],["创建对象",{"_index":4203,"t":{"1387":{"position":[[15,4]]},"1396":{"position":[[11,4]]},"3824":{"position":[[185,4]]}}}],["创收",{"_index":4536,"t":{"1509":{"position":[[122,2]]}}}],["创新",{"_index":7195,"t":{"2910":{"position":[[75,2]]}}}],["创造",{"_index":510,"t":{"85":{"position":[[267,2]]},"336":{"position":[[20,2]]},"1286":{"position":[[63,2]]},"1389":{"position":[[85,2]]},"1580":{"position":[[54,2]]},"2862":{"position":[[404,2]]}}}],["初",{"_index":3913,"t":{"1052":{"position":[[16,1]]},"2621":{"position":[[14,1]]},"2768":{"position":[[17,1]]},"3926":{"position":[[2,1],[552,1]]}}}],["初始",{"_index":5246,"t":{"1685":{"position":[[331,2]]},"1799":{"position":[[1003,2]]},"3912":{"position":[[1024,2]]},"3946":{"position":[[321,2]]}}}],["初始化",{"_index":78,"t":{"3":{"position":[[923,3]]},"261":{"position":[[71,3]]},"340":{"position":[[391,3]]},"455":{"position":[[873,3]]},"941":{"position":[[112,3],[225,3]]},"943":{"position":[[8,3]]},"1018":{"position":[[33,3]]},"1064":{"position":[[363,3]]},"1066":{"position":[[955,3]]},"1141":{"position":[[36,3]]},"1143":{"position":[[92,3]]},"1368":{"position":[[31,3],[407,3]]},"1392":{"position":[[96,3]]},"1539":{"position":[[1654,3]]},"1557":{"position":[[11,3]]},"1566":{"position":[[112,3]]},"2167":{"position":[[7,3]]},"2206":{"position":[[22,3]]},"2315":{"position":[[13,3]]},"2402":{"position":[[8,3],[38,3]]},"2446":{"position":[[22,3]]},"2899":{"position":[[45,3]]},"3194":{"position":[[392,3]]},"3371":{"position":[[417,3]]},"3824":{"position":[[32,3]]},"3922":{"position":[[2021,3],[2268,3]]},"3924":{"position":[[2792,3],[3165,3]]},"3942":{"position":[[365,3]]},"3970":{"position":[[347,3]]},"3996":{"position":[[462,3]]}}}],["初始状态",{"_index":4096,"t":{"1277":{"position":[[199,4]]}}}],["初学者",{"_index":4842,"t":{"1511":{"position":[[3235,3]]}}}],["初期",{"_index":4018,"t":{"1141":{"position":[[64,2]]}}}],["初衷",{"_index":511,"t":{"85":{"position":[[272,2]]}}}],["删",{"_index":3791,"t":{"933":{"position":[[394,1]]},"3124":{"position":[[27,1]]},"3213":{"position":[[44,1],[60,1]]}}}],["删除",{"_index":1790,"t":{"243":{"position":[[213,2]]},"278":{"position":[[131,2],[171,2],[211,2],[242,2],[269,2]]},"314":{"position":[[578,2]]},"323":{"position":[[19,2],[116,2]]},"433":{"position":[[184,2]]},"552":{"position":[[463,2]]},"565":{"position":[[179,2],[198,2]]},"570":{"position":[[838,2],[2016,2],[2361,2],[2652,2],[2686,2]]},"732":{"position":[[288,2]]},"763":{"position":[[309,2]]},"767":{"position":[[211,2],[442,2]]},"769":{"position":[[9,2]]},"773":{"position":[[210,2]]},"791":{"position":[[68,2]]},"793":{"position":[[55,2],[145,2]]},"841":{"position":[[43,2]]},"846":{"position":[[717,2]]},"1008":{"position":[[38,2],[104,2]]},"1372":{"position":[[23,2]]},"1444":{"position":[[23,2]]},"1483":{"position":[[888,2]]},"1605":{"position":[[257,2]]},"1815":{"position":[[83,2],[582,2]]},"2508":{"position":[[60,2]]},"2510":{"position":[[86,2]]},"2512":{"position":[[134,2]]},"2655":{"position":[[7,2]]},"2670":{"position":[[0,2]]},"2764":{"position":[[86,2]]},"2836":{"position":[[1126,2],[1246,2],[1282,2]]},"2846":{"position":[[239,2]]},"2852":{"position":[[165,2]]},"2937":{"position":[[1042,2],[1489,2]]},"3082":{"position":[[299,2]]},"3148":{"position":[[122,2]]},"3224":{"position":[[1233,2]]},"3258":{"position":[[359,2]]},"3271":{"position":[[25,2],[109,2],[168,2],[240,2]]},"3430":{"position":[[1727,2]]},"3620":{"position":[[429,2]]},"3770":{"position":[[3250,2]]},"3772":{"position":[[24,2]]},"3783":{"position":[[1636,2]]},"3785":{"position":[[521,2],[1073,2]]},"3812":{"position":[[797,2],[1607,2]]},"3819":{"position":[[910,2],[992,2],[1076,2],[1079,2],[1683,2]]},"3844":{"position":[[1112,2],[1178,2],[1336,2]]},"3846":{"position":[[496,2]]},"3854":{"position":[[46,2]]},"3910":{"position":[[2108,2]]},"3918":{"position":[[1097,2]]},"3962":{"position":[[515,2],[519,2]]},"3964":{"position":[[566,2]]},"3966":{"position":[[1178,2]]},"3972":{"position":[[600,2]]},"3974":{"position":[[733,2]]},"3984":{"position":[[903,2]]},"3986":{"position":[[1137,2]]},"3992":{"position":[[3368,2]]},"3994":{"position":[[388,2]]},"3996":{"position":[[967,2]]}}}],["判",{"_index":4467,"t":{"1488":{"position":[[1026,1]]},"1499":{"position":[[418,1]]}}}],["判定",{"_index":7940,"t":{"3350":{"position":[[76,2]]},"3405":{"position":[[12,2]]}}}],["判断",{"_index":753,"t":{"112":{"position":[[1393,2]]},"119":{"position":[[95,2]]},"127":{"position":[[708,2]]},"135":{"position":[[389,2]]},"148":{"position":[[346,2]]},"280":{"position":[[131,2]]},"570":{"position":[[1657,2]]},"639":{"position":[[423,2]]},"730":{"position":[[154,2]]},"732":{"position":[[77,2]]},"960":{"position":[[282,2]]},"1267":{"position":[[254,2]]},"1539":{"position":[[1889,2]]},"1753":{"position":[[312,2]]},"1801":{"position":[[2407,2]]},"1803":{"position":[[4362,2]]},"1919":{"position":[[369,2]]},"1925":{"position":[[1255,2]]},"1941":{"position":[[613,2]]},"2055":{"position":[[3,2],[72,2],[139,2],[205,2]]},"2472":{"position":[[34,2],[93,2]]},"2790":{"position":[[820,2]]},"2796":{"position":[[354,2],[497,2]]},"3287":{"position":[[3032,2],[3148,2]]},"3399":{"position":[[349,2],[914,2]]},"3405":{"position":[[56,2]]},"3434":{"position":[[1698,2],[1902,2]]},"3934":{"position":[[298,2]]},"3936":{"position":[[758,2]]},"3966":{"position":[[1065,2]]},"3978":{"position":[[1079,2]]},"3986":{"position":[[530,2]]},"4000":{"position":[[202,2],[387,2],[778,2]]}}}],["利于",{"_index":4201,"t":{"1385":{"position":[[122,2]]}}}],["利器",{"_index":7130,"t":{"2856":{"position":[[27,2]]}}}],["利比亚",{"_index":6449,"t":{"2559":{"position":[[185,3]]}}}],["利用",{"_index":870,"t":{"121":{"position":[[108,2]]},"1103":{"position":[[146,2]]},"1117":{"position":[[11,2]]},"1479":{"position":[[0,2]]},"1717":{"position":[[34,2]]},"3118":{"position":[[205,2]]},"3399":{"position":[[9,2]]}}}],["别人",{"_index":5006,"t":{"1551":{"position":[[1128,2]]},"3626":{"position":[[145,2]]}}}],["别名",{"_index":4284,"t":{"1416":{"position":[[334,2],[339,2],[366,2]]},"1420":{"position":[[808,2]]},"3001":{"position":[[350,2]]},"3539":{"position":[[519,2]]},"3541":{"position":[[496,2]]},"3992":{"position":[[1865,2]]}}}],["到处",{"_index":3050,"t":{"585":{"position":[[534,2]]},"2538":{"position":[[105,2]]}}}],["到底",{"_index":2682,"t":{"482":{"position":[[441,2]]},"2418":{"position":[[735,2]]}}}],["到手",{"_index":1472,"t":{"199":{"position":[[210,2]]}}}],["到期",{"_index":8366,"t":{"3579":{"position":[[245,2]]}}}],["到来",{"_index":5434,"t":{"1761":{"position":[[143,2]]}}}],["到达",{"_index":886,"t":{"121":{"position":[[255,2]]},"1911":{"position":[[16,2]]},"2311":{"position":[[411,2]]}}}],["制",{"_index":9189,"t":{"3916":{"position":[[2724,1],[2734,1]]}}}],["制作",{"_index":7896,"t":{"3307":{"position":[[266,2]]}}}],["制定",{"_index":6196,"t":{"2341":{"position":[[77,2]]}}}],["刷",{"_index":500,"t":{"85":{"position":[[197,1]]},"168":{"position":[[84,1]]}}}],["刷新",{"_index":1099,"t":{"144":{"position":[[74,2],[257,2],[350,2]]},"146":{"position":[[385,2],[549,2]]},"148":{"position":[[113,2],[490,2],[532,2],[561,2]]},"152":{"position":[[699,2]]},"329":{"position":[[100,2]]},"463":{"position":[[86,2]]},"741":{"position":[[35,2]]},"747":{"position":[[885,2]]},"2023":{"position":[[173,2]]},"2136":{"position":[[56,2]]},"2245":{"position":[[21,2],[51,2],[127,2]]},"2253":{"position":[[49,2]]},"2973":{"position":[[56,2]]},"3494":{"position":[[158,2]]},"3684":{"position":[[14,2]]},"3912":{"position":[[1897,2]]},"3914":{"position":[[2965,2],[2984,2]]},"3930":{"position":[[569,2],[893,2]]},"3936":{"position":[[746,2]]},"3952":{"position":[[606,2]]},"3958":{"position":[[314,2]]},"3964":{"position":[[391,2]]},"3974":{"position":[[551,2],[582,2]]},"3982":{"position":[[565,2]]},"3984":{"position":[[727,2]]},"3986":{"position":[[79,2],[764,2],[769,2]]},"3990":{"position":[[431,2]]},"3992":{"position":[[1560,2],[2102,2],[2422,2],[3912,2]]},"3994":{"position":[[156,2]]}}}],["前",{"_index":926,"t":{"121":{"position":[[638,1]]},"152":{"position":[[714,1]]},"182":{"position":[[53,1]]},"310":{"position":[[332,1]]},"367":{"position":[[111,1]]},"565":{"position":[[169,1]]},"1383":{"position":[[1,1]]},"1592":{"position":[[80,1]]},"1594":{"position":[[163,1]]},"1617":{"position":[[1199,1]]},"1661":{"position":[[706,1],[822,1]]},"1905":{"position":[[93,1]]},"3023":{"position":[[703,1],[819,1]]},"3261":{"position":[[58,1]]},"3352":{"position":[[170,1],[183,1]]},"3620":{"position":[[133,1],[155,1]]},"3783":{"position":[[60,1]]},"3830":{"position":[[435,1]]},"3908":{"position":[[19,1]]}}}],["前后",{"_index":874,"t":{"121":{"position":[[144,2]]},"300":{"position":[[79,2],[104,2],[114,2]]},"1892":{"position":[[108,2],[129,2]]},"1901":{"position":[[633,2]]},"1927":{"position":[[154,2],[458,2]]},"2564":{"position":[[64,2]]},"3608":{"position":[[75,2],[90,2]]}}}],["前往",{"_index":4414,"t":{"1483":{"position":[[796,2]]}}}],["前所未有",{"_index":5436,"t":{"1761":{"position":[[159,4]]}}}],["前提",{"_index":5907,"t":{"1963":{"position":[[23,2]]}}}],["前端",{"_index":253,"t":{"15":{"position":[[261,2],[271,2]]},"17":{"position":[[255,2],[265,2]]},"148":{"position":[[509,2]]},"199":{"position":[[200,2]]},"300":{"position":[[141,2],[199,2],[271,2]]},"302":{"position":[[109,2]]},"327":{"position":[[54,2],[130,2]]},"413":{"position":[[44,2]]},"419":{"position":[[10,2]]},"1071":{"position":[[83,2]]},"1739":{"position":[[428,2],[438,2]]},"1741":{"position":[[18,2]]},"1745":{"position":[[62,2]]},"2547":{"position":[[61,2]]},"2995":{"position":[[87,2]]},"3608":{"position":[[13,2],[55,2]]},"3626":{"position":[[5,2],[29,2],[88,2]]},"3700":{"position":[[54,2],[130,2]]},"3910":{"position":[[2594,2]]},"3914":{"position":[[3612,2]]},"3924":{"position":[[1749,2]]},"3932":{"position":[[1942,2]]},"3940":{"position":[[243,2],[621,2],[684,2]]},"3942":{"position":[[214,2]]},"3990":{"position":[[720,2]]},"3994":{"position":[[1110,2]]}}}],["前端开发",{"_index":8414,"t":{"3610":{"position":[[3,4]]}}}],["前缀",{"_index":1826,"t":{"249":{"position":[[272,2]]},"516":{"position":[[575,2]]},"698":{"position":[[1032,2]]},"1155":{"position":[[113,2]]},"1661":{"position":[[57,2]]},"2553":{"position":[[191,2]]},"2981":{"position":[[427,2]]},"3023":{"position":[[58,2]]},"3031":{"position":[[191,2]]},"3616":{"position":[[42,2]]},"3698":{"position":[[318,2]]},"3978":{"position":[[247,2]]},"3982":{"position":[[276,2]]},"3984":{"position":[[704,2]]},"3998":{"position":[[364,2]]}}}],["前置",{"_index":5110,"t":{"1598":{"position":[[56,2],[111,2]]}}}],["前者",{"_index":1967,"t":{"300":{"position":[[75,2]]},"552":{"position":[[71,2]]},"2649":{"position":[[65,2]]},"3071":{"position":[[1082,2]]},"3830":{"position":[[72,2]]}}}],["前面",{"_index":1573,"t":{"212":{"position":[[111,2]]},"214":{"position":[[30,2]]},"233":{"position":[[666,2]]},"2251":{"position":[[314,2]]},"2544":{"position":[[129,2]]},"3063":{"position":[[1521,2]]},"3640":{"position":[[431,2]]},"3706":{"position":[[1532,2]]}}}],["剥离",{"_index":3056,"t":{"587":{"position":[[70,2],[2078,2]]},"1387":{"position":[[39,2]]}}}],["剧",{"_index":1214,"t":{"168":{"position":[[94,1]]}}}],["剩余",{"_index":5749,"t":{"1869":{"position":[[309,2]]}}}],["副本",{"_index":1650,"t":{"225":{"position":[[76,2]]}}}],["力",{"_index":4766,"t":{"1511":{"position":[[2260,1]]},"2770":{"position":[[61,1]]}}}],["办公",{"_index":7504,"t":{"3138":{"position":[[98,2]]}}}],["办法",{"_index":7282,"t":{"2965":{"position":[[27,2]]}}}],["功能",{"_index":570,"t":{"95":{"position":[[89,2]]},"108":{"position":[[39,2]]},"112":{"position":[[30,2]]},"114":{"position":[[39,2]]},"204":{"position":[[62,2],[463,2]]},"218":{"position":[[24,2],[290,2]]},"286":{"position":[[87,2]]},"325":{"position":[[38,2]]},"357":{"position":[[33,2]]},"384":{"position":[[3,2],[76,2]]},"404":{"position":[[119,2],[139,2]]},"408":{"position":[[48,2]]},"445":{"position":[[111,2]]},"502":{"position":[[70,2]]},"504":{"position":[[42,2],[310,2]]},"528":{"position":[[327,2]]},"591":{"position":[[33,2]]},"659":{"position":[[0,2],[81,2]]},"728":{"position":[[58,2]]},"741":{"position":[[10,2]]},"777":{"position":[[0,2]]},"791":{"position":[[0,2]]},"799":{"position":[[30,2]]},"879":{"position":[[22,2]]},"885":{"position":[[0,2],[52,2]]},"887":{"position":[[59,2]]},"941":{"position":[[184,2]]},"1010":{"position":[[0,2],[8,2],[80,2]]},"1041":{"position":[[21,2]]},"1075":{"position":[[68,2]]},"1101":{"position":[[30,2]]},"1103":{"position":[[49,2]]},"1155":{"position":[[30,2]]},"1221":{"position":[[91,2]]},"1269":{"position":[[22,2]]},"1279":{"position":[[31,2],[90,2]]},"1302":{"position":[[0,2]]},"1309":{"position":[[22,2],[127,2]]},"1323":{"position":[[0,2]]},"1394":{"position":[[27,2]]},"1428":{"position":[[25,2]]},"1430":{"position":[[26,2]]},"1507":{"position":[[57,2]]},"1511":{"position":[[782,2],[2956,2],[3516,2]]},"1516":{"position":[[108,2]]},"1570":{"position":[[63,2]]},"1580":{"position":[[171,2],[462,2]]},"1633":{"position":[[40,2]]},"1641":{"position":[[465,2]]},"1687":{"position":[[317,2],[325,2]]},"1711":{"position":[[951,2]]},"1737":{"position":[[20,2]]},"1755":{"position":[[1087,2]]},"1969":{"position":[[155,2]]},"1983":{"position":[[67,2]]},"2006":{"position":[[67,2]]},"2096":{"position":[[3,2]]},"2175":{"position":[[1,2],[413,2]]},"2255":{"position":[[133,2]]},"2272":{"position":[[54,2],[79,2]]},"2274":{"position":[[58,2],[87,2]]},"2281":{"position":[[46,2],[71,2]]},"2283":{"position":[[50,2]]},"2321":{"position":[[19,2],[87,2]]},"2335":{"position":[[31,2],[87,2]]},"2343":{"position":[[213,2]]},"2442":{"position":[[2064,2]]},"2497":{"position":[[53,2]]},"2599":{"position":[[105,2]]},"2609":{"position":[[34,2]]},"2615":{"position":[[60,2]]},"2617":{"position":[[11,2],[21,2],[29,2]]},"2619":{"position":[[70,2]]},"2621":{"position":[[36,2]]},"2629":{"position":[[38,2],[102,2]]},"2701":{"position":[[71,2]]},"2703":{"position":[[68,2]]},"2770":{"position":[[254,2]]},"2772":{"position":[[67,2]]},"2819":{"position":[[583,2]]},"2846":{"position":[[383,2]]},"2860":{"position":[[100,2]]},"2868":{"position":[[65,2],[98,2]]},"2879":{"position":[[54,2]]},"2881":{"position":[[384,2]]},"2885":{"position":[[47,2]]},"2895":{"position":[[53,2]]},"2921":{"position":[[90,2]]},"2937":{"position":[[23,2]]},"2967":{"position":[[49,2]]},"3063":{"position":[[1367,2]]},"3142":{"position":[[42,2],[52,2],[63,2]]},"3144":{"position":[[17,2]]},"3209":{"position":[[128,2]]},"3250":{"position":[[200,2]]},"3256":{"position":[[171,2]]},"3258":{"position":[[58,2]]},"3284":{"position":[[16,2],[98,2]]},"3289":{"position":[[155,2]]},"3301":{"position":[[24,2],[31,2]]},"3309":{"position":[[33,2]]},"3432":{"position":[[4542,2]]},"3434":{"position":[[29,2]]},"3440":{"position":[[55,2]]},"3448":{"position":[[22,2]]},"3454":{"position":[[69,2]]},"3470":{"position":[[165,2]]},"3589":{"position":[[568,2]]},"3638":{"position":[[11,2]]},"3662":{"position":[[20,2]]},"3678":{"position":[[60,2]]},"3686":{"position":[[84,2]]},"3690":{"position":[[68,2]]},"3706":{"position":[[1378,2]]},"3708":{"position":[[18,2]]},"3914":{"position":[[1603,2]]},"3916":{"position":[[1297,2]]},"3918":{"position":[[923,2],[1099,2]]},"3920":{"position":[[587,2]]},"3924":{"position":[[159,2],[293,2],[2100,2],[2250,2],[2631,2],[2773,2],[4521,2]]},"3928":{"position":[[20,2],[119,2],[253,2],[298,2],[322,2],[407,2],[491,2]]},"3934":{"position":[[1838,2],[2541,2]]},"3938":{"position":[[29,2],[131,2],[179,2],[829,2],[872,2]]},"3942":{"position":[[68,2]]},"3954":{"position":[[48,2],[326,2]]},"3960":{"position":[[14,2]]},"3962":{"position":[[280,2],[523,2]]},"3966":{"position":[[201,2]]},"3978":{"position":[[52,2],[413,2],[431,2],[449,2],[1738,2]]},"3980":{"position":[[456,2],[633,2]]},"3986":{"position":[[203,2],[225,2],[303,2]]},"3992":{"position":[[10,2],[31,2],[219,2],[251,2],[556,2],[969,2],[1432,2]]},"3996":{"position":[[24,2],[399,2],[1596,2]]},"3998":{"position":[[139,2],[232,2],[500,2]]},"4000":{"position":[[391,2],[435,2],[457,2],[494,2]]},"4006":{"position":[[128,2]]}}}],["功能强大",{"_index":8477,"t":{"3626":{"position":[[620,4]]}}}],["功能模块",{"_index":7946,"t":{"3350":{"position":[[152,4]]}}}],["功能测试",{"_index":7991,"t":{"3360":{"position":[[143,4]]}}}],["加",{"_index":189,"t":{"11":{"position":[[855,1]]},"1234":{"position":[[862,1]]},"1511":{"position":[[1538,1]]},"2294":{"position":[[903,1]]},"3352":{"position":[[175,1]]},"3595":{"position":[[203,1],[382,1]]},"3908":{"position":[[108,1],[147,1],[181,1],[215,1],[241,1],[286,1]]}}}],["加上",{"_index":8351,"t":{"3575":{"position":[[383,2]]}}}],["加以",{"_index":7828,"t":{"3277":{"position":[[38,2]]}}}],["加入",{"_index":2402,"t":{"399":{"position":[[677,2]]},"445":{"position":[[777,2]]},"1396":{"position":[[48,2]]},"2311":{"position":[[30,2]]},"2768":{"position":[[1543,2]]},"3618":{"position":[[23,2]]},"3746":{"position":[[252,2]]},"3990":{"position":[[481,2]]}}}],["加利西亚",{"_index":6555,"t":{"2559":{"position":[[1165,4],[1176,4],[1182,4]]}}}],["加勒比海",{"_index":6517,"t":{"2559":{"position":[[830,4]]}}}],["加大",{"_index":7252,"t":{"2919":{"position":[[201,2]]}}}],["加密",{"_index":912,"t":{"121":{"position":[[499,2],[502,2]]},"1289":{"position":[[42,2]]},"1674":{"position":[[4,2],[39,2]]},"1677":{"position":[[10,2],[63,2],[164,2],[231,2]]},"1679":{"position":[[74,2]]},"1681":{"position":[[125,2]]},"1683":{"position":[[70,2]]},"1685":{"position":[[35,2],[94,2]]},"1687":{"position":[[10,2],[186,2]]},"1689":{"position":[[26,2],[96,2],[500,2],[781,2]]},"1691":{"position":[[335,2],[486,2],[607,2]]},"2782":{"position":[[164,2]]},"3622":{"position":[[136,2]]},"3740":{"position":[[383,2]]},"3922":{"position":[[397,2]]},"3964":{"position":[[238,2]]},"3980":{"position":[[98,2]]},"3984":{"position":[[87,2]]},"3992":{"position":[[2594,2]]},"4004":{"position":[[548,2]]}}}],["加密算法",{"_index":1000,"t":{"127":{"position":[[1284,4],[1480,4]]},"1685":{"position":[[375,4]]},"3039":{"position":[[379,4]]},"3041":{"position":[[495,4]]},"3962":{"position":[[356,4],[547,4]]},"3972":{"position":[[178,4]]},"3994":{"position":[[1551,4]]}}}],["加快",{"_index":4681,"t":{"1511":{"position":[[1283,2]]}}}],["加拿大",{"_index":6515,"t":{"2559":{"position":[[816,3],[1104,3]]}}}],["加油",{"_index":4648,"t":{"1511":{"position":[[862,2],[951,2],[1024,2],[1507,2],[1969,2],[2069,2],[2256,2],[2472,2],[2584,2],[2660,2],[2825,2],[2887,2],[3330,2],[3487,2],[3619,2]]}}}],["加解密",{"_index":5220,"t":{"1672":{"position":[[93,3]]},"1674":{"position":[[12,3],[20,3],[28,3],[68,3]]},"1679":{"position":[[11,3]]},"1681":{"position":[[10,3]]},"1683":{"position":[[303,3]]},"1689":{"position":[[37,3],[44,3],[178,3],[337,3],[621,3]]},"3936":{"position":[[976,3]]},"3992":{"position":[[2745,3]]},"4006":{"position":[[718,3]]}}}],["加载",{"_index":2169,"t":{"336":{"position":[[426,2],[431,2],[436,2]]},"359":{"position":[[303,2]]},"429":{"position":[[71,2],[118,2],[143,2],[183,2]]},"451":{"position":[[21,2],[283,2]]},"455":{"position":[[528,2]]},"534":{"position":[[749,2],[767,2]]},"690":{"position":[[13,2],[25,2]]},"692":{"position":[[0,2]]},"696":{"position":[[553,2],[589,2]]},"1309":{"position":[[101,2]]},"2613":{"position":[[69,2],[81,2]]},"2623":{"position":[[253,2]]},"2625":{"position":[[71,2],[350,2],[415,2]]},"2629":{"position":[[29,2],[156,2]]},"2686":{"position":[[125,2]]},"2733":{"position":[[21,2]]},"2819":{"position":[[566,2]]},"2981":{"position":[[261,2]]},"3071":{"position":[[1126,2]]},"3339":{"position":[[281,2]]},"3432":{"position":[[259,2]]},"3434":{"position":[[680,2]]},"3442":{"position":[[185,2]]},"3636":{"position":[[617,2]]},"3744":{"position":[[266,2]]},"3912":{"position":[[2273,2]]},"3934":{"position":[[2550,2]]},"3936":{"position":[[786,2]]},"3950":{"position":[[567,2],[885,2]]},"3966":{"position":[[439,2],[466,2],[1476,2],[1806,2]]},"3970":{"position":[[11,2],[234,2]]},"3986":{"position":[[310,2],[472,2]]},"3998":{"position":[[344,2],[546,2]]}}}],["动作",{"_index":3110,"t":{"587":{"position":[[2140,2]]},"612":{"position":[[47,2]]},"623":{"position":[[27,2]]},"625":{"position":[[38,2]]},"627":{"position":[[34,2]]},"1572":{"position":[[33,2]]},"1576":{"position":[[71,2],[112,2],[181,2]]},"1580":{"position":[[311,2],[454,2]]},"1589":{"position":[[188,2]]},"1594":{"position":[[3,2],[143,2],[179,2],[204,2],[306,2],[369,2]]},"1596":{"position":[[0,2]]},"1598":{"position":[[99,2]]},"1611":{"position":[[150,2],[176,2],[662,2],[720,2],[781,2]]},"1615":{"position":[[269,2]]},"1617":{"position":[[6,2],[29,2],[1094,2],[1145,2]]},"1619":{"position":[[433,2]]},"1621":{"position":[[6,2]]},"1623":{"position":[[13,2],[121,2],[174,2]]},"1631":{"position":[[86,2]]},"1641":{"position":[[12,2],[125,2],[331,2]]},"1643":{"position":[[30,2]]},"1645":{"position":[[22,2]]},"1649":{"position":[[14,2],[25,2]]},"1651":{"position":[[23,2]]},"1657":{"position":[[51,2],[146,2]]},"1661":{"position":[[249,2],[816,2]]},"3023":{"position":[[250,2],[813,2]]},"3620":{"position":[[294,2]]},"3779":{"position":[[144,2]]},"3802":{"position":[[141,2]]},"3817":{"position":[[150,2]]}}}],["动力",{"_index":7971,"t":{"3352":{"position":[[477,2]]}}}],["动态",{"_index":306,"t":{"19":{"position":[[615,2]]},"263":{"position":[[9,2]]},"340":{"position":[[763,2]]},"429":{"position":[[13,2],[41,2]]},"457":{"position":[[65,2]]},"516":{"position":[[715,2]]},"846":{"position":[[43,2],[949,2]]},"879":{"position":[[13,2]]},"924":{"position":[[29,2],[42,2],[51,2]]},"943":{"position":[[46,2]]},"1037":{"position":[[0,2],[466,2]]},"1052":{"position":[[39,2]]},"1200":{"position":[[177,2]]},"1202":{"position":[[41,2]]},"1204":{"position":[[233,2]]},"1277":{"position":[[28,2]]},"1289":{"position":[[7,2],[19,2]]},"1309":{"position":[[99,2]]},"1394":{"position":[[129,2]]},"1420":{"position":[[18,2],[489,2],[931,2]]},"1424":{"position":[[2,2],[23,2],[36,2],[55,2],[132,2],[2036,2]]},"1430":{"position":[[10,2],[32,2],[39,2],[46,2],[54,2],[62,2],[71,2]]},"1570":{"position":[[4,2],[41,2]]},"1574":{"position":[[3,2]]},"1625":{"position":[[6,2]]},"1643":{"position":[[11,2]]},"1661":{"position":[[10,2],[476,2]]},"1663":{"position":[[13,2],[247,2]]},"1665":{"position":[[0,2]]},"1741":{"position":[[779,2],[1541,2],[2383,2]]},"1801":{"position":[[2663,2]]},"1803":{"position":[[4635,2]]},"1815":{"position":[[78,2],[411,2],[535,2],[580,2]]},"1817":{"position":[[164,2],[246,2]]},"1898":{"position":[[43,2]]},"1909":{"position":[[149,2]]},"1941":{"position":[[628,2],[689,2],[780,2]]},"2158":{"position":[[75,2]]},"2377":{"position":[[6,2]]},"2625":{"position":[[348,2]]},"2701":{"position":[[20,2]]},"2733":{"position":[[45,2]]},"2790":{"position":[[207,2]]},"2868":{"position":[[103,2]]},"2981":{"position":[[259,2]]},"3001":{"position":[[50,2]]},"3021":{"position":[[0,2],[22,2]]},"3023":{"position":[[473,2]]},"3126":{"position":[[91,2],[255,2],[328,2]]},"3168":{"position":[[36,2]]},"3211":{"position":[[90,2]]},"3246":{"position":[[67,2]]},"3716":{"position":[[55,2],[880,2]]},"3772":{"position":[[15,2],[31,2],[75,2],[127,2],[511,2],[787,2],[996,2],[1004,2],[1113,2],[1121,2],[1230,2],[1238,2],[1347,2],[1355,2],[1464,2],[1472,2],[1581,2],[1589,2],[1804,2],[1812,2],[1921,2],[1929,2],[2038,2],[2046,2]]},"3910":{"position":[[2451,2]]},"3912":{"position":[[2146,2]]},"3914":{"position":[[2816,2]]},"3916":{"position":[[2787,2]]},"3918":{"position":[[969,2],[3359,2]]},"3922":{"position":[[19,2]]},"3938":{"position":[[193,2],[798,2]]},"3944":{"position":[[33,2],[550,2],[593,2]]},"3962":{"position":[[1012,2],[1319,2]]},"3964":{"position":[[147,2],[195,2],[657,2]]},"3966":{"position":[[1804,2]]},"3968":{"position":[[780,2],[858,2]]},"3972":{"position":[[63,2]]},"3974":{"position":[[628,2]]},"3978":{"position":[[138,2],[1333,2]]},"3982":{"position":[[391,2]]},"3984":{"position":[[7,2]]},"3986":{"position":[[308,2],[550,2],[657,2],[706,2],[1683,2]]},"3992":{"position":[[847,2],[929,2],[1740,2],[1848,2],[3576,2]]},"3994":{"position":[[174,2],[917,2],[1678,2]]}}}],["动态创建",{"_index":4070,"t":{"1223":{"position":[[260,4]]},"3436":{"position":[[14,4]]}}}],["动漫",{"_index":1212,"t":{"168":{"position":[[89,2]]}}}],["动词",{"_index":8434,"t":{"3620":{"position":[[131,2],[152,2],[162,2],[261,2]]}}}],["努力",{"_index":4521,"t":{"1507":{"position":[[64,2]]},"3242":{"position":[[106,2]]},"3910":{"position":[[103,2]]},"3934":{"position":[[2200,2]]}}}],["勘正",{"_index":1984,"t":{"300":{"position":[[282,2]]}}}],["勾",{"_index":4363,"t":{"1470":{"position":[[73,1]]},"1973":{"position":[[91,1]]},"1987":{"position":[[91,1]]},"2010":{"position":[[99,1]]}}}],["包",{"_index":407,"t":{"48":{"position":[[132,1]]},"72":{"position":[[132,1]]},"91":{"position":[[0,1],[29,1],[53,1],[118,1],[185,1],[239,1],[299,1],[355,1],[413,1],[462,1],[496,1],[526,1],[540,1]]},"95":{"position":[[44,1]]},"127":{"position":[[44,1]]},"188":{"position":[[45,1]]},"241":{"position":[[65,1],[136,1],[207,1]]},"251":{"position":[[214,1]]},"306":{"position":[[147,1]]},"308":{"position":[[163,1]]},"331":{"position":[[134,1],[214,1]]},"514":{"position":[[633,1]]},"534":{"position":[[16,1],[74,1]]},"538":{"position":[[14,1]]},"542":{"position":[[27,1]]},"546":{"position":[[177,1],[199,1]]},"675":{"position":[[164,1]]},"679":{"position":[[102,1],[113,1],[133,1]]},"702":{"position":[[61,1]]},"706":{"position":[[88,1]]},"756":{"position":[[57,1]]},"761":{"position":[[203,1]]},"765":{"position":[[34,1]]},"846":{"position":[[1008,1]]},"879":{"position":[[78,1]]},"897":{"position":[[510,1]]},"899":{"position":[[683,1],[1499,1]]},"1309":{"position":[[93,1],[161,1],[674,1]]},"1319":{"position":[[88,1]]},"1452":{"position":[[17,1]]},"1483":{"position":[[760,1],[900,1]]},"1495":{"position":[[974,1]]},"1516":{"position":[[45,1],[139,1]]},"1520":{"position":[[2,1]]},"1530":{"position":[[111,1]]},"1532":{"position":[[79,1]]},"1535":{"position":[[456,1],[475,1],[497,1],[548,1],[602,1],[649,1]]},"1537":{"position":[[52,1]]},"1541":{"position":[[0,1]]},"1545":{"position":[[10,1],[28,1]]},"1547":{"position":[[92,1],[272,1],[281,1],[378,1]]},"1549":{"position":[[232,1],[293,1],[298,1],[304,1],[312,1],[370,1],[458,1]]},"1551":{"position":[[1148,1]]},"1553":{"position":[[4,1]]},"1683":{"position":[[382,1]]},"1801":{"position":[[101,1]]},"1803":{"position":[[24,1]]},"2343":{"position":[[170,1]]},"2357":{"position":[[170,1]]},"2359":{"position":[[625,1]]},"2361":{"position":[[389,1]]},"2597":{"position":[[14,1]]},"2601":{"position":[[28,1]]},"2623":{"position":[[149,1]]},"2625":{"position":[[320,1],[332,1]]},"2641":{"position":[[11,1],[41,1]]},"2646":{"position":[[48,1]]},"2649":{"position":[[63,1],[84,1],[94,1]]},"2651":{"position":[[5,1]]},"2657":{"position":[[19,1]]},"2668":{"position":[[11,1],[41,1]]},"2686":{"position":[[49,1],[106,1]]},"2774":{"position":[[401,1],[576,1]]},"2813":{"position":[[1144,1]]},"2819":{"position":[[44,1]]},"2836":{"position":[[128,1],[1348,1]]},"2866":{"position":[[39,1]]},"2981":{"position":[[426,1]]},"3069":{"position":[[101,1],[175,1]]},"3073":{"position":[[17,1]]},"3194":{"position":[[43,1]]},"3207":{"position":[[4,1],[78,1],[141,1],[173,1]]},"3248":{"position":[[14,1]]},"3252":{"position":[[29,1]]},"3254":{"position":[[1639,1],[1661,1]]},"3307":{"position":[[182,1],[272,1]]},"3323":{"position":[[361,1]]},"3329":{"position":[[46,1],[113,1]]},"3369":{"position":[[56,1],[91,1]]},"3403":{"position":[[102,1]]},"3418":{"position":[[44,1]]},"3676":{"position":[[58,1]]},"3908":{"position":[[193,1]]},"3920":{"position":[[1852,1]]},"3922":{"position":[[2382,1]]},"3924":{"position":[[22,1],[605,1],[1468,1]]},"3930":{"position":[[510,1],[544,1]]},"3934":{"position":[[2963,1]]},"3940":{"position":[[339,1]]},"3942":{"position":[[115,1]]},"3944":{"position":[[155,1],[489,1]]},"3950":{"position":[[435,1]]},"3952":{"position":[[744,1]]},"3958":{"position":[[390,1]]},"3964":{"position":[[86,1],[272,1],[284,1],[306,1]]},"3972":{"position":[[48,1]]},"3978":{"position":[[246,1]]},"3982":{"position":[[41,1]]},"3990":{"position":[[306,1],[621,1]]},"3992":{"position":[[279,1],[1150,1],[3977,1]]},"3994":{"position":[[44,1],[89,1],[134,1]]},"4004":{"position":[[50,1],[173,1]]},"4006":{"position":[[185,1]]}}}],["包含",{"_index":1471,"t":{"199":{"position":[[198,2]]},"247":{"position":[[153,2]]},"355":{"position":[[6,2]]},"585":{"position":[[423,2]]},"615":{"position":[[417,2]]},"777":{"position":[[11,2]]},"1323":{"position":[[11,2]]},"1481":{"position":[[100,2]]},"1483":{"position":[[16,2]]},"1520":{"position":[[357,2]]},"1683":{"position":[[308,2]]},"1821":{"position":[[47,2]]},"1857":{"position":[[119,2]]},"1875":{"position":[[643,2]]},"1909":{"position":[[262,2],[941,2]]},"2272":{"position":[[73,2]]},"2274":{"position":[[81,2]]},"2281":{"position":[[65,2],[333,2]]},"2333":{"position":[[110,2],[119,2],[224,2],[261,2]]},"2379":{"position":[[364,2]]},"2398":{"position":[[104,2]]},"2627":{"position":[[77,2]]},"2649":{"position":[[69,2]]},"2747":{"position":[[227,2]]},"2868":{"position":[[84,2],[101,2]]},"2889":{"position":[[141,2]]},"3080":{"position":[[443,2]]},"3094":{"position":[[64,2]]},"3146":{"position":[[8,2]]},"3291":{"position":[[1281,2]]},"3321":{"position":[[223,2]]},"3323":{"position":[[401,2]]},"3369":{"position":[[113,2]]},"3416":{"position":[[78,2],[94,2]]},"3430":{"position":[[1873,2]]},"3446":{"position":[[285,2]]},"3448":{"position":[[595,2],[1019,2]]},"3452":{"position":[[796,2]]},"3456":{"position":[[41,2]]},"3620":{"position":[[276,2]]},"3624":{"position":[[40,2]]},"3630":{"position":[[18,2]]},"3712":{"position":[[9,2]]},"3800":{"position":[[52,2]]},"3806":{"position":[[1307,2]]},"3830":{"position":[[56,2]]},"3912":{"position":[[2173,2]]},"3914":{"position":[[3140,2]]},"3916":{"position":[[3792,2]]},"3918":{"position":[[3297,2]]},"3920":{"position":[[1622,2]]},"3942":{"position":[[510,2]]},"3950":{"position":[[286,2]]},"3964":{"position":[[46,2]]},"3966":{"position":[[844,2]]},"3968":{"position":[[189,2]]},"4006":{"position":[[61,2]]}}}],["包括",{"_index":11,"t":{"3":{"position":[[35,2]]},"110":{"position":[[21,2]]},"179":{"position":[[124,2]]},"182":{"position":[[78,2]]},"369":{"position":[[284,2]]},"439":{"position":[[42,2]]},"565":{"position":[[21,2]]},"606":{"position":[[22,2]]},"1416":{"position":[[312,2]]},"1627":{"position":[[368,2]]},"1717":{"position":[[98,2]]},"1807":{"position":[[54,2]]},"1947":{"position":[[91,2]]},"2725":{"position":[[87,2]]},"2770":{"position":[[98,2]]},"2782":{"position":[[152,2]]},"2843":{"position":[[216,2]]},"2852":{"position":[[155,2]]},"3136":{"position":[[177,2]]},"3142":{"position":[[121,2],[161,2],[195,2]]},"3287":{"position":[[362,2]]},"3367":{"position":[[30,2]]},"3412":{"position":[[99,2],[154,2]]},"3414":{"position":[[290,2]]},"3416":{"position":[[271,2]]},"3828":{"position":[[50,2]]}}}],["包揽",{"_index":8410,"t":{"3608":{"position":[[30,2]]}}}],["包袱",{"_index":560,"t":{"95":{"position":[[26,2]]},"3926":{"position":[[77,2]]}}}],["包装",{"_index":8572,"t":{"3708":{"position":[[72,2]]}}}],["包裹",{"_index":1070,"t":{"133":{"position":[[691,2]]},"146":{"position":[[1002,2]]},"2747":{"position":[[239,2]]},"3080":{"position":[[455,2]]},"3291":{"position":[[1275,2]]},"3345":{"position":[[101,2]]},"3992":{"position":[[1720,2]]}}}],["匈牙利",{"_index":6578,"t":{"2559":{"position":[[1388,3],[1398,3],[1404,3]]}}}],["化",{"_index":2211,"t":{"340":{"position":[[64,1],[73,1]]},"363":{"position":[[36,1]]},"373":{"position":[[154,1]]},"1479":{"position":[[26,1]]},"1578":{"position":[[169,1]]},"1661":{"position":[[534,1]]},"2561":{"position":[[62,1]]},"2881":{"position":[[343,1],[364,1]]},"3023":{"position":[[531,1]]},"3140":{"position":[[16,1]]},"3520":{"position":[[104,1]]},"3561":{"position":[[104,1]]},"3620":{"position":[[137,1]]},"3720":{"position":[[8,1]]},"3729":{"position":[[67,1]]},"3752":{"position":[[42,1]]},"3819":{"position":[[1554,1]]},"3858":{"position":[[72,1]]},"3894":{"position":[[72,1]]},"3920":{"position":[[526,1],[2020,1]]},"3932":{"position":[[304,1],[647,1],[1458,1]]},"3966":{"position":[[1475,1]]},"3972":{"position":[[543,1]]},"3982":{"position":[[109,1]]},"3992":{"position":[[174,1],[1462,1]]}}}],["化器",{"_index":8942,"t":{"3826":{"position":[[716,2]]},"3858":{"position":[[12,2]]},"3894":{"position":[[12,2]]}}}],["化成",{"_index":734,"t":{"112":{"position":[[1023,2]]},"288":{"position":[[263,2]]},"1925":{"position":[[872,2]]},"3777":{"position":[[390,2]]}}}],["化机制",{"_index":8611,"t":{"3729":{"position":[[55,3]]}}}],["北",{"_index":6575,"t":{"2559":{"position":[[1365,1],[1376,1]]},"3242":{"position":[[168,1]]},"3910":{"position":[[165,1]]},"3934":{"position":[[2286,1]]}}}],["北非",{"_index":6460,"t":{"2559":{"position":[[286,2]]}}}],["匹配",{"_index":845,"t":{"119":{"position":[[66,2]]},"482":{"position":[[331,2],[387,2]]},"587":{"position":[[808,2],[890,2]]},"610":{"position":[[71,2]]},"1520":{"position":[[325,2],[396,2]]},"1539":{"position":[[1149,2],[1753,2],[1861,2],[1945,2]]},"1557":{"position":[[93,2],[258,2],[495,2],[580,2]]},"1576":{"position":[[185,2]]},"1635":{"position":[[204,2],[420,2]]},"1661":{"position":[[911,2]]},"1795":{"position":[[964,2]]},"1821":{"position":[[193,2]]},"2136":{"position":[[53,2]]},"2352":{"position":[[180,2]]},"2418":{"position":[[583,2],[665,2]]},"2544":{"position":[[124,2],[157,2]]},"3023":{"position":[[908,2]]},"3779":{"position":[[1249,2],[1874,2]]},"3781":{"position":[[28,2]]},"3802":{"position":[[1867,2],[2651,2]]},"3810":{"position":[[30,2]]},"3817":{"position":[[2463,2]]},"3922":{"position":[[81,2],[2217,2]]},"3966":{"position":[[1815,2],[1940,2]]},"3972":{"position":[[391,2]]},"3984":{"position":[[557,2]]},"3988":{"position":[[415,2]]},"3992":{"position":[[2246,2]]},"4006":{"position":[[281,2]]}}}],["区",{"_index":6235,"t":{"2361":{"position":[[397,1]]},"2657":{"position":[[93,1]]},"3958":{"position":[[319,1]]},"3960":{"position":[[660,1]]}}}],["区分",{"_index":2578,"t":{"445":{"position":[[725,2]]},"1050":{"position":[[9,2]]},"1234":{"position":[[939,2]]},"2919":{"position":[[119,2]]},"3492":{"position":[[310,2]]},"3537":{"position":[[212,2]]},"3616":{"position":[[14,2]]},"3620":{"position":[[308,2]]},"3922":{"position":[[486,2]]},"3986":{"position":[[870,2],[1796,2]]}}}],["区别",{"_index":3129,"t":{"604":{"position":[[50,2]]},"855":{"position":[[96,2]]},"857":{"position":[[92,2]]},"1269":{"position":[[181,2]]},"1313":{"position":[[251,2]]},"1424":{"position":[[13,2]]},"1541":{"position":[[19,2]]},"1572":{"position":[[561,2]]},"1909":{"position":[[827,2]]},"2897":{"position":[[74,2]]},"3071":{"position":[[1079,2]]},"3393":{"position":[[146,2]]}}}],["区域",{"_index":5111,"t":{"1598":{"position":[[69,2]]},"1641":{"position":[[426,2]]},"1653":{"position":[[26,2]]},"1661":{"position":[[135,2],[577,2]]},"2517":{"position":[[39,2],[97,2]]},"2526":{"position":[[105,2],[116,2],[147,2]]},"2538":{"position":[[77,2]]},"2542":{"position":[[53,2],[278,2]]},"2544":{"position":[[73,2],[104,2]]},"2553":{"position":[[95,2],[132,2]]},"3023":{"position":[[136,2],[574,2]]},"3031":{"position":[[95,2],[132,2]]},"3329":{"position":[[80,2]]},"3978":{"position":[[148,2]]},"3986":{"position":[[140,2]]}}}],["区域性",{"_index":6387,"t":{"2517":{"position":[[11,3],[93,3]]}}}],["区间",{"_index":3119,"t":{"597":{"position":[[168,2]]},"599":{"position":[[198,2]]},"3110":{"position":[[4,2],[11,2]]}}}],["医院",{"_index":7238,"t":{"2915":{"position":[[197,2]]}}}],["匿名",{"_index":1092,"t":{"137":{"position":[[15,2],[151,2]]},"141":{"position":[[31,2]]},"274":{"position":[[238,2]]},"1135":{"position":[[44,2]]},"1200":{"position":[[52,2],[168,2]]},"1913":{"position":[[683,2],[899,2]]},"3492":{"position":[[197,2]]},"3494":{"position":[[178,2]]},"3496":{"position":[[131,2]]},"3779":{"position":[[1603,2]]},"3802":{"position":[[2364,2]]},"3992":{"position":[[2426,2]]},"3998":{"position":[[282,2]]}}}],["十",{"_index":3823,"t":{"956":{"position":[[654,1],[1554,1]]},"960":{"position":[[1517,1]]}}}],["十一",{"_index":3824,"t":{"956":{"position":[[725,2],[1636,2]]},"960":{"position":[[1627,2]]}}}],["十二",{"_index":3834,"t":{"960":{"position":[[1700,2]]}}}],["十余载",{"_index":1218,"t":{"172":{"position":[[23,3]]}}}],["十分钟",{"_index":6338,"t":{"2440":{"position":[[99,3]]}}}],["千万",{"_index":7410,"t":{"3102":{"position":[[17,2],[30,2]]}}}],["千个",{"_index":1978,"t":{"300":{"position":[[214,2]]}}}],["千差万别",{"_index":6191,"t":{"2335":{"position":[[75,4]]}}}],["千里达",{"_index":6527,"t":{"2559":{"position":[[920,3]]}}}],["升级",{"_index":406,"t":{"48":{"position":[[108,2]]},"51":{"position":[[246,2]]},"62":{"position":[[246,2]]},"72":{"position":[[108,2]]},"75":{"position":[[246,2]]},"401":{"position":[[202,2]]},"585":{"position":[[603,2]]},"1969":{"position":[[2,2],[50,2],[65,2],[78,2]]},"1971":{"position":[[39,2]]},"2635":{"position":[[35,2]]},"2641":{"position":[[12,2],[42,2]]},"2643":{"position":[[0,2]]},"2662":{"position":[[35,2]]},"2668":{"position":[[12,2],[42,2]]},"2676":{"position":[[0,2]]},"2862":{"position":[[14,2],[378,2],[401,2]]},"3327":{"position":[[11,2]]},"3618":{"position":[[9,2]]},"3908":{"position":[[9,2],[17,2],[52,2],[133,2],[272,2]]},"3912":{"position":[[1489,2],[1530,2]]},"3914":{"position":[[1198,2]]},"3918":{"position":[[4037,2]]},"3926":{"position":[[172,2],[669,2]]},"3930":{"position":[[497,2],[522,2]]},"3936":{"position":[[950,2]]},"3944":{"position":[[144,2],[158,2]]},"3946":{"position":[[84,2],[465,2]]},"3960":{"position":[[164,2]]},"3968":{"position":[[475,2]]},"3970":{"position":[[102,2]]},"3980":{"position":[[187,2]]},"3986":{"position":[[161,2]]},"3990":{"position":[[239,2],[278,2],[604,2],[607,2]]},"3992":{"position":[[986,2]]},"3994":{"position":[[430,2]]},"3996":{"position":[[355,2]]}}}],["午夜",{"_index":4791,"t":{"1511":{"position":[[2563,2]]},"2424":{"position":[[188,2],[217,2],[246,2],[283,2],[318,2],[355,2]]},"3804":{"position":[[851,2],[914,2],[978,2],[1044,2]]},"3808":{"position":[[321,2],[351,2],[377,2],[410,2]]}}}],["半双工",{"_index":6095,"t":{"2305":{"position":[[0,3]]}}}],["华",{"_index":6484,"t":{"2559":{"position":[[541,1],[559,1],[577,1],[590,1],[604,1],[617,1],[630,1]]}}}],["协作",{"_index":2424,"t":{"401":{"position":[[375,2]]},"3142":{"position":[[182,2],[188,2]]}}}],["协助",{"_index":4196,"t":{"1385":{"position":[[28,2]]}}}],["协同",{"_index":7503,"t":{"3138":{"position":[[96,2]]},"3478":{"position":[[28,2]]}}}],["协议",{"_index":668,"t":{"106":{"position":[[16,2]]},"121":{"position":[[34,2],[693,2]]},"399":{"position":[[578,2]]},"401":{"position":[[247,2]]},"404":{"position":[[16,2],[252,2]]},"406":{"position":[[88,2],[161,2]]},"419":{"position":[[434,2]]},"1470":{"position":[[69,2]]},"2843":{"position":[[10,2]]},"3063":{"position":[[1710,2]]},"3614":{"position":[[27,2],[47,2],[72,2]]},"3706":{"position":[[1721,2]]},"3914":{"position":[[2678,2]]}}}],["协调",{"_index":7082,"t":{"2815":{"position":[[32,2]]}}}],["卓",{"_index":4697,"t":{"1511":{"position":[[1471,1],[1526,1]]}}}],["单",{"_index":653,"t":{"102":{"position":[[236,1]]},"844":{"position":[[0,1]]},"1383":{"position":[[163,1],[255,1]]},"1405":{"position":[[92,1]]},"1440":{"position":[[499,1]]},"1511":{"position":[[1670,1]]},"1699":{"position":[[146,1]]},"1741":{"position":[[58,1],[848,1],[1718,1],[2509,1]]},"1761":{"position":[[246,1]]},"1811":{"position":[[30,1],[43,1]]},"1823":{"position":[[63,1]]},"2035":{"position":[[58,1]]},"2326":{"position":[[273,1]]},"2345":{"position":[[59,1]]},"2486":{"position":[[76,1]]},"2581":{"position":[[63,1]]},"2587":{"position":[[484,1]]},"2589":{"position":[[11,1],[226,1],[454,1]]},"2747":{"position":[[31,1]]},"2762":{"position":[[1,1],[40,1]]},"2831":{"position":[[28,1]]},"2852":{"position":[[35,1]]},"3069":{"position":[[22,1],[56,1],[107,1],[216,1],[282,1],[299,1]]},"3071":{"position":[[306,1],[403,1],[643,1],[1002,1]]},"3075":{"position":[[2,1]]},"3078":{"position":[[14,1]]},"3096":{"position":[[150,1]]},"3098":{"position":[[30,1]]},"3104":{"position":[[6,1]]},"3110":{"position":[[81,1]]},"3148":{"position":[[8,1]]},"3162":{"position":[[17,1]]},"3215":{"position":[[455,1]]},"3224":{"position":[[1800,1],[1863,1]]},"3254":{"position":[[72,1]]},"3287":{"position":[[92,1]]},"3522":{"position":[[150,1],[495,1]]},"3791":{"position":[[23,1],[31,1],[559,1]]},"3834":{"position":[[55,1]]},"3912":{"position":[[2528,1]]},"3916":{"position":[[7085,1]]},"3934":{"position":[[303,1],[945,1]]},"3936":{"position":[[455,1],[887,1]]},"3942":{"position":[[512,1]]},"3960":{"position":[[443,1]]},"3974":{"position":[[698,1]]}}}],["单一",{"_index":1794,"t":{"245":{"position":[[149,2]]},"1641":{"position":[[457,2]]},"2717":{"position":[[75,2],[155,2],[227,2]]},"3456":{"position":[[98,2],[376,2]]},"3938":{"position":[[1183,2]]}}}],["单一化",{"_index":6489,"t":{"2559":{"position":[[593,3]]}}}],["单一性",{"_index":2268,"t":{"353":{"position":[[11,3],[19,3]]},"585":{"position":[[576,3]]}}}],["单个",{"_index":1759,"t":{"239":{"position":[[133,2]]},"606":{"position":[[506,2]]},"807":{"position":[[31,2]]},"1240":{"position":[[1042,2]]},"1246":{"position":[[96,2]]},"1257":{"position":[[381,2]]},"1265":{"position":[[96,2]]},"1420":{"position":[[539,2]]},"1440":{"position":[[732,2]]},"1520":{"position":[[179,2]]},"1566":{"position":[[319,2]]},"1901":{"position":[[656,2]]},"2912":{"position":[[104,2]]},"3001":{"position":[[100,2]]},"3282":{"position":[[5,2]]},"3393":{"position":[[57,2]]},"3458":{"position":[[447,2]]},"3783":{"position":[[1304,2],[1369,2]]},"3819":{"position":[[288,2]]},"3860":{"position":[[47,2]]},"3930":{"position":[[452,2],[753,2]]},"3932":{"position":[[242,2],[283,2],[1964,2],[2112,2],[2220,2]]},"3938":{"position":[[123,2]]},"3952":{"position":[[507,2]]},"3978":{"position":[[1194,2]]},"3986":{"position":[[107,2]]},"3998":{"position":[[358,2]]}}}],["单位",{"_index":993,"t":{"127":{"position":[[1203,2],[1250,2]]},"1192":{"position":[[71,2]]},"1281":{"position":[[102,2]]},"1685":{"position":[[450,2]]},"3039":{"position":[[318,2],[358,2]]},"3041":{"position":[[414,2],[461,2]]},"3282":{"position":[[54,2]]},"3432":{"position":[[567,2]]},"3798":{"position":[[608,2]]},"3962":{"position":[[573,2]]}}}],["单体",{"_index":7005,"t":{"2770":{"position":[[143,2]]},"3092":{"position":[[96,2],[132,2]]}}}],["单元",{"_index":5774,"t":{"1894":{"position":[[36,2]]},"3282":{"position":[[11,2],[78,2]]},"3284":{"position":[[54,2],[100,2],[109,2]]},"3287":{"position":[[54,2],[74,2],[1398,2],[1766,2],[2068,2],[2384,2],[3058,2]]},"3294":{"position":[[66,2]]},"3350":{"position":[[40,2],[57,2],[91,2],[105,2],[138,2],[189,2]]},"3922":{"position":[[833,2],[1770,2],[2427,2]]},"3924":{"position":[[716,2],[728,2]]},"3930":{"position":[[841,2]]},"3932":{"position":[[353,2],[696,2],[698,2]]},"3950":{"position":[[728,2]]},"3952":{"position":[[723,2]]},"3966":{"position":[[94,2]]},"3972":{"position":[[231,2]]},"3980":{"position":[[326,2]]},"3982":{"position":[[192,2]]},"3990":{"position":[[485,2]]},"3998":{"position":[[718,2]]},"4004":{"position":[[423,2]]}}}],["单元测试",{"_index":544,"t":{"91":{"position":[[490,4],[534,4]]},"1385":{"position":[[129,4]]},"1389":{"position":[[68,4],[180,4]]},"3350":{"position":[[9,4],[52,4],[157,4]]},"3352":{"position":[[10,4],[187,4],[228,4],[270,4],[421,4],[489,4]]},"3356":{"position":[[55,4]]},"3360":{"position":[[122,4]]},"3362":{"position":[[1,4]]},"3367":{"position":[[32,4]]},"3371":{"position":[[1,4],[283,4]]},"3373":{"position":[[24,4]]},"3383":{"position":[[3,4]]},"3385":{"position":[[11,4]]},"3389":{"position":[[105,4],[122,4],[200,4],[804,4]]},"3391":{"position":[[36,4],[56,4],[98,4]]},"3393":{"position":[[127,4]]},"3397":{"position":[[48,4]]},"3399":{"position":[[11,4],[42,4]]},"3403":{"position":[[28,4]]},"3405":{"position":[[8,4]]},"3407":{"position":[[19,4]]},"3409":{"position":[[35,4]]},"3918":{"position":[[4208,4]]},"3924":{"position":[[35,4],[618,4],[1991,4],[2170,4],[2551,4],[2570,4],[2610,4],[2643,4],[2693,4],[2731,4],[2744,4],[2787,4],[3031,4],[3510,4]]},"3952":{"position":[[540,4]]}}}],["单列",{"_index":3782,"t":{"929":{"position":[[3199,2],[3420,2],[3732,2],[3919,2]]}}}],["单引号",{"_index":4931,"t":{"1520":{"position":[[360,3]]}}}],["单机",{"_index":7400,"t":{"3096":{"position":[[86,2]]},"3100":{"position":[[63,2]]}}}],["单条",{"_index":7649,"t":{"3224":{"position":[[351,2]]},"3261":{"position":[[120,2]]},"3269":{"position":[[27,2]]},"3996":{"position":[[1633,2]]}}}],["单点",{"_index":7109,"t":{"2846":{"position":[[386,2]]}}}],["单片机",{"_index":1230,"t":{"176":{"position":[[19,3]]}}}],["单独",{"_index":945,"t":{"125":{"position":[[73,2]]},"127":{"position":[[1363,2]]},"1149":{"position":[[28,2]]},"2352":{"position":[[206,2],[351,2]]},"2803":{"position":[[130,2]]},"2925":{"position":[[446,2]]},"2941":{"position":[[446,2]]},"2955":{"position":[[446,2]]},"3092":{"position":[[77,2]]},"3094":{"position":[[167,2]]},"3254":{"position":[[595,2],[970,2],[1197,2]]},"3770":{"position":[[1230,2],[2684,2],[4537,2]]}}}],["单行",{"_index":3781,"t":{"929":{"position":[[3197,2],[3418,2],[3730,2],[3917,2]]}}}],["单词",{"_index":504,"t":{"85":{"position":[[210,2]]},"777":{"position":[[21,2]]},"1323":{"position":[[21,2]]},"1520":{"position":[[240,2]]},"1592":{"position":[[275,2]]},"1594":{"position":[[353,2]]},"1647":{"position":[[33,2]]},"3948":{"position":[[456,2]]},"3968":{"position":[[199,2]]}}}],["单调",{"_index":6147,"t":{"2326":{"position":[[138,2]]}}}],["单身",{"_index":2374,"t":{"397":{"position":[[184,2]]},"3926":{"position":[[208,2]]}}}],["南非",{"_index":6428,"t":{"2559":{"position":[[23,2],[906,2]]}}}],["博",{"_index":7375,"t":{"3086":{"position":[[28,1]]}}}],["博客",{"_index":4907,"t":{"1513":{"position":[[34,2]]},"2317":{"position":[[34,2]]},"3086":{"position":[[49,2]]},"3992":{"position":[[2801,2]]}}}],["博客园",{"_index":7893,"t":{"3307":{"position":[[247,3]]}}}],["占位",{"_index":5137,"t":{"1617":{"position":[[1181,2],[1188,2]]},"1647":{"position":[[41,2],[53,2]]},"1857":{"position":[[124,2]]},"1875":{"position":[[648,2]]},"2424":{"position":[[34,2],[48,2],[58,2]]}}}],["占用",{"_index":7054,"t":{"2788":{"position":[[216,2]]},"3432":{"position":[[4368,2],[4553,2]]},"3924":{"position":[[1184,2]]},"3932":{"position":[[1158,2]]},"3948":{"position":[[357,2]]},"3966":{"position":[[1146,2]]},"3970":{"position":[[340,2]]}}}],["卡",{"_index":6587,"t":{"2559":{"position":[[1506,1],[1517,1]]}}}],["卡号",{"_index":7038,"t":{"2782":{"position":[[113,2]]}}}],["卡塔尔",{"_index":6455,"t":{"2559":{"position":[[232,3]]}}}],["卡死",{"_index":10116,"t":{"3986":{"position":[[1122,2]]}}}],["卢森堡",{"_index":6550,"t":{"2559":{"position":[[1131,3],[1274,3]]}}}],["印",{"_index":4772,"t":{"1511":{"position":[[2326,1]]},"1691":{"position":[[70,1]]}}}],["印尼",{"_index":6581,"t":{"2559":{"position":[[1432,2],[1441,2],[1445,2]]}}}],["印度",{"_index":6570,"t":{"2559":{"position":[[1337,2],[1377,2],[1382,2],[1523,2],[1580,2],[1755,2],[1912,2],[1977,2],[2518,2],[2568,2]]}}}],["印度语",{"_index":6576,"t":{"2559":{"position":[[1366,3]]}}}],["危地马拉",{"_index":6655,"t":{"2559":{"position":[[2248,4]]}}}],["危险",{"_index":6155,"t":{"2326":{"position":[[255,2]]}}}],["即使",{"_index":605,"t":{"98":{"position":[[123,2]]},"423":{"position":[[114,2]]},"1615":{"position":[[335,2]]},"1901":{"position":[[510,2]]},"2245":{"position":[[49,2]]},"2809":{"position":[[129,2]]},"2862":{"position":[[421,2]]},"3352":{"position":[[463,2]]}}}],["即便",{"_index":7732,"t":{"3242":{"position":[[80,2]]},"3910":{"position":[[77,2]]},"3934":{"position":[[2174,2]]}}}],["即可",{"_index":76,"t":{"3":{"position":[[919,2]]},"19":{"position":[[628,2]]},"46":{"position":[[98,2]]},"51":{"position":[[252,2]]},"55":{"position":[[9,2]]},"60":{"position":[[98,2]]},"62":{"position":[[252,2]]},"66":{"position":[[9,2]]},"70":{"position":[[98,2]]},"75":{"position":[[252,2]]},"79":{"position":[[9,2]]},"95":{"position":[[66,2]]},"127":{"position":[[119,2]]},"133":{"position":[[66,2],[711,2],[1126,2]]},"135":{"position":[[67,2]]},"137":{"position":[[116,2],[176,2]]},"141":{"position":[[56,2]]},"146":{"position":[[1022,2]]},"148":{"position":[[335,2]]},"210":{"position":[[227,2]]},"212":{"position":[[94,2]]},"218":{"position":[[308,2]]},"220":{"position":[[186,2]]},"229":{"position":[[53,2]]},"247":{"position":[[430,2]]},"249":{"position":[[80,2]]},"261":{"position":[[74,2]]},"306":{"position":[[171,2],[213,2]]},"308":{"position":[[496,2]]},"310":{"position":[[345,2]]},"314":{"position":[[74,2],[423,2]]},"316":{"position":[[76,2]]},"321":{"position":[[27,2]]},"323":{"position":[[51,2]]},"331":{"position":[[95,2],[234,2]]},"336":{"position":[[117,2]]},"340":{"position":[[115,2],[1331,2]]},"344":{"position":[[430,2]]},"346":{"position":[[514,2]]},"348":{"position":[[459,2]]},"355":{"position":[[590,2]]},"371":{"position":[[638,2]]},"413":{"position":[[96,2]]},"417":{"position":[[258,2]]},"421":{"position":[[50,2]]},"423":{"position":[[280,2]]},"427":{"position":[[198,2]]},"441":{"position":[[82,2]]},"445":{"position":[[90,2]]},"449":{"position":[[90,2]]},"451":{"position":[[85,2]]},"463":{"position":[[88,2]]},"528":{"position":[[354,2]]},"544":{"position":[[68,2]]},"570":{"position":[[46,2]]},"572":{"position":[[1252,2]]},"606":{"position":[[1377,2]]},"621":{"position":[[69,2]]},"653":{"position":[[87,2],[212,2]]},"655":{"position":[[308,2]]},"675":{"position":[[297,2]]},"679":{"position":[[103,2]]},"683":{"position":[[45,2]]},"698":{"position":[[40,2]]},"717":{"position":[[14,2]]},"719":{"position":[[70,2]]},"734":{"position":[[7779,2]]},"743":{"position":[[50,2]]},"751":{"position":[[87,2]]},"765":{"position":[[35,2]]},"844":{"position":[[66,2]]},"846":{"position":[[149,2]]},"864":{"position":[[33,2]]},"899":{"position":[[1686,2]]},"903":{"position":[[60,2]]},"915":{"position":[[27,2]]},"945":{"position":[[19,2]]},"947":{"position":[[93,2]]},"981":{"position":[[49,2]]},"1073":{"position":[[33,2]]},"1202":{"position":[[39,2]]},"1204":{"position":[[231,2]]},"1208":{"position":[[47,2]]},"1214":{"position":[[197,2]]},"1286":{"position":[[99,2]]},"1293":{"position":[[21,2]]},"1353":{"position":[[87,2],[179,2]]},"1360":{"position":[[51,2]]},"1364":{"position":[[505,2]]},"1379":{"position":[[97,2]]},"1408":{"position":[[1057,2]]},"1412":{"position":[[2558,2]]},"1418":{"position":[[60,2]]},"1420":{"position":[[36,2]]},"1424":{"position":[[462,2],[1756,2],[1840,2]]},"1426":{"position":[[66,2]]},"1465":{"position":[[12,2]]},"1468":{"position":[[103,2]]},"1472":{"position":[[64,2]]},"1474":{"position":[[453,2]]},"1539":{"position":[[1674,2]]},"1541":{"position":[[66,2],[315,2]]},"1547":{"position":[[308,2],[442,2]]},"1549":{"position":[[397,2],[513,2]]},"1551":{"position":[[24,2],[101,2]]},"1623":{"position":[[115,2]]},"1627":{"position":[[91,2],[405,2]]},"1631":{"position":[[436,2]]},"1667":{"position":[[31,2]]},"1701":{"position":[[49,2]]},"1707":{"position":[[71,2]]},"1741":{"position":[[792,2],[1554,2],[1737,2],[2396,2],[2528,2]]},"1743":{"position":[[286,2],[481,2]]},"1751":{"position":[[58,2]]},"1755":{"position":[[379,2]]},"1783":{"position":[[138,2]]},"1785":{"position":[[89,2]]},"1795":{"position":[[2867,2],[3028,2]]},"1797":{"position":[[76,2]]},"1799":{"position":[[161,2]]},"1805":{"position":[[81,2]]},"1887":{"position":[[111,2]]},"1981":{"position":[[123,2]]},"1993":{"position":[[123,2]]},"1995":{"position":[[73,2]]},"2016":{"position":[[131,2]]},"2018":{"position":[[73,2]]},"2255":{"position":[[594,2]]},"2298":{"position":[[109,2]]},"2315":{"position":[[60,2]]},"2326":{"position":[[243,2]]},"2354":{"position":[[119,2]]},"2357":{"position":[[95,2],[193,2]]},"2359":{"position":[[511,2]]},"2375":{"position":[[52,2]]},"2379":{"position":[[612,2]]},"2385":{"position":[[102,2]]},"2395":{"position":[[144,2]]},"2402":{"position":[[67,2]]},"2404":{"position":[[52,2]]},"2426":{"position":[[304,2]]},"2438":{"position":[[334,2]]},"2440":{"position":[[368,2]]},"2442":{"position":[[105,2]]},"2474":{"position":[[42,2]]},"2497":{"position":[[228,2]]},"2501":{"position":[[116,2]]},"2506":{"position":[[22,2]]},"2508":{"position":[[64,2]]},"2510":{"position":[[105,2]]},"2512":{"position":[[140,2]]},"2538":{"position":[[186,2]]},"2542":{"position":[[36,2],[101,2],[166,2]]},"2547":{"position":[[20,2]]},"2555":{"position":[[166,2]]},"2557":{"position":[[171,2]]},"2603":{"position":[[65,2]]},"2625":{"position":[[608,2]]},"2635":{"position":[[62,2]]},"2655":{"position":[[14,2]]},"2657":{"position":[[61,2]]},"2662":{"position":[[62,2]]},"2674":{"position":[[171,2]]},"2688":{"position":[[148,2]]},"2696":{"position":[[75,2]]},"2709":{"position":[[317,2]]},"2729":{"position":[[199,2]]},"2735":{"position":[[104,2]]},"2776":{"position":[[52,2]]},"2805":{"position":[[53,2],[524,2]]},"2819":{"position":[[45,2]]},"2834":{"position":[[36,2]]},"2848":{"position":[[1633,2]]},"2850":{"position":[[46,2]]},"2862":{"position":[[442,2]]},"2875":{"position":[[614,2]]},"2881":{"position":[[114,2],[302,2]]},"2891":{"position":[[115,2]]},"2901":{"position":[[39,2]]},"2905":{"position":[[106,2]]},"2933":{"position":[[668,2]]},"2937":{"position":[[133,2]]},"2949":{"position":[[532,2]]},"2963":{"position":[[537,2]]},"2967":{"position":[[82,2]]},"2977":{"position":[[75,2]]},"2985":{"position":[[123,2]]},"2987":{"position":[[75,2]]},"2997":{"position":[[75,2]]},"3005":{"position":[[75,2]]},"3019":{"position":[[75,2]]},"3027":{"position":[[75,2]]},"3035":{"position":[[75,2]]},"3043":{"position":[[75,2]]},"3051":{"position":[[75,2]]},"3059":{"position":[[75,2]]},"3063":{"position":[[267,2]]},"3071":{"position":[[586,2],[826,2],[1216,2],[1309,2]]},"3073":{"position":[[25,2]]},"3078":{"position":[[73,2]]},"3080":{"position":[[548,2]]},"3110":{"position":[[120,2]]},"3126":{"position":[[426,2]]},"3144":{"position":[[64,2]]},"3154":{"position":[[38,2]]},"3158":{"position":[[56,2]]},"3189":{"position":[[289,2]]},"3207":{"position":[[142,2]]},"3254":{"position":[[56,2]]},"3269":{"position":[[16,2]]},"3271":{"position":[[16,2]]},"3287":{"position":[[48,2],[1284,2],[2976,2]]},"3296":{"position":[[107,2]]},"3309":{"position":[[74,2]]},"3325":{"position":[[12,2]]},"3329":{"position":[[114,2]]},"3343":{"position":[[20,2]]},"3362":{"position":[[32,2]]},"3365":{"position":[[40,2]]},"3371":{"position":[[502,2]]},"3383":{"position":[[43,2]]},"3387":{"position":[[50,2]]},"3397":{"position":[[31,2]]},"3405":{"position":[[54,2]]},"3428":{"position":[[114,2]]},"3440":{"position":[[129,2]]},"3442":{"position":[[176,2]]},"3448":{"position":[[1419,2]]},"3458":{"position":[[587,2]]},"3460":{"position":[[70,2]]},"3468":{"position":[[115,2]]},"3524":{"position":[[40,2]]},"3587":{"position":[[16,2]]},"3601":{"position":[[1642,2]]},"3636":{"position":[[735,2]]},"3660":{"position":[[77,2]]},"3662":{"position":[[46,2]]},"3664":{"position":[[116,2],[583,2]]},"3668":{"position":[[36,2]]},"3670":{"position":[[114,2]]},"3672":{"position":[[86,2]]},"3684":{"position":[[58,2]]},"3686":{"position":[[135,2]]},"3692":{"position":[[79,2]]},"3696":{"position":[[59,2]]},"3698":{"position":[[115,2]]},"3704":{"position":[[133,2],[221,2]]},"3706":{"position":[[259,2]]},"3708":{"position":[[3771,2]]},"3710":{"position":[[45,2]]},"3772":{"position":[[87,2]]},"3806":{"position":[[93,2],[296,2],[3229,2]]},"3924":{"position":[[3661,2],[3755,2]]},"3938":{"position":[[1027,2]]}}}],["即将",{"_index":1127,"t":{"148":{"position":[[327,2],[363,2]]},"152":{"position":[[710,2]]}}}],["即时",{"_index":7473,"t":{"3136":{"position":[[60,2]]},"3142":{"position":[[169,2]]},"3986":{"position":[[1000,2]]}}}],["即时通讯",{"_index":7468,"t":{"3136":{"position":[[0,4],[82,4],[112,4],[171,4]]},"3138":{"position":[[0,4],[140,4]]},"3140":{"position":[[0,4],[26,4]]},"3144":{"position":[[372,4]]},"3918":{"position":[[4176,4]]},"3936":{"position":[[937,4]]}}}],["卸载",{"_index":4990,"t":{"1547":{"position":[[374,2]]},"1549":{"position":[[454,2]]},"2629":{"position":[[33,2]]},"3986":{"position":[[312,2]]}}}],["厂商",{"_index":931,"t":{"121":{"position":[[672,2]]},"2910":{"position":[[209,2],[248,2],[276,2],[291,2]]}}}],["厄瓜多尔",{"_index":6651,"t":{"2559":{"position":[[2215,4]]}}}],["历",{"_index":9425,"t":{"3926":{"position":[[541,1]]}}}],["历史",{"_index":559,"t":{"95":{"position":[[24,2]]},"3930":{"position":[[906,2]]}}}],["历史悠久",{"_index":9432,"t":{"3928":{"position":[[97,4]]}}}],["历史数据",{"_index":7431,"t":{"3110":{"position":[[243,4]]}}}],["压",{"_index":6793,"t":{"2678":{"position":[[8,1]]},"3918":{"position":[[3534,1]]}}}],["压力",{"_index":9417,"t":{"3926":{"position":[[490,2]]}}}],["压缩",{"_index":8322,"t":{"3530":{"position":[[26,2]]},"3944":{"position":[[125,2]]},"3996":{"position":[[1135,2]]}}}],["压缩包",{"_index":3165,"t":{"606":{"position":[[404,3]]}}}],["厘米",{"_index":4799,"t":{"1511":{"position":[[2647,2]]}}}],["原则",{"_index":2269,"t":{"353":{"position":[[14,2]]},"945":{"position":[[17,2]]}}}],["原因",{"_index":1534,"t":{"206":{"position":[[85,2]]},"218":{"position":[[45,2]]},"406":{"position":[[24,2]]},"1424":{"position":[[52,2]]},"1432":{"position":[[140,2]]},"1468":{"position":[[27,2]]},"1663":{"position":[[507,2]]},"2331":{"position":[[218,2]]},"2335":{"position":[[34,2]]},"2359":{"position":[[611,2]]},"2613":{"position":[[41,2]]},"2629":{"position":[[41,2]]},"2943":{"position":[[478,2]]},"3069":{"position":[[113,2]]},"3412":{"position":[[74,2]]},"3434":{"position":[[2737,2]]},"3522":{"position":[[57,2]]},"3563":{"position":[[55,2]]},"3585":{"position":[[88,2]]},"3676":{"position":[[3,2]]},"3912":{"position":[[1918,2]]},"3914":{"position":[[1292,2],[2612,2]]},"3940":{"position":[[513,2]]},"3950":{"position":[[354,2]]},"3992":{"position":[[2862,2]]}}}],["原始",{"_index":5567,"t":{"1801":{"position":[[1618,2]]},"2591":{"position":[[8,2]]},"2981":{"position":[[481,2]]},"3720":{"position":[[6,2]]},"3752":{"position":[[40,2],[65,2]]},"3924":{"position":[[1317,2]]},"3986":{"position":[[1733,2]]}}}],["原子",{"_index":7832,"t":{"3282":{"position":[[103,2]]}}}],["原有",{"_index":4240,"t":{"1396":{"position":[[56,2]]},"1580":{"position":[[150,2]]},"1625":{"position":[[44,2]]},"1641":{"position":[[47,2]]},"1645":{"position":[[15,2]]},"1695":{"position":[[45,2]]},"1791":{"position":[[46,2]]},"2391":{"position":[[47,2]]},"3758":{"position":[[99,2]]},"3948":{"position":[[46,2]]}}}],["原本",{"_index":4205,"t":{"1387":{"position":[[26,2]]}}}],["原来",{"_index":4309,"t":{"1424":{"position":[[122,2]]},"2875":{"position":[[597,2]]},"3916":{"position":[[1476,2]]}}}],["原样",{"_index":1944,"t":{"288":{"position":[[302,2]]},"3063":{"position":[[853,2]]},"3595":{"position":[[359,2]]},"3706":{"position":[[845,2]]}}}],["原理",{"_index":697,"t":{"112":{"position":[[2,2]]},"408":{"position":[[109,2]]},"585":{"position":[[579,2]]},"1621":{"position":[[699,2]]},"3112":{"position":[[53,2]]}}}],["原生",{"_index":2822,"t":{"526":{"position":[[61,2],[122,2]]},"540":{"position":[[61,2]]},"1157":{"position":[[55,2]]},"3156":{"position":[[317,2]]},"3207":{"position":[[137,2]]},"3273":{"position":[[99,2]]},"3438":{"position":[[11,2]]},"3924":{"position":[[1472,2]]},"3932":{"position":[[1094,2]]},"3936":{"position":[[524,2]]}}}],["去掉",{"_index":5064,"t":{"1576":{"position":[[153,2],[179,2]]},"1741":{"position":[[1664,2]]},"3956":{"position":[[230,2]]}}}],["去除",{"_index":2294,"t":{"361":{"position":[[38,2]]},"1592":{"position":[[9,2]]},"1594":{"position":[[11,2],[151,2]]},"1661":{"position":[[699,2],[814,2]]},"2721":{"position":[[39,2]]},"3023":{"position":[[696,2],[811,2]]}}}],["参",{"_index":3802,"t":{"945":{"position":[[42,1]]},"1143":{"position":[[63,1]]},"1364":{"position":[[484,1]]},"1741":{"position":[[2531,1]]},"1775":{"position":[[119,1]]}}}],["参与",{"_index":6180,"t":{"2333":{"position":[[325,2]]},"3702":{"position":[[1537,2]]}}}],["参差不齐",{"_index":5440,"t":{"1761":{"position":[[199,4],[476,4]]},"3612":{"position":[[12,4]]}}}],["参数",{"_index":316,"t":{"19":{"position":[[720,2],[827,2]]},"91":{"position":[[594,2]]},"112":{"position":[[63,2],[1012,2]]},"114":{"position":[[1146,2]]},"144":{"position":[[347,2]]},"184":{"position":[[25,2]]},"210":{"position":[[48,2],[128,2],[158,2]]},"218":{"position":[[284,2],[306,2]]},"300":{"position":[[260,2]]},"319":{"position":[[635,2]]},"340":{"position":[[99,2]]},"350":{"position":[[504,2],[512,2]]},"365":{"position":[[33,2],[37,2]]},"369":{"position":[[49,2],[57,2],[74,2],[155,2],[203,2],[279,2],[332,2],[370,2],[439,2],[863,2]]},"413":{"position":[[53,2]]},"419":{"position":[[364,2]]},"435":{"position":[[1008,2]]},"484":{"position":[[54,2]]},"572":{"position":[[614,2],[1059,2],[1250,2]]},"585":{"position":[[62,2],[462,2]]},"587":{"position":[[379,2],[695,2],[759,2]]},"606":{"position":[[1352,2]]},"608":{"position":[[36,2]]},"653":{"position":[[85,2]]},"685":{"position":[[281,2],[361,2]]},"698":{"position":[[21,2],[110,2]]},"706":{"position":[[275,2]]},"715":{"position":[[71,2]]},"793":{"position":[[131,2],[141,2]]},"924":{"position":[[55,2]]},"1066":{"position":[[166,2]]},"1103":{"position":[[96,2],[108,2]]},"1125":{"position":[[29,2],[42,2],[55,2],[112,2],[147,2],[176,2]]},"1127":{"position":[[145,2],[238,2],[316,2]]},"1131":{"position":[[34,2],[57,2],[123,2],[151,2]]},"1135":{"position":[[7,2],[75,2]]},"1155":{"position":[[93,2],[111,2]]},"1185":{"position":[[38,2],[73,2],[102,2],[422,2],[515,2],[593,2]]},"1194":{"position":[[448,2]]},"1200":{"position":[[15,2],[83,2],[154,2],[179,2],[218,2],[236,2],[257,2],[260,2]]},"1234":{"position":[[117,2],[249,2],[382,2],[755,2],[764,2],[777,2],[846,2],[851,2],[860,2],[875,2],[928,2],[1066,2]]},"1236":{"position":[[117,2],[252,2],[388,2]]},"1238":{"position":[[117,2],[292,2],[468,2]]},"1240":{"position":[[117,2],[313,2],[510,2],[1047,2]]},"1246":{"position":[[101,2]]},"1257":{"position":[[386,2]]},"1265":{"position":[[101,2]]},"1269":{"position":[[194,2],[249,2]]},"1279":{"position":[[54,2],[65,2],[152,2]]},"1319":{"position":[[276,2]]},"1353":{"position":[[85,2]]},"1392":{"position":[[128,2]]},"1396":{"position":[[2,2],[100,2]]},"1412":{"position":[[133,2],[140,2],[184,2],[1415,2]]},"1430":{"position":[[43,2]]},"1440":{"position":[[736,2],[842,2]]},"1520":{"position":[[169,2],[173,2],[204,2],[226,2],[230,2],[250,2],[257,2],[275,2]]},"1522":{"position":[[8,2],[26,2],[47,2]]},"1524":{"position":[[11,2],[39,2],[79,2]]},"1526":{"position":[[52,2]]},"1528":{"position":[[28,2]]},"1530":{"position":[[50,2]]},"1539":{"position":[[575,2],[803,2],[1032,2],[1152,2],[1691,2],[1695,2],[1710,2],[1715,2],[1751,2],[1864,2],[1877,2],[1899,2],[1948,2]]},"1541":{"position":[[26,2],[54,2],[307,2],[368,2]]},"1549":{"position":[[328,2]]},"1557":{"position":[[5,2],[36,2],[89,2],[143,2],[256,2],[415,2],[583,2],[823,2]]},"1576":{"position":[[258,2],[283,2]]},"1580":{"position":[[487,2]]},"1594":{"position":[[373,2]]},"1598":{"position":[[58,2],[92,2],[113,2],[137,2]]},"1600":{"position":[[57,2]]},"1609":{"position":[[39,2],[305,2]]},"1611":{"position":[[20,2],[54,2],[326,2],[410,2],[809,2],[844,2],[852,2],[901,2]]},"1615":{"position":[[280,2],[313,2],[332,2]]},"1627":{"position":[[13,2],[40,2],[257,2],[363,2],[373,2],[385,2]]},"1629":{"position":[[14,2],[20,2],[44,2],[71,2],[104,2],[162,2]]},"1631":{"position":[[50,2]]},"1633":{"position":[[35,2]]},"1643":{"position":[[5,2]]},"1645":{"position":[[9,2]]},"1647":{"position":[[15,2],[441,2]]},"1649":{"position":[[9,2]]},"1651":{"position":[[8,2]]},"1653":{"position":[[7,2]]},"1655":{"position":[[8,2]]},"1657":{"position":[[42,2],[131,2]]},"1661":{"position":[[411,2],[416,2],[517,2]]},"1685":{"position":[[168,2],[185,2]]},"1741":{"position":[[74,2],[861,2],[1704,2],[2495,2]]},"1799":{"position":[[1106,2]]},"1851":{"position":[[200,2],[479,2],[727,2],[999,2]]},"1857":{"position":[[70,2],[101,2],[134,2],[175,2],[201,2]]},"1869":{"position":[[263,2],[287,2],[311,2],[333,2]]},"1875":{"position":[[365,2],[375,2],[456,2],[466,2],[515,2],[525,2],[658,2],[699,2],[725,2]]},"1896":{"position":[[40,2]]},"1901":{"position":[[221,2]]},"1907":{"position":[[315,2],[449,2]]},"1909":{"position":[[947,2]]},"1919":{"position":[[390,2]]},"1923":{"position":[[98,2],[109,2]]},"1925":{"position":[[861,2]]},"1979":{"position":[[864,2]]},"1991":{"position":[[260,2]]},"2014":{"position":[[260,2]]},"2065":{"position":[[106,2]]},"2331":{"position":[[49,2],[171,2],[570,2]]},"2361":{"position":[[315,2],[419,2]]},"2442":{"position":[[177,2]]},"2544":{"position":[[30,2]]},"2547":{"position":[[86,2],[95,2]]},"2581":{"position":[[40,2],[88,2],[557,2],[574,2],[577,2],[588,2]]},"2745":{"position":[[264,2]]},"2747":{"position":[[299,2]]},"2790":{"position":[[74,2]]},"2843":{"position":[[153,2]]},"2875":{"position":[[47,2]]},"2897":{"position":[[64,2]]},"2969":{"position":[[94,2]]},"3023":{"position":[[408,2],[413,2],[514,2]]},"3063":{"position":[[1300,2]]},"3158":{"position":[[21,2]]},"3173":{"position":[[18,2]]},"3175":{"position":[[21,2]]},"3177":{"position":[[21,2]]},"3179":{"position":[[25,2]]},"3181":{"position":[[36,2]]},"3183":{"position":[[26,2]]},"3185":{"position":[[37,2]]},"3187":{"position":[[32,2]]},"3189":{"position":[[414,2]]},"3215":{"position":[[457,2]]},"3269":{"position":[[30,2]]},"3273":{"position":[[277,2]]},"3275":{"position":[[415,2]]},"3323":{"position":[[456,2],[574,2]]},"3339":{"position":[[349,2]]},"3371":{"position":[[132,2],[158,2]]},"3375":{"position":[[14,2],[182,2]]},"3389":{"position":[[538,2],[564,2]]},"3405":{"position":[[25,2],[36,2]]},"3432":{"position":[[248,2]]},"3434":{"position":[[672,2]]},"3446":{"position":[[1621,2]]},"3448":{"position":[[271,2]]},"3510":{"position":[[102,2]]},"3539":{"position":[[53,2]]},"3547":{"position":[[778,2],[794,2]]},"3551":{"position":[[34,2],[92,2],[410,2]]},"3553":{"position":[[34,2],[92,2]]},"3555":{"position":[[34,2],[92,2]]},"3557":{"position":[[34,2],[92,2]]},"3559":{"position":[[34,2],[92,2]]},"3563":{"position":[[702,2]]},"3622":{"position":[[64,2],[143,2],[153,2]]},"3626":{"position":[[571,2]]},"3636":{"position":[[112,2],[416,2]]},"3664":{"position":[[19,2],[469,2]]},"3666":{"position":[[43,2]]},"3672":{"position":[[298,2],[324,2]]},"3678":{"position":[[53,2],[90,2]]},"3686":{"position":[[572,2]]},"3706":{"position":[[1311,2]]},"3718":{"position":[[37,2],[102,2]]},"3793":{"position":[[45,2]]},"3798":{"position":[[217,2]]},"3806":{"position":[[1286,2],[1290,2],[1309,2],[1326,2],[1357,2],[1487,2],[1690,2]]},"3808":{"position":[[37,2]]},"3810":{"position":[[388,2],[421,2]]},"3824":{"position":[[85,2]]},"3830":{"position":[[69,2]]},"3910":{"position":[[496,2],[504,2],[646,2],[2199,2],[2254,2],[2425,2]]},"3912":{"position":[[2333,2],[2340,2],[2457,2]]},"3914":{"position":[[3106,2]]},"3918":{"position":[[1036,2],[2432,2],[3021,2],[3223,2]]},"3920":{"position":[[1245,2],[1687,2]]},"3922":{"position":[[852,2],[2186,2]]},"3924":{"position":[[853,2],[1284,2],[1746,2],[2880,2],[2906,2]]},"3928":{"position":[[2183,2]]},"3930":{"position":[[450,2],[751,2]]},"3932":{"position":[[247,2],[288,2],[403,2],[829,2],[1104,2],[1395,2],[1969,2],[2117,2],[2225,2]]},"3934":{"position":[[657,2],[667,2],[777,2]]},"3938":{"position":[[286,2],[488,2]]},"3946":{"position":[[342,2]]},"3948":{"position":[[479,2]]},"3950":{"position":[[67,2]]},"3956":{"position":[[179,2],[227,2],[241,2]]},"3960":{"position":[[282,2],[296,2]]},"3962":{"position":[[622,2],[636,2],[1401,2],[1471,2]]},"3964":{"position":[[205,2],[420,2],[988,2],[1083,2]]},"3966":{"position":[[1354,2]]},"3976":{"position":[[323,2],[437,2]]},"3978":{"position":[[720,2],[1636,2]]},"3980":{"position":[[170,2]]},"3982":{"position":[[95,2],[274,2],[428,2]]},"3984":{"position":[[275,2],[822,2]]},"3986":{"position":[[281,2],[1293,2],[1451,2],[1695,2]]},"3992":{"position":[[495,2],[607,2],[656,2],[898,2],[2086,2]]},"3994":{"position":[[363,2]]},"3996":{"position":[[1220,2]]},"4000":{"position":[[353,2]]}}}],["参数传递",{"_index":7537,"t":{"3150":{"position":[[157,4]]}}}],["参数信息",{"_index":5036,"t":{"1557":{"position":[[881,4]]}}}],["参数值",{"_index":2315,"t":{"369":{"position":[[411,3]]},"1129":{"position":[[620,3],[1610,3]]},"1520":{"position":[[319,3],[391,3]]},"1522":{"position":[[11,3],[29,3],[50,3]]},"1524":{"position":[[14,3],[42,3],[82,3]]},"1526":{"position":[[55,3]]},"1528":{"position":[[31,3]]},"1530":{"position":[[53,3]]}}}],["参数设置",{"_index":9780,"t":{"3964":{"position":[[179,4]]}}}],["参考",{"_index":1119,"t":{"148":{"position":[[157,2]]},"182":{"position":[[60,2]]},"184":{"position":[[34,2]]},"419":{"position":[[16,2]]},"855":{"position":[[61,2]]},"857":{"position":[[57,2]]},"1041":{"position":[[25,2]]},"1377":{"position":[[47,2]]},"1927":{"position":[[376,2],[680,2]]},"1935":{"position":[[307,2]]},"1943":{"position":[[245,2]]},"1953":{"position":[[245,2]]},"2583":{"position":[[33,2]]},"3112":{"position":[[56,2]]},"3194":{"position":[[855,2]]},"3254":{"position":[[1223,2]]},"3269":{"position":[[4,2]]},"3271":{"position":[[4,2]]},"3403":{"position":[[24,2]]},"3589":{"position":[[650,2]]},"3716":{"position":[[302,2],[399,2],[518,2],[663,2]]}}}],["参见",{"_index":3235,"t":{"631":{"position":[[0,2]]},"1420":{"position":[[741,2],[777,2],[811,2],[845,2],[898,2]]},"1665":{"position":[[351,2]]},"1879":{"position":[[0,2]]},"2723":{"position":[[62,2]]},"2854":{"position":[[0,2]]},"3001":{"position":[[302,2],[328,2],[353,2],[377,2],[420,2]]}}}],["又名",{"_index":5771,"t":{"1892":{"position":[[3,2]]}}}],["又称",{"_index":8641,"t":{"3760":{"position":[[4,2]]}}}],["又臭又长",{"_index":2158,"t":{"336":{"position":[[272,4]]}}}],["及时",{"_index":1274,"t":{"182":{"position":[[101,2]]},"734":{"position":[[80,2]]},"773":{"position":[[72,2]]},"3207":{"position":[[82,2]]},"3387":{"position":[[19,2]]}}}],["友好",{"_index":1321,"t":{"186":{"position":[[141,2]]},"1837":{"position":[[3,2],[16,2]]},"1839":{"position":[[7,2]]},"1841":{"position":[[17,2]]},"1853":{"position":[[25,2]]},"3007":{"position":[[0,2],[19,2]]},"3013":{"position":[[11,2]]},"3246":{"position":[[98,2]]},"3918":{"position":[[752,2],[4148,2]]},"3920":{"position":[[344,2]]},"3924":{"position":[[1304,2]]},"3928":{"position":[[161,2]]},"3932":{"position":[[1346,2]]},"3954":{"position":[[641,2]]},"3992":{"position":[[2209,2]]},"3998":{"position":[[658,2]]}}}],["友情",{"_index":10398,"t":{"3996":{"position":[[1289,2]]}}}],["双",{"_index":4929,"t":{"1520":{"position":[[345,1]]},"3124":{"position":[[2,1]]}}}],["双击",{"_index":2016,"t":{"306":{"position":[[157,2]]},"331":{"position":[[218,2]]}}}],["双引号",{"_index":4932,"t":{"1520":{"position":[[364,3]]},"2747":{"position":[[236,3]]},"3080":{"position":[[452,3]]}}}],["双截棍",{"_index":6965,"t":{"2768":{"position":[[1015,3]]}}}],["双眼",{"_index":9370,"t":{"3926":{"position":[[92,2]]}}}],["双重",{"_index":9416,"t":{"3926":{"position":[[486,2]]}}}],["反",{"_index":5619,"t":{"1803":{"position":[[3719,1]]},"2345":{"position":[[435,1]]},"2352":{"position":[[164,1]]},"2357":{"position":[[962,1]]},"2383":{"position":[[52,1]]},"3798":{"position":[[224,1]]},"3914":{"position":[[3438,1]]},"3986":{"position":[[862,1]]}}}],["反之亦然",{"_index":6221,"t":{"2354":{"position":[[73,4]]},"2682":{"position":[[72,4]]},"3150":{"position":[[94,4]]}}}],["反向",{"_index":3321,"t":{"677":{"position":[[171,2],[208,2],[234,2]]},"704":{"position":[[171,2],[208,2]]},"2251":{"position":[[157,2]]}}}],["反射",{"_index":4222,"t":{"1389":{"position":[[205,2]]},"1412":{"position":[[1226,2],[1405,2]]},"3170":{"position":[[35,2]]},"3940":{"position":[[652,2]]},"3942":{"position":[[143,2],[150,2],[409,2]]}}}],["反映",{"_index":1288,"t":{"182":{"position":[[174,2]]}}}],["反正",{"_index":4481,"t":{"1488":{"position":[[1674,2]]}}}],["反而",{"_index":7425,"t":{"3108":{"position":[[219,2]]}}}],["反转",{"_index":607,"t":{"98":{"position":[[148,2]]},"1223":{"position":[[280,2]]},"1383":{"position":[[24,2]]},"1387":{"position":[[2,2],[57,2]]},"1389":{"position":[[251,2]]},"1408":{"position":[[1313,2]]}}}],["发",{"_index":502,"t":{"85":{"position":[[202,1]]},"3908":{"position":[[12,1],[99,1],[138,1],[172,1],[206,1],[233,1],[278,1],[299,1],[317,1]]}}}],["发展",{"_index":2002,"t":{"304":{"position":[[96,2]]},"2770":{"position":[[19,2]]},"2910":{"position":[[47,2]]},"3088":{"position":[[37,2]]},"3207":{"position":[[20,2]]},"3702":{"position":[[1364,2]]}}}],["发布",{"_index":380,"t":{"44":{"position":[[19,2],[65,2]]},"57":{"position":[[19,2],[65,2]]},"68":{"position":[[19,2],[65,2]]},"102":{"position":[[233,2]]},"397":{"position":[[189,2]]},"399":{"position":[[223,2],[846,2]]},"401":{"position":[[166,2]]},"1082":{"position":[[6,2]]},"1372":{"position":[[2,2],[13,2]]},"1374":{"position":[[21,2],[32,2],[80,2],[109,2]]},"1377":{"position":[[3,2],[40,2],[59,2],[234,2],[271,2],[301,2],[471,2],[510,2],[531,2]]},"1444":{"position":[[2,2],[13,2]]},"1472":{"position":[[4,2],[8,2],[51,2]]},"1488":{"position":[[633,2],[783,2],[1631,2]]},"1495":{"position":[[577,2],[727,2],[1221,2],[1255,2]]},"1516":{"position":[[159,2],[213,2]]},"1551":{"position":[[0,2],[1114,2]]},"1697":{"position":[[6,2]]},"1699":{"position":[[151,2]]},"1793":{"position":[[6,2]]},"1795":{"position":[[2178,2]]},"1801":{"position":[[2596,2]]},"1803":{"position":[[4515,2]]},"2311":{"position":[[90,2]]},"2480":{"position":[[49,2]]},"2555":{"position":[[23,2]]},"2633":{"position":[[6,2],[35,2]]},"2646":{"position":[[69,2],[102,2]]},"2745":{"position":[[210,2]]},"2747":{"position":[[34,2],[213,2]]},"2751":{"position":[[499,2]]},"2762":{"position":[[8,2],[46,2]]},"2836":{"position":[[649,2],[718,2],[743,2],[749,2]]},"3069":{"position":[[25,2],[59,2],[110,2],[219,2],[285,2],[302,2]]},"3071":{"position":[[172,2],[309,2],[1222,2]]},"3075":{"position":[[5,2]]},"3078":{"position":[[11,2]]},"3080":{"position":[[429,2]]},"3636":{"position":[[668,2]]},"3758":{"position":[[6,2]]},"3912":{"position":[[6,2],[35,2],[1808,2]]},"3934":{"position":[[948,2]]},"3936":{"position":[[458,2],[890,2],[1321,2]]},"3942":{"position":[[264,2]]},"3960":{"position":[[477,2]]},"3962":{"position":[[1510,2]]},"3974":{"position":[[516,2],[701,2]]}}}],["发布命令",{"_index":7173,"t":{"2897":{"position":[[685,4]]}}}],["发布者",{"_index":5506,"t":{"1795":{"position":[[2013,3]]},"1805":{"position":[[25,3]]},"1821":{"position":[[338,3]]},"3936":{"position":[[110,3]]}}}],["发挥作用",{"_index":5311,"t":{"1699":{"position":[[93,4]]}}}],["发现",{"_index":1255,"t":{"179":{"position":[[152,2]]},"378":{"position":[[13,2],[90,2]]},"382":{"position":[[19,2]]},"1474":{"position":[[37,2]]},"1753":{"position":[[273,2]]},"1855":{"position":[[326,2]]},"1865":{"position":[[219,2]]},"2377":{"position":[[11,2]]},"3094":{"position":[[78,2]]},"3352":{"position":[[446,2],[465,2],[715,2]]},"3626":{"position":[[228,2]]},"3636":{"position":[[675,2]]},"3916":{"position":[[1633,2]]},"3928":{"position":[[145,2]]}}}],["发生",{"_index":1276,"t":{"182":{"position":[[112,2]]},"300":{"position":[[266,2]]},"323":{"position":[[11,2]]},"453":{"position":[[66,2]]},"463":{"position":[[74,2]]},"494":{"position":[[606,2]]},"1547":{"position":[[288,2]]},"1549":{"position":[[377,2]]},"1832":{"position":[[28,2]]},"2729":{"position":[[59,2]]},"3345":{"position":[[67,2]]},"3352":{"position":[[558,2]]},"3412":{"position":[[53,2],[71,2]]},"3740":{"position":[[440,2]]},"3920":{"position":[[324,2]]}}}],["发生变化",{"_index":1244,"t":{"179":{"position":[[78,4]]},"3844":{"position":[[944,4]]}}}],["发短信",{"_index":6287,"t":{"2404":{"position":[[25,3]]}}}],["发起",{"_index":7424,"t":{"3108":{"position":[[191,2]]},"3118":{"position":[[342,2]]},"3982":{"position":[[609,2]]}}}],["发达",{"_index":5215,"t":{"1672":{"position":[[10,2]]},"1761":{"position":[[107,2]]}}}],["发送",{"_index":5512,"t":{"1795":{"position":[[2338,2]]},"1817":{"position":[[78,2],[94,2]]},"1823":{"position":[[5,2]]},"2313":{"position":[[564,2]]},"2404":{"position":[[93,2],[98,2],[170,2]]},"3148":{"position":[[6,2]]},"3189":{"position":[[381,2]]},"3194":{"position":[[542,2]]},"3483":{"position":[[15,2]]},"3486":{"position":[[3,2],[78,2],[156,2],[231,2],[315,2],[396,2],[478,2]]},"3535":{"position":[[49,2],[139,2],[233,2],[323,2],[425,2],[523,2]]},"3601":{"position":[[58,2]]},"3914":{"position":[[2905,2]]},"3918":{"position":[[3827,2]]},"3940":{"position":[[625,2]]}}}],["发邮件",{"_index":6288,"t":{"2404":{"position":[[29,3]]}}}],["取",{"_index":4389,"t":{"1481":{"position":[[13,1]]},"1619":{"position":[[472,1]]},"2278":{"position":[[143,1]]},"2326":{"position":[[216,1]]},"2522":{"position":[[154,1]]},"2553":{"position":[[142,1]]},"3031":{"position":[[142,1]]},"3033":{"position":[[124,1]]},"3106":{"position":[[49,1]]},"3108":{"position":[[10,1],[53,1],[207,1]]},"3112":{"position":[[25,1]]},"3640":{"position":[[459,1]]},"3980":{"position":[[796,1]]},"3992":{"position":[[1864,1]]}}}],["取值",{"_index":2794,"t":{"516":{"position":[[681,2]]},"597":{"position":[[170,2]]},"599":{"position":[[200,2]]},"1420":{"position":[[684,2]]},"1631":{"position":[[673,2]]},"1635":{"position":[[567,2]]},"3001":{"position":[[245,2]]},"3063":{"position":[[317,2]]},"3706":{"position":[[309,2]]}}}],["取决于",{"_index":5044,"t":{"1566":{"position":[[295,3]]},"2331":{"position":[[173,3]]}}}],["取出",{"_index":8438,"t":{"3620":{"position":[[335,2]]}}}],["取消",{"_index":2076,"t":{"314":{"position":[[417,2],[570,2]]},"1753":{"position":[[218,2]]},"1797":{"position":[[575,2],[616,2]]},"1801":{"position":[[2144,2],[2822,2]]},"1803":{"position":[[4106,2],[4794,2]]},"1817":{"position":[[286,2]]},"2438":{"position":[[101,2]]},"2440":{"position":[[135,2]]},"2486":{"position":[[909,2],[973,2]]},"2488":{"position":[[76,2]]},"3795":{"position":[[14,2],[41,2],[56,2],[291,2],[621,2],[645,2]]},"3910":{"position":[[2114,2]]},"3912":{"position":[[1816,2]]},"3956":{"position":[[3156,2]]},"3992":{"position":[[184,2]]},"3996":{"position":[[1056,2]]},"3998":{"position":[[592,2]]}}}],["受",{"_index":5971,"t":{"2100":{"position":[[3,1]]},"3273":{"position":[[795,1]]},"3916":{"position":[[1547,1]]},"3918":{"position":[[1064,1]]},"3952":{"position":[[720,1]]}}}],["受到",{"_index":1183,"t":{"166":{"position":[[20,2]]},"404":{"position":[[145,2]]},"1516":{"position":[[113,2]]},"2768":{"position":[[19,2]]},"3242":{"position":[[198,2]]},"3412":{"position":[[81,2]]},"3910":{"position":[[195,2]]},"3934":{"position":[[2364,2]]}}}],["变",{"_index":105,"t":{"5":{"position":[[152,1]]},"7":{"position":[[148,1]]},"2290":{"position":[[148,1]]},"2862":{"position":[[429,1]]},"3994":{"position":[[1029,1]]}}}],["变为",{"_index":5058,"t":{"1570":{"position":[[23,2]]}}}],["变动",{"_index":2589,"t":{"453":{"position":[[68,2]]},"1389":{"position":[[173,2]]}}}],["变化",{"_index":1247,"t":{"179":{"position":[[98,2],[149,2]]},"431":{"position":[[36,2]]},"1071":{"position":[[20,2]]},"2705":{"position":[[36,2]]},"3910":{"position":[[2069,2]]},"3912":{"position":[[1289,2]]},"3914":{"position":[[1195,2]]},"3916":{"position":[[1386,2]]},"3918":{"position":[[1285,2]]},"3920":{"position":[[996,2]]},"3922":{"position":[[413,2]]},"3924":{"position":[[584,2]]},"3928":{"position":[[466,2]]},"3930":{"position":[[494,2]]},"3932":{"position":[[530,2]]},"3934":{"position":[[408,2]]},"3936":{"position":[[434,2]]},"3938":{"position":[[340,2]]},"3940":{"position":[[278,2]]},"3942":{"position":[[105,2]]},"3944":{"position":[[141,2]]},"3946":{"position":[[81,2]]},"3948":{"position":[[104,2]]},"3952":{"position":[[152,2]]},"3954":{"position":[[303,2]]},"3956":{"position":[[146,2]]},"3960":{"position":[[161,2]]},"3962":{"position":[[497,2],[1688,2]]},"3964":{"position":[[257,2],[619,2]]},"3966":{"position":[[412,2],[1196,2]]},"3968":{"position":[[144,2],[357,2]]},"3970":{"position":[[99,2],[363,2]]},"3972":{"position":[[249,2],[555,2]]},"3974":{"position":[[238,2],[599,2]]},"3976":{"position":[[251,2],[503,2]]},"3978":{"position":[[401,2],[1284,2]]},"3980":{"position":[[184,2],[573,2]]},"3982":{"position":[[208,2],[658,2]]},"3984":{"position":[[291,2],[768,2]]},"3986":{"position":[[158,2],[937,2]]},"3988":{"position":[[250,2],[460,2]]},"3990":{"position":[[236,2],[645,2]]},"3992":{"position":[[983,2],[2608,2]]},"3994":{"position":[[460,2],[1566,2]]},"3996":{"position":[[352,2],[1398,2]]},"3998":{"position":[[422,2],[747,2]]},"4000":{"position":[[508,2],[1206,2]]},"4002":{"position":[[171,2],[378,2]]},"4004":{"position":[[159,2]]},"4006":{"position":[[176,2]]}}}],["变化趋势",{"_index":1262,"t":{"182":{"position":[[40,4]]}}}],["变小",{"_index":9887,"t":{"3970":{"position":[[300,2]]}}}],["变形",{"_index":7032,"t":{"2782":{"position":[[32,2]]}}}],["变得",{"_index":1541,"t":{"206":{"position":[[195,2]]},"1509":{"position":[[199,2]]},"3120":{"position":[[101,2]]},"3928":{"position":[[127,2]]}}}],["变得复杂",{"_index":3801,"t":{"941":{"position":[[158,4]]},"3078":{"position":[[176,4]]}}}],["变态",{"_index":3601,"t":{"810":{"position":[[323,2]]},"812":{"position":[[347,2]]},"814":{"position":[[320,2]]},"816":{"position":[[344,2]]},"1111":{"position":[[347,2]]},"1113":{"position":[[345,2]]},"1115":{"position":[[351,2]]},"1117":{"position":[[3809,2]]},"1119":{"position":[[322,2]]},"1121":{"position":[[346,2]]},"1123":{"position":[[292,2]]},"1129":{"position":[[499,2],[1437,2]]}}}],["变成",{"_index":7011,"t":{"2770":{"position":[[189,2]]},"3092":{"position":[[136,2]]}}}],["变更",{"_index":2623,"t":{"463":{"position":[[76,2]]},"530":{"position":[[788,2]]},"1039":{"position":[[789,2]]},"1711":{"position":[[821,2]]},"2182":{"position":[[243,2]]},"2478":{"position":[[468,2]]},"2862":{"position":[[38,2]]},"3287":{"position":[[144,2],[469,2]]},"3779":{"position":[[43,2]]},"3802":{"position":[[42,2]]},"3817":{"position":[[43,2]]},"3908":{"position":[[166,2]]}}}],["变量",{"_index":4418,"t":{"1483":{"position":[[978,2]]},"3727":{"position":[[44,2]]},"3986":{"position":[[810,2]]}}}],["叙利亚",{"_index":6457,"t":{"2559":{"position":[[267,3],[2493,3]]}}}],["叛逆",{"_index":9401,"t":{"3926":{"position":[[384,2]]}}}],["口头",{"_index":8426,"t":{"3620":{"position":[[48,2]]}}}],["句子",{"_index":5722,"t":{"1849":{"position":[[11,2]]}}}],["另一方面",{"_index":7970,"t":{"3352":{"position":[[459,4]]}}}],["另外",{"_index":166,"t":{"11":{"position":[[703,2]]},"121":{"position":[[567,2]]},"220":{"position":[[855,2]]},"319":{"position":[[33,2]]},"404":{"position":[[215,2]]},"413":{"position":[[42,2]]},"433":{"position":[[125,2]]},"445":{"position":[[837,2]]},"482":{"position":[[893,2]]},"510":{"position":[[489,2]]},"679":{"position":[[135,2]]},"706":{"position":[[220,2]]},"885":{"position":[[205,2]]},"947":{"position":[[958,2]]},"1037":{"position":[[322,2]]},"1319":{"position":[[221,2]]},"1422":{"position":[[90,2]]},"1511":{"position":[[1294,2]]},"1623":{"position":[[119,2]]},"1699":{"position":[[127,2]]},"1903":{"position":[[419,2]]},"2294":{"position":[[732,2]]},"2418":{"position":[[1255,2]]},"2575":{"position":[[31,2]]},"2581":{"position":[[69,2]]},"2709":{"position":[[258,2]]},"2774":{"position":[[513,2]]},"3063":{"position":[[1436,2]]},"3071":{"position":[[1160,2]]},"3088":{"position":[[86,2]]},"3352":{"position":[[484,2]]},"3672":{"position":[[318,2]]},"3706":{"position":[[1447,2]]},"3744":{"position":[[250,2]]},"3779":{"position":[[1767,2]]},"3802":{"position":[[2542,2]]},"3804":{"position":[[411,2]]},"3806":{"position":[[1270,2]]}}}],["只不过",{"_index":1892,"t":{"265":{"position":[[22,3]]}}}],["只是",{"_index":2434,"t":{"404":{"position":[[175,2]]},"528":{"position":[[310,2]]},"1387":{"position":[[4,2]]},"1659":{"position":[[1320,2]]},"2768":{"position":[[1576,2]]},"2891":{"position":[[125,2]]},"2933":{"position":[[607,2]]},"2949":{"position":[[455,2]]},"2963":{"position":[[474,2]]},"3138":{"position":[[124,2]]},"3345":{"position":[[225,2]]},"3644":{"position":[[1320,2]]},"3740":{"position":[[727,2]]},"3944":{"position":[[878,2]]}}}],["只有",{"_index":1553,"t":{"210":{"position":[[14,2]]},"340":{"position":[[1517,2],[1864,2]]},"679":{"position":[[138,2]]},"685":{"position":[[555,2]]},"947":{"position":[[99,2]]},"1279":{"position":[[132,2]]},"1507":{"position":[[67,2]]},"1549":{"position":[[8,2]]},"1557":{"position":[[254,2]]},"1566":{"position":[[345,2]]},"1753":{"position":[[334,2]]},"1761":{"position":[[607,2]]},"1861":{"position":[[157,2]]},"1867":{"position":[[678,2]]},"2199":{"position":[[177,2]]},"2398":{"position":[[132,2]]},"2581":{"position":[[19,2]]},"2770":{"position":[[313,2]]},"3063":{"position":[[1275,2]]},"3092":{"position":[[103,2]]},"3094":{"position":[[127,2]]},"3432":{"position":[[231,2]]},"3434":{"position":[[651,2]]},"3452":{"position":[[438,2]]},"3636":{"position":[[594,2]]},"3686":{"position":[[547,2]]},"3706":{"position":[[1286,2]]},"3916":{"position":[[3441,2]]},"3920":{"position":[[1745,2]]},"3994":{"position":[[642,2]]}}}],["只能",{"_index":2679,"t":{"482":{"position":[[369,2],[449,2],[481,2],[701,2],[766,2],[971,2]]},"587":{"position":[[2122,2]]},"597":{"position":[[158,2]]},"599":{"position":[[188,2]]},"679":{"position":[[170,2]]},"694":{"position":[[33,2]]},"807":{"position":[[27,2],[40,2]]},"988":{"position":[[446,2]]},"1405":{"position":[[114,2]]},"1481":{"position":[[94,2]]},"1495":{"position":[[1295,2]]},"1511":{"position":[[1672,2]]},"1611":{"position":[[878,2]]},"1619":{"position":[[469,2]]},"1847":{"position":[[70,2]]},"1871":{"position":[[97,2]]},"2278":{"position":[[141,2]]},"2418":{"position":[[631,2],[743,2],[776,2],[1017,2],[1105,2],[1335,2]]},"2542":{"position":[[144,2]]},"3096":{"position":[[110,2]]},"3154":{"position":[[742,2]]},"3294":{"position":[[15,2]]},"3393":{"position":[[52,2]]},"3698":{"position":[[264,2]]},"3806":{"position":[[1346,2],[1362,2]]},"3924":{"position":[[2676,2]]},"3972":{"position":[[655,2]]}}}],["只要",{"_index":896,"t":{"121":{"position":[[364,2]]},"210":{"position":[[221,2]]},"218":{"position":[[296,2]]},"606":{"position":[[1370,2]]},"939":{"position":[[4,2]]},"1955":{"position":[[16,2]]},"2438":{"position":[[288,2]]},"2440":{"position":[[322,2]]},"3601":{"position":[[56,2]]},"3740":{"position":[[429,2]]},"3768":{"position":[[36,2]]},"3791":{"position":[[28,2]]},"3908":{"position":[[77,2],[113,2]]}}}],["只读",{"_index":3866,"t":{"988":{"position":[[490,2]]},"1000":{"position":[[34,2],[95,2]]},"1031":{"position":[[18,2]]},"1368":{"position":[[27,2],[410,2],[753,2]]},"3777":{"position":[[42,2]]},"3779":{"position":[[28,2]]},"3798":{"position":[[43,2]]},"3802":{"position":[[27,2]]},"3817":{"position":[[28,2]]}}}],["叫",{"_index":3173,"t":{"606":{"position":[[532,1]]},"1869":{"position":[[182,1]]},"3017":{"position":[[86,1]]},"3754":{"position":[[57,1],[124,1],[178,1],[267,1]]},"3926":{"position":[[34,1]]}}}],["叫做",{"_index":7243,"t":{"2917":{"position":[[46,2]]}}}],["可不",{"_index":2828,"t":{"526":{"position":[[361,2]]},"593":{"position":[[66,2]]},"1582":{"position":[[68,2]]},"1841":{"position":[[96,2]]},"2623":{"position":[[166,2],[276,2]]},"2949":{"position":[[159,2]]},"3774":{"position":[[230,2]]}}}],["可以",{"_index":88,"t":{"5":{"position":[[42,2]]},"7":{"position":[[38,2]]},"11":{"position":[[8,2]]},"19":{"position":[[498,2]]},"26":{"position":[[24,2]]},"28":{"position":[[49,2]]},"83":{"position":[[18,2]]},"110":{"position":[[57,2]]},"119":{"position":[[112,2],[155,2]]},"121":{"position":[[512,2]]},"131":{"position":[[38,2]]},"135":{"position":[[36,2],[387,2]]},"148":{"position":[[338,2]]},"152":{"position":[[61,2],[639,2],[669,2]]},"164":{"position":[[18,2]]},"179":{"position":[[37,2]]},"182":{"position":[[128,2],[229,2]]},"192":{"position":[[1,2]]},"196":{"position":[[24,2]]},"199":{"position":[[677,2]]},"204":{"position":[[52,2]]},"210":{"position":[[211,2],[549,2],[618,2]]},"220":{"position":[[793,2]]},"225":{"position":[[2,2]]},"233":{"position":[[248,2]]},"235":{"position":[[55,2]]},"239":{"position":[[48,2]]},"245":{"position":[[200,2]]},"247":{"position":[[122,2]]},"249":{"position":[[189,2]]},"261":{"position":[[26,2],[98,2],[114,2]]},"265":{"position":[[40,2]]},"272":{"position":[[249,2]]},"302":{"position":[[48,2]]},"323":{"position":[[84,2],[151,2]]},"340":{"position":[[76,2],[95,2],[1887,2]]},"350":{"position":[[500,2]]},"369":{"position":[[11,2],[782,2]]},"371":{"position":[[17,2]]},"378":{"position":[[72,2]]},"380":{"position":[[31,2]]},"382":{"position":[[17,2],[31,2]]},"386":{"position":[[12,2]]},"394":{"position":[[6,2]]},"401":{"position":[[200,2]]},"404":{"position":[[150,2]]},"417":{"position":[[271,2],[354,2]]},"419":{"position":[[14,2],[146,2]]},"421":{"position":[[20,2]]},"443":{"position":[[18,2]]},"461":{"position":[[53,2]]},"482":{"position":[[921,2]]},"488":{"position":[[62,2]]},"518":{"position":[[507,2]]},"528":{"position":[[460,2],[592,2]]},"530":{"position":[[825,2]]},"532":{"position":[[225,2]]},"548":{"position":[[8,2]]},"554":{"position":[[115,2]]},"565":{"position":[[57,2]]},"567":{"position":[[386,2]]},"570":{"position":[[2671,2]]},"587":{"position":[[1892,2]]},"599":{"position":[[432,2]]},"608":{"position":[[450,2]]},"617":{"position":[[1371,2]]},"625":{"position":[[3,2]]},"633":{"position":[[14,2]]},"653":{"position":[[178,2]]},"685":{"position":[[70,2],[300,2]]},"692":{"position":[[7,2]]},"713":{"position":[[46,2]]},"730":{"position":[[23,2]]},"739":{"position":[[61,2]]},"741":{"position":[[24,2]]},"791":{"position":[[45,2]]},"801":{"position":[[77,2]]},"836":{"position":[[24,2],[332,2],[369,2]]},"846":{"position":[[5,2],[978,2]]},"879":{"position":[[27,2]]},"885":{"position":[[55,2]]},"887":{"position":[[221,2]]},"899":{"position":[[599,2],[1780,2]]},"919":{"position":[[34,2]]},"924":{"position":[[22,2]]},"933":{"position":[[385,2]]},"954":{"position":[[349,2]]},"1020":{"position":[[29,2]]},"1035":{"position":[[46,2]]},"1039":{"position":[[826,2]]},"1048":{"position":[[83,2]]},"1052":{"position":[[110,2]]},"1066":{"position":[[83,2]]},"1103":{"position":[[212,2]]},"1143":{"position":[[46,2]]},"1200":{"position":[[183,2]]},"1221":{"position":[[42,2]]},"1234":{"position":[[1055,2]]},"1279":{"position":[[34,2]]},"1353":{"position":[[145,2]]},"1358":{"position":[[28,2]]},"1368":{"position":[[739,2]]},"1372":{"position":[[33,2]]},"1374":{"position":[[46,2]]},"1377":{"position":[[45,2],[508,2]]},"1379":{"position":[[3,2],[43,2]]},"1392":{"position":[[78,2]]},"1394":{"position":[[47,2],[125,2]]},"1408":{"position":[[1103,2]]},"1412":{"position":[[68,2]]},"1416":{"position":[[26,2],[341,2],[362,2]]},"1418":{"position":[[20,2],[177,2]]},"1420":{"position":[[14,2]]},"1424":{"position":[[113,2],[421,2],[757,2],[2032,2]]},"1426":{"position":[[249,2]]},"1428":{"position":[[56,2]]},"1430":{"position":[[18,2],[81,2]]},"1440":{"position":[[283,2]]},"1444":{"position":[[33,2]]},"1474":{"position":[[124,2]]},"1481":{"position":[[85,2]]},"1483":{"position":[[946,2]]},"1488":{"position":[[1657,2]]},"1497":{"position":[[337,2]]},"1503":{"position":[[8,2]]},"1505":{"position":[[8,2]]},"1509":{"position":[[10,2],[68,2],[264,2]]},"1511":{"position":[[93,2]]},"1513":{"position":[[5,2]]},"1516":{"position":[[29,2]]},"1539":{"position":[[1643,2]]},"1547":{"position":[[25,2],[184,2]]},"1551":{"position":[[1131,2]]},"1561":{"position":[[2,2]]},"1566":{"position":[[213,2],[422,2]]},"1578":{"position":[[6,2]]},"1627":{"position":[[241,2]]},"1643":{"position":[[7,2]]},"1645":{"position":[[11,2]]},"1653":{"position":[[9,2]]},"1655":{"position":[[10,2],[22,2]]},"1657":{"position":[[44,2]]},"1663":{"position":[[58,2]]},"1665":{"position":[[39,2]]},"1685":{"position":[[179,2]]},"1699":{"position":[[80,2]]},"1705":{"position":[[14,2]]},"1709":{"position":[[26,2]]},"1711":{"position":[[858,2]]},"1717":{"position":[[82,2]]},"1741":{"position":[[344,2],[1225,2]]},"1745":{"position":[[340,2]]},"1753":{"position":[[3,2],[293,2]]},"1765":{"position":[[135,2]]},"1775":{"position":[[3834,2]]},"1787":{"position":[[0,2]]},"1795":{"position":[[2807,2]]},"1797":{"position":[[40,2]]},"1799":{"position":[[46,2],[92,2]]},"1801":{"position":[[1713,2],[2509,2]]},"1807":{"position":[[43,2]]},"1809":{"position":[[39,2]]},"1819":{"position":[[854,2]]},"1837":{"position":[[11,2]]},"1847":{"position":[[7,2],[34,2]]},"1853":{"position":[[40,2]]},"1867":{"position":[[728,2]]},"1869":{"position":[[33,2],[567,2],[667,2]]},"1871":{"position":[[29,2]]},"1892":{"position":[[92,2]]},"1894":{"position":[[8,2]]},"1901":{"position":[[48,2],[214,2]]},"1903":{"position":[[261,2],[304,2]]},"1909":{"position":[[858,2]]},"1911":{"position":[[7,2]]},"1923":{"position":[[78,2]]},"1925":{"position":[[882,2]]},"1933":{"position":[[770,2]]},"1941":{"position":[[626,2],[706,2],[797,2],[891,2]]},"1955":{"position":[[90,2]]},"1961":{"position":[[136,2]]},"1969":{"position":[[119,2]]},"1983":{"position":[[31,2]]},"2006":{"position":[[31,2]]},"2175":{"position":[[174,2],[194,2]]},"2182":{"position":[[280,2]]},"2214":{"position":[[28,2]]},"2235":{"position":[[24,2]]},"2237":{"position":[[49,2]]},"2245":{"position":[[114,2]]},"2264":{"position":[[90,2]]},"2285":{"position":[[14,2],[25,2]]},"2290":{"position":[[38,2]]},"2294":{"position":[[8,2]]},"2303":{"position":[[77,2]]},"2311":{"position":[[60,2],[145,2],[301,2],[435,2]]},"2313":{"position":[[758,2]]},"2319":{"position":[[61,2]]},"2326":{"position":[[262,2]]},"2331":{"position":[[43,2]]},"2352":{"position":[[199,2]]},"2361":{"position":[[251,2],[410,2]]},"2377":{"position":[[33,2]]},"2379":{"position":[[60,2],[442,2]]},"2393":{"position":[[153,2],[168,2],[187,2]]},"2400":{"position":[[174,2]]},"2404":{"position":[[115,2]]},"2418":{"position":[[557,2],[1287,2]]},"2436":{"position":[[43,2]]},"2438":{"position":[[24,2]]},"2440":{"position":[[24,2],[398,2]]},"2454":{"position":[[28,2]]},"2478":{"position":[[505,2]]},"2480":{"position":[[47,2]]},"2486":{"position":[[55,2]]},"2495":{"position":[[40,2]]},"2497":{"position":[[29,2],[76,2],[189,2]]},"2499":{"position":[[60,2]]},"2503":{"position":[[142,2]]},"2528":{"position":[[15,2]]},"2538":{"position":[[171,2]]},"2542":{"position":[[268,2]]},"2547":{"position":[[57,2],[71,2],[90,2],[102,2]]},"2549":{"position":[[6,2]]},"2581":{"position":[[49,2],[566,2]]},"2589":{"position":[[6,2]]},"2605":{"position":[[8,2]]},"2619":{"position":[[22,2]]},"2635":{"position":[[29,2]]},"2639":{"position":[[119,2]]},"2646":{"position":[[115,2]]},"2651":{"position":[[10,2]]},"2655":{"position":[[5,2]]},"2657":{"position":[[78,2]]},"2662":{"position":[[29,2]]},"2666":{"position":[[119,2]]},"2674":{"position":[[232,2]]},"2678":{"position":[[24,2]]},"2686":{"position":[[5,2]]},"2688":{"position":[[71,2]]},"2690":{"position":[[334,2]]},"2717":{"position":[[80,2],[232,2]]},"2723":{"position":[[3,2]]},"2727":{"position":[[13,2]]},"2731":{"position":[[676,2]]},"2745":{"position":[[176,2]]},"2747":{"position":[[179,2]]},"2772":{"position":[[31,2]]},"2788":{"position":[[210,2]]},"2790":{"position":[[71,2]]},"2803":{"position":[[40,2]]},"2829":{"position":[[51,2]]},"2836":{"position":[[1062,2]]},"2843":{"position":[[44,2],[110,2]]},"2846":{"position":[[309,2],[339,2],[367,2]]},"2852":{"position":[[29,2],[54,2]]},"2856":{"position":[[14,2],[30,2]]},"2860":{"position":[[64,2]]},"2875":{"position":[[230,2],[372,2],[455,2],[1031,2]]},"2877":{"position":[[194,2]]},"2889":{"position":[[10,2],[27,2]]},"2903":{"position":[[141,2]]},"2910":{"position":[[231,2],[411,2]]},"2912":{"position":[[132,2]]},"2915":{"position":[[215,2]]},"2917":{"position":[[89,2]]},"2965":{"position":[[205,2]]},"3071":{"position":[[1139,2]]},"3075":{"position":[[204,2]]},"3080":{"position":[[65,2],[241,2],[395,2]]},"3088":{"position":[[184,2]]},"3090":{"position":[[5,2]]},"3094":{"position":[[153,2]]},"3098":{"position":[[62,2]]},"3102":{"position":[[46,2]]},"3118":{"position":[[7,2],[152,2]]},"3122":{"position":[[40,2]]},"3138":{"position":[[162,2]]},"3140":{"position":[[67,2]]},"3142":{"position":[[72,2]]},"3150":{"position":[[151,2]]},"3154":{"position":[[694,2],[712,2]]},"3156":{"position":[[366,2]]},"3168":{"position":[[74,2]]},"3170":{"position":[[41,2]]},"3189":{"position":[[233,2],[366,2]]},"3213":{"position":[[6,2]]},"3224":{"position":[[249,2]]},"3248":{"position":[[73,2]]},"3254":{"position":[[1172,2]]},"3256":{"position":[[8,2]]},"3267":{"position":[[2,2],[124,2],[398,2],[471,2]]},"3273":{"position":[[624,2]]},"3287":{"position":[[3094,2]]},"3289":{"position":[[67,2],[128,2]]},"3296":{"position":[[73,2]]},"3307":{"position":[[90,2],[243,2]]},"3321":{"position":[[268,2]]},"3323":{"position":[[334,2],[511,2],[543,2]]},"3331":{"position":[[3,2]]},"3345":{"position":[[230,2]]},"3350":{"position":[[119,2]]},"3352":{"position":[[15,2]]},"3389":{"position":[[35,2]]},"3395":{"position":[[21,2]]},"3412":{"position":[[46,2],[61,2]]},"3414":{"position":[[46,2],[101,2],[157,2],[203,2]]},"3416":{"position":[[4,2]]},"3420":{"position":[[7,2]]},"3426":{"position":[[213,2]]},"3430":{"position":[[509,2]]},"3432":{"position":[[2136,2],[4388,2],[4557,2]]},"3434":{"position":[[1629,2],[1657,2],[1688,2],[1861,2],[1892,2],[2760,2]]},"3440":{"position":[[98,2]]},"3444":{"position":[[56,2]]},"3466":{"position":[[890,2],[1105,2]]},"3506":{"position":[[64,2]]},"3522":{"position":[[160,2],[1240,2]]},"3547":{"position":[[64,2],[633,2],[774,2]]},"3563":{"position":[[274,2],[478,2]]},"3573":{"position":[[23,2]]},"3581":{"position":[[2,2]]},"3583":{"position":[[3,2]]},"3595":{"position":[[264,2],[467,2]]},"3597":{"position":[[169,2],[449,2]]},"3616":{"position":[[24,2]]},"3620":{"position":[[27,2]]},"3626":{"position":[[336,2],[434,2]]},"3632":{"position":[[50,2]]},"3638":{"position":[[16,2]]},"3640":{"position":[[403,2]]},"3654":{"position":[[37,2],[95,2]]},"3666":{"position":[[295,2]]},"3680":{"position":[[53,2]]},"3686":{"position":[[52,2]]},"3696":{"position":[[183,2]]},"3702":{"position":[[196,2],[1100,2]]},"3708":{"position":[[21,2]]},"3712":{"position":[[22,2]]},"3718":{"position":[[88,2]]},"3729":{"position":[[69,2]]},"3752":{"position":[[85,2]]},"3766":{"position":[[176,2]]},"3772":{"position":[[71,2],[118,2]]},"3774":{"position":[[31,2]]},"3779":{"position":[[1354,2],[1562,2],[1599,2],[1708,2]]},"3791":{"position":[[38,2]]},"3795":{"position":[[37,2]]},"3802":{"position":[[1972,2],[2319,2],[2360,2],[2479,2]]},"3806":{"position":[[3252,2]]},"3808":{"position":[[1685,2]]},"3817":{"position":[[2568,2]]},"3819":{"position":[[979,2],[1529,2]]},"3828":{"position":[[33,2]]},"3832":{"position":[[29,2]]},"3836":{"position":[[117,2],[206,2]]},"3838":{"position":[[143,2],[258,2]]},"3848":{"position":[[57,2]]},"3850":{"position":[[34,2]]},"3852":{"position":[[34,2]]},"3854":{"position":[[35,2]]},"3858":{"position":[[142,2]]},"3910":{"position":[[674,2],[874,2]]},"3914":{"position":[[1930,2]]},"3918":{"position":[[2018,2]]},"3924":{"position":[[2069,2],[2236,2],[2738,2]]},"3928":{"position":[[23,2]]},"3930":{"position":[[53,2]]},"3932":{"position":[[432,2]]},"3936":{"position":[[1649,2]]},"3938":{"position":[[32,2]]},"3944":{"position":[[883,2]]},"3954":{"position":[[267,2]]},"3962":{"position":[[2044,2]]},"3966":{"position":[[1580,2]]},"3968":{"position":[[598,2]]},"3978":{"position":[[1641,2]]},"3992":{"position":[[2902,2]]},"3996":{"position":[[1653,2]]}}}],["可伸缩性",{"_index":1644,"t":{"225":{"position":[[30,4]]},"239":{"position":[[74,4]]}}}],["可取",{"_index":3937,"t":{"1071":{"position":[[71,2]]}}}],["可想而知",{"_index":3043,"t":{"585":{"position":[[471,4]]}}}],["可执行性",{"_index":1297,"t":{"182":{"position":[[220,4]]}}}],["可持续性",{"_index":4568,"t":{"1511":{"position":[[142,4]]}}}],["可控",{"_index":7380,"t":{"3088":{"position":[[12,2]]},"3110":{"position":[[85,2]]},"3928":{"position":[[307,2]]}}}],["可比",{"_index":1648,"t":{"225":{"position":[[65,2]]}}}],["可用",{"_index":1769,"t":{"239":{"position":[[256,2]]},"1050":{"position":[[43,2]]},"3289":{"position":[[185,2]]},"3399":{"position":[[346,2]]},"3688":{"position":[[745,2]]},"3779":{"position":[[81,2]]},"3802":{"position":[[82,2]]},"3817":{"position":[[87,2]]},"3986":{"position":[[780,2]]}}}],["可简化",{"_index":7510,"t":{"3142":{"position":[[31,3]]}}}],["可维护性",{"_index":3037,"t":{"585":{"position":[[398,4]]},"3618":{"position":[[42,4]]}}}],["可能",{"_index":181,"t":{"11":{"position":[[791,2]]},"127":{"position":[[1441,2]]},"135":{"position":[[4,2]]},"166":{"position":[[17,2]]},"179":{"position":[[154,2]]},"206":{"position":[[65,2]]},"308":{"position":[[269,2]]},"319":{"position":[[605,2]]},"331":{"position":[[19,2]]},"336":{"position":[[350,2]]},"338":{"position":[[1127,2],[1220,2],[1230,2]]},"404":{"position":[[141,2]]},"431":{"position":[[32,2]]},"451":{"position":[[11,2]]},"526":{"position":[[43,2]]},"655":{"position":[[20,2]]},"773":{"position":[[57,2]]},"915":{"position":[[36,2]]},"1141":{"position":[[55,2]]},"1511":{"position":[[114,2]]},"1566":{"position":[[547,2]]},"1707":{"position":[[62,2]]},"1711":{"position":[[725,2]]},"1753":{"position":[[282,2]]},"1981":{"position":[[69,2]]},"1993":{"position":[[69,2]]},"2016":{"position":[[77,2]]},"2047":{"position":[[53,2]]},"2294":{"position":[[839,2]]},"2311":{"position":[[358,2]]},"2472":{"position":[[6,2]]},"2508":{"position":[[34,2]]},"2587":{"position":[[495,2]]},"2674":{"position":[[344,2]]},"2705":{"position":[[32,2]]},"2770":{"position":[[185,2]]},"2834":{"position":[[71,2]]},"2838":{"position":[[34,2]]},"2889":{"position":[[152,2]]},"3110":{"position":[[225,2]]},"3118":{"position":[[29,2],[128,2]]},"3242":{"position":[[195,2]]},"3329":{"position":[[50,2]]},"3337":{"position":[[30,2]]},"3352":{"position":[[158,2],[200,2],[240,2],[280,2],[438,2],[469,2],[583,2]]},"3389":{"position":[[5,2]]},"3414":{"position":[[175,2],[255,2]]},"3416":{"position":[[92,2],[222,2]]},"3432":{"position":[[4349,2]]},"3434":{"position":[[2723,2]]},"3579":{"position":[[207,2]]},"3696":{"position":[[3,2]]},"3716":{"position":[[42,2]]},"3768":{"position":[[59,2]]},"3793":{"position":[[200,2]]},"3908":{"position":[[24,2]]},"3910":{"position":[[192,2]]},"3926":{"position":[[82,2]]},"3934":{"position":[[2361,2]]}}}],["可能性",{"_index":9525,"t":{"3934":{"position":[[2521,3]]}}}],["可行",{"_index":2507,"t":{"423":{"position":[[41,2]]}}}],["可见",{"_index":5085,"t":{"1589":{"position":[[184,2],[200,2]]},"3063":{"position":[[1543,2]]},"3680":{"position":[[21,2],[439,2],[452,2]]},"3706":{"position":[[1554,2]]}}}],["可视化",{"_index":3323,"t":{"679":{"position":[[156,3]]},"2653":{"position":[[13,3]]},"3327":{"position":[[35,3]]},"3626":{"position":[[513,3]]}}}],["可读性",{"_index":8425,"t":{"3620":{"position":[[32,3]]}}}],["可调",{"_index":1688,"t":{"233":{"position":[[270,2],[414,2]]}}}],["可重复性",{"_index":1257,"t":{"182":{"position":[[0,4]]}}}],["可靠",{"_index":7033,"t":{"2782":{"position":[[44,2]]}}}],["台湾",{"_index":6493,"t":{"2559":{"position":[[620,2]]}}}],["右侧",{"_index":4375,"t":{"1474":{"position":[[188,2],[360,2]]}}}],["右键",{"_index":2515,"t":{"427":{"position":[[37,2]]},"498":{"position":[[68,2]]},"893":{"position":[[68,2]]},"1313":{"position":[[305,2]]},"3362":{"position":[[9,2]]}}}],["号",{"_index":1481,"t":{"199":{"position":[[303,1]]},"480":{"position":[[331,1],[448,1],[681,1],[778,1]]},"494":{"position":[[272,1],[369,1]]},"2326":{"position":[[18,1]]},"2782":{"position":[[118,1]]},"3804":{"position":[[912,1],[1042,1]]},"3808":{"position":[[349,1],[408,1]]}}}],["号码",{"_index":3645,"t":{"851":{"position":[[975,2]]}}}],["吃",{"_index":470,"t":{"85":{"position":[[60,1]]},"1511":{"position":[[217,1],[961,1],[1954,1],[3214,1]]}}}],["各不相同",{"_index":6754,"t":{"2615":{"position":[[55,4],[62,4]]}}}],["各个",{"_index":3322,"t":{"679":{"position":[[107,2]]},"1541":{"position":[[24,2]]},"3781":{"position":[[50,2]]},"3810":{"position":[[53,2]]}}}],["各司其职",{"_index":1971,"t":{"300":{"position":[[120,4]]},"3608":{"position":[[38,4]]}}}],["各种",{"_index":1451,"t":{"192":{"position":[[5,2]]},"1225":{"position":[[43,2]]},"1317":{"position":[[541,2]]},"1619":{"position":[[17,2]]},"1761":{"position":[[184,2]]},"1923":{"position":[[89,2]]},"2393":{"position":[[191,2]]},"3287":{"position":[[191,2],[352,2],[516,2]]},"3399":{"position":[[97,2]]},"3401":{"position":[[16,2]]},"3626":{"position":[[342,2]]},"3680":{"position":[[39,2]]}}}],["各自",{"_index":884,"t":{"121":{"position":[[244,2]]},"127":{"position":[[1449,2]]}}}],["各行各业",{"_index":5435,"t":{"1761":{"position":[[146,4]]}}}],["合作",{"_index":1078,"t":{"135":{"position":[[26,2]]},"1511":{"position":[[2170,2]]}}}],["合并",{"_index":232,"t":{"13":{"position":[[428,2]]},"220":{"position":[[203,2]]},"394":{"position":[[8,2]]},"1488":{"position":[[1664,2],[1724,2]]},"1617":{"position":[[1115,2]]},"1659":{"position":[[28,2],[47,2],[951,2],[1135,2],[1315,2]]},"2296":{"position":[[428,2]]},"3063":{"position":[[1380,2]]},"3108":{"position":[[202,2]]},"3644":{"position":[[28,2],[47,2],[951,2],[1135,2],[1315,2]]},"3706":{"position":[[1391,2]]},"3938":{"position":[[39,2]]}}}],["合法",{"_index":903,"t":{"121":{"position":[[411,2],[418,2]]},"2782":{"position":[[217,2]]},"3922":{"position":[[1387,2]]}}}],["合法性",{"_index":902,"t":{"121":{"position":[[407,3]]},"579":{"position":[[25,3]]}}}],["合理",{"_index":1294,"t":{"182":{"position":[[208,2]]},"1832":{"position":[[101,2]]}}}],["合适",{"_index":6424,"t":{"2557":{"position":[[168,2]]}}}],["同一",{"_index":1867,"t":{"255":{"position":[[223,2]]},"2815":{"position":[[63,2]]},"3966":{"position":[[1571,2]]}}}],["同一个",{"_index":883,"t":{"121":{"position":[[231,3]]},"404":{"position":[[236,3]]},"1412":{"position":[[36,3]]},"1703":{"position":[[301,3]]},"2834":{"position":[[104,3]]},"2919":{"position":[[19,3],[32,3]]},"3375":{"position":[[23,3]]},"3434":{"position":[[1691,3],[1895,3]]},"3988":{"position":[[295,3]]}}}],["同义词",{"_index":7456,"t":{"3126":{"position":[[250,3]]}}}],["同名",{"_index":4081,"t":{"1234":{"position":[[858,2]]},"3930":{"position":[[786,2]]}}}],["同时",{"_index":405,"t":{"48":{"position":[[106,2]]},"72":{"position":[[106,2]]},"233":{"position":[[375,2],[404,2]]},"329":{"position":[[131,2]]},"408":{"position":[[129,2]]},"429":{"position":[[106,2]]},"445":{"position":[[999,2]]},"518":{"position":[[509,2]]},"587":{"position":[[2244,2]]},"606":{"position":[[1363,2]]},"713":{"position":[[766,2]]},"945":{"position":[[37,2],[107,2]]},"1026":{"position":[[187,2]]},"1037":{"position":[[341,2]]},"1125":{"position":[[58,2]]},"1151":{"position":[[476,2]]},"1157":{"position":[[42,2]]},"1358":{"position":[[40,2]]},"1389":{"position":[[52,2]]},"1408":{"position":[[1113,2],[1179,2]]},"1416":{"position":[[35,2]]},"1520":{"position":[[260,2]]},"1572":{"position":[[39,2]]},"1576":{"position":[[175,2]]},"1580":{"position":[[115,2],[305,2]]},"1589":{"position":[[9,2],[256,2]]},"1617":{"position":[[36,2]]},"1619":{"position":[[439,2]]},"1655":{"position":[[19,2]]},"1763":{"position":[[154,2]]},"1867":{"position":[[730,2]]},"1869":{"position":[[669,2]]},"1903":{"position":[[506,2],[568,2]]},"1905":{"position":[[111,2]]},"2272":{"position":[[367,2],[436,2]]},"2278":{"position":[[136,2]]},"2341":{"position":[[158,2]]},"2345":{"position":[[42,2]]},"2379":{"position":[[567,2]]},"2480":{"position":[[45,2]]},"2641":{"position":[[26,2]]},"2668":{"position":[[26,2]]},"2692":{"position":[[26,2]]},"2703":{"position":[[51,2]]},"2725":{"position":[[633,2]]},"2788":{"position":[[170,2]]},"2807":{"position":[[116,2]]},"2875":{"position":[[90,2],[677,2]]},"2910":{"position":[[382,2]]},"3071":{"position":[[481,2],[720,2],[1133,2]]},"3108":{"position":[[183,2]]},"3124":{"position":[[45,2]]},"3126":{"position":[[24,2]]},"3142":{"position":[[284,2]]},"3254":{"position":[[1169,2]]},"3287":{"position":[[79,2],[86,2]]},"3412":{"position":[[43,2]]},"3640":{"position":[[720,2]]},"3688":{"position":[[103,2]]},"3817":{"position":[[2718,2]]},"3916":{"position":[[2036,2]]},"3930":{"position":[[745,2]]},"3966":{"position":[[452,2]]},"3974":{"position":[[452,2],[722,2]]},"3992":{"position":[[3064,2]]}}}],["同样",{"_index":1005,"t":{"127":{"position":[[1417,2]]},"3352":{"position":[[331,2]]},"3595":{"position":[[326,2]]},"3626":{"position":[[556,2]]}}}],["同步",{"_index":3313,"t":{"677":{"position":[[29,2]]},"704":{"position":[[29,2]]},"1046":{"position":[[54,2]]},"1071":{"position":[[3,2]]},"1248":{"position":[[145,2]]},"1709":{"position":[[31,2]]},"1903":{"position":[[475,2],[489,2],[552,2],[575,2],[634,2]]},"2182":{"position":[[3,2]]},"2184":{"position":[[3,2]]},"2313":{"position":[[837,2]]},"3258":{"position":[[536,2]]},"3597":{"position":[[16,2],[56,2],[369,2]]},"3626":{"position":[[601,2]]},"3795":{"position":[[54,2],[643,2]]},"3922":{"position":[[489,2]]},"3974":{"position":[[137,2]]},"3978":{"position":[[584,2]]},"3992":{"position":[[1408,2]]}}}],["同步化",{"_index":2146,"t":{"329":{"position":[[161,3]]}}}],["同步操作",{"_index":3251,"t":{"645":{"position":[[56,4]]},"647":{"position":[[8,4]]},"649":{"position":[[8,4]]},"651":{"position":[[8,4]]},"661":{"position":[[8,4]]},"663":{"position":[[8,4]]},"665":{"position":[[8,4]]},"667":{"position":[[8,4]]},"669":{"position":[[8,4]]},"671":{"position":[[8,4]]},"779":{"position":[[8,4]]},"781":{"position":[[8,4]]},"783":{"position":[[8,4]]},"785":{"position":[[8,4]]},"787":{"position":[[8,4]]},"789":{"position":[[8,4]]},"795":{"position":[[8,4]]},"954":{"position":[[8,4]]},"956":{"position":[[8,4]]},"958":{"position":[[8,4]]},"962":{"position":[[8,4]]},"965":{"position":[[8,4]]},"967":{"position":[[8,4]]},"969":{"position":[[8,4]]},"971":{"position":[[8,4]]},"973":{"position":[[8,4]]},"975":{"position":[[8,4]]},"1160":{"position":[[8,4]]},"1162":{"position":[[8,4]]},"1164":{"position":[[8,4]]},"1166":{"position":[[8,4]]},"1168":{"position":[[8,4]]},"1170":{"position":[[8,4]]},"1173":{"position":[[8,4]]},"1175":{"position":[[8,4]]},"1177":{"position":[[8,4]]},"1179":{"position":[[8,4]]},"1181":{"position":[[8,4]]},"1183":{"position":[[8,4]]},"1185":{"position":[[698,4]]},"1188":{"position":[[8,4]]},"1190":{"position":[[8,4]]},"1325":{"position":[[8,4]]},"1327":{"position":[[8,4]]},"1329":{"position":[[8,4]]},"1331":{"position":[[8,4]]},"1333":{"position":[[8,4]]},"1335":{"position":[[8,4]]},"1337":{"position":[[8,4]]},"1339":{"position":[[8,4]]},"1341":{"position":[[8,4]]},"1343":{"position":[[8,4]]},"1345":{"position":[[8,4]]},"1347":{"position":[[8,4]]},"1349":{"position":[[8,4]]},"1351":{"position":[[8,4]]}}}],["同源",{"_index":2430,"t":{"404":{"position":[[69,2],[76,2],[127,2],[162,2],[179,2],[189,2],[230,2]]},"406":{"position":[[85,2]]}}}],["同父",{"_index":129,"t":{"9":{"position":[[214,2]]},"2292":{"position":[[214,2]]}}}],["同级",{"_index":130,"t":{"9":{"position":[[216,2]]},"308":{"position":[[347,2]]},"310":{"position":[[199,2]]},"2292":{"position":[[216,2]]},"2627":{"position":[[188,2]]}}}],["名",{"_index":1038,"t":{"127":{"position":[[1916,1]]},"144":{"position":[[246,1]]},"359":{"position":[[294,1]]},"413":{"position":[[150,1]]},"415":{"position":[[36,1]]},"516":{"position":[[169,1]]},"570":{"position":[[1518,1],[1825,1],[2170,1],[2461,1]]},"610":{"position":[[17,1]]},"698":{"position":[[81,1],[852,1],[892,1]]},"810":{"position":[[336,1]]},"812":{"position":[[360,1]]},"814":{"position":[[333,1]]},"816":{"position":[[357,1]]},"1111":{"position":[[362,1]]},"1113":{"position":[[360,1]]},"1115":{"position":[[366,1]]},"1117":{"position":[[3824,1]]},"1119":{"position":[[337,1]]},"1121":{"position":[[361,1]]},"1123":{"position":[[307,1]]},"1129":{"position":[[514,1],[1452,1]]},"1194":{"position":[[447,1]]},"1200":{"position":[[262,1],[266,1]]},"1234":{"position":[[922,1],[1063,1]]},"1279":{"position":[[439,1],[874,1]]},"1364":{"position":[[116,1]]},"1377":{"position":[[584,1],[714,1]]},"1416":{"position":[[385,1]]},"1539":{"position":[[588,1],[816,1],[1045,1],[1185,1],[1737,1],[1797,1],[1839,1]]},"1551":{"position":[[1185,1]]},"1557":{"position":[[115,1],[288,1]]},"1596":{"position":[[4,1]]},"1598":{"position":[[65,1],[71,1],[120,1]]},"1625":{"position":[[21,1]]},"1631":{"position":[[46,1],[90,1]]},"1641":{"position":[[185,1]]},"1661":{"position":[[711,1],[827,1],[872,1]]},"1739":{"position":[[239,1],[419,1]]},"1787":{"position":[[20,1]]},"2167":{"position":[[411,1]]},"2261":{"position":[[419,1],[433,1],[472,1]]},"2377":{"position":[[15,1]]},"2553":{"position":[[236,1]]},"2735":{"position":[[74,1]]},"2981":{"position":[[429,1]]},"2991":{"position":[[42,1]]},"3023":{"position":[[708,1],[824,1],[869,1]]},"3031":{"position":[[236,1]]},"3063":{"position":[[113,1],[847,1],[1046,1]]},"3126":{"position":[[333,1],[394,1]]},"3273":{"position":[[570,1]]},"3339":{"position":[[207,1]]},"3371":{"position":[[153,1]]},"3389":{"position":[[559,1]]},"3432":{"position":[[443,1],[2465,1]]},"3434":{"position":[[2071,1]]},"3448":{"position":[[985,1],[1259,1],[1263,1],[1351,1],[1364,1]]},"3456":{"position":[[61,1]]},"3464":{"position":[[467,1],[481,1],[520,1]]},"3616":{"position":[[35,1]]},"3622":{"position":[[173,1]]},"3640":{"position":[[410,1]]},"3670":{"position":[[89,1]]},"3706":{"position":[[105,1],[839,1],[1038,1]]},"3770":{"position":[[1725,1],[3087,1],[3184,1],[3306,1],[3501,1],[3801,1],[3933,1]]},"3777":{"position":[[50,1]]},"3779":{"position":[[360,1],[1248,1],[1873,1]]},"3781":{"position":[[38,1]]},"3798":{"position":[[51,1]]},"3800":{"position":[[64,1]]},"3802":{"position":[[396,1],[1866,1],[2650,1]]},"3810":{"position":[[40,1]]},"3817":{"position":[[2462,1]]},"3910":{"position":[[506,1]]},"3914":{"position":[[940,1]]},"3924":{"position":[[2901,1]]},"3930":{"position":[[361,1]]},"3934":{"position":[[205,1]]},"3964":{"position":[[674,1]]},"3996":{"position":[[1222,1]]},"3998":{"position":[[363,1]]}}}],["名不副实",{"_index":5337,"t":{"1717":{"position":[[13,4]]}}}],["名为",{"_index":1883,"t":{"261":{"position":[[82,2]]},"1468":{"position":[[42,2]]},"2721":{"position":[[175,2],[362,2],[556,2],[796,2]]},"3634":{"position":[[14,2]]},"3918":{"position":[[3983,2]]},"3926":{"position":[[342,2]]},"3994":{"position":[[687,2]]},"4000":{"position":[[520,2]]},"4004":{"position":[[200,2]]}}}],["名单",{"_index":7479,"t":{"3136":{"position":[[137,2]]}}}],["名字",{"_index":1562,"t":{"210":{"position":[[555,2],[624,2]]},"445":{"position":[[864,2]]},"585":{"position":[[132,2]]},"610":{"position":[[110,2]]},"615":{"position":[[1120,2]]},"683":{"position":[[37,2]]},"1103":{"position":[[91,2]]},"1511":{"position":[[2479,2]]},"1539":{"position":[[74,2],[487,2],[531,2]]},"1543":{"position":[[140,2]]},"1659":{"position":[[1306,2]]},"1849":{"position":[[2,2]]},"1869":{"position":[[188,2]]},"2538":{"position":[[175,2]]},"3017":{"position":[[92,2]]},"3086":{"position":[[34,2]]},"3644":{"position":[[1306,2]]}}}],["名称",{"_index":322,"t":{"19":{"position":[[834,2]]},"85":{"position":[[96,2]]},"91":{"position":[[4,2]]},"93":{"position":[[22,2],[318,2]]},"114":{"position":[[185,2],[212,2]]},"212":{"position":[[28,2]]},"247":{"position":[[158,2],[264,2]]},"319":{"position":[[171,2]]},"327":{"position":[[87,2],[94,2],[132,2]]},"431":{"position":[[16,2]]},"435":{"position":[[303,2],[714,2]]},"445":{"position":[[977,2],[986,2],[992,2]]},"455":{"position":[[219,2],[228,2],[234,2]]},"516":{"position":[[548,2]]},"526":{"position":[[246,2]]},"615":{"position":[[1097,2]]},"655":{"position":[[504,2]]},"698":{"position":[[1077,2]]},"706":{"position":[[63,2],[100,2],[272,2]]},"747":{"position":[[372,2]]},"851":{"position":[[1377,2],[1878,2]]},"877":{"position":[[424,2],[2099,2]]},"1060":{"position":[[408,2]]},"1319":{"position":[[63,2],[100,2],[273,2]]},"1364":{"position":[[452,2],[500,2]]},"1377":{"position":[[371,2],[426,2],[462,2],[567,2],[588,2],[718,2]]},"1412":{"position":[[181,2],[2524,2],[2552,2]]},"1420":{"position":[[573,2],[580,2],[887,2],[895,2],[1007,2]]},"1474":{"position":[[182,2],[332,2]]},"1488":{"position":[[407,2],[458,2]]},"1495":{"position":[[407,2],[458,2]]},"1520":{"position":[[129,2]]},"1541":{"position":[[240,2]]},"1561":{"position":[[109,2]]},"1576":{"position":[[158,2]]},"1589":{"position":[[176,2],[192,2]]},"1592":{"position":[[5,2],[135,2],[247,2]]},"1594":{"position":[[7,2],[147,2],[183,2],[310,2]]},"1611":{"position":[[494,2],[552,2],[606,2],[666,2],[724,2],[785,2]]},"1617":{"position":[[1149,2],[1209,2]]},"1641":{"position":[[16,2],[49,2],[428,2]]},"1643":{"position":[[34,2]]},"1645":{"position":[[26,2]]},"1661":{"position":[[132,2],[283,2],[704,2],[820,2]]},"1735":{"position":[[229,2],[251,2]]},"1767":{"position":[[172,2]]},"1769":{"position":[[120,2]]},"1771":{"position":[[152,2]]},"1773":{"position":[[122,2],[213,2]]},"1779":{"position":[[234,2]]},"2057":{"position":[[83,2]]},"2171":{"position":[[43,2]]},"2216":{"position":[[20,2]]},"2352":{"position":[[185,2]]},"2456":{"position":[[20,2]]},"2542":{"position":[[256,2]]},"2553":{"position":[[255,2]]},"2625":{"position":[[321,2],[333,2]]},"2627":{"position":[[25,2]]},"2705":{"position":[[16,2]]},"2713":{"position":[[757,2],[1477,2],[1559,2],[1641,2],[2022,2],[2161,2],[2299,2]]},"2721":{"position":[[60,2],[119,2]]},"2725":{"position":[[346,2],[1350,2],[1967,2]]},"2727":{"position":[[387,2]]},"2745":{"position":[[217,2]]},"2747":{"position":[[220,2],[225,2]]},"2758":{"position":[[33,2]]},"2951":{"position":[[646,2]]},"2981":{"position":[[308,2]]},"2985":{"position":[[297,2],[306,2],[312,2]]},"3001":{"position":[[134,2],[141,2],[409,2],[417,2]]},"3023":{"position":[[133,2],[284,2],[701,2],[817,2]]},"3031":{"position":[[255,2]]},"3055":{"position":[[65,2]]},"3063":{"position":[[880,2]]},"3071":{"position":[[654,2],[1113,2]]},"3080":{"position":[[436,2],[441,2]]},"3082":{"position":[[75,2]]},"3284":{"position":[[71,2]]},"3317":{"position":[[5,2]]},"3319":{"position":[[63,2]]},"3371":{"position":[[168,2],[477,2]]},"3389":{"position":[[574,2]]},"3420":{"position":[[318,2]]},"3424":{"position":[[76,2]]},"3446":{"position":[[660,2],[687,2]]},"3456":{"position":[[90,2],[368,2]]},"3620":{"position":[[129,2],[142,2],[259,2],[282,2]]},"3640":{"position":[[12,2],[438,2]]},"3668":{"position":[[14,2]]},"3688":{"position":[[559,2]]},"3698":{"position":[[50,2]]},"3700":{"position":[[87,2],[94,2],[132,2]]},"3706":{"position":[[872,2]]},"3716":{"position":[[859,2]]},"3744":{"position":[[333,2]]},"3777":{"position":[[103,2]]},"3779":{"position":[[351,2]]},"3781":{"position":[[193,2]]},"3802":{"position":[[387,2]]},"3914":{"position":[[1540,2]]},"3918":{"position":[[1422,2]]},"3920":{"position":[[1174,2]]},"3922":{"position":[[461,2]]},"3924":{"position":[[2916,2]]},"3928":{"position":[[1235,2],[1262,2]]},"3936":{"position":[[29,2]]},"3940":{"position":[[1447,2]]},"3960":{"position":[[366,2]]},"3962":{"position":[[667,2],[714,2],[775,2],[845,2],[904,2],[949,2]]},"3966":{"position":[[542,2]]},"3968":{"position":[[245,2]]},"3986":{"position":[[112,2]]},"3988":{"position":[[404,2]]},"3994":{"position":[[311,2],[561,2],[613,2]]}}}],["名词",{"_index":8437,"t":{"3620":{"position":[[285,2]]}}}],["后台",{"_index":1468,"t":{"199":{"position":[[142,2],[203,2],[470,2]]},"2210":{"position":[[5,2]]},"2450":{"position":[[5,2]]},"2803":{"position":[[50,2],[108,2]]},"3610":{"position":[[8,2]]}}}],["后台任务",{"_index":2837,"t":{"530":{"position":[[34,4]]},"1039":{"position":[[34,4]]},"1214":{"position":[[110,4]]},"2480":{"position":[[40,4]]},"3978":{"position":[[1295,4]]}}}],["后备",{"_index":1802,"t":{"247":{"position":[[78,2]]},"255":{"position":[[212,2],[270,2]]}}}],["后期",{"_index":3111,"t":{"587":{"position":[[2189,2]]},"591":{"position":[[55,2]]},"1221":{"position":[[60,2]]},"1761":{"position":[[235,2]]},"1869":{"position":[[41,2]]},"2703":{"position":[[30,2]]},"2723":{"position":[[110,2],[146,2]]},"2725":{"position":[[1508,2],[2125,2],[2640,2],[2658,2]]},"2727":{"position":[[2,2],[29,2],[53,2],[885,2]]},"2733":{"position":[[32,2]]},"3108":{"position":[[98,2]]},"3110":{"position":[[97,2]]},"3610":{"position":[[43,2]]},"3618":{"position":[[4,2]]}}}],["后来",{"_index":5809,"t":{"1905":{"position":[[94,2]]},"3092":{"position":[[123,2]]}}}],["后续",{"_index":1598,"t":{"216":{"position":[[1237,2]]},"249":{"position":[[101,2]]},"359":{"position":[[315,2]]},"502":{"position":[[165,2]]},"585":{"position":[[595,2]]},"1286":{"position":[[37,2]]},"1403":{"position":[[17,2]]},"1535":{"position":[[517,2],[606,2]]},"1735":{"position":[[237,2]]},"1761":{"position":[[293,2]]},"2307":{"position":[[129,2]]},"2321":{"position":[[24,2]]},"2862":{"position":[[370,2],[397,2]]},"2881":{"position":[[241,2]]},"2943":{"position":[[496,2]]},"3301":{"position":[[55,2]]},"3365":{"position":[[0,2]]},"3928":{"position":[[244,2]]}}}],["后缀",{"_index":2790,"t":{"516":{"position":[[601,2]]},"1576":{"position":[[172,2]]},"1592":{"position":[[81,2]]},"1594":{"position":[[164,2]]},"1617":{"position":[[1200,2]]},"1621":{"position":[[769,2]]},"1661":{"position":[[707,2],[823,2]]},"3023":{"position":[[704,2],[820,2]]},"3620":{"position":[[135,2],[157,2]]},"3920":{"position":[[1190,2]]},"3934":{"position":[[807,2]]},"3986":{"position":[[736,2]]}}}],["后缀名",{"_index":7371,"t":{"3080":{"position":[[538,3]]}}}],["后置",{"_index":5112,"t":{"1598":{"position":[[90,2],[135,2]]}}}],["后者",{"_index":1969,"t":{"300":{"position":[[89,2]]},"319":{"position":[[56,2]]},"552":{"position":[[67,2]]},"604":{"position":[[54,2]]},"2649":{"position":[[86,2]]},"2703":{"position":[[12,2]]},"3071":{"position":[[1106,2]]},"3393":{"position":[[50,2]]},"3830":{"position":[[96,2]]}}}],["后面",{"_index":188,"t":{"11":{"position":[[853,2]]},"698":{"position":[[36,2]]},"715":{"position":[[65,2]]},"1483":{"position":[[709,2]]},"1847":{"position":[[68,2]]},"2294":{"position":[[901,2]]},"2745":{"position":[[174,2]]},"2747":{"position":[[177,2]]},"2836":{"position":[[954,2]]},"3080":{"position":[[393,2],[505,2]]},"3640":{"position":[[411,2]]},"3676":{"position":[[141,2]]},"3696":{"position":[[117,2]]},"3783":{"position":[[50,2]]},"3964":{"position":[[133,2]]}}}],["向下兼容",{"_index":10156,"t":{"3988":{"position":[[515,4]]}}}],["吗",{"_index":2195,"t":{"338":{"position":[[1202,1],[1270,1],[1283,1]]},"2317":{"position":[[31,1]]},"2881":{"position":[[227,1]]},"3934":{"position":[[1350,1]]},"3966":{"position":[[1395,1]]},"3986":{"position":[[1233,1]]},"3992":{"position":[[2908,1],[3679,1]]},"3994":{"position":[[1694,1]]}}}],["君",{"_index":1487,"t":{"199":{"position":[[424,1]]}}}],["君临天下",{"_index":4780,"t":{"1511":{"position":[[2440,4]]}}}],["君子兰",{"_index":4846,"t":{"1511":{"position":[[3310,3]]}}}],["吞吐量",{"_index":1863,"t":{"255":{"position":[[154,3]]},"1903":{"position":[[470,3]]},"2311":{"position":[[160,3]]},"3914":{"position":[[1489,3]]}}}],["否",{"_index":2442,"t":{"406":{"position":[[83,1]]}}}],["否则",{"_index":889,"t":{"121":{"position":[[305,2]]},"127":{"position":[[725,2],[1415,2]]},"445":{"position":[[830,2]]},"459":{"position":[[21,2]]},"498":{"position":[[103,2]]},"893":{"position":[[103,2]]},"1133":{"position":[[174,2]]},"1659":{"position":[[1318,2]]},"1781":{"position":[[456,2]]},"1903":{"position":[[406,2]]},"1913":{"position":[[1189,2]]},"1973":{"position":[[120,2]]},"1987":{"position":[[120,2]]},"2010":{"position":[[128,2]]},"2587":{"position":[[493,2]]},"2721":{"position":[[54,2],[113,2]]},"2836":{"position":[[1269,2]]},"3063":{"position":[[1314,2]]},"3254":{"position":[[604,2],[979,2],[1206,2]]},"3287":{"position":[[3177,2]]},"3360":{"position":[[211,2]]},"3454":{"position":[[296,2]]},"3644":{"position":[[1318,2]]},"3686":{"position":[[486,2],[586,2]]},"3706":{"position":[[1239,2],[1325,2]]},"3840":{"position":[[54,2]]},"3842":{"position":[[79,2],[619,2],[1228,2],[1802,2],[2405,2],[3038,2]]},"3844":{"position":[[79,2]]},"3846":{"position":[[68,2],[324,2]]},"3862":{"position":[[54,2]]},"3882":{"position":[[56,2]]},"3884":{"position":[[54,2]]},"3886":{"position":[[56,2]]},"3888":{"position":[[56,2]]},"3892":{"position":[[56,2]]},"3916":{"position":[[9081,2]]},"3924":{"position":[[1642,2]]}}}],["含",{"_index":531,"t":{"91":{"position":[[56,1],[543,1]]},"627":{"position":[[31,1]]},"1041":{"position":[[32,1]]},"1377":{"position":[[314,1]]},"1383":{"position":[[239,1]]},"1483":{"position":[[1132,1]]},"1741":{"position":[[1672,1]]},"1817":{"position":[[99,1]]},"3952":{"position":[[674,1]]}}}],["含义",{"_index":2632,"t":{"469":{"position":[[52,2]]},"2418":{"position":[[52,2],[571,2]]},"2420":{"position":[[9,2]]},"2424":{"position":[[63,2]]},"2910":{"position":[[181,2]]},"3350":{"position":[[60,2],[81,2]]},"3622":{"position":[[22,2]]}}}],["含有",{"_index":2246,"t":{"342":{"position":[[57,2]]},"1566":{"position":[[369,2]]},"1615":{"position":[[274,2],[284,2]]},"1775":{"position":[[116,2]]},"1857":{"position":[[170,2]]},"1875":{"position":[[694,2]]},"2684":{"position":[[345,2]]}}}],["听",{"_index":4805,"t":{"1511":{"position":[[2716,1]]}}}],["启",{"_index":4740,"t":{"1511":{"position":[[1982,1]]}}}],["启动",{"_index":1506,"t":{"202":{"position":[[28,2]]},"206":{"position":[[298,2]]},"216":{"position":[[80,2]]},"220":{"position":[[847,2]]},"331":{"position":[[232,2]]},"336":{"position":[[203,2],[209,2]]},"429":{"position":[[66,2],[74,2]]},"445":{"position":[[749,2]]},"449":{"position":[[38,2]]},"451":{"position":[[278,2]]},"463":{"position":[[11,2]]},"681":{"position":[[29,2]]},"696":{"position":[[416,2],[446,2]]},"730":{"position":[[47,2]]},"734":{"position":[[7724,2]]},"1377":{"position":[[401,2]]},"1474":{"position":[[27,2]]},"1541":{"position":[[478,2]]},"1587":{"position":[[13,2]]},"1589":{"position":[[14,2]]},"1755":{"position":[[31,2]]},"1801":{"position":[[1955,2]]},"1803":{"position":[[1045,2],[3873,2]]},"1981":{"position":[[0,2],[54,2]]},"1993":{"position":[[0,2],[54,2]]},"2016":{"position":[[0,2],[62,2]]},"2269":{"position":[[11,2]]},"2345":{"position":[[857,2]]},"2400":{"position":[[176,2]]},"2402":{"position":[[15,2],[225,2]]},"2442":{"position":[[260,2],[485,2],[716,2]]},"2444":{"position":[[183,2]]},"2524":{"position":[[8,2]]},"2542":{"position":[[148,2]]},"2553":{"position":[[251,2]]},"2613":{"position":[[44,2]]},"2629":{"position":[[153,2]]},"2670":{"position":[[7,2]]},"2672":{"position":[[7,2]]},"2690":{"position":[[359,2]]},"2711":{"position":[[12,2]]},"2713":{"position":[[279,2],[679,2]]},"2717":{"position":[[57,2]]},"2733":{"position":[[89,2]]},"2745":{"position":[[214,2]]},"2747":{"position":[[217,2]]},"2749":{"position":[[10,2]]},"2751":{"position":[[54,2]]},"2760":{"position":[[32,2]]},"2788":{"position":[[6,2]]},"2805":{"position":[[78,2],[81,2]]},"2817":{"position":[[59,2],[124,2],[587,2]]},"2821":{"position":[[81,2]]},"2834":{"position":[[46,2],[50,2]]},"2836":{"position":[[1018,2],[1057,2]]},"2870":{"position":[[0,2]]},"2872":{"position":[[125,2]]},"2875":{"position":[[523,2],[622,2],[786,2]]},"2881":{"position":[[312,2],[344,2],[365,2]]},"2899":{"position":[[211,2]]},"2903":{"position":[[26,2],[52,2]]},"2905":{"position":[[77,2]]},"3031":{"position":[[251,2]]},"3071":{"position":[[51,2],[210,2]]},"3078":{"position":[[35,2],[171,2]]},"3080":{"position":[[222,2],[243,2],[433,2],[543,2]]},"3082":{"position":[[81,2],[116,2]]},"3131":{"position":[[321,2]]},"3194":{"position":[[537,2]]},"3321":{"position":[[301,2]]},"3339":{"position":[[307,2]]},"3371":{"position":[[123,2],[287,2]]},"3373":{"position":[[96,2]]},"3389":{"position":[[529,2],[808,2]]},"3397":{"position":[[135,2]]},"3401":{"position":[[349,2]]},"3428":{"position":[[55,2]]},"3432":{"position":[[12,2]]},"3708":{"position":[[3904,2]]},"3798":{"position":[[634,2],[661,2]]},"3800":{"position":[[324,2]]},"3808":{"position":[[3209,2],[3242,2]]},"3810":{"position":[[978,2],[1013,2]]},"3850":{"position":[[45,2]]},"3912":{"position":[[1071,2]]},"3916":{"position":[[1523,2],[1645,2],[1667,2],[1688,2],[1717,2],[1748,2],[1786,2],[1833,2],[2283,2]]},"3924":{"position":[[157,2],[800,2],[2871,2],[3035,2]]},"3932":{"position":[[1459,2]]},"3934":{"position":[[854,2],[1337,2]]},"3948":{"position":[[288,2]]},"3952":{"position":[[365,2]]},"3966":{"position":[[1154,2]]},"3968":{"position":[[343,2]]},"3976":{"position":[[481,2]]},"3978":{"position":[[263,2],[1144,2]]},"3980":{"position":[[728,2]]},"3984":{"position":[[532,2]]},"3986":{"position":[[467,2]]},"3994":{"position":[[1126,2]]},"3996":{"position":[[460,2],[1138,2]]},"3998":{"position":[[329,2],[775,2]]}}}],["启动项",{"_index":7189,"t":{"2905":{"position":[[31,3]]}}}],["启发",{"_index":4912,"t":{"1516":{"position":[[120,2]]}}}],["启用",{"_index":108,"t":{"9":{"position":[[0,2]]},"127":{"position":[[167,2]]},"129":{"position":[[348,2]]},"150":{"position":[[129,2]]},"206":{"position":[[44,2]]},"325":{"position":[[88,2],[162,2]]},"411":{"position":[[0,2]]},"415":{"position":[[445,2]]},"423":{"position":[[127,2],[260,2]]},"425":{"position":[[61,2]]},"532":{"position":[[85,2],[138,2],[203,2]]},"621":{"position":[[40,2],[52,2]]},"625":{"position":[[90,2]]},"653":{"position":[[210,2]]},"698":{"position":[[847,2]]},"743":{"position":[[16,2],[28,2],[48,2]]},"1353":{"position":[[177,2]]},"1641":{"position":[[395,2]]},"1661":{"position":[[212,2]]},"1663":{"position":[[62,2],[445,2]]},"1821":{"position":[[238,2]]},"1867":{"position":[[312,2]]},"2255":{"position":[[122,2]]},"2292":{"position":[[0,2]]},"2426":{"position":[[247,2]]},"2621":{"position":[[39,2]]},"2623":{"position":[[60,2]]},"2657":{"position":[[45,2],[55,2],[65,2]]},"2725":{"position":[[78,2]]},"2967":{"position":[[76,2]]},"2969":{"position":[[78,2]]},"2981":{"position":[[118,2],[187,2]]},"2991":{"position":[[451,2]]},"3023":{"position":[[213,2]]},"3063":{"position":[[152,2],[924,2],[986,2],[1182,2],[1353,2]]},"3071":{"position":[[1154,2]]},"3150":{"position":[[167,2]]},"3287":{"position":[[3152,2],[3174,2],[3180,2]]},"3294":{"position":[[62,2]]},"3301":{"position":[[27,2]]},"3416":{"position":[[129,2]]},"3432":{"position":[[4534,2]]},"3448":{"position":[[4,2],[196,2],[200,2],[339,2]]},"3452":{"position":[[38,2]]},"3650":{"position":[[15,2]]},"3672":{"position":[[58,2]]},"3686":{"position":[[421,2]]},"3706":{"position":[[144,2],[916,2],[978,2],[1174,2],[1364,2]]},"3708":{"position":[[3942,2]]},"3774":{"position":[[60,2],[64,2]]},"3912":{"position":[[2215,2],[2525,2]]},"3916":{"position":[[1292,2],[2529,2],[2597,2],[3225,2]]},"3918":{"position":[[3441,2]]},"3924":{"position":[[2063,2]]},"3932":{"position":[[125,2],[1271,2],[1309,2]]},"3934":{"position":[[512,2]]},"3938":{"position":[[813,2]]},"3948":{"position":[[387,2]]},"3956":{"position":[[3096,2]]},"3992":{"position":[[2201,2]]},"3994":{"position":[[517,2],[1227,2]]},"3996":{"position":[[1118,2]]},"4000":{"position":[[1092,2]]}}}],["吴",{"_index":4721,"t":{"1511":{"position":[[1737,1]]}}}],["吸引",{"_index":4545,"t":{"1509":{"position":[[182,2]]}}}],["吹",{"_index":4589,"t":{"1511":{"position":[[374,1]]}}}],["呈现",{"_index":1322,"t":{"186":{"position":[[146,2]]}}}],["告诉",{"_index":1501,"t":{"199":{"position":[[679,2]]},"3926":{"position":[[273,2]]}}}],["呢",{"_index":1533,"t":{"206":{"position":[[83,1]]},"218":{"position":[[106,1]]},"261":{"position":[[90,1]]},"340":{"position":[[1231,1],[1247,1]]},"369":{"position":[[76,1]]},"404":{"position":[[60,1]]},"585":{"position":[[469,1],[516,1]]},"2719":{"position":[[50,1]]},"2862":{"position":[[349,1]]},"3779":{"position":[[58,1]]},"3802":{"position":[[55,1]]},"3817":{"position":[[58,1]]},"3966":{"position":[[1682,1],[2032,1]]},"3968":{"position":[[604,1]]},"3986":{"position":[[1190,1]]}}}],["周",{"_index":2636,"t":{"472":{"position":[[13,1]]},"474":{"position":[[13,1]]},"476":{"position":[[15,1]]},"478":{"position":[[16,1]]},"484":{"position":[[127,1],[175,1],[228,1],[289,1]]}}}],["周一",{"_index":2694,"t":{"482":{"position":[[759,2],[859,2]]},"2418":{"position":[[1098,2],[1220,2]]},"2420":{"position":[[242,2],[506,2],[1249,2]]}}}],["周三",{"_index":6321,"t":{"2420":{"position":[[1731,2]]}}}],["周五",{"_index":2695,"t":{"482":{"position":[[762,2]]},"2418":{"position":[[1101,2]]},"2420":{"position":[[245,2],[509,2],[1252,2],[1734,2]]}}}],["周六",{"_index":2711,"t":{"482":{"position":[[946,2]]}}}],["周日",{"_index":6331,"t":{"2424":{"position":[[242,2]]}}}],["周期",{"_index":2836,"t":{"530":{"position":[[28,2]]},"1039":{"position":[[28,2]]},"1383":{"position":[[127,2]]},"1412":{"position":[[1232,2]]},"1432":{"position":[[37,2]]},"2805":{"position":[[73,2]]},"2809":{"position":[[126,2]]},"2843":{"position":[[189,2]]},"3804":{"position":[[117,2],[188,2],[437,2],[502,2]]},"3808":{"position":[[132,2],[166,2]]},"3954":{"position":[[276,2],[289,2]]}}}],["周末",{"_index":2712,"t":{"482":{"position":[[948,2]]}}}],["呼",{"_index":7899,"t":{"3309":{"position":[[54,1]]}}}],["命令",{"_index":438,"t":{"53":{"position":[[79,2]]},"64":{"position":[[105,2]]},"77":{"position":[[79,2]]},"247":{"position":[[169,2]]},"572":{"position":[[612,2],[1057,2]]},"675":{"position":[[283,2]]},"685":{"position":[[35,2],[416,2]]},"698":{"position":[[34,2]]},"706":{"position":[[248,2]]},"713":{"position":[[72,2]]},"715":{"position":[[19,2]]},"728":{"position":[[15,2]]},"730":{"position":[[71,2]]},"929":{"position":[[247,2],[449,2],[602,2],[745,2]]},"939":{"position":[[155,2]]},"1139":{"position":[[62,2]]},"1155":{"position":[[91,2]]},"1234":{"position":[[849,2],[926,2]]},"1269":{"position":[[192,2]]},"1319":{"position":[[249,2]]},"1377":{"position":[[349,2]]},"1481":{"position":[[41,2]]},"1483":{"position":[[660,2],[956,2],[1150,2]]},"1495":{"position":[[1304,2]]},"1516":{"position":[[22,2]]},"1520":{"position":[[3,2],[105,2]]},"1530":{"position":[[112,2]]},"1541":{"position":[[218,2],[300,2]]},"1547":{"position":[[82,2]]},"1549":{"position":[[69,2],[113,2]]},"1557":{"position":[[926,2]]},"1759":{"position":[[65,2]]},"2745":{"position":[[85,2],[190,2],[194,2]]},"2747":{"position":[[95,2],[193,2],[197,2]]},"2749":{"position":[[4,2]]},"2751":{"position":[[47,2]]},"2836":{"position":[[716,2],[1187,2]]},"3080":{"position":[[311,2],[409,2],[413,2]]},"3321":{"position":[[26,2]]},"3327":{"position":[[2,2]]},"3932":{"position":[[1385,2]]},"3934":{"position":[[655,2]]},"3946":{"position":[[340,2]]},"3948":{"position":[[477,2]]},"3962":{"position":[[1399,2]]},"3982":{"position":[[272,2]]},"3994":{"position":[[648,2]]}}}],["命令行",{"_index":547,"t":{"91":{"position":[[591,3]]},"679":{"position":[[172,3]]},"685":{"position":[[482,3],[539,3],[595,3]]},"696":{"position":[[496,3]]},"1545":{"position":[[56,3]]},"2555":{"position":[[17,3]]},"2653":{"position":[[2,3],[29,3]]},"2864":{"position":[[51,3]]},"2866":{"position":[[2,3]]},"3918":{"position":[[1033,3]]}}}],["命名",{"_index":137,"t":{"11":{"position":[[61,2],[664,2],[929,2]]},"150":{"position":[[90,2]]},"220":{"position":[[839,2]]},"288":{"position":[[314,2],[543,2]]},"355":{"position":[[27,2]]},"427":{"position":[[94,2]]},"451":{"position":[[54,2]]},"685":{"position":[[318,2],[336,2]]},"698":{"position":[[1095,2]]},"1592":{"position":[[253,2]]},"1594":{"position":[[324,2]]},"1621":{"position":[[713,2]]},"1641":{"position":[[96,2],[400,2]]},"1647":{"position":[[26,2]]},"1655":{"position":[[30,2]]},"1659":{"position":[[44,2],[1322,2]]},"1661":{"position":[[217,2],[329,2]]},"2033":{"position":[[118,2]]},"2055":{"position":[[328,2]]},"2294":{"position":[[61,2],[693,2],[977,2]]},"2305":{"position":[[18,2]]},"2361":{"position":[[450,2]]},"2363":{"position":[[268,2]]},"2365":{"position":[[161,2]]},"2367":{"position":[[167,2]]},"2369":{"position":[[187,2]]},"2371":{"position":[[194,2]]},"2373":{"position":[[175,2]]},"2542":{"position":[[43,2]]},"2709":{"position":[[252,2],[353,2]]},"2717":{"position":[[67,2],[164,2],[255,2]]},"2733":{"position":[[69,2]]},"3023":{"position":[[218,2],[326,2]]},"3432":{"position":[[637,2],[1617,2]]},"3468":{"position":[[89,2],[301,2]]},"3483":{"position":[[1312,2]]},"3575":{"position":[[368,2]]},"3579":{"position":[[64,2],[272,2]]},"3620":{"position":[[5,2],[20,2],[64,2],[85,2],[99,2],[121,2]]},"3644":{"position":[[44,2],[1322,2]]},"3742":{"position":[[15,2]]},"3779":{"position":[[1269,2],[1284,2],[1289,2],[1317,2],[1894,2],[1909,2],[1934,2],[1939,2]]},"3785":{"position":[[402,2],[540,2],[682,2]]},"3802":{"position":[[1887,2],[1902,2],[1907,2],[1935,2],[2671,2],[2686,2],[2711,2],[2716,2]]},"3812":{"position":[[680,2],[816,2],[956,2]]},"3817":{"position":[[2483,2],[2498,2],[2503,2],[2531,2]]},"3912":{"position":[[1599,2]]},"3922":{"position":[[715,2]]},"3930":{"position":[[377,2],[414,2],[611,2]]},"3936":{"position":[[310,2]]},"3962":{"position":[[1594,2],[1614,2]]},"3966":{"position":[[1190,2]]},"3988":{"position":[[441,2]]},"3992":{"position":[[145,2],[1035,2]]},"3994":{"position":[[1464,2]]},"3996":{"position":[[407,2]]},"4000":{"position":[[412,2],[560,2],[607,2],[861,2]]},"4002":{"position":[[216,2]]},"4006":{"position":[[168,2]]}}}],["和尚",{"_index":4864,"t":{"1511":{"position":[[3649,2]]}}}],["和校验",{"_index":5266,"t":{"1687":{"position":[[289,3],[314,3],[348,3]]},"2497":{"position":[[50,3]]},"2499":{"position":[[79,3]]},"2977":{"position":[[6,3],[25,3]]},"2987":{"position":[[6,3],[25,3]]},"2997":{"position":[[6,3],[25,3]]},"3005":{"position":[[6,3],[25,3]]},"3019":{"position":[[6,3],[25,3]]},"3027":{"position":[[6,3],[25,3]]},"3035":{"position":[[6,3],[25,3]]},"3043":{"position":[[6,3],[25,3]]},"3051":{"position":[[6,3],[25,3]]},"3059":{"position":[[6,3],[25,3]]}}}],["和解",{"_index":3108,"t":{"587":{"position":[[2080,2]]}}}],["咖啡",{"_index":4563,"t":{"1511":{"position":[[57,2],[806,2]]}}}],["品牌",{"_index":4532,"t":{"1509":{"position":[[72,2],[268,2]]}}}],["品牌形象",{"_index":4544,"t":{"1509":{"position":[[175,4]]}}}],["哈哈",{"_index":4672,"t":{"1511":{"position":[[1178,2]]}}}],["哈哈哈哈",{"_index":5736,"t":{"1863":{"position":[[69,4]]},"3383":{"position":[[312,4]]}}}],["哈萨克",{"_index":6592,"t":{"2559":{"position":[[1549,3],[1625,3]]}}}],["响应",{"_index":1100,"t":{"144":{"position":[[85,2],[379,2]]},"148":{"position":[[437,2],[516,2]]},"227":{"position":[[55,2]]},"300":{"position":[[302,2]]},"415":{"position":[[178,2]]},"417":{"position":[[31,2],[44,2]]},"1432":{"position":[[45,2]]},"1572":{"position":[[28,2],[594,2]]},"1901":{"position":[[292,2]]},"2564":{"position":[[19,2]]},"2991":{"position":[[184,2]]},"2995":{"position":[[21,2]]},"3045":{"position":[[10,2],[15,2]]},"3520":{"position":[[46,2]]},"3561":{"position":[[46,2]]},"3708":{"position":[[2619,2]]},"3918":{"position":[[3292,2]]},"3920":{"position":[[1214,2]]},"3922":{"position":[[1353,2]]},"3938":{"position":[[624,2]]},"3956":{"position":[[1967,2]]},"3986":{"position":[[1721,2]]},"3992":{"position":[[1968,2],[2035,2]]}}}],["响应速度",{"_index":3017,"t":{"581":{"position":[[35,4]]},"3100":{"position":[[46,4]]}}}],["哎",{"_index":5724,"t":{"1849":{"position":[[30,1]]}}}],["哥",{"_index":6530,"t":{"2559":{"position":[[925,1]]}}}],["哥伦比亚",{"_index":6647,"t":{"2559":{"position":[[2161,4]]}}}],["哥斯达黎加",{"_index":6648,"t":{"2559":{"position":[[2178,5]]}}}],["哦",{"_index":173,"t":{"11":{"position":[[740,1],[934,1]]},"1511":{"position":[[1292,1]]},"2294":{"position":[[788,1],[982,1]]},"3327":{"position":[[42,1]]},"3924":{"position":[[2227,1]]}}}],["哪个",{"_index":2485,"t":{"417":{"position":[[227,2]]},"565":{"position":[[125,2],[152,2],[195,2]]},"677":{"position":[[41,2]]},"704":{"position":[[41,2]]},"1050":{"position":[[20,2]]},"3448":{"position":[[189,2],[192,2]]}}}],["哪些",{"_index":854,"t":{"119":{"position":[[175,2],[181,2]]},"565":{"position":[[156,2]]},"1050":{"position":[[12,2]]},"1392":{"position":[[54,2]]},"1394":{"position":[[183,2]]},"1781":{"position":[[481,2]]},"3071":{"position":[[577,2],[817,2]]},"3352":{"position":[[631,2],[640,2]]}}}],["唤醒",{"_index":2283,"t":{"357":{"position":[[27,2]]},"3856":{"position":[[19,2],[34,2]]}}}],["唯一",{"_index":2516,"t":{"427":{"position":[[96,2]]},"445":{"position":[[866,2]]},"522":{"position":[[74,2]]},"604":{"position":[[47,2]]},"615":{"position":[[1101,2]]},"855":{"position":[[93,2]]},"857":{"position":[[89,2]]},"903":{"position":[[48,2]]},"1223":{"position":[[37,2]]},"1412":{"position":[[160,2]]},"1520":{"position":[[127,2]]},"1909":{"position":[[824,2]]},"2269":{"position":[[44,2]]},"2326":{"position":[[24,2]]},"2400":{"position":[[163,2]]},"2444":{"position":[[93,2]]},"2745":{"position":[[242,2]]},"2747":{"position":[[277,2]]},"2751":{"position":[[134,2]]},"2768":{"position":[[1529,2]]},"3063":{"position":[[1480,2]]},"3080":{"position":[[493,2]]},"3622":{"position":[[130,2]]},"3706":{"position":[[1491,2]]},"3716":{"position":[[857,2]]},"3806":{"position":[[1332,2]]},"3996":{"position":[[1690,2]]}}}],["唯一性",{"_index":3879,"t":{"1026":{"position":[[183,3]]},"1865":{"position":[[471,3]]},"2326":{"position":[[2,3]]}}}],["啃过",{"_index":3048,"t":{"585":{"position":[[525,2]]}}}],["商业",{"_index":4537,"t":{"1509":{"position":[[135,2]]},"1511":{"position":[[122,2]]}}}],["商业性",{"_index":7034,"t":{"2782":{"position":[[62,3]]}}}],["商品",{"_index":7391,"t":{"3092":{"position":[[152,2]]},"3094":{"position":[[60,2],[66,2],[84,2],[89,2],[100,2],[115,2],[120,2],[132,2],[134,2],[143,2],[158,2],[163,2]]},"3100":{"position":[[7,2]]},"3934":{"position":[[1857,2]]}}}],["商量",{"_index":7591,"t":{"3207":{"position":[[115,2]]}}}],["啊",{"_index":2326,"t":{"371":{"position":[[791,1]]},"2895":{"position":[[7,1]]},"3452":{"position":[[4053,1]]},"3916":{"position":[[7049,1]]}}}],["啰嗦",{"_index":6858,"t":{"2731":{"position":[[671,2]]}}}],["善友",{"_index":6988,"t":{"2768":{"position":[[1502,2],[1554,2]]}}}],["喜新厌旧",{"_index":9404,"t":{"3926":{"position":[[392,4]]}}}],["喜欢",{"_index":1196,"t":{"168":{"position":[[9,2],[16,2],[23,2],[28,2],[35,2],[42,2],[57,2]]},"172":{"position":[[41,2]]},"1511":{"position":[[13,2]]},"1555":{"position":[[652,2]]},"1627":{"position":[[232,2]]},"1801":{"position":[[1719,2],[2515,2]]},"3289":{"position":[[121,2]]},"3432":{"position":[[1614,2]]},"3952":{"position":[[255,2]]}}}],["喝",{"_index":4794,"t":{"1511":{"position":[[2609,1]]}}}],["喝咖啡",{"_index":4732,"t":{"1511":{"position":[[1896,3]]}}}],["喝杯",{"_index":4640,"t":{"1511":{"position":[[804,2]]}}}],["喷子",{"_index":6902,"t":{"2768":{"position":[[29,2]]}}}],["嘉泰",{"_index":6481,"t":{"2559":{"position":[[510,2],[522,2],[529,2]]}}}],["嘲讽",{"_index":1184,"t":{"166":{"position":[[22,2]]},"3242":{"position":[[71,2],[200,2]]},"3910":{"position":[[68,2],[197,2]]},"3934":{"position":[[2165,2],[2366,2]]}}}],["噢",{"_index":5723,"t":{"1849":{"position":[[28,1]]}}}],["器",{"_index":699,"t":{"112":{"position":[[19,1],[96,1],[1617,1]]},"272":{"position":[[270,1]]},"348":{"position":[[228,1]]},"516":{"position":[[624,1]]},"617":{"position":[[1417,1],[2174,1]]},"679":{"position":[[130,1]]},"694":{"position":[[27,1]]},"698":{"position":[[389,1]]},"841":{"position":[[107,1]]},"844":{"position":[[4,1]]},"846":{"position":[[4,1],[17,1],[66,1]]},"949":{"position":[[715,1],[787,1]]},"1214":{"position":[[193,1]]},"1424":{"position":[[755,1]]},"1587":{"position":[[62,1],[67,1]]},"1665":{"position":[[32,1],[375,1]]},"1761":{"position":[[286,1]]},"1815":{"position":[[419,1],[588,1]]},"1855":{"position":[[493,1]]},"1867":{"position":[[47,1],[340,1]]},"1892":{"position":[[2,1],[55,1]]},"1894":{"position":[[7,1]]},"1901":{"position":[[4,1],[9,1],[47,1],[124,1],[195,1],[288,1],[364,1],[600,1],[645,1]]},"1903":{"position":[[6,1],[61,1],[100,1],[142,1],[181,1],[219,1],[229,1],[281,1],[360,1],[377,1],[394,1],[404,1],[416,1],[443,1],[481,1],[485,1],[521,1],[628,1]]},"1905":{"position":[[20,1]]},"1907":{"position":[[8,1]]},"1909":{"position":[[4,1],[69,1],[261,1],[545,1]]},"1911":{"position":[[6,1]]},"1913":{"position":[[264,1]]},"1917":{"position":[[4,1]]},"1919":{"position":[[297,1],[562,1],[563,1]]},"1923":{"position":[[4,1],[15,1],[86,1]]},"1931":{"position":[[4,1],[16,1]]},"1947":{"position":[[116,1],[122,1],[129,1]]},"1949":{"position":[[14,1]]},"1955":{"position":[[4,1],[45,1],[110,1],[159,1],[242,1]]},"1957":{"position":[[8,1]]},"1963":{"position":[[2,1]]},"1965":{"position":[[7,1]]},"2175":{"position":[[204,1]]},"2345":{"position":[[140,1]]},"2357":{"position":[[347,1]]},"2385":{"position":[[133,1]]},"2564":{"position":[[117,1]]},"3063":{"position":[[938,1],[994,1]]},"3362":{"position":[[30,1]]},"3365":{"position":[[20,1]]},"3393":{"position":[[174,1]]},"3428":{"position":[[88,1],[102,1]]},"3432":{"position":[[2127,1],[2135,1]]},"3434":{"position":[[74,1],[1620,1],[1628,1]]},"3436":{"position":[[22,1]]},"3454":{"position":[[179,1]]},"3506":{"position":[[61,1],[641,1]]},"3547":{"position":[[61,1],[811,1]]},"3706":{"position":[[930,1],[986,1]]},"3708":{"position":[[51,1]]},"3716":{"position":[[98,1],[782,1]]},"3793":{"position":[[164,1]]},"3804":{"position":[[130,1],[201,1],[278,1],[450,1],[515,1],[586,1],[679,1],[740,1],[801,1],[863,1],[926,1],[990,1],[1056,1]]},"3815":{"position":[[76,1]]},"3817":{"position":[[408,1],[1488,1]]},"3819":{"position":[[65,1],[131,1],[218,1],[297,1],[385,1],[640,1],[919,1],[1464,1],[1577,1],[1633,1],[1681,1]]},"3824":{"position":[[46,1]]},"3826":{"position":[[69,1],[124,1]]},"3830":{"position":[[290,1]]},"3834":{"position":[[20,1]]},"3844":{"position":[[879,1]]},"3850":{"position":[[90,1]]},"3852":{"position":[[90,1]]},"3854":{"position":[[92,1]]},"3856":{"position":[[10,1],[40,1],[46,1],[106,1]]},"3874":{"position":[[23,1]]},"3876":{"position":[[23,1]]},"3910":{"position":[[1400,1]]},"3916":{"position":[[8964,1]]},"3930":{"position":[[420,1]]},"3934":{"position":[[1140,1]]},"3936":{"position":[[421,1]]},"3978":{"position":[[176,1]]},"3986":{"position":[[843,1]]},"3992":{"position":[[3425,1]]},"3998":{"position":[[52,1]]}}}],["四",{"_index":3252,"t":{"645":{"position":[[163,1]]},"647":{"position":[[204,1]]},"665":{"position":[[230,1],[787,1]]},"667":{"position":[[239,1],[820,1]]},"669":{"position":[[230,1],[787,1]]},"671":{"position":[[239,1],[820,1]]},"779":{"position":[[141,1]]},"795":{"position":[[135,1],[419,1]]},"853":{"position":[[242,1]]},"956":{"position":[[223,1],[1057,1]]},"958":{"position":[[162,1]]},"960":{"position":[[279,1]]},"965":{"position":[[166,1],[493,1]]},"967":{"position":[[177,1],[508,1]]},"969":{"position":[[154,1],[478,1]]},"971":{"position":[[154,1],[478,1]]},"1160":{"position":[[319,1],[1225,1]]},"1162":{"position":[[337,1],[1291,1]]},"1170":{"position":[[422,1],[951,1]]},"1179":{"position":[[301,1],[775,1]]},"1183":{"position":[[276,1],[650,1]]},"1188":{"position":[[193,1],[481,1]]},"1190":{"position":[[200,1],[499,1]]},"1194":{"position":[[233,1]]},"1325":{"position":[[142,1]]},"1329":{"position":[[267,1],[770,1]]},"1331":{"position":[[276,1],[794,1]]},"1333":{"position":[[267,1],[770,1]]},"1335":{"position":[[276,1],[797,1]]},"1539":{"position":[[108,1]]},"1543":{"position":[[364,1]]},"1633":{"position":[[254,1]]},"3432":{"position":[[1160,1],[1766,1]]},"3434":{"position":[[1320,1]]},"3466":{"position":[[514,1]]}}}],["四不像",{"_index":7012,"t":{"2770":{"position":[[191,3],[207,3]]}}}],["四个",{"_index":3974,"t":{"1117":{"position":[[361,2],[1283,2],[2055,2],[3088,2],[4071,2]]},"2418":{"position":[[269,2],[303,2],[336,2],[439,2],[540,2]]}}}],["四种",{"_index":3747,"t":{"924":{"position":[[11,2],[72,2]]},"1135":{"position":[[12,2]]},"1200":{"position":[[20,2]]},"1611":{"position":[[63,2]]},"2393":{"position":[[39,2]]},"3520":{"position":[[15,2]]},"3561":{"position":[[15,2]]},"3573":{"position":[[46,2]]},"3770":{"position":[[5,2]]}}}],["回",{"_index":2857,"t":{"532":{"position":[[214,1]]},"3287":{"position":[[150,1],[475,1],[2380,1]]},"3291":{"position":[[435,1],[475,1],[1207,1],[1247,1],[2166,1]]},"3910":{"position":[[2296,1]]},"3970":{"position":[[85,1]]},"3980":{"position":[[332,1]]}}}],["回头",{"_index":7979,"t":{"3352":{"position":[[698,2]]}}}],["回归",{"_index":2422,"t":{"401":{"position":[[368,2]]}}}],["回收",{"_index":4370,"t":{"1474":{"position":[[87,2],[147,2],[462,2]]},"1711":{"position":[[734,2]]},"1825":{"position":[[37,2],[62,2]]},"2391":{"position":[[169,2]]},"2490":{"position":[[37,2],[49,2]]},"2834":{"position":[[92,2]]},"3856":{"position":[[52,2]]},"3912":{"position":[[2564,2]]},"3914":{"position":[[2923,2]]},"3952":{"position":[[319,2]]}}}],["回答",{"_index":7000,"t":{"2770":{"position":[[77,2]]}}}],["回调",{"_index":5594,"t":{"1803":{"position":[[614,2],[717,2]]},"3914":{"position":[[894,2]]}}}],["回退",{"_index":5540,"t":{"1799":{"position":[[1008,2]]},"3912":{"position":[[1029,2]]}}}],["因为",{"_index":159,"t":{"11":{"position":[[673,2]]},"208":{"position":[[31,2]]},"225":{"position":[[50,2]]},"261":{"position":[[92,2]]},"373":{"position":[[13,2]]},"482":{"position":[[401,2]]},"585":{"position":[[415,2]]},"675":{"position":[[206,2]]},"1145":{"position":[[516,2]]},"1483":{"position":[[707,2]]},"1509":{"position":[[244,2]]},"1617":{"position":[[1185,2]]},"2294":{"position":[[702,2]]},"2418":{"position":[[679,2]]},"2770":{"position":[[80,2]]},"2881":{"position":[[236,2]]},"2889":{"position":[[124,2]]},"2917":{"position":[[178,2]]},"3092":{"position":[[125,2]]},"3112":{"position":[[17,2]]},"3154":{"position":[[732,2]]},"3307":{"position":[[171,2]]},"3432":{"position":[[4351,2]]},"3434":{"position":[[2725,2]]},"3622":{"position":[[180,2]]},"3664":{"position":[[512,2]]},"3696":{"position":[[5,2]]},"3768":{"position":[[2417,2]]},"3922":{"position":[[728,2]]},"3928":{"position":[[625,2]]}}}],["因此",{"_index":4569,"t":{"1511":{"position":[[154,2]]},"2717":{"position":[[148,2]]}}}],["团",{"_index":7500,"t":{"3138":{"position":[[86,1]]}}}],["团队",{"_index":1860,"t":{"255":{"position":[[57,2]]},"3142":{"position":[[202,2]]}}}],["园丁",{"_index":1489,"t":{"199":{"position":[[444,2]]}}}],["困扰",{"_index":7166,"t":{"2881":{"position":[[256,2]]},"3690":{"position":[[88,2]]},"3938":{"position":[[892,2]]}}}],["困难",{"_index":7245,"t":{"2917":{"position":[[175,2],[214,2]]},"2919":{"position":[[220,2]]},"3612":{"position":[[55,2]]}}}],["围绕",{"_index":5790,"t":{"1901":{"position":[[409,2]]}}}],["固",{"_index":3145,"t":{"606":{"position":[[178,1],[203,1]]},"3992":{"position":[[2271,1]]}}}],["固化",{"_index":1885,"t":{"261":{"position":[[116,2]]},"286":{"position":[[0,2],[82,2]]}}}],["固定",{"_index":2686,"t":{"482":{"position":[[586,2]]},"1539":{"position":[[1163,2],[1835,2]]},"1541":{"position":[[268,2]]},"2393":{"position":[[96,2]]},"2418":{"position":[[888,2]]}}}],["国",{"_index":5278,"t":{"1691":{"position":[[12,1]]}}}],["国产",{"_index":7595,"t":{"3209":{"position":[[82,2]]},"3250":{"position":[[81,2]]},"3934":{"position":[[748,2]]}}}],["国人",{"_index":3207,"t":{"615":{"position":[[652,2]]}}}],["国内",{"_index":513,"t":{"87":{"position":[[0,2]]},"1511":{"position":[[1939,2]]},"2770":{"position":[[15,2]]}}}],["国外",{"_index":517,"t":{"87":{"position":[[32,2]]},"3958":{"position":[[329,2]]}}}],["国标",{"_index":9565,"t":{"3938":{"position":[[602,2]]}}}],["国货",{"_index":4821,"t":{"1511":{"position":[[3002,2]]}}}],["图",{"_index":663,"t":{"104":{"position":[[69,1]]},"182":{"position":[[158,1]]},"597":{"position":[[732,1]]},"599":{"position":[[617,1]]},"602":{"position":[[267,1]]},"610":{"position":[[123,1]]},"617":{"position":[[1897,1],[2510,1]]},"629":{"position":[[2,1]]},"919":{"position":[[102,1]]},"1535":{"position":[[34,1]]},"1561":{"position":[[32,1]]},"1584":{"position":[[520,1]]},"1603":{"position":[[350,1]]},"1605":{"position":[[272,1]]},"1607":{"position":[[304,1]]},"1609":{"position":[[251,1],[704,1]]},"1611":{"position":[[824,1]]},"1613":{"position":[[218,1]]},"1615":{"position":[[257,1]]},"1617":{"position":[[300,1],[542,1],[819,1],[1085,1]]},"1619":{"position":[[423,1]]},"1621":{"position":[[410,1],[690,1]]},"1643":{"position":[[297,1]]},"1645":{"position":[[291,1]]},"1647":{"position":[[358,1]]},"1649":{"position":[[257,1]]},"1651":{"position":[[309,1]]},"1653":{"position":[[302,1]]},"1655":{"position":[[345,1]]},"1657":{"position":[[460,1]]},"1659":{"position":[[849,1],[1290,1]]},"1845":{"position":[[252,1],[561,1]]},"1859":{"position":[[254,1]]},"1873":{"position":[[429,1]]},"2524":{"position":[[32,1]]},"2811":{"position":[[48,1]]},"3365":{"position":[[45,1]]},"3632":{"position":[[45,1]]},"3636":{"position":[[537,1]]},"3638":{"position":[[696,1]]},"3640":{"position":[[691,1]]},"3642":{"position":[[461,1]]},"3644":{"position":[[849,1],[1290,1]]},"3646":{"position":[[105,1]]},"3648":{"position":[[104,1]]},"3652":{"position":[[2,1]]},"3654":{"position":[[85,1]]},"3656":{"position":[[287,1]]},"3664":{"position":[[243,1]]},"3674":{"position":[[19,1]]}}}],["图形化",{"_index":7942,"t":{"3350":{"position":[[112,3]]}}}],["图标",{"_index":5770,"t":{"1887":{"position":[[514,2],[548,2]]},"3244":{"position":[[37,2]]},"3996":{"position":[[1356,2]]}}}],["图片",{"_index":5396,"t":{"1745":{"position":[[48,2],[384,2]]},"3918":{"position":[[1118,2]]},"3966":{"position":[[1282,2]]}}}],["图片格式",{"_index":3167,"t":{"606":{"position":[[418,4]]}}}],["图表",{"_index":1452,"t":{"192":{"position":[[7,2]]}}}],["圈",{"_index":7748,"t":{"3242":{"position":[[270,1]]},"3910":{"position":[[267,1]]},"3934":{"position":[[2450,1]]}}}],["土耳其",{"_index":6688,"t":{"2559":{"position":[[2610,3]]}}}],["土耳其语",{"_index":6687,"t":{"2559":{"position":[[2593,4],[2604,4]]}}}],["在于",{"_index":7234,"t":{"2915":{"position":[[173,2]]},"3136":{"position":[[97,2]]}}}],["在线",{"_index":1488,"t":{"199":{"position":[[437,2]]},"486":{"position":[[34,2]]},"1474":{"position":[[103,2]]},"2311":{"position":[[62,2]]},"2497":{"position":[[184,2]]},"2646":{"position":[[19,2]]},"2740":{"position":[[57,2]]},"3136":{"position":[[145,2]]},"3138":{"position":[[44,2],[115,2]]},"3626":{"position":[[372,2]]}}}],["地",{"_index":4220,"t":{"1389":{"position":[[168,1]]},"1394":{"position":[[180,1]]},"1566":{"position":[[427,1]]},"2341":{"position":[[174,1]]},"2361":{"position":[[330,1]]},"2768":{"position":[[87,1]]},"3088":{"position":[[65,1]]},"3124":{"position":[[61,1]]},"3150":{"position":[[83,1]]},"3282":{"position":[[26,1],[34,1]]},"3414":{"position":[[105,1]]}}}],["地区",{"_index":4021,"t":{"1141":{"position":[[94,2]]}}}],["地图",{"_index":7515,"t":{"3142":{"position":[[137,2]]}}}],["地址",{"_index":392,"t":{"44":{"position":[[117,2]]},"46":{"position":[[34,2]]},"51":{"position":[[94,2]]},"57":{"position":[[130,2]]},"60":{"position":[[34,2]]},"62":{"position":[[94,2]]},"68":{"position":[[117,2]]},"70":{"position":[[34,2]]},"75":{"position":[[94,2]]},"112":{"position":[[49,2],[54,2],[808,2],[881,2],[949,2]]},"114":{"position":[[305,2],[363,2],[559,2],[580,2]]},"308":{"position":[[371,2]]},"310":{"position":[[225,2]]},"312":{"position":[[34,2]]},"314":{"position":[[72,2],[744,2],[783,2]]},"316":{"position":[[74,2],[683,2],[722,2]]},"327":{"position":[[75,2]]},"419":{"position":[[411,2]]},"540":{"position":[[84,2]]},"587":{"position":[[978,2]]},"606":{"position":[[272,2],[287,2]]},"1379":{"position":[[250,2]]},"1497":{"position":[[262,2],[284,2]]},"1572":{"position":[[592,2]]},"1576":{"position":[[147,2],[303,2]]},"1578":{"position":[[86,2]]},"1598":{"position":[[28,2]]},"1629":{"position":[[69,2]]},"1925":{"position":[[657,2],[730,2],[798,2]]},"1979":{"position":[[870,2]]},"1991":{"position":[[266,2]]},"2014":{"position":[[266,2]]},"2261":{"position":[[113,2],[308,2]]},"2499":{"position":[[101,2]]},"2530":{"position":[[73,2]]},"2532":{"position":[[256,2]]},"2627":{"position":[[16,2],[30,2]]},"2843":{"position":[[151,2]]},"2875":{"position":[[462,2]]},"2933":{"position":[[527,2],[536,2]]},"3063":{"position":[[236,2],[678,2],[1219,2],[1223,2],[1257,2],[1261,2],[1327,2],[1657,2]]},"3078":{"position":[[71,2]]},"3131":{"position":[[327,2]]},"3156":{"position":[[33,2],[360,2]]},"3194":{"position":[[487,2]]},"3250":{"position":[[107,2]]},"3446":{"position":[[780,2],[838,2],[1034,2],[1055,2]]},"3464":{"position":[[161,2],[356,2]]},"3498":{"position":[[345,2]]},"3543":{"position":[[432,2]]},"3632":{"position":[[22,2],[133,2]]},"3672":{"position":[[332,2]]},"3678":{"position":[[35,2],[76,2],[109,2]]},"3686":{"position":[[458,2],[462,2],[499,2],[529,2],[533,2],[599,2]]},"3696":{"position":[[50,2],[176,2]]},"3700":{"position":[[75,2]]},"3704":{"position":[[195,2],[305,2],[507,2],[615,2],[820,2]]},"3706":{"position":[[228,2],[670,2],[1211,2],[1215,2],[1268,2],[1272,2],[1338,2],[1668,2]]},"3916":{"position":[[1406,2]]},"3924":{"position":[[3729,2],[3839,2],[4041,2],[4155,2],[4360,2]]},"3928":{"position":[[1342,2],[1400,2],[1596,2],[1617,2]]},"3936":{"position":[[1980,2],[2167,2]]},"3938":{"position":[[746,2],[768,2]]},"3940":{"position":[[1001,2],[1024,2]]},"3960":{"position":[[540,2]]},"3962":{"position":[[1632,2]]},"3964":{"position":[[131,2]]},"3966":{"position":[[1575,2]]},"3978":{"position":[[118,2]]},"3984":{"position":[[147,2],[496,2]]},"3990":{"position":[[172,2]]},"3996":{"position":[[338,2],[1293,2]]}}}],["地方",{"_index":1886,"t":{"263":{"position":[[16,2]]},"429":{"position":[[24,2]]},"431":{"position":[[45,2]]},"532":{"position":[[230,2]]},"585":{"position":[[496,2]]},"1389":{"position":[[49,2]]},"1547":{"position":[[22,2]]},"1705":{"position":[[21,2]]},"1777":{"position":[[196,2]]},"1817":{"position":[[76,2]]},"1933":{"position":[[275,2]]},"2175":{"position":[[179,2]]},"2684":{"position":[[309,2],[333,2]]},"2705":{"position":[[45,2]]},"2715":{"position":[[9,2]]},"2817":{"position":[[171,2]]},"3162":{"position":[[26,2]]},"3352":{"position":[[522,2]]},"3779":{"position":[[583,2]]},"3802":{"position":[[639,2]]},"3817":{"position":[[538,2]]}}}],["地理",{"_index":6388,"t":{"2517":{"position":[[37,2]]}}}],["地被",{"_index":8459,"t":{"3626":{"position":[[19,2]]}}}],["场",{"_index":1753,"t":{"239":{"position":[[95,1]]}}}],["场景",{"_index":909,"t":{"121":{"position":[[452,2]]},"182":{"position":[[196,2]]},"265":{"position":[[49,2]]},"633":{"position":[[32,2]]},"1020":{"position":[[35,2]]},"1082":{"position":[[16,2]]},"1214":{"position":[[120,2]]},"1379":{"position":[[20,2]]},"1389":{"position":[[261,2]]},"1823":{"position":[[10,2]]},"1909":{"position":[[274,2]]},"2311":{"position":[[86,2]]},"2326":{"position":[[284,2]]},"3096":{"position":[[60,2]]},"3138":{"position":[[6,2],[136,2]]},"3170":{"position":[[37,2]]},"3352":{"position":[[129,2]]},"3620":{"position":[[82,2]]},"3912":{"position":[[747,2]]}}}],["均",{"_index":4026,"t":{"1155":{"position":[[69,1]]},"1309":{"position":[[24,1]]},"1811":{"position":[[26,1]]},"2635":{"position":[[28,1]]},"2662":{"position":[[28,1]]}}}],["均匀",{"_index":7419,"t":{"3108":{"position":[[75,2]]}}}],["均衡",{"_index":6865,"t":{"2740":{"position":[[90,2]]}}}],["坏人",{"_index":7049,"t":{"2788":{"position":[[116,2],[188,2]]}}}],["块",{"_index":1748,"t":{"237":{"position":[[1329,1]]}}}],["坚持下去",{"_index":4709,"t":{"1511":{"position":[[1600,4],[2708,4],[3920,4]]}}}],["坤",{"_index":4686,"t":{"1511":{"position":[[1314,1]]}}}],["坦",{"_index":6680,"t":{"2559":{"position":[[2503,1],[2513,1]]}}}],["坦白说",{"_index":7968,"t":{"3352":{"position":[[435,3]]}}}],["垂直",{"_index":7385,"t":{"3088":{"position":[[189,2]]},"3090":{"position":[[0,2],[11,2],[16,2]]},"3096":{"position":[[64,2]]},"3098":{"position":[[12,2]]}}}],["型",{"_index":2264,"t":{"350":{"position":[[726,1]]},"504":{"position":[[68,1]]},"548":{"position":[[74,1],[232,1]]},"807":{"position":[[3,1]]},"810":{"position":[[250,1]]},"812":{"position":[[266,1]]},"814":{"position":[[248,1]]},"816":{"position":[[264,1]]},"911":{"position":[[197,1]]},"990":{"position":[[16,1],[53,1]]},"1026":{"position":[[5,1],[50,1]]},"1066":{"position":[[1657,1],[1706,1]]},"1103":{"position":[[177,1]]},"1111":{"position":[[268,1]]},"1113":{"position":[[266,1]]},"1115":{"position":[[269,1]]},"1117":{"position":[[2790,1]]},"1119":{"position":[[249,1]]},"1121":{"position":[[265,1]]},"1123":{"position":[[226,1]]},"1129":{"position":[[384,1],[1270,1]]},"1133":{"position":[[159,1],[179,1]]},"1151":{"position":[[10,1]]},"1412":{"position":[[1414,1]]},"1440":{"position":[[728,1],[735,1],[841,1]]},"1576":{"position":[[248,1]]},"1580":{"position":[[191,1],[367,1],[372,1]]},"1867":{"position":[[713,1]]},"2313":{"position":[[492,1]]},"2605":{"position":[[46,1]]},"2877":{"position":[[108,1],[273,1]]},"2905":{"position":[[101,1],[399,1]]},"3154":{"position":[[35,1]]},"3168":{"position":[[20,1]]},"3287":{"position":[[107,1],[391,1]]},"3420":{"position":[[284,1]]},"3506":{"position":[[78,1],[189,1]]},"3520":{"position":[[67,1]]},"3561":{"position":[[67,1]]},"3708":{"position":[[84,1]]},"3783":{"position":[[1376,1]]},"3842":{"position":[[1168,1],[1733,1],[2323,1],[2964,1]]},"3910":{"position":[[598,1],[788,1],[953,1]]},"3914":{"position":[[3290,1]]},"3916":{"position":[[1931,1]]},"3918":{"position":[[3222,1]]},"3930":{"position":[[1467,1]]},"3946":{"position":[[417,1]]},"3948":{"position":[[555,1]]},"3954":{"position":[[559,1],[759,1]]},"3972":{"position":[[507,1]]},"3980":{"position":[[467,1]]},"3982":{"position":[[486,1]]},"3994":{"position":[[1157,1],[1300,1],[1305,1],[1421,1]]}}}],["埃",{"_index":6497,"t":{"2559":{"position":[[643,1],[655,1],[662,1]]}}}],["埃及",{"_index":6439,"t":{"2559":{"position":[[107,2]]}}}],["城市",{"_index":3679,"t":{"877":{"position":[[226,2]]}}}],["域",{"_index":2145,"t":{"329":{"position":[[93,1]]},"340":{"position":[[550,1]]},"404":{"position":[[47,1],[57,1],[198,1],[219,1],[239,1]]},"406":{"position":[[22,1],[159,1],[224,1],[296,1],[371,1]]},"411":{"position":[[3,1]]},"413":{"position":[[147,1]]},"415":{"position":[[33,1],[85,1],[248,1],[300,1],[457,1]]},"421":{"position":[[16,1]]},"423":{"position":[[11,1],[253,1]]},"425":{"position":[[36,1],[64,1]]},"469":{"position":[[42,1],[47,1]]},"482":{"position":[[334,1],[347,1],[383,1],[389,1],[538,1],[602,1],[660,1],[715,1],[724,1],[774,1],[980,1]]},"2418":{"position":[[42,1],[47,1],[548,1],[586,1],[604,1],[661,1],[667,1],[837,1],[909,1],[975,1],[1046,1],[1062,1],[1122,1],[1352,1]]},"2868":{"position":[[114,1]]},"2881":{"position":[[23,1]]},"2989":{"position":[[1,1],[21,1]]},"2991":{"position":[[39,1],[91,1],[254,1],[306,1],[463,1]]},"2995":{"position":[[11,1]]},"3158":{"position":[[30,1]]},"3922":{"position":[[1347,1]]},"3924":{"position":[[308,1],[367,1],[1499,1]]},"3932":{"position":[[53,1],[382,1],[1526,1]]},"3934":{"position":[[1155,1]]},"3936":{"position":[[970,1]]},"3940":{"position":[[591,1]]},"3944":{"position":[[271,1]]},"3974":{"position":[[786,1]]},"3978":{"position":[[384,1]]},"3986":{"position":[[993,1],[1267,1]]},"3990":{"position":[[732,1]]},"3992":{"position":[[1967,1],[2836,1]]},"4006":{"position":[[768,1]]}}}],["域名",{"_index":2426,"t":{"404":{"position":[[19,2]]},"406":{"position":[[91,2],[227,2],[299,2]]},"413":{"position":[[21,2],[39,2],[86,2]]},"415":{"position":[[87,2]]},"2991":{"position":[[93,2]]},"4006":{"position":[[646,2]]}}}],["基",{"_index":5459,"t":{"1763":{"position":[[34,1],[44,1],[100,1]]}}}],["基于",{"_index":466,"t":{"85":{"position":[[37,2]]},"95":{"position":[[5,2]]},"199":{"position":[[48,2],[77,2],[161,2],[232,2],[276,2],[325,2],[366,2],[426,2],[447,2],[483,2],[521,2],[557,2],[594,2],[627,2]]},"423":{"position":[[85,2]]},"1483":{"position":[[680,2]]},"1805":{"position":[[11,2]]},"2241":{"position":[[9,2]]},"2341":{"position":[[58,2]]},"2599":{"position":[[11,2]]},"2910":{"position":[[318,2]]},"2951":{"position":[[605,2]]},"2965":{"position":[[0,2]]},"3148":{"position":[[161,2]]},"3150":{"position":[[6,2]]},"3354":{"position":[[0,2],[25,2]]},"3918":{"position":[[3714,2]]},"3932":{"position":[[1230,2]]},"3936":{"position":[[551,2]]},"3952":{"position":[[44,2]]}}}],["基元",{"_index":1031,"t":{"127":{"position":[[1733,2],[1738,2]]},"1234":{"position":[[120,2],[781,2]]},"1236":{"position":[[120,2]]},"1238":{"position":[[120,2]]},"1240":{"position":[[120,2]]},"1611":{"position":[[905,2]]},"1627":{"position":[[9,2],[252,2]]},"1909":{"position":[[862,2],[943,2]]},"3910":{"position":[[492,2]]},"3978":{"position":[[798,2]]},"3992":{"position":[[1747,2]]}}}],["基准",{"_index":1232,"t":{"179":{"position":[[0,2],[46,2],[89,2],[109,2]]},"184":{"position":[[86,2]]},"186":{"position":[[28,2],[61,2],[107,2],[116,2]]},"255":{"position":[[174,2]]},"3924":{"position":[[2180,2]]}}}],["基准线",{"_index":1242,"t":{"179":{"position":[[64,3]]}}}],["基本",{"_index":856,"t":{"121":{"position":[[39,2]]},"249":{"position":[[108,2],[122,2]]},"251":{"position":[[172,2]]},"404":{"position":[[114,2]]},"1389":{"position":[[201,2]]},"1576":{"position":[[305,2]]},"1578":{"position":[[88,2]]},"2326":{"position":[[33,2]]},"2868":{"position":[[87,2]]},"3321":{"position":[[196,2]]},"3352":{"position":[[7,2]]},"3498":{"position":[[58,2]]},"3543":{"position":[[58,2]]}}}],["基本上",{"_index":7951,"t":{"3352":{"position":[[131,3]]}}}],["基石",{"_index":2634,"t":{"469":{"position":[[75,2]]}}}],["基础",{"_index":1470,"t":{"199":{"position":[[193,2]]},"255":{"position":[[44,2]]},"404":{"position":[[166,2]]},"439":{"position":[[44,2]]},"1307":{"position":[[20,2],[42,2]]},"1511":{"position":[[3514,2]]},"1969":{"position":[[192,2],[220,2]]},"1983":{"position":[[104,2],[132,2]]},"2006":{"position":[[104,2],[132,2]]},"2272":{"position":[[52,2],[77,2]]},"2274":{"position":[[56,2],[85,2]]},"2281":{"position":[[44,2],[69,2]]},"2283":{"position":[[48,2]]},"2609":{"position":[[32,2]]},"2703":{"position":[[15,2]]},"3432":{"position":[[0,2]]},"3434":{"position":[[420,2]]},"3830":{"position":[[394,2],[462,2]]},"3912":{"position":[[834,2]]},"3994":{"position":[[266,2]]},"4006":{"position":[[63,2]]}}}],["基础设施",{"_index":7215,"t":{"2910":{"position":[[469,4]]}}}],["基类",{"_index":1055,"t":{"133":{"position":[[43,2]]},"988":{"position":[[352,2],[401,2],[434,2]]},"1041":{"position":[[820,2]]},"1311":{"position":[[389,2]]},"1360":{"position":[[49,2]]},"1364":{"position":[[478,2]]},"2813":{"position":[[65,2]]},"3154":{"position":[[36,2]]},"3750":{"position":[[36,2]]},"3830":{"position":[[128,2],[392,2],[460,2]]},"3914":{"position":[[3178,2]]},"3984":{"position":[[21,2]]},"4000":{"position":[[193,2]]}}}],["基线",{"_index":1306,"t":{"184":{"position":[[66,2]]}}}],["堆",{"_index":9125,"t":{"3914":{"position":[[1645,1],[2492,1]]}}}],["堆栈",{"_index":760,"t":{"112":{"position":[[1476,2],[1495,2]]},"1837":{"position":[[39,2]]},"1839":{"position":[[24,2]]},"1925":{"position":[[1338,2],[1357,2]]},"1933":{"position":[[551,2],[570,2]]},"3654":{"position":[[50,2]]}}}],["堆积",{"_index":6751,"t":{"2615":{"position":[[37,2]]}}}],["塑造",{"_index":1192,"t":{"166":{"position":[[46,2]]},"261":{"position":[[131,2]]},"3242":{"position":[[224,2]]},"3910":{"position":[[221,2]]},"3934":{"position":[[2390,2]]}}}],["塞",{"_index":6956,"t":{"2768":{"position":[[869,1]]}}}],["塞尔维亚",{"_index":6634,"t":{"2559":{"position":[[1991,4],[2025,4]]}}}],["塞尔维亚共和国",{"_index":6635,"t":{"2559":{"position":[[2006,7],[2037,7]]}}}],["填",{"_index":4504,"t":{"1497":{"position":[[71,1]]},"3345":{"position":[[233,1],[235,1]]},"3944":{"position":[[886,1],[888,1]]},"3964":{"position":[[177,1]]}}}],["填充",{"_index":5016,"t":{"1555":{"position":[[249,2],[465,2]]},"1557":{"position":[[7,2]]},"3779":{"position":[[1580,2],[1704,2]]},"3802":{"position":[[2337,2],[2475,2]]}}}],["填写",{"_index":4107,"t":{"1293":{"position":[[15,2]]},"2542":{"position":[[99,2]]}}}],["增",{"_index":3790,"t":{"933":{"position":[[392,1]]},"1145":{"position":[[527,1]]},"3122":{"position":[[7,1]]},"3124":{"position":[[25,1]]},"3213":{"position":[[56,1]]},"3254":{"position":[[269,1]]},"3275":{"position":[[189,1]]}}}],["增列",{"_index":7794,"t":{"3267":{"position":[[69,2],[479,2]]}}}],["增删",{"_index":3494,"t":{"739":{"position":[[79,2]]},"741":{"position":[[17,2]]},"3088":{"position":[[71,2]]},"3124":{"position":[[41,2]]},"3273":{"position":[[805,2]]}}}],["增加",{"_index":3910,"t":{"1050":{"position":[[34,2]]},"1071":{"position":[[91,2]]},"1291":{"position":[[1,2]]},"1374":{"position":[[134,2]]},"1424":{"position":[[1823,2]]},"1589":{"position":[[259,2]]},"2311":{"position":[[345,2]]},"2915":{"position":[[141,2]]},"2919":{"position":[[47,2]]},"3100":{"position":[[25,2]]},"3102":{"position":[[39,2]]},"3595":{"position":[[110,2]]},"3628":{"position":[[34,2]]},"3772":{"position":[[18,2]]},"3928":{"position":[[257,2]]},"3978":{"position":[[1755,2]]},"3980":{"position":[[622,2]]},"3988":{"position":[[57,2]]},"3992":{"position":[[3029,2],[3553,2],[3930,2],[3945,2]]}}}],["增多",{"_index":7229,"t":{"2915":{"position":[[115,2]]}}}],["增强",{"_index":8424,"t":{"3620":{"position":[[29,2]]}}}],["增量",{"_index":3319,"t":{"677":{"position":[[120,2]]},"704":{"position":[[120,2]]},"2326":{"position":[[177,2]]}}}],["增长",{"_index":1540,"t":{"206":{"position":[[162,2]]}}}],["增高",{"_index":9649,"t":{"3950":{"position":[[931,2]]}}}],["墨西哥",{"_index":6659,"t":{"2559":{"position":[[2280,3]]}}}],["声明",{"_index":1609,"t":{"218":{"position":[[302,2]]},"284":{"position":[[210,2],[391,2]]},"353":{"position":[[74,2]]},"659":{"position":[[4,2]]},"777":{"position":[[4,2]]},"791":{"position":[[4,2]]},"885":{"position":[[4,2]]},"1010":{"position":[[4,2]]},"1060":{"position":[[25,2]]},"1302":{"position":[[4,2]]},"1323":{"position":[[4,2]]},"1383":{"position":[[125,2]]},"1394":{"position":[[2,2]]},"1535":{"position":[[545,2]]},"1781":{"position":[[446,2]]},"1801":{"position":[[1431,2]]},"1947":{"position":[[55,2]]},"2077":{"position":[[2,2]]},"2186":{"position":[[2,2]]},"2188":{"position":[[2,2]]},"2843":{"position":[[187,2]]},"3086":{"position":[[2,2],[56,2]]},"3539":{"position":[[38,2],[47,2],[56,2]]},"3910":{"position":[[2473,2]]},"3960":{"position":[[120,2]]}}}],["声誉",{"_index":4533,"t":{"1509":{"position":[[74,2]]}}}],["壳",{"_index":4581,"t":{"1511":{"position":[[243,1]]}}}],["处",{"_index":1131,"t":{"148":{"position":[[548,1]]}}}],["处于",{"_index":2287,"t":{"359":{"position":[[126,2]]},"3284":{"position":[[93,2]]},"3416":{"position":[[114,2]]}}}],["处理",{"_index":1518,"t":{"204":{"position":[[84,2]]},"243":{"position":[[27,2]]},"329":{"position":[[89,2],[164,2]]},"336":{"position":[[57,2]]},"340":{"position":[[1240,2]]},"361":{"position":[[12,2]]},"363":{"position":[[41,2],[90,2]]},"378":{"position":[[114,2]]},"380":{"position":[[9,2]]},"382":{"position":[[23,2]]},"392":{"position":[[2,2]]},"528":{"position":[[200,2]]},"579":{"position":[[58,2]]},"581":{"position":[[27,2]]},"756":{"position":[[47,2]]},"1117":{"position":[[1095,2]]},"1194":{"position":[[20,2]]},"1200":{"position":[[243,2]]},"1399":{"position":[[46,2]]},"1401":{"position":[[27,2]]},"1600":{"position":[[3,2],[38,2]]},"1617":{"position":[[1195,2]]},"1627":{"position":[[381,2]]},"1641":{"position":[[52,2]]},"1647":{"position":[[423,2]]},"1663":{"position":[[49,2]]},"1697":{"position":[[79,2]]},"1699":{"position":[[103,2]]},"1707":{"position":[[49,2]]},"1741":{"position":[[1721,2],[2512,2]]},"1797":{"position":[[622,2]]},"1801":{"position":[[979,2],[2661,2]]},"1803":{"position":[[3149,2],[4633,2]]},"1834":{"position":[[1,2],[39,2],[51,2],[72,2]]},"1837":{"position":[[7,2],[20,2],[110,2]]},"1841":{"position":[[21,2]]},"1853":{"position":[[29,2]]},"1885":{"position":[[196,2]]},"1892":{"position":[[34,2]]},"1894":{"position":[[19,2],[24,2]]},"1901":{"position":[[308,2]]},"1913":{"position":[[902,2],[1195,2]]},"1917":{"position":[[16,2]]},"1933":{"position":[[281,2],[290,2],[625,2]]},"1951":{"position":[[470,2]]},"2061":{"position":[[50,2]]},"2313":{"position":[[156,2]]},"2363":{"position":[[205,2]]},"2379":{"position":[[372,2],[463,2]]},"2383":{"position":[[2,2]]},"2517":{"position":[[79,2],[146,2]]},"2564":{"position":[[14,2],[90,2],[140,2]]},"2629":{"position":[[80,2],[170,2]]},"2729":{"position":[[69,2]]},"2782":{"position":[[205,2]]},"2784":{"position":[[23,2]]},"2790":{"position":[[371,2]]},"2794":{"position":[[22,2]]},"2798":{"position":[[148,2]]},"2937":{"position":[[39,2],[1491,2]]},"3009":{"position":[[228,2]]},"3047":{"position":[[193,2]]},"3150":{"position":[[57,2],[124,2]]},"3254":{"position":[[1294,2]]},"3287":{"position":[[1768,2],[2070,2],[2386,2]]},"3416":{"position":[[314,2]]},"3432":{"position":[[4343,2],[4396,2],[4409,2]]},"3434":{"position":[[2717,2],[2768,2],[2781,2]]},"3500":{"position":[[371,2],[574,2],[813,2],[820,2]]},"3506":{"position":[[43,2]]},"3547":{"position":[[43,2]]},"3708":{"position":[[2729,2],[2945,2],[3899,2],[3910,2]]},"3710":{"position":[[19,2]]},"3714":{"position":[[27,2]]},"3716":{"position":[[79,2],[94,2],[108,2],[310,2],[407,2],[526,2],[671,2],[778,2]]},"3718":{"position":[[138,2]]},"3795":{"position":[[26,2]]},"3912":{"position":[[2656,2]]},"3914":{"position":[[1422,2],[2775,2],[3415,2]]},"3920":{"position":[[1815,2]]},"3930":{"position":[[444,2],[455,2],[729,2],[756,2],[1380,2]]},"3932":{"position":[[445,2],[516,2]]},"3938":{"position":[[82,2]]},"3942":{"position":[[460,2]]},"3950":{"position":[[519,2]]},"3952":{"position":[[687,2]]},"3954":{"position":[[466,2],[485,2]]},"3956":{"position":[[19,2],[2077,2],[2289,2],[3101,2]]},"3958":{"position":[[320,2]]},"3960":{"position":[[84,2]]},"3962":{"position":[[304,2],[1636,2]]},"3968":{"position":[[130,2],[365,2],[678,2]]},"3974":{"position":[[568,2]]},"3976":{"position":[[136,2]]},"3978":{"position":[[984,2],[1547,2]]},"3982":{"position":[[285,2]]},"3984":{"position":[[70,2]]},"3994":{"position":[[493,2]]},"3998":{"position":[[412,2],[805,2]]},"4006":{"position":[[220,2]]}}}],["处理器",{"_index":402,"t":{"46":{"position":[[93,3]]},"60":{"position":[[93,3]]},"70":{"position":[[93,3]]}}}],["处理程序",{"_index":1054,"t":{"133":{"position":[[37,4],[305,4]]},"146":{"position":[[284,4]]},"1539":{"position":[[577,4],[805,4],[1034,4],[1158,4],[1757,4]]},"1703":{"position":[[41,4],[58,4],[304,4]]},"1705":{"position":[[5,4],[51,4]]},"1883":{"position":[[56,4]]},"1901":{"position":[[629,4],[660,4]]},"2313":{"position":[[30,4],[151,4],[270,4]]},"2794":{"position":[[36,4]]},"3579":{"position":[[252,4]]},"3762":{"position":[[4,4]]},"3777":{"position":[[123,4],[169,4]]},"3787":{"position":[[2,4],[32,4]]},"3791":{"position":[[11,4]]},"3795":{"position":[[20,4]]},"3800":{"position":[[380,4],[387,4]]},"3815":{"position":[[53,4]]},"3828":{"position":[[41,4]]},"3914":{"position":[[1448,4]]},"3966":{"position":[[1377,4]]}}}],["备份",{"_index":7256,"t":{"2919":{"position":[[229,2]]},"3702":{"position":[[1138,2]]}}}],["备注",{"_index":1667,"t":{"229":{"position":[[57,2]]},"245":{"position":[[221,2]]},"593":{"position":[[0,2]]},"1582":{"position":[[0,2]]},"1841":{"position":[[27,2]]},"3630":{"position":[[0,2]]}}}],["备用",{"_index":8149,"t":{"3432":{"position":[[4536,2],[4563,2]]}}}],["复",{"_index":5186,"t":{"1655":{"position":[[224,1]]}}}],["复写",{"_index":5147,"t":{"1621":{"position":[[760,2],[811,2]]},"1631":{"position":[[534,2]]},"1655":{"position":[[24,2]]},"1661":{"position":[[866,2],[1216,2],[1315,2]]},"3023":{"position":[[863,2],[1213,2],[1312,2]]},"3938":{"position":[[293,2]]},"3954":{"position":[[285,2]]}}}],["复制",{"_index":1638,"t":{"220":{"position":[[887,2],[892,2]]},"306":{"position":[[65,2]]},"308":{"position":[[124,2]]},"310":{"position":[[122,2]]},"323":{"position":[[47,2],[135,2]]},"427":{"position":[[44,2],[56,2]]},"433":{"position":[[100,2],[112,2]]},"445":{"position":[[822,2],[827,2]]},"498":{"position":[[76,2],[90,2]]},"893":{"position":[[76,2],[90,2]]},"1071":{"position":[[5,2]]},"1313":{"position":[[313,2],[327,2]]},"1488":{"position":[[929,2]]},"1495":{"position":[[873,2]]},"1919":{"position":[[392,2]]},"2688":{"position":[[102,2]]},"2751":{"position":[[86,2]]},"2887":{"position":[[37,2]]},"3696":{"position":[[34,2]]}}}],["复制到",{"_index":2580,"t":{"445":{"position":[[809,3]]}}}],["复杂",{"_index":576,"t":{"95":{"position":[[103,2]]},"127":{"position":[[914,2]]},"502":{"position":[[51,2]]},"587":{"position":[[1644,2],[2093,2],[2256,2]]},"602":{"position":[[297,2]]},"846":{"position":[[38,2]]},"887":{"position":[[182,2]]},"943":{"position":[[63,2]]},"1133":{"position":[[56,2]]},"1135":{"position":[[69,2]]},"1200":{"position":[[77,2],[124,2]]},"1566":{"position":[[502,2]]},"1578":{"position":[[175,2]]},"2385":{"position":[[43,2]]},"2725":{"position":[[115,2],[152,2],[2597,2]]},"2727":{"position":[[812,2]]},"3039":{"position":[[97,2]]},"3041":{"position":[[125,2]]},"3096":{"position":[[143,2]]},"3108":{"position":[[130,2]]},"3140":{"position":[[9,2]]},"3430":{"position":[[1901,2]]},"3595":{"position":[[408,2]]},"3752":{"position":[[91,2]]},"3928":{"position":[[133,2]]},"3992":{"position":[[3849,2],[4020,2]]}}}],["复杂度",{"_index":7402,"t":{"3096":{"position":[[129,3]]}}}],["复用",{"_index":9148,"t":{"3914":{"position":[[3342,2]]}}}],["外",{"_index":2150,"t":{"331":{"position":[[25,1]]},"461":{"position":[[27,1]]},"617":{"position":[[1837,1]]},"851":{"position":[[1042,1],[1517,1]]},"1149":{"position":[[17,1]]},"1576":{"position":[[292,1]]},"1639":{"position":[[23,1]]},"2307":{"position":[[84,1],[125,1]]},"2321":{"position":[[16,1],[84,1]]},"3706":{"position":[[6,1]]},"3954":{"position":[[67,1]]}}}],["外部",{"_index":1750,"t":{"239":{"position":[[24,2]]},"1385":{"position":[[50,2]]},"1389":{"position":[[89,2]]},"1420":{"position":[[923,2],[939,2],[952,2],[1002,2]]},"1839":{"position":[[133,2]]},"2981":{"position":[[247,2]]},"3013":{"position":[[19,2]]},"3389":{"position":[[25,2]]},"3500":{"position":[[818,2]]},"3779":{"position":[[113,2]]},"3802":{"position":[[112,2]]},"3817":{"position":[[119,2]]},"3950":{"position":[[887,2]]},"3998":{"position":[[548,2]]}}}],["外面",{"_index":10120,"t":{"3986":{"position":[[1188,2]]}}}],["多",{"_index":1157,"t":{"154":{"position":[[27,1],[33,1]]},"156":{"position":[[11,1]]},"194":{"position":[[27,1],[33,1]]},"199":{"position":[[3,1]]},"204":{"position":[[473,1],[479,1]]},"206":{"position":[[172,1]]},"237":{"position":[[1361,1],[1367,1]]},"257":{"position":[[27,1],[33,1]]},"300":{"position":[[20,1]]},"325":{"position":[[35,1],[90,1]]},"340":{"position":[[1215,1]]},"359":{"position":[[142,1]]},"401":{"position":[[383,1]]},"425":{"position":[[27,1],[33,1]]},"435":{"position":[[1158,1]]},"441":{"position":[[61,1]]},"465":{"position":[[27,1],[33,1]]},"502":{"position":[[65,1]]},"504":{"position":[[61,1],[181,1],[308,1]]},"526":{"position":[[50,1]]},"532":{"position":[[178,1]]},"534":{"position":[[739,1]]},"536":{"position":[[27,1],[33,1]]},"544":{"position":[[145,1]]},"550":{"position":[[628,1]]},"562":{"position":[[27,1],[33,1]]},"585":{"position":[[427,1]]},"631":{"position":[[12,1]]},"639":{"position":[[448,1]]},"643":{"position":[[13,1]]},"679":{"position":[[118,1]]},"692":{"position":[[23,1]]},"698":{"position":[[928,1]]},"736":{"position":[[27,1],[33,1]]},"775":{"position":[[27,1],[33,1]]},"836":{"position":[[353,1]]},"851":{"position":[[624,1],[712,1],[714,1]]},"855":{"position":[[84,1],[102,1]]},"857":{"position":[[78,1],[80,1],[96,1],[98,1]]},"903":{"position":[[25,1],[77,1]]},"911":{"position":[[215,1]]},"947":{"position":[[452,1]]},"1000":{"position":[[91,1]]},"1002":{"position":[[91,1]]},"1004":{"position":[[99,1]]},"1006":{"position":[[99,1]]},"1008":{"position":[[97,1]]},"1010":{"position":[[180,1]]},"1012":{"position":[[81,1]]},"1014":{"position":[[90,1]]},"1016":{"position":[[15,1]]},"1020":{"position":[[12,1]]},"1037":{"position":[[312,1]]},"1048":{"position":[[12,1]]},"1052":{"position":[[132,1]]},"1056":{"position":[[386,1]]},"1149":{"position":[[11,1],[13,1],[15,1]]},"1153":{"position":[[27,1],[33,1]]},"1157":{"position":[[13,1]]},"1202":{"position":[[16,1],[29,1]]},"1234":{"position":[[499,1]]},"1236":{"position":[[508,1]]},"1238":{"position":[[606,1]]},"1240":{"position":[[669,1]]},"1311":{"position":[[525,1]]},"1317":{"position":[[525,1],[558,1]]},"1389":{"position":[[268,1]]},"1403":{"position":[[65,1],[71,1]]},"1412":{"position":[[54,1]]},"1418":{"position":[[294,1]]},"1430":{"position":[[85,1],[87,1]]},"1511":{"position":[[171,1],[1517,1]]},"1513":{"position":[[45,1]]},"1530":{"position":[[108,1]]},"1547":{"position":[[427,1]]},"1549":{"position":[[498,1]]},"1561":{"position":[[26,1]]},"1576":{"position":[[340,1]]},"1578":{"position":[[112,1]]},"1619":{"position":[[30,1],[32,1]]},"1641":{"position":[[462,1]]},"1685":{"position":[[167,1],[184,1]]},"1699":{"position":[[154,1]]},"1741":{"position":[[1682,1],[2469,1]]},"1761":{"position":[[250,1],[354,1]]},"1775":{"position":[[3810,1],[3841,1]]},"1781":{"position":[[467,1]]},"1801":{"position":[[59,1],[976,1]]},"1803":{"position":[[3146,1]]},"1809":{"position":[[314,1]]},"1879":{"position":[[12,1]]},"1887":{"position":[[262,1]]},"1919":{"position":[[641,1]]},"1931":{"position":[[19,1]]},"1939":{"position":[[17,1]]},"1965":{"position":[[4,1]]},"2175":{"position":[[292,1]]},"2315":{"position":[[45,1]]},"2321":{"position":[[93,1]]},"2331":{"position":[[48,1],[569,1]]},"2333":{"position":[[140,1]]},"2354":{"position":[[84,1]]},"2373":{"position":[[201,1],[228,1]]},"2517":{"position":[[121,1],[143,1]]},"2519":{"position":[[3,1],[146,1],[293,1]]},"2526":{"position":[[21,1],[56,1],[88,1],[173,1]]},"2530":{"position":[[5,1],[89,1]]},"2534":{"position":[[46,1]]},"2536":{"position":[[163,1],[228,1]]},"2553":{"position":[[21,1]]},"2561":{"position":[[27,1],[33,1],[35,1]]},"2564":{"position":[[177,1],[200,1]]},"2573":{"position":[[195,1]]},"2593":{"position":[[4,1]]},"2609":{"position":[[42,1]]},"2611":{"position":[[27,1],[33,1]]},"2684":{"position":[[349,1]]},"2698":{"position":[[27,1],[33,1]]},"2717":{"position":[[436,1],[442,1]]},"2737":{"position":[[27,1],[33,1]]},"2740":{"position":[[132,1]]},"2764":{"position":[[112,1]]},"2768":{"position":[[1589,1]]},"2770":{"position":[[277,1]]},"2856":{"position":[[1957,1]]},"2875":{"position":[[429,1]]},"2879":{"position":[[109,1]]},"2889":{"position":[[32,1]]},"2897":{"position":[[684,1]]},"2912":{"position":[[0,1],[137,1],[189,1]]},"2917":{"position":[[150,1]]},"2919":{"position":[[59,1],[173,1]]},"2921":{"position":[[15,1],[47,1],[87,1]]},"2925":{"position":[[439,1]]},"2933":{"position":[[3,1]]},"2941":{"position":[[439,1]]},"2943":{"position":[[438,1]]},"2949":{"position":[[3,1]]},"2951":{"position":[[3,1]]},"2955":{"position":[[439,1]]},"2963":{"position":[[3,1]]},"2967":{"position":[[46,1],[59,1]]},"2969":{"position":[[83,1],[99,1]]},"3029":{"position":[[0,1]]},"3031":{"position":[[21,1]]},"3082":{"position":[[325,1]]},"3088":{"position":[[48,1]]},"3106":{"position":[[20,1]]},"3116":{"position":[[45,1]]},"3120":{"position":[[3,1]]},"3126":{"position":[[532,1],[538,1]]},"3136":{"position":[[54,1]]},"3150":{"position":[[183,1]]},"3158":{"position":[[20,1]]},"3189":{"position":[[422,1]]},"3205":{"position":[[27,1],[33,1]]},"3211":{"position":[[51,1]]},"3215":{"position":[[868,1]]},"3224":{"position":[[1711,1],[1776,1]]},"3240":{"position":[[27,1],[33,1]]},"3242":{"position":[[127,1]]},"3254":{"position":[[287,1],[585,1],[960,1],[1177,1],[1187,1],[1228,1]]},"3265":{"position":[[141,1]]},"3267":{"position":[[658,1]]},"3269":{"position":[[554,1]]},"3271":{"position":[[239,1]]},"3273":{"position":[[981,1]]},"3287":{"position":[[345,1]]},"3298":{"position":[[27,1],[33,1]]},"3301":{"position":[[19,1]]},"3319":{"position":[[37,1],[42,1],[47,1],[52,1]]},"3323":{"position":[[542,1],[573,1]]},"3333":{"position":[[27,1],[33,1]]},"3365":{"position":[[5,1]]},"3409":{"position":[[27,1],[33,1]]},"3432":{"position":[[1000,1],[1173,1]]},"3434":{"position":[[1020,1],[1333,1]]},"3448":{"position":[[889,1]]},"3458":{"position":[[563,1]]},"3472":{"position":[[27,1],[33,1]]},"3506":{"position":[[307,1],[648,1]]},"3510":{"position":[[101,1]]},"3547":{"position":[[818,1]]},"3551":{"position":[[409,1]]},"3589":{"position":[[561,1]]},"3605":{"position":[[27,1],[33,1]]},"3618":{"position":[[38,1]]},"3626":{"position":[[249,1]]},"3638":{"position":[[0,1],[60,1]]},"3664":{"position":[[249,1]]},"3678":{"position":[[55,1]]},"3694":{"position":[[88,1],[144,1]]},"3806":{"position":[[1345,1]]},"3910":{"position":[[124,1]]},"3912":{"position":[[2456,1]]},"3914":{"position":[[1296,1]]},"3916":{"position":[[7690,1]]},"3918":{"position":[[3020,1],[3029,1]]},"3920":{"position":[[431,1],[626,1],[757,1],[1912,1],[1973,1],[2029,1]]},"3922":{"position":[[1913,1]]},"3924":{"position":[[2336,1]]},"3926":{"position":[[257,1]]},"3928":{"position":[[117,1],[853,1]]},"3930":{"position":[[427,1],[1353,1],[1375,1],[1499,1]]},"3932":{"position":[[1893,1]]},"3934":{"position":[[2232,1],[2520,1]]},"3936":{"position":[[561,1]]},"3938":{"position":[[128,1],[715,1],[1188,1],[1252,1],[1308,1]]},"3942":{"position":[[516,1]]},"3950":{"position":[[239,1]]},"3956":{"position":[[114,1],[3148,1]]},"3958":{"position":[[243,1]]},"3962":{"position":[[1879,1]]},"3964":{"position":[[110,1],[353,1]]},"3966":{"position":[[31,1],[684,1],[1277,1],[1410,1]]},"3978":{"position":[[386,1],[742,1],[841,1]]},"3980":{"position":[[320,1],[369,1],[586,1]]},"3982":{"position":[[633,1]]},"3984":{"position":[[267,1]]},"3986":{"position":[[81,1],[798,1],[812,1],[1007,1],[1105,1],[1162,1],[1515,1],[1641,1]]},"3988":{"position":[[355,1]]},"3990":{"position":[[764,1]]},"3992":{"position":[[7,1],[1937,1],[2203,1],[2337,1],[2648,1],[3057,1],[3061,1],[3443,1],[3737,1]]},"3994":{"position":[[1659,1],[1661,1]]},"3996":{"position":[[496,1],[533,1],[1530,1]]},"3998":{"position":[[687,1]]},"4002":{"position":[[398,1]]},"4004":{"position":[[439,1],[584,1]]},"4006":{"position":[[392,1],[763,1]]}}}],["多个",{"_index":116,"t":{"9":{"position":[[72,2]]},"227":{"position":[[42,2]]},"237":{"position":[[1299,2]]},"239":{"position":[[7,2],[165,2]]},"245":{"position":[[192,2]]},"325":{"position":[[53,2]]},"338":{"position":[[1232,2]]},"427":{"position":[[83,2]]},"431":{"position":[[43,2]]},"447":{"position":[[39,2]]},"504":{"position":[[233,2]]},"506":{"position":[[217,2]]},"510":{"position":[[498,2]]},"514":{"position":[[469,2],[475,2]]},"516":{"position":[[757,2]]},"524":{"position":[[494,2]]},"552":{"position":[[353,2],[409,2],[465,2]]},"606":{"position":[[513,2]]},"615":{"position":[[967,2],[1107,2]]},"698":{"position":[[19,2],[229,2],[967,2]]},"706":{"position":[[231,2]]},"767":{"position":[[579,2]]},"885":{"position":[[210,2]]},"887":{"position":[[245,2]]},"911":{"position":[[80,2]]},"941":{"position":[[85,2],[135,2],[211,2]]},"943":{"position":[[11,2]]},"945":{"position":[[110,2]]},"949":{"position":[[12,2]]},"954":{"position":[[353,2]]},"960":{"position":[[145,2]]},"1037":{"position":[[336,2]]},"1046":{"position":[[25,2]]},"1117":{"position":[[28,2],[1097,2]]},"1133":{"position":[[90,2]]},"1151":{"position":[[16,2]]},"1225":{"position":[[6,2]]},"1317":{"position":[[422,2],[428,2]]},"1319":{"position":[[232,2]]},"1412":{"position":[[29,2],[123,2]]},"1416":{"position":[[140,2],[355,2]]},"1420":{"position":[[1031,2]]},"1440":{"position":[[838,2]]},"1520":{"position":[[238,2]]},"1566":{"position":[[326,2]]},"1580":{"position":[[315,2]]},"1592":{"position":[[273,2]]},"1594":{"position":[[351,2]]},"1611":{"position":[[834,2]]},"1647":{"position":[[31,2]]},"1657":{"position":[[61,2]]},"1795":{"position":[[469,2]]},"1819":{"position":[[858,2],[924,2]]},"1865":{"position":[[455,2]]},"1871":{"position":[[107,2]]},"1903":{"position":[[451,2]]},"1955":{"position":[[7,2]]},"2175":{"position":[[198,2]]},"2292":{"position":[[72,2]]},"2569":{"position":[[136,2]]},"2684":{"position":[[331,2]]},"2705":{"position":[[43,2]]},"2715":{"position":[[7,2]]},"2815":{"position":[[20,2]]},"2875":{"position":[[465,2]]},"2912":{"position":[[113,2]]},"2917":{"position":[[9,2],[92,2]]},"3092":{"position":[[36,2],[159,2]]},"3094":{"position":[[5,2],[13,2]]},"3126":{"position":[[584,2]]},"3142":{"position":[[323,2]]},"3215":{"position":[[180,2]]},"3273":{"position":[[764,2]]},"3375":{"position":[[30,2]]},"3389":{"position":[[652,2]]},"3393":{"position":[[109,2]]},"3432":{"position":[[1772,2]]},"3434":{"position":[[107,2]]},"3478":{"position":[[12,2]]},"3522":{"position":[[331,2],[673,2],[1431,2]]},"3539":{"position":[[116,2]]},"3563":{"position":[[387,2],[1087,2],[1232,2]]},"3573":{"position":[[13,2],[26,2]]},"3638":{"position":[[24,2]]},"3690":{"position":[[63,2]]},"3746":{"position":[[254,2]]},"3774":{"position":[[271,2]]},"3779":{"position":[[1702,2]]},"3781":{"position":[[268,2],[304,2],[346,2],[557,2],[648,2]]},"3783":{"position":[[28,2],[1231,2]]},"3802":{"position":[[2473,2]]},"3806":{"position":[[1485,2]]},"3808":{"position":[[2929,2]]},"3810":{"position":[[248,2],[299,2],[356,2],[393,2],[426,2]]},"3819":{"position":[[13,2],[457,2],[736,2],[1081,2]]},"3914":{"position":[[2436,2]]},"3918":{"position":[[1717,2],[1862,2],[2209,2]]},"3920":{"position":[[1719,2]]},"3938":{"position":[[35,2],[867,2]]},"3958":{"position":[[278,2]]},"3962":{"position":[[4,2],[1145,2],[1778,2]]},"3966":{"position":[[1703,2]]},"3972":{"position":[[625,2]]},"3986":{"position":[[1067,2]]},"3992":{"position":[[3396,2]]},"3994":{"position":[[1654,2],[1707,2]]},"3996":{"position":[[1005,2]]},"3998":{"position":[[636,2]]},"4000":{"position":[[883,2]]}}}],["多余",{"_index":6033,"t":{"2186":{"position":[[39,2]]},"2188":{"position":[[39,2]]}}}],["多变",{"_index":575,"t":{"95":{"position":[[101,2]]}}}],["多处",{"_index":4209,"t":{"1389":{"position":[[47,2]]}}}],["多套",{"_index":8598,"t":{"3716":{"position":[[89,2]]},"3918":{"position":[[916,2]]}}}],["多少",{"_index":5414,"t":{"1753":{"position":[[175,2]]},"1755":{"position":[[758,2],[963,2],[1198,2]]},"1801":{"position":[[981,2]]},"1803":{"position":[[3151,2]]},"2393":{"position":[[59,2]]},"2910":{"position":[[268,2]]}}}],["多层",{"_index":5910,"t":{"1969":{"position":[[126,2]]},"1983":{"position":[[38,2]]},"2006":{"position":[[38,2]]},"2772":{"position":[[38,2]]},"2774":{"position":[[11,2]]},"2860":{"position":[[71,2]]},"3131":{"position":[[19,2]]},"3315":{"position":[[36,2]]}}}],["多态",{"_index":9329,"t":{"3924":{"position":[[566,2]]}}}],["多指",{"_index":2946,"t":{"565":{"position":[[78,2]]}}}],["多播",{"_index":5315,"t":{"1699":{"position":[[149,2]]}}}],["多数",{"_index":6143,"t":{"2326":{"position":[[76,2]]},"2770":{"position":[[267,2]]}}}],["多方",{"_index":5716,"t":{"1839":{"position":[[64,2]]}}}],["多条",{"_index":5324,"t":{"1703":{"position":[[295,2]]}}}],["多样性",{"_index":8395,"t":{"3595":{"position":[[93,3]]}}}],["多次",{"_index":4094,"t":{"1277":{"position":[[119,2]]},"1566":{"position":[[664,2]]},"1819":{"position":[[409,2]]},"2175":{"position":[[190,2]]},"2933":{"position":[[557,2]]},"2965":{"position":[[42,2],[215,2]]},"3104":{"position":[[91,2]]},"3510":{"position":[[192,2]]},"3512":{"position":[[127,2]]},"3514":{"position":[[101,2]]},"3516":{"position":[[102,2]]},"3518":{"position":[[109,2]]},"3551":{"position":[[633,2]]},"3553":{"position":[[479,2]]},"3555":{"position":[[536,2]]},"3557":{"position":[[548,2]]},"3559":{"position":[[587,2]]},"3640":{"position":[[440,2],[445,2]]},"3916":{"position":[[2761,2]]},"3922":{"position":[[1304,2]]},"3932":{"position":[[1287,2]]},"3940":{"position":[[623,2]]},"3962":{"position":[[1812,2]]},"3972":{"position":[[641,2]]},"3988":{"position":[[261,2]]},"3992":{"position":[[1718,2],[2941,2]]}}}],["多此一举",{"_index":1532,"t":{"206":{"position":[[79,4]]},"3488":{"position":[[26,4]]}}}],["多用户",{"_index":7220,"t":{"2912":{"position":[[38,3],[48,3],[152,3],[205,3]]}}}],["多种",{"_index":2256,"t":{"350":{"position":[[10,2]]},"369":{"position":[[99,2]]},"439":{"position":[[25,2]]},"512":{"position":[[11,2]]},"619":{"position":[[9,2]]},"1035":{"position":[[38,2]]},"1107":{"position":[[13,2]]},"1313":{"position":[[11,2]]},"1580":{"position":[[439,2]]},"1629":{"position":[[12,2]]},"1763":{"position":[[11,2]]},"1795":{"position":[[1281,2]]},"1905":{"position":[[16,2]]},"2233":{"position":[[25,2]]},"2343":{"position":[[288,2]]},"2354":{"position":[[18,2]]},"2575":{"position":[[7,2]]},"2625":{"position":[[12,2]]},"2703":{"position":[[40,2]]},"2713":{"position":[[16,2]]},"2717":{"position":[[18,2]]},"2733":{"position":[[11,2]]},"3315":{"position":[[12,2]]},"3744":{"position":[[262,2]]},"3766":{"position":[[10,2]]},"3779":{"position":[[171,2]]},"3785":{"position":[[27,2]]},"3802":{"position":[[168,2]]},"3812":{"position":[[29,2]]},"3817":{"position":[[177,2]]},"3821":{"position":[[33,2]]},"3936":{"position":[[308,2]]}}}],["多种语言",{"_index":8473,"t":{"3626":{"position":[[354,4]]}}}],["多端",{"_index":8407,"t":{"3608":{"position":[[8,2]]}}}],["多米尼加共和国",{"_index":6649,"t":{"2559":{"position":[[2196,7]]}}}],["多级",{"_index":8429,"t":{"3620":{"position":[[95,2]]}}}],["多线程",{"_index":4061,"t":{"1214":{"position":[[104,3]]},"1383":{"position":[[46,3],[226,3]]},"1432":{"position":[[99,3],[183,3]]},"2239":{"position":[[153,3]]},"3779":{"position":[[153,3]]},"3802":{"position":[[150,3]]},"3817":{"position":[[159,3]]},"3914":{"position":[[1639,3]]},"3922":{"position":[[1417,3]]},"3976":{"position":[[405,3]]}}}],["多维度",{"_index":5776,"t":{"1896":{"position":[[31,3]]}}}],["多行",{"_index":5020,"t":{"1555":{"position":[[559,2]]},"1913":{"position":[[1452,2]]},"1919":{"position":[[905,2]]},"1925":{"position":[[1630,2]]},"1927":{"position":[[953,2]]},"1933":{"position":[[1073,2]]},"1935":{"position":[[574,2]]},"1941":{"position":[[1318,2]]},"1943":{"position":[[518,2]]}}}],["多路",{"_index":5138,"t":{"1619":{"position":[[34,2]]}}}],["多重",{"_index":7217,"t":{"2912":{"position":[[7,2]]},"3992":{"position":[[2387,2]]},"4000":{"position":[[200,2]]}}}],["多长时间",{"_index":6290,"t":{"2404":{"position":[[119,4]]}}}],["多项",{"_index":1757,"t":{"239":{"position":[[118,2]]},"3620":{"position":[[343,2]]}}}],["夜里",{"_index":9412,"t":{"3926":{"position":[[461,2]]}}}],["大",{"_index":1572,"t":{"212":{"position":[[107,1]]},"300":{"position":[[49,1],[59,1]]},"319":{"position":[[614,1]]},"373":{"position":[[141,1]]},"581":{"position":[[50,1]]},"615":{"position":[[419,1]]},"756":{"position":[[41,1]]},"1309":{"position":[[122,1]]},"1416":{"position":[[401,1]]},"1422":{"position":[[79,1]]},"1511":{"position":[[149,1],[2960,1]]},"1651":{"position":[[40,1]]},"1657":{"position":[[163,1]]},"1761":{"position":[[355,1]]},"1961":{"position":[[240,1]]},"2768":{"position":[[34,1]]},"2856":{"position":[[26,1]]},"3063":{"position":[[1519,1]]},"3088":{"position":[[61,1],[83,1]]},"3092":{"position":[[30,1]]},"3209":{"position":[[120,1]]},"3352":{"position":[[475,1]]},"3414":{"position":[[237,1]]},"3416":{"position":[[166,1]]},"3476":{"position":[[4,1]]},"3640":{"position":[[429,1]]},"3706":{"position":[[1530,1]]},"3924":{"position":[[1289,1]]},"3926":{"position":[[241,1],[288,1]]}}}],["大一统",{"_index":2418,"t":{"401":{"position":[[182,3]]}}}],["大于",{"_index":980,"t":{"127":{"position":[[921,2]]},"587":{"position":[[697,2]]},"1277":{"position":[[259,2],[288,2]]},"2326":{"position":[[155,2]]},"3039":{"position":[[104,2]]},"3041":{"position":[[132,2]]},"3632":{"position":[[217,2]]},"3800":{"position":[[90,2]]}}}],["大佬",{"_index":4677,"t":{"1511":{"position":[[1222,2],[1718,2],[2470,2],[2606,2],[2823,2],[3851,2]]}}}],["大全",{"_index":3208,"t":{"615":{"position":[[662,2]]}}}],["大写",{"_index":3159,"t":{"606":{"position":[[346,2]]},"685":{"position":[[517,2]]},"1377":{"position":[[265,2]]},"1631":{"position":[[663,2],[665,2]]},"1635":{"position":[[206,2]]},"1677":{"position":[[157,2]]},"2377":{"position":[[19,2]]},"3936":{"position":[[316,2]]},"3964":{"position":[[243,2]]},"3986":{"position":[[376,2]]},"3994":{"position":[[1030,2]]}}}],["大势所趋",{"_index":4770,"t":{"1511":{"position":[[2317,4]]}}}],["大型",{"_index":2127,"t":{"325":{"position":[[3,2]]},"338":{"position":[[3,2]]},"1103":{"position":[[32,2]]},"2939":{"position":[[5,2]]}}}],["大型项目",{"_index":7077,"t":{"2809":{"position":[[70,4]]}}}],["大多",{"_index":1980,"t":{"300":{"position":[[227,2]]},"445":{"position":[[54,2]]}}}],["大多数",{"_index":2716,"t":{"486":{"position":[[2,3]]},"1048":{"position":[[0,3]]},"1418":{"position":[[24,3]]},"1761":{"position":[[330,3]]}}}],["大大",{"_index":2163,"t":{"336":{"position":[[323,2]]},"585":{"position":[[601,2]]},"1117":{"position":[[9,2]]},"1511":{"position":[[1270,2]]},"1761":{"position":[[456,2]]}}}],["大大减少",{"_index":9830,"t":{"3966":{"position":[[1140,4]]}}}],["大大提高",{"_index":3018,"t":{"581":{"position":[[40,4]]},"1103":{"position":[[227,4]]},"1221":{"position":[[44,4]]},"2404":{"position":[[58,4]]},"3301":{"position":[[34,4]]},"3930":{"position":[[734,4]]},"4000":{"position":[[670,4]]}}}],["大大的",{"_index":101,"t":{"5":{"position":[[138,3]]},"7":{"position":[[134,3]]},"2290":{"position":[[134,3]]},"3740":{"position":[[456,3]]}}}],["大家",{"_index":167,"t":{"11":{"position":[[707,2]]},"106":{"position":[[21,2]]},"728":{"position":[[11,2]]},"988":{"position":[[25,2]]},"1020":{"position":[[27,2]]},"1052":{"position":[[124,2]]},"1511":{"position":[[2072,2]]},"1532":{"position":[[61,2]]},"1537":{"position":[[56,2]]},"1545":{"position":[[68,2]]},"2294":{"position":[[736,2]]},"2768":{"position":[[90,2]]},"2967":{"position":[[34,2]]},"3152":{"position":[[62,2]]},"3315":{"position":[[30,2]]},"3331":{"position":[[28,2]]},"3608":{"position":[[36,2],[112,2]]},"3626":{"position":[[191,2]]},"3928":{"position":[[222,2]]}}}],["大小",{"_index":1681,"t":{"233":{"position":[[15,2]]},"1374":{"position":[[66,2],[138,2]]},"1687":{"position":[[96,2]]},"1689":{"position":[[708,2]]},"1741":{"position":[[2003,2]]},"1747":{"position":[[56,2],[67,2],[80,2]]},"1751":{"position":[[8,2],[24,2]]},"1803":{"position":[[5482,2]]},"3110":{"position":[[83,2]]},"3432":{"position":[[564,2]]},"3938":{"position":[[754,2],[759,2]]},"3958":{"position":[[391,2]]},"3960":{"position":[[661,2]]}}}],["大小写",{"_index":1943,"t":{"288":{"position":[[272,3]]},"445":{"position":[[727,3]]},"615":{"position":[[504,3],[583,3]]},"1200":{"position":[[220,3],[238,3]]},"1234":{"position":[[941,3]]},"2352":{"position":[[168,3]]},"3492":{"position":[[312,3]]},"3537":{"position":[[214,3]]},"3936":{"position":[[865,3]]},"3986":{"position":[[872,3]]},"3992":{"position":[[1920,3]]},"3996":{"position":[[582,3]]},"4000":{"position":[[1071,3]]},"4002":{"position":[[318,3]]},"4006":{"position":[[274,3]]}}}],["大概",{"_index":4492,"t":{"1495":{"position":[[1215,2]]}}}],["大漠",{"_index":4801,"t":{"1511":{"position":[[2667,2]]}}}],["大统",{"_index":9430,"t":{"3926":{"position":[[683,2]]}}}],["大部分",{"_index":908,"t":{"121":{"position":[[449,3]]},"338":{"position":[[1131,3]]},"1234":{"position":[[931,3]]},"1901":{"position":[[137,3]]},"2742":{"position":[[40,3]]},"3080":{"position":[[126,3]]},"3136":{"position":[[108,3]]},"3352":{"position":[[26,3]]}}}],["大量",{"_index":2192,"t":{"338":{"position":[[1166,2]]},"500":{"position":[[37,2]]},"587":{"position":[[2249,2]]},"1580":{"position":[[120,2]]},"1761":{"position":[[259,2]]},"1837":{"position":[[44,2]]},"3414":{"position":[[246,2],[282,2]]},"3740":{"position":[[10,2]]},"3958":{"position":[[383,2]]},"4002":{"position":[[238,2]]}}}],["大革命",{"_index":9354,"t":{"3924":{"position":[[2109,3],[2566,3]]}}}],["天",{"_index":494,"t":{"85":{"position":[[179,1]]},"472":{"position":[[9,1]]},"474":{"position":[[9,1]]},"476":{"position":[[11,1]]},"478":{"position":[[12,1]]},"482":{"position":[[144,1],[374,1],[404,1],[772,1],[804,1]]},"484":{"position":[[123,1],[171,1],[224,1],[285,1]]},"1511":{"position":[[561,1]]},"2420":{"position":[[922,1]]},"3908":{"position":[[331,1]]}}}],["天下",{"_index":4708,"t":{"1511":{"position":[[1587,2]]}}}],["天差地别",{"_index":5442,"t":{"1761":{"position":[[217,4]]}}}],["天数",{"_index":6302,"t":{"2418":{"position":[[376,2]]}}}],["天方夜谭",{"_index":458,"t":{"83":{"position":[[6,4]]},"164":{"position":[[6,4]]}}}],["天然",{"_index":7428,"t":{"3110":{"position":[[88,2]]}}}],["天道酬勤",{"_index":4627,"t":{"1511":{"position":[[676,4]]}}}],["太",{"_index":3039,"t":{"585":{"position":[[426,1]]},"617":{"position":[[1719,1],[2669,1]]},"1379":{"position":[[11,1]]},"1511":{"position":[[1784,1],[2936,1]]},"2770":{"position":[[276,1],[285,1]]},"3057":{"position":[[128,1]]},"3352":{"position":[[474,1]]},"3522":{"position":[[63,1]]},"3563":{"position":[[61,1]]},"3914":{"position":[[1295,1]]},"3980":{"position":[[368,1]]}}}],["夫",{"_index":4613,"t":{"1511":{"position":[[562,1]]}}}],["失效",{"_index":6835,"t":{"2717":{"position":[[271,2]]},"2848":{"position":[[1595,2]]},"3071":{"position":[[1005,2]]},"3914":{"position":[[2416,2]]},"3930":{"position":[[853,2],[1194,2]]},"3932":{"position":[[1320,2],[1325,2]]},"3950":{"position":[[454,2],[743,2],[892,2]]},"3960":{"position":[[485,2]]},"3966":{"position":[[689,2]]},"3974":{"position":[[787,2]]},"3992":{"position":[[179,2]]},"3994":{"position":[[899,2],[1212,2]]}}}],["失败",{"_index":906,"t":{"121":{"position":[[430,2]]},"129":{"position":[[617,2]]},"135":{"position":[[580,2]]},"146":{"position":[[703,2]]},"321":{"position":[[523,2]]},"336":{"position":[[433,2]]},"532":{"position":[[207,2]]},"567":{"position":[[283,2]]},"587":{"position":[[2041,2]]},"604":{"position":[[58,2]]},"610":{"position":[[8,2],[64,2]]},"617":{"position":[[32,2],[1692,2]]},"749":{"position":[[875,2]]},"927":{"position":[[1968,2],[2128,2]]},"929":{"position":[[606,2],[749,2]]},"931":{"position":[[1051,2],[1175,2]]},"933":{"position":[[283,2]]},"1470":{"position":[[40,2]]},"1799":{"position":[[1005,2]]},"1809":{"position":[[66,2],[301,2]]},"1819":{"position":[[415,2]]},"1837":{"position":[[121,2]]},"1911":{"position":[[40,2]]},"1913":{"position":[[977,2]]},"2214":{"position":[[38,2]]},"2454":{"position":[[38,2]]},"2486":{"position":[[738,2],[801,2]]},"2488":{"position":[[60,2]]},"3287":{"position":[[88,2]]},"3294":{"position":[[78,2]]},"3416":{"position":[[279,2],[337,2],[347,2],[385,2]]},"3432":{"position":[[4341,2],[4382,2]]},"3434":{"position":[[2715,2],[2754,2]]},"3528":{"position":[[115,2]]},"3567":{"position":[[237,2]]},"3708":{"position":[[1856,2]]},"3800":{"position":[[174,2]]},"3832":{"position":[[56,2],[251,2],[259,2]]},"3842":{"position":[[255,2],[885,2],[1450,2],[2040,2],[2681,2],[3298,2]]},"3844":{"position":[[261,2]]},"3846":{"position":[[501,2]]},"3912":{"position":[[1026,2],[2275,2]]},"3914":{"position":[[889,2],[2986,2]]},"3918":{"position":[[3640,2]]},"3922":{"position":[[121,2],[1401,2]]},"3932":{"position":[[443,2]]},"3934":{"position":[[527,2]]},"3942":{"position":[[455,2]]},"3946":{"position":[[207,2]]},"3948":{"position":[[232,2]]},"3956":{"position":[[1324,2]]},"3966":{"position":[[1481,2]]},"3968":{"position":[[749,2]]},"3972":{"position":[[129,2]]},"3974":{"position":[[584,2]]},"3982":{"position":[[234,2],[491,2]]},"3984":{"position":[[389,2]]},"3986":{"position":[[265,2],[1456,2]]},"3988":{"position":[[410,2]]},"3994":{"position":[[1128,2]]},"3996":{"position":[[566,2],[756,2],[1253,2]]},"3998":{"position":[[706,2]]},"4000":{"position":[[865,2]]}}}],["头",{"_index":1102,"t":{"144":{"position":[[89,1],[383,1]]},"148":{"position":[[43,1],[441,1],[520,1]]},"415":{"position":[[181,1]]},"417":{"position":[[33,1],[229,1]]},"2569":{"position":[[44,1]]},"2991":{"position":[[187,1]]},"3539":{"position":[[29,1]]},"3622":{"position":[[49,1],[53,1],[109,1]]},"3922":{"position":[[1394,1]]},"3950":{"position":[[178,1]]},"3962":{"position":[[182,1]]},"3968":{"position":[[284,1]]},"3992":{"position":[[1970,1]]}}}],["头像",{"_index":1169,"t":{"160":{"position":[[25,2]]},"399":{"position":[[528,2]]}}}],["头痛",{"_index":5445,"t":{"1761":{"position":[[297,2]]}}}],["头部",{"_index":6377,"t":{"2501":{"position":[[23,2]]},"2977":{"position":[[67,2]]},"2987":{"position":[[67,2]]},"2997":{"position":[[67,2]]},"3005":{"position":[[67,2]]},"3019":{"position":[[67,2]]},"3027":{"position":[[67,2]]},"3035":{"position":[[67,2]]},"3043":{"position":[[67,2]]},"3051":{"position":[[67,2]]},"3059":{"position":[[67,2]]},"3704":{"position":[[850,2]]},"3924":{"position":[[4390,2]]}}}],["奇数",{"_index":8002,"t":{"3375":{"position":[[92,2]]}}}],["奇葩",{"_index":7841,"t":{"3287":{"position":[[193,2],[354,2],[518,2]]}}}],["契合",{"_index":6859,"t":{"2731":{"position":[[685,2]]}}}],["奔跑",{"_index":9390,"t":{"3926":{"position":[[179,2]]}}}],["套",{"_index":8471,"t":{"3626":{"position":[[281,1]]}}}],["奢靡",{"_index":9408,"t":{"3926":{"position":[[441,2]]}}}],["奥地利",{"_index":6562,"t":{"2559":{"position":[[1231,3]]}}}],["女",{"_index":4020,"t":{"1141":{"position":[[92,1]]}}}],["奶牛",{"_index":2380,"t":{"397":{"position":[[271,2]]}}}],["奶茶",{"_index":4720,"t":{"1511":{"position":[[1728,2]]}}}],["好些",{"_index":493,"t":{"85":{"position":[[177,2]]}}}],["好人",{"_index":4598,"t":{"1511":{"position":[[449,2]]}}}],["好使",{"_index":5430,"t":{"1761":{"position":[[119,2]]}}}],["好像",{"_index":7019,"t":{"2770":{"position":[[290,2]]}}}],["好听",{"_index":9398,"t":{"3926":{"position":[[302,2]]}}}],["好坏",{"_index":1178,"t":{"166":{"position":[[8,2]]},"3242":{"position":[[186,2]]},"3910":{"position":[[183,2]]},"3934":{"position":[[2352,2]]}}}],["好处",{"_index":4200,"t":{"1385":{"position":[[112,2]]},"2311":{"position":[[432,2]]},"2646":{"position":[[110,2]]},"3624":{"position":[[18,2]]},"3779":{"position":[[108,2]]},"3802":{"position":[[107,2]]},"3817":{"position":[[114,2]]}}}],["好奇",{"_index":9375,"t":{"3926":{"position":[[112,2]]}}}],["好好看",{"_index":7977,"t":{"3352":{"position":[[628,3]]}}}],["好巧",{"_index":7347,"t":{"3069":{"position":[[142,2]]}}}],["好比",{"_index":3046,"t":{"585":{"position":[[521,2]]}}}],["如下",{"_index":135,"t":{"11":{"position":[[45,2]]},"13":{"position":[[87,2]]},"104":{"position":[[75,2]]},"204":{"position":[[93,2]]},"431":{"position":[[69,2]]},"453":{"position":[[90,2]]},"482":{"position":[[453,2]]},"552":{"position":[[76,2]]},"597":{"position":[[730,2]]},"599":{"position":[[615,2]]},"602":{"position":[[265,2]]},"610":{"position":[[121,2]]},"617":{"position":[[1895,2],[2508,2]]},"629":{"position":[[0,2]]},"696":{"position":[[4,2]]},"698":{"position":[[112,2]]},"713":{"position":[[74,2]]},"818":{"position":[[122,2]]},"826":{"position":[[46,2]]},"836":{"position":[[209,2]]},"919":{"position":[[100,2]]},"945":{"position":[[134,2]]},"1066":{"position":[[102,2]]},"1360":{"position":[[56,2]]},"1377":{"position":[[535,2]]},"1408":{"position":[[46,2],[539,2]]},"1410":{"position":[[52,2],[554,2]]},"1412":{"position":[[349,2]]},"1414":{"position":[[66,2],[474,2]]},"1420":{"position":[[52,2]]},"1440":{"position":[[126,2]]},"1474":{"position":[[158,2]]},"1535":{"position":[[32,2]]},"1561":{"position":[[30,2]]},"1584":{"position":[[518,2]]},"1603":{"position":[[348,2]]},"1605":{"position":[[270,2]]},"1607":{"position":[[302,2]]},"1609":{"position":[[249,2],[702,2]]},"1611":{"position":[[822,2]]},"1613":{"position":[[216,2]]},"1615":{"position":[[255,2]]},"1617":{"position":[[298,2],[540,2],[817,2],[1083,2]]},"1619":{"position":[[421,2]]},"1621":{"position":[[408,2],[688,2]]},"1631":{"position":[[82,2]]},"1635":{"position":[[185,2]]},"1643":{"position":[[295,2]]},"1645":{"position":[[289,2]]},"1647":{"position":[[356,2]]},"1649":{"position":[[255,2]]},"1651":{"position":[[307,2]]},"1653":{"position":[[300,2]]},"1655":{"position":[[343,2]]},"1657":{"position":[[458,2]]},"1659":{"position":[[847,2],[1288,2]]},"1663":{"position":[[266,2]]},"1755":{"position":[[76,2]]},"1845":{"position":[[250,2],[559,2]]},"1859":{"position":[[252,2]]},"1873":{"position":[[427,2]]},"2261":{"position":[[214,2]]},"2272":{"position":[[207,2]]},"2281":{"position":[[112,2]]},"2294":{"position":[[45,2]]},"2296":{"position":[[87,2]]},"2345":{"position":[[71,2]]},"2418":{"position":[[61,2],[561,2],[747,2]]},"2538":{"position":[[316,2]]},"2705":{"position":[[69,2]]},"2725":{"position":[[1605,2]]},"2856":{"position":[[1785,2]]},"2881":{"position":[[454,2]]},"3063":{"position":[[1468,2]]},"3131":{"position":[[70,2]]},"3263":{"position":[[188,2]]},"3305":{"position":[[55,2]]},"3365":{"position":[[43,2]]},"3375":{"position":[[99,2]]},"3397":{"position":[[880,2]]},"3430":{"position":[[1569,2]]},"3448":{"position":[[44,2]]},"3452":{"position":[[1045,2]]},"3464":{"position":[[44,2],[262,2]]},"3581":{"position":[[457,2]]},"3632":{"position":[[43,2]]},"3636":{"position":[[535,2]]},"3638":{"position":[[694,2]]},"3640":{"position":[[689,2]]},"3642":{"position":[[459,2]]},"3644":{"position":[[847,2],[1288,2]]},"3646":{"position":[[103,2]]},"3648":{"position":[[102,2]]},"3652":{"position":[[0,2]]},"3654":{"position":[[83,2]]},"3656":{"position":[[285,2]]},"3664":{"position":[[241,2]]},"3706":{"position":[[1479,2]]},"3785":{"position":[[101,2],[805,2],[1473,2]]},"3808":{"position":[[425,2],[1909,2],[3270,2]]},"3812":{"position":[[101,2],[1077,2],[2367,2]]},"3821":{"position":[[114,2]]},"3828":{"position":[[941,2]]},"3832":{"position":[[1004,2]]},"3916":{"position":[[4041,2]]}}}],["如何",{"_index":556,"t":{"93":{"position":[[653,2]]},"218":{"position":[[85,2]]},"237":{"position":[[7,2]]},"239":{"position":[[219,2]]},"369":{"position":[[62,2]]},"1052":{"position":[[128,2]]},"1541":{"position":[[35,2]]},"1545":{"position":[[70,2]]},"2719":{"position":[[34,2]]},"2796":{"position":[[495,2]]},"2862":{"position":[[374,2]]},"2912":{"position":[[35,2]]},"3189":{"position":[[221,2]]},"3287":{"position":[[3030,2]]},"3702":{"position":[[1535,2]]},"3779":{"position":[[38,2]]},"3802":{"position":[[37,2]]},"3817":{"position":[[38,2]]},"3924":{"position":[[2640,2],[2655,2]]},"3962":{"position":[[1783,2],[1851,2],[2091,2]]},"3966":{"position":[[2028,2]]},"3968":{"position":[[573,2]]},"3974":{"position":[[638,2]]},"3978":{"position":[[1730,2]]},"3982":{"position":[[688,2]]},"3984":{"position":[[844,2],[930,2],[974,2]]},"3986":{"position":[[1571,2],[1665,2],[1712,2],[1763,2],[1794,2]]},"3992":{"position":[[2960,2],[3149,2]]},"3994":{"position":[[1630,2],[1650,2]]},"3996":{"position":[[1682,2]]}}}],["如同",{"_index":1176,"t":{"166":{"position":[[2,2]]},"1073":{"position":[[0,2]]},"1416":{"position":[[348,2]]},"3242":{"position":[[180,2]]},"3910":{"position":[[177,2]]},"3934":{"position":[[2346,2]]}}}],["如图所示",{"_index":5316,"t":{"1699":{"position":[[158,4]]}}}],["如果",{"_index":115,"t":{"9":{"position":[[70,2]]},"15":{"position":[[269,2]]},"17":{"position":[[263,2]]},"51":{"position":[[261,2]]},"62":{"position":[[261,2]]},"75":{"position":[[261,2]]},"106":{"position":[[38,2]]},"119":{"position":[[62,2]]},"121":{"position":[[198,2],[293,2]]},"125":{"position":[[5,2]]},"127":{"position":[[287,2]]},"129":{"position":[[346,2],[565,2]]},"133":{"position":[[663,2]]},"137":{"position":[[23,2],[120,2]]},"141":{"position":[[0,2]]},"146":{"position":[[974,2]]},"148":{"position":[[369,2]]},"199":{"position":[[656,2]]},"206":{"position":[[125,2],[271,2]]},"212":{"position":[[37,2]]},"233":{"position":[[288,2],[402,2],[435,2]]},"243":{"position":[[80,2],[179,2]]},"245":{"position":[[188,2]]},"286":{"position":[[18,2]]},"288":{"position":[[307,2]]},"308":{"position":[[261,2],[388,2]]},"310":{"position":[[245,2]]},"314":{"position":[[401,2],[554,2]]},"316":{"position":[[0,2]]},"323":{"position":[[0,2],[69,2]]},"353":{"position":[[49,2]]},"355":{"position":[[539,2]]},"367":{"position":[[105,2]]},"371":{"position":[[641,2]]},"373":{"position":[[145,2]]},"378":{"position":[[0,2],[65,2],[88,2]]},"386":{"position":[[0,2]]},"404":{"position":[[122,2]]},"413":{"position":[[78,2]]},"417":{"position":[[261,2]]},"419":{"position":[[135,2],[238,2]]},"427":{"position":[[51,2],[69,2],[152,2]]},"433":{"position":[[107,2]]},"445":{"position":[[688,2]]},"453":{"position":[[350,2],[398,2]]},"455":{"position":[[940,2]]},"459":{"position":[[0,2]]},"463":{"position":[[40,2]]},"482":{"position":[[495,2],[717,2],[812,2],[844,2],[865,2]]},"498":{"position":[[12,2],[85,2]]},"510":{"position":[[491,2]]},"516":{"position":[[534,2]]},"524":{"position":[[491,2]]},"528":{"position":[[307,2],[394,2]]},"530":{"position":[[775,2]]},"538":{"position":[[29,2]]},"570":{"position":[[1625,2],[2037,2]]},"585":{"position":[[445,2],[492,2]]},"587":{"position":[[690,2]]},"610":{"position":[[26,2]]},"675":{"position":[[180,2]]},"677":{"position":[[70,2],[154,2]]},"683":{"position":[[31,2]]},"685":{"position":[[239,2],[285,2],[321,2]]},"698":{"position":[[140,2],[226,2]]},"704":{"position":[[70,2],[154,2]]},"706":{"position":[[55,2],[223,2]]},"713":{"position":[[760,2]]},"715":{"position":[[46,2]]},"717":{"position":[[0,2]]},"730":{"position":[[0,2]]},"732":{"position":[[275,2]]},"756":{"position":[[36,2]]},"761":{"position":[[138,2]]},"773":{"position":[[13,2]]},"818":{"position":[[34,2]]},"836":{"position":[[355,2]]},"846":{"position":[[946,2]]},"887":{"position":[[42,2]]},"893":{"position":[[12,2],[85,2]]},"899":{"position":[[1467,2],[1755,2]]},"939":{"position":[[93,2]]},"941":{"position":[[127,2]]},"960":{"position":[[295,2],[354,2]]},"1039":{"position":[[776,2]]},"1048":{"position":[[40,2]]},"1103":{"position":[[99,2]]},"1200":{"position":[[173,2]]},"1234":{"position":[[772,2],[870,2]]},"1313":{"position":[[322,2]]},"1319":{"position":[[55,2],[224,2]]},"1372":{"position":[[7,2]]},"1377":{"position":[[490,2]]},"1383":{"position":[[98,2],[159,2]]},"1385":{"position":[[17,2]]},"1389":{"position":[[27,2]]},"1396":{"position":[[64,2]]},"1412":{"position":[[2515,2]]},"1420":{"position":[[929,2]]},"1422":{"position":[[32,2]]},"1424":{"position":[[16,2],[1694,2]]},"1428":{"position":[[46,2]]},"1440":{"position":[[421,2]]},"1444":{"position":[[7,2]]},"1470":{"position":[[0,2]]},"1474":{"position":[[25,2]]},"1495":{"position":[[1287,2]]},"1509":{"position":[[104,2],[207,2]]},"1511":{"position":[[0,2],[62,2],[156,2]]},"1547":{"position":[[284,2]]},"1549":{"position":[[373,2]]},"1557":{"position":[[136,2],[408,2]]},"1566":{"position":[[209,2],[339,2],[364,2]]},"1596":{"position":[[244,2]]},"1615":{"position":[[267,2]]},"1617":{"position":[[1103,2],[1134,2]]},"1627":{"position":[[35,2],[229,2],[376,2]]},"1631":{"position":[[351,2]]},"1651":{"position":[[28,2]]},"1657":{"position":[[151,2]]},"1659":{"position":[[1299,2]]},"1663":{"position":[[452,2]]},"1701":{"position":[[0,2]]},"1711":{"position":[[808,2]]},"1739":{"position":[[436,2]]},"1741":{"position":[[1628,2]]},"1747":{"position":[[61,2]]},"1751":{"position":[[0,2]]},"1753":{"position":[[182,2],[315,2]]},"1765":{"position":[[0,2],[58,2],[85,2],[120,2]]},"1783":{"position":[[91,2]]},"1801":{"position":[[1728,2]]},"1809":{"position":[[297,2]]},"1825":{"position":[[0,2]]},"1857":{"position":[[112,2]]},"1875":{"position":[[636,2]]},"1901":{"position":[[34,2],[132,2]]},"1903":{"position":[[532,2],[544,2],[561,2]]},"1909":{"position":[[0,2]]},"1911":{"position":[[36,2]]},"1913":{"position":[[973,2]]},"1919":{"position":[[371,2]]},"1933":{"position":[[268,2]]},"1941":{"position":[[615,2],[967,2]]},"1955":{"position":[[48,2]]},"1961":{"position":[[74,2]]},"1979":{"position":[[705,2],[842,2],[879,2],[905,2]]},"1981":{"position":[[58,2]]},"1991":{"position":[[238,2],[275,2],[301,2]]},"1993":{"position":[[58,2]]},"1995":{"position":[[30,2]]},"2014":{"position":[[238,2],[275,2],[301,2]]},"2016":{"position":[[66,2]]},"2018":{"position":[[30,2]]},"2182":{"position":[[230,2]]},"2251":{"position":[[140,2]]},"2261":{"position":[[408,2]]},"2292":{"position":[[70,2]]},"2311":{"position":[[313,2]]},"2326":{"position":[[198,2],[247,2]]},"2331":{"position":[[192,2],[230,2]]},"2361":{"position":[[223,2],[335,2]]},"2418":{"position":[[788,2],[1048,2],[1169,2],[1202,2],[1226,2]]},"2472":{"position":[[377,2]]},"2478":{"position":[[455,2]]},"2490":{"position":[[0,2]]},"2497":{"position":[[56,2]]},"2503":{"position":[[0,2],[128,2]]},"2522":{"position":[[148,2]]},"2540":{"position":[[13,2],[63,2]]},"2542":{"position":[[152,2]]},"2544":{"position":[[127,2]]},"2553":{"position":[[136,2]]},"2597":{"position":[[29,2]]},"2623":{"position":[[151,2]]},"2625":{"position":[[210,2],[521,2],[592,2]]},"2627":{"position":[[73,2],[123,2]]},"2653":{"position":[[8,2]]},"2674":{"position":[[108,2],[179,2],[326,2]]},"2684":{"position":[[305,2]]},"2688":{"position":[[94,2]]},"2715":{"position":[[0,2]]},"2721":{"position":[[87,2]]},"2747":{"position":[[223,2]]},"2774":{"position":[[408,2]]},"2813":{"position":[[1131,2]]},"2817":{"position":[[77,2],[218,2]]},"2829":{"position":[[37,2]]},"2831":{"position":[[39,2]]},"2834":{"position":[[59,2]]},"2848":{"position":[[32,2]]},"2887":{"position":[[32,2]]},"2889":{"position":[[68,2]]},"2899":{"position":[[150,2],[435,2]]},"2901":{"position":[[0,2]]},"2915":{"position":[[94,2],[188,2],[232,2]]},"2917":{"position":[[162,2],[198,2]]},"2933":{"position":[[631,2]]},"2949":{"position":[[479,2]]},"2963":{"position":[[498,2]]},"2967":{"position":[[52,2]]},"2971":{"position":[[264,2]]},"2973":{"position":[[42,2]]},"2985":{"position":[[190,2]]},"2995":{"position":[[85,2]]},"3031":{"position":[[136,2]]},"3033":{"position":[[118,2]]},"3063":{"position":[[253,2]]},"3071":{"position":[[170,2],[1149,2],[1220,2]]},"3075":{"position":[[35,2]]},"3080":{"position":[[439,2]]},"3100":{"position":[[81,2]]},"3102":{"position":[[20,2]]},"3108":{"position":[[141,2]]},"3110":{"position":[[99,2]]},"3114":{"position":[[19,2]]},"3122":{"position":[[0,2],[14,2]]},"3150":{"position":[[100,2]]},"3152":{"position":[[35,2]]},"3207":{"position":[[188,2]]},"3215":{"position":[[178,2],[864,2]]},"3224":{"position":[[8,2]]},"3248":{"position":[[29,2]]},"3289":{"position":[[118,2]]},"3291":{"position":[[1271,2]]},"3296":{"position":[[47,2]]},"3307":{"position":[[78,2]]},"3339":{"position":[[33,2],[260,2]]},"3352":{"position":[[146,2],[223,2],[316,2],[417,2]]},"3369":{"position":[[11,2]]},"3383":{"position":[[0,2]]},"3403":{"position":[[57,2]]},"3430":{"position":[[493,2],[1716,2]]},"3432":{"position":[[596,2],[726,2],[4548,2]]},"3448":{"position":[[1367,2]]},"3452":{"position":[[748,2],[820,2]]},"3458":{"position":[[475,2]]},"3464":{"position":[[456,2]]},"3500":{"position":[[730,2]]},"3522":{"position":[[881,2],[1171,2]]},"3563":{"position":[[641,2]]},"3579":{"position":[[238,2]]},"3595":{"position":[[200,2],[379,2],[404,2]]},"3597":{"position":[[153,2],[433,2]]},"3626":{"position":[[387,2]]},"3636":{"position":[[546,2]]},"3640":{"position":[[434,2],[718,2]]},"3644":{"position":[[1299,2]]},"3660":{"position":[[30,2]]},"3662":{"position":[[0,2]]},"3664":{"position":[[66,2],[534,2]]},"3666":{"position":[[274,2]]},"3668":{"position":[[17,2]]},"3674":{"position":[[0,2]]},"3698":{"position":[[358,2]]},"3704":{"position":[[198,2]]},"3706":{"position":[[245,2]]},"3716":{"position":[[862,2]]},"3718":{"position":[[105,2]]},"3722":{"position":[[126,2]]},"3777":{"position":[[244,2]]},"3779":{"position":[[914,2]]},"3783":{"position":[[1444,2],[1652,2]]},"3791":{"position":[[555,2]]},"3795":{"position":[[50,2]]},"3802":{"position":[[1263,2]]},"3806":{"position":[[1297,2],[3057,2],[3232,2]]},"3808":{"position":[[0,2]]},"3817":{"position":[[1563,2]]},"3840":{"position":[[24,2]]},"3842":{"position":[[47,2],[587,2],[1196,2],[1770,2],[2373,2],[3006,2]]},"3844":{"position":[[47,2],[898,2],[951,2],[1056,2]]},"3846":{"position":[[36,2],[292,2]]},"3862":{"position":[[24,2]]},"3882":{"position":[[24,2]]},"3884":{"position":[[24,2]]},"3886":{"position":[[24,2]]},"3888":{"position":[[24,2]]},"3892":{"position":[[24,2]]},"3908":{"position":[[152,2],[186,2],[220,2],[256,2]]},"3910":{"position":[[2404,2]]},"3912":{"position":[[1675,2]]},"3916":{"position":[[3744,2],[3816,2]]},"3924":{"position":[[3732,2]]},"3930":{"position":[[881,2]]},"3940":{"position":[[600,2]]},"3942":{"position":[[192,2]]},"3946":{"position":[[296,2]]},"3952":{"position":[[359,2]]},"3960":{"position":[[507,2]]},"3962":{"position":[[1537,2]]},"3964":{"position":[[510,2],[553,2]]},"3972":{"position":[[602,2]]},"3978":{"position":[[794,2],[1690,2]]},"3982":{"position":[[389,2],[446,2]]},"3996":{"position":[[676,2]]}}}],["如此",{"_index":3051,"t":{"585":{"position":[[540,2]]},"1959":{"position":[[124,2]]},"2770":{"position":[[327,2]]},"3626":{"position":[[632,2]]}}}],["如若",{"_index":3232,"t":{"621":{"position":[[48,2]]}}}],["妥协",{"_index":9359,"t":{"3924":{"position":[[2716,2]]},"3928":{"position":[[281,2]]}}}],["始终",{"_index":1637,"t":{"220":{"position":[[885,2]]},"445":{"position":[[820,2]]},"1711":{"position":[[742,2]]},"2751":{"position":[[84,2]]},"3926":{"position":[[557,2]]}}}],["始终保持",{"_index":8476,"t":{"3626":{"position":[[597,4]]}}}],["姓名",{"_index":3402,"t":{"708":{"position":[[302,2]]},"830":{"position":[[132,2]]},"851":{"position":[[317,2]]},"1364":{"position":[[258,2]]}}}],["委内瑞拉",{"_index":6671,"t":{"2559":{"position":[[2402,4]]}}}],["委托",{"_index":4195,"t":{"1383":{"position":[[299,2]]},"1412":{"position":[[118,2],[130,2]]},"1440":{"position":[[287,2]]},"1724":{"position":[[60,2]]},"2285":{"position":[[18,2],[23,2]]},"2564":{"position":[[74,2],[88,2]]},"3824":{"position":[[96,2]]},"3920":{"position":[[1226,2]]},"3932":{"position":[[827,2]]},"3936":{"position":[[285,2]]},"3940":{"position":[[418,2]]},"3962":{"position":[[1107,2]]},"3976":{"position":[[79,2],[620,2]]}}}],["子",{"_index":2446,"t":{"406":{"position":[[298,1]]},"801":{"position":[[64,1]]},"1511":{"position":[[598,1]]},"3211":{"position":[[86,1]]},"3337":{"position":[[49,1]]},"3968":{"position":[[320,1]]}}}],["子孙",{"_index":4992,"t":{"1549":{"position":[[18,2]]}}}],["子目录",{"_index":2583,"t":{"445":{"position":[[989,3]]},"455":{"position":[[231,3]]},"2985":{"position":[[309,3]]}}}],["子类",{"_index":2949,"t":{"567":{"position":[[27,2]]},"570":{"position":[[20,2]]},"933":{"position":[[27,2]]},"3063":{"position":[[332,2],[362,2]]},"3646":{"position":[[145,2],[175,2]]},"3706":{"position":[[324,2],[354,2]]},"3954":{"position":[[646,2]]},"3992":{"position":[[1855,2]]}}}],["子集",{"_index":3681,"t":{"877":{"position":[[643,2],[2168,2]]},"2341":{"position":[[90,2]]}}}],["字",{"_index":2662,"t":{"482":{"position":[[0,1]]},"841":{"position":[[13,1],[28,1],[33,1],[68,1]]},"919":{"position":[[30,1]]},"1761":{"position":[[19,1]]},"1763":{"position":[[121,1],[183,1]]},"1857":{"position":[[44,1]]},"2418":{"position":[[225,1]]},"3094":{"position":[[7,1],[20,1],[29,1],[71,1],[93,1]]},"3110":{"position":[[142,1],[204,1]]},"3118":{"position":[[200,1],[367,1]]},"3120":{"position":[[47,1],[57,1],[63,1],[91,1],[96,1]]},"3242":{"position":[[50,1]]},"3622":{"position":[[155,1]]},"3910":{"position":[[47,1]]},"3914":{"position":[[833,1]]},"3934":{"position":[[2132,1]]},"3964":{"position":[[772,1]]},"3984":{"position":[[399,1]]},"3994":{"position":[[252,1]]},"4000":{"position":[[408,1]]}}}],["字串",{"_index":7767,"t":{"3254":{"position":[[164,2]]},"3275":{"position":[[84,2]]}}}],["字体",{"_index":5012,"t":{"1555":{"position":[[97,2],[321,2]]}}}],["字典",{"_index":1029,"t":{"127":{"position":[[1712,2]]},"439":{"position":[[60,2]]},"1141":{"position":[[49,2]]},"1539":{"position":[[1950,2]]},"3118":{"position":[[113,2]]},"3267":{"position":[[395,2],[404,2]]},"3492":{"position":[[3,2]]},"3494":{"position":[[3,2]]},"3496":{"position":[[3,2]]}}}],["字数",{"_index":2355,"t":{"388":{"position":[[10,2]]}}}],["字段名",{"_index":7284,"t":{"2969":{"position":[[103,3]]},"3930":{"position":[[363,3]]},"3986":{"position":[[1735,3]]}}}],["字母",{"_index":6175,"t":{"2333":{"position":[[115,2]]},"2559":{"position":[[386,2],[2001,2],[2690,2]]},"3698":{"position":[[268,2]]},"3992":{"position":[[2237,2]]}}}],["字符",{"_index":2709,"t":{"482":{"position":[[919,2]]},"685":{"position":[[478,2],[535,2]]},"696":{"position":[[492,2]]},"1520":{"position":[[181,2],[347,2]]},"1539":{"position":[[220,2]]},"1635":{"position":[[215,2]]},"2333":{"position":[[329,2]]},"2418":{"position":[[271,2],[305,2],[338,2],[398,2],[441,2],[503,2],[542,2],[1285,2]]},"2796":{"position":[[503,2],[756,2],[761,2]]},"3994":{"position":[[1254,2]]}}}],["字符串",{"_index":735,"t":{"112":{"position":[[1025,3]]},"144":{"position":[[25,3]]},"152":{"position":[[137,3],[424,3]]},"220":{"position":[[276,3]]},"243":{"position":[[56,3],[105,3],[209,3]]},"249":{"position":[[182,3]]},"270":{"position":[[100,3]]},"451":{"position":[[38,3]]},"457":{"position":[[38,3]]},"469":{"position":[[11,3],[15,3]]},"480":{"position":[[63,3]]},"498":{"position":[[2,3],[16,3],[117,3]]},"508":{"position":[[125,3]]},"510":{"position":[[125,3]]},"512":{"position":[[18,3],[64,3],[93,3]]},"514":{"position":[[457,3],[594,3]]},"516":{"position":[[174,3],[433,3],[485,3]]},"518":{"position":[[484,3],[653,3]]},"524":{"position":[[14,3]]},"526":{"position":[[233,3],[291,3]]},"587":{"position":[[936,3]]},"597":{"position":[[265,3]]},"599":{"position":[[295,3]]},"606":{"position":[[394,3]]},"608":{"position":[[890,3]]},"615":{"position":[[496,3],[575,3]]},"688":{"position":[[58,3],[83,3]]},"690":{"position":[[4,3]]},"698":{"position":[[101,3],[270,3]]},"713":{"position":[[51,3]]},"715":{"position":[[68,3]]},"893":{"position":[[2,3],[16,3],[117,3]]},"915":{"position":[[451,3]]},"924":{"position":[[38,3]]},"1054":{"position":[[349,3]]},"1056":{"position":[[637,3]]},"1107":{"position":[[152,3]]},"1109":{"position":[[40,3]]},"1214":{"position":[[10,3]]},"1269":{"position":[[186,3],[201,3]]},"1313":{"position":[[22,3],[604,3],[676,3],[1072,3]]},"1520":{"position":[[185,3],[245,3],[314,3]]},"1557":{"position":[[928,3]]},"1592":{"position":[[84,3]]},"1594":{"position":[[128,3],[167,3]]},"1635":{"position":[[425,3],[489,3],[541,3]]},"1689":{"position":[[13,3]]},"1699":{"position":[[67,3]]},"1741":{"position":[[1157,3],[1625,3],[1677,3]]},"1761":{"position":[[228,3]]},"1851":{"position":[[98,3],[330,3]]},"1887":{"position":[[461,3]]},"1925":{"position":[[874,3]]},"1979":{"position":[[911,3],[921,3]]},"1991":{"position":[[307,3],[317,3]]},"2014":{"position":[[307,3],[317,3]]},"2261":{"position":[[7,3]]},"2345":{"position":[[439,3]]},"2357":{"position":[[966,3]]},"2418":{"position":[[11,3],[15,3]]},"2538":{"position":[[100,3]]},"2540":{"position":[[33,3]]},"2721":{"position":[[50,3]]},"2723":{"position":[[58,3]]},"2848":{"position":[[1157,3]]},"2945":{"position":[[626,3],[852,3]]},"2949":{"position":[[426,3],[654,3]]},"2951":{"position":[[38,3],[588,3]]},"3063":{"position":[[264,3]]},"3126":{"position":[[142,3]]},"3154":{"position":[[722,3]]},"3254":{"position":[[442,3],[817,3]]},"3287":{"position":[[1137,3]]},"3291":{"position":[[613,3]]},"3321":{"position":[[297,3]]},"3426":{"position":[[31,3],[206,3]]},"3446":{"position":[[352,3]]},"3448":{"position":[[663,3],[1087,3]]},"3464":{"position":[[55,3]]},"3483":{"position":[[47,3]]},"3520":{"position":[[81,3],[101,3]]},"3561":{"position":[[81,3],[101,3]]},"3575":{"position":[[527,3]]},"3597":{"position":[[64,3]]},"3599":{"position":[[5,3],[18,3]]},"3603":{"position":[[33,3]]},"3664":{"position":[[58,3]]},"3698":{"position":[[258,3]]},"3706":{"position":[[256,3]]},"3734":{"position":[[375,3]]},"3740":{"position":[[394,3]]},"3777":{"position":[[392,3]]},"3779":{"position":[[536,3],[562,3],[579,3]]},"3785":{"position":[[40,3],[54,3],[96,3],[371,3],[800,3],[1420,3],[1468,3]]},"3793":{"position":[[270,3]]},"3802":{"position":[[592,3],[618,3],[635,3]]},"3812":{"position":[[42,3],[56,3],[96,3],[649,3],[1072,3],[2316,3],[2362,3]]},"3817":{"position":[[491,3],[517,3],[534,3]]},"3821":{"position":[[46,3],[60,3],[109,3]]},"3830":{"position":[[367,3]]},"3916":{"position":[[1922,3],[7091,3],[7696,3]]},"3922":{"position":[[765,3],[1573,3]]},"3936":{"position":[[1035,3],[1879,3]]},"3940":{"position":[[441,3]]},"3944":{"position":[[352,3]]},"3960":{"position":[[9,3]]},"3962":{"position":[[423,3]]},"3974":{"position":[[175,3]]},"3976":{"position":[[558,3]]},"3978":{"position":[[501,3]]},"3984":{"position":[[84,3]]},"3986":{"position":[[866,3]]},"3990":{"position":[[112,3],[424,3],[442,3]]},"3992":{"position":[[432,3]]},"3996":{"position":[[173,3],[412,3],[1014,3]]},"3998":{"position":[[229,3]]},"4000":{"position":[[405,3],[428,3],[1168,3]]},"4006":{"position":[[405,3],[452,3]]}}}],["字节",{"_index":5253,"t":{"1685":{"position":[[447,2]]},"1745":{"position":[[238,2],[313,2]]},"3520":{"position":[[113,2]]}}}],["字面上",{"_index":3008,"t":{"579":{"position":[[4,3]]}}}],["存储",{"_index":302,"t":{"19":{"position":[[506,2]]},"112":{"position":[[1029,2],[1105,2],[1141,2],[1556,2]]},"119":{"position":[[28,2]]},"121":{"position":[[564,2]]},"127":{"position":[[1876,2]]},"144":{"position":[[206,2],[593,2]]},"148":{"position":[[498,2],[549,2]]},"150":{"position":[[12,2]]},"152":{"position":[[25,2],[55,2]]},"239":{"position":[[130,2]]},"245":{"position":[[67,2],[103,2],[184,2]]},"247":{"position":[[80,2]]},"249":{"position":[[12,2],[19,2]]},"255":{"position":[[77,2],[115,2],[214,2],[238,2],[272,2]]},"572":{"position":[[557,2],[1002,2]]},"1103":{"position":[[8,2],[62,2],[86,2],[102,2],[117,2],[148,2],[169,2],[231,2],[247,2]]},"1107":{"position":[[15,2]]},"1111":{"position":[[358,2]]},"1113":{"position":[[356,2]]},"1115":{"position":[[362,2]]},"1117":{"position":[[3820,2]]},"1119":{"position":[[333,2]]},"1121":{"position":[[357,2]]},"1123":{"position":[[303,2]]},"1125":{"position":[[1,2]]},"1129":{"position":[[510,2],[1448,2]]},"1131":{"position":[[29,2]]},"1133":{"position":[[58,2]]},"1135":{"position":[[71,2]]},"1200":{"position":[[7,2],[79,2],[127,2]]},"1234":{"position":[[369,2]]},"1236":{"position":[[375,2]]},"1238":{"position":[[455,2]]},"1240":{"position":[[497,2]]},"1535":{"position":[[650,2]]},"1672":{"position":[[52,2]]},"1699":{"position":[[123,2]]},"1741":{"position":[[77,2],[864,2],[1707,2],[2498,2]]},"1743":{"position":[[21,2],[31,2],[276,2],[471,2]]},"1745":{"position":[[14,2],[52,2]]},"1763":{"position":[[75,2],[210,2]]},"1765":{"position":[[128,2]]},"1803":{"position":[[2514,2]]},"1925":{"position":[[878,2],[967,2],[1003,2]]},"2033":{"position":[[40,2]]},"2326":{"position":[[101,2]]},"2341":{"position":[[110,2]]},"2547":{"position":[[111,2]]},"2599":{"position":[[18,2],[57,2]]},"2843":{"position":[[73,2],[100,2],[113,2],[176,2]]},"2852":{"position":[[56,2]]},"2910":{"position":[[400,2]]},"3092":{"position":[[17,2]]},"3098":{"position":[[35,2]]},"3110":{"position":[[213,2],[240,2]]},"3273":{"position":[[379,2]]},"3432":{"position":[[562,2]]},"3702":{"position":[[1353,2]]},"3777":{"position":[[130,2],[181,2],[395,2]]},"3798":{"position":[[137,2],[187,2]]},"3916":{"position":[[1494,2]]},"3932":{"position":[[1110,2]]},"3962":{"position":[[1464,2]]},"3964":{"position":[[1075,2]]},"3978":{"position":[[837,2]]},"3980":{"position":[[302,2]]},"3984":{"position":[[739,2]]},"3992":{"position":[[1092,2],[1108,2]]}}}],["存储介质",{"_index":8153,"t":{"3434":{"position":[[43,4],[58,4]]},"3452":{"position":[[481,4]]},"3916":{"position":[[3484,4]]}}}],["存储器",{"_index":5527,"t":{"1799":{"position":[[39,3],[785,3],[1000,3]]},"1801":{"position":[[53,3],[185,3],[539,3],[972,3],[1851,3],[2045,3],[2759,3],[3178,3],[3449,3]]},"1803":{"position":[[2361,3],[2629,3],[3142,3],[3822,3],[4007,3],[4731,3],[5171,3],[5680,3]]},"1805":{"position":[[528,3]]},"1821":{"position":[[402,3]]},"3912":{"position":[[1013,3]]},"3918":{"position":[[3727,3]]}}}],["存储用户",{"_index":1037,"t":{"127":{"position":[[1912,4]]},"144":{"position":[[242,4]]}}}],["存储空间",{"_index":7055,"t":{"2788":{"position":[[218,4]]}}}],["存取",{"_index":1662,"t":{"229":{"position":[[16,2]]},"500":{"position":[[32,2]]},"986":{"position":[[24,2],[138,2]]}}}],["存在",{"_index":1006,"t":{"127":{"position":[[1443,2]]},"233":{"position":[[279,2]]},"280":{"position":[[137,2]]},"319":{"position":[[607,2]]},"357":{"position":[[9,2]]},"378":{"position":[[19,2]]},"427":{"position":[[154,2]]},"457":{"position":[[26,2]]},"655":{"position":[[11,2],[495,2]]},"1416":{"position":[[157,2]]},"1488":{"position":[[1030,2]]},"1499":{"position":[[422,2]]},"1520":{"position":[[262,2]]},"1672":{"position":[[61,2]]},"1719":{"position":[[47,2]]},"1832":{"position":[[116,2],[128,2]]},"1855":{"position":[[285,2]]},"1865":{"position":[[178,2],[395,2]]},"2587":{"position":[[497,2]]},"2731":{"position":[[96,2]]},"2834":{"position":[[73,2]]},"2917":{"position":[[210,2]]},"3096":{"position":[[148,2]]},"3098":{"position":[[28,2]]},"3104":{"position":[[4,2]]},"3261":{"position":[[400,2]]},"3352":{"position":[[593,2]]},"3432":{"position":[[468,2]]},"3470":{"position":[[148,2]]},"3783":{"position":[[1448,2],[1539,2],[1545,2],[1660,2]]},"3793":{"position":[[202,2]]},"3840":{"position":[[26,2]]},"3862":{"position":[[26,2]]},"3884":{"position":[[26,2]]},"3924":{"position":[[1882,2]]},"3930":{"position":[[883,2]]},"3934":{"position":[[2195,2]]},"3946":{"position":[[299,2]]},"3950":{"position":[[366,2]]},"3952":{"position":[[307,2],[625,2]]},"3966":{"position":[[1655,2]]},"3972":{"position":[[607,2]]},"3980":{"position":[[399,2]]}}}],["存放",{"_index":3400,"t":{"706":{"position":[[205,2]]},"1319":{"position":[[206,2]]},"3131":{"position":[[259,2]]},"3740":{"position":[[404,2]]}}}],["存放程序",{"_index":6413,"t":{"2542":{"position":[[114,4]]},"2553":{"position":[[231,4]]},"3031":{"position":[[231,4]]}}}],["存活",{"_index":1762,"t":{"239":{"position":[[175,2]]}}}],["孟",{"_index":4775,"t":{"1511":{"position":[[2378,1],[3368,1]]}}}],["孤芳自赏",{"_index":1158,"t":{"156":{"position":[[0,4]]}}}],["学习",{"_index":1175,"t":{"162":{"position":[[13,2]]},"1511":{"position":[[435,2],[1107,2],[1109,2],[2278,2],[2280,2],[2819,2]]},"1574":{"position":[[1,2]]},"2497":{"position":[[59,2]]},"3331":{"position":[[30,2]]},"3628":{"position":[[38,2]]}}}],["学会",{"_index":4985,"t":{"1545":{"position":[[6,2]]}}}],["孩子",{"_index":4675,"t":{"1511":{"position":[[1215,2]]},"3926":{"position":[[377,2]]}}}],["孵化",{"_index":2405,"t":{"399":{"position":[[689,2]]}}}],["它们",{"_index":2197,"t":{"338":{"position":[[1213,2]]},"340":{"position":[[1225,2],[1242,2]]},"423":{"position":[[129,2]]},"1403":{"position":[[5,2]]},"1901":{"position":[[397,2],[426,2],[650,2]]},"1963":{"position":[[20,2]]},"2418":{"position":[[568,2]]},"3432":{"position":[[477,2]]},"3783":{"position":[[1813,2]]},"3806":{"position":[[1389,2]]},"3830":{"position":[[119,2]]},"3928":{"position":[[73,2]]}}}],["守护",{"_index":6361,"t":{"2480":{"position":[[71,2]]},"2740":{"position":[[29,2]]},"2803":{"position":[[83,2]]},"2809":{"position":[[115,2]]},"2836":{"position":[[47,2],[1296,2],[1861,2]]},"3080":{"position":[[245,2]]}}}],["安全",{"_index":924,"t":{"121":{"position":[[621,2],[740,2]]},"154":{"position":[[61,2]]},"331":{"position":[[9,2]]},"363":{"position":[[76,2]]},"378":{"position":[[21,2],[95,2],[110,2]]},"380":{"position":[[5,2]]},"404":{"position":[[117,2]]},"408":{"position":[[46,2],[87,2],[155,2]]},"423":{"position":[[47,2]]},"581":{"position":[[3,2]]},"1383":{"position":[[132,2]]},"1672":{"position":[[80,2]]},"2311":{"position":[[54,2]]},"2782":{"position":[[54,2]]},"2919":{"position":[[204,2]]},"3319":{"position":[[32,2]]},"3412":{"position":[[113,2]]},"3589":{"position":[[679,2]]},"3614":{"position":[[58,2]]},"3686":{"position":[[66,2]]},"3910":{"position":[[2587,2]]},"3914":{"position":[[3603,2]]},"3940":{"position":[[745,2]]},"3982":{"position":[[309,2]]},"3986":{"position":[[995,2]]},"4000":{"position":[[1218,2]]}}}],["安全性",{"_index":3016,"t":{"581":{"position":[[13,3]]},"1672":{"position":[[37,3]]},"2915":{"position":[[35,3]]},"2917":{"position":[[108,3]]},"2919":{"position":[[187,3]]}}}],["安全检查",{"_index":8381,"t":{"3589":{"position":[[665,4]]}}}],["安全策略",{"_index":7320,"t":{"3063":{"position":[[558,4]]},"3706":{"position":[[550,4]]}}}],["安排",{"_index":7505,"t":{"3138":{"position":[[112,2]]}}}],["安装",{"_index":170,"t":{"11":{"position":[[726,2]]},"46":{"position":[[8,2]]},"51":{"position":[[208,2]]},"53":{"position":[[51,2]]},"60":{"position":[[8,2]]},"62":{"position":[[208,2]]},"64":{"position":[[77,2]]},"70":{"position":[[8,2]]},"75":{"position":[[208,2]]},"77":{"position":[[51,2]]},"127":{"position":[[0,2]]},"188":{"position":[[24,2]]},"251":{"position":[[178,2]]},"308":{"position":[[154,2],[263,2]]},"399":{"position":[[735,2]]},"401":{"position":[[300,2],[428,2]]},"534":{"position":[[4,2],[31,2]]},"538":{"position":[[43,2]]},"546":{"position":[[173,2],[239,2]]},"675":{"position":[[125,2]]},"679":{"position":[[94,2]]},"702":{"position":[[22,2]]},"706":{"position":[[77,2]]},"765":{"position":[[9,2]]},"879":{"position":[[50,2]]},"897":{"position":[[513,2],[552,2]]},"941":{"position":[[37,2]]},"1309":{"position":[[131,2],[677,2],[716,2]]},"1319":{"position":[[77,2]]},"1452":{"position":[[0,2]]},"1483":{"position":[[711,2],[996,2]]},"1485":{"position":[[319,2]]},"1516":{"position":[[38,2],[243,2]]},"1518":{"position":[[28,2]]},"1545":{"position":[[50,2],[77,2],[84,2]]},"1547":{"position":[[4,2],[88,2],[432,2]]},"1549":{"position":[[4,2],[228,2],[503,2]]},"1551":{"position":[[1139,2]]},"1683":{"position":[[325,2]]},"1801":{"position":[[80,2]]},"1803":{"position":[[3,2]]},"1971":{"position":[[20,2]]},"1985":{"position":[[20,2],[39,2]]},"2008":{"position":[[20,2],[39,2]]},"2294":{"position":[[755,2]]},"2343":{"position":[[125,2]]},"2357":{"position":[[101,2],[197,2]]},"2597":{"position":[[43,2]]},"2623":{"position":[[143,2]]},"2625":{"position":[[205,2],[223,2],[360,2]]},"2646":{"position":[[53,2]]},"2657":{"position":[[22,2]]},"2680":{"position":[[102,2]]},"2686":{"position":[[45,2],[66,2]]},"2742":{"position":[[2,2],[49,2],[69,2]]},"2745":{"position":[[14,2]]},"2747":{"position":[[14,2]]},"2819":{"position":[[33,2]]},"2836":{"position":[[78,2],[1306,2]]},"2915":{"position":[[122,2]]},"3080":{"position":[[88,2],[135,2],[155,2]]},"3194":{"position":[[15,2]]},"3207":{"position":[[202,2]]},"3213":{"position":[[48,2]]},"3248":{"position":[[43,2]]},"3254":{"position":[[1635,2],[1703,2]]},"3313":{"position":[[10,2],[41,2]]},"3321":{"position":[[24,2]]},"3325":{"position":[[73,2]]},"3327":{"position":[[4,2]]},"3329":{"position":[[107,2]]},"3369":{"position":[[31,2],[75,2],[127,2]]},"3403":{"position":[[77,2]]},"3702":{"position":[[316,2]]},"3704":{"position":[[100,2]]},"3924":{"position":[[3628,2]]},"3934":{"position":[[2545,2]]}}}],["安装包",{"_index":8562,"t":{"3704":{"position":[[70,3]]},"3924":{"position":[[3598,3]]}}}],["完",{"_index":7720,"t":{"3236":{"position":[[231,1]]},"3305":{"position":[[9,1]]}}}],["完全",{"_index":1986,"t":{"300":{"position":[[292,2]]},"587":{"position":[[2230,2]]},"589":{"position":[[37,2]]},"591":{"position":[[0,2]]},"728":{"position":[[25,2]]},"1440":{"position":[[14,2]]},"2341":{"position":[[95,2]]},"2352":{"position":[[178,2]]},"2627":{"position":[[65,2]]},"2815":{"position":[[49,2]]},"2868":{"position":[[121,2]]},"2910":{"position":[[73,2]]},"2917":{"position":[[136,2]]},"3063":{"position":[[345,2]]},"3282":{"position":[[24,2],[32,2]]},"3448":{"position":[[981,2],[1255,2]]},"3646":{"position":[[158,2]]},"3698":{"position":[[291,2]]},"3706":{"position":[[337,2]]},"3772":{"position":[[73,2]]},"3779":{"position":[[356,2]]},"3781":{"position":[[26,2]]},"3802":{"position":[[392,2]]},"3810":{"position":[[28,2]]},"3916":{"position":[[891,2]]},"3928":{"position":[[303,2]]}}}],["完全一致",{"_index":4057,"t":{"1200":{"position":[[267,4]]}}}],["完全免费",{"_index":4517,"t":{"1507":{"position":[[31,4]]}}}],["完善",{"_index":584,"t":{"95":{"position":[[140,2]]},"579":{"position":[[34,2]]},"2307":{"position":[[133,2]]},"2770":{"position":[[250,2]]}}}],["完成",{"_index":77,"t":{"3":{"position":[[921,2]]},"95":{"position":[[68,2]]},"312":{"position":[[0,2]]},"321":{"position":[[552,2]]},"340":{"position":[[1547,2]]},"692":{"position":[[3,2]]},"694":{"position":[[61,2]]},"1046":{"position":[[29,2]]},"1071":{"position":[[56,2]]},"1073":{"position":[[23,2],[58,2]]},"1103":{"position":[[45,2]]},"1424":{"position":[[1405,2]]},"1511":{"position":[[1167,2]]},"1539":{"position":[[404,2],[1650,2]]},"1557":{"position":[[3,2]]},"1576":{"position":[[310,2]]},"1578":{"position":[[93,2]]},"1699":{"position":[[111,2]]},"1711":{"position":[[351,2]]},"1923":{"position":[[44,2]]},"2466":{"position":[[42,2],[60,2]]},"2526":{"position":[[19,2]]},"2643":{"position":[[2,2]]},"2676":{"position":[[2,2]]},"2817":{"position":[[129,2],[269,2]]},"2829":{"position":[[34,2],[48,2],[854,2]]},"2891":{"position":[[117,2]]},"3118":{"position":[[18,2]]},"3244":{"position":[[57,2]]},"3246":{"position":[[20,2]]},"3758":{"position":[[20,2],[47,2]]},"3768":{"position":[[33,2],[70,2]]},"3783":{"position":[[66,2]]},"3795":{"position":[[28,2]]},"3898":{"position":[[25,2]]},"3900":{"position":[[25,2]]},"3902":{"position":[[25,2]]},"3904":{"position":[[25,2]]},"3912":{"position":[[63,2],[2049,2],[2115,2]]},"3950":{"position":[[847,2]]},"3980":{"position":[[431,2]]},"4002":{"position":[[309,2]]}}}],["完整",{"_index":243,"t":{"15":{"position":[[115,2]]},"17":{"position":[[109,2]]},"95":{"position":[[133,2]]},"359":{"position":[[290,2]]},"516":{"position":[[526,2]]},"1374":{"position":[[112,2]]},"1420":{"position":[[578,2],[893,2]]},"1518":{"position":[[33,2]]},"1739":{"position":[[89,2]]},"1801":{"position":[[68,2]]},"2239":{"position":[[102,2]]},"2499":{"position":[[12,2],[72,2]]},"2517":{"position":[[139,2]]},"2619":{"position":[[14,2]]},"2725":{"position":[[1601,2]]},"2745":{"position":[[179,2]]},"2747":{"position":[[182,2]]},"2981":{"position":[[252,2]]},"3001":{"position":[[139,2],[415,2]]},"3080":{"position":[[398,2]]},"3224":{"position":[[1684,2]]},"3256":{"position":[[158,2]]},"3284":{"position":[[13,2]]},"3371":{"position":[[149,2]]},"3377":{"position":[[48,2]]},"3389":{"position":[[555,2]]},"3403":{"position":[[10,2]]},"3414":{"position":[[51,2]]},"3420":{"position":[[314,2]]},"3430":{"position":[[4496,2]]},"3432":{"position":[[422,2]]},"3508":{"position":[[182,2]]},"3620":{"position":[[385,2]]},"3626":{"position":[[496,2]]},"3688":{"position":[[49,2]]},"3702":{"position":[[17,2]]},"3729":{"position":[[16,2]]},"3770":{"position":[[13,2],[25,2]]},"3924":{"position":[[39,2],[622,2],[2089,2],[2897,2],[3211,2]]},"3932":{"position":[[190,2],[603,2]]},"3934":{"position":[[846,2]]},"3978":{"position":[[46,2],[407,2]]},"3984":{"position":[[491,2]]},"3994":{"position":[[307,2]]}}}],["完整性",{"_index":7838,"t":{"3284":{"position":[[32,3]]}}}],["完毕",{"_index":48,"t":{"3":{"position":[[398,2]]},"2184":{"position":[[235,2]]},"3287":{"position":[[2702,2]]},"3385":{"position":[[52,2]]}}}],["完美",{"_index":5474,"t":{"1775":{"position":[[3836,2]]}}}],["官",{"_index":1453,"t":{"194":{"position":[[73,1]]},"306":{"position":[[101,1]]},"331":{"position":[[106,1]]},"562":{"position":[[55,1]]},"3213":{"position":[[21,1]]},"3238":{"position":[[13,1]]},"3240":{"position":[[59,1]]},"3273":{"position":[[1007,1]]}}}],["官方",{"_index":2509,"t":{"423":{"position":[[133,2]]},"461":{"position":[[83,2]]},"540":{"position":[[80,2]]},"550":{"position":[[617,2]]},"587":{"position":[[1014,2]]},"639":{"position":[[472,2]]},"899":{"position":[[681,2]]},"1389":{"position":[[296,2]]},"1418":{"position":[[328,2]]},"1468":{"position":[[274,2]]},"1503":{"position":[[12,2]]},"1511":{"position":[[4103,2]]},"1530":{"position":[[117,2]]},"1537":{"position":[[19,2]]},"1547":{"position":[[438,2]]},"1549":{"position":[[509,2]]},"1947":{"position":[[141,2]]},"1965":{"position":[[13,2]]},"1969":{"position":[[103,2],[144,2]]},"1983":{"position":[[15,2],[56,2]]},"2006":{"position":[[15,2],[56,2]]},"2564":{"position":[[206,2]]},"2573":{"position":[[200,2]]},"2593":{"position":[[13,2]]},"2772":{"position":[[15,2],[56,2]]},"2860":{"position":[[48,2],[89,2]]},"2881":{"position":[[329,2]]},"2897":{"position":[[696,2]]},"3069":{"position":[[297,2]]},"3138":{"position":[[166,2]]},"3150":{"position":[[213,2]]},"3205":{"position":[[57,2]]},"3248":{"position":[[94,2]]},"3250":{"position":[[105,2]]},"3307":{"position":[[173,2]]},"3315":{"position":[[7,2]]},"3405":{"position":[[81,2]]},"3440":{"position":[[65,2]]},"3942":{"position":[[229,2]]},"3982":{"position":[[39,2]]},"3998":{"position":[[778,2]]},"4000":{"position":[[797,2]]}}}],["官方网站",{"_index":4415,"t":{"1483":{"position":[[800,4]]},"3126":{"position":[[59,4]]}}}],["定",{"_index":3944,"t":{"1082":{"position":[[19,1]]},"2735":{"position":[[408,1]]}}}],["定义",{"_index":185,"t":{"11":{"position":[[835,2]]},"112":{"position":[[103,2]]},"208":{"position":[[24,2]]},"210":{"position":[[553,2],[622,2]]},"445":{"position":[[883,2]]},"506":{"position":[[33,2]]},"522":{"position":[[25,2]]},"528":{"position":[[20,2],[166,2],[611,2]]},"534":{"position":[[25,2]]},"698":{"position":[[314,2]]},"818":{"position":[[63,2]]},"855":{"position":[[128,2]]},"857":{"position":[[124,2]]},"919":{"position":[[19,2],[26,2]]},"935":{"position":[[0,2]]},"945":{"position":[[0,2],[130,2]]},"947":{"position":[[109,2],[601,2]]},"1139":{"position":[[7,2]]},"1223":{"position":[[103,2]]},"1414":{"position":[[9,2]]},"1539":{"position":[[3,2],[573,2],[801,2],[1030,2],[1705,2],[1747,2],[1858,2]]},"1611":{"position":[[850,2]]},"1703":{"position":[[53,2],[159,2]]},"1705":{"position":[[0,2]]},"1711":{"position":[[238,2],[927,2]]},"1759":{"position":[[7,2]]},"1761":{"position":[[609,2]]},"1763":{"position":[[13,2],[225,2],[248,2]]},"1767":{"position":[[105,2]]},"1769":{"position":[[93,2]]},"1771":{"position":[[89,2]]},"1775":{"position":[[3710,2],[3813,2],[3832,2],[3869,2]]},"1795":{"position":[[0,2]]},"1819":{"position":[[856,2]]},"1869":{"position":[[58,2]]},"1873":{"position":[[5,2]]},"1877":{"position":[[105,2],[160,2]]},"1883":{"position":[[54,2]]},"1909":{"position":[[61,2]]},"2294":{"position":[[883,2]]},"2424":{"position":[[4,2]]},"2442":{"position":[[113,2]]},"2575":{"position":[[39,2]]},"2579":{"position":[[30,2],[591,2]]},"2591":{"position":[[131,2]]},"2733":{"position":[[79,2]]},"2735":{"position":[[69,2]]},"2815":{"position":[[18,2]]},"2879":{"position":[[21,2]]},"2912":{"position":[[127,2]]},"3063":{"position":[[562,2]]},"3152":{"position":[[32,2]]},"3154":{"position":[[0,2],[213,2],[289,2],[529,2],[611,2],[751,2]]},"3282":{"position":[[60,2]]},"3389":{"position":[[193,2]]},"3391":{"position":[[91,2]]},"3393":{"position":[[120,2],[170,2]]},"3397":{"position":[[878,2]]},"3434":{"position":[[1661,2],[1865,2]]},"3483":{"position":[[55,2]]},"3583":{"position":[[5,2]]},"3608":{"position":[[98,2]]},"3622":{"position":[[24,2]]},"3626":{"position":[[296,2]]},"3664":{"position":[[531,2]]},"3694":{"position":[[85,2]]},"3698":{"position":[[43,2]]},"3704":{"position":[[182,2]]},"3706":{"position":[[554,2]]},"3708":{"position":[[68,2],[557,2]]},"3716":{"position":[[103,2]]},"3727":{"position":[[46,2]]},"3750":{"position":[[0,2]]},"3762":{"position":[[0,2]]},"3826":{"position":[[158,2]]},"3924":{"position":[[3716,2]]},"3938":{"position":[[1249,2]]},"3962":{"position":[[94,2]]},"3978":{"position":[[871,2]]}}}],["定义方法",{"_index":3616,"t":{"832":{"position":[[14,4]]}}}],["定义语言",{"_index":6389,"t":{"2517":{"position":[[43,4]]}}}],["定价",{"_index":7239,"t":{"2915":{"position":[[229,2],[234,2]]}}}],["定位",{"_index":1299,"t":{"182":{"position":[[246,2]]},"941":{"position":[[54,2],[215,2]]},"3108":{"position":[[173,2]]},"3110":{"position":[[159,2]]},"3120":{"position":[[78,2]]},"3352":{"position":[[66,2]]},"3414":{"position":[[67,2],[141,2],[217,2]]},"3978":{"position":[[1290,2]]}}}],["定位器",{"_index":2773,"t":{"510":{"position":[[522,3],[565,3]]},"514":{"position":[[490,3]]},"516":{"position":[[761,3]]},"522":{"position":[[95,3]]},"524":{"position":[[521,3]]},"698":{"position":[[935,3]]},"747":{"position":[[717,3]]},"903":{"position":[[19,3],[57,3]]},"911":{"position":[[210,3]]},"939":{"position":[[23,3],[74,3],[86,3],[114,3]]},"941":{"position":[[9,3],[24,3],[28,3],[65,3],[180,3],[192,3]]},"945":{"position":[[8,3],[83,3],[127,3]]},"947":{"position":[[49,3],[352,3],[456,3],[466,3],[504,3],[527,3],[864,3],[996,3]]},"1035":{"position":[[33,3]]},"1041":{"position":[[33,3]]},"1056":{"position":[[411,3],[430,3],[466,3],[552,3]]},"1066":{"position":[[351,3],[367,3],[383,3],[902,3],[1581,3],[1596,3],[1728,3]]},"1202":{"position":[[36,3]]},"1277":{"position":[[195,3]]},"1311":{"position":[[537,3]]},"1317":{"position":[[443,3]]},"1775":{"position":[[137,3]]},"2925":{"position":[[497,3]]},"2941":{"position":[[497,3]]},"2955":{"position":[[497,3]]},"3126":{"position":[[160,3]]},"3958":{"position":[[26,3]]},"3962":{"position":[[214,3]]},"3972":{"position":[[638,3]]},"3992":{"position":[[1941,3],[3447,3],[3743,3]]},"3994":{"position":[[304,3]]},"3996":{"position":[[505,3]]},"3998":{"position":[[153,3]]}}}],["定制",{"_index":2336,"t":{"373":{"position":[[173,2]]},"3708":{"position":[[62,2]]}}}],["定时",{"_index":2633,"t":{"469":{"position":[[70,2]]},"488":{"position":[[33,2],[69,2]]},"1383":{"position":[[245,2]]},"1711":{"position":[[693,2]]},"2239":{"position":[[162,2]]},"2391":{"position":[[41,2],[177,2]]},"2393":{"position":[[5,2],[34,2]]},"2395":{"position":[[18,2]]},"2486":{"position":[[23,2],[61,2]]},"2490":{"position":[[9,2],[65,2]]},"2823":{"position":[[33,2],[71,2]]},"2829":{"position":[[6,2]]},"3246":{"position":[[35,2]]},"3758":{"position":[[93,2]]},"3760":{"position":[[6,2],[16,2]]},"3791":{"position":[[1330,2]]},"3910":{"position":[[387,2],[2078,2],[2521,2]]},"3912":{"position":[[1793,2],[2721,2]]},"3920":{"position":[[275,2],[1987,2]]},"3942":{"position":[[451,2],[484,2]]},"3946":{"position":[[375,2]]},"3948":{"position":[[345,2]]},"3950":{"position":[[7,2],[382,2],[905,2]]},"3954":{"position":[[612,2]]},"3958":{"position":[[288,2]]},"3960":{"position":[[42,2],[98,2],[430,2]]},"3962":{"position":[[237,2],[1099,2]]},"3968":{"position":[[621,2]]},"3974":{"position":[[249,2],[658,2],[877,2]]},"3976":{"position":[[9,2],[71,2],[615,2]]},"3978":{"position":[[1107,2]]}}}],["定时器",{"_index":6282,"t":{"2398":{"position":[[97,3],[106,3]]},"2442":{"position":[[2041,3]]},"2488":{"position":[[17,3]]}}}],["定购",{"_index":7201,"t":{"2910":{"position":[[250,2],[263,2],[416,2]]}}}],["宝贵",{"_index":9385,"t":{"3926":{"position":[[148,2]]}}}],["实体",{"_index":2762,"t":{"504":{"position":[[135,2]]},"532":{"position":[[87,2],[140,2]]},"567":{"position":[[395,2]]},"570":{"position":[[777,2],[844,2],[852,2],[1182,2],[1225,2],[1279,2],[1355,2],[1417,2],[1554,2],[1754,2]]},"653":{"position":[[23,2]]},"677":{"position":[[223,2]]},"694":{"position":[[15,2],[31,2]]},"696":{"position":[[948,2],[992,2],[1036,2],[2165,2],[2217,2],[3095,2],[3139,2],[3774,2],[3821,2],[4701,2]]},"698":{"position":[[335,2],[887,2],[1093,2]]},"704":{"position":[[223,2]]},"708":{"position":[[510,2],[520,2]]},"739":{"position":[[52,2],[75,2]]},"743":{"position":[[18,2]]},"747":{"position":[[533,2],[753,2]]},"749":{"position":[[18,2]]},"751":{"position":[[28,2],[47,2],[54,2]]},"767":{"position":[[581,2]]},"810":{"position":[[160,2]]},"812":{"position":[[168,2]]},"814":{"position":[[159,2]]},"816":{"position":[[167,2]]},"844":{"position":[[12,2]]},"846":{"position":[[11,2],[116,2],[133,2]]},"877":{"position":[[738,2]]},"887":{"position":[[19,2],[55,2],[80,2],[109,2],[134,2],[165,2]]},"889":{"position":[[307,2]]},"911":{"position":[[182,2]]},"933":{"position":[[607,2]]},"939":{"position":[[35,2],[102,2]]},"949":{"position":[[105,2],[367,2],[433,2],[497,2],[556,2],[709,2]]},"986":{"position":[[53,2],[93,2]]},"988":{"position":[[396,2]]},"992":{"position":[[26,2],[64,2]]},"994":{"position":[[46,2],[104,2]]},"1000":{"position":[[36,2],[97,2]]},"1002":{"position":[[36,2],[97,2]]},"1004":{"position":[[42,2],[109,2]]},"1006":{"position":[[42,2],[109,2]]},"1008":{"position":[[41,2],[107,2]]},"1010":{"position":[[125,2],[191,2]]},"1037":{"position":[[329,2],[543,2]]},"1060":{"position":[[20,2]]},"1107":{"position":[[98,2]]},"1109":{"position":[[33,2]]},"1111":{"position":[[172,2]]},"1113":{"position":[[170,2]]},"1115":{"position":[[170,2]]},"1117":{"position":[[1754,2]]},"1119":{"position":[[159,2]]},"1121":{"position":[[167,2]]},"1123":{"position":[[143,2]]},"1129":{"position":[[252,2],[1086,2]]},"1149":{"position":[[5,2],[34,2]]},"1194":{"position":[[33,2]]},"1214":{"position":[[16,2]]},"1353":{"position":[[23,2]]},"1364":{"position":[[457,2]]},"1759":{"position":[[10,2],[16,2],[21,2]]},"1761":{"position":[[538,2],[550,2]]},"1763":{"position":[[15,2],[32,2],[41,2],[64,2],[98,2],[131,2],[201,2],[223,2],[244,2]]},"1765":{"position":[[15,2],[39,2]]},"1773":{"position":[[289,2]]},"1775":{"position":[[3716,2]]},"1777":{"position":[[22,2]]},"1779":{"position":[[358,2]]},"1781":{"position":[[426,2],[475,2]]},"1787":{"position":[[5,2]]},"1832":{"position":[[119,2]]},"2345":{"position":[[52,2]]},"2619":{"position":[[33,2]]},"2682":{"position":[[68,2]]},"2935":{"position":[[43,2]]},"2937":{"position":[[1045,2]]},"3126":{"position":[[335,2]]},"3131":{"position":[[139,2]]},"3211":{"position":[[119,2],[126,2]]},"3267":{"position":[[469,2]]},"3269":{"position":[[0,2]]},"3271":{"position":[[0,2],[23,2]]},"3273":{"position":[[599,2]]},"3914":{"position":[[3137,2]]},"3932":{"position":[[1276,2],[1285,2]]},"3936":{"position":[[304,2],[584,2]]},"3952":{"position":[[487,2]]},"3954":{"position":[[195,2]]},"3964":{"position":[[555,2]]},"3972":{"position":[[330,2]]},"3978":{"position":[[560,2]]},"3982":{"position":[[812,2]]},"3984":{"position":[[869,2]]},"3986":{"position":[[624,2]]},"3988":{"position":[[11,2]]},"3992":{"position":[[1944,2]]},"3994":{"position":[[1469,2],[1595,2],[1662,2]]},"3996":{"position":[[434,2],[509,2],[542,2],[1495,2]]},"3998":{"position":[[67,2],[360,2],[428,2],[596,2],[753,2]]}}}],["实体模型",{"_index":3312,"t":{"677":{"position":[[19,4],[54,4],[76,4],[105,4],[146,4],[213,4]]},"704":{"position":[[19,4],[54,4],[76,4],[105,4],[146,4],[213,4]]},"3954":{"position":[[709,4]]}}}],["实体类",{"_index":157,"t":{"11":{"position":[[660,3]]},"1775":{"position":[[57,3],[80,3],[95,3],[111,3],[127,3]]},"2294":{"position":[[689,3]]}}}],["实例",{"_index":1606,"t":{"218":{"position":[[129,2]]},"245":{"position":[[101,2]]},"247":{"position":[[99,2],[209,2]]},"255":{"position":[[289,2]]},"274":{"position":[[182,2]]},"435":{"position":[[851,2]]},"494":{"position":[[3,2],[383,2]]},"903":{"position":[[84,2]]},"1223":{"position":[[266,2],[284,2]]},"1225":{"position":[[49,2]]},"1234":{"position":[[893,2]]},"1385":{"position":[[101,2]]},"1387":{"position":[[19,2]]},"1394":{"position":[[96,2]]},"1403":{"position":[[27,2]]},"1405":{"position":[[116,2]]},"1408":{"position":[[1044,2],[1096,2],[1299,2]]},"1412":{"position":[[125,2],[277,2]]},"1414":{"position":[[18,2],[60,2]]},"1416":{"position":[[332,2]]},"1418":{"position":[[132,2],[191,2]]},"1424":{"position":[[680,2]]},"1811":{"position":[[79,2]]},"1847":{"position":[[83,2],[116,2]]},"1851":{"position":[[226,2],[505,2],[753,2],[1025,2]]},"1907":{"position":[[309,2],[443,2]]},"2348":{"position":[[43,2]]},"2442":{"position":[[135,2]]},"2713":{"position":[[74,2]]},"2717":{"position":[[77,2],[157,2],[215,2],[229,2]]},"2912":{"position":[[108,2]]},"3160":{"position":[[24,2]]},"3162":{"position":[[32,2]]},"3168":{"position":[[21,2]]},"3170":{"position":[[28,2]]},"3289":{"position":[[36,2]]},"3385":{"position":[[15,2],[42,2]]},"3434":{"position":[[238,2]]},"3452":{"position":[[611,2]]},"3470":{"position":[[101,2]]},"3579":{"position":[[58,2],[119,2],[172,2],[203,2],[235,2]]},"3779":{"position":[[1576,2]]},"3802":{"position":[[2333,2]]},"3824":{"position":[[189,2]]},"3916":{"position":[[3607,2]]},"3918":{"position":[[3747,2]]}}}],["实则",{"_index":7168,"t":{"2885":{"position":[[19,2]]},"3844":{"position":[[1169,2]]}}}],["实施",{"_index":5400,"t":{"1747":{"position":[[31,2]]}}}],["实时",{"_index":2595,"t":{"453":{"position":[[277,2],[334,2]]},"591":{"position":[[62,2]]},"941":{"position":[[49,2]]},"2701":{"position":[[66,2]]},"2729":{"position":[[557,2],[598,2]]},"2740":{"position":[[102,2]]},"3078":{"position":[[136,2]]},"3082":{"position":[[0,2]]},"3136":{"position":[[41,2],[104,2]]},"3138":{"position":[[15,2]]},"3142":{"position":[[35,2],[56,2]]},"3982":{"position":[[893,2]]},"3988":{"position":[[86,2]]}}}],["实现",{"_index":692,"t":{"110":{"position":[[80,2]]},"112":{"position":[[0,2],[22,2],[97,2],[126,2]]},"121":{"position":[[36,2],[142,2]]},"127":{"position":[[1530,2],[1544,2],[1558,2]]},"131":{"position":[[40,2]]},"152":{"position":[[71,2]]},"216":{"position":[[54,2]]},"220":{"position":[[795,2]]},"239":{"position":[[210,2],[253,2],[296,2]]},"243":{"position":[[34,2]]},"245":{"position":[[42,2],[166,2],[205,2]]},"247":{"position":[[17,2]]},"255":{"position":[[29,2]]},"288":{"position":[[311,2]]},"336":{"position":[[369,2]]},"340":{"position":[[78,2],[170,2]]},"401":{"position":[[180,2]]},"404":{"position":[[186,2]]},"423":{"position":[[8,2]]},"461":{"position":[[55,2],[77,2]]},"469":{"position":[[68,2]]},"488":{"position":[[25,2],[64,2]]},"500":{"position":[[119,2]]},"512":{"position":[[125,2]]},"526":{"position":[[17,2]]},"572":{"position":[[28,2]]},"574":{"position":[[11,2]]},"585":{"position":[[590,2]]},"587":{"position":[[46,2],[2088,2]]},"591":{"position":[[83,2]]},"615":{"position":[[47,2]]},"730":{"position":[[43,2]]},"741":{"position":[[14,2],[26,2]]},"844":{"position":[[64,2]]},"846":{"position":[[60,2],[142,2]]},"879":{"position":[[34,2]]},"903":{"position":[[23,2]]},"941":{"position":[[174,2]]},"943":{"position":[[2,2],[44,2]]},"990":{"position":[[56,2]]},"992":{"position":[[68,2]]},"994":{"position":[[108,2]]},"996":{"position":[[60,2]]},"998":{"position":[[100,2]]},"1000":{"position":[[101,2]]},"1002":{"position":[[101,2]]},"1004":{"position":[[113,2]]},"1006":{"position":[[113,2]]},"1008":{"position":[[111,2]]},"1010":{"position":[[195,2]]},"1012":{"position":[[97,2]]},"1014":{"position":[[107,2]]},"1035":{"position":[[36,2]]},"1041":{"position":[[43,2],[452,2],[818,2],[1361,2]]},"1050":{"position":[[53,2]]},"1223":{"position":[[29,2]]},"1279":{"position":[[86,2]]},"1358":{"position":[[44,2]]},"1360":{"position":[[10,2]]},"1385":{"position":[[115,2]]},"1389":{"position":[[38,2],[130,2],[211,2],[256,2]]},"1405":{"position":[[119,2],[137,2]]},"1408":{"position":[[40,2],[1031,2],[1268,2]]},"1410":{"position":[[46,2]]},"1412":{"position":[[15,2],[31,2],[157,2],[176,2],[274,2],[343,2]]},"1416":{"position":[[142,2],[357,2],[373,2],[380,2]]},"1420":{"position":[[6,2],[16,2],[38,2],[648,2]]},"1424":{"position":[[155,2],[2034,2]]},"1430":{"position":[[20,2],[73,2]]},"1432":{"position":[[66,2]]},"1440":{"position":[[303,2],[406,2],[425,2],[648,2]]},"1511":{"position":[[379,2]]},"1539":{"position":[[1645,2]]},"1545":{"position":[[72,2]]},"1578":{"position":[[26,2],[138,2]]},"1589":{"position":[[117,2]]},"1633":{"position":[[19,2]]},"1691":{"position":[[32,2]]},"1697":{"position":[[16,2]]},"1699":{"position":[[13,2],[26,2]]},"1703":{"position":[[67,2]]},"1707":{"position":[[45,2]]},"1711":{"position":[[940,2],[957,2]]},"1783":{"position":[[55,2]]},"1793":{"position":[[16,2]]},"1795":{"position":[[32,2],[2851,2]]},"1797":{"position":[[32,2],[58,2]]},"1799":{"position":[[125,2],[137,2]]},"1805":{"position":[[60,2]]},"1807":{"position":[[38,2]]},"1819":{"position":[[57,2],[61,2],[882,2],[929,2]]},"1855":{"position":[[0,2]]},"1869":{"position":[[35,2]]},"1894":{"position":[[10,2],[32,2]]},"1896":{"position":[[27,2]]},"1903":{"position":[[328,2],[498,2],[508,2],[524,2],[570,2]]},"1911":{"position":[[9,2]]},"1923":{"position":[[87,2],[119,2]]},"1947":{"position":[[86,2]]},"2208":{"position":[[152,2]]},"2210":{"position":[[3,2]]},"2245":{"position":[[116,2]]},"2247":{"position":[[21,2]]},"2303":{"position":[[79,2]]},"2305":{"position":[[60,2]]},"2307":{"position":[[121,2]]},"2309":{"position":[[66,2],[106,2],[128,2]]},"2311":{"position":[[43,2],[118,2],[134,2]]},"2315":{"position":[[43,2]]},"2319":{"position":[[57,2],[63,2]]},"2321":{"position":[[28,2],[46,2],[74,2]]},"2331":{"position":[[184,2]]},"2335":{"position":[[59,2]]},"2343":{"position":[[84,2]]},"2345":{"position":[[46,2],[783,2],[851,2]]},"2354":{"position":[[23,2]]},"2357":{"position":[[42,2],[318,2],[496,2]]},"2395":{"position":[[16,2],[112,2]]},"2424":{"position":[[37,2]]},"2442":{"position":[[85,2],[2053,2],[2070,2]]},"2448":{"position":[[152,2]]},"2450":{"position":[[3,2]]},"2486":{"position":[[57,2]]},"2564":{"position":[[155,2]]},"2617":{"position":[[19,2]]},"2684":{"position":[[394,2]]},"2688":{"position":[[73,2]]},"2701":{"position":[[53,2]]},"2725":{"position":[[635,2],[1119,2]]},"2727":{"position":[[101,2]]},"2729":{"position":[[130,2]]},"2782":{"position":[[35,2]]},"2790":{"position":[[0,2]]},"2813":{"position":[[1147,2]]},"2817":{"position":[[164,2]]},"2819":{"position":[[471,2],[617,2]]},"2823":{"position":[[25,2]]},"2836":{"position":[[582,2],[1788,2]]},"2843":{"position":[[271,2]]},"2846":{"position":[[379,2]]},"2856":{"position":[[36,2],[1737,2],[1780,2]]},"2889":{"position":[[29,2]]},"2912":{"position":[[33,2],[203,2]]},"2921":{"position":[[18,2]]},"2933":{"position":[[14,2],[626,2]]},"2935":{"position":[[30,2]]},"2937":{"position":[[93,2]]},"2949":{"position":[[14,2],[474,2]]},"2963":{"position":[[14,2],[493,2]]},"2967":{"position":[[38,2]]},"3001":{"position":[[209,2]]},"3071":{"position":[[219,2]]},"3126":{"position":[[373,2]]},"3140":{"position":[[6,2],[71,2],[96,2]]},"3242":{"position":[[26,2]]},"3287":{"position":[[1222,2],[1400,2]]},"3387":{"position":[[33,2]]},"3389":{"position":[[60,2]]},"3393":{"position":[[176,2]]},"3434":{"position":[[76,2]]},"3444":{"position":[[58,2]]},"3466":{"position":[[1107,2]]},"3478":{"position":[[10,2]]},"3618":{"position":[[34,2]]},"3620":{"position":[[70,2]]},"3638":{"position":[[58,2]]},"3704":{"position":[[831,2]]},"3708":{"position":[[25,2],[52,2],[581,2]]},"3729":{"position":[[48,2],[59,2]]},"3752":{"position":[[87,2]]},"3774":{"position":[[18,2]]},"3777":{"position":[[307,2]]},"3779":{"position":[[138,2],[223,2]]},"3783":{"position":[[26,2]]},"3787":{"position":[[38,2]]},"3791":{"position":[[0,2]]},"3802":{"position":[[135,2]]},"3804":{"position":[[6,2]]},"3806":{"position":[[97,2]]},"3808":{"position":[[62,2]]},"3817":{"position":[[144,2]]},"3828":{"position":[[28,2]]},"3832":{"position":[[249,2]]},"3860":{"position":[[18,2]]},"3910":{"position":[[23,2]]},"3912":{"position":[[1974,2]]},"3914":{"position":[[3493,2]]},"3918":{"position":[[912,2]]},"3924":{"position":[[26,2],[609,2],[739,2],[2071,2],[4371,2]]},"3926":{"position":[[681,2]]},"3928":{"position":[[248,2],[294,2]]},"3930":{"position":[[428,2]]},"3934":{"position":[[28,2],[493,2],[2107,2],[2525,2]]},"3938":{"position":[[496,2]]},"3940":{"position":[[251,2]]},"3952":{"position":[[75,2]]},"3954":{"position":[[201,2],[271,2],[279,2]]},"3958":{"position":[[138,2]]},"3964":{"position":[[20,2],[593,2]]},"3966":{"position":[[1535,2]]},"3968":{"position":[[575,2]]},"3976":{"position":[[343,2]]},"3978":{"position":[[1687,2]]},"3986":{"position":[[306,2]]},"3992":{"position":[[2904,2]]},"3994":{"position":[[1632,2],[1652,2]]}}}],["实践",{"_index":2327,"t":{"373":{"position":[[4,2],[17,2]]},"2807":{"position":[[3,2]]}}}],["实际",{"_index":1792,"t":{"245":{"position":[[84,2]]},"286":{"position":[[72,2]]},"340":{"position":[[534,2]]},"451":{"position":[[1,2]]},"482":{"position":[[396,2]]},"502":{"position":[[3,2]]},"1269":{"position":[[222,2]]},"1279":{"position":[[49,2]]},"1541":{"position":[[238,2]]},"1651":{"position":[[35,2]]},"1657":{"position":[[158,2]]},"1719":{"position":[[45,2]]},"1775":{"position":[[1,2]]},"2418":{"position":[[674,2]]},"2770":{"position":[[280,2]]},"2910":{"position":[[237,2]]},"3350":{"position":[[71,2]]},"3405":{"position":[[40,2]]},"3577":{"position":[[33,2]]},"3626":{"position":[[44,2]]},"3768":{"position":[[2430,2]]},"3793":{"position":[[193,2]]},"3844":{"position":[[1188,2],[1333,2]]},"3914":{"position":[[2168,2]]},"3928":{"position":[[137,2]]}}}],["实际上",{"_index":210,"t":{"13":{"position":[[0,3]]},"119":{"position":[[2,3]]},"265":{"position":[[4,3]]},"363":{"position":[[4,3]]},"482":{"position":[[514,3]]},"981":{"position":[[16,3]]},"986":{"position":[[31,3]]},"1214":{"position":[[134,3]]},"1532":{"position":[[15,3]]},"1570":{"position":[[13,3]]},"1589":{"position":[[206,3]]},"2278":{"position":[[29,3]]},"2283":{"position":[[73,3]]},"2296":{"position":[[0,3]]},"2418":{"position":[[805,3]]},"2703":{"position":[[2,3]]},"2719":{"position":[[7,3]]},"2735":{"position":[[426,3]]},"2891":{"position":[[122,3]]},"3069":{"position":[[34,3]]},"3352":{"position":[[565,3]]},"3360":{"position":[[126,3]]},"3688":{"position":[[73,3]]},"3718":{"position":[[30,3]]}}}],["实验",{"_index":1315,"t":{"186":{"position":[[79,2],[156,2]]}}}],["审计",{"_index":682,"t":{"108":{"position":[[35,2]]},"110":{"position":[[60,2],[73,2],[97,2],[111,2]]},"112":{"position":[[26,2],[36,2]]},"114":{"position":[[35,2]]},"565":{"position":[[60,2],[73,2],[92,2]]},"567":{"position":[[405,2]]},"570":{"position":[[850,2],[1736,2],[2051,2],[2096,2]]},"572":{"position":[[254,2],[1216,2]]},"574":{"position":[[4,2],[15,2],[30,2]]},"1923":{"position":[[114,2]]},"2782":{"position":[[184,2]]},"3412":{"position":[[166,2]]},"3458":{"position":[[895,2]]},"3934":{"position":[[1144,2]]},"3990":{"position":[[690,2]]}}}],["客户",{"_index":1130,"t":{"148":{"position":[[546,2]]},"182":{"position":[[177,2]]},"1509":{"position":[[216,2]]},"2782":{"position":[[52,2],[116,2]]},"2910":{"position":[[229,2],[372,2]]},"2912":{"position":[[118,2]]},"2915":{"position":[[155,2]]},"2919":{"position":[[103,2],[124,2]]},"2939":{"position":[[22,2]]},"2953":{"position":[[22,2]]}}}],["客户端",{"_index":725,"t":{"112":{"position":[[799,3]]},"114":{"position":[[552,3]]},"121":{"position":[[234,3],[271,3],[320,3]]},"144":{"position":[[590,3]]},"148":{"position":[[0,3],[152,3],[341,3]]},"300":{"position":[[150,3]]},"302":{"position":[[99,3]]},"329":{"position":[[73,3],[113,3]]},"415":{"position":[[171,3]]},"587":{"position":[[982,3]]},"1401":{"position":[[12,3]]},"1566":{"position":[[527,3]]},"1741":{"position":[[443,3]]},"1925":{"position":[[648,3]]},"2251":{"position":[[130,3]]},"2544":{"position":[[114,3],[147,3]]},"2547":{"position":[[108,3]]},"2843":{"position":[[76,3]]},"2989":{"position":[[17,3]]},"2991":{"position":[[177,3]]},"3142":{"position":[[82,3]]},"3146":{"position":[[15,3]]},"3150":{"position":[[28,3],[69,3]]},"3154":{"position":[[220,3],[286,3],[536,3],[608,3],[697,3]]},"3156":{"position":[[28,3],[355,3]]},"3173":{"position":[[12,3]]},"3175":{"position":[[15,3]]},"3177":{"position":[[15,3]]},"3179":{"position":[[19,3]]},"3181":{"position":[[30,3]]},"3183":{"position":[[20,3]]},"3185":{"position":[[31,3]]},"3187":{"position":[[26,3]]},"3189":{"position":[[408,3]]},"3194":{"position":[[40,3]]},"3446":{"position":[[1027,3]]},"3573":{"position":[[17,3],[28,3]]},"3575":{"position":[[119,3],[370,3]]},"3577":{"position":[[153,3]]},"3579":{"position":[[66,3],[274,3],[407,3]]},"3581":{"position":[[20,3]]},"3587":{"position":[[270,3]]},"3589":{"position":[[255,3]]},"3591":{"position":[[45,3]]},"3593":{"position":[[78,3]]},"3620":{"position":[[376,3],[406,3]]},"3626":{"position":[[359,3],[445,3],[542,3]]},"3690":{"position":[[78,3]]},"3712":{"position":[[33,3]]},"3914":{"position":[[2288,3],[3044,3],[3384,3]]},"3918":{"position":[[3260,3]]},"3928":{"position":[[1589,3]]},"3934":{"position":[[279,3],[979,3]]},"3938":{"position":[[73,3],[716,3],[882,3]]},"3960":{"position":[[520,3]]},"3962":{"position":[[1616,3]]},"3992":{"position":[[704,3]]},"3996":{"position":[[327,3]]}}}],["客服",{"_index":7491,"t":{"3138":{"position":[[46,2]]}}}],["宣传",{"_index":4902,"t":{"1513":{"position":[[17,2]]}}}],["宣布",{"_index":463,"t":{"85":{"position":[[12,2]]}}}],["宣称",{"_index":1304,"t":{"184":{"position":[[56,2]]}}}],["家",{"_index":1209,"t":{"168":{"position":[[69,1]]},"1511":{"position":[[3138,1]]}}}],["容器",{"_index":40,"t":{"3":{"position":[[317,2]]},"102":{"position":[[240,2]]},"1377":{"position":[[424,2]]},"1385":{"position":[[74,2],[90,2]]},"1387":{"position":[[47,2]]},"1399":{"position":[[13,2]]},"1488":{"position":[[456,2],[1339,2]]},"1495":{"position":[[456,2]]},"2740":{"position":[[78,2]]}}}],["容忍性",{"_index":3946,"t":{"1097":{"position":[[27,3]]}}}],["容易",{"_index":2156,"t":{"336":{"position":[[267,2]]},"457":{"position":[[44,2]]},"587":{"position":[[77,2]]},"799":{"position":[[47,2]]},"1101":{"position":[[47,2]]},"1155":{"position":[[47,2]]},"1291":{"position":[[11,2]]},"1394":{"position":[[91,2]]},"1509":{"position":[[203,2]]},"1511":{"position":[[118,2],[3818,2]]},"1578":{"position":[[47,2]]},"2538":{"position":[[397,2],[476,2],[579,2],[653,2]]},"2684":{"position":[[374,2]]},"2921":{"position":[[28,2]]},"3108":{"position":[[79,2],[120,2]]},"3120":{"position":[[76,2]]},"3250":{"position":[[166,2]]},"3626":{"position":[[217,2]]},"3924":{"position":[[3552,2]]}}}],["容量",{"_index":1266,"t":{"182":{"position":[[55,2]]},"184":{"position":[[1,2]]},"1801":{"position":[[989,2],[1113,2],[1236,2]]},"1803":{"position":[[3159,2],[3307,2],[3430,2]]},"2311":{"position":[[285,2],[381,2]]},"2313":{"position":[[641,2]]}}}],["容错",{"_index":996,"t":{"127":{"position":[[1238,2]]},"245":{"position":[[197,2]]},"2136":{"position":[[83,2]]},"3039":{"position":[[346,2]]},"3041":{"position":[[449,2]]},"3974":{"position":[[565,2]]}}}],["宽",{"_index":6065,"t":{"2261":{"position":[[444,1]]},"3464":{"position":[[492,1]]}}}],["宽松",{"_index":2399,"t":{"399":{"position":[[600,2]]}}}],["宿主",{"_index":7070,"t":{"2803":{"position":[[115,2]]},"2805":{"position":[[1,2]]},"2834":{"position":[[1,2],[107,2]]}}}],["宿主机",{"_index":4392,"t":{"1481":{"position":[[48,3]]}}}],["密",{"_index":5279,"t":{"1691":{"position":[[13,1]]}}}],["密封",{"_index":6112,"t":{"2311":{"position":[[213,2]]}}}],["密码",{"_index":921,"t":{"121":{"position":[[589,2]]},"585":{"position":[[294,2]]},"615":{"position":[[325,2]]},"617":{"position":[[1717,2],[2667,2]]},"1672":{"position":[[48,2]]},"1863":{"position":[[272,2]]},"2201":{"position":[[20,2]]},"3057":{"position":[[126,2]]},"3684":{"position":[[75,2]]}}}],["密钥",{"_index":977,"t":{"127":{"position":[[849,2],[890,2],[898,2],[916,2]]},"1681":{"position":[[57,2]]},"1685":{"position":[[439,2]]},"2132":{"position":[[225,2]]},"3039":{"position":[[45,2],[81,2],[99,2]]},"3041":{"position":[[60,2],[101,2],[109,2],[127,2]]}}}],["富足",{"_index":9409,"t":{"3926":{"position":[[443,2]]}}}],["寓意",{"_index":489,"t":{"85":{"position":[[160,2]]}}}],["察觉",{"_index":5683,"t":{"1821":{"position":[[124,2]]}}}],["寥寥数语",{"_index":7022,"t":{"2770":{"position":[[315,4]]}}}],["对",{"_index":852,"t":{"119":{"position":[[157,1]]},"121":{"position":[[487,1]]},"137":{"position":[[27,1],[124,1]]},"141":{"position":[[4,1]]},"168":{"position":[[0,1]]},"172":{"position":[[27,1]]},"176":{"position":[[0,1]]},"179":{"position":[[100,1]]},"225":{"position":[[87,1]]},"255":{"position":[[218,1],[244,1]]},"336":{"position":[[328,1],[414,1]]},"380":{"position":[[4,1]]},"463":{"position":[[16,1]]},"500":{"position":[[28,1]]},"530":{"position":[[781,1]]},"565":{"position":[[124,1],[151,1],[194,1]]},"570":{"position":[[2039,1],[2673,1]]},"579":{"position":[[12,1]]},"587":{"position":[[40,1]]},"612":{"position":[[102,1]]},"653":{"position":[[157,1]]},"677":{"position":[[104,1]]},"704":{"position":[[104,1]]},"751":{"position":[[16,1]]},"846":{"position":[[948,1]]},"851":{"position":[[713,1]]},"857":{"position":[[79,1],[97,1]]},"1039":{"position":[[782,1]]},"1149":{"position":[[14,1]]},"1200":{"position":[[233,1]]},"1221":{"position":[[18,1]]},"1307":{"position":[[5,1]]},"1358":{"position":[[30,1]]},"1368":{"position":[[12,1]]},"1392":{"position":[[33,1]]},"1394":{"position":[[169,1]]},"1511":{"position":[[65,1],[133,1],[165,1]]},"1513":{"position":[[59,1]]},"1516":{"position":[[16,1]]},"1566":{"position":[[37,1],[536,1]]},"1619":{"position":[[33,1]]},"1627":{"position":[[360,1]]},"1663":{"position":[[26,1]]},"1672":{"position":[[89,1]]},"1697":{"position":[[5,1]]},"1711":{"position":[[814,1]]},"1751":{"position":[[5,1]]},"1761":{"position":[[150,1]]},"1793":{"position":[[5,1]]},"1832":{"position":[[46,1]]},"1837":{"position":[[24,1]]},"1839":{"position":[[0,1],[10,1]]},"1901":{"position":[[305,1]]},"1939":{"position":[[8,1]]},"1969":{"position":[[164,1]]},"1983":{"position":[[76,1]]},"2006":{"position":[[76,1]]},"2182":{"position":[[236,1]]},"2264":{"position":[[45,1]]},"2326":{"position":[[261,1]]},"2426":{"position":[[249,1]]},"2478":{"position":[[461,1]]},"2517":{"position":[[30,1]]},"2542":{"position":[[98,1]]},"2674":{"position":[[448,1]]},"2782":{"position":[[14,1],[86,1],[211,1]]},"2790":{"position":[[73,1]]},"2868":{"position":[[43,1]]},"2881":{"position":[[70,1]]},"2910":{"position":[[342,1]]},"2915":{"position":[[253,1]]},"2919":{"position":[[203,1]]},"2995":{"position":[[9,1]]},"3088":{"position":[[166,1]]},"3096":{"position":[[32,1]]},"3110":{"position":[[102,1],[125,1]]},"3124":{"position":[[36,1]]},"3148":{"position":[[213,1]]},"3150":{"position":[[130,1]]},"3154":{"position":[[696,1],[746,1]]},"3275":{"position":[[395,1]]},"3282":{"position":[[251,1]]},"3350":{"position":[[30,1]]},"3389":{"position":[[10,1],[102,1]]},"3391":{"position":[[32,1]]},"3395":{"position":[[23,1]]},"3416":{"position":[[9,1]]},"3432":{"position":[[2138,1]]},"3434":{"position":[[1631,1]]},"3448":{"position":[[1381,1]]},"3470":{"position":[[168,1]]},"3532":{"position":[[5,1]]},"3571":{"position":[[5,1]]},"3579":{"position":[[2,1]]},"3589":{"position":[[571,1]]},"3622":{"position":[[37,1]]},"3624":{"position":[[12,1],[14,1]]},"3630":{"position":[[738,1]]},"3690":{"position":[[75,1]]},"3708":{"position":[[3875,1]]},"3772":{"position":[[12,1]]},"3916":{"position":[[2487,1]]},"3926":{"position":[[104,1],[531,1]]},"3930":{"position":[[132,1],[785,1]]},"3938":{"position":[[879,1]]},"3942":{"position":[[326,1]]},"3984":{"position":[[546,1]]},"3988":{"position":[[59,1]]},"3994":{"position":[[1660,1]]}}}],["对于",{"_index":2111,"t":{"319":{"position":[[598,2]]},"338":{"position":[[1129,2]]},"486":{"position":[[0,2]]},"633":{"position":[[29,2]]},"1474":{"position":[[97,2]]},"1509":{"position":[[78,2]]},"1566":{"position":[[496,2]]},"1761":{"position":[[328,2]]},"1847":{"position":[[50,2]]},"1901":{"position":[[405,2]]},"1909":{"position":[[147,2]]},"2910":{"position":[[426,2]]},"3092":{"position":[[170,2]]},"3350":{"position":[[50,2]]},"3352":{"position":[[561,2]]},"3414":{"position":[[307,2]]},"3416":{"position":[[256,2]]},"3626":{"position":[[125,2]]},"3844":{"position":[[873,2]]},"3910":{"position":[[490,2]]},"3978":{"position":[[1622,2]]}}}],["对外",{"_index":8922,"t":{"3815":{"position":[[103,2]]}}}],["对应",{"_index":400,"t":{"46":{"position":[[88,2]]},"60":{"position":[[88,2]]},"70":{"position":[[88,2]]},"112":{"position":[[1127,2]]},"306":{"position":[[201,2]]},"314":{"position":[[67,2]]},"316":{"position":[[69,2]]},"319":{"position":[[154,2]]},"321":{"position":[[22,2]]},"344":{"position":[[26,2]]},"346":{"position":[[31,2]]},"348":{"position":[[25,2]]},"373":{"position":[[96,2]]},"429":{"position":[[120,2]]},"570":{"position":[[42,2],[725,2]]},"610":{"position":[[108,2]]},"679":{"position":[[96,2],[131,2]]},"683":{"position":[[43,2]]},"698":{"position":[[274,2],[443,2]]},"715":{"position":[[36,2]]},"915":{"position":[[438,2]]},"933":{"position":[[553,2]]},"981":{"position":[[19,2]]},"1279":{"position":[[835,2]]},"1291":{"position":[[3,2]]},"1309":{"position":[[133,2]]},"1405":{"position":[[19,2],[42,2],[66,2],[90,2]]},"1408":{"position":[[1049,2]]},"1412":{"position":[[11,2]]},"1551":{"position":[[81,2]]},"1631":{"position":[[60,2]]},"1703":{"position":[[38,2]]},"1705":{"position":[[48,2]]},"1741":{"position":[[16,2]]},"1925":{"position":[[989,2]]},"2424":{"position":[[52,2]]},"2538":{"position":[[181,2]]},"2540":{"position":[[18,2]]},"2542":{"position":[[89,2]]},"2649":{"position":[[215,2]]},"2723":{"position":[[41,2]]},"2733":{"position":[[81,2]]},"2735":{"position":[[440,2]]},"2933":{"position":[[540,2]]},"2937":{"position":[[988,2]]},"3055":{"position":[[54,2]]},"3078":{"position":[[68,2]]},"3307":{"position":[[64,2]]},"3321":{"position":[[350,2]]},"3323":{"position":[[494,2]]},"3397":{"position":[[873,2]]},"3815":{"position":[[115,2]]},"3962":{"position":[[1143,2]]},"3978":{"position":[[818,2]]}}}],["对接",{"_index":1901,"t":{"270":{"position":[[117,2]]},"1576":{"position":[[333,2]]},"1578":{"position":[[118,2]]},"3432":{"position":[[3422,2],[3910,2]]},"3612":{"position":[[51,2]]},"3950":{"position":[[700,2]]}}}],["对接口",{"_index":2128,"t":{"325":{"position":[[13,3]]},"3690":{"position":[[43,3]]},"3938":{"position":[[847,3]]}}}],["对方",{"_index":9793,"t":{"3964":{"position":[[786,2]]}}}],["对此",{"_index":490,"t":{"85":{"position":[[168,2]]},"2768":{"position":[[1584,2]]}}}],["对比",{"_index":8047,"t":{"3405":{"position":[[44,2]]},"4000":{"position":[[433,2]]}}}],["对系统",{"_index":685,"t":{"110":{"position":[[13,3]]},"565":{"position":[[13,3]]}}}],["对话框",{"_index":862,"t":{"121":{"position":[[65,3]]}}}],["对象",{"_index":310,"t":{"19":{"position":[[626,2]]},"21":{"position":[[160,2]]},"23":{"position":[[142,2]]},"26":{"position":[[60,2]]},"28":{"position":[[60,2]]},"30":{"position":[[43,2]]},"112":{"position":[[713,2]]},"119":{"position":[[177,2]]},"261":{"position":[[2,2],[36,2],[57,2],[96,2],[121,2]]},"263":{"position":[[2,2],[13,2],[50,2]]},"267":{"position":[[5,2],[31,2],[45,2]]},"270":{"position":[[11,2],[48,2]]},"274":{"position":[[184,2]]},"278":{"position":[[236,2]]},"282":{"position":[[218,2]]},"284":{"position":[[218,2]]},"435":{"position":[[44,2]]},"439":{"position":[[49,2]]},"453":{"position":[[347,2]]},"494":{"position":[[689,2],[838,2],[924,2]]},"500":{"position":[[21,2]]},"502":{"position":[[39,2]]},"528":{"position":[[232,2],[288,2]]},"530":{"position":[[124,2]]},"540":{"position":[[50,2]]},"554":{"position":[[101,2],[108,2]]},"587":{"position":[[41,2]]},"591":{"position":[[40,2]]},"597":{"position":[[588,2]]},"612":{"position":[[12,2],[103,2]]},"929":{"position":[[249,2],[451,2],[604,2],[747,2],[1994,2]]},"949":{"position":[[14,2]]},"986":{"position":[[28,2],[42,2],[65,2]]},"1039":{"position":[[124,2]]},"1103":{"position":[[131,2]]},"1143":{"position":[[68,2]]},"1234":{"position":[[252,2]]},"1236":{"position":[[255,2]]},"1238":{"position":[[295,2]]},"1240":{"position":[[316,2]]},"1279":{"position":[[70,2]]},"1358":{"position":[[12,2]]},"1385":{"position":[[26,2]]},"1389":{"position":[[8,2],[22,2],[35,2],[62,2],[82,2]]},"1392":{"position":[[94,2],[105,2]]},"1394":{"position":[[114,2],[145,2],[157,2]]},"1408":{"position":[[1110,2],[1123,2]]},"1414":{"position":[[29,2]]},"1420":{"position":[[678,2],[936,2]]},"1576":{"position":[[249,2]]},"1711":{"position":[[347,2],[931,2]]},"1741":{"position":[[790,2],[1552,2],[2394,2]]},"1761":{"position":[[16,2],[383,2]]},"1795":{"position":[[923,2]]},"1801":{"position":[[627,2],[697,2],[2097,2],[2857,2],[3322,2]]},"1803":{"position":[[4059,2],[4829,2],[5535,2]]},"1832":{"position":[[56,2]]},"1925":{"position":[[562,2]]},"1933":{"position":[[506,2]]},"1939":{"position":[[69,2]]},"1947":{"position":[[96,2]]},"1995":{"position":[[27,2]]},"2018":{"position":[[27,2]]},"2023":{"position":[[21,2]]},"2171":{"position":[[7,2]]},"2231":{"position":[[142,2]]},"2235":{"position":[[60,2],[184,2]]},"2239":{"position":[[43,2]]},"2341":{"position":[[37,2]]},"2345":{"position":[[221,2]]},"2354":{"position":[[117,2]]},"2357":{"position":[[621,2]]},"2375":{"position":[[8,2],[13,2]]},"2377":{"position":[[8,2]]},"2398":{"position":[[101,2]]},"2442":{"position":[[2044,2]]},"2488":{"position":[[20,2]]},"2609":{"position":[[75,2]]},"2682":{"position":[[10,2],[29,2],[55,2]]},"2684":{"position":[[11,2],[21,2],[430,2],[505,2]]},"2686":{"position":[[21,2]]},"2831":{"position":[[51,2],[113,2]]},"2852":{"position":[[12,2],[157,2]]},"2879":{"position":[[14,2]]},"3001":{"position":[[239,2]]},"3168":{"position":[[40,2],[46,2]]},"3194":{"position":[[416,2]]},"3224":{"position":[[1689,2]]},"3256":{"position":[[99,2],[153,2]]},"3287":{"position":[[1500,2]]},"3291":{"position":[[957,2]]},"3321":{"position":[[288,2],[386,2]]},"3385":{"position":[[37,2]]},"3387":{"position":[[24,2],[253,2]]},"3418":{"position":[[71,2]]},"3420":{"position":[[23,2]]},"3424":{"position":[[40,2]]},"3432":{"position":[[4077,2]]},"3466":{"position":[[737,2]]},"3492":{"position":[[194,2],[199,2]]},"3494":{"position":[[175,2],[180,2]]},"3496":{"position":[[128,2],[133,2]]},"3500":{"position":[[5,2]]},"3510":{"position":[[92,2]]},"3512":{"position":[[84,2]]},"3514":{"position":[[92,2]]},"3516":{"position":[[93,2]]},"3518":{"position":[[100,2]]},"3549":{"position":[[285,2]]},"3601":{"position":[[26,2]]},"3622":{"position":[[169,2]]},"3664":{"position":[[13,2],[51,2],[507,2]]},"3779":{"position":[[56,2],[191,2]]},"3802":{"position":[[53,2],[192,2]]},"3817":{"position":[[56,2],[203,2]]},"3844":{"position":[[709,2],[714,2]]},"3864":{"position":[[46,2]]},"3914":{"position":[[2548,2]]},"3916":{"position":[[1744,2]]},"3922":{"position":[[1562,2]]},"3936":{"position":[[855,2],[1304,2]]},"3940":{"position":[[665,2]]},"3946":{"position":[[67,2],[294,2],[323,2]]},"3948":{"position":[[90,2]]},"3950":{"position":[[621,2]]},"3952":{"position":[[670,2]]},"3956":{"position":[[3120,2]]},"3962":{"position":[[1316,2]]},"3964":{"position":[[373,2],[1089,2]]},"3970":{"position":[[295,2]]},"3972":{"position":[[517,2]]},"3974":{"position":[[31,2],[607,2]]},"3988":{"position":[[298,2]]},"3992":{"position":[[2478,2]]},"3994":{"position":[[719,2]]},"3996":{"position":[[562,2]]},"3998":{"position":[[284,2],[307,2],[573,2],[690,2],[792,2]]},"4000":{"position":[[163,2]]},"4006":{"position":[[298,2]]}}}],["对齐",{"_index":6066,"t":{"2261":{"position":[[445,2]]},"3464":{"position":[[493,2]]}}}],["寻找",{"_index":2706,"t":{"482":{"position":[[903,2]]},"2418":{"position":[[1265,2]]},"3412":{"position":[[79,2]]}}}],["导出",{"_index":1450,"t":{"192":{"position":[[3,2]]},"719":{"position":[[68,2]]},"1589":{"position":[[182,2],[198,2]]},"1623":{"position":[[9,2],[181,2]]},"1641":{"position":[[158,2]]},"1651":{"position":[[16,2]]},"1657":{"position":[[139,2]]},"3992":{"position":[[3160,2]]}}}],["导致",{"_index":184,"t":{"11":{"position":[[816,2]]},"179":{"position":[[156,2]]},"206":{"position":[[123,2]]},"220":{"position":[[843,2]]},"363":{"position":[[21,2]]},"734":{"position":[[47,2],[84,2]]},"1383":{"position":[[66,2]]},"1389":{"position":[[25,2]]},"1432":{"position":[[160,2]]},"1468":{"position":[[74,2]]},"1566":{"position":[[550,2]]},"1832":{"position":[[31,2]]},"2294":{"position":[[864,2]]},"2508":{"position":[[37,2]]},"2538":{"position":[[88,2]]},"2731":{"position":[[50,2]]},"2881":{"position":[[239,2]]},"3078":{"position":[[123,2]]},"3108":{"position":[[169,2]]},"3154":{"position":[[726,2]]},"3207":{"position":[[84,2]]},"3416":{"position":[[275,2]]},"3432":{"position":[[4376,2]]},"3434":{"position":[[2748,2]]},"3470":{"position":[[41,2]]},"3612":{"position":[[28,2]]},"3636":{"position":[[661,2]]},"3696":{"position":[[12,2]]},"3698":{"position":[[62,2]]},"3768":{"position":[[2421,2]]},"3912":{"position":[[1982,2],[2187,2],[2248,2]]},"3914":{"position":[[2409,2],[2490,2],[2871,2],[2925,2],[2980,2]]},"3916":{"position":[[1540,2],[1665,2],[2086,2],[2365,2]]},"3918":{"position":[[3225,2],[3415,2],[3550,2],[3632,2],[3789,2],[3831,2]]},"3922":{"position":[[1357,2],[1433,2],[1496,2],[1879,2],[2091,2],[2226,2]]},"3924":{"position":[[1377,2]]},"3928":{"position":[[242,2]]},"3930":{"position":[[995,2],[1164,2]]},"3932":{"position":[[1108,2],[1281,2],[1316,2]]},"3934":{"position":[[607,2],[848,2],[917,2]]},"3938":{"position":[[539,2]]},"3940":{"position":[[379,2],[420,2]]},"3942":{"position":[[337,2],[386,2]]},"3946":{"position":[[124,2]]},"3948":{"position":[[157,2]]},"3950":{"position":[[442,2],[924,2]]},"3952":{"position":[[303,2],[634,2]]},"3960":{"position":[[439,2],[542,2]]},"3962":{"position":[[1109,2]]},"3964":{"position":[[534,2],[933,2]]},"3974":{"position":[[456,2]]},"3978":{"position":[[1091,2],[1437,2]]},"3982":{"position":[[424,2],[615,2]]},"3986":{"position":[[1549,2]]},"3988":{"position":[[406,2],[443,2]]},"3990":{"position":[[427,2],[487,2]]},"3992":{"position":[[1631,2]]},"3994":{"position":[[1122,2]]}}}],["导致系统",{"_index":1987,"t":{"300":{"position":[[296,4]]}}}],["导航",{"_index":2134,"t":{"325":{"position":[[178,2]]},"1418":{"position":[[287,2]]},"2703":{"position":[[108,2]]},"3211":{"position":[[81,2]]},"3944":{"position":[[526,2]]}}}],["封装",{"_index":2821,"t":{"526":{"position":[[32,2]]},"1483":{"position":[[58,2]]},"1832":{"position":[[54,2]]},"2609":{"position":[[20,2]]},"3224":{"position":[[1336,2]]},"3256":{"position":[[102,2]]},"3275":{"position":[[404,2]]},"3291":{"position":[[1994,2]]}}}],["将",{"_index":841,"t":{"119":{"position":[[25,1],[114,1]]},"121":{"position":[[230,1],[584,1]]},"129":{"position":[[620,1]]},"148":{"position":[[8,1],[391,1]]},"152":{"position":[[13,1]]},"186":{"position":[[55,1]]},"190":{"position":[[8,1]]},"206":{"position":[[53,1]]},"216":{"position":[[450,1]]},"233":{"position":[[311,1],[318,1],[359,1]]},"237":{"position":[[99,1],[1298,1],[1345,1]]},"239":{"position":[[155,1]]},"243":{"position":[[109,1]]},"245":{"position":[[65,1]]},"247":{"position":[[144,1]]},"255":{"position":[[110,1]]},"288":{"position":[[299,1]]},"300":{"position":[[205,1]]},"308":{"position":[[121,1]]},"310":{"position":[[119,1]]},"314":{"position":[[50,1]]},"316":{"position":[[52,1]]},"325":{"position":[[187,1]]},"329":{"position":[[154,1]]},"340":{"position":[[1224,1],[1608,1]]},"371":{"position":[[660,1]]},"378":{"position":[[102,1]]},"384":{"position":[[70,1]]},"386":{"position":[[72,1]]},"399":{"position":[[563,1]]},"401":{"position":[[230,1]]},"429":{"position":[[7,1]]},"431":{"position":[[55,1]]},"433":{"position":[[163,1],[170,1]]},"482":{"position":[[778,1],[823,1]]},"494":{"position":[[679,1]]},"510":{"position":[[547,1]]},"546":{"position":[[196,1]]},"587":{"position":[[60,1],[2067,1]]},"604":{"position":[[60,1]]},"612":{"position":[[69,1]]},"677":{"position":[[124,1],[202,1]]},"683":{"position":[[0,1]]},"688":{"position":[[10,1]]},"704":{"position":[[124,1],[202,1]]},"711":{"position":[[0,1]]},"715":{"position":[[115,1]]},"728":{"position":[[56,1]]},"822":{"position":[[23,1]]},"862":{"position":[[371,1]]},"864":{"position":[[14,1]]},"919":{"position":[[13,1]]},"1046":{"position":[[4,1]]},"1068":{"position":[[39,1]]},"1075":{"position":[[46,1]]},"1103":{"position":[[214,1]]},"1117":{"position":[[25,1]]},"1141":{"position":[[69,1]]},"1225":{"position":[[3,1]]},"1234":{"position":[[803,1],[924,1]]},"1275":{"position":[[42,1]]},"1277":{"position":[[40,1]]},"1368":{"position":[[741,1]]},"1377":{"position":[[216,1],[240,1],[494,1]]},"1387":{"position":[[14,1]]},"1426":{"position":[[24,1]]},"1440":{"position":[[397,1]]},"1472":{"position":[[3,1]]},"1488":{"position":[[1587,1]]},"1509":{"position":[[228,1]]},"1511":{"position":[[164,1]]},"1513":{"position":[[7,1]]},"1520":{"position":[[100,1]]},"1532":{"position":[[59,1]]},"1535":{"position":[[0,1]]},"1545":{"position":[[66,1]]},"1570":{"position":[[18,1]]},"1594":{"position":[[375,1]]},"1609":{"position":[[20,1]]},"1611":{"position":[[846,1]]},"1621":{"position":[[915,1]]},"1625":{"position":[[14,1]]},"1627":{"position":[[39,1]]},"1647":{"position":[[19,1]]},"1657":{"position":[[46,1]]},"1661":{"position":[[406,1]]},"1663":{"position":[[502,1]]},"1741":{"position":[[1148,1]]},"1743":{"position":[[7,1],[268,1],[463,1]]},"1745":{"position":[[8,1],[47,1],[85,1]]},"1795":{"position":[[911,1]]},"1801":{"position":[[2039,1]]},"1803":{"position":[[4001,1]]},"1869":{"position":[[569,1]]},"1885":{"position":[[118,1]]},"1901":{"position":[[148,1]]},"1903":{"position":[[622,1]]},"2184":{"position":[[231,1]]},"2307":{"position":[[28,1]]},"2313":{"position":[[516,1]]},"2321":{"position":[[22,1]]},"2379":{"position":[[7,1]]},"2391":{"position":[[76,1]]},"2418":{"position":[[1126,1],[1181,1]]},"2472":{"position":[[398,1]]},"2517":{"position":[[67,1]]},"2555":{"position":[[91,1]]},"2564":{"position":[[36,1],[188,1]]},"2617":{"position":[[7,1]]},"2629":{"position":[[104,1]]},"2641":{"position":[[0,1]]},"2668":{"position":[[0,1]]},"2682":{"position":[[7,1],[49,1]]},"2684":{"position":[[8,1]]},"2701":{"position":[[34,1]]},"2705":{"position":[[55,1]]},"2725":{"position":[[2663,1]]},"2768":{"position":[[48,1]]},"2798":{"position":[[133,1]]},"2807":{"position":[[99,1]]},"2891":{"position":[[17,1]]},"2905":{"position":[[374,1]]},"2910":{"position":[[211,1]]},"2917":{"position":[[185,1]]},"2973":{"position":[[23,1]]},"3009":{"position":[[150,1]]},"3023":{"position":[[403,1]]},"3063":{"position":[[1372,1]]},"3071":{"position":[[1244,1]]},"3078":{"position":[[6,1]]},"3088":{"position":[[152,1]]},"3092":{"position":[[8,1],[146,1]]},"3106":{"position":[[11,1]]},"3108":{"position":[[167,1]]},"3110":{"position":[[20,1]]},"3118":{"position":[[154,1],[248,1],[358,1]]},"3120":{"position":[[134,1]]},"3142":{"position":[[34,1],[76,1]]},"3148":{"position":[[212,1]]},"3150":{"position":[[129,1],[153,1]]},"3170":{"position":[[43,1]]},"3254":{"position":[[1658,1]]},"3289":{"position":[[163,1]]},"3301":{"position":[[33,1]]},"3323":{"position":[[350,1]]},"3337":{"position":[[32,1]]},"3350":{"position":[[191,1]]},"3420":{"position":[[308,1]]},"3432":{"position":[[740,1]]},"3434":{"position":[[0,1]]},"3458":{"position":[[420,1],[811,1]]},"3500":{"position":[[795,1]]},"3520":{"position":[[92,1]]},"3561":{"position":[[92,1]]},"3579":{"position":[[146,1]]},"3638":{"position":[[18,1]]},"3658":{"position":[[45,1]]},"3672":{"position":[[323,1]]},"3678":{"position":[[92,1]]},"3684":{"position":[[25,1]]},"3702":{"position":[[198,1]]},"3704":{"position":[[839,1]]},"3706":{"position":[[1383,1]]},"3740":{"position":[[72,1],[374,1]]},"3742":{"position":[[6,1]]},"3758":{"position":[[28,1]]},"3785":{"position":[[29,1]]},"3793":{"position":[[256,1]]},"3798":{"position":[[223,1]]},"3808":{"position":[[49,1]]},"3812":{"position":[[31,1]]},"3815":{"position":[[19,1]]},"3817":{"position":[[2685,1]]},"3821":{"position":[[35,1]]},"3830":{"position":[[353,1]]},"3844":{"position":[[1005,1],[1108,1]]},"3898":{"position":[[6,1]]},"3900":{"position":[[6,1]]},"3902":{"position":[[6,1]]},"3904":{"position":[[6,1]]},"3924":{"position":[[721,1],[1189,1],[1533,1],[4379,1]]},"3928":{"position":[[617,1]]},"3936":{"position":[[1292,1]]},"3938":{"position":[[34,1]]},"3940":{"position":[[699,1]]},"3942":{"position":[[75,1]]},"3966":{"position":[[1168,1]]},"3978":{"position":[[806,1]]},"3984":{"position":[[744,1]]},"3992":{"position":[[889,1],[3151,1]]},"3996":{"position":[[1368,1],[1563,1]]}}}],["将来",{"_index":1799,"t":{"245":{"position":[[203,2]]},"1511":{"position":[[395,2]]}}}],["尊重",{"_index":1189,"t":{"166":{"position":[[35,2]]},"3242":{"position":[[213,2]]},"3910":{"position":[[210,2]]},"3934":{"position":[[2379,2]]}}}],["小于",{"_index":3026,"t":{"585":{"position":[[198,2]]},"1845":{"position":[[224,2],[497,2]]},"1855":{"position":[[241,2]]},"1865":{"position":[[134,2]]},"1869":{"position":[[161,2]]},"1873":{"position":[[79,2],[319,2]]},"1875":{"position":[[320,2],[411,2]]},"2438":{"position":[[258,2]]},"3015":{"position":[[91,2]]},"3017":{"position":[[65,2]]},"3800":{"position":[[222,2]]},"3962":{"position":[[1194,2]]}}}],["小写",{"_index":3162,"t":{"606":{"position":[[364,2]]},"1594":{"position":[[380,2]]},"1598":{"position":[[24,2]]},"1631":{"position":[[651,2]]},"1635":{"position":[[209,2]]},"1641":{"position":[[357,2],[406,2]]},"1661":{"position":[[175,2],[223,2]]},"3023":{"position":[[176,2],[224,2]]},"3936":{"position":[[320,2]]},"3986":{"position":[[118,2],[1729,2]]},"4000":{"position":[[410,2]]}}}],["小写字母",{"_index":3200,"t":{"615":{"position":[[420,4]]},"2359":{"position":[[473,4]]}}}],["小型企业",{"_index":7212,"t":{"2910":{"position":[[430,4]]}}}],["小小",{"_index":4620,"t":{"1511":{"position":[[616,2],[691,2],[1395,2]]}}}],["小小的",{"_index":4859,"t":{"1511":{"position":[[3546,3]]}}}],["小帅哥",{"_index":4856,"t":{"1511":{"position":[[3496,3]]}}}],["小心",{"_index":7867,"t":{"3289":{"position":[[18,2]]},"3416":{"position":[[173,2]]}}}],["小提示",{"_index":2787,"t":{"516":{"position":[[408,3]]},"685":{"position":[[235,3]]},"862":{"position":[[327,3]]},"954":{"position":[[345,3]]},"1617":{"position":[[1090,3]]},"2361":{"position":[[219,3]]},"2881":{"position":[[819,3]]},"3371":{"position":[[458,3]]},"3636":{"position":[[542,3]]},"3654":{"position":[[90,3]]}}}],["小时",{"_index":2479,"t":{"415":{"position":[[366,2]]},"480":{"position":[[26,2],[221,2],[591,2]]},"482":{"position":[[123,2]]},"494":{"position":[[182,2]]},"2361":{"position":[[407,2]]},"2418":{"position":[[202,2],[308,2]]},"2420":{"position":[[143,2],[187,2],[1581,2],[1699,2],[1887,2]]},"2424":{"position":[[156,2],[162,2]]},"2740":{"position":[[55,2]]},"2991":{"position":[[372,2]]},"3804":{"position":[[790,2]]},"3808":{"position":[[298,2]]},"3916":{"position":[[2722,2],[2732,2]]},"3940":{"position":[[614,2]]},"3944":{"position":[[269,2]]},"3968":{"position":[[676,2]]},"3996":{"position":[[1100,2]]}}}],["小精灵",{"_index":4792,"t":{"1511":{"position":[[2565,3]]}}}],["小节",{"_index":944,"t":{"125":{"position":[[22,2]]},"369":{"position":[[5,2]]},"2717":{"position":[[480,2]]},"2725":{"position":[[2667,2]]},"3086":{"position":[[24,2]]},"3428":{"position":[[7,2]]}}}],["小量",{"_index":6375,"t":{"2497":{"position":[[224,2]]}}}],["少",{"_index":3898,"t":{"1048":{"position":[[14,1]]},"1511":{"position":[[3480,1],[3612,1]]},"1917":{"position":[[10,1]]},"2361":{"position":[[403,1]]},"2770":{"position":[[286,1]]},"3224":{"position":[[170,1]]}}}],["少于",{"_index":3120,"t":{"597":{"position":[[272,2]]},"599":{"position":[[302,2]]}}}],["少量",{"_index":6774,"t":{"2635":{"position":[[58,2]]},"2662":{"position":[[58,2]]}}}],["尘",{"_index":4619,"t":{"1511":{"position":[[597,1]]}}}],["尚可",{"_index":8455,"t":{"3624":{"position":[[171,2]]}}}],["尚未",{"_index":8365,"t":{"3579":{"position":[[243,2]]}}}],["尝试",{"_index":2345,"t":{"382":{"position":[[33,2]]},"899":{"position":[[1782,2]]},"1511":{"position":[[95,2]]},"2361":{"position":[[412,2]]},"2377":{"position":[[35,2]]},"2379":{"position":[[62,2]]},"2503":{"position":[[108,2]]},"3352":{"position":[[498,2]]},"3982":{"position":[[299,2]]}}}],["尝鲜",{"_index":393,"t":{"46":{"position":[[0,2]]},"60":{"position":[[0,2]]},"70":{"position":[[0,2]]},"85":{"position":[[71,2]]}}}],["尤为",{"_index":5427,"t":{"1761":{"position":[[14,2]]}}}],["尤其",{"_index":1751,"t":{"239":{"position":[[79,2]]}}}],["就",{"_index":98,"t":{"5":{"position":[[124,1]]},"7":{"position":[[120,1]]},"11":{"position":[[7,1]]},"85":{"position":[[29,1],[232,1],[237,1],[285,1]]},"121":{"position":[[206,1],[307,1],[350,1],[413,1],[420,1]]},"133":{"position":[[671,1]]},"146":{"position":[[982,1]]},"152":{"position":[[36,1],[638,1]]},"206":{"position":[[121,1],[193,1],[327,1]]},"220":{"position":[[792,1]]},"286":{"position":[[79,1]]},"300":{"position":[[294,1]]},"312":{"position":[[17,1]]},"336":{"position":[[180,1]]},"373":{"position":[[155,1]]},"417":{"position":[[231,1]]},"427":{"position":[[161,1]]},"431":{"position":[[52,1]]},"445":{"position":[[125,1]]},"453":{"position":[[71,1]]},"482":{"position":[[884,1]]},"498":{"position":[[105,1]]},"524":{"position":[[510,1]]},"526":{"position":[[56,1]]},"528":{"position":[[104,1],[459,1],[591,1]]},"554":{"position":[[114,1]]},"567":{"position":[[385,1]]},"570":{"position":[[2670,1]]},"610":{"position":[[69,1]]},"694":{"position":[[59,1]]},"715":{"position":[[26,1]]},"810":{"position":[[426,1]]},"812":{"position":[[458,1]]},"814":{"position":[[422,1]]},"816":{"position":[[454,1]]},"836":{"position":[[324,1]]},"893":{"position":[[105,1]]},"915":{"position":[[74,1]]},"941":{"position":[[156,1],[199,1]]},"960":{"position":[[364,1]]},"1048":{"position":[[82,1]]},"1052":{"position":[[18,1],[36,1],[122,1]]},"1075":{"position":[[27,1]]},"1111":{"position":[[458,1]]},"1113":{"position":[[456,1]]},"1115":{"position":[[465,1]]},"1117":{"position":[[4703,1]]},"1119":{"position":[[427,1]]},"1121":{"position":[[459,1]]},"1123":{"position":[[390,1]]},"1129":{"position":[[1781,1]]},"1141":{"position":[[66,1]]},"1223":{"position":[[258,1]]},"1392":{"position":[[43,1],[191,1]]},"1396":{"position":[[81,1]]},"1408":{"position":[[1078,1],[1102,1],[1267,1]]},"1424":{"position":[[2031,1]]},"1426":{"position":[[230,1]]},"1432":{"position":[[159,1]]},"1440":{"position":[[437,1]]},"1474":{"position":[[35,1]]},"1483":{"position":[[945,1]]},"1488":{"position":[[1561,1],[1569,1]]},"1511":{"position":[[50,1],[978,1]]},"1547":{"position":[[183,1]]},"1551":{"position":[[1130,1]]},"1584":{"position":[[536,1]]},"1705":{"position":[[13,1]]},"1745":{"position":[[82,1],[339,1]]},"1761":{"position":[[368,1]]},"1775":{"position":[[49,1]]},"1783":{"position":[[151,1]]},"1795":{"position":[[2943,1]]},"1849":{"position":[[40,1]]},"1857":{"position":[[180,1]]},"1875":{"position":[[704,1]]},"1883":{"position":[[21,1]]},"1919":{"position":[[386,1],[387,1]]},"1941":{"position":[[705,1],[796,1],[1005,1]]},"1955":{"position":[[89,1]]},"2245":{"position":[[26,1],[113,1]]},"2290":{"position":[[120,1]]},"2294":{"position":[[7,1]]},"2326":{"position":[[219,1],[253,1]]},"2354":{"position":[[51,1]]},"2402":{"position":[[12,1],[25,1]]},"2418":{"position":[[1246,1]]},"2528":{"position":[[14,1]]},"2542":{"position":[[267,1]]},"2547":{"position":[[70,1],[101,1]]},"2615":{"position":[[20,1]]},"2621":{"position":[[15,1],[32,1]]},"2651":{"position":[[9,1]]},"2657":{"position":[[77,1]]},"2684":{"position":[[412,1]]},"2688":{"position":[[70,1]]},"2705":{"position":[[52,1]]},"2735":{"position":[[82,1]]},"2770":{"position":[[176,1],[289,1]]},"2817":{"position":[[126,1],[266,1]]},"2836":{"position":[[1061,1]]},"2912":{"position":[[181,1]]},"2965":{"position":[[204,1]]},"3069":{"position":[[18,1],[222,1]]},"3071":{"position":[[582,1],[822,1]]},"3075":{"position":[[203,1]]},"3080":{"position":[[240,1]]},"3088":{"position":[[163,1]]},"3098":{"position":[[45,1]]},"3100":{"position":[[66,1]]},"3102":{"position":[[45,1]]},"3106":{"position":[[25,1]]},"3116":{"position":[[43,1]]},"3118":{"position":[[54,1],[275,1]]},"3120":{"position":[[73,1],[100,1]]},"3150":{"position":[[51,1]]},"3189":{"position":[[365,1]]},"3224":{"position":[[248,1]]},"3267":{"position":[[397,1]]},"3282":{"position":[[86,1],[132,1],[261,1]]},"3287":{"position":[[3083,1]]},"3321":{"position":[[267,1]]},"3323":{"position":[[333,1]]},"3337":{"position":[[58,1],[76,1]]},"3352":{"position":[[57,1],[362,1],[527,1]]},"3375":{"position":[[44,1]]},"3414":{"position":[[156,1]]},"3432":{"position":[[618,1],[4374,1]]},"3434":{"position":[[412,1],[2746,1]]},"3452":{"position":[[795,1]]},"3456":{"position":[[71,1]]},"3470":{"position":[[39,1]]},"3476":{"position":[[64,1]]},"3601":{"position":[[62,1]]},"3608":{"position":[[86,1]]},"3626":{"position":[[133,1],[219,1],[252,1],[335,1],[433,1]]},"3660":{"position":[[40,1]]},"3696":{"position":[[182,1]]},"3698":{"position":[[60,1]]},"3716":{"position":[[86,1],[867,1]]},"3768":{"position":[[44,1]]},"3844":{"position":[[943,1]]},"3916":{"position":[[3791,1]]}}}],["就是",{"_index":228,"t":{"13":{"position":[[379,2]]},"112":{"position":[[1406,2]]},"119":{"position":[[5,2]]},"129":{"position":[[613,2]]},"146":{"position":[[732,2]]},"206":{"position":[[334,2]]},"210":{"position":[[77,2],[188,2]]},"218":{"position":[[294,2]]},"227":{"position":[[10,2]]},"300":{"position":[[197,2]]},"319":{"position":[[37,2]]},"340":{"position":[[1943,2]]},"363":{"position":[[52,2]]},"367":{"position":[[84,2]]},"404":{"position":[[241,2]]},"413":{"position":[[29,2]]},"445":{"position":[[851,2]]},"453":{"position":[[28,2]]},"500":{"position":[[91,2]]},"518":{"position":[[574,2]]},"579":{"position":[[10,2]]},"587":{"position":[[717,2]]},"593":{"position":[[55,2]]},"604":{"position":[[52,2]]},"615":{"position":[[1105,2]]},"651":{"position":[[404,2]]},"789":{"position":[[225,2]]},"801":{"position":[[60,2]]},"844":{"position":[[5,2]]},"887":{"position":[[23,2],[199,2]]},"941":{"position":[[32,2],[125,2]]},"945":{"position":[[103,2]]},"981":{"position":[[38,2]]},"986":{"position":[[134,2]]},"1046":{"position":[[2,2]]},"1103":{"position":[[173,2]]},"1125":{"position":[[18,2]]},"1223":{"position":[[82,2]]},"1351":{"position":[[404,2]]},"1372":{"position":[[21,2]]},"1379":{"position":[[28,2]]},"1385":{"position":[[62,2]]},"1387":{"position":[[12,2]]},"1408":{"position":[[1304,2]]},"1412":{"position":[[222,2]]},"1416":{"position":[[432,2]]},"1424":{"position":[[102,2]]},"1432":{"position":[[51,2],[117,2]]},"1440":{"position":[[657,2]]},"1444":{"position":[[21,2]]},"1485":{"position":[[312,2]]},"1495":{"position":[[1219,2]]},"1499":{"position":[[850,2]]},"1520":{"position":[[133,2]]},"1541":{"position":[[33,2]]},"1547":{"position":[[6,2],[170,2]]},"1549":{"position":[[6,2]]},"1570":{"position":[[16,2],[38,2],[50,2]]},"1582":{"position":[[62,2]]},"1589":{"position":[[214,2]]},"1647":{"position":[[399,2]]},"1659":{"position":[[34,2]]},"1665":{"position":[[37,2]]},"1711":{"position":[[936,2]]},"1719":{"position":[[39,2],[74,2]]},"1751":{"position":[[16,2]]},"1753":{"position":[[160,2],[169,2],[224,2]]},"1755":{"position":[[743,2],[752,2],[948,2],[957,2],[1183,2],[1192,2]]},"1761":{"position":[[381,2],[552,2],[605,2]]},"1763":{"position":[[70,2]]},"1783":{"position":[[53,2]]},"1841":{"position":[[85,2]]},"1869":{"position":[[47,2],[278,2]]},"1871":{"position":[[41,2]]},"1892":{"position":[[72,2],[90,2]]},"1901":{"position":[[508,2]]},"1907":{"position":[[12,2]]},"1909":{"position":[[829,2]]},"1925":{"position":[[1268,2]]},"1955":{"position":[[98,2]]},"2296":{"position":[[379,2]]},"2311":{"position":[[113,2]]},"2352":{"position":[[175,2]]},"2357":{"position":[[173,2]]},"2393":{"position":[[9,2]]},"2442":{"position":[[2049,2]]},"2517":{"position":[[111,2]]},"2538":{"position":[[492,2]]},"2629":{"position":[[122,2]]},"2682":{"position":[[5,2]]},"2725":{"position":[[2592,2]]},"2727":{"position":[[807,2]]},"2729":{"position":[[30,2]]},"2731":{"position":[[214,2]]},"2745":{"position":[[7,2]]},"2747":{"position":[[7,2]]},"2770":{"position":[[203,2]]},"2805":{"position":[[65,2]]},"2809":{"position":[[25,2],[82,2]]},"2829":{"position":[[23,2]]},"2836":{"position":[[1866,2]]},"2875":{"position":[[594,2]]},"2879":{"position":[[28,2]]},"2912":{"position":[[195,2]]},"2933":{"position":[[672,2]]},"2949":{"position":[[536,2]]},"2963":{"position":[[541,2]]},"3118":{"position":[[118,2]]},"3120":{"position":[[59,2]]},"3282":{"position":[[47,2]]},"3284":{"position":[[5,2],[105,2]]},"3350":{"position":[[140,2]]},"3352":{"position":[[160,2]]},"3393":{"position":[[48,2]]},"3399":{"position":[[7,2]]},"3426":{"position":[[27,2]]},"3428":{"position":[[91,2]]},"3432":{"position":[[265,2],[574,2],[4546,2]]},"3452":{"position":[[876,2]]},"3476":{"position":[[93,2]]},"3520":{"position":[[88,2]]},"3561":{"position":[[88,2]]},"3608":{"position":[[65,2]]},"3626":{"position":[[262,2]]},"3632":{"position":[[128,2]]},"3644":{"position":[[34,2]]},"3678":{"position":[[65,2]]},"3684":{"position":[[31,2]]},"3696":{"position":[[151,2]]},"3718":{"position":[[42,2]]},"3760":{"position":[[20,2]]},"3768":{"position":[[20,2]]},"3844":{"position":[[864,2],[1016,2],[1119,2]]},"3916":{"position":[[3872,2]]},"3924":{"position":[[2638,2]]},"3926":{"position":[[281,2],[511,2]]}}}],["就算",{"_index":4391,"t":{"1481":{"position":[[45,2]]}}}],["就绪",{"_index":8844,"t":{"3800":{"position":[[105,2],[178,2],[201,2]]}}}],["就行了",{"_index":899,"t":{"121":{"position":[[378,3]]}}}],["就要",{"_index":7409,"t":{"3100":{"position":[[91,2]]},"3626":{"position":[[233,2]]}}}],["尼加拉瓜",{"_index":6661,"t":{"2559":{"position":[[2295,4]]}}}],["尽",{"_index":4745,"t":{"1511":{"position":[[2063,1]]}}}],["尽可能",{"_index":592,"t":{"98":{"position":[[21,3]]},"127":{"position":[[1749,3]]},"353":{"position":[[39,3]]},"355":{"position":[[120,3]]},"1383":{"position":[[85,3]]},"1566":{"position":[[62,3],[516,3]]},"1903":{"position":[[421,3]]},"2627":{"position":[[0,3],[59,3]]},"3622":{"position":[[158,3]]},"3952":{"position":[[329,3]]}}}],["尽快",{"_index":4782,"t":{"1511":{"position":[[2493,2]]},"1969":{"position":[[0,2],[48,2]]},"2391":{"position":[[108,2]]}}}],["尽情",{"_index":7170,"t":{"2895":{"position":[[56,2]]}}}],["尽早",{"_index":8513,"t":{"3692":{"position":[[49,2]]},"3938":{"position":[[997,2]]}}}],["尽管",{"_index":7010,"t":{"2770":{"position":[[181,2]]}}}],["尽量",{"_index":4987,"t":{"1547":{"position":[[68,2]]},"2326":{"position":[[121,2]]},"3352":{"position":[[381,2]]}}}],["尽量减少",{"_index":5045,"t":{"1566":{"position":[[302,4]]}}}],["尽量避免",{"_index":7438,"t":{"3118":{"position":[[67,4]]}}}],["局部",{"_index":3230,"t":{"619":{"position":[[94,2]]},"625":{"position":[[92,2]]},"1909":{"position":[[29,2]]},"1913":{"position":[[1458,2]]},"1919":{"position":[[911,2]]},"1925":{"position":[[1636,2]]},"1927":{"position":[[959,2]]},"1933":{"position":[[1079,2]]},"1935":{"position":[[580,2]]},"1941":{"position":[[1324,2]]},"1943":{"position":[[524,2]]},"1953":{"position":[[307,2]]},"2731":{"position":[[218,2]]},"3452":{"position":[[36,2],[226,2]]},"3456":{"position":[[80,2],[103,2],[381,2]]},"3498":{"position":[[377,2]]},"3543":{"position":[[464,2],[553,2]]},"3567":{"position":[[167,2]]},"3916":{"position":[[2041,2],[3223,2],[3352,2]]},"3922":{"position":[[119,2]]}}}],["层",{"_index":114,"t":{"9":{"position":[[44,1],[76,1],[83,1]]},"206":{"position":[[46,1],[62,1],[294,1],[300,1]]},"216":{"position":[[82,1]]},"220":{"position":[[170,1],[249,1],[788,1],[812,1],[849,1],[861,1]]},"336":{"position":[[205,1]]},"427":{"position":[[87,1]]},"441":{"position":[[284,1]]},"445":{"position":[[761,1],[882,1]]},"449":{"position":[[40,1]]},"528":{"position":[[54,1],[59,1],[97,1],[132,1]]},"534":{"position":[[30,1]]},"546":{"position":[[255,1]]},"675":{"position":[[122,1]]},"694":{"position":[[51,1]]},"698":{"position":[[851,1],[891,1]]},"702":{"position":[[19,1]]},"734":{"position":[[7726,1]]},"879":{"position":[[49,1]]},"897":{"position":[[545,1],[568,1]]},"943":{"position":[[26,1]]},"986":{"position":[[3,1],[9,1]]},"1309":{"position":[[709,1],[732,1]]},"1374":{"position":[[56,1],[132,1]]},"1755":{"position":[[33,1]]},"1763":{"position":[[264,1]]},"2292":{"position":[[44,1],[76,1],[83,1]]},"2524":{"position":[[12,1],[42,1]]},"2542":{"position":[[150,1],[252,1]]},"2553":{"position":[[253,1]]},"2670":{"position":[[9,1]]},"2672":{"position":[[9,1]]},"2686":{"position":[[65,1]]},"2745":{"position":[[216,1]]},"2747":{"position":[[219,1]]},"2774":{"position":[[25,1],[510,1]]},"2788":{"position":[[8,1]]},"2807":{"position":[[95,1],[114,1]]},"2881":{"position":[[875,1],[879,1]]},"3031":{"position":[[253,1]]},"3071":{"position":[[53,1],[212,1]]},"3080":{"position":[[435,1]]},"3131":{"position":[[120,1],[193,1],[233,1],[319,1],[323,1]]},"3254":{"position":[[1719,1]]},"3321":{"position":[[222,1],[303,1]]},"3329":{"position":[[106,1]]},"3397":{"position":[[137,1]]},"3432":{"position":[[14,1]]},"3704":{"position":[[99,1]]},"3924":{"position":[[3627,1]]},"3966":{"position":[[1502,1]]}}}],["层次结构",{"_index":6199,"t":{"2341":{"position":[[124,4]]}}}],["层级",{"_index":2539,"t":{"441":{"position":[[62,2]]},"3992":{"position":[[3649,2]]}}}],["层面",{"_index":7397,"t":{"3096":{"position":[[9,2]]},"3118":{"position":[[305,2]]}}}],["居士",{"_index":4631,"t":{"1511":{"position":[[701,2]]}}}],["屏蔽",{"_index":9746,"t":{"3962":{"position":[[1029,2]]}}}],["展开",{"_index":4435,"t":{"1485":{"position":[[341,2]]},"2564":{"position":[[192,2]]},"3063":{"position":[[330,2],[347,2],[360,2]]},"3646":{"position":[[143,2],[160,2],[173,2]]},"3706":{"position":[[322,2],[339,2],[352,2]]}}}],["展示",{"_index":1278,"t":{"182":{"position":[[120,2]]},"3094":{"position":[[141,2]]}}}],["属于",{"_index":4068,"t":{"1221":{"position":[[74,2]]},"1737":{"position":[[13,2]]},"1761":{"position":[[226,2]]},"2186":{"position":[[37,2]]},"2188":{"position":[[37,2]]}}}],["属性",{"_index":355,"t":{"26":{"position":[[43,2]]},"261":{"position":[[105,2],[110,2]]},"280":{"position":[[133,2]]},"282":{"position":[[220,2]]},"427":{"position":[[39,2]]},"435":{"position":[[1097,2]]},"445":{"position":[[806,2]]},"463":{"position":[[66,2]]},"480":{"position":[[50,2],[464,2]]},"494":{"position":[[5,2],[55,2]]},"498":{"position":[[70,2]]},"516":{"position":[[455,2]]},"528":{"position":[[614,2]]},"554":{"position":[[78,2],[82,2]]},"570":{"position":[[1283,2],[1301,2],[1478,2],[1516,2]]},"587":{"position":[[803,2],[885,2],[2044,2]]},"602":{"position":[[292,2]]},"610":{"position":[[15,2],[28,2]]},"793":{"position":[[124,2]]},"855":{"position":[[130,2]]},"857":{"position":[[126,2]]},"893":{"position":[[70,2]]},"1066":{"position":[[154,2]]},"1131":{"position":[[41,2],[177,2]]},"1133":{"position":[[73,2]]},"1200":{"position":[[264,2]]},"1234":{"position":[[895,2],[920,2],[1061,2]]},"1277":{"position":[[345,2]]},"1313":{"position":[[307,2]]},"1394":{"position":[[23,2],[85,2],[98,2],[185,2]]},"1428":{"position":[[43,2]]},"1539":{"position":[[586,2],[814,2],[1043,2],[1712,2],[1735,2],[1795,2]]},"1557":{"position":[[9,2],[113,2],[286,2],[344,2],[493,2]]},"1753":{"position":[[310,2]]},"1765":{"position":[[68,2]]},"1769":{"position":[[99,2]]},"1771":{"position":[[95,2],[131,2]]},"1775":{"position":[[3811,2],[3864,2]]},"1785":{"position":[[42,2]]},"1797":{"position":[[261,2]]},"1801":{"position":[[1749,2]]},"1819":{"position":[[608,2]]},"1821":{"position":[[51,2],[58,2]]},"1905":{"position":[[150,2]]},"2167":{"position":[[409,2]]},"2235":{"position":[[43,2],[187,2]]},"2261":{"position":[[403,2],[417,2],[431,2],[470,2]]},"2352":{"position":[[183,2]]},"2359":{"position":[[480,2]]},"2375":{"position":[[46,2]]},"2377":{"position":[[13,2]]},"2444":{"position":[[18,2]]},"2472":{"position":[[32,2]]},"2526":{"position":[[34,2]]},"2538":{"position":[[184,2]]},"2609":{"position":[[58,2]]},"2684":{"position":[[351,2]]},"2721":{"position":[[98,2],[551,2],[790,2]]},"2735":{"position":[[72,2],[438,2]]},"2790":{"position":[[77,2],[117,2]]},"2792":{"position":[[32,2]]},"2852":{"position":[[26,2]]},"2881":{"position":[[109,2]]},"2887":{"position":[[27,2]]},"2937":{"position":[[88,2]]},"3094":{"position":[[91,2],[122,2],[165,2]]},"3282":{"position":[[97,2]]},"3456":{"position":[[59,2],[93,2],[371,2]]},"3458":{"position":[[430,2],[821,2]]},"3464":{"position":[[451,2],[465,2],[479,2],[518,2]]},"3549":{"position":[[291,2]]},"3620":{"position":[[414,2]]},"3622":{"position":[[171,2]]},"3636":{"position":[[109,2],[563,2]]},"3664":{"position":[[53,2],[509,2]]},"3694":{"position":[[80,2]]},"3712":{"position":[[19,2]]},"3770":{"position":[[1723,2]]},"3777":{"position":[[44,2],[48,2],[52,2]]},"3779":{"position":[[1246,2],[1871,2]]},"3781":{"position":[[36,2],[52,2]]},"3785":{"position":[[400,2],[538,2],[680,2]]},"3793":{"position":[[82,2]]},"3798":{"position":[[45,2],[49,2],[53,2]]},"3802":{"position":[[1864,2],[2648,2]]},"3808":{"position":[[2931,2]]},"3810":{"position":[[38,2],[55,2]]},"3812":{"position":[[678,2],[814,2],[954,2]]},"3817":{"position":[[2460,2]]},"3826":{"position":[[2,2]]},"3830":{"position":[[179,2],[208,2],[415,2],[494,2]]},"3836":{"position":[[48,2],[143,2]]},"3838":{"position":[[48,2],[169,2]]},"3844":{"position":[[828,2]]},"3914":{"position":[[938,2],[942,2],[3152,2]]},"3916":{"position":[[1041,2],[1098,2],[1314,2]]},"3920":{"position":[[194,2]]},"3922":{"position":[[280,2],[802,2]]},"3928":{"position":[[542,2],[551,2]]},"3930":{"position":[[68,2],[114,2]]},"3934":{"position":[[312,2],[1045,2]]},"3936":{"position":[[17,2],[1552,2],[1652,2]]},"3938":{"position":[[1244,2]]},"3952":{"position":[[718,2]]},"3970":{"position":[[73,2],[298,2]]},"3978":{"position":[[756,2]]},"3982":{"position":[[533,2]]},"3986":{"position":[[374,2]]},"3988":{"position":[[333,2],[402,2],[412,2]]},"3992":{"position":[[1245,2],[3952,2]]},"3994":{"position":[[685,2],[1027,2],[1159,2]]},"4000":{"position":[[826,2]]},"4002":{"position":[[316,2]]},"4004":{"position":[[489,2]]},"4006":{"position":[[166,2],[269,2],[408,2]]}}}],["岁",{"_index":3027,"t":{"585":{"position":[[204,1]]}}}],["岁月",{"_index":9423,"t":{"3926":{"position":[[536,2]]}}}],["岗位",{"_index":2204,"t":{"338":{"position":[[1264,2]]}}}],["崛起",{"_index":4822,"t":{"1511":{"position":[[3004,2]]}}}],["崩溃",{"_index":8850,"t":{"3800":{"position":[[237,2]]}}}],["嵌入",{"_index":5343,"t":{"1717":{"position":[[91,2]]},"1719":{"position":[[62,2],[80,2]]},"1724":{"position":[[410,2]]},"1726":{"position":[[112,2]]},"1735":{"position":[[18,2]]},"3968":{"position":[[21,2]]}}}],["嵌入式",{"_index":1229,"t":{"176":{"position":[[15,3]]},"2627":{"position":[[111,3]]},"2788":{"position":[[69,3],[230,3]]},"3922":{"position":[[1359,3]]}}}],["嵌套",{"_index":7600,"t":{"3211":{"position":[[76,2]]},"3992":{"position":[[1946,2]]}}}],["州",{"_index":6558,"t":{"2559":{"position":[[1194,1],[1206,1],[1213,1]]}}}],["工作",{"_index":1641,"t":{"225":{"position":[[13,2]]},"251":{"position":[[58,2]]},"300":{"position":[[324,2]]},"408":{"position":[[107,2]]},"423":{"position":[[102,2]]},"801":{"position":[[43,2]]},"1392":{"position":[[59,2],[80,2]]},"1511":{"position":[[4182,2]]},"1539":{"position":[[408,2],[1657,2]]},"1894":{"position":[[34,2]]},"2326":{"position":[[217,2]]},"2564":{"position":[[68,2]]},"2813":{"position":[[87,2]]},"2815":{"position":[[34,2],[54,2]]},"3138":{"position":[[110,2]]},"3282":{"position":[[9,2],[76,2]]},"3284":{"position":[[52,2],[107,2]]},"3287":{"position":[[52,2],[72,2],[1396,2],[1764,2],[2066,2],[2382,2],[3056,2]]},"3294":{"position":[[64,2]]},"3389":{"position":[[382,2]]},"3391":{"position":[[274,2]]},"3393":{"position":[[415,2]]},"3922":{"position":[[831,2],[1768,2],[2425,2]]},"3924":{"position":[[714,2],[726,2]]},"3926":{"position":[[488,2]]},"3930":{"position":[[839,2]]},"3932":{"position":[[351,2],[694,2]]},"3950":{"position":[[726,2]]},"3952":{"position":[[721,2]]},"3966":{"position":[[92,2]]},"3972":{"position":[[229,2]]},"3974":{"position":[[705,2]]},"3980":{"position":[[324,2]]},"3982":{"position":[[190,2]]},"3990":{"position":[[483,2]]},"3998":{"position":[[716,2]]},"4004":{"position":[[421,2]]}}}],["工作效率",{"_index":1974,"t":{"300":{"position":[[182,4]]},"3610":{"position":[[22,4]]}}}],["工作日",{"_index":2693,"t":{"482":{"position":[[755,3],[791,3],[828,3],[936,3]]},"2418":{"position":[[1094,3],[1139,3],[1186,3],[1302,3]]},"2420":{"position":[[2033,3],[2084,3]]}}}],["工作量",{"_index":2332,"t":{"373":{"position":[[135,3]]}}}],["工具",{"_index":1804,"t":{"247":{"position":[[137,2],[142,2]]},"308":{"position":[[309,2]]},"310":{"position":[[159,2]]},"314":{"position":[[155,2]]},"316":{"position":[[159,2]]},"675":{"position":[[320,2]]},"679":{"position":[[27,2]]},"1379":{"position":[[40,2]]},"1516":{"position":[[52,2]]},"1520":{"position":[[114,2],[124,2]]},"1532":{"position":[[13,2]]},"1535":{"position":[[215,2],[457,2],[476,2],[498,2]]},"1539":{"position":[[755,2]]},"1545":{"position":[[11,2]]},"1547":{"position":[[75,2],[306,2]]},"1549":{"position":[[395,2]]},"1551":{"position":[[376,2]]},"1553":{"position":[[5,2]]},"1801":{"position":[[1725,2],[2521,2]]},"2251":{"position":[[161,2]]},"2343":{"position":[[293,2]]},"2495":{"position":[[30,2]]},"2555":{"position":[[52,2]]},"2684":{"position":[[434,2]]},"2742":{"position":[[76,2]]},"2836":{"position":[[834,2],[1076,2],[1263,2]]},"3080":{"position":[[26,2],[63,2],[162,2]]},"3211":{"position":[[115,2]]},"3407":{"position":[[26,2]]},"3626":{"position":[[332,2]]},"3914":{"position":[[3047,2]]},"3924":{"position":[[2735,2]]},"3932":{"position":[[1148,2]]},"3938":{"position":[[76,2]]},"3940":{"position":[[247,2]]},"3996":{"position":[[944,2]]}}}],["工具包",{"_index":4420,"t":{"1483":{"position":[[1007,3]]},"1537":{"position":[[6,3],[64,3]]},"1539":{"position":[[1615,3]]},"1559":{"position":[[7,3],[53,3]]}}}],["工厂",{"_index":2840,"t":{"530":{"position":[[178,2]]},"736":{"position":[[37,2]]},"1039":{"position":[[178,2]]},"1801":{"position":[[895,2],[3223,2]]},"1815":{"position":[[68,2]]},"1919":{"position":[[298,2]]},"2171":{"position":[[56,2]]},"2831":{"position":[[167,2]]},"3131":{"position":[[36,2]]},"3422":{"position":[[2,2]]},"3424":{"position":[[89,2]]},"3579":{"position":[[95,2],[147,2]]},"3834":{"position":[[4,2]]},"3918":{"position":[[967,2]]},"3920":{"position":[[1067,2]]},"3922":{"position":[[11,2]]},"3974":{"position":[[117,2]]}}}],["工程",{"_index":3318,"t":{"677":{"position":[[88,2],[173,2],[210,2],[236,2]]},"704":{"position":[[88,2],[173,2],[210,2],[236,2]]},"3992":{"position":[[3473,2]]}}}],["工程师",{"_index":8411,"t":{"3608":{"position":[[45,3],[93,3]]}}}],["左上角",{"_index":7290,"t":{"2981":{"position":[[82,3]]},"3654":{"position":[[76,3]]}}}],["左侧",{"_index":4372,"t":{"1474":{"position":[[172,2],[322,2]]}}}],["左右",{"_index":7408,"t":{"3100":{"position":[[73,2]]}}}],["巨大",{"_index":4520,"t":{"1507":{"position":[[62,2]]},"2175":{"position":[[163,2]]},"3098":{"position":[[25,2]]}}}],["差",{"_index":5444,"t":{"1761":{"position":[[291,1]]},"3522":{"position":[[64,1]]},"3563":{"position":[[62,1]]}}}],["差别",{"_index":7233,"t":{"2915":{"position":[[170,2]]}}}],["差异",{"_index":6208,"t":{"2343":{"position":[[302,2]]},"3589":{"position":[[565,2]]},"3924":{"position":[[1888,2]]}}}],["己",{"_index":8448,"t":{"3624":{"position":[[13,1]]}}}],["已有",{"_index":3214,"t":{"617":{"position":[[27,2]]},"1691":{"position":[[25,2]]},"3397":{"position":[[112,2]]}}}],["已知",{"_index":1240,"t":{"179":{"position":[[54,2]]},"199":{"position":[[28,2]]}}}],["已经",{"_index":211,"t":{"13":{"position":[[5,2]]},"28":{"position":[[15,2]]},"51":{"position":[[206,2]]},"62":{"position":[[206,2]]},"75":{"position":[[206,2]]},"121":{"position":[[297,2]]},"127":{"position":[[1337,2]]},"133":{"position":[[626,2]]},"229":{"position":[[79,2]]},"245":{"position":[[246,2]]},"329":{"position":[[87,2]]},"361":{"position":[[10,2]]},"542":{"position":[[13,2]]},"593":{"position":[[26,2]]},"621":{"position":[[38,2]]},"633":{"position":[[12,2]]},"730":{"position":[[2,2]]},"841":{"position":[[41,2]]},"947":{"position":[[12,2]]},"1052":{"position":[[91,2]]},"1394":{"position":[[19,2]]},"1396":{"position":[[70,2]]},"1511":{"position":[[611,2]]},"1545":{"position":[[4,2]]},"1582":{"position":[[33,2]]},"1617":{"position":[[1191,2]]},"1841":{"position":[[56,2]]},"1923":{"position":[[42,2]]},"1969":{"position":[[27,2]]},"1973":{"position":[[65,2]]},"1987":{"position":[[65,2]]},"2010":{"position":[[73,2]]},"2237":{"position":[[15,2]]},"2296":{"position":[[5,2]]},"2357":{"position":[[122,2]]},"2517":{"position":[[68,2]]},"2534":{"position":[[40,2]]},"2536":{"position":[[157,2]]},"2601":{"position":[[13,2]]},"2613":{"position":[[67,2]]},"2742":{"position":[[47,2]]},"2813":{"position":[[26,2]]},"2848":{"position":[[164,2]]},"2868":{"position":[[57,2],[82,2]]},"2889":{"position":[[139,2]]},"2937":{"position":[[10,2]]},"3080":{"position":[[133,2]]},"3100":{"position":[[4,2]]},"3142":{"position":[[265,2]]},"3252":{"position":[[13,2]]},"3369":{"position":[[111,2]]},"3401":{"position":[[178,2]]},"3418":{"position":[[15,2]]},"3458":{"position":[[477,2]]},"3587":{"position":[[94,2]]},"3589":{"position":[[68,2]]},"3630":{"position":[[16,2]]},"3650":{"position":[[11,2]]},"3678":{"position":[[19,2]]},"3692":{"position":[[42,2],[106,2]]},"3938":{"position":[[990,2],[1054,2]]}}}],["巴基斯坦",{"_index":6695,"t":{"2559":{"position":[[2655,4]]}}}],["巴拉圭",{"_index":6664,"t":{"2559":{"position":[[2326,3]]}}}],["巴拿马",{"_index":6662,"t":{"2559":{"position":[[2311,3]]}}}],["巴斯克",{"_index":6474,"t":{"2559":{"position":[[427,3],[437,3],[442,3]]}}}],["巴林",{"_index":6437,"t":{"2559":{"position":[[92,2]]}}}],["巴西",{"_index":6624,"t":{"2559":{"position":[[1866,2]]}}}],["希伯来",{"_index":6571,"t":{"2559":{"position":[[1343,3],[1353,3]]}}}],["希望",{"_index":2503,"t":{"421":{"position":[[6,2]]},"445":{"position":[[104,2]]},"653":{"position":[[39,2]]},"677":{"position":[[51,2],[72,2],[156,2]]},"704":{"position":[[51,2],[72,2],[156,2]]},"1048":{"position":[[44,2]]},"1141":{"position":[[57,2]]},"1353":{"position":[[39,2]]},"1424":{"position":[[404,2]]},"1511":{"position":[[393,2],[2000,2],[2193,2],[2355,2],[2491,2],[3000,2],[3151,2],[3349,2]]},"2375":{"position":[[6,2]]},"2402":{"position":[[45,2]]},"2438":{"position":[[278,2]]},"2440":{"position":[[312,2]]},"2646":{"position":[[67,2]]},"2770":{"position":[[49,2]]},"2903":{"position":[[37,2]]},"3063":{"position":[[255,2]]},"3430":{"position":[[495,2]]},"3466":{"position":[[38,2]]},"3706":{"position":[[247,2]]},"3768":{"position":[[61,2]]},"3910":{"position":[[1088,2]]},"3996":{"position":[[1550,2],[1651,2]]}}}],["希腊",{"_index":6566,"t":{"2559":{"position":[[1294,2],[1303,2],[1307,2]]}}}],["帕斯卡",{"_index":5104,"t":{"1594":{"position":[[321,3]]},"1641":{"position":[[93,3]]},"1661":{"position":[[326,3]]},"3779":{"position":[[1281,3],[1906,3]]},"3802":{"position":[[1899,3],[2683,3]]},"3817":{"position":[[2495,3]]}}}],["帖",{"_index":8596,"t":{"3710":{"position":[[30,1]]}}}],["帝",{"_index":4023,"t":{"1145":{"position":[[466,1]]},"1147":{"position":[[357,1]]},"1151":{"position":[[435,1]]},"1181":{"position":[[164,1],[464,1]]},"1183":{"position":[[164,1],[527,1]]}}}],["带",{"_index":1155,"t":{"152":{"position":[[698,1]]},"433":{"position":[[144,1]]},"484":{"position":[[156,1],[208,1],[267,1]]},"530":{"position":[[812,1]]},"651":{"position":[[383,1]]},"715":{"position":[[67,1]]},"789":{"position":[[204,1]]},"793":{"position":[[128,1]]},"899":{"position":[[1346,1]]},"1039":{"position":[[813,1]]},"1066":{"position":[[1655,1]]},"1125":{"position":[[151,1],[323,1]]},"1185":{"position":[[77,1],[249,1]]},"1200":{"position":[[132,1]]},"1351":{"position":[[383,1]]},"1424":{"position":[[1418,1]]},"1499":{"position":[[874,1]]},"1572":{"position":[[101,1],[576,1]]},"1592":{"position":[[137,1]]},"1594":{"position":[[185,1]]},"1711":{"position":[[845,1]]},"1741":{"position":[[1630,1]]},"1861":{"position":[[89,1]]},"1887":{"position":[[527,1]]},"1903":{"position":[[427,1]]},"1907":{"position":[[312,1]]},"2182":{"position":[[267,1]]},"2186":{"position":[[25,1]]},"2188":{"position":[[25,1]]},"2199":{"position":[[109,1]]},"2478":{"position":[[492,1]]},"2788":{"position":[[56,1]]},"3063":{"position":[[390,1]]},"3108":{"position":[[154,1]]},"3152":{"position":[[61,1]]},"3224":{"position":[[1326,1]]},"3325":{"position":[[67,1]]},"3375":{"position":[[181,1]]},"3636":{"position":[[411,1],[597,1]]},"3678":{"position":[[78,1]]},"3706":{"position":[[382,1]]},"3740":{"position":[[22,1]]},"3912":{"position":[[2491,1]]},"3914":{"position":[[3305,1]]},"3916":{"position":[[828,1],[1929,1]]},"3926":{"position":[[68,1]]},"3936":{"position":[[323,1]]},"3938":{"position":[[487,1]]},"3952":{"position":[[167,1]]},"3958":{"position":[[412,1]]},"3974":{"position":[[68,1]]},"3980":{"position":[[297,1]]},"3996":{"position":[[1004,1]]}}}],["带上",{"_index":898,"t":{"121":{"position":[[376,2]]},"841":{"position":[[64,2]]}}}],["带回",{"_index":7104,"t":{"2843":{"position":[[86,2]]}}}],["带有",{"_index":910,"t":{"121":{"position":[[488,2]]},"363":{"position":[[71,2]]},"1103":{"position":[[106,2]]},"1483":{"position":[[70,2]]},"3912":{"position":[[2312,2]]}}}],["带来",{"_index":5218,"t":{"1672":{"position":[[30,2]]},"2915":{"position":[[129,2]]},"3118":{"position":[[49,2]]},"3207":{"position":[[26,2]]}}}],["带给",{"_index":5450,"t":{"1761":{"position":[[350,2]]}}}],["帮",{"_index":5086,"t":{"1589":{"position":[[231,1]]},"3352":{"position":[[687,1]]}}}],["帮助",{"_index":1311,"t":{"186":{"position":[[52,2]]},"1511":{"position":[[172,2]]},"1513":{"position":[[66,2]]},"1537":{"position":[[54,2]]},"1539":{"position":[[127,2],[942,2],[988,2]]},"1543":{"position":[[383,2]]},"3414":{"position":[[205,2]]}}}],["常",{"_index":4747,"t":{"1511":{"position":[[2078,1]]},"3242":{"position":[[75,1]]},"3910":{"position":[[72,1]]},"3934":{"position":[[2169,1]]}}}],["常常",{"_index":7973,"t":{"3352":{"position":[[516,2]]}}}],["常指",{"_index":8450,"t":{"3624":{"position":[[76,2]]}}}],["常用",{"_index":93,"t":{"5":{"position":[[77,2]]},"7":{"position":[[73,2]]},"11":{"position":[[11,2]]},"13":{"position":[[12,2]]},"32":{"position":[[15,2]]},"121":{"position":[[455,2]]},"229":{"position":[[6,2]]},"255":{"position":[[111,2]]},"263":{"position":[[4,2]]},"606":{"position":[[12,2]]},"836":{"position":[[16,2]]},"1483":{"position":[[1004,2]]},"1520":{"position":[[107,2]]},"1719":{"position":[[89,2]]},"1737":{"position":[[17,2]]},"1939":{"position":[[5,2]]},"2241":{"position":[[29,2]]},"2290":{"position":[[73,2]]},"2294":{"position":[[11,2]]},"2296":{"position":[[12,2]]},"2305":{"position":[[29,2],[44,2],[76,2]]},"2333":{"position":[[33,2]]},"2373":{"position":[[213,2]]},"2424":{"position":[[39,2]]},"2889":{"position":[[144,2]]},"2923":{"position":[[14,2]]},"2939":{"position":[[14,2]]},"3138":{"position":[[131,2]]},"3397":{"position":[[12,2]]},"3432":{"position":[[3158,2]]},"3620":{"position":[[311,2]]},"3779":{"position":[[468,2]]},"3802":{"position":[[517,2]]},"3924":{"position":[[2635,2]]},"3950":{"position":[[240,2]]},"3978":{"position":[[1420,2]]},"3980":{"position":[[112,2]]}}}],["常用字",{"_index":5461,"t":{"1765":{"position":[[104,3]]}}}],["常见",{"_index":930,"t":{"121":{"position":[[655,2]]},"179":{"position":[[114,2]]},"480":{"position":[[4,2]]},"587":{"position":[[2251,2]]},"591":{"position":[[18,2]]},"608":{"position":[[58,2]]},"1046":{"position":[[60,2]]},"1737":{"position":[[27,2]]},"1907":{"position":[[1,2]]},"2328":{"position":[[0,2]]},"2848":{"position":[[892,2]]},"3106":{"position":[[39,2]]},"3301":{"position":[[49,2]]},"3430":{"position":[[1875,2]]},"3434":{"position":[[14,2]]},"3620":{"position":[[119,2],[160,2]]},"3916":{"position":[[1679,2]]}}}],["常规",{"_index":1084,"t":{"135":{"position":[[382,2]]},"472":{"position":[[0,2]]},"3416":{"position":[[217,2]]}}}],["常量",{"_index":5743,"t":{"1865":{"position":[[468,2]]},"1869":{"position":[[577,2]]}}}],["干什么",{"_index":6284,"t":{"2400":{"position":[[142,3]]}}}],["干净",{"_index":9371,"t":{"3926":{"position":[[95,2]]}}}],["干扰",{"_index":5715,"t":{"1839":{"position":[[28,2]]},"1896":{"position":[[19,2]]},"3282":{"position":[[220,2]]}}}],["平",{"_index":6300,"t":{"2418":{"position":[[372,1]]}}}],["平台",{"_index":8,"t":{"3":{"position":[[26,2]]},"85":{"position":[[22,2],[47,2]]},"95":{"position":[[19,2],[150,2]]},"135":{"position":[[11,2]]},"186":{"position":[[23,2]]},"199":{"position":[[65,2],[353,2],[653,2]]},"251":{"position":[[88,2]]},"397":{"position":[[29,2],[146,2],[314,2]]},"399":{"position":[[79,2],[180,2],[331,2],[432,2],[482,2],[636,2],[645,2],[725,2],[772,2]]},"401":{"position":[[32,2],[290,2],[418,2]]},"540":{"position":[[17,2]]},"1513":{"position":[[40,2]]},"1516":{"position":[[186,2],[240,2]]},"1518":{"position":[[25,2]]},"1535":{"position":[[618,2]]},"1551":{"position":[[10,2],[67,2],[158,2],[177,2],[1124,2]]},"2646":{"position":[[21,2],[79,2]]},"2684":{"position":[[422,2]]},"2740":{"position":[[13,2]]},"2768":{"position":[[35,2]]},"3142":{"position":[[327,2]]},"3209":{"position":[[19,2]]},"3250":{"position":[[19,2]]},"3373":{"position":[[666,2]]},"3476":{"position":[[12,2]]},"3589":{"position":[[562,2]]},"3924":{"position":[[2048,2],[2148,2]]}}}],["平常",{"_index":4684,"t":{"1511":{"position":[[1302,2]]}}}],["平时",{"_index":7950,"t":{"3352":{"position":[[122,2]]}}}],["平行",{"_index":2288,"t":{"359":{"position":[[134,2]]}}}],["年",{"_index":375,"t":{"44":{"position":[[5,1]]},"57":{"position":[[5,1]]},"68":{"position":[[5,1]]},"160":{"position":[[7,1]]},"172":{"position":[[12,1]]},"397":{"position":[[5,1],[43,1],[75,1],[122,1],[168,1],[209,1],[242,1],[287,1]]},"399":{"position":[[5,1],[52,1],[101,1],[153,1],[202,1],[252,1],[304,1],[353,1],[405,1],[454,1],[502,1],[544,1],[612,1],[658,1],[698,1],[745,1],[794,1],[825,1],[877,1]]},"401":{"position":[[5,1],[54,1],[106,1],[145,1],[211,1],[263,1],[310,1],[341,1],[391,1]]},"474":{"position":[[15,1]]},"478":{"position":[[4,1],[18,1]]},"484":{"position":[[22,1],[177,1],[270,1],[291,1]]},"1511":{"position":[[4031,1]]},"1969":{"position":[[13,1]]},"2391":{"position":[[85,1]]},"2418":{"position":[[506,1]]},"2633":{"position":[[21,1]]},"3242":{"position":[[8,1]]},"3246":{"position":[[9,1],[49,1]]},"3758":{"position":[[36,1]]},"3898":{"position":[[14,1]]},"3900":{"position":[[14,1]]},"3902":{"position":[[14,1]]},"3904":{"position":[[14,1]]},"3910":{"position":[[2095,1]]},"3912":{"position":[[21,1]]},"3926":{"position":[[20,1],[196,1],[321,1],[358,1]]},"3934":{"position":[[2616,1]]}}}],["年份",{"_index":2640,"t":{"474":{"position":[[2,2]]},"482":{"position":[[239,2]]},"484":{"position":[[157,2]]},"2418":{"position":[[222,2]]}}}],["年少",{"_index":9402,"t":{"3926":{"position":[[388,2]]}}}],["年龄",{"_index":3025,"t":{"585":{"position":[[194,2]]},"606":{"position":[[296,2]]},"708":{"position":[[387,2]]},"830":{"position":[[201,2]]},"851":{"position":[[402,2]]},"1060":{"position":[[477,2]]},"1364":{"position":[[327,2]]},"1779":{"position":[[303,2]]},"3664":{"position":[[141,2]]}}}],["并不需要",{"_index":4234,"t":{"1392":{"position":[[213,4]]}}}],["并且",{"_index":1795,"t":{"245":{"position":[[154,2]]},"255":{"position":[[102,2],[229,2]]},"528":{"position":[[56,2]]},"589":{"position":[[51,2]]},"960":{"position":[[158,2]]},"1511":{"position":[[11,2]]},"1687":{"position":[[115,2]]},"1689":{"position":[[727,2]]},"1699":{"position":[[113,2]]},"2784":{"position":[[28,2]]},"2803":{"position":[[55,2]]},"2912":{"position":[[74,2]]},"3102":{"position":[[33,2]]},"3250":{"position":[[223,2]]},"3416":{"position":[[121,2]]},"3595":{"position":[[17,2],[141,2]]}}}],["并发",{"_index":1456,"t":{"196":{"position":[[6,2]]},"581":{"position":[[53,2]]},"2333":{"position":[[36,2]]},"3096":{"position":[[58,2]]},"3104":{"position":[[15,2]]},"3108":{"position":[[86,2]]},"3282":{"position":[[49,2]]},"3912":{"position":[[741,2],[1903,2]]},"3916":{"position":[[2100,2],[2431,2]]},"3918":{"position":[[3552,2]]},"3950":{"position":[[840,2]]},"3974":{"position":[[573,2]]},"3976":{"position":[[408,2]]},"4004":{"position":[[360,2]]}}}],["并存",{"_index":8454,"t":{"3624":{"position":[[169,2]]}}}],["并未",{"_index":1600,"t":{"218":{"position":[[15,2]]},"427":{"position":[[136,2]]},"1309":{"position":[[67,2]]},"1440":{"position":[[10,2]]},"1683":{"position":[[306,2]]},"1711":{"position":[[943,2]]},"2442":{"position":[[2056,2]]},"3430":{"position":[[1871,2]]},"3660":{"position":[[14,2]]},"3672":{"position":[[14,2]]},"3800":{"position":[[186,2]]}}}],["并行",{"_index":6356,"t":{"2466":{"position":[[21,2],[30,2]]},"2829":{"position":[[15,2]]},"3768":{"position":[[11,2]]},"3781":{"position":[[410,2]]},"3992":{"position":[[4031,2]]}}}],["并非",{"_index":6847,"t":{"2731":{"position":[[70,2]]}}}],["广",{"_index":4892,"t":{"1511":{"position":[[4086,1]]},"2564":{"position":[[152,1]]}}}],["广东省",{"_index":2542,"t":{"441":{"position":[[224,3]]},"877":{"position":[[1569,3]]},"1145":{"position":[[424,3],[481,3]]},"1147":{"position":[[315,3],[372,3]]},"1151":{"position":[[393,3],[450,3]]},"1181":{"position":[[178,3],[267,3],[478,3],[578,3]]},"1183":{"position":[[178,3],[541,3]]}}}],["广播",{"_index":5309,"t":{"1699":{"position":[[76,2]]},"1705":{"position":[[25,2]]},"3148":{"position":[[16,2]]}}}],["广泛",{"_index":6204,"t":{"2341":{"position":[[216,2]]},"3138":{"position":[[10,2]]}}}],["序",{"_index":1568,"t":{"212":{"position":[[33,1]]}}}],["序列",{"_index":733,"t":{"112":{"position":[[1021,2]]},"288":{"position":[[261,2]]},"1925":{"position":[[870,2]]},"3282":{"position":[[67,2]]},"3777":{"position":[[388,2]]}}}],["序列化",{"_index":1939,"t":{"286":{"position":[[10,3]]},"288":{"position":[[527,3],[705,3]]},"610":{"position":[[20,3],[30,3],[105,3]]},"1801":{"position":[[1722,3],[2503,3],[2518,3]]},"1803":{"position":[[3720,3],[4458,3]]},"2077":{"position":[[48,3]]},"2343":{"position":[[22,3],[65,3],[118,3],[290,3]]},"2345":{"position":[[135,3],[218,3],[436,3]]},"2352":{"position":[[165,3]]},"2354":{"position":[[20,3]]},"2357":{"position":[[618,3],[963,3]]},"2359":{"position":[[223,3]]},"2373":{"position":[[202,3],[217,3]]},"2375":{"position":[[16,3]]},"2379":{"position":[[16,3],[419,3]]},"2383":{"position":[[53,3]]},"2385":{"position":[[34,3],[112,3],[128,3]]},"2843":{"position":[[237,3]]},"3456":{"position":[[46,3],[64,3],[276,3]]},"3506":{"position":[[40,3],[453,3],[636,3],[655,3],[673,3]]},"3547":{"position":[[40,3],[515,3],[789,3],[806,3],[825,3],[843,3]]},"3595":{"position":[[19,3],[127,3],[143,3]]},"3718":{"position":[[118,3]]},"3722":{"position":[[351,3]]},"3781":{"position":[[551,3]]},"3798":{"position":[[225,3]]},"3912":{"position":[[1116,3],[2630,3]]},"3914":{"position":[[931,3],[969,3],[1122,3],[3412,3],[3439,3],[3552,3],[3590,3]]},"3918":{"position":[[854,3],[3314,3],[3730,3]]},"3922":{"position":[[2152,3]]},"3924":{"position":[[1792,3]]},"3940":{"position":[[667,3]]},"3952":{"position":[[510,3],[663,3]]},"3954":{"position":[[595,3]]},"3958":{"position":[[55,3],[201,3]]},"3962":{"position":[[1222,3],[1543,3]]},"3970":{"position":[[374,3]]},"3972":{"position":[[460,3]]},"3978":{"position":[[1429,3]]},"3980":{"position":[[596,3]]},"3986":{"position":[[222,3],[378,3],[838,3],[863,3],[974,3],[1453,3]]},"3988":{"position":[[399,3]]},"3990":{"position":[[584,3]]},"3992":{"position":[[658,3],[1917,3]]},"3996":{"position":[[864,3]]},"4000":{"position":[[1068,3]]},"4002":{"position":[[313,3]]},"4004":{"position":[[103,3],[140,3]]},"4006":{"position":[[153,3],[277,3],[300,3],[319,3]]}}}],["序号",{"_index":8121,"t":{"3432":{"position":[[649,2]]},"3924":{"position":[[1652,2]]}}}],["库",{"_index":2025,"t":{"308":{"position":[[311,1]]},"310":{"position":[[161,1]]},"314":{"position":[[157,1]]},"316":{"position":[[161,1]]},"329":{"position":[[78,1],[85,1]]},"417":{"position":[[26,1]]},"502":{"position":[[66,1]]},"516":{"position":[[751,1],[760,1]]},"583":{"position":[[101,1]]},"943":{"position":[[61,1]]},"1031":{"position":[[10,1]]},"1046":{"position":[[13,1],[28,1],[40,1]]},"1052":{"position":[[133,1]]},"1056":{"position":[[146,1],[459,1],[545,1]]},"1060":{"position":[[5,1],[30,1]]},"1062":{"position":[[100,1]]},"1064":{"position":[[756,1]]},"1066":{"position":[[350,1],[366,1],[382,1],[1300,1],[1455,1],[1580,1],[1595,1]]},"1440":{"position":[[56,1]]},"1973":{"position":[[82,1]]},"1987":{"position":[[82,1]]},"2010":{"position":[[90,1]]},"2343":{"position":[[27,1],[68,1],[121,1]]},"2357":{"position":[[65,1]]},"2917":{"position":[[59,1]]},"3088":{"position":[[40,1]]},"3092":{"position":[[154,1]]},"3098":{"position":[[31,1]]},"3100":{"position":[[9,1],[16,1],[31,1]]},"3104":{"position":[[7,1],[72,1]]},"3108":{"position":[[190,1]]},"3118":{"position":[[142,1]]},"3120":{"position":[[4,1]]},"3124":{"position":[[38,1],[64,1],[71,1]]},"3126":{"position":[[219,1]]},"3140":{"position":[[51,1],[64,1]]},"3142":{"position":[[29,1]]},"3156":{"position":[[10,1]]},"3211":{"position":[[52,1]]},"3215":{"position":[[869,1]]},"3224":{"position":[[1712,1],[1864,1]]},"3254":{"position":[[73,1],[288,1],[586,1],[592,1],[613,1],[961,1],[967,1],[988,1],[1188,1],[1194,1],[1215,1],[1229,1]]},"3287":{"position":[[93,1],[346,1]]},"3319":{"position":[[38,1],[43,1],[48,1],[53,1]]},"3356":{"position":[[10,1],[52,1]]},"3405":{"position":[[83,1]]},"3702":{"position":[[1355,1]]},"3914":{"position":[[3049,1]]},"3938":{"position":[[78,1]]},"3940":{"position":[[249,1]]},"3952":{"position":[[34,1]]},"3962":{"position":[[2087,1]]},"3966":{"position":[[73,1]]},"3968":{"position":[[121,1]]},"3972":{"position":[[501,1]]},"3982":{"position":[[521,1]]},"3986":{"position":[[250,1]]},"3996":{"position":[[867,1],[1329,1]]}}}],["库里",{"_index":7390,"t":{"3092":{"position":[[119,2]]}}}],["应",{"_index":1033,"t":{"127":{"position":[[1748,1]]},"986":{"position":[[121,1]]},"1832":{"position":[[94,1]]},"2490":{"position":[[95,1]]},"2627":{"position":[[108,1],[135,1]]},"2717":{"position":[[127,1]]},"3416":{"position":[[124,1]]},"3442":{"position":[[199,1]]},"3624":{"position":[[39,1]]}}}],["应对",{"_index":4221,"t":{"1389":{"position":[[169,2]]}}}],["应用",{"_index":9,"t":{"3":{"position":[[28,2]]},"102":{"position":[[180,2]]},"119":{"position":[[40,2],[137,2],[170,2]]},"204":{"position":[[40,2],[56,2],[80,2]]},"225":{"position":[[88,2]]},"227":{"position":[[15,2]]},"239":{"position":[[184,2],[299,2]]},"251":{"position":[[108,2]]},"255":{"position":[[26,2],[231,2]]},"346":{"position":[[103,2]]},"348":{"position":[[224,2]]},"399":{"position":[[241,2]]},"429":{"position":[[10,2],[101,2]]},"451":{"position":[[3,2],[276,2]]},"463":{"position":[[9,2]]},"579":{"position":[[37,2]]},"677":{"position":[[131,2]]},"704":{"position":[[131,2]]},"706":{"position":[[225,2]]},"841":{"position":[[111,2]]},"846":{"position":[[13,2]]},"1319":{"position":[[226,2]]},"1389":{"position":[[259,2]]},"1399":{"position":[[51,2]]},"1401":{"position":[[32,2]]},"1576":{"position":[[15,2],[331,2]]},"1578":{"position":[[24,2]]},"1587":{"position":[[11,2]]},"1589":{"position":[[12,2],[67,2]]},"1611":{"position":[[880,2]]},"1737":{"position":[[1,2]]},"1761":{"position":[[104,2],[151,2]]},"1775":{"position":[[15,2]]},"1901":{"position":[[313,2],[654,2]]},"1907":{"position":[[42,2]]},"1909":{"position":[[272,2]]},"2264":{"position":[[46,2]]},"2311":{"position":[[84,2],[158,2]]},"2326":{"position":[[282,2]]},"2341":{"position":[[219,2]]},"2345":{"position":[[855,2]]},"2517":{"position":[[85,2],[114,2]]},"2536":{"position":[[226,2]]},"2564":{"position":[[9,2],[143,2]]},"2599":{"position":[[44,2]]},"2619":{"position":[[0,2]]},"2625":{"position":[[8,2]]},"2711":{"position":[[10,2]]},"2717":{"position":[[13,2],[55,2]]},"2735":{"position":[[409,2]]},"2764":{"position":[[5,2],[34,2],[62,2],[88,2]]},"2805":{"position":[[20,2],[68,2],[76,2],[84,2]]},"2809":{"position":[[131,2]]},"2910":{"position":[[145,2],[379,2]]},"2912":{"position":[[106,2]]},"2979":{"position":[[0,2]]},"3082":{"position":[[37,2],[218,2],[247,2],[275,2],[301,2]]},"3098":{"position":[[3,2]]},"3104":{"position":[[36,2]]},"3108":{"position":[[214,2]]},"3138":{"position":[[4,2],[134,2]]},"3142":{"position":[[115,2],[145,2],[155,2],[184,2],[190,2],[199,2],[215,2],[244,2],[325,2]]},"3315":{"position":[[19,2],[49,2]]},"3339":{"position":[[142,2]]},"3416":{"position":[[99,2],[214,2],[277,2],[345,2]]},"3914":{"position":[[2552,2]]},"3928":{"position":[[12,2]]},"3932":{"position":[[19,2],[548,2],[2447,2],[2470,2]]},"3934":{"position":[[3074,2]]},"3964":{"position":[[7,2]]},"3966":{"position":[[29,2],[687,2]]},"3968":{"position":[[341,2]]},"3970":{"position":[[345,2]]},"3976":{"position":[[479,2]]},"3978":{"position":[[261,2]]},"3990":{"position":[[758,2]]},"3994":{"position":[[1087,2]]},"3996":{"position":[[458,2],[574,2]]},"3998":{"position":[[327,2],[773,2]]}}}],["应用层",{"_index":1536,"t":{"206":{"position":[[109,3],[138,3]]},"216":{"position":[[458,3],[1246,3]]},"220":{"position":[[86,3]]},"3131":{"position":[[108,3]]}}}],["应用服务器",{"_index":1659,"t":{"227":{"position":[[44,5]]},"239":{"position":[[9,5],[33,5],[135,5]]}}}],["应用程序",{"_index":1300,"t":{"184":{"position":[[10,4]]},"188":{"position":[[9,4]]},"202":{"position":[[24,4]]},"225":{"position":[[22,4]]},"239":{"position":[[66,4],[83,4]]},"245":{"position":[[97,4],[108,4]]},"429":{"position":[[62,4]]},"453":{"position":[[12,4]]},"1465":{"position":[[7,4]]},"1474":{"position":[[20,4],[90,4],[398,4]]},"1532":{"position":[[26,4]]},"1566":{"position":[[641,4]]},"2303":{"position":[[83,4]]},"2517":{"position":[[15,4]]},"2619":{"position":[[17,4]]},"2740":{"position":[[45,4]]},"2745":{"position":[[230,4]]},"2747":{"position":[[265,4]]},"2834":{"position":[[30,4]]},"2899":{"position":[[39,4]]},"2910":{"position":[[474,4]]},"3078":{"position":[[7,4],[125,4],[140,4]]},"3080":{"position":[[224,4],[249,4],[481,4]]},"3140":{"position":[[30,4]]},"3142":{"position":[[47,4]]},"3339":{"position":[[95,4],[134,4],[203,4]]},"3412":{"position":[[106,4]]},"3428":{"position":[[47,4]]},"3432":{"position":[[4364,4]]},"3702":{"position":[[188,4],[213,4]]},"3910":{"position":[[1080,4],[1097,4]]},"3924":{"position":[[2186,4]]},"3954":{"position":[[222,4]]},"3978":{"position":[[10,4]]},"4006":{"position":[[356,4]]}}}],["应用软件",{"_index":7191,"t":{"2910":{"position":[[50,4],[212,4],[255,4]]}}}],["应答",{"_index":5576,"t":{"1801":{"position":[[1966,2]]}}}],["应该",{"_index":119,"t":{"9":{"position":[[85,2]]},"110":{"position":[[34,2]]},"127":{"position":[[1361,2]]},"225":{"position":[[85,2]]},"373":{"position":[[19,2]]},"378":{"position":[[126,2]]},"459":{"position":[[23,2]]},"510":{"position":[[451,2]]},"565":{"position":[[34,2]]},"677":{"position":[[37,2]]},"704":{"position":[[37,2]]},"897":{"position":[[511,2]]},"1309":{"position":[[675,2]]},"1368":{"position":[[10,2],[22,2]]},"1383":{"position":[[80,2]]},"1432":{"position":[[192,2]]},"1711":{"position":[[52,2]]},"1775":{"position":[[3867,2]]},"2292":{"position":[[85,2]]},"2326":{"position":[[119,2]]},"2333":{"position":[[9,2]]},"2391":{"position":[[181,2]]},"2703":{"position":[[91,2]]},"2709":{"position":[[240,2]]},"2881":{"position":[[846,2]]},"3282":{"position":[[262,2]]},"3432":{"position":[[270,2]]},"3916":{"position":[[1840,2]]},"3924":{"position":[[1566,2]]},"3940":{"position":[[471,2]]},"3972":{"position":[[463,2]]},"3978":{"position":[[1221,2]]},"3984":{"position":[[548,2],[1069,2]]}}}],["底层",{"_index":1228,"t":{"176":{"position":[[9,2]]},"373":{"position":[[25,2]]},"734":{"position":[[19,2]]},"1052":{"position":[[34,2]]},"1309":{"position":[[65,2]]},"1687":{"position":[[302,2]]},"2311":{"position":[[41,2]]},"2331":{"position":[[221,2]]},"2359":{"position":[[626,2]]},"2564":{"position":[[119,2]]},"2731":{"position":[[9,2]]},"2917":{"position":[[57,2]]},"3140":{"position":[[14,2]]},"3329":{"position":[[10,2]]},"3345":{"position":[[65,2]]},"3434":{"position":[[1694,2],[1898,2]]},"3468":{"position":[[16,2],[346,2]]},"3500":{"position":[[791,2]]},"3589":{"position":[[529,2]]},"3601":{"position":[[11,2]]},"3727":{"position":[[73,2]]},"3914":{"position":[[3520,2]]},"3916":{"position":[[1469,2]]},"3918":{"position":[[3026,2]]},"3922":{"position":[[2299,2]]},"3924":{"position":[[240,2],[1909,2],[3519,2]]},"3946":{"position":[[183,2]]},"3948":{"position":[[208,2]]},"3956":{"position":[[3151,2]]},"3958":{"position":[[385,2]]},"3966":{"position":[[1135,2]]},"3970":{"position":[[331,2]]},"3978":{"position":[[463,2],[506,2],[522,2],[609,2]]},"3982":{"position":[[126,2]]},"3990":{"position":[[548,2]]},"4000":{"position":[[665,2]]},"4002":{"position":[[234,2]]}}}],["底部",{"_index":1503,"t":{"199":{"position":[[686,2]]},"692":{"position":[[28,2]]}}}],["庞大",{"_index":3044,"t":{"585":{"position":[[480,2]]},"1103":{"position":[[140,2]]},"1507":{"position":[[43,2]]}}}],["度",{"_index":7983,"t":{"3354":{"position":[[18,1]]}}}],["延迟",{"_index":1865,"t":{"255":{"position":[[161,2]]},"534":{"position":[[765,2]]},"2393":{"position":[[57,2]]},"2805":{"position":[[454,2]]},"3528":{"position":[[126,2]]},"3567":{"position":[[248,2]]}}}],["建立",{"_index":1239,"t":{"179":{"position":[[50,2]]},"184":{"position":[[69,2]]},"1509":{"position":[[266,2]]},"2283":{"position":[[91,2]]}}}],["建议",{"_index":990,"t":{"127":{"position":[[1161,2],[1354,2]]},"148":{"position":[[216,2],[219,2]]},"216":{"position":[[73,2]]},"255":{"position":[[261,2]]},"304":{"position":[[102,2]]},"488":{"position":[[1,2],[4,2]]},"570":{"position":[[2049,2]]},"587":{"position":[[707,2],[720,2]]},"728":{"position":[[9,2]]},"846":{"position":[[943,2]]},"887":{"position":[[51,2]]},"1200":{"position":[[120,2],[156,2],[251,2]]},"1394":{"position":[[30,2],[104,2]]},"1551":{"position":[[165,2]]},"1663":{"position":[[542,2]]},"1711":{"position":[[740,2]]},"1775":{"position":[[3848,2]]},"2175":{"position":[[4,2]]},"2404":{"position":[[127,2]]},"2490":{"position":[[60,2],[63,2]]},"2579":{"position":[[36,2],[621,2]]},"2581":{"position":[[60,2]]},"2587":{"position":[[479,2]]},"2709":{"position":[[232,2]]},"2796":{"position":[[325,2]]},"2823":{"position":[[1,2],[4,2]]},"2875":{"position":[[433,2]]},"2925":{"position":[[444,2]]},"2941":{"position":[[444,2]]},"2955":{"position":[[444,2]]},"2965":{"position":[[38,2]]},"3039":{"position":[[285,2]]},"3041":{"position":[[372,2]]},"3275":{"position":[[407,2]]},"3595":{"position":[[425,2]]},"3597":{"position":[[23,2]]},"3614":{"position":[[61,2]]},"3618":{"position":[[15,2]]},"3624":{"position":[[87,2]]},"3740":{"position":[[18,2]]},"3966":{"position":[[1537,2]]},"3978":{"position":[[1753,2]]},"3980":{"position":[[612,2]]},"3992":{"position":[[3027,2]]}}}],["开发",{"_index":103,"t":{"5":{"position":[[143,2]]},"7":{"position":[[139,2]]},"51":{"position":[[285,2]]},"62":{"position":[[285,2]]},"75":{"position":[[285,2]]},"81":{"position":[[7,2]]},"85":{"position":[[33,2],[50,2],[129,2]]},"95":{"position":[[75,2],[87,2],[143,2]]},"127":{"position":[[1334,2]]},"148":{"position":[[286,2]]},"199":{"position":[[22,2],[191,2],[250,2],[304,2],[414,2],[580,2],[610,2],[644,2],[649,2],[674,2]]},"245":{"position":[[132,2]]},"251":{"position":[[33,2]]},"300":{"position":[[13,2],[54,2],[65,2]]},"302":{"position":[[155,2]]},"314":{"position":[[735,2]]},"316":{"position":[[674,2]]},"329":{"position":[[57,2]]},"338":{"position":[[1262,2]]},"340":{"position":[[74,2],[539,2]]},"359":{"position":[[320,2]]},"384":{"position":[[65,2],[73,2]]},"386":{"position":[[73,2]]},"399":{"position":[[243,2],[649,2]]},"451":{"position":[[5,2]]},"502":{"position":[[7,2]]},"730":{"position":[[156,2]]},"732":{"position":[[79,2]]},"988":{"position":[[362,2]]},"1509":{"position":[[131,2]]},"1511":{"position":[[3523,2],[3996,2]]},"1537":{"position":[[9,2],[23,2],[60,2]]},"1553":{"position":[[8,2]]},"1672":{"position":[[99,2]]},"1719":{"position":[[95,2]]},"1735":{"position":[[9,2]]},"1737":{"position":[[3,2]]},"1755":{"position":[[8,2]]},"1761":{"position":[[5,2],[28,2]]},"1775":{"position":[[5,2]]},"1777":{"position":[[15,2],[78,2]]},"1832":{"position":[[63,2],[86,2]]},"2055":{"position":[[7,2]]},"2261":{"position":[[58,2],[262,2]]},"2290":{"position":[[139,2]]},"2532":{"position":[[86,2]]},"2617":{"position":[[3,2]]},"2619":{"position":[[74,2]]},"2621":{"position":[[22,2]]},"2627":{"position":[[53,2],[121,2]]},"2919":{"position":[[198,2]]},"3096":{"position":[[126,2]]},"3140":{"position":[[35,2]]},"3301":{"position":[[38,2]]},"3367":{"position":[[16,2]]},"3373":{"position":[[16,2]]},"3414":{"position":[[3,2],[207,2]]},"3416":{"position":[[159,2]]},"3442":{"position":[[195,2]]},"3464":{"position":[[106,2],[310,2]]},"3478":{"position":[[30,2]]},"3608":{"position":[[33,2],[52,2],[124,2]]},"3626":{"position":[[11,2],[393,2]]},"3702":{"position":[[1397,2]]},"3928":{"position":[[188,2]]},"3936":{"position":[[1930,2],[2121,2]]},"3950":{"position":[[883,2]]},"3976":{"position":[[537,2]]},"3986":{"position":[[298,2]]},"3990":{"position":[[49,2]]},"3992":{"position":[[3507,2],[3795,2]]}}}],["开发人员",{"_index":4529,"t":{"1509":{"position":[[53,4],[83,4],[195,4],[219,4],[256,4]]},"1839":{"position":[[13,4]]},"3148":{"position":[[128,4],[208,4]]},"3150":{"position":[[102,4]]},"3610":{"position":[[10,4]]},"3612":{"position":[[78,4]]}}}],["开发工具",{"_index":9456,"t":{"3930":{"position":[[781,4]]}}}],["开发新",{"_index":4519,"t":{"1507":{"position":[[54,3]]},"3626":{"position":[[399,3]]},"3978":{"position":[[1735,3]]}}}],["开发者",{"_index":1461,"t":{"199":{"position":[[5,3]]},"300":{"position":[[22,3]]},"338":{"position":[[1140,3]]},"486":{"position":[[5,3]]},"659":{"position":[[53,3]]},"1010":{"position":[[52,3]]},"1052":{"position":[[94,3]]},"1511":{"position":[[947,3],[3327,3]]},"1687":{"position":[[330,3]]},"1691":{"position":[[27,3]]},"1799":{"position":[[43,3]]},"1809":{"position":[[42,3]]},"2497":{"position":[[32,3]]},"2862":{"position":[[29,3]]},"3071":{"position":[[1085,3]]},"3385":{"position":[[72,3]]},"3412":{"position":[[145,3]]},"3636":{"position":[[665,3]]},"3718":{"position":[[2,3]]},"3832":{"position":[[32,3]]},"3916":{"position":[[1637,3]]},"3926":{"position":[[265,3]]},"3928":{"position":[[207,3],[313,3]]},"3952":{"position":[[250,3]]},"3988":{"position":[[445,3]]}}}],["开发量",{"_index":7253,"t":{"2919":{"position":[[207,3]]}}}],["开发阶段",{"_index":2304,"t":{"363":{"position":[[98,4]]},"419":{"position":[[231,4]]},"1869":{"position":[[52,4]]},"3964":{"position":[[288,4]]},"3980":{"position":[[482,4]]}}}],["开启",{"_index":5686,"t":{"1821":{"position":[[187,2]]},"1923":{"position":[[128,2]]},"2096":{"position":[[145,2]]},"2208":{"position":[[3,2],[48,2]]},"2404":{"position":[[10,2]]},"2426":{"position":[[259,2]]},"2448":{"position":[[3,2],[48,2]]},"3287":{"position":[[50,2],[711,2],[1762,2],[3036,2]]},"3289":{"position":[[152,2]]},"3291":{"position":[[20,2],[675,2],[1260,2]]},"3305":{"position":[[53,2]]},"3662":{"position":[[9,2]]},"3922":{"position":[[2213,2]]},"3946":{"position":[[109,2]]},"3948":{"position":[[142,2]]},"3966":{"position":[[107,2],[1551,2]]},"3968":{"position":[[747,2]]},"3992":{"position":[[2335,2]]}}}],["开头",{"_index":154,"t":{"11":{"position":[[647,2]]},"599":{"position":[[575,2]]},"615":{"position":[[499,2],[578,2]]},"617":{"position":[[1774,2]]},"1424":{"position":[[1798,2]]},"1520":{"position":[[145,2]]},"1594":{"position":[[125,2]]},"1596":{"position":[[45,2],[105,2],[139,2],[182,2],[214,2]]},"1598":{"position":[[8,2]]},"1617":{"position":[[1109,2]]},"1631":{"position":[[124,2],[184,2],[218,2],[261,2],[293,2],[322,2],[597,2]]},"1661":{"position":[[1380,2]]},"1741":{"position":[[1656,2]]},"1903":{"position":[[436,2]]},"2261":{"position":[[423,2],[475,2]]},"2294":{"position":[[676,2]]},"2359":{"position":[[477,2]]},"2510":{"position":[[100,2]]},"2542":{"position":[[140,2]]},"2579":{"position":[[629,2]]},"2981":{"position":[[535,2]]},"3023":{"position":[[1377,2]]},"3063":{"position":[[1334,2]]},"3464":{"position":[[471,2],[523,2]]},"3686":{"position":[[506,2],[606,2]]},"3706":{"position":[[1345,2]]}}}],["开始",{"_index":5,"t":{"3":{"position":[[20,2]]},"85":{"position":[[78,2]]},"182":{"position":[[82,2]]},"386":{"position":[[67,2]]},"482":{"position":[[577,2]]},"510":{"position":[[510,2]]},"681":{"position":[[3,2]]},"696":{"position":[[944,2]]},"702":{"position":[[0,2]]},"947":{"position":[[516,2]]},"1432":{"position":[[14,2]]},"1497":{"position":[[291,2]]},"1511":{"position":[[922,2],[3722,2],[4032,2],[4064,2]]},"1555":{"position":[[705,2]]},"1803":{"position":[[5364,2]]},"2298":{"position":[[50,2]]},"2418":{"position":[[879,2]]},"2424":{"position":[[126,2],[158,2]]},"2486":{"position":[[485,2],[548,2]]},"2488":{"position":[[39,2]]},"2881":{"position":[[54,2]]},"2910":{"position":[[66,2]]},"2921":{"position":[[85,2]]},"3092":{"position":[[91,2]]},"3094":{"position":[[58,2]]},"3766":{"position":[[139,2]]},"3804":{"position":[[670,2],[731,2],[792,2],[854,2],[917,2],[981,2],[1047,2]]},"3808":{"position":[[254,2],[278,2],[300,2],[324,2],[354,2],[380,2],[413,2]]},"3912":{"position":[[74,2]]},"3924":{"position":[[2234,2]]}}}],["开心",{"_index":9410,"t":{"3926":{"position":[[455,2]]}}}],["开放",{"_index":916,"t":{"121":{"position":[[536,2],[544,2]]},"3142":{"position":[[24,2]]},"3608":{"position":[[20,2],[130,2]]},"3918":{"position":[[3024,2]]},"3924":{"position":[[3517,2]]},"3934":{"position":[[1004,2]]}}}],["开来",{"_index":3057,"t":{"587":{"position":[[72,2]]}}}],["开源",{"_index":667,"t":{"106":{"position":[[14,2]]},"166":{"position":[[0,2]]},"168":{"position":[[11,2],[60,2]]},"199":{"position":[[31,2]]},"249":{"position":[[15,2]]},"251":{"position":[[36,2]]},"397":{"position":[[104,2]]},"399":{"position":[[576,2],[682,2]]},"401":{"position":[[245,2],[373,2]]},"775":{"position":[[85,2]]},"1507":{"position":[[24,2]]},"1511":{"position":[[230,2],[254,2],[275,2],[299,2],[351,2],[507,2],[667,2],[735,2],[884,2],[1329,2],[1420,2],[1462,2],[1860,2],[1997,2],[2046,2],[2091,2],[2100,2],[2236,2],[2340,2],[2393,2],[2794,2],[2849,2],[3091,2],[3182,2],[3414,2],[3445,2],[3553,2],[3585,2],[3644,2],[3679,2],[3729,2],[3752,2],[3783,2],[3890,2],[3965,2],[4096,2]]},"1691":{"position":[[35,2]]},"2557":{"position":[[31,2]]},"2646":{"position":[[130,2]]},"2768":{"position":[[1547,2]]},"3242":{"position":[[56,2],[165,2],[178,2]]},"3702":{"position":[[2075,2]]},"3910":{"position":[[53,2],[162,2],[175,2]]},"3926":{"position":[[41,2]]},"3928":{"position":[[82,2]]},"3934":{"position":[[2138,2],[2283,2],[2344,2]]}}}],["开销",{"_index":4062,"t":{"1214":{"position":[[147,2]]},"3088":{"position":[[76,2]]}}}],["异常",{"_index":756,"t":{"112":{"position":[[1404,2],[1493,2]]},"363":{"position":[[104,2]]},"581":{"position":[[25,2]]},"604":{"position":[[65,2]]},"655":{"position":[[27,2]]},"773":{"position":[[82,2]]},"1430":{"position":[[75,2]]},"1665":{"position":[[297,2]]},"1747":{"position":[[148,2]]},"1795":{"position":[[1283,2],[1543,2]]},"1803":{"position":[[715,2]]},"1807":{"position":[[69,2]]},"1813":{"position":[[52,2]]},"1821":{"position":[[126,2]]},"1832":{"position":[[0,2],[69,2],[106,2]]},"1834":{"position":[[57,2],[66,2]]},"1837":{"position":[[5,2],[18,2],[76,2],[82,2],[91,2],[103,2],[116,2],[147,2],[155,2]]},"1839":{"position":[[22,2],[59,2],[71,2],[79,2],[92,2],[103,2],[131,2],[145,2]]},"1841":{"position":[[19,2]]},"1845":{"position":[[4,2],[263,2]]},"1847":{"position":[[47,2]]},"1851":{"position":[[101,2],[150,2],[224,2],[333,2],[382,2],[429,2],[503,2],[632,2],[751,2],[857,2],[949,2],[1023,2]]},"1853":{"position":[[27,2],[46,2],[52,2],[57,2]]},"1855":{"position":[[5,2],[334,2],[386,2],[499,2]]},"1857":{"position":[[46,2],[142,2]]},"1861":{"position":[[161,2]]},"1863":{"position":[[287,2]]},"1865":{"position":[[227,2],[279,2],[434,2],[457,2]]},"1867":{"position":[[41,2]]},"1869":{"position":[[24,2],[37,2]]},"1871":{"position":[[46,2]]},"1873":{"position":[[0,2]]},"1875":{"position":[[208,2],[251,2],[666,2]]},"1883":{"position":[[7,2],[52,2]]},"1885":{"position":[[135,2],[228,2],[313,2]]},"1898":{"position":[[62,2]]},"1901":{"position":[[284,2],[311,2]]},"1903":{"position":[[94,2]]},"1925":{"position":[[1266,2],[1355,2]]},"1931":{"position":[[0,2]]},"1933":{"position":[[270,2],[504,2],[568,2]]},"1935":{"position":[[156,2]]},"1947":{"position":[[125,2]]},"1955":{"position":[[238,2]]},"2191":{"position":[[15,2],[38,2]]},"2193":{"position":[[15,2],[69,2]]},"2199":{"position":[[181,2]]},"2472":{"position":[[39,2],[42,2],[98,2],[201,2],[233,2]]},"2536":{"position":[[151,2]]},"3007":{"position":[[2,2],[21,2]]},"3009":{"position":[[167,2],[260,2]]},"3011":{"position":[[59,2]]},"3013":{"position":[[13,2]]},"3015":{"position":[[45,2]]},"3246":{"position":[[100,2]]},"3352":{"position":[[505,2],[542,2],[585,2]]},"3412":{"position":[[161,2]]},"3414":{"position":[[65,2]]},"3416":{"position":[[258,2],[320,2]]},"3434":{"position":[[2732,2]]},"3597":{"position":[[164,2],[444,2]]},"3654":{"position":[[48,2]]},"3708":{"position":[[1086,2]]},"3826":{"position":[[164,2],[176,2]]},"3828":{"position":[[65,2]]},"3830":{"position":[[529,2]]},"3910":{"position":[[2429,2]]},"3912":{"position":[[1608,2]]},"3914":{"position":[[1642,2],[2498,2]]},"3916":{"position":[[2180,2],[2313,2],[2404,2]]},"3918":{"position":[[754,2],[3461,2],[3585,2],[3749,2],[3843,2],[4150,2]]},"3920":{"position":[[346,2],[352,2],[367,2],[1221,2],[1694,2]]},"3922":{"position":[[1364,2],[1502,2],[1700,2],[2065,2],[2115,2],[2191,2]]},"3924":{"position":[[1133,2],[1306,2]]},"3928":{"position":[[670,2]]},"3930":{"position":[[1043,2]]},"3932":{"position":[[514,2],[784,2],[1255,2],[1323,2],[1343,2],[1348,2]]},"3934":{"position":[[921,2]]},"3936":{"position":[[682,2]]},"3940":{"position":[[365,2],[391,2],[425,2]]},"3942":{"position":[[389,2],[458,2]]},"3944":{"position":[[13,2]]},"3946":{"position":[[122,2],[126,2],[354,2]]},"3948":{"position":[[155,2],[159,2],[273,2],[366,2],[491,2]]},"3950":{"position":[[349,2],[388,2],[391,2],[415,2],[817,2]]},"3952":{"position":[[98,2],[643,2]]},"3954":{"position":[[142,2],[575,2],[643,2],[658,2],[690,2]]},"3956":{"position":[[54,2],[727,2]]},"3958":{"position":[[247,2]]},"3960":{"position":[[49,2],[544,2]]},"3962":{"position":[[302,2],[1243,2],[1546,2]]},"3964":{"position":[[486,2],[536,2]]},"3966":{"position":[[22,2],[1743,2]]},"3970":{"position":[[262,2]]},"3972":{"position":[[332,2]]},"3974":{"position":[[324,2],[495,2],[863,2]]},"3978":{"position":[[823,2],[960,2],[980,2],[987,2],[1013,2],[1121,2],[1446,2],[1542,2]]},"3980":{"position":[[328,2],[433,2]]},"3982":{"position":[[617,2]]},"3984":{"position":[[839,2]]},"3986":{"position":[[1141,2],[1377,2]]},"3990":{"position":[[448,2],[495,2]]},"3992":{"position":[[1502,2],[1779,2],[1877,2],[2112,2],[2211,2],[2219,2],[2317,2],[2347,2],[3781,2]]},"3994":{"position":[[1061,2],[1235,2],[1426,2],[1520,2]]},"3996":{"position":[[789,2],[1140,2],[1765,2]]},"3998":{"position":[[575,2],[626,2],[660,2],[803,2]]},"4000":{"position":[[451,2],[807,2],[938,2],[963,2],[972,2],[1128,2]]},"4002":{"position":[[363,2]]},"4004":{"position":[[403,2]]},"4006":{"position":[[121,2],[377,2]]}}}],["异步",{"_index":1068,"t":{"133":{"position":[[668,2]]},"146":{"position":[[979,2]]},"233":{"position":[[252,2]]},"329":{"position":[[155,2]]},"645":{"position":[[228,2]]},"647":{"position":[[118,2]]},"649":{"position":[[171,2]]},"651":{"position":[[180,2]]},"661":{"position":[[96,2]]},"663":{"position":[[102,2]]},"665":{"position":[[532,2]]},"667":{"position":[[556,2]]},"669":{"position":[[532,2]]},"671":{"position":[[556,2]]},"779":{"position":[[185,2]]},"781":{"position":[[86,2]]},"783":{"position":[[78,2]]},"785":{"position":[[84,2]]},"787":{"position":[[90,2]]},"789":{"position":[[96,2]]},"795":{"position":[[259,2]]},"810":{"position":[[391,2],[414,2],[430,2]]},"812":{"position":[[423,2],[446,2],[462,2]]},"814":{"position":[[387,2],[410,2],[426,2]]},"816":{"position":[[419,2],[442,2],[458,2]]},"927":{"position":[[468,2],[930,2],[1392,2],[1792,2],[2131,2]]},"929":{"position":[[752,2],[1204,2],[1709,2],[2439,2],[2928,2],[3425,2],[3924,2]]},"931":{"position":[[401,2],[817,2],[1178,2]]},"954":{"position":[[164,2]]},"956":{"position":[[809,2]]},"962":{"position":[[169,2]]},"965":{"position":[[302,2]]},"967":{"position":[[306,2]]},"969":{"position":[[299,2]]},"971":{"position":[[299,2]]},"973":{"position":[[204,2]]},"975":{"position":[[216,2]]},"1111":{"position":[[423,2],[446,2],[462,2]]},"1113":{"position":[[421,2],[444,2],[460,2]]},"1115":{"position":[[430,2],[453,2],[469,2]]},"1117":{"position":[[4668,2],[4691,2],[4707,2]]},"1119":{"position":[[392,2],[415,2],[431,2]]},"1121":{"position":[[424,2],[447,2],[463,2]]},"1123":{"position":[[355,2],[378,2],[394,2]]},"1129":{"position":[[1746,2],[1769,2],[1785,2]]},"1160":{"position":[[881,2]]},"1162":{"position":[[929,2]]},"1164":{"position":[[413,2]]},"1166":{"position":[[536,2]]},"1168":{"position":[[293,2]]},"1170":{"position":[[510,2]]},"1173":{"position":[[228,2]]},"1175":{"position":[[246,2]]},"1177":{"position":[[228,2]]},"1179":{"position":[[449,2]]},"1181":{"position":[[286,2]]},"1183":{"position":[[349,2]]},"1185":{"position":[[1072,2]]},"1188":{"position":[[263,2]]},"1190":{"position":[[274,2]]},"1234":{"position":[[621,2]]},"1236":{"position":[[632,2]]},"1238":{"position":[[749,2]]},"1240":{"position":[[833,2]]},"1248":{"position":[[249,2]]},"1325":{"position":[[186,2]]},"1327":{"position":[[86,2]]},"1329":{"position":[[478,2]]},"1331":{"position":[[493,2]]},"1333":{"position":[[478,2]]},"1335":{"position":[[496,2]]},"1337":{"position":[[64,2]]},"1339":{"position":[[67,2]]},"1341":{"position":[[288,2]]},"1343":{"position":[[297,2]]},"1345":{"position":[[288,2]]},"1347":{"position":[[297,2]]},"1349":{"position":[[171,2]]},"1351":{"position":[[180,2]]},"1424":{"position":[[1193,2],[1416,2]]},"1566":{"position":[[153,2]]},"1703":{"position":[[474,2]]},"1803":{"position":[[4513,2]]},"1903":{"position":[[439,2],[477,2],[492,2],[527,2],[572,2],[584,2],[642,2]]},"1959":{"position":[[120,2]]},"2182":{"position":[[87,2]]},"2184":{"position":[[90,2]]},"2406":{"position":[[361,2]]},"2434":{"position":[[390,2]]},"2442":{"position":[[1757,2]]},"3258":{"position":[[506,2],[567,2]]},"3287":{"position":[[1041,2]]},"3291":{"position":[[1283,2]]},"3595":{"position":[[257,2]]},"3597":{"position":[[29,2],[43,2]]},"3736":{"position":[[102,2]]},"3738":{"position":[[220,2]]},"3795":{"position":[[406,2]]},"3922":{"position":[[452,2]]},"3960":{"position":[[126,2]]},"3962":{"position":[[90,2],[1105,2]]},"3966":{"position":[[714,2]]},"3976":{"position":[[77,2]]},"3978":{"position":[[589,2]]},"3992":{"position":[[1405,2]]},"3994":{"position":[[491,2]]},"4000":{"position":[[1126,2]]},"4006":{"position":[[218,2]]}}}],["异步控制",{"_index":7105,"t":{"2843":{"position":[[266,4]]},"2856":{"position":[[42,4]]}}}],["弃",{"_index":7310,"t":{"3063":{"position":[[216,1]]},"3706":{"position":[[208,1]]},"3910":{"position":[[2084,1]]},"3912":{"position":[[1799,1]]}}}],["式",{"_index":928,"t":{"121":{"position":[[643,1]]},"1311":{"position":[[445,1],[459,1]]},"1566":{"position":[[628,1]]},"2264":{"position":[[44,1],[85,1]]},"3063":{"position":[[328,1],[357,1]]},"3608":{"position":[[32,1]]},"3646":{"position":[[141,1],[170,1]]},"3706":{"position":[[320,1],[349,1]]},"3938":{"position":[[495,1]]},"3954":{"position":[[200,1]]},"3986":{"position":[[297,1]]}}}],["引入",{"_index":332,"t":{"19":{"position":[[973,2]]},"150":{"position":[[64,2]]},"2033":{"position":[[92,2]]},"3114":{"position":[[29,2]]},"3483":{"position":[[1271,2]]},"3742":{"position":[[24,2]]},"3928":{"position":[[414,2],[498,2]]},"3940":{"position":[[552,2]]}}}],["引发",{"_index":2198,"t":{"338":{"position":[[1223,2]]},"1747":{"position":[[86,2]]},"3916":{"position":[[2173,2]]},"3974":{"position":[[681,2]]}}}],["引擎",{"_index":3112,"t":{"587":{"position":[[2211,2]]},"591":{"position":[[13,2]]},"2326":{"position":[[61,2]]},"3727":{"position":[[2,2],[92,2]]},"3732":{"position":[[24,2]]},"3754":{"position":[[13,2]]},"3940":{"position":[[650,2]]},"3950":{"position":[[551,2]]},"3952":{"position":[[757,2]]},"3960":{"position":[[648,2]]},"3978":{"position":[[447,2]]},"3984":{"position":[[153,2]]},"3996":{"position":[[397,2],[1406,2]]},"3998":{"position":[[544,2]]}}}],["引用",{"_index":1547,"t":{"206":{"position":[[308,2]]},"528":{"position":[[98,2]]},"801":{"position":[[0,2]]},"943":{"position":[[29,2]]},"1103":{"position":[[0,2]]},"1600":{"position":[[53,2]]},"2055":{"position":[[296,2]]},"2303":{"position":[[0,2]]},"2343":{"position":[[231,2]]},"2361":{"position":[[430,2]]},"2363":{"position":[[209,2],[248,2]]},"2365":{"position":[[141,2]]},"2367":{"position":[[147,2]]},"2369":{"position":[[167,2]]},"2371":{"position":[[174,2]]},"2373":{"position":[[155,2]]},"2625":{"position":[[29,2],[89,2],[410,2]]},"2627":{"position":[[70,2]]},"2774":{"position":[[72,2],[99,2],[193,2],[243,2],[317,2],[360,2],[537,2]]},"2782":{"position":[[0,2]]},"2807":{"position":[[96,2]]},"2981":{"position":[[201,2]]},"3350":{"position":[[0,2]]},"3397":{"position":[[119,2]]},"3418":{"position":[[39,2]]},"3744":{"position":[[461,2]]},"3916":{"position":[[2402,2],[2449,2]]},"3920":{"position":[[1692,2]]},"3922":{"position":[[2150,2]]},"3940":{"position":[[423,2]]},"3952":{"position":[[666,2]]},"3966":{"position":[[1284,2]]},"3974":{"position":[[459,2]]},"3986":{"position":[[476,2]]},"3992":{"position":[[3641,2]]},"3994":{"position":[[816,2]]}}}],["引起",{"_index":3710,"t":{"887":{"position":[[33,2]]},"3352":{"position":[[529,2]]},"3974":{"position":[[861,2]]}}}],["张",{"_index":1959,"t":{"294":{"position":[[41,1]]},"2768":{"position":[[1501,1],[1553,1]]},"3106":{"position":[[21,1]]},"3108":{"position":[[38,1]]},"3273":{"position":[[426,1]]}}}],["张开",{"_index":9369,"t":{"3926":{"position":[[90,2]]}}}],["弥补",{"_index":7908,"t":{"3319":{"position":[[12,2]]}}}],["弱",{"_index":1879,"t":{"261":{"position":[[30,1]]},"267":{"position":[[38,1]]},"3974":{"position":[[28,1],[36,1]]}}}],["弹",{"_index":860,"t":{"121":{"position":[[62,1]]},"694":{"position":[[13,1]]}}}],["弹性",{"_index":1695,"t":{"233":{"position":[[319,2]]}}}],["强",{"_index":1895,"t":{"265":{"position":[[28,1]]},"615":{"position":[[324,1]]},"1135":{"position":[[61,1]]},"1200":{"position":[[69,1]]},"1511":{"position":[[3168,1],[3198,1]]},"2333":{"position":[[39,1]]},"2579":{"position":[[20,1]]},"2701":{"position":[[44,1]]},"2733":{"position":[[3,1]]},"2751":{"position":[[36,1]]},"3116":{"position":[[25,1]]},"3150":{"position":[[154,1]]},"3740":{"position":[[111,1]]},"3920":{"position":[[1028,1]]},"3928":{"position":[[367,1]]},"3962":{"position":[[402,1]]}}}],["强制",{"_index":1932,"t":{"284":{"position":[[178,2],[362,2]]},"570":{"position":[[769,2]]},"1641":{"position":[[518,2]]},"1661":{"position":[[613,2]]},"1747":{"position":[[29,2]]},"3023":{"position":[[610,2]]},"3170":{"position":[[59,2]]},"3287":{"position":[[1134,2]]},"3626":{"position":[[186,2]]},"3664":{"position":[[538,2]]},"3856":{"position":[[32,2]]},"3858":{"position":[[4,2]]},"3894":{"position":[[4,2]]},"3938":{"position":[[291,2]]}}}],["强制性",{"_index":5886,"t":{"1941":{"position":[[893,3]]},"2247":{"position":[[6,3]]},"3966":{"position":[[104,3]]}}}],["强大",{"_index":680,"t":{"108":{"position":[[16,2]]},"114":{"position":[[16,2]]},"371":{"position":[[7,2]]},"488":{"position":[[27,2]]},"504":{"position":[[255,2]]},"1511":{"position":[[785,2],[3716,2]]},"1639":{"position":[[40,2]]},"2144":{"position":[[68,2]]},"2309":{"position":[[125,2]]},"2495":{"position":[[28,2]]},"2703":{"position":[[64,2]]},"2823":{"position":[[27,2]]},"2895":{"position":[[5,2]]},"3080":{"position":[[23,2]]},"3140":{"position":[[41,2]]},"3309":{"position":[[24,2]]},"3444":{"position":[[60,2]]},"3729":{"position":[[50,2]]},"3924":{"position":[[152,2],[782,2],[2055,2],[2534,2],[4513,2]]},"3928":{"position":[[131,2],[431,2],[636,2],[717,2],[859,2]]},"3930":{"position":[[209,2]]}}}],["强度",{"_index":4820,"t":{"1511":{"position":[[2958,2]]}}}],["归档",{"_index":4457,"t":{"1488":{"position":[[686,2]]},"1495":{"position":[[630,2]]},"3800":{"position":[[215,2]]}}}],["归类",{"_index":2129,"t":{"325":{"position":[[18,2]]},"1520":{"position":[[403,2]]},"1657":{"position":[[58,2]]},"3416":{"position":[[16,2]]},"3432":{"position":[[2143,2]]},"3434":{"position":[[1636,2]]},"3690":{"position":[[48,2]]},"3938":{"position":[[852,2]]}}}],["当中",{"_index":6731,"t":{"2599":{"position":[[103,2]]}}}],["当之无愧",{"_index":7594,"t":{"3209":{"position":[[77,4]]},"3250":{"position":[[76,4]]}}}],["当做",{"_index":3933,"t":{"1068":{"position":[[45,2],[59,2]]}}}],["当前",{"_index":879,"t":{"121":{"position":[[180,2]]},"231":{"position":[[4,2]]},"314":{"position":[[86,2]]},"316":{"position":[[88,2]]},"359":{"position":[[67,2]]},"404":{"position":[[33,2]]},"406":{"position":[[0,2]]},"494":{"position":[[42,2],[598,2]]},"516":{"position":[[564,2],[590,2]]},"528":{"position":[[224,2],[280,2]]},"570":{"position":[[721,2],[1084,2],[1357,2]]},"685":{"position":[[290,2]]},"933":{"position":[[549,2]]},"1214":{"position":[[187,2]]},"1424":{"position":[[676,2]]},"1483":{"position":[[697,2],[1072,2]]},"1539":{"position":[[101,2]]},"1543":{"position":[[262,2]]},"1559":{"position":[[5,2],[51,2]]},"1561":{"position":[[21,2],[40,2]]},"1566":{"position":[[191,2],[341,2]]},"2261":{"position":[[92,2],[291,2]]},"2398":{"position":[[31,2]]},"2526":{"position":[[112,2],[142,2]]},"2937":{"position":[[984,2]]},"3289":{"position":[[164,2]]},"3371":{"position":[[161,2]]},"3389":{"position":[[567,2]]},"3414":{"position":[[108,2]]},"3416":{"position":[[330,2]]},"3464":{"position":[[140,2],[339,2]]},"3680":{"position":[[348,2]]},"3708":{"position":[[1449,2],[1811,2],[2276,2]]},"3758":{"position":[[0,2],[9,2]]},"3779":{"position":[[1582,2]]},"3793":{"position":[[109,2]]},"3800":{"position":[[10,2],[92,2],[224,2]]},"3802":{"position":[[2339,2]]},"3819":{"position":[[56,2],[123,2],[1569,2],[1625,2],[1673,2]]},"3830":{"position":[[235,2]]},"3860":{"position":[[44,2]]},"3918":{"position":[[1167,2]]},"3924":{"position":[[2909,2]]},"3936":{"position":[[1961,2],[2150,2]]},"3986":{"position":[[136,2]]},"3992":{"position":[[524,2]]}}}],["当前工作",{"_index":4413,"t":{"1483":{"position":[[729,4]]}}}],["当前目录",{"_index":4416,"t":{"1483":{"position":[[867,4]]},"1731":{"position":[[16,4]]}}}],["当天",{"_index":384,"t":{"44":{"position":[[51,2]]},"57":{"position":[[51,2]]},"68":{"position":[[51,2]]},"397":{"position":[[187,2]]},"3908":{"position":[[92,2],[97,2],[131,2],[136,2],[170,2],[204,2],[231,2],[276,2],[297,2]]}}}],["当然",{"_index":3916,"t":{"1052":{"position":[[107,2]]},"1426":{"position":[[246,2]]},"1663":{"position":[[52,2]]},"1672":{"position":[[27,2]]},"1761":{"position":[[302,2],[485,2]]},"2538":{"position":[[481,2]]},"2639":{"position":[[116,2]]},"2666":{"position":[[116,2]]},"2770":{"position":[[213,2]]},"3156":{"position":[[363,2]]},"3242":{"position":[[111,2]]},"3440":{"position":[[95,2]]},"3910":{"position":[[108,2]]},"3926":{"position":[[309,2]]},"3934":{"position":[[2217,2]]}}}],["形式",{"_index":1286,"t":{"182":{"position":[[160,2]]},"186":{"position":[[144,2]]},"380":{"position":[[12,2]]},"384":{"position":[[44,2]]},"392":{"position":[[4,2]]},"2770":{"position":[[127,2],[146,2]]}}}],["形影",{"_index":5282,"t":{"1691":{"position":[[67,2]]}}}],["形成",{"_index":6758,"t":{"2617":{"position":[[39,2]]}}}],["形状",{"_index":6753,"t":{"2615":{"position":[[53,2]]}}}],["影响",{"_index":1248,"t":{"179":{"position":[[104,2]]},"404":{"position":[[147,2]]},"1389":{"position":[[224,2]]},"1511":{"position":[[151,2]]},"1627":{"position":[[250,2],[365,2]]},"1761":{"position":[[503,2]]},"2809":{"position":[[139,2]]},"3273":{"position":[[796,2]]},"3352":{"position":[[204,2]]},"3414":{"position":[[27,2]]},"3916":{"position":[[1548,2]]},"3918":{"position":[[1065,2]]},"3952":{"position":[[725,2]]}}}],["影响力",{"_index":6990,"t":{"2768":{"position":[[1512,3]]}}}],["彻底",{"_index":2333,"t":{"373":{"position":[[158,2]]},"401":{"position":[[178,2]]},"3910":{"position":[[2106,2]]},"3928":{"position":[[284,2]]}}}],["彻底解决",{"_index":7355,"t":{"3069":{"position":[[277,4]]},"3936":{"position":[[440,4]]}}}],["彻彻底底",{"_index":9352,"t":{"3924":{"position":[[2041,4],[2141,4]]}}}],["彼",{"_index":8449,"t":{"3624":{"position":[[15,1]]}}}],["彼此",{"_index":5306,"t":{"1697":{"position":[[44,2]]},"1793":{"position":[[44,2]]}}}],["往往",{"_index":2130,"t":{"325":{"position":[[21,2]]},"327":{"position":[[96,2]]},"1048":{"position":[[9,2]]},"1761":{"position":[[38,2]]},"3476":{"position":[[37,2]]},"3626":{"position":[[214,2]]},"3700":{"position":[[96,2]]}}}],["往返",{"_index":5046,"t":{"1566":{"position":[[308,2]]}}}],["征求",{"_index":929,"t":{"121":{"position":[[648,2]]}}}],["待",{"_index":7965,"t":{"3352":{"position":[[369,1]]}}}],["待定",{"_index":7756,"t":{"3244":{"position":[[46,2]]}}}],["很多",{"_index":1938,"t":{"286":{"position":[[5,2]]},"325":{"position":[[1,2]]},"585":{"position":[[1,2]]},"606":{"position":[[10,2]]},"659":{"position":[[39,2]]},"836":{"position":[[14,2]]},"1010":{"position":[[38,2]]},"1383":{"position":[[7,2]]},"1392":{"position":[[126,2]]},"1396":{"position":[[75,2],[98,2]]},"1485":{"position":[[337,2]]},"1553":{"position":[[48,2]]},"1566":{"position":[[33,2]]},"1672":{"position":[[33,2]]},"2684":{"position":[[307,2]]},"2770":{"position":[[64,2]]},"3142":{"position":[[240,2]]},"3331":{"position":[[170,2]]},"3414":{"position":[[273,2]]},"3468":{"position":[[23,2]]},"3620":{"position":[[42,2]]},"3636":{"position":[[663,2]]},"3752":{"position":[[89,2]]},"3952":{"position":[[248,2]]}}}],["很多很多",{"_index":4324,"t":{"1430":{"position":[[22,4]]}}}],["很大",{"_index":3284,"t":{"659":{"position":[[59,2]]},"1010":{"position":[[58,2]]},"3688":{"position":[[78,2]]}}}],["很少",{"_index":7432,"t":{"3110":{"position":[[249,2]]},"3118":{"position":[[178,2]]},"3718":{"position":[[0,2]]}}}],["很棒",{"_index":4690,"t":{"1511":{"position":[[1363,2],[3806,2]]}}}],["得以",{"_index":4525,"t":{"1507":{"position":[[85,2]]}}}],["得到",{"_index":1260,"t":{"182":{"position":[[31,2]]},"190":{"position":[[9,2]]},"504":{"position":[[295,2]]},"2343":{"position":[[269,2]]},"2629":{"position":[[115,2]]},"3118":{"position":[[349,2]]},"3966":{"position":[[1778,2]]}}}],["得知",{"_index":3052,"t":{"585":{"position":[[542,2]]},"1432":{"position":[[147,2]]}}}],["循环",{"_index":2295,"t":{"363":{"position":[[0,2],[44,2],[86,2]]},"488":{"position":[[60,2]]},"2331":{"position":[[195,2],[233,2]]},"2343":{"position":[[229,2]]},"2363":{"position":[[207,2]]},"3922":{"position":[[1654,2],[2148,2]]},"3964":{"position":[[903,2]]},"3966":{"position":[[1757,2]]},"3988":{"position":[[263,2]]},"3992":{"position":[[3639,2]]}}}],["微",{"_index":933,"t":{"121":{"position":[[683,1]]},"199":{"position":[[299,1]]},"1509":{"position":[[313,1]]},"1511":{"position":[[35,1],[42,1],[66,1],[600,1],[681,1],[748,1],[819,1],[968,1],[998,1],[1181,1],[1203,1],[1242,1],[1273,1],[1316,1],[1354,1],[1378,1],[1409,1],[1435,1],[1449,1],[1473,1],[1498,1],[1528,1],[1557,1],[1590,1],[1614,1],[1637,1],[1659,1],[1708,1],[1740,1],[1821,1],[1849,1],[1885,1],[1909,1],[1959,1],[1985,1],[2081,1],[2112,1],[2145,1],[2179,1],[2212,1],[2247,1],[2268,1],[2299,1],[2365,1],[2381,1],[2408,1],[2427,1],[2445,1],[2460,1],[2482,1],[2518,1],[2554,1],[2575,1],[2597,1],[2621,1],[2650,1],[2672,1],[2697,1],[2719,1],[2808,1],[2836,1],[2859,1],[2877,1],[2901,1],[2923,1],[2947,1],[2970,1],[2991,1],[3013,1],[3038,1],[3059,1],[3080,1],[3108,1],[3142,1],[3170,1],[3200,1],[3225,1],[3259,1],[3286,1],[3314,1],[3340,1],[3371,1],[3400,1],[3434,1],[3470,1],[3500,1],[3534,1],[3602,1],[3664,1],[3696,1],[3739,1],[3770,1],[3797,1],[3840,1],[3877,1],[3910,1],[3939,1],[3980,1],[4017,1],[4050,1],[4120,1],[4144,1],[4165,1],[4192,1],[4234,1]]},"2770":{"position":[[139,1]]},"3092":{"position":[[58,1],[72,1],[138,1],[167,1]]},"3096":{"position":[[21,1]]},"3140":{"position":[[79,1]]},"3522":{"position":[[874,1],[885,1]]},"3950":{"position":[[702,1]]},"3978":{"position":[[1757,1]]},"3992":{"position":[[226,1]]}}}],["微不足道",{"_index":6994,"t":{"2770":{"position":[[0,4]]},"3242":{"position":[[96,4]]},"3910":{"position":[[93,4]]},"3934":{"position":[[2190,4]]}}}],["微型",{"_index":2868,"t":{"540":{"position":[[25,2]]}}}],["微笑",{"_index":6937,"t":{"2768":{"position":[[573,2]]}}}],["微薄",{"_index":6999,"t":{"2770":{"position":[[58,2]]}}}],["微软",{"_index":84,"t":{"5":{"position":[[20,2]]},"7":{"position":[[16,2]]},"13":{"position":[[3,2],[419,2]]},"21":{"position":[[165,2]]},"23":{"position":[[147,2]]},"44":{"position":[[17,2]]},"57":{"position":[[17,2]]},"68":{"position":[[17,2]]},"85":{"position":[[10,2]]},"202":{"position":[[506,2]]},"336":{"position":[[18,2],[133,2]]},"373":{"position":[[23,2]]},"461":{"position":[[81,2]]},"500":{"position":[[62,2]]},"587":{"position":[[17,2]]},"734":{"position":[[17,2]]},"773":{"position":[[1,2],[20,2]]},"1468":{"position":[[272,2]]},"1483":{"position":[[798,2]]},"1516":{"position":[[75,2]]},"1947":{"position":[[139,2]]},"1969":{"position":[[25,2]]},"2231":{"position":[[147,2]]},"2290":{"position":[[16,2]]},"2296":{"position":[[3,2],[419,2]]},"2557":{"position":[[22,2]]},"2629":{"position":[[46,2]]},"2633":{"position":[[33,2]]},"2803":{"position":[[91,2]]},"2897":{"position":[[694,2]]},"3069":{"position":[[16,2]]},"3140":{"position":[[20,2]]},"3194":{"position":[[17,2]]},"3345":{"position":[[63,2]]},"3397":{"position":[[91,2]]},"3399":{"position":[[85,2]]},"3401":{"position":[[176,2]]},"3418":{"position":[[13,2]]},"3442":{"position":[[6,2]]},"3470":{"position":[[0,2]]},"3727":{"position":[[78,2]]},"3912":{"position":[[33,2]]},"3946":{"position":[[181,2]]},"3948":{"position":[[206,2]]},"4000":{"position":[[696,2]]}}}],["德国",{"_index":6561,"t":{"2559":{"position":[[1218,2],[1227,2],[1241,2],[1245,2],[1254,2],[1270,2],[1284,2]]}}}],["心",{"_index":9361,"t":{"3926":{"position":[[3,1],[553,1]]}}}],["心意",{"_index":4630,"t":{"1511":{"position":[[693,2],[1397,2],[3484,2],[3616,2]]}}}],["心酸",{"_index":7726,"t":{"3242":{"position":[[54,2]]},"3910":{"position":[[51,2]]},"3934":{"position":[[2136,2]]}}}],["必",{"_index":4769,"t":{"1511":{"position":[[2314,1]]}}}],["必不可少",{"_index":3012,"t":{"579":{"position":[[51,4]]}}}],["必填",{"_index":2466,"t":{"415":{"position":[[48,2]]},"587":{"position":[[226,2],[306,2],[438,2],[504,2],[592,2]]},"597":{"position":[[230,2]]},"599":{"position":[[260,2]]},"1633":{"position":[[38,2]]},"2444":{"position":[[108,2]]},"2534":{"position":[[26,2]]},"2991":{"position":[[54,2]]},"3063":{"position":[[1495,2]]},"3706":{"position":[[1506,2]]},"3964":{"position":[[173,2]]},"3986":{"position":[[1296,2]]}}}],["必备",{"_index":599,"t":{"98":{"position":[[79,2]]},"3638":{"position":[[9,2]]},"3924":{"position":[[2598,2]]},"3928":{"position":[[17,2]]}}}],["必要",{"_index":3425,"t":{"728":{"position":[[52,2]]},"1672":{"position":[[101,2]]},"2497":{"position":[[25,2]]},"3352":{"position":[[591,2]]},"3620":{"position":[[89,2]]}}}],["必要条件",{"_index":7369,"t":{"3080":{"position":[[78,4]]},"3676":{"position":[[8,4]]}}}],["必读",{"_index":4184,"t":{"1383":{"position":[[2,2]]}}}],["必需",{"_index":4419,"t":{"1483":{"position":[[1000,2]]},"1566":{"position":[[178,2],[202,2]]}}}],["必须",{"_index":153,"t":{"11":{"position":[[636,2]]},"112":{"position":[[1084,2]]},"127":{"position":[[76,2],[181,2],[326,2],[911,2]]},"220":{"position":[[875,2]]},"308":{"position":[[247,2]]},"336":{"position":[[199,2]]},"340":{"position":[[1261,2]]},"423":{"position":[[56,2],[105,2],[125,2]]},"427":{"position":[[22,2],[90,2]]},"445":{"position":[[705,2]]},"498":{"position":[[40,2]]},"510":{"position":[[512,2]]},"514":{"position":[[480,2]]},"522":{"position":[[70,2]]},"615":{"position":[[56,2],[70,2],[92,2],[123,2],[414,2],[569,2]]},"617":{"position":[[1615,2],[1655,2],[1763,2],[2636,2]]},"675":{"position":[[64,2]]},"698":{"position":[[242,2]]},"708":{"position":[[522,2]]},"730":{"position":[[163,2]]},"732":{"position":[[86,2]]},"818":{"position":[[61,2],[92,2]]},"822":{"position":[[118,2],[167,2]]},"877":{"position":[[1128,2]]},"893":{"position":[[40,2]]},"945":{"position":[[23,2],[51,2],[93,2]]},"947":{"position":[[520,2]]},"1060":{"position":[[23,2]]},"1071":{"position":[[23,2]]},"1145":{"position":[[509,2]]},"1279":{"position":[[93,2],[105,2],[157,2]]},"1317":{"position":[[433,2]]},"1377":{"position":[[312,2]]},"1383":{"position":[[265,2]]},"1394":{"position":[[188,2]]},"1416":{"position":[[443,2]]},"1483":{"position":[[1130,2]]},"1539":{"position":[[582,2],[810,2],[1039,2],[1717,2]]},"1576":{"position":[[45,2],[75,2]]},"1580":{"position":[[29,2]]},"1582":{"position":[[413,2]]},"1631":{"position":[[647,2],[659,2]]},"1681":{"position":[[62,2]]},"1687":{"position":[[98,2]]},"1689":{"position":[[710,2]]},"1773":{"position":[[291,2]]},"1775":{"position":[[98,2],[114,2],[130,2]]},"1781":{"position":[[444,2]]},"1855":{"position":[[11,2],[23,2],[45,2],[75,2]]},"1865":{"position":[[464,2]]},"1887":{"position":[[535,2]]},"1901":{"position":[[407,2]]},"1909":{"position":[[281,2]]},"1925":{"position":[[946,2]]},"2255":{"position":[[488,2]]},"2294":{"position":[[665,2]]},"2345":{"position":[[55,2]]},"2442":{"position":[[129,2],[143,2],[180,2]]},"2519":{"position":[[11,2],[297,2],[416,2]]},"2542":{"position":[[131,2]]},"2581":{"position":[[581,2]]},"2613":{"position":[[13,2]]},"2770":{"position":[[24,2]]},"2836":{"position":[[1189,2]]},"2848":{"position":[[15,2],[844,2]]},"2905":{"position":[[9,2]]},"2981":{"position":[[529,2]]},"2985":{"position":[[319,2]]},"3039":{"position":[[94,2]]},"3041":{"position":[[122,2]]},"3057":{"position":[[95,2]]},"3063":{"position":[[849,2],[1225,2],[1263,2]]},"3078":{"position":[[90,2]]},"3080":{"position":[[86,2]]},"3254":{"position":[[593,2],[968,2],[1195,2]]},"3282":{"position":[[87,2],[162,2]]},"3563":{"position":[[715,2]]},"3672":{"position":[[300,2]]},"3680":{"position":[[229,2]]},"3686":{"position":[[464,2],[535,2]]},"3688":{"position":[[753,2]]},"3706":{"position":[[841,2],[1217,2],[1274,2]]},"3708":{"position":[[80,2]]},"3787":{"position":[[36,2]]},"3806":{"position":[[1314,2],[1328,2]]},"3817":{"position":[[233,2]]},"3924":{"position":[[1625,2]]},"3934":{"position":[[651,2]]}}}],["忘",{"_index":9360,"t":{"3926":{"position":[[1,1],[551,1]]}}}],["快",{"_index":1663,"t":{"229":{"position":[[18,1]]},"3250":{"position":[[159,1]]},"3702":{"position":[[1380,1]]}}}],["快乐",{"_index":4855,"t":{"1511":{"position":[[3493,2]]}}}],["快得多",{"_index":1652,"t":{"225":{"position":[[80,3]]}}}],["快捷方式",{"_index":9851,"t":{"3966":{"position":[[1854,4]]}}}],["快捷键",{"_index":7898,"t":{"3309":{"position":[[41,3],[66,3]]}}}],["快速",{"_index":1298,"t":{"182":{"position":[[231,2]]},"199":{"position":[[189,2],[412,2],[647,2]]},"255":{"position":[[80,2]]},"457":{"position":[[11,2]]},"526":{"position":[[227,2]]},"1143":{"position":[[48,2]]},"1438":{"position":[[4,2]]},"1537":{"position":[[58,2]]},"1969":{"position":[[121,2]]},"1983":{"position":[[33,2]]},"2006":{"position":[[33,2]]},"2635":{"position":[[31,2]]},"2662":{"position":[[31,2]]},"2772":{"position":[[33,2]]},"2860":{"position":[[66,2]]},"2881":{"position":[[52,2]]},"2967":{"position":[[36,2]]},"3110":{"position":[[157,2],[165,2]]},"3140":{"position":[[94,2]]},"3315":{"position":[[32,2]]},"3414":{"position":[[215,2]]},"3804":{"position":[[4,2]]}}}],["忽略",{"_index":428,"t":{"51":{"position":[[289,2]]},"62":{"position":[[289,2]]},"75":{"position":[[289,2]]},"125":{"position":[[25,2]]},"206":{"position":[[330,2]]},"363":{"position":[[56,2]]},"532":{"position":[[36,2]]},"615":{"position":[[502,2],[581,2]]},"1329":{"position":[[257,2],[465,2],[760,2],[1001,2]]},"1331":{"position":[[266,2],[480,2],[784,2],[1034,2]]},"1333":{"position":[[257,2],[465,2],[760,2],[1001,2]]},"1335":{"position":[[266,2],[483,2],[787,2],[1037,2]]},"1341":{"position":[[275,2],[588,2]]},"1343":{"position":[[284,2],[606,2]]},"1345":{"position":[[275,2],[588,2]]},"1347":{"position":[[284,2],[606,2]]},"1416":{"position":[[513,2]]},"2985":{"position":[[58,2]]},"3248":{"position":[[75,2]]},"3456":{"position":[[55,2],[88,2],[272,2],[366,2]]},"3496":{"position":[[237,2],[376,2]]},"3541":{"position":[[559,2]]},"3589":{"position":[[657,2]]},"3595":{"position":[[112,2],[346,2]]},"3914":{"position":[[934,2]]},"3920":{"position":[[199,2]]},"3934":{"position":[[275,2]]},"3936":{"position":[[863,2]]},"3978":{"position":[[1587,2]]},"3992":{"position":[[1492,2]]},"3994":{"position":[[360,2],[409,2],[1515,2]]},"4000":{"position":[[490,2]]},"4006":{"position":[[496,2]]}}}],["忽视",{"_index":9419,"t":{"3926":{"position":[[499,2]]}}}],["怀抱",{"_index":9407,"t":{"3926":{"position":[[432,2]]}}}],["怎么",{"_index":2231,"t":{"340":{"position":[[1222,2]]},"2770":{"position":[[75,2]]},"3964":{"position":[[1080,2]]},"3992":{"position":[[3826,2]]},"3996":{"position":[[1706,2]]}}}],["怕",{"_index":3416,"t":{"719":{"position":[[22,1]]}}}],["思想",{"_index":581,"t":{"95":{"position":[[121,2]]},"1424":{"position":[[95,2]]},"1761":{"position":[[7,2]]},"3926":{"position":[[133,2]]}}}],["思维",{"_index":7741,"t":{"3242":{"position":[[145,2]]},"3910":{"position":[[142,2]]},"3934":{"position":[[2250,2]]}}}],["思考",{"_index":7974,"t":{"3352":{"position":[[535,2]]}}}],["思路",{"_index":7007,"t":{"2770":{"position":[[159,2]]}}}],["性",{"_index":1269,"t":{"182":{"position":[[67,1],[122,1]]},"336":{"position":[[318,1]]},"1097":{"position":[[14,1]]},"1589":{"position":[[186,1],[202,1]]},"2517":{"position":[[76,1]]},"2579":{"position":[[19,1]]},"2751":{"position":[[34,1]]},"2912":{"position":[[88,1]]},"3092":{"position":[[6,1]]},"3282":{"position":[[105,1],[193,1]]},"3522":{"position":[[62,1]]},"3563":{"position":[[60,1]]},"3680":{"position":[[23,1]]}}}],["性别",{"_index":3647,"t":{"851":{"position":[[1446,2]]},"1141":{"position":[[87,2]]}}}],["性能",{"_index":591,"t":{"98":{"position":[[18,2],[72,2]]},"104":{"position":[[38,2]]},"179":{"position":[[57,2],[101,2],[136,2],[158,2]]},"182":{"position":[[33,2]]},"184":{"position":[[64,2]]},"186":{"position":[[67,2]]},"225":{"position":[[27,2]]},"239":{"position":[[71,2]]},"255":{"position":[[49,2],[186,2],[251,2]]},"265":{"position":[[2,2],[14,2]]},"570":{"position":[[2040,2]]},"1048":{"position":[[58,2],[77,2],[124,2]]},"1157":{"position":[[29,2]]},"1389":{"position":[[226,2]]},"1412":{"position":[[1235,2]]},"1511":{"position":[[3161,2]]},"1761":{"position":[[212,2],[507,2]]},"2035":{"position":[[64,2]]},"2326":{"position":[[134,2]]},"2331":{"position":[[213,2],[237,2]]},"2404":{"position":[[62,2]]},"2564":{"position":[[134,2]]},"3094":{"position":[[50,2]]},"3098":{"position":[[37,2]]},"3104":{"position":[[18,2],[84,2]]},"3110":{"position":[[193,2]]},"3118":{"position":[[64,2],[215,2]]},"3250":{"position":[[207,2],[229,2]]},"3432":{"position":[[4103,2]]},"3470":{"position":[[169,2]]},"3654":{"position":[[27,2],[45,2]]},"3740":{"position":[[13,2],[103,2],[467,2]]},"3914":{"position":[[3337,2]]},"3930":{"position":[[738,2],[1436,2]]},"3936":{"position":[[807,2]]},"3940":{"position":[[654,2]]},"3942":{"position":[[152,2]]},"3956":{"position":[[3201,2]]},"3958":{"position":[[362,2]]},"3960":{"position":[[632,2]]},"3962":{"position":[[987,2],[1683,2]]},"3966":{"position":[[1137,2]]},"3968":{"position":[[345,2]]},"3970":{"position":[[333,2]]},"3986":{"position":[[906,2],[930,2]]},"3990":{"position":[[527,2]]},"3992":{"position":[[2596,2]]},"3996":{"position":[[444,2],[465,2],[485,2]]},"4000":{"position":[[680,2],[1194,2]]},"4002":{"position":[[229,2]]},"4004":{"position":[[516,2],[550,2]]},"4006":{"position":[[721,2]]}}}],["性能指标",{"_index":1237,"t":{"179":{"position":[[28,4]]}}}],["性能比",{"_index":7762,"t":{"3250":{"position":[[151,3]]}}}],["怪",{"_index":9389,"t":{"3926":{"position":[[175,1]]}}}],["总",{"_index":4615,"t":{"1511":{"position":[[564,1]]},"1741":{"position":[[2000,1]]},"2768":{"position":[[479,1]]},"3063":{"position":[[1364,1]]},"3209":{"position":[[43,1]]},"3250":{"position":[[43,1]]},"3706":{"position":[[1375,1]]}}}],["总体目标",{"_index":8474,"t":{"3626":{"position":[[536,4]]}}}],["总和",{"_index":7785,"t":{"3261":{"position":[[343,2]]}}}],["总是",{"_index":3717,"t":{"887":{"position":[[186,2]]},"1520":{"position":[[141,2]]},"1709":{"position":[[10,2]]},"3325":{"position":[[71,2]]},"3352":{"position":[[625,2]]},"3597":{"position":[[25,2]]},"3928":{"position":[[156,2]]},"3952":{"position":[[253,2]]}}}],["总的来说",{"_index":7944,"t":{"3350":{"position":[[133,4]]}}}],["总线",{"_index":613,"t":{"98":{"position":[[164,2]]},"1214":{"position":[[117,2]]},"1383":{"position":[[242,2]]},"1511":{"position":[[2934,2],[3155,2]]},"1695":{"position":[[41,2]]},"1697":{"position":[[2,2],[76,2]]},"1699":{"position":[[24,2]]},"1701":{"position":[[25,2]]},"1705":{"position":[[32,2]]},"1709":{"position":[[8,2]]},"1711":{"position":[[15,2]]},"1791":{"position":[[42,2]]},"1793":{"position":[[2,2]]},"1801":{"position":[[51,2],[3447,2]]},"1803":{"position":[[5678,2]]},"1825":{"position":[[11,2],[44,2]]},"2239":{"position":[[159,2]]},"2311":{"position":[[110,2]]},"3910":{"position":[[446,2],[2605,2]]},"3912":{"position":[[979,2]]},"3914":{"position":[[883,2],[1444,2],[2909,2],[3572,2]]},"3918":{"position":[[871,2],[3976,2],[4096,2],[4123,2],[4185,2]]},"3920":{"position":[[472,2],[1045,2],[1941,2],[1968,2]]},"3922":{"position":[[9,2],[48,2],[97,2],[173,2],[2006,2],[2209,2],[2253,2]]},"3924":{"position":[[382,2]]},"3936":{"position":[[927,2],[989,2],[1319,2]]},"3948":{"position":[[42,2],[574,2]]},"3950":{"position":[[838,2]]},"3960":{"position":[[37,2]]},"3962":{"position":[[1133,2]]},"3966":{"position":[[1372,2]]},"3974":{"position":[[135,2]]},"3978":{"position":[[582,2]]},"3982":{"position":[[305,2]]},"3992":{"position":[[29,2],[2727,2]]}}}],["总结",{"_index":6703,"t":{"2564":{"position":[[107,2]]}}}],["恢复",{"_index":7227,"t":{"2915":{"position":[[101,2]]},"2917":{"position":[[180,2]]},"2919":{"position":[[217,2]]}}}],["恭喜",{"_index":4674,"t":{"1511":{"position":[[1213,2],[1234,2]]}}}],["恭喜发财",{"_index":4632,"t":{"1511":{"position":[[716,4],[1139,4]]}}}],["恰似",{"_index":1162,"t":{"156":{"position":[[17,2]]}}}],["恰好",{"_index":509,"t":{"85":{"position":[[262,2]]}}}],["恶意",{"_index":6151,"t":{"2326":{"position":[[210,2]]}}}],["悄然",{"_index":9364,"t":{"3926":{"position":[[57,2]]}}}],["情况",{"_index":877,"t":{"121":{"position":[[173,2]]},"137":{"position":[[2,2]]},"182":{"position":[[186,2]]},"212":{"position":[[2,2]]},"220":{"position":[[3,2]]},"255":{"position":[[248,2]]},"263":{"position":[[65,2]]},"288":{"position":[[280,2]]},"308":{"position":[[279,2]]},"319":{"position":[[616,2]]},"336":{"position":[[196,2]]},"359":{"position":[[137,2]]},"363":{"position":[[29,2]]},"380":{"position":[[37,2]]},"394":{"position":[[3,2]]},"413":{"position":[[6,2]]},"417":{"position":[[346,2]]},"427":{"position":[[111,2],[124,2],[167,2]]},"445":{"position":[[56,2],[98,2]]},"484":{"position":[[2,2]]},"610":{"position":[[2,2]]},"621":{"position":[[2,2]]},"633":{"position":[[24,2]]},"653":{"position":[[2,2]]},"655":{"position":[[3,2]]},"675":{"position":[[198,2]]},"728":{"position":[[45,2]]},"751":{"position":[[2,2]]},"887":{"position":[[2,2]]},"897":{"position":[[549,2]]},"915":{"position":[[2,2]]},"919":{"position":[[2,2]]},"1052":{"position":[[28,2]]},"1103":{"position":[[143,2]]},"1214":{"position":[[2,2]]},"1277":{"position":[[320,2]]},"1309":{"position":[[713,2]]},"1353":{"position":[[2,2]]},"1412":{"position":[[2,2],[24,2],[58,2]]},"1418":{"position":[[2,2]]},"1424":{"position":[[127,2]]},"1432":{"position":[[2,2]]},"1468":{"position":[[2,2]]},"1566":{"position":[[512,2]]},"1609":{"position":[[2,2]]},"1625":{"position":[[2,2]]},"1627":{"position":[[2,2]]},"1631":{"position":[[35,2]]},"1663":{"position":[[2,2]]},"1707":{"position":[[58,2]]},"1709":{"position":[[2,2]]},"1711":{"position":[[737,2]]},"1867":{"position":[[76,2]]},"1905":{"position":[[28,2]]},"1955":{"position":[[12,2]]},"1957":{"position":[[2,2]]},"1961":{"position":[[2,2]]},"1981":{"position":[[17,2]]},"1993":{"position":[[17,2]]},"2016":{"position":[[17,2]]},"2255":{"position":[[35,2]]},"2298":{"position":[[2,2]]},"2315":{"position":[[2,2]]},"2377":{"position":[[21,2]]},"2379":{"position":[[377,2]]},"2391":{"position":[[201,2]]},"2402":{"position":[[2,2]]},"2426":{"position":[[233,2]]},"2438":{"position":[[245,2]]},"2440":{"position":[[281,2]]},"2495":{"position":[[77,2]]},"2508":{"position":[[2,2]]},"2538":{"position":[[35,2]]},"2542":{"position":[[122,2]]},"2581":{"position":[[2,2]]},"2646":{"position":[[2,2]]},"2649":{"position":[[2,2]]},"2782":{"position":[[70,2]]},"2819":{"position":[[536,2]]},"2829":{"position":[[2,2]]},"2834":{"position":[[95,2]]},"2838":{"position":[[2,2]]},"2843":{"position":[[16,2]]},"2875":{"position":[[2,2]]},"2881":{"position":[[2,2],[825,2]]},"2903":{"position":[[2,2]]},"2967":{"position":[[2,2]]},"2985":{"position":[[2,2]]},"3078":{"position":[[2,2],[120,2],[148,2]]},"3088":{"position":[[25,2]]},"3168":{"position":[[2,2]]},"3170":{"position":[[2,2]]},"3189":{"position":[[2,2]]},"3296":{"position":[[2,2]]},"3350":{"position":[[73,2],[205,2]]},"3401":{"position":[[18,2],[43,2]]},"3416":{"position":[[111,2],[285,2]]},"3418":{"position":[[31,2]]},"3430":{"position":[[1468,2]]},"3432":{"position":[[2623,2]]},"3442":{"position":[[2,2]]},"3458":{"position":[[472,2]]},"3468":{"position":[[2,2]]},"3506":{"position":[[9,2]]},"3547":{"position":[[9,2]]},"3577":{"position":[[2,2],[35,2]]},"3587":{"position":[[3,2]]},"3597":{"position":[[46,2]]},"3624":{"position":[[127,2]]},"3626":{"position":[[46,2]]},"3660":{"position":[[2,2],[46,2]]},"3664":{"position":[[474,2]]},"3670":{"position":[[2,2]]},"3672":{"position":[[2,2]]},"3684":{"position":[[2,2]]},"3686":{"position":[[35,2]]},"3708":{"position":[[3864,2]]},"3716":{"position":[[36,2]]},"3764":{"position":[[2,2]]},"3768":{"position":[[2,2],[53,2],[2404,2]]},"3774":{"position":[[2,2]]},"3779":{"position":[[158,2]]},"3795":{"position":[[2,2]]},"3802":{"position":[[155,2]]},"3817":{"position":[[164,2]]},"3844":{"position":[[679,2]]},"3856":{"position":[[2,2],[27,2]]},"3910":{"position":[[1515,2]]},"3914":{"position":[[2137,2],[2170,2]]},"3916":{"position":[[2433,2]]},"3918":{"position":[[3536,2]]},"3922":{"position":[[481,2]]},"3932":{"position":[[1249,2]]},"3936":{"position":[[675,2]]},"3940":{"position":[[508,2]]},"3948":{"position":[[362,2]]},"3950":{"position":[[736,2],[842,2]]},"3966":{"position":[[734,2],[1151,2],[1417,2]]},"3978":{"position":[[773,2],[1583,2]]}}}],["情形",{"_index":6257,"t":{"2383":{"position":[[49,2]]}}}],["情节",{"_index":6907,"t":{"2768":{"position":[[51,2]]}}}],["惊呆",{"_index":9516,"t":{"3934":{"position":[[1347,2]]}}}],["想",{"_index":467,"t":{"85":{"position":[[55,1]]},"154":{"position":[[29,1]]},"194":{"position":[[29,1]]},"204":{"position":[[475,1]]},"237":{"position":[[1363,1]]},"257":{"position":[[29,1]]},"340":{"position":[[346,1]]},"425":{"position":[[29,1]]},"435":{"position":[[1154,1]]},"465":{"position":[[29,1]]},"482":{"position":[[419,1]]},"528":{"position":[[312,1],[397,1]]},"536":{"position":[[29,1]]},"562":{"position":[[29,1]]},"587":{"position":[[997,1]]},"736":{"position":[[29,1]]},"743":{"position":[[27,1]]},"775":{"position":[[29,1]]},"1153":{"position":[[29,1]]},"1311":{"position":[[521,1]]},"1389":{"position":[[264,1]]},"1403":{"position":[[67,1]]},"1414":{"position":[[16,1]]},"1418":{"position":[[290,1]]},"1547":{"position":[[423,1]]},"1549":{"position":[[494,1]]},"1701":{"position":[[2,1]]},"1965":{"position":[[0,1]]},"2321":{"position":[[40,1]]},"2402":{"position":[[37,1]]},"2418":{"position":[[713,1]]},"2497":{"position":[[58,1]]},"2561":{"position":[[29,1]]},"2564":{"position":[[196,1]]},"2593":{"position":[[0,1]]},"2611":{"position":[[29,1]]},"2646":{"position":[[84,1]]},"2698":{"position":[[29,1]]},"2717":{"position":[[438,1]]},"2737":{"position":[[29,1]]},"2740":{"position":[[128,1]]},"2770":{"position":[[274,1],[298,1]]},"2889":{"position":[[71,1]]},"2901":{"position":[[2,1]]},"3069":{"position":[[265,1]]},"3110":{"position":[[101,1]]},"3126":{"position":[[534,1]]},"3150":{"position":[[179,1]]},"3205":{"position":[[29,1]]},"3224":{"position":[[10,1]]},"3240":{"position":[[29,1]]},"3242":{"position":[[87,1]]},"3273":{"position":[[977,1]]},"3298":{"position":[[29,1]]},"3323":{"position":[[538,1]]},"3333":{"position":[[29,1]]},"3383":{"position":[[8,1]]},"3409":{"position":[[29,1]]},"3456":{"position":[[54,1]]},"3472":{"position":[[29,1]]},"3605":{"position":[[29,1]]},"3680":{"position":[[418,1]]},"3910":{"position":[[84,1]]},"3934":{"position":[[2181,1]]}}}],["想到",{"_index":472,"t":{"85":{"position":[[80,2]]},"340":{"position":[[1957,2]]}}}],["想方设法",{"_index":7964,"t":{"3352":{"position":[[364,4]]}}}],["想要",{"_index":3800,"t":{"941":{"position":[[131,2]]},"1488":{"position":[[1629,2],[1691,2]]},"1631":{"position":[[401,2]]},"1743":{"position":[[280,2],[475,2]]}}}],["想起",{"_index":9413,"t":{"3926":{"position":[[463,2]]}}}],["意",{"_index":6069,"t":{"2264":{"position":[[35,1]]}}}],["意义",{"_index":4538,"t":{"1509":{"position":[[137,2]]}}}],["意味着",{"_index":2687,"t":{"482":{"position":[[612,3],[670,3],[731,3]]},"2418":{"position":[[919,3],[985,3],[1069,3]]}}}],["意外",{"_index":5707,"t":{"1832":{"position":[[35,2]]},"3908":{"position":[[293,2]]}}}],["意外事件",{"_index":8073,"t":{"3416":{"position":[[263,4]]}}}],["意大利",{"_index":6582,"t":{"2559":{"position":[[1451,3],[1461,3],[1466,3],[1476,3]]}}}],["意思",{"_index":477,"t":{"85":{"position":[[107,2],[259,2]]},"579":{"position":[[8,2]]},"1071":{"position":[[8,2]]},"1396":{"position":[[7,2]]},"1849":{"position":[[24,2]]},"2264":{"position":[[18,2],[29,2]]}}}],["感",{"_index":9523,"t":{"3934":{"position":[[2197,1]]}}}],["感恩",{"_index":4711,"t":{"1511":{"position":[[1624,2]]},"3926":{"position":[[5,2],[10,2],[605,2],[610,2]]}}}],["感觉",{"_index":4595,"t":{"1511":{"position":[[431,2]]},"2770":{"position":[[232,2]]}}}],["感谢",{"_index":678,"t":{"106":{"position":[[58,2]]},"1511":{"position":[[1112,2],[1418,2],[1423,2],[1443,2],[1458,2],[1750,2],[1858,2],[2232,2],[2336,2],[2396,2],[2587,2],[2845,2],[3022,2],[3089,2],[3180,2],[3239,2],[3295,2],[3410,2],[3443,2],[3677,2],[3727,2],[3849,2],[4039,2],[4129,2],[4153,2]]},"1691":{"position":[[51,2]]},"3702":{"position":[[1454,2]]},"3932":{"position":[[1200,2]]},"3942":{"position":[[295,2],[465,2]]},"3986":{"position":[[28,2],[323,2]]}}}],["感谢您",{"_index":4579,"t":{"1511":{"position":[[226,3],[250,3],[271,3],[295,3],[347,3],[503,3],[663,3],[731,3],[880,3],[1325,3],[2042,3],[2096,3],[2790,3],[3581,3],[3640,3],[3748,3],[3779,3],[3886,3],[3961,3],[4092,3]]}}}],["愿",{"_index":7352,"t":{"3069":{"position":[[234,1]]}}}],["慎用",{"_index":3537,"t":{"767":{"position":[[684,2]]}}}],["慎重",{"_index":3431,"t":{"732":{"position":[[335,2]]}}}],["慢慢",{"_index":4498,"t":{"1495":{"position":[[1297,2]]},"1511":{"position":[[2265,2]]},"3152":{"position":[[64,2]]}}}],["慷慨",{"_index":4523,"t":{"1507":{"position":[[76,2]]}}}],["懒",{"_index":476,"t":{"85":{"position":[[104,1],[125,1],[139,1]]},"534":{"position":[[748,1]]},"3426":{"position":[[17,1]]}}}],["懒人",{"_index":3602,"t":{"810":{"position":[[325,2]]},"812":{"position":[[349,2]]},"814":{"position":[[322,2]]},"816":{"position":[[346,2]]},"1111":{"position":[[349,2]]},"1113":{"position":[[347,2]]},"1115":{"position":[[353,2]]},"1117":{"position":[[3811,2]]},"1119":{"position":[[324,2]]},"1121":{"position":[[348,2]]},"1123":{"position":[[294,2]]},"1129":{"position":[[501,2],[1439,2]]},"1194":{"position":[[44,2]]},"1204":{"position":[[192,2]]},"1212":{"position":[[16,2],[72,2]]},"1295":{"position":[[83,2]]},"1795":{"position":[[2792,2]]},"3426":{"position":[[230,2]]}}}],["成",{"_index":1170,"t":{"162":{"position":[[0,1]]},"261":{"position":[[118,1]]},"288":{"position":[[291,1]]},"373":{"position":[[61,1]]},"719":{"position":[[33,1]]},"1117":{"position":[[34,1]]},"1535":{"position":[[8,1]]},"1621":{"position":[[719,1]]},"2023":{"position":[[113,1]]},"2385":{"position":[[85,1]]},"2803":{"position":[[63,1]]},"2809":{"position":[[88,1]]},"3069":{"position":[[223,1]]},"3078":{"position":[[13,1]]},"3267":{"position":[[394,1]]},"3626":{"position":[[253,1]]},"3630":{"position":[[737,1]]},"3942":{"position":[[266,1]]},"3960":{"position":[[652,1]]},"3992":{"position":[[3162,1]]}}}],["成为",{"_index":3899,"t":{"1048":{"position":[[28,2]]},"1507":{"position":[[0,2]]},"1511":{"position":[[2003,2]]},"1672":{"position":[[15,2]]},"2341":{"position":[[136,2]]},"3108":{"position":[[221,2]]},"3110":{"position":[[191,2]]},"3282":{"position":[[81,2]]},"3414":{"position":[[253,2]]}}}],["成功",{"_index":755,"t":{"112":{"position":[[1399,2],[1410,2]]},"119":{"position":[[76,2]]},"121":{"position":[[301,2]]},"127":{"position":[[1643,2]]},"135":{"position":[[538,2]]},"144":{"position":[[5,2],[552,2]]},"152":{"position":[[7,2]]},"247":{"position":[[410,2]]},"308":{"position":[[52,2]]},"310":{"position":[[54,2]]},"321":{"position":[[476,2]]},"696":{"position":[[448,2],[591,2],[920,2],[1023,2],[2196,2],[3126,2],[3805,2],[4705,2]]},"713":{"position":[[707,2]]},"927":{"position":[[769,2],[927,2],[1629,2],[1789,2]]},"1075":{"position":[[24,2]]},"1392":{"position":[[99,2]]},"1488":{"position":[[1666,2],[1721,2]]},"1511":{"position":[[159,2]]},"1555":{"position":[[493,2]]},"1605":{"position":[[213,2],[259,2]]},"1901":{"position":[[391,2]]},"1919":{"position":[[652,2]]},"1925":{"position":[[1261,2],[1272,2]]},"2486":{"position":[[653,2],[716,2]]},"2488":{"position":[[53,2]]},"2749":{"position":[[12,2]]},"2768":{"position":[[1541,2]]},"2836":{"position":[[965,2]]},"3063":{"position":[[1303,2]]},"3080":{"position":[[545,2]]},"3287":{"position":[[81,2]]},"3294":{"position":[[73,2]]},"3296":{"position":[[19,2]]},"3360":{"position":[[202,2]]},"3373":{"position":[[73,2]]},"3387":{"position":[[10,2]]},"3405":{"position":[[14,2],[58,2]]},"3684":{"position":[[52,2]]},"3686":{"position":[[575,2]]},"3706":{"position":[[1314,2]]},"3708":{"position":[[282,2],[1492,2]]},"3712":{"position":[[75,2]]},"3842":{"position":[[51,2],[252,2],[591,2],[882,2],[1200,2],[1447,2],[1774,2],[2037,2],[2377,2],[2678,2],[3010,2],[3295,2]]},"3844":{"position":[[51,2],[258,2]]},"3846":{"position":[[40,2],[296,2],[498,2]]},"3882":{"position":[[28,2]]},"3886":{"position":[[28,2]]},"3888":{"position":[[28,2]]},"3892":{"position":[[28,2]]},"3950":{"position":[[407,2]]},"3956":{"position":[[1036,2]]},"3962":{"position":[[2048,2]]},"3984":{"position":[[396,2],[575,2],[910,2]]},"3992":{"position":[[3857,2]]}}}],["成功失败",{"_index":7864,"t":{"3287":{"position":[[2707,4]]}}}],["成员",{"_index":1552,"t":{"208":{"position":[[26,2]]},"3688":{"position":[[52,2],[62,2],[743,2]]},"3800":{"position":[[58,2]]}}}],["成就感",{"_index":7735,"t":{"3242":{"position":[[101,3]]},"3910":{"position":[[98,3]]}}}],["成本",{"_index":1647,"t":{"225":{"position":[[54,2]]},"255":{"position":[[54,2]]},"300":{"position":[[327,2]]},"2361":{"position":[[328,2]]},"2915":{"position":[[42,2],[133,2],[138,2]]},"2919":{"position":[[153,2]]},"3352":{"position":[[76,2]]},"3628":{"position":[[40,2]]},"3928":{"position":[[264,2]]}}}],["成本低",{"_index":7257,"t":{"2923":{"position":[[19,3],[25,3]]}}}],["成熟",{"_index":7192,"t":{"2910":{"position":[[55,2]]}}}],["成特定",{"_index":4093,"t":{"1277":{"position":[[53,3]]}}}],["成立",{"_index":3180,"t":{"606":{"position":[[1365,2],[1374,2]]}}}],["我们",{"_index":338,"t":{"21":{"position":[[32,2]]},"23":{"position":[[14,2]]},"26":{"position":[[22,2]]},"28":{"position":[[47,2]]},"83":{"position":[[15,2]]},"110":{"position":[[47,2]]},"116":{"position":[[1,2]]},"121":{"position":[[46,2],[70,2],[196,2],[653,2]]},"127":{"position":[[1636,2]]},"135":{"position":[[45,2]]},"152":{"position":[[10,2]]},"154":{"position":[[1,2]]},"164":{"position":[[15,2]]},"194":{"position":[[1,2]]},"199":{"position":[[681,2]]},"210":{"position":[[209,2]]},"212":{"position":[[39,2]]},"220":{"position":[[76,2],[217,2],[774,2]]},"222":{"position":[[1,2]]},"235":{"position":[[53,2]]},"257":{"position":[[1,2]]},"296":{"position":[[1,2]]},"327":{"position":[[34,2]]},"333":{"position":[[1,2]]},"340":{"position":[[530,2]]},"369":{"position":[[9,2]]},"371":{"position":[[14,2]]},"375":{"position":[[1,2]]},"417":{"position":[[4,2]]},"421":{"position":[[4,2]]},"425":{"position":[[1,2]]},"431":{"position":[[2,2]]},"441":{"position":[[88,2]]},"443":{"position":[[4,2]]},"445":{"position":[[60,2],[102,2]]},"449":{"position":[[5,2],[32,2]]},"451":{"position":[[9,2],[45,2]]},"455":{"position":[[84,2],[106,2]]},"465":{"position":[[1,2]]},"496":{"position":[[1,2]]},"502":{"position":[[1,2]]},"526":{"position":[[41,2]]},"536":{"position":[[1,2]]},"548":{"position":[[6,2]]},"554":{"position":[[112,2]]},"562":{"position":[[1,2]]},"565":{"position":[[47,2],[71,2]]},"567":{"position":[[383,2]]},"570":{"position":[[0,2],[2668,2]]},"576":{"position":[[1,2]]},"585":{"position":[[8,2]]},"587":{"position":[[20,2]]},"610":{"position":[[77,2]]},"617":{"position":[[1369,2]]},"625":{"position":[[0,2]]},"641":{"position":[[1,2]]},"653":{"position":[[37,2],[55,2]]},"655":{"position":[[289,2]]},"657":{"position":[[1,2]]},"673":{"position":[[1,2]]},"677":{"position":[[35,2]]},"688":{"position":[[1,2]]},"700":{"position":[[1,2]]},"704":{"position":[[35,2]]},"719":{"position":[[5,2],[27,2]]},"736":{"position":[[1,2]]},"751":{"position":[[39,2]]},"753":{"position":[[1,2]]},"775":{"position":[[1,2]]},"797":{"position":[[1,2]]},"836":{"position":[[9,2]]},"838":{"position":[[1,2]]},"841":{"position":[[3,2],[51,2]]},"848":{"position":[[1,2]]},"887":{"position":[[218,2]]},"891":{"position":[[1,2]]},"915":{"position":[[34,2]]},"921":{"position":[[1,2]]},"933":{"position":[[383,2]]},"935":{"position":[[9,2]]},"937":{"position":[[1,2]]},"941":{"position":[[15,2],[129,2],[197,2]]},"951":{"position":[[1,2]]},"981":{"position":[[23,2]]},"983":{"position":[[1,2]]},"986":{"position":[[86,2]]},"1041":{"position":[[4,2]]},"1043":{"position":[[1,2]]},"1048":{"position":[[42,2]]},"1099":{"position":[[1,2]]},"1137":{"position":[[1,2]]},"1141":{"position":[[44,2],[53,2]]},"1143":{"position":[[76,2]]},"1149":{"position":[[2,2],[24,2]]},"1153":{"position":[[1,2]]},"1214":{"position":[[154,2]]},"1218":{"position":[[1,2]]},"1283":{"position":[[1,2]]},"1286":{"position":[[2,2]]},"1304":{"position":[[1,2]]},"1321":{"position":[[1,2]]},"1353":{"position":[[37,2],[55,2]]},"1355":{"position":[[1,2]]},"1358":{"position":[[26,2]]},"1370":{"position":[[1,2]]},"1381":{"position":[[1,2]]},"1385":{"position":[[81,2]]},"1399":{"position":[[72,2]]},"1401":{"position":[[56,2]]},"1403":{"position":[[33,2]]},"1412":{"position":[[66,2]]},"1414":{"position":[[5,2]]},"1424":{"position":[[116,2],[172,2],[394,2],[402,2],[450,2],[1804,2]]},"1442":{"position":[[1,2]]},"1474":{"position":[[122,2]]},"1476":{"position":[[1,2]]},"1481":{"position":[[92,2]]},"1501":{"position":[[1,2]]},"1507":{"position":[[70,2]]},"1509":{"position":[[16,2],[246,2]]},"1511":{"position":[[166,2],[465,2],[1027,2],[3242,2]]},"1513":{"position":[[60,2]]},"1520":{"position":[[189,2]]},"1539":{"position":[[0,2]]},"1541":{"position":[[345,2]]},"1545":{"position":[[2,2]]},"1547":{"position":[[181,2]]},"1561":{"position":[[0,2]]},"1563":{"position":[[1,2]]},"1568":{"position":[[1,2]]},"1589":{"position":[[232,2]]},"1609":{"position":[[289,2]]},"1623":{"position":[[5,2]]},"1631":{"position":[[399,2],[409,2]]},"1663":{"position":[[55,2]]},"1669":{"position":[[1,2]]},"1672":{"position":[[18,2]]},"1693":{"position":[[1,2]]},"1697":{"position":[[69,2]]},"1703":{"position":[[49,2]]},"1705":{"position":[[11,2]]},"1707":{"position":[[8,2]]},"1709":{"position":[[24,2]]},"1713":{"position":[[1,2]]},"1735":{"position":[[2,2],[29,2]]},"1743":{"position":[[3,2]]},"1745":{"position":[[45,2],[337,2]]},"1753":{"position":[[0,2]]},"1757":{"position":[[1,2]]},"1761":{"position":[[316,2],[528,2]]},"1775":{"position":[[9,2],[47,2]]},"1777":{"position":[[154,2]]},"1785":{"position":[[3,2]]},"1789":{"position":[[1,2]]},"1829":{"position":[[1,2]]},"1832":{"position":[[92,2]]},"1883":{"position":[[2,2]]},"1889":{"position":[[1,2]]},"1967":{"position":[[1,2]]},"1981":{"position":[[83,2]]},"1993":{"position":[[83,2]]},"1995":{"position":[[32,2]]},"2016":{"position":[[91,2]]},"2018":{"position":[[32,2]]},"2231":{"position":[[14,2]]},"2235":{"position":[[22,2]]},"2237":{"position":[[47,2]]},"2257":{"position":[[1,2]]},"2287":{"position":[[1,2]]},"2300":{"position":[[1,2]]},"2323":{"position":[[1,2]]},"2326":{"position":[[117,2],[268,2]]},"2337":{"position":[[1,2]]},"2352":{"position":[[197,2]]},"2375":{"position":[[3,2]]},"2379":{"position":[[3,2]]},"2389":{"position":[[1,2]]},"2402":{"position":[[33,2]]},"2404":{"position":[[5,2]]},"2436":{"position":[[4,2],[41,2]]},"2438":{"position":[[276,2]]},"2440":{"position":[[310,2]]},"2472":{"position":[[4,2]]},"2474":{"position":[[4,2],[28,2]]},"2492":{"position":[[1,2]]},"2514":{"position":[[1,2]]},"2528":{"position":[[12,2]]},"2538":{"position":[[39,2]]},"2542":{"position":[[4,2]]},"2561":{"position":[[1,2]]},"2591":{"position":[[19,2]]},"2595":{"position":[[1,2]]},"2605":{"position":[[6,2]]},"2611":{"position":[[1,2]]},"2631":{"position":[[1,2]]},"2646":{"position":[[6,2],[64,2]]},"2659":{"position":[[1,2]]},"2684":{"position":[[4,2],[25,2]]},"2686":{"position":[[3,2]]},"2688":{"position":[[135,2]]},"2694":{"position":[[38,2]]},"2698":{"position":[[1,2]]},"2705":{"position":[[2,2]]},"2719":{"position":[[0,2]]},"2735":{"position":[[36,2]]},"2737":{"position":[[1,2]]},"2766":{"position":[[1,2]]},"2770":{"position":[[174,2],[272,2]]},"2778":{"position":[[1,2]]},"2800":{"position":[[1,2]]},"2813":{"position":[[1,2],[78,2],[94,2],[98,2],[683,2]]},"2840":{"position":[[1,2]]},"2843":{"position":[[42,2]]},"2846":{"position":[[364,2]]},"2852":{"position":[[32,2]]},"2858":{"position":[[1,2]]},"2862":{"position":[[56,2],[209,2]]},"2903":{"position":[[34,2]]},"2907":{"position":[[1,2]]},"2912":{"position":[[130,2]]},"2935":{"position":[[37,2]]},"2937":{"position":[[8,2]]},"2975":{"position":[[1,2]]},"3084":{"position":[[1,2]]},"3092":{"position":[[93,2]]},"3094":{"position":[[76,2],[107,2]]},"3102":{"position":[[2,2]]},"3106":{"position":[[0,2]]},"3118":{"position":[[5,2]]},"3122":{"position":[[38,2]]},"3128":{"position":[[1,2]]},"3133":{"position":[[1,2]]},"3140":{"position":[[65,2]]},"3158":{"position":[[5,2]]},"3168":{"position":[[72,2]]},"3170":{"position":[[6,2]]},"3189":{"position":[[59,2]]},"3205":{"position":[[1,2]]},"3240":{"position":[[1,2]]},"3244":{"position":[[0,2]]},"3256":{"position":[[6,2]]},"3279":{"position":[[1,2]]},"3284":{"position":[[79,2]]},"3287":{"position":[[13,2],[3050,2],[3092,2]]},"3289":{"position":[[4,2]]},"3298":{"position":[[1,2]]},"3305":{"position":[[4,2]]},"3311":{"position":[[1,2]]},"3323":{"position":[[508,2]]},"3331":{"position":[[10,2]]},"3333":{"position":[[1,2]]},"3337":{"position":[[2,2],[28,2]]},"3343":{"position":[[0,2]]},"3347":{"position":[[1,2]]},"3377":{"position":[[5,2]]},"3387":{"position":[[4,2]]},"3389":{"position":[[3,2]]},"3391":{"position":[[25,2],[49,2]]},"3401":{"position":[[3,2]]},"3409":{"position":[[1,2]]},"3418":{"position":[[18,2],[37,2],[62,2]]},"3466":{"position":[[36,2]]},"3472":{"position":[[1,2]]},"3522":{"position":[[90,2]]},"3524":{"position":[[3,2]]},"3563":{"position":[[87,2]]},"3581":{"position":[[0,2]]},"3583":{"position":[[0,2]]},"3585":{"position":[[3,2]]},"3605":{"position":[[1,2]]},"3636":{"position":[[684,2]]},"3638":{"position":[[14,2]]},"3664":{"position":[[68,2]]},"3680":{"position":[[3,2]]},"3688":{"position":[[36,2]]},"3690":{"position":[[36,2]]},"3692":{"position":[[36,2]]},"3700":{"position":[[34,2]]},"3702":{"position":[[613,2],[1452,2]]},"3710":{"position":[[5,2],[25,2]]},"3714":{"position":[[5,2],[33,2]]},"3716":{"position":[[40,2]]},"3724":{"position":[[1,2]]},"3756":{"position":[[1,2]]},"3768":{"position":[[57,2]]},"3772":{"position":[[4,2]]},"3779":{"position":[[35,2]]},"3783":{"position":[[3,2]]},"3795":{"position":[[35,2]]},"3802":{"position":[[34,2]]},"3808":{"position":[[1682,2]]},"3817":{"position":[[35,2]]},"3906":{"position":[[1,2]]},"3910":{"position":[[1086,2]]},"3928":{"position":[[359,2]]},"3938":{"position":[[840,2],[984,2]]}}}],["我辈",{"_index":4878,"t":{"1511":{"position":[[3866,2]]}}}],["或多或少",{"_index":8458,"t":{"3626":{"position":[[15,4]]}}}],["或者",{"_index":1889,"t":{"263":{"position":[[39,2],[53,2]]},"336":{"position":[[52,2]]},"417":{"position":[[14,2]]},"443":{"position":[[8,2]]},"719":{"position":[[20,2]]},"960":{"position":[[697,2]]},"1248":{"position":[[84,2]]},"1418":{"position":[[175,2]]},"1513":{"position":[[36,2]]},"1801":{"position":[[2432,2]]},"1803":{"position":[[4387,2]]},"1911":{"position":[[50,2]]},"1913":{"position":[[1116,2]]},"1917":{"position":[[22,2]]},"1931":{"position":[[33,2]]},"1933":{"position":[[654,2]]},"2375":{"position":[[21,2]]},"2418":{"position":[[419,2],[465,2]]},"2495":{"position":[[47,2]]},"2591":{"position":[[32,2]]},"2646":{"position":[[81,2],[91,2]]},"2684":{"position":[[321,2],[339,2]]},"2782":{"position":[[58,2]]},"2809":{"position":[[106,2]]},"3224":{"position":[[1803,2]]},"3267":{"position":[[8,2],[139,2]]},"3277":{"position":[[19,2]]},"3289":{"position":[[11,2]]},"3377":{"position":[[15,2]]},"3389":{"position":[[19,2]]},"3412":{"position":[[77,2]]},"3414":{"position":[[63,2],[209,2]]},"3430":{"position":[[1052,2]]},"3432":{"position":[[4360,2]]},"3434":{"position":[[268,2]]},"3448":{"position":[[33,2]]},"3452":{"position":[[641,2],[777,2]]},"3456":{"position":[[52,2]]},"3470":{"position":[[13,2]]},"3610":{"position":[[31,2]]},"3626":{"position":[[404,2]]},"3783":{"position":[[24,2]]},"3791":{"position":[[1344,2]]},"3846":{"position":[[94,2],[350,2]]},"3916":{"position":[[3637,2],[3773,2]]},"3964":{"position":[[1041,2]]}}}],["战略",{"_index":8068,"t":{"3414":{"position":[[315,2]]}}}],["截断",{"_index":8394,"t":{"3595":{"position":[[82,2],[220,2],[400,2]]},"3916":{"position":[[2171,2]]}}}],["截至",{"_index":5908,"t":{"1969":{"position":[[5,2]]}}}],["戳",{"_index":6792,"t":{"2674":{"position":[[451,1]]},"3708":{"position":[[502,1]]},"3912":{"position":[[1893,1],[1923,1]]},"3914":{"position":[[1171,1]]},"3994":{"position":[[251,1]]}}}],["所以",{"_index":358,"t":{"28":{"position":[[45,2]]},"85":{"position":[[275,2]]},"137":{"position":[[21,2]]},"206":{"position":[[231,2]]},"210":{"position":[[206,2]]},"220":{"position":[[120,2]]},"286":{"position":[[77,2]]},"355":{"position":[[19,2]]},"357":{"position":[[36,2]]},"363":{"position":[[81,2]]},"373":{"position":[[162,2]]},"417":{"position":[[105,2]]},"427":{"position":[[150,2]]},"445":{"position":[[783,2]]},"480":{"position":[[32,2]]},"486":{"position":[[28,2]]},"502":{"position":[[74,2]]},"514":{"position":[[642,2]]},"528":{"position":[[102,2]]},"530":{"position":[[31,2]]},"570":{"position":[[1653,2]]},"587":{"position":[[2194,2]]},"679":{"position":[[42,2]]},"706":{"position":[[53,2]]},"887":{"position":[[40,2]]},"941":{"position":[[164,2]]},"947":{"position":[[53,2],[496,2]]},"1039":{"position":[[31,2]]},"1052":{"position":[[31,2]]},"1060":{"position":[[18,2]]},"1097":{"position":[[16,2]]},"1200":{"position":[[249,2]]},"1286":{"position":[[53,2]]},"1309":{"position":[[114,2]]},"1319":{"position":[[53,2]]},"1368":{"position":[[20,2]]},"1383":{"position":[[33,2]]},"1424":{"position":[[69,2]]},"1474":{"position":[[120,2]]},"1481":{"position":[[90,2]]},"1609":{"position":[[287,2]]},"1663":{"position":[[540,2]]},"1672":{"position":[[86,2]]},"1703":{"position":[[47,2]]},"1707":{"position":[[74,2]]},"1711":{"position":[[43,2],[954,2]]},"1761":{"position":[[168,2],[361,2]]},"1801":{"position":[[61,2]]},"1849":{"position":[[38,2]]},"1969":{"position":[[45,2]]},"1973":{"position":[[84,2]]},"1987":{"position":[[84,2]]},"2010":{"position":[[92,2]]},"2237":{"position":[[45,2]]},"2245":{"position":[[32,2]]},"2326":{"position":[[277,2]]},"2335":{"position":[[80,2]]},"2385":{"position":[[79,2]]},"2391":{"position":[[175,2]]},"2442":{"position":[[2067,2]]},"2538":{"position":[[111,2]]},"2621":{"position":[[25,2]]},"2684":{"position":[[391,2]]},"2703":{"position":[[72,2]]},"2731":{"position":[[154,2]]},"2862":{"position":[[382,2]]},"2881":{"position":[[260,2]]},"2905":{"position":[[35,2]]},"2935":{"position":[[35,2]]},"2965":{"position":[[36,2]]},"2995":{"position":[[82,2]]},"3069":{"position":[[214,2]]},"3092":{"position":[[101,2],[144,2]]},"3094":{"position":[[151,2]]},"3118":{"position":[[186,2]]},"3122":{"position":[[36,2]]},"3140":{"position":[[18,2]]},"3156":{"position":[[36,2]]},"3168":{"position":[[70,2]]},"3189":{"position":[[72,2]]},"3207":{"position":[[99,2]]},"3242":{"position":[[233,2]]},"3287":{"position":[[137,2],[462,2]]},"3329":{"position":[[48,2]]},"3345":{"position":[[73,2]]},"3428":{"position":[[104,2]]},"3430":{"position":[[1904,2]]},"3608":{"position":[[84,2]]},"3612":{"position":[[65,2]]},"3626":{"position":[[179,2],[479,2]]},"3636":{"position":[[659,2]]},"3660":{"position":[[28,2]]},"3676":{"position":[[145,2]]},"3686":{"position":[[71,2]]},"3690":{"position":[[91,2]]},"3740":{"position":[[16,2]]},"3910":{"position":[[230,2]]},"3914":{"position":[[1653,2]]},"3924":{"position":[[2708,2]]},"3934":{"position":[[2411,2]]},"3938":{"position":[[895,2]]}}}],["所在",{"_index":97,"t":{"5":{"position":[[112,2]]},"7":{"position":[[108,2]]},"206":{"position":[[289,2]]},"212":{"position":[[22,2]]},"227":{"position":[[19,2]]},"399":{"position":[[120,2],[271,2],[372,2]]},"534":{"position":[[27,2]]},"724":{"position":[[19,2]]},"1309":{"position":[[8,2]]},"1379":{"position":[[661,2]]},"1440":{"position":[[166,2],[195,2],[559,2]]},"1549":{"position":[[13,2]]},"1857":{"position":[[144,2]]},"1875":{"position":[[668,2]]},"2290":{"position":[[108,2]]},"2627":{"position":[[162,2]]},"2834":{"position":[[19,2]]},"3688":{"position":[[748,2]]},"3777":{"position":[[175,2]]},"3798":{"position":[[181,2]]}}}],["所有",{"_index":47,"t":{"3":{"position":[[392,2]]},"11":{"position":[[750,2]]},"48":{"position":[[2,2],[110,2]]},"53":{"position":[[24,2]]},"64":{"position":[[37,2]]},"72":{"position":[[2,2],[110,2]]},"77":{"position":[[24,2]]},"95":{"position":[[155,2]]},"110":{"position":[[16,2]]},"121":{"position":[[389,2],[607,2]]},"127":{"position":[[1731,2]]},"137":{"position":[[6,2]]},"186":{"position":[[159,2]]},"216":{"position":[[451,2]]},"220":{"position":[[205,2]]},"302":{"position":[[12,2]]},"323":{"position":[[36,2]]},"367":{"position":[[184,2],[221,2]]},"369":{"position":[[277,2]]},"373":{"position":[[27,2]]},"413":{"position":[[19,2]]},"415":{"position":[[133,2],[263,2]]},"494":{"position":[[522,2]]},"504":{"position":[[40,2]]},"510":{"position":[[442,2]]},"530":{"position":[[65,2]]},"554":{"position":[[130,2]]},"565":{"position":[[16,2]]},"567":{"position":[[11,2],[390,2]]},"570":{"position":[[833,2],[1176,2],[1277,2],[1476,2],[2677,2]]},"608":{"position":[[692,2]]},"627":{"position":[[32,2]]},"651":{"position":[[381,2]]},"688":{"position":[[49,2]]},"694":{"position":[[63,2]]},"698":{"position":[[151,2]]},"706":{"position":[[242,2]]},"708":{"position":[[515,2]]},"751":{"position":[[17,2]]},"789":{"position":[[202,2]]},"846":{"position":[[9,2]]},"887":{"position":[[17,2]]},"911":{"position":[[178,2]]},"933":{"position":[[11,2],[599,2]]},"939":{"position":[[29,2],[107,2]]},"988":{"position":[[347,2],[394,2],[426,2],[442,2]]},"1039":{"position":[[65,2]]},"1135":{"position":[[0,2]]},"1194":{"position":[[38,2]]},"1196":{"position":[[120,2]]},"1198":{"position":[[129,2]]},"1200":{"position":[[0,2],[152,2],[253,2]]},"1214":{"position":[[6,2]]},"1275":{"position":[[38,2]]},"1279":{"position":[[43,2],[978,2]]},"1309":{"position":[[15,2]]},"1319":{"position":[[243,2]]},"1351":{"position":[[381,2]]},"1416":{"position":[[299,2],[314,2]]},"1422":{"position":[[146,2]]},"1424":{"position":[[1759,2]]},"1426":{"position":[[234,2]]},"1432":{"position":[[61,2]]},"1440":{"position":[[267,2],[409,2]]},"1497":{"position":[[320,2]]},"1509":{"position":[[249,2]]},"1539":{"position":[[218,2],[1146,2],[1652,2],[1922,2],[1942,2]]},"1557":{"position":[[38,2],[577,2]]},"1566":{"position":[[159,2]]},"1580":{"position":[[110,2],[169,2]]},"1627":{"position":[[6,2],[361,2]]},"1659":{"position":[[953,2],[1137,2]]},"1665":{"position":[[24,2]]},"1735":{"position":[[239,2]]},"1741":{"position":[[2049,2]]},"1763":{"position":[[39,2]]},"1775":{"position":[[3859,2]]},"1783":{"position":[[14,2]]},"1807":{"position":[[47,2]]},"1811":{"position":[[22,2]]},"1823":{"position":[[56,2]]},"1898":{"position":[[53,2]]},"1901":{"position":[[496,2]]},"1907":{"position":[[44,2]]},"1911":{"position":[[12,2]]},"1913":{"position":[[1267,2]]},"1919":{"position":[[291,2],[730,2]]},"1925":{"position":[[1459,2]]},"1927":{"position":[[776,2]]},"1933":{"position":[[896,2]]},"1935":{"position":[[391,2]]},"1941":{"position":[[1147,2]]},"1943":{"position":[[341,2]]},"1947":{"position":[[62,2]]},"1951":{"position":[[788,2]]},"2264":{"position":[[121,2]]},"2278":{"position":[[112,2]]},"2285":{"position":[[0,2]]},"2294":{"position":[[798,2]]},"2333":{"position":[[550,2]]},"2486":{"position":[[59,2],[319,2]]},"2534":{"position":[[34,2]]},"2536":{"position":[[149,2]]},"2635":{"position":[[12,2]]},"2639":{"position":[[6,2]]},"2641":{"position":[[9,2],[39,2]]},"2662":{"position":[[12,2]]},"2666":{"position":[[6,2]]},"2668":{"position":[[9,2],[39,2]]},"2709":{"position":[[234,2]]},"2790":{"position":[[639,2]]},"2796":{"position":[[196,2]]},"2807":{"position":[[100,2]]},"2813":{"position":[[100,2]]},"2836":{"position":[[1177,2]]},"2881":{"position":[[202,2]]},"2885":{"position":[[45,2]]},"2895":{"position":[[51,2]]},"2917":{"position":[[12,2]]},"2937":{"position":[[1034,2]]},"2991":{"position":[[139,2],[269,2]]},"3063":{"position":[[1373,2]]},"3069":{"position":[[46,2]]},"3080":{"position":[[72,2]]},"3092":{"position":[[111,2]]},"3094":{"position":[[69,2]]},"3118":{"position":[[123,2]]},"3124":{"position":[[13,2]]},"3215":{"position":[[462,2]]},"3224":{"position":[[457,2]]},"3261":{"position":[[4,2]]},"3273":{"position":[[595,2],[694,2]]},"3287":{"position":[[103,2],[139,2],[387,2],[464,2]]},"3323":{"position":[[351,2],[458,2]]},"3365":{"position":[[31,2]]},"3385":{"position":[[44,2]]},"3436":{"position":[[152,2]]},"3532":{"position":[[6,2]]},"3571":{"position":[[6,2]]},"3593":{"position":[[76,2]]},"3644":{"position":[[953,2],[1137,2]]},"3706":{"position":[[1384,2]]},"3779":{"position":[[1619,2]]},"3783":{"position":[[1248,2],[1727,2]]},"3802":{"position":[[2380,2]]},"3804":{"position":[[403,2]]},"3808":{"position":[[67,2]]},"3819":{"position":[[208,2],[1455,2]]},"3828":{"position":[[37,2]]},"3910":{"position":[[2177,2],[2232,2]]},"3912":{"position":[[99,2],[1295,2],[1533,2],[1578,2],[2518,2]]},"3914":{"position":[[2524,2]]},"3916":{"position":[[2710,2]]},"3918":{"position":[[2406,2],[2813,2]]},"3922":{"position":[[788,2],[848,2]]},"3924":{"position":[[2771,2]]},"3926":{"position":[[653,2]]},"3928":{"position":[[318,2]]},"3930":{"position":[[500,2]]},"3932":{"position":[[1418,2],[1578,2]]},"3934":{"position":[[277,2],[2537,2],[3010,2]]},"3936":{"position":[[398,2]]},"3940":{"position":[[335,2]]},"3942":{"position":[[111,2]]},"3952":{"position":[[165,2]]},"3962":{"position":[[300,2],[521,2]]},"3964":{"position":[[270,2],[304,2]]},"3968":{"position":[[187,2]]},"3972":{"position":[[650,2]]},"3978":{"position":[[539,2]]},"3980":{"position":[[137,2]]},"3986":{"position":[[201,2]]},"3992":{"position":[[1030,2],[1430,2]]},"4004":{"position":[[487,2]]},"4006":{"position":[[73,2],[182,2],[363,2]]}}}],["所有主",{"_index":3934,"t":{"1068":{"position":[[87,3]]}}}],["所示",{"_index":3122,"t":{"597":{"position":[[733,2]]},"599":{"position":[[618,2]]},"602":{"position":[[268,2]]},"610":{"position":[[124,2]]},"617":{"position":[[1898,2],[2511,2]]},"629":{"position":[[3,2]]},"919":{"position":[[103,2]]},"1535":{"position":[[35,2]]},"1561":{"position":[[33,2]]},"1584":{"position":[[521,2]]},"1603":{"position":[[351,2]]},"1605":{"position":[[273,2]]},"1607":{"position":[[305,2]]},"1609":{"position":[[252,2],[705,2]]},"1611":{"position":[[825,2]]},"1613":{"position":[[219,2]]},"1615":{"position":[[258,2]]},"1617":{"position":[[301,2],[543,2],[820,2],[1086,2]]},"1619":{"position":[[424,2]]},"1621":{"position":[[411,2],[691,2]]},"1643":{"position":[[298,2]]},"1645":{"position":[[292,2]]},"1647":{"position":[[359,2]]},"1649":{"position":[[258,2]]},"1651":{"position":[[310,2]]},"1653":{"position":[[303,2]]},"1655":{"position":[[346,2]]},"1657":{"position":[[461,2]]},"1659":{"position":[[850,2],[1291,2]]},"1845":{"position":[[253,2],[562,2]]},"1859":{"position":[[255,2]]},"1873":{"position":[[430,2]]},"3632":{"position":[[46,2]]},"3636":{"position":[[538,2]]},"3638":{"position":[[697,2]]},"3640":{"position":[[692,2]]},"3642":{"position":[[462,2]]},"3644":{"position":[[850,2],[1291,2]]},"3646":{"position":[[106,2]]},"3648":{"position":[[105,2]]},"3652":{"position":[[3,2]]},"3654":{"position":[[86,2]]},"3656":{"position":[[288,2]]},"3664":{"position":[[244,2]]}}}],["所说",{"_index":5457,"t":{"1761":{"position":[[513,2]]},"2357":{"position":[[4,2]]},"3476":{"position":[[98,2]]}}}],["所谓",{"_index":2437,"t":{"404":{"position":[[228,2]]},"1071":{"position":[[0,2]]},"1385":{"position":[[0,2]]},"1717":{"position":[[2,2]]},"1761":{"position":[[373,2]]},"1892":{"position":[[74,2]]},"3815":{"position":[[0,2]]}}}],["手",{"_index":7492,"t":{"3138":{"position":[[50,1]]},"3250":{"position":[[164,1]]},"3319":{"position":[[24,1]]}}}],["手上",{"_index":7021,"t":{"2770":{"position":[[311,2]]}}}],["手写",{"_index":1995,"t":{"302":{"position":[[120,2]]},"1761":{"position":[[174,2]]}}}],["手动",{"_index":346,"t":{"21":{"position":[[107,2]]},"23":{"position":[[89,2]]},"133":{"position":[[650,2]]},"229":{"position":[[88,2]]},"235":{"position":[[57,2]]},"245":{"position":[[255,2]]},"336":{"position":[[389,2]]},"445":{"position":[[46,2]]},"455":{"position":[[110,2]]},"530":{"position":[[794,2]]},"583":{"position":[[12,2]]},"591":{"position":[[85,2]]},"615":{"position":[[715,2]]},"639":{"position":[[397,2]]},"887":{"position":[[161,2]]},"1039":{"position":[[795,2]]},"1145":{"position":[[511,2]]},"1488":{"position":[[1642,2]]},"1549":{"position":[[220,2]]},"1557":{"position":[[85,2],[922,2]]},"1566":{"position":[[624,2]]},"1580":{"position":[[284,2],[329,2]]},"1589":{"position":[[251,2]]},"1663":{"position":[[60,2]]},"1711":{"position":[[827,2]]},"1741":{"position":[[1662,2]]},"1783":{"position":[[154,2]]},"1785":{"position":[[7,2]]},"1801":{"position":[[1964,2]]},"1907":{"position":[[305,2],[439,2]]},"2061":{"position":[[48,2]]},"2096":{"position":[[155,2]]},"2182":{"position":[[249,2]]},"2231":{"position":[[89,2]]},"2402":{"position":[[223,2]]},"2478":{"position":[[474,2]]},"2686":{"position":[[110,2]]},"2694":{"position":[[40,2]]},"2790":{"position":[[365,2]]},"2831":{"position":[[55,2]]},"2951":{"position":[[638,2]]},"2973":{"position":[[54,2]]},"3215":{"position":[[756,2]]},"3224":{"position":[[226,2]]},"3273":{"position":[[729,2]]},"3289":{"position":[[123,2]]},"3296":{"position":[[51,2]]},"3323":{"position":[[445,2]]},"3422":{"position":[[8,2]]},"3486":{"position":[[474,2]]},"3583":{"position":[[32,2]]},"3591":{"position":[[168,2]]},"3650":{"position":[[39,2],[46,2],[52,2]]},"3922":{"position":[[2087,2]]},"3924":{"position":[[1402,2]]},"3932":{"position":[[434,2],[778,2]]},"3972":{"position":[[474,2]]},"3978":{"position":[[344,2]]},"3992":{"position":[[3183,2]]},"3994":{"position":[[841,2]]},"4000":{"position":[[247,2],[776,2]]}}}],["手工",{"_index":2579,"t":{"445":{"position":[[787,2]]},"1576":{"position":[[308,2]]},"1578":{"position":[[91,2]]},"1767":{"position":[[103,2]]}}}],["手工操作",{"_index":6795,"t":{"2682":{"position":[[35,4]]}}}],["手机",{"_index":3147,"t":{"606":{"position":[[200,2]]},"1511":{"position":[[37,2]]},"3992":{"position":[[2268,2]]}}}],["手机号",{"_index":3143,"t":{"606":{"position":[[162,3]]},"2782":{"position":[[109,3]]},"3978":{"position":[[919,3]]}}}],["才",{"_index":740,"t":{"112":{"position":[[1090,1]]},"172":{"position":[[3,1]]},"208":{"position":[[36,1]]},"340":{"position":[[1551,1]]},"685":{"position":[[572,1]]},"1488":{"position":[[1651,1]]},"1507":{"position":[[84,1]]},"1557":{"position":[[260,1]]},"1753":{"position":[[343,1]]},"1795":{"position":[[1545,1]]},"1861":{"position":[[163,1]]},"1867":{"position":[[708,1]]},"1901":{"position":[[399,1]]},"1913":{"position":[[901,1]]},"1925":{"position":[[952,1]]},"2199":{"position":[[183,1]]},"2613":{"position":[[37,1]]},"2745":{"position":[[296,1]]},"2747":{"position":[[331,1]]},"2770":{"position":[[256,1]]},"2836":{"position":[[1278,1]]},"2985":{"position":[[345,1]]},"3094":{"position":[[139,1]]},"3432":{"position":[[255,1],[582,1]]},"3434":{"position":[[676,1]]},"3452":{"position":[[467,1]]},"3636":{"position":[[613,1]]},"3916":{"position":[[2685,1],[3470,1]]},"3994":{"position":[[650,1]]}}}],["才能",{"_index":957,"t":{"127":{"position":[[185,2]]},"340":{"position":[[1294,2]]},"417":{"position":[[61,2]]},"433":{"position":[[187,2]]},"1071":{"position":[[59,2]]},"1392":{"position":[[57,2]]},"1707":{"position":[[43,2]]},"1773":{"position":[[309,2]]},"2627":{"position":[[35,2]]},"2919":{"position":[[111,2]]},"2995":{"position":[[38,2]]},"3063":{"position":[[1111,2]]},"3305":{"position":[[14,2]]},"3686":{"position":[[350,2]]},"3688":{"position":[[783,2]]},"3706":{"position":[[1103,2]]},"3940":{"position":[[910,2]]}}}],["扒",{"_index":6152,"t":{"2326":{"position":[[215,1]]}}}],["打个包",{"_index":4493,"t":{"1495":{"position":[[1225,3]]}}}],["打勾",{"_index":7360,"t":{"3071":{"position":[[176,2]]}}}],["打包",{"_index":4437,"t":{"1488":{"position":[[37,2]]},"1495":{"position":[[37,2]]},"1547":{"position":[[2,2],[430,2]]},"1549":{"position":[[2,2],[501,2]]}}}],["打印",{"_index":4959,"t":{"1539":{"position":[[39,2]]},"1543":{"position":[[19,2]]},"1705":{"position":[[113,2],[184,2],[255,2]]},"2041":{"position":[[38,2]]},"2261":{"position":[[210,2]]},"2981":{"position":[[353,2]]},"3254":{"position":[[599,2],[608,2],[974,2],[983,2],[1201,2],[1210,2]]},"3446":{"position":[[290,2]]},"3460":{"position":[[52,2],[112,2]]},"3464":{"position":[[258,2]]},"3601":{"position":[[66,2]]},"3770":{"position":[[9,2],[368,2],[1765,2],[3419,2],[5040,2]]},"3785":{"position":[[99,2],[803,2],[1471,2]]},"3812":{"position":[[99,2],[1075,2],[2365,2]]},"3821":{"position":[[112,2]]},"3920":{"position":[[350,2]]},"3924":{"position":[[1239,2]]},"3966":{"position":[[141,2]]},"3980":{"position":[[500,2]]},"3984":{"position":[[393,2],[489,2]]},"3986":{"position":[[1072,2]]},"3992":{"position":[[282,2],[1999,2]]}}}],["打开",{"_index":434,"t":{"53":{"position":[[57,2]]},"55":{"position":[[0,2]]},"64":{"position":[[83,2]]},"66":{"position":[[0,2]]},"77":{"position":[[57,2]]},"79":{"position":[[0,2]]},"306":{"position":[[0,2],[56,2],[72,2]]},"308":{"position":[[72,2]]},"310":{"position":[[74,2]]},"675":{"position":[[224,2]]},"688":{"position":[[11,2]]},"724":{"position":[[11,2]]},"1377":{"position":[[327,2]]},"1474":{"position":[[162,2]]},"1547":{"position":[[50,2]]},"1549":{"position":[[47,2]]},"1973":{"position":[[0,2]]},"1981":{"position":[[75,2]]},"1987":{"position":[[0,2]]},"1993":{"position":[[75,2]]},"2010":{"position":[[0,2]]},"2016":{"position":[[83,2]]},"2503":{"position":[[124,2]]},"2510":{"position":[[0,2]]},"2751":{"position":[[508,2]]},"2836":{"position":[[864,2]]},"2864":{"position":[[0,2]]},"3078":{"position":[[45,2],[66,2]]},"3307":{"position":[[0,2]]},"3321":{"position":[[0,2]]},"3362":{"position":[[21,2]]},"3369":{"position":[[59,2]]},"3432":{"position":[[4358,2]]},"3702":{"position":[[973,2]]},"3992":{"position":[[2939,2]]}}}],["打算",{"_index":1524,"t":{"204":{"position":[[445,2]]},"1389":{"position":[[239,2]]}}}],["托",{"_index":6528,"t":{"2559":{"position":[[923,1]]}}}],["托管",{"_index":1754,"t":{"239":{"position":[[96,2]]},"251":{"position":[[86,2]]},"1223":{"position":[[85,2]]},"1755":{"position":[[563,2]]},"1801":{"position":[[3080,2]]},"1803":{"position":[[5052,2]]},"2701":{"position":[[48,2]]},"2910":{"position":[[170,2]]},"3339":{"position":[[106,2]]},"3964":{"position":[[12,2],[29,2],[604,2]]}}}],["执行",{"_index":437,"t":{"53":{"position":[[75,2]]},"64":{"position":[[101,2]]},"77":{"position":[[75,2]]},"112":{"position":[[503,2],[1272,2]]},"114":{"position":[[617,2]]},"119":{"position":[[80,2],[101,2],[179,2]]},"182":{"position":[[88,2]]},"212":{"position":[[45,2]]},"494":{"position":[[396,2],[524,2],[526,2]]},"572":{"position":[[247,2],[488,2],[535,2],[933,2],[980,2]]},"612":{"position":[[72,2]]},"639":{"position":[[436,2]]},"675":{"position":[[247,2]]},"685":{"position":[[412,2]]},"715":{"position":[[16,2]]},"730":{"position":[[52,2]]},"810":{"position":[[337,2]]},"812":{"position":[[361,2]]},"814":{"position":[[334,2]]},"816":{"position":[[358,2]]},"924":{"position":[[136,2]]},"929":{"position":[[2213,2],[2429,2],[2736,2],[2918,2],[3188,2],[3409,2],[3721,2],[3908,2]]},"939":{"position":[[120,2]]},"960":{"position":[[309,2],[366,2]]},"1103":{"position":[[112,2],[236,2]]},"1111":{"position":[[363,2]]},"1113":{"position":[[361,2]]},"1115":{"position":[[367,2]]},"1117":{"position":[[3825,2]]},"1119":{"position":[[338,2]]},"1121":{"position":[[362,2]]},"1123":{"position":[[308,2]]},"1129":{"position":[[515,2],[1453,2]]},"1133":{"position":[[62,2]]},"1139":{"position":[[27,2]]},"1234":{"position":[[109,2],[241,2],[367,2]]},"1236":{"position":[[109,2],[244,2],[373,2]]},"1238":{"position":[[109,2],[284,2],[453,2]]},"1240":{"position":[[109,2],[305,2],[495,2]]},"1267":{"position":[[263,2]]},"1275":{"position":[[51,2]]},"1279":{"position":[[51,2],[68,2],[613,2],[789,2]]},"1286":{"position":[[7,2]]},"1293":{"position":[[1,2]]},"1481":{"position":[[31,2]]},"1488":{"position":[[1653,2]]},"1495":{"position":[[1239,2]]},"1497":{"position":[[308,2]]},"1547":{"position":[[78,2]]},"1549":{"position":[[65,2],[110,2]]},"1566":{"position":[[490,2],[552,2],[662,2]]},"1572":{"position":[[26,2]]},"1709":{"position":[[19,2]]},"1711":{"position":[[38,2]]},"1759":{"position":[[30,2]]},"1807":{"position":[[57,2],[62,2],[67,2],[418,2],[580,2],[692,2],[856,2]]},"1809":{"position":[[54,2],[299,2]]},"1819":{"position":[[802,2]]},"1821":{"position":[[119,2]]},"1892":{"position":[[106,2]]},"1901":{"position":[[367,2],[393,2],[420,2],[542,2]]},"1905":{"position":[[38,2],[53,2],[98,2],[107,2],[137,2],[157,2]]},"1907":{"position":[[144,2],[471,2],[569,2]]},"1923":{"position":[[56,2]]},"1925":{"position":[[351,2],[1134,2]]},"1927":{"position":[[150,2]]},"1941":{"position":[[956,2],[1008,2]]},"1955":{"position":[[103,2]]},"1957":{"position":[[14,2],[18,2]]},"1961":{"position":[[51,2],[70,2],[141,2],[245,2]]},"2184":{"position":[[233,2]]},"2208":{"position":[[103,2]]},"2210":{"position":[[7,2]]},"2214":{"position":[[36,2]]},"2226":{"position":[[5,2]]},"2228":{"position":[[3,2]]},"2393":{"position":[[26,2],[142,2],[164,2],[173,2],[182,2],[202,2]]},"2398":{"position":[[9,2],[125,2]]},"2402":{"position":[[26,2],[49,2],[227,2]]},"2404":{"position":[[16,2]]},"2406":{"position":[[66,2],[356,2]]},"2409":{"position":[[9,2],[148,2]]},"2411":{"position":[[136,2]]},"2413":{"position":[[136,2]]},"2415":{"position":[[68,2],[341,2]]},"2420":{"position":[[2283,2]]},"2426":{"position":[[9,2],[157,2]]},"2428":{"position":[[9,2],[159,2]]},"2430":{"position":[[143,2],[179,2]]},"2432":{"position":[[143,2],[179,2]]},"2434":{"position":[[65,2],[345,2],[385,2],[682,2]]},"2436":{"position":[[32,2]]},"2438":{"position":[[72,2],[213,2],[271,2],[297,2]]},"2440":{"position":[[104,2],[249,2],[305,2],[331,2],[622,2]]},"2442":{"position":[[254,2],[454,2],[479,2],[686,2],[710,2],[959,2],[983,2],[992,2],[1242,2],[1265,2],[1476,2],[1733,2],[1961,2]]},"2444":{"position":[[148,2],[275,2]]},"2448":{"position":[[103,2]]},"2450":{"position":[[7,2]]},"2454":{"position":[[36,2]]},"2466":{"position":[[16,2]]},"2468":{"position":[[56,2]]},"2470":{"position":[[235,2]]},"2472":{"position":[[9,2],[195,2]]},"2486":{"position":[[483,2],[568,2],[631,2],[651,2],[714,2],[736,2],[799,2],[821,2],[885,2],[907,2],[971,2]]},"2488":{"position":[[44,2],[51,2],[58,2]]},"2564":{"position":[[66,2]]},"2569":{"position":[[99,2]]},"2583":{"position":[[5,2],[19,2]]},"2749":{"position":[[0,2]]},"2751":{"position":[[512,2]]},"2817":{"position":[[29,2],[709,2]]},"2836":{"position":[[1244,2]]},"2929":{"position":[[779,2]]},"2945":{"position":[[891,2]]},"2959":{"position":[[834,2]]},"2981":{"position":[[488,2]]},"3282":{"position":[[13,2],[27,2],[36,2],[157,2],[211,2]]},"3287":{"position":[[958,2],[2700,2],[3087,2]]},"3321":{"position":[[20,2]]},"3352":{"position":[[646,2]]},"3385":{"position":[[50,2]]},"3446":{"position":[[1092,2]]},"3597":{"position":[[58,2]]},"3704":{"position":[[871,2]]},"3708":{"position":[[280,2]]},"3760":{"position":[[42,2]]},"3762":{"position":[[506,2],[517,2]]},"3764":{"position":[[125,2]]},"3766":{"position":[[24,2],[34,2],[51,2],[298,2]]},"3768":{"position":[[14,2],[31,2],[47,2],[73,2],[184,2],[586,2],[2414,2],[2434,2],[2591,2],[2602,2]]},"3772":{"position":[[551,2]]},"3774":{"position":[[711,2]]},"3777":{"position":[[264,2]]},"3783":{"position":[[46,2]]},"3787":{"position":[[11,2]]},"3791":{"position":[[1339,2]]},"3793":{"position":[[195,2]]},"3798":{"position":[[664,2]]},"3800":{"position":[[149,2],[155,2],[300,2]]},"3806":{"position":[[404,2],[1796,2],[1809,2],[3076,2],[3637,2]]},"3808":{"position":[[1071,2],[2292,2],[3245,2]]},"3810":{"position":[[1016,2]]},"3815":{"position":[[82,2]]},"3826":{"position":[[613,2]]},"3828":{"position":[[45,2],[53,2],[58,2],[63,2],[376,2],[582,2],[714,2],[889,2],[937,2],[1026,2],[1249,2]]},"3830":{"position":[[433,2],[511,2],[527,2]]},"3832":{"position":[[44,2],[389,2],[1000,2],[1090,2],[3270,2],[3376,2]]},"3924":{"position":[[2225,2],[4411,2]]},"3928":{"position":[[1654,2]]},"3932":{"position":[[1092,2],[1114,2]]},"3934":{"position":[[644,2]]},"3950":{"position":[[45,2],[386,2],[405,2]]},"3962":{"position":[[984,2],[1515,2],[1814,2]]},"3964":{"position":[[564,2],[905,2],[1020,2]]},"3966":{"position":[[132,2],[1515,2]]},"3968":{"position":[[514,2],[526,2],[583,2]]},"3974":{"position":[[139,2],[288,2],[317,2]]},"3978":{"position":[[586,2],[593,2],[994,2]]},"3986":{"position":[[1479,2]]},"3990":{"position":[[695,2]]},"3992":{"position":[[3322,2],[3429,2],[3706,2]]},"3994":{"position":[[188,2],[644,2],[1146,2]]},"3996":{"position":[[731,2],[813,2],[1832,2]]}}}],["执行命令",{"_index":3330,"t":{"685":{"position":[[74,4]]},"1561":{"position":[[42,4]]},"3982":{"position":[[758,4]]}}}],["执行器",{"_index":5651,"t":{"1809":{"position":[[33,3],[487,3]]},"1821":{"position":[[482,3]]},"3826":{"position":[[664,3]]},"3832":{"position":[[23,3],[901,3]]}}}],["执行程序",{"_index":9353,"t":{"3924":{"position":[[2078,4]]}}}],["扩容",{"_index":7421,"t":{"3108":{"position":[[104,2]]},"3110":{"position":[[109,2]]},"3112":{"position":[[35,2]]}}}],["扩展",{"_index":5586,"t":{"1803":{"position":[[169,2]]},"2599":{"position":[[49,2]]},"2915":{"position":[[77,2]]},"3096":{"position":[[53,2]]},"3104":{"position":[[93,2]]},"3110":{"position":[[94,2]]},"3224":{"position":[[11,2],[1780,2]]},"3930":{"position":[[1078,2]]},"3980":{"position":[[721,2]]}}}],["扫",{"_index":7044,"t":{"2782":{"position":[[159,1]]}}}],["扫描",{"_index":2561,"t":{"445":{"position":[[38,2],[754,2],[932,2]]},"1422":{"position":[[23,2]]},"1440":{"position":[[23,2],[95,2],[160,2],[265,2],[301,2],[541,2]]},"1511":{"position":[[40,2]]},"1783":{"position":[[12,2]]},"1855":{"position":[[503,2]]},"2623":{"position":[[68,2]]},"2690":{"position":[[366,2]]},"2819":{"position":[[605,2]]},"2981":{"position":[[206,2],[302,2]]},"2985":{"position":[[18,2],[197,2]]},"3069":{"position":[[211,2]]},"3071":{"position":[[408,2],[575,2],[648,2],[815,2]]},"3636":{"position":[[7,2]]},"3774":{"position":[[10,2],[86,2]]},"3777":{"position":[[299,2]]},"3781":{"position":[[464,2],[488,2]]},"3808":{"position":[[551,2]]},"3920":{"position":[[206,2]]},"3934":{"position":[[712,2]]},"3954":{"position":[[174,2]]},"3958":{"position":[[81,2]]},"3960":{"position":[[483,2]]},"3962":{"position":[[1022,2]]},"3966":{"position":[[420,2]]},"3978":{"position":[[292,2],[1150,2]]},"3982":{"position":[[132,2]]},"3994":{"position":[[651,2]]}}}],["批次",{"_index":5630,"t":{"1803":{"position":[[5480,2]]}}}],["批评",{"_index":1185,"t":{"166":{"position":[[24,2]]},"3242":{"position":[[73,2],[202,2]]},"3910":{"position":[[70,2],[199,2]]},"3934":{"position":[[2167,2],[2368,2]]}}}],["批量",{"_index":3503,"t":{"756":{"position":[[29,2],[45,2]]},"763":{"position":[[3,2],[307,2]]},"767":{"position":[[3,2],[106,2],[209,2],[312,2],[434,2],[575,2],[678,2]]},"769":{"position":[[7,2],[136,2],[434,2]]},"773":{"position":[[208,2],[452,2]]},"1795":{"position":[[2736,2]]},"2682":{"position":[[21,2]]},"3250":{"position":[[225,2]]},"3432":{"position":[[1768,2]]},"3918":{"position":[[971,2]]}}}],["找",{"_index":2341,"t":{"378":{"position":[[67,1]]},"498":{"position":[[109,1]]},"773":{"position":[[77,1]]},"893":{"position":[[109,1]]},"1495":{"position":[[1281,1],[1289,1]]},"1511":{"position":[[1918,1]]},"2905":{"position":[[55,1]]},"3626":{"position":[[236,1]]},"3910":{"position":[[2304,1]]},"3984":{"position":[[623,1]]},"4000":{"position":[[1160,1]]}}}],["找出",{"_index":7442,"t":{"3118":{"position":[[324,2]]},"3352":{"position":[[81,2]]}}}],["找到",{"_index":1781,"t":{"243":{"position":[[86,2]]},"340":{"position":[[1854,2]]},"1511":{"position":[[760,2]]},"2540":{"position":[[16,2],[51,2],[86,2]]},"2719":{"position":[[39,2]]},"3352":{"position":[[109,2],[689,2]]},"3702":{"position":[[1163,2]]},"3986":{"position":[[1205,2]]}}}],["承上启下",{"_index":5059,"t":{"1572":{"position":[[11,4]]}}}],["承受",{"_index":7242,"t":{"2915":{"position":[[262,2]]}}}],["承载",{"_index":5520,"t":{"1797":{"position":[[396,2]]},"3088":{"position":[[138,2]]}}}],["技巧",{"_index":5803,"t":{"1903":{"position":[[363,2],[382,2]]},"2591":{"position":[[44,2]]}}}],["技术",{"_index":1194,"t":{"168":{"position":[[2,2],[20,2]]},"172":{"position":[[33,2]]},"408":{"position":[[143,2]]},"1424":{"position":[[98,2]]},"2321":{"position":[[43,2]]},"2564":{"position":[[130,2]]},"2782":{"position":[[138,2],[148,2]]},"2910":{"position":[[44,2],[447,2]]},"2912":{"position":[[3,2],[11,2],[29,2]]},"3126":{"position":[[229,2]]},"3140":{"position":[[4,2]]},"3242":{"position":[[136,2]]},"3612":{"position":[[10,2],[17,2]]},"3910":{"position":[[133,2]]},"3934":{"position":[[2241,2]]}}}],["技术支持",{"_index":5909,"t":{"1969":{"position":[[40,4]]},"3069":{"position":[[28,4]]}}}],["技能",{"_index":9356,"t":{"3924":{"position":[[2600,2]]}}}],["抓狂",{"_index":7960,"t":{"3352":{"position":[[344,2]]}}}],["投入",{"_index":9406,"t":{"3926":{"position":[[417,2]]}}}],["投影",{"_index":5049,"t":{"1566":{"position":[[541,2]]}}}],["投票",{"_index":7513,"t":{"3142":{"position":[[131,2]]}}}],["抖",{"_index":1210,"t":{"168":{"position":[[85,1]]},"3138":{"position":[[74,1]]}}}],["折磨",{"_index":8460,"t":{"3626":{"position":[[25,2]]}}}],["折线图",{"_index":1284,"t":{"182":{"position":[[153,3]]}}}],["抛",{"_index":5719,"t":{"1845":{"position":[[2,1]]},"2472":{"position":[[200,1],[232,1]]},"3954":{"position":[[657,1],[689,1]]},"4000":{"position":[[971,1]]},"4006":{"position":[[120,1]]}}}],["抛出",{"_index":2305,"t":{"363":{"position":[[102,2]]},"604":{"position":[[63,2]]},"1832":{"position":[[79,2],[104,2]]},"1837":{"position":[[29,2]]},"1845":{"position":[[257,2]]},"1847":{"position":[[45,2]]},"1851":{"position":[[96,2],[328,2],[627,2],[852,2]]},"1863":{"position":[[283,2]]},"1885":{"position":[[130,2]]},"3009":{"position":[[162,2]]},"3922":{"position":[[2188,2]]},"3924":{"position":[[1668,2]]},"3932":{"position":[[780,2]]},"3956":{"position":[[50,2]]},"3978":{"position":[[802,2]]}}}],["抛弃",{"_index":7757,"t":{"3244":{"position":[[65,2]]},"3926":{"position":[[397,2]]}}}],["抛空",{"_index":9983,"t":{"3978":{"position":[[1119,2]]}}}],["抢占",{"_index":8796,"t":{"3779":{"position":[[156,2]]},"3802":{"position":[[153,2]]},"3817":{"position":[[162,2]]}}}],["报",{"_index":6944,"t":{"2768":{"position":[[665,1]]},"3910":{"position":[[2427,1]]},"3916":{"position":[[2400,1]]},"3950":{"position":[[347,1]]},"3970":{"position":[[260,1]]},"3992":{"position":[[1500,1]]},"3998":{"position":[[571,1]]}}}],["报文",{"_index":1101,"t":{"144":{"position":[[87,2],[381,2]]},"148":{"position":[[41,2],[439,2],[518,2]]},"417":{"position":[[46,2]]},"2995":{"position":[[23,2]]},"3539":{"position":[[27,2]]},"3918":{"position":[[3294,2]]},"3922":{"position":[[1392,2]]},"3930":{"position":[[1288,2]]},"3938":{"position":[[626,2]]},"3950":{"position":[[176,2]]},"3968":{"position":[[282,2]]}}}],["报错",{"_index":2299,"t":{"363":{"position":[[59,2]]},"433":{"position":[[165,2]]},"1663":{"position":[[504,2]]},"2383":{"position":[[75,2]]},"3912":{"position":[[1697,2],[1769,2]]},"3930":{"position":[[1400,2]]},"3962":{"position":[[1474,2]]},"3964":{"position":[[693,2],[864,2]]},"3966":{"position":[[1995,2],[2026,2]]},"3968":{"position":[[492,2]]},"3970":{"position":[[428,2]]},"3972":{"position":[[611,2]]},"3978":{"position":[[1716,2],[1814,2]]},"3982":{"position":[[467,2]]},"3986":{"position":[[1496,2]]},"3992":{"position":[[1647,2],[3083,2],[3339,2],[3485,2],[3723,2]]}}}],["抱怨",{"_index":8461,"t":{"3626":{"position":[[33,2],[143,2]]}}}],["抽",{"_index":3072,"t":{"587":{"position":[[709,1]]},"3124":{"position":[[65,1]]}}}],["抽取",{"_index":7449,"t":{"3124":{"position":[[54,2]]}}}],["抽象",{"_index":1550,"t":{"208":{"position":[[14,2]]},"528":{"position":[[249,2]]},"1440":{"position":[[273,2]]},"1580":{"position":[[186,2]]},"1777":{"position":[[83,2]]},"2343":{"position":[[307,2]]},"2442":{"position":[[78,2]]},"3131":{"position":[[34,2]]},"3986":{"position":[[233,2]]}}}],["抽象化",{"_index":1797,"t":{"245":{"position":[[176,3]]},"1717":{"position":[[38,3]]}}}],["抽象类",{"_index":344,"t":{"21":{"position":[[101,3]]},"23":{"position":[[83,3]]},"911":{"position":[[189,3]]},"1405":{"position":[[128,3]]},"1580":{"position":[[278,3]]},"1763":{"position":[[101,3],[135,3],[203,3],[219,3]]},"1775":{"position":[[105,3]]},"1903":{"position":[[592,3]]},"2231":{"position":[[83,3]]},"3954":{"position":[[650,3]]}}}],["担心",{"_index":1190,"t":{"166":{"position":[[39,2]]},"2862":{"position":[[435,2]]},"3118":{"position":[[190,2]]},"3242":{"position":[[217,2]]},"3910":{"position":[[214,2]]},"3934":{"position":[[2383,2]]}}}],["拆",{"_index":7387,"t":{"3092":{"position":[[33,1],[156,1]]}}}],["拆分",{"_index":7383,"t":{"3088":{"position":[[176,2]]},"3094":{"position":[[25,2]]},"3104":{"position":[[47,2]]}}}],["拆成",{"_index":7393,"t":{"3094":{"position":[[11,2]]}}}],["拉",{"_index":2136,"t":{"325":{"position":[[184,1]]},"1481":{"position":[[12,1]]},"1488":{"position":[[1590,1]]},"3063":{"position":[[629,1],[729,1]]},"3706":{"position":[[621,1],[721,1]]}}}],["拉丁字母",{"_index":5170,"t":{"1635":{"position":[[211,4]]}}}],["拉丁文",{"_index":6472,"t":{"2559":{"position":[[413,3],[2031,3],[2719,3]]}}}],["拉脱维亚",{"_index":6601,"t":{"2559":{"position":[[1632,4],[1643,4],[1650,4]]}}}],["拍卖",{"_index":7514,"t":{"3142":{"position":[[134,2]]}}}],["拒绝",{"_index":2457,"t":{"408":{"position":[[131,2]]},"1468":{"position":[[9,2]]}}}],["拓展",{"_index":361,"t":{"32":{"position":[[31,2]]},"91":{"position":[[116,2],[183,2],[237,2],[297,2],[353,2],[411,2],[460,2],[494,2],[538,2]]},"127":{"position":[[42,2]]},"188":{"position":[[43,2]]},"261":{"position":[[127,2]]},"534":{"position":[[14,2],[72,2]]},"540":{"position":[[54,2]]},"542":{"position":[[25,2]]},"546":{"position":[[175,2],[197,2]]},"587":{"position":[[82,2],[2179,2]]},"591":{"position":[[42,2]]},"604":{"position":[[42,2]]},"919":{"position":[[90,2]]},"988":{"position":[[27,2]]},"1010":{"position":[[121,2],[187,2]]},"1041":{"position":[[14,2]]},"1107":{"position":[[155,2]]},"1109":{"position":[[43,2]]},"1214":{"position":[[19,2]]},"1385":{"position":[[126,2]]},"1440":{"position":[[54,2]]},"1580":{"position":[[122,2]]},"1683":{"position":[[380,2]]},"1689":{"position":[[16,2]]},"1743":{"position":[[293,2],[342,2]]},"1801":{"position":[[99,2]]},"1803":{"position":[[22,2]]},"1896":{"position":[[1,2]]},"2241":{"position":[[32,2]]},"2245":{"position":[[46,2],[108,2]]},"2255":{"position":[[80,2],[567,2],[613,2],[684,2]]},"2335":{"position":[[92,2]]},"2343":{"position":[[168,2]]},"2357":{"position":[[168,2],[240,2]]},"2359":{"position":[[623,2]]},"2557":{"position":[[29,2]]},"2579":{"position":[[17,2],[587,2],[610,2],[617,2]]},"2581":{"position":[[1089,2]]},"2597":{"position":[[76,2]]},"2601":{"position":[[26,2]]},"2646":{"position":[[55,2]]},"2680":{"position":[[14,2],[41,2],[105,2]]},"2686":{"position":[[47,2],[104,2]]},"2692":{"position":[[19,2]]},"2694":{"position":[[32,2]]},"2751":{"position":[[32,2]]},"2836":{"position":[[126,2],[1346,2]]},"2848":{"position":[[1223,2]]},"3207":{"position":[[2,2],[76,2],[139,2]]},"3215":{"position":[[4,2]]},"3252":{"position":[[27,2]]},"3254":{"position":[[1637,2],[1659,2]]},"3287":{"position":[[1145,2]]},"3369":{"position":[[54,2]]},"3397":{"position":[[100,2]]},"3399":{"position":[[94,2]]},"3401":{"position":[[87,2]]},"3403":{"position":[[100,2]]},"3426":{"position":[[34,2],[209,2]]},"3432":{"position":[[441,2]]},"3483":{"position":[[50,2]]},"3522":{"position":[[60,2]]},"3563":{"position":[[58,2]]},"3575":{"position":[[530,2]]},"3597":{"position":[[67,2]]},"3599":{"position":[[8,2],[22,2]]},"3830":{"position":[[397,2],[465,2]]},"3908":{"position":[[191,2]]},"3910":{"position":[[2360,2]]},"3912":{"position":[[955,2],[1255,2]]},"3914":{"position":[[1067,2],[1289,2],[1348,2],[2716,2]]},"3916":{"position":[[701,2],[1161,2],[1223,2],[1927,2]]},"3918":{"position":[[979,2]]},"3920":{"position":[[1680,2],[1850,2]]},"3922":{"position":[[768,2]]},"3924":{"position":[[20,2],[603,2],[686,2],[3589,2]]},"3928":{"position":[[615,2]]},"3934":{"position":[[62,2],[284,2],[394,2]]},"3936":{"position":[[172,2],[279,2],[388,2]]},"3940":{"position":[[456,2]]},"3942":{"position":[[17,2]]},"3944":{"position":[[487,2],[500,2]]},"3950":{"position":[[232,2],[283,2],[433,2]]},"3952":{"position":[[32,2]]},"3954":{"position":[[397,2]]},"3960":{"position":[[240,2]]},"3962":{"position":[[56,2],[426,2]]},"3972":{"position":[[46,2],[499,2]]},"3976":{"position":[[561,2]]},"3978":{"position":[[504,2],[562,2],[640,2]]},"3982":{"position":[[136,2],[519,2]]},"3984":{"position":[[89,2],[243,2],[277,2],[603,2]]},"3986":{"position":[[86,2],[381,2]]},"3988":{"position":[[97,2],[122,2]]},"3990":{"position":[[174,2],[222,2],[343,2],[619,2]]},"3992":{"position":[[13,2],[108,2],[277,2],[356,2],[412,2],[435,2],[460,2],[475,2],[936,2],[1032,2],[1826,2],[2298,2],[2457,2],[3934,2],[3949,2]]},"3994":{"position":[[42,2],[87,2],[132,2],[728,2],[757,2],[1416,2]]},"3996":{"position":[[144,2],[227,2]]},"4000":{"position":[[165,2]]},"4004":{"position":[[291,2]]}}}],["拔",{"_index":6769,"t":{"2629":{"position":[[92,1]]}}}],["拖累",{"_index":7426,"t":{"3108":{"position":[[223,2]]}}}],["招募",{"_index":4546,"t":{"1509":{"position":[[185,2]]}}}],["拥",{"_index":7736,"t":{"3242":{"position":[[128,1]]},"3910":{"position":[[125,1]]},"3926":{"position":[[429,1]]},"3934":{"position":[[2233,1]]}}}],["拥有",{"_index":2563,"t":{"445":{"position":[[113,2]]},"522":{"position":[[72,2]]},"793":{"position":[[126,2]]},"1202":{"position":[[9,2]]},"1479":{"position":[[2,2]]},"1518":{"position":[[53,2]]},"3256":{"position":[[156,2]]},"3806":{"position":[[1348,2]]}}}],["拦截",{"_index":900,"t":{"121":{"position":[[387,2]]},"572":{"position":[[26,2]]},"933":{"position":[[400,2]]},"1223":{"position":[[87,2]]},"1279":{"position":[[29,2],[88,2],[482,2],[541,2],[625,2],[717,2],[877,2],[942,2],[976,2]]},"1416":{"position":[[46,2],[426,2]]},"1420":{"position":[[878,2]]},"1424":{"position":[[49,2],[870,2],[2038,2]]},"1426":{"position":[[15,2],[232,2],[279,2],[285,2],[359,2]]},"1430":{"position":[[12,2]]},"1665":{"position":[[33,2],[72,2],[247,2],[289,2],[299,2]]},"1875":{"position":[[214,2],[253,2]]},"1901":{"position":[[504,2]]},"3001":{"position":[[400,2]]},"3448":{"position":[[343,2],[388,2]]},"3450":{"position":[[55,2]]},"3454":{"position":[[85,2],[285,2]]},"3510":{"position":[[194,2]]},"3512":{"position":[[129,2]]},"3514":{"position":[[103,2]]},"3516":{"position":[[104,2]]},"3518":{"position":[[111,2]]},"3551":{"position":[[19,2],[31,2],[38,2],[94,2],[277,2],[501,2],[635,2]]},"3553":{"position":[[19,2],[31,2],[38,2],[94,2],[256,2],[368,2],[481,2]]},"3555":{"position":[[19,2],[31,2],[38,2],[94,2],[277,2],[407,2],[538,2]]},"3557":{"position":[[19,2],[31,2],[38,2],[94,2],[279,2],[414,2],[550,2]]},"3559":{"position":[[19,2],[31,2],[38,2],[94,2],[288,2],[438,2],[589,2]]},"3575":{"position":[[543,2]]},"3595":{"position":[[259,2]]},"3916":{"position":[[9070,2]]},"3920":{"position":[[1211,2],[1216,2],[1223,2]]},"3922":{"position":[[1702,2]]},"3924":{"position":[[562,2]]},"3928":{"position":[[1105,2]]},"3936":{"position":[[742,2]]},"3954":{"position":[[144,2],[228,2]]},"3962":{"position":[[278,2],[294,2]]},"3966":{"position":[[951,2]]},"3978":{"position":[[315,2],[952,2],[976,2],[1444,2],[1544,2]]},"3982":{"position":[[606,2]]},"3984":{"position":[[579,2]]},"3986":{"position":[[1663,2]]},"3992":{"position":[[1533,2],[3299,2]]},"3998":{"position":[[137,2],[498,2],[730,2]]}}}],["拦截器",{"_index":2766,"t":{"504":{"position":[[208,3]]},"572":{"position":[[42,3]]},"924":{"position":[[18,3],[26,3],[74,3],[108,3],[143,3],[176,3]]},"1892":{"position":[[9,3]]},"1935":{"position":[[158,3]]},"3930":{"position":[[1045,3]]},"3974":{"position":[[371,3]]},"3978":{"position":[[1015,3]]},"3990":{"position":[[127,3]]},"3992":{"position":[[597,3],[1399,3],[2037,3]]},"3994":{"position":[[784,3],[822,3],[1489,3],[1597,3]]}}}],["拷贝",{"_index":2018,"t":{"308":{"position":[[56,2]]},"310":{"position":[[58,2]]},"3331":{"position":[[146,2]]}}}],["拷贝到",{"_index":2028,"t":{"308":{"position":[[329,3]]},"310":{"position":[[181,3]]},"675":{"position":[[98,3]]},"1377":{"position":[[231,3],[268,3]]}}}],["拼写错误",{"_index":9624,"t":{"3948":{"position":[[458,4]]},"3996":{"position":[[1223,4]]}}}],["拼接",{"_index":6005,"t":{"2167":{"position":[[185,2]]},"3672":{"position":[[334,2]]},"3698":{"position":[[320,2]]}}}],["拼装",{"_index":7444,"t":{"3118":{"position":[[369,2]]}}}],["拿到",{"_index":2912,"t":{"554":{"position":[[105,2]]}}}],["拿来",{"_index":4596,"t":{"1511":{"position":[[433,2]]}}}],["持久",{"_index":8939,"t":{"3819":{"position":[[1552,2]]},"3826":{"position":[[714,2]]},"3858":{"position":[[10,2],[70,2]]},"3894":{"position":[[10,2],[70,2]]}}}],["持久性",{"_index":7528,"t":{"3146":{"position":[[32,3]]},"3148":{"position":[[28,3]]},"3150":{"position":[[187,3]]},"3282":{"position":[[225,3]]}}}],["持之以恒",{"_index":4851,"t":{"1511":{"position":[[3450,4]]}}}],["持续",{"_index":4388,"t":{"1479":{"position":[[24,2]]},"1507":{"position":[[87,2]]},"1511":{"position":[[588,2],[1425,2],[2962,2],[3127,2]]},"2438":{"position":[[238,2]]},"2440":{"position":[[274,2]]},"3924":{"position":[[2588,2]]}}}],["挂钩",{"_index":6838,"t":{"2719":{"position":[[21,2]]}}}],["指",{"_index":700,"t":{"112":{"position":[[42,1]]},"119":{"position":[[94,1]]},"404":{"position":[[234,1]]},"500":{"position":[[101,1]]},"801":{"position":[[14,1]]},"1066":{"position":[[1660,1]]},"1141":{"position":[[19,1]]},"1385":{"position":[[8,1]]},"1520":{"position":[[120,1],[175,1],[232,1]]},"1832":{"position":[[5,1]]},"2303":{"position":[[52,1]]},"2307":{"position":[[6,1]]},"2782":{"position":[[13,1],[208,1]]},"2805":{"position":[[5,1]]},"2979":{"position":[[4,1]]},"2989":{"position":[[4,1]]},"2999":{"position":[[6,1]]},"3007":{"position":[[6,1]]},"3021":{"position":[[9,1]]},"3029":{"position":[[5,1]]},"3037":{"position":[[6,1]]},"3045":{"position":[[5,1]]},"3053":{"position":[[6,1]]},"3061":{"position":[[7,1]]},"3136":{"position":[[32,1]]},"3242":{"position":[[167,1]]},"3282":{"position":[[2,1]]},"3350":{"position":[[29,1],[93,1],[107,1],[121,1]]},"3412":{"position":[[4,1]]},"3910":{"position":[[164,1]]},"3934":{"position":[[2285,1]]}}}],["指令集",{"_index":8633,"t":{"3752":{"position":[[100,3]]}}}],["指南",{"_index":677,"t":{"106":{"position":[[55,2]]},"251":{"position":[[161,2]]},"3702":{"position":[[1482,2]]},"3918":{"position":[[4217,2]]},"3920":{"position":[[2026,2]]},"3924":{"position":[[2000,2]]},"3992":{"position":[[2764,2]]},"3998":{"position":[[789,2]]}}}],["指向",{"_index":10118,"t":{"3986":{"position":[[1139,2]]}}}],["指定",{"_index":1043,"t":{"129":{"position":[[380,2]]},"233":{"position":[[406,2]]},"247":{"position":[[155,2]]},"350":{"position":[[514,2]]},"369":{"position":[[52,2],[247,2],[403,2]]},"413":{"position":[[82,2]]},"482":{"position":[[781,2]]},"510":{"position":[[514,2]]},"514":{"position":[[482,2]]},"524":{"position":[[32,2]]},"572":{"position":[[1234,2]]},"587":{"position":[[858,2]]},"685":{"position":[[266,2],[363,2]]},"698":{"position":[[441,2],[1091,2]]},"706":{"position":[[254,2]]},"715":{"position":[[84,2]]},"769":{"position":[[438,2]]},"899":{"position":[[601,2]]},"911":{"position":[[201,2]]},"915":{"position":[[15,2]]},"939":{"position":[[66,2]]},"947":{"position":[[350,2],[502,2],[522,2],[862,2],[994,2]]},"1066":{"position":[[900,2]]},"1103":{"position":[[84,2]]},"1275":{"position":[[45,2]]},"1277":{"position":[[325,2]]},"1293":{"position":[[17,2]]},"1317":{"position":[[435,2]]},"1319":{"position":[[255,2]]},"1358":{"position":[[57,2],[61,2]]},"1422":{"position":[[68,2]]},"1440":{"position":[[480,2],[645,2],[690,2]]},"1488":{"position":[[492,2],[1703,2]]},"1495":{"position":[[491,2]]},"1520":{"position":[[202,2],[273,2]]},"1647":{"position":[[38,2]]},"1657":{"position":[[121,2]]},"1735":{"position":[[52,2]]},"1741":{"position":[[681,2],[1441,2],[2277,2]]},"1857":{"position":[[194,2]]},"1875":{"position":[[718,2]]},"2023":{"position":[[106,2]]},"2326":{"position":[[236,2]]},"2404":{"position":[[117,2]]},"2418":{"position":[[1129,2]]},"2745":{"position":[[68,2],[75,2]]},"2747":{"position":[[78,2],[85,2]]},"2796":{"position":[[759,2]]},"2875":{"position":[[126,2]]},"2905":{"position":[[104,2],[400,2]]},"2925":{"position":[[460,2]]},"2941":{"position":[[460,2]]},"2951":{"position":[[640,2]]},"2955":{"position":[[460,2]]},"3080":{"position":[[294,2],[301,2],[536,2],[557,2]]},"3120":{"position":[[45,2],[81,2]]},"3432":{"position":[[598,2],[728,2]]},"3448":{"position":[[386,2],[450,2]]},"3456":{"position":[[270,2],[274,2]]},"3486":{"position":[[476,2]]},"3640":{"position":[[442,2],[447,2]]},"3666":{"position":[[331,2]]},"3688":{"position":[[733,2],[755,2]]},"3716":{"position":[[852,2],[865,2]]},"3764":{"position":[[7,2]]},"3912":{"position":[[1306,2]]},"3914":{"position":[[936,2]]},"3920":{"position":[[201,2]]},"3932":{"position":[[1383,2]]},"3936":{"position":[[582,2]]},"3962":{"position":[[400,2],[1440,2]]},"3976":{"position":[[439,2]]},"3984":{"position":[[626,2]]},"3986":{"position":[[1115,2]]},"3992":{"position":[[149,2],[3555,2]]},"3994":{"position":[[226,2]]},"3996":{"position":[[624,2]]}}}],["指引",{"_index":8069,"t":{"3414":{"position":[[322,2]]}}}],["指标",{"_index":6867,"t":{"2740":{"position":[[118,2]]}}}],["指示",{"_index":3074,"t":{"587":{"position":[[754,2]]},"3800":{"position":[[7,2]]}}}],["按",{"_index":4570,"t":{"1511":{"position":[[188,1]]},"2333":{"position":[[5,1]]},"2910":{"position":[[262,1]]},"3092":{"position":[[44,1]]},"3094":{"position":[[19,1]]},"3108":{"position":[[23,1]]},"3110":{"position":[[201,1]]},"3124":{"position":[[78,1]]},"3267":{"position":[[400,1]]},"3672":{"position":[[326,1]]},"3934":{"position":[[2543,1],[2548,1]]},"3986":{"position":[[1732,1]]}}}],["按照",{"_index":4306,"t":{"1422":{"position":[[18,2]]},"1589":{"position":[[216,2]]},"1611":{"position":[[847,2]]},"1905":{"position":[[89,2]]},"1957":{"position":[[10,2]]},"2255":{"position":[[87,2]]},"2326":{"position":[[230,2]]},"3110":{"position":[[0,2]]},"3120":{"position":[[43,2]]},"3248":{"position":[[82,2]]},"3581":{"position":[[4,2]]},"3608":{"position":[[114,2]]},"3620":{"position":[[68,2]]},"3622":{"position":[[5,2]]},"3626":{"position":[[289,2],[389,2]]}}}],["按钮",{"_index":3342,"t":{"690":{"position":[[23,2]]},"692":{"position":[[30,2]]},"694":{"position":[[8,2]]},"3694":{"position":[[158,2]]},"3938":{"position":[[1322,2]]},"3982":{"position":[[888,2]]},"4000":{"position":[[1041,2]]}}}],["挪威",{"_index":6614,"t":{"2559":{"position":[[1780,2],[1789,2],[1803,2],[1812,2],[1826,2]]}}}],["挪用",{"_index":7374,"t":{"3086":{"position":[[26,2]]}}}],["挺",{"_index":4767,"t":{"1511":{"position":[[2283,1],[2982,1]]}}}],["挺好用",{"_index":4818,"t":{"1511":{"position":[[2910,3]]}}}],["捆绑",{"_index":4345,"t":{"1452":{"position":[[15,2]]}}}],["捐赠",{"_index":2384,"t":{"399":{"position":[[24,2]]},"1511":{"position":[[87,2],[131,2],[1681,2]]}}}],["捕获",{"_index":2961,"t":{"567":{"position":[[388,2]]},"1813":{"position":[[50,2]]},"1883":{"position":[[9,2]]},"3597":{"position":[[166,2],[446,2]]},"3826":{"position":[[161,2]]},"3978":{"position":[[956,2]]},"4000":{"position":[[1130,2]]}}}],["损耗",{"_index":4262,"t":{"1412":{"position":[[1238,2]]},"3740":{"position":[[105,2]]},"3942":{"position":[[154,2]]}}}],["换",{"_index":7440,"t":{"3118":{"position":[[209,1]]}}}],["换句话说",{"_index":5876,"t":{"1939":{"position":[[48,4]]}}}],["换名",{"_index":491,"t":{"85":{"position":[[170,2]]}}}],["换成",{"_index":6252,"t":{"2379":{"position":[[444,2]]},"3321":{"position":[[44,2]]}}}],["换掉",{"_index":5887,"t":{"1941":{"position":[[896,2]]}}}],["换行",{"_index":5018,"t":{"1555":{"position":[[261,2]]},"2788":{"position":[[175,2]]}}}],["捷克",{"_index":6499,"t":{"2559":{"position":[[669,2],[678,2],[683,2]]}}}],["授权",{"_index":738,"t":{"112":{"position":[[1086,2],[1125,2]]},"114":{"position":[[646,2]]},"119":{"position":[[56,2],[85,2],[92,2],[150,2]]},"121":{"position":[[538,2],[553,2],[650,2],[730,2],[758,2]]},"123":{"position":[[8,2]]},"125":{"position":[[47,2]]},"127":{"position":[[110,2],[116,2],[171,2],[183,2],[706,2],[713,2]]},"129":{"position":[[583,2],[615,2]]},"131":{"position":[[24,2],[34,2],[47,2]]},"133":{"position":[[35,2],[300,2]]},"135":{"position":[[19,2],[39,2],[384,2],[466,2],[536,2],[578,2]]},"137":{"position":[[53,2]]},"146":{"position":[[279,2],[701,2]]},"150":{"position":[[135,2]]},"154":{"position":[[37,2]]},"329":{"position":[[95,2]]},"1578":{"position":[[150,2]]},"1894":{"position":[[22,2]]},"1901":{"position":[[0,2],[30,2],[40,2],[43,2],[126,2]]},"1903":{"position":[[0,2]]},"1911":{"position":[[2,2],[38,2]]},"1913":{"position":[[260,2],[442,2],[1136,2]]},"1925":{"position":[[948,2],[987,2]]},"1947":{"position":[[112,2]]},"2243":{"position":[[8,2]]},"2245":{"position":[[14,2],[60,2]]},"2247":{"position":[[19,2]]},"2846":{"position":[[381,2]]},"3063":{"position":[[1186,2]]},"3189":{"position":[[261,2]]},"3446":{"position":[[1121,2]]},"3650":{"position":[[32,2]]},"3684":{"position":[[21,2]]},"3686":{"position":[[425,2],[477,2]]},"3706":{"position":[[1178,2],[1230,2]]},"3910":{"position":[[2589,2]]},"3914":{"position":[[3605,2]]},"3928":{"position":[[1683,2]]},"3932":{"position":[[1234,2]]},"3940":{"position":[[147,2],[747,2]]},"3964":{"position":[[958,2]]},"3974":{"position":[[490,2]]},"3986":{"position":[[997,2],[1792,2]]},"3992":{"position":[[177,2],[186,2],[526,2],[1090,2]]},"3994":{"position":[[486,2],[524,2],[1634,2]]},"3996":{"position":[[1247,2]]},"3998":{"position":[[410,2],[638,2],[810,2]]},"4000":{"position":[[175,2],[204,2],[346,2],[351,2],[686,2],[701,2],[769,2],[880,2],[885,2],[1063,2]]}}}],["掉",{"_index":7948,"t":{"3352":{"position":[[39,1]]},"3914":{"position":[[2936,1]]},"3928":{"position":[[349,1]]},"3978":{"position":[[1589,1]]},"3984":{"position":[[1073,1]]},"3988":{"position":[[322,1]]}}}],["排",{"_index":7335,"t":{"3063":{"position":[[1520,1]]},"3640":{"position":[[430,1]]},"3706":{"position":[[1531,1]]}}}],["排序",{"_index":4285,"t":{"1416":{"position":[[395,2]]},"1420":{"position":[[842,2]]},"1511":{"position":[[186,2]]},"1611":{"position":[[859,2]]},"1641":{"position":[[335,2]]},"2326":{"position":[[183,2]]},"3001":{"position":[[374,2]]},"3063":{"position":[[990,2],[1506,2]]},"3120":{"position":[[33,2],[51,2],[55,2],[89,2],[126,2],[152,2]]},"3122":{"position":[[33,2]]},"3640":{"position":[[23,2],[422,2],[470,2],[482,2],[696,2],[705,2]]},"3706":{"position":[[982,2],[1517,2]]},"3950":{"position":[[96,2]]},"3966":{"position":[[1280,2]]},"3992":{"position":[[2184,2]]}}}],["排除",{"_index":2969,"t":{"570":{"position":[[848,2],[1286,2]]},"587":{"position":[[765,2]]},"933":{"position":[[913,2]]},"2937":{"position":[[76,2],[1384,2]]},"2981":{"position":[[300,2]]},"3448":{"position":[[452,2]]},"3984":{"position":[[535,2]]},"3992":{"position":[[2551,2]]},"3994":{"position":[[224,2],[413,2]]},"3998":{"position":[[226,2],[334,2]]}}}],["探索",{"_index":8525,"t":{"3702":{"position":[[115,2]]},"3934":{"position":[[2087,2],[2507,2]]}}}],["接下来",{"_index":190,"t":{"11":{"position":[[898,3]]},"308":{"position":[[137,3]]},"340":{"position":[[526,3]]},"1379":{"position":[[668,3]]},"1485":{"position":[[309,3]]},"2294":{"position":[[946,3]]},"2524":{"position":[[0,3]]},"2542":{"position":[[0,3],[81,3]]},"2788":{"position":[[224,3]]},"3152":{"position":[[54,3]]}}}],["接受",{"_index":1779,"t":{"243":{"position":[[54,2]]},"1566":{"position":[[215,2]]},"2313":{"position":[[262,2],[500,2]]}}}],["接口",{"_index":602,"t":{"98":{"position":[[102,2]]},"127":{"position":[[178,2]]},"148":{"position":[[273,2]]},"150":{"position":[[140,2]]},"218":{"position":[[304,2]]},"239":{"position":[[305,2]]},"243":{"position":[[18,2]]},"253":{"position":[[23,2]]},"300":{"position":[[133,2],[157,2],[216,2],[258,2]]},"302":{"position":[[16,2]]},"312":{"position":[[27,2]]},"314":{"position":[[493,2],[742,2],[781,2]]},"316":{"position":[[551,2],[681,2],[720,2]]},"323":{"position":[[4,2]]},"325":{"position":[[48,2]]},"340":{"position":[[189,2]]},"342":{"position":[[42,2],[63,2]]},"344":{"position":[[18,2],[62,2],[111,2]]},"346":{"position":[[22,2],[60,2],[108,2]]},"348":{"position":[[14,2],[66,2],[135,2]]},"359":{"position":[[346,2]]},"548":{"position":[[66,2]]},"708":{"position":[[540,2]]},"739":{"position":[[58,2]]},"749":{"position":[[28,2]]},"844":{"position":[[61,2]]},"846":{"position":[[91,2],[95,2]]},"911":{"position":[[186,2]]},"939":{"position":[[58,2],[111,2]]},"945":{"position":[[74,2]]},"986":{"position":[[21,2]]},"990":{"position":[[19,2]]},"992":{"position":[[30,2]]},"994":{"position":[[50,2]]},"996":{"position":[[29,2]]},"998":{"position":[[49,2]]},"1000":{"position":[[40,2]]},"1002":{"position":[[40,2]]},"1004":{"position":[[46,2]]},"1006":{"position":[[46,2]]},"1008":{"position":[[45,2]]},"1010":{"position":[[129,2]]},"1012":{"position":[[38,2]]},"1014":{"position":[[43,2]]},"1041":{"position":[[70,2],[1134,2]]},"1143":{"position":[[44,2]]},"1194":{"position":[[40,2]]},"1223":{"position":[[18,2],[34,2],[47,2],[73,2],[80,2],[97,2],[114,2],[231,2],[264,2]]},"1275":{"position":[[1,2],[36,2]]},"1277":{"position":[[291,2]]},"1399":{"position":[[88,2]]},"1401":{"position":[[69,2]]},"1403":{"position":[[49,2]]},"1405":{"position":[[13,2],[112,2],[133,2]]},"1408":{"position":[[20,2],[1055,2],[1121,2],[1176,2],[1223,2]]},"1410":{"position":[[23,2]]},"1412":{"position":[[8,2],[39,2],[218,2],[300,2],[807,2],[1427,2]]},"1414":{"position":[[11,2]]},"1416":{"position":[[138,2],[238,2],[272,2],[301,2],[316,2],[345,2],[352,2],[486,2],[518,2]]},"1420":{"position":[[562,2],[576,2],[646,2]]},"1440":{"position":[[411,2],[432,2]]},"1580":{"position":[[231,2],[368,2],[500,2]]},"1584":{"position":[[48,2],[534,2]]},"1587":{"position":[[213,2]]},"1589":{"position":[[111,2],[161,2]]},"1641":{"position":[[160,2],[236,2],[280,2],[459,2]]},"1651":{"position":[[12,2]]},"1655":{"position":[[14,2]]},"1657":{"position":[[135,2]]},"1661":{"position":[[20,2],[142,2]]},"1663":{"position":[[23,2]]},"1703":{"position":[[88,2]]},"1711":{"position":[[918,2]]},"1763":{"position":[[18,2],[35,2],[45,2],[66,2],[84,2]]},"1777":{"position":[[116,2],[151,2]]},"1783":{"position":[[27,2]]},"1795":{"position":[[52,2],[2865,2]]},"1797":{"position":[[35,2],[74,2]]},"1799":{"position":[[159,2]]},"1805":{"position":[[79,2]]},"1807":{"position":[[35,2],[41,2]]},"1809":{"position":[[36,2]]},"1855":{"position":[[494,2]]},"1867":{"position":[[48,2]]},"1896":{"position":[[29,2]]},"1901":{"position":[[490,2]]},"1903":{"position":[[326,2],[486,2],[529,2],[540,2],[554,2],[577,2]]},"1905":{"position":[[133,2]]},"1915":{"position":[[46,2]]},"1921":{"position":[[46,2]]},"1929":{"position":[[46,2]]},"1937":{"position":[[46,2]]},"1945":{"position":[[46,2]]},"1947":{"position":[[53,2]]},"2147":{"position":[[31,2]]},"2237":{"position":[[60,2]]},"2343":{"position":[[336,2]]},"2345":{"position":[[37,2],[49,2],[846,2]]},"2359":{"position":[[426,2]]},"2395":{"position":[[132,2]]},"2442":{"position":[[2032,2]]},"2530":{"position":[[40,2]]},"2532":{"position":[[137,2]]},"2581":{"position":[[55,2]]},"2605":{"position":[[38,2]]},"2703":{"position":[[42,2]]},"2709":{"position":[[315,2],[321,2]]},"2717":{"position":[[25,2],[446,2],[477,2]]},"2725":{"position":[[630,2],[1115,2],[1122,2],[1850,2]]},"2727":{"position":[[98,2]]},"2729":{"position":[[127,2]]},"2921":{"position":[[79,2]]},"2933":{"position":[[37,2]]},"2935":{"position":[[20,2],[32,2]]},"2949":{"position":[[40,2]]},"2963":{"position":[[38,2]]},"3001":{"position":[[123,2],[137,2],[207,2]]},"3023":{"position":[[143,2]]},"3063":{"position":[[1378,2]]},"3071":{"position":[[45,2],[222,2]]},"3096":{"position":[[114,2]]},"3126":{"position":[[369,2]]},"3154":{"position":[[748,2]]},"3168":{"position":[[96,2]]},"3256":{"position":[[39,2]]},"3287":{"position":[[1237,2]]},"3354":{"position":[[7,2]]},"3377":{"position":[[12,2]]},"3387":{"position":[[48,2]]},"3393":{"position":[[200,2]]},"3397":{"position":[[279,2],[871,2]]},"3434":{"position":[[102,2]]},"3440":{"position":[[127,2]]},"3448":{"position":[[1390,2]]},"3456":{"position":[[35,2]]},"3476":{"position":[[55,2],[80,2]]},"3483":{"position":[[63,2],[89,2],[554,2]]},"3522":{"position":[[878,2]]},"3539":{"position":[[35,2]]},"3551":{"position":[[25,2]]},"3553":{"position":[[25,2]]},"3555":{"position":[[25,2]]},"3557":{"position":[[25,2]]},"3559":{"position":[[25,2]]},"3583":{"position":[[7,2],[12,2]]},"3585":{"position":[[9,2]]},"3595":{"position":[[90,2]]},"3608":{"position":[[50,2],[59,2],[100,2],[105,2],[118,2]]},"3610":{"position":[[61,2]]},"3612":{"position":[[104,2]]},"3616":{"position":[[2,2],[38,2]]},"3618":{"position":[[6,2],[18,2],[36,2],[49,2]]},"3620":{"position":[[18,2],[72,2],[127,2],[140,2],[145,2],[257,2],[271,2],[280,2],[288,2]]},"3626":{"position":[[21,2],[39,2],[62,2],[112,2],[121,2],[210,2],[298,2],[301,2],[347,2],[374,2],[440,2],[469,2]]},"3680":{"position":[[19,2]]},"3692":{"position":[[40,2],[55,2]]},"3704":{"position":[[856,2]]},"3706":{"position":[[1389,2]]},"3708":{"position":[[3944,2]]},"3710":{"position":[[9,2]]},"3714":{"position":[[9,2]]},"3722":{"position":[[338,2]]},"3787":{"position":[[46,2]]},"3791":{"position":[[562,2]]},"3815":{"position":[[130,2]]},"3828":{"position":[[25,2],[31,2]]},"3830":{"position":[[51,2]]},"3832":{"position":[[26,2]]},"3860":{"position":[[20,2],[36,2]]},"3910":{"position":[[2596,2]]},"3912":{"position":[[2193,2]]},"3914":{"position":[[1115,2],[2873,2],[3546,2]]},"3922":{"position":[[1490,2]]},"3924":{"position":[[246,2],[3528,2],[4396,2]]},"3930":{"position":[[425,2]]},"3938":{"position":[[95,2],[125,2],[161,2],[498,2],[971,2],[988,2],[1003,2],[1185,2]]},"3954":{"position":[[197,2],[203,2]]},"3956":{"position":[[225,2]]},"3958":{"position":[[83,2],[95,2]]},"3960":{"position":[[280,2]]},"3962":{"position":[[620,2]]},"3964":{"position":[[788,2]]},"3968":{"position":[[321,2]]},"3970":{"position":[[177,2]]},"3976":{"position":[[262,2]]},"3984":{"position":[[935,2]]},"3986":{"position":[[235,2],[277,2],[1719,2]]},"3992":{"position":[[702,2],[2576,2],[3881,2]]},"3994":{"position":[[228,2],[1079,2],[1306,2]]},"3996":{"position":[[1782,2]]},"3998":{"position":[[76,2],[130,2],[437,2],[491,2],[569,2]]},"4006":{"position":[[708,2]]}}}],["接口定义",{"_index":6210,"t":{"2345":{"position":[[65,4]]},"3565":{"position":[[216,4]]},"3612":{"position":[[30,4]]},"3688":{"position":[[39,4]]}}}],["接口方式",{"_index":5846,"t":{"1915":{"position":[[5,4]]},"1921":{"position":[[5,4]]},"1927":{"position":[[378,4],[682,4]]},"1929":{"position":[[5,4]]},"1935":{"position":[[309,4]]},"1937":{"position":[[5,4]]},"1943":{"position":[[247,4]]},"1945":{"position":[[5,4]]},"1953":{"position":[[247,4]]}}}],["接口类型",{"_index":5797,"t":{"1903":{"position":[[50,4],[89,4],[131,4],[170,4],[296,4],[410,4]]},"3714":{"position":[[17,4]]},"3912":{"position":[[2336,4]]}}}],["接收",{"_index":894,"t":{"121":{"position":[[336,2]]},"300":{"position":[[305,2]]},"1761":{"position":[[64,2]]},"3148":{"position":[[9,2]]},"3974":{"position":[[642,2]]}}}],["接着",{"_index":2007,"t":{"306":{"position":[[60,2]]},"308":{"position":[[70,2],[283,2]]},"310":{"position":[[72,2],[135,2]]},"1587":{"position":[[101,2]]},"1589":{"position":[[115,2]]},"1857":{"position":[[178,2]]},"1875":{"position":[[702,2]]},"3832":{"position":[[378,2]]}}}],["接触",{"_index":1216,"t":{"172":{"position":[[14,2]]},"1307":{"position":[[27,2]]},"1383":{"position":[[14,2]]},"1509":{"position":[[35,2]]},"1511":{"position":[[1073,2]]},"1969":{"position":[[199,2]]},"1983":{"position":[[111,2]]},"2006":{"position":[[111,2]]}}}],["控制",{"_index":606,"t":{"98":{"position":[[146,2]]},"199":{"position":[[207,2],[409,2]]},"288":{"position":[[275,2],[316,2]]},"1223":{"position":[[278,2]]},"1358":{"position":[[51,2],[55,2]]},"1383":{"position":[[22,2]]},"1387":{"position":[[0,2],[51,2],[55,2]]},"1389":{"position":[[249,2]]},"1408":{"position":[[1311,2]]},"1424":{"position":[[430,2]]},"1592":{"position":[[245,2]]},"1809":{"position":[[63,2]]},"1896":{"position":[[34,2]]},"1923":{"position":[[21,2]]},"1939":{"position":[[56,2]]},"1961":{"position":[[138,2]]},"2096":{"position":[[53,2]]},"2311":{"position":[[437,2]]},"2879":{"position":[[24,2]]},"3063":{"position":[[156,2]]},"3282":{"position":[[51,2]]},"3432":{"position":[[551,2],[681,2]]},"3448":{"position":[[187,2]]},"3595":{"position":[[473,2]]},"3680":{"position":[[43,2]]},"3706":{"position":[[148,2]]},"3806":{"position":[[3054,2]]},"3832":{"position":[[53,2]]},"3858":{"position":[[153,2]]},"3918":{"position":[[757,2],[889,2]]},"3938":{"position":[[975,2]]},"3990":{"position":[[44,2]]}}}],["控制台",{"_index":13,"t":{"3":{"position":[[42,3],[75,3]]},"188":{"position":[[5,3]]},"399":{"position":[[238,3]]},"683":{"position":[[7,3]]},"711":{"position":[[7,3]]},"1532":{"position":[[22,3]]},"1535":{"position":[[1,3]]},"1539":{"position":[[134,3]]},"1541":{"position":[[13,3]]},"2175":{"position":[[37,3]]},"2836":{"position":[[866,3]]},"2864":{"position":[[26,3],[62,3]]},"2875":{"position":[[520,3],[619,3]]},"3047":{"position":[[187,3]]},"3078":{"position":[[50,3],[97,3],[108,3]]},"3369":{"position":[[71,3]]},"3428":{"position":[[93,3],[117,3]]},"3430":{"position":[[519,3],[1800,3],[1861,3],[3196,3]]},"3910":{"position":[[1614,3]]},"3916":{"position":[[705,3],[732,3],[768,3],[823,3],[861,3],[1976,3],[2858,3]]},"3918":{"position":[[3370,3],[3477,3]]},"3924":{"position":[[1232,3],[2156,3]]},"3928":{"position":[[397,3],[481,3]]},"3934":{"position":[[134,3],[455,3]]},"3954":{"position":[[137,3],[219,3]]},"3978":{"position":[[7,3]]}}}],["控制器",{"_index":716,"t":{"112":{"position":[[540,3]]},"114":{"position":[[182,3]]},"129":{"position":[[368,3]]},"190":{"position":[[2,3]]},"587":{"position":[[2126,3]]},"612":{"position":[[43,3]]},"619":{"position":[[115,3]]},"623":{"position":[[23,3]]},"627":{"position":[[25,3]]},"639":{"position":[[389,3]]},"1408":{"position":[[533,3],[1199,3]]},"1410":{"position":[[548,3]]},"1414":{"position":[[40,3],[468,3]]},"1424":{"position":[[65,3]]},"1570":{"position":[[52,3],[58,3]]},"1572":{"position":[[5,3],[85,3],[130,3],[141,3],[543,3],[555,3],[572,3]]},"1574":{"position":[[13,3]]},"1576":{"position":[[29,3],[41,3],[108,3],[155,3]]},"1578":{"position":[[161,3]]},"1580":{"position":[[73,3],[194,3],[450,3]]},"1587":{"position":[[55,3],[150,3],[248,3]]},"1589":{"position":[[173,3]]},"1592":{"position":[[2,3],[132,3],[156,3]]},"1598":{"position":[[41,3]]},"1600":{"position":[[21,3]]},"1611":{"position":[[94,3],[123,3],[491,3],[549,3],[603,3]]},"1617":{"position":[[2,3],[20,3],[1117,3],[1141,3]]},"1621":{"position":[[0,3]]},"1623":{"position":[[18,3],[150,3],[170,3]]},"1625":{"position":[[15,3]]},"1641":{"position":[[8,3],[327,3],[543,3]]},"1643":{"position":[[26,3]]},"1645":{"position":[[18,3]]},"1651":{"position":[[32,3]]},"1657":{"position":[[47,3],[155,3]]},"1661":{"position":[[638,3],[701,3]]},"1663":{"position":[[459,3]]},"1795":{"position":[[1913,3]]},"1892":{"position":[[95,3]]},"1898":{"position":[[11,3]]},"1907":{"position":[[46,3]]},"1909":{"position":[[41,3]]},"1911":{"position":[[18,3]]},"1913":{"position":[[461,3],[551,3],[1270,3]]},"1919":{"position":[[733,3]]},"1925":{"position":[[388,3],[1462,3]]},"1927":{"position":[[779,3]]},"1933":{"position":[[336,3],[899,3]]},"1935":{"position":[[394,3]]},"1939":{"position":[[2,3]]},"1941":{"position":[[312,3],[1150,3]]},"1943":{"position":[[344,3]]},"2848":{"position":[[329,3]]},"2881":{"position":[[25,3]]},"3023":{"position":[[635,3],[698,3]]},"3287":{"position":[[19,3]]},"3294":{"position":[[19,3]]},"3296":{"position":[[76,3]]},"3397":{"position":[[875,3]]},"3444":{"position":[[44,3]]},"3446":{"position":[[657,3]]},"3448":{"position":[[30,3]]},"3454":{"position":[[171,3]]},"3716":{"position":[[51,3],[876,3]]},"3916":{"position":[[8956,3]]},"3918":{"position":[[930,3]]},"3922":{"position":[[2318,3]]},"3928":{"position":[[1094,3],[1232,3]]},"3948":{"position":[[384,3]]},"3956":{"position":[[11,3],[3093,3]]},"3962":{"position":[[1024,3],[1039,3]]},"3976":{"position":[[427,3]]},"3982":{"position":[[460,3]]},"3986":{"position":[[109,3]]}}}],["控制权",{"_index":4204,"t":{"1387":{"position":[[22,3],[36,3]]}}}],["控制系统",{"_index":6121,"t":{"2311":{"position":[[445,4]]}}}],["推",{"_index":7009,"t":{"2770":{"position":[[177,1]]}}}],["推出",{"_index":2209,"t":{"340":{"position":[[45,2]]},"542":{"position":[[15,2]]},"1516":{"position":[[78,2]]},"2601":{"position":[[15,2]]},"3252":{"position":[[15,2]]},"3924":{"position":[[2726,2]]}}}],["推崇",{"_index":2871,"t":{"540":{"position":[[59,2]]}}}],["推广",{"_index":4873,"t":{"1511":{"position":[[3820,2]]}}}],["推荐",{"_index":136,"t":{"11":{"position":[[56,2],[657,2],[705,2]]},"127":{"position":[[211,2]]},"202":{"position":[[511,2]]},"319":{"position":[[52,2]]},"336":{"position":[[137,2]]},"355":{"position":[[21,2]]},"423":{"position":[[51,2]]},"439":{"position":[[149,2]]},"455":{"position":[[155,2]]},"486":{"position":[[30,2]]},"512":{"position":[[131,2]]},"516":{"position":[[419,2]]},"546":{"position":[[194,2]]},"583":{"position":[[53,2]]},"585":{"position":[[554,2]]},"633":{"position":[[46,2]]},"685":{"position":[[40,2]]},"713":{"position":[[56,2]]},"728":{"position":[[28,2]]},"756":{"position":[[50,2]]},"799":{"position":[[5,2]]},"810":{"position":[[152,2]]},"812":{"position":[[160,2]]},"814":{"position":[[151,2]]},"816":{"position":[[159,2]]},"1073":{"position":[[69,2]]},"1101":{"position":[[5,2]]},"1107":{"position":[[90,2]]},"1111":{"position":[[164,2]]},"1113":{"position":[[162,2]]},"1115":{"position":[[162,2]]},"1117":{"position":[[1088,2]]},"1119":{"position":[[151,2]]},"1121":{"position":[[159,2]]},"1123":{"position":[[135,2]]},"1129":{"position":[[244,2],[1078,2]]},"1155":{"position":[[5,2]]},"1225":{"position":[[27,2]]},"1374":{"position":[[70,2]]},"1379":{"position":[[12,2]]},"1383":{"position":[[170,2]]},"1392":{"position":[[13,2]]},"1412":{"position":[[754,2],[1753,2]]},"1428":{"position":[[125,2]]},"1440":{"position":[[30,2]]},"1535":{"position":[[655,2]]},"1566":{"position":[[14,2]]},"1617":{"position":[[1124,2],[1152,2]]},"1623":{"position":[[163,2],[168,2]]},"1834":{"position":[[14,2],[43,2],[62,2],[82,2]]},"1969":{"position":[[88,2],[134,2]]},"1983":{"position":[[0,2],[46,2]]},"2006":{"position":[[0,2],[46,2]]},"2096":{"position":[[77,2]]},"2175":{"position":[[207,2]]},"2294":{"position":[[56,2],[686,2],[734,2]]},"2311":{"position":[[456,2]]},"2331":{"position":[[278,2]]},"2354":{"position":[[10,2]]},"2549":{"position":[[0,2]]},"2557":{"position":[[24,2]]},"2579":{"position":[[11,2]]},"2684":{"position":[[471,2]]},"2701":{"position":[[17,2]]},"2713":{"position":[[62,2],[645,2]]},"2715":{"position":[[23,2]]},"2772":{"position":[[0,2],[46,2]]},"2774":{"position":[[7,2]]},"2788":{"position":[[200,2]]},"2803":{"position":[[125,2]]},"2805":{"position":[[94,2],[99,2]]},"2809":{"position":[[62,2],[67,2]]},"2860":{"position":[[33,2],[79,2]]},"2881":{"position":[[270,2],[306,2],[352,2]]},"2897":{"position":[[123,2]]},"3080":{"position":[[9,2]]},"3126":{"position":[[40,2]]},"3152":{"position":[[7,2]]},"3156":{"position":[[334,2]]},"3207":{"position":[[123,2]]},"3254":{"position":[[1656,2]]},"3256":{"position":[[298,2]]},"3323":{"position":[[348,2]]},"3331":{"position":[[21,2],[142,2]]},"3356":{"position":[[12,2]]},"3432":{"position":[[431,2],[4572,2]]},"3448":{"position":[[112,2]]},"3470":{"position":[[131,2]]},"3781":{"position":[[653,2]]},"3783":{"position":[[1551,2]]},"3804":{"position":[[373,2]]},"3806":{"position":[[3196,2]]},"3928":{"position":[[220,2]]}}}],["推送",{"_index":4166,"t":{"1377":{"position":[[675,2]]},"3138":{"position":[[82,2]]},"3140":{"position":[[100,2],[105,2]]},"3142":{"position":[[79,2]]}}}],["描述",{"_index":526,"t":{"91":{"position":[[10,2]]},"93":{"position":[[28,2],[324,2]]},"314":{"position":[[102,2]]},"316":{"position":[[104,2]]},"1559":{"position":[[56,2]]},"1635":{"position":[[192,2]]},"1641":{"position":[[463,2]]},"1832":{"position":[[50,2]]},"1887":{"position":[[356,2]]},"2400":{"position":[[133,2]]},"2444":{"position":[[125,2]]},"3063":{"position":[[383,2],[696,2],[1601,2]]},"3065":{"position":[[119,2]]},"3244":{"position":[[40,2]]},"3273":{"position":[[572,2]]},"3317":{"position":[[15,2]]},"3319":{"position":[[73,2]]},"3416":{"position":[[54,2]]},"3454":{"position":[[177,2]]},"3626":{"position":[[428,2],[507,2]]},"3642":{"position":[[193,2]]},"3694":{"position":[[89,2],[138,2]]},"3706":{"position":[[375,2],[688,2],[1612,2],[1867,2]]},"3777":{"position":[[19,2],[213,2],[239,2]]},"3779":{"position":[[1669,2],[1771,2]]},"3781":{"position":[[372,2],[382,2]]},"3798":{"position":[[17,2],[270,2]]},"3802":{"position":[[2434,2],[2546,2]]},"3808":{"position":[[2980,2],[3335,2]]},"3810":{"position":[[453,2],[466,2]]},"3819":{"position":[[196,2],[716,2]]},"3916":{"position":[[8962,2]]},"3938":{"position":[[129,2],[1189,2],[1253,2],[1302,2]]},"3992":{"position":[[1151,2]]}}}],["提",{"_index":833,"t":{"116":{"position":[[15,1]]},"154":{"position":[[15,1]]},"194":{"position":[[15,1]]},"222":{"position":[[15,1]]},"257":{"position":[[15,1]]},"296":{"position":[[15,1]]},"333":{"position":[[15,1]]},"375":{"position":[[15,1]]},"425":{"position":[[15,1]]},"465":{"position":[[15,1]]},"496":{"position":[[15,1]]},"536":{"position":[[15,1]]},"562":{"position":[[15,1]]},"576":{"position":[[15,1]]},"641":{"position":[[15,1]]},"657":{"position":[[15,1]]},"673":{"position":[[15,1]]},"700":{"position":[[15,1]]},"736":{"position":[[15,1]]},"753":{"position":[[15,1]]},"775":{"position":[[15,1]]},"797":{"position":[[15,1]]},"838":{"position":[[15,1]]},"848":{"position":[[15,1]]},"891":{"position":[[15,1]]},"921":{"position":[[15,1]]},"937":{"position":[[15,1]]},"951":{"position":[[15,1]]},"983":{"position":[[15,1]]},"1043":{"position":[[15,1]]},"1099":{"position":[[15,1]]},"1137":{"position":[[15,1]]},"1153":{"position":[[15,1]]},"1218":{"position":[[15,1]]},"1283":{"position":[[15,1]]},"1304":{"position":[[15,1]]},"1321":{"position":[[15,1]]},"1355":{"position":[[15,1]]},"1370":{"position":[[15,1]]},"1381":{"position":[[15,1]]},"1442":{"position":[[15,1]]},"1476":{"position":[[15,1]]},"1501":{"position":[[15,1]]},"1563":{"position":[[15,1]]},"1568":{"position":[[15,1]]},"1669":{"position":[[15,1]]},"1693":{"position":[[15,1]]},"1713":{"position":[[15,1]]},"1757":{"position":[[15,1]]},"1789":{"position":[[15,1]]},"1829":{"position":[[15,1]]},"1889":{"position":[[15,1]]},"1967":{"position":[[15,1]]},"2257":{"position":[[15,1]]},"2287":{"position":[[15,1]]},"2300":{"position":[[15,1]]},"2323":{"position":[[15,1]]},"2337":{"position":[[15,1]]},"2389":{"position":[[15,1]]},"2492":{"position":[[15,1]]},"2514":{"position":[[15,1]]},"2561":{"position":[[15,1]]},"2595":{"position":[[15,1]]},"2611":{"position":[[15,1]]},"2631":{"position":[[15,1]]},"2659":{"position":[[15,1]]},"2698":{"position":[[15,1]]},"2737":{"position":[[15,1]]},"2766":{"position":[[15,1]]},"2778":{"position":[[15,1]]},"2800":{"position":[[15,1]]},"2840":{"position":[[15,1]]},"2858":{"position":[[15,1]]},"2907":{"position":[[15,1]]},"2975":{"position":[[15,1]]},"3084":{"position":[[15,1]]},"3128":{"position":[[15,1]]},"3133":{"position":[[15,1]]},"3205":{"position":[[15,1]]},"3240":{"position":[[15,1]]},"3279":{"position":[[15,1]]},"3298":{"position":[[15,1]]},"3311":{"position":[[15,1]]},"3333":{"position":[[15,1]]},"3347":{"position":[[15,1]]},"3409":{"position":[[15,1]]},"3472":{"position":[[15,1]]},"3605":{"position":[[15,1]]},"3724":{"position":[[15,1]]},"3756":{"position":[[15,1]]},"3906":{"position":[[15,1]]}}}],["提交",{"_index":670,"t":{"106":{"position":[[23,2]]},"378":{"position":[[62,2],[119,2]]},"388":{"position":[[15,2]]},"504":{"position":[[229,2]]},"567":{"position":[[58,2],[174,2],[279,2]]},"579":{"position":[[16,2]]},"651":{"position":[[396,2]]},"789":{"position":[[217,2]]},"924":{"position":[[170,2]]},"931":{"position":[[214,2],[392,2],[661,2],[808,2],[1046,2],[1170,2]]},"933":{"position":[[58,2],[174,2],[279,2]]},"1351":{"position":[[396,2]]},"1488":{"position":[[1707,2]]},"1629":{"position":[[125,2]]},"1687":{"position":[[333,2]]},"1751":{"position":[[20,2]]},"1919":{"position":[[384,2]]},"3063":{"position":[[1247,2]]},"3282":{"position":[[247,2]]},"3284":{"position":[[27,2]]},"3287":{"position":[[2064,2]]},"3291":{"position":[[383,2],[1155,2],[2109,2]]},"3686":{"position":[[519,2]]},"3706":{"position":[[1258,2]]},"3940":{"position":[[1020,2]]},"3962":{"position":[[2039,2],[2046,2]]},"3974":{"position":[[369,2]]},"3976":{"position":[[230,2]]},"3978":{"position":[[1652,2]]},"3982":{"position":[[247,2]]},"3986":{"position":[[45,2]]},"4006":{"position":[[344,2],[361,2]]}}}],["提供",{"_index":349,"t":{"21":{"position":[[168,2]]},"23":{"position":[[150,2]]},"30":{"position":[[8,2]]},"32":{"position":[[10,2]]},"53":{"position":[[21,2]]},"64":{"position":[[34,2]]},"77":{"position":[[21,2]]},"95":{"position":[[138,2]]},"108":{"position":[[11,2]]},"112":{"position":[[1481,2]]},"114":{"position":[[11,2]]},"119":{"position":[[18,2]]},"121":{"position":[[591,2],[658,2]]},"131":{"position":[[9,2]]},"133":{"position":[[9,2],[41,2]]},"148":{"position":[[130,2]]},"184":{"position":[[32,2],[71,2]]},"186":{"position":[[25,2]]},"206":{"position":[[13,2],[241,2]]},"208":{"position":[[37,2]]},"218":{"position":[[17,2],[281,2]]},"220":{"position":[[132,2]]},"243":{"position":[[20,2]]},"245":{"position":[[39,2]]},"247":{"position":[[195,2]]},"255":{"position":[[134,2]]},"267":{"position":[[34,2]]},"306":{"position":[[122,2]]},"308":{"position":[[295,2]]},"310":{"position":[[147,2]]},"314":{"position":[[27,2]]},"316":{"position":[[27,2]]},"329":{"position":[[133,2]]},"331":{"position":[[109,2]]},"350":{"position":[[7,2],[723,2],[736,2]]},"357":{"position":[[46,2]]},"365":{"position":[[39,2]]},"369":{"position":[[96,2]]},"435":{"position":[[13,2]]},"439":{"position":[[22,2]]},"445":{"position":[[1009,2]]},"461":{"position":[[38,2],[48,2],[69,2]]},"480":{"position":[[34,2]]},"484":{"position":[[75,2]]},"500":{"position":[[24,2],[34,2]]},"502":{"position":[[23,2],[86,2]]},"504":{"position":[[251,2]]},"506":{"position":[[14,2]]},"512":{"position":[[9,2]]},"516":{"position":[[622,2]]},"526":{"position":[[224,2]]},"528":{"position":[[193,2]]},"540":{"position":[[52,2]]},"552":{"position":[[9,2]]},"554":{"position":[[49,2],[127,2]]},"567":{"position":[[30,2]]},"587":{"position":[[22,2],[2204,2],[2246,2]]},"589":{"position":[[26,2]]},"591":{"position":[[36,2]]},"604":{"position":[[7,2]]},"608":{"position":[[8,2],[699,2]]},"612":{"position":[[9,2]]},"615":{"position":[[28,2]]},"617":{"position":[[1415,2],[1849,2],[2172,2],[2751,2]]},"619":{"position":[[7,2]]},"627":{"position":[[22,2]]},"643":{"position":[[9,2]]},"677":{"position":[[7,2]]},"679":{"position":[[128,2]]},"698":{"position":[[387,2]]},"704":{"position":[[7,2]]},"756":{"position":[[14,2]]},"799":{"position":[[44,2]]},"818":{"position":[[9,2]]},"836":{"position":[[11,2]]},"841":{"position":[[92,2]]},"846":{"position":[[97,2]]},"885":{"position":[[45,2],[207,2]]},"887":{"position":[[72,2]]},"924":{"position":[[9,2]]},"933":{"position":[[30,2]]},"947":{"position":[[14,2]]},"1020":{"position":[[7,2]]},"1101":{"position":[[44,2]]},"1107":{"position":[[10,2]]},"1143":{"position":[[7,2]]},"1151":{"position":[[7,2]]},"1155":{"position":[[44,2]]},"1157":{"position":[[9,2]]},"1214":{"position":[[191,2]]},"1269":{"position":[[15,2]]},"1277":{"position":[[25,2]]},"1313":{"position":[[9,2]]},"1405":{"position":[[9,2]]},"1408":{"position":[[1020,2]]},"1416":{"position":[[9,2],[62,2]]},"1418":{"position":[[13,2]]},"1424":{"position":[[753,2]]},"1426":{"position":[[10,2]]},"1428":{"position":[[10,2],[30,2]]},"1432":{"position":[[218,2]]},"1438":{"position":[[23,2]]},"1440":{"position":[[12,2]]},"1511":{"position":[[168,2]]},"1539":{"position":[[1618,2]]},"1553":{"position":[[45,2]]},"1580":{"position":[[18,2],[198,2],[390,2]]},"1587":{"position":[[60,2],[65,2]]},"1611":{"position":[[9,2]]},"1619":{"position":[[9,2]]},"1629":{"position":[[9,2]]},"1639":{"position":[[18,2],[35,2]]},"1661":{"position":[[8,2]]},"1683":{"position":[[337,2]]},"1689":{"position":[[10,2]]},"1707":{"position":[[102,2]]},"1711":{"position":[[945,2]]},"1717":{"position":[[63,2]]},"1719":{"position":[[7,2]]},"1724":{"position":[[9,2]]},"1726":{"position":[[10,2]]},"1755":{"position":[[1069,2],[1084,2]]},"1761":{"position":[[284,2]]},"1763":{"position":[[9,2]]},"1775":{"position":[[132,2]]},"1801":{"position":[[65,2]]},"1807":{"position":[[7,2]]},"1809":{"position":[[7,2]]},"1815":{"position":[[47,2]]},"1839":{"position":[[17,2]]},"1841":{"position":[[9,2]]},"1853":{"position":[[13,2]]},"1855":{"position":[[444,2],[491,2],[497,2]]},"1857":{"position":[[9,2]]},"1867":{"position":[[14,2],[45,2],[338,2]]},"1869":{"position":[[10,2]]},"1871":{"position":[[9,2]]},"1898":{"position":[[39,2]]},"1905":{"position":[[13,2],[114,2]]},"1907":{"position":[[581,2]]},"1913":{"position":[[1393,2]]},"1919":{"position":[[295,2],[560,2],[851,2]]},"1925":{"position":[[1343,2],[1578,2]]},"1927":{"position":[[898,2]]},"1933":{"position":[[556,2],[1018,2]]},"1935":{"position":[[516,2]]},"1941":{"position":[[1266,2]]},"1943":{"position":[[463,2]]},"1969":{"position":[[105,2]]},"1983":{"position":[[17,2]]},"2006":{"position":[[17,2]]},"2096":{"position":[[47,2]]},"2175":{"position":[[259,2]]},"2206":{"position":[[13,2]]},"2231":{"position":[[150,2]]},"2233":{"position":[[22,2]]},"2239":{"position":[[8,2]]},"2241":{"position":[[24,2]]},"2245":{"position":[[42,2]]},"2255":{"position":[[77,2]]},"2264":{"position":[[78,2]]},"2272":{"position":[[49,2]]},"2274":{"position":[[53,2]]},"2281":{"position":[[41,2]]},"2283":{"position":[[45,2]]},"2307":{"position":[[74,2]]},"2309":{"position":[[28,2]]},"2311":{"position":[[174,2],[217,2]]},"2319":{"position":[[18,2]]},"2321":{"position":[[11,2]]},"2345":{"position":[[9,2],[138,2]]},"2348":{"position":[[9,2]]},"2357":{"position":[[345,2]]},"2381":{"position":[[50,2]]},"2385":{"position":[[131,2]]},"2395":{"position":[[9,2],[51,2]]},"2424":{"position":[[26,2]]},"2442":{"position":[[32,2],[154,2],[2058,2]]},"2446":{"position":[[13,2]]},"2466":{"position":[[9,2]]},"2472":{"position":[[29,2]]},"2480":{"position":[[34,2]]},"2497":{"position":[[6,2],[159,2]]},"2499":{"position":[[9,2],[70,2]]},"2517":{"position":[[136,2]]},"2538":{"position":[[121,2]]},"2544":{"position":[[7,2]]},"2547":{"position":[[6,2]]},"2599":{"position":[[46,2]]},"2629":{"position":[[48,2],[150,2]]},"2657":{"position":[[7,2]]},"2680":{"position":[[28,2]]},"2686":{"position":[[18,2]]},"2692":{"position":[[10,2],[29,2]]},"2694":{"position":[[9,2]]},"2696":{"position":[[7,2]]},"2703":{"position":[[37,2]]},"2709":{"position":[[270,2]]},"2713":{"position":[[13,2],[162,2]]},"2717":{"position":[[15,2]]},"2729":{"position":[[9,2]]},"2733":{"position":[[9,2]]},"2751":{"position":[[7,2]]},"2772":{"position":[[17,2]]},"2782":{"position":[[96,2]]},"2784":{"position":[[30,2]]},"2790":{"position":[[41,2],[329,2]]},"2792":{"position":[[10,2]]},"2803":{"position":[[93,2]]},"2811":{"position":[[22,2]]},"2817":{"position":[[24,2]]},"2823":{"position":[[68,2]]},"2831":{"position":[[25,2]]},"2852":{"position":[[14,2]]},"2860":{"position":[[50,2]]},"2881":{"position":[[331,2]]},"2897":{"position":[[10,2]]},"2910":{"position":[[201,2],[293,2],[374,2],[386,2]]},"2912":{"position":[[121,2]]},"2915":{"position":[[58,2]]},"2917":{"position":[[118,2]]},"2933":{"position":[[619,2]]},"2949":{"position":[[467,2]]},"2963":{"position":[[486,2]]},"2967":{"position":[[15,2]]},"2977":{"position":[[19,2]]},"2987":{"position":[[19,2]]},"2997":{"position":[[19,2]]},"3005":{"position":[[19,2]]},"3013":{"position":[[17,2]]},"3019":{"position":[[19,2]]},"3027":{"position":[[19,2]]},"3035":{"position":[[19,2]]},"3043":{"position":[[19,2]]},"3051":{"position":[[19,2]]},"3059":{"position":[[19,2]]},"3069":{"position":[[19,2]]},"3126":{"position":[[74,2]]},"3136":{"position":[[118,2]]},"3154":{"position":[[744,2]]},"3156":{"position":[[48,2],[379,2]]},"3160":{"position":[[8,2]]},"3301":{"position":[[14,2]]},"3307":{"position":[[177,2]]},"3309":{"position":[[19,2]]},"3315":{"position":[[9,2]]},"3360":{"position":[[186,2]]},"3377":{"position":[[46,2]]},"3397":{"position":[[93,2]]},"3399":{"position":[[87,2]]},"3401":{"position":[[180,2]]},"3407":{"position":[[14,2]]},"3412":{"position":[[148,2]]},"3418":{"position":[[64,2]]},"3426":{"position":[[13,2],[232,2]]},"3428":{"position":[[28,2],[86,2],[100,2]]},"3430":{"position":[[1923,2]]},"3432":{"position":[[2634,2]]},"3436":{"position":[[8,2],[20,2]]},"3438":{"position":[[8,2]]},"3440":{"position":[[18,2]]},"3466":{"position":[[43,2]]},"3470":{"position":[[2,2]]},"3476":{"position":[[39,2]]},"3483":{"position":[[7,2]]},"3506":{"position":[[59,2],[639,2]]},"3520":{"position":[[13,2]]},"3539":{"position":[[17,2]]},"3547":{"position":[[59,2],[809,2]]},"3551":{"position":[[15,2]]},"3553":{"position":[[15,2]]},"3555":{"position":[[15,2]]},"3557":{"position":[[15,2]]},"3559":{"position":[[15,2]]},"3561":{"position":[[13,2]]},"3573":{"position":[[10,2]]},"3583":{"position":[[15,2]]},"3589":{"position":[[557,2]]},"3595":{"position":[[7,2]]},"3597":{"position":[[14,2]]},"3620":{"position":[[379,2],[409,2]]},"3628":{"position":[[9,2]]},"3642":{"position":[[9,2]]},"3658":{"position":[[10,2]]},"3666":{"position":[[22,2]]},"3706":{"position":[[15,2]]},"3708":{"position":[[9,2],[49,2]]},"3716":{"position":[[96,2],[110,2],[780,2]]},"3718":{"position":[[134,2]]},"3722":{"position":[[333,2]]},"3727":{"position":[[80,2],[97,2]]},"3744":{"position":[[260,2]]},"3752":{"position":[[12,2],[36,2]]},"3770":{"position":[[2,2]]},"3777":{"position":[[2,2],[38,2]]},"3779":{"position":[[22,2],[79,2],[168,2]]},"3781":{"position":[[11,2]]},"3783":{"position":[[1228,2]]},"3785":{"position":[[24,2]]},"3793":{"position":[[48,2]]},"3798":{"position":[[2,2],[39,2]]},"3802":{"position":[[21,2],[80,2],[165,2]]},"3806":{"position":[[10,2],[2705,2]]},"3808":{"position":[[2926,2]]},"3810":{"position":[[15,2]]},"3812":{"position":[[26,2]]},"3815":{"position":[[112,2]]},"3817":{"position":[[22,2],[85,2],[174,2]]},"3819":{"position":[[10,2],[1509,2],[1526,2]]},"3821":{"position":[[30,2]]},"3828":{"position":[[6,2]]},"3830":{"position":[[12,2],[172,2]]},"3832":{"position":[[6,2]]},"3834":{"position":[[6,2]]},"3924":{"position":[[777,2],[1583,2],[1952,2],[2051,2],[4511,2]]},"3928":{"position":[[201,2],[310,2]]},"3930":{"position":[[418,2]]},"3936":{"position":[[419,2]]},"3954":{"position":[[53,2]]},"3978":{"position":[[174,2]]},"3980":{"position":[[533,2]]},"3986":{"position":[[228,2],[841,2]]},"3994":{"position":[[726,2]]},"3996":{"position":[[1655,2]]},"3998":{"position":[[50,2]]}}}],["提供商",{"_index":7207,"t":{"2910":{"position":[[313,3]]}}}],["提供数据",{"_index":8639,"t":{"3754":{"position":[[36,4]]}}}],["提供方便",{"_index":3915,"t":{"1052":{"position":[[97,4]]}}}],["提出",{"_index":2346,"t":{"384":{"position":[[0,2]]},"3414":{"position":[[224,2]]}}}],["提前",{"_index":1700,"t":{"233":{"position":[[396,2]]},"1589":{"position":[[229,2]]},"3352":{"position":[[150,2]]},"3954":{"position":[[621,2]]}}}],["提升",{"_index":3902,"t":{"1048":{"position":[[51,2],[70,2]]},"1103":{"position":[[160,2]]},"2341":{"position":[[175,2]]},"3094":{"position":[[44,2]]},"3096":{"position":[[73,2],[123,2]]},"3104":{"position":[[23,2]]},"3470":{"position":[[172,2]]},"3914":{"position":[[1492,2]]},"3944":{"position":[[536,2]]},"3960":{"position":[[671,2]]},"3962":{"position":[[989,2]]}}}],["提示",{"_index":2753,"t":{"498":{"position":[[107,2]]},"608":{"position":[[600,2]]},"615":{"position":[[566,2]]},"675":{"position":[[169,2],[202,2],[290,2]]},"685":{"position":[[434,2]]},"799":{"position":[[2,2]]},"893":{"position":[[107,2]]},"1101":{"position":[[2,2]]},"1155":{"position":[[2,2]]},"1539":{"position":[[1698,2]]},"1555":{"position":[[475,2],[541,2]]},"1611":{"position":[[831,2]]},"1839":{"position":[[5,2]]},"1973":{"position":[[122,2]]},"1987":{"position":[[122,2]]},"2010":{"position":[[130,2]]},"2497":{"position":[[48,2]]},"2499":{"position":[[77,2]]},"2503":{"position":[[102,2]]},"2508":{"position":[[48,2]]},"2709":{"position":[[229,2]]},"2889":{"position":[[155,2]]},"2905":{"position":[[53,2]]},"2977":{"position":[[4,2],[23,2]]},"2987":{"position":[[4,2],[23,2]]},"2997":{"position":[[4,2],[23,2]]},"3005":{"position":[[4,2],[23,2]]},"3019":{"position":[[4,2],[23,2]]},"3027":{"position":[[4,2],[23,2]]},"3035":{"position":[[4,2],[23,2]]},"3043":{"position":[[4,2],[23,2]]},"3051":{"position":[[4,2],[23,2]]},"3059":{"position":[[4,2],[23,2]]},"3078":{"position":[[59,2]]},"3168":{"position":[[67,2]]},"3224":{"position":[[368,2]]},"3307":{"position":[[168,2]]},"3692":{"position":[[47,2]]},"3696":{"position":[[36,2],[164,2]]},"3924":{"position":[[1180,2]]},"3932":{"position":[[1516,2],[1593,2]]},"3938":{"position":[[995,2]]},"3964":{"position":[[722,2]]},"3980":{"position":[[426,2]]},"3982":{"position":[[817,2]]},"3992":{"position":[[4002,2]]},"3996":{"position":[[268,2],[568,2]]},"4000":{"position":[[1158,2]]}}}],["提起",{"_index":7353,"t":{"3069":{"position":[[235,2]]}}}],["提醒",{"_index":2460,"t":{"413":{"position":[[1,2]]},"538":{"position":[[2,2]]},"587":{"position":[[687,2]]},"939":{"position":[[1,2]]},"1139":{"position":[[2,2]]},"1741":{"position":[[1,2]]},"1759":{"position":[[2,2]]},"1795":{"position":[[2794,2]]},"1979":{"position":[[839,2]]},"1991":{"position":[[235,2]]},"2014":{"position":[[235,2]]},"2331":{"position":[[189,2]]},"2597":{"position":[[2,2]]},"2674":{"position":[[176,2]]},"2836":{"position":[[1172,2]]},"3207":{"position":[[161,2]]},"3248":{"position":[[2,2]]},"3323":{"position":[[481,2]]},"3468":{"position":[[330,2]]},"3722":{"position":[[317,2]]},"3912":{"position":[[2459,2]]}}}],["提高",{"_index":102,"t":{"5":{"position":[[141,2]]},"7":{"position":[[137,2]]},"225":{"position":[[20,2]]},"239":{"position":[[50,2]]},"302":{"position":[[161,2]]},"581":{"position":[[8,2],[30,2]]},"1509":{"position":[[70,2],[274,2]]},"1777":{"position":[[76,2]]},"1903":{"position":[[468,2]]},"2290":{"position":[[137,2]]},"2311":{"position":[[156,2]]},"2915":{"position":[[224,2]]},"3094":{"position":[[175,2]]},"3331":{"position":[[8,2]]},"3610":{"position":[[20,2]]},"3740":{"position":[[459,2]]},"3970":{"position":[[343,2]]}}}],["插",{"_index":6770,"t":{"2629":{"position":[[93,1]]}}}],["插件",{"_index":172,"t":{"11":{"position":[[738,2]]},"919":{"position":[[92,2]]},"1418":{"position":[[185,2]]},"1420":{"position":[[44,2]]},"1578":{"position":[[167,2]]},"2294":{"position":[[767,2]]},"3729":{"position":[[53,2]]},"3924":{"position":[[688,2]]},"3966":{"position":[[1808,2]]},"3970":{"position":[[17,2],[231,2]]},"3986":{"position":[[295,2]]},"3992":{"position":[[110,2],[358,2],[414,2]]}}}],["插入",{"_index":2909,"t":{"552":{"position":[[351,2]]},"570":{"position":[[1734,2],[2094,2]]},"653":{"position":[[16,2],[50,2]]},"767":{"position":[[5,2],[314,2],[436,2]]},"1143":{"position":[[90,2]]},"1145":{"position":[[513,2]]},"2919":{"position":[[90,2]]},"3209":{"position":[[115,2]]},"3211":{"position":[[35,2]]},"3213":{"position":[[38,2]]},"3224":{"position":[[1080,2]]},"3258":{"position":[[242,2]]},"3267":{"position":[[64,2],[312,2],[659,2]]},"3269":{"position":[[6,2]]},"3271":{"position":[[6,2]]},"3434":{"position":[[381,2]]},"3452":{"position":[[1010,2]]},"3458":{"position":[[434,2],[825,2]]},"3916":{"position":[[4006,2]]}}}],["搜",{"_index":4735,"t":{"1511":{"position":[[1924,1]]}}}],["搜索",{"_index":2339,"t":{"378":{"position":[[52,2]]},"3309":{"position":[[30,2],[35,2],[62,2]]}}}],["搜索引擎",{"_index":10262,"t":{"3992":{"position":[[2669,4]]}}}],["搞",{"_index":4187,"t":{"1383":{"position":[[36,1]]},"3924":{"position":[[2700,1]]}}}],["搭建",{"_index":7030,"t":{"2776":{"position":[[2,2]]},"3331":{"position":[[12,2]]}}}],["携带",{"_index":1125,"t":{"148":{"position":[[309,2],[333,2]]},"1797":{"position":[[399,2]]},"3936":{"position":[[744,2]]},"3964":{"position":[[949,2]]}}}],["携手",{"_index":9429,"t":{"3926":{"position":[[595,2]]}}}],["摩洛哥",{"_index":6451,"t":{"2559":{"position":[[201,3]]}}}],["摩纳哥",{"_index":6552,"t":{"2559":{"position":[[1145,3]]}}}],["播",{"_index":5314,"t":{"1699":{"position":[[147,1]]}}}],["播放按钮",{"_index":7993,"t":{"3365":{"position":[[36,4]]}}}],["操作",{"_index":617,"t":{"98":{"position":[[175,2]]},"110":{"position":[[19,2],[29,2],[51,2],[71,2],[87,2],[93,2]]},"112":{"position":[[57,2],[1080,2]]},"114":{"position":[[210,2]]},"119":{"position":[[88,2],[104,2],[183,2]]},"261":{"position":[[55,2]]},"267":{"position":[[43,2]]},"278":{"position":[[133,2]]},"427":{"position":[[61,2]]},"433":{"position":[[117,2]]},"453":{"position":[[33,2]]},"498":{"position":[[95,2]]},"502":{"position":[[37,2],[41,2],[68,2]]},"504":{"position":[[65,2],[271,2]]},"506":{"position":[[64,2],[116,2]]},"524":{"position":[[499,2]]},"528":{"position":[[596,2]]},"530":{"position":[[770,2],[790,2]]},"540":{"position":[[48,2]]},"552":{"position":[[62,2]]},"554":{"position":[[117,2],[132,2]]},"565":{"position":[[19,2],[29,2],[51,2],[86,2],[105,2],[111,2],[138,2],[181,2]]},"570":{"position":[[1086,2],[1939,2],[1964,2],[2005,2],[2284,2],[2309,2],[2350,2],[2575,2],[2600,2],[2641,2]]},"612":{"position":[[76,2]]},"639":{"position":[[439,2]]},"643":{"position":[[23,2]]},"645":{"position":[[230,2]]},"647":{"position":[[120,2]]},"649":{"position":[[173,2]]},"651":{"position":[[182,2]]},"659":{"position":[[36,2]]},"661":{"position":[[98,2]]},"663":{"position":[[104,2]]},"665":{"position":[[534,2]]},"667":{"position":[[558,2]]},"669":{"position":[[534,2]]},"671":{"position":[[558,2]]},"675":{"position":[[288,2]]},"679":{"position":[[0,2],[122,2],[164,2],[175,2]]},"685":{"position":[[461,2],[472,2],[485,2],[526,2],[542,2],[582,2]]},"688":{"position":[[20,2]]},"694":{"position":[[67,2]]},"696":{"position":[[475,2],[486,2],[499,2]]},"717":{"position":[[12,2]]},"728":{"position":[[19,2]]},"739":{"position":[[83,2]]},"741":{"position":[[30,2]]},"749":{"position":[[221,2],[523,2],[887,2]]},"756":{"position":[[33,2]]},"779":{"position":[[187,2]]},"781":{"position":[[88,2]]},"783":{"position":[[80,2]]},"785":{"position":[[86,2]]},"787":{"position":[[92,2]]},"789":{"position":[[98,2]]},"795":{"position":[[261,2]]},"810":{"position":[[409,2]]},"812":{"position":[[441,2]]},"814":{"position":[[405,2]]},"816":{"position":[[437,2]]},"826":{"position":[[24,2],[32,2],[41,2]]},"844":{"position":[[18,2]]},"887":{"position":[[48,2]]},"893":{"position":[[95,2]]},"903":{"position":[[31,2],[81,2]]},"905":{"position":[[13,2],[117,2],[222,2]]},"907":{"position":[[13,2],[111,2],[210,2]]},"909":{"position":[[13,2],[106,2],[200,2]]},"924":{"position":[[16,2],[58,2]]},"933":{"position":[[421,2]]},"941":{"position":[[93,2],[133,2]]},"943":{"position":[[65,2]]},"947":{"position":[[1057,2]]},"949":{"position":[[149,2],[193,2]]},"954":{"position":[[166,2]]},"956":{"position":[[811,2]]},"962":{"position":[[171,2]]},"965":{"position":[[304,2]]},"967":{"position":[[308,2]]},"969":{"position":[[301,2]]},"971":{"position":[[301,2]]},"973":{"position":[[206,2]]},"975":{"position":[[218,2]]},"986":{"position":[[50,2],[140,2]]},"988":{"position":[[17,2],[431,2]]},"996":{"position":[[25,2],[56,2]]},"998":{"position":[[45,2],[96,2]]},"1010":{"position":[[35,2],[123,2],[189,2]]},"1035":{"position":[[43,2]]},"1037":{"position":[[22,2],[120,2],[219,2],[319,2],[343,2],[873,2]]},"1039":{"position":[[771,2],[791,2]]},"1046":{"position":[[35,2]]},"1052":{"position":[[64,2],[102,2]]},"1056":{"position":[[390,2]]},"1068":{"position":[[76,2],[94,2]]},"1073":{"position":[[31,2],[60,2]]},"1075":{"position":[[22,2]]},"1107":{"position":[[19,2],[44,2],[102,2]]},"1111":{"position":[[441,2]]},"1113":{"position":[[439,2]]},"1115":{"position":[[448,2]]},"1117":{"position":[[4686,2]]},"1119":{"position":[[410,2]]},"1121":{"position":[[442,2]]},"1123":{"position":[[373,2]]},"1129":{"position":[[1764,2]]},"1157":{"position":[[57,2]]},"1160":{"position":[[883,2]]},"1162":{"position":[[931,2]]},"1164":{"position":[[415,2]]},"1166":{"position":[[538,2]]},"1168":{"position":[[295,2]]},"1170":{"position":[[512,2]]},"1173":{"position":[[230,2]]},"1175":{"position":[[248,2]]},"1177":{"position":[[230,2]]},"1179":{"position":[[451,2]]},"1181":{"position":[[288,2]]},"1183":{"position":[[351,2]]},"1185":{"position":[[1074,2]]},"1188":{"position":[[265,2]]},"1190":{"position":[[276,2]]},"1194":{"position":[[27,2],[437,2]]},"1196":{"position":[[14,2]]},"1198":{"position":[[23,2]]},"1202":{"position":[[20,2]]},"1214":{"position":[[107,2]]},"1221":{"position":[[24,2]]},"1223":{"position":[[95,2]]},"1225":{"position":[[33,2]]},"1234":{"position":[[503,2]]},"1236":{"position":[[512,2]]},"1238":{"position":[[610,2]]},"1240":{"position":[[673,2]]},"1309":{"position":[[20,2]]},"1313":{"position":[[332,2]]},"1325":{"position":[[188,2]]},"1327":{"position":[[88,2]]},"1329":{"position":[[480,2]]},"1331":{"position":[[495,2]]},"1333":{"position":[[480,2]]},"1335":{"position":[[498,2]]},"1337":{"position":[[66,2]]},"1339":{"position":[[69,2]]},"1341":{"position":[[290,2]]},"1343":{"position":[[299,2]]},"1345":{"position":[[290,2]]},"1347":{"position":[[299,2]]},"1349":{"position":[[173,2]]},"1351":{"position":[[182,2]]},"1360":{"position":[[15,2]]},"1366":{"position":[[6,2],[16,2],[20,2]]},"1368":{"position":[[17,2]]},"1426":{"position":[[281,2]]},"1440":{"position":[[534,2]]},"1557":{"position":[[14,2]]},"1566":{"position":[[26,2],[371,2]]},"1665":{"position":[[74,2]]},"1672":{"position":[[82,2]]},"1711":{"position":[[803,2],[823,2]]},"1761":{"position":[[33,2],[76,2],[115,2]]},"1765":{"position":[[146,2]]},"1773":{"position":[[316,2]]},"1775":{"position":[[3845,2]]},"1892":{"position":[[82,2],[114,2],[131,2]]},"1894":{"position":[[49,2]]},"1901":{"position":[[191,2],[369,2],[498,2],[641,2]]},"1903":{"position":[[55,2],[463,2]]},"1917":{"position":[[33,2]]},"1919":{"position":[[642,2]]},"1923":{"position":[[0,2],[82,2],[92,2]]},"1925":{"position":[[942,2],[1412,2]]},"1927":{"position":[[152,2]]},"1931":{"position":[[12,2],[42,2]]},"1947":{"position":[[64,2],[101,2]]},"2175":{"position":[[170,2]]},"2182":{"position":[[225,2],[245,2]]},"2186":{"position":[[41,2]]},"2188":{"position":[[41,2]]},"2255":{"position":[[93,2]]},"2343":{"position":[[25,2]]},"2379":{"position":[[435,2]]},"2436":{"position":[[25,2]]},"2474":{"position":[[17,2]]},"2478":{"position":[[450,2],[470,2]]},"2609":{"position":[[43,2]]},"2653":{"position":[[5,2]]},"2684":{"position":[[318,2],[328,2],[359,2],[367,2]]},"2688":{"position":[[104,2]]},"2694":{"position":[[50,2],[59,2]]},"2784":{"position":[[35,2]]},"2796":{"position":[[331,2]]},"2829":{"position":[[702,2]]},"2856":{"position":[[1718,2]]},"2887":{"position":[[47,2]]},"2910":{"position":[[393,2]]},"2925":{"position":[[442,2]]},"2941":{"position":[[442,2]]},"2955":{"position":[[442,2]]},"3082":{"position":[[210,2]]},"3088":{"position":[[69,2]]},"3170":{"position":[[82,2]]},"3211":{"position":[[103,2]]},"3224":{"position":[[1657,2],[1715,2]]},"3250":{"position":[[227,2]]},"3256":{"position":[[300,2]]},"3282":{"position":[[19,2],[65,2],[122,2]]},"3284":{"position":[[18,2]]},"3287":{"position":[[94,2],[198,2],[253,2],[347,2],[523,2],[578,2]]},"3291":{"position":[[1605,2]]},"3416":{"position":[[332,2]]},"3434":{"position":[[387,2]]},"3444":{"position":[[48,2]]},"3446":{"position":[[685,2]]},"3452":{"position":[[1016,2],[1496,2]]},"3454":{"position":[[175,2]]},"3470":{"position":[[25,2],[99,2]]},"3522":{"position":[[1227,2]]},"3563":{"position":[[694,2]]},"3583":{"position":[[27,2]]},"3587":{"position":[[100,2]]},"3589":{"position":[[74,2]]},"3595":{"position":[[271,2],[342,2]]},"3597":{"position":[[20,2]]},"3620":{"position":[[149,2],[292,2]]},"3654":{"position":[[56,2]]},"3712":{"position":[[73,2]]},"3768":{"position":[[568,2]]},"3772":{"position":[[27,2],[77,2]]},"3779":{"position":[[1445,2]]},"3783":{"position":[[1235,2],[1441,2],[1535,2],[1649,2]]},"3802":{"position":[[2079,2]]},"3815":{"position":[[134,2]]},"3817":{"position":[[2683,2]]},"3819":{"position":[[17,2],[1520,2]]},"3834":{"position":[[14,2]]},"3844":{"position":[[883,2],[894,2],[939,2],[1012,2],[1052,2],[1115,2],[1158,2],[1181,2],[1193,2],[1338,2]]},"3858":{"position":[[1,2]]},"3860":{"position":[[42,2]]},"3894":{"position":[[1,2]]},"3914":{"position":[[3499,2]]},"3916":{"position":[[1531,2],[1537,2],[4012,2],[4492,2],[8960,2]]},"3924":{"position":[[109,2]]},"3928":{"position":[[1098,2],[1260,2]]},"3952":{"position":[[764,2]]},"3954":{"position":[[573,2]]},"3964":{"position":[[568,2]]},"3968":{"position":[[602,2]]},"3972":{"position":[[515,2]]},"3974":{"position":[[34,2]]},"3980":{"position":[[652,2],[822,2]]},"3982":{"position":[[232,2],[667,2]]},"3984":{"position":[[205,2]]},"3988":{"position":[[16,2]]},"3992":{"position":[[2900,2],[2933,2]]},"3994":{"position":[[276,2]]},"3998":{"position":[[206,2],[249,2],[787,2]]},"4002":{"position":[[402,2]]}}}],["操作数",{"_index":4928,"t":{"1520":{"position":[[336,3],[381,3]]}}}],["操作方法",{"_index":4028,"t":{"1157":{"position":[[23,4]]},"1901":{"position":[[200,4],[387,4]]},"3950":{"position":[[242,4]]},"3968":{"position":[[171,4],[205,4]]},"3980":{"position":[[121,4]]},"3992":{"position":[[1496,4]]}}}],["操作法",{"_index":2872,"t":{"540":{"position":[[68,3]]}}}],["操作符",{"_index":4925,"t":{"1520":{"position":[[310,3]]},"1530":{"position":[[65,3]]},"1539":{"position":[[1155,3],[1867,3],[1924,3]]},"1541":{"position":[[310,3]]},"1557":{"position":[[586,3],[746,3]]}}}],["操作系统",{"_index":587,"t":{"95":{"position":[[159,4]]},"119":{"position":[[31,4]]},"1518":{"position":[[55,4]]},"2047":{"position":[[57,4]]},"2057":{"position":[[256,4]]},"3313":{"position":[[44,4]]}}}],["操作能力",{"_index":2767,"t":{"504":{"position":[[260,4]]}}}],["支付",{"_index":7203,"t":{"2910":{"position":[[278,2]]},"3616":{"position":[[47,2]]}}}],["支付宝",{"_index":932,"t":{"121":{"position":[[675,3]]},"1511":{"position":[[566,3],[2745,3]]}}}],["支持",{"_index":6,"t":{"3":{"position":[[23,2]]},"51":{"position":[[20,2]]},"62":{"position":[[20,2]]},"75":{"position":[[20,2]]},"95":{"position":[[153,2]]},"127":{"position":[[1470,2],[1477,2],[1729,2]]},"233":{"position":[[4,2]]},"278":{"position":[[197,2],[230,2],[261,2]]},"288":{"position":[[547,2]]},"302":{"position":[[82,2]]},"304":{"position":[[74,2]]},"350":{"position":[[176,2],[419,2],[628,2]]},"357":{"position":[[25,2]]},"359":{"position":[[203,2]]},"399":{"position":[[236,2],[633,2]]},"411":{"position":[[10,2]]},"415":{"position":[[458,2]]},"429":{"position":[[109,2]]},"433":{"position":[[140,2]]},"445":{"position":[[145,2],[925,2],[1019,2]]},"453":{"position":[[20,2]]},"455":{"position":[[159,2]]},"457":{"position":[[81,2]]},"461":{"position":[[30,2]]},"474":{"position":[[0,2]]},"476":{"position":[[0,2]]},"478":{"position":[[0,2]]},"484":{"position":[[15,2]]},"504":{"position":[[59,2],[177,2],[184,2],[200,2],[225,2],[312,2]]},"514":{"position":[[317,2]]},"516":{"position":[[148,2],[478,2]]},"587":{"position":[[2183,2]]},"591":{"position":[[49,2],[60,2],[67,2],[98,2]]},"602":{"position":[[277,2]]},"612":{"position":[[39,2]]},"633":{"position":[[41,2]]},"679":{"position":[[32,2],[154,2]]},"685":{"position":[[573,2]]},"692":{"position":[[21,2]]},"698":{"position":[[17,2],[108,2],[965,2]]},"749":{"position":[[213,2],[515,2],[879,2]]},"756":{"position":[[77,2]]},"773":{"position":[[3,2],[22,2]]},"810":{"position":[[412,2]]},"812":{"position":[[444,2]]},"814":{"position":[[408,2]]},"816":{"position":[[440,2]]},"826":{"position":[[14,2]]},"879":{"position":[[10,2]]},"881":{"position":[[267,2]]},"897":{"position":[[51,2],[256,2],[298,2],[399,2]]},"899":{"position":[[145,2],[228,2],[918,2],[1235,2],[1318,2]]},"903":{"position":[[75,2]]},"911":{"position":[[3,2],[78,2],[194,2],[216,2]]},"924":{"position":[[69,2]]},"941":{"position":[[83,2]]},"949":{"position":[[8,2]]},"954":{"position":[[351,2]]},"990":{"position":[[22,2]]},"1016":{"position":[[16,2]]},"1026":{"position":[[220,2]]},"1031":{"position":[[206,2]]},"1037":{"position":[[334,2],[867,2]]},"1052":{"position":[[37,2]]},"1111":{"position":[[444,2]]},"1113":{"position":[[442,2]]},"1115":{"position":[[451,2]]},"1117":{"position":[[4689,2]]},"1119":{"position":[[413,2]]},"1121":{"position":[[445,2]]},"1123":{"position":[[376,2]]},"1129":{"position":[[1767,2]]},"1135":{"position":[[10,2],[67,2]]},"1143":{"position":[[58,2]]},"1151":{"position":[[14,2]]},"1200":{"position":[[18,2],[75,2]]},"1223":{"position":[[271,2]]},"1225":{"position":[[41,2]]},"1234":{"position":[[378,2],[497,2]]},"1236":{"position":[[384,2],[506,2]]},"1238":{"position":[[464,2],[604,2]]},"1240":{"position":[[506,2],[667,2],[1038,2]]},"1246":{"position":[[92,2]]},"1257":{"position":[[377,2]]},"1265":{"position":[[92,2]]},"1271":{"position":[[9,2]]},"1277":{"position":[[185,2]]},"1289":{"position":[[0,2],[31,2]]},"1309":{"position":[[215,2],[420,2],[462,2],[563,2]]},"1317":{"position":[[317,2]]},"1383":{"position":[[103,2]]},"1416":{"position":[[68,2],[134,2]]},"1420":{"position":[[1029,2]]},"1440":{"position":[[725,2]]},"1507":{"position":[[81,2]]},"1509":{"position":[[61,2]]},"1511":{"position":[[82,2],[1688,2],[1809,2],[1872,2],[2391,2],[3069,2],[3509,2],[3549,2]]},"1518":{"position":[[4,2],[42,2]]},"1539":{"position":[[144,2],[216,2]]},"1555":{"position":[[557,2]]},"1570":{"position":[[56,2]]},"1576":{"position":[[226,2],[253,2]]},"1578":{"position":[[159,2]]},"1580":{"position":[[174,2],[307,2],[345,2],[362,2],[413,2],[448,2],[465,2],[490,2]]},"1592":{"position":[[124,2],[235,2],[283,2]]},"1594":{"position":[[132,2],[171,2],[296,2],[361,2],[383,2]]},"1596":{"position":[[236,2],[274,2]]},"1598":{"position":[[11,2],[31,2]]},"1600":{"position":[[27,2],[60,2]]},"1609":{"position":[[271,2],[318,2]]},"1611":{"position":[[59,2]]},"1615":{"position":[[352,2]]},"1617":{"position":[[0,2]]},"1619":{"position":[[26,2]]},"1623":{"position":[[126,2]]},"1631":{"position":[[343,2],[381,2]]},"1633":{"position":[[43,2]]},"1635":{"position":[[177,2]]},"1661":{"position":[[458,2]]},"1663":{"position":[[80,2]]},"1665":{"position":[[9,2]]},"1685":{"position":[[162,2]]},"1699":{"position":[[118,2],[144,2]]},"1703":{"position":[[472,2]]},"1711":{"position":[[19,2],[213,2],[962,2]]},"1751":{"position":[[18,2]]},"1775":{"position":[[141,2],[3839,2]]},"1781":{"position":[[479,2]]},"1795":{"position":[[467,2],[732,2],[749,2],[957,2],[977,2],[1279,2],[1307,2],[1693,2],[1723,2],[2336,2],[2450,2]]},"1799":{"position":[[1086,2]]},"1834":{"position":[[75,2]]},"1837":{"position":[[101,2],[114,2],[132,2],[145,2]]},"1839":{"position":[[57,2],[69,2],[90,2],[101,2],[112,2],[127,2],[138,2]]},"1857":{"position":[[55,2]]},"1867":{"position":[[732,2]]},"1871":{"position":[[105,2]]},"1887":{"position":[[452,2]]},"1896":{"position":[[59,2]]},"1903":{"position":[[208,2],[254,2]]},"1909":{"position":[[846,2]]},"1949":{"position":[[16,2]]},"1955":{"position":[[5,2]]},"1963":{"position":[[4,2]]},"2100":{"position":[[4,2]]},"2144":{"position":[[65,2]]},"2175":{"position":[[277,2],[287,2]]},"2255":{"position":[[53,2]]},"2264":{"position":[[119,2]]},"2266":{"position":[[239,2]]},"2272":{"position":[[349,2],[418,2]]},"2276":{"position":[[33,2]]},"2363":{"position":[[203,2]]},"2379":{"position":[[399,2]]},"2381":{"position":[[53,2]]},"2385":{"position":[[41,2]]},"2391":{"position":[[77,2]]},"2406":{"position":[[359,2]]},"2426":{"position":[[254,2]]},"2434":{"position":[[388,2]]},"2442":{"position":[[1755,2],[2075,2]]},"2444":{"position":[[12,2]]},"2517":{"position":[[7,2],[58,2],[119,2],[141,2]]},"2522":{"position":[[104,2]]},"2526":{"position":[[170,2]]},"2534":{"position":[[44,2]]},"2536":{"position":[[161,2]]},"2544":{"position":[[141,2]]},"2553":{"position":[[90,2]]},"2575":{"position":[[34,2]]},"2581":{"position":[[72,2]]},"2621":{"position":[[52,2]]},"2684":{"position":[[403,2]]},"2703":{"position":[[54,2]]},"2717":{"position":[[50,2],[162,2],[246,2]]},"2723":{"position":[[51,2]]},"2725":{"position":[[2,2],[83,2]]},"2733":{"position":[[18,2],[24,2],[37,2],[50,2],[60,2],[67,2]]},"2740":{"position":[[93,2],[100,2],[107,2],[114,2]]},"2788":{"position":[[156,2],[172,2]]},"2792":{"position":[[22,2],[146,2]]},"2794":{"position":[[29,2]]},"2796":{"position":[[123,2]]},"2815":{"position":[[16,2]]},"2823":{"position":[[76,2]]},"2836":{"position":[[15,2]]},"2875":{"position":[[93,2]]},"2885":{"position":[[28,2]]},"2895":{"position":[[34,2]]},"2917":{"position":[[147,2]]},"2919":{"position":[[165,2]]},"2921":{"position":[[9,2],[92,2]]},"2943":{"position":[[499,2]]},"2981":{"position":[[257,2],[423,2]]},"2985":{"position":[[237,2]]},"2991":{"position":[[464,2]]},"3023":{"position":[[455,2]]},"3031":{"position":[[90,2]]},"3033":{"position":[[74,2]]},"3047":{"position":[[76,2],[136,2],[180,2]]},"3063":{"position":[[1323,2]]},"3069":{"position":[[54,2],[105,2]]},"3126":{"position":[[21,2],[87,2]]},"3142":{"position":[[295,2]]},"3211":{"position":[[0,2],[41,2],[49,2],[56,2],[69,2],[106,2],[113,2],[129,2]]},"3224":{"position":[[232,2],[1774,2],[1856,2]]},"3287":{"position":[[101,2],[350,2],[385,2],[399,2],[739,2],[1044,2],[3071,2]]},"3305":{"position":[[43,2]]},"3315":{"position":[[45,2]]},"3319":{"position":[[28,2],[35,2]]},"3323":{"position":[[48,2],[201,2]]},"3367":{"position":[[21,2]]},"3373":{"position":[[655,2]]},"3379":{"position":[[180,2]]},"3389":{"position":[[650,2]]},"3403":{"position":[[8,2]]},"3432":{"position":[[72,2],[133,2],[997,2],[1170,2]]},"3434":{"position":[[39,2],[105,2],[228,2],[1017,2],[1330,2]]},"3436":{"position":[[150,2]]},"3444":{"position":[[41,2]]},"3446":{"position":[[219,2]]},"3448":{"position":[[267,2]]},"3450":{"position":[[33,2],[252,2]]},"3452":{"position":[[601,2]]},"3456":{"position":[[96,2],[374,2]]},"3508":{"position":[[165,2]]},"3510":{"position":[[190,2]]},"3512":{"position":[[125,2]]},"3514":{"position":[[99,2]]},"3516":{"position":[[100,2]]},"3518":{"position":[[107,2]]},"3522":{"position":[[148,2],[329,2],[493,2],[514,2],[671,2],[693,2],[1429,2]]},"3528":{"position":[[18,2]]},"3530":{"position":[[19,2]]},"3532":{"position":[[60,2]]},"3539":{"position":[[32,2],[41,2],[50,2]]},"3549":{"position":[[289,2]]},"3551":{"position":[[631,2]]},"3553":{"position":[[477,2]]},"3555":{"position":[[534,2]]},"3557":{"position":[[546,2]]},"3559":{"position":[[585,2]]},"3563":{"position":[[385,2],[1085,2],[1230,2]]},"3567":{"position":[[18,2],[56,2],[165,2]]},"3569":{"position":[[19,2]]},"3571":{"position":[[60,2]]},"3573":{"position":[[44,2]]},"3632":{"position":[[34,2]]},"3634":{"position":[[25,2]]},"3636":{"position":[[77,2],[87,2]]},"3672":{"position":[[53,2]]},"3678":{"position":[[21,2]]},"3686":{"position":[[495,2],[595,2]]},"3688":{"position":[[94,2]]},"3694":{"position":[[83,2]]},"3702":{"position":[[14,2]]},"3706":{"position":[[1334,2]]},"3727":{"position":[[42,2]]},"3729":{"position":[[0,2]]},"3736":{"position":[[100,2]]},"3738":{"position":[[218,2]]},"3742":{"position":[[4,2]]},"3746":{"position":[[250,2]]},"3754":{"position":[[19,2]]},"3766":{"position":[[8,2]]},"3770":{"position":[[1719,2]]},"3779":{"position":[[1254,2],[1296,2],[1700,2],[1879,2]]},"3781":{"position":[[266,2],[302,2],[344,2],[555,2],[646,2]]},"3783":{"position":[[1437,2],[1531,2],[1645,2],[1771,2],[1786,2]]},"3802":{"position":[[1872,2],[1914,2],[2471,2],[2656,2]]},"3806":{"position":[[1282,2],[1483,2]]},"3808":{"position":[[539,2]]},"3810":{"position":[[246,2],[297,2],[354,2],[391,2],[424,2]]},"3817":{"position":[[2468,2],[2510,2]]},"3819":{"position":[[448,2],[727,2],[1072,2]]},"3910":{"position":[[448,2],[498,2],[1567,2],[2462,2]]},"3912":{"position":[[80,2],[97,2],[1300,2]]},"3914":{"position":[[767,2],[892,2],[929,2],[1111,2],[2667,2],[2719,2],[3542,2]]},"3916":{"position":[[776,2],[1249,2],[2216,2],[2832,2],[3186,2],[3597,2],[7060,2],[8382,2]]},"3918":{"position":[[926,2],[1060,2],[1091,2],[1147,2],[1715,2],[1860,2],[2207,2],[3015,2],[3652,2],[3658,2],[3927,2]]},"3920":{"position":[[197,2],[239,2],[545,2],[621,2],[1818,2]]},"3922":{"position":[[14,2],[74,2],[117,2],[374,2],[399,2],[1696,2],[1731,2],[1766,2],[1813,2],[1911,2]]},"3924":{"position":[[41,2],[100,2],[353,2],[564,2],[624,2],[1450,2],[1475,2],[2045,2],[2145,2],[2761,2],[3209,2]]},"3926":{"position":[[402,2],[627,2]]},"3928":{"position":[[1092,2]]},"3930":{"position":[[351,2],[473,2],[747,2],[1222,2]]},"3932":{"position":[[21,2],[238,2],[267,2],[310,2],[358,2],[550,2],[653,2],[703,2],[776,2],[1447,2],[1510,2],[1575,2],[1589,2],[1960,2],[2108,2],[2204,2],[2432,2]]},"3934":{"position":[[801,2],[1504,2]]},"3936":{"position":[[19,2],[81,2],[306,2],[400,2],[497,2],[536,2],[642,2],[861,2],[995,2],[1323,2],[1543,2],[1550,2],[1815,2]]},"3938":{"position":[[121,2],[134,2],[177,2],[289,2],[390,2],[485,2],[492,2],[587,2],[719,2],[1247,2]]},"3940":{"position":[[57,2],[145,2],[190,2],[310,2],[894,2],[1047,2],[1069,2]]},"3942":{"position":[[71,2]]},"3944":{"position":[[43,2],[95,2],[127,2],[243,2],[267,2],[603,2],[750,2]]},"3946":{"position":[[47,2],[89,2]]},"3948":{"position":[[70,2],[291,2]]},"3950":{"position":[[52,2],[152,2],[179,2]]},"3954":{"position":[[123,2],[158,2],[190,2],[245,2],[283,2]]},"3956":{"position":[[14,2]]},"3960":{"position":[[17,2],[124,2],[242,2]]},"3962":{"position":[[88,2],[195,2],[397,2],[1564,2]]},"3964":{"position":[[106,2],[157,2],[207,2],[240,2],[286,2]]},"3966":{"position":[[34,2],[99,2],[161,2],[236,2],[601,2],[1055,2],[1810,2]]},"3968":{"position":[[14,2],[765,2]]},"3970":{"position":[[7,2]]},"3972":{"position":[[49,2],[121,2],[255,2],[503,2],[531,2]]},"3974":{"position":[[17,2],[86,2],[110,2],[131,2],[514,2]]},"3976":{"position":[[33,2],[75,2],[374,2],[477,2],[644,2]]},"3978":{"position":[[32,2],[88,2],[134,2],[168,2],[242,2],[266,2],[375,2],[1190,2]]},"3980":{"position":[[18,2],[64,2],[147,2],[461,2],[560,2]]},"3982":{"position":[[19,2],[69,2]]},"3984":{"position":[[17,2],[43,2],[149,2],[188,2],[693,2]]},"3986":{"position":[[410,2],[445,2],[589,2],[1822,2]]},"3988":{"position":[[72,2],[124,2],[236,2],[353,2]]},"3990":{"position":[[30,2],[86,2]]},"3992":{"position":[[131,2],[214,2],[280,2],[493,2],[559,2],[632,2],[661,2],[885,2],[1403,2],[2385,2],[3265,2],[3669,2],[3878,2]]},"3994":{"position":[[160,2],[183,2],[218,2],[316,2],[365,2],[395,2],[526,2],[1337,2],[1458,2],[1688,2]]},"3996":{"position":[[14,2],[187,2]]},"3998":{"position":[[53,2],[224,2],[286,2],[313,2],[332,2],[366,2],[671,2],[721,2]]},"4000":{"position":[[198,2],[382,2],[414,2],[967,2]]},"4004":{"position":[[526,2]]},"4006":{"position":[[78,2],[156,2]]}}}],["支持系统",{"_index":8126,"t":{"3432":{"position":[[1306,4]]}}}],["支撑",{"_index":6756,"t":{"2615":{"position":[[81,2]]}}}],["收到",{"_index":3939,"t":{"1073":{"position":[[48,2]]}}}],["收取",{"_index":1110,"t":{"146":{"position":[[387,2]]}}}],["收获",{"_index":1187,"t":{"166":{"position":[[31,2]]},"1511":{"position":[[3302,2]]},"3242":{"position":[[115,2],[209,2]]},"3910":{"position":[[112,2],[206,2]]},"3934":{"position":[[2221,2],[2375,2]]}}}],["收集",{"_index":2348,"t":{"384":{"position":[[48,2],[52,2]]},"1555":{"position":[[550,2]]},"1837":{"position":[[95,2]]},"1839":{"position":[[107,2]]}}}],["改",{"_index":3399,"t":{"706":{"position":[[58,1]]},"739":{"position":[[81,1]]},"741":{"position":[[19,1]]},"933":{"position":[[396,1]]},"1319":{"position":[[58,1]]},"3088":{"position":[[73,1]]},"3124":{"position":[[29,1],[43,1]]},"3213":{"position":[[58,1]]},"3273":{"position":[[807,1]]},"3352":{"position":[[379,1]]}}}],["改为",{"_index":2562,"t":{"445":{"position":[[44,2]]},"899":{"position":[[1503,2]]},"2848":{"position":[[1748,2]]},"3063":{"position":[[261,2]]},"3706":{"position":[[253,2]]},"3912":{"position":[[1700,2]]},"3914":{"position":[[1469,2],[1782,2]]},"3918":{"position":[[2918,2]]},"3922":{"position":[[576,2],[906,2]]},"3924":{"position":[[878,2],[1013,2],[1195,2]]},"3928":{"position":[[546,2]]},"3932":{"position":[[868,2],[996,2]]},"3954":{"position":[[782,2]]},"3962":{"position":[[580,2]]},"3964":{"position":[[428,2]]},"3982":{"position":[[640,2]]},"3994":{"position":[[563,2],[615,2]]}}}],["改动",{"_index":4308,"t":{"1424":{"position":[[120,2]]}}}],["改变",{"_index":1982,"t":{"300":{"position":[[268,2]]},"323":{"position":[[13,2]]},"717":{"position":[[4,2]]},"749":{"position":[[22,2],[207,2],[509,2],[873,2]]},"887":{"position":[[29,2]]},"919":{"position":[[94,2]]},"939":{"position":[[95,2]]},"1139":{"position":[[15,2]]},"1394":{"position":[[132,2]]},"1416":{"position":[[28,2]]},"1422":{"position":[[36,2]]},"1547":{"position":[[290,2]]},"1549":{"position":[[379,2]]},"1759":{"position":[[13,2]]},"2848":{"position":[[1583,2]]},"3126":{"position":[[104,2]]},"3282":{"position":[[259,2]]},"3345":{"position":[[70,2]]},"3620":{"position":[[381,2],[411,2]]},"3740":{"position":[[442,2]]},"3922":{"position":[[1494,2]]},"3962":{"position":[[1859,2]]}}}],["改名",{"_index":2377,"t":{"397":{"position":[[225,2]]}}}],["改善",{"_index":6772,"t":{"2629":{"position":[[117,2]]}}}],["改用",{"_index":7206,"t":{"2910":{"position":[[310,2]]}}}],["改进",{"_index":7972,"t":{"3352":{"position":[[480,2]]},"3702":{"position":[[1465,2],[1539,2]]},"3922":{"position":[[2303,2]]}}}],["改造",{"_index":6072,"t":{"2264":{"position":[[52,2]]},"2686":{"position":[[36,2]]},"2782":{"position":[[93,2]]},"3104":{"position":[[39,2]]}}}],["攻击",{"_index":8051,"t":{"3412":{"position":[[83,2]]}}}],["攻击者",{"_index":8052,"t":{"3412":{"position":[[86,3]]}}}],["放",{"_index":8044,"t":{"3401":{"position":[[195,1]]},"3680":{"position":[[231,1]]}}}],["放入",{"_index":2349,"t":{"384":{"position":[[79,2]]},"2625":{"position":[[382,2]]}}}],["放到",{"_index":133,"t":{"11":{"position":[[21,2]]},"148":{"position":[[37,2]]},"206":{"position":[[56,2]]},"1385":{"position":[[72,2]]},"2294":{"position":[[21,2]]}}}],["放在",{"_index":1151,"t":{"152":{"position":[[644,2]]},"220":{"position":[[22,2]]},"308":{"position":[[131,2]]},"310":{"position":[[129,2]]},"336":{"position":[[201,2]]},"429":{"position":[[20,2]]},"455":{"position":[[93,2]]},"822":{"position":[[31,2]]},"2333":{"position":[[11,2]]},"2542":{"position":[[146,2]]},"2625":{"position":[[543,2],[603,2]]},"2627":{"position":[[179,2]]},"2690":{"position":[[336,2]]},"2807":{"position":[[111,2]]},"2881":{"position":[[211,2],[848,2]]},"3672":{"position":[[337,2]]},"3966":{"position":[[1243,2]]},"3986":{"position":[[1169,2]]}}}],["放宽",{"_index":2453,"t":{"408":{"position":[[32,2],[56,2]]}}}],["放弃",{"_index":7734,"t":{"3242":{"position":[[89,2]]},"3910":{"position":[[86,2]]},"3934":{"position":[[2183,2]]}}}],["放心",{"_index":7953,"t":{"3352":{"position":[[220,2]]}}}],["放置",{"_index":94,"t":{"5":{"position":[[87,2]]},"7":{"position":[[83,2]]},"2290":{"position":[[83,2]]},"2524":{"position":[[38,2]]}}}],["放行",{"_index":904,"t":{"121":{"position":[[414,2]]},"417":{"position":[[63,2]]},"2995":{"position":[[40,2]]}}}],["放进去",{"_index":158,"t":{"11":{"position":[[669,3]]},"2294":{"position":[[698,3]]},"2651":{"position":[[24,3]]}}}],["故",{"_index":3288,"t":{"659":{"position":[[77,1]]},"728":{"position":[[55,1]]},"1010":{"position":[[76,1]]},"2768":{"position":[[41,1]]}}}],["故事",{"_index":461,"t":{"85":{"position":[[0,2]]}}}],["故意",{"_index":7842,"t":{"3287":{"position":[[261,2],[586,2]]}}}],["故障",{"_index":3911,"t":{"1050":{"position":[[55,2]]},"2809":{"position":[[133,2]]},"2915":{"position":[[98,2]]},"2917":{"position":[[166,2]]}}}],["效果",{"_index":445,"t":{"55":{"position":[[7,2]]},"66":{"position":[[7,2]]},"79":{"position":[[7,2]]},"336":{"position":[[357,2]]},"1420":{"position":[[47,2]]},"1753":{"position":[[254,2],[271,2]]},"1981":{"position":[[7,2]]},"1993":{"position":[[7,2]]},"2016":{"position":[[7,2]]},"2870":{"position":[[7,2]]},"2872":{"position":[[132,2]]},"3395":{"position":[[46,2]]},"3688":{"position":[[708,2]]},"3934":{"position":[[1344,2]]}}}],["效率",{"_index":104,"t":{"5":{"position":[[145,2]]},"7":{"position":[[141,2]]},"302":{"position":[[157,2]]},"1103":{"position":[[158,2],[238,2]]},"1221":{"position":[[55,2]]},"1777":{"position":[[80,2]]},"2290":{"position":[[141,2]]},"2341":{"position":[[181,2]]},"2684":{"position":[[369,2]]},"3094":{"position":[[179,2]]},"3301":{"position":[[40,2]]}}}],["效率高",{"_index":1664,"t":{"229":{"position":[[20,3]]}}}],["效益",{"_index":5451,"t":{"1761":{"position":[[357,2]]}}}],["敏感",{"_index":6218,"t":{"2352":{"position":[[171,2]]},"2782":{"position":[[17,2],[37,2]]},"3416":{"position":[[96,2]]},"3930":{"position":[[1347,2]]},"3944":{"position":[[319,2]]},"3966":{"position":[[242,2]]}}}],["敏感数据",{"_index":7035,"t":{"2782":{"position":[[65,4]]}}}],["教",{"_index":4986,"t":{"1545":{"position":[[67,1]]}}}],["教学",{"_index":4682,"t":{"1511":{"position":[[1288,2]]}}}],["教程",{"_index":1999,"t":{"304":{"position":[[29,2]]},"1511":{"position":[[2197,2]]},"2317":{"position":[[36,2]]},"3307":{"position":[[75,2],[96,2]]}}}],["散客",{"_index":4635,"t":{"1511":{"position":[[744,2]]}}}],["散落",{"_index":2131,"t":{"325":{"position":[[50,2]]},"2538":{"position":[[103,2]]}}}],["敬业",{"_index":4729,"t":{"1511":{"position":[[1865,2]]}}}],["敬佩",{"_index":4741,"t":{"1511":{"position":[[1995,2],[3448,2]]}}}],["敬意",{"_index":4621,"t":{"1511":{"position":[[618,2]]}}}],["敬请期待",{"_index":9043,"t":{"3910":{"position":[[358,4]]}}}],["数",{"_index":2749,"t":{"494":{"position":[[614,1]]},"3098":{"position":[[24,1]]},"3215":{"position":[[182,1]]},"3273":{"position":[[799,1]]},"3375":{"position":[[87,1]]},"3381":{"position":[[233,1]]},"3389":{"position":[[1302,1]]},"3391":{"position":[[757,1]]},"3393":{"position":[[1175,1]]},"3800":{"position":[[194,1],[251,1]]},"3918":{"position":[[1068,1]]},"3924":{"position":[[3451,1]]}}}],["数值",{"_index":1570,"t":{"212":{"position":[[104,2]]},"606":{"position":[[34,2],[595,2],[932,2]]},"617":{"position":[[1618,2],[2639,2]]},"801":{"position":[[26,2]]},"3057":{"position":[[98,2]]},"3106":{"position":[[54,2]]},"3962":{"position":[[1373,2]]},"3986":{"position":[[435,2]]}}}],["数字",{"_index":2560,"t":{"443":{"position":[[60,2]]},"615":{"position":[[425,2]]},"1416":{"position":[[398,2]]},"2333":{"position":[[112,2],[226,2]]},"2418":{"position":[[552,2]]},"3063":{"position":[[1516,2]]},"3698":{"position":[[271,2]]},"3706":{"position":[[1527,2]]},"3992":{"position":[[2240,2]]}}}],["数字签名",{"_index":5294,"t":{"1691":{"position":[[382,4]]}}}],["数据",{"_index":614,"t":{"98":{"position":[[167,2]]},"121":{"position":[[604,2],[618,2],[636,2]]},"184":{"position":[[76,2]]},"225":{"position":[[47,2],[73,2],[110,2]]},"227":{"position":[[81,2]]},"239":{"position":[[128,2],[153,2]]},"245":{"position":[[182,2]]},"249":{"position":[[10,2],[17,2]]},"255":{"position":[[87,2],[113,2],[236,2]]},"300":{"position":[[167,2]]},"340":{"position":[[1918,2]]},"365":{"position":[[50,2]]},"441":{"position":[[34,2],[64,2]]},"463":{"position":[[71,2]]},"504":{"position":[[227,2]]},"532":{"position":[[142,2]]},"565":{"position":[[133,2],[158,2],[203,2]]},"570":{"position":[[1630,2]]},"579":{"position":[[0,2],[21,2],[43,2]]},"581":{"position":[[5,2],[51,2]]},"585":{"position":[[434,2]]},"587":{"position":[[48,2],[61,2]]},"606":{"position":[[17,2]]},"621":{"position":[[32,2]]},"706":{"position":[[16,2]]},"739":{"position":[[54,2]]},"743":{"position":[[20,2]]},"747":{"position":[[582,2],[622,2]]},"749":{"position":[[20,2],[205,2],[507,2],[871,2]]},"756":{"position":[[17,2],[31,2],[43,2]]},"801":{"position":[[20,2]]},"841":{"position":[[46,2],[59,2],[81,2]]},"877":{"position":[[1158,2]]},"885":{"position":[[64,2]]},"887":{"position":[[27,2],[35,2]]},"949":{"position":[[59,2],[632,2]]},"986":{"position":[[5,2],[136,2]]},"1046":{"position":[[22,2],[51,2]]},"1139":{"position":[[12,2],[20,2]]},"1141":{"position":[[15,2],[39,2],[47,2],[75,2]]},"1143":{"position":[[55,2],[95,2]]},"1145":{"position":[[268,2]]},"1147":{"position":[[159,2]]},"1149":{"position":[[38,2]]},"1151":{"position":[[23,2],[237,2],[517,2]]},"1153":{"position":[[35,2],[56,2]]},"1319":{"position":[[16,2]]},"1566":{"position":[[161,2],[174,2],[205,2],[211,2],[240,2],[335,2],[347,2],[373,2],[510,2]]},"1672":{"position":[[13,2],[35,2],[90,2]]},"1797":{"position":[[402,2]]},"1807":{"position":[[77,2]]},"1823":{"position":[[23,2]]},"1832":{"position":[[131,2]]},"1839":{"position":[[149,2]]},"1855":{"position":[[282,2]]},"1857":{"position":[[49,2]]},"1863":{"position":[[249,2]]},"1865":{"position":[[175,2],[392,2]]},"1939":{"position":[[18,2]]},"1941":{"position":[[632,2],[693,2],[784,2]]},"2303":{"position":[[58,2],[93,2]]},"2311":{"position":[[309,2]]},"2313":{"position":[[645,2]]},"2315":{"position":[[33,2]]},"2326":{"position":[[105,2]]},"2341":{"position":[[115,2],[208,2]]},"2383":{"position":[[24,2]]},"2599":{"position":[[55,2]]},"2619":{"position":[[93,2]]},"2682":{"position":[[13,2]]},"2701":{"position":[[39,2]]},"2717":{"position":[[64,2]]},"2782":{"position":[[8,2],[29,2],[41,2],[56,2],[89,2],[129,2],[174,2]]},"2790":{"position":[[2,2]]},"2796":{"position":[[310,2]]},"2843":{"position":[[60,2],[80,2],[107,2]]},"2852":{"position":[[42,2],[60,2]]},"2856":{"position":[[23,2],[50,2]]},"2910":{"position":[[398,2]]},"2912":{"position":[[83,2],[172,2],[208,2]]},"2915":{"position":[[26,2],[103,2],[160,2],[205,2]]},"2917":{"position":[[128,2],[194,2]]},"2919":{"position":[[94,2],[127,2]]},"2929":{"position":[[803,2]]},"2937":{"position":[[46,2],[71,2]]},"2945":{"position":[[915,2]]},"2959":{"position":[[858,2]]},"2965":{"position":[[19,2]]},"3053":{"position":[[19,2]]},"3088":{"position":[[67,2],[180,2]]},"3096":{"position":[[38,2],[152,2]]},"3102":{"position":[[8,2],[23,2],[41,2]]},"3104":{"position":[[8,2],[89,2]]},"3106":{"position":[[29,2]]},"3108":{"position":[[67,2],[114,2],[204,2]]},"3110":{"position":[[131,2],[189,2],[222,2]]},"3112":{"position":[[45,2]]},"3118":{"position":[[27,2],[111,2],[174,2],[297,2],[328,2],[353,2],[363,2]]},"3120":{"position":[[122,2]]},"3124":{"position":[[52,2],[66,2],[83,2]]},"3209":{"position":[[121,2]]},"3246":{"position":[[84,2]]},"3282":{"position":[[256,2]]},"3284":{"position":[[29,2]]},"3373":{"position":[[63,2]]},"3414":{"position":[[179,2],[238,2],[287,2]]},"3416":{"position":[[101,2],[391,2]]},"3450":{"position":[[63,2],[232,2]]},"3466":{"position":[[47,2],[1348,2],[1484,2],[1582,2]]},"3476":{"position":[[5,2],[28,2]]},"3500":{"position":[[796,2]]},"3614":{"position":[[13,2],[54,2]]},"3620":{"position":[[147,2],[290,2]]},"3622":{"position":[[138,2]]},"3624":{"position":[[6,2],[37,2],[58,2],[63,2]]},"3708":{"position":[[216,2],[429,2]]},"3712":{"position":[[28,2]]},"3716":{"position":[[725,2]]},"3729":{"position":[[34,2]]},"3740":{"position":[[438,2],[477,2],[733,2]]},"3744":{"position":[[459,2]]},"3777":{"position":[[356,2]]},"3779":{"position":[[133,2]]},"3781":{"position":[[519,2],[643,2]]},"3783":{"position":[[21,2],[35,2],[1239,2],[1252,2],[1308,2],[1373,2],[1434,2],[1528,2],[1642,2],[1731,2],[1778,2]]},"3802":{"position":[[130,2]]},"3817":{"position":[[139,2]]},"3914":{"position":[[1601,2]]},"3918":{"position":[[3882,2]]},"3920":{"position":[[245,2]]},"3922":{"position":[[1302,2],[1395,2],[1735,2],[2400,2]]},"3928":{"position":[[700,2]]},"3936":{"position":[[974,2]]},"3950":{"position":[[858,2]]},"3960":{"position":[[54,2]]},"3962":{"position":[[1846,2]]},"3966":{"position":[[1433,2],[1891,2]]},"3968":{"position":[[126,2]]},"3970":{"position":[[250,2]]},"3972":{"position":[[604,2]]},"3976":{"position":[[490,2]]},"3978":{"position":[[1366,2]]},"3980":{"position":[[334,2]]},"3984":{"position":[[385,2]]},"3986":{"position":[[1723,2]]},"3990":{"position":[[767,2]]},"3992":{"position":[[2233,2],[2264,2],[2743,2]]},"3994":{"position":[[655,2],[1270,2]]},"3996":{"position":[[1497,2]]},"3998":{"position":[[70,2],[300,2],[431,2],[755,2]]},"4004":{"position":[[400,2]]},"4006":{"position":[[716,2]]}}}],["数据交换",{"_index":6194,"t":{"2341":{"position":[[50,4],[141,4]]}}}],["数据传输",{"_index":8252,"t":{"3476":{"position":[[84,4]]},"3478":{"position":[[16,4]]}}}],["数据共享",{"_index":7106,"t":{"2843":{"position":[[275,4]]}}}],["数据分析",{"_index":8055,"t":{"3414":{"position":[[70,4],[232,4]]}}}],["数据处理",{"_index":7381,"t":{"3088":{"position":[[145,4]]}}}],["数据备份",{"_index":3932,"t":{"1068":{"position":[[8,4]]},"2919":{"position":[[212,4]]}}}],["数据字",{"_index":7250,"t":{"2919":{"position":[[63,3]]}}}],["数据安全",{"_index":7040,"t":{"2782":{"position":[[134,4]]}}}],["数据库",{"_index":616,"t":{"98":{"position":[[172,3]]},"102":{"position":[[74,3],[168,3]]},"110":{"position":[[26,3],[68,3],[90,3]]},"112":{"position":[[1559,3]]},"119":{"position":[[36,3],[133,3],[166,3]]},"182":{"position":[[96,3]]},"220":{"position":[[271,3]]},"247":{"position":[[72,3],[227,3]]},"255":{"position":[[225,3]]},"451":{"position":[[33,3]]},"461":{"position":[[66,3]]},"500":{"position":[[5,3],[15,3],[29,3],[95,3]]},"502":{"position":[[43,3],[134,3]]},"504":{"position":[[62,3]]},"506":{"position":[[68,3],[122,3],[208,3]]},"510":{"position":[[444,3],[500,3],[516,3],[559,3]]},"512":{"position":[[13,3],[30,3]]},"514":{"position":[[310,3],[321,3],[374,3],[471,3],[477,3],[484,3]]},"516":{"position":[[428,3],[480,3],[539,3],[545,3],[566,3],[592,3],[619,3],[653,3],[696,3],[719,3]]},"518":{"position":[[479,3],[542,3],[600,3],[615,3]]},"522":{"position":[[18,3],[63,3]]},"524":{"position":[[0,3],[9,3],[24,3],[34,3],[496,3],[515,3],[589,3],[690,3],[789,3]]},"526":{"position":[[19,3]]},"528":{"position":[[13,3],[169,3],[226,3],[282,3],[405,3]]},"530":{"position":[[566,3],[767,3],[782,3]]},"534":{"position":[[19,3],[108,3]]},"536":{"position":[[35,3]]},"565":{"position":[[26,3],[82,3]]},"567":{"position":[[402,3]]},"570":{"position":[[1413,3],[2065,3],[2674,3]]},"572":{"position":[[39,3],[1227,3]]},"643":{"position":[[20,3]]},"651":{"position":[[399,3]]},"655":{"position":[[7,3],[491,3]]},"677":{"position":[[24,3],[63,3],[134,3],[140,3],[160,3],[203,3]]},"679":{"position":[[36,3],[50,3],[99,3],[109,3],[119,3],[125,3],[151,3]]},"685":{"position":[[256,3],[315,3],[328,3],[569,3],[589,3]]},"688":{"position":[[51,3],[78,3]]},"690":{"position":[[15,3]]},"696":{"position":[[555,3]]},"698":{"position":[[75,3],[130,3],[148,3],[200,3],[231,3],[265,3],[384,3],[437,3],[929,3],[1069,3]]},"704":{"position":[[24,3],[63,3],[134,3],[140,3],[160,3],[203,3]]},"706":{"position":[[233,3],[266,3]]},"708":{"position":[[517,3]]},"713":{"position":[[36,3]]},"715":{"position":[[23,3],[80,3],[116,3]]},"719":{"position":[[13,3]]},"728":{"position":[[21,3],[35,3]]},"732":{"position":[[282,3]]},"736":{"position":[[58,3]]},"741":{"position":[[2,3]]},"743":{"position":[[36,3]]},"747":{"position":[[661,3],[711,3]]},"761":{"position":[[200,3]]},"773":{"position":[[5,3],[25,3]]},"789":{"position":[[220,3]]},"801":{"position":[[8,3],[40,3],[55,3]]},"807":{"position":[[4,3],[9,3]]},"810":{"position":[[406,3]]},"812":{"position":[[438,3]]},"814":{"position":[[402,3]]},"816":{"position":[[434,3]]},"897":{"position":[[507,3]]},"899":{"position":[[153,3],[236,3],[1243,3],[1326,3]]},"903":{"position":[[13,3],[26,3],[43,3],[51,3],[78,3]]},"911":{"position":[[7,3],[82,3],[204,3]]},"915":{"position":[[24,3],[446,3]]},"924":{"position":[[13,3],[33,3],[103,3],[133,3],[173,3],[181,3]]},"927":{"position":[[247,3],[460,3],[764,3],[922,3],[1167,3],[1382,3],[1622,3],[1782,3],[1963,3],[2123,3]]},"931":{"position":[[217,3],[395,3],[664,3],[811,3],[1048,3],[1172,3]]},"933":{"position":[[388,3]]},"935":{"position":[[14,3]]},"939":{"position":[[6,3],[17,3],[50,3],[68,3],[80,3],[99,3]]},"941":{"position":[[3,3],[87,3],[117,3],[137,3],[218,3]]},"943":{"position":[[13,3],[50,3]]},"945":{"position":[[2,3],[77,3],[87,3],[112,3],[121,3]]},"947":{"position":[[43,3],[57,3],[103,3],[453,3],[462,3],[513,3],[524,3]]},"949":{"position":[[2,3],[190,3],[327,3]]},"981":{"position":[[0,3]]},"986":{"position":[[45,3],[151,3]]},"988":{"position":[[14,3],[428,3]]},"992":{"position":[[23,3],[61,3]]},"994":{"position":[[42,3],[100,3]]},"996":{"position":[[17,3],[48,3]]},"998":{"position":[[36,3],[87,3]]},"1000":{"position":[[31,3],[92,3]]},"1002":{"position":[[31,3],[92,3]]},"1004":{"position":[[33,3],[100,3]]},"1006":{"position":[[33,3],[100,3]]},"1008":{"position":[[32,3],[98,3]]},"1010":{"position":[[115,3],[181,3]]},"1012":{"position":[[23,3],[82,3]]},"1014":{"position":[[27,3],[91,3]]},"1018":{"position":[[38,3]]},"1035":{"position":[[27,3],[40,3],[52,3]]},"1037":{"position":[[4,3],[313,3],[338,3],[870,3]]},"1039":{"position":[[566,3],[768,3],[783,3]]},"1041":{"position":[[1126,3],[1353,3]]},"1046":{"position":[[5,3],[63,3]]},"1048":{"position":[[20,3],[30,3],[53,3],[72,3],[119,3]]},"1050":{"position":[[0,3]]},"1052":{"position":[[8,3],[43,3]]},"1054":{"position":[[128,3],[344,3]]},"1056":{"position":[[147,3],[387,3],[396,3],[405,3],[417,3],[424,3],[460,3],[546,3],[632,3]]},"1060":{"position":[[12,3]]},"1062":{"position":[[4,3],[101,3]]},"1068":{"position":[[35,3],[42,3],[48,3],[56,3],[62,3],[68,3],[81,3],[90,3]]},"1073":{"position":[[28,3]]},"1103":{"position":[[65,3],[122,3],[178,3]]},"1111":{"position":[[438,3]]},"1113":{"position":[[436,3]]},"1115":{"position":[[445,3]]},"1117":{"position":[[4683,3]]},"1119":{"position":[[407,3]]},"1121":{"position":[[439,3]]},"1123":{"position":[[370,3]]},"1129":{"position":[[1761,3]]},"1141":{"position":[[27,3],[80,3]]},"1151":{"position":[[18,3]]},"1155":{"position":[[83,3],[107,3]]},"1200":{"position":[[230,3]]},"1202":{"position":[[17,3],[30,3],[45,3]]},"1204":{"position":[[237,3]]},"1212":{"position":[[62,3]]},"1234":{"position":[[500,3],[934,3],[947,3]]},"1236":{"position":[[509,3]]},"1238":{"position":[[607,3]]},"1240":{"position":[[670,3]]},"1271":{"position":[[15,3]]},"1275":{"position":[[48,3]]},"1277":{"position":[[48,3],[56,3],[189,3]]},"1286":{"position":[[9,3]]},"1309":{"position":[[17,3],[124,3],[158,3],[671,3]]},"1311":{"position":[[334,3],[394,3],[453,3],[531,3]]},"1313":{"position":[[17,3]]},"1317":{"position":[[310,3],[321,3],[374,3],[424,3],[430,3],[437,3],[526,3],[529,3],[543,3],[559,3]]},"1319":{"position":[[234,3],[267,3]]},"1351":{"position":[[399,3]]},"1358":{"position":[[3,3]]},"1412":{"position":[[55,3]]},"1418":{"position":[[245,3]]},"1434":{"position":[[92,3]]},"1566":{"position":[[28,3],[229,3],[487,3]]},"1711":{"position":[[800,3],[815,3]]},"1743":{"position":[[24,3]]},"1745":{"position":[[17,3],[55,3]]},"1761":{"position":[[35,3],[66,3],[78,3],[281,3],[535,3],[547,3],[554,3]]},"1773":{"position":[[286,3]]},"1775":{"position":[[18,3],[134,3],[3842,3]]},"1777":{"position":[[19,3]]},"1779":{"position":[[355,3]]},"1781":{"position":[[423,3]]},"1799":{"position":[[98,3]]},"1923":{"position":[[121,3]]},"2182":{"position":[[222,3],[237,3]]},"2361":{"position":[[347,3]]},"2436":{"position":[[19,3]]},"2474":{"position":[[14,3]]},"2476":{"position":[[111,3]]},"2478":{"position":[[221,3],[447,3],[462,3]]},"2599":{"position":[[21,3]]},"2674":{"position":[[338,3]]},"2782":{"position":[[155,3],[161,3],[167,3]]},"2796":{"position":[[318,3]]},"2821":{"position":[[486,3]]},"2831":{"position":[[560,3]]},"2843":{"position":[[244,3]]},"2915":{"position":[[15,3],[63,3],[118,3]]},"2917":{"position":[[85,3],[143,3],[182,3]]},"2919":{"position":[[162,3]]},"2921":{"position":[[64,3]]},"2925":{"position":[[450,3],[491,3]]},"2933":{"position":[[7,3]]},"2939":{"position":[[30,3]]},"2941":{"position":[[450,3],[491,3]]},"2943":{"position":[[444,3]]},"2949":{"position":[[7,3]]},"2951":{"position":[[7,3]]},"2953":{"position":[[27,3]]},"2955":{"position":[[450,3],[491,3]]},"2963":{"position":[[7,3]]},"2981":{"position":[[355,3]]},"3088":{"position":[[0,3],[133,3],[167,3]]},"3092":{"position":[[23,3],[82,3],[107,3],[161,3],[174,3]]},"3094":{"position":[[47,3]]},"3096":{"position":[[79,3]]},"3100":{"position":[[43,3]]},"3108":{"position":[[175,3]]},"3118":{"position":[[162,3]]},"3122":{"position":[[55,3]]},"3126":{"position":[[31,3],[95,3],[106,3],[137,3],[154,3],[226,3],[259,3],[270,3]]},"3211":{"position":[[131,3],[186,3]]},"3215":{"position":[[183,3]]},"3254":{"position":[[370,3],[745,3]]},"3282":{"position":[[166,3],[252,3]]},"3287":{"position":[[108,3],[141,3],[195,3],[250,3],[392,3],[466,3],[520,3],[575,3]]},"3289":{"position":[[171,3]]},"3291":{"position":[[1737,3]]},"3321":{"position":[[292,3]]},"3434":{"position":[[6,3],[52,3],[67,3],[383,3],[686,3],[2727,3]]},"3452":{"position":[[1012,3],[1493,3]]},"3458":{"position":[[196,3],[317,3],[437,3],[568,3],[708,3],[828,3],[898,3],[919,3]]},"3470":{"position":[[27,3],[96,3]]},"3622":{"position":[[162,3]]},"3654":{"position":[[53,3]]},"3910":{"position":[[1844,3]]},"3912":{"position":[[769,3],[2616,3]]},"3914":{"position":[[3577,3]]},"3916":{"position":[[957,3],[3068,3],[4008,3],[4489,3]]},"3918":{"position":[[3443,3],[4222,3]]},"3920":{"position":[[1974,3]]},"3922":{"position":[[1315,3],[1428,3],[1647,3],[1663,3],[2081,3]]},"3924":{"position":[[1214,3],[1354,3]]},"3928":{"position":[[404,3],[488,3],[792,3]]},"3930":{"position":[[1500,3]]},"3932":{"position":[[1152,3],[1273,3]]},"3934":{"position":[[641,3]]},"3936":{"position":[[342,3],[636,3]]},"3940":{"position":[[409,3]]},"3952":{"position":[[767,3]]},"3954":{"position":[[192,3],[560,3],[566,3],[706,3]]},"3960":{"position":[[24,3],[232,3]]},"3962":{"position":[[208,3],[1396,3],[1461,3],[1724,3],[1841,3],[2002,3],[2071,3]]},"3964":{"position":[[1100,3]]},"3966":{"position":[[754,3],[1882,3]]},"3968":{"position":[[168,3],[202,3],[418,3],[485,3],[506,3]]},"3970":{"position":[[388,3]]},"3972":{"position":[[300,3],[323,3],[635,3]]},"3974":{"position":[[363,3],[814,3]]},"3976":{"position":[[232,3],[399,3]]},"3978":{"position":[[557,3],[763,3],[1349,3]]},"3980":{"position":[[41,3],[321,3],[393,3],[502,3],[543,3],[579,3],[647,3],[824,3]]},"3982":{"position":[[219,3],[237,3],[249,3],[269,3],[664,3]]},"3984":{"position":[[605,3],[849,3]]},"3986":{"position":[[922,3],[1069,3],[1102,3],[1207,3],[1400,3]]},"3988":{"position":[[13,3]]},"3990":{"position":[[27,3],[56,3],[471,3],[651,3]]},"3992":{"position":[[1484,3],[1675,3],[1938,3],[2471,3],[2935,3],[2943,3],[3058,3],[3444,3],[3482,3],[3695,3],[3738,3]]},"3994":{"position":[[176,3],[379,3],[808,3],[1588,3],[1656,3],[1709,3]]},"3996":{"position":[[177,3],[431,3],[468,3],[497,3],[536,3],[831,3],[1523,3],[1531,3]]},"3998":{"position":[[47,3],[203,3],[246,3],[386,3],[608,3],[693,3],[784,3]]},"4000":{"position":[[29,3],[261,3],[487,3],[1163,3],[1223,3]]},"4002":{"position":[[389,3],[399,3]]},"4004":{"position":[[348,3],[440,3],[577,3],[585,3]]},"4006":{"position":[[230,3],[334,3],[418,3],[751,3]]}}}],["数据库安全",{"_index":7042,"t":{"2782":{"position":[[143,5],[179,5]]}}}],["数据库系统",{"_index":3949,"t":{"1103":{"position":[[34,5]]}}}],["数据恢复",{"_index":7244,"t":{"2917":{"position":[[169,4]]}}}],["数据格式",{"_index":6202,"t":{"2341":{"position":[[198,4]]},"3622":{"position":[[71,4]]}}}],["数据模型",{"_index":7226,"t":{"2915":{"position":[[72,4]]}}}],["数据源",{"_index":1649,"t":{"225":{"position":[[68,3]]},"3962":{"position":[[1780,3]]},"3966":{"position":[[1705,3]]}}}],["数据类型",{"_index":8819,"t":{"3783":{"position":[[1767,4]]},"3978":{"position":[[1514,4]]}}}],["数据结构",{"_index":6145,"t":{"2326":{"position":[[96,4]]},"2495":{"position":[[23,4]]}}}],["数据表",{"_index":7248,"t":{"2919":{"position":[[2,3]]},"3088":{"position":[[171,3]]}}}],["数据量",{"_index":3952,"t":{"1103":{"position":[[135,3]]},"3088":{"position":[[5,3],[53,3],[141,3]]},"3098":{"position":[[20,3]]}}}],["数最多",{"_index":6205,"t":{"2343":{"position":[[108,3]]}}}],["数组",{"_index":1034,"t":{"127":{"position":[[1757,2]]},"243":{"position":[[77,2],[123,2]]},"274":{"position":[[146,2]]},"278":{"position":[[199,2],[263,2]]},"282":{"position":[[133,2]]},"284":{"position":[[75,2]]},"417":{"position":[[253,2]]},"439":{"position":[[54,2]]},"443":{"position":[[10,2]]},"698":{"position":[[135,2]]},"1135":{"position":[[32,2]]},"1200":{"position":[[40,2]]},"1234":{"position":[[914,2]]},"1420":{"position":[[516,2]]},"1631":{"position":[[632,2]]},"1661":{"position":[[904,2]]},"1739":{"position":[[346,2]]},"1745":{"position":[[40,2],[240,2],[315,2]]},"1869":{"position":[[246,2],[251,2],[258,2]]},"3001":{"position":[[77,2]]},"3023":{"position":[[901,2]]},"3224":{"position":[[1324,2]]},"3520":{"position":[[115,2]]},"3783":{"position":[[1818,2]]},"3806":{"position":[[1394,2]]},"3914":{"position":[[3092,2]]},"3918":{"position":[[3227,2]]},"3930":{"position":[[885,2]]},"3952":{"position":[[627,2]]},"3964":{"position":[[1104,2]]},"3992":{"position":[[1751,2]]},"3996":{"position":[[1728,2]]}}}],["数量",{"_index":7230,"t":{"2915":{"position":[[124,2]]},"2917":{"position":[[154,2]]},"2919":{"position":[[170,2]]},"3432":{"position":[[692,2]]},"3934":{"position":[[669,2]]}}}],["整",{"_index":7418,"t":{"3108":{"position":[[54,1]]}}}],["整个",{"_index":936,"t":{"121":{"position":[[728,2]]},"129":{"position":[[621,2]]},"282":{"position":[[216,2]]},"445":{"position":[[855,2]]},"1394":{"position":[[117,2]]},"3110":{"position":[[103,2]]},"3389":{"position":[[103,2]]},"3416":{"position":[[343,2]]}}}],["整数",{"_index":3135,"t":{"606":{"position":[[87,2],[654,2],[938,2]]},"2418":{"position":[[257,2],[291,2],[324,2],[362,2],[417,2],[463,2]]},"3640":{"position":[[18,2],[417,2],[425,2],[452,2],[466,2],[727,2]]}}}],["整点",{"_index":9677,"t":{"3954":{"position":[[619,2]]}}}],["整理",{"_index":7589,"t":{"3199":{"position":[[0,2]]},"3201":{"position":[[0,2]]},"3203":{"position":[[0,2]]},"3612":{"position":[[93,2]]}}}],["整行",{"_index":5017,"t":{"1555":{"position":[[251,2],[467,2]]}}}],["文",{"_index":4688,"t":{"1511":{"position":[[1350,1]]},"2357":{"position":[[3,1]]}}}],["文件",{"_index":92,"t":{"5":{"position":[[73,2],[122,2]]},"7":{"position":[[69,2],[118,2]]},"9":{"position":[[67,2],[121,2]]},"13":{"position":[[79,2],[83,2]]},"15":{"position":[[0,2],[118,2]]},"17":{"position":[[112,2]]},"19":{"position":[[712,2]]},"102":{"position":[[237,2]]},"220":{"position":[[184,2],[873,2]]},"302":{"position":[[40,2],[46,2]]},"308":{"position":[[66,2],[129,2],[487,2]]},"310":{"position":[[68,2],[127,2],[302,2]]},"314":{"position":[[46,2]]},"316":{"position":[[48,2]]},"319":{"position":[[592,2],[600,2],[611,2]]},"323":{"position":[[40,2],[113,2],[122,2],[131,2],[171,2]]},"336":{"position":[[76,2]]},"390":{"position":[[7,2]]},"427":{"position":[[78,2],[134,2],[186,2]]},"433":{"position":[[156,2]]},"445":{"position":[[34,2],[775,2],[803,2],[903,2]]},"498":{"position":[[34,2]]},"675":{"position":[[96,2]]},"688":{"position":[[69,2]]},"696":{"position":[[950,2]]},"706":{"position":[[209,2]]},"713":{"position":[[775,2]]},"730":{"position":[[18,2]]},"893":{"position":[[34,2]]},"1313":{"position":[[140,2],[265,2]]},"1319":{"position":[[210,2]]},"1372":{"position":[[4,2],[17,2]]},"1377":{"position":[[229,2],[257,2]]},"1444":{"position":[[4,2],[17,2]]},"1472":{"position":[[6,2],[41,2]]},"1488":{"position":[[516,2],[575,2]]},"1495":{"position":[[518,2]]},"1532":{"position":[[46,2]]},"1541":{"position":[[132,2]]},"1549":{"position":[[81,2],[155,2],[213,2]]},"1551":{"position":[[99,2],[190,2]]},"1717":{"position":[[68,2],[88,2],[95,2],[107,2],[114,2]]},"1719":{"position":[[50,2],[78,2]]},"1729":{"position":[[71,2],[208,2]]},"1733":{"position":[[51,2]]},"1737":{"position":[[7,2],[30,2]]},"1739":{"position":[[0,2],[92,2]]},"1741":{"position":[[59,2],[348,2],[497,2],[849,2],[1229,2],[1615,2],[1683,2],[1719,2],[2051,2],[2470,2],[2510,2]]},"1743":{"position":[[8,2]]},"1745":{"position":[[9,2],[50,2],[381,2]]},"1755":{"position":[[71,2],[343,2],[790,2]]},"2100":{"position":[[7,2]]},"2290":{"position":[[69,2],[118,2]]},"2292":{"position":[[67,2],[121,2]]},"2296":{"position":[[79,2],[83,2]]},"2379":{"position":[[608,2]]},"2497":{"position":[[199,2]]},"2499":{"position":[[52,2],[58,2]]},"2501":{"position":[[20,2]]},"2503":{"position":[[119,2]]},"2508":{"position":[[46,2]]},"2510":{"position":[[103,2]]},"2512":{"position":[[138,2]]},"2540":{"position":[[25,2],[75,2]]},"2542":{"position":[[33,2],[41,2]]},"2553":{"position":[[189,2],[229,2]]},"2555":{"position":[[69,2]]},"2599":{"position":[[16,2]]},"2619":{"position":[[84,2]]},"2625":{"position":[[393,2]]},"2627":{"position":[[170,2]]},"2639":{"position":[[20,2]]},"2666":{"position":[[20,2]]},"2670":{"position":[[24,2]]},"2672":{"position":[[19,2]]},"2690":{"position":[[321,2]]},"2731":{"position":[[39,2]]},"2747":{"position":[[32,2]]},"2762":{"position":[[2,2],[41,2]]},"2788":{"position":[[35,2]]},"2805":{"position":[[27,2]]},"2838":{"position":[[32,2]]},"2875":{"position":[[536,2],[674,2]]},"2881":{"position":[[40,2],[449,2],[844,2]]},"2887":{"position":[[20,2]]},"2891":{"position":[[14,2]]},"2905":{"position":[[95,2]]},"2977":{"position":[[65,2]]},"2985":{"position":[[48,2],[62,2],[340,2]]},"2987":{"position":[[65,2]]},"2997":{"position":[[65,2]]},"3005":{"position":[[65,2]]},"3019":{"position":[[65,2]]},"3027":{"position":[[65,2]]},"3031":{"position":[[189,2],[229,2]]},"3035":{"position":[[65,2]]},"3043":{"position":[[65,2]]},"3051":{"position":[[65,2]]},"3059":{"position":[[65,2]]},"3069":{"position":[[23,2],[57,2],[108,2],[217,2],[283,2],[300,2]]},"3071":{"position":[[63,2],[307,2],[404,2],[644,2],[1003,2]]},"3075":{"position":[[3,2]]},"3078":{"position":[[15,2]]},"3080":{"position":[[516,2]]},"3131":{"position":[[191,2]]},"3138":{"position":[[105,2]]},"3277":{"position":[[36,2]]},"3321":{"position":[[322,2]]},"3339":{"position":[[297,2]]},"3399":{"position":[[678,2]]},"3432":{"position":[[282,2],[420,2],[472,2],[558,2],[626,2],[635,2],[690,2],[746,2],[1428,2],[4355,2],[4540,2],[4550,2]]},"3522":{"position":[[96,2],[151,2],[183,2],[333,2],[496,2],[675,2],[1263,2],[1433,2]]},"3563":{"position":[[93,2],[297,2],[389,2],[501,2],[1089,2],[1234,2]]},"3626":{"position":[[430,2],[565,2]]},"3636":{"position":[[74,2],[651,2]]},"3660":{"position":[[12,2],[65,2]]},"3908":{"position":[[163,2]]},"3910":{"position":[[1723,2]]},"3912":{"position":[[2529,2]]},"3916":{"position":[[736,2],[772,2],[2476,2],[2957,2],[7068,2],[7086,2],[7691,2]]},"3918":{"position":[[975,2],[1719,2],[1864,2],[2041,2],[2211,2],[3334,2]]},"3920":{"position":[[1780,2]]},"3924":{"position":[[1182,2],[1190,2]]},"3928":{"position":[[401,2],[485,2],[735,2]]},"3930":{"position":[[1283,2]]},"3932":{"position":[[1427,2],[1587,2]]},"3934":{"position":[[304,2],[798,2],[805,2],[819,2],[946,2],[955,2]]},"3936":{"position":[[417,2],[456,2],[888,2]]},"3938":{"position":[[10,2]]},"3940":{"position":[[11,2],[388,2],[501,2],[738,2]]},"3942":{"position":[[499,2],[513,2],[517,2]]},"3944":{"position":[[300,2]]},"3948":{"position":[[271,2]]},"3950":{"position":[[709,2]]},"3960":{"position":[[653,2]]},"3966":{"position":[[436,2],[464,2],[479,2],[869,2]]},"3968":{"position":[[9,2],[18,2],[25,2]]},"3970":{"position":[[27,2]]},"3974":{"position":[[644,2],[699,2]]},"3980":{"position":[[370,2]]},"3984":{"position":[[629,2]]},"3992":{"position":[[1153,2],[2794,2],[2874,2],[3586,2],[3677,2]]},"3994":{"position":[[1690,2]]},"4000":{"position":[[1007,2],[1037,2]]}}}],["文件创建",{"_index":9244,"t":{"3918":{"position":[[3636,4]]}}}],["文件名",{"_index":254,"t":{"15":{"position":[[265,3],[391,3]]},"17":{"position":[[259,3],[385,3]]},"19":{"position":[[370,3]]},"445":{"position":[[702,3]]},"1739":{"position":[[432,3],[558,3]]},"1741":{"position":[[449,3],[529,3],[1288,3],[2124,3]]},"2542":{"position":[[110,3],[128,3]]},"3063":{"position":[[385,3]]},"3432":{"position":[[252,3],[267,3],[427,3],[642,3],[1293,3]]},"3522":{"position":[[306,3],[450,3],[470,3],[648,3],[827,3],[852,3]]},"3563":{"position":[[361,3],[565,3],[600,3]]},"3706":{"position":[[377,3]]},"3918":{"position":[[1088,3],[3603,3]]},"3940":{"position":[[99,3],[771,3]]},"3956":{"position":[[124,3]]}}}],["文件大小",{"_index":5379,"t":{"1741":{"position":[[393,4],[1275,4]]},"3432":{"position":[[608,4]]}}}],["文件夹",{"_index":256,"t":{"15":{"position":[[277,3]]},"17":{"position":[[271,3]]},"675":{"position":[[76,3]]},"713":{"position":[[756,3]]},"1372":{"position":[[29,3]]},"1444":{"position":[[29,3]]},"1488":{"position":[[747,3]]},"1495":{"position":[[691,3]]},"1549":{"position":[[130,3]]},"1551":{"position":[[78,3]]},"1739":{"position":[[444,3]]},"2524":{"position":[[27,3]]},"2542":{"position":[[24,3]]},"2625":{"position":[[379,3],[540,3]]},"2629":{"position":[[74,3]]},"2651":{"position":[[20,3]]},"2690":{"position":[[343,3]]},"2875":{"position":[[641,3],[647,3]]},"3331":{"position":[[159,3]]},"3974":{"position":[[532,3]]}}}],["文件属性",{"_index":1636,"t":{"220":{"position":[[879,4]]},"2751":{"position":[[74,4]]}}}],["文件格式",{"_index":3172,"t":{"606":{"position":[[479,4]]},"3916":{"position":[[1259,4]]}}}],["文件目录",{"_index":6894,"t":{"2751":{"position":[[503,4]]}}}],["文件系统",{"_index":5336,"t":{"1717":{"position":[[6,4],[77,4]]},"1719":{"position":[[12,4],[31,4],[66,4]]},"1724":{"position":[[315,4],[414,4]]},"1726":{"position":[[35,4],[116,4]]},"3626":{"position":[[546,4]]},"3968":{"position":[[381,4]]}}}],["文化",{"_index":1200,"t":{"168":{"position":[[32,2]]}}}],["文字",{"_index":7474,"t":{"3136":{"position":[[65,2]]}}}],["文本",{"_index":4926,"t":{"1520":{"position":[[330,2],[375,2]]},"2526":{"position":[[48,2],[54,2]]},"2530":{"position":[[3,2]]},"2540":{"position":[[36,2]]},"4000":{"position":[[431,2]]}}}],["文本格式",{"_index":6198,"t":{"2341":{"position":[[105,4]]}}}],["文林",{"_index":4887,"t":{"1511":{"position":[[3955,2]]}}}],["文档",{"_index":514,"t":{"87":{"position":[[2,2],[34,2]]},"95":{"position":[[135,2],[145,2]]},"98":{"position":[[104,2]]},"108":{"position":[[63,2]]},"114":{"position":[[63,2]]},"196":{"position":[[16,2],[29,2]]},"306":{"position":[[5,2]]},"325":{"position":[[85,2]]},"386":{"position":[[95,2]]},"423":{"position":[[135,2]]},"461":{"position":[[85,2]]},"534":{"position":[[771,2]]},"587":{"position":[[1016,2]]},"606":{"position":[[434,2]]},"639":{"position":[[474,2]]},"675":{"position":[[59,2]]},"1389":{"position":[[298,2]]},"1418":{"position":[[330,2]]},"1440":{"position":[[947,2]]},"1468":{"position":[[276,2]]},"1503":{"position":[[0,2],[14,2]]},"1505":{"position":[[0,2],[13,2]]},"1511":{"position":[[982,2],[1083,2],[1165,2],[1285,2],[1759,2],[3858,2]]},"1539":{"position":[[129,2],[944,2],[990,2],[1700,2]]},"1543":{"position":[[385,2]]},"1547":{"position":[[440,2]]},"1549":{"position":[[511,2]]},"1566":{"position":[[56,2]]},"1578":{"position":[[129,2]]},"1695":{"position":[[63,2]]},"1791":{"position":[[62,2]]},"1881":{"position":[[7,2]]},"1947":{"position":[[143,2]]},"1965":{"position":[[15,2]]},"2261":{"position":[[111,2],[306,2]]},"2373":{"position":[[253,2]]},"2391":{"position":[[70,2]]},"2497":{"position":[[82,2]]},"2555":{"position":[[172,2]]},"2557":{"position":[[19,2]]},"2564":{"position":[[208,2]]},"2573":{"position":[[202,2]]},"2593":{"position":[[15,2]]},"2597":{"position":[[78,2]]},"2678":{"position":[[16,2],[29,2]]},"2698":{"position":[[64,2]]},"2747":{"position":[[36,2]]},"2764":{"position":[[118,2]]},"2854":{"position":[[9,2]]},"2897":{"position":[[698,2]]},"2981":{"position":[[129,2]]},"3061":{"position":[[3,2],[29,2]]},"3063":{"position":[[50,2],[234,2],[289,2],[765,2]]},"3082":{"position":[[331,2]]},"3136":{"position":[[70,2]]},"3138":{"position":[[154,2],[168,2]]},"3150":{"position":[[215,2]]},"3189":{"position":[[423,2]]},"3194":{"position":[[857,2]]},"3205":{"position":[[59,2]]},"3207":{"position":[[147,2],[156,2]]},"3242":{"position":[[43,2]]},"3248":{"position":[[96,2]]},"3440":{"position":[[67,2]]},"3464":{"position":[[159,2],[354,2]]},"3472":{"position":[[75,2]]},"3608":{"position":[[107,2],[120,2]]},"3612":{"position":[[19,2],[35,2]]},"3626":{"position":[[23,2],[41,2],[64,2],[114,2],[123,2],[212,2],[349,2],[442,2],[471,2]]},"3632":{"position":[[19,2]]},"3636":{"position":[[3,2],[548,2],[580,2]]},"3654":{"position":[[3,2]]},"3658":{"position":[[53,2]]},"3678":{"position":[[33,2]]},"3702":{"position":[[1072,2],[1173,2]]},"3706":{"position":[[42,2],[226,2],[281,2],[757,2]]},"3758":{"position":[[2,2],[11,2],[120,2]]},"3910":{"position":[[40,2],[2163,2],[2512,2],[2525,2],[2541,2],[2562,2],[2582,2],[2584,2],[2591,2],[2600,2],[2607,2],[2612,2],[2630,2]]},"3912":{"position":[[2554,2],[2572,2],[2593,2],[2619,2],[2658,2],[2686,2],[2708,2],[2718,2],[2725,2],[2732,2],[2738,2]]},"3914":{"position":[[3372,2],[3393,2],[3401,2],[3427,2],[3472,2],[3501,2],[3531,2],[3557,2],[3567,2],[3574,2],[3582,2],[3593,2],[3600,2],[3607,2],[3618,2]]},"3916":{"position":[[1404,2],[2747,2],[2784,2],[2797,2],[2802,2],[2817,2],[2824,2]]},"3918":{"position":[[4025,2],[4046,2],[4064,2],[4079,2],[4109,2],[4134,2],[4152,2],[4159,2],[4166,2],[4173,2],[4180,2],[4187,2],[4205,2],[4212,2],[4219,2],[4227,2]]},"3920":{"position":[[1924,2],[1943,2],[1963,2],[1970,2],[1979,2],[1984,2],[1991,2],[2008,2],[2015,2],[2021,2],[2032,2]]},"3922":{"position":[[2314,2],[2340,2],[2358,2],[2383,2],[2391,2],[2397,2],[2404,2],[2422,2],[2429,2],[2436,2]]},"3924":{"position":[[475,2],[741,2],[1915,2],[1985,2],[1995,2],[2002,2],[2021,2],[3514,2],[3524,2]]},"3928":{"position":[[683,2],[691,2],[697,2],[704,2],[856,2]]},"3930":{"position":[[1425,2],[1479,2],[1489,2],[1496,2],[1503,2],[1512,2],[1532,2]]},"3932":{"position":[[1450,2],[1461,2],[1489,2],[1507,2],[1527,2],[1533,2],[1538,2],[1543,2],[1552,2],[1907,2],[1951,2]]},"3934":{"position":[[1057,2],[1075,2],[1093,2],[1112,2],[1126,2],[1135,2],[1141,2],[1148,2],[1156,2],[1163,2],[2126,2]]},"3936":{"position":[[485,2],[775,2],[874,2],[892,2],[919,2],[929,2],[934,2],[941,2],[959,2],[966,2],[971,2],[979,2],[1978,2],[2165,2]]},"3938":{"position":[[722,2],[741,2],[744,2],[763,2],[766,2],[777,2],[795,2],[805,2]]},"3940":{"position":[[143,2],[172,2],[292,2],[657,2],[678,2],[693,2],[714,2],[728,2],[735,2],[742,2],[749,2],[755,2],[1038,2],[1064,2],[1596,2]]},"3942":{"position":[[50,2],[478,2],[488,2],[493,2],[507,2]]},"3944":{"position":[[508,2],[511,2],[516,2],[531,2],[538,2],[545,2],[557,2],[562,2],[569,2],[572,2],[583,2]]},"3946":{"position":[[428,2],[431,2],[449,2]]},"3948":{"position":[[566,2],[577,2]]},"3952":{"position":[[738,2],[749,2],[776,2]]},"3962":{"position":[[1686,2],[1702,2],[1744,2]]},"3964":{"position":[[617,2],[632,2],[639,2],[646,2]]},"3966":{"position":[[1194,2],[1211,2],[1236,2],[1311,2]]},"3968":{"position":[[355,2],[367,2],[385,2],[394,2],[423,2]]},"3970":{"position":[[361,2],[377,2],[385,2],[394,2]]},"3972":{"position":[[553,2],[558,2],[580,2]]},"3974":{"position":[[597,2],[609,2]]},"3976":{"position":[[501,2],[518,2],[539,2]]},"3978":{"position":[[1282,2],[1299,2],[1319,2],[1346,2],[1355,2],[1604,2]]},"3980":{"position":[[571,2],[600,2]]},"3982":{"position":[[465,2],[656,2],[669,2]]},"3984":{"position":[[766,2],[778,2]]},"3986":{"position":[[935,2],[978,2],[1004,2],[1014,2]]},"3988":{"position":[[458,2],[485,2]]},"3990":{"position":[[643,2],[656,2],[674,2],[706,2],[735,2]]},"3992":{"position":[[175,2],[254,2],[551,2],[2606,2],[2614,2],[2634,2],[2651,2],[2665,2],[2711,2],[2729,2],[2748,2],[2766,2],[2817,2],[3647,2]]},"3994":{"position":[[1564,2],[1574,2],[1611,2]]},"3996":{"position":[[1396,2],[1410,2],[1435,2],[1455,2],[1477,2],[1503,2],[1539,2]]},"3998":{"position":[[745,2],[761,2],[800,2],[812,2]]},"4000":{"position":[[1204,2],[1227,2]]},"4002":{"position":[[376,2],[386,2],[395,2],[404,2]]},"4004":{"position":[[571,2],[594,2]]},"4006":{"position":[[730,2],[769,2]]}}}],["文章",{"_index":7925,"t":{"3331":{"position":[[25,2]]},"3992":{"position":[[2803,2]]}}}],["斌",{"_index":4666,"t":{"1511":{"position":[[1092,1]]}}}],["断点",{"_index":10275,"t":{"3992":{"position":[[2988,2]]}}}],["断电",{"_index":9238,"t":{"3918":{"position":[[3338,2]]}}}],["断言",{"_index":7992,"t":{"3360":{"position":[[196,2],[199,2]]}}}],["斯洛伐克",{"_index":6637,"t":{"2559":{"position":[[2048,4],[2059,4],[2065,4]]}}}],["斯洛文尼亚",{"_index":6639,"t":{"2559":{"position":[[2073,5],[2085,5],[2092,5]]}}}],["新",{"_index":1128,"t":{"148":{"position":[[419,1],[464,1],[488,1],[500,1],[522,1]]},"168":{"position":[[1,1]]},"206":{"position":[[131,1]]},"220":{"position":[[891,1]]},"263":{"position":[[48,1]]},"323":{"position":[[125,1]]},"336":{"position":[[383,1]]},"378":{"position":[[78,1]]},"384":{"position":[[2,1]]},"427":{"position":[[54,1]]},"433":{"position":[[110,1]]},"445":{"position":[[826,1]]},"498":{"position":[[88,1]]},"514":{"position":[[630,1]]},"570":{"position":[[1878,1],[2223,1],[2514,1]]},"587":{"position":[[2207,1]]},"747":{"position":[[581,1]]},"749":{"position":[[570,1]]},"862":{"position":[[381,1]]},"893":{"position":[[88,1]]},"1214":{"position":[[128,1]]},"1313":{"position":[[325,1]]},"1394":{"position":[[14,1]]},"1396":{"position":[[47,1]]},"1412":{"position":[[750,1]]},"1511":{"position":[[904,1],[1518,1]]},"1516":{"position":[[81,1]]},"1589":{"position":[[264,1]]},"1631":{"position":[[578,1]]},"1661":{"position":[[1361,1]]},"1695":{"position":[[62,1]]},"1709":{"position":[[14,1]]},"1811":{"position":[[502,1]]},"2136":{"position":[[68,1]]},"2315":{"position":[[54,1]]},"2391":{"position":[[69,1],[112,1]]},"2404":{"position":[[12,1]]},"2474":{"position":[[37,1]]},"2803":{"position":[[34,1]]},"2887":{"position":[[35,1]]},"3023":{"position":[[1358,1]]},"3069":{"position":[[268,1]]},"3114":{"position":[[31,1]]},"3124":{"position":[[37,1],[70,1]]},"3207":{"position":[[23,1],[94,1]]},"3289":{"position":[[23,1]]},"3291":{"position":[[470,1],[953,1],[1242,1]]},"3321":{"position":[[29,1]]},"3331":{"position":[[14,1]]},"3352":{"position":[[177,1],[242,1]]},"3432":{"position":[[622,1],[4561,1]]},"3448":{"position":[[111,1]]},"3466":{"position":[[1513,1]]},"3470":{"position":[[94,1]]},"3522":{"position":[[66,1]]},"3563":{"position":[[64,1]]},"3579":{"position":[[45,1]]},"3626":{"position":[[391,1]]},"3650":{"position":[[0,1]]},"3658":{"position":[[7,1]]},"3690":{"position":[[96,1]]},"3722":{"position":[[51,1]]},"3740":{"position":[[475,1]]},"3783":{"position":[[1430,1]]},"3819":{"position":[[194,1],[711,1]]},"3910":{"position":[[374,1],[1564,1],[2518,1]]},"3912":{"position":[[712,1],[1764,1]]},"3914":{"position":[[745,1],[3396,1]]},"3916":{"position":[[671,1]]},"3918":{"position":[[745,1]]},"3920":{"position":[[153,1]]},"3922":{"position":[[0,1]]},"3924":{"position":[[0,1],[1171,1],[1344,1],[3507,1]]},"3926":{"position":[[420,1],[616,1]]},"3928":{"position":[[381,1]]},"3930":{"position":[[0,1]]},"3932":{"position":[[0,1]]},"3934":{"position":[[0,1]]},"3936":{"position":[[0,1],[1427,1]]},"3938":{"position":[[0,1],[900,1]]},"3940":{"position":[[0,1]]},"3942":{"position":[[0,1]]},"3944":{"position":[[0,1]]},"3946":{"position":[[36,1]]},"3948":{"position":[[59,1],[576,1]]},"3950":{"position":[[0,1]]},"3952":{"position":[[0,1],[617,1]]},"3954":{"position":[[0,1],[329,1]]},"3956":{"position":[[0,1],[257,1]]},"3958":{"position":[[0,1]]},"3960":{"position":[[0,1]]},"3962":{"position":[[22,1]]},"3964":{"position":[[0,1]]},"3966":{"position":[[0,1]]},"3968":{"position":[[0,1]]},"3970":{"position":[[0,1]]},"3972":{"position":[[0,1]]},"3974":{"position":[[0,1]]},"3976":{"position":[[0,1]]},"3978":{"position":[[0,1]]},"3980":{"position":[[0,1]]},"3982":{"position":[[0,1]]},"3984":{"position":[[0,1]]},"3986":{"position":[[0,1],[591,1]]},"3988":{"position":[[0,1]]},"3990":{"position":[[0,1]]},"3992":{"position":[[0,1]]},"3994":{"position":[[0,1]]},"3996":{"position":[[0,1]]},"3998":{"position":[[0,1]]},"4000":{"position":[[0,1],[860,1]]},"4002":{"position":[[0,1]]},"4004":{"position":[[0,1]]},"4006":{"position":[[0,1]]}}}],["新创建",{"_index":8120,"t":{"3432":{"position":[[629,3]]}}}],["新加坡",{"_index":6491,"t":{"2559":{"position":[[607,3]]}}}],["新增",{"_index":85,"t":{"5":{"position":[[22,2]]},"7":{"position":[[18,2]]},"274":{"position":[[94,2],[178,2],[234,2]]},"342":{"position":[[19,2]]},"445":{"position":[[793,2]]},"532":{"position":[[31,2]]},"565":{"position":[[109,2],[128,2]]},"570":{"position":[[841,2],[1628,2],[2010,2],[2355,2],[2646,2],[2680,2]]},"653":{"position":[[13,2]]},"659":{"position":[[69,2]]},"713":{"position":[[742,2]]},"739":{"position":[[25,2]]},"751":{"position":[[19,2]]},"933":{"position":[[601,2]]},"1004":{"position":[[39,2],[106,2]]},"1010":{"position":[[68,2]]},"1064":{"position":[[570,2]]},"1066":{"position":[[19,2],[1115,2]]},"1279":{"position":[[19,2]]},"1368":{"position":[[766,2]]},"1412":{"position":[[779,2]]},"1631":{"position":[[574,2]]},"1661":{"position":[[1357,2]]},"1743":{"position":[[314,2]]},"1799":{"position":[[964,2]]},"1815":{"position":[[80,2]]},"1817":{"position":[[50,2]]},"1995":{"position":[[8,2]]},"2018":{"position":[[8,2]]},"2290":{"position":[[18,2]]},"2486":{"position":[[20,2]]},"2803":{"position":[[14,2]]},"2937":{"position":[[29,2],[43,2],[1036,2]]},"3023":{"position":[[1354,2]]},"3071":{"position":[[22,2]]},"3426":{"position":[[75,2]]},"3430":{"position":[[3565,2]]},"3432":{"position":[[4266,2]]},"3434":{"position":[[2640,2]]},"3444":{"position":[[17,2]]},"3448":{"position":[[135,2]]},"3454":{"position":[[51,2]]},"3464":{"position":[[17,2]]},"3466":{"position":[[1577,2]]},"3496":{"position":[[235,2]]},"3541":{"position":[[531,2]]},"3694":{"position":[[37,2]]},"3770":{"position":[[3128,2]]},"3783":{"position":[[1542,2]]},"3785":{"position":[[380,2],[812,2]]},"3812":{"position":[[658,2],[1084,2]]},"3819":{"position":[[376,2],[1579,2]]},"3844":{"position":[[1009,2],[1173,2],[1191,2]]},"3908":{"position":[[188,2]]},"3910":{"position":[[378,2],[407,2],[441,2],[479,2],[522,2],[575,2],[618,2],[1023,2],[1382,2],[1445,2],[2515,2],[2528,2],[2544,2]]},"3912":{"position":[[716,2],[764,2],[798,2],[853,2],[914,2],[974,2],[1050,2],[1108,2],[1217,2],[1292,2],[2451,2],[2557,2],[2575,2],[2596,2],[2622,2],[2661,2],[2689,2]]},"3914":{"position":[[749,2],[800,2],[878,2],[911,2],[961,2],[1042,2],[1108,2],[1142,2],[1243,2],[2389,2],[3375,2],[3404,2],[3430,2],[3475,2],[3504,2],[3534,2]]},"3916":{"position":[[675,2],[729,2],[765,2],[820,2],[858,2],[913,2],[954,2],[996,2],[1058,2],[1115,2],[1178,2],[1181,2],[1240,2],[1243,2],[1280,2],[1331,2],[2750,2]]},"3918":{"position":[[749,2],[799,2],[866,2],[908,2],[947,2],[990,2],[1051,2],[1078,2],[1110,2],[1158,2],[1215,2],[2999,2],[4028,2],[4049,2],[4067,2],[4088,2],[4118,2],[4225,2]]},"3920":{"position":[[157,2],[217,2],[272,2],[341,2],[380,2],[428,2],[467,2],[521,2],[563,2],[603,2],[641,2],[718,2],[999,2],[1231,2],[1927,2]]},"3922":{"position":[[4,2],[43,2],[92,2],[136,2],[168,2],[216,2],[291,2],[335,2],[385,2],[654,2],[747,2],[2308,2],[2343,2],[2369,2]]},"3924":{"position":[[4,2],[60,2],[120,2],[185,2],[261,2],[304,2],[377,2],[469,2],[531,2],[587,2],[1906,2]]},"3928":{"position":[[428,2]]},"3930":{"position":[[4,2],[79,2],[125,2],[205,2],[281,2],[323,2],[389,2],[439,2],[466,2]]},"3932":{"position":[[4,2],[49,2],[117,2],[165,2],[229,2],[258,2],[299,2],[346,2],[378,2],[414,2],[456,2],[533,2],[578,2],[642,2],[689,2],[1283,2],[1453,2],[1464,2],[1492,2],[1560,2]]},"3934":{"position":[[4,2],[43,2],[90,2],[148,2],[177,2],[241,2],[295,2],[349,2],[411,2],[469,2],[1060,2],[1078,2],[1096,2],[1115,2],[1129,2]]},"3936":{"position":[[4,2],[61,2],[96,2],[158,2],[229,2],[269,2],[296,2],[354,2],[738,2],[830,2],[877,2],[895,2]]},"3938":{"position":[[4,2],[56,2],[110,2],[150,2],[190,2],[343,2],[401,2],[678,2],[725,2],[749,2],[1201,2]]},"3940":{"position":[[4,2],[48,2],[94,2],[137,2],[161,2],[207,2],[210,2],[281,2],[660,2],[681,2],[696,2]]},"3942":{"position":[[4,2],[44,2],[496,2]]},"3944":{"position":[[4,2],[30,2],[59,2],[112,2],[521,2],[591,2]]},"3946":{"position":[[40,2]]},"3948":{"position":[[63,2],[569,2]]},"3950":{"position":[[4,2],[42,2],[78,2],[115,2],[163,2],[221,2],[252,2]]},"3952":{"position":[[4,2],[41,2],[86,2],[113,2],[741,2]]},"3954":{"position":[[4,2],[86,2],[134,2],[155,2],[187,2],[216,2],[256,2],[306,2]]},"3956":{"position":[[4,2],[30,2],[66,2],[111,2]]},"3958":{"position":[[4,2],[46,2]]},"3960":{"position":[[4,2],[69,2],[95,2],[139,2],[285,2]]},"3962":{"position":[[26,2],[67,2],[105,2],[159,2],[192,2],[234,2],[266,2],[291,2],[315,2],[346,2],[349,2],[374,2],[416,2],[454,2],[625,2],[1561,2],[1691,2]]},"3964":{"position":[[4,2],[42,2],[95,2],[144,2],[192,2],[224,2],[260,2]]},"3966":{"position":[[4,2],[45,2],[89,2],[122,2],[154,2],[188,2],[191,2],[212,2],[255,2],[1199,2]]},"3968":{"position":[[4,2],[36,2],[123,2],[360,2],[378,2]]},"3970":{"position":[[4,2],[38,2],[127,2]]},"3972":{"position":[[4,2],[60,2],[101,2],[104,2],[144,2],[191,2],[252,2]]},"3974":{"position":[[4,2],[48,2],[51,2],[83,2],[128,2],[152,2],[192,2],[563,2],[602,2]]},"3976":{"position":[[4,2],[7,2],[68,2],[90,2],[119,2],[193,2],[290,2],[506,2],[529,2],[532,2]]},"3978":{"position":[[4,2],[43,2],[63,2],[85,2],[131,2],[159,2],[166,2],[203,2],[258,2],[303,2],[334,2],[372,2],[1287,2],[1310,2],[1414,2],[1418,2]]},"3980":{"position":[[4,2],[53,2],[88,2],[109,2],[134,2]]},"3982":{"position":[[4,2],[30,2],[80,2],[119,2],[178,2]]},"3984":{"position":[[4,2],[36,2],[81,2],[100,2],[103,2],[140,2],[164,2],[216,2]]},"3986":{"position":[[4,2],[66,2],[99,2],[131,2],[940,2],[966,2]]},"3988":{"position":[[4,2],[31,2],[83,2],[111,2],[150,2],[185,2],[463,2]]},"3990":{"position":[[4,2],[41,2],[72,2],[104,2],[139,2],[185,2],[648,2],[667,2],[685,2],[717,2],[746,2],[778,2]]},"3992":{"position":[[4,2],[24,2],[47,2],[75,2],[121,2],[160,2],[198,2],[244,2],[265,2],[314,2],[369,2],[425,2],[448,2],[462,2],[486,2],[510,2],[545,2],[590,2],[618,2],[643,2],[695,2],[718,2],[789,2],[824,2],[861,2],[926,2],[949,2],[1487,2],[2627,2],[2645,2],[2662,2],[2682,2],[2701,2],[2722,2],[2740,2],[2759,2],[2777,2]]},"3994":{"position":[[4,2],[54,2],[99,2],[144,2],[171,2],[215,2],[239,2],[263,2],[289,2],[327,2],[376,2],[406,2],[1510,2],[1569,2]]},"3996":{"position":[[4,2],[35,2],[82,2],[130,2],[154,2],[198,2],[240,2],[279,2],[322,2],[410,2],[1401,2],[1421,2],[1616,2]]},"3998":{"position":[[4,2],[27,2],[64,2],[123,2],[150,2],[200,2],[243,2],[297,2],[324,2],[355,2],[377,2],[425,2],[484,2],[511,2],[750,2]]},"4000":{"position":[[4,2],[38,2],[105,2],[140,2],[170,2],[207,2],[256,2],[332,2],[364,2],[402,2],[425,2],[446,2],[468,2]]},"4002":{"position":[[4,2],[34,2],[64,2],[98,2],[135,2]]},"4004":{"position":[[4,2],[62,2],[109,2]]},"4006":{"position":[[4,2],[37,2],[70,2],[117,2],[142,2]]}}}],["新年快乐",{"_index":4698,"t":{"1511":{"position":[[1483,4]]}}}],["新建",{"_index":7644,"t":{"3224":{"position":[[0,2]]},"3579":{"position":[[189,2]]},"3620":{"position":[[219,2],[356,2]]},"3986":{"position":[[1624,2]]}}}],["新版",{"_index":2785,"t":{"514":{"position":[[611,2]]},"899":{"position":[[1066,2]]},"3912":{"position":[[1810,2]]}}}],["新生",{"_index":4022,"t":{"1145":{"position":[[464,2]]},"1147":{"position":[[355,2]]},"1151":{"position":[[433,2]]},"1181":{"position":[[162,2],[462,2]]},"1183":{"position":[[162,2],[525,2]]}}}],["新窗口",{"_index":2006,"t":{"306":{"position":[[53,3]]}}}],["新西兰",{"_index":6523,"t":{"2559":{"position":[[874,3]]}}}],["斷",{"_index":4468,"t":{"1488":{"position":[[1027,1]]},"1499":{"position":[[419,1]]}}}],["方",{"_index":983,"t":{"127":{"position":[[959,1],[994,1],[1003,1],[1050,1],[1087,1],[1096,1]]},"3039":{"position":[[131,1],[163,1],[198,1],[232,1]]},"3041":{"position":[[170,1],[205,1],[214,1],[261,1],[298,1],[307,1]]},"3148":{"position":[[11,1]]},"3926":{"position":[[555,1]]}}}],["方便",{"_index":1003,"t":{"127":{"position":[[1332,2]]},"325":{"position":[[11,2]]},"329":{"position":[[138,2]]},"359":{"position":[[324,2]]},"480":{"position":[[2,2]]},"608":{"position":[[31,2]]},"841":{"position":[[98,2]]},"988":{"position":[[23,2]]},"1143":{"position":[[13,2]]},"1389":{"position":[[178,2]]},"1408":{"position":[[1028,2]]},"1535":{"position":[[604,2]]},"1539":{"position":[[1623,2]]},"1553":{"position":[[50,2]]},"1580":{"position":[[204,2],[394,2]]},"1611":{"position":[[14,2]]},"1867":{"position":[[51,2]]},"1969":{"position":[[112,2]]},"1983":{"position":[[24,2]]},"2006":{"position":[[24,2]]},"2206":{"position":[[20,2]]},"2424":{"position":[[2,2],[31,2]]},"2446":{"position":[[20,2]]},"2472":{"position":[[47,2]]},"2646":{"position":[[128,2]]},"2649":{"position":[[96,2]]},"2772":{"position":[[24,2]]},"2819":{"position":[[27,2]]},"2860":{"position":[[57,2]]},"2881":{"position":[[338,2]]},"2967":{"position":[[32,2]]},"3315":{"position":[[28,2]]},"3414":{"position":[[103,2]]},"3416":{"position":[[19,2]]},"3426":{"position":[[220,2]]},"3444":{"position":[[70,2]]},"3448":{"position":[[142,2]]},"3595":{"position":[[12,2]]},"3610":{"position":[[41,2],[53,2]]},"3616":{"position":[[9,2]]},"3628":{"position":[[14,2]]},"3654":{"position":[[39,2]]},"3727":{"position":[[103,2]]},"3752":{"position":[[17,2]]},"3804":{"position":[[2,2]]},"3922":{"position":[[149,2]]},"3982":{"position":[[690,2]]},"3986":{"position":[[238,2]]}}}],["方便管理",{"_index":4957,"t":{"1537":{"position":[[2,4]]},"1853":{"position":[[42,4]]}}}],["方可",{"_index":4993,"t":{"1549":{"position":[[22,2]]}}}],["方向",{"_index":4011,"t":{"1131":{"position":[[59,2]]},"3414":{"position":[[317,2]]}}}],["方式",{"_index":352,"t":{"21":{"position":[[195,2]]},"23":{"position":[[177,2]]},"114":{"position":[[292,2]]},"119":{"position":[[146,2]]},"121":{"position":[[43,2],[88,2],[467,2],[505,2],[760,2]]},"125":{"position":[[49,2]]},"129":{"position":[[609,2]]},"131":{"position":[[26,2],[36,2]]},"135":{"position":[[21,2]]},"148":{"position":[[248,2]]},"202":{"position":[[64,2],[494,2],[536,2]]},"206":{"position":[[33,2],[251,2]]},"208":{"position":[[46,2]]},"220":{"position":[[51,2],[140,2]]},"229":{"position":[[11,2],[49,2]]},"233":{"position":[[429,2]]},"235":{"position":[[44,2]]},"251":{"position":[[31,2]]},"284":{"position":[[212,2],[393,2]]},"300":{"position":[[85,2],[250,2]]},"308":{"position":[[171,2],[200,2]]},"319":{"position":[[18,2],[68,2],[352,2]]},"350":{"position":[[17,2],[21,2],[74,2],[272,2],[320,2],[492,2],[718,2],[732,2],[814,2]]},"357":{"position":[[13,2]]},"363":{"position":[[17,2],[106,2]]},"373":{"position":[[177,2]]},"378":{"position":[[116,2]]},"435":{"position":[[20,2],[107,2],[840,2],[856,2],[866,2],[1012,2],[1101,2]]},"445":{"position":[[163,2],[1017,2]]},"447":{"position":[[82,2]]},"455":{"position":[[127,2],[131,2],[241,2],[696,2]]},"461":{"position":[[278,2],[632,2],[978,2]]},"490":{"position":[[5,2],[209,2]]},"506":{"position":[[35,2]]},"512":{"position":[[23,2],[70,2],[106,2]]},"514":{"position":[[646,2]]},"516":{"position":[[424,2]]},"518":{"position":[[505,2]]},"526":{"position":[[68,2]]},"528":{"position":[[198,2]]},"534":{"position":[[101,2]]},"570":{"position":[[2007,2],[2352,2],[2643,2]]},"583":{"position":[[2,2],[23,2],[50,2],[55,2],[91,2]]},"585":{"position":[[548,2]]},"587":{"position":[[34,2],[55,2],[725,2],[2062,2],[2110,2]]},"589":{"position":[[34,2]]},"591":{"position":[[46,2],[92,2]]},"617":{"position":[[1470,2],[1884,2],[2532,2]]},"653":{"position":[[27,2]]},"677":{"position":[[122,2]]},"685":{"position":[[37,2],[64,2]]},"704":{"position":[[122,2]]},"706":{"position":[[75,2]]},"728":{"position":[[17,2]]},"799":{"position":[[55,2]]},"810":{"position":[[105,2],[154,2],[164,2],[251,2],[327,2],[416,2],[432,2]]},"812":{"position":[[113,2],[162,2],[172,2],[267,2],[351,2],[448,2],[464,2]]},"814":{"position":[[104,2],[153,2],[163,2],[249,2],[324,2],[412,2],[428,2]]},"816":{"position":[[112,2],[161,2],[171,2],[265,2],[348,2],[444,2],[460,2]]},"818":{"position":[[42,2]]},"911":{"position":[[198,2]]},"919":{"position":[[24,2]]},"941":{"position":[[107,2],[154,2],[213,2]]},"1020":{"position":[[14,2]]},"1026":{"position":[[163,2],[218,2]]},"1037":{"position":[[349,2],[473,2],[547,2],[636,2],[741,2]]},"1073":{"position":[[71,2]]},"1101":{"position":[[55,2]]},"1103":{"position":[[209,2]]},"1107":{"position":[[21,2],[82,2],[229,2]]},"1109":{"position":[[37,2],[45,2]]},"1111":{"position":[[111,2],[166,2],[176,2],[269,2],[351,2],[448,2],[464,2]]},"1113":{"position":[[111,2],[164,2],[174,2],[267,2],[349,2],[446,2],[462,2]]},"1115":{"position":[[114,2],[164,2],[174,2],[270,2],[355,2],[455,2],[471,2]]},"1117":{"position":[[1085,2],[1090,2],[1758,2],[2791,2],[3813,2],[4693,2],[4709,2]]},"1119":{"position":[[105,2],[153,2],[163,2],[250,2],[326,2],[417,2],[433,2]]},"1121":{"position":[[113,2],[161,2],[171,2],[266,2],[350,2],[449,2],[465,2]]},"1123":{"position":[[98,2],[137,2],[147,2],[227,2],[296,2],[380,2],[396,2]]},"1129":{"position":[[8,2],[158,2],[246,2],[256,2],[385,2],[503,2],[764,2],[966,2],[1080,2],[1090,2],[1271,2],[1441,2],[1771,2],[1787,2]]},"1135":{"position":[[14,2]]},"1151":{"position":[[12,2]]},"1155":{"position":[[55,2]]},"1194":{"position":[[35,2],[49,2],[435,2]]},"1200":{"position":[[22,2]]},"1202":{"position":[[22,2]]},"1204":{"position":[[194,2],[229,2]]},"1212":{"position":[[58,2],[165,2]]},"1221":{"position":[[40,2]]},"1225":{"position":[[31,2],[45,2]]},"1234":{"position":[[623,2]]},"1236":{"position":[[634,2]]},"1238":{"position":[[751,2]]},"1240":{"position":[[835,2]]},"1269":{"position":[[211,2]]},"1271":{"position":[[6,2],[19,2]]},"1275":{"position":[[32,2]]},"1277":{"position":[[12,2],[31,2]]},"1286":{"position":[[76,2],[153,2],[215,2]]},"1295":{"position":[[5,2],[85,2],[157,2]]},"1309":{"position":[[106,2]]},"1313":{"position":[[13,2],[228,2]]},"1317":{"position":[[534,2],[551,2]]},"1319":{"position":[[75,2]]},"1353":{"position":[[27,2]]},"1374":{"position":[[17,2],[28,2],[118,2]]},"1379":{"position":[[1,2],[72,2]]},"1383":{"position":[[78,2],[210,2],[286,2]]},"1389":{"position":[[208,2]]},"1392":{"position":[[17,2]]},"1394":{"position":[[41,2],[77,2],[87,2]]},"1408":{"position":[[1038,2]]},"1412":{"position":[[846,2],[1788,2]]},"1416":{"position":[[32,2],[132,2]]},"1418":{"position":[[18,2],[135,2],[278,2]]},"1424":{"position":[[81,2]]},"1426":{"position":[[18,2]]},"1428":{"position":[[62,2],[127,2]]},"1432":{"position":[[171,2],[223,2]]},"1566":{"position":[[104,2],[147,2],[155,2],[360,2]]},"1580":{"position":[[77,2],[83,2]]},"1584":{"position":[[122,2],[332,2]]},"1609":{"position":[[324,2]]},"1619":{"position":[[23,2]]},"1621":{"position":[[771,2]]},"1633":{"position":[[49,2],[56,2],[124,2],[185,2],[252,2]]},"1661":{"position":[[557,2]]},"1689":{"position":[[18,2]]},"1709":{"position":[[17,2],[33,2]]},"1717":{"position":[[61,2]]},"1726":{"position":[[20,2]]},"1739":{"position":[[5,2],[253,2]]},"1753":{"position":[[11,2]]},"1755":{"position":[[4,2],[547,2],[593,2],[606,2],[774,2],[980,2],[1100,2],[1214,2]]},"1795":{"position":[[2841,2]]},"1823":{"position":[[66,2]]},"1834":{"position":[[70,2]]},"1841":{"position":[[23,2]]},"1853":{"position":[[31,2],[38,2]]},"1867":{"position":[[706,2],[714,2],[724,2],[776,2]]},"1869":{"position":[[31,2]]},"1892":{"position":[[68,2]]},"1903":{"position":[[300,2]]},"1905":{"position":[[23,2],[36,2],[71,2],[79,2],[85,2]]},"1907":{"position":[[10,2],[33,2],[136,2],[380,2],[463,2],[563,2],[583,2]]},"1909":{"position":[[18,2],[25,2],[55,2],[144,2],[243,2],[248,2],[279,2],[676,2],[787,2],[1075,2]]},"1913":{"position":[[1262,2],[1380,2],[1462,2]]},"1919":{"position":[[382,2],[725,2],[838,2],[915,2]]},"1925":{"position":[[1454,2],[1565,2],[1640,2]]},"1927":{"position":[[771,2],[885,2],[963,2]]},"1933":{"position":[[891,2],[1005,2],[1083,2]]},"1935":{"position":[[386,2],[503,2],[584,2]]},"1941":{"position":[[1142,2],[1253,2],[1328,2]]},"1943":{"position":[[336,2],[450,2],[528,2]]},"1951":{"position":[[783,2]]},"1953":{"position":[[311,2]]},"1961":{"position":[[45,2],[59,2],[81,2],[132,2],[164,2],[394,2]]},"2096":{"position":[[51,2],[79,2]]},"2175":{"position":[[30,2],[155,2],[245,2],[275,2]]},"2231":{"position":[[177,2]]},"2233":{"position":[[43,2]]},"2243":{"position":[[98,2]]},"2305":{"position":[[62,2]]},"2307":{"position":[[119,2]]},"2311":{"position":[[120,2]]},"2331":{"position":[[9,2],[210,2],[275,2],[490,2]]},"2335":{"position":[[71,2],[98,2]]},"2348":{"position":[[14,2],[107,2]]},"2357":{"position":[[44,2]]},"2359":{"position":[[17,2],[249,2],[424,2]]},"2361":{"position":[[17,2],[472,2]]},"2363":{"position":[[17,2],[290,2]]},"2365":{"position":[[17,2],[183,2]]},"2367":{"position":[[17,2],[189,2]]},"2369":{"position":[[17,2],[209,2]]},"2371":{"position":[[17,2],[216,2]]},"2373":{"position":[[17,2],[197,2]]},"2379":{"position":[[91,2],[244,2]]},"2381":{"position":[[74,2],[317,2]]},"2383":{"position":[[311,2],[335,2]]},"2393":{"position":[[45,2],[54,2],[71,2],[89,2]]},"2395":{"position":[[14,2],[78,2],[103,2]]},"2436":{"position":[[52,2]]},"2442":{"position":[[19,2],[53,2],[59,2]]},"2444":{"position":[[217,2],[277,2]]},"2466":{"position":[[18,2]]},"2490":{"position":[[91,2]]},"2501":{"position":[[2,2]]},"2503":{"position":[[148,2]]},"2538":{"position":[[62,2],[489,2]]},"2544":{"position":[[16,2],[33,2],[53,2],[85,2],[109,2],[133,2]]},"2547":{"position":[[1,2]]},"2549":{"position":[[3,2]]},"2551":{"position":[[30,2]]},"2575":{"position":[[9,2],[28,2],[41,2]]},"2579":{"position":[[4,2],[14,2]]},"2583":{"position":[[28,2]]},"2585":{"position":[[6,2],[59,2]]},"2587":{"position":[[477,2],[556,2]]},"2589":{"position":[[4,2]]},"2591":{"position":[[13,2]]},"2603":{"position":[[74,2],[131,2],[187,2]]},"2615":{"position":[[12,2]]},"2623":{"position":[[141,2],[164,2]]},"2625":{"position":[[14,2],[50,2],[87,2],[203,2],[221,2],[358,2],[367,2]]},"2627":{"position":[[114,2]]},"2674":{"position":[[455,2]]},"2692":{"position":[[36,2]]},"2701":{"position":[[27,2],[32,2]]},"2713":{"position":[[20,2],[402,2],[650,2],[656,2]]},"2725":{"position":[[93,2],[149,2]]},"2729":{"position":[[20,2]]},"2731":{"position":[[47,2],[210,2],[240,2],[667,2]]},"2733":{"position":[[15,2]]},"2751":{"position":[[23,2]]},"2788":{"position":[[207,2]]},"2798":{"position":[[142,2]]},"2803":{"position":[[98,2],[117,2],[170,2]]},"2805":{"position":[[3,2],[58,2],[110,2]]},"2807":{"position":[[5,2]]},"2809":{"position":[[18,2],[78,2]]},"2829":{"position":[[19,2],[60,2]]},"2834":{"position":[[3,2],[5,2]]},"2836":{"position":[[759,2]]},"2843":{"position":[[52,2]]},"2850":{"position":[[1,2]]},"2862":{"position":[[366,2],[427,2]]},"2864":{"position":[[54,2]]},"2866":{"position":[[5,2]]},"2875":{"position":[[179,2],[252,2],[492,2],[1027,2]]},"2877":{"position":[[111,2],[276,2]]},"2879":{"position":[[377,2]]},"2881":{"position":[[283,2],[382,2]]},"2889":{"position":[[121,2]]},"2897":{"position":[[109,2],[125,2],[155,2],[200,2]]},"2903":{"position":[[24,2],[55,2],[194,2],[214,2],[275,2],[343,2]]},"2905":{"position":[[102,2]]},"2921":{"position":[[43,2]]},"2923":{"position":[[1,2]]},"2929":{"position":[[777,2]]},"2939":{"position":[[1,2]]},"2943":{"position":[[492,2]]},"2945":{"position":[[889,2]]},"2951":{"position":[[617,2]]},"2953":{"position":[[1,2]]},"2959":{"position":[[832,2]]},"2965":{"position":[[10,2]]},"2981":{"position":[[196,2]]},"3023":{"position":[[554,2]]},"3078":{"position":[[81,2]]},"3096":{"position":[[118,2]]},"3108":{"position":[[15,2]]},"3124":{"position":[[5,2]]},"3152":{"position":[[18,2]]},"3154":{"position":[[48,2],[385,2]]},"3156":{"position":[[321,2],[348,2],[382,2]]},"3160":{"position":[[13,2]]},"3224":{"position":[[230,2]]},"3275":{"position":[[409,2]]},"3287":{"position":[[99,2]]},"3289":{"position":[[15,2],[125,2]]},"3327":{"position":[[38,2]]},"3377":{"position":[[23,2]]},"3389":{"position":[[100,2],[189,2]]},"3391":{"position":[[23,2],[30,2],[85,2]]},"3393":{"position":[[21,2],[41,2],[105,2],[166,2]]},"3395":{"position":[[11,2],[19,2]]},"3397":{"position":[[2,2],[15,2]]},"3399":{"position":[[5,2],[103,2]]},"3418":{"position":[[75,2]]},"3420":{"position":[[297,2]]},"3422":{"position":[[4,2]]},"3426":{"position":[[19,2],[37,2],[211,2]]},"3430":{"position":[[1065,2],[1945,2],[1986,2],[2093,2],[2197,2]]},"3438":{"position":[[49,2]]},"3440":{"position":[[107,2]]},"3446":{"position":[[767,2]]},"3483":{"position":[[11,2],[44,2],[52,2]]},"3488":{"position":[[4,2]]},"3492":{"position":[[5,2],[201,2]]},"3494":{"position":[[5,2],[182,2]]},"3496":{"position":[[5,2],[135,2]]},"3498":{"position":[[4,2],[381,2]]},"3506":{"position":[[79,2],[190,2]]},"3522":{"position":[[54,2],[83,2],[524,2],[703,2]]},"3539":{"position":[[21,2]]},"3543":{"position":[[4,2],[468,2],[555,2],[690,2]]},"3551":{"position":[[13,2],[21,2]]},"3553":{"position":[[13,2],[21,2]]},"3555":{"position":[[13,2],[21,2]]},"3557":{"position":[[13,2],[21,2]]},"3559":{"position":[[13,2],[21,2]]},"3563":{"position":[[52,2],[80,2]]},"3595":{"position":[[133,2]]},"3597":{"position":[[32,2],[69,2],[243,2]]},"3599":{"position":[[2,2]]},"3603":{"position":[[36,2],[137,2]]},"3620":{"position":[[123,2],[268,2],[305,2],[322,2]]},"3622":{"position":[[2,2]]},"3632":{"position":[[56,2],[82,2],[232,2]]},"3640":{"position":[[0,2],[4,2]]},"3718":{"position":[[140,2]]},"3720":{"position":[[2,2]]},"3734":{"position":[[378,2]]},"3744":{"position":[[264,2]]},"3754":{"position":[[42,2],[252,2]]},"3768":{"position":[[16,2]]},"3770":{"position":[[7,2]]},"3779":{"position":[[173,2],[466,2],[543,2],[1291,2],[1941,2]]},"3781":{"position":[[416,2]]},"3802":{"position":[[170,2],[515,2],[599,2],[1909,2],[2718,2]]},"3804":{"position":[[107,2],[370,2]]},"3817":{"position":[[179,2],[498,2],[2505,2]]},"3824":{"position":[[99,2],[191,2]]},"3842":{"position":[[20,2],[560,2],[1169,2],[1743,2],[2346,2],[2979,2]]},"3844":{"position":[[20,2]]},"3846":{"position":[[9,2],[265,2]]},"3856":{"position":[[65,2]]},"3910":{"position":[[791,2],[956,2]]},"3916":{"position":[[7094,2],[7435,2],[7699,2],[8087,2]]},"3918":{"position":[[1510,2]]},"3922":{"position":[[1984,2]]},"3924":{"position":[[558,2],[802,2],[2076,2],[2357,2],[2418,2],[2486,2]]},"3946":{"position":[[381,2]]},"3948":{"position":[[131,2]]},"3952":{"position":[[326,2],[517,2]]},"3960":{"position":[[122,2]]},"3964":{"position":[[113,2]]},"3966":{"position":[[953,2],[1426,2],[1954,2]]},"3970":{"position":[[222,2]]},"3974":{"position":[[141,2]]},"3976":{"position":[[31,2],[57,2],[563,2]]},"3978":{"position":[[591,2],[1650,2]]},"3984":{"position":[[741,2]]},"3988":{"position":[[139,2]]},"3992":{"position":[[1094,2],[1110,2],[1127,2],[1412,2]]},"3994":{"position":[[730,2]]},"3996":{"position":[[815,2]]},"4006":{"position":[[170,2],[342,2]]}}}],["方案",{"_index":1755,"t":{"239":{"position":[[106,2]]},"245":{"position":[[137,2]]},"1068":{"position":[[13,2]]},"1566":{"position":[[298,2]]},"2717":{"position":[[135,2]]},"2915":{"position":[[5,2],[21,2],[147,2],[249,2]]},"2917":{"position":[[5,2]]},"2919":{"position":[[11,2],[137,2],[145,2]]},"2921":{"position":[[20,2],[50,2]]},"2943":{"position":[[441,2]]}}}],["方法",{"_index":315,"t":{"19":{"position":[[715,2],[823,2]]},"32":{"position":[[33,2]]},"112":{"position":[[505,2],[636,2],[1274,2]]},"127":{"position":[[122,2]]},"133":{"position":[[665,2]]},"135":{"position":[[65,2]]},"146":{"position":[[976,2]]},"150":{"position":[[143,2]]},"152":{"position":[[69,2]]},"186":{"position":[[56,2]]},"204":{"position":[[16,2],[49,2]]},"210":{"position":[[43,2],[100,2],[123,2],[203,2],[218,2],[558,2],[627,2]]},"214":{"position":[[11,2],[18,2],[33,2]]},"216":{"position":[[100,2]]},"218":{"position":[[250,2],[279,2],[299,2]]},"243":{"position":[[24,2]]},"267":{"position":[[48,2]]},"278":{"position":[[169,2],[240,2],[267,2]]},"284":{"position":[[143,2],[330,2]]},"329":{"position":[[150,2],[157,2]]},"336":{"position":[[81,2]]},"344":{"position":[[425,2]]},"346":{"position":[[509,2]]},"348":{"position":[[454,2]]},"365":{"position":[[28,2]]},"369":{"position":[[101,2]]},"421":{"position":[[10,2]]},"423":{"position":[[68,2]]},"453":{"position":[[85,2]]},"463":{"position":[[84,2]]},"494":{"position":[[385,2]]},"500":{"position":[[40,2]]},"528":{"position":[[617,2]]},"530":{"position":[[821,2]]},"534":{"position":[[184,2]]},"567":{"position":[[39,2],[45,2],[171,2],[276,2],[373,2]]},"570":{"position":[[44,2]]},"587":{"position":[[2142,2],[2158,2]]},"591":{"position":[[76,2]]},"604":{"position":[[44,2]]},"606":{"position":[[1330,2]]},"612":{"position":[[49,2]]},"623":{"position":[[29,2]]},"625":{"position":[[40,2]]},"627":{"position":[[36,2]]},"677":{"position":[[13,2],[43,2],[116,2],[196,2]]},"698":{"position":[[28,2]]},"704":{"position":[[13,2],[43,2],[116,2],[196,2]]},"773":{"position":[[80,2]]},"810":{"position":[[18,2]]},"812":{"position":[[18,2]]},"814":{"position":[[18,2]]},"816":{"position":[[18,2]]},"818":{"position":[[31,2]]},"846":{"position":[[32,2],[101,2],[147,2]]},"862":{"position":[[413,2]]},"933":{"position":[[39,2],[45,2],[171,2],[276,2],[373,2]]},"939":{"position":[[61,2]]},"1039":{"position":[[822,2]]},"1041":{"position":[[392,2],[1015,2]]},"1052":{"position":[[54,2]]},"1103":{"position":[[202,2]]},"1107":{"position":[[157,2]]},"1111":{"position":[[18,2]]},"1113":{"position":[[18,2]]},"1115":{"position":[[18,2]]},"1117":{"position":[[73,2]]},"1119":{"position":[[18,2]]},"1121":{"position":[[18,2]]},"1123":{"position":[[18,2]]},"1129":{"position":[[29,2],[785,2]]},"1194":{"position":[[445,2]]},"1196":{"position":[[23,2]]},"1198":{"position":[[32,2]]},"1234":{"position":[[774,2],[856,2],[872,2]]},"1273":{"position":[[5,2]]},"1275":{"position":[[40,2]]},"1277":{"position":[[262,2]]},"1279":{"position":[[40,2],[47,2],[103,2],[155,2],[437,2],[494,2],[650,2],[872,2],[981,2]]},"1368":{"position":[[737,2]]},"1392":{"position":[[211,2]]},"1394":{"position":[[39,2]]},"1396":{"position":[[0,2],[25,2],[59,2],[68,2]]},"1424":{"position":[[872,2],[1074,2],[1154,2],[1303,2],[1401,2],[1533,2],[1649,2],[1700,2],[1796,2],[2023,2]]},"1430":{"position":[[56,2]]},"1438":{"position":[[2,2]]},"1539":{"position":[[1183,2],[1640,2],[1670,2],[1837,2],[1872,2]]},"1541":{"position":[[45,2]]},"1557":{"position":[[879,2]]},"1572":{"position":[[35,2]]},"1576":{"position":[[73,2],[114,2],[183,2]]},"1580":{"position":[[313,2],[456,2]]},"1584":{"position":[[96,2]]},"1587":{"position":[[143,2]]},"1589":{"position":[[163,2],[168,2],[190,2],[210,2]]},"1594":{"position":[[5,2],[145,2],[181,2],[206,2],[308,2],[371,2]]},"1596":{"position":[[2,2]]},"1598":{"position":[[101,2]]},"1611":{"position":[[152,2],[178,2],[664,2],[722,2],[783,2]]},"1615":{"position":[[271,2]]},"1617":{"position":[[8,2],[31,2],[1096,2],[1147,2]]},"1619":{"position":[[435,2]]},"1621":{"position":[[8,2]]},"1623":{"position":[[15,2],[123,2],[176,2]]},"1625":{"position":[[19,2]]},"1627":{"position":[[65,2]]},"1631":{"position":[[44,2],[88,2]]},"1641":{"position":[[14,2],[127,2],[333,2],[471,2]]},"1643":{"position":[[32,2]]},"1645":{"position":[[24,2]]},"1649":{"position":[[16,2]]},"1651":{"position":[[25,2]]},"1657":{"position":[[53,2],[148,2]]},"1661":{"position":[[818,2],[870,2]]},"1705":{"position":[[55,2]]},"1711":{"position":[[854,2]]},"1743":{"position":[[295,2]]},"1819":{"position":[[73,2]]},"1821":{"position":[[54,2],[261,2]]},"1847":{"position":[[99,2]]},"1857":{"position":[[146,2]]},"1861":{"position":[[18,2]]},"1871":{"position":[[101,2]]},"1875":{"position":[[670,2]]},"1901":{"position":[[664,2]]},"1903":{"position":[[453,2],[460,2],[557,2],[586,2],[636,2],[644,2]]},"1925":{"position":[[353,2],[484,2],[1136,2]]},"1933":{"position":[[453,2]]},"1951":{"position":[[134,2],[413,2],[472,2]]},"1955":{"position":[[34,2]]},"2182":{"position":[[276,2]]},"2184":{"position":[[229,2]]},"2186":{"position":[[35,2]]},"2188":{"position":[[35,2]]},"2199":{"position":[[18,2]]},"2206":{"position":[[18,2]]},"2241":{"position":[[34,2]]},"2255":{"position":[[82,2]]},"2264":{"position":[[65,2],[87,2]]},"2269":{"position":[[46,2]]},"2272":{"position":[[12,2]]},"2274":{"position":[[16,2]]},"2278":{"position":[[27,2],[132,2]]},"2281":{"position":[[12,2]]},"2283":{"position":[[16,2],[79,2]]},"2285":{"position":[[11,2]]},"2377":{"position":[[41,2]]},"2379":{"position":[[68,2]]},"2393":{"position":[[123,2]]},"2395":{"position":[[142,2]]},"2404":{"position":[[43,2]]},"2442":{"position":[[118,2],[137,2],[141,2]]},"2446":{"position":[[18,2]]},"2478":{"position":[[501,2]]},"2526":{"position":[[37,2]]},"2579":{"position":[[619,2]]},"2686":{"position":[[25,2],[34,2]]},"2692":{"position":[[21,2]]},"2694":{"position":[[34,2]]},"2709":{"position":[[285,2]]},"2725":{"position":[[647,2],[2644,2]]},"2727":{"position":[[136,2],[889,2]]},"2729":{"position":[[71,2],[197,2]]},"2776":{"position":[[50,2]]},"2792":{"position":[[148,2]]},"2817":{"position":[[31,2],[93,2],[233,2]]},"2819":{"position":[[76,2],[549,2]]},"2821":{"position":[[104,2]]},"2881":{"position":[[112,2]]},"2933":{"position":[[513,2],[628,2]]},"2937":{"position":[[131,2]]},"2949":{"position":[[476,2]]},"2951":{"position":[[31,2]]},"2963":{"position":[[495,2]]},"3023":{"position":[[815,2],[867,2]]},"3118":{"position":[[92,2]]},"3126":{"position":[[395,2],[500,2],[525,2]]},"3150":{"position":[[39,2],[77,2],[91,2],[162,2]]},"3154":{"position":[[217,2],[294,2],[533,2],[616,2],[700,2],[754,2]]},"3168":{"position":[[92,2]]},"3173":{"position":[[15,2]]},"3175":{"position":[[18,2]]},"3177":{"position":[[18,2]]},"3179":{"position":[[22,2]]},"3181":{"position":[[33,2]]},"3183":{"position":[[23,2]]},"3185":{"position":[[34,2]]},"3187":{"position":[[29,2]]},"3189":{"position":[[411,2]]},"3194":{"position":[[54,2],[79,2],[630,2]]},"3224":{"position":[[13,2],[1332,2],[1782,2],[1860,2]]},"3258":{"position":[[508,2]]},"3273":{"position":[[568,2]]},"3275":{"position":[[247,2],[385,2]]},"3289":{"position":[[73,2],[160,2]]},"3296":{"position":[[44,2],[70,2]]},"3360":{"position":[[137,2],[168,2],[172,2]]},"3375":{"position":[[26,2]]},"3405":{"position":[[92,2]]},"3416":{"position":[[51,2]]},"3448":{"position":[[35,2],[194,2],[392,2],[456,2],[886,2],[979,2],[1246,2],[1261,2],[1362,2],[1392,2]]},"3460":{"position":[[68,2]]},"3470":{"position":[[88,2]]},"3539":{"position":[[44,2]]},"3551":{"position":[[285,2],[509,2]]},"3553":{"position":[[264,2],[376,2]]},"3555":{"position":[[285,2],[415,2]]},"3557":{"position":[[287,2],[422,2]]},"3559":{"position":[[296,2],[446,2]]},"3565":{"position":[[208,2]]},"3585":{"position":[[108,2]]},"3626":{"position":[[568,2]]},"3636":{"position":[[106,2],[302,2],[419,2]]},"3672":{"position":[[67,2]]},"3676":{"position":[[149,2]]},"3680":{"position":[[350,2],[411,2]]},"3692":{"position":[[62,2]]},"3716":{"position":[[69,2]]},"3727":{"position":[[49,2]]},"3740":{"position":[[66,2],[370,2]]},"3750":{"position":[[237,2]]},"3752":{"position":[[32,2],[59,2],[83,2]]},"3779":{"position":[[1578,2]]},"3781":{"position":[[41,2]]},"3783":{"position":[[1233,2]]},"3793":{"position":[[39,2],[228,2]]},"3802":{"position":[[2335,2]]},"3806":{"position":[[91,2],[2699,2],[2730,2],[3227,2],[3247,2]]},"3810":{"position":[[43,2]]},"3819":{"position":[[15,2],[1558,2]]},"3826":{"position":[[246,2]]},"3830":{"position":[[53,2],[184,2],[325,2]]},"3834":{"position":[[29,2]]},"3844":{"position":[[928,2],[1313,2]]},"3858":{"position":[[62,2]]},"3894":{"position":[[62,2]]},"3910":{"position":[[558,2],[601,2],[2179,2],[2234,2],[2362,2],[2402,2]]},"3912":{"position":[[897,2],[957,2],[1016,2],[1257,2],[1580,2],[2035,2],[2331,2]]},"3914":{"position":[[1350,2],[2104,2]]},"3916":{"position":[[1550,2],[1932,2]]},"3918":{"position":[[936,2],[1260,2]]},"3920":{"position":[[1069,2]]},"3922":{"position":[[324,2],[459,2],[491,2],[770,2],[817,2],[850,2],[1492,2],[2322,2]]},"3924":{"position":[[236,2],[765,2],[851,2],[1744,2],[1949,2]]},"3930":{"position":[[448,2],[749,2]]},"3934":{"position":[[64,2]]},"3936":{"position":[[174,2],[390,2]]},"3938":{"position":[[1010,2]]},"3940":{"position":[[55,2],[458,2]]},"3942":{"position":[[19,2]]},"3944":{"position":[[92,2]]},"3952":{"position":[[171,2],[293,2],[588,2]]},"3954":{"position":[[653,2]]},"3960":{"position":[[128,2]]},"3962":{"position":[[92,2],[428,2],[1190,2],[1983,2]]},"3964":{"position":[[346,2],[400,2],[672,2]]},"3966":{"position":[[399,2],[712,2],[771,2],[1239,2],[1741,2]]},"3968":{"position":[[275,2],[711,2]]},"3970":{"position":[[179,2]]},"3972":{"position":[[118,2],[125,2],[225,2]]},"3974":{"position":[[108,2]]},"3976":{"position":[[237,2],[287,2],[435,2]]},"3978":{"position":[[319,2],[564,2],[1432,2]]},"3980":{"position":[[144,2]]},"3982":{"position":[[373,2]]},"3984":{"position":[[245,2],[825,2],[1041,2]]},"3986":{"position":[[88,2],[144,2],[528,2],[1645,2]]},"3992":{"position":[[437,2],[534,2],[602,2],[605,2],[938,2],[1271,2],[1861,2],[3127,2]]},"3996":{"position":[[229,2],[622,2],[1637,2]]},"3998":{"position":[[675,2]]},"4000":{"position":[[35,2],[137,2],[167,2],[195,2],[741,2],[771,2]]}}}],["旅行",{"_index":7519,"t":{"3142":{"position":[[176,2],[235,2]]}}}],["无一不是",{"_index":9431,"t":{"3928":{"position":[[75,4]]}}}],["无关",{"_index":3040,"t":{"585":{"position":[[431,2]]}}}],["无奈",{"_index":7733,"t":{"3242":{"position":[[84,2]]},"3910":{"position":[[81,2]]},"3934":{"position":[[2178,2]]}}}],["无异",{"_index":4137,"t":{"1366":{"position":[[22,2]]}}}],["无意间",{"_index":499,"t":{"85":{"position":[[194,3]]}}}],["无效",{"_index":3193,"t":{"612":{"position":[[113,2]]},"1753":{"position":[[331,2]]},"2503":{"position":[[136,2]]},"2745":{"position":[[282,2]]},"2747":{"position":[[317,2]]},"3430":{"position":[[1466,2],[1481,2]]},"3916":{"position":[[1999,2]]},"3918":{"position":[[3701,2]]},"3922":{"position":[[1988,2]]},"3924":{"position":[[1709,2]]},"3930":{"position":[[1261,2]]},"3936":{"position":[[566,2],[620,2]]},"3944":{"position":[[431,2]]},"3948":{"position":[[394,2]]},"3954":{"position":[[729,2]]},"3962":{"position":[[1082,2]]},"3972":{"position":[[437,2]]},"3978":{"position":[[727,2],[1388,2]]},"3982":{"position":[[375,2]]},"3984":{"position":[[468,2]]},"3986":{"position":[[562,2],[639,2],[738,2]]},"3992":{"position":[[1535,2],[1973,2],[2186,2],[2273,2],[2839,2],[2859,2],[3201,2],[3302,2],[3651,2]]},"3994":{"position":[[960,2],[1492,2]]},"3996":{"position":[[644,2],[868,2],[1182,2]]},"3998":{"position":[[648,2]]},"4006":{"position":[[324,2],[346,2],[503,2]]}}}],["无敌",{"_index":4056,"t":{"1194":{"position":[[46,2]]},"3924":{"position":[[780,2]]}}}],["无法",{"_index":345,"t":{"21":{"position":[[105,2],[113,2],[141,2]]},"23":{"position":[[87,2],[95,2],[123,2]]},"206":{"position":[[217,2]]},"218":{"position":[[30,2]]},"286":{"position":[[68,2]]},"300":{"position":[[300,2]]},"306":{"position":[[109,2]]},"308":{"position":[[274,2],[400,2]]},"310":{"position":[[260,2]]},"373":{"position":[[156,2]]},"417":{"position":[[27,2]]},"585":{"position":[[588,2]]},"587":{"position":[[2149,2]]},"675":{"position":[[193,2]]},"1392":{"position":[[192,2]]},"1394":{"position":[[176,2]]},"1432":{"position":[[145,2]]},"1481":{"position":[[29,2]]},"1711":{"position":[[732,2]]},"1781":{"position":[[458,2]]},"2231":{"position":[[87,2],[95,2],[123,2]]},"2251":{"position":[[124,2]]},"2503":{"position":[[96,2]]},"2555":{"position":[[56,2],[77,2]]},"2583":{"position":[[22,2]]},"2717":{"position":[[150,2]]},"2915":{"position":[[260,2]]},"3078":{"position":[[134,2],[165,2]]},"3088":{"position":[[91,2]]},"3096":{"position":[[102,2]]},"3108":{"position":[[171,2]]},"3122":{"position":[[25,2]]},"3152":{"position":[[37,2]]},"3168":{"position":[[48,2]]},"3389":{"position":[[21,2]]},"3416":{"position":[[312,2]]},"3914":{"position":[[2550,2]]},"3918":{"position":[[3484,2]]},"3922":{"position":[[484,2]]},"3924":{"position":[[1790,2],[2616,2]]},"3928":{"position":[[246,2]]},"3930":{"position":[[940,2],[1005,2]]},"3932":{"position":[[1381,2]]},"3934":{"position":[[852,2]]},"3942":{"position":[[208,2]]},"3950":{"position":[[608,2],[850,2]]},"3952":{"position":[[317,2]]},"3954":{"position":[[660,2]]},"3962":{"position":[[1513,2],[1885,2]]},"3964":{"position":[[562,2]]},"3966":{"position":[[1035,2]]},"3972":{"position":[[646,2]]},"3978":{"position":[[954,2]]},"3980":{"position":[[330,2],[684,2]]},"3982":{"position":[[808,2],[891,2]]},"3984":{"position":[[487,2]]},"3986":{"position":[[470,2],[1536,2],[1551,2]]},"3992":{"position":[[1569,2],[2244,2],[2430,2],[3297,2],[3973,2]]},"3994":{"position":[[1715,2]]},"3996":{"position":[[511,2],[827,2],[1054,2]]}}}],["无法访问",{"_index":7368,"t":{"3078":{"position":[[129,4]]},"3966":{"position":[[1592,4]]}}}],["无用",{"_index":177,"t":{"11":{"position":[[752,2]]},"2294":{"position":[[800,2]]},"3962":{"position":[[1652,2]]},"3966":{"position":[[1180,2]]},"4004":{"position":[[562,2]]}}}],["无用功",{"_index":8508,"t":{"3688":{"position":[[80,3]]}}}],["无疑",{"_index":5439,"t":{"1761":{"position":[[190,2]]}}}],["无私奉献",{"_index":456,"t":{"83":{"position":[[0,4]]},"164":{"position":[[0,4]]},"1511":{"position":[[1117,4],[3297,4],[3853,4]]}}}],["无缝",{"_index":3506,"t":{"756":{"position":[[88,2]]},"2635":{"position":[[33,2]]},"2662":{"position":[[33,2]]},"2862":{"position":[[376,2],[399,2]]}}}],["无脑",{"_index":6903,"t":{"2768":{"position":[[37,2]]}}}],["无规则",{"_index":6157,"t":{"2326":{"position":[[296,3]]}}}],["无论",{"_index":1771,"t":{"239":{"position":[[290,2]]},"1520":{"position":[[385,2]]},"2715":{"position":[[15,2]]},"3287":{"position":[[2705,2]]}}}],["无论是",{"_index":8457,"t":{"3626":{"position":[[2,3],[85,3]]}}}],["无间断",{"_index":6276,"t":{"2393":{"position":[[105,3],[170,3]]}}}],["无限",{"_index":5410,"t":{"1751":{"position":[[22,2]]},"2311":{"position":[[283,2],[343,2]]},"3924":{"position":[[1237,2]]},"3926":{"position":[[80,2]]},"3986":{"position":[[1826,2]]}}}],["无需",{"_index":99,"t":{"5":{"position":[[125,2]]},"7":{"position":[[121,2]]},"11":{"position":[[912,2]]},"13":{"position":[[391,2]]},"19":{"position":[[631,2]]},"127":{"position":[[190,2],[783,2]]},"133":{"position":[[648,2]]},"148":{"position":[[303,2]]},"206":{"position":[[36,2]]},"216":{"position":[[32,2],[1251,2]]},"220":{"position":[[522,2]]},"229":{"position":[[86,2]]},"245":{"position":[[253,2]]},"302":{"position":[[116,2]]},"323":{"position":[[133,2]]},"413":{"position":[[31,2]]},"445":{"position":[[785,2]]},"457":{"position":[[16,2]]},"504":{"position":[[140,2]]},"593":{"position":[[47,2]]},"625":{"position":[[5,2]]},"639":{"position":[[395,2]]},"653":{"position":[[48,2]]},"751":{"position":[[41,2]]},"846":{"position":[[20,2]]},"947":{"position":[[348,2],[498,2]]},"1056":{"position":[[399,2]]},"1194":{"position":[[31,2]]},"1311":{"position":[[442,2]]},"1353":{"position":[[48,2]]},"1412":{"position":[[1403,2]]},"1420":{"position":[[25,2]]},"1580":{"position":[[282,2],[327,2]]},"1582":{"position":[[54,2]]},"1623":{"position":[[7,2]]},"1741":{"position":[[795,2],[1557,2],[2399,2]]},"1769":{"position":[[91,2]]},"1771":{"position":[[87,2]]},"1777":{"position":[[156,2]]},"1795":{"position":[[2944,2]]},"1841":{"position":[[77,2]]},"1869":{"position":[[49,2]]},"1903":{"position":[[447,2]]},"1973":{"position":[[89,2]]},"1979":{"position":[[721,2]]},"1987":{"position":[[89,2]]},"2010":{"position":[[97,2]]},"2096":{"position":[[148,2]]},"2175":{"position":[[406,2]]},"2290":{"position":[[121,2]]},"2294":{"position":[[960,2]]},"2296":{"position":[[391,2]]},"2357":{"position":[[99,2]]},"2365":{"position":[[186,2]]},"2367":{"position":[[192,2]]},"2369":{"position":[[212,2]]},"2371":{"position":[[219,2]]},"2383":{"position":[[314,2]]},"2404":{"position":[[33,2],[45,2]]},"2466":{"position":[[33,2]]},"2534":{"position":[[53,2]]},"2536":{"position":[[170,2]]},"2625":{"position":[[52,2],[406,2]]},"2680":{"position":[[100,2]]},"2686":{"position":[[108,2]]},"2747":{"position":[[9,2]]},"2774":{"position":[[444,2],[535,2]]},"2803":{"position":[[128,2]]},"2875":{"position":[[479,2]]},"2910":{"position":[[340,2]]},"2929":{"position":[[797,2]]},"2933":{"position":[[674,2]]},"2945":{"position":[[909,2]]},"2949":{"position":[[538,2]]},"2959":{"position":[[852,2]]},"2963":{"position":[[543,2]]},"3071":{"position":[[194,2],[1020,2],[1323,2]]},"3073":{"position":[[5,2]]},"3080":{"position":[[534,2]]},"3110":{"position":[[123,2]]},"3369":{"position":[[123,2]]},"3385":{"position":[[75,2]]},"3397":{"position":[[18,2]]},"3418":{"position":[[35,2]]},"3428":{"position":[[106,2]]},"3434":{"position":[[390,2]]},"3448":{"position":[[25,2]]},"3452":{"position":[[1019,2]]},"3500":{"position":[[816,2]]},"3583":{"position":[[30,2]]},"3628":{"position":[[32,2]]},"3630":{"position":[[54,2]]},"3650":{"position":[[37,2]]},"3666":{"position":[[329,2]]},"3714":{"position":[[22,2]]},"3910":{"position":[[696,2]]},"3916":{"position":[[4015,2]]},"3918":{"position":[[3929,2]]},"3928":{"position":[[412,2],[496,2]]},"4000":{"position":[[774,2]]}}}],["无须",{"_index":4197,"t":{"1385":{"position":[[32,2]]}}}],["既有",{"_index":3994,"t":{"1125":{"position":[[20,2]]}}}],["既然",{"_index":6138,"t":{"2326":{"position":[[21,2]]}}}],["日",{"_index":379,"t":{"44":{"position":[[15,1]]},"57":{"position":[[15,1]]},"68":{"position":[[15,1]]},"160":{"position":[[17,1]]},"397":{"position":[[15,1],[53,1],[85,1],[132,1],[178,1],[219,1],[252,1],[297,1]]},"399":{"position":[[15,1],[62,1],[111,1],[163,1],[212,1],[262,1],[314,1],[363,1],[415,1],[464,1],[512,1],[554,1],[622,1],[668,1],[708,1],[755,1],[804,1],[835,1],[887,1]]},"401":{"position":[[15,1],[64,1],[116,1],[155,1],[221,1],[273,1],[320,1],[351,1],[401,1]]},"482":{"position":[[427,1],[440,1],[816,1],[839,1],[848,1],[857,1],[869,1],[888,1]]},"1969":{"position":[[23,1]]},"2391":{"position":[[91,1]]},"2418":{"position":[[722,1],[734,1],[1174,1],[1198,1],[1207,1],[1218,1],[1231,1],[1251,1]]},"2424":{"position":[[317,1],[354,1]]},"2633":{"position":[[31,1]]},"3242":{"position":[[18,1]]},"3246":{"position":[[17,1],[59,1]]},"3758":{"position":[[46,1]]},"3898":{"position":[[24,1]]},"3900":{"position":[[24,1]]},"3902":{"position":[[24,1]]},"3904":{"position":[[24,1]]},"3910":{"position":[[2105,1]]},"3912":{"position":[[31,1]]},"3926":{"position":[[30,1],[206,1],[331,1],[368,1]]},"3934":{"position":[[2626,1]]}}}],["日夜兼程",{"_index":7728,"t":{"3242":{"position":[[66,4]]},"3910":{"position":[[63,4]]},"3934":{"position":[[2160,4]]}}}],["日志",{"_index":683,"t":{"108":{"position":[[37,2]]},"110":{"position":[[45,2],[53,2],[62,2],[75,2],[99,2],[113,2]]},"112":{"position":[[28,2],[38,2],[1017,2],[1552,2]]},"114":{"position":[[37,2]]},"530":{"position":[[122,2],[465,2]]},"565":{"position":[[45,2],[53,2],[62,2],[75,2],[94,2]]},"567":{"position":[[407,2]]},"570":{"position":[[1738,2],[2053,2],[2058,2],[2098,2]]},"572":{"position":[[658,2],[1103,2],[1218,2]]},"574":{"position":[[6,2],[17,2],[32,2]]},"741":{"position":[[42,2]]},"1039":{"position":[[122,2],[465,2]]},"1073":{"position":[[53,2]]},"1424":{"position":[[425,2],[2047,2]]},"1430":{"position":[[34,2]]},"1474":{"position":[[77,2]]},"1821":{"position":[[240,2]]},"1823":{"position":[[18,2]]},"1837":{"position":[[93,2]]},"1839":{"position":[[105,2]]},"1883":{"position":[[15,2],[365,2]]},"1885":{"position":[[230,2]]},"1894":{"position":[[27,2]]},"1923":{"position":[[116,2]]},"1925":{"position":[[866,2],[1418,2]]},"1931":{"position":[[31,2]]},"1933":{"position":[[825,2]]},"2171":{"position":[[5,2],[41,2],[54,2],[137,2]]},"2261":{"position":[[208,2]]},"2472":{"position":[[52,2]]},"2674":{"position":[[193,2]]},"2740":{"position":[[109,2]]},"2749":{"position":[[14,2]]},"2819":{"position":[[555,2]]},"2831":{"position":[[111,2]]},"2838":{"position":[[30,2]]},"2981":{"position":[[490,2]]},"3009":{"position":[[262,2]]},"3078":{"position":[[160,2]]},"3254":{"position":[[618,2],[993,2],[1220,2],[1296,2]]},"3383":{"position":[[11,2]]},"3412":{"position":[[2,2],[14,2],[110,2],[115,2],[121,2],[133,2],[151,2],[158,2],[163,2],[168,2],[173,2]]},"3414":{"position":[[16,2],[21,2],[41,2],[55,2],[121,2],[201,2],[249,2],[264,2],[276,2]]},"3416":{"position":[[0,2],[10,2],[28,2],[35,2]]},"3418":{"position":[[24,2],[47,2],[69,2]]},"3420":{"position":[[301,2],[323,2]]},"3422":{"position":[[13,2]]},"3424":{"position":[[38,2],[74,2],[87,2],[170,2]]},"3426":{"position":[[23,2],[48,2],[164,2],[224,2]]},"3428":{"position":[[96,2]]},"3430":{"position":[[502,2],[507,2],[1462,2],[1493,2],[1803,2],[1864,2],[1878,2],[3199,2],[3639,2],[4501,2]]},"3432":{"position":[[135,2],[284,2],[418,2],[470,2],[516,2],[556,2],[606,2],[624,2],[633,2],[688,2],[744,2],[1291,2],[1426,2],[2119,2],[2131,2],[2139,2],[2157,2],[2616,2],[2640,2],[3153,2],[3427,2],[3439,2],[3915,2],[3927,2],[4337,2],[4353,2],[4378,2],[4538,2],[4565,2],[4842,2]]},"3434":{"position":[[1,2],[70,2],[689,2],[828,2],[1612,2],[1624,2],[1632,2],[1650,2],[2232,2],[2711,2],[2750,2]]},"3436":{"position":[[18,2]]},"3440":{"position":[[53,2],[90,2]]},"3442":{"position":[[71,2]]},"3444":{"position":[[65,2]]},"3446":{"position":[[536,2]]},"3448":{"position":[[541,2],[1378,2]]},"3450":{"position":[[53,2]]},"3452":{"position":[[475,2]]},"3458":{"position":[[571,2]]},"3460":{"position":[[54,2]]},"3462":{"position":[[44,2]]},"3464":{"position":[[256,2]]},"3466":{"position":[[41,2],[209,2],[376,2],[494,2],[611,2],[657,2],[1111,2],[1515,2],[1690,2]]},"3468":{"position":[[25,2],[94,2],[103,2],[109,2],[306,2],[348,2],[352,2]]},"3470":{"position":[[33,2],[106,2]]},"3472":{"position":[[35,2],[59,2]]},"3595":{"position":[[269,2]]},"3601":{"position":[[68,2],[1636,2]]},"3768":{"position":[[2449,2]]},"3826":{"position":[[125,2]]},"3842":{"position":[[261,2],[891,2],[1456,2],[2046,2],[2687,2],[3304,2]]},"3844":{"position":[[267,2]]},"3846":{"position":[[507,2]]},"3850":{"position":[[93,2]]},"3852":{"position":[[93,2]]},"3854":{"position":[[95,2]]},"3856":{"position":[[109,2]]},"3874":{"position":[[26,2]]},"3876":{"position":[[26,2]]},"3910":{"position":[[1385,2],[1617,2],[1725,2],[1847,2],[1990,2],[2610,2]]},"3912":{"position":[[719,2],[772,2],[1980,2],[2453,2],[2479,2],[2714,2]]},"3914":{"position":[[838,2],[1592,2],[1633,2],[1660,2],[1767,2],[1909,2],[2055,2],[2411,2],[2488,2],[2546,2],[3522,2],[3529,2],[3563,2]]},"3916":{"position":[[708,2],[738,2],[774,2],[826,2],[839,2],[916,2],[960,2],[966,2],[1283,2],[1349,2],[1925,2],[1954,2],[1979,2],[2046,2],[2438,2],[2478,2],[2488,2],[2706,2],[2712,2],[2780,2],[2834,2],[3478,2]]},"3918":{"position":[[765,2],[897,2],[965,2],[977,2],[1086,2],[1095,2],[1163,2],[3336,2],[3343,2],[3446,2],[3480,2],[3492,2],[3514,2],[3540,2],[3545,2],[3601,2],[3634,2],[3787,2],[3980,2],[4155,2]]},"3920":{"position":[[354,2],[383,2],[1713,2],[1782,2],[1982,2]]},"3922":{"position":[[157,2],[1297,2],[1318,2],[1425,2],[1431,2],[1650,2],[2063,2],[2348,2],[2389,2]]},"3924":{"position":[[92,2],[107,2],[288,2],[1174,2],[1217,2],[1347,2],[1560,2],[4516,2],[4625,2],[4763,2],[4854,2]]},"3928":{"position":[[2,2],[5,2],[68,2],[93,2],[150,2],[213,2],[289,2],[296,2],[320,2],[353,2],[371,2],[388,2],[419,2],[423,2],[436,2],[472,2],[503,2],[507,2],[529,2],[639,2],[689,2],[720,2],[854,2],[882,2],[1111,2]]},"3930":{"position":[[1492,2]]},"3932":{"position":[[154,2],[1541,2]]},"3934":{"position":[[77,2],[953,2],[1146,2]]},"3936":{"position":[[1859,2]]},"3942":{"position":[[286,2],[491,2]]},"3950":{"position":[[654,2]]},"3960":{"position":[[30,2]]},"3962":{"position":[[1268,2],[1291,2],[1721,2]]},"3966":{"position":[[143,2]]},"3978":{"position":[[427,2],[1602,2]]},"3980":{"position":[[364,2],[593,2]]},"3990":{"position":[[490,2],[672,2],[692,2],[704,2]]},"3992":{"position":[[931,2]]},"3994":{"position":[[1572,2]]}}}],["日期",{"_index":2697,"t":{"482":{"position":[[783,2],[951,2]]},"606":{"position":[[108,2],[1026,2]]},"2418":{"position":[[209,2],[219,2],[341,2],[1131,2]]},"3916":{"position":[[800,2],[975,2]]},"3934":{"position":[[2608,2]]},"3944":{"position":[[238,2]]}}}],["日本",{"_index":6584,"t":{"2559":{"position":[[1487,2],[1496,2],[1500,2]]}}}],["旧",{"_index":1132,"t":{"148":{"position":[[551,1]]},"196":{"position":[[28,1]]},"570":{"position":[[1905,1],[2250,1],[2541,1]]},"732":{"position":[[290,1]]},"747":{"position":[[621,1]]},"749":{"position":[[609,1]]},"1505":{"position":[[12,1]]},"1791":{"position":[[61,1]]},"2678":{"position":[[28,1]]},"3108":{"position":[[112,1]]},"3112":{"position":[[43,1]]},"3207":{"position":[[155,1]]},"3758":{"position":[[119,1]]},"3986":{"position":[[767,1]]}}}],["旧版本",{"_index":3725,"t":{"899":{"position":[[1342,3]]},"2391":{"position":[[73,3],[95,3]]},"3910":{"position":[[2075,3],[2160,3]]},"3912":{"position":[[1790,3]]},"3936":{"position":[[1339,3]]}}}],["旨在",{"_index":6728,"t":{"2599":{"position":[[36,2]]}}}],["早上",{"_index":6312,"t":{"2420":{"position":[[799,2],[856,2]]}}}],["早些",{"_index":4761,"t":{"1511":{"position":[[2199,2]]}}}],["早期",{"_index":2297,"t":{"363":{"position":[[32,2]]},"408":{"position":[[140,2]]}}}],["旭",{"_index":4634,"t":{"1511":{"position":[[725,1],[2405,1]]}}}],["时",{"_index":231,"t":{"13":{"position":[[425,1]]},"121":{"position":[[53,1],[161,1]]},"152":{"position":[[693,1]]},"186":{"position":[[131,1]]},"233":{"position":[[395,1]]},"237":{"position":[[72,1]]},"239":{"position":[[98,1],[151,1]]},"249":{"position":[[35,1]]},"255":{"position":[[31,1],[216,1]]},"263":{"position":[[43,1]]},"327":{"position":[[58,1]]},"336":{"position":[[211,1]]},"369":{"position":[[423,1]]},"373":{"position":[[6,1]]},"378":{"position":[[125,1]]},"429":{"position":[[68,1]]},"431":{"position":[[11,1]]},"445":{"position":[[751,1]]},"451":{"position":[[280,1]]},"457":{"position":[[10,1]]},"472":{"position":[[7,1]]},"474":{"position":[[7,1]]},"476":{"position":[[9,1]]},"478":{"position":[[10,1]]},"484":{"position":[[121,1],[169,1],[222,1],[283,1]]},"512":{"position":[[35,1]]},"518":{"position":[[547,1],[605,1],[620,1]]},"581":{"position":[[55,1]]},"606":{"position":[[1025,1]]},"677":{"position":[[113,1]]},"688":{"position":[[8,1]]},"704":{"position":[[113,1]]},"730":{"position":[[49,1]]},"801":{"position":[[36,1]]},"1068":{"position":[[78,1]]},"1269":{"position":[[216,1]]},"1286":{"position":[[88,1]]},"1289":{"position":[[18,1]]},"1313":{"position":[[494,1]]},"1385":{"position":[[30,1],[88,1]]},"1389":{"position":[[41,1]]},"1399":{"position":[[19,1]]},"1403":{"position":[[7,1]]},"1452":{"position":[[14,1]]},"1535":{"position":[[589,1]]},"1566":{"position":[[375,1]]},"1587":{"position":[[15,1]]},"1589":{"position":[[16,1]]},"1755":{"position":[[565,1]]},"1799":{"position":[[1007,1]]},"1815":{"position":[[77,1],[410,1],[579,1]]},"1832":{"position":[[76,1]]},"1901":{"position":[[395,1]]},"1903":{"position":[[620,1]]},"1931":{"position":[[28,1]]},"1973":{"position":[[88,1]]},"1987":{"position":[[88,1]]},"2010":{"position":[[96,1]]},"2296":{"position":[[425,1]]},"2345":{"position":[[859,1]]},"2361":{"position":[[396,1]]},"2379":{"position":[[19,1]]},"2424":{"position":[[128,1],[160,1]]},"2438":{"position":[[265,1]]},"2440":{"position":[[299,1]]},"2499":{"position":[[69,1]]},"2629":{"position":[[90,1],[155,1],[165,1]]},"2705":{"position":[[11,1]]},"2711":{"position":[[14,1]]},"2713":{"position":[[281,1],[681,1]]},"2717":{"position":[[126,1]]},"2727":{"position":[[18,1]]},"2733":{"position":[[91,1]]},"2768":{"position":[[1551,1]]},"2770":{"position":[[297,1]]},"2805":{"position":[[80,1]]},"2813":{"position":[[24,1]]},"2843":{"position":[[85,1]]},"2919":{"position":[[96,1],[200,1]]},"3071":{"position":[[174,1]]},"3108":{"position":[[106,1],[165,1]]},"3110":{"position":[[111,1],[150,1]]},"3112":{"position":[[37,1]]},"3118":{"position":[[274,1]]},"3120":{"position":[[9,1],[65,1],[98,1]]},"3154":{"position":[[706,1]]},"3158":{"position":[[16,1]]},"3385":{"position":[[17,1]]},"3412":{"position":[[85,1],[143,1]]},"3414":{"position":[[94,1]]},"3428":{"position":[[57,1]]},"3436":{"position":[[13,1]]},"3452":{"position":[[466,1]]},"3466":{"position":[[897,1]]},"3470":{"position":[[30,1]]},"3563":{"position":[[704,1]]},"3579":{"position":[[205,1]]},"3595":{"position":[[77,1]]},"3610":{"position":[[39,1]]},"3620":{"position":[[91,1]]},"3670":{"position":[[83,1]]},"3672":{"position":[[322,1]]},"3700":{"position":[[58,1]]},"3772":{"position":[[11,1]]},"3779":{"position":[[26,1],[88,1],[121,1],[474,1]]},"3793":{"position":[[57,1]]},"3795":{"position":[[623,1]]},"3798":{"position":[[222,1],[663,1]]},"3800":{"position":[[353,1],[395,1]]},"3802":{"position":[[25,1],[89,1],[120,1],[523,1]]},"3808":{"position":[[3244,1]]},"3810":{"position":[[1015,1]]},"3817":{"position":[[26,1],[94,1],[127,1]]},"3834":{"position":[[13,1]]},"3860":{"position":[[22,1]]},"3910":{"position":[[1101,1]]},"3912":{"position":[[1028,1],[2053,1],[2119,1]]},"3914":{"position":[[2979,1],[3292,1]]},"3916":{"position":[[1525,1],[1647,1],[1669,1],[1835,1],[2285,1],[3469,1]]},"3918":{"position":[[3340,1],[3874,1]]},"3920":{"position":[[1689,1]]},"3922":{"position":[[18,1],[2060,1]]},"3924":{"position":[[1231,1],[1754,1]]},"3930":{"position":[[891,1],[1285,1]]},"3932":{"position":[[1280,1]]},"3934":{"position":[[519,1],[885,1]]},"3942":{"position":[[285,1]]},"3952":{"position":[[367,1]]},"3958":{"position":[[318,1]]},"3962":{"position":[[14,1],[1884,1]]},"3964":{"position":[[589,1]]},"3966":{"position":[[871,1]]},"3974":{"position":[[361,1]]},"3978":{"position":[[265,1],[1146,1]]},"3980":{"position":[[790,1]]},"3982":{"position":[[463,1]]},"3984":{"position":[[534,1],[619,1],[979,1]]},"3986":{"position":[[469,1],[869,1],[1119,1],[1403,1]]},"3988":{"position":[[452,1]]},"3990":{"position":[[492,1]]},"3992":{"position":[[2208,1],[2550,1],[3797,1],[3811,1]]},"3994":{"position":[[187,1],[893,1],[1234,1]]},"3998":{"position":[[331,1],[692,1]]},"4000":{"position":[[1099,1]]},"4004":{"position":[[402,1]]}}}],["时不待我",{"_index":4731,"t":{"1511":{"position":[[1880,4]]}}}],["时代",{"_index":337,"t":{"21":{"position":[[29,2]]},"23":{"position":[[11,2]]},"1578":{"position":[[104,2]]},"1761":{"position":[[110,2],[140,2],[182,2],[310,2]]},"2231":{"position":[[11,2]]},"3608":{"position":[[22,2]]}}}],["时会",{"_index":4239,"t":{"1396":{"position":[[52,2]]},"1399":{"position":[[60,2]]},"1401":{"position":[[41,2]]},"1576":{"position":[[149,2]]},"1903":{"position":[[514,2]]},"3329":{"position":[[83,2]]},"3585":{"position":[[11,2]]}}}],["时候",{"_index":882,"t":{"121":{"position":[[194,2],[262,2],[347,2]]},"135":{"position":[[2,2]]},"179":{"position":[[42,2]]},"265":{"position":[[36,2]]},"286":{"position":[[7,2]]},"325":{"position":[[74,2]]},"331":{"position":[[34,2]]},"443":{"position":[[2,2]]},"445":{"position":[[123,2]]},"449":{"position":[[2,2]]},"455":{"position":[[81,2]]},"463":{"position":[[14,2]]},"526":{"position":[[38,2]]},"653":{"position":[[35,2],[63,2]]},"719":{"position":[[2,2]]},"751":{"position":[[37,2]]},"841":{"position":[[62,2]]},"915":{"position":[[13,2],[32,2],[72,2]]},"933":{"position":[[397,2]]},"1041":{"position":[[2,2]]},"1293":{"position":[[9,2]]},"1353":{"position":[[35,2],[63,2]]},"1412":{"position":[[64,2]]},"1414":{"position":[[2,2]]},"1424":{"position":[[419,2],[448,2],[2029,2]]},"1488":{"position":[[1634,2]]},"1511":{"position":[[1169,2]]},"1623":{"position":[[2,2]]},"1631":{"position":[[394,2]]},"1745":{"position":[[28,2],[80,2]]},"1775":{"position":[[45,2]]},"1883":{"position":[[12,2]]},"1903":{"position":[[396,2]]},"2377":{"position":[[31,2]]},"2379":{"position":[[58,2],[440,2]]},"2402":{"position":[[31,2]]},"2404":{"position":[[2,2]]},"2436":{"position":[[2,2],[39,2]]},"2472":{"position":[[2,2]]},"2474":{"position":[[2,2]]},"2497":{"position":[[41,2]]},"2508":{"position":[[55,2]]},"2613":{"position":[[47,2]]},"2657":{"position":[[33,2]]},"2690":{"position":[[362,2]]},"2715":{"position":[[19,2]]},"2770":{"position":[[269,2]]},"2836":{"position":[[1248,2]]},"2903":{"position":[[32,2]]},"2937":{"position":[[49,2],[74,2]]},"2951":{"position":[[633,2]]},"2965":{"position":[[24,2],[211,2]]},"2973":{"position":[[21,2]]},"2977":{"position":[[17,2]]},"2987":{"position":[[17,2]]},"2997":{"position":[[17,2]]},"3005":{"position":[[17,2]]},"3019":{"position":[[17,2]]},"3027":{"position":[[17,2]]},"3035":{"position":[[17,2]]},"3043":{"position":[[17,2]]},"3051":{"position":[[17,2]]},"3059":{"position":[[17,2]]},"3088":{"position":[[161,2]]},"3094":{"position":[[105,2],[137,2]]},"3118":{"position":[[244,2]]},"3158":{"position":[[2,2]]},"3289":{"position":[[2,2]]},"3337":{"position":[[25,2],[55,2],[74,2]]},"3352":{"position":[[675,2],[713,2]]},"3377":{"position":[[2,2]]},"3414":{"position":[[171,2]]},"3426":{"position":[[218,2]]},"3476":{"position":[[62,2]]},"3626":{"position":[[411,2]]},"3688":{"position":[[44,2]]},"3710":{"position":[[2,2]]},"3714":{"position":[[2,2]]},"3783":{"position":[[13,2]]},"3795":{"position":[[33,2]]},"3910":{"position":[[689,2]]},"3916":{"position":[[1691,2],[1720,2],[1751,2],[1789,2]]},"3928":{"position":[[343,2]]},"3950":{"position":[[345,2]]},"3962":{"position":[[1436,2]]},"3964":{"position":[[720,2]]},"3968":{"position":[[625,2]]},"3976":{"position":[[484,2]]},"3978":{"position":[[846,2]]}}}],["时常",{"_index":9411,"t":{"3926":{"position":[[458,2]]}}}],["时态",{"_index":2353,"t":{"388":{"position":[[4,2]]},"885":{"position":[[48,2],[212,2]]},"3960":{"position":[[237,2]]},"3996":{"position":[[140,2],[1431,2]]}}}],["时报",{"_index":10126,"t":{"3986":{"position":[[1327,2]]},"3992":{"position":[[3746,2]]}}}],["时效",{"_index":10278,"t":{"3992":{"position":[[3041,2]]}}}],["时机",{"_index":4326,"t":{"1432":{"position":[[86,2],[154,2]]},"2061":{"position":[[54,2]]},"3922":{"position":[[2024,2],[2271,2]]},"3936":{"position":[[756,2]]},"3964":{"position":[[24,2]]}}}],["时间",{"_index":386,"t":{"44":{"position":[[55,2]]},"57":{"position":[[55,2]]},"68":{"position":[[55,2]]},"112":{"position":[[1209,2]]},"127":{"position":[[1143,2],[1192,2],[1236,2]]},"152":{"position":[[681,2]]},"231":{"position":[[6,2]]},"233":{"position":[[10,2],[25,2],[138,2],[265,2],[293,2],[300,2],[345,2],[372,2],[387,2],[418,2],[424,2],[441,2],[452,2],[678,2],[685,2]]},"415":{"position":[[350,2]]},"482":{"position":[[575,2],[588,2]]},"494":{"position":[[398,2],[450,2],[502,2],[508,2],[520,2],[528,2],[582,2],[588,2],[600,2],[608,2],[671,2]]},"565":{"position":[[122,2],[149,2],[192,2]]},"570":{"position":[[1941,2],[2286,2],[2577,2]]},"606":{"position":[[118,2],[1029,2]]},"885":{"position":[[61,2]]},"933":{"position":[[409,2],[414,2]]},"1511":{"position":[[3525,2]]},"1775":{"position":[[39,2]]},"1797":{"position":[[478,2]]},"1925":{"position":[[1071,2]]},"2132":{"position":[[119,2]]},"2136":{"position":[[77,2]]},"2361":{"position":[[331,2]]},"2393":{"position":[[15,2],[22,2],[41,2],[51,2],[61,2],[98,2],[144,2],[159,2],[184,2],[204,2]]},"2398":{"position":[[33,2],[201,2]]},"2400":{"position":[[64,2]]},"2402":{"position":[[23,2],[41,2],[135,2]]},"2409":{"position":[[72,2]]},"2411":{"position":[[60,2]]},"2413":{"position":[[60,2]]},"2418":{"position":[[877,2],[890,2]]},"2424":{"position":[[42,2]]},"2426":{"position":[[81,2]]},"2428":{"position":[[83,2]]},"2430":{"position":[[67,2]]},"2432":{"position":[[67,2]]},"2436":{"position":[[34,2]]},"2674":{"position":[[449,2]]},"2910":{"position":[[271,2]]},"2991":{"position":[[356,2]]},"3039":{"position":[[266,2],[307,2],[344,2]]},"3041":{"position":[[354,2],[403,2],[447,2]]},"3088":{"position":[[31,2]]},"3110":{"position":[[2,2],[202,2]]},"3118":{"position":[[210,2]]},"3124":{"position":[[79,2]]},"3207":{"position":[[90,2]]},"3287":{"position":[[962,2]]},"3352":{"position":[[74,2]]},"3430":{"position":[[1880,2],[3643,2]]},"3432":{"position":[[4846,2]]},"3512":{"position":[[118,2]]},"3577":{"position":[[21,2]]},"3708":{"position":[[500,2]]},"3760":{"position":[[26,2],[33,2]]},"3766":{"position":[[14,2]]},"3768":{"position":[[40,2],[2425,2]]},"3777":{"position":[[424,2]]},"3793":{"position":[[167,2],[197,2]]},"3798":{"position":[[26,2],[332,2],[355,2],[384,2],[414,2],[698,2]]},"3800":{"position":[[88,2],[94,2],[220,2],[226,2],[294,2],[302,2]]},"3808":{"position":[[3007,2],[3030,2]]},"3810":{"position":[[550,2],[602,2],[662,2],[722,2]]},"3826":{"position":[[53,2],[72,2]]},"3830":{"position":[[293,2],[436,2],[514,2]]},"3908":{"position":[[319,2]]},"3912":{"position":[[61,2],[723,2],[1891,2],[1921,2]]},"3914":{"position":[[861,2],[1169,2],[1173,2],[2156,2]]},"3916":{"position":[[740,2],[2490,2],[2714,2]]},"3920":{"position":[[326,2]]},"3926":{"position":[[517,2]]},"3962":{"position":[[335,2],[443,2],[483,2],[571,2]]},"3974":{"position":[[319,2]]},"3990":{"position":[[587,2],[591,2]]},"3992":{"position":[[2147,2],[3363,2]]},"3994":{"position":[[249,2],[417,2]]},"4004":{"position":[[99,2]]}}}],["时间差",{"_index":9258,"t":{"3920":{"position":[[329,3]]},"3968":{"position":[[670,3]]},"3996":{"position":[[1094,3]]}}}],["时间推移",{"_index":8468,"t":{"3626":{"position":[[200,4]]},"3928":{"position":[[123,4]]}}}],["时间段",{"_index":7430,"t":{"3110":{"position":[[217,3]]}}}],["昂贵",{"_index":1862,"t":{"255":{"position":[[105,2]]}}}],["明",{"_index":1281,"t":{"182":{"position":[[132,1]]}}}],["明天",{"_index":4663,"t":{"1511":{"position":[[1043,2]]}}}],["明年",{"_index":4644,"t":{"1511":{"position":[[837,2]]}}}],["明文",{"_index":5219,"t":{"1672":{"position":[[50,2],[59,2]]}}}],["明星",{"_index":9397,"t":{"3926":{"position":[[289,2],[296,2]]}}}],["明显",{"_index":2154,"t":{"336":{"position":[[187,2]]},"587":{"position":[[2115,2]]}}}],["明白",{"_index":4188,"t":{"1383":{"position":[[37,2]]},"3926":{"position":[[547,2]]}}}],["明确",{"_index":2456,"t":{"408":{"position":[[118,2]]}}}],["明确性",{"_index":2270,"t":{"353":{"position":[[26,3]]}}}],["易",{"_index":1975,"t":{"300":{"position":[[189,1]]},"799":{"position":[[51,1]]},"1101":{"position":[[51,1]]},"1155":{"position":[[51,1]]},"1511":{"position":[[2404,1]]},"1896":{"position":[[0,1],[4,1]]},"2881":{"position":[[279,1]]}}}],["易于",{"_index":6200,"t":{"2341":{"position":[[149,2],[161,2]]},"3170":{"position":[[80,2]]},"3702":{"position":[[1383,2]]}}}],["易用",{"_index":6863,"t":{"2740":{"position":[[71,2]]}}}],["星",{"_index":4742,"t":{"1511":{"position":[[2017,1]]}}}],["星期",{"_index":2674,"t":{"482":{"position":[[202,2],[378,2],[408,2],[444,2],[506,2],[707,2],[721,2],[967,2],[977,2]]},"2418":{"position":[[215,2],[444,2],[738,2],[797,2],[1331,2]]},"3916":{"position":[[747,2],[2500,2]]}}}],["星期一",{"_index":2703,"t":{"482":{"position":[[871,3]]},"2418":{"position":[[1233,3]]},"2420":{"position":[[867,3],[1299,3],[2235,3]]},"3828":{"position":[[986,3],[1091,3],[1209,3]]},"3832":{"position":[[1049,3],[1155,3],[1275,3],[1395,3],[1515,3],[1635,3],[3229,3],[3335,3]]},"3842":{"position":[[306,3],[450,3],[936,3],[1080,3],[1501,3],[1645,3],[2091,3],[2235,3],[2732,3],[2876,3],[3349,3],[3493,3]]},"3844":{"position":[[312,3],[459,3],[582,3]]}}}],["星期三",{"_index":2715,"t":{"482":{"position":[[998,3]]},"2418":{"position":[[1370,3]]},"3430":{"position":[[3822,3],[3933,3],[4046,3],[4158,3],[4277,3],[4381,3]]},"3432":{"position":[[5039,3],[5150,3],[5263,3],[5375,3],[5494,3],[5598,3]]},"3601":{"position":[[108,3],[221,3],[336,3],[450,3],[571,3],[677,3],[828,3],[983,3],[1128,3],[1279,3],[1428,3]]}}}],["星期二",{"_index":6325,"t":{"2420":{"position":[[2134,3]]},"3846":{"position":[[552,3],[698,3],[821,3]]},"3850":{"position":[[138,3],[313,3]]},"3852":{"position":[[138,3],[257,3],[431,3]]},"3854":{"position":[[140,3],[259,3],[405,3]]},"3856":{"position":[[154,3]]},"3874":{"position":[[71,3],[246,3]]},"3876":{"position":[[71,3],[189,3],[363,3]]}}}],["星期五",{"_index":2701,"t":{"482":{"position":[[832,3],[875,3]]},"2418":{"position":[[1190,3],[1237,3],[1311,3]]},"3774":{"position":[[757,3],[863,3],[971,3],[1077,3],[1192,3],[1298,3],[1413,3],[1527,3],[1633,3]]},"3783":{"position":[[635,3],[755,3],[875,3],[996,3],[1117,3]]}}}],["星期六",{"_index":2700,"t":{"482":{"position":[[818,3]]},"2418":{"position":[[1176,3]]},"2420":{"position":[[2183,3]]}}}],["星期四",{"_index":2692,"t":{"482":{"position":[[741,3]]},"2418":{"position":[[1078,3]]},"3762":{"position":[[563,3],[674,3],[785,3],[896,3],[1006,3],[1117,3]]},"3764":{"position":[[172,3],[284,3],[397,3],[510,3],[623,3],[736,3]]},"3766":{"position":[[345,3],[451,3],[556,3],[661,3],[766,3],[875,3],[981,3],[1096,3],[1202,3],[1317,3],[1432,3],[1537,3],[1643,3]]},"3768":{"position":[[633,3],[743,3],[938,3],[1133,3],[1243,3],[1438,3],[1633,3],[1744,3],[1940,3],[2136,3],[2247,3],[2649,3],[2759,3],[2869,3],[2980,3],[3091,3]]},"3770":{"position":[[415,3],[1812,3],[2105,3],[3466,3],[3765,3],[3902,3],[5087,3],[5414,3]]},"3772":{"position":[[597,3],[726,3],[873,3],[978,3],[1094,3],[1211,3],[1328,3],[1445,3],[1562,3],[1679,3],[1785,3],[1902,3],[2019,3]]}}}],["星期天",{"_index":2702,"t":{"482":{"position":[[850,3]]},"2418":{"position":[[1209,3]]},"2420":{"position":[[1183,3]]}}}],["星期日",{"_index":8871,"t":{"3806":{"position":[[451,3],[594,3],[737,3],[880,3],[1024,3],[1167,3],[1856,3],[1998,3],[2140,3],[2282,3],[2424,3],[2566,3],[3684,3],[3808,3]]},"3808":{"position":[[1118,3],[1236,3],[1354,3],[1475,3],[1596,3],[2339,3],[2463,3],[2587,3],[2711,3],[2835,3]]}}}],["星辰",{"_index":4827,"t":{"1511":{"position":[[3049,2]]}}}],["映射",{"_index":3853,"t":{"986":{"position":[[7,2]]},"1761":{"position":[[387,2]]},"2674":{"position":[[453,2]]},"2682":{"position":[[23,2],[57,2]]},"2684":{"position":[[398,2],[432,2],[507,2]]},"2686":{"position":[[23,2]]},"2688":{"position":[[143,2]]},"2690":{"position":[[319,2]]},"2696":{"position":[[13,2]]},"3071":{"position":[[1238,2]]},"3078":{"position":[[167,2]]},"3936":{"position":[[857,2]]},"3992":{"position":[[2513,2],[3562,2]]},"3998":{"position":[[794,2]]}}}],["春",{"_index":4824,"t":{"1511":{"position":[[3035,1]]}}}],["春天里",{"_index":4718,"t":{"1511":{"position":[[1721,3]]}}}],["是不是",{"_index":1085,"t":{"135":{"position":[[391,3]]},"371":{"position":[[785,3]]},"2870":{"position":[[10,3]]},"2895":{"position":[[0,3]]},"3124":{"position":[[85,3]]},"3984":{"position":[[1066,3]]}}}],["是从",{"_index":6088,"t":{"2298":{"position":[[39,2]]},"3282":{"position":[[164,2]]}}}],["是否",{"_index":754,"t":{"112":{"position":[[1395,2]]},"123":{"position":[[43,2]]},"127":{"position":[[845,2],[953,2],[1044,2],[1137,2]]},"133":{"position":[[1096,2]]},"148":{"position":[[361,2]]},"152":{"position":[[694,2]]},"184":{"position":[[49,2]]},"280":{"position":[[135,2]]},"340":{"position":[[1851,2]]},"406":{"position":[[19,2]]},"415":{"position":[[295,2],[386,2],[443,2]]},"532":{"position":[[201,2]]},"587":{"position":[[806,2],[888,2],[950,2]]},"608":{"position":[[843,2],[885,2]]},"698":{"position":[[1062,2]]},"801":{"position":[[28,2]]},"960":{"position":[[290,2]]},"1073":{"position":[[46,2],[56,2]]},"1488":{"position":[[1028,2]]},"1499":{"position":[[420,2]]},"1520":{"position":[[388,2]]},"1535":{"position":[[543,2],[585,2]]},"1539":{"position":[[1891,2]]},"1557":{"position":[[91,2]]},"1641":{"position":[[43,2],[121,2],[156,2],[353,2],[516,2]]},"1649":{"position":[[21,2]]},"1651":{"position":[[14,2]]},"1657":{"position":[[137,2]]},"1661":{"position":[[245,2],[277,2],[456,2],[611,2]]},"1821":{"position":[[145,2],[185,2],[236,2]]},"1857":{"position":[[148,2]]},"1875":{"position":[[672,2]]},"1885":{"position":[[116,2],[224,2]]},"1901":{"position":[[20,2]]},"1903":{"position":[[522,2]]},"1913":{"position":[[681,2]]},"1925":{"position":[[1257,2]]},"2055":{"position":[[5,2],[74,2],[141,2]]},"2438":{"position":[[236,2]]},"2440":{"position":[[272,2]]},"2444":{"position":[[145,2],[179,2]]},"2472":{"position":[[36,2],[95,2]]},"2564":{"position":[[34,2]]},"2591":{"position":[[129,2]]},"2796":{"position":[[360,2]]},"2981":{"position":[[37,2],[116,2],[185,2],[351,2],[477,2]]},"2991":{"position":[[301,2],[392,2],[449,2]]},"3009":{"position":[[148,2],[256,2]]},"3023":{"position":[[246,2],[278,2],[453,2],[608,2]]},"3039":{"position":[[41,2],[125,2],[192,2],[260,2]]},"3041":{"position":[[56,2],[164,2],[255,2],[348,2]]},"3047":{"position":[[178,2]]},"3063":{"position":[[150,2],[716,2],[1105,2],[1180,2],[1541,2]]},"3136":{"position":[[143,2]]},"3261":{"position":[[398,2]]},"3287":{"position":[[709,2],[3034,2],[3150,2]]},"3289":{"position":[[80,2]]},"3352":{"position":[[546,2],[553,2]]},"3373":{"position":[[69,2]]},"3399":{"position":[[353,2]]},"3401":{"position":[[25,2],[34,2]]},"3405":{"position":[[50,2]]},"3430":{"position":[[1567,2]]},"3446":{"position":[[283,2]]},"3448":{"position":[[337,2],[384,2],[448,2],[593,2],[1017,2]]},"3452":{"position":[[190,2],[302,2]]},"3636":{"position":[[582,2]]},"3686":{"position":[[344,2],[419,2]]},"3698":{"position":[[289,2]]},"3706":{"position":[[142,2],[708,2],[1097,2],[1172,2],[1552,2]]},"3777":{"position":[[297,2]]},"3781":{"position":[[462,2]]},"3798":{"position":[[630,2],[659,2]]},"3808":{"position":[[3205,2],[3240,2]]},"3810":{"position":[[974,2],[1011,2]]},"3826":{"position":[[44,2],[116,2]]},"3910":{"position":[[1484,2]]},"3916":{"position":[[1290,2]]},"3918":{"position":[[759,2],[891,2]]},"3930":{"position":[[138,2]]},"3966":{"position":[[1067,2],[1421,2]]},"3970":{"position":[[81,2]]},"3974":{"position":[[213,2]]},"3978":{"position":[[1639,2]]},"3984":{"position":[[982,2]]},"3990":{"position":[[46,2]]},"3992":{"position":[[3366,2]]}}}],["是否是",{"_index":5579,"t":{"1801":{"position":[[2409,3]]},"1803":{"position":[[4364,3]]},"2055":{"position":[[207,3]]},"2057":{"position":[[250,3]]},"2790":{"position":[[822,3]]},"3934":{"position":[[300,3]]}}}],["是非",{"_index":3561,"t":{"773":{"position":[[18,2]]},"2599":{"position":[[96,2]]},"3791":{"position":[[557,2]]}}}],["昵称",{"_index":4572,"t":{"1511":{"position":[[199,2]]}}}],["显",{"_index":927,"t":{"121":{"position":[[642,1]]},"1311":{"position":[[444,1],[458,1]]},"1566":{"position":[[627,1]]},"3954":{"position":[[199,1]]}}}],["显然",{"_index":3936,"t":{"1071":{"position":[[68,2]]}}}],["显示",{"_index":1324,"t":{"186":{"position":[[151,2]]},"947":{"position":[[500,2]]},"1623":{"position":[[23,2]]},"1739":{"position":[[237,2],[417,2]]},"2359":{"position":[[471,2]]},"2375":{"position":[[36,2]]},"2517":{"position":[[53,2]]},"2540":{"position":[[31,2]]},"2555":{"position":[[79,2]]},"2749":{"position":[[8,2]]},"2836":{"position":[[1280,2]]},"3082":{"position":[[19,2]]},"3094":{"position":[[113,2]]},"3136":{"position":[[132,2]]},"3244":{"position":[[15,2]]},"3307":{"position":[[85,2]]},"3636":{"position":[[554,2],[679,2],[766,2]]},"3654":{"position":[[79,2]]},"3658":{"position":[[47,2]]},"3664":{"position":[[494,2],[540,2]]},"3668":{"position":[[12,2],[24,2]]},"3688":{"position":[[119,2],[706,2]]},"3694":{"position":[[141,2]]},"3696":{"position":[[25,2]]},"3910":{"position":[[1560,2]]},"3916":{"position":[[744,2],[1938,2],[2498,2]]},"3924":{"position":[[516,2]]},"3930":{"position":[[813,2]]},"3938":{"position":[[552,2],[1305,2]]},"3950":{"position":[[787,2]]},"3986":{"position":[[558,2]]},"3990":{"position":[[54,2]]},"3992":{"position":[[60,2],[3798,2]]},"3996":{"position":[[1256,2]]},"4000":{"position":[[1044,2]]}}}],["显示方式",{"_index":7313,"t":{"3063":{"position":[[291,4]]},"3706":{"position":[[283,4]]}}}],["显著",{"_index":1643,"t":{"225":{"position":[[18,2]]}}}],["显露",{"_index":5438,"t":{"1761":{"position":[[188,2]]}}}],["晃",{"_index":9378,"t":{"3926":{"position":[[123,1]]}}}],["晚",{"_index":9311,"t":{"3922":{"position":[[2027,1]]}}}],["晚上",{"_index":6308,"t":{"2420":{"position":[[233,2]]}}}],["普通",{"_index":1868,"t":{"255":{"position":[[234,2]]},"1541":{"position":[[10,2]]},"1570":{"position":[[19,2]]},"3360":{"position":[[132,2]]},"3998":{"position":[[673,2]]}}}],["智利",{"_index":6646,"t":{"2559":{"position":[[2147,2]]}}}],["智能",{"_index":6370,"t":{"2497":{"position":[[46,2]]},"2499":{"position":[[75,2]]},"2503":{"position":[[100,2]]},"2977":{"position":[[2,2],[21,2]]},"2987":{"position":[[2,2],[21,2]]},"2997":{"position":[[2,2],[21,2]]},"3005":{"position":[[2,2],[21,2]]},"3019":{"position":[[2,2],[21,2]]},"3027":{"position":[[2,2],[21,2]]},"3035":{"position":[[2,2],[21,2]]},"3043":{"position":[[2,2],[21,2]]},"3051":{"position":[[2,2],[21,2]]},"3059":{"position":[[2,2],[21,2]]},"3168":{"position":[[65,2]]},"3307":{"position":[[166,2]]},"3932":{"position":[[1514,2],[1591,2]]},"3996":{"position":[[266,2]]}}}],["暂",{"_index":2000,"t":{"304":{"position":[[72,1]]},"633":{"position":[[39,1]]},"2321":{"position":[[9,1]]},"2564":{"position":[[184,1]]},"3722":{"position":[[331,1]]}}}],["暂停",{"_index":6285,"t":{"2400":{"position":[[179,2]]},"3795":{"position":[[11,2]]},"3800":{"position":[[131,2]]},"3852":{"position":[[45,2]]}}}],["暂时",{"_index":2335,"t":{"373":{"position":[[167,2]]},"1399":{"position":[[0,2],[64,2]]},"1405":{"position":[[44,2]]},"1408":{"position":[[1087,2]]}}}],["暴露出",{"_index":1973,"t":{"300":{"position":[[176,3]]},"3686":{"position":[[61,3]]}}}],["曝光",{"_index":4548,"t":{"1509":{"position":[[233,2]]}}}],["曝光率",{"_index":4542,"t":{"1509":{"position":[[168,3]]}}}],["更",{"_index":452,"t":{"81":{"position":[[9,1],[13,1],[17,1]]},"85":{"position":[[103,1],[124,1],[138,1],[143,1]]},"121":{"position":[[736,1],[739,1]]},"154":{"position":[[26,1],[32,1]]},"194":{"position":[[26,1],[32,1]]},"204":{"position":[[472,1],[478,1]]},"233":{"position":[[304,1]]},"237":{"position":[[1360,1],[1366,1]]},"255":{"position":[[151,1],[158,1]]},"257":{"position":[[26,1],[32,1]]},"371":{"position":[[661,1]]},"401":{"position":[[382,1]]},"408":{"position":[[86,1],[154,1],[158,1]]},"425":{"position":[[26,1],[32,1]]},"435":{"position":[[1157,1]]},"441":{"position":[[60,1]]},"465":{"position":[[26,1],[32,1]]},"504":{"position":[[307,1]]},"526":{"position":[[49,1]]},"534":{"position":[[738,1]]},"536":{"position":[[26,1],[32,1]]},"544":{"position":[[144,1]]},"550":{"position":[[627,1]]},"562":{"position":[[26,1],[32,1]]},"565":{"position":[[77,1]]},"639":{"position":[[447,1]]},"736":{"position":[[26,1],[32,1]]},"756":{"position":[[40,1]]},"775":{"position":[[26,1],[32,1]]},"799":{"position":[[46,1],[50,1]]},"836":{"position":[[352,1]]},"1037":{"position":[[311,1]]},"1101":{"position":[[46,1],[50,1]]},"1153":{"position":[[26,1],[32,1]]},"1155":{"position":[[46,1],[50,1]]},"1311":{"position":[[524,1]]},"1317":{"position":[[524,1]]},"1389":{"position":[[267,1]]},"1403":{"position":[[64,1],[70,1]]},"1418":{"position":[[293,1]]},"1430":{"position":[[84,1],[86,1]]},"1511":{"position":[[148,1],[170,1],[1516,1],[3817,1],[3998,1],[4002,1],[4006,1]]},"1513":{"position":[[44,1]]},"1530":{"position":[[107,1]]},"1547":{"position":[[426,1]]},"1549":{"position":[[497,1]]},"1561":{"position":[[25,1]]},"1566":{"position":[[424,1]]},"1641":{"position":[[461,1]]},"1685":{"position":[[166,1],[183,1]]},"1707":{"position":[[92,1]]},"1775":{"position":[[3809,1]]},"1781":{"position":[[466,1]]},"1887":{"position":[[261,1]]},"1913":{"position":[[1377,1]]},"1919":{"position":[[640,1],[835,1]]},"1925":{"position":[[1562,1]]},"1927":{"position":[[882,1]]},"1931":{"position":[[18,1]]},"1933":{"position":[[1002,1]]},"1935":{"position":[[500,1]]},"1939":{"position":[[16,1]]},"1941":{"position":[[1250,1]]},"1943":{"position":[[447,1]]},"1965":{"position":[[3,1]]},"2144":{"position":[[67,1]]},"2175":{"position":[[291,1]]},"2261":{"position":[[60,1],[64,1],[68,1],[264,1],[268,1],[272,1]]},"2321":{"position":[[92,1]]},"2326":{"position":[[254,1]]},"2331":{"position":[[47,1],[568,1]]},"2333":{"position":[[139,1]]},"2354":{"position":[[83,1]]},"2373":{"position":[[200,1],[227,1]]},"2532":{"position":[[88,1],[92,1],[96,1]]},"2538":{"position":[[485,1]]},"2561":{"position":[[26,1],[32,1]]},"2564":{"position":[[118,1],[122,1],[176,1],[199,1]]},"2573":{"position":[[194,1]]},"2593":{"position":[[3,1]]},"2609":{"position":[[41,1]]},"2611":{"position":[[26,1],[32,1]]},"2698":{"position":[[26,1],[32,1]]},"2717":{"position":[[435,1],[441,1]]},"2737":{"position":[[26,1],[32,1]]},"2740":{"position":[[131,1]]},"2751":{"position":[[28,1],[35,1]]},"2764":{"position":[[111,1]]},"2856":{"position":[[1956,1]]},"2879":{"position":[[108,1]]},"2889":{"position":[[31,1]]},"2897":{"position":[[683,1]]},"2917":{"position":[[149,1]]},"3082":{"position":[[324,1]]},"3126":{"position":[[531,1],[537,1]]},"3150":{"position":[[18,1],[182,1]]},"3158":{"position":[[19,1]]},"3170":{"position":[[79,1]]},"3189":{"position":[[421,1]]},"3205":{"position":[[26,1],[32,1]]},"3240":{"position":[[26,1],[32,1]]},"3242":{"position":[[141,1]]},"3250":{"position":[[158,1],[165,1]]},"3254":{"position":[[1176,1]]},"3265":{"position":[[140,1]]},"3267":{"position":[[657,1]]},"3269":{"position":[[553,1]]},"3271":{"position":[[238,1]]},"3273":{"position":[[980,1]]},"3298":{"position":[[26,1],[32,1]]},"3323":{"position":[[541,1],[572,1]]},"3333":{"position":[[26,1],[32,1]]},"3365":{"position":[[4,1]]},"3409":{"position":[[26,1],[32,1]]},"3426":{"position":[[16,1]]},"3432":{"position":[[999,1],[1172,1]]},"3434":{"position":[[1019,1],[1332,1]]},"3448":{"position":[[888,1]]},"3464":{"position":[[108,1],[112,1],[116,1],[312,1],[316,1],[320,1]]},"3472":{"position":[[26,1],[32,1]]},"3506":{"position":[[306,1],[647,1]]},"3510":{"position":[[100,1]]},"3547":{"position":[[817,1]]},"3551":{"position":[[408,1]]},"3589":{"position":[[560,1]]},"3595":{"position":[[469,1]]},"3605":{"position":[[26,1],[32,1]]},"3664":{"position":[[248,1]]},"3694":{"position":[[87,1],[143,1]]},"3702":{"position":[[1379,1],[1382,1]]},"3791":{"position":[[1346,1]]},"3910":{"position":[[138,1]]},"3912":{"position":[[2455,1]]},"3918":{"position":[[3019,1],[3028,1]]},"3920":{"position":[[625,1],[756,1],[1911,1]]},"3924":{"position":[[2335,1]]},"3928":{"position":[[366,1],[852,1]]},"3930":{"position":[[208,1]]},"3932":{"position":[[325,1],[668,1],[1892,1]]},"3934":{"position":[[2246,1],[2519,1]]},"3936":{"position":[[1325,1],[1932,1],[1936,1],[1940,1],[2123,1],[2127,1],[2131,1]]},"3938":{"position":[[127,1],[1187,1],[1251,1],[1307,1]]},"3950":{"position":[[238,1]]},"3978":{"position":[[385,1]]},"3984":{"position":[[266,1]]},"3990":{"position":[[763,1]]}}}],["更为",{"_index":1528,"t":{"206":{"position":[[16,2]]}}}],["更具",{"_index":4219,"t":{"1389":{"position":[[159,2]]}}}],["更加",{"_index":106,"t":{"5":{"position":[[154,2]]},"7":{"position":[[150,2]]},"112":{"position":[[1483,2]]},"206":{"position":[[244,2]]},"208":{"position":[[39,2]]},"220":{"position":[[135,2]]},"504":{"position":[[253,2]]},"1509":{"position":[[201,2]]},"1580":{"position":[[59,2],[200,2],[347,2]]},"1925":{"position":[[1345,2]]},"1933":{"position":[[558,2]]},"2290":{"position":[[150,2]]},"2881":{"position":[[274,2]]},"3156":{"position":[[51,2]]},"3250":{"position":[[202,2]]},"3727":{"position":[[99,2]]},"3804":{"position":[[419,2]]},"3920":{"position":[[1789,2]]},"3924":{"position":[[1954,2],[3550,2]]}}}],["更好",{"_index":1193,"t":{"166":{"position":[[48,2]]},"1389":{"position":[[166,2]]},"1511":{"position":[[3187,2]]},"3242":{"position":[[226,2]]},"3250":{"position":[[231,2]]},"3610":{"position":[[14,2]]},"3612":{"position":[[83,2]]},"3690":{"position":[[40,2]]},"3910":{"position":[[0,2],[11,2],[223,2]]},"3928":{"position":[[368,2]]},"3934":{"position":[[2392,2]]},"3938":{"position":[[844,2]]}}}],["更换",{"_index":1599,"t":{"216":{"position":[[1239,2]]},"220":{"position":[[78,2]]},"397":{"position":[[274,2]]},"864":{"position":[[31,2]]},"2385":{"position":[[83,2]]},"3928":{"position":[[346,2]]},"3996":{"position":[[856,2]]}}}],["更改",{"_index":1646,"t":{"225":{"position":[[44,2]]},"453":{"position":[[22,2]]},"457":{"position":[[83,2]]},"504":{"position":[[231,2]]},"532":{"position":[[144,2]]},"565":{"position":[[162,2],[167,2],[173,2]]},"567":{"position":[[60,2],[176,2],[281,2],[392,2]]},"570":{"position":[[779,2],[835,2],[1179,2]]},"677":{"position":[[111,2],[129,2]]},"704":{"position":[[111,2],[129,2]]},"713":{"position":[[39,2]]},"747":{"position":[[535,2]]},"924":{"position":[[53,2]]},"933":{"position":[[60,2],[176,2],[281,2]]},"1549":{"position":[[222,2]]},"1901":{"position":[[216,2]]},"2583":{"position":[[30,2]]},"2635":{"position":[[60,2]]},"2662":{"position":[[60,2]]},"2674":{"position":[[465,2]]},"2703":{"position":[[59,2]]},"2717":{"position":[[250,2]]},"2729":{"position":[[26,2],[63,2]]},"2731":{"position":[[41,2]]},"2733":{"position":[[62,2]]},"3819":{"position":[[1531,2]]},"3910":{"position":[[665,2],[1064,2],[1510,2]]},"3912":{"position":[[1333,2],[1629,2],[2430,2]]},"3914":{"position":[[1622,2],[2132,2],[3261,2]]},"3916":{"position":[[1628,2],[2470,2],[2852,2],[3217,2],[7082,2],[8871,2]]},"3918":{"position":[[1531,2],[2447,2],[2847,2],[3049,2],[3903,2]]},"3920":{"position":[[779,2],[1258,2],[1770,2]]},"3922":{"position":[[506,2],[933,2],[2245,2]]},"3924":{"position":[[926,2],[1903,2],[2106,2],[2563,2],[3595,2]]},"3928":{"position":[[727,2],[887,2]]},"3930":{"position":[[1369,2]]},"3932":{"position":[[923,2],[1409,2],[1601,2],[1974,2],[2230,2],[2452,2]]},"3934":{"position":[[967,2],[1209,2],[1361,2],[1518,2]]},"3936":{"position":[[697,2],[1004,2],[1333,2],[1566,2],[1869,2]]},"3938":{"position":[[675,2],[834,2],[980,2],[1194,2]]},"3940":{"position":[[542,2],[802,2],[1074,2]]},"3942":{"position":[[445,2]]},"3944":{"position":[[446,2],[639,2],[788,2]]},"3946":{"position":[[398,2]]},"3948":{"position":[[506,2]]},"3954":{"position":[[742,2]]},"3956":{"position":[[186,2],[254,2],[3142,2]]},"3958":{"position":[[352,2]]},"3960":{"position":[[593,2]]},"3962":{"position":[[9,2],[1558,2],[1831,2],[1848,2]]},"3964":{"position":[[581,2]]},"3966":{"position":[[1049,2]]},"3968":{"position":[[335,2]]},"3970":{"position":[[316,2]]},"3972":{"position":[[450,2]]},"3974":{"position":[[508,2]]},"3976":{"position":[[235,2],[471,2]]},"3978":{"position":[[1138,2]]},"3980":{"position":[[446,2]]},"3982":{"position":[[504,2]]},"3984":{"position":[[672,2]]},"3986":{"position":[[830,2]]},"3988":{"position":[[430,2]]},"3990":{"position":[[512,2]]},"3992":{"position":[[2496,2]]},"3994":{"position":[[1537,2]]},"3996":{"position":[[1273,2]]},"3998":{"position":[[72,2],[433,2]]},"4000":{"position":[[1186,2]]},"4004":{"position":[[461,2]]},"4006":{"position":[[634,2]]}}}],["更新",{"_index":1919,"t":{"276":{"position":[[94,2]]},"453":{"position":[[31,2]]},"532":{"position":[[34,2]]},"552":{"position":[[407,2]]},"565":{"position":[[136,2]]},"570":{"position":[[1849,2],[2013,2],[2194,2],[2358,2],[2485,2],[2649,2],[2683,2]]},"591":{"position":[[64,2]]},"653":{"position":[[61,2]]},"659":{"position":[[74,2]]},"719":{"position":[[11,2]]},"734":{"position":[[82,2]]},"751":{"position":[[22,2]]},"763":{"position":[[5,2]]},"767":{"position":[[108,2],[317,2],[439,2]]},"769":{"position":[[138,2],[436,2]]},"773":{"position":[[454,2]]},"933":{"position":[[412,2],[604,2]]},"1006":{"position":[[39,2],[106,2]]},"1010":{"position":[[73,2]]},"1353":{"position":[[13,2],[16,2],[50,2],[61,2]]},"1483":{"position":[[986,2]]},"1511":{"position":[[1427,2],[3455,2]]},"1547":{"position":[[277,2]]},"1549":{"position":[[366,2]]},"1795":{"position":[[667,2]]},"1832":{"position":[[111,2]]},"2937":{"position":[[34,2],[68,2],[90,2],[1039,2]]},"2973":{"position":[[44,2],[112,2]]},"3142":{"position":[[112,2],[173,2]]},"3207":{"position":[[79,2],[150,2]]},"3209":{"position":[[118,2]]},"3211":{"position":[[38,2]]},"3213":{"position":[[41,2]]},"3224":{"position":[[1448,2]]},"3258":{"position":[[415,2]]},"3267":{"position":[[406,2]]},"3269":{"position":[[25,2],[97,2],[222,2],[355,2],[495,2],[555,2]]},"3323":{"position":[[362,2]]},"3470":{"position":[[109,2]]},"3522":{"position":[[526,2],[705,2]]},"3620":{"position":[[371,2],[401,2]]},"3626":{"position":[[79,2],[417,2],[562,2]]},"3770":{"position":[[3380,2]]},"3772":{"position":[[21,2]]},"3777":{"position":[[422,2]]},"3779":{"position":[[475,2]]},"3783":{"position":[[1524,2]]},"3785":{"position":[[655,2],[1124,2]]},"3798":{"position":[[696,2]]},"3802":{"position":[[524,2]]},"3812":{"position":[[929,2],[1692,2]]},"3819":{"position":[[121,2],[631,2],[731,2],[734,2],[1635,2]]},"3844":{"position":[[256,2],[667,2],[683,2],[866,2],[891,2]]},"3908":{"position":[[127,2]]},"3910":{"position":[[2565,2]]},"3912":{"position":[[2433,2],[2711,2]]},"3914":{"position":[[3560,2]]},"3916":{"position":[[2084,2],[2777,2]]},"3918":{"position":[[3554,2],[4145,2]]},"3920":{"position":[[1834,2],[1878,2],[1946,2]]},"3922":{"position":[[1877,2],[2296,2],[2386,2]]},"3924":{"position":[[1988,2]]},"3928":{"position":[[686,2]]},"3930":{"position":[[1419,2],[1482,2]]},"3932":{"position":[[1522,2]]},"3934":{"position":[[1151,2]]},"3936":{"position":[[769,2],[922,2]]},"3938":{"position":[[771,2]]},"3940":{"position":[[327,2],[645,2],[717,2]]},"3942":{"position":[[108,2],[481,2]]},"3944":{"position":[[548,2],[575,2]]},"3948":{"position":[[509,2]]},"3952":{"position":[[752,2]]},"3956":{"position":[[3145,2],[3185,2]]},"3958":{"position":[[355,2],[380,2]]},"3960":{"position":[[596,2]]},"3962":{"position":[[12,2],[1605,2],[1662,2],[1713,2],[1747,2],[1837,2]]},"3964":{"position":[[584,2],[622,2]]},"3966":{"position":[[1052,2],[1088,2],[1130,2],[1222,2],[1297,2]]},"3968":{"position":[[338,2],[405,2]]},"3970":{"position":[[319,2],[366,2]]},"3972":{"position":[[453,2],[487,2],[528,2]]},"3974":{"position":[[511,2],[546,2]]},"3976":{"position":[[474,2],[550,2]]},"3978":{"position":[[1141,2],[1163,2],[1208,2],[1330,2],[1608,2]]},"3980":{"position":[[449,2],[479,2],[518,2],[576,2]]},"3982":{"position":[[562,2],[596,2],[630,2],[661,2]]},"3984":{"position":[[675,2],[724,2]]},"3986":{"position":[[292,2],[833,2],[886,2],[919,2],[989,2]]},"3988":{"position":[[433,2]]},"3990":{"position":[[515,2],[538,2],[571,2],[670,2],[702,2]]},"3992":{"position":[[1490,2],[2499,2],[2543,2],[2587,2]]},"3994":{"position":[[1513,2],[1540,2]]},"3996":{"position":[[455,2],[1276,2],[1302,2],[1337,2],[1450,2],[1472,2],[1492,2],[1520,2]]},"3998":{"position":[[407,2],[764,2]]},"4000":{"position":[[1209,2]]},"4002":{"position":[[222,2],[381,2]]},"4004":{"position":[[162,2],[504,2],[519,2],[541,2],[574,2]]},"4006":{"position":[[179,2],[713,2],[733,2]]}}}],["更新包",{"_index":4989,"t":{"1547":{"position":[[303,3]]},"1549":{"position":[[392,3]]}}}],["更迭",{"_index":8415,"t":{"3610":{"position":[[37,2]]}}}],["曾经",{"_index":9405,"t":{"3926":{"position":[[400,2],[526,2]]}}}],["替代",{"_index":301,"t":{"19":{"position":[[500,2]]},"338":{"position":[[1259,2]]},"1412":{"position":[[811,2]]},"1580":{"position":[[260,2]]},"1621":{"position":[[923,2]]},"1861":{"position":[[39,2]]},"2175":{"position":[[247,2],[437,2]]},"2199":{"position":[[59,2]]},"2391":{"position":[[115,2]]},"2674":{"position":[[167,2]]},"2731":{"position":[[177,2]]},"3522":{"position":[[1210,2]]},"3563":{"position":[[679,2]]},"3692":{"position":[[134,2]]},"3716":{"position":[[869,2]]},"3740":{"position":[[60,2]]},"3916":{"position":[[1883,2]]},"3938":{"position":[[1082,2]]}}}],["替代选择",{"_index":5424,"t":{"1755":{"position":[[1064,4]]}}}],["替换",{"_index":1129,"t":{"148":{"position":[[541,2]]},"570":{"position":[[2368,2]]},"1269":{"position":[[20,2],[196,2],[219,2]]},"1695":{"position":[[43,2]]},"1791":{"position":[[44,2]]},"1799":{"position":[[60,2],[718,2],[780,2]]},"1801":{"position":[[3172,2],[3441,2]]},"1803":{"position":[[5165,2],[5672,2]]},"1805":{"position":[[464,2],[523,2]]},"1821":{"position":[[336,2],[400,2]]},"2357":{"position":[[69,2]]},"2391":{"position":[[45,2]]},"2639":{"position":[[24,2],[135,2]]},"2666":{"position":[[24,2],[135,2]]},"2703":{"position":[[99,2]]},"2790":{"position":[[1035,2]]},"2792":{"position":[[13,2],[154,2]]},"2796":{"position":[[555,2],[751,2]]},"3325":{"position":[[10,2]]},"3345":{"position":[[308,2]]},"3492":{"position":[[308,2]]},"3537":{"position":[[210,2]]},"3670":{"position":[[84,2]]},"3698":{"position":[[293,2]]},"3740":{"position":[[731,2]]},"3754":{"position":[[27,2]]},"3758":{"position":[[97,2]]},"3783":{"position":[[1548,2]]},"3924":{"position":[[730,2]]},"3930":{"position":[[1345,2],[1354,2]]},"3944":{"position":[[317,2],[324,2]]},"3948":{"position":[[44,2]]},"3966":{"position":[[240,2]]},"3980":{"position":[[68,2]]},"3986":{"position":[[242,2]]},"3992":{"position":[[1097,2]]},"3996":{"position":[[876,2]]}}}],["替换成",{"_index":4172,"t":{"1379":{"position":[[92,3]]}}}],["最为",{"_index":6105,"t":{"2309":{"position":[[123,2]]},"2579":{"position":[[9,2]]},"2923":{"position":[[12,2]]},"2939":{"position":[[12,2]]}}}],["最优",{"_index":2243,"t":{"340":{"position":[[1960,2]]}}}],["最低",{"_index":7251,"t":{"2919":{"position":[[81,2],[155,2],[184,2],[190,2]]},"3350":{"position":[[174,2]]},"3432":{"position":[[514,2]]},"3434":{"position":[[826,2]]},"3468":{"position":[[101,2],[350,2]]}}}],["最佳",{"_index":2293,"t":{"361":{"position":[[30,2]]},"373":{"position":[[2,2],[15,2]]}}}],["最先",{"_index":5778,"t":{"1901":{"position":[[11,2]]},"1905":{"position":[[51,2]]}}}],["最初",{"_index":2423,"t":{"401":{"position":[[370,2]]},"2621":{"position":[[28,2]]},"3432":{"position":[[742,2]]}}}],["最后",{"_index":75,"t":{"3":{"position":[[897,2]]},"220":{"position":[[198,2]]},"306":{"position":[[175,2]]},"310":{"position":[[650,2]]},"312":{"position":[[11,2]]},"340":{"position":[[1579,2],[1760,2]]},"350":{"position":[[509,2]]},"365":{"position":[[31,2]]},"369":{"position":[[46,2]]},"482":{"position":[[477,2],[698,2],[736,2],[932,2],[941,2]]},"1066":{"position":[[164,2]]},"1416":{"position":[[406,2]]},"1422":{"position":[[84,2]]},"1440":{"position":[[478,2]]},"1799":{"position":[[699,2]]},"1805":{"position":[[445,2]]},"1807":{"position":[[768,2]]},"1809":{"position":[[397,2]]},"1905":{"position":[[74,2]]},"2418":{"position":[[772,2],[1014,2],[1073,2],[1298,2],[1307,2]]},"2420":{"position":[[1343,2],[1934,2],[1981,2],[2080,2],[2130,2]]},"2581":{"position":[[584,2]]},"3118":{"position":[[356,2]]},"3126":{"position":[[398,2]]},"3828":{"position":[[810,2]]},"3832":{"position":[[783,2]]},"3944":{"position":[[326,2]]}}}],["最大",{"_index":1966,"t":{"300":{"position":[[69,2]]},"587":{"position":[[330,2]]},"1385":{"position":[[109,2]]},"1422":{"position":[[116,2]]},"1572":{"position":[[558,2]]},"1635":{"position":[[484,2]]},"1747":{"position":[[50,2],[74,2]]},"1753":{"position":[[173,2]]},"1755":{"position":[[756,2],[961,2],[1196,2]]},"3393":{"position":[[43,2]]},"3432":{"position":[[560,2],[683,2]]},"3640":{"position":[[463,2]]},"3798":{"position":[[465,2],[536,2]]},"3800":{"position":[[190,2],[247,2],[273,2]]},"3808":{"position":[[3059,2],[3104,2]]},"3810":{"position":[[791,2],[869,2]]}}}],["最大值",{"_index":5171,"t":{"1635":{"position":[[461,3]]}}}],["最好",{"_index":6108,"t":{"2311":{"position":[[115,2]]},"2807":{"position":[[0,2]]},"2910":{"position":[[450,2]]},"2915":{"position":[[38,2]]}}}],["最小",{"_index":3061,"t":{"587":{"position":[[249,2],[461,2]]},"1635":{"position":[[536,2]]},"2264":{"position":[[39,2],[81,2]]},"2281":{"position":[[335,2]]},"3108":{"position":[[208,2]]},"3350":{"position":[[35,2],[147,2]]}}}],["最小值",{"_index":5168,"t":{"1635":{"position":[[88,3],[513,3]]}}}],["最差",{"_index":6165,"t":{"2331":{"position":[[215,2]]}}}],["最新",{"_index":408,"t":{"48":{"position":[[134,2],[146,2]]},"51":{"position":[[87,2]]},"62":{"position":[[87,2]]},"72":{"position":[[134,2],[146,2]]},"75":{"position":[[87,2]]},"394":{"position":[[44,2]]},"453":{"position":[[280,2],[337,2]]},"739":{"position":[[1,2]]},"1269":{"position":[[1,2]]},"1971":{"position":[[23,2]]},"1985":{"position":[[23,2]]},"2008":{"position":[[23,2]]},"2276":{"position":[[42,2]]},"2335":{"position":[[8,2]]},"2597":{"position":[[74,2]]},"2717":{"position":[[355,2]]},"2729":{"position":[[560,2],[601,2]]},"3124":{"position":[[88,2]]},"3323":{"position":[[365,2]]},"3325":{"position":[[75,2]]},"3692":{"position":[[53,2]]},"3918":{"position":[[3880,2]]},"3924":{"position":[[737,2]]},"3938":{"position":[[1001,2]]},"3968":{"position":[[477,2]]},"3978":{"position":[[1404,2]]},"3992":{"position":[[1573,2],[3992,2]]},"4004":{"position":[[40,2],[536,2]]}}}],["最新版",{"_index":424,"t":{"51":{"position":[[249,3]]},"62":{"position":[[249,3]]},"75":{"position":[[249,3]]},"1971":{"position":[[62,3]]},"1985":{"position":[[61,3]]},"2008":{"position":[[69,3]]},"2298":{"position":[[238,3]]},"3305":{"position":[[24,3]]},"3325":{"position":[[7,3]]},"3327":{"position":[[29,3]]},"3702":{"position":[[9,3]]},"3942":{"position":[[117,3]]},"3944":{"position":[[168,3]]},"3990":{"position":[[260,3]]}}}],["最早",{"_index":5628,"t":{"1803":{"position":[[5361,2]]}}}],["最爽",{"_index":4646,"t":{"1511":{"position":[[853,2]]}}}],["最终",{"_index":3344,"t":{"696":{"position":[[0,2]]},"713":{"position":[[70,2]]},"834":{"position":[[138,2]]},"836":{"position":[[199,2]]},"1279":{"position":[[611,2],[787,2]]},"1761":{"position":[[505,2]]},"1819":{"position":[[411,2]]},"1857":{"position":[[73,2]]},"1901":{"position":[[547,2]]},"2617":{"position":[[37,2]]},"2770":{"position":[[183,2]]},"3088":{"position":[[131,2]]},"3116":{"position":[[18,2]]},"3120":{"position":[[155,2]]},"3496":{"position":[[386,2]]},"3498":{"position":[[339,2]]},"3541":{"position":[[750,2]]},"3543":{"position":[[426,2]]},"3974":{"position":[[739,2]]}}}],["最舒服",{"_index":8447,"t":{"3622":{"position":[[191,3]]}}}],["最近",{"_index":2698,"t":{"482":{"position":[[786,2],[825,2],[901,2]]},"2418":{"position":[[1134,2],[1183,2],[1263,2]]},"3110":{"position":[[215,2]]},"3798":{"position":[[380,2]]},"3810":{"position":[[658,2]]}}}],["最高",{"_index":5861,"t":{"1923":{"position":[[10,2]]},"2544":{"position":[[58,2]]},"2564":{"position":[[136,2]]},"2915":{"position":[[32,2]]},"2919":{"position":[[74,2]]}}}],["月",{"_index":377,"t":{"44":{"position":[[10,1]]},"57":{"position":[[10,1]]},"68":{"position":[[10,1]]},"160":{"position":[[12,1]]},"397":{"position":[[10,1],[48,1],[80,1],[127,1],[173,1],[214,1],[247,1],[292,1]]},"399":{"position":[[10,1],[57,1],[106,1],[158,1],[207,1],[257,1],[309,1],[358,1],[410,1],[459,1],[507,1],[549,1],[617,1],[663,1],[703,1],[750,1],[799,1],[830,1],[882,1]]},"401":{"position":[[10,1],[59,1],[111,1],[150,1],[216,1],[268,1],[315,1],[346,1],[396,1]]},"472":{"position":[[11,1]]},"474":{"position":[[11,1]]},"476":{"position":[[13,1]]},"478":{"position":[[14,1]]},"480":{"position":[[444,1],[774,1]]},"482":{"position":[[931,1],[963,1]]},"484":{"position":[[125,1],[173,1],[226,1],[287,1]]},"494":{"position":[[365,1]]},"1511":{"position":[[700,1],[3106,1]]},"1969":{"position":[[18,1]]},"2391":{"position":[[88,1]]},"2418":{"position":[[1297,1],[1327,1]]},"2420":{"position":[[700,1],[705,1],[1075,1],[1080,1],[1131,1],[1136,1],[1294,1],[2231,1]]},"2424":{"position":[[313,1],[350,1]]},"2633":{"position":[[26,1]]},"3242":{"position":[[13,1]]},"3246":{"position":[[13,1],[54,1]]},"3758":{"position":[[41,1]]},"3804":{"position":[[1040,1]]},"3808":{"position":[[404,1]]},"3898":{"position":[[19,1]]},"3900":{"position":[[19,1]]},"3902":{"position":[[19,1]]},"3904":{"position":[[19,1]]},"3910":{"position":[[2100,1]]},"3912":{"position":[[26,1]]},"3926":{"position":[[25,1],[201,1],[326,1],[363,1]]},"3934":{"position":[[2621,1]]}}}],["月份",{"_index":2671,"t":{"482":{"position":[[170,2],[712,2],[909,2]]},"2418":{"position":[[205,2],[212,2],[401,2],[1271,2]]},"2420":{"position":[[656,2],[972,2],[1023,2],[1399,2]]}}}],["有些",{"_index":1074,"t":{"135":{"position":[[0,2]]},"384":{"position":[[5,2],[36,2]]},"443":{"position":[[0,2]]},"449":{"position":[[0,2]]},"455":{"position":[[79,2]]},"502":{"position":[[46,2]]},"526":{"position":[[36,2]]},"653":{"position":[[33,2]]},"719":{"position":[[0,2]]},"728":{"position":[[41,2]]},"751":{"position":[[35,2]]},"846":{"position":[[36,2]]},"915":{"position":[[30,2]]},"1041":{"position":[[0,2]]},"1353":{"position":[[33,2]]},"1392":{"position":[[142,2],[209,2]]},"1412":{"position":[[20,2]]},"1414":{"position":[[0,2]]},"1623":{"position":[[0,2]]},"1631":{"position":[[392,2]]},"2402":{"position":[[29,2]]},"2404":{"position":[[0,2]]},"2436":{"position":[[0,2]]},"2472":{"position":[[0,2]]},"2474":{"position":[[0,2]]},"2903":{"position":[[30,2]]},"3110":{"position":[[209,2],[236,2]]},"3158":{"position":[[0,2]]},"3289":{"position":[[0,2]]},"3337":{"position":[[23,2]]},"3352":{"position":[[673,2]]},"3377":{"position":[[0,2]]},"3710":{"position":[[0,2]]},"3714":{"position":[[0,2]]}}}],["有人",{"_index":7750,"t":{"3242":{"position":[[273,2]]},"3910":{"position":[[270,2]]},"3934":{"position":[[2453,2]]}}}],["有关",{"_index":1325,"t":{"186":{"position":[[154,2]]},"214":{"position":[[25,2]]},"408":{"position":[[91,2]]},"1753":{"position":[[290,2]]},"2517":{"position":[[33,2]]},"2703":{"position":[[111,2]]},"3976":{"position":[[612,2]]},"3978":{"position":[[1540,2]]}}}],["有利于",{"_index":1259,"t":{"182":{"position":[[18,3]]}}}],["有别于",{"_index":4092,"t":{"1269":{"position":[[189,3]]},"1541":{"position":[[7,3]]}}}],["有助于",{"_index":7225,"t":{"2915":{"position":[[67,3]]}}}],["有序",{"_index":6146,"t":{"2326":{"position":[[125,2]]}}}],["有意思",{"_index":4617,"t":{"1511":{"position":[[584,3]]}}}],["有所",{"_index":2786,"t":{"514":{"position":[[637,2]]},"570":{"position":[[2042,2]]}}}],["有所不同",{"_index":4027,"t":{"1155":{"position":[[115,4]]}}}],["有所为有所不为",{"_index":7014,"t":{"2770":{"position":[[217,7]]}}}],["有所区别",{"_index":6051,"t":{"2243":{"position":[[120,4]]}}}],["有效",{"_index":2599,"t":{"455":{"position":[[177,2]]},"482":{"position":[[753,2],[789,2]]},"512":{"position":[[128,2]]},"544":{"position":[[161,2]]},"570":{"position":[[1281,2]]},"587":{"position":[[57,2],[952,2]]},"612":{"position":[[107,2]]},"1103":{"position":[[77,2]]},"1383":{"position":[[122,2]]},"1566":{"position":[[425,2]]},"1623":{"position":[[147,2]]},"1641":{"position":[[475,2],[490,2],[559,2],[574,2]]},"1661":{"position":[[654,2],[669,2]]},"1745":{"position":[[97,2]]},"1753":{"position":[[344,2]]},"2239":{"position":[[129,2]]},"2247":{"position":[[32,2]]},"2341":{"position":[[172,2]]},"2418":{"position":[[1092,2],[1137,2]]},"2613":{"position":[[38,2]]},"2646":{"position":[[117,2]]},"2725":{"position":[[461,2],[1002,2],[2444,2]]},"2796":{"position":[[362,2]]},"2985":{"position":[[255,2],[346,2]]},"3023":{"position":[[651,2],[666,2]]},"3063":{"position":[[1081,2],[1169,2],[1433,2]]},"3110":{"position":[[170,2]]},"3287":{"position":[[835,2],[927,2],[1003,2],[1113,2],[1149,2]]},"3289":{"position":[[82,2]]},"3389":{"position":[[75,2],[115,2],[127,2]]},"3391":{"position":[[42,2],[61,2]]},"3393":{"position":[[114,2]]},"3401":{"position":[[27,2],[36,2]]},"3416":{"position":[[6,2]]},"3446":{"position":[[323,2],[389,2],[455,2],[531,2]]},"3448":{"position":[[418,2],[481,2],[625,2],[693,2],[773,2],[854,2],[907,2],[1049,2],[1117,2],[1197,2]]},"3452":{"position":[[216,2],[328,2]]},"3686":{"position":[[408,2]]},"3706":{"position":[[1073,2],[1161,2],[1444,2]]},"3972":{"position":[[235,2]]}}}],["有效性",{"_index":1065,"t":{"133":{"position":[[643,3]]},"457":{"position":[[76,3]]},"579":{"position":[[45,3]]},"2725":{"position":[[8,3]]},"2733":{"position":[[56,3]]},"3912":{"position":[[1908,3]]},"3916":{"position":[[2175,3]]}}}],["有效期",{"_index":1106,"t":{"144":{"position":[[360,3]]},"148":{"position":[[396,3]]},"1683":{"position":[[280,3]]}}}],["有时",{"_index":8237,"t":{"3456":{"position":[[33,2]]},"3974":{"position":[[881,2],[886,2]]}}}],["有时候",{"_index":459,"t":{"83":{"position":[[11,3]]},"164":{"position":[[11,3]]},"417":{"position":[[0,3]]},"421":{"position":[[0,3]]},"1472":{"position":[[0,3]]},"1743":{"position":[[0,3]]},"1753":{"position":[[262,3]]},"1785":{"position":[[0,3]]},"2375":{"position":[[0,3]]},"2377":{"position":[[0,3]]},"2379":{"position":[[0,3]]},"2591":{"position":[[16,3]]},"2646":{"position":[[61,3]]},"2735":{"position":[[33,3]]},"3078":{"position":[[111,3]]},"3287":{"position":[[3047,3]]},"3375":{"position":[[18,3]]},"3387":{"position":[[0,3]]},"3389":{"position":[[0,3]]},"3391":{"position":[[46,3]]},"3401":{"position":[[0,3]]},"3432":{"position":[[4346,3]]},"3434":{"position":[[2720,3]]},"3466":{"position":[[33,3]]},"3522":{"position":[[87,3]]},"3524":{"position":[[0,3]]},"3563":{"position":[[84,3]]},"3585":{"position":[[0,3]]},"3680":{"position":[[0,3]]},"3690":{"position":[[33,3]]},"3692":{"position":[[33,3]]},"3696":{"position":[[0,3]]},"3698":{"position":[[33,3]]},"3766":{"position":[[0,3]]},"3772":{"position":[[0,3]]},"3783":{"position":[[0,3]]},"3938":{"position":[[837,3]]}}}],["有没有",{"_index":880,"t":{"121":{"position":[[186,3],[274,3]]}}}],["有点",{"_index":3613,"t":{"826":{"position":[[34,2]]},"1717":{"position":[[11,2]]}}}],["有用",{"_index":1902,"t":{"270":{"position":[[122,2]]},"1379":{"position":[[25,2]]},"1901":{"position":[[151,2],[429,2]]},"2717":{"position":[[138,2]]},"3910":{"position":[[693,2]]}}}],["有误",{"_index":8382,"t":{"3589":{"position":[[691,2]]}}}],["有限",{"_index":660,"t":{"104":{"position":[[60,2]]},"255":{"position":[[96,2]]},"587":{"position":[[2173,2]]},"810":{"position":[[423,2]]},"812":{"position":[[455,2]]},"814":{"position":[[419,2]]},"816":{"position":[[451,2]]},"1111":{"position":[[455,2]]},"1113":{"position":[[453,2]]},"1115":{"position":[[462,2]]},"1117":{"position":[[4700,2]]},"1119":{"position":[[424,2]]},"1121":{"position":[[456,2]]},"1123":{"position":[[387,2]]},"1129":{"position":[[1778,2]]},"1196":{"position":[[113,2]]},"1198":{"position":[[122,2]]},"1801":{"position":[[1234,2]]},"1803":{"position":[[3428,2]]},"2311":{"position":[[379,2]]},"2313":{"position":[[639,2]]},"3088":{"position":[[127,2]]}}}],["朋",{"_index":6930,"t":{"2768":{"position":[[478,1]]}}}],["朋友",{"_index":423,"t":{"51":{"position":[[242,2]]},"62":{"position":[[242,2]]},"75":{"position":[[242,2]]},"106":{"position":[[77,2]]},"846":{"position":[[975,2]]},"1383":{"position":[[9,2]]},"1516":{"position":[[12,2]]},"1566":{"position":[[35,2]]},"3242":{"position":[[158,2]]},"3910":{"position":[[155,2]]},"3934":{"position":[[2263,2]]}}}],["朋友圈",{"_index":4906,"t":{"1513":{"position":[[28,3]]}}}],["服",{"_index":4436,"t":{"1488":{"position":[[15,1],[1576,1]]},"1495":{"position":[[15,1]]},"1499":{"position":[[25,1]]}}}],["服务",{"_index":39,"t":{"3":{"position":[[315,2],[357,2],[394,2],[892,2]]},"28":{"position":[[42,2]]},"121":{"position":[[669,2]]},"123":{"position":[[10,2]]},"127":{"position":[[70,2],[318,2],[324,2]]},"150":{"position":[[123,2]]},"204":{"position":[[44,2],[65,2]]},"206":{"position":[[177,2]]},"218":{"position":[[42,2],[104,2],[155,2]]},"229":{"position":[[77,2]]},"239":{"position":[[26,2],[89,2]]},"245":{"position":[[244,2]]},"251":{"position":[[243,2]]},"288":{"position":[[359,2]]},"321":{"position":[[25,2]]},"336":{"position":[[50,2],[264,2],[329,2]]},"338":{"position":[[1234,2]]},"340":{"position":[[154,2],[166,2],[452,2],[551,2],[773,2],[1014,2],[1216,2]]},"344":{"position":[[22,2],[105,2],[199,2],[415,2]]},"350":{"position":[[326,2],[521,2]]},"355":{"position":[[8,2],[126,2],[277,2]]},"411":{"position":[[30,2]]},"512":{"position":[[33,2]]},"518":{"position":[[545,2],[603,2],[618,2]]},"530":{"position":[[67,2],[176,2],[684,2]]},"587":{"position":[[976,2],[1896,2]]},"599":{"position":[[436,2]]},"621":{"position":[[36,2]]},"625":{"position":[[31,2]]},"988":{"position":[[54,2]]},"1039":{"position":[[67,2],[176,2],[685,2]]},"1214":{"position":[[189,2]]},"1383":{"position":[[51,2],[156,2],[165,2],[257,2],[294,2]]},"1399":{"position":[[5,2],[11,2],[41,2],[66,2]]},"1401":{"position":[[6,2],[50,2]]},"1403":{"position":[[73,2],[107,2]]},"1405":{"position":[[24,2],[52,2],[73,2],[97,2]]},"1412":{"position":[[805,2],[1230,2],[2844,2]]},"1416":{"position":[[128,2]]},"1424":{"position":[[10,2],[20,2],[678,2],[751,2],[763,2]]},"1428":{"position":[[52,2]]},"1432":{"position":[[63,2],[78,2],[83,2],[125,2],[189,2]]},"1434":{"position":[[211,2]]},"1438":{"position":[[8,2]]},"1470":{"position":[[54,2]]},"1511":{"position":[[2833,2]]},"1566":{"position":[[235,2]]},"1685":{"position":[[203,2]]},"1701":{"position":[[47,2]]},"1711":{"position":[[49,2],[219,2],[687,2]]},"1724":{"position":[[72,2]]},"1795":{"position":[[1953,2],[2535,2],[2554,2],[3026,2]]},"1799":{"position":[[715,2]]},"1805":{"position":[[461,2]]},"1807":{"position":[[784,2]]},"1809":{"position":[[413,2]]},"1811":{"position":[[24,2],[40,2],[45,2],[555,2]]},"1815":{"position":[[70,2]]},"1819":{"position":[[477,2]]},"1821":{"position":[[39,2]]},"1823":{"position":[[35,2],[58,2],[508,2],[649,2]]},"1825":{"position":[[46,2]]},"1903":{"position":[[175,2],[215,2]]},"1909":{"position":[[270,2],[406,2],[854,2]]},"1963":{"position":[[14,2]]},"1995":{"position":[[38,2]]},"2018":{"position":[[38,2]]},"2035":{"position":[[49,2]]},"2096":{"position":[[56,2]]},"2175":{"position":[[187,2],[293,2]]},"2237":{"position":[[42,2]]},"2331":{"position":[[227,2]]},"2474":{"position":[[22,2]]},"2476":{"position":[[230,2]]},"2478":{"position":[[340,2]]},"2480":{"position":[[61,2]]},"2517":{"position":[[149,2]]},"2519":{"position":[[6,2],[16,2]]},"2581":{"position":[[53,2],[65,2],[572,2]]},"2585":{"position":[[10,2]]},"2587":{"position":[[490,2],[499,2],[519,2]]},"2589":{"position":[[13,2]]},"2619":{"position":[[36,2]]},"2627":{"position":[[132,2]]},"2709":{"position":[[282,2]]},"2717":{"position":[[87,2],[159,2],[239,2]]},"2770":{"position":[[140,2]]},"2790":{"position":[[314,2],[361,2]]},"2803":{"position":[[52,2],[72,2],[110,2],[149,2],[193,2]]},"2821":{"position":[[17,2],[489,2],[619,2]]},"2831":{"position":[[34,2],[165,2],[679,2]]},"2836":{"position":[[851,2],[1008,2],[1020,2],[1074,2],[1086,2],[1128,2],[1261,2]]},"2848":{"position":[[28,2]]},"2879":{"position":[[110,2]]},"2881":{"position":[[43,2],[76,2],[204,2],[348,2]]},"2889":{"position":[[83,2],[455,2]]},"2899":{"position":[[545,2]]},"2901":{"position":[[5,2]]},"2910":{"position":[[32,2],[259,2],[266,2],[296,2],[422,2]]},"2912":{"position":[[123,2]]},"3092":{"position":[[59,2],[73,2],[98,2],[134,2],[139,2],[168,2]]},"3096":{"position":[[22,2]]},"3124":{"position":[[56,2]]},"3136":{"position":[[116,2],[175,2]]},"3144":{"position":[[15,2]]},"3373":{"position":[[389,2]]},"3377":{"position":[[27,2]]},"3399":{"position":[[315,2],[351,2],[448,2]]},"3428":{"position":[[112,2]]},"3434":{"position":[[248,2]]},"3448":{"position":[[175,2],[206,2]]},"3452":{"position":[[621,2]]},"3458":{"position":[[25,2],[573,2]]},"3481":{"position":[[25,2]]},"3581":{"position":[[15,2]]},"3583":{"position":[[20,2]]},"3626":{"position":[[532,2]]},"3732":{"position":[[26,2]]},"3762":{"position":[[400,2]]},"3772":{"position":[[65,2],[85,2],[260,2]]},"3791":{"position":[[34,2],[571,2]]},"3795":{"position":[[408,2]]},"3824":{"position":[[39,2],[78,2]]},"3828":{"position":[[4,2],[826,2]]},"3832":{"position":[[4,2],[799,2]]},"3834":{"position":[[57,2],[71,2]]},"3910":{"position":[[680,2]]},"3916":{"position":[[1528,2],[1650,2],[1776,2],[3617,2]]},"3918":{"position":[[895,2]]},"3924":{"position":[[97,2]]},"3930":{"position":[[416,2]]},"3932":{"position":[[2546,2]]},"3934":{"position":[[605,2],[1008,2]]},"3942":{"position":[[139,2]]},"3950":{"position":[[369,2]]},"3952":{"position":[[272,2],[298,2],[356,2]]},"3960":{"position":[[630,2]]},"3964":{"position":[[482,2]]},"3966":{"position":[[1533,2]]},"3968":{"position":[[11,2]]},"3978":{"position":[[172,2],[1317,2],[1758,2]]},"3980":{"position":[[141,2]]},"3986":{"position":[[1669,2]]},"3992":{"position":[[700,2],[1397,2],[2206,2]]},"3998":{"position":[[128,2],[489,2]]},"4000":{"position":[[135,2],[662,2],[677,2],[969,2]]},"4002":{"position":[[227,2]]},"4006":{"position":[[65,2],[75,2]]}}}],["服务器",{"_index":851,"t":{"119":{"position":[[129,3],[162,3]]},"121":{"position":[[168,3]]},"182":{"position":[[92,3]]},"227":{"position":[[21,3]]},"239":{"position":[[92,3],[168,3],[178,3]]},"245":{"position":[[113,3],[151,3]]},"314":{"position":[[495,3],[739,3],[778,3]]},"316":{"position":[[553,3],[678,3],[717,3]]},"408":{"position":[[29,3],[115,3]]},"1472":{"position":[[11,3],[56,3]]},"1497":{"position":[[229,3]]},"1755":{"position":[[1036,3],[1060,3]]},"1855":{"position":[[381,3]]},"1865":{"position":[[274,3]]},"2745":{"position":[[11,3]]},"2747":{"position":[[11,3]]},"2910":{"position":[[224,3]]},"2912":{"position":[[98,3]]},"3088":{"position":[[104,3]]},"3126":{"position":[[246,3]]},"3150":{"position":[[32,3],[86,3]]},"3397":{"position":[[23,3]]},"3620":{"position":[[332,3],[353,3],[368,3],[398,3],[426,3]]},"3626":{"position":[[552,3]]},"3636":{"position":[[671,3]]},"3914":{"position":[[2650,3]]}}}],["服务器之间",{"_index":7527,"t":{"3146":{"position":[[19,5]]}}}],["服务器端",{"_index":871,"t":{"121":{"position":[[110,4],[210,4],[257,4],[278,4],[382,4]]},"227":{"position":[[62,4]]},"2251":{"position":[[142,4]]},"3142":{"position":[[66,4]]},"3626":{"position":[[581,4]]}}}],["服务器资源",{"_index":6117,"t":{"2311":{"position":[[350,5]]}}}],["服务器进行",{"_index":7511,"t":{"3142":{"position":[[104,5]]}}}],["服务提供商",{"_index":7198,"t":{"2910":{"position":[[147,5],[350,5]]}}}],["服务提供者",{"_index":919,"t":{"121":{"position":[[570,5]]}}}],["服务端",{"_index":797,"t":{"114":{"position":[[573,3],[594,3]]},"121":{"position":[[331,3]]},"148":{"position":[[48,3]]},"312":{"position":[[20,3]]},"2843":{"position":[[88,3],[103,3],[179,3],[210,3]]},"3194":{"position":[[51,3]]},"3446":{"position":[[1048,3],[1069,3]]},"3626":{"position":[[363,3],[448,3],[462,3]]},"3928":{"position":[[1610,3],[1631,3]]},"3996":{"position":[[331,3]]}}}],["服务类型",{"_index":5807,"t":{"1905":{"position":[[45,4]]},"2581":{"position":[[84,4],[553,4]]}}}],["望",{"_index":6912,"t":{"2768":{"position":[[89,1]]}}}],["期",{"_index":5705,"t":{"1832":{"position":[[8,1]]},"3168":{"position":[[54,1]]},"3926":{"position":[[386,1]]},"3968":{"position":[[857,1]]}}}],["期待",{"_index":4671,"t":{"1511":{"position":[[1163,2],[1514,2],[3185,2]]}}}],["期望",{"_index":8464,"t":{"3626":{"position":[[105,2]]}}}],["期望值",{"_index":8046,"t":{"3405":{"position":[[29,3]]}}}],["期盼",{"_index":8029,"t":{"3395":{"position":[[44,2]]}}}],["木",{"_index":4602,"t":{"1511":{"position":[[491,1],[492,1],[3686,1]]}}}],["木兰",{"_index":2398,"t":{"399":{"position":[[598,2],[680,2]]},"2768":{"position":[[1545,2]]}}}],["未",{"_index":1699,"t":{"233":{"position":[[392,1]]},"423":{"position":[[116,1]]},"633":{"position":[[40,1]]},"1307":{"position":[[26,1]]},"1428":{"position":[[9,1]]},"1520":{"position":[[356,1]]},"1539":{"position":[[1148,1],[1860,1],[1944,1]]},"1545":{"position":[[18,1]]},"1557":{"position":[[579,1]]},"1659":{"position":[[52,1]]},"1691":{"position":[[9,1]]},"1755":{"position":[[555,1]]},"1813":{"position":[[49,1]]},"1821":{"position":[[123,1]]},"1913":{"position":[[1135,1]]},"1923":{"position":[[72,1]]},"1969":{"position":[[198,1]]},"1983":{"position":[[110,1]]},"2006":{"position":[[110,1]]},"2321":{"position":[[10,1],[39,1]]},"2426":{"position":[[246,1]]},"2613":{"position":[[80,1]]},"2937":{"position":[[38,1]]},"3071":{"position":[[175,1]]},"3088":{"position":[[17,1]]},"3287":{"position":[[3179,1]]},"3644":{"position":[[52,1]]},"3722":{"position":[[332,1]]},"3758":{"position":[[5,1]]},"3795":{"position":[[25,1]]},"3800":{"position":[[323,1]]},"3826":{"position":[[160,1]]},"3916":{"position":[[1522,1],[1644,1]]},"3924":{"position":[[1751,1]]},"3930":{"position":[[1080,1]]},"3934":{"position":[[511,1]]},"3940":{"position":[[602,1]]},"3942":{"position":[[364,1]]},"3964":{"position":[[11,1],[603,1]]},"3974":{"position":[[374,1]]},"3980":{"position":[[532,1]]},"3982":{"position":[[537,1]]},"3986":{"position":[[474,1]]},"3992":{"position":[[2200,1],[3698,1]]},"3994":{"position":[[1226,1]]},"3996":{"position":[[1831,1]]},"4000":{"position":[[1091,1]]},"4004":{"position":[[565,1]]}}}],["未必",{"_index":5449,"t":{"1761":{"position":[[346,2]]}}}],["未成熟",{"_index":6771,"t":{"2629":{"position":[[97,3]]}}}],["未找到",{"_index":5035,"t":{"1557":{"position":[[742,3],[819,3]]}}}],["未指定",{"_index":5734,"t":{"1857":{"position":[[128,3]]},"1875":{"position":[[652,3]]}}}],["未来",{"_index":2203,"t":{"338":{"position":[[1257,2]]},"1511":{"position":[[2005,2],[3190,2],[4014,2]]},"2862":{"position":[[423,2]]},"3242":{"position":[[261,2]]},"3910":{"position":[[258,2]]},"3928":{"position":[[582,2]]},"3934":{"position":[[2441,2],[2517,2]]}}}],["未注册",{"_index":10338,"t":{"3994":{"position":[[804,3]]}}}],["未知",{"_index":8856,"t":{"3800":{"position":[[338,2],[376,2]]},"3986":{"position":[[1643,2]]}}}],["未经",{"_index":5787,"t":{"1901":{"position":[[306,2]]}}}],["未能",{"_index":8703,"t":{"3768":{"position":[[2432,2]]}}}],["未获",{"_index":5779,"t":{"1901":{"position":[[38,2]]}}}],["本",{"_index":1829,"t":{"251":{"position":[[29,1]]},"380":{"position":[[0,1]]},"677":{"position":[[229,1]]},"704":{"position":[[229,1]]},"799":{"position":[[27,1]]},"1101":{"position":[[27,1]]},"1155":{"position":[[27,1],[64,1]]},"1309":{"position":[[5,1],[121,1]]},"1389":{"position":[[235,1]]},"1761":{"position":[[530,1]]},"1969":{"position":[[152,1]]},"1983":{"position":[[64,1]]},"2006":{"position":[[64,1]]},"2564":{"position":[[181,1]]},"2772":{"position":[[64,1]]},"2860":{"position":[[97,1]]},"3152":{"position":[[1,1]]},"3248":{"position":[[77,1]]},"3356":{"position":[[30,1]]},"3476":{"position":[[95,1]]}}}],["本地",{"_index":1765,"t":{"239":{"position":[[194,2]]},"251":{"position":[[56,2],[115,2]]},"331":{"position":[[91,2]]},"419":{"position":[[229,2]]},"675":{"position":[[101,2]]},"1545":{"position":[[82,2]]},"1549":{"position":[[0,2],[77,2],[230,2],[291,2],[296,2],[310,2],[368,2],[456,2],[499,2]]},"1551":{"position":[[1150,2]]},"2646":{"position":[[86,2],[95,2]]},"2651":{"position":[[13,2]]},"2657":{"position":[[40,2]]},"2843":{"position":[[273,2]]},"2910":{"position":[[396,2]]},"3150":{"position":[[75,2]]},"3397":{"position":[[29,2]]},"3922":{"position":[[2378,2]]},"3996":{"position":[[1092,2]]}}}],["本地化",{"_index":3237,"t":{"631":{"position":[[8,3]]},"1834":{"position":[[77,3]]},"1837":{"position":[[107,3]]},"1839":{"position":[[75,3]]},"1853":{"position":[[59,3]]},"1879":{"position":[[8,3]]},"2517":{"position":[[62,3],[73,3]]},"2557":{"position":[[15,3]]},"2561":{"position":[[64,3]]},"3029":{"position":[[22,3]]},"3307":{"position":[[179,3],[269,3]]}}}],["本心",{"_index":4638,"t":{"1511":{"position":[[773,2]]}}}],["本文",{"_index":1766,"t":{"239":{"position":[[215,2]]}}}],["本月",{"_index":6314,"t":{"2420":{"position":[[914,2],[1340,2],[2128,2]]}}}],["本期",{"_index":9192,"t":{"3916":{"position":[[2827,2]]},"3924":{"position":[[2024,2]]},"3928":{"position":[[707,2]]},"3932":{"position":[[1555,2]]},"3934":{"position":[[1197,2]]},"3936":{"position":[[982,2]]},"3938":{"position":[[808,2]]},"3940":{"position":[[758,2]]},"3944":{"position":[[586,2]]}}}],["本次",{"_index":3414,"t":{"713":{"position":[[768,2]]},"1797":{"position":[[618,2]]}}}],["本章",{"_index":5335,"t":{"1717":{"position":[[0,2]]},"3086":{"position":[[5,2]]}}}],["本该",{"_index":8846,"t":{"3800":{"position":[[147,2]]}}}],["本质",{"_index":4307,"t":{"1424":{"position":[[62,2]]}}}],["本身",{"_index":2301,"t":{"363":{"position":[[69,2]]},"941":{"position":[[81,2]]},"1761":{"position":[[275,2]]},"2307":{"position":[[4,2]]},"2731":{"position":[[94,2]]},"3069":{"position":[[102,2]]},"3352":{"position":[[685,2]]},"3470":{"position":[[23,2]]}}}],["朱",{"_index":4789,"t":{"1511":{"position":[[2550,1]]}}}],["机",{"_index":1273,"t":{"182":{"position":[[90,1]]},"251":{"position":[[30,1]]},"1719":{"position":[[43,1]]}}}],["机会",{"_index":7956,"t":{"3352":{"position":[[266,2],[611,2],[670,2]]}}}],["机制",{"_index":87,"t":{"5":{"position":[[39,2]]},"7":{"position":[[35,2]]},"9":{"position":[[16,2]]},"127":{"position":[[112,2]]},"615":{"position":[[43,2]]},"1046":{"position":[[47,2]]},"1389":{"position":[[150,2]]},"1440":{"position":[[26,2]]},"1474":{"position":[[150,2]]},"1697":{"position":[[30,2]]},"1699":{"position":[[28,2],[72,2]]},"1793":{"position":[[30,2]]},"2290":{"position":[[35,2]]},"2292":{"position":[[16,2]]},"2309":{"position":[[80,2]]},"2311":{"position":[[143,2]]},"2391":{"position":[[172,2]]},"2629":{"position":[[94,2]]},"2784":{"position":[[25,2]]},"3716":{"position":[[81,2]]},"3912":{"position":[[781,2]]},"3914":{"position":[[3346,2]]},"3922":{"position":[[774,2]]},"3940":{"position":[[568,2]]},"3942":{"position":[[145,2]]},"3958":{"position":[[316,2]]},"3974":{"position":[[560,2]]},"3992":{"position":[[2532,2]]},"3994":{"position":[[158,2]]}}}],["机器",{"_index":5040,"t":{"1561":{"position":[[107,2]]},"2341":{"position":[[163,2]]},"3150":{"position":[[60,2]]}}}],["机构",{"_index":1080,"t":{"135":{"position":[[34,2]]}}}],["机能",{"_index":6071,"t":{"2264":{"position":[[50,2]]}}}],["杂乱",{"_index":5714,"t":{"1837":{"position":[[159,2]]}}}],["权",{"_index":835,"t":{"119":{"position":[[1,1]]},"121":{"position":[[429,1],[466,1]]},"131":{"position":[[22,1]]},"154":{"position":[[36,1]]},"3998":{"position":[[809,1]]},"4000":{"position":[[1221,1]]}}}],["权限",{"_index":1067,"t":{"133":{"position":[[660,2],[789,2],[944,2],[1099,2]]},"146":{"position":[[971,2]]},"199":{"position":[[61,2],[205,2],[349,2],[407,2]]},"719":{"position":[[17,2]]},"1358":{"position":[[49,2]]},"1424":{"position":[[428,2]]},"1518":{"position":[[60,2]]},"1580":{"position":[[441,2]]},"1913":{"position":[[904,2]]},"3063":{"position":[[154,2]]},"3158":{"position":[[26,2]]},"3680":{"position":[[29,2]]},"3706":{"position":[[146,2]]},"3916":{"position":[[1533,2]]},"3918":{"position":[[3030,2]]}}}],["李",{"_index":4614,"t":{"1511":{"position":[[563,1],[1018,1],[1091,1],[2377,1],[3367,1],[3874,1]]}}}],["李氏",{"_index":4707,"t":{"1511":{"position":[[1585,2]]}}}],["村长",{"_index":4835,"t":{"1511":{"position":[[3139,2]]}}}],["条",{"_index":3501,"t":{"756":{"position":[[24,1]]},"1071":{"position":[[94,1]]}}}],["条件",{"_index":1256,"t":{"179":{"position":[[163,2]]},"423":{"position":[[20,2]]},"769":{"position":[[5,2],[134,2]]},"818":{"position":[[53,2]]},"836":{"position":[[35,2]]},"1279":{"position":[[99,2]]},"1307":{"position":[[2,2]]},"1775":{"position":[[89,2]]},"1969":{"position":[[161,2]]},"1983":{"position":[[73,2]]},"2006":{"position":[[73,2]]},"2782":{"position":[[82,2]]},"3108":{"position":[[150,2]]},"3224":{"position":[[508,2]]},"3806":{"position":[[1322,2]]},"3974":{"position":[[755,2]]},"4000":{"position":[[389,2]]}}}],["条目",{"_index":1715,"t":{"237":{"position":[[12,2],[20,2],[1303,2],[1336,2]]}}}],["来不及",{"_index":7407,"t":{"3100":{"position":[[50,3]]},"3626":{"position":[[76,3]]},"3914":{"position":[[2920,3]]}}}],["来源",{"_index":701,"t":{"112":{"position":[[52,2],[942,2]]},"114":{"position":[[361,2]]},"184":{"position":[[80,2]]},"413":{"position":[[23,2],[37,2]]},"423":{"position":[[31,2],[38,2]]},"1925":{"position":[[791,2]]},"2796":{"position":[[313,2]]},"3446":{"position":[[836,2]]},"3928":{"position":[[1398,2]]}}}],["来源于",{"_index":5720,"t":{"1849":{"position":[[4,3]]}}}],["来自",{"_index":8421,"t":{"3616":{"position":[[16,2]]}}}],["来讲",{"_index":4199,"t":{"1385":{"position":[[59,2]]}}}],["来说",{"_index":2187,"t":{"338":{"position":[[1143,2]]},"404":{"position":[[2,2]]},"429":{"position":[[2,2]]},"486":{"position":[[8,2]]},"500":{"position":[[2,2]]},"565":{"position":[[68,2]]},"585":{"position":[[402,2]]},"801":{"position":[[52,2]]},"986":{"position":[[129,2]]},"1068":{"position":[[19,2]]},"1103":{"position":[[166,2]]},"1474":{"position":[[108,2]]},"1509":{"position":[[92,2]]},"1572":{"position":[[2,2]]},"1761":{"position":[[339,2],[544,2]]},"1847":{"position":[[59,2]]},"2341":{"position":[[187,2]]},"2517":{"position":[[108,2]]},"2682":{"position":[[2,2]]},"2727":{"position":[[10,2]]},"2910":{"position":[[434,2]]},"2915":{"position":[[257,2]]},"3284":{"position":[[2,2]]},"3626":{"position":[[130,2]]}}}],["松",{"_index":4217,"t":{"1389":{"position":[[132,1],[153,1]]},"1511":{"position":[[1149,1],[2079,1]]}}}],["板块",{"_index":2395,"t":{"399":{"position":[[490,2]]}}}],["极",{"_index":1475,"t":{"199":{"position":[[253,1]]},"300":{"position":[[186,1]]},"2684":{"position":[[371,1]]},"3432":{"position":[[4105,1]]},"3934":{"position":[[19,1],[484,1]]}}}],["极其",{"_index":571,"t":{"95":{"position":[[92,2]]},"585":{"position":[[551,2]]},"1580":{"position":[[392,2]]},"2768":{"position":[[53,2]]},"3612":{"position":[[53,2]]},"3928":{"position":[[129,2]]}}}],["极大",{"_index":3107,"t":{"587":{"position":[[2064,2]]},"3104":{"position":[[101,2]]},"3331":{"position":[[5,2]]}}}],["极少",{"_index":561,"t":{"95":{"position":[[29,2]]}}}],["极易",{"_index":564,"t":{"95":{"position":[[46,2],[109,2]]},"1221":{"position":[[62,2]]},"2684":{"position":[[495,2]]},"3928":{"position":[[712,2]]}}}],["极端",{"_index":9542,"t":{"3936":{"position":[[673,2]]}}}],["极致",{"_index":590,"t":{"98":{"position":[[16,2]]}}}],["极速",{"_index":566,"t":{"95":{"position":[[73,2]]},"98":{"position":[[11,2]]},"3910":{"position":[[668,2]]},"3934":{"position":[[30,2],[495,2],[1202,2]]}}}],["极限",{"_index":1253,"t":{"179":{"position":[[138,2]]},"184":{"position":[[15,2]]}}}],["构建",{"_index":51,"t":{"3":{"position":[[412,2]]},"263":{"position":[[11,2]]},"348":{"position":[[226,2]]},"404":{"position":[[159,2]]},"801":{"position":[[81,2]]},"846":{"position":[[45,2],[118,2],[135,2],[951,2]]},"949":{"position":[[713,2],[783,2]]},"1141":{"position":[[62,2]]},"1143":{"position":[[51,2]]},"1374":{"position":[[24,2],[39,2],[54,2],[77,2],[106,2]]},"1377":{"position":[[285,2],[347,2]]},"1379":{"position":[[665,2]]},"1481":{"position":[[96,2]]},"1483":{"position":[[1088,2],[1148,2]]},"1488":{"position":[[10,2],[400,2],[1266,2],[1648,2],[1713,2],[1719,2]]},"1495":{"position":[[10,2],[400,2],[970,2]]},"1499":{"position":[[870,2]]},"1509":{"position":[[118,2],[212,2]]},"1821":{"position":[[37,2]]},"2910":{"position":[[464,2]]},"3150":{"position":[[15,2]]},"3399":{"position":[[23,2]]},"3524":{"position":[[7,2]]},"3804":{"position":[[128,2],[199,2],[276,2],[448,2],[513,2],[584,2],[677,2],[738,2],[799,2],[861,2],[924,2],[988,2],[1054,2]]},"3819":{"position":[[63,2],[129,2],[216,2],[295,2],[383,2],[638,2],[917,2],[1462,2],[1575,2],[1631,2],[1679,2]]},"3844":{"position":[[877,2]]},"3916":{"position":[[1526,2]]},"3946":{"position":[[32,2]]},"4000":{"position":[[863,2]]}}}],["构造",{"_index":4013,"t":{"1131":{"position":[[182,2]]},"1903":{"position":[[268,2]]},"1907":{"position":[[313,2],[447,2]]},"1909":{"position":[[866,2]]},"3798":{"position":[[244,2]]}}}],["构造函数",{"_index":359,"t":{"28":{"position":[[53,4]]},"218":{"position":[[34,4]]},"253":{"position":[[48,4]]},"321":{"position":[[16,4]]},"359":{"position":[[148,4],[198,4]]},"435":{"position":[[860,4]]},"508":{"position":[[258,4]]},"510":{"position":[[288,4]]},"516":{"position":[[263,4]]},"518":{"position":[[193,4]]},"532":{"position":[[51,4],[101,4],[159,4]]},"548":{"position":[[12,4]]},"653":{"position":[[205,4]]},"708":{"position":[[197,4]]},"743":{"position":[[43,4]]},"747":{"position":[[260,4]]},"793":{"position":[[134,4]]},"851":{"position":[[231,4],[1289,4],[1794,4]]},"877":{"position":[[340,4]]},"941":{"position":[[147,4]]},"943":{"position":[[4,4]]},"945":{"position":[[43,4]]},"1041":{"position":[[822,4]]},"1064":{"position":[[359,4]]},"1066":{"position":[[160,4],[951,4]]},"1143":{"position":[[64,4]]},"1353":{"position":[[172,4]]},"1364":{"position":[[485,4]]},"1383":{"position":[[91,4],[172,4]]},"1392":{"position":[[120,4],[150,4],[184,4],[198,4]]},"1394":{"position":[[34,4]]},"1428":{"position":[[19,4]]},"1566":{"position":[[107,4]]},"1657":{"position":[[114,4]]},"1711":{"position":[[21,4],[31,4],[964,4]]},"1724":{"position":[[63,4]]},"1775":{"position":[[120,4]]},"1801":{"position":[[847,4]]},"1803":{"position":[[817,4],[2970,4]]},"1887":{"position":[[266,4]]},"1909":{"position":[[264,4],[848,4],[937,4]]},"1963":{"position":[[6,4]]},"2237":{"position":[[53,4]]},"2348":{"position":[[47,4]]},"2442":{"position":[[2077,4]]},"2581":{"position":[[15,4]]},"2585":{"position":[[18,4]]},"2587":{"position":[[472,4]]},"2589":{"position":[[220,4]]},"2605":{"position":[[12,4]]},"2796":{"position":[[125,4]]},"3215":{"position":[[645,4]]},"3256":{"position":[[12,4]]},"3287":{"position":[[1586,4]]},"3377":{"position":[[51,4]]},"3383":{"position":[[18,4]]},"3389":{"position":[[62,4],[110,4],[204,4],[969,4]]},"3391":{"position":[[102,4],[285,4]]},"3393":{"position":[[131,4],[537,4]]},"3434":{"position":[[230,4]]},"3452":{"position":[[603,4]]},"3483":{"position":[[547,4]]},"3734":{"position":[[0,4]]},"3791":{"position":[[42,4]]},"3806":{"position":[[1335,4],[1352,4]]},"3914":{"position":[[2605,4]]},"3916":{"position":[[3599,4]]},"3988":{"position":[[172,4]]},"3992":{"position":[[811,4]]}}}],["构造方法",{"_index":4224,"t":{"1392":{"position":[[2,4],[25,4]]},"1396":{"position":[[87,4]]}}}],["枚举",{"_index":2690,"t":{"482":{"position":[[648,2]]},"484":{"position":[[52,2],[79,2]]},"516":{"position":[[676,2]]},"615":{"position":[[83,2],[88,2],[117,2]]},"1131":{"position":[[81,2],[135,2]]},"1795":{"position":[[734,2],[921,2],[2452,2]]},"1855":{"position":[[36,2],[41,2],[69,2]]},"1857":{"position":[[42,2]]},"2418":{"position":[[958,2]]},"2444":{"position":[[231,2],[302,2]]},"3063":{"position":[[926,2]]},"3706":{"position":[[918,2]]},"3800":{"position":[[38,2],[56,2],[62,2],[66,2]]},"3936":{"position":[[83,2],[997,2],[1158,2],[1302,2],[1545,2]]},"3950":{"position":[[91,2],[475,2],[529,2],[767,2]]},"3976":{"position":[[385,2]]},"3980":{"position":[[464,2]]},"3992":{"position":[[1773,2]]},"4006":{"position":[[473,2]]}}}],["架构",{"_index":580,"t":{"95":{"position":[[119,2]]},"176":{"position":[[6,2]]},"247":{"position":[[161,2],[250,2]]},"399":{"position":[[868,2]]},"677":{"position":[[27,2],[127,2],[163,2],[206,2]]},"704":{"position":[[27,2],[127,2],[163,2],[206,2]]},"713":{"position":[[771,2]]},"736":{"position":[[61,2]]},"1046":{"position":[[66,2]]},"1048":{"position":[[90,2],[98,2]]},"1383":{"position":[[28,2]]},"1472":{"position":[[62,2]]},"1511":{"position":[[2286,2]]},"1969":{"position":[[128,2]]},"1983":{"position":[[40,2]]},"2006":{"position":[[40,2]]},"2057":{"position":[[7,2],[168,2]]},"2772":{"position":[[40,2]]},"2774":{"position":[[17,2]]},"2860":{"position":[[73,2]]},"2912":{"position":[[143,2]]},"3131":{"position":[[187,2]]},"3315":{"position":[[38,2]]},"3608":{"position":[[80,2]]},"3912":{"position":[[829,2]]},"3932":{"position":[[214,2],[627,2]]}}}],["架构师",{"_index":4730,"t":{"1511":{"position":[[1868,3]]}}}],["某个",{"_index":1093,"t":{"137":{"position":[[28,2]]},"179":{"position":[[40,2]]},"382":{"position":[[40,2]]},"421":{"position":[[8,2]]},"482":{"position":[[929,2]]},"1396":{"position":[[23,2]]},"1623":{"position":[[11,2]]},"1627":{"position":[[383,2]]},"2375":{"position":[[11,2]]},"2418":{"position":[[1295,2]]},"2619":{"position":[[66,2]]},"3242":{"position":[[264,2]]},"3692":{"position":[[38,2]]},"3783":{"position":[[1638,2]]},"3910":{"position":[[261,2]]},"3934":{"position":[[2444,2]]},"3938":{"position":[[986,2]]}}}],["某些",{"_index":2529,"t":{"433":{"position":[[128,2]]},"443":{"position":[[15,2]]},"445":{"position":[[106,2]]},"655":{"position":[[1,2]]},"1379":{"position":[[18,2]]},"1707":{"position":[[54,2]]},"2782":{"position":[[15,2]]},"3352":{"position":[[91,2]]},"3430":{"position":[[500,2]]},"3456":{"position":[[57,2]]},"3710":{"position":[[7,2]]},"3950":{"position":[[734,2]]},"3968":{"position":[[585,2]]}}}],["某人",{"_index":4793,"t":{"1511":{"position":[[2594,2]]}}}],["某月",{"_index":2714,"t":{"482":{"position":[[992,2]]},"2418":{"position":[[1364,2]]}}}],["某某",{"_index":2948,"t":{"565":{"position":[[120,2],[147,2],[190,2]]}}}],["某某人",{"_index":2947,"t":{"565":{"position":[[116,3],[143,3],[186,3]]}}}],["某种",{"_index":1251,"t":{"179":{"position":[[128,2]]},"1046":{"position":[[45,2]]},"2393":{"position":[[20,2]]},"2770":{"position":[[125,2]]},"3727":{"position":[[37,2]]},"3760":{"position":[[31,2]]},"3926":{"position":[[70,2]]}}}],["查",{"_index":887,"t":{"121":{"position":[[267,1]]},"3088":{"position":[[74,1]]},"3261":{"position":[[471,1]]}}}],["查找",{"_index":1603,"t":{"218":{"position":[[70,2]]},"615":{"position":[[667,2]]},"617":{"position":[[1886,2],[2768,2]]},"688":{"position":[[47,2]]},"1234":{"position":[[766,2]]},"1711":{"position":[[925,2]]},"1857":{"position":[[140,2],[182,2]]},"1875":{"position":[[664,2],[706,2]]},"2442":{"position":[[2039,2]]},"2723":{"position":[[29,2],[85,2]]},"3110":{"position":[[148,2]]},"3836":{"position":[[217,2]]},"3838":{"position":[[269,2]]},"3848":{"position":[[68,2]]},"3996":{"position":[[436,2]]}}}],["查看",{"_index":444,"t":{"55":{"position":[[5,2]]},"66":{"position":[[5,2]]},"79":{"position":[[5,2]]},"106":{"position":[[50,2]]},"382":{"position":[[2,2]]},"461":{"position":[[79,2]]},"534":{"position":[[752,2]]},"572":{"position":[[36,2]]},"587":{"position":[[1012,2]]},"685":{"position":[[309,2]]},"836":{"position":[[350,2]]},"1488":{"position":[[35,2]]},"1495":{"position":[[35,2]]},"1503":{"position":[[10,2]]},"1539":{"position":[[708,2],[940,2],[986,2]]},"1663":{"position":[[571,2]]},"1687":{"position":[[339,2]]},"1695":{"position":[[60,2]]},"1791":{"position":[[59,2]]},"1825":{"position":[[55,2]]},"1881":{"position":[[0,2]]},"1903":{"position":[[517,2]]},"1947":{"position":[[137,2]]},"1981":{"position":[[5,2]]},"1993":{"position":[[5,2]]},"2016":{"position":[[5,2]]},"2348":{"position":[[110,2]]},"2373":{"position":[[225,2]]},"2391":{"position":[[67,2],[204,2]]},"2490":{"position":[[42,2],[109,2]]},"2497":{"position":[[78,2]]},"2499":{"position":[[84,2]]},"2573":{"position":[[198,2]]},"2597":{"position":[[72,2]]},"2703":{"position":[[118,2]]},"2836":{"position":[[1006,2],[1079,2]]},"2870":{"position":[[5,2]]},"2872":{"position":[[130,2]]},"2977":{"position":[[30,2]]},"2987":{"position":[[30,2]]},"2997":{"position":[[30,2]]},"3005":{"position":[[30,2]]},"3019":{"position":[[30,2]]},"3027":{"position":[[30,2]]},"3035":{"position":[[30,2]]},"3043":{"position":[[30,2]]},"3051":{"position":[[30,2]]},"3059":{"position":[[30,2]]},"3082":{"position":[[35,2]]},"3189":{"position":[[419,2]]},"3207":{"position":[[153,2]]},"3213":{"position":[[23,2]]},"3215":{"position":[[874,2]]},"3307":{"position":[[92,2],[188,2]]},"3323":{"position":[[534,2],[570,2]]},"3362":{"position":[[34,2]]},"3373":{"position":[[636,2]]},"3414":{"position":[[96,2]]},"3416":{"position":[[24,2]]},"3440":{"position":[[63,2]]},"3610":{"position":[[47,2]]},"3654":{"position":[[41,2]]},"3758":{"position":[[117,2]]},"3762":{"position":[[513,2]]},"3764":{"position":[[121,2]]},"3766":{"position":[[294,2]]},"3768":{"position":[[582,2],[2598,2]]},"3770":{"position":[[364,2],[1761,2],[3415,2],[5036,2]]},"3772":{"position":[[547,2]]},"3774":{"position":[[707,2]]},"3783":{"position":[[584,2],[1246,2],[1302,2],[1367,2]]},"3806":{"position":[[400,2],[1805,2],[3633,2]]},"3808":{"position":[[1067,2],[2288,2]]},"3910":{"position":[[401,2],[435,2],[663,2],[1062,2],[1508,2]]},"3912":{"position":[[1331,2],[1627,2]]},"3914":{"position":[[1620,2],[2130,2]]},"3916":{"position":[[1626,2],[2850,2],[3215,2],[7080,2],[8869,2]]},"3918":{"position":[[1529,2],[2445,2],[2845,2],[3047,2]]},"3920":{"position":[[777,2],[1256,2]]},"3922":{"position":[[504,2],[931,2]]},"3924":{"position":[[735,2],[924,2],[2104,2],[2561,2],[3505,2],[3593,2]]},"3928":{"position":[[725,2],[850,2],[885,2]]},"3932":{"position":[[921,2],[1599,2],[1890,2],[1949,2],[1972,2],[2228,2],[2450,2]]},"3934":{"position":[[1207,2],[1342,2],[1359,2],[1516,2]]},"3936":{"position":[[1002,2],[1331,2],[1564,2],[1867,2]]},"3938":{"position":[[832,2],[978,2],[1192,2]]},"3940":{"position":[[800,2],[1034,2],[1072,2],[1592,2]]},"3944":{"position":[[637,2],[786,2]]},"3946":{"position":[[434,2],[452,2]]},"3952":{"position":[[36,2]]},"3956":{"position":[[252,2]]},"3962":{"position":[[18,2]]}}}],["查询",{"_index":3632,"t":{"841":{"position":[[57,2],[73,2],[103,2],[117,2]]},"862":{"position":[[389,2]]},"879":{"position":[[20,2]]},"885":{"position":[[50,2],[57,2]]},"887":{"position":[[46,2],[184,2],[247,2]]},"929":{"position":[[2211,2],[2427,2],[2734,2],[2916,2]]},"949":{"position":[[835,2]]},"954":{"position":[[356,2]]},"1012":{"position":[[34,2],[93,2]]},"1014":{"position":[[39,2],[103,2]]},"1064":{"position":[[752,2]]},"1200":{"position":[[234,2],[255,2]]},"1566":{"position":[[185,2],[349,2],[358,2],[410,2],[433,2],[451,2],[508,2],[522,2],[543,2],[569,2],[632,2],[647,2]]},"1609":{"position":[[303,2]]},"1661":{"position":[[414,2]]},"1745":{"position":[[228,2]]},"1832":{"position":[[123,2]]},"2436":{"position":[[22,2]]},"2933":{"position":[[538,2]]},"2935":{"position":[[25,2]]},"2937":{"position":[[16,2]]},"2971":{"position":[[268,2]]},"2973":{"position":[[19,2]]},"3023":{"position":[[411,2]]},"3094":{"position":[[177,2]]},"3104":{"position":[[82,2]]},"3108":{"position":[[127,2],[148,2],[193,2]]},"3110":{"position":[[167,2],[177,2],[252,2]]},"3118":{"position":[[79,2],[149,2],[226,2],[268,2],[281,2],[311,2],[317,2]]},"3120":{"position":[[7,2]]},"3126":{"position":[[220,2]]},"3211":{"position":[[73,2],[78,2],[83,2],[87,2],[98,2],[101,2],[110,2]]},"3213":{"position":[[35,2],[53,2]]},"3224":{"position":[[262,2],[299,2],[349,2],[418,2],[455,2],[510,2]]},"3258":{"position":[[56,2]]},"3261":{"position":[[2,2],[56,2],[118,2],[277,2],[341,2]]},"3265":{"position":[[142,2]]},"3273":{"position":[[593,2],[669,2],[692,2]]},"3319":{"position":[[49,2]]},"3620":{"position":[[232,2]]},"3920":{"position":[[1685,2]]},"3966":{"position":[[1428,2]]},"3992":{"position":[[1678,2],[1771,2],[2509,2]]},"3994":{"position":[[390,2],[820,2],[1418,2]]},"3996":{"position":[[142,2],[1433,2]]}}}],["查询数据库",{"_index":1073,"t":{"133":{"position":[[1089,5]]},"2438":{"position":[[26,5]]},"2440":{"position":[[26,5],[400,5]]},"2933":{"position":[[559,5]]},"2973":{"position":[[36,5]]},"3932":{"position":[[1289,5]]}}}],["查询方法",{"_index":3655,"t":{"855":{"position":[[86,4]]},"857":{"position":[[82,4]]},"885":{"position":[[214,4]]},"3964":{"position":[[845,4]]}}}],["查阅",{"_index":694,"t":{"110":{"position":[[102,2]]},"127":{"position":[[1597,2]]},"154":{"position":[[43,2]]},"194":{"position":[[54,2]]},"204":{"position":[[492,2]]},"237":{"position":[[1379,2]]},"257":{"position":[[44,2]]},"425":{"position":[[43,2]]},"465":{"position":[[41,2]]},"536":{"position":[[45,2]]},"562":{"position":[[45,2]]},"574":{"position":[[20,2]]},"615":{"position":[[675,2]]},"639":{"position":[[470,2]]},"679":{"position":[[115,2]]},"736":{"position":[[43,2]]},"775":{"position":[[60,2]]},"917":{"position":[[1,2]]},"1153":{"position":[[43,2]]},"1311":{"position":[[527,2]]},"1317":{"position":[[554,2]]},"1389":{"position":[[273,2]]},"1403":{"position":[[82,2]]},"1418":{"position":[[305,2]]},"1440":{"position":[[950,2]]},"1547":{"position":[[436,2]]},"1549":{"position":[[507,2]]},"1687":{"position":[[328,2]]},"1691":{"position":[[39,2]]},"1781":{"position":[[486,2]]},"1881":{"position":[[21,2]]},"1965":{"position":[[11,2]]},"1969":{"position":[[68,2]]},"2317":{"position":[[1,2]]},"2373":{"position":[[233,2]]},"2561":{"position":[[42,2]]},"2611":{"position":[[46,2]]},"2698":{"position":[[46,2]]},"2717":{"position":[[452,2]]},"2737":{"position":[[41,2]]},"2740":{"position":[[141,2]]},"2747":{"position":[[28,2]]},"2760":{"position":[[36,2]]},"2764":{"position":[[121,2]]},"2827":{"position":[[21,2]]},"2897":{"position":[[692,2]]},"3082":{"position":[[120,2],[334,2]]},"3126":{"position":[[571,2]]},"3150":{"position":[[202,2]]},"3205":{"position":[[46,2]]},"3238":{"position":[[1,2]]},"3240":{"position":[[47,2]]},"3273":{"position":[[995,2]]},"3298":{"position":[[41,2]]},"3333":{"position":[[43,2]]},"3405":{"position":[[79,2]]},"3409":{"position":[[43,2]]},"3472":{"position":[[41,2]]},"3506":{"position":[[661,2]]},"3547":{"position":[[831,2]]},"3605":{"position":[[49,2]]}}}],["标",{"_index":2471,"t":{"415":{"position":[[180,1]]},"2991":{"position":[[186,1]]}}}],["标准",{"_index":917,"t":{"121":{"position":[[546,2]]},"302":{"position":[[84,2]]},"408":{"position":[[24,2]]},"3432":{"position":[[2637,2]]},"3626":{"position":[[255,2]]}}}],["标准化",{"_index":8090,"t":{"3430":{"position":[[1805,3]]}}}],["标注",{"_index":4009,"t":{"1131":{"position":[[19,2]]}}}],["标签",{"_index":2103,"t":{"319":{"position":[[169,2]]},"384":{"position":[[29,2]]},"606":{"position":[[496,2]]},"1377":{"position":[[551,2]]},"1641":{"position":[[282,2]]},"1659":{"position":[[21,2],[30,2],[42,2],[49,2],[955,2],[1139,2]]},"3063":{"position":[[988,2]]},"3644":{"position":[[21,2],[30,2],[42,2],[49,2],[955,2],[1139,2]]},"3706":{"position":[[980,2]]},"3908":{"position":[[34,2]]},"3918":{"position":[[3411,2]]},"3922":{"position":[[2327,2]]},"3930":{"position":[[312,2]]},"3950":{"position":[[94,2]]}}}],["标记",{"_index":3282,"t":{"655":{"position":[[489,2]]},"791":{"position":[[65,2]]},"1248":{"position":[[53,2]]},"1286":{"position":[[97,2]]},"1535":{"position":[[6,2]]},"1587":{"position":[[245,2]]},"1623":{"position":[[141,2]]},"1933":{"position":[[278,2]]},"1955":{"position":[[165,2],[248,2]]},"2214":{"position":[[30,2]]},"2341":{"position":[[39,2]]},"2454":{"position":[[30,2]]},"2472":{"position":[[405,2]]},"2530":{"position":[[87,2]]},"3360":{"position":[[154,2]]},"3547":{"position":[[776,2]]},"3551":{"position":[[36,2]]},"3553":{"position":[[36,2]]},"3555":{"position":[[36,2]]},"3557":{"position":[[36,2]]},"3559":{"position":[[36,2]]},"3817":{"position":[[2732,2]]},"3819":{"position":[[1567,2],[1623,2],[1671,2]]},"3844":{"position":[[831,2],[887,2],[930,2],[954,2],[1059,2],[1317,2],[1497,2]]},"3858":{"position":[[66,2]]},"3894":{"position":[[66,2]]},"3932":{"position":[[500,2]]},"3944":{"position":[[454,2]]},"3978":{"position":[[978,2]]}}}],["标识",{"_index":778,"t":{"114":{"position":[[411,2]]},"154":{"position":[[64,2]]},"841":{"position":[[37,2]]},"1145":{"position":[[528,2]]},"1412":{"position":[[162,2]]},"1587":{"position":[[148,2]]},"1649":{"position":[[19,2]]},"1857":{"position":[[40,2]]},"2212":{"position":[[19,2]]},"2214":{"position":[[18,2],[59,2]]},"2326":{"position":[[26,2]]},"2400":{"position":[[158,2],[165,2],[172,2]]},"2444":{"position":[[95,2]]},"2452":{"position":[[19,2]]},"2454":{"position":[[18,2],[59,2]]},"2476":{"position":[[341,2]]},"2745":{"position":[[244,2]]},"2747":{"position":[[279,2]]},"2751":{"position":[[136,2]]},"2788":{"position":[[106,2]]},"2919":{"position":[[106,2]]},"3063":{"position":[[1482,2]]},"3080":{"position":[[495,2]]},"3446":{"position":[[886,2]]},"3636":{"position":[[94,2]]},"3706":{"position":[[1493,2]]},"3928":{"position":[[1448,2]]}}}],["标识符",{"_index":2649,"t":{"480":{"position":[[44,3]]}}}],["标量",{"_index":3591,"t":{"807":{"position":[[22,2]]},"818":{"position":[[26,2],[57,2]]},"822":{"position":[[26,2],[219,2]]},"836":{"position":[[380,2]]},"1267":{"position":[[134,2]]},"1275":{"position":[[179,2]]}}}],["标题",{"_index":5763,"t":{"1887":{"position":[[307,2]]},"2768":{"position":[[23,2]]},"3063":{"position":[[52,2],[1572,2]]},"3065":{"position":[[93,2]]},"3446":{"position":[[235,2]]},"3642":{"position":[[167,2]]},"3648":{"position":[[94,2]]},"3706":{"position":[[44,2],[1583,2],[1841,2]]}}}],["栈",{"_index":8057,"t":{"3414":{"position":[[98,1]]},"3928":{"position":[[187,1]]}}}],["栏",{"_index":2135,"t":{"325":{"position":[[180,1]]}}}],["树根",{"_index":4373,"t":{"1474":{"position":[[174,2],[324,2]]}}}],["树状",{"_index":1285,"t":{"182":{"position":[[156,2]]}}}],["校验",{"_index":901,"t":{"121":{"position":[[397,2]]},"579":{"position":[[2,2],[48,2]]},"587":{"position":[[63,2]]},"633":{"position":[[22,2],[71,2]]},"2503":{"position":[[104,2]]},"3053":{"position":[[21,2]]},"3922":{"position":[[1399,2],[2402,2]]},"3928":{"position":[[702,2]]},"3932":{"position":[[1106,2]]},"3960":{"position":[[56,2]]},"3962":{"position":[[1371,2]]},"3978":{"position":[[1368,2]]},"3992":{"position":[[2235,2],[2266,2],[4022,2]]}}}],["样子",{"_index":462,"t":{"85":{"position":[[4,2]]}}}],["核心",{"_index":527,"t":{"91":{"position":[[27,2]]},"146":{"position":[[736,2]]},"380":{"position":[[17,2]]},"404":{"position":[[110,2]]},"2646":{"position":[[123,2]]},"3131":{"position":[[147,2]]},"3256":{"position":[[151,2]]},"3702":{"position":[[1374,2]]},"3942":{"position":[[130,2]]},"4000":{"position":[[688,2]]}}}],["核心层",{"_index":7466,"t":{"3131":{"position":[[83,3],[135,3],[255,3]]}}}],["根",{"_index":2244,"t":{"342":{"position":[[41,1]]},"359":{"position":[[115,1],[130,1]]},"367":{"position":[[133,1]]},"688":{"position":[[105,1]]},"986":{"position":[[99,1]]},"1420":{"position":[[473,1]]},"2035":{"position":[[48,1]]},"2553":{"position":[[26,1]]},"2981":{"position":[[14,1]]},"2985":{"position":[[89,1]]},"2991":{"position":[[23,1]]},"3001":{"position":[[34,1]]},"3009":{"position":[[28,1]]},"3015":{"position":[[27,1]]},"3023":{"position":[[31,1]]},"3031":{"position":[[26,1]]},"3039":{"position":[[12,1]]},"3047":{"position":[[25,1]]},"3055":{"position":[[32,1]]},"3063":{"position":[[32,1]]},"3950":{"position":[[368,1]]},"3964":{"position":[[481,1]]}}}],["根据",{"_index":913,"t":{"121":{"position":[[514,2]]},"148":{"position":[[394,2]]},"243":{"position":[[156,2],[203,2]]},"327":{"position":[[36,2],[71,2]]},"380":{"position":[[33,2]]},"451":{"position":[[14,2]]},"526":{"position":[[244,2]]},"610":{"position":[[13,2]]},"675":{"position":[[286,2]]},"715":{"position":[[30,2]]},"769":{"position":[[3,2],[132,2]]},"1572":{"position":[[19,2]]},"1631":{"position":[[42,2]]},"1703":{"position":[[15,2]]},"1705":{"position":[[37,2]]},"1745":{"position":[[214,2]]},"1761":{"position":[[428,2]]},"2497":{"position":[[191,2]]},"2544":{"position":[[145,2]]},"2547":{"position":[[106,2]]},"2549":{"position":[[10,2]]},"2649":{"position":[[14,2]]},"2682":{"position":[[15,2]]},"2910":{"position":[[233,2]]},"2933":{"position":[[532,2]]},"3078":{"position":[[57,2]]},"3092":{"position":[[0,2]]},"3118":{"position":[[336,2]]},"3122":{"position":[[29,2]]},"3224":{"position":[[295,2],[506,2]]},"3261":{"position":[[273,2]]},"3269":{"position":[[21,2],[350,2]]},"3271":{"position":[[21,2],[105,2],[163,2]]},"3350":{"position":[[69,2]]},"3432":{"position":[[2155,2],[2452,2]]},"3434":{"position":[[1648,2],[2058,2]]},"3454":{"position":[[73,2]]},"3470":{"position":[[137,2]]},"3577":{"position":[[31,2]]},"3622":{"position":[[54,2],[111,2]]},"3664":{"position":[[11,2]]},"3680":{"position":[[27,2]]},"3700":{"position":[[36,2],[71,2]]},"3718":{"position":[[90,2]]},"3727":{"position":[[6,2]]},"3729":{"position":[[29,2]]},"3779":{"position":[[215,2],[279,2],[346,2]]},"3802":{"position":[[216,2],[299,2],[382,2]]},"3819":{"position":[[981,2]]},"3914":{"position":[[2166,2]]},"3930":{"position":[[1081,2]]},"3932":{"position":[[1910,2]]},"3940":{"position":[[97,2],[769,2]]},"3964":{"position":[[670,2]]},"3966":{"position":[[1926,2]]},"3984":{"position":[[899,2]]}}}],["根本",{"_index":5338,"t":{"1717":{"position":[[20,2]]}}}],["根目录",{"_index":90,"t":{"5":{"position":[[48,3]]},"7":{"position":[[44,3]]},"9":{"position":[[45,3]]},"19":{"position":[[103,3]]},"220":{"position":[[171,3]]},"308":{"position":[[412,3]]},"310":{"position":[[272,3]]},"445":{"position":[[762,3]]},"455":{"position":[[43,3],[98,3]]},"1377":{"position":[[236,3],[276,3],[307,3]]},"1483":{"position":[[1125,3]]},"1497":{"position":[[288,3]]},"1541":{"position":[[73,3]]},"1547":{"position":[[46,3]]},"1549":{"position":[[43,3]]},"1741":{"position":[[172,3],[981,3],[1834,3]]},"1755":{"position":[[53,3]]},"2290":{"position":[[44,3]]},"2292":{"position":[[45,3]]},"2625":{"position":[[605,3]]},"2985":{"position":[[20,3],[203,3]]},"3337":{"position":[[15,3],[35,3]]},"3371":{"position":[[7,3]]},"3373":{"position":[[78,3]]},"3432":{"position":[[15,3]]},"3740":{"position":[[409,3]]}}}],["格式",{"_index":1115,"t":{"148":{"position":[[52,2]]},"472":{"position":[[2,2]]},"484":{"position":[[111,2],[159,2],[210,2],[271,2]]},"587":{"position":[[784,2],[960,2]]},"606":{"position":[[407,2],[436,2],[449,2],[466,2],[498,2],[1031,2]]},"1420":{"position":[[567,2],[653,2],[881,2]]},"1520":{"position":[[322,2],[394,2]]},"1539":{"position":[[1779,2]]},"1598":{"position":[[48,2],[107,2]]},"1661":{"position":[[179,2]]},"1745":{"position":[[104,2]]},"1775":{"position":[[3830,2],[3854,2]]},"1837":{"position":[[157,2]]},"1839":{"position":[[147,2]]},"1887":{"position":[[546,2]]},"2341":{"position":[[54,2]]},"2418":{"position":[[67,2]]},"2424":{"position":[[44,2]]},"2544":{"position":[[61,2]]},"2627":{"position":[[18,2]]},"2788":{"position":[[51,2],[100,2]]},"2813":{"position":[[120,2]]},"3001":{"position":[[128,2],[214,2],[403,2]]},"3023":{"position":[[180,2]]},"3430":{"position":[[3443,2],[3645,2]]},"3432":{"position":[[3417,2],[3905,2],[4131,2],[4848,2]]},"3434":{"position":[[2496,2]]},"3448":{"position":[[1250,2]]},"3452":{"position":[[884,2],[1043,2]]},"3496":{"position":[[390,2]]},"3526":{"position":[[2,2]]},"3541":{"position":[[754,2]]},"3565":{"position":[[2,2]]},"3624":{"position":[[9,2],[30,2]]},"3626":{"position":[[344,2]]},"3785":{"position":[[37,2]]},"3812":{"position":[[39,2]]},"3821":{"position":[[43,2]]},"3826":{"position":[[74,2]]},"3912":{"position":[[2485,2]]},"3914":{"position":[[844,2],[1175,2],[3462,2]]},"3916":{"position":[[977,2],[3212,2],[3880,2],[4039,2]]},"3976":{"position":[[642,2]]},"3984":{"position":[[939,2]]},"3990":{"position":[[593,2]]},"3994":{"position":[[419,2]]},"4004":{"position":[[101,2],[143,2]]}}}],["格式化",{"_index":2666,"t":{"482":{"position":[[14,3]]},"494":{"position":[[44,3]]},"1857":{"position":[[67,3],[98,3],[107,3],[121,3],[131,3],[172,3],[198,3]]},"1869":{"position":[[330,3]]},"1875":{"position":[[362,3],[372,3],[453,3],[463,3],[512,3],[522,3],[630,3],[645,3],[655,3],[696,3],[722,3]]},"1901":{"position":[[414,3]]},"2420":{"position":[[12,3]]},"2444":{"position":[[214,3]]},"2526":{"position":[[75,3]]},"3430":{"position":[[4503,3]]},"3446":{"position":[[494,3]]},"3448":{"position":[[825,3],[1168,3]]},"3910":{"position":[[1397,3],[1529,3]]},"3912":{"position":[[725,3]]},"3916":{"position":[[802,3],[864,3],[926,3],[2494,3],[2844,3]]},"3950":{"position":[[575,3]]},"3966":{"position":[[1951,3]]}}}],["格鲁吉亚",{"_index":6557,"t":{"2559":{"position":[[1190,4],[1202,4],[1209,4]]}}}],["桂",{"_index":4885,"t":{"1511":{"position":[[3948,1]]}}}],["框架",{"_index":356,"t":{"28":{"position":[[9,2]]},"32":{"position":[[7,2]]},"85":{"position":[[52,2],[93,2],[269,2]]},"95":{"position":[[34,2]]},"127":{"position":[[1328,2],[1429,2]]},"131":{"position":[[7,2]]},"133":{"position":[[7,2]]},"148":{"position":[[128,2]]},"199":{"position":[[18,2],[146,2],[195,2],[416,2]]},"206":{"position":[[9,2]]},"220":{"position":[[130,2],[196,2]]},"229":{"position":[[69,2]]},"245":{"position":[[37,2],[233,2]]},"261":{"position":[[13,2]]},"300":{"position":[[50,2],[60,2]]},"302":{"position":[[7,2]]},"306":{"position":[[207,2]]},"314":{"position":[[25,2]]},"316":{"position":[[25,2]]},"329":{"position":[[43,2]]},"361":{"position":[[7,2]]},"363":{"position":[[39,2]]},"435":{"position":[[9,2]]},"445":{"position":[[745,2]]},"500":{"position":[[53,2]]},"502":{"position":[[84,2]]},"504":{"position":[[305,2]]},"506":{"position":[[9,2]]},"512":{"position":[[7,2]]},"522":{"position":[[14,2]]},"526":{"position":[[9,2],[222,2]]},"528":{"position":[[9,2]]},"540":{"position":[[32,2]]},"542":{"position":[[9,2]]},"546":{"position":[[190,2]]},"552":{"position":[[7,2]]},"567":{"position":[[7,2]]},"583":{"position":[[65,2]]},"589":{"position":[[24,2]]},"612":{"position":[[7,2]]},"617":{"position":[[1846,2]]},"643":{"position":[[7,2]]},"706":{"position":[[12,2]]},"728":{"position":[[7,2]]},"743":{"position":[[9,2]]},"751":{"position":[[13,2]]},"756":{"position":[[7,2]]},"791":{"position":[[42,2]]},"810":{"position":[[401,2]]},"812":{"position":[[433,2]]},"814":{"position":[[397,2]]},"816":{"position":[[429,2]]},"818":{"position":[[7,2]]},"885":{"position":[[42,2]]},"887":{"position":[[70,2]]},"924":{"position":[[7,2]]},"933":{"position":[[7,2]]},"947":{"position":[[9,2]]},"988":{"position":[[7,2]]},"1107":{"position":[[7,2]]},"1111":{"position":[[433,2]]},"1113":{"position":[[431,2]]},"1115":{"position":[[440,2]]},"1117":{"position":[[7,2],[4678,2]]},"1119":{"position":[[402,2]]},"1121":{"position":[[434,2]]},"1123":{"position":[[365,2]]},"1129":{"position":[[1756,2]]},"1141":{"position":[[9,2]]},"1157":{"position":[[7,2]]},"1202":{"position":[[7,2]]},"1212":{"position":[[9,2]]},"1221":{"position":[[15,2],[84,2]]},"1277":{"position":[[22,2]]},"1309":{"position":[[51,2],[63,2]]},"1313":{"position":[[7,2]]},"1319":{"position":[[12,2]]},"1392":{"position":[[70,2],[163,2]]},"1405":{"position":[[7,2]]},"1408":{"position":[[1018,2]]},"1416":{"position":[[7,2]]},"1418":{"position":[[227,2]]},"1422":{"position":[[7,2]]},"1424":{"position":[[151,2]]},"1426":{"position":[[7,2]]},"1428":{"position":[[7,2]]},"1432":{"position":[[104,2],[119,2],[143,2],[216,2]]},"1438":{"position":[[21,2]]},"1440":{"position":[[7,2]]},"1511":{"position":[[429,2],[767,2],[850,2],[1104,2],[1579,2],[1756,2],[2014,2],[4215,2]]},"1566":{"position":[[9,2]]},"1580":{"position":[[52,2]]},"1587":{"position":[[7,2],[165,2]]},"1589":{"position":[[7,2]]},"1609":{"position":[[316,2]]},"1611":{"position":[[7,2]]},"1619":{"position":[[7,2]]},"1629":{"position":[[7,2]]},"1631":{"position":[[9,2]]},"1639":{"position":[[32,2]]},"1683":{"position":[[319,2],[335,2]]},"1687":{"position":[[300,2]]},"1689":{"position":[[7,2]]},"1691":{"position":[[7,2]]},"1699":{"position":[[9,2]]},"1707":{"position":[[86,2]]},"1711":{"position":[[9,2]]},"1724":{"position":[[7,2]]},"1726":{"position":[[7,2]]},"1763":{"position":[[7,2],[237,2]]},"1773":{"position":[[282,2]]},"1775":{"position":[[72,2]]},"1783":{"position":[[7,2]]},"1841":{"position":[[7,2]]},"1853":{"position":[[9,2]]},"1855":{"position":[[442,2]]},"1857":{"position":[[7,2]]},"1867":{"position":[[9,2]]},"1869":{"position":[[7,2]]},"1871":{"position":[[7,2]]},"1898":{"position":[[37,2]]},"1907":{"position":[[579,2]]},"1913":{"position":[[1390,2]]},"1919":{"position":[[848,2]]},"1925":{"position":[[1575,2]]},"1927":{"position":[[895,2]]},"1933":{"position":[[1015,2]]},"1935":{"position":[[513,2]]},"1941":{"position":[[1263,2]]},"1943":{"position":[[460,2]]},"2096":{"position":[[45,2]]},"2175":{"position":[[257,2]]},"2237":{"position":[[9,2]]},"2241":{"position":[[7,2]]},"2255":{"position":[[75,2]]},"2261":{"position":[[45,2],[238,2],[386,2]]},"2264":{"position":[[76,2],[131,2]]},"2269":{"position":[[42,2]]},"2305":{"position":[[56,2]]},"2307":{"position":[[26,2]]},"2309":{"position":[[20,2]]},"2311":{"position":[[172,2],[400,2]]},"2335":{"position":[[82,2]]},"2343":{"position":[[80,2],[282,2]]},"2345":{"position":[[7,2]]},"2348":{"position":[[7,2]]},"2354":{"position":[[7,2],[14,2]]},"2391":{"position":[[101,2]]},"2395":{"position":[[7,2]]},"2424":{"position":[[23,2]]},"2426":{"position":[[244,2]]},"2442":{"position":[[29,2]]},"2466":{"position":[[7,2]]},"2497":{"position":[[4,2]]},"2499":{"position":[[7,2]]},"2517":{"position":[[134,2]]},"2526":{"position":[[7,2]]},"2540":{"position":[[9,2]]},"2551":{"position":[[7,2]]},"2601":{"position":[[9,2]]},"2619":{"position":[[53,2]]},"2621":{"position":[[9,2]]},"2625":{"position":[[66,2]]},"2629":{"position":[[23,2],[147,2]]},"2680":{"position":[[26,2]]},"2684":{"position":[[467,2],[509,2]]},"2709":{"position":[[268,2]]},"2713":{"position":[[9,2]]},"2725":{"position":[[21,2]]},"2727":{"position":[[45,2]]},"2729":{"position":[[7,2]]},"2731":{"position":[[73,2],[164,2]]},"2768":{"position":[[1581,2]]},"2770":{"position":[[130,2]]},"2774":{"position":[[428,2]]},"2776":{"position":[[18,2]]},"2784":{"position":[[7,2]]},"2790":{"position":[[39,2],[326,2]]},"2792":{"position":[[7,2]]},"2794":{"position":[[7,2]]},"2823":{"position":[[46,2]]},"2848":{"position":[[160,2]]},"2862":{"position":[[440,2]]},"2921":{"position":[[7,2]]},"2933":{"position":[[617,2]]},"2949":{"position":[[465,2]]},"2963":{"position":[[484,2]]},"2967":{"position":[[13,2]]},"2973":{"position":[[7,2]]},"2979":{"position":[[15,2]]},"2985":{"position":[[13,2]]},"2989":{"position":[[15,2]]},"2999":{"position":[[17,2]]},"3007":{"position":[[17,2]]},"3013":{"position":[[7,2]]},"3021":{"position":[[20,2]]},"3029":{"position":[[16,2]]},"3053":{"position":[[17,2]]},"3061":{"position":[[18,2]]},"3071":{"position":[[573,2],[813,2]]},"3126":{"position":[[71,2]]},"3131":{"position":[[81,2]]},"3144":{"position":[[9,2]]},"3156":{"position":[[46,2]]},"3209":{"position":[[31,2],[91,2]]},"3250":{"position":[[31,2],[90,2]]},"3252":{"position":[[9,2]]},"3254":{"position":[[1652,2]]},"3287":{"position":[[9,2],[1218,2]]},"3291":{"position":[[1992,2]]},"3296":{"position":[[13,2]]},"3356":{"position":[[41,2]]},"3367":{"position":[[18,2]]},"3373":{"position":[[18,2]]},"3412":{"position":[[139,2]]},"3418":{"position":[[9,2],[59,2]]},"3426":{"position":[[9,2]]},"3440":{"position":[[14,2]]},"3460":{"position":[[9,2]]},"3464":{"position":[[93,2],[286,2],[434,2]]},"3470":{"position":[[156,2]]},"3539":{"position":[[7,2]]},"3573":{"position":[[7,2]]},"3587":{"position":[[90,2]]},"3589":{"position":[[64,2]]},"3597":{"position":[[7,2]]},"3601":{"position":[[9,2]]},"3626":{"position":[[499,2]]},"3628":{"position":[[7,2]]},"3632":{"position":[[9,2]]},"3634":{"position":[[7,2]]},"3638":{"position":[[54,2]]},"3642":{"position":[[7,2]]},"3666":{"position":[[7,2]]},"3668":{"position":[[7,2]]},"3670":{"position":[[13,2]]},"3702":{"position":[[192,2]]},"3704":{"position":[[9,2]]},"3708":{"position":[[7,2]]},"3718":{"position":[[132,2]]},"3727":{"position":[[69,2]]},"3770":{"position":[[0,2]]},"3774":{"position":[[6,2]]},"3777":{"position":[[0,2]]},"3798":{"position":[[0,2]]},"3908":{"position":[[7,2],[84,2]]},"3912":{"position":[[836,2]]},"3914":{"position":[[2520,2]]},"3916":{"position":[[1402,2]]},"3918":{"position":[[1291,2]]},"3924":{"position":[[775,2]]},"3928":{"position":[[190,2]]},"3934":{"position":[[3083,2]]},"3936":{"position":[[480,2],[1917,2],[2097,2],[2245,2]]},"3940":{"position":[[548,2]]},"3948":{"position":[[286,2]]},"3960":{"position":[[167,2]]},"3962":{"position":[[1650,2]]},"3966":{"position":[[1133,2]]},"3968":{"position":[[479,2]]},"3970":{"position":[[329,2]]},"3972":{"position":[[456,2]]},"3978":{"position":[[607,2]]},"3982":{"position":[[124,2]]},"3986":{"position":[[465,2]]},"3988":{"position":[[511,2]]},"3990":{"position":[[242,2],[336,2]]},"3992":{"position":[[1027,2],[1148,2],[1158,2],[2065,2],[2704,2]]},"4006":{"position":[[644,2],[746,2]]}}}],["案例",{"_index":1462,"t":{"199":{"position":[[34,2]]},"3385":{"position":[[48,2]]},"3397":{"position":[[283,2]]},"3399":{"position":[[21,2]]}}}],["桌面",{"_index":7174,"t":{"2899":{"position":[[37,2]]},"3924":{"position":[[2164,2]]}}}],["桶",{"_index":4784,"t":{"1511":{"position":[[2508,1]]}}}],["梅",{"_index":4898,"t":{"1511":{"position":[[4179,1]]}}}],["梦",{"_index":643,"t":{"102":{"position":[[167,1]]},"2768":{"position":[[969,1]]},"3211":{"position":[[177,1]]}}}],["梦想",{"_index":6996,"t":{"2770":{"position":[[32,2]]}}}],["梵文",{"_index":6631,"t":{"2559":{"position":[[1964,2],[1973,2]]}}}],["检",{"_index":2478,"t":{"415":{"position":[[347,1]]},"2991":{"position":[[353,1]]},"3940":{"position":[[596,1],[633,1]]}}}],["检查",{"_index":1066,"t":{"133":{"position":[[658,2],[787,2]]},"146":{"position":[[969,2]]},"421":{"position":[[13,2]]},"570":{"position":[[773,2]]},"887":{"position":[[37,2]]},"1145":{"position":[[530,2]]},"1557":{"position":[[87,2],[346,2]]},"1801":{"position":[[2313,2]]},"1913":{"position":[[444,2],[906,2],[950,2],[975,2]]},"2315":{"position":[[35,2]]},"2438":{"position":[[240,2]]},"2440":{"position":[[276,2],[510,2]]},"3063":{"position":[[1207,2]]},"3154":{"position":[[707,2]]},"3412":{"position":[[67,2]]},"3636":{"position":[[558,2]]},"3680":{"position":[[226,2]]},"3686":{"position":[[446,2]]},"3706":{"position":[[1199,2]]},"3793":{"position":[[165,2]]},"3826":{"position":[[70,2]]},"3830":{"position":[[291,2]]},"3912":{"position":[[1906,2]]},"3934":{"position":[[983,2]]},"3940":{"position":[[997,2]]},"3950":{"position":[[922,2]]},"3992":{"position":[[2515,2]]}}}],["检查和",{"_index":7557,"t":{"3168":{"position":[[57,3]]},"3350":{"position":[[44,3]]}}}],["检查用户",{"_index":6055,"t":{"2245":{"position":[[69,4]]}}}],["检测",{"_index":5201,"t":{"1663":{"position":[[537,2]]},"2782":{"position":[[221,2]]},"2790":{"position":[[8,2]]},"3470":{"position":[[163,2]]},"3912":{"position":[[779,2]]},"3916":{"position":[[2178,2]]},"3922":{"position":[[772,2]]}}}],["检测器",{"_index":7064,"t":{"2796":{"position":[[25,3]]}}}],["检索",{"_index":1780,"t":{"243":{"position":[[62,2]]},"255":{"position":[[82,2],[241,2]]},"1566":{"position":[[171,2],[237,2],[331,2]]},"2717":{"position":[[198,2]]}}}],["棒",{"_index":179,"t":{"11":{"position":[[783,1]]},"1511":{"position":[[3026,1],[3120,1]]},"2294":{"position":[[831,1]]}}}],["概念",{"_index":1877,"t":{"261":{"position":[[20,2]]},"1221":{"position":[[33,2]]},"1387":{"position":[[8,2]]},"1392":{"position":[[89,2]]}}}],["概括",{"_index":3907,"t":{"1048":{"position":[[107,2]]}}}],["模",{"_index":7415,"t":{"3106":{"position":[[50,1]]},"3108":{"position":[[11,1]]},"3112":{"position":[[26,1]]}}}],["模块",{"_index":2061,"t":{"310":{"position":[[1077,2]]},"336":{"position":[[385,2],[415,2]]},"340":{"position":[[389,2]]},"342":{"position":[[34,2],[38,2]]},"1052":{"position":[[11,2]]},"1396":{"position":[[77,2]]},"1598":{"position":[[63,2],[118,2]]},"1617":{"position":[[1207,2]]},"1641":{"position":[[183,2]]},"1661":{"position":[[130,2]]},"1735":{"position":[[54,2],[203,2],[227,2],[249,2]]},"2321":{"position":[[34,2]]},"2619":{"position":[[11,2],[56,2],[77,2]]},"2623":{"position":[[270,2]]},"2625":{"position":[[2,2],[45,2],[73,2],[91,2],[207,2],[225,2],[362,2]]},"2627":{"position":[[7,2]]},"2629":{"position":[[35,2],[158,2]]},"2740":{"position":[[95,2]]},"3023":{"position":[[131,2]]},"3104":{"position":[[51,2]]},"3118":{"position":[[125,2]]},"3246":{"position":[[39,2],[74,2],[88,2],[102,2],[116,2]]},"3360":{"position":[[141,2]]},"3614":{"position":[[9,2]]},"3616":{"position":[[33,2],[49,2],[63,2]]},"3638":{"position":[[26,2],[31,2]]},"3779":{"position":[[20,2],[77,2],[166,2]]},"3783":{"position":[[1201,2]]},"3802":{"position":[[19,2],[78,2],[163,2]]},"3804":{"position":[[18,2]]},"3806":{"position":[[8,2]]},"3808":{"position":[[99,2]]},"3817":{"position":[[20,2],[83,2],[172,2]]},"3910":{"position":[[391,2],[425,2]]},"3912":{"position":[[721,2]]},"3914":{"position":[[885,2],[1594,2],[2961,2]]},"3916":{"position":[[1285,2],[2708,2]]},"3920":{"position":[[1715,2]]},"3928":{"position":[[7,2],[31,2],[215,2],[291,2],[390,2],[474,2],[658,2],[722,2]]},"3930":{"position":[[446,2],[731,2],[1343,2]]},"3932":{"position":[[307,2],[355,2],[650,2],[700,2]]},"3934":{"position":[[2539,2]]},"3936":{"position":[[73,2],[108,2],[170,2]]},"3942":{"position":[[128,2],[362,2]]},"3944":{"position":[[11,2],[315,2]]},"3948":{"position":[[119,2]]},"3954":{"position":[[46,2]]},"3960":{"position":[[27,2],[32,2],[39,2],[46,2],[51,2],[58,2],[235,2]]},"3976":{"position":[[133,2]]},"3978":{"position":[[429,2]]},"3992":{"position":[[1053,2]]}}}],["模块化",{"_index":2166,"t":{"336":{"position":[[371,3],[400,3]]},"359":{"position":[[317,3]]},"1719":{"position":[[92,3]]},"1735":{"position":[[6,3],[113,3]]},"2613":{"position":[[8,3]]},"2615":{"position":[[0,3],[15,3]]},"2617":{"position":[[0,3]]},"2621":{"position":[[19,3],[49,3]]},"2623":{"position":[[62,3],[146,3]]},"2625":{"position":[[26,3],[384,3]]},"2627":{"position":[[22,3],[55,3],[118,3],[158,3]]},"3063":{"position":[[873,3]]},"3706":{"position":[[865,3]]},"3950":{"position":[[880,3]]},"3966":{"position":[[1801,3]]},"3970":{"position":[[13,3],[227,3]]},"3976":{"position":[[534,3]]},"3978":{"position":[[1732,3]]}}}],["模块接口",{"_index":9669,"t":{"3954":{"position":[[263,4]]}}}],["模型",{"_index":2765,"t":{"504":{"position":[[204,2],[258,2]]},"516":{"position":[[694,2],[717,2]]},"587":{"position":[[87,2],[712,2],[1034,2]]},"591":{"position":[[106,2]]},"608":{"position":[[34,2]]},"612":{"position":[[14,2]]},"619":{"position":[[11,2]]},"715":{"position":[[32,2]]},"717":{"position":[[2,2]]},"919":{"position":[[17,2]]},"949":{"position":[[781,2]]},"1133":{"position":[[66,2]]},"1360":{"position":[[29,2]]},"1572":{"position":[[47,2]]},"1589":{"position":[[69,2]]},"1761":{"position":[[441,2],[524,2],[601,2]]},"1781":{"position":[[501,2]]},"1881":{"position":[[34,2]]},"1917":{"position":[[26,2]]},"1923":{"position":[[38,2]]},"1951":{"position":[[564,2]]},"3126":{"position":[[586,2]]},"3146":{"position":[[29,2]]},"3150":{"position":[[169,2]]},"3508":{"position":[[184,2]]},"3626":{"position":[[574,2]]},"3928":{"position":[[660,2]]},"3968":{"position":[[490,2]]},"3972":{"position":[[305,2]]},"3986":{"position":[[271,2],[1588,2]]},"3996":{"position":[[948,2],[1805,2]]}}}],["模式",{"_index":1581,"t":{"216":{"position":[[69,2]]},"300":{"position":[[67,2],[110,2]]},"336":{"position":[[35,2],[42,2],[153,2]]},"340":{"position":[[66,2]]},"371":{"position":[[2,2],[24,2],[658,2]]},"401":{"position":[[377,2]]},"455":{"position":[[957,2]]},"516":{"position":[[659,2]]},"685":{"position":[[528,2],[544,2],[584,2],[598,2]]},"688":{"position":[[22,2]]},"1212":{"position":[[18,2],[24,2],[74,2]]},"1551":{"position":[[39,2]]},"1697":{"position":[[11,2]]},"1793":{"position":[[11,2]]},"2276":{"position":[[58,2]]},"2305":{"position":[[31,2],[46,2],[78,2]]},"2307":{"position":[[44,2]]},"2309":{"position":[[117,2]]},"2311":{"position":[[99,2],[260,2]]},"2315":{"position":[[48,2]]},"2345":{"position":[[61,2]]},"2495":{"position":[[45,2]]},"2538":{"position":[[140,2]]},"2587":{"position":[[486,2]]},"2589":{"position":[[456,2]]},"2745":{"position":[[2,2]]},"2747":{"position":[[2,2]]},"2762":{"position":[[10,2],[48,2]]},"2836":{"position":[[860,2],[1197,2]]},"2905":{"position":[[50,2]]},"2910":{"position":[[82,2],[206,2]]},"2915":{"position":[[221,2]]},"2919":{"position":[[84,2]]},"3162":{"position":[[19,2]]},"3242":{"position":[[147,2]]},"3287":{"position":[[56,2]]},"3294":{"position":[[68,2]]},"3339":{"position":[[108,2]]},"3345":{"position":[[60,2]]},"3539":{"position":[[15,2]]},"3573":{"position":[[48,2]]},"3626":{"position":[[395,2]]},"3636":{"position":[[632,2],[645,2],[715,2],[762,2]]},"3910":{"position":[[144,2],[488,2],[535,2]]},"3918":{"position":[[3218,2]]},"3920":{"position":[[450,2],[542,2]]},"3922":{"position":[[306,2]]},"3924":{"position":[[1447,2],[2060,2],[2067,2],[2130,2],[2339,2]]},"3930":{"position":[[985,2]]},"3934":{"position":[[23,2],[488,2],[2252,2],[3146,2]]},"3936":{"position":[[849,2]]},"3944":{"position":[[208,2],[774,2]]},"3950":{"position":[[172,2]]},"3966":{"position":[[139,2],[1837,2]]},"3978":{"position":[[1050,2]]},"3980":{"position":[[619,2]]},"3986":{"position":[[406,2],[1108,2],[1518,2],[1533,2]]}}}],["模拟",{"_index":1878,"t":{"261":{"position":[[28,2]]},"340":{"position":[[532,2]]},"371":{"position":[[67,2],[283,2]]},"1385":{"position":[[137,2]]},"2468":{"position":[[54,2],[179,2]]},"2829":{"position":[[698,2]]},"3768":{"position":[[564,2]]},"3832":{"position":[[380,2],[745,2],[1809,2],[3570,2]]}}}],["模拟出",{"_index":2321,"t":{"371":{"position":[[26,3]]}}}],["模板",{"_index":549,"t":{"93":{"position":[[17,2],[55,2],[85,2],[119,2],[155,2],[208,2],[241,2],[291,2],[313,2],[360,2],[399,2],[442,2],[487,2],[549,2],[591,2],[650,2]]},"1269":{"position":[[18,2],[184,2],[199,2]]},"1286":{"position":[[73,2],[104,2]]},"1293":{"position":[[19,2]]},"1598":{"position":[[46,2],[105,2]]},"2261":{"position":[[5,2],[212,2]]},"2803":{"position":[[37,2]]},"3063":{"position":[[783,2],[788,2]]},"3317":{"position":[[0,2],[55,2],[98,2],[145,2],[196,2],[267,2],[316,2],[385,2]]},"3319":{"position":[[58,2],[118,2],[166,2],[218,2],[274,2],[350,2],[404,2],[478,2]]},"3321":{"position":[[22,2]]},"3333":{"position":[[35,2],[57,2]]},"3430":{"position":[[1808,2],[1896,2],[3203,2]]},"3432":{"position":[[2618,2],[2644,2],[3155,2]]},"3434":{"position":[[2234,2]]},"3464":{"position":[[39,2],[53,2],[260,2]]},"3492":{"position":[[306,2]]},"3526":{"position":[[0,2]]},"3537":{"position":[[208,2]]},"3565":{"position":[[0,2]]},"3670":{"position":[[23,2]]},"3706":{"position":[[775,2],[780,2]]},"3727":{"position":[[10,2]]},"3729":{"position":[[38,2],[75,2],[80,2],[88,2]]},"3740":{"position":[[2,2],[73,2],[100,2],[114,2],[385,2],[431,2],[451,2],[718,2]]},"3742":{"position":[[27,2]]},"3750":{"position":[[214,2]]},"3752":{"position":[[125,2],[364,2],[614,2],[923,2]]},"3754":{"position":[[25,2],[40,2]]},"3912":{"position":[[2185,2]]},"3916":{"position":[[710,2],[968,2],[2482,2]]},"3920":{"position":[[1784,2]]},"3928":{"position":[[531,2]]},"3934":{"position":[[79,2]]},"3936":{"position":[[827,2],[1864,2],[1877,2]]},"3940":{"position":[[444,2],[446,2]]},"3950":{"position":[[555,2]]},"3952":{"position":[[755,2]]},"3960":{"position":[[12,2]]},"3978":{"position":[[120,2],[445,2]]},"3980":{"position":[[66,2],[454,2]]},"3984":{"position":[[151,2]]},"3996":{"position":[[415,2],[1305,2],[1408,2]]},"4002":{"position":[[11,2],[44,2],[78,2],[113,2],[145,2]]}}}],["模糊",{"_index":5687,"t":{"1821":{"position":[[191,2]]},"3261":{"position":[[469,2]]},"3922":{"position":[[2215,2]]}}}],["横杆",{"_index":4923,"t":{"1520":{"position":[[200,2]]}}}],["横线",{"_index":7917,"t":{"3323":{"position":[[405,2]]}}}],["次",{"_index":4715,"t":{"1511":{"position":[[1671,1],[1686,1]]},"2315":{"position":[[296,1]]},"2333":{"position":[[292,1]]},"2409":{"position":[[160,1]]},"2411":{"position":[[148,1]]},"2413":{"position":[[148,1]]},"2415":{"position":[[353,1]]},"2426":{"position":[[169,1]]},"2428":{"position":[[171,1]]},"2430":{"position":[[155,1]]},"2432":{"position":[[155,1]]},"2434":{"position":[[357,1],[694,1]]},"2438":{"position":[[225,1]]},"2440":{"position":[[261,1],[634,1]]},"2442":{"position":[[466,1],[698,1],[971,1],[1254,1],[1488,1],[1745,1],[1973,1]]},"2470":{"position":[[247,1]]},"2472":{"position":[[393,1]]},"2852":{"position":[[36,1]]},"3528":{"position":[[122,1]]},"3567":{"position":[[244,1]]},"3798":{"position":[[482,1],[553,1]]},"3808":{"position":[[3084,1],[3129,1]]},"3832":{"position":[[266,1]]},"3908":{"position":[[66,1],[236,1]]},"3960":{"position":[[444,1]]},"3982":{"position":[[608,1]]}}}],["次数",{"_index":5047,"t":{"1566":{"position":[[310,2]]},"1685":{"position":[[335,2]]},"2398":{"position":[[127,2]]},"2472":{"position":[[387,2]]},"3798":{"position":[[439,2],[469,2],[508,2],[540,2],[574,2]]},"3800":{"position":[[242,2],[268,2]]},"3808":{"position":[[3063,2],[3108,2],[3144,2]]},"3810":{"position":[[755,2],[796,2],[831,2],[873,2],[906,2]]}}}],["欢迎",{"_index":669,"t":{"106":{"position":[[19,2]]},"1539":{"position":[[1565,2]]},"1557":{"position":[[674,2]]}}}],["欧",{"_index":4591,"t":{"1511":{"position":[[386,1]]}}}],["歆",{"_index":4759,"t":{"1511":{"position":[[2177,1]]}}}],["正",{"_index":1567,"t":{"212":{"position":[[32,1]]}}}],["正上方",{"_index":859,"t":{"121":{"position":[[59,3]]}}}],["正则表达式",{"_index":3069,"t":{"587":{"position":[[553,5],[641,5],[892,5]]},"606":{"position":[[873,5]]},"615":{"position":[[657,5],[669,5]]},"1635":{"position":[[592,5]]},"1795":{"position":[[959,5]]},"1821":{"position":[[196,5]]},"2002":{"position":[[51,5]]},"3922":{"position":[[76,5],[2220,5]]},"3930":{"position":[[1132,5]]},"3962":{"position":[[1377,5]]},"3978":{"position":[[924,5]]},"3984":{"position":[[552,5]]},"3986":{"position":[[439,5]]},"3996":{"position":[[261,5]]}}}],["正向",{"_index":3317,"t":{"677":{"position":[[86,2]]},"704":{"position":[[86,2],[234,2]]},"736":{"position":[[35,2]]}}}],["正在",{"_index":1191,"t":{"166":{"position":[[44,2]]},"696":{"position":[[551,2],[615,2],[979,2],[2144,2],[3082,2],[3758,2]]},"1509":{"position":[[210,2]]},"1511":{"position":[[2817,2]]},"3242":{"position":[[222,2]]},"3800":{"position":[[118,2]]},"3910":{"position":[[219,2]]},"3934":{"position":[[2388,2]]}}}],["正如",{"_index":6223,"t":{"2357":{"position":[[0,2]]}}}],["正常",{"_index":876,"t":{"121":{"position":[[171,2]]},"148":{"position":[[284,2]]},"404":{"position":[[137,2]]},"423":{"position":[[100,2]]},"433":{"position":[[189,2]]},"899":{"position":[[1680,2]]},"915":{"position":[[0,2]]},"1481":{"position":[[0,2]]},"1837":{"position":[[63,2]]},"1839":{"position":[[30,2]]},"1955":{"position":[[10,2]]},"2359":{"position":[[433,2]]},"2538":{"position":[[33,2]]},"2646":{"position":[[0,2]]},"2694":{"position":[[56,2]]},"2790":{"position":[[825,2]]},"2796":{"position":[[500,2],[514,2]]},"2881":{"position":[[823,2]]},"3078":{"position":[[0,2]]},"3170":{"position":[[0,2]]},"3418":{"position":[[29,2]]},"3856":{"position":[[0,2]]},"3908":{"position":[[322,2]]},"3952":{"position":[[586,2]]},"3966":{"position":[[1393,2],[1582,2]]},"3968":{"position":[[600,2]]},"3974":{"position":[[708,2]]}}}],["正式",{"_index":2368,"t":{"397":{"position":[[59,2]]},"399":{"position":[[221,2],[631,2],[844,2]]},"401":{"position":[[164,2]]},"1495":{"position":[[13,2]]},"3924":{"position":[[24,2],[607,2]]}}}],["正式版",{"_index":2376,"t":{"397":{"position":[[199,3]]},"2633":{"position":[[47,3]]},"3912":{"position":[[47,3]]},"4006":{"position":[[195,3]]}}}],["正数",{"_index":3132,"t":{"606":{"position":[[54,2]]},"617":{"position":[[1658,2]]},"3994":{"position":[[1268,2]]}}}],["正文",{"_index":5403,"t":{"1747":{"position":[[54,2],[65,2],[78,2]]},"1901":{"position":[[294,2]]}}}],["正是",{"_index":866,"t":{"121":{"position":[[79,2]]},"208":{"position":[[29,2]]},"1516":{"position":[[111,2]]},"1761":{"position":[[526,2]]},"1847":{"position":[[103,2]]},"2649":{"position":[[218,2]]},"2813":{"position":[[76,2]]}}}],["正确",{"_index":1295,"t":{"182":{"position":[[210,2]]},"340":{"position":[[1237,2]]},"419":{"position":[[367,2]]},"1383":{"position":[[61,2],[75,2]]},"1392":{"position":[[113,2]]},"1483":{"position":[[786,2]]},"2251":{"position":[[128,2]]},"3414":{"position":[[32,2],[151,2]]},"3585":{"position":[[96,2]]},"3688":{"position":[[117,2]]},"3916":{"position":[[1658,2],[1779,2],[1936,2]]},"3922":{"position":[[761,2]]},"3924":{"position":[[514,2]]},"3930":{"position":[[1325,2]]},"3942":{"position":[[210,2]]},"3950":{"position":[[437,2],[790,2]]},"3952":{"position":[[323,2],[684,2]]},"3972":{"position":[[393,2]]},"3996":{"position":[[513,2]]}}}],["正确处理",{"_index":9143,"t":{"3914":{"position":[[3087,4]]},"3950":{"position":[[852,4]]}}}],["正道",{"_index":7018,"t":{"2770":{"position":[[258,2]]}}}],["正面",{"_index":4543,"t":{"1509":{"position":[[172,2]]}}}],["此参数",{"_index":3391,"t":{"698":{"position":[[239,3]]}}}],["此处",{"_index":1064,"t":{"133":{"position":[[624,2]]},"550":{"position":[[622,2]]},"713":{"position":[[34,2]]},"1832":{"position":[[10,2]]},"2912":{"position":[[45,2]]},"3595":{"position":[[262,2]]},"3624":{"position":[[21,2]]}}}],["此外",{"_index":4530,"t":{"1509":{"position":[[58,2]]},"1513":{"position":[[0,2]]}}}],["此时",{"_index":3339,"t":{"685":{"position":[[420,2]]},"1923":{"position":[[36,2],[61,2]]},"3118":{"position":[[41,2]]},"3844":{"position":[[812,2]]}}}],["步长",{"_index":6186,"t":{"2333":{"position":[[493,2]]}}}],["步骤",{"_index":112,"t":{"9":{"position":[[24,2]]},"312":{"position":[[4,2]]},"1377":{"position":[[533,2]]},"1379":{"position":[[672,2],[677,2]]},"1474":{"position":[[156,2]]},"1485":{"position":[[330,2]]},"1541":{"position":[[64,2]]},"1551":{"position":[[22,2]]},"2255":{"position":[[91,2]]},"2292":{"position":[[24,2]]},"2357":{"position":[[93,2]]},"2503":{"position":[[132,2]]},"2528":{"position":[[7,2]]},"2875":{"position":[[514,2]]},"2929":{"position":[[761,2]]},"2937":{"position":[[5,2],[98,2]]},"2945":{"position":[[873,2]]},"2959":{"position":[[816,2]]},"3339":{"position":[[71,2]]}}}],["歧义",{"_index":8441,"t":{"3622":{"position":[[44,2]]},"3988":{"position":[[455,2]]}}}],["死循环",{"_index":2970,"t":{"570":{"position":[[857,3]]},"3470":{"position":[[75,3],[160,3]]},"3912":{"position":[[774,3],[1984,3]]},"3916":{"position":[[2367,3]]},"3924":{"position":[[1379,3]]},"3952":{"position":[[590,3]]}}}],["死活",{"_index":4497,"t":{"1495":{"position":[[1279,2]]}}}],["段",{"_index":2663,"t":{"482":{"position":[[1,1]]},"841":{"position":[[14,1],[29,1],[34,1],[69,1]]},"919":{"position":[[31,1]]},"1763":{"position":[[122,1],[184,1]]},"1765":{"position":[[107,1]]},"1857":{"position":[[45,1]]},"2418":{"position":[[226,1]]},"2919":{"position":[[66,1]]},"3094":{"position":[[8,1],[21,1],[30,1],[37,1],[72,1],[94,1]]},"3110":{"position":[[143,1],[205,1]]},"3118":{"position":[[201,1],[368,1]]},"3120":{"position":[[48,1],[58,1],[64,1],[92,1],[97,1]]},"3622":{"position":[[156,1],[167,1]]},"3914":{"position":[[834,1]]},"3964":{"position":[[773,1]]},"3984":{"position":[[400,1]]},"3994":{"position":[[253,1]]},"4000":{"position":[[409,1]]}}}],["段时间",{"_index":4237,"t":{"1394":{"position":[[162,3]]}}}],["毅然",{"_index":9418,"t":{"3926":{"position":[[494,2]]}}}],["每一项",{"_index":3194,"t":{"615":{"position":[[120,3]]},"1855":{"position":[[72,3]]},"3783":{"position":[[1780,3]]}}}],["每个",{"_index":117,"t":{"9":{"position":[[81,2]]},"127":{"position":[[176,2],[1356,2]]},"340":{"position":[[1873,2]]},"482":{"position":[[961,2]]},"1389":{"position":[[6,2]]},"1401":{"position":[[10,2]]},"1403":{"position":[[15,2]]},"1539":{"position":[[1749,2]]},"1627":{"position":[[234,2]]},"1775":{"position":[[13,2]]},"2292":{"position":[[81,2]]},"2418":{"position":[[1325,2]]},"2564":{"position":[[26,2],[92,2]]},"2627":{"position":[[5,2]]},"2815":{"position":[[38,2]]},"2917":{"position":[[30,2],[141,2]]},"2919":{"position":[[160,2]]},"3092":{"position":[[70,2],[165,2]]},"3118":{"position":[[160,2]]},"3254":{"position":[[590,2],[965,2],[1192,2]]},"3448":{"position":[[28,2]]},"3579":{"position":[[62,2],[270,2]]},"3612":{"position":[[2,2]]},"3638":{"position":[[29,2]]},"3926":{"position":[[375,2]]}}}],["每分钟",{"_index":2654,"t":{"480":{"position":[[171,3],[551,3]]},"482":{"position":[[356,3],[560,3]]},"494":{"position":[[142,3]]},"2418":{"position":[[615,3],[860,3],[998,3]]},"2420":{"position":[[26,3],[62,3],[100,3],[647,3],[691,3],[1289,3],[1491,3],[1569,3],[1634,3],[1778,3]]},"2424":{"position":[[129,3]]},"2430":{"position":[[176,3]]},"2432":{"position":[[176,3]]},"2434":{"position":[[62,3],[382,3]]},"2442":{"position":[[476,3],[988,3]]},"3766":{"position":[[20,3],[39,3],[136,3],[277,3]]},"3804":{"position":[[728,3]]},"3808":{"position":[[275,3]]}}}],["每周",{"_index":6332,"t":{"2424":{"position":[[248,2]]}}}],["每周日",{"_index":2659,"t":{"480":{"position":[[384,3],[724,3]]},"494":{"position":[[315,3]]},"3804":{"position":[[974,3]]},"3808":{"position":[[373,3]]}}}],["每天",{"_index":2646,"t":{"480":{"position":[[19,2],[270,2],[630,2]]},"494":{"position":[[221,2]]},"2420":{"position":[[2279,2]]},"2424":{"position":[[186,2],[215,2]]},"3432":{"position":[[1420,2]]},"3804":{"position":[[848,2]]},"3808":{"position":[[318,2]]}}}],["每年",{"_index":2661,"t":{"480":{"position":[[439,2],[769,2]]},"494":{"position":[[360,2]]},"2424":{"position":[[308,2],[345,2]]},"3804":{"position":[[1037,2]]},"3808":{"position":[[399,2]]}}}],["每当",{"_index":885,"t":{"121":{"position":[[251,2]]}}}],["每月",{"_index":2647,"t":{"480":{"position":[[22,2],[326,2],[676,2]]},"482":{"position":[[422,2]]},"494":{"position":[[267,2]]},"2418":{"position":[[715,2]]},"2420":{"position":[[1382,2],[1386,2],[1932,2],[1979,2],[2026,2],[2077,2],[2178,2]]},"2424":{"position":[[274,2],[277,2]]},"3804":{"position":[[909,2]]},"3808":{"position":[[344,2]]}}}],["每次",{"_index":897,"t":{"121":{"position":[[366,2]]},"148":{"position":[[3,2],[305,2]]},"182":{"position":[[23,2]]},"323":{"position":[[155,2]]},"713":{"position":[[63,2]]},"841":{"position":[[55,2]]},"1399":{"position":[[8,2]]},"1488":{"position":[[1637,2]]},"1499":{"position":[[868,2]]},"1511":{"position":[[2121,2]]},"2315":{"position":[[298,2]]},"2717":{"position":[[122,2]]},"2751":{"position":[[41,2]]},"3352":{"position":[[318,2]]},"3528":{"position":[[124,2]]},"3567":{"position":[[246,2]]},"3575":{"position":[[375,2]]},"3579":{"position":[[0,2]]}}}],["每种",{"_index":5806,"t":{"1903":{"position":[[624,2]]},"2615":{"position":[[48,2]]}}}],["每秒",{"_index":2651,"t":{"480":{"position":[[113,2],[503,2]]},"494":{"position":[[94,2]]},"2420":{"position":[[280,2]]},"2438":{"position":[[70,2]]},"2442":{"position":[[708,2],[981,2]]},"3762":{"position":[[504,2]]},"3768":{"position":[[182,2],[2589,2]]},"3791":{"position":[[1337,2]]},"3804":{"position":[[668,2]]},"3808":{"position":[[252,2]]}}}],["每隔",{"_index":2685,"t":{"482":{"position":[[584,2]]},"1809":{"position":[[304,2]]},"2393":{"position":[[92,2]]},"2409":{"position":[[3,2]]},"2415":{"position":[[62,2]]},"2418":{"position":[[886,2]]},"2426":{"position":[[3,2]]},"2428":{"position":[[3,2]]},"2442":{"position":[[250,2]]}}}],["比利时",{"_index":6509,"t":{"2559":{"position":[[755,3],[1090,3]]}}}],["比如",{"_index":1077,"t":{"135":{"position":[[24,2]]},"152":{"position":[[708,2]]},"336":{"position":[[424,2]]},"340":{"position":[[1249,2]]},"373":{"position":[[68,2],[180,2]]},"445":{"position":[[869,2]]},"461":{"position":[[62,2]]},"741":{"position":[[33,2]]},"933":{"position":[[403,2]]},"1031":{"position":[[0,2]]},"1071":{"position":[[74,2]]},"1141":{"position":[[42,2]]},"1392":{"position":[[156,2]]},"1424":{"position":[[2042,2]]},"1432":{"position":[[74,2]]},"1440":{"position":[[537,2]]},"1488":{"position":[[1701,2],[1717,2]]},"1631":{"position":[[582,2]]},"1661":{"position":[[1365,2]]},"1672":{"position":[[44,2]]},"1745":{"position":[[43,2]]},"1775":{"position":[[31,2]]},"1785":{"position":[[18,2]]},"1801":{"position":[[3337,2]]},"1803":{"position":[[5550,2]]},"1832":{"position":[[109,2]]},"1919":{"position":[[365,2]]},"1939":{"position":[[21,2]]},"2055":{"position":[[215,2]]},"2175":{"position":[[35,2]]},"2333":{"position":[[47,2]]},"2343":{"position":[[227,2]]},"2361":{"position":[[401,2]]},"2404":{"position":[[23,2]]},"2436":{"position":[[17,2]]},"2555":{"position":[[29,2]]},"2569":{"position":[[38,2]]},"2619":{"position":[[80,2]]},"2745":{"position":[[299,2]]},"2917":{"position":[[60,2]]},"3023":{"position":[[1362,2]]},"3108":{"position":[[135,2]]},"3158":{"position":[[24,2]]},"3399":{"position":[[668,2]]},"3401":{"position":[[21,2]]},"3432":{"position":[[2459,2],[3420,2],[3908,2]]},"3434":{"position":[[251,2],[2065,2]]},"3452":{"position":[[624,2]]},"3466":{"position":[[786,2]]},"3506":{"position":[[446,2]]},"3680":{"position":[[25,2]]},"3704":{"position":[[34,2]]},"3744":{"position":[[0,2]]},"3766":{"position":[[17,2]]},"3768":{"position":[[571,2]]},"3779":{"position":[[1597,2]]},"3791":{"position":[[1335,2]]},"3802":{"position":[[2358,2]]},"3844":{"position":[[1162,2]]},"3856":{"position":[[42,2]]},"3916":{"position":[[834,2],[3620,2]]},"3924":{"position":[[2253,2]]},"3930":{"position":[[369,2]]},"3984":{"position":[[499,2]]}}}],["比较",{"_index":843,"t":{"119":{"position":[[51,2]]},"121":{"position":[[441,2],[507,2],[714,2]]},"182":{"position":[[21,2]]},"184":{"position":[[84,2]]},"331":{"position":[[3,2]]},"336":{"position":[[185,2]]},"1396":{"position":[[38,2]]},"1485":{"position":[[314,2]]},"1511":{"position":[[1863,2]]},"1677":{"position":[[13,2],[122,2]]},"1685":{"position":[[38,2],[159,2]]},"1689":{"position":[[169,2],[611,2]]},"1801":{"position":[[57,2]]},"2591":{"position":[[6,2]]},"2917":{"position":[[173,2]]},"2919":{"position":[[139,2]]},"2965":{"position":[[12,2]]},"3106":{"position":[[37,2]]},"3108":{"position":[[73,2]]},"3118":{"position":[[55,2]]},"3120":{"position":[[74,2]]},"3124":{"position":[[81,2]]},"3138":{"position":[[129,2]]},"3352":{"position":[[29,2],[218,2]]},"3720":{"position":[[4,2],[12,2]]},"3912":{"position":[[743,2]]}}}],["比较复杂",{"_index":5069,"t":{"1578":{"position":[[133,4],[153,4]]},"3120":{"position":[[103,4]]}}}],["比较简单",{"_index":7228,"t":{"2915":{"position":[[105,4]]},"3397":{"position":[[4,4]]}}}],["毕业生",{"_index":4639,"t":{"1511":{"position":[[794,3]]}}}],["毕竟",{"_index":7091,"t":{"2834":{"position":[[98,2]]}}}],["毛",{"_index":4713,"t":{"1511":{"position":[[1635,1]]}}}],["毫不逊色",{"_index":7764,"t":{"3250":{"position":[[210,4]]}}}],["毫秒",{"_index":2748,"t":{"494":{"position":[[612,2]]},"2404":{"position":[[138,2]]},"3798":{"position":[[606,2]]},"3804":{"position":[[115,2],[435,2]]},"3808":{"position":[[130,2]]},"3912":{"position":[[733,2],[1927,2],[2497,2]]}}}],["水",{"_index":4832,"t":{"1511":{"position":[[3105,1]]}}}],["水平",{"_index":1241,"t":{"179":{"position":[[59,2],[132,2]]},"3088":{"position":[[196,2]]},"3096":{"position":[[163,2]]},"3098":{"position":[[50,2],[57,2],[67,2],[72,2]]},"3106":{"position":[[5,2],[15,2]]},"3110":{"position":[[92,2]]}}}],["水果",{"_index":5026,"t":{"1555":{"position":[[655,2]]}}}],["永不",{"_index":1694,"t":{"233":{"position":[[312,2]]}}}],["永久",{"_index":3951,"t":{"1103":{"position":[[75,2]]}}}],["永久性",{"_index":7837,"t":{"3282":{"position":[[265,3]]}}}],["永远",{"_index":1654,"t":{"225":{"position":[[102,2]]}}}],["求",{"_index":4757,"t":{"1511":{"position":[[2169,1]]}}}],["汇总",{"_index":7446,"t":{"3120":{"position":[[147,2]]}}}],["汇集",{"_index":8363,"t":{"3579":{"position":[[174,2]]}}}],["江左",{"_index":4897,"t":{"1511":{"position":[[4177,2]]}}}],["池",{"_index":4349,"t":{"1465":{"position":[[11,1]]},"1474":{"position":[[94,1],[402,1]]},"1566":{"position":[[592,1]]},"3289":{"position":[[177,1]]},"3339":{"position":[[99,1],[138,1]]},"3579":{"position":[[177,1],[212,1]]},"3914":{"position":[[3344,1]]},"3976":{"position":[[404,1]]},"3982":{"position":[[225,1]]},"3986":{"position":[[928,1]]},"4004":{"position":[[354,1]]},"4006":{"position":[[360,1]]}}}],["污染",{"_index":3054,"t":{"585":{"position":[[560,2]]},"1837":{"position":[[61,2]]}}}],["汲取",{"_index":9388,"t":{"3926":{"position":[[167,2]]}}}],["汶",{"_index":6608,"t":{"2559":{"position":[[1717,1]]}}}],["沙特阿拉伯",{"_index":6456,"t":{"2559":{"position":[[249,5]]}}}],["没",{"_index":4186,"t":{"1383":{"position":[[35,1]]},"1753":{"position":[[275,1]]},"2540":{"position":[[15,1],[50,1],[85,1]]},"2770":{"position":[[108,1]]},"2868":{"position":[[46,1]]},"2965":{"position":[[26,1]]},"3352":{"position":[[590,1]]},"3434":{"position":[[408,1]]},"3986":{"position":[[1204,1]]}}}],["没关系",{"_index":7538,"t":{"3152":{"position":[[50,3]]}}}],["没想到",{"_index":4736,"t":{"1511":{"position":[[1936,3]]}}}],["没有",{"_index":486,"t":{"85":{"position":[[153,2]]},"95":{"position":[[22,2]]},"112":{"position":[[1402,2]]},"121":{"position":[[308,2]]},"206":{"position":[[295,2]]},"208":{"position":[[20,2]]},"338":{"position":[[1147,2]]},"355":{"position":[[541,2]]},"357":{"position":[[18,2]]},"367":{"position":[[107,2]]},"415":{"position":[[126,2],[256,2]]},"455":{"position":[[91,2]]},"585":{"position":[[384,2]]},"713":{"position":[[762,2]]},"719":{"position":[[7,2]]},"734":{"position":[[78,2]]},"1424":{"position":[[435,2]]},"1432":{"position":[[133,2]]},"1511":{"position":[[4062,2]]},"1539":{"position":[[1893,2]]},"1557":{"position":[[237,2],[475,2]]},"1631":{"position":[[14,2]]},"1663":{"position":[[463,2]]},"1761":{"position":[[612,2]]},"1837":{"position":[[70,2],[89,2]]},"1839":{"position":[[41,2]]},"1925":{"position":[[1264,2]]},"2540":{"position":[[73,2]]},"2544":{"position":[[136,2]]},"2684":{"position":[[296,2]]},"2721":{"position":[[0,2],[780,2]]},"2770":{"position":[[87,2]]},"2809":{"position":[[43,2]]},"2879":{"position":[[48,2]]},"2991":{"position":[[132,2],[262,2]]},"3189":{"position":[[56,2]]},"3352":{"position":[[148,2],[202,2],[419,2],[472,2],[644,2]]},"3375":{"position":[[12,2]]},"3414":{"position":[[19,2],[39,2]]},"3458":{"position":[[547,2]]},"3626":{"position":[[151,2]]},"3636":{"position":[[552,2],[677,2]]},"3800":{"position":[[153,2]]},"3914":{"position":[[3085,2],[3155,2]]},"3918":{"position":[[3450,2]]},"3926":{"position":[[75,2]]},"3928":{"position":[[199,2]]},"3958":{"position":[[136,2]]},"3962":{"position":[[1027,2],[1031,2]]},"3966":{"position":[[842,2],[873,2],[1241,2],[1887,2]]},"3972":{"position":[[389,2]]},"3978":{"position":[[1606,2]]},"3982":{"position":[[448,2]]},"3984":{"position":[[816,2]]},"3992":{"position":[[2876,2],[3117,2],[3427,2],[3612,2],[3853,2]]},"3994":{"position":[[1085,2],[1387,2]]},"3996":{"position":[[572,2],[969,2]]}}}],["没错",{"_index":2242,"t":{"340":{"position":[[1939,2]]}}}],["油面筋",{"_index":6955,"t":{"2768":{"position":[[866,3]]}}}],["油麦",{"_index":4577,"t":{"1511":{"position":[[218,2]]}}}],["治理",{"_index":7389,"t":{"3092":{"position":[[61,2],[141,2]]},"3096":{"position":[[25,2]]}}}],["泄漏",{"_index":10015,"t":{"3980":{"position":[[403,2]]}}}],["法",{"_index":8428,"t":{"3620":{"position":[[66,1]]},"3779":{"position":[[1271,1],[1286,1],[1319,1],[1896,1],[1911,1],[1936,1]]},"3802":{"position":[[1889,1],[1904,1],[1937,1],[2673,1],[2688,1],[2713,1]]},"3817":{"position":[[2485,1],[2500,1],[2533,1]]}}}],["法国",{"_index":6548,"t":{"2559":{"position":[[1077,2],[1086,2],[1100,2],[1114,2],[1118,2],[1127,2],[1141,2],[1155,2]]}}}],["法罗群岛",{"_index":6539,"t":{"2559":{"position":[[1025,4]]}}}],["泛",{"_index":2263,"t":{"350":{"position":[[725,1]]},"504":{"position":[[67,1]]},"548":{"position":[[73,1],[231,1]]},"810":{"position":[[249,1]]},"812":{"position":[[265,1]]},"814":{"position":[[247,1]]},"816":{"position":[[263,1]]},"911":{"position":[[196,1]]},"990":{"position":[[15,1],[52,1]]},"1026":{"position":[[4,1],[49,1]]},"1066":{"position":[[1656,1],[1705,1]]},"1111":{"position":[[267,1]]},"1113":{"position":[[265,1]]},"1115":{"position":[[268,1]]},"1117":{"position":[[2789,1]]},"1119":{"position":[[248,1]]},"1121":{"position":[[264,1]]},"1123":{"position":[[225,1]]},"1129":{"position":[[383,1],[1269,1]]},"1133":{"position":[[158,1],[178,1]]},"1151":{"position":[[9,1]]},"1412":{"position":[[1413,1]]},"1440":{"position":[[727,1],[734,1],[840,1]]},"1576":{"position":[[247,1]]},"1580":{"position":[[190,1],[366,1],[371,1]]},"1867":{"position":[[712,1]]},"2313":{"position":[[491,1]]},"2605":{"position":[[45,1]]},"2877":{"position":[[107,1],[272,1]]},"2905":{"position":[[100,1],[398,1]]},"3154":{"position":[[34,1]]},"3168":{"position":[[19,1]]},"3420":{"position":[[283,1]]},"3506":{"position":[[77,1],[188,1]]},"3520":{"position":[[66,1]]},"3561":{"position":[[66,1]]},"3708":{"position":[[83,1]]},"3783":{"position":[[1375,1]]},"3842":{"position":[[1167,1],[1732,1],[2322,1],[2963,1]]},"3910":{"position":[[597,1],[787,1],[952,1]]},"3914":{"position":[[3289,1]]},"3916":{"position":[[1930,1]]},"3918":{"position":[[3221,1]]},"3930":{"position":[[1466,1]]},"3946":{"position":[[416,1]]},"3948":{"position":[[554,1]]},"3954":{"position":[[758,1]]},"3972":{"position":[[506,1]]},"3980":{"position":[[466,1]]},"3982":{"position":[[485,1]]},"3994":{"position":[[1156,1],[1299,1],[1304,1],[1420,1]]}}}],["波兰",{"_index":6620,"t":{"2559":{"position":[[1832,2],[1841,2],[1845,2]]}}}],["波多黎各",{"_index":6667,"t":{"2559":{"position":[[2356,4]]}}}],["波斯语",{"_index":6541,"t":{"2559":{"position":[[1033,3],[1043,3]]}}}],["注",{"_index":961,"t":{"127":{"position":[[285,1]]},"1511":{"position":[[184,1]]},"3492":{"position":[[304,1]]},"3537":{"position":[[206,1]]}}}],["注入",{"_index":350,"t":{"21":{"position":[[171,2]]},"23":{"position":[[153,2]]},"28":{"position":[[57,2]]},"98":{"position":[[143,2]]},"218":{"position":[[21,2],[40,2],[252,2],[288,2],[312,2],[334,2]]},"229":{"position":[[33,2],[51,2]]},"253":{"position":[[56,2]]},"321":{"position":[[20,2],[296,2]]},"435":{"position":[[26,2],[105,2],[837,2],[847,2],[849,2],[864,2],[1010,2],[1099,2],[1179,2]]},"437":{"position":[[4,2],[11,2],[40,2]]},"447":{"position":[[80,2]]},"548":{"position":[[16,2]]},"941":{"position":[[103,2],[152,2],[207,2]]},"949":{"position":[[323,2]]},"988":{"position":[[38,2],[50,2]]},"1107":{"position":[[55,2]]},"1206":{"position":[[40,2]]},"1210":{"position":[[46,2]]},"1223":{"position":[[275,2]]},"1383":{"position":[[19,2],[95,2],[176,2]]},"1385":{"position":[[4,2],[53,2],[107,2],[146,2]]},"1389":{"position":[[79,2],[215,2],[246,2],[292,2]]},"1392":{"position":[[6,2],[11,2],[188,2]]},"1394":{"position":[[25,2],[43,2],[79,2],[89,2]]},"1396":{"position":[[4,2],[28,2],[91,2]]},"1403":{"position":[[102,2]]},"1408":{"position":[[1035,2],[1108,2],[1117,2],[1150,2],[1202,2],[1308,2]]},"1412":{"position":[[74,2]]},"1414":{"position":[[26,2]]},"1418":{"position":[[29,2],[324,2]]},"1420":{"position":[[10,2],[22,2],[469,2],[493,2],[543,2],[675,2],[933,2]]},"1428":{"position":[[23,2]]},"1440":{"position":[[21,2],[52,2]]},"1711":{"position":[[25,2],[897,2],[949,2],[968,2]]},"1724":{"position":[[67,2]]},"1795":{"position":[[1934,2],[2009,2]]},"1811":{"position":[[50,2],[59,2]]},"1903":{"position":[[212,2],[258,2]]},"1909":{"position":[[268,2],[404,2],[852,2]]},"1963":{"position":[[12,2]]},"2231":{"position":[[153,2]]},"2237":{"position":[[57,2]]},"2264":{"position":[[22,2]]},"2331":{"position":[[273,2]]},"2348":{"position":[[51,2]]},"2442":{"position":[[2012,2],[2062,2],[2081,2]]},"2551":{"position":[[28,2]]},"2581":{"position":[[51,2]]},"2585":{"position":[[8,2],[22,2]]},"2587":{"position":[[481,2]]},"2605":{"position":[[16,2]]},"2690":{"position":[[369,2]]},"2692":{"position":[[33,2]]},"2713":{"position":[[70,2],[400,2]]},"2715":{"position":[[59,2],[66,2],[117,2]]},"2717":{"position":[[82,2],[152,2],[234,2]]},"2731":{"position":[[220,2]]},"2796":{"position":[[129,2]]},"2819":{"position":[[563,2]]},"2831":{"position":[[36,2],[43,2]]},"2981":{"position":[[39,2]]},"2999":{"position":[[2,2],[21,2]]},"3001":{"position":[[30,2],[54,2],[104,2],[236,2],[307,2],[333,2],[358,2],[382,2],[425,2]]},"3215":{"position":[[638,2],[649,2]]},"3224":{"position":[[1825,2]]},"3246":{"position":[[114,2]]},"3256":{"position":[[16,2]]},"3377":{"position":[[21,2],[55,2]]},"3383":{"position":[[22,2]]},"3389":{"position":[[66,2],[197,2],[973,2]]},"3391":{"position":[[95,2],[289,2]]},"3393":{"position":[[124,2],[541,2]]},"3420":{"position":[[27,2]]},"3434":{"position":[[234,2],[253,2]]},"3440":{"position":[[114,2]]},"3452":{"position":[[607,2],[626,2]]},"3458":{"position":[[325,2],[716,2]]},"3483":{"position":[[551,2]]},"3734":{"position":[[4,2]]},"3772":{"position":[[239,2]]},"3791":{"position":[[46,2]]},"3834":{"position":[[68,2]]},"3910":{"position":[[2493,2]]},"3914":{"position":[[2609,2]]},"3916":{"position":[[3603,2],[3622,2]]},"3918":{"position":[[4171,2]]},"3922":{"position":[[2434,2]]},"3924":{"position":[[1360,2],[2661,2],[3215,2]]},"3936":{"position":[[964,2]]},"3942":{"position":[[126,2],[407,2]]},"3948":{"position":[[413,2]]},"3954":{"position":[[261,2]]},"3958":{"position":[[89,2]]},"3968":{"position":[[810,2]]},"3978":{"position":[[308,2],[945,2]]},"3982":{"position":[[130,2],[483,2]]},"3988":{"position":[[137,2]]},"3992":{"position":[[2548,2],[3011,2]]},"3994":{"position":[[222,2],[1310,2]]},"3998":{"position":[[565,2]]},"4004":{"position":[[289,2],[338,2]]},"4006":{"position":[[57,2],[67,2],[114,2],[340,2]]}}}],["注册",{"_index":45,"t":{"3":{"position":[[355,2],[396,2]]},"28":{"position":[[17,2]]},"112":{"position":[[1593,2]]},"127":{"position":[[60,2],[100,2],[348,2]]},"133":{"position":[[1112,2]]},"150":{"position":[[126,2]]},"206":{"position":[[342,2]]},"229":{"position":[[83,2],[90,2]]},"245":{"position":[[250,2],[298,2]]},"247":{"position":[[428,2]]},"249":{"position":[[78,2]]},"251":{"position":[[233,2]]},"310":{"position":[[677,2],[1071,2]]},"336":{"position":[[232,2],[331,2],[337,2],[378,2],[391,2],[394,2],[417,2]]},"338":{"position":[[1216,2]]},"340":{"position":[[419,2],[446,2],[1292,2],[1296,2],[1549,2],[1553,2]]},"344":{"position":[[413,2],[428,2]]},"346":{"position":[[496,2],[512,2]]},"348":{"position":[[441,2],[457,2]]},"350":{"position":[[12,2],[498,2],[716,2],[727,2]]},"355":{"position":[[16,2]]},"359":{"position":[[71,2]]},"361":{"position":[[33,2],[44,2]]},"363":{"position":[[12,2]]},"365":{"position":[[20,2]]},"369":{"position":[[1,2],[421,2]]},"371":{"position":[[636,2]]},"411":{"position":[[569,2],[646,2]]},"512":{"position":[[28,2]]},"514":{"position":[[635,2],[644,2]]},"518":{"position":[[540,2],[598,2],[613,2]]},"524":{"position":[[21,2]]},"526":{"position":[[30,2]]},"530":{"position":[[15,2]]},"534":{"position":[[103,2],[135,2]]},"572":{"position":[[1214,2],[1225,2]]},"593":{"position":[[51,2]]},"595":{"position":[[356,2]]},"617":{"position":[[2166,2]]},"621":{"position":[[30,2]]},"625":{"position":[[7,2]]},"899":{"position":[[3,2],[243,2],[311,2],[379,2],[467,2],[715,2],[787,2],[937,2],[1009,2],[1507,2]]},"915":{"position":[[10,2]]},"935":{"position":[[21,2]]},"939":{"position":[[12,2]]},"947":{"position":[[534,2]]},"1039":{"position":[[15,2]]},"1313":{"position":[[489,2]]},"1317":{"position":[[532,2],[549,2],[562,2]]},"1412":{"position":[[34,2]]},"1416":{"position":[[30,2],[81,2],[126,2],[154,2],[162,2],[175,2],[212,2],[233,2],[264,2],[297,2],[308,2],[393,2],[408,2],[515,2]]},"1418":{"position":[[16,2],[39,2],[301,2]]},"1420":{"position":[[721,2],[772,2],[806,2],[840,2],[950,2]]},"1422":{"position":[[13,2],[29,2],[38,2],[86,2],[139,2],[148,2]]},"1440":{"position":[[120,2],[415,2],[445,2],[482,2],[660,2],[692,2],[729,2]]},"1468":{"position":[[37,2]]},"1582":{"position":[[58,2],[445,2]]},"1587":{"position":[[16,2]]},"1589":{"position":[[17,2]]},"1685":{"position":[[201,2]]},"1701":{"position":[[45,2]]},"1781":{"position":[[462,2]]},"1783":{"position":[[49,2],[99,2]]},"1795":{"position":[[2523,2],[2542,2],[2594,2],[2661,2],[2738,2],[2845,2]]},"1799":{"position":[[703,2]]},"1805":{"position":[[449,2]]},"1807":{"position":[[772,2],[787,2]]},"1809":{"position":[[401,2],[416,2]]},"1811":{"position":[[27,2]]},"1819":{"position":[[452,2],[922,2]]},"1841":{"position":[[81,2]]},"1843":{"position":[[362,2]]},"1867":{"position":[[716,2],[726,2]]},"1905":{"position":[[21,2],[34,2],[49,2],[91,2],[104,2]]},"1907":{"position":[[4,2],[28,2],[39,2],[138,2],[465,2],[561,2]]},"1909":{"position":[[20,2],[31,2],[334,2],[541,2]]},"1913":{"position":[[1235,2],[1258,2],[1454,2]]},"1919":{"position":[[698,2],[721,2],[907,2]]},"1925":{"position":[[1427,2],[1450,2],[1632,2]]},"1927":{"position":[[744,2],[767,2],[955,2]]},"1933":{"position":[[864,2],[887,2],[1075,2]]},"1935":{"position":[[359,2],[382,2],[576,2]]},"1941":{"position":[[1115,2],[1138,2],[1320,2]]},"1943":{"position":[[309,2],[332,2],[520,2]]},"1951":{"position":[[756,2],[779,2]]},"1961":{"position":[[48,2],[67,2]]},"1963":{"position":[[40,2]]},"1995":{"position":[[36,2]]},"2018":{"position":[[36,2]]},"2096":{"position":[[42,2],[58,2],[157,2]]},"2175":{"position":[[289,2]]},"2237":{"position":[[17,2]]},"2255":{"position":[[534,2]]},"2266":{"position":[[23,2],[72,2],[125,2],[220,2],[292,2],[337,2]]},"2272":{"position":[[57,2],[81,2],[353,2],[369,2],[422,2],[438,2]]},"2274":{"position":[[61,2],[89,2]]},"2278":{"position":[[138,2]]},"2281":{"position":[[49,2],[73,2],[346,2]]},"2283":{"position":[[53,2]]},"2345":{"position":[[863,2]]},"2357":{"position":[[191,2],[258,2]]},"2395":{"position":[[163,2]]},"2406":{"position":[[685,2]]},"2415":{"position":[[378,2]]},"2434":{"position":[[745,2]]},"2519":{"position":[[14,2],[144,2],[303,2],[440,2]]},"2583":{"position":[[15,2]]},"2589":{"position":[[224,2]]},"2709":{"position":[[278,2]]},"2711":{"position":[[15,2]]},"2717":{"position":[[72,2],[141,2],[224,2]]},"2725":{"position":[[72,2]]},"2733":{"position":[[92,2]]},"2805":{"position":[[522,2]]},"2807":{"position":[[145,2]]},"2813":{"position":[[718,2],[1151,2]]},"2819":{"position":[[475,2],[551,2],[621,2]]},"2821":{"position":[[15,2],[50,2],[107,2],[484,2],[576,2],[621,2]]},"2836":{"position":[[586,2],[1792,2]]},"2848":{"position":[[17,2],[168,2],[334,2],[822,2],[888,2]]},"2879":{"position":[[50,2]]},"2881":{"position":[[74,2]]},"2889":{"position":[[159,2],[457,2],[566,2]]},"2901":{"position":[[3,2]]},"2943":{"position":[[461,2],[494,2]]},"3001":{"position":[[282,2],[323,2],[348,2],[372,2]]},"3144":{"position":[[23,2],[62,2],[522,2]]},"3156":{"position":[[574,2]]},"3158":{"position":[[9,2]]},"3162":{"position":[[14,2]]},"3189":{"position":[[287,2]]},"3194":{"position":[[624,2]]},"3215":{"position":[[810,2]]},"3287":{"position":[[1282,2],[2974,2]]},"3339":{"position":[[309,2]]},"3373":{"position":[[385,2]]},"3389":{"position":[[16,2],[29,2],[410,2]]},"3399":{"position":[[313,2],[355,2],[446,2]]},"3428":{"position":[[60,2],[110,2]]},"3448":{"position":[[42,2],[204,2]]},"3458":{"position":[[0,2],[481,2],[564,2]]},"3481":{"position":[[18,2]]},"3581":{"position":[[411,2]]},"3583":{"position":[[599,2]]},"3593":{"position":[[81,2],[85,2]]},"3630":{"position":[[51,2],[58,2]]},"3676":{"position":[[84,2],[154,2],[179,2]]},"3702":{"position":[[30,2]]},"3708":{"position":[[3769,2],[4103,2],[4144,2]]},"3716":{"position":[[773,2]]},"3722":{"position":[[47,2]]},"3732":{"position":[[19,2]]},"3762":{"position":[[388,2],[441,2]]},"3772":{"position":[[39,2],[83,2],[129,2]]},"3791":{"position":[[19,2]]},"3824":{"position":[[80,2]]},"3828":{"position":[[814,2],[829,2]]},"3832":{"position":[[787,2],[802,2]]},"3834":{"position":[[52,2]]},"3910":{"position":[[678,2]]},"3914":{"position":[[2615,2]]},"3918":{"position":[[3931,2]]},"3922":{"position":[[1986,2]]},"3924":{"position":[[1884,2]]},"3928":{"position":[[1103,2]]},"3932":{"position":[[2535,2]]},"3934":{"position":[[570,2],[704,2]]},"3942":{"position":[[137,2]]},"3954":{"position":[[570,2]]},"3962":{"position":[[1033,2]]},"3970":{"position":[[224,2]]},"3972":{"position":[[643,2]]},"3974":{"position":[[217,2]]},"3982":{"position":[[134,2],[489,2]]},"3994":{"position":[[1424,2]]}}}],["注射",{"_index":6068,"t":{"2264":{"position":[[25,2]]}}}],["注意",{"_index":125,"t":{"9":{"position":[[167,2]]},"11":{"position":[[634,2]]},"51":{"position":[[75,2]]},"62":{"position":[[75,2]]},"75":{"position":[[75,2]]},"127":{"position":[[73,2]]},"129":{"position":[[343,2]]},"150":{"position":[[62,2]]},"220":{"position":[[807,2]]},"308":{"position":[[236,2]]},"319":{"position":[[115,2],[408,2]]},"321":{"position":[[126,2]]},"411":{"position":[[507,2]]},"419":{"position":[[225,2]]},"427":{"position":[[7,2]]},"433":{"position":[[80,2]]},"455":{"position":[[865,2]]},"510":{"position":[[439,2]]},"514":{"position":[[620,2]]},"518":{"position":[[499,2]]},"522":{"position":[[2,2]]},"530":{"position":[[772,2]]},"595":{"position":[[301,2]]},"615":{"position":[[1082,2]]},"653":{"position":[[144,2]]},"681":{"position":[[0,2]]},"706":{"position":[[2,2]]},"824":{"position":[[244,2]]},"881":{"position":[[385,2]]},"899":{"position":[[1092,2]]},"1039":{"position":[[773,2]]},"1056":{"position":[[383,2]]},"1145":{"position":[[502,2]]},"1240":{"position":[[1168,2]]},"1257":{"position":[[460,2]]},"1311":{"position":[[328,2]]},"1319":{"position":[[2,2]]},"1377":{"position":[[260,2],[384,2]]},"1405":{"position":[[105,2]]},"1412":{"position":[[1408,2]]},"1483":{"position":[[782,2],[1189,2]]},"1495":{"position":[[1248,2]]},"1582":{"position":[[382,2]]},"1611":{"position":[[865,2]]},"1615":{"position":[[264,2]]},"1619":{"position":[[430,2]]},"1627":{"position":[[332,2]]},"1631":{"position":[[627,2]]},"1647":{"position":[[365,2]]},"1683":{"position":[[286,2]]},"1711":{"position":[[805,2]]},"1741":{"position":[[1612,2]]},"1753":{"position":[[259,2]]},"1773":{"position":[[270,2]]},"1775":{"position":[[3704,2]]},"1781":{"position":[[432,2]]},"1801":{"position":[[1747,2]]},"1843":{"position":[[304,2]]},"1865":{"position":[[452,2]]},"1871":{"position":[[80,2]]},"1973":{"position":[[55,2]]},"1987":{"position":[[55,2]]},"2010":{"position":[[63,2]]},"2033":{"position":[[90,2]]},"2047":{"position":[[50,2]]},"2055":{"position":[[292,2]]},"2182":{"position":[[227,2]]},"2251":{"position":[[299,2]]},"2255":{"position":[[463,2]]},"2278":{"position":[[109,2]]},"2292":{"position":[[167,2]]},"2294":{"position":[[663,2],[770,2]]},"2333":{"position":[[286,2]]},"2352":{"position":[[142,2]]},"2359":{"position":[[402,2]]},"2478":{"position":[[452,2]]},"2519":{"position":[[387,2]]},"2613":{"position":[[2,2]]},"2625":{"position":[[518,2]]},"2713":{"position":[[271,2]]},"2735":{"position":[[381,2]]},"2745":{"position":[[168,2],[253,2]]},"2747":{"position":[[171,2],[288,2]]},"2758":{"position":[[13,2]]},"2792":{"position":[[124,2]]},"2836":{"position":[[951,2]]},"2848":{"position":[[326,2]]},"2889":{"position":[[65,2]]},"2925":{"position":[[436,2]]},"2941":{"position":[[436,2]]},"2943":{"position":[[423,2]]},"2951":{"position":[[602,2]]},"2955":{"position":[[436,2]]},"3080":{"position":[[387,2]]},"3082":{"position":[[55,2]]},"3277":{"position":[[0,2]]},"3345":{"position":[[209,2],[278,2]]},"3369":{"position":[[95,2]]},"3393":{"position":[[141,2]]},"3432":{"position":[[228,2]]},"3434":{"position":[[648,2]]},"3442":{"position":[[179,2]]},"3458":{"position":[[543,2]]},"3500":{"position":[[727,2]]},"3636":{"position":[[591,2]]},"3672":{"position":[[295,2]]},"3708":{"position":[[3859,2]]},"3718":{"position":[[5,2]]},"3932":{"position":[[2395,2]]},"3944":{"position":[[862,2]]}}}],["注意事项",{"_index":1002,"t":{"127":{"position":[[1316,4]]},"206":{"position":[[266,4]]},"498":{"position":[[7,4]]},"679":{"position":[[4,4]]},"685":{"position":[[548,4]]},"688":{"position":[[73,4]]},"893":{"position":[[7,4]]},"1549":{"position":[[205,4]]},"1574":{"position":[[52,4]]},"1663":{"position":[[440,4]]},"2717":{"position":[[307,4]]},"3341":{"position":[[0,4]]},"3688":{"position":[[712,4]]}}}],["注解",{"_index":5710,"t":{"1834":{"position":[[68,2]]}}}],["注释",{"_index":2077,"t":{"314":{"position":[[421,2],[574,2]]},"433":{"position":[[146,2],[179,2]]},"2627":{"position":[[168,2]]},"3063":{"position":[[381,2]]},"3626":{"position":[[135,2],[154,2],[176,2]]},"3636":{"position":[[72,2],[97,2],[210,2],[304,2],[421,2],[550,2],[649,2],[681,2],[768,2]]},"3664":{"position":[[114,2],[581,2]]},"3688":{"position":[[54,2],[97,2],[484,2]]},"3706":{"position":[[373,2]]},"3918":{"position":[[3417,2]]},"3934":{"position":[[1600,2]]},"3936":{"position":[[790,2]]},"3938":{"position":[[500,2]]},"3940":{"position":[[166,2],[174,2],[286,2],[294,2],[1051,2],[1066,2],[1372,2]]},"3958":{"position":[[413,2]]},"3970":{"position":[[25,2]]},"4006":{"position":[[475,2]]}}}],["注重",{"_index":2147,"t":{"331":{"position":[[5,2]]}}}],["泰国",{"_index":6686,"t":{"2559":{"position":[[2574,2],[2583,2],[2587,2]]}}}],["津巴布韦",{"_index":6534,"t":{"2559":{"position":[[968,4]]}}}],["洪都拉斯",{"_index":6657,"t":{"2559":{"position":[[2264,4]]}}}],["活动",{"_index":1238,"t":{"179":{"position":[[33,2]]},"2910":{"position":[[336,2]]},"3350":{"position":[[181,2]]}}}],["派生",{"_index":2247,"t":{"342":{"position":[[61,2]]},"1412":{"position":[[216,2]]},"1685":{"position":[[437,2]]},"1887":{"position":[[74,2]]},"1903":{"position":[[308,2]]},"1909":{"position":[[5,2]]},"1915":{"position":[[12,2]]},"1921":{"position":[[12,2]]},"1929":{"position":[[12,2]]},"1937":{"position":[[12,2]]},"1945":{"position":[[12,2]]},"2805":{"position":[[30,2]]},"2889":{"position":[[12,2]]},"2901":{"position":[[24,2]]},"3688":{"position":[[60,2]]}}}],["派生类",{"_index":354,"t":{"26":{"position":[[17,3]]},"206":{"position":[[286,3]]},"210":{"position":[[11,3]]},"212":{"position":[[66,3]]},"218":{"position":[[12,3]]},"653":{"position":[[201,3]]},"1353":{"position":[[168,3]]},"1707":{"position":[[34,3]]},"2235":{"position":[[17,3]]},"2627":{"position":[[152,3]]},"2868":{"position":[[176,3]]},"3158":{"position":[[44,3]]},"3802":{"position":[[227,3]]},"3934":{"position":[[734,3]]},"3936":{"position":[[511,3]]},"3996":{"position":[[673,3]]}}}],["流",{"_index":2110,"t":{"319":{"position":[[594,1],[602,1]]},"1511":{"position":[[387,1]]},"2843":{"position":[[270,1]]},"2856":{"position":[[46,1]]},"3287":{"position":[[1043,1]]},"3416":{"position":[[219,1]]},"3432":{"position":[[4099,1]]},"3520":{"position":[[60,1]]},"3561":{"position":[[60,1]]},"3916":{"position":[[7078,1]]},"3960":{"position":[[655,1]]}}}],["流程",{"_index":937,"t":{"121":{"position":[[734,2]]},"1697":{"position":[[81,2]]},"1875":{"position":[[633,2]]}}}],["流行",{"_index":455,"t":{"81":{"position":[[18,2]]},"186":{"position":[[104,2]]},"1511":{"position":[[4007,2]]},"2261":{"position":[[69,2],[273,2]]},"2532":{"position":[[97,2]]},"3356":{"position":[[7,2]]},"3464":{"position":[[117,2],[321,2]]},"3608":{"position":[[72,2]]},"3936":{"position":[[1941,2],[2132,2]]}}}],["流量",{"_index":4550,"t":{"1509":{"position":[[241,2]]}}}],["浅",{"_index":7982,"t":{"3354":{"position":[[17,1]]}}}],["浅显易懂",{"_index":7223,"t":{"2912":{"position":[[183,4]]}}}],["测",{"_index":4500,"t":{"1495":{"position":[[1312,1]]},"2678":{"position":[[9,1]]},"3350":{"position":[[151,1]]},"3352":{"position":[[330,1],[407,1]]},"3918":{"position":[[3535,1]]}}}],["测定",{"_index":1250,"t":{"179":{"position":[[126,2]]}}}],["测试",{"_index":656,"t":{"104":{"position":[[40,2],[53,2],[67,2],[71,2]]},"179":{"position":[[2,2],[48,2],[91,2],[111,2]]},"182":{"position":[[12,2],[26,2],[80,2],[137,2],[169,2],[236,2]]},"184":{"position":[[22,2],[43,2]]},"186":{"position":[[109,2]]},"188":{"position":[[49,2]]},"196":{"position":[[8,2]]},"225":{"position":[[95,2]]},"245":{"position":[[135,2]]},"255":{"position":[[176,2]]},"1385":{"position":[[139,2]]},"1488":{"position":[[13,2],[1574,2]]},"1541":{"position":[[22,2],[298,2],[349,2]]},"1545":{"position":[[61,2]]},"1547":{"position":[[268,2]]},"1549":{"position":[[289,2],[299,2],[331,2]]},"1677":{"position":[[3,2]]},"1679":{"position":[[3,2]]},"1681":{"position":[[3,2]]},"1685":{"position":[[25,2]]},"1687":{"position":[[3,2]]},"1691":{"position":[[303,2]]},"2646":{"position":[[134,2]]},"2782":{"position":[[98,2]]},"3194":{"position":[[546,2]]},"3350":{"position":[[38,2],[179,2],[210,2]]},"3352":{"position":[[20,2],[45,2],[63,2],[104,2],[152,2],[370,2],[403,2],[514,2]]},"3354":{"position":[[9,2],[21,2],[31,2],[38,2]]},"3360":{"position":[[150,2],[213,2]]},"3362":{"position":[[17,2],[24,2],[36,2]]},"3365":{"position":[[14,2],[33,2]]},"3373":{"position":[[67,2],[533,2],[638,2]]},"3375":{"position":[[38,2],[83,2],[184,2],[238,2]]},"3377":{"position":[[9,2]]},"3381":{"position":[[229,2]]},"3385":{"position":[[46,2],[69,2]]},"3387":{"position":[[8,2]]},"3389":{"position":[[966,2],[1298,2]]},"3391":{"position":[[282,2],[753,2]]},"3393":{"position":[[59,2],[111,2],[534,2],[1171,2]]},"3395":{"position":[[6,2],[32,2],[42,2]]},"3397":{"position":[[33,2],[98,2],[125,2],[219,2],[270,2],[281,2],[1095,2],[1108,2]]},"3399":{"position":[[19,2],[29,2],[92,2],[635,2]]},"3401":{"position":[[7,2],[93,2],[339,2]]},"3403":{"position":[[6,2]]},"3409":{"position":[[54,2]]},"3444":{"position":[[72,2]]},"3456":{"position":[[268,2]]},"3610":{"position":[[63,2]]},"3688":{"position":[[482,2]]},"3702":{"position":[[54,2]]},"3910":{"position":[[684,2]]},"3922":{"position":[[2380,2]]},"3924":{"position":[[2177,2],[2182,2],[2558,2],[2577,2],[3206,2],[3447,2]]},"3934":{"position":[[1539,2],[1586,2]]},"3940":{"position":[[1370,2]]},"3972":{"position":[[630,2],[652,2]]}}}],["测试人员",{"_index":8416,"t":{"3610":{"position":[[55,4]]}}}],["测试代码",{"_index":7165,"t":{"2881":{"position":[[61,4]]},"3352":{"position":[[325,4]]},"3375":{"position":[[95,4]]}}}],["测试工具",{"_index":1310,"t":{"186":{"position":[[30,4]]}}}],["测试方法",{"_index":1296,"t":{"182":{"position":[[213,4]]},"3365":{"position":[[6,4]]},"3373":{"position":[[503,4]]},"3375":{"position":[[6,4]]}}}],["测试日志",{"_index":8216,"t":{"3452":{"position":[[3232,4]]},"3916":{"position":[[6228,4]]}}}],["测试环境",{"_index":5939,"t":{"2055":{"position":[[220,4]]},"3287":{"position":[[171,4],[496,4]]}}}],["测试通过",{"_index":6778,"t":{"2646":{"position":[[97,4]]},"2655":{"position":[[0,4]]},"3360":{"position":[[206,4]]}}}],["测试项目",{"_index":8030,"t":{"3397":{"position":[[105,4],[115,4]]}}}],["测量",{"_index":1234,"t":{"179":{"position":[[21,2]]},"186":{"position":[[77,2],[124,2]]}}}],["浏览",{"_index":857,"t":{"121":{"position":[[49,2]]}}}],["浏览器",{"_index":443,"t":{"55":{"position":[[2,3]]},"66":{"position":[[2,3]]},"79":{"position":[[2,3]]},"114":{"position":[[408,3]]},"121":{"position":[[56,3],[128,3]]},"152":{"position":[[28,3],[40,3]]},"404":{"position":[[65,3],[106,3],[133,3],[172,3]]},"1511":{"position":[[4185,3]]},"1672":{"position":[[64,3]]},"1939":{"position":[[61,3]]},"1981":{"position":[[2,3]]},"1993":{"position":[[2,3]]},"2016":{"position":[[2,3]]},"2245":{"position":[[23,3],[53,3]]},"2544":{"position":[[117,3],[150,3]]},"2549":{"position":[[12,3]]},"2870":{"position":[[2,3]]},"2872":{"position":[[127,3]]},"3078":{"position":[[62,3]]},"3080":{"position":[[552,3]]},"3446":{"position":[[883,3]]},"3684":{"position":[[16,3]]},"3696":{"position":[[53,3]]},"3702":{"position":[[975,3]]},"3928":{"position":[[1445,3]]},"3934":{"position":[[1339,3]]},"3966":{"position":[[1577,3]]}}}],["浓缩",{"_index":9052,"t":{"3910":{"position":[[1555,2]]}}}],["浙江省",{"_index":3691,"t":{"877":{"position":[[1893,3]]}}}],["浪",{"_index":4826,"t":{"1511":{"position":[[3047,1]]}}}],["浪费",{"_index":1990,"t":{"300":{"position":[[329,2]]}}}],["海报",{"_index":4903,"t":{"1513":{"position":[[19,2]]}}}],["海涛",{"_index":4678,"t":{"1511":{"position":[[1228,2]]}}}],["海绵",{"_index":4781,"t":{"1511":{"position":[[2457,2]]}}}],["消息",{"_index":464,"t":{"85":{"position":[[24,2]]},"300":{"position":[[312,2]]},"587":{"position":[[2007,2],[2187,2]]},"591":{"position":[[53,2]]},"604":{"position":[[67,2]]},"608":{"position":[[602,2]]},"610":{"position":[[67,2]]},"617":{"position":[[34,2],[1413,2],[1694,2],[1890,2],[2170,2],[2766,2]]},"1555":{"position":[[48,2],[69,2],[117,2],[185,2],[276,2],[293,2],[337,2],[401,2],[477,2],[614,2]]},"1699":{"position":[[45,2],[70,2],[101,2],[115,2]]},"1703":{"position":[[29,2],[163,2],[297,2]]},"1705":{"position":[[27,2],[40,2]]},"1707":{"position":[[98,2]]},"1711":{"position":[[242,2]]},"1795":{"position":[[2193,2],[2340,2]]},"1797":{"position":[[25,2],[44,2],[620,2]]},"1799":{"position":[[52,2]]},"1801":{"position":[[983,2],[1501,2],[1562,2],[1620,2],[1902,2],[1968,2]]},"1803":{"position":[[167,2],[612,2],[3153,2],[3533,2],[3660,2],[3723,2]]},"1817":{"position":[[82,2],[87,2],[96,2],[168,2]]},"1823":{"position":[[7,2]]},"1837":{"position":[[84,2],[105,2]]},"1839":{"position":[[73,2]]},"1851":{"position":[[152,2],[384,2]]},"1857":{"position":[[60,2],[93,2],[114,2]]},"1867":{"position":[[43,2]]},"1869":{"position":[[304,2]]},"1871":{"position":[[35,2],[48,2]]},"1873":{"position":[[2,2]]},"1875":{"position":[[638,2]]},"1877":{"position":[[111,2],[163,2]]},"1885":{"position":[[94,2]]},"2041":{"position":[[41,2]]},"2191":{"position":[[17,2],[40,2]]},"2193":{"position":[[17,2],[71,2]]},"2305":{"position":[[24,2]]},"2313":{"position":[[168,2],[267,2],[507,2],[514,2],[566,2]]},"2326":{"position":[[179,2]]},"2534":{"position":[[28,2]]},"2536":{"position":[[153,2]]},"2843":{"position":[[37,2]]},"3009":{"position":[[126,2]]},"3013":{"position":[[15,2]]},"3015":{"position":[[50,2],[64,2]]},"3053":{"position":[[2,2],[30,2]]},"3055":{"position":[[57,2],[70,2]]},"3138":{"position":[[19,2]]},"3140":{"position":[[98,2]]},"3148":{"position":[[18,2]]},"3189":{"position":[[383,2]]},"3194":{"position":[[544,2]]},"3416":{"position":[[84,2],[90,2],[107,2],[326,2]]},"3460":{"position":[[115,2]]},"3520":{"position":[[48,2]]},"3561":{"position":[[48,2]]},"3914":{"position":[[2911,2]]},"3922":{"position":[[1631,2]]},"3962":{"position":[[1138,2]]},"3966":{"position":[[24,2]]},"3984":{"position":[[186,2]]},"3986":{"position":[[269,2]]},"3992":{"position":[[34,2]]},"3996":{"position":[[570,2]]},"4000":{"position":[[455,2]]}}}],["消息日志",{"_index":9333,"t":{"3924":{"position":[[1135,4]]}}}],["消灭",{"_index":7947,"t":{"3352":{"position":[[0,2],[37,2]]}}}],["消耗",{"_index":1796,"t":{"245":{"position":[[158,2]]},"3579":{"position":[[185,2]]},"3740":{"position":[[8,2]]}}}],["消费",{"_index":5572,"t":{"1801":{"position":[[1906,2]]},"1803":{"position":[[5366,2]]},"2311":{"position":[[140,2],[319,2]]}}}],["消费者",{"_index":5575,"t":{"1801":{"position":[[1957,3]]},"1803":{"position":[[418,3],[2783,3],[3021,3],[3875,3]]},"2311":{"position":[[315,3]]}}}],["消除",{"_index":3903,"t":{"1048":{"position":[[61,2]]},"2910":{"position":[[456,2]]}}}],["涉及",{"_index":6804,"t":{"2688":{"position":[[96,2]]},"2782":{"position":[[50,2]]},"3106":{"position":[[26,2]]},"3124":{"position":[[15,2]]},"3908":{"position":[[222,2]]}}}],["涛",{"_index":4661,"t":{"1511":{"position":[[1019,1],[2057,1],[3875,1]]}}}],["淘",{"_index":4744,"t":{"1511":{"position":[[2055,1]]}}}],["深度",{"_index":5073,"t":{"1580":{"position":[[385,2]]},"3354":{"position":[[34,2]]}}}],["混",{"_index":8451,"t":{"3624":{"position":[[99,1]]}}}],["混合",{"_index":1039,"t":{"129":{"position":[[17,2],[351,2],[581,2]]},"3727":{"position":[[39,2]]},"3916":{"position":[[8400,2]]},"3986":{"position":[[1790,2]]}}}],["混淆",{"_index":4235,"t":{"1394":{"position":[[100,2]]}}}],["混用",{"_index":3212,"t":{"615":{"position":[[974,2]]},"2788":{"position":[[182,2]]}}}],["添加",{"_index":122,"t":{"9":{"position":[[124,2],[189,2]]},"15":{"position":[[282,2]]},"17":{"position":[[276,2]]},"123":{"position":[[6,2],[45,2]]},"127":{"position":[[1341,2]]},"146":{"position":[[381,2]]},"199":{"position":[[709,2]]},"204":{"position":[[54,2]]},"206":{"position":[[306,2]]},"237":{"position":[[50,2]]},"241":{"position":[[23,2],[85,2],[157,2]]},"243":{"position":[[127,2]]},"261":{"position":[[103,2]]},"274":{"position":[[142,2]]},"308":{"position":[[490,2]]},"310":{"position":[[333,2]]},"319":{"position":[[624,2]]},"336":{"position":[[381,2]]},"340":{"position":[[385,2],[547,2],[761,2],[1004,2],[1327,2]]},"380":{"position":[[39,2]]},"411":{"position":[[14,2]]},"413":{"position":[[90,2]]},"417":{"position":[[110,2]]},"445":{"position":[[48,2]]},"449":{"position":[[60,2]]},"455":{"position":[[868,2]]},"526":{"position":[[47,2]]},"544":{"position":[[24,2]]},"610":{"position":[[81,2]]},"655":{"position":[[294,2]]},"698":{"position":[[38,2]]},"734":{"position":[[7727,2]]},"915":{"position":[[77,2]]},"933":{"position":[[428,2]]},"1149":{"position":[[36,2]]},"1313":{"position":[[271,2]]},"1372":{"position":[[55,2]]},"1416":{"position":[[124,2]]},"1444":{"position":[[55,2]]},"1483":{"position":[[931,2]]},"1532":{"position":[[50,2]]},"1541":{"position":[[76,2],[109,2]]},"1549":{"position":[[134,2]]},"1596":{"position":[[49,2],[109,2],[143,2],[186,2],[218,2],[257,2]]},"1615":{"position":[[318,2]]},"1623":{"position":[[39,2]]},"1631":{"position":[[128,2],[188,2],[222,2],[265,2],[297,2],[326,2],[364,2]]},"1635":{"position":[[20,2]]},"1641":{"position":[[520,2]]},"1661":{"position":[[615,2]]},"1667":{"position":[[14,2]]},"1687":{"position":[[322,2]]},"1739":{"position":[[449,2]]},"1755":{"position":[[328,2],[373,2]]},"1765":{"position":[[17,2],[102,2]]},"1771":{"position":[[104,2]]},"1807":{"position":[[82,2],[852,2]]},"1809":{"position":[[78,2],[483,2]]},"1815":{"position":[[413,2]]},"1821":{"position":[[296,2],[439,2],[480,2]]},"1915":{"position":[[10,2]]},"1921":{"position":[[10,2]]},"1929":{"position":[[10,2]]},"1937":{"position":[[10,2]]},"1941":{"position":[[630,2],[691,2],[782,2]]},"1945":{"position":[[10,2]]},"1977":{"position":[[362,2]]},"1979":{"position":[[473,2],[699,2],[723,2]]},"2251":{"position":[[165,2]]},"2292":{"position":[[124,2],[189,2]]},"2298":{"position":[[74,2]]},"2333":{"position":[[137,2]]},"2359":{"position":[[489,2]]},"2381":{"position":[[9,2]]},"2497":{"position":[[36,2]]},"2501":{"position":[[25,2]]},"2503":{"position":[[2,2]]},"2517":{"position":[[27,2]]},"2522":{"position":[[0,2]]},"2524":{"position":[[14,2]]},"2538":{"position":[[179,2]]},"2542":{"position":[[28,2],[160,2]]},"2579":{"position":[[582,2]]},"2581":{"position":[[568,2]]},"2603":{"position":[[24,2]]},"2625":{"position":[[0,2],[24,2],[43,2],[79,2],[408,2]]},"2627":{"position":[[127,2]]},"2672":{"position":[[23,2]]},"2674":{"position":[[199,2],[348,2]]},"2703":{"position":[[18,2]]},"2751":{"position":[[59,2]]},"2774":{"position":[[55,2],[89,2],[113,2],[160,2],[226,2],[264,2],[339,2]]},"2776":{"position":[[38,2]]},"2807":{"position":[[51,2]]},"2836":{"position":[[148,2],[1368,2]]},"2852":{"position":[[121,2]]},"2866":{"position":[[37,2]]},"2875":{"position":[[606,2],[627,2]]},"2881":{"position":[[432,2]]},"2977":{"position":[[69,2]]},"2981":{"position":[[198,2]]},"2985":{"position":[[229,2]]},"2987":{"position":[[69,2]]},"2995":{"position":[[26,2],[104,2]]},"2997":{"position":[[69,2]]},"3005":{"position":[[69,2]]},"3019":{"position":[[69,2]]},"3023":{"position":[[612,2]]},"3027":{"position":[[69,2]]},"3035":{"position":[[69,2]]},"3043":{"position":[[69,2]]},"3051":{"position":[[69,2]]},"3059":{"position":[[69,2]]},"3063":{"position":[[1029,2]]},"3071":{"position":[[66,2],[1281,2]]},"3110":{"position":[[116,2]]},"3142":{"position":[[44,2]]},"3144":{"position":[[60,2],[370,2]]},"3254":{"position":[[24,2],[1174,2]]},"3289":{"position":[[168,2]]},"3329":{"position":[[72,2]]},"3339":{"position":[[47,2],[75,2],[111,2],[140,2]]},"3365":{"position":[[2,2]]},"3371":{"position":[[11,2]]},"3373":{"position":[[82,2]]},"3397":{"position":[[55,2],[103,2],[138,2]]},"3399":{"position":[[49,2],[670,2]]},"3401":{"position":[[54,2]]},"3430":{"position":[[511,2]]},"3448":{"position":[[277,2]]},"3450":{"position":[[59,2]]},"3466":{"position":[[1337,2]]},"3468":{"position":[[85,2]]},"3506":{"position":[[304,2]]},"3601":{"position":[[1606,2]]},"3618":{"position":[[54,2]]},"3622":{"position":[[60,2]]},"3640":{"position":[[14,2],[413,2]]},"3650":{"position":[[54,2]]},"3664":{"position":[[21,2],[84,2],[546,2]]},"3668":{"position":[[32,2]]},"3672":{"position":[[16,2]]},"3674":{"position":[[25,2]]},"3676":{"position":[[60,2]]},"3678":{"position":[[95,2]]},"3686":{"position":[[79,2]]},"3690":{"position":[[93,2]]},"3704":{"position":[[847,2]]},"3706":{"position":[[1021,2]]},"3708":{"position":[[4087,2]]},"3744":{"position":[[4,2]]},"3772":{"position":[[33,2]]},"3774":{"position":[[269,2]]},"3783":{"position":[[15,2],[1428,2],[1521,2]]},"3804":{"position":[[414,2]]},"3815":{"position":[[69,2]]},"3817":{"position":[[401,2],[1481,2]]},"3819":{"position":[[452,2],[455,2]]},"3826":{"position":[[288,2],[609,2],[660,2],[710,2]]},"3828":{"position":[[70,2],[885,2]]},"3832":{"position":[[68,2],[897,2]]},"3842":{"position":[[49,2],[250,2],[589,2],[880,2],[1198,2],[1445,2],[1772,2],[2035,2],[2375,2],[2676,2],[3008,2],[3293,2]]},"3844":{"position":[[49,2]]},"3846":{"position":[[38,2],[294,2]]},"3882":{"position":[[26,2]]},"3886":{"position":[[26,2]]},"3888":{"position":[[26,2]]},"3892":{"position":[[26,2]]},"3910":{"position":[[2129,2]]},"3912":{"position":[[1831,2]]},"3914":{"position":[[3340,2]]},"3918":{"position":[[973,2]]},"3920":{"position":[[623,2]]},"3922":{"position":[[21,2]]},"3924":{"position":[[4387,2]]},"3930":{"position":[[988,2]]},"3932":{"position":[[1101,2],[1432,2]]},"3938":{"position":[[307,2],[897,2]]},"3950":{"position":[[236,2]]},"3962":{"position":[[166,2],[1321,2],[1882,2]]},"3964":{"position":[[123,2]]},"3968":{"position":[[296,2]]},"3972":{"position":[[561,2]]},"3974":{"position":[[375,2]]},"3982":{"position":[[279,2]]},"3990":{"position":[[212,2],[550,2],[574,2]]},"3992":{"position":[[600,2],[900,2],[3370,2]]},"3996":{"position":[[1313,2],[1592,2]]}}}],["清",{"_index":9041,"t":{"3908":{"position":[[251,1]]}}}],["清单",{"_index":3588,"t":{"801":{"position":[[22,2]]},"1549":{"position":[[79,2]]}}}],["清晰",{"_index":4238,"t":{"1394":{"position":[[178,2]]},"2341":{"position":[[121,2]]},"3096":{"position":[[17,2]]},"3616":{"position":[[11,2]]}}}],["清楚",{"_index":3334,"t":{"685":{"position":[[288,2]]}}}],["清爽",{"_index":191,"t":{"11":{"position":[[936,2]]},"2294":{"position":[[984,2]]}}}],["清理",{"_index":175,"t":{"11":{"position":[[744,2]]},"2294":{"position":[[792,2]]}}}],["清空",{"_index":3536,"t":{"767":{"position":[[680,2]]},"1488":{"position":[[745,2]]},"1495":{"position":[[689,2]]},"2245":{"position":[[29,2]]},"3783":{"position":[[1725,2]]},"3819":{"position":[[1453,2]]},"3922":{"position":[[1309,2]]},"3950":{"position":[[411,2]]}}}],["渐渐",{"_index":9427,"t":{"3926":{"position":[[544,2]]}}}],["温馨",{"_index":2866,"t":{"538":{"position":[[0,2]]},"799":{"position":[[0,2]]},"1101":{"position":[[0,2]]},"1155":{"position":[[0,2]]},"1611":{"position":[[829,2]]},"2597":{"position":[[0,2]]},"2709":{"position":[[227,2]]},"3207":{"position":[[159,2]]},"3248":{"position":[[0,2]]}}}],["游",{"_index":7493,"t":{"3138":{"position":[[51,1]]}}}],["游戏",{"_index":1206,"t":{"168":{"position":[[53,2]]},"3142":{"position":[[123,2],[232,2]]}}}],["游标",{"_index":9759,"t":{"3962":{"position":[[1469,2]]}}}],["源",{"_index":2449,"t":{"408":{"position":[[1,1],[37,1],[125,1]]},"1483":{"position":[[988,1]]},"1799":{"position":[[24,1],[784,1],[999,1]]},"1801":{"position":[[538,1],[2042,1],[2096,1],[2769,1],[2856,1],[2965,1],[3321,1]]},"1803":{"position":[[2516,1],[2628,1],[4004,1],[4058,1],[4741,1],[4828,1],[4937,1],[5534,1]]},"1805":{"position":[[527,1]]},"3912":{"position":[[1012,1],[1089,1]]}}}],["源代码",{"_index":6785,"t":{"2657":{"position":[[90,3],[97,3]]},"3142":{"position":[[26,3]]}}}],["源码",{"_index":391,"t":{"44":{"position":[[115,2]]},"57":{"position":[[128,2]]},"68":{"position":[[115,2]]},"675":{"position":[[74,2]]},"1379":{"position":[[245,2]]},"1488":{"position":[[1588,2]]},"1547":{"position":[[286,2]]},"1549":{"position":[[375,2]]},"1663":{"position":[[625,2]]},"2499":{"position":[[99,2]]},"2530":{"position":[[71,2]]},"2532":{"position":[[254,2]]},"2657":{"position":[[47,2]]},"3131":{"position":[[0,2]]},"3331":{"position":[[186,2]]},"3910":{"position":[[403,2],[437,2]]},"3928":{"position":[[425,2],[509,2]]},"3940":{"position":[[550,2]]},"3952":{"position":[[38,2]]},"3964":{"position":[[307,2]]},"3996":{"position":[[1310,2]]}}}],["溢出",{"_index":2296,"t":{"363":{"position":[[27,2]]},"1432":{"position":[[165,2]]},"2379":{"position":[[51,2]]},"3914":{"position":[[1648,2],[2495,2]]},"3916":{"position":[[1676,2]]},"3918":{"position":[[3229,2]]},"3952":{"position":[[309,2]]},"3966":{"position":[[1149,2]]},"4004":{"position":[[365,2]]}}}],["滑动",{"_index":1686,"t":{"233":{"position":[[134,2],[296,2],[437,2]]},"243":{"position":[[172,2]]}}}],["滚",{"_index":2858,"t":{"532":{"position":[[215,1]]},"3287":{"position":[[151,1],[476,1],[2381,1]]},"3291":{"position":[[436,1],[476,1],[1208,1],[1248,1],[2167,1]]},"3970":{"position":[[86,1]]},"3980":{"position":[[333,1]]}}}],["滚动",{"_index":9216,"t":{"3918":{"position":[[1093,2]]}}}],["滚开",{"_index":7050,"t":{"2788":{"position":[[122,2],[194,2]]}}}],["满",{"_index":8162,"t":{"3434":{"position":[[2742,1]]}}}],["满意",{"_index":4564,"t":{"1511":{"position":[[72,2]]}}}],["满满",{"_index":4845,"t":{"1511":{"position":[[3304,2]]}}}],["满足",{"_index":2505,"t":{"423":{"position":[[14,2]]},"633":{"position":[[16,2]]},"818":{"position":[[47,2]]},"836":{"position":[[359,2]]},"1279":{"position":[[95,2]]},"1418":{"position":[[22,2]]},"1775":{"position":[[85,2]]},"2442":{"position":[[121,2]]},"2915":{"position":[[82,2]]},"2933":{"position":[[635,2]]},"2949":{"position":[[483,2]]},"2963":{"position":[[502,2]]},"3282":{"position":[[89,2]]},"3806":{"position":[[1316,2]]},"3928":{"position":[[205,2]]}}}],["漏",{"_index":7043,"t":{"2782":{"position":[[158,1]]}}}],["漏掉",{"_index":9260,"t":{"3920":{"position":[[363,2]]}}}],["漏洞",{"_index":2337,"t":{"378":{"position":[[26,2],[58,2],[70,2]]}}}],["演变",{"_index":7755,"t":{"3244":{"position":[[33,2]]}}}],["演示",{"_index":1714,"t":{"237":{"position":[[5,2]]},"249":{"position":[[112,2]]},"1052":{"position":[[126,2]]},"1225":{"position":[[11,2]]},"2398":{"position":[[2,2]]},"2921":{"position":[[45,2]]},"3373":{"position":[[29,2]]},"3452":{"position":[[1498,2]]},"3916":{"position":[[4494,2]]}}}],["潜在",{"_index":2302,"t":{"363":{"position":[[73,2]]},"3352":{"position":[[83,2],[247,2]]}}}],["澳洲",{"_index":6512,"t":{"2559":{"position":[[789,2]]}}}],["澳门",{"_index":6488,"t":{"2559":{"position":[[563,2]]}}}],["激增",{"_index":5432,"t":{"1761":{"position":[[134,2]]},"3916":{"position":[[1544,2],[1672,2]]},"3918":{"position":[[3796,2],[3838,2]]}}}],["激活",{"_index":8396,"t":{"3595":{"position":[[255,2]]}}}],["火",{"_index":4601,"t":{"1511":{"position":[[483,1],[2315,1]]}}}],["火线",{"_index":1204,"t":{"168":{"position":[[46,2]]}}}],["灵活",{"_index":572,"t":{"95":{"position":[[94,2]]},"121":{"position":[[443,2],[509,2]]},"206":{"position":[[18,2],[246,2]]},"208":{"position":[[41,2]]},"220":{"position":[[137,2]]},"371":{"position":[[10,2],[789,2]]},"408":{"position":[[159,2]]},"903":{"position":[[29,2]]},"1157":{"position":[[15,2]]},"1396":{"position":[[40,2]]},"1580":{"position":[[61,2],[202,2],[349,2],[443,2]]},"1639":{"position":[[43,2]]},"1663":{"position":[[260,2]]},"2703":{"position":[[66,2]]},"2729":{"position":[[17,2]]},"2881":{"position":[[276,2]]},"3595":{"position":[[470,2]]},"3628":{"position":[[17,2]]},"3727":{"position":[[101,2]]},"3932":{"position":[[326,2],[669,2]]}}}],["灵活性",{"_index":2162,"t":{"336":{"position":[[320,3]]},"1389":{"position":[[161,3]]}}}],["灵魂",{"_index":9382,"t":{"3926":{"position":[[130,2]]}}}],["灾难",{"_index":2199,"t":{"338":{"position":[[1225,2]]},"3352":{"position":[[164,2]]}}}],["点",{"_index":2272,"t":{"353":{"position":[[32,1]]},"1511":{"position":[[1192,1],[1972,1]]},"1761":{"position":[[421,1]]},"1892":{"position":[[88,1]]},"2303":{"position":[[70,1]]},"2735":{"position":[[423,1]]},"3094":{"position":[[130,1]]},"3148":{"position":[[25,1]]},"3992":{"position":[[3198,1]]}}}],["点击",{"_index":1502,"t":{"199":{"position":[[684,2]]},"306":{"position":[[20,2],[177,2]]},"308":{"position":[[0,2]]},"310":{"position":[[0,2]]},"690":{"position":[[10,2]]},"692":{"position":[[26,2]]},"694":{"position":[[0,2],[54,2]]},"1452":{"position":[[19,2]]},"1474":{"position":[[170,2],[186,2],[307,2],[320,2],[357,2]]},"1488":{"position":[[1645,2]]},"1541":{"position":[[466,2]]},"1825":{"position":[[53,2]]},"2490":{"position":[[40,2]]},"3078":{"position":[[20,2]]},"3213":{"position":[[0,2]]},"3365":{"position":[[22,2]]},"3414":{"position":[[292,2]]}}}],["烂",{"_index":483,"t":{"85":{"position":[[144,1]]}}}],["烤鱼",{"_index":4660,"t":{"1511":{"position":[[1009,2]]}}}],["热",{"_index":2588,"t":{"453":{"position":[[30,1]]},"2629":{"position":[[28,1],[32,1],[91,1]]},"2733":{"position":[[20,1]]},"3094":{"position":[[28,1]]},"3962":{"position":[[1836,1]]}}}],["热心",{"_index":4652,"t":{"1511":{"position":[[941,2]]}}}],["热插拔",{"_index":4293,"t":{"1420":{"position":[[40,3]]},"1578":{"position":[[164,3]]},"3986":{"position":[[300,3]]}}}],["热点",{"_index":7420,"t":{"3108":{"position":[[83,2]]},"3110":{"position":[[187,2]]}}}],["然后",{"_index":840,"t":{"119":{"position":[[23,2]]},"121":{"position":[[395,2]]},"288":{"position":[[338,2]]},"355":{"position":[[49,2]]},"482":{"position":[[582,2]]},"567":{"position":[[397,2]]},"862":{"position":[[386,2]]},"1267":{"position":[[259,2]]},"1385":{"position":[[78,2]]},"1495":{"position":[[1229,2]]},"1499":{"position":[[855,2]]},"1539":{"position":[[10,2]]},"1745":{"position":[[60,2]]},"1761":{"position":[[122,2]]},"1819":{"position":[[886,2]]},"2418":{"position":[[884,2]]},"2881":{"position":[[430,2]]},"2933":{"position":[[530,2]]},"3118":{"position":[[334,2]]},"3120":{"position":[[132,2]]},"3189":{"position":[[271,2]]},"3401":{"position":[[90,2]]},"3581":{"position":[[395,2]]},"3583":{"position":[[583,2]]},"3636":{"position":[[727,2]]},"3688":{"position":[[57,2]]}}}],["然而",{"_index":8465,"t":{"3626":{"position":[[157,2]]}}}],["熊猫",{"_index":6966,"t":{"2768":{"position":[[1019,2]]}}}],["熔断",{"_index":5652,"t":{"1809":{"position":[[71,2]]},"3832":{"position":[[61,2]]}}}],["熟悉",{"_index":3075,"t":{"587":{"position":[[756,2]]},"846":{"position":[[972,2]]},"1847":{"position":[[52,2]]},"3148":{"position":[[224,2]]},"3150":{"position":[[141,2]]},"3152":{"position":[[66,2]]}}}],["爆",{"_index":9139,"t":{"3914":{"position":[[2935,1]]}}}],["爱",{"_index":4576,"t":{"1511":{"position":[[216,1]]}}}],["爱尔兰",{"_index":6519,"t":{"2559":{"position":[[845,3]]}}}],["爱沙尼亚",{"_index":6536,"t":{"2559":{"position":[[976,4],[987,4],[994,4]]}}}],["父",{"_index":2769,"t":{"508":{"position":[[256,1]]},"510":{"position":[[286,1]]},"516":{"position":[[261,1]]},"518":{"position":[[191,1]]},"3638":{"position":[[247,1]]},"3992":{"position":[[1859,1]]},"3994":{"position":[[274,1],[1346,1]]}}}],["版",{"_index":530,"t":{"91":{"position":[[52,1],[525,1]]},"121":{"position":[[721,1],[727,1]]},"538":{"position":[[47,1]]},"2057":{"position":[[159,1]]},"2597":{"position":[[47,1]]},"3207":{"position":[[206,1]]},"3248":{"position":[[47,1]]},"3369":{"position":[[9,1]]},"3403":{"position":[[55,1]]},"3702":{"position":[[117,1]]},"3908":{"position":[[13,1],[100,1],[139,1],[173,1],[207,1],[234,1],[279,1],[300,1],[318,1]]},"3934":{"position":[[2089,1]]},"4004":{"position":[[182,1]]}}}],["版本",{"_index":4,"t":{"3":{"position":[[18,2]]},"11":{"position":[[810,2]]},"44":{"position":[[40,2],[61,2],[87,2]]},"46":{"position":[[96,2]]},"48":{"position":[[136,2],[148,2]]},"51":{"position":[[72,2],[89,2],[239,2]]},"57":{"position":[[40,2],[61,2],[100,2]]},"60":{"position":[[96,2]]},"62":{"position":[[72,2],[89,2],[239,2]]},"68":{"position":[[40,2],[61,2],[87,2]]},"70":{"position":[[96,2]]},"72":{"position":[[136,2],[148,2]]},"75":{"position":[[72,2],[89,2],[239,2]]},"91":{"position":[[7,2]]},"93":{"position":[[25,2],[321,2]]},"121":{"position":[[710,2]]},"152":{"position":[[86,2],[373,2]]},"216":{"position":[[28,2]]},"259":{"position":[[0,2],[28,2]]},"308":{"position":[[231,2],[245,2],[258,2],[267,2]]},"314":{"position":[[88,2],[175,2]]},"316":{"position":[[90,2]]},"327":{"position":[[0,2],[26,2]]},"340":{"position":[[16,2]]},"342":{"position":[[16,2]]},"363":{"position":[[37,2]]},"384":{"position":[[84,2]]},"394":{"position":[[46,2]]},"399":{"position":[[232,2],[855,2]]},"401":{"position":[[175,2]]},"423":{"position":[[238,2]]},"435":{"position":[[343,2],[750,2]]},"445":{"position":[[23,2],[918,2],[920,2]]},"455":{"position":[[161,2],[175,2]]},"461":{"position":[[235,2],[262,2]]},"467":{"position":[[0,2],[21,2],[53,2],[80,2]]},"504":{"position":[[69,2]]},"514":{"position":[[631,2]]},"544":{"position":[[159,2]]},"548":{"position":[[75,2],[233,2]]},"659":{"position":[[28,2]]},"715":{"position":[[86,2],[130,2]]},"734":{"position":[[14,2],[76,2]]},"739":{"position":[[21,2]]},"777":{"position":[[41,2]]},"791":{"position":[[27,2]]},"826":{"position":[[12,2]]},"885":{"position":[[27,2]]},"899":{"position":[[931,2],[1632,2]]},"1010":{"position":[[27,2]]},"1066":{"position":[[17,2],[1707,2]]},"1133":{"position":[[160,2]]},"1240":{"position":[[1036,2]]},"1246":{"position":[[0,2],[27,2],[90,2]]},"1248":{"position":[[0,2],[27,2]]},"1257":{"position":[[375,2]]},"1265":{"position":[[0,2],[27,2],[90,2]]},"1269":{"position":[[12,2]]},"1279":{"position":[[17,2]]},"1302":{"position":[[27,2]]},"1317":{"position":[[547,2]]},"1323":{"position":[[41,2]]},"1394":{"position":[[15,2]]},"1412":{"position":[[751,2],[775,2]]},"1483":{"position":[[788,2]]},"1539":{"position":[[103,2],[710,2]]},"1543":{"position":[[264,2]]},"1592":{"position":[[237,2]]},"1594":{"position":[[298,2]]},"1621":{"position":[[3,2],[10,2],[695,2],[758,2],[776,2],[913,2]]},"1633":{"position":[[16,2]]},"1635":{"position":[[16,2]]},"1641":{"position":[[488,2],[572,2]]},"1655":{"position":[[16,2],[28,2],[37,2]]},"1661":{"position":[[144,2],[364,2],[667,2]]},"1667":{"position":[[43,2],[395,2]]},"1674":{"position":[[57,2]]},"1677":{"position":[[248,2]]},"1685":{"position":[[15,2]]},"1689":{"position":[[520,2]]},"1695":{"position":[[7,2],[28,2]]},"1715":{"position":[[0,2],[27,2]]},"1791":{"position":[[8,2],[29,2],[65,2],[93,2]]},"1795":{"position":[[747,2],[975,2],[1305,2],[1721,2],[2334,2],[2678,2]]},"1799":{"position":[[962,2]]},"1801":{"position":[[0,2],[27,2]]},"1815":{"position":[[0,2],[28,2],[36,2]]},"1817":{"position":[[0,2],[27,2],[48,2]]},"1819":{"position":[[0,2],[27,2]]},"1861":{"position":[[14,2]]},"1887":{"position":[[0,2],[27,2],[42,2]]},"1903":{"position":[[494,2]]},"1969":{"position":[[60,2]]},"1973":{"position":[[124,2]]},"1987":{"position":[[124,2]]},"1995":{"position":[[6,2]]},"2010":{"position":[[132,2]]},"2018":{"position":[[6,2]]},"2063":{"position":[[0,2],[27,2]]},"2065":{"position":[[0,2],[27,2]]},"2067":{"position":[[0,2],[28,2]]},"2077":{"position":[[27,2]]},"2098":{"position":[[0,2],[27,2]]},"2169":{"position":[[0,2],[27,2]]},"2173":{"position":[[0,2],[27,2]]},"2186":{"position":[[21,2]]},"2188":{"position":[[21,2]]},"2199":{"position":[[14,2]]},"2255":{"position":[[0,2],[27,2],[143,2],[286,2]]},"2259":{"position":[[0,2],[27,2]]},"2261":{"position":[[94,2],[293,2],[464,2]]},"2276":{"position":[[0,2],[27,2]]},"2294":{"position":[[785,2],[858,2]]},"2307":{"position":[[131,2]]},"2311":{"position":[[26,2]]},"2319":{"position":[[16,2]]},"2321":{"position":[[26,2]]},"2335":{"position":[[18,2]]},"2339":{"position":[[0,2],[28,2]]},"2357":{"position":[[120,2]]},"2361":{"position":[[98,2]]},"2391":{"position":[[7,2],[28,2],[113,2],[119,2],[146,2]]},"2486":{"position":[[16,2]]},"2538":{"position":[[0,2],[27,2]]},"2542":{"position":[[93,2]]},"2605":{"position":[[47,2]]},"2621":{"position":[[30,2]]},"2629":{"position":[[18,2],[113,2],[135,2]]},"2635":{"position":[[14,2],[51,2]]},"2641":{"position":[[23,2],[53,2]]},"2662":{"position":[[14,2],[51,2]]},"2668":{"position":[[23,2],[53,2]]},"2674":{"position":[[105,2],[127,2]]},"2713":{"position":[[776,2],[1497,2],[1579,2],[1661,2],[2042,2],[2181,2],[2319,2]]},"2735":{"position":[[0,2],[27,2]]},"2774":{"position":[[111,2]]},"2776":{"position":[[62,2],[477,2]]},"2780":{"position":[[0,2],[27,2]]},"2788":{"position":[[135,2],[154,2]]},"2792":{"position":[[143,2]]},"2856":{"position":[[1735,2]]},"2860":{"position":[[0,2],[27,2]]},"2862":{"position":[[357,2]]},"2877":{"position":[[0,2],[27,2]]},"2879":{"position":[[380,2],[407,2]]},"2893":{"position":[[0,2],[27,2]]},"2899":{"position":[[162,2],[447,2]]},"2985":{"position":[[239,2],[253,2]]},"3023":{"position":[[145,2],[361,2],[664,2]]},"3063":{"position":[[198,2],[1626,2]]},"3067":{"position":[[0,2],[27,2]]},"3069":{"position":[[263,2]]},"3071":{"position":[[17,2],[1017,2],[1320,2]]},"3207":{"position":[[24,2]]},"3244":{"position":[[27,2]]},"3287":{"position":[[1169,2],[1196,2]]},"3291":{"position":[[471,2],[1243,2]]},"3307":{"position":[[69,2]]},"3317":{"position":[[8,2]]},"3319":{"position":[[66,2]]},"3321":{"position":[[30,2]]},"3323":{"position":[[36,2],[61,2],[214,2],[367,2],[384,2],[454,2]]},"3325":{"position":[[78,2]]},"3339":{"position":[[0,2],[27,2]]},"3345":{"position":[[0,2],[27,2]]},"3424":{"position":[[0,2],[27,2]]},"3428":{"position":[[0,2],[26,2]]},"3430":{"position":[[533,2],[800,2],[1811,2],[1838,2],[1921,2],[3648,2],[3675,2],[4509,2],[4536,2]]},"3432":{"position":[[4851,2],[4878,2]]},"3444":{"position":[[15,2]]},"3448":{"position":[[132,2]]},"3450":{"position":[[0,2],[27,2]]},"3452":{"position":[[0,2],[27,2],[214,2],[326,2]]},"3454":{"position":[[0,2],[27,2],[49,2]]},"3456":{"position":[[0,2],[27,2]]},"3464":{"position":[[142,2],[341,2],[512,2]]},"3466":{"position":[[0,2],[27,2]]},"3470":{"position":[[127,2]]},"3474":{"position":[[0,2],[28,2]]},"3498":{"position":[[384,2],[411,2]]},"3522":{"position":[[15,2],[34,2],[67,2],[512,2],[691,2],[1168,2],[1190,2]]},"3528":{"position":[[16,2]]},"3530":{"position":[[17,2]]},"3532":{"position":[[2,2],[58,2]]},"3543":{"position":[[471,2],[498,2]]},"3563":{"position":[[15,2],[34,2],[65,2],[638,2],[660,2]]},"3567":{"position":[[16,2]]},"3569":{"position":[[17,2]]},"3571":{"position":[[2,2],[58,2]]},"3593":{"position":[[0,2],[27,2]]},"3595":{"position":[[53,2],[108,2]]},"3603":{"position":[[0,2],[27,2]]},"3618":{"position":[[39,2]]},"3626":{"position":[[205,2],[402,2],[408,2]]},"3650":{"position":[[1,2]]},"3658":{"position":[[8,2]]},"3666":{"position":[[293,2]]},"3678":{"position":[[17,2]]},"3686":{"position":[[0,2],[27,2],[75,2]]},"3688":{"position":[[0,2],[27,2],[639,2]]},"3690":{"position":[[0,2],[27,2]]},"3692":{"position":[[0,2],[27,2]]},"3694":{"position":[[0,2],[27,2],[35,2]]},"3698":{"position":[[0,2],[27,2]]},"3700":{"position":[[0,2],[26,2]]},"3704":{"position":[[149,2],[532,2]]},"3706":{"position":[[190,2],[1637,2]]},"3716":{"position":[[0,2],[27,2]]},"3722":{"position":[[0,2],[27,2]]},"3758":{"position":[[59,2],[80,2],[123,2],[150,2]]},"3908":{"position":[[125,2]]},"3910":{"position":[[297,2],[309,2],[1565,2],[2519,2]]},"3912":{"position":[[72,2],[115,2],[127,2],[201,2],[275,2],[349,2],[423,2],[497,2],[571,2],[645,2],[1314,2],[1347,2],[1398,2],[1449,2],[1765,2]]},"3914":{"position":[[0,2],[12,2],[86,2],[160,2],[234,2],[308,2],[382,2],[456,2],[530,2],[604,2],[678,2],[1629,2],[2387,2]]},"3916":{"position":[[0,2],[12,2],[86,2],[160,2],[234,2],[308,2],[382,2],[456,2],[530,2],[604,2],[2082,2]]},"3918":{"position":[[0,2],[12,2],[86,2],[160,2],[234,2],[308,2],[382,2],[456,2],[530,2],[604,2],[678,2]]},"3920":{"position":[[0,2],[12,2],[86,2],[1867,2]]},"3922":{"position":[[1875,2]]},"3924":{"position":[[1172,2],[1345,2],[3508,2],[3683,2],[4072,2]]},"3926":{"position":[[673,2]]},"3928":{"position":[[113,2],[196,2]]},"3930":{"position":[[519,2],[553,2],[1162,2],[1397,2]]},"3932":{"position":[[1087,2],[2106,2]]},"3934":{"position":[[2534,2],[2712,2]]},"3936":{"position":[[1428,2],[1963,2],[2152,2]]},"3938":{"position":[[537,2],[1199,2]]},"3940":{"position":[[349,2],[1527,2]]},"3946":{"position":[[4,2],[21,2],[98,2]]},"3948":{"position":[[7,2],[28,2]]},"3950":{"position":[[876,2]]},"3952":{"position":[[458,2]]},"3956":{"position":[[258,2]]},"3958":{"position":[[415,2]]},"3960":{"position":[[189,2]]},"3962":{"position":[[1,2]]},"3964":{"position":[[70,2]]},"3970":{"position":[[124,2]]},"3972":{"position":[[279,2]]},"3980":{"position":[[209,2],[391,2],[673,2]]},"3982":{"position":[[17,2]]},"3986":{"position":[[183,2],[592,2]]},"3988":{"position":[[513,2]]},"3990":{"position":[[315,2],[632,2]]},"3992":{"position":[[1013,2]]},"3996":{"position":[[367,2],[382,2]]}}}],["版本升级",{"_index":9061,"t":{"3912":{"position":[[109,4]]},"3916":{"position":[[2276,4]]},"3920":{"position":[[506,4]]}}}],["版本号",{"_index":432,"t":{"53":{"position":[[33,3]]},"64":{"position":[[46,3]]},"77":{"position":[[33,3]]},"431":{"position":[[19,3]]},"713":{"position":[[42,3],[59,3]]},"899":{"position":[[603,3],[1347,3]]},"1377":{"position":[[376,3],[467,3],[572,3],[593,3],[723,3]]},"1488":{"position":[[168,3]]},"1495":{"position":[[168,3]]},"1499":{"position":[[876,3]]},"1535":{"position":[[459,3]]},"1539":{"position":[[757,3]]},"1551":{"position":[[89,3],[1197,3]]},"1559":{"position":[[10,3]]},"1592":{"position":[[159,3]]},"1594":{"position":[[208,3]]},"1598":{"position":[[85,3],[130,3]]},"1617":{"position":[[1203,3]]},"1621":{"position":[[720,3]]},"1641":{"position":[[210,3]]},"2326":{"position":[[169,3]]},"2649":{"position":[[24,3]]},"2705":{"position":[[19,3]]},"2725":{"position":[[464,3],[1005,3],[2447,3]]},"3065":{"position":[[136,3]]},"3325":{"position":[[68,3]]},"3618":{"position":[[25,3],[68,3]]},"3642":{"position":[[210,3]]},"3706":{"position":[[1884,3]]},"3908":{"position":[[55,3],[62,3],[67,3],[73,3],[104,3],[143,3],[177,3],[197,3],[211,3],[237,3],[247,3],[269,3],[282,3]]},"3998":{"position":[[395,3]]}}}],["版本控制",{"_index":5067,"t":{"1576":{"position":[[341,4]]},"1578":{"position":[[113,4]]},"1580":{"position":[[458,4]]},"1589":{"position":[[269,4]]}}}],["版权",{"_index":2523,"t":{"431":{"position":[[23,2]]},"2705":{"position":[[23,2]]}}}],["牙买加",{"_index":6521,"t":{"2559":{"position":[[859,3]]}}}],["牛",{"_index":4590,"t":{"1511":{"position":[[377,1],[1785,1]]}}}],["物",{"_index":4194,"t":{"1383":{"position":[[232,1]]}}}],["物体",{"_index":3799,"t":{"941":{"position":[[35,2]]}}}],["物理",{"_index":5342,"t":{"1717":{"position":[[86,2]]},"1719":{"position":[[29,2],[41,2]]},"1724":{"position":[[313,2]]},"1726":{"position":[[33,2]]},"3968":{"position":[[16,2]]}}}],["牵涉到",{"_index":7246,"t":{"2917":{"position":[[186,3]]}}}],["特",{"_index":4774,"t":{"1511":{"position":[[2350,1]]}}}],["特别",{"_index":425,"t":{"51":{"position":[[256,2]]},"62":{"position":[[256,2]]},"75":{"position":[[256,2]]},"129":{"position":[[341,2]]},"220":{"position":[[805,2]]},"411":{"position":[[505,2]]},"417":{"position":[[344,2]]},"419":{"position":[[223,2]]},"427":{"position":[[5,2]]},"433":{"position":[[78,2]]},"445":{"position":[[733,2]]},"482":{"position":[[9,2]]},"502":{"position":[[160,2]]},"510":{"position":[[437,2]]},"518":{"position":[[497,2]]},"522":{"position":[[0,2]]},"595":{"position":[[299,2]]},"615":{"position":[[1080,2]]},"706":{"position":[[0,2]]},"713":{"position":[[21,2]]},"855":{"position":[[71,2]]},"857":{"position":[[67,2]]},"1026":{"position":[[152,2]]},"1056":{"position":[[381,2]]},"1066":{"position":[[1635,2]]},"1097":{"position":[[0,2]]},"1103":{"position":[[138,2]]},"1139":{"position":[[0,2]]},"1145":{"position":[[500,2]]},"1196":{"position":[[104,2]]},"1198":{"position":[[113,2]]},"1311":{"position":[[326,2]]},"1319":{"position":[[0,2]]},"1377":{"position":[[382,2]]},"1389":{"position":[[229,2]]},"1394":{"position":[[0,2]]},"1405":{"position":[[103,2]]},"1418":{"position":[[37,2]]},"1483":{"position":[[1187,2]]},"1582":{"position":[[380,2]]},"1611":{"position":[[863,2]]},"1615":{"position":[[262,2]]},"1619":{"position":[[428,2]]},"1627":{"position":[[330,2]]},"1631":{"position":[[625,2]]},"1647":{"position":[[363,2]]},"1683":{"position":[[284,2]]},"1741":{"position":[[1610,2]]},"1759":{"position":[[0,2]]},"1773":{"position":[[268,2]]},"1775":{"position":[[3820,2]]},"1781":{"position":[[430,2]]},"1843":{"position":[[302,2]]},"1865":{"position":[[450,2]]},"1871":{"position":[[78,2]]},"1973":{"position":[[53,2]]},"1987":{"position":[[53,2]]},"2010":{"position":[[61,2]]},"2278":{"position":[[107,2]]},"2331":{"position":[[187,2]]},"2352":{"position":[[140,2]]},"2359":{"position":[[400,2]]},"2363":{"position":[[168,2]]},"2472":{"position":[[372,2]]},"2519":{"position":[[385,2]]},"2587":{"position":[[465,2]]},"2613":{"position":[[0,2]]},"2625":{"position":[[516,2]]},"2713":{"position":[[269,2]]},"2725":{"position":[[2500,2]]},"2727":{"position":[[715,2]]},"2729":{"position":[[695,2]]},"2735":{"position":[[379,2]]},"2774":{"position":[[403,2]]},"2792":{"position":[[122,2]]},"2834":{"position":[[54,2]]},"2836":{"position":[[1170,2]]},"2846":{"position":[[292,2]]},"2889":{"position":[[63,2]]},"2921":{"position":[[56,2]]},"2925":{"position":[[434,2]]},"2929":{"position":[[755,2]]},"2933":{"position":[[590,2]]},"2941":{"position":[[434,2]]},"2943":{"position":[[421,2]]},"2945":{"position":[[867,2]]},"2949":{"position":[[438,2]]},"2951":{"position":[[600,2]]},"2955":{"position":[[434,2]]},"2959":{"position":[[810,2]]},"2963":{"position":[[457,2]]},"2965":{"position":[[14,2]]},"3126":{"position":[[0,2]]},"3313":{"position":[[0,2]]},"3323":{"position":[[479,2]]},"3369":{"position":[[93,2]]},"3393":{"position":[[139,2]]},"3432":{"position":[[226,2]]},"3434":{"position":[[646,2]]},"3500":{"position":[[725,2]]},"3595":{"position":[[374,2]]},"3636":{"position":[[621,2]]},"3672":{"position":[[293,2]]},"3708":{"position":[[3857,2]]},"3716":{"position":[[1134,2]]},"3722":{"position":[[315,2]]},"3806":{"position":[[1292,2]]},"3912":{"position":[[2741,2]]},"3914":{"position":[[1113,2]]},"3928":{"position":[[164,2]]},"3946":{"position":[[471,2]]},"3950":{"position":[[944,2]]}}}],["特定",{"_index":1096,"t":{"137":{"position":[[125,2]]},"141":{"position":[[5,2]]},"239":{"position":[[207,2]]},"359":{"position":[[309,2]]},"369":{"position":[[328,2],[363,2]]},"413":{"position":[[84,2]]},"417":{"position":[[51,2]]},"423":{"position":[[26,2]]},"439":{"position":[[37,2]]},"443":{"position":[[12,2]]},"451":{"position":[[52,2]]},"453":{"position":[[405,2]]},"494":{"position":[[518,2]]},"679":{"position":[[48,2]]},"751":{"position":[[45,2]]},"844":{"position":[[10,2]]},"885":{"position":[[59,2]]},"949":{"position":[[188,2]]},"1018":{"position":[[36,2]]},"1103":{"position":[[47,2]]},"1267":{"position":[[265,2]]},"1279":{"position":[[38,2]]},"1368":{"position":[[747,2]]},"1426":{"position":[[254,2]]},"1440":{"position":[[162,2],[650,2]]},"1472":{"position":[[59,2]]},"1532":{"position":[[52,2]]},"1621":{"position":[[767,2]]},"1749":{"position":[[27,2]]},"1795":{"position":[[1539,2]]},"1845":{"position":[[259,2]]},"1861":{"position":[[159,2]]},"1875":{"position":[[206,2]]},"1892":{"position":[[39,2]]},"1903":{"position":[[324,2]]},"1909":{"position":[[38,2]]},"2055":{"position":[[210,2]]},"2199":{"position":[[179,2]]},"2393":{"position":[[12,2],[157,2]]},"2517":{"position":[[35,2],[90,2]]},"2682":{"position":[[17,2]]},"2719":{"position":[[17,2]]},"2995":{"position":[[13,2],[28,2]]},"3391":{"position":[[54,2]]},"3416":{"position":[[26,2]]},"3432":{"position":[[2461,2]]},"3434":{"position":[[2067,2]]},"3448":{"position":[[390,2],[454,2]]},"3486":{"position":[[480,2]]},"3575":{"position":[[117,2]]},"3577":{"position":[[151,2]]},"3579":{"position":[[405,2]]},"3581":{"position":[[13,2]]},"3587":{"position":[[268,2]]},"3589":{"position":[[253,2]]},"3591":{"position":[[43,2]]},"3708":{"position":[[2319,2]]},"3714":{"position":[[7,2],[14,2]]},"3716":{"position":[[48,2],[66,2]]},"3742":{"position":[[7,2],[13,2],[20,2]]},"3760":{"position":[[23,2]]},"3785":{"position":[[35,2]]},"3812":{"position":[[37,2]]},"3821":{"position":[[41,2]]},"3914":{"position":[[1119,2],[2286,2],[3544,2]]},"3918":{"position":[[928,2],[934,2]]},"3934":{"position":[[803,2]]},"3956":{"position":[[1667,2]]},"3964":{"position":[[22,2]]},"3988":{"position":[[9,2]]},"3998":{"position":[[336,2]]}}}],["特定条件",{"_index":3589,"t":{"801":{"position":[[32,4]]}}}],["特征",{"_index":1866,"t":{"255":{"position":[[188,2]]}}}],["特性",{"_index":956,"t":{"127":{"position":[[142,2],[208,2]]},"133":{"position":[[946,2]]},"137":{"position":[[114,2]]},"150":{"position":[[161,2]]},"212":{"position":[[92,2]]},"261":{"position":[[33,2]]},"357":{"position":[[62,2]]},"359":{"position":[[193,2]]},"421":{"position":[[48,2]]},"512":{"position":[[104,2]]},"583":{"position":[[21,2]]},"587":{"position":[[29,2],[44,2],[735,2],[994,2],[1007,2],[1042,2],[2060,2],[2106,2]]},"591":{"position":[[90,2]]},"602":{"position":[[287,2]]},"608":{"position":[[29,2],[456,2],[664,2],[689,2]]},"610":{"position":[[57,2]]},"612":{"position":[[20,2],[64,2]]},"615":{"position":[[114,2],[153,2]]},"617":{"position":[[1835,2]]},"751":{"position":[[85,2]]},"791":{"position":[[63,2],[70,2]]},"818":{"position":[[117,2]]},"1066":{"position":[[127,2]]},"1097":{"position":[[2,2]]},"1117":{"position":[[22,2]]},"1131":{"position":[[14,2]]},"1248":{"position":[[50,2]]},"1273":{"position":[[32,2]]},"1275":{"position":[[28,2]]},"1279":{"position":[[175,2]]},"1313":{"position":[[355,2]]},"1416":{"position":[[24,2]]},"1420":{"position":[[759,2],[795,2],[829,2],[863,2],[916,2]]},"1422":{"position":[[66,2]]},"1424":{"position":[[1691,2],[1703,2],[1766,2],[1838,2]]},"1511":{"position":[[1519,2]]},"1516":{"position":[[83,2],[106,2]]},"1576":{"position":[[93,2],[132,2]]},"1580":{"position":[[258,2],[302,2],[342,2]]},"1584":{"position":[[78,2]]},"1587":{"position":[[58,2],[240,2]]},"1589":{"position":[[265,2]]},"1596":{"position":[[63,2],[122,2],[156,2],[202,2],[233,2],[271,2]]},"1609":{"position":[[342,2]]},"1611":{"position":[[25,2],[898,2]]},"1619":{"position":[[466,2]]},"1623":{"position":[[218,2],[222,2]]},"1627":{"position":[[32,2],[89,2],[403,2]]},"1629":{"position":[[16,2]]},"1631":{"position":[[32,2],[77,2],[142,2],[201,2],[235,2],[281,2],[312,2],[340,2],[378,2]]},"1635":{"position":[[42,2]]},"1639":{"position":[[72,2]]},"1663":{"position":[[476,2],[500,2],[527,2],[535,2]]},"1749":{"position":[[23,2]]},"1751":{"position":[[56,2]]},"1765":{"position":[[23,2]]},"1783":{"position":[[136,2],[146,2]]},"1819":{"position":[[588,2]]},"1855":{"position":[[66,2],[104,2],[464,2],[528,2]]},"1857":{"position":[[36,2],[53,2],[167,2]]},"1867":{"position":[[74,2]]},"1871":{"position":[[27,2]]},"1875":{"position":[[691,2]]},"1903":{"position":[[2,2],[57,2],[96,2],[138,2],[177,2],[220,2],[225,2],[277,2],[400,2]]},"1905":{"position":[[77,2]]},"1909":{"position":[[9,2],[16,2],[65,2],[257,2]]},"1913":{"position":[[1460,2]]},"1919":{"position":[[913,2]]},"1925":{"position":[[1638,2]]},"1927":{"position":[[961,2]]},"1933":{"position":[[1081,2]]},"1935":{"position":[[582,2]]},"1941":{"position":[[1326,2]]},"1943":{"position":[[526,2]]},"1953":{"position":[[309,2]]},"1961":{"position":[[57,2],[130,2],[391,2]]},"2243":{"position":[[96,2]]},"2264":{"position":[[133,2]]},"2375":{"position":[[50,2]]},"2442":{"position":[[197,2]]},"2534":{"position":[[38,2]]},"2536":{"position":[[155,2]]},"2591":{"position":[[30,2],[57,2],[134,2]]},"2721":{"position":[[22,2],[84,2]]},"2725":{"position":[[91,2],[147,2]]},"2735":{"position":[[102,2]]},"2790":{"position":[[68,2]]},"2792":{"position":[[20,2],[150,2]]},"3001":{"position":[[310,2],[336,2],[361,2],[385,2],[428,2]]},"3069":{"position":[[204,2]]},"3126":{"position":[[276,2]]},"3136":{"position":[[126,2]]},"3207":{"position":[[31,2],[95,2]]},"3254":{"position":[[262,2]]},"3275":{"position":[[182,2]]},"3287":{"position":[[46,2]]},"3294":{"position":[[13,2],[51,2]]},"3296":{"position":[[105,2]]},"3360":{"position":[[165,2]]},"3375":{"position":[[74,2]]},"3389":{"position":[[58,2]]},"3403":{"position":[[21,2]]},"3444":{"position":[[38,2],[53,2]]},"3448":{"position":[[1417,2]]},"3508":{"position":[[188,2]]},"3549":{"position":[[295,2]]},"3636":{"position":[[121,2]]},"3672":{"position":[[84,2],[315,2]]},"3698":{"position":[[113,2]]},"3708":{"position":[[587,2]]},"3710":{"position":[[43,2]]},"3774":{"position":[[27,2],[242,2],[278,2]]},"3777":{"position":[[321,2]]},"3781":{"position":[[478,2]]},"3808":{"position":[[90,2],[111,2],[143,2],[177,2],[238,2],[261,2],[285,2],[307,2],[331,2],[361,2],[387,2],[420,2],[549,2],[1679,2],[1695,2],[2923,2]]},"3910":{"position":[[375,2]]},"3912":{"position":[[713,2],[2170,2]]},"3914":{"position":[[746,2]]},"3916":{"position":[[672,2]]},"3918":{"position":[[746,2]]},"3920":{"position":[[154,2]]},"3922":{"position":[[1,2],[2109,2]]},"3924":{"position":[[1,2],[718,2]]},"3926":{"position":[[617,2]]},"3928":{"position":[[382,2]]},"3930":{"position":[[1,2]]},"3932":{"position":[[1,2]]},"3934":{"position":[[1,2],[191,2]]},"3936":{"position":[[1,2],[609,2]]},"3938":{"position":[[1,2],[227,2],[304,2]]},"3940":{"position":[[1,2]]},"3942":{"position":[[1,2]]},"3944":{"position":[[1,2]]},"3946":{"position":[[37,2],[379,2]]},"3948":{"position":[[60,2],[435,2]]},"3950":{"position":[[1,2]]},"3952":{"position":[[1,2]]},"3954":{"position":[[1,2],[727,2]]},"3956":{"position":[[1,2]]},"3958":{"position":[[1,2]]},"3960":{"position":[[1,2]]},"3962":{"position":[[23,2],[476,2],[665,2],[712,2]]},"3964":{"position":[[1,2]]},"3966":{"position":[[1,2],[96,2]]},"3968":{"position":[[1,2]]},"3970":{"position":[[1,2]]},"3972":{"position":[[1,2],[361,2]]},"3974":{"position":[[1,2]]},"3976":{"position":[[1,2]]},"3978":{"position":[[1,2],[323,2],[361,2]]},"3980":{"position":[[1,2]]},"3982":{"position":[[1,2],[194,2],[420,2]]},"3984":{"position":[[1,2],[25,2],[1087,2]]},"3986":{"position":[[1,2],[637,2]]},"3988":{"position":[[1,2],[20,2],[100,2],[168,2]]},"3990":{"position":[[1,2],[93,2]]},"3992":{"position":[[1,2],[497,2],[882,2],[915,2],[2530,2],[4025,2]]},"3994":{"position":[[1,2]]},"3996":{"position":[[1,2],[689,2],[787,2],[1686,2]]},"3998":{"position":[[1,2]]},"4000":{"position":[[1,2],[453,2]]},"4002":{"position":[[1,2]]},"4004":{"position":[[1,2]]},"4006":{"position":[[1,2]]}}}],["特意",{"_index":4958,"t":{"1537":{"position":[[21,2]]},"1566":{"position":[[51,2]]},"2283":{"position":[[89,2]]}}}],["特指",{"_index":5706,"t":{"1832":{"position":[[12,2]]}}}],["特有",{"_index":5454,"t":{"1761":{"position":[[430,2]]}}}],["特此",{"_index":7373,"t":{"3086":{"position":[[0,2],[54,2]]}}}],["特殊",{"_index":1897,"t":{"267":{"position":[[29,2]]},"445":{"position":[[96,2]]},"728":{"position":[[43,2]]},"741":{"position":[[28,2]]},"897":{"position":[[547,2]]},"941":{"position":[[39,2]]},"1286":{"position":[[95,2]]},"1309":{"position":[[711,2]]},"1412":{"position":[[22,2]]},"1655":{"position":[[26,2]]},"1707":{"position":[[56,2]]},"2326":{"position":[[186,2]]},"2684":{"position":[[405,2]]},"3337":{"position":[[83,2]]},"3856":{"position":[[25,2]]},"3948":{"position":[[360,2]]}}}],["特殊字符",{"_index":3201,"t":{"615":{"position":[[435,4]]},"2418":{"position":[[235,4],[563,4]]},"3323":{"position":[[409,4]]}}}],["特殊符号",{"_index":6176,"t":{"2333":{"position":[[121,4],[263,4]]}}}],["特点",{"_index":1665,"t":{"229":{"position":[[23,2]]},"261":{"position":[[134,2]]},"2745":{"position":[[5,2]]},"2747":{"position":[[5,2]]},"2805":{"position":[[63,2]]},"2809":{"position":[[23,2]]}}}],["特色",{"_index":487,"t":{"85":{"position":[[155,2]]},"3209":{"position":[[126,2]]}}}],["犯",{"_index":4750,"t":{"1511":{"position":[[2123,1]]}}}],["状",{"_index":4896,"t":{"1511":{"position":[[4161,1]]}}}],["状态",{"_index":875,"t":{"121":{"position":[[164,2],[203,2]]},"747":{"position":[[755,2]]},"1392":{"position":[[108,2]]},"1394":{"position":[[165,2]]},"1399":{"position":[[38,2]]},"1470":{"position":[[75,2]]},"1747":{"position":[[151,2]]},"1837":{"position":[[35,2],[78,2]]},"1839":{"position":[[61,2]]},"1853":{"position":[[48,2]]},"1863":{"position":[[290,2]]},"1877":{"position":[[108,2]]},"1887":{"position":[[282,2]]},"2041":{"position":[[31,2]]},"2245":{"position":[[62,2]]},"2472":{"position":[[409,2]]},"2486":{"position":[[66,2]]},"2488":{"position":[[32,2]]},"2836":{"position":[[1010,2]]},"2843":{"position":[[7,2]]},"3015":{"position":[[58,2]]},"3045":{"position":[[17,2]]},"3047":{"position":[[59,2],[91,2],[118,2],[151,2]]},"3063":{"position":[[1211,2]]},"3082":{"position":[[6,2]]},"3136":{"position":[[121,2]]},"3244":{"position":[[30,2]]},"3254":{"position":[[587,2],[962,2],[1189,2]]},"3282":{"position":[[175,2],[186,2]]},"3414":{"position":[[115,2]]},"3416":{"position":[[118,2]]},"3460":{"position":[[105,2]]},"3595":{"position":[[68,2],[122,2],[356,2]]},"3624":{"position":[[45,2],[51,2],[67,2],[71,2],[83,2],[96,2],[109,2],[125,2],[151,2],[165,2],[183,2]]},"3684":{"position":[[23,2]]},"3686":{"position":[[450,2]]},"3706":{"position":[[1203,2]]},"3708":{"position":[[142,2],[2321,2],[2621,2],[2736,2],[2952,2],[3891,2],[3907,2],[4094,2]]},"3798":{"position":[[307,2]]},"3800":{"position":[[5,2],[18,2]]},"3810":{"position":[[509,2]]},"3819":{"position":[[1581,2],[1637,2],[1685,2]]},"3844":{"position":[[868,2]]},"3910":{"position":[[2087,2]]},"3912":{"position":[[1802,2]]},"3914":{"position":[[3000,2]]},"3920":{"position":[[1820,2]]},"3944":{"position":[[21,2],[505,2]]},"3954":{"position":[[533,2]]},"3956":{"position":[[57,2],[1669,2],[1969,2],[2084,2],[2296,2]]},"3960":{"position":[[76,2],[571,2]]},"3962":{"position":[[147,2],[1697,2]]},"3994":{"position":[[1018,2]]},"3996":{"position":[[836,2]]},"4000":{"position":[[1065,2]]},"4006":{"position":[[123,2]]}}}],["独",{"_index":4773,"t":{"1511":{"position":[[2348,1]]}}}],["独创",{"_index":3733,"t":{"903":{"position":[[9,2]]}}}],["独占",{"_index":9335,"t":{"3924":{"position":[[1192,2]]}}}],["独特",{"_index":579,"t":{"95":{"position":[[116,2]]},"2915":{"position":[[89,2]]}}}],["独立",{"_index":652,"t":{"102":{"position":[[231,2]]},"373":{"position":[[59,2]]},"445":{"position":[[115,2]]},"1214":{"position":[[25,2]]},"1440":{"position":[[442,2]]},"2341":{"position":[[97,2]]},"2391":{"position":[[185,2]]},"2490":{"position":[[87,2]]},"2575":{"position":[[36,2]]},"2579":{"position":[[0,2]]},"2581":{"position":[[9,2]]},"2619":{"position":[[24,2]]},"2627":{"position":[[11,2],[67,2]]},"2762":{"position":[[6,2],[44,2]]},"2803":{"position":[[152,2],[174,2]]},"2807":{"position":[[10,2]]},"2809":{"position":[[0,2],[31,2],[56,2],[84,2],[122,2]]},"2815":{"position":[[51,2]]},"2836":{"position":[[747,2]]},"2843":{"position":[[35,2]]},"2881":{"position":[[850,2]]},"2915":{"position":[[60,2]]},"2939":{"position":[[27,2]]},"3092":{"position":[[51,2]]},"3350":{"position":[[187,2]]},"3399":{"position":[[0,2]]},"3638":{"position":[[34,2]]},"3704":{"position":[[147,2]]},"3912":{"position":[[2532,2]]},"3914":{"position":[[3550,2]]},"3916":{"position":[[964,2],[973,2]]},"3924":{"position":[[3681,2]]},"3932":{"position":[[349,2],[692,2]]},"3960":{"position":[[475,2]]},"3962":{"position":[[1508,2]]},"3972":{"position":[[578,2]]},"3986":{"position":[[1521,2]]}}}],["猪",{"_index":4641,"t":{"1511":{"position":[[815,1]]}}}],["猫",{"_index":4701,"t":{"1511":{"position":[[1496,1]]}}}],["率",{"_index":9138,"t":{"3914":{"position":[[2903,1]]},"3918":{"position":[[3784,1],[3825,1]]}}}],["王",{"_index":4758,"t":{"1511":{"position":[[2176,1],[3337,1],[4084,1]]},"1578":{"position":[[102,1]]},"2768":{"position":[[477,1]]},"3608":{"position":[[6,1]]}}}],["王国",{"_index":6544,"t":{"2559":{"position":[[1050,2]]}}}],["王者",{"_index":7495,"t":{"3138":{"position":[[55,2]]}}}],["玩",{"_index":6964,"t":{"2768":{"position":[[1014,1]]}}}],["玩具",{"_index":6747,"t":{"2615":{"position":[[24,2]]}}}],["玩起来",{"_index":4483,"t":{"1488":{"position":[[1697,3]]}}}],["环境",{"_index":622,"t":{"102":{"position":[[2,2]]},"114":{"position":[[599,2]]},"179":{"position":[[76,2],[146,2]]},"245":{"position":[[144,2]]},"314":{"position":[[737,2],[776,2]]},"316":{"position":[[676,2],[715,2]]},"386":{"position":[[75,2]]},"429":{"position":[[116,2]]},"451":{"position":[[19,2],[287,2]]},"457":{"position":[[62,2]]},"685":{"position":[[294,2]]},"730":{"position":[[158,2]]},"732":{"position":[[81,2]]},"1383":{"position":[[223,2],[229,2],[236,2]]},"1479":{"position":[[10,2]]},"1481":{"position":[[60,2],[81,2]]},"1483":{"position":[[78,2]]},"1488":{"position":[[39,2]]},"1495":{"position":[[39,2]]},"1516":{"position":[[47,2]]},"1561":{"position":[[23,2]]},"1755":{"position":[[10,2],[310,2],[317,2]]},"1971":{"position":[[0,2]]},"1985":{"position":[[0,2]]},"2008":{"position":[[0,2]]},"2055":{"position":[[9,2],[78,2],[150,2],[212,2]]},"2061":{"position":[[45,2]]},"2625":{"position":[[526,2],[597,2]]},"2733":{"position":[[42,2]]},"2742":{"position":[[12,2]]},"2745":{"position":[[26,2]]},"2747":{"position":[[24,2]]},"2815":{"position":[[56,2]]},"2912":{"position":[[41,2],[155,2]]},"2981":{"position":[[150,2]]},"3080":{"position":[[98,2]]},"3287":{"position":[[716,2],[771,2],[869,2],[954,2],[1037,2],[3042,2],[3076,2],[3158,2]]},"3401":{"position":[[30,2]]},"3442":{"position":[[183,2],[197,2]]},"3446":{"position":[[1074,2]]},"3662":{"position":[[7,2]]},"3920":{"position":[[361,2]]},"3922":{"position":[[757,2]]},"3928":{"position":[[1636,2]]},"3934":{"position":[[306,2],[2639,2]]},"3944":{"position":[[295,2]]},"3950":{"position":[[362,2]]},"3962":{"position":[[1680,2]]},"3978":{"position":[[1087,2]]},"3986":{"position":[[950,2],[1252,2]]},"3990":{"position":[[51,2],[761,2]]},"3992":{"position":[[3509,2]]}}}],["环境参数",{"_index":10170,"t":{"3990":{"position":[[522,4]]}}}],["环境变量",{"_index":4417,"t":{"1483":{"position":[[934,4]]},"1497":{"position":[[332,4]]},"1547":{"position":[[13,4]]},"3432":{"position":[[1310,4]]},"3948":{"position":[[293,4]]}}}],["环节",{"_index":5221,"t":{"1672":{"position":[[104,2]]}}}],["现在",{"_index":132,"t":{"11":{"position":[[5,2]]},"300":{"position":[[1,2]]},"388":{"position":[[2,2]]},"570":{"position":[[1360,2],[1551,2]]},"1424":{"position":[[392,2]]},"1511":{"position":[[4036,2]]},"1578":{"position":[[97,2]]},"1672":{"position":[[2,2]]},"1832":{"position":[[83,2]]},"2294":{"position":[[5,2]]},"2398":{"position":[[199,2]]},"2400":{"position":[[62,2]]},"2402":{"position":[[133,2]]},"2409":{"position":[[70,2]]},"2411":{"position":[[58,2]]},"2413":{"position":[[58,2]]},"2426":{"position":[[79,2]]},"2428":{"position":[[81,2]]},"2430":{"position":[[65,2]]},"2432":{"position":[[65,2]]},"2686":{"position":[[0,2]]},"3608":{"position":[[1,2],[70,2]]},"3688":{"position":[[84,2]]},"3704":{"position":[[618,2]]},"3910":{"position":[[672,2]]},"3924":{"position":[[4158,2]]},"3944":{"position":[[265,2]]}}}],["现有",{"_index":1858,"t":{"255":{"position":[[42,2]]},"270":{"position":[[45,2]]},"1041":{"position":[[16,2]]},"2625":{"position":[[5,2]]},"2627":{"position":[[42,2]]},"2770":{"position":[[252,2]]},"2805":{"position":[[9,2]]},"2809":{"position":[[38,2]]},"2903":{"position":[[41,2]]},"3924":{"position":[[2607,2],[2741,2]]}}}],["现状",{"_index":8397,"t":{"3595":{"position":[[278,2]]}}}],["现象",{"_index":8440,"t":{"3622":{"position":[[34,2]]}}}],["现阶段",{"_index":2334,"t":{"373":{"position":[[164,3]]}}}],["玻利维亚",{"_index":6644,"t":{"2559":{"position":[[2131,4]]}}}],["珠海市",{"_index":3690,"t":{"877":{"position":[[1785,3]]},"1145":{"position":[[484,3]]},"1147":{"position":[[375,3]]},"1151":{"position":[[453,3]]}}}],["班",{"_index":4696,"t":{"1511":{"position":[[1470,1],[1525,1]]}}}],["理应",{"_index":2266,"t":{"353":{"position":[[5,2]]},"2713":{"position":[[323,2]]}}}],["理念",{"_index":482,"t":{"85":{"position":[[131,2]]},"340":{"position":[[42,2]]},"1383":{"position":[[30,2]]}}}],["理想",{"_index":4647,"t":{"1511":{"position":[[858,2]]},"2341":{"position":[[138,2]]}}}],["理解",{"_index":848,"t":{"119":{"position":[[119,2]]},"2495":{"position":[[42,2]]},"2912":{"position":[[134,2]]},"3152":{"position":[[39,2]]}}}],["理论",{"_index":7379,"t":{"3086":{"position":[[46,2]]}}}],["琢磨",{"_index":465,"t":{"85":{"position":[[30,2]]}}}],["琳琅",{"_index":4831,"t":{"1511":{"position":[[3103,2]]}}}],["瑞典",{"_index":6676,"t":{"2559":{"position":[[2439,2],[2448,2],[2461,2],[2465,2]]}}}],["瑞士",{"_index":6553,"t":{"2559":{"position":[[1159,2],[1288,2],[1481,2]]}}}],["瓜",{"_index":4737,"t":{"1511":{"position":[[1955,1]]}}}],["瓯",{"_index":4771,"t":{"1511":{"position":[[2325,1]]}}}],["瓶颈",{"_index":3900,"t":{"1048":{"position":[[34,2],[126,2]]},"3088":{"position":[[155,2]]},"3096":{"position":[[93,2]]},"3098":{"position":[[39,2]]},"3104":{"position":[[20,2]]},"3108":{"position":[[91,2]]},"3110":{"position":[[195,2]]}}}],["甚至",{"_index":1977,"t":{"300":{"position":[[211,2]]},"336":{"position":[[360,2]]},"357":{"position":[[16,2]]},"1761":{"position":[[248,2]]},"3916":{"position":[[1674,2]]}}}],["生产",{"_index":1292,"t":{"182":{"position":[[200,2]]},"245":{"position":[[142,2]]},"314":{"position":[[774,2]]},"316":{"position":[[713,2]]},"1755":{"position":[[308,2],[315,2]]},"2055":{"position":[[76,2]]},"2311":{"position":[[137,2],[307,2],[439,2]]},"2313":{"position":[[643,2]]},"2625":{"position":[[595,2]]},"2981":{"position":[[148,2]]},"3416":{"position":[[126,2],[170,2]]},"3920":{"position":[[359,2]]}}}],["生产力",{"_index":4558,"t":{"1511":{"position":[[26,3]]}}}],["生产流程",{"_index":6862,"t":{"2740":{"position":[[17,4]]}}}],["生产者",{"_index":5611,"t":{"1803":{"position":[[2881,3],[3066,3],[3908,3]]},"2309":{"position":[[109,3]]},"2311":{"position":[[298,3],[325,3],[417,3]]}}}],["生命周期",{"_index":4236,"t":{"1394":{"position":[[119,4]]},"1399":{"position":[[95,4]]},"1401":{"position":[[76,4]]},"1403":{"position":[[56,4]]},"1412":{"position":[[1421,4]]},"2239":{"position":[[105,4]]},"2817":{"position":[[40,4]]},"3379":{"position":[[184,4]]},"3914":{"position":[[3387,4]]}}}],["生存",{"_index":2835,"t":{"530":{"position":[[26,2]]},"1039":{"position":[[26,2]]},"1432":{"position":[[35,2]]},"2805":{"position":[[71,2]]},"2809":{"position":[[124,2]]},"3954":{"position":[[274,2],[287,2]]}}}],["生存期",{"_index":4243,"t":{"1399":{"position":[[2,3],[27,3]]},"1401":{"position":[[3,3]]},"1403":{"position":[[75,3],[109,3]]},"1405":{"position":[[26,3],[54,3],[75,3],[99,3]]},"1408":{"position":[[1051,3]]},"1420":{"position":[[680,3]]},"1440":{"position":[[485,3],[695,3]]},"2717":{"position":[[89,3],[241,3]]},"3001":{"position":[[241,3]]},"3579":{"position":[[122,3],[240,3],[259,3]]}}}],["生态",{"_index":4917,"t":{"1518":{"position":[[40,2]]}}}],["生态系统",{"_index":4518,"t":{"1507":{"position":[[46,4]]}}}],["生成",{"_index":296,"t":{"19":{"position":[[384,2]]},"127":{"position":[[1431,2],[1625,2],[1647,2],[1694,2],[1766,2]]},"148":{"position":[[225,2],[417,2]]},"225":{"position":[[6,2],[52,2]]},"302":{"position":[[20,2],[78,2],[150,2]]},"306":{"position":[[211,2]]},"323":{"position":[[45,2],[126,2]]},"325":{"position":[[241,2]]},"327":{"position":[[52,2],[77,2],[127,2]]},"331":{"position":[[29,2]]},"340":{"position":[[1762,2]]},"361":{"position":[[27,2]]},"427":{"position":[[59,2]]},"433":{"position":[[115,2]]},"498":{"position":[[93,2]]},"653":{"position":[[166,2]]},"677":{"position":[[218,2]]},"679":{"position":[[25,2],[39,2],[46,2]]},"692":{"position":[[13,2],[35,2]]},"694":{"position":[[5,2],[65,2]]},"696":{"position":[[946,2],[981,2],[1025,2],[1151,2],[2146,2],[2198,2],[2332,2],[3084,2],[3128,2],[3254,2],[3760,2],[3807,2],[3936,2],[4703,2]]},"698":{"position":[[127,2],[146,2],[333,2],[1066,2]]},"704":{"position":[[218,2]]},"713":{"position":[[705,2],[773,2]]},"715":{"position":[[34,2]]},"728":{"position":[[33,2]]},"730":{"position":[[4,2]]},"834":{"position":[[140,2]]},"836":{"position":[[201,2]]},"887":{"position":[[189,2]]},"893":{"position":[[93,2]]},"981":{"position":[[53,2]]},"1234":{"position":[[897,2]]},"1313":{"position":[[330,2]]},"1535":{"position":[[592,2]]},"1539":{"position":[[132,2]]},"1576":{"position":[[135,2],[274,2]]},"1580":{"position":[[359,2],[492,2]]},"1584":{"position":[[539,2]]},"1592":{"position":[[0,2],[154,2]]},"1594":{"position":[[0,2],[140,2],[202,2]]},"1598":{"position":[[39,2],[97,2]]},"1621":{"position":[[697,2],[911,2]]},"1627":{"position":[[189,2]]},"1631":{"position":[[58,2]]},"1643":{"position":[[23,2]]},"1687":{"position":[[84,2]]},"1689":{"position":[[696,2]]},"1741":{"position":[[543,2],[1302,2],[2138,2]]},"1761":{"position":[[446,2]]},"1947":{"position":[[98,2]]},"2132":{"position":[[9,2]]},"2245":{"position":[[76,2]]},"2261":{"position":[[3,2],[405,2],[428,2]]},"2333":{"position":[[20,2],[106,2],[318,2]]},"2341":{"position":[[168,2]]},"2497":{"position":[[205,2]]},"2555":{"position":[[58,2]]},"2564":{"position":[[78,2]]},"2649":{"position":[[43,2]]},"2887":{"position":[[45,2]]},"2965":{"position":[[17,2],[213,2]]},"3037":{"position":[[9,2]]},"3073":{"position":[[7,2],[20,2]]},"3211":{"position":[[117,2]]},"3218":{"position":[[274,2]]},"3222":{"position":[[256,2]]},"3263":{"position":[[182,2]]},"3275":{"position":[[423,2]]},"3323":{"position":[[336,2],[344,2],[392,2],[422,2]]},"3464":{"position":[[51,2],[453,2],[476,2]]},"3498":{"position":[[341,2]]},"3543":{"position":[[428,2]]},"3626":{"position":[[340,2],[352,2],[438,2],[504,2]]},"3636":{"position":[[567,2]]},"3670":{"position":[[16,2]]},"3690":{"position":[[76,2]]},"3698":{"position":[[64,2],[339,2]]},"3700":{"position":[[52,2],[77,2],[127,2]]},"3740":{"position":[[388,2]]},"3764":{"position":[[18,2]]},"3779":{"position":[[84,2]]},"3802":{"position":[[85,2]]},"3817":{"position":[[90,2]]},"3912":{"position":[[1878,2],[2189,2]]},"3914":{"position":[[3023,2],[3610,2]]},"3920":{"position":[[1620,2]]},"3930":{"position":[[358,2]]},"3932":{"position":[[1921,2]]},"3934":{"position":[[71,2],[206,2],[951,2]]},"3936":{"position":[[1875,2]]},"3938":{"position":[[880,2]]},"3942":{"position":[[212,2]]},"3950":{"position":[[557,2]]},"3952":{"position":[[615,2]]},"3954":{"position":[[756,2]]},"3962":{"position":[[1287,2]]},"3964":{"position":[[273,2],[675,2]]},"3966":{"position":[[199,2],[1356,2]]},"3968":{"position":[[488,2]]},"3972":{"position":[[303,2],[327,2]]},"3974":{"position":[[748,2]]},"3976":{"position":[[454,2],[516,2]]},"3980":{"position":[[366,2],[686,2]]},"3982":{"position":[[432,2],[810,2]]},"3992":{"position":[[2130,2],[3645,2]]},"3994":{"position":[[1460,2],[1549,2],[1717,2]]},"3996":{"position":[[515,2],[544,2],[946,2],[1058,2]]},"4000":{"position":[[802,2],[1005,2]]}}}],["生成器",{"_index":2718,"t":{"486":{"position":[[45,3]]},"3976":{"position":[[107,3]]}}}],["生效",{"_index":7614,"t":{"3215":{"position":[[467,2]]},"3920":{"position":[[1749,2]]},"3966":{"position":[[1037,2]]},"3984":{"position":[[582,2]]},"3996":{"position":[[971,2]]}}}],["生日",{"_index":9394,"t":{"3926":{"position":[[228,2]]}}}],["生旦净末",{"_index":4815,"t":{"1511":{"position":[[2871,4]]}}}],["生活",{"_index":5216,"t":{"1672":{"position":[[20,2]]},"3926":{"position":[[446,2]]}}}],["用不完",{"_index":9387,"t":{"3926":{"position":[[158,3]]}}}],["用于",{"_index":1793,"t":{"245":{"position":[[130,2]]},"270":{"position":[[107,2]]},"482":{"position":[[957,2]]},"801":{"position":[[62,2],[79,2]]},"986":{"position":[[38,2]]},"988":{"position":[[355,2]]},"1046":{"position":[[19,2]]},"1520":{"position":[[401,2]]},"1539":{"position":[[1904,2]]},"1651":{"position":[[21,2],[30,2]]},"1657":{"position":[[11,2],[144,2],[153,2]]},"1659":{"position":[[8,2]]},"1691":{"position":[[380,2]]},"1797":{"position":[[614,2]]},"1901":{"position":[[16,2]]},"1931":{"position":[[20,2]]},"2243":{"position":[[6,2]]},"2363":{"position":[[223,2]]},"2418":{"position":[[1321,2]]},"2495":{"position":[[13,2]]},"2564":{"position":[[76,2]]},"2717":{"position":[[196,2]]},"2897":{"position":[[211,2]]},"3146":{"position":[[12,2]]},"3148":{"position":[[4,2]]},"3194":{"position":[[47,2]]},"3273":{"position":[[803,2]]},"3294":{"position":[[17,2]]},"3416":{"position":[[154,2]]},"3624":{"position":[[174,2]]},"3626":{"position":[[502,2]]},"3644":{"position":[[8,2]]},"3783":{"position":[[40,2]]},"3972":{"position":[[174,2]]}}}],["用以",{"_index":7470,"t":{"3136":{"position":[[37,2]]}}}],["用作",{"_index":1817,"t":{"249":{"position":[[24,2]]},"255":{"position":[[205,2]]},"1661":{"position":[[140,2]]},"3023":{"position":[[141,2]]},"3729":{"position":[[71,2]]}}}],["用到",{"_index":2564,"t":{"445":{"position":[[128,2]]},"510":{"position":[[495,2]]},"585":{"position":[[501,2]]},"1392":{"position":[[217,2]]},"1396":{"position":[[79,2]]},"1511":{"position":[[4034,2],[4210,2]]},"1617":{"position":[[1138,2]]},"1711":{"position":[[47,2]]},"2735":{"position":[[85,2]]},"3108":{"position":[[145,2]]},"3375":{"position":[[47,2]]},"3456":{"position":[[74,2]]}}}],["用户",{"_index":684,"t":{"110":{"position":[[11,2]]},"119":{"position":[[16,2],[70,2],[99,2],[153,2]]},"121":{"position":[[492,2],[551,2],[616,2],[634,2],[646,2],[751,2]]},"144":{"position":[[1,2],[548,2]]},"152":{"position":[[3,2]]},"186":{"position":[[139,2]]},"300":{"position":[[310,2]]},"565":{"position":[[11,2]]},"841":{"position":[[39,2]]},"1071":{"position":[[89,2]]},"1103":{"position":[[80,2]]},"1483":{"position":[[699,2],[1053,2],[1074,2]]},"1555":{"position":[[552,2]]},"1557":{"position":[[138,2],[235,2],[410,2],[473,2]]},"1572":{"position":[[21,2],[58,2]]},"1672":{"position":[[46,2],[55,2]]},"1865":{"position":[[390,2]]},"1901":{"position":[[28,2]]},"2326":{"position":[[212,2]]},"2635":{"position":[[26,2]]},"2662":{"position":[[26,2]]},"2770":{"position":[[163,2],[199,2],[225,2]]},"2843":{"position":[[31,2],[58,2]]},"2910":{"position":[[299,2],[404,2]]},"2912":{"position":[[58,2],[80,2],[169,2]]},"2915":{"position":[[24,2]]},"3120":{"position":[[160,2]]},"3179":{"position":[[14,2]]},"3181":{"position":[[15,2],[20,2]]},"3189":{"position":[[64,2],[264,2]]},"3277":{"position":[[9,2]]},"3282":{"position":[[58,2]]},"3284":{"position":[[83,2]]},"3412":{"position":[[59,2]]},"3414":{"position":[[285,2],[303,2]]},"3466":{"position":[[1341,2]]},"3620":{"position":[[221,2]]},"3622":{"position":[[121,2]]},"3680":{"position":[[34,2]]},"3684":{"position":[[48,2]]},"3958":{"position":[[331,2]]},"3966":{"position":[[1386,2]]},"3992":{"position":[[528,2],[1576,2]]}}}],["用户名",{"_index":920,"t":{"121":{"position":[[585,3]]},"1863":{"position":[[268,3]]},"2201":{"position":[[16,3]]},"2510":{"position":[[41,3]]},"2512":{"position":[[40,3]]},"2536":{"position":[[128,3]]},"3684":{"position":[[71,3]]}}}],["用来",{"_index":1602,"t":{"218":{"position":[[68,2]]},"841":{"position":[[35,2]]},"1048":{"position":[[115,2]]},"1131":{"position":[[17,2]]},"1424":{"position":[[759,2]]},"1587":{"position":[[146,2]]},"1711":{"position":[[923,2]]},"1857":{"position":[[38,2]]},"1917":{"position":[[14,2]]},"1923":{"position":[[19,2]]},"1939":{"position":[[54,2]]},"2035":{"position":[[54,2]]},"2442":{"position":[[2037,2]]},"3624":{"position":[[113,2]]},"3779":{"position":[[175,2]]},"3802":{"position":[[172,2]]},"3817":{"position":[[181,2]]},"3824":{"position":[[30,2]]},"3826":{"position":[[61,2]]},"3860":{"position":[[40,2]]},"3934":{"position":[[69,2]]}}}],["用法",{"_index":2904,"t":{"550":{"position":[[614,2]]},"935":{"position":[[47,2]]},"1107":{"position":[[87,2]]},"1225":{"position":[[21,2]]},"1412":{"position":[[1221,2],[1400,2]]},"1665":{"position":[[348,2]]},"2331":{"position":[[245,2]]},"2343":{"position":[[298,2]]},"2790":{"position":[[86,2]]},"2921":{"position":[[52,2]]},"3258":{"position":[[510,2]]},"3265":{"position":[[144,2]]},"3267":{"position":[[661,2]]},"3269":{"position":[[557,2]]},"3271":{"position":[[242,2]]},"3273":{"position":[[104,2],[383,2]]},"3275":{"position":[[398,2]]},"3742":{"position":[[2,2]]}}}],["用途",{"_index":1249,"t":{"179":{"position":[[117,2],[122,2]]},"2333":{"position":[[31,2]]}}}],["由于",{"_index":182,"t":{"11":{"position":[[793,2]]},"104":{"position":[[56,2]]},"121":{"position":[[151,2]]},"355":{"position":[[0,2]]},"357":{"position":[[0,2]]},"530":{"position":[[0,2]]},"810":{"position":[[419,2]]},"812":{"position":[[451,2]]},"814":{"position":[[415,2]]},"816":{"position":[[447,2]]},"941":{"position":[[70,2]]},"1039":{"position":[[0,2]]},"1060":{"position":[[0,2]]},"1111":{"position":[[451,2]]},"1113":{"position":[[449,2]]},"1115":{"position":[[458,2]]},"1117":{"position":[[4696,2]]},"1119":{"position":[[420,2]]},"1121":{"position":[[452,2]]},"1123":{"position":[[383,2]]},"1129":{"position":[[1774,2]]},"1196":{"position":[[109,2]]},"1198":{"position":[[118,2]]},"1200":{"position":[[226,2]]},"1368":{"position":[[0,2]]},"1383":{"position":[[5,2]]},"1672":{"position":[[0,2]]},"1745":{"position":[[0,2]]},"1801":{"position":[[33,2]]},"2294":{"position":[[841,2]]},"2326":{"position":[[74,2]]},"2343":{"position":[[172,2]]},"2385":{"position":[[0,2]]},"2391":{"position":[[161,2]]},"2591":{"position":[[0,2]]},"2905":{"position":[[0,2]]},"2995":{"position":[[0,2]]},"3088":{"position":[[89,2]]},"3126":{"position":[[5,2]]},"3154":{"position":[[716,2]]},"3207":{"position":[[6,2]]},"3287":{"position":[[130,2],[455,2]]},"3329":{"position":[[0,2]]},"3345":{"position":[[33,2]]},"3352":{"position":[[487,2]]},"3414":{"position":[[177,2]]},"3416":{"position":[[163,2]]},"3612":{"position":[[0,2]]},"3740":{"position":[[0,2]]},"3914":{"position":[[1625,2]]},"3928":{"position":[[89,2]]}}}],["申明",{"_index":4112,"t":{"1311":{"position":[[463,2]]}}}],["电商",{"_index":1498,"t":{"199":{"position":[[615,2]]}}}],["电子化",{"_index":5433,"t":{"1761":{"position":[[137,3]]}}}],["电子邮件",{"_index":7521,"t":{"3142":{"position":[[224,4]]}}}],["电子邮箱",{"_index":3080,"t":{"587":{"position":[[828,4]]},"1509":{"position":[[286,4]]}}}],["电脑",{"_index":6381,"t":{"2510":{"position":[[2,2],[39,2]]},"2512":{"position":[[38,2]]},"2742":{"position":[[44,2]]},"2836":{"position":[[1273,2]]},"3080":{"position":[[130,2]]}}}],["电话号码",{"_index":3082,"t":{"587":{"position":[[843,4]]},"851":{"position":[[894,4]]}}}],["电鱼",{"_index":4886,"t":{"1511":{"position":[[3949,2]]}}}],["男",{"_index":4019,"t":{"1141":{"position":[[90,1]]}}}],["画像",{"_index":8067,"t":{"3414":{"position":[[305,2]]}}}],["界",{"_index":7742,"t":{"3242":{"position":[[155,1]]},"3910":{"position":[[152,1]]},"3926":{"position":[[287,1]]},"3934":{"position":[[2260,1]]}}}],["界面",{"_index":1282,"t":{"182":{"position":[[146,2]]},"302":{"position":[[96,2]]},"685":{"position":[[470,2],[524,2],[580,2]]},"688":{"position":[[18,2]]},"696":{"position":[[484,2]]},"1939":{"position":[[65,2]]},"2359":{"position":[[449,2]]},"3329":{"position":[[70,2]]}}}],["留下",{"_index":8053,"t":{"3412":{"position":[[89,2]]}}}],["留空",{"_index":6303,"t":{"2418":{"position":[[511,2]]}}}],["略",{"_index":1893,"t":{"265":{"position":[[25,1]]},"1511":{"position":[[2062,1]]}}}],["略懂",{"_index":1220,"t":{"172":{"position":[[35,2]]}}}],["略有不同",{"_index":7086,"t":{"2821":{"position":[[25,4]]}}}],["略表心意",{"_index":4760,"t":{"1511":{"position":[[2188,4]]}}}],["疑问",{"_index":1530,"t":{"206":{"position":[[72,2]]},"3976":{"position":[[624,2]]},"3978":{"position":[[1550,2]]},"3992":{"position":[[3450,2]]}}}],["痕迹",{"_index":8054,"t":{"3412":{"position":[[92,2]]}}}],["痛",{"_index":7354,"t":{"3069":{"position":[[238,1]]}}}],["痛点",{"_index":8470,"t":{"3626":{"position":[[231,2]]}}}],["痛苦",{"_index":2328,"t":{"373":{"position":[[9,2]]}}}],["登录",{"_index":891,"t":{"121":{"position":[[326,2]]},"127":{"position":[[1641,2]]},"129":{"position":[[624,2]]},"144":{"position":[[3,2],[550,2]]},"152":{"position":[[5,2]]},"1377":{"position":[[649,2]]},"1911":{"position":[[48,2]]},"1913":{"position":[[984,2]]},"2245":{"position":[[73,2],[133,2]]},"2846":{"position":[[388,2]]},"3063":{"position":[[1109,2],[1184,2],[1209,2],[1249,2],[1305,2]]},"3684":{"position":[[37,2],[50,2]]},"3686":{"position":[[82,2],[348,2],[423,2],[448,2],[521,2],[577,2]]},"3704":{"position":[[833,2],[854,2]]},"3706":{"position":[[1101,2],[1176,2],[1201,2],[1260,2],[1316,2]]},"3924":{"position":[[4373,2],[4394,2]]},"3940":{"position":[[907,2],[999,2],[1022,2]]}}}],["登顶",{"_index":2394,"t":{"399":{"position":[[473,2]]}}}],["白",{"_index":7980,"t":{"3354":{"position":[[12,1],[36,1]]}}}],["白俄罗斯",{"_index":6477,"t":{"2559":{"position":[[477,4]]}}}],["白板",{"_index":6943,"t":{"2768":{"position":[[663,2]]},"3142":{"position":[[197,2]]}}}],["百",{"_index":1163,"t":{"158":{"position":[[0,1]]},"294":{"position":[[62,1]]},"399":{"position":[[524,1]]},"645":{"position":[[30,1]]},"954":{"position":[[387,1]]},"960":{"position":[[638,1],[728,1],[828,1],[991,1],[1046,1],[1332,1],[1387,1],[1614,1]]},"1145":{"position":[[407,1]]},"1147":{"position":[[298,1]]},"1151":{"position":[[376,1]]},"1170":{"position":[[409,1],[938,1]]},"1183":{"position":[[263,1],[637,1]]},"1302":{"position":[[220,1]]},"1551":{"position":[[580,1],[679,1]]},"1677":{"position":[[53,1],[103,1],[204,1],[290,1]]},"1679":{"position":[[54,1]]},"1681":{"position":[[110,1]]},"1685":{"position":[[84,1],[137,1]]},"1687":{"position":[[165,1]]},"1855":{"position":[[340,1]]},"1865":{"position":[[233,1]]},"1869":{"position":[[194,1]]},"2261":{"position":[[83,1],[154,1],[285,1],[344,1]]},"2581":{"position":[[1379,1]]},"3017":{"position":[[98,1]]},"3065":{"position":[[204,1]]},"3426":{"position":[[71,1]]},"3464":{"position":[[131,1],[202,1],[333,1],[392,1]]},"3466":{"position":[[1432,1],[1704,1]]},"3642":{"position":[[278,1]]},"3702":{"position":[[2226,1]]},"3706":{"position":[[1952,1]]},"3926":{"position":[[336,1]]},"3934":{"position":[[2568,1]]},"3936":{"position":[[1953,1],[2018,1],[2144,1],[2203,1]]}}}],["百万",{"_index":7596,"t":{"3209":{"position":[[112,2]]},"3211":{"position":[[32,2]]},"3934":{"position":[[2130,2]]}}}],["百度",{"_index":3586,"t":{"801":{"position":[[2,2]]},"1103":{"position":[[2,2]]},"2303":{"position":[[2,2]]},"2782":{"position":[[2,2]]},"3350":{"position":[[3,2]]},"3373":{"position":[[537,2]]}}}],["百科",{"_index":3587,"t":{"801":{"position":[[4,2]]},"1103":{"position":[[4,2]]},"2303":{"position":[[4,2]]},"2782":{"position":[[4,2]]},"3350":{"position":[[5,2]]}}}],["百花齐放",{"_index":8409,"t":{"3608":{"position":[[15,4]]}}}],["的话",{"_index":2331,"t":{"373":{"position":[[133,2]]},"3352":{"position":[[432,2]]},"3579":{"position":[[247,2]]}}}],["皆",{"_index":2761,"t":{"502":{"position":[[170,1]]},"3791":{"position":[[37,1]]}}}],["皮毛",{"_index":1221,"t":{"172":{"position":[[37,2]]}}}],["盈利",{"_index":7002,"t":{"2770":{"position":[[100,2]]}}}],["监听",{"_index":598,"t":{"98":{"position":[[77,2]]},"453":{"position":[[38,2],[345,2],[352,2],[403,2]]},"532":{"position":[[146,2]]},"739":{"position":[[56,2],[63,2]]},"741":{"position":[[21,2]]},"749":{"position":[[24,2],[203,2],[505,2],[869,2]]},"751":{"position":[[32,2],[43,2]]},"1430":{"position":[[77,2]]},"1717":{"position":[[118,2]]},"1733":{"position":[[48,2]]},"1861":{"position":[[164,2]]},"2199":{"position":[[184,2]]},"2486":{"position":[[317,2]]},"2488":{"position":[[30,2]]},"2629":{"position":[[77,2]]},"2717":{"position":[[345,2]]},"2729":{"position":[[22,2]]},"2731":{"position":[[37,2]]},"2981":{"position":[[85,2]]},"3075":{"position":[[7,2]]},"3078":{"position":[[138,2]]},"3082":{"position":[[2,2]]},"3154":{"position":[[291,2],[613,2]]},"3444":{"position":[[67,2]]},"3452":{"position":[[3236,2]]},"3779":{"position":[[146,2]]},"3802":{"position":[[143,2]]},"3817":{"position":[[152,2]]},"3912":{"position":[[2310,2]]},"3914":{"position":[[783,2]]},"3916":{"position":[[1496,2],[2048,2],[2667,2],[2686,2],[2755,2],[6232,2]]},"3956":{"position":[[3210,2]]},"3964":{"position":[[16,2]]},"3988":{"position":[[18,2]]},"3996":{"position":[[829,2]]},"3998":{"position":[[74,2],[435,2]]}}}],["监听器",{"_index":3495,"t":{"743":{"position":[[22,3]]},"2486":{"position":[[27,3],[52,3],[80,3]]},"3950":{"position":[[11,3]]},"3996":{"position":[[1499,3]]},"3998":{"position":[[757,3]]}}}],["监控",{"_index":1271,"t":{"182":{"position":[[75,2]]},"570":{"position":[[2690,2]]},"2740":{"position":[[120,2]]},"3096":{"position":[[50,2]]}}}],["监测",{"_index":6866,"t":{"2740":{"position":[[104,2]]}}}],["监视",{"_index":2168,"t":{"336":{"position":[[421,2]]},"1807":{"position":[[45,2]]},"3142":{"position":[[153,2]]},"3448":{"position":[[884,2],[1376,2],[1387,2]]},"3828":{"position":[[35,2]]}}}],["监视器",{"_index":5643,"t":{"1807":{"position":[[32,3],[858,3]]},"1821":{"position":[[441,3]]},"3826":{"position":[[615,3]]},"3828":{"position":[[22,3],[891,3]]},"3924":{"position":[[94,3]]}}}],["监视系统",{"_index":8050,"t":{"3412":{"position":[[48,4]]}}}],["盒",{"_index":7981,"t":{"3354":{"position":[[13,1],[37,1]]}}}],["目前",{"_index":410,"t":{"51":{"position":[[0,2]]},"53":{"position":[[19,2]]},"62":{"position":[[0,2]]},"64":{"position":[[32,2]]},"75":{"position":[[0,2]]},"77":{"position":[[19,2]]},"98":{"position":[[37,2]]},"104":{"position":[[7,2]]},"121":{"position":[[745,2]]},"127":{"position":[[1475,2]]},"340":{"position":[[1953,2]]},"445":{"position":[[143,2]]},"633":{"position":[[37,2]]},"679":{"position":[[9,2]]},"685":{"position":[[553,2]]},"949":{"position":[[0,2]]},"988":{"position":[[43,2]]},"1389":{"position":[[188,2]]},"1392":{"position":[[0,2]]},"1432":{"position":[[214,2]]},"2309":{"position":[[95,2]]},"2321":{"position":[[7,2]]},"2335":{"position":[[39,2]]},"2343":{"position":[[0,2],[103,2],[174,2]]},"2579":{"position":[[7,2]]},"2629":{"position":[[44,2]]},"2635":{"position":[[0,2]]},"2662":{"position":[[0,2]]},"2684":{"position":[[416,2]]},"2803":{"position":[[89,2]]},"3136":{"position":[[164,2]]},"3142":{"position":[[254,2]]},"3209":{"position":[[34,2],[75,2]]},"3250":{"position":[[34,2],[74,2]]},"3315":{"position":[[43,2]]},"3573":{"position":[[42,2]]},"3722":{"position":[[320,2]]},"3808":{"position":[[93,2]]},"3924":{"position":[[2605,2]]},"3954":{"position":[[51,2]]}}}],["目录",{"_index":278,"t":{"19":{"position":[[117,2]]},"308":{"position":[[63,2],[99,2],[118,2],[127,2],[349,2]]},"310":{"position":[[65,2],[97,2],[116,2],[125,2],[201,2]]},"323":{"position":[[38,2],[120,2],[129,2]]},"427":{"position":[[48,2]]},"433":{"position":[[104,2]]},"445":{"position":[[814,2],[934,2],[974,2],[983,2]]},"455":{"position":[[11,2],[216,2],[225,2]]},"498":{"position":[[81,2]]},"694":{"position":[[21,2]]},"698":{"position":[[341,2]]},"724":{"position":[[22,2],[70,2]]},"893":{"position":[[81,2]]},"1313":{"position":[[318,2]]},"1483":{"position":[[733,2],[880,2],[914,2],[929,2]]},"1488":{"position":[[636,2],[688,2]]},"1495":{"position":[[580,2],[632,2]]},"1535":{"position":[[652,2]]},"1541":{"position":[[90,2],[106,2]]},"1549":{"position":[[15,2],[20,2]]},"1561":{"position":[[46,2]]},"1717":{"position":[[100,2]]},"1741":{"position":[[186,2],[995,2],[1848,2]]},"1979":{"position":[[902,2],[925,2]]},"1991":{"position":[[298,2],[321,2]]},"2014":{"position":[[298,2],[321,2]]},"2553":{"position":[[46,2]]},"2623":{"position":[[266,2]]},"2625":{"position":[[587,2]]},"2627":{"position":[[190,2]]},"2866":{"position":[[16,2]]},"2905":{"position":[[79,2]]},"2985":{"position":[[199,2],[294,2],[303,2]]},"3031":{"position":[[46,2]]},"3337":{"position":[[40,2]]},"3620":{"position":[[97,2],[103,2],[112,2]]},"3632":{"position":[[31,2]]},"3704":{"position":[[202,2]]},"3740":{"position":[[425,2]]},"3924":{"position":[[3736,2]]},"3942":{"position":[[78,2],[85,2]]},"3954":{"position":[[176,2]]}}}],["目标",{"_index":4547,"t":{"1509":{"position":[[214,2]]},"1566":{"position":[[314,2]]}}}],["目的",{"_index":1601,"t":{"218":{"position":[[65,2]]},"1020":{"position":[[21,2]]},"1697":{"position":[[65,2]]},"1793":{"position":[[65,2]]},"2912":{"position":[[146,2]]},"3702":{"position":[[1359,2]]}}}],["直",{"_index":9380,"t":{"3926":{"position":[[128,1]]}}}],["直到",{"_index":6119,"t":{"2311":{"position":[[426,2]]}}}],["直接",{"_index":308,"t":{"19":{"position":[[622,2]]},"21":{"position":[[143,2]]},"23":{"position":[[125,2]]},"26":{"position":[[26,2]]},"51":{"position":[[244,2]]},"62":{"position":[[244,2]]},"75":{"position":[[244,2]]},"108":{"position":[[43,2]]},"114":{"position":[[43,2]]},"133":{"position":[[694,2]]},"146":{"position":[[1005,2]]},"206":{"position":[[301,2]]},"278":{"position":[[232,2]]},"286":{"position":[[20,2]]},"306":{"position":[[150,2]]},"331":{"position":[[216,2]]},"433":{"position":[[159,2]]},"528":{"position":[[107,2],[133,2],[330,2],[594,2]]},"625":{"position":[[34,2]]},"685":{"position":[[72,2]]},"708":{"position":[[524,2]]},"719":{"position":[[9,2]]},"730":{"position":[[25,2]]},"810":{"position":[[330,2]]},"812":{"position":[[354,2]]},"814":{"position":[[327,2]]},"816":{"position":[[351,2]]},"943":{"position":[[27,2]]},"1111":{"position":[[354,2]]},"1113":{"position":[[352,2]]},"1115":{"position":[[358,2]]},"1117":{"position":[[3816,2]]},"1119":{"position":[[329,2]]},"1121":{"position":[[353,2]]},"1123":{"position":[[299,2]]},"1129":{"position":[[506,2],[1444,2]]},"1149":{"position":[[46,2]]},"1234":{"position":[[1057,2]]},"1269":{"position":[[217,2]]},"1621":{"position":[[779,2]]},"1657":{"position":[[65,2]]},"1711":{"position":[[631,2]]},"1741":{"position":[[786,2],[1548,2],[2390,2]]},"1745":{"position":[[6,2]]},"1773":{"position":[[293,2]]},"1811":{"position":[[48,2]]},"1834":{"position":[[4,2]]},"1909":{"position":[[52,2],[141,2]]},"1911":{"position":[[43,2]]},"1913":{"position":[[1191,2]]},"1933":{"position":[[641,2],[772,2]]},"1941":{"position":[[708,2],[799,2],[969,2]]},"2231":{"position":[[125,2]]},"2235":{"position":[[26,2]]},"2272":{"position":[[351,2]]},"2326":{"position":[[228,2],[264,2]]},"2357":{"position":[[175,2]]},"2540":{"position":[[79,2]]},"2547":{"position":[[104,2]]},"2615":{"position":[[72,2]]},"2625":{"position":[[18,2],[601,2]]},"2674":{"position":[[131,2]]},"2792":{"position":[[152,2]]},"2809":{"position":[[45,2]]},"2811":{"position":[[42,2]]},"3071":{"position":[[1088,2],[1109,2]]},"3126":{"position":[[102,2]]},"3148":{"position":[[134,2]]},"3150":{"position":[[35,2]]},"3162":{"position":[[28,2]]},"3248":{"position":[[80,2]]},"3275":{"position":[[418,2]]},"3331":{"position":[[144,2]]},"3397":{"position":[[26,2]]},"3401":{"position":[[193,2]]},"3452":{"position":[[852,2]]},"3520":{"position":[[90,2]]},"3561":{"position":[[90,2]]},"3587":{"position":[[8,2]]},"3595":{"position":[[80,2],[125,2],[218,2],[398,2],[427,2]]},"3597":{"position":[[171,2],[451,2]]},"3599":{"position":[[15,2]]},"3666":{"position":[[25,2]]},"3698":{"position":[[370,2]]},"3779":{"position":[[115,2]]},"3802":{"position":[[114,2]]},"3817":{"position":[[121,2]]},"3864":{"position":[[21,2]]},"3916":{"position":[[3848,2]]},"3924":{"position":[[2618,2]]},"3964":{"position":[[292,2]]},"3966":{"position":[[885,2]]},"3972":{"position":[[69,2]]},"3984":{"position":[[110,2]]}}}],["直播",{"_index":7498,"t":{"3138":{"position":[[66,2],[76,2]]}}}],["直观",{"_index":1280,"t":{"182":{"position":[[130,2]]},"1394":{"position":[[173,2]]}}}],["相",{"_index":935,"t":{"121":{"position":[[713,1]]},"1691":{"position":[[69,1]]},"3350":{"position":[[201,1]]}}}],["相互",{"_index":1007,"t":{"127":{"position":[[1445,2]]},"340":{"position":[[89,2]]},"427":{"position":[[106,2]]}}}],["相互依赖",{"_index":2201,"t":{"338":{"position":[[1238,4]]},"340":{"position":[[84,4]]},"1697":{"position":[[53,4]]},"1793":{"position":[[53,4]]}}}],["相互影响",{"_index":2680,"t":{"482":{"position":[[412,4]]},"2418":{"position":[[706,4]]}}}],["相似",{"_index":7199,"t":{"2910":{"position":[[178,2]]},"3092":{"position":[[67,2]]}}}],["相信",{"_index":6869,"t":{"2742":{"position":[[38,2]]},"2862":{"position":[[0,2]]},"3080":{"position":[[124,2]]},"3626":{"position":[[0,2]]}}}],["相关",{"_index":911,"t":{"121":{"position":[[490,2]]},"182":{"position":[[124,2],[225,2]]},"249":{"position":[[96,2]]},"655":{"position":[[512,2]]},"677":{"position":[[256,2]]},"704":{"position":[[252,2]]},"734":{"position":[[8202,2]]},"917":{"position":[[3,2]]},"924":{"position":[[209,2]]},"939":{"position":[[53,2],[104,2]]},"1499":{"position":[[865,2]]},"1707":{"position":[[39,2]]},"2383":{"position":[[143,2]]},"2398":{"position":[[109,2]]},"2555":{"position":[[170,2]]},"2674":{"position":[[422,2]]},"3063":{"position":[[1653,2]]},"3224":{"position":[[1713,2]]},"3307":{"position":[[190,2]]},"3432":{"position":[[4394,2]]},"3434":{"position":[[2766,2]]},"3626":{"position":[[303,2]]},"3706":{"position":[[1664,2]]},"3824":{"position":[[47,2]]},"3980":{"position":[[505,2]]}}}],["相同",{"_index":2438,"t":{"404":{"position":[[249,2]]},"406":{"position":[[97,2]]},"408":{"position":[[34,2]]},"617":{"position":[[2708,2],[2753,2]]},"1060":{"position":[[9,2]]},"1068":{"position":[[32,2]]},"1403":{"position":[[24,2]]},"1905":{"position":[[82,2]]},"2684":{"position":[[323,2]]},"2912":{"position":[[63,2]]},"3698":{"position":[[45,2]]},"3779":{"position":[[1621,2]]},"3802":{"position":[[2382,2]]},"3934":{"position":[[201,2]]}}}],["相对",{"_index":3858,"t":{"986":{"position":[[119,2]]},"3063":{"position":[[1325,2]]},"3108":{"position":[[71,2]]},"3430":{"position":[[1866,2],[1899,2]]},"3686":{"position":[[497,2],[597,2]]},"3706":{"position":[[1336,2]]}}}],["相差",{"_index":2747,"t":{"494":{"position":[[610,2]]}}}],["相应",{"_index":3320,"t":{"677":{"position":[[125,2],[220,2]]},"704":{"position":[[125,2],[220,2]]},"1068":{"position":[[74,2]]},"3088":{"position":[[63,2]]}}}],["相当于",{"_index":7163,"t":{"2879":{"position":[[16,3]]}}}],["相比",{"_index":1756,"t":{"239":{"position":[[108,2]]},"2343":{"position":[[194,2]]}}}],["相结合",{"_index":7465,"t":{"3131":{"position":[[52,3]]}}}],["相近",{"_index":485,"t":{"85":{"position":[[150,2]]}}}],["省事",{"_index":8446,"t":{"3622":{"position":[[188,2]]}}}],["省去",{"_index":7162,"t":{"2877":{"position":[[196,2]]},"3910":{"position":[[876,2]]}}}],["省时省力",{"_index":4833,"t":{"1511":{"position":[[3122,4]]}}}],["省略",{"_index":4159,"t":{"1377":{"position":[[395,2]]},"1483":{"position":[[1199,2]]},"3986":{"position":[[1698,2]]}}}],["看似",{"_index":7167,"t":{"2885":{"position":[[12,2]]}}}],["看做",{"_index":7439,"t":{"3118":{"position":[[106,2]]}}}],["看出",{"_index":4227,"t":{"1392":{"position":[[45,2]]},"1578":{"position":[[8,2]]},"1847":{"position":[[9,2]]}}}],["看到",{"_index":2170,"t":{"338":{"position":[[24,2]]},"340":{"position":[[1846,2]]},"585":{"position":[[12,2]]},"1511":{"position":[[1029,2],[1097,2]]},"3696":{"position":[[185,2]]}}}],["看来",{"_index":9384,"t":{"3926":{"position":[[142,2]]}}}],["看看",{"_index":3418,"t":{"719":{"position":[[39,2]]},"1697":{"position":[[72,2]]},"1837":{"position":[[13,2]]}}}],["看着",{"_index":4694,"t":{"1511":{"position":[[1390,2]]}}}],["看起来",{"_index":3034,"t":{"585":{"position":[[378,3]]}}}],["真实",{"_index":303,"t":{"19":{"position":[[509,2]]},"182":{"position":[[183,2],[189,2]]},"1286":{"position":[[113,2]]},"1424":{"position":[[1763,2]]},"2782":{"position":[[87,2]]},"3978":{"position":[[321,2]]}}}],["真实性",{"_index":1287,"t":{"182":{"position":[[165,3]]}}}],["真棒",{"_index":4665,"t":{"1511":{"position":[[1085,2]]}}}],["真正",{"_index":1800,"t":{"245":{"position":[[207,2]]},"2770":{"position":[[17,2],[307,2]]},"2817":{"position":[[162,2]]},"3934":{"position":[[26,2],[491,2]]}}}],["真的",{"_index":2193,"t":{"338":{"position":[[1194,2],[1199,2]]},"1511":{"position":[[1568,2]]},"3352":{"position":[[548,2],[555,2]]},"3926":{"position":[[519,2]]}}}],["眼",{"_index":7730,"t":{"3242":{"position":[[77,1]]},"3910":{"position":[[74,1]]},"3934":{"position":[[2171,1]]}}}],["眼前",{"_index":9377,"t":{"3926":{"position":[[121,2]]}}}],["眼睛",{"_index":9373,"t":{"3926":{"position":[[100,2]]}}}],["瞟",{"_index":7752,"t":{"3242":{"position":[[285,1]]},"3910":{"position":[[282,1]]},"3934":{"position":[[2467,1]]}}}],["瞧瞧",{"_index":2190,"t":{"338":{"position":[[1158,2]]}}}],["瞬时",{"_index":4246,"t":{"1405":{"position":[[47,2]]},"1408":{"position":[[1090,2]]},"1440":{"position":[[490,2]]},"2587":{"position":[[512,2]]},"2831":{"position":[[45,2]]},"3791":{"position":[[566,2]]},"3990":{"position":[[466,2]]}}}],["瞬间",{"_index":6073,"t":{"2264":{"position":[[117,2]]}}}],["知",{"_index":1181,"t":{"166":{"position":[[13,1]]},"3242":{"position":[[191,1]]},"3910":{"position":[[188,1]]},"3934":{"position":[[2357,1]]}}}],["知名度",{"_index":4552,"t":{"1509":{"position":[[270,3]]}}}],["知识",{"_index":155,"t":{"11":{"position":[[652,2]]},"108":{"position":[[1,2]]},"114":{"position":[[1,2]]},"152":{"position":[[666,2]]},"154":{"position":[[40,2]]},"194":{"position":[[51,2]]},"204":{"position":[[489,2]]},"237":{"position":[[1376,2]]},"257":{"position":[[41,2]]},"355":{"position":[[536,2]]},"425":{"position":[[40,2]]},"435":{"position":[[1183,2]]},"465":{"position":[[38,2]]},"526":{"position":[[212,2]]},"534":{"position":[[735,2]]},"536":{"position":[[42,2]]},"562":{"position":[[42,2]]},"570":{"position":[[2034,2]]},"606":{"position":[[1255,2]]},"615":{"position":[[639,2]]},"617":{"position":[[1804,2]]},"639":{"position":[[467,2]]},"651":{"position":[[378,2]]},"715":{"position":[[43,2]]},"736":{"position":[[40,2]]},"775":{"position":[[57,2]]},"789":{"position":[[199,2]]},"897":{"position":[[502,2]]},"911":{"position":[[175,2]]},"915":{"position":[[387,2]]},"1031":{"position":[[191,2]]},"1153":{"position":[[40,2]]},"1200":{"position":[[117,2]]},"1309":{"position":[[666,2]]},"1351":{"position":[[378,2]]},"1368":{"position":[[692,2]]},"1389":{"position":[[269,2]]},"1403":{"position":[[79,2]]},"1412":{"position":[[2512,2]]},"1418":{"position":[[285,2]]},"1520":{"position":[[110,2]]},"1530":{"position":[[119,2]]},"1547":{"position":[[434,2]]},"1549":{"position":[[505,2]]},"1570":{"position":[[1,2]]},"1659":{"position":[[1296,2]]},"1755":{"position":[[552,2],[985,2]]},"1781":{"position":[[468,2]]},"1819":{"position":[[851,2]]},"1867":{"position":[[675,2]]},"1869":{"position":[[604,2]]},"1965":{"position":[[8,2]]},"1981":{"position":[[12,2]]},"1993":{"position":[[12,2]]},"2016":{"position":[[12,2]]},"2294":{"position":[[681,2]]},"2561":{"position":[[39,2]]},"2564":{"position":[[201,2]]},"2593":{"position":[[8,2]]},"2611":{"position":[[43,2]]},"2690":{"position":[[315,2]]},"2698":{"position":[[43,2]]},"2703":{"position":[[106,2]]},"2717":{"position":[[449,2]]},"2737":{"position":[[38,2]]},"2740":{"position":[[138,2]]},"2813":{"position":[[1128,2]]},"2819":{"position":[[588,2]]},"2827":{"position":[[1,2]]},"2856":{"position":[[1973,2]]},"3073":{"position":[[1,2]]},"3126":{"position":[[568,2]]},"3150":{"position":[[176,2]]},"3205":{"position":[[43,2]]},"3215":{"position":[[861,2]]},"3240":{"position":[[44,2]]},"3273":{"position":[[992,2]]},"3287":{"position":[[3027,2]]},"3298":{"position":[[38,2]]},"3333":{"position":[[37,2],[40,2]]},"3409":{"position":[[40,2]]},"3420":{"position":[[278,2]]},"3472":{"position":[[38,2]]},"3506":{"position":[[658,2]]},"3547":{"position":[[828,2]]},"3605":{"position":[[46,2]]},"3630":{"position":[[665,2]]},"3644":{"position":[[1296,2]]},"3926":{"position":[[169,2]]}}}],["知道",{"_index":878,"t":{"121":{"position":[[178,2]]},"338":{"position":[[1268,2]]},"1513":{"position":[[48,2]]},"2326":{"position":[[266,2]]},"2719":{"position":[[2,2]]},"2770":{"position":[[72,2]]},"3305":{"position":[[16,2]]},"3391":{"position":[[27,2]]},"3414":{"position":[[106,2]]}}}],["短",{"_index":4441,"t":{"1488":{"position":[[167,1]]},"1495":{"position":[[167,1]]},"1520":{"position":[[168,1],[172,1],[256,1]]},"1522":{"position":[[7,1],[25,1],[46,1]]},"1526":{"position":[[49,1]]},"1530":{"position":[[49,1]]},"1539":{"position":[[1690,1]]},"2328":{"position":[[20,1]]},"2333":{"position":[[0,1],[130,1],[320,1]]},"3323":{"position":[[404,1]]},"3966":{"position":[[194,1]]}}}],["短信",{"_index":6289,"t":{"2404":{"position":[[95,2],[172,2]]},"3729":{"position":[[78,2]]}}}],["短路",{"_index":5780,"t":{"1901":{"position":[[53,2],[144,2]]},"1941":{"position":[[971,2]]},"1947":{"position":[[109,2]]},"1955":{"position":[[94,2],[193,2],[286,2]]},"3960":{"position":[[568,2]]}}}],["石头",{"_index":4765,"t":{"1511":{"position":[[2244,2]]}}}],["码",{"_index":4560,"t":{"1511":{"position":[[46,1],[70,1],[965,1],[1185,1],[1207,1],[1246,1],[1277,1],[1320,1],[1358,1],[1413,1],[1439,1],[1453,1],[1477,1],[1502,1],[1532,1],[1561,1],[1594,1],[1618,1],[1641,1],[1656,1],[1663,1],[1712,1],[1744,1],[1825,1],[1853,1],[1889,1],[1913,1],[1963,1],[1989,1],[2085,1],[2116,1],[2149,1],[2183,1],[2216,1],[2251,1],[2272,1],[2303,1],[2369,1],[2385,1],[2412,1],[2431,1],[2449,1],[2464,1],[2486,1],[2522,1],[2558,1],[2579,1],[2601,1],[2625,1],[2654,1],[2676,1],[2701,1],[2723,1],[2812,1],[2840,1],[2863,1],[2881,1],[2905,1],[2927,1],[2951,1],[2974,1],[2995,1],[3017,1],[3042,1],[3063,1],[3084,1],[3112,1],[3146,1],[3174,1],[3229,1],[3263,1],[3290,1],[3318,1],[3344,1],[3375,1],[3404,1],[3438,1],[3474,1],[3504,1],[3538,1],[3606,1],[3668,1],[3700,1],[3743,1],[3774,1],[3801,1],[3844,1],[3881,1],[3914,1],[3943,1],[3984,1],[4021,1],[4054,1],[4124,1],[4148,1],[4169,1],[4196,1],[4238,1]]},"1747":{"position":[[153,1]]},"1837":{"position":[[37,1],[80,1]]},"1839":{"position":[[63,1]]},"1853":{"position":[[50,1]]},"1863":{"position":[[292,1]]},"1877":{"position":[[110,1]]},"1887":{"position":[[284,1]]},"2526":{"position":[[107,1]]},"2542":{"position":[[55,1],[280,1]]},"2544":{"position":[[75,1],[106,1]]},"2553":{"position":[[97,1],[134,1]]},"3015":{"position":[[60,1]]},"3031":{"position":[[97,1],[134,1]]},"3045":{"position":[[19,1]]},"3047":{"position":[[61,1],[93,1],[120,1],[153,1]]},"3622":{"position":[[134,1]]},"3624":{"position":[[47,1],[69,1],[98,1],[153,1],[167,1]]},"3708":{"position":[[144,1],[2323,1],[2623,1],[2738,1],[2954,1],[3893,1],[3909,1],[4096,1]]},"3914":{"position":[[3002,1]]},"3920":{"position":[[1822,1]]},"3944":{"position":[[23,1]]},"3954":{"position":[[535,1]]},"3956":{"position":[[59,1],[1671,1],[1971,1],[2086,1],[2298,1]]},"3960":{"position":[[78,1],[573,1]]},"3962":{"position":[[149,1]]},"3994":{"position":[[1020,1]]},"4000":{"position":[[1067,1]]},"4006":{"position":[[125,1]]}}}],["研发",{"_index":3909,"t":{"1050":{"position":[[28,2]]}}}],["破坏",{"_index":3055,"t":{"585":{"position":[[569,2]]},"1396":{"position":[[54,2]]},"3910":{"position":[[2203,2],[2258,2]]},"3934":{"position":[[839,2]]}}}],["破坏性",{"_index":9039,"t":{"3908":{"position":[[29,3]]},"3956":{"position":[[183,3]]},"3962":{"position":[[6,3]]}}}],["硬",{"_index":2608,"t":{"457":{"position":[[35,1]]},"1761":{"position":[[231,1]]},"2538":{"position":[[97,1]]},"3920":{"position":[[455,1]]}}}],["硬件",{"_index":8049,"t":{"3412":{"position":[[29,2]]}}}],["硬件资源",{"_index":7401,"t":{"3096":{"position":[[88,4]]}}}],["硬盘",{"_index":5377,"t":{"1741":{"position":[[80,2],[867,2],[1710,2],[2501,2]]},"1743":{"position":[[34,2]]}}}],["确保",{"_index":938,"t":{"123":{"position":[[17,2]]},"150":{"position":[[112,2]]},"419":{"position":[[350,2]]},"534":{"position":[[106,2]]},"1470":{"position":[[47,2]]},"1971":{"position":[[18,2]]},"1985":{"position":[[18,2]]},"2008":{"position":[[18,2]]},"2096":{"position":[[6,2]]},"2788":{"position":[[38,2]]},"2899":{"position":[[21,2]]},"2912":{"position":[[77,2]]},"3289":{"position":[[181,2]]},"3339":{"position":[[347,2]]},"3614":{"position":[[2,2],[52,2]]},"3972":{"position":[[227,2]]}}}],["确保您",{"_index":4539,"t":{"1509":{"position":[[142,3]]}}}],["确定",{"_index":1245,"t":{"179":{"position":[[94,2]]},"184":{"position":[[5,2],[45,2]]},"255":{"position":[[0,2],[179,2]]},"482":{"position":[[959,2]]},"677":{"position":[[47,2]]},"694":{"position":[[56,2]]},"704":{"position":[[47,2]]},"1901":{"position":[[18,2]]},"2418":{"position":[[1323,2]]},"3108":{"position":[[55,2]]}}}],["确实",{"_index":5429,"t":{"1761":{"position":[[117,2]]}}}],["确认",{"_index":2344,"t":{"380":{"position":[[21,2]]},"384":{"position":[[63,2],[71,2]]},"1801":{"position":[[1899,2]]},"3289":{"position":[[76,2]]},"3430":{"position":[[1500,2]]},"3908":{"position":[[80,2]]}}}],["碰",{"_index":7016,"t":{"2770":{"position":[[245,1]]}}}],["碰撞",{"_index":9383,"t":{"3926":{"position":[[135,2]]}}}],["磁盘",{"_index":6783,"t":{"2651":{"position":[[15,2]]},"3088":{"position":[[115,2]]}}}],["磁盘空间",{"_index":8075,"t":{"3416":{"position":[[396,4]]}}}],["磨",{"_index":9426,"t":{"3926":{"position":[[542,1]]}}}],["示例",{"_index":21,"t":{"3":{"position":[[81,2]]},"237":{"position":[[3,2]]},"284":{"position":[[79,2],[222,2]]},"606":{"position":[[503,2]]},"645":{"position":[[69,2],[101,2],[123,2],[161,2],[241,2],[284,2],[317,2]]},"647":{"position":[[21,2],[72,2],[131,2],[202,2]]},"649":{"position":[[21,2],[60,2],[118,2],[184,2],[234,2],[303,2]]},"651":{"position":[[21,2],[63,2],[124,2],[193,2],[246,2],[318,2]]},"661":{"position":[[21,2],[61,2],[109,2],[160,2]]},"663":{"position":[[21,2],[64,2],[115,2],[169,2]]},"665":{"position":[[21,2],[89,2],[151,2],[228,2],[298,2],[354,2],[404,2],[469,2],[545,2],[624,2],[697,2],[785,2],[866,2],[933,2],[994,2],[1070,2]]},"667":{"position":[[21,2],[92,2],[157,2],[237,2],[310,2],[369,2],[422,2],[490,2],[569,2],[651,2],[727,2],[818,2],[902,2],[972,2],[1036,2],[1115,2]]},"669":{"position":[[21,2],[89,2],[151,2],[228,2],[298,2],[354,2],[404,2],[469,2],[545,2],[624,2],[697,2],[785,2],[866,2],[933,2],[994,2],[1070,2]]},"671":{"position":[[21,2],[92,2],[157,2],[237,2],[310,2],[369,2],[422,2],[490,2],[569,2],[651,2],[727,2],[818,2],[902,2],[972,2],[1036,2],[1115,2]]},"779":{"position":[[21,2],[53,2],[75,2],[139,2],[198,2],[241,2]]},"781":{"position":[[21,2],[56,2],[99,2],[145,2]]},"783":{"position":[[21,2],[50,2],[91,2],[131,2]]},"785":{"position":[[21,2],[53,2],[97,2],[140,2]]},"787":{"position":[[21,2],[56,2],[103,2],[149,2]]},"789":{"position":[[21,2],[59,2],[109,2],[158,2]]},"795":{"position":[[21,2],[59,2],[100,2],[133,2],[169,2],[197,2],[272,2],[321,2],[373,2],[417,2],[464,2],[503,2]]},"818":{"position":[[120,2]]},"826":{"position":[[44,2]]},"853":{"position":[[3,2],[58,2],[135,2],[240,2],[388,2],[475,2]]},"855":{"position":[[3,2]]},"857":{"position":[[3,2]]},"866":{"position":[[3,2],[91,2],[285,2]]},"871":{"position":[[3,2],[68,2]]},"873":{"position":[[3,2],[78,2]]},"875":{"position":[[3,2]]},"881":{"position":[[3,2],[172,2],[263,2]]},"883":{"position":[[3,2],[209,2]]},"954":{"position":[[21,2],[61,2],[110,2],[177,2],[228,2],[288,2]]},"956":{"position":[[21,2],[85,2],[158,2],[221,2],[293,2],[355,2],[426,2],[499,2],[571,2],[652,2],[723,2],[822,2],[897,2],[981,2],[1055,2],[1138,2],[1211,2],[1293,2],[1377,2],[1460,2],[1552,2],[1634,2]]},"958":{"position":[[21,2],[63,2],[113,2],[160,2],[208,2]]},"960":{"position":[[3,2],[58,2],[140,2],[277,2],[519,2],[673,2],[865,2],[1083,2],[1206,2],[1515,2],[1625,2],[1698,2]]},"962":{"position":[[21,2],[90,2],[182,2],[262,2]]},"965":{"position":[[21,2],[61,2],[115,2],[164,2],[235,2],[315,2],[366,2],[431,2],[491,2],[573,2]]},"967":{"position":[[21,2],[60,2],[113,2],[175,2],[240,2],[319,2],[369,2],[433,2],[506,2],[582,2]]},"969":{"position":[[21,2],[59,2],[105,2],[152,2],[225,2],[312,2],[361,2],[418,2],[476,2],[560,2]]},"971":{"position":[[21,2],[59,2],[105,2],[152,2],[225,2],[312,2],[361,2],[418,2],[476,2],[560,2]]},"973":{"position":[[21,2],[76,2],[136,2],[217,2],[283,2],[354,2]]},"975":{"position":[[21,2],[80,2],[144,2],[229,2],[299,2],[374,2]]},"979":{"position":[[3,2],[62,2],[124,2]]},"1160":{"position":[[21,2],[79,2],[172,2],[317,2],[448,2],[582,2],[656,2],[739,2],[894,2],[963,2],[1067,2],[1223,2],[1365,2],[1510,2],[1595,2],[1689,2]]},"1162":{"position":[[21,2],[85,2],[184,2],[335,2],[472,2],[612,2],[692,2],[781,2],[942,2],[1017,2],[1127,2],[1289,2],[1437,2],[1588,2],[1679,2],[1779,2]]},"1164":{"position":[[21,2],[105,2],[257,2],[426,2],[521,2],[684,2]]},"1166":{"position":[[21,2],[133,2],[313,2],[549,2],[672,2],[863,2]]},"1168":{"position":[[21,2],[106,2],[199,2],[306,2],[402,2],[506,2]]},"1170":{"position":[[21,2],[133,2],[315,2],[420,2],[523,2],[646,2],[833,2],[949,2]]},"1173":{"position":[[21,2],[77,2],[145,2],[241,2],[308,2],[387,2]]},"1175":{"position":[[21,2],[83,2],[157,2],[259,2],[332,2],[417,2]]},"1177":{"position":[[21,2],[77,2],[145,2],[241,2],[308,2],[387,2]]},"1179":{"position":[[21,2],[85,2],[180,2],[299,2],[462,2],[537,2],[643,2],[773,2]]},"1181":{"position":[[21,2],[86,2],[192,2],[299,2],[375,2],[492,2]]},"1183":{"position":[[21,2],[87,2],[192,2],[274,2],[362,2],[439,2],[555,2],[648,2]]},"1185":{"position":[[711,2],[809,2],[907,2],[1085,2],[1194,2],[1303,2]]},"1188":{"position":[[21,2],[71,2],[133,2],[191,2],[276,2],[337,2],[410,2],[479,2]]},"1190":{"position":[[21,2],[74,2],[139,2],[198,2],[287,2],[351,2],[427,2],[497,2]]},"1194":{"position":[[58,2],[129,2],[231,2],[308,2]]},"1325":{"position":[[21,2],[53,2],[75,2],[140,2],[199,2],[242,2]]},"1327":{"position":[[21,2],[56,2],[99,2],[145,2]]},"1329":{"position":[[21,2],[83,2],[167,2],[265,2],[315,2],[387,2],[491,2],[564,2],[659,2],[768,2],[829,2],[912,2]]},"1331":{"position":[[21,2],[86,2],[173,2],[274,2],[327,2],[402,2],[506,2],[582,2],[680,2],[792,2],[856,2],[942,2]]},"1333":{"position":[[21,2],[83,2],[167,2],[265,2],[315,2],[387,2],[491,2],[564,2],[659,2],[768,2],[829,2],[912,2]]},"1335":{"position":[[21,2],[86,2],[173,2],[274,2],[327,2],[402,2],[509,2],[585,2],[683,2],[795,2],[859,2],[945,2]]},"1337":{"position":[[21,2],[77,2]]},"1339":{"position":[[21,2],[80,2]]},"1341":{"position":[[21,2],[89,2],[179,2],[301,2],[380,2],[481,2]]},"1343":{"position":[[21,2],[92,2],[185,2],[310,2],[392,2],[496,2]]},"1345":{"position":[[21,2],[89,2],[179,2],[301,2],[380,2],[481,2]]},"1347":{"position":[[21,2],[92,2],[185,2],[310,2],[392,2],[496,2]]},"1349":{"position":[[21,2],[60,2],[118,2],[184,2],[234,2],[303,2]]},"1351":{"position":[[21,2],[63,2],[124,2],[193,2],[246,2],[318,2]]},"1392":{"position":[[237,2]]},"1661":{"position":[[1218,2]]},"1737":{"position":[[36,2]]},"1869":{"position":[[339,2]]},"1885":{"position":[[251,2]]},"3023":{"position":[[1215,2]]},"3131":{"position":[[15,2],[64,2],[325,2]]},"3142":{"position":[[119,2],[159,2],[193,2]]},"3194":{"position":[[121,2]]},"3287":{"position":[[1288,2]]},"3291":{"position":[[0,2],[4,2],[8,2]]},"3399":{"position":[[105,2]]},"3664":{"position":[[257,2]]},"3686":{"position":[[611,2]]},"3706":{"position":[[1744,2]]},"3966":{"position":[[1232,2]]}}}],["社交",{"_index":4905,"t":{"1513":{"position":[[26,2]]},"3142":{"position":[[126,2],[219,2]]}}}],["社区",{"_index":2403,"t":{"399":{"position":[[684,2]]},"1509":{"position":[[164,2]]},"2768":{"position":[[1549,2]]},"3702":{"position":[[1456,2]]},"3928":{"position":[[41,2]]}}}],["神奇",{"_index":7546,"t":{"3154":{"position":[[720,2]]},"3373":{"position":[[644,2]]}}}],["神通",{"_index":7604,"t":{"3211":{"position":[[184,2]]}}}],["禁止",{"_index":3308,"t":{"675":{"position":[[171,2],[213,2]]},"1825":{"position":[[35,2]]},"2490":{"position":[[35,2]]},"2713":{"position":[[274,2]]},"3916":{"position":[[1791,2]]}}}],["禁用",{"_index":7366,"t":{"3073":{"position":[[23,2]]},"3416":{"position":[[116,2]]}}}],["离",{"_index":2696,"t":{"482":{"position":[[780,1]]},"587":{"position":[[710,1]]},"2418":{"position":[[1128,1]]}}}],["离不开",{"_index":5448,"t":{"1761":{"position":[[319,3]]}}}],["离不开手",{"_index":5428,"t":{"1761":{"position":[[82,4]]}}}],["离线",{"_index":2014,"t":{"306":{"position":[[145,2]]},"331":{"position":[[132,2],[212,2]]},"2910":{"position":[[391,2]]}}}],["私信",{"_index":4893,"t":{"1511":{"position":[[4107,2]]}}}],["私有",{"_index":3861,"t":{"988":{"position":[[340,2]]},"1775":{"position":[[3885,2]]}}}],["种",{"_index":1773,"t":{"239":{"position":[[295,1]]},"1026":{"position":[[162,1]]},"1194":{"position":[[434,1]]},"1511":{"position":[[2106,1]]},"1903":{"position":[[371,1]]}}}],["种子",{"_index":3688,"t":{"877":{"position":[[1156,2]]},"939":{"position":[[38,2]]},"949":{"position":[[630,2]]},"1139":{"position":[[10,2],[18,2]]},"1141":{"position":[[13,2]]},"1143":{"position":[[53,2]]},"1145":{"position":[[266,2]]},"1147":{"position":[[157,2]]},"1149":{"position":[[40,2]]},"1151":{"position":[[21,2],[235,2],[515,2]]},"1153":{"position":[[37,2],[58,2]]},"2929":{"position":[[801,2]]},"2945":{"position":[[913,2]]},"2959":{"position":[[856,2]]},"3966":{"position":[[1889,2]]},"3970":{"position":[[248,2]]},"3976":{"position":[[488,2]]},"3994":{"position":[[653,2]]}}}],["种种",{"_index":5068,"t":{"1578":{"position":[[40,2]]}}}],["种花",{"_index":4834,"t":{"1511":{"position":[[3136,2]]}}}],["科威特",{"_index":6445,"t":{"2559":{"position":[[153,3]]}}}],["科技",{"_index":1201,"t":{"168":{"position":[[37,2]]},"1511":{"position":[[3688,2]]}}}],["秒",{"_index":997,"t":{"127":{"position":[[1252,1],[1258,1]]},"476":{"position":[[5,1]]},"478":{"position":[[2,1],[6,1]]},"482":{"position":[[18,1]]},"484":{"position":[[18,1],[209,1],[218,1],[268,1],[279,1]]},"1192":{"position":[[73,1]]},"1281":{"position":[[104,1]]},"2418":{"position":[[198,1],[240,1]]},"2420":{"position":[[329,1],[1501,1],[1578,1],[1642,1],[1786,1]]},"2426":{"position":[[251,1]]},"2805":{"position":[[459,1]]},"3039":{"position":[[360,1],[367,1]]},"3041":{"position":[[463,1],[469,1]]},"3577":{"position":[[28,1]]},"3766":{"position":[[32,1],[49,1],[173,1],[288,1]]},"3768":{"position":[[576,1]]},"3804":{"position":[[187,1],[501,1]]},"3806":{"position":[[1795,1]]},"3808":{"position":[[165,1]]},"3914":{"position":[[2163,1]]},"3962":{"position":[[583,1]]}}}],["秒数",{"_index":2643,"t":{"476":{"position":[[2,2]]}}}],["秘",{"_index":5262,"t":{"1687":{"position":[[91,1],[94,1]]},"1689":{"position":[[703,1],[706,1]]}}}],["秘鲁",{"_index":6666,"t":{"2559":{"position":[[2341,2]]}}}],["租户",{"_index":2764,"t":{"504":{"position":[[182,2]]},"532":{"position":[[179,2]]},"933":{"position":[[430,2],[803,2],[915,2]]},"2912":{"position":[[1,2],[115,2],[138,2],[190,2]]},"2915":{"position":[[11,2],[56,2],[86,2],[212,2]]},"2917":{"position":[[14,2],[32,2],[116,2],[152,2],[191,2],[203,2]]},"2919":{"position":[[15,2],[60,2],[168,2]]},"2921":{"position":[[16,2],[48,2],[75,2],[88,2]]},"2925":{"position":[[440,2]]},"2929":{"position":[[490,2],[662,2]]},"2933":{"position":[[4,2],[543,2],[624,2]]},"2937":{"position":[[19,2],[1274,2],[1386,2]]},"2939":{"position":[[19,2]]},"2941":{"position":[[440,2]]},"2943":{"position":[[439,2]]},"2945":{"position":[[490,2],[719,2]]},"2949":{"position":[[4,2],[472,2]]},"2951":{"position":[[4,2]]},"2953":{"position":[[19,2]]},"2955":{"position":[[440,2]]},"2959":{"position":[[490,2],[688,2]]},"2963":{"position":[[4,2],[491,2]]},"2965":{"position":[[31,2],[112,2],[188,2]]},"2967":{"position":[[47,2],[60,2]]},"2969":{"position":[[84,2],[100,2]]},"2971":{"position":[[271,2]]},"2973":{"position":[[11,2],[24,2],[47,2],[58,2],[114,2]]},"3224":{"position":[[1777,2]]},"3936":{"position":[[562,2]]},"3952":{"position":[[716,2]]},"3958":{"position":[[244,2]]},"3962":{"position":[[1880,2],[1889,2]]},"3966":{"position":[[1411,2]]},"3974":{"position":[[726,2]]},"3978":{"position":[[743,2]]},"3980":{"position":[[587,2]]},"3982":{"position":[[634,2]]},"3986":{"position":[[82,2],[1106,2],[1516,2]]},"3992":{"position":[[3062,2]]},"3996":{"position":[[534,2]]},"3998":{"position":[[688,2]]},"4006":{"position":[[393,2],[764,2]]}}}],["租用",{"_index":7208,"t":{"2910":{"position":[[316,2]]},"2915":{"position":[[226,2]]}}}],["租赁",{"_index":7218,"t":{"2912":{"position":[[9,2]]}}}],["积压",{"_index":8843,"t":{"3800":{"position":[[83,2]]}}}],["积木",{"_index":6750,"t":{"2615":{"position":[[35,2],[50,2],[67,2],[70,2]]}}}],["积极",{"_index":4541,"t":{"1509":{"position":[[159,2]]}}}],["称",{"_index":7216,"t":{"2912":{"position":[[6,1]]}}}],["称为",{"_index":690,"t":{"110":{"position":[[49,2]]},"179":{"position":[[62,2]]},"565":{"position":[[49,2]]},"1761":{"position":[[591,2]]}}}],["移",{"_index":2303,"t":{"363":{"position":[[83,1]]},"445":{"position":[[25,1]]},"2335":{"position":[[20,1]]},"2629":{"position":[[25,1]]},"3522":{"position":[[36,1]]},"3563":{"position":[[36,1]]}}}],["移动",{"_index":1497,"t":{"199":{"position":[[613,2]]},"338":{"position":[[1210,2]]},"1576":{"position":[[329,2]]},"1578":{"position":[[99,2]]},"3608":{"position":[[3,2]]},"3924":{"position":[[2167,2]]}}}],["移除",{"_index":1884,"t":{"261":{"position":[[108,2]]},"338":{"position":[[1247,2]]},"659":{"position":[[2,2],[32,2],[78,2]]},"777":{"position":[[2,2],[45,2]]},"791":{"position":[[2,2],[31,2]]},"885":{"position":[[2,2],[31,2]]},"1010":{"position":[[2,2],[31,2],[77,2]]},"1302":{"position":[[2,2],[31,2]]},"1323":{"position":[[2,2],[45,2]]},"1394":{"position":[[21,2]]},"1468":{"position":[[101,2]]},"1674":{"position":[[60,2]]},"1685":{"position":[[18,2]]},"1689":{"position":[[523,2]]},"1919":{"position":[[547,2]]},"2077":{"position":[[31,2]]},"2186":{"position":[[0,2],[23,2]]},"2188":{"position":[[0,2],[23,2]]},"2335":{"position":[[84,2]]},"2391":{"position":[[104,2]]},"3488":{"position":[[23,2]]},"3908":{"position":[[48,2]]},"3910":{"position":[[2166,2],[2221,2]]},"3914":{"position":[[1316,2],[1367,2],[2070,2]]},"3916":{"position":[[1474,2],[1517,2]]},"3918":{"position":[[1475,2]]},"3920":{"position":[[1177,2]]},"3922":{"position":[[28,2]]},"3924":{"position":[[643,2],[746,2]]},"3928":{"position":[[579,2]]},"3942":{"position":[[135,2]]},"3946":{"position":[[401,2]]},"3948":{"position":[[539,2]]},"3952":{"position":[[155,2]]},"3954":{"position":[[355,2],[461,2]]},"3960":{"position":[[192,2],[229,2]]},"3962":{"position":[[500,2],[534,2],[537,2],[1647,2]]},"3966":{"position":[[454,2]]},"3968":{"position":[[147,2],[184,2]]},"3976":{"position":[[334,2]]},"3978":{"position":[[604,2],[651,2]]},"3986":{"position":[[340,2],[343,2],[372,2]]},"3990":{"position":[[326,2]]},"3992":{"position":[[1248,2],[2502,2]]},"3994":{"position":[[708,2],[741,2]]},"3996":{"position":[[1365,2]]},"4000":{"position":[[714,2],[744,2]]},"4004":{"position":[[223,2],[278,2],[559,2]]}}}],["程",{"_index":5313,"t":{"1699":{"position":[[109,1]]},"2311":{"position":[[64,1]]},"2404":{"position":[[49,1]]},"2805":{"position":[[22,1]]},"3942":{"position":[[469,1]]}}}],["程序",{"_index":1344,"t":{"190":{"position":[[5,2]]},"212":{"position":[[24,2]]},"300":{"position":[[127,2],[201,2]]},"359":{"position":[[284,2],[305,2]]},"461":{"position":[[40,2],[50,2]]},"500":{"position":[[26,2]]},"585":{"position":[[396,2]]},"698":{"position":[[445,2]]},"706":{"position":[[21,2],[60,2],[97,2]]},"730":{"position":[[45,2]]},"981":{"position":[[25,2]]},"1141":{"position":[[24,2]]},"1286":{"position":[[4,2],[24,2],[30,2]]},"1289":{"position":[[33,2]]},"1309":{"position":[[103,2]]},"1319":{"position":[[21,2],[60,2],[97,2]]},"1385":{"position":[[124,2]]},"1420":{"position":[[570,2],[884,2],[925,2],[941,2],[954,2],[1004,2]]},"1422":{"position":[[20,2]]},"1440":{"position":[[97,2],[169,2],[198,2],[261,2],[562,2]]},"1705":{"position":[[17,2]]},"1719":{"position":[[84,2]]},"1735":{"position":[[21,2],[205,2]]},"1832":{"position":[[33,2]]},"1837":{"position":[[124,2]]},"1901":{"position":[[417,2]]},"1931":{"position":[[22,2]]},"2269":{"position":[[13,2]]},"2542":{"position":[[253,2]]},"2623":{"position":[[65,2],[272,2]]},"2627":{"position":[[164,2]]},"2690":{"position":[[357,2]]},"2749":{"position":[[846,2]]},"2794":{"position":[[25,2]]},"2803":{"position":[[85,2]]},"2836":{"position":[[1298,2]]},"2912":{"position":[[69,2],[163,2],[200,2]]},"2951":{"position":[[644,2]]},"2981":{"position":[[203,2],[249,2],[305,2]]},"3001":{"position":[[131,2],[406,2]]},"3063":{"position":[[378,2]]},"3069":{"position":[[208,2]]},"3071":{"position":[[411,2],[579,2],[651,2],[819,2],[1128,2]]},"3078":{"position":[[41,2]]},"3350":{"position":[[194,2]]},"3371":{"position":[[165,2]]},"3389":{"position":[[571,2]]},"3412":{"position":[[12,2],[119,2]]},"3414":{"position":[[110,2],[127,2]]},"3426":{"position":[[119,2]]},"3636":{"position":[[64,2]]},"3698":{"position":[[39,2]]},"3706":{"position":[[370,2]]},"3716":{"position":[[112,2]]},"3742":{"position":[[9,2]]},"3744":{"position":[[17,2],[268,2]]},"3777":{"position":[[177,2],[185,2]]},"3779":{"position":[[348,2]]},"3798":{"position":[[183,2],[191,2]]},"3802":{"position":[[384,2]]},"3914":{"position":[[3306,2]]},"3920":{"position":[[203,2],[1009,2]]},"3922":{"position":[[25,2],[32,2]]},"3924":{"position":[[2913,2]]},"3934":{"position":[[198,2],[835,2],[842,2]]},"3938":{"position":[[452,2]]},"3950":{"position":[[705,2],[889,2]]},"3956":{"position":[[131,2]]},"3960":{"position":[[480,2]]},"3962":{"position":[[1111,2]]},"3966":{"position":[[883,2]]},"3974":{"position":[[703,2]]},"3978":{"position":[[289,2],[1147,2]]},"3984":{"position":[[530,2]]},"3986":{"position":[[479,2]]},"3992":{"position":[[3559,2]]},"3998":{"position":[[550,2]]}}}],["程序代码",{"_index":10432,"t":{"3998":{"position":[[414,4]]}}}],["程序包",{"_index":3326,"t":{"683":{"position":[[2,3]]},"711":{"position":[[2,3]]},"3369":{"position":[[68,3]]}}}],["程序员",{"_index":1970,"t":{"300":{"position":[[96,3],[117,3],[143,3],[273,3]]},"302":{"position":[[111,3]]},"1387":{"position":[[29,3]]},"1761":{"position":[[194,3],[333,3]]},"3626":{"position":[[127,3]]},"3787":{"position":[[24,3]]}}}],["程序开发",{"_index":10,"t":{"3":{"position":[[30,4]]},"1832":{"position":[[96,4]]}}}],["程序执行",{"_index":4104,"t":{"1286":{"position":[[79,4]]},"1819":{"position":[[938,4]]},"1834":{"position":[[8,4]]}}}],["程序模块",{"_index":6759,"t":{"2619":{"position":[[2,4]]}}}],["程序运行",{"_index":4105,"t":{"1289":{"position":[[14,4]]},"1385":{"position":[[9,4]]},"3412":{"position":[[125,4]]},"3834":{"position":[[9,4]]}}}],["程度",{"_index":4223,"t":{"1389":{"position":[[221,2]]},"2917":{"position":[[123,2]]},"2919":{"position":[[72,2]]},"3096":{"position":[[70,2]]}}}],["稍微",{"_index":3635,"t":{"846":{"position":[[34,2]]}}}],["稍有不慎",{"_index":2196,"t":{"338":{"position":[[1206,4]]}}}],["稳定",{"_index":9355,"t":{"3924":{"position":[[2593,2]]}}}],["稳定性",{"_index":3019,"t":{"581":{"position":[[46,3]]},"2343":{"position":[[216,3]]},"3104":{"position":[[27,3]]}}}],["空",{"_index":1578,"t":{"216":{"position":[[36,1],[99,1]]},"270":{"position":[[7,1]]},"397":{"position":[[33,1]]},"570":{"position":[[1651,1]]},"585":{"position":[[137,1]]},"608":{"position":[[889,1]]},"698":{"position":[[143,1]]},"960":{"position":[[304,1]]},"1511":{"position":[[2572,1]]},"1580":{"position":[[230,1]]},"1633":{"position":[[63,1],[196,1]]},"1641":{"position":[[433,1]]},"1801":{"position":[[2312,1]]},"1887":{"position":[[460,1]]},"2283":{"position":[[78,1]]},"2536":{"position":[[134,1]]},"2553":{"position":[[139,1]]},"2725":{"position":[[351,1],[1355,1],[1972,1]]},"2727":{"position":[[392,1]]},"3031":{"position":[[139,1]]},"3055":{"position":[[99,1]]},"3057":{"position":[[72,1]]},"3063":{"position":[[263,1],[1060,1]]},"3399":{"position":[[918,1]]},"3434":{"position":[[675,1]]},"3706":{"position":[[255,1],[1052,1]]},"3910":{"position":[[2428,1]]},"3912":{"position":[[1607,1]]},"3916":{"position":[[2401,1],[2448,1]]},"3918":{"position":[[3460,1]]},"3920":{"position":[[1691,1]]},"3922":{"position":[[2190,1]]},"3928":{"position":[[669,1]]},"3932":{"position":[[1254,1]]},"3936":{"position":[[681,1]]},"3940":{"position":[[390,1],[417,1],[422,1],[507,1]]},"3942":{"position":[[388,1]]},"3948":{"position":[[365,1]]},"3950":{"position":[[348,1]]},"3958":{"position":[[246,1]]},"3960":{"position":[[527,1]]},"3962":{"position":[[1942,1]]},"3964":{"position":[[729,1]]},"3970":{"position":[[261,1]]},"3974":{"position":[[174,1],[323,1],[458,1],[494,1]]},"3980":{"position":[[795,1]]},"3982":{"position":[[896,1]]},"3992":{"position":[[1501,1],[2111,1],[2218,1]]},"3994":{"position":[[362,1],[1060,1],[1519,1]]},"3996":{"position":[[1764,1]]},"3998":{"position":[[228,1],[306,1],[572,1],[625,1]]},"4000":{"position":[[937,1],[962,1]]},"4002":{"position":[[362,1]]},"4004":{"position":[[399,1]]},"4006":{"position":[[376,1]]}}}],["空值",{"_index":2851,"t":{"532":{"position":[[38,2]]},"608":{"position":[[847,2]]},"1329":{"position":[[259,2],[467,2],[762,2],[1003,2]]},"1331":{"position":[[268,2],[482,2],[786,2],[1036,2]]},"1333":{"position":[[259,2],[467,2],[762,2],[1003,2]]},"1335":{"position":[[268,2],[485,2],[789,2],[1039,2]]},"1341":{"position":[[277,2],[590,2]]},"1343":{"position":[[286,2],[608,2]]},"1345":{"position":[[277,2],[590,2]]},"1347":{"position":[[286,2],[608,2]]},"1611":{"position":[[922,2]]},"3541":{"position":[[561,2]]},"3974":{"position":[[179,2]]},"3978":{"position":[[1580,2]]},"3992":{"position":[[1494,2]]},"3994":{"position":[[411,2],[1517,2]]},"4000":{"position":[[492,2]]},"4006":{"position":[[455,2]]}}}],["空基",{"_index":5133,"t":{"1611":{"position":[[915,2]]}}}],["空格",{"_index":2628,"t":{"469":{"position":[[27,2]]},"1520":{"position":[[372,2]]},"2418":{"position":[[27,2],[192,2]]},"2747":{"position":[[230,2]]},"2836":{"position":[[960,2]]},"3080":{"position":[[446,2]]}}}],["空类",{"_index":1551,"t":{"208":{"position":[[17,2]]},"218":{"position":[[62,2]]},"3956":{"position":[[3171,2]]}}}],["空行",{"_index":5008,"t":{"1555":{"position":[[5,2]]}}}],["空闲",{"_index":6120,"t":{"2311":{"position":[[429,2]]}}}],["空间",{"_index":138,"t":{"11":{"position":[[63,2],[666,2],[931,2]]},"119":{"position":[[124,2],[159,2]]},"150":{"position":[[92,2]]},"698":{"position":[[1097,2]]},"2033":{"position":[[120,2]]},"2055":{"position":[[330,2]]},"2294":{"position":[[63,2],[695,2],[979,2]]},"2361":{"position":[[452,2]]},"2363":{"position":[[270,2]]},"2365":{"position":[[163,2]]},"2367":{"position":[[169,2]]},"2369":{"position":[[189,2]]},"2371":{"position":[[196,2]]},"2373":{"position":[[177,2]]},"2709":{"position":[[355,2]]},"3118":{"position":[[207,2]]},"3468":{"position":[[91,2],[303,2]]},"3483":{"position":[[1314,2]]},"3742":{"position":[[17,2]]},"3912":{"position":[[1601,2]]},"3922":{"position":[[717,2]]},"3930":{"position":[[613,2]]},"3992":{"position":[[147,2],[1037,2]]},"3994":{"position":[[1466,2]]},"4002":{"position":[[218,2]]}}}],["穿越",{"_index":1203,"t":{"168":{"position":[[44,2]]}}}],["突出",{"_index":1323,"t":{"186":{"position":[[149,2]]}}}],["突破",{"_index":2389,"t":{"399":{"position":[[137,2],[288,2],[389,2],[727,2]]},"401":{"position":[[130,2],[292,2],[420,2]]},"3209":{"position":[[46,2]]},"3250":{"position":[[46,2]]}}}],["突破性",{"_index":9053,"t":{"3910":{"position":[[2066,3]]},"3912":{"position":[[1286,3]]},"3914":{"position":[[1192,3]]},"3916":{"position":[[1383,3]]},"3918":{"position":[[1282,3]]},"3920":{"position":[[993,3]]},"3922":{"position":[[410,3]]},"3924":{"position":[[581,3]]},"3928":{"position":[[463,3]]},"3930":{"position":[[491,3]]},"3932":{"position":[[527,3]]},"3934":{"position":[[405,3]]},"3936":{"position":[[431,3]]},"3938":{"position":[[337,3]]},"3940":{"position":[[275,3]]},"3942":{"position":[[102,3]]},"3944":{"position":[[138,3]]},"3946":{"position":[[78,3]]},"3948":{"position":[[101,3]]},"3952":{"position":[[149,3]]},"3954":{"position":[[300,3]]},"3956":{"position":[[143,3]]},"3960":{"position":[[158,3]]},"3962":{"position":[[494,3]]},"3964":{"position":[[254,3]]},"3966":{"position":[[409,3]]},"3968":{"position":[[141,3]]},"3970":{"position":[[96,3]]},"3972":{"position":[[246,3]]},"3974":{"position":[[235,3]]},"3976":{"position":[[248,3]]},"3978":{"position":[[398,3]]},"3980":{"position":[[181,3]]},"3982":{"position":[[205,3]]},"3984":{"position":[[288,3]]},"3986":{"position":[[155,3]]},"3988":{"position":[[247,3]]},"3990":{"position":[[233,3]]},"3992":{"position":[[980,3]]},"3994":{"position":[[457,3]]},"3996":{"position":[[349,3]]},"3998":{"position":[[419,3]]},"4000":{"position":[[505,3]]},"4002":{"position":[[168,3]]},"4004":{"position":[[156,3]]},"4006":{"position":[[173,3]]}}}],["窗体",{"_index":9050,"t":{"3910":{"position":[[1092,2]]}}}],["窗口",{"_index":7943,"t":{"3350":{"position":[[124,2]]}}}],["立即",{"_index":3260,"t":{"651":{"position":[[394,2],[406,2]]},"692":{"position":[[33,2]]},"694":{"position":[[3,2]]},"789":{"position":[[215,2],[227,2]]},"1351":{"position":[[394,2],[406,2]]},"1837":{"position":[[126,2]]},"1901":{"position":[[378,2]]},"2402":{"position":[[13,2],[47,2]]},"2442":{"position":[[258,2],[483,2]]},"2444":{"position":[[181,2]]},"2852":{"position":[[49,2]]},"3142":{"position":[[74,2]]},"3416":{"position":[[380,2]]},"3798":{"position":[[632,2]]},"3808":{"position":[[3207,2]]},"3810":{"position":[[976,2]]}}}],["立陶宛",{"_index":6602,"t":{"2559":{"position":[[1658,3],[1668,3],[1673,3]]}}}],["站点",{"_index":7932,"t":{"3337":{"position":[[5,2],[46,2],[50,2]]}}}],["竞",{"_index":6156,"t":{"2326":{"position":[[260,1]]}}}],["章节",{"_index":696,"t":{"110":{"position":[[115,2]]},"154":{"position":[[67,2]]},"204":{"position":[[520,2]]},"237":{"position":[[1402,2]]},"249":{"position":[[103,2]]},"257":{"position":[[68,2]]},"425":{"position":[[68,2]]},"465":{"position":[[62,2]]},"488":{"position":[[21,2]]},"502":{"position":[[167,2]]},"510":{"position":[[551,2]]},"536":{"position":[[71,2]]},"574":{"position":[[34,2]]},"593":{"position":[[64,2]]},"631":{"position":[[18,2]]},"677":{"position":[[230,2]]},"704":{"position":[[230,2]]},"736":{"position":[[64,2]]},"799":{"position":[[28,2]]},"1101":{"position":[[28,2]]},"1153":{"position":[[63,2]]},"1155":{"position":[[28,2],[65,2]]},"1309":{"position":[[6,2]]},"1311":{"position":[[542,2]]},"1317":{"position":[[564,2]]},"1389":{"position":[[236,2]]},"1403":{"position":[[113,2]]},"1578":{"position":[[4,2]]},"1761":{"position":[[531,2]]},"1781":{"position":[[505,2]]},"1841":{"position":[[94,2]]},"1879":{"position":[[18,2]]},"1969":{"position":[[153,2]]},"1983":{"position":[[65,2]]},"2006":{"position":[[65,2]]},"2077":{"position":[[51,2]]},"2333":{"position":[[24,2]]},"2391":{"position":[[222,2]]},"2490":{"position":[[128,2]]},"2561":{"position":[[68,2]]},"2564":{"position":[[182,2]]},"2703":{"position":[[129,2]]},"2737":{"position":[[62,2]]},"2772":{"position":[[65,2]]},"2823":{"position":[[21,2]]},"2827":{"position":[[40,2]]},"2860":{"position":[[98,2]]},"3126":{"position":[[593,2]]},"3152":{"position":[[2,2]]},"3205":{"position":[[85,2]]},"3248":{"position":[[78,2]]},"3298":{"position":[[59,2]]},"3333":{"position":[[60,2]]},"3356":{"position":[[31,2]]},"3403":{"position":[[42,2]]},"3409":{"position":[[57,2]]},"3472":{"position":[[62,2]]},"3476":{"position":[[96,2]]},"3506":{"position":[[677,2]]},"3547":{"position":[[847,2]]},"3605":{"position":[[75,2]]}}}],["端",{"_index":1134,"t":{"152":{"position":[[43,1],[643,1]]},"300":{"position":[[81,1],[95,1],[106,1],[116,1],[126,1],[156,1],[207,1],[257,1]]},"302":{"position":[[15,1]]},"312":{"position":[[25,1]]},"314":{"position":[[71,1]]},"316":{"position":[[73,1]]},"323":{"position":[[3,1]]},"325":{"position":[[81,1]]},"1511":{"position":[[39,1]]},"1839":{"position":[[12,1]]},"2247":{"position":[[3,1]]},"2264":{"position":[[114,1]]},"3104":{"position":[[38,1]]},"3194":{"position":[[629,1],[635,1]]},"3608":{"position":[[44,1],[77,1],[92,1]]},"3612":{"position":[[7,1]]},"3626":{"position":[[10,1],[36,1],[53,1],[93,1],[98,1],[102,1],[458,1]]},"3912":{"position":[[1088,1]]},"3940":{"position":[[254,1]]},"3960":{"position":[[570,1]]}}}],["端口",{"_index":2427,"t":{"404":{"position":[[22,2]]},"419":{"position":[[457,2]]},"1488":{"position":[[498,2],[1345,2]]},"1495":{"position":[[497,2]]},"2745":{"position":[[70,2],[77,2]]},"2747":{"position":[[80,2],[87,2]]},"2749":{"position":[[830,2],[850,2]]},"2875":{"position":[[16,2],[30,2],[430,2],[467,2],[507,2]]},"3078":{"position":[[169,2]]},"3080":{"position":[[296,2],[303,2],[559,2]]},"3401":{"position":[[23,2]]},"3696":{"position":[[85,2]]}}}],["端口号",{"_index":2440,"t":{"404":{"position":[[274,3]]},"406":{"position":[[94,3],[373,3]]}}}],["端的",{"_index":873,"t":{"121":{"position":[[131,2],[146,2]]},"1377":{"position":[[388,2]]},"2341":{"position":[[206,2]]}}}],["符",{"_index":4921,"t":{"1520":{"position":[[116,1]]},"1617":{"position":[[1183,1],[1190,1]]},"1647":{"position":[[43,1],[55,1]]},"1857":{"position":[[126,1]]},"1875":{"position":[[650,1]]},"2424":{"position":[[36,1],[50,1],[60,1]]},"2723":{"position":[[83,1]]},"3966":{"position":[[930,1]]}}}],["符号",{"_index":2665,"t":{"482":{"position":[[11,2]]},"1155":{"position":[[101,2]]},"1234":{"position":[[866,2]]},"1635":{"position":[[183,2],[189,2]]},"2649":{"position":[[75,2],[92,2]]}}}],["符合",{"_index":478,"t":{"85":{"position":[[110,2],[264,2]]},"801":{"position":[[30,2]]},"2393":{"position":[[18,2]]},"2402":{"position":[[20,2]]},"2438":{"position":[[47,2],[97,2]]},"2440":{"position":[[47,2],[131,2],[421,2],[504,2]]},"2782":{"position":[[213,2]]},"3760":{"position":[[29,2]]}}}],["符合条件",{"_index":6336,"t":{"2438":{"position":[[290,4]]},"2440":{"position":[[324,4]]}}}],["第",{"_index":2552,"t":{"441":{"position":[[282,1]]},"482":{"position":[[675,1],[680,1]]},"2420":{"position":[[917,1],[2028,1]]},"3766":{"position":[[42,1],[280,1]]}}}],["第一",{"_index":385,"t":{"44":{"position":[[53,2]]},"57":{"position":[[53,2]]},"68":{"position":[[53,2]]},"3207":{"position":[[88,2]]},"3912":{"position":[[59,2]]}}}],["第一个",{"_index":469,"t":{"85":{"position":[[57,3]]},"210":{"position":[[45,3],[125,3]]},"399":{"position":[[899,3]]},"524":{"position":[[586,3]]},"1416":{"position":[[235,3],[269,3]]},"1511":{"position":[[908,3]]},"1535":{"position":[[198,3]]},"1551":{"position":[[359,3]]},"1592":{"position":[[89,3]]},"1631":{"position":[[47,3],[642,3]]},"1869":{"position":[[260,3]]},"2420":{"position":[[2232,3]]},"2875":{"position":[[44,3]]},"3110":{"position":[[45,3]]},"3254":{"position":[[610,3],[985,3],[1212,3]]},"3371":{"position":[[129,3]]},"3389":{"position":[[535,3]]},"3405":{"position":[[22,3]]},"3432":{"position":[[245,3]]},"3434":{"position":[[669,3]]},"3702":{"position":[[662,3]]},"3793":{"position":[[42,3]]},"3924":{"position":[[2877,3]]},"3962":{"position":[[1159,3]]}}}],["第一名",{"_index":2396,"t":{"399":{"position":[[492,3]]}}}],["第一天",{"_index":6333,"t":{"2424":{"position":[[279,3]]}}}],["第一条",{"_index":7651,"t":{"3224":{"position":[[420,3]]},"3273":{"position":[[671,3]]}}}],["第一杯",{"_index":4719,"t":{"1511":{"position":[[1725,3]]}}}],["第一次",{"_index":4185,"t":{"1383":{"position":[[11,3]]},"2508":{"position":[[19,3]]},"2973":{"position":[[16,3]]},"3118":{"position":[[314,3]]},"3996":{"position":[[471,3]]}}}],["第一步",{"_index":2859,"t":{"534":{"position":[[0,3]]},"2836":{"position":[[74,3],[1302,3]]},"3126":{"position":[[264,3]]}}}],["第一种",{"_index":4261,"t":{"1412":{"position":[[1218,3]]},"2915":{"position":[[2,3]]},"3770":{"position":[[19,3]]}}}],["第一行",{"_index":2354,"t":{"388":{"position":[[7,3]]},"397":{"position":[[63,3]]},"2891":{"position":[[18,3]]},"3680":{"position":[[232,3]]}}}],["第一道",{"_index":3013,"t":{"579":{"position":[[60,3]]}}}],["第一项",{"_index":6394,"t":{"2522":{"position":[[175,3]]},"2553":{"position":[[162,3]]},"3031":{"position":[[162,3]]},"3033":{"position":[[145,3]]}}}],["第三个",{"_index":2820,"t":{"524":{"position":[[786,3]]},"2420":{"position":[[1296,3],[2180,3]]}}}],["第三层",{"_index":2550,"t":{"441":{"position":[[270,3]]}}}],["第三方",{"_index":563,"t":{"95":{"position":[[41,3]]},"98":{"position":[[31,3]]},"121":{"position":[[555,3],[594,3],[627,3]]},"135":{"position":[[31,3],[394,3],[463,3],[476,3]]},"206":{"position":[[174,3]]},"239":{"position":[[250,3]]},"263":{"position":[[57,3]]},"270":{"position":[[109,3]]},"340":{"position":[[1011,3]]},"417":{"position":[[23,3]]},"583":{"position":[[96,3]]},"633":{"position":[[68,3]]},"756":{"position":[[54,3]]},"879":{"position":[[31,3]]},"2627":{"position":[[129,3]]},"2680":{"position":[[83,3]]},"3287":{"position":[[381,3]]},"3418":{"position":[[41,3]]},"3432":{"position":[[3436,3],[3924,3]]},"3470":{"position":[[15,3]]},"3476":{"position":[[23,3],[34,3],[77,3]]},"3506":{"position":[[50,3]]},"3547":{"position":[[50,3]]},"3608":{"position":[[133,3]]},"3654":{"position":[[24,3]]},"3704":{"position":[[15,3]]},"3918":{"position":[[3867,3],[4072,3],[4091,3]]},"3922":{"position":[[2035,3],[2278,3]]},"3924":{"position":[[1465,3],[1959,3],[2690,3],[3535,3]]},"3928":{"position":[[226,3],[350,3],[416,3],[500,3]]},"3932":{"position":[[362,3],[707,3]]},"3934":{"position":[[2528,3],[2992,3],[3057,3]]},"3962":{"position":[[1036,3]]}}}],["第三次",{"_index":6359,"t":{"2472":{"position":[[197,3]]}}}],["第三步",{"_index":2862,"t":{"534":{"position":[[163,3]]},"2836":{"position":[[645,3]]}}}],["第三种",{"_index":7249,"t":{"2919":{"position":[[8,3],[142,3]]},"3770":{"position":[[2678,3]]}}}],["第二个",{"_index":1105,"t":{"144":{"position":[[344,3]]},"210":{"position":[[155,3]]},"482":{"position":[[995,3]]},"510":{"position":[[507,3]]},"524":{"position":[[505,3],[687,3]]},"947":{"position":[[510,3]]},"1631":{"position":[[654,3],[668,3]]},"1869":{"position":[[284,3]]},"2361":{"position":[[312,3],[416,3]]},"2418":{"position":[[1367,3]]},"3110":{"position":[[63,3]]},"3371":{"position":[[155,3]]},"3389":{"position":[[561,3]]},"3405":{"position":[[33,3]]},"3718":{"position":[[34,3],[99,3]]},"3924":{"position":[[2903,3]]}}}],["第二层",{"_index":2549,"t":{"441":{"position":[[264,3]]}}}],["第二次",{"_index":7443,"t":{"3118":{"position":[[344,3]]},"3740":{"position":[[93,3]]}}}],["第二步",{"_index":2861,"t":{"534":{"position":[[76,3]]},"2836":{"position":[[130,3],[1350,3]]},"3126":{"position":[[322,3]]}}}],["第二种",{"_index":4265,"t":{"1412":{"position":[[1397,3]]},"2917":{"position":[[2,3]]},"3770":{"position":[[1224,3]]}}}],["第五步",{"_index":7098,"t":{"2836":{"position":[[1014,3]]}}}],["第几个",{"_index":2713,"t":{"482":{"position":[[964,3]]},"2418":{"position":[[1328,3]]}}}],["第四层",{"_index":2551,"t":{"441":{"position":[[276,3]]}}}],["第四步",{"_index":7095,"t":{"2836":{"position":[[820,3]]}}}],["第四种",{"_index":8761,"t":{"3770":{"position":[[4531,3]]}}}],["等",{"_index":18,"t":{"3":{"position":[[71,1]]},"112":{"position":[[65,1]]},"176":{"position":[[27,1]]},"182":{"position":[[159,1]]},"233":{"position":[[27,1]]},"340":{"position":[[1263,1]]},"369":{"position":[[291,1]]},"386":{"position":[[90,1]]},"482":{"position":[[633,1]]},"502":{"position":[[67,1]]},"504":{"position":[[278,1]]},"528":{"position":[[96,1]]},"570":{"position":[[2088,1]]},"587":{"position":[[2266,1]]},"591":{"position":[[96,1]]},"741":{"position":[[44,1]]},"773":{"position":[[55,1]]},"924":{"position":[[57,1]]},"939":{"position":[[49,1]]},"941":{"position":[[210,1]]},"943":{"position":[[62,1]]},"947":{"position":[[990,1]]},"1149":{"position":[[16,1]]},"1214":{"position":[[119,1]]},"1368":{"position":[[770,1]]},"1383":{"position":[[235,1],[249,1]]},"1385":{"position":[[141,1]]},"1470":{"position":[[42,1]]},"1576":{"position":[[223,1]]},"1580":{"position":[[438,1]]},"1589":{"position":[[203,1],[244,1]]},"1617":{"position":[[1211,1]]},"1761":{"position":[[480,1]]},"1773":{"position":[[315,1]]},"1775":{"position":[[41,1]]},"1799":{"position":[[89,1]]},"1901":{"position":[[228,1]]},"2175":{"position":[[53,1]]},"2239":{"position":[[166,1]]},"2251":{"position":[[156,1]]},"2261":{"position":[[443,1]]},"2326":{"position":[[185,1]]},"2418":{"position":[[940,1]]},"2436":{"position":[[24,1]]},"2619":{"position":[[50,1],[97,1]]},"2701":{"position":[[70,1]]},"2703":{"position":[[63,1]]},"2727":{"position":[[33,1]]},"2770":{"position":[[145,1]]},"2782":{"position":[[119,1]]},"2843":{"position":[[121,1]]},"2915":{"position":[[199,1]]},"2917":{"position":[[81,1]]},"3045":{"position":[[20,1]]},"3078":{"position":[[162,1]]},"3088":{"position":[[124,1]]},"3096":{"position":[[55,1]]},"3120":{"position":[[35,1]]},"3131":{"position":[[293,1]]},"3136":{"position":[[286,1]]},"3138":{"position":[[48,1],[62,1],[78,1],[94,1],[119,1]]},"3142":{"position":[[322,1]]},"3158":{"position":[[31,1]]},"3209":{"position":[[125,1]]},"3211":{"position":[[100,1]]},"3287":{"position":[[380,1]]},"3323":{"position":[[408,1]]},"3350":{"position":[[131,1]]},"3385":{"position":[[40,1]]},"3412":{"position":[[175,1]]},"3414":{"position":[[193,1],[301,1]]},"3430":{"position":[[1889,1]]},"3464":{"position":[[491,1]]},"3508":{"position":[[181,1]]},"3618":{"position":[[67,1]]},"3620":{"position":[[84,1],[215,1]]},"3622":{"position":[[21,1],[100,1],[135,1],[174,1]]},"3654":{"position":[[58,1]]},"3729":{"position":[[90,1]]},"3772":{"position":[[26,1]]},"3834":{"position":[[26,1]]},"3916":{"position":[[2243,1]]},"3924":{"position":[[148,1]]},"3928":{"position":[[67,1]]},"3930":{"position":[[379,1]]},"3938":{"position":[[387,1],[601,1]]},"3944":{"position":[[88,1]]},"3962":{"position":[[1584,1]]},"3966":{"position":[[1192,1]]},"3980":{"position":[[599,1]]},"3996":{"position":[[1538,1]]},"4000":{"position":[[1226,1]]}}}],["等于",{"_index":3071,"t":{"587":{"position":[[700,2]]},"2331":{"position":[[239,2]]},"2438":{"position":[[261,2]]},"3224":{"position":[[162,2]]},"3269":{"position":[[489,2]]},"3287":{"position":[[3164,2]]},"3432":{"position":[[583,2]]},"3962":{"position":[[1197,2]]}}}],["等价",{"_index":7551,"t":{"3158":{"position":[[480,2]]}}}],["等同于",{"_index":5415,"t":{"1753":{"position":[[215,3]]},"2278":{"position":[[32,3]]}}}],["等待",{"_index":3338,"t":{"685":{"position":[[407,2],[430,2]]},"1071":{"position":[[25,2],[100,2]]},"1801":{"position":[[993,2],[1118,2]]},"1803":{"position":[[3163,2],[3312,2]]},"2311":{"position":[[422,2]]},"2402":{"position":[[18,2]]},"2404":{"position":[[50,2]]},"2442":{"position":[[714,2]]},"2466":{"position":[[35,2],[53,2]]},"2829":{"position":[[27,2],[41,2],[850,2]]},"3768":{"position":[[24,2],[63,2]]},"3783":{"position":[[58,2]]},"3815":{"position":[[78,2]]}}}],["等待时间",{"_index":5633,"t":{"1803":{"position":[[5508,4]]}}}],["等等",{"_index":618,"t":{"98":{"position":[[178,2]]},"110":{"position":[[31,2]]},"179":{"position":[[166,2]]},"439":{"position":[[62,2]]},"480":{"position":[[29,2]]},"565":{"position":[[31,2]]},"1141":{"position":[[101,2]]},"1279":{"position":[[72,2]]},"1488":{"position":[[1735,2]]},"1561":{"position":[[158,2]]},"1672":{"position":[[77,2]]},"1717":{"position":[[120,2]]},"1809":{"position":[[73,2]]},"1832":{"position":[[133,2]]},"1894":{"position":[[45,2]]},"1923":{"position":[[132,2]]},"2333":{"position":[[64,2]]},"2564":{"position":[[169,2]]},"2821":{"position":[[615,2]]},"2868":{"position":[[116,2]]},"3401":{"position":[[45,2]]},"3626":{"position":[[380,2]]},"3832":{"position":[[63,2]]},"3924":{"position":[[2184,2]]},"3936":{"position":[[329,2]]},"3952":{"position":[[774,2]]},"3994":{"position":[[1609,2]]}}}],["等级",{"_index":7072,"t":{"2805":{"position":[[96,2]]},"2809":{"position":[[64,2]]}}}],["答案",{"_index":2238,"t":{"340":{"position":[[1856,2]]},"2881":{"position":[[229,2]]}}}],["答疑",{"_index":9767,"t":{"3962":{"position":[[1765,2],[1768,2],[1796,2],[1826,2],[1871,2],[1902,2],[1951,2],[1999,2],[2022,2],[2068,2]]},"3964":{"position":[[651,2],[654,2],[704,2],[739,2],[783,2],[842,2],[875,2],[915,2],[972,2],[1002,2],[1067,2]]},"3966":{"position":[[1316,2],[1319,2],[1367,2],[1405,2],[1444,2],[1492,2],[1526,2],[1548,2],[1604,2],[1666,2],[1693,2],[1717,2],[1754,2],[1798,2],[1830,2],[1879,2],[1902,2],[1965,2],[2006,2]]},"3968":{"position":[[443,2],[446,2],[472,2],[503,2],[541,2],[570,2],[615,2],[661,2],[689,2],[742,2],[762,2],[793,2],[835,2]]},"3970":{"position":[[399,2],[402,2]]},"3972":{"position":[[593,2],[596,2],[622,2]]},"3974":{"position":[[622,2],[625,2],[655,2],[695,2],[719,2],[766,2],[798,2],[874,2]]},"3976":{"position":[[606,2],[609,2],[635,2]]},"3978":{"position":[[1360,2],[1363,2],[1401,2],[1457,2],[1537,2],[1561,2],[1599,2],[1619,2],[1663,2],[1727,2],[1750,2],[1775,2]]},"3980":{"position":[[606,2],[609,2],[644,2],[663,2],[710,2],[766,2],[810,2]]},"3982":{"position":[[682,2],[685,2],[743,2],[791,2],[866,2]]},"3984":{"position":[[791,2],[794,2],[836,2],[864,2],[896,2],[927,2],[950,2],[1004,2]]},"3986":{"position":[[1019,2],[1022,2],[1092,2],[1133,2],[1152,2],[1201,2],[1222,2],[1244,2],[1279,2],[1307,2],[1388,2],[1422,2],[1467,2],[1507,2],[1568,2],[1607,2],[1656,2],[1680,2],[1709,2],[1749,2],[1780,2],[1811,2]]},"3988":{"position":[[498,2],[501,2]]},"3992":{"position":[[2829,2],[2832,2],[2850,2],[2893,2],[2918,2],[2957,2],[2999,2],[3024,2],[3054,2],[3094,2],[3138,2],[3180,2],[3212,2],[3245,2],[3290,2],[3313,2],[3351,2],[3384,2],[3418,2],[3440,2],[3461,2],[3496,2],[3550,2],[3573,2],[3597,2],[3628,2],[3662,2],[3690,2],[3734,2],[3758,2],[3792,2],[3839,2],[3868,2],[3894,2],[3925,2],[3963,2],[4017,2]]},"3994":{"position":[[1616,2],[1619,2],[1647,2],[1675,2],[1704,2]]},"3996":{"position":[[1544,2],[1547,2],[1589,2],[1613,2],[1648,2],[1679,2],[1703,2],[1738,2],[1776,2],[1797,2]]}}}],["策略",{"_index":1052,"t":{"131":{"position":[[19,2],[32,2]]},"133":{"position":[[33,2]]},"255":{"position":[[183,2]]},"288":{"position":[[545,2]]},"404":{"position":[[71,2],[78,2],[129,2],[164,2],[181,2],[191,2]]},"408":{"position":[[38,2]]},"413":{"position":[[148,2]]},"415":{"position":[[34,2]]},"1578":{"position":[[148,2]]},"1809":{"position":[[56,2]]},"1819":{"position":[[945,2]]},"1837":{"position":[[118,2]]},"1839":{"position":[[94,2]]},"1901":{"position":[[317,2]]},"2991":{"position":[[40,2]]},"3528":{"position":[[24,2]]},"3567":{"position":[[24,2]]},"3832":{"position":[[46,2],[255,2]]},"3932":{"position":[[1232,2]]},"3936":{"position":[[312,2]]},"3952":{"position":[[102,2]]},"3954":{"position":[[324,2]]},"3998":{"position":[[640,2]]},"4000":{"position":[[173,2]]}}}],["筛选",{"_index":698,"t":{"112":{"position":[[17,2],[94,2],[1615,2]]},"841":{"position":[[105,2]]},"844":{"position":[[2,2],[16,2]]},"846":{"position":[[2,2],[15,2],[64,2]]},"949":{"position":[[785,2]]},"1358":{"position":[[35,2]]},"1440":{"position":[[118,2],[293,2]]},"1566":{"position":[[440,2],[492,2]]},"1665":{"position":[[30,2],[373,2]]},"1892":{"position":[[0,2],[53,2]]},"1894":{"position":[[5,2]]},"1901":{"position":[[2,2],[7,2],[45,2],[122,2],[193,2],[286,2],[362,2],[598,2],[643,2]]},"1903":{"position":[[4,2],[59,2],[98,2],[140,2],[179,2],[217,2],[227,2],[279,2],[358,2],[375,2],[392,2],[402,2],[414,2],[441,2],[479,2],[483,2],[519,2],[626,2]]},"1905":{"position":[[18,2]]},"1907":{"position":[[6,2]]},"1909":{"position":[[2,2],[67,2],[259,2],[543,2]]},"1911":{"position":[[4,2]]},"1913":{"position":[[262,2]]},"1917":{"position":[[2,2]]},"1923":{"position":[[2,2],[13,2],[84,2]]},"1931":{"position":[[2,2],[14,2]]},"1947":{"position":[[114,2],[120,2],[127,2]]},"1949":{"position":[[12,2]]},"1955":{"position":[[2,2],[43,2],[108,2],[157,2],[240,2]]},"1957":{"position":[[6,2]]},"1963":{"position":[[0,2]]},"1965":{"position":[[5,2]]},"2313":{"position":[[522,2]]},"2564":{"position":[[115,2]]},"3063":{"position":[[936,2],[992,2]]},"3432":{"position":[[2125,2],[2133,2]]},"3434":{"position":[[1618,2],[1626,2]]},"3706":{"position":[[928,2],[984,2]]},"3916":{"position":[[1351,2]]},"3934":{"position":[[1138,2]]},"3992":{"position":[[3423,2]]}}}],["签",{"_index":8443,"t":{"3622":{"position":[[133,1]]}}}],["签发",{"_index":982,"t":{"127":{"position":[[957,2],[992,2],[1001,2]]},"3039":{"position":[[129,2],[161,2]]},"3041":{"position":[[168,2],[203,2],[212,2]]}}}],["签名",{"_index":2250,"t":{"344":{"position":[[64,2]]},"346":{"position":[[62,2]]},"348":{"position":[[68,2]]},"1396":{"position":[[61,2]]},"1687":{"position":[[287,2],[312,2],[346,2]]},"2788":{"position":[[62,2]]},"3168":{"position":[[94,2]]},"3448":{"position":[[1248,2]]},"3914":{"position":[[3309,2]]},"3920":{"position":[[1029,2],[1228,2]]},"3932":{"position":[[831,2]]},"3992":{"position":[[3036,2]]}}}],["签收",{"_index":986,"t":{"127":{"position":[[1048,2],[1085,2],[1094,2]]},"3039":{"position":[[196,2],[230,2]]},"3041":{"position":[[259,2],[296,2],[305,2]]}}}],["简",{"_index":1476,"t":{"199":{"position":[[254,1]]},"3934":{"position":[[20,1],[485,1]]}}}],["简介",{"_index":79,"t":{"5":{"position":[[0,2]]}}}],["简便",{"_index":5328,"t":{"1707":{"position":[[93,2]]}}}],["简写",{"_index":9126,"t":{"3914":{"position":[[1932,2]]}}}],["简化",{"_index":5007,"t":{"1553":{"position":[[2,2]]},"1777":{"position":[[71,2]]},"1795":{"position":[[2342,2]]},"2856":{"position":[[1716,2]]},"2915":{"position":[[70,2]]},"3140":{"position":[[24,2]]},"3430":{"position":[[1926,2]]},"3916":{"position":[[703,2]]},"3918":{"position":[[1263,2]]}}}],["简单",{"_index":453,"t":{"81":{"position":[[10,2]]},"121":{"position":[[737,2]]},"199":{"position":[[468,2]]},"371":{"position":[[662,2]]},"404":{"position":[[0,2]]},"429":{"position":[[0,2]]},"488":{"position":[[66,2]]},"500":{"position":[[0,2]]},"526":{"position":[[23,2]]},"617":{"position":[[1720,2],[2670,2]]},"734":{"position":[[7717,2]]},"801":{"position":[[50,2]]},"844":{"position":[[23,2]]},"986":{"position":[[127,2]]},"1068":{"position":[[17,2]]},"1075":{"position":[[60,2]]},"1103":{"position":[[164,2]]},"1223":{"position":[[101,2]]},"1511":{"position":[[3999,2]]},"1520":{"position":[[101,2]]},"1572":{"position":[[0,2]]},"1761":{"position":[[419,2],[542,2]]},"1795":{"position":[[1695,2]]},"1845":{"position":[[0,2]]},"2261":{"position":[[61,2],[265,2]]},"2341":{"position":[[185,2]]},"2532":{"position":[[89,2]]},"2538":{"position":[[486,2]]},"2575":{"position":[[13,2]]},"2682":{"position":[[0,2]]},"2727":{"position":[[58,2]]},"2740":{"position":[[69,2]]},"2751":{"position":[[29,2]]},"2768":{"position":[[1594,2]]},"2836":{"position":[[1870,2]]},"2870":{"position":[[17,2]]},"2875":{"position":[[1052,2]]},"2895":{"position":[[23,2]]},"2912":{"position":[[91,2]]},"2921":{"position":[[25,2]]},"2937":{"position":[[101,2]]},"3057":{"position":[[129,2]]},"3148":{"position":[[21,2]]},"3213":{"position":[[51,2]]},"3256":{"position":[[104,2]]},"3258":{"position":[[218,2]]},"3282":{"position":[[40,2]]},"3284":{"position":[[0,2]]},"3426":{"position":[[46,2]]},"3434":{"position":[[415,2]]},"3464":{"position":[[109,2],[313,2]]},"3626":{"position":[[634,2]]},"3752":{"position":[[15,2]]},"3910":{"position":[[450,2]]},"3928":{"position":[[173,2]]},"3936":{"position":[[1326,2],[1933,2],[2124,2]]},"3978":{"position":[[1632,2]]}}}],["简单明了",{"_index":761,"t":{"112":{"position":[[1485,4]]},"1925":{"position":[[1347,4]]},"1933":{"position":[[560,4]]}}}],["简易",{"_index":5844,"t":{"1913":{"position":[[1378,2]]},"1919":{"position":[[836,2]]},"1925":{"position":[[1563,2]]},"1927":{"position":[[883,2]]},"1933":{"position":[[1003,2]]},"1935":{"position":[[501,2]]},"1941":{"position":[[1251,2]]},"1943":{"position":[[448,2]]},"2309":{"position":[[120,2]]},"3140":{"position":[[44,2]]},"3960":{"position":[[7,2]]}}}],["简洁",{"_index":107,"t":{"5":{"position":[[156,2]]},"7":{"position":[[152,2]]},"2290":{"position":[[152,2]]},"2341":{"position":[[118,2]]},"3352":{"position":[[413,2]]},"3430":{"position":[[1868,2]]}}}],["简称",{"_index":2249,"t":{"344":{"position":[[20,2]]},"346":{"position":[[24,2]]},"348":{"position":[[16,2]]},"1385":{"position":[[174,2]]},"1387":{"position":[[85,2]]},"2910":{"position":[[36,2]]},"2912":{"position":[[14,2]]},"3136":{"position":[[23,2]]}}}],["算不上",{"_index":5339,"t":{"1717":{"position":[[22,3]]}}}],["算法",{"_index":1009,"t":{"127":{"position":[[1468,2],[1532,2],[1546,2],[1560,2]]},"176":{"position":[[12,2]]},"1691":{"position":[[14,2]]},"2132":{"position":[[344,2]]},"2328":{"position":[[27,2]]},"2335":{"position":[[25,2],[44,2],[64,2]]},"3039":{"position":[[405,2]]},"3106":{"position":[[75,2]]},"3112":{"position":[[9,2]]},"3928":{"position":[[533,2]]},"3932":{"position":[[1178,2]]},"3984":{"position":[[543,2]]},"3986":{"position":[[25,2]]},"3996":{"position":[[438,2]]},"3998":{"position":[[9,2],[516,2]]}}}],["管理",{"_index":1173,"t":{"162":{"position":[[7,2]]},"199":{"position":[[63,2],[144,2],[351,2],[651,2]]},"384":{"position":[[33,2]]},"386":{"position":[[10,2]]},"429":{"position":[[26,2]]},"683":{"position":[[5,2]]},"711":{"position":[[5,2]]},"736":{"position":[[56,2]]},"1389":{"position":[[92,2]]},"1432":{"position":[[71,2]]},"1537":{"position":[[62,2]]},"1566":{"position":[[594,2]]},"1837":{"position":[[86,2]]},"2206":{"position":[[26,2]]},"2446":{"position":[[26,2]]},"2717":{"position":[[203,2]]},"2740":{"position":[[40,2],[111,2]]},"2836":{"position":[[837,2]]},"2910":{"position":[[330,2],[358,2]]},"3579":{"position":[[97,2]]},"3626":{"position":[[615,2]]},"3856":{"position":[[14,2]]},"3962":{"position":[[1699,2]]}}}],["管理员",{"_index":4988,"t":{"1547":{"position":[[72,3]]},"1885":{"position":[[319,3]]},"2836":{"position":[[857,3],[1193,3]]},"3011":{"position":[[65,3]]}}}],["管理器",{"_index":6777,"t":{"2646":{"position":[[49,3]]},"2740":{"position":[[21,3],[33,3]]}}}],["管理工具",{"_index":4947,"t":{"1532":{"position":[[80,4]]},"1535":{"position":[[549,4]]},"1541":{"position":[[1,4]]},"3952":{"position":[[745,4]]}}}],["管理系统",{"_index":1254,"t":{"179":{"position":[[141,4]]},"199":{"position":[[257,4],[472,4],[505,4],[543,4],[583,4]]}}}],["管道",{"_index":1062,"t":{"133":{"position":[[393,2]]},"146":{"position":[[728,2]]},"204":{"position":[[86,2]]},"1801":{"position":[[1849,2]]},"1803":{"position":[[3820,2]]},"1892":{"position":[[36,2]]},"1901":{"position":[[51,2],[142,2]]},"2305":{"position":[[9,2],[20,2]]},"2307":{"position":[[72,2]]},"2309":{"position":[[40,2],[91,2]]},"2311":{"position":[[256,2]]},"2313":{"position":[[28,2],[149,2],[265,2]]},"2315":{"position":[[151,2]]},"2564":{"position":[[11,2],[42,2],[55,2],[82,2]]},"3150":{"position":[[22,2]]},"3922":{"position":[[2019,2],[2266,2]]},"3950":{"position":[[594,2]]},"3994":{"position":[[488,2]]},"3996":{"position":[[1249,2]]}}}],["篇",{"_index":7887,"t":{"3307":{"position":[[95,1]]}}}],["篇幅",{"_index":659,"t":{"104":{"position":[[58,2]]},"810":{"position":[[421,2]]},"812":{"position":[[453,2]]},"814":{"position":[[417,2]]},"816":{"position":[[449,2]]},"1111":{"position":[[453,2]]},"1113":{"position":[[451,2]]},"1115":{"position":[[460,2]]},"1117":{"position":[[4698,2]]},"1119":{"position":[[422,2]]},"1121":{"position":[[454,2]]},"1123":{"position":[[385,2]]},"1129":{"position":[[1776,2]]},"1196":{"position":[[111,2]]},"1198":{"position":[[120,2]]}}}],["篡改",{"_index":4098,"t":{"1279":{"position":[[36,2],[609,2],[785,2]]},"1424":{"position":[[134,2]]},"1896":{"position":[[42,2],[48,2]]},"1923":{"position":[[96,2],[101,2]]},"1925":{"position":[[886,2]]},"3047":{"position":[[94,2],[116,2],[154,2]]},"3960":{"position":[[565,2]]}}}],["米尔",{"_index":6681,"t":{"2559":{"position":[[2504,2],[2514,2]]}}}],["类",{"_index":340,"t":{"21":{"position":[[55,1]]},"23":{"position":[[37,1]]},"30":{"position":[[6,1]]},"202":{"position":[[8,1],[35,1]]},"204":{"position":[[459,1],[518,1]]},"206":{"position":[[30,1],[100,1],[192,1],[216,1]]},"216":{"position":[[49,1]]},"261":{"position":[[70,1]]},"274":{"position":[[240,1]]},"355":{"position":[[25,1]]},"373":{"position":[[220,1]]},"437":{"position":[[6,1],[35,1],[42,1]]},"500":{"position":[[115,1],[121,1]]},"508":{"position":[[232,1],[257,1]]},"510":{"position":[[262,1],[287,1]]},"512":{"position":[[127,1]]},"516":{"position":[[262,1]]},"518":{"position":[[192,1]]},"585":{"position":[[513,1]]},"587":{"position":[[714,1],[2154,1]]},"591":{"position":[[72,1]]},"612":{"position":[[52,1]]},"623":{"position":[[32,1]]},"818":{"position":[[70,1]]},"822":{"position":[[4,1],[35,1]]},"832":{"position":[[12,1]]},"939":{"position":[[56,1]]},"1026":{"position":[[226,1]]},"1041":{"position":[[454,1]]},"1133":{"position":[[68,1]]},"1143":{"position":[[70,1]]},"1234":{"position":[[879,1]]},"1240":{"position":[[1044,1]]},"1246":{"position":[[98,1]]},"1257":{"position":[[383,1]]},"1265":{"position":[[98,1]]},"1309":{"position":[[123,1]]},"1383":{"position":[[102,1]]},"1385":{"position":[[71,1],[87,1],[99,1],[117,1]]},"1389":{"position":[[40,1]]},"1392":{"position":[[36,1],[49,1],[56,1],[75,1],[144,1],[178,1],[205,1]]},"1394":{"position":[[94,1]]},"1405":{"position":[[118,1],[126,1]]},"1408":{"position":[[42,1],[1046,1],[1098,1]]},"1410":{"position":[[48,1]]},"1412":{"position":[[17,1],[33,1],[159,1],[178,1],[276,1],[345,1]]},"1414":{"position":[[20,1],[62,1]]},"1416":{"position":[[382,1],[384,1],[468,1]]},"1420":{"position":[[892,1]]},"1424":{"position":[[461,1]]},"1426":{"position":[[256,1]]},"1438":{"position":[[36,1]]},"1553":{"position":[[44,1]]},"1570":{"position":[[22,1]]},"1576":{"position":[[44,1],[255,1]]},"1580":{"position":[[192,1],[373,1],[484,1]]},"1584":{"position":[[22,1],[85,1]]},"1587":{"position":[[98,1],[188,1]]},"1609":{"position":[[36,1]]},"1615":{"position":[[277,1]]},"1623":{"position":[[259,1]]},"1627":{"position":[[370,1]]},"1641":{"position":[[439,1]]},"1661":{"position":[[408,1]]},"1703":{"position":[[62,1]]},"1711":{"position":[[58,1],[942,1],[959,1]]},"1726":{"position":[[19,1]]},"1761":{"position":[[559,1],[573,1],[589,1]]},"1775":{"position":[[29,1],[3887,1]]},"1783":{"position":[[30,1]]},"1797":{"position":[[38,1]]},"1803":{"position":[[95,1]]},"1817":{"position":[[70,1]]},"1819":{"position":[[59,1],[884,1]]},"1823":{"position":[[48,1]]},"1832":{"position":[[25,1]]},"1855":{"position":[[530,1]]},"1865":{"position":[[461,1]]},"1873":{"position":[[4,1]]},"1887":{"position":[[290,1]]},"1903":{"position":[[566,1]]},"2206":{"position":[[12,1]]},"2231":{"position":[[37,1]]},"2239":{"position":[[6,1]]},"2311":{"position":[[215,1]]},"2319":{"position":[[36,1]]},"2331":{"position":[[209,1]]},"2345":{"position":[[819,1]]},"2348":{"position":[[80,1],[120,1]]},"2354":{"position":[[25,1]]},"2395":{"position":[[36,1],[50,1],[111,1]]},"2442":{"position":[[18,1],[83,1],[2055,1],[2072,1]]},"2446":{"position":[[12,1]]},"2526":{"position":[[18,1],[30,1]]},"2528":{"position":[[24,1]]},"2538":{"position":[[169,1]]},"2575":{"position":[[38,1]]},"2579":{"position":[[2,1],[589,1],[612,1]]},"2581":{"position":[[11,1],[58,1],[1091,1]]},"2619":{"position":[[10,1],[60,1]]},"2684":{"position":[[343,1]]},"2688":{"position":[[147,1]]},"2709":{"position":[[238,1]]},"2713":{"position":[[161,1]]},"2715":{"position":[[61,1],[112,1],[119,1]]},"2721":{"position":[[59,1],[118,1]]},"2723":{"position":[[2,1]]},"2725":{"position":[[579,1],[1060,1],[2196,1]]},"2805":{"position":[[26,1],[52,1]]},"2807":{"position":[[132,1]]},"2813":{"position":[[41,1],[89,1],[696,1]]},"2819":{"position":[[615,1]]},"2821":{"position":[[48,1],[83,1]]},"2856":{"position":[[1759,1]]},"2905":{"position":[[384,1]]},"2921":{"position":[[71,1]]},"3001":{"position":[[414,1]]},"3023":{"position":[[405,1]]},"3118":{"position":[[157,1]]},"3140":{"position":[[82,1]]},"3148":{"position":[[68,1],[119,1]]},"3215":{"position":[[6,1]]},"3224":{"position":[[6,1],[19,1],[247,1]]},"3267":{"position":[[6,1],[16,1]]},"3289":{"position":[[10,1]]},"3321":{"position":[[242,1]]},"3350":{"position":[[110,1]]},"3360":{"position":[[135,1],[185,1]]},"3371":{"position":[[29,1],[125,1],[148,1],[289,1],[501,1]]},"3373":{"position":[[98,1]]},"3389":{"position":[[11,1],[70,1],[109,1],[126,1],[210,1],[531,1],[554,1],[810,1],[968,1]]},"3391":{"position":[[40,1],[60,1],[108,1],[284,1]]},"3393":{"position":[[61,1],[113,1],[137,1],[536,1]]},"3397":{"position":[[155,1]]},"3401":{"position":[[95,1],[351,1]]},"3432":{"position":[[2464,1]]},"3434":{"position":[[2070,1]]},"3448":{"position":[[191,1],[1254,1],[1350,1]]},"3508":{"position":[[167,1]]},"3551":{"position":[[280,1],[504,1]]},"3553":{"position":[[259,1],[371,1]]},"3555":{"position":[[280,1],[410,1]]},"3557":{"position":[[282,1],[417,1]]},"3559":{"position":[[291,1],[441,1]]},"3636":{"position":[[104,1],[209,1]]},"3638":{"position":[[248,1]]},"3708":{"position":[[583,1]]},"3714":{"position":[[62,1],[100,1]]},"3750":{"position":[[15,1]]},"3774":{"position":[[20,1]]},"3777":{"position":[[309,1]]},"3779":{"position":[[225,1],[1608,1]]},"3802":{"position":[[2369,1]]},"3804":{"position":[[87,1]]},"3910":{"position":[[2176,1],[2231,1],[2561,1]]},"3912":{"position":[[1976,1],[2157,1]]},"3916":{"position":[[1012,1]]},"3918":{"position":[[3780,1],[3925,1],[3982,1]]},"3920":{"position":[[387,1],[491,1]]},"3922":{"position":[[147,1],[2352,1],[2396,1]]},"3924":{"position":[[2873,1],[2896,1],[3037,1],[3208,1]]},"3928":{"position":[[696,1]]},"3930":{"position":[[101,1]]},"3932":{"position":[[244,1],[285,1],[1966,1],[2114,1],[2222,1]]},"3934":{"position":[[204,1],[1125,1]]},"3946":{"position":[[61,1]]},"3948":{"position":[[84,1]]},"3950":{"position":[[234,1]]},"3954":{"position":[[273,1],[281,1],[330,1]]},"3964":{"position":[[631,1]]},"3966":{"position":[[103,1],[1302,1],[1381,1]]},"3968":{"position":[[244,1],[393,1],[431,1]]},"3972":{"position":[[627,1],[659,1],[662,1]]},"3986":{"position":[[370,1]]},"3990":{"position":[[89,1],[345,1],[755,1]]},"3992":{"position":[[851,1],[1034,1],[1860,1],[2689,1],[3170,1],[3884,1]]},"3994":{"position":[[275,1],[759,1],[1301,1],[1347,1]]}}}],["类似",{"_index":1881,"t":{"261":{"position":[[39,2]]},"282":{"position":[[225,2]]},"359":{"position":[[140,2]]},"741":{"position":[[0,2]]},"826":{"position":[[36,2]]},"986":{"position":[[16,2]]},"1432":{"position":[[202,2]]},"1545":{"position":[[21,2]]},"1566":{"position":[[607,2]]},"1653":{"position":[[18,2]]},"1901":{"position":[[646,2]]},"1909":{"position":[[821,2]]},"2915":{"position":[[167,2]]},"3092":{"position":[[41,2]]},"3096":{"position":[[27,2]]},"3140":{"position":[[73,2]]},"3618":{"position":[[56,2]]},"3650":{"position":[[58,2]]}}}],["类别",{"_index":4111,"t":{"1309":{"position":[[11,2]]},"2553":{"position":[[98,2]]},"3031":{"position":[[98,2]]},"3416":{"position":[[37,2]]},"3420":{"position":[[325,2]]},"3422":{"position":[[15,2]]},"3426":{"position":[[162,2],[181,2]]},"3430":{"position":[[504,2]]},"3468":{"position":[[96,2],[111,2],[308,2]]},"3601":{"position":[[1638,2]]},"3916":{"position":[[1956,2]]}}}],["类型",{"_index":430,"t":{"53":{"position":[[26,2]]},"64":{"position":[[39,2]]},"77":{"position":[[26,2]]},"91":{"position":[[1,2]]},"93":{"position":[[19,2],[315,2]]},"95":{"position":[[174,2]]},"114":{"position":[[1243,2]]},"127":{"position":[[857,2],[908,2],[966,2],[1012,2],[1057,2],[1105,2],[1151,2],[1200,2],[1247,2],[1296,2],[1735,2],[1740,2]]},"129":{"position":[[390,2]]},"206":{"position":[[224,2]]},"210":{"position":[[71,2],[152,2],[182,2]]},"265":{"position":[[29,2]]},"272":{"position":[[128,2],[165,2],[209,2]]},"286":{"position":[[74,2],[84,2],[193,2]]},"288":{"position":[[703,2]]},"304":{"position":[[67,2]]},"350":{"position":[[708,2]]},"359":{"position":[[43,2],[96,2],[220,2],[288,2]]},"367":{"position":[[33,2],[41,2],[80,2],[159,2],[198,2],[235,2]]},"369":{"position":[[197,2],[365,2]]},"415":{"position":[[45,2],[101,2],[147,2],[192,2],[275,2],[313,2],[357,2],[417,2],[466,2]]},"439":{"position":[[29,2],[39,2],[46,2],[51,2],[132,2],[180,2]]},"516":{"position":[[625,2],[678,2],[772,2]]},"524":{"position":[[37,2]]},"528":{"position":[[251,2],[304,2],[411,2],[481,2]]},"570":{"position":[[1227,2]]},"572":{"position":[[543,2],[988,2]]},"587":{"position":[[1949,2],[2169,2]]},"591":{"position":[[22,2],[31,2]]},"597":{"position":[[458,2],[590,2]]},"599":{"position":[[489,2]]},"606":{"position":[[14,2],[36,2],[56,2],[76,2],[89,2],[100,2],[110,2],[120,2],[133,2],[147,2],[165,2],[180,2],[205,2],[225,2],[234,2],[246,2],[259,2],[274,2],[289,2],[298,2],[316,2],[334,2],[350,2],[368,2],[383,2],[397,2],[409,2],[422,2],[438,2],[451,2],[468,2],[483,2],[508,2],[517,2],[934,2]]},"608":{"position":[[726,2],[736,2],[781,2],[855,2],[899,2]]},"612":{"position":[[105,2],[111,2]]},"615":{"position":[[15,2],[41,2],[54,2],[68,2],[85,2],[90,2],[327,2],[972,2],[1091,2],[1111,2]]},"617":{"position":[[1418,2],[1620,2],[1688,2],[1892,2],[2641,2]]},"677":{"position":[[225,2]]},"685":{"position":[[463,2]]},"696":{"position":[[477,2]]},"698":{"position":[[137,2]]},"704":{"position":[[225,2]]},"807":{"position":[[18,2]]},"945":{"position":[[35,2],[49,2]]},"949":{"position":[[711,2]]},"1031":{"position":[[214,2]]},"1066":{"position":[[80,2]]},"1082":{"position":[[8,2]]},"1117":{"position":[[52,2]]},"1131":{"position":[[83,2],[125,2],[137,2],[161,2]]},"1133":{"position":[[117,2],[143,2],[171,2],[180,2]]},"1135":{"position":[[34,2],[46,2],[62,2],[64,2],[105,2]]},"1200":{"position":[[42,2],[54,2],[70,2],[72,2],[113,2],[170,2],[214,2]]},"1234":{"position":[[122,2],[254,2],[384,2],[783,2],[796,2],[806,2],[880,2]]},"1236":{"position":[[122,2],[257,2],[390,2]]},"1238":{"position":[[122,2],[297,2],[470,2]]},"1240":{"position":[[122,2],[318,2],[512,2],[1045,2]]},"1246":{"position":[[99,2]]},"1257":{"position":[[384,2]]},"1265":{"position":[[99,2]]},"1267":{"position":[[269,2]]},"1412":{"position":[[152,2],[194,2],[266,2]]},"1416":{"position":[[103,2],[198,2],[428,2],[441,2],[528,2]]},"1420":{"position":[[518,2]]},"1424":{"position":[[205,2]]},"1440":{"position":[[164,2],[275,2],[291,2],[325,2],[401,2],[423,2]]},"1576":{"position":[[256,2]]},"1580":{"position":[[485,2]]},"1587":{"position":[[153,2],[251,2]]},"1600":{"position":[[24,2],[55,2]]},"1609":{"position":[[37,2]]},"1611":{"position":[[907,2],[911,2],[918,2],[924,2]]},"1615":{"position":[[278,2]]},"1627":{"position":[[11,2],[254,2],[371,2]]},"1635":{"position":[[244,2],[271,2],[300,2],[326,2],[349,2],[369,2],[386,2],[404,2]]},"1641":{"position":[[367,2]]},"1661":{"position":[[409,2],[906,2]]},"1663":{"position":[[43,2],[242,2]]},"1719":{"position":[[16,2],[35,2],[70,2]]},"1741":{"position":[[14,2],[72,2],[521,2],[859,2],[1702,2],[2493,2]]},"1745":{"position":[[281,2]]},"1785":{"position":[[15,2]]},"1787":{"position":[[7,2]]},"1795":{"position":[[736,2],[1541,2],[2659,2]]},"1819":{"position":[[475,2]]},"1821":{"position":[[162,2],[213,2],[250,2]]},"1845":{"position":[[261,2]]},"1851":{"position":[[431,2],[951,2]]},"1855":{"position":[[9,2],[21,2],[38,2],[43,2]]},"1869":{"position":[[241,2]]},"1871":{"position":[[50,2]]},"1875":{"position":[[210,2]]},"1885":{"position":[[25,2],[67,2],[104,2],[143,2],[238,2]]},"1887":{"position":[[68,2],[72,2],[317,2],[366,2],[449,2],[490,2],[524,2]]},"1903":{"position":[[223,2],[372,2],[629,2]]},"1907":{"position":[[372,2]]},"1909":{"position":[[864,2],[945,2]]},"1913":{"position":[[554,2],[629,2],[1120,2]]},"1933":{"position":[[671,2]]},"1949":{"position":[[33,2]]},"2023":{"position":[[117,2]]},"2313":{"position":[[166,2],[493,2],[504,2],[512,2]]},"2359":{"position":[[221,2]]},"2361":{"position":[[246,2]]},"2379":{"position":[[14,2],[30,2],[362,2],[416,2]]},"2381":{"position":[[33,2]]},"2383":{"position":[[73,2]]},"2385":{"position":[[45,2]]},"2444":{"position":[[43,2],[77,2],[105,2],[135,2],[158,2],[233,2],[304,2]]},"2553":{"position":[[56,2],[110,2],[201,2],[245,2]]},"2581":{"position":[[80,2]]},"2701":{"position":[[45,2]]},"2733":{"position":[[4,2],[83,2]]},"2848":{"position":[[1211,2],[1221,2]]},"2897":{"position":[[66,2],[205,2]]},"2967":{"position":[[29,2],[70,2]]},"2969":{"position":[[86,2]]},"2981":{"position":[[60,2],[137,2],[214,2],[273,2],[320,2],[384,2],[440,2]]},"2985":{"position":[[135,2]]},"2991":{"position":[[51,2],[107,2],[153,2],[198,2],[281,2],[319,2],[363,2],[423,2],[472,2]]},"3001":{"position":[[79,2]]},"3009":{"position":[[57,2],[99,2],[136,2],[175,2],[270,2]]},"3015":{"position":[[52,2],[70,2]]},"3023":{"position":[[406,2],[903,2]]},"3031":{"position":[[56,2],[110,2],[201,2],[245,2]]},"3039":{"position":[[53,2],[91,2],[138,2],[172,2],[205,2],[241,2],[274,2],[315,2],[355,2],[391,2]]},"3041":{"position":[[68,2],[119,2],[177,2],[223,2],[268,2],[316,2],[362,2],[411,2],[458,2],[507,2]]},"3047":{"position":[[72,2],[132,2],[201,2]]},"3053":{"position":[[26,2]]},"3055":{"position":[[52,2],[59,2],[63,2],[68,2],[76,2]]},"3057":{"position":[[100,2]]},"3063":{"position":[[649,2],[738,2],[892,2],[945,2],[1001,2],[1055,2],[1139,2],[1298,2],[1402,2],[1492,2],[1513,2],[1551,2],[1582,2],[1611,2],[1664,2],[1697,2],[1728,2]]},"3071":{"position":[[216,2]]},"3150":{"position":[[155,2]]},"3154":{"position":[[383,2]]},"3168":{"position":[[38,2],[44,2]]},"3224":{"position":[[1350,2]]},"3287":{"position":[[111,2],[395,2],[726,2],[801,2],[893,2],[969,2],[1079,2],[1157,2]]},"3315":{"position":[[21,2]]},"3317":{"position":[[2,2]]},"3319":{"position":[[60,2]]},"3352":{"position":[[93,2]]},"3367":{"position":[[27,2]]},"3371":{"position":[[126,2]]},"3373":{"position":[[661,2]]},"3389":{"position":[[532,2]]},"3420":{"position":[[312,2],[316,2]]},"3446":{"position":[[245,2],[298,2],[362,2],[505,2],[1718,2]]},"3456":{"position":[[50,2],[279,2]]},"3500":{"position":[[786,2]]},"3520":{"position":[[20,2],[50,2],[61,2],[71,2],[84,2],[117,2]]},"3522":{"position":[[139,2]]},"3549":{"position":[[287,2]]},"3561":{"position":[[20,2],[50,2],[61,2],[71,2],[84,2]]},"3563":{"position":[[136,2]]},"3620":{"position":[[77,2]]},"3664":{"position":[[15,2],[56,2],[250,2],[266,2],[304,2],[344,2],[379,2],[417,2],[465,2],[504,2]]},"3680":{"position":[[36,2]]},"3686":{"position":[[378,2],[570,2]]},"3688":{"position":[[751,2]]},"3698":{"position":[[48,2],[97,2],[261,2],[301,2]]},"3706":{"position":[[641,2],[730,2],[884,2],[937,2],[993,2],[1047,2],[1131,2],[1309,2],[1413,2],[1503,2],[1524,2],[1562,2],[1593,2],[1622,2],[1675,2],[1708,2],[1739,2]]},"3708":{"position":[[74,2],[85,2]]},"3740":{"position":[[112,2]]},"3742":{"position":[[22,2]]},"3744":{"position":[[395,2]]},"3777":{"position":[[16,2],[36,2],[54,2],[127,2],[134,2],[173,2]]},"3779":{"position":[[30,2],[101,2],[226,2],[287,2],[354,2],[459,2],[1605,2],[1609,2]]},"3781":{"position":[[263,2],[299,2],[341,2],[472,2],[549,2],[639,2]]},"3783":{"position":[[1820,2]]},"3791":{"position":[[15,2]]},"3798":{"position":[[14,2],[37,2],[55,2],[134,2],[141,2],[179,2],[239,2]]},"3800":{"position":[[40,2],[50,2],[354,2],[391,2],[396,2]]},"3802":{"position":[[29,2],[100,2],[230,2],[307,2],[390,2],[508,2],[2366,2],[2370,2]]},"3804":{"position":[[72,2]]},"3806":{"position":[[1360,2],[1396,2]]},"3808":{"position":[[64,2],[2965,2],[2992,2],[3017,2],[3040,2],[3071,2],[3116,2],[3151,2],[3184,2],[3217,2],[3255,2]]},"3810":{"position":[[243,2],[294,2],[351,2]]},"3815":{"position":[[101,2]]},"3817":{"position":[[30,2],[107,2]]},"3824":{"position":[[149,2]]},"3840":{"position":[[21,2],[177,2]]},"3842":{"position":[[44,2],[584,2],[1193,2],[1767,2],[2370,2],[3003,2]]},"3844":{"position":[[44,2]]},"3846":{"position":[[33,2],[289,2]]},"3862":{"position":[[21,2],[177,2]]},"3882":{"position":[[21,2]]},"3884":{"position":[[21,2],[172,2]]},"3886":{"position":[[21,2]]},"3888":{"position":[[21,2]]},"3892":{"position":[[21,2]]},"3908":{"position":[[36,2]]},"3910":{"position":[[494,2]]},"3912":{"position":[[1140,2],[1575,2],[2654,2]]},"3914":{"position":[[781,2],[944,2],[2730,2],[2783,2],[2834,2],[3098,2],[3285,2],[3423,2],[3458,2]]},"3916":{"position":[[2244,2]]},"3918":{"position":[[1120,2]]},"3922":{"position":[[238,2],[854,2],[1576,2]]},"3924":{"position":[[1282,2],[2874,2]]},"3928":{"position":[[2280,2]]},"3930":{"position":[[887,2]]},"3932":{"position":[[245,2],[286,2],[1967,2],[2026,2],[2115,2],[2223,2]]},"3934":{"position":[[95,2],[169,2],[416,2],[550,2],[698,2],[886,2],[3014,2]]},"3936":{"position":[[85,2],[999,2],[1038,2],[1160,2]]},"3940":{"position":[[125,2],[797,2]]},"3942":{"position":[[190,2],[206,2]]},"3946":{"position":[[62,2],[65,2],[226,2],[352,2]]},"3948":{"position":[[85,2],[88,2],[251,2],[489,2]]},"3950":{"position":[[148,2],[210,2],[527,2],[698,2]]},"3952":{"position":[[489,2],[632,2],[668,2]]},"3962":{"position":[[403,2],[1329,2],[1375,2],[1433,2]]},"3972":{"position":[[67,2],[90,2]]},"3974":{"position":[[14,2],[29,2],[37,2]]},"3976":{"position":[[182,2],[382,2]]},"3978":{"position":[[287,2],[800,2],[820,2],[892,2],[1152,2],[1634,2]]},"3980":{"position":[[468,2]]},"3982":{"position":[[487,2],[535,2]]},"3984":{"position":[[68,2],[129,2]]},"3986":{"position":[[437,2],[1117,2],[1448,2]]},"3988":{"position":[[331,2]]},"3992":{"position":[[1722,2],[1749,2],[2480,2],[2690,2]]},"3994":{"position":[[309,2],[891,2],[990,2],[1422,2]]},"3996":{"position":[[180,2],[750,2]]},"4004":{"position":[[138,2]]},"4006":{"position":[[233,2],[403,2],[434,2]]}}}],["类型转换",{"_index":10232,"t":{"3992":{"position":[[1691,4],[1775,4]]}}}],["类库",{"_index":7075,"t":{"2807":{"position":[[13,2]]}}}],["粉",{"_index":9396,"t":{"3926":{"position":[[269,1]]}}}],["粉丝",{"_index":4883,"t":{"1511":{"position":[[3931,2]]},"3926":{"position":[[413,2],[473,2]]}}}],["粘土",{"_index":1875,"t":{"261":{"position":[[0,2],[86,2]]},"263":{"position":[[0,2]]},"265":{"position":[[0,2]]},"270":{"position":[[9,2]]},"286":{"position":[[2,2]]},"3940":{"position":[[663,2]]},"3962":{"position":[[1314,2]]},"3970":{"position":[[293,2]]},"3972":{"position":[[65,2]]},"3974":{"position":[[12,2],[605,2]]}}}],["粘滞",{"_index":2508,"t":{"423":{"position":[[96,2]]}}}],["粘贴",{"_index":2010,"t":{"306":{"position":[[104,2]]}}}],["粥",{"_index":4726,"t":{"1511":{"position":[[1819,1]]}}}],["精力",{"_index":8463,"t":{"3626":{"position":[[71,2]]},"3926":{"position":[[162,2]]}}}],["精度",{"_index":6250,"t":{"2379":{"position":[[49,2]]},"3914":{"position":[[973,2],[2786,2]]}}}],["精彩",{"_index":6752,"t":{"2615":{"position":[[42,2]]},"3934":{"position":[[1166,2]]}}}],["精心",{"_index":7017,"t":{"2770":{"position":[[248,2]]}}}],["精湛",{"_index":7739,"t":{"3242":{"position":[[134,2]]},"3910":{"position":[[131,2]]},"3934":{"position":[[2239,2]]}}}],["精确",{"_index":9086,"t":{"3912":{"position":[[1913,2]]}}}],["精简",{"_index":4143,"t":{"1372":{"position":[[0,2],[11,2]]},"1444":{"position":[[0,2],[11,2]]},"3352":{"position":[[384,2]]},"3974":{"position":[[521,2]]}}}],["糖",{"_index":3250,"t":{"643":{"position":[[17,1]]},"3727":{"position":[[108,1]]}}}],["糟糕",{"_index":3038,"t":{"585":{"position":[[409,2]]},"3612":{"position":[[62,2]]}}}],["系列",{"_index":9173,"t":{"3916":{"position":[[1569,2]]},"3966":{"position":[[710,2]]}}}],["系统",{"_index":401,"t":{"46":{"position":[[90,2]]},"60":{"position":[[90,2]]},"70":{"position":[[90,2]]},"110":{"position":[[7,2]]},"127":{"position":[[1451,2]]},"179":{"position":[[70,2]]},"182":{"position":[[46,2]]},"184":{"position":[[7,2],[47,2]]},"199":{"position":[[441,2]]},"263":{"position":[[25,2]]},"325":{"position":[[5,2],[45,2]]},"429":{"position":[[8,2],[37,2]]},"431":{"position":[[7,2],[14,2]]},"433":{"position":[[137,2]]},"447":{"position":[[33,2]]},"457":{"position":[[6,2]]},"482":{"position":[[776,2]]},"510":{"position":[[493,2]]},"565":{"position":[[7,2]]},"579":{"position":[[39,2]]},"581":{"position":[[10,2],[32,2],[44,2]]},"675":{"position":[[167,2],[210,2]]},"841":{"position":[[5,2]]},"1097":{"position":[[18,2]]},"1141":{"position":[[60,2]]},"1547":{"position":[[11,2]]},"1672":{"position":[[97,2]]},"1717":{"position":[[27,2]]},"1832":{"position":[[72,2]]},"1885":{"position":[[311,2]]},"1894":{"position":[[60,2]]},"1896":{"position":[[11,2]]},"2057":{"position":[[5,2],[81,2]]},"2333":{"position":[[43,2]]},"2418":{"position":[[1124,2]]},"2517":{"position":[[117,2]]},"2526":{"position":[[168,2]]},"2615":{"position":[[18,2]]},"2627":{"position":[[45,2]]},"2705":{"position":[[7,2],[14,2]]},"2740":{"position":[[97,2]]},"2742":{"position":[[0,2]]},"2782":{"position":[[78,2],[186,2],[199,2],[215,2]]},"2798":{"position":[[131,2]]},"2912":{"position":[[66,2]]},"2923":{"position":[[9,2]]},"2939":{"position":[[9,2]]},"2953":{"position":[[9,2]]},"3011":{"position":[[57,2]]},"3080":{"position":[[84,2]]},"3092":{"position":[[31,2],[39,2]]},"3096":{"position":[[7,2]]},"3104":{"position":[[25,2]]},"3118":{"position":[[120,2],[303,2]]},"3136":{"position":[[46,2]]},"3138":{"position":[[92,2]]},"3140":{"position":[[110,2]]},"3189":{"position":[[61,2]]},"3352":{"position":[[18,2],[43,2],[61,2],[102,2],[512,2]]},"3412":{"position":[[26,2],[35,2]]},"3476":{"position":[[15,2]]},"3478":{"position":[[1,2],[14,2]]},"3614":{"position":[[6,2]]},"3616":{"position":[[21,2],[30,2]]},"3638":{"position":[[6,2],[19,2]]},"3912":{"position":[[819,2]]},"3924":{"position":[[2584,2]]},"3928":{"position":[[14,2]]},"3932":{"position":[[1377,2]]},"3936":{"position":[[395,2]]},"3962":{"position":[[2053,2]]},"3984":{"position":[[621,2]]},"3986":{"position":[[1120,2],[1800,2]]},"3990":{"position":[[520,2]]}}}],["系统启动",{"_index":9692,"t":{"3958":{"position":[[358,4]]}}}],["系统安全",{"_index":1001,"t":{"127":{"position":[[1312,4]]}}}],["系统日志",{"_index":4366,"t":{"1474":{"position":[[30,4]]},"3412":{"position":[[7,4],[18,4],[95,4],[101,4]]}}}],["系统盘",{"_index":7102,"t":{"2838":{"position":[[38,3]]}}}],["系统管理",{"_index":4486,"t":{"1493":{"position":[[0,4]]}}}],["系统管理员",{"_index":3309,"t":{"675":{"position":[[226,5]]}}}],["系统集成",{"_index":8039,"t":{"3401":{"position":[[39,4]]}}}],["索引",{"_index":1898,"t":{"267":{"position":[[51,2]]},"272":{"position":[[268,2]]},"278":{"position":[[209,2]]},"443":{"position":[[58,2]]},"2326":{"position":[[70,2],[103,2]]}}}],["紧",{"_index":4214,"t":{"1389":{"position":[[103,1]]}}}],["紧密",{"_index":8475,"t":{"3626":{"position":[[576,2]]}}}],["紧急",{"_index":1457,"t":{"196":{"position":[[18,2]]},"1503":{"position":[[2,2]]},"1505":{"position":[[2,2]]},"2678":{"position":[[18,2]]},"3138":{"position":[[156,2]]},"3898":{"position":[[0,2]]},"3900":{"position":[[0,2]]},"3902":{"position":[[0,2]]},"3904":{"position":[[0,2]]}}}],["紫",{"_index":2545,"t":{"441":{"position":[[246,1],[509,1],[612,1]]}}}],["累加",{"_index":5248,"t":{"1685":{"position":[[337,2]]},"2617":{"position":[[24,2]]}}}],["累赘",{"_index":9421,"t":{"3926":{"position":[[513,2]]}}}],["繁杂",{"_index":8607,"t":{"3720":{"position":[[14,2]]}}}],["繁琐",{"_index":2756,"t":{"502":{"position":[[48,2]]}}}],["纠正",{"_index":1985,"t":{"300":{"position":[[289,2]]},"610":{"position":[[118,2]]}}}],["红包",{"_index":4611,"t":{"1511":{"position":[[551,2],[602,2],[635,2],[709,2],[1000,2],[1065,2],[1133,2],[1156,2],[1778,2],[1802,2]]}}}],["约定",{"_index":1554,"t":{"210":{"position":[[19,2],[225,2]]},"390":{"position":[[5,2]]},"404":{"position":[[101,2]]},"708":{"position":[[512,2]]},"1574":{"position":[[49,2]]},"1576":{"position":[[37,2],[290,2]]},"1578":{"position":[[42,2],[57,2]]},"1580":{"position":[[34,2]]},"1589":{"position":[[226,2]]},"1596":{"position":[[250,2]]},"1631":{"position":[[357,2]]},"1763":{"position":[[241,2]]},"3614":{"position":[[22,2]]}}}],["约旦",{"_index":6443,"t":{"2559":{"position":[[138,2]]}}}],["约束",{"_index":2357,"t":{"388":{"position":[[20,2]]},"988":{"position":[[483,2]]},"1052":{"position":[[56,2]]},"1368":{"position":[[744,2]]},"1635":{"position":[[50,2],[181,2]]},"3930":{"position":[[1468,2]]},"3946":{"position":[[418,2]]},"3948":{"position":[[556,2]]},"3964":{"position":[[213,2]]},"3996":{"position":[[1692,2]]}}}],["级",{"_index":6761,"t":{"2619":{"position":[[55,1]]},"3209":{"position":[[114,1]]},"3211":{"position":[[34,1]]},"3986":{"position":[[1828,1]]}}}],["级别",{"_index":7224,"t":{"2915":{"position":[[30,2],[209,2]]},"2919":{"position":[[79,2],[182,2]]},"3148":{"position":[[151,2]]},"3287":{"position":[[875,2]]},"3350":{"position":[[176,2]]},"3416":{"position":[[2,2],[42,2],[46,2]]},"3432":{"position":[[520,2],[2159,2]]},"3434":{"position":[[832,2],[1652,2]]},"3442":{"position":[[73,2]]},"3448":{"position":[[545,2]]},"3468":{"position":[[105,2],[354,2]]},"3916":{"position":[[841,2]]},"3924":{"position":[[1139,2]]}}}],["纯",{"_index":3158,"t":{"606":{"position":[[345,1],[363,1]]},"1511":{"position":[[3812,1]]},"3936":{"position":[[315,1],[319,1]]}}}],["纯净",{"_index":529,"t":{"91":{"position":[[50,2],[523,2]]},"538":{"position":[[45,2]]},"2597":{"position":[[45,2]]},"3207":{"position":[[204,2]]},"3248":{"position":[[45,2]]},"3369":{"position":[[7,2]]},"3403":{"position":[[53,2]]}}}],["纰漏",{"_index":10405,"t":{"3996":{"position":[[1459,2]]}}}],["纳",{"_index":6588,"t":{"2559":{"position":[[1507,1],[1518,1]]}}}],["纵",{"_index":1159,"t":{"156":{"position":[[5,1]]}}}],["纹身",{"_index":1199,"t":{"168":{"position":[[30,2]]}}}],["线",{"_index":8488,"t":{"3662":{"position":[[5,1]]}}}],["线性",{"_index":3901,"t":{"1048":{"position":[[48,2]]}}}],["线程",{"_index":5330,"t":{"1709":{"position":[[15,2]]},"2309":{"position":[[7,2],[75,2]]},"2311":{"position":[[52,2]]},"2315":{"position":[[149,2]]},"2319":{"position":[[65,2]]},"2404":{"position":[[13,2]]},"2817":{"position":[[96,2],[236,2]]},"2843":{"position":[[281,2]]},"2856":{"position":[[39,2]]},"2903":{"position":[[22,2]]},"3319":{"position":[[30,2]]},"3430":{"position":[[1883,2]]},"3918":{"position":[[1169,2]]},"3976":{"position":[[402,2]]},"3982":{"position":[[307,2]]}}}],["组",{"_index":2070,"t":{"314":{"position":[[154,1]]},"316":{"position":[[158,1]]},"1483":{"position":[[1062,1]]},"1659":{"position":[[37,1],[39,1]]},"3644":{"position":[[37,1],[39,1]]},"3994":{"position":[[1208,1],[1210,1]]}}}],["组件",{"_index":2210,"t":{"340":{"position":[[62,2],[71,2],[80,2],[113,2],[156,2],[168,2],[423,2],[454,2],[578,2],[806,2],[1040,2],[1218,2],[1514,2],[1870,2],[1875,2],[1883,2],[1907,2]]},"344":{"position":[[24,2],[107,2],[320,2]]},"346":{"position":[[29,2],[382,2]]},"348":{"position":[[23,2],[131,2],[346,2]]},"350":{"position":[[14,2],[328,2],[373,2],[496,2],[523,2],[575,2],[729,2]]},"353":{"position":[[0,2],[37,2],[51,2]]},"355":{"position":[[2,2],[23,2],[116,2],[128,2],[177,2],[279,2],[360,2],[468,2]]},"357":{"position":[[2,2],[5,2],[31,2]]},"359":{"position":[[29,2],[62,2],[69,2],[82,2],[108,2],[116,2],[131,2],[145,2],[312,2]]},"361":{"position":[[15,2]]},"363":{"position":[[14,2],[34,2]]},"365":{"position":[[18,2],[42,2]]},"367":{"position":[[31,2],[60,2],[99,2],[114,2],[134,2],[139,2],[179,2],[186,2],[216,2],[223,2]]},"369":{"position":[[3,2],[54,2],[65,2],[152,2],[201,2],[275,2],[330,2],[367,2],[508,2],[860,2]]},"371":{"position":[[0,2],[21,2]]},"373":{"position":[[65,2],[152,2],[175,2],[221,2]]},"445":{"position":[[108,2]]},"570":{"position":[[2060,2]]},"633":{"position":[[73,2]]},"1697":{"position":[[38,2]]},"1793":{"position":[[38,2]]},"1799":{"position":[[56,2]]},"2564":{"position":[[28,2],[49,2],[62,2]]},"2619":{"position":[[48,2]]},"2674":{"position":[[195,2]]},"2881":{"position":[[310,2],[341,2],[362,2]]},"2912":{"position":[[71,2]]},"3418":{"position":[[26,2]]},"3460":{"position":[[31,2]]},"3654":{"position":[[29,2],[35,2]]},"3727":{"position":[[94,2]]},"3920":{"position":[[524,2],[2018,2]]},"3924":{"position":[[1176,2],[1349,2],[2614,2]]},"3928":{"position":[[70,2],[95,2],[152,2],[229,2],[355,2],[373,2],[641,2]]},"3932":{"position":[[302,2],[645,2],[1456,2]]},"3990":{"position":[[304,2]]},"3994":{"position":[[446,2],[721,2]]},"4006":{"position":[[26,2]]}}}],["组合",{"_index":1696,"t":{"233":{"position":[[328,2]]},"606":{"position":[[515,2]]},"615":{"position":[[428,2]]},"1240":{"position":[[1200,2]]},"1257":{"position":[[492,2]]},"1619":{"position":[[21,2],[37,2]]},"1903":{"position":[[275,2]]},"3389":{"position":[[187,2]]},"3698":{"position":[[278,2]]},"3932":{"position":[[2427,2]]},"3992":{"position":[[2242,2]]}}}],["组合成",{"_index":4080,"t":{"1234":{"position":[[808,3]]}}}],["组成",{"_index":1032,"t":{"127":{"position":[[1742,2]]},"2615":{"position":[[7,2]]},"3783":{"position":[[1815,2]]},"3806":{"position":[[1391,2]]}}}],["组织",{"_index":2148,"t":{"331":{"position":[[12,2]]},"399":{"position":[[43,2]]}}}],["组装",{"_index":6757,"t":{"2617":{"position":[[13,2],[31,2]]},"3118":{"position":[[299,2]]},"3430":{"position":[[3388,2]]},"3432":{"position":[[3357,2]]},"3434":{"position":[[2441,2]]}}}],["细",{"_index":1819,"t":{"249":{"position":[[87,1]]},"1389":{"position":[[241,1]]}}}],["细粒度",{"_index":1485,"t":{"199":{"position":[[404,3]]},"3098":{"position":[[8,3]]}}}],["细致",{"_index":4876,"t":{"1511":{"position":[[3860,2]]}}}],["细节",{"_index":9042,"t":{"3910":{"position":[[299,2],[311,2]]},"3912":{"position":[[117,2],[129,2],[203,2],[277,2],[351,2],[425,2],[499,2],[573,2],[647,2]]},"3914":{"position":[[2,2],[14,2],[88,2],[162,2],[236,2],[310,2],[384,2],[458,2],[532,2],[606,2],[680,2]]},"3916":{"position":[[2,2],[14,2],[88,2],[162,2],[236,2],[310,2],[384,2],[458,2],[532,2],[606,2]]},"3918":{"position":[[2,2],[14,2],[88,2],[162,2],[236,2],[310,2],[384,2],[458,2],[532,2],[606,2],[680,2]]},"3920":{"position":[[2,2],[14,2],[88,2]]}}}],["终于",{"_index":4637,"t":{"1511":{"position":[[758,2]]},"3069":{"position":[[243,2]]}}}],["终止",{"_index":5038,"t":{"1557":{"position":[[992,2]]},"1837":{"position":[[128,2]]},"2438":{"position":[[266,2],[285,2]]},"2440":{"position":[[300,2],[319,2]]},"3962":{"position":[[1113,2]]}}}],["终点",{"_index":6725,"t":{"2591":{"position":[[25,2],[53,2]]}}}],["终端",{"_index":6871,"t":{"2745":{"position":[[248,2],[279,2],[293,2]]},"2747":{"position":[[283,2],[314,2],[328,2]]},"2751":{"position":[[510,2]]},"3078":{"position":[[47,2],[94,2],[105,2]]}}}],["终端用户",{"_index":5711,"t":{"1837":{"position":[[25,4]]},"1839":{"position":[[1,4]]}}}],["终结",{"_index":7529,"t":{"3148":{"position":[[23,2]]},"3992":{"position":[[3196,2]]}}}],["经典",{"_index":4253,"t":{"1408":{"position":[[1316,2]]},"1892":{"position":[[59,2]]}}}],["经历",{"_index":7151,"t":{"2862":{"position":[[33,2]]},"3926":{"position":[[380,2]]}}}],["经常",{"_index":1645,"t":{"225":{"position":[[42,2]]},"338":{"position":[[22,2]]},"585":{"position":[[10,2]]},"1566":{"position":[[223,2]]},"3626":{"position":[[31,2],[74,2],[140,2]]},"3783":{"position":[[38,2]]}}}],["经常出现",{"_index":4367,"t":{"1474":{"position":[[39,4]]},"2391":{"position":[[192,4]]}}}],["经纪人",{"_index":9400,"t":{"3926":{"position":[[333,3]]}}}],["经营",{"_index":1171,"t":{"162":{"position":[[2,2]]},"2910":{"position":[[334,2]]}}}],["经过",{"_index":9422,"t":{"3926":{"position":[[534,2]]},"3946":{"position":[[128,2]]},"3948":{"position":[[161,2]]}}}],["经验",{"_index":1861,"t":{"255":{"position":[[59,2]]}}}],["绑",{"_index":7571,"t":{"3189":{"position":[[66,1]]}}}],["绑定",{"_index":1537,"t":{"206":{"position":[[113,2]]},"300":{"position":[[169,2]]},"524":{"position":[[513,2]]},"903":{"position":[[46,2]]},"939":{"position":[[14,2]]},"1488":{"position":[[1342,2]]},"1609":{"position":[[57,2],[284,2]]},"1629":{"position":[[22,2],[46,2],[73,2],[106,2],[127,2],[164,2]]},"1917":{"position":[[31,2]]},"1919":{"position":[[557,2]]},"1923":{"position":[[40,2]]},"1951":{"position":[[566,2]]},"3150":{"position":[[171,2]]},"3254":{"position":[[597,2],[972,2],[1199,2]]},"3928":{"position":[[662,2]]}}}],["结合",{"_index":178,"t":{"11":{"position":[[762,2]]},"112":{"position":[[9,2]]},"1580":{"position":[[387,2]]},"1641":{"position":[[242,2],[286,2]]},"1847":{"position":[[36,2]]},"2294":{"position":[[810,2]]},"3460":{"position":[[47,2]]},"3968":{"position":[[713,2]]}}}],["结尾",{"_index":2278,"t":{"355":{"position":[[168,2],[225,2]]},"445":{"position":[[721,2]]},"530":{"position":[[818,2]]},"651":{"position":[[389,2]]},"789":{"position":[[210,2]]},"1039":{"position":[[819,2]]},"1351":{"position":[[389,2]]},"1483":{"position":[[1192,2]]},"1592":{"position":[[147,2]]},"1594":{"position":[[195,2]]},"1621":{"position":[[710,2]]},"1711":{"position":[[851,2]]},"2182":{"position":[[273,2]]},"2478":{"position":[[498,2]]},"2579":{"position":[[51,2]]},"2709":{"position":[[254,2]]},"2721":{"position":[[35,2],[170,2],[357,2]]},"2875":{"position":[[477,2]]},"3740":{"position":[[35,2]]}}}],["结束",{"_index":1272,"t":{"182":{"position":[[85,2]]},"494":{"position":[[506,2],[586,2]]},"1399":{"position":[[58,2]]},"1401":{"position":[[39,2]]},"1557":{"position":[[997,2]]},"2805":{"position":[[86,2]]},"2817":{"position":[[200,2],[264,2]]},"2843":{"position":[[197,2]]},"2852":{"position":[[47,2]]},"3798":{"position":[[353,2]]},"3800":{"position":[[218,2]]},"3808":{"position":[[3028,2]]},"3810":{"position":[[600,2]]},"3964":{"position":[[597,2]]}}}],["结构",{"_index":1859,"t":{"255":{"position":[[46,2]]},"1060":{"position":[[15,2]]},"1759":{"position":[[18,2]]},"1761":{"position":[[252,2],[581,2]]},"3131":{"position":[[68,2]]},"3914":{"position":[[814,2]]},"3916":{"position":[[1010,2]]},"3966":{"position":[[1479,2]]}}}],["结果",{"_index":664,"t":{"104":{"position":[[73,2]]},"112":{"position":[[1346,2]]},"182":{"position":[[28,2],[35,2],[139,2],[172,2]]},"186":{"position":[[136,2]]},"190":{"position":[[13,2]]},"591":{"position":[[104,2]]},"801":{"position":[[75,2]]},"807":{"position":[[46,2]]},"862":{"position":[[372,2],[383,2]]},"1117":{"position":[[30,2],[83,2],[165,2],[259,2],[363,2],[477,2],[601,2],[735,2],[879,2],[1099,2],[1110,2],[1160,2],[1219,2],[1285,2],[1358,2],[1438,2],[1525,2],[1619,2],[1768,2],[1853,2],[1950,2],[2057,2],[2174,2],[2301,2],[2438,2],[2585,2],[2801,2],[2886,2],[2983,2],[3090,2],[3207,2],[3334,2],[3471,2],[3618,2],[3835,2],[3903,2],[3983,2],[4073,2],[4173,2],[4283,2],[4403,2],[4533,2]]},"1125":{"position":[[64,2],[222,2],[270,2]]},"1129":{"position":[[715,2],[1705,2]]},"1133":{"position":[[153,2]]},"1185":{"position":[[148,2],[196,2]]},"1358":{"position":[[31,2]]},"1566":{"position":[[436,2]]},"1572":{"position":[[60,2]]},"1717":{"position":[[102,2]]},"1761":{"position":[[71,2]]},"1881":{"position":[[5,2],[18,2]]},"1887":{"position":[[66,2]]},"1892":{"position":[[127,2]]},"1901":{"position":[[226,2],[360,2],[371,2],[500,2]]},"1903":{"position":[[136,2]]},"1909":{"position":[[63,2]]},"1925":{"position":[[1208,2]]},"1927":{"position":[[456,2]]},"1939":{"position":[[0,2],[12,2]]},"1941":{"position":[[961,2],[1071,2]]},"1947":{"position":[[66,2],[103,2]]},"1955":{"position":[[155,2]]},"2881":{"position":[[35,2]]},"3045":{"position":[[12,2]]},"3118":{"position":[[320,2]]},"3120":{"position":[[142,2]]},"3224":{"position":[[356,2]]},"3273":{"position":[[632,2],[766,2]]},"3282":{"position":[[160,2]]},"3362":{"position":[[38,2]]},"3373":{"position":[[640,2]]},"3375":{"position":[[240,2]]},"3414":{"position":[[135,2]]},"3430":{"position":[[2437,2]]},"3452":{"position":[[874,2]]},"3520":{"position":[[97,2]]},"3561":{"position":[[97,2]]},"3595":{"position":[[24,2],[59,2],[130,2],[148,2],[371,2],[475,2]]},"3624":{"position":[[161,2]]},"3676":{"position":[[184,2]]},"3708":{"position":[[15,2],[70,2],[3203,2],[3871,2],[4092,2]]},"3712":{"position":[[6,2]]},"3714":{"position":[[60,2],[98,2]]},"3736":{"position":[[83,2]]},"3738":{"position":[[174,2]]},"3740":{"position":[[302,2],[665,2]]},"3744":{"position":[[216,2]]},"3746":{"position":[[215,2]]},"3748":{"position":[[214,2]]},"3750":{"position":[[429,2]]},"3762":{"position":[[519,2]]},"3764":{"position":[[127,2]]},"3766":{"position":[[300,2]]},"3768":{"position":[[588,2],[2604,2]]},"3770":{"position":[[370,2],[1767,2],[3421,2],[5042,2]]},"3772":{"position":[[553,2]]},"3774":{"position":[[713,2]]},"3806":{"position":[[406,2],[1811,2],[3639,2]]},"3808":{"position":[[1073,2],[2294,2]]},"3828":{"position":[[939,2]]},"3832":{"position":[[1002,2]]},"3896":{"position":[[38,2]]},"3912":{"position":[[2010,2]]},"3914":{"position":[[3540,2]]},"3916":{"position":[[3870,2]]},"3918":{"position":[[921,2]]},"3920":{"position":[[1811,2]]},"3924":{"position":[[1312,2]]},"3930":{"position":[[10,2]]},"3932":{"position":[[1314,2]]},"3934":{"position":[[517,2]]},"3936":{"position":[[671,2],[2074,2]]},"3946":{"position":[[114,2]]},"3948":{"position":[[147,2],[392,2]]},"3956":{"position":[[155,2],[266,2],[2543,2]]},"3960":{"position":[[563,2]]},"3966":{"position":[[776,2],[1060,2],[1074,2],[1268,2],[1781,2]]},"3970":{"position":[[383,2]]},"3976":{"position":[[260,2]]},"3980":{"position":[[792,2]]},"3986":{"position":[[1586,2]]},"3992":{"position":[[1463,2],[1680,2],[1716,2],[2511,2],[3617,2]]},"3994":{"position":[[245,2],[672,2],[889,2],[897,2],[1092,2],[1153,2],[1232,2]]},"3996":{"position":[[1201,2],[1258,2]]},"4000":{"position":[[1061,2],[1097,2]]},"4002":{"position":[[311,2]]},"4006":{"position":[[501,2]]}}}],["给出",{"_index":2614,"t":{"461":{"position":[[213,2]]},"1103":{"position":[[94,2]]},"2731":{"position":[[167,2]]}}}],["绝大多数",{"_index":3238,"t":{"633":{"position":[[18,4]]},"1699":{"position":[[83,4]]}}}],["绝对",{"_index":1682,"t":{"233":{"position":[[19,2],[324,2],[341,2],[354,2],[409,2],[448,2],[683,2]]},"3352":{"position":[[568,2]]}}}],["绝对路径",{"_index":9585,"t":{"3942":{"position":[[288,4]]}}}],["统一",{"_index":433,"t":{"53":{"position":[[36,2]]},"64":{"position":[[49,2]]},"77":{"position":[[36,2]]},"300":{"position":[[91,2]]},"355":{"position":[[29,2]]},"384":{"position":[[46,2]]},"429":{"position":[[22,2]]},"516":{"position":[[573,2],[599,2]]},"1155":{"position":[[95,2]]},"1424":{"position":[[1768,2]]},"1717":{"position":[[58,2]]},"1763":{"position":[[246,2]]},"1834":{"position":[[49,2]]},"1839":{"position":[[83,2],[142,2]]},"1881":{"position":[[29,2]]},"1923":{"position":[[107,2]]},"1931":{"position":[[37,2]]},"2569":{"position":[[42,2]]},"2807":{"position":[[143,2]]},"2910":{"position":[[216,2]]},"2915":{"position":[[177,2]]},"3620":{"position":[[15,2]]},"3624":{"position":[[0,2]]},"3670":{"position":[[18,2]]},"3708":{"position":[[54,2]]},"3908":{"position":[[200,2]]},"3914":{"position":[[2111,2]]},"3976":{"position":[[638,2]]},"3986":{"position":[[230,2],[1584,2]]},"3996":{"position":[[1800,2]]}}}],["统计",{"_index":1307,"t":{"184":{"position":[[78,2]]}}}],["统计数据",{"_index":7247,"t":{"2917":{"position":[[205,4]]}}}],["继承",{"_index":1058,"t":{"133":{"position":[[63,2]]},"237":{"position":[[1346,2]]},"267":{"position":[[8,2]]},"502":{"position":[[145,2]]},"504":{"position":[[13,2]]},"506":{"position":[[156,2]]},"508":{"position":[[214,2],[254,2]]},"510":{"position":[[244,2],[284,2]]},"516":{"position":[[259,2]]},"518":{"position":[[189,2]]},"552":{"position":[[69,2]]},"617":{"position":[[1377,2]]},"708":{"position":[[529,2]]},"844":{"position":[[30,2]]},"945":{"position":[[53,2]]},"947":{"position":[[65,2]]},"1223":{"position":[[233,2]]},"1311":{"position":[[342,2],[460,2]]},"1360":{"position":[[33,2]]},"1364":{"position":[[462,2],[489,2]]},"1408":{"position":[[1047,2],[1062,2]]},"1416":{"position":[[445,2]]},"1576":{"position":[[47,2],[68,2]]},"1580":{"position":[[86,2]]},"1584":{"position":[[23,2]]},"1587":{"position":[[68,2],[169,2]]},"1589":{"position":[[79,2]]},"1623":{"position":[[226,2]]},"1763":{"position":[[139,2]]},"1765":{"position":[[150,2]]},"1773":{"position":[[298,2]]},"1783":{"position":[[16,2]]},"2709":{"position":[[291,2]]},"2725":{"position":[[600,2],[1061,2],[1796,2],[2556,2]]},"2727":{"position":[[64,2],[771,2]]},"2729":{"position":[[85,2],[739,2]]},"2813":{"position":[[43,2]]},"2921":{"position":[[72,2]]},"3126":{"position":[[337,2]]},"3154":{"position":[[8,2]]},"3224":{"position":[[243,2]]},"3371":{"position":[[486,2]]},"3373":{"position":[[101,2]]},"3483":{"position":[[67,2]]},"3688":{"position":[[99,2],[486,2]]},"3750":{"position":[[17,2]]},"3806":{"position":[[58,2]]},"3808":{"position":[[69,2]]},"3914":{"position":[[3157,2]]},"3924":{"position":[[569,2]]},"3936":{"position":[[788,2]]},"3940":{"position":[[1053,2],[1374,2]]},"3962":{"position":[[1257,2],[1785,2]]},"3968":{"position":[[633,2]]},"3984":{"position":[[19,2]]},"3988":{"position":[[356,2]]},"3992":{"position":[[2389,2]]}}}],["继续",{"_index":6339,"t":{"2440":{"position":[[508,2]]},"3432":{"position":[[4567,2]]},"3702":{"position":[[1362,2]]},"3928":{"position":[[620,2]]}}}],["继续执行",{"_index":8836,"t":{"3795":{"position":[[45,4]]}}}],["维",{"_index":8061,"t":{"3414":{"position":[[212,1]]}}}],["维度",{"_index":8456,"t":{"3624":{"position":[[180,2]]}}}],["维护",{"_index":578,"t":{"95":{"position":[[111,2],[128,2]]},"121":{"position":[[241,2]]},"206":{"position":[[205,2]]},"239":{"position":[[39,2]]},"300":{"position":[[322,2]]},"304":{"position":[[99,2]]},"585":{"position":[[597,2]]},"799":{"position":[[52,2]]},"841":{"position":[[11,2]]},"1101":{"position":[[52,2]]},"1155":{"position":[[52,2]]},"1214":{"position":[[27,2]]},"1221":{"position":[[64,2]]},"1507":{"position":[[37,2]]},"1509":{"position":[[161,2]]},"1576":{"position":[[322,2]]},"1761":{"position":[[237,2]]},"2538":{"position":[[399,2],[478,2],[581,2],[655,2]]},"2881":{"position":[[247,2],[280,2]]},"2910":{"position":[[347,2],[361,2],[467,2]]},"2915":{"position":[[131,2]]},"2919":{"position":[[148,2]]},"2921":{"position":[[30,2]]},"2923":{"position":[[17,2]]},"3096":{"position":[[47,2]]},"3104":{"position":[[98,2]]},"3608":{"position":[[127,2]]},"3610":{"position":[[50,2]]},"3618":{"position":[[12,2]]},"3626":{"position":[[60,2]]},"3720":{"position":[[21,2]]},"3924":{"position":[[2590,2]]},"3928":{"position":[[262,2],[622,2]]}}}],["维护性",{"_index":6717,"t":{"2579":{"position":[[22,3]]}}}],["维护者",{"_index":2364,"t":{"394":{"position":[[37,3]]}}}],["绵薄之力",{"_index":4746,"t":{"1511":{"position":[[2064,4]]}}}],["缓",{"_index":6273,"t":{"2393":{"position":[[49,1]]}}}],["缓冲作用",{"_index":3021,"t":{"581":{"position":[[61,4]]}}}],["缓存",{"_index":1640,"t":{"225":{"position":[[0,2],[36,2],[62,2],[107,2]]},"227":{"position":[[2,2],[12,2],[32,2],[38,2],[52,2],[57,2],[60,2]]},"229":{"position":[[2,2],[9,2],[29,2],[75,2]]},"231":{"position":[[2,2]]},"233":{"position":[[2,2],[8,2],[13,2],[21,2],[136,2],[263,2],[275,2],[368,2],[459,2],[676,2]]},"235":{"position":[[48,2]]},"237":{"position":[[18,2],[53,2],[104,2],[1301,2],[1334,2],[1373,2],[1399,2]]},"239":{"position":[[3,2],[17,2],[46,2],[104,2],[114,2],[125,2],[202,2],[246,2],[308,2]]},"241":{"position":[[19,2],[81,2],[153,2]]},"243":{"position":[[32,2],[64,2],[83,2],[130,2],[163,2],[205,2],[215,2]]},"245":{"position":[[5,2],[80,2],[90,2],[93,2],[124,2],[173,2],[179,2],[213,2],[242,2]]},"247":{"position":[[15,2],[56,2],[116,2]]},"249":{"position":[[29,2]]},"251":{"position":[[44,2],[67,2],[228,2]]},"253":{"position":[[326,2],[686,2]]},"255":{"position":[[62,2],[84,2],[118,2],[132,2],[149,2],[181,2],[210,2],[219,2],[268,2]]},"257":{"position":[[38,2],[65,2]]},"463":{"position":[[37,2]]},"516":{"position":[[692,2]]},"741":{"position":[[37,2]]},"747":{"position":[[887,2]]},"1103":{"position":[[222,2]]},"1358":{"position":[[37,2]]},"1566":{"position":[[221,2],[645,2]]},"1894":{"position":[[17,2]]},"1917":{"position":[[20,2]]},"2508":{"position":[[29,2],[62,2]]},"2619":{"position":[[90,2]]},"2796":{"position":[[329,2]]},"2819":{"position":[[558,2]]},"2843":{"position":[[213,2],[220,2],[228,2],[234,2],[240,2],[247,2]]},"2854":{"position":[[6,2]]},"2933":{"position":[[586,2]]},"2973":{"position":[[27,2]]},"3922":{"position":[[1355,2]]},"3944":{"position":[[533,2]]},"3960":{"position":[[658,2]]},"3972":{"position":[[538,2]]},"3978":{"position":[[725,2]]},"3982":{"position":[[638,2],[645,2]]},"3984":{"position":[[747,2],[755,2]]},"3986":{"position":[[84,2]]}}}],["缓存数据",{"_index":1760,"t":{"239":{"position":[[147,4]]}}}],["缓缓的",{"_index":9368,"t":{"3926":{"position":[[87,3]]}}}],["编写",{"_index":1328,"t":{"188":{"position":[[47,2]]},"196":{"position":[[20,2]]},"210":{"position":[[216,2]]},"225":{"position":[[92,2]]},"300":{"position":[[99,2],[131,2],[148,2],[224,2]]},"302":{"position":[[9,2]]},"304":{"position":[[120,2]]},"329":{"position":[[70,2]]},"340":{"position":[[107,2]]},"373":{"position":[[188,2]]},"386":{"position":[[69,2],[97,2]]},"486":{"position":[[11,2]]},"1103":{"position":[[194,2]]},"1311":{"position":[[446,2]]},"1364":{"position":[[481,2]]},"1377":{"position":[[67,2],[241,2]]},"1379":{"position":[[56,2],[686,2]]},"1483":{"position":[[42,2]]},"1503":{"position":[[4,2]]},"1505":{"position":[[4,2]]},"1516":{"position":[[156,2],[210,2]]},"1520":{"position":[[147,2]]},"1532":{"position":[[63,2]]},"1539":{"position":[[12,2]]},"1541":{"position":[[296,2]]},"1566":{"position":[[53,2],[183,2]]},"1584":{"position":[[87,2]]},"2341":{"position":[[155,2]]},"2395":{"position":[[135,2]]},"2497":{"position":[[74,2]]},"2499":{"position":[[63,2]]},"2599":{"position":[[33,2]]},"2678":{"position":[[20,2]]},"2803":{"position":[[42,2]]},"2813":{"position":[[96,2]]},"2819":{"position":[[460,2]]},"2836":{"position":[[571,2],[1777,2]]},"2881":{"position":[[59,2]]},"2977":{"position":[[12,2]]},"2987":{"position":[[12,2]]},"2997":{"position":[[12,2]]},"3005":{"position":[[12,2]]},"3019":{"position":[[12,2]]},"3027":{"position":[[12,2]]},"3035":{"position":[[12,2]]},"3043":{"position":[[12,2]]},"3051":{"position":[[12,2]]},"3059":{"position":[[12,2]]},"3131":{"position":[[118,2]]},"3138":{"position":[[158,2]]},"3158":{"position":[[48,2]]},"3242":{"position":[[41,2]]},"3373":{"position":[[501,2]]},"3385":{"position":[[67,2]]},"3397":{"position":[[268,2]]},"3581":{"position":[[11,2]]},"3608":{"position":[[103,2]]},"3626":{"position":[[57,2]]},"3688":{"position":[[46,2]]},"3727":{"position":[[56,2]]},"3758":{"position":[[15,2]]},"3787":{"position":[[27,2]]},"3898":{"position":[[2,2]]},"3900":{"position":[[2,2]]},"3902":{"position":[[2,2]]},"3904":{"position":[[2,2]]},"3910":{"position":[[38,2],[698,2]]},"3934":{"position":[[2124,2]]},"3972":{"position":[[476,2]]}}}],["编写出",{"_index":2157,"t":{"336":{"position":[[269,3]]}}}],["编号",{"_index":6172,"t":{"2333":{"position":[[61,2]]},"2649":{"position":[[38,2],[228,2]]},"3764":{"position":[[25,2]]}}}],["编排",{"_index":5503,"t":{"1795":{"position":[[1704,2]]},"3910":{"position":[[460,2]]}}}],["编码",{"_index":2358,"t":{"390":{"position":[[3,2]]},"427":{"position":[[147,2],[188,2]]},"457":{"position":[[36,2]]},"2538":{"position":[[98,2]]},"2788":{"position":[[49,2]]},"3500":{"position":[[239,2],[811,2]]},"3660":{"position":[[25,2],[67,2]]},"3930":{"position":[[140,2]]},"3938":{"position":[[388,2],[604,2],[660,2]]},"4000":{"position":[[1009,2]]}}}],["编程",{"_index":611,"t":{"98":{"position":[[159,2]]},"176":{"position":[[25,2]]},"1424":{"position":[[110,2]]},"1761":{"position":[[232,2]]},"1892":{"position":[[66,2]]},"3920":{"position":[[456,2]]}}}],["编程技术",{"_index":1222,"t":{"172":{"position":[[44,4]]}}}],["编程语言",{"_index":6197,"t":{"2341":{"position":[[100,4]]},"3478":{"position":[[24,4]]},"3727":{"position":[[32,4]]}}}],["编译",{"_index":213,"t":{"13":{"position":[[23,2],[423,2]]},"308":{"position":[[276,2],[383,2],[402,2]]},"310":{"position":[[240,2],[262,2]]},"427":{"position":[[101,2]]},"696":{"position":[[617,2],[918,2]]},"1103":{"position":[[72,2],[220,2]]},"1286":{"position":[[34,2],[47,2]]},"1374":{"position":[[74,2]]},"1420":{"position":[[34,2]]},"1535":{"position":[[587,2]]},"1547":{"position":[[296,2]]},"1549":{"position":[[385,2]]},"1551":{"position":[[54,2]]},"1566":{"position":[[629,2]]},"2296":{"position":[[23,2],[423,2]]},"2298":{"position":[[22,2]]},"2555":{"position":[[20,2]]},"2657":{"position":[[71,2]]},"3154":{"position":[[704,2]]},"3168":{"position":[[52,2]]},"3305":{"position":[[12,2]]},"3729":{"position":[[36,2]]},"3740":{"position":[[4,2],[449,2],[724,2]]},"3752":{"position":[[123,2],[362,2],[612,2],[921,2]]},"3950":{"position":[[553,2]]},"3992":{"position":[[3578,2]]},"3996":{"position":[[417,2]]},"4000":{"position":[[805,2]]}}}],["编译成",{"_index":8623,"t":{"3740":{"position":[[75,3]]}}}],["编辑",{"_index":120,"t":{"9":{"position":[[107,2]]},"48":{"position":[[0,2]]},"72":{"position":[[0,2]]},"199":{"position":[[707,2]]},"314":{"position":[[15,2]]},"316":{"position":[[15,2]]},"380":{"position":[[23,2]]},"751":{"position":[[25,2]]},"1372":{"position":[[35,2]]},"1444":{"position":[[35,2]]},"1551":{"position":[[179,2]]},"2292":{"position":[[107,2]]},"2298":{"position":[[59,2]]},"2625":{"position":[[32,2]]},"2639":{"position":[[0,2]]},"2666":{"position":[[0,2]]},"2672":{"position":[[0,2]]},"2875":{"position":[[518,2]]},"2891":{"position":[[3,2]]},"3071":{"position":[[49,2]]}}}],["编辑器",{"_index":4376,"t":{"1474":{"position":[[215,3]]}}}],["缩减",{"_index":4147,"t":{"1374":{"position":[[62,2]]}}}],["缺失",{"_index":9574,"t":{"3940":{"position":[[516,2]]},"3966":{"position":[[931,2]]}}}],["缺少",{"_index":2432,"t":{"404":{"position":[[124,2]]},"4004":{"position":[[334,2]]}}}],["缺点",{"_index":1182,"t":{"166":{"position":[[15,2]]},"336":{"position":[[190,2]]},"457":{"position":[[23,2]]},"587":{"position":[[2118,2]]},"1389":{"position":[[185,2]]},"1392":{"position":[[117,2]]},"1394":{"position":[[142,2]]},"1396":{"position":[[43,2]]},"1578":{"position":[[80,2]]},"1580":{"position":[[42,2]]},"1699":{"position":[[98,2]]},"2733":{"position":[[74,2]]},"2915":{"position":[[111,2]]},"2917":{"position":[[158,2]]},"2919":{"position":[[176,2]]},"3096":{"position":[[96,2]]},"3104":{"position":[[54,2]]},"3108":{"position":[[95,2]]},"3110":{"position":[[184,2]]},"3242":{"position":[[193,2]]},"3910":{"position":[[190,2]]},"3934":{"position":[[2359,2]]}}}],["缺省",{"_index":8290,"t":{"3506":{"position":[[450,2]]},"3547":{"position":[[513,2]]},"3958":{"position":[[53,2],[199,2]]}}}],["缺省值",{"_index":8489,"t":{"3664":{"position":[[62,3]]}}}],["网",{"_index":1454,"t":{"194":{"position":[[74,1]]},"306":{"position":[[102,1]]},"331":{"position":[[26,1],[107,1]]},"562":{"position":[[56,1]]},"3213":{"position":[[22,1]]},"3238":{"position":[[14,1]]},"3240":{"position":[[60,1]]},"3273":{"position":[[1008,1]]},"3966":{"position":[[1574,1]]}}}],["网上",{"_index":4434,"t":{"1485":{"position":[[333,2]]}}}],["网关",{"_index":6706,"t":{"2564":{"position":[[157,2]]},"3996":{"position":[[1594,2]]}}}],["网友",{"_index":7894,"t":{"3307":{"position":[[250,2]]}}}],["网址",{"_index":3149,"t":{"606":{"position":[[232,2]]}}}],["网民",{"_index":5431,"t":{"1761":{"position":[[131,2]]}}}],["网游",{"_index":7494,"t":{"3138":{"position":[[52,2]]}}}],["网站",{"_index":276,"t":{"19":{"position":[[101,2]]},"121":{"position":[[558,2],[597,2],[630,2]]},"455":{"position":[[41,2]]},"1374":{"position":[[12,2],[34,2],[103,2]]},"1377":{"position":[[5,2],[42,2],[61,2],[273,2],[299,2],[369,2],[374,2],[460,2],[465,2],[496,2],[565,2],[570,2],[586,2],[591,2],[716,2],[721,2]]},"1465":{"position":[[4,2]]},"1474":{"position":[[106,2]]},"1488":{"position":[[785,2]]},"1495":{"position":[[729,2]]},"1509":{"position":[[19,2]]},"1741":{"position":[[170,2],[979,2],[1832,2]]},"2497":{"position":[[186,2]]},"2623":{"position":[[255,2]]},"2625":{"position":[[373,2]]},"2834":{"position":[[102,2]]},"2846":{"position":[[396,2]]},"3307":{"position":[[2,2]]},"3337":{"position":[[12,2],[33,2]]},"3339":{"position":[[35,2]]},"3740":{"position":[[407,2]]}}}],["网络",{"_index":1231,"t":{"176":{"position":[[23,2]]},"1566":{"position":[[306,2]]},"2305":{"position":[[66,2]]},"2341":{"position":[[177,2]]},"2768":{"position":[[80,2]]},"3136":{"position":[[58,2]]},"3138":{"position":[[64,2]]},"3142":{"position":[[128,2],[221,2]]},"3414":{"position":[[184,2]]},"3520":{"position":[[93,2]]},"3561":{"position":[[93,2]]},"3990":{"position":[[107,2]]},"3992":{"position":[[247,2],[428,2],[1426,2],[1895,2],[1993,2],[2630,2]]},"4006":{"position":[[7,2]]}}}],["网络通信",{"_index":8380,"t":{"3589":{"position":[[531,4]]}}}],["网页",{"_index":858,"t":{"121":{"position":[[51,2]]}}}],["罗尼亚",{"_index":6482,"t":{"2559":{"position":[[512,3],[524,3],[531,3]]}}}],["罗生门",{"_index":4658,"t":{"1511":{"position":[[994,3]]}}}],["罗马尼亚",{"_index":6628,"t":{"2559":{"position":[[1937,4]]}}}],["罗马尼亚语",{"_index":6627,"t":{"2559":{"position":[[1918,5],[1930,5]]}}}],["置",{"_index":7299,"t":{"3001":{"position":[[340,1]]}}}],["美",{"_index":1213,"t":{"168":{"position":[[93,1]]},"3138":{"position":[[85,1]]}}}],["美化",{"_index":8106,"t":{"3430":{"position":[[3573,2]]},"3432":{"position":[[4274,2]]},"3434":{"position":[[2648,2]]},"3452":{"position":[[192,2],[304,2]]},"3910":{"position":[[1395,2],[1486,2],[1599,2]]}}}],["美国",{"_index":6532,"t":{"2559":{"position":[[955,2]]}}}],["美好",{"_index":4662,"t":{"1511":{"position":[[1040,2]]}}}],["美观",{"_index":2194,"t":{"338":{"position":[[1196,2]]},"3452":{"position":[[472,2]]},"3916":{"position":[[3475,2]]},"3920":{"position":[[1791,2]]}}}],["群",{"_index":498,"t":{"85":{"position":[[192,1]]},"399":{"position":[[122,1],[273,1],[374,1]]},"401":{"position":[[366,1]]},"1511":{"position":[[1300,1],[4105,1]]},"2768":{"position":[[1566,1]]},"3986":{"position":[[1232,1]]}}}],["群友",{"_index":501,"t":{"85":{"position":[[200,2]]}}}],["群集",{"_index":1830,"t":{"251":{"position":[[69,2],[230,2]]}}}],["翻译",{"_index":6408,"t":{"2538":{"position":[[82,2]]},"2540":{"position":[[23,2]]}}}],["老",{"_index":3023,"t":{"585":{"position":[[3,1]]},"3124":{"position":[[63,1]]}}}],["老鼠",{"_index":3047,"t":{"585":{"position":[[523,2]]}}}],["考虑",{"_index":1856,"t":{"255":{"position":[[34,2]]},"336":{"position":[[398,2]]},"363":{"position":[[64,2]]},"417":{"position":[[356,2]]},"1050":{"position":[[73,2]]},"1052":{"position":[[19,2]]},"1424":{"position":[[437,2]]},"1511":{"position":[[31,2]]},"1566":{"position":[[219,2]]},"2418":{"position":[[370,2]]},"2564":{"position":[[186,2]]},"2621":{"position":[[16,2]]},"2770":{"position":[[89,2],[109,2]]},"3094":{"position":[[155,2]]},"3100":{"position":[[93,2]]},"3102":{"position":[[48,2]]},"3106":{"position":[[2,2]]},"3118":{"position":[[61,2]]},"3122":{"position":[[42,2]]},"3595":{"position":[[85,2]]},"3597":{"position":[[156,2],[436,2]]}}}],["考试",{"_index":1486,"t":{"199":{"position":[[422,2],[439,2]]}}}],["者",{"_index":5482,"t":{"1795":{"position":[[6,1],[2606,1],[2744,1]]},"1801":{"position":[[1505,1]]},"1803":{"position":[[3537,1]]},"1821":{"position":[[300,1]]},"2309":{"position":[[115,1]]},"2768":{"position":[[970,1]]},"3242":{"position":[[130,1]]},"3910":{"position":[[127,1]]},"3926":{"position":[[431,1]]},"3934":{"position":[[2235,1]]}}}],["而且",{"_index":488,"t":{"85":{"position":[[158,2]]},"338":{"position":[[1204,2]]},"340":{"position":[[1233,2]]},"431":{"position":[[38,2]]},"587":{"position":[[75,2],[2084,2]]},"675":{"position":[[105,2]]},"1221":{"position":[[58,2]]},"1223":{"position":[[269,2]]},"1374":{"position":[[58,2],[125,2]]},"1520":{"position":[[139,2]]},"1578":{"position":[[45,2]]},"1711":{"position":[[29,2]]},"1775":{"position":[[3857,2]]},"2335":{"position":[[57,2]]},"2583":{"position":[[11,2]]},"2705":{"position":[[38,2]]},"2885":{"position":[[26,2]]},"2925":{"position":[[457,2]]},"2941":{"position":[[457,2]]},"2955":{"position":[[457,2]]},"3430":{"position":[[1891,2]]},"3612":{"position":[[58,2]]},"3620":{"position":[[36,2]]},"3924":{"position":[[2083,2],[2229,2]]}}}],["而已",{"_index":5341,"t":{"1717":{"position":[[70,2]]}}}],["而是",{"_index":1126,"t":{"148":{"position":[[312,2]]},"359":{"position":[[124,2]]},"363":{"position":[[93,2]]},"1269":{"position":[[231,2]]},"1309":{"position":[[95,2]]},"1385":{"position":[[45,2]]},"1414":{"position":[[14,2]]},"2731":{"position":[[81,2]]},"3313":{"position":[[19,2]]},"3352":{"position":[[696,2]]}}}],["耐心",{"_index":4753,"t":{"1511":{"position":[[2133,2]]}}}],["耗",{"_index":9300,"t":{"3922":{"position":[[1438,1]]}}}],["耗尽",{"_index":6118,"t":{"2311":{"position":[[355,2]]}}}],["耗时",{"_index":799,"t":{"114":{"position":[[619,2]]},"2468":{"position":[[58,2]]},"2829":{"position":[[700,2]]},"3446":{"position":[[1094,2]]},"3768":{"position":[[566,2],[573,2],[2419,2]]},"3928":{"position":[[1656,2]]}}}],["耗费",{"_index":8462,"t":{"3626":{"position":[[67,2]]}}}],["耦",{"_index":3109,"t":{"587":{"position":[[2082,1]]},"1385":{"position":[[120,1]]},"1408":{"position":[[1272,1]]},"1697":{"position":[[63,1]]},"1793":{"position":[[63,1]]}}}],["耦合",{"_index":4211,"t":{"1389":{"position":[[57,2],[104,2],[133,2],[154,2]]},"2311":{"position":[[153,2]]},"3092":{"position":[[4,2]]},"3096":{"position":[[12,2]]}}}],["耳",{"_index":7731,"t":{"3242":{"position":[[78,1]]},"3910":{"position":[[75,1]]},"3934":{"position":[[2172,1]]}}}],["耶",{"_index":4689,"t":{"1511":{"position":[[1351,1],[1352,1]]}}}],["耻辱柱",{"_index":6906,"t":{"2768":{"position":[[44,3],[69,3]]}}}],["聊天",{"_index":7522,"t":{"3142":{"position":[[229,2]]},"3154":{"position":[[160,2]]},"3156":{"position":[[222,2]]}}}],["聊天工具",{"_index":7489,"t":{"3138":{"position":[[29,4]]},"3140":{"position":[[87,4]]}}}],["聊表心意",{"_index":4830,"t":{"1511":{"position":[[3094,4]]}}}],["职责",{"_index":2267,"t":{"353":{"position":[[9,2],[24,2]]},"585":{"position":[[574,2]]}}}],["联",{"_index":7599,"t":{"3211":{"position":[[71,1]]},"3213":{"position":[[65,1]]}}}],["联合",{"_index":3819,"t":{"954":{"position":[[363,2]]}}}],["联系",{"_index":5761,"t":{"1885":{"position":[[317,2]]},"3011":{"position":[[63,2]]}}}],["联系方式",{"_index":4554,"t":{"1509":{"position":[[281,4]]},"3063":{"position":[[1677,4]]},"3706":{"position":[[1688,4]]}}}],["联络人",{"_index":7478,"t":{"3136":{"position":[[134,3],[140,3],[152,3]]}}}],["联网",{"_index":2012,"t":{"306":{"position":[[111,2]]},"1383":{"position":[[233,2]]}}}],["联调",{"_index":8412,"t":{"3608":{"position":[[61,2]]}}}],["聚合",{"_index":3856,"t":{"986":{"position":[[97,2]]},"1566":{"position":[[443,2]]},"3096":{"position":[[116,2]]}}}],["聚焦",{"_index":9527,"t":{"3934":{"position":[[3065,2]]}}}],["聚集",{"_index":6142,"t":{"2326":{"position":[[68,2]]}}}],["肉",{"_index":6957,"t":{"2768":{"position":[[870,1]]}}}],["肯定",{"_index":4231,"t":{"1392":{"position":[[110,2]]},"3122":{"position":[[8,2]]}}}],["肯尼亚",{"_index":6675,"t":{"2559":{"position":[[2432,3]]}}}],["背后",{"_index":8996,"t":{"3844":{"position":[[672,2]]}}}],["背景",{"_index":5014,"t":{"1555":{"position":[[165,2],[385,2]]}}}],["胜",{"_index":4825,"t":{"1511":{"position":[[3036,1]]},"3942":{"position":[[471,1]]}}}],["胡杨",{"_index":4802,"t":{"1511":{"position":[[2669,2]]}}}],["能",{"_index":2241,"t":{"340":{"position":[[1912,1]]},"587":{"position":[[2087,1]]},"589":{"position":[[57,1]]},"1103":{"position":[[152,1]]},"1196":{"position":[[13,1]]},"1198":{"position":[[22,1]]},"1358":{"position":[[43,1]]},"1374":{"position":[[61,1]]},"1389":{"position":[[165,1]]},"1392":{"position":[[44,1]]},"1408":{"position":[[1116,1]]},"1416":{"position":[[38,1]]},"1488":{"position":[[1696,1]]},"1511":{"position":[[2002,1],[3244,1]]},"1663":{"position":[[245,1]]},"1903":{"position":[[467,1]]},"2175":{"position":[[286,1]]},"2245":{"position":[[57,1],[130,1]]},"2770":{"position":[[53,1]]},"2803":{"position":[[57,1]]},"3088":{"position":[[137,1]]},"3096":{"position":[[31,1]]},"3112":{"position":[[11,1]]},"3140":{"position":[[93,1]]},"3242":{"position":[[284,1]]},"3414":{"position":[[150,1]]},"3688":{"position":[[116,1]]},"3779":{"position":[[137,1],[150,1]]},"3802":{"position":[[134,1],[147,1]]},"3817":{"position":[[143,1],[156,1]]},"3910":{"position":[[281,1]]},"3924":{"position":[[2086,1]]},"3926":{"position":[[556,1]]},"3934":{"position":[[2466,1]]},"3974":{"position":[[883,1]]},"3992":{"position":[[3875,1]]}}}],["能力",{"_index":1305,"t":{"184":{"position":[[59,2]]},"540":{"position":[[56,2]]},"587":{"position":[[2267,2]]},"1430":{"position":[[7,2]]},"1761":{"position":[[197,2],[474,2],[499,2]]},"3088":{"position":[[149,2]]},"3104":{"position":[[33,2]]},"3242":{"position":[[138,2]]},"3612":{"position":[[21,2]]},"3910":{"position":[[135,2]]},"3934":{"position":[[2243,2]]}}}],["能否",{"_index":7480,"t":{"3136":{"position":[[149,2]]},"3966":{"position":[[1669,2]]},"3992":{"position":[[3928,2]]}}}],["能够",{"_index":2233,"t":{"340":{"position":[[1235,2],[1955,2]]},"457":{"position":[[3,2]]},"504":{"position":[[293,2]]},"526":{"position":[[15,2]]},"528":{"position":[[398,2]]},"799":{"position":[[42,2]]},"841":{"position":[[109,2]]},"941":{"position":[[46,2],[200,2]]},"943":{"position":[[0,2],[20,2],[42,2]]},"988":{"position":[[45,2]]},"1048":{"position":[[46,2]]},"1050":{"position":[[51,2]]},"1101":{"position":[[42,2]]},"1155":{"position":[[42,2]]},"1761":{"position":[[348,2],[574,2]]},"1801":{"position":[[977,2]]},"1803":{"position":[[3147,2]]},"2359":{"position":[[431,2]]},"2497":{"position":[[43,2]]},"2617":{"position":[[5,2]]},"2701":{"position":[[51,2]]},"2740":{"position":[[38,2]]},"3148":{"position":[[132,2]]},"3150":{"position":[[72,2]]},"3610":{"position":[[0,2]]},"3779":{"position":[[569,2]]},"3802":{"position":[[625,2]]},"3817":{"position":[[524,2]]},"3910":{"position":[[1103,2]]},"3924":{"position":[[2586,2]]},"3926":{"position":[[667,2]]}}}],["脚手架",{"_index":431,"t":{"53":{"position":[[29,3],[53,3]]},"64":{"position":[[42,3],[79,3]]},"77":{"position":[[29,3],[53,3]]},"93":{"position":[[657,3]]},"1969":{"position":[[92,3],[115,3],[146,3]]},"1983":{"position":[[4,3],[27,3],[58,3]]},"2006":{"position":[[4,3],[27,3],[58,3]]},"2772":{"position":[[4,3],[27,3],[58,3]]},"2860":{"position":[[37,3],[60,3],[91,3]]},"3313":{"position":[[5,3]]},"3315":{"position":[[24,3],[51,3]]},"3321":{"position":[[193,3],[212,3]]},"3323":{"position":[[389,3]]},"3327":{"position":[[6,3]]},"3331":{"position":[[0,3],[156,3],[183,3]]},"3912":{"position":[[1297,3],[1535,3],[2520,3],[2735,3]]},"3916":{"position":[[2521,3]]},"3918":{"position":[[3508,3]]},"3920":{"position":[[1854,3]]},"3930":{"position":[[788,3]]},"3932":{"position":[[120,3],[1415,3]]},"3936":{"position":[[250,3],[824,3],[916,3]]},"3938":{"position":[[422,3]]},"3992":{"position":[[3996,3]]},"3996":{"position":[[70,3],[118,3],[1307,3],[1535,3]]},"3998":{"position":[[780,3]]},"4000":{"position":[[799,3]]},"4002":{"position":[[13,3]]}}}],["脚本",{"_index":2436,"t":{"404":{"position":[[212,2]]},"675":{"position":[[51,2],[175,2],[217,2]]},"696":{"position":[[2,2]]},"1499":{"position":[[29,2]]},"2517":{"position":[[47,2]]},"3932":{"position":[[1146,2]]},"3992":{"position":[[3584,2]]}}}],["脱敏",{"_index":7031,"t":{"2782":{"position":[[10,2],[23,2],[131,2],[176,2],[203,2]]},"2784":{"position":[[17,2],[21,2]]},"2788":{"position":[[110,2]]},"2790":{"position":[[6,2],[81,2],[367,2],[641,2]]},"2792":{"position":[[15,2]]},"2794":{"position":[[20,2],[34,2]]},"2796":{"position":[[21,2],[198,2],[306,2],[356,2],[530,2],[557,2]]},"2798":{"position":[[146,2]]},"3928":{"position":[[656,2]]},"3930":{"position":[[442,2],[469,2],[727,2],[1341,2]]},"3944":{"position":[[313,2]]},"3968":{"position":[[128,2],[363,2]]}}}],["脱离",{"_index":4228,"t":{"1392":{"position":[[62,2]]}}}],["脱轨",{"_index":3714,"t":{"887":{"position":[[103,2]]}}}],["脸",{"_index":1177,"t":{"166":{"position":[[6,1]]},"2768":{"position":[[576,1]]},"3242":{"position":[[184,1]]},"3910":{"position":[[181,1]]},"3934":{"position":[[2350,1]]}}}],["腾",{"_index":4685,"t":{"1511":{"position":[[1313,1]]}}}],["腾讯",{"_index":6991,"t":{"2768":{"position":[[1557,2]]},"3138":{"position":[[69,2]]}}}],["臃肿",{"_index":1542,"t":{"206":{"position":[[200,2]]},"2684":{"position":[[384,2]]}}}],["自主",{"_index":9435,"t":{"3928":{"position":[[305,2]]}}}],["自创",{"_index":1876,"t":{"261":{"position":[[15,2]]}}}],["自动",{"_index":174,"t":{"11":{"position":[[742,2]]},"13":{"position":[[7,2],[30,2],[426,2]]},"127":{"position":[[1339,2]]},"133":{"position":[[628,2]]},"146":{"position":[[383,2],[547,2]]},"148":{"position":[[223,2],[392,2],[415,2]]},"206":{"position":[[338,2]]},"218":{"position":[[310,2],[332,2]]},"220":{"position":[[201,2]]},"302":{"position":[[148,2]]},"327":{"position":[[69,2]]},"329":{"position":[[98,2]]},"336":{"position":[[374,2]]},"359":{"position":[[301,2]]},"361":{"position":[[25,2]]},"445":{"position":[[36,2],[752,2]]},"447":{"position":[[36,2]]},"449":{"position":[[24,2]]},"451":{"position":[[281,2]]},"504":{"position":[[131,2]]},"526":{"position":[[242,2],[253,2]]},"532":{"position":[[212,2]]},"604":{"position":[[61,2]]},"639":{"position":[[434,2]]},"688":{"position":[[45,2]]},"715":{"position":[[28,2],[76,2]]},"730":{"position":[[50,2]]},"933":{"position":[[426,2],[799,2]]},"981":{"position":[[51,2]]},"1050":{"position":[[57,2]]},"1117":{"position":[[1093,2]]},"1141":{"position":[[67,2]]},"1145":{"position":[[519,2]]},"1214":{"position":[[124,2]]},"1234":{"position":[[801,2],[885,2]]},"1267":{"position":[[252,2],[261,2]]},"1309":{"position":[[108,2]]},"1313":{"position":[[269,2]]},"1385":{"position":[[92,2]]},"1396":{"position":[[19,2]]},"1432":{"position":[[19,2],[69,2]]},"1488":{"position":[[1669,2],[1710,2]]},"1535":{"position":[[590,2]]},"1549":{"position":[[117,2]]},"1576":{"position":[[151,2]]},"1580":{"position":[[355,2],[479,2]]},"1592":{"position":[[152,2],[268,2]]},"1594":{"position":[[200,2],[346,2],[376,2]]},"1615":{"position":[[316,2]]},"1617":{"position":[[1193,2]]},"1621":{"position":[[715,2]]},"1631":{"position":[[40,2]]},"1643":{"position":[[21,2]]},"1659":{"position":[[1313,2]]},"1705":{"position":[[35,2]]},"1711":{"position":[[353,2]]},"1755":{"position":[[324,2]]},"1765":{"position":[[100,2]]},"1771":{"position":[[102,2]]},"1781":{"position":[[460,2]]},"1783":{"position":[[10,2],[57,2],[97,2]]},"1923":{"position":[[126,2]]},"1981":{"position":[[49,2],[73,2]]},"1993":{"position":[[49,2],[73,2]]},"2016":{"position":[[57,2],[81,2]]},"2184":{"position":[[239,2]]},"2245":{"position":[[27,2]]},"2261":{"position":[[426,2],[441,2]]},"2294":{"position":[[790,2]]},"2296":{"position":[[7,2],[30,2],[426,2]]},"2313":{"position":[[518,2]]},"2352":{"position":[[189,2]]},"2361":{"position":[[324,2]]},"2472":{"position":[[399,2]]},"2497":{"position":[[203,2]]},"2508":{"position":[[27,2]]},"2534":{"position":[[42,2]]},"2536":{"position":[[159,2],[224,2]]},"2540":{"position":[[29,2]]},"2544":{"position":[[122,2],[143,2]]},"2547":{"position":[[123,2]]},"2549":{"position":[[8,2],[18,2]]},"2625":{"position":[[69,2],[413,2]]},"2657":{"position":[[35,2]]},"2684":{"position":[[396,2]]},"2686":{"position":[[123,2]]},"2690":{"position":[[364,2]]},"2798":{"position":[[134,2]]},"2813":{"position":[[1149,2]]},"2819":{"position":[[473,2],[603,2],[619,2]]},"2834":{"position":[[40,2],[48,2]]},"2836":{"position":[[584,2],[1790,2]]},"2843":{"position":[[199,2]]},"2921":{"position":[[83,2]]},"2937":{"position":[[51,2],[1270,2]]},"2985":{"position":[[16,2]]},"3063":{"position":[[1370,2]]},"3071":{"position":[[1124,2]]},"3078":{"position":[[43,2]]},"3126":{"position":[[505,2]]},"3131":{"position":[[32,2]]},"3287":{"position":[[148,2],[473,2]]},"3291":{"position":[[473,2],[1245,2],[2164,2]]},"3294":{"position":[[60,2]]},"3296":{"position":[[25,2]]},"3385":{"position":[[54,2]]},"3432":{"position":[[257,2]]},"3434":{"position":[[242,2],[678,2]]},"3452":{"position":[[615,2]]},"3464":{"position":[[474,2],[489,2]]},"3500":{"position":[[793,2]]},"3575":{"position":[[381,2]]},"3601":{"position":[[64,2]]},"3626":{"position":[[436,2]]},"3636":{"position":[[615,2]]},"3640":{"position":[[457,2]]},"3644":{"position":[[1313,2]]},"3664":{"position":[[9,2]]},"3678":{"position":[[93,2]]},"3700":{"position":[[69,2]]},"3704":{"position":[[837,2]]},"3706":{"position":[[1381,2]]},"3740":{"position":[[70,2]]},"3760":{"position":[[37,2]]},"3764":{"position":[[16,2]]},"3768":{"position":[[45,2]]},"3774":{"position":[[238,2]]},"3808":{"position":[[51,2]]},"3856":{"position":[[12,2]]},"3910":{"position":[[500,2],[1393,2],[2491,2]]},"3912":{"position":[[1895,2]]},"3914":{"position":[[1160,2],[2963,2],[2982,2],[3021,2]]},"3916":{"position":[[3611,2]]},"3922":{"position":[[1823,2]]},"3924":{"position":[[4377,2]]},"3934":{"position":[[702,2]]},"3938":{"position":[[656,2]]},"3946":{"position":[[56,2]]},"3948":{"position":[[79,2]]},"3950":{"position":[[409,2]]},"3958":{"position":[[79,2],[312,2]]},"3960":{"position":[[142,2]]},"3964":{"position":[[121,2],[599,2],[757,2],[947,2]]},"3966":{"position":[[418,2],[1938,2]]},"3970":{"position":[[9,2],[83,2]]},"3974":{"position":[[215,2],[549,2]]},"3976":{"position":[[228,2]]},"3980":{"position":[[259,2]]},"3986":{"position":[[1553,2],[1726,2],[1767,2]]},"3988":{"position":[[90,2]]},"3990":{"position":[[429,2],[479,2]]},"3992":{"position":[[182,2],[1558,2],[2100,2],[2420,2],[3910,2]]},"3996":{"position":[[474,2],[1561,2]]},"3998":{"position":[[342,2],[389,2]]},"4006":{"position":[[448,2]]}}}],["自动化",{"_index":3424,"t":{"728":{"position":[[30,3]]},"1385":{"position":[[134,3]]},"1488":{"position":[[1564,3]]},"3986":{"position":[[953,3]]}}}],["自动识别",{"_index":8512,"t":{"3688":{"position":[[785,4]]},"3940":{"position":[[15,4]]},"3962":{"position":[[253,4]]}}}],["自定义",{"_index":974,"t":{"127":{"position":[[770,3]]},"131":{"position":[[44,3]]},"133":{"position":[[302,3]]},"135":{"position":[[468,3]]},"146":{"position":[[281,3]]},"327":{"position":[[106,3]]},"413":{"position":[[143,3]]},"417":{"position":[[34,3]]},"427":{"position":[[0,3]]},"445":{"position":[[130,3],[927,3],[1021,3]]},"447":{"position":[[2,3]]},"453":{"position":[[59,3]]},"455":{"position":[[114,3],[530,3]]},"461":{"position":[[32,3]]},"498":{"position":[[23,3]]},"526":{"position":[[63,3],[119,3]]},"570":{"position":[[1750,3]]},"587":{"position":[[1039,3],[2090,3],[2261,3]]},"591":{"position":[[26,3]]},"606":{"position":[[870,3]]},"608":{"position":[[63,3],[594,3]]},"610":{"position":[[33,3]]},"615":{"position":[[36,3],[49,3],[969,3],[1085,3]]},"617":{"position":[[1685,3]]},"836":{"position":[[371,3]]},"893":{"position":[[23,3]]},"988":{"position":[[359,3]]},"1041":{"position":[[8,3],[65,3],[389,3],[447,3],[1012,3],[1129,3],[1356,3]]},"1056":{"position":[[401,3]]},"1066":{"position":[[92,3],[1451,3]]},"1313":{"position":[[130,3],[254,3]]},"1412":{"position":[[2519,3]]},"1418":{"position":[[125,3],[295,3]]},"1440":{"position":[[16,3]]},"1468":{"position":[[59,3]]},"1578":{"position":[[177,3]]},"1592":{"position":[[126,3],[285,3]]},"1594":{"position":[[134,3],[173,3],[363,3],[385,3]]},"1596":{"position":[[238,3],[276,3]]},"1598":{"position":[[13,3],[33,3]]},"1600":{"position":[[29,3],[62,3]]},"1611":{"position":[[17,3]]},"1617":{"position":[[10,3],[17,3],[26,3],[38,3],[46,3],[1098,3],[1129,3]]},"1631":{"position":[[345,3],[383,3]]},"1641":{"position":[[5,3],[546,3]]},"1661":{"position":[[641,3]]},"1775":{"position":[[52,3]]},"1797":{"position":[[52,3],[258,3]]},"1799":{"position":[[131,3],[994,3]]},"1801":{"position":[[182,3],[1730,3],[2435,3],[3326,3]]},"1803":{"position":[[2358,3],[4390,3],[5539,3]]},"1805":{"position":[[54,3]]},"1809":{"position":[[45,3]]},"1855":{"position":[[2,3]]},"1881":{"position":[[12,3]]},"1887":{"position":[[532,3]]},"1894":{"position":[[2,3]]},"1903":{"position":[[265,3]]},"1909":{"position":[[253,3]]},"1913":{"position":[[257,3]]},"1933":{"position":[[645,3]]},"2055":{"position":[[217,3]]},"2208":{"position":[[154,3]]},"2333":{"position":[[315,3],[482,3],[552,3]]},"2385":{"position":[[125,3]]},"2393":{"position":[[177,3]]},"2395":{"position":[[108,3]]},"2436":{"position":[[49,3]]},"2438":{"position":[[250,3]]},"2440":{"position":[[286,3]]},"2442":{"position":[[69,3]]},"2448":{"position":[[154,3]]},"2542":{"position":[[105,3],[156,3]]},"2547":{"position":[[92,3]]},"2575":{"position":[[0,3]]},"2581":{"position":[[6,3]]},"2613":{"position":[[72,3]]},"2684":{"position":[[354,3]]},"2688":{"position":[[140,3]]},"2725":{"position":[[112,3],[574,3],[2191,3],[2594,3]]},"2727":{"position":[[809,3]]},"2729":{"position":[[52,3]]},"2784":{"position":[[32,3]]},"2794":{"position":[[31,3]]},"2796":{"position":[[18,3]]},"2798":{"position":[[138,3]]},"2819":{"position":[[571,3]]},"2848":{"position":[[1214,3]]},"2868":{"position":[[123,3]]},"2875":{"position":[[35,3]]},"2881":{"position":[[84,3],[434,3],[829,3]]},"2967":{"position":[[56,3]]},"2969":{"position":[[80,3]]},"2985":{"position":[[194,3]]},"3023":{"position":[[638,3]]},"3168":{"position":[[81,3]]},"3189":{"position":[[78,3],[370,3]]},"3287":{"position":[[3052,3]]},"3426":{"position":[[159,3]]},"3430":{"position":[[1893,3],[3193,3],[3636,3],[4498,3]]},"3432":{"position":[[764,3],[1104,3],[1162,3],[1288,3],[2613,3],[3138,3],[3150,3],[3901,3],[4839,3]]},"3434":{"position":[[511,3],[843,3],[1168,3],[1322,3],[2229,3]]},"3440":{"position":[[100,3]]},"3442":{"position":[[78,3]]},"3448":{"position":[[273,3]]},"3454":{"position":[[75,3],[80,3]]},"3632":{"position":[[36,3]]},"3634":{"position":[[27,3]]},"3636":{"position":[[79,3]]},"3648":{"position":[[91,3]]},"3664":{"position":[[72,3]]},"3668":{"position":[[21,3]]},"3670":{"position":[[93,3]]},"3680":{"position":[[7,3]]},"3698":{"position":[[245,3]]},"3700":{"position":[[106,3]]},"3722":{"position":[[340,3]]},"3752":{"position":[[97,3]]},"3806":{"position":[[46,3],[1273,3],[1299,3],[2667,3],[3169,3],[3754,3],[3878,3]]},"3808":{"position":[[541,3],[1687,3],[2409,3],[2533,3],[2657,3],[2781,3],[2905,3]]},"3832":{"position":[[35,3]]},"3912":{"position":[[1007,3],[1021,3]]},"3914":{"position":[[3126,3]]},"3916":{"position":[[893,3]]},"3918":{"position":[[1083,3]]},"3920":{"position":[[627,3]]},"3924":{"position":[[497,3],[1351,3],[1600,3]]},"3928":{"position":[[250,3]]},"3930":{"position":[[355,3],[990,3],[1009,3]]},"3932":{"position":[[824,3]]},"3936":{"position":[[21,3],[1554,3],[1817,3]]},"3940":{"position":[[360,3]]},"3946":{"position":[[117,3]]},"3948":{"position":[[150,3]]},"3950":{"position":[[833,3]]},"3954":{"position":[[160,3]]},"3956":{"position":[[117,3],[128,3],[260,3]]},"3962":{"position":[[1585,3]]},"3964":{"position":[[667,3],[1086,3]]},"3966":{"position":[[1350,3]]},"3968":{"position":[[115,3]]},"3974":{"position":[[312,3]]},"3976":{"position":[[424,3],[646,3]]},"3978":{"position":[[99,3],[1008,3],[1371,3]]},"3984":{"position":[[932,3]]},"3986":{"position":[[102,3],[414,3],[1573,3]]},"3988":{"position":[[396,3]]},"3992":{"position":[[745,3],[2964,3],[3600,3]]},"4000":{"position":[[384,3],[875,3]]}}}],["自己",{"_index":1056,"t":{"133":{"position":[[51,2]]},"184":{"position":[[53,2]]},"302":{"position":[[118,2]]},"373":{"position":[[182,2]]},"401":{"position":[[75,2]]},"818":{"position":[[74,2]]},"836":{"position":[[361,2]]},"1073":{"position":[[25,2]]},"1214":{"position":[[23,2]]},"1389":{"position":[[15,2]]},"1416":{"position":[[214,2],[266,2],[310,2]]},"1495":{"position":[[1258,2]]},"1497":{"position":[[221,2]]},"1801":{"position":[[1717,2],[2513,2]]},"2557":{"position":[[166,2]]},"2619":{"position":[[30,2]]},"2770":{"position":[[51,2],[83,2],[234,2]]},"2889":{"position":[[72,2]]},"2910":{"position":[[221,2],[235,2]]},"3242":{"position":[[256,2]]},"3352":{"position":[[442,2],[665,2],[708,2]]},"3430":{"position":[[3386,2]]},"3432":{"position":[[1612,2],[3355,2]]},"3434":{"position":[[2439,2]]},"3626":{"position":[[159,2]]},"3718":{"position":[[92,2]]},"3910":{"position":[[14,2],[253,2]]},"3920":{"position":[[572,2]]},"3924":{"position":[[2728,2]]},"3934":{"position":[[2436,2]]}}}],["自带",{"_index":655,"t":{"104":{"position":[[36,2]]},"2551":{"position":[[23,2]]},"2813":{"position":[[28,2]]},"3224":{"position":[[1858,2]]},"3470":{"position":[[31,2],[158,2]]}}}],["自此",{"_index":1993,"t":{"302":{"position":[[106,2]]},"3069":{"position":[[275,2]]},"3926":{"position":[[436,2]]}}}],["自然",{"_index":5441,"t":{"1761":{"position":[[214,2]]}}}],["自由",{"_index":1556,"t":{"210":{"position":[[213,2]]},"261":{"position":[[100,2]]},"373":{"position":[[171,2]]},"1925":{"position":[[884,2]]},"2879":{"position":[[19,2]]},"3986":{"position":[[240,2]]}}}],["自知",{"_index":7727,"t":{"3242":{"position":[[59,2]]},"3910":{"position":[[56,2]]},"3934":{"position":[[2141,2]]}}}],["自行",{"_index":1016,"t":{"127":{"position":[[1528,2],[1542,2],[1556,2]]},"148":{"position":[[344,2]]},"2868":{"position":[[179,2]]},"3470":{"position":[[135,2]]},"3597":{"position":[[51,2]]},"3824":{"position":[[183,2]]}}}],["自责",{"_index":9415,"t":{"3926":{"position":[[481,2]]}}}],["自身",{"_index":8820,"t":{"3785":{"position":[[30,2]]},"3812":{"position":[[32,2]]},"3821":{"position":[[36,2]]}}}],["自述文件",{"_index":4527,"t":{"1509":{"position":[[31,4]]}}}],["至于",{"_index":3314,"t":{"677":{"position":[[33,2]]},"704":{"position":[[33,2]]},"1073":{"position":[[36,2]]}}}],["至少",{"_index":1997,"t":{"302":{"position":[[159,2]]},"608":{"position":[[818,2]]},"1576":{"position":[[116,2]]}}}],["良",{"_index":4776,"t":{"1511":{"position":[[2379,1],[3369,1]]}}}],["良好",{"_index":2001,"t":{"304":{"position":[[93,2]]}}}],["艺名",{"_index":9399,"t":{"3926":{"position":[[305,2]]}}}],["节",{"_index":2375,"t":{"397":{"position":[[186,1]]},"1474":{"position":[[230,1]]},"3926":{"position":[[210,1]]},"3986":{"position":[[1167,1]]}}}],["节点",{"_index":1798,"t":{"245":{"position":[[194,2]]},"439":{"position":[[123,2],[187,2]]},"441":{"position":[[80,2]]},"449":{"position":[[88,2]]},"453":{"position":[[407,2]]},"688":{"position":[[106,2]]},"1420":{"position":[[474,2],[497,2]]},"1474":{"position":[[176,2],[326,2]]},"1535":{"position":[[29,2],[442,2]]},"1755":{"position":[[370,2]]},"2023":{"position":[[108,2]]},"2553":{"position":[[27,2]]},"2625":{"position":[[128,2],[259,2]]},"2713":{"position":[[355,2]]},"2723":{"position":[[87,2]]},"2875":{"position":[[550,2]]},"2891":{"position":[[30,2]]},"2981":{"position":[[15,2]]},"2985":{"position":[[90,2],[121,2]]},"2991":{"position":[[24,2]]},"3001":{"position":[[35,2],[58,2]]},"3009":{"position":[[29,2]]},"3015":{"position":[[28,2]]},"3023":{"position":[[32,2]]},"3031":{"position":[[27,2]]},"3039":{"position":[[13,2]]},"3047":{"position":[[26,2]]},"3055":{"position":[[33,2]]},"3063":{"position":[[33,2]]},"3071":{"position":[[90,2]]},"3110":{"position":[[118,2]]},"3118":{"position":[[37,2]]},"3120":{"position":[[1,2],[118,2]]},"3321":{"position":[[344,2]]},"3432":{"position":[[769,2],[939,2],[994,2],[1109,2],[1167,2]]},"3434":{"position":[[848,2],[928,2],[1014,2],[1173,2],[1327,2]]},"3916":{"position":[[1872,2]]},"3972":{"position":[[161,2]]}}}],["节省",{"_index":4857,"t":{"1511":{"position":[[3521,2]]},"2788":{"position":[[212,2]]}}}],["芊",{"_index":6947,"t":{"2768":{"position":[[718,1]]}}}],["芝麻",{"_index":4840,"t":{"1511":{"position":[[3221,2]]}}}],["芬兰",{"_index":6546,"t":{"2559":{"position":[[1071,2],[2452,2]]}}}],["芬兰语",{"_index":6545,"t":{"2559":{"position":[[1056,3],[1066,3]]}}}],["芯",{"_index":4841,"t":{"1511":{"position":[[3223,1]]},"2768":{"position":[[717,1]]}}}],["芯片",{"_index":9506,"t":{"3934":{"position":[[750,2]]}}}],["花",{"_index":4695,"t":{"1511":{"position":[[1404,1]]}}}],["苦恼",{"_index":492,"t":{"85":{"position":[[174,2]]}}}],["英国",{"_index":6510,"t":{"2559":{"position":[[776,2],[785,2],[798,2],[812,2],[826,2],[841,2],[855,2],[869,2],[884,2],[901,2],[915,2],[936,2],[941,2],[950,2],[964,2]]}}}],["英文",{"_index":3160,"t":{"606":{"position":[[348,2],[366,2]]},"1385":{"position":[[149,2]]},"1387":{"position":[[60,2]]},"1761":{"position":[[390,2]]},"2540":{"position":[[68,2]]}}}],["英文名",{"_index":3156,"t":{"606":{"position":[[331,3]]}}}],["英文版",{"_index":4872,"t":{"1511":{"position":[[3813,3]]},"3990":{"position":[[781,3]]}}}],["英语",{"_index":5721,"t":{"1849":{"position":[[9,2]]}}}],["苹果",{"_index":5028,"t":{"1555":{"position":[[676,2]]}}}],["范围",{"_index":2683,"t":{"482":{"position":[[528,2]]},"587":{"position":[[860,2]]},"619":{"position":[[15,2],[118,2]]},"627":{"position":[[28,2]]},"1432":{"position":[[23,2]]},"1635":{"position":[[569,2]]},"2393":{"position":[[161,2]]},"2418":{"position":[[822,2]]},"2564":{"position":[[145,2]]},"2717":{"position":[[144,2]]},"3110":{"position":[[146,2]]},"3287":{"position":[[775,2]]},"3389":{"position":[[77,2]]},"3791":{"position":[[569,2],[1375,2]]},"3914":{"position":[[2625,2]]}}}],["范型",{"_index":9998,"t":{"3978":{"position":[[1713,2]]}}}],["荣耀",{"_index":7496,"t":{"3138":{"position":[[57,2]]}}}],["荷兰",{"_index":6508,"t":{"2559":{"position":[[742,2],[751,2],[765,2],[770,2]]}}}],["荷兰语",{"_index":6427,"t":{"2559":{"position":[[5,3],[17,3]]}}}],["莱",{"_index":6609,"t":{"2559":{"position":[[1718,1]]}}}],["获取",{"_index":242,"t":{"15":{"position":[[113,2],[263,2],[273,2]]},"17":{"position":[[107,2],[257,2],[267,2]]},"19":{"position":[[717,2]]},"21":{"position":[[56,2],[119,2],[145,2],[197,2]]},"23":{"position":[[38,2],[101,2],[127,2],[179,2]]},"26":{"position":[[45,2]]},"28":{"position":[[62,2]]},"30":{"position":[[28,2]]},"112":{"position":[[538,2],[631,2],[684,2],[797,2],[871,2],[940,2],[1008,2],[1078,2],[1341,2],[1472,2]]},"133":{"position":[[942,2]]},"144":{"position":[[71,2],[255,2]]},"148":{"position":[[513,2]]},"150":{"position":[[3,2],[95,2]]},"218":{"position":[[109,2]]},"253":{"position":[[321,2]]},"272":{"position":[[271,2]]},"369":{"position":[[68,2],[150,2],[199,2],[254,2],[273,2],[512,2]]},"415":{"position":[[175,2]]},"417":{"position":[[225,2],[333,2]]},"431":{"position":[[12,2]]},"443":{"position":[[52,2]]},"455":{"position":[[0,2],[7,2],[39,2]]},"494":{"position":[[40,2],[391,2],[516,2],[596,2]]},"526":{"position":[[287,2]]},"528":{"position":[[400,2],[462,2]]},"530":{"position":[[63,2],[564,2],[619,2]]},"570":{"position":[[719,2],[831,2],[1082,2],[1174,2],[1223,2],[1275,2],[1353,2],[1411,2],[1514,2],[1549,2]]},"572":{"position":[[486,2],[533,2],[602,2],[931,2],[978,2],[1047,2]]},"915":{"position":[[436,2]]},"933":{"position":[[547,2],[597,2]]},"949":{"position":[[325,2]]},"1039":{"position":[[63,2],[564,2],[619,2]]},"1066":{"position":[[85,2]]},"1129":{"position":[[610,2],[662,2],[711,2],[1600,2],[1652,2],[1701,2]]},"1208":{"position":[[45,2]]},"1223":{"position":[[282,2]]},"1225":{"position":[[47,2]]},"1424":{"position":[[1689,2],[1698,2],[1761,2]]},"1434":{"position":[[90,2],[145,2]]},"1440":{"position":[[257,2]]},"1483":{"position":[[804,2]]},"1488":{"position":[[165,2]]},"1495":{"position":[[165,2]]},"1539":{"position":[[1920,2],[1940,2]]},"1557":{"position":[[34,2]]},"1559":{"position":[[3,2],[49,2]]},"1561":{"position":[[19,2],[105,2]]},"1711":{"position":[[789,2]]},"1739":{"position":[[87,2],[430,2],[440,2]]},"1741":{"position":[[346,2],[495,2],[1227,2]]},"1901":{"position":[[545,2]]},"1913":{"position":[[459,2],[549,2],[619,2]]},"1919":{"position":[[289,2]]},"1925":{"position":[[386,2],[479,2],[533,2],[646,2],[720,2],[789,2],[857,2],[940,2],[1203,2],[1334,2]]},"1933":{"position":[[334,2],[448,2],[502,2],[547,2]]},"1941":{"position":[[310,2],[424,2],[1066,2]]},"2023":{"position":[[3,2],[104,2]]},"2033":{"position":[[31,2]]},"2035":{"position":[[46,2]]},"2047":{"position":[[61,2]]},"2057":{"position":[[3,2],[79,2],[164,2]]},"2167":{"position":[[404,2]]},"2231":{"position":[[38,2],[101,2],[127,2],[179,2]]},"2235":{"position":[[45,2]]},"2237":{"position":[[62,2]]},"2239":{"position":[[28,2]]},"2243":{"position":[[94,2],[118,2],[153,2]]},"2251":{"position":[[126,2]]},"2348":{"position":[[16,2]]},"2476":{"position":[[109,2],[164,2]]},"2478":{"position":[[219,2],[274,2]]},"2508":{"position":[[22,2]]},"2526":{"position":[[140,2],[166,2]]},"2591":{"position":[[23,2],[51,2],[127,2]]},"2609":{"position":[[39,2],[60,2]]},"2705":{"position":[[12,2]]},"2713":{"position":[[169,2],[310,2],[317,2]]},"2717":{"position":[[353,2]]},"2790":{"position":[[637,2]]},"2831":{"position":[[558,2],[613,2]]},"2846":{"position":[[335,2],[360,2]]},"2933":{"position":[[519,2],[731,2]]},"2937":{"position":[[982,2],[1032,2]]},"2949":{"position":[[611,2]]},"2963":{"position":[[602,2]]},"2965":{"position":[[29,2]]},"2971":{"position":[[283,2]]},"2991":{"position":[[181,2]]},"3160":{"position":[[17,2]]},"3162":{"position":[[30,2]]},"3170":{"position":[[8,2]]},"3189":{"position":[[223,2],[254,2]]},"3215":{"position":[[758,2]]},"3224":{"position":[[228,2],[1682,2],[1709,2]]},"3273":{"position":[[762,2],[823,2],[847,2],[868,2],[887,2],[909,2],[934,2],[961,2]]},"3321":{"position":[[270,2]]},"3452":{"position":[[872,2]]},"3454":{"position":[[169,2]]},"3522":{"position":[[189,2],[1269,2]]},"3547":{"position":[[689,2]]},"3563":{"position":[[303,2],[507,2]]},"3680":{"position":[[346,2]]},"3688":{"position":[[557,2],[637,2]]},"3819":{"position":[[54,2],[206,2],[286,2]]},"3834":{"position":[[73,2]]},"3844":{"position":[[734,2]]},"3864":{"position":[[0,2]]},"3910":{"position":[[502,2]]},"3912":{"position":[[2582,2]]},"3914":{"position":[[3293,2]]},"3916":{"position":[[1740,2],[1836,2],[3868,2],[8954,2]]},"3918":{"position":[[2047,2],[3875,2]]},"3920":{"position":[[319,2]]},"3922":{"position":[[2316,2]]},"3924":{"position":[[238,2]]},"3930":{"position":[[55,2],[1007,2]]},"3936":{"position":[[393,2]]},"3940":{"position":[[102,2],[381,2],[774,2],[1445,2],[1525,2]]},"3946":{"position":[[290,2]]},"3952":{"position":[[229,2],[369,2]]},"3954":{"position":[[662,2]]},"3958":{"position":[[91,2]]},"3962":{"position":[[1887,2],[1905,2]]},"3966":{"position":[[69,2],[1382,2]]},"3968":{"position":[[118,2]]},"3972":{"position":[[510,2]]},"3974":{"position":[[640,2]]},"3978":{"position":[[317,2],[1192,2]]},"3982":{"position":[[693,2]]},"3984":{"position":[[678,2]]},"3986":{"position":[[134,2],[1538,2]]},"3988":{"position":[[292,2]]},"3990":{"position":[[168,2],[518,2],[756,2]]},"3992":{"position":[[522,2],[1571,2],[2474,2]]},"3996":{"position":[[325,2],[1631,2]]},"3998":{"position":[[685,2]]},"4000":{"position":[[25,2],[84,2]]}}}],["获取数据",{"_index":715,"t":{"112":{"position":[[509,4],[1278,4]]},"1925":{"position":[[357,4],[1140,4]]},"1941":{"position":[[731,4],[841,4]]}}}],["获得",{"_index":1318,"t":{"186":{"position":[[121,2]]},"397":{"position":[[91,2],[148,2],[316,2]]},"399":{"position":[[81,2],[182,2],[333,2],[434,2],[774,2]]},"401":{"position":[[34,2]]},"1509":{"position":[[235,2]]},"2910":{"position":[[289,2]]},"3118":{"position":[[359,2]]},"3168":{"position":[[50,2]]}}}],["菜",{"_index":4578,"t":{"1511":{"position":[[220,1]]}}}],["菜单",{"_index":2017,"t":{"308":{"position":[[21,2]]},"310":{"position":[[21,2]]},"3350":{"position":[[129,2]]}}}],["菲律宾共和国",{"_index":6525,"t":{"2559":{"position":[[888,6]]}}}],["营销",{"_index":6993,"t":{"2768":{"position":[[1579,2]]}}}],["萨尔瓦多",{"_index":6653,"t":{"2559":{"position":[[2232,4]]}}}],["落下",{"_index":9428,"t":{"3926":{"position":[[566,2]]}}}],["葡萄牙",{"_index":6622,"t":{"2559":{"position":[[1851,3],[1861,3],[1875,3],[1880,3]]}}}],["蒋",{"_index":4895,"t":{"1511":{"position":[[4160,1]]}}}],["蒙古",{"_index":6613,"t":{"2559":{"position":[[1761,2],[1770,2],[1774,2]]}}}],["蕴含",{"_index":8064,"t":{"3414":{"position":[[279,2]]}}}],["虚拟",{"_index":4134,"t":{"1358":{"position":[[18,2]]},"1368":{"position":[[5,2]]},"3968":{"position":[[7,2]]}}}],["虚拟目录",{"_index":7296,"t":{"2981":{"position":[[524,4]]},"3343":{"position":[[60,4]]},"3912":{"position":[[2219,4]]},"3940":{"position":[[722,4]]},"3942":{"position":[[62,4],[329,4]]},"3944":{"position":[[212,4],[579,4],[778,4]]},"3960":{"position":[[148,4]]},"3978":{"position":[[1780,4]]},"3996":{"position":[[18,4]]}}}],["虽然",{"_index":347,"t":{"21":{"position":[[123,2]]},"23":{"position":[[105,2]]},"2231":{"position":[[105,2]]},"2731":{"position":[[669,2]]},"2895":{"position":[[21,2]]},"3100":{"position":[[2,2]]},"3414":{"position":[[23,2]]}}}],["蛇形",{"_index":9445,"t":{"3930":{"position":[[375,2]]}}}],["螃蟹",{"_index":471,"t":{"85":{"position":[[69,2]]}}}],["行",{"_index":4136,"t":{"1358":{"position":[[59,1]]},"1511":{"position":[[746,1]]},"2261":{"position":[[438,1]]},"2745":{"position":[[297,1]]},"2747":{"position":[[332,1]]},"3098":{"position":[[23,1]]},"3273":{"position":[[798,1],[826,1],[850,1],[871,1],[890,1],[912,1],[937,1],[964,1]]},"3464":{"position":[[486,1]]},"3708":{"position":[[1451,1],[1813,1],[2278,1]]},"3918":{"position":[[1067,1]]}}}],["行不行",{"_index":4890,"t":{"1511":{"position":[[4070,3]]}}}],["行业",{"_index":1217,"t":{"172":{"position":[[20,2]]},"1141":{"position":[[97,2]]}}}],["行为",{"_index":2300,"t":{"363":{"position":[[67,2]]},"919":{"position":[[97,2]]},"1416":{"position":[[83,2]]},"1420":{"position":[[723,2]]},"1572":{"position":[[30,2],[42,2],[596,2]]},"1761":{"position":[[614,2]]},"1894":{"position":[[62,2]]},"2285":{"position":[[35,2]]},"3001":{"position":[[284,2]]},"3412":{"position":[[171,2]]},"3414":{"position":[[294,2]]},"3446":{"position":[[430,2],[497,2]]},"3448":{"position":[[748,2],[828,2],[1171,2]]},"3819":{"position":[[1555,2]]},"3844":{"position":[[674,2],[941,2]]},"3858":{"position":[[73,2]]},"3894":{"position":[[73,2]]},"3916":{"position":[[1661,2]]}}}],["行号",{"_index":9571,"t":{"3940":{"position":[[385,2]]}}}],["衍生",{"_index":8472,"t":{"3626":{"position":[[321,2]]}}}],["衔接",{"_index":3507,"t":{"756":{"position":[[90,2]]}}}],["补",{"_index":214,"t":{"13":{"position":[[32,1]]},"2296":{"position":[[32,1]]}}}],["补充",{"_index":964,"t":{"127":{"position":[[354,2]]},"148":{"position":[[280,2]]},"1194":{"position":[[425,2]]},"1204":{"position":[[187,2]]},"1267":{"position":[[240,2]]},"1418":{"position":[[215,2]]},"1511":{"position":[[1290,2]]},"2768":{"position":[[1498,2]]}}}],["补齐",{"_index":4997,"t":{"1551":{"position":[[160,2],[192,2]]}}}],["表",{"_index":1803,"t":{"247":{"position":[[120,1],[149,1],[193,1],[263,1]]},"516":{"position":[[572,1],[598,1]]},"565":{"position":[[127,1],[154,1],[197,1]]},"570":{"position":[[1740,1],[1824,1],[2100,1],[2169,1],[2460,1]]},"655":{"position":[[10,1],[494,1]]},"690":{"position":[[18,1]]},"692":{"position":[[2,1],[16,1]]},"696":{"position":[[558,1]]},"698":{"position":[[133,1],[153,1],[1073,1]]},"715":{"position":[[39,1]]},"739":{"position":[[77,1]]},"767":{"position":[[682,1]]},"801":{"position":[[45,1]]},"807":{"position":[[35,1]]},"826":{"position":[[27,1]]},"844":{"position":[[1,1]]},"851":{"position":[[540,1]]},"864":{"position":[[28,1]]},"905":{"position":[[22,1],[126,1],[231,1]]},"907":{"position":[[22,1],[120,1],[219,1]]},"909":{"position":[[22,1],[115,1],[209,1]]},"919":{"position":[[28,1]]},"1037":{"position":[[31,1],[129,1],[228,1]]},"1062":{"position":[[7,1],[104,1]]},"1141":{"position":[[51,1]]},"1143":{"position":[[89,1]]},"1267":{"position":[[198,1]]},"1275":{"position":[[243,1]]},"1358":{"position":[[20,1]]},"1366":{"position":[[19,1]]},"1368":{"position":[[7,1]]},"1511":{"position":[[1983,1]]},"1761":{"position":[[247,1],[251,1],[557,1],[580,1]]},"1775":{"position":[[21,1]]},"1787":{"position":[[19,1]]},"2919":{"position":[[45,1],[117,1],[226,1]]},"2969":{"position":[[102,1]]},"2973":{"position":[[26,1],[49,1]]},"3088":{"position":[[43,1],[50,1]]},"3092":{"position":[[16,1],[114,1]]},"3094":{"position":[[3,1],[15,1],[33,1],[40,1],[62,1],[173,1]]},"3096":{"position":[[151,1]]},"3102":{"position":[[6,1],[22,1]]},"3106":{"position":[[9,1],[14,1],[22,1]]},"3108":{"position":[[39,1],[57,1]]},"3110":{"position":[[48,1],[66,1],[82,1]]},"3118":{"position":[[98,1],[102,1],[115,1],[135,1],[158,1],[233,1],[292,1]]},"3124":{"position":[[23,1]]},"3126":{"position":[[262,1],[332,1],[393,1]]},"3211":{"position":[[72,1]]},"3213":{"position":[[66,1]]},"3458":{"position":[[897,1],[918,1]]},"3770":{"position":[[3086,1],[3183,1],[3305,1],[3500,1],[3800,1],[3932,1]]},"3930":{"position":[[360,1]]},"3960":{"position":[[239,1]]},"3966":{"position":[[1478,1]]},"3968":{"position":[[587,1]]},"3972":{"position":[[326,1]]},"3992":{"position":[[3159,1]]},"3998":{"position":[[69,1],[362,1],[430,1]]}}}],["表单",{"_index":5159,"t":{"1629":{"position":[[123,2]]},"1919":{"position":[[380,2],[555,2]]}}}],["表头",{"_index":2469,"t":{"415":{"position":[[123,2],[135,2]]},"2991":{"position":[[129,2],[141,2]]}}}],["表字",{"_index":8444,"t":{"3622":{"position":[[165,2]]}}}],["表明",{"_index":4252,"t":{"1408":{"position":[[1079,2]]}}}],["表现",{"_index":5458,"t":{"1761":{"position":[[560,2]]}}}],["表现形式",{"_index":5060,"t":{"1572":{"position":[[91,4]]}}}],["表示",{"_index":2236,"t":{"340":{"position":[[1461,2]]},"482":{"position":[[329,2],[354,2],[502,2],[526,2],[547,2],[571,2],[644,2],[696,2],[751,2],[926,2],[990,2]]},"651":{"position":[[392,2]]},"789":{"position":[[213,2]]},"1151":{"position":[[474,2]]},"1351":{"position":[[392,2]]},"1394":{"position":[[181,2]]},"1399":{"position":[[92,2]]},"1401":{"position":[[73,2]]},"1403":{"position":[[53,2]]},"1416":{"position":[[119,2],[152,2]]},"1907":{"position":[[35,2]]},"1909":{"position":[[27,2]]},"2341":{"position":[[113,2]]},"2398":{"position":[[123,2]]},"2418":{"position":[[581,2],[613,2],[793,2],[820,2],[846,2],[873,2],[954,2],[1012,2],[1090,2],[1292,2],[1362,2]]},"2796":{"position":[[526,2]]},"3148":{"position":[[2,2],[69,2]]},"3284":{"position":[[73,2]]},"3416":{"position":[[310,2],[328,2]]},"3528":{"position":[[111,2]]},"3567":{"position":[[233,2]]},"3762":{"position":[[502,2]]}}}],["表达式",{"_index":2627,"t":{"467":{"position":[[46,3]]},"469":{"position":[[5,3],[60,3]]},"480":{"position":[[13,3]]},"484":{"position":[[11,3]]},"486":{"position":[[19,3],[42,3]]},"488":{"position":[[47,3]]},"494":{"position":[[700,3],[754,3],[787,3],[825,3],[873,3],[911,3]]},"846":{"position":[[55,3],[719,3]]},"981":{"position":[[32,3],[45,3]]},"2167":{"position":[[11,3],[187,3],[406,3]]},"2208":{"position":[[56,3]]},"2228":{"position":[[11,3]]},"2393":{"position":[[119,3],[134,3]]},"2418":{"position":[[5,3]]},"2420":{"position":[[0,3],[4,3]]},"2424":{"position":[[12,3],[54,3]]},"2440":{"position":[[473,3]]},"2444":{"position":[[66,3],[211,3]]},"2448":{"position":[[56,3]]},"2827":{"position":[[14,3],[35,3]]},"3269":{"position":[[352,3]]},"3271":{"position":[[165,3]]},"3804":{"position":[[42,3],[268,3],[576,3]]},"3808":{"position":[[230,3]]},"3910":{"position":[[422,3],[2536,3]]},"3966":{"position":[[1934,3],[1948,3]]},"3972":{"position":[[431,3]]},"3978":{"position":[[71,3]]}}}],["袋鼠",{"_index":2381,"t":{"397":{"position":[[278,2]]}}}],["装",{"_index":4482,"t":{"1488":{"position":[[1685,1]]}}}],["装置",{"_index":2253,"t":{"346":{"position":[[198,2]]},"348":{"position":[[217,2]]}}}],["装载",{"_index":2167,"t":{"336":{"position":[[376,2]]},"344":{"position":[[197,2]]}}}],["装配",{"_index":6702,"t":{"2564":{"position":[[6,2]]}}}],["裸奔",{"_index":4700,"t":{"1511":{"position":[[1493,2]]}}}],["襁褓",{"_index":9363,"t":{"3926":{"position":[[54,2]]}}}],["西亚",{"_index":6498,"t":{"2559":{"position":[[644,2],[656,2],[663,2]]}}}],["西班牙",{"_index":6641,"t":{"2559":{"position":[[2101,3],[2111,3],[2126,3],[2142,3],[2156,3],[2172,3],[2190,3],[2210,3],[2226,3],[2243,3],[2259,3],[2275,3],[2290,3],[2306,3],[2321,3],[2336,3],[2350,3],[2367,3],[2372,3],[2382,3],[2397,3]]}}}],["西瓜",{"_index":5027,"t":{"1555":{"position":[[670,2]]}}}],["西里尔",{"_index":6469,"t":{"2559":{"position":[[383,3],[1998,3],[2687,3]]}}}],["西门",{"_index":2548,"t":{"441":{"position":[[250,2],[513,2],[616,2]]}}}],["要",{"_index":673,"t":{"106":{"position":[[40,1]]},"121":{"position":[[200,1]]},"206":{"position":[[78,1],[151,1]]},"220":{"position":[[111,1]]},"241":{"position":[[1,1],[68,1],[139,1]]},"247":{"position":[[85,1]]},"251":{"position":[[113,1]]},"253":{"position":[[1,1]]},"615":{"position":[[1094,1]]},"692":{"position":[[12,1]]},"698":{"position":[[126,1]]},"1050":{"position":[[6,1],[50,1]]},"1097":{"position":[[22,1]]},"1483":{"position":[[781,1]]},"1488":{"position":[[399,1]]},"1495":{"position":[[399,1],[1254,1]]},"1497":{"position":[[307,1]]},"2041":{"position":[[37,1]]},"2313":{"position":[[499,1]]},"2717":{"position":[[352,1]]},"2770":{"position":[[13,1],[201,1],[216,1]]},"2836":{"position":[[956,1]]},"3124":{"position":[[35,1]]},"3282":{"position":[[80,1]]},"3350":{"position":[[68,1],[170,1]]},"3352":{"position":[[321,1]]},"3401":{"position":[[338,1]]},"3460":{"position":[[111,1]]},"3688":{"position":[[66,1]]}}}],["要么",{"_index":2202,"t":{"338":{"position":[[1243,2],[1250,2]]},"3282":{"position":[[22,2],[30,2],[124,2],[130,2]]},"3287":{"position":[[77,2],[84,2]]},"3294":{"position":[[71,2],[76,2]]}}}],["要是",{"_index":4871,"t":{"1511":{"position":[[3809,2]]},"2770":{"position":[[123,2]]}}}],["要求",{"_index":863,"t":{"121":{"position":[[68,2]]},"255":{"position":[[51,2]]},"336":{"position":[[342,2]]},"570":{"position":[[2044,2]]},"1971":{"position":[[2,2]]},"1985":{"position":[[2,2]]},"2008":{"position":[[2,2]]},"2326":{"position":[[36,2]]},"2345":{"position":[[44,2]]},"2917":{"position":[[111,2]]},"3156":{"position":[[12,2]]},"3352":{"position":[[430,2]]},"3622":{"position":[[117,2]]},"3924":{"position":[[1623,2]]},"3934":{"position":[[653,2]]},"3956":{"position":[[3174,2]]}}}],["覆盖",{"_index":1635,"t":{"220":{"position":[[845,2]]},"427":{"position":[[108,2]]},"518":{"position":[[594,2],[627,2]]},"617":{"position":[[2717,2]]},"1422":{"position":[[142,2]]},"1643":{"position":[[9,2]]},"1871":{"position":[[31,2],[43,2]]},"1873":{"position":[[97,2],[306,2]]},"1875":{"position":[[307,2],[398,2]]},"1877":{"position":[[85,2],[133,2]]},"3352":{"position":[[501,2]]},"3432":{"position":[[141,2],[163,2],[475,2],[753,2]]},"3779":{"position":[[1617,2],[1721,2]]},"3802":{"position":[[2378,2],[2492,2]]},"3922":{"position":[[1614,2]]},"3930":{"position":[[1137,2]]},"3994":{"position":[[1344,2]]},"4006":{"position":[[478,2]]}}}],["覆盖率",{"_index":7962,"t":{"3352":{"position":[[351,3],[396,3],[426,3]]},"3407":{"position":[[23,3]]}}}],["见",{"_index":5088,"t":{"1592":{"position":[[88,1]]},"2373":{"position":[[215,1]]},"2385":{"position":[[105,1]]},"2524":{"position":[[44,1]]},"2953":{"position":[[15,1]]},"3345":{"position":[[240,1]]},"3944":{"position":[[893,1]]}}}],["见贤思齐",{"_index":4586,"t":{"1511":{"position":[[327,4]]}}}],["观察者",{"_index":6107,"t":{"2311":{"position":[[96,3]]}}}],["观测",{"_index":1268,"t":{"182":{"position":[[65,2]]}}}],["规划",{"_index":1267,"t":{"182":{"position":[[57,2]]},"184":{"position":[[3,2]]}}}],["规则",{"_index":4079,"t":{"1234":{"position":[[768,2]]},"1520":{"position":[[12,2]]},"1541":{"position":[[140,2]]},"1629":{"position":[[24,2]]},"1631":{"position":[[80,2],[404,2],[579,2]]},"1661":{"position":[[888,2],[913,2],[1362,2]]},"1685":{"position":[[379,2]]},"1761":{"position":[[444,2],[568,2]]},"2395":{"position":[[139,2]]},"2442":{"position":[[125,2]]},"2495":{"position":[[49,2]]},"2542":{"position":[[45,2]]},"2649":{"position":[[41,2]]},"2682":{"position":[[19,2]]},"2688":{"position":[[145,2]]},"2782":{"position":[[25,2],[80,2]]},"3023":{"position":[[885,2],[910,2],[1359,2]]},"3047":{"position":[[121,2]]},"3106":{"position":[[34,2]]},"3120":{"position":[[71,2]]},"3432":{"position":[[639,2],[1296,2],[1619,2],[2456,2]]},"3434":{"position":[[2062,2]]},"3581":{"position":[[9,2]]},"3668":{"position":[[26,2]]},"3722":{"position":[[53,2]]},"3770":{"position":[[1728,2]]},"3779":{"position":[[1251,2],[1876,2]]},"3802":{"position":[[1869,2],[2653,2]]},"3817":{"position":[[2465,2]]},"3908":{"position":[[14,2],[58,2]]},"3910":{"position":[[462,2]]},"3914":{"position":[[1125,2]]},"3964":{"position":[[691,2]]},"3966":{"position":[[449,2]]},"3992":{"position":[[965,2]]}}}],["规定",{"_index":7945,"t":{"3350":{"position":[[144,2]]}}}],["规律",{"_index":6272,"t":{"2393":{"position":[[24,2]]},"3760":{"position":[[35,2]]}}}],["规矩",{"_index":8418,"t":{"3612":{"position":[[69,2]]}}}],["规范",{"_index":2586,"t":{"451":{"position":[[56,2]]},"1580":{"position":[[502,2]]},"2341":{"position":[[84,2]]},"2345":{"position":[[39,2]]},"3464":{"position":[[37,2]]},"3476":{"position":[[57,2]]},"3612":{"position":[[98,2],[106,2]]},"3620":{"position":[[7,2],[22,2]]},"3624":{"position":[[2,2]]},"3626":{"position":[[189,2],[258,2],[282,2],[293,2],[493,2]]},"3966":{"position":[[1188,2]]},"3986":{"position":[[114,2]]},"3988":{"position":[[439,2]]},"3996":{"position":[[405,2]]},"4000":{"position":[[703,2]]}}}],["规范化",{"_index":1991,"t":{"302":{"position":[[22,3]]},"306":{"position":[[2,3]]},"325":{"position":[[82,3]]},"1141":{"position":[[72,3]]},"1837":{"position":[[72,3]]},"1853":{"position":[[21,3]]},"1881":{"position":[[2,3],[15,3]]},"1973":{"position":[[79,3]]},"1987":{"position":[[79,3]]},"2010":{"position":[[87,3]]},"2283":{"position":[[84,3]]},"2881":{"position":[[32,3]]},"3045":{"position":[[0,3]]},"3047":{"position":[[20,3],[190,3]]},"3061":{"position":[[0,3]]},"3063":{"position":[[231,3]]},"3632":{"position":[[16,3],[130,3]]},"3636":{"position":[[0,3]]},"3654":{"position":[[0,3]]},"3658":{"position":[[50,3]]},"3676":{"position":[[181,3]]},"3706":{"position":[[223,3]]},"3708":{"position":[[12,3],[56,3],[3868,3],[3896,3],[4089,3]]},"3710":{"position":[[16,3]]},"3712":{"position":[[3,3]]},"3714":{"position":[[24,3]]},"3716":{"position":[[76,3],[91,3],[105,3],[307,3],[404,3],[523,3],[668,3],[775,3],[854,3]]},"3912":{"position":[[2007,3]]},"3914":{"position":[[3537,3]]},"3918":{"position":[[918,3]]},"3920":{"position":[[1808,3]]},"3922":{"position":[[2311,3]]},"3924":{"position":[[243,3],[472,3],[1309,3],[1912,3],[3521,3]]},"3928":{"position":[[526,3]]},"3930":{"position":[[7,3],[1422,3]]},"3932":{"position":[[438,3],[1311,3],[1530,3]]},"3934":{"position":[[73,3],[514,3]]},"3936":{"position":[[482,3],[668,3],[772,3],[1861,3]]},"3938":{"position":[[7,3],[774,3]]},"3940":{"position":[[140,3],[169,3],[289,3],[752,3]]},"3942":{"position":[[47,3]]},"3946":{"position":[[111,3]]},"3948":{"position":[[144,3],[389,3]]},"3954":{"position":[[530,3]]},"3956":{"position":[[16,3],[89,3],[152,3],[263,3],[3098,3]]},"3960":{"position":[[79,3],[560,3]]},"3966":{"position":[[1057,3],[1071,3],[1265,3]]},"3970":{"position":[[380,3]]},"3976":{"position":[[257,3]]},"3978":{"position":[[1343,3]]},"3986":{"position":[[274,3],[1011,3]]},"3992":{"position":[[171,3],[548,3],[1459,3],[1713,3],[3614,3]]},"3994":{"position":[[242,3],[669,3],[894,3],[1021,3],[1089,3],[1229,3]]},"3996":{"position":[[1198,3],[1779,3]]},"3998":{"position":[[797,3]]},"4000":{"position":[[1058,3],[1094,3]]},"4006":{"position":[[498,3]]}}}],["视",{"_index":3943,"t":{"1082":{"position":[[11,1]]}}}],["视为",{"_index":4927,"t":{"1520":{"position":[[334,2],[379,2]]}}}],["视图",{"_index":3341,"t":{"690":{"position":[[20,2]]},"692":{"position":[[18,2]]},"696":{"position":[[560,2]]},"698":{"position":[[155,2]]},"826":{"position":[[39,2]]},"939":{"position":[[44,2]]},"1358":{"position":[[0,2],[24,2]]},"1360":{"position":[[12,2],[27,2]]},"1364":{"position":[[114,2],[450,2],[455,2],[498,2]]},"1366":{"position":[[0,2]]},"1368":{"position":[[2,2],[34,2],[515,2]]},"1572":{"position":[[63,2],[102,2],[578,2]]},"1763":{"position":[[72,2],[207,2]]},"1765":{"position":[[125,2]]},"1773":{"position":[[120,2]]},"1901":{"position":[[411,2]]},"1939":{"position":[[67,2]]},"1941":{"position":[[623,2]]},"2627":{"position":[[86,2]]},"2905":{"position":[[65,2]]},"3365":{"position":[[26,2]]},"3727":{"position":[[0,2],[8,2],[20,2],[90,2]]},"3732":{"position":[[22,2]]},"3754":{"position":[[11,2]]},"3936":{"position":[[639,2]]},"3940":{"position":[[648,2]]},"3950":{"position":[[549,2]]},"3960":{"position":[[646,2]]},"3980":{"position":[[452,2]]},"3986":{"position":[[808,2]]},"3992":{"position":[[2857,2]]},"3996":{"position":[[395,2],[1404,2]]},"3998":{"position":[[542,2]]}}}],["视频",{"_index":3171,"t":{"606":{"position":[[477,2]]},"3136":{"position":[[76,2]]}}}],["视频教程",{"_index":1455,"t":{"196":{"position":[[0,4],[10,4]]},"298":{"position":[[0,4]]},"314":{"position":[[188,4]]},"675":{"position":[[0,4]]},"2678":{"position":[[0,4],[10,4]]},"3335":{"position":[[0,4]]}}}],["觉得",{"_index":7975,"t":{"3352":{"position":[[581,2]]},"3626":{"position":[[55,2]]}}}],["角色",{"_index":7079,"t":{"2813":{"position":[[82,2]]},"3966":{"position":[[1531,2]]},"3978":{"position":[[1315,2]]},"4000":{"position":[[878,2]]}}}],["角落",{"_index":6942,"t":{"2768":{"position":[[660,2]]}}}],["解",{"_index":2206,"t":{"338":{"position":[[1282,1]]},"1385":{"position":[[119,1]]},"1697":{"position":[[62,1]]},"1793":{"position":[[62,1]]},"2343":{"position":[[255,1]]}}}],["解决",{"_index":1154,"t":{"152":{"position":[[689,2]]},"319":{"position":[[659,2]]},"336":{"position":[[248,2]]},"359":{"position":[[104,2]]},"382":{"position":[[35,2]]},"528":{"position":[[186,2]]},"675":{"position":[[177,2]]},"1048":{"position":[[117,2]]},"1279":{"position":[[435,2],[870,2]]},"1389":{"position":[[98,2]]},"1432":{"position":[[169,2]]},"1468":{"position":[[79,2]]},"1474":{"position":[[455,2]]},"2100":{"position":[[0,2]]},"2343":{"position":[[271,2],[286,2]]},"2377":{"position":[[43,2]]},"2379":{"position":[[70,2]]},"2619":{"position":[[64,2]]},"2937":{"position":[[12,2]]},"3071":{"position":[[304,2],[401,2],[641,2],[991,2]]},"3080":{"position":[[2,2],[67,2]]},"3096":{"position":[[3,2],[120,2]]},"3112":{"position":[[15,2]]},"3116":{"position":[[10,2]]},"3118":{"position":[[83,2]]},"3339":{"position":[[233,2]]},"3470":{"position":[[79,2]]},"3585":{"position":[[106,2]]},"3676":{"position":[[147,2]]},"3912":{"position":[[1605,2]]},"3914":{"position":[[1070,2]]},"3920":{"position":[[493,2]]},"3922":{"position":[[2031,2],[2274,2]]},"3924":{"position":[[495,2]]},"3928":{"position":[[556,2]]},"3932":{"position":[[773,2]]},"3934":{"position":[[194,2]]},"3940":{"position":[[619,2]]},"3966":{"position":[[2030,2]]},"3974":{"position":[[571,2]]},"3992":{"position":[[224,2]]}}}],["解决办法",{"_index":3483,"t":{"734":{"position":[[7711,4]]}}}],["解决方案",{"_index":176,"t":{"11":{"position":[[746,4]]},"121":{"position":[[470,4]]},"245":{"position":[[215,4]]},"255":{"position":[[64,4]]},"340":{"position":[[1962,4]]},"696":{"position":[[619,4]]},"698":{"position":[[1026,4]]},"1488":{"position":[[403,4]]},"1495":{"position":[[403,4]]},"1825":{"position":[[66,4]]},"2294":{"position":[[794,4]]},"2363":{"position":[[217,4]]},"2490":{"position":[[53,4]]},"2599":{"position":[[59,4]]},"2639":{"position":[[2,4]]},"2657":{"position":[[73,4]]},"2666":{"position":[[2,4]]},"2731":{"position":[[172,4]]},"3069":{"position":[[270,4]]},"3277":{"position":[[23,4]]},"3414":{"position":[[226,4]]},"3626":{"position":[[237,4],[242,4]]},"3912":{"position":[[2568,4]]},"3914":{"position":[[3468,4]]},"3916":{"position":[[2764,4]]}}}],["解决问题",{"_index":7949,"t":{"3352":{"position":[[69,4]]},"3587":{"position":[[18,4]]}}}],["解压",{"_index":2015,"t":{"306":{"position":[[154,2]]},"1483":{"position":[[854,2]]},"1499":{"position":[[852,2]]}}}],["解密",{"_index":1138,"t":{"152":{"position":[[95,2],[382,2],[672,2]]},"329":{"position":[[111,2]]},"1679":{"position":[[134,2]]},"1681":{"position":[[179,2]]},"1683":{"position":[[187,2]]},"1687":{"position":[[250,2]]},"1689":{"position":[[823,2]]},"1691":{"position":[[364,2],[635,2]]},"3920":{"position":[[1640,2]]},"3940":{"position":[[686,2]]}}}],["解散",{"_index":2421,"t":{"401":{"position":[[360,2]]}}}],["解析",{"_index":548,"t":{"91":{"position":[[596,2]]},"152":{"position":[[44,2],[658,2]]},"218":{"position":[[153,2],[286,2]]},"467":{"position":[[49,2]]},"488":{"position":[[50,2]]},"494":{"position":[[752,2]]},"526":{"position":[[229,2],[255,2]]},"530":{"position":[[680,2]]},"587":{"position":[[1894,2]]},"599":{"position":[[434,2]]},"988":{"position":[[52,2]]},"1039":{"position":[[681,2]]},"1383":{"position":[[49,2],[154,2],[302,2]]},"1385":{"position":[[94,2]]},"1412":{"position":[[121,2],[1228,2],[2522,2],[2842,2]]},"1416":{"position":[[343,2],[368,2]]},"1424":{"position":[[761,2]]},"1428":{"position":[[50,2]]},"1434":{"position":[[207,2]]},"1557":{"position":[[871,2],[924,2]]},"1621":{"position":[[717,2]]},"1711":{"position":[[59,2],[217,2],[644,2],[685,2]]},"1724":{"position":[[70,2],[311,2],[408,2]]},"1726":{"position":[[31,2],[110,2]]},"1741":{"position":[[513,2]]},"1811":{"position":[[553,2]]},"1823":{"position":[[33,2],[506,2]]},"2035":{"position":[[56,2]]},"2331":{"position":[[225,2]]},"2341":{"position":[[165,2]]},"2474":{"position":[[20,2]]},"2476":{"position":[[226,2]]},"2478":{"position":[[336,2]]},"2585":{"position":[[61,2]]},"2589":{"position":[[15,2]]},"2727":{"position":[[19,2]]},"2831":{"position":[[675,2]]},"3377":{"position":[[25,2]]},"3808":{"position":[[53,2]]},"3910":{"position":[[2539,2]]},"3914":{"position":[[1162,2]]},"3916":{"position":[[1648,2],[1774,2]]},"3918":{"position":[[1031,2]]},"3924":{"position":[[1742,2]]},"3930":{"position":[[259,2],[423,2]]},"3952":{"position":[[296,2],[354,2]]},"3960":{"position":[[628,2]]},"3964":{"position":[[484,2]]},"3978":{"position":[[74,2]]},"3980":{"position":[[139,2]]},"3986":{"position":[[1667,2]]},"3992":{"position":[[2300,2]]},"4000":{"position":[[133,2],[660,2],[675,2]]},"4002":{"position":[[225,2]]},"4004":{"position":[[514,2]]}}}],["解答",{"_index":4754,"t":{"1511":{"position":[[2135,2]]}}}],["解说",{"_index":4251,"t":{"1408":{"position":[[1008,2]]}}}],["解释",{"_index":4412,"t":{"1483":{"position":[[662,2]]},"3620":{"position":[[55,2]]},"3914":{"position":[[836,2]]}}}],["触发",{"_index":2590,"t":{"453":{"position":[[73,2]]},"482":{"position":[[361,2],[429,2],[511,2],[563,2],[579,2],[590,2],[620,2],[636,2],[688,2],[745,2],[794,2],[841,2],[862,2],[890,2]]},"567":{"position":[[54,2],[82,2],[197,2],[307,2]]},"747":{"position":[[538,2]]},"933":{"position":[[54,2],[82,2],[197,2],[307,2]]},"1703":{"position":[[36,2]]},"1705":{"position":[[46,2]]},"2391":{"position":[[198,2]]},"2404":{"position":[[124,2]]},"2418":{"position":[[620,2],[723,2],[802,2],[863,2],[881,2],[892,2],[927,2],[943,2],[1001,2],[1081,2],[1142,2],[1199,2],[1223,2],[1252,2]]},"2729":{"position":[[67,2]]},"2731":{"position":[[64,2]]},"3154":{"position":[[284,2],[606,2]]},"3551":{"position":[[289,2],[513,2]]},"3553":{"position":[[268,2],[380,2]]},"3555":{"position":[[289,2],[419,2]]},"3557":{"position":[[291,2],[426,2]]},"3559":{"position":[[300,2],[450,2]]},"3760":{"position":[[39,2]]},"3766":{"position":[[12,2]]},"3768":{"position":[[38,2],[2423,2]]},"3798":{"position":[[24,2],[437,2],[467,2]]},"3800":{"position":[[292,2]]},"3808":{"position":[[3061,2]]},"3810":{"position":[[753,2]]},"3858":{"position":[[6,2]]},"3894":{"position":[[6,2]]},"3914":{"position":[[1446,2]]},"3916":{"position":[[2050,2],[2759,2]]},"3922":{"position":[[1397,2]]},"3932":{"position":[[436,2]]},"3954":{"position":[[625,2]]},"3962":{"position":[[1157,2]]},"3974":{"position":[[884,2],[890,2]]}}}],["触发器",{"_index":1749,"t":{"237":{"position":[[1348,3]]},"655":{"position":[[13,3],[497,3],[501,3]]},"741":{"position":[[6,3]]},"3762":{"position":[[451,3]]},"3770":{"position":[[3180,3],[3302,3],[3797,3],[3929,3]]},"3774":{"position":[[24,3],[252,3],[275,3]]},"3777":{"position":[[323,3]]},"3781":{"position":[[475,3]]},"3783":{"position":[[30,3],[54,3],[63,3]]},"3793":{"position":[[111,3],[143,3]]},"3798":{"position":[[84,3],[131,3],[176,3],[214,3],[304,3],[693,3]]},"3800":{"position":[[2,3],[14,3],[342,3],[348,3]]},"3802":{"position":[[2,3],[528,3]]},"3804":{"position":[[10,3],[49,3],[125,3],[196,3],[273,3],[445,3],[510,3],[581,3],[674,3],[735,3],[796,3],[858,3],[921,3],[985,3],[1051,3]]},"3806":{"position":[[51,3],[108,3],[1278,3],[1304,3],[2672,3],[3071,3],[3186,3],[3763,3],[3887,3]]},"3808":{"position":[[108,3],[140,3],[174,3],[235,3],[258,3],[282,3],[304,3],[328,3],[358,3],[384,3],[417,3],[1692,3],[2418,3],[2542,3],[2666,3],[2790,3],[2914,3],[2920,3],[2951,3]]},"3810":{"position":[[50,3],[169,3],[240,3],[291,3],[348,3],[385,3],[418,3],[450,3],[463,3],[506,3],[545,3],[597,3],[655,3],[714,3],[750,3],[788,3],[793,3],[826,3],[866,3],[899,3],[937,3],[971,3],[1008,3]]},"3815":{"position":[[38,3]]},"3819":{"position":[[213,3],[292,3],[380,3],[635,3],[713,3],[914,3],[985,3],[1459,3]]},"3830":{"position":[[237,3],[269,3]]}}}],["警告",{"_index":1320,"t":{"186":{"position":[[132,2]]},"1555":{"position":[[509,2]]},"3416":{"position":[[239,2]]},"3768":{"position":[[2447,2]]},"3910":{"position":[[2116,2]]},"3912":{"position":[[1818,2]]},"3968":{"position":[[530,2]]}}}],["警报",{"_index":7520,"t":{"3142":{"position":[[178,2],[237,2]]}}}],["譬如",{"_index":7003,"t":{"2770":{"position":[[133,2]]}}}],["计划",{"_index":7758,"t":{"3246":{"position":[[0,2]]},"3793":{"position":[[259,2]]},"3815":{"position":[[5,2],[88,2]]},"3817":{"position":[[2,2],[231,2]]},"3819":{"position":[[1573,2],[1629,2],[1677,2]]},"3830":{"position":[[356,2]]},"3834":{"position":[[2,2],[24,2]]},"3860":{"position":[[2,2]]}}}],["计数",{"_index":9901,"t":{"3972":{"position":[[435,2]]}}}],["计时器",{"_index":6295,"t":{"2411":{"position":[[172,3]]}}}],["计算",{"_index":3590,"t":{"801":{"position":[[65,2],[72,2]]},"1566":{"position":[[506,2],[530,2],[657,2]]},"2393":{"position":[[137,2]]},"2717":{"position":[[130,2]]}}}],["计算机",{"_index":4374,"t":{"1474":{"position":[[179,3],[329,3]]}}}],["计算机上安装",{"_index":1831,"t":{"251":{"position":[[117,6]]}}}],["计算机领域",{"_index":7839,"t":{"3284":{"position":[[45,5]]}}}],["订单",{"_index":7405,"t":{"3100":{"position":[[29,2]]},"3118":{"position":[[231,2],[270,2]]},"3138":{"position":[[80,2]]},"3140":{"position":[[103,2]]},"3616":{"position":[[61,2]]},"3620":{"position":[[234,2]]}}}],["订单号",{"_index":6154,"t":{"2326":{"position":[[250,3]]}}}],["订阅",{"_index":5303,"t":{"1697":{"position":[[9,2]]},"1699":{"position":[[155,2]]},"1703":{"position":[[56,2]]},"1705":{"position":[[3,2]]},"1707":{"position":[[47,2],[67,2],[96,2]]},"1793":{"position":[[9,2]]},"1795":{"position":[[4,2],[2604,2],[2742,2]]},"1801":{"position":[[1503,2],[1560,2],[2665,2]]},"1803":{"position":[[93,2],[3535,2],[3658,2],[4637,2]]},"1807":{"position":[[49,2]]},"1813":{"position":[[37,2]]},"1815":{"position":[[85,2],[417,2],[586,2]]},"1817":{"position":[[85,2],[166,2],[288,2]]},"1819":{"position":[[936,2]]},"1821":{"position":[[117,2],[298,2]]},"2309":{"position":[[113,2]]},"2311":{"position":[[93,2]]},"2315":{"position":[[38,2],[46,2],[56,2]]},"3922":{"position":[[23,2],[30,2],[2232,2]]},"3966":{"position":[[1375,2]]}}}],["认",{"_index":895,"t":{"121":{"position":[[352,1]]}}}],["认为",{"_index":8490,"t":{"3664":{"position":[[523,2]]},"3926":{"position":[[528,2]]}}}],["认定",{"_index":508,"t":{"85":{"position":[[238,2]]}}}],["认真",{"_index":9716,"t":{"3962":{"position":[[16,2]]}}}],["认证",{"_index":838,"t":{"119":{"position":[[11,2]]},"121":{"position":[[41,2],[86,2],[148,2],[299,2],[310,2],[667,2]]}}}],["讨厌",{"_index":8466,"t":{"3626":{"position":[[169,2]]}}}],["讨论",{"_index":3491,"t":{"734":{"position":[[8211,2]]},"1103":{"position":[[245,2]]},"2383":{"position":[[147,2]]}}}],["记住",{"_index":6054,"t":{"2245":{"position":[[12,2],[131,2]]},"3992":{"position":[[1088,2]]}}}],["记录",{"_index":686,"t":{"110":{"position":[[36,2]]},"112":{"position":[[45,2]]},"121":{"position":[[201,2]]},"565":{"position":[[36,2],[88,2],[99,2],[114,2],[141,2],[165,2],[184,2]]},"615":{"position":[[654,2]]},"741":{"position":[[40,2]]},"1068":{"position":[[84,2]]},"1071":{"position":[[95,2]]},"1424":{"position":[[423,2]]},"1430":{"position":[[36,2]]},"1823":{"position":[[20,2]]},"1834":{"position":[[55,2]]},"1837":{"position":[[97,2]]},"1839":{"position":[[109,2]]},"1894":{"position":[[29,2]]},"1931":{"position":[[29,2]]},"1933":{"position":[[823,2]]},"2171":{"position":[[139,2]]},"2404":{"position":[[103,2],[107,2]]},"2472":{"position":[[49,2]]},"2768":{"position":[[1596,2]]},"3110":{"position":[[41,2]]},"3224":{"position":[[353,2],[423,2]]},"3273":{"position":[[674,2]]},"3412":{"position":[[24,2]]},"3414":{"position":[[125,2]]},"3418":{"position":[[49,2]]},"3424":{"position":[[172,2]]},"3426":{"position":[[80,2],[222,2]]},"3432":{"position":[[518,2]]},"3434":{"position":[[830,2]]},"3440":{"position":[[43,2],[92,2]]},"3595":{"position":[[267,2]]},"3912":{"position":[[2716,2]]},"3914":{"position":[[3565,2]]},"3916":{"position":[[2782,2]]},"3918":{"position":[[3267,2],[4157,2]]},"3922":{"position":[[155,2]]},"3924":{"position":[[1554,2],[1843,2]]},"3930":{"position":[[1494,2]]},"3964":{"position":[[1107,2]]},"3980":{"position":[[799,2]]},"3984":{"position":[[846,2],[907,2]]},"3996":{"position":[[1635,2]]}}}],["记录时间",{"_index":8832,"t":{"3793":{"position":[[174,4]]},"3830":{"position":[[300,4]]},"3912":{"position":[[2481,4]]},"3914":{"position":[[840,4]]}}}],["记得",{"_index":9392,"t":{"3926":{"position":[[188,2]]}}}],["讲",{"_index":1526,"t":{"204":{"position":[[449,1]]},"249":{"position":[[88,1]]},"1389":{"position":[[242,1]]},"2564":{"position":[[194,1]]},"2912":{"position":[[93,1]]}}}],["许",{"_index":4889,"t":{"1511":{"position":[[4047,1]]}}}],["许可",{"_index":4516,"t":{"1507":{"position":[[21,2]]}}}],["许可证",{"_index":2400,"t":{"399":{"position":[[602,3]]},"3702":{"position":[[1984,3],[2077,3]]}}}],["许多",{"_index":5087,"t":{"1589":{"position":[[262,2]]},"1761":{"position":[[244,2]]},"2343":{"position":[[220,2]]},"2910":{"position":[[428,2]]},"3242":{"position":[[152,2]]},"3910":{"position":[[149,2]]},"3916":{"position":[[1635,2]]},"3934":{"position":[[2257,2]]}}}],["设",{"_index":3325,"t":{"681":{"position":[[27,1]]},"3654":{"position":[[149,1]]}}}],["设备",{"_index":8253,"t":{"3478":{"position":[[5,2]]}}}],["设定",{"_index":1094,"t":{"137":{"position":[[51,2]]},"1151":{"position":[[25,2]]},"1153":{"position":[[60,2]]},"2703":{"position":[[34,2]]},"2727":{"position":[[23,2]]}}}],["设立",{"_index":6905,"t":{"2768":{"position":[[42,2]]}}}],["设置",{"_index":1047,"t":{"129":{"position":[[568,2]]},"144":{"position":[[377,2]]},"220":{"position":[[877,2]]},"233":{"position":[[6,2],[364,2]]},"235":{"position":[[46,2],[62,2]]},"237":{"position":[[1354,2]]},"253":{"position":[[681,2]]},"369":{"position":[[326,2],[361,2],[401,2],[856,2]]},"386":{"position":[[88,2]]},"413":{"position":[[49,2]]},"415":{"position":[[169,2],[245,2],[344,2]]},"417":{"position":[[358,2]]},"427":{"position":[[41,2]]},"445":{"position":[[817,2]]},"457":{"position":[[51,2]]},"498":{"position":[[73,2]]},"516":{"position":[[755,2]]},"591":{"position":[[100,2]]},"606":{"position":[[1261,2]]},"619":{"position":[[17,2]]},"683":{"position":[[15,2]]},"711":{"position":[[15,2]]},"793":{"position":[[52,2]]},"846":{"position":[[714,2]]},"877":{"position":[[1130,2]]},"887":{"position":[[223,2]]},"893":{"position":[[73,2]]},"933":{"position":[[405,2],[801,2]]},"1131":{"position":[[55,2],[121,2],[149,2]]},"1141":{"position":[[32,2]]},"1234":{"position":[[380,2]]},"1236":{"position":[[386,2]]},"1238":{"position":[[466,2]]},"1240":{"position":[[508,2]]},"1313":{"position":[[310,2]]},"1394":{"position":[[153,2]]},"1474":{"position":[[276,2],[396,2],[412,2]]},"1483":{"position":[[695,2],[727,2],[965,2],[1070,2]]},"1535":{"position":[[554,2]]},"1609":{"position":[[42,2]]},"1623":{"position":[[178,2]]},"1647":{"position":[[411,2]]},"1663":{"position":[[189,2]]},"1753":{"position":[[152,2],[184,2]]},"1755":{"position":[[735,2],[940,2],[1175,2]]},"1785":{"position":[[9,2]]},"1801":{"position":[[1107,2],[1961,2]]},"1803":{"position":[[3301,2]]},"1825":{"position":[[28,2]]},"1839":{"position":[[66,2]]},"1863":{"position":[[192,2],[245,2]]},"1885":{"position":[[155,2]]},"1901":{"position":[[529,2]]},"1915":{"position":[[26,2]]},"1921":{"position":[[26,2]]},"1929":{"position":[[26,2]]},"1937":{"position":[[26,2]]},"1941":{"position":[[977,2]]},"1945":{"position":[[26,2]]},"1947":{"position":[[107,2]]},"1955":{"position":[[191,2],[284,2]]},"2333":{"position":[[281,2],[290,2]]},"2361":{"position":[[253,2]]},"2379":{"position":[[422,2]]},"2426":{"position":[[263,2]]},"2490":{"position":[[28,2]]},"2517":{"position":[[99,2]]},"2526":{"position":[[110,2]]},"2540":{"position":[[65,2]]},"2544":{"position":[[138,2]]},"2547":{"position":[[16,2]]},"2569":{"position":[[40,2]]},"2733":{"position":[[26,2]]},"2751":{"position":[[72,2]]},"2788":{"position":[[66,2],[227,2]]},"2846":{"position":[[83,2]]},"2848":{"position":[[1094,2],[1155,2],[1204,2],[1217,2]]},"2887":{"position":[[24,2]]},"2937":{"position":[[53,2],[1272,2]]},"2991":{"position":[[175,2],[251,2],[350,2]]},"3009":{"position":[[187,2]]},"3273":{"position":[[483,2]]},"3291":{"position":[[1302,2]]},"3339":{"position":[[102,2]]},"3432":{"position":[[144,2],[1770,2]]},"3452":{"position":[[440,2]]},"3466":{"position":[[892,2],[1681,2]]},"3468":{"position":[[358,2]]},"3496":{"position":[[367,2]]},"3500":{"position":[[227,2],[748,2]]},"3506":{"position":[[48,2]]},"3508":{"position":[[69,2]]},"3512":{"position":[[114,2]]},"3522":{"position":[[101,2],[896,2]]},"3524":{"position":[[38,2]]},"3532":{"position":[[69,2]]},"3539":{"position":[[23,2],[114,2]]},"3547":{"position":[[48,2]]},"3563":{"position":[[98,2],[717,2]]},"3571":{"position":[[69,2]]},"3575":{"position":[[539,2]]},"3577":{"position":[[39,2]]},"3589":{"position":[[594,2]]},"3658":{"position":[[30,2]]},"3664":{"position":[[255,2]]},"3680":{"position":[[431,2],[442,2]]},"3698":{"position":[[360,2]]},"3704":{"position":[[205,2]]},"3708":{"position":[[2617,2]]},"3774":{"position":[[33,2]]},"3777":{"position":[[246,2]]},"3912":{"position":[[2054,2],[2120,2]]},"3914":{"position":[[1596,2],[1631,2],[2174,2],[3382,2]]},"3916":{"position":[[1981,2],[2436,2],[3443,2]]},"3918":{"position":[[3543,2],[3686,2]]},"3920":{"position":[[241,2],[570,2],[1823,2]]},"3924":{"position":[[3739,2]]},"3930":{"position":[[142,2],[957,2],[1322,2]]},"3938":{"position":[[628,2]]},"3940":{"position":[[59,2],[597,2],[603,2]]},"3956":{"position":[[1965,2]]},"3962":{"position":[[430,2],[479,2],[567,2],[1067,2]]},"3964":{"position":[[108,2],[116,2]]},"3972":{"position":[[123,2]]},"3974":{"position":[[253,2],[351,2]]},"3978":{"position":[[1518,2]]},"3986":{"position":[[1282,2],[1714,2]]},"3992":{"position":[[663,2],[1971,2],[2418,2],[2837,2],[2878,2],[3407,2],[3643,2]]},"4006":{"position":[[126,2]]}}}],["设计",{"_index":583,"t":{"95":{"position":[[130,2]]},"121":{"position":[[520,2]]},"160":{"position":[[21,2]]},"186":{"position":[[118,2]]},"340":{"position":[[40,2]]},"353":{"position":[[3,2]]},"1052":{"position":[[13,2]]},"1097":{"position":[[20,2]]},"1625":{"position":[[46,2]]},"2321":{"position":[[36,2]]},"2517":{"position":[[5,2]]},"2621":{"position":[[11,2]]},"2627":{"position":[[62,2]]},"2774":{"position":[[15,2]]},"2915":{"position":[[79,2]]},"2919":{"position":[[196,2]]},"3131":{"position":[[23,2],[28,2],[49,2]]},"3914":{"position":[[1657,2]]},"3916":{"position":[[1500,2]]},"3918":{"position":[[1495,2],[2434,2]]},"3932":{"position":[[305,2],[331,2],[648,2],[674,2]]},"3956":{"position":[[3153,2]]}}}],["访问",{"_index":739,"t":{"112":{"position":[[1088,2]]},"121":{"position":[[560,2],[632,2]]},"127":{"position":[[187,2],[1447,2]]},"137":{"position":[[17,2],[55,2],[153,2]]},"141":{"position":[[33,2]]},"233":{"position":[[290,2]]},"239":{"position":[[29,2]]},"413":{"position":[[25,2]]},"1474":{"position":[[144,2]]},"1566":{"position":[[163,2],[225,2]]},"1745":{"position":[[75,2],[379,2]]},"1913":{"position":[[685,2]]},"1925":{"position":[[950,2]]},"2233":{"position":[[27,2]]},"2239":{"position":[[93,2]]},"2404":{"position":[[105,2]]},"3063":{"position":[[1113,2]]},"3075":{"position":[[232,2]]},"3080":{"position":[[555,2]]},"3108":{"position":[[88,2]]},"3148":{"position":[[136,2]]},"3154":{"position":[[757,2]]},"3483":{"position":[[13,2]]},"3686":{"position":[[54,2],[352,2]]},"3696":{"position":[[57,2]]},"3702":{"position":[[978,2]]},"3706":{"position":[[1105,2]]},"3836":{"position":[[24,2],[119,2]]},"3838":{"position":[[24,2],[145,2]]},"3864":{"position":[[23,2]]},"3940":{"position":[[149,2],[912,2]]},"3966":{"position":[[1584,2]]},"3992":{"position":[[2428,2]]},"3994":{"position":[[1636,2]]}}}],["访问者",{"_index":4551,"t":{"1509":{"position":[[251,3]]}}}],["访问速度",{"_index":9604,"t":{"3944":{"position":[[540,4]]}}}],["证书",{"_index":2372,"t":{"397":{"position":[[113,2]]},"3585":{"position":[[91,2]]},"3587":{"position":[[14,2]]},"3589":{"position":[[689,2]]},"3591":{"position":[[172,2]]},"3934":{"position":[[282,2],[990,2]]}}}],["评估",{"_index":1235,"t":{"179":{"position":[[24,2]]}}}],["识别",{"_index":9507,"t":{"3934":{"position":[[756,2]]},"3964":{"position":[[990,2]]},"3992":{"position":[[3234,2]]},"3996":{"position":[[1002,2],[1017,2]]}}}],["诉求",{"_index":9420,"t":{"3926":{"position":[[504,2]]}}}],["诊断",{"_index":7885,"t":{"3305":{"position":[[48,2]]}}}],["词库",{"_index":7053,"t":{"2788":{"position":[[214,2]]},"3930":{"position":[[471,2]]}}}],["词汇",{"_index":7046,"t":{"2782":{"position":[[219,2]]},"2784":{"position":[[19,2]]},"2788":{"position":[[112,2]]},"2790":{"position":[[643,2],[828,2],[1040,2]]},"2792":{"position":[[17,2]]},"2796":{"position":[[23,2],[200,2],[308,2],[358,2],[532,2],[559,2]]},"3930":{"position":[[1349,2]]},"3944":{"position":[[321,2]]},"3966":{"position":[[244,2]]}}}],["词语",{"_index":9449,"t":{"3930":{"position":[[480,2]]}}}],["试想",{"_index":3041,"t":{"585":{"position":[[440,2]]}}}],["试试",{"_index":2493,"t":{"419":{"position":[[148,2]]}}}],["试问",{"_index":2205,"t":{"338":{"position":[[1273,2]]},"2862":{"position":[[312,2]]}}}],["试验",{"_index":10306,"t":{"3992":{"position":[[3855,2]]}}}],["话",{"_index":872,"t":{"121":{"position":[[125,1],[219,1],[248,1]]},"423":{"position":[[99,1]]},"606":{"position":[[179,1],[204,1]]},"1048":{"position":[[106,1]]},"2564":{"position":[[106,1]]},"2770":{"position":[[309,1]]},"2881":{"position":[[301,1]]},"3962":{"position":[[1695,1]]},"3992":{"position":[[2272,1]]}}}],["诞生",{"_index":512,"t":{"85":{"position":[[286,2]]},"399":{"position":[[813,2]]},"401":{"position":[[329,2]]},"1511":{"position":[[1217,2]]},"1516":{"position":[[123,2]]},"1761":{"position":[[369,2]]},"2768":{"position":[[14,2]]},"3926":{"position":[[59,2]]}}}],["该类",{"_index":1507,"t":{"202":{"position":[[37,2]]},"1234":{"position":[[889,2]]},"1408":{"position":[[1100,2]]},"1703":{"position":[[64,2]]},"2442":{"position":[[110,2]]},"2856":{"position":[[34,2]]}}}],["该项",{"_index":1693,"t":{"233":{"position":[[309,2],[464,2]]}}}],["详尽",{"_index":2343,"t":{"378":{"position":[[128,2]]}}}],["详情",{"_index":7396,"t":{"3094":{"position":[[86,2],[117,2],[145,2],[160,2]]},"3118":{"position":[[272,2]]},"3307":{"position":[[185,2]]},"3620":{"position":[[236,2]]}}}],["详情请",{"_index":1024,"t":{"127":{"position":[[1594,3]]}}}],["详细",{"_index":1525,"t":{"204":{"position":[[447,2]]},"1440":{"position":[[945,2]]},"1665":{"position":[[346,2]]},"1839":{"position":[[19,2]]},"1887":{"position":[[435,2],[474,2]]},"1947":{"position":[[132,2]]},"1969":{"position":[[63,2]]},"3213":{"position":[[25,2]]},"3244":{"position":[[7,2]]},"3401":{"position":[[185,2]]},"3405":{"position":[[63,2]]},"3416":{"position":[[81,2]]},"3440":{"position":[[58,2]]},"3696":{"position":[[187,2]]},"3940":{"position":[[1036,2],[1594,2]]}}}],["详细信息",{"_index":2455,"t":{"408":{"position":[[93,4]]}}}],["详见",{"_index":6849,"t":{"2731":{"position":[[102,2]]}}}],["语",{"_index":4575,"t":{"1511":{"position":[[211,1]]},"2559":{"position":[[1509,1],[1520,1],[1741,1],[1752,1],[1894,1],[1909,1]]},"2788":{"position":[[120,1],[192,1]]}}}],["语句",{"_index":3002,"t":{"572":{"position":[[496,2],[552,2],[941,2],[997,2]]},"653":{"position":[[173,2]]},"801":{"position":[[88,2]]},"836":{"position":[[167,2]]},"981":{"position":[[66,2]]},"1103":{"position":[[57,2]]},"1234":{"position":[[1053,2]]},"1279":{"position":[[62,2]]},"1286":{"position":[[18,2]]},"1289":{"position":[[28,2],[40,2]]},"1566":{"position":[[481,2]]},"1761":{"position":[[92,2],[453,2]]},"3770":{"position":[[3130,2],[3252,2],[3382,2]]},"3785":{"position":[[814,2],[1075,2],[1126,2]]},"3812":{"position":[[1086,2],[1609,2],[1694,2]]},"3986":{"position":[[1079,2]]}}}],["语法",{"_index":3249,"t":{"643":{"position":[[15,2]]},"881":{"position":[[272,2]]},"1520":{"position":[[5,2]]},"1530":{"position":[[114,2]]},"2418":{"position":[[65,2]]},"3168":{"position":[[55,2]]},"3250":{"position":[[161,2]]},"3636":{"position":[[99,2]]},"3727":{"position":[[106,2]]},"3729":{"position":[[26,2]]},"3940":{"position":[[188,2],[308,2]]},"4004":{"position":[[538,2]]}}}],["语言",{"_index":1880,"t":{"261":{"position":[[31,2]]},"267":{"position":[[39,2]]},"306":{"position":[[204,2]]},"399":{"position":[[488,2]]},"631":{"position":[[13,2]]},"1879":{"position":[[13,2]]},"1887":{"position":[[480,2]]},"2341":{"position":[[145,2]]},"2343":{"position":[[7,2]]},"2517":{"position":[[122,2],[144,2]]},"2519":{"position":[[4,2],[147,2],[294,2]]},"2522":{"position":[[107,2],[145,2]]},"2526":{"position":[[22,2],[57,2],[89,2],[114,2],[145,2],[174,2]]},"2530":{"position":[[6,2],[90,2]]},"2534":{"position":[[47,2]]},"2536":{"position":[[164,2],[229,2]]},"2538":{"position":[[79,2]]},"2540":{"position":[[21,2]]},"2542":{"position":[[91,2]]},"2544":{"position":[[12,2],[22,2],[120,2],[153,2]]},"2549":{"position":[[16,2]]},"2553":{"position":[[22,2],[93,2],[130,2]]},"2561":{"position":[[36,2]]},"2599":{"position":[[31,2]]},"3029":{"position":[[1,2]]},"3031":{"position":[[22,2],[93,2],[130,2]]},"3033":{"position":[[77,2],[115,2]]},"3307":{"position":[[67,2]]},"3350":{"position":[[88,2]]},"3678":{"position":[[56,2]]},"3920":{"position":[[432,2],[2030,2]]},"3922":{"position":[[1914,2]]},"3930":{"position":[[1376,2],[1392,2]]},"3934":{"position":[[665,2],[2873,2]]},"3956":{"position":[[115,2],[3149,2]]},"3964":{"position":[[111,2],[119,2]]},"3966":{"position":[[32,2],[685,2]]},"3986":{"position":[[142,2],[799,2],[813,2],[1008,2],[1163,2]]},"3992":{"position":[[8,2],[2204,2],[2338,2],[2649,2]]}}}],["语音",{"_index":7475,"t":{"3136":{"position":[[73,2]]}}}],["误差",{"_index":8834,"t":{"3793":{"position":[[204,2]]}}}],["误解",{"_index":3285,"t":{"659":{"position":[[62,2]]},"1010":{"position":[[61,2]]},"3622":{"position":[[41,2]]}}}],["说",{"_index":691,"t":{"110":{"position":[[59,1]]},"353":{"position":[[33,1]]},"404":{"position":[[152,1]]},"565":{"position":[[59,1]]},"1761":{"position":[[422,1]]},"1892":{"position":[[89,1]]},"2303":{"position":[[71,1]]},"2768":{"position":[[1567,1],[1590,1]]},"2856":{"position":[[16,1]]},"3116":{"position":[[46,1]]},"3282":{"position":[[43,1]]},"3414":{"position":[[48,1]]},"3928":{"position":[[25,1]]}}}],["说不定",{"_index":7013,"t":{"2770":{"position":[[196,3]]}}}],["说明",{"_index":426,"t":{"51":{"position":[[258,2]]},"62":{"position":[[258,2]]},"75":{"position":[[258,2]]},"125":{"position":[[2,2]]},"150":{"position":[[108,2]]},"216":{"position":[[8,2]]},"259":{"position":[[2,2]]},"308":{"position":[[233,2]]},"314":{"position":[[163,2]]},"327":{"position":[[2,2]]},"359":{"position":[[152,2]]},"369":{"position":[[417,2]]},"423":{"position":[[137,2]]},"445":{"position":[[6,2],[735,2]]},"455":{"position":[[4,2]]},"461":{"position":[[237,2]]},"467":{"position":[[2,2],[55,2]]},"502":{"position":[[162,2]]},"713":{"position":[[23,2]]},"855":{"position":[[73,2]]},"857":{"position":[[69,2]]},"988":{"position":[[40,2]]},"1026":{"position":[[154,2]]},"1066":{"position":[[1637,2]]},"1155":{"position":[[61,2]]},"1194":{"position":[[427,2]]},"1196":{"position":[[106,2]]},"1198":{"position":[[115,2]]},"1204":{"position":[[189,2]]},"1246":{"position":[[2,2]]},"1248":{"position":[[2,2]]},"1265":{"position":[[2,2]]},"1267":{"position":[[242,2]]},"1389":{"position":[[231,2]]},"1418":{"position":[[217,2]]},"1420":{"position":[[435,2]]},"1535":{"position":[[444,2]]},"1539":{"position":[[1605,2]]},"1566":{"position":[[58,2]]},"1695":{"position":[[9,2]]},"1715":{"position":[[2,2]]},"1753":{"position":[[325,2]]},"1775":{"position":[[3822,2]]},"1791":{"position":[[10,2],[67,2]]},"1801":{"position":[[2,2]]},"1815":{"position":[[2,2]]},"1817":{"position":[[2,2]]},"1819":{"position":[[2,2]]},"1861":{"position":[[2,2]]},"1887":{"position":[[2,2]]},"2063":{"position":[[2,2]]},"2065":{"position":[[2,2]]},"2067":{"position":[[2,2]]},"2098":{"position":[[2,2]]},"2169":{"position":[[2,2]]},"2173":{"position":[[2,2]]},"2199":{"position":[[2,2]]},"2255":{"position":[[2,2]]},"2259":{"position":[[2,2]]},"2276":{"position":[[2,2]]},"2339":{"position":[[2,2]]},"2363":{"position":[[170,2]]},"2391":{"position":[[9,2],[121,2],[158,2]]},"2472":{"position":[[374,2]]},"2538":{"position":[[2,2]]},"2555":{"position":[[174,2]]},"2587":{"position":[[467,2]]},"2674":{"position":[[424,2]]},"2680":{"position":[[16,2]]},"2703":{"position":[[115,2]]},"2725":{"position":[[2502,2],[2669,2]]},"2727":{"position":[[717,2]]},"2729":{"position":[[697,2]]},"2735":{"position":[[2,2]]},"2745":{"position":[[196,2],[250,2]]},"2747":{"position":[[199,2],[285,2]]},"2774":{"position":[[405,2]]},"2780":{"position":[[2,2]]},"2834":{"position":[[56,2]]},"2846":{"position":[[294,2]]},"2860":{"position":[[2,2]]},"2868":{"position":[[67,2]]},"2877":{"position":[[2,2]]},"2879":{"position":[[382,2]]},"2893":{"position":[[2,2]]},"2897":{"position":[[689,2]]},"2921":{"position":[[58,2]]},"2929":{"position":[[757,2]]},"2933":{"position":[[592,2]]},"2945":{"position":[[869,2]]},"2949":{"position":[[440,2]]},"2959":{"position":[[812,2]]},"2963":{"position":[[459,2]]},"3067":{"position":[[2,2]]},"3069":{"position":[[304,2]]},"3071":{"position":[[1034,2]]},"3080":{"position":[[415,2]]},"3092":{"position":[[87,2]]},"3094":{"position":[[54,2]]},"3126":{"position":[[2,2]]},"3152":{"position":[[25,2]]},"3287":{"position":[[1171,2]]},"3313":{"position":[[2,2]]},"3339":{"position":[[2,2]]},"3345":{"position":[[2,2]]},"3352":{"position":[[196,2]]},"3389":{"position":[[79,2]]},"3424":{"position":[[2,2]]},"3428":{"position":[[2,2]]},"3430":{"position":[[1813,2],[3650,2],[4511,2]]},"3432":{"position":[[288,2],[4853,2]]},"3434":{"position":[[693,2]]},"3450":{"position":[[2,2]]},"3452":{"position":[[2,2]]},"3454":{"position":[[2,2]]},"3456":{"position":[[2,2]]},"3466":{"position":[[2,2]]},"3474":{"position":[[2,2]]},"3498":{"position":[[386,2]]},"3543":{"position":[[473,2]]},"3593":{"position":[[2,2]]},"3595":{"position":[[376,2]]},"3603":{"position":[[2,2]]},"3636":{"position":[[623,2]]},"3640":{"position":[[698,2]]},"3646":{"position":[[130,2]]},"3686":{"position":[[2,2],[319,2]]},"3688":{"position":[[2,2]]},"3690":{"position":[[2,2]]},"3692":{"position":[[2,2]]},"3694":{"position":[[2,2]]},"3698":{"position":[[2,2]]},"3700":{"position":[[2,2]]},"3716":{"position":[[2,2]]},"3722":{"position":[[2,2]]},"3758":{"position":[[61,2],[125,2]]},"3777":{"position":[[61,2]]},"3779":{"position":[[1440,2]]},"3798":{"position":[[62,2]]},"3800":{"position":[[70,2]]},"3802":{"position":[[2074,2]]},"3806":{"position":[[1294,2]]},"3817":{"position":[[2678,2]]},"3908":{"position":[[313,2]]},"3914":{"position":[[3425,2]]},"3934":{"position":[[2964,2]]},"3946":{"position":[[6,2]]},"3948":{"position":[[9,2]]},"3966":{"position":[[1209,2]]}}}],["说服",{"_index":4565,"t":{"1511":{"position":[[97,2]]}}}],["说道",{"_index":7744,"t":{"3242":{"position":[[174,2]]},"3910":{"position":[[171,2]]},"3934":{"position":[[2340,2]]}}}],["请",{"_index":676,"t":{"106":{"position":[[49,1]]},"123":{"position":[[15,1]]},"150":{"position":[[111,1]]},"253":{"position":[[26,1]]},"255":{"position":[[33,1]]},"378":{"position":[[29,1],[99,1]]},"419":{"position":[[349,1]]},"677":{"position":[[46,1],[83,1],[168,1]]},"685":{"position":[[458,1],[592,1]]},"696":{"position":[[472,1]]},"698":{"position":[[440,1]]},"704":{"position":[[46,1],[83,1],[168,1]]},"1424":{"position":[[32,1]]},"1440":{"position":[[949,1]]},"1470":{"position":[[46,1]]},"1511":{"position":[[30,1],[802,1],[1012,1],[1894,1],[3210,1],[4106,1]]},"1555":{"position":[[649,1]]},"1566":{"position":[[151,1],[218,1],[352,1],[377,1],[515,1]]},"1861":{"position":[[20,1]]},"1885":{"position":[[316,1]]},"1969":{"position":[[47,1]]},"2077":{"position":[[34,1]]},"2199":{"position":[[20,1]]},"2391":{"position":[[107,1]]},"2717":{"position":[[363,1]]},"2899":{"position":[[20,1]]},"3011":{"position":[[62,1]]},"3416":{"position":[[168,1]]},"3430":{"position":[[1499,1],[1726,1]]},"3522":{"position":[[69,1],[1193,1]]},"3563":{"position":[[67,1],[663,1]]},"3636":{"position":[[557,1]]},"3692":{"position":[[111,1]]},"3938":{"position":[[1059,1]]},"3952":{"position":[[377,1]]},"3954":{"position":[[400,1]]},"3962":{"position":[[15,1]]},"3982":{"position":[[895,1]]}}}],["请参阅",{"_index":1832,"t":{"251":{"position":[[134,3]]},"378":{"position":[[107,3]]},"408":{"position":[[98,3]]}}}],["请求",{"_index":317,"t":{"19":{"position":[[741,2]]},"21":{"position":[[58,2]]},"23":{"position":[[40,2]]},"110":{"position":[[23,2]]},"112":{"position":[[24,2],[34,2],[47,2],[633,2],[873,2],[1010,2],[1207,2],[1397,2],[1408,2]]},"114":{"position":[[290,2],[303,2]]},"121":{"position":[[159,2],[182,2],[238,2],[253,2],[344,2],[362,2],[392,2]]},"133":{"position":[[391,2]]},"148":{"position":[[5,2],[39,2],[155,2],[307,2]]},"152":{"position":[[691,2]]},"204":{"position":[[82,2]]},"233":{"position":[[393,2]]},"239":{"position":[[172,2]]},"263":{"position":[[55,2]]},"300":{"position":[[153,2]]},"321":{"position":[[474,2],[521,2],[550,2]]},"404":{"position":[[8,2]]},"406":{"position":[[10,2]]},"408":{"position":[[126,2],[135,2]]},"413":{"position":[[51,2]]},"415":{"position":[[121,2],[251,2],[301,2]]},"417":{"position":[[351,2]]},"419":{"position":[[12,2],[143,2],[236,2]]},"421":{"position":[[17,2]]},"425":{"position":[[37,2],[65,2]]},"565":{"position":[[23,2]]},"570":{"position":[[1079,2]]},"574":{"position":[[2,2],[13,2],[28,2]]},"1026":{"position":[[181,2]]},"1073":{"position":[[8,2]]},"1214":{"position":[[58,2]]},"1383":{"position":[[120,2]]},"1399":{"position":[[17,2],[48,2],[56,2]]},"1401":{"position":[[15,2],[29,2],[37,2]]},"1403":{"position":[[3,2],[19,2]]},"1405":{"position":[[68,2]]},"1432":{"position":[[12,2],[40,2]]},"1468":{"position":[[24,2]]},"1566":{"position":[[199,2],[343,2],[366,2]]},"1572":{"position":[[585,2]]},"1576":{"position":[[271,2]]},"1580":{"position":[[477,2]]},"1589":{"position":[[240,2]]},"1600":{"position":[[50,2]]},"1603":{"position":[[157,2],[201,2],[249,2],[291,2],[337,2]]},"1609":{"position":[[31,2],[268,2]]},"1615":{"position":[[305,2],[348,2]]},"1631":{"position":[[616,2]]},"1641":{"position":[[129,2]]},"1661":{"position":[[94,2],[404,2],[1399,2]]},"1747":{"position":[[52,2],[63,2],[76,2]]},"1751":{"position":[[6,2]]},"1892":{"position":[[32,2]]},"1896":{"position":[[38,2]]},"1898":{"position":[[55,2]]},"1901":{"position":[[25,2],[36,2],[140,2]]},"1911":{"position":[[14,2]]},"1919":{"position":[[650,2]]},"1925":{"position":[[481,2],[722,2],[859,2],[1069,2],[1259,2],[1270,2]]},"1933":{"position":[[450,2]]},"1951":{"position":[[411,2]]},"2231":{"position":[[40,2]]},"2247":{"position":[[30,2]]},"2564":{"position":[[16,2],[37,2],[72,2],[80,2],[86,2],[100,2]]},"2717":{"position":[[124,2]]},"2821":{"position":[[580,2]]},"2843":{"position":[[25,2],[56,2],[83,2],[149,2],[185,2],[195,2]]},"2852":{"position":[[37,2],[45,2]]},"2933":{"position":[[521,2]]},"2991":{"position":[[127,2],[257,2],[307,2]]},"2995":{"position":[[99,2]]},"3023":{"position":[[95,2],[401,2],[1396,2]]},"3047":{"position":[[63,2]]},"3063":{"position":[[1234,2],[1272,2]]},"3118":{"position":[[347,2]]},"3284":{"position":[[89,2]]},"3287":{"position":[[65,2]]},"3294":{"position":[[58,2]]},"3296":{"position":[[21,2]]},"3373":{"position":[[34,2],[38,2],[71,2],[535,2]]},"3412":{"position":[[156,2]]},"3416":{"position":[[335,2]]},"3440":{"position":[[51,2]]},"3444":{"position":[[63,2]]},"3446":{"position":[[765,2],[778,2]]},"3448":{"position":[[1374,2]]},"3476":{"position":[[75,2],[103,2]]},"3481":{"position":[[23,2]]},"3483":{"position":[[19,2],[59,2]]},"3486":{"position":[[10,2],[86,2],[163,2],[241,2],[324,2],[404,2],[482,2]]},"3498":{"position":[[343,2]]},"3500":{"position":[[408,2],[732,2]]},"3520":{"position":[[9,2],[44,2],[95,2]]},"3528":{"position":[[113,2]]},"3535":{"position":[[56,2],[147,2],[240,2],[333,2],[434,2],[531,2]]},"3539":{"position":[[11,2],[25,2]]},"3543":{"position":[[430,2]]},"3551":{"position":[[9,2]]},"3553":{"position":[[9,2]]},"3555":{"position":[[9,2]]},"3557":{"position":[[9,2]]},"3559":{"position":[[9,2]]},"3561":{"position":[[9,2],[44,2],[95,2]]},"3563":{"position":[[697,2]]},"3567":{"position":[[235,2]]},"3573":{"position":[[15,2],[31,2],[37,2]]},"3575":{"position":[[377,2],[395,2],[541,2]]},"3577":{"position":[[17,2]]},"3581":{"position":[[18,2]]},"3585":{"position":[[5,2]]},"3595":{"position":[[15,2],[22,2],[88,2],[139,2],[146,2],[369,2],[422,2]]},"3597":{"position":[[18,2],[34,2]]},"3601":{"position":[[60,2]]},"3605":{"position":[[72,2]]},"3620":{"position":[[266,2],[303,2],[320,2]]},"3622":{"position":[[0,2],[47,2],[51,2],[69,2],[107,2],[141,2],[146,2],[151,2]]},"3654":{"position":[[43,2]]},"3672":{"position":[[320,2],[346,2]]},"3678":{"position":[[101,2]]},"3686":{"position":[[473,2],[544,2]]},"3690":{"position":[[81,2]]},"3706":{"position":[[1226,2],[1283,2]]},"3910":{"position":[[484,2]]},"3912":{"position":[[858,2],[919,2],[1086,2],[2580,2],[2730,2]]},"3914":{"position":[[2075,2],[2152,2],[2581,2],[3083,2],[3335,2],[3380,2],[3527,2],[3598,2],[3614,2]]},"3916":{"position":[[1247,2],[2090,2],[2683,2],[2822,2],[7064,2]]},"3918":{"position":[[1342,2],[1480,2],[2811,2],[3214,2],[3290,2],[3820,2],[3829,2],[4164,2]]},"3920":{"position":[[568,2],[1206,2],[1209,2],[2013,2]]},"3922":{"position":[[1382,2],[1390,2],[2171,2]]},"3924":{"position":[[536,2]]},"3928":{"position":[[1340,2]]},"3930":{"position":[[130,2],[923,2],[1279,2],[1286,2],[1487,2]]},"3932":{"position":[[1485,2],[1944,2]]},"3934":{"position":[[246,2],[619,2],[794,2],[872,2],[975,2],[1161,2]]},"3936":{"position":[[740,2]]},"3938":{"position":[[570,2],[622,2],[752,2],[885,2]]},"3940":{"position":[[9,2],[53,2],[245,2],[499,2],[592,2],[733,2]]},"3942":{"position":[[360,2]]},"3944":{"position":[[9,2],[64,2],[117,2],[348,2],[567,2]]},"3946":{"position":[[45,2],[54,2]]},"3948":{"position":[[68,2],[77,2],[267,2]]},"3950":{"position":[[120,2],[168,2],[174,2],[675,2],[776,2],[808,2]]},"3952":{"position":[[91,2],[96,2],[118,2],[505,2],[661,2]]},"3954":{"position":[[91,2],[591,2]]},"3958":{"position":[[51,2],[197,2]]},"3960":{"position":[[21,2],[505,2]]},"3962":{"position":[[164,2],[298,2],[320,2],[565,2],[1535,2],[1610,2],[1718,2],[1733,2]]},"3964":{"position":[[508,2],[595,2],[637,2],[825,2],[977,2]]},"3966":{"position":[[159,2],[864,2],[903,2],[947,2],[1589,2]]},"3968":{"position":[[280,2],[596,2]]},"3978":{"position":[[164,2]]},"3980":{"position":[[222,2]]},"3982":{"position":[[601,2],[604,2],[613,2]]},"3984":{"position":[[41,2],[107,2],[145,2],[221,2],[415,2],[485,2],[494,2],[573,2],[577,2],[776,2]]},"3986":{"position":[[199,2]]},"3990":{"position":[[109,2],[688,2]]},"3992":{"position":[[249,2],[430,2],[491,2],[595,2],[623,2],[648,2],[959,2],[1428,2],[1897,2],[1995,2],[2033,2],[2632,2]]},"3998":{"position":[[620,2]]},"4002":{"position":[[307,2]]},"4006":{"position":[[9,2]]}}}],["诸多",{"_index":5669,"t":{"1817":{"position":[[100,2]]},"2160":{"position":[[58,2]]},"2617":{"position":[[27,2]]},"2768":{"position":[[21,2]]},"3207":{"position":[[29,2]]},"3834":{"position":[[27,2]]}}}],["读",{"_index":2139,"t":{"327":{"position":[[100,1]]},"1048":{"position":[[11,1],[24,1],[57,1],[123,1]]},"1050":{"position":[[15,1],[46,1]]},"1368":{"position":[[759,1]]},"1801":{"position":[[1753,1]]},"2255":{"position":[[132,1]]},"3700":{"position":[[100,1]]},"3914":{"position":[[1090,1]]},"3954":{"position":[[484,1]]},"3992":{"position":[[218,1]]}}}],["读写",{"_index":2757,"t":{"502":{"position":[[60,2]]},"504":{"position":[[274,2]]},"943":{"position":[[54,2]]},"949":{"position":[[292,2]]},"1031":{"position":[[3,2]]},"1048":{"position":[[63,2],[94,2],[110,2]]},"1052":{"position":[[22,2],[60,2],[130,2]]},"1064":{"position":[[227,2]]},"1066":{"position":[[829,2]]},"3098":{"position":[[32,2]]},"3110":{"position":[[232,2]]},"3962":{"position":[[2074,2]]},"3968":{"position":[[39,2],[408,2]]}}}],["读写器",{"_index":9337,"t":{"3924":{"position":[[1219,3],[1357,3]]}}}],["读写操作",{"_index":3914,"t":{"1052":{"position":[[50,4],[134,4]]}}}],["读取",{"_index":1153,"t":{"152":{"position":[[676,2]]},"249":{"position":[[191,2]]},"417":{"position":[[29,2]]},"427":{"position":[[158,2]]},"433":{"position":[[142,2],[161,2],[191,2]]},"435":{"position":[[18,2],[46,2],[76,2]]},"437":{"position":[[29,2],[72,2]]},"439":{"position":[[31,2]]},"441":{"position":[[28,2],[262,2],[268,2],[274,2],[280,2]]},"445":{"position":[[1028,2]]},"447":{"position":[[0,2],[10,2],[46,2]]},"457":{"position":[[13,2],[30,2],[41,2]]},"459":{"position":[[8,2]]},"461":{"position":[[21,2]]},"526":{"position":[[248,2]]},"767":{"position":[[577,2]]},"1368":{"position":[[513,2]]},"1717":{"position":[[84,2],[104,2],[111,2]]},"1729":{"position":[[206,2]]},"1745":{"position":[[22,2]]},"1799":{"position":[[542,2]]},"1801":{"position":[[1616,2],[2763,2],[2959,2]]},"1803":{"position":[[4735,2],[4931,2]]},"2132":{"position":[[3,2]]},"2144":{"position":[[71,2]]},"2255":{"position":[[57,2]]},"2345":{"position":[[691,2]]},"2357":{"position":[[1349,2]]},"2442":{"position":[[1498,2]]},"2701":{"position":[[22,2],[68,2]]},"2703":{"position":[[44,2],[80,2]]},"2713":{"position":[[18,2],[58,2],[76,2],[652,2]]},"2715":{"position":[[106,2],[170,2]]},"2717":{"position":[[20,2],[60,2]]},"2733":{"position":[[13,2]]},"2796":{"position":[[321,2]]},"2846":{"position":[[21,2]]},"2848":{"position":[[901,2]]},"2852":{"position":[[77,2]]},"2875":{"position":[[399,2]]},"2887":{"position":[[253,2]]},"3254":{"position":[[264,2]]},"3273":{"position":[[721,2]]},"3275":{"position":[[184,2]]},"3399":{"position":[[683,2]]},"3432":{"position":[[221,2],[923,2],[978,2]]},"3434":{"position":[[643,2],[908,2],[994,2]]},"3448":{"position":[[244,2]]},"3686":{"position":[[1026,2]]},"3754":{"position":[[250,2]]},"3912":{"position":[[1261,2],[2401,2],[2676,2]]},"3924":{"position":[[2648,2]]},"3930":{"position":[[257,2],[1092,2]]},"3962":{"position":[[1985,2]]},"3972":{"position":[[469,2]]},"3996":{"position":[[1708,2]]},"4004":{"position":[[511,2]]}}}],["读取器",{"_index":6129,"t":{"2315":{"position":[[153,3]]},"3950":{"position":[[605,3]]}}}],["读取数据",{"_index":3770,"t":{"929":{"position":[[973,4],[1197,4],[1512,4],[1702,4]]}}}],["读数据",{"_index":3897,"t":{"1046":{"position":[[31,3]]}}}],["读者",{"_index":1529,"t":{"206":{"position":[[69,2]]}}}],["读音",{"_index":484,"t":{"85":{"position":[[148,2]]}}}],["课",{"_index":6933,"t":{"2768":{"position":[[486,1]]}}}],["课堂",{"_index":7499,"t":{"3138":{"position":[[71,2]]}}}],["调",{"_index":1263,"t":{"182":{"position":[[48,1],[242,1]]}}}],["调度",{"_index":2681,"t":{"482":{"position":[[431,2]]},"488":{"position":[[15,2]]},"2175":{"position":[[185,2],[202,2]]},"2393":{"position":[[43,2]]},"2418":{"position":[[725,2]]},"2823":{"position":[[15,2]]},"3150":{"position":[[65,2]]},"3760":{"position":[[0,2]]},"3779":{"position":[[18,2],[75,2],[164,2]]},"3783":{"position":[[1199,2]]},"3793":{"position":[[162,2]]},"3802":{"position":[[17,2],[76,2],[161,2]]},"3804":{"position":[[16,2]]},"3806":{"position":[[6,2]]},"3808":{"position":[[97,2]]},"3815":{"position":[[74,2],[80,2]]},"3817":{"position":[[18,2],[81,2],[170,2],[406,2],[1486,2]]},"3824":{"position":[[35,2],[44,2]]},"3826":{"position":[[67,2],[122,2]]},"3828":{"position":[[0,2]]},"3830":{"position":[[288,2]]},"3832":{"position":[[0,2]]},"3834":{"position":[[18,2]]},"3850":{"position":[[88,2]]},"3852":{"position":[[88,2]]},"3854":{"position":[[90,2]]},"3856":{"position":[[8,2],[38,2],[44,2],[104,2]]},"3874":{"position":[[21,2]]},"3876":{"position":[[21,2]]}}}],["调整",{"_index":335,"t":{"21":{"position":[[14,2]]},"233":{"position":[[383,2]]},"429":{"position":[[43,2]]},"1627":{"position":[[42,2]]},"1861":{"position":[[0,2]]},"2199":{"position":[[0,2]]},"2517":{"position":[[87,2]]},"3908":{"position":[[44,2]]},"3910":{"position":[[2072,2]]},"3912":{"position":[[1561,2],[1787,2],[2476,2],[2515,2]]},"3914":{"position":[[1439,2],[1514,2],[1587,2],[3264,2],[3328,2]]},"3916":{"position":[[1389,2],[1451,2],[2473,2],[2518,2],[2577,2],[2645,2],[2703,2]]},"3918":{"position":[[1288,2],[1337,2],[1387,2],[2403,2],[2806,2],[3002,2],[3906,2],[3971,2]]},"3920":{"position":[[1040,2],[1139,2],[1201,2],[1773,2],[1803,2]]},"3922":{"position":[[416,2],[695,2],[785,2],[828,2],[2248,2]]},"3924":{"position":[[813,2],[2682,2]]},"3928":{"position":[[512,2]]},"3930":{"position":[[590,2],[650,2],[1372,2],[1439,2],[1442,2]]},"3932":{"position":[[797,2],[1412,2]]},"3934":{"position":[[508,2],[970,2],[1001,2]]},"3936":{"position":[[700,2],[821,2],[852,2]]},"3940":{"position":[[545,2],[587,2]]},"3942":{"position":[[448,2]]},"3952":{"position":[[184,2]]},"3954":{"position":[[745,2]]},"3956":{"position":[[149,2],[198,2]]},"3960":{"position":[[253,2],[307,2],[643,2]]},"3962":{"position":[[560,2],[593,2],[647,2],[688,2],[752,2],[802,2],[890,2],[934,2]]},"3964":{"position":[[318,2],[384,2]]},"3966":{"position":[[515,2],[571,2],[1085,2]]},"3968":{"position":[[218,2]]},"3976":{"position":[[254,2]]},"3978":{"position":[[575,2]]},"3982":{"position":[[507,2]]},"3984":{"position":[[294,2],[341,2],[749,2],[771,2]]},"3992":{"position":[[1024,2],[1077,2],[1138,2],[1171,2],[1222,2],[1282,2],[1339,2],[2820,2]]},"3994":{"position":[[463,2],[504,2],[537,2],[591,2],[639,2],[666,2],[1585,2]]},"4000":{"position":[[511,2],[530,2],[584,2],[1201,2]]},"4002":{"position":[[174,2]]},"4004":{"position":[[184,2],[464,2]]},"4006":{"position":[[637,2],[669,2]]}}}],["调用",{"_index":49,"t":{"3":{"position":[[401,2]]},"112":{"position":[[1474,2],[1490,2]]},"152":{"position":[[65,2]]},"202":{"position":[[32,2]]},"212":{"position":[[34,2],[113,2],[729,2]]},"214":{"position":[[13,2],[37,2]]},"237":{"position":[[70,2]]},"245":{"position":[[257,2]]},"265":{"position":[[31,2]]},"286":{"position":[[22,2]]},"327":{"position":[[79,2]]},"340":{"position":[[1765,2]]},"463":{"position":[[80,2]]},"530":{"position":[[796,2]]},"587":{"position":[[972,2]]},"639":{"position":[[399,2]]},"651":{"position":[[408,2]]},"732":{"position":[[295,2]]},"789":{"position":[[229,2]]},"836":{"position":[[60,2]]},"862":{"position":[[393,2]]},"1039":{"position":[[797,2]]},"1052":{"position":[[104,2]]},"1196":{"position":[[21,2]]},"1198":{"position":[[30,2]]},"1351":{"position":[[408,2]]},"1385":{"position":[[21,2]]},"1396":{"position":[[21,2]]},"1424":{"position":[[406,2],[1077,2],[1306,2],[1403,2],[1536,2],[2026,2]]},"1499":{"position":[[27,2]]},"1539":{"position":[[1672,2]]},"1566":{"position":[[157,2],[321,2],[328,2]]},"1572":{"position":[[45,2]]},"1711":{"position":[[698,2],[829,2]]},"1735":{"position":[[75,2],[262,2]]},"1901":{"position":[[198,2]]},"1903":{"position":[[537,2],[550,2],[582,2]]},"1925":{"position":[[1336,2],[1352,2]]},"1933":{"position":[[549,2],[565,2]]},"1951":{"position":[[132,2]]},"1955":{"position":[[18,2]]},"2175":{"position":[[192,2]]},"2182":{"position":[[251,2]]},"2184":{"position":[[241,2]]},"2245":{"position":[[105,2]]},"2393":{"position":[[78,2],[108,2]]},"2395":{"position":[[80,2]]},"2478":{"position":[[476,2]]},"2534":{"position":[[67,2]]},"2536":{"position":[[184,2]]},"2544":{"position":[[88,2]]},"2577":{"position":[[274,2]]},"2579":{"position":[[547,2]]},"2581":{"position":[[517,2],[1044,2]]},"2587":{"position":[[430,2]]},"2589":{"position":[[605,2]]},"2686":{"position":[[112,2],[128,2]]},"2817":{"position":[[79,2],[178,2],[220,2]]},"2819":{"position":[[63,2]]},"2889":{"position":[[453,2],[561,2]]},"2933":{"position":[[676,2]]},"2949":{"position":[[540,2]]},"2963":{"position":[[545,2]]},"2973":{"position":[[119,2]]},"3126":{"position":[[485,2],[507,2]]},"3150":{"position":[[37,2],[84,2],[111,2]]},"3154":{"position":[[223,2],[539,2]]},"3194":{"position":[[49,2],[636,2]]},"3287":{"position":[[1241,2]]},"3296":{"position":[[27,2],[53,2]]},"3377":{"position":[[30,2]]},"3385":{"position":[[56,2]]},"3460":{"position":[[64,2]]},"3579":{"position":[[23,2]]},"3597":{"position":[[371,2]]},"3626":{"position":[[90,2],[99,2],[456,2],[510,2]]},"3684":{"position":[[56,2]]},"3692":{"position":[[51,2],[112,2]]},"3700":{"position":[[79,2]]},"3727":{"position":[[51,2]]},"3740":{"position":[[63,2],[346,2]]},"3750":{"position":[[217,2]]},"3844":{"position":[[1021,2],[1124,2]]},"3936":{"position":[[1328,2]]},"3938":{"position":[[999,2],[1060,2]]},"3950":{"position":[[845,2]]},"3952":{"position":[[207,2]]},"3968":{"position":[[273,2]]},"3972":{"position":[[127,2]]},"3978":{"position":[[746,2]]},"3980":{"position":[[295,2]]},"3986":{"position":[[1317,2]]},"3988":{"position":[[266,2]]}}}],["调用函数",{"_index":9800,"t":{"3964":{"position":[[1070,4]]}}}],["调用者",{"_index":4198,"t":{"1385":{"position":[[41,3]]}}}],["调试",{"_index":4106,"t":{"1291":{"position":[[13,2]]},"1541":{"position":[[5,2],[472,2],[480,2]]},"1545":{"position":[[8,2]]},"2649":{"position":[[71,2],[90,2],[103,2]]},"2657":{"position":[[49,2],[95,2]]},"3073":{"position":[[15,2]]},"3414":{"position":[[58,2],[86,2],[92,2]]},"3416":{"position":[[139,2],[156,2]]},"3460":{"position":[[57,2]]},"3626":{"position":[[376,2]]},"3928":{"position":[[434,2],[880,2]]},"3964":{"position":[[294,2]]}}}],["调配",{"_index":2520,"t":{"429":{"position":[[15,2]]},"1064":{"position":[[222,2]]},"1066":{"position":[[824,2]]},"1289":{"position":[[21,2]]},"2393":{"position":[[64,2],[100,2],[148,2]]}}}],["谈起",{"_index":7751,"t":{"3242":{"position":[[275,2]]},"3910":{"position":[[272,2]]},"3934":{"position":[[2455,2]]}}}],["谓词",{"_index":2473,"t":{"415":{"position":[[253,2]]},"1572":{"position":[[587,2]]},"1576":{"position":[[198,2]]},"1589":{"position":[[242,2]]},"1615":{"position":[[307,2]]},"1617":{"position":[[44,2]]},"1641":{"position":[[131,2]]},"1649":{"position":[[27,2]]},"1661":{"position":[[96,2],[251,2]]},"2991":{"position":[[259,2]]},"3023":{"position":[[97,2],[252,2]]},"3982":{"position":[[732,2]]},"3992":{"position":[[961,2]]}}}],["谢",{"_index":4717,"t":{"1511":{"position":[[1717,1]]}}}],["谢谢",{"_index":4676,"t":{"1511":{"position":[[1220,2],[4111,2],[4201,2]]}}}],["谨言慎行",{"_index":6899,"t":{"2768":{"position":[[0,4],[92,4]]}}}],["貌似",{"_index":2188,"t":{"338":{"position":[[1145,2]]},"3926":{"position":[[155,2]]}}}],["贝",{"_index":6529,"t":{"2559":{"position":[[924,1]]}}}],["负数",{"_index":3134,"t":{"606":{"position":[[74,2],[802,2]]},"3986":{"position":[[447,2]]}}}],["负责",{"_index":1972,"t":{"300":{"position":[[129,2],[146,2]]},"500":{"position":[[12,2]]},"1432":{"position":[[122,2],[135,2]]},"2817":{"position":[[57,2],[198,2]]},"3608":{"position":[[48,2],[57,2]]},"3727":{"position":[[4,2]]}}}],["负责管理",{"_index":4208,"t":{"1389":{"position":[[10,4]]}}}],["负载",{"_index":1252,"t":{"179":{"position":[[130,2]]},"2678":{"position":[[6,2]]},"2740":{"position":[[88,2]]},"3104":{"position":[[31,2]]}}}],["负面影响",{"_index":1871,"t":{"255":{"position":[[255,4]]}}}],["贡献",{"_index":675,"t":{"106":{"position":[[46,2],[53,2],[72,2]]},"1691":{"position":[[30,2],[76,2]]},"2770":{"position":[[5,2],[54,2]]},"3702":{"position":[[1326,2],[1458,2],[1480,2]]},"3912":{"position":[[2743,2]]},"3934":{"position":[[1168,2]]},"3992":{"position":[[2762,2]]}}}],["贡献者",{"_index":2415,"t":{"401":{"position":[[127,3]]},"1511":{"position":[[1947,3]]}}}],["财务",{"_index":4524,"t":{"1507":{"position":[[79,2]]}}}],["财富",{"_index":9386,"t":{"3926":{"position":[[151,2]]}}}],["败",{"_index":1172,"t":{"162":{"position":[[5,1]]}}}],["账号",{"_index":4165,"t":{"1377":{"position":[[582,2],[712,2]]}}}],["账号密码",{"_index":865,"t":{"121":{"position":[[74,4]]}}}],["贫血",{"_index":5456,"t":{"1761":{"position":[[439,2],[522,2],[599,2]]}}}],["购买",{"_index":7205,"t":{"2910":{"position":[[304,2],[461,2]]}}}],["购置",{"_index":7232,"t":{"2915":{"position":[[136,2]]},"2919":{"position":[[151,2]]},"2923":{"position":[[23,2]]}}}],["贴",{"_index":661,"t":{"104":{"position":[[64,1]]},"127":{"position":[[126,1],[192,1]]},"137":{"position":[[83,1],[157,1]]},"141":{"position":[[37,1]]},"150":{"position":[[146,1]]},"212":{"position":[[70,1]]},"421":{"position":[[32,1]]},"587":{"position":[[43,1]]},"612":{"position":[[61,1]]},"615":{"position":[[94,1],[125,1]]},"617":{"position":[[1809,1]]},"623":{"position":[[20,1]]},"625":{"position":[[44,1]]},"751":{"position":[[57,1]]},"818":{"position":[[94,1]]},"1273":{"position":[[8,1]]},"1275":{"position":[[4,1]]},"1277":{"position":[[264,1],[293,1]]},"1279":{"position":[[159,1]]},"1412":{"position":[[2530,1]]},"1426":{"position":[[257,1]]},"1576":{"position":[[77,1]]},"1584":{"position":[[53,1]]},"1611":{"position":[[883,1]]},"1619":{"position":[[441,1]]},"1627":{"position":[[17,1],[69,1],[335,1],[391,1]]},"1641":{"position":[[441,1]]},"1663":{"position":[[481,1]]},"1737":{"position":[[25,1]]},"1751":{"position":[[28,1]]},"1783":{"position":[[105,1],[143,1]]},"1785":{"position":[[46,1]]},"1787":{"position":[[9,1]]},"1855":{"position":[[47,1],[77,1]]},"1857":{"position":[[150,1]]},"1867":{"position":[[56,1]]},"1871":{"position":[[99,1]]},"1875":{"position":[[674,1]]},"1909":{"position":[[54,1],[143,1]]},"2375":{"position":[[48,1]]},"2442":{"position":[[182,1]]},"2721":{"position":[[2,1],[63,1]]},"3287":{"position":[[31,1]]},"3289":{"position":[[42,1]]},"3294":{"position":[[35,1]]},"3296":{"position":[[88,1]]},"3401":{"position":[[98,1]]},"3444":{"position":[[51,1]]},"3448":{"position":[[38,1],[1397,1]]},"3672":{"position":[[71,1],[302,1]]},"3692":{"position":[[66,1]]},"3698":{"position":[[100,1]]},"3708":{"position":[[586,1]]},"3714":{"position":[[38,1]]},"3914":{"position":[[2837,1]]},"3918":{"position":[[3373,1]]},"3938":{"position":[[1014,1]]},"3954":{"position":[[713,1]]},"3972":{"position":[[346,1]]},"3982":{"position":[[401,1]]},"3984":{"position":[[1074,1]]},"3990":{"position":[[91,1]]},"3996":{"position":[[678,1]]}}}],["贴标签",{"_index":5190,"t":{"1659":{"position":[[53,3],[412,3]]},"3644":{"position":[[53,3],[412,3]]}}}],["费用",{"_index":7204,"t":{"2910":{"position":[[280,2]]}}}],["资产",{"_index":4535,"t":{"1509":{"position":[[100,2]]}}}],["资料",{"_index":3746,"t":{"919":{"position":[[162,2]]},"1485":{"position":[[335,2]]}}}],["资源",{"_index":842,"t":{"119":{"position":[[43,2],[140,2]]},"255":{"position":[[99,2]]},"1717":{"position":[[93,2]]},"1719":{"position":[[64,2],[76,2]]},"1724":{"position":[[412,2]]},"1726":{"position":[[114,2]]},"1735":{"position":[[14,2],[58,2],[73,2],[118,2],[241,2]]},"1745":{"position":[[100,2],[374,2]]},"1801":{"position":[[3082,2]]},"1803":{"position":[[5054,2]]},"1898":{"position":[[57,2]]},"1901":{"position":[[120,2]]},"1917":{"position":[[0,2],[18,2]]},"1919":{"position":[[293,2],[648,2]]},"1947":{"position":[[118,2]]},"2311":{"position":[[338,2],[449,2]]},"2542":{"position":[[31,2],[39,2],[108,2],[126,2]]},"2553":{"position":[[44,2],[187,2],[227,2]]},"2555":{"position":[[67,2]]},"2788":{"position":[[72,2],[233,2]]},"3031":{"position":[[44,2],[187,2],[227,2]]},"3078":{"position":[[144,2]]},"3088":{"position":[[108,2]]},"3579":{"position":[[183,2]]},"3620":{"position":[[337,2],[360,2],[373,2],[387,2],[403,2],[431,2]]},"3922":{"position":[[1362,2]]},"3934":{"position":[[617,2]]},"3956":{"position":[[122,2]]},"3964":{"position":[[14,2],[31,2],[606,2]]},"3968":{"position":[[23,2]]}}}],["资源共享",{"_index":2450,"t":{"408":{"position":[[2,4]]}}}],["资源管理",{"_index":3343,"t":{"694":{"position":[[23,4]]},"3362":{"position":[[26,4]]},"3365":{"position":[[16,4]]}}}],["赋予",{"_index":3114,"t":{"589":{"position":[[53,2]]}}}],["赋值",{"_index":6219,"t":{"2352":{"position":[[191,2]]},"2684":{"position":[[316,2],[326,2],[357,2],[400,2]]},"2688":{"position":[[99,2]]},"3779":{"position":[[1839,2]]},"3802":{"position":[[2616,2]]},"3994":{"position":[[1163,2]]}}}],["赛车",{"_index":1198,"t":{"168":{"position":[[25,2]]}}}],["赞",{"_index":4673,"t":{"1511":{"position":[[1193,1],[1973,1],[3393,1],[3544,1]]}}}],["赞助",{"_index":4526,"t":{"1509":{"position":[[0,2],[127,2],[231,2],[261,2]]},"1511":{"position":[[103,2],[124,2],[179,2],[189,2],[202,2],[642,2],[1674,2],[4075,2]]}}}],["赞助人",{"_index":4571,"t":{"1511":{"position":[[196,3]]}}}],["赞助商",{"_index":2410,"t":{"399":{"position":[[902,3]]},"1507":{"position":[[2,3]]}}}],["赞助者",{"_index":4522,"t":{"1507":{"position":[[73,3]]}}}],["赞扬",{"_index":1188,"t":{"166":{"position":[[33,2]]},"3242":{"position":[[211,2]]},"3910":{"position":[[208,2]]},"3934":{"position":[[2377,2]]}}}],["赞赏",{"_index":4559,"t":{"1511":{"position":[[44,2],[68,2],[1183,2],[1205,2],[1244,2],[1275,2],[1318,2],[1356,2],[1411,2],[1437,2],[1451,2],[1475,2],[1500,2],[1530,2],[1559,2],[1592,2],[1616,2],[1639,2],[1661,2],[1710,2],[1742,2],[1823,2],[1851,2],[1887,2],[1911,2],[1961,2],[1987,2],[2083,2],[2114,2],[2147,2],[2181,2],[2214,2],[2249,2],[2270,2],[2301,2],[2367,2],[2383,2],[2410,2],[2429,2],[2447,2],[2462,2],[2484,2],[2520,2],[2556,2],[2577,2],[2599,2],[2623,2],[2652,2],[2674,2],[2699,2],[2721,2],[2810,2],[2838,2],[2861,2],[2879,2],[2903,2],[2925,2],[2949,2],[2972,2],[2993,2],[3015,2],[3040,2],[3061,2],[3082,2],[3110,2],[3144,2],[3172,2],[3227,2],[3261,2],[3288,2],[3316,2],[3342,2],[3373,2],[3402,2],[3436,2],[3472,2],[3502,2],[3536,2],[3604,2],[3666,2],[3698,2],[3741,2],[3772,2],[3799,2],[3842,2],[3879,2],[3912,2],[3941,2],[3982,2],[4019,2],[4052,2],[4122,2],[4146,2],[4167,2],[4194,2],[4236,2]]}}}],["走",{"_index":3927,"t":{"1064":{"position":[[572,1],[754,1]]},"1066":{"position":[[1117,1]]},"2915":{"position":[[241,1]]},"3352":{"position":[[135,1],[142,1],[518,1]]},"3950":{"position":[[816,1]]}}}],["赶紧",{"_index":7954,"t":{"3352":{"position":[[253,2]]}}}],["起始",{"_index":2684,"t":{"482":{"position":[[573,2]]},"494":{"position":[[448,2],[500,2],[580,2],[669,2]]},"2418":{"position":[[875,2]]},"2735":{"position":[[421,2]]},"3798":{"position":[[330,2]]},"3800":{"position":[[86,2]]},"3808":{"position":[[3005,2]]},"3810":{"position":[[548,2]]}}}],["起效",{"_index":7869,"t":{"3289":{"position":[[61,2]]}}}],["起来",{"_index":687,"t":{"110":{"position":[[38,2]]},"144":{"position":[[595,2]]},"340":{"position":[[1229,2]]},"431":{"position":[[62,2]]},"565":{"position":[[38,2]]},"1103":{"position":[[224,2]]},"1511":{"position":[[484,2]]},"1869":{"position":[[581,2]]},"2508":{"position":[[31,2]]},"2705":{"position":[[62,2]]},"2770":{"position":[[21,2]]},"2973":{"position":[[29,2]]},"3189":{"position":[[69,2]]},"3414":{"position":[[154,2]]},"3626":{"position":[[165,2]]},"3815":{"position":[[65,2]]}}}],["起航",{"_index":7745,"t":{"3242":{"position":[[241,2]]},"3910":{"position":[[238,2]]},"3926":{"position":[[602,2],[678,2]]},"3934":{"position":[[2419,2]]}}}],["超",{"_index":1490,"t":{"199":{"position":[[467,1]]},"589":{"position":[[56,1]]},"2684":{"position":[[500,1]]}}}],["超出",{"_index":5554,"t":{"1801":{"position":[[1109,2]]},"1803":{"position":[[3303,2]]},"3432":{"position":[[612,2],[736,2]]},"3800":{"position":[[188,2],[244,2],[270,2]]}}}],["超时",{"_index":1787,"t":{"243":{"position":[[176,2]]},"1474":{"position":[[441,2]]},"1809":{"position":[[61,2]]},"3287":{"position":[[960,2]]},"3512":{"position":[[116,2]]},"3577":{"position":[[19,2]]},"3832":{"position":[[51,2]]},"3914":{"position":[[2154,2],[3397,2]]},"3962":{"position":[[333,2],[441,2],[481,2],[569,2]]}}}],["超级",{"_index":4606,"t":{"1511":{"position":[[529,2]]},"2870":{"position":[[13,2],[15,2]]}}}],["超越",{"_index":4592,"t":{"1511":{"position":[[397,2]]}}}],["超过",{"_index":1707,"t":{"233":{"position":[[681,2]]},"1509":{"position":[[39,2]]},"1747":{"position":[[69,2]]},"1801":{"position":[[986,2]]},"1803":{"position":[[3156,2]]},"3100":{"position":[[83,2]]},"3102":{"position":[[12,2],[25,2]]},"3224":{"position":[[361,2]]},"3908":{"position":[[326,2]]}}}],["超限",{"_index":8852,"t":{"3800":{"position":[[263,2]]}}}],["超高频",{"_index":9137,"t":{"3914":{"position":[[2900,3]]},"3918":{"position":[[3781,3],[3822,3]]}}}],["越",{"_index":1571,"t":{"212":{"position":[[106,1],[109,1]]},"214":{"position":[[28,1],[35,1]]},"1416":{"position":[[400,1],[404,1]]},"1422":{"position":[[78,1],[82,1]]},"1672":{"position":[[8,1]]},"1905":{"position":[[153,1]]},"1961":{"position":[[239,1],[242,1]]},"3063":{"position":[[1518,1]]},"3640":{"position":[[428,1]]},"3706":{"position":[[1529,1]]}}}],["越南",{"_index":6700,"t":{"2559":{"position":[[2735,2],[2744,2],[2748,2]]}}}],["越发",{"_index":7738,"t":{"3242":{"position":[[132,2]]},"3910":{"position":[[129,2]]},"3934":{"position":[[2237,2]]}}}],["越来越",{"_index":1460,"t":{"199":{"position":[[0,3]]},"206":{"position":[[169,3],[197,3]]},"300":{"position":[[17,3]]},"1511":{"position":[[2357,3],[3359,3],[3388,3]]},"3088":{"position":[[45,3],[58,3],[80,3]]},"3242":{"position":[[124,3]]},"3910":{"position":[[121,3]]},"3922":{"position":[[734,3]]},"3926":{"position":[[254,3]]},"3934":{"position":[[2229,3]]}}}],["趋势",{"_index":6139,"t":{"2326":{"position":[[40,2]]}}}],["足以",{"_index":9433,"t":{"3928":{"position":[[203,2]]}}}],["趸",{"_index":7737,"t":{"3242":{"position":[[129,1]]},"3910":{"position":[[126,1]]},"3926":{"position":[[430,1]]},"3934":{"position":[[2234,1]]}}}],["跑",{"_index":6328,"t":{"2424":{"position":[[95,1]]},"3352":{"position":[[184,1],[232,1]]},"3414":{"position":[[153,1]]}}}],["跟不上",{"_index":8469,"t":{"3626":{"position":[[220,3]]}}}],["跟着",{"_index":7370,"t":{"3080":{"position":[[507,2]]}}}],["跟踪",{"_index":1313,"t":{"186":{"position":[[64,2]]},"532":{"position":[[89,2]]},"653":{"position":[[25,2]]},"887":{"position":[[15,2],[57,2]]},"1353":{"position":[[25,2]]},"1566":{"position":[[356,2],[408,2],[431,2]]},"3416":{"position":[[63,2],[212,2]]},"3932":{"position":[[1278,2]]},"3964":{"position":[[558,2]]}}}],["跨",{"_index":585,"t":{"95":{"position":[[148,1]]},"239":{"position":[[164,1]]},"329":{"position":[[92,1]]},"340":{"position":[[549,1]]},"404":{"position":[[46,1],[56,1]]},"406":{"position":[[21,1],[158,1],[223,1],[295,1],[370,1]]},"408":{"position":[[0,1],[124,1]]},"411":{"position":[[2,1]]},"413":{"position":[[146,1]]},"415":{"position":[[32,1],[84,1],[247,1],[299,1],[456,1]]},"421":{"position":[[15,1]]},"423":{"position":[[10,1],[252,1]]},"425":{"position":[[35,1],[63,1]]},"2843":{"position":[[280,1]]},"2856":{"position":[[38,1]]},"2868":{"position":[[113,1]]},"2881":{"position":[[22,1]]},"2917":{"position":[[202,1]]},"2989":{"position":[[0,1],[20,1]]},"2991":{"position":[[38,1],[90,1],[253,1],[305,1],[462,1]]},"2995":{"position":[[10,1]]},"3104":{"position":[[57,1],[71,1]]},"3108":{"position":[[124,1]]},"3110":{"position":[[174,1]]},"3118":{"position":[[141,1]]},"3120":{"position":[[0,1]]},"3126":{"position":[[218,1]]},"3150":{"position":[[59,1]]},"3158":{"position":[[29,1]]},"3242":{"position":[[154,1]]},"3367":{"position":[[12,1]]},"3373":{"position":[[12,1]]},"3478":{"position":[[0,1],[4,1],[23,1]]},"3910":{"position":[[151,1]]},"3922":{"position":[[1346,1]]},"3924":{"position":[[307,1],[366,1],[1498,1]]},"3932":{"position":[[52,1],[381,1],[1525,1]]},"3934":{"position":[[1154,1],[2259,1]]},"3936":{"position":[[969,1]]},"3938":{"position":[[451,1]]},"3940":{"position":[[590,1]]},"3974":{"position":[[785,1]]},"3978":{"position":[[383,1]]},"3986":{"position":[[992,1],[1266,1]]},"3990":{"position":[[731,1]]},"3992":{"position":[[1966,1],[2835,1]]},"4006":{"position":[[767,1]]}}}],["跨平台",{"_index":4915,"t":{"1518":{"position":[[0,3]]},"2175":{"position":[[279,3]]},"2740":{"position":[[74,3]]},"3367":{"position":[[8,3]]},"3373":{"position":[[8,3]]}}}],["跨行",{"_index":7743,"t":{"3242":{"position":[[156,2]]},"3910":{"position":[[153,2]]},"3934":{"position":[[2261,2]]}}}],["跨过",{"_index":2707,"t":{"482":{"position":[[907,2]]},"2418":{"position":[[1269,2]]}}}],["路径",{"_index":215,"t":{"13":{"position":[[36,2]]},"15":{"position":[[122,2]]},"17":{"position":[[116,2]]},"19":{"position":[[511,2]]},"319":{"position":[[120,2],[413,2]]},"321":{"position":[[131,2]]},"455":{"position":[[2,2]]},"516":{"position":[[531,2]]},"685":{"position":[[297,2]]},"1377":{"position":[[305,2]]},"1379":{"position":[[663,2]]},"1488":{"position":[[519,2],[578,2]]},"1495":{"position":[[521,2]]},"1729":{"position":[[73,2]]},"1731":{"position":[[20,2]]},"1735":{"position":[[60,2]]},"1739":{"position":[[2,2],[96,2]]},"1741":{"position":[[683,2],[1443,2],[2279,2]]},"1745":{"position":[[102,2]]},"2296":{"position":[[36,2]]},"2442":{"position":[[1512,2]]},"2512":{"position":[[24,2]]},"2723":{"position":[[31,2],[81,2]]},"2905":{"position":[[67,2]]},"2981":{"position":[[254,2]]},"3432":{"position":[[74,2],[424,2]]},"3450":{"position":[[262,2]]},"3522":{"position":[[185,2],[1265,2]]},"3526":{"position":[[10,2]]},"3563":{"position":[[299,2],[503,2]]},"3565":{"position":[[10,2]]},"3616":{"position":[[4,2],[40,2]]},"3618":{"position":[[20,2],[51,2]]},"3620":{"position":[[273,2]]},"3636":{"position":[[588,2],[598,2]]},"3912":{"position":[[2195,2]]},"3918":{"position":[[2043,2],[3624,2]]},"3930":{"position":[[1090,2]]},"3944":{"position":[[608,2]]},"3952":{"position":[[405,2]]},"3976":{"position":[[51,2]]},"3992":{"position":[[3199,2],[3557,2]]}}}],["路由",{"_index":717,"t":{"112":{"position":[[544,2]]},"114":{"position":[[228,2]]},"137":{"position":[[9,2]]},"327":{"position":[[73,2]]},"1572":{"position":[[590,2]]},"1576":{"position":[[145,2],[301,2]]},"1578":{"position":[[84,2]]},"1580":{"position":[[357,2]]},"1589":{"position":[[179,2],[195,2],[237,2]]},"1598":{"position":[[26,2],[44,2],[103,2]]},"1611":{"position":[[408,2],[807,2]]},"1617":{"position":[[13,2],[23,2],[33,2],[41,2],[49,2],[1101,2],[1120,2],[1132,2]]},"1619":{"position":[[19,2]]},"1625":{"position":[[37,2]]},"1627":{"position":[[192,2]]},"1629":{"position":[[42,2]]},"1635":{"position":[[48,2],[179,2]]},"1641":{"position":[[359,2]]},"1653":{"position":[[13,2]]},"1661":{"position":[[55,2],[177,2],[515,2]]},"1663":{"position":[[533,2]]},"1801":{"position":[[775,2],[933,2],[1433,2],[3331,2]]},"1803":{"position":[[5544,2]]},"1925":{"position":[[392,2]]},"1951":{"position":[[368,2]]},"2519":{"position":[[301,2]]},"2591":{"position":[[27,2],[55,2]]},"2627":{"position":[[14,2],[28,2]]},"2881":{"position":[[29,2]]},"3023":{"position":[[56,2],[178,2],[512,2]]},"3063":{"position":[[781,2]]},"3446":{"position":[[703,2]]},"3632":{"position":[[77,2]]},"3700":{"position":[[73,2]]},"3704":{"position":[[193,2],[303,2],[505,2],[613,2]]},"3706":{"position":[[773,2]]},"3924":{"position":[[518,2],[3727,2],[3837,2],[4039,2],[4153,2]]},"3928":{"position":[[1278,2]]},"3930":{"position":[[1219,2]]},"3936":{"position":[[519,2]]},"3964":{"position":[[211,2]]},"3976":{"position":[[430,2],[456,2]]},"3982":{"position":[[426,2]]},"3986":{"position":[[120,2]]}}}],["路由表",{"_index":5878,"t":{"1941":{"position":[[426,3]]}}}],["路线",{"_index":7241,"t":{"2915":{"position":[[244,2]]}}}],["跳",{"_index":3125,"t":{"602":{"position":[[170,1]]},"612":{"position":[[16,1]]},"619":{"position":[[46,1]]},"623":{"position":[[35,1]]},"1416":{"position":[[160,1]]},"1426":{"position":[[275,1]]},"1783":{"position":[[95,1]]},"1913":{"position":[[1193,1]]},"3779":{"position":[[1712,1],[1837,1]]},"3783":{"position":[[1452,1],[1663,1]]},"3802":{"position":[[2483,1],[2614,1]]},"3806":{"position":[[3074,1]]},"3960":{"position":[[441,1]]},"3966":{"position":[[887,1],[1069,1]]},"3974":{"position":[[172,1]]},"3988":{"position":[[7,1]]},"3998":{"position":[[309,1]]}}}],["跳转",{"_index":5829,"t":{"1911":{"position":[[45,2]]},"1913":{"position":[[981,2]]},"2657":{"position":[[87,2]]},"3213":{"position":[[8,2]]}}}],["蹉跎",{"_index":9424,"t":{"3926":{"position":[[539,2]]}}}],["身份",{"_index":837,"t":{"119":{"position":[[9,2]]}}}],["身份证",{"_index":3140,"t":{"606":{"position":[[130,3]]},"608":{"position":[[597,3]]}}}],["身份证号",{"_index":7037,"t":{"2782":{"position":[[104,4]]}}}],["身份验证",{"_index":846,"t":{"119":{"position":[[72,4],[115,4]]},"121":{"position":[[753,4]]},"125":{"position":[[75,4]]},"129":{"position":[[19,4],[353,4]]},"423":{"position":[[119,4]]}}}],["身影",{"_index":7753,"t":{"3242":{"position":[[296,2]]},"3910":{"position":[[293,2]]},"3926":{"position":[[251,2]]},"3934":{"position":[[2480,2]]}}}],["转",{"_index":3966,"t":{"1117":{"position":[[33,1]]},"1580":{"position":[[193,1]]},"1661":{"position":[[413,1],[873,1]]},"1741":{"position":[[1160,1]]},"2023":{"position":[[112,1]]},"3023":{"position":[[410,1],[870,1]]},"3267":{"position":[[393,1]]},"3926":{"position":[[268,1]]},"3936":{"position":[[303,1]]},"3940":{"position":[[708,1]]},"3972":{"position":[[71,1]]},"3986":{"position":[[1728,1]]},"3994":{"position":[[1155,1]]},"3996":{"position":[[216,1],[1091,1],[1378,1]]},"4006":{"position":[[245,1]]}}}],["转为",{"_index":5106,"t":{"1594":{"position":[[378,2]]},"2379":{"position":[[20,2]]},"3984":{"position":[[119,2]]},"3996":{"position":[[1570,2]]}}}],["转义",{"_index":8799,"t":{"3779":{"position":[[937,2]]},"3802":{"position":[[1286,2]]},"3817":{"position":[[1586,2]]}}}],["转化率",{"_index":4553,"t":{"1509":{"position":[[276,3]]}}}],["转发",{"_index":4904,"t":{"1513":{"position":[[21,2]]},"2564":{"position":[[164,2]]},"3589":{"position":[[598,2]]},"3678":{"position":[[58,2]]}}}],["转换",{"_index":1312,"t":{"186":{"position":[[58,2]]},"284":{"position":[[77,2],[180,2],[220,2],[364,2]]},"494":{"position":[[823,2],[909,2]]},"1566":{"position":[[649,2]]},"1580":{"position":[[481,2]]},"1598":{"position":[[21,2]]},"1609":{"position":[[293,2]]},"1631":{"position":[[600,2]]},"1661":{"position":[[1383,2]]},"1745":{"position":[[94,2]]},"1801":{"position":[[1694,2]]},"2361":{"position":[[326,2]]},"2526":{"position":[[24,2],[52,2],[80,2]]},"2684":{"position":[[15,2]]},"2688":{"position":[[91,2]]},"2891":{"position":[[119,2]]},"3023":{"position":[[1380,2]]},"3282":{"position":[[177,2]]},"3597":{"position":[[53,2]]},"3934":{"position":[[919,2]]},"3938":{"position":[[658,2]]},"3946":{"position":[[58,2]]},"3948":{"position":[[81,2]]},"3950":{"position":[[271,2],[531,2]]},"3996":{"position":[[754,2]]}}}],["转换器",{"_index":5082,"t":{"1589":{"position":[[71,3],[76,3]]},"3912":{"position":[[1142,3]]},"3914":{"position":[[991,3]]},"3918":{"position":[[857,3]]}}}],["转换成",{"_index":1945,"t":{"288":{"position":[[323,3],[449,3]]},"439":{"position":[[34,3]]},"494":{"position":[[691,3]]},"1269":{"position":[[233,3]]},"1743":{"position":[[10,3]]},"1795":{"position":[[918,3]]},"3170":{"position":[[61,3]]},"3785":{"position":[[32,3],[45,3],[363,3],[1408,3]]},"3793":{"position":[[261,3]]},"3812":{"position":[[34,3],[47,3],[641,3],[2304,3]]},"3821":{"position":[[38,3],[51,3]]},"3830":{"position":[[358,3]]},"3936":{"position":[[1299,3]]},"3978":{"position":[[815,3]]}}}],["转码",{"_index":8325,"t":{"3532":{"position":[[38,2],[67,2]]},"3571":{"position":[[38,2],[67,2]]},"3980":{"position":[[262,2]]}}}],["转移",{"_index":3912,"t":{"1050":{"position":[[59,2]]}}}],["转而",{"_index":9434,"t":{"3928":{"position":[[218,2]]}}}],["转账",{"_index":4692,"t":{"1511":{"position":[[1380,2],[3202,2]]}}}],["软",{"_index":3639,"t":{"846":{"position":[[716,1]]},"3962":{"position":[[518,1]]},"3972":{"position":[[599,1]]},"3974":{"position":[[732,1]]},"3996":{"position":[[966,1]]}}}],["软件",{"_index":1236,"t":{"179":{"position":[[26,2]]},"1511":{"position":[[2327,2]]},"2564":{"position":[[22,2]]},"2910":{"position":[[29,2],[172,2],[203,2],[306,2],[326,2],[343,2],[363,2],[388,2],[419,2]]},"2915":{"position":[[175,2]]},"3142":{"position":[[206,2]]},"3350":{"position":[[31,2],[116,2],[184,2]]},"3412":{"position":[[32,2]]}}}],["软件厂商",{"_index":7210,"t":{"2910":{"position":[[366,4]]}}}],["软件工程",{"_index":1227,"t":{"176":{"position":[[1,4]]}}}],["软件应用",{"_index":7196,"t":{"2910":{"position":[[78,4]]}}}],["软件开发",{"_index":4867,"t":{"1511":{"position":[[3691,4]]},"3350":{"position":[[163,4]]}}}],["软件架构",{"_index":7219,"t":{"2912":{"position":[[25,4]]}}}],["软硬件",{"_index":1243,"t":{"179":{"position":[[73,3]]}}}],["轻松",{"_index":573,"t":{"95":{"position":[[97,2]]},"2803":{"position":[[58,2]]},"3140":{"position":[[69,2]]},"3150":{"position":[[81,2]]},"3244":{"position":[[13,2]]}}}],["轻狂",{"_index":9403,"t":{"3926":{"position":[[390,2]]}}}],["轻量级",{"_index":4244,"t":{"1399":{"position":[[32,3]]},"1699":{"position":[[18,3]]},"1701":{"position":[[20,3]]},"2341":{"position":[[46,3]]},"2480":{"position":[[37,3]]},"2856":{"position":[[1740,3]]},"3126":{"position":[[77,3]]},"3976":{"position":[[93,3]]}}}],["载体",{"_index":3859,"t":{"986":{"position":[[143,2]]},"1797":{"position":[[27,2],[46,2]]}}}],["载入",{"_index":1549,"t":{"206":{"position":[[340,2]]},"445":{"position":[[834,2]]},"449":{"position":[[26,2]]},"455":{"position":[[112,2]]},"1309":{"position":[[110,2]]},"2985":{"position":[[50,2]]},"3774":{"position":[[240,2]]}}}],["较",{"_index":1639,"t":{"220":{"position":[[890,1]]},"427":{"position":[[53,1]]},"433":{"position":[[109,1]]},"445":{"position":[[825,1]]},"498":{"position":[[87,1]]},"893":{"position":[[87,1]]},"1313":{"position":[[324,1]]},"1917":{"position":[[9,1]]},"2887":{"position":[[34,1]]},"2915":{"position":[[44,1],[236,1]]},"2917":{"position":[[113,1]]},"3094":{"position":[[95,1]]},"3104":{"position":[[41,1]]}}}],["较为",{"_index":6203,"t":{"2341":{"position":[[214,2]]},"3620":{"position":[[114,2]]}}}],["较差",{"_index":7412,"t":{"3104":{"position":[[86,2]]}}}],["较广",{"_index":7481,"t":{"3136":{"position":[[168,2]]}}}],["辅",{"_index":2069,"t":{"314":{"position":[[153,1]]},"316":{"position":[[157,1]]},"3608":{"position":[[11,1]]}}}],["辅助",{"_index":7078,"t":{"2813":{"position":[[80,2]]},"3301":{"position":[[22,2]]},"3966":{"position":[[1529,2]]},"3978":{"position":[[1313,2]]}}}],["辉",{"_index":4894,"t":{"1511":{"position":[[4118,1]]}}}],["输",{"_index":1894,"t":{"265":{"position":[[26,1]]},"1157":{"position":[[32,1]]}}}],["输入",{"_index":864,"t":{"121":{"position":[[72,2]]},"447":{"position":[[48,2]]},"675":{"position":[[292,2]]},"685":{"position":[[302,2],[409,2],[432,2],[510,2],[515,2]]},"688":{"position":[[3,2]]},"696":{"position":[[524,2]]},"1125":{"position":[[110,2]]},"1127":{"position":[[143,2]]},"1185":{"position":[[36,2],[420,2]]},"1539":{"position":[[24,2],[50,2],[81,2],[110,2]]},"1543":{"position":[[4,2],[116,2],[242,2],[366,2]]},"1555":{"position":[[554,2],[596,2],[606,2]]},"1557":{"position":[[140,2],[239,2],[412,2],[477,2]]},"1572":{"position":[[23,2]]},"1979":{"position":[[862,2],[881,2],[907,2]]},"1991":{"position":[[258,2],[277,2],[303,2]]},"2014":{"position":[[258,2],[277,2],[303,2]]},"2510":{"position":[[10,2]]},"2517":{"position":[[50,2]]},"2751":{"position":[[45,2]]},"2836":{"position":[[870,2]]},"3375":{"position":[[28,2]]},"3664":{"position":[[17,2],[467,2]]}}}],["输出",{"_index":1942,"t":{"288":{"position":[[131,2],[289,2],[304,2],[708,2]]},"290":{"position":[[131,2]]},"427":{"position":[[46,2]]},"433":{"position":[[102,2]]},"445":{"position":[[812,2]]},"498":{"position":[[79,2]]},"698":{"position":[[339,2]]},"893":{"position":[[79,2]]},"1125":{"position":[[61,2],[145,2],[174,2],[220,2],[268,2]]},"1127":{"position":[[236,2],[314,2]]},"1133":{"position":[[92,2]]},"1185":{"position":[[71,2],[100,2],[146,2],[194,2],[513,2],[591,2]]},"1313":{"position":[[316,2]]},"1539":{"position":[[65,2],[99,2],[125,2],[478,2],[1906,2]]},"1543":{"position":[[131,2],[260,2],[381,2]]},"1555":{"position":[[3,2],[28,2],[257,2],[473,2]]},"1557":{"position":[[994,2],[999,2]]},"1625":{"position":[[22,2]]},"1677":{"position":[[155,2],[220,2]]},"1821":{"position":[[242,2]]},"1885":{"position":[[226,2]]},"1939":{"position":[[58,2]]},"2359":{"position":[[226,2],[435,2]]},"2517":{"position":[[56,2]]},"2538":{"position":[[64,2]]},"2540":{"position":[[81,2]]},"2981":{"position":[[479,2]]},"3009":{"position":[[258,2]]},"3215":{"position":[[538,2]]},"3383":{"position":[[9,2]]},"3414":{"position":[[118,2]]},"3428":{"position":[[98,2],[120,2]]},"3430":{"position":[[498,2],[522,2],[2435,2],[3201,2],[3434,2],[3575,2],[3641,2]]},"3432":{"position":[[18,2],[2161,2],[2642,2],[3409,2],[3892,2],[4122,2],[4276,2],[4844,2]]},"3434":{"position":[[3,2],[1654,2],[2487,2],[2650,2]]},"3446":{"position":[[372,2],[428,2],[534,2]]},"3448":{"position":[[543,2],[676,2],[746,2],[1100,2]]},"3452":{"position":[[46,2],[470,2],[1041,2]]},"3468":{"position":[[20,2]]},"3470":{"position":[[35,2]]},"3496":{"position":[[388,2]]},"3541":{"position":[[752,2]]},"3636":{"position":[[571,2],[586,2]]},"3729":{"position":[[45,2]]},"3768":{"position":[[2439,2]]},"3770":{"position":[[23,2],[1228,2],[1726,2],[2682,2],[3126,2],[3248,2],[3378,2],[4535,2]]},"3785":{"position":[[378,2],[519,2],[653,2]]},"3806":{"position":[[3268,2]]},"3812":{"position":[[656,2],[795,2],[927,2]]},"3826":{"position":[[118,2]]},"3842":{"position":[[259,2],[889,2],[1454,2],[2044,2],[2685,2],[3302,2]]},"3844":{"position":[[265,2]]},"3846":{"position":[[505,2]]},"3850":{"position":[[91,2]]},"3852":{"position":[[91,2]]},"3854":{"position":[[93,2]]},"3856":{"position":[[107,2]]},"3874":{"position":[[24,2]]},"3876":{"position":[[24,2]]},"3896":{"position":[[36,2]]},"3910":{"position":[[1521,2]]},"3912":{"position":[[730,2],[777,2],[816,2],[1068,2],[1978,2],[2489,2]]},"3916":{"position":[[831,2],[918,2],[2847,2],[3204,2],[3233,2],[3473,2],[4037,2]]},"3918":{"position":[[761,2],[893,2],[1165,2]]},"3920":{"position":[[1778,2]]},"3924":{"position":[[1286,2]]},"3928":{"position":[[1109,2]]},"3936":{"position":[[2072,2]]},"3950":{"position":[[489,2],[657,2]]},"3964":{"position":[[246,2]]},"3974":{"position":[[535,2]]}}}],["辛苦",{"_index":4865,"t":{"1511":{"position":[[3651,2]]},"3242":{"position":[[82,2]]},"3910":{"position":[[79,2]]},"3934":{"position":[[2176,2]]}}}],["辩论",{"_index":9515,"t":{"3934":{"position":[[1192,2]]}}}],["边",{"_index":7450,"t":{"3124":{"position":[[75,1],[77,1]]}}}],["边界",{"_index":7536,"t":{"3150":{"position":[[62,2]]}}}],["边界值",{"_index":9707,"t":{"3960":{"position":[[434,3]]},"3990":{"position":[[445,3]]}}}],["达",{"_index":642,"t":{"102":{"position":[[166,1]]},"2472":{"position":[[389,1]]},"2559":{"position":[[1508,1],[1519,1]]},"3209":{"position":[[67,1]]},"3211":{"position":[[176,1]]},"3250":{"position":[[66,1]]}}}],["达到",{"_index":3953,"t":{"1103":{"position":[[153,2]]},"1697":{"position":[[58,2]]},"1761":{"position":[[156,2]]},"1793":{"position":[[58,2]]},"2321":{"position":[[80,2]]},"3914":{"position":[[2974,2]]}}}],["迁移",{"_index":1584,"t":{"216":{"position":[[464,2]]},"706":{"position":[[18,2],[95,2],[207,2],[246,2]]},"1319":{"position":[[18,2],[95,2],[208,2],[247,2]]},"1761":{"position":[[295,2]]},"2881":{"position":[[243,2]]},"2951":{"position":[[642,2]]},"2965":{"position":[[21,2],[44,2],[208,2],[217,2]]},"3108":{"position":[[110,2]]},"3110":{"position":[[135,2]]},"3112":{"position":[[41,2]]},"3131":{"position":[[189,2]]},"3966":{"position":[[1885,2]]},"3968":{"position":[[589,2]]},"3976":{"position":[[486,2]]},"3986":{"position":[[1769,2]]},"3992":{"position":[[1042,2],[2345,2]]},"3994":{"position":[[646,2],[1719,2]]}}}],["过",{"_index":881,"t":{"121":{"position":[[190,1]]},"319":{"position":[[613,1]]},"602":{"position":[[171,1]]},"612":{"position":[[17,1]]},"619":{"position":[[47,1]]},"623":{"position":[[36,1]]},"1416":{"position":[[161,1]]},"1426":{"position":[[276,1]]},"1511":{"position":[[375,1]]},"1516":{"position":[[2,1]]},"1783":{"position":[[96,1]]},"1913":{"position":[[1194,1]]},"2770":{"position":[[68,1],[91,1]]},"2862":{"position":[[35,1]]},"3100":{"position":[[40,1]]},"3242":{"position":[[88,1]]},"3626":{"position":[[27,1]]},"3779":{"position":[[1713,1],[1838,1]]},"3783":{"position":[[1453,1],[1664,1]]},"3802":{"position":[[2484,1],[2615,1]]},"3806":{"position":[[3075,1]]},"3910":{"position":[[85,1]]},"3922":{"position":[[2026,1]]},"3924":{"position":[[1288,1]]},"3926":{"position":[[124,1],[382,1],[438,1],[452,1]]},"3934":{"position":[[2182,1]]},"3960":{"position":[[442,1]]},"3966":{"position":[[888,1],[1070,1]]},"3974":{"position":[[173,1]]},"3988":{"position":[[8,1]]},"3998":{"position":[[310,1]]}}}],["过于",{"_index":7509,"t":{"3140":{"position":[[12,2]]}}}],["过去",{"_index":4328,"t":{"1432":{"position":[[204,2]]},"1511":{"position":[[871,2],[874,2]]},"1761":{"position":[[30,2],[97,2],[172,2]]},"1777":{"position":[[1,2]]},"1832":{"position":[[61,2]]},"2684":{"position":[[1,2]]},"3069":{"position":[[159,2]]},"3242":{"position":[[21,2]]},"3305":{"position":[[1,2]]},"3532":{"position":[[0,2]]},"3571":{"position":[[0,2]]},"3688":{"position":[[34,2]]},"3910":{"position":[[18,2]]},"3912":{"position":[[1673,2]]},"3914":{"position":[[1457,2],[1627,2]]},"3916":{"position":[[2726,2]]},"3924":{"position":[[2666,2]]},"3928":{"position":[[194,2],[537,2]]},"3930":{"position":[[1395,2]]},"3934":{"position":[[2102,2]]},"3950":{"position":[[413,2]]},"3952":{"position":[[245,2]]}}}],["过度",{"_index":4210,"t":{"1389":{"position":[[55,2]]}}}],["过时",{"_index":1690,"t":{"233":{"position":[[281,2]]},"3692":{"position":[[44,2],[108,2]]},"3938":{"position":[[175,2],[973,2],[992,2],[1056,2]]},"3944":{"position":[[450,2],[503,2]]}}}],["过期",{"_index":989,"t":{"127":{"position":[[1141,2],[1190,2],[1234,2]]},"148":{"position":[[329,2],[365,2],[378,2]]},"152":{"position":[[679,2],[712,2]]},"233":{"position":[[23,2],[272,2],[298,2],[314,2],[321,2],[326,2],[343,2],[350,2],[356,2],[385,2],[398,2],[411,2],[416,2],[422,2],[439,2],[450,2]]},"237":{"position":[[14,2],[22,2],[1352,2]]},"243":{"position":[[174,2]]},"415":{"position":[[348,2]]},"2132":{"position":[[117,2]]},"2136":{"position":[[39,2],[75,2]]},"2991":{"position":[[354,2]]},"3039":{"position":[[264,2],[305,2],[342,2]]},"3041":{"position":[[352,2],[401,2],[445,2]]},"3992":{"position":[[1555,2],[2145,2]]}}}],["过来",{"_index":3010,"t":{"579":{"position":[[18,2]]},"1511":{"position":[[1392,2]]},"2547":{"position":[[65,2]]}}}],["过滤",{"_index":3015,"t":{"581":{"position":[[0,2]]},"2313":{"position":[[520,2]]},"2937":{"position":[[21,2]]},"3430":{"position":[[515,2],[524,2],[1464,2],[1479,2],[1486,2]]},"3454":{"position":[[67,2],[83,2]]},"3458":{"position":[[549,2],[585,2]]},"3466":{"position":[[789,2]]},"3468":{"position":[[113,2],[333,2]]},"3470":{"position":[[143,2]]},"3601":{"position":[[1640,2]]},"3916":{"position":[[8866,2]]},"3918":{"position":[[3482,2],[3486,2]]},"3954":{"position":[[536,2]]},"3964":{"position":[[759,2]]},"3974":{"position":[[753,2]]},"3984":{"position":[[1071,2]]},"3988":{"position":[[320,2]]}}}],["过滤器",{"_index":3638,"t":{"846":{"position":[[155,3]]},"935":{"position":[[3,3]]},"1665":{"position":[[26,3]]},"1892":{"position":[[5,3]]},"1941":{"position":[[963,3],[1013,3]]},"2564":{"position":[[149,3]]},"2935":{"position":[[27,3],[55,3]]},"3131":{"position":[[273,3]]},"3432":{"position":[[2121,3]]},"3434":{"position":[[1614,3]]},"3946":{"position":[[143,3]]},"3948":{"position":[[176,3]]},"3950":{"position":[[98,3],[485,3],[819,3]]},"3966":{"position":[[1413,3]]},"3974":{"position":[[728,3],[735,3]]},"3978":{"position":[[989,3]]},"3990":{"position":[[219,3],[557,3]]},"3994":{"position":[[392,3]]}}}],["过程",{"_index":844,"t":{"119":{"position":[[58,2],[107,2]]},"182":{"position":[[110,2]]},"502":{"position":[[9,2]]},"572":{"position":[[559,2],[1004,2]]},"1103":{"position":[[10,2],[88,2],[104,2],[119,2],[150,2],[171,2],[233,2],[249,2]]},"1107":{"position":[[17,2]]},"1111":{"position":[[360,2]]},"1113":{"position":[[358,2]]},"1115":{"position":[[364,2]]},"1117":{"position":[[3822,2]]},"1119":{"position":[[335,2]]},"1121":{"position":[[359,2]]},"1123":{"position":[[305,2]]},"1125":{"position":[[3,2]]},"1129":{"position":[[512,2],[1450,2]]},"1131":{"position":[[31,2]]},"1133":{"position":[[60,2]]},"1135":{"position":[[73,2]]},"1200":{"position":[[9,2],[81,2],[129,2]]},"1234":{"position":[[371,2]]},"1236":{"position":[[377,2]]},"1238":{"position":[[457,2]]},"1240":{"position":[[499,2]]},"1374":{"position":[[114,2]]},"1385":{"position":[[13,2]]},"1761":{"position":[[101,2]]},"1763":{"position":[[77,2],[212,2]]},"1765":{"position":[[130,2]]},"1832":{"position":[[88,2]]},"2472":{"position":[[13,2]]},"2517":{"position":[[20,2],[102,2]]},"3242":{"position":[[52,2]]},"3273":{"position":[[381,2]]},"3350":{"position":[[167,2]]},"3352":{"position":[[47,2],[275,2],[620,2]]},"3910":{"position":[[49,2]]},"3932":{"position":[[1112,2]]},"3934":{"position":[[2134,2]]},"3962":{"position":[[1466,2]]},"3964":{"position":[[1077,2]]},"3978":{"position":[[839,2]]},"3980":{"position":[[304,2]]},"3986":{"position":[[1435,2]]}}}],["过长",{"_index":8431,"t":{"3620":{"position":[[107,2]]}}}],["迎来",{"_index":2409,"t":{"399":{"position":[[896,2]]},"3926":{"position":[[213,2]]}}}],["运",{"_index":8060,"t":{"3414":{"position":[[211,1]]}}}],["运算",{"_index":1701,"t":{"233":{"position":[[431,2]]},"2333":{"position":[[327,2]]}}}],["运营商",{"_index":7235,"t":{"2915":{"position":[[182,3],[254,3]]}}}],["运行",{"_index":621,"t":{"102":{"position":[[0,2]]},"114":{"position":[[597,2]]},"190":{"position":[[0,2]]},"245":{"position":[[106,2]]},"247":{"position":[[167,2]]},"251":{"position":[[91,2]]},"263":{"position":[[41,2]]},"429":{"position":[[114,2]]},"431":{"position":[[9,2]]},"457":{"position":[[8,2],[60,2]]},"675":{"position":[[173,2],[195,2],[215,2]]},"685":{"position":[[292,2]]},"1269":{"position":[[214,2]]},"1452":{"position":[[12,2]]},"1483":{"position":[[1026,2]]},"1488":{"position":[[1671,2]]},"1541":{"position":[[469,2]]},"1755":{"position":[[1010,2]]},"1795":{"position":[[3032,2]]},"1815":{"position":[[75,2],[408,2],[577,2]]},"1832":{"position":[[6,2],[74,2]]},"1855":{"position":[[384,2]]},"1865":{"position":[[277,2]]},"1892":{"position":[[48,2]]},"1901":{"position":[[13,2],[129,2],[209,2],[380,2],[401,2],[502,2],[618,2],[635,2]]},"1903":{"position":[[512,2]]},"1947":{"position":[[68,2]]},"1981":{"position":[[66,2]]},"1993":{"position":[[66,2]]},"2016":{"position":[[74,2]]},"2424":{"position":[[132,2],[164,2],[190,2],[219,2],[250,2],[285,2],[320,2],[357,2]]},"2510":{"position":[[6,2]]},"2512":{"position":[[3,2]]},"2619":{"position":[[26,2]]},"2629":{"position":[[88,2],[163,2]]},"2705":{"position":[[9,2]]},"2727":{"position":[[16,2]]},"2733":{"position":[[40,2]]},"2803":{"position":[[47,2],[105,2]]},"2805":{"position":[[90,2]]},"2809":{"position":[[143,2]]},"2912":{"position":[[102,2]]},"3078":{"position":[[102,2]]},"3082":{"position":[[4,2]]},"3362":{"position":[[15,2]]},"3365":{"position":[[29,2]]},"3412":{"position":[[141,2]]},"3414":{"position":[[34,2],[113,2],[133,2],[167,2]]},"3436":{"position":[[11,2]]},"3446":{"position":[[1072,2]]},"3466":{"position":[[895,2]]},"3670":{"position":[[81,2]]},"3772":{"position":[[9,2]]},"3779":{"position":[[24,2],[86,2],[119,2],[472,2]]},"3783":{"position":[[10,2]]},"3793":{"position":[[55,2]]},"3798":{"position":[[220,2],[382,2],[412,2]]},"3800":{"position":[[120,2],[181,2],[266,2],[351,2],[393,2]]},"3802":{"position":[[23,2],[87,2],[118,2],[521,2]]},"3810":{"position":[[660,2],[720,2]]},"3817":{"position":[[24,2],[92,2],[125,2]]},"3922":{"position":[[16,2]]},"3924":{"position":[[2595,2]]},"3928":{"position":[[1634,2]]},"3934":{"position":[[3017,2]]},"3964":{"position":[[587,2]]},"3968":{"position":[[855,2]]},"3972":{"position":[[648,2],[664,2]]},"3984":{"position":[[977,2]]},"3994":{"position":[[185,2]]}}}],["运行日志",{"_index":7372,"t":{"3082":{"position":[[21,4]]},"3783":{"position":[[588,4]]}}}],["近",{"_index":9121,"t":{"3914":{"position":[[1494,1]]}}}],["近期",{"_index":9175,"t":{"3916":{"position":[[1631,2]]}}}],["返回",{"_index":309,"t":{"19":{"position":[[624,2]]},"112":{"position":[[1343,2]]},"114":{"position":[[1220,2]]},"121":{"position":[[421,2]]},"127":{"position":[[717,2],[727,2],[1661,2]]},"129":{"position":[[631,2]]},"133":{"position":[[1094,2]]},"144":{"position":[[10,2],[90,2],[587,2]]},"148":{"position":[[444,2]]},"225":{"position":[[71,2]]},"286":{"position":[[70,2],[96,2],[136,2],[187,2]]},"528":{"position":[[235,2],[291,2]]},"554":{"position":[[84,2]]},"807":{"position":[[29,2],[42,2]]},"929":{"position":[[3195,2],[3416,2],[3728,2],[3915,2]]},"1066":{"position":[[1577,2]]},"1071":{"position":[[61,2]]},"1075":{"position":[[28,2]]},"1117":{"position":[[26,2],[79,2],[161,2],[255,2],[359,2],[473,2],[597,2],[731,2],[875,2],[1106,2],[1156,2],[1215,2],[1281,2],[1354,2],[1434,2],[1521,2],[1615,2],[1764,2],[1849,2],[1946,2],[2053,2],[2170,2],[2297,2],[2434,2],[2581,2],[2797,2],[2882,2],[2979,2],[3086,2],[3203,2],[3330,2],[3467,2],[3614,2],[3831,2],[3899,2],[3979,2],[4069,2],[4169,2],[4279,2],[4399,2],[4529,2]]},"1125":{"position":[[332,2]]},"1129":{"position":[[713,2],[1703,2]]},"1133":{"position":[[64,2]]},"1185":{"position":[[258,2]]},"1240":{"position":[[1040,2]]},"1246":{"position":[[94,2]]},"1257":{"position":[[379,2]]},"1265":{"position":[[94,2]]},"1412":{"position":[[269,2]]},"1418":{"position":[[187,2]]},"1566":{"position":[[189,2],[428,2],[520,2]]},"1572":{"position":[[55,2]]},"1576":{"position":[[228,2]]},"1580":{"position":[[364,2]]},"1741":{"position":[[788,2],[1550,2],[2392,2]]},"1745":{"position":[[260,2]]},"1761":{"position":[[69,2]]},"1837":{"position":[[152,2]]},"1839":{"position":[[140,2]]},"1847":{"position":[[101,2]]},"1887":{"position":[[94,2],[109,2]]},"1892":{"position":[[117,2]]},"1901":{"position":[[224,2]]},"1911":{"position":[[52,2]]},"1913":{"position":[[1133,2]]},"1923":{"position":[[73,2]]},"1925":{"position":[[1205,2]]},"1927":{"position":[[454,2]]},"1931":{"position":[[35,2]]},"1933":{"position":[[643,2],[774,2]]},"1939":{"position":[[9,2]]},"1941":{"position":[[973,2],[1068,2]]},"2239":{"position":[[142,2]]},"2345":{"position":[[689,2]]},"2357":{"position":[[1347,2]]},"2393":{"position":[[197,2]]},"2404":{"position":[[54,2]]},"2436":{"position":[[27,2]]},"2438":{"position":[[255,2]]},"2440":{"position":[[291,2]]},"2442":{"position":[[145,2]]},"2721":{"position":[[56,2],[102,2],[115,2]]},"2796":{"position":[[194,2],[506,2],[517,2]]},"2848":{"position":[[961,2],[1022,2],[1084,2]]},"3047":{"position":[[52,2]]},"3063":{"position":[[1307,2],[1316,2]]},"3071":{"position":[[1090,2],[1111,2],[1164,2]]},"3108":{"position":[[211,2]]},"3120":{"position":[[129,2],[139,2],[157,2]]},"3126":{"position":[[391,2]]},"3168":{"position":[[23,2]]},"3267":{"position":[[66,2]]},"3273":{"position":[[597,2],[626,2],[793,2]]},"3446":{"position":[[1695,2]]},"3454":{"position":[[287,2]]},"3579":{"position":[[41,2]]},"3595":{"position":[[57,2],[114,2],[348,2],[361,2]]},"3624":{"position":[[4,2],[35,2],[43,2],[49,2],[61,2]]},"3686":{"position":[[479,2],[488,2],[579,2],[588,2]]},"3706":{"position":[[1232,2],[1241,2],[1318,2],[1327,2]]},"3708":{"position":[[3190,2]]},"3712":{"position":[[30,2]]},"3714":{"position":[[12,2]]},"3779":{"position":[[571,2]]},"3783":{"position":[[1311,2]]},"3802":{"position":[[627,2]]},"3806":{"position":[[3059,2]]},"3817":{"position":[[526,2]]},"3836":{"position":[[3,2],[94,2]]},"3838":{"position":[[3,2],[120,2]]},"3840":{"position":[[3,2],[28,2],[56,2],[163,2]]},"3842":{"position":[[26,2],[53,2],[81,2],[566,2],[593,2],[621,2],[1175,2],[1202,2],[1230,2],[1749,2],[1776,2],[1804,2],[2352,2],[2379,2],[2407,2],[2985,2],[3012,2],[3040,2]]},"3844":{"position":[[26,2],[53,2],[81,2]]},"3846":{"position":[[15,2],[42,2],[70,2],[271,2],[298,2],[326,2]]},"3862":{"position":[[3,2],[28,2],[56,2],[163,2]]},"3882":{"position":[[3,2],[30,2],[58,2]]},"3884":{"position":[[3,2],[28,2],[56,2],[161,2]]},"3886":{"position":[[3,2],[30,2],[58,2]]},"3888":{"position":[[3,2],[30,2],[58,2]]},"3892":{"position":[[3,2],[30,2],[58,2]]},"3914":{"position":[[2990,2]]},"3916":{"position":[[9072,2]]},"3918":{"position":[[1062,2]]},"3928":{"position":[[2257,2]]},"3932":{"position":[[240,2],[269,2],[1962,2],[2110,2],[2206,2]]},"3934":{"position":[[529,2]]},"3940":{"position":[[460,2],[473,2]]},"3944":{"position":[[97,2],[350,2]]},"3946":{"position":[[209,2],[301,2],[319,2]]},"3948":{"position":[[234,2]]},"3956":{"position":[[2530,2],[3104,2]]},"3962":{"position":[[145,2],[405,2]]},"3964":{"position":[[354,2],[517,2],[790,2]]},"3966":{"position":[[603,2],[773,2],[955,2]]},"3970":{"position":[[252,2]]},"3976":{"position":[[640,2]]},"3978":{"position":[[796,2]]},"3980":{"position":[[777,2]]},"3984":{"position":[[937,2]]},"3986":{"position":[[267,2],[1693,2],[1738,2]]},"3988":{"position":[[231,2]]},"3992":{"position":[[627,2],[1828,2],[3607,2]]},"3994":{"position":[[247,2],[843,2],[984,2],[1237,2]]},"3996":{"position":[[738,2],[1557,2]]},"4004":{"position":[[397,2]]}}}],["返回值",{"_index":821,"t":{"114":{"position":[[1286,3]]},"210":{"position":[[32,3],[112,3]]},"300":{"position":[[263,3]]},"1127":{"position":[[405,3]]},"1129":{"position":[[672,3],[1662,3]]},"1133":{"position":[[132,3]]},"1185":{"position":[[682,3]]},"1240":{"position":[[1170,3]]},"1248":{"position":[[75,3]]},"1257":{"position":[[462,3]]},"1267":{"position":[[256,3]]},"1279":{"position":[[121,3]]},"1412":{"position":[[255,3]]},"1424":{"position":[[1156,3],[1196,3],[1419,3],[1651,3]]},"1430":{"position":[[50,3]]},"1861":{"position":[[90,3]]},"1881":{"position":[[31,3]]},"1896":{"position":[[45,3]]},"1923":{"position":[[103,3]]},"2186":{"position":[[26,3],[148,3]]},"2188":{"position":[[26,3],[151,3]]},"2199":{"position":[[110,3]]},"2359":{"position":[[428,3]]},"2899":{"position":[[165,3],[450,3]]},"3273":{"position":[[575,3]]},"3446":{"position":[[287,3],[349,3],[1761,3]]},"3448":{"position":[[597,3],[660,3],[1021,3],[1084,3]]},"3456":{"position":[[38,3]]},"3520":{"position":[[17,3]]},"3561":{"position":[[17,3]]},"3595":{"position":[[442,3]]},"3636":{"position":[[115,3]]},"3708":{"position":[[59,3],[943,3],[1088,3],[1494,3],[1858,3],[2324,3]]},"3842":{"position":[[196,3],[787,3],[1374,3],[1956,3],[2578,3],[3203,3]]},"3844":{"position":[[199,3]]},"3846":{"position":[[206,3],[446,3]]},"3882":{"position":[[166,3]]},"3886":{"position":[[166,3]]},"3888":{"position":[[191,3]]},"3892":{"position":[[131,3]]},"3910":{"position":[[1038,3]]},"3914":{"position":[[3282,3]]},"3918":{"position":[[2833,3]]},"3924":{"position":[[1807,3]]},"3928":{"position":[[2323,3]]},"3932":{"position":[[2397,3]]},"3952":{"position":[[168,3]]},"3956":{"position":[[575,3],[729,3],[1038,3],[1326,3],[1672,3]]},"3962":{"position":[[1540,3]]},"3964":{"position":[[349,3],[830,3]]},"3966":{"position":[[597,3]]},"3974":{"position":[[69,3]]},"3978":{"position":[[842,3]]},"3980":{"position":[[298,3]]},"3984":{"position":[[114,3],[329,3]]},"3986":{"position":[[1111,3]]},"3994":{"position":[[1024,3],[1082,3]]},"3996":{"position":[[1802,3]]}}}],["还原",{"_index":3415,"t":{"715":{"position":[[78,2],[119,2]]},"2919":{"position":[[232,2]]},"3992":{"position":[[3975,2]]}}}],["还是",{"_index":3004,"t":{"572":{"position":[[555,2],[562,2],[1000,2],[1007,2]]},"653":{"position":[[154,2]]},"677":{"position":[[60,2]]},"704":{"position":[[60,2]]},"1212":{"position":[[20,2]]},"1440":{"position":[[497,2]]},"1819":{"position":[[413,2]]},"2770":{"position":[[241,2]]},"3116":{"position":[[23,2]]},"3432":{"position":[[139,2]]},"3626":{"position":[[7,2],[95,2]]},"3636":{"position":[[751,2]]},"3781":{"position":[[412,2]]},"3795":{"position":[[43,2]]},"3914":{"position":[[852,2]]},"3924":{"position":[[428,2]]},"3978":{"position":[[1054,2]]},"3986":{"position":[[1186,2]]},"3988":{"position":[[290,2]]}}}],["还有",{"_index":2200,"t":{"338":{"position":[[1228,2]]},"988":{"position":[[336,2]]},"1125":{"position":[[45,2]]},"1418":{"position":[[251,2]]},"3242":{"position":[[150,2]]},"3910":{"position":[[147,2]]},"3924":{"position":[[2333,2]]},"3934":{"position":[[2255,2]]}}}],["这个",{"_index":703,"t":{"112":{"position":[[67,2]]},"121":{"position":[[192,2]]},"206":{"position":[[313,2]]},"261":{"position":[[94,2]]},"325":{"position":[[72,2],[210,2]]},"329":{"position":[[81,2]]},"331":{"position":[[32,2]]},"338":{"position":[[1276,2]]},"445":{"position":[[121,2]]},"528":{"position":[[188,2]]},"585":{"position":[[447,2],[503,2]]},"728":{"position":[[50,2]]},"793":{"position":[[139,2]]},"836":{"position":[[165,2]]},"841":{"position":[[31,2],[66,2]]},"915":{"position":[[70,2]]},"941":{"position":[[189,2]]},"1223":{"position":[[78,2],[229,2]]},"1383":{"position":[[100,2]]},"1392":{"position":[[47,2],[73,2],[103,2],[203,2]]},"1396":{"position":[[66,2]]},"1412":{"position":[[62,2]]},"1424":{"position":[[446,2]]},"1432":{"position":[[29,2],[54,2]]},"1483":{"position":[[670,2]]},"1511":{"position":[[1577,2],[4213,2]]},"1580":{"position":[[81,2]]},"1584":{"position":[[83,2]]},"1745":{"position":[[78,2]]},"1761":{"position":[[571,2]]},"1775":{"position":[[43,2]]},"1849":{"position":[[0,2]]},"1853":{"position":[[36,2]]},"1941":{"position":[[1017,2]]},"2333":{"position":[[22,2]]},"2377":{"position":[[29,2]]},"2379":{"position":[[56,2],[438,2]]},"2400":{"position":[[137,2],[170,2]]},"2436":{"position":[[37,2]]},"2508":{"position":[[53,2]]},"2579":{"position":[[604,2]]},"2770":{"position":[[92,2],[293,2]]},"3088":{"position":[[159,2]]},"3092":{"position":[[117,2]]},"3118":{"position":[[85,2]]},"3189":{"position":[[39,2]]},"3337":{"position":[[53,2],[72,2]]},"3352":{"position":[[540,2]]},"3369":{"position":[[52,2]]},"3403":{"position":[[98,2]]},"3432":{"position":[[3443,2],[3931,2]]},"3456":{"position":[[76,2]]},"3470":{"position":[[81,2]]},"3476":{"position":[[60,2]]},"3608":{"position":[[116,2]]},"3626":{"position":[[119,2]]},"3795":{"position":[[31,2]]},"3844":{"position":[[712,2],[875,2]]},"3926":{"position":[[105,2],[239,2],[275,2]]},"3966":{"position":[[1391,2]]},"3992":{"position":[[4004,2]]}}}],["这么",{"_index":2230,"t":{"340":{"position":[[1213,2]]},"1511":{"position":[[1752,2],[1942,2]]},"1584":{"position":[[537,2]]},"2836":{"position":[[1868,2]]},"3434":{"position":[[413,2]]}}}],["这些",{"_index":689,"t":{"110":{"position":[[43,2]]},"431":{"position":[[28,2],[56,2]]},"565":{"position":[[43,2]]},"570":{"position":[[2086,2]]},"897":{"position":[[505,2]]},"1234":{"position":[[804,2]]},"1286":{"position":[[111,2]]},"1309":{"position":[[669,2]]},"1385":{"position":[[85,2],[97,2]]},"1392":{"position":[[219,2]]},"1578":{"position":[[55,2]]},"1761":{"position":[[113,2]]},"2512":{"position":[[136,2]]},"2705":{"position":[[28,2],[56,2]]},"2768":{"position":[[49,2]]},"2881":{"position":[[71,2]]},"3118":{"position":[[172,2]]},"3301":{"position":[[29,2]]},"3352":{"position":[[448,2]]},"3416":{"position":[[88,2],[105,2],[324,2]]},"3575":{"position":[[385,2]]},"3664":{"position":[[75,2]]},"3926":{"position":[[138,2]]},"3928":{"position":[[91,2]]}}}],["这时",{"_index":2483,"t":{"417":{"position":[[40,2]]},"431":{"position":[[50,2]]},"451":{"position":[[43,2],[258,2]]},"526":{"position":[[54,2]]},"610":{"position":[[75,2]]},"655":{"position":[[287,2]]},"688":{"position":[[28,2]]},"1048":{"position":[[37,2]]},"1214":{"position":[[151,2]]},"1472":{"position":[[44,2]]},"1621":{"position":[[908,2]]},"1631":{"position":[[407,2]]},"2359":{"position":[[483,2]]},"2705":{"position":[[50,2]]},"2881":{"position":[[90,2]]},"3158":{"position":[[33,2]]},"3387":{"position":[[27,2]]},"3414":{"position":[[199,2]]},"3524":{"position":[[33,2]]},"3698":{"position":[[91,2]]},"3710":{"position":[[22,2]]},"3716":{"position":[[84,2]]}}}],["这时候",{"_index":187,"t":{"11":{"position":[[840,3]]},"135":{"position":[[42,3]]},"152":{"position":[[33,3]]},"206":{"position":[[180,3]]},"319":{"position":[[619,3]]},"325":{"position":[[205,3]]},"327":{"position":[[102,3]]},"340":{"position":[[1299,3]]},"427":{"position":[[170,3]]},"455":{"position":[[103,3]]},"655":{"position":[[17,3]]},"719":{"position":[[42,3]]},"1048":{"position":[[16,3]]},"1735":{"position":[[26,3]]},"1755":{"position":[[346,3]]},"1785":{"position":[[35,3]]},"1883":{"position":[[18,3]]},"1981":{"position":[[80,3]]},"1993":{"position":[[80,3]]},"2016":{"position":[[88,3]]},"2294":{"position":[[888,3]]},"2298":{"position":[[53,3]]},"2352":{"position":[[194,3]]},"2375":{"position":[[39,3]]},"2474":{"position":[[25,3]]},"2555":{"position":[[85,3]]},"2735":{"position":[[79,3]]},"2905":{"position":[[70,3]]},"3078":{"position":[[38,3]]},"3098":{"position":[[42,3]]},"3289":{"position":[[39,3],[64,3]]},"3329":{"position":[[88,3]]},"3375":{"position":[[41,3]]},"3389":{"position":[[32,3]]},"3401":{"position":[[48,3]]},"3432":{"position":[[4385,3]]},"3434":{"position":[[2757,3]]},"3442":{"position":[[143,3]]},"3456":{"position":[[68,3]]},"3466":{"position":[[50,3]]},"3660":{"position":[[49,3]]},"3696":{"position":[[28,3]]},"3700":{"position":[[102,3]]},"3714":{"position":[[30,3]]}}}],["这样",{"_index":96,"t":{"5":{"position":[[93,2]]},"7":{"position":[[89,2]]},"127":{"position":[[174,2]]},"152":{"position":[[636,2]]},"182":{"position":[[15,2]]},"206":{"position":[[119,2]]},"208":{"position":[[33,2]]},"216":{"position":[[1234,2]]},"220":{"position":[[48,2],[772,2]]},"323":{"position":[[149,2]]},"325":{"position":[[41,2]]},"327":{"position":[[91,2]]},"336":{"position":[[39,2]]},"338":{"position":[[26,2]]},"340":{"position":[[1459,2]]},"359":{"position":[[344,2]]},"373":{"position":[[130,2],[148,2]]},"482":{"position":[[520,2]]},"528":{"position":[[589,2]]},"585":{"position":[[14,2],[545,2]]},"818":{"position":[[39,2]]},"899":{"position":[[1682,2]]},"1071":{"position":[[65,2]]},"1374":{"position":[[44,2]]},"1408":{"position":[[1227,2]]},"1426":{"position":[[228,2]]},"1432":{"position":[[110,2],[157,2]]},"1474":{"position":[[451,2]]},"1483":{"position":[[943,2]]},"1488":{"position":[[1562,2]]},"1507":{"position":[[39,2]]},"1761":{"position":[[586,2]]},"1795":{"position":[[2941,2]]},"1819":{"position":[[927,2]]},"1903":{"position":[[445,2]]},"1941":{"position":[[1003,2]]},"2245":{"position":[[111,2]]},"2290":{"position":[[89,2]]},"2418":{"position":[[811,2]]},"2547":{"position":[[68,2],[99,2]]},"2627":{"position":[[33,2]]},"2646":{"position":[[106,2]]},"2684":{"position":[[29,2],[313,2],[364,2]]},"2745":{"position":[[303,2]]},"2862":{"position":[[36,2],[58,2],[211,2]]},"2875":{"position":[[453,2]]},"2919":{"position":[[109,2]]},"2965":{"position":[[202,2]]},"3075":{"position":[[201,2]]},"3118":{"position":[[266,2]]},"3140":{"position":[[107,2]]},"3248":{"position":[[71,2]]},"3323":{"position":[[331,2]]},"3352":{"position":[[54,2],[213,2],[394,2]]},"3585":{"position":[[82,2]]},"3626":{"position":[[384,2]]},"3636":{"position":[[739,2]]},"3686":{"position":[[58,2]]},"3688":{"position":[[781,2]]},"3690":{"position":[[72,2]]},"3696":{"position":[[180,2]]},"3698":{"position":[[58,2]]},"3700":{"position":[[91,2]]},"3740":{"position":[[454,2]]},"3779":{"position":[[104,2]]},"3795":{"position":[[615,2]]},"3802":{"position":[[103,2]]},"3817":{"position":[[110,2]]},"3938":{"position":[[876,2]]},"3952":{"position":[[301,2]]}}}],["这种",{"_index":867,"t":{"121":{"position":[[84,2]]},"587":{"position":[[53,2]]},"1052":{"position":[[26,2]]},"1103":{"position":[[207,2]]},"1221":{"position":[[38,2]]},"1225":{"position":[[29,2]]},"1379":{"position":[[70,2]]},"1399":{"position":[[25,2]]},"1418":{"position":[[276,2]]},"1430":{"position":[[0,2]]},"1775":{"position":[[3852,2]]},"1869":{"position":[[29,2]]},"1907":{"position":[[31,2]]},"1909":{"position":[[23,2],[246,2],[277,2]]},"2175":{"position":[[153,2]]},"2393":{"position":[[69,2]]},"2589":{"position":[[2,2]]},"2625":{"position":[[48,2],[365,2]]},"2701":{"position":[[30,2]]},"2731":{"position":[[665,2]]},"2745":{"position":[[0,2]]},"2747":{"position":[[0,2]]},"2805":{"position":[[56,2],[108,2]]},"2809":{"position":[[76,2]]},"2915":{"position":[[19,2],[145,2],[219,2],[247,2]]},"3078":{"position":[[79,2]]},"3397":{"position":[[0,2]]},"3599":{"position":[[0,2]]},"3720":{"position":[[0,2]]},"3779":{"position":[[464,2]]},"3802":{"position":[[513,2]]}}}],["这边",{"_index":7618,"t":{"3215":{"position":[[602,2]]}}}],["这部分",{"_index":1996,"t":{"302":{"position":[[141,3]]}}}],["这里",{"_index":241,"t":{"15":{"position":[[111,2]]},"17":{"position":[[105,2]]},"112":{"position":[[6,2],[500,2],[1269,2],[1548,2]]},"127":{"position":[[701,2]]},"204":{"position":[[441,2]]},"233":{"position":[[246,2]]},"249":{"position":[[84,2],[186,2]]},"300":{"position":[[174,2]]},"336":{"position":[[158,2]]},"338":{"position":[[1161,2]]},"340":{"position":[[1848,2]]},"526":{"position":[[357,2]]},"633":{"position":[[44,2]]},"824":{"position":[[246,2]]},"1066":{"position":[[1570,2]]},"1103":{"position":[[242,2]]},"1279":{"position":[[973,2]]},"1408":{"position":[[1060,2]]},"1424":{"position":[[2044,2]]},"1440":{"position":[[173,2],[539,2],[632,2],[643,2]]},"1483":{"position":[[779,2]]},"1488":{"position":[[1627,2]]},"1495":{"position":[[1250,2]]},"1497":{"position":[[318,2]]},"1499":{"position":[[845,2]]},"1520":{"position":[[90,2]]},"1711":{"position":[[215,2]]},"1731":{"position":[[155,2]]},"1733":{"position":[[68,2]]},"1737":{"position":[[23,2]]},"1739":{"position":[[85,2]]},"1741":{"position":[[341,2],[1222,2]]},"1743":{"position":[[266,2],[461,2]]},"1775":{"position":[[3708,2]]},"1801":{"position":[[63,2],[1711,2],[2405,2],[2507,2],[2659,2],[3339,2]]},"1803":{"position":[[4360,2],[4631,2],[5552,2]]},"1855":{"position":[[506,2]]},"1919":{"position":[[367,2]]},"1925":{"position":[[348,2],[1131,2]]},"1933":{"position":[[286,2]]},"1941":{"position":[[888,2]]},"2235":{"position":[[142,2]]},"2264":{"position":[[33,2]]},"2373":{"position":[[208,2]]},"2398":{"position":[[0,2],[130,2]]},"2404":{"position":[[91,2]]},"2438":{"position":[[22,2]]},"2440":{"position":[[22,2],[396,2]]},"2497":{"position":[[156,2]]},"2796":{"position":[[302,2],[491,2],[747,2]]},"2813":{"position":[[92,2]]},"2817":{"position":[[174,2]]},"2933":{"position":[[565,2],[727,2]]},"2949":{"position":[[157,2],[607,2]]},"2963":{"position":[[598,2]]},"3065":{"position":[[114,2]]},"3116":{"position":[[41,2]]},"3126":{"position":[[38,2]]},"3152":{"position":[[21,2]]},"3291":{"position":[[1593,2]]},"3301":{"position":[[43,2]]},"3341":{"position":[[5,2]]},"3393":{"position":[[144,2]]},"3401":{"position":[[191,2]]},"3434":{"position":[[375,2]]},"3452":{"position":[[1004,2]]},"3458":{"position":[[545,2]]},"3547":{"position":[[630,2]]},"3642":{"position":[[188,2]]},"3680":{"position":[[414,2]]},"3706":{"position":[[1862,2]]},"3708":{"position":[[4101,2]]},"3744":{"position":[[2,2]]},"3768":{"position":[[562,2]]},"3774":{"position":[[226,2],[245,2]]},"3806":{"position":[[3049,2]]},"3916":{"position":[[4000,2]]},"3924":{"position":[[2232,2]]}}}],["进",{"_index":5369,"t":{"1735":{"position":[[20,1]]},"3094":{"position":[[131,1]]},"3389":{"position":[[199,1]]},"3391":{"position":[[97,1]]},"3393":{"position":[[126,1]]},"3926":{"position":[[598,1]]}}}],["进一步",{"_index":6084,"t":{"2285":{"position":[[27,3]]},"3806":{"position":[[3051,3]]}}}],["进入",{"_index":849,"t":{"119":{"position":[[122,2]]},"441":{"position":[[75,2]]},"685":{"position":[[522,2],[537,2]]},"724":{"position":[[40,2]]},"1557":{"position":[[261,2]]},"1801":{"position":[[991,2],[1116,2]]},"1803":{"position":[[3161,2],[3310,2]]},"1825":{"position":[[48,2]]},"1885":{"position":[[176,2]]},"1923":{"position":[[23,2]]},"2311":{"position":[[420,2]]},"2510":{"position":[[25,2]]},"2512":{"position":[[5,2],[20,2]]},"2866":{"position":[[11,2]]},"3009":{"position":[[208,2]]},"3800":{"position":[[176,2],[196,2]]},"3926":{"position":[[372,2]]},"3930":{"position":[[1039,2]]},"3932":{"position":[[512,2]]},"3992":{"position":[[2962,2]]}}}],["进去",{"_index":2011,"t":{"306":{"position":[[106,2]]},"323":{"position":[[49,2]]},"1711":{"position":[[493,2],[568,2]]},"1955":{"position":[[38,2]]}}}],["进程",{"_index":5947,"t":{"2057":{"position":[[166,2]]},"2303":{"position":[[39,2],[46,2],[55,2]]},"2307":{"position":[[10,2],[32,2],[40,2],[48,2],[76,2],[82,2],[123,2]]},"2309":{"position":[[0,2]]},"2321":{"position":[[14,2],[82,2]]},"2480":{"position":[[73,2]]},"2490":{"position":[[105,2]]},"2740":{"position":[[31,2]]},"2809":{"position":[[117,2]]},"2815":{"position":[[66,2]]},"2836":{"position":[[49,2],[1863,2]]},"2843":{"position":[[119,2]]},"2856":{"position":[[18,2]]},"3080":{"position":[[247,2]]},"3954":{"position":[[39,2],[55,2],[65,2]]}}}],["进行",{"_index":658,"t":{"104":{"position":[[51,2]]},"119":{"position":[[49,2]]},"121":{"position":[[497,2]]},"179":{"position":[[85,2]]},"182":{"position":[[6,2],[234,2]]},"199":{"position":[[20,2],[670,2],[705,2]]},"206":{"position":[[226,2]]},"212":{"position":[[30,2]]},"218":{"position":[[38,2]]},"225":{"position":[[90,2]]},"255":{"position":[[172,2]]},"300":{"position":[[52,2],[165,2],[218,2],[280,2]]},"304":{"position":[[118,2]]},"306":{"position":[[209,2]]},"308":{"position":[[44,2]]},"310":{"position":[[46,2]]},"325":{"position":[[16,2],[239,2]]},"329":{"position":[[159,2]]},"331":{"position":[[27,2]]},"336":{"position":[[230,2],[419,2]]},"359":{"position":[[119,2]]},"384":{"position":[[31,2],[61,2]]},"404":{"position":[[223,2]]},"463":{"position":[[33,2]]},"526":{"position":[[27,2]]},"570":{"position":[[2688,2]]},"579":{"position":[[23,2]]},"587":{"position":[[980,2],[2075,2]]},"610":{"position":[[18,2],[116,2]]},"639":{"position":[[421,2]]},"643":{"position":[[18,2]]},"677":{"position":[[109,2]]},"704":{"position":[[109,2]]},"751":{"position":[[30,2]]},"844":{"position":[[14,2]]},"988":{"position":[[481,2]]},"1046":{"position":[[49,2]]},"1050":{"position":[[7,2]]},"1068":{"position":[[72,2]]},"1358":{"position":[[33,2]]},"1368":{"position":[[14,2]]},"1389":{"position":[[66,2]]},"1399":{"position":[[15,2]]},"1403":{"position":[[8,2]]},"1422":{"position":[[27,2]]},"1424":{"position":[[130,2]]},"1440":{"position":[[116,2],[289,2],[413,2]]},"1474":{"position":[[138,2]]},"1479":{"position":[[22,2]]},"1566":{"position":[[500,2]]},"1576":{"position":[[338,2]]},"1578":{"position":[[110,2]]},"1580":{"position":[[117,2]]},"1611":{"position":[[857,2]]},"1621":{"position":[[809,2]]},"1631":{"position":[[52,2]]},"1657":{"position":[[56,2]]},"1663":{"position":[[45,2]]},"1665":{"position":[[70,2]]},"1689":{"position":[[20,2]]},"1697":{"position":[[42,2]]},"1699":{"position":[[74,2]]},"1705":{"position":[[23,2]]},"1707":{"position":[[37,2]]},"1745":{"position":[[73,2]]},"1749":{"position":[[25,2]]},"1751":{"position":[[10,2]]},"1753":{"position":[[27,2]]},"1773":{"position":[[311,2]]},"1783":{"position":[[31,2]]},"1793":{"position":[[42,2]]},"1799":{"position":[[58,2]]},"1857":{"position":[[105,2]]},"1892":{"position":[[110,2]]},"1894":{"position":[[66,2]]},"1911":{"position":[[31,2]]},"2264":{"position":[[48,2]]},"2315":{"position":[[31,2]]},"2385":{"position":[[32,2]]},"2393":{"position":[[146,2]]},"2436":{"position":[[8,2]]},"2438":{"position":[[32,2],[35,2]]},"2440":{"position":[[32,2],[35,2],[406,2],[409,2]]},"2474":{"position":[[12,2]]},"2497":{"position":[[222,2]]},"2503":{"position":[[98,2]]},"2517":{"position":[[77,2]]},"2544":{"position":[[18,2],[155,2]]},"2619":{"position":[[72,2]]},"2629":{"position":[[166,2]]},"2674":{"position":[[457,2]]},"2782":{"position":[[27,2],[91,2],[127,2]]},"2788":{"position":[[164,2]]},"2790":{"position":[[79,2],[363,2]]},"2798":{"position":[[144,2]]},"2807":{"position":[[133,2]]},"2813":{"position":[[716,2]]},"2815":{"position":[[30,2]]},"2836":{"position":[[1200,2]]},"2881":{"position":[[82,2]]},"2910":{"position":[[345,2]]},"3069":{"position":[[206,2]]},"3078":{"position":[[33,2]]},"3088":{"position":[[18,2],[93,2],[174,2]]},"3092":{"position":[[49,2]]},"3096":{"position":[[40,2]]},"3098":{"position":[[48,2]]},"3110":{"position":[[133,2],[144,2],[163,2]]},"3118":{"position":[[181,2],[365,2]]},"3120":{"position":[[5,2],[49,2],[124,2],[145,2]]},"3124":{"position":[[39,2]]},"3136":{"position":[[39,2]]},"3146":{"position":[[24,2]]},"3154":{"position":[[702,2]]},"3160":{"position":[[15,2]]},"3244":{"position":[[51,2]]},"3275":{"position":[[400,2]]},"3323":{"position":[[443,2]]},"3331":{"position":[[162,2]]},"3337":{"position":[[79,2]]},"3350":{"position":[[42,2],[171,2],[208,2]]},"3356":{"position":[[53,2]]},"3360":{"position":[[139,2],[193,2]]},"3375":{"position":[[36,2]]},"3377":{"position":[[17,2]]},"3389":{"position":[[12,2],[27,2]]},"3395":{"position":[[26,2]]},"3399":{"position":[[27,2]]},"3416":{"position":[[14,2]]},"3418":{"position":[[45,2]]},"3420":{"position":[[25,2]]},"3432":{"position":[[2141,2],[4390,2]]},"3434":{"position":[[1634,2],[1696,2],[1900,2],[2762,2]]},"3460":{"position":[[44,2]]},"3476":{"position":[[26,2],[82,2]]},"3500":{"position":[[798,2]]},"3506":{"position":[[32,2]]},"3532":{"position":[[14,2]]},"3547":{"position":[[32,2]]},"3571":{"position":[[14,2]]},"3573":{"position":[[50,2]]},"3577":{"position":[[37,2]]},"3608":{"position":[[122,2]]},"3610":{"position":[[59,2]]},"3640":{"position":[[21,2],[420,2],[468,2]]},"3690":{"position":[[46,2]]},"3702":{"position":[[1449,2]]},"3708":{"position":[[3894,2]]},"3710":{"position":[[14,2]]},"3774":{"position":[[58,2]]},"3815":{"position":[[132,2]]},"3844":{"position":[[1006,2],[1109,2]]},"3914":{"position":[[2172,2],[2603,2]]},"3916":{"position":[[2492,2]]},"3918":{"position":[[3312,2]]},"3924":{"position":[[2657,2]]},"3938":{"position":[[850,2]]},"3950":{"position":[[328,2]]},"3958":{"position":[[85,2]]},"3962":{"position":[[1857,2]]},"3966":{"position":[[778,2]]},"3968":{"position":[[110,2]]},"3972":{"position":[[131,2]]}}}],["进销",{"_index":1477,"t":{"199":{"position":[[255,2]]}}}],["远",{"_index":6705,"t":{"2564":{"position":[[147,1]]}}}],["远不止",{"_index":7507,"t":{"3138":{"position":[[147,3]]}}}],["远程",{"_index":3086,"t":{"587":{"position":[[974,2]]},"1495":{"position":[[972,2],[1233,2],[1236,2]]},"1497":{"position":[[282,2]]},"1566":{"position":[[233,2]]},"2821":{"position":[[578,2]]},"3150":{"position":[[109,2],[122,2]]},"3373":{"position":[[32,2],[387,2]]},"3476":{"position":[[101,2]]},"3481":{"position":[[21,2]]},"3483":{"position":[[17,2]]},"3520":{"position":[[7,2]]},"3539":{"position":[[9,2]]},"3551":{"position":[[7,2]]},"3553":{"position":[[7,2]]},"3555":{"position":[[7,2]]},"3557":{"position":[[7,2]]},"3559":{"position":[[7,2]]},"3561":{"position":[[7,2]]},"3585":{"position":[[7,2]]},"3910":{"position":[[482,2]]},"3912":{"position":[[856,2],[917,2],[2578,2],[2728,2]]},"3914":{"position":[[2073,2],[2579,2],[3081,2],[3333,2],[3378,2],[3525,2],[3596,2]]},"3916":{"position":[[1245,2],[2088,2],[2820,2],[7062,2]]},"3918":{"position":[[1340,2],[1478,2],[2809,2],[3212,2],[3288,2],[3818,2],[4162,2]]},"3920":{"position":[[566,2],[1204,2],[2011,2]]},"3922":{"position":[[1380,2],[2169,2]]},"3924":{"position":[[534,2]]},"3930":{"position":[[128,2],[921,2],[1277,2],[1485,2]]},"3934":{"position":[[244,2],[792,2],[870,2],[973,2],[1159,2]]},"3938":{"position":[[568,2],[620,2]]},"3940":{"position":[[7,2],[51,2],[497,2],[731,2]]},"3942":{"position":[[358,2]]},"3944":{"position":[[7,2],[62,2],[115,2],[346,2],[565,2]]},"3946":{"position":[[43,2]]},"3948":{"position":[[66,2],[265,2]]},"3950":{"position":[[118,2],[166,2],[673,2],[806,2]]},"3952":{"position":[[89,2],[116,2],[503,2],[659,2]]},"3954":{"position":[[89,2],[589,2]]},"3958":{"position":[[49,2],[195,2]]},"3960":{"position":[[19,2],[503,2]]},"3962":{"position":[[162,2],[296,2],[318,2],[563,2],[1533,2],[1608,2],[1716,2],[1731,2]]},"3964":{"position":[[506,2],[635,2],[823,2],[975,2]]},"3966":{"position":[[157,2],[862,2],[901,2],[945,2],[1587,2]]},"3968":{"position":[[271,2]]},"3978":{"position":[[162,2]]},"3980":{"position":[[220,2]]},"3982":{"position":[[599,2]]},"3984":{"position":[[39,2],[105,2],[143,2],[219,2],[413,2],[483,2],[571,2],[774,2]]},"3986":{"position":[[197,2]]},"3990":{"position":[[170,2]]},"3992":{"position":[[489,2],[593,2],[621,2],[646,2],[698,2],[1991,2],[2031,2]]}}}],["违反",{"_index":7036,"t":{"2782":{"position":[[76,2]]}}}],["连",{"_index":4930,"t":{"1520":{"position":[[346,1]]}}}],["连接",{"_index":1616,"t":{"220":{"position":[[274,2]]},"249":{"position":[[180,2]]},"331":{"position":[[23,2]]},"451":{"position":[[36,2]]},"498":{"position":[[0,2],[14,2],[115,2]]},"508":{"position":[[123,2]]},"510":{"position":[[123,2]]},"512":{"position":[[16,2],[62,2],[91,2]]},"514":{"position":[[455,2],[592,2]]},"516":{"position":[[172,2],[431,2],[483,2]]},"518":{"position":[[482,2],[651,2]]},"524":{"position":[[12,2]]},"526":{"position":[[231,2],[289,2]]},"688":{"position":[[56,2],[81,2]]},"690":{"position":[[2,2]]},"698":{"position":[[99,2],[268,2]]},"893":{"position":[[0,2],[14,2],[115,2]]},"924":{"position":[[36,2],[106,2]]},"927":{"position":[[250,2],[463,2],[767,2],[925,2],[1170,2],[1385,2],[1625,2],[1785,2],[1966,2],[2126,2]]},"1054":{"position":[[347,2]]},"1056":{"position":[[635,2]]},"1313":{"position":[[20,2],[602,2],[674,2],[1070,2]]},"1401":{"position":[[18,2]]},"1470":{"position":[[35,2],[38,2]]},"1520":{"position":[[242,2]]},"1592":{"position":[[280,2]]},"1594":{"position":[[358,2]]},"1801":{"position":[[695,2],[893,2],[1317,2],[3221,2]]},"2945":{"position":[[624,2],[850,2]]},"2949":{"position":[[652,2]]},"2951":{"position":[[36,2]]},"2981":{"position":[[358,2]]},"3126":{"position":[[140,2]]},"3146":{"position":[[35,2]]},"3148":{"position":[[0,2],[31,2],[163,2],[216,2]]},"3150":{"position":[[8,2],[190,2]]},"3156":{"position":[[31,2],[358,2]]},"3194":{"position":[[485,2],[539,2]]},"3291":{"position":[[611,2],[955,2],[1020,2]]},"3434":{"position":[[2730,2]]},"3980":{"position":[[401,2]]},"3990":{"position":[[59,2]]},"3992":{"position":[[2476,2],[2946,2]]},"3996":{"position":[[171,2],[834,2],[1012,2],[1291,2]]},"4000":{"position":[[1166,2]]}}}],["连接数",{"_index":7399,"t":{"3096":{"position":[[82,3]]}}}],["连接池",{"_index":3908,"t":{"1050":{"position":[[3,3],[16,3],[24,3],[47,3]]},"1566":{"position":[[619,3]]},"3434":{"position":[[2739,3]]},"3922":{"position":[[1435,3],[1666,3]]},"3980":{"position":[[396,3]]}}}],["连接符",{"_index":7766,"t":{"3254":{"position":[[161,3]]},"3275":{"position":[[81,3]]},"3954":{"position":[[773,3]]}}}],["连接起来",{"_index":5181,"t":{"1647":{"position":[[45,4]]}}}],["连用",{"_index":2710,"t":{"482":{"position":[[923,2]]},"2418":{"position":[[1289,2]]}}}],["连续",{"_index":6150,"t":{"2326":{"position":[[205,2]]},"2328":{"position":[[12,2]]},"2472":{"position":[[383,2]]},"3110":{"position":[[152,2]]},"3966":{"position":[[496,2],[1786,2]]},"3976":{"position":[[99,2]]}}}],["连锁",{"_index":10168,"t":{"3990":{"position":[[493,2]]}}}],["迟延",{"_index":3945,"t":{"1097":{"position":[[12,2]]}}}],["迫切需要",{"_index":7008,"t":{"2770":{"position":[[165,4]]},"3612":{"position":[[89,4]]}}}],["迭代",{"_index":5247,"t":{"1685":{"position":[[333,2]]},"3610":{"position":[[29,2]]},"3626":{"position":[[207,2],[406,2]]},"3922":{"position":[[2301,2]]},"3928":{"position":[[363,2]]}}}],["追加",{"_index":7169,"t":{"2891":{"position":[[127,2]]},"3432":{"position":[[137,2],[153,2],[464,2]]},"3510":{"position":[[98,2]]},"3551":{"position":[[406,2]]},"3920":{"position":[[1683,2]]},"3984":{"position":[[264,2]]},"3992":{"position":[[2084,2]]}}}],["追求",{"_index":589,"t":{"98":{"position":[[9,2]]}}}],["追踪",{"_index":3715,"t":{"887":{"position":[[107,2],[132,2],[167,2]]},"941":{"position":[[51,2]]}}}],["追逐",{"_index":6995,"t":{"2770":{"position":[[30,2]]}}}],["退出",{"_index":5023,"t":{"1555":{"position":[[604,2]]},"3309":{"position":[[60,2]]},"3910":{"position":[[1095,2]]},"3954":{"position":[[455,2]]}}}],["适合",{"_index":1855,"t":{"255":{"position":[[22,2]]},"1399":{"position":[[30,2]]},"2881":{"position":[[50,2]]}}}],["适宜",{"_index":8433,"t":{"3620":{"position":[[116,2]]}}}],["适应",{"_index":7155,"t":{"2875":{"position":[[458,2]]}}}],["适用",{"_index":907,"t":{"121":{"position":[[446,2]]},"225":{"position":[[38,2]]},"251":{"position":[[72,2],[138,2]]},"304":{"position":[[32,2]]},"1755":{"position":[[1013,2]]},"1909":{"position":[[250,2]]},"3142":{"position":[[87,2]]}}}],["适配",{"_index":387,"t":{"44":{"position":[[57,2]]},"57":{"position":[[57,2]]},"68":{"position":[[57,2]]},"314":{"position":[[166,2]]},"773":{"position":[[8,2],[59,2]]},"3912":{"position":[[66,2],[1492,2]]},"3914":{"position":[[1201,2]]},"3918":{"position":[[1293,2]]},"3924":{"position":[[2688,2]]},"3946":{"position":[[251,2]]}}}],["逆向",{"_index":10129,"t":{"3986":{"position":[[1391,2]]},"3992":{"position":[[3471,2]]}}}],["选",{"_index":3185,"t":{"608":{"position":[[785,1]]},"692":{"position":[[24,1]]},"1416":{"position":[[107,1],[202,1]]},"1420":{"position":[[727,1]]},"1470":{"position":[[74,1]]},"1685":{"position":[[481,1]]},"1973":{"position":[[92,1]]},"1987":{"position":[[92,1]]},"2010":{"position":[[100,1]]},"2272":{"position":[[362,1],[431,1]]},"2418":{"position":[[509,1]]},"3001":{"position":[[288,1]]},"3039":{"position":[[404,1]]},"3964":{"position":[[176,1]]}}}],["选型",{"_index":9957,"t":{"3978":{"position":[[210,2]]}}}],["选择",{"_index":1772,"t":{"239":{"position":[[292,2]]},"300":{"position":[[25,2]]},"306":{"position":[[199,2]]},"308":{"position":[[24,2],[60,2]]},"310":{"position":[[24,2],[62,2]]},"363":{"position":[[95,2]]},"437":{"position":[[45,2]]},"690":{"position":[[0,2]]},"692":{"position":[[9,2]]},"694":{"position":[[19,2]]},"1082":{"position":[[2,2]]},"1472":{"position":[[54,2]]},"1474":{"position":[[232,2]]},"1497":{"position":[[0,2],[219,2]]},"1555":{"position":[[612,2],[650,2]]},"1685":{"position":[[164,2]]},"1801":{"position":[[1715,2],[2511,2]]},"1903":{"position":[[368,2]]},"1973":{"position":[[40,2]]},"1987":{"position":[[40,2]]},"2010":{"position":[[48,2]]},"2326":{"position":[[113,2]]},"2557":{"position":[[164,2]]},"2564":{"position":[[32,2]]},"2715":{"position":[[122,2]]},"2864":{"position":[[40,2]]},"2915":{"position":[[217,2]]},"3296":{"position":[[49,2]]},"3339":{"position":[[127,2]]},"3362":{"position":[[12,2]]},"3795":{"position":[[39,2],[52,2]]},"3924":{"position":[[407,2]]},"3926":{"position":[[496,2]]},"3986":{"position":[[138,2]]}}}],["选择性",{"_index":6834,"t":{"2717":{"position":[[266,3]]}}}],["选用",{"_index":3315,"t":{"677":{"position":[[39,2]]},"704":{"position":[[39,2]]},"1765":{"position":[[26,2],[41,2],[71,2],[110,2]]},"1903":{"position":[[361,2]]},"2703":{"position":[[93,2]]},"3984":{"position":[[871,2]]}}}],["选项",{"_index":429,"t":{"51":{"position":[[292,2]]},"62":{"position":[[292,2]]},"75":{"position":[[292,2]]},"184":{"position":[[30,2]]},"235":{"position":[[50,2]]},"325":{"position":[[202,2]]},"429":{"position":[[18,2]]},"459":{"position":[[33,2]]},"1416":{"position":[[177,2]]},"1420":{"position":[[774,2]]},"1661":{"position":[[28,2]]},"1821":{"position":[[41,2],[45,2]]},"1973":{"position":[[117,2]]},"1987":{"position":[[117,2]]},"2010":{"position":[[125,2]]},"2345":{"position":[[704,2]]},"2354":{"position":[[85,2]]},"2357":{"position":[[1362,2]]},"2522":{"position":[[26,2]]},"2696":{"position":[[17,2]]},"2701":{"position":[[0,2]]},"2703":{"position":[[0,2],[96,2]]},"2709":{"position":[[236,2],[280,2]]},"2711":{"position":[[0,2]]},"2713":{"position":[[312,2],[321,2]]},"2715":{"position":[[2,2]]},"2717":{"position":[[22,2],[69,2],[132,2],[166,2],[200,2],[218,2],[257,2],[269,2],[347,2],[444,2],[470,2],[475,2]]},"2719":{"position":[[5,2]]},"2723":{"position":[[0,2],[108,2],[139,2],[144,2]]},"2725":{"position":[[0,2],[74,2],[1058,2],[1506,2],[2123,2],[2638,2],[2656,2]]},"2727":{"position":[[0,2],[51,2],[883,2]]},"2729":{"position":[[24,2]]},"2733":{"position":[[71,2]]},"2735":{"position":[[67,2],[411,2]]},"2737":{"position":[[35,2],[59,2]]},"2979":{"position":[[21,2]]},"2989":{"position":[[24,2]]},"2999":{"position":[[25,2]]},"3001":{"position":[[325,2]]},"3007":{"position":[[25,2]]},"3021":{"position":[[31,2]]},"3029":{"position":[[25,2]]},"3053":{"position":[[34,2]]},"3061":{"position":[[33,2]]},"3071":{"position":[[190,2]]},"3323":{"position":[[460,2]]},"3506":{"position":[[456,2]]},"3698":{"position":[[232,2]]},"3706":{"position":[[22,2]]},"3718":{"position":[[121,2]]},"3722":{"position":[[354,2]]},"3824":{"position":[[25,2]]},"3916":{"position":[[1742,2],[2753,2],[2800,2]]},"3920":{"position":[[1172,2]]},"3924":{"position":[[350,2],[401,2]]},"3934":{"position":[[1010,2]]},"3936":{"position":[[15,2],[932,2],[1548,2]]},"3952":{"position":[[374,2]]},"3956":{"position":[[100,2]]},"3958":{"position":[[60,2]]},"3962":{"position":[[1829,2],[1855,2]]},"3992":{"position":[[2709,2]]},"3996":{"position":[[1475,2]]},"4006":{"position":[[760,2]]}}}],["逐",{"_index":7254,"t":{"2919":{"position":[[225,1]]}}}],["逐一",{"_index":5390,"t":{"1741":{"position":[[2053,2]]}}}],["逐出",{"_index":1702,"t":{"233":{"position":[[462,2]]},"237":{"position":[[100,2],[1310,2]]}}}],["逐条",{"_index":7255,"t":{"2919":{"position":[[227,2]]}}}],["递增",{"_index":6140,"t":{"2326":{"position":[[42,2],[140,2]]},"3432":{"position":[[647,2]]},"3783":{"position":[[430,2]]},"3806":{"position":[[3172,2],[3757,2],[3881,2]]},"3808":{"position":[[2412,2],[2536,2],[2660,2],[2784,2],[2908,2]]}}}],["递归",{"_index":5367,"t":{"1731":{"position":[[157,2]]},"3986":{"position":[[1824,2]]}}}],["途径",{"_index":7214,"t":{"2910":{"position":[[452,2]]}}}],["逗号",{"_index":3832,"t":{"960":{"position":[[690,2]]},"1741":{"position":[[1673,2]]}}}],["通俗",{"_index":2271,"t":{"353":{"position":[[30,2]]},"1385":{"position":[[57,2]]},"1892":{"position":[[86,2]]},"2303":{"position":[[68,2]]},"2517":{"position":[[106,2]]},"2727":{"position":[[6,2]]}}}],["通信",{"_index":5307,"t":{"1697":{"position":[[46,2]]},"1793":{"position":[[46,2]]},"2307":{"position":[[14,2],[42,2],[51,2],[79,2],[85,2],[126,2]]},"2309":{"position":[[3,2]]},"2311":{"position":[[258,2]]},"2321":{"position":[[17,2],[85,2]]},"3140":{"position":[[49,2]]},"3146":{"position":[[26,2]]},"3478":{"position":[[7,2]]},"3954":{"position":[[58,2]]},"3986":{"position":[[1002,2]]},"3988":{"position":[[88,2]]}}}],["通信协议",{"_index":7531,"t":{"3148":{"position":[[153,4]]}}}],["通信模型",{"_index":7533,"t":{"3148":{"position":[[218,4]]},"3150":{"position":[[135,4]]},"3152":{"position":[[14,4],[42,4]]}}}],["通常",{"_index":127,"t":{"9":{"position":[[192,2]]},"21":{"position":[[34,2]]},"23":{"position":[[16,2]]},"112":{"position":[[40,2]]},"125":{"position":[[28,2]]},"127":{"position":[[1634,2]]},"152":{"position":[[0,2]]},"239":{"position":[[20,2]]},"249":{"position":[[22,2]]},"255":{"position":[[68,2],[123,2],[168,2]]},"355":{"position":[[4,2]]},"419":{"position":[[371,2]]},"469":{"position":[[63,2]]},"500":{"position":[[93,2]]},"565":{"position":[[66,2]]},"841":{"position":[[0,2]]},"1141":{"position":[[17,2]]},"1149":{"position":[[0,2]]},"1286":{"position":[[0,2]]},"1399":{"position":[[70,2]]},"1401":{"position":[[54,2]]},"1403":{"position":[[31,2]]},"1511":{"position":[[126,2]]},"1520":{"position":[[0,2],[118,2],[191,2],[252,2],[265,2],[399,2]]},"1539":{"position":[[1902,2]]},"1549":{"position":[[210,2]]},"1651":{"position":[[19,2]]},"1657":{"position":[[142,2]]},"1735":{"position":[[0,2]]},"1755":{"position":[[35,2],[313,2]]},"1761":{"position":[[584,2]]},"1775":{"position":[[11,2]]},"1832":{"position":[[67,2]]},"1883":{"position":[[0,2]]},"1905":{"position":[[26,2]]},"1917":{"position":[[12,2]]},"1923":{"position":[[17,2]]},"1955":{"position":[[0,2]]},"2035":{"position":[[52,2]]},"2061":{"position":[[34,2]]},"2231":{"position":[[16,2]]},"2243":{"position":[[4,2]]},"2292":{"position":[[192,2]]},"2393":{"position":[[32,2]]},"2619":{"position":[[7,2],[61,2]]},"2625":{"position":[[369,2]]},"2813":{"position":[[108,2]]},"2843":{"position":[[71,2]]},"3080":{"position":[[562,2]]},"3118":{"position":[[176,2]]},"3136":{"position":[[29,2]]},"3284":{"position":[[56,2],[77,2]]},"3337":{"position":[[0,2]]},"3405":{"position":[[20,2]]},"3412":{"position":[[0,2],[136,2]]},"3416":{"position":[[33,2],[269,2]]},"3468":{"position":[[356,2]]},"3612":{"position":[[102,2]]},"3630":{"position":[[705,2]]},"3664":{"position":[[48,2]]},"3727":{"position":[[22,2]]},"3787":{"position":[[21,2]]},"3826":{"position":[[167,2]]}}}],["通用",{"_index":454,"t":{"81":{"position":[[14,2]]},"199":{"position":[[59,2],[347,2]]},"585":{"position":[[592,2]]},"1511":{"position":[[4003,2]]},"1763":{"position":[[133,2]]},"2261":{"position":[[65,2],[269,2]]},"2532":{"position":[[93,2]]},"2877":{"position":[[105,2],[270,2]]},"2897":{"position":[[203,2]]},"3464":{"position":[[113,2],[317,2]]},"3636":{"position":[[655,2]]},"3910":{"position":[[595,2],[785,2],[950,2]]},"3924":{"position":[[724,2]]},"3936":{"position":[[1937,2],[2128,2]]}}}],["通用型",{"_index":1492,"t":{"199":{"position":[[502,3]]}}}],["通知",{"_index":2587,"t":{"453":{"position":[[24,2]]},"457":{"position":[[85,2]]},"2486":{"position":[[487,2],[550,2],[572,2],[635,2],[655,2],[718,2],[740,2],[803,2],[825,2],[889,2],[911,2],[975,2]]},"2703":{"position":[[61,2]]},"2717":{"position":[[220,2],[252,2]]},"2733":{"position":[[64,2]]},"3142":{"position":[[212,2],[250,2]]},"3962":{"position":[[1833,2],[1853,2]]}}}],["通讯",{"_index":7471,"t":{"3136":{"position":[[43,2]]},"3614":{"position":[[25,2]]},"3954":{"position":[[68,2]]}}}],["通过",{"_index":73,"t":{"3":{"position":[[853,2],[899,2]]},"21":{"position":[[36,2],[115,2]]},"23":{"position":[[18,2],[97,2]]},"26":{"position":[[28,2]]},"28":{"position":[[51,2]]},"112":{"position":[[72,2]]},"121":{"position":[[485,2]]},"127":{"position":[[715,2],[1665,2]]},"131":{"position":[[29,2]]},"144":{"position":[[31,2],[83,2]]},"152":{"position":[[63,2]]},"179":{"position":[[44,2]]},"182":{"position":[[69,2]]},"188":{"position":[[15,2]]},"218":{"position":[[32,2],[132,2],[158,2]]},"225":{"position":[[60,2]]},"229":{"position":[[31,2]]},"233":{"position":[[347,2],[454,2]]},"247":{"position":[[165,2]]},"249":{"position":[[36,2]]},"253":{"position":[[46,2]]},"261":{"position":[[62,2]]},"272":{"position":[[266,2]]},"278":{"position":[[159,2],[234,2]]},"284":{"position":[[128,2],[315,2]]},"308":{"position":[[140,2],[404,2]]},"310":{"position":[[264,2]]},"321":{"position":[[14,2]]},"327":{"position":[[32,2]]},"336":{"position":[[213,2]]},"340":{"position":[[69,2],[401,2],[429,2],[1889,2]]},"350":{"position":[[25,2],[276,2],[507,2]]},"353":{"position":[[59,2]]},"369":{"position":[[13,2],[195,2],[245,2],[784,2]]},"371":{"position":[[19,2],[592,2]]},"382":{"position":[[0,2]]},"384":{"position":[[39,2]]},"386":{"position":[[3,2]]},"394":{"position":[[25,2],[40,2]]},"408":{"position":[[75,2]]},"417":{"position":[[6,2],[273,2]]},"429":{"position":[[29,2]]},"435":{"position":[[49,2],[843,2]]},"441":{"position":[[70,2]]},"443":{"position":[[20,2]]},"457":{"position":[[33,2]]},"461":{"position":[[15,2],[43,2],[64,2]]},"488":{"position":[[39,2]]},"512":{"position":[[134,2]]},"548":{"position":[[10,2]]},"567":{"position":[[376,2]]},"570":{"position":[[1077,2],[2055,2],[2070,2],[2660,2]]},"572":{"position":[[2,2]]},"587":{"position":[[38,2]]},"606":{"position":[[1259,2],[1381,2]]},"608":{"position":[[801,2],[824,2]]},"617":{"position":[[1373,2],[1422,2]]},"621":{"position":[[6,2]]},"623":{"position":[[1,2]]},"677":{"position":[[200,2]]},"704":{"position":[[200,2]]},"706":{"position":[[66,2]]},"719":{"position":[[48,2]]},"724":{"position":[[0,2]]},"765":{"position":[[0,2]]},"791":{"position":[[47,2]]},"810":{"position":[[332,2]]},"812":{"position":[[356,2]]},"814":{"position":[[329,2]]},"816":{"position":[[353,2]]},"836":{"position":[[44,2],[334,2]]},"846":{"position":[[140,2]]},"879":{"position":[[29,2]]},"903":{"position":[[7,2]]},"919":{"position":[[36,2]]},"924":{"position":[[24,2]]},"933":{"position":[[376,2]]},"941":{"position":[[98,2],[187,2],[202,2]]},"988":{"position":[[448,2]]},"1035":{"position":[[7,2]]},"1046":{"position":[[43,2]]},"1066":{"position":[[158,2]]},"1103":{"position":[[82,2],[205,2]]},"1107":{"position":[[50,2],[94,2],[150,2],[189,2]]},"1111":{"position":[[356,2]]},"1113":{"position":[[354,2]]},"1115":{"position":[[360,2]]},"1117":{"position":[[3818,2]]},"1119":{"position":[[331,2]]},"1121":{"position":[[355,2]]},"1123":{"position":[[301,2]]},"1129":{"position":[[508,2],[1446,2]]},"1141":{"position":[[22,2]]},"1202":{"position":[[27,2]]},"1204":{"position":[[200,2]]},"1206":{"position":[[3,2],[43,2]]},"1208":{"position":[[3,2]]},"1210":{"position":[[3,2],[49,2]]},"1212":{"position":[[28,2]]},"1214":{"position":[[159,2]]},"1221":{"position":[[36,2]]},"1225":{"position":[[4,2]]},"1273":{"position":[[2,2]]},"1279":{"position":[[418,2]]},"1319":{"position":[[66,2]]},"1358":{"position":[[22,2]]},"1368":{"position":[[695,2]]},"1394":{"position":[[49,2],[83,2]]},"1396":{"position":[[17,2]]},"1412":{"position":[[70,2],[1224,2]]},"1416":{"position":[[337,2],[364,2]]},"1418":{"position":[[179,2],[274,2]]},"1422":{"position":[[44,2]]},"1424":{"position":[[1709,2]]},"1426":{"position":[[251,2]]},"1428":{"position":[[58,2]]},"1440":{"position":[[75,2],[285,2]]},"1474":{"position":[[0,2],[126,2]]},"1488":{"position":[[1252,2]]},"1509":{"position":[[14,2],[229,2]]},"1511":{"position":[[33,2]]},"1516":{"position":[[31,2]]},"1535":{"position":[[523,2]]},"1539":{"position":[[388,2],[1677,2],[1731,2],[1833,2]]},"1547":{"position":[[186,2]]},"1549":{"position":[[314,2]]},"1551":{"position":[[1133,2]]},"1561":{"position":[[4,2]]},"1572":{"position":[[582,2]]},"1578":{"position":[[0,2]]},"1611":{"position":[[38,2]]},"1621":{"position":[[765,2],[781,2]]},"1629":{"position":[[40,2],[62,2],[88,2],[121,2],[144,2]]},"1633":{"position":[[60,2],[128,2]]},"1647":{"position":[[36,2]]},"1657":{"position":[[30,2],[71,2]]},"1665":{"position":[[41,2]]},"1711":{"position":[[54,2]]},"1717":{"position":[[73,2]]},"1735":{"position":[[33,2],[245,2]]},"1745":{"position":[[64,2],[342,2]]},"1749":{"position":[[1,2]]},"1753":{"position":[[5,2],[295,2]]},"1761":{"position":[[563,2]]},"1765":{"position":[[137,2]]},"1775":{"position":[[3825,2]]},"1777":{"position":[[120,2]]},"1781":{"position":[[402,2]]},"1787":{"position":[[2,2]]},"1795":{"position":[[2657,2],[2811,2]]},"1811":{"position":[[55,2],[82,2]]},"1819":{"position":[[568,2],[888,2]]},"1834":{"position":[[18,2]]},"1847":{"position":[[0,2]]},"1853":{"position":[[34,2]]},"1867":{"position":[[719,2]]},"1869":{"position":[[27,2]]},"1894":{"position":[[0,2]]},"1903":{"position":[[306,2]]},"1909":{"position":[[14,2],[224,2],[303,2],[657,2],[771,2],[1059,2]]},"1911":{"position":[[0,2]]},"1955":{"position":[[50,2]]},"1961":{"position":[[6,2]]},"1981":{"position":[[21,2]]},"1993":{"position":[[21,2]]},"1995":{"position":[[44,2]]},"2016":{"position":[[21,2]]},"2018":{"position":[[44,2]]},"2175":{"position":[[11,2],[417,2]]},"2231":{"position":[[18,2],[97,2]]},"2235":{"position":[[28,2]]},"2237":{"position":[[51,2]]},"2243":{"position":[[127,2]]},"2247":{"position":[[0,2]]},"2285":{"position":[[21,2]]},"2311":{"position":[[123,2]]},"2313":{"position":[[760,2]]},"2321":{"position":[[54,2]]},"2393":{"position":[[126,2],[189,2]]},"2395":{"position":[[106,2]]},"2400":{"position":[[168,2]]},"2436":{"position":[[45,2]]},"2442":{"position":[[1505,2]]},"2486":{"position":[[50,2]]},"2499":{"position":[[55,2]]},"2503":{"position":[[144,2]]},"2526":{"position":[[11,2]]},"2528":{"position":[[0,2],[17,2]]},"2534":{"position":[[55,2]]},"2536":{"position":[[172,2]]},"2538":{"position":[[43,2]]},"2547":{"position":[[59,2]]},"2555":{"position":[[1,2]]},"2575":{"position":[[17,2]]},"2583":{"position":[[24,2]]},"2585":{"position":[[16,2],[28,2]]},"2587":{"position":[[470,2]]},"2589":{"position":[[0,2]]},"2605":{"position":[[10,2]]},"2609":{"position":[[46,2]]},"2623":{"position":[[132,2],[155,2]]},"2625":{"position":[[20,2],[77,2],[194,2],[212,2],[346,2]]},"2646":{"position":[[10,2]]},"2653":{"position":[[25,2]]},"2657":{"position":[[80,2]]},"2686":{"position":[[7,2]]},"2713":{"position":[[24,2],[66,2],[152,2],[282,2],[325,2]]},"2723":{"position":[[5,2]]},"2725":{"position":[[25,2]]},"2731":{"position":[[216,2]]},"2742":{"position":[[53,2]]},"2745":{"position":[[256,2]]},"2747":{"position":[[291,2]]},"2782":{"position":[[21,2]]},"2790":{"position":[[283,2]]},"2811":{"position":[[0,2]]},"2836":{"position":[[668,2],[721,2],[824,2],[854,2],[969,2]]},"2843":{"position":[[46,2],[141,2],[264,2]]},"2846":{"position":[[311,2],[341,2],[369,2]]},"2856":{"position":[[32,2]]},"2875":{"position":[[42,2],[232,2],[374,2],[484,2],[499,2]]},"2889":{"position":[[87,2]]},"2903":{"position":[[143,2]]},"2905":{"position":[[98,2],[385,2]]},"2910":{"position":[[189,2],[242,2],[284,2]]},"2937":{"position":[[0,2]]},"2971":{"position":[[277,2]]},"2981":{"position":[[189,2]]},"3075":{"position":[[206,2]]},"3080":{"position":[[60,2],[139,2],[550,2]]},"3096":{"position":[[112,2]]},"3116":{"position":[[16,2]]},"3118":{"position":[[9,2]]},"3120":{"position":[[67,2]]},"3122":{"position":[[44,2]]},"3126":{"position":[[152,2],[400,2]]},"3140":{"position":[[61,2]]},"3154":{"position":[[672,2]]},"3189":{"position":[[235,2],[368,2]]},"3256":{"position":[[10,2]]},"3287":{"position":[[3096,2]]},"3289":{"position":[[6,2],[69,2],[130,2]]},"3313":{"position":[[21,2]]},"3321":{"position":[[245,2]]},"3323":{"position":[[387,2],[426,2],[513,2]]},"3327":{"position":[[0,2]]},"3329":{"position":[[52,2]]},"3352":{"position":[[193,2]]},"3360":{"position":[[130,2],[216,2]]},"3389":{"position":[[23,2],[37,2]]},"3391":{"position":[[0,2],[66,2]]},"3393":{"position":[[89,2]]},"3395":{"position":[[14,2]]},"3412":{"position":[[63,2]]},"3420":{"position":[[9,2],[281,2]]},"3426":{"position":[[29,2],[204,2]]},"3432":{"position":[[2129,2],[4097,2]]},"3434":{"position":[[1622,2]]},"3452":{"position":[[854,2]]},"3466":{"position":[[54,2]]},"3476":{"position":[[67,2]]},"3483":{"position":[[545,2]]},"3506":{"position":[[66,2]]},"3522":{"position":[[162,2],[1242,2]]},"3547":{"position":[[66,2],[635,2]]},"3551":{"position":[[90,2]]},"3553":{"position":[[90,2]]},"3555":{"position":[[90,2]]},"3557":{"position":[[90,2]]},"3559":{"position":[[90,2]]},"3563":{"position":[[276,2],[480,2]]},"3583":{"position":[[10,2]]},"3601":{"position":[[30,2]]},"3626":{"position":[[184,2],[278,2],[310,2]]},"3632":{"position":[[52,2]]},"3640":{"position":[[8,2],[405,2],[474,2]]},"3642":{"position":[[13,2]]},"3654":{"position":[[32,2],[97,2]]},"3684":{"position":[[40,2]]},"3700":{"position":[[32,2]]},"3708":{"position":[[23,2]]},"3744":{"position":[[331,2],[393,2],[456,2]]},"3752":{"position":[[63,2]]},"3779":{"position":[[195,2],[446,2],[528,2],[1356,2],[1564,2]]},"3791":{"position":[[40,2],[575,2]]},"3802":{"position":[[196,2],[497,2],[584,2],[1974,2],[2321,2]]},"3804":{"position":[[54,2]]},"3806":{"position":[[257,2],[1330,2],[1648,2],[3254,2]]},"3817":{"position":[[207,2],[483,2],[2570,2]]},"3824":{"position":[[94,2]]},"3836":{"position":[[208,2]]},"3838":{"position":[[260,2]]},"3842":{"position":[[0,2],[529,2],[1159,2],[1724,2],[2314,2],[2955,2]]},"3844":{"position":[[0,2],[717,2],[900,2]]},"3846":{"position":[[0,2],[251,2]]},"3848":{"position":[[59,2]]},"3850":{"position":[[36,2]]},"3852":{"position":[[36,2]]},"3854":{"position":[[37,2]]},"3856":{"position":[[61,2]]},"3858":{"position":[[144,2]]},"3912":{"position":[[2374,2]]},"3916":{"position":[[1693,2],[1722,2],[1753,2],[1842,2],[3850,2]]},"3918":{"position":[[2020,2]]},"3922":{"position":[[1932,2]]},"3970":{"position":[[198,2],[276,2]]},"3992":{"position":[[2432,2],[3990,2]]},"3994":{"position":[[1280,2]]},"3996":{"position":[[1684,2]]}}}],["通道",{"_index":5544,"t":{"1801":{"position":[[534,2],[625,2],[1104,2],[1238,2],[1389,2],[3317,2]]},"1803":{"position":[[2624,2],[3298,2],[3432,2],[5530,2]]}}}],["通道容量",{"_index":5682,"t":{"1821":{"position":[[81,4]]}}}],["通配符",{"_index":9849,"t":{"3966":{"position":[[1812,3]]}}}],["逛",{"_index":1207,"t":{"168":{"position":[[59,1]]}}}],["逞强",{"_index":4668,"t":{"1511":{"position":[[1125,2]]}}}],["速度",{"_index":1651,"t":{"225":{"position":[[78,2]]},"2311":{"position":[[321,2],[442,2]]},"3331":{"position":[[18,2]]},"3626":{"position":[[559,2]]},"3970":{"position":[[350,2]]}}}],["速度慢",{"_index":4150,"t":{"1374":{"position":[[121,3]]}}}],["造成",{"_index":1988,"t":{"300":{"position":[[316,2]]},"2881":{"position":[[251,2]]},"3622":{"position":[[39,2]]},"3690":{"position":[[85,2]]},"3908":{"position":[[26,2]]},"3938":{"position":[[889,2]]},"3972":{"position":[[633,2]]}}}],["造谣",{"_index":6901,"t":{"2768":{"position":[[27,2]]}}}],["逻辑",{"_index":971,"t":{"127":{"position":[[710,2]]},"146":{"position":[[389,2]]},"233":{"position":[[427,2]]},"585":{"position":[[586,2]]},"587":{"position":[[1800,2],[1961,2],[2070,2]]},"606":{"position":[[1358,2]]},"608":{"position":[[760,2]]},"734":{"position":[[45,2]]},"1066":{"position":[[1575,2]]},"1103":{"position":[[196,2]]},"1430":{"position":[[68,2]]},"1495":{"position":[[1217,2]]},"1499":{"position":[[848,2]]},"1539":{"position":[[14,2]]},"1566":{"position":[[504,2]]},"1572":{"position":[[52,2]]},"1733":{"position":[[73,2]]},"1837":{"position":[[67,2]]},"1839":{"position":[[34,2]]},"1894":{"position":[[57,2],[64,2]]},"1896":{"position":[[13,2]]},"1901":{"position":[[423,2]]},"1913":{"position":[[948,2]]},"2436":{"position":[[14,2]]},"2438":{"position":[[41,2],[49,2],[99,2]]},"2440":{"position":[[41,2],[49,2],[133,2],[415,2],[423,2],[506,2]]},"2813":{"position":[[105,2]]},"2817":{"position":[[168,2],[711,2]]},"2917":{"position":[[126,2]]},"2933":{"position":[[744,2]]},"2949":{"position":[[639,2]]},"2963":{"position":[[613,2]]},"3282":{"position":[[7,2],[74,2]]},"3352":{"position":[[210,2]]},"3454":{"position":[[78,2],[275,2]]},"3470":{"position":[[141,2]]},"3680":{"position":[[41,2]]},"3718":{"position":[[95,2]]},"3727":{"position":[[54,2]]},"3752":{"position":[[94,2]]},"3787":{"position":[[16,2]]},"3912":{"position":[[1899,2]]},"3914":{"position":[[1453,2]]},"3916":{"position":[[1471,2],[9060,2]]},"3930":{"position":[[571,2],[1382,2]]},"3942":{"position":[[462,2]]},"3952":{"position":[[233,2]]},"3954":{"position":[[538,2]]},"3978":{"position":[[541,2]]},"3986":{"position":[[419,2]]},"4000":{"position":[[667,2]]}}}],["逻辑运算",{"_index":6277,"t":{"2393":{"position":[[193,4]]}}}],["逼近",{"_index":4029,"t":{"1157":{"position":[[44,2]]}}}],["逾",{"_index":7724,"t":{"3242":{"position":[[46,1]]},"3910":{"position":[[43,1]]},"3934":{"position":[[2129,1]]}}}],["遇到",{"_index":8304,"t":{"3522":{"position":[[883,2]]},"3585":{"position":[[13,2]]},"3982":{"position":[[777,2]]}}}],["遇见",{"_index":9362,"t":{"3926":{"position":[[7,2],[607,2]]}}}],["遍历",{"_index":1924,"t":{"282":{"position":[[131,2],[214,2]]},"570":{"position":[[1474,2]]},"1234":{"position":[[887,2]]},"1741":{"position":[[2047,2]]},"3966":{"position":[[780,2]]},"3986":{"position":[[1829,2]]}}}],["道理",{"_index":1611,"t":{"220":{"position":[[71,2]]},"2333":{"position":[[6,2]]}}}],["遭遇",{"_index":7382,"t":{"3088":{"position":[[153,2]]}}}],["遵循",{"_index":665,"t":{"106":{"position":[[7,2]]},"210":{"position":[[223,2]]},"353":{"position":[[7,2]]},"451":{"position":[[50,2]]},"615":{"position":[[58,2]]},"945":{"position":[[13,2]]},"1520":{"position":[[8,2]]},"1541":{"position":[[136,2]]},"1576":{"position":[[33,2]]},"1578":{"position":[[38,2]]},"1580":{"position":[[31,2]]},"1855":{"position":[[13,2]]},"3339":{"position":[[67,2]]}}}],["避免",{"_index":293,"t":{"19":{"position":[[368,2]]},"127":{"position":[[1752,2]]},"323":{"position":[[153,2]]},"570":{"position":[[855,2]]},"841":{"position":[[71,2]]},"943":{"position":[[22,2]]},"1566":{"position":[[116,2]]},"1589":{"position":[[248,2]]},"1741":{"position":[[527,2],[1286,2],[2122,2]]},"1761":{"position":[[458,2]]},"1823":{"position":[[29,2]]},"1825":{"position":[[40,2]]},"2239":{"position":[[150,2]]},"2933":{"position":[[555,2]]},"2973":{"position":[[32,2]]},"3110":{"position":[[172,2]]},"3118":{"position":[[139,2],[218,2]]},"3331":{"position":[[168,2]]},"3599":{"position":[[12,2]]},"3779":{"position":[[111,2],[151,2],[935,2]]},"3791":{"position":[[1355,2]]},"3802":{"position":[[110,2],[148,2],[1284,2]]},"3817":{"position":[[117,2],[157,2],[1584,2]]},"3914":{"position":[[3349,2]]},"3920":{"position":[[357,2],[453,2]]},"3922":{"position":[[477,2]]},"3952":{"position":[[333,2]]}}}],["避免出现",{"_index":8439,"t":{"3622":{"position":[[27,4]]}}}],["邓",{"_index":4624,"t":{"1511":{"position":[[653,1]]}}}],["那一刻",{"_index":507,"t":{"85":{"position":[[233,3]]}}}],["那么",{"_index":688,"t":{"110":{"position":[[41,2]]},"127":{"position":[[321,2]]},"129":{"position":[[578,2]]},"148":{"position":[[381,2]]},"206":{"position":[[311,2]]},"210":{"position":[[74,2],[185,2]]},"220":{"position":[[90,2]]},"340":{"position":[[1577,2]]},"359":{"position":[[56,2]]},"369":{"position":[[60,2]]},"445":{"position":[[700,2]]},"498":{"position":[[38,2]]},"510":{"position":[[504,2]]},"524":{"position":[[502,2]]},"528":{"position":[[428,2]]},"565":{"position":[[41,2]]},"570":{"position":[[2047,2]]},"610":{"position":[[60,2]]},"612":{"position":[[67,2]]},"706":{"position":[[240,2]]},"730":{"position":[[21,2]]},"836":{"position":[[367,2]]},"841":{"position":[[49,2]]},"893":{"position":[[38,2]]},"939":{"position":[[27,2]]},"941":{"position":[[144,2]]},"1048":{"position":[[80,2]]},"1149":{"position":[[22,2]]},"1223":{"position":[[76,2],[255,2]]},"1234":{"position":[[883,2],[1046,2]]},"1319":{"position":[[241,2]]},"1377":{"position":[[506,2]]},"1416":{"position":[[360,2]]},"1420":{"position":[[945,2]]},"1424":{"position":[[30,2]]},"1440":{"position":[[435,2]]},"1511":{"position":[[3024,2]]},"1615":{"position":[[310,2]]},"1783":{"position":[[149,2]]},"1825":{"position":[[24,2]]},"1857":{"position":[[137,2]]},"1875":{"position":[[661,2]]},"1933":{"position":[[284,2]]},"2361":{"position":[[249,2],[391,2]]},"2490":{"position":[[24,2]]},"2503":{"position":[[139,2]]},"2625":{"position":[[529,2]]},"2684":{"position":[[362,2]]},"2770":{"position":[[172,2]]},"2774":{"position":[[442,2]]},"2817":{"position":[[105,2],[245,2]]},"2912":{"position":[[177,2]]},"3122":{"position":[[23,2]]},"3287":{"position":[[3081,2]]},"3291":{"position":[[1298,2]]},"3294":{"position":[[55,2]]},"3339":{"position":[[302,2]]},"3352":{"position":[[156,2],[236,2],[578,2]]},"3420":{"position":[[304,2]]},"3430":{"position":[[1497,2]]},"3432":{"position":[[604,2],[734,2],[4372,2]]},"3434":{"position":[[2744,2]]},"3452":{"position":[[784,2],[849,2]]},"3458":{"position":[[576,2]]},"3500":{"position":[[789,2]]},"3632":{"position":[[116,2]]},"3640":{"position":[[754,2]]},"3718":{"position":[[86,2]]},"3777":{"position":[[256,2]]},"3779":{"position":[[33,2]]},"3791":{"position":[[26,2]]},"3802":{"position":[[32,2]]},"3806":{"position":[[1312,2],[3250,2]]},"3808":{"position":[[47,2]]},"3817":{"position":[[33,2]]},"3844":{"position":[[871,2],[935,2],[1002,2],[1105,2]]},"3916":{"position":[[3780,2],[3845,2]]},"3928":{"position":[[159,2]]}}}],["那些",{"_index":1246,"t":{"179":{"position":[[96,2]]}}}],["那种",{"_index":6125,"t":{"2313":{"position":[[502,2]]}}}],["那里",{"_index":7236,"t":{"2915":{"position":[[185,2]]}}}],["邮件",{"_index":2347,"t":{"384":{"position":[[41,2]]},"2404":{"position":[[100,2]]},"3729":{"position":[[73,2]]}}}],["邮件地址",{"_index":3148,"t":{"606":{"position":[[221,4]]}}}],["邮箱",{"_index":3176,"t":{"606":{"position":[[717,2]]}}}],["邮编",{"_index":3142,"t":{"606":{"position":[[145,2]]}}}],["郎",{"_index":4899,"t":{"1511":{"position":[[4180,1]]}}}],["部分",{"_index":662,"t":{"104":{"position":[[65,2]]},"380":{"position":[[27,2]]},"1541":{"position":[[313,2]]},"1799":{"position":[[96,2]]},"3350":{"position":[[199,2]]},"3612":{"position":[[112,2]]},"3772":{"position":[[120,2],[125,2]]},"3912":{"position":[[736,2],[1929,2]]},"3922":{"position":[[2033,2],[2276,2]]},"3924":{"position":[[1947,2]]},"3966":{"position":[[1090,2]]}}}],["部署",{"_index":644,"t":{"102":{"position":[[182,2]]},"227":{"position":[[17,2]]},"239":{"position":[[186,2]]},"331":{"position":[[93,2]]},"1374":{"position":[[10,2]]},"1377":{"position":[[56,2]]},"1470":{"position":[[4,2]]},"1474":{"position":[[7,2]]},"1479":{"position":[[27,2]]},"1488":{"position":[[1567,2]]},"1825":{"position":[[14,2]]},"2391":{"position":[[156,2],[187,2]]},"2490":{"position":[[14,2],[58,2],[89,2]]},"2751":{"position":[[4,2],[26,2]]},"2803":{"position":[[61,2],[132,2],[176,2]]},"2809":{"position":[[58,2],[86,2]]},"2834":{"position":[[7,2],[17,2],[61,2]]},"2836":{"position":[[17,2],[53,2],[1286,2],[1851,2]]},"2838":{"position":[[26,2]]},"2910":{"position":[[218,2]]},"2915":{"position":[[165,2],[179,2]]},"3063":{"position":[[1044,2]]},"3088":{"position":[[98,2]]},"3337":{"position":[[9,2]]},"3339":{"position":[[63,2]]},"3341":{"position":[[17,2]]},"3395":{"position":[[37,2]]},"3397":{"position":[[20,2]]},"3626":{"position":[[613,2]]},"3706":{"position":[[1036,2]]},"3912":{"position":[[2534,2],[2706,2]]},"3930":{"position":[[1510,2]]},"3932":{"position":[[1379,2],[1550,2]]},"3934":{"position":[[308,2]]},"3940":{"position":[[726,2]]},"3942":{"position":[[87,2]]},"3968":{"position":[[461,2]]},"3978":{"position":[[1784,2]]},"3986":{"position":[[956,2]]},"3996":{"position":[[22,2]]}}}],["都",{"_index":118,"t":{"9":{"position":[[84,1]]},"98":{"position":[[182,1]]},"110":{"position":[[33,1]]},"121":{"position":[[240,1],[639,1]]},"127":{"position":[[180,1],[1360,1]]},"137":{"position":[[11,1]]},"239":{"position":[[301,1]]},"300":{"position":[[229,1]]},"302":{"position":[[18,1]]},"401":{"position":[[199,1]]},"404":{"position":[[143,1]]},"482":{"position":[[359,1],[509,1]]},"510":{"position":[[450,1]]},"522":{"position":[[69,1]]},"565":{"position":[[33,1]]},"567":{"position":[[29,1]]},"585":{"position":[[464,1],[536,1]]},"706":{"position":[[251,1]]},"719":{"position":[[29,1]]},"810":{"position":[[411,1]]},"812":{"position":[[443,1]]},"814":{"position":[[407,1]]},"816":{"position":[[439,1]]},"887":{"position":[[31,1]]},"911":{"position":[[193,1]]},"933":{"position":[[29,1]]},"939":{"position":[[63,1]]},"947":{"position":[[519,1],[991,1]]},"1026":{"position":[[173,1]]},"1037":{"position":[[333,1]]},"1056":{"position":[[420,1]]},"1111":{"position":[[443,1]]},"1113":{"position":[[441,1]]},"1115":{"position":[[450,1]]},"1117":{"position":[[4688,1]]},"1119":{"position":[[412,1]]},"1121":{"position":[[444,1]]},"1123":{"position":[[375,1]]},"1129":{"position":[[1766,1]]},"1135":{"position":[[9,1]]},"1194":{"position":[[450,1]]},"1200":{"position":[[17,1]]},"1212":{"position":[[26,1]]},"1214":{"position":[[21,1]]},"1234":{"position":[[923,1]]},"1286":{"position":[[20,1]]},"1311":{"position":[[340,1]]},"1319":{"position":[[252,1]]},"1403":{"position":[[21,1]]},"1418":{"position":[[272,1]]},"1432":{"position":[[65,1]]},"1488":{"position":[[1639,1],[1695,1]]},"1497":{"position":[[336,1]]},"1499":{"position":[[872,1]]},"1509":{"position":[[94,1],[254,1]]},"1511":{"position":[[378,1],[2131,1]]},"1520":{"position":[[7,1],[332,1],[377,1]]},"1535":{"position":[[521,1]]},"1547":{"position":[[24,1]]},"1587":{"position":[[242,1]]},"1627":{"position":[[15,1],[236,1]]},"1735":{"position":[[16,1],[243,1]]},"1745":{"position":[[30,1]]},"1747":{"position":[[28,1]]},"1775":{"position":[[22,1],[3866,1]]},"1797":{"position":[[39,1]]},"1823":{"position":[[60,1]]},"1955":{"position":[[36,1]]},"2239":{"position":[[127,1]]},"2285":{"position":[[13,1]]},"2292":{"position":[[84,1]]},"2345":{"position":[[54,1]]},"2418":{"position":[[549,1],[618,1],[800,1]]},"2438":{"position":[[294,1]]},"2440":{"position":[[328,1]]},"2538":{"position":[[41,1],[107,1]]},"2544":{"position":[[135,1]]},"2627":{"position":[[9,1]]},"2646":{"position":[[8,1]]},"2703":{"position":[[90,1]]},"2709":{"position":[[239,1]]},"2715":{"position":[[21,1]]},"2729":{"position":[[65,1]]},"2742":{"position":[[46,1]]},"2749":{"position":[[852,1]]},"2782":{"position":[[124,1]]},"2829":{"position":[[10,1]]},"2862":{"position":[[32,1],[359,1]]},"2881":{"position":[[210,1]]},"2910":{"position":[[410,1]]},"2919":{"position":[[97,1]]},"3069":{"position":[[53,1]]},"3080":{"position":[[132,1]]},"3088":{"position":[[151,1]]},"3092":{"position":[[115,1]]},"3114":{"position":[[4,1]]},"3118":{"position":[[127,1],[166,1]]},"3122":{"position":[[2,1]]},"3124":{"position":[[34,1]]},"3138":{"position":[[22,1]]},"3142":{"position":[[246,1]]},"3144":{"position":[[19,1]]},"3156":{"position":[[23,1]]},"3282":{"position":[[126,1]]},"3284":{"position":[[91,1]]},"3287":{"position":[[67,1],[146,1],[471,1]]},"3337":{"position":[[7,1]]},"3352":{"position":[[36,1],[134,1],[192,1],[320,1]]},"3375":{"position":[[10,1]]},"3389":{"position":[[114,1]]},"3391":{"position":[[41,1]]},"3414":{"position":[[7,1]]},"3551":{"position":[[287,1],[511,1]]},"3553":{"position":[[266,1],[378,1]]},"3555":{"position":[[287,1],[417,1]]},"3557":{"position":[[289,1],[424,1]]},"3559":{"position":[[298,1],[448,1]]},"3575":{"position":[[379,1]]},"3579":{"position":[[39,1],[69,1]]},"3589":{"position":[[596,1]]},"3624":{"position":[[16,1]]},"3626":{"position":[[14,1],[104,1]]},"3636":{"position":[[764,1]]},"3638":{"position":[[33,1],[381,1]]},"3686":{"position":[[51,1]]},"3785":{"position":[[23,1]]},"3812":{"position":[[25,1]]},"3821":{"position":[[29,1]]},"3830":{"position":[[55,1],[121,1]]},"3844":{"position":[[885,1]]},"3926":{"position":[[125,1],[144,1],[298,1],[379,1],[666,1]]},"3928":{"position":[[16,1]]},"3930":{"position":[[52,1]]},"3980":{"position":[[146,1]]},"3982":{"position":[[278,1]]},"3992":{"position":[[4001,1]]},"4006":{"position":[[77,1]]}}}],["配合",{"_index":8123,"t":{"3432":{"position":[[701,2]]},"3610":{"position":[[17,2]]},"3612":{"position":[[86,2]]}}}],["配置",{"_index":131,"t":{"11":{"position":[[0,2]]},"15":{"position":[[286,2]]},"17":{"position":[[280,2]]},"19":{"position":[[743,2]]},"95":{"position":[[70,2]]},"123":{"position":[[0,2]]},"127":{"position":[[778,2],[785,2],[1351,2],[1365,2]]},"182":{"position":[[205,2]]},"184":{"position":[[20,2],[28,2]]},"202":{"position":[[54,2]]},"204":{"position":[[38,2],[78,2]]},"206":{"position":[[31,2],[49,2],[54,2],[249,2]]},"208":{"position":[[44,2]]},"212":{"position":[[17,2],[43,2]]},"216":{"position":[[462,2]]},"218":{"position":[[111,2]]},"220":{"position":[[20,2],[43,2],[66,2],[142,2],[269,2],[544,2],[851,2]]},"239":{"position":[[204,2],[221,2]]},"249":{"position":[[124,2]]},"251":{"position":[[61,2],[124,2],[174,2],[226,2]]},"288":{"position":[[341,2],[525,2],[689,2]]},"308":{"position":[[494,2]]},"314":{"position":[[498,2]]},"316":{"position":[[556,2]]},"325":{"position":[[93,2],[164,2]]},"327":{"position":[[125,2]]},"336":{"position":[[115,2],[262,2]]},"340":{"position":[[394,2],[1902,2]]},"353":{"position":[[76,2]]},"359":{"position":[[27,2],[48,2],[80,2],[100,2],[121,2],[332,2]]},"386":{"position":[[78,2],[93,2]]},"413":{"position":[[33,2],[94,2]]},"415":{"position":[[128,2],[258,2],[390,2]]},"417":{"position":[[114,2],[256,2],[335,2]]},"419":{"position":[[20,2]]},"423":{"position":[[278,2]]},"427":{"position":[[3,2],[80,2]]},"429":{"position":[[5,2],[34,2],[103,2]]},"431":{"position":[[60,2]]},"439":{"position":[[27,2],[121,2],[185,2]]},"441":{"position":[[17,2],[32,2],[93,2]]},"445":{"position":[[4,2],[40,2],[50,2],[63,2],[88,2],[118,2],[133,2],[165,2],[683,2],[697,2],[779,2],[789,2],[930,2]]},"449":{"position":[[28,2]]},"453":{"position":[[18,2]]},"455":{"position":[[265,2],[533,2],[720,2],[870,2],[966,2]]},"457":{"position":[[20,2],[67,2],[74,2]]},"459":{"position":[[10,2],[18,2]]},"461":{"position":[[23,2],[36,2],[46,2],[57,2],[71,2]]},"463":{"position":[[69,2]]},"465":{"position":[[35,2],[59,2]]},"484":{"position":[[32,2]]},"494":{"position":[[47,2]]},"498":{"position":[[5,2],[20,2],[59,2],[112,2]]},"504":{"position":[[133,2],[161,2],[206,2]]},"512":{"position":[[21,2],[36,2],[193,2]]},"514":{"position":[[308,2],[370,2],[467,2]]},"516":{"position":[[426,2],[529,2],[617,2],[651,2],[752,2]]},"518":{"position":[[548,2],[591,2],[606,2],[609,2],[621,2],[624,2],[645,2],[648,2]]},"524":{"position":[[6,2]]},"526":{"position":[[51,2],[66,2],[124,2],[250,2]]},"532":{"position":[[56,2],[106,2],[164,2],[232,2]]},"536":{"position":[[58,2]]},"544":{"position":[[146,2]]},"587":{"position":[[2191,2]]},"591":{"position":[[57,2]]},"593":{"position":[[68,2]]},"606":{"position":[[1354,2]]},"608":{"position":[[694,2],[704,2]]},"615":{"position":[[62,2]]},"617":{"position":[[1442,2]]},"653":{"position":[[65,2],[182,2]]},"688":{"position":[[54,2],[86,2]]},"698":{"position":[[23,2],[124,2],[198,2],[244,2],[263,2]]},"706":{"position":[[93,2],[228,2]]},"822":{"position":[[217,2]]},"846":{"position":[[7,2],[27,2],[151,2]]},"877":{"position":[[736,2]]},"889":{"position":[[305,2]]},"893":{"position":[[5,2],[20,2],[59,2],[112,2]]},"897":{"position":[[592,2]]},"899":{"position":[[1684,2],[1786,2]]},"915":{"position":[[67,2],[443,2]]},"939":{"position":[[41,2],[109,2]]},"941":{"position":[[41,2]]},"949":{"position":[[369,2],[435,2],[499,2],[558,2],[634,2]]},"1037":{"position":[[331,2],[545,2]]},"1066":{"position":[[106,2]]},"1075":{"position":[[62,2]]},"1131":{"position":[[39,2]]},"1145":{"position":[[264,2]]},"1147":{"position":[[155,2]]},"1151":{"position":[[233,2]]},"1277":{"position":[[10,2]]},"1279":{"position":[[855,2]]},"1286":{"position":[[121,2]]},"1289":{"position":[[9,2]]},"1309":{"position":[[756,2]]},"1313":{"position":[[15,2],[45,2],[142,2],[296,2],[357,2],[495,2],[596,2],[668,2],[700,2]]},"1317":{"position":[[308,2],[370,2],[420,2]]},"1319":{"position":[[93,2],[229,2]]},"1353":{"position":[[65,2],[149,2]]},"1364":{"position":[[112,2]]},"1374":{"position":[[101,2]]},"1416":{"position":[[39,2],[66,2],[79,2],[173,2],[330,2],[422,2],[511,2]]},"1418":{"position":[[58,2]]},"1420":{"position":[[50,2],[433,2],[471,2],[495,2],[537,2],[558,2],[644,2],[671,2],[761,2],[797,2],[831,2],[865,2],[874,2],[918,2]]},"1422":{"position":[[110,2],[136,2]]},"1474":{"position":[[130,2],[154,2],[213,2],[405,2]]},"1532":{"position":[[54,2]]},"1535":{"position":[[25,2],[438,2],[639,2]]},"1547":{"position":[[8,2],[210,2]]},"1576":{"position":[[121,2]]},"1580":{"position":[[286,2],[331,2],[352,2],[410,2],[445,2]]},"1582":{"position":[[70,2]]},"1589":{"position":[[171,2],[234,2],[253,2]]},"1592":{"position":[[129,2],[242,2],[288,2]]},"1594":{"position":[[137,2],[176,2],[303,2],[366,2],[388,2]]},"1596":{"position":[[241,2],[279,2]]},"1598":{"position":[[16,2],[36,2]]},"1600":{"position":[[32,2],[65,2]]},"1609":{"position":[[326,2],[345,2]]},"1611":{"position":[[52,2],[406,2],[805,2],[841,2]]},"1617":{"position":[[1126,2]]},"1625":{"position":[[51,2]]},"1627":{"position":[[237,2],[245,2]]},"1629":{"position":[[18,2]]},"1631":{"position":[[16,2],[348,2],[386,2],[434,2]]},"1635":{"position":[[46,2]]},"1639":{"position":[[21,2]]},"1641":{"position":[[325,2],[424,2],[455,2],[514,2]]},"1651":{"position":[[10,2]]},"1653":{"position":[[11,2]]},"1655":{"position":[[12,2],[32,2]]},"1657":{"position":[[7,2],[13,2],[32,2],[133,2]]},"1659":{"position":[[4,2],[10,2]]},"1661":{"position":[[26,2],[478,2],[573,2],[609,2]]},"1663":{"position":[[448,2]]},"1667":{"position":[[29,2]]},"1685":{"position":[[181,2],[262,2]]},"1707":{"position":[[41,2]]},"1709":{"position":[[28,2]]},"1735":{"position":[[35,2],[111,2]]},"1739":{"position":[[453,2]]},"1747":{"position":[[71,2]]},"1753":{"position":[[29,2],[265,2],[329,2]]},"1755":{"position":[[639,2],[822,2]]},"1759":{"position":[[23,2]]},"1777":{"position":[[24,2],[59,2],[73,2],[189,2],[198,2]]},"1779":{"position":[[353,2]]},"1781":{"position":[[415,2],[477,2],[483,2]]},"1783":{"position":[[59,2],[156,2]]},"1787":{"position":[[32,2]]},"1795":{"position":[[1287,2]]},"1801":{"position":[[1102,2]]},"1803":{"position":[[3024,2],[3069,2],[3296,2]]},"1819":{"position":[[590,2]]},"1841":{"position":[[98,2]]},"1855":{"position":[[17,2]]},"1869":{"position":[[22,2],[43,2],[579,2]]},"1871":{"position":[[37,2],[74,2]]},"1873":{"position":[[101,2]]},"1885":{"position":[[249,2]]},"1887":{"position":[[263,2]]},"1973":{"position":[[33,2]]},"1981":{"position":[[51,2],[88,2]]},"1987":{"position":[[33,2]]},"1993":{"position":[[51,2],[88,2]]},"2010":{"position":[[41,2]]},"2016":{"position":[[59,2],[96,2]]},"2023":{"position":[[175,2]]},"2096":{"position":[[74,2],[141,2],[150,2]]},"2132":{"position":[[5,2],[108,2],[216,2],[342,2]]},"2251":{"position":[[171,2],[316,2]]},"2285":{"position":[[31,2]]},"2294":{"position":[[0,2]]},"2298":{"position":[[210,2],[242,2]]},"2331":{"position":[[45,2]]},"2333":{"position":[[141,2],[555,2]]},"2343":{"position":[[295,2]]},"2345":{"position":[[695,2]]},"2352":{"position":[[203,2],[208,2],[214,2],[353,2]]},"2354":{"position":[[81,2],[115,2]]},"2357":{"position":[[1353,2]]},"2359":{"position":[[207,2],[509,2]]},"2361":{"position":[[414,2]]},"2365":{"position":[[188,2]]},"2367":{"position":[[194,2]]},"2369":{"position":[[214,2]]},"2371":{"position":[[221,2]]},"2373":{"position":[[205,2],[220,2],[229,2]]},"2383":{"position":[[316,2]]},"2393":{"position":[[155,2]]},"2402":{"position":[[55,2]]},"2404":{"position":[[35,2]]},"2438":{"position":[[234,2],[303,2]]},"2440":{"position":[[270,2],[337,2]]},"2442":{"position":[[1510,2]]},"2444":{"position":[[16,2],[271,2]]},"2495":{"position":[[72,2]]},"2497":{"position":[[38,2]]},"2519":{"position":[[291,2]]},"2522":{"position":[[24,2],[102,2],[141,2],[151,2]]},"2524":{"position":[[36,2],[45,2]]},"2528":{"position":[[5,2]]},"2534":{"position":[[49,2]]},"2536":{"position":[[166,2]]},"2549":{"position":[[20,2]]},"2553":{"position":[[24,2],[185,2],[225,2]]},"2613":{"position":[[11,2],[35,2]]},"2623":{"position":[[130,2],[168,2],[251,2],[278,2]]},"2625":{"position":[[56,2],[96,2],[230,2]]},"2627":{"position":[[136,2]]},"2653":{"position":[[21,2],[32,2]]},"2655":{"position":[[12,2]]},"2657":{"position":[[59,2]]},"2684":{"position":[[407,2]]},"2690":{"position":[[371,2]]},"2696":{"position":[[15,2],[73,2]]},"2701":{"position":[[24,2],[55,2],[63,2]]},"2703":{"position":[[7,2],[21,2],[32,2],[46,2],[57,2],[85,2],[102,2],[113,2],[125,2]]},"2705":{"position":[[60,2]]},"2711":{"position":[[5,2]]},"2713":{"position":[[319,2],[353,2]]},"2717":{"position":[[62,2],[263,2],[358,2]]},"2721":{"position":[[89,2],[542,2],[782,2]]},"2723":{"position":[[27,2],[70,2],[112,2],[148,2]]},"2725":{"position":[[6,2],[1510,2],[2127,2],[2642,2],[2660,2]]},"2727":{"position":[[4,2],[31,2],[49,2],[55,2],[887,2]]},"2733":{"position":[[6,2],[34,2],[47,2],[54,2]]},"2735":{"position":[[58,2],[398,2]]},"2745":{"position":[[228,2]]},"2747":{"position":[[263,2]]},"2751":{"position":[[21,2]]},"2758":{"position":[[22,2]]},"2819":{"position":[[568,2]]},"2848":{"position":[[1631,2]]},"2864":{"position":[[33,2]]},"2868":{"position":[[59,2],[126,2],[181,2]]},"2875":{"position":[[38,2],[49,2],[254,2],[407,2],[494,2],[505,2],[1054,2]]},"2879":{"position":[[72,2],[106,2]]},"2881":{"position":[[87,2],[95,2],[346,2]]},"2883":{"position":[[1,2]]},"2887":{"position":[[255,2]]},"2889":{"position":[[33,2],[74,2]]},"2897":{"position":[[161,2],[245,2],[373,2],[503,2],[576,2],[621,2]]},"2905":{"position":[[29,2]]},"2929":{"position":[[799,2]]},"2935":{"position":[[41,2]]},"2945":{"position":[[622,2],[848,2],[911,2]]},"2949":{"position":[[161,2]]},"2951":{"position":[[34,2]]},"2959":{"position":[[854,2]]},"2967":{"position":[[80,2]]},"2969":{"position":[[97,2]]},"2977":{"position":[[0,2],[14,2],[73,2]]},"2979":{"position":[[2,2],[19,2]]},"2981":{"position":[[12,2],[245,2],[421,2],[522,2]]},"2985":{"position":[[52,2],[93,2],[233,2],[343,2]]},"2987":{"position":[[0,2],[14,2],[73,2]]},"2989":{"position":[[2,2],[22,2]]},"2991":{"position":[[21,2],[134,2],[264,2],[396,2]]},"2995":{"position":[[108,2]]},"2997":{"position":[[0,2],[14,2],[73,2]]},"2999":{"position":[[4,2],[23,2]]},"3001":{"position":[[32,2],[56,2],[98,2],[119,2],[205,2],[232,2],[312,2],[338,2],[363,2],[387,2],[396,2],[430,2]]},"3005":{"position":[[0,2],[14,2],[73,2]]},"3007":{"position":[[4,2],[23,2]]},"3009":{"position":[[26,2]]},"3013":{"position":[[21,2]]},"3015":{"position":[[25,2],[43,2]]},"3019":{"position":[[0,2],[14,2],[73,2]]},"3021":{"position":[[7,2],[29,2]]},"3023":{"position":[[29,2],[475,2],[570,2],[606,2]]},"3027":{"position":[[0,2],[14,2],[73,2]]},"3029":{"position":[[3,2]]},"3031":{"position":[[24,2],[185,2],[225,2]]},"3033":{"position":[[72,2],[111,2],[121,2]]},"3035":{"position":[[0,2],[14,2],[73,2]]},"3037":{"position":[[4,2],[22,2]]},"3043":{"position":[[0,2],[14,2],[73,2]]},"3045":{"position":[[3,2],[8,2],[21,2]]},"3047":{"position":[[23,2],[50,2],[114,2]]},"3051":{"position":[[0,2],[14,2],[73,2]]},"3053":{"position":[[4,2],[32,2]]},"3055":{"position":[[30,2],[48,2]]},"3059":{"position":[[0,2],[14,2],[73,2]]},"3061":{"position":[[5,2],[31,2]]},"3063":{"position":[[30,2],[483,2],[564,2],[618,2],[763,2],[871,2],[1022,2],[1094,2],[1466,2],[1537,2],[1568,2],[1597,2],[1622,2],[1651,2],[1675,2],[1708,2]]},"3071":{"position":[[196,2],[483,2],[722,2],[1022,2],[1032,2],[1135,2],[1141,2],[1152,2],[1325,2]]},"3075":{"position":[[57,2]]},"3080":{"position":[[479,2]]},"3082":{"position":[[64,2]]},"3126":{"position":[[268,2]]},"3131":{"position":[[231,2]]},"3156":{"position":[[26,2],[63,2],[319,2],[350,2],[399,2]]},"3158":{"position":[[17,2],[363,2],[467,2],[478,2],[507,2],[616,2]]},"3211":{"position":[[108,2]]},"3215":{"position":[[459,2],[870,2]]},"3254":{"position":[[70,2],[285,2],[1178,2],[1230,2]]},"3267":{"position":[[473,2]]},"3269":{"position":[[2,2],[12,2]]},"3271":{"position":[[2,2],[12,2]]},"3287":{"position":[[683,2],[766,2],[864,2],[949,2],[1032,2]]},"3301":{"position":[[52,2]]},"3307":{"position":[[73,2],[80,2]]},"3321":{"position":[[347,2]]},"3337":{"position":[[85,2]]},"3339":{"position":[[144,2],[228,2],[262,2]]},"3343":{"position":[[5,2]]},"3371":{"position":[[121,2]]},"3389":{"position":[[527,2]]},"3393":{"position":[[54,2],[107,2],[172,2]]},"3399":{"position":[[637,2],[680,2],[905,2]]},"3401":{"position":[[32,2]]},"3430":{"position":[[1718,2],[1723,2],[1928,2]]},"3432":{"position":[[223,2],[250,2],[261,2],[272,2],[286,2],[368,2],[616,2],[767,2],[1001,2],[1087,2],[1107,2],[1165,2],[1174,2],[1278,2]]},"3434":{"position":[[434,2],[514,2],[627,2],[682,2],[691,2],[773,2],[846,2],[1021,2],[1151,2],[1171,2],[1325,2],[1334,2],[1459,2],[1602,2]]},"3436":{"position":[[188,2]]},"3438":{"position":[[51,2]]},"3442":{"position":[[59,2],[234,2]]},"3446":{"position":[[223,2],[233,2],[347,2],[405,2],[471,2]]},"3448":{"position":[[114,2],[177,2],[182,2],[264,2],[279,2],[517,2],[591,2],[658,2],[723,2],[802,2],[881,2],[1015,2],[1082,2],[1145,2],[1369,2]]},"3450":{"position":[[254,2]]},"3452":{"position":[[48,2],[764,2],[836,2]]},"3456":{"position":[[82,2],[100,2],[105,2],[360,2],[378,2],[383,2]]},"3466":{"position":[[73,2]]},"3498":{"position":[[2,2],[48,2],[379,2]]},"3500":{"position":[[102,2]]},"3506":{"position":[[70,2],[308,2],[448,2]]},"3526":{"position":[[8,2]]},"3528":{"position":[[20,2]]},"3541":{"position":[[557,2]]},"3543":{"position":[[2,2],[48,2],[466,2]]},"3547":{"position":[[70,2],[518,2],[705,2],[792,2]]},"3549":{"position":[[293,2]]},"3565":{"position":[[8,2]]},"3567":{"position":[[20,2]]},"3573":{"position":[[20,2],[33,2],[52,2]]},"3575":{"position":[[41,2],[105,2],[115,2],[365,2],[387,2]]},"3577":{"position":[[46,2],[149,2]]},"3579":{"position":[[288,2],[403,2]]},"3583":{"position":[[34,2]]},"3585":{"position":[[93,2]]},"3587":{"position":[[96,2],[266,2],[317,2]]},"3589":{"position":[[70,2],[251,2],[302,2],[647,2]]},"3591":{"position":[[41,2],[92,2],[170,2]]},"3622":{"position":[[62,2]]},"3628":{"position":[[29,2]]},"3632":{"position":[[39,2],[58,2],[140,2]]},"3634":{"position":[[30,2]]},"3636":{"position":[[82,2],[584,2]]},"3638":{"position":[[42,2]]},"3640":{"position":[[480,2],[722,2]]},"3642":{"position":[[32,2]]},"3644":{"position":[[4,2],[10,2]]},"3646":{"position":[[128,2]]},"3650":{"position":[[34,2],[41,2],[48,2],[60,2]]},"3658":{"position":[[27,2]]},"3660":{"position":[[32,2]]},"3662":{"position":[[44,2]]},"3666":{"position":[[16,2],[27,2]]},"3668":{"position":[[34,2]]},"3670":{"position":[[97,2]]},"3672":{"position":[[61,2]]},"3674":{"position":[[29,2]]},"3686":{"position":[[90,2],[317,2],[333,2],[609,2],[1028,2]]},"3690":{"position":[[51,2],[98,2]]},"3696":{"position":[[10,2]]},"3698":{"position":[[230,2]]},"3700":{"position":[[125,2]]},"3704":{"position":[[151,2],[291,2],[495,2],[534,2],[601,2]]},"3706":{"position":[[20,2],[475,2],[556,2],[610,2],[755,2],[863,2],[1014,2],[1086,2],[1477,2],[1548,2],[1579,2],[1608,2],[1633,2],[1662,2],[1686,2],[1719,2],[1742,2]]},"3712":{"position":[[24,2]]},"3718":{"position":[[115,2]]},"3754":{"position":[[248,2]]},"3762":{"position":[[447,2]]},"3774":{"position":[[247,2]]},"3779":{"position":[[1710,2]]},"3781":{"position":[[44,2]]},"3802":{"position":[[2481,2]]},"3808":{"position":[[14,2],[544,2],[2933,2]]},"3810":{"position":[[46,2]]},"3824":{"position":[[23,2],[49,2],[83,2],[101,2],[193,2]]},"3826":{"position":[[4,2],[57,2],[248,2]]},"3910":{"position":[[1478,2],[1482,2],[1519,2],[1607,2]]},"3912":{"position":[[2159,2],[2448,2],[2537,2]]},"3914":{"position":[[2102,2],[2113,2],[2181,2],[2284,2],[2407,2],[3391,2],[3399,2],[3548,2],[3555,2]]},"3916":{"position":[[712,2],[778,2],[867,2],[896,2],[929,2],[970,2],[979,2],[1077,2],[1288,2],[1366,2],[1838,2],[1870,2],[2038,2],[2137,2],[2836,2],[3235,2],[3760,2],[3832,2]]},"3918":{"position":[[767,2],[885,2],[1265,2],[3017,2],[3452,2],[3516,2],[3870,2],[4075,2]]},"3920":{"position":[[172,2],[630,2],[660,2],[737,2],[1170,2],[1717,2],[1913,2],[1961,2],[1977,2]]},"3922":{"position":[[125,2],[1350,2],[1916,2]]},"3924":{"position":[[286,2],[309,2],[348,2],[355,2],[403,2],[492,2],[1212,2],[1586,2],[1627,2],[2650,2],[2869,2],[3685,2],[3825,2],[4029,2],[4074,2],[4141,2]]},"3928":{"position":[[154,2]]},"3930":{"position":[[993,2],[1083,2],[1240,2],[1388,2]]},"3932":{"position":[[76,2],[198,2],[401,2],[496,2],[611,2],[1180,2],[1238,2],[1512,2],[1536,2]]},"3934":{"position":[[1049,2]]},"3936":{"position":[[283,2],[564,2],[652,2],[1557,2]]},"3938":{"position":[[260,2],[855,2],[902,2]]},"3940":{"position":[[407,2],[676,2],[905,2]]},"3942":{"position":[[66,2],[333,2]]},"3944":{"position":[[48,2],[297,2],[302,2],[394,2],[560,2],[782,2]]},"3946":{"position":[[292,2]]},"3948":{"position":[[334,2]]},"3950":{"position":[[89,2]]},"3952":{"position":[[94,2],[231,2],[270,2],[372,2]]},"3954":{"position":[[205,2]]},"3956":{"position":[[98,2],[120,2]]},"3958":{"position":[[58,2]]},"3960":{"position":[[144,2],[322,2],[509,2]]},"3962":{"position":[[141,2],[322,2],[1612,2],[2093,2]]},"3964":{"position":[[209,2],[928,2]]},"3966":{"position":[[177,2],[238,2],[442,2]]},"3968":{"position":[[782,2]]},"3970":{"position":[[77,2]]},"3972":{"position":[[159,2],[176,2],[466,2],[541,2],[576,2]]},"3974":{"position":[[211,2],[450,2],[454,2],[523,2],[724,2]]},"3976":{"position":[[49,2]]},"3978":{"position":[[102,2],[136,2],[208,2],[239,2],[244,2],[387,2]]},"3982":{"position":[[85,2]]},"3984":{"position":[[23,2],[417,2],[501,2],[695,2]]},"3986":{"position":[[105,2],[383,2],[560,2],[626,2],[716,2],[1065,2],[1165,2],[1255,2],[1765,2]]},"3988":{"position":[[92,2]]},"3990":{"position":[[733,2]]},"3992":{"position":[[64,2],[554,2],[579,2],[707,2],[933,2],[967,2],[2707,2],[3828,2]]},"3994":{"position":[[1601,2],[1664,2]]},"3996":{"position":[[185,2],[476,2],[503,2],[585,2],[1688,2]]},"3998":{"position":[[45,2],[391,2]]},"4000":{"position":[[329,2]]},"4004":{"position":[[51,2],[106,2],[145,2],[336,2]]},"4006":{"position":[[322,2],[758,2]]}}}],["配置文件",{"_index":1614,"t":{"220":{"position":[[210,4],[777,4],[814,4]]},"249":{"position":[[193,4]]},"429":{"position":[[123,4]]},"445":{"position":[[839,4],[860,4],[1024,4]]},"447":{"position":[[5,4],[41,4]]},"451":{"position":[[26,4],[290,4]]},"453":{"position":[[62,4],[356,4]]},"455":{"position":[[87,4],[117,4]]},"461":{"position":[[17,4]]},"516":{"position":[[489,4],[521,4]]},"688":{"position":[[98,4]]},"1286":{"position":[[138,4]]},"1291":{"position":[[5,4]]},"1488":{"position":[[931,4]]},"1495":{"position":[[875,4]]},"1739":{"position":[[231,4],[411,4]]},"1869":{"position":[[18,4]]},"2442":{"position":[[1500,4]]},"2499":{"position":[[65,4]]},"2542":{"position":[[162,4]]},"2613":{"position":[[75,4]]},"2701":{"position":[[35,4]]},"2719":{"position":[[13,4],[41,4]]},"2723":{"position":[[43,4]]},"2729":{"position":[[55,4]]},"2875":{"position":[[501,4]]},"2985":{"position":[[85,4]]},"3432":{"position":[[217,4],[275,4]]},"3434":{"position":[[638,4]]},"3442":{"position":[[190,4]]},"3632":{"position":[[136,4],[210,4]]},"3640":{"position":[[476,4],[749,4]]},"3779":{"position":[[552,4]]},"3802":{"position":[[608,4]]},"3817":{"position":[[507,4]]},"3912":{"position":[[2696,4]]},"3918":{"position":[[3454,4]]},"3930":{"position":[[1012,4]]},"3954":{"position":[[170,4]]},"3962":{"position":[[1588,4],[1750,4]]},"3984":{"position":[[539,4]]},"3992":{"position":[[3665,4]]},"3994":{"position":[[1118,4]]},"3998":{"position":[[338,4]]}}}],["配置管理",{"_index":5717,"t":{"1839":{"position":[[85,4]]}}}],["醉酒",{"_index":4714,"t":{"1511":{"position":[[1654,2]]}}}],["采取",{"_index":5695,"t":{"1823":{"position":[[61,2]]},"3620":{"position":[[93,2]]}}}],["采用",{"_index":294,"t":{"19":{"position":[[376,2]]},"95":{"position":[[114,2]]},"104":{"position":[[9,2]]},"129":{"position":[[599,2]]},"135":{"position":[[13,2]]},"300":{"position":[[77,2],[231,2]]},"373":{"position":[[169,2]]},"399":{"position":[[521,2]]},"427":{"position":[[138,2]]},"441":{"position":[[19,2]]},"445":{"position":[[690,2]]},"467":{"position":[[23,2]]},"502":{"position":[[171,2]]},"534":{"position":[[80,2],[114,2]]},"685":{"position":[[48,2]]},"855":{"position":[[104,2]]},"857":{"position":[[100,2]]},"1026":{"position":[[159,2]]},"1155":{"position":[[133,2],[145,2],[157,2]]},"1269":{"position":[[204,2]]},"1275":{"position":[[43,2]]},"1309":{"position":[[97,2]]},"1368":{"position":[[24,2]]},"1383":{"position":[[89,2],[267,2]]},"1389":{"position":[[203,2]]},"1424":{"position":[[71,2],[1770,2]]},"1507":{"position":[[14,2]]},"1516":{"position":[[140,2],[204,2]]},"1566":{"position":[[66,2]]},"1621":{"position":[[916,2]]},"1641":{"position":[[355,2]]},"1661":{"position":[[519,2]]},"1695":{"position":[[30,2]]},"1699":{"position":[[65,2]]},"1709":{"position":[[12,2]]},"1735":{"position":[[4,2]]},"1741":{"position":[[535,2],[1294,2],[2130,2]]},"1761":{"position":[[40,2]]},"1775":{"position":[[3850,2]]},"1791":{"position":[[31,2]]},"1799":{"position":[[9,2]]},"1961":{"position":[[64,2]]},"2298":{"position":[[12,2]]},"2307":{"position":[[61,2],[95,2]]},"2309":{"position":[[22,2]]},"2335":{"position":[[90,2]]},"2341":{"position":[[93,2]]},"2345":{"position":[[57,2]]},"2359":{"position":[[405,2]]},"2385":{"position":[[12,2]]},"2391":{"position":[[30,2],[183,2]]},"2490":{"position":[[69,2]]},"2627":{"position":[[109,2]]},"2713":{"position":[[647,2]]},"2774":{"position":[[9,2],[410,2]]},"2788":{"position":[[40,2]]},"2798":{"position":[[136,2]]},"2829":{"position":[[12,2]]},"2910":{"position":[[443,2]]},"2943":{"position":[[452,2]]},"3023":{"position":[[516,2]]},"3063":{"position":[[183,2]]},"3108":{"position":[[2,2]]},"3114":{"position":[[21,2]]},"3124":{"position":[[0,2]]},"3131":{"position":[[17,2]]},"3189":{"position":[[76,2]]},"3506":{"position":[[12,2]]},"3547":{"position":[[12,2]]},"3616":{"position":[[26,2]]},"3640":{"position":[[758,2]]},"3660":{"position":[[16,2]]},"3702":{"position":[[2013,2]]},"3706":{"position":[[175,2]]},"3718":{"position":[[111,2]]},"3758":{"position":[[82,2]]},"3768":{"position":[[8,2]]},"3914":{"position":[[2107,2]]},"3918":{"position":[[1498,2]]},"3934":{"position":[[3079,2]]},"3942":{"position":[[141,2]]},"3946":{"position":[[23,2]]},"3948":{"position":[[31,2],[122,2]]},"3962":{"position":[[1506,2]]},"3984":{"position":[[550,2]]},"3994":{"position":[[724,2]]}}}],["采集",{"_index":5694,"t":{"1823":{"position":[[25,2]]}}}],["释放",{"_index":3777,"t":{"929":{"position":[[1996,2]]},"1399":{"position":[[62,2]]},"1401":{"position":[[43,2]]},"1432":{"position":[[81,2]]},"1711":{"position":[[355,2]]},"1801":{"position":[[3077,2]]},"1803":{"position":[[2032,2],[2136,2],[5049,2]]},"1823":{"position":[[647,2]]},"2061":{"position":[[52,2]]},"2587":{"position":[[503,2]]},"2899":{"position":[[548,2]]},"3273":{"position":[[731,2]]},"3387":{"position":[[13,2],[21,2],[249,2]]},"3389":{"position":[[380,2]]},"3391":{"position":[[272,2]]},"3393":{"position":[[413,2]]},"3434":{"position":[[244,2]]},"3452":{"position":[[617,2]]},"3916":{"position":[[3613,2]]},"3922":{"position":[[2089,2],[2113,2]]},"3950":{"position":[[610,2]]},"3964":{"position":[[26,2],[601,2]]},"3978":{"position":[[770,2]]},"4004":{"position":[[356,2],[444,2]]}}}],["里",{"_index":321,"t":{"19":{"position":[[825,1]]},"960":{"position":[[154,1],[688,1]]},"1511":{"position":[[852,1],[3048,1],[4209,1]]},"3350":{"position":[[104,1]]},"3962":{"position":[[1844,1]]},"3964":{"position":[[1019,1]]},"3966":{"position":[[1853,1]]},"3992":{"position":[[3157,1]]}}}],["里面",{"_index":1135,"t":{"152":{"position":[[53,2],[653,2]]},"308":{"position":[[133,2]]},"310":{"position":[[131,2]]},"492":{"position":[[562,2]]},"1392":{"position":[[206,2]]},"1755":{"position":[[637,2]]},"2482":{"position":[[462,2]]},"2484":{"position":[[562,2]]},"2825":{"position":[[462,2]]},"2827":{"position":[[608,2]]},"2933":{"position":[[659,2]]},"2949":{"position":[[523,2]]},"2963":{"position":[[528,2]]},"3986":{"position":[[1184,2]]}}}],["重写",{"_index":1082,"t":{"135":{"position":[[50,2]]},"146":{"position":[[370,2]]},"512":{"position":[[136,2]]},"534":{"position":[[167,2]]},"567":{"position":[[36,2]]},"570":{"position":[[23,2],[522,2]]},"924":{"position":[[188,2]]},"933":{"position":[[36,2]]},"1587":{"position":[[103,2]]},"1903":{"position":[[632,2],[640,2]]},"1905":{"position":[[135,2]]},"2937":{"position":[[107,2]]},"2943":{"position":[[516,2]]},"2951":{"position":[[14,2]]},"3579":{"position":[[278,2]]},"3806":{"position":[[70,2],[2678,2],[2733,2],[3198,2],[3234,2]]},"3918":{"position":[[3723,2]]},"3944":{"position":[[529,2]]},"3954":{"position":[[648,2]]},"3992":{"position":[[1857,2]]}}}],["重名",{"_index":2581,"t":{"445":{"position":[[847,2]]}}}],["重启",{"_index":1763,"t":{"239":{"position":[[181,2]]},"675":{"position":[[303,2]]},"1465":{"position":[[2,2]]},"2506":{"position":[[0,2]]},"2764":{"position":[[3,2]]},"2836":{"position":[[1275,2]]},"3082":{"position":[[216,2]]}}}],["重塑",{"_index":7746,"t":{"3242":{"position":[[244,2],[254,2]]},"3910":{"position":[[241,2],[251,2]]},"3934":{"position":[[2422,2],[2434,2]]}}}],["重复",{"_index":100,"t":{"5":{"position":[[127,2]]},"7":{"position":[[123,2]]},"19":{"position":[[373,2]]},"186":{"position":[[74,2]]},"361":{"position":[[17,2],[40,2]]},"457":{"position":[[28,2]]},"717":{"position":[[8,2]]},"1379":{"position":[[684,2]]},"1440":{"position":[[530,2]]},"1741":{"position":[[532,2],[1291,2],[2127,2]]},"1761":{"position":[[261,2],[461,2]]},"1865":{"position":[[477,2]]},"2255":{"position":[[55,2],[130,2]]},"2290":{"position":[[123,2]]},"2326":{"position":[[11,2]]},"2751":{"position":[[43,2]]},"2889":{"position":[[157,2]]},"3352":{"position":[[387,2],[450,2]]},"3688":{"position":[[67,2]]},"3912":{"position":[[1259,2]]},"3914":{"position":[[1088,2]]},"3952":{"position":[[641,2]]},"3954":{"position":[[482,2]]},"3962":{"position":[[1289,2]]},"3976":{"position":[[458,2]]},"3982":{"position":[[430,2]]},"3992":{"position":[[216,2]]},"3994":{"position":[[1161,2]]}}}],["重复性",{"_index":1258,"t":{"182":{"position":[[8,3]]}}}],["重大",{"_index":334,"t":{"21":{"position":[[12,2]]}}}],["重定向",{"_index":4325,"t":{"1430":{"position":[[58,3]]},"3974":{"position":[[774,3]]}}}],["重新",{"_index":2125,"t":{"323":{"position":[[43,2]]},"570":{"position":[[771,2]]},"1139":{"position":[[25,2]]},"1286":{"position":[[45,2]]},"1420":{"position":[[32,2]]},"1472":{"position":[[49,2]]},"1488":{"position":[[1264,2]]},"1547":{"position":[[301,2]]},"1549":{"position":[[390,2]]},"1551":{"position":[[52,2]]},"1759":{"position":[[28,2]]},"2503":{"position":[[122,2]]},"2657":{"position":[[69,2]]},"2717":{"position":[[128,2]]},"3242":{"position":[[239,2]]},"3352":{"position":[[598,2]]},"3684":{"position":[[35,2]]},"3740":{"position":[[447,2],[722,2],[729,2]]},"3910":{"position":[[236,2]]},"3914":{"position":[[1655,2]]},"3926":{"position":[[600,2],[676,2]]},"3934":{"position":[[2417,2]]}}}],["重新安装",{"_index":7918,"t":{"3325":{"position":[[3,4]]}}}],["重新配置",{"_index":1538,"t":{"206":{"position":[[152,4]]},"216":{"position":[[1253,4]]},"220":{"position":[[112,4]]},"3636":{"position":[[729,4]]}}}],["重构",{"_index":7754,"t":{"3244":{"position":[[25,2]]},"3246":{"position":[[26,2],[31,2],[63,2],[80,2],[94,2],[108,2]]},"3352":{"position":[[261,2],[294,2]]},"3908":{"position":[[227,2]]},"3914":{"position":[[1590,2]]},"3928":{"position":[[286,2]]},"3952":{"position":[[460,2]]}}}],["重点",{"_index":2404,"t":{"399":{"position":[[687,2]]},"2912":{"position":[[179,2],[193,2]]},"3908":{"position":[[20,2]]}}}],["重用",{"_index":8364,"t":{"3579":{"position":[[210,2]]}}}],["重置",{"_index":1786,"t":{"243":{"position":[[169,2]]},"1277":{"position":[[187,2]]},"3684":{"position":[[27,2]]}}}],["重要",{"_index":1326,"t":{"186":{"position":[[161,2]]},"204":{"position":[[13,2]]},"1103":{"position":[[129,2]]},"1221":{"position":[[30,2]]},"1358":{"position":[[9,2]]},"1424":{"position":[[92,2]]},"1509":{"position":[[98,2]]},"1761":{"position":[[12,2]]},"2077":{"position":[[0,2]]},"2674":{"position":[[462,2]]},"3920":{"position":[[365,2]]},"3928":{"position":[[28,2]]}}}],["重试",{"_index":5496,"t":{"1795":{"position":[[1285,2],[1428,2],[1546,2]]},"1809":{"position":[[68,2],[310,2]]},"1819":{"position":[[406,2],[709,2]]},"1839":{"position":[[98,2]]},"2315":{"position":[[291,2]]},"3528":{"position":[[22,2],[117,2]]},"3567":{"position":[[22,2],[239,2]]},"3798":{"position":[[572,2],[599,2]]},"3808":{"position":[[3142,2],[3173,2]]},"3810":{"position":[[904,2],[940,2]]},"3832":{"position":[[58,2],[253,2],[261,2]]},"3914":{"position":[[887,2]]},"3922":{"position":[[123,2]]},"3952":{"position":[[100,2]]},"3954":{"position":[[322,2]]},"3972":{"position":[[133,2]]}}}],["重载",{"_index":3258,"t":{"647":{"position":[[196,2],[257,2]]},"1279":{"position":[[440,2],[875,2]]},"1817":{"position":[[102,2]]},"2023":{"position":[[170,2]]},"2160":{"position":[[60,2]]},"2333":{"position":[[548,2]]},"2717":{"position":[[261,2]]},"2764":{"position":[[32,2]]},"2897":{"position":[[62,2]]},"3082":{"position":[[245,2]]},"3496":{"position":[[246,2]]},"3781":{"position":[[270,2],[306,2],[348,2],[559,2],[650,2]]},"3810":{"position":[[250,2],[301,2],[358,2],[395,2],[428,2]]},"3912":{"position":[[895,2]]},"3918":{"position":[[1258,2]]},"3922":{"position":[[204,2]]},"3936":{"position":[[147,2]]},"3974":{"position":[[72,2]]}}}],["量",{"_index":2407,"t":{"399":{"position":[[737,1]]},"401":{"position":[[302,1],[430,1]]},"2326":{"position":[[274,1]]},"3104":{"position":[[100,1]]},"3209":{"position":[[64,1]]},"3250":{"position":[[63,1]]},"3416":{"position":[[165,1]]},"3446":{"position":[[371,1]]},"3448":{"position":[[675,1],[1099,1]]},"3966":{"position":[[1431,1]]}}}],["量级",{"_index":5437,"t":{"1761":{"position":[[164,2]]}}}],["量过大",{"_index":7404,"t":{"3096":{"position":[[154,3]]},"3104":{"position":[[10,3]]}}}],["金",{"_index":7602,"t":{"3211":{"position":[[181,1]]}}}],["金钱",{"_index":3137,"t":{"606":{"position":[[98,2]]}}}],["金额",{"_index":4573,"t":{"1511":{"position":[[204,2]]}}}],["鉴",{"_index":834,"t":{"119":{"position":[[0,1]]},"121":{"position":[[428,1],[465,1]]},"131":{"position":[[21,1]]},"154":{"position":[[35,1]]},"3998":{"position":[[808,1]]},"4000":{"position":[[1220,1]]}}}],["针对",{"_index":1075,"t":{"135":{"position":[[6,2]]},"218":{"position":[[266,2]]},"329":{"position":[[47,2]]},"404":{"position":[[177,2]]},"844":{"position":[[8,2]]},"986":{"position":[[88,2]]},"1401":{"position":[[8,2]]},"1580":{"position":[[0,2]]},"1901":{"position":[[23,2],[494,2]]},"1947":{"position":[[60,2]]},"2247":{"position":[[25,2]]},"2375":{"position":[[88,2],[149,2]]},"2383":{"position":[[5,2]]},"2517":{"position":[[70,2]]},"3341":{"position":[[8,2]]},"3716":{"position":[[46,2]]},"3791":{"position":[[1326,2]]},"3912":{"position":[[739,2]]},"3924":{"position":[[1272,2]]},"3958":{"position":[[327,2]]}}}],["钉",{"_index":4683,"t":{"1511":{"position":[[1298,1],[1299,1]]},"2768":{"position":[[59,1]]}}}],["钥",{"_index":5263,"t":{"1687":{"position":[[92,1],[95,1]]},"1689":{"position":[[704,1],[707,1]]}}}],["钱",{"_index":4853,"t":{"1511":{"position":[[3478,1],[3610,1]]}}}],["铁杆",{"_index":4882,"t":{"1511":{"position":[[3929,2]]}}}],["铭",{"_index":4814,"t":{"1511":{"position":[[2857,1]]}}}],["银幕",{"_index":9395,"t":{"3926":{"position":[[242,2]]}}}],["银行",{"_index":7237,"t":{"2915":{"position":[[194,2]]}}}],["链",{"_index":4170,"t":{"1379":{"position":[[42,1]]}}}],["链式",{"_index":6080,"t":{"2272":{"position":[[420,2]]},"3783":{"position":[[1439,2],[1533,2],[1647,2]]},"3819":{"position":[[450,2],[729,2],[1074,2]]}}}],["链接",{"_index":2212,"t":{"340":{"position":[[91,2]]},"359":{"position":[[84,2]]},"367":{"position":[[218,2]]},"369":{"position":[[289,2]]},"915":{"position":[[449,2]]},"1483":{"position":[[808,2]]},"1745":{"position":[[71,2]]},"2949":{"position":[[424,2]]},"2951":{"position":[[586,2]]},"3063":{"position":[[1655,2]]},"3126":{"position":[[244,2]]},"3189":{"position":[[19,2]]},"3213":{"position":[[4,2]]},"3254":{"position":[[440,2],[815,2]]},"3321":{"position":[[295,2]]},"3401":{"position":[[196,2]]},"3696":{"position":[[48,2],[174,2]]},"3706":{"position":[[1666,2]]},"3932":{"position":[[1155,2]]}}}],["链路",{"_index":8452,"t":{"3624":{"position":[[123,2]]}}}],["销售",{"_index":7518,"t":{"3142":{"position":[[171,2]]}}}],["销毁",{"_index":4327,"t":{"1432":{"position":[[137,2],[152,2]]},"2400":{"position":[[182,2]]},"2843":{"position":[[201,2]]},"2852":{"position":[[51,2]]},"3791":{"position":[[1365,2]]},"3914":{"position":[[3353,2]]}}}],["锁",{"_index":3904,"t":{"1048":{"position":[[65,1]]},"3924":{"position":[[1194,1],[1199,1]]},"3992":{"position":[[188,1]]}}}],["锅巴",{"_index":4654,"t":{"1511":{"position":[[962,2]]}}}],["锋",{"_index":4778,"t":{"1511":{"position":[[2406,1]]}}}],["错",{"_index":1174,"t":{"162":{"position":[[10,1]]},"2868":{"position":[[48,1]]},"3434":{"position":[[410,1]]},"3992":{"position":[[3748,1]]}}}],["错误",{"_index":1317,"t":{"186":{"position":[[111,2]]},"300":{"position":[[307,2]]},"363":{"position":[[10,2]]},"401":{"position":[[96,2]]},"419":{"position":[[346,2],[373,2]]},"498":{"position":[[121,2]]},"587":{"position":[[2005,2]]},"617":{"position":[[2764,2]]},"734":{"position":[[88,2]]},"893":{"position":[[121,2]]},"899":{"position":[[1777,2]]},"1511":{"position":[[2126,2]]},"1555":{"position":[[526,2]]},"1863":{"position":[[274,2]]},"1885":{"position":[[92,2]]},"1887":{"position":[[64,2]]},"1933":{"position":[[649,2]]},"2201":{"position":[[22,2]]},"2472":{"position":[[385,2]]},"2508":{"position":[[50,2]]},"2745":{"position":[[306,2]]},"2889":{"position":[[161,2]]},"3009":{"position":[[124,2]]},"3015":{"position":[[56,2],[62,2]]},"3224":{"position":[[370,2]]},"3287":{"position":[[134,2],[459,2],[3089,2]]},"3305":{"position":[[21,2],[50,2]]},"3337":{"position":[[67,2]]},"3352":{"position":[[4,2],[34,2]]},"3412":{"position":[[69,2]]},"3414":{"position":[[61,2],[139,2],[219,2]]},"3416":{"position":[[282,2],[295,2],[317,2]]},"3585":{"position":[[85,2]]},"3674":{"position":[[15,2]]},"3696":{"position":[[7,2],[39,2],[162,2],[190,2]]},"3702":{"position":[[1460,2]]},"3800":{"position":[[183,2],[192,2],[240,2],[249,2]]},"3842":{"position":[[201,2],[792,2],[1379,2],[1961,2],[2583,2],[3208,2]]},"3844":{"position":[[204,2]]},"3846":{"position":[[211,2],[451,2]]},"3882":{"position":[[171,2]]},"3886":{"position":[[171,2]]},"3888":{"position":[[196,2]]},"3892":{"position":[[136,2]]},"3912":{"position":[[2191,2]]},"3914":{"position":[[2992,2]]},"3916":{"position":[[1682,2]]},"3918":{"position":[[763,2],[3269,2],[3511,2]]},"3922":{"position":[[1629,2]]},"3924":{"position":[[1155,2],[1500,2],[1558,2],[1757,2],[1849,2]]},"3932":{"position":[[1116,2],[1195,2]]},"3934":{"position":[[165,2],[621,2],[1355,2]]},"3940":{"position":[[383,2]]},"3950":{"position":[[578,2]]},"3954":{"position":[[540,2]]},"3958":{"position":[[97,2]]},"3962":{"position":[[1382,2],[2057,2]]},"3966":{"position":[[1286,2]]},"3968":{"position":[[277,2],[559,2]]},"3976":{"position":[[568,2]]},"3978":{"position":[[929,2],[1093,2]]},"3984":{"position":[[184,2]]},"3986":{"position":[[532,2],[1411,2]]},"3990":{"position":[[411,2]]},"3992":{"position":[[1830,2],[3610,2]]},"3996":{"position":[[1479,2],[1507,2]]}}}],["错误代码",{"_index":5767,"t":{"1887":{"position":[[437,4],[476,4]]}}}],["错误信息",{"_index":8574,"t":{"3708":{"position":[[354,4]]},"3984":{"position":[[914,4]]}}}],["错误处理",{"_index":5773,"t":{"1894":{"position":[[12,4]]},"3914":{"position":[[3050,4]]},"3952":{"position":[[513,4]]}}}],["错误报告",{"_index":2342,"t":{"378":{"position":[[121,4]]}}}],["错误码",{"_index":5725,"t":{"1851":{"position":[[629,3],[678,3],[854,3],[903,3]]},"1863":{"position":[[194,3]]},"1869":{"position":[[280,3]]},"1885":{"position":[[16,3],[56,3]]},"3009":{"position":[[48,3],[88,3]]},"3015":{"position":[[47,3]]},"3988":{"position":[[233,3]]}}}],["锦",{"_index":4670,"t":{"1511":{"position":[[1148,1]]}}}],["键",{"_index":1133,"t":{"150":{"position":[[57,1]]},"243":{"position":[[59,1],[108,1],[212,1]]},"288":{"position":[[271,1],[313,1],[542,1]]},"508":{"position":[[145,1]]},"510":{"position":[[145,1]]},"851":{"position":[[1043,1],[1518,1]]},"949":{"position":[[496,1]]},"954":{"position":[[355,1],[365,1]]},"1149":{"position":[[18,1]]},"1763":{"position":[[63,1],[200,1]]},"1765":{"position":[[38,1]]},"1801":{"position":[[777,1],[935,1]]},"2033":{"position":[[85,1]]},"2721":{"position":[[174,1],[361,1],[555,1],[795,1]]},"2723":{"position":[[49,1],[56,1]]},"3522":{"position":[[294,1],[438,1],[458,1],[631,1],[810,1],[835,1]]},"3563":{"position":[[357,1],[561,1],[596,1]]},"3783":{"position":[[1446,1]]},"3984":{"position":[[868,1]]}}}],["键值",{"_index":6412,"t":{"2542":{"position":[[96,2]]},"2719":{"position":[[19,2],[47,2]]}}}],["键入",{"_index":3340,"t":{"685":{"position":[[459,2]]},"696":{"position":[[473,2]]}}}],["键刷新",{"_index":1785,"t":{"243":{"position":[[160,3]]}}}],["键名",{"_index":744,"t":{"112":{"position":[[1144,2]]},"249":{"position":[[270,2]]},"1925":{"position":[[1006,2]]}}}],["镜像",{"_index":4146,"t":{"1374":{"position":[[41,2],[64,2],[136,2]]},"1377":{"position":[[295,2],[403,2],[499,2],[543,2]]},"1481":{"position":[[111,2]]},"1483":{"position":[[36,2],[67,2],[678,2],[1098,2]]},"1488":{"position":[[1268,2]]}}}],["长",{"_index":4924,"t":{"1520":{"position":[[225,1],[229,1]]},"1524":{"position":[[10,1],[38,1],[78,1]]},"1526":{"position":[[51,1]]},"1528":{"position":[[27,1]]},"1539":{"position":[[1694,1]]},"3094":{"position":[[96,1]]},"3352":{"position":[[307,1]]},"3791":{"position":[[1374,1]]},"3930":{"position":[[1218,1]]}}}],["长久",{"_index":582,"t":{"95":{"position":[[126,2]]}}}],["长度",{"_index":979,"t":{"127":{"position":[[919,2]]},"587":{"position":[[251,2],[332,2],[463,2],[939,2]]},"597":{"position":[[268,2]]},"599":{"position":[[298,2]]},"615":{"position":[[440,2]]},"1125":{"position":[[152,2]]},"1131":{"position":[[153,2]]},"1185":{"position":[[78,2]]},"1635":{"position":[[422,2],[486,2],[538,2]]},"1681":{"position":[[60,2]]},"1685":{"position":[[442,2]]},"2333":{"position":[[283,2],[293,2],[298,2]]},"3039":{"position":[[102,2]]},"3041":{"position":[[130,2]]}}}],["长时间",{"_index":3938,"t":{"1071":{"position":[[103,3]]},"1474":{"position":[[140,3]]},"2309":{"position":[[68,3]]},"2315":{"position":[[19,3],[146,3]]},"2803":{"position":[[44,3],[102,3]]}}}],["长期",{"_index":1261,"t":{"182":{"position":[[38,2]]},"184":{"position":[[73,2]]},"1474":{"position":[[101,2]]},"3416":{"position":[[226,2]]}}}],["长短",{"_index":7202,"t":{"2910":{"position":[[273,2]]}}}],["长胡子",{"_index":4712,"t":{"1511":{"position":[[1631,3]]}}}],["门槛",{"_index":8063,"t":{"3414":{"position":[[268,2]]}}}],["问",{"_index":4752,"t":{"1511":{"position":[[2128,1],[2573,1]]},"2770":{"position":[[67,1]]}}}],["问答",{"_index":9766,"t":{"3962":{"position":[[1763,2]]},"3964":{"position":[[649,2]]},"3966":{"position":[[1314,2]]},"3968":{"position":[[441,2]]},"3970":{"position":[[397,2]]},"3972":{"position":[[591,2]]},"3974":{"position":[[620,2]]},"3976":{"position":[[604,2]]},"3978":{"position":[[1358,2]]},"3980":{"position":[[604,2]]},"3982":{"position":[[680,2]]},"3984":{"position":[[789,2]]},"3986":{"position":[[1017,2]]},"3988":{"position":[[496,2]]},"3992":{"position":[[2827,2]]},"3994":{"position":[[1614,2]]},"3996":{"position":[[1542,2]]}}}],["问题",{"_index":183,"t":{"11":{"position":[[813,2]]},"85":{"position":[[172,2]]},"179":{"position":[[160,2]]},"186":{"position":[[129,2]]},"245":{"position":[[162,2]]},"300":{"position":[[193,2]]},"308":{"position":[[385,2]]},"310":{"position":[[242,2]]},"329":{"position":[[127,2]]},"336":{"position":[[236,2],[409,2]]},"338":{"position":[[1151,2],[1278,2]]},"361":{"position":[[21,2],[46,2]]},"363":{"position":[[48,2],[78,2]]},"378":{"position":[[23,2],[97,2],[112,2]]},"380":{"position":[[7,2]]},"382":{"position":[[26,2],[42,2]]},"404":{"position":[[58,2]]},"423":{"position":[[254,2]]},"427":{"position":[[119,2]]},"528":{"position":[[190,2]]},"719":{"position":[[24,2]]},"773":{"position":[[10,2]]},"1050":{"position":[[69,2]]},"1200":{"position":[[223,2],[241,2]]},"1277":{"position":[[243,2]]},"1279":{"position":[[442,2]]},"1383":{"position":[[55,2]]},"1389":{"position":[[121,2]]},"1468":{"position":[[82,2]]},"1470":{"position":[[43,2]]},"1474":{"position":[[464,2]]},"1672":{"position":[[41,2]]},"1761":{"position":[[186,2],[481,2]]},"1801":{"position":[[2667,2]]},"1803":{"position":[[4639,2]]},"1825":{"position":[[64,2]]},"1832":{"position":[[40,2],[47,2]]},"2100":{"position":[[22,2]]},"2251":{"position":[[137,2]]},"2294":{"position":[[861,2]]},"2343":{"position":[[233,2],[304,2]]},"2361":{"position":[[398,2]]},"2363":{"position":[[211,2]]},"2379":{"position":[[53,2]]},"2383":{"position":[[145,2]]},"2490":{"position":[[51,2]]},"2555":{"position":[[82,2]]},"2587":{"position":[[505,2]]},"2684":{"position":[[300,2]]},"2731":{"position":[[99,2]]},"2770":{"position":[[94,2],[103,2]]},"3069":{"position":[[288,2]]},"3071":{"position":[[311,2],[1007,2],[1240,2]]},"3078":{"position":[[86,2]]},"3080":{"position":[[6,2],[74,2]]},"3096":{"position":[[158,2]]},"3108":{"position":[[132,2]]},"3110":{"position":[[180,2]]},"3114":{"position":[[34,2]]},"3118":{"position":[[52,2],[87,2],[196,2]]},"3120":{"position":[[36,2]]},"3154":{"position":[[729,2]]},"3331":{"position":[[172,2]]},"3339":{"position":[[251,2],[299,2]]},"3352":{"position":[[51,2],[250,2]]},"3412":{"position":[[37,2]]},"3414":{"position":[[181,2],[186,2],[191,2]]},"3470":{"position":[[83,2],[151,2]]},"3522":{"position":[[891,2]]},"3585":{"position":[[98,2]]},"3686":{"position":[[68,2]]},"3910":{"position":[[2276,2],[2364,2],[2431,2],[2495,2]]},"3912":{"position":[[1610,2],[1870,2],[1915,2],[1987,2],[2060,2],[2126,2],[2411,2],[2566,2]]},"3914":{"position":[[1091,2],[2372,2],[2463,2],[2500,2],[2557,2],[2680,2],[2732,2],[2788,2],[2880,2],[2937,2],[3061,2],[3311,2],[3466,2]]},"3916":{"position":[[1914,2],[2001,2],[2054,2],[2102,2],[2246,2],[2315,2],[2406,2],[2451,2]]},"3918":{"position":[[3204,2],[3231,2],[3320,2],[3345,2],[3463,2],[3494,2],[3518,2],[3587,2],[3642,2],[3703,2],[3751,2],[3798,2],[3840,2],[3845,2],[3884,2]]},"3920":{"position":[[510,2],[1612,2],[1647,2]]},"3922":{"position":[[1289,2],[1311,2],[1366,2],[1403,2],[1440,2],[1504,2],[1586,2],[1633,2],[1669,2],[1704,2],[1739,2],[1786,2],[1838,2],[1882,2],[1918,2],[1990,2],[2028,2],[2042,2],[2067,2],[2117,2],[2155,2],[2193,2],[2285,2]]},"3924":{"position":[[520,2],[1108,2],[1157,2],[1186,2],[1241,2],[1290,2],[1330,2],[1382,2],[1421,2],[1469,2],[1502,2],[1711,2],[1759,2],[1810,2],[1851,2],[1890,2]]},"3928":{"position":[[568,2],[646,2],[672,2]]},"3930":{"position":[[767,2],[817,2],[855,2],[959,2],[1016,2],[1048,2],[1094,2],[1141,2],[1196,2],[1224,2],[1263,2],[1327,2],[1356,2]]},"3932":{"position":[[786,2],[1070,2],[1118,2],[1160,2],[1197,2],[1257,2],[1294,2],[1327,2],[1352,2],[1397,2]]},"3934":{"position":[[230,2],[558,2],[623,2],[706,2],[779,2],[809,2],[856,2],[923,2]]},"3936":{"position":[[461,2],[472,2],[521,2],[568,2],[622,2],[654,2],[685,2]]},"3938":{"position":[[99,2],[426,2],[455,2],[502,2],[554,2],[606,2],[662,2]]},"3940":{"position":[[352,2],[393,2],[427,2],[468,2],[510,2],[634,2]]},"3942":{"position":[[165,2],[218,2],[292,2],[344,2],[391,2]]},"3944":{"position":[[179,2],[216,2],[281,2],[307,2],[365,2],[433,2]]},"3946":{"position":[[101,2],[309,2],[356,2]]},"3948":{"position":[[134,2],[368,2],[462,2],[493,2]]},"3950":{"position":[[297,2],[351,2],[399,2],[492,2],[580,2],[623,2],[659,2],[712,2],[745,2],[792,2],[822,2],[894,2],[933,2]]},"3952":{"position":[[443,2],[645,2],[727,2]]},"3954":{"position":[[522,2],[542,2],[598,2],[627,2],[665,2],[692,2]]},"3956":{"position":[[3081,2],[3129,2]]},"3958":{"position":[[71,2],[181,2],[249,2],[294,2],[322,2]]},"3960":{"position":[[406,2],[437,2],[546,2]]},"3962":{"position":[[1004,2],[1476,2],[1517,2],[1548,2],[1816,2],[2011,2]]},"3964":{"position":[[447,2],[539,2],[930,2],[961,2],[1057,2]]},"3966":{"position":[[636,2],[815,2],[978,2]]},"3968":{"position":[[263,2],[630,2],[751,2],[824,2]]},"3970":{"position":[[190,2],[303,2]]},"3972":{"position":[[290,2]]},"3974":{"position":[[241,2],[461,2],[586,2],[684,2]]},"3976":{"position":[[356,2],[410,2]]},"3978":{"position":[[690,2],[1197,2],[1390,2]]},"3980":{"position":[[212,2],[405,2],[827,2]]},"3982":{"position":[[211,2],[253,2],[311,2],[619,2],[780,2]]},"3984":{"position":[[377,2],[470,2]]},"3986":{"position":[[394,2],[740,2],[817,2],[875,2],[908,2],[1081,2],[1558,2]]},"3988":{"position":[[253,2],[335,2],[382,2],[417,2],[519,2]]},"3990":{"position":[[401,2]]},"3992":{"position":[[233,2],[1443,2],[1753,2],[1923,2],[3013,2],[3914,2],[4006,2]]},"3994":{"position":[[796,2]]},"3996":{"position":[[488,2],[1784,2],[1786,2]]},"3998":{"position":[[534,2],[644,2]]},"4000":{"position":[[782,2],[1077,2]]},"4002":{"position":[[231,2],[243,2],[321,2]]},"4004":{"position":[[294,2]]},"4006":{"position":[[199,2]]}}}],["闰月",{"_index":6301,"t":{"2418":{"position":[[373,2]]}}}],["闲置",{"_index":4386,"t":{"1474":{"position":[[439,2]]}}}],["间",{"_index":6101,"t":{"2307":{"position":[[12,1],[34,1]]},"2311":{"position":[[151,1]]},"2852":{"position":[[39,1]]},"2912":{"position":[[82,1],[171,1]]},"3612":{"position":[[82,1]]},"3614":{"position":[[11,1]]}}}],["间接",{"_index":1546,"t":{"206":{"position":[[304,2]]},"708":{"position":[[527,2]]},"1576":{"position":[[66,2]]},"1773":{"position":[[296,2]]}}}],["间通信",{"_index":6094,"t":{"2303":{"position":[[41,3],[48,3],[87,3]]},"2309":{"position":[[9,3],[77,3]]},"2319":{"position":[[67,3]]},"3954":{"position":[[41,3]]}}}],["间隔",{"_index":1691,"t":{"233":{"position":[[302,2],[389,2],[443,2]]},"2208":{"position":[[5,2]]},"2226":{"position":[[3,2]]},"2315":{"position":[[300,2]]},"2448":{"position":[[5,2]]},"3804":{"position":[[31,2],[120,2],[191,2],[440,2],[505,2]]},"3806":{"position":[[101,2]]},"3808":{"position":[[135,2],[169,2]]}}}],["间隔时间",{"_index":5499,"t":{"1795":{"position":[[1430,4]]},"2393":{"position":[[84,4]]},"2444":{"position":[[30,4]]},"3798":{"position":[[601,4]]},"3808":{"position":[[3175,4]]},"3810":{"position":[[942,4]]}}}],["阅",{"_index":1160,"t":{"156":{"position":[[7,1]]},"1383":{"position":[[0,1]]}}}],["阅读",{"_index":2161,"t":{"336":{"position":[[316,2]]},"675":{"position":[[55,2]]},"2341":{"position":[[152,2]]},"2564":{"position":[[204,2]]},"2593":{"position":[[11,2]]},"3702":{"position":[[1477,2]]},"3988":{"position":[[448,2]]}}}],["阈值",{"_index":8170,"t":{"3446":{"position":[[355,2]]},"3448":{"position":[[666,2],[1090,2]]}}}],["阐述",{"_index":2151,"t":{"336":{"position":[[162,2]]},"510":{"position":[[569,2]]}}}],["阔落",{"_index":4795,"t":{"1511":{"position":[[2610,2]]}}}],["队列",{"_index":5528,"t":{"1799":{"position":[[54,2]]},"1801":{"position":[[1435,2],[3329,2]]},"1803":{"position":[[5542,2]]},"2305":{"position":[[26,2]]},"2311":{"position":[[57,2]]},"3950":{"position":[[856,2]]}}}],["防止",{"_index":4496,"t":{"1495":{"position":[[1274,2]]},"2379":{"position":[[33,2]]},"2848":{"position":[[1569,2]]},"3154":{"position":[[714,2]]}}}],["防火墙",{"_index":7045,"t":{"2782":{"position":[[170,3]]}}}],["阶段",{"_index":5772,"t":{"1892":{"position":[[41,2]]}}}],["阻塞",{"_index":2722,"t":{"490":{"position":[[3,2],[207,2]]},"2817":{"position":[[101,2],[180,2],[241,2]]},"2903":{"position":[[20,2],[39,2]]},"3800":{"position":[[144,2]]},"3924":{"position":[[2074,2],[2223,2]]},"3958":{"position":[[292,2]]}}}],["阻止",{"_index":2435,"t":{"404":{"position":[[194,2]]},"1917":{"position":[[24,2]]}}}],["阿塞拜疆",{"_index":6470,"t":{"2559":{"position":[[391,4],[419,4]]}}}],["阿尔及利亚",{"_index":6435,"t":{"2559":{"position":[[74,5]]}}}],["阿尔巴尼亚",{"_index":6430,"t":{"2559":{"position":[[29,5],[41,5],[48,5]]}}}],["阿拉伯联合酋长国",{"_index":6461,"t":{"2559":{"position":[[306,8]]}}}],["阿拉伯语",{"_index":6433,"t":{"2559":{"position":[[57,4],[68,4],[86,4],[101,4],[116,4],[132,4],[147,4],[163,4],[179,4],[195,4],[211,4],[226,4],[242,4],[261,4],[280,4],[299,4],[321,4]]}}}],["阿曼",{"_index":6453,"t":{"2559":{"position":[[217,2]]}}}],["阿根廷",{"_index":6642,"t":{"2559":{"position":[[2116,3]]}}}],["阿里",{"_index":8141,"t":{"3432":{"position":[[3424,2],[3912,2]]}}}],["附",{"_index":4574,"t":{"1511":{"position":[[210,1]]}}}],["附加",{"_index":4421,"t":{"1483":{"position":[[1060,2]]},"1939":{"position":[[14,2]]},"3708":{"position":[[427,2]]},"3998":{"position":[[594,2]]}}}],["陈",{"_index":4739,"t":{"1511":{"position":[[1981,1],[3034,1]]}}}],["陌生",{"_index":4910,"t":{"1516":{"position":[[26,2]]}}}],["降低",{"_index":6796,"t":{"2682":{"position":[[40,2]]},"3414":{"position":[[270,2]]}}}],["降级",{"_index":9057,"t":{"3910":{"position":[[2294,2]]}}}],["限制",{"_index":2356,"t":{"388":{"position":[[12,2]]},"404":{"position":[[73,2]]},"1416":{"position":[[122,2]]},"1747":{"position":[[58,2],[82,2]]},"1749":{"position":[[29,2]]},"1751":{"position":[[12,2]]},"1753":{"position":[[163,2],[171,2],[220,2]]},"1755":{"position":[[746,2],[754,2],[951,2],[959,2],[1186,2],[1194,2]]},"3432":{"position":[[593,2],[698,2]]},"3798":{"position":[[475,2],[546,2]]},"3800":{"position":[[275,2]]},"3808":{"position":[[3077,2],[3122,2]]},"3938":{"position":[[761,2]]},"3954":{"position":[[269,2]]}}}],["限定",{"_index":2291,"t":{"359":{"position":[[292,2]]},"986":{"position":[[148,2]]},"3371":{"position":[[151,2]]},"3389":{"position":[[557,2]]},"3448":{"position":[[983,2],[1257,2]]},"3779":{"position":[[358,2]]},"3802":{"position":[[394,2]]},"3924":{"position":[[2899,2]]}}}],["限流",{"_index":5777,"t":{"1896":{"position":[[51,2]]},"2564":{"position":[[167,2]]}}}],["除",{"_index":3263,"t":{"653":{"position":[[22,1]]},"988":{"position":[[437,1]]},"1353":{"position":[[22,1]]},"1383":{"position":[[254,1]]},"2581":{"position":[[43,1]]},"3213":{"position":[[46,1]]}}}],["除了",{"_index":1708,"t":{"235":{"position":[[0,2]]},"350":{"position":[[721,2]]},"363":{"position":[[84,2]]},"445":{"position":[[26,2]]},"461":{"position":[[13,2]]},"615":{"position":[[0,2]]},"617":{"position":[[1807,2]]},"685":{"position":[[46,2]]},"1056":{"position":[[392,2]]},"1200":{"position":[[122,2]]},"1277":{"position":[[0,2]]},"1366":{"position":[[2,2]]},"1420":{"position":[[0,2]]},"1576":{"position":[[286,2]]},"1578":{"position":[[53,2]]},"1621":{"position":[[763,2]]},"1639":{"position":[[0,2]]},"2335":{"position":[[21,2]]},"2442":{"position":[[0,2]]},"2629":{"position":[[26,2]]},"2692":{"position":[[8,2]]},"2703":{"position":[[75,2]]},"2794":{"position":[[9,2]]},"2875":{"position":[[1003,2]]},"2879":{"position":[[30,2]]},"3522":{"position":[[37,2]]},"3563":{"position":[[37,2]]},"3666":{"position":[[9,2]]},"3706":{"position":[[0,2]]},"3754":{"position":[[7,2]]},"3806":{"position":[[0,2],[2675,2]]},"3808":{"position":[[1673,2]]},"3819":{"position":[[1507,2]]}}}],["除外",{"_index":3798,"t":{"939":{"position":[[89,2]]},"1103":{"position":[[190,2]]},"1234":{"position":[[950,2]]},"3047":{"position":[[87,2],[147,2]]}}}],["除此之外",{"_index":2318,"t":{"369":{"position":[[776,4]]},"2581":{"position":[[560,4]]},"3450":{"position":[[246,4]]}}}],["随之",{"_index":7231,"t":{"2915":{"position":[[127,2]]}}}],["随意",{"_index":1561,"t":{"210":{"position":[[551,2],[620,2]]},"655":{"position":[[507,2]]},"1035":{"position":[[48,2]]},"3371":{"position":[[480,2]]},"3448":{"position":[[185,2]]}}}],["随时",{"_index":2524,"t":{"431":{"position":[[34,2]]},"1394":{"position":[[127,2]]},"2705":{"position":[[34,2]]},"3244":{"position":[[63,2]]}}}],["随时随地",{"_index":7211,"t":{"2910":{"position":[[406,4]]},"3922":{"position":[[151,4]]}}}],["随机",{"_index":3929,"t":{"1066":{"position":[[87,2],[1297,2]]},"2333":{"position":[[296,2]]},"2760":{"position":[[30,2]]},"3082":{"position":[[79,2],[114,2]]},"3962":{"position":[[2088,2]]},"3968":{"position":[[112,2]]}}}],["随机数",{"_index":6185,"t":{"2333":{"position":[[485,3]]}}}],["随着",{"_index":1539,"t":{"206":{"position":[[157,2]]},"1761":{"position":[[124,2]]},"2834":{"position":[[42,2]]},"2910":{"position":[[39,2]]},"3088":{"position":[[29,2]]},"3100":{"position":[[20,2]]},"3626":{"position":[[198,2]]},"3928":{"position":[[121,2]]}}}],["隐",{"_index":9560,"t":{"3938":{"position":[[494,1]]}}}],["隐居",{"_index":4724,"t":{"1511":{"position":[[1791,2]]}}}],["隐私",{"_index":925,"t":{"121":{"position":[[624,2]]},"2782":{"position":[[39,2]]}}}],["隐藏",{"_index":5755,"t":{"1885":{"position":[[14,2]]},"2175":{"position":[[160,2],[165,2]]},"3009":{"position":[[46,2]]},"3063":{"position":[[718,2]]},"3658":{"position":[[13,2]]},"3706":{"position":[[710,2]]},"3992":{"position":[[62,2]]}}}],["隔",{"_index":6274,"t":{"2393":{"position":[[50,1]]}}}],["隔开",{"_index":2629,"t":{"469":{"position":[[29,2]]},"2418":{"position":[[29,2],[194,2]]}}}],["隔离",{"_index":7221,"t":{"2912":{"position":[[86,2],[174,2],[211,2]]},"2915":{"position":[[28,2],[207,2]]},"2917":{"position":[[130,2],[138,2]]},"2919":{"position":[[77,2],[180,2]]},"3282":{"position":[[191,2]]},"3287":{"position":[[873,2]]},"3350":{"position":[[202,2]]}}}],["难",{"_index":7422,"t":{"3108":{"position":[[117,1]]},"3352":{"position":[[108,1]]}}}],["难上加难",{"_index":5443,"t":{"1761":{"position":[[239,4]]}}}],["难以",{"_index":1543,"t":{"206":{"position":[[203,2]]},"1389":{"position":[[64,2]]},"1576":{"position":[[336,2]]},"3098":{"position":[[5,2]]},"3104":{"position":[[66,2]]}}}],["难以实现",{"_index":5070,"t":{"1578":{"position":[[171,4]]}}}],["难度",{"_index":2717,"t":{"486":{"position":[[24,2]]},"585":{"position":[[599,2]]},"1050":{"position":[[31,2]]},"3104":{"position":[[95,2]]},"3319":{"position":[[25,2]]}}}],["难题",{"_index":7433,"t":{"3112":{"position":[[48,2]]}}}],["集",{"_index":1566,"t":{"212":{"position":[[26,1]]},"233":{"position":[[278,1]]},"359":{"position":[[286,1]]},"698":{"position":[[447,1]]},"706":{"position":[[23,1],[62,1],[99,1]]},"807":{"position":[[48,1]]},"862":{"position":[[385,1]]},"1103":{"position":[[59,1]]},"1117":{"position":[[32,1],[85,1],[167,1],[261,1],[365,1],[479,1],[603,1],[737,1],[881,1],[1101,1],[1112,1],[1162,1],[1221,1],[1287,1],[1360,1],[1440,1],[1527,1],[1621,1],[1770,1],[1855,1],[1952,1],[2059,1],[2176,1],[2303,1],[2440,1],[2587,1],[2803,1],[2888,1],[2985,1],[3092,1],[3209,1],[3336,1],[3473,1],[3620,1],[3837,1],[3905,1],[3985,1],[4075,1],[4175,1],[4285,1],[4405,1],[4535,1]]},"1125":{"position":[[66,1],[224,1],[272,1]]},"1129":{"position":[[717,1],[1707,1]]},"1133":{"position":[[155,1]]},"1185":{"position":[[150,1],[198,1]]},"1309":{"position":[[105,1]]},"1319":{"position":[[23,1],[62,1],[99,1]]},"1420":{"position":[[572,1],[886,1],[927,1],[943,1],[956,1],[1006,1]]},"1422":{"position":[[22,1]]},"1440":{"position":[[99,1],[171,1],[200,1],[564,1]]},"1735":{"position":[[207,1]]},"1761":{"position":[[73,1]]},"2542":{"position":[[118,1],[255,1]]},"2553":{"position":[[235,1]]},"2623":{"position":[[67,1],[274,1]]},"2627":{"position":[[166,1]]},"2981":{"position":[[205,1],[251,1],[307,1]]},"3001":{"position":[[133,1],[408,1]]},"3031":{"position":[[235,1]]},"3063":{"position":[[380,1]]},"3069":{"position":[[210,1]]},"3071":{"position":[[413,1],[581,1],[653,1],[821,1],[1130,1]]},"3108":{"position":[[210,1]]},"3120":{"position":[[144,1]]},"3224":{"position":[[358,1]]},"3273":{"position":[[634,1],[768,1]]},"3371":{"position":[[167,1]]},"3389":{"position":[[573,1]]},"3636":{"position":[[66,1]]},"3706":{"position":[[372,1]]},"3708":{"position":[[3205,1]]},"3742":{"position":[[11,1]]},"3744":{"position":[[19,1],[270,1]]},"3777":{"position":[[179,1],[187,1]]},"3779":{"position":[[350,1]]},"3798":{"position":[[185,1],[193,1]]},"3802":{"position":[[386,1]]},"3914":{"position":[[3308,1]]},"3920":{"position":[[205,1],[1011,1]]},"3924":{"position":[[2915,1]]},"3934":{"position":[[200,1],[837,1],[844,1]]},"3938":{"position":[[454,1]]},"3950":{"position":[[891,1]]},"3956":{"position":[[133,1],[2545,1]]},"3960":{"position":[[482,1]]},"3978":{"position":[[291,1],[1149,1]]},"3986":{"position":[[481,1]]},"3992":{"position":[[3561,1]]},"3998":{"position":[[552,1]]}}}],["集中",{"_index":2292,"t":{"359":{"position":[[307,2]]},"1286":{"position":[[26,2]]},"1440":{"position":[[263,2]]},"1719":{"position":[[86,2]]},"1735":{"position":[[23,2]]},"3118":{"position":[[322,2]]}}}],["集中式",{"_index":5304,"t":{"1697":{"position":[[23,3]]},"1793":{"position":[[23,3]]}}}],["集会",{"_index":8517,"t":{"3698":{"position":[[41,2]]}}}],["集合",{"_index":74,"t":{"3":{"position":[[894,2]]},"439":{"position":[[57,2]]},"747":{"position":[[448,2]]},"851":{"position":[[1954,2]]},"887":{"position":[[82,2]]},"986":{"position":[[18,2]]},"1566":{"position":[[537,2]]},"2852":{"position":[[24,2]]},"3071":{"position":[[1103,2],[1306,2]]},"3273":{"position":[[601,2]]},"3819":{"position":[[219,2]]},"3836":{"position":[[19,2],[114,2]]},"3838":{"position":[[19,2],[140,2]]},"3914":{"position":[[3095,2]]},"3932":{"position":[[2024,2]]},"3952":{"position":[[630,2]]}}}],["集成",{"_index":595,"t":{"98":{"position":[[48,2],[126,2]]},"206":{"position":[[167,2]]},"461":{"position":[[215,2]]},"500":{"position":[[59,2]]},"538":{"position":[[18,2]]},"593":{"position":[[28,2]]},"633":{"position":[[48,2]]},"988":{"position":[[30,2]]},"1223":{"position":[[51,2]]},"1309":{"position":[[69,2]]},"1379":{"position":[[30,2]]},"1582":{"position":[[35,2]]},"1841":{"position":[[58,2]]},"1896":{"position":[[5,2]]},"2269":{"position":[[32,2]]},"2335":{"position":[[96,2]]},"2597":{"position":[[18,2]]},"2740":{"position":[[80,2]]},"2776":{"position":[[8,2]]},"2819":{"position":[[15,2],[591,2]]},"2879":{"position":[[34,2],[59,2]]},"3126":{"position":[[29,2]]},"3207":{"position":[[177,2]]},"3248":{"position":[[18,2]]},"3395":{"position":[[4,2]]},"3397":{"position":[[96,2],[217,2],[1093,2]]},"3399":{"position":[[90,2]]},"3403":{"position":[[4,2],[32,2]]},"3460":{"position":[[14,2]]},"3626":{"position":[[578,2]]},"3654":{"position":[[7,2]]},"3702":{"position":[[200,2]]},"3704":{"position":[[13,2],[36,2]]},"3727":{"position":[[75,2]]},"3918":{"position":[[3865,2],[4062,2],[4070,2],[4107,2],[4125,2]]},"3924":{"position":[[1974,2],[2175,2],[2556,2],[2575,2],[2620,2],[3533,2],[3556,2]]},"3928":{"position":[[224,2]]},"3930":{"position":[[1166,2]]},"3966":{"position":[[1983,2]]},"3972":{"position":[[628,2]]},"3978":{"position":[[1764,2]]},"3988":{"position":[[483,2]]},"3994":{"position":[[1302,2]]},"3996":{"position":[[1657,2]]}}}],["集线器",{"_index":7524,"t":{"3144":{"position":[[524,3]]},"3146":{"position":[[39,3]]},"3150":{"position":[[0,3],[147,3],[195,3]]},"3152":{"position":[[11,3]]},"3154":{"position":[[2,3],[162,3]]},"3156":{"position":[[20,3],[224,3],[352,3],[576,3]]},"3988":{"position":[[94,3]]}}}],["集群",{"_index":6864,"t":{"2740":{"position":[[85,2]]},"3078":{"position":[[174,2]]},"3108":{"position":[[102,2]]},"3110":{"position":[[107,2]]},"3112":{"position":[[33,2]]},"3968":{"position":[[459,2]]}}}],["雇主",{"_index":4566,"t":{"1511":{"position":[[101,2]]}}}],["雨天",{"_index":4699,"t":{"1511":{"position":[[1491,2]]}}}],["雨点",{"_index":7376,"t":{"3086":{"position":[[31,2]]}}}],["雪亮",{"_index":9372,"t":{"3926":{"position":[[97,2]]}}}],["雪花",{"_index":6159,"t":{"2328":{"position":[[25,2]]},"2335":{"position":[[23,2],[42,2],[62,2]]},"3122":{"position":[[46,2]]},"3976":{"position":[[337,2]]},"3986":{"position":[[19,2]]},"3998":{"position":[[7,2],[514,2]]}}}],["零散",{"_index":6749,"t":{"2615":{"position":[[33,2]]}}}],["零点",{"_index":9676,"t":{"3954":{"position":[[616,2]]}}}],["雾",{"_index":4847,"t":{"1511":{"position":[[3338,1]]}}}],["需",{"_index":320,"t":{"19":{"position":[[821,1],[972,1]]},"110":{"position":[[79,1]]},"112":{"position":[[1020,1]]},"127":{"position":[[115,1],[125,1],[1527,1],[1541,1],[1555,1]]},"129":{"position":[[366,1]]},"148":{"position":[[7,1]]},"204":{"position":[[43,1]]},"225":{"position":[[11,1]]},"261":{"position":[[61,1]]},"336":{"position":[[212,1]]},"359":{"position":[[331,1]]},"411":{"position":[[538,1],[596,1]]},"522":{"position":[[24,1]]},"530":{"position":[[793,1]]},"574":{"position":[[10,1]]},"595":{"position":[[325,1]]},"615":{"position":[[666,1]]},"639":{"position":[[444,1]]},"679":{"position":[[45,1]]},"688":{"position":[[89,1]]},"897":{"position":[[551,1]]},"899":{"position":[[1502,1]]},"939":{"position":[[119,1]]},"945":{"position":[[12,1]]},"947":{"position":[[64,1],[861,1]]},"1039":{"position":[[794,1]]},"1066":{"position":[[1704,1]]},"1202":{"position":[[26,1]]},"1291":{"position":[[0,1]]},"1309":{"position":[[118,1],[130,1],[715,1]]},"1311":{"position":[[341,1],[457,1]]},"1317":{"position":[[538,1]]},"1377":{"position":[[346,1]]},"1465":{"position":[[1,1]]},"1483":{"position":[[1147,1]]},"1507":{"position":[[60,1]]},"1566":{"position":[[334,1]]},"1576":{"position":[[32,1]]},"1625":{"position":[[41,1],[50,1]]},"1687":{"position":[[321,1]]},"1703":{"position":[[66,1]]},"1711":{"position":[[826,1]]},"1717":{"position":[[66,1]]},"1741":{"position":[[1727,1],[2518,1]]},"1781":{"position":[[472,1]]},"1795":{"position":[[2999,1]]},"1797":{"position":[[51,1],[57,1]]},"1799":{"position":[[130,1],[136,1]]},"1805":{"position":[[53,1],[59,1]]},"1811":{"position":[[34,1]]},"1843":{"position":[[331,1]]},"1867":{"position":[[709,1]]},"1881":{"position":[[11,1]]},"1887":{"position":[[93,1]]},"1909":{"position":[[525,1]]},"1925":{"position":[[869,1]]},"2055":{"position":[[295,1]]},"2096":{"position":[[5,1]]},"2182":{"position":[[248,1]]},"2298":{"position":[[235,1]]},"2315":{"position":[[42,1]]},"2354":{"position":[[80,1],[89,1]]},"2357":{"position":[[68,1],[90,1]]},"2361":{"position":[[429,1]]},"2363":{"position":[[247,1]]},"2365":{"position":[[140,1]]},"2367":{"position":[[146,1]]},"2369":{"position":[[166,1]]},"2371":{"position":[[173,1]]},"2373":{"position":[[154,1],[224,1]]},"2426":{"position":[[258,1]]},"2442":{"position":[[120,1]]},"2466":{"position":[[52,1]]},"2478":{"position":[[473,1]]},"2587":{"position":[[509,1]]},"2609":{"position":[[38,1]]},"2627":{"position":[[178,1]]},"2657":{"position":[[44,1]]},"2680":{"position":[[80,1]]},"2711":{"position":[[8,1]]},"2713":{"position":[[316,1]]},"2745":{"position":[[74,1]]},"2747":{"position":[[84,1]]},"2803":{"position":[[173,1]]},"2827":{"position":[[5,1]]},"2831":{"position":[[54,1]]},"2850":{"position":[[11,1]]},"2868":{"position":[[120,1]]},"2875":{"position":[[34,1],[498,1],[510,1]]},"2881":{"position":[[298,1]]},"2910":{"position":[[253,1]]},"2925":{"position":[[459,1]]},"2941":{"position":[[459,1]]},"2955":{"position":[[459,1]]},"2977":{"position":[[11,1]]},"2985":{"position":[[57,1],[65,1],[208,1]]},"2987":{"position":[[11,1]]},"2997":{"position":[[11,1]]},"3005":{"position":[[11,1]]},"3019":{"position":[[11,1]]},"3027":{"position":[[11,1]]},"3035":{"position":[[11,1]]},"3043":{"position":[[11,1]]},"3051":{"position":[[11,1]]},"3059":{"position":[[11,1]]},"3078":{"position":[[19,1]]},"3080":{"position":[[300,1]]},"3126":{"position":[[217,1]]},"3142":{"position":[[247,1]]},"3309":{"position":[[65,1]]},"3339":{"position":[[304,1]]},"3365":{"position":[[11,1]]},"3389":{"position":[[119,1]]},"3393":{"position":[[169,1]]},"3422":{"position":[[7,1]]},"3432":{"position":[[3137,1]]},"3434":{"position":[[64,1]]},"3442":{"position":[[77,1]]},"3448":{"position":[[1,1]]},"3460":{"position":[[51,1],[63,1]]},"3468":{"position":[[29,1],[33,1]]},"3481":{"position":[[4,1]]},"3483":{"position":[[1270,1]]},"3506":{"position":[[47,1],[644,1]]},"3547":{"position":[[47,1],[814,1]]},"3589":{"position":[[624,1]]},"3593":{"position":[[74,1]]},"3601":{"position":[[1550,1],[1554,1]]},"3650":{"position":[[45,1]]},"3670":{"position":[[92,1]]},"3672":{"position":[[57,1],[65,1]]},"3704":{"position":[[830,1]]},"3708":{"position":[[3903,1],[3914,1]]},"3714":{"position":[[11,1]]},"3732":{"position":[[4,1]]},"3768":{"position":[[2453,1]]},"3783":{"position":[[57,1]]},"3910":{"position":[[2113,1]]},"3912":{"position":[[1815,1]]},"3916":{"position":[[1832,1]]},"3924":{"position":[[4370,1]]},"3934":{"position":[[2544,1],[2549,1]]}}}],["需求",{"_index":577,"t":{"95":{"position":[[106,2]]},"121":{"position":[[516,2]]},"340":{"position":[[541,2]]},"484":{"position":[[28,2]]},"836":{"position":[[364,2]]},"1389":{"position":[[171,2]]},"1418":{"position":[[32,2],[41,2]]},"1424":{"position":[[399,2],[441,2]]},"1539":{"position":[[7,2],[20,2],[46,2],[77,2],[106,2]]},"1543":{"position":[[0,2],[112,2],[238,2],[362,2]]},"1761":{"position":[[153,2]]},"2326":{"position":[[188,2]]},"2684":{"position":[[410,2]]},"2910":{"position":[[239,2]]},"2915":{"position":[[91,2]]},"2933":{"position":[[639,2]]},"2949":{"position":[[487,2]]},"2963":{"position":[[506,2]]},"3092":{"position":[[129,2]]},"3116":{"position":[[38,2]]},"3323":{"position":[[417,2]]},"3434":{"position":[[17,2]]},"3622":{"position":[[58,2],[115,2]]},"3928":{"position":[[210,2],[301,2],[325,2]]}}}],["需用",{"_index":7455,"t":{"3126":{"position":[[223,2]]}}}],["需要",{"_index":109,"t":{"9":{"position":[[18,2],[30,2],[77,2]]},"11":{"position":[[843,2]]},"19":{"position":[[504,2]]},"95":{"position":[[52,2]]},"121":{"position":[[207,2],[582,2],[640,2]]},"127":{"position":[[1638,2]]},"133":{"position":[[47,2]]},"135":{"position":[[48,2]]},"137":{"position":[[25,2],[59,2],[122,2]]},"141":{"position":[[2,2]]},"148":{"position":[[511,2]]},"152":{"position":[[37,2],[696,2]]},"204":{"position":[[59,2]]},"206":{"position":[[165,2]]},"212":{"position":[[41,2],[51,2]]},"220":{"position":[[163,2]]},"245":{"position":[[190,2]]},"255":{"position":[[170,2]]},"263":{"position":[[7,2]]},"288":{"position":[[309,2],[320,2]]},"300":{"position":[[203,2],[276,2]]},"308":{"position":[[408,2]]},"310":{"position":[[268,2]]},"312":{"position":[[9,2]]},"319":{"position":[[622,2]]},"323":{"position":[[17,2]]},"325":{"position":[[77,2]]},"331":{"position":[[37,2]]},"336":{"position":[[46,2],[61,2],[387,2]]},"340":{"position":[[105,2],[545,2],[759,2],[1002,2],[1303,2]]},"344":{"position":[[411,2]]},"346":{"position":[[494,2]]},"348":{"position":[[439,2]]},"359":{"position":[[342,2]]},"371":{"position":[[590,2]]},"382":{"position":[[21,2]]},"413":{"position":[[47,2],[80,2]]},"417":{"position":[[42,2],[108,2],[223,2]]},"423":{"position":[[12,2],[258,2]]},"427":{"position":[[175,2]]},"431":{"position":[[4,2],[40,2],[53,2]]},"433":{"position":[[168,2]]},"441":{"position":[[68,2]]},"443":{"position":[[6,2]]},"445":{"position":[[66,2],[126,2]]},"449":{"position":[[8,2],[35,2]]},"451":{"position":[[48,2]]},"453":{"position":[[401,2]]},"455":{"position":[[108,2]]},"459":{"position":[[3,2]]},"524":{"position":[[19,2],[511,2]]},"526":{"position":[[45,2],[57,2]]},"544":{"position":[[8,2]]},"570":{"position":[[3,2],[1655,2]]},"572":{"position":[[1222,2]]},"585":{"position":[[465,2],[499,2]]},"610":{"position":[[79,2]]},"623":{"position":[[43,2]]},"653":{"position":[[58,2]]},"655":{"position":[[292,2]]},"675":{"position":[[123,2],[222,2]]},"679":{"position":[[58,2]]},"685":{"position":[[264,2],[323,2]]},"688":{"position":[[108,2]]},"698":{"position":[[31,2]]},"702":{"position":[[20,2]]},"706":{"position":[[91,2],[252,2]]},"719":{"position":[[46,2]]},"732":{"position":[[277,2]]},"734":{"position":[[7721,2]]},"743":{"position":[[32,2]]},"751":{"position":[[51,2]]},"756":{"position":[[38,2]]},"801":{"position":[[16,2]]},"818":{"position":[[45,2]]},"841":{"position":[[53,2]]},"844":{"position":[[27,2]]},"846":{"position":[[41,2]]},"864":{"position":[[12,2]]},"903":{"position":[[37,2]]},"915":{"position":[[7,2],[38,2],[75,2]]},"935":{"position":[[11,2]]},"939":{"position":[[64,2]]},"941":{"position":[[62,2]]},"947":{"position":[[992,2]]},"1041":{"position":[[6,2]]},"1050":{"position":[[71,2]]},"1056":{"position":[[421,2]]},"1071":{"position":[[98,2]]},"1073":{"position":[[21,2]]},"1139":{"position":[[23,2]]},"1143":{"position":[[78,2]]},"1149":{"position":[[26,2]]},"1200":{"position":[[175,2]]},"1204":{"position":[[198,2]]},"1206":{"position":[[1,2]]},"1208":{"position":[[1,2]]},"1210":{"position":[[1,2]]},"1214":{"position":[[157,2]]},"1248":{"position":[[33,2]]},"1286":{"position":[[39,2],[91,2]]},"1293":{"position":[[13,2]]},"1309":{"position":[[25,2]]},"1319":{"position":[[91,2],[253,2]]},"1353":{"position":[[58,2]]},"1360":{"position":[[23,2]]},"1364":{"position":[[460,2]]},"1372":{"position":[[9,2]]},"1377":{"position":[[492,2]]},"1379":{"position":[[75,2]]},"1385":{"position":[[19,2],[83,2]]},"1389":{"position":[[17,2],[29,2],[43,2]]},"1392":{"position":[[50,2],[146,2]]},"1408":{"position":[[1042,2]]},"1412":{"position":[[27,2],[2517,2],[2528,2]]},"1418":{"position":[[45,2]]},"1422":{"position":[[34,2]]},"1424":{"position":[[453,2],[1696,2],[1707,2],[1807,2]]},"1426":{"position":[[22,2]]},"1428":{"position":[[48,2]]},"1444":{"position":[[9,2]]},"1468":{"position":[[86,2]]},"1472":{"position":[[47,2]]},"1483":{"position":[[713,2],[1034,2]]},"1488":{"position":[[1640,2]]},"1511":{"position":[[1296,2]]},"1516":{"position":[[42,2],[49,2]]},"1532":{"position":[[48,2]]},"1535":{"position":[[23,2]]},"1539":{"position":[[1661,2]]},"1541":{"position":[[58,2],[304,2],[347,2]]},"1547":{"position":[[294,2]]},"1549":{"position":[[218,2],[383,2]]},"1551":{"position":[[18,2]]},"1566":{"position":[[498,2]]},"1578":{"position":[[36,2]]},"1609":{"position":[[291,2]]},"1617":{"position":[[1136,2]]},"1623":{"position":[[37,2]]},"1627":{"position":[[37,2],[62,2],[379,2],[389,2]]},"1631":{"position":[[412,2]]},"1683":{"position":[[323,2]]},"1697":{"position":[[51,2]]},"1701":{"position":[[29,2]]},"1703":{"position":[[51,2]]},"1707":{"position":[[10,2],[65,2]]},"1711":{"position":[[45,2]]},"1735":{"position":[[31,2]]},"1741":{"position":[[1660,2]]},"1743":{"position":[[5,2]]},"1745":{"position":[[83,2]]},"1751":{"position":[[3,2]]},"1755":{"position":[[350,2]]},"1759":{"position":[[26,2]]},"1765":{"position":[[4,2],[62,2],[88,2],[123,2]]},"1775":{"position":[[50,2],[83,2]]},"1777":{"position":[[26,2]]},"1783":{"position":[[93,2],[103,2],[152,2]]},"1785":{"position":[[5,2],[39,2]]},"1793":{"position":[[51,2]]},"1795":{"position":[[2849,2]]},"1825":{"position":[[26,2]]},"1883":{"position":[[4,2],[22,2]]},"1887":{"position":[[97,2]]},"1901":{"position":[[134,2]]},"1903":{"position":[[388,2]]},"1915":{"position":[[1,2]]},"1921":{"position":[[1,2]]},"1929":{"position":[[1,2]]},"1937":{"position":[[1,2]]},"1945":{"position":[[1,2]]},"1981":{"position":[[86,2]]},"1993":{"position":[[86,2]]},"1995":{"position":[[34,2],[42,2]]},"2016":{"position":[[94,2]]},"2018":{"position":[[34,2],[42,2]]},"2255":{"position":[[85,2]]},"2292":{"position":[[18,2],[30,2],[77,2]]},"2294":{"position":[[891,2]]},"2298":{"position":[[57,2]]},"2326":{"position":[[290,2]]},"2343":{"position":[[123,2]]},"2359":{"position":[[486,2]]},"2375":{"position":[[43,2]]},"2379":{"position":[[5,2]]},"2385":{"position":[[81,2]]},"2395":{"position":[[147,2]]},"2402":{"position":[[53,2]]},"2404":{"position":[[8,2]]},"2406":{"position":[[669,2]]},"2415":{"position":[[362,2]]},"2418":{"position":[[368,2]]},"2434":{"position":[[729,2]]},"2436":{"position":[[6,2]]},"2438":{"position":[[301,2]]},"2440":{"position":[[335,2]]},"2442":{"position":[[67,2]]},"2474":{"position":[[6,2],[31,2]]},"2490":{"position":[[26,2]]},"2501":{"position":[[10,2]]},"2508":{"position":[[58,2]]},"2538":{"position":[[144,2]]},"2542":{"position":[[7,2],[86,2],[154,2]]},"2547":{"position":[[4,2]]},"2555":{"position":[[89,2]]},"2579":{"position":[[600,2]]},"2581":{"position":[[1082,2]]},"2591":{"position":[[21,2],[40,2]]},"2603":{"position":[[8,2]]},"2625":{"position":[[94,2],[228,2]]},"2627":{"position":[[75,2],[125,2]]},"2635":{"position":[[55,2]]},"2657":{"position":[[53,2]]},"2662":{"position":[[55,2]]},"2674":{"position":[[346,2]]},"2684":{"position":[[6,2],[27,2],[311,2]]},"2688":{"position":[[138,2]]},"2705":{"position":[[4,2],[40,2],[53,2]]},"2709":{"position":[[289,2]]},"2715":{"position":[[4,2]]},"2719":{"position":[[10,2]]},"2727":{"position":[[62,2]]},"2729":{"position":[[83,2]]},"2733":{"position":[[77,2],[86,2]]},"2735":{"position":[[83,2]]},"2745":{"position":[[9,2],[285,2]]},"2747":{"position":[[320,2]]},"2751":{"position":[[39,2]]},"2770":{"position":[[227,2]]},"2776":{"position":[[21,2]]},"2782":{"position":[[125,2]]},"2809":{"position":[[52,2]]},"2813":{"position":[[700,2]]},"2819":{"position":[[31,2]]},"2829":{"position":[[39,2]]},"2831":{"position":[[41,2]]},"2834":{"position":[[15,2]]},"2881":{"position":[[93,2]]},"2891":{"position":[[1,2]]},"2905":{"position":[[74,2]]},"2910":{"position":[[479,2]]},"2915":{"position":[[200,2]]},"2917":{"position":[[200,2]]},"2919":{"position":[[98,2],[193,2],[223,2]]},"2933":{"position":[[1,2],[643,2]]},"2935":{"position":[[39,2]]},"2937":{"position":[[105,2]]},"2943":{"position":[[426,2],[450,2]]},"2949":{"position":[[1,2],[491,2]]},"2951":{"position":[[1,2],[636,2]]},"2963":{"position":[[1,2],[510,2]]},"2967":{"position":[[54,2],[74,2]]},"2971":{"position":[[266,2]]},"2973":{"position":[[52,2]]},"2977":{"position":[[55,2]]},"2985":{"position":[[192,2]]},"2987":{"position":[[55,2]]},"2995":{"position":[[16,2],[19,2],[102,2]]},"2997":{"position":[[55,2]]},"3005":{"position":[[55,2]]},"3019":{"position":[[55,2]]},"3027":{"position":[[55,2]]},"3035":{"position":[[55,2]]},"3043":{"position":[[55,2]]},"3051":{"position":[[55,2]]},"3059":{"position":[[55,2]]},"3063":{"position":[[1107,2]]},"3071":{"position":[[563,2],[803,2]]},"3075":{"position":[[37,2]]},"3088":{"position":[[164,2]]},"3094":{"position":[[111,2]]},"3096":{"position":[[161,2]]},"3098":{"position":[[46,2]]},"3104":{"position":[[45,2]]},"3108":{"position":[[108,2],[181,2]]},"3110":{"position":[[114,2]]},"3112":{"position":[[39,2]]},"3118":{"position":[[277,2]]},"3120":{"position":[[41,2],[109,2]]},"3126":{"position":[[14,2],[27,2],[326,2]]},"3138":{"position":[[13,2],[23,2]]},"3142":{"position":[[101,2],[210,2]]},"3144":{"position":[[20,2],[44,2]]},"3154":{"position":[[6,2]]},"3156":{"position":[[24,2]]},"3158":{"position":[[7,2],[36,2]]},"3189":{"position":[[74,2]]},"3215":{"position":[[866,2]]},"3254":{"position":[[8,2]]},"3269":{"position":[[10,2]]},"3271":{"position":[[10,2]]},"3273":{"position":[[727,2]]},"3277":{"position":[[11,2]]},"3287":{"position":[[16,2]]},"3291":{"position":[[1300,2]]},"3305":{"position":[[6,2]]},"3309":{"position":[[39,2]]},"3325":{"position":[[1,2]]},"3329":{"position":[[92,2]]},"3337":{"position":[[77,2]]},"3343":{"position":[[3,2]]},"3345":{"position":[[75,2]]},"3352":{"position":[[496,2],[550,2]]},"3371":{"position":[[484,2]]},"3375":{"position":[[21,2],[45,2]]},"3377":{"position":[[7,2]]},"3383":{"position":[[15,2]]},"3387":{"position":[[6,2],[31,2]]},"3389":{"position":[[8,2],[195,2]]},"3391":{"position":[[52,2],[93,2]]},"3393":{"position":[[122,2]]},"3397":{"position":[[123,2]]},"3401":{"position":[[5,2],[52,2]]},"3416":{"position":[[378,2]]},"3432":{"position":[[3407,2],[3890,2]]},"3440":{"position":[[112,2]]},"3442":{"position":[[147,2]]},"3448":{"position":[[1385,2],[1395,2]]},"3454":{"position":[[283,2]]},"3456":{"position":[[72,2]]},"3458":{"position":[[579,2]]},"3476":{"position":[[20,2],[65,2]]},"3522":{"position":[[92,2],[99,2]]},"3524":{"position":[[5,2],[36,2]]},"3563":{"position":[[89,2],[96,2]]},"3595":{"position":[[406,2]]},"3608":{"position":[[87,2]]},"3614":{"position":[[18,2]]},"3622":{"position":[[104,2]]},"3626":{"position":[[287,2],[415,2]]},"3636":{"position":[[687,2]]},"3660":{"position":[[54,2]]},"3662":{"position":[[3,2],[24,2]]},"3664":{"position":[[70,2],[82,2],[536,2],[544,2]]},"3668":{"position":[[19,2],[30,2]]},"3674":{"position":[[23,2]]},"3680":{"position":[[5,2]]},"3684":{"position":[[33,2]]},"3686":{"position":[[88,2],[346,2]]},"3692":{"position":[[59,2]]},"3696":{"position":[[32,2]]},"3698":{"position":[[94,2]]},"3704":{"position":[[75,2]]},"3706":{"position":[[1099,2]]},"3708":{"position":[[4098,2]]},"3710":{"position":[[12,2],[28,2]]},"3714":{"position":[[36,2]]},"3716":{"position":[[44,2],[87,2]]},"3740":{"position":[[6,2]]},"3768":{"position":[[2457,2]]},"3772":{"position":[[6,2],[81,2]]},"3783":{"position":[[5,2]]},"3806":{"position":[[56,2]]},"3844":{"position":[[687,2]]},"3856":{"position":[[30,2]]},"3916":{"position":[[9068,2]]},"3924":{"position":[[771,2],[3603,2]]},"3938":{"position":[[1007,2]]},"3952":{"position":[[361,2]]},"3956":{"position":[[3158,2]]},"3992":{"position":[[3824,2]]}}}],["青蛙",{"_index":4738,"t":{"1511":{"position":[[1956,2]]}}}],["静态",{"_index":339,"t":{"21":{"position":[[53,2],[98,2],[117,2]]},"23":{"position":[[35,2],[80,2],[99,2]]},"30":{"position":[[4,2]]},"210":{"position":[[29,2],[109,2]]},"437":{"position":[[33,2]]},"463":{"position":[[35,2],[64,2]]},"480":{"position":[[48,2],[462,2]]},"494":{"position":[[53,2]]},"818":{"position":[[68,2]]},"822":{"position":[[2,2],[33,2],[123,2]]},"1026":{"position":[[224,2]]},"1277":{"position":[[7,2]]},"1383":{"position":[[109,2]]},"1405":{"position":[[124,2]]},"1438":{"position":[[34,2]]},"1539":{"position":[[1728,2]]},"1553":{"position":[[42,2]]},"1580":{"position":[[182,2]]},"1711":{"position":[[56,2]]},"1726":{"position":[[17,2]]},"1735":{"position":[[12,2],[56,2],[71,2],[116,2]]},"1817":{"position":[[68,2]]},"1865":{"position":[[459,2]]},"2206":{"position":[[10,2]]},"2231":{"position":[[35,2],[80,2],[99,2]]},"2239":{"position":[[4,2]]},"2319":{"position":[[34,2]]},"2331":{"position":[[0,2],[207,2]]},"2348":{"position":[[78,2],[118,2]]},"2395":{"position":[[34,2],[48,2]]},"2442":{"position":[[16,2],[81,2]]},"2446":{"position":[[10,2]]},"2526":{"position":[[16,2],[28,2]]},"2528":{"position":[[22,2]]},"2713":{"position":[[159,2]]},"2715":{"position":[[110,2]]},"2856":{"position":[[1757,2]]},"2881":{"position":[[38,2]]},"3289":{"position":[[8,2]]},"3543":{"position":[[688,2]]},"3729":{"position":[[65,2]]},"3772":{"position":[[122,2]]},"3804":{"position":[[85,2]]},"3910":{"position":[[2174,2],[2229,2],[2559,2]]},"3918":{"position":[[3778,2],[3923,2]]},"3920":{"position":[[385,2],[489,2]]},"3922":{"position":[[145,2],[800,2],[1423,2],[2350,2],[2394,2]]},"3928":{"position":[[694,2]]},"3934":{"position":[[310,2],[1123,2]]},"3964":{"position":[[629,2]]},"3966":{"position":[[101,2],[1300,2]]},"3968":{"position":[[242,2],[391,2],[429,2]]},"3986":{"position":[[368,2]]},"3990":{"position":[[753,2]]},"3992":{"position":[[2687,2]]},"3996":{"position":[[811,2]]}}}],["静态方法",{"_index":1028,"t":{"127":{"position":[[1690,4]]},"494":{"position":[[744,4]]},"526":{"position":[[237,4]]},"818":{"position":[[80,4],[88,4]]},"822":{"position":[[170,4]]},"1279":{"position":[[116,4]]},"1553":{"position":[[53,4]]},"1707":{"position":[[133,4]]},"2713":{"position":[[165,4]]},"3158":{"position":[[52,4]]},"3360":{"position":[[189,4]]},"3405":{"position":[[74,4]]},"3551":{"position":[[27,4]]},"3553":{"position":[[27,4]]},"3555":{"position":[[27,4]]},"3557":{"position":[[27,4]]},"3559":{"position":[[27,4]]},"3779":{"position":[[205,4],[1365,4]]},"3802":{"position":[[206,4],[1983,4]]},"3804":{"position":[[406,4],[424,4]]},"3817":{"position":[[217,4],[2579,4]]},"3918":{"position":[[1038,4]]},"3920":{"position":[[415,4]]},"3930":{"position":[[268,4]]},"3958":{"position":[[33,4]]},"3960":{"position":[[216,4]]},"3966":{"position":[[76,4]]},"4000":{"position":[[251,4]]}}}],["静默",{"_index":7178,"t":{"2899":{"position":[[209,2]]},"2903":{"position":[[50,2]]},"3924":{"position":[[155,2],[798,2],[2058,2],[2065,2],[2128,2],[2337,2]]}}}],["非",{"_index":343,"t":{"21":{"position":[[97,1]]},"23":{"position":[[79,1]]},"125":{"position":[[53,1]]},"210":{"position":[[28,1],[108,1]]},"437":{"position":[[37,1]]},"445":{"position":[[874,1]]},"482":{"position":[[945,1]]},"534":{"position":[[138,1]]},"548":{"position":[[72,1]]},"773":{"position":[[0,1]]},"810":{"position":[[248,1]]},"812":{"position":[[264,1]]},"814":{"position":[[246,1]]},"816":{"position":[[262,1]]},"990":{"position":[[14,1],[51,1]]},"1014":{"position":[[38,1],[102,1]]},"1026":{"position":[[3,1]]},"1111":{"position":[[266,1]]},"1113":{"position":[[264,1]]},"1115":{"position":[[267,1]]},"1117":{"position":[[2788,1]]},"1119":{"position":[[247,1]]},"1121":{"position":[[263,1]]},"1123":{"position":[[224,1]]},"1129":{"position":[[382,1],[1268,1]]},"1133":{"position":[[157,1]]},"1214":{"position":[[97,1]]},"1311":{"position":[[450,1]]},"1383":{"position":[[108,1],[217,1]]},"1432":{"position":[[92,1],[176,1]]},"1440":{"position":[[272,1]]},"1576":{"position":[[230,1]]},"1580":{"position":[[181,1],[185,1],[189,1]]},"1633":{"position":[[37,1]]},"1801":{"position":[[3079,1]]},"1803":{"position":[[5051,1]]},"1837":{"position":[[15,1]]},"2061":{"position":[[37,1]]},"2231":{"position":[[79,1]]},"2239":{"position":[[86,1],[135,1]]},"2331":{"position":[[232,1]]},"2442":{"position":[[77,1],[80,1]]},"2581":{"position":[[552,1],[571,1]]},"2589":{"position":[[10,1],[453,1]]},"2599":{"position":[[84,1]]},"2605":{"position":[[44,1]]},"2715":{"position":[[114,1]]},"2762":{"position":[[0,1],[5,1]]},"2985":{"position":[[202,1]]},"3120":{"position":[[93,1]]},"3168":{"position":[[18,1]]},"3287":{"position":[[1205,1]]},"3339":{"position":[[105,1]]},"3341":{"position":[[11,1]]},"3506":{"position":[[187,1]]},"3595":{"position":[[71,1]]},"3918":{"position":[[3220,1]]},"3922":{"position":[[751,1]]},"3950":{"position":[[521,1]]},"3954":{"position":[[556,1],[681,1]]},"3960":{"position":[[567,1]]},"3962":{"position":[[1674,1],[2080,1]]},"3964":{"position":[[28,1],[172,1]]},"3972":{"position":[[473,1],[505,1]]},"3976":{"position":[[376,1]]},"3986":{"position":[[1295,1]]},"3994":{"position":[[1298,1]]},"3998":{"position":[[614,1]]},"4004":{"position":[[281,1]]},"4006":{"position":[[337,1]]}}}],["非常",{"_index":164,"t":{"11":{"position":[[698,2],[781,2]]},"108":{"position":[[14,2]]},"114":{"position":[[14,2]]},"270":{"position":[[120,2]]},"329":{"position":[[136,2]]},"359":{"position":[[322,2]]},"371":{"position":[[5,2]]},"373":{"position":[[139,2]]},"540":{"position":[[19,2]]},"587":{"position":[[2171,2]]},"643":{"position":[[11,2]]},"1020":{"position":[[10,2]]},"1157":{"position":[[11,2]]},"1214":{"position":[[139,2]]},"1221":{"position":[[28,2]]},"1358":{"position":[[7,2]]},"1379":{"position":[[23,2]]},"1424":{"position":[[90,2]]},"1440":{"position":[[34,2]]},"1474":{"position":[[113,2]]},"1511":{"position":[[582,2],[3118,2]]},"1539":{"position":[[1621,2]]},"1611":{"position":[[12,2]]},"1639":{"position":[[38,2]]},"1737":{"position":[[15,2]]},"1892":{"position":[[57,2]]},"2294":{"position":[[727,2],[829,2]]},"2424":{"position":[[29,2]]},"2497":{"position":[[22,2],[163,2]]},"2684":{"position":[[347,2],[382,2]]},"2819":{"position":[[25,2]]},"2895":{"position":[[3,2]]},"2915":{"position":[[202,2]]},"3080":{"position":[[21,2]]},"3138":{"position":[[8,2]]},"3148":{"position":[[222,2]]},"3150":{"position":[[139,2]]},"3209":{"position":[[21,2]]},"3250":{"position":[[21,2]]},"3301":{"position":[[17,2]]},"3309":{"position":[[22,2]]},"3352":{"position":[[309,2]]},"3401":{"position":[[183,2]]},"3434":{"position":[[12,2]]},"3595":{"position":[[10,2]]},"3628":{"position":[[12,2]]},"3910":{"position":[[691,2]]},"3916":{"position":[[1655,2]]},"3924":{"position":[[2053,2]]},"3926":{"position":[[146,2],[479,2]]},"3928":{"position":[[115,2]]}}}],["非常复杂",{"_index":3993,"t":{"1125":{"position":[[12,4]]}}}],["非常容易",{"_index":6153,"t":{"2326":{"position":[[220,4]]},"3704":{"position":[[29,4]]}}}],["非常灵活",{"_index":1050,"t":{"131":{"position":[[12,4]]},"445":{"position":[[1012,4]]},"615":{"position":[[31,4]]},"818":{"position":[[11,4]]},"841":{"position":[[94,4]]},"1143":{"position":[[9,4]]},"1202":{"position":[[11,4]]},"1394":{"position":[[137,4]]},"1408":{"position":[[1023,4]]},"1619":{"position":[[12,4]]},"1841":{"position":[[12,4]]},"1853":{"position":[[16,4]]},"1869":{"position":[[13,4]]},"1969":{"position":[[108,4]]},"1983":{"position":[[20,4]]},"2006":{"position":[[20,4]]},"2709":{"position":[[273,4]]},"2772":{"position":[[20,4]]},"2860":{"position":[[53,4]]},"2881":{"position":[[334,4]]},"2885":{"position":[[21,4]]},"3448":{"position":[[138,4]]},"3779":{"position":[[545,4]]},"3802":{"position":[[601,4]]},"3817":{"position":[[500,4]]},"3924":{"position":[[102,4]]}}}],["非常简单",{"_index":2874,"t":{"544":{"position":[[2,4]]},"1360":{"position":[[17,4]]},"1424":{"position":[[162,4]]},"1440":{"position":[[68,4]]},"1551":{"position":[[12,4]]},"2442":{"position":[[61,4]]},"2501":{"position":[[4,4]]},"2603":{"position":[[2,4]]},"2621":{"position":[[54,4]]},"2729":{"position":[[12,4],[77,4]]},"2751":{"position":[[10,4]]},"2834":{"position":[[9,4]]},"2846":{"position":[[10,4]]},"2850":{"position":[[5,4]]},"2852":{"position":[[66,4]]},"2885":{"position":[[14,4]]},"3080":{"position":[[236,4]]},"3254":{"position":[[2,4]]},"3420":{"position":[[2,4]]},"3434":{"position":[[34,4]]},"3638":{"position":[[63,4]]}}}],["非正常",{"_index":7062,"t":{"2790":{"position":[[1037,3]]},"2796":{"position":[[753,3]]}}}],["非生产",{"_index":6767,"t":{"2625":{"position":[[523,3]]}}}],["面临",{"_index":7423,"t":{"3108":{"position":[[122,2]]}}}],["面包屑",{"_index":3049,"t":{"585":{"position":[[528,3]]},"3944":{"position":[[523,3]]}}}],["面向",{"_index":609,"t":{"98":{"position":[[155,2]]},"1424":{"position":[[105,2]]},"1430":{"position":[[2,2]]},"1761":{"position":[[99,2]]},"1892":{"position":[[62,2]]},"2564":{"position":[[126,2]]},"2912":{"position":[[54,2]]}}}],["面向对象",{"_index":5426,"t":{"1761":{"position":[[1,4]]}}}],["面对",{"_index":574,"t":{"95":{"position":[[99,2]]},"2915":{"position":[[190,2]]}}}],["面貌",{"_index":558,"t":{"95":{"position":[[2,2]]}}}],["韩",{"_index":4891,"t":{"1511":{"position":[[4085,1]]}}}],["韩国",{"_index":6596,"t":{"2559":{"position":[[1586,2],[1595,2],[1599,2]]}}}],["音",{"_index":1211,"t":{"168":{"position":[[86,1]]},"3138":{"position":[[75,1]]}}}],["页",{"_index":2414,"t":{"401":{"position":[[98,1]]},"1913":{"position":[[986,1]]},"1981":{"position":[[56,1]]},"1993":{"position":[[56,1]]},"2016":{"position":[[64,1]]},"3934":{"position":[[1357,1]]}}}],["页码",{"_index":9751,"t":{"3962":{"position":[[1203,2]]}}}],["页面",{"_index":1049,"t":{"129":{"position":[[626,2]]},"404":{"position":[[35,2],[245,2]]},"406":{"position":[[2,2],[12,2]]},"1071":{"position":[[85,2]]},"1887":{"position":[[305,2],[354,2],[512,2]]},"1898":{"position":[[34,2]]},"1901":{"position":[[627,2],[658,2]]},"1931":{"position":[[40,2]]},"1933":{"position":[[651,2]]},"1941":{"position":[[635,2]]},"3626":{"position":[[378,2]]},"3729":{"position":[[63,2]]},"3916":{"position":[[2681,2]]},"3934":{"position":[[167,2],[548,2]]},"3938":{"position":[[584,2]]},"3966":{"position":[[1473,2],[1866,2]]}}}],["顶部",{"_index":2004,"t":{"306":{"position":[[22,2],[179,2]]},"308":{"position":[[19,2]]},"310":{"position":[[19,2]]},"325":{"position":[[181,2]]},"3389":{"position":[[406,2]]},"3401":{"position":[[96,2]]},"3672":{"position":[[69,2]]}}}],["项",{"_index":1689,"t":{"233":{"position":[[277,1],[360,1],[370,1],[380,1]]},"237":{"position":[[56,1],[106,1]]},"243":{"position":[[38,1],[66,1],[110,1],[158,1],[167,1],[207,1],[217,1]]},"245":{"position":[[66,1],[95,1]]},"247":{"position":[[119,1]]},"688":{"position":[[88,1]]},"1711":{"position":[[972,1]]},"2261":{"position":[[412,1]]},"2442":{"position":[[2085,1]]},"3464":{"position":[[460,1]]}}}],["项目",{"_index":89,"t":{"5":{"position":[[45,2],[115,2]]},"7":{"position":[[41,2],[111,2]]},"9":{"position":[[42,2],[74,2],[109,2]]},"13":{"position":[[40,2],[60,2]]},"48":{"position":[[13,2]]},"53":{"position":[[138,2]]},"64":{"position":[[177,2]]},"72":{"position":[[13,2]]},"77":{"position":[[138,2]]},"95":{"position":[[172,2]]},"106":{"position":[[42,2]]},"127":{"position":[[289,2],[1358,2]]},"199":{"position":[[617,2],[672,2]]},"206":{"position":[[60,2],[222,2],[292,2]]},"220":{"position":[[168,2],[786,2]]},"233":{"position":[[337,2]]},"300":{"position":[[11,2]]},"304":{"position":[[69,2],[91,2]]},"308":{"position":[[89,2],[379,2],[397,2]]},"310":{"position":[[87,2],[236,2],[257,2]]},"314":{"position":[[12,2],[413,2],[566,2]]},"316":{"position":[[12,2]]},"319":{"position":[[117,2],[410,2]]},"321":{"position":[[10,2],[128,2]]},"323":{"position":[[66,2],[81,2]]},"329":{"position":[[68,2]]},"338":{"position":[[17,2]]},"340":{"position":[[536,2],[1862,2]]},"373":{"position":[[185,2]]},"380":{"position":[[1,2],[15,2],[35,2]]},"384":{"position":[[7,2],[55,2]]},"390":{"position":[[0,2]]},"397":{"position":[[106,2]]},"399":{"position":[[26,2],[647,2]]},"401":{"position":[[125,2]]},"427":{"position":[[85,2]]},"429":{"position":[[76,2]]},"445":{"position":[[759,2],[857,2]]},"455":{"position":[[9,2],[95,2]]},"502":{"position":[[5,2]]},"510":{"position":[[483,2]]},"528":{"position":[[52,2],[130,2]]},"585":{"position":[[4,2]]},"681":{"position":[[31,2]]},"683":{"position":[[13,2]]},"698":{"position":[[849,2],[889,2]]},"711":{"position":[[13,2]]},"713":{"position":[[738,2]]},"879":{"position":[[47,2]]},"1313":{"position":[[274,2]]},"1372":{"position":[[42,2]]},"1444":{"position":[[42,2]]},"1470":{"position":[[2,2]]},"1488":{"position":[[631,2]]},"1495":{"position":[[575,2]]},"1507":{"position":[[26,2],[52,2]]},"1509":{"position":[[29,2],[152,2]]},"1511":{"position":[[139,2],[232,2],[256,2],[277,2],[301,2],[353,2],[509,2],[669,2],[737,2],[780,2],[886,2],[911,2],[1331,2],[1464,2],[2012,2],[2048,2],[2238,2],[2342,2],[2796,2],[2851,2],[2980,2],[3028,2],[3416,2],[3556,2],[3587,2],[3646,2],[3754,2],[3785,2],[3892,2],[3967,2],[4098,2],[4207,2]]},"1516":{"position":[[40,2]]},"1532":{"position":[[44,2]]},"1535":{"position":[[4,2]]},"1541":{"position":[[71,2],[236,2]]},"1547":{"position":[[44,2],[298,2]]},"1549":{"position":[[11,2],[41,2],[387,2]]},"1551":{"position":[[30,2],[56,2],[1183,2]]},"1699":{"position":[[90,2]]},"1745":{"position":[[4,2]]},"1747":{"position":[[6,2]]},"1755":{"position":[[326,2]]},"1761":{"position":[[337,2]]},"1775":{"position":[[3,2]]},"1777":{"position":[[13,2]]},"1795":{"position":[[3034,2]]},"1825":{"position":[[3,2]]},"1913":{"position":[[969,2]]},"1949":{"position":[[31,2]]},"1969":{"position":[[130,2]]},"1973":{"position":[[30,2],[50,2]]},"1979":{"position":[[718,2]]},"1981":{"position":[[46,2]]},"1983":{"position":[[42,2]]},"1987":{"position":[[30,2],[50,2]]},"1993":{"position":[[46,2]]},"2006":{"position":[[42,2]]},"2010":{"position":[[38,2],[58,2]]},"2016":{"position":[[54,2]]},"2264":{"position":[[115,2]]},"2290":{"position":[[41,2],[111,2]]},"2292":{"position":[[42,2],[74,2],[109,2]]},"2296":{"position":[[40,2],[60,2]]},"2298":{"position":[[61,2]]},"2311":{"position":[[149,2]]},"2490":{"position":[[3,2],[103,2]]},"2524":{"position":[[10,2]]},"2557":{"position":[[33,2]]},"2617":{"position":[[41,2]]},"2625":{"position":[[22,2]]},"2639":{"position":[[8,2]]},"2646":{"position":[[132,2]]},"2666":{"position":[[8,2]]},"2690":{"position":[[340,2]]},"2745":{"position":[[208,2]]},"2747":{"position":[[211,2]]},"2751":{"position":[[52,2],[56,2]]},"2768":{"position":[[1539,2]]},"2772":{"position":[[42,2]]},"2774":{"position":[[13,2],[23,2]]},"2776":{"position":[[0,2]]},"2788":{"position":[[9,2]]},"2803":{"position":[[35,2],[123,2]]},"2805":{"position":[[104,2]]},"2807":{"position":[[15,2]]},"2809":{"position":[[34,2],[41,2]]},"2813":{"position":[[22,2]]},"2834":{"position":[[34,2],[44,2]]},"2860":{"position":[[75,2]]},"2862":{"position":[[372,2]]},"2864":{"position":[[30,2],[65,2]]},"2875":{"position":[[525,2],[624,2]]},"2881":{"position":[[56,2]]},"2889":{"position":[[81,2]]},"3080":{"position":[[427,2]]},"3131":{"position":[[66,2]]},"3277":{"position":[[21,2]]},"3313":{"position":[[13,2]]},"3315":{"position":[[40,2]]},"3323":{"position":[[338,2]]},"3331":{"position":[[15,2]]},"3354":{"position":[[27,2]]},"3362":{"position":[[5,2]]},"3367":{"position":[[13,2],[25,2],[36,2]]},"3371":{"position":[[5,2],[163,2]]},"3373":{"position":[[13,2],[659,2]]},"3389":{"position":[[569,2]]},"3395":{"position":[[24,2]]},"3397":{"position":[[52,2],[133,2],[277,2]]},"3399":{"position":[[46,2]]},"3401":{"position":[[347,2]]},"3414":{"position":[[1,2],[29,2],[44,2],[90,2],[148,2],[164,2]]},"3610":{"position":[[27,2],[33,2]]},"3612":{"position":[[44,2]]},"3622":{"position":[[56,2],[113,2]]},"3626":{"position":[[329,2]]},"3636":{"position":[[560,2]]},"3924":{"position":[[2911,2]]},"3926":{"position":[[43,2],[664,2]]},"3928":{"position":[[84,2],[139,2]]},"3934":{"position":[[93,2],[137,2],[414,2],[458,2],[3012,2]]},"3938":{"position":[[93,2]]},"3954":{"position":[[687,2]]},"3966":{"position":[[1677,2]]},"3986":{"position":[[1622,2]]},"3992":{"position":[[3251,2]]},"4000":{"position":[[518,2]]}}}],["项目名称",{"_index":3401,"t":{"706":{"position":[[212,4]]},"1319":{"position":[[213,4]]},"1541":{"position":[[161,4],[228,4]]},"1547":{"position":[[173,4]]},"1551":{"position":[[84,4]]},"1973":{"position":[[35,4]]},"1987":{"position":[[35,4]]},"2010":{"position":[[43,4]]},"2864":{"position":[[35,4]]},"2875":{"position":[[788,4]]},"3323":{"position":[[24,4],[373,4],[395,4]]},"3636":{"position":[[603,4]]},"3912":{"position":[[1374,4],[1425,4],[1476,4]]},"3966":{"position":[[846,4]]}}}],["顺序",{"_index":1565,"t":{"212":{"position":[[19,2],[47,2]]},"214":{"position":[[15,2]]},"336":{"position":[[340,2],[348,2],[407,2]]},"338":{"position":[[1218,2]]},"340":{"position":[[1245,2],[1767,2]]},"361":{"position":[[35,2]]},"484":{"position":[[116,2],[164,2],[215,2],[276,2]]},"1422":{"position":[[15,2],[25,2],[40,2]]},"1511":{"position":[[191,2]]},"1611":{"position":[[854,2]]},"1753":{"position":[[288,2]]},"1905":{"position":[[40,2],[100,2],[139,2]]},"1957":{"position":[[16,2]]},"1961":{"position":[[143,2]]},"2326":{"position":[[232,2]]},"2583":{"position":[[7,2]]},"2848":{"position":[[824,2]]},"3924":{"position":[[1886,2]]}}}],["顺手",{"_index":7957,"t":{"3352":{"position":[[283,2]]}}}],["须",{"_index":3199,"t":{"615":{"position":[[416,1]]},"1313":{"position":[[278,1]]}}}],["顾",{"_index":4669,"t":{"1511":{"position":[[1147,1],[2225,1]]}}}],["顾名思义",{"_index":1657,"t":{"227":{"position":[[5,4]]},"2393":{"position":[[0,4]]},"3760":{"position":[[11,4]]}}}],["顿饭",{"_index":4839,"t":{"1511":{"position":[[3215,2]]}}}],["预",{"_index":2477,"t":{"415":{"position":[[346,1]]},"2991":{"position":[[352,1]]},"3940":{"position":[[595,1],[632,1]]}}}],["预先",{"_index":4017,"t":{"1141":{"position":[[30,2]]},"1869":{"position":[[56,2]]}}}],["预期",{"_index":2506,"t":{"423":{"position":[[29,2]]}}}],["领域",{"_index":3852,"t":{"986":{"position":[[1,2],[26,2],[40,2]]},"3131":{"position":[[45,2]]}}}],["颇",{"_index":6989,"t":{"2768":{"position":[[1510,1]]}}}],["颇感兴趣",{"_index":1195,"t":{"168":{"position":[[4,4]]},"176":{"position":[[28,4]]}}}],["频发",{"_index":7287,"t":{"2973":{"position":[[34,2]]}}}],["频率",{"_index":163,"t":{"11":{"position":[[696,2]]},"1917":{"position":[[7,2]]},"1923":{"position":[[8,2]]},"1931":{"position":[[7,2]]},"2294":{"position":[[725,2]]},"2335":{"position":[[52,2]]},"3922":{"position":[[732,2]]}}}],["频繁",{"_index":1692,"t":{"233":{"position":[[305,2]]},"1823":{"position":[[31,2]]},"3108":{"position":[[143,2]]},"3110":{"position":[[229,2]]},"3791":{"position":[[1347,2],[1357,2]]},"3914":{"position":[[3351,2]]},"3922":{"position":[[1659,2]]},"3924":{"position":[[1178,2]]},"3926":{"position":[[245,2]]},"3950":{"position":[[920,2]]}}}],["颗粒化",{"_index":4135,"t":{"1358":{"position":[[46,3]]}}}],["颜色",{"_index":3151,"t":{"606":{"position":[[243,2]]},"1555":{"position":[[99,2],[167,2],[323,2],[387,2]]},"3916":{"position":[[829,2]]}}}],["额外",{"_index":963,"t":{"127":{"position":[[352,2]]},"457":{"position":[[18,2]]},"1863":{"position":[[247,2]]},"3450":{"position":[[61,2]]},"3466":{"position":[[45,2],[1575,2],[1683,2]]},"3563":{"position":[[700,2]]},"3628":{"position":[[36,2]]},"3712":{"position":[[26,2]]},"3777":{"position":[[354,2]]},"3781":{"position":[[517,2],[641,2]]},"3783":{"position":[[19,2],[1237,2],[1250,2],[1306,2],[1371,2],[1432,2],[1526,2],[1640,2],[1729,2],[1765,2],[1776,2]]},"3920":{"position":[[243,2]]}}}],["风",{"_index":4806,"t":{"1511":{"position":[[2717,1]]}}}],["风格",{"_index":5071,"t":{"1578":{"position":[[194,2]]},"1625":{"position":[[34,2]]},"3626":{"position":[[524,2]]},"3708":{"position":[[941,2],[3201,2]]},"3930":{"position":[[366,2]]},"3956":{"position":[[573,2],[2541,2]]}}}],["风险",{"_index":1008,"t":{"127":{"position":[[1454,2]]},"233":{"position":[[284,2]]},"3914":{"position":[[1650,2]]},"3952":{"position":[[311,2]]}}}],["飙",{"_index":4190,"t":{"1383":{"position":[[72,1]]}}}],["食",{"_index":6962,"t":{"2768":{"position":[[968,1]]}}}],["餐饮",{"_index":7501,"t":{"3138":{"position":[[88,2]]}}}],["饭",{"_index":4725,"t":{"1511":{"position":[[1818,1]]}}}],["饼",{"_index":4582,"t":{"1511":{"position":[[244,1]]}}}],["首",{"_index":6064,"t":{"2261":{"position":[[439,1]]},"3273":{"position":[[825,1],[849,1],[870,1],[889,1],[911,1],[936,1],[963,1]]},"3464":{"position":[[487,1]]}}}],["首个",{"_index":6773,"t":{"2633":{"position":[[45,2]]},"3912":{"position":[[45,2]]},"3958":{"position":[[93,2]]}}}],["首先",{"_index":395,"t":{"46":{"position":[[5,2]]},"60":{"position":[[5,2]]},"70":{"position":[[5,2]]},"411":{"position":[[12,2]]},"1048":{"position":[[26,2]]},"1377":{"position":[[8,2]]},"1420":{"position":[[947,2]]},"1574":{"position":[[19,2]]},"2933":{"position":[[517,2]]}}}],["首列",{"_index":7821,"t":{"3273":{"position":[[827,2],[851,2],[872,2],[891,2],[913,2],[938,2],[965,2]]}}}],["首字母",{"_index":5176,"t":{"1641":{"position":[[403,3]]},"1661":{"position":[[220,3]]},"2377":{"position":[[24,3]]},"3023":{"position":[[221,3]]},"4006":{"position":[[271,3]]}}}],["首次",{"_index":890,"t":{"121":{"position":[[324,2]]},"1403":{"position":[[1,2]]},"3740":{"position":[[462,2]]}}}],["首页",{"_index":2003,"t":{"306":{"position":[[16,2]]},"1981":{"position":[[77,2]]},"1993":{"position":[[77,2]]},"2016":{"position":[[85,2]]},"3063":{"position":[[258,2]]},"3654":{"position":[[74,2]]},"3706":{"position":[[250,2]]},"3992":{"position":[[2616,2]]}}}],["香港",{"_index":6485,"t":{"2559":{"position":[[545,2]]}}}],["馨香",{"_index":4749,"t":{"1511":{"position":[[2109,2]]}}}],["马",{"_index":2546,"t":{"441":{"position":[[247,1],[510,1],[613,1]]}}}],["马上",{"_index":4600,"t":{"1511":{"position":[[481,2]]}}}],["马其顿",{"_index":6604,"t":{"2559":{"position":[[1680,3],[1690,3]]}}}],["马尔代夫",{"_index":6506,"t":{"2559":{"position":[[734,4]]}}}],["马拉地",{"_index":6611,"t":{"2559":{"position":[[1738,3],[1749,3]]}}}],["马来",{"_index":6606,"t":{"2559":{"position":[[1704,2],[1713,2],[1726,2]]}}}],["马来西亚",{"_index":6610,"t":{"2559":{"position":[[1730,4]]}}}],["驱动",{"_index":7464,"t":{"3131":{"position":[[47,2]]},"3476":{"position":[[8,2]]}}}],["驻留",{"_index":9637,"t":{"3950":{"position":[[395,2]]}}}],["驼峰",{"_index":5103,"t":{"1594":{"position":[[317,2]]},"1641":{"position":[[89,2],[398,2]]},"1647":{"position":[[23,2]]},"1661":{"position":[[215,2],[322,2]]},"3023":{"position":[[216,2],[323,2]]},"3620":{"position":[[62,2]]},"3779":{"position":[[1267,2],[1892,2]]},"3802":{"position":[[1885,2],[2669,2]]},"3817":{"position":[[2481,2]]},"3930":{"position":[[372,2]]},"3944":{"position":[[46,2],[606,2]]},"3986":{"position":[[556,2]]}}}],["骆驼",{"_index":5092,"t":{"1592":{"position":[[251,2]]},"1594":{"position":[[314,2]]},"1641":{"position":[[86,2]]},"1647":{"position":[[20,2]]},"1661":{"position":[[319,2]]},"3023":{"position":[[320,2]]}}}],["验",{"_index":8442,"t":{"3622":{"position":[[132,1]]}}}],["验收",{"_index":1302,"t":{"184":{"position":[[41,2]]}}}],["验证",{"_index":615,"t":{"98":{"position":[[169,2]]},"121":{"position":[[439,2],[732,2]]},"127":{"position":[[847,2],[955,2],[1046,2],[1139,2]]},"133":{"position":[[630,2],[652,2]]},"146":{"position":[[726,2],[734,2]]},"182":{"position":[[238,2]]},"457":{"position":[[72,2]]},"579":{"position":[[28,2]]},"583":{"position":[[14,2],[86,2],[99,2]]},"585":{"position":[[60,2],[436,2],[467,2],[514,2],[584,2]]},"587":{"position":[[32,2],[50,2],[90,2],[228,2],[253,2],[308,2],[334,2],[382,2],[440,2],[465,2],[506,2],[558,2],[594,2],[646,2],[762,2],[786,2],[799,2],[826,2],[841,2],[856,2],[883,2],[909,2],[934,2],[948,2],[985,2],[1036,2],[1044,2],[1646,2],[1798,2],[2039,2],[2073,2],[2095,2],[2108,2],[2167,2],[2185,2],[2209,2],[2241,2],[2253,2],[2258,2],[2264,2]]},"589":{"position":[[32,2],[48,2]]},"591":{"position":[[11,2],[20,2],[29,2],[44,2],[51,2],[87,2],[94,2],[102,2]]},"597":{"position":[[460,2],[592,2]]},"602":{"position":[[174,2],[289,2],[294,2],[320,2]]},"604":{"position":[[40,2],[56,2]]},"606":{"position":[[19,2],[510,2],[519,2],[525,2],[593,2],[652,2],[715,2],[800,2],[878,2],[930,2],[1023,2],[1356,2],[1379,2]]},"608":{"position":[[60,2],[66,2],[724,2],[758,2],[799,2],[822,2]]},"610":{"position":[[6,2],[62,2]]},"612":{"position":[[18,2],[74,2]]},"615":{"position":[[13,2],[39,2],[52,2],[66,2],[1089,2],[1109,2]]},"617":{"position":[[1411,2],[1690,2],[1888,2],[2168,2]]},"619":{"position":[[13,2],[23,2],[48,2],[96,2],[120,2]]},"621":{"position":[[34,2],[45,2],[56,2]]},"623":{"position":[[39,2],[45,2]]},"625":{"position":[[94,2]]},"627":{"position":[[40,2]]},"633":{"position":[[10,2],[35,2]]},"1683":{"position":[[273,2]]},"1911":{"position":[[33,2]]},"1923":{"position":[[111,2]]},"2495":{"position":[[15,2]]},"2534":{"position":[[36,2]]},"2619":{"position":[[95,2]]},"2701":{"position":[[57,2]]},"2703":{"position":[[23,2]]},"2725":{"position":[[4,2],[81,2],[117,2],[154,2],[577,2],[2194,2],[2599,2]]},"2727":{"position":[[814,2]]},"2733":{"position":[[52,2]]},"2782":{"position":[[223,2]]},"2790":{"position":[[4,2],[66,2],[83,2],[369,2]]},"3039":{"position":[[43,2],[127,2],[194,2],[262,2]]},"3041":{"position":[[58,2],[166,2],[257,2],[350,2]]},"3053":{"position":[[0,2],[24,2]]},"3055":{"position":[[50,2]]},"3246":{"position":[[86,2]]},"3350":{"position":[[47,2]]},"3508":{"position":[[72,2],[186,2]]},"3549":{"position":[[297,2]]},"3636":{"position":[[119,2]]},"3684":{"position":[[69,2]]},"3708":{"position":[[1854,2]]},"3920":{"position":[[1813,2]]},"3922":{"position":[[1737,2]]},"3924":{"position":[[1404,2],[1417,2],[1847,2]]},"3930":{"position":[[304,2]]},"3932":{"position":[[441,2],[1318,2],[1341,2],[1519,2],[1596,2]]},"3934":{"position":[[525,2],[1006,2]]},"3944":{"position":[[240,2]]},"3946":{"position":[[205,2]]},"3948":{"position":[[230,2]]},"3956":{"position":[[1322,2]]},"3974":{"position":[[181,2]]},"3978":{"position":[[679,2],[922,2]]},"3984":{"position":[[387,2]]},"3986":{"position":[[263,2],[279,2],[412,2],[417,2],[433,2]]},"3988":{"position":[[408,2]]},"3992":{"position":[[499,2],[2151,2],[2214,2],[3038,2],[3043,2],[3851,2],[4027,2]]},"3994":{"position":[[1272,2],[1278,2]]},"3996":{"position":[[259,2],[312,2],[564,2],[1251,2]]},"3998":{"position":[[302,2],[311,2],[704,2]]},"4000":{"position":[[249,2]]},"4006":{"position":[[450,2]]}}}],["骚",{"_index":5862,"t":{"1923":{"position":[[91,1]]},"2175":{"position":[[169,1]]}}}],["高",{"_index":165,"t":{"11":{"position":[[700,1]]},"225":{"position":[[57,1]]},"255":{"position":[[152,1]]},"518":{"position":[[570,1]]},"617":{"position":[[2855,1]]},"1050":{"position":[[42,1]]},"1383":{"position":[[73,1]]},"1877":{"position":[[67,1]]},"1905":{"position":[[154,1]]},"2294":{"position":[[729,1]]},"2335":{"position":[[55,1]]},"2579":{"position":[[25,1]]},"2615":{"position":[[23,1]]},"2915":{"position":[[45,1],[204,1]]},"2917":{"position":[[114,1]]},"3096":{"position":[[57,1]]},"3100":{"position":[[41,1]]},"3104":{"position":[[14,1]]},"3209":{"position":[[66,1]]},"3250":{"position":[[65,1]]},"3432":{"position":[[4106,1]]},"3912":{"position":[[745,1],[1902,1]]},"3916":{"position":[[836,1]]},"3922":{"position":[[737,1]]},"4004":{"position":[[359,1]]}}}],["高于",{"_index":5184,"t":{"1647":{"position":[[380,2]]},"3565":{"position":[[214,2]]}}}],["高层次",{"_index":7740,"t":{"3242":{"position":[[142,3]]},"3910":{"position":[[139,3]]},"3934":{"position":[[2247,3]]}}}],["高性能",{"_index":3712,"t":{"887":{"position":[[77,3]]},"2309":{"position":[[71,3]]},"2599":{"position":[[52,3]]},"2684":{"position":[[501,3]]},"3209":{"position":[[106,3]]},"3432":{"position":[[3542,3],[4030,3]]}}}],["高效",{"_index":1890,"t":{"265":{"position":[[9,2]]},"2311":{"position":[[48,2]]}}}],["高效率",{"_index":9470,"t":{"3930":{"position":[[1529,3]]}}}],["高枕无忧",{"_index":8059,"t":{"3414":{"position":[[159,4]]}}}],["高级",{"_index":1051,"t":{"131":{"position":[[17,2]]},"799":{"position":[[20,2],[37,2]]},"988":{"position":[[357,2]]},"1101":{"position":[[20,2],[37,2]]},"1107":{"position":[[85,2]]},"1155":{"position":[[20,2],[37,2]]},"1221":{"position":[[89,2]]},"1418":{"position":[[298,2]]},"2436":{"position":[[47,2]]},"2740":{"position":[[15,2]]},"3224":{"position":[[1655,2]]},"3742":{"position":[[0,2]]},"3962":{"position":[[202,2],[273,2],[461,2],[1740,2]]},"3980":{"position":[[60,2],[773,2]]},"3986":{"position":[[1429,2]]},"3996":{"position":[[823,2]]}}}],["高级别",{"_index":7534,"t":{"3150":{"position":[[19,3]]}}}],["高质量",{"_index":4549,"t":{"1509":{"position":[[237,3]]}}}],["高速",{"_index":7590,"t":{"3207":{"position":[[18,2]]}}}],["高频",{"_index":5334,"t":{"1711":{"position":[[691,2]]},"1823":{"position":[[3,2]]},"3791":{"position":[[1328,2]]},"3918":{"position":[[3532,2]]}}}],["高频率",{"_index":7512,"t":{"3142":{"position":[[109,3]]},"3914":{"position":[[2483,3]]}}}],["魔兽",{"_index":7497,"t":{"3138":{"position":[[60,2]]}}}],["魔术",{"_index":7535,"t":{"3150":{"position":[[53,2]]}}}],["鱼",{"_index":4884,"t":{"1511":{"position":[[3937,1]]}}}],["鲁",{"_index":4633,"t":{"1511":{"position":[[724,1]]}}}],["鸡腿",{"_index":4703,"t":{"1511":{"position":[[1540,2]]}}}],["鸣谢",{"_index":9614,"t":{"3946":{"position":[[473,2]]},"3950":{"position":[[946,2]]}}}],["鹏",{"_index":4722,"t":{"1511":{"position":[[1738,1]]}}}],["鹏程",{"_index":4790,"t":{"1511":{"position":[[2551,2]]}}}],["麦",{"_index":4580,"t":{"1511":{"position":[[242,1]]}}}],["麻烦",{"_index":4241,"t":{"1396":{"position":[[83,2]]},"1495":{"position":[[1315,2]]},"3118":{"position":[[57,2]]}}}],["麻雀虽小",{"_index":603,"t":{"98":{"position":[[107,4]]}}}],["黄",{"_index":4848,"t":{"1511":{"position":[[3398,1]]}}}],["黎巴嫩",{"_index":6447,"t":{"2559":{"position":[[169,3]]}}}],["黑",{"_index":6904,"t":{"2768":{"position":[[39,1]]}}}],["黑名单",{"_index":10046,"t":{"3982":{"position":[[574,3]]},"3984":{"position":[[736,3]]}}}],["黑盒",{"_index":7984,"t":{"3354":{"position":[[19,2]]}}}],["默认",{"_index":357,"t":{"28":{"position":[[13,2]]},"127":{"position":[[108,2],[357,2],[781,2],[860,2],[969,2],[1060,2],[1154,2],[1208,2],[1254,2],[1299,2],[1349,2]]},"129":{"position":[[597,2]]},"137":{"position":[[0,2]]},"144":{"position":[[368,2]]},"202":{"position":[[30,2]]},"204":{"position":[[8,2],[89,2]]},"206":{"position":[[101,2]]},"212":{"position":[[0,2]]},"220":{"position":[[1,2],[568,2]]},"229":{"position":[[81,2]]},"245":{"position":[[248,2]]},"288":{"position":[[278,2]]},"336":{"position":[[194,2]]},"359":{"position":[[196,2]]},"413":{"position":[[4,2]]},"415":{"position":[[51,2],[104,2],[195,2],[388,2],[420,2],[469,2]]},"427":{"position":[[122,2]]},"429":{"position":[[69,2]]},"484":{"position":[[0,2],[109,2]]},"500":{"position":[[57,2]]},"502":{"position":[[55,2]]},"506":{"position":[[66,2],[154,2]]},"514":{"position":[[372,2]]},"530":{"position":[[13,2]]},"532":{"position":[[41,2],[92,2],[149,2],[174,2],[217,2]]},"538":{"position":[[16,2]]},"593":{"position":[[24,2]]},"608":{"position":[[858,2],[902,2]]},"610":{"position":[[0,2]]},"615":{"position":[[564,2]]},"617":{"position":[[29,2]]},"619":{"position":[[26,2]]},"621":{"position":[[0,2]]},"653":{"position":[[0,2]]},"679":{"position":[[29,2]]},"683":{"position":[[11,2]]},"685":{"position":[[261,2]]},"694":{"position":[[29,2]]},"698":{"position":[[207,2],[344,2],[391,2],[854,2],[894,2],[939,2],[1030,2]]},"706":{"position":[[14,2]]},"711":{"position":[[11,2]]},"743":{"position":[[13,2]]},"751":{"position":[[0,2]]},"756":{"position":[[11,2]]},"879":{"position":[[7,2]]},"887":{"position":[[0,2]]},"919":{"position":[[0,2]]},"933":{"position":[[419,2]]},"939":{"position":[[78,2]]},"941":{"position":[[109,2]]},"947":{"position":[[41,2],[55,2],[460,2],[469,2]]},"949":{"position":[[554,2]]},"990":{"position":[[12,2],[49,2]]},"992":{"position":[[21,2],[59,2]]},"996":{"position":[[15,2],[46,2]]},"1000":{"position":[[29,2]]},"1002":{"position":[[29,2]]},"1004":{"position":[[31,2]]},"1006":{"position":[[31,2]]},"1008":{"position":[[30,2]]},"1010":{"position":[[113,2]]},"1012":{"position":[[21,2]]},"1014":{"position":[[25,2]]},"1039":{"position":[[13,2]]},"1041":{"position":[[39,2],[1124,2],[1351,2]]},"1056":{"position":[[394,2]]},"1066":{"position":[[906,2],[1658,2]]},"1131":{"position":[[86,2],[141,2],[180,2]]},"1214":{"position":[[0,2],[62,2]]},"1277":{"position":[[318,2]]},"1311":{"position":[[392,2],[451,2]]},"1317":{"position":[[372,2]]},"1319":{"position":[[14,2]]},"1353":{"position":[[0,2]]},"1392":{"position":[[148,2],[196,2]]},"1412":{"position":[[0,2],[165,2]]},"1416":{"position":[[376,2],[411,2]]},"1418":{"position":[[0,2]]},"1422":{"position":[[11,2]]},"1432":{"position":[[0,2]]},"1468":{"position":[[0,2],[35,2]]},"1474":{"position":[[403,2]]},"1566":{"position":[[12,2]]},"1582":{"position":[[31,2]]},"1592":{"position":[[7,2]]},"1594":{"position":[[9,2],[149,2]]},"1596":{"position":[[255,2]]},"1598":{"position":[[0,2],[19,2],[67,2]]},"1600":{"position":[[0,2],[35,2]]},"1609":{"position":[[0,2]]},"1611":{"position":[[328,2]]},"1623":{"position":[[224,2]]},"1625":{"position":[[0,2]]},"1627":{"position":[[0,2]]},"1631":{"position":[[362,2]]},"1641":{"position":[[26,2],[60,2],[104,2],[139,2],[168,2],[194,2],[221,2],[267,2],[311,2],[370,2],[410,2],[431,2]]},"1647":{"position":[[17,2],[50,2],[61,2]]},"1655":{"position":[[35,2]]},"1661":{"position":[[53,2],[67,2],[92,2],[106,2],[128,2],[154,2],[187,2],[227,2],[259,2],[281,2],[291,2],[342,2],[377,2],[424,2],[486,2],[536,2],[575,2],[580,2],[697,2],[722,2],[812,2],[838,2],[868,2]]},"1663":{"position":[[0,2]]},"1709":{"position":[[0,2]]},"1735":{"position":[[69,2]]},"1755":{"position":[[580,2]]},"1799":{"position":[[7,2],[720,2]]},"1801":{"position":[[1111,2],[3174,2],[3313,2],[3443,2]]},"1803":{"position":[[3305,2],[5167,2],[5526,2],[5674,2]]},"1805":{"position":[[7,2],[466,2]]},"1821":{"position":[[77,2],[165,2],[216,2],[253,2]]},"1841":{"position":[[54,2]]},"1871":{"position":[[33,2]]},"1873":{"position":[[99,2],[309,2]]},"1875":{"position":[[310,2],[401,2]]},"1885":{"position":[[28,2],[54,2],[90,2],[128,2],[146,2],[174,2],[241,2]]},"1887":{"position":[[292,2],[320,2],[369,2],[458,2],[493,2]]},"1957":{"position":[[0,2]]},"1961":{"position":[[0,2]]},"1979":{"position":[[868,2]]},"1981":{"position":[[15,2]]},"1991":{"position":[[264,2]]},"1993":{"position":[[15,2]]},"2014":{"position":[[264,2]]},"2016":{"position":[[15,2]]},"2096":{"position":[[143,2]]},"2237":{"position":[[13,2]]},"2245":{"position":[[8,2]]},"2255":{"position":[[33,2]]},"2285":{"position":[[33,2]]},"2298":{"position":[[0,2]]},"2305":{"position":[[58,2]]},"2311":{"position":[[402,2]]},"2315":{"position":[[0,2],[289,2]]},"2343":{"position":[[82,2]]},"2345":{"position":[[781,2],[849,2],[861,2]]},"2352":{"position":[[162,2]]},"2357":{"position":[[14,2]]},"2379":{"position":[[375,2]]},"2385":{"position":[[2,2]]},"2402":{"position":[[0,2]]},"2426":{"position":[[231,2]]},"2438":{"position":[[243,2]]},"2440":{"position":[[279,2]]},"2444":{"position":[[161,2],[186,2],[236,2],[307,2]]},"2508":{"position":[[0,2]]},"2522":{"position":[[143,2]]},"2542":{"position":[[120,2]]},"2553":{"position":[[59,2],[128,2],[204,2],[248,2]]},"2581":{"position":[[0,2]]},"2597":{"position":[[16,2]]},"2649":{"position":[[0,2]]},"2696":{"position":[[11,2]]},"2723":{"position":[[115,2]]},"2725":{"position":[[76,2],[2601,2]]},"2727":{"position":[[816,2]]},"2749":{"position":[[848,2]]},"2784":{"position":[[14,2]]},"2794":{"position":[[16,2]]},"2813":{"position":[[118,2]]},"2819":{"position":[[534,2]]},"2829":{"position":[[0,2]]},"2838":{"position":[[0,2]]},"2843":{"position":[[14,2]]},"2848":{"position":[[166,2],[1740,2]]},"2875":{"position":[[0,2]]},"2879":{"position":[[32,2],[70,2]]},"2881":{"position":[[0,2]]},"2897":{"position":[[159,2]]},"2903":{"position":[[0,2]]},"2929":{"position":[[488,2]]},"2933":{"position":[[622,2]]},"2945":{"position":[[488,2]]},"2949":{"position":[[422,2],[470,2]]},"2951":{"position":[[584,2]]},"2959":{"position":[[488,2]]},"2963":{"position":[[489,2]]},"2967":{"position":[[0,2]]},"2969":{"position":[[92,2]]},"2981":{"position":[[63,2],[140,2],[217,2],[276,2],[323,2],[387,2],[443,2],[502,2]]},"2985":{"position":[[0,2]]},"2991":{"position":[[57,2],[110,2],[201,2],[394,2],[426,2],[475,2]]},"3009":{"position":[[60,2],[86,2],[122,2],[160,2],[178,2],[206,2],[273,2]]},"3023":{"position":[[54,2],[68,2],[93,2],[107,2],[129,2],[155,2],[188,2],[228,2],[260,2],[282,2],[292,2],[339,2],[374,2],[421,2],[483,2],[533,2],[572,2],[577,2],[694,2],[719,2],[809,2],[835,2],[865,2]]},"3031":{"position":[[59,2],[128,2],[204,2],[248,2]]},"3033":{"position":[[113,2]]},"3039":{"position":[[56,2],[141,2],[208,2],[277,2],[323,2],[362,2],[394,2]]},"3041":{"position":[[71,2],[180,2],[271,2],[365,2],[419,2],[465,2],[510,2]]},"3047":{"position":[[204,2]]},"3053":{"position":[[28,2]]},"3063":{"position":[[62,2],[109,2],[122,2],[164,2],[206,2],[246,2],[309,2],[404,2],[513,2],[604,2],[652,2],[741,2],[786,2],[895,2],[948,2],[1004,2],[1058,2],[1142,2],[1189,2],[1405,2],[1524,2],[1554,2],[1629,2]]},"3075":{"position":[[0,2]]},"3162":{"position":[[12,2]]},"3168":{"position":[[0,2]]},"3189":{"position":[[0,2]]},"3207":{"position":[[175,2]]},"3248":{"position":[[16,2]]},"3287":{"position":[[729,2],[1160,2]]},"3296":{"position":[[0,2]]},"3416":{"position":[[109,2]]},"3420":{"position":[[306,2]]},"3428":{"position":[[58,2]]},"3430":{"position":[[1488,2],[1859,2]]},"3432":{"position":[[366,2],[590,2],[695,2],[921,2],[976,2],[2621,2]]},"3434":{"position":[[432,2],[771,2],[906,2],[992,2]]},"3440":{"position":[[16,2]]},"3442":{"position":[[0,2]]},"3446":{"position":[[248,2],[301,2],[365,2],[433,2],[508,2]]},"3448":{"position":[[242,2],[346,2],[548,2],[601,2],[669,2],[751,2],[831,2],[1025,2],[1093,2],[1174,2]]},"3460":{"position":[[12,2]]},"3468":{"position":[[0,2],[18,2]]},"3506":{"position":[[7,2]]},"3520":{"position":[[11,2]]},"3547":{"position":[[7,2]]},"3561":{"position":[[11,2]]},"3573":{"position":[[35,2]]},"3575":{"position":[[43,2]]},"3577":{"position":[[0,2],[48,2]]},"3579":{"position":[[257,2],[290,2]]},"3587":{"position":[[12,2],[67,2]]},"3589":{"position":[[41,2],[501,2],[527,2]]},"3597":{"position":[[11,2]]},"3601":{"position":[[28,2]]},"3632":{"position":[[13,2]]},"3634":{"position":[[10,2]]},"3636":{"position":[[5,2]]},"3640":{"position":[[703,2]]},"3650":{"position":[[13,2]]},"3654":{"position":[[5,2],[62,2]]},"3660":{"position":[[0,2]]},"3664":{"position":[[472,2]]},"3668":{"position":[[9,2]]},"3670":{"position":[[0,2]]},"3672":{"position":[[0,2]]},"3684":{"position":[[0,2]]},"3686":{"position":[[33,2],[381,2],[428,2]]},"3698":{"position":[[304,2],[313,2]]},"3704":{"position":[[813,2]]},"3706":{"position":[[54,2],[101,2],[114,2],[156,2],[198,2],[238,2],[301,2],[396,2],[505,2],[596,2],[644,2],[733,2],[778,2],[887,2],[940,2],[996,2],[1050,2],[1134,2],[1181,2],[1416,2],[1535,2],[1565,2],[1640,2]]},"3708":{"position":[[3862,2]]},"3712":{"position":[[0,2]]},"3716":{"position":[[871,2]]},"3764":{"position":[[0,2]]},"3768":{"position":[[0,2],[2402,2],[2437,2]]},"3774":{"position":[[0,2]]},"3791":{"position":[[17,2]]},"3844":{"position":[[677,2],[1315,2]]},"3860":{"position":[[16,2]]},"3910":{"position":[[1513,2]]},"3912":{"position":[[728,2],[2487,2],[2523,2]]},"3914":{"position":[[2135,2],[2183,2]]},"3916":{"position":[[742,2],[2480,2],[2485,2],[2527,2],[2595,2],[2716,2]]},"3918":{"position":[[1161,2],[3488,2],[3978,2]]},"3920":{"position":[[348,2],[1776,2],[1806,2]]},"3922":{"position":[[1348,2],[2008,2],[2211,2],[2255,2]]},"3924":{"position":[[444,2],[1400,2],[1564,2],[4353,2]]},"3930":{"position":[[1378,2]]},"3932":{"position":[[74,2],[123,2],[1430,2]]},"3934":{"position":[[568,2],[977,2]]},"3936":{"position":[[859,2]]},"3938":{"position":[[346,2]]},"3940":{"position":[[607,2]]},"3948":{"position":[[382,2]]},"3950":{"position":[[150,2]]},"3952":{"position":[[714,2]]},"3954":{"position":[[121,2],[593,2],[771,2]]},"3960":{"position":[[82,2],[656,2]]},"3962":{"position":[[168,2],[1225,2],[2081,2]]},"3966":{"position":[[163,2],[456,2],[1322,2]]},"3972":{"position":[[458,2]]},"3980":{"position":[[459,2]]},"3982":{"position":[[636,2]]},"3984":{"position":[[537,2]]},"3986":{"position":[[836,2]]},"3988":{"position":[[170,2]]},"3990":{"position":[[576,2],[589,2]]},"3992":{"position":[[809,2],[963,2]]},"3994":{"position":[[415,2],[515,2]]},"3998":{"position":[[393,2]]},"4000":{"position":[[27,2]]},"4006":{"position":[[317,2],[529,2]]}}}],["默认值",{"_index":2475,"t":{"415":{"position":[[316,3],[360,3]]},"457":{"position":[[53,3]]},"516":{"position":[[703,3]]},"1416":{"position":[[115,3],[320,3],[490,3]]},"1611":{"position":[[183,3],[790,3]]},"1633":{"position":[[130,3],[189,3]]},"1799":{"position":[[1011,3]]},"1887":{"position":[[528,3]]},"2426":{"position":[[307,3]]},"2466":{"position":[[45,3]]},"2701":{"position":[[60,3]]},"2703":{"position":[[26,3]]},"2727":{"position":[[25,3]]},"2733":{"position":[[28,3]]},"2991":{"position":[[322,3],[366,3]]},"3063":{"position":[[336,3]]},"3224":{"position":[[159,3]]},"3579":{"position":[[280,3]]},"3646":{"position":[[149,3]]},"3664":{"position":[[38,3],[45,3],[77,3],[100,3],[252,3]]},"3706":{"position":[[328,3]]},"3777":{"position":[[57,3]]},"3798":{"position":[[58,3]]},"3808":{"position":[[3154,3],[3187,3],[3220,3],[3258,3]]},"3819":{"position":[[1616,3]]},"3912":{"position":[[1032,3]]},"3992":{"position":[[629,3],[3372,3]]}}}],["鼻子",{"_index":4642,"t":{"1511":{"position":[[816,2]]}}}],["龙飞",{"_index":4764,"t":{"1511":{"position":[[2226,2]]}}}]],"pipeline":["stemmer"]}}] \ No newline at end of file diff --git a/handbook/build/search/index.html b/handbook/build/search/index.html new file mode 100644 index 00000000000..6548f017137 --- /dev/null +++ b/handbook/build/search/index.html @@ -0,0 +1,17 @@ + + + + + +Search the documentation + + + + + + + + + + \ No newline at end of file diff --git a/handbook/build/sitemap.xml b/handbook/build/sitemap.xml new file mode 100644 index 00000000000..aad9ed87cfd --- /dev/null +++ b/handbook/build/sitemap.xml @@ -0,0 +1 @@ +https://furion.baiqian.ltd/blogweekly0.5https://furion.baiqian.ltd/blog/archiveweekly0.5https://furion.baiqian.ltd/blog/consoleweekly0.5https://furion.baiqian.ltd/blog/fileupload-downloadweekly0.5https://furion.baiqian.ltd/blog/global-usingsweekly0.5https://furion.baiqian.ltd/blog/httpcontextweekly0.5https://furion.baiqian.ltd/blog/net6-preview5weekly0.5https://furion.baiqian.ltd/blog/net6-preview6weekly0.5https://furion.baiqian.ltd/blog/net6-preview7weekly0.5https://furion.baiqian.ltd/blog/tagsweekly0.5https://furion.baiqian.ltd/blog/tags/downloadweekly0.5https://furion.baiqian.ltd/blog/tags/furionweekly0.5https://furion.baiqian.ltd/blog/tags/furosweekly0.5https://furion.baiqian.ltd/blog/tags/httpcontextweekly0.5https://furion.baiqian.ltd/blog/tags/netweekly0.5https://furion.baiqian.ltd/blog/tags/net-5weekly0.5https://furion.baiqian.ltd/blog/tags/net-6weekly0.5https://furion.baiqian.ltd/blog/tags/netcoreweekly0.5https://furion.baiqian.ltd/blog/tags/uploadweekly0.5https://furion.baiqian.ltd/searchweekly0.5https://furion.baiqian.ltd/docs/weekly0.5https://furion.baiqian.ltd/docs/appstartupweekly0.5https://furion.baiqian.ltd/docs/auditweekly0.5https://furion.baiqian.ltd/docs/auth-controlweekly0.5https://furion.baiqian.ltd/docs/authorweekly0.5https://furion.baiqian.ltd/docs/benchmarkweekly0.5https://furion.baiqian.ltd/docs/bingfaweekly0.5https://furion.baiqian.ltd/docs/cacheweekly0.5https://furion.baiqian.ltd/docs/caseweekly0.5https://furion.baiqian.ltd/docs/clayobjweekly0.5https://furion.baiqian.ltd/docs/clientapiweekly0.5https://furion.baiqian.ltd/docs/componentweekly0.5https://furion.baiqian.ltd/docs/configurationweekly0.5https://furion.baiqian.ltd/docs/contributeweekly0.5https://furion.baiqian.ltd/docs/corsweekly0.5https://furion.baiqian.ltd/docs/courseweekly0.5https://furion.baiqian.ltd/docs/cronweekly0.5https://furion.baiqian.ltd/docs/dapperweekly0.5https://furion.baiqian.ltd/docs/data-validationweekly0.5https://furion.baiqian.ltd/docs/dbcontextweekly0.5https://furion.baiqian.ltd/docs/dbcontext-addweekly0.5https://furion.baiqian.ltd/docs/dbcontext-add-or-updateweekly0.5https://furion.baiqian.ltd/docs/dbcontext-auditweekly0.5https://furion.baiqian.ltd/docs/dbcontext-batchweekly0.5https://furion.baiqian.ltd/docs/dbcontext-code-firstweekly0.5https://furion.baiqian.ltd/docs/dbcontext-db-firstweekly0.5https://furion.baiqian.ltd/docs/dbcontext-deleteweekly0.5https://furion.baiqian.ltd/docs/dbcontext-entitytriggerweekly0.5https://furion.baiqian.ltd/docs/dbcontext-filterweekly0.5https://furion.baiqian.ltd/docs/dbcontext-functionweekly0.5https://furion.baiqian.ltd/docs/dbcontext-hight-queryweekly0.5https://furion.baiqian.ltd/docs/dbcontext-Interceptorweekly0.5https://furion.baiqian.ltd/docs/dbcontext-locatorweekly0.5https://furion.baiqian.ltd/docs/dbcontext-multi-databaseweekly0.5https://furion.baiqian.ltd/docs/dbcontext-procweekly0.5https://furion.baiqian.ltd/docs/dbcontext-queryweekly0.5https://furion.baiqian.ltd/docs/dbcontext-read-writeweekly0.5https://furion.baiqian.ltd/docs/dbcontext-repositoryweekly0.5https://furion.baiqian.ltd/docs/dbcontext-seed-dataweekly0.5https://furion.baiqian.ltd/docs/dbcontext-sqlweekly0.5https://furion.baiqian.ltd/docs/dbcontext-sql-proxyweekly0.5https://furion.baiqian.ltd/docs/dbcontext-sql-templateweekly0.5https://furion.baiqian.ltd/docs/dbcontext-startweekly0.5https://furion.baiqian.ltd/docs/dbcontext-updateweekly0.5https://furion.baiqian.ltd/docs/dbcontext-viewweekly0.5https://furion.baiqian.ltd/docs/dependency-injectionweekly0.5https://furion.baiqian.ltd/docs/deploy-dockerweekly0.5https://furion.baiqian.ltd/docs/deploy-docker-autoweekly0.5https://furion.baiqian.ltd/docs/deploy-iisweekly0.5https://furion.baiqian.ltd/docs/deploy-nginxweekly0.5https://furion.baiqian.ltd/docs/devopsweekly0.5https://furion.baiqian.ltd/docs/donateweekly0.5https://furion.baiqian.ltd/docs/dotnet-toolsweekly0.5https://furion.baiqian.ltd/docs/dynamic-api-controllerweekly0.5https://furion.baiqian.ltd/docs/efcore-recommendweekly0.5https://furion.baiqian.ltd/docs/encryptionweekly0.5https://furion.baiqian.ltd/docs/entityweekly0.5https://furion.baiqian.ltd/docs/event-busweekly0.5https://furion.baiqian.ltd/docs/event-bus-oldweekly0.5https://furion.baiqian.ltd/docs/file-providerweekly0.5https://furion.baiqian.ltd/docs/filterweekly0.5https://furion.baiqian.ltd/docs/friendly-exceptionweekly0.5https://furion.baiqian.ltd/docs/get-startweekly0.5https://furion.baiqian.ltd/docs/get-start-net6weekly0.5https://furion.baiqian.ltd/docs/get-start-net7weekly0.5https://furion.baiqian.ltd/docs/global/appweekly0.5https://furion.baiqian.ltd/docs/global/datavalidatorweekly0.5https://furion.baiqian.ltd/docs/global/dbweekly0.5https://furion.baiqian.ltd/docs/global/fsweekly0.5https://furion.baiqian.ltd/docs/global/jsonweekly0.5https://furion.baiqian.ltd/docs/global/jsonserializerweekly0.5https://furion.baiqian.ltd/docs/global/jwtweekly0.5https://furion.baiqian.ltd/docs/global/lweekly0.5https://furion.baiqian.ltd/docs/global/linqexpressionweekly0.5https://furion.baiqian.ltd/docs/global/logweekly0.5https://furion.baiqian.ltd/docs/global/messagecenterweekly0.5https://furion.baiqian.ltd/docs/global/oopsweekly0.5https://furion.baiqian.ltd/docs/global/schedularweekly0.5https://furion.baiqian.ltd/docs/global/scopedweekly0.5https://furion.baiqian.ltd/docs/global/shttpweekly0.5https://furion.baiqian.ltd/docs/global/sparetimeweekly0.5https://furion.baiqian.ltd/docs/global/tpweekly0.5https://furion.baiqian.ltd/docs/globalusingweekly0.5https://furion.baiqian.ltd/docs/httpweekly0.5https://furion.baiqian.ltd/docs/httpcontextweekly0.5https://furion.baiqian.ltd/docs/idgeneratorweekly0.5https://furion.baiqian.ltd/docs/injectweekly0.5https://furion.baiqian.ltd/docs/ipcweekly0.5https://furion.baiqian.ltd/docs/jobweekly0.5https://furion.baiqian.ltd/docs/job-oldweekly0.5https://furion.baiqian.ltd/docs/json-serializationweekly0.5https://furion.baiqian.ltd/docs/jsonschemaweekly0.5https://furion.baiqian.ltd/docs/local-languageweekly0.5https://furion.baiqian.ltd/docs/loggingweekly0.5https://furion.baiqian.ltd/docs/middlewareweekly0.5https://furion.baiqian.ltd/docs/module-devweekly0.5https://furion.baiqian.ltd/docs/mongodbweekly0.5https://furion.baiqian.ltd/docs/net5-to-net6weekly0.5https://furion.baiqian.ltd/docs/net6-to-net7weekly0.5https://furion.baiqian.ltd/docs/nuget-localweekly0.5https://furion.baiqian.ltd/docs/object-mapperweekly0.5https://furion.baiqian.ltd/docs/optionsweekly0.5https://furion.baiqian.ltd/docs/performanceweekly0.5https://furion.baiqian.ltd/docs/pillar-of-humiliationweekly0.5https://furion.baiqian.ltd/docs/pm2weekly0.5https://furion.baiqian.ltd/docs/positionweekly0.5https://furion.baiqian.ltd/docs/process-serviceweekly0.5https://furion.baiqian.ltd/docs/referenceweekly0.5https://furion.baiqian.ltd/docs/saasweekly0.5https://furion.baiqian.ltd/docs/sensitive-detectionweekly0.5https://furion.baiqian.ltd/docs/serverunweekly0.5https://furion.baiqian.ltd/docs/sesssion-stateweekly0.5https://furion.baiqian.ltd/docs/settings/appsettingsweekly0.5https://furion.baiqian.ltd/docs/settings/corsaccessorsettingsweekly0.5https://furion.baiqian.ltd/docs/settings/dependencyinjectionsettingsweekly0.5https://furion.baiqian.ltd/docs/settings/dynamicapicontrollersettingsweekly0.5https://furion.baiqian.ltd/docs/settings/friendlyexceptionsettingsweekly0.5https://furion.baiqian.ltd/docs/settings/jwtsettingsweekly0.5https://furion.baiqian.ltd/docs/settings/localizationsettingsweekly0.5https://furion.baiqian.ltd/docs/settings/specificationdocumentsettingsweekly0.5https://furion.baiqian.ltd/docs/settings/unifyresultsettingsweekly0.5https://furion.baiqian.ltd/docs/settings/validationTypemessagesettingsweekly0.5https://furion.baiqian.ltd/docs/signalrweekly0.5https://furion.baiqian.ltd/docs/singlefileweekly0.5https://furion.baiqian.ltd/docs/sourceweekly0.5https://furion.baiqian.ltd/docs/specification-documentweekly0.5https://furion.baiqian.ltd/docs/split-dbweekly0.5https://furion.baiqian.ltd/docs/sqlsugarweekly0.5https://furion.baiqian.ltd/docs/sqlsugar-oldweekly0.5https://furion.baiqian.ltd/docs/targetweekly0.5https://furion.baiqian.ltd/docs/templateweekly0.5https://furion.baiqian.ltd/docs/tranweekly0.5https://furion.baiqian.ltd/docs/unittestweekly0.5https://furion.baiqian.ltd/docs/upgradeweekly0.5https://furion.baiqian.ltd/docs/view-engineweekly0.5https://furion.baiqian.ltd/docs/virtual-deployweekly0.5https://furion.baiqian.ltd/docs/vsfastweekly0.5https://furion.baiqian.ltd/weekly0.5 \ No newline at end of file diff --git a/handbook/docs/job.mdx b/handbook/docs/job.mdx index 66b11604498..cbf9d268e6b 100644 --- a/handbook/docs/job.mdx +++ b/handbook/docs/job.mdx @@ -2870,7 +2870,7 @@ var isExist = scheduler.ContainsTrigger("trigger1"); ### 26.1.11.16 删除当前作业 -```cs showLineNumbers +```cs showLineNumbers {2,5} // 返回 ScheduleResult 类型,如果添加成功返回 ScheduleResult.Succeed,否则返回 ScheduleResult.Faild var schedulerResult = scheduler.TryRemove(); diff --git a/tools/Furion.Tools/Furion.Tools.CommandLine/Furion.Tools.CommandLine.csproj b/tools/Furion.Tools/Furion.Tools.CommandLine/Furion.Tools.CommandLine.csproj index 08c6d2ab7cb..a7fb116b10d 100644 --- a/tools/Furion.Tools/Furion.Tools.CommandLine/Furion.Tools.CommandLine.csproj +++ b/tools/Furion.Tools/Furion.Tools.CommandLine/Furion.Tools.CommandLine.csproj @@ -2,7 +2,7 @@ net5.0;net6.0;net7.0 - 4.8.0-beta.14 + 4.8.0-beta.15 false Furion 包管理工具开发库 diff --git a/tools/Furion.Tools/Furion.Tools/Furion.Tools.csproj b/tools/Furion.Tools/Furion.Tools/Furion.Tools.csproj index 58d64c1394c..9ef787b894a 100644 --- a/tools/Furion.Tools/Furion.Tools/Furion.Tools.csproj +++ b/tools/Furion.Tools/Furion.Tools/Furion.Tools.csproj @@ -3,13 +3,13 @@ net5.0;net6.0;net7.0 Exe - 4.8.0-beta.14 + 4.8.0-beta.15 furion Furion 工具链 - +